@vpxa/kb 0.1.15 → 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 (449) hide show
  1. package/README.md +62 -15
  2. package/package.json +5 -1
  3. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +1 -2
  4. package/packages/analyzers/dist/blast-radius-analyzer.js +1 -2
  5. package/packages/analyzers/dist/dependency-analyzer.d.ts +2 -3
  6. package/packages/analyzers/dist/dependency-analyzer.js +3 -4
  7. package/packages/analyzers/dist/diagram-generator.d.ts +1 -2
  8. package/packages/analyzers/dist/diagram-generator.js +1 -2
  9. package/packages/analyzers/dist/entry-point-analyzer.d.ts +1 -2
  10. package/packages/analyzers/dist/entry-point-analyzer.js +3 -4
  11. package/packages/analyzers/dist/knowledge-producer.d.ts +6 -2
  12. package/packages/analyzers/dist/knowledge-producer.js +4 -3
  13. package/packages/analyzers/dist/pattern-analyzer.d.ts +1 -2
  14. package/packages/analyzers/dist/pattern-analyzer.js +2 -3
  15. package/packages/analyzers/dist/regex-call-graph.d.ts +1 -2
  16. package/packages/analyzers/dist/regex-call-graph.js +1 -2
  17. package/packages/analyzers/dist/structure-analyzer.d.ts +1 -2
  18. package/packages/analyzers/dist/structure-analyzer.js +1 -2
  19. package/packages/analyzers/dist/symbol-analyzer.d.ts +3 -3
  20. package/packages/analyzers/dist/symbol-analyzer.js +8 -7
  21. package/packages/analyzers/dist/ts-call-graph.d.ts +1 -2
  22. package/packages/analyzers/dist/ts-call-graph.js +1 -2
  23. package/packages/analyzers/dist/types.d.ts +1 -2
  24. package/packages/chunker/dist/call-graph-extractor.d.ts +3 -3
  25. package/packages/chunker/dist/call-graph-extractor.js +1 -2
  26. package/packages/chunker/dist/chunker-factory.d.ts +12 -4
  27. package/packages/chunker/dist/chunker-factory.js +1 -2
  28. package/packages/chunker/dist/chunker.interface.d.ts +1 -2
  29. package/packages/chunker/dist/code-chunker.d.ts +1 -2
  30. package/packages/chunker/dist/code-chunker.js +1 -2
  31. package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
  32. package/packages/chunker/dist/extractors/call-extractor.js +1 -0
  33. package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
  34. package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
  35. package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
  36. package/packages/chunker/dist/extractors/import-extractor.js +1 -0
  37. package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
  38. package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
  39. package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
  40. package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
  41. package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
  42. package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
  43. package/packages/chunker/dist/extractors/types.d.ts +36 -0
  44. package/packages/chunker/dist/extractors/types.js +1 -0
  45. package/packages/chunker/dist/generic-chunker.d.ts +1 -2
  46. package/packages/chunker/dist/generic-chunker.js +1 -2
  47. package/packages/chunker/dist/index.d.ts +15 -4
  48. package/packages/chunker/dist/index.js +1 -1
  49. package/packages/chunker/dist/markdown-chunker.d.ts +1 -2
  50. package/packages/chunker/dist/markdown-chunker.js +1 -2
  51. package/packages/chunker/dist/wasm/languages.d.ts +18 -0
  52. package/packages/chunker/dist/wasm/languages.js +1 -0
  53. package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
  54. package/packages/chunker/dist/wasm/query-executor.js +1 -0
  55. package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
  56. package/packages/chunker/dist/wasm/runtime.js +1 -0
  57. package/packages/chunker/dist/wasm/types.d.ts +84 -0
  58. package/packages/chunker/dist/wasm/types.js +1 -0
  59. package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
  60. package/packages/chunker/dist/wasm-chunker.js +6 -0
  61. package/packages/chunker/src/queries/go/calls.scm +11 -0
  62. package/packages/chunker/src/queries/go/entry-points.scm +20 -0
  63. package/packages/chunker/src/queries/go/imports.scm +6 -0
  64. package/packages/chunker/src/queries/go/patterns.scm +25 -0
  65. package/packages/chunker/src/queries/go/symbols.scm +26 -0
  66. package/packages/chunker/src/queries/java/calls.scm +10 -0
  67. package/packages/chunker/src/queries/java/entry-points.scm +27 -0
  68. package/packages/chunker/src/queries/java/imports.scm +11 -0
  69. package/packages/chunker/src/queries/java/patterns.scm +27 -0
  70. package/packages/chunker/src/queries/java/symbols.scm +28 -0
  71. package/packages/chunker/src/queries/javascript/calls.scm +21 -0
  72. package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
  73. package/packages/chunker/src/queries/javascript/imports.scm +32 -0
  74. package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
  75. package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
  76. package/packages/chunker/src/queries/python/calls.scm +11 -0
  77. package/packages/chunker/src/queries/python/entry-points.scm +21 -0
  78. package/packages/chunker/src/queries/python/imports.scm +14 -0
  79. package/packages/chunker/src/queries/python/patterns.scm +25 -0
  80. package/packages/chunker/src/queries/python/symbols.scm +17 -0
  81. package/packages/chunker/src/queries/rust/calls.scm +20 -0
  82. package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
  83. package/packages/chunker/src/queries/rust/imports.scm +26 -0
  84. package/packages/chunker/src/queries/rust/patterns.scm +18 -0
  85. package/packages/chunker/src/queries/rust/symbols.scm +73 -0
  86. package/packages/chunker/src/queries/typescript/calls.scm +21 -0
  87. package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
  88. package/packages/chunker/src/queries/typescript/imports.scm +35 -0
  89. package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
  90. package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
  91. package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
  92. package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
  93. package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
  94. package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
  95. package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
  96. package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
  97. package/packages/chunker/wasm/tree-sitter.wasm +0 -0
  98. package/packages/cli/dist/commands/analyze.d.ts +1 -2
  99. package/packages/cli/dist/commands/analyze.js +1 -2
  100. package/packages/cli/dist/commands/context-cmds.d.ts +1 -2
  101. package/packages/cli/dist/commands/context-cmds.js +1 -2
  102. package/packages/cli/dist/commands/environment.d.ts +1 -2
  103. package/packages/cli/dist/commands/environment.js +1 -2
  104. package/packages/cli/dist/commands/execution.d.ts +1 -2
  105. package/packages/cli/dist/commands/execution.js +1 -2
  106. package/packages/cli/dist/commands/graph.d.ts +1 -2
  107. package/packages/cli/dist/commands/graph.js +1 -2
  108. package/packages/cli/dist/commands/init/adapters.d.ts +4 -3
  109. package/packages/cli/dist/commands/init/adapters.js +1 -2
  110. package/packages/cli/dist/commands/init/config.d.ts +1 -2
  111. package/packages/cli/dist/commands/init/config.js +3 -4
  112. package/packages/cli/dist/commands/init/constants.d.ts +18 -0
  113. package/packages/cli/dist/commands/init/constants.js +1 -0
  114. package/packages/cli/dist/commands/init/curated.d.ts +1 -2
  115. package/packages/cli/dist/commands/init/curated.js +1 -2
  116. package/packages/cli/dist/commands/init/global.d.ts +34 -0
  117. package/packages/cli/dist/commands/init/global.js +5 -0
  118. package/packages/cli/dist/commands/init/index.d.ts +7 -2
  119. package/packages/cli/dist/commands/init/index.js +5 -3
  120. package/packages/cli/dist/commands/init/scaffold.d.ts +1 -2
  121. package/packages/cli/dist/commands/init/scaffold.js +1 -2
  122. package/packages/cli/dist/commands/init/templates.d.ts +3 -4
  123. package/packages/cli/dist/commands/init/templates.js +106 -243
  124. package/packages/cli/dist/commands/knowledge.d.ts +1 -2
  125. package/packages/cli/dist/commands/knowledge.js +1 -2
  126. package/packages/cli/dist/commands/search.d.ts +1 -2
  127. package/packages/cli/dist/commands/search.js +1 -2
  128. package/packages/cli/dist/commands/system.d.ts +1 -2
  129. package/packages/cli/dist/commands/system.js +3 -4
  130. package/packages/cli/dist/commands/workspace.d.ts +1 -2
  131. package/packages/cli/dist/commands/workspace.js +1 -2
  132. package/packages/cli/dist/context.d.ts +1 -2
  133. package/packages/cli/dist/context.js +1 -2
  134. package/packages/cli/dist/helpers.d.ts +1 -2
  135. package/packages/cli/dist/helpers.js +1 -2
  136. package/packages/cli/dist/index.d.ts +1 -2
  137. package/packages/cli/dist/index.js +1 -2
  138. package/packages/cli/dist/kb-init.d.ts +1 -2
  139. package/packages/cli/dist/kb-init.js +1 -2
  140. package/packages/cli/dist/types.d.ts +1 -2
  141. package/packages/core/dist/constants.d.ts +23 -2
  142. package/packages/core/dist/constants.js +1 -2
  143. package/packages/core/dist/content-detector.d.ts +1 -2
  144. package/packages/core/dist/content-detector.js +1 -2
  145. package/packages/core/dist/errors.d.ts +1 -2
  146. package/packages/core/dist/errors.js +1 -2
  147. package/packages/core/dist/global-registry.d.ts +62 -0
  148. package/packages/core/dist/global-registry.js +1 -0
  149. package/packages/core/dist/index.d.ts +4 -3
  150. package/packages/core/dist/index.js +1 -1
  151. package/packages/core/dist/logger.d.ts +4 -2
  152. package/packages/core/dist/logger.js +1 -2
  153. package/packages/core/dist/types.d.ts +1 -2
  154. package/packages/core/dist/types.js +1 -2
  155. package/packages/embeddings/dist/embedder.interface.d.ts +1 -2
  156. package/packages/embeddings/dist/onnx-embedder.d.ts +1 -2
  157. package/packages/embeddings/dist/onnx-embedder.js +1 -2
  158. package/packages/enterprise-bridge/dist/cache.d.ts +1 -2
  159. package/packages/enterprise-bridge/dist/cache.js +1 -2
  160. package/packages/enterprise-bridge/dist/er-client.d.ts +1 -2
  161. package/packages/enterprise-bridge/dist/er-client.js +1 -2
  162. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +1 -2
  163. package/packages/enterprise-bridge/dist/evolution-collector.js +1 -2
  164. package/packages/enterprise-bridge/dist/policy-store.d.ts +1 -2
  165. package/packages/enterprise-bridge/dist/policy-store.js +1 -2
  166. package/packages/enterprise-bridge/dist/push-adapter.d.ts +1 -2
  167. package/packages/enterprise-bridge/dist/push-adapter.js +1 -2
  168. package/packages/enterprise-bridge/dist/result-merger.d.ts +1 -2
  169. package/packages/enterprise-bridge/dist/result-merger.js +1 -2
  170. package/packages/enterprise-bridge/dist/types.d.ts +1 -2
  171. package/packages/enterprise-bridge/dist/types.js +1 -2
  172. package/packages/indexer/dist/file-hasher.d.ts +1 -2
  173. package/packages/indexer/dist/file-hasher.js +1 -2
  174. package/packages/indexer/dist/filesystem-crawler.d.ts +1 -2
  175. package/packages/indexer/dist/filesystem-crawler.js +1 -2
  176. package/packages/indexer/dist/graph-extractor.d.ts +1 -2
  177. package/packages/indexer/dist/graph-extractor.js +1 -2
  178. package/packages/indexer/dist/incremental-indexer.d.ts +1 -2
  179. package/packages/indexer/dist/incremental-indexer.js +1 -2
  180. package/packages/server/dist/config.d.ts +1 -2
  181. package/packages/server/dist/config.js +1 -2
  182. package/packages/server/dist/cross-workspace.d.ts +43 -0
  183. package/packages/server/dist/cross-workspace.js +1 -0
  184. package/packages/server/dist/curated-manager.d.ts +2 -3
  185. package/packages/server/dist/curated-manager.js +4 -5
  186. package/packages/server/dist/index.js +1 -2
  187. package/packages/server/dist/replay-interceptor.d.ts +1 -2
  188. package/packages/server/dist/replay-interceptor.js +1 -2
  189. package/packages/server/dist/resources/resources.d.ts +1 -2
  190. package/packages/server/dist/resources/resources.js +1 -2
  191. package/packages/server/dist/server.d.ts +4 -2
  192. package/packages/server/dist/server.js +1 -2
  193. package/packages/server/dist/tools/analyze.tools.d.ts +1 -2
  194. package/packages/server/dist/tools/analyze.tools.js +1 -2
  195. package/packages/server/dist/tools/audit.tool.d.ts +1 -2
  196. package/packages/server/dist/tools/audit.tool.js +1 -2
  197. package/packages/server/dist/tools/bridge.tools.d.ts +1 -2
  198. package/packages/server/dist/tools/bridge.tools.js +1 -2
  199. package/packages/server/dist/tools/evolution.tools.d.ts +1 -2
  200. package/packages/server/dist/tools/evolution.tools.js +1 -2
  201. package/packages/server/dist/tools/forge.tools.d.ts +1 -2
  202. package/packages/server/dist/tools/forge.tools.js +5 -6
  203. package/packages/server/dist/tools/forget.tool.d.ts +1 -2
  204. package/packages/server/dist/tools/forget.tool.js +1 -2
  205. package/packages/server/dist/tools/graph.tool.d.ts +1 -2
  206. package/packages/server/dist/tools/graph.tool.js +1 -2
  207. package/packages/server/dist/tools/list.tool.d.ts +1 -2
  208. package/packages/server/dist/tools/list.tool.js +1 -2
  209. package/packages/server/dist/tools/lookup.tool.d.ts +1 -2
  210. package/packages/server/dist/tools/lookup.tool.js +1 -2
  211. package/packages/server/dist/tools/onboard.tool.d.ts +1 -2
  212. package/packages/server/dist/tools/onboard.tool.js +1 -2
  213. package/packages/server/dist/tools/policy.tools.d.ts +1 -2
  214. package/packages/server/dist/tools/policy.tools.js +1 -2
  215. package/packages/server/dist/tools/produce.tool.d.ts +1 -2
  216. package/packages/server/dist/tools/produce.tool.js +1 -2
  217. package/packages/server/dist/tools/read.tool.d.ts +1 -2
  218. package/packages/server/dist/tools/read.tool.js +2 -3
  219. package/packages/server/dist/tools/reindex.tool.d.ts +1 -2
  220. package/packages/server/dist/tools/reindex.tool.js +3 -3
  221. package/packages/server/dist/tools/remember.tool.d.ts +1 -2
  222. package/packages/server/dist/tools/remember.tool.js +1 -2
  223. package/packages/server/dist/tools/replay.tool.d.ts +1 -2
  224. package/packages/server/dist/tools/replay.tool.js +1 -2
  225. package/packages/server/dist/tools/search.tool.d.ts +1 -2
  226. package/packages/server/dist/tools/search.tool.js +4 -5
  227. package/packages/server/dist/tools/status.tool.d.ts +7 -3
  228. package/packages/server/dist/tools/status.tool.js +2 -3
  229. package/packages/server/dist/tools/toolkit.tools.d.ts +1 -2
  230. package/packages/server/dist/tools/toolkit.tools.js +19 -19
  231. package/packages/server/dist/tools/update.tool.d.ts +1 -2
  232. package/packages/server/dist/tools/update.tool.js +1 -2
  233. package/packages/server/dist/tools/utility.tools.d.ts +1 -2
  234. package/packages/server/dist/tools/utility.tools.js +2 -3
  235. package/packages/server/dist/version-check.d.ts +1 -2
  236. package/packages/server/dist/version-check.js +1 -2
  237. package/packages/store/dist/graph-store.interface.d.ts +1 -2
  238. package/packages/store/dist/lance-store.d.ts +1 -2
  239. package/packages/store/dist/lance-store.js +1 -2
  240. package/packages/store/dist/sqlite-graph-store.d.ts +1 -2
  241. package/packages/store/dist/sqlite-graph-store.js +6 -7
  242. package/packages/store/dist/store-factory.d.ts +1 -2
  243. package/packages/store/dist/store-factory.js +1 -2
  244. package/packages/store/dist/store.interface.d.ts +1 -2
  245. package/packages/tools/dist/audit.d.ts +1 -2
  246. package/packages/tools/dist/audit.js +1 -2
  247. package/packages/tools/dist/batch.d.ts +1 -2
  248. package/packages/tools/dist/batch.js +1 -2
  249. package/packages/tools/dist/changelog.d.ts +1 -2
  250. package/packages/tools/dist/changelog.js +2 -3
  251. package/packages/tools/dist/check.d.ts +1 -2
  252. package/packages/tools/dist/check.js +2 -3
  253. package/packages/tools/dist/checkpoint.d.ts +1 -2
  254. package/packages/tools/dist/checkpoint.js +1 -2
  255. package/packages/tools/dist/codemod.d.ts +1 -2
  256. package/packages/tools/dist/codemod.js +1 -2
  257. package/packages/tools/dist/compact.d.ts +1 -2
  258. package/packages/tools/dist/compact.js +1 -2
  259. package/packages/tools/dist/data-transform.d.ts +1 -2
  260. package/packages/tools/dist/data-transform.js +1 -2
  261. package/packages/tools/dist/dead-symbols.d.ts +1 -2
  262. package/packages/tools/dist/dead-symbols.js +2 -3
  263. package/packages/tools/dist/delegate.d.ts +1 -2
  264. package/packages/tools/dist/delegate.js +1 -2
  265. package/packages/tools/dist/diff-parse.d.ts +1 -2
  266. package/packages/tools/dist/diff-parse.js +1 -2
  267. package/packages/tools/dist/digest.d.ts +1 -2
  268. package/packages/tools/dist/digest.js +1 -2
  269. package/packages/tools/dist/dogfood-log.d.ts +49 -0
  270. package/packages/tools/dist/dogfood-log.js +2 -0
  271. package/packages/tools/dist/encode.d.ts +1 -2
  272. package/packages/tools/dist/encode.js +1 -2
  273. package/packages/tools/dist/env-info.d.ts +1 -2
  274. package/packages/tools/dist/env-info.js +1 -2
  275. package/packages/tools/dist/eval.d.ts +1 -2
  276. package/packages/tools/dist/eval.js +1 -2
  277. package/packages/tools/dist/evidence-map.d.ts +1 -2
  278. package/packages/tools/dist/evidence-map.js +2 -3
  279. package/packages/tools/dist/file-cache.d.ts +1 -2
  280. package/packages/tools/dist/file-cache.js +1 -2
  281. package/packages/tools/dist/file-summary.d.ts +17 -2
  282. package/packages/tools/dist/file-summary.js +2 -3
  283. package/packages/tools/dist/file-walk.d.ts +1 -2
  284. package/packages/tools/dist/file-walk.js +1 -2
  285. package/packages/tools/dist/find-examples.d.ts +1 -2
  286. package/packages/tools/dist/find-examples.js +1 -2
  287. package/packages/tools/dist/find.d.ts +1 -2
  288. package/packages/tools/dist/find.js +1 -2
  289. package/packages/tools/dist/forge-classify.d.ts +1 -2
  290. package/packages/tools/dist/forge-classify.js +2 -3
  291. package/packages/tools/dist/forge-ground.d.ts +1 -2
  292. package/packages/tools/dist/forge-ground.js +1 -2
  293. package/packages/tools/dist/git-context.d.ts +1 -2
  294. package/packages/tools/dist/git-context.js +1 -2
  295. package/packages/tools/dist/graph-query.d.ts +1 -2
  296. package/packages/tools/dist/graph-query.js +1 -2
  297. package/packages/tools/dist/guide.d.ts +1 -2
  298. package/packages/tools/dist/guide.js +1 -2
  299. package/packages/tools/dist/health.d.ts +1 -2
  300. package/packages/tools/dist/health.js +1 -2
  301. package/packages/tools/dist/http-request.d.ts +1 -2
  302. package/packages/tools/dist/http-request.js +1 -2
  303. package/packages/tools/dist/index.d.ts +2 -1
  304. package/packages/tools/dist/index.js +1 -1
  305. package/packages/tools/dist/lane.d.ts +1 -2
  306. package/packages/tools/dist/lane.js +3 -4
  307. package/packages/tools/dist/measure.d.ts +4 -3
  308. package/packages/tools/dist/measure.js +2 -3
  309. package/packages/tools/dist/onboard.d.ts +1 -2
  310. package/packages/tools/dist/onboard.js +14 -15
  311. package/packages/tools/dist/parse-output.d.ts +1 -2
  312. package/packages/tools/dist/parse-output.js +2 -3
  313. package/packages/tools/dist/path-resolver.d.ts +1 -2
  314. package/packages/tools/dist/path-resolver.js +1 -2
  315. package/packages/tools/dist/process-manager.d.ts +1 -2
  316. package/packages/tools/dist/process-manager.js +1 -2
  317. package/packages/tools/dist/queue.d.ts +1 -2
  318. package/packages/tools/dist/queue.js +1 -2
  319. package/packages/tools/dist/regex-test.d.ts +1 -2
  320. package/packages/tools/dist/regex-test.js +1 -2
  321. package/packages/tools/dist/rename.d.ts +1 -2
  322. package/packages/tools/dist/rename.js +1 -2
  323. package/packages/tools/dist/replay.d.ts +2 -3
  324. package/packages/tools/dist/replay.js +4 -5
  325. package/packages/tools/dist/response-envelope.d.ts +1 -2
  326. package/packages/tools/dist/response-envelope.js +1 -2
  327. package/packages/tools/dist/schema-validate.d.ts +1 -2
  328. package/packages/tools/dist/schema-validate.js +1 -2
  329. package/packages/tools/dist/scope-map.d.ts +1 -2
  330. package/packages/tools/dist/scope-map.js +1 -2
  331. package/packages/tools/dist/snippet.d.ts +1 -2
  332. package/packages/tools/dist/snippet.js +1 -2
  333. package/packages/tools/dist/stash.d.ts +1 -2
  334. package/packages/tools/dist/stash.js +1 -2
  335. package/packages/tools/dist/stratum-card.d.ts +1 -2
  336. package/packages/tools/dist/stratum-card.js +1 -2
  337. package/packages/tools/dist/symbol.d.ts +3 -2
  338. package/packages/tools/dist/symbol.js +3 -4
  339. package/packages/tools/dist/test-run.d.ts +1 -2
  340. package/packages/tools/dist/test-run.js +2 -3
  341. package/packages/tools/dist/text-utils.d.ts +1 -2
  342. package/packages/tools/dist/text-utils.js +1 -2
  343. package/packages/tools/dist/time-utils.d.ts +1 -2
  344. package/packages/tools/dist/time-utils.js +1 -2
  345. package/packages/tools/dist/trace.d.ts +3 -2
  346. package/packages/tools/dist/trace.js +2 -3
  347. package/packages/tools/dist/truncation.d.ts +1 -2
  348. package/packages/tools/dist/truncation.js +1 -2
  349. package/packages/tools/dist/watch.d.ts +1 -2
  350. package/packages/tools/dist/watch.js +1 -2
  351. package/packages/tools/dist/web-fetch.d.ts +1 -2
  352. package/packages/tools/dist/web-fetch.js +1 -2
  353. package/packages/tools/dist/web-search.d.ts +1 -2
  354. package/packages/tools/dist/web-search.js +1 -2
  355. package/packages/tools/dist/workset.d.ts +1 -2
  356. package/packages/tools/dist/workset.js +1 -2
  357. package/packages/tui/dist/{App-BAlmxCCw.js → App-CYLNJLr6.js} +1 -2
  358. package/packages/tui/dist/App.d.ts +1 -2
  359. package/packages/tui/dist/App.js +1 -1
  360. package/packages/tui/dist/CuratedPanel-sYdZAICX.js +1 -2
  361. package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
  362. package/packages/tui/dist/SearchPanel-DREo6zgt.js +1 -2
  363. package/packages/tui/dist/StatusPanel-2ex8fLOO.js +1 -2
  364. package/packages/tui/dist/devtools-DUyj952l.js +1 -2
  365. package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +1 -2
  366. package/packages/tui/dist/index-B9VpfVPP.d.ts +1 -2
  367. package/packages/tui/dist/index.js +1 -2
  368. package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +1 -2
  369. package/packages/tui/dist/panels/CuratedPanel.d.ts +1 -2
  370. package/packages/tui/dist/panels/LogPanel.d.ts +1 -2
  371. package/packages/tui/dist/panels/LogPanel.js +1 -1
  372. package/packages/tui/dist/panels/SearchPanel.d.ts +1 -2
  373. package/packages/tui/dist/panels/StatusPanel.d.ts +1 -2
  374. package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +1 -2
  375. package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +7 -0
  376. package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +7 -0
  377. package/scaffold/copilot/agents/Documenter.agent.md +7 -0
  378. package/scaffold/copilot/agents/Orchestrator.agent.md +8 -0
  379. package/scaffold/copilot/agents/Planner.agent.md +9 -0
  380. package/scaffold/copilot/agents/Refactor.agent.md +6 -0
  381. package/scaffold/copilot/agents/Researcher-Alpha.agent.md +8 -0
  382. package/scaffold/copilot/agents/Researcher-Beta.agent.md +8 -0
  383. package/scaffold/copilot/agents/Researcher-Delta.agent.md +8 -0
  384. package/scaffold/copilot/agents/Researcher-Gamma.agent.md +8 -0
  385. package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  386. package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
  387. package/scaffold/general/agents/Documenter.agent.md +42 -0
  388. package/scaffold/general/agents/Orchestrator.agent.md +104 -0
  389. package/scaffold/general/agents/Planner.agent.md +55 -0
  390. package/scaffold/general/agents/Refactor.agent.md +36 -0
  391. package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
  392. package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
  393. package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
  394. package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
  395. package/scaffold/{copilot → general}/agents/_shared/code-agent-base.md +18 -0
  396. package/skills/adr-skill/SKILL.md +329 -0
  397. package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
  398. package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
  399. package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
  400. package/skills/adr-skill/references/adr-conventions.md +95 -0
  401. package/skills/adr-skill/references/examples.md +193 -0
  402. package/skills/adr-skill/references/review-checklist.md +77 -0
  403. package/skills/adr-skill/references/template-variants.md +52 -0
  404. package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
  405. package/skills/adr-skill/scripts/new_adr.js +391 -0
  406. package/skills/adr-skill/scripts/set_adr_status.js +169 -0
  407. package/skills/c4-architecture/SKILL.md +295 -0
  408. package/skills/c4-architecture/references/advanced-patterns.md +552 -0
  409. package/skills/c4-architecture/references/c4-syntax.md +492 -0
  410. package/skills/c4-architecture/references/common-mistakes.md +437 -0
  411. package/skills/knowledge-base/SKILL.md +78 -1
  412. package/skills/lesson-learned/SKILL.md +105 -0
  413. package/skills/lesson-learned/references/anti-patterns.md +55 -0
  414. package/skills/lesson-learned/references/se-principles.md +109 -0
  415. package/skills/requirements-clarity/SKILL.md +324 -0
  416. package/skills/session-handoff/SKILL.md +189 -0
  417. package/skills/session-handoff/references/handoff-template.md +139 -0
  418. package/skills/session-handoff/references/resume-checklist.md +80 -0
  419. package/skills/session-handoff/scripts/check_staleness.js +269 -0
  420. package/skills/session-handoff/scripts/create_handoff.js +299 -0
  421. package/skills/session-handoff/scripts/list_handoffs.js +113 -0
  422. package/skills/session-handoff/scripts/validate_handoff.js +241 -0
  423. package/packages/chunker/dist/treesitter-chunker.d.ts +0 -44
  424. package/packages/chunker/dist/treesitter-chunker.js +0 -7
  425. package/packages/cli/dist/commands/init.d.ts +0 -15
  426. package/packages/cli/dist/commands/init.js +0 -305
  427. package/packages/tui/dist/LogPanel-DVB8Sv46.js +0 -4
  428. /package/scaffold/{copilot → general}/agents/Code-Reviewer-Alpha.agent.md +0 -0
  429. /package/scaffold/{copilot → general}/agents/Code-Reviewer-Beta.agent.md +0 -0
  430. /package/scaffold/{copilot → general}/agents/Debugger.agent.md +0 -0
  431. /package/scaffold/{copilot → general}/agents/Explorer.agent.md +0 -0
  432. /package/scaffold/{copilot → general}/agents/Frontend.agent.md +0 -0
  433. /package/scaffold/{copilot → general}/agents/Implementer.agent.md +0 -0
  434. /package/scaffold/{copilot → general}/agents/README.md +0 -0
  435. /package/scaffold/{copilot → general}/agents/Security.agent.md +0 -0
  436. /package/scaffold/{copilot → general}/agents/_shared/adr-protocol.md +0 -0
  437. /package/scaffold/{copilot → general}/agents/_shared/architect-reviewer-base.md +0 -0
  438. /package/scaffold/{copilot → general}/agents/_shared/code-reviewer-base.md +0 -0
  439. /package/scaffold/{copilot → general}/agents/_shared/decision-protocol.md +0 -0
  440. /package/scaffold/{copilot → general}/agents/_shared/forge-protocol.md +0 -0
  441. /package/scaffold/{copilot → general}/agents/_shared/researcher-base.md +0 -0
  442. /package/scaffold/{copilot → general}/agents/templates/adr-template.md +0 -0
  443. /package/scaffold/{copilot → general}/agents/templates/execution-state.md +0 -0
  444. /package/scaffold/{copilot → general}/prompts/ask.prompt.md +0 -0
  445. /package/scaffold/{copilot → general}/prompts/debug.prompt.md +0 -0
  446. /package/scaffold/{copilot → general}/prompts/design.prompt.md +0 -0
  447. /package/scaffold/{copilot → general}/prompts/implement.prompt.md +0 -0
  448. /package/scaffold/{copilot → general}/prompts/plan.prompt.md +0 -0
  449. /package/scaffold/{copilot → general}/prompts/review.prompt.md +0 -0
