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.
- package/.claude-plugin/hooks/hooks.json +15 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.claude-plugin/plugin.json +9 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +48 -0
- package/README.md +282 -0
- package/dist/ast-index/binary-manager.d.ts +15 -0
- package/dist/ast-index/binary-manager.d.ts.map +1 -0
- package/dist/ast-index/binary-manager.js +222 -0
- package/dist/ast-index/binary-manager.js.map +1 -0
- package/dist/ast-index/client.d.ts +48 -0
- package/dist/ast-index/client.d.ts.map +1 -0
- package/dist/ast-index/client.js +371 -0
- package/dist/ast-index/client.js.map +1 -0
- package/dist/ast-index/tar-extract.d.ts +6 -0
- package/dist/ast-index/tar-extract.d.ts.map +1 -0
- package/dist/ast-index/tar-extract.js +39 -0
- package/dist/ast-index/tar-extract.js.map +1 -0
- package/dist/ast-index/types.d.ts +78 -0
- package/dist/ast-index/types.d.ts.map +1 -0
- package/dist/ast-index/types.js +6 -0
- package/dist/ast-index/types.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +51 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +31 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/core/context-registry.d.ts +31 -0
- package/dist/core/context-registry.d.ts.map +1 -0
- package/dist/core/context-registry.js +133 -0
- package/dist/core/context-registry.js.map +1 -0
- package/dist/core/file-cache.d.ts +34 -0
- package/dist/core/file-cache.d.ts.map +1 -0
- package/dist/core/file-cache.js +120 -0
- package/dist/core/file-cache.js.map +1 -0
- package/dist/core/format-duration.d.ts +5 -0
- package/dist/core/format-duration.d.ts.map +1 -0
- package/dist/core/format-duration.js +13 -0
- package/dist/core/format-duration.js.map +1 -0
- package/dist/core/session-analytics.d.ts +26 -0
- package/dist/core/session-analytics.d.ts.map +1 -0
- package/dist/core/session-analytics.js +91 -0
- package/dist/core/session-analytics.js.map +1 -0
- package/dist/core/symbol-resolver.d.ts +21 -0
- package/dist/core/symbol-resolver.d.ts.map +1 -0
- package/dist/core/symbol-resolver.js +102 -0
- package/dist/core/symbol-resolver.js.map +1 -0
- package/dist/core/token-estimator.d.ts +10 -0
- package/dist/core/token-estimator.d.ts.map +1 -0
- package/dist/core/token-estimator.js +22 -0
- package/dist/core/token-estimator.js.map +1 -0
- package/dist/core/validation.d.ts +77 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +208 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/formatters/structure.d.ts +13 -0
- package/dist/formatters/structure.d.ts.map +1 -0
- package/dist/formatters/structure.js +90 -0
- package/dist/formatters/structure.js.map +1 -0
- package/dist/git/file-watcher.d.ts +17 -0
- package/dist/git/file-watcher.d.ts.map +1 -0
- package/dist/git/file-watcher.js +54 -0
- package/dist/git/file-watcher.js.map +1 -0
- package/dist/git/watcher.d.ts +25 -0
- package/dist/git/watcher.d.ts.map +1 -0
- package/dist/git/watcher.js +95 -0
- package/dist/git/watcher.js.map +1 -0
- package/dist/handlers/class-hierarchy.d.ts +11 -0
- package/dist/handlers/class-hierarchy.d.ts.map +1 -0
- package/dist/handlers/class-hierarchy.js +28 -0
- package/dist/handlers/class-hierarchy.js.map +1 -0
- package/dist/handlers/export-ast-index.d.ts +19 -0
- package/dist/handlers/export-ast-index.d.ts.map +1 -0
- package/dist/handlers/export-ast-index.js +107 -0
- package/dist/handlers/export-ast-index.js.map +1 -0
- package/dist/handlers/find-implementations.d.ts +11 -0
- package/dist/handlers/find-implementations.d.ts.map +1 -0
- package/dist/handlers/find-implementations.js +25 -0
- package/dist/handlers/find-implementations.js.map +1 -0
- package/dist/handlers/find-usages.d.ts +11 -0
- package/dist/handlers/find-usages.d.ts.map +1 -0
- package/dist/handlers/find-usages.js +23 -0
- package/dist/handlers/find-usages.js.map +1 -0
- package/dist/handlers/non-code.d.ts +25 -0
- package/dist/handlers/non-code.d.ts.map +1 -0
- package/dist/handlers/non-code.js +152 -0
- package/dist/handlers/non-code.js.map +1 -0
- package/dist/handlers/project-overview.d.ts +8 -0
- package/dist/handlers/project-overview.d.ts.map +1 -0
- package/dist/handlers/project-overview.js +84 -0
- package/dist/handlers/project-overview.js.map +1 -0
- package/dist/handlers/read-diff.d.ts +13 -0
- package/dist/handlers/read-diff.d.ts.map +1 -0
- package/dist/handlers/read-diff.js +174 -0
- package/dist/handlers/read-diff.js.map +1 -0
- package/dist/handlers/read-range.d.ts +14 -0
- package/dist/handlers/read-range.d.ts.map +1 -0
- package/dist/handlers/read-range.js +44 -0
- package/dist/handlers/read-range.js.map +1 -0
- package/dist/handlers/read-symbol.d.ts +16 -0
- package/dist/handlers/read-symbol.d.ts.map +1 -0
- package/dist/handlers/read-symbol.js +59 -0
- package/dist/handlers/read-symbol.js.map +1 -0
- package/dist/handlers/search-code.d.ts +14 -0
- package/dist/handlers/search-code.d.ts.map +1 -0
- package/dist/handlers/search-code.js +27 -0
- package/dist/handlers/search-code.js.map +1 -0
- package/dist/handlers/smart-read-many.d.ts +14 -0
- package/dist/handlers/smart-read-many.d.ts.map +1 -0
- package/dist/handlers/smart-read-many.js +32 -0
- package/dist/handlers/smart-read-many.js.map +1 -0
- package/dist/handlers/smart-read.d.ts +18 -0
- package/dist/handlers/smart-read.d.ts.map +1 -0
- package/dist/handlers/smart-read.js +86 -0
- package/dist/handlers/smart-read.js.map +1 -0
- package/dist/hooks/installer.d.ts +16 -0
- package/dist/hooks/installer.d.ts.map +1 -0
- package/dist/hooks/installer.js +89 -0
- package/dist/hooks/installer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/context-mode-detector.d.ts +16 -0
- package/dist/integration/context-mode-detector.d.ts.map +1 -0
- package/dist/integration/context-mode-detector.js +53 -0
- package/dist/integration/context-mode-detector.js.map +1 -0
- package/dist/server.d.ts +36 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +375 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +122 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +67 -0
- package/skills/install/SKILL.md +14 -0
- package/skills/stats/SKILL.md +8 -0
- package/start.sh +27 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FileCache } from '../core/file-cache.js';
|
|
2
|
+
import type { ContextRegistry } from '../core/context-registry.js';
|
|
3
|
+
export declare class GitWatcher {
|
|
4
|
+
private projectRoot;
|
|
5
|
+
private fileCache;
|
|
6
|
+
private contextRegistry;
|
|
7
|
+
private watcher;
|
|
8
|
+
private headRef;
|
|
9
|
+
private enabled;
|
|
10
|
+
constructor(projectRoot: string, fileCache: FileCache, contextRegistry: ContextRegistry, enabled: boolean);
|
|
11
|
+
start(): Promise<void>;
|
|
12
|
+
stop(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get files changed between current working tree and HEAD.
|
|
15
|
+
* Used for selective cache invalidation after edits.
|
|
16
|
+
*/
|
|
17
|
+
getChangedFiles(): Promise<string[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Get files changed in the last N commits.
|
|
20
|
+
*/
|
|
21
|
+
getRecentlyChangedFiles(commits?: number): Promise<string[]>;
|
|
22
|
+
private onBranchSwitch;
|
|
23
|
+
private readHead;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/git/watcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAU;gBAGvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO;IAQZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B5B,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAc1C;;OAEG;IACG,uBAAuB,CAAC,OAAO,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAc/C,cAAc;YAUd,QAAQ;CAMvB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { watch } from 'chokidar';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { readFile } from 'node:fs/promises';
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
export class GitWatcher {
|
|
8
|
+
projectRoot;
|
|
9
|
+
fileCache;
|
|
10
|
+
contextRegistry;
|
|
11
|
+
watcher = null;
|
|
12
|
+
headRef = '';
|
|
13
|
+
enabled;
|
|
14
|
+
constructor(projectRoot, fileCache, contextRegistry, enabled) {
|
|
15
|
+
this.projectRoot = projectRoot;
|
|
16
|
+
this.fileCache = fileCache;
|
|
17
|
+
this.contextRegistry = contextRegistry;
|
|
18
|
+
this.enabled = enabled;
|
|
19
|
+
}
|
|
20
|
+
async start() {
|
|
21
|
+
if (!this.enabled)
|
|
22
|
+
return;
|
|
23
|
+
// Read initial HEAD
|
|
24
|
+
try {
|
|
25
|
+
this.headRef = await this.readHead();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Not a git repo — disable watcher
|
|
29
|
+
this.enabled = false;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Watch .git/HEAD for branch switches
|
|
33
|
+
const gitHeadPath = resolve(this.projectRoot, '.git', 'HEAD');
|
|
34
|
+
this.watcher = watch(gitHeadPath, { persistent: false });
|
|
35
|
+
this.watcher.on('change', async () => {
|
|
36
|
+
try {
|
|
37
|
+
const newHead = await this.readHead();
|
|
38
|
+
if (newHead !== this.headRef) {
|
|
39
|
+
this.headRef = newHead;
|
|
40
|
+
await this.onBranchSwitch();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// ignore read errors
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
stop() {
|
|
49
|
+
this.watcher?.close();
|
|
50
|
+
this.watcher = null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get files changed between current working tree and HEAD.
|
|
54
|
+
* Used for selective cache invalidation after edits.
|
|
55
|
+
*/
|
|
56
|
+
async getChangedFiles() {
|
|
57
|
+
try {
|
|
58
|
+
const { stdout } = await execFileAsync('git', ['diff', '--name-only', 'HEAD'], { cwd: this.projectRoot, timeout: 5000 });
|
|
59
|
+
return stdout.trim().split('\n')
|
|
60
|
+
.filter(f => f.length > 0)
|
|
61
|
+
.map(f => resolve(this.projectRoot, f));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get files changed in the last N commits.
|
|
69
|
+
*/
|
|
70
|
+
async getRecentlyChangedFiles(commits = 1) {
|
|
71
|
+
try {
|
|
72
|
+
const { stdout } = await execFileAsync('git', ['diff', '--name-only', `HEAD~${commits}`, 'HEAD'], { cwd: this.projectRoot, timeout: 5000 });
|
|
73
|
+
return stdout.trim().split('\n')
|
|
74
|
+
.filter(f => f.length > 0)
|
|
75
|
+
.map(f => resolve(this.projectRoot, f));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async onBranchSwitch() {
|
|
82
|
+
// On branch switch, get files that differ between old and new branch
|
|
83
|
+
// and selectively invalidate only those
|
|
84
|
+
const changed = await this.getChangedFiles();
|
|
85
|
+
if (changed.length > 0) {
|
|
86
|
+
await this.fileCache.invalidateByGitDiff(changed);
|
|
87
|
+
this.contextRegistry.invalidateByGitDiff(changed);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async readHead() {
|
|
91
|
+
const headContent = await readFile(resolve(this.projectRoot, '.git', 'HEAD'), 'utf-8');
|
|
92
|
+
return headContent.trim();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/git/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
export interface ClassHierarchyArgs {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function handleClassHierarchy(args: ClassHierarchyArgs, astIndex: AstIndexClient): Promise<{
|
|
6
|
+
content: Array<{
|
|
7
|
+
type: 'text';
|
|
8
|
+
text: string;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=class-hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-hierarchy.d.ts","sourceRoot":"","sources":["../../src/handlers/class-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,EACxB,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,CAoB7D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export async function handleClassHierarchy(args, astIndex) {
|
|
2
|
+
const tree = await astIndex.hierarchy(args.name);
|
|
3
|
+
if (!tree) {
|
|
4
|
+
return {
|
|
5
|
+
content: [{
|
|
6
|
+
type: 'text',
|
|
7
|
+
text: `No hierarchy found for "${args.name}".`,
|
|
8
|
+
}],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const lines = [
|
|
12
|
+
`HIERARCHY: "${args.name}"`,
|
|
13
|
+
'',
|
|
14
|
+
];
|
|
15
|
+
formatNode(tree, lines, 0);
|
|
16
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
17
|
+
}
|
|
18
|
+
function formatNode(node, lines, depth) {
|
|
19
|
+
const indent = ' '.repeat(depth);
|
|
20
|
+
const loc = node.file ? ` (${node.file}:${node.line})` : '';
|
|
21
|
+
lines.push(`${indent}${node.kind} ${node.name}${loc}`);
|
|
22
|
+
if (node.children) {
|
|
23
|
+
for (const child of node.children) {
|
|
24
|
+
formatNode(child, lines, depth + 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=class-hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-hierarchy.js","sourceRoot":"","sources":["../../src/handlers/class-hierarchy.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAwB,EACxB,QAAwB;IAExB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,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,MAAM,KAAK,GAAa;QACtB,eAAe,IAAI,CAAC,IAAI,GAAG;QAC3B,EAAE;KACH,CAAC;IAEF,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,UAAU,CAAC,IAA2B,EAAE,KAAe,EAAE,KAAa;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
import type { FileCache } from '../core/file-cache.js';
|
|
3
|
+
export interface ExportAstIndexArgs {
|
|
4
|
+
paths?: string[];
|
|
5
|
+
format?: 'markdown' | 'json';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Export AST structural data in a format suitable for context-mode's BM25 index.
|
|
9
|
+
*
|
|
10
|
+
* Generates a markdown document with headings per file and symbols as sections,
|
|
11
|
+
* which context-mode can index via its `index` tool for cross-tool search.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleExportAstIndex(args: ExportAstIndexArgs, astIndex: AstIndexClient, fileCache: FileCache): Promise<{
|
|
14
|
+
content: Array<{
|
|
15
|
+
type: 'text';
|
|
16
|
+
text: string;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=export-ast-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-ast-index.d.ts","sourceRoot":"","sources":["../../src/handlers/export-ast-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuB7D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export AST structural data in a format suitable for context-mode's BM25 index.
|
|
3
|
+
*
|
|
4
|
+
* Generates a markdown document with headings per file and symbols as sections,
|
|
5
|
+
* which context-mode can index via its `index` tool for cross-tool search.
|
|
6
|
+
*/
|
|
7
|
+
export async function handleExportAstIndex(args, astIndex, fileCache) {
|
|
8
|
+
const format = args.format ?? 'markdown';
|
|
9
|
+
// Gather all cached files or specified subset
|
|
10
|
+
const cachedPaths = fileCache.cachedPaths();
|
|
11
|
+
const targetPaths = args.paths && args.paths.length > 0
|
|
12
|
+
? args.paths.filter(p => cachedPaths.includes(p))
|
|
13
|
+
: cachedPaths;
|
|
14
|
+
if (targetPaths.length === 0) {
|
|
15
|
+
return {
|
|
16
|
+
content: [{
|
|
17
|
+
type: 'text',
|
|
18
|
+
text: 'No indexed files available. Use smart_read on files first to populate the cache.',
|
|
19
|
+
}],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (format === 'json') {
|
|
23
|
+
return exportJson(targetPaths, fileCache);
|
|
24
|
+
}
|
|
25
|
+
return exportMarkdown(targetPaths, fileCache);
|
|
26
|
+
}
|
|
27
|
+
function exportMarkdown(paths, fileCache) {
|
|
28
|
+
const sections = [
|
|
29
|
+
'# Token Pilot AST Index Export',
|
|
30
|
+
'',
|
|
31
|
+
`Exported ${paths.length} files. Index this content via context-mode for cross-tool search.`,
|
|
32
|
+
'',
|
|
33
|
+
];
|
|
34
|
+
for (const filePath of paths) {
|
|
35
|
+
const cached = fileCache.get(filePath);
|
|
36
|
+
if (!cached)
|
|
37
|
+
continue;
|
|
38
|
+
const { structure } = cached;
|
|
39
|
+
sections.push(`## ${structure.path}`);
|
|
40
|
+
sections.push('');
|
|
41
|
+
sections.push(`Language: ${structure.language} | Lines: ${structure.meta.lines}`);
|
|
42
|
+
sections.push('');
|
|
43
|
+
// Imports as a section
|
|
44
|
+
if (structure.imports.length > 0) {
|
|
45
|
+
sections.push('### Imports');
|
|
46
|
+
for (const imp of structure.imports) {
|
|
47
|
+
sections.push(`- \`${imp.specifiers.join(', ')}\` from \`${imp.source}\``);
|
|
48
|
+
}
|
|
49
|
+
sections.push('');
|
|
50
|
+
}
|
|
51
|
+
// Symbols as searchable sections
|
|
52
|
+
for (const sym of structure.symbols) {
|
|
53
|
+
formatSymbolMarkdown(sym, sections, 3);
|
|
54
|
+
}
|
|
55
|
+
sections.push('---');
|
|
56
|
+
sections.push('');
|
|
57
|
+
}
|
|
58
|
+
sections.push('');
|
|
59
|
+
sections.push('To index in context-mode, pass this content to the `index` tool with source: "token-pilot-ast".');
|
|
60
|
+
return { content: [{ type: 'text', text: sections.join('\n') }] };
|
|
61
|
+
}
|
|
62
|
+
function exportJson(paths, fileCache) {
|
|
63
|
+
const data = [];
|
|
64
|
+
for (const filePath of paths) {
|
|
65
|
+
const cached = fileCache.get(filePath);
|
|
66
|
+
if (!cached)
|
|
67
|
+
continue;
|
|
68
|
+
const symbols = flattenSymbols(cached.structure.symbols);
|
|
69
|
+
data.push({
|
|
70
|
+
path: cached.structure.path,
|
|
71
|
+
language: cached.structure.language,
|
|
72
|
+
lines: cached.structure.meta.lines,
|
|
73
|
+
symbols,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
77
|
+
}
|
|
78
|
+
function formatSymbolMarkdown(sym, sections, headingLevel) {
|
|
79
|
+
const heading = '#'.repeat(Math.min(headingLevel, 6));
|
|
80
|
+
sections.push(`${heading} ${sym.kind} \`${sym.name}\``);
|
|
81
|
+
sections.push('');
|
|
82
|
+
sections.push(`Signature: \`${sym.signature}\` (L${sym.location.startLine}-${sym.location.endLine})`);
|
|
83
|
+
if (sym.doc) {
|
|
84
|
+
sections.push('');
|
|
85
|
+
sections.push(sym.doc);
|
|
86
|
+
}
|
|
87
|
+
sections.push('');
|
|
88
|
+
for (const child of sym.children) {
|
|
89
|
+
formatSymbolMarkdown(child, sections, headingLevel + 1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function flattenSymbols(symbols) {
|
|
93
|
+
const result = [];
|
|
94
|
+
for (const sym of symbols) {
|
|
95
|
+
result.push({
|
|
96
|
+
name: sym.name,
|
|
97
|
+
kind: sym.kind,
|
|
98
|
+
signature: sym.signature,
|
|
99
|
+
location: `L${sym.location.startLine}-${sym.location.endLine}`,
|
|
100
|
+
});
|
|
101
|
+
if (sym.children.length > 0) {
|
|
102
|
+
result.push(...flattenSymbols(sym.children));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=export-ast-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-ast-index.js","sourceRoot":"","sources":["../../src/handlers/export-ast-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
export interface FindImplementationsArgs {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function handleFindImplementations(args: FindImplementationsArgs, astIndex: AstIndexClient): Promise<{
|
|
6
|
+
content: Array<{
|
|
7
|
+
type: 'text';
|
|
8
|
+
text: string;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=find-implementations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-implementations.d.ts","sourceRoot":"","sources":["../../src/handlers/find-implementations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,EAC7B,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,CA4B7D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export async function handleFindImplementations(args, astIndex) {
|
|
2
|
+
const results = await astIndex.implementations(args.name);
|
|
3
|
+
if (results.length === 0) {
|
|
4
|
+
return {
|
|
5
|
+
content: [{
|
|
6
|
+
type: 'text',
|
|
7
|
+
text: `No implementations found for "${args.name}".`,
|
|
8
|
+
}],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const lines = [
|
|
12
|
+
`IMPLEMENTATIONS: "${args.name}" (${results.length} found)`,
|
|
13
|
+
'',
|
|
14
|
+
];
|
|
15
|
+
for (const impl of results) {
|
|
16
|
+
const methods = impl.methods?.length
|
|
17
|
+
? ` — methods: ${impl.methods.join(', ')}`
|
|
18
|
+
: '';
|
|
19
|
+
lines.push(` ${impl.kind} ${impl.name} (${impl.file}:${impl.line})${methods}`);
|
|
20
|
+
}
|
|
21
|
+
lines.push('');
|
|
22
|
+
lines.push('HINT: Use read_symbol() to inspect a specific implementation.');
|
|
23
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=find-implementations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-implementations.js","sourceRoot":"","sources":["../../src/handlers/find-implementations.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAA6B,EAC7B,QAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,iCAAiC,IAAI,CAAC,IAAI,IAAI;iBACrD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,qBAAqB,IAAI,CAAC,IAAI,MAAM,OAAO,CAAC,MAAM,SAAS;QAC3D,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;YAClC,CAAC,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAE5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
export interface FindUsagesArgs {
|
|
3
|
+
symbol: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function handleFindUsages(args: FindUsagesArgs, astIndex: AstIndexClient): Promise<{
|
|
6
|
+
content: Array<{
|
|
7
|
+
type: 'text';
|
|
8
|
+
text: string;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=find-usages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-usages.d.ts","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,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,CA0B7D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export async function handleFindUsages(args, astIndex) {
|
|
2
|
+
const results = await astIndex.usages(args.symbol);
|
|
3
|
+
if (results.length === 0) {
|
|
4
|
+
return {
|
|
5
|
+
content: [{
|
|
6
|
+
type: 'text',
|
|
7
|
+
text: `No usages found for "${args.symbol}".`,
|
|
8
|
+
}],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const lines = [
|
|
12
|
+
`USAGES: "${args.symbol}" (${results.length} total)`,
|
|
13
|
+
'',
|
|
14
|
+
];
|
|
15
|
+
for (const r of results) {
|
|
16
|
+
lines.push(` ${r.file}:${r.line}`);
|
|
17
|
+
lines.push(` ${r.text.trim()}`);
|
|
18
|
+
}
|
|
19
|
+
lines.push('');
|
|
20
|
+
lines.push('HINT: Use read_symbol() or read_range() to load specific results.');
|
|
21
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=find-usages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-usages.js","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAoB,EACpB,QAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,wBAAwB,IAAI,CAAC,MAAM,IAAI;iBAC9C,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,YAAY,IAAI,CAAC,MAAM,MAAM,OAAO,CAAC,MAAM,SAAS;QACpD,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ContextRegistry } from '../core/context-registry.js';
|
|
2
|
+
import type { ContextModeStatus } from '../integration/context-mode-detector.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detect if a file is a non-code structured file (JSON, YAML, Markdown, etc.)
|
|
5
|
+
*/
|
|
6
|
+
export declare function isNonCodeStructured(filePath: string): boolean;
|
|
7
|
+
export interface NonCodeOptions {
|
|
8
|
+
contextModeStatus?: ContextModeStatus;
|
|
9
|
+
largeNonCodeThreshold?: number;
|
|
10
|
+
adviseDelegation?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate a structural summary for non-code files.
|
|
14
|
+
* Returns null if the file type is not supported.
|
|
15
|
+
*
|
|
16
|
+
* When context-mode is detected and the file exceeds the large threshold,
|
|
17
|
+
* appends an advisory suggesting context-mode's execute_file for deeper analysis.
|
|
18
|
+
*/
|
|
19
|
+
export declare function handleNonCodeRead(filePath: string, projectRoot: string, contextRegistry: ContextRegistry, options?: NonCodeOptions): Promise<{
|
|
20
|
+
content: Array<{
|
|
21
|
+
type: 'text';
|
|
22
|
+
text: string;
|
|
23
|
+
}>;
|
|
24
|
+
} | null>;
|
|
25
|
+
//# sourceMappingURL=non-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"non-code.d.ts","sourceRoot":"","sources":["../../src/handlers/non-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAiDpE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { extname } from 'node:path';
|
|
3
|
+
import { estimateTokens } from '../core/token-estimator.js';
|
|
4
|
+
import { resolveSafePath } from '../core/validation.js';
|
|
5
|
+
/**
|
|
6
|
+
* Detect if a file is a non-code structured file (JSON, YAML, Markdown, etc.)
|
|
7
|
+
*/
|
|
8
|
+
export function isNonCodeStructured(filePath) {
|
|
9
|
+
const ext = extname(filePath).toLowerCase();
|
|
10
|
+
return ['.json', '.yaml', '.yml', '.md', '.markdown', '.toml', '.xml', '.csv'].includes(ext);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate a structural summary for non-code files.
|
|
14
|
+
* Returns null if the file type is not supported.
|
|
15
|
+
*
|
|
16
|
+
* When context-mode is detected and the file exceeds the large threshold,
|
|
17
|
+
* appends an advisory suggesting context-mode's execute_file for deeper analysis.
|
|
18
|
+
*/
|
|
19
|
+
export async function handleNonCodeRead(filePath, projectRoot, contextRegistry, options) {
|
|
20
|
+
const absPath = resolveSafePath(projectRoot, filePath);
|
|
21
|
+
const content = await readFile(absPath, 'utf-8');
|
|
22
|
+
const lines = content.split('\n');
|
|
23
|
+
const ext = extname(absPath).toLowerCase();
|
|
24
|
+
let summary;
|
|
25
|
+
switch (ext) {
|
|
26
|
+
case '.json':
|
|
27
|
+
summary = summarizeJson(filePath, content, lines.length);
|
|
28
|
+
break;
|
|
29
|
+
case '.yaml':
|
|
30
|
+
case '.yml':
|
|
31
|
+
summary = summarizeYaml(filePath, content, lines.length);
|
|
32
|
+
break;
|
|
33
|
+
case '.md':
|
|
34
|
+
case '.markdown':
|
|
35
|
+
summary = summarizeMarkdown(filePath, content, lines.length);
|
|
36
|
+
break;
|
|
37
|
+
case '.toml':
|
|
38
|
+
summary = summarizeToml(filePath, content, lines.length);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
// Append context-mode delegation advice for large non-code files
|
|
44
|
+
const threshold = options?.largeNonCodeThreshold ?? 200;
|
|
45
|
+
const advise = options?.adviseDelegation !== false;
|
|
46
|
+
if (advise &&
|
|
47
|
+
options?.contextModeStatus?.detected &&
|
|
48
|
+
lines.length > threshold) {
|
|
49
|
+
summary += '\n\n---\nADVISORY: This is a large non-code file (' + lines.length + ' lines). '
|
|
50
|
+
+ 'context-mode is available — consider using execute_file or batch_execute '
|
|
51
|
+
+ 'for deeper analysis (BM25-indexed search, sandbox processing).';
|
|
52
|
+
}
|
|
53
|
+
const tokens = estimateTokens(summary);
|
|
54
|
+
contextRegistry.trackLoad(absPath, {
|
|
55
|
+
type: 'structure',
|
|
56
|
+
startLine: 1,
|
|
57
|
+
endLine: lines.length,
|
|
58
|
+
tokens,
|
|
59
|
+
});
|
|
60
|
+
return { content: [{ type: 'text', text: summary }] };
|
|
61
|
+
}
|
|
62
|
+
function summarizeJson(filePath, content, lineCount) {
|
|
63
|
+
const lines = [
|
|
64
|
+
`FILE: ${filePath} (${lineCount} lines, JSON)`,
|
|
65
|
+
'',
|
|
66
|
+
];
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(content);
|
|
69
|
+
if (Array.isArray(parsed)) {
|
|
70
|
+
lines.push(`TYPE: Array (${parsed.length} items)`);
|
|
71
|
+
if (parsed.length > 0 && typeof parsed[0] === 'object') {
|
|
72
|
+
lines.push(`ITEM KEYS: ${Object.keys(parsed[0]).join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (typeof parsed === 'object' && parsed !== null) {
|
|
76
|
+
lines.push('TOP-LEVEL KEYS:');
|
|
77
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
78
|
+
const type = Array.isArray(value)
|
|
79
|
+
? `array[${value.length}]`
|
|
80
|
+
: typeof value === 'object' && value !== null
|
|
81
|
+
? `object{${Object.keys(value).length} keys}`
|
|
82
|
+
: typeof value;
|
|
83
|
+
lines.push(` ${key}: ${type}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
lines.push('(Invalid JSON — parse error)');
|
|
89
|
+
}
|
|
90
|
+
return lines.join('\n');
|
|
91
|
+
}
|
|
92
|
+
function summarizeYaml(filePath, content, lineCount) {
|
|
93
|
+
const lines = [
|
|
94
|
+
`FILE: ${filePath} (${lineCount} lines, YAML)`,
|
|
95
|
+
'',
|
|
96
|
+
'TOP-LEVEL KEYS:',
|
|
97
|
+
];
|
|
98
|
+
// Simple YAML key extraction (top-level keys that start at column 0)
|
|
99
|
+
const topKeys = [];
|
|
100
|
+
for (const line of content.split('\n')) {
|
|
101
|
+
const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):/);
|
|
102
|
+
if (match && !line.startsWith('#')) {
|
|
103
|
+
topKeys.push(match[1]);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const key of topKeys) {
|
|
107
|
+
lines.push(` ${key}`);
|
|
108
|
+
}
|
|
109
|
+
if (topKeys.length === 0) {
|
|
110
|
+
lines.push(' (no top-level keys detected)');
|
|
111
|
+
}
|
|
112
|
+
return lines.join('\n');
|
|
113
|
+
}
|
|
114
|
+
function summarizeMarkdown(filePath, content, lineCount) {
|
|
115
|
+
const lines = [
|
|
116
|
+
`FILE: ${filePath} (${lineCount} lines, Markdown)`,
|
|
117
|
+
'',
|
|
118
|
+
'TABLE OF CONTENTS:',
|
|
119
|
+
];
|
|
120
|
+
// Extract headings
|
|
121
|
+
for (const line of content.split('\n')) {
|
|
122
|
+
const match = line.match(/^(#{1,6})\s+(.+)/);
|
|
123
|
+
if (match) {
|
|
124
|
+
const level = match[1].length;
|
|
125
|
+
const indent = ' '.repeat(level - 1);
|
|
126
|
+
lines.push(`${indent}${match[2]}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Count code blocks
|
|
130
|
+
const codeBlocks = (content.match(/```/g) || []).length / 2;
|
|
131
|
+
if (codeBlocks > 0) {
|
|
132
|
+
lines.push('');
|
|
133
|
+
lines.push(`Code blocks: ${Math.floor(codeBlocks)}`);
|
|
134
|
+
}
|
|
135
|
+
return lines.join('\n');
|
|
136
|
+
}
|
|
137
|
+
function summarizeToml(filePath, content, lineCount) {
|
|
138
|
+
const lines = [
|
|
139
|
+
`FILE: ${filePath} (${lineCount} lines, TOML)`,
|
|
140
|
+
'',
|
|
141
|
+
'SECTIONS:',
|
|
142
|
+
];
|
|
143
|
+
// Extract [section] headers
|
|
144
|
+
for (const line of content.split('\n')) {
|
|
145
|
+
const match = line.match(/^\[([^\]]+)\]/);
|
|
146
|
+
if (match) {
|
|
147
|
+
lines.push(` [${match[1]}]`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=non-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"non-code.js","sourceRoot":"","sources":["../../src/handlers/non-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AstIndexClient } from '../ast-index/client.js';
|
|
2
|
+
export declare function handleProjectOverview(projectRoot: string, astIndex: AstIndexClient): Promise<{
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=project-overview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/handlers/project-overview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAsB,qBAAqB,CACzC,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,CAsC7D"}
|