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.
Files changed (123) hide show
  1. package/README.md +137 -121
  2. package/dist/cli.js +69 -83
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +126 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +22 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/diff.d.ts +37 -0
  9. package/dist/diff.d.ts.map +1 -0
  10. package/dist/diff.js +181 -0
  11. package/dist/diff.js.map +1 -0
  12. package/dist/doctor.d.ts +5 -0
  13. package/dist/doctor.d.ts.map +1 -0
  14. package/dist/doctor.js +139 -0
  15. package/dist/doctor.js.map +1 -0
  16. package/dist/hook/post-compact.js +1 -23
  17. package/dist/hook/post-compact.js.map +1 -1
  18. package/dist/hook/post-tool-use.js +11 -27
  19. package/dist/hook/post-tool-use.js.map +1 -1
  20. package/dist/hook/pre-compact.js +1 -22
  21. package/dist/hook/pre-compact.js.map +1 -1
  22. package/dist/hook/pre-tool-use.bundled.js +49 -77
  23. package/dist/hook/pre-tool-use.js +23 -90
  24. package/dist/hook/pre-tool-use.js.map +1 -1
  25. package/dist/hook/session-start.js +19 -23
  26. package/dist/hook/session-start.js.map +1 -1
  27. package/dist/index.d.ts +7 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/indexer/extractor-registry.d.ts.map +1 -1
  32. package/dist/indexer/extractor-registry.js +6 -0
  33. package/dist/indexer/extractor-registry.js.map +1 -1
  34. package/dist/indexer/extractors/csharp.d.ts +12 -0
  35. package/dist/indexer/extractors/csharp.d.ts.map +1 -0
  36. package/dist/indexer/extractors/csharp.js +165 -0
  37. package/dist/indexer/extractors/csharp.js.map +1 -0
  38. package/dist/indexer/extractors/go.js +44 -1
  39. package/dist/indexer/extractors/go.js.map +1 -1
  40. package/dist/indexer/extractors/java.d.ts.map +1 -1
  41. package/dist/indexer/extractors/java.js +41 -3
  42. package/dist/indexer/extractors/java.js.map +1 -1
  43. package/dist/indexer/extractors/javascript.d.ts.map +1 -1
  44. package/dist/indexer/extractors/javascript.js +67 -3
  45. package/dist/indexer/extractors/javascript.js.map +1 -1
  46. package/dist/indexer/extractors/python.d.ts.map +1 -1
  47. package/dist/indexer/extractors/python.js +31 -2
  48. package/dist/indexer/extractors/python.js.map +1 -1
  49. package/dist/indexer/extractors/ruby.d.ts +10 -0
  50. package/dist/indexer/extractors/ruby.d.ts.map +1 -0
  51. package/dist/indexer/extractors/ruby.js +145 -0
  52. package/dist/indexer/extractors/ruby.js.map +1 -0
  53. package/dist/indexer/extractors/rust.d.ts +10 -0
  54. package/dist/indexer/extractors/rust.d.ts.map +1 -0
  55. package/dist/indexer/extractors/rust.js +194 -0
  56. package/dist/indexer/extractors/rust.js.map +1 -0
  57. package/dist/indexer/indexer.d.ts +15 -0
  58. package/dist/indexer/indexer.d.ts.map +1 -1
  59. package/dist/indexer/indexer.js +168 -4
  60. package/dist/indexer/indexer.js.map +1 -1
  61. package/dist/server/ipc.d.ts +10 -4
  62. package/dist/server/ipc.d.ts.map +1 -1
  63. package/dist/server/ipc.js +190 -109
  64. package/dist/server/ipc.js.map +1 -1
  65. package/dist/server/mcp-server.js +36 -27
  66. package/dist/server/mcp-server.js.map +1 -1
  67. package/dist/server/tools/codetree-find-refs.d.ts.map +1 -1
  68. package/dist/server/tools/codetree-find-refs.js +23 -14
  69. package/dist/server/tools/codetree-find-refs.js.map +1 -1
  70. package/dist/server/tools/codetree-memory.d.ts +3 -6
  71. package/dist/server/tools/codetree-memory.d.ts.map +1 -1
  72. package/dist/server/tools/codetree-memory.js +9 -10
  73. package/dist/server/tools/codetree-memory.js.map +1 -1
  74. package/dist/server/tools/codetree-outline.d.ts +57 -0
  75. package/dist/server/tools/codetree-outline.d.ts.map +1 -0
  76. package/dist/server/tools/codetree-outline.js +76 -0
  77. package/dist/server/tools/codetree-outline.js.map +1 -0
  78. package/dist/server/tools/codetree-probe.d.ts +53 -0
  79. package/dist/server/tools/codetree-probe.d.ts.map +1 -0
  80. package/dist/server/tools/codetree-probe.js +81 -0
  81. package/dist/server/tools/codetree-probe.js.map +1 -0
  82. package/dist/server/tools/codetree-read.d.ts +52 -3
  83. package/dist/server/tools/codetree-read.d.ts.map +1 -1
  84. package/dist/server/tools/codetree-read.js +237 -55
  85. package/dist/server/tools/codetree-read.js.map +1 -1
  86. package/dist/server/tools/codetree-search.d.ts +13 -1
  87. package/dist/server/tools/codetree-search.d.ts.map +1 -1
  88. package/dist/server/tools/codetree-search.js +80 -52
  89. package/dist/server/tools/codetree-search.js.map +1 -1
  90. package/dist/server/tools/codetree-structure.d.ts +25 -1
  91. package/dist/server/tools/codetree-structure.d.ts.map +1 -1
  92. package/dist/server/tools/codetree-structure.js +92 -42
  93. package/dist/server/tools/codetree-structure.js.map +1 -1
  94. package/dist/server/tools/codetree-summary.d.ts +2 -0
  95. package/dist/server/tools/codetree-summary.d.ts.map +1 -1
  96. package/dist/server/tools/codetree-summary.js +5 -0
  97. package/dist/server/tools/codetree-summary.js.map +1 -1
  98. package/dist/setup/install.d.ts +45 -1
  99. package/dist/setup/install.d.ts.map +1 -1
  100. package/dist/setup/install.js +163 -58
  101. package/dist/setup/install.js.map +1 -1
  102. package/dist/setup/template-load.d.ts +9 -0
  103. package/dist/setup/template-load.d.ts.map +1 -0
  104. package/dist/setup/template-load.js +39 -0
  105. package/dist/setup/template-load.js.map +1 -0
  106. package/dist/storage/database.d.ts +49 -0
  107. package/dist/storage/database.d.ts.map +1 -1
  108. package/dist/storage/database.js +383 -43
  109. package/dist/storage/database.js.map +1 -1
  110. package/dist/storage/disk-manager.d.ts.map +1 -1
  111. package/dist/storage/disk-manager.js +1 -5
  112. package/dist/storage/disk-manager.js.map +1 -1
  113. package/dist/utils.d.ts +23 -0
  114. package/dist/utils.d.ts.map +1 -0
  115. package/dist/utils.js +102 -0
  116. package/dist/utils.js.map +1 -0
  117. package/package.json +46 -10
  118. package/templates/README.md +15 -0
  119. package/templates/agents-codetree.snippet.md +24 -0
  120. package/templates/claude-md-codetree.snippet.md +22 -0
  121. package/templates/claude-rules-codetree.md +23 -0
  122. package/templates/cursor-codetree.mdc +31 -0
  123. 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 using the CodeTree index. Searches symbol names (functions, classes, types, etc.) " +
