codesift-mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/LICENSE +66 -21
  2. package/README.md +346 -56
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +11 -0
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/commands.d.ts.map +1 -1
  8. package/dist/cli/commands.js +177 -67
  9. package/dist/cli/commands.js.map +1 -1
  10. package/dist/cli/help.d.ts +1 -1
  11. package/dist/cli/help.d.ts.map +1 -1
  12. package/dist/cli/help.js +157 -0
  13. package/dist/cli/help.js.map +1 -1
  14. package/dist/cli/hooks.d.ts +3 -0
  15. package/dist/cli/hooks.d.ts.map +1 -0
  16. package/dist/cli/hooks.js +163 -0
  17. package/dist/cli/hooks.js.map +1 -0
  18. package/dist/cli/setup.d.ts +25 -0
  19. package/dist/cli/setup.d.ts.map +1 -0
  20. package/dist/cli/setup.js +400 -0
  21. package/dist/cli/setup.js.map +1 -0
  22. package/dist/config.d.ts +2 -0
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +2 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/formatters-shortening.d.ts +7 -0
  27. package/dist/formatters-shortening.d.ts.map +1 -0
  28. package/dist/formatters-shortening.js +68 -0
  29. package/dist/formatters-shortening.js.map +1 -0
  30. package/dist/formatters.d.ts +314 -0
  31. package/dist/formatters.d.ts.map +1 -0
  32. package/dist/formatters.js +396 -0
  33. package/dist/formatters.js.map +1 -0
  34. package/dist/instructions.d.ts +6 -0
  35. package/dist/instructions.d.ts.map +1 -0
  36. package/dist/instructions.js +72 -0
  37. package/dist/instructions.js.map +1 -0
  38. package/dist/lsp/lsp-client.d.ts +21 -0
  39. package/dist/lsp/lsp-client.d.ts.map +1 -0
  40. package/dist/lsp/lsp-client.js +122 -0
  41. package/dist/lsp/lsp-client.js.map +1 -0
  42. package/dist/lsp/lsp-manager.d.ts +12 -0
  43. package/dist/lsp/lsp-manager.d.ts.map +1 -0
  44. package/dist/lsp/lsp-manager.js +82 -0
  45. package/dist/lsp/lsp-manager.js.map +1 -0
  46. package/dist/lsp/lsp-servers.d.ts +13 -0
  47. package/dist/lsp/lsp-servers.d.ts.map +1 -0
  48. package/dist/lsp/lsp-servers.js +57 -0
  49. package/dist/lsp/lsp-servers.js.map +1 -0
  50. package/dist/lsp/lsp-tools.d.ts +67 -0
  51. package/dist/lsp/lsp-tools.d.ts.map +1 -0
  52. package/dist/lsp/lsp-tools.js +359 -0
  53. package/dist/lsp/lsp-tools.js.map +1 -0
  54. package/dist/parser/extractors/_shared.d.ts +11 -0
  55. package/dist/parser/extractors/_shared.d.ts.map +1 -0
  56. package/dist/parser/extractors/_shared.js +38 -0
  57. package/dist/parser/extractors/_shared.js.map +1 -0
  58. package/dist/parser/extractors/astro.d.ts +15 -0
  59. package/dist/parser/extractors/astro.d.ts.map +1 -0
  60. package/dist/parser/extractors/astro.js +104 -0
  61. package/dist/parser/extractors/astro.js.map +1 -0
  62. package/dist/parser/extractors/conversation.d.ts +16 -0
  63. package/dist/parser/extractors/conversation.d.ts.map +1 -0
  64. package/dist/parser/extractors/conversation.js +196 -0
  65. package/dist/parser/extractors/conversation.js.map +1 -0
  66. package/dist/parser/extractors/go.d.ts.map +1 -1
  67. package/dist/parser/extractors/go.js +22 -45
  68. package/dist/parser/extractors/go.js.map +1 -1
  69. package/dist/parser/extractors/python.d.ts +1 -1
  70. package/dist/parser/extractors/python.d.ts.map +1 -1
  71. package/dist/parser/extractors/python.js +19 -50
  72. package/dist/parser/extractors/python.js.map +1 -1
  73. package/dist/parser/extractors/rust.d.ts +1 -1
  74. package/dist/parser/extractors/rust.d.ts.map +1 -1
  75. package/dist/parser/extractors/rust.js +7 -34
  76. package/dist/parser/extractors/rust.js.map +1 -1
  77. package/dist/parser/extractors/typescript.d.ts +1 -1
  78. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  79. package/dist/parser/extractors/typescript.js +99 -68
  80. package/dist/parser/extractors/typescript.js.map +1 -1
  81. package/dist/parser/parser-manager.d.ts.map +1 -1
  82. package/dist/parser/parser-manager.js +12 -2
  83. package/dist/parser/parser-manager.js.map +1 -1
  84. package/dist/parser/symbol-extractor.d.ts +2 -0
  85. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  86. package/dist/parser/symbol-extractor.js +2 -0
  87. package/dist/parser/symbol-extractor.js.map +1 -1
  88. package/dist/register-tools.d.ts +127 -0
  89. package/dist/register-tools.d.ts.map +1 -0
  90. package/dist/register-tools.js +1453 -0
  91. package/dist/register-tools.js.map +1 -0
  92. package/dist/retrieval/codebase-retrieval.d.ts +4 -26
  93. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
  94. package/dist/retrieval/codebase-retrieval.js +105 -403
  95. package/dist/retrieval/codebase-retrieval.js.map +1 -1
  96. package/dist/retrieval/retrieval-constants.d.ts +27 -0
  97. package/dist/retrieval/retrieval-constants.d.ts.map +1 -0
  98. package/dist/retrieval/retrieval-constants.js +27 -0
  99. package/dist/retrieval/retrieval-constants.js.map +1 -0
  100. package/dist/retrieval/retrieval-schemas.d.ts +107 -0
  101. package/dist/retrieval/retrieval-schemas.d.ts.map +1 -0
  102. package/dist/retrieval/retrieval-schemas.js +102 -0
  103. package/dist/retrieval/retrieval-schemas.js.map +1 -0
  104. package/dist/retrieval/retrieval-utils.d.ts +40 -0
  105. package/dist/retrieval/retrieval-utils.d.ts.map +1 -0
  106. package/dist/retrieval/retrieval-utils.js +139 -0
  107. package/dist/retrieval/retrieval-utils.js.map +1 -0
  108. package/dist/retrieval/semantic-handlers.d.ts +8 -0
  109. package/dist/retrieval/semantic-handlers.d.ts.map +1 -0
  110. package/dist/retrieval/semantic-handlers.js +152 -0
  111. package/dist/retrieval/semantic-handlers.js.map +1 -0
  112. package/dist/search/bm25.d.ts +6 -1
  113. package/dist/search/bm25.d.ts.map +1 -1
  114. package/dist/search/bm25.js +95 -32
  115. package/dist/search/bm25.js.map +1 -1
  116. package/dist/search/chunker.d.ts +10 -0
  117. package/dist/search/chunker.d.ts.map +1 -1
  118. package/dist/search/chunker.js +63 -11
  119. package/dist/search/chunker.js.map +1 -1
  120. package/dist/search/reranker.d.ts +15 -0
  121. package/dist/search/reranker.d.ts.map +1 -0
  122. package/dist/search/reranker.js +126 -0
  123. package/dist/search/reranker.js.map +1 -0
  124. package/dist/search/semantic.d.ts +1 -1
  125. package/dist/search/semantic.d.ts.map +1 -1
  126. package/dist/search/semantic.js +40 -45
  127. package/dist/search/semantic.js.map +1 -1
  128. package/dist/server-helpers.d.ts +29 -0
  129. package/dist/server-helpers.d.ts.map +1 -0
  130. package/dist/server-helpers.js +312 -0
  131. package/dist/server-helpers.js.map +1 -0
  132. package/dist/server.d.ts +1 -1
  133. package/dist/server.d.ts.map +1 -1
  134. package/dist/server.js +11 -271
  135. package/dist/server.js.map +1 -1
  136. package/dist/storage/_shared.d.ts +9 -0
  137. package/dist/storage/_shared.d.ts.map +1 -0
  138. package/dist/storage/_shared.js +26 -0
  139. package/dist/storage/_shared.js.map +1 -0
  140. package/dist/storage/chunk-store.d.ts.map +1 -1
  141. package/dist/storage/chunk-store.js +23 -63
  142. package/dist/storage/chunk-store.js.map +1 -1
  143. package/dist/storage/embedding-store.d.ts +6 -3
  144. package/dist/storage/embedding-store.d.ts.map +1 -1
  145. package/dist/storage/embedding-store.js +54 -30
  146. package/dist/storage/embedding-store.js.map +1 -1
  147. package/dist/storage/graph-store.d.ts +48 -0
  148. package/dist/storage/graph-store.d.ts.map +1 -0
  149. package/dist/storage/graph-store.js +52 -0
  150. package/dist/storage/graph-store.js.map +1 -0
  151. package/dist/storage/index-store.d.ts +5 -0
  152. package/dist/storage/index-store.d.ts.map +1 -1
  153. package/dist/storage/index-store.js +28 -16
  154. package/dist/storage/index-store.js.map +1 -1
  155. package/dist/storage/registry.d.ts +4 -0
  156. package/dist/storage/registry.d.ts.map +1 -1
  157. package/dist/storage/registry.js +16 -16
  158. package/dist/storage/registry.js.map +1 -1
  159. package/dist/storage/usage-stats.d.ts +6 -0
  160. package/dist/storage/usage-stats.d.ts.map +1 -1
  161. package/dist/storage/usage-stats.js +59 -11
  162. package/dist/storage/usage-stats.js.map +1 -1
  163. package/dist/storage/usage-tracker.d.ts +3 -0
  164. package/dist/storage/usage-tracker.d.ts.map +1 -1
  165. package/dist/storage/usage-tracker.js +50 -132
  166. package/dist/storage/usage-tracker.js.map +1 -1
  167. package/dist/storage/watcher.d.ts +2 -1
  168. package/dist/storage/watcher.d.ts.map +1 -1
  169. package/dist/storage/watcher.js +16 -16
  170. package/dist/storage/watcher.js.map +1 -1
  171. package/dist/tools/ast-query-tools.d.ts +29 -0
  172. package/dist/tools/ast-query-tools.d.ts.map +1 -0
  173. package/dist/tools/ast-query-tools.js +110 -0
  174. package/dist/tools/ast-query-tools.js.map +1 -0
  175. package/dist/tools/boundary-tools.d.ts +31 -0
  176. package/dist/tools/boundary-tools.d.ts.map +1 -0
  177. package/dist/tools/boundary-tools.js +62 -0
  178. package/dist/tools/boundary-tools.js.map +1 -0
  179. package/dist/tools/clone-tools.d.ts +35 -0
  180. package/dist/tools/clone-tools.d.ts.map +1 -0
  181. package/dist/tools/clone-tools.js +181 -0
  182. package/dist/tools/clone-tools.js.map +1 -0
  183. package/dist/tools/community-tools.d.ts +23 -0
  184. package/dist/tools/community-tools.d.ts.map +1 -0
  185. package/dist/tools/community-tools.js +297 -0
  186. package/dist/tools/community-tools.js.map +1 -0
  187. package/dist/tools/complexity-tools.d.ts +34 -0
  188. package/dist/tools/complexity-tools.d.ts.map +1 -0
  189. package/dist/tools/complexity-tools.js +135 -0
  190. package/dist/tools/complexity-tools.js.map +1 -0
  191. package/dist/tools/context-tools.d.ts +44 -3
  192. package/dist/tools/context-tools.d.ts.map +1 -1
  193. package/dist/tools/context-tools.js +329 -99
  194. package/dist/tools/context-tools.js.map +1 -1
  195. package/dist/tools/conversation-tools.d.ts +107 -0
  196. package/dist/tools/conversation-tools.d.ts.map +1 -0
  197. package/dist/tools/conversation-tools.js +419 -0
  198. package/dist/tools/conversation-tools.js.map +1 -0
  199. package/dist/tools/coordinator-tools.d.ts +73 -0
  200. package/dist/tools/coordinator-tools.d.ts.map +1 -0
  201. package/dist/tools/coordinator-tools.js +153 -0
  202. package/dist/tools/coordinator-tools.js.map +1 -0
  203. package/dist/tools/cross-repo-tools.d.ts +43 -0
  204. package/dist/tools/cross-repo-tools.d.ts.map +1 -0
  205. package/dist/tools/cross-repo-tools.js +55 -0
  206. package/dist/tools/cross-repo-tools.js.map +1 -0
  207. package/dist/tools/diff-tools.d.ts +4 -1
  208. package/dist/tools/diff-tools.d.ts.map +1 -1
  209. package/dist/tools/diff-tools.js +23 -5
  210. package/dist/tools/diff-tools.js.map +1 -1
  211. package/dist/tools/frequency-tools.d.ts +46 -0
  212. package/dist/tools/frequency-tools.d.ts.map +1 -0
  213. package/dist/tools/frequency-tools.js +184 -0
  214. package/dist/tools/frequency-tools.js.map +1 -0
  215. package/dist/tools/generate-tools.d.ts.map +1 -1
  216. package/dist/tools/generate-tools.js +13 -2
  217. package/dist/tools/generate-tools.js.map +1 -1
  218. package/dist/tools/graph-tools.d.ts +44 -11
  219. package/dist/tools/graph-tools.d.ts.map +1 -1
  220. package/dist/tools/graph-tools.js +147 -104
  221. package/dist/tools/graph-tools.js.map +1 -1
  222. package/dist/tools/hotspot-tools.d.ts +24 -0
  223. package/dist/tools/hotspot-tools.d.ts.map +1 -0
  224. package/dist/tools/hotspot-tools.js +122 -0
  225. package/dist/tools/hotspot-tools.js.map +1 -0
  226. package/dist/tools/impact-tools.d.ts +13 -0
  227. package/dist/tools/impact-tools.d.ts.map +1 -0
  228. package/dist/tools/impact-tools.js +238 -0
  229. package/dist/tools/impact-tools.js.map +1 -0
  230. package/dist/tools/index-tools.d.ts +44 -3
  231. package/dist/tools/index-tools.d.ts.map +1 -1
  232. package/dist/tools/index-tools.js +530 -222
  233. package/dist/tools/index-tools.js.map +1 -1
  234. package/dist/tools/memory-tools.d.ts +35 -0
  235. package/dist/tools/memory-tools.d.ts.map +1 -0
  236. package/dist/tools/memory-tools.js +229 -0
  237. package/dist/tools/memory-tools.js.map +1 -0
  238. package/dist/tools/outline-tools.d.ts +24 -13
  239. package/dist/tools/outline-tools.d.ts.map +1 -1
  240. package/dist/tools/outline-tools.js +113 -87
  241. package/dist/tools/outline-tools.js.map +1 -1
  242. package/dist/tools/pattern-tools.d.ts +32 -0
  243. package/dist/tools/pattern-tools.d.ts.map +1 -0
  244. package/dist/tools/pattern-tools.js +116 -0
  245. package/dist/tools/pattern-tools.js.map +1 -0
  246. package/dist/tools/report-tools.d.ts +5 -0
  247. package/dist/tools/report-tools.d.ts.map +1 -0
  248. package/dist/tools/report-tools.js +167 -0
  249. package/dist/tools/report-tools.js.map +1 -0
  250. package/dist/tools/review-diff-tools.d.ts +148 -0
  251. package/dist/tools/review-diff-tools.d.ts.map +1 -0
  252. package/dist/tools/review-diff-tools.js +852 -0
  253. package/dist/tools/review-diff-tools.js.map +1 -0
  254. package/dist/tools/route-tools.d.ts +32 -0
  255. package/dist/tools/route-tools.d.ts.map +1 -0
  256. package/dist/tools/route-tools.js +276 -0
  257. package/dist/tools/route-tools.js.map +1 -0
  258. package/dist/tools/search-ranker.d.ts +5 -0
  259. package/dist/tools/search-ranker.d.ts.map +1 -0
  260. package/dist/tools/search-ranker.js +142 -0
  261. package/dist/tools/search-ranker.js.map +1 -0
  262. package/dist/tools/search-tools.d.ts +24 -1
  263. package/dist/tools/search-tools.d.ts.map +1 -1
  264. package/dist/tools/search-tools.js +459 -225
  265. package/dist/tools/search-tools.js.map +1 -1
  266. package/dist/tools/secret-tools.d.ts +104 -0
  267. package/dist/tools/secret-tools.d.ts.map +1 -0
  268. package/dist/tools/secret-tools.js +410 -0
  269. package/dist/tools/secret-tools.js.map +1 -0
  270. package/dist/tools/symbol-tools.d.ts +90 -2
  271. package/dist/tools/symbol-tools.d.ts.map +1 -1
  272. package/dist/tools/symbol-tools.js +576 -42
  273. package/dist/tools/symbol-tools.js.map +1 -1
  274. package/dist/types.d.ts +34 -1
  275. package/dist/types.d.ts.map +1 -1
  276. package/dist/utils/framework-detect.d.ts +5 -0
  277. package/dist/utils/framework-detect.d.ts.map +1 -0
  278. package/dist/utils/framework-detect.js +36 -0
  279. package/dist/utils/framework-detect.js.map +1 -0
  280. package/dist/utils/glob.d.ts +19 -0
  281. package/dist/utils/glob.d.ts.map +1 -0
  282. package/dist/utils/glob.js +74 -0
  283. package/dist/utils/glob.js.map +1 -0
  284. package/dist/utils/import-graph.d.ts +29 -0
  285. package/dist/utils/import-graph.d.ts.map +1 -0
  286. package/dist/utils/import-graph.js +125 -0
  287. package/dist/utils/import-graph.js.map +1 -0
  288. package/dist/utils/test-file.d.ts.map +1 -1
  289. package/dist/utils/test-file.js +1 -0
  290. package/dist/utils/test-file.js.map +1 -1
  291. package/dist/utils/walk.d.ts +45 -0
  292. package/dist/utils/walk.d.ts.map +1 -0
  293. package/dist/utils/walk.js +87 -0
  294. package/dist/utils/walk.js.map +1 -0
  295. package/package.json +10 -4
  296. package/rules/codesift.md +187 -0
  297. package/rules/codesift.mdc +192 -0
  298. package/rules/codex.md +187 -0
  299. package/rules/gemini.md +187 -0
