@jafreck/lore 0.1.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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +405 -0
  3. package/dist/cli.d.ts +19 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +345 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +22 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +16 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/indexer/call-graph.d.ts +39 -0
  12. package/dist/indexer/call-graph.d.ts.map +1 -0
  13. package/dist/indexer/call-graph.js +193 -0
  14. package/dist/indexer/call-graph.js.map +1 -0
  15. package/dist/indexer/complexity.d.ts +9 -0
  16. package/dist/indexer/complexity.d.ts.map +1 -0
  17. package/dist/indexer/complexity.js +66 -0
  18. package/dist/indexer/complexity.js.map +1 -0
  19. package/dist/indexer/config-parser.d.ts +16 -0
  20. package/dist/indexer/config-parser.d.ts.map +1 -0
  21. package/dist/indexer/config-parser.js +261 -0
  22. package/dist/indexer/config-parser.js.map +1 -0
  23. package/dist/indexer/coverage.d.ts +13 -0
  24. package/dist/indexer/coverage.d.ts.map +1 -0
  25. package/dist/indexer/coverage.js +84 -0
  26. package/dist/indexer/coverage.js.map +1 -0
  27. package/dist/indexer/db.d.ts +38 -0
  28. package/dist/indexer/db.d.ts.map +1 -0
  29. package/dist/indexer/db.js +275 -0
  30. package/dist/indexer/db.js.map +1 -0
  31. package/dist/indexer/embedder.d.ts +70 -0
  32. package/dist/indexer/embedder.d.ts.map +1 -0
  33. package/dist/indexer/embedder.js +186 -0
  34. package/dist/indexer/embedder.js.map +1 -0
  35. package/dist/indexer/ensure-python-deps.d.ts +22 -0
  36. package/dist/indexer/ensure-python-deps.d.ts.map +1 -0
  37. package/dist/indexer/ensure-python-deps.js +47 -0
  38. package/dist/indexer/ensure-python-deps.js.map +1 -0
  39. package/dist/indexer/extractors/bash.d.ts +12 -0
  40. package/dist/indexer/extractors/bash.d.ts.map +1 -0
  41. package/dist/indexer/extractors/bash.js +57 -0
  42. package/dist/indexer/extractors/bash.js.map +1 -0
  43. package/dist/indexer/extractors/c.d.ts +12 -0
  44. package/dist/indexer/extractors/c.d.ts.map +1 -0
  45. package/dist/indexer/extractors/c.js +106 -0
  46. package/dist/indexer/extractors/c.js.map +1 -0
  47. package/dist/indexer/extractors/cpp.d.ts +12 -0
  48. package/dist/indexer/extractors/cpp.d.ts.map +1 -0
  49. package/dist/indexer/extractors/cpp.js +84 -0
  50. package/dist/indexer/extractors/cpp.js.map +1 -0
  51. package/dist/indexer/extractors/csharp.d.ts +12 -0
  52. package/dist/indexer/extractors/csharp.d.ts.map +1 -0
  53. package/dist/indexer/extractors/csharp.js +79 -0
  54. package/dist/indexer/extractors/csharp.js.map +1 -0
  55. package/dist/indexer/extractors/dart.d.ts +12 -0
  56. package/dist/indexer/extractors/dart.d.ts.map +1 -0
  57. package/dist/indexer/extractors/dart.js +80 -0
  58. package/dist/indexer/extractors/dart.js.map +1 -0
  59. package/dist/indexer/extractors/elixir.d.ts +12 -0
  60. package/dist/indexer/extractors/elixir.d.ts.map +1 -0
  61. package/dist/indexer/extractors/elixir.js +87 -0
  62. package/dist/indexer/extractors/elixir.js.map +1 -0
  63. package/dist/indexer/extractors/elm.d.ts +12 -0
  64. package/dist/indexer/extractors/elm.d.ts.map +1 -0
  65. package/dist/indexer/extractors/elm.js +87 -0
  66. package/dist/indexer/extractors/elm.js.map +1 -0
  67. package/dist/indexer/extractors/go.d.ts +12 -0
  68. package/dist/indexer/extractors/go.d.ts.map +1 -0
  69. package/dist/indexer/extractors/go.js +158 -0
  70. package/dist/indexer/extractors/go.js.map +1 -0
  71. package/dist/indexer/extractors/haskell.d.ts +12 -0
  72. package/dist/indexer/extractors/haskell.d.ts.map +1 -0
  73. package/dist/indexer/extractors/haskell.js +104 -0
  74. package/dist/indexer/extractors/haskell.js.map +1 -0
  75. package/dist/indexer/extractors/java.d.ts +12 -0
  76. package/dist/indexer/extractors/java.d.ts.map +1 -0
  77. package/dist/indexer/extractors/java.js +68 -0
  78. package/dist/indexer/extractors/java.js.map +1 -0
  79. package/dist/indexer/extractors/javascript.d.ts +13 -0
  80. package/dist/indexer/extractors/javascript.d.ts.map +1 -0
  81. package/dist/indexer/extractors/javascript.js +180 -0
  82. package/dist/indexer/extractors/javascript.js.map +1 -0
  83. package/dist/indexer/extractors/julia.d.ts +12 -0
  84. package/dist/indexer/extractors/julia.d.ts.map +1 -0
  85. package/dist/indexer/extractors/julia.js +94 -0
  86. package/dist/indexer/extractors/julia.js.map +1 -0
  87. package/dist/indexer/extractors/kotlin.d.ts +12 -0
  88. package/dist/indexer/extractors/kotlin.d.ts.map +1 -0
  89. package/dist/indexer/extractors/kotlin.js +71 -0
  90. package/dist/indexer/extractors/kotlin.js.map +1 -0
  91. package/dist/indexer/extractors/lua.d.ts +12 -0
  92. package/dist/indexer/extractors/lua.d.ts.map +1 -0
  93. package/dist/indexer/extractors/lua.js +68 -0
  94. package/dist/indexer/extractors/lua.js.map +1 -0
  95. package/dist/indexer/extractors/objc.d.ts +12 -0
  96. package/dist/indexer/extractors/objc.d.ts.map +1 -0
  97. package/dist/indexer/extractors/objc.js +129 -0
  98. package/dist/indexer/extractors/objc.js.map +1 -0
  99. package/dist/indexer/extractors/ocaml.d.ts +12 -0
  100. package/dist/indexer/extractors/ocaml.d.ts.map +1 -0
  101. package/dist/indexer/extractors/ocaml.js +92 -0
  102. package/dist/indexer/extractors/ocaml.js.map +1 -0
  103. package/dist/indexer/extractors/php.d.ts +12 -0
  104. package/dist/indexer/extractors/php.d.ts.map +1 -0
  105. package/dist/indexer/extractors/php.js +99 -0
  106. package/dist/indexer/extractors/php.js.map +1 -0
  107. package/dist/indexer/extractors/python.d.ts +12 -0
  108. package/dist/indexer/extractors/python.d.ts.map +1 -0
  109. package/dist/indexer/extractors/python.js +129 -0
  110. package/dist/indexer/extractors/python.js.map +1 -0
  111. package/dist/indexer/extractors/ruby.d.ts +12 -0
  112. package/dist/indexer/extractors/ruby.d.ts.map +1 -0
  113. package/dist/indexer/extractors/ruby.js +100 -0
  114. package/dist/indexer/extractors/ruby.js.map +1 -0
  115. package/dist/indexer/extractors/rust.d.ts +12 -0
  116. package/dist/indexer/extractors/rust.d.ts.map +1 -0
  117. package/dist/indexer/extractors/rust.js +82 -0
  118. package/dist/indexer/extractors/rust.js.map +1 -0
  119. package/dist/indexer/extractors/scala.d.ts +12 -0
  120. package/dist/indexer/extractors/scala.d.ts.map +1 -0
  121. package/dist/indexer/extractors/scala.js +91 -0
  122. package/dist/indexer/extractors/scala.js.map +1 -0
  123. package/dist/indexer/extractors/swift.d.ts +12 -0
  124. package/dist/indexer/extractors/swift.d.ts.map +1 -0
  125. package/dist/indexer/extractors/swift.js +90 -0
  126. package/dist/indexer/extractors/swift.js.map +1 -0
  127. package/dist/indexer/extractors/types.d.ts +118 -0
  128. package/dist/indexer/extractors/types.d.ts.map +1 -0
  129. package/dist/indexer/extractors/types.js +43 -0
  130. package/dist/indexer/extractors/types.js.map +1 -0
  131. package/dist/indexer/extractors/typescript.d.ts +14 -0
  132. package/dist/indexer/extractors/typescript.d.ts.map +1 -0
  133. package/dist/indexer/extractors/typescript.js +172 -0
  134. package/dist/indexer/extractors/typescript.js.map +1 -0
  135. package/dist/indexer/extractors/zig.d.ts +12 -0
  136. package/dist/indexer/extractors/zig.d.ts.map +1 -0
  137. package/dist/indexer/extractors/zig.js +95 -0
  138. package/dist/indexer/extractors/zig.js.map +1 -0
  139. package/dist/indexer/git-history.d.ts +23 -0
  140. package/dist/indexer/git-history.d.ts.map +1 -0
  141. package/dist/indexer/git-history.js +144 -0
  142. package/dist/indexer/git-history.js.map +1 -0
  143. package/dist/indexer/git-hooks.d.ts +19 -0
  144. package/dist/indexer/git-hooks.d.ts.map +1 -0
  145. package/dist/indexer/git-hooks.js +74 -0
  146. package/dist/indexer/git-hooks.js.map +1 -0
  147. package/dist/indexer/index.d.ts +83 -0
  148. package/dist/indexer/index.d.ts.map +1 -0
  149. package/dist/indexer/index.js +431 -0
  150. package/dist/indexer/index.js.map +1 -0
  151. package/dist/indexer/parser.d.ts +30 -0
  152. package/dist/indexer/parser.d.ts.map +1 -0
  153. package/dist/indexer/parser.js +114 -0
  154. package/dist/indexer/parser.js.map +1 -0
  155. package/dist/indexer/poller.d.ts +50 -0
  156. package/dist/indexer/poller.d.ts.map +1 -0
  157. package/dist/indexer/poller.js +140 -0
  158. package/dist/indexer/poller.js.map +1 -0
  159. package/dist/indexer/resolver.d.ts +52 -0
  160. package/dist/indexer/resolver.d.ts.map +1 -0
  161. package/dist/indexer/resolver.js +271 -0
  162. package/dist/indexer/resolver.js.map +1 -0
  163. package/dist/indexer/test-mapper.d.ts +6 -0
  164. package/dist/indexer/test-mapper.d.ts.map +1 -0
  165. package/dist/indexer/test-mapper.js +48 -0
  166. package/dist/indexer/test-mapper.js.map +1 -0
  167. package/dist/indexer/walker.d.ts +51 -0
  168. package/dist/indexer/walker.d.ts.map +1 -0
  169. package/dist/indexer/walker.js +100 -0
  170. package/dist/indexer/walker.js.map +1 -0
  171. package/dist/indexer/watcher.d.ts +51 -0
  172. package/dist/indexer/watcher.d.ts.map +1 -0
  173. package/dist/indexer/watcher.js +107 -0
  174. package/dist/indexer/watcher.js.map +1 -0
  175. package/dist/kb-server/db.d.ts +241 -0
  176. package/dist/kb-server/db.d.ts.map +1 -0
  177. package/dist/kb-server/db.js +659 -0
  178. package/dist/kb-server/db.js.map +1 -0
  179. package/dist/kb-server/server.d.ts +35 -0
  180. package/dist/kb-server/server.d.ts.map +1 -0
  181. package/dist/kb-server/server.js +240 -0
  182. package/dist/kb-server/server.js.map +1 -0
  183. package/dist/kb-server/tools/annotations.d.ts +40 -0
  184. package/dist/kb-server/tools/annotations.d.ts.map +1 -0
  185. package/dist/kb-server/tools/annotations.js +35 -0
  186. package/dist/kb-server/tools/annotations.js.map +1 -0
  187. package/dist/kb-server/tools/architecture.d.ts +60 -0
  188. package/dist/kb-server/tools/architecture.d.ts.map +1 -0
  189. package/dist/kb-server/tools/architecture.js +174 -0
  190. package/dist/kb-server/tools/architecture.js.map +1 -0
  191. package/dist/kb-server/tools/blame.d.ts +67 -0
  192. package/dist/kb-server/tools/blame.d.ts.map +1 -0
  193. package/dist/kb-server/tools/blame.js +162 -0
  194. package/dist/kb-server/tools/blame.js.map +1 -0
  195. package/dist/kb-server/tools/coverage.d.ts +67 -0
  196. package/dist/kb-server/tools/coverage.d.ts.map +1 -0
  197. package/dist/kb-server/tools/coverage.js +74 -0
  198. package/dist/kb-server/tools/coverage.js.map +1 -0
  199. package/dist/kb-server/tools/graph.d.ts +56 -0
  200. package/dist/kb-server/tools/graph.d.ts.map +1 -0
  201. package/dist/kb-server/tools/graph.js +188 -0
  202. package/dist/kb-server/tools/graph.js.map +1 -0
  203. package/dist/kb-server/tools/history.d.ts +47 -0
  204. package/dist/kb-server/tools/history.d.ts.map +1 -0
  205. package/dist/kb-server/tools/history.js +91 -0
  206. package/dist/kb-server/tools/history.js.map +1 -0
  207. package/dist/kb-server/tools/lookup.d.ts +36 -0
  208. package/dist/kb-server/tools/lookup.d.ts.map +1 -0
  209. package/dist/kb-server/tools/lookup.js +45 -0
  210. package/dist/kb-server/tools/lookup.js.map +1 -0
  211. package/dist/kb-server/tools/metrics.d.ts +73 -0
  212. package/dist/kb-server/tools/metrics.d.ts.map +1 -0
  213. package/dist/kb-server/tools/metrics.js +79 -0
  214. package/dist/kb-server/tools/metrics.js.map +1 -0
  215. package/dist/kb-server/tools/notes.d.ts +165 -0
  216. package/dist/kb-server/tools/notes.d.ts.map +1 -0
  217. package/dist/kb-server/tools/notes.js +175 -0
  218. package/dist/kb-server/tools/notes.js.map +1 -0
  219. package/dist/kb-server/tools/routes.d.ts +38 -0
  220. package/dist/kb-server/tools/routes.d.ts.map +1 -0
  221. package/dist/kb-server/tools/routes.js +38 -0
  222. package/dist/kb-server/tools/routes.js.map +1 -0
  223. package/dist/kb-server/tools/search.d.ts +60 -0
  224. package/dist/kb-server/tools/search.d.ts.map +1 -0
  225. package/dist/kb-server/tools/search.js +170 -0
  226. package/dist/kb-server/tools/search.js.map +1 -0
  227. package/dist/kb-server/tools/snippet.d.ts +44 -0
  228. package/dist/kb-server/tools/snippet.d.ts.map +1 -0
  229. package/dist/kb-server/tools/snippet.js +49 -0
  230. package/dist/kb-server/tools/snippet.js.map +1 -0
  231. package/dist/kb-server/tools/test-map.d.ts +38 -0
  232. package/dist/kb-server/tools/test-map.d.ts.map +1 -0
  233. package/dist/kb-server/tools/test-map.js +32 -0
  234. package/dist/kb-server/tools/test-map.js.map +1 -0
  235. package/dist/kb-server/tools/writeback.d.ts +49 -0
  236. package/dist/kb-server/tools/writeback.d.ts.map +1 -0
  237. package/dist/kb-server/tools/writeback.js +68 -0
  238. package/dist/kb-server/tools/writeback.js.map +1 -0
  239. package/package.json +92 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @module kb-server/server