@@ -3,9 +3,17 @@ import { IChunker } from "./chunker.interface.js";
3
3
  //#region packages/chunker/src/chunker-factory.d.ts
4
4
  /**
5
5
  * Create the appropriate chunker for a file extension.
6
- * Prefers tree-sitter AST-based chunking when available; falls back to regex-based.
6
+ *
7
+ * Uses WASM tree-sitter AST-based chunking when available.
8
+ * Falls back to regex-based CodeChunker.
9
+ *
10
+ * **Breaking change**: Now returns `Promise<IChunker>` because WASM init is async.
7
11
  */
8
- declare function createChunker(fileExtension: string): IChunker;
12
+ declare function createChunker(fileExtension: string): Promise<IChunker>;
13
+ /**
14
+ * Create a chunker synchronously (legacy API).
15
+ * Uses whatever runtime is already initialized.
16
+ */
17
+ declare function createChunkerSync(fileExtension: string): IChunker;
9
18
  //#endregion
10
- export { createChunker };
11
- //# sourceMappingURL=chunker-factory.d.ts.map
19
+ export { createChunker, createChunkerSync };
@@ -1,2 +1 @@
1
- import{CodeChunker as e}from"./code-chunker.js";import{TreeSitterChunker as t,TreeSitterRuntime as n}from"./treesitter-chunker.js";import{GenericChunker as r}from"./generic-chunker.js";import{MarkdownChunker as i}from"./markdown-chunker.js";function a(a){let o=a.toLowerCase();switch(o){case`.md`:case`.mdx`:return new i;case`.ts`:case`.tsx`:case`.mts`:case`.cts`:case`.js`:case`.jsx`:case`.mjs`:case`.cjs`:case`.py`:case`.go`:case`.rs`:case`.java`:{let r=n.get();return r?.hasLanguage(o)?new t(r):new e}default:return new r}}export{a as createChunker};
2
- //# sourceMappingURL=chunker-factory.js.map
1
+ import{SUPPORTED_EXTENSIONS as e}from"./wasm/languages.js";import{WasmRuntime as t}from"./wasm/runtime.js";import{CodeChunker as n}from"./code-chunker.js";import{GenericChunker as r}from"./generic-chunker.js";import{MarkdownChunker as i}from"./markdown-chunker.js";import{WasmChunker as a}from"./wasm-chunker.js";async function o(o){let s=o.toLowerCase();switch(s){case`.md`:case`.mdx`:return new i;case`.ts`:case`.tsx`:case`.mts`:case`.cts`:case`.js`:case`.jsx`:case`.mjs`:case`.cjs`:case`.py`:case`.go`:case`.rs`:case`.java`:if(e.has(s)){let e=await t.initialize();if(e)return await e.loadLanguage(s),new a}return new n;default:return new r}}function s(e){let o=e.toLowerCase();switch(o){case`.md`:case`.mdx`:return new i;case`.ts`:case`.tsx`:case`.mts`:case`.cts`:case`.js`:case`.jsx`:case`.mjs`:case`.cjs`:case`.py`:case`.go`:case`.rs`:case`.java`:return t.get()?.isLanguageLoaded(o)?new a:new n;default:return new r}}export{o as createChunker,s as createChunkerSync};
@@ -10,5 +10,4 @@ interface IChunker {
10
10
  chunk(content: string, metadata: ChunkMetadata): RawChunk[];
11
11
  }
