@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,3 +1,4 @@
1
- function w(u){const{diff:r}=u,n=r.split(/^diff --git /m).filter(Boolean);return n.length>0&&/^a\//.test(n[0])?D(n):k(r)}function D(u){const r=[];for(const n of u){const e=n.split(`
2
- `),c=e[0]?.match(/a\/(.+?)\s+b\/(.+)/);if(!c)continue;const m=c[1],o=c[2];let a="modified";n.includes("new file mode")?a="added":n.includes("deleted file mode")?a="deleted":m!==o&&(a="renamed");const d=[];let p=0,g=0,s=null,h=0,i=0;for(const t of e){const l=t.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@(.*)$/);if(l){s={oldStart:Number(l[1]),oldLines:Number(l[2]??1),newStart:Number(l[3]),newLines:Number(l[4]??1),header:l[5]?.trim()??"",changes:[]},d.push(s),h=s.oldStart,i=s.newStart;continue}if(!(!s||t.startsWith("\\"))){if(t.startsWith("+")&&!t.startsWith("+++")){s.changes.push({type:"add",line:i,content:t.slice(1)}),p+=1,i+=1;continue}if(t.startsWith("-")&&!t.startsWith("---")){s.changes.push({type:"delete",line:h,content:t.slice(1)}),g+=1,h+=1;continue}t.startsWith(" ")&&(s.changes.push({type:"context",line:i,content:t.slice(1)}),h+=1,i+=1)}}r.push({path:o,oldPath:a==="renamed"?m:void 0,status:a,hunks:d,additions:p,deletions:g})}return r}function k(u){const r=[],n=u.split(`
3
- `);let e=0;for(;e<n.length;){const c=n[e]?.match(/^---\s+(?:a\/)?(.+)/),m=n[e+1]?.match(/^\+\+\+\s+(?:b\/)?(.+)/);if(!c||!m){e++;continue}const o=c[1].trim(),a=m[1].trim();let d="modified";o==="/dev/null"?d="added":a==="/dev/null"?d="deleted":o!==a&&(d="renamed"),e+=2;const p=[];let g=0,s=0;for(;e<n.length&&!n[e]?.startsWith("--- ");){const i=n[e]?.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@(.*)$/);if(i){const t={oldStart:Number(i[1]),oldLines:Number(i[2]??1),newStart:Number(i[3]),newLines:Number(i[4]??1),header:i[5]?.trim()??"",changes:[]};p.push(t);let l=t.oldStart,b=t.newStart;for(e++;e<n.length;){const f=n[e];if(f?.startsWith("@@")||f?.startsWith("--- ")||f?.startsWith("diff "))break;if(f?.startsWith("\\")){e++;continue}if(f?.startsWith("+"))t.changes.push({type:"add",line:b,content:f.slice(1)}),g++,b++;else if(f?.startsWith("-"))t.changes.push({type:"delete",line:l,content:f.slice(1)}),s++,l++;else if(f?.startsWith(" "))t.changes.push({type:"context",line:b,content:f.slice(1)}),l++,b++;else break;e++}}else e++}const h=d==="deleted"?o:a;r.push({path:h,oldPath:d==="renamed"?o:void 0,status:d,hunks:p,additions:g,deletions:s})}return r}export{w as diffParse};
1
+ function e(e){let{diff:r}=e,i=r.split(/^diff --git /m).filter(Boolean);return i.length>0&&/^a\//.test(i[0])?t(i):n(r)}function t(e){let t=[];for(let n of e){let e=n.split(`
2
+ `),r=e[0]?.match(/a\/(.+?)\s+b\/(.+)/);if(!r)continue;let i=r[1],a=r[2],o=`modified`;n.includes(`new file mode`)?o=`added`:n.includes(`deleted file mode`)?o=`deleted`:i!==a&&(o=`renamed`);let s=[],c=0,l=0,u=null,d=0,f=0;for(let t of e){let e=t.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@(.*)$/);if(e){u={oldStart:Number(e[1]),oldLines:Number(e[2]??1),newStart:Number(e[3]),newLines:Number(e[4]??1),header:e[5]?.trim()??``,changes:[]},s.push(u),d=u.oldStart,f=u.newStart;continue}if(!(!u||t.startsWith(`\\`))){if(t.startsWith(`+`)&&!t.startsWith(`+++`)){u.changes.push({type:`add`,line:f,content:t.slice(1)}),c+=1,f+=1;continue}if(t.startsWith(`-`)&&!t.startsWith(`---`)){u.changes.push({type:`delete`,line:d,content:t.slice(1)}),l+=1,d+=1;continue}t.startsWith(` `)&&(u.changes.push({type:`context`,line:f,content:t.slice(1)}),d+=1,f+=1)}}t.push({path:a,oldPath:o===`renamed`?i:void 0,status:o,hunks:s,additions:c,deletions:l})}return t}function n(e){let t=[],n=e.split(`
3
+ `),r=0;for(;r<n.length;){let e=n[r]?.match(/^---\s+(?:a\/)?(.+)/),i=n[r+1]?.match(/^\+\+\+\s+(?:b\/)?(.+)/);if(!e||!i){r++;continue}let a=e[1].trim(),o=i[1].trim(),s=`modified`;a===`/dev/null`?s=`added`:o===`/dev/null`?s=`deleted`:a!==o&&(s=`renamed`),r+=2;let c=[],l=0,u=0;for(;r<n.length&&!n[r]?.startsWith(`--- `);){let e=n[r]?.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@(.*)$/);if(e){let t={oldStart:Number(e[1]),oldLines:Number(e[2]??1),newStart:Number(e[3]),newLines:Number(e[4]??1),header:e[5]?.trim()??``,changes:[]};c.push(t);let i=t.oldStart,a=t.newStart;for(r++;r<n.length;){let e=n[r];if(e?.startsWith(`@@`)||e?.startsWith(`--- `)||e?.startsWith(`diff `))break;if(e?.startsWith(`\\`)){r++;continue}if(e?.startsWith(`+`))t.changes.push({type:`add`,line:a,content:e.slice(1)}),l++,a++;else if(e?.startsWith(`-`))t.changes.push({type:`delete`,line:i,content:e.slice(1)}),u++,i++;else if(e?.startsWith(` `))t.changes.push({type:`context`,line:a,content:e.slice(1)}),i++,a++;else break;r++}}else r++}let d=s===`deleted`?a:o;t.push({path:d,oldPath:s===`renamed`?a:void 0,status:s,hunks:c,additions:l,deletions:u})}return t}export{e as diffParse};
4
+ //# sourceMappingURL=diff-parse.js.map
@@ -1,53 +1,51 @@
1
- /**
2
- * kb_digest — Multi-source context compressor.
3
- *
4
- * Compress N text blocks into a token-budgeted digest with source attribution
5
- * and pinned structured fields. Uses embedding similarity — no LLM needed.
6
- */
7
- import type { IEmbedder } from '@kb/embeddings';
8
- export interface DigestSource {
9
- /** Unique identifier for this source */
10
- id: string;
11
- /** The text to compress */
12
- text: string;
13
- /** Priority weight (default: 1). Higher = more budget share */
14
- weight?: number;
1
+ import { IEmbedder } from "@kb/embeddings";
2
+
3
+ //#region packages/tools/src/digest.d.ts
4
+ interface DigestSource {
5
+ /** Unique identifier for this source */
6
+ id: string;
7
+ /** The text to compress */
8
+ text: string;
9
+ /** Priority weight (default: 1). Higher = more budget share */
10
+ weight?: number;
15
11
  }
16
- export interface DigestOptions {
17
- /** Source texts to compress */
18
- sources: DigestSource[];
19
- /** Focus query — what matters for the next step? */
20
- query: string;
21
- /** Target budget in characters (default: 4000) */
22
- maxChars?: number;
23
- /** Key fields to always extract via keyword matching */
24
- pinFields?: string[];
25
- /** Segmentation strategy (default: 'paragraph') */
26
- segmentation?: 'paragraph' | 'sentence' | 'line';
12
+ interface DigestOptions {
13
+ /** Source texts to compress */
14
+ sources: DigestSource[];
15
+ /** Focus query — what matters for the next step? */
16
+ query: string;
17
+ /** Target budget in characters (default: 4000) */
18
+ maxChars?: number;
19
+ /** Key fields to always extract via keyword matching */
20
+ pinFields?: string[];
21
+ /** Segmentation strategy (default: 'paragraph') */
22
+ segmentation?: 'paragraph' | 'sentence' | 'line';
27
23
  }
28
- export interface DigestFieldEntry {
29
- sourceId: string;
30
- value: string;
24
+ interface DigestFieldEntry {
25
+ sourceId: string;
26
+ value: string;
31
27
  }
32
- export interface DigestResult {
33
- /** Compressed narrative (all sources merged, reading order maintained) */
34
- text: string;
35
- /** Extracted structured fields */
36
- fields: Record<string, DigestFieldEntry[]>;
37
- /** Per-source compression stats */
38
- sourceStats: Array<{
39
- id: string;
40
- originalChars: number;
41
- keptChars: number;
42
- segmentsKept: number;
43
- segmentsTotal: number;
44
- }>;
45
- totalOriginalChars: number;
46
- totalCompressedChars: number;
47
- ratio: number;
28
+ interface DigestResult {
29
+ /** Compressed narrative (all sources merged, reading order maintained) */
30
+ text: string;
31
+ /** Extracted structured fields */
32
+ fields: Record<string, DigestFieldEntry[]>;
33
+ /** Per-source compression stats */
34
+ sourceStats: Array<{
35
+ id: string;
36
+ originalChars: number;
37
+ keptChars: number;
38
+ segmentsKept: number;
39
+ segmentsTotal: number;
40
+ }>;
41
+ totalOriginalChars: number;
42
+ totalCompressedChars: number;
43
+ ratio: number;
48
44
  }
49
45
  /**
50
46
  * Compress multiple text sources into a single digest.
51
47
  */
52
- export declare function digest(embedder: IEmbedder, options: DigestOptions): Promise<DigestResult>;
48
+ declare function digest(embedder: IEmbedder, options: DigestOptions): Promise<DigestResult>;
49
+ //#endregion
50
+ export { DigestFieldEntry, DigestOptions, DigestResult, DigestSource, digest };
53
51
  //# sourceMappingURL=digest.d.ts.map
@@ -1,7 +1,7 @@
1
- import{cosineSimilarity as I,estimateTokens as k,segment as N}from"./text-utils.js";const L=["status","files","decisions","blockers","artifacts","next"],O={status:/\b(?:status|result)\s*[:=]/i,files:/\b(?:files?|modified|created|deleted)\s*[:=]/i,artifacts:/\b(?:artifacts?)\s*[:=]/i,decisions:/\b(?:decisions?|decided|chose|selected)\s*[:=]/i,blockers:/\b(?:blockers?|blocked|blocking)\s*[:=]/i,next:/\b(?:next\s*(?:steps?|actions?)|todo|follow.up)\s*[:=]/i},$={status:/(?:^|\b)(?:status|result)\s*[:=]\s*(.+)$/i,files:/(?:^|\b)(?:files?|modified|created|deleted)\s*[:=]\s*(.+)$/i,artifacts:/(?:^|\b)(?:artifacts?)\s*[:=]\s*(.+)$/i,decisions:/(?:^|\b)(?:decisions?|decided|chose|selected)\s*[:=]\s*(.+)$/i,blockers:/(?:^|\b)(?:blockers?|blocked|blocking)\s*[:=]\s*(.+)$/i,next:/(?:^|\b)(?:next\s*(?:steps?|actions?)|todo|follow.up)\s*[:=]\s*(.+)$/i},R=/\b(?:APPROVED|NEEDS_REVISION|BLOCKED|SUCCESS|PARTIAL|FAILED|ESCALATE)\b/i,b=.01;function M(e){const n=e??[...L];return[...new Set(n.map(r=>r.toLowerCase()))]}function _(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?1:e}function K(e,n){const r=new Set;for(const i of n)O[i]?.test(e)&&r.add(i);return n.includes("status")&&R.test(e)&&r.add("status"),[...r]}function V(e,n){const r=n.split(`
2
- `).map(i=>i.trim()).filter(i=>i.length>0);for(const i of r){const g=$[e]?.exec(i);if(g?.[1])return g[1].trim();if(e==="status"){const m=i.match(R);if(m)return m[0]}}return n.trim()}function q(e,n,r,i){e[n]||(e[n]=[]),e[n].push({sourceId:r,value:i})}function U(e,n,r,i){return e.map(d=>{const g=N(d.text,n).map((s,o)=>{const l=K(s,r);for(const h of l)q(i,h,d.id,V(h,s));return{index:o,text:s,pinnedFields:l,score:0}}),m=g.filter(s=>s.pinnedFields.length>0).reduce((s,o)=>s+o.text.length,0),f=g.filter(s=>s.pinnedFields.length===0).reduce((s,o)=>s+o.text.length,0);return{id:d.id,originalText:d.text,weight:_(d.weight),segments:g,pinnedChars:m,nonPinnedChars:f}})}function j(e,n){const r=new Map(e.map(g=>[g.id,0]));let i=Math.max(0,n),d=e.filter(g=>g.nonPinnedChars>0);for(;i>b&&d.length>0;){const g=d.reduce((s,o)=>s+o.weight,0);let m=0;const f=[];for(const s of d){const o=r.get(s.id)??0,l=s.nonPinnedChars-o;if(l<=b)continue;const h=i*(s.weight/g),x=Math.min(h,l);r.set(s.id,o+x),m+=x,l-x>b&&f.push(s)}if(m<=b)break;i-=m,d=f}return r}function A(e){return e.map(n=>`[${n.id}]
3
- ${n.text}`).join(`
1
+ import{cosineSimilarity as e,estimateTokens as t,segment as n}from"./text-utils.js";const r=[`status`,`files`,`decisions`,`blockers`,`artifacts`,`next`],i={status:/\b(?:status|result)\s*[:=]/i,files:/\b(?:files?|modified|created|deleted)\s*[:=]/i,artifacts:/\b(?:artifacts?)\s*[:=]/i,decisions:/\b(?:decisions?|decided|chose|selected)\s*[:=]/i,blockers:/\b(?:blockers?|blocked|blocking)\s*[:=]/i,next:/\b(?:next\s*(?:steps?|actions?)|todo|follow.up)\s*[:=]/i},a={status:/(?:^|\b)(?:status|result)\s*[:=]\s*(.+)$/i,files:/(?:^|\b)(?:files?|modified|created|deleted)\s*[:=]\s*(.+)$/i,artifacts:/(?:^|\b)(?:artifacts?)\s*[:=]\s*(.+)$/i,decisions:/(?:^|\b)(?:decisions?|decided|chose|selected)\s*[:=]\s*(.+)$/i,blockers:/(?:^|\b)(?:blockers?|blocked|blocking)\s*[:=]\s*(.+)$/i,next:/(?:^|\b)(?:next\s*(?:steps?|actions?)|todo|follow.up)\s*[:=]\s*(.+)$/i},o=/\b(?:APPROVED|NEEDS_REVISION|BLOCKED|SUCCESS|PARTIAL|FAILED|ESCALATE)\b/i,s=.01;function c(e){let t=e??[...r];return[...new Set(t.map(e=>e.toLowerCase()))]}function l(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?1:e}function u(e,t){let n=new Set;for(let r of t)i[r]?.test(e)&&n.add(r);return t.includes(`status`)&&o.test(e)&&n.add(`status`),[...n]}function d(e,t){let n=t.split(`
2
+ `).map(e=>e.trim()).filter(e=>e.length>0);for(let t of n){let n=a[e]?.exec(t);if(n?.[1])return n[1].trim();if(e===`status`){let e=t.match(o);if(e)return e[0]}}return t.trim()}function f(e,t,n,r){e[t]||(e[t]=[]),e[t].push({sourceId:n,value:r})}function p(e,t,r,i){return e.map(e=>{let a=n(e.text,t).map((t,n)=>{let a=u(t,r);for(let n of a)f(i,n,e.id,d(n,t));return{index:n,text:t,pinnedFields:a,score:0}}),o=a.filter(e=>e.pinnedFields.length>0).reduce((e,t)=>e+t.text.length,0),s=a.filter(e=>e.pinnedFields.length===0).reduce((e,t)=>e+t.text.length,0);return{id:e.id,originalText:e.text,weight:l(e.weight),segments:a,pinnedChars:o,nonPinnedChars:s}})}function m(e,t){let n=new Map(e.map(e=>[e.id,0])),r=Math.max(0,t),i=e.filter(e=>e.nonPinnedChars>0);for(;r>s&&i.length>0;){let e=i.reduce((e,t)=>e+t.weight,0),t=0,a=[];for(let o of i){let i=n.get(o.id)??0,c=o.nonPinnedChars-i;if(c<=s)continue;let l=r*(o.weight/e),u=Math.min(l,c);n.set(o.id,i+u),t+=u,c-u>s&&a.push(o)}if(t<=s)break;r-=t,i=a}return n}function h(e){return e.map(e=>`[${e.id}]\n${e.text}`).join(`
4
3
 
5
- `)}function B(e,n){return e===0?0:n/e}async function z(e,n){const{sources:r,query:i,maxChars:d=4e3,pinFields:g,segmentation:m="paragraph"}=n,f={},s=M(g),o=U(r,m,s,f),l=r.reduce((c,u)=>c+u.text.length,0);if(l<=d){const c=o.filter(a=>a.originalText.trim().length>0).map(a=>({id:a.id,text:a.originalText})),u=o.map(a=>({id:a.id,originalChars:a.originalText.length,keptChars:a.originalText.length,segmentsKept:a.segments.length,segmentsTotal:a.segments.length}));return{text:A(c),fields:f,sourceStats:u,totalOriginalChars:l,totalCompressedChars:l,ratio:l===0?0:1}}const h=await e.embedQuery(i);for(const c of o)for(const u of c.segments){if(u.pinnedFields.length>0)continue;const a=await e.embed(u.text);u.score=I(h,a)}const x=o.reduce((c,u)=>c+u.pinnedChars,0),w=j(o,d-x),T=[],y=[];let P=0;for(const c of o){const u=w.get(c.id)??0,a=new Map;let C=0;const v=c.segments.filter(t=>t.pinnedFields.length===0).sort((t,p)=>p.score-t.score||k(t.text)-k(p.text)||t.index-p.index);let S;for(const t of v){const p=u-C;if(p<=b)break;if(t.text.length<=p+b){a.set(t.index,t.text),C+=t.text.length;continue}S||(S=t)}const F=Math.floor(u-C);if(S&&F>0){const t=S.text.slice(0,F).trimEnd();t.length>0&&(a.set(S.index,t),C+=t.length)}const E=c.segments.filter(t=>t.pinnedFields.length>0||a.has(t.index)).map(t=>({index:t.index,text:a.get(t.index)??t.text})),D=E.reduce((t,p)=>t+p.text.length,0);T.push({id:c.id,originalChars:c.originalText.length,keptChars:D,segmentsKept:E.length,segmentsTotal:c.segments.length}),P+=D,E.length!==0&&y.push({id:c.id,text:E.map(t=>t.text).join(`
4
+ `)}function g(e,t){return e===0?0:t/e}async function _(n,r){let{sources:i,query:a,maxChars:o=4e3,pinFields:l,segmentation:u=`paragraph`}=r,d={},f=p(i,u,c(l),d),_=i.reduce((e,t)=>e+t.text.length,0);if(_<=o){let e=f.filter(e=>e.originalText.trim().length>0).map(e=>({id:e.id,text:e.originalText})),t=f.map(e=>({id:e.id,originalChars:e.originalText.length,keptChars:e.originalText.length,segmentsKept:e.segments.length,segmentsTotal:e.segments.length}));return{text:h(e),fields:d,sourceStats:t,totalOriginalChars:_,totalCompressedChars:_,ratio:_===0?0:1}}let v=await n.embedQuery(a);for(let t of f)for(let r of t.segments)r.pinnedFields.length>0||(r.score=e(v,await n.embed(r.text)));let y=m(f,o-f.reduce((e,t)=>e+t.pinnedChars,0)),b=[],x=[],S=0;for(let e of f){let n=y.get(e.id)??0,r=new Map,i=0,a=e.segments.filter(e=>e.pinnedFields.length===0).sort((e,n)=>n.score-e.score||t(e.text)-t(n.text)||e.index-n.index),o;for(let e of a){let t=n-i;if(t<=s)break;if(e.text.length<=t+s){r.set(e.index,e.text),i+=e.text.length;continue}o||=e}let c=Math.floor(n-i);if(o&&c>0){let e=o.text.slice(0,c).trimEnd();e.length>0&&(r.set(o.index,e),i+=e.length)}let l=e.segments.filter(e=>e.pinnedFields.length>0||r.has(e.index)).map(e=>({index:e.index,text:r.get(e.index)??e.text})),u=l.reduce((e,t)=>e+t.text.length,0);b.push({id:e.id,originalChars:e.originalText.length,keptChars:u,segmentsKept:l.length,segmentsTotal:e.segments.length}),S+=u,l.length!==0&&x.push({id:e.id,text:l.map(e=>e.text).join(`
6
5
 
7
- `)})}return{text:A(y),fields:f,sourceStats:T,totalOriginalChars:l,totalCompressedChars:P,ratio:B(l,P)}}export{z as digest};
6
+ `)})}return{text:h(x),fields:d,sourceStats:b,totalOriginalChars:_,totalCompressedChars:S,ratio:g(_,S)}}export{_ as digest};
7
+ //# sourceMappingURL=digest.js.map
@@ -1,14 +1,17 @@
1
+ //#region packages/tools/src/encode.d.ts
1
2
  /**
2
3
  * kb_encode — Encoding, decoding, and hashing utilities.
3
4
  */
4
- export type EncodeOperation = 'base64_encode' | 'base64_decode' | 'url_encode' | 'url_decode' | 'sha256' | 'md5' | 'jwt_decode' | 'hex_encode' | 'hex_decode';
5
- export interface EncodeOptions {
6
- operation: EncodeOperation;
7
- input: string;
5
+ type EncodeOperation = 'base64_encode' | 'base64_decode' | 'url_encode' | 'url_decode' | 'sha256' | 'md5' | 'jwt_decode' | 'hex_encode' | 'hex_decode';
6
+ interface EncodeOptions {
7
+ operation: EncodeOperation;
8
+ input: string;
8
9
  }
9
- export interface EncodeResult {
10
- output: string;
11
- operation: string;
10
+ interface EncodeResult {
11
+ output: string;
12
+ operation: string;
12
13
  }
13
- export declare function encode(options: EncodeOptions): EncodeResult;
14
+ declare function encode(options: EncodeOptions): EncodeResult;
15
+ //#endregion
16
+ export { EncodeOperation, EncodeOptions, EncodeResult, encode };
14
17
  //# sourceMappingURL=encode.d.ts.map
@@ -1 +1,2 @@
1
- import{createHash as n}from"node:crypto";function i(a){const{operation:t,input:o}=a;let e;switch(t){case"base64_encode":e=Buffer.from(o).toString("base64");break;case"base64_decode":e=Buffer.from(o,"base64").toString("utf8");break;case"url_encode":e=encodeURIComponent(o);break;case"url_decode":e=decodeURIComponent(o);break;case"sha256":e=n("sha256").update(o).digest("hex");break;case"md5":e=n("md5").update(o).digest("hex");break;case"jwt_decode":{const r=o.split(".");if(r.length!==3)throw new Error("Invalid JWT: expected 3 dot-separated parts");const d=JSON.parse(Buffer.from(r[0],"base64url").toString()),s=JSON.parse(Buffer.from(r[1],"base64url").toString());e=JSON.stringify({header:d,payload:s},null,2);break}case"hex_encode":e=Buffer.from(o).toString("hex");break;case"hex_decode":e=Buffer.from(o,"hex").toString("utf8");break;default:throw new Error(`Unknown operation: ${t}`)}return{output:e,operation:t}}export{i as encode};
1
+ import{createHash as e}from"node:crypto";function t(t){let{operation:n,input:r}=t,i;switch(n){case`base64_encode`:i=Buffer.from(r).toString(`base64`);break;case`base64_decode`:i=Buffer.from(r,`base64`).toString(`utf8`);break;case`url_encode`:i=encodeURIComponent(r);break;case`url_decode`:i=decodeURIComponent(r);break;case`sha256`:i=e(`sha256`).update(r).digest(`hex`);break;case`md5`:i=e(`md5`).update(r).digest(`hex`);break;case`jwt_decode`:{let e=r.split(`.`);if(e.length!==3)throw Error(`Invalid JWT: expected 3 dot-separated parts`);let t,n;try{t=JSON.parse(Buffer.from(e[0],`base64url`).toString()),n=JSON.parse(Buffer.from(e[1],`base64url`).toString())}catch{throw Error(`Invalid JWT: header or payload is not valid JSON`)}i=JSON.stringify({header:t,payload:n},null,2);break}case`hex_encode`:i=Buffer.from(r).toString(`hex`);break;case`hex_decode`:i=Buffer.from(r,`hex`).toString(`utf8`);break;default:throw Error(`Unknown operation: ${n}`)}return{output:i,operation:n}}export{t as encode};
2
+ //# sourceMappingURL=encode.js.map
@@ -1,28 +1,31 @@
1
+ //#region packages/tools/src/env-info.d.ts
1
2
  /**
2
3
  * kb_env — System environment and runtime information.
3
4
  */
4
- export interface EnvInfoOptions {
5
- includeEnv?: boolean;
6
- filterEnv?: string;
7
- showSensitive?: boolean;
5
+ interface EnvInfoOptions {
6
+ includeEnv?: boolean;
7
+ filterEnv?: string;
8
+ showSensitive?: boolean;
8
9
  }
9
- export interface EnvInfoResult {
10
- system: {
11
- platform: string;
12
- arch: string;
13
- release: string;
14
- hostname: string;
15
- type: string;
16
- cpus: number;
17
- memoryTotalGb: number;
18
- memoryFreeGb: number;
19
- };
20
- runtime: {
21
- node: string;
22
- v8: string;
23
- };
24
- cwd: string;
25
- env?: Record<string, string>;
10
+ interface EnvInfoResult {
11
+ system: {
12
+ platform: string;
13
+ arch: string;
14
+ release: string;
15
+ hostname: string;
16
+ type: string;
17
+ cpus: number;
18
+ memoryTotalGb: number;
19
+ memoryFreeGb: number;
20
+ };
21
+ runtime: {
22
+ node: string;
23
+ v8: string;
24
+ };
25
+ cwd: string;
26
+ env?: Record<string, string>;
26
27
  }
27
- export declare function envInfo(options?: EnvInfoOptions): EnvInfoResult;
28
+ declare function envInfo(options?: EnvInfoOptions): EnvInfoResult;
29
+ //#endregion
30
+ export { EnvInfoOptions, EnvInfoResult, envInfo };
28
31
  //# sourceMappingURL=env-info.d.ts.map
@@ -1 +1,2 @@
1
- import{arch as m,cpus as l,freemem as f,hostname as p,type as v,platform as u,release as d,totalmem as g}from"node:os";const E=[/key/i,/secret/i,/token/i,/password/i,/passwd/i,/credential/i,/private/i,/certificate/i];function h(o={}){const{includeEnv:i=!1,filterEnv:t,showSensitive:c=!1}=o,s={system:{platform:u(),arch:m(),release:d(),hostname:p(),type:v(),cpus:l().length,memoryTotalGb:Math.round(g()/1024**3*10)/10,memoryFreeGb:Math.round(f()/1024**3*10)/10},runtime:{node:process.versions.node,v8:process.versions.v8},cwd:process.cwd()};if(i){const n={};for(const[e,r]of Object.entries(process.env))r&&(t&&!e.toLowerCase().includes(t.toLowerCase())||(!c&&E.some(a=>a.test(e))?n[e]="[REDACTED]":n[e]=r));s.env=n}return s}export{h as envInfo};
1
+ import{arch as e,cpus as t,freemem as n,hostname as r,platform as i,release as a,totalmem as o,type as s}from"node:os";const c=[/key/i,/secret/i,/token/i,/password/i,/passwd/i,/credential/i,/private/i,/certificate/i];function l(l={}){let{includeEnv:u=!1,filterEnv:d,showSensitive:f=!1}=l,p={system:{platform:i(),arch:e(),release:a(),hostname:r(),type:s(),cpus:t().length,memoryTotalGb:Math.round(o()/1024**3*10)/10,memoryFreeGb:Math.round(n()/1024**3*10)/10},runtime:{node:process.versions.node,v8:process.versions.v8},cwd:process.cwd()};if(u){let e={};for(let[t,n]of Object.entries(process.env))n&&(d&&!t.toLowerCase().includes(d.toLowerCase())||(!f&&c.some(e=>e.test(t))?e[t]=`[REDACTED]`:e[t]=n));p.env=e}return p}export{l as envInfo};
2
+ //# sourceMappingURL=env-info.js.map
@@ -1,13 +1,16 @@
1
- export interface EvalOptions {
2
- code: string;
3
- lang?: 'js' | 'ts';
4
- timeout?: number;
1
+ //#region packages/tools/src/eval.d.ts
2
+ interface EvalOptions {
3
+ code: string;
4
+ lang?: 'js' | 'ts';
5
+ timeout?: number;
5
6
  }
6
- export interface EvalResult {
7
- success: boolean;
8
- output: string;
9
- error?: string;
10
- durationMs: number;
7
+ interface EvalResult {
8
+ success: boolean;
9
+ output: string;
10
+ error?: string;
11
+ durationMs: number;
11
12
  }
12
- export declare function evaluate(options: EvalOptions): EvalResult;
13
+ declare function evaluate(options: EvalOptions): EvalResult;
14
+ //#endregion
15
+ export { EvalOptions, EvalResult, evaluate };
13
16
  //# sourceMappingURL=eval.d.ts.map
@@ -1,3 +1,3 @@
1
- import u from"node:vm";function w(e){const{code:o,lang:c="js",timeout:p=5e3}=e,i=Date.now();try{const s=c==="ts"?g(o):o,n=[],l={console:{log:(...t)=>n.push(t.map(String).join(" ")),error:(...t)=>n.push(`[error] ${t.map(String).join(" ")}`),warn:(...t)=>n.push(`[warn] ${t.map(String).join(" ")}`)},setTimeout:void 0,setInterval:void 0,setImmediate:void 0,fetch:void 0,process:void 0,require:void 0,JSON,Math,Date,Array,Object,String,Number,Boolean,Map,Set,RegExp,Error,Promise,parseInt,parseFloat,isNaN,isFinite},d=u.createContext(l,{codeGeneration:{strings:!1,wasm:!1}}),r=u.runInContext(s,d,{timeout:p});return{success:!0,output:n.length>0?n.join(`
2
- `)+(r!==void 0?`
3
- \u2192 ${a(r)}`:""):r!==void 0?a(r):"(no output)",durationMs:Date.now()-i}}catch(s){return{success:!1,output:"",error:s.message,durationMs:Date.now()-i}}}function a(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}function g(e){return e.replace(/^\s*import\s+type\s+.*?;\s*$/gm,"").replace(/^\s*(?:export\s+)?interface\s+\w+[^{]*\{[\s\S]*?^\s*}\s*$/gm,"").replace(/^\s*(?:export\s+)?type\s+\w+\s*=.*?;\s*$/gm,"").replace(/([,(]\s*[A-Za-z_$][\w$]*)\s*:\s*[^,)=\n]+/g,"$1").replace(/\)\s*:\s*[^={\n]+(?=\s*(?:=>|\{))/g,")").replace(/\s+as\s+[A-Za-z_$][\w$<>,[\]|&\s.]*/g,"").replace(/<(?:[A-Za-z_$][\w$]*\s*,?\s*)+>(?=\s*\()/g,"")}export{w as evaluate};
1
+ import e from"node:vm";function t(t){let{code:i,lang:a=`js`,timeout:o=5e3}=t,s=Date.now();try{let t=a===`ts`?r(i):i,c=[],l={console:{log:(...e)=>c.push(e.map(String).join(` `)),error:(...e)=>c.push(`[error] ${e.map(String).join(` `)}`),warn:(...e)=>c.push(`[warn] ${e.map(String).join(` `)}`)},setTimeout:void 0,setInterval:void 0,setImmediate:void 0,fetch:void 0,process:void 0,require:void 0,JSON,Math,Date,Array,Object,String,Number,Boolean,Map,Set,RegExp,Error,Promise,parseInt,parseFloat,isNaN,isFinite},u=e.createContext(l,{codeGeneration:{strings:!1,wasm:!1}}),d=e.runInContext(t,u,{timeout:o});return{success:!0,output:c.length>0?c.join(`
2
+ `)+(d===void 0?``:`\n→ ${n(d)}`):d===void 0?`(no output)`:n(d),durationMs:Date.now()-s}}catch(e){return{success:!1,output:``,error:e.message,durationMs:Date.now()-s}}}function n(e){if(e===void 0)return`undefined`;if(e===null)return`null`;if(typeof e==`object`)try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}function r(e){return e.replace(/^\s*import\s+type\s+.*?;\s*$/gm,``).replace(/^\s*(?:export\s+)?interface\s+\w+[^{]*\{[\s\S]*?^\s*}\s*$/gm,``).replace(/^\s*(?:export\s+)?type\s+\w+\s*=.*?;\s*$/gm,``).replace(/([,(]\s*[A-Za-z_$][\w$]*)\s*:\s*[^,)=\n]+/g,`$1`).replace(/\)\s*:\s*[^={\n]+(?=\s*(?:=>|\{))/g,`)`).replace(/\s+as\s+[A-Za-z_$][\w$<>,[\]|&\s.]*/g,``).replace(/<(?:[A-Za-z_$][\w$]*\s*,?\s*)+>(?=\s*\()/g,``)}export{t as evaluate};
3
+ //# sourceMappingURL=eval.js.map
@@ -1,79 +1,82 @@
1
+ //#region packages/tools/src/evidence-map.d.ts
1
2
  /**
2
3
  * kb_evidence_map — FORGE Evidence Map CRUD + Gate evaluator.
3
4
  *
4
5
  * Structured storage, validation, and gate evaluation for FORGE Evidence Map entries.
5
6
  * Persisted in .kb-state/evidence-maps.json.
6
7
  */
7
- export type EvidenceStatus = 'V' | 'A' | 'U';
8
- export type UnknownType = 'contract' | 'convention' | 'freshness' | 'runtime' | 'data-flow' | 'impact';
9
- export type GateDecision = 'YIELD' | 'HOLD' | 'HARD_BLOCK' | 'FORCED_DELIVERY';
10
- export type ForgeTier = 'floor' | 'standard' | 'critical';
11
- export interface EvidenceEntry {
12
- id: number;
13
- claim: string;
14
- status: EvidenceStatus;
15
- receipt: string;
16
- criticalPath: boolean;
17
- unknownType?: UnknownType;
8
+ type EvidenceStatus = 'V' | 'A' | 'U';
9
+ type UnknownType = 'contract' | 'convention' | 'freshness' | 'runtime' | 'data-flow' | 'impact';
10
+ type GateDecision = 'YIELD' | 'HOLD' | 'HARD_BLOCK' | 'FORCED_DELIVERY';
11
+ type ForgeTier = 'floor' | 'standard' | 'critical';
12
+ interface EvidenceEntry {
13
+ id: number;
14
+ claim: string;
15
+ status: EvidenceStatus;
16
+ receipt: string;
17
+ criticalPath: boolean;
18
+ unknownType?: UnknownType;
18
19
  }
19
- export interface EvidenceMapState {
20
- taskId: string;
21
- tier: ForgeTier;
22
- entries: EvidenceEntry[];
23
- createdAt: string;
24
- updatedAt: string;
20
+ interface EvidenceMapState {
21
+ taskId: string;
22
+ tier: ForgeTier;
23
+ entries: EvidenceEntry[];
24
+ createdAt: string;
25
+ updatedAt: string;
25
26
  }
26
- export interface GateResult {
27
- decision: GateDecision;
28
- reason: string;
29
- unresolvedCritical: EvidenceEntry[];
30
- warnings: string[];
31
- stats: {
32
- total: number;
33
- verified: number;
34
- assumed: number;
35
- unresolved: number;
36
- };
37
- annotation?: string;
27
+ interface GateResult {
28
+ decision: GateDecision;
29
+ reason: string;
30
+ unresolvedCritical: EvidenceEntry[];
31
+ warnings: string[];
32
+ stats: {
33
+ total: number;
34
+ verified: number;
35
+ assumed: number;
36
+ unresolved: number;
37
+ };
38
+ annotation?: string;
38
39
  }
39
- export type EvidenceMapAction = {
40
- action: 'create';
41
- taskId: string;
42
- tier: ForgeTier;
40
+ type EvidenceMapAction = {
41
+ action: 'create';
42
+ taskId: string;
43
+ tier: ForgeTier;
43
44
  } | {
44
- action: 'add';
45
- taskId: string;
46
- claim: string;
47
- status: EvidenceStatus;
48
- receipt: string;
49
- criticalPath?: boolean;
50
- unknownType?: UnknownType;
45
+ action: 'add';
46
+ taskId: string;
47
+ claim: string;
48
+ status: EvidenceStatus;
49
+ receipt: string;
50
+ criticalPath?: boolean;
51
+ unknownType?: UnknownType;
51
52
  } | {
52
- action: 'update';
53
- taskId: string;
54
- id: number;
55
- status: EvidenceStatus;
56
- receipt: string;
53
+ action: 'update';
54
+ taskId: string;
55
+ id: number;
56
+ status: EvidenceStatus;
57
+ receipt: string;
57
58
  } | {
58
- action: 'get';
59
- taskId: string;
59
+ action: 'get';
60
+ taskId: string;
60
61
  } | {
61
- action: 'gate';
62
- taskId: string;
63
- retryCount?: number;
62
+ action: 'gate';
63
+ taskId: string;
64
+ retryCount?: number;
64
65
  } | {
65
- action: 'list';
66
+ action: 'list';
66
67
  } | {
67
- action: 'delete';
68
- taskId: string;
68
+ action: 'delete';
69
+ taskId: string;
69
70
  };
70
- export interface EvidenceMapResult {
71
- state?: EvidenceMapState;
72
- states?: EvidenceMapState[];
73
- entry?: EvidenceEntry;
74
- gate?: GateResult;
75
- deleted?: boolean;
76
- formattedMap?: string;
71
+ interface EvidenceMapResult {
72
+ state?: EvidenceMapState;
73
+ states?: EvidenceMapState[];
74
+ entry?: EvidenceEntry;
75
+ gate?: GateResult;
76
+ deleted?: boolean;
77
+ formattedMap?: string;
77
78
  }
78
- export declare function evidenceMap(action: EvidenceMapAction, cwd?: string): EvidenceMapResult;
79
+ declare function evidenceMap(action: EvidenceMapAction, cwd?: string): EvidenceMapResult;
80
+ //#endregion
81
+ export { EvidenceEntry, EvidenceMapAction, EvidenceMapResult, EvidenceMapState, EvidenceStatus, ForgeTier, GateDecision, GateResult, UnknownType, evidenceMap };
79
82
  //# sourceMappingURL=evidence-map.d.ts.map
@@ -1,3 +1,3 @@
1
- import{existsSync as p,mkdirSync as g,readFileSync as m,writeFileSync as v}from"node:fs";import{dirname as E,resolve as y}from"node:path";const h=".kb-state",k="evidence-maps.json";function f(t){const n=t??process.cwd();return y(n,h,k)}function o(t){const n=f(t);if(!p(n))return{};const e=m(n,"utf-8");return JSON.parse(e)}function c(t,n){const e=f(n),r=E(e);p(r)||g(r,{recursive:!0}),v(e,`${JSON.stringify(t,null,2)}
2
- `,"utf-8")}function d(t,n){const e=o(n),r=e[t];if(!r)throw new Error(`Evidence map not found: ${t}`);return{maps:e,state:r}}function S(t){return t.reduce((n,e)=>Math.max(n,e.id),0)+1}function M(t){const n=t.trim();if(!n)throw new Error("Claim is required");if(/\r?\n/.test(n))throw new Error("Claim must be a single line");return n}function u(t){return(t??"").replace(/\r?\n/g," ").replace(/\|/g,"\\|")}function s(t){const n=["| # | Claim | Status | Receipt | Critical | Type |","|---|-------|--------|---------|----------|------|"];for(const e of t.entries)n.push(`| ${e.id} | ${u(e.claim)} | ${e.status} | ${u(e.receipt)} | ${e.criticalPath?"yes":"no"} | ${u(e.unknownType)} |`);return n.join(`
3
- `)}function I(t){return{total:t.length,verified:t.filter(n=>n.status==="V").length,assumed:t.filter(n=>n.status==="A").length,unresolved:t.filter(n=>n.status==="U").length}}function w(t){const n=[];for(const e of t.entries)e.status==="V"&&e.receipt.trim()===""&&n.push("V entry without receipt"),e.status==="A"&&t.tier==="critical"&&e.unknownType==="contract"&&n.push("Assumed contract at Critical tier \u2014 should be Verified");return n}function b(t){return`FORCED DELIVERY annotation: unresolved entries remain -> ${t.filter(r=>r.status==="U").map(r=>`#${r.id} ${r.claim}`).join("; ")}`}function A(t,n=0){const e=t.entries.filter(a=>a.criticalPath&&a.status==="U"),r=w(t),i=I(t.entries);return e.find(a=>a.unknownType==="contract")?{decision:"HARD_BLOCK",reason:"Unresolved contract unknown on critical path",unresolvedCritical:e,warnings:r,stats:i}:e.length>0&&n===0?{decision:"HOLD",reason:"Unresolved critical-path unknown \u2014 retry available",unresolvedCritical:e,warnings:r,stats:i}:e.length>0&&n>=1?{decision:"FORCED_DELIVERY",reason:"Unresolved critical-path unknown after retry",unresolvedCritical:e,warnings:r,stats:i,annotation:b(t.entries)}:{decision:"YIELD",reason:"All critical-path claims satisfy gate rules",unresolvedCritical:[],warnings:r,stats:i}}function D(t,n){switch(t.action){case"create":{const e=o(n),r=new Date().toISOString(),i={taskId:t.taskId,tier:t.tier,entries:[],createdAt:r,updatedAt:r};return e[t.taskId]=i,c(e,n),{state:i,formattedMap:s(i)}}case"add":{const{maps:e,state:r}=d(t.taskId,n),i={id:S(r.entries),claim:M(t.claim),status:t.status,receipt:t.receipt,criticalPath:t.criticalPath??!1,unknownType:t.unknownType};return r.entries.push(i),r.updatedAt=new Date().toISOString(),e[t.taskId]=r,c(e,n),{state:r,entry:i,formattedMap:s(r)}}case"update":{const{maps:e,state:r}=d(t.taskId,n),i=r.entries.find(l=>l.id===t.id);if(!i)throw new Error(`Evidence entry not found: ${t.id}`);return i.status=t.status,i.receipt=t.receipt,r.updatedAt=new Date().toISOString(),e[t.taskId]=r,c(e,n),{state:r,entry:i,formattedMap:s(r)}}case"get":{const{state:e}=d(t.taskId,n);return{state:e,formattedMap:s(e)}}case"gate":{const{state:e}=d(t.taskId,n);return{state:e,gate:A(e,t.retryCount??0),formattedMap:s(e)}}case"list":return{states:Object.values(o(n)).sort((r,i)=>r.createdAt.localeCompare(i.createdAt))};case"delete":{const e=o(n);return t.taskId in e?(delete e[t.taskId],c(e,n),{deleted:!0}):{deleted:!1}}}}export{D as evidenceMap};
1
+ import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";function o(e){return t(e??process.cwd(),`.kb-state`,`evidence-maps.json`)}function s(e){let t=o(e);if(!n(t))return{};try{let e=i(t,`utf-8`);return JSON.parse(e)}catch{return{}}}function c(t,i){let s=o(i),c=e(s);n(c)||r(c,{recursive:!0}),a(s,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function l(e,t){let n=s(t),r=n[e];if(!r)throw Error(`Evidence map not found: ${e}`);return{maps:n,state:r}}function u(e){return e.reduce((e,t)=>Math.max(e,t.id),0)+1}function d(e){let t=e.trim();if(!t)throw Error(`Claim is required`);if(/\r?\n/.test(t))throw Error(`Claim must be a single line`);return t}function f(e){return(e??``).replace(/\r?\n/g,` `).replace(/\|/g,`\\|`)}function p(e){let t=[`| # | Claim | Status | Receipt | Critical | Type |`,`|---|-------|--------|---------|----------|------|`];for(let n of e.entries)t.push(`| ${n.id} | ${f(n.claim)} | ${n.status} | ${f(n.receipt)} | ${n.criticalPath?`yes`:`no`} | ${f(n.unknownType)} |`);return t.join(`
2
+ `)}function m(e){return{total:e.length,verified:e.filter(e=>e.status===`V`).length,assumed:e.filter(e=>e.status===`A`).length,unresolved:e.filter(e=>e.status===`U`).length}}function h(e){let t=[];for(let n of e.entries)n.status===`V`&&n.receipt.trim()===``&&t.push(`V entry without receipt`),n.status===`A`&&e.tier===`critical`&&n.unknownType===`contract`&&t.push(`Assumed contract at Critical tier — should be Verified`);return t}function g(e){return`FORCED DELIVERY annotation: unresolved entries remain -> ${e.filter(e=>e.status===`U`).map(e=>`#${e.id} ${e.claim}`).join(`; `)}`}function _(e,t=0){let n=e.entries.filter(e=>e.criticalPath&&e.status===`U`),r=h(e),i=m(e.entries);return n.find(e=>e.unknownType===`contract`)?{decision:`HARD_BLOCK`,reason:`Unresolved contract unknown on critical path`,unresolvedCritical:n,warnings:r,stats:i}:n.length>0&&t===0?{decision:`HOLD`,reason:`Unresolved critical-path unknown retry available`,unresolvedCritical:n,warnings:r,stats:i}:n.length>0&&t>=1?{decision:`FORCED_DELIVERY`,reason:`Unresolved critical-path unknown after retry`,unresolvedCritical:n,warnings:r,stats:i,annotation:g(e.entries)}:{decision:`YIELD`,reason:`All critical-path claims satisfy gate rules`,unresolvedCritical:[],warnings:r,stats:i}}function v(e,t){switch(e.action){case`create`:{let n=s(t),r=new Date().toISOString(),i={taskId:e.taskId,tier:e.tier,entries:[],createdAt:r,updatedAt:r};return n[e.taskId]=i,c(n,t),{state:i,formattedMap:p(i)}}case`add`:{let{maps:n,state:r}=l(e.taskId,t),i={id:u(r.entries),claim:d(e.claim),status:e.status,receipt:e.receipt,criticalPath:e.criticalPath??!1,unknownType:e.unknownType};return r.entries.push(i),r.updatedAt=new Date().toISOString(),n[e.taskId]=r,c(n,t),{state:r,entry:i,formattedMap:p(r)}}case`update`:{let{maps:n,state:r}=l(e.taskId,t),i=r.entries.find(t=>t.id===e.id);if(!i)throw Error(`Evidence entry not found: ${e.id}`);return i.status=e.status,i.receipt=e.receipt,r.updatedAt=new Date().toISOString(),n[e.taskId]=r,c(n,t),{state:r,entry:i,formattedMap:p(r)}}case`get`:{let{state:n}=l(e.taskId,t);return{state:n,formattedMap:p(n)}}case`gate`:{let{state:n}=l(e.taskId,t);return{state:n,gate:_(n,e.retryCount??0),formattedMap:p(n)}}case`list`:return{states:Object.values(s(t)).sort((e,t)=>e.createdAt.localeCompare(t.createdAt))};case`delete`:{let n=s(t);return e.taskId in n?(delete n[e.taskId],c(n,t),{deleted:!0}):{deleted:!1}}}}export{v as evidenceMap};
3
+ //# sourceMappingURL=evidence-map.js.map
@@ -0,0 +1,42 @@
1
+ //#region packages/tools/src/file-cache.d.ts
2
+ interface FileCacheEntry {
3
+ /** Full file content */
4
+ content: string;
5
+ /** SHA-256 hash of content */
6
+ hash: string;
7
+ /** Line count */
8
+ lines: number;
9
+ /** Estimated token count (~chars/4) */
10
+ estimatedTokens: number;
11
+ /** How many times this file has been requested */
12
+ hitCount: number;
13
+ /** Whether content changed since last read (false on cache hit) */
14
+ changed: boolean;
15
+ }
16
+ interface FileCacheStats {
17
+ totalReads: number;
18
+ cacheHits: number;
19
+ filesTracked: number;
20
+ }
21
+ declare class FileCache {
22
+ private cache;
23
+ private totalReads;
24
+ private cacheHits;
25
+ private static readonly MAX_ENTRIES;
26
+ /**
27
+ * Get file content with deduplication.
28
+ * First call: reads from disk, hashes, caches.
29
+ * Subsequent calls: checks mtime → if unchanged, cache hit (skip read).
30
+ * If mtime changed: re-reads, re-hashes, checks if content actually changed.
31
+ */
32
+ get(filePath: string): Promise<FileCacheEntry>;
33
+ /** Remove a single file from cache. Returns true if it was cached. */
34
+ invalidate(filePath: string): boolean;
35
+ /** Clear all cached files. Returns how many were cleared. */
36
+ clear(): number;
37
+ /** Get cache statistics. */
38
+ stats(): FileCacheStats;
39
+ }
40
+ //#endregion
41
+ export { FileCache, FileCacheEntry, FileCacheStats };
42
+ //# sourceMappingURL=file-cache.d.ts.map
@@ -0,0 +1,4 @@
1
+ import{estimateTokens as e}from"./text-utils.js";import{readFile as t,stat as n}from"node:fs/promises";import{resolve as r}from"node:path";import{createHash as i}from"node:crypto";var a=class i{cache=new Map;totalReads=0;cacheHits=0;static MAX_ENTRIES=500;async get(a){let s=r(a);this.totalReads++;let c=(await n(s)).mtimeMs,l=this.cache.get(s);if(l){if(l.mtimeMs===c)return this.cacheHits++,l.hitCount++,{content:l.content,hash:l.hash,lines:l.lines,estimatedTokens:l.estimatedTokens,hitCount:l.hitCount,changed:!1};let n=await t(s,`utf-8`),r=o(n);if(r===l.hash)return this.cacheHits++,l.hitCount++,l.mtimeMs=c,{content:l.content,hash:l.hash,lines:l.lines,estimatedTokens:l.estimatedTokens,hitCount:l.hitCount,changed:!1};let i=n.split(`
2
+ `).length,a=e(n);return l.content=n,l.hash=r,l.lines=i,l.estimatedTokens=a,l.hitCount++,l.mtimeMs=c,{content:n,hash:r,lines:i,estimatedTokens:a,hitCount:l.hitCount,changed:!0}}let u=await t(s,`utf-8`),d=o(u),f=u.split(`
3
+ `).length,p=e(u);if(this.cache.set(s,{content:u,hash:d,lines:f,estimatedTokens:p,hitCount:1,mtimeMs:c}),this.cache.size>i.MAX_ENTRIES){let e=this.cache.keys().next().value;e&&this.cache.delete(e)}return{content:u,hash:d,lines:f,estimatedTokens:p,hitCount:1,changed:!0}}invalidate(e){return this.cache.delete(r(e))}clear(){let e=this.cache.size;return this.cache.clear(),e}stats(){return{totalReads:this.totalReads,cacheHits:this.cacheHits,filesTracked:this.cache.size}}};function o(e){return i(`sha256`).update(e).digest(`hex`)}export{a as FileCache};
4
+ //# sourceMappingURL=file-cache.js.map
@@ -1,32 +1,37 @@
1
- export interface FileSummaryOptions {
2
- path: string;
3
- previewLines?: number;
1
+ //#region packages/tools/src/file-summary.d.ts
2
+ interface FileSummaryOptions {
3
+ path: string;
4
+ /** Pre-loaded content — skip readFile when provided (e.g., from FileCache) */
5
+ content?: string;
6
+ previewLines?: number;
4
7
  }
5
- export interface FileSummaryResult {
6
- path: string;
7
- lines: number;
8
- language: string;
9
- imports: string[];
10
- exports: string[];
11
- functions: Array<{
12
- name: string;
13
- line: number;
14
- exported: boolean;
15
- }>;
16
- classes: Array<{
17
- name: string;
18
- line: number;
19
- exported: boolean;
20
- }>;
21
- interfaces: Array<{
22
- name: string;
23
- line: number;
24
- }>;
25
- types: Array<{
26
- name: string;
27
- line: number;
28
- }>;
29
- estimatedTokens: number;
8
+ interface FileSummaryResult {
9
+ path: string;
10
+ lines: number;
11
+ language: string;
12
+ imports: string[];
13
+ exports: string[];
14
+ functions: Array<{
15
+ name: string;
16
+ line: number;
17
+ exported: boolean;
18
+ }>;
19
+ classes: Array<{
20
+ name: string;
21
+ line: number;
22
+ exported: boolean;
23
+ }>;
24
+ interfaces: Array<{
25
+ name: string;
26
+ line: number;
27
+ }>;
28
+ types: Array<{
29
+ name: string;
30
+ line: number;
31
+ }>;
32
+ estimatedTokens: number;
30
33
  }
31
- export declare function fileSummary(options: FileSummaryOptions): Promise<FileSummaryResult>;
34
+ declare function fileSummary(options: FileSummaryOptions): Promise<FileSummaryResult>;
35
+ //#endregion
36
+ export { FileSummaryOptions, FileSummaryResult, fileSummary };
32
37
  //# sourceMappingURL=file-summary.d.ts.map