@vpxa/kb 0.1.13 → 0.1.15

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 (383) hide show
  1. package/README.md +8 -2
  2. package/package.json +10 -7
  3. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -20
  4. package/packages/analyzers/dist/blast-radius-analyzer.js +6 -12
  5. package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -27
  6. package/packages/analyzers/dist/dependency-analyzer.js +7 -9
  7. package/packages/analyzers/dist/diagram-generator.d.ts +12 -8
  8. package/packages/analyzers/dist/diagram-generator.js +3 -4
  9. package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -35
  10. package/packages/analyzers/dist/entry-point-analyzer.js +5 -6
  11. package/packages/analyzers/dist/index.d.ts +12 -14
  12. package/packages/analyzers/dist/index.js +1 -1
  13. package/packages/analyzers/dist/knowledge-producer.d.ts +29 -25
  14. package/packages/analyzers/dist/knowledge-producer.js +16 -15
  15. package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -10
  16. package/packages/analyzers/dist/pattern-analyzer.js +3 -5
  17. package/packages/analyzers/dist/regex-call-graph.d.ts +6 -12
  18. package/packages/analyzers/dist/regex-call-graph.js +2 -1
  19. package/packages/analyzers/dist/structure-analyzer.d.ts +13 -9
  20. package/packages/analyzers/dist/structure-analyzer.js +3 -4
  21. package/packages/analyzers/dist/symbol-analyzer.d.ts +12 -8
  22. package/packages/analyzers/dist/symbol-analyzer.js +8 -13
  23. package/packages/analyzers/dist/ts-call-graph.d.ts +16 -13
  24. package/packages/analyzers/dist/ts-call-graph.js +2 -1
  25. package/packages/analyzers/dist/types.d.ts +82 -79
  26. package/packages/analyzers/dist/types.js +1 -0
  27. package/packages/chunker/dist/call-graph-extractor.d.ts +13 -10
  28. package/packages/chunker/dist/call-graph-extractor.js +2 -1
  29. package/packages/chunker/dist/chunker-factory.d.ts +6 -2
  30. package/packages/chunker/dist/chunker-factory.js +2 -1
  31. package/packages/chunker/dist/chunker.interface.d.ts +8 -4
  32. package/packages/chunker/dist/chunker.interface.js +1 -0
  33. package/packages/chunker/dist/code-chunker.d.ts +16 -12
  34. package/packages/chunker/dist/code-chunker.js +12 -14
  35. package/packages/chunker/dist/generic-chunker.d.ts +14 -10
  36. package/packages/chunker/dist/generic-chunker.js +6 -5
  37. package/packages/chunker/dist/index.d.ts +8 -8
  38. package/packages/chunker/dist/index.js +1 -1
  39. package/packages/chunker/dist/markdown-chunker.d.ts +16 -12
  40. package/packages/chunker/dist/markdown-chunker.js +4 -10
  41. package/packages/chunker/dist/treesitter-chunker.d.ts +28 -31
  42. package/packages/chunker/dist/treesitter-chunker.js +7 -8
  43. package/packages/cli/dist/commands/analyze.d.ts +6 -2
  44. package/packages/cli/dist/commands/analyze.js +3 -3
  45. package/packages/cli/dist/commands/context-cmds.d.ts +6 -2
  46. package/packages/cli/dist/commands/context-cmds.js +2 -1
  47. package/packages/cli/dist/commands/environment.d.ts +6 -2
  48. package/packages/cli/dist/commands/environment.js +2 -2
  49. package/packages/cli/dist/commands/execution.d.ts +6 -2
  50. package/packages/cli/dist/commands/execution.js +2 -1
  51. package/packages/cli/dist/commands/graph.d.ts +6 -2
  52. package/packages/cli/dist/commands/graph.js +6 -6
  53. package/packages/cli/dist/commands/init/adapters.d.ts +27 -0
  54. package/packages/cli/dist/commands/init/adapters.js +2 -0
  55. package/packages/cli/dist/commands/init/config.d.ts +11 -0
  56. package/packages/cli/dist/commands/init/config.js +4 -0
  57. package/packages/cli/dist/commands/init/curated.d.ts +8 -0
  58. package/packages/cli/dist/commands/init/curated.js +2 -0
  59. package/packages/cli/dist/commands/init/index.d.ts +23 -0
  60. package/packages/cli/dist/commands/init/index.js +3 -0
  61. package/packages/cli/dist/commands/init/scaffold.d.ts +24 -0
  62. package/packages/cli/dist/commands/init/scaffold.js +2 -0
  63. package/packages/cli/dist/commands/init/templates.d.ts +10 -0
  64. package/packages/cli/dist/commands/init/templates.js +302 -0
  65. package/packages/cli/dist/commands/init.d.ts +8 -3
  66. package/packages/cli/dist/commands/init.js +120 -123
  67. package/packages/cli/dist/commands/knowledge.d.ts +6 -2
  68. package/packages/cli/dist/commands/knowledge.js +2 -1
  69. package/packages/cli/dist/commands/search.d.ts +6 -2
  70. package/packages/cli/dist/commands/search.js +2 -8
  71. package/packages/cli/dist/commands/system.d.ts +6 -2
  72. package/packages/cli/dist/commands/system.js +5 -7
  73. package/packages/cli/dist/commands/workspace.d.ts +6 -2
  74. package/packages/cli/dist/commands/workspace.js +2 -2
  75. package/packages/cli/dist/context.d.ts +7 -4
  76. package/packages/cli/dist/context.js +2 -1
  77. package/packages/cli/dist/helpers.d.ts +51 -47
  78. package/packages/cli/dist/helpers.js +6 -5
  79. package/packages/cli/dist/index.d.ts +4 -1
  80. package/packages/cli/dist/index.js +3 -2
  81. package/packages/cli/dist/kb-init.d.ts +48 -50
  82. package/packages/cli/dist/kb-init.js +2 -1
  83. package/packages/cli/dist/types.d.ts +8 -5
  84. package/packages/cli/dist/types.js +1 -0
  85. package/packages/core/dist/constants.d.ts +36 -33
  86. package/packages/core/dist/constants.js +2 -1
  87. package/packages/core/dist/content-detector.d.ts +8 -7
  88. package/packages/core/dist/content-detector.js +2 -1
  89. package/packages/core/dist/errors.d.ts +15 -12
  90. package/packages/core/dist/errors.js +2 -1
  91. package/packages/core/dist/index.d.ts +6 -6
  92. package/packages/core/dist/index.js +1 -1
  93. package/packages/core/dist/logger.d.ts +16 -7
  94. package/packages/core/dist/logger.js +2 -1
  95. package/packages/core/dist/types.d.ts +107 -91
  96. package/packages/core/dist/types.js +2 -0
  97. package/packages/embeddings/dist/embedder.interface.d.ts +22 -19
  98. package/packages/embeddings/dist/embedder.interface.js +1 -0
  99. package/packages/embeddings/dist/index.d.ts +3 -3
  100. package/packages/embeddings/dist/index.js +1 -1
  101. package/packages/embeddings/dist/onnx-embedder.d.ts +21 -22
  102. package/packages/embeddings/dist/onnx-embedder.js +2 -1
  103. package/packages/enterprise-bridge/dist/cache.d.ts +29 -0
  104. package/packages/enterprise-bridge/dist/cache.js +2 -0
  105. package/packages/enterprise-bridge/dist/er-client.d.ts +38 -0
  106. package/packages/enterprise-bridge/dist/er-client.js +2 -0
  107. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +63 -0
  108. package/packages/enterprise-bridge/dist/evolution-collector.js +2 -0
  109. package/packages/enterprise-bridge/dist/index.d.ts +8 -0
  110. package/packages/enterprise-bridge/dist/index.js +1 -0
  111. package/packages/enterprise-bridge/dist/policy-store.d.ts +46 -0
  112. package/packages/enterprise-bridge/dist/policy-store.js +2 -0
  113. package/packages/enterprise-bridge/dist/push-adapter.d.ts +24 -0
  114. package/packages/enterprise-bridge/dist/push-adapter.js +2 -0
  115. package/packages/enterprise-bridge/dist/result-merger.d.ts +15 -0
  116. package/packages/enterprise-bridge/dist/result-merger.js +2 -0
  117. package/packages/enterprise-bridge/dist/types.d.ts +82 -0
  118. package/packages/enterprise-bridge/dist/types.js +2 -0
  119. package/packages/indexer/dist/file-hasher.d.ts +5 -2
  120. package/packages/indexer/dist/file-hasher.js +2 -1
  121. package/packages/indexer/dist/filesystem-crawler.d.ts +23 -20
  122. package/packages/indexer/dist/filesystem-crawler.js +2 -1
  123. package/packages/indexer/dist/graph-extractor.d.ts +9 -12
  124. package/packages/indexer/dist/graph-extractor.js +2 -1
  125. package/packages/indexer/dist/incremental-indexer.d.ts +49 -43
  126. package/packages/indexer/dist/incremental-indexer.js +2 -1
  127. package/packages/indexer/dist/index.d.ts +5 -5
  128. package/packages/indexer/dist/index.js +1 -1
  129. package/packages/server/dist/api.d.ts +3 -8
  130. package/packages/server/dist/api.js +1 -1
  131. package/packages/server/dist/config.d.ts +6 -2
  132. package/packages/server/dist/config.js +2 -1
  133. package/packages/server/dist/curated-manager.d.ts +79 -76
  134. package/packages/server/dist/curated-manager.js +6 -10
  135. package/packages/server/dist/index.d.ts +1 -2
  136. package/packages/server/dist/index.js +2 -1
  137. package/packages/server/dist/replay-interceptor.d.ts +6 -6
  138. package/packages/server/dist/replay-interceptor.js +2 -1
  139. package/packages/server/dist/resources/resources.d.ts +7 -3
  140. package/packages/server/dist/resources/resources.js +3 -2
  141. package/packages/server/dist/server.d.ts +34 -24
  142. package/packages/server/dist/server.js +2 -1
  143. package/packages/server/dist/tools/analyze.tools.d.ts +14 -10
  144. package/packages/server/dist/tools/analyze.tools.js +2 -3
  145. package/packages/server/dist/tools/audit.tool.d.ts +8 -4
  146. package/packages/server/dist/tools/audit.tool.js +2 -4
  147. package/packages/server/dist/tools/bridge.tools.d.ts +35 -0
  148. package/packages/server/dist/tools/bridge.tools.js +16 -0
  149. package/packages/server/dist/tools/evolution.tools.d.ts +8 -0
  150. package/packages/server/dist/tools/evolution.tools.js +6 -0
  151. package/packages/server/dist/tools/forge.tools.d.ts +13 -11
  152. package/packages/server/dist/tools/forge.tools.js +11 -13
  153. package/packages/server/dist/tools/forget.tool.d.ts +7 -3
  154. package/packages/server/dist/tools/forget.tool.js +2 -7
  155. package/packages/server/dist/tools/graph.tool.d.ts +7 -3
  156. package/packages/server/dist/tools/graph.tool.js +5 -5
  157. package/packages/server/dist/tools/list.tool.d.ts +7 -3
  158. package/packages/server/dist/tools/list.tool.js +3 -8
  159. package/packages/server/dist/tools/lookup.tool.d.ts +7 -3
  160. package/packages/server/dist/tools/lookup.tool.js +3 -9
  161. package/packages/server/dist/tools/onboard.tool.d.ts +8 -4
  162. package/packages/server/dist/tools/onboard.tool.js +3 -2
  163. package/packages/server/dist/tools/policy.tools.d.ts +8 -0
  164. package/packages/server/dist/tools/policy.tools.js +3 -0
  165. package/packages/server/dist/tools/produce.tool.d.ts +6 -2
  166. package/packages/server/dist/tools/produce.tool.js +3 -2
  167. package/packages/server/dist/tools/read.tool.d.ts +7 -3
  168. package/packages/server/dist/tools/read.tool.js +3 -6
  169. package/packages/server/dist/tools/reindex.tool.d.ts +10 -6
  170. package/packages/server/dist/tools/reindex.tool.js +3 -2
  171. package/packages/server/dist/tools/remember.tool.d.ts +8 -3
  172. package/packages/server/dist/tools/remember.tool.js +4 -5
  173. package/packages/server/dist/tools/replay.tool.d.ts +6 -2
  174. package/packages/server/dist/tools/replay.tool.js +3 -6
  175. package/packages/server/dist/tools/search.tool.d.ts +10 -4
  176. package/packages/server/dist/tools/search.tool.js +7 -22
  177. package/packages/server/dist/tools/status.tool.d.ts +7 -3
  178. package/packages/server/dist/tools/status.tool.js +3 -3
  179. package/packages/server/dist/tools/toolkit.tools.d.ts +36 -34
  180. package/packages/server/dist/tools/toolkit.tools.js +20 -24
  181. package/packages/server/dist/tools/update.tool.d.ts +7 -3
  182. package/packages/server/dist/tools/update.tool.js +2 -6
  183. package/packages/server/dist/tools/utility.tools.d.ts +15 -14
  184. package/packages/server/dist/tools/utility.tools.js +11 -23
  185. package/packages/server/dist/version-check.d.ts +5 -1
  186. package/packages/server/dist/version-check.js +2 -1
  187. package/packages/store/dist/graph-store.interface.d.ts +89 -86
  188. package/packages/store/dist/graph-store.interface.js +1 -0
  189. package/packages/store/dist/index.d.ts +6 -6
  190. package/packages/store/dist/index.js +1 -1
  191. package/packages/store/dist/lance-store.d.ts +37 -30
  192. package/packages/store/dist/lance-store.js +2 -1
  193. package/packages/store/dist/sqlite-graph-store.d.ts +43 -46
  194. package/packages/store/dist/sqlite-graph-store.js +14 -13
  195. package/packages/store/dist/store-factory.d.ts +11 -7
  196. package/packages/store/dist/store-factory.js +2 -1
  197. package/packages/store/dist/store.interface.d.ts +47 -46
  198. package/packages/store/dist/store.interface.js +1 -0
  199. package/packages/tools/dist/audit.d.ts +61 -61
  200. package/packages/tools/dist/audit.js +5 -5
  201. package/packages/tools/dist/batch.d.ts +20 -17
  202. package/packages/tools/dist/batch.js +2 -1
  203. package/packages/tools/dist/changelog.d.ts +29 -26
  204. package/packages/tools/dist/changelog.js +3 -2
  205. package/packages/tools/dist/check.d.ts +42 -38
  206. package/packages/tools/dist/check.js +3 -2
  207. package/packages/tools/dist/checkpoint.d.ts +17 -14
  208. package/packages/tools/dist/checkpoint.js +2 -2
  209. package/packages/tools/dist/codemod.d.ts +35 -32
  210. package/packages/tools/dist/codemod.js +3 -2
  211. package/packages/tools/dist/compact.d.ts +34 -37
  212. package/packages/tools/dist/compact.js +3 -2
  213. package/packages/tools/dist/data-transform.d.ts +10 -7
  214. package/packages/tools/dist/data-transform.js +2 -1
  215. package/packages/tools/dist/dead-symbols.d.ts +29 -25
  216. package/packages/tools/dist/dead-symbols.js +3 -2
  217. package/packages/tools/dist/delegate.d.ts +26 -23
  218. package/packages/tools/dist/delegate.js +2 -5
  219. package/packages/tools/dist/diff-parse.d.ts +24 -21
  220. package/packages/tools/dist/diff-parse.js +4 -3
  221. package/packages/tools/dist/digest.d.ts +43 -45
  222. package/packages/tools/dist/digest.js +5 -5
  223. package/packages/tools/dist/encode.d.ts +11 -8
  224. package/packages/tools/dist/encode.js +2 -1
  225. package/packages/tools/dist/env-info.d.ts +25 -22
  226. package/packages/tools/dist/env-info.js +2 -1
  227. package/packages/tools/dist/eval.d.ts +13 -10
  228. package/packages/tools/dist/eval.js +3 -3
  229. package/packages/tools/dist/evidence-map.d.ts +64 -61
  230. package/packages/tools/dist/evidence-map.js +3 -3
  231. package/packages/tools/dist/file-cache.d.ts +42 -0
  232. package/packages/tools/dist/file-cache.js +4 -0
  233. package/packages/tools/dist/file-summary.d.ts +34 -29
  234. package/packages/tools/dist/file-summary.js +3 -2
  235. package/packages/tools/dist/file-walk.d.ts +6 -3
  236. package/packages/tools/dist/file-walk.js +2 -1
  237. package/packages/tools/dist/find-examples.d.ts +26 -21
  238. package/packages/tools/dist/find-examples.js +4 -3
  239. package/packages/tools/dist/find.d.ts +39 -40
  240. package/packages/tools/dist/find.js +2 -1
  241. package/packages/tools/dist/forge-classify.d.ts +35 -38
  242. package/packages/tools/dist/forge-classify.js +3 -2
  243. package/packages/tools/dist/forge-ground.d.ts +58 -60
  244. package/packages/tools/dist/forge-ground.js +2 -1
  245. package/packages/tools/dist/git-context.d.ts +22 -19
  246. package/packages/tools/dist/git-context.js +4 -3
  247. package/packages/tools/dist/graph-query.d.ts +75 -78
  248. package/packages/tools/dist/graph-query.js +2 -1
  249. package/packages/tools/dist/guide.d.ts +14 -11
  250. package/packages/tools/dist/guide.js +2 -1
  251. package/packages/tools/dist/health.d.ts +13 -10
  252. package/packages/tools/dist/health.js +3 -2
  253. package/packages/tools/dist/http-request.d.ts +20 -17
  254. package/packages/tools/dist/http-request.js +2 -1
  255. package/packages/tools/dist/index.d.ts +54 -53
  256. package/packages/tools/dist/index.js +1 -1
  257. package/packages/tools/dist/lane.d.ts +28 -25
  258. package/packages/tools/dist/lane.js +7 -7
  259. package/packages/tools/dist/measure.d.ts +32 -29
  260. package/packages/tools/dist/measure.js +3 -2
  261. package/packages/tools/dist/onboard.d.ts +29 -26
  262. package/packages/tools/dist/onboard.js +18 -41
  263. package/packages/tools/dist/parse-output.d.ts +48 -45
  264. package/packages/tools/dist/parse-output.js +3 -2
  265. package/packages/tools/dist/path-resolver.d.ts +4 -1
  266. package/packages/tools/dist/path-resolver.js +2 -1
  267. package/packages/tools/dist/process-manager.d.ts +18 -15
  268. package/packages/tools/dist/process-manager.js +2 -1
  269. package/packages/tools/dist/queue.d.ts +28 -25
  270. package/packages/tools/dist/queue.js +2 -2
  271. package/packages/tools/dist/regex-test.d.ts +26 -23
  272. package/packages/tools/dist/regex-test.js +2 -1
  273. package/packages/tools/dist/rename.d.ts +28 -25
  274. package/packages/tools/dist/rename.js +3 -2
  275. package/packages/tools/dist/replay.d.ts +32 -29
  276. package/packages/tools/dist/replay.js +5 -6
  277. package/packages/tools/dist/response-envelope.d.ts +32 -29
  278. package/packages/tools/dist/response-envelope.js +2 -1
  279. package/packages/tools/dist/schema-validate.d.ts +15 -12
  280. package/packages/tools/dist/schema-validate.js +2 -1
  281. package/packages/tools/dist/scope-map.d.ts +45 -47
  282. package/packages/tools/dist/scope-map.js +2 -1
  283. package/packages/tools/dist/snippet.d.ts +26 -24
  284. package/packages/tools/dist/snippet.js +2 -1
  285. package/packages/tools/dist/stash.d.ts +13 -10
  286. package/packages/tools/dist/stash.js +2 -2
  287. package/packages/tools/dist/stratum-card.d.ts +27 -27
  288. package/packages/tools/dist/stratum-card.js +4 -5
  289. package/packages/tools/dist/symbol.d.ts +29 -25
  290. package/packages/tools/dist/symbol.js +4 -3
  291. package/packages/tools/dist/test-run.d.ts +19 -15
  292. package/packages/tools/dist/test-run.js +3 -2
  293. package/packages/tools/dist/text-utils.d.ts +6 -3
  294. package/packages/tools/dist/text-utils.js +3 -2
  295. package/packages/tools/dist/time-utils.d.ts +15 -12
  296. package/packages/tools/dist/time-utils.js +2 -1
  297. package/packages/tools/dist/trace.d.ts +24 -20
  298. package/packages/tools/dist/trace.js +3 -2
  299. package/packages/tools/dist/truncation.d.ts +6 -3
  300. package/packages/tools/dist/truncation.js +8 -14
  301. package/packages/tools/dist/watch.d.ts +28 -25
  302. package/packages/tools/dist/watch.js +2 -1
  303. package/packages/tools/dist/web-fetch.d.ts +35 -32
  304. package/packages/tools/dist/web-fetch.js +7 -12
  305. package/packages/tools/dist/web-search.d.ts +16 -13
  306. package/packages/tools/dist/web-search.js +2 -1
  307. package/packages/tools/dist/workset.d.ts +19 -16
  308. package/packages/tools/dist/workset.js +2 -2
  309. package/packages/tui/dist/App-BAlmxCCw.js +3 -0
  310. package/packages/tui/dist/App.d.ts +11 -5
  311. package/packages/tui/dist/App.js +1 -450
  312. package/packages/tui/dist/CuratedPanel-sYdZAICX.js +3 -0
  313. package/packages/tui/dist/LogPanel-DVB8Sv46.js +4 -0
  314. package/packages/tui/dist/SearchPanel-DREo6zgt.js +3 -0
  315. package/packages/tui/dist/StatusPanel-2ex8fLOO.js +3 -0
  316. package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
  317. package/packages/tui/dist/devtools-DUyj952l.js +8 -0
  318. package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +29 -0
  319. package/packages/tui/dist/index-B9VpfVPP.d.ts +14 -0
  320. package/packages/tui/dist/index.d.ts +3 -19
  321. package/packages/tui/dist/index.js +2 -476
  322. package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +317 -0
  323. package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -5
  324. package/packages/tui/dist/panels/CuratedPanel.js +1 -371
  325. package/packages/tui/dist/panels/LogPanel.d.ts +7 -2
  326. package/packages/tui/dist/panels/LogPanel.js +1 -449
  327. package/packages/tui/dist/panels/SearchPanel.d.ts +14 -7
  328. package/packages/tui/dist/panels/SearchPanel.js +1 -372
  329. package/packages/tui/dist/panels/StatusPanel.d.ts +11 -5
  330. package/packages/tui/dist/panels/StatusPanel.js +1 -371
  331. package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +151 -0
  332. package/scaffold/adapters/claude-code.mjs +20 -0
  333. package/scaffold/adapters/copilot.mjs +320 -0
  334. package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +14 -0
  335. package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +14 -0
  336. package/scaffold/copilot/agents/Code-Reviewer-Alpha.agent.md +12 -0
  337. package/scaffold/copilot/agents/Code-Reviewer-Beta.agent.md +12 -0
  338. package/scaffold/copilot/agents/Debugger.agent.md +31 -0
  339. package/scaffold/copilot/agents/Documenter.agent.md +35 -0
  340. package/scaffold/copilot/agents/Explorer.agent.md +50 -0
  341. package/scaffold/copilot/agents/Frontend.agent.md +29 -0
  342. package/scaffold/copilot/agents/Implementer.agent.md +31 -0
  343. package/scaffold/copilot/agents/Orchestrator.agent.md +96 -0
  344. package/scaffold/copilot/agents/Planner.agent.md +45 -0
  345. package/scaffold/copilot/agents/README.md +57 -0
  346. package/scaffold/copilot/agents/Refactor.agent.md +30 -0
  347. package/scaffold/copilot/agents/Researcher-Alpha.agent.md +12 -0
  348. package/scaffold/copilot/agents/Researcher-Beta.agent.md +12 -0
  349. package/scaffold/copilot/agents/Researcher-Delta.agent.md +12 -0
  350. package/scaffold/copilot/agents/Researcher-Gamma.agent.md +12 -0
  351. package/scaffold/copilot/agents/Security.agent.md +42 -0
  352. package/scaffold/copilot/agents/_shared/adr-protocol.md +91 -0
  353. package/scaffold/copilot/agents/_shared/architect-reviewer-base.md +50 -0
  354. package/scaffold/copilot/agents/_shared/code-agent-base.md +70 -0
  355. package/scaffold/copilot/agents/_shared/code-reviewer-base.md +54 -0
  356. package/scaffold/copilot/agents/_shared/decision-protocol.md +27 -0
  357. package/scaffold/copilot/agents/_shared/forge-protocol.md +46 -0
  358. package/scaffold/copilot/agents/_shared/researcher-base.md +61 -0
  359. package/scaffold/copilot/agents/templates/adr-template.md +27 -0
  360. package/scaffold/copilot/agents/templates/execution-state.md +25 -0
  361. package/scaffold/copilot/prompts/ask.prompt.md +20 -0
  362. package/scaffold/copilot/prompts/debug.prompt.md +25 -0
  363. package/scaffold/copilot/prompts/design.prompt.md +22 -0
  364. package/scaffold/copilot/prompts/implement.prompt.md +26 -0
  365. package/scaffold/copilot/prompts/plan.prompt.md +24 -0
  366. package/scaffold/copilot/prompts/review.prompt.md +31 -0
  367. package/scaffold/definitions/agents.mjs +165 -0
  368. package/scaffold/definitions/bodies.mjs +292 -0
  369. package/scaffold/definitions/hooks.mjs +43 -0
  370. package/scaffold/definitions/models.mjs +56 -0
  371. package/scaffold/definitions/plugins.mjs +24 -0
  372. package/scaffold/definitions/prompts.mjs +145 -0
  373. package/scaffold/definitions/protocols.mjs +322 -0
  374. package/scaffold/definitions/tools.mjs +176 -0
  375. package/scaffold/generate.mjs +74 -0
  376. package/skills/brainstorming/SKILL.md +259 -0
  377. package/skills/brainstorming/scripts/frame-template.html +365 -0
  378. package/skills/brainstorming/scripts/helper.js +216 -0
  379. package/skills/brainstorming/scripts/server.cjs +9 -0
  380. package/skills/brainstorming/scripts/server.src.cjs +249 -0
  381. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  382. package/skills/brainstorming/visual-companion.md +430 -0
  383. package/skills/knowledge-base/SKILL.md +22 -9