3
+ *
4
+ * Knowledge-base MCP server.
5
+ *
6
+ * Exports `createKbMcpServer()` for use by `KbServerProcess` (HTTP transport)
7
+ * and retains a standalone CLI entry point for development/debugging.
8
+ *
9
+ * MCP tools exposed:
10
+ * kb_lookup — symbol / file lookup
11
+ * kb_graph — call / import graph queries
12
+ * kb_search — structural, semantic, and fused search
13
+ * kb_test_map — source-file to mapped-test lookup
14
+ * kb_snippet — source-code snippet extraction
15
+ * kb_blame — git blame metadata for file lines
16
+ * kb_metrics — aggregate code metrics
17
+ * kb_writeback — LLM summary write-back
18
+ * kb_history — git commit history queries
19
+ *
20
+ * Standalone usage:
21
+ * node dist/kb-server/server.js --db <path-to-kb.db>
22
+ * tsx src/kb-server/server.ts --db <path-to-kb.db>
23
+ */
24
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
25
+ import { type Database } from './db.js';
26
+ import { type EmbeddingProvider } from '../indexer/embedder.js';
27
+ /**
28
+ * Create and return a fully-configured `McpServer` with all KB tools registered.
29
+ *
30
+ * @param db Read-only SQLite connection to the knowledge-base.
31
+ * @param dbPath Path to the DB file, needed by `kb_writeback` for write access.
32
+ * @param embedder Optional live embedding provider for semantic/fused search.
33
+ */
34
+ export declare function createKbMcpServer(db: Database.Database, dbPath: string, embedder?: EmbeddingProvider): McpServer;
35
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/kb-server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EASL,KAAK,QAAQ,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAgC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6D9F;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,SAAS,CAkLX"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @module kb-server/server
3
+ *
4
+ * Knowledge-base MCP server.
5
+ *
6
+ * Exports `createKbMcpServer()` for use by `KbServerProcess` (HTTP transport)
7
+ * and retains a standalone CLI entry point for development/debugging.
8
+ *
9
+ * MCP tools exposed:
10
+ * kb_lookup — symbol / file lookup
11
+ * kb_graph — call / import graph queries
12
+ * kb_search — structural, semantic, and fused search
13
+ * kb_test_map — source-file to mapped-test lookup
14
+ * kb_snippet — source-code snippet extraction
15
+ * kb_blame — git blame metadata for file lines
16
+ * kb_metrics — aggregate code metrics
17
+ * kb_writeback — LLM summary write-back
18
+ * kb_history — git commit history queries
19
+ *
20
+ * Standalone usage:
21
+ * node dist/kb-server/server.js --db <path-to-kb.db>
22
+ * tsx src/kb-server/server.ts --db <path-to-kb.db>
23
+ */
24
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
25
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
26
+ import { z } from 'zod';
27
+ import { fileURLToPath } from 'url';
28
+ import { listCommitAuthorStats, listCommitBranchActivity, listCommitCadence, listCommitChurnByFile, listCommitMessagePrefixes, listCommitSchedule, listCommitSizes, openReadOnly, } from './db.js';
29
+ import { getKbMeta } from '../indexer/db.js';
30
+ import { SentenceTransformersProvider } from '../indexer/embedder.js';
31
+ import * as lookup from './tools/lookup.js';
32
+ import * as graph from './tools/graph.js';
33
+ import * as search from './tools/search.js';
34
+ import * as testMap from './tools/test-map.js';
35
+ import * as snippet from './tools/snippet.js';
36
+ import * as blame from './tools/blame.js';
37
+ import * as metrics from './tools/metrics.js';
38
+ import * as coverage from './tools/coverage.js';
39
+ import * as writeback from './tools/writeback.js';
40
+ import * as history from './tools/history.js';
41
+ function handleCommitStats(db, args) {
42
+ const filters = {
43
+ limit: args.limit,
44
+ since: args.since,
45
+ until: args.until,
46
+ author: args.author,
47
+ };
48
+ switch (args.metric) {
49
+ case 'cadence':
50
+ return {
51
+ metric: args.metric,
52
+ day: listCommitCadence(db, 'day', filters),
53
+ week: listCommitCadence(db, 'week', filters),
54
+ month: listCommitCadence(db, 'month', filters),
55
+ };
56
+ case 'size':
57
+ return { metric: args.metric, commits: listCommitSizes(db, filters) };
58
+ case 'churn':
59
+ return { metric: args.metric, files: listCommitChurnByFile(db, filters) };
60
+ case 'authors':
61
+ return { metric: args.metric, authors: listCommitAuthorStats(db, filters) };
62
+ case 'messages':
63
+ return { metric: args.metric, prefixes: listCommitMessagePrefixes(db, filters) };
64
+ case 'schedule':
65
+ return { metric: args.metric, buckets: listCommitSchedule(db, filters) };
66
+ case 'branches':
67
+ return { metric: args.metric, refs: listCommitBranchActivity(db, filters) };
68
+ }
69
+ }
70
+ // ─── Server factory ───────────────────────────────────────────────────────────
71
+ /**
72
+ * Create and return a fully-configured `McpServer` with all KB tools registered.
73
+ *
74
+ * @param db Read-only SQLite connection to the knowledge-base.
75
+ * @param dbPath Path to the DB file, needed by `kb_writeback` for write access.
76
+ * @param embedder Optional live embedding provider for semantic/fused search.
77
+ */
78
+ export function createKbMcpServer(db, dbPath, embedder) {
79
+ const server = new McpServer({ name: 'lore-kb-server', version: '0.1.0' }, { capabilities: { tools: {} } });
80
+ // ── kb_lookup ──────────────────────────────────────────────────────────────
81
+ server.tool(lookup.toolDef.name, lookup.toolDef.description, {
82
+ kind: z.enum(['symbol', 'file']).describe('Whether to look up a symbol or a file.'),
83
+ query: z.string().describe('Symbol name or file path to look up.'),
84
+ branch: z.string().optional().describe('Optional branch to filter results.'),
85
+ }, async (args) => ({
86
+ content: [{ type: 'text', text: JSON.stringify(lookup.handler(db, args)) }],
87
+ }));
88
+ // ── kb_graph ───────────────────────────────────────────────────────────────
89
+ server.tool(graph.toolDef.name, graph.toolDef.description, {
90
+ kind: z
91
+ .enum(['call', 'import', 'module', 'inheritance'])
92
+ .describe('"call", "import", "module", or "inheritance" graph edges.'),
93
+ source_id: z.number().optional().describe('Filter edges by source node id.'),
94
+ limit: z.number().optional().describe('Max edges to return (default 200).'),
95
+ branch: z.string().optional().describe('Optional branch to filter edges.'),
96
+ }, async (args) => ({
97
+ content: [{ type: 'text', text: JSON.stringify(graph.handler(db, args)) }],
98
+ }));
99
+ // ── kb_search ──────────────────────────────────────────────────────────────
100
+ server.tool(search.toolDef.name, search.toolDef.description, {
101
+ query: z.string().describe('Search query.'),
102
+ mode: z
103
+ .enum(['structural', 'semantic', 'fused'])
104
+ .optional()
105
+ .describe('Search mode (default: structural).'),
106
+ limit: z.number().optional().describe('Max results (default 20).'),
107
+ branch: z.string().optional().describe('Optional branch to filter results.'),
108
+ }, async (args) => ({
109
+ content: [{ type: 'text', text: JSON.stringify(await search.handler(db, args, embedder)) }],
110
+ }));
111
+ // ── kb_test_map ─────────────────────────────────────────────────────────────
112
+ server.tool(testMap.toolDef.name, testMap.toolDef.description, {
113
+ source_path: z.string().describe('Source file path to resolve mapped test files for.'),
114
+ branch: z.string().optional().describe('Optional branch to constrain mappings.'),
115
+ }, async (args) => ({
116
+ content: [{ type: 'text', text: JSON.stringify(testMap.handler(db, args)) }],
117
+ }));
118
+ // ── kb_snippet ─────────────────────────────────────────────────────────────
119
+ server.tool(snippet.toolDef.name, snippet.toolDef.description, {
120
+ path: z.string().describe('Absolute file path as stored in the index.'),
121
+ start_line: z.number().optional().describe('First line (1-based, inclusive).'),
122
+ end_line: z.number().optional().describe('Last line (1-based, inclusive).'),
123
+ branch: z.string().optional().describe('Optional branch to disambiguate the file path.'),
124
+ }, async (args) => ({
125
+ content: [{ type: 'text', text: JSON.stringify(snippet.handler(db, args)) }],
126
+ }));
127
+ // ── kb_metrics ─────────────────────────────────────────────────────────────
128
+ server.tool(metrics.toolDef.name, metrics.toolDef.description, {}, async (_args) => ({
129
+ content: [{ type: 'text', text: JSON.stringify(metrics.handler(db, {})) }],
130
+ }));
131
+ // ── kb_coverage ────────────────────────────────────────────────────────────
132
+ server.tool(coverage.toolDef.name, coverage.toolDef.description, {
133
+ symbol_id: z.number().optional().describe('Optional symbol id to fetch exact coverage for.'),
134
+ symbol_name: z.string().optional().describe('Optional symbol name filter (case-insensitive).'),
135
+ path: z.string().optional().describe('Optional file path filter.'),
136
+ branch: z.string().optional().describe('Optional branch filter.'),
137
+ limit: z.number().optional().describe('Maximum symbols to return (default 50).'),
138
+ }, async (args) => ({
139
+ content: [{ type: 'text', text: JSON.stringify(coverage.handler(db, args)) }],
140
+ }));
141
+ // ── kb_blame ───────────────────────────────────────────────────────────────
142
+ server.tool(blame.toolDef.name, blame.toolDef.description, {
143
+ path: z.string().describe('Absolute file path as stored in the index.'),
144
+ line: z.number().optional().describe('Single line to blame (1-based).'),
145
+ start_line: z.number().optional().describe('Range start line (1-based).'),
146
+ end_line: z.number().optional().describe('Range end line (1-based).'),
147
+ ref: z.string().optional().describe('Git ref to blame against (default HEAD).'),
148
+ branch: z.string().optional().describe('Optional branch to disambiguate indexed file path.'),
149
+ }, async (args) => ({
150
+ content: [{ type: 'text', text: JSON.stringify(blame.handler(db, args)) }],
151
+ }));
152
+ // ── kb_writeback ───────────────────────────────────────────────────────────
153
+ server.tool(writeback.toolDef.name, writeback.toolDef.description, {
154
+ symbol_id: z.number().describe('Symbol id to attach the summary to.'),
155
+ summary: z.string().describe('Natural-language summary text.'),
156
+ model: z.string().describe('Model identifier that generated the summary.'),
157
+ branch: z.string().optional().describe('Optional branch to validate the symbol belongs to.'),
158
+ }, async (args) => ({
159
+ content: [
160
+ { type: 'text', text: JSON.stringify(writeback.handler(dbPath, args)) },
161
+ ],
162
+ }));
163
+ // ── kb_history ─────────────────────────────────────────────────────────────
164
+ server.tool(history.toolDef.name, history.toolDef.description, {
165
+ mode: z
166
+ .enum(['file', 'commit', 'author', 'ref', 'recent'])
167
+ .describe('Query mode: file, commit, author, ref, or recent.'),
168
+ query: z.string().optional().describe('File path, commit SHA, author name/email, or ref.'),
169
+ limit: z.number().optional().describe('Max results (default 20, max 200).'),
170
+ }, async (args) => ({
171
+ content: [{ type: 'text', text: JSON.stringify(history.handler(db, args)) }],
172
+ }));
173
+ // ── kb_commit_stats ────────────────────────────────────────────────────────
174
+ server.tool('kb_commit_stats', 'Return git commit analytics for a selected metric.', {
175
+ metric: z
176
+ .enum(['cadence', 'size', 'churn', 'authors', 'messages', 'schedule', 'branches'])
177
+ .describe('Analytics metric to compute.'),
178
+ limit: z.number().optional().describe('Max rows for top-N metrics (default 20, max 200).'),
179
+ since: z.string().optional().describe('Optional ISO date lower bound (inclusive).'),
180
+ until: z.string().optional().describe('Optional ISO date upper bound (inclusive).'),
181
+ author: z.string().optional().describe('Optional author name/email substring filter.'),
182
+ }, async (args) => ({
183
+ content: [{ type: 'text', text: JSON.stringify(handleCommitStats(db, args)) }],
184
+ }));
185
+ return server;
186
+ }
187
+ // ─── Embedding helper ─────────────────────────────────────────────────────────
188
+ /**
189
+ * Read the embedding model stored in `kb_meta` at index time and spin up a
190
+ * `SentenceTransformersProvider` instance for it. Returns `undefined` when no
191
+ * embedding model is recorded in the database.
192
+ */
193
+ async function buildEmbedder(db) {
194
+ const modelName = getKbMeta(db, 'embedding_model');
195
+ if (!modelName)
196
+ return undefined;
197
+ const provider = new SentenceTransformersProvider(modelName);
198
+ try {
199
+ await provider.init();
200
+ return provider;
201
+ }
202
+ catch {
203
+ // Model not available — fall back to structural search only.
204
+ try {
205
+ await provider.dispose();
206
+ }
207
+ catch { /* ignore */ }
208
+ return undefined;
209
+ }
210
+ }
211
+ // ─── CLI argument parsing ─────────────────────────────────────────────────────
212
+ function parseArgs() {
213
+ const args = process.argv.slice(2);
214
+ const dbIdx = args.indexOf('--db');
215
+ if (dbIdx === -1 || !args[dbIdx + 1]) {
216
+ console.error('Usage: kb-server --db <path>');
217
+ process.exit(1);
218
+ }
219
+ return { dbPath: args[dbIdx + 1] };
220
+ }
221
+ // ─── Main (standalone CLI) ────────────────────────────────────────────────────
222
+ async function main() {
223
+ const { dbPath } = parseArgs();
224
+ const db = openReadOnly(dbPath);
225
+ const embedder = await buildEmbedder(db);
226
+ const server = createKbMcpServer(db, dbPath, embedder);
227
+ // Connect via stdio transport (standalone/debug mode).
228
+ const transport = new StdioServerTransport();
229
+ await server.connect(transport);
230
+ // Signal readiness to the parent process over stderr.
231
+ process.stderr.write('READY\n');
232
+ }
233
+ // Only run when executed as a standalone script, not when imported as a module.
234
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
235
+ main().catch((err) => {
236
+ console.error('KB server fatal error:', err);
237
+ process.exit(1);
238
+ });
239
+ }
240
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/kb-server/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @module kb-server/tools/annotations
3
+ *
4
+ * MCP tool: return indexed source-code annotations by kind.
5
+ */
6
+ import type { Database } from '../db.js';
7
+ import { listAnnotations } from '../db.js';
8
+ export declare const toolDef: {
9
+ readonly name: "kb_annotations";
10
+ readonly description: "Return indexed annotations (TODO/FIXME/etc.) by kind, with optional file path filter and result limit.";
11
+ readonly inputSchema: {
12
+ readonly type: "object";
13
+ readonly properties: {
14
+ readonly kind: {
15
+ readonly type: "string";
16
+ readonly enum: readonly ["TODO", "FIXME", "HACK", "XXX", "NOTE", "BUG", "OPTIMIZE"];
17
+ readonly description: "Annotation kind/tag to filter by.";
18
+ };
19
+ readonly path: {
20
+ readonly type: "string";
21
+ readonly description: "Optional exact file path filter.";
22
+ };
23
+ readonly limit: {
24
+ readonly type: "number";
25
+ readonly description: "Maximum number of results to return (default 20).";
26
+ };
27
+ };
28
+ readonly required: readonly ["kind"];
29
+ };
30
+ };
31
+ export interface AnnotationsArgs {
32
+ kind: 'TODO' | 'FIXME' | 'HACK' | 'XXX' | 'NOTE' | 'BUG' | 'OPTIMIZE';
33
+ path?: string;
34
+ limit?: number;
35
+ }
36
+ export interface AnnotationsResult {
37
+ results: ReturnType<typeof listAnnotations>;
38
+ }
39
+ export declare function handler(db: Database.Database, args: AnnotationsArgs): AnnotationsResult;
40
+ //# sourceMappingURL=annotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/kb-server/tools/annotations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuBV,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;CAC7C;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAIvF"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @module kb-server/tools/annotations
3
+ *
4
+ * MCP tool: return indexed source-code annotations by kind.
5
+ */
6
+ import { listAnnotations } from '../db.js';
7
+ export const toolDef = {
8
+ name: 'kb_annotations',
9
+ description: 'Return indexed annotations (TODO/FIXME/etc.) by kind, with optional file path filter and result limit.',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ kind: {
14
+ type: 'string',
15
+ enum: ['TODO', 'FIXME', 'HACK', 'XXX', 'NOTE', 'BUG', 'OPTIMIZE'],
16
+ description: 'Annotation kind/tag to filter by.',
17
+ },
18
+ path: {
19
+ type: 'string',
20
+ description: 'Optional exact file path filter.',
21
+ },
22
+ limit: {
23
+ type: 'number',
24
+ description: 'Maximum number of results to return (default 20).',
25
+ },
26
+ },
27
+ required: ['kind'],
28
+ },
29
+ };
30
+ export function handler(db, args) {
31
+ return {
32
+ results: listAnnotations(db, args.kind, args.path, args.limit ?? 20),
33
+ };
34
+ }
35
+ //# sourceMappingURL=annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../../src/kb-server/tools/annotations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,wGAAwG;IAC1G,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;gBACjE,WAAW,EAAE,mCAAmC;aACjD;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACO,CAAC;AAYX,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAqB;IAClE,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @module kb-server/tools/architecture
3
+ *
4
+ * MCP tool: return a high-level architecture view grouped by path depth.
5
+ */
6
+ import type { Database } from '../db.js';
7
+ export declare const toolDef: {
8
+ readonly name: "kb_architecture";
9
+ readonly description: string;
10
+ readonly inputSchema: {
11
+ readonly type: "object";
12
+ readonly properties: {
13
+ readonly depth: {
14
+ readonly type: "number";
15
+ readonly description: "Optional path depth used to group files into components (default 2).";
16
+ };
17
+ readonly branch: {
18
+ readonly type: "string";
19
+ readonly description: "Optional branch name to filter architecture output.";
20
+ };
21
+ };
22
+ readonly required: readonly [];
23
+ };
24
+ };
25
+ export interface ArchitectureArgs {
26
+ depth?: number;
27
+ branch?: string;
28
+ }
29
+ export interface ArchitectureComponent {
30
+ component: string;
31
+ branch: string;
32
+ file_count: number;
33
+ symbol_count: number;
34
+ module_count: number;
35
+ }
36
+ export interface ArchitectureEdge {
37
+ source_component: string;
38
+ target_component: string;
39
+ branch: string;
40
+ edge_count: number;
41
+ }
42
+ export interface ArchitectureNode {
43
+ component: string;
44
+ branch: string;
45
+ }
46
+ export interface ArchitectureExternalDep {
47
+ component: string;
48
+ branch: string;
49
+ package: string;
50
+ file_count: number;
51
+ }
52
+ export interface ArchitectureResult {
53
+ components: ArchitectureComponent[];
54
+ edges: ArchitectureEdge[];
55
+ entry_points: ArchitectureNode[];
56
+ leaf_nodes: ArchitectureNode[];
57
+ external_deps: ArchitectureExternalDep[];
58
+ }
59
+ export declare function handler(db: Database.Database, args: ArchitectureArgs): ArchitectureResult;
60
+ //# sourceMappingURL=architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../../src/kb-server/tools/architecture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;CAmBV,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,aAAa,EAAE,uBAAuB,EAAE,CAAC;CAC1C;AAUD,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAsKzF"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @module kb-server/tools/architecture
3
+ *
4
+ * MCP tool: return a high-level architecture view grouped by path depth.
5
+ */
6
+ export const toolDef = {
7
+ name: 'kb_architecture',
8
+ description: 'Return an architecture overview grouped by path prefix, including component summaries, ' +
9
+ 'inter-component edges, entry points, leaf nodes, and external dependency usage.',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ depth: {
14
+ type: 'number',
15
+ description: 'Optional path depth used to group files into components (default 2).',
16
+ },
17
+ branch: {
18
+ type: 'string',
19
+ description: 'Optional branch name to filter architecture output.',
20
+ },
21
+ },
22
+ required: [],
23
+ },
24
+ };
25
+ function toComponent(path, depth) {
26
+ const parts = path.split('/').filter(Boolean);
27
+ if (parts.length === 0) {
28
+ return '.';
29
+ }
30
+ return parts.slice(0, depth).join('/');
31
+ }
32
+ export function handler(db, args) {
33
+ const depth = Math.max(1, Math.floor(args.depth ?? 2));
34
+ const fileRows = (args.branch !== undefined
35
+ ? db
36
+ .prepare(`SELECT f.id,
37
+ f.path,
38
+ f.branch,
39
+ COUNT(DISTINCT s.id) AS symbol_count,
40
+ COUNT(DISTINCT m.id) AS module_count
41
+ FROM files f
42
+ LEFT JOIN symbols s ON s.file_id = f.id
43
+ LEFT JOIN file_modules fm ON fm.file_id = f.id
44
+ LEFT JOIN modules m ON m.id = fm.module_id
45
+ WHERE f.branch = ?
46
+ GROUP BY f.id, f.path, f.branch`)
47
+ .all(args.branch)
48
+ : db
49
+ .prepare(`SELECT f.id,
50
+ f.path,
51
+ f.branch,
52
+ COUNT(DISTINCT s.id) AS symbol_count,
53
+ COUNT(DISTINCT m.id) AS module_count
54
+ FROM files f
55
+ LEFT JOIN symbols s ON s.file_id = f.id
56
+ LEFT JOIN file_modules fm ON fm.file_id = f.id
57
+ LEFT JOIN modules m ON m.id = fm.module_id
58
+ GROUP BY f.id, f.path, f.branch`)
59
+ .all());
60
+ const filesById = new Map(fileRows.map((row) => [row.id, row]));
61
+ const componentsMap = new Map();
62
+ for (const row of fileRows) {
63
+ const component = toComponent(row.path, depth);
64
+ const key = `${row.branch}\u0000${component}`;
65
+ const existing = componentsMap.get(key);
66
+ if (existing !== undefined) {
67
+ existing.file_count += 1;
68
+ existing.symbol_count += row.symbol_count;
69
+ existing.module_count += row.module_count;
70
+ continue;
71
+ }
72
+ componentsMap.set(key, {
73
+ component,
74
+ branch: row.branch,
75
+ file_count: 1,
76
+ symbol_count: row.symbol_count,
77
+ module_count: row.module_count,
78
+ });
79
+ }
80
+ const importRows = (args.branch !== undefined
81
+ ? db
82
+ .prepare(`SELECT fi.file_id, fi.resolved_id, f_src.branch
83
+ FROM file_imports fi
84
+ JOIN files f_src ON f_src.id = fi.file_id
85
+ WHERE f_src.branch = ?`)
86
+ .all(args.branch)
87
+ : db
88
+ .prepare(`SELECT fi.file_id, fi.resolved_id, f_src.branch
89
+ FROM file_imports fi
90
+ JOIN files f_src ON f_src.id = fi.file_id`)
91
+ .all());
92
+ const edgesMap = new Map();
93
+ const inboundByNode = new Map();
94
+ const outboundByNode = new Map();
95
+ for (const row of importRows) {
96
+ if (row.resolved_id === null) {
97
+ continue;
98
+ }
99
+ const srcFile = filesById.get(row.file_id);
100
+ const dstFile = filesById.get(row.resolved_id);
101
+ if (srcFile === undefined || dstFile === undefined || srcFile.branch !== dstFile.branch) {
102
+ continue;
103
+ }
104
+ const sourceComponent = toComponent(srcFile.path, depth);
105
+ const targetComponent = toComponent(dstFile.path, depth);
106
+ const edgeKey = `${row.branch}\u0000${sourceComponent}\u0000${targetComponent}`;
107
+ const existing = edgesMap.get(edgeKey);
108
+ if (existing !== undefined) {
109
+ existing.edge_count += 1;
110
+ }
111
+ else {
112
+ edgesMap.set(edgeKey, {
113
+ source_component: sourceComponent,
114
+ target_component: targetComponent,
115
+ branch: row.branch,
116
+ edge_count: 1,
117
+ });
118
+ }
119
+ const sourceNodeKey = `${row.branch}\u0000${sourceComponent}`;
120
+ const targetNodeKey = `${row.branch}\u0000${targetComponent}`;
121
+ outboundByNode.set(sourceNodeKey, (outboundByNode.get(sourceNodeKey) ?? 0) + 1);
122
+ inboundByNode.set(targetNodeKey, (inboundByNode.get(targetNodeKey) ?? 0) + 1);
123
+ }
124
+ const entryPoints = [];
125
+ const leafNodes = [];
126
+ for (const component of componentsMap.values()) {
127
+ const nodeKey = `${component.branch}\u0000${component.component}`;
128
+ if ((inboundByNode.get(nodeKey) ?? 0) === 0) {
129
+ entryPoints.push({ branch: component.branch, component: component.component });
130
+ }
131
+ if ((outboundByNode.get(nodeKey) ?? 0) === 0) {
132
+ leafNodes.push({ branch: component.branch, component: component.component });
133
+ }
134
+ }
135
+ const externalDepsRows = (args.branch !== undefined
136
+ ? db
137
+ .prepare(`SELECT f.path, f.branch, ed.package, COUNT(DISTINCT f.id) AS file_count
138
+ FROM external_deps ed
139
+ JOIN files f ON f.id = ed.file_id
140
+ WHERE f.branch = ?
141
+ GROUP BY f.path, f.branch, ed.package`)
142
+ .all(args.branch)
143
+ : db
144
+ .prepare(`SELECT f.path, f.branch, ed.package, COUNT(DISTINCT f.id) AS file_count
145
+ FROM external_deps ed
146
+ JOIN files f ON f.id = ed.file_id
147
+ GROUP BY f.path, f.branch, ed.package`)
148
+ .all());
149
+ const externalDepsMap = new Map();
150
+ for (const row of externalDepsRows) {
151
+ const component = toComponent(row.path, depth);
152
+ const depKey = `${row.branch}\u0000${component}\u0000${row.package}`;
153
+ const existing = externalDepsMap.get(depKey);
154
+ if (existing !== undefined) {
155
+ existing.file_count += row.file_count;
156
+ }
157
+ else {
158
+ externalDepsMap.set(depKey, {
159
+ component,
160
+ branch: row.branch,
161
+ package: row.package,
162
+ file_count: row.file_count,
163
+ });
164
+ }
165
+ }
166
+ return {
167
+ components: Array.from(componentsMap.values()),
168
+ edges: Array.from(edgesMap.values()),
169
+ entry_points: entryPoints,
170
+ leaf_nodes: leafNodes,
171
+ external_deps: Array.from(externalDepsMap.values()),
172
+ };
173
+ }
174
+ //# sourceMappingURL=architecture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../../src/kb-server/tools/architecture.ts"],"names":[],"mappings":"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"}