codetree-claude 1.5.0 → 1.5.2
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/README.md +137 -121
- package/dist/cli.js +69 -83
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +126 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +37 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +181 -0
- package/dist/diff.js.map +1 -0
- package/dist/doctor.d.ts +5 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +139 -0
- package/dist/doctor.js.map +1 -0
- package/dist/hook/post-compact.js +1 -23
- package/dist/hook/post-compact.js.map +1 -1
- package/dist/hook/post-tool-use.js +11 -27
- package/dist/hook/post-tool-use.js.map +1 -1
- package/dist/hook/pre-compact.js +1 -22
- package/dist/hook/pre-compact.js.map +1 -1
- package/dist/hook/pre-tool-use.bundled.js +49 -77
- package/dist/hook/pre-tool-use.js +23 -90
- package/dist/hook/pre-tool-use.js.map +1 -1
- package/dist/hook/session-start.js +19 -23
- package/dist/hook/session-start.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/extractor-registry.d.ts.map +1 -1
- package/dist/indexer/extractor-registry.js +6 -0
- package/dist/indexer/extractor-registry.js.map +1 -1
- package/dist/indexer/extractors/csharp.d.ts +12 -0
- package/dist/indexer/extractors/csharp.d.ts.map +1 -0
- package/dist/indexer/extractors/csharp.js +165 -0
- package/dist/indexer/extractors/csharp.js.map +1 -0
- package/dist/indexer/extractors/go.js +44 -1
- package/dist/indexer/extractors/go.js.map +1 -1
- package/dist/indexer/extractors/java.d.ts.map +1 -1
- package/dist/indexer/extractors/java.js +41 -3
- package/dist/indexer/extractors/java.js.map +1 -1
- package/dist/indexer/extractors/javascript.d.ts.map +1 -1
- package/dist/indexer/extractors/javascript.js +67 -3
- package/dist/indexer/extractors/javascript.js.map +1 -1
- package/dist/indexer/extractors/python.d.ts.map +1 -1
- package/dist/indexer/extractors/python.js +31 -2
- package/dist/indexer/extractors/python.js.map +1 -1
- package/dist/indexer/extractors/ruby.d.ts +10 -0
- package/dist/indexer/extractors/ruby.d.ts.map +1 -0
- package/dist/indexer/extractors/ruby.js +145 -0
- package/dist/indexer/extractors/ruby.js.map +1 -0
- package/dist/indexer/extractors/rust.d.ts +10 -0
- package/dist/indexer/extractors/rust.d.ts.map +1 -0
- package/dist/indexer/extractors/rust.js +194 -0
- package/dist/indexer/extractors/rust.js.map +1 -0
- package/dist/indexer/indexer.d.ts +15 -0
- package/dist/indexer/indexer.d.ts.map +1 -1
- package/dist/indexer/indexer.js +168 -4
- package/dist/indexer/indexer.js.map +1 -1
- package/dist/server/ipc.d.ts +10 -4
- package/dist/server/ipc.d.ts.map +1 -1
- package/dist/server/ipc.js +190 -109
- package/dist/server/ipc.js.map +1 -1
- package/dist/server/mcp-server.js +36 -27
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/codetree-find-refs.d.ts.map +1 -1
- package/dist/server/tools/codetree-find-refs.js +23 -14
- package/dist/server/tools/codetree-find-refs.js.map +1 -1
- package/dist/server/tools/codetree-memory.d.ts +3 -6
- package/dist/server/tools/codetree-memory.d.ts.map +1 -1
- package/dist/server/tools/codetree-memory.js +9 -10
- package/dist/server/tools/codetree-memory.js.map +1 -1
- package/dist/server/tools/codetree-outline.d.ts +57 -0
- package/dist/server/tools/codetree-outline.d.ts.map +1 -0
- package/dist/server/tools/codetree-outline.js +76 -0
- package/dist/server/tools/codetree-outline.js.map +1 -0
- package/dist/server/tools/codetree-probe.d.ts +53 -0
- package/dist/server/tools/codetree-probe.d.ts.map +1 -0
- package/dist/server/tools/codetree-probe.js +81 -0
- package/dist/server/tools/codetree-probe.js.map +1 -0
- package/dist/server/tools/codetree-read.d.ts +52 -3
- package/dist/server/tools/codetree-read.d.ts.map +1 -1
- package/dist/server/tools/codetree-read.js +237 -55
- package/dist/server/tools/codetree-read.js.map +1 -1
- package/dist/server/tools/codetree-search.d.ts +13 -1
- package/dist/server/tools/codetree-search.d.ts.map +1 -1
- package/dist/server/tools/codetree-search.js +80 -52
- package/dist/server/tools/codetree-search.js.map +1 -1
- package/dist/server/tools/codetree-structure.d.ts +25 -1
- package/dist/server/tools/codetree-structure.d.ts.map +1 -1
- package/dist/server/tools/codetree-structure.js +92 -42
- package/dist/server/tools/codetree-structure.js.map +1 -1
- package/dist/server/tools/codetree-summary.d.ts +2 -0
- package/dist/server/tools/codetree-summary.d.ts.map +1 -1
- package/dist/server/tools/codetree-summary.js +5 -0
- package/dist/server/tools/codetree-summary.js.map +1 -1
- package/dist/setup/install.d.ts +45 -1
- package/dist/setup/install.d.ts.map +1 -1
- package/dist/setup/install.js +163 -58
- package/dist/setup/install.js.map +1 -1
- package/dist/setup/template-load.d.ts +9 -0
- package/dist/setup/template-load.d.ts.map +1 -0
- package/dist/setup/template-load.js +39 -0
- package/dist/setup/template-load.js.map +1 -0
- package/dist/storage/database.d.ts +49 -0
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +383 -43
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/disk-manager.d.ts.map +1 -1
- package/dist/storage/disk-manager.js +1 -5
- package/dist/storage/disk-manager.js.map +1 -1
- package/dist/utils.d.ts +23 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +102 -0
- package/dist/utils.js.map +1 -0
- package/package.json +46 -10
- package/templates/README.md +15 -0
- package/templates/agents-codetree.snippet.md +24 -0
- package/templates/claude-md-codetree.snippet.md +22 -0
- package/templates/claude-rules-codetree.md +23 -0
- package/templates/cursor-codetree.mdc +31 -0
- package/templates/gemini-codetree.snippet.md +6 -0
|
@@ -1,92 +1,123 @@
|
|
|
1
|
+
import { escapeRegex } from "../../utils.js";
|
|
1
2
|
export function createSearchTool(config, indexer, db) {
|
|
3
|
+
const tk = config.tokenSave.search;
|
|
2
4
|
return {
|
|
3
5
|
name: "codetree_search",
|
|
4
|
-
description: "Search the codebase
|
|
5
|
-
"
|
|
6
|
-
"Use
|
|
6
|
+
description: "Search the codebase index for symbols (and optionally content). Token-cheap defaults: " +
|
|
7
|
+
"small limit, signatures only on exact matches. Use codetree_probe for cheap presence checks. " +
|
|
8
|
+
"Use cursor for pagination.",
|
|
7
9
|
inputSchema: {
|
|
8
10
|
type: "object",
|
|
9
11
|
properties: {
|
|
10
|
-
query: {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
file_pattern: {
|
|
19
|
-
type: "string",
|
|
20
|
-
description: "Filter by file path pattern (e.g., 'src/api' to only search in src/api/)",
|
|
21
|
-
},
|
|
22
|
-
limit: {
|
|
23
|
-
type: "number",
|
|
24
|
-
description: "Maximum number of results. Default: 50",
|
|
25
|
-
},
|
|
26
|
-
content_search: {
|
|
27
|
-
type: "boolean",
|
|
28
|
-
description: "Also search file contents (slower). Default: false",
|
|
29
|
-
},
|
|
12
|
+
query: { type: "string", description: "Search query." },
|
|
13
|
+
kind: { type: "string", description: "function, class, interface, type, variable, method, enum, import." },
|
|
14
|
+
file_pattern: { type: "string", description: "Filter by path substring (e.g., 'src/api')." },
|
|
15
|
+
limit: { type: "number", description: `Max results. Default: ${tk.defaultLimit}.` },
|
|
16
|
+
content_search: { type: "boolean", description: "Also search file contents (slower). Default: false." },
|
|
17
|
+
include_signature: { type: "boolean", description: `Include signature on fuzzy matches. Default: ${tk.includeSignatureForFuzzy}.` },
|
|
18
|
+
cursor: { type: "number", description: "Pagination cursor from a previous response." },
|
|
30
19
|
},
|
|
31
20
|
required: ["query"],
|
|
32
21
|
},
|
|
33
22
|
handler: async (params) => {
|
|
34
|
-
const limit = params.limit ??
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
const limit = params.limit ?? tk.defaultLimit;
|
|
24
|
+
const cursor = params.cursor ?? 0;
|
|
25
|
+
const includeSigForFuzzy = params.include_signature ?? tk.includeSignatureForFuzzy;
|
|
26
|
+
const snippetMax = tk.snippetMaxChars;
|
|
27
|
+
// Pull a few extra to detect "more available". When file_pattern is set,
|
|
28
|
+
// we filter post-fetch — so over-fetch enough that the page isn't starved.
|
|
29
|
+
const fetchMultiplier = params.file_pattern ? 8 : 1;
|
|
30
|
+
const FETCH_CAP = 1000;
|
|
31
|
+
const fetchN = Math.min(FETCH_CAP, (cursor + limit + 1) * fetchMultiplier);
|
|
32
|
+
let symbols = db.searchSymbols(params.query, params.kind, fetchN);
|
|
38
33
|
if (params.file_pattern) {
|
|
39
34
|
const pattern = params.file_pattern.toLowerCase();
|
|
40
35
|
symbols = symbols.filter((s) => s.file_path.toLowerCase().includes(pattern));
|
|
41
36
|
}
|
|
42
|
-
//
|
|
37
|
+
// Apply cursor + limit
|
|
38
|
+
const totalAvailable = symbols.length;
|
|
39
|
+
const page = symbols.slice(cursor, cursor + limit);
|
|
40
|
+
const hasMore = totalAvailable > cursor + limit;
|
|
41
|
+
// Log for session memory (best-effort)
|
|
43
42
|
try {
|
|
44
43
|
const latestSession = db.getRecentSessions(1);
|
|
45
44
|
if (latestSession.length > 0 && latestSession[0].id) {
|
|
46
45
|
db.logSessionSearch(latestSession[0].id, params.query);
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
|
-
catch { /*
|
|
48
|
+
catch { /* ignore */ }
|
|
50
49
|
const result = {
|
|
51
|
-
symbols:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
symbols: page.map((s) => {
|
|
51
|
+
const exact = s.name === params.query;
|
|
52
|
+
const item = {
|
|
53
|
+
name: s.name,
|
|
54
|
+
kind: s.kind,
|
|
55
|
+
file_path: s.file_path,
|
|
56
|
+
line_start: s.line_start,
|
|
57
|
+
exported: s.exported,
|
|
58
|
+
};
|
|
59
|
+
if (exact || includeSigForFuzzy)
|
|
60
|
+
item.signature = s.signature;
|
|
61
|
+
return item;
|
|
62
|
+
}),
|
|
63
|
+
totalResults: page.length,
|
|
60
64
|
source: "index",
|
|
61
65
|
};
|
|
62
|
-
|
|
66
|
+
if (hasMore) {
|
|
67
|
+
result.next_cursor = cursor + limit;
|
|
68
|
+
result.truncated = true;
|
|
69
|
+
}
|
|
70
|
+
// Optional content search via trigram index (much faster than sequential scan)
|
|
63
71
|
if (params.content_search) {
|
|
64
72
|
const contentMatches = [];
|
|
65
|
-
const files = db.getAllFiles();
|
|
66
73
|
const queryLower = params.query.toLowerCase();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
// Non-global regex — simpler semantics, no lastIndex foot-gun.
|
|
75
|
+
const regex = new RegExp(escapeRegex(params.query), "i");
|
|
76
|
+
// Pick candidate set:
|
|
77
|
+
// ≥3 chars → trigram index → token postings → all files (last resort)
|
|
78
|
+
// <3 chars → too short to index meaningfully, but we cap the corpus
|
|
79
|
+
// at MAX_FALLBACK_FILES to avoid full-repo scans.
|
|
80
|
+
const MAX_FALLBACK_FILES = 500;
|
|
81
|
+
let candidatePaths;
|
|
82
|
+
if (params.query.length >= 3) {
|
|
83
|
+
const trigramCandidates = db.searchByTrigrams(params.query, limit * 5);
|
|
84
|
+
if (trigramCandidates.length > 0) {
|
|
85
|
+
candidatePaths = trigramCandidates;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const postings = indexer.filesContainingAny([params.query]);
|
|
89
|
+
if (postings.size > 0) {
|
|
90
|
+
candidatePaths = Array.from(postings);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
candidatePaths = db.getAllFiles().map((f) => f.path);
|
|
94
|
+
}
|
|
71
95
|
}
|
|
72
|
-
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Short query: bounded scan — agents shouldn't pay full-corpus cost
|
|
99
|
+
// for 1- or 2-char queries (they're almost never useful anyway).
|
|
100
|
+
candidatePaths = db.getAllFiles().slice(0, MAX_FALLBACK_FILES).map((f) => f.path);
|
|
101
|
+
}
|
|
102
|
+
for (const filePath of candidatePaths) {
|
|
103
|
+
if (params.file_pattern && !filePath.toLowerCase().includes(params.file_pattern.toLowerCase()))
|
|
104
|
+
continue;
|
|
105
|
+
const content = indexer.readCached(filePath);
|
|
73
106
|
if (!content)
|
|
74
107
|
continue;
|
|
75
|
-
// Quick check: skip file entirely if query string not present
|
|
76
108
|
if (!content.toLowerCase().includes(queryLower))
|
|
77
109
|
continue;
|
|
78
110
|
const lines = content.split("\n");
|
|
79
111
|
for (let i = 0; i < lines.length; i++) {
|
|
80
112
|
if (regex.test(lines[i])) {
|
|
81
113
|
contentMatches.push({
|
|
82
|
-
file_path:
|
|
114
|
+
file_path: filePath,
|
|
83
115
|
line_number: i + 1,
|
|
84
|
-
line_content: lines[i].trim().slice(0,
|
|
116
|
+
line_content: lines[i].trim().slice(0, snippetMax),
|
|
85
117
|
});
|
|
86
118
|
if (contentMatches.length >= limit)
|
|
87
119
|
break;
|
|
88
120
|
}
|
|
89
|
-
regex.lastIndex = 0;
|
|
90
121
|
}
|
|
91
122
|
if (contentMatches.length >= limit)
|
|
92
123
|
break;
|
|
@@ -98,7 +129,4 @@ export function createSearchTool(config, indexer, db) {
|
|
|
98
129
|
},
|
|
99
130
|
};
|
|
100
131
|
}
|
|
101
|
-
function escapeRegex(str) {
|
|
102
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
103
|
-
}
|
|
104
132
|
//# sourceMappingURL=codetree-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codetree-search.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codetree-search.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ export interface StructureParams {
|
|
|
5
5
|
depth?: number;
|
|
6
6
|
include_symbols?: boolean;
|
|
7
7
|
pattern?: string;
|
|
8
|
+
format?: "json" | "text";
|
|
9
|
+
symbols_per_file?: number;
|
|
10
|
+
cursor?: number;
|
|
11
|
+
limit?: number;
|
|
8
12
|
}
|
|
9
13
|
interface TreeNode {
|
|
10
14
|
name: string;
|
|
@@ -12,6 +16,7 @@ interface TreeNode {
|
|
|
12
16
|
language?: string | null;
|
|
13
17
|
size?: number;
|
|
14
18
|
lineCount?: number;
|
|
19
|
+
estimatedTokens?: number;
|
|
15
20
|
symbols?: Array<{
|
|
16
21
|
name: string;
|
|
17
22
|
kind: string;
|
|
@@ -20,10 +25,13 @@ interface TreeNode {
|
|
|
20
25
|
children?: TreeNode[];
|
|
21
26
|
}
|
|
22
27
|
export interface StructureResult {
|
|
23
|
-
tree
|
|
28
|
+
tree?: TreeNode[];
|
|
29
|
+
text?: string;
|
|
24
30
|
totalFiles: number;
|
|
25
31
|
totalDirectories: number;
|
|
26
32
|
languages: Record<string, number>;
|
|
33
|
+
next_cursor?: number;
|
|
34
|
+
truncated?: boolean;
|
|
27
35
|
}
|
|
28
36
|
export declare function createStructureTool(config: CodeTreeConfig, db: Database): {
|
|
29
37
|
name: string;
|
|
@@ -47,6 +55,22 @@ export declare function createStructureTool(config: CodeTreeConfig, db: Database
|
|
|
47
55
|
type: string;
|
|
48
56
|
description: string;
|
|
49
57
|
};
|
|
58
|
+
format: {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
symbols_per_file: {
|
|
63
|
+
type: string;
|
|
64
|
+
description: string;
|
|
65
|
+
};
|
|
66
|
+
cursor: {
|
|
67
|
+
type: string;
|
|
68
|
+
description: string;
|
|
69
|
+
};
|
|
70
|
+
limit: {
|
|
71
|
+
type: string;
|
|
72
|
+
description: string;
|
|
73
|
+
};
|
|
50
74
|
};
|
|
51
75
|
};
|
|
52
76
|
handler: (params: StructureParams) => Promise<StructureResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codetree-structure.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"codetree-structure.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAoB5C,eAAe,KAAG,OAAO,CAAC,eAAe,CAAC;EAiKrE"}
|
|
@@ -1,38 +1,35 @@
|
|
|
1
1
|
import { normalizePath } from "../../config.js";
|
|
2
2
|
export function createStructureTool(config, db) {
|
|
3
|
+
const tk = config.tokenSave.structure;
|
|
3
4
|
return {
|
|
4
5
|
name: "codetree_structure",
|
|
5
|
-
description: "Get the project file
|
|
6
|
-
"
|
|
7
|
-
"Use path filter to narrow to a subdirectory. Use pattern to match file names (glob-like).",
|
|
6
|
+
description: "Get the project file tree (replaces Glob). Set format='text' for a compact indented tree " +
|
|
7
|
+
"(~40% fewer tokens than JSON). Use path/depth/pattern to narrow. cursor+limit paginate.",
|
|
8
8
|
inputSchema: {
|
|
9
9
|
type: "object",
|
|
10
10
|
properties: {
|
|
11
|
-
path: {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
},
|
|
19
|
-
include_symbols: {
|
|
20
|
-
type: "boolean",
|
|
21
|
-
description: "Include exported symbols for each file. Default: false",
|
|
22
|
-
},
|
|
23
|
-
pattern: {
|
|
24
|
-
type: "string",
|
|
25
|
-
description: "Filter files by name pattern (e.g., '*.ts', 'api', 'test'). Simple substring/extension match.",
|
|
26
|
-
},
|
|
11
|
+
path: { type: "string", description: "Subdirectory (relative). Default: project root." },
|
|
12
|
+
depth: { type: "number", description: "Max directory depth. Default: unlimited." },
|
|
13
|
+
include_symbols: { type: "boolean", description: "Include exported symbols per file. Default: false." },
|
|
14
|
+
pattern: { type: "string", description: "File pattern (e.g., '*.ts', 'api')." },
|
|
15
|
+
format: { type: "string", description: `Response format: 'json' or 'text'. Default: ${tk.compactText ? "text" : "json"}.` },
|
|
16
|
+
symbols_per_file: { type: "number", description: "Cap symbols per file (default 10)." },
|
|
17
|
+
cursor: { type: "number", description: "Pagination cursor (file index)." },
|
|
18
|
+
limit: { type: "number", description: "Max files to include (default 500)." },
|
|
27
19
|
},
|
|
28
20
|
},
|
|
29
21
|
handler: async (params) => {
|
|
22
|
+
const wantText = (params.format ?? (tk.compactText ? "text" : "json")) === "text";
|
|
23
|
+
const symbolsPerFile = params.symbols_per_file ?? 10;
|
|
24
|
+
const cursor = params.cursor ?? 0;
|
|
25
|
+
const pageLimit = params.limit ?? 500;
|
|
30
26
|
const files = db.getAllFiles();
|
|
31
27
|
const prefix = params.path ? normalizePath(params.path) : "";
|
|
32
|
-
// Filter files
|
|
28
|
+
// Filter files (boundary-aware: prefix="src/api" should NOT match "src/apifoo.ts")
|
|
33
29
|
let filtered = files;
|
|
34
30
|
if (prefix) {
|
|
35
|
-
|
|
31
|
+
const prefixWithSlash = prefix.endsWith("/") ? prefix : `${prefix}/`;
|
|
32
|
+
filtered = filtered.filter((f) => f.path === prefix || f.path.startsWith(prefixWithSlash));
|
|
36
33
|
}
|
|
37
34
|
if (params.pattern) {
|
|
38
35
|
const pattern = params.pattern.toLowerCase();
|
|
@@ -44,6 +41,10 @@ export function createStructureTool(config, db) {
|
|
|
44
41
|
filtered = filtered.filter((f) => f.path.toLowerCase().includes(pattern));
|
|
45
42
|
}
|
|
46
43
|
}
|
|
44
|
+
// Pagination on file list
|
|
45
|
+
const totalAll = filtered.length;
|
|
46
|
+
filtered = filtered.slice(cursor, cursor + pageLimit);
|
|
47
|
+
const hasMore = totalAll > cursor + pageLimit;
|
|
47
48
|
// Build tree
|
|
48
49
|
const root = new Map();
|
|
49
50
|
const languages = {};
|
|
@@ -84,15 +85,15 @@ export function createStructureTool(config, db) {
|
|
|
84
85
|
language: file.language,
|
|
85
86
|
size: file.size,
|
|
86
87
|
lineCount: file.line_count,
|
|
88
|
+
estimatedTokens: Math.ceil(file.size / 4),
|
|
87
89
|
};
|
|
88
90
|
if (params.include_symbols) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
kind: s.kind,
|
|
95
|
-
exported: s.exported,
|
|
91
|
+
let symbols = db.getSymbolsForFile(file.path).filter((s) => s.exported);
|
|
92
|
+
if (symbolsPerFile > 0 && symbols.length > symbolsPerFile) {
|
|
93
|
+
symbols = symbols.slice(0, symbolsPerFile);
|
|
94
|
+
}
|
|
95
|
+
fileNode.symbols = symbols.map((s) => ({
|
|
96
|
+
name: s.name, kind: s.kind, exported: s.exported,
|
|
96
97
|
}));
|
|
97
98
|
}
|
|
98
99
|
// Attach to parent directory
|
|
@@ -125,31 +126,80 @@ export function createStructureTool(config, db) {
|
|
|
125
126
|
}
|
|
126
127
|
};
|
|
127
128
|
sortTree(tree);
|
|
128
|
-
// Guard: if response is too large
|
|
129
|
+
// Guard: if response is too large and no narrowing, collapse to top-level dirs
|
|
129
130
|
const MAX_TREE_FILES = 500;
|
|
130
131
|
if (filtered.length > MAX_TREE_FILES && !params.path) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
totalFiles:
|
|
132
|
+
const collapsedTree = tree.map((node) => ({
|
|
133
|
+
...node,
|
|
134
|
+
children: node.children ? node.children.filter((c) => c.type === "directory").map((d) => ({
|
|
135
|
+
...d,
|
|
136
|
+
children: undefined,
|
|
137
|
+
})) : undefined,
|
|
138
|
+
}));
|
|
139
|
+
const result = {
|
|
140
|
+
totalFiles: totalAll,
|
|
140
141
|
totalDirectories,
|
|
141
142
|
languages,
|
|
142
143
|
truncated: true,
|
|
143
|
-
message: `Project has ${filtered.length} files. Showing top-level directories only. Use the 'path' parameter to explore a specific subdirectory (e.g., path="src/modules").`,
|
|
144
144
|
};
|
|
145
|
+
if (wantText) {
|
|
146
|
+
result.text = renderTreeText(collapsedTree, params.include_symbols === true);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
result.tree = collapsedTree;
|
|
150
|
+
}
|
|
151
|
+
if (hasMore)
|
|
152
|
+
result.next_cursor = cursor + pageLimit;
|
|
153
|
+
return result;
|
|
145
154
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
totalFiles: filtered.length,
|
|
155
|
+
const result = {
|
|
156
|
+
totalFiles: totalAll,
|
|
149
157
|
totalDirectories,
|
|
150
158
|
languages,
|
|
151
159
|
};
|
|
160
|
+
if (wantText) {
|
|
161
|
+
result.text = renderTreeText(tree, params.include_symbols === true);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
result.tree = tree;
|
|
165
|
+
}
|
|
166
|
+
if (hasMore) {
|
|
167
|
+
result.next_cursor = cursor + pageLimit;
|
|
168
|
+
result.truncated = true;
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
152
171
|
},
|
|
153
172
|
};
|
|
154
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Compact indented text rendering of a tree. Roughly 40% fewer tokens than JSON.
|
|
176
|
+
*/
|
|
177
|
+
function renderTreeText(nodes, withSymbols, depth = 0) {
|
|
178
|
+
const lines = [];
|
|
179
|
+
const pad = (n) => " ".repeat(n);
|
|
180
|
+
for (const node of nodes) {
|
|
181
|
+
if (node.type === "directory") {
|
|
182
|
+
lines.push(`${pad(depth)}${node.name}/`);
|
|
183
|
+
if (node.children && node.children.length > 0) {
|
|
184
|
+
lines.push(renderTreeText(node.children, withSymbols, depth + 1));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const meta = [];
|
|
189
|
+
if (node.language)
|
|
190
|
+
meta.push(node.language);
|
|
191
|
+
if (node.lineCount !== undefined)
|
|
192
|
+
meta.push(`${node.lineCount}L`);
|
|
193
|
+
if (node.estimatedTokens !== undefined)
|
|
194
|
+
meta.push(`~${node.estimatedTokens}t`);
|
|
195
|
+
const metaStr = meta.length ? ` (${meta.join(", ")})` : "";
|
|
196
|
+
let symStr = "";
|
|
197
|
+
if (withSymbols && node.symbols && node.symbols.length > 0) {
|
|
198
|
+
symStr = ` [${node.symbols.map((s) => s.name).join(", ")}]`;
|
|
199
|
+
}
|
|
200
|
+
lines.push(`${pad(depth)}${node.name}${metaStr}${symStr}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return lines.join("\n");
|
|
204
|
+
}
|
|
155
205
|
//# sourceMappingURL=codetree-structure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codetree-structure.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"codetree-structure.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,9 @@ export interface SummaryResult {
|
|
|
22
22
|
symbolCount: number;
|
|
23
23
|
language: string | null;
|
|
24
24
|
lineCount: number;
|
|
25
|
+
estimatedTokens: number;
|
|
25
26
|
}>;
|
|
27
|
+
totalEstimatedTokens: number;
|
|
26
28
|
}
|
|
27
29
|
export declare function createSummaryTool(config: CodeTreeConfig, db: Database): {
|
|
28
30
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codetree-summary.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"codetree-summary.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;;;;;;;mBAW/C,OAAO,CAAC,aAAa,CAAC;EAmF5C"}
|
|
@@ -38,14 +38,17 @@ export function createSummaryTool(config, db) {
|
|
|
38
38
|
};
|
|
39
39
|
// Find key files (most symbols)
|
|
40
40
|
const fileSymbolCounts = [];
|
|
41
|
+
let totalSizeBytes = 0;
|
|
41
42
|
for (const file of files) {
|
|
42
43
|
const symbols = db.getSymbolsForFile(file.path);
|
|
43
44
|
const exportedSymbols = symbols.filter((s) => s.exported);
|
|
45
|
+
totalSizeBytes += file.size;
|
|
44
46
|
fileSymbolCounts.push({
|
|
45
47
|
path: file.path,
|
|
46
48
|
count: exportedSymbols.length,
|
|
47
49
|
language: file.language,
|
|
48
50
|
lineCount: file.line_count,
|
|
51
|
+
size: file.size,
|
|
49
52
|
});
|
|
50
53
|
for (const sym of exportedSymbols) {
|
|
51
54
|
switch (sym.kind) {
|
|
@@ -86,7 +89,9 @@ export function createSummaryTool(config, db) {
|
|
|
86
89
|
symbolCount: f.count,
|
|
87
90
|
language: f.language,
|
|
88
91
|
lineCount: f.lineCount,
|
|
92
|
+
estimatedTokens: Math.ceil(f.size / 4),
|
|
89
93
|
})),
|
|
94
|
+
totalEstimatedTokens: Math.ceil(totalSizeBytes / 4),
|
|
90
95
|
};
|
|
91
96
|
},
|
|
92
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codetree-summary.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-summary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codetree-summary.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-summary.ts"],"names":[],"mappings":"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"}
|
package/dist/setup/install.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/** Shared MCP server entry for stdio (Claude `.mcp.json`, Cursor, Antigravity, etc.). */
|
|
2
|
+
export declare function buildCodetreeMcpServerEntry(projectRoot: string, serverScriptPath: string): {
|
|
3
|
+
command: "node";
|
|
4
|
+
args: string[];
|
|
5
|
+
cwd: string;
|
|
6
|
+
env: {
|
|
7
|
+
CODETREE_PROJECT_ROOT: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
1
10
|
/**
|
|
2
11
|
* Register all CodeTree hooks in Claude Code settings.
|
|
3
12
|
* Writes to BOTH user-level (~/.claude/settings.json) and project-level.
|
|
@@ -23,7 +32,7 @@ export declare function createDefaultConfig(projectRoot: string): {
|
|
|
23
32
|
};
|
|
24
33
|
/**
|
|
25
34
|
* Generate CLAUDE.md that instructs Claude to use CodeTree MCP tools.
|
|
26
|
-
*
|
|
35
|
+
* Text is loaded from packaged `templates/claude-md-codetree.snippet.md`.
|
|
27
36
|
*/
|
|
28
37
|
export declare function installClaudeMd(projectRoot: string): void;
|
|
29
38
|
/**
|
|
@@ -31,6 +40,41 @@ export declare function installClaudeMd(projectRoot: string): void;
|
|
|
31
40
|
* Unlike CLAUDE.md (suggestions), rules/ files are system-level instructions.
|
|
32
41
|
*/
|
|
33
42
|
export declare function installClaudeRules(projectRoot: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Register CodeTree in `.cursor/mcp.json` (Cursor IDE).
|
|
45
|
+
*/
|
|
46
|
+
export declare function installCursorMcp(projectRoot: string, serverScriptPath: string): {
|
|
47
|
+
success: boolean;
|
|
48
|
+
message: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Cursor rules so the agent prefers CodeTree tools (steering; not hook enforcement).
|
|
52
|
+
* Source: packaged `templates/cursor-codetree.mdc`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function installCursorRules(projectRoot: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Register CodeTree in `.antigravity/mcp.json` (project-level; common Antigravity convention).
|
|
57
|
+
* Does not modify global ~/.gemini/... (avoid clobbering user-wide config).
|
|
58
|
+
*/
|
|
59
|
+
export declare function installAntigravityMcp(projectRoot: string, serverScriptPath: string): {
|
|
60
|
+
success: boolean;
|
|
61
|
+
message: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Merge CodeTree into `.codex/config.toml`. Skips write if existing file is invalid TOML.
|
|
65
|
+
*/
|
|
66
|
+
export declare function installCodexMcp(projectRoot: string, serverScriptPath: string): {
|
|
67
|
+
success: boolean;
|
|
68
|
+
message: string;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Idempotent AGENTS.md block (Cursor, OpenAI Codex, Google Antigravity, and other agents that read AGENTS.md).
|
|
72
|
+
*/
|
|
73
|
+
export declare function installAgentsMd(projectRoot: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* GEMINI.md — short pointer for **Google Antigravity** / Gemini-first flows (see also AGENTS.md).
|
|
76
|
+
*/
|
|
77
|
+
export declare function installGeminiMd(projectRoot: string): void;
|
|
34
78
|
/**
|
|
35
79
|
* Add .codetree/ to .gitignore.
|
|
36
80
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"AA0BA,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;;;;;;;EAWxF;AA8ED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiB9G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoBrH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiC3F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAezD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAS5D;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAIrH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAS5D;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAI1H;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA4CpH;AAKD;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAezD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAezD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAYzD"}
|