token-pilot 0.4.1 → 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 +21 -0
- package/README.md +17 -16
- 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 +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +55 -134
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,27 @@ 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
|
+
|
|
8
29
|
## [0.4.1] - 2026-03-02
|
|
9
30
|
|
|
10
31
|
### Added
|
package/README.md
CHANGED
|
@@ -119,29 +119,33 @@ You have Token Pilot MCP server connected. ALWAYS use it instead of default tool
|
|
|
119
119
|
## Reading files
|
|
120
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
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.
|
|
122
123
|
- Use smart_read_many() instead of multiple Read calls when reading 2+ files.
|
|
123
124
|
- After editing a file, use read_diff() instead of re-reading — shows only changed hunks.
|
|
124
125
|
|
|
125
|
-
##
|
|
126
|
-
- Use
|
|
127
|
-
- Use
|
|
128
|
-
- Use Grep
|
|
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.
|
|
129
130
|
|
|
130
131
|
## Workflow
|
|
131
132
|
1. project_overview() — start here for unfamiliar projects
|
|
132
|
-
2.
|
|
133
|
-
3.
|
|
134
|
-
4.
|
|
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
|
|
135
138
|
```
|
|
136
139
|
|
|
137
|
-
## MCP Tools (
|
|
140
|
+
## MCP Tools (12)
|
|
138
141
|
|
|
139
142
|
### Core Reading
|
|
140
143
|
|
|
141
144
|
| Tool | Instead of | Description |
|
|
142
145
|
|------|-----------|-------------|
|
|
143
|
-
| `smart_read` | `Read` | AST structural overview: classes, functions, methods with signatures
|
|
144
|
-
| `read_symbol` | `Read` + scroll | Load source of a specific symbol
|
|
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. |
|
|
145
149
|
| `read_range` | `Read` offset | Read a specific line range from a file. |
|
|
146
150
|
| `read_diff` | re-`Read` | Show only what changed since last smart_read. 80-95% savings on re-reads. |
|
|
147
151
|
| `smart_read_many` | multiple `Read` | Batch smart_read for up to 20 files in one call. |
|
|
@@ -150,20 +154,17 @@ You have Token Pilot MCP server connected. ALWAYS use it instead of default tool
|
|
|
150
154
|
|
|
151
155
|
| Tool | Instead of | Description |
|
|
152
156
|
|------|-----------|-------------|
|
|
153
|
-
| `search_code` | `Grep` (symbols) | AST-indexed symbol search. Use for function/class names. |
|
|
154
157
|
| `find_usages` | `Grep` (refs) | All usages of a symbol: definitions, imports, references. |
|
|
155
158
|
| `project_overview` | `ls` + explore | Project type, architecture, frameworks, directory map. |
|
|
156
|
-
| `
|
|
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. |
|
|
157
161
|
| `find_unused` | manual | Detect dead code — unused functions, classes, variables. |
|
|
158
162
|
|
|
159
|
-
###
|
|
163
|
+
### Analytics
|
|
160
164
|
|
|
161
165
|
| Tool | Description |
|
|
162
166
|
|------|-------------|
|
|
163
|
-
| `export_ast_index` | Export AST data as markdown/JSON for cross-tool indexing. |
|
|
164
167
|
| `session_analytics` | Token savings report: total saved, per-tool breakdown, top files. |
|
|
165
|
-
| `context_status` | Show what files/symbols are tracked in context. |
|
|
166
|
-
| `forget` | Remove a file or symbol from context tracking. |
|
|
167
168
|
|
|
168
169
|
## CLI Commands
|
|
169
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"}
|