Files
oh-my-openagent/src/tools/AGENTS.md
Sisyphus ce4ceeefe8 feat(tools): add session management tools for OpenCode sessions (#227)
* feat(tools): add session management tools for OpenCode sessions

- Add session_list tool for listing sessions with filtering
- Add session_read tool for reading session messages and history
- Add session_search tool for full-text search across sessions
- Add session_info tool for session metadata inspection
- Add comprehensive tests for storage, utils, and tools
- Update documentation in AGENTS.md

Closes #132

* fix(session-manager): add Windows compatibility for storage paths

- Create shared/data-path.ts utility for cross-platform data directory resolution
- On Windows: uses %LOCALAPPDATA% (e.g., C:\Users\Username\AppData\Local)
- On Unix: uses $XDG_DATA_HOME or ~/.local/share (XDG Base Directory spec)
- Update session-manager/constants.ts to use getOpenCodeStorageDir()
- Update hook-message-injector/constants.ts to use same utility
- Remove dependency on xdg-basedir package in session-manager
- Follows existing pattern from auto-update-checker for consistency

---------

Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
2025-12-25 17:04:16 +09:00

3.7 KiB

TOOLS KNOWLEDGE BASE

OVERVIEW

Custom tools extending agent capabilities: LSP integration (11 tools), AST-aware code search/replace, file operations with timeouts, background task management.

STRUCTURE

tools/
├── ast-grep/           # AST-aware code search/replace (25 languages)
│   ├── cli.ts          # @ast-grep/cli subprocess
│   ├── napi.ts         # @ast-grep/napi native binding (preferred)
│   ├── constants.ts, types.ts, tools.ts, utils.ts
├── background-task/    # Async agent task management
├── call-omo-agent/     # Spawn explore/librarian agents
├── glob/               # File pattern matching (timeout-safe)
├── grep/               # Content search (timeout-safe)
├── interactive-bash/   # Tmux session management
├── look-at/            # Multimodal analysis (PDF, images)
├── lsp/                # 11 LSP tools
│   ├── client.ts       # LSP connection lifecycle
│   ├── config.ts       # Server configurations
│   ├── tools.ts        # Tool implementations
│   └── types.ts
├── session-manager/    # OpenCode session file management
│   ├── constants.ts    # Storage paths, descriptions
│   ├── types.ts        # Session data interfaces
│   ├── storage.ts      # File I/O operations
│   ├── utils.ts        # Formatting, filtering
│   └── tools.ts        # Tool implementations
├── slashcommand/       # Slash command execution
└── index.ts            # builtinTools export

TOOL CATEGORIES

Category Tools Purpose
LSP lsp_hover, lsp_goto_definition, lsp_find_references, lsp_document_symbols, lsp_workspace_symbols, lsp_diagnostics, lsp_servers, lsp_prepare_rename, lsp_rename, lsp_code_actions, lsp_code_action_resolve IDE-like code intelligence
AST ast_grep_search, ast_grep_replace Pattern-based code search/replace
File Search grep, glob Content and file pattern matching
Session session_list, session_read, session_search, session_info OpenCode session file management
Background background_task, background_output, background_cancel Async agent orchestration
Multimodal look_at PDF/image analysis via Gemini
Terminal interactive_bash Tmux session control
Commands slashcommand Execute slash commands
Agents call_omo_agent Spawn explore/librarian

HOW TO ADD A TOOL

  1. Create directory: src/tools/my-tool/
  2. Create files:
    • constants.ts: TOOL_NAME, TOOL_DESCRIPTION
    • types.ts: Parameter/result interfaces
    • tools.ts: Tool implementation (returns OpenCode tool object)
    • index.ts: Barrel export
    • utils.ts: Helpers (optional)
  3. Add to builtinTools in src/tools/index.ts

LSP SPECIFICS

  • Client lifecycle: Lazy init on first use, auto-shutdown on idle
  • Config priority: opencode.json > oh-my-opencode.json > defaults
  • Supported servers: typescript-language-server, pylsp, gopls, rust-analyzer, etc.
  • Custom servers: Add via lsp config in oh-my-opencode.json

AST-GREP SPECIFICS

  • Meta-variables: $VAR (single node), $$$ (multiple nodes)
  • Languages: 25 supported (typescript, tsx, python, rust, go, etc.)
  • Binding: Prefers @ast-grep/napi (native), falls back to @ast-grep/cli
  • Pattern must be valid AST: export async function $NAME($$$) { $$$ } not fragments

ANTI-PATTERNS (TOOLS)

  • No timeout: Always use timeout for file operations (default 60s)
  • Blocking main thread: Use async/await, never sync file ops
  • Ignoring LSP errors: Gracefully handle server not found/crashed
  • Raw subprocess for ast-grep: Prefer napi binding for performance