--- name: termdock-ast description: "Use the Termdock AST API to locate symbols, dependencies, callers/callees, or impact before exploring unknown code. Skip when the user gives an exact file path or only needs a literal string search." --- # Termdock AST API ## When to Use This Skill **Use AST API first when:** - The user asks "where is X", "who calls X", "what does X call", or "what depends on X" - You need a file path or symbol ownership before editing - You expect a change to touch multiple files or affect behavior - You are about to run broad search without a known target **Skip AST API when:** - The user provides an exact file path or a snippet to edit - The task is doc-only or config-only (SKILL.md, README, settings) - You only need a literal-string search **Default rule:** Use AST for discovery and impact; skip it for known-file edits. **If API is unavailable:** Fall back to `rg`/`rg --files` and note the limitation. --- ## Quick Start ### Step 1: Get Workspace ID (Required First) ```bash curl -s 'http://localhost:3033/api/workspaces' | jq '.data.workspaces[0].id' ``` Save this ID for all subsequent calls. ### Step 2: Choose Your Query Type | Goal | API | Example | |------|-----|---------| | Find symbol by name | `/api/search` | "Where is UserService?" | | See file imports/exports | `/api/graph/deps` | "What does this file import?" | | Find callers | `/api/graph/callers` | "Who calls this function?" | | Find callees | `/api/graph/calls` | "What does this function call?" | | Impact analysis | `/api/impact` | "What breaks if I change this?" | --- ## API Reference ### 1. Search Symbols ```bash curl 'http://localhost:3033/api/search?q=&workspace=&limit=10' ``` **Response fields:** - `symbolId`: Use for callers/calls queries - `file`: Absolute path - `line`: 0-indexed (add 1 for display) - `type`: 5=Class, 6=Method, 11=Interface, 12=Function ### 2. File Dependencies ```bash curl 'http://localhost:3033/api/graph/deps?file=src/path/to/file.ts&workspace=' ``` Returns: imports (what this file uses) and exports (what it provides) ### 3. Who Calls This? ```bash curl 'http://localhost:3033/api/graph/callers?to=&workspace=' ``` ### 4. What Does This Call? ```bash curl 'http://localhost:3033/api/graph/calls?from=&workspace=' ``` ### 5. Impact Analysis ```bash curl 'http://localhost:3033/api/impact?symbolId=&depth=2&workspace=' ``` Returns all symbols and files affected by changing this symbol. --- ## Decision Flowchart ``` User asks about code | v Is it a "where is X?" question? |yes |no v v /api/search Is it about dependencies? | |yes |no v v v Got symbolId? /api/graph/deps Is it about call chain? |yes |yes |no v v v Need callers? -----> /api/graph/callers Use other tools Need callees? -----> /api/graph/calls Need impact? -----> /api/impact ``` --- ## Common Patterns ### Pattern A: Find and Understand a Class ```bash # 1. Find it curl 'http://localhost:3033/api/search?q=TerminalService&workspace=ws_xxx&limit=1' # Note: symbolId, file # 2. See dependencies curl 'http://localhost:3033/api/graph/deps?file=src/main/services/TerminalService.ts&workspace=ws_xxx' # 3. Now read the file with context ``` ### Pattern B: Trace Usage ```bash # 1. Find function curl 'http://localhost:3033/api/search?q=createSession&workspace=ws_xxx&limit=5' # Pick the right symbolId # 2. Find all callers curl 'http://localhost:3033/api/graph/callers?to=&workspace=ws_xxx' ``` ### Pattern C: Safe Refactoring ```bash # Before changing a function, check impact curl 'http://localhost:3033/api/impact?symbolId=&depth=2&workspace=ws_xxx' # Review impactedFiles before making changes ``` --- ## Error Handling | Error | Cause | Action | |-------|-------|--------| | No workspace found | API not running | Start Termdock app | | Empty search results | Symbol not indexed | Try partial name or rebuild index | | 404 on symbolId | Stale ID after code change | Re-search to get new ID | **Rebuild index after code changes:** ```bash curl -X POST 'http://localhost:3033/api/index/update' -H 'Content-Type: application/json' -d '{"workspace":""}' ``` --- ## Response Format All APIs return: ```json { "success": true|false, "data": {...}, "error": {"code": "...", "message": "..."} } ``` Always check `success` before using `data`. --- ## Key Notes 1. **Line numbers are 0-indexed** - Add 1 when showing to users 2. **Use relative paths** for /api/graph/deps (e.g., `src/main/...`) 3. **Symbol IDs are stable** until code changes 4. **API base**: `http://localhost:3033` (prod) or `:3032` (dev)