5
- "and optionally file contents. Much faster than Grep for symbol lookups. " +
6
- "Use kind filter to narrow: 'function', 'class', 'interface', 'type', 'variable', 'method', 'enum', 'import'.",
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
- type: "string",
12
- description: "Search query matches against symbol names and optionally content",
13
- },
14
- kind: {
15
- type: "string",
16
- description: "Filter by symbol kind: function, class, interface, type, variable, method, enum, import",
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 ?? 50;
35
- // Search symbol index
36
- let symbols = db.searchSymbols(params.query, params.kind, limit);
37
- // Filter by file pattern if specified
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
- // Log search for session memory
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 { /* session logging should never break searches */ }
48
+ catch { /* ignore */ }
50
49
  const result = {
51
- symbols: symbols.map((s) => ({
52
- name: s.name,
53
- kind: s.kind,
54
- file_path: s.file_path,
55
- line_start: s.line_start,
56
- signature: s.signature,
57
- exported: s.exported,
58
- })),
59
- totalResults: symbols.length,
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
- // Optional content search
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
- const regex = new RegExp(escapeRegex(params.query), "gi");
68
- for (const file of files) {
69
- if (params.file_pattern && !file.path.toLowerCase().includes(params.file_pattern.toLowerCase())) {
70
- continue;
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
- const content = indexer.readCached(file.path);
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: file.path,
114
+ file_path: filePath,
83
115
  line_number: i + 1,
84
- line_content: lines[i].trim().slice(0, 200),
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":"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"}
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: TreeNode[];
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;CAClB;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,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,EAAE,QAAQ,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;sBA4B5C,eAAe,KAAG,OAAO,CAAC,eAAe,CAAC;EAwIrE"}
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 structure as a tree. Replaces Glob for directory exploration. " +
6
- "Returns file tree with optional symbol information. " +
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
- type: "string",
13
- description: "Subdirectory to explore (relative to project root). Default: entire project",
14
- },
15
- depth: {
16
- type: "number",
17
- description: "Maximum directory depth to return. Default: unlimited",
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
- filtered = filtered.filter((f) => f.path.startsWith(prefix));
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
- const symbols = db.getSymbolsForFile(file.path);
90
- fileNode.symbols = symbols
91
- .filter((s) => s.exported)
92
- .map((s) => ({
93
- name: s.name,
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, suggest narrowing with path param
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
- return {
132
- tree: 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
- totalFiles: filtered.length,
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
- return {
147
- tree,
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":"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"}
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;KACnB,CAAC,CAAC;CACJ;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ;;;;;;;mBAW/C,OAAO,CAAC,aAAa,CAAC;EA8E5C"}
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":"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"}
1
+ {"version":3,"file":"codetree-summary.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-summary.ts"],"names":[],"mappings":"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"}
@@ -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
- * Appends to existing CLAUDE.md if present, creates new one if not.
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":"AA0FA;;;;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,CAgCrH;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,CA8CzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAoB5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAYzD"}
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"}