@vpxa/kb 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1140 -0
  3. package/bin/kb.mjs +10 -0
  4. package/package.json +67 -0
  5. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +23 -0
  6. package/packages/analyzers/dist/blast-radius-analyzer.js +114 -0
  7. package/packages/analyzers/dist/dependency-analyzer.d.ts +29 -0
  8. package/packages/analyzers/dist/dependency-analyzer.js +425 -0
  9. package/packages/analyzers/dist/diagram-generator.d.ts +13 -0
  10. package/packages/analyzers/dist/diagram-generator.js +86 -0
  11. package/packages/analyzers/dist/entry-point-analyzer.d.ts +19 -0
  12. package/packages/analyzers/dist/entry-point-analyzer.js +239 -0
  13. package/packages/analyzers/dist/index.d.ts +14 -0
  14. package/packages/analyzers/dist/index.js +23 -0
  15. package/packages/analyzers/dist/knowledge-producer.d.ts +32 -0
  16. package/packages/analyzers/dist/knowledge-producer.js +113 -0
  17. package/packages/analyzers/dist/pattern-analyzer.d.ts +12 -0
  18. package/packages/analyzers/dist/pattern-analyzer.js +359 -0
  19. package/packages/analyzers/dist/regex-call-graph.d.ts +17 -0
  20. package/packages/analyzers/dist/regex-call-graph.js +428 -0
  21. package/packages/analyzers/dist/structure-analyzer.d.ts +11 -0
  22. package/packages/analyzers/dist/structure-analyzer.js +258 -0
  23. package/packages/analyzers/dist/symbol-analyzer.d.ts +10 -0
  24. package/packages/analyzers/dist/symbol-analyzer.js +442 -0
  25. package/packages/analyzers/dist/ts-call-graph.d.ts +27 -0
  26. package/packages/analyzers/dist/ts-call-graph.js +160 -0
  27. package/packages/analyzers/dist/types.d.ts +98 -0
  28. package/packages/analyzers/dist/types.js +1 -0
  29. package/packages/chunker/dist/call-graph-extractor.d.ts +22 -0
  30. package/packages/chunker/dist/call-graph-extractor.js +90 -0
  31. package/packages/chunker/dist/chunker-factory.d.ts +7 -0
  32. package/packages/chunker/dist/chunker-factory.js +36 -0
  33. package/packages/chunker/dist/chunker.interface.d.ts +10 -0
  34. package/packages/chunker/dist/chunker.interface.js +1 -0
  35. package/packages/chunker/dist/code-chunker.d.ts +14 -0
  36. package/packages/chunker/dist/code-chunker.js +134 -0
  37. package/packages/chunker/dist/generic-chunker.d.ts +12 -0
  38. package/packages/chunker/dist/generic-chunker.js +72 -0
  39. package/packages/chunker/dist/index.d.ts +8 -0
  40. package/packages/chunker/dist/index.js +21 -0
  41. package/packages/chunker/dist/markdown-chunker.d.ts +14 -0
  42. package/packages/chunker/dist/markdown-chunker.js +122 -0
  43. package/packages/chunker/dist/treesitter-chunker.d.ts +47 -0
  44. package/packages/chunker/dist/treesitter-chunker.js +234 -0
  45. package/packages/cli/dist/commands/analyze.d.ts +3 -0
  46. package/packages/cli/dist/commands/analyze.js +112 -0
  47. package/packages/cli/dist/commands/context-cmds.d.ts +3 -0
  48. package/packages/cli/dist/commands/context-cmds.js +155 -0
  49. package/packages/cli/dist/commands/environment.d.ts +3 -0
  50. package/packages/cli/dist/commands/environment.js +204 -0
  51. package/packages/cli/dist/commands/execution.d.ts +3 -0
  52. package/packages/cli/dist/commands/execution.js +137 -0
  53. package/packages/cli/dist/commands/graph.d.ts +3 -0
  54. package/packages/cli/dist/commands/graph.js +81 -0
  55. package/packages/cli/dist/commands/init.d.ts +8 -0
  56. package/packages/cli/dist/commands/init.js +87 -0
  57. package/packages/cli/dist/commands/knowledge.d.ts +3 -0
  58. package/packages/cli/dist/commands/knowledge.js +139 -0
  59. package/packages/cli/dist/commands/search.d.ts +3 -0
  60. package/packages/cli/dist/commands/search.js +267 -0
  61. package/packages/cli/dist/commands/system.d.ts +3 -0
  62. package/packages/cli/dist/commands/system.js +241 -0
  63. package/packages/cli/dist/commands/workspace.d.ts +3 -0
  64. package/packages/cli/dist/commands/workspace.js +388 -0
  65. package/packages/cli/dist/context.d.ts +5 -0
  66. package/packages/cli/dist/context.js +14 -0
  67. package/packages/cli/dist/helpers.d.ts +52 -0
  68. package/packages/cli/dist/helpers.js +458 -0
  69. package/packages/cli/dist/index.d.ts +8 -0
  70. package/packages/cli/dist/index.js +69 -0
  71. package/packages/cli/dist/kb-init.d.ts +57 -0
  72. package/packages/cli/dist/kb-init.js +82 -0
  73. package/packages/cli/dist/types.d.ts +7 -0
  74. package/packages/cli/dist/types.js +1 -0
  75. package/packages/core/dist/constants.d.ts +49 -0
  76. package/packages/core/dist/constants.js +43 -0
  77. package/packages/core/dist/content-detector.d.ts +9 -0
  78. package/packages/core/dist/content-detector.js +79 -0
  79. package/packages/core/dist/errors.d.ts +18 -0
  80. package/packages/core/dist/errors.js +40 -0
  81. package/packages/core/dist/index.d.ts +6 -0
  82. package/packages/core/dist/index.js +9 -0
  83. package/packages/core/dist/logger.d.ts +9 -0
  84. package/packages/core/dist/logger.js +34 -0
  85. package/packages/core/dist/types.d.ts +108 -0
  86. package/packages/core/dist/types.js +1 -0
  87. package/packages/embeddings/dist/embedder.interface.d.ts +24 -0
  88. package/packages/embeddings/dist/embedder.interface.js +1 -0
  89. package/packages/embeddings/dist/index.d.ts +3 -0
  90. package/packages/embeddings/dist/index.js +5 -0
  91. package/packages/embeddings/dist/onnx-embedder.d.ts +24 -0
  92. package/packages/embeddings/dist/onnx-embedder.js +82 -0
  93. package/packages/indexer/dist/file-hasher.d.ts +11 -0
  94. package/packages/indexer/dist/file-hasher.js +13 -0
  95. package/packages/indexer/dist/filesystem-crawler.d.ts +27 -0
  96. package/packages/indexer/dist/filesystem-crawler.js +125 -0
  97. package/packages/indexer/dist/graph-extractor.d.ts +22 -0
  98. package/packages/indexer/dist/graph-extractor.js +111 -0
  99. package/packages/indexer/dist/incremental-indexer.d.ts +47 -0
  100. package/packages/indexer/dist/incremental-indexer.js +278 -0
  101. package/packages/indexer/dist/index.d.ts +5 -0
  102. package/packages/indexer/dist/index.js +14 -0
  103. package/packages/server/dist/api.d.ts +8 -0
  104. package/packages/server/dist/api.js +9 -0
  105. package/packages/server/dist/config.d.ts +3 -0
  106. package/packages/server/dist/config.js +75 -0
  107. package/packages/server/dist/curated-manager.d.ts +86 -0
  108. package/packages/server/dist/curated-manager.js +357 -0
  109. package/packages/server/dist/index.d.ts +2 -0
  110. package/packages/server/dist/index.js +134 -0
  111. package/packages/server/dist/replay-interceptor.d.ts +11 -0
  112. package/packages/server/dist/replay-interceptor.js +38 -0
  113. package/packages/server/dist/resources/resources.d.ts +4 -0
  114. package/packages/server/dist/resources/resources.js +40 -0
  115. package/packages/server/dist/server.d.ts +21 -0
  116. package/packages/server/dist/server.js +247 -0
  117. package/packages/server/dist/tools/analyze.tools.d.ts +11 -0
  118. package/packages/server/dist/tools/analyze.tools.js +288 -0
  119. package/packages/server/dist/tools/forge.tools.d.ts +12 -0
  120. package/packages/server/dist/tools/forge.tools.js +501 -0
  121. package/packages/server/dist/tools/forget.tool.d.ts +4 -0
  122. package/packages/server/dist/tools/forget.tool.js +43 -0
  123. package/packages/server/dist/tools/graph.tool.d.ts +4 -0
  124. package/packages/server/dist/tools/graph.tool.js +110 -0
  125. package/packages/server/dist/tools/list.tool.d.ts +4 -0
  126. package/packages/server/dist/tools/list.tool.js +56 -0
  127. package/packages/server/dist/tools/lookup.tool.d.ts +4 -0
  128. package/packages/server/dist/tools/lookup.tool.js +53 -0
  129. package/packages/server/dist/tools/onboard.tool.d.ts +5 -0
  130. package/packages/server/dist/tools/onboard.tool.js +112 -0
  131. package/packages/server/dist/tools/produce.tool.d.ts +3 -0
  132. package/packages/server/dist/tools/produce.tool.js +74 -0
  133. package/packages/server/dist/tools/read.tool.d.ts +4 -0
  134. package/packages/server/dist/tools/read.tool.js +49 -0
  135. package/packages/server/dist/tools/reindex.tool.d.ts +7 -0
  136. package/packages/server/dist/tools/reindex.tool.js +70 -0
  137. package/packages/server/dist/tools/remember.tool.d.ts +4 -0
  138. package/packages/server/dist/tools/remember.tool.js +45 -0
  139. package/packages/server/dist/tools/replay.tool.d.ts +3 -0
  140. package/packages/server/dist/tools/replay.tool.js +89 -0
  141. package/packages/server/dist/tools/search.tool.d.ts +5 -0
  142. package/packages/server/dist/tools/search.tool.js +331 -0
  143. package/packages/server/dist/tools/status.tool.d.ts +4 -0
  144. package/packages/server/dist/tools/status.tool.js +68 -0
  145. package/packages/server/dist/tools/toolkit.tools.d.ts +35 -0
  146. package/packages/server/dist/tools/toolkit.tools.js +1674 -0
  147. package/packages/server/dist/tools/update.tool.d.ts +4 -0
  148. package/packages/server/dist/tools/update.tool.js +42 -0
  149. package/packages/server/dist/tools/utility.tools.d.ts +15 -0
  150. package/packages/server/dist/tools/utility.tools.js +461 -0
  151. package/packages/store/dist/graph-store.interface.d.ts +104 -0
  152. package/packages/store/dist/graph-store.interface.js +1 -0
  153. package/packages/store/dist/index.d.ts +6 -0
  154. package/packages/store/dist/index.js +9 -0
  155. package/packages/store/dist/lance-store.d.ts +32 -0
  156. package/packages/store/dist/lance-store.js +258 -0
  157. package/packages/store/dist/sqlite-graph-store.d.ts +43 -0
  158. package/packages/store/dist/sqlite-graph-store.js +374 -0
  159. package/packages/store/dist/store-factory.d.ts +9 -0
  160. package/packages/store/dist/store-factory.js +14 -0
  161. package/packages/store/dist/store.interface.d.ts +48 -0
  162. package/packages/store/dist/store.interface.js +1 -0
  163. package/packages/tools/dist/batch.d.ts +21 -0
  164. package/packages/tools/dist/batch.js +45 -0
  165. package/packages/tools/dist/changelog.d.ts +34 -0
  166. package/packages/tools/dist/changelog.js +112 -0
  167. package/packages/tools/dist/check.d.ts +26 -0
  168. package/packages/tools/dist/check.js +59 -0
  169. package/packages/tools/dist/checkpoint.d.ts +17 -0
  170. package/packages/tools/dist/checkpoint.js +43 -0
  171. package/packages/tools/dist/codemod.d.ts +37 -0
  172. package/packages/tools/dist/codemod.js +69 -0
  173. package/packages/tools/dist/compact.d.ts +41 -0
  174. package/packages/tools/dist/compact.js +60 -0
  175. package/packages/tools/dist/data-transform.d.ts +10 -0
  176. package/packages/tools/dist/data-transform.js +124 -0
  177. package/packages/tools/dist/dead-symbols.d.ts +21 -0
  178. package/packages/tools/dist/dead-symbols.js +71 -0
  179. package/packages/tools/dist/delegate.d.ts +34 -0
  180. package/packages/tools/dist/delegate.js +130 -0
  181. package/packages/tools/dist/diff-parse.d.ts +26 -0
  182. package/packages/tools/dist/diff-parse.js +153 -0
  183. package/packages/tools/dist/digest.d.ts +53 -0
  184. package/packages/tools/dist/digest.js +242 -0
  185. package/packages/tools/dist/encode.d.ts +14 -0
  186. package/packages/tools/dist/encode.js +46 -0
  187. package/packages/tools/dist/env-info.d.ts +28 -0
  188. package/packages/tools/dist/env-info.js +58 -0
  189. package/packages/tools/dist/eval.d.ts +13 -0
  190. package/packages/tools/dist/eval.js +79 -0
  191. package/packages/tools/dist/evidence-map.d.ts +79 -0
  192. package/packages/tools/dist/evidence-map.js +203 -0
  193. package/packages/tools/dist/file-summary.d.ts +32 -0
  194. package/packages/tools/dist/file-summary.js +106 -0
  195. package/packages/tools/dist/file-walk.d.ts +4 -0
  196. package/packages/tools/dist/file-walk.js +75 -0
  197. package/packages/tools/dist/find-examples.d.ts +25 -0
  198. package/packages/tools/dist/find-examples.js +48 -0
  199. package/packages/tools/dist/find.d.ts +47 -0
  200. package/packages/tools/dist/find.js +120 -0
  201. package/packages/tools/dist/forge-classify.d.ts +44 -0
  202. package/packages/tools/dist/forge-classify.js +319 -0
  203. package/packages/tools/dist/forge-ground.d.ts +64 -0
  204. package/packages/tools/dist/forge-ground.js +184 -0
  205. package/packages/tools/dist/git-context.d.ts +22 -0
  206. package/packages/tools/dist/git-context.js +46 -0
  207. package/packages/tools/dist/graph-query.d.ts +89 -0
  208. package/packages/tools/dist/graph-query.js +194 -0
  209. package/packages/tools/dist/health.d.ts +14 -0
  210. package/packages/tools/dist/health.js +118 -0
  211. package/packages/tools/dist/http-request.d.ts +23 -0
  212. package/packages/tools/dist/http-request.js +58 -0
  213. package/packages/tools/dist/index.d.ts +49 -0
  214. package/packages/tools/dist/index.js +273 -0
  215. package/packages/tools/dist/lane.d.ts +39 -0
  216. package/packages/tools/dist/lane.js +227 -0
  217. package/packages/tools/dist/measure.d.ts +38 -0
  218. package/packages/tools/dist/measure.js +119 -0
  219. package/packages/tools/dist/onboard.d.ts +41 -0
  220. package/packages/tools/dist/onboard.js +1139 -0
  221. package/packages/tools/dist/parse-output.d.ts +80 -0
  222. package/packages/tools/dist/parse-output.js +158 -0
  223. package/packages/tools/dist/process-manager.d.ts +18 -0
  224. package/packages/tools/dist/process-manager.js +69 -0
  225. package/packages/tools/dist/queue.d.ts +38 -0
  226. package/packages/tools/dist/queue.js +126 -0
  227. package/packages/tools/dist/regex-test.d.ts +31 -0
  228. package/packages/tools/dist/regex-test.js +39 -0
  229. package/packages/tools/dist/rename.d.ts +29 -0
  230. package/packages/tools/dist/rename.js +70 -0
  231. package/packages/tools/dist/replay.d.ts +56 -0
  232. package/packages/tools/dist/replay.js +108 -0
  233. package/packages/tools/dist/schema-validate.d.ts +23 -0
  234. package/packages/tools/dist/schema-validate.js +141 -0
  235. package/packages/tools/dist/scope-map.d.ts +52 -0
  236. package/packages/tools/dist/scope-map.js +72 -0
  237. package/packages/tools/dist/snippet.d.ts +34 -0
  238. package/packages/tools/dist/snippet.js +80 -0
  239. package/packages/tools/dist/stash.d.ts +12 -0
  240. package/packages/tools/dist/stash.js +60 -0
  241. package/packages/tools/dist/stratum-card.d.ts +31 -0
  242. package/packages/tools/dist/stratum-card.js +239 -0
  243. package/packages/tools/dist/symbol.d.ts +28 -0
  244. package/packages/tools/dist/symbol.js +87 -0
  245. package/packages/tools/dist/test-run.d.ts +23 -0
  246. package/packages/tools/dist/test-run.js +55 -0
  247. package/packages/tools/dist/text-utils.d.ts +16 -0
  248. package/packages/tools/dist/text-utils.js +31 -0
  249. package/packages/tools/dist/time-utils.d.ts +18 -0
  250. package/packages/tools/dist/time-utils.js +135 -0
  251. package/packages/tools/dist/trace.d.ts +24 -0
  252. package/packages/tools/dist/trace.js +114 -0
  253. package/packages/tools/dist/truncation.d.ts +22 -0
  254. package/packages/tools/dist/truncation.js +45 -0
  255. package/packages/tools/dist/watch.d.ts +30 -0
  256. package/packages/tools/dist/watch.js +61 -0
  257. package/packages/tools/dist/web-fetch.d.ts +45 -0
  258. package/packages/tools/dist/web-fetch.js +249 -0
  259. package/packages/tools/dist/web-search.d.ts +23 -0
  260. package/packages/tools/dist/web-search.js +46 -0
  261. package/packages/tools/dist/workset.d.ts +45 -0
  262. package/packages/tools/dist/workset.js +77 -0
  263. package/packages/tui/dist/App.d.ts +8 -0
  264. package/packages/tui/dist/App.js +52659 -0
  265. package/packages/tui/dist/index.d.ts +19 -0
  266. package/packages/tui/dist/index.js +54742 -0
  267. package/packages/tui/dist/panels/CuratedPanel.d.ts +8 -0
  268. package/packages/tui/dist/panels/CuratedPanel.js +34452 -0
  269. package/packages/tui/dist/panels/LogPanel.d.ts +3 -0
  270. package/packages/tui/dist/panels/LogPanel.js +51894 -0
  271. package/packages/tui/dist/panels/SearchPanel.d.ts +10 -0
  272. package/packages/tui/dist/panels/SearchPanel.js +34985 -0
  273. package/packages/tui/dist/panels/StatusPanel.d.ts +8 -0
  274. package/packages/tui/dist/panels/StatusPanel.js +34465 -0
  275. package/skills/knowledge-base/SKILL.md +316 -0