12
12
  //#endregion
13
- export { IChunker };
14
- //# sourceMappingURL=chunker.interface.d.ts.map
13
+ export { IChunker };
@@ -14,5 +14,4 @@ declare class CodeChunker implements IChunker {
14
14
  private getLineNumber;
15
15
  }
16
16
  //#endregion
17
- export { CodeChunker };
18
- //# sourceMappingURL=code-chunker.d.ts.map
17
+ export { CodeChunker };
@@ -8,5 +8,4 @@ import{CHUNK_SIZES as e}from"../../core/dist/index.js";var t=class{maxChunkSize;
8
8
  `),r=[],i=[],a=0;for(let e of n)a+e.length+1>t&&i.length>0?(r.push(i.join(`
9
9
  `)),i=[e],a=e.length):(i.push(e),a+=e.length+1);return i.length>0&&r.push(i.join(`
10
10
  `)),r}getLineNumber(e,t){return e.slice(0,t).split(`
11
- `).length}};export{t as CodeChunker};
12
- //# sourceMappingURL=code-chunker.js.map
11
+ `).length}};export{t as CodeChunker};
@@ -0,0 +1,24 @@
1
+ //#region packages/chunker/src/extractors/call-extractor.d.ts
2
+ /**
3
+ * AST-based call extractor.
4
+ *
5
+ * Replaces regex-based call graph analysis with tree-sitter AST queries.
6
+ * Returns `CallEdge[]` compatible with the existing call-graph-extractor.
7
+ */
8
+ interface CallEdge {
9
+ callerFile: string;
10
+ callerName: string;
11
+ calleeName: string;
12
+ line: number;
13
+ }
14
+ /**
15
+ * Extract call edges from source code using AST queries.
16
+ *
17
+ * @param content - The source code to analyze.
18
+ * @param ext - The file extension (e.g., `.ts`, `.py`).
19
+ * @param filePath - The file path for the returned CallEdge records.
20
+ * @returns Array of extracted call edges, or empty array if language unsupported.
21
+ */
22
+ declare function extractCalls(content: string, ext: string, filePath?: string): Promise<CallEdge[]>;
23
+ //#endregion
24
+ export { CallEdge, extractCalls };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r=new Set([`function_declaration`,`method_definition`,`arrow_function`,`function_definition`,`method_declaration`,`constructor_declaration`,`function_declaration`,`method_declaration`,`function_item`]);async function i(t,r,i=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);return c?n.execute(s.rootNode,c,r,`calls`).map(e=>a(e,s.rootNode,i)).filter(e=>e!==null):[]}function a(e,t,n){let r=e.captures.get(`callee`);if(!r)return null;let i=e.captures.get(`node`);return{callerFile:n,callerName:o(i?.node??r.node),calleeName:r.text,line:(i?.startLine??r.startLine)+1}}function o(e){let t=e.parent;for(;t;){if(r.has(t.type)){let e=s(t);if(e)return e}t=t.parent}return`<module>`}function s(e){let t=e.childForFieldName(`name`);if(t)return t.text;for(let t of e.children)if(t.type===`identifier`||t.type===`property_identifier`||t.type===`field_identifier`)return t.text;return null}export{i as extractCalls};
@@ -0,0 +1,14 @@
1
+ import { EntryPoint } from "./types.js";
2
+
3
+ //#region packages/chunker/src/extractors/entry-point-detector.d.ts
4
+ /**
5
+ * Detect entry points from source code using AST queries.
6
+ *
7
+ * @param content - The source code to analyze.
8
+ * @param ext - The file extension (e.g., `.ts`, `.py`).
9
+ * @param filePath - The file path for the returned EntryPoint records.
10
+ * @returns Array of detected entry points, or empty array if language unsupported.
11
+ */
12
+ declare function detectEntryPoints(content: string, ext: string, filePath?: string): Promise<EntryPoint[]>;
13
+ //#endregion
14
+ export { detectEntryPoints };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r={handler:`lambda-handler`,lambdaHandler:`lambda-handler`,main:`main`,__name__:`main`,app:`server`,server:`server`,router:`server`,urlpatterns:`server`,init:`main`},i={SpringBootApplication:`server`,RestController:`server`,Controller:`server`};async function a(t,r,i=``){let a=await e.ensure(),s=await a.parse(t,r);if(!s)return[];let c=a.getLanguage(r);if(!c)return[];let l=n.execute(s.rootNode,c,r,`entry-points`),u=[],d=new Set;for(let e of l){let t=o(e,r,i);if(t){let e=`${t.name}:${t.type}`;d.has(e)||(d.add(e),u.push(t))}}return u}function o(e,t,n){let a=e.captures.get(`name`);if(!a)return null;let o=a.text,s=e.captures.get(`_parent`);if(s){let e=s.text;if([`Construct`,`Stack`,`NestedStack`,`Stage`].includes(e))return{name:o,type:`cdk-construct`,filePath:n}}let c=e.captures.get(`_ann`);if(c){let e=i[c.text];if(e)return{name:o,type:e,filePath:n}}let l=r[o];return l?{name:o,type:l,filePath:n}:t===`.go`&&o.toLowerCase().startsWith(`handle`)?{name:o,type:`server`,filePath:n,trigger:`HTTP handler`}:{name:o,type:`main`,filePath:n}}export{a as detectEntryPoints};
@@ -0,0 +1,14 @@
1
+ import { ImportInfo } from "./types.js";
2
+
3
+ //#region packages/chunker/src/extractors/import-extractor.d.ts
4
+ /**
5
+ * Extract imports from source code using AST queries.
6
+ *
7
+ * @param content - The source code to analyze.
8
+ * @param ext - The file extension (e.g., `.ts`, `.py`).
9
+ * @param filePath - The file path for the returned ImportInfo records.
10
+ * @returns Array of extracted imports, or empty array if language unsupported.
11
+ */
12
+ declare function extractImports(content: string, ext: string, filePath?: string): Promise<ImportInfo[]>;
13
+ //#endregion
14
+ export { extractImports };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t;async function r(t,r,c=``){let l=await e.ensure(),u=await l.parse(t,r);if(!u)return[];let d=l.getLanguage(r);if(!d)return[];let f=n.execute(u.rootNode,d,r,`imports`),p=[];for(let e of f){let t=e.captures.get(`source`);if(!t){let t=e.captures.get(`node`);if(t){let e=s(t.text,r);e&&p.push({source:e.source,specifiers:e.specifiers,filePath:c,isExternal:a(e.source,r),confidence:`high`})}continue}let n=t.text,l=i(n,r),u=o(e.captures.get(`node`)?.text??``,r,l);p.push({source:l,specifiers:u,filePath:c,isExternal:a(l,r),confidence:`high`})}return p}function i(e,t){let n=e.replace(/^['"`]|['"`]$/g,``);return t===`.go`&&(n=n.replace(/^"|"$/g,``)),n}function a(e,t){return t===`.py`?!e.startsWith(`.`):t===`.go`?e.includes(`/`)||e.includes(`.`):t===`.java`?!0:t===`.rs`?!e.startsWith(`self`)&&!e.startsWith(`super`)&&!e.startsWith(`crate`):!e.startsWith(`.`)&&!e.startsWith(`/`)}function o(e,t,n){if(!e)return[n];if(t===`.py`){let t=e.match(/import\s+(.+)$/m);return t?t[1].split(`,`).map(e=>e.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean):[n]}if(t===`.java`){let e=n.split(`.`);return[e[e.length-1]]}if(t===`.go`){let e=n.split(`/`);return[e[e.length-1]]}if(t===`.rs`){if(n.includes(`{`)){let e=n.match(/\{([^}]+)\}/);if(e)return e[1].split(`,`).map(e=>e.trim()).filter(Boolean)}let e=n.split(`::`);return[e[e.length-1]]}let r=e.match(/\{([^}]+)\}/);if(r)return r[1].split(`,`).map(e=>e.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean);let i=e.match(/import\s+(\w+)/);return i?[i[1]]:[n]}function s(e,t){if(t===`.py`){let t=e.match(/^import\s+([\w.]+)/);if(t)return{source:t[1],specifiers:[t[1]]}}return null}export{r as extractImports};
@@ -0,0 +1,14 @@
1
+ import { PatternMatch } from "./types.js";
2
+
3
+ //#region packages/chunker/src/extractors/pattern-detector.d.ts
4
+ /**
5
+ * Detect design patterns from source code using AST queries.
6
+ *
7
+ * @param content - The source code to analyze.
8
+ * @param ext - The file extension (e.g., `.ts`, `.py`).
9
+ * @param filePath - The file path for location info.
10
+ * @returns Array of detected patterns, or empty array if language unsupported.
11
+ */
12
+ declare function detectPatterns(content: string, ext: string, filePath?: string): Promise<PatternMatch[]>;
13
+ //#endregion
14
+ export { detectPatterns };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t;async function r(t,r,a=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);if(!c)return[];let l=n.execute(s.rootNode,c,r,`patterns`),u=new Map;for(let e of l){let t=i(e,r);if(!t)continue;let n=e.captures.get(`name`),o=`${a}:${(e.captures.get(`node`)?.startLine??n?.startLine??0)+1}`,s=u.get(t.pattern);s?s.locations.push(o):u.set(t.pattern,{description:t.description,locations:[o]})}let d=[];for(let[e,{description:t,locations:n}]of u)d.push({pattern:e,description:t,locations:n,confidence:`high`});return d}function i(e,t){let n=e.captures.get(`name`)?.text;if(!n)return null;let r=e.captures.get(`node`)?.nodeType??``;if(/^(create|build)[A-Z]/.test(n)||/^(of|from|new)[A-Z]/.test(n))return{pattern:`factory`,description:`Factory function/method`};if(/^(register|bind)$/.test(n))return{pattern:`dependency-injection`,description:`DI container registration`};if(/^(Injectable|Component|Service|Controller|Module|Singleton|Repository|Bean)$/.test(n))return{pattern:`dependency-injection`,description:`Framework DI annotation`};if(/^(Map|WeakMap|Set)$/.test(n))return{pattern:`cached-instance`,description:`Cached Map/Set instance`};if(t===`.py`){if(n===`__new__`)return{pattern:`singleton`,description:`Singleton pattern (__new__ override)`};if(n===`__enter__`)return{pattern:`context-manager`,description:`Context manager pattern`};if(r===`decorated_definition`)return{pattern:`decorator`,description:`Decorator usage`}}if(t===`.go`){if(r===`type_declaration`)return{pattern:`interface`,description:`Interface definition`};if(r===`go_statement`)return{pattern:`concurrency`,description:`Goroutine concurrency pattern`};if(n===`make`)return{pattern:`concurrency`,description:`Channel/make pattern`}}if(t===`.rs`){if(r===`impl_item`)return{pattern:`trait-impl`,description:`Trait implementation`};if(r===`attribute_item`){if(n===`derive`)return{pattern:`derive`,description:`Derive macro attribute`};if(n===`test`)return{pattern:`test`,description:`Test attribute`}}}if(t===`.java`){if(r===`class_declaration`)return{pattern:`singleton`,description:`Singleton pattern (private constructor)`};if(r===`marker_annotation`)return{pattern:`dependency-injection`,description:`Framework DI annotation`}}if(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/.test(t)){if(r===`class_declaration`)return{pattern:`singleton`,description:`Singleton pattern (private constructor)`};if(r===`decorator`)return{pattern:`decorator`,description:`Framework decorator pattern`}}return{pattern:r||`unknown`,description:`Detected pattern: ${n}`}}export{r as detectPatterns};
@@ -0,0 +1,26 @@
1
+ //#region packages/chunker/src/extractors/scope-resolver.d.ts
2
+ /**
3
+ * AST-based scope resolver.
4
+ *
5
+ * NEW capability: resolves the enclosing scope (function/class/module) for any
6
+ * AST node. Used by other extractors to determine caller context.
7
+ */
8
+ interface ScopeInfo {
9
+ /** Name of the enclosing scope (or '<module>' for top-level). */
10
+ name: string;
11
+ /** The scope type (function, class, module). */
12
+ type: 'function' | 'class' | 'module';
13
+ /** 1-based start line of the scope. */
14
+ line: number;
15
+ }
16
+ /**
17
+ * Resolve the enclosing scope chain for a given line in source code.
18
+ *
19
+ * @param content - The source code to analyze.
20
+ * @param ext - The file extension.
21
+ * @param targetLine - 1-based line number to resolve scope for.
22
+ * @returns Array of scopes from innermost to outermost, ending with module.
23
+ */
24
+ declare function resolveScopes(content: string, ext: string, targetLine: number): Promise<ScopeInfo[]>;
25
+ //#endregion
26
+ export { ScopeInfo, resolveScopes };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";const t=new Set([`function_declaration`,`method_definition`,`arrow_function`,`class_declaration`,`function_definition`,`class_definition`,`method_declaration`,`constructor_declaration`,`class_declaration`,`function_declaration`,`method_declaration`,`function_item`,`impl_item`]);async function n(t,n,a){let o=await(await e.ensure()).parse(t,n);if(!o)return[{name:`<module>`,type:`module`,line:1}];let s=r(o.rootNode,a-1);if(!s)return[{name:`<module>`,type:`module`,line:1}];let c=[];return i(s,c),c.push({name:`<module>`,type:`module`,line:1}),c}function r(e,t){let n=null;function r(e){if(e.startPosition.row<=t&&e.endPosition.row>=t){n=e;for(let t of e.children)r(t)}}return r(e),n}function i(e,n){let r=e.parent;for(;r;){if(t.has(r.type)){let e=a(r),t=o(r.type);n.push({name:e??`<anonymous>`,type:t,line:r.startPosition.row+1})}r=r.parent}}function a(e){let t=e.childForFieldName(`name`);if(t)return t.text;for(let t of e.children)if(t.type===`identifier`||t.type===`type_identifier`||t.type===`property_identifier`||t.type===`field_identifier`)return t.text;return null}function o(e){return e.includes(`class`)||e===`impl_item`?`class`:`function`}export{n as resolveScopes};
@@ -0,0 +1,14 @@
1
+ import { SymbolInfo } from "./types.js";
2
+
3
+ //#region packages/chunker/src/extractors/symbol-extractor.d.ts
4
+ /**
5
+ * Extract symbols from source code using AST queries.
6
+ *
7
+ * @param content - The source code to analyze.
8
+ * @param ext - The file extension (e.g., `.ts`, `.py`).
9
+ * @param filePath - The file path for the returned SymbolInfo records.
10
+ * @returns Array of extracted symbols, or empty array if language unsupported.
11
+ */
12
+ declare function extractSymbols(content: string, ext: string, filePath?: string): Promise<SymbolInfo[]>;
13
+ //#endregion
14
+ export { extractSymbols };
@@ -0,0 +1 @@
1
+ import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r={function_declaration:`function`,class_declaration:`class`,interface_declaration:`interface`,type_alias_declaration:`type`,enum_declaration:`enum`,lexical_declaration:`const`,method_definition:`method`,public_field_definition:`variable`,field_definition:`variable`,function_definition:`function`,class_definition:`class`,expression_statement:`variable`,method_declaration:`method`,constructor_declaration:`method`,field_declaration:`variable`,type_spec:`type`,type_declaration:`type`,const_spec:`const`,var_spec:`variable`,function_item:`function`,struct_item:`class`,enum_item:`enum`,trait_item:`interface`,impl_item:`type`,const_item:`const`,static_item:`variable`,type_item:`type`};async function i(t,r,i=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);return c?a(n.execute(s.rootNode,c,r,`symbols`),r,i):[]}function a(e,t,n){let i=new Map;for(let n of e){let e=n.captures.get(`name`);if(!e)continue;let r=`${e.text}:${(n.captures.get(`node`)?.startLine??e.startLine)+1}`,a=o(n,t),s=i.get(r);(!s||!s.exported&&a)&&i.set(r,{match:n,exported:a})}let a=[];for(let{match:e,exported:o}of i.values()){let i=e.captures.get(`name`),l=e.captures.get(`node`);if(!i)continue;let u=r[l?.nodeType??i.nodeType]??`variable`,d=(l?.startLine??i.startLine)+1,f=s(u,l?.node,t);a.push({name:i.text,kind:f,exported:o,filePath:n,line:d,signature:c(l?.node,f)})}return a}function o(e,t){if(e.captures.has(`exported`))return!0;let n=e.captures.get(`name`)?.text;if(!n)return!1;if(t===`.py`)return!n.startsWith(`_`);if(t===`.go`)return/^[A-Z]/.test(n);if(t===`.java`){let t=e.captures.get(`node`)?.text??``;return/\bpublic\b/.test(t)}return!1}function s(e,t,n){if(n===`.go`&&e===`type`&&t?.children){let e=t.type===`type_declaration`?t.children.flatMap(e=>e.children??[]):t.children;for(let t of e){if(t.type===`interface_type`)return`interface`;if(t.type===`struct_type`)return`class`}}return e}function c(e,t){if(e){if(t===`function`||t===`method`)return l(e);if(t===`class`)return u(e);if(t===`interface`)return f(e)}}function l(e){let t=e.childForFieldName(`parameters`)??e.childForFieldName(`parameter_list`),n=e.childForFieldName(`return_type`)??e.childForFieldName(`type`),r=e.childForFieldName(`result`);if(!t){for(let t of e.children)if(t.type===`formal_parameters`||t.type===`parameter_list`||t.type===`parameters`){let e=t.text;return n&&(e+=n.text),r&&(e+=` ${r.text}`),e.length>120?`${e.slice(0,117)}...`:e}return}let i=t.text;return n&&(i+=n.text),r&&(i+=` ${r.text}`),i.length>120?`${i.slice(0,117)}...`:i}function u(e){let t=e.childForFieldName(`body`)??e.childForFieldName(`field_declaration_list`);if(!t){for(let t of e.children)if(t.type===`struct_type`||t.type===`class_body`)return d(t);return}return d(t)}function d(e){let t=[];for(let n of e.children){if(n.type===`method_definition`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`field_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`function_definition`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}}if(t.length===0)return;let n=t.join(`, `);return n.length>120?`${n.slice(0,117)}...`:n}function f(e){let t=e.childForFieldName(`body`);if(!t){for(let t of e.children)if(t.type===`interface_type`)return p(t);return}return p(t)}function p(e){let t=[];for(let n of e.children){if(n.type===`property_signature`||n.type===`method_signature`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_spec`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`function_signature_item`||n.type===`declaration_list`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}}if(t.length===0)return;let n=t.join(`, `);return n.length>120?`${n.slice(0,117)}...`:n}export{i as extractSymbols};
@@ -0,0 +1,36 @@
1
+ //#region packages/chunker/src/extractors/types.d.ts
2
+ /**
3
+ * Shared type definitions for AST extractors.
4
+ *
5
+ * These types match the interfaces in `@kb/analyzers/types.ts` so that
6
+ * downstream consumers can seamlessly switch from regex-based to AST-based extraction.
7
+ */
8
+ interface SymbolInfo {
9
+ name: string;
10
+ kind: 'function' | 'class' | 'interface' | 'type' | 'const' | 'enum' | 'variable' | 'method';
11
+ exported: boolean;
12
+ filePath: string;
13
+ line: number;
14
+ signature?: string;
15
+ }
16
+ interface ImportInfo {
17
+ source: string;
18
+ specifiers: string[];
19
+ filePath: string;
20
+ isExternal: boolean;
21
+ confidence: 'high' | 'medium' | 'low';
22
+ }
23
+ interface PatternMatch {
24
+ pattern: string;
25
+ description: string;
26
+ locations: string[];
27
+ confidence: 'high' | 'medium' | 'low';
28
+ }
29
+ interface EntryPoint {
30
+ name: string;
31
+ type: 'lambda-handler' | 'main' | 'bin' | 'server' | 'cli' | 'test' | 'cdk-construct';
32
+ filePath: string;
33
+ trigger?: string;
34
+ }
35
+ //#endregion
36
+ export { EntryPoint, ImportInfo, PatternMatch, SymbolInfo };
@@ -0,0 +1 @@
1
+ export{};
@@ -12,5 +12,4 @@ declare class GenericChunker implements IChunker {
12
12
  chunk(content: string, metadata: ChunkMetadata): RawChunk[];
13
13
  }
14
14
  //#endregion
15
- export { GenericChunker };
16
- //# sourceMappingURL=generic-chunker.d.ts.map
15
+ export { GenericChunker };
@@ -2,5 +2,4 @@ import{CHUNK_SIZES as e}from"../../core/dist/index.js";var t=class{maxChunkSize;
2
2
  `).length}];let n=e.split(`
3
3
  `),r=[],i=[],a=0,o=1;for(let e=0;e<n.length;e++){let s=n[e];if(a+s.length+1>this.maxChunkSize&&i.length>0){r.push({text:i.join(`
4
4
  `),sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:o,endLine:o+i.length-1});let e=[],n=0;for(let t=i.length-1;t>=0&&!(n+i[t].length+1>this.overlap);t--)e.unshift(i[t]),n+=i[t].length+1;o=o+i.length-e.length,i=[...e,s],a=n+s.length+1}else i.push(s),a+=s.length+1}return i.length>0&&r.push({text:i.join(`
5
- `),sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:o,endLine:o+i.length-1}),r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}};export{t as GenericChunker};
6
- //# sourceMappingURL=generic-chunker.js.map
5
+ `),sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:o,endLine:o+i.length-1}),r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}};export{t as GenericChunker};
@@ -1,8 +1,19 @@
1
- import { CallEdge, extractCallEdges } from "./call-graph-extractor.js";
1
+ import { CallEdge as CallEdge$1, extractCallEdges } from "./call-graph-extractor.js";
2
2
  import { IChunker } from "./chunker.interface.js";
