@vpxa/kb 0.1.13 → 0.1.16

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 (490) hide show
  1. package/README.md +65 -12
  2. package/package.json +14 -7
  3. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -21
  4. package/packages/analyzers/dist/blast-radius-analyzer.js +5 -12
  5. package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -28
  6. package/packages/analyzers/dist/dependency-analyzer.js +6 -9
  7. package/packages/analyzers/dist/diagram-generator.d.ts +12 -9
  8. package/packages/analyzers/dist/diagram-generator.js +2 -4
  9. package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -36
  10. package/packages/analyzers/dist/entry-point-analyzer.js +4 -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 +34 -26
  14. package/packages/analyzers/dist/knowledge-producer.js +17 -15
  15. package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -11
  16. package/packages/analyzers/dist/pattern-analyzer.js +2 -5
  17. package/packages/analyzers/dist/regex-call-graph.d.ts +6 -13
  18. package/packages/analyzers/dist/regex-call-graph.js +1 -1
  19. package/packages/analyzers/dist/structure-analyzer.d.ts +13 -10
  20. package/packages/analyzers/dist/structure-analyzer.js +2 -4
  21. package/packages/analyzers/dist/symbol-analyzer.d.ts +13 -9
  22. package/packages/analyzers/dist/symbol-analyzer.js +9 -13
  23. package/packages/analyzers/dist/ts-call-graph.d.ts +16 -14
  24. package/packages/analyzers/dist/ts-call-graph.js +1 -1
  25. package/packages/analyzers/dist/types.d.ts +82 -80
  26. package/packages/analyzers/dist/types.js +1 -0
  27. package/packages/chunker/dist/call-graph-extractor.d.ts +15 -12
  28. package/packages/chunker/dist/call-graph-extractor.js +1 -1
  29. package/packages/chunker/dist/chunker-factory.d.ts +16 -4
  30. package/packages/chunker/dist/chunker-factory.js +1 -1
  31. package/packages/chunker/dist/chunker.interface.d.ts +8 -5
  32. package/packages/chunker/dist/chunker.interface.js +1 -0
  33. package/packages/chunker/dist/code-chunker.d.ts +16 -13
  34. package/packages/chunker/dist/code-chunker.js +11 -14
  35. package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
  36. package/packages/chunker/dist/extractors/call-extractor.js +1 -0
  37. package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
  38. package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
  39. package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
  40. package/packages/chunker/dist/extractors/import-extractor.js +1 -0
  41. package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
  42. package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
  43. package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
  44. package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
  45. package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
  46. package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
  47. package/packages/chunker/dist/extractors/types.d.ts +36 -0
  48. package/packages/chunker/dist/extractors/types.js +1 -0
  49. package/packages/chunker/dist/generic-chunker.d.ts +14 -11
  50. package/packages/chunker/dist/generic-chunker.js +5 -5
  51. package/packages/chunker/dist/index.d.ts +19 -8
  52. package/packages/chunker/dist/index.js +1 -1
  53. package/packages/chunker/dist/markdown-chunker.d.ts +16 -13
  54. package/packages/chunker/dist/markdown-chunker.js +3 -10
  55. package/packages/chunker/dist/wasm/languages.d.ts +18 -0
  56. package/packages/chunker/dist/wasm/languages.js +1 -0
  57. package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
  58. package/packages/chunker/dist/wasm/query-executor.js +1 -0
  59. package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
  60. package/packages/chunker/dist/wasm/runtime.js +1 -0
  61. package/packages/chunker/dist/wasm/types.d.ts +84 -0
  62. package/packages/chunker/dist/wasm/types.js +1 -0
  63. package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
  64. package/packages/chunker/dist/wasm-chunker.js +6 -0
  65. package/packages/chunker/src/queries/go/calls.scm +11 -0
  66. package/packages/chunker/src/queries/go/entry-points.scm +20 -0
  67. package/packages/chunker/src/queries/go/imports.scm +6 -0
  68. package/packages/chunker/src/queries/go/patterns.scm +25 -0
  69. package/packages/chunker/src/queries/go/symbols.scm +26 -0
  70. package/packages/chunker/src/queries/java/calls.scm +10 -0
  71. package/packages/chunker/src/queries/java/entry-points.scm +27 -0
  72. package/packages/chunker/src/queries/java/imports.scm +11 -0
  73. package/packages/chunker/src/queries/java/patterns.scm +27 -0
  74. package/packages/chunker/src/queries/java/symbols.scm +28 -0
  75. package/packages/chunker/src/queries/javascript/calls.scm +21 -0
  76. package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
  77. package/packages/chunker/src/queries/javascript/imports.scm +32 -0
  78. package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
  79. package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
  80. package/packages/chunker/src/queries/python/calls.scm +11 -0
  81. package/packages/chunker/src/queries/python/entry-points.scm +21 -0
  82. package/packages/chunker/src/queries/python/imports.scm +14 -0
  83. package/packages/chunker/src/queries/python/patterns.scm +25 -0
  84. package/packages/chunker/src/queries/python/symbols.scm +17 -0
  85. package/packages/chunker/src/queries/rust/calls.scm +20 -0
  86. package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
  87. package/packages/chunker/src/queries/rust/imports.scm +26 -0
  88. package/packages/chunker/src/queries/rust/patterns.scm +18 -0
  89. package/packages/chunker/src/queries/rust/symbols.scm +73 -0
  90. package/packages/chunker/src/queries/typescript/calls.scm +21 -0
  91. package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
  92. package/packages/chunker/src/queries/typescript/imports.scm +35 -0
  93. package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
  94. package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
  95. package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
  96. package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
  97. package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
  98. package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
  99. package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
  100. package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
  101. package/packages/chunker/wasm/tree-sitter.wasm +0 -0
  102. package/packages/cli/dist/commands/analyze.d.ts +6 -3
  103. package/packages/cli/dist/commands/analyze.js +2 -3
  104. package/packages/cli/dist/commands/context-cmds.d.ts +6 -3
  105. package/packages/cli/dist/commands/context-cmds.js +1 -1
  106. package/packages/cli/dist/commands/environment.d.ts +6 -3
  107. package/packages/cli/dist/commands/environment.js +1 -2
  108. package/packages/cli/dist/commands/execution.d.ts +6 -3
  109. package/packages/cli/dist/commands/execution.js +1 -1
  110. package/packages/cli/dist/commands/graph.d.ts +6 -3
  111. package/packages/cli/dist/commands/graph.js +5 -6
  112. package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
  113. package/packages/cli/dist/commands/init/adapters.js +1 -0
  114. package/packages/cli/dist/commands/init/config.d.ts +10 -0
  115. package/packages/cli/dist/commands/init/config.js +3 -0
  116. package/packages/cli/dist/commands/init/constants.d.ts +18 -0
  117. package/packages/cli/dist/commands/init/constants.js +1 -0
  118. package/packages/cli/dist/commands/init/curated.d.ts +7 -0
  119. package/packages/cli/dist/commands/init/curated.js +1 -0
  120. package/packages/cli/dist/commands/init/global.d.ts +34 -0
  121. package/packages/cli/dist/commands/init/global.js +5 -0
  122. package/packages/cli/dist/commands/init/index.d.ts +28 -0
  123. package/packages/cli/dist/commands/init/index.js +5 -0
  124. package/packages/cli/dist/commands/init/scaffold.d.ts +23 -0
  125. package/packages/cli/dist/commands/init/scaffold.js +1 -0
  126. package/packages/cli/dist/commands/init/templates.d.ts +9 -0
  127. package/packages/cli/dist/commands/init/templates.js +165 -0
  128. package/packages/cli/dist/commands/knowledge.d.ts +6 -3
  129. package/packages/cli/dist/commands/knowledge.js +1 -1
  130. package/packages/cli/dist/commands/search.d.ts +6 -3
  131. package/packages/cli/dist/commands/search.js +1 -8
  132. package/packages/cli/dist/commands/system.d.ts +6 -3
  133. package/packages/cli/dist/commands/system.js +4 -7
  134. package/packages/cli/dist/commands/workspace.d.ts +6 -3
  135. package/packages/cli/dist/commands/workspace.js +1 -2
  136. package/packages/cli/dist/context.d.ts +7 -5
  137. package/packages/cli/dist/context.js +1 -1
  138. package/packages/cli/dist/helpers.d.ts +51 -48
  139. package/packages/cli/dist/helpers.js +5 -5
  140. package/packages/cli/dist/index.d.ts +4 -2
  141. package/packages/cli/dist/index.js +2 -2
  142. package/packages/cli/dist/kb-init.d.ts +48 -51
  143. package/packages/cli/dist/kb-init.js +1 -1
  144. package/packages/cli/dist/types.d.ts +8 -6
  145. package/packages/cli/dist/types.js +1 -0
  146. package/packages/core/dist/constants.d.ts +58 -34
  147. package/packages/core/dist/constants.js +1 -1
  148. package/packages/core/dist/content-detector.d.ts +8 -8
  149. package/packages/core/dist/content-detector.js +1 -1
  150. package/packages/core/dist/errors.d.ts +15 -13
  151. package/packages/core/dist/errors.js +1 -1
  152. package/packages/core/dist/global-registry.d.ts +62 -0
  153. package/packages/core/dist/global-registry.js +1 -0
  154. package/packages/core/dist/index.d.ts +7 -6
  155. package/packages/core/dist/index.js +1 -1
  156. package/packages/core/dist/logger.d.ts +19 -8
  157. package/packages/core/dist/logger.js +1 -1
  158. package/packages/core/dist/types.d.ts +107 -92
  159. package/packages/core/dist/types.js +1 -0
  160. package/packages/embeddings/dist/embedder.interface.d.ts +22 -20
  161. package/packages/embeddings/dist/embedder.interface.js +1 -0
  162. package/packages/embeddings/dist/index.d.ts +3 -3
  163. package/packages/embeddings/dist/index.js +1 -1
  164. package/packages/embeddings/dist/onnx-embedder.d.ts +21 -23
  165. package/packages/embeddings/dist/onnx-embedder.js +1 -1
  166. package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
  167. package/packages/enterprise-bridge/dist/cache.js +1 -0
  168. package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
  169. package/packages/enterprise-bridge/dist/er-client.js +1 -0
  170. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
  171. package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
  172. package/packages/enterprise-bridge/dist/index.d.ts +8 -0
  173. package/packages/enterprise-bridge/dist/index.js +1 -0
  174. package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
  175. package/packages/enterprise-bridge/dist/policy-store.js +1 -0
  176. package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
  177. package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
  178. package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
  179. package/packages/enterprise-bridge/dist/result-merger.js +1 -0
  180. package/packages/enterprise-bridge/dist/types.d.ts +81 -0
  181. package/packages/enterprise-bridge/dist/types.js +1 -0
  182. package/packages/indexer/dist/file-hasher.d.ts +5 -3
  183. package/packages/indexer/dist/file-hasher.js +1 -1
  184. package/packages/indexer/dist/filesystem-crawler.d.ts +23 -21
  185. package/packages/indexer/dist/filesystem-crawler.js +1 -1
  186. package/packages/indexer/dist/graph-extractor.d.ts +9 -13
  187. package/packages/indexer/dist/graph-extractor.js +1 -1
  188. package/packages/indexer/dist/incremental-indexer.d.ts +49 -44
  189. package/packages/indexer/dist/incremental-indexer.js +1 -1
  190. package/packages/indexer/dist/index.d.ts +5 -5
  191. package/packages/indexer/dist/index.js +1 -1
  192. package/packages/server/dist/api.d.ts +3 -8
  193. package/packages/server/dist/api.js +1 -1
  194. package/packages/server/dist/config.d.ts +6 -3
  195. package/packages/server/dist/config.js +1 -1
  196. package/packages/server/dist/cross-workspace.d.ts +43 -0
  197. package/packages/server/dist/cross-workspace.js +1 -0
  198. package/packages/server/dist/curated-manager.d.ts +80 -78
  199. package/packages/server/dist/curated-manager.js +5 -10
  200. package/packages/server/dist/index.d.ts +1 -2
  201. package/packages/server/dist/index.js +1 -1
  202. package/packages/server/dist/replay-interceptor.d.ts +6 -7
  203. package/packages/server/dist/replay-interceptor.js +1 -1
  204. package/packages/server/dist/resources/resources.d.ts +7 -4
  205. package/packages/server/dist/resources/resources.js +2 -2
  206. package/packages/server/dist/server.d.ts +37 -25
  207. package/packages/server/dist/server.js +1 -1
  208. package/packages/server/dist/tools/analyze.tools.d.ts +14 -11
  209. package/packages/server/dist/tools/analyze.tools.js +1 -3
  210. package/packages/server/dist/tools/audit.tool.d.ts +8 -5
  211. package/packages/server/dist/tools/audit.tool.js +1 -4
  212. package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
  213. package/packages/server/dist/tools/bridge.tools.js +15 -0
  214. package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
  215. package/packages/server/dist/tools/evolution.tools.js +5 -0
  216. package/packages/server/dist/tools/forge.tools.d.ts +13 -12
  217. package/packages/server/dist/tools/forge.tools.js +10 -13
  218. package/packages/server/dist/tools/forget.tool.d.ts +7 -4
  219. package/packages/server/dist/tools/forget.tool.js +1 -7
  220. package/packages/server/dist/tools/graph.tool.d.ts +7 -4
  221. package/packages/server/dist/tools/graph.tool.js +4 -5
  222. package/packages/server/dist/tools/list.tool.d.ts +7 -4
  223. package/packages/server/dist/tools/list.tool.js +2 -8
  224. package/packages/server/dist/tools/lookup.tool.d.ts +7 -4
  225. package/packages/server/dist/tools/lookup.tool.js +2 -9
  226. package/packages/server/dist/tools/onboard.tool.d.ts +8 -5
  227. package/packages/server/dist/tools/onboard.tool.js +2 -2
  228. package/packages/server/dist/tools/policy.tools.d.ts +7 -0
  229. package/packages/server/dist/tools/policy.tools.js +2 -0
  230. package/packages/server/dist/tools/produce.tool.d.ts +6 -3
  231. package/packages/server/dist/tools/produce.tool.js +2 -2
  232. package/packages/server/dist/tools/read.tool.d.ts +7 -4
  233. package/packages/server/dist/tools/read.tool.js +2 -6
  234. package/packages/server/dist/tools/reindex.tool.d.ts +10 -7
  235. package/packages/server/dist/tools/reindex.tool.js +3 -2
  236. package/packages/server/dist/tools/remember.tool.d.ts +8 -4
  237. package/packages/server/dist/tools/remember.tool.js +3 -5
  238. package/packages/server/dist/tools/replay.tool.d.ts +6 -3
  239. package/packages/server/dist/tools/replay.tool.js +2 -6
  240. package/packages/server/dist/tools/search.tool.d.ts +10 -5
  241. package/packages/server/dist/tools/search.tool.js +6 -22
  242. package/packages/server/dist/tools/status.tool.d.ts +12 -4
  243. package/packages/server/dist/tools/status.tool.js +2 -3
  244. package/packages/server/dist/tools/toolkit.tools.d.ts +36 -35
  245. package/packages/server/dist/tools/toolkit.tools.js +20 -24
  246. package/packages/server/dist/tools/update.tool.d.ts +7 -4
  247. package/packages/server/dist/tools/update.tool.js +1 -6
  248. package/packages/server/dist/tools/utility.tools.d.ts +15 -15
  249. package/packages/server/dist/tools/utility.tools.js +10 -23
  250. package/packages/server/dist/version-check.d.ts +5 -2
  251. package/packages/server/dist/version-check.js +1 -1
  252. package/packages/store/dist/graph-store.interface.d.ts +89 -87
  253. package/packages/store/dist/graph-store.interface.js +1 -0
  254. package/packages/store/dist/index.d.ts +6 -6
  255. package/packages/store/dist/index.js +1 -1
  256. package/packages/store/dist/lance-store.d.ts +37 -31
  257. package/packages/store/dist/lance-store.js +1 -1
  258. package/packages/store/dist/sqlite-graph-store.d.ts +43 -47
  259. package/packages/store/dist/sqlite-graph-store.js +13 -13
  260. package/packages/store/dist/store-factory.d.ts +11 -8
  261. package/packages/store/dist/store-factory.js +1 -1
  262. package/packages/store/dist/store.interface.d.ts +47 -47
  263. package/packages/store/dist/store.interface.js +1 -0
  264. package/packages/tools/dist/audit.d.ts +61 -62
  265. package/packages/tools/dist/audit.js +4 -5
  266. package/packages/tools/dist/batch.d.ts +20 -18
  267. package/packages/tools/dist/batch.js +1 -1
  268. package/packages/tools/dist/changelog.d.ts +29 -27
  269. package/packages/tools/dist/changelog.js +2 -2
  270. package/packages/tools/dist/check.d.ts +42 -39
  271. package/packages/tools/dist/check.js +2 -2
  272. package/packages/tools/dist/checkpoint.d.ts +17 -15
  273. package/packages/tools/dist/checkpoint.js +1 -2
  274. package/packages/tools/dist/codemod.d.ts +35 -33
  275. package/packages/tools/dist/codemod.js +2 -2
  276. package/packages/tools/dist/compact.d.ts +34 -38
  277. package/packages/tools/dist/compact.js +2 -2
  278. package/packages/tools/dist/data-transform.d.ts +10 -8
  279. package/packages/tools/dist/data-transform.js +1 -1
  280. package/packages/tools/dist/dead-symbols.d.ts +29 -26
  281. package/packages/tools/dist/dead-symbols.js +2 -2
  282. package/packages/tools/dist/delegate.d.ts +26 -24
  283. package/packages/tools/dist/delegate.js +1 -5
  284. package/packages/tools/dist/diff-parse.d.ts +24 -22
  285. package/packages/tools/dist/diff-parse.js +3 -3
  286. package/packages/tools/dist/digest.d.ts +43 -46
  287. package/packages/tools/dist/digest.js +4 -5
  288. package/packages/tools/dist/dogfood-log.d.ts +49 -0
  289. package/packages/tools/dist/dogfood-log.js +2 -0
  290. package/packages/tools/dist/encode.d.ts +11 -9
  291. package/packages/tools/dist/encode.js +1 -1
  292. package/packages/tools/dist/env-info.d.ts +25 -23
  293. package/packages/tools/dist/env-info.js +1 -1
  294. package/packages/tools/dist/eval.d.ts +13 -11
  295. package/packages/tools/dist/eval.js +2 -3
  296. package/packages/tools/dist/evidence-map.d.ts +64 -62
  297. package/packages/tools/dist/evidence-map.js +2 -3
  298. package/packages/tools/dist/file-cache.d.ts +41 -0
  299. package/packages/tools/dist/file-cache.js +3 -0
  300. package/packages/tools/dist/file-summary.d.ts +50 -30
  301. package/packages/tools/dist/file-summary.js +2 -2
  302. package/packages/tools/dist/file-walk.d.ts +6 -4
  303. package/packages/tools/dist/file-walk.js +1 -1
  304. package/packages/tools/dist/find-examples.d.ts +26 -22
  305. package/packages/tools/dist/find-examples.js +3 -3
  306. package/packages/tools/dist/find.d.ts +39 -41
  307. package/packages/tools/dist/find.js +1 -1
  308. package/packages/tools/dist/forge-classify.d.ts +35 -39
  309. package/packages/tools/dist/forge-classify.js +2 -2
  310. package/packages/tools/dist/forge-ground.d.ts +58 -61
  311. package/packages/tools/dist/forge-ground.js +1 -1
  312. package/packages/tools/dist/git-context.d.ts +22 -20
  313. package/packages/tools/dist/git-context.js +3 -3
  314. package/packages/tools/dist/graph-query.d.ts +75 -79
  315. package/packages/tools/dist/graph-query.js +1 -1
  316. package/packages/tools/dist/guide.d.ts +14 -12
  317. package/packages/tools/dist/guide.js +1 -1
  318. package/packages/tools/dist/health.d.ts +13 -11
  319. package/packages/tools/dist/health.js +2 -2
  320. package/packages/tools/dist/http-request.d.ts +20 -18
  321. package/packages/tools/dist/http-request.js +1 -1
  322. package/packages/tools/dist/index.d.ts +55 -53
  323. package/packages/tools/dist/index.js +1 -1
  324. package/packages/tools/dist/lane.d.ts +28 -26
  325. package/packages/tools/dist/lane.js +6 -7
  326. package/packages/tools/dist/measure.d.ts +34 -30
  327. package/packages/tools/dist/measure.js +2 -2
  328. package/packages/tools/dist/onboard.d.ts +29 -27
  329. package/packages/tools/dist/onboard.js +17 -41
  330. package/packages/tools/dist/parse-output.d.ts +48 -46
  331. package/packages/tools/dist/parse-output.js +2 -2
  332. package/packages/tools/dist/path-resolver.d.ts +4 -2
  333. package/packages/tools/dist/path-resolver.js +1 -1
  334. package/packages/tools/dist/process-manager.d.ts +18 -16
  335. package/packages/tools/dist/process-manager.js +1 -1
  336. package/packages/tools/dist/queue.d.ts +28 -26
  337. package/packages/tools/dist/queue.js +1 -2
  338. package/packages/tools/dist/regex-test.d.ts +26 -24
  339. package/packages/tools/dist/regex-test.js +1 -1
  340. package/packages/tools/dist/rename.d.ts +28 -26
  341. package/packages/tools/dist/rename.js +2 -2
  342. package/packages/tools/dist/replay.d.ts +33 -31
  343. package/packages/tools/dist/replay.js +4 -6
  344. package/packages/tools/dist/response-envelope.d.ts +32 -30
  345. package/packages/tools/dist/response-envelope.js +1 -1
  346. package/packages/tools/dist/schema-validate.d.ts +15 -13
  347. package/packages/tools/dist/schema-validate.js +1 -1
  348. package/packages/tools/dist/scope-map.d.ts +45 -48
  349. package/packages/tools/dist/scope-map.js +1 -1
  350. package/packages/tools/dist/snippet.d.ts +26 -25
  351. package/packages/tools/dist/snippet.js +1 -1
  352. package/packages/tools/dist/stash.d.ts +13 -11
  353. package/packages/tools/dist/stash.js +1 -2
  354. package/packages/tools/dist/stratum-card.d.ts +27 -28
  355. package/packages/tools/dist/stratum-card.js +3 -5
  356. package/packages/tools/dist/symbol.d.ts +31 -26
  357. package/packages/tools/dist/symbol.js +3 -3
  358. package/packages/tools/dist/test-run.d.ts +19 -16
  359. package/packages/tools/dist/test-run.js +2 -2
  360. package/packages/tools/dist/text-utils.d.ts +6 -4
  361. package/packages/tools/dist/text-utils.js +2 -2
  362. package/packages/tools/dist/time-utils.d.ts +15 -13
  363. package/packages/tools/dist/time-utils.js +1 -1
  364. package/packages/tools/dist/trace.d.ts +26 -21
  365. package/packages/tools/dist/trace.js +2 -2
  366. package/packages/tools/dist/truncation.d.ts +6 -4
  367. package/packages/tools/dist/truncation.js +6 -13
  368. package/packages/tools/dist/watch.d.ts +28 -26
  369. package/packages/tools/dist/watch.js +1 -1
  370. package/packages/tools/dist/web-fetch.d.ts +35 -33
  371. package/packages/tools/dist/web-fetch.js +6 -12
  372. package/packages/tools/dist/web-search.d.ts +16 -14
  373. package/packages/tools/dist/web-search.js +1 -1
  374. package/packages/tools/dist/workset.d.ts +19 -17
  375. package/packages/tools/dist/workset.js +1 -2
  376. package/packages/tui/dist/App-CYLNJLr6.js +2 -0
  377. package/packages/tui/dist/App.d.ts +11 -6
  378. package/packages/tui/dist/App.js +1 -450
  379. package/packages/tui/dist/CuratedPanel-sYdZAICX.js +2 -0
  380. package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
  381. package/packages/tui/dist/SearchPanel-DREo6zgt.js +2 -0
  382. package/packages/tui/dist/StatusPanel-2ex8fLOO.js +2 -0
  383. package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
  384. package/packages/tui/dist/devtools-DUyj952l.js +7 -0
  385. package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +28 -0
  386. package/packages/tui/dist/index-B9VpfVPP.d.ts +13 -0
  387. package/packages/tui/dist/index.d.ts +3 -19
  388. package/packages/tui/dist/index.js +1 -476
  389. package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +316 -0
  390. package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -6
  391. package/packages/tui/dist/panels/CuratedPanel.js +1 -371
  392. package/packages/tui/dist/panels/LogPanel.d.ts +7 -3
  393. package/packages/tui/dist/panels/LogPanel.js +1 -449
  394. package/packages/tui/dist/panels/SearchPanel.d.ts +14 -8
  395. package/packages/tui/dist/panels/SearchPanel.js +1 -372
  396. package/packages/tui/dist/panels/StatusPanel.d.ts +11 -6
  397. package/packages/tui/dist/panels/StatusPanel.js +1 -371
  398. package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +150 -0
  399. package/scaffold/adapters/claude-code.mjs +20 -0
  400. package/scaffold/adapters/copilot.mjs +320 -0
  401. package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  402. package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +21 -0
  403. package/scaffold/copilot/agents/Documenter.agent.md +42 -0
  404. package/scaffold/copilot/agents/Orchestrator.agent.md +104 -0
  405. package/scaffold/copilot/agents/Planner.agent.md +54 -0
  406. package/scaffold/copilot/agents/Refactor.agent.md +36 -0
  407. package/scaffold/copilot/agents/Researcher-Alpha.agent.md +20 -0
  408. package/scaffold/copilot/agents/Researcher-Beta.agent.md +20 -0
  409. package/scaffold/copilot/agents/Researcher-Delta.agent.md +20 -0
  410. package/scaffold/copilot/agents/Researcher-Gamma.agent.md +20 -0
  411. package/scaffold/definitions/agents.mjs +165 -0
  412. package/scaffold/definitions/bodies.mjs +292 -0
  413. package/scaffold/definitions/hooks.mjs +43 -0
  414. package/scaffold/definitions/models.mjs +56 -0
  415. package/scaffold/definitions/plugins.mjs +24 -0
  416. package/scaffold/definitions/prompts.mjs +145 -0
  417. package/scaffold/definitions/protocols.mjs +322 -0
  418. package/scaffold/definitions/tools.mjs +176 -0
  419. package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  420. package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
  421. package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
  422. package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
  423. package/scaffold/general/agents/Debugger.agent.md +31 -0
  424. package/scaffold/general/agents/Documenter.agent.md +42 -0
  425. package/scaffold/general/agents/Explorer.agent.md +50 -0
  426. package/scaffold/general/agents/Frontend.agent.md +29 -0
  427. package/scaffold/general/agents/Implementer.agent.md +31 -0
  428. package/scaffold/general/agents/Orchestrator.agent.md +104 -0
  429. package/scaffold/general/agents/Planner.agent.md +55 -0
  430. package/scaffold/general/agents/README.md +57 -0
  431. package/scaffold/general/agents/Refactor.agent.md +36 -0
  432. package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
  433. package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
  434. package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
  435. package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
  436. package/scaffold/general/agents/Security.agent.md +42 -0
  437. package/scaffold/general/agents/_shared/adr-protocol.md +91 -0
  438. package/scaffold/general/agents/_shared/architect-reviewer-base.md +50 -0
  439. package/scaffold/general/agents/_shared/code-agent-base.md +88 -0
  440. package/scaffold/general/agents/_shared/code-reviewer-base.md +54 -0
  441. package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
  442. package/scaffold/general/agents/_shared/forge-protocol.md +46 -0
  443. package/scaffold/general/agents/_shared/researcher-base.md +61 -0
  444. package/scaffold/general/agents/templates/adr-template.md +27 -0
  445. package/scaffold/general/agents/templates/execution-state.md +25 -0
  446. package/scaffold/general/prompts/ask.prompt.md +20 -0
  447. package/scaffold/general/prompts/debug.prompt.md +25 -0
  448. package/scaffold/general/prompts/design.prompt.md +22 -0
  449. package/scaffold/general/prompts/implement.prompt.md +26 -0
  450. package/scaffold/general/prompts/plan.prompt.md +24 -0
  451. package/scaffold/general/prompts/review.prompt.md +31 -0
  452. package/scaffold/generate.mjs +74 -0
  453. package/skills/adr-skill/SKILL.md +329 -0
  454. package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
  455. package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
  456. package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
  457. package/skills/adr-skill/references/adr-conventions.md +95 -0
  458. package/skills/adr-skill/references/examples.md +193 -0
  459. package/skills/adr-skill/references/review-checklist.md +77 -0
  460. package/skills/adr-skill/references/template-variants.md +52 -0
  461. package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
  462. package/skills/adr-skill/scripts/new_adr.js +391 -0
  463. package/skills/adr-skill/scripts/set_adr_status.js +169 -0
  464. package/skills/brainstorming/SKILL.md +259 -0
  465. package/skills/brainstorming/scripts/frame-template.html +365 -0
  466. package/skills/brainstorming/scripts/helper.js +216 -0
  467. package/skills/brainstorming/scripts/server.cjs +9 -0
  468. package/skills/brainstorming/scripts/server.src.cjs +249 -0
  469. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  470. package/skills/brainstorming/visual-companion.md +430 -0
  471. package/skills/c4-architecture/SKILL.md +295 -0
  472. package/skills/c4-architecture/references/advanced-patterns.md +552 -0
  473. package/skills/c4-architecture/references/c4-syntax.md +492 -0
  474. package/skills/c4-architecture/references/common-mistakes.md +437 -0
  475. package/skills/knowledge-base/SKILL.md +100 -10
  476. package/skills/lesson-learned/SKILL.md +105 -0
  477. package/skills/lesson-learned/references/anti-patterns.md +55 -0
  478. package/skills/lesson-learned/references/se-principles.md +109 -0
  479. package/skills/requirements-clarity/SKILL.md +324 -0
  480. package/skills/session-handoff/SKILL.md +189 -0
  481. package/skills/session-handoff/references/handoff-template.md +139 -0
  482. package/skills/session-handoff/references/resume-checklist.md +80 -0
  483. package/skills/session-handoff/scripts/check_staleness.js +269 -0
  484. package/skills/session-handoff/scripts/create_handoff.js +299 -0
  485. package/skills/session-handoff/scripts/list_handoffs.js +113 -0
  486. package/skills/session-handoff/scripts/validate_handoff.js +241 -0
  487. package/packages/chunker/dist/treesitter-chunker.d.ts +0 -47
  488. package/packages/chunker/dist/treesitter-chunker.js +0 -8
  489. package/packages/cli/dist/commands/init.d.ts +0 -10
  490. package/packages/cli/dist/commands/init.js +0 -308