@@ -1,6 +1,9 @@
1
1
  import { getBM25Index, getCodeIndex } from "./index-tools.js";
2
2
  import { searchBM25 } from "../search/bm25.js";
3
3
  import { loadConfig } from "../config.js";
4
+ import { collectImportEdges } from "../utils/import-graph.js";
5
+ import { getGraphPath, loadGraph, saveGraph, computeIndexHash } from "../storage/graph-store.js";
6
+ import { getRepo } from "../storage/registry.js";
4
7
  /**
5
8
  * Estimate token count from source text.
6
9
  * Rough heuristic: ~4 characters per token.
@@ -8,93 +11,204 @@ import { loadConfig } from "../config.js";
8
11
  function estimateTokens(source) {
9
12
  return Math.ceil(source.length / 4);
10
13
  }
14
+ /**
15
+ * Compress a symbol to L1 format (signatures only, no source).
16
+ */
17
+ function toCompact(sym) {
18
+ const c = {
19
+ id: sym.id,
20
+ name: sym.name,
21
+ kind: sym.kind,
22
+ file: sym.file,
23
+ start_line: sym.start_line,
24
+ };
25
+ if (sym.signature)
26
+ c.signature = sym.signature;
27
+ if (sym.docstring)
28
+ c.docstring = sym.docstring;
29
+ return c;
30
+ }
11
31
  /**
12
32
  * Assemble a context window of relevant code for a query.
13
33
  * Uses BM25 search to find the most relevant symbols and accumulates
14
34
  * them until the token budget is reached.
35
+ *
36
+ * Levels:
37
+ * L0 = full source (default)
38
+ * L1 = signatures + docstrings only (~5-10x more symbols per budget)
39
+ * L2 = file-level summaries (export lists)
40
+ * L3 = directory overview (file counts + top files)
15
41
  */
