token-pilot 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +35 -4
- package/README.md +54 -25
- package/dist/core/validation.d.ts +20 -15
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +52 -45
- package/dist/core/validation.js.map +1 -1
- package/dist/formatters/structure.js +86 -13
- package/dist/formatters/structure.js.map +1 -1
- package/dist/handlers/outline.d.ts +11 -0
- package/dist/handlers/outline.d.ts.map +1 -0
- package/dist/handlers/outline.js +137 -0
- package/dist/handlers/outline.js.map +1 -0
- package/dist/handlers/read-for-edit.d.ts +17 -0
- package/dist/handlers/read-for-edit.d.ts.map +1 -0
- package/dist/handlers/read-for-edit.js +91 -0
- package/dist/handlers/read-for-edit.js.map +1 -0
- package/dist/handlers/read-symbol.d.ts +1 -0
- package/dist/handlers/read-symbol.d.ts.map +1 -1
- package/dist/handlers/read-symbol.js +53 -24
- package/dist/handlers/read-symbol.js.map +1 -1
- package/dist/handlers/related-files.d.ts +11 -0
- package/dist/handlers/related-files.d.ts.map +1 -0
- package/dist/handlers/related-files.js +114 -0
- package/dist/handlers/related-files.js.map +1 -0
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +63 -142
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,11 +5,43 @@ All notable changes to Token Pilot will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2026-03-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`read_for_edit`** — killer feature for edit workflow. Returns RAW code (no line numbers) around a symbol or line, ready to copy as `old_string` for Edit. 97% fewer tokens than reading full file before editing.
|
|
12
|
+
- **`related_files`** — import graph for any file: what it imports, what imports it, test files. Saves 3-5 Read calls per task.
|
|
13
|
+
- **`outline`** — compact overview of all code files in a directory. One call instead of 5-6 smart_read calls. Framework-aware: shows HTTP routes for NestJS controllers.
|
|
14
|
+
- **`read_symbol` show parameter** — `show: "full"|"head"|"tail"|"outline"` controls truncation. Default: auto (full ≤300 lines, outline >300).
|
|
15
|
+
- **Framework-aware decorators** — smart_read/outline parse NestJS (`@Controller`+`@Get` → HTTP routes), TypeORM (`@Column` → types), class-validator (`@IsEmail` → constraints).
|
|
16
|
+
|
|
17
|
+
### Removed
|
|
18
|
+
- **`search_code`** — worse than Grep in practice, find_usages + Grep cover all use cases
|
|
19
|
+
- **`export_ast_index`** — never used in real work, infrastructure tool only
|
|
20
|
+
- **`context_status`** — debugging tool, not user-facing
|
|
21
|
+
- **`forget`** — manual context management = poor design, should be automatic
|
|
22
|
+
- **`changed_symbols`** — git diff + smart_read covers this use case
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- **12 focused tools** instead of 14 — removed 5 low-value, added 3 high-impact
|
|
26
|
+
- Edit-heavy sessions: 5-10% → 40-50% token savings (via read_for_edit)
|
|
27
|
+
- Average sessions: 20-25% → 45-55% token savings
|
|
28
|
+
|
|
29
|
+
## [0.4.1] - 2026-03-02
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- **Auto-install PreToolUse hook**: hook installs automatically on server start (Claude Code), no manual `install-hook` needed
|
|
33
|
+
- **AI instructions template**: README includes ready-to-copy block for `.cursorrules` / `CLAUDE.md`
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- **Tool descriptions rewritten** — explicit "ALWAYS use instead of Read/cat", "use instead of Grep" for AI prioritization
|
|
37
|
+
- README updated: PreToolUse hook section, MCP Tools table with "Instead of" column
|
|
38
|
+
|
|
8
39
|
## [0.4.0] - 2026-03-02
|
|
9
40
|
|
|
10
41
|
### Added
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
42
|
+
- **Python class method parser**: smart_read/read_symbol shows all methods inside Python classes with visibility, decorators, async detection
|
|
43
|
+
- **PHP class method parser**: same for PHP classes with public/private/protected, static
|
|
44
|
+
- **Version display**: `project_overview` and `session_analytics` show `TOKEN PILOT v{version}`
|
|
13
45
|
|
|
14
46
|
### Changed
|
|
15
47
|
- **Removed find_callers** — did not save tokens vs grep, ast-index limitation with `this.method()` calls
|
|
@@ -18,8 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
18
50
|
- **14 focused tools** instead of 17 — only tools that actually save tokens or provide unique value
|
|
19
51
|
|
|
20
52
|
### Fixed
|
|
21
|
-
- **
|
|
22
|
-
- **Mega-symbol truncation** (from 0.3.2): symbols >300 lines show head + tail + method outline instead of 71KB overflow
|
|
53
|
+
- **Mega-symbol truncation**: symbols >300 lines show head (50) + tail (30) + method outline instead of 71KB overflow
|
|
23
54
|
- **Recursive findFlat**: unqualified method names (`run`, `_build_summary`) found inside class children
|
|
24
55
|
|
|
25
56
|
## [0.3.2] - 2026-03-01
|
package/README.md
CHANGED
|
@@ -94,48 +94,77 @@ brew tap defendend/ast-index && brew install ast-index
|
|
|
94
94
|
npx token-pilot install-ast-index
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
### PreToolUse Hook (
|
|
97
|
+
### PreToolUse Hook (auto-installed for Claude Code)
|
|
98
98
|
|
|
99
|
-
Intercepts `Read` calls for large code files and suggests `smart_read
|
|
99
|
+
Intercepts `Read` calls for large code files and suggests `smart_read`. **Installed automatically** when the MCP server starts. Manual commands:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
|
-
npx token-pilot install-hook #
|
|
102
|
+
npx token-pilot install-hook # Force re-install
|
|
103
103
|
npx token-pilot uninstall-hook # Remove
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
##
|
|
106
|
+
## AI Instructions (Important)
|
|
107
|
+
|
|
108
|
+
After installing Token Pilot, add these instructions to your project so the AI uses Token Pilot instead of default tools.
|
|
109
|
+
|
|
110
|
+
**Cursor** — add to `.cursorrules` in project root:
|
|
111
|
+
|
|
112
|
+
**Claude Code** — add to `CLAUDE.md` in project root:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
# Token Pilot — Code Reading Rules
|
|
116
|
+
|
|
117
|
+
You have Token Pilot MCP server connected. ALWAYS use it instead of default tools for reading code:
|
|
118
|
+
|
|
119
|
+
## Reading files
|
|
120
|
+
- ALWAYS use smart_read() instead of Read/cat for code files. It returns AST structure (classes, methods, signatures, line ranges) saving 80-99% tokens.
|
|
121
|
+
- After smart_read, use read_symbol("path", "Class.method") to load only the specific function you need.
|
|
122
|
+
- Before editing, use read_for_edit("path", symbol="method") to get minimal raw code for Edit's old_string. 97% savings vs full Read.
|
|
123
|
+
- Use smart_read_many() instead of multiple Read calls when reading 2+ files.
|
|
124
|
+
- After editing a file, use read_diff() instead of re-reading — shows only changed hunks.
|
|
125
|
+
|
|
126
|
+
## Navigation
|
|
127
|
+
- Use outline("src/modules/users/") to see all files in a directory at once — one call instead of 5-6 smart_read.
|
|
128
|
+
- Use related_files("file.ts") to see import graph: what it imports, what imports it, test files.
|
|
129
|
+
- Use find_usages() instead of Grep when looking for where a symbol is used.
|
|
130
|
+
|
|
131
|
+
## Workflow
|
|
132
|
+
1. project_overview() — start here for unfamiliar projects
|
|
133
|
+
2. outline("src/modules/users/") — overview of a module directory
|
|
134
|
+
3. smart_read("file.ts") — see structure of a file
|
|
135
|
+
4. read_symbol("file.ts", "ClassName.methodName") — read specific code
|
|
136
|
+
5. read_for_edit("file.ts", symbol="methodName") — get raw code for editing
|
|
137
|
+
6. read_diff("file.ts") — after edits, see only changes
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## MCP Tools (12)
|
|
107
141
|
|
|
108
142
|
### Core Reading
|
|
109
143
|
|
|
110
|
-
| Tool | Description |
|
|
111
|
-
|
|
112
|
-
| `smart_read` | AST
|
|
113
|
-
| `read_symbol` | Load source
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
144
|
+
| Tool | Instead of | Description |
|
|
145
|
+
|------|-----------|-------------|
|
|
146
|
+
| `smart_read` | `Read` | AST structural overview: classes, functions, methods with signatures. 80-99% savings. Framework-aware: shows HTTP routes, column types, validation rules. |
|
|
147
|
+
| `read_symbol` | `Read` + scroll | Load source of a specific symbol. Supports `Class.method`. `show` param: full/head/tail/outline. |
|
|
148
|
+
| `read_for_edit` | `Read` before `Edit` | **NEW.** Minimal RAW code around a symbol — copy directly as `old_string` for Edit. 97% savings. |
|
|
149
|
+
| `read_range` | `Read` offset | Read a specific line range from a file. |
|
|
150
|
+
| `read_diff` | re-`Read` | Show only what changed since last smart_read. 80-95% savings on re-reads. |
|
|
151
|
+
| `smart_read_many` | multiple `Read` | Batch smart_read for up to 20 files in one call. |
|
|
117
152
|
|
|
118
153
|
### Search & Navigation
|
|
119
154
|
|
|
120
|
-
| Tool | Description |
|
|
121
|
-
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `find_callers` | Find all callers of a function with optional call hierarchy tree. |
|
|
128
|
-
| `changed_symbols` | Show symbol-level git changes (added/modified/removed) vs a base branch. |
|
|
129
|
-
| `find_unused` | Detect potentially unused/dead symbols in the project. |
|
|
155
|
+
| Tool | Instead of | Description |
|
|
156
|
+
|------|-----------|-------------|
|
|
157
|
+
| `find_usages` | `Grep` (refs) | All usages of a symbol: definitions, imports, references. |
|
|
158
|
+
| `project_overview` | `ls` + explore | Project type, architecture, frameworks, directory map. |
|
|
159
|
+
| `related_files` | manual explore | **NEW.** Import graph: what a file imports, what imports it, test files. |
|
|
160
|
+
| `outline` | multiple `smart_read` | **NEW.** Compact overview of all code files in a directory. One call instead of 5-6. |
|
|
161
|
+
| `find_unused` | manual | Detect dead code — unused functions, classes, variables. |
|
|
130
162
|
|
|
131
|
-
###
|
|
163
|
+
### Analytics
|
|
132
164
|
|
|
133
165
|
| Tool | Description |
|
|
134
166
|
|------|-------------|
|
|
135
|
-
| `export_ast_index` | Export AST data as markdown/JSON for cross-tool indexing (e.g., context-mode BM25). |
|
|
136
167
|
| `session_analytics` | Token savings report: total saved, per-tool breakdown, top files. |
|
|
137
|
-
| `context_status` | Show what files/symbols are currently tracked in context. |
|
|
138
|
-
| `forget` | Remove a file or symbol from context tracking. |
|
|
139
168
|
|
|
140
169
|
## CLI Commands
|
|
141
170
|
|
|
@@ -21,6 +21,7 @@ export declare function validateReadSymbolArgs(args: unknown): {
|
|
|
21
21
|
symbol: string;
|
|
22
22
|
context_before?: number;
|
|
23
23
|
context_after?: number;
|
|
24
|
+
show?: 'full' | 'head' | 'tail' | 'outline';
|
|
24
25
|
};
|
|
25
26
|
/**
|
|
26
27
|
* Validate read_range arguments.
|
|
@@ -37,15 +38,6 @@ export declare function validateReadDiffArgs(args: unknown): {
|
|
|
37
38
|
path: string;
|
|
38
39
|
context_lines?: number;
|
|
39
40
|
};
|
|
40
|
-
/**
|
|
41
|
-
* Validate search_code arguments.
|
|
42
|
-
*/
|
|
43
|
-
export declare function validateSearchCodeArgs(args: unknown): {
|
|
44
|
-
query: string;
|
|
45
|
-
in_file?: string;
|
|
46
|
-
max_results?: number;
|
|
47
|
-
fuzzy?: boolean;
|
|
48
|
-
};
|
|
49
41
|
/**
|
|
50
42
|
* Validate find_usages arguments.
|
|
51
43
|
*/
|
|
@@ -58,13 +50,26 @@ export declare function validateFindUsagesArgs(args: unknown): {
|
|
|
58
50
|
export declare function validateSmartReadManyArgs(args: unknown): {
|
|
59
51
|
paths: string[];
|
|
60
52
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Validate read_for_edit arguments.
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateReadForEditArgs(args: unknown): {
|
|
57
|
+
path: string;
|
|
58
|
+
symbol?: string;
|
|
59
|
+
line?: number;
|
|
60
|
+
context?: number;
|
|
65
61
|
};
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Validate related_files arguments.
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateRelatedFilesArgs(args: unknown): {
|
|
66
|
+
path: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Validate outline arguments.
|
|
70
|
+
*/
|
|
71
|
+
export declare function validateOutlineArgs(args: unknown): {
|
|
72
|
+
path: string;
|
|
68
73
|
};
|
|
69
74
|
export declare function validateFindUnusedArgs(args: unknown): {
|
|
70
75
|
module?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAeA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAeA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7C,CA4BA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAkBA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAYA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CASxE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAc5E;AAoBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAiBA;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CASxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CASnE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAQA"}
|
package/dist/core/validation.js
CHANGED
|
@@ -44,11 +44,20 @@ export function validateReadSymbolArgs(args) {
|
|
|
44
44
|
if (typeof a.symbol !== 'string' || a.symbol.length === 0) {
|
|
45
45
|
throw new Error('Required parameter "symbol" must be a non-empty string.');
|
|
46
46
|
}
|
|
47
|
+
let show;
|
|
48
|
+
if (a.show !== undefined && a.show !== null) {
|
|
49
|
+
const valid = ['full', 'head', 'tail', 'outline'];
|
|
50
|
+
if (typeof a.show !== 'string' || !valid.includes(a.show)) {
|
|
51
|
+
throw new Error('"show" must be one of: full, head, tail, outline.');
|
|
52
|
+
}
|
|
53
|
+
show = a.show;
|
|
54
|
+
}
|
|
47
55
|
return {
|
|
48
56
|
path: a.path,
|
|
49
57
|
symbol: a.symbol,
|
|
50
58
|
context_before: optionalNumber(a.context_before, 'context_before'),
|
|
51
59
|
context_after: optionalNumber(a.context_after, 'context_after'),
|
|
60
|
+
show,
|
|
52
61
|
};
|
|
53
62
|
}
|
|
54
63
|
/**
|
|
@@ -89,24 +98,6 @@ export function validateReadDiffArgs(args) {
|
|
|
89
98
|
context_lines: optionalNumber(a.context_lines, 'context_lines'),
|
|
90
99
|
};
|
|
91
100
|
}
|
|
92
|
-
/**
|
|
93
|
-
* Validate search_code arguments.
|
|
94
|
-
*/
|
|
95
|
-
export function validateSearchCodeArgs(args) {
|
|
96
|
-
if (!args || typeof args !== 'object') {
|
|
97
|
-
throw new Error('Arguments must be an object.');
|
|
98
|
-
}
|
|
99
|
-
const a = args;
|
|
100
|
-
if (typeof a.query !== 'string' || a.query.length === 0) {
|
|
101
|
-
throw new Error('Required parameter "query" must be a non-empty string.');
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
query: a.query,
|
|
105
|
-
in_file: optionalString(a.in_file, 'in_file'),
|
|
106
|
-
max_results: optionalNumber(a.max_results, 'max_results'),
|
|
107
|
-
fuzzy: optionalBool(a.fuzzy, 'fuzzy'),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
101
|
/**
|
|
111
102
|
* Validate find_usages arguments.
|
|
112
103
|
*/
|
|
@@ -138,29 +129,6 @@ export function validateSmartReadManyArgs(args) {
|
|
|
138
129
|
}
|
|
139
130
|
return { paths: a.paths };
|
|
140
131
|
}
|
|
141
|
-
export function validateExportAstIndexArgs(args) {
|
|
142
|
-
if (!args || typeof args !== 'object')
|
|
143
|
-
return {};
|
|
144
|
-
const a = args;
|
|
145
|
-
const result = {};
|
|
146
|
-
if (Array.isArray(a.paths)) {
|
|
147
|
-
for (const p of a.paths) {
|
|
148
|
-
if (typeof p !== 'string')
|
|
149
|
-
throw new Error('Each path must be a string.');
|
|
150
|
-
}
|
|
151
|
-
result.paths = a.paths;
|
|
152
|
-
}
|
|
153
|
-
if (a.format !== undefined) {
|
|
154
|
-
if (a.format !== 'markdown' && a.format !== 'json') {
|
|
155
|
-
throw new Error('"format" must be "markdown" or "json".');
|
|
156
|
-
}
|
|
157
|
-
result.format = a.format;
|
|
158
|
-
}
|
|
159
|
-
if (a.all_indexed !== undefined) {
|
|
160
|
-
result.all_indexed = Boolean(a.all_indexed);
|
|
161
|
-
}
|
|
162
|
-
return result;
|
|
163
|
-
}
|
|
164
132
|
function optionalString(val, name) {
|
|
165
133
|
if (val === undefined || val === null)
|
|
166
134
|
return undefined;
|
|
@@ -182,14 +150,53 @@ function optionalNumber(val, name) {
|
|
|
182
150
|
throw new Error(`"${name}" must be a number.`);
|
|
183
151
|
return val;
|
|
184
152
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Validate read_for_edit arguments.
|
|
155
|
+
*/
|
|
156
|
+
export function validateReadForEditArgs(args) {
|
|
157
|
+
if (!args || typeof args !== 'object') {
|
|
158
|
+
throw new Error('Arguments must be an object.');
|
|
159
|
+
}
|
|
188
160
|
const a = args;
|
|
161
|
+
if (typeof a.path !== 'string' || a.path.length === 0) {
|
|
162
|
+
throw new Error('Required parameter "path" must be a non-empty string.');
|
|
163
|
+
}
|
|
164
|
+
if (!a.symbol && !a.line) {
|
|
165
|
+
throw new Error('Either "symbol" or "line" must be provided.');
|
|
166
|
+
}
|
|
189
167
|
return {
|
|
190
|
-
|
|
168
|
+
path: a.path,
|
|
169
|
+
symbol: optionalString(a.symbol, 'symbol'),
|
|
170
|
+
line: optionalNumber(a.line, 'line'),
|
|
171
|
+
context: optionalNumber(a.context, 'context'),
|
|
191
172
|
};
|
|
192
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate related_files arguments.
|
|
176
|
+
*/
|
|
177
|
+
export function validateRelatedFilesArgs(args) {
|
|
178
|
+
if (!args || typeof args !== 'object') {
|
|
179
|
+
throw new Error('Arguments must be an object.');
|
|
180
|
+
}
|
|
181
|
+
const a = args;
|
|
182
|
+
if (typeof a.path !== 'string' || a.path.length === 0) {
|
|
183
|
+
throw new Error('Required parameter "path" must be a non-empty string.');
|
|
184
|
+
}
|
|
185
|
+
return { path: a.path };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Validate outline arguments.
|
|
189
|
+
*/
|
|
190
|
+
export function validateOutlineArgs(args) {
|
|
191
|
+
if (!args || typeof args !== 'object') {
|
|
192
|
+
throw new Error('Arguments must be an object.');
|
|
193
|
+
}
|
|
194
|
+
const a = args;
|
|
195
|
+
if (typeof a.path !== 'string' || a.path.length === 0) {
|
|
196
|
+
throw new Error('Required parameter "path" must be a non-empty string.');
|
|
197
|
+
}
|
|
198
|
+
return { path: a.path };
|
|
199
|
+
}
|
|
193
200
|
export function validateFindUnusedArgs(args) {
|
|
194
201
|
if (!args || typeof args !== 'object')
|
|
195
202
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,QAAgB;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,kCAAkC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAOjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC;QAC1D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC;QACjD,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,eAAe,EAAE,iBAAiB,CAAC;QACnE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,23 +43,32 @@ export function formatOutline(structure, options = {}) {
|
|
|
43
43
|
lines.push('HINT: Use read_symbol(path="<this file>", symbol="<name>") to load a specific symbol. Supports Class.method and Class::method.');
|
|
44
44
|
return lines.join('\n');
|
|
45
45
|
}
|
|
46
|
-
function formatSymbolTree(sym, lines, depth, maxDepth, showDocs, showDeps) {
|
|
46
|
+
function formatSymbolTree(sym, lines, depth, maxDepth, showDocs, showDeps, parentDecorators) {
|
|
47
47
|
const indent = ' '.repeat(depth);
|
|
48
48
|
const asyncPrefix = sym.async ? 'async ' : '';
|
|
49
49
|
const staticPrefix = sym.static ? 'static ' : '';
|
|
50
50
|
const visPrefix = sym.visibility !== 'default' ? `${sym.visibility} ` : '';
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const lineCount = `(${sym.location.lineCount} lines)`;
|
|
58
|
-
if (sym.kind === 'class' || sym.kind === 'interface' || sym.kind === 'enum') {
|
|
59
|
-
lines.push(`${indent}${sym.kind} ${sym.name}: ${loc} ${lineCount}`);
|
|
51
|
+
// Framework-aware: try to show HTTP route instead of raw decorators
|
|
52
|
+
const frameworkInfo = formatFrameworkInfo(sym.decorators, parentDecorators);
|
|
53
|
+
if (frameworkInfo) {
|
|
54
|
+
// Show framework info line (e.g. "GET /admin/users → getUsers()")
|
|
55
|
+
const loc = `[L${sym.location.startLine}-${sym.location.endLine}]`;
|
|
56
|
+
lines.push(`${indent}${frameworkInfo} ${loc}`);
|
|
60
57
|
}
|
|
61
58
|
else {
|
|
62
|
-
|
|
59
|
+
// Regular decorators
|
|
60
|
+
for (const dec of sym.decorators) {
|
|
61
|
+
lines.push(`${indent}@${dec}`);
|
|
62
|
+
}
|
|
63
|
+
// Symbol line
|
|
64
|
+
const loc = `[L${sym.location.startLine}-${sym.location.endLine}]`;
|
|
65
|
+
const lineCount = `(${sym.location.lineCount} lines)`;
|
|
66
|
+
if (sym.kind === 'class' || sym.kind === 'interface' || sym.kind === 'enum') {
|
|
67
|
+
lines.push(`${indent}${sym.kind} ${sym.name}: ${loc} ${lineCount}`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
lines.push(`${indent}- ${visPrefix}${staticPrefix}${asyncPrefix}${sym.signature} ${loc} ${lineCount}`);
|
|
71
|
+
}
|
|
63
72
|
}
|
|
64
73
|
// Dependency hints (references)
|
|
65
74
|
if (showDeps && sym.references.length > 0) {
|
|
@@ -73,13 +82,13 @@ function formatSymbolTree(sym, lines, depth, maxDepth, showDocs, showDeps) {
|
|
|
73
82
|
if (publicMethods.length > 0) {
|
|
74
83
|
lines.push(`${indent} Public Methods:`);
|
|
75
84
|
for (const child of publicMethods) {
|
|
76
|
-
formatSymbolTree(child, lines, depth + 2, maxDepth, showDocs, showDeps);
|
|
85
|
+
formatSymbolTree(child, lines, depth + 2, maxDepth, showDocs, showDeps, sym.decorators);
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
88
|
if (privateMethods.length > 0) {
|
|
80
89
|
lines.push(`${indent} Private Methods:`);
|
|
81
90
|
for (const child of privateMethods) {
|
|
82
|
-
formatSymbolTree(child, lines, depth + 2, maxDepth, showDocs, showDeps);
|
|
91
|
+
formatSymbolTree(child, lines, depth + 2, maxDepth, showDocs, showDeps, sym.decorators);
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
94
|
}
|
|
@@ -87,4 +96,68 @@ function formatSymbolTree(sym, lines, depth, maxDepth, showDocs, showDeps) {
|
|
|
87
96
|
lines.push(`${indent} (${sym.children.length} members — increase depth to see)`);
|
|
88
97
|
}
|
|
89
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse framework decorators into human-readable info.
|
|
101
|
+
* Returns a formatted string or null if no framework info detected.
|
|
102
|
+
*/
|
|
103
|
+
function formatFrameworkInfo(decorators, parentDecorators) {
|
|
104
|
+
if (!decorators || decorators.length === 0)
|
|
105
|
+
return null;
|
|
106
|
+
// HTTP method decorators (NestJS, Spring-like)
|
|
107
|
+
const httpMethods = ['Get', 'Post', 'Put', 'Delete', 'Patch', 'Head', 'Options', 'All'];
|
|
108
|
+
for (const dec of decorators) {
|
|
109
|
+
for (const method of httpMethods) {
|
|
110
|
+
const match = dec.match(new RegExp(`^${method}\\((?:'([^']*)'|"([^"]*)")?\\)$`));
|
|
111
|
+
if (match) {
|
|
112
|
+
const route = match[1] ?? match[2] ?? '';
|
|
113
|
+
// Try to get parent route from @Controller
|
|
114
|
+
let parentRoute = '';
|
|
115
|
+
if (parentDecorators) {
|
|
116
|
+
for (const pd of parentDecorators) {
|
|
117
|
+
const cm = pd.match(/^Controller\((?:'([^']*)'|"([^"]*)")\)$/);
|
|
118
|
+
if (cm) {
|
|
119
|
+
parentRoute = cm[1] ?? cm[2] ?? '';
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const fullRoute = `${parentRoute}/${route}`.replace(/\/+/g, '/').replace(/\/$/, '') || '/';
|
|
125
|
+
return `${method.toUpperCase().padEnd(7)} ${fullRoute}`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Entity column decorators (TypeORM)
|
|
130
|
+
for (const dec of decorators) {
|
|
131
|
+
const colMatch = dec.match(/^Column\(\{[^}]*type:\s*'([^']+)'/);
|
|
132
|
+
if (colMatch)
|
|
133
|
+
return `column: ${colMatch[1]}`;
|
|
134
|
+
if (dec === 'PrimaryGeneratedColumn()' || dec.startsWith('PrimaryGeneratedColumn('))
|
|
135
|
+
return 'PK auto';
|
|
136
|
+
if (dec === 'PrimaryColumn()' || dec.startsWith('PrimaryColumn('))
|
|
137
|
+
return 'PK';
|
|
138
|
+
}
|
|
139
|
+
// Validation decorators (class-validator)
|
|
140
|
+
const validations = [];
|
|
141
|
+
for (const dec of decorators) {
|
|
142
|
+
if (dec.startsWith('IsEmail'))
|
|
143
|
+
validations.push('email');
|
|
144
|
+
else if (dec.startsWith('IsNotEmpty'))
|
|
145
|
+
validations.push('required');
|
|
146
|
+
else if (dec.startsWith('IsOptional'))
|
|
147
|
+
validations.push('optional');
|
|
148
|
+
else if (dec.match(/^MinLength\((\d+)\)/))
|
|
149
|
+
validations.push(`min:${dec.match(/\d+/)[0]}`);
|
|
150
|
+
else if (dec.match(/^MaxLength\((\d+)\)/))
|
|
151
|
+
validations.push(`max:${dec.match(/\d+/)[0]}`);
|
|
152
|
+
else if (dec.startsWith('IsString'))
|
|
153
|
+
validations.push('string');
|
|
154
|
+
else if (dec.startsWith('IsNumber'))
|
|
155
|
+
validations.push('number');
|
|
156
|
+
else if (dec.startsWith('IsBoolean'))
|
|
157
|
+
validations.push('bool');
|
|
158
|
+
}
|
|
159
|
+
if (validations.length > 0)
|
|
160
|
+
return `validate: ${validations.join(', ')}`;
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
90
163
|
//# sourceMappingURL=structure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/formatters/structure.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAwB,EAAE,UAAyB,EAAE;IACjF,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,IAAI,EACf,mBAAmB,GAAG,IAAI,EAC1B,QAAQ,GAAG,CAAC,GACb,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,IAAI,WAAW,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,UAAU;IACV,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gIAAgI,CAAC,CAAC;IAE7I,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAe,EACf,KAAe,EACf,KAAa,EACb,QAAgB,EAChB,QAAiB,EACjB,QAAiB;
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/formatters/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
export interface OutlineArgs {
|
|
3
|
+
path: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function handleOutline(args: OutlineArgs, projectRoot: string, astIndex: AstIndexClient): Promise<{
|
|
6
|
+
content: Array<{
|
|
7
|
+
type: 'text';
|
|
8
|
+
text: string;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=outline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/handlers/outline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAWD,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmE7D"}
|