@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
@@ -0,0 +1,391 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Create a new ADR markdown file using repo conventions and a template.
4
+ *
5
+ * Design goals:
6
+ * - Safe defaults (auto-detect adr directory + numbering)
7
+ * - No external deps
8
+ * - Works even if the repo has no ADRs yet
9
+ */
10
+
11
+ const fs = require('node:fs');
12
+ const path = require('node:path');
13
+
14
+ function die(msg) {
15
+ process.stderr.write(`${msg}\n`);
16
+ process.exit(1);
17
+ }
18
+
19
+ function slugify(text) {
20
+ const t = String(text || '')
21
+ .trim()
22
+ .toLowerCase();
23
+ const noQuotes = t.replace(/['"`]/g, '');
24
+ const dashed = noQuotes.replace(/[^a-z0-9]+/g, '-').replace(/-{2,}/g, '-');
25
+ const trimmed = dashed.replace(/^-+/, '').replace(/-+$/, '');
26
+ return trimmed || 'decision';
27
+ }
28
+
29
+ function toPosix(p) {
30
+ return p.split(path.sep).join('/');
31
+ }
32
+
33
+ function parseArgs(argv) {
34
+ const out = {
35
+ repoRoot: '.',
36
+ dir: null,
37
+ noCreateDir: false,
38
+ title: null,
39
+ status: 'proposed',
40
+ template: 'simple', // simple | madr
41
+ strategy: 'auto', // auto | date | slug
42
+ deciders: '',
43
+ consulted: '',
44
+ informed: '',
45
+ technicalStory: '',
46
+ chosenOption: '',
47
+ updateIndex: false,
48
+ indexFile: null,
49
+ json: false,
50
+ };
51
+
52
+ for (let i = 2; i < argv.length; i++) {
53
+ const a = argv[i];
54
+ const next = () => {
55
+ if (i + 1 >= argv.length) die(`Missing value for ${a}`);
56
+ return argv[++i];
57
+ };
58
+
59
+ if (a === '--repo-root') out.repoRoot = next();
60
+ else if (a === '--dir') out.dir = next();
61
+ else if (a === '--no-create-dir') out.noCreateDir = true;
62
+ else if (a === '--title') out.title = next();
63
+ else if (a === '--status') out.status = next();
64
+ else if (a === '--template') out.template = next();
65
+ else if (a === '--strategy') out.strategy = next();
66
+ else if (a === '--deciders') out.deciders = next();
67
+ else if (a === '--consulted') out.consulted = next();
68
+ else if (a === '--informed') out.informed = next();
69
+ else if (a === '--technical-story') out.technicalStory = next();
70
+ else if (a === '--chosen-option') out.chosenOption = next();
71
+ else if (a === '--update-index') out.updateIndex = true;
72
+ else if (a === '--index-file') out.indexFile = next();
73
+ else if (a === '--json') out.json = true;
74
+ else if (a === '--help' || a === '-h') {
75
+ process.stdout.write(
76
+ [
77
+ 'Usage: node new_adr.js --title "Choose database" [options]',
78
+ '',
79
+ 'Options:',
80
+ ' --repo-root <path> Repo root (default: .)',
81
+ ' --dir <path> ADR directory (default: auto-detect, else adr/)',
82
+ ' --no-create-dir Do not create ADR directory if missing',
83
+ ' --status <value> ADR status (default: proposed)',
84
+ ' --template simple|madr Template (default: simple)',
85
+ ' --strategy auto|date|slug Filename strategy (default: auto)',
86
+ ' --deciders "a,b" Deciders list',
87
+ ' --consulted "a,b" Consulted experts (RACI)',
88
+ ' --informed "a,b" Informed stakeholders (RACI)',
89
+ ' --technical-story <x> Issue/ticket/PR link or short ref',
90
+ ' --chosen-option <x> MADR template: chosen option label',
91
+ ' --update-index Update adr/README.md (or existing index)',
92
+ ' --index-file <path> Override index file (relative to repo root unless absolute)',
93
+ ' --json Output machine-readable JSON (default: off)',
94
+ '',
95
+ ].join('\n'),
96
+ );
97
+ process.exit(0);
98
+ } else {
99
+ die(`Unknown arg: ${a}`);
100
+ }
101
+ }
102
+
103
+ if (!out.title) die('Missing required --title');
104
+
105
+ if (!['simple', 'madr'].includes(out.template)) die(`Invalid --template: ${out.template}`);
106
+ if (!['auto', 'date', 'slug'].includes(out.strategy)) die(`Invalid --strategy: ${out.strategy}`);
107
+
108
+ return out;
109
+ }
110
+
111
+ function detectAdrDir(repoRoot) {
112
+ const candidates = [
113
+ path.join(repoRoot, 'contributing', 'decisions'),
114
+ path.join(repoRoot, 'docs', 'decisions'),
115
+ path.join(repoRoot, 'adr'),
116
+ path.join(repoRoot, 'docs', 'adr'),
117
+ path.join(repoRoot, 'docs', 'adrs'),
118
+ path.join(repoRoot, 'decisions'),
119
+ ];
120
+ for (const p of candidates) {
121
+ try {
122
+ if (fs.statSync(p).isDirectory()) return p;
123
+ } catch {
124
+ // ignore
125
+ }
126
+ }
127
+ return null;
128
+ }
129
+
130
+ function listMdFiles(dir) {
131
+ let entries = [];
132
+ try {
133
+ entries = fs.readdirSync(dir, { withFileTypes: true });
134
+ } catch {
135
+ return [];
136
+ }
137
+ return entries
138
+ .filter((e) => e.isFile() && e.name.toLowerCase().endsWith('.md'))
139
+ .map((e) => e.name);
140
+ }
141
+
142
+ function detectStrategy(adrDir) {
143
+ const md = listMdFiles(adrDir);
144
+ for (const name of md) {
145
+ if (/^\d{4}-\d{2}-\d{2}-/.test(name)) return 'date';
146
+ }
147
+ if (md.length > 0) return 'slug';
148
+ return 'date';
149
+ }
150
+
151
+ function todayISO() {
152
+ return new Date().toISOString().slice(0, 10);
153
+ }
154
+
155
+ function loadTemplate(templateName) {
156
+ const skillRoot = path.resolve(__dirname, '..');
157
+ const templatePath = path.join(skillRoot, 'assets', 'templates', `adr-${templateName}.md`);
158
+ if (!fs.existsSync(templatePath)) die(`Template not found: ${templatePath}`);
159
+ return fs.readFileSync(templatePath, 'utf8');
160
+ }
161
+
162
+ function renderTemplate(raw, vars) {
163
+ // Handle YAML front matter placeholders (quoted and unquoted)
164
+ let out = raw;
165
+
166
+ // YAML front matter fields — replace the whole placeholder pattern
167
+ // e.g. status: "{proposed | accepted | ...}" → status: proposed
168
+ out = out.replace(/^(status:\s*)["']?\{[^}]*\}["']?\s*$/m, `$1${vars.status}`);
169
+ out = out.replace(/^(date:\s*)\{[^}]*\}\s*$/m, `$1${vars.date}`);
170
+ out = out.replace(/^(decision-makers:\s*)["']?\{[^}]*\}["']?\s*$/m, `$1${vars.deciders || ''}`);
171
+
172
+ // consulted / informed: replace if a value was provided, otherwise remove the
173
+ // entire line so we don't leak placeholder text like "{list everyone...}"
174
+ if (vars.consulted) {
175
+ out = out.replace(/^(consulted:\s*)["']?\{[^}]*\}["']?\s*$/m, `$1${vars.consulted}`);
176
+ } else {
177
+ out = out.replace(/^consulted:\s*["']?\{[^}]*\}["']?\s*\n/m, '');
178
+ }
179
+ if (vars.informed) {
180
+ out = out.replace(/^(informed:\s*)["']?\{[^}]*\}["']?\s*$/m, `$1${vars.informed}`);
181
+ } else {
182
+ out = out.replace(/^informed:\s*["']?\{[^}]*\}["']?\s*\n/m, '');
183
+ }
184
+
185
+ // Replace MADR-style heading placeholder
186
+ out = out.replace(/^(#\s+)\{short title[^}]*\}\s*$/m, `$1${vars.title}`);
187
+
188
+ // Inline placeholders (title in heading, etc.)
189
+ out = out
190
+ .replaceAll('{TITLE}', vars.title)
191
+ .replaceAll('{STATUS}', vars.status)
192
+ .replaceAll('{DATE}', vars.date)
193
+ .replaceAll('{DECIDERS}', vars.deciders)
194
+ .replaceAll('{TECHNICAL_STORY}', vars.technicalStory)
195
+ .replaceAll('{CHOSEN_OPTION}', vars.chosenOption);
196
+
197
+ return out;
198
+ }
199
+
200
+ function chooseIndexFile(adrDir) {
201
+ for (const name of ['README.md', 'index.md']) {
202
+ const p = path.join(adrDir, name);
203
+ if (fs.existsSync(p)) return p;
204
+ }
205
+ return path.join(adrDir, 'README.md');
206
+ }
207
+
208
+ function insertIndexEntryUnderHeading(lines, headingRegex, entryLine) {
209
+ // Returns { lines, inserted }
210
+ const headingIndex = lines.findIndex((l) => headingRegex.test(l));
211
+ if (headingIndex === -1) return { lines, inserted: false };
212
+
213
+ let sectionEnd = lines.length;
214
+ for (let i = headingIndex + 1; i < lines.length; i++) {
215
+ if (/^##\s+/.test(lines[i])) {
216
+ sectionEnd = i;
217
+ break;
218
+ }
219
+ }
220
+
221
+ // Prefer inserting at end of list in this section if there is a list.
222
+ let lastListItem = -1;
223
+ for (let i = sectionEnd - 1; i > headingIndex; i--) {
224
+ if (/^[-*]\s+/.test(lines[i])) {
225
+ lastListItem = i;
226
+ break;
227
+ }
228
+ }
229
+
230
+ const insertAt = lastListItem !== -1 ? lastListItem + 1 : sectionEnd;
231
+
232
+ const out = [...lines];
233
+
234
+ // Ensure there's a blank line after the heading if we're inserting immediately after it.
235
+ if (insertAt === headingIndex + 1 && out[insertAt] !== '') {
236
+ out.splice(insertAt, 0, '');
237
+ }
238
+
239
+ out.splice(insertAt, 0, entryLine);
240
+ return { lines: out, inserted: true };
241
+ }
242
+
243
+ function updateIndex(indexFile, { relLink, title, status, date }) {
244
+ let content = '';
245
+ if (fs.existsSync(indexFile)) content = fs.readFileSync(indexFile, 'utf8');
246
+ else content = '# ADR Log\n\n';
247
+
248
+ if (content.includes(relLink)) return false;
249
+
250
+ const normalized = content.replace(/\r\n/g, '\n');
251
+ const hadTrailingNewline = normalized.endsWith('\n');
252
+ let lines = normalized.split('\n');
253
+ // Normalize away the trailing empty split element so insertion math is sane.
254
+ if (hadTrailingNewline && lines.length > 0 && lines[lines.length - 1] === '') {
255
+ lines = lines.slice(0, -1);
256
+ }
257
+ const entryLine = `- [${title}](${relLink}) (${status}, ${date})`;
258
+
259
+ // Prefer inserting under "## ADRs" if it exists, otherwise append at EOF.
260
+ const r = insertIndexEntryUnderHeading(lines, /^##\s+ADRs\s*$/i, entryLine);
261
+ const nextLines = r.inserted ? r.lines : [...lines, entryLine];
262
+
263
+ let next = nextLines.join('\n');
264
+ if (hadTrailingNewline) next += '\n';
265
+
266
+ fs.mkdirSync(path.dirname(indexFile), { recursive: true });
267
+ fs.writeFileSync(indexFile, next, 'utf8');
268
+ return true;
269
+ }
270
+
271
+ function main() {
272
+ const args = parseArgs(process.argv);
273
+
274
+ const repoRoot = path.resolve(process.cwd(), args.repoRoot);
275
+ if (!fs.existsSync(repoRoot)) die(`Repo root does not exist: ${repoRoot}`);
276
+
277
+ let adrDir;
278
+ if (args.dir) adrDir = path.resolve(repoRoot, args.dir);
279
+ else adrDir = detectAdrDir(repoRoot) || path.join(repoRoot, 'adr');
280
+
281
+ if (!fs.existsSync(adrDir)) {
282
+ if (args.noCreateDir) die(`ADR directory does not exist: ${adrDir}`);
283
+ fs.mkdirSync(adrDir, { recursive: true });
284
+ }
285
+
286
+ let strategy = args.strategy;
287
+ if (strategy === 'auto') strategy = detectStrategy(adrDir);
288
+
289
+ const title = String(args.title).trim();
290
+ const slug = slugify(title);
291
+
292
+ const today = todayISO();
293
+
294
+ let filename;
295
+ if (strategy === 'date') {
296
+ filename = `${today}-${slug}.md`;
297
+ } else {
298
+ filename = `${slug}.md`;
299
+ }
300
+
301
+ let out = path.join(adrDir, filename);
302
+ if (fs.existsSync(out)) {
303
+ if (strategy === 'date') die(`ADR already exists: ${out}`);
304
+ let i = 2;
305
+ while (true) {
306
+ const candidate = path.join(adrDir, `${slug}-${i}.md`);
307
+ if (!fs.existsSync(candidate)) {
308
+ out = candidate;
309
+ break;
310
+ }
311
+ i++;
312
+ }
313
+ }
314
+
315
+ const deciders = String(args.deciders || '')
316
+ .split(',')
317
+ .map((s) => s.trim())
318
+ .filter(Boolean)
319
+ .join(', ');
320
+
321
+ const consulted = String(args.consulted || '')
322
+ .split(',')
323
+ .map((s) => s.trim())
324
+ .filter(Boolean)
325
+ .join(', ');
326
+ const informed = String(args.informed || '')
327
+ .split(',')
328
+ .map((s) => s.trim())
329
+ .filter(Boolean)
330
+ .join(', ');
331
+
332
+ const raw = loadTemplate(args.template);
333
+ const rendered = renderTemplate(raw, {
334
+ title,
335
+ status: String(args.status).trim(),
336
+ date: today,
337
+ deciders,
338
+ consulted,
339
+ informed,
340
+ technicalStory: String(args.technicalStory || '').trim(),
341
+ chosenOption: String(args.chosenOption || '').trim(),
342
+ });
343
+
344
+ fs.writeFileSync(out, `${rendered.trimEnd()}\n`, 'utf8');
345
+
346
+ let updatedIndexPath = null;
347
+ let indexChanged = false;
348
+
349
+ if (args.updateIndex) {
350
+ let indexFile;
351
+ if (args.indexFile) {
352
+ indexFile = path.isAbsolute(args.indexFile)
353
+ ? args.indexFile
354
+ : path.resolve(repoRoot, args.indexFile);
355
+ } else {
356
+ indexFile = chooseIndexFile(adrDir);
357
+ }
358
+
359
+ const relLink = toPosix(path.relative(path.dirname(indexFile), out));
360
+ indexChanged = updateIndex(indexFile, {
361
+ relLink,
362
+ title,
363
+ status: String(args.status).trim(),
364
+ date: today,
365
+ });
366
+ updatedIndexPath = indexFile;
367
+ }
368
+
369
+ if (args.json) {
370
+ const payload = {
371
+ repoRoot,
372
+ adrDir,
373
+ createdAdrPath: out,
374
+ createdAdrRelPath: toPosix(path.relative(repoRoot, out)),
375
+ title,
376
+ status: String(args.status).trim(),
377
+ template: args.template,
378
+ strategy,
379
+ date: today,
380
+ indexUpdated: Boolean(updatedIndexPath),
381
+ indexChanged,
382
+ indexPath: updatedIndexPath,
383
+ indexRelPath: updatedIndexPath ? toPosix(path.relative(repoRoot, updatedIndexPath)) : null,
384
+ };
385
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
386
+ } else {
387
+ process.stdout.write(`${out}\n`);
388
+ }
389
+ }
390
+
391
+ main();
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Update an ADR's status in-place.
4
+ *
5
+ * Supported patterns:
6
+ * - Bullet status: "- Status: proposed" or "* Status: proposed"
7
+ * - Nygard-style section: "## Status" followed by a single-line status value
8
+ */
9
+
10
+ const fs = require('node:fs');
11
+ const path = require('node:path');
12
+
13
+ function die(msg) {
14
+ process.stderr.write(`${msg}\n`);
15
+ process.exit(1);
16
+ }
17
+
18
+ function toPosix(p) {
19
+ return p.split(path.sep).join('/');
20
+ }
21
+
22
+ function parseArgs(argv) {
23
+ if (argv.includes('--help') || argv.includes('-h')) {
24
+ process.stdout.write(
25
+ [
26
+ 'Usage: node set_adr_status.js <path> --status <value> [--json]',
27
+ '',
28
+ 'Example:',
29
+ ' node set_adr_status.js adr/2025-06-15-foo.md --status accepted',
30
+ '',
31
+ ].join('\n'),
32
+ );
33
+ process.exit(0);
34
+ }
35
+
36
+ if (argv.length < 3) die('Missing <path>');
37
+ const file = argv[2];
38
+
39
+ let status = null;
40
+ let json = false;
41
+ for (let i = 3; i < argv.length; i++) {
42
+ const a = argv[i];
43
+ if (a === '--status') {
44
+ if (i + 1 >= argv.length) die('Missing value for --status');
45
+ status = argv[++i];
46
+ } else if (a === '--json') {
47
+ json = true;
48
+ } else {
49
+ die(`Unknown arg: ${a}`);
50
+ }
51
+ }
52
+ if (!status) die('Missing required --status');
53
+ return { file, status: String(status).trim(), json };
54
+ }
55
+
56
+ function setYamlFrontMatterStatus(lines, newStatus) {
57
+ // YAML front matter: starts with '---', ends with next '---'
58
+ if (lines.length < 2 || lines[0].trim() !== '---') return { lines, changed: false };
59
+
60
+ let changed = false;
61
+ const out = [];
62
+ let inFrontMatter = true;
63
+ let passedOpening = false;
64
+
65
+ for (let i = 0; i < lines.length; i++) {
66
+ const line = lines[i];
67
+
68
+ if (i === 0 && line.trim() === '---') {
69
+ passedOpening = true;
70
+ out.push(line);
71
+ continue;
72
+ }
73
+
74
+ if (passedOpening && inFrontMatter && line.trim() === '---') {
75
+ inFrontMatter = false;
76
+ out.push(line);
77
+ continue;
78
+ }
79
+
80
+ if (passedOpening && inFrontMatter && /^status\s*:/.test(line)) {
81
+ out.push(`status: ${newStatus}`);
82
+ changed = true;
83
+ continue;
84
+ }
85
+
86
+ out.push(line);
87
+ }
88
+
89
+ return { lines: out, changed };
90
+ }
91
+
92
+ function setBulletStatus(lines, newStatus) {
93
+ let changed = false;
94
+ const out = lines.map((line) => {
95
+ const m = line.match(/^([*-])\s*Status:\s*(.*)$/);
96
+ if (!m) return line;
97
+ changed = true;
98
+ return `${m[1]} Status: ${newStatus}`;
99
+ });
100
+ return { lines: out, changed };
101
+ }
102
+
103
+ function setSectionStatus(lines, newStatus) {
104
+ let changed = false;
105
+ const out = [];
106
+
107
+ for (let i = 0; i < lines.length; i++) {
108
+ out.push(lines[i]);
109
+
110
+ if (!/^##\s+Status\s*$/.test(lines[i])) continue;
111
+
112
+ // Replace next non-empty, non-heading line. If not found, insert.
113
+ let j = i + 1;
114
+ while (j < lines.length && lines[j].trim() === '') {
115
+ out.push(lines[j]);
116
+ j++;
117
+ }
118
+
119
+ if (j < lines.length && !/^##\s+/.test(lines[j])) {
120
+ out.push(newStatus);
121
+ changed = true;
122
+ i = j; // skip original status line
123
+ continue;
124
+ }
125
+
126
+ out.push(newStatus);
127
+ changed = true;
128
+ i = j - 1;
129
+ }
130
+
131
+ return { lines: out, changed };
132
+ }
133
+
134
+ function main() {
135
+ const args = parseArgs(process.argv);
136
+ const filePath = path.resolve(process.cwd(), args.file);
137
+ if (!fs.existsSync(filePath)) die(`File not found: ${filePath}`);
138
+
139
+ const content = fs.readFileSync(filePath, 'utf8');
140
+ const hadTrailingNewline = content.endsWith('\n');
141
+ const lines = content.replace(/\r\n/g, '\n').split('\n');
142
+
143
+ let r = setYamlFrontMatterStatus(lines, args.status);
144
+ if (!r.changed) r = setBulletStatus(lines, args.status);
145
+ if (!r.changed) r = setSectionStatus(lines, args.status);
146
+ if (!r.changed) {
147
+ die(
148
+ "Could not find a status to update. Expected YAML front matter 'status:', '- Status:'/'* Status:', or a '## Status' section.",
149
+ );
150
+ }
151
+
152
+ const newContent = r.lines.join('\n') + (hadTrailingNewline ? '\n' : '');
153
+ fs.writeFileSync(filePath, newContent, 'utf8');
154
+
155
+ if (args.json) {
156
+ process.stdout.write(
157
+ `${JSON.stringify({
158
+ filePath,
159
+ fileRelPath: toPosix(path.relative(process.cwd(), filePath)),
160
+ status: args.status,
161
+ changed: true,
162
+ })}\n`,
163
+ );
164
+ } else {
165
+ process.stdout.write(`${filePath}\n`);
166
+ }
167
+ }
168
+
169
+ main();