@@ -0,0 +1,38 @@
1
+ import { replayAppend } from "@kb/tools";
2
+ function installReplayInterceptor(server) {
3
+ const original = server.registerTool.bind(server);
4
+ server.registerTool = (name, config, handler) => {
5
+ const wrappedHandler = async (args, extra) => {
6
+ const start = Date.now();
7
+ try {
8
+ const result = await handler(args, extra);
9
+ replayAppend({
10
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
11
+ source: "mcp",
12
+ tool: name,
13
+ input: JSON.stringify(args),
14
+ durationMs: Date.now() - start,
15
+ status: "ok",
16
+ output: JSON.stringify(result).slice(0, 200)
17
+ });
18
+ return result;
19
+ } catch (err) {
20
+ replayAppend({
21
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
22
+ source: "mcp",
23
+ tool: name,
24
+ input: JSON.stringify(args),
25
+ durationMs: Date.now() - start,
26
+ status: "error",
27
+ output: err instanceof Error ? err.message : String(err)
28
+ });
29
+ throw err;
30
+ }
31
+ };
32
+ return original(name, config, wrappedHandler);
33
+ };
34
+ }
35
+ export {
36
+ installReplayInterceptor
37
+ };
38
+ //# sourceMappingURL=replay-interceptor.js.map
@@ -0,0 +1,4 @@
1
+ import type { IKnowledgeStore } from '@kb/store';
2
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export declare function registerResources(server: McpServer, store: IKnowledgeStore): void;
4
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1,40 @@
1
+ function registerResources(server, store) {
2
+ server.resource(
3
+ "kb-status",
4
+ "kb://status",
5
+ { description: "Current knowledge base status and statistics", mimeType: "text/plain" },
6
+ async () => {
7
+ const stats = await store.getStats();
8
+ return {
9
+ contents: [
10
+ {
11
+ uri: "kb://status",
12
+ text: `Knowledge Base: ${stats.totalRecords} records from ${stats.totalFiles} files. Last indexed: ${stats.lastIndexedAt ?? "Never"}`,
13
+ mimeType: "text/plain"
14
+ }
15
+ ]
16
+ };
17
+ }
18
+ );
19
+ server.resource(
20
+ "kb-file-tree",
21
+ "kb://file-tree",
22
+ { description: "List of all indexed source files", mimeType: "text/plain" },
23
+ async () => {
24
+ const paths = await store.listSourcePaths();
25
+ return {
26
+ contents: [
27
+ {
28
+ uri: "kb://file-tree",
29
+ text: paths.sort().join("\n"),
30
+ mimeType: "text/plain"
31
+ }
32
+ ]
33
+ };
34
+ }
35
+ );
36
+ }
37
+ export {
38
+ registerResources
39
+ };
40
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1,21 @@
1
+ import type { KBConfig } from '@kb/core';
2
+ import { OnnxEmbedder } from '@kb/embeddings';
3
+ import { IncrementalIndexer } from '@kb/indexer';
4
+ import type { IGraphStore } from '@kb/store';
5
+ import { createStore } from '@kb/store';
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { CuratedKnowledgeManager } from './curated-manager.js';
8
+ export interface KnowledgeBaseComponents {
9
+ embedder: OnnxEmbedder;
10
+ store: Awaited<ReturnType<typeof createStore>>;
11
+ indexer: IncrementalIndexer;
12
+ curated: CuratedKnowledgeManager;
13
+ graphStore: IGraphStore;
14
+ }
15
+ export declare function initializeKnowledgeBase(config: KBConfig): Promise<KnowledgeBaseComponents>;
16
+ export declare function createMcpServer(kb: KnowledgeBaseComponents, config: KBConfig): McpServer;
17
+ export declare function createServer(config: KBConfig): Promise<{
18
+ server: McpServer;
19
+ runInitialIndex: () => Promise<void>;
20
+ }>;
21
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1,247 @@
1
+ import { initializeTreeSitter } from "@kb/chunker";
2
+ import { OnnxEmbedder } from "@kb/embeddings";
3
+ import { IncrementalIndexer } from "@kb/indexer";
4
+ import { createStore, SqliteGraphStore } from "@kb/store";
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import { CuratedKnowledgeManager } from "./curated-manager.js";
7
+ import { installReplayInterceptor } from "./replay-interceptor.js";
8
+ import { registerResources } from "./resources/resources.js";
9
+ import {
10
+ registerAnalyzeDependenciesTool,
11
+ registerAnalyzeDiagramTool,
12
+ registerAnalyzeEntryPointsTool,
13
+ registerAnalyzePatternsTool,
14
+ registerAnalyzeStructureTool,
15
+ registerAnalyzeSymbolsTool,
16
+ registerBlastRadiusTool
17
+ } from "./tools/analyze.tools.js";
18
+ import {
19
+ registerDigestTool,
20
+ registerEvidenceMapTool,
21
+ registerForgeClassifyTool,
22
+ registerForgeGroundTool,
23
+ registerStratumCardTool
24
+ } from "./tools/forge.tools.js";
25
+ import { registerForgetTool } from "./tools/forget.tool.js";
26
+ import { registerGraphTool } from "./tools/graph.tool.js";
27
+ import { registerListTool } from "./tools/list.tool.js";
28
+ import { registerLookupTool } from "./tools/lookup.tool.js";
29
+ import { registerOnboardTool } from "./tools/onboard.tool.js";
30
+ import { registerProduceKnowledgeTool } from "./tools/produce.tool.js";
31
+ import { registerReadTool } from "./tools/read.tool.js";
32
+ import { registerReindexTool } from "./tools/reindex.tool.js";
33
+ import { registerRememberTool } from "./tools/remember.tool.js";
34
+ import { registerReplayTool } from "./tools/replay.tool.js";
35
+ import { registerSearchTool } from "./tools/search.tool.js";
36
+ import { registerStatusTool } from "./tools/status.tool.js";
37
+ import {
38
+ registerBatchTool,
39
+ registerCheckpointTool,
40
+ registerCheckTool,
41
+ registerCodemodTool,
42
+ registerCompactTool,
43
+ registerDataTransformTool,
44
+ registerDeadSymbolsTool,
45
+ registerDelegateTool,
46
+ registerDiffParseTool,
47
+ registerEvalTool,
48
+ registerFileSummaryTool,
49
+ registerFindExamplesTool,
50
+ registerFindTool,
51
+ registerGitContextTool,
52
+ registerHealthTool,
53
+ registerLaneTool,
54
+ registerParseOutputTool,
55
+ registerProcessTool,
56
+ registerQueueTool,
57
+ registerRenameTool,
58
+ registerScopeMapTool,
59
+ registerStashTool,
60
+ registerSymbolTool,
61
+ registerTestRunTool,
62
+ registerTraceTool,
63
+ registerWatchTool,
64
+ registerWebFetchTool,
65
+ registerWorksetTool
66
+ } from "./tools/toolkit.tools.js";
67
+ import { registerUpdateTool } from "./tools/update.tool.js";
68
+ import {
69
+ registerChangelogTool,
70
+ registerEncodeTool,
71
+ registerEnvTool,
72
+ registerHttpTool,
73
+ registerMeasureTool,
74
+ registerRegexTestTool,
75
+ registerSchemaValidateTool,
76
+ registerSnippetTool,
77
+ registerTimeTool,
78
+ registerWebSearchTool
79
+ } from "./tools/utility.tools.js";
80
+ async function initializeKnowledgeBase(config) {
81
+ console.error("[KB] Initializing knowledge base components...");
82
+ const embedder = new OnnxEmbedder({
83
+ model: config.embedding.model,
84
+ dimensions: config.embedding.dimensions
85
+ });
86
+ await embedder.initialize();
87
+ console.error(`[KB] Embedder loaded: ${embedder.modelId} (${embedder.dimensions}d)`);
88
+ const store = await createStore({
89
+ backend: config.store.backend,
90
+ path: config.store.path
91
+ });
92
+ await store.initialize();
93
+ console.error("[KB] Store initialized");
94
+ const indexer = new IncrementalIndexer(embedder, store);
95
+ const curatedDir = config.curated.path;
96
+ const curated = new CuratedKnowledgeManager(curatedDir, store, embedder);
97
+ const graphStore = new SqliteGraphStore({ path: config.store.path });
98
+ await graphStore.initialize();
99
+ console.error("[KB] Graph store initialized");
100
+ indexer.setGraphStore(graphStore);
101
+ const treeSitterAvailable = await initializeTreeSitter();
102
+ if (treeSitterAvailable) {
103
+ console.error("[KB] Tree-sitter chunking enabled");
104
+ } else {
105
+ console.error("[KB] Tree-sitter not available \u2014 using regex-based code chunking");
106
+ }
107
+ return { embedder, store, indexer, curated, graphStore };
108
+ }
109
+ function createMcpServer(kb, config) {
110
+ const server = new McpServer({
111
+ name: "kb",
112
+ version: "0.1.0"
113
+ });
114
+ installReplayInterceptor(server);
115
+ registerSearchTool(server, kb.embedder, kb.store, kb.graphStore);
116
+ registerLookupTool(server, kb.store);
117
+ registerStatusTool(server, kb.store, kb.graphStore);
118
+ registerReindexTool(server, kb.indexer, config, kb.curated, kb.store);
119
+ registerRememberTool(server, kb.curated);
120
+ registerUpdateTool(server, kb.curated);
121
+ registerForgetTool(server, kb.curated);
122
+ registerReadTool(server, kb.curated);
123
+ registerListTool(server, kb.curated);
124
+ registerAnalyzeStructureTool(server, kb.store, kb.embedder);
125
+ registerAnalyzeDependenciesTool(server, kb.store, kb.embedder);
126
+ registerAnalyzeSymbolsTool(server, kb.store, kb.embedder);
127
+ registerAnalyzePatternsTool(server, kb.store, kb.embedder);
128
+ registerAnalyzeEntryPointsTool(server, kb.store, kb.embedder);
129
+ registerAnalyzeDiagramTool(server, kb.store, kb.embedder);
130
+ registerBlastRadiusTool(server, kb.store, kb.embedder);
131
+ registerProduceKnowledgeTool(server);
132
+ registerOnboardTool(server, kb.store, kb.embedder);
133
+ registerGraphTool(server, kb.graphStore);
134
+ registerCompactTool(server, kb.embedder);
135
+ registerScopeMapTool(server, kb.embedder, kb.store);
136
+ registerFindTool(server, kb.embedder, kb.store);
137
+ registerParseOutputTool(server);
138
+ registerWorksetTool(server);
139
+ registerCheckTool(server);
140
+ registerBatchTool(server, kb.embedder, kb.store);
141
+ registerSymbolTool(server, kb.embedder, kb.store);
142
+ registerEvalTool(server);
143
+ registerTestRunTool(server);
144
+ registerStashTool(server);
145
+ registerGitContextTool(server);
146
+ registerDiffParseTool(server);
147
+ registerRenameTool(server);
148
+ registerCodemodTool(server);
149
+ registerFileSummaryTool(server);
150
+ registerCheckpointTool(server);
151
+ registerDataTransformTool(server);
152
+ registerTraceTool(server, kb.embedder, kb.store);
153
+ registerFindExamplesTool(server, kb.embedder, kb.store);
154
+ registerProcessTool(server);
155
+ registerWatchTool(server);
156
+ registerDeadSymbolsTool(server, kb.embedder, kb.store);
157
+ registerDelegateTool(server);
158
+ registerHealthTool(server);
159
+ registerLaneTool(server);
160
+ registerQueueTool(server);
161
+ registerWebFetchTool(server);
162
+ registerEvidenceMapTool(server);
163
+ registerDigestTool(server, kb.embedder);
164
+ registerForgeClassifyTool(server);
165
+ registerStratumCardTool(server, kb.embedder);
166
+ registerForgeGroundTool(server, kb.embedder, kb.store);
167
+ registerWebSearchTool(server);
168
+ registerHttpTool(server);
169
+ registerRegexTestTool(server);
170
+ registerEncodeTool(server);
171
+ registerMeasureTool(server);
172
+ registerChangelogTool(server);
173
+ registerSchemaValidateTool(server);
174
+ registerSnippetTool(server);
175
+ registerEnvTool(server);
176
+ registerTimeTool(server);
177
+ registerResources(server, kb.store);
178
+ registerReplayTool(server);
179
+ return server;
180
+ }
181
+ async function createServer(config) {
182
+ const kb = await initializeKnowledgeBase(config);
183
+ const server = createMcpServer(kb, config);
184
+ console.error("[KB] MCP server configured with 64 tools and 2 resources");
185
+ const runInitialIndex = async () => {
186
+ try {
187
+ const sourcePaths = config.sources.map((s) => s.path).join(", ");
188
+ console.error(`[KB] Running initial index for sources: ${sourcePaths}`);
189
+ const result = await kb.indexer.index(config, (p) => {
190
+ if (p.phase === "crawling" || p.phase === "done") return;
191
+ if (p.phase === "chunking" && p.currentFile) {
192
+ console.error(`[KB] [${p.filesProcessed + 1}/${p.filesTotal}] ${p.currentFile}`);
193
+ }
194
+ if (p.phase === "cleanup") {
195
+ console.error(
196
+ `[KB] cleanup: removing ${p.filesTotal - p.filesProcessed} stale entries`
197
+ );
198
+ }
199
+ });
200
+ console.error(
201
+ `[KB] Indexed ${result.filesProcessed} files (${result.filesSkipped} skipped, ${result.chunksCreated} chunks) in ${(result.durationMs / 1e3).toFixed(1)}s`
202
+ );
203
+ try {
204
+ await kb.store.createFtsIndex();
205
+ } catch (ftsErr) {
206
+ console.error("[KB] FTS index creation failed (non-fatal):", ftsErr);
207
+ }
208
+ try {
209
+ const curatedResult = await kb.curated.reindexAll();
210
+ console.error(
211
+ `[KB] Curated re-index: ${curatedResult.indexed} entries restored to vector store`
212
+ );
213
+ } catch (curatedErr) {
214
+ console.error("[KB] Curated re-index failed:", curatedErr);
215
+ }
216
+ } catch (err) {
217
+ console.error("[KB] Initial index failed (will retry on kb_reindex):", err);
218
+ }
219
+ };
220
+ const shutdown = async () => {
221
+ console.error("[KB] Shutting down...");
222
+ await kb.graphStore.close().catch(() => {
223
+ });
224
+ await kb.store.close();
225
+ process.exit(0);
226
+ };
227
+ process.on("SIGINT", shutdown);
228
+ process.on("SIGTERM", shutdown);
229
+ const originalPpid = process.ppid;
230
+ const ppidCheck = setInterval(() => {
231
+ try {
232
+ process.kill(originalPpid, 0);
233
+ } catch {
234
+ console.error("[KB] Parent process died \u2014 orphan detected, shutting down...");
235
+ clearInterval(ppidCheck);
236
+ shutdown();
237
+ }
238
+ }, 5e3);
239
+ ppidCheck.unref();
240
+ return { server, runInitialIndex };
241
+ }
242
+ export {
243
+ createMcpServer,
244
+ createServer,
245
+ initializeKnowledgeBase
246
+ };
247
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,11 @@
1
+ import type { IEmbedder } from '@kb/embeddings';
2
+ import type { IKnowledgeStore } from '@kb/store';
3
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
+ export declare function registerAnalyzeStructureTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
5
+ export declare function registerAnalyzeDependenciesTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
6
+ export declare function registerAnalyzeSymbolsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
7
+ export declare function registerAnalyzePatternsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
8
+ export declare function registerAnalyzeEntryPointsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
9
+ export declare function registerAnalyzeDiagramTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
10
+ export declare function registerBlastRadiusTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
11
+ //# sourceMappingURL=analyze.tools.d.ts.map
@@ -0,0 +1,288 @@
1
+ import { createHash } from "node:crypto";
2
+ import {
3
+ BlastRadiusAnalyzer,
4
+ DependencyAnalyzer,
5
+ DiagramGenerator,
6
+ EntryPointAnalyzer,
7
+ PatternAnalyzer,
8
+ StructureAnalyzer,
9
+ SymbolAnalyzer
10
+ } from "@kb/analyzers";
11
+ import { z } from "zod";
12
+ async function persistAnalysisResult(store, embedder, analyzerName, rootPath, output) {
13
+ try {
14
+ const pathHash = createHash("sha256").update(rootPath).digest("hex").slice(0, 12);
15
+ const sourcePath = `produced/analysis/${analyzerName}/${pathHash}.md`;
16
+ const contentHash = createHash("sha256").update(output).digest("hex").slice(0, 16);
17
+ const now = (/* @__PURE__ */ new Date()).toISOString();
18
+ const sections = output.length > 2e3 ? output.split(/(?=^## )/m).filter((s) => s.trim().length > 0) : [output];
19
+ const records = sections.map((text, i) => ({
20
+ id: createHash("sha256").update(`${sourcePath}::${i}`).digest("hex").slice(0, 16),
21
+ content: text.trim(),
22
+ sourcePath,
23
+ contentType: "produced-knowledge",
24
+ chunkIndex: i,
25
+ totalChunks: sections.length,
26
+ startLine: 0,
27
+ endLine: 0,
28
+ fileHash: contentHash,
29
+ indexedAt: now,
30
+ origin: "produced",
31
+ tags: ["analysis", analyzerName],
32
+ category: "analysis",
33
+ version: 1
34
+ }));
35
+ const vectors = await embedder.embedBatch(records.map((r) => r.content));
36
+ await store.upsert(records, vectors);
37
+ console.error(`[KB] Auto-persisted ${analyzerName} analysis (${records.length} chunks)`);
38
+ } catch (err) {
39
+ console.error(`[KB] Auto-persist ${analyzerName} failed:`, err);
40
+ }
41
+ }
42
+ function registerAnalyzeStructureTool(server, store, embedder) {
43
+ const analyzer = new StructureAnalyzer();
44
+ server.registerTool(
45
+ "analyze_structure",
46
+ {
47
+ description: "Analyze the file/directory structure of a codebase. Returns an annotated tree with language stats.",
48
+ inputSchema: {
49
+ path: z.string().describe("Root path to analyze"),
50
+ max_depth: z.number().min(1).max(10).default(6).describe("Maximum directory depth"),
51
+ format: z.enum(["json", "markdown"]).default("markdown").describe("Output format")
52
+ }
53
+ },
54
+ async ({ path, max_depth, format }) => {
55
+ try {
56
+ const result = await analyzer.analyze(path, { format, maxDepth: max_depth });
57
+ persistAnalysisResult(store, embedder, "structure", path, result.output);
58
+ return {
59
+ content: [
60
+ {
61
+ type: "text",
62
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` for import graphs, or `analyze_patterns` to detect architecture patterns._"
63
+ }
64
+ ]
65
+ };
66
+ } catch (err) {
67
+ return {
68
+ content: [{ type: "text", text: `Analysis failed: ${err.message}` }],
69
+ isError: true
70
+ };
71
+ }
72
+ }
73
+ );
74
+ }
75
+ function registerAnalyzeDependenciesTool(server, store, embedder) {
76
+ const analyzer = new DependencyAnalyzer();
77
+ server.registerTool(
78
+ "analyze_dependencies",
79
+ {
80
+ description: "Analyze import/require dependencies across a codebase. Shows external packages and internal module graph.",
81
+ inputSchema: {
82
+ path: z.string().describe("Root path to analyze"),
83
+ format: z.enum(["json", "markdown", "mermaid"]).default("markdown").describe("Output format")
84
+ }
85
+ },
86
+ async ({ path, format }) => {
87
+ try {
88
+ const result = await analyzer.analyze(path, { format });
89
+ persistAnalysisResult(store, embedder, "dependencies", path, result.output);
90
+ return {
91
+ content: [
92
+ {
93
+ type: "text",
94
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_symbols` to explore exported symbols, or `analyze_diagram` for visual representation._"
95
+ }
96
+ ]
97
+ };
98
+ } catch (err) {
99
+ return {
100
+ content: [{ type: "text", text: `Analysis failed: ${err.message}` }],
101
+ isError: true
102
+ };
103
+ }
104
+ }
105
+ );
106
+ }
107
+ function registerAnalyzeSymbolsTool(server, store, embedder) {
108
+ const analyzer = new SymbolAnalyzer();
109
+ server.registerTool(
110
+ "analyze_symbols",
111
+ {
112
+ description: "Extract exported and local symbols (functions, classes, interfaces, types, constants) from a codebase.",
113
+ inputSchema: {
114
+ path: z.string().describe("Root path to analyze"),
115
+ filter: z.string().optional().describe("Filter symbols by name substring"),
116
+ format: z.enum(["json", "markdown"]).default("markdown").describe("Output format")
117
+ }
118
+ },
119
+ async ({ path, filter, format }) => {
120
+ try {
121
+ const result = await analyzer.analyze(path, { format, filter });
122
+ persistAnalysisResult(store, embedder, "symbols", path, result.output);
123
+ return {
124
+ content: [
125
+ {
126
+ type: "text",
127
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see import relationships, or `search` to find usage patterns._"
128
+ }
129
+ ]
130
+ };
131
+ } catch (err) {
132
+ return {
133
+ content: [{ type: "text", text: `Analysis failed: ${err.message}` }],
134
+ isError: true
135
+ };
136
+ }
137
+ }
138
+ );
139
+ }
140
+ function registerAnalyzePatternsTool(server, store, embedder) {
141
+ const analyzer = new PatternAnalyzer();
142
+ server.registerTool(
143
+ "analyze_patterns",
144
+ {
145
+ description: "Detect architectural patterns, frameworks, and conventions in a codebase using directory structure and code heuristics.",
146
+ inputSchema: {
147
+ path: z.string().describe("Root path to analyze")
148
+ }
149
+ },
150
+ async ({ path }) => {
151
+ try {
152
+ const result = await analyzer.analyze(path);
153
+ persistAnalysisResult(store, embedder, "patterns", path, result.output);
154
+ return {
155
+ content: [
156
+ {
157
+ type: "text",
158
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_entry_points` to find Lambda handlers and main exports, or `produce_knowledge` for full analysis._"
159
+ }
160
+ ]
161
+ };
162
+ } catch (err) {
163
+ return {
164
+ content: [{ type: "text", text: `Analysis failed: ${err.message}` }],
165
+ isError: true
166
+ };
167
+ }
168
+ }
169
+ );
170
+ }
171
+ function registerAnalyzeEntryPointsTool(server, store, embedder) {
172
+ const analyzer = new EntryPointAnalyzer();
173
+ server.registerTool(
174
+ "analyze_entry_points",
175
+ {
176
+ description: "Find entry points: Lambda handlers, main exports, CLI bins, and server start scripts.",
177
+ inputSchema: {
178
+ path: z.string().describe("Root path to analyze")
179
+ }
180
+ },
181
+ async ({ path }) => {
182
+ try {
183
+ const result = await analyzer.analyze(path);
184
+ persistAnalysisResult(store, embedder, "entry-points", path, result.output);
185
+ return {
186
+ content: [
187
+ {
188
+ type: "text",
189
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see what each entry point imports, or `produce_knowledge` for comprehensive analysis._"
190
+ }
191
+ ]
192
+ };
193
+ } catch (err) {
194
+ return {
195
+ content: [{ type: "text", text: `Analysis failed: ${err.message}` }],
196
+ isError: true
197
+ };
198
+ }
199
+ }
200
+ );
201
+ }
202
+ function registerAnalyzeDiagramTool(server, store, embedder) {
203
+ const generator = new DiagramGenerator();
204
+ server.registerTool(
205
+ "analyze_diagram",
206
+ {
207
+ description: "Generate a Mermaid diagram of the codebase architecture or dependency graph.",
208
+ inputSchema: {
209
+ path: z.string().describe("Root path to analyze"),
210
+ diagram_type: z.enum(["architecture", "dependencies"]).default("architecture").describe("Type of diagram")
211
+ }
212
+ },
213
+ async ({ path, diagram_type }) => {
214
+ try {
215
+ const result = await generator.analyze(path, { diagramType: diagram_type });
216
+ persistAnalysisResult(store, embedder, "diagram", path, result.output);
217
+ return {
218
+ content: [
219
+ {
220
+ type: "text",
221
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_structure` for detailed file tree, or `produce_knowledge` for comprehensive analysis._"
222
+ }
223
+ ]
224
+ };
225
+ } catch (err) {
226
+ return {
227
+ content: [
228
+ { type: "text", text: `Diagram generation failed: ${err.message}` }
229
+ ],
230
+ isError: true
231
+ };
232
+ }
233
+ }
234
+ );
235
+ }
236
+ function registerBlastRadiusTool(server, store, embedder) {
237
+ const analyzer = new BlastRadiusAnalyzer();
238
+ server.registerTool(
239
+ "blast_radius",
240
+ {
241
+ description: "Given a list of changed files, trace the dependency graph to find all affected files (direct + transitive importers) and their tests. Useful for scoping code reviews and impact analysis.",
242
+ inputSchema: {
243
+ path: z.string().describe("Root path of the codebase"),
244
+ files: z.array(z.string()).min(1).describe("Changed file paths (relative to root)"),
245
+ max_depth: z.number().min(1).max(20).default(5).describe("Maximum transitive dependency depth"),
246
+ format: z.enum(["json", "markdown"]).default("markdown").describe("Output format")
247
+ }
248
+ },
249
+ async ({ path, files, max_depth, format }) => {
250
+ try {
251
+ const result = await analyzer.analyze(path, {
252
+ files,
253
+ maxDepth: max_depth,
254
+ format
255
+ });
256
+ persistAnalysisResult(store, embedder, "blast-radius", path, result.output);
257
+ return {
258
+ content: [
259
+ {
260
+ type: "text",
261
+ text: result.output + "\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see the full import graph, or `analyze_symbols` to inspect affected exports._"
262
+ }
263
+ ]
264
+ };
265
+ } catch (err) {
266
+ return {
267
+ content: [
268
+ {
269
+ type: "text",
270
+ text: `Blast radius analysis failed: ${err.message}`
271
+ }
272
+ ],
273
+ isError: true
274
+ };
275
+ }
276
+ }
277
+ );
278
+ }
279
+ export {
280
+ registerAnalyzeDependenciesTool,
281
+ registerAnalyzeDiagramTool,
282
+ registerAnalyzeEntryPointsTool,
283
+ registerAnalyzePatternsTool,
284
+ registerAnalyzeStructureTool,
285
+ registerAnalyzeSymbolsTool,
286
+ registerBlastRadiusTool
287
+ };
288
+ //# sourceMappingURL=analyze.tools.js.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCP tool registrations for FORGE/STRATUM protocol tools.
3
+ */
4
+ import type { IEmbedder } from '@kb/embeddings';
5
+ import type { IKnowledgeStore } from '@kb/store';
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ export declare function registerEvidenceMapTool(server: McpServer): void;
8
+ export declare function registerDigestTool(server: McpServer, embedder: IEmbedder): void;
9
+ export declare function registerForgeClassifyTool(server: McpServer): void;
10
+ export declare function registerStratumCardTool(server: McpServer, embedder: IEmbedder): void;
11
+ export declare function registerForgeGroundTool(server: McpServer, embedder: IEmbedder, store: IKnowledgeStore): void;
12
+ //# sourceMappingURL=forge.tools.d.ts.map