token-pilot 0.1.1

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.
Files changed (142) hide show
  1. package/.claude-plugin/hooks/hooks.json +15 -0
  2. package/.claude-plugin/marketplace.json +15 -0
  3. package/.claude-plugin/plugin.json +9 -0
  4. package/.mcp.json +8 -0
  5. package/CHANGELOG.md +48 -0
  6. package/README.md +282 -0
  7. package/dist/ast-index/binary-manager.d.ts +15 -0
  8. package/dist/ast-index/binary-manager.d.ts.map +1 -0
  9. package/dist/ast-index/binary-manager.js +222 -0
  10. package/dist/ast-index/binary-manager.js.map +1 -0
  11. package/dist/ast-index/client.d.ts +48 -0
  12. package/dist/ast-index/client.d.ts.map +1 -0
  13. package/dist/ast-index/client.js +371 -0
  14. package/dist/ast-index/client.js.map +1 -0
  15. package/dist/ast-index/tar-extract.d.ts +6 -0
  16. package/dist/ast-index/tar-extract.d.ts.map +1 -0
  17. package/dist/ast-index/tar-extract.js +39 -0
  18. package/dist/ast-index/tar-extract.js.map +1 -0
  19. package/dist/ast-index/types.d.ts +78 -0
  20. package/dist/ast-index/types.d.ts.map +1 -0
  21. package/dist/ast-index/types.js +6 -0
  22. package/dist/ast-index/types.js.map +1 -0
  23. package/dist/config/defaults.d.ts +3 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +51 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/loader.d.ts +3 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +31 -0
  30. package/dist/config/loader.js.map +1 -0
  31. package/dist/core/context-registry.d.ts +31 -0
  32. package/dist/core/context-registry.d.ts.map +1 -0
  33. package/dist/core/context-registry.js +133 -0
  34. package/dist/core/context-registry.js.map +1 -0
  35. package/dist/core/file-cache.d.ts +34 -0
  36. package/dist/core/file-cache.d.ts.map +1 -0
  37. package/dist/core/file-cache.js +120 -0
  38. package/dist/core/file-cache.js.map +1 -0
  39. package/dist/core/format-duration.d.ts +5 -0
  40. package/dist/core/format-duration.d.ts.map +1 -0
  41. package/dist/core/format-duration.js +13 -0
  42. package/dist/core/format-duration.js.map +1 -0
  43. package/dist/core/session-analytics.d.ts +26 -0
  44. package/dist/core/session-analytics.d.ts.map +1 -0
  45. package/dist/core/session-analytics.js +91 -0
  46. package/dist/core/session-analytics.js.map +1 -0
  47. package/dist/core/symbol-resolver.d.ts +21 -0
  48. package/dist/core/symbol-resolver.d.ts.map +1 -0
  49. package/dist/core/symbol-resolver.js +102 -0
  50. package/dist/core/symbol-resolver.js.map +1 -0
  51. package/dist/core/token-estimator.d.ts +10 -0
  52. package/dist/core/token-estimator.d.ts.map +1 -0
  53. package/dist/core/token-estimator.js +22 -0
  54. package/dist/core/token-estimator.js.map +1 -0
  55. package/dist/core/validation.d.ts +77 -0
  56. package/dist/core/validation.d.ts.map +1 -0
  57. package/dist/core/validation.js +208 -0
  58. package/dist/core/validation.js.map +1 -0
  59. package/dist/formatters/structure.d.ts +13 -0
  60. package/dist/formatters/structure.d.ts.map +1 -0
  61. package/dist/formatters/structure.js +90 -0
  62. package/dist/formatters/structure.js.map +1 -0
  63. package/dist/git/file-watcher.d.ts +17 -0
  64. package/dist/git/file-watcher.d.ts.map +1 -0
  65. package/dist/git/file-watcher.js +54 -0
  66. package/dist/git/file-watcher.js.map +1 -0
  67. package/dist/git/watcher.d.ts +25 -0
  68. package/dist/git/watcher.d.ts.map +1 -0
  69. package/dist/git/watcher.js +95 -0
  70. package/dist/git/watcher.js.map +1 -0
  71. package/dist/handlers/class-hierarchy.d.ts +11 -0
  72. package/dist/handlers/class-hierarchy.d.ts.map +1 -0
  73. package/dist/handlers/class-hierarchy.js +28 -0
  74. package/dist/handlers/class-hierarchy.js.map +1 -0
  75. package/dist/handlers/export-ast-index.d.ts +19 -0
  76. package/dist/handlers/export-ast-index.d.ts.map +1 -0
  77. package/dist/handlers/export-ast-index.js +107 -0
  78. package/dist/handlers/export-ast-index.js.map +1 -0
  79. package/dist/handlers/find-implementations.d.ts +11 -0
  80. package/dist/handlers/find-implementations.d.ts.map +1 -0
  81. package/dist/handlers/find-implementations.js +25 -0
  82. package/dist/handlers/find-implementations.js.map +1 -0
  83. package/dist/handlers/find-usages.d.ts +11 -0
  84. package/dist/handlers/find-usages.d.ts.map +1 -0
  85. package/dist/handlers/find-usages.js +23 -0
  86. package/dist/handlers/find-usages.js.map +1 -0
  87. package/dist/handlers/non-code.d.ts +25 -0
  88. package/dist/handlers/non-code.d.ts.map +1 -0
  89. package/dist/handlers/non-code.js +152 -0
  90. package/dist/handlers/non-code.js.map +1 -0
  91. package/dist/handlers/project-overview.d.ts +8 -0
  92. package/dist/handlers/project-overview.d.ts.map +1 -0
  93. package/dist/handlers/project-overview.js +84 -0
  94. package/dist/handlers/project-overview.js.map +1 -0
  95. package/dist/handlers/read-diff.d.ts +13 -0
  96. package/dist/handlers/read-diff.d.ts.map +1 -0
  97. package/dist/handlers/read-diff.js +174 -0
  98. package/dist/handlers/read-diff.js.map +1 -0
  99. package/dist/handlers/read-range.d.ts +14 -0
  100. package/dist/handlers/read-range.d.ts.map +1 -0
  101. package/dist/handlers/read-range.js +44 -0
  102. package/dist/handlers/read-range.js.map +1 -0
  103. package/dist/handlers/read-symbol.d.ts +16 -0
  104. package/dist/handlers/read-symbol.d.ts.map +1 -0
  105. package/dist/handlers/read-symbol.js +59 -0
  106. package/dist/handlers/read-symbol.js.map +1 -0
  107. package/dist/handlers/search-code.d.ts +14 -0
  108. package/dist/handlers/search-code.d.ts.map +1 -0
  109. package/dist/handlers/search-code.js +27 -0
  110. package/dist/handlers/search-code.js.map +1 -0
  111. package/dist/handlers/smart-read-many.d.ts +14 -0
  112. package/dist/handlers/smart-read-many.d.ts.map +1 -0
  113. package/dist/handlers/smart-read-many.js +32 -0
  114. package/dist/handlers/smart-read-many.js.map +1 -0
  115. package/dist/handlers/smart-read.d.ts +18 -0
  116. package/dist/handlers/smart-read.d.ts.map +1 -0
  117. package/dist/handlers/smart-read.js +86 -0
  118. package/dist/handlers/smart-read.js.map +1 -0
  119. package/dist/hooks/installer.d.ts +16 -0
  120. package/dist/hooks/installer.d.ts.map +1 -0
  121. package/dist/hooks/installer.js +89 -0
  122. package/dist/hooks/installer.js.map +1 -0
  123. package/dist/index.d.ts +3 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +120 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/integration/context-mode-detector.d.ts +16 -0
  128. package/dist/integration/context-mode-detector.d.ts.map +1 -0
  129. package/dist/integration/context-mode-detector.js +53 -0
  130. package/dist/integration/context-mode-detector.js.map +1 -0
  131. package/dist/server.d.ts +36 -0
  132. package/dist/server.d.ts.map +1 -0
  133. package/dist/server.js +375 -0
  134. package/dist/server.js.map +1 -0
  135. package/dist/types.d.ts +122 -0
  136. package/dist/types.d.ts.map +1 -0
  137. package/dist/types.js +5 -0
  138. package/dist/types.js.map +1 -0
  139. package/package.json +67 -0
  140. package/skills/install/SKILL.md +14 -0
  141. package/skills/stats/SKILL.md +8 -0
  142. package/start.sh +27 -0
