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.
@@ -0,0 +1,137 @@
1
+ import { readdir, stat } from 'node:fs/promises';
2
+ import { resolve, basename, relative } from 'node:path';
3
+ import { resolveSafePath } from '../core/validation.js';
4
+ const CODE_EXTENSIONS = new Set([
5
+ 'ts', 'tsx', 'js', 'jsx', 'mjs', 'py', 'go', 'rs', 'java', 'kt', 'kts',
6
+ 'swift', 'cs', 'cpp', 'cc', 'cxx', 'hpp', 'c', 'h', 'php', 'rb', 'scala',
7
+ 'dart', 'lua', 'sh', 'bash', 'sql', 'r', 'vue', 'svelte', 'pl', 'pm',
8
+ 'ex', 'exs', 'groovy', 'm', 'proto', 'bsl',
9
+ ]);
10
+ const HTTP_METHODS = ['Get', 'Post', 'Put', 'Delete', 'Patch', 'Head', 'Options', 'All'];
11
+ export async function handleOutline(args, projectRoot, astIndex) {
12
+ const absPath = resolveSafePath(projectRoot, args.path);
13
+ // Verify it's a directory
14
+ const pathStat = await stat(absPath).catch(() => null);
15
+ if (!pathStat || !pathStat.isDirectory()) {
16
+ return {
17
+ content: [{
18
+ type: 'text',
19
+ text: `"${args.path}" is not a directory. Use smart_read() for individual files.`,
20
+ }],
21
+ };
22
+ }
23
+ // List code files (1 level, no recursion)
24
+ const entries = await readdir(absPath, { withFileTypes: true });
25
+ const codeFiles = [];
26
+ for (const entry of entries) {
27
+ if (!entry.isFile())
28
+ continue;
29
+ const ext = entry.name.split('.').pop()?.toLowerCase() ?? '';
30
+ if (CODE_EXTENSIONS.has(ext)) {
31
+ codeFiles.push(resolve(absPath, entry.name));
32
+ }
33
+ }
34
+ if (codeFiles.length === 0) {
35
+ return {
36
+ content: [{
37
+ type: 'text',
38
+ text: `No code files found in "${args.path}".`,
39
+ }],
40
+ };
41
+ }
42
+ // Sort files alphabetically
43
+ codeFiles.sort();
44
+ const relDir = relative(projectRoot, absPath) || '.';
45
+ const sections = [`OUTLINE: ${relDir}/ (${codeFiles.length} files)`, ''];
46
+ for (const filePath of codeFiles) {
47
+ const name = basename(filePath);
48
+ try {
49
+ const structure = await astIndex.outline(filePath);
50
+ if (!structure) {
51
+ sections.push(`${name} (no AST)`);
52
+ sections.push('');
53
+ continue;
54
+ }
55
+ sections.push(`${name} (${structure.meta.lines} lines)`);
56
+ for (const sym of structure.symbols) {
57
+ formatCompactSymbol(sym, sections, 1);
58
+ }
59
+ sections.push('');
60
+ }
61
+ catch {
62
+ sections.push(`${name} (outline failed)`);
63
+ sections.push('');
64
+ }
65
+ }
66
+ sections.push('HINT: Use smart_read(path) for full structure, read_symbol(path, symbol) for source code.');
67
+ return { content: [{ type: 'text', text: sections.join('\n') }] };
68
+ }
69
+ /**
70
+ * Format a symbol in compact outline form.
71
+ * For classes: show name + member count, with framework-aware routes.
72
+ * For functions: show name + line range.
73
+ */
74
+ function formatCompactSymbol(sym, lines, depth) {
75
+ const indent = ' '.repeat(depth);
76
+ const loc = `[L${sym.location.startLine}-${sym.location.endLine}]`;
77
+ // Check for @Controller decorator
78
+ const controllerRoute = extractDecoratorArg(sym.decorators, 'Controller');
79
+ if (sym.kind === 'class' || sym.kind === 'interface' || sym.kind === 'enum') {
80
+ if (controllerRoute !== null) {
81
+ // NestJS Controller — show routes
82
+ lines.push(`${indent}@Controller('${controllerRoute}')`);
83
+ for (const child of sym.children) {
84
+ const route = extractHttpRoute(child.decorators, controllerRoute);
85
+ if (route) {
86
+ lines.push(`${indent} ${route} → ${child.name}() ${formatLoc(child)}`);
87
+ }
88
+ else {
89
+ lines.push(`${indent} ${child.name}() ${formatLoc(child)}`);
90
+ }
91
+ }
92
+ }
93
+ else if (sym.children.length > 0) {
94
+ const memberSummary = sym.children.length <= 6
95
+ ? sym.children.map(c => c.name).join(', ')
96
+ : sym.children.slice(0, 5).map(c => c.name).join(', ') + `, ... (${sym.children.length} total)`;
97
+ lines.push(`${indent}${sym.kind} ${sym.name} ${loc} — ${memberSummary}`);
98
+ }
99
+ else {
100
+ lines.push(`${indent}${sym.kind} ${sym.name} ${loc}`);
101
+ }
102
+ }
103
+ else {
104
+ // Function, variable, etc
105
+ const asyncPrefix = sym.async ? 'async ' : '';
106
+ lines.push(`${indent}${asyncPrefix}${sym.name} ${loc}`);
107
+ }
108
+ }
109
+ function formatLoc(sym) {
110
+ return `[L${sym.location.startLine}-${sym.location.endLine}]`;
111
+ }
112
+ function extractDecoratorArg(decorators, name) {
113
+ if (!decorators)
114
+ return null;
115
+ for (const dec of decorators) {
116
+ const match = dec.match(new RegExp(`^${name}\\((?:'([^']*)'|"([^"]*)")?\\)$`));
117
+ if (match)
118
+ return match[1] ?? match[2] ?? '';
119
+ }
120
+ return null;
121
+ }
122
+ function extractHttpRoute(decorators, parentRoute) {
123
+ if (!decorators)
124
+ return null;
125
+ for (const dec of decorators) {
126
+ for (const method of HTTP_METHODS) {
127
+ const match = dec.match(new RegExp(`^${method}\\((?:'([^']*)'|"([^"]*)")?\\)$`));
128
+ if (match) {
129
+ const route = match[1] ?? match[2] ?? '';
130
+ const fullRoute = `${parentRoute}/${route}`.replace(/\/+/g, '/').replace(/\/$/, '') || '/';
131
+ return `${method.toUpperCase().padEnd(7)} ${fullRoute}`;
132
+ }
133
+ }
134
+ }
135
+ return null;
136
+ }
137
+ //# sourceMappingURL=outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/handlers/outline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IACtE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO;IACxE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI;IACpE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK;CAC3C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAiB,EACjB,WAAmB,EACnB,QAAwB;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAExD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,8DAA8D;iBAClF,CAAC;SACH,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC7D,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2BAA2B,IAAI,CAAC,IAAI,IAAI;iBAC/C,CAAC;SACH,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC;IACrD,MAAM,QAAQ,GAAa,CAAC,YAAY,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,EAAE,EAAE,CAAC,CAAC;IAEnF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;YAEzD,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAE3G,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAe,EAAE,KAAe,EAAE,KAAa;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC;IAEnE,kCAAkC;IAClC,MAAM,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE1E,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5E,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,kCAAkC;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,gBAAgB,eAAe,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAClE,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,0BAA0B;QAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAe;IAChC,OAAO,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAoB,EAAE,IAAY;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,iCAAiC,CAAC,CAAC,CAAC;QAC/E,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAoB,EAAE,WAAmB;IACjE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,iCAAiC,CAAC,CAAC,CAAC;YACjF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,GAAG,WAAW,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;gBAC3F,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AstIndexClient } from '../ast-index/client.js';
2
+ import type { SymbolResolver } from '../core/symbol-resolver.js';
3
+ import type { FileCache } from '../core/file-cache.js';
4
+ import type { ContextRegistry } from '../core/context-registry.js';
5
+ export interface ReadForEditArgs {
6
+ path: string;
7
+ symbol?: string;
8
+ line?: number;
9
+ context?: number;
10
+ }
11
+ export declare function handleReadForEdit(args: ReadForEditArgs, projectRoot: string, symbolResolver: SymbolResolver, fileCache: FileCache, contextRegistry: ContextRegistry, astIndex: AstIndexClient): Promise<{
12
+ content: Array<{
13
+ type: 'text';
14
+ text: string;
15
+ }>;
16
+ }>;
17
+ //# sourceMappingURL=read-for-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-for-edit.d.ts","sourceRoot":"","sources":["../../src/handlers/read-for-edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,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,CA8F7D"}
@@ -0,0 +1,91 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { estimateTokens } from '../core/token-estimator.js';
3
+ import { resolveSafePath } from '../core/validation.js';
4
+ const DEFAULT_CONTEXT = 5;
5
+ export async function handleReadForEdit(args, projectRoot, symbolResolver, fileCache, contextRegistry, astIndex) {
6
+ const absPath = resolveSafePath(projectRoot, args.path);
7
+ const ctx = args.context ?? DEFAULT_CONTEXT;
8
+ // Get file content
9
+ const cached = fileCache.get(absPath);
10
+ let lines;
11
+ if (cached) {
12
+ lines = cached.lines;
13
+ }
14
+ else {
15
+ const content = await readFile(absPath, 'utf-8');
16
+ lines = content.split('\n');
17
+ }
18
+ let startLine;
19
+ let endLine;
20
+ let targetLabel;
21
+ if (args.symbol) {
22
+ // Resolve symbol via AST
23
+ let structure = cached?.structure;
24
+ if (!structure) {
25
+ structure = await astIndex.outline(absPath) ?? undefined;
26
+ }
27
+ const resolved = await symbolResolver.resolve(args.symbol, structure);
28
+ if (!resolved) {
29
+ return {
30
+ content: [{
31
+ type: 'text',
32
+ text: `Symbol "${args.symbol}" not found in ${args.path}.\nHINT: Use smart_read("${args.path}") to see available symbols.`,
33
+ }],
34
+ };
35
+ }
36
+ startLine = resolved.startLine;
37
+ endLine = resolved.endLine;
38
+ targetLabel = `${args.symbol} [L${startLine}-${endLine}]`;
39
+ }
40
+ else if (args.line) {
41
+ if (args.line < 1 || args.line > lines.length) {
42
+ return {
43
+ content: [{
44
+ type: 'text',
45
+ text: `Line ${args.line} out of range (file has ${lines.length} lines).`,
46
+ }],
47
+ };
48
+ }
49
+ startLine = args.line;
50
+ endLine = args.line;
51
+ targetLabel = `line ${args.line}`;
52
+ }
53
+ else {
54
+ return {
55
+ content: [{
56
+ type: 'text',
57
+ text: 'Either "symbol" or "line" must be provided.',
58
+ }],
59
+ };
60
+ }
61
+ // Apply context padding
62
+ const rangeStart = Math.max(1, startLine - ctx);
63
+ const rangeEnd = Math.min(lines.length, endLine + ctx);
64
+ const rangeCount = rangeEnd - rangeStart + 1;
65
+ // Extract RAW code (no line number prefixes — ready for Edit old_string)
66
+ const rawCode = lines.slice(rangeStart - 1, rangeEnd).join('\n');
67
+ const output = [
68
+ `--- EDIT CONTEXT ---`,
69
+ `FILE: ${args.path}`,
70
+ `TARGET: ${targetLabel}`,
71
+ `SHOWING: L${rangeStart}-${rangeEnd} (${rangeCount} lines)`,
72
+ '',
73
+ rawCode,
74
+ '',
75
+ `--- END EDIT CONTEXT ---`,
76
+ '',
77
+ `To edit: use exact text above as old_string in Edit tool.`,
78
+ `For Read requirement: Read("${args.path}", offset=${rangeStart}, limit=${rangeCount})`,
79
+ ].join('\n');
80
+ const tokens = estimateTokens(output);
81
+ // Track in context
82
+ contextRegistry.trackLoad(absPath, {
83
+ type: 'symbol',
84
+ symbolName: args.symbol ?? `line:${args.line}`,
85
+ startLine: rangeStart,
86
+ endLine: rangeEnd,
87
+ tokens,
88
+ });
89
+ return { content: [{ type: 'text', text: output }] };
90
+ }
91
+ //# sourceMappingURL=read-for-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-for-edit.js","sourceRoot":"","sources":["../../src/handlers/read-for-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAqB,EACrB,WAAmB,EACnB,cAA8B,EAC9B,SAAoB,EACpB,eAAgC,EAChC,QAAwB;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC;IAE5C,mBAAmB;IACnB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,KAAe,CAAC;IAEpB,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,OAAe,CAAC;IACpB,IAAI,WAAmB,CAAC;IAExB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,yBAAyB;QACzB,IAAI,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;QAC3D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,WAAW,IAAI,CAAC,MAAM,kBAAkB,IAAI,CAAC,IAAI,4BAA4B,IAAI,CAAC,IAAI,8BAA8B;qBAC3H,CAAC;aACH,CAAC;QACJ,CAAC;QAED,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC/B,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC3B,WAAW,GAAG,GAAG,IAAI,CAAC,MAAM,MAAM,SAAS,IAAI,OAAO,GAAG,CAAC;IAC5D,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ,IAAI,CAAC,IAAI,2BAA2B,KAAK,CAAC,MAAM,UAAU;qBACzE,CAAC;aACH,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,WAAW,GAAG,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6CAA6C;iBACpD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;IAE7C,yEAAyE;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG;QACb,sBAAsB;QACtB,SAAS,IAAI,CAAC,IAAI,EAAE;QACpB,WAAW,WAAW,EAAE;QACxB,aAAa,UAAU,IAAI,QAAQ,KAAK,UAAU,SAAS;QAC3D,EAAE;QACF,OAAO;QACP,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,2DAA2D;QAC3D,+BAA+B,IAAI,CAAC,IAAI,aAAa,UAAU,WAAW,UAAU,GAAG;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEtC,mBAAmB;IACnB,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,EAAE;QAC9C,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,QAAQ;QACjB,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC"}
@@ -7,6 +7,7 @@ export interface ReadSymbolArgs {
7
7
  symbol: string;
8
8
  context_before?: number;
9
9
  context_after?: number;
10
+ show?: 'full' | 'head' | 'tail' | 'outline';
10
11
  }