@@ -1 +1 @@
1
- import{audit as p}from"./audit.js";import{batch as r}from"./batch.js";import{changelog as a,formatChangelog as y}from"./changelog.js";import{check as i,summarizeCheckResult as u}from"./check.js";import{checkpointLatest as m,checkpointList as d,checkpointLoad as f,checkpointSave as c}from"./checkpoint.js";import{codemod as h}from"./codemod.js";import{compact as g}from"./compact.js";import{dataTransform as S}from"./data-transform.js";import{findDeadSymbols as E}from"./dead-symbols.js";import{delegate as k,delegateListModels as F}from"./delegate.js";import{diffParse as b}from"./diff-parse.js";import{digest as v}from"./digest.js";import{encode as W}from"./encode.js";import{envInfo as q}from"./env-info.js";import{evaluate as B}from"./eval.js";import{evidenceMap as H}from"./evidence-map.js";import{fileSummary as I}from"./file-summary.js";import{find as Q}from"./find.js";import{findExamples as N}from"./find-examples.js";import{forgeClassify as z}from"./forge-classify.js";import{forgeGround as J}from"./forge-ground.js";import{gitContext as Y}from"./git-context.js";import{graphAugmentSearch as _,graphQuery as $}from"./graph-query.js";import{guide as te}from"./guide.js";import{health as oe}from"./health.js";import{httpRequest as se}from"./http-request.js";import{laneCreate as ye,laneDiff as ne,laneDiscard as ie,laneList as ue,laneMerge as le,laneStatus as me}from"./lane.js";import{analyzeFile as fe,measure as ce}from"./measure.js";import{onboard as he}from"./onboard.js";import{parseBiome as ge,parseGitStatus as Oe,parseOutput as Se,parseTsc as Ce,parseVitest as Ee}from"./parse-output.js";import{resolvePath as ke}from"./path-resolver.js";import{processList as De,processLogs as be,processStart as Me,processStatus as ve,processStop as Ge}from"./process-manager.js";import{queueClear as Le,queueCreate as qe,queueDelete as Ae,queueDone as Be,queueFail as Pe,queueGet as He,queueList as we,queueNext as Ie,queuePush as Ke}from"./queue.js";import{regexTest as Ve}from"./regex-test.js";import{rename as Ue}from"./rename.js";import{replayAppend as je,replayCapture as Je,replayClear as Xe,replayList as Ye,replayTrim as Ze}from"./replay.js";import{errorResponse as $e,okResponse as et}from"./response-envelope.js";import{schemaValidate as pt}from"./schema-validate.js";import{scopeMap as rt}from"./scope-map.js";import{snippet as at}from"./snippet.js";import{stashClear as nt,stashDelete as it,stashGet as ut,stashList as lt,stashSet as mt}from"./stash.js";import{stratumCard as ft}from"./stratum-card.js";import{symbol as Rt}from"./symbol.js";import{classifyExitCode as xt,testRun as gt}from"./test-run.js";import{cosineSimilarity as St,estimateTokens as Ct,segment as Et}from"./text-utils.js";import{timeUtils as kt}from"./time-utils.js";import{trace as Dt}from"./trace.js";import{headTailTruncate as Mt,paragraphTruncate as vt,truncateToTokenBudget as Gt}from"./truncation.js";import{watchList as Lt,watchStart as qt,watchStop as At}from"./watch.js";import{webFetch as Pt}from"./web-fetch.js";import{parseSearchResults as wt,webSearch as It}from"./web-search.js";import{addToWorkset as Qt,deleteWorkset as Vt,getWorkset as Nt,listWorksets as Ut,removeFromWorkset as zt,saveWorkset as jt}from"./workset.js";export{Qt as addToWorkset,fe as analyzeFile,p as audit,r as batch,a as changelog,i as check,m as checkpointLatest,d as checkpointList,f as checkpointLoad,c as checkpointSave,xt as classifyExitCode,h as codemod,g as compact,St as cosineSimilarity,S as dataTransform,k as delegate,F as delegateListModels,Vt as deleteWorkset,b as diffParse,v as digest,W as encode,q as envInfo,$e as errorResponse,Ct as estimateTokens,B as evaluate,H as evidenceMap,I as fileSummary,Q as find,E as findDeadSymbols,N as findExamples,z as forgeClassify,J as forgeGround,y as formatChangelog,Nt as getWorkset,Y as gitContext,_ as graphAugmentSearch,$ as graphQuery,te as guide,Mt as headTailTruncate,oe as health,se as httpRequest,ye as laneCreate,ne as laneDiff,ie as laneDiscard,ue as laneList,le as laneMerge,me as laneStatus,Ut as listWorksets,ce as measure,et as okResponse,he as onboard,vt as paragraphTruncate,ge as parseBiome,Oe as parseGitStatus,Se as parseOutput,wt as parseSearchResults,Ce as parseTsc,Ee as parseVitest,De as processList,be as processLogs,Me as processStart,ve as processStatus,Ge as processStop,Le as queueClear,qe as queueCreate,Ae as queueDelete,Be as queueDone,Pe as queueFail,He as queueGet,we as queueList,Ie as queueNext,Ke as queuePush,Ve as regexTest,zt as removeFromWorkset,Ue as rename,je as replayAppend,Je as replayCapture,Xe as replayClear,Ye as replayList,Ze as replayTrim,ke as resolvePath,jt as saveWorkset,pt as schemaValidate,rt as scopeMap,Et as segment,at as snippet,nt as stashClear,it as stashDelete,ut as stashGet,lt as stashList,mt as stashSet,ft as stratumCard,u as summarizeCheckResult,Rt as symbol,gt as testRun,kt as timeUtils,Dt as trace,Gt as truncateToTokenBudget,Lt as watchList,qt as watchStart,At as watchStop,Pt as webFetch,It as webSearch};
1
+ import{parseBiome as e,parseGitStatus as t,parseOutput as n,parseTsc as r,parseVitest as i}from"./parse-output.js";import{check as a,summarizeCheckResult as o}from"./check.js";import{findDeadSymbols as s}from"./dead-symbols.js";import{health as c}from"./health.js";import{resolvePath as l}from"./path-resolver.js";import{cosineSimilarity as u,estimateTokens as d,segment as f}from"./text-utils.js";import{errorResponse as p,okResponse as m}from"./response-envelope.js";import{audit as h}from"./audit.js";import{batch as g}from"./batch.js";import{changelog as _,formatChangelog as v}from"./changelog.js";import{checkpointLatest as y,checkpointList as b,checkpointLoad as x,checkpointSave as S}from"./checkpoint.js";import{codemod as C}from"./codemod.js";import{compact as w}from"./compact.js";import{dataTransform as T}from"./data-transform.js";import{delegate as E,delegateListModels as D}from"./delegate.js";import{diffParse as O}from"./diff-parse.js";import{digest as k}from"./digest.js";import{encode as A}from"./encode.js";import{envInfo as j}from"./env-info.js";import{evaluate as M}from"./eval.js";import{evidenceMap as N}from"./evidence-map.js";import{FileCache as P}from"./file-cache.js";import{fileSummary as F}from"./file-summary.js";import{findExamples as I}from"./find-examples.js";import{find as L}from"./find.js";import{forgeClassify as R}from"./forge-classify.js";import{scopeMap as z}from"./scope-map.js";import{forgeGround as B}from"./forge-ground.js";import{gitContext as V}from"./git-context.js";import{graphAugmentSearch as H,graphQuery as U}from"./graph-query.js";import{guide as W}from"./guide.js";import{headTailTruncate as G,paragraphTruncate as K,truncateToTokenBudget as q}from"./truncation.js";import{httpRequest as J}from"./http-request.js";import{laneCreate as Y,laneDiff as X,laneDiscard as Z,laneList as Q,laneMerge as $,laneStatus as ee}from"./lane.js";import{analyzeFile as te,measure as ne}from"./measure.js";import{onboard as re}from"./onboard.js";import{processList as ie,processLogs as ae,processStart as oe,processStatus as se,processStop as ce}from"./process-manager.js";import{queueClear as le,queueCreate as ue,queueDelete as de,queueDone as fe,queueFail as pe,queueGet as me,queueList as he,queueNext as ge,queuePush as _e}from"./queue.js";import{regexTest as ve}from"./regex-test.js";import{rename as ye}from"./rename.js";import{replayAppend as be,replayCapture as xe,replayClear as Se,replayList as Ce,replayTrim as we}from"./replay.js";import{schemaValidate as Te}from"./schema-validate.js";import{snippet as Ee}from"./snippet.js";import{stashClear as De,stashDelete as Oe,stashGet as ke,stashList as Ae,stashSet as je}from"./stash.js";import{stratumCard as Me}from"./stratum-card.js";import{symbol as Ne}from"./symbol.js";import{classifyExitCode as Pe,testRun as Fe}from"./test-run.js";import{timeUtils as Ie}from"./time-utils.js";import{trace as Le}from"./trace.js";import{watchList as Re,watchStart as ze,watchStop as Be}from"./watch.js";import{webFetch as Ve}from"./web-fetch.js";import{parseSearchResults as He,webSearch as Ue}from"./web-search.js";import{addToWorkset as We,deleteWorkset as Ge,getWorkset as Ke,listWorksets as qe,removeFromWorkset as Je,saveWorkset as Ye}from"./workset.js";export{P as FileCache,We as addToWorkset,te as analyzeFile,h as audit,g as batch,_ as changelog,a as check,y as checkpointLatest,b as checkpointList,x as checkpointLoad,S as checkpointSave,Pe as classifyExitCode,C as codemod,w as compact,u as cosineSimilarity,T as dataTransform,E as delegate,D as delegateListModels,Ge as deleteWorkset,O as diffParse,k as digest,A as encode,j as envInfo,p as errorResponse,d as estimateTokens,M as evaluate,N as evidenceMap,F as fileSummary,L as find,s as findDeadSymbols,I as findExamples,R as forgeClassify,B as forgeGround,v as formatChangelog,Ke as getWorkset,V as gitContext,H as graphAugmentSearch,U as graphQuery,W as guide,G as headTailTruncate,c as health,J as httpRequest,Y as laneCreate,X as laneDiff,Z as laneDiscard,Q as laneList,$ as laneMerge,ee as laneStatus,qe as listWorksets,ne as measure,m as okResponse,re as onboard,K as paragraphTruncate,e as parseBiome,t as parseGitStatus,n as parseOutput,He as parseSearchResults,r as parseTsc,i as parseVitest,ie as processList,ae as processLogs,oe as processStart,se as processStatus,ce as processStop,le as queueClear,ue as queueCreate,de as queueDelete,fe as queueDone,pe as queueFail,me as queueGet,he as queueList,ge as queueNext,_e as queuePush,ve as regexTest,Je as removeFromWorkset,ye as rename,be as replayAppend,xe as replayCapture,Se as replayClear,Ce as replayList,we as replayTrim,l as resolvePath,Ye as saveWorkset,Te as schemaValidate,z as scopeMap,f as segment,Ee as snippet,De as stashClear,Oe as stashDelete,ke as stashGet,Ae as stashList,je as stashSet,Me as stratumCard,o as summarizeCheckResult,Ne as symbol,Fe as testRun,Ie as timeUtils,Le as trace,q as truncateToTokenBudget,Re as watchList,ze as watchStart,Be as watchStop,Ve as webFetch,Ue as webSearch};
@@ -1,39 +1,42 @@
1
- export interface LaneMeta {
2
- name: string;
3
- createdAt: string;
4
- sourceFiles: string[];
5
- rootPath: string;
1
+ //#region packages/tools/src/lane.d.ts
2
+ interface LaneMeta {
3
+ name: string;
4
+ createdAt: string;
5
+ sourceFiles: string[];
6
+ rootPath: string;
6
7
  }
7
- export interface LaneDiffEntry {
8
- file: string;
9
- status: 'modified' | 'added' | 'deleted' | 'unchanged';
10
- diff?: string;
8
+ interface LaneDiffEntry {
9
+ file: string;
10
+ status: 'modified' | 'added' | 'deleted' | 'unchanged';
11
+ diff?: string;
11
12
  }
12
- export interface LaneDiffResult {
13
- name: string;
14
- entries: LaneDiffEntry[];
15
- modified: number;
16
- added: number;
17
- deleted: number;
13
+ interface LaneDiffResult {
14
+ name: string;
15
+ entries: LaneDiffEntry[];
16
+ modified: number;
17
+ added: number;
18
+ deleted: number;
18
19
  }
19
- export interface LaneMergeResult {
20
- name: string;
21
- filesMerged: number;
22
- files: string[];
20
+ interface LaneMergeResult {
21
+ name: string;
22
+ filesMerged: number;
23
+ files: string[];
23
24
  }
24
25
  /**
25
26
  * Create an isolated lane by copying specified files into `.kb-state/lanes/<name>/`.
26
27
  * Files are stored with their relative paths preserved.
27
28
  */
28
- export declare function laneCreate(name: string, files: string[], cwd?: string): LaneMeta;
29
+ declare function laneCreate(name: string, files: string[], cwd?: string): LaneMeta;
29
30
  /** List all active lanes. */
30
- export declare function laneList(cwd?: string): LaneMeta[];
31
+ declare function laneList(cwd?: string): LaneMeta[];
31
32
  /** Get the status of a lane — which files are modified, added, deleted. */
32
- export declare function laneStatus(name: string, cwd?: string): LaneDiffResult;
33
+ declare function laneStatus(name: string, cwd?: string): LaneDiffResult;
33
34
  /** Generate a unified diff for modified files in a lane. */
34
- export declare function laneDiff(name: string, cwd?: string): LaneDiffResult;
35
+ declare function laneDiff(name: string, cwd?: string): LaneDiffResult;
35
36
  /** Merge lane files back to the original locations. */
36
- export declare function laneMerge(name: string, cwd?: string): LaneMergeResult;
37
+ declare function laneMerge(name: string, cwd?: string): LaneMergeResult;
37
38
  /** Discard a lane entirely. */
38
- export declare function laneDiscard(name: string, cwd?: string): boolean;
39
+ declare function laneDiscard(name: string, cwd?: string): boolean;
40
+ //#endregion
41
+ export { LaneDiffEntry, LaneDiffResult, LaneMergeResult, LaneMeta, laneCreate, laneDiff, laneDiscard, laneList, laneMerge, laneStatus };
39
42
  //# sourceMappingURL=lane.d.ts.map
@@ -1,7 +1,7 @@
1
- import{cpSync as F,existsSync as u,mkdirSync as S,readdirSync as E,readFileSync as g,rmSync as P,statSync as R,writeFileSync as A}from"node:fs";import{join as l,relative as v,resolve as h}from"node:path";const N=".kb-state/lanes",L=".lane-meta.json";function w(n){return h(n??process.cwd(),N)}function p(n,r){const s=w(r),i=h(s,n);if(!i.startsWith(h(s)))throw new Error(`Invalid lane name: "${n}"`);return i}function x(n,r){const s=l(p(n,r),L);if(!u(s))throw new Error(`Lane "${n}" does not exist`);return JSON.parse(g(s,"utf-8"))}function I(n,r,s){const i=s??process.cwd(),o=p(n,s);if(u(o))throw new Error(`Lane "${n}" already exists`);S(o,{recursive:!0});const e=[];for(const t of r){const a=h(i,t);if(!u(a))throw new Error(`Source file does not exist: ${t}`);const c=v(i,a).replace(/\\/g,"/"),d=l(o,c);S(l(d,".."),{recursive:!0}),F(a,d),e.push(c)}const f={name:n,createdAt:new Date().toISOString(),sourceFiles:e,rootPath:i};return A(l(o,L),`${JSON.stringify(f,null,2)}
2
- `,"utf-8"),f}function J(n){const r=w(n);if(!u(r))return[];const s=E(r),i=[];for(const o of s){const e=l(r,o,L);u(e)&&i.push(JSON.parse(g(e,"utf-8")))}return i}function k(n,r){const s=x(n,r),i=p(n,r),o=s.rootPath,e=[];for(const t of s.sourceFiles){const a=h(o,t),c=l(i,t);if(!u(c)){e.push({file:t,status:"deleted"});continue}if(!u(a)){e.push({file:t,status:"added"});continue}const d=g(a,"utf-8"),m=g(c,"utf-8");d===m?e.push({file:t,status:"unchanged"}):e.push({file:t,status:"modified"})}const f=y(i);for(const t of f)s.sourceFiles.includes(t)||e.push({file:t,status:"added"});return{name:n,entries:e,modified:e.filter(t=>t.status==="modified").length,added:e.filter(t=>t.status==="added").length,deleted:e.filter(t=>t.status==="deleted").length}}function _(n,r){const s=x(n,r),i=p(n,r),o=s.rootPath,e=[],f=new Set(s.sourceFiles);for(const t of y(i))f.add(t);for(const t of f){const a=h(o,t),c=l(i,t),d=u(a),m=u(c);if(!m&&d){e.push({file:t,status:"deleted"});continue}if(m&&!d){const $=g(c,"utf-8");e.push({file:t,status:"added",diff:$.split(`
3
- `).map(b=>`+${b}`).join(`
4
- `)});continue}if(!m||!d)continue;const M=g(a,"utf-8"),D=g(c,"utf-8");M===D?e.push({file:t,status:"unchanged"}):e.push({file:t,status:"modified",diff:j(M,D)})}return{name:n,entries:e,modified:e.filter(t=>t.status==="modified").length,added:e.filter(t=>t.status==="added").length,deleted:e.filter(t=>t.status==="deleted").length}}function T(n,r){const s=x(n,r),i=p(n,r),o=s.rootPath,e=[],f=new Set(s.sourceFiles);for(const t of y(i))f.add(t);for(const t of f){const a=l(i,t);if(!u(a))continue;const c=h(o,t);S(l(c,".."),{recursive:!0}),F(a,c),e.push(t)}return P(i,{recursive:!0,force:!0}),{name:n,filesMerged:e.length,files:e}}function W(n,r){const s=p(n,r);return u(s)?(P(s,{recursive:!0,force:!0}),!0):!1}function y(n){const r=[];function s(i){for(const o of E(i)){if(o===L)continue;const e=l(i,o);R(e).isDirectory()?s(e):r.push(v(n,e).replace(/\\/g,"/"))}}return u(n)&&s(n),r.sort()}function j(n,r){const s=n.split(`
5
- `),i=r.split(`
6
- `),o=[],e=Math.max(s.length,i.length);for(let f=0;f<e;f++){const t=s[f],a=i[f];t===a?o.push(` ${t??""}`):(t!==void 0&&o.push(`-${t}`),a!==void 0&&o.push(`+${a}`))}return o.join(`
7
- `)}export{I as laneCreate,_ as laneDiff,W as laneDiscard,J as laneList,T as laneMerge,k as laneStatus};
1
+ import{join as e,relative as t,resolve as n}from"node:path";import{cpSync as r,existsSync as i,mkdirSync as a,readFileSync as o,readdirSync as s,rmSync as c,statSync as l,writeFileSync as u}from"node:fs";const d=`.lane-meta.json`;function f(e){return n(e??process.cwd(),`.kb-state/lanes`)}function p(e,t){let r=f(t),i=n(r,e);if(!i.startsWith(n(r)))throw Error(`Invalid lane name: "${e}"`);return i}function m(t,n){let r=e(p(t,n),d);if(!i(r))throw Error(`Lane "${t}" does not exist`);try{return JSON.parse(o(r,`utf-8`))}catch{throw Error(`Lane "${t}" has corrupted metadata`)}}function h(o,s,c){let l=c??process.cwd(),f=p(o,c);if(i(f))throw Error(`Lane "${o}" already exists`);a(f,{recursive:!0});let m=[];for(let o of s){let s=n(l,o);if(!i(s))throw Error(`Source file does not exist: ${o}`);let c=t(l,s).replace(/\\/g,`/`),u=e(f,c);a(e(u,`..`),{recursive:!0}),r(s,u),m.push(c)}let h={name:o,createdAt:new Date().toISOString(),sourceFiles:m,rootPath:l};return u(e(f,d),`${JSON.stringify(h,null,2)}\n`,`utf-8`),h}function g(t){let n=f(t);if(!i(n))return[];let r=s(n),a=[];for(let t of r){let r=e(n,t,d);if(i(r))try{a.push(JSON.parse(o(r,`utf-8`)))}catch{}}return a}function _(t,r){let a=m(t,r),s=p(t,r),c=a.rootPath,l=[];for(let t of a.sourceFiles){let r=n(c,t),a=e(s,t);if(!i(a)){l.push({file:t,status:`deleted`});continue}if(!i(r)){l.push({file:t,status:`added`});continue}o(r,`utf-8`)===o(a,`utf-8`)?l.push({file:t,status:`unchanged`}):l.push({file:t,status:`modified`})}let u=x(s);for(let e of u)a.sourceFiles.includes(e)||l.push({file:e,status:`added`});return{name:t,entries:l,modified:l.filter(e=>e.status===`modified`).length,added:l.filter(e=>e.status===`added`).length,deleted:l.filter(e=>e.status===`deleted`).length}}function v(t,r){let a=m(t,r),s=p(t,r),c=a.rootPath,l=[],u=new Set(a.sourceFiles);for(let e of x(s))u.add(e);for(let t of u){let r=n(c,t),a=e(s,t),u=i(r),d=i(a);if(!d&&u){l.push({file:t,status:`deleted`});continue}if(d&&!u){let e=o(a,`utf-8`);l.push({file:t,status:`added`,diff:e.split(`
2
+ `).map(e=>`+${e}`).join(`
3
+ `)});continue}if(!d||!u)continue;let f=o(r,`utf-8`),p=o(a,`utf-8`);f===p?l.push({file:t,status:`unchanged`}):l.push({file:t,status:`modified`,diff:S(f,p)})}return{name:t,entries:l,modified:l.filter(e=>e.status===`modified`).length,added:l.filter(e=>e.status===`added`).length,deleted:l.filter(e=>e.status===`deleted`).length}}function y(t,o){let s=m(t,o),l=p(t,o),u=s.rootPath,d=[],f=new Set(s.sourceFiles);for(let e of x(l))f.add(e);for(let t of f){let o=e(l,t);if(!i(o))continue;let s=n(u,t);a(e(s,`..`),{recursive:!0}),r(o,s),d.push(t)}return c(l,{recursive:!0,force:!0}),{name:t,filesMerged:d.length,files:d}}function b(e,t){let n=p(e,t);return i(n)?(c(n,{recursive:!0,force:!0}),!0):!1}function x(n){let r=[];function a(i){for(let o of s(i)){if(o===d)continue;let s=e(i,o);l(s).isDirectory()?a(s):r.push(t(n,s).replace(/\\/g,`/`))}}return i(n)&&a(n),r.sort()}function S(e,t){let n=e.split(`
4
+ `),r=t.split(`
5
+ `),i=[],a=Math.max(n.length,r.length);for(let e=0;e<a;e++){let t=n[e],a=r[e];t===a?i.push(` ${t??``}`):(t!==void 0&&i.push(`-${t}`),a!==void 0&&i.push(`+${a}`))}return i.join(`
6
+ `)}export{h as laneCreate,v as laneDiff,b as laneDiscard,g as laneList,y as laneMerge,_ as laneStatus};
7
+ //# sourceMappingURL=lane.js.map
@@ -1,38 +1,41 @@
1
+ //#region packages/tools/src/measure.d.ts
1
2
  /**
2
3
  * kb_measure — Code complexity and size metrics.
3
4
  */
4
- export interface MeasureOptions {
5
- path: string;
6
- extensions?: string[];
5
+ interface MeasureOptions {
6
+ path: string;
7
+ extensions?: string[];
7
8
  }
8
- export interface FileMetrics {
9
- path: string;
10
- lines: {
11
- total: number;
12
- code: number;
13
- blank: number;
14
- comment: number;
15
- };
16
- complexity: number;
17
- functions: number;
18
- imports: number;
19
- exports: number;
9
+ interface FileMetrics {
10
+ path: string;
11
+ lines: {
12
+ total: number;
13
+ code: number;
14
+ blank: number;
15
+ comment: number;
16
+ };
17
+ complexity: number;
18
+ functions: number;
19
+ imports: number;
20
+ exports: number;
20
21
  }
21
- export interface MeasureResult {
22
- files: FileMetrics[];
23
- summary: {
24
- totalFiles: number;
25
- totalLines: number;
26
- totalCodeLines: number;
27
- avgComplexity: number;
28
- maxComplexity: {
29
- file: string;
30
- value: number;
31
- };
32
- totalFunctions: number;
22
+ interface MeasureResult {
23
+ files: FileMetrics[];
24
+ summary: {
25
+ totalFiles: number;
26
+ totalLines: number;
27
+ totalCodeLines: number;
28
+ avgComplexity: number;
29
+ maxComplexity: {
30
+ file: string;
31
+ value: number;
33
32
  };
33
+ totalFunctions: number;
34
+ };
34
35
  }
35
- export declare function measure(options: MeasureOptions): MeasureResult;
36
+ declare function measure(options: MeasureOptions): MeasureResult;
36
37
  /** Exported for unit testing */
37
- export declare function analyzeFile(path: string, content: string): FileMetrics;
38
+ declare function analyzeFile(path: string, content: string): FileMetrics;
39
+ //#endregion
40
+ export { FileMetrics, MeasureOptions, MeasureResult, analyzeFile, measure };
38
41
  //# sourceMappingURL=measure.d.ts.map
@@ -1,2 +1,3 @@
1
- import{readdirSync as h,readFileSync as x,statSync as p}from"node:fs";import{extname as b,join as d,relative as y}from"node:path";const F=new Set(["node_modules",".git","dist","build","coverage",".turbo","cdk.out",".cache"]),C=[/\bif\s*\(/g,/\belse\s+if\b/g,/\bfor\s*\(/g,/\bwhile\s*\(/g,/\bcase\s+/g,/\bcatch\s*\(/g,/&&/g,/\|\|/g,/\?\?/g];function R(r){const{path:s,extensions:o=[".ts",".tsx",".js",".jsx"]}=r,t=M(s,o).map(e=>{const n=x(e,"utf8");return w(y(process.cwd(),e),n)});t.sort((e,n)=>n.complexity-e.complexity);const i=t.reduce((e,n)=>e+n.lines.total,0),l=t.reduce((e,n)=>e+n.lines.code,0),u=t.reduce((e,n)=>e+n.complexity,0),f=t.reduce((e,n)=>e+n.functions,0),m=t[0]??{path:"",complexity:0};return{files:t,summary:{totalFiles:t.length,totalLines:i,totalCodeLines:l,avgComplexity:t.length>0?Math.round(u/t.length*10)/10:0,maxComplexity:{file:m.path,value:m.complexity},totalFunctions:f}}}function w(r,s){const o=s.split(`
2
- `);let a=0,t=0,i=!1;for(const g of o){const c=g.trim();if(c===""){a++;continue}if(i){t++,c.includes("*/")&&(i=!1);continue}if(c.startsWith("//")){t++;continue}c.startsWith("/*")&&(t++,i=!c.includes("*/"))}let l=1;for(const g of C){const c=s.match(g);c&&(l+=c.length)}const u=s.match(/\bfunction\b/g)?.length??0,f=s.match(/=>\s*[{(]/g)?.length??0,m=u+f,e=s.match(/^\s*import\s/gm)?.length??0,n=s.match(/^\s*export\s/gm)?.length??0;return{path:r,lines:{total:o.length,code:o.length-a-t,blank:a,comment:t},complexity:l,functions:m,imports:e,exports:n}}function M(r,s){try{if(p(r).isFile())return[r]}catch{throw new Error(`Path not found: ${r}`)}const o=[];function a(t){for(const i of h(t)){if(F.has(i))continue;const l=d(t,i);p(l).isDirectory()?a(l):s.includes(b(i).toLowerCase())&&o.push(l)}}return a(r),o.sort(),o}export{w as analyzeFile,R as measure};
1
+ import{extname as e,join as t,relative as n}from"node:path";import{readFileSync as r,readdirSync as i,statSync as a}from"node:fs";const o=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`cdk.out`,`.cache`]),s=[/\bif\s*\(/g,/\belse\s+if\b/g,/\bfor\s*\(/g,/\bwhile\s*\(/g,/\bcase\s+/g,/\bcatch\s*\(/g,/&&/g,/\|\|/g,/\?\?/g];function c(e){let{path:t,extensions:i=[`.ts`,`.tsx`,`.js`,`.jsx`]}=e,a=u(t,i).map(e=>{let t=r(e,`utf8`);return l(n(process.cwd(),e),t)});a.sort((e,t)=>t.complexity-e.complexity);let o=a.reduce((e,t)=>e+t.lines.total,0),s=a.reduce((e,t)=>e+t.lines.code,0),c=a.reduce((e,t)=>e+t.complexity,0),d=a.reduce((e,t)=>e+t.functions,0),f=a[0]??{path:``,complexity:0};return{files:a,summary:{totalFiles:a.length,totalLines:o,totalCodeLines:s,avgComplexity:a.length>0?Math.round(c/a.length*10)/10:0,maxComplexity:{file:f.path,value:f.complexity},totalFunctions:d}}}function l(e,t){let n=t.split(`
2
+ `),r=0,i=0,a=!1;for(let e of n){let t=e.trim();if(t===``){r++;continue}if(a){i++,t.includes(`*/`)&&(a=!1);continue}if(t.startsWith(`//`)){i++;continue}t.startsWith(`/*`)&&(i++,a=!t.includes(`*/`))}let o=1;for(let e of s){let n=t.match(e);n&&(o+=n.length)}let c=(t.match(/\bfunction\b/g)?.length??0)+(t.match(/=>\s*[{(]/g)?.length??0),l=t.match(/^\s*import\s/gm)?.length??0,u=t.match(/^\s*export\s/gm)?.length??0;return{path:e,lines:{total:n.length,code:n.length-r-i,blank:r,comment:i},complexity:o,functions:c,imports:l,exports:u}}function u(n,r){try{if(a(n).isFile())return[n]}catch{throw Error(`Path not found: ${n}`)}let s=[];function c(n){for(let l of i(n)){if(o.has(l))continue;let i=t(n,l);a(i).isDirectory()?c(i):r.includes(e(l).toLowerCase())&&s.push(i)}}return c(n),s.sort(),s}export{l as analyzeFile,c as measure};
3
+ //# sourceMappingURL=measure.js.map
@@ -1,3 +1,4 @@
1
+ //#region packages/tools/src/onboard.d.ts
1
2
  /**
2
3
  * kb_onboard — First-time codebase onboarding in a single command.
3
4
  *
@@ -6,36 +7,38 @@
6
7
  *
7
8
  * Analyses: structure, dependencies, entry-points, symbols, patterns, diagram.
8
9
  */
9
- export type OnboardMode = 'memory' | 'generate';
10
- export interface OnboardOptions {
11
- /** Root path to analyze */
12
- path: string;
13
- /** Output mode: 'memory' (KB only) or 'generate' (write to .ai/kb/) */
14
- mode?: OnboardMode;
15
- /** Output directory for generate mode (default: '<path>/.ai/kb') */
16
- outDir?: string;
10
+ type OnboardMode = 'memory' | 'generate';
11
+ interface OnboardOptions {
12
+ /** Root path to analyze */
13
+ path: string;
14
+ /** Output mode: 'memory' (KB only) or 'generate' (write to .ai/kb/) */
15
+ mode?: OnboardMode;
16
+ /** Output directory for generate mode (default: '<path>/.ai/kb') */
17
+ outDir?: string;
17
18
  }
18
- export interface OnboardStepResult {
19
- name: string;
20
- status: 'success' | 'failed';
21
- output: string;
22
- durationMs: number;
23
- error?: string;
19
+ interface OnboardStepResult {
20
+ name: string;
21
+ status: 'success' | 'failed';
22
+ output: string;
23
+ durationMs: number;
24
+ error?: string;
24
25
  }
25
- export interface OnboardResult {
26
- /** Root path that was analyzed */
27
- path: string;
28
- /** Mode used */
29
- mode: OnboardMode;
30
- /** Results for each analysis step */
31
- steps: OnboardStepResult[];
32
- /** Output directory (only set in generate mode) */
33
- outDir?: string;
34
- /** Total duration in ms */
35
- totalDurationMs: number;
26
+ interface OnboardResult {
27
+ /** Root path that was analyzed */
28
+ path: string;
29
+ /** Mode used */
30
+ mode: OnboardMode;
31
+ /** Results for each analysis step */
32
+ steps: OnboardStepResult[];
33
+ /** Output directory (only set in generate mode) */
34
+ outDir?: string;
35
+ /** Total duration in ms */
36
+ totalDurationMs: number;
36
37
  }
37
38
  /**
38
39
  * Run all onboarding analyses in parallel and return combined results.
39
40
  */
40
- export declare function onboard(options: OnboardOptions): Promise<OnboardResult>;
41
+ declare function onboard(options: OnboardOptions): Promise<OnboardResult>;
42
+ //#endregion
43
+ export { OnboardMode, OnboardOptions, OnboardResult, OnboardStepResult, onboard };
41
44
  //# sourceMappingURL=onboard.d.ts.map
@@ -1,45 +1,22 @@
1
- import{existsSync as F,mkdirSync as V,readdirSync as q,rmSync as U,writeFileSync as B}from"node:fs";import{readdir as J,readFile as Z}from"node:fs/promises";import{basename as N,join as O,relative as H,resolve as Q}from"node:path";import{DependencyAnalyzer as X,DiagramGenerator as Y,EntryPointAnalyzer as ee,extractRegexCallGraph as te,extractTsCallGraph as se,PatternAnalyzer as ne,StructureAnalyzer as oe,SymbolAnalyzer as re}from"../../analyzers/dist/index.js";const L={structure:"Project Structure",dependencies:"Dependencies","entry-points":"Entry Points",symbols:"Symbols",patterns:"Patterns",diagram:"C4 Container Diagram","code-map":"Code Map (Module Graph)","config-values":"Configuration Values","synthesis-guide":"Synthesis Guide"};function ie(g,u,t,p){const n=[`Analysis baselines for **${t}** have been generated.`];u==="generate"?n.push("Individual results are in the sibling `.md` and `.json` files in this directory.",""):n.push("Results are stored in the KB vector store.","");const a=p.get("symbols"),i=p.get("dependencies"),d=p.get("patterns"),y=p.get("entry-points"),$=a?.totalCount??0,b=a?.exportedCount??0,M=i?.totalImports??0,C=y?.total??0,r=(d?.patterns??[]).map(m=>m.pattern),w=r.some(m=>m.startsWith("Spring")),_=r.includes("AWS CDK")||r.includes("CDK IaC"),P=r.includes("Maven"),T=r.includes("Serverless")||C>3,k=i?.external?Object.keys(i.external):[],f=k.some(m=>["express","fastify","next","react","vitest","jest"].includes(m))||M>0,x=k.some(m=>["turbo","lerna","nx"].includes(m))||r.includes("Monorepo");if(n.push("### Project Profile",""),n.push(`- **${$} symbols** (${b} exported), **${M} imports**, **${C} entry ${C===1?"point":"points"}**`),r.length>0&&n.push(`- **Detected**: ${r.slice(0,8).join(", ")}`),n.push(""),$===0&&M===0&&C===0)return n.push("> **Note:** This project appears to be empty or contains no analyzable source code.","> Run onboard again after adding source files."),n.join(`
2
- `);const v=g.filter(m=>m.status==="success"),j=g.filter(m=>m.status==="failed");n.push("### Completed Analyses","");for(const m of v){const S=L[m.name]??m.name,e=m.output.length>1e3?`${Math.round(m.output.length/1024)}KB`:`${m.output.length}B`;u==="generate"?n.push(`- \u2713 [${S}](./${m.name}.md) (${e})`):n.push(`- \u2713 ${S} (${e})`)}if(j.length>0){n.push("","### Failed Analyses","");for(const m of j)n.push(`- \u2717 ${m.name}: ${m.error}`)}n.push("","### Recommended Reading Order","","1. **Start with** `synthesis-guide.md` (this file) \u2192 `entry-points.md` \u2192 `patterns.md`","2. **Module graph** via `code-map.md` \u2014 cross-package call edges with function names","3. **Architecture** via `diagram.md` (C4 Container) \u2192 `dependencies.md`","4. **Browse structure** via `structure.md` for file layout","5. **API surface** via `symbols.md` \u2014 file paths + exported symbols (capped at 80KB)","6. **Reference**: `config-values.md` (config reference)","","> **Size guidance:** Total output is ~");const D=v.reduce((m,S)=>m+S.output.length,0)/1024;return n[n.length-1]+=`${Math.round(D)}KB. Focus on code-map.md + entry-points.md + diagram.md (~${Math.round((v.find(m=>m.name==="code-map")?.output.length??0)/1024+(v.find(m=>m.name==="entry-points")?.output.length??0)/1024+(v.find(m=>m.name==="diagram")?.output.length??0)/1024)}KB) for maximum signal-to-token ratio.`,n.push("","### Synthesize Knowledge","","Produce the following `kb_remember` entries:",""),n.push("1. **Architecture Summary** (category: `architecture`)"),x?(n.push(" - Package boundaries, dependency graph between packages"),n.push(" - Shared vs service-specific code")):T?(n.push(" - Lambda functions, triggers, event flow"),n.push(" - Infrastructure patterns (queues, tables, APIs)")):w?(n.push(" - Controller \u2192 Service \u2192 Repository layers"),n.push(" - Spring configuration and profiles")):(n.push(" - Layer structure, dependency flow"),n.push(" - Key design decisions")),n.push(""),n.push("2. **Domain Model** (category: `architecture`)"),n.push(" - Key entities/types and their relationships"),n.push(" - Data flow from entry points through processing"),n.push(""),n.push("3. **Conventions** (category: `conventions`)"),n.push(" - Naming patterns, file organization, testing approach"),_&&n.push(" - CDK construct patterns and stack organization"),f&&n.push(" - Build tooling, package manager, module system"),P&&n.push(" - Maven module structure, dependency management"),n.push("","### Using KB Tools","","This project has a KB MCP server with tools for search, analysis, memory, and more.","`kb init` has already created `.github/copilot-instructions.md` and `AGENTS.md` with the complete tool reference.","If not, run `npx @vpxa/kb init` to generate them.","","**Workflow pattern \u2014 use on every task:**","","```",'kb_search({ query: "your task keywords" }) # Recall prior decisions','kb_scope_map({ task: "what you are doing" }) # Get a reading plan',"# ... do the work ...","kb_check({}) # Typecheck + lint","kb_test_run({}) # Run tests",'kb_remember({ title: "What I learned", category: "decisions" }) # Persist',"```"),n.join(`
3
- `)}const ae=new Set(["test","tests","__tests__","spec","specs","__mocks__","__fixtures__","fixtures","test-utils"]);function R(g){return g.replace(/\\/g,"/").split("/").some(t=>ae.has(t))||/\.(test|spec)\.[jt]sx?$/.test(g)||/Test\.java$/.test(g)}function ce(g,u,t){const p=g.get("dependencies"),n=g.get("symbols"),a=g.get("entry-points"),i=[`## Code Map: ${u}
4
- `];if(!p&&!n)return i.push("No dependency or symbol data available."),i.join(`
5
- `);const d=p?.reverseGraph??{},y=n?.symbols??[],$=a?.entryPoints??[],b=new Map;for(const f of y){if(!f.exported)continue;const x=f.filePath.replace(/\\/g,"/");if(R(x))continue;const v=b.get(x);v?v.push({name:f.name,kind:f.kind}):b.set(x,[{name:f.name,kind:f.kind}])}const M=new Map;for(const[f,x]of Object.entries(d)){const v=f.replace(/\\/g,"/"),j=ue(v,b),D=x.map(S=>S.replace(/\\/g,"/")).filter(S=>!R(S));if(D.length===0)continue;const m=M.get(j);if(m)for(const S of D)m.add(S);else M.set(j,new Set(D))}const C=new Map;for(const f of $)C.set(f.filePath.replace(/\\/g,"/"),{name:f.name,trigger:f.trigger});const l=new Map,r=new Map;if(t)for(const[f,x]of t){if(R(f))continue;const v=z(f);for(const[j,D]of x){if(R(j))continue;const m=z(j);if(v===m)continue;let S=l.get(f);S||(S=new Map,l.set(f,S)),S.set(j,D);const e=r.get(j),o={file:f,symbols:D};e?e.push(o):r.set(j,[o])}}const w=new Set;for(const f of C.keys())w.add(f);for(const f of l.keys())w.add(f);for(const f of r.keys())w.add(f);if(!t)for(const f of b.keys()){const x=M.get(f);x&&x.size>=3&&w.add(f)}const _=new Map;for(const f of w){const x=z(f),v=_.get(x);v?v.push(f):_.set(x,[f])}const P=[..._.entries()].sort((f,x)=>f[0].localeCompare(x[0])),T=t?"AST call graph":"import analysis",k=t?`, ${l.size} cross-package callers`:"";i.push(`**${w.size} key modules** (${T}${k})
6
- `),i.push(`**Legend:** \u26A1 Entry point | \u{1F4E4} Exports | \u2192 Calls (outgoing) | \u2190 Called by (incoming) | \u27A1 Used by (import)
7
- `);for(const[f,x]of P){x.sort(),i.push(`### ${f}/
8
- `);for(const v of x){const j=b.get(v),D=C.get(v),m=l.get(v),S=r.get(v),e=M.get(v),o=v.startsWith(`${f}/`)?v.slice(f.length+1):v;if(i.push(`**${o}**`),D&&i.push(` \u26A1 Entry: \`${D.name}\`${D.trigger?` (${D.trigger})`:""}`),j&&j.length>0){const s=j.slice(0,8).map(h=>`${h.name}`).join(", "),c=j.length>8?` (+${j.length-8})`:"";i.push(` \u{1F4E4} ${s}${c}`)}if(m&&m.size>0){const s=[...m.entries()].sort((c,h)=>h[1].length-c[1].length);for(const[c,h]of s.slice(0,4)){const A=c.startsWith(`${f}/`)?c.slice(f.length+1):c;i.push(` \u2192 ${A}: ${h.slice(0,5).join(", ")}${h.length>5?"\u2026":""}`)}s.length>4&&i.push(` \u2192 +${s.length-4} more targets`)}if(S&&S.length>0){for(const s of S.slice(0,4)){const c=s.file.startsWith(`${f}/`)?s.file.slice(f.length+1):s.file;i.push(` \u2190 ${c}: ${s.symbols.slice(0,4).join(", ")}${s.symbols.length>4?"\u2026":""}`)}S.length>4&&i.push(` \u2190 +${S.length-4} more callers`)}else if(!t&&e&&e.size>0){const s=[...e].filter(c=>!R(c));s.length<=3?i.push(` \u27A1 Used by: ${s.join(", ")}`):i.push(` \u27A1 Used by: ${s.slice(0,3).join(", ")} (+${s.length-3} more)`)}i.push("")}}return i.join(`
9
- `)}function z(g){const u=g.split("/");if(u.length>=2&&["packages","services","providers","apps","libs"].includes(u[0]))return`${u[0]}/${u[1]}`;const t=u.indexOf("java"),p=u.indexOf("kotlin"),n=t>=0?t:p;if(n>=0&&n+2<u.length){const a=u.slice(n+1);return["com","org","net","io","dev"].includes(a[0])&&a.length>=3?a.slice(0,3).join("/"):a.slice(0,2).join("/")}return u[0]==="src"&&u.length>=3?`${u[0]}/${u[1]}`:u[0]}function le(g,u,t){const p=u.get("symbols"),n=u.get("entry-points"),a=u.get("dependencies"),i=new Map;for(const[e,o]of g)if(!R(e))for(const[s,c]of o){if(R(s))continue;const h=z(e),A=z(s);if(h===A)continue;const E=`${h}|${A}`;i.set(E,(i.get(E)??0)+c.length)}if(i.size===0)return`## Architecture Diagram
1
+ import{DependencyAnalyzer as e,DiagramGenerator as t,EntryPointAnalyzer as n,PatternAnalyzer as r,StructureAnalyzer as i,SymbolAnalyzer as a,extractRegexCallGraph as o,extractTsCallGraph as s}from"../../analyzers/dist/index.js";import{readFile as c,readdir as l}from"node:fs/promises";import{basename as u,join as d,relative as f,resolve as p}from"node:path";import{existsSync as m,mkdirSync as h,readdirSync as g,rmSync as _,writeFileSync as v}from"node:fs";const y={structure:`Project Structure`,dependencies:`Dependencies`,"entry-points":`Entry Points`,symbols:`Symbols`,patterns:`Patterns`,diagram:`C4 Container Diagram`,"code-map":`Code Map (Module Graph)`,"config-values":`Configuration Values`,"synthesis-guide":`Synthesis Guide`};function b(e,t,n,r){let i=[`Analysis baselines for **${n}** have been generated.`];t===`generate`?i.push("Individual results are in the sibling `.md` and `.json` files in this directory.",``):i.push(`Results are stored in the KB vector store.`,``);let a=r.get(`symbols`),o=r.get(`dependencies`),s=r.get(`patterns`),c=r.get(`entry-points`),l=a?.totalCount??0,u=a?.exportedCount??0,d=o?.totalImports??0,f=c?.total??0,p=(s?.patterns??[]).map(e=>e.pattern),m=p.some(e=>e.startsWith(`Spring`)),h=p.includes(`AWS CDK`)||p.includes(`CDK IaC`),g=p.includes(`Maven`),_=p.includes(`Serverless`)||f>3,v=o?.external?Object.keys(o.external):[],b=v.some(e=>[`express`,`fastify`,`next`,`react`,`vitest`,`jest`].includes(e))||d>0,x=v.some(e=>[`turbo`,`lerna`,`nx`].includes(e))||p.includes(`Monorepo`);if(i.push(`### Project Profile`,``),i.push(`- **${l} symbols** (${u} exported), **${d} imports**, **${f} entry ${f===1?`point`:`points`}**`),p.length>0&&i.push(`- **Detected**: ${p.slice(0,8).join(`, `)}`),i.push(``),l===0&&d===0&&f===0)return i.push(`> **Note:** This project appears to be empty or contains no analyzable source code.`,`> Run onboard again after adding source files.`),i.join(`
2
+ `);let S=e.filter(e=>e.status===`success`),C=e.filter(e=>e.status===`failed`);i.push(`### Completed Analyses`,``);for(let e of S){let n=y[e.name]??e.name,r=e.output.length>1e3?`${Math.round(e.output.length/1024)}KB`:`${e.output.length}B`;t===`generate`?i.push(`- [${n}](./${e.name}.md) (${r})`):i.push(`- ${n} (${r})`)}if(C.length>0){i.push(``,`### Failed Analyses`,``);for(let e of C)i.push(`- ${e.name}: ${e.error}`)}i.push(``,`### Recommended Reading Order`,``,"1. **Start with** `synthesis-guide.md` (this file) `entry-points.md` `patterns.md`","2. **Module graph** via `code-map.md` cross-package call edges with function names","3. **Architecture** via `diagram.md` (C4 Container) `dependencies.md`","4. **Browse structure** via `structure.md` for file layout","5. **API surface** via `symbols.md` file paths + exported symbols (capped at 80KB)","6. **Reference**: `config-values.md` (config reference)",``,`> **Size guidance:** Total output is ~`);let w=S.reduce((e,t)=>e+t.output.length,0)/1024;return i[i.length-1]+=`${Math.round(w)}KB. Focus on code-map.md + entry-points.md + diagram.md (~${Math.round((S.find(e=>e.name===`code-map`)?.output.length??0)/1024+(S.find(e=>e.name===`entry-points`)?.output.length??0)/1024+(S.find(e=>e.name===`diagram`)?.output.length??0)/1024)}KB) for maximum signal-to-token ratio.`,i.push(``,`### Synthesize Knowledge`,``,"Produce the following `kb_remember` entries:",``),i.push("1. **Architecture Summary** (category: `architecture`)"),x?(i.push(` - Package boundaries, dependency graph between packages`),i.push(` - Shared vs service-specific code`)):_?(i.push(` - Lambda functions, triggers, event flow`),i.push(` - Infrastructure patterns (queues, tables, APIs)`)):m?(i.push(` - Controller Service Repository layers`),i.push(` - Spring configuration and profiles`)):(i.push(` - Layer structure, dependency flow`),i.push(` - Key design decisions`)),i.push(``),i.push("2. **Domain Model** (category: `architecture`)"),i.push(` - Key entities/types and their relationships`),i.push(` - Data flow from entry points through processing`),i.push(``),i.push("3. **Conventions** (category: `conventions`)"),i.push(` - Naming patterns, file organization, testing approach`),h&&i.push(` - CDK construct patterns and stack organization`),b&&i.push(` - Build tooling, package manager, module system`),g&&i.push(` - Maven module structure, dependency management`),i.push(``,`### Using KB Tools`,``,`This project has a KB MCP server with tools for search, analysis, memory, and more.`,"`kb init` has already created `.github/copilot-instructions.md` and `AGENTS.md` with the complete tool reference.","If not, run `npx @vpxa/kb init` to generate them.",``,`**Workflow pattern use on every task:**`,``,"```",`kb_search({ query: "your task keywords" }) # Recall prior decisions`,`kb_scope_map({ task: "what you are doing" }) # Get a reading plan`,`# ... do the work ...`,`kb_check({}) # Typecheck + lint`,`kb_test_run({}) # Run tests`,`kb_remember({ title: "What I learned", category: "decisions" }) # Persist`,"```"),i.join(`
3
+ `)}const x=new Set([`test`,`tests`,`__tests__`,`spec`,`specs`,`__mocks__`,`__fixtures__`,`fixtures`,`test-utils`]);function S(e){return e.replace(/\\/g,`/`).split(`/`).some(e=>x.has(e))||/\.(test|spec)\.[jt]sx?$/.test(e)||/Test\.java$/.test(e)}function C(e,t,n){let r=e.get(`dependencies`),i=e.get(`symbols`),a=e.get(`entry-points`),o=[`## Code Map: ${t}\n`];if(!r&&!i)return o.push(`No dependency or symbol data available.`),o.join(`
4
+ `);let s=r?.reverseGraph??{},c=i?.symbols??[],l=a?.entryPoints??[],u=new Map;for(let e of c){if(!e.exported)continue;let t=e.filePath.replace(/\\/g,`/`);if(S(t))continue;let n=u.get(t);n?n.push({name:e.name,kind:e.kind}):u.set(t,[{name:e.name,kind:e.kind}])}let d=new Map;for(let[e,t]of Object.entries(s)){let n=E(e.replace(/\\/g,`/`),u),r=t.map(e=>e.replace(/\\/g,`/`)).filter(e=>!S(e));if(r.length===0)continue;let i=d.get(n);if(i)for(let e of r)i.add(e);else d.set(n,new Set(r))}let f=new Map;for(let e of l)f.set(e.filePath.replace(/\\/g,`/`),{name:e.name,trigger:e.trigger});let p=new Map,m=new Map;if(n)for(let[e,t]of n){if(S(e))continue;let n=w(e);for(let[r,i]of t){if(S(r)||n===w(r))continue;let t=p.get(e);t||(t=new Map,p.set(e,t)),t.set(r,i);let a=m.get(r),o={file:e,symbols:i};a?a.push(o):m.set(r,[o])}}let h=new Set;for(let e of f.keys())h.add(e);for(let e of p.keys())h.add(e);for(let e of m.keys())h.add(e);if(!n)for(let e of u.keys()){let t=d.get(e);t&&t.size>=3&&h.add(e)}let g=new Map;for(let e of h){let t=w(e),n=g.get(t);n?n.push(e):g.set(t,[e])}let _=[...g.entries()].sort((e,t)=>e[0].localeCompare(t[0])),v=n?`AST call graph`:`import analysis`,y=n?`, ${p.size} cross-package callers`:``;o.push(`**${h.size} key modules** (${v}${y})\n`),o.push(`**Legend:** ⚡ Entry point | 📤 Exports | → Calls (outgoing) | ← Called by (incoming) | ➡ Used by (import)
5
+ `);for(let[e,t]of _){t.sort(),o.push(`### ${e}/\n`);for(let r of t){let t=u.get(r),i=f.get(r),a=p.get(r),s=m.get(r),c=d.get(r),l=r.startsWith(`${e}/`)?r.slice(e.length+1):r;if(o.push(`**${l}**`),i&&o.push(` ⚡ Entry: \`${i.name}\`${i.trigger?` (${i.trigger})`:``}`),t&&t.length>0){let e=t.slice(0,8).map(e=>`${e.name}`).join(`, `),n=t.length>8?` (+${t.length-8})`:``;o.push(` 📤 ${e}${n}`)}if(a&&a.size>0){let t=[...a.entries()].sort((e,t)=>t[1].length-e[1].length);for(let[n,r]of t.slice(0,4)){let t=n.startsWith(`${e}/`)?n.slice(e.length+1):n;o.push(` → ${t}: ${r.slice(0,5).join(`, `)}${r.length>5?`…`:``}`)}t.length>4&&o.push(` → +${t.length-4} more targets`)}if(s&&s.length>0){for(let t of s.slice(0,4)){let n=t.file.startsWith(`${e}/`)?t.file.slice(e.length+1):t.file;o.push(` ← ${n}: ${t.symbols.slice(0,4).join(`, `)}${t.symbols.length>4?`…`:``}`)}s.length>4&&o.push(` ← +${s.length-4} more callers`)}else if(!n&&c&&c.size>0){let e=[...c].filter(e=>!S(e));e.length<=3?o.push(` ➡ Used by: ${e.join(`, `)}`):o.push(` ➡ Used by: ${e.slice(0,3).join(`, `)} (+${e.length-3} more)`)}o.push(``)}}return o.join(`
6
+ `)}function w(e){let t=e.split(`/`);if(t.length>=2&&[`packages`,`services`,`providers`,`apps`,`libs`].includes(t[0]))return`${t[0]}/${t[1]}`;let n=t.indexOf(`java`),r=t.indexOf(`kotlin`),i=n>=0?n:r;if(i>=0&&i+2<t.length){let e=t.slice(i+1);return[`com`,`org`,`net`,`io`,`dev`].includes(e[0])&&e.length>=3?e.slice(0,3).join(`/`):e.slice(0,2).join(`/`)}return t[0]===`src`&&t.length>=3?`${t[0]}/${t[1]}`:t[0]}function T(e,t,n){let r=t.get(`symbols`),i=t.get(`entry-points`),a=t.get(`dependencies`),o=new Map;for(let[t,n]of e)if(!S(t))for(let[e,r]of n){if(S(e))continue;let n=w(t),i=w(e);if(n===i)continue;let a=`${n}|${i}`;o.set(a,(o.get(a)??0)+r.length)}if(o.size===0)return`## Architecture Diagram
10
7
 
11
- No cross-package dependencies detected.`;const d=new Set;for(const e of i.keys()){const[o,s]=e.split("|");d.add(o),d.add(s)}const y=new Map;if(p?.symbols)for(const e of p.symbols){if(!e.exported)continue;const o=e.filePath.replace(/\\/g,"/");if(R(o))continue;const s=z(o);y.set(s,(y.get(s)??0)+1)}const $=new Map;if(n?.entryPoints)for(const e of n.entryPoints){const o=e.filePath.replace(/\\/g,"/"),s=z(o),c=$.get(s);c?(c.count++,e.trigger&&c.triggers.add(e.trigger)):$.set(s,{count:1,triggers:new Set(e.trigger?[e.trigger]:[])})}const b=[];if(a?.external){const e=a.external,o={"client-dynamodb":{id:"dynamodb",name:"DynamoDB"},"lib-dynamodb":{id:"dynamodb",name:"DynamoDB"},"client-sqs":{id:"sqs",name:"SQS"},"client-ses":{id:"ses",name:"SES"},"client-sesv2":{id:"ses",name:"SES"},"client-s3":{id:"s3",name:"S3"},"client-eventbridge":{id:"eventbridge",name:"EventBridge"},"client-sns":{id:"sns",name:"SNS"},"client-secrets-manager":{id:"secrets",name:"Secrets Manager"},"client-scheduler":{id:"scheduler",name:"EventBridge Scheduler"},"client-apigatewaymanagementapi":{id:"apigw",name:"API Gateway"},"client-cloudwatch":{id:"cloudwatch",name:"CloudWatch"}},s=new Set;for(const c of Object.keys(e))for(const[h,A]of Object.entries(o))c.includes(h)&&!s.has(A.id)&&(s.add(A.id),b.push(A));b.sort((c,h)=>c.name.localeCompare(h.name))}const M=new Map;for(const e of[...d].sort()){const o=e.split("/")[0],s=M.get(o);s?s.push(e):M.set(o,[e])}const C=new Map;if(p?.symbols){const e=new Map;for(const s of p.symbols){const c=s.filePath.replace(/\\/g,"/"),h=z(c),A=c.match(/\.[^./]+$/)?.[0]||"";e.has(h)||e.set(h,new Map);const E=e.get(h);E.set(A,(E.get(A)??0)+1)}const o={".ts":"TypeScript",".tsx":"TypeScript",".js":"JavaScript",".jsx":"JavaScript",".java":"Java",".kt":"Kotlin",".scala":"Scala",".py":"Python",".go":"Go",".rs":"Rust",".cs":"C#",".rb":"Ruby",".php":"PHP",".swift":"Swift"};for(const[s,c]of e){let h="",A=0;for(const[E,I]of c)I>A&&(A=I,h=E);C.set(s,o[h]||"TypeScript")}}const l=e=>e.replace(/[^a-zA-Z0-9]/g,"_"),r=[];r.push("```mermaid"),r.push("C4Container"),r.push(` title C4 Container: ${t}`),r.push("");const w=e=>{const o=[],s=$.get(e);s&&(o.push(`${s.count} handlers`),s.triggers.size>0&&o.push([...s.triggers].join(", ")));const c=y.get(e);return c&&o.push(`${c} exports`),o.join(" \xB7 ")||""},_=e=>{const o=C.get(e)||"TypeScript";if(e.startsWith("infra"))return`CDK/${o}`;if($.has(e)){const s=$.get(e);if(s?.triggers.has("SQS")||s?.triggers.has("SNS")||s?.triggers.has("API Gateway"))return`Lambda/${o}`;if(s?.triggers.has("HTTP Server")||s?.triggers.has("HTTP Endpoint"))return`Spring Boot/${o}`}return o};for(const[e,o]of[...M.entries()].sort()){const c=new Set(["com","org","net","io","dev","src"]).has(e)?t.charAt(0).toUpperCase()+t.slice(1):e.charAt(0).toUpperCase()+e.slice(1);if(o.length===1&&o[0]===e){const h=o[0];r.push(` Container(${l(h)}, "${h}", "${_(h)}", "${w(h)}")`)}else{r.push(` System_Boundary(${l(e)}_boundary, "${c}") {`);for(const h of o){const A=h.split("/").slice(1).join("/")||h;r.push(` Container(${l(h)}, "${A}", "${_(h)}", "${w(h)}")`)}r.push(" }")}r.push("")}if(b.length>0){for(const e of b)r.push(` System_Ext(ext_${e.id}, "${e.name}", "AWS")`);r.push("")}const P=[...i.entries()].sort((e,o)=>o[1]-e[1]);for(const[e,o]of P.slice(0,30)){const[s,c]=e.split("|");r.push(` Rel(${l(s)}, ${l(c)}, "Uses", "${o} calls")`)}r.push("```");const T=`## C4 Container Diagram
12
-
13
- ${r.join(`
14
- `)}`,k=[];k.push("```mermaid"),k.push("graph TB");const f=new Set;for(const[,e]of $)for(const o of e.triggers)f.add(o);if(f.size>0){k.push(' subgraph Triggers["External Triggers"]');for(const e of[...f].sort()){const o=`trigger_${e.replace(/[^a-zA-Z0-9]/g,"_")}`;k.push(` ${o}(("${e}"))`)}k.push(" end"),k.push("")}const x=[...d].filter(e=>$.has(e)).sort(),v=[...d].filter(e=>!$.has(e)).sort();if(x.length>0){k.push(' subgraph Services["Service Layer"]');for(const e of x){const o=`flow_${l(e)}`,s=e.includes("/")?e.split("/").pop()??e:e,c=$.get(e);k.push(` ${o}["${s} (${c?.count??0} handlers)"]`)}k.push(" end"),k.push("")}if(v.length>0){k.push(' subgraph Libraries["Shared Libraries"]');for(const e of v){const o=`flow_${l(e)}`,s=e.includes("/")?e.split("/").pop()??e:e;k.push(` ${o}["${s}"]`)}k.push(" end"),k.push("")}if(b.length>0){k.push(' subgraph External["AWS Services"]');for(const e of b)k.push(` flow_ext_${e.id}[("${e.name}")]`);k.push(" end"),k.push("")}for(const e of x){const o=$.get(e);if(!o)continue;const s=`flow_${l(e)}`;for(const c of o.triggers){const h=`trigger_${c.replace(/[^a-zA-Z0-9]/g,"_")}`;k.push(` ${h} --> ${s}`)}}const j=P.filter(([e])=>{const[o,s]=e.split("|");return $.has(o)&&!$.has(s)});for(const[e,o]of j.slice(0,15)){const[s,c]=e.split("|");k.push(` flow_${l(s)} -->|${o}| flow_${l(c)}`)}const D=P.filter(([e])=>{const[o,s]=e.split("|");return!$.has(o)&&!$.has(s)});for(const[e,o]of D.slice(0,10)){const[s,c]=e.split("|");k.push(` flow_${l(s)} -->|${o}| flow_${l(c)}`)}k.push("```");const m=`## Architectural Flow
15
-
16
- ${k.join(`
17
- `)}`,S=[`# Architecture Diagrams: ${t}
18
- `];return S.push(T),S.push(m),S.join(`
8
+ No cross-package dependencies detected.`;let s=new Set;for(let e of o.keys()){let[t,n]=e.split(`|`);s.add(t),s.add(n)}let c=new Map;if(r?.symbols)for(let e of r.symbols){if(!e.exported)continue;let t=e.filePath.replace(/\\/g,`/`);if(S(t))continue;let n=w(t);c.set(n,(c.get(n)??0)+1)}let l=new Map;if(i?.entryPoints)for(let e of i.entryPoints){let t=w(e.filePath.replace(/\\/g,`/`)),n=l.get(t);n?(n.count++,e.trigger&&n.triggers.add(e.trigger)):l.set(t,{count:1,triggers:new Set(e.trigger?[e.trigger]:[])})}let u=[];if(a?.external){let e=a.external,t={"client-dynamodb":{id:`dynamodb`,name:`DynamoDB`},"lib-dynamodb":{id:`dynamodb`,name:`DynamoDB`},"client-sqs":{id:`sqs`,name:`SQS`},"client-ses":{id:`ses`,name:`SES`},"client-sesv2":{id:`ses`,name:`SES`},"client-s3":{id:`s3`,name:`S3`},"client-eventbridge":{id:`eventbridge`,name:`EventBridge`},"client-sns":{id:`sns`,name:`SNS`},"client-secrets-manager":{id:`secrets`,name:`Secrets Manager`},"client-scheduler":{id:`scheduler`,name:`EventBridge Scheduler`},"client-apigatewaymanagementapi":{id:`apigw`,name:`API Gateway`},"client-cloudwatch":{id:`cloudwatch`,name:`CloudWatch`}},n=new Set;for(let r of Object.keys(e))for(let[e,i]of Object.entries(t))r.includes(e)&&!n.has(i.id)&&(n.add(i.id),u.push(i));u.sort((e,t)=>e.name.localeCompare(t.name))}let d=new Map;for(let e of[...s].sort()){let t=e.split(`/`)[0],n=d.get(t);n?n.push(e):d.set(t,[e])}let f=new Map;if(r?.symbols){let e=new Map;for(let t of r.symbols){let n=t.filePath.replace(/\\/g,`/`),r=w(n),i=n.match(/\.[^./]+$/)?.[0]||``;e.has(r)||e.set(r,new Map);let a=e.get(r);a.set(i,(a.get(i)??0)+1)}let t={".ts":`TypeScript`,".tsx":`TypeScript`,".js":`JavaScript`,".jsx":`JavaScript`,".java":`Java`,".kt":`Kotlin`,".scala":`Scala`,".py":`Python`,".go":`Go`,".rs":`Rust`,".cs":`C#`,".rb":`Ruby`,".php":`PHP`,".swift":`Swift`};for(let[n,r]of e){let e=``,i=0;for(let[t,n]of r)n>i&&(i=n,e=t);f.set(n,t[e]||`TypeScript`)}}let p=e=>e.replace(/[^a-zA-Z0-9]/g,`_`),m=[];m.push("```mermaid"),m.push(`C4Container`),m.push(` title C4 Container: ${n}`),m.push(``);let h=e=>{let t=[],n=l.get(e);n&&(t.push(`${n.count} handlers`),n.triggers.size>0&&t.push([...n.triggers].join(`, `)));let r=c.get(e);return r&&t.push(`${r} exports`),t.join(` · `)||``},g=e=>{let t=f.get(e)||`TypeScript`;if(e.startsWith(`infra`))return`CDK/${t}`;if(l.has(e)){let n=l.get(e);if(n?.triggers.has(`SQS`)||n?.triggers.has(`SNS`)||n?.triggers.has(`API Gateway`))return`Lambda/${t}`;if(n?.triggers.has(`HTTP Server`)||n?.triggers.has(`HTTP Endpoint`))return`Spring Boot/${t}`}return t};for(let[e,t]of[...d.entries()].sort()){let r=new Set([`com`,`org`,`net`,`io`,`dev`,`src`]).has(e)?n.charAt(0).toUpperCase()+n.slice(1):e.charAt(0).toUpperCase()+e.slice(1);if(t.length===1&&t[0]===e){let e=t[0];m.push(` Container(${p(e)}, "${e}", "${g(e)}", "${h(e)}")`)}else{m.push(` System_Boundary(${p(e)}_boundary, "${r}") {`);for(let e of t){let t=e.split(`/`).slice(1).join(`/`)||e;m.push(` Container(${p(e)}, "${t}", "${g(e)}", "${h(e)}")`)}m.push(` }`)}m.push(``)}if(u.length>0){for(let e of u)m.push(` System_Ext(ext_${e.id}, "${e.name}", "AWS")`);m.push(``)}let _=[...o.entries()].sort((e,t)=>t[1]-e[1]);for(let[e,t]of _.slice(0,30)){let[n,r]=e.split(`|`);m.push(` Rel(${p(n)}, ${p(r)}, "Uses", "${t} calls")`)}m.push("```");let v=`## C4 Container Diagram\n\n${m.join(`
9
+ `)}`,y=[];y.push("```mermaid"),y.push(`graph TB`);let b=new Set;for(let[,e]of l)for(let t of e.triggers)b.add(t);if(b.size>0){y.push(` subgraph Triggers["External Triggers"]`);for(let e of[...b].sort()){let t=`trigger_${e.replace(/[^a-zA-Z0-9]/g,`_`)}`;y.push(` ${t}(("${e}"))`)}y.push(` end`),y.push(``)}let x=[...s].filter(e=>l.has(e)).sort(),C=[...s].filter(e=>!l.has(e)).sort();if(x.length>0){y.push(` subgraph Services["Service Layer"]`);for(let e of x){let t=`flow_${p(e)}`,n=e.includes(`/`)?e.split(`/`).pop()??e:e,r=l.get(e);y.push(` ${t}["${n} (${r?.count??0} handlers)"]`)}y.push(` end`),y.push(``)}if(C.length>0){y.push(` subgraph Libraries["Shared Libraries"]`);for(let e of C){let t=`flow_${p(e)}`,n=e.includes(`/`)?e.split(`/`).pop()??e:e;y.push(` ${t}["${n}"]`)}y.push(` end`),y.push(``)}if(u.length>0){y.push(` subgraph External["AWS Services"]`);for(let e of u)y.push(` flow_ext_${e.id}[("${e.name}")]`);y.push(` end`),y.push(``)}for(let e of x){let t=l.get(e);if(!t)continue;let n=`flow_${p(e)}`;for(let e of t.triggers){let t=`trigger_${e.replace(/[^a-zA-Z0-9]/g,`_`)}`;y.push(` ${t} --> ${n}`)}}let T=_.filter(([e])=>{let[t,n]=e.split(`|`);return l.has(t)&&!l.has(n)});for(let[e,t]of T.slice(0,15)){let[n,r]=e.split(`|`);y.push(` flow_${p(n)} -->|${t}| flow_${p(r)}`)}let E=_.filter(([e])=>{let[t,n]=e.split(`|`);return!l.has(t)&&!l.has(n)});for(let[e,t]of E.slice(0,10)){let[n,r]=e.split(`|`);y.push(` flow_${p(n)} -->|${t}| flow_${p(r)}`)}y.push("```");let D=`## Architectural Flow\n\n${y.join(`
10
+ `)}`,O=[`# Architecture Diagrams: ${n}\n`];return O.push(v),O.push(D),O.join(`
19
11
 
20
12
  ---
21
13
 
22
- `)}function ue(g,u){if(u.has(g))return g;for(const t of[".ts",".tsx",".js",".jsx"])if(u.has(`${g}${t}`))return`${g}${t}`;return u.has(`${g}/index.ts`)?`${g}/index.ts`:g}const ge=new Set(["node_modules",".git","dist","build","coverage",".turbo",".cache","cdk.out","__pycache__",".venv","target","obj",".gradle"]),G=[{glob:/\.env(?:\.\w+)?$/,type:"env"},{glob:/\.env\.example$/,type:"env"},{glob:/package\.json$/,type:"package-json"},{glob:/^(?:app|config|settings|default)\.(?:json|ya?ml|toml)$/i,type:"config"},{glob:/docker-compose\.ya?ml$/,type:"docker"},{glob:/cdk\.json$/,type:"cdk"},{glob:/turbo\.json$/,type:"tooling"},{glob:/application\.(?:properties|ya?ml)$/i,type:"spring"},{glob:/settings\.py$/,type:"django"},{glob:/\.flaskenv$/,type:"env"},{glob:/appsettings\.(?:\w+\.)?json$/i,type:"dotnet"}];async function pe(g,u){const t=[],p=await fe(g),n=/kb\.config\.json$/;for(const a of p)try{const i=H(g,a).replace(/\\/g,"/");if(n.test(i))continue;const d=await Z(a,"utf-8"),y=de(a);if(i.split("/").length-1>1&&y==="tooling")continue;const b=he(d,y);b.length>0&&t.push({file:i,type:y,values:b})}catch{}return me(t,u)}async function fe(g){const u=[],t=async(p,n)=>{if(!(n>3))try{const a=await J(p,{withFileTypes:!0});for(const i of a){if(ge.has(i.name))continue;const d=O(p,i.name);i.isDirectory()&&!i.name.startsWith(".")?await t(d,n+1):i.isFile()&&G.some(y=>y.glob.test(i.name))&&u.push(d)}}catch{}};return await t(g,0),u}function de(g){const u=N(g);for(const t of G)if(t.glob.test(u))return t.type;return"unknown"}const K=/(?:secret|password|token|key|api.?key|auth|credential|private)/i;function he(g,u){const t=[];if(u==="env")for(const p of g.split(`
23
- `)){const n=p.trim();if(!n||n.startsWith("#"))continue;const a=n.indexOf("=");if(a===-1)continue;const i=n.slice(0,a).trim(),d=n.slice(a+1).trim(),y=K.test(i);t.push({key:i,value:y?"***":d,sensitive:y})}else if(u==="package-json")try{const p=JSON.parse(g);if(p.scripts)for(const[n,a]of Object.entries(p.scripts))t.push({key:`scripts.${n}`,value:String(a),sensitive:!1});if(p.engines)for(const[n,a]of Object.entries(p.engines))t.push({key:`engines.${n}`,value:String(a),sensitive:!1})}catch{}else if(u==="spring")for(const p of g.split(`
24
- `)){const n=p.trim();if(!n||n.startsWith("#")||n.startsWith("---"))continue;const a=n.match(/^([\w.[\]-]+)\s*[=:]\s*(.*)$/);if(a){const i=a[1],d=a[2].trim(),y=K.test(i);t.push({key:i,value:y?"***":d,sensitive:y})}}else if(u==="json"||u==="config"||u==="cdk"||u==="tooling"||u==="dotnet")try{const p=JSON.parse(g);W(p,"",t,0)}catch{}else if(u==="django")for(const p of g.split(`
25
- `)){const n=p.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.+)$/);if(n){const a=n[1],i=n[2].trim(),d=K.test(a);t.push({key:a,value:d?"***":i.slice(0,100),sensitive:d})}}return t}function W(g,u,t,p){if(!(p>3)&&g!=null&&typeof g=="object"&&!Array.isArray(g))for(const[n,a]of Object.entries(g)){const i=u?`${u}.${n}`:n;if(typeof a=="object"&&a!==null&&!Array.isArray(a))W(a,i,t,p+1);else{const d=K.test(n),y=Array.isArray(a)?`[${a.length} items]`:String(a);t.push({key:i,value:d?"***":y.slice(0,120),sensitive:d})}}}function me(g,u){const t=[];if(t.push(`## Configuration Values: ${u}
26
- `),g.length===0)return t.push("No configuration files detected."),t.join(`
27
- `);t.push(`**${g.length} config files** found
28
- `);const p=new Map;for(const a of g)p.has(a.type)||p.set(a.type,[]),p.get(a.type)?.push(a);for(const[a,i]of p){if(a==="package-json"&&i.length>2){t.push(`### ${a}
29
- `);const d=i.find($=>$.file==="package.json");if(d){t.push(`#### ${d.file}
30
- `),t.push("| Key | Value | Sensitive |"),t.push("|-----|-------|-----------|");for(const $ of d.values.slice(0,50)){const b=$.value.replace(/\|/g,"\\|");t.push(`| ${$.key} | ${b} | ${$.sensitive?"\u26A0\uFE0F yes":"no"} |`)}t.push("")}const y=i.filter($=>$.file!=="package.json");if(y.length>0){const $=new Map;for(const l of y)for(const r of l.values){const w=`${r.key}=${r.value}`;$.set(w,($.get(w)??0)+1)}const b=Math.max(2,Math.floor(y.length*.5));t.push(`#### Sub-packages (${y.length} packages)
31
- `);const M=[...$.entries()].filter(([,l])=>l>=b).map(([l])=>{const[r,...w]=l.split("=");return{key:r,value:w.join("=")}});if(M.length>0){t.push(`**Common scripts** (shared by most sub-packages):
32
- `),t.push("| Key | Value |"),t.push("|-----|-------|");for(const l of M)t.push(`| ${l.key} | ${l.value.replace(/\|/g,"\\|")} |`);t.push("")}const C=new Map;for(const l of y){const r=l.values.filter(P=>{const T=`${P.key}=${P.value}`;return($.get(T)??0)<b});if(r.length===0)continue;const w=r.map(P=>`${P.key}=${P.value}`).sort().join("||"),_=C.get(w);_?_.files.push(l.file):C.set(w,{files:[l.file],entries:r.map(P=>({key:P.key,value:P.value}))})}for(const[,l]of C){l.files.length>1?t.push(`**${l.files.length} packages** (${l.files.map(r=>r.split("/").slice(-2,-1)[0]||r).join(", ")}):`):t.push(`**${l.files[0]}**:`),t.push("| Key | Value |"),t.push("|-----|-------|");for(const r of l.entries)t.push(`| ${r.key} | ${r.value.replace(/\|/g,"\\|")} |`);t.push("")}}continue}if(i.length>3){const d=i.map(b=>b.values.map(M=>`${M.key}=${M.value}`).sort().join("||")),y=d.sort((b,M)=>d.filter(C=>C===M).length-d.filter(C=>C===b).length)[0];if(d.filter(b=>b===y).length>2){t.push(`### ${a}
33
- `);const b=i[d.indexOf(y)],M=i.filter((l,r)=>d[r]===y).map(l=>l.file),C=i.filter((l,r)=>d[r]!==y);t.push(`**${M.length} identical files**: ${M.join(", ")}
34
- `),t.push("| Key | Value | Sensitive |"),t.push("|-----|-------|-----------|");for(const l of b.values.slice(0,30)){const r=l.value.replace(/\|/g,"\\|");t.push(`| ${l.key} | ${r} | ${l.sensitive?"\u26A0\uFE0F yes":"no"} |`)}t.push("");for(const l of C){t.push(`#### ${l.file}
35
- `),t.push("| Key | Value | Sensitive |"),t.push("|-----|-------|-----------|");for(const r of l.values.slice(0,30)){const w=r.value.replace(/\|/g,"\\|");t.push(`| ${r.key} | ${w} | ${r.sensitive?"\u26A0\uFE0F yes":"no"} |`)}t.push("")}continue}}t.push(`### ${a}
36
- `);for(const d of i){t.push(`#### ${d.file}
37
- `),t.push("| Key | Value | Sensitive |"),t.push("|-----|-------|-----------|");for(const y of d.values.slice(0,50)){const $=y.value.replace(/\|/g,"\\|");t.push(`| ${y.key} | ${$} | ${y.sensitive?"\u26A0\uFE0F yes":"no"} |`)}d.values.length>50&&t.push(`
38
- _...and ${d.values.length-50} more values._`),t.push("")}}const n=g.reduce((a,i)=>a+i.values.filter(d=>d.sensitive).length,0);return n>0&&t.push(`
39
- **\u26A0\uFE0F ${n} sensitive values detected** (values masked).`),t.join(`
40
- `)}async function ve(g){const u=Date.now(),t=Q(g.path),p=N(t),n=g.mode??"memory",a=g.outDir??O(t,".ai","kb"),i=new oe,d=new X,y=new re,$=new ne,b=new ee,M=new Y,C=[{name:"structure",fn:()=>i.analyze(t,{format:"markdown",maxDepth:3,sourceOnly:!0})},{name:"dependencies",fn:()=>d.analyze(t,{format:"markdown"})},{name:"entry-points",fn:()=>b.analyze(t)},{name:"symbols",fn:()=>y.analyze(t,{format:"markdown"})},{name:"patterns",fn:()=>$.analyze(t)},{name:"diagram",fn:()=>M.analyze(t,{diagramType:"architecture"})}],l=await Promise.allSettled(C.map(async e=>{const o=Date.now(),s=await e.fn();return{name:e.name,result:s,durationMs:Date.now()-o}})),r=[],w=new Map,_=new Map;for(const e of l)if(e.status==="fulfilled"){const{name:o,result:s,durationMs:c}=e.value,h=s;r.push({name:o,status:"success",output:h.output,durationMs:c}),w.set(o,h.output),_.set(o,h.data)}else{const o=e.reason,s=l.indexOf(e),c=C[s].name;r.push({name:c,status:"failed",output:"",durationMs:0,error:o.message})}const P=Date.now();let T=null;try{let e=await se(t);if((!e||e.edges.length===0)&&(e=await te(t)),e&&e.edges.length>0){T=new Map;for(const o of e.edges){let s=T.get(o.from);s||(s=new Map,T.set(o.from,s));const c=s.get(o.to);if(c)for(const h of o.symbols)c.includes(h)||c.push(h);else s.set(o.to,[...o.symbols])}}}catch{}const k=Date.now()-P,f=Date.now(),x=ce(_,p,T),v=Date.now()-f+k;if(r.push({name:"code-map",status:"success",output:x,durationMs:v}),w.set("code-map",x),T&&T.size>0){const e=le(T,_,p),o=r.find(s=>s.name==="diagram");o&&(o.output=e,w.set("diagram",e))}const j=Date.now(),D=await pe(t,p),m=Date.now()-j;r.push({name:"config-values",status:"success",output:D,durationMs:m}),w.set("config-values",D);const S=ie(r,n,p,_);if(r.push({name:"synthesis-guide",status:"success",output:S,durationMs:0}),w.set("synthesis-guide",S),n==="generate"){if(F(a))for(const s of q(a))(s.endsWith(".md")||s.endsWith(".json"))&&U(O(a,s),{force:!0});V(a,{recursive:!0});const e=new Date().toISOString();for(const[s,c]of w){const h=`${s}.md`,A=O(a,h),E=c.replaceAll(t,p),I=`<!-- Generated: ${e} -->
41
- <!-- Project: ${p} -->
42
- <!-- Source: ${t} -->
43
-
44
- `;B(A,I+E,"utf-8")}const o=[`<!-- Generated: ${e} -->`,`<!-- Project: ${p} -->`,`<!-- Source: ${t} -->`,"",`# ${p} \u2014 Codebase Knowledge`,"","## Contents",""];for(const s of r){const c=`${s.name}.md`,h=L[s.name]??s.name,A=s.status==="success"?"\u2713":"\u2717",E=s.durationMs>0?` (${s.durationMs}ms)`:"";o.push(`- ${A} [${h}](./${c})${E}`)}o.push(""),B(O(a,"README.md"),o.join(`
45
- `),"utf-8")}return{path:t,mode:n,steps:r,outDir:n==="generate"?a:void 0,totalDurationMs:Date.now()-u}}export{ve as onboard};
14
+ `)}function E(e,t){if(t.has(e))return e;for(let n of[`.ts`,`.tsx`,`.js`,`.jsx`])if(t.has(`${e}${n}`))return`${e}${n}`;return t.has(`${e}/index.ts`)?`${e}/index.ts`:e}const D=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`obj`,`.gradle`]),O=[{glob:/\.env(?:\.\w+)?$/,type:`env`},{glob:/\.env\.example$/,type:`env`},{glob:/package\.json$/,type:`package-json`},{glob:/^(?:app|config|settings|default)\.(?:json|ya?ml|toml)$/i,type:`config`},{glob:/docker-compose\.ya?ml$/,type:`docker`},{glob:/cdk\.json$/,type:`cdk`},{glob:/turbo\.json$/,type:`tooling`},{glob:/application\.(?:properties|ya?ml)$/i,type:`spring`},{glob:/settings\.py$/,type:`django`},{glob:/\.flaskenv$/,type:`env`},{glob:/appsettings\.(?:\w+\.)?json$/i,type:`dotnet`}];async function k(e,t){let n=[],r=await A(e),i=/kb\.config\.json$/;for(let t of r)try{let r=f(e,t).replace(/\\/g,`/`);if(i.test(r))continue;let a=await c(t,`utf-8`),o=j(t);if(r.split(`/`).length-1>1&&o===`tooling`)continue;let s=N(a,o);s.length>0&&n.push({file:r,type:o,values:s})}catch{}return F(n,t)}async function A(e){let t=[],n=async(e,r)=>{if(!(r>3))try{let i=await l(e,{withFileTypes:!0});for(let a of i){if(D.has(a.name))continue;let i=d(e,a.name);a.isDirectory()&&!a.name.startsWith(`.`)?await n(i,r+1):a.isFile()&&O.some(e=>e.glob.test(a.name))&&t.push(i)}}catch{}};return await n(e,0),t}function j(e){let t=u(e);for(let e of O)if(e.glob.test(t))return e.type;return`unknown`}const M=/(?:secret|password|token|key|api.?key|auth|credential|private)/i;function N(e,t){let n=[];if(t===`env`)for(let t of e.split(`
15
+ `)){let e=t.trim();if(!e||e.startsWith(`#`))continue;let r=e.indexOf(`=`);if(r===-1)continue;let i=e.slice(0,r).trim(),a=e.slice(r+1).trim(),o=M.test(i);n.push({key:i,value:o?`***`:a,sensitive:o})}else if(t===`package-json`)try{let t=JSON.parse(e);if(t.scripts)for(let[e,r]of Object.entries(t.scripts))n.push({key:`scripts.${e}`,value:String(r),sensitive:!1});if(t.engines)for(let[e,r]of Object.entries(t.engines))n.push({key:`engines.${e}`,value:String(r),sensitive:!1})}catch{}else if(t===`spring`)for(let t of e.split(`
16
+ `)){let e=t.trim();if(!e||e.startsWith(`#`)||e.startsWith(`---`))continue;let r=e.match(/^([\w.[\]-]+)\s*[=:]\s*(.*)$/);if(r){let e=r[1],t=r[2].trim(),i=M.test(e);n.push({key:e,value:i?`***`:t,sensitive:i})}}else if(t===`json`||t===`config`||t===`cdk`||t===`tooling`||t===`dotnet`)try{P(JSON.parse(e),``,n,0)}catch{}else if(t===`django`)for(let t of e.split(`
17
+ `)){let e=t.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.+)$/);if(e){let t=e[1],r=e[2].trim(),i=M.test(t);n.push({key:t,value:i?`***`:r.slice(0,100),sensitive:i})}}return n}function P(e,t,n,r){if(!(r>3)&&typeof e==`object`&&e&&!Array.isArray(e))for(let[i,a]of Object.entries(e)){let e=t?`${t}.${i}`:i;if(typeof a==`object`&&a&&!Array.isArray(a))P(a,e,n,r+1);else{let t=M.test(i),r=Array.isArray(a)?`[${a.length} items]`:String(a);n.push({key:e,value:t?`***`:r.slice(0,120),sensitive:t})}}}function F(e,t){let n=[];if(n.push(`## Configuration Values: ${t}\n`),e.length===0)return n.push(`No configuration files detected.`),n.join(`
18
+ `);n.push(`**${e.length} config files** found\n`);let r=new Map;for(let t of e)r.has(t.type)||r.set(t.type,[]),r.get(t.type)?.push(t);for(let[e,t]of r){if(e===`package-json`&&t.length>2){n.push(`### ${e}\n`);let r=t.find(e=>e.file===`package.json`);if(r){n.push(`#### ${r.file}\n`),n.push(`| Key | Value | Sensitive |`),n.push(`|-----|-------|-----------|`);for(let e of r.values.slice(0,50)){let t=e.value.replace(/\|/g,`\\|`);n.push(`| ${e.key} | ${t} | ${e.sensitive?`⚠️ yes`:`no`} |`)}n.push(``)}let i=t.filter(e=>e.file!==`package.json`);if(i.length>0){let e=new Map;for(let t of i)for(let n of t.values){let t=`${n.key}=${n.value}`;e.set(t,(e.get(t)??0)+1)}let t=Math.max(2,Math.floor(i.length*.5));n.push(`#### Sub-packages (${i.length} packages)\n`);let r=[...e.entries()].filter(([,e])=>e>=t).map(([e])=>{let[t,...n]=e.split(`=`);return{key:t,value:n.join(`=`)}});if(r.length>0){n.push(`**Common scripts** (shared by most sub-packages):
19
+ `),n.push(`| Key | Value |`),n.push(`|-----|-------|`);for(let e of r)n.push(`| ${e.key} | ${e.value.replace(/\|/g,`\\|`)} |`);n.push(``)}let a=new Map;for(let n of i){let r=n.values.filter(n=>{let r=`${n.key}=${n.value}`;return(e.get(r)??0)<t});if(r.length===0)continue;let i=r.map(e=>`${e.key}=${e.value}`).sort().join(`||`),o=a.get(i);o?o.files.push(n.file):a.set(i,{files:[n.file],entries:r.map(e=>({key:e.key,value:e.value}))})}for(let[,e]of a){e.files.length>1?n.push(`**${e.files.length} packages** (${e.files.map(e=>e.split(`/`).slice(-2,-1)[0]||e).join(`, `)}):`):n.push(`**${e.files[0]}**:`),n.push(`| Key | Value |`),n.push(`|-----|-------|`);for(let t of e.entries)n.push(`| ${t.key} | ${t.value.replace(/\|/g,`\\|`)} |`);n.push(``)}}continue}if(t.length>3){let r=t.map(e=>e.values.map(e=>`${e.key}=${e.value}`).sort().join(`||`)),i=r.sort((e,t)=>r.filter(e=>e===t).length-r.filter(t=>t===e).length)[0];if(r.filter(e=>e===i).length>2){n.push(`### ${e}\n`);let a=t[r.indexOf(i)],o=t.filter((e,t)=>r[t]===i).map(e=>e.file),s=t.filter((e,t)=>r[t]!==i);n.push(`**${o.length} identical files**: ${o.join(`, `)}\n`),n.push(`| Key | Value | Sensitive |`),n.push(`|-----|-------|-----------|`);for(let e of a.values.slice(0,30)){let t=e.value.replace(/\|/g,`\\|`);n.push(`| ${e.key} | ${t} | ${e.sensitive?`⚠️ yes`:`no`} |`)}n.push(``);for(let e of s){n.push(`#### ${e.file}\n`),n.push(`| Key | Value | Sensitive |`),n.push(`|-----|-------|-----------|`);for(let t of e.values.slice(0,30)){let e=t.value.replace(/\|/g,`\\|`);n.push(`| ${t.key} | ${e} | ${t.sensitive?`⚠️ yes`:`no`} |`)}n.push(``)}continue}}n.push(`### ${e}\n`);for(let e of t){n.push(`#### ${e.file}\n`),n.push(`| Key | Value | Sensitive |`),n.push(`|-----|-------|-----------|`);for(let t of e.values.slice(0,50)){let e=t.value.replace(/\|/g,`\\|`);n.push(`| ${t.key} | ${e} | ${t.sensitive?`⚠️ yes`:`no`} |`)}e.values.length>50&&n.push(`\n_...and ${e.values.length-50} more values._`),n.push(``)}}let i=e.reduce((e,t)=>e+t.values.filter(e=>e.sensitive).length,0);return i>0&&n.push(`\n**⚠️ ${i} sensitive values detected** (values masked).`),n.join(`
20
+ `)}async function I(c){let l=Date.now(),f=p(c.path),x=u(f),S=c.mode??`memory`,w=c.outDir??d(f,`.ai`,`kb`),E=new i,D=new e,O=new a,A=new r,j=new n,M=new t,N=[{name:`structure`,fn:()=>E.analyze(f,{format:`markdown`,maxDepth:3,sourceOnly:!0})},{name:`dependencies`,fn:()=>D.analyze(f,{format:`markdown`})},{name:`entry-points`,fn:()=>j.analyze(f)},{name:`symbols`,fn:()=>O.analyze(f,{format:`markdown`})},{name:`patterns`,fn:()=>A.analyze(f)},{name:`diagram`,fn:()=>M.analyze(f,{diagramType:`architecture`})}],P=await Promise.allSettled(N.map(async e=>{let t=Date.now(),n=await e.fn();return{name:e.name,result:n,durationMs:Date.now()-t}})),F=[],I=new Map,L=new Map;for(let e of P)if(e.status===`fulfilled`){let{name:t,result:n,durationMs:r}=e.value,i=n;F.push({name:t,status:`success`,output:i.output,durationMs:r}),I.set(t,i.output),L.set(t,i.data)}else{let t=e.reason,n=N[P.indexOf(e)].name;F.push({name:n,status:`failed`,output:``,durationMs:0,error:t.message})}let R=Date.now(),z=null;try{let e=await s(f);if((!e||e.edges.length===0)&&(e=await o(f)),e&&e.edges.length>0){z=new Map;for(let t of e.edges){let e=z.get(t.from);e||(e=new Map,z.set(t.from,e));let n=e.get(t.to);if(n)for(let e of t.symbols)n.includes(e)||n.push(e);else e.set(t.to,[...t.symbols])}}}catch{}let B=Date.now()-R,V=Date.now(),H=C(L,x,z),U=Date.now()-V+B;if(F.push({name:`code-map`,status:`success`,output:H,durationMs:U}),I.set(`code-map`,H),z&&z.size>0){let e=T(z,L,x),t=F.find(e=>e.name===`diagram`);t&&(t.output=e,I.set(`diagram`,e))}let W=Date.now(),G=await k(f,x),K=Date.now()-W;F.push({name:`config-values`,status:`success`,output:G,durationMs:K}),I.set(`config-values`,G);let q=b(F,S,x,L);if(F.push({name:`synthesis-guide`,status:`success`,output:q,durationMs:0}),I.set(`synthesis-guide`,q),S===`generate`){if(m(w))for(let e of g(w))(e.endsWith(`.md`)||e.endsWith(`.json`))&&_(d(w,e),{force:!0});h(w,{recursive:!0});let e=new Date().toISOString();for(let[t,n]of I){let r=d(w,`${t}.md`),i=n.replaceAll(f,x);v(r,`<!-- Generated: ${e} -->\n<!-- Project: ${x} -->\n<!-- Source: ${f} -->\n\n`+i,`utf-8`)}let t=[`<!-- Generated: ${e} -->`,`<!-- Project: ${x} -->`,`<!-- Source: ${f} -->`,``,`# ${x} — Codebase Knowledge`,``,`## Contents`,``];for(let e of F){let n=`${e.name}.md`,r=y[e.name]??e.name,i=e.status===`success`?`✓`:`✗`,a=e.durationMs>0?` (${e.durationMs}ms)`:``;t.push(`- ${i} [${r}](./${n})${a}`)}t.push(``),v(d(w,`README.md`),t.join(`
21
+ `),`utf-8`)}return{path:f,mode:S,steps:F,outDir:S===`generate`?w:void 0,totalDurationMs:Date.now()-l}}export{I as onboard};
22
+ //# sourceMappingURL=onboard.js.map