@@ -1,37 +1,39 @@
1
- export interface CodemodRule {
2
- /** Description of what this rule does */
3
- description: string;
4
- /** Regex pattern to match (string form, will be compiled) */
5
- pattern: string;
6
- /** Replacement string (supports $1, $2 capture groups) */
7
- replacement: string;
8
- /** Optional: only apply to files matching this glob */
9
- fileFilter?: string;
1
+ //#region packages/tools/src/codemod.d.ts
2
+ interface CodemodRule {
3
+ /** Description of what this rule does */
4
+ description: string;
5
+ /** Regex pattern to match (string form, will be compiled) */
6
+ pattern: string;
7
+ /** Replacement string (supports $1, $2 capture groups) */
8
+ replacement: string;
9
+ /** Optional: only apply to files matching this glob */
10
+ fileFilter?: string;
10
11
  }
11
- export interface CodemodOptions {
12
- /** Root directory to apply codemod in */
13
- rootPath: string;
14
- /** Rules to apply */
15
- rules: CodemodRule[];
16
- /** File extensions to process */
17
- extensions?: string[];
18
- /** Exclude patterns */
19
- exclude?: string[];
20
- /** Dry run */
21
- dryRun?: boolean;
12
+ interface CodemodOptions {
13
+ /** Root directory to apply codemod in */
14
+ rootPath: string;
15
+ /** Rules to apply */
16
+ rules: CodemodRule[];
17
+ /** File extensions to process */
18
+ extensions?: string[];
19
+ /** Exclude patterns */
20
+ exclude?: string[];
21
+ /** Dry run */
22
+ dryRun?: boolean;
22
23
  }
23
- export interface CodemodChange {
24
- rule: string;
25
- path: string;
26
- line: number;
27
- before: string;
28
- after: string;
24
+ interface CodemodChange {
25
+ rule: string;
26
+ path: string;
27
+ line: number;
28
+ before: string;
29
+ after: string;
29
30
  }
30
- export interface CodemodResult {
31
- changes: CodemodChange[];
32
- rulesApplied: number;
33
- filesModified: number;
34
- dryRun: boolean;
31
+ interface CodemodResult {
32
+ changes: CodemodChange[];
33
+ rulesApplied: number;
34
+ filesModified: number;
35
+ dryRun: boolean;
35
36
  }
36
- export declare function codemod(options: CodemodOptions): Promise<CodemodResult>;
37
- //# sourceMappingURL=codemod.d.ts.map
37
+ declare function codemod(options: CodemodOptions): Promise<CodemodResult>;
38
+ //#endregion
39
+ export { CodemodChange, CodemodOptions, CodemodResult, CodemodRule, codemod };
@@ -1,2 +1,2 @@
1
- import{readFile as b,writeFile as P}from"node:fs/promises";import{relative as w}from"node:path";import{DEFAULT_TOOL_EXTENSIONS as F,matchesGlobPattern as O,walkFiles as y}from"./file-walk.js";function E(o){return o.replace(/\\/g,"/")}async function v(o){const{rootPath:l,rules:g,extensions:m=F,exclude:h=[],dryRun:a=!1}=o,x=g.map(e=>({...e,regex:new RegExp(e.pattern,"g")})),C=await y(l,m,h),d=[],f=new Set;let c=0;for(const e of C){const u=E(w(l,e)),r=(await b(e,"utf-8")).split(/\r?\n/);let p=!1;for(const[R,t]of x.entries())if(!(t.fileFilter&&!O(u,t.fileFilter)))for(let n=0;n<r.length;n++){const i=r[n];t.regex.lastIndex=0;const s=i.replace(t.regex,t.replacement);i!==s&&(r[n]=s,p=!0,f.add(R),d.push({rule:t.description,path:u,line:n+1,before:i,after:s}))}p&&(c+=1,a||await P(e,r.join(`
2
- `),"utf-8"))}return{changes:d,rulesApplied:f.size,filesModified:c,dryRun:a}}export{v as codemod};
1
+ import{DEFAULT_TOOL_EXTENSIONS as e,matchesGlobPattern as t,walkFiles as n}from"./file-walk.js";import{readFile as r,writeFile as i}from"node:fs/promises";import{relative as a}from"node:path";function o(e){return e.replace(/\\/g,`/`)}async function s(s){let{rootPath:c,rules:l,extensions:u=e,exclude:d=[],dryRun:f=!1}=s,p=l.map(e=>({...e,regex:new RegExp(e.pattern,`g`)})),m=await n(c,u,d),h=[],g=new Set,_=0;for(let e of m){let n=o(a(c,e)),s=(await r(e,`utf-8`)).split(/\r?\n/),l=!1;for(let[e,r]of p.entries())if(!(r.fileFilter&&!t(n,r.fileFilter)))for(let t=0;t<s.length;t++){let i=s[t];r.regex.lastIndex=0;let a=i.replace(r.regex,r.replacement);i!==a&&(s[t]=a,l=!0,g.add(e),h.push({rule:r.description,path:n,line:t+1,before:i,after:a}))}l&&(_+=1,f||await i(e,s.join(`
2
+ `),`utf-8`))}return{changes:h,rulesApplied:g.size,filesModified:_,dryRun:f}}export{s as codemod};
@@ -1,43 +1,39 @@
1
- /**
2
- * kb_compact Extractive context compression.
3
- *
4
- * Takes a large text and a focus query, then extracts the most relevant
5
- * sentences/paragraphs using the embedder for similarity scoring.
6
- * No LLM needed pure ONNX inference.
7
- *
8
- * Use case: compress a 50K-token file read down to the 2K tokens
9
- * that actually matter for the current task.
10
- */
11
- import type { IEmbedder } from '@kb/embeddings';
12
- export interface CompactOptions {
13
- /** The text to compress (at least one of text/path required) */
14
- text?: string;
15
- /** File path to read server-side — avoids read_file round-trip (at least one of text/path required) */
16
- path?: string;
17
- /** The focus query what are we trying to understand? */
18
- query: string;
19
- /** Target output size in characters (default: 3000) */
20
- maxChars?: number;
21
- /** Minimum similarity score to include a segment (0-1, default: 0.3) */
22
- minScore?: number;
23
- /** Segmentation strategy (default: 'paragraph') */
24
- segmentation?: 'paragraph' | 'sentence' | 'line';
1
+ import { FileCache } from "./file-cache.js";
2
+ import { IEmbedder } from "@kb/embeddings";
3
+
4
+ //#region packages/tools/src/compact.d.ts
5
+ interface CompactOptions {
6
+ /** The text to compress (at least one of text/path required) */
7
+ text?: string;
8
+ /** File path to read server-side — avoids read_file round-trip (at least one of text/path required) */
9
+ path?: string;
10
+ /** The focus query — what are we trying to understand? */
11
+ query: string;
12
+ /** Target output size in characters (default: 3000) */
13
+ maxChars?: number;
14
+ /** Minimum similarity score to include a segment (0-1, default: 0.3) */
15
+ minScore?: number;
16
+ /** Segmentation strategy (default: 'paragraph') */
17
+ segmentation?: 'paragraph' | 'sentence' | 'line';
18
+ /** Optional file cache — use cached content instead of raw readFile */
19
+ cache?: FileCache;
25
20
  }
26
- export interface CompactResult {
27
- /** The compressed text */
28
- text: string;
29
- /** Original size in chars */
30
- originalChars: number;
31
- /** Compressed size in chars */
32
- compressedChars: number;
33
- /** Compression ratio (0-1, lower = more compressed) */
34
- ratio: number;
35
- /** Number of segments kept / total */
36
- segmentsKept: number;
37
- segmentsTotal: number;
21
+ interface CompactResult {
22
+ /** The compressed text */
23
+ text: string;
24
+ /** Original size in chars */
25
+ originalChars: number;
26
+ /** Compressed size in chars */
27
+ compressedChars: number;
28
+ /** Compression ratio (0-1, lower = more compressed) */
29
+ ratio: number;
30
+ /** Number of segments kept / total */
31
+ segmentsKept: number;
32
+ segmentsTotal: number;
38
33
  }
39
34
  /**
40
35
  * Compress text by extracting segments most relevant to a query.
41
36
  */
42
- export declare function compact(embedder: IEmbedder, options: CompactOptions): Promise<CompactResult>;
43
- //# sourceMappingURL=compact.d.ts.map
37
+ declare function compact(embedder: IEmbedder, options: CompactOptions): Promise<CompactResult>;
38
+ //#endregion
39
+ export { CompactOptions, CompactResult, compact };
@@ -1,3 +1,3 @@
1
- import{readFile as f}from"node:fs/promises";import{cosineSimilarity as b,segment as C}from"./text-utils.js";async function w(c,r){const{query:l,maxChars:a=3e3,minScore:h=.3,segmentation:p="paragraph"}=r;let t;if(r.text)t=r.text;else if(r.path)t=await f(r.path,"utf-8");else throw new Error('Either "text" or "path" must be provided');if(t.length<=a)return{text:t,originalChars:t.length,compressedChars:t.length,ratio:1,segmentsKept:1,segmentsTotal:1};const s=C(t,p);if(s.length===0)return{text:"",originalChars:t.length,compressedChars:0,ratio:0,segmentsKept:0,segmentsTotal:0};const d=await c.embed(l),g=[];for(let e=0;e<s.length;e++){const o=await c.embed(s[e]),u=b(d,o);g.push({text:s[e],score:u,index:e})}const x=g.filter(e=>e.score>=h).sort((e,o)=>o.score-e.score),n=[];let i=0;for(const e of x){if(i+e.text.length>a){i===0&&(n.push({...e,text:e.text.slice(0,a)}),i=a);break}n.push(e),i+=e.text.length+2}n.sort((e,o)=>e.index-o.index);const m=n.map(e=>e.text).join(`
1
+ import{cosineSimilarity as e,segment as t}from"./text-utils.js";import{readFile as n}from"node:fs/promises";async function r(r,i){let{query:a,maxChars:o=3e3,minScore:s=.3,segmentation:c=`paragraph`}=i,l;if(i.text)l=i.text;else if(i.path)l=i.cache?(await i.cache.get(i.path)).content:await n(i.path,`utf-8`);else throw Error(`Either "text" or "path" must be provided`);if(l.length<=o)return{text:l,originalChars:l.length,compressedChars:l.length,ratio:1,segmentsKept:1,segmentsTotal:1};let u=t(l,c);if(u.length===0)return{text:``,originalChars:l.length,compressedChars:0,ratio:0,segmentsKept:0,segmentsTotal:0};let d=await r.embed(a),f=[];for(let t=0;t<u.length;t++){let n=e(d,await r.embed(u[t]));f.push({text:u[t],score:n,index:t})}let p=f.filter(e=>e.score>=s).sort((e,t)=>t.score-e.score),m=[],h=0;for(let e of p){if(h+e.text.length>o){h===0&&(m.push({...e,text:e.text.slice(0,o)}),h=o);break}m.push(e),h+=e.text.length+2}m.sort((e,t)=>e.index-t.index);let g=m.map(e=>e.text).join(`
2
2
 
3
- `);return{text:m,originalChars:t.length,compressedChars:m.length,ratio:m.length/t.length,segmentsKept:n.length,segmentsTotal:s.length}}export{w as compact};
3
+ `);return{text:g,originalChars:l.length,compressedChars:g.length,ratio:g.length/l.length,segmentsKept:m.length,segmentsTotal:u.length}}export{r as compact};
@@ -1,10 +1,12 @@
1
- export interface TransformOptions {
2
- input: unknown;
3
- expression: string;
1
+ //#region packages/tools/src/data-transform.d.ts
2
+ interface TransformOptions {
3
+ input: unknown;
4
+ expression: string;
4
5
  }
5
- export interface TransformResult {
6
- output: unknown;
7
- outputString: string;
6
+ interface TransformResult {
7
+ output: unknown;
8
+ outputString: string;
8
9
  }
9
- export declare function dataTransform(options: TransformOptions): TransformResult;
10
- //# sourceMappingURL=data-transform.d.ts.map
10
+ declare function dataTransform(options: TransformOptions): TransformResult;
11
+ //#endregion
12
+ export { TransformOptions, TransformResult, dataTransform };
@@ -1 +1 @@
1
- function g(t){const{input:o,expression:e}=t,n=typeof o=="string"?JSON.parse(o):o;let r;if(e===".")r=n;else if(e==="keys")r=Object.keys(d(n));else if(e==="values")r=Object.values(d(n));else if(e==="length")r=Array.isArray(n)?n.length:Object.keys(d(n)).length;else if(e==="flatten")r=u(n).flat();else if(e==="unique")r=[...new Set(u(n))];else if(e==="sort")r=[...u(n)].sort();else if(e==="reverse")r=[...u(n)].reverse();else if(e.startsWith("."))r=p(n,e.slice(1));else if(e.startsWith("map(")&&e.endsWith(")")){const s=e.slice(4,-1).trim(),i=s.startsWith(".")?s.slice(1):s;r=u(n).map(a=>p(a,i))}else if(e.startsWith("select(")&&e.endsWith(")"))r=w(u(n),e.slice(7,-1).trim());else if(e.startsWith("group_by(")&&e.endsWith(")")){const s=e.slice(9,-1).trim().replace(/^\./,""),i={};for(const a of u(n)){const f=String(p(a,s)??"null");i[f]||(i[f]=[]),i[f].push(a)}r=i}else if(e.startsWith("pick(")&&e.endsWith(")")){const s=e.slice(5,-1).split(",").map(i=>i.trim().replace(/^\./,"")).filter(Boolean);r=Array.isArray(n)?u(n).map(i=>k(i,s)):k(n,s)}else throw new Error(`Unsupported expression: ${e}. Supported: ., .path.to.field, keys, values, length, flatten, unique, sort, reverse, map(.field), select(.field == | != | > | < | >= | <= "value"), group_by(.field), pick(.a, .b)`);return{output:r,outputString:typeof r=="string"?r:JSON.stringify(r,null,2)??"null"}}function w(t,o){const e=o.match(/^\.?([\w.[\]]+)\s*(==|!=|>=|<=|>|<)\s*"?([^"]*)"?$/);if(!e)throw new Error(`Unsupported select expression: ${o}`);const[,n,r,s]=e;return t.filter(i=>{const a=p(i,n),f=String(a);switch(r){case"==":return f===s;case"!=":return f!==s;case">":case"<":case">=":case"<=":{const l=Number(a),c=Number(s);return Number.isNaN(l)||Number.isNaN(c)?!1:r===">"?l>c:r==="<"?l<c:r===">="?l>=c:l<=c}default:return!1}})}function k(t,o){const e={};for(const n of o)e[n]=p(t,n);return e}function p(t,o){if(!o)return t;const e=[...o.matchAll(/([^.[\]]+)|\[(\d+)\]/g)].map(r=>r[1]??Number.parseInt(r[2],10));let n=t;for(const r of e){if(n==null)return;if(typeof r=="number"){if(!Array.isArray(n))return;n=n[r];continue}if(typeof n!="object")return;n=n[r]}return n}function u(t){if(!Array.isArray(t))throw new Error("Operation requires an array input.");return t}function d(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Operation requires an object input.");return t}export{g as dataTransform};
1
+ function e(e){let{input:o,expression:s}=e,c;if(typeof o==`string`)try{c=JSON.parse(o)}catch{throw Error(`Invalid JSON input`)}else c=o;let l;if(s===`.`)l=c;else if(s===`keys`)l=Object.keys(a(c));else if(s===`values`)l=Object.values(a(c));else if(s===`length`)l=Array.isArray(c)?c.length:Object.keys(a(c)).length;else if(s===`flatten`)l=i(c).flat();else if(s===`unique`)l=[...new Set(i(c))];else if(s===`sort`)l=[...i(c)].sort();else if(s===`reverse`)l=[...i(c)].reverse();else if(s.startsWith(`.`))l=r(c,s.slice(1));else if(s.startsWith(`map(`)&&s.endsWith(`)`)){let e=s.slice(4,-1).trim(),t=e.startsWith(`.`)?e.slice(1):e;l=i(c).map(e=>r(e,t))}else if(s.startsWith(`select(`)&&s.endsWith(`)`))l=t(i(c),s.slice(7,-1).trim());else if(s.startsWith(`group_by(`)&&s.endsWith(`)`)){let e=s.slice(9,-1).trim().replace(/^\./,``),t={};for(let n of i(c)){let i=String(r(n,e)??`null`);t[i]||(t[i]=[]),t[i].push(n)}l=t}else if(s.startsWith(`pick(`)&&s.endsWith(`)`)){let e=s.slice(5,-1).split(`,`).map(e=>e.trim().replace(/^\./,``)).filter(Boolean);l=Array.isArray(c)?i(c).map(t=>n(t,e)):n(c,e)}else throw Error(`Unsupported expression: ${s}. Supported: ., .path.to.field, keys, values, length, flatten, unique, sort, reverse, map(.field), select(.field == | != | > | < | >= | <= "value"), group_by(.field), pick(.a, .b)`);return{output:l,outputString:typeof l==`string`?l:JSON.stringify(l,null,2)??`null`}}function t(e,t){let n=t.match(/^\.?([\w.[\]]+)\s*(==|!=|>=|<=|>|<)\s*"?([^"]*)"?$/);if(!n)throw Error(`Unsupported select expression: ${t}`);let[,i,a,o]=n;return e.filter(e=>{let t=r(e,i),n=String(t);switch(a){case`==`:return n===o;case`!=`:return n!==o;case`>`:case`<`:case`>=`:case`<=`:{let e=Number(t),n=Number(o);return Number.isNaN(e)||Number.isNaN(n)?!1:a===`>`?e>n:a===`<`?e<n:a===`>=`?e>=n:e<=n}default:return!1}})}function n(e,t){let n={};for(let i of t)n[i]=r(e,i);return n}function r(e,t){if(!t)return e;let n=[...t.matchAll(/([^.[\]]+)|\[(\d+)\]/g)].map(e=>e[1]??Number.parseInt(e[2],10)),r=e;for(let e of n){if(r==null)return;if(typeof e==`number`){if(!Array.isArray(r))return;r=r[e];continue}if(typeof r!=`object`)return;r=r[e]}return r}function i(e){if(!Array.isArray(e))throw Error(`Operation requires an array input.`);return e}function a(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Operation requires an object input.`);return e}export{e as dataTransform};
@@ -1,29 +1,32 @@
1
- import type { IEmbedder } from '@kb/embeddings';
2
- import type { IKnowledgeStore } from '@kb/store';
3
- export interface DeadSymbolOptions {
4
- /** Root path to scope the search */
5
- rootPath?: string;
6
- /** Max symbols to scan (default: 100) */
7
- limit?: number;
1
+ import { IEmbedder } from "@kb/embeddings";
2
+ import { IKnowledgeStore } from "@kb/store";
3
+
4
+ //#region packages/tools/src/dead-symbols.d.ts
5
+ interface DeadSymbolOptions {
6
+ /** Root path to scope the search */
7
+ rootPath?: string;
8
+ /** Max symbols to scan (default: 100) */
9
+ limit?: number;
8
10
  }
9
- export interface DeadSymbol {
10
- name: string;
11
- path: string;
12
- line: number;
13
- kind: string;
11
+ interface DeadSymbol {
12
+ name: string;
13
+ path: string;
14
+ line: number;
15
+ kind: string;
14
16
  }
15
- export interface DeadSymbolResult {
16
- /** Dead symbols in source files (.ts/.js/.tsx/.jsx) — actionable */
17
- deadInSource: DeadSymbol[];
18
- /** Dead symbols in documentation files (.md) — informational */
19
- deadInDocs: DeadSymbol[];
20
- totalExports: number;
21
- totalDeadSource: number;
22
- totalDeadDocs: number;
23
- /** @deprecated Use deadInSource instead */
24
- deadSymbols: DeadSymbol[];
25
- /** @deprecated Use totalDeadSource + totalDeadDocs instead */
26
- totalDead: number;
17
+ interface DeadSymbolResult {
18
+ /** Dead symbols in source files (.ts/.js/.tsx/.jsx) — actionable */
19
+ deadInSource: DeadSymbol[];
20
+ /** Dead symbols in documentation files (.md) — informational */
21
+ deadInDocs: DeadSymbol[];
22
+ totalExports: number;
23
+ totalDeadSource: number;
24
+ totalDeadDocs: number;
25
+ /** @deprecated Use deadInSource instead */
26
+ deadSymbols: DeadSymbol[];
27
+ /** @deprecated Use totalDeadSource + totalDeadDocs instead */
28
+ totalDead: number;
27
29
  }
28
- export declare function findDeadSymbols(embedder: IEmbedder, store: IKnowledgeStore, options?: DeadSymbolOptions): Promise<DeadSymbolResult>;
29
- //# sourceMappingURL=dead-symbols.d.ts.map
30
+ declare function findDeadSymbols(embedder: IEmbedder, store: IKnowledgeStore, options?: DeadSymbolOptions): Promise<DeadSymbolResult>;
31
+ //#endregion
32
+ export { DeadSymbol, DeadSymbolOptions, DeadSymbolResult, findDeadSymbols };
@@ -1,2 +1,2 @@
1
- import{extname as I}from"node:path";const P=new Set([".md",".mdx"]);async function k(o,s,c={}){const{rootPath:i,limit:y=100}=c,D=await o.embed("export function class const type interface enum"),g=await s.search(D,{limit:y*3}),h=/^export\s+(?:async\s+)?(?:function|class|const|let|interface|type|enum)\s+(\w+)/gm,b=[];for(const e of g){if(!R(e.record.sourcePath,i))continue;const t=e.record.content;h.lastIndex=0;for(const d of t.matchAll(h)){const l=d.index??0,p=t.slice(0,l).split(`
2
- `).length-1,u=t.slice(l).match(/export\s+(?:async\s+)?(\w+)/);b.push({name:d[1],path:e.record.sourcePath,line:e.record.startLine+p,kind:u?.[1]??"unknown"})}}const m=new Map;for(const e of b){const t=`${e.path}:${e.name}`;m.has(t)||m.set(t,e)}const S=[];for(const e of m.values()){const t=E(e.name),d=new RegExp(`import\\s+.*\\b${t}\\b.*from`,"m"),l=new RegExp(`export\\s+\\{[^}]*\\b${t}\\b`,"m"),p=await s.ftsSearch(`import ${e.name}`,{limit:10}),u=p.some(a=>a.record.sourcePath!==e.path&&d.test(a.record.content)),w=p.some(a=>a.record.sourcePath!==e.path&&l.test(a.record.content));!u&&!w&&S.push(e)}const f=(e,t)=>e.path===t.path?e.line-t.line:e.path.localeCompare(t.path),n=[],r=[];for(const e of S){const t=I(e.path).toLowerCase();P.has(t)?r.push(e):n.push(e)}return n.sort(f),r.sort(f),{deadInSource:n,deadInDocs:r,totalExports:m.size,totalDeadSource:n.length,totalDeadDocs:r.length,deadSymbols:[...n,...r],totalDead:n.length+r.length}}function E(o){return o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function R(o,s){if(!s)return!0;const c=x(s).replace(/\/+$/,""),i=x(o);return i===c||i.startsWith(`${c}/`)}function x(o){return o.replace(/\\/g,"/").replace(/^\.\//,"")}export{k as findDeadSymbols};
1
+ import{readFile as e}from"node:fs/promises";import{extname as t}from"node:path";import{SUPPORTED_EXTENSIONS as n,WasmRuntime as r,extractSymbols as i}from"../../chunker/dist/index.js";const a=new Set([`.md`,`.mdx`]);async function o(o,l,u={}){let{rootPath:d,limit:f=100}=u,p=await o.embed(`export function class const type interface enum`),m=await l.search(p,{limit:f*3}),h=/^export\s+(?:async\s+)?(?:function|class|const|let|interface|type|enum)\s+(\w+)/gm,g=[],_=new Map;for(let e of m){if(!c(e.record.sourcePath,d))continue;let t=_.get(e.record.sourcePath)??[];t.push(e),_.set(e.record.sourcePath,t)}let v=new Set;if(r.get())for(let[r]of _){let a=t(r);if(n.has(a))try{let t=await i(await e(r,`utf-8`),a,r);for(let e of t)e.exported&&g.push({name:e.name,path:r,line:e.line,kind:e.kind});v.add(r)}catch{}}for(let[e,t]of _)if(!v.has(e))for(let e of t){let t=e.record.content;h.lastIndex=0;for(let n of t.matchAll(h)){let r=n.index??0,i=t.slice(0,r).split(`
2
+ `).length-1,a=t.slice(r).match(/export\s+(?:async\s+)?(\w+)/);g.push({name:n[1],path:e.record.sourcePath,line:e.record.startLine+i,kind:a?.[1]??`unknown`})}}let y=new Map;for(let e of g){let t=`${e.path}:${e.name}`;y.has(t)||y.set(t,e)}let b=[];for(let e of y.values()){let t=s(e.name),n=RegExp(`import\\s+.*\\b${t}\\b.*from`,`m`),r=RegExp(`export\\s+\\{[^}]*\\b${t}\\b`,`m`),i=await l.ftsSearch(`import ${e.name}`,{limit:10}),a=i.some(t=>t.record.sourcePath!==e.path&&n.test(t.record.content)),o=i.some(t=>t.record.sourcePath!==e.path&&r.test(t.record.content));!a&&!o&&b.push(e)}let x=(e,t)=>e.path===t.path?e.line-t.line:e.path.localeCompare(t.path),S=[],C=[];for(let e of b){let n=t(e.path).toLowerCase();a.has(n)?C.push(e):S.push(e)}return S.sort(x),C.sort(x),{deadInSource:S,deadInDocs:C,totalExports:y.size,totalDeadSource:S.length,totalDeadDocs:C.length,deadSymbols:[...S,...C],totalDead:S.length+C.length}}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function c(e,t){if(!t)return!0;let n=l(t).replace(/\/+$/,``),r=l(e);return r===n||r.startsWith(`${n}/`)}function l(e){return e.replace(/\\/g,`/`).replace(/^\.\//,``)}export{o as findDeadSymbols};
@@ -1,34 +1,36 @@
1
- export interface DelegateOptions {
2
- /** The prompt / task to send to the local model. */
3
- prompt: string;
4
- /** Model to use (default: the first available model). */
5
- model?: string;
6
- /** Optional system prompt. */
7
- system?: string;
8
- /** Optional context to include before the prompt. */
9
- context?: string;
10
- /** Temperature (0-2, default: 0.3 for deterministic-ish output). */
11
- temperature?: number;
12
- /** Timeout in milliseconds (default: 120_000). */
13
- timeout?: number;
14
- /** Ollama base URL (default: http://localhost:11434). */
15
- baseUrl?: string;
1
+ //#region packages/tools/src/delegate.d.ts
2
+ interface DelegateOptions {
3
+ /** The prompt / task to send to the local model. */
4
+ prompt: string;
5
+ /** Model to use (default: the first available model). */
6
+ model?: string;
7
+ /** Optional system prompt. */
8
+ system?: string;
9
+ /** Optional context to include before the prompt. */
10
+ context?: string;
11
+ /** Temperature (0-2, default: 0.3 for deterministic-ish output). */
12
+ temperature?: number;
13
+ /** Timeout in milliseconds (default: 120_000). */
14
+ timeout?: number;
15
+ /** Ollama base URL (default: http://localhost:11434). */
16
+ baseUrl?: string;
16
17
  }
17
- export interface DelegateResult {
18
- model: string;
19
- response: string;
20
- durationMs: number;
21
- tokenCount?: number;
22
- error?: string;
18
+ interface DelegateResult {
19
+ model: string;
20
+ response: string;
21
+ durationMs: number;
22
+ tokenCount?: number;
23
+ error?: string;
23
24
  }
24
25
  /**
25
26
  * Check if Ollama is running and return available models.
26
27
  */
27
- export declare function delegateListModels(baseUrl?: string): Promise<string[]>;
28
+ declare function delegateListModels(baseUrl?: string): Promise<string[]>;
28
29
  /**
29
30
  * Delegate a task to a local Ollama model.
30
31
  *
31
32
  * Fails fast if Ollama is not running or no models are available.
32
33
  */
33
- export declare function delegate(options: DelegateOptions): Promise<DelegateResult>;
34
- //# sourceMappingURL=delegate.d.ts.map
34
+ declare function delegate(options: DelegateOptions): Promise<DelegateResult>;
35
+ //#endregion
36
+ export { DelegateOptions, DelegateResult, delegate, delegateListModels };
@@ -1,5 +1 @@
1
- import{request as l}from"node:http";const c="http://localhost:11434",p=12e4;async function d(e=c){const o=await g(`${e}/api/tags`);return(JSON.parse(o).models??[]).map(r=>r.name)}async function w(e){const o=e.baseUrl??c,a=e.timeout??p;let r;try{r=await d(o)}catch{return{model:e.model??"unknown",response:"",durationMs:0,error:`Ollama is not running at ${o}. Start it with: ollama serve`}}if(r.length===0)return{model:"none",response:"",durationMs:0,error:"No Ollama models available. Pull one with: ollama pull qwen2.5-coder:7b"};const t=e.model??r[0];if(!r.includes(t))return{model:t,response:"",durationMs:0,error:`Model "${t}" not found. Available: ${r.join(", ")}`};let s="";e.context&&(s+=`<context>
2
- ${e.context}
3
- </context>
4
-
5
- `),s+=e.prompt;const n=Date.now(),u=JSON.stringify({model:t,prompt:s,system:e.system,stream:!1,options:{temperature:e.temperature??.3}});try{const i=await f(`${o}/api/generate`,u,a),m=JSON.parse(i);return m.error?{model:t,response:"",durationMs:Date.now()-n,error:m.error}:{model:t,response:(m.response??"").trim(),durationMs:Date.now()-n,tokenCount:m.eval_count}}catch(i){return{model:t,response:"",durationMs:Date.now()-n,error:i instanceof Error?i.message:String(i)}}}function g(e){return new Promise((o,a)=>{const r=new URL(e),t=l({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET",timeout:5e3},s=>{const n=[];s.on("data",u=>n.push(u)),s.on("end",()=>o(Buffer.concat(n).toString("utf-8")))});t.on("error",a),t.on("timeout",()=>{t.destroy(),a(new Error("Connection timeout"))}),t.end()})}function f(e,o,a){return new Promise((r,t)=>{const s=new URL(e),n=l({hostname:s.hostname,port:s.port,path:s.pathname,method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(o)},timeout:a},u=>{const i=[];u.on("data",m=>i.push(m)),u.on("end",()=>r(Buffer.concat(i).toString("utf-8")))});n.on("error",t),n.on("timeout",()=>{n.destroy(),t(new Error(`Ollama request timed out after ${a}ms`))}),n.write(o),n.end()})}export{w as delegate,d as delegateListModels};
1
+ import{request as e}from"node:http";const t=`http://localhost:11434`;async function n(e=t){let n=await i(`${e}/api/tags`),r;try{r=JSON.parse(n)}catch{throw Error(`Ollama returned invalid JSON`)}return(r.models??[]).map(e=>e.name)}async function r(e){let r=e.baseUrl??t,i=e.timeout??12e4,o;try{o=await n(r)}catch{return{model:e.model??`unknown`,response:``,durationMs:0,error:`Ollama is not running at ${r}. Start it with: ollama serve`}}if(o.length===0)return{model:`none`,response:``,durationMs:0,error:`No Ollama models available. Pull one with: ollama pull qwen2.5-coder:7b`};let s=e.model??o[0];if(!o.includes(s))return{model:s,response:``,durationMs:0,error:`Model "${s}" not found. Available: ${o.join(`, `)}`};let c=``;e.context&&(c+=`<context>\n${e.context}\n</context>\n\n`),c+=e.prompt;let l=Date.now(),u=JSON.stringify({model:s,prompt:c,system:e.system,stream:!1,options:{temperature:e.temperature??.3}});try{let e=await a(`${r}/api/generate`,u,i),t=JSON.parse(e);return t.error?{model:s,response:``,durationMs:Date.now()-l,error:t.error}:{model:s,response:(t.response??``).trim(),durationMs:Date.now()-l,tokenCount:t.eval_count}}catch(e){return{model:s,response:``,durationMs:Date.now()-l,error:e instanceof Error?e.message:String(e)}}}function i(t){return new Promise((n,r)=>{let i=new URL(t),a=e({hostname:i.hostname,port:i.port,path:i.pathname,method:`GET`,timeout:5e3},e=>{let t=[];e.on(`data`,e=>t.push(e)),e.on(`end`,()=>n(Buffer.concat(t).toString(`utf-8`)))});a.on(`error`,r),a.on(`timeout`,()=>{a.destroy(),r(Error(`Connection timeout`))}),a.end()})}function a(t,n,r){return new Promise((i,a)=>{let o=new URL(t),s=e({hostname:o.hostname,port:o.port,path:o.pathname,method:`POST`,headers:{"Content-Type":`application/json`,"Content-Length":Buffer.byteLength(n)},timeout:r},e=>{let t=[];e.on(`data`,e=>t.push(e)),e.on(`end`,()=>i(Buffer.concat(t).toString(`utf-8`)))});s.on(`error`,a),s.on(`timeout`,()=>{s.destroy(),a(Error(`Ollama request timed out after ${r}ms`))}),s.write(n),s.end()})}export{r as delegate,n as delegateListModels};
@@ -1,26 +1,28 @@
1
- export interface DiffFile {
2
- path: string;
3
- oldPath?: string;
4
- status: 'added' | 'modified' | 'deleted' | 'renamed';
5
- hunks: DiffHunk[];
6
- additions: number;
7
- deletions: number;
1
+ //#region packages/tools/src/diff-parse.d.ts
2
+ interface DiffFile {
3
+ path: string;
4
+ oldPath?: string;
5
+ status: 'added' | 'modified' | 'deleted' | 'renamed';
6
+ hunks: DiffHunk[];
7
+ additions: number;
8
+ deletions: number;
8
9
  }
9
- export interface DiffHunk {
10
- oldStart: number;
11
- oldLines: number;
12
- newStart: number;
13
- newLines: number;
14
- header: string;
15
- changes: DiffChange[];
10
+ interface DiffHunk {
11
+ oldStart: number;
12
+ oldLines: number;
13
+ newStart: number;
14
+ newLines: number;
15
+ header: string;
16
+ changes: DiffChange[];
16
17
  }
17
- export interface DiffChange {
18
- type: 'add' | 'delete' | 'context';
19
- line: number;
20
- content: string;
18
+ interface DiffChange {
19
+ type: 'add' | 'delete' | 'context';
20
+ line: number;
21
+ content: string;
21
22
  }
22
- export interface DiffParseOptions {
23
- diff: string;
23
+ interface DiffParseOptions {
24
+ diff: string;
24
25
  }
25
- export declare function diffParse(options: DiffParseOptions): DiffFile[];
26
- //# sourceMappingURL=diff-parse.d.ts.map
26
+ declare function diffParse(options: DiffParseOptions): DiffFile[];
27
+ //#endregion
28
+ export { DiffChange, DiffFile, DiffHunk, DiffParseOptions, diffParse };
@@ -1,3 +1,3 @@
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};
@@ -1,53 +1,50 @@
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>;
53
- //# sourceMappingURL=digest.d.ts.map
48
+ declare function digest(embedder: IEmbedder, options: DigestOptions): Promise<DigestResult>;
49
+ //#endregion
50
+ export { DigestFieldEntry, DigestOptions, DigestResult, DigestSource, digest };
@@ -1,7 +1,6 @@
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};