11
12
  export declare function handleReadSymbol(args: ReadSymbolArgs, projectRoot: string, symbolResolver: SymbolResolver, fileCache: FileCache, contextRegistry: ContextRegistry, astIndex?: AstIndexClient): Promise<{
12
13
  content: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"read-symbol.d.ts","sourceRoot":"","sources":["../../src/handlers/read-symbol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAsG7D"}
1
+ {"version":3,"file":"read-symbol.d.ts","sourceRoot":"","sources":["../../src/handlers/read-symbol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,cAAc;IAC7B,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;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiI7D"}
@@ -34,38 +34,67 @@ export async function handleReadSymbol(args, projectRoot, symbolResolver, fileCa
34
34
  });
35
35
  const loc = `[L${resolved.startLine}-${resolved.endLine}]`;
36
36
  const lineCount = resolved.endLine - resolved.startLine + 1;
37
- // Mega-symbol protection: if symbol is too large, show outline + head/tail
37
+ // Show mode: control how large symbols are displayed
38
38
  const MAX_SYMBOL_LINES = 300;
39
+ const MAX_FULL_LINES = 500;
40
+ const HEAD = 50;
41
+ const TAIL = 30;
39
42
  let displaySource = source;
40
43
  let truncated = false;
41
- if (lineCount > MAX_SYMBOL_LINES) {
44
+ // Determine effective show mode
45
+ const showMode = args.show ?? (lineCount > MAX_SYMBOL_LINES ? 'outline' : 'full');
46
+ if (showMode === 'full') {
47
+ if (lineCount > MAX_FULL_LINES) {
48
+ const sourceLines = source.split('\n');
49
+ displaySource = sourceLines.slice(0, MAX_FULL_LINES).join('\n');
50
+ displaySource += `\n\n ... truncated at ${MAX_FULL_LINES} lines (${lineCount - MAX_FULL_LINES} more). Use show="head"/"tail" for targeted view.`;
51
+ truncated = true;
52
+ }
53
+ }
54
+ else if (showMode === 'head') {
55
+ const sourceLines = source.split('\n');
56
+ displaySource = sourceLines.slice(0, HEAD).join('\n');
57
+ if (lineCount > HEAD) {
58
+ displaySource += `\n\n ... ${lineCount - HEAD} more lines. Use show="tail" or read_symbol("${args.path}", "MethodName") for specific parts.`;
59
+ truncated = true;
60
+ }
61
+ }
62
+ else if (showMode === 'tail') {
42
63
  const sourceLines = source.split('\n');
43
- const HEAD = 50;
44
- const TAIL = 30;
45
- const head = sourceLines.slice(0, HEAD).join('\n');
46
- const tail = sourceLines.slice(-TAIL).join('\n');
47
- const omitted = sourceLines.length - HEAD - TAIL;
48
- // Build method outline for the symbol if it has children
49
- let methodOutline = '';
50
- if (resolved.symbol.children && resolved.symbol.children.length > 0) {
51
- const methodLines = resolved.symbol.children.map(c => {
52
- const mLoc = `[L${c.location.startLine}-${c.location.endLine}]`;
53
- return ` ${c.visibility === 'private' ? '🔒 ' : ''}${c.name}${c.kind === 'method' || c.kind === 'function' ? '()' : ''} ${mLoc} (${c.location.lineCount} lines)`;
54
- });
55
- methodOutline = `\nMETHODS (${resolved.symbol.children.length}):\n${methodLines.join('\n')}\n`;
64
+ displaySource = sourceLines.slice(-TAIL).join('\n');
65
+ if (lineCount > TAIL) {
66
+ displaySource = ` ... ${lineCount - TAIL} lines above ...\n\n` + displaySource;
67
+ truncated = true;
68
+ }
69
+ }
70
+ else {
71
+ // 'outline' mode: head + method list + tail
72
+ if (lineCount > HEAD + TAIL) {
73
+ const sourceLines = source.split('\n');
74
+ const head = sourceLines.slice(0, HEAD).join('\n');
75
+ const tail = sourceLines.slice(-TAIL).join('\n');
76
+ const omitted = sourceLines.length - HEAD - TAIL;
77
+ let methodOutline = '';
78
+ if (resolved.symbol.children && resolved.symbol.children.length > 0) {
79
+ const methodLines = resolved.symbol.children.map(c => {
80
+ const mLoc = `[L${c.location.startLine}-${c.location.endLine}]`;
81
+ return ` ${c.visibility === 'private' ? '🔒 ' : ''}${c.name}${c.kind === 'method' || c.kind === 'function' ? '()' : ''} ${mLoc} (${c.location.lineCount} lines)`;
82
+ });
83
+ methodOutline = `\nMETHODS (${resolved.symbol.children.length}):\n${methodLines.join('\n')}\n`;
84
+ }
85
+ displaySource = [
86
+ head,
87
+ '',
88
+ ` ... ${omitted} lines omitted — use read_symbol("${args.path}", "MethodName") to read specific methods ...`,
89
+ methodOutline,
90
+ tail,
91
+ ].join('\n');
92
+ truncated = true;
56
93
  }
57
- displaySource = [
58
- head,
59
- '',
60
- ` ... ${omitted} lines omitted — use read_symbol("${args.path}", "MethodName") to read specific methods ...`,
61
- methodOutline,
62
- tail,
63
- ].join('\n');
64
- truncated = true;
65
94
  }
66
95
  const outputLines = [
67
96
  `FILE: ${args.path}`,
68
- `SYMBOL: ${args.symbol} (${resolved.symbol.kind}) ${loc} (${lineCount} lines${truncated ? `, showing first 50 + last 30` : ''})`,
97
+ `SYMBOL: ${args.symbol} (${resolved.symbol.kind}) ${loc} (${lineCount} lines${truncated ? `, show=${showMode}` : ''})`,
69
98
  '',
70
99
  displaySource,
71
100
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"read-symbol.js","sourceRoot":"","sources":["../../src/handlers/read-symbol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read-symbol.js","sourceRoot":"","sources":["../../src/handlers/read-symbol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AstIndexClient } from '../ast-index/client.js';
2
+ export interface RelatedFilesArgs {
3
+ path: string;
4
+ }
5
+ export declare function handleRelatedFiles(args: RelatedFilesArgs, projectRoot: string, astIndex: AstIndexClient): Promise<{
6
+ content: Array<{
7
+ type: 'text';
8
+ text: string;
9
+ }>;
10
+ }>;
11
+ //# sourceMappingURL=related-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"related-files.d.ts","sourceRoot":"","sources":["../../src/handlers/related-files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAWD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,gBAAgB,EACtB,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,CA6G7D"}
@@ -0,0 +1,114 @@
1
+ import { basename } from 'node:path';
2
+ import { resolveSafePath } from '../core/validation.js';
3
+ const TEST_PATTERNS = [
4
+ /\.test\.\w+$/,
5
+ /\.spec\.\w+$/,
6
+ /_test\.\w+$/,
7
+ /test_[^/]+\.\w+$/,
8
+ /__tests__\//,
9
+ /\/tests?\//,
10
+ ];
11
+ export async function handleRelatedFiles(args, projectRoot, astIndex) {
12
+ const absPath = resolveSafePath(projectRoot, args.path);
13
+ const fileName = basename(absPath);
14
+ const fileBase = fileName.replace(/\.\w+$/, '');
15
+ const sections = [`RELATED FILES: ${args.path}`, ''];
16
+ // 1. Forward imports (what this file imports)
17
+ try {
18
+ const imports = await astIndex.fileImports(absPath);
19
+ if (imports && imports.length > 0) {
20
+ sections.push('IMPORTS (this file uses):');
21
+ for (const imp of imports) {
22
+ const specStr = imp.specifiers?.length ? imp.specifiers.join(', ') : '*';
23
+ sections.push(` → ${imp.source} (${specStr})`);
24
+ }
25
+ sections.push('');
26
+ }
27
+ }
28
+ catch {
29
+ // fileImports not available — skip silently
30
+ }
31
+ // 2. Reverse imports (what imports this file)
32
+ const importedBy = [];
33
+ try {
34
+ // Get structure to find exported symbol names
35
+ const structure = await astIndex.outline(absPath);
36
+ const exportNames = [];
37
+ if (structure) {
38
+ for (const sym of structure.symbols) {
39
+ exportNames.push(sym.name);
40
+ if (exportNames.length >= 5)
41
+ break;
42
+ }
43
+ }
44
+ // Also try the file base name as a symbol
45
+ if (!exportNames.includes(fileBase)) {
46
+ exportNames.push(fileBase);
47
+ }
48
+ // Search refs for each exported symbol
49
+ const seenFiles = new Set();
50
+ seenFiles.add(absPath);
51
+ for (const name of exportNames) {
52
+ try {
53
+ const refs = await astIndex.refs(name, 20);
54
+ if (refs?.imports) {
55
+ for (const ref of refs.imports) {
56
+ const refPath = ref.path;
57
+ if (refPath && !seenFiles.has(refPath)) {
58
+ seenFiles.add(refPath);
59
+ importedBy.push(refPath);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // skip symbol
66
+ }
67
+ }
68
+ if (importedBy.length > 0) {
69
+ sections.push('IMPORTED BY (uses this file):');
70
+ for (const p of importedBy) {
71
+ sections.push(` → ${p}`);
72
+ }
73
+ sections.push('');
74
+ }
75
+ }
76
+ catch {
77
+ // refs not available — skip silently
78
+ }
79
+ // 3. Test files
80
+ try {
81
+ const allFiles = await astIndex.listFiles();
82
+ const testFiles = [];
83
+ if (allFiles && allFiles.length > 0) {
84
+ for (const f of allFiles) {
85
+ // Match test files for this module
86
+ const fBase = basename(f);
87
+ if (fBase.includes(fileBase) && TEST_PATTERNS.some(p => p.test(f))) {
88
+ testFiles.push(f);
89
+ }
90
+ }
91
+ }
92
+ if (testFiles.length > 0) {
93
+ sections.push('TESTS:');
94
+ for (const t of testFiles) {
95
+ sections.push(` → ${t}`);
96
+ }
97
+ sections.push('');
98
+ }
99
+ }
100
+ catch {
101
+ // listFiles not available — skip silently
102
+ }
103
+ // 4. Check if we found anything useful
104
+ if (sections.length <= 2) {
105
+ sections.push('No related files found. AST index may not cover this file.');
106
+ sections.push('HINT: Use smart_read() to explore the file structure.');
107
+ }
108
+ else {
109
+ // Suggested reading order
110
+ sections.push('HINT: Use smart_read_many(paths=[...]) to read related files at once.');
111
+ }
112
+ return { content: [{ type: 'text', text: sections.join('\n') }] };
113
+ }
114
+ //# sourceMappingURL=related-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"related-files.js","sourceRoot":"","sources":["../../src/handlers/related-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,aAAa,GAAG;IACpB,cAAc;IACd,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAsB,EACtB,WAAmB,EACnB,QAAwB;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAa,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/D,8CAA8C;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzE,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC;YACnD,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IAED,8CAA8C;IAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC;oBAAE,MAAM;YACrC,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,uCAAuC;QACvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;oBAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;wBACzB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BACvC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;4BACvB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,mCAAmC;gBACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,uCAAuC;IACvC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,0BAA0B;QAC1B,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
package/dist/index.js CHANGED
@@ -232,10 +232,10 @@ Usage:
232
232
  token-pilot --version Show version
233
233
  token-pilot --help Show this help
234
234
 
235
- MCP Tools (14):
236
- smart_read, read_symbol, read_range, read_diff, smart_read_many,
237
- search_code, find_usages, find_unused, changed_symbols,
238
- project_overview, export_ast_index, session_analytics, context_status, forget
235
+ MCP Tools (12):
236
+ smart_read, read_symbol, read_range, read_diff, smart_read_many, read_for_edit,
237
+ find_usages, find_unused, related_files, outline,
238
+ project_overview, session_analytics
239
239
  `);
240
240
  process.exit(0);
241
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA2CnE,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2YrD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA2CnE,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6VrD"}