3
- import { createChunker } from "./chunker-factory.js";
3
+ import { createChunker, createChunkerSync } from "./chunker-factory.js";
4
4
  import { CodeChunker } from "./code-chunker.js";
5
+ import { CallEdge, extractCalls } from "./extractors/call-extractor.js";
6
+ import { EntryPoint, ImportInfo, PatternMatch, SymbolInfo } from "./extractors/types.js";
7
+ import { detectEntryPoints } from "./extractors/entry-point-detector.js";
8
+ import { extractImports } from "./extractors/import-extractor.js";
9
+ import { detectPatterns } from "./extractors/pattern-detector.js";
10
+ import { ScopeInfo, resolveScopes } from "./extractors/scope-resolver.js";
11
+ import { extractSymbols } from "./extractors/symbol-extractor.js";
5
12
  import { GenericChunker } from "./generic-chunker.js";
6
13
  import { MarkdownChunker } from "./markdown-chunker.js";
7
- import { TreeSitterChunker, TreeSitterRuntime, initializeTreeSitter } from "./treesitter-chunker.js";
8
- export { type CallEdge, CodeChunker, GenericChunker, type IChunker, MarkdownChunker, TreeSitterChunker, TreeSitterRuntime, createChunker, extractCallEdges, initializeTreeSitter };
14
+ import { SUPPORTED_EXTENSIONS, resolveGrammarPath, resolveParserWasmPath } from "./wasm/languages.js";
15
+ import { WasmLanguage, WasmParser, WasmParserModule, WasmPoint, WasmQuery, WasmQueryCapture, WasmQueryMatch, WasmSyntaxNode, WasmTree } from "./wasm/types.js";
16
+ import { CaptureInfo, QueryExecutor, QueryResult, QueryType } from "./wasm/query-executor.js";
17
+ import { WasmRuntime, initializeWasm } from "./wasm/runtime.js";
18
+ import { WasmChunker } from "./wasm-chunker.js";
19
+ export { type CallEdge as AstCallEdge, type CallEdge$1 as CallEdge, type CaptureInfo, CodeChunker, type EntryPoint, GenericChunker, type IChunker, type ImportInfo, MarkdownChunker, type PatternMatch, QueryExecutor, type QueryResult, type QueryType, SUPPORTED_EXTENSIONS, type ScopeInfo, type SymbolInfo, WasmChunker, type WasmLanguage, type WasmParser, type WasmParserModule, type WasmPoint, type WasmQuery, type WasmQueryCapture, type WasmQueryMatch, WasmRuntime, type WasmSyntaxNode, type WasmTree, createChunker, createChunkerSync, detectEntryPoints, detectPatterns, extractCallEdges, extractCalls, extractImports, extractSymbols, initializeWasm, resolveGrammarPath, resolveParserWasmPath, resolveScopes };
@@ -1 +1 @@
1
- import{CodeChunker as e}from"./code-chunker.js";import{TreeSitterChunker as t,TreeSitterRuntime as n,initializeTreeSitter as r}from"./treesitter-chunker.js";import{extractCallEdges as i}from"./call-graph-extractor.js";import{GenericChunker as a}from"./generic-chunker.js";import{MarkdownChunker as o}from"./markdown-chunker.js";import{createChunker as s}from"./chunker-factory.js";export{e as CodeChunker,a as GenericChunker,o as MarkdownChunker,t as TreeSitterChunker,n as TreeSitterRuntime,s as createChunker,i as extractCallEdges,r as initializeTreeSitter};
1
+ import{SUPPORTED_EXTENSIONS as e,resolveGrammarPath as t,resolveParserWasmPath as n}from"./wasm/languages.js";import{WasmRuntime as r,initializeWasm as i}from"./wasm/runtime.js";import{extractCallEdges as a}from"./call-graph-extractor.js";import{CodeChunker as o}from"./code-chunker.js";import{GenericChunker as s}from"./generic-chunker.js";import{MarkdownChunker as c}from"./markdown-chunker.js";import{WasmChunker as l}from"./wasm-chunker.js";import{createChunker as u,createChunkerSync as d}from"./chunker-factory.js";import{QueryExecutor as f}from"./wasm/query-executor.js";import{extractCalls as p}from"./extractors/call-extractor.js";import{detectEntryPoints as m}from"./extractors/entry-point-detector.js";import{extractImports as h}from"./extractors/import-extractor.js";import{detectPatterns as g}from"./extractors/pattern-detector.js";import{resolveScopes as _}from"./extractors/scope-resolver.js";import{extractSymbols as v}from"./extractors/symbol-extractor.js";export{o as CodeChunker,s as GenericChunker,c as MarkdownChunker,f as QueryExecutor,e as SUPPORTED_EXTENSIONS,l as WasmChunker,r as WasmRuntime,u as createChunker,d as createChunkerSync,m as detectEntryPoints,g as detectPatterns,a as extractCallEdges,p as extractCalls,h as extractImports,v as extractSymbols,i as initializeWasm,t as resolveGrammarPath,n as resolveParserWasmPath,_ as resolveScopes};
@@ -14,5 +14,4 @@ declare class MarkdownChunker implements IChunker {
14
14
  private splitByParagraphs;
15
15
  }
16
16
  //#endregion
17
- export { MarkdownChunker };
18
- //# sourceMappingURL=markdown-chunker.d.ts.map
17
+ export { MarkdownChunker };
@@ -1,4 +1,3 @@
1
1
  import{CHUNK_SIZES as e}from"../../core/dist/index.js";var t=class{maxChunkSize;minChunkSize;constructor(t){this.maxChunkSize=t?.maxChunkSize??e.markdown.max,this.minChunkSize=t?.minChunkSize??e.markdown.min}chunk(e,t){let n=this.splitByHeadings(e),r=[];for(let e of n){if(e.text.trim().length<this.minChunkSize&&r.length>0){let t=r[r.length-1];t.text+=`\n\n${e.text}`,t.endLine=e.endLine;continue}if(e.text.length>this.maxChunkSize){let n=this.splitByParagraphs(e.text,this.maxChunkSize),i=e.startLine;for(let a of n){let n=a.split(`
2
2
  `).length;r.push({text:a,sourcePath:t.sourcePath,contentType:t.contentType,headingPath:e.headingPath,chunkIndex:r.length,totalChunks:0,startLine:i,endLine:i+n-1}),i+=n}}else r.push({text:e.text,sourcePath:t.sourcePath,contentType:t.contentType,headingPath:e.headingPath,chunkIndex:r.length,totalChunks:0,startLine:e.startLine,endLine:e.endLine})}return r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}splitByHeadings(e){let t=e.split(`
3
- `),n=[],r=null,i=[],a=!1;for(let e=0;e<t.length;e++){/^```/.test(t[e])&&(a=!a);let o=a?null:t[e].match(/^(#{1,6})\s+(.+)/);if(o){r&&n.push(r);let a=o[1].length,s=o[2].trim();for(;i.length>=a;)i.pop();i.push(`${`#`.repeat(a)} ${s}`),r={text:t[e],headingPath:i.join(` > `),startLine:e+1,endLine:e+1}}else r?(r.text+=`\n${t[e]}`,r.endLine=e+1):r={text:t[e],headingPath:`(intro)`,startLine:e+1,endLine:e+1}}return r&&n.push(r),n}splitByParagraphs(e,t){let n=e.split(/\n\n+/),r=[],i=``;for(let e of n)`${i}\n\n${e}`.length>t&&i.length>0?(r.push(i.trim()),i=e):i=i?`${i}\n\n${e}`:e;return i.trim()&&r.push(i.trim()),r}};export{t as MarkdownChunker};
4
- //# sourceMappingURL=markdown-chunker.js.map
3
+ `),n=[],r=null,i=[],a=!1;for(let e=0;e<t.length;e++){/^```/.test(t[e])&&(a=!a);let o=a?null:t[e].match(/^(#{1,6})\s+(.+)/);if(o){r&&n.push(r);let a=o[1].length,s=o[2].trim();for(;i.length>=a;)i.pop();i.push(`${`#`.repeat(a)} ${s}`),r={text:t[e],headingPath:i.join(` > `),startLine:e+1,endLine:e+1}}else r?(r.text+=`\n${t[e]}`,r.endLine=e+1):r={text:t[e],headingPath:`(intro)`,startLine:e+1,endLine:e+1}}return r&&n.push(r),n}splitByParagraphs(e,t){let n=e.split(/\n\n+/),r=[],i=``;for(let e of n)`${i}\n\n${e}`.length>t&&i.length>0?(r.push(i.trim()),i=e):i=i?`${i}\n\n${e}`:e;return i.trim()&&r.push(i.trim()),r}};export{t as MarkdownChunker};
@@ -0,0 +1,18 @@
1
+ //#region packages/chunker/src/wasm/languages.d.ts
2
+ /**
3
+ * Language registry for web-tree-sitter WASM grammars.
4
+ *
5
+ * Maps file extensions to vendored .wasm grammar file names
6
+ * and resolves their absolute paths on disk.
7
+ */
8
+ /** All supported extensions. */
9
+ declare const SUPPORTED_EXTENSIONS: Set<string>;
10
+ /**
11
+ * Resolve the absolute path to a vendored .wasm grammar file for a given extension.
12
+ * Returns null if the extension is not supported or the file doesn't exist.
13
+ */
14
+ declare function resolveGrammarPath(ext: string): string | null;
15
+ /** Resolve the parser runtime WASM path. */
16
+ declare function resolveParserWasmPath(): string | null;
17
+ //#endregion
18
+ export { SUPPORTED_EXTENSIONS, resolveGrammarPath, resolveParserWasmPath };
@@ -0,0 +1 @@
1
+ import{dirname as e,join as t}from"node:path";import{existsSync as n}from"node:fs";import{fileURLToPath as r}from"node:url";const i=t(e(r(import.meta.url)),`..`,`..`,`wasm`),a={".ts":`tree-sitter-typescript.wasm`,".tsx":`tree-sitter-typescript.wasm`,".mts":`tree-sitter-typescript.wasm`,".cts":`tree-sitter-typescript.wasm`,".js":`tree-sitter-javascript.wasm`,".jsx":`tree-sitter-javascript.wasm`,".mjs":`tree-sitter-javascript.wasm`,".cjs":`tree-sitter-javascript.wasm`,".py":`tree-sitter-python.wasm`,".go":`tree-sitter-go.wasm`,".rs":`tree-sitter-rust.wasm`,".java":`tree-sitter-java.wasm`},o=new Set(Object.keys(a));function s(e){let r=a[e];if(!r)return null;let o=t(i,r);return n(o)?o:null}function c(){let e=t(i,`tree-sitter.wasm`);return n(e)?e:null}export{o as SUPPORTED_EXTENSIONS,s as resolveGrammarPath,c as resolveParserWasmPath};
@@ -0,0 +1,70 @@
1
+ import { WasmLanguage, WasmSyntaxNode } from "./types.js";
2
+
3
+ //#region packages/chunker/src/wasm/query-executor.d.ts
4
+ /** Known query types that can be loaded. */
5
+ type QueryType = 'symbols' | 'imports' | 'calls' | 'patterns' | 'entry-points';
6
+ /** Structured result from a single query match. */
7
+ interface QueryResult {
8
+ /** The pattern index within the .scm file that matched. */
9
+ pattern: number;
10
+ /** All captures in this match, keyed by capture name → node info. */
11
+ captures: Map<string, CaptureInfo>;
12
+ }
13
+ /** Information about a single captured node. */
14
+ interface CaptureInfo {
15
+ /** The capture name (e.g., 'name', 'node', 'kind'). */
16
+ name: string;
17
+ /** The captured node's text content. */
18
+ text: string;
19
+ /** AST node type (e.g., 'function_declaration', 'identifier'). */
20
+ nodeType: string;
21
+ /** 0-based start line. */
22
+ startLine: number;
23
+ /** 0-based end line. */
24
+ endLine: number;
25
+ /** 0-based start column. */
26
+ startColumn: number;
27
+ /** 0-based end column. */
28
+ endColumn: number;
29
+ /** The raw AST node (for advanced traversal). */
30
+ node: WasmSyntaxNode;
31
+ }
32
+ declare class QueryExecutor {
33
+ /** Cache: `"typescript:symbols"` → compiled WasmQuery */
34
+ private queryCache;
35
+ /** Cache: loaded .scm source text to avoid re-reading disk. */
36
+ private scmCache;
37
+ /**
38
+ * Execute a query type against a parsed AST tree.
39
+ *
40
+ * @param rootNode - The root node of a parsed AST tree.
41
+ * @param language - The Language object for the parsed file.
42
+ * @param ext - The file extension (e.g., `.ts`).
43
+ * @param queryType - Which query to execute (e.g., `'symbols'`).
44
+ * @returns Array of structured results, or empty array if query not found.
45
+ */
46
+ execute(rootNode: WasmSyntaxNode, language: WasmLanguage, ext: string, queryType: QueryType): QueryResult[];
47
+ /**
48
+ * Execute a query and return flat captures instead of grouped matches.
49
+ * Useful when you care about individual nodes, not match grouping.
50
+ */
51
+ executeCaptures(rootNode: WasmSyntaxNode, language: WasmLanguage, ext: string, queryType: QueryType): CaptureInfo[];
52
+ /**
53
+ * Execute a raw .scm query string (not from file) against a tree.
54
+ * Useful for ad-hoc queries and testing.
55
+ */
56
+ executeRaw(rootNode: WasmSyntaxNode, language: WasmLanguage, scmSource: string): QueryResult[];
57
+ /**
58
+ * Get (or compile and cache) a query for the given language + type.
59
+ * Returns null if the .scm file doesn't exist.
60
+ */
61
+ private getOrCompile;
62
+ /** Load .scm file content, cached. Returns null if file not found. */
63
+ private loadScm;
64
+ /** Clear all caches. */
65
+ dispose(): void;
66
+ /** Resolve the directory path for a language's queries. */
67
+ static resolveQueryDir(langDir: string): string;
68
+ }
69
+ //#endregion
70
+ export { CaptureInfo, QueryExecutor, QueryResult, QueryType };
@@ -0,0 +1 @@
1
+ import{dirname as e,join as t}from"node:path";import{createLogger as n}from"../../../core/dist/index.js";import{existsSync as r,readFileSync as i}from"node:fs";import{fileURLToPath as a}from"node:url";const o=n(`query-executor`),s=e(a(import.meta.url));function c(){let e=t(s,`..`,`queries`);if(r(e))return e;let n=t(s,`..`,`..`,`src`,`queries`);return r(n)?n:e}const l=c(),u={".ts":`typescript`,".tsx":`typescript`,".mts":`typescript`,".cts":`typescript`,".js":`javascript`,".jsx":`javascript`,".mjs":`javascript`,".cjs":`javascript`,".py":`python`,".go":`go`,".rs":`rust`,".java":`java`};var d=class{queryCache=new Map;scmCache=new Map;execute(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.matches(e).map(e=>f(e)):[]}executeCaptures(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.captures(e).map(e=>p(e)):[]}executeRaw(e,t,n){return t.query(n).matches(e).map(e=>f(e))}getOrCompile(e,t,n){let r=u[t];if(!r)return null;let i=`${r}:${n}`,a=this.queryCache.get(i);if(a)return a;let s=this.loadScm(r,n);if(!s)return null;try{let t=e.query(s);return this.queryCache.set(i,t),t}catch(e){throw o.warn(`Failed to compile query`,{langDir:r,queryType:n,error:String(e)}),Error(`Failed to compile ${r}/${n}.scm: ${String(e)}`)}}loadScm(e,n){let r=`${e}:${n}`,a=this.scmCache.get(r);if(a!==void 0)return a;let s=t(l,e,`${n}.scm`);try{let e=i(s,`utf-8`);return this.scmCache.set(r,e),e}catch{return o.info(`Query file not found (graceful skip)`,{langDir:e,queryType:n}),null}}dispose(){this.queryCache.clear(),this.scmCache.clear()}static resolveQueryDir(e){return t(l,e)}};function f(e){let t=new Map;for(let n of e.captures)t.set(n.name,p(n));return{pattern:e.pattern,captures:t}}function p(e){let{node:t}=e;return{name:e.name,text:t.text,nodeType:t.type,startLine:t.startPosition.row,endLine:t.endPosition.row,startColumn:t.startPosition.column,endColumn:t.endPosition.column,node:t}}export{d as QueryExecutor};
@@ -0,0 +1,44 @@
1
+ import { WasmLanguage, WasmParser, WasmTree } from "./types.js";
2
+
3
+ //#region packages/chunker/src/wasm/runtime.d.ts
4
+ declare class WasmRuntime {
5
+ private static instance;
6
+ private parser;
7
+ private languages;
8
+ /** Track which grammar files have been loaded (by path) to avoid re-loading. */
9
+ private loadedGrammars;
10
+ /** Initialize the singleton runtime. Returns the instance or null on failure. */
11
+ static initialize(): Promise<WasmRuntime | null>;
12
+ /** Get the current runtime (null if not initialized). */
13
+ static get(): WasmRuntime | null;
14
+ /** Ensure the runtime is initialized, initializing if needed. */
15
+ static ensure(): Promise<WasmRuntime>;
16
+ /** Reset the singleton (for testing). */
17
+ static dispose(): void;
18
+ private init;
19
+ /**
20
+ * Load a language grammar for a file extension (lazy, cached).
21
+ * Returns the Language object or null if unsupported/unavailable.
22
+ */
23
+ loadLanguage(ext: string): Promise<WasmLanguage | null>;
24
+ /**
25
+ * Parse source code and return the AST tree.
26
+ * Lazily loads the grammar on first use for the given extension.
27
+ */
28
+ parse(content: string, ext: string): Promise<WasmTree | null>;
29
+ /** Check if a grammar is available (loaded or loadable) for the given extension. */
30
+ hasLanguage(ext: string): boolean;
31
+ /** Check if a grammar is already loaded for the given extension. */
32
+ isLanguageLoaded(ext: string): boolean;
33
+ /** Get the underlying parser instance (for advanced query usage). */
34
+ getParser(): WasmParser | null;
35
+ /** Get a loaded language by extension (null if not loaded yet). */
36
+ getLanguage(ext: string): WasmLanguage | null;
37
+ }
38
+ /**
39
+ * Initialize the WASM runtime. Call once at startup.
40
+ * Returns true if the runtime is available, false otherwise.
41
+ */
42
+ declare function initializeWasm(): Promise<boolean>;
43
+ //#endregion
44
+ export { WasmRuntime, initializeWasm };
@@ -0,0 +1 @@
1
+ import{SUPPORTED_EXTENSIONS as e,resolveGrammarPath as t,resolveParserWasmPath as n}from"./languages.js";import{createLogger as r}from"../../../core/dist/index.js";const i=r(`wasm-runtime`);async function a(){return(await import(`web-tree-sitter`)).default}var o=class r{static instance=null;parser=null;languages=new Map;loadedGrammars=new Map;static async initialize(){if(r.instance)return r.instance;let e=new r;return await e.init()?(r.instance=e,e):null}static get(){return r.instance}static async ensure(){let e=r.get();if(e)return e;let t=await r.initialize();if(!t)throw Error(`Failed to initialize WASM tree-sitter runtime`);return t}static dispose(){r.instance&&=(r.instance.parser?.delete(),r.instance.parser=null,r.instance.languages.clear(),r.instance.loadedGrammars.clear(),null)}async init(){try{let e=n();if(!e)return i.warn(`Parser WASM file not found`),!1;let t=await a();return await t.init({locateFile:()=>e}),this.parser=new t,i.info(`WASM tree-sitter parser initialized`),!0}catch(e){return i.warn(`Failed to initialize WASM tree-sitter`,{error:String(e)}),!1}}async loadLanguage(e){let n=this.languages.get(e);if(n)return n;let r=t(e);if(!r)return null;let o=this.loadedGrammars.get(r);if(o)return this.languages.set(e,o),o;try{let t=await(await a()).Language.load(r);return this.loadedGrammars.set(r,t),this.languages.set(e,t),i.info(`Loaded grammar`,{ext:e}),t}catch(t){return i.warn(`Failed to load grammar`,{ext:e,error:String(t)}),null}}async parse(e,t){if(!this.parser)return null;let n=await this.loadLanguage(t);return n?(this.parser.setLanguage(n),this.parser.parse(e)):null}hasLanguage(t){return e.has(t)}isLanguageLoaded(e){return this.languages.has(e)}getParser(){return this.parser}getLanguage(e){return this.languages.get(e)??null}};async function s(){return await o.initialize()!==null}export{o as WasmRuntime,s as initializeWasm};
@@ -0,0 +1,84 @@
1
+ //#region packages/chunker/src/wasm/types.d.ts
2
+ /**
3
+ * Minimal type definitions for web-tree-sitter 0.24.x.
4
+ *
5
+ * web-tree-sitter uses `export = Parser` (CJS-style) which doesn't interop
6
+ * cleanly with ESM `import type` under `moduleResolution: NodeNext` without
7
+ * `esModuleInterop`. We define our own interfaces for the subset we use.
8
+ */
9
+ interface WasmPoint {
10
+ row: number;
11
+ column: number;
12
+ }
13
+ interface WasmSyntaxNode {
14
+ type: string;
15
+ text: string;
16
+ startPosition: WasmPoint;
17
+ endPosition: WasmPoint;
18
+ startIndex: number;
19
+ endIndex: number;
20
+ children: WasmSyntaxNode[];
21
+ namedChildren: WasmSyntaxNode[];
22
+ childCount: number;
23
+ namedChildCount: number;
24
+ parent: WasmSyntaxNode | null;
25
+ nextSibling: WasmSyntaxNode | null;
26
+ previousSibling: WasmSyntaxNode | null;
27
+ nextNamedSibling: WasmSyntaxNode | null;
28
+ previousNamedSibling: WasmSyntaxNode | null;
29
+ isNamed: boolean;
30
+ firstChild: WasmSyntaxNode | null;
31
+ lastChild: WasmSyntaxNode | null;
32
+ firstNamedChild: WasmSyntaxNode | null;
33
+ lastNamedChild: WasmSyntaxNode | null;
34
+ childForFieldName(fieldName: string): WasmSyntaxNode | null;
35
+ descendantsOfType(types: string | string[], startPosition?: WasmPoint, endPosition?: WasmPoint): WasmSyntaxNode[];
36
+ }
37
+ interface WasmTree {
38
+ rootNode: WasmSyntaxNode;
39
+ delete(): void;
40
+ }
41
+ interface WasmLanguage {
42
+ query(source: string): WasmQuery;
43
+ readonly version: number;
44
+ readonly fieldCount: number;
45
+ }
46
+ interface WasmQuery {
47
+ matches(rootNode: WasmSyntaxNode, options?: {
48
+ startPosition?: WasmPoint;
49
+ endPosition?: WasmPoint;
50
+ matchLimit?: number;
51
+ }): WasmQueryMatch[];
52
+ captures(rootNode: WasmSyntaxNode, options?: {
53
+ startPosition?: WasmPoint;
54
+ endPosition?: WasmPoint;
55
+ matchLimit?: number;
56
+ }): WasmQueryCapture[];
57
+ captureNames: string[];
58
+ delete(): void;
59
+ }
60
+ interface WasmQueryMatch {
61
+ pattern: number;
62
+ captures: WasmQueryCapture[];
63
+ }
64
+ interface WasmQueryCapture {
65
+ name: string;
66
+ node: WasmSyntaxNode;
67
+ }
68
+ interface WasmParser {
69
+ parse(input: string): WasmTree;
70
+ setLanguage(language: WasmLanguage | null): void;
71
+ delete(): void;
72
+ }
73
+ /** The Parser constructor + statics as returned by web-tree-sitter. */
74
+ interface WasmParserModule {
75
+ new (): WasmParser;
76
+ init(moduleOptions?: {
77
+ locateFile?: (scriptName: string, scriptDirectory: string) => string;
78
+ }): Promise<void>;
79
+ Language: {
80
+ load(input: string | Uint8Array): Promise<WasmLanguage>;
81
+ };
82
+ }
83
+ //#endregion
84
+ export { WasmLanguage, WasmParser, WasmParserModule, WasmPoint, WasmQuery, WasmQueryCapture, WasmQueryMatch, WasmSyntaxNode, WasmTree };
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,23 @@
1
+ import { IChunker } from "./chunker.interface.js";
2
+ import { ChunkMetadata, RawChunk } from "@kb/core";
3
+
4
+ //#region packages/chunker/src/wasm-chunker.d.ts
5
+ declare class WasmChunker implements IChunker {
6
+ private readonly maxChunkSize;
7
+ constructor(options?: {
8
+ maxChunkSize?: number;
9
+ });
10
+ chunk(content: string, metadata: ChunkMetadata): RawChunk[];
11
+ /** Find declaration boundaries from AST top-level children. */
12
+ private findAstBoundaries;
13
+ /** Build RawChunk[] from AST boundaries, grouping consecutive preamble items. */
14
+ private buildChunks;
15
+ /** Split text by lines respecting max chunk size. */
16
+ private splitByLines;
17
+ /** Extract file extension from path. */
18
+ private extractExt;
19
+ /** Fallback: return the whole content as a single chunk. */
20
+ private singleChunk;
21
+ }
22
+ //#endregion
23
+ export { WasmChunker };
@@ -0,0 +1,6 @@
1
+ import{WasmRuntime as e}from"./wasm/runtime.js";import{CHUNK_SIZES as t}from"../../core/dist/index.js";const n=new Set([`function_declaration`,`class_declaration`,`interface_declaration`,`type_alias_declaration`,`enum_declaration`,`lexical_declaration`,`variable_declaration`,`export_statement`,`function_definition`,`class_definition`,`decorated_definition`,`class_declaration`,`interface_declaration`,`enum_declaration`,`function_declaration`,`method_declaration`,`type_declaration`,`function_item`,`struct_item`,`enum_item`,`trait_item`,`impl_item`,`const_item`,`static_item`,`type_item`]),r=new Set([`import_statement`,`import_from_statement`,`import_declaration`,`package_declaration`,`use_declaration`,`extern_crate_declaration`,`import_spec`,`package_clause`]);var i=class{maxChunkSize;constructor(e){this.maxChunkSize=e?.maxChunkSize??t.code.max}chunk(t,n){let r=e.get();if(!r)return this.singleChunk(t,n);let i=this.extractExt(n.sourcePath),a=r.getLanguage(i);if(!a)return this.singleChunk(t,n);let o=r.getParser();if(!o)return this.singleChunk(t,n);o.setLanguage(a);let s=o.parse(t);if(!s)return this.singleChunk(t,n);let c=this.findAstBoundaries(s.rootNode,t);return c.length===0?this.singleChunk(t,n):this.buildChunks(c,t,n)}findAstBoundaries(e,t){let i=[];for(let t of e.children){if(!t.isNamed)continue;let e=n.has(t.type),a=r.has(t.type);(e||a)&&i.push({startOffset:t.startIndex,endOffset:t.endIndex,startLine:t.startPosition.row+1,endLine:t.endPosition.row+1,isPreamble:a})}return i}buildChunks(e,t,n){let r=[],i=null,a=0,o=0;for(let s of e){if(s.isPreamble){i===null&&(i=s.startLine),a=s.endOffset,o=s.endLine;continue}if(i!==null){let e=t.slice(0,a).trim();e.length>0&&r.push({text:`// File: ${n.sourcePath}\n${e}`,sourcePath:n.sourcePath,contentType:n.contentType,chunkIndex:0,totalChunks:0,startLine:i,endLine:o}),i=null}let e=t.slice(s.startOffset,s.endOffset).trim();if(e=`// File: ${n.sourcePath}\n`+e,e.length>this.maxChunkSize){let t=this.splitByLines(e,this.maxChunkSize),i=s.startLine;for(let e of t){let t=e.split(`
2
+ `).length;r.push({text:e,sourcePath:n.sourcePath,contentType:n.contentType,chunkIndex:0,totalChunks:0,startLine:i,endLine:i+t-1}),i+=t}}else r.push({text:e,sourcePath:n.sourcePath,contentType:n.contentType,chunkIndex:0,totalChunks:0,startLine:s.startLine,endLine:s.endLine})}if(i!==null){let e=t.slice(0,a).trim();e.length>0&&r.push({text:`// File: ${n.sourcePath}\n${e}`,sourcePath:n.sourcePath,contentType:n.contentType,chunkIndex:0,totalChunks:0,startLine:i,endLine:o})}return r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}splitByLines(e,t){let n=e.split(`
3
+ `),r=[],i=[],a=0;for(let e of n)a+e.length+1>t&&i.length>0&&(r.push(i.join(`
4
+ `)),i=[],a=0),i.push(e),a+=e.length+1;return i.length>0&&r.push(i.join(`
5
+ `)),r}extractExt(e){let t=e.lastIndexOf(`.`);return t>=0?e.slice(t).toLowerCase():``}singleChunk(e,t){return[{text:`// File: ${t.sourcePath}\n${e}`,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:0,totalChunks:1,startLine:1,endLine:e.split(`
6
+ `).length}]}};export{i as WasmChunker};
@@ -0,0 +1,11 @@
1
+ ; Go call extraction queries
2
+ ; Captures: @node (call), @callee (function name)
3
+
4
+ ; foo(args) — direct function call
5
+ (call_expression
6
+ function: (identifier) @callee) @node
7
+
8
+ ; pkg.Foo(args) — qualified/selector call
9
+ (call_expression
10
+ function: (selector_expression
11
+ field: (field_identifier) @callee)) @node