@@ -0,0 +1,48 @@
1
+ import type { FileStructure } from '../types.js';
2
+ import type { AstIndexSymbolDetail, AstIndexSearchResult, AstIndexUsageResult, AstIndexImplementation, AstIndexHierarchyNode } from './types.js';
3
+ export declare class AstIndexClient {
4
+ private binaryPath;
5
+ private projectRoot;
6
+ private indexed;
7
+ private timeout;
8
+ private configBinaryPath;
9
+ private autoInstall;
10
+ constructor(projectRoot: string, timeout?: number, options?: {
11
+ binaryPath?: string | null;
12
+ autoInstall?: boolean;
13
+ });
14
+ init(): Promise<void>;
15
+ ensureIndex(): Promise<void>;
16
+ outline(filePath: string): Promise<FileStructure | null>;
17
+ /**
18
+ * Parse text output from `ast-index outline`:
19
+ * Outline of src/file.ts:
20
+ * :10 ClassName [class]
21
+ * :11 propName [property]
22
+ * :14 methodName [function]
23
+ */
24
+ private parseOutlineText;
25
+ /** Compute end_line from sequential start positions */
26
+ private computeEndLines;
27
+ symbol(name: string): Promise<AstIndexSymbolDetail | null>;
28
+ search(query: string, options?: {
29
+ inFile?: string;
30
+ maxResults?: number;
31
+ fuzzy?: boolean;
32
+ }): Promise<AstIndexSearchResult[]>;
33
+ usages(symbolName: string): Promise<AstIndexUsageResult[]>;
34
+ implementations(name: string): Promise<AstIndexImplementation[]>;
35
+ hierarchy(name: string): Promise<AstIndexHierarchyNode | null>;
36
+ isAvailable(): boolean;
37
+ private exec;
38
+ private buildFileStructure;
39
+ /** Fix the last entry's end_line to use actual file line count */
40
+ private fixLastEndLine;
41
+ /** Read actual signature lines from file content */
42
+ private enrichSignatures;
43
+ private mapOutlineEntry;
44
+ private mapKind;
45
+ private mapVisibility;
46
+ private detectLanguage;
47
+ }
48
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ast-index/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAGV,oBAAoB,EAEpB,oBAAoB,EAEpB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAKpB,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,WAAW,CAAU;gBAEjB,WAAW,EAAE,MAAM,EAAE,OAAO,SAAO,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAO1G,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAY9D;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IA4CxB,uDAAuD;IACvD,OAAO,CAAC,eAAe;IAsBjB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAmB1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAsB3H,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAiB1D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAUhE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAUpE,WAAW,IAAI,OAAO;YAIR,IAAI;YAkBJ,kBAAkB;IA6BhC,kEAAkE;IAClE,OAAO,CAAC,cAAc;IAUtB,oDAAoD;IACpD,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,cAAc;CAiCvB"}
@@ -0,0 +1,371 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { stat } from 'node:fs/promises';
4
+ import { createHash } from 'node:crypto';
5
+ import { readFile } from 'node:fs/promises';
6
+ import { findBinary, installBinary } from './binary-manager.js';
7
+ const execFileAsync = promisify(execFile);
8
+ export class AstIndexClient {
9
+ binaryPath = null;
10
+ projectRoot;
11
+ indexed = false;
12
+ timeout;
13
+ configBinaryPath;
14
+ autoInstall;
15
+ constructor(projectRoot, timeout = 5000, options) {
16
+ this.projectRoot = projectRoot;
17
+ this.timeout = timeout;
18
+ this.configBinaryPath = options?.binaryPath ?? null;
19
+ this.autoInstall = options?.autoInstall ?? true;
20
+ }
21
+ async init() {
22
+ // 1. Try to find existing binary
23
+ const status = await findBinary(this.configBinaryPath);
24
+ if (status.available) {
25
+ this.binaryPath = status.path;
26
+ console.error(`[token-pilot] ast-index ${status.version} found (${status.source})`);
27
+ return;
28
+ }
29
+ // 2. Auto-install if enabled
30
+ if (this.autoInstall) {
31
+ console.error('[token-pilot] ast-index not found, downloading...');
32
+ try {
33
+ const installed = await installBinary((msg) => console.error(`[token-pilot] ${msg}`));
34
+ this.binaryPath = installed.path;
35
+ return;
36
+ }
37
+ catch (err) {
38
+ console.error(`[token-pilot] Auto-install failed: ${err instanceof Error ? err.message : err}`);
39
+ }
40
+ }
41
+ throw new Error('ast-index binary not found and auto-install failed.\n' +
42
+ 'Install manually: npx token-pilot install-ast-index\n' +
43
+ 'Or: cargo install ast-index');
44
+ }
45
+ async ensureIndex() {
46
+ if (this.indexed)
47
+ return;
48
+ try {
49
+ // Try a quick command to see if index exists
50
+ await this.exec(['stats']);
51
+ this.indexed = true;
52
+ }
53
+ catch {
54
+ // No index — build it
55
+ await this.exec(['rebuild'], 60000); // 60s timeout for rebuild
56
+ this.indexed = true;
57
+ }
58
+ }
59
+ async outline(filePath) {
60
+ try {
61
+ await this.ensureIndex();
62
+ const result = await this.exec(['outline', filePath]);
63
+ const entries = this.parseOutlineText(result);
64
+ if (entries.length === 0)
65
+ return null;
66
+ return await this.buildFileStructure(filePath, entries);
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ /**
73
+ * Parse text output from `ast-index outline`:
74
+ * Outline of src/file.ts:
75
+ * :10 ClassName [class]
76
+ * :11 propName [property]
77
+ * :14 methodName [function]
78
+ */
79
+ parseOutlineText(text) {
80
+ const lines = text.split('\n');
81
+ const entries = [];
82
+ const classStack = [];
83
+ for (const line of lines) {
84
+ // Match: optional whitespace, :LINE_NUM, SYMBOL_NAME, [KIND]
85
+ const match = line.match(/^(\s*):(\d+)\s+(\S+)\s+\[(\w+)\]/);
86
+ if (!match)
87
+ continue;
88
+ const indent = match[1].length;
89
+ const entry = {
90
+ name: match[3],
91
+ kind: match[4],
92
+ start_line: parseInt(match[2], 10),
93
+ end_line: 0, // computed later
94
+ };
95
+ // Pop stack until we find a parent with less indent
96
+ while (classStack.length > 0 && classStack[classStack.length - 1].indent >= indent) {
97
+ classStack.pop();
98
+ }
99
+ if (classStack.length > 0) {
100
+ // This is a child of the top of stack
101
+ const parent = classStack[classStack.length - 1].entry;
102
+ if (!parent.children)
103
+ parent.children = [];
104
+ parent.children.push(entry);
105
+ }
106
+ else {
107
+ entries.push(entry);
108
+ }
109
+ // Push classes/interfaces onto stack as potential parents
110
+ if (['class', 'interface', 'struct', 'enum', 'impl', 'trait', 'namespace', 'module'].includes(entry.kind.toLowerCase())) {
111
+ classStack.push({ entry, indent });
112
+ }
113
+ }
114
+ // Compute end_line for all entries
115
+ this.computeEndLines(entries);
116
+ return entries;
117
+ }
118
+ /** Compute end_line from sequential start positions */
119
+ computeEndLines(entries) {
120
+ for (let i = 0; i < entries.length; i++) {
121
+ // Children first (recursive)
122
+ if (entries[i].children?.length) {
123
+ this.computeEndLines(entries[i].children);
124
+ }
125
+ if (i < entries.length - 1) {
126
+ // end = next sibling's start - 1
127
+ entries[i].end_line = entries[i + 1].start_line - 1;
128
+ }
129
+ else {
130
+ // last entry: estimate based on children or use start + reasonable default
131
+ const children = entries[i].children;
132
+ if (children?.length) {
133
+ entries[i].end_line = children[children.length - 1].end_line + 1;
134
+ }
135
+ else {
136
+ entries[i].end_line = entries[i].start_line + 10; // estimated
137
+ }
138
+ }
139
+ }
140
+ }
141
+ async symbol(name) {
142
+ try {
143
+ await this.ensureIndex();
144
+ const result = await this.exec(['symbol', name, '--format', 'json']);
145
+ const raw = JSON.parse(result);
146
+ if (!Array.isArray(raw) || raw.length === 0)
147
+ return null;
148
+ const first = raw[0];
149
+ return {
150
+ name: first.name,
151
+ kind: first.kind,
152
+ file: first.path,
153
+ start_line: first.line,
154
+ signature: first.signature,
155
+ };
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ }
161
+ async search(query, options) {
162
+ await this.ensureIndex();
163
+ const args = ['search', query, '--format', 'json'];
164
+ if (options?.inFile)
165
+ args.push('--in-file', options.inFile);
166
+ if (options?.maxResults)
167
+ args.push('--limit', String(options.maxResults));
168
+ if (options?.fuzzy)
169
+ args.push('--fuzzy');
170
+ try {
171
+ const result = await this.exec(args);
172
+ const parsed = JSON.parse(result);
173
+ // ast-index returns { content_matches: [...] }
174
+ const matches = parsed.content_matches ?? parsed;
175
+ if (!Array.isArray(matches))
176
+ return [];
177
+ return matches.map((m) => ({
178
+ file: m.path ?? m.file ?? '',
179
+ line: m.line,
180
+ text: m.content ?? m.text ?? '',
181
+ }));
182
+ }
183
+ catch {
184
+ return [];
185
+ }
186
+ }
187
+ async usages(symbolName) {
188
+ await this.ensureIndex();
189
+ try {
190
+ const result = await this.exec(['usages', symbolName, '--format', 'json']);
191
+ const raw = JSON.parse(result);
192
+ if (!Array.isArray(raw))
193
+ return [];
194
+ return raw.map(u => ({
195
+ file: u.path,
196
+ line: u.line,
197
+ text: u.context,
198
+ kind: 'reference',
199
+ }));
200
+ }
201
+ catch {
202
+ return [];
203
+ }
204
+ }
205
+ async implementations(name) {
206
+ await this.ensureIndex();
207
+ try {
208
+ const result = await this.exec(['implementations', name, '--format', 'json']);
209
+ return JSON.parse(result);
210
+ }
211
+ catch {
212
+ return [];
213
+ }
214
+ }
215
+ async hierarchy(name) {
216
+ await this.ensureIndex();
217
+ try {
218
+ const result = await this.exec(['hierarchy', name, '--format', 'json']);
219
+ return JSON.parse(result);
220
+ }
221
+ catch {
222
+ return null;
223
+ }
224
+ }
225
+ isAvailable() {
226
+ return this.binaryPath !== null;
227
+ }
228
+ async exec(args, timeoutMs) {
229
+ if (!this.binaryPath) {
230
+ throw new Error('ast-index not initialized. Call init() first.');
231
+ }
232
+ const { stdout } = await execFileAsync(this.binaryPath, args, {
233
+ timeout: timeoutMs ?? this.timeout,
234
+ maxBuffer: 10 * 1024 * 1024, // 10MB
235
+ cwd: this.projectRoot,
236
+ });
237
+ return stdout;
238
+ }
239
+ async buildFileStructure(filePath, entries) {
240
+ const content = await readFile(filePath, 'utf-8');
241
+ const lines = content.split('\n');
242
+ const fileStat = await stat(filePath);
243
+ // Fix last entry end_line to use actual file line count
244
+ this.fixLastEndLine(entries, lines.length);
245
+ // Enrich entries with signatures from file content
246
+ this.enrichSignatures(entries, lines);
247
+ return {
248
+ path: filePath,
249
+ language: this.detectLanguage(filePath),
250
+ meta: {
251
+ lines: lines.length,
252
+ bytes: fileStat.size,
253
+ lastModified: fileStat.mtimeMs,
254
+ contentHash: createHash('sha256').update(content).digest('hex'),
255
+ },
256
+ imports: [],
257
+ exports: [],
258
+ symbols: entries.map(e => this.mapOutlineEntry(e)),
259
+ };
260
+ }
261
+ /** Fix the last entry's end_line to use actual file line count */
262
+ fixLastEndLine(entries, totalLines) {
263
+ if (entries.length === 0)
264
+ return;
265
+ const last = entries[entries.length - 1];
266
+ last.end_line = totalLines;
267
+ // Recursively fix children
268
+ if (last.children?.length) {
269
+ this.fixLastEndLine(last.children, last.end_line - 1);
270
+ }
271
+ }
272
+ /** Read actual signature lines from file content */
273
+ enrichSignatures(entries, lines) {
274
+ for (const entry of entries) {
275
+ if (!entry.signature) {
276
+ const lineIdx = entry.start_line - 1;
277
+ if (lineIdx >= 0 && lineIdx < lines.length) {
278
+ entry.signature = lines[lineIdx].trim();
279
+ }
280
+ }
281
+ if (entry.children?.length) {
282
+ this.enrichSignatures(entry.children, lines);
283
+ }
284
+ }
285
+ }
286
+ mapOutlineEntry(entry) {
287
+ return {
288
+ name: entry.name,
289
+ qualifiedName: entry.name, // Will be enriched with parent context
290
+ kind: this.mapKind(entry.kind),
291
+ signature: entry.signature ?? entry.name,
292
+ location: {
293
+ startLine: entry.start_line,
294
+ endLine: entry.end_line,
295
+ lineCount: entry.end_line - entry.start_line + 1,
296
+ },
297
+ visibility: this.mapVisibility(entry.visibility),
298
+ async: entry.is_async ?? false,
299
+ static: entry.is_static ?? false,
300
+ decorators: entry.decorators ?? [],
301
+ children: (entry.children ?? []).map(c => this.mapOutlineEntry(c)),
302
+ doc: entry.doc ?? null,
303
+ references: [],
304
+ };
305
+ }
306
+ mapKind(kind) {
307
+ const map = {
308
+ function: 'function',
309
+ class: 'class',
310
+ method: 'method',
311
+ property: 'property',
312
+ variable: 'variable',
313
+ type: 'type',
314
+ interface: 'interface',
315
+ enum: 'enum',
316
+ constant: 'constant',
317
+ namespace: 'namespace',
318
+ struct: 'class',
319
+ trait: 'interface',
320
+ impl: 'class',
321
+ module: 'namespace',
322
+ };
323
+ return map[kind.toLowerCase()] ?? 'function';
324
+ }
325
+ mapVisibility(vis) {
326
+ if (!vis)
327
+ return 'default';
328
+ const map = {
329
+ public: 'public',
330
+ private: 'private',
331
+ protected: 'protected',
332
+ pub: 'public',
333
+ export: 'public',
334
+ };
335
+ return map[vis.toLowerCase()] ?? 'default';
336
+ }
337
+ detectLanguage(filePath) {
338
+ const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
339
+ const map = {
340
+ ts: 'TypeScript', tsx: 'TypeScript',
341
+ js: 'JavaScript', jsx: 'JavaScript', mjs: 'JavaScript',
342
+ py: 'Python',
343
+ go: 'Go',
344
+ rs: 'Rust',
345
+ java: 'Java',
346
+ kt: 'Kotlin', kts: 'Kotlin',
347
+ swift: 'Swift',
348
+ cs: 'C#',
349
+ cpp: 'C++', cc: 'C++', cxx: 'C++', hpp: 'C++',
350
+ c: 'C', h: 'C',
351
+ php: 'PHP',
352
+ rb: 'Ruby',
353
+ scala: 'Scala',
354
+ dart: 'Dart',
355
+ lua: 'Lua',
356
+ sh: 'Bash', bash: 'Bash',
357
+ sql: 'SQL',
358
+ r: 'R',
359
+ vue: 'Vue',
360
+ svelte: 'Svelte',
361
+ pl: 'Perl', pm: 'Perl',
362
+ ex: 'Elixir', exs: 'Elixir',
363
+ groovy: 'Groovy',
364
+ m: 'Objective-C',
365
+ proto: 'Protocol Buffers',
366
+ bsl: 'BSL',
367
+ };
368
+ return map[ext] ?? 'Unknown';
369
+ }
370
+ }
371
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ast-index/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Minimal tar extractor — extracts a single named file from a tar buffer.
3
+ * Tar format: 512-byte headers + 512-byte aligned data blocks.
4
+ */
5
+ export declare function tarExtract(tarData: Buffer, destDir: string, targetName: string): Promise<void>;
6
+ //# sourceMappingURL=tar-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-extract.d.ts","sourceRoot":"","sources":["../../src/ast-index/tar-extract.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,39 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ /**
4
+ * Minimal tar extractor — extracts a single named file from a tar buffer.
5
+ * Tar format: 512-byte headers + 512-byte aligned data blocks.
6
+ */
7
+ export async function tarExtract(tarData, destDir, targetName) {
8
+ let offset = 0;
9
+ while (offset + 512 <= tarData.length) {
10
+ const header = tarData.subarray(offset, offset + 512);
11
+ // Empty block = end of archive
12
+ if (header.every(b => b === 0))
13
+ break;
14
+ // Parse file name (bytes 0-99, null-terminated)
15
+ const rawName = header.subarray(0, 100).toString('utf-8').replace(/\0/g, '');
16
+ // Also check prefix field (bytes 345-499) for long names
17
+ const prefix = header.subarray(345, 500).toString('utf-8').replace(/\0/g, '');
18
+ const fullName = prefix ? `${prefix}/${rawName}` : rawName;
19
+ // Parse file size (bytes 124-135, octal)
20
+ const sizeStr = header.subarray(124, 136).toString('utf-8').replace(/\0/g, '').trim();
21
+ const size = parseInt(sizeStr, 8) || 0;
22
+ // Parse type flag (byte 156): '0' or '\0' = regular file
23
+ const typeFlag = header[156];
24
+ const isFile = typeFlag === 0x30 || typeFlag === 0x00;
25
+ offset += 512; // Move past header
26
+ // Check if this is the file we want
27
+ const baseName = fullName.split('/').pop() ?? '';
28
+ if (isFile && (baseName === targetName || fullName === targetName)) {
29
+ const fileData = tarData.subarray(offset, offset + size);
30
+ await writeFile(resolve(destDir, targetName), fileData);
31
+ return;
32
+ }
33
+ // Skip data blocks (512-byte aligned)
34
+ const blocks = Math.ceil(size / 512);
35
+ offset += blocks * 512;
36
+ }
37
+ throw new Error(`"${targetName}" not found in tar archive`);
38
+ }
39
+ //# sourceMappingURL=tar-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-extract.js","sourceRoot":"","sources":["../../src/ast-index/tar-extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,OAAe,EACf,UAAkB;IAElB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QAEtD,+BAA+B;QAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM;QAEtC,gDAAgD;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7E,yDAAyD;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAE3D,yCAAyC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvC,yDAAyD;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;QAEtD,MAAM,IAAI,GAAG,CAAC,CAAC,mBAAmB;QAElC,oCAAoC;QACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,IAAI,MAAM,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QACrC,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,4BAA4B,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Types for ast-index CLI JSON output.
3
+ * These map to the ACTUAL JSON responses from ast-index v3.24.0 commands.
4
+ */
5
+ /** ast-index outline — parsed from text output (JSON not supported) */
6
+ export interface AstIndexOutlineEntry {
7
+ name: string;
8
+ kind: string;
9
+ start_line: number;
10
+ end_line: number;
11
+ signature?: string;
12
+ visibility?: string;
13
+ is_async?: boolean;
14
+ is_static?: boolean;
15
+ decorators?: string[];
16
+ doc?: string;
17
+ children?: AstIndexOutlineEntry[];
18
+ }
19
+ /** ast-index symbol --format json → Array<AstIndexSymbolRaw> */
20
+ export interface AstIndexSymbolRaw {
21
+ name: string;
22
+ kind: string;
23
+ line: number;
24
+ signature?: string;
25
+ path: string;
26
+ }
27
+ /** Normalized symbol detail (internal) */
28
+ export interface AstIndexSymbolDetail {
29
+ name: string;
30
+ kind: string;
31
+ file: string;
32
+ start_line: number;
33
+ signature?: string;
34
+ }
35
+ /** ast-index search --format json → { content_matches: [...] } */
36
+ export interface AstIndexSearchResponse {
37
+ content_matches: AstIndexSearchMatch[];
38
+ }
39
+ export interface AstIndexSearchMatch {
40
+ content: string;
41
+ line: number;
42
+ path: string;
43
+ }
44
+ /** Normalized search result (internal) */
45
+ export interface AstIndexSearchResult {
46
+ file: string;
47
+ line: number;
48
+ text: string;
49
+ }
50
+ /** ast-index usages --format json → Array<AstIndexUsageRaw> */
51
+ export interface AstIndexUsageRaw {
52
+ name: string;
53
+ line: number;
54
+ context: string;
55
+ path: string;
56
+ }
57
+ /** Normalized usage result (internal) */
58
+ export interface AstIndexUsageResult {
59
+ file: string;
60
+ line: number;
61
+ text: string;
62
+ kind: string;
63
+ }
64
+ export interface AstIndexImplementation {
65
+ name: string;
66
+ file: string;
67
+ line: number;
68
+ kind: string;
69
+ methods?: string[];
70
+ }
71
+ export interface AstIndexHierarchyNode {
72
+ name: string;
73
+ kind: string;
74
+ file?: string;
75
+ line?: number;
76
+ children?: AstIndexHierarchyNode[];
77
+ }
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast-index/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,mBAAmB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACpC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Types for ast-index CLI JSON output.
3
+ * These map to the ACTUAL JSON responses from ast-index v3.24.0 commands.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ast-index/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,3 @@
1
+ import type { TokenPilotConfig } from '../types.js';
2
+ export declare const DEFAULT_CONFIG: TokenPilotConfig;
3
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,gBAiD5B,CAAC"}
@@ -0,0 +1,51 @@
1
+ export const DEFAULT_CONFIG = {
2
+ astIndex: {
3
+ binaryPath: null,
4
+ buildOnStart: true,
5
+ timeout: 5000,
6
+ },
7
+ cache: {
8
+ maxSizeMB: 100,
9
+ ttlMinutes: 30,
10
+ watchFiles: true,
11
+ },
12
+ smartRead: {
13
+ smallFileThreshold: 80,
14
+ showDependencyHints: true,
15
+ advisoryReminders: true,
16
+ },
17
+ git: {
18
+ watchHead: true,
19
+ selectiveInvalidation: true,
20
+ },
21
+ hooks: {
22
+ enabled: true,
23
+ interceptRead: true,
24
+ autoInstall: true,
25
+ },
26
+ context: {
27
+ estimateTokens: true,
28
+ warnOnStale: true,
29
+ autoForgetMinutes: 60,
30
+ },
31
+ display: {
32
+ showImports: true,
33
+ showDocs: true,
34
+ showReferences: false,
35
+ maxDepth: 2,
36
+ showTokenSavings: true,
37
+ },
38
+ contextMode: {
39
+ enabled: 'auto',
40
+ adviseDelegation: true,
41
+ largeNonCodeThreshold: 200,
42
+ },
43
+ ignore: [
44
+ 'node_modules/**',
45
+ 'dist/**',
46
+ '.git/**',
47
+ '*.min.js',
48
+ '*.map',
49
+ ],
50
+ };
51
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,QAAQ,EAAE;QACR,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;KACd;IACD,KAAK,EAAE;QACL,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,IAAI;KACjB;IACD,SAAS,EAAE;QACT,kBAAkB,EAAE,EAAE;QACtB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;KACxB;IACD,GAAG,EAAE;QACH,SAAS,EAAE,IAAI;QACf,qBAAqB,EAAE,IAAI;KAC5B;IACD,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;KAClB;IACD,OAAO,EAAE;QACP,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,EAAE;KACtB;IACD,OAAO,EAAE;QACP,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,CAAC;QACX,gBAAgB,EAAE,IAAI;KACvB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,MAAe;QACxB,gBAAgB,EAAE,IAAI;QACtB,qBAAqB,EAAE,GAAG;KAC3B;IACD,MAAM,EAAE;QACN,iBAAiB;QACjB,SAAS;QACT,SAAS;QACT,UAAU;QACV,OAAO;KACR;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TokenPilotConfig } from '../types.js';
2
+ export declare function loadConfig(projectRoot: string): Promise<TokenPilotConfig>;
3
+ //# sourceMappingURL=loader.d.ts.map