karajan-code 3.4.0 → 3.4.2

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 (749) hide show
  1. package/README.md +1 -1
  2. package/node_modules/@karajan/core/package.json +12 -1
  3. package/package.json +4 -2
  4. package/packages/hu-board/src/routes/api.js +70 -49
  5. package/packages/hu-board/src/zombie-reaper.js +1 -1
  6. package/scripts/verify-pack.mjs +108 -0
  7. package/src/agents/aider-agent.js +1 -1
  8. package/src/agents/gemini-agent.js +1 -1
  9. package/src/agents/opencode-agent.js +1 -1
  10. package/src/audit/agent-readiness.js +2 -1
  11. package/src/audit/deterministic-summary.js +11 -5
  12. package/src/audit/issue-filter.js +3 -6
  13. package/src/audit/plan-adherence.js +3 -1
  14. package/src/audit/semgrep-findings.js +5 -1
  15. package/src/brain/agent-error-classifier.js +8 -1
  16. package/src/brain/decisor.js +2 -2
  17. package/src/brain/solomon-consult.js +2 -2
  18. package/src/brain/standby-scheduler.js +0 -2
  19. package/src/commands/audit.js +8 -3
  20. package/src/commands/board.js +1 -1
  21. package/src/commands/standby.js +4 -1
  22. package/src/config/loader.js +2 -2
  23. package/src/golden/asserter.js +3 -1
  24. package/src/golden/schema.js +1 -1
  25. package/src/hu/auto-generator.js +1 -1
  26. package/src/lang/tree-sitter-loader.js +1 -5
  27. package/src/mcp/handlers/management-handlers.js +4 -3
  28. package/src/orchestrator/drivers/post-loop.js +43 -91
  29. package/src/orchestrator/flow-runner.js +25 -0
  30. package/src/orchestrator/fs-leak-detector.js +6 -1
  31. package/src/orchestrator/preflight-checks.js +51 -0
  32. package/src/orchestrator/solomon-rules.js +12 -1
  33. package/src/prompts/audit.js +12 -11
  34. package/src/prompts/hu-reviewer.js +1 -1
  35. package/src/prompts/planner.js +1 -1
  36. package/src/rag/embedders/factory.js +0 -1
  37. package/src/rag/retriever.js +1 -1
  38. package/src/roles/agent-role.js +1 -1
  39. package/src/roles/audit-role.js +10 -2
  40. package/src/session/journal/write-all.js +89 -0
  41. package/src/sonar/discovery.js +2 -1
  42. package/src/sonar/scanner.js +1 -1
  43. package/src/utils/cli-progress.js +4 -2
  44. package/src/utils/escape-regexp.js +15 -0
  45. package/src/utils/paths.js +0 -1
  46. package/src/utils/port-occupant.js +2 -1
  47. package/src/utils/project-detect.js +1 -1
  48. package/node_modules/@sec-ant/readable-stream/LICENSE +0 -21
  49. package/node_modules/@sec-ant/readable-stream/README.md +0 -230
  50. package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterablePrototype.d.ts +0 -1
  51. package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterator.d.ts +0 -27
  52. package/node_modules/@sec-ant/readable-stream/dist/core/fromAnyIterable.d.ts +0 -6
  53. package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.d.ts +0 -2
  54. package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.js +0 -5
  55. package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.d.ts +0 -2
  56. package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.js +0 -5
  57. package/node_modules/@sec-ant/readable-stream/dist/index/index.d.ts +0 -2
  58. package/node_modules/@sec-ant/readable-stream/dist/index/index.js +0 -8
  59. package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.d.ts +0 -1
  60. package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.js +0 -3
  61. package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.d.ts +0 -1
  62. package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.js +0 -2
  63. package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.d.ts +0 -2
  64. package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.js +0 -4
  65. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.d.ts +0 -1
  66. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +0 -89
  67. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.d.ts +0 -1
  68. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +0 -34
  69. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.d.ts +0 -2
  70. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +0 -6
  71. package/node_modules/@sec-ant/readable-stream/dist/types/async-iterator.d.ts +0 -11
  72. package/node_modules/@sec-ant/readable-stream/package.json +0 -96
  73. package/node_modules/@sindresorhus/merge-streams/index.d.ts +0 -44
  74. package/node_modules/@sindresorhus/merge-streams/index.js +0 -265
  75. package/node_modules/@sindresorhus/merge-streams/license +0 -9
  76. package/node_modules/@sindresorhus/merge-streams/package.json +0 -49
  77. package/node_modules/@sindresorhus/merge-streams/readme.md +0 -53
  78. package/node_modules/base64-js/LICENSE +0 -21
  79. package/node_modules/base64-js/README.md +0 -34
  80. package/node_modules/base64-js/base64js.min.js +0 -1
  81. package/node_modules/base64-js/index.d.ts +0 -3
  82. package/node_modules/base64-js/index.js +0 -150
  83. package/node_modules/base64-js/package.json +0 -47
  84. package/node_modules/better-sqlite3/LICENSE +0 -21
  85. package/node_modules/better-sqlite3/README.md +0 -99
  86. package/node_modules/better-sqlite3/binding.gyp +0 -38
  87. package/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  88. package/node_modules/better-sqlite3/deps/common.gypi +0 -68
  89. package/node_modules/better-sqlite3/deps/copy.js +0 -31
  90. package/node_modules/better-sqlite3/deps/defines.gypi +0 -42
  91. package/node_modules/better-sqlite3/deps/download.sh +0 -123
  92. package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
  93. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -268879
  94. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -14335
  95. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -739
  96. package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
  97. package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
  98. package/node_modules/better-sqlite3/lib/database.js +0 -90
  99. package/node_modules/better-sqlite3/lib/index.js +0 -3
  100. package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
  101. package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
  102. package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
  103. package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
  104. package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
  105. package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
  106. package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
  107. package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
  108. package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
  109. package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
  110. package/node_modules/better-sqlite3/lib/util.js +0 -12
  111. package/node_modules/better-sqlite3/package.json +0 -59
  112. package/node_modules/better-sqlite3/src/addon.cpp +0 -47
  113. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
  114. package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
  115. package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
  116. package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
  117. package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
  118. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
  119. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
  120. package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
  121. package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
  122. package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
  123. package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
  124. package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
  125. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
  126. package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
  127. package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
  128. package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
  129. package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
  130. package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
  131. package/node_modules/better-sqlite3/src/util/macros.cpp +0 -83
  132. package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
  133. package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
  134. package/node_modules/bindings/LICENSE.md +0 -22
  135. package/node_modules/bindings/README.md +0 -98
  136. package/node_modules/bindings/bindings.js +0 -221
  137. package/node_modules/bindings/package.json +0 -28
  138. package/node_modules/bl/.travis.yml +0 -17
  139. package/node_modules/bl/BufferList.js +0 -396
  140. package/node_modules/bl/LICENSE.md +0 -13
  141. package/node_modules/bl/README.md +0 -247
  142. package/node_modules/bl/bl.js +0 -84
  143. package/node_modules/bl/package.json +0 -37
  144. package/node_modules/bl/test/convert.js +0 -21
  145. package/node_modules/bl/test/indexOf.js +0 -492
  146. package/node_modules/bl/test/isBufferList.js +0 -32
  147. package/node_modules/bl/test/test.js +0 -869
  148. package/node_modules/buffer/AUTHORS.md +0 -70
  149. package/node_modules/buffer/LICENSE +0 -21
  150. package/node_modules/buffer/README.md +0 -410
  151. package/node_modules/buffer/index.d.ts +0 -186
  152. package/node_modules/buffer/index.js +0 -1817
  153. package/node_modules/buffer/package.json +0 -96
  154. package/node_modules/chownr/LICENSE +0 -15
  155. package/node_modules/chownr/README.md +0 -3
  156. package/node_modules/chownr/chownr.js +0 -167
  157. package/node_modules/chownr/package.json +0 -29
  158. package/node_modules/cross-spawn/LICENSE +0 -21
  159. package/node_modules/cross-spawn/README.md +0 -89
  160. package/node_modules/cross-spawn/index.js +0 -39
  161. package/node_modules/cross-spawn/lib/enoent.js +0 -59
  162. package/node_modules/cross-spawn/lib/parse.js +0 -91
  163. package/node_modules/cross-spawn/lib/util/escape.js +0 -47
  164. package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  165. package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  166. package/node_modules/cross-spawn/package.json +0 -73
  167. package/node_modules/decompress-response/index.d.ts +0 -22
  168. package/node_modules/decompress-response/index.js +0 -58
  169. package/node_modules/decompress-response/license +0 -9
  170. package/node_modules/decompress-response/package.json +0 -56
  171. package/node_modules/decompress-response/readme.md +0 -48
  172. package/node_modules/deep-extend/CHANGELOG.md +0 -46
  173. package/node_modules/deep-extend/LICENSE +0 -20
  174. package/node_modules/deep-extend/README.md +0 -91
  175. package/node_modules/deep-extend/index.js +0 -1
  176. package/node_modules/deep-extend/lib/deep-extend.js +0 -150
  177. package/node_modules/deep-extend/package.json +0 -62
  178. package/node_modules/detect-libc/LICENSE +0 -201
  179. package/node_modules/detect-libc/README.md +0 -163
  180. package/node_modules/detect-libc/index.d.ts +0 -14
  181. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  182. package/node_modules/detect-libc/lib/elf.js +0 -39
  183. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  184. package/node_modules/detect-libc/lib/process.js +0 -24
  185. package/node_modules/detect-libc/package.json +0 -44
  186. package/node_modules/end-of-stream/LICENSE +0 -21
  187. package/node_modules/end-of-stream/README.md +0 -54
  188. package/node_modules/end-of-stream/index.js +0 -96
  189. package/node_modules/end-of-stream/package.json +0 -37
  190. package/node_modules/execa/index.d.ts +0 -27
  191. package/node_modules/execa/index.js +0 -28
  192. package/node_modules/execa/lib/arguments/command.js +0 -20
  193. package/node_modules/execa/lib/arguments/cwd.js +0 -39
  194. package/node_modules/execa/lib/arguments/encoding-option.js +0 -50
  195. package/node_modules/execa/lib/arguments/escape.js +0 -88
  196. package/node_modules/execa/lib/arguments/fd-options.js +0 -108
  197. package/node_modules/execa/lib/arguments/file-url.js +0 -25
  198. package/node_modules/execa/lib/arguments/options.js +0 -96
  199. package/node_modules/execa/lib/arguments/shell.js +0 -11
  200. package/node_modules/execa/lib/arguments/specific.js +0 -111
  201. package/node_modules/execa/lib/convert/add.js +0 -15
  202. package/node_modules/execa/lib/convert/concurrent.js +0 -33
  203. package/node_modules/execa/lib/convert/duplex.js +0 -69
  204. package/node_modules/execa/lib/convert/iterable.js +0 -34
  205. package/node_modules/execa/lib/convert/readable.js +0 -113
  206. package/node_modules/execa/lib/convert/shared.js +0 -46
  207. package/node_modules/execa/lib/convert/writable.js +0 -90
  208. package/node_modules/execa/lib/io/contents.js +0 -116
  209. package/node_modules/execa/lib/io/input-sync.js +0 -44
  210. package/node_modules/execa/lib/io/iterate.js +0 -110
  211. package/node_modules/execa/lib/io/max-buffer.js +0 -89
  212. package/node_modules/execa/lib/io/output-async.js +0 -80
  213. package/node_modules/execa/lib/io/output-sync.js +0 -135
  214. package/node_modules/execa/lib/io/pipeline.js +0 -48
  215. package/node_modules/execa/lib/io/strip-newline.js +0 -12
  216. package/node_modules/execa/lib/ipc/array.js +0 -4
  217. package/node_modules/execa/lib/ipc/buffer-messages.js +0 -47
  218. package/node_modules/execa/lib/ipc/forward.js +0 -56
  219. package/node_modules/execa/lib/ipc/get-each.js +0 -89
  220. package/node_modules/execa/lib/ipc/get-one.js +0 -69
  221. package/node_modules/execa/lib/ipc/graceful.js +0 -72
  222. package/node_modules/execa/lib/ipc/incoming.js +0 -79
  223. package/node_modules/execa/lib/ipc/ipc-input.js +0 -44
  224. package/node_modules/execa/lib/ipc/methods.js +0 -49
  225. package/node_modules/execa/lib/ipc/outgoing.js +0 -47
  226. package/node_modules/execa/lib/ipc/reference.js +0 -44
  227. package/node_modules/execa/lib/ipc/send.js +0 -91
  228. package/node_modules/execa/lib/ipc/strict.js +0 -113
  229. package/node_modules/execa/lib/ipc/validation.js +0 -111
  230. package/node_modules/execa/lib/methods/bind.js +0 -23
  231. package/node_modules/execa/lib/methods/command.js +0 -43
  232. package/node_modules/execa/lib/methods/create.js +0 -65
  233. package/node_modules/execa/lib/methods/main-async.js +0 -194
  234. package/node_modules/execa/lib/methods/main-sync.js +0 -163
  235. package/node_modules/execa/lib/methods/node.js +0 -51
  236. package/node_modules/execa/lib/methods/parameters.js +0 -31
  237. package/node_modules/execa/lib/methods/promise.js +0 -15
  238. package/node_modules/execa/lib/methods/script.js +0 -22
  239. package/node_modules/execa/lib/methods/template.js +0 -153
  240. package/node_modules/execa/lib/pipe/abort.js +0 -20
  241. package/node_modules/execa/lib/pipe/pipe-arguments.js +0 -91
  242. package/node_modules/execa/lib/pipe/sequence.js +0 -24
  243. package/node_modules/execa/lib/pipe/setup.js +0 -72
  244. package/node_modules/execa/lib/pipe/streaming.js +0 -51
  245. package/node_modules/execa/lib/pipe/throw.js +0 -58
  246. package/node_modules/execa/lib/resolve/all-async.js +0 -46
  247. package/node_modules/execa/lib/resolve/all-sync.js +0 -33
  248. package/node_modules/execa/lib/resolve/exit-async.js +0 -54
  249. package/node_modules/execa/lib/resolve/exit-sync.js +0 -25
  250. package/node_modules/execa/lib/resolve/stdio.js +0 -47
  251. package/node_modules/execa/lib/resolve/wait-stream.js +0 -96
  252. package/node_modules/execa/lib/resolve/wait-subprocess.js +0 -146
  253. package/node_modules/execa/lib/return/duration.js +0 -8
  254. package/node_modules/execa/lib/return/early-error.js +0 -60
  255. package/node_modules/execa/lib/return/final-error.js +0 -40
  256. package/node_modules/execa/lib/return/message.js +0 -157
  257. package/node_modules/execa/lib/return/reject.js +0 -13
  258. package/node_modules/execa/lib/return/result.js +0 -186
  259. package/node_modules/execa/lib/stdio/direction.js +0 -76
  260. package/node_modules/execa/lib/stdio/duplicate.js +0 -116
  261. package/node_modules/execa/lib/stdio/handle-async.js +0 -52
  262. package/node_modules/execa/lib/stdio/handle-sync.js +0 -57
  263. package/node_modules/execa/lib/stdio/handle.js +0 -214
  264. package/node_modules/execa/lib/stdio/input-option.js +0 -50
  265. package/node_modules/execa/lib/stdio/native.js +0 -106
  266. package/node_modules/execa/lib/stdio/stdio-option.js +0 -60
  267. package/node_modules/execa/lib/stdio/type.js +0 -173
  268. package/node_modules/execa/lib/terminate/cancel.js +0 -20
  269. package/node_modules/execa/lib/terminate/cleanup.js +0 -16
  270. package/node_modules/execa/lib/terminate/graceful.js +0 -71
  271. package/node_modules/execa/lib/terminate/kill.js +0 -93
  272. package/node_modules/execa/lib/terminate/signal.js +0 -70
  273. package/node_modules/execa/lib/terminate/timeout.js +0 -21
  274. package/node_modules/execa/lib/transform/encoding-transform.js +0 -51
  275. package/node_modules/execa/lib/transform/generator.js +0 -107
  276. package/node_modules/execa/lib/transform/normalize.js +0 -111
  277. package/node_modules/execa/lib/transform/object-mode.js +0 -41
  278. package/node_modules/execa/lib/transform/run-async.js +0 -60
  279. package/node_modules/execa/lib/transform/run-sync.js +0 -50
  280. package/node_modules/execa/lib/transform/split.js +0 -110
  281. package/node_modules/execa/lib/transform/validate.js +0 -43
  282. package/node_modules/execa/lib/utils/abort-signal.js +0 -8
  283. package/node_modules/execa/lib/utils/deferred.js +0 -7
  284. package/node_modules/execa/lib/utils/max-listeners.js +0 -14
  285. package/node_modules/execa/lib/utils/standard-stream.js +0 -6
  286. package/node_modules/execa/lib/utils/uint-array.js +0 -69
  287. package/node_modules/execa/lib/verbose/complete.js +0 -24
  288. package/node_modules/execa/lib/verbose/custom.js +0 -26
  289. package/node_modules/execa/lib/verbose/default.js +0 -54
  290. package/node_modules/execa/lib/verbose/error.js +0 -13
  291. package/node_modules/execa/lib/verbose/info.js +0 -39
  292. package/node_modules/execa/lib/verbose/ipc.js +0 -15
  293. package/node_modules/execa/lib/verbose/log.js +0 -54
  294. package/node_modules/execa/lib/verbose/output.js +0 -60
  295. package/node_modules/execa/lib/verbose/start.js +0 -15
  296. package/node_modules/execa/lib/verbose/values.js +0 -33
  297. package/node_modules/execa/license +0 -9
  298. package/node_modules/execa/package.json +0 -105
  299. package/node_modules/execa/readme.md +0 -461
  300. package/node_modules/execa/types/arguments/encoding-option.d.ts +0 -19
  301. package/node_modules/execa/types/arguments/fd-options.d.ts +0 -8
  302. package/node_modules/execa/types/arguments/options.d.ts +0 -400
  303. package/node_modules/execa/types/arguments/specific.d.ts +0 -52
  304. package/node_modules/execa/types/convert.d.ts +0 -58
  305. package/node_modules/execa/types/ipc.d.ts +0 -156
  306. package/node_modules/execa/types/methods/command.d.ts +0 -114
  307. package/node_modules/execa/types/methods/main-async.d.ts +0 -379
  308. package/node_modules/execa/types/methods/main-sync.d.ts +0 -59
  309. package/node_modules/execa/types/methods/node.d.ts +0 -62
  310. package/node_modules/execa/types/methods/script.d.ts +0 -115
  311. package/node_modules/execa/types/methods/template.d.ts +0 -18
  312. package/node_modules/execa/types/pipe.d.ts +0 -58
  313. package/node_modules/execa/types/return/final-error.d.ts +0 -51
  314. package/node_modules/execa/types/return/ignore.d.ts +0 -26
  315. package/node_modules/execa/types/return/result-all.d.ts +0 -30
  316. package/node_modules/execa/types/return/result-ipc.d.ts +0 -27
  317. package/node_modules/execa/types/return/result-stdio.d.ts +0 -17
  318. package/node_modules/execa/types/return/result-stdout.d.ts +0 -50
  319. package/node_modules/execa/types/return/result.d.ts +0 -203
  320. package/node_modules/execa/types/stdio/array.d.ts +0 -16
  321. package/node_modules/execa/types/stdio/direction.d.ts +0 -12
  322. package/node_modules/execa/types/stdio/option.d.ts +0 -40
  323. package/node_modules/execa/types/stdio/type.d.ts +0 -170
  324. package/node_modules/execa/types/subprocess/all.d.ts +0 -17
  325. package/node_modules/execa/types/subprocess/stdio.d.ts +0 -18
  326. package/node_modules/execa/types/subprocess/stdout.d.ts +0 -22
  327. package/node_modules/execa/types/subprocess/subprocess.d.ts +0 -117
  328. package/node_modules/execa/types/transform/normalize.d.ts +0 -57
  329. package/node_modules/execa/types/transform/object-mode.d.ts +0 -21
  330. package/node_modules/execa/types/utils.d.ts +0 -13
  331. package/node_modules/execa/types/verbose.d.ts +0 -98
  332. package/node_modules/expand-template/.travis.yml +0 -6
  333. package/node_modules/expand-template/LICENSE +0 -21
  334. package/node_modules/expand-template/README.md +0 -43
  335. package/node_modules/expand-template/index.js +0 -26
  336. package/node_modules/expand-template/package.json +0 -29
  337. package/node_modules/expand-template/test.js +0 -67
  338. package/node_modules/figures/index.d.ts +0 -279
  339. package/node_modules/figures/index.js +0 -292
  340. package/node_modules/figures/license +0 -9
  341. package/node_modules/figures/package.json +0 -49
  342. package/node_modules/figures/readme.md +0 -337
  343. package/node_modules/file-uri-to-path/.npmignore +0 -1
  344. package/node_modules/file-uri-to-path/.travis.yml +0 -30
  345. package/node_modules/file-uri-to-path/History.md +0 -21
  346. package/node_modules/file-uri-to-path/LICENSE +0 -20
  347. package/node_modules/file-uri-to-path/README.md +0 -74
  348. package/node_modules/file-uri-to-path/index.d.ts +0 -2
  349. package/node_modules/file-uri-to-path/index.js +0 -66
  350. package/node_modules/file-uri-to-path/package.json +0 -32
  351. package/node_modules/file-uri-to-path/test/test.js +0 -24
  352. package/node_modules/file-uri-to-path/test/tests.json +0 -13
  353. package/node_modules/fs-constants/LICENSE +0 -21
  354. package/node_modules/fs-constants/README.md +0 -26
  355. package/node_modules/fs-constants/browser.js +0 -1
  356. package/node_modules/fs-constants/index.js +0 -1
  357. package/node_modules/fs-constants/package.json +0 -19
  358. package/node_modules/get-stream/license +0 -9
  359. package/node_modules/get-stream/package.json +0 -60
  360. package/node_modules/get-stream/readme.md +0 -303
  361. package/node_modules/get-stream/source/array-buffer.js +0 -84
  362. package/node_modules/get-stream/source/array.js +0 -32
  363. package/node_modules/get-stream/source/buffer.js +0 -19
  364. package/node_modules/get-stream/source/contents.js +0 -121
  365. package/node_modules/get-stream/source/exports.js +0 -5
  366. package/node_modules/get-stream/source/index.d.ts +0 -121
  367. package/node_modules/get-stream/source/index.js +0 -13
  368. package/node_modules/get-stream/source/stream.js +0 -65
  369. package/node_modules/get-stream/source/string.js +0 -41
  370. package/node_modules/get-stream/source/utils.js +0 -11
  371. package/node_modules/github-from-package/.travis.yml +0 -4
  372. package/node_modules/github-from-package/LICENSE +0 -18
  373. package/node_modules/github-from-package/example/package.json +0 -8
  374. package/node_modules/github-from-package/example/url.js +0 -3
  375. package/node_modules/github-from-package/index.js +0 -17
  376. package/node_modules/github-from-package/package.json +0 -30
  377. package/node_modules/github-from-package/readme.markdown +0 -53
  378. package/node_modules/github-from-package/test/a.json +0 -8
  379. package/node_modules/github-from-package/test/b.json +0 -5
  380. package/node_modules/github-from-package/test/c.json +0 -5
  381. package/node_modules/github-from-package/test/d.json +0 -7
  382. package/node_modules/github-from-package/test/e.json +0 -5
  383. package/node_modules/github-from-package/test/url.js +0 -19
  384. package/node_modules/human-signals/LICENSE +0 -201
  385. package/node_modules/human-signals/README.md +0 -171
  386. package/node_modules/human-signals/build/src/core.js +0 -273
  387. package/node_modules/human-signals/build/src/main.d.ts +0 -206
  388. package/node_modules/human-signals/build/src/main.js +0 -70
  389. package/node_modules/human-signals/build/src/realtime.js +0 -16
  390. package/node_modules/human-signals/build/src/signals.js +0 -34
  391. package/node_modules/human-signals/package.json +0 -66
  392. package/node_modules/ieee754/LICENSE +0 -11
  393. package/node_modules/ieee754/README.md +0 -51
  394. package/node_modules/ieee754/index.d.ts +0 -10
  395. package/node_modules/ieee754/index.js +0 -85
  396. package/node_modules/ieee754/package.json +0 -52
  397. package/node_modules/inherits/LICENSE +0 -16
  398. package/node_modules/inherits/README.md +0 -42
  399. package/node_modules/inherits/inherits.js +0 -9
  400. package/node_modules/inherits/inherits_browser.js +0 -27
  401. package/node_modules/inherits/package.json +0 -29
  402. package/node_modules/ini/LICENSE +0 -15
  403. package/node_modules/ini/README.md +0 -102
  404. package/node_modules/ini/ini.js +0 -206
  405. package/node_modules/ini/package.json +0 -33
  406. package/node_modules/is-plain-obj/index.d.ts +0 -35
  407. package/node_modules/is-plain-obj/index.js +0 -8
  408. package/node_modules/is-plain-obj/license +0 -9
  409. package/node_modules/is-plain-obj/package.json +0 -41
  410. package/node_modules/is-plain-obj/readme.md +0 -58
  411. package/node_modules/is-stream/index.d.ts +0 -90
  412. package/node_modules/is-stream/index.js +0 -37
  413. package/node_modules/is-stream/license +0 -9
  414. package/node_modules/is-stream/package.json +0 -48
  415. package/node_modules/is-stream/readme.md +0 -57
  416. package/node_modules/is-unicode-supported/index.d.ts +0 -12
  417. package/node_modules/is-unicode-supported/index.js +0 -21
  418. package/node_modules/is-unicode-supported/license +0 -9
  419. package/node_modules/is-unicode-supported/package.json +0 -47
  420. package/node_modules/is-unicode-supported/readme.md +0 -35
  421. package/node_modules/isexe/.npmignore +0 -2
  422. package/node_modules/isexe/LICENSE +0 -15
  423. package/node_modules/isexe/README.md +0 -51
  424. package/node_modules/isexe/index.js +0 -57
  425. package/node_modules/isexe/mode.js +0 -41
  426. package/node_modules/isexe/package.json +0 -31
  427. package/node_modules/isexe/test/basic.js +0 -221
  428. package/node_modules/isexe/windows.js +0 -42
  429. package/node_modules/mimic-response/index.d.ts +0 -17
  430. package/node_modules/mimic-response/index.js +0 -77
  431. package/node_modules/mimic-response/license +0 -9
  432. package/node_modules/mimic-response/package.json +0 -42
  433. package/node_modules/mimic-response/readme.md +0 -78
  434. package/node_modules/minimist/.eslintrc +0 -29
  435. package/node_modules/minimist/.github/FUNDING.yml +0 -12
  436. package/node_modules/minimist/.nycrc +0 -14
  437. package/node_modules/minimist/CHANGELOG.md +0 -298
  438. package/node_modules/minimist/LICENSE +0 -18
  439. package/node_modules/minimist/README.md +0 -121
  440. package/node_modules/minimist/example/parse.js +0 -4
  441. package/node_modules/minimist/index.js +0 -263
  442. package/node_modules/minimist/package.json +0 -75
  443. package/node_modules/minimist/test/all_bool.js +0 -34
  444. package/node_modules/minimist/test/bool.js +0 -177
  445. package/node_modules/minimist/test/dash.js +0 -43
  446. package/node_modules/minimist/test/default_bool.js +0 -37
  447. package/node_modules/minimist/test/dotted.js +0 -24
  448. package/node_modules/minimist/test/kv_short.js +0 -32
  449. package/node_modules/minimist/test/long.js +0 -33
  450. package/node_modules/minimist/test/num.js +0 -38
  451. package/node_modules/minimist/test/parse.js +0 -209
  452. package/node_modules/minimist/test/parse_modified.js +0 -11
  453. package/node_modules/minimist/test/proto.js +0 -64
  454. package/node_modules/minimist/test/short.js +0 -69
  455. package/node_modules/minimist/test/stop_early.js +0 -17
  456. package/node_modules/minimist/test/unknown.js +0 -104
  457. package/node_modules/minimist/test/whitespace.js +0 -10
  458. package/node_modules/mkdirp-classic/LICENSE +0 -21
  459. package/node_modules/mkdirp-classic/README.md +0 -18
  460. package/node_modules/mkdirp-classic/index.js +0 -98
  461. package/node_modules/mkdirp-classic/package.json +0 -18
  462. package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +0 -31
  463. package/node_modules/napi-build-utils/LICENSE +0 -21
  464. package/node_modules/napi-build-utils/README.md +0 -52
  465. package/node_modules/napi-build-utils/index.js +0 -214
  466. package/node_modules/napi-build-utils/index.md +0 -0
  467. package/node_modules/napi-build-utils/package.json +0 -42
  468. package/node_modules/node-abi/LICENSE +0 -21
  469. package/node_modules/node-abi/README.md +0 -54
  470. package/node_modules/node-abi/abi_registry.json +0 -446
  471. package/node_modules/node-abi/index.js +0 -179
  472. package/node_modules/node-abi/package.json +0 -45
  473. package/node_modules/npm-run-path/index.d.ts +0 -90
  474. package/node_modules/npm-run-path/index.js +0 -55
  475. package/node_modules/npm-run-path/license +0 -9
  476. package/node_modules/npm-run-path/node_modules/path-key/index.d.ts +0 -31
  477. package/node_modules/npm-run-path/node_modules/path-key/index.js +0 -12
  478. package/node_modules/npm-run-path/node_modules/path-key/license +0 -9
  479. package/node_modules/npm-run-path/node_modules/path-key/package.json +0 -41
  480. package/node_modules/npm-run-path/node_modules/path-key/readme.md +0 -57
  481. package/node_modules/npm-run-path/package.json +0 -52
  482. package/node_modules/npm-run-path/readme.md +0 -104
  483. package/node_modules/once/LICENSE +0 -15
  484. package/node_modules/once/README.md +0 -79
  485. package/node_modules/once/once.js +0 -42
  486. package/node_modules/once/package.json +0 -33
  487. package/node_modules/parse-ms/index.d.ts +0 -30
  488. package/node_modules/parse-ms/index.js +0 -45
  489. package/node_modules/parse-ms/license +0 -9
  490. package/node_modules/parse-ms/package.json +0 -47
  491. package/node_modules/parse-ms/readme.md +0 -46
  492. package/node_modules/path-key/index.d.ts +0 -40
  493. package/node_modules/path-key/index.js +0 -16
  494. package/node_modules/path-key/license +0 -9
  495. package/node_modules/path-key/package.json +0 -39
  496. package/node_modules/path-key/readme.md +0 -61
  497. package/node_modules/prebuild-install/CHANGELOG.md +0 -131
  498. package/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
  499. package/node_modules/prebuild-install/LICENSE +0 -21
  500. package/node_modules/prebuild-install/README.md +0 -163
  501. package/node_modules/prebuild-install/asset.js +0 -44
  502. package/node_modules/prebuild-install/bin.js +0 -78
  503. package/node_modules/prebuild-install/download.js +0 -142
  504. package/node_modules/prebuild-install/error.js +0 -14
  505. package/node_modules/prebuild-install/help.txt +0 -16
  506. package/node_modules/prebuild-install/index.js +0 -1
  507. package/node_modules/prebuild-install/log.js +0 -33
  508. package/node_modules/prebuild-install/package.json +0 -67
  509. package/node_modules/prebuild-install/proxy.js +0 -35
  510. package/node_modules/prebuild-install/rc.js +0 -64
  511. package/node_modules/prebuild-install/util.js +0 -143
  512. package/node_modules/pretty-ms/index.d.ts +0 -157
  513. package/node_modules/pretty-ms/index.js +0 -149
  514. package/node_modules/pretty-ms/license +0 -9
  515. package/node_modules/pretty-ms/package.json +0 -55
  516. package/node_modules/pretty-ms/readme.md +0 -179
  517. package/node_modules/pump/.github/FUNDING.yml +0 -2
  518. package/node_modules/pump/.travis.yml +0 -5
  519. package/node_modules/pump/LICENSE +0 -21
  520. package/node_modules/pump/README.md +0 -74
  521. package/node_modules/pump/SECURITY.md +0 -5
  522. package/node_modules/pump/empty.js +0 -1
  523. package/node_modules/pump/index.js +0 -86
  524. package/node_modules/pump/package.json +0 -30
  525. package/node_modules/pump/test-browser.js +0 -66
  526. package/node_modules/pump/test-node.js +0 -53
  527. package/node_modules/rc/LICENSE.APACHE2 +0 -15
  528. package/node_modules/rc/LICENSE.BSD +0 -26
  529. package/node_modules/rc/LICENSE.MIT +0 -24
  530. package/node_modules/rc/README.md +0 -227
  531. package/node_modules/rc/browser.js +0 -7
  532. package/node_modules/rc/cli.js +0 -4
  533. package/node_modules/rc/index.js +0 -53
  534. package/node_modules/rc/lib/utils.js +0 -104
  535. package/node_modules/rc/package.json +0 -29
  536. package/node_modules/rc/test/ini.js +0 -16
  537. package/node_modules/rc/test/nested-env-vars.js +0 -50
  538. package/node_modules/rc/test/test.js +0 -59
  539. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  540. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  541. package/node_modules/readable-stream/LICENSE +0 -47
  542. package/node_modules/readable-stream/README.md +0 -106
  543. package/node_modules/readable-stream/errors-browser.js +0 -127
  544. package/node_modules/readable-stream/errors.js +0 -116
  545. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  546. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  547. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  548. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  549. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  550. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  551. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  552. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  553. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  554. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  555. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  556. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  557. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  558. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  559. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  560. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  561. package/node_modules/readable-stream/package.json +0 -68
  562. package/node_modules/readable-stream/readable-browser.js +0 -9
  563. package/node_modules/readable-stream/readable.js +0 -16
  564. package/node_modules/safe-buffer/LICENSE +0 -21
  565. package/node_modules/safe-buffer/README.md +0 -584
  566. package/node_modules/safe-buffer/index.d.ts +0 -187
  567. package/node_modules/safe-buffer/index.js +0 -65
  568. package/node_modules/safe-buffer/package.json +0 -51
  569. package/node_modules/semver/LICENSE +0 -15
  570. package/node_modules/semver/README.md +0 -665
  571. package/node_modules/semver/bin/semver.js +0 -191
  572. package/node_modules/semver/classes/comparator.js +0 -143
  573. package/node_modules/semver/classes/index.js +0 -7
  574. package/node_modules/semver/classes/range.js +0 -557
  575. package/node_modules/semver/classes/semver.js +0 -333
  576. package/node_modules/semver/functions/clean.js +0 -8
  577. package/node_modules/semver/functions/cmp.js +0 -54
  578. package/node_modules/semver/functions/coerce.js +0 -62
  579. package/node_modules/semver/functions/compare-build.js +0 -9
  580. package/node_modules/semver/functions/compare-loose.js +0 -5
  581. package/node_modules/semver/functions/compare.js +0 -7
  582. package/node_modules/semver/functions/diff.js +0 -60
  583. package/node_modules/semver/functions/eq.js +0 -5
  584. package/node_modules/semver/functions/gt.js +0 -5
  585. package/node_modules/semver/functions/gte.js +0 -5
  586. package/node_modules/semver/functions/inc.js +0 -21
  587. package/node_modules/semver/functions/lt.js +0 -5
  588. package/node_modules/semver/functions/lte.js +0 -5
  589. package/node_modules/semver/functions/major.js +0 -5
  590. package/node_modules/semver/functions/minor.js +0 -5
  591. package/node_modules/semver/functions/neq.js +0 -5
  592. package/node_modules/semver/functions/parse.js +0 -18
  593. package/node_modules/semver/functions/patch.js +0 -5
  594. package/node_modules/semver/functions/prerelease.js +0 -8
  595. package/node_modules/semver/functions/rcompare.js +0 -5
  596. package/node_modules/semver/functions/rsort.js +0 -5
  597. package/node_modules/semver/functions/satisfies.js +0 -12
  598. package/node_modules/semver/functions/sort.js +0 -5
  599. package/node_modules/semver/functions/valid.js +0 -8
  600. package/node_modules/semver/index.js +0 -91
  601. package/node_modules/semver/internal/constants.js +0 -37
  602. package/node_modules/semver/internal/debug.js +0 -11
  603. package/node_modules/semver/internal/identifiers.js +0 -29
  604. package/node_modules/semver/internal/lrucache.js +0 -42
  605. package/node_modules/semver/internal/parse-options.js +0 -17
  606. package/node_modules/semver/internal/re.js +0 -223
  607. package/node_modules/semver/package.json +0 -78
  608. package/node_modules/semver/preload.js +0 -4
  609. package/node_modules/semver/range.bnf +0 -16
  610. package/node_modules/semver/ranges/gtr.js +0 -6
  611. package/node_modules/semver/ranges/intersects.js +0 -9
  612. package/node_modules/semver/ranges/ltr.js +0 -6
  613. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  614. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  615. package/node_modules/semver/ranges/min-version.js +0 -63
  616. package/node_modules/semver/ranges/outside.js +0 -82
  617. package/node_modules/semver/ranges/simplify.js +0 -49
  618. package/node_modules/semver/ranges/subset.js +0 -249
  619. package/node_modules/semver/ranges/to-comparators.js +0 -10
  620. package/node_modules/semver/ranges/valid.js +0 -13
  621. package/node_modules/shebang-command/index.js +0 -19
  622. package/node_modules/shebang-command/license +0 -9
  623. package/node_modules/shebang-command/package.json +0 -34
  624. package/node_modules/shebang-command/readme.md +0 -34
  625. package/node_modules/shebang-regex/index.d.ts +0 -22
  626. package/node_modules/shebang-regex/index.js +0 -2
  627. package/node_modules/shebang-regex/license +0 -9
  628. package/node_modules/shebang-regex/package.json +0 -35
  629. package/node_modules/shebang-regex/readme.md +0 -33
  630. package/node_modules/signal-exit/LICENSE.txt +0 -16
  631. package/node_modules/signal-exit/README.md +0 -74
  632. package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  633. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  634. package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  635. package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  636. package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  637. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  638. package/node_modules/signal-exit/dist/cjs/index.js +0 -279
  639. package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  640. package/node_modules/signal-exit/dist/cjs/package.json +0 -3
  641. package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  642. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  643. package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  644. package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  645. package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  646. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  647. package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  648. package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  649. package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  650. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  651. package/node_modules/signal-exit/dist/mjs/index.js +0 -275
  652. package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  653. package/node_modules/signal-exit/dist/mjs/package.json +0 -3
  654. package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  655. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  656. package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  657. package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  658. package/node_modules/signal-exit/package.json +0 -106
  659. package/node_modules/simple-concat/.travis.yml +0 -3
  660. package/node_modules/simple-concat/LICENSE +0 -20
  661. package/node_modules/simple-concat/README.md +0 -44
  662. package/node_modules/simple-concat/index.js +0 -15
  663. package/node_modules/simple-concat/package.json +0 -47
  664. package/node_modules/simple-concat/test/basic.js +0 -41
  665. package/node_modules/simple-get/.github/dependabot.yml +0 -15
  666. package/node_modules/simple-get/.github/workflows/ci.yml +0 -23
  667. package/node_modules/simple-get/LICENSE +0 -20
  668. package/node_modules/simple-get/README.md +0 -333
  669. package/node_modules/simple-get/index.js +0 -108
  670. package/node_modules/simple-get/package.json +0 -67
  671. package/node_modules/sqlite-vec/README.md +0 -1
  672. package/node_modules/sqlite-vec/index.cjs +0 -46
  673. package/node_modules/sqlite-vec/index.d.ts +0 -17
  674. package/node_modules/sqlite-vec/index.mjs +0 -47
  675. package/node_modules/sqlite-vec/package.json +0 -1
  676. package/node_modules/sqlite-vec-linux-x64/README.md +0 -1
  677. package/node_modules/sqlite-vec-linux-x64/package.json +0 -1
  678. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  679. package/node_modules/string_decoder/LICENSE +0 -48
  680. package/node_modules/string_decoder/README.md +0 -47
  681. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  682. package/node_modules/string_decoder/package.json +0 -34
  683. package/node_modules/strip-final-newline/index.d.ts +0 -18
  684. package/node_modules/strip-final-newline/index.js +0 -26
  685. package/node_modules/strip-final-newline/license +0 -9
  686. package/node_modules/strip-final-newline/package.json +0 -49
  687. package/node_modules/strip-final-newline/readme.md +0 -34
  688. package/node_modules/strip-json-comments/index.js +0 -70
  689. package/node_modules/strip-json-comments/license +0 -21
  690. package/node_modules/strip-json-comments/package.json +0 -42
  691. package/node_modules/strip-json-comments/readme.md +0 -64
  692. package/node_modules/tar-fs/.travis.yml +0 -6
  693. package/node_modules/tar-fs/LICENSE +0 -21
  694. package/node_modules/tar-fs/README.md +0 -165
  695. package/node_modules/tar-fs/index.js +0 -363
  696. package/node_modules/tar-fs/package.json +0 -41
  697. package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  698. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  699. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  700. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  701. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  702. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  703. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  704. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  705. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  706. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  707. package/node_modules/tar-fs/test/index.js +0 -346
  708. package/node_modules/tar-stream/LICENSE +0 -21
  709. package/node_modules/tar-stream/README.md +0 -168
  710. package/node_modules/tar-stream/extract.js +0 -257
  711. package/node_modules/tar-stream/headers.js +0 -295
  712. package/node_modules/tar-stream/index.js +0 -2
  713. package/node_modules/tar-stream/pack.js +0 -255
  714. package/node_modules/tar-stream/package.json +0 -58
  715. package/node_modules/tar-stream/sandbox.js +0 -11
  716. package/node_modules/tunnel-agent/LICENSE +0 -55
  717. package/node_modules/tunnel-agent/README.md +0 -4
  718. package/node_modules/tunnel-agent/index.js +0 -244
  719. package/node_modules/tunnel-agent/package.json +0 -22
  720. package/node_modules/unicorn-magic/default.d.ts +0 -13
  721. package/node_modules/unicorn-magic/default.js +0 -14
  722. package/node_modules/unicorn-magic/license +0 -9
  723. package/node_modules/unicorn-magic/node.d.ts +0 -125
  724. package/node_modules/unicorn-magic/node.js +0 -49
  725. package/node_modules/unicorn-magic/package.json +0 -62
  726. package/node_modules/unicorn-magic/readme.md +0 -25
  727. package/node_modules/util-deprecate/History.md +0 -16
  728. package/node_modules/util-deprecate/LICENSE +0 -24
  729. package/node_modules/util-deprecate/README.md +0 -53
  730. package/node_modules/util-deprecate/browser.js +0 -67
  731. package/node_modules/util-deprecate/node.js +0 -6
  732. package/node_modules/util-deprecate/package.json +0 -27
  733. package/node_modules/which/CHANGELOG.md +0 -166
  734. package/node_modules/which/LICENSE +0 -15
  735. package/node_modules/which/README.md +0 -54
  736. package/node_modules/which/bin/node-which +0 -52
  737. package/node_modules/which/package.json +0 -43
  738. package/node_modules/which/which.js +0 -125
  739. package/node_modules/wrappy/LICENSE +0 -15
  740. package/node_modules/wrappy/README.md +0 -36
  741. package/node_modules/wrappy/package.json +0 -29
  742. package/node_modules/wrappy/wrappy.js +0 -33
  743. package/node_modules/yoctocolors/base.d.ts +0 -47
  744. package/node_modules/yoctocolors/base.js +0 -94
  745. package/node_modules/yoctocolors/index.d.ts +0 -2
  746. package/node_modules/yoctocolors/index.js +0 -2
  747. package/node_modules/yoctocolors/license +0 -9
  748. package/node_modules/yoctocolors/package.json +0 -69
  749. package/node_modules/yoctocolors/readme.md +0 -138