16
- export async function assembleContext(repo, query, tokenBudget) {
42
+ export async function assembleContext(repo, query, tokenBudget, level, rerank) {
17
43
  const bm25Index = await getBM25Index(repo);
18
44
  if (!bm25Index) {
19
45
  throw new Error(`Repository not found: ${repo}`);
20
46
  }
21
47
  const config = loadConfig();
22
48
  const budget = tokenBudget ?? config.defaultTokenBudget;
23
- const topK = 20;
24
- const results = searchBM25(bm25Index, query, topK, config.bm25FieldWeights);
25
- const symbols = [];
49
+ const lvl = level ?? "L0";
50
+ // Search wider for compressed levels (more results fit in budget)
51
+ const topK = lvl === "L0" ? 20 : lvl === "L1" ? 100 : 200;
52
+ let results = searchBM25(bm25Index, query, topK, config.bm25FieldWeights);
53
+ if (rerank && results.length > 1) {
54
+ const { rerankResults } = await import("../search/reranker.js");
55
+ results = await rerankResults(query, results);
56
+ }
57
+ if (lvl === "L0") {
58
+ // Full source — current behavior
59
+ const symbols = [];
60
+ let totalTokens = 0;
61
+ let truncated = false;
62
+ for (const result of results) {
63
+ const source = result.symbol.source ?? "";
64
+ const tokens = estimateTokens(source);
65
+ if (totalTokens + tokens > budget) {
66
+ truncated = true;
67
+ break;
68
+ }
69
+ symbols.push(result.symbol);
70
+ totalTokens += tokens;
71
+ }
72
+ return { symbols, level: lvl, total_tokens: totalTokens, truncated, result_count: symbols.length };
73
+ }
74
+ if (lvl === "L1") {
75
+ // Signatures only — 5-10x denser
76
+ const compact = [];
77
+ let totalTokens = 0;
78
+ let truncated = false;
79
+ for (const result of results) {
80
+ const c = toCompact(result.symbol);
81
+ const tokens = estimateTokens(JSON.stringify(c));
82
+ if (totalTokens + tokens > budget) {
83
+ truncated = true;
84
+ break;
85
+ }
86
+ compact.push(c);
87
+ totalTokens += tokens;
88
+ }
89
+ return { compact_symbols: compact, level: lvl, total_tokens: totalTokens, truncated, result_count: compact.length };
90
+ }
91
+ if (lvl === "L2") {
92
+ // File-level summaries
93
+ const fileMap = new Map();
94
+ for (const result of results) {
95
+ const sym = result.symbol;
96
+ let entry = fileMap.get(sym.file);
97
+ if (!entry) {
98
+ entry = { lang: "unknown", exports: [], count: 0 };
99
+ fileMap.set(sym.file, entry);
100
+ }
101
+ entry.exports.push(`${sym.name}(${sym.kind})`);
102
+ entry.count++;
103
+ }
104
+ // Enrich with language from index
105
+ const codeIndex = await getCodeIndex(repo);
106
+ if (codeIndex) {
107
+ for (const f of codeIndex.files) {
108
+ const entry = fileMap.get(f.path);
109
+ if (entry)
110
+ entry.lang = f.language;
111
+ }
112
+ }
113
+ const summaries = [];
114
+ let totalTokens = 0;
115
+ let truncated = false;
116
+ for (const [path, entry] of fileMap) {
117
+ const summary = { path, language: entry.lang, exports: entry.exports, symbol_count: entry.count };
118
+ const tokens = estimateTokens(JSON.stringify(summary));
119
+ if (totalTokens + tokens > budget) {
120
+ truncated = true;
121
+ break;
122
+ }
123
+ summaries.push(summary);
124
+ totalTokens += tokens;
125
+ }
126
+ return { file_summaries: summaries, level: lvl, total_tokens: totalTokens, truncated, result_count: summaries.length };
127
+ }
128
+ // L3 — Directory overview
129
+ const dirMap = new Map();
130
+ for (const result of results) {
131
+ const file = result.symbol.file;
132
+ const dir = file.includes("/") ? file.slice(0, file.lastIndexOf("/")) : ".";
133
+ let entry = dirMap.get(dir);
134
+ if (!entry) {
135
+ entry = { files: new Set(), symbols: 0 };
136
+ dirMap.set(dir, entry);
137
+ }
138
+ entry.files.add(file);
139
+ entry.symbols++;
140
+ }
141
+ const overviews = [];
26
142
  let totalTokens = 0;
27
143
  let truncated = false;
28
- for (const result of results) {
29
- const source = result.symbol.source ?? "";
30
- const tokens = estimateTokens(source);
144
+ for (const [path, entry] of [...dirMap.entries()].sort((a, b) => b[1].symbols - a[1].symbols)) {
145
+ const overview = {
146
+ path,
147
+ file_count: entry.files.size,
148
+ symbol_count: entry.symbols,
149
+ top_files: [...entry.files].slice(0, 3),
150
+ };
151
+ const tokens = estimateTokens(JSON.stringify(overview));
31
152
  if (totalTokens + tokens > budget) {
32
153
  truncated = true;
33
154
  break;
34
155
  }
35
- symbols.push(result.symbol);
156
+ overviews.push(overview);
36
157
  totalTokens += tokens;
37
158
  }
38
- return { symbols, total_tokens: totalTokens, truncated };
159
+ return { directory_overview: overviews, level: "L3", total_tokens: totalTokens, truncated, result_count: overviews.length };
39
160
  }
40
- // Patterns for detecting import statements across common languages
41
- const IMPORT_PATTERNS = [
42
- // ES modules: import ... from '...' or import ... from "..."
43
- /import\s+.*?\s+from\s+['"]([^'"]+)['"]/g,
44
- // Dynamic import: import('...')
45
- /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
46
- // CommonJS: require('...')
47
- /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
48
- ];
161
+ // Import graph utilities moved to src/utils/import-graph.ts
49
162
  /**
50
- * Extract import paths from a source string.
51
- * Returns relative paths only (skips node_modules / bare specifiers).
163
+ * Convert a KnowledgeMap into a Mermaid graph TD diagram.
164
+ * Aggregates at directory level for readability.
165
+ * Capped at 30 nodes and 50 edges.
52
166
  */
53
- function extractImports(source) {
54
- const imports = new Set();
55
- for (const pattern of IMPORT_PATTERNS) {
56
- // Reset lastIndex for global regex
57
- pattern.lastIndex = 0;
58
- let match;
59
- while ((match = pattern.exec(source)) !== null) {
60
- const importPath = match[1];
61
- if (importPath && importPath.startsWith(".")) {
62
- imports.add(importPath);
63
- }
64
- }
167
+ function knowledgeMapToMermaid(result) {
168
+ const lines = ["graph TD"];
169
+ const MAX_NODES = 30;
170
+ const MAX_EDGES = 50;
171
+ // Aggregate to directory level for readability
172
+ const dirSymbols = new Map();
173
+ for (const mod of result.modules) {
174
+ const dir = mod.path.includes("/") ? mod.path.slice(0, mod.path.lastIndexOf("/")) : mod.path;
175
+ dirSymbols.set(dir, (dirSymbols.get(dir) ?? 0) + mod.symbol_count);
65
176
  }
66
- return [...imports];
67
- }
68
- /**
69
- * Normalize an import path relative to the importing file.
70
- * Resolves "./foo" and "../bar" relative to the importer's directory.
71
- */
72
- function resolveImportPath(importerFile, importPath) {
73
- const importerDir = importerFile.includes("/")
74
- ? importerFile.slice(0, importerFile.lastIndexOf("/"))
75
- : ".";
76
- const parts = importerDir.split("/");
77
- for (const segment of importPath.split("/")) {
78
- if (segment === ".")
177
+ const topDirs = [...dirSymbols.entries()]
178
+ .sort((a, b) => b[1] - a[1])
179
+ .slice(0, MAX_NODES);
180
+ const dirSet = new Set(topDirs.map(([d]) => d));
181
+ for (const [dir, syms] of topDirs) {
182
+ const id = dir.replace(/[^a-zA-Z0-9]/g, "_");
183
+ const short = dir.split("/").slice(-2).join("/");
184
+ lines.push(` ${id}["${short} (${syms} sym)"]`);
185
+ }
186
+ const dirEdges = new Set();
187
+ let edgeCount = 0;
188
+ for (const edge of result.edges) {
189
+ if (edgeCount >= MAX_EDGES)
190
+ break;
191
+ const fromDir = edge.from.includes("/") ? edge.from.slice(0, edge.from.lastIndexOf("/")) : edge.from;
192
+ const toDir = edge.to.includes("/") ? edge.to.slice(0, edge.to.lastIndexOf("/")) : edge.to;
193
+ if (fromDir === toDir || !dirSet.has(fromDir) || !dirSet.has(toDir))
79
194
  continue;
80
- if (segment === "..") {
81
- parts.pop();
82
- }
83
- else {
84
- parts.push(segment);
85
- }
195
+ const key = `${fromDir}|${toDir}`;
196
+ if (dirEdges.has(key))
197
+ continue;
198
+ dirEdges.add(key);
199
+ const fromId = fromDir.replace(/[^a-zA-Z0-9]/g, "_");
200
+ const toId = toDir.replace(/[^a-zA-Z0-9]/g, "_");
201
+ lines.push(` ${fromId} --> ${toId}`);
202
+ edgeCount++;
86
203
  }
87
- let resolved = parts.join("/");
88
- // Strip file extension for matching (imports often omit .ts/.js)
89
- resolved = resolved.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
90
- return resolved;
204
+ return lines.join("\n");
91
205
  }
92
206
  /**
93
207
  * Build a module dependency map for a repository.
94
208
  * Parses import statements from each file's symbols to discover edges.
95
209
  * Optionally filters to modules matching a focus path.
96
210
  */
97
- export async function getKnowledgeMap(repo, focus, depth) {
211
+ export async function getKnowledgeMap(repo, focus, depth, outputFormat) {
98
212
  const index = await getCodeIndex(repo);
99
213
  if (!index) {
100
214
  throw new Error(`Repository not found: ${repo}`);
@@ -108,60 +222,164 @@ export async function getKnowledgeMap(repo, focus, depth) {
108
222
  symbol_count: file.symbol_count,
109
223
  });
110
224
  }
111
- // Collect all import edges by scanning symbol source
112
- const edges = collectEdges(index, moduleMap);
113
- // If no focus, return the full graph (limited by depth from roots)
225
+ // Collect all import edges by reading file source from disk (may use cached graph)
226
+ const collected = await collectEdges(index, moduleMap);
227
+ const edges = collected.edges;
228
+ const circularDeps = collected.cachedCircularDeps ?? findCircularDeps(edges);
229
+ // Persist graph with circular deps if freshly computed
230
+ if (collected._graphMeta && !collected.cachedCircularDeps) {
231
+ const { graphPath, indexHash, importEdges } = collected._graphMeta;
232
+ const inDeg = new Map();
233
+ const outDeg = new Map();
234
+ for (const e of edges) {
235
+ outDeg.set(e.from, (outDeg.get(e.from) ?? 0) + 1);
236
+ inDeg.set(e.to, (inDeg.get(e.to) ?? 0) + 1);
237
+ }
238
+ const graph = {
239
+ index_hash: indexHash,
240
+ computed_at: Date.now(),
241
+ edges: importEdges.map((e) => ({ from: e.from, to: e.to, kind: "imports" })),
242
+ modules: index.files.map((f) => ({
243
+ path: f.path,
244
+ symbol_count: f.symbol_count,
245
+ in_degree: inDeg.get(f.path) ?? 0,
246
+ out_degree: outDeg.get(f.path) ?? 0,
247
+ })),
248
+ circular_deps: circularDeps.map((cd) => cd.cycle),
249
+ };
250
+ saveGraph(graphPath, graph).catch(() => { });
251
+ }
252
+ // Cap output to prevent huge responses on large repos
253
+ const MAX_UNFOCUSED_MODULES = 30;
254
+ const MAX_UNFOCUSED_EDGES = 80;
114
255
  if (!focus) {
115
- return {
116
- modules: [...moduleMap.values()],
117
- edges,
256
+ const allModules = [...moduleMap.values()];
257
+ const cappedModules = allModules.length > MAX_UNFOCUSED_MODULES
258
+ ? allModules.sort((a, b) => b.symbol_count - a.symbol_count).slice(0, MAX_UNFOCUSED_MODULES)
259
+ : allModules;
260
+ const cappedModuleSet = new Set(cappedModules.map((m) => m.path));
261
+ const cappedEdges = edges
262
+ .filter((e) => cappedModuleSet.has(e.from) && cappedModuleSet.has(e.to))
263
+ .slice(0, MAX_UNFOCUSED_EDGES);
264
+ const result = {
265
+ modules: cappedModules,
266
+ edges: cappedEdges,
267
+ circular_deps: circularDeps,
268
+ ...(allModules.length > MAX_UNFOCUSED_MODULES
269
+ ? { truncated: true, total_modules: allModules.length, hint: `Showing top ${MAX_UNFOCUSED_MODULES} by symbol count. Use focus param to narrow.` }
270
+ : {}),
118
271
  };
272
+ if (outputFormat === "mermaid")
273
+ return { mermaid: knowledgeMapToMermaid(result) };
274
+ return result;
119
275
  }
120
276
  // Filter to focus path and neighbors within depth
121
- return filterToFocus(moduleMap, edges, focus, maxDepth);
277
+ const result = filterToFocus(moduleMap, edges, focus, maxDepth, circularDeps);
278
+ if (outputFormat === "mermaid")
279
+ return { mermaid: knowledgeMapToMermaid(result) };
280
+ return result;
281
+ }
282
+ async function collectEdges(index, moduleMap) {
283
+ // Try loading cached graph
284
+ const config = loadConfig();
285
+ const meta = await getRepo(config.registryPath, index.repo);
286
+ if (meta) {
287
+ const graphPath = getGraphPath(meta.index_path);
288
+ const indexHash = computeIndexHash(index.files);
289
+ const cached = await loadGraph(graphPath, indexHash);
290
+ if (cached) {
291
+ const edges = cached.edges
292
+ .filter((e) => e.kind === "imports" && moduleMap.has(e.from) && moduleMap.has(e.to))
293
+ .map((e) => ({ from: e.from, to: e.to }));
294
+ const cachedCircularDeps = cached.circular_deps.length > 0
295
+ ? cached.circular_deps.map((cycle) => ({ cycle, length: cycle.length - 1 }))
296
+ : null;
297
+ return { edges, cachedCircularDeps, _graphMeta: null };
298
+ }
299
+ // Compute fresh
300
+ const importEdges = await collectImportEdges(index);
301
+ const edges = importEdges
302
+ .filter((e) => moduleMap.has(e.from) && moduleMap.has(e.to))
303
+ .map((e) => ({ from: e.from, to: e.to }));
304
+ return { edges, cachedCircularDeps: null, _graphMeta: { graphPath, indexHash, importEdges } };
305
+ }
306
+ // Fallback: no meta available
307
+ const importEdges = await collectImportEdges(index);
308
+ const edges = importEdges
309
+ .filter((e) => moduleMap.has(e.from) && moduleMap.has(e.to))
310
+ .map((e) => ({ from: e.from, to: e.to }));
311
+ return { edges, cachedCircularDeps: null, _graphMeta: null };
122
312
  }
123
313
  /**
124
- * Scan all symbols to collect import edges between modules.
314
+ * Find circular dependencies using DFS cycle detection.
315
+ * Returns unique cycles (normalized so shortest path is first).
125
316
  */
126
- function collectEdges(index, moduleMap) {
127
- const edgeSet = new Set();
128
- const edges = [];
129
- // Build a set of normalized module paths for matching
130
- const normalizedPaths = new Map();
131
- for (const file of index.files) {
132
- const normalized = file.path.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
133
- normalizedPaths.set(normalized, file.path);
134
- // Also handle index files: "foo/index" -> "foo"
135
- if (normalized.endsWith("/index")) {
136
- normalizedPaths.set(normalized.slice(0, -6), file.path);
317
+ function findCircularDeps(edges) {
318
+ // Build directed adjacency list
319
+ const adj = new Map();
320
+ for (const edge of edges) {
321
+ let list = adj.get(edge.from);
322
+ if (!list) {
323
+ list = [];
324
+ adj.set(edge.from, list);
137
325
  }
326
+ list.push(edge.to);
138
327
  }
139
- for (const sym of index.symbols) {
140
- if (!sym.source)
141
- continue;
142
- const importPaths = extractImports(sym.source);
143
- for (const importPath of importPaths) {
144
- const resolved = resolveImportPath(sym.file, importPath);
145
- const targetFile = normalizedPaths.get(resolved);
146
- if (!targetFile || targetFile === sym.file)
147
- continue;
148
- const edgeKey = `${sym.file}->${targetFile}`;
149
- if (edgeSet.has(edgeKey))
150
- continue;
151
- edgeSet.add(edgeKey);
152
- // Ensure both modules exist in the map
153
- if (moduleMap.has(sym.file) && moduleMap.has(targetFile)) {
154
- edges.push({ from: sym.file, to: targetFile });
328
+ const WHITE = 0, GRAY = 1, BLACK = 2;
329
+ const color = new Map();
330
+ const parent = new Map();
331
+ const cycles = [];
332
+ const seenCycleKeys = new Set();
333
+ const MAX_CYCLES = 50; // Cap to avoid blowup on large graphs
334
+ function dfs(node) {
335
+ if (cycles.length >= MAX_CYCLES)
336
+ return;
337
+ color.set(node, GRAY);
338
+ for (const neighbor of adj.get(node) ?? []) {
339
+ if (cycles.length >= MAX_CYCLES)
340
+ return;
341
+ const neighborColor = color.get(neighbor) ?? WHITE;
342
+ if (neighborColor === GRAY) {
343
+ // Back edge found extract cycle
344
+ const cycle = [neighbor];
345
+ let current = node;
346
+ while (current && current !== neighbor) {
347
+ cycle.push(current);
348
+ current = parent.get(current);
349
+ }
350
+ cycle.push(neighbor); // close the cycle
351
+ cycle.reverse();
352
+ // Normalize: rotate so lexicographically smallest is first
353
+ const minIdx = cycle.slice(0, -1).reduce((mi, _, i, arr) => (arr[i] < arr[mi] ? i : mi), 0);
354
+ const normalized = [...cycle.slice(minIdx, -1), ...cycle.slice(0, minIdx), cycle[minIdx]];
355
+ const key = normalized.join(" -> ");
356
+ if (!seenCycleKeys.has(key)) {
357
+ seenCycleKeys.add(key);
358
+ cycles.push({ cycle: normalized, length: normalized.length - 1 });
359
+ }
155
360
  }
361
+ else if (neighborColor === WHITE) {
362
+ parent.set(neighbor, node);
363
+ dfs(neighbor);
364
+ }
365
+ }
366
+ color.set(node, BLACK);
367
+ }
368
+ for (const node of adj.keys()) {
369
+ if ((color.get(node) ?? WHITE) === WHITE) {
370
+ parent.set(node, null);
371
+ dfs(node);
156
372
  }
157
373
  }
158
- return edges;
374
+ // Sort by cycle length (shortest first — most actionable)
375
+ cycles.sort((a, b) => a.length - b.length);
376
+ return cycles;
159
377
  }
160
378
  /**
161
379
  * Filter the graph to only modules matching the focus path
162
380
  * and their neighbors up to maxDepth hops.
163
381
  */
164
- function filterToFocus(moduleMap, edges, focus, maxDepth) {
382
+ function filterToFocus(moduleMap, edges, focus, maxDepth, circularDeps = []) {
165
383
  // Build adjacency lists (bidirectional for neighbor traversal)
166
384
  const adjacency = new Map();
167
385
  for (const edge of edges) {
@@ -205,15 +423,27 @@ function filterToFocus(moduleMap, edges, focus, maxDepth) {
205
423
  break;
206
424
  frontier = nextFrontier;
207
425
  }
208
- // Filter modules and edges to reachable set
209
- const filteredModules = [];
426
+ // Filter modules and edges to reachable set, with caps
427
+ const MAX_FOCUSED_MODULES = 200;
428
+ const MAX_FOCUSED_EDGES = 500;
429
+ let filteredModules = [];
210
430
  for (const path of reachable) {
211
431
  const mod = moduleMap.get(path);
212
- if (mod) {
432
+ if (mod)
213
433
  filteredModules.push(mod);
214
- }
215
434
  }
216
- const filteredEdges = edges.filter((e) => reachable.has(e.from) && reachable.has(e.to));
217
- return { modules: filteredModules, edges: filteredEdges };
435
+ if (filteredModules.length > MAX_FOCUSED_MODULES) {
436
+ filteredModules = filteredModules
437
+ .sort((a, b) => b.symbol_count - a.symbol_count)
438
+ .slice(0, MAX_FOCUSED_MODULES);
439
+ }
440
+ const filteredModuleSet = new Set(filteredModules.map((m) => m.path));
441
+ let filteredEdges = edges.filter((e) => filteredModuleSet.has(e.from) && filteredModuleSet.has(e.to));
442
+ if (filteredEdges.length > MAX_FOCUSED_EDGES) {
443
+ filteredEdges = filteredEdges.slice(0, MAX_FOCUSED_EDGES);
444
+ }
445
+ // Filter circular deps to only those involving reachable modules
446
+ const filteredCircular = circularDeps.filter((cd) => cd.cycle.some((path) => reachable.has(path)));
447
+ return { modules: filteredModules, edges: filteredEdges, circular_deps: filteredCircular };
218
448
  }
219
449
  //# sourceMappingURL=context-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-tools.js","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-tools.js","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"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"}