package/README.md CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  ---
25
25
 
26
- > **v3.4.0 released** — Cache-friendly prompts (epic KJC-PCS-0057 / Phase 1 closed). Every Karajan prompt is now split into a stable block (identical across iterations and HUs, rendered first so automatic prefix caching hits on it) and a volatile tail; on Claude the stable block ships via `--append-system-prompt` so the CLI's cache breakpoints serve it from cache on every call. Real data: cold-run cache_pct jumps **47.2% → 99.6%** and coder cost drops **76%** ($0.61 → $0.14 per HU). A prefix-stability regression suite freezes the contract in CI. Drop-in upgrade from v3.3.0. Full notes in [CHANGELOG.md](CHANGELOG.md).
26
+ > **v3.4.2 released** — Hotfix: `npm install karajan-code@3.4.1` crashed at `kj --version` because the bundled `@karajan/core` dragged in `sqlite-vec` (which ships `files: []`) without its entry point. `@karajan/core`'s runtime deps are now `peerDependencies`, so they resolve complete from the consumer's top-level install. Clean install verified end-to-end. Full notes in [CHANGELOG.md](CHANGELOG.md).
27
27
 
28
28
  You describe what you want to build. Karajan orchestrates multiple AI agents to plan it, implement it, test it, review it with SonarQube, and iterate. No babysitting required.
29
29
 
@@ -27,11 +27,22 @@
27
27
  "scripts": {
28
28
  "test": "vitest run"
29
29
  },
30
- "dependencies": {
30
+ "peerDependencies": {
31
31
  "better-sqlite3": "^12.10.0",
32
32
  "execa": "^9.6.0",
33
33
  "sqlite-vec": "^0.1.9"
34
34
  },
35
+ "peerDependenciesMeta": {
36
+ "better-sqlite3": {
37
+ "optional": true
38
+ },
39
+ "execa": {
40
+ "optional": true
41
+ },
42
+ "sqlite-vec": {
43
+ "optional": true
44
+ }
45
+ },
35
46
  "devDependencies": {
36
47
  "vitest": "^4.0.0"
37
48
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karajan-code",
3
- "version": "3.4.0",
3
+ "version": "3.4.2",
4
4
  "description": "Local multi-agent coding orchestrator with TDD, SonarQube, and code review pipeline",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0",
@@ -71,7 +71,9 @@
71
71
  "typecheck": "npx -p typescript@5 tsc --noEmit -p tsconfig.json",
72
72
  "validate": "npm run lint && npm run lint:syntax && npm test",
73
73
  "mcp": "node src/mcp/server.js",
74
- "audit:test-diet": "node scripts/audit-test-diet.mjs"
74
+ "audit:test-diet": "node scripts/audit-test-diet.mjs",
75
+ "verify-pack": "node scripts/verify-pack.mjs",
76
+ "prepublishOnly": "node scripts/verify-pack.mjs"
75
77
  },
76
78
  "simple-git-hooks": {
77
79
  "pre-commit": "npx lint-staged"
@@ -1,5 +1,26 @@
1
1
  import { Router } from 'express';
2
2
  import fs from 'node:fs';
3
+ import fsp from 'node:fs/promises';
4
+
5
+ /** Async existence probe (KJC-TSK-0539 — no sync fs in handlers). */
6
+ const pathExists = (p) => fsp.access(p).then(() => true, () => false);
7
+
8
+ /**
9
+ * mtime-keyed cache for parsed plan JSON (KJC-TSK-0539). The plan scans
10
+ * used to re-read and re-parse every plan file on EVERY request; with N
11
+ * plans and the board polling, that was O(N) parses per poll. The cache
12
+ * serves the parsed object while the file's mtime is unchanged and
13
+ * re-reads transparently when kj writes the plan.
14
+ */
15
+ const planFileCache = new Map();
16
+ export async function readPlanCached(p) {
17
+ const { mtimeMs } = await fsp.stat(p);
18
+ const hit = planFileCache.get(p);
19
+ if (hit && hit.mtimeMs === mtimeMs) return hit.plan;
20
+ const plan = JSON.parse(await fsp.readFile(p, 'utf8'));
21
+ planFileCache.set(p, { mtimeMs, plan });
22
+ return plan;
23
+ }
3
24
  import os from 'node:os';
4
25
  import path from 'node:path';
5
26
  import { spawn as spawnChild } from 'node:child_process';
@@ -74,10 +95,10 @@ function huStoriesDir() {
74
95
  /**
75
96
  * Best-effort removal of the hu-stories/<id>/ directory.
76
97
  */
77
- function removeBatchDir(batchId) {
98
+ async function removeBatchDir(batchId) {
78
99
  try {
79
100
  const dir = path.join(huStoriesDir(), batchId);
80
- fs.rmSync(dir, { recursive: true, force: true });
101
+ await fsp.rm(dir, { recursive: true, force: true });
81
102
  return true;
82
103
  } catch {
83
104
  return false;
@@ -207,10 +228,10 @@ router.get('/projects/:id/preflight', async (req, res) => {
207
228
  try {
208
229
  outer: for (const root of getHuBoardPlansDirs()) {
209
230
  const plansDir = path.join(root, projectId);
210
- if (!fs.existsSync(plansDir)) continue;
211
- for (const f of fs.readdirSync(plansDir).filter((x) => x.endsWith('.json'))) {
231
+ if (!(await pathExists(plansDir))) continue;
232
+ for (const f of (await fsp.readdir(plansDir)).filter((x) => x.endsWith('.json'))) {
212
233
  try {
213
- const plan = JSON.parse(fs.readFileSync(path.join(plansDir, f), 'utf8'));
234
+ const plan = await readPlanCached(path.join(plansDir, f));
214
235
  if (plan?.projectDir) { projectDir = plan.projectDir; break outer; }
215
236
  } catch { /* try next file */ }
216
237
  }
@@ -231,7 +252,7 @@ router.get('/projects/:id/preflight', async (req, res) => {
231
252
  * failed · 15 min" banner. Plans that haven't finished yet have a
232
253
  * null outcome — the front handles that by hiding the banner.
233
254
  */
234
- router.get('/projects/:id/plans-outcome', (req, res) => {
255
+ router.get('/projects/:id/plans-outcome', async (req, res) => {
235
256
  try {
236
257
  const projectId = req.params.id;
237
258
  // KJC-BUG-0059 (v2.19.3): scan canonical + legacy roots so users
@@ -239,10 +260,10 @@ router.get('/projects/:id/plans-outcome', (req, res) => {
239
260
  const out = [];
240
261
  for (const root of getHuBoardPlansDirs()) {
241
262
  const plansDir = path.join(root, projectId);
242
- if (!fs.existsSync(plansDir)) continue;
243
- for (const f of fs.readdirSync(plansDir).filter(n => n.endsWith('.json'))) {
263
+ if (!(await pathExists(plansDir))) continue;
264
+ for (const f of (await fsp.readdir(plansDir)).filter(n => n.endsWith('.json'))) {
244
265
  try {
245
- const plan = JSON.parse(fs.readFileSync(path.join(plansDir, f), 'utf8'));
266
+ const plan = await readPlanCached(path.join(plansDir, f));
246
267
  if (plan?.version !== 2) continue;
247
268
  out.push({
248
269
  planId: plan.planId,
@@ -363,7 +384,7 @@ router.get('/sessions', (_req, res) => {
363
384
  * Also removes the hu-stories/<id>/ directory from disk so the next sync
364
385
  * does not re-import it.
365
386
  */
366
- router.delete('/projects/:id', (req, res) => {
387
+ router.delete('/projects/:id', async (req, res) => {
367
388
  try {
368
389
  const id = req.params.id;
369
390
  // Gather filesystem paths to remove BEFORE deleting DB rows so we
@@ -397,7 +418,7 @@ router.delete('/projects/:id', (req, res) => {
397
418
  // Best-effort fs cleanup; failure does NOT undo the tombstones.
398
419
  let pathsRemoved = 0;
399
420
  for (const p of fsPaths) {
400
- try { fs.rmSync(p, { recursive: true, force: true }); pathsRemoved++; } catch { /* */ }
421
+ try { await fsp.rm(p, { recursive: true, force: true }); pathsRemoved++; } catch { /* */ }
401
422
  }
402
423
  res.json({ deleted: true, pathsRemoved, tombstoned: 1 + storyIds.length + sessionIds.length });
403
424
  } catch (err) {
@@ -411,7 +432,7 @@ router.delete('/projects/:id', (req, res) => {
411
432
  * prompt id so a stale chokidar event can't recreate it, and emits a
412
433
  * `prompt:resolved` event so all open boards close the modal.
413
434
  */
414
- router.delete('/prompts/:promptId', (req, res) => {
435
+ router.delete('/prompts/:promptId', async (req, res) => {
415
436
  try {
416
437
  const promptId = req.params.promptId;
417
438
  const dir = promptsDir();
@@ -419,7 +440,7 @@ router.delete('/prompts/:promptId', (req, res) => {
419
440
  const answer = path.join(dir, `${promptId}.answer.json`);
420
441
  let removed = 0;
421
442
  for (const p of [main, answer]) {
422
- try { fs.unlinkSync(p); removed++; } catch { /* missing is fine */ }
443
+ try { await fsp.unlink(p); removed++; } catch { /* missing is fine */ }
423
444
  }
424
445
  addTombstone('prompt', promptId, { source: 'api', fsPaths: [main, answer] });
425
446
  // Re-use the same event the runner emits when answered, so any open
@@ -439,7 +460,7 @@ router.delete('/prompts/:promptId', (req, res) => {
439
460
  * it. Pre-tombstones this endpoint was a DB-only soft hide that the next
440
461
  * chokidar event undid silently.
441
462
  */
442
- router.delete('/stories/:id', (req, res) => {
463
+ router.delete('/stories/:id', async (req, res) => {
443
464
  try {
444
465
  const id = req.params.id;
445
466
  const dir = path.join(huStoriesDir(), id);
@@ -447,7 +468,7 @@ router.delete('/stories/:id', (req, res) => {
447
468
  if (!ok) return res.status(404).json({ error: 'Story not found' });
448
469
  addTombstone('story', id, { source: 'api', fsPaths: [dir] });
449
470
  let dirRemoved = false;
450
- try { fs.rmSync(dir, { recursive: true, force: true }); dirRemoved = true; } catch { /* */ }
471
+ try { await fsp.rm(dir, { recursive: true, force: true }); dirRemoved = true; } catch { /* */ }
451
472
  res.json({ deleted: true, dirRemoved });
452
473
  } catch (err) {
453
474
  res.status(500).json({ error: err.message });
@@ -459,7 +480,7 @@ router.delete('/stories/:id', (req, res) => {
459
480
  *
460
481
  * Tombstones + removes `~/.karajan/sessions/<id>/` (KJC-TSK-0380).
461
482
  */
462
- router.delete('/sessions/:id', (req, res) => {
483
+ router.delete('/sessions/:id', async (req, res) => {
463
484
  try {
464
485
  const id = req.params.id;
465
486
  const dir = path.join(getKjHome(), 'sessions', id);
@@ -467,7 +488,7 @@ router.delete('/sessions/:id', (req, res) => {
467
488
  if (!ok) return res.status(404).json({ error: 'Session not found' });
468
489
  addTombstone('session', id, { source: 'api', fsPaths: [dir] });
469
490
  let dirRemoved = false;
470
- try { fs.rmSync(dir, { recursive: true, force: true }); dirRemoved = true; } catch { /* */ }
491
+ try { await fsp.rm(dir, { recursive: true, force: true }); dirRemoved = true; } catch { /* */ }
471
492
  res.json({ deleted: true, dirRemoved });
472
493
  } catch (err) {
473
494
  res.status(500).json({ error: err.message });
@@ -482,7 +503,7 @@ router.delete('/sessions/:id', (req, res) => {
482
503
  * delete the project: a project can have multiple plans, deleting one
483
504
  * plan only removes that plan's HUs from the board.
484
505
  */
485
- router.delete('/plans/:planId', (req, res) => {
506
+ router.delete('/plans/:planId', async (req, res) => {
486
507
  try {
487
508
  const planId = req.params.planId;
488
509
  // Locate the plan file by scanning both canonical and legacy plans
@@ -492,15 +513,15 @@ router.delete('/plans/:planId', (req, res) => {
492
513
  let foundPath = null;
493
514
  try {
494
515
  outer: for (const plansRoot of getHuBoardPlansDirs()) {
495
- if (!fs.existsSync(plansRoot)) continue;
496
- for (const projSlug of fs.readdirSync(plansRoot)) {
516
+ if (!(await pathExists(plansRoot))) continue;
517
+ for (const projSlug of await fsp.readdir(plansRoot)) {
497
518
  const candidate = path.join(plansRoot, projSlug, `plan-${planId}.json`);
498
- if (fs.existsSync(candidate)) { foundPath = candidate; break outer; }
519
+ if (await pathExists(candidate)) { foundPath = candidate; break outer; }
499
520
  }
500
521
  }
501
522
  } catch { /* plansRoot missing */ }
502
523
  addTombstone('plan', planId, { source: 'api', fsPaths: foundPath ? [foundPath] : [] });
503
- if (foundPath) { try { fs.unlinkSync(foundPath); } catch { /* */ } }
524
+ if (foundPath) { try { await fsp.unlink(foundPath); } catch { /* */ } }
504
525
  res.json({ deleted: true, fileRemoved: !!foundPath });
505
526
  } catch (err) {
506
527
  res.status(500).json({ error: err.message });
@@ -770,11 +791,11 @@ function promptsDir() {
770
791
  // Solomon escalation; anything older is a crashed runner.
771
792
  const PROMPT_ZOMBIE_TTL_MS = 30 * 60 * 1000;
772
793
 
773
- router.get('/prompts', (_req, res) => {
794
+ router.get('/prompts', async (_req, res) => {
774
795
  try {
775
796
  const dir = promptsDir();
776
- if (!fs.existsSync(dir)) return res.json([]);
777
- const entries = fs.readdirSync(dir);
797
+ if (!(await pathExists(dir))) return res.json([]);
798
+ const entries = await fsp.readdir(dir);
778
799
  const result = [];
779
800
  const now = Date.now();
780
801
  for (const name of entries) {
@@ -784,21 +805,21 @@ router.get('/prompts', (_req, res) => {
784
805
  const answerPath = path.join(dir, `${promptId}.answer.json`);
785
806
  // KJC-TSK-0380 — skip tombstoned prompts and clean their files.
786
807
  if (isTombstonedFn('prompt', promptId)) {
787
- try { fs.unlinkSync(mainPath); } catch { /* */ }
788
- try { fs.unlinkSync(answerPath); } catch { /* */ }
808
+ try { await fsp.unlink(mainPath); } catch { /* */ }
809
+ try { await fsp.unlink(answerPath); } catch { /* */ }
789
810
  continue;
790
811
  }
791
812
  let parsed;
792
813
  try {
793
- parsed = JSON.parse(fs.readFileSync(mainPath, 'utf-8'));
814
+ parsed = JSON.parse(await fsp.readFile(mainPath, 'utf-8'));
794
815
  } catch { continue; /* malformed — skip */ }
795
816
  // KJC-BUG-0038: zombie detection. Prefer parsed.createdAt; fall back
796
817
  // to mtime if the runner skipped the timestamp (older formats).
797
818
  const createdMs = Date.parse(parsed?.createdAt || '');
798
- const ageRef = Number.isFinite(createdMs) ? createdMs : safeMtime(mainPath);
819
+ const ageRef = Number.isFinite(createdMs) ? createdMs : await safeMtime(mainPath);
799
820
  if (ageRef && (now - ageRef) > PROMPT_ZOMBIE_TTL_MS) {
800
- try { fs.unlinkSync(mainPath); } catch { /* */ }
801
- try { fs.unlinkSync(answerPath); } catch { /* */ }
821
+ try { await fsp.unlink(mainPath); } catch { /* */ }
822
+ try { await fsp.unlink(answerPath); } catch { /* */ }
802
823
  addTombstone('prompt', promptId, { source: 'zombie-ttl', fsPaths: [mainPath, answerPath] });
803
824
  continue;
804
825
  }
@@ -811,8 +832,8 @@ router.get('/prompts', (_req, res) => {
811
832
  }
812
833
  });
813
834
 
814
- function safeMtime(p) {
815
- try { return fs.statSync(p).mtimeMs; } catch { return 0; }
835
+ async function safeMtime(p) {
836
+ try { return (await fsp.stat(p)).mtimeMs; } catch { return 0; }
816
837
  }
817
838
 
818
839
  /**
@@ -821,20 +842,20 @@ function safeMtime(p) {
821
842
  * it, deletes both files, and resolves askQuestion. An answer of
822
843
  * "stop" tells the runner to abort the session.
823
844
  */
824
- router.post('/prompts/:promptId/answer', (req, res) => {
845
+ router.post('/prompts/:promptId/answer', async (req, res) => {
825
846
  try {
826
847
  const { answer } = req.body || {};
827
848
  if (typeof answer !== 'string') {
828
849
  return res.status(400).json({ error: 'Body must contain an "answer" string' });
829
850
  }
830
851
  const dir = promptsDir();
831
- fs.mkdirSync(dir, { recursive: true });
852
+ await fsp.mkdir(dir, { recursive: true });
832
853
  const promptPath = path.join(dir, `${req.params.promptId}.json`);
833
- if (!fs.existsSync(promptPath)) {
854
+ if (!(await pathExists(promptPath))) {
834
855
  return res.status(404).json({ error: `Prompt not found: ${req.params.promptId}` });
835
856
  }
836
857
  const answerPath = path.join(dir, `${req.params.promptId}.answer.json`);
837
- fs.writeFileSync(
858
+ await fsp.writeFile(
838
859
  answerPath,
839
860
  JSON.stringify({ answer, answeredAt: new Date().toISOString() }, null, 2),
840
861
  'utf-8'
@@ -912,14 +933,14 @@ router.get('/events', (req, res) => {
912
933
  * Path is the same one that `runPlan` wrote to:
913
934
  * ~/.karajan/hu-board-runs/<planId>.log (honours KJ_HOME in tests).
914
935
  */
915
- router.get('/plans/:planId/log', (req, res) => {
936
+ router.get('/plans/:planId/log', async (req, res) => {
916
937
  try {
917
938
  const runsDir = getHuBoardRunsDir(); // KJC-TSK-0421
918
939
  const logPath = path.join(runsDir, `${req.params.planId}.log`);
919
- if (!fs.existsSync(logPath)) {
940
+ if (!(await pathExists(logPath))) {
920
941
  return res.json({ exists: false, size: 0, content: '' });
921
942
  }
922
- const stat = fs.statSync(logPath);
943
+ const stat = await fsp.stat(logPath);
923
944
  const offset = Math.max(0, Math.min(stat.size, Number(req.query.offset) || 0));
924
945
  // Cap per-request read to 1 MiB so a huge log can't blow up the
925
946
  // response. The client will keep polling and catch up.
@@ -927,13 +948,13 @@ router.get('/plans/:planId/log', (req, res) => {
927
948
  const length = Math.min(MAX_READ, stat.size - offset);
928
949
  let content = '';
929
950
  if (length > 0) {
930
- const fd = fs.openSync(logPath, 'r');
951
+ const fh = await fsp.open(logPath, 'r');
931
952
  try {
932
953
  const buf = Buffer.alloc(length);
933
- fs.readSync(fd, buf, 0, length, offset);
954
+ await fh.read(buf, 0, length, offset);
934
955
  content = buf.toString('utf-8');
935
956
  } finally {
936
- fs.closeSync(fd);
957
+ await fh.close();
937
958
  }
938
959
  }
939
960
  res.json({ exists: true, size: stat.size, content });
@@ -1230,26 +1251,26 @@ router.post('/runs/:planId/stop', async (req, res) => {
1230
1251
  }
1231
1252
  });
1232
1253
 
1233
- router.get('/runs/:commandId/log', (req, res) => {
1254
+ router.get('/runs/:commandId/log', async (req, res) => {
1234
1255
  try {
1235
1256
  const runsDir = getHuBoardRunsDir(); // KJC-TSK-0421
1236
1257
  const logPath = path.join(runsDir, `${req.params.commandId}.log`);
1237
- if (!fs.existsSync(logPath)) {
1258
+ if (!(await pathExists(logPath))) {
1238
1259
  return res.json({ exists: false, size: 0, content: '' });
1239
1260
  }
1240
- const stat = fs.statSync(logPath);
1261
+ const stat = await fsp.stat(logPath);
1241
1262
  const offset = Math.max(0, Math.min(stat.size, Number(req.query.offset) || 0));
1242
1263
  const MAX_READ = 1024 * 1024;
1243
1264
  const length = Math.min(MAX_READ, stat.size - offset);
1244
1265
  let content = '';
1245
1266
  if (length > 0) {
1246
- const fd = fs.openSync(logPath, 'r');
1267
+ const fh = await fsp.open(logPath, 'r');
1247
1268
  try {
1248
1269
  const buf = Buffer.alloc(length);
1249
- fs.readSync(fd, buf, 0, length, offset);
1270
+ await fh.read(buf, 0, length, offset);
1250
1271
  content = buf.toString('utf-8');
1251
1272
  } finally {
1252
- fs.closeSync(fd);
1273
+ await fh.close();
1253
1274
  }
1254
1275
  }
1255
1276
  res.json({ exists: true, size: stat.size, content });
@@ -130,7 +130,7 @@ export function appendZombieCheckpoint(existingJson, reason, isoTimestamp) {
130
130
  * @returns {string}
131
131
  */
132
132
  import { getKjHome } from "./db.js";
133
- export function getSessionsDir() {
133
+ function getSessionsDir() {
134
134
  return path.join(getKjHome(), "sessions");
135
135
  }
136
136
 
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Pre-publish tarball smoke gate (KJC-TSK-0553).
4
+ *
5
+ * WHY: the test suite runs against the linked workspace, where
6
+ * `@karajan/core` and its deps resolve via symlink — so a broken
7
+ * PUBLISHED artifact (bundleDependencies dragging in sqlite-vec without
8
+ * its entry point, KJC-BUG-0082 / 0086) passed CI yet failed on every
9
+ * clean `npm install`. v3.2.0, v3.3.0 and v3.4.1 all shipped unable to
10
+ * run even `kj --version`.
11
+ *
12
+ * WHAT: pack the real tarball, install it into an isolated tmpdir
13
+ * (outside the repo, with CLAUDECODE stripped), and assert the binary
14
+ * actually starts and its native-ish deps resolve. Exit non-zero on any
15
+ * failure so `prepublishOnly` aborts the publish and CI blocks the PR.
16
+ *
17
+ * `npm pack` fires prepack/postpack, NOT prepublishOnly — so invoking
18
+ * this from prepublishOnly does not recurse.
19
+ */
20
+
21
+ import { execFileSync } from "node:child_process";
22
+ import fs from "node:fs";
23
+ import os from "node:os";
24
+ import path from "node:path";
25
+ import { fileURLToPath } from "node:url";
26
+
27
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
28
+ const pkg = JSON.parse(fs.readFileSync(path.join(repoRoot, "package.json"), "utf8"));
29
+ const expectedVersion = pkg.version;
30
+
31
+ // Subprocess env: strip CLAUDECODE (Claude Code blocks nested non-interactive
32
+ // runs otherwise) and force a non-interactive, quiet npm.
33
+ const { CLAUDECODE: _omit, ...cleanEnv } = process.env;
34
+ const childEnv = { ...cleanEnv, npm_config_yes: "true", CI: "1" };
35
+
36
+ function run(cmd, args, opts = {}) {
37
+ return execFileSync(cmd, args, {
38
+ encoding: "utf8",
39
+ env: childEnv,
40
+ stdio: ["ignore", "pipe", "pipe"],
41
+ ...opts,
42
+ });
43
+ }
44
+
45
+ function fail(msg, detail) {
46
+ console.error(`\n✗ verify-pack: ${msg}`);
47
+ if (detail) console.error(String(detail).split("\n").slice(0, 20).join("\n"));
48
+ process.exit(1);
49
+ }
50
+
51
+ let tgzPath = null;
52
+ let tmpDir = null;
53
+ try {
54
+ console.log(`verify-pack: packing karajan-code@${expectedVersion}…`);
55
+ // --json gives us the exact filename without parsing human output.
56
+ const packOut = run("npm", ["pack", "--json", "--silent"], { cwd: repoRoot });
57
+ const filename = JSON.parse(packOut)[0]?.filename;
58
+ if (!filename) fail("npm pack did not report a filename", packOut);
59
+ // npm normalizes scoped names in --json but karajan-code is unscoped;
60
+ // the file lands in cwd under the reported name.
61
+ tgzPath = path.join(repoRoot, filename);
62
+ if (!fs.existsSync(tgzPath)) fail(`packed tarball not found at ${tgzPath}`);
63
+
64
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kj-verify-pack-"));
65
+ console.log(`verify-pack: installing the tarball into ${tmpDir} (clean, isolated)…`);
66
+ run("npm", ["install", tgzPath, "--no-audit", "--no-fund", "--silent", "--prefix", tmpDir], {
67
+ cwd: tmpDir,
68
+ });
69
+
70
+ const binPath = path.join(tmpDir, "node_modules", ".bin", "kj");
71
+ if (!fs.existsSync(binPath)) fail(`kj binary missing after install: ${binPath}`);
72
+
73
+ // 1. kj --version must start AND report the version we just packed.
74
+ let versionOut;
75
+ try {
76
+ versionOut = run(binPath, ["--version"]).trim();
77
+ } catch (err) {
78
+ fail("`kj --version` crashed on a clean install", err.stderr || err.message);
79
+ }
80
+ if (!versionOut.includes(expectedVersion)) {
81
+ fail(`kj --version returned "${versionOut}", expected ${expectedVersion}`);
82
+ }
83
+ console.log(`verify-pack: kj --version → ${versionOut} ✓`);
84
+
85
+ // 2. kj --help must exit 0 (exercises the command tree wiring).
86
+ try {
87
+ run(binPath, ["--help"]);
88
+ } catch (err) {
89
+ fail("`kj --help` failed on a clean install", err.stderr || err.message);
90
+ }
91
+ console.log("verify-pack: kj --help ✓");
92
+
93
+ // 3. The deps that broke before must resolve in the installed tree.
94
+ const installedRoot = path.join(tmpDir, "node_modules", "karajan-code");
95
+ const checks = [
96
+ path.join(tmpDir, "node_modules", "sqlite-vec", "index.mjs"),
97
+ path.join(installedRoot, "node_modules", "@karajan", "core", "src", "vec-store.js"),
98
+ ];
99
+ for (const p of checks) {
100
+ if (!fs.existsSync(p)) fail(`expected resolved path missing in install: ${p}`);
101
+ }
102
+ console.log("verify-pack: sqlite-vec + @karajan/core resolve ✓");
103
+
104
+ console.log(`\n✓ verify-pack: karajan-code@${expectedVersion} installs clean and runs.`);
105
+ } finally {
106
+ if (tgzPath && fs.existsSync(tgzPath)) fs.rmSync(tgzPath, { force: true });
107
+ if (tmpDir && fs.existsSync(tmpDir)) fs.rmSync(tmpDir, { recursive: true, force: true });
108
+ }
@@ -12,7 +12,7 @@ import { resolveBin } from "./resolve-bin.js";
12
12
  * Returns `{tokens_in, tokens_out, cached_tokens}` or null when no usage
13
13
  * is found (= unmeasured; callers leave the fields undefined).
14
14
  */
15
- export function extractAiderUsage(text) {
15
+ function extractAiderUsage(text) {
16
16
  if (!text) return null;
17
17
  for (const line of text.split("\n")) {
18
18
  const t = line.trim();
@@ -12,7 +12,7 @@ import { resolveBin } from "./resolve-bin.js";
12
12
  * so the caller leaves `cached_tokens` undefined (= unmeasured,
13
13
  * distinct from a measured 0).
14
14
  */
15
- export function extractGeminiUsage(text) {
15
+ function extractGeminiUsage(text) {
16
16
  if (!text) return null;
17
17
  const candidates = [];
18
18
  for (const line of text.split("\n")) {
@@ -10,7 +10,7 @@ import { resolveBin } from "./resolve-bin.js";
10
10
  * nested `usage` object. Returns `{tokens_in, tokens_out, cached_tokens}`
11
11
  * or null (= unmeasured).
12
12
  */
13
- export function extractOpenCodeUsage(text) {
13
+ function extractOpenCodeUsage(text) {
14
14
  if (!text) return null;
15
15
  const candidates = [text.trim()];
16
16
  for (const line of text.split("\n")) {
@@ -16,6 +16,7 @@
16
16
 
17
17
  import fs from "node:fs";
18
18
  import path from "node:path";
19
+ import { escapeRegExp } from "../utils/escape-regexp.js";
19
20
 
20
21
  const PAGE_BYTE_LIMIT = 32 * 1024; // ≈ 8K tokens, the typical agent budget per fetch
21
22
 
@@ -65,7 +66,7 @@ const CHECKS = [
65
66
  if (!found) return { ok: false, hint: "Add robots.txt with `User-agent: GPTBot|ClaudeBot|PerplexityBot\\nAllow: /` blocks.", details: {} };
66
67
  const text = safeRead(path.join(rootDir, found));
67
68
  const aiBots = ["GPTBot", "ClaudeBot", "PerplexityBot", "anthropic-ai", "Google-Extended"];
68
- const allowed = aiBots.filter((bot) => new RegExp(`User-agent:\\s*${bot}[\\s\\S]*?Allow:\\s*/`, "i").test(text));
69
+ const allowed = aiBots.filter((bot) => new RegExp(`User-agent:\\s*${escapeRegExp(bot)}[\\s\\S]*?Allow:\\s*/`, "i").test(text));
69
70
  const ok = allowed.length > 0;
70
71
  return ok
71
72
  ? { ok: true, hint: null, details: { found, allowed } }
@@ -71,7 +71,8 @@ function formatInjectionBlock(inj) {
71
71
  if (items.length === 0) continue;
72
72
  lines.push(` - ${severity} (${items.length}):`);
73
73
  for (const f of items.slice(0, MAX_SAMPLE_INJECTION_PER_SEVERITY)) {
74
- lines.push(` - ${f.file || "(unknown)"}${f.line ? `:${f.line}` : ""} [${f.type}] ${f.pattern}`);
74
+ const lineSuffix = f.line ? `:${f.line}` : "";
75
+ lines.push(` - ${f.file || "(unknown)"}${lineSuffix} [${f.type}] ${f.pattern}`);
75
76
  }
76
77
  if (items.length > MAX_SAMPLE_INJECTION_PER_SEVERITY) lines.push(` - ... and ${items.length - MAX_SAMPLE_INJECTION_PER_SEVERITY} more in ${severity}`);
77
78
  }
@@ -85,7 +86,8 @@ function formatCircularDepsBlock(circularDeps) {
85
86
  return ["### Circular Dependencies (architecture)", `- Status: not available — ${circularDeps.reason || "madge not available"}`, ""];
86
87
  }
87
88
  const lines = ["### Circular Dependencies (architecture)"];
88
- lines.push(`- Total cycles: ${circularDeps.total ?? 0}${circularDeps.suppressedCount ? ` (+${circularDeps.suppressedCount} suppressed)` : ""}`);
89
+ const suppressedSuffix = circularDeps.suppressedCount ? ` (+${circularDeps.suppressedCount} suppressed)` : "";
90
+ lines.push(`- Total cycles: ${circularDeps.total ?? 0}${suppressedSuffix}`);
89
91
  if ((circularDeps.total ?? 0) > 0) {
90
92
  const groups = groupCyclesBySeverity(circularDeps.cycles || []);
91
93
  for (const [severity, cycles] of Object.entries(groups)) {
@@ -118,7 +120,8 @@ function formatSemgrepBlock(semgrepFindings) {
118
120
  if (findings.length === 0) continue;
119
121
  lines.push(` - ${severity} (${findings.length}):`);
120
122
  for (const f of findings.slice(0, MAX_SAMPLE_SEMGREP_PER_SEVERITY)) {
121
- const loc = f.file ? `${f.file}${f.line ? `:${f.line}` : ""}` : "";
123
+ const lineSuffix = f.line ? `:${f.line}` : "";
124
+ const loc = f.file ? `${f.file}${lineSuffix}` : "";
122
125
  lines.push(` - ${loc} [${f.rule}]`);
123
126
  }
124
127
  if (findings.length > MAX_SAMPLE_SEMGREP_PER_SEVERITY) {
@@ -172,7 +175,9 @@ function formatDeadExportsBlock(deadExports) {
172
175
  if (items.length === 0) continue;
173
176
  lines.push(` - ${severity} (${items.length}):`);
174
177
  for (const item of items.slice(0, MAX_SAMPLE_KNIP_PER_SEVERITY)) {
175
- lines.push(` - ${item.path}${item.line ? `:${item.line}` : ""} [${item.rule}]${item.name ? ` \`${item.name}\`` : ""}`);
178
+ const lineSuffix = item.line ? `:${item.line}` : "";
179
+ const nameSuffix = item.name ? ` \`${item.name}\`` : "";
180
+ lines.push(` - ${item.path}${lineSuffix} [${item.rule}]${nameSuffix}`);
176
181
  }
177
182
  if (items.length > MAX_SAMPLE_KNIP_PER_SEVERITY) {
178
183
  lines.push(` - ... and ${items.length - MAX_SAMPLE_KNIP_PER_SEVERITY} more in ${severity}`);
@@ -246,7 +251,8 @@ function formatSonarBlock(sonarFindings) {
246
251
  if (issues.length === 0) continue;
247
252
  lines.push(` - ${severity} (${issues.length}):`);
248
253
  for (const issue of issues.slice(0, MAX_SAMPLE_SONAR_PER_SEVERITY)) {
249
- const loc = issue.component ? `${issue.component}${issue.line ? `:${issue.line}` : ""}` : "";
254
+ const lineSuffix = issue.line ? `:${issue.line}` : "";
255
+ const loc = issue.component ? `${issue.component}${lineSuffix}` : "";
250
256
  const rule = issue.rule ? ` [${issue.rule}]` : "";
251
257
  lines.push(` - ${loc}${rule} ${issue.message || ""}`.trim());
252
258
  }
@@ -16,6 +16,7 @@
16
16
  // metadata for auditability — no silent dropping.
17
17
 
18
18
  import fs from "node:fs";
19
+ import { escapeRegExp } from "../utils/escape-regexp.js";
19
20
 
20
21
  export const DEFAULT_FALSE_POSITIVES = [
21
22
  {
@@ -59,8 +60,8 @@ export function hasInlineIgnore(filePath, line, ruleId, tool = "sonar") {
59
60
  const lines = fs.readFileSync(filePath, "utf8").split("\n");
60
61
  const idx = line - 1;
61
62
  const candidates = [lines[idx], lines[idx - 1]].filter(Boolean);
62
- const escapedRule = escapeRegex(ruleId);
63
- const escapedTool = escapeRegex(tool);
63
+ const escapedRule = escapeRegExp(ruleId);
64
+ const escapedTool = escapeRegExp(tool);
64
65
  // New generalised marker + legacy sonar-only marker.
65
66
  const reAudit = new RegExp(`karajan-audit-ignore\\s*:\\s*${escapedTool}:${escapedRule}\\b`);
66
67
  const reLegacy = tool === "sonar"
@@ -72,10 +73,6 @@ export function hasInlineIgnore(filePath, line, ruleId, tool = "sonar") {
72
73
  }
73
74
  }
74
75
 
75
- function escapeRegex(s) {
76
- return String(s).replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
77
- }
78
-
79
76
  /**
80
77
  * Filter a list of normalised audit findings into kept + suppressed.
81
78
  *
@@ -7,6 +7,8 @@
7
7
  * See docs/plan-adherence.md (PR-C) for the full spec.
8
8
  */
9
9
 
10
+ import { escapeRegExp } from "../utils/escape-regexp.js";
11
+
10
12
  const WEIGHTS = {
11
13
  commit_attribution: 40,
12
14
  acceptance_tests: 30,
@@ -20,7 +22,7 @@ const WEIGHTS = {
20
22
  * appear inside HU ids so we anchor on whole-token rather than \b.
21
23
  */
22
24
  function huIdMatcher(huId) {
23
- const escaped = String(huId).replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
25
+ const escaped = escapeRegExp(huId);
24
26
  return new RegExp(`(^|[^a-z0-9])${escaped}([^a-z0-9]|$)`, "i");
25
27
  }
26
28