karajan-code 3.2.0 → 3.4.0

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 (761) hide show
  1. package/README.md +1 -1
  2. package/node_modules/@karajan/core/README.md +42 -0
  3. package/node_modules/@karajan/core/package.json +38 -0
  4. package/node_modules/@karajan/core/src/atomic-write.js +43 -0
  5. package/node_modules/@karajan/core/src/cost/index.js +102 -0
  6. package/node_modules/@karajan/core/src/hu-snapshot.js +105 -0
  7. package/node_modules/@karajan/core/src/index.js +18 -0
  8. package/node_modules/@karajan/core/src/paths.js +123 -0
  9. package/node_modules/@karajan/core/src/plan-hu-ops.js +338 -0
  10. package/node_modules/@karajan/core/src/plan-id.js +45 -0
  11. package/node_modules/@karajan/core/src/plan-validation.js +82 -0
  12. package/node_modules/@karajan/core/src/port-check.js +45 -0
  13. package/node_modules/@karajan/core/src/pricing/index.js +64 -0
  14. package/node_modules/@karajan/core/src/pricing/model-pricing.json +28 -0
  15. package/node_modules/@karajan/core/src/process.js +188 -0
  16. package/node_modules/@karajan/core/src/run-registry.js +115 -0
  17. package/node_modules/@karajan/core/src/shared-paths.js +41 -0
  18. package/node_modules/@karajan/core/src/standby-scheduler.js +92 -0
  19. package/node_modules/@karajan/core/src/standby-store.js +168 -0
  20. package/node_modules/@karajan/core/src/vec-store.js +253 -0
  21. package/node_modules/@karajan/core/tests/atomic-write.test.js +30 -0
  22. package/node_modules/@karajan/core/tests/cost/index.test.js +89 -0
  23. package/node_modules/@karajan/core/tests/hu-snapshot.test.js +39 -0
  24. package/node_modules/@karajan/core/tests/paths.test.js +51 -0
  25. package/node_modules/@karajan/core/tests/plan-hu-ops.test.js +68 -0
  26. package/node_modules/@karajan/core/tests/plan-id.test.js +21 -0
  27. package/node_modules/@karajan/core/tests/plan-validation.test.js +39 -0
  28. package/node_modules/@karajan/core/tests/port-check.test.js +47 -0
  29. package/node_modules/@karajan/core/tests/pricing/index.test.js +95 -0
  30. package/node_modules/@karajan/core/tests/process.test.js +22 -0
  31. package/node_modules/@karajan/core/tests/run-registry.test.js +71 -0
  32. package/node_modules/@karajan/core/tests/shared-paths.test.js +30 -0
  33. package/node_modules/@karajan/core/tests/standby.test.js +66 -0
  34. package/node_modules/@karajan/core/tests/vec-store.test.js +98 -0
  35. package/node_modules/@karajan/core/vitest.config.js +12 -0
  36. package/node_modules/@sec-ant/readable-stream/LICENSE +21 -0
  37. package/node_modules/@sec-ant/readable-stream/README.md +230 -0
  38. package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterablePrototype.d.ts +1 -0
  39. package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterator.d.ts +27 -0
  40. package/node_modules/@sec-ant/readable-stream/dist/core/fromAnyIterable.d.ts +6 -0
  41. package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.d.ts +2 -0
  42. package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.js +5 -0
  43. package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.d.ts +2 -0
  44. package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.js +5 -0
  45. package/node_modules/@sec-ant/readable-stream/dist/index/index.d.ts +2 -0
  46. package/node_modules/@sec-ant/readable-stream/dist/index/index.js +8 -0
  47. package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.d.ts +1 -0
  48. package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.js +3 -0
  49. package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.d.ts +1 -0
  50. package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.js +2 -0
  51. package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.d.ts +2 -0
  52. package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.js +4 -0
  53. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.d.ts +1 -0
  54. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +89 -0
  55. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.d.ts +1 -0
  56. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +34 -0
  57. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.d.ts +2 -0
  58. package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +6 -0
  59. package/node_modules/@sec-ant/readable-stream/dist/types/async-iterator.d.ts +11 -0
  60. package/node_modules/@sec-ant/readable-stream/package.json +96 -0
  61. package/node_modules/@sindresorhus/merge-streams/index.d.ts +44 -0
  62. package/node_modules/@sindresorhus/merge-streams/index.js +265 -0
  63. package/node_modules/@sindresorhus/merge-streams/license +9 -0
  64. package/node_modules/@sindresorhus/merge-streams/package.json +49 -0
  65. package/node_modules/@sindresorhus/merge-streams/readme.md +53 -0
  66. package/node_modules/base64-js/LICENSE +21 -0
  67. package/node_modules/base64-js/README.md +34 -0
  68. package/node_modules/base64-js/base64js.min.js +1 -0
  69. package/node_modules/base64-js/index.d.ts +3 -0
  70. package/node_modules/base64-js/index.js +150 -0
  71. package/node_modules/base64-js/package.json +47 -0
  72. package/node_modules/better-sqlite3/LICENSE +21 -0
  73. package/node_modules/better-sqlite3/README.md +99 -0
  74. package/node_modules/better-sqlite3/binding.gyp +38 -0
  75. package/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  76. package/node_modules/better-sqlite3/deps/common.gypi +68 -0
  77. package/node_modules/better-sqlite3/deps/copy.js +31 -0
  78. package/node_modules/better-sqlite3/deps/defines.gypi +42 -0
  79. package/node_modules/better-sqlite3/deps/download.sh +123 -0
  80. package/node_modules/better-sqlite3/deps/patches/1208.patch +15 -0
  81. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +268879 -0
  82. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +14335 -0
  83. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +739 -0
  84. package/node_modules/better-sqlite3/deps/sqlite3.gyp +80 -0
  85. package/node_modules/better-sqlite3/deps/test_extension.c +21 -0
  86. package/node_modules/better-sqlite3/lib/database.js +90 -0
  87. package/node_modules/better-sqlite3/lib/index.js +3 -0
  88. package/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
  89. package/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
  90. package/node_modules/better-sqlite3/lib/methods/function.js +31 -0
  91. package/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
  92. package/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
  93. package/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
  94. package/node_modules/better-sqlite3/lib/methods/table.js +189 -0
  95. package/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
  96. package/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
  97. package/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
  98. package/node_modules/better-sqlite3/lib/util.js +12 -0
  99. package/node_modules/better-sqlite3/package.json +59 -0
  100. package/node_modules/better-sqlite3/src/addon.cpp +47 -0
  101. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +74 -0
  102. package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
  103. package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
  104. package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
  105. package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
  106. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
  107. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
  108. package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
  109. package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
  110. package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
  111. package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
  112. package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
  113. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
  114. package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
  115. package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
  116. package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
  117. package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
  118. package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
  119. package/node_modules/better-sqlite3/src/util/macros.cpp +83 -0
  120. package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
  121. package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
  122. package/node_modules/bindings/LICENSE.md +22 -0
  123. package/node_modules/bindings/README.md +98 -0
  124. package/node_modules/bindings/bindings.js +221 -0
  125. package/node_modules/bindings/package.json +28 -0
  126. package/node_modules/bl/.travis.yml +17 -0
  127. package/node_modules/bl/BufferList.js +396 -0
  128. package/node_modules/bl/LICENSE.md +13 -0
  129. package/node_modules/bl/README.md +247 -0
  130. package/node_modules/bl/bl.js +84 -0
  131. package/node_modules/bl/package.json +37 -0
  132. package/node_modules/bl/test/convert.js +21 -0
  133. package/node_modules/bl/test/indexOf.js +492 -0
  134. package/node_modules/bl/test/isBufferList.js +32 -0
  135. package/node_modules/bl/test/test.js +869 -0
  136. package/node_modules/buffer/AUTHORS.md +70 -0
  137. package/node_modules/buffer/LICENSE +21 -0
  138. package/node_modules/buffer/README.md +410 -0
  139. package/node_modules/buffer/index.d.ts +186 -0
  140. package/node_modules/buffer/index.js +1817 -0
  141. package/node_modules/buffer/package.json +96 -0
  142. package/node_modules/chownr/LICENSE +15 -0
  143. package/node_modules/chownr/README.md +3 -0
  144. package/node_modules/chownr/chownr.js +167 -0
  145. package/node_modules/chownr/package.json +29 -0
  146. package/node_modules/cross-spawn/LICENSE +21 -0
  147. package/node_modules/cross-spawn/README.md +89 -0
  148. package/node_modules/cross-spawn/index.js +39 -0
  149. package/node_modules/cross-spawn/lib/enoent.js +59 -0
  150. package/node_modules/cross-spawn/lib/parse.js +91 -0
  151. package/node_modules/cross-spawn/lib/util/escape.js +47 -0
  152. package/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
  153. package/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
  154. package/node_modules/cross-spawn/package.json +73 -0
  155. package/node_modules/decompress-response/index.d.ts +22 -0
  156. package/node_modules/decompress-response/index.js +58 -0
  157. package/node_modules/decompress-response/license +9 -0
  158. package/node_modules/decompress-response/package.json +56 -0
  159. package/node_modules/decompress-response/readme.md +48 -0
  160. package/node_modules/deep-extend/CHANGELOG.md +46 -0
  161. package/node_modules/deep-extend/LICENSE +20 -0
  162. package/node_modules/deep-extend/README.md +91 -0
  163. package/node_modules/deep-extend/index.js +1 -0
  164. package/node_modules/deep-extend/lib/deep-extend.js +150 -0
  165. package/node_modules/deep-extend/package.json +62 -0
  166. package/node_modules/detect-libc/LICENSE +201 -0
  167. package/node_modules/detect-libc/README.md +163 -0
  168. package/node_modules/detect-libc/index.d.ts +14 -0
  169. package/node_modules/detect-libc/lib/detect-libc.js +313 -0
  170. package/node_modules/detect-libc/lib/elf.js +39 -0
  171. package/node_modules/detect-libc/lib/filesystem.js +51 -0
  172. package/node_modules/detect-libc/lib/process.js +24 -0
  173. package/node_modules/detect-libc/package.json +44 -0
  174. package/node_modules/end-of-stream/LICENSE +21 -0
  175. package/node_modules/end-of-stream/README.md +54 -0
  176. package/node_modules/end-of-stream/index.js +96 -0
  177. package/node_modules/end-of-stream/package.json +37 -0
  178. package/node_modules/execa/index.d.ts +27 -0
  179. package/node_modules/execa/index.js +28 -0
  180. package/node_modules/execa/lib/arguments/command.js +20 -0
  181. package/node_modules/execa/lib/arguments/cwd.js +39 -0
  182. package/node_modules/execa/lib/arguments/encoding-option.js +50 -0
  183. package/node_modules/execa/lib/arguments/escape.js +88 -0
  184. package/node_modules/execa/lib/arguments/fd-options.js +108 -0
  185. package/node_modules/execa/lib/arguments/file-url.js +25 -0
  186. package/node_modules/execa/lib/arguments/options.js +96 -0
  187. package/node_modules/execa/lib/arguments/shell.js +11 -0
  188. package/node_modules/execa/lib/arguments/specific.js +111 -0
  189. package/node_modules/execa/lib/convert/add.js +15 -0
  190. package/node_modules/execa/lib/convert/concurrent.js +33 -0
  191. package/node_modules/execa/lib/convert/duplex.js +69 -0
  192. package/node_modules/execa/lib/convert/iterable.js +34 -0
  193. package/node_modules/execa/lib/convert/readable.js +113 -0
  194. package/node_modules/execa/lib/convert/shared.js +46 -0
  195. package/node_modules/execa/lib/convert/writable.js +90 -0
  196. package/node_modules/execa/lib/io/contents.js +116 -0
  197. package/node_modules/execa/lib/io/input-sync.js +44 -0
  198. package/node_modules/execa/lib/io/iterate.js +110 -0
  199. package/node_modules/execa/lib/io/max-buffer.js +89 -0
  200. package/node_modules/execa/lib/io/output-async.js +80 -0
  201. package/node_modules/execa/lib/io/output-sync.js +135 -0
  202. package/node_modules/execa/lib/io/pipeline.js +48 -0
  203. package/node_modules/execa/lib/io/strip-newline.js +12 -0
  204. package/node_modules/execa/lib/ipc/array.js +4 -0
  205. package/node_modules/execa/lib/ipc/buffer-messages.js +47 -0
  206. package/node_modules/execa/lib/ipc/forward.js +56 -0
  207. package/node_modules/execa/lib/ipc/get-each.js +89 -0
  208. package/node_modules/execa/lib/ipc/get-one.js +69 -0
  209. package/node_modules/execa/lib/ipc/graceful.js +72 -0
  210. package/node_modules/execa/lib/ipc/incoming.js +79 -0
  211. package/node_modules/execa/lib/ipc/ipc-input.js +44 -0
  212. package/node_modules/execa/lib/ipc/methods.js +49 -0
  213. package/node_modules/execa/lib/ipc/outgoing.js +47 -0
  214. package/node_modules/execa/lib/ipc/reference.js +44 -0
  215. package/node_modules/execa/lib/ipc/send.js +91 -0
  216. package/node_modules/execa/lib/ipc/strict.js +113 -0
  217. package/node_modules/execa/lib/ipc/validation.js +111 -0
  218. package/node_modules/execa/lib/methods/bind.js +23 -0
  219. package/node_modules/execa/lib/methods/command.js +43 -0
  220. package/node_modules/execa/lib/methods/create.js +65 -0
  221. package/node_modules/execa/lib/methods/main-async.js +194 -0
  222. package/node_modules/execa/lib/methods/main-sync.js +163 -0
  223. package/node_modules/execa/lib/methods/node.js +51 -0
  224. package/node_modules/execa/lib/methods/parameters.js +31 -0
  225. package/node_modules/execa/lib/methods/promise.js +15 -0
  226. package/node_modules/execa/lib/methods/script.js +22 -0
  227. package/node_modules/execa/lib/methods/template.js +153 -0
  228. package/node_modules/execa/lib/pipe/abort.js +20 -0
  229. package/node_modules/execa/lib/pipe/pipe-arguments.js +91 -0
  230. package/node_modules/execa/lib/pipe/sequence.js +24 -0
  231. package/node_modules/execa/lib/pipe/setup.js +72 -0
  232. package/node_modules/execa/lib/pipe/streaming.js +51 -0
  233. package/node_modules/execa/lib/pipe/throw.js +58 -0
  234. package/node_modules/execa/lib/resolve/all-async.js +46 -0
  235. package/node_modules/execa/lib/resolve/all-sync.js +33 -0
  236. package/node_modules/execa/lib/resolve/exit-async.js +54 -0
  237. package/node_modules/execa/lib/resolve/exit-sync.js +25 -0
  238. package/node_modules/execa/lib/resolve/stdio.js +47 -0
  239. package/node_modules/execa/lib/resolve/wait-stream.js +96 -0
  240. package/node_modules/execa/lib/resolve/wait-subprocess.js +146 -0
  241. package/node_modules/execa/lib/return/duration.js +8 -0
  242. package/node_modules/execa/lib/return/early-error.js +60 -0
  243. package/node_modules/execa/lib/return/final-error.js +40 -0
  244. package/node_modules/execa/lib/return/message.js +157 -0
  245. package/node_modules/execa/lib/return/reject.js +13 -0
  246. package/node_modules/execa/lib/return/result.js +186 -0
  247. package/node_modules/execa/lib/stdio/direction.js +76 -0
  248. package/node_modules/execa/lib/stdio/duplicate.js +116 -0
  249. package/node_modules/execa/lib/stdio/handle-async.js +52 -0
  250. package/node_modules/execa/lib/stdio/handle-sync.js +57 -0
  251. package/node_modules/execa/lib/stdio/handle.js +214 -0
  252. package/node_modules/execa/lib/stdio/input-option.js +50 -0
  253. package/node_modules/execa/lib/stdio/native.js +106 -0
  254. package/node_modules/execa/lib/stdio/stdio-option.js +60 -0
  255. package/node_modules/execa/lib/stdio/type.js +173 -0
  256. package/node_modules/execa/lib/terminate/cancel.js +20 -0
  257. package/node_modules/execa/lib/terminate/cleanup.js +16 -0
  258. package/node_modules/execa/lib/terminate/graceful.js +71 -0
  259. package/node_modules/execa/lib/terminate/kill.js +93 -0
  260. package/node_modules/execa/lib/terminate/signal.js +70 -0
  261. package/node_modules/execa/lib/terminate/timeout.js +21 -0
  262. package/node_modules/execa/lib/transform/encoding-transform.js +51 -0
  263. package/node_modules/execa/lib/transform/generator.js +107 -0
  264. package/node_modules/execa/lib/transform/normalize.js +111 -0
  265. package/node_modules/execa/lib/transform/object-mode.js +41 -0
  266. package/node_modules/execa/lib/transform/run-async.js +60 -0
  267. package/node_modules/execa/lib/transform/run-sync.js +50 -0
  268. package/node_modules/execa/lib/transform/split.js +110 -0
  269. package/node_modules/execa/lib/transform/validate.js +43 -0
  270. package/node_modules/execa/lib/utils/abort-signal.js +8 -0
  271. package/node_modules/execa/lib/utils/deferred.js +7 -0
  272. package/node_modules/execa/lib/utils/max-listeners.js +14 -0
  273. package/node_modules/execa/lib/utils/standard-stream.js +6 -0
  274. package/node_modules/execa/lib/utils/uint-array.js +69 -0
  275. package/node_modules/execa/lib/verbose/complete.js +24 -0
  276. package/node_modules/execa/lib/verbose/custom.js +26 -0
  277. package/node_modules/execa/lib/verbose/default.js +54 -0
  278. package/node_modules/execa/lib/verbose/error.js +13 -0
  279. package/node_modules/execa/lib/verbose/info.js +39 -0
  280. package/node_modules/execa/lib/verbose/ipc.js +15 -0
  281. package/node_modules/execa/lib/verbose/log.js +54 -0
  282. package/node_modules/execa/lib/verbose/output.js +60 -0
  283. package/node_modules/execa/lib/verbose/start.js +15 -0
  284. package/node_modules/execa/lib/verbose/values.js +33 -0
  285. package/node_modules/execa/license +9 -0
  286. package/node_modules/execa/package.json +105 -0
  287. package/node_modules/execa/readme.md +461 -0
  288. package/node_modules/execa/types/arguments/encoding-option.d.ts +19 -0
  289. package/node_modules/execa/types/arguments/fd-options.d.ts +8 -0
  290. package/node_modules/execa/types/arguments/options.d.ts +400 -0
  291. package/node_modules/execa/types/arguments/specific.d.ts +52 -0
  292. package/node_modules/execa/types/convert.d.ts +58 -0
  293. package/node_modules/execa/types/ipc.d.ts +156 -0
  294. package/node_modules/execa/types/methods/command.d.ts +114 -0
  295. package/node_modules/execa/types/methods/main-async.d.ts +379 -0
  296. package/node_modules/execa/types/methods/main-sync.d.ts +59 -0
  297. package/node_modules/execa/types/methods/node.d.ts +62 -0
  298. package/node_modules/execa/types/methods/script.d.ts +115 -0
  299. package/node_modules/execa/types/methods/template.d.ts +18 -0
  300. package/node_modules/execa/types/pipe.d.ts +58 -0
  301. package/node_modules/execa/types/return/final-error.d.ts +51 -0
  302. package/node_modules/execa/types/return/ignore.d.ts +26 -0
  303. package/node_modules/execa/types/return/result-all.d.ts +30 -0
  304. package/node_modules/execa/types/return/result-ipc.d.ts +27 -0
  305. package/node_modules/execa/types/return/result-stdio.d.ts +17 -0
  306. package/node_modules/execa/types/return/result-stdout.d.ts +50 -0
  307. package/node_modules/execa/types/return/result.d.ts +203 -0
  308. package/node_modules/execa/types/stdio/array.d.ts +16 -0
  309. package/node_modules/execa/types/stdio/direction.d.ts +12 -0
  310. package/node_modules/execa/types/stdio/option.d.ts +40 -0
  311. package/node_modules/execa/types/stdio/type.d.ts +170 -0
  312. package/node_modules/execa/types/subprocess/all.d.ts +17 -0
  313. package/node_modules/execa/types/subprocess/stdio.d.ts +18 -0
  314. package/node_modules/execa/types/subprocess/stdout.d.ts +22 -0
  315. package/node_modules/execa/types/subprocess/subprocess.d.ts +117 -0
  316. package/node_modules/execa/types/transform/normalize.d.ts +57 -0
  317. package/node_modules/execa/types/transform/object-mode.d.ts +21 -0
  318. package/node_modules/execa/types/utils.d.ts +13 -0
  319. package/node_modules/execa/types/verbose.d.ts +98 -0
  320. package/node_modules/expand-template/.travis.yml +6 -0
  321. package/node_modules/expand-template/LICENSE +21 -0
  322. package/node_modules/expand-template/README.md +43 -0
  323. package/node_modules/expand-template/index.js +26 -0
  324. package/node_modules/expand-template/package.json +29 -0
  325. package/node_modules/expand-template/test.js +67 -0
  326. package/node_modules/figures/index.d.ts +279 -0
  327. package/node_modules/figures/index.js +292 -0
  328. package/node_modules/figures/license +9 -0
  329. package/node_modules/figures/package.json +49 -0
  330. package/node_modules/figures/readme.md +337 -0
  331. package/node_modules/file-uri-to-path/.npmignore +1 -0
  332. package/node_modules/file-uri-to-path/.travis.yml +30 -0
  333. package/node_modules/file-uri-to-path/History.md +21 -0
  334. package/node_modules/file-uri-to-path/LICENSE +20 -0
  335. package/node_modules/file-uri-to-path/README.md +74 -0
  336. package/node_modules/file-uri-to-path/index.d.ts +2 -0
  337. package/node_modules/file-uri-to-path/index.js +66 -0
  338. package/node_modules/file-uri-to-path/package.json +32 -0
  339. package/node_modules/file-uri-to-path/test/test.js +24 -0
  340. package/node_modules/file-uri-to-path/test/tests.json +13 -0
  341. package/node_modules/fs-constants/LICENSE +21 -0
  342. package/node_modules/fs-constants/README.md +26 -0
  343. package/node_modules/fs-constants/browser.js +1 -0
  344. package/node_modules/fs-constants/index.js +1 -0
  345. package/node_modules/fs-constants/package.json +19 -0
  346. package/node_modules/get-stream/license +9 -0
  347. package/node_modules/get-stream/package.json +60 -0
  348. package/node_modules/get-stream/readme.md +303 -0
  349. package/node_modules/get-stream/source/array-buffer.js +84 -0
  350. package/node_modules/get-stream/source/array.js +32 -0
  351. package/node_modules/get-stream/source/buffer.js +19 -0
  352. package/node_modules/get-stream/source/contents.js +121 -0
  353. package/node_modules/get-stream/source/exports.js +5 -0
  354. package/node_modules/get-stream/source/index.d.ts +121 -0
  355. package/node_modules/get-stream/source/index.js +13 -0
  356. package/node_modules/get-stream/source/stream.js +65 -0
  357. package/node_modules/get-stream/source/string.js +41 -0
  358. package/node_modules/get-stream/source/utils.js +11 -0
  359. package/node_modules/github-from-package/.travis.yml +4 -0
  360. package/node_modules/github-from-package/LICENSE +18 -0
  361. package/node_modules/github-from-package/example/package.json +8 -0
  362. package/node_modules/github-from-package/example/url.js +3 -0
  363. package/node_modules/github-from-package/index.js +17 -0
  364. package/node_modules/github-from-package/package.json +30 -0
  365. package/node_modules/github-from-package/readme.markdown +53 -0
  366. package/node_modules/github-from-package/test/a.json +8 -0
  367. package/node_modules/github-from-package/test/b.json +5 -0
  368. package/node_modules/github-from-package/test/c.json +5 -0
  369. package/node_modules/github-from-package/test/d.json +7 -0
  370. package/node_modules/github-from-package/test/e.json +5 -0
  371. package/node_modules/github-from-package/test/url.js +19 -0
  372. package/node_modules/human-signals/LICENSE +201 -0
  373. package/node_modules/human-signals/README.md +171 -0
  374. package/node_modules/human-signals/build/src/core.js +273 -0
  375. package/node_modules/human-signals/build/src/main.d.ts +206 -0
  376. package/node_modules/human-signals/build/src/main.js +70 -0
  377. package/node_modules/human-signals/build/src/realtime.js +16 -0
  378. package/node_modules/human-signals/build/src/signals.js +34 -0
  379. package/node_modules/human-signals/package.json +66 -0
  380. package/node_modules/ieee754/LICENSE +11 -0
  381. package/node_modules/ieee754/README.md +51 -0
  382. package/node_modules/ieee754/index.d.ts +10 -0
  383. package/node_modules/ieee754/index.js +85 -0
  384. package/node_modules/ieee754/package.json +52 -0
  385. package/node_modules/inherits/LICENSE +16 -0
  386. package/node_modules/inherits/README.md +42 -0
  387. package/node_modules/inherits/inherits.js +9 -0
  388. package/node_modules/inherits/inherits_browser.js +27 -0
  389. package/node_modules/inherits/package.json +29 -0
  390. package/node_modules/ini/LICENSE +15 -0
  391. package/node_modules/ini/README.md +102 -0
  392. package/node_modules/ini/ini.js +206 -0
  393. package/node_modules/ini/package.json +33 -0
  394. package/node_modules/is-plain-obj/index.d.ts +35 -0
  395. package/node_modules/is-plain-obj/index.js +8 -0
  396. package/node_modules/is-plain-obj/license +9 -0
  397. package/node_modules/is-plain-obj/package.json +41 -0
  398. package/node_modules/is-plain-obj/readme.md +58 -0
  399. package/node_modules/is-stream/index.d.ts +90 -0
  400. package/node_modules/is-stream/index.js +37 -0
  401. package/node_modules/is-stream/license +9 -0
  402. package/node_modules/is-stream/package.json +48 -0
  403. package/node_modules/is-stream/readme.md +57 -0
  404. package/node_modules/is-unicode-supported/index.d.ts +12 -0
  405. package/node_modules/is-unicode-supported/index.js +21 -0
  406. package/node_modules/is-unicode-supported/license +9 -0
  407. package/node_modules/is-unicode-supported/package.json +47 -0
  408. package/node_modules/is-unicode-supported/readme.md +35 -0
  409. package/node_modules/isexe/.npmignore +2 -0
  410. package/node_modules/isexe/LICENSE +15 -0
  411. package/node_modules/isexe/README.md +51 -0
  412. package/node_modules/isexe/index.js +57 -0
  413. package/node_modules/isexe/mode.js +41 -0
  414. package/node_modules/isexe/package.json +31 -0
  415. package/node_modules/isexe/test/basic.js +221 -0
  416. package/node_modules/isexe/windows.js +42 -0
  417. package/node_modules/mimic-response/index.d.ts +17 -0
  418. package/node_modules/mimic-response/index.js +77 -0
  419. package/node_modules/mimic-response/license +9 -0
  420. package/node_modules/mimic-response/package.json +42 -0
  421. package/node_modules/mimic-response/readme.md +78 -0
  422. package/node_modules/minimist/.eslintrc +29 -0
  423. package/node_modules/minimist/.github/FUNDING.yml +12 -0
  424. package/node_modules/minimist/.nycrc +14 -0
  425. package/node_modules/minimist/CHANGELOG.md +298 -0
  426. package/node_modules/minimist/LICENSE +18 -0
  427. package/node_modules/minimist/README.md +121 -0
  428. package/node_modules/minimist/example/parse.js +4 -0
  429. package/node_modules/minimist/index.js +263 -0
  430. package/node_modules/minimist/package.json +75 -0
  431. package/node_modules/minimist/test/all_bool.js +34 -0
  432. package/node_modules/minimist/test/bool.js +177 -0
  433. package/node_modules/minimist/test/dash.js +43 -0
  434. package/node_modules/minimist/test/default_bool.js +37 -0
  435. package/node_modules/minimist/test/dotted.js +24 -0
  436. package/node_modules/minimist/test/kv_short.js +32 -0
  437. package/node_modules/minimist/test/long.js +33 -0
  438. package/node_modules/minimist/test/num.js +38 -0
  439. package/node_modules/minimist/test/parse.js +209 -0
  440. package/node_modules/minimist/test/parse_modified.js +11 -0
  441. package/node_modules/minimist/test/proto.js +64 -0
  442. package/node_modules/minimist/test/short.js +69 -0
  443. package/node_modules/minimist/test/stop_early.js +17 -0
  444. package/node_modules/minimist/test/unknown.js +104 -0
  445. package/node_modules/minimist/test/whitespace.js +10 -0
  446. package/node_modules/mkdirp-classic/LICENSE +21 -0
  447. package/node_modules/mkdirp-classic/README.md +18 -0
  448. package/node_modules/mkdirp-classic/index.js +98 -0
  449. package/node_modules/mkdirp-classic/package.json +18 -0
  450. package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +31 -0
  451. package/node_modules/napi-build-utils/LICENSE +21 -0
  452. package/node_modules/napi-build-utils/README.md +52 -0
  453. package/node_modules/napi-build-utils/index.js +214 -0
  454. package/node_modules/napi-build-utils/index.md +0 -0
  455. package/node_modules/napi-build-utils/package.json +42 -0
  456. package/node_modules/node-abi/LICENSE +21 -0
  457. package/node_modules/node-abi/README.md +54 -0
  458. package/node_modules/node-abi/abi_registry.json +446 -0
  459. package/node_modules/node-abi/index.js +179 -0
  460. package/node_modules/node-abi/package.json +45 -0
  461. package/node_modules/npm-run-path/index.d.ts +90 -0
  462. package/node_modules/npm-run-path/index.js +55 -0
  463. package/node_modules/npm-run-path/license +9 -0
  464. package/node_modules/npm-run-path/node_modules/path-key/index.d.ts +31 -0
  465. package/node_modules/npm-run-path/node_modules/path-key/index.js +12 -0
  466. package/node_modules/npm-run-path/node_modules/path-key/license +9 -0
  467. package/node_modules/npm-run-path/node_modules/path-key/package.json +41 -0
  468. package/node_modules/npm-run-path/node_modules/path-key/readme.md +57 -0
  469. package/node_modules/npm-run-path/package.json +52 -0
  470. package/node_modules/npm-run-path/readme.md +104 -0
  471. package/node_modules/once/LICENSE +15 -0
  472. package/node_modules/once/README.md +79 -0
  473. package/node_modules/once/once.js +42 -0
  474. package/node_modules/once/package.json +33 -0
  475. package/node_modules/parse-ms/index.d.ts +30 -0
  476. package/node_modules/parse-ms/index.js +45 -0
  477. package/node_modules/parse-ms/license +9 -0
  478. package/node_modules/parse-ms/package.json +47 -0
  479. package/node_modules/parse-ms/readme.md +46 -0
  480. package/node_modules/path-key/index.d.ts +40 -0
  481. package/node_modules/path-key/index.js +16 -0
  482. package/node_modules/path-key/license +9 -0
  483. package/node_modules/path-key/package.json +39 -0
  484. package/node_modules/path-key/readme.md +61 -0
  485. package/node_modules/prebuild-install/CHANGELOG.md +131 -0
  486. package/node_modules/prebuild-install/CONTRIBUTING.md +6 -0
  487. package/node_modules/prebuild-install/LICENSE +21 -0
  488. package/node_modules/prebuild-install/README.md +163 -0
  489. package/node_modules/prebuild-install/asset.js +44 -0
  490. package/node_modules/prebuild-install/bin.js +78 -0
  491. package/node_modules/prebuild-install/download.js +142 -0
  492. package/node_modules/prebuild-install/error.js +14 -0
  493. package/node_modules/prebuild-install/help.txt +16 -0
  494. package/node_modules/prebuild-install/index.js +1 -0
  495. package/node_modules/prebuild-install/log.js +33 -0
  496. package/node_modules/prebuild-install/package.json +67 -0
  497. package/node_modules/prebuild-install/proxy.js +35 -0
  498. package/node_modules/prebuild-install/rc.js +64 -0
  499. package/node_modules/prebuild-install/util.js +143 -0
  500. package/node_modules/pretty-ms/index.d.ts +157 -0
  501. package/node_modules/pretty-ms/index.js +149 -0
  502. package/node_modules/pretty-ms/license +9 -0
  503. package/node_modules/pretty-ms/package.json +55 -0
  504. package/node_modules/pretty-ms/readme.md +179 -0
  505. package/node_modules/pump/.github/FUNDING.yml +2 -0
  506. package/node_modules/pump/.travis.yml +5 -0
  507. package/node_modules/pump/LICENSE +21 -0
  508. package/node_modules/pump/README.md +74 -0
  509. package/node_modules/pump/SECURITY.md +5 -0
  510. package/node_modules/pump/empty.js +1 -0
  511. package/node_modules/pump/index.js +86 -0
  512. package/node_modules/pump/package.json +30 -0
  513. package/node_modules/pump/test-browser.js +66 -0
  514. package/node_modules/pump/test-node.js +53 -0
  515. package/node_modules/rc/LICENSE.APACHE2 +15 -0
  516. package/node_modules/rc/LICENSE.BSD +26 -0
  517. package/node_modules/rc/LICENSE.MIT +24 -0
  518. package/node_modules/rc/README.md +227 -0
  519. package/node_modules/rc/browser.js +7 -0
  520. package/node_modules/rc/cli.js +4 -0
  521. package/node_modules/rc/index.js +53 -0
  522. package/node_modules/rc/lib/utils.js +104 -0
  523. package/node_modules/rc/package.json +29 -0
  524. package/node_modules/rc/test/ini.js +16 -0
  525. package/node_modules/rc/test/nested-env-vars.js +50 -0
  526. package/node_modules/rc/test/test.js +59 -0
  527. package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  528. package/node_modules/readable-stream/GOVERNANCE.md +136 -0
  529. package/node_modules/readable-stream/LICENSE +47 -0
  530. package/node_modules/readable-stream/README.md +106 -0
  531. package/node_modules/readable-stream/errors-browser.js +127 -0
  532. package/node_modules/readable-stream/errors.js +116 -0
  533. package/node_modules/readable-stream/experimentalWarning.js +17 -0
  534. package/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
  535. package/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
  536. package/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
  537. package/node_modules/readable-stream/lib/_stream_transform.js +190 -0
  538. package/node_modules/readable-stream/lib/_stream_writable.js +641 -0
  539. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
  540. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
  541. package/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
  542. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
  543. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  544. package/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
  545. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
  546. package/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
  547. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  548. package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  549. package/node_modules/readable-stream/package.json +68 -0
  550. package/node_modules/readable-stream/readable-browser.js +9 -0
  551. package/node_modules/readable-stream/readable.js +16 -0
  552. package/node_modules/safe-buffer/LICENSE +21 -0
  553. package/node_modules/safe-buffer/README.md +584 -0
  554. package/node_modules/safe-buffer/index.d.ts +187 -0
  555. package/node_modules/safe-buffer/index.js +65 -0
  556. package/node_modules/safe-buffer/package.json +51 -0
  557. package/node_modules/semver/LICENSE +15 -0
  558. package/node_modules/semver/README.md +665 -0
  559. package/node_modules/semver/bin/semver.js +191 -0
  560. package/node_modules/semver/classes/comparator.js +143 -0
  561. package/node_modules/semver/classes/index.js +7 -0
  562. package/node_modules/semver/classes/range.js +557 -0
  563. package/node_modules/semver/classes/semver.js +333 -0
  564. package/node_modules/semver/functions/clean.js +8 -0
  565. package/node_modules/semver/functions/cmp.js +54 -0
  566. package/node_modules/semver/functions/coerce.js +62 -0
  567. package/node_modules/semver/functions/compare-build.js +9 -0
  568. package/node_modules/semver/functions/compare-loose.js +5 -0
  569. package/node_modules/semver/functions/compare.js +7 -0
  570. package/node_modules/semver/functions/diff.js +60 -0
  571. package/node_modules/semver/functions/eq.js +5 -0
  572. package/node_modules/semver/functions/gt.js +5 -0
  573. package/node_modules/semver/functions/gte.js +5 -0
  574. package/node_modules/semver/functions/inc.js +21 -0
  575. package/node_modules/semver/functions/lt.js +5 -0
  576. package/node_modules/semver/functions/lte.js +5 -0
  577. package/node_modules/semver/functions/major.js +5 -0
  578. package/node_modules/semver/functions/minor.js +5 -0
  579. package/node_modules/semver/functions/neq.js +5 -0
  580. package/node_modules/semver/functions/parse.js +18 -0
  581. package/node_modules/semver/functions/patch.js +5 -0
  582. package/node_modules/semver/functions/prerelease.js +8 -0
  583. package/node_modules/semver/functions/rcompare.js +5 -0
  584. package/node_modules/semver/functions/rsort.js +5 -0
  585. package/node_modules/semver/functions/satisfies.js +12 -0
  586. package/node_modules/semver/functions/sort.js +5 -0
  587. package/node_modules/semver/functions/valid.js +8 -0
  588. package/node_modules/semver/index.js +91 -0
  589. package/node_modules/semver/internal/constants.js +37 -0
  590. package/node_modules/semver/internal/debug.js +11 -0
  591. package/node_modules/semver/internal/identifiers.js +29 -0
  592. package/node_modules/semver/internal/lrucache.js +42 -0
  593. package/node_modules/semver/internal/parse-options.js +17 -0
  594. package/node_modules/semver/internal/re.js +223 -0
  595. package/node_modules/semver/package.json +78 -0
  596. package/node_modules/semver/preload.js +4 -0
  597. package/node_modules/semver/range.bnf +16 -0
  598. package/node_modules/semver/ranges/gtr.js +6 -0
  599. package/node_modules/semver/ranges/intersects.js +9 -0
  600. package/node_modules/semver/ranges/ltr.js +6 -0
  601. package/node_modules/semver/ranges/max-satisfying.js +27 -0
  602. package/node_modules/semver/ranges/min-satisfying.js +26 -0
  603. package/node_modules/semver/ranges/min-version.js +63 -0
  604. package/node_modules/semver/ranges/outside.js +82 -0
  605. package/node_modules/semver/ranges/simplify.js +49 -0
  606. package/node_modules/semver/ranges/subset.js +249 -0
  607. package/node_modules/semver/ranges/to-comparators.js +10 -0
  608. package/node_modules/semver/ranges/valid.js +13 -0
  609. package/node_modules/shebang-command/index.js +19 -0
  610. package/node_modules/shebang-command/license +9 -0
  611. package/node_modules/shebang-command/package.json +34 -0
  612. package/node_modules/shebang-command/readme.md +34 -0
  613. package/node_modules/shebang-regex/index.d.ts +22 -0
  614. package/node_modules/shebang-regex/index.js +2 -0
  615. package/node_modules/shebang-regex/license +9 -0
  616. package/node_modules/shebang-regex/package.json +35 -0
  617. package/node_modules/shebang-regex/readme.md +33 -0
  618. package/node_modules/signal-exit/LICENSE.txt +16 -0
  619. package/node_modules/signal-exit/README.md +74 -0
  620. package/node_modules/signal-exit/dist/cjs/browser.d.ts +12 -0
  621. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +1 -0
  622. package/node_modules/signal-exit/dist/cjs/browser.js +10 -0
  623. package/node_modules/signal-exit/dist/cjs/browser.js.map +1 -0
  624. package/node_modules/signal-exit/dist/cjs/index.d.ts +48 -0
  625. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +1 -0
  626. package/node_modules/signal-exit/dist/cjs/index.js +279 -0
  627. package/node_modules/signal-exit/dist/cjs/index.js.map +1 -0
  628. package/node_modules/signal-exit/dist/cjs/package.json +3 -0
  629. package/node_modules/signal-exit/dist/cjs/signals.d.ts +29 -0
  630. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +1 -0
  631. package/node_modules/signal-exit/dist/cjs/signals.js +42 -0
  632. package/node_modules/signal-exit/dist/cjs/signals.js.map +1 -0
  633. package/node_modules/signal-exit/dist/mjs/browser.d.ts +12 -0
  634. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +1 -0
  635. package/node_modules/signal-exit/dist/mjs/browser.js +4 -0
  636. package/node_modules/signal-exit/dist/mjs/browser.js.map +1 -0
  637. package/node_modules/signal-exit/dist/mjs/index.d.ts +48 -0
  638. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +1 -0
  639. package/node_modules/signal-exit/dist/mjs/index.js +275 -0
  640. package/node_modules/signal-exit/dist/mjs/index.js.map +1 -0
  641. package/node_modules/signal-exit/dist/mjs/package.json +3 -0
  642. package/node_modules/signal-exit/dist/mjs/signals.d.ts +29 -0
  643. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +1 -0
  644. package/node_modules/signal-exit/dist/mjs/signals.js +39 -0
  645. package/node_modules/signal-exit/dist/mjs/signals.js.map +1 -0
  646. package/node_modules/signal-exit/package.json +106 -0
  647. package/node_modules/simple-concat/.travis.yml +3 -0
  648. package/node_modules/simple-concat/LICENSE +20 -0
  649. package/node_modules/simple-concat/README.md +44 -0
  650. package/node_modules/simple-concat/index.js +15 -0
  651. package/node_modules/simple-concat/package.json +47 -0
  652. package/node_modules/simple-concat/test/basic.js +41 -0
  653. package/node_modules/simple-get/.github/dependabot.yml +15 -0
  654. package/node_modules/simple-get/.github/workflows/ci.yml +23 -0
  655. package/node_modules/simple-get/LICENSE +20 -0
  656. package/node_modules/simple-get/README.md +333 -0
  657. package/node_modules/simple-get/index.js +108 -0
  658. package/node_modules/simple-get/package.json +67 -0
  659. package/node_modules/sqlite-vec/README.md +1 -0
  660. package/node_modules/sqlite-vec/index.cjs +46 -0
  661. package/node_modules/sqlite-vec/index.d.ts +17 -0
  662. package/node_modules/sqlite-vec/index.mjs +47 -0
  663. package/node_modules/sqlite-vec/package.json +1 -0
  664. package/node_modules/sqlite-vec-linux-x64/README.md +1 -0
  665. package/node_modules/sqlite-vec-linux-x64/package.json +1 -0
  666. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  667. package/node_modules/string_decoder/LICENSE +48 -0
  668. package/node_modules/string_decoder/README.md +47 -0
  669. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  670. package/node_modules/string_decoder/package.json +34 -0
  671. package/node_modules/strip-final-newline/index.d.ts +18 -0
  672. package/node_modules/strip-final-newline/index.js +26 -0
  673. package/node_modules/strip-final-newline/license +9 -0
  674. package/node_modules/strip-final-newline/package.json +49 -0
  675. package/node_modules/strip-final-newline/readme.md +34 -0
  676. package/node_modules/strip-json-comments/index.js +70 -0
  677. package/node_modules/strip-json-comments/license +21 -0
  678. package/node_modules/strip-json-comments/package.json +42 -0
  679. package/node_modules/strip-json-comments/readme.md +64 -0
  680. package/node_modules/tar-fs/.travis.yml +6 -0
  681. package/node_modules/tar-fs/LICENSE +21 -0
  682. package/node_modules/tar-fs/README.md +165 -0
  683. package/node_modules/tar-fs/index.js +363 -0
  684. package/node_modules/tar-fs/package.json +41 -0
  685. package/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -0
  686. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -0
  687. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  688. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  689. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  690. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  691. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  692. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  693. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  694. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  695. package/node_modules/tar-fs/test/index.js +346 -0
  696. package/node_modules/tar-stream/LICENSE +21 -0
  697. package/node_modules/tar-stream/README.md +168 -0
  698. package/node_modules/tar-stream/extract.js +257 -0
  699. package/node_modules/tar-stream/headers.js +295 -0
  700. package/node_modules/tar-stream/index.js +2 -0
  701. package/node_modules/tar-stream/pack.js +255 -0
  702. package/node_modules/tar-stream/package.json +58 -0
  703. package/node_modules/tar-stream/sandbox.js +11 -0
  704. package/node_modules/tunnel-agent/LICENSE +55 -0
  705. package/node_modules/tunnel-agent/README.md +4 -0
  706. package/node_modules/tunnel-agent/index.js +244 -0
  707. package/node_modules/tunnel-agent/package.json +22 -0
  708. package/node_modules/unicorn-magic/default.d.ts +13 -0
  709. package/node_modules/unicorn-magic/default.js +14 -0
  710. package/node_modules/unicorn-magic/license +9 -0
  711. package/node_modules/unicorn-magic/node.d.ts +125 -0
  712. package/node_modules/unicorn-magic/node.js +49 -0
  713. package/node_modules/unicorn-magic/package.json +62 -0
  714. package/node_modules/unicorn-magic/readme.md +25 -0
  715. package/node_modules/util-deprecate/History.md +16 -0
  716. package/node_modules/util-deprecate/LICENSE +24 -0
  717. package/node_modules/util-deprecate/README.md +53 -0
  718. package/node_modules/util-deprecate/browser.js +67 -0
  719. package/node_modules/util-deprecate/node.js +6 -0
  720. package/node_modules/util-deprecate/package.json +27 -0
  721. package/node_modules/which/CHANGELOG.md +166 -0
  722. package/node_modules/which/LICENSE +15 -0
  723. package/node_modules/which/README.md +54 -0
  724. package/node_modules/which/bin/node-which +52 -0
  725. package/node_modules/which/package.json +43 -0
  726. package/node_modules/which/which.js +125 -0
  727. package/node_modules/wrappy/LICENSE +15 -0
  728. package/node_modules/wrappy/README.md +36 -0
  729. package/node_modules/wrappy/package.json +29 -0
  730. package/node_modules/wrappy/wrappy.js +33 -0
  731. package/node_modules/yoctocolors/base.d.ts +47 -0
  732. package/node_modules/yoctocolors/base.js +94 -0
  733. package/node_modules/yoctocolors/index.d.ts +2 -0
  734. package/node_modules/yoctocolors/index.js +2 -0
  735. package/node_modules/yoctocolors/license +9 -0
  736. package/node_modules/yoctocolors/package.json +69 -0
  737. package/node_modules/yoctocolors/readme.md +138 -0
  738. package/package.json +5 -1
  739. package/packages/hu-board/public/utils/board-view.js +11 -0
  740. package/packages/hu-board/public/utils/formatters.js +28 -1
  741. package/packages/hu-board/src/db.js +62 -3
  742. package/packages/hu-board/src/format.js +46 -1
  743. package/src/agents/aider-agent.js +42 -1
  744. package/src/agents/claude-agent.js +31 -5
  745. package/src/agents/codex-agent.js +44 -7
  746. package/src/agents/gemini-agent.js +37 -1
  747. package/src/agents/opencode-agent.js +34 -1
  748. package/src/orchestrator/drivers/pre-loop-phases/inject-loaded-plan.js +12 -1
  749. package/src/orchestrator/flow-runner.js +10 -2
  750. package/src/orchestrator/hu-sub-pipeline.js +30 -0
  751. package/src/prompts/architect.js +32 -37
  752. package/src/prompts/coder.js +71 -96
  753. package/src/prompts/hu-reviewer.js +23 -29
  754. package/src/prompts/prompt-layout.js +80 -0
  755. package/src/prompts/reviewer.js +34 -39
  756. package/src/roles/agent-role.js +9 -1
  757. package/src/roles/coder-role.js +6 -3
  758. package/src/roles/reviewer-role.js +20 -23
  759. package/src/session/journal/summary-writer.js +55 -1
  760. package/src/utils/budget.js +38 -9
  761. package/src/utils/telemetry.js +43 -0
@@ -1,6 +1,7 @@
1
1
  import { buildRtkInstructions } from "./rtk-snippet.js";
2
2
  import { loadAvailableSkills, buildSkillSection } from "../skills/skill-loader.js";
3
3
  import { getLanguageInstruction } from "../utils/locale.js";
4
+ import { section, buildPromptLayout, joinLayout, STABLE, VOLATILE } from "./prompt-layout.js";
4
5
 
5
6
  const SUBAGENT_PREAMBLE = [
6
7
  "IMPORTANT: You are running as a Karajan sub-agent.",
@@ -24,51 +25,45 @@ const SERENA_INSTRUCTIONS = [
24
25
  "Fall back to reading files only when Serena tools are not sufficient."
25
26
  ].join("\n");
26
27
 
27
- export async function buildReviewerPrompt({ task, diff, reviewRules, mode, serenaEnabled = false, rtkAvailable = false, productContext = null, domainContext = null, projectDir = null, language = "en", provider = null }) {
28
+ /**
29
+ * Build the reviewer prompt as a { stable, volatile } layout (Φ1,
30
+ * KJC-PCS-0057). The stable block (preamble, mode, scope rules, JSON
31
+ * schema, serena/rtk, contexts, review rules, skills) is identical
32
+ * across reviews of the same project, so prefix-caching providers hit
33
+ * on it; the per-review content (task context + git diff, up to 12 KB
34
+ * and always different) goes last.
35
+ */
36
+ export async function buildReviewerPromptLayout({ task, diff, reviewRules, mode, serenaEnabled = false, rtkAvailable = false, productContext = null, domainContext = null, projectDir = null, language = "en", provider = null }) {
28
37
  const truncatedDiff = diff.length > 12000 ? `${diff.slice(0, 12000)}\n\n[TRUNCATED]` : diff;
29
38
 
30
39
  const langInstruction = getLanguageInstruction(language);
31
- const sections = [
32
- serenaEnabled ? SUBAGENT_PREAMBLE_SERENA : SUBAGENT_PREAMBLE,
33
- ...(langInstruction ? [langInstruction] : []),
34
- `You are a code reviewer in ${mode} mode.`,
35
- "CRITICAL SCOPE RULE: Only review changes that are part of the diff below. Do NOT flag issues in unchanged code, missing features planned for future tasks, or improvements outside the scope of this task. If the diff is correct for what the task asks, approve it — even if the broader codebase has other issues.",
36
- "Only block approval for issues IN THE DIFF that are bugs, security vulnerabilities, or clear violations of the review rules.",
37
- "Return only one valid JSON object and nothing else.",
38
- "JSON schema:",
39
- '{"approved":boolean,"blocking_issues":[{"id":string,"severity":"critical|high|medium|low","file":string,"line":number,"description":string,"suggested_fix":string}],"non_blocking_suggestions":[string],"summary":string,"confidence":number}'
40
- ];
41
-
42
- if (serenaEnabled) {
43
- sections.push(SERENA_INSTRUCTIONS);
44
- }
45
-
46
40
  const rtkSnippet = buildRtkInstructions({ rtkAvailable });
47
- if (rtkSnippet) {
48
- sections.push(rtkSnippet);
49
- }
50
-
51
- if (productContext) {
52
- sections.push(`## Product Context\n${productContext}`);
53
- }
54
-
55
- if (domainContext) {
56
- sections.push(`## Domain Context\n${domainContext}`);
57
- }
58
-
59
- sections.push(
60
- `Task context:\n${task}`,
61
- `Review rules:\n${reviewRules}`,
62
- `Git diff:\n${truncatedDiff}`
63
- );
64
-
41
+ let skillSection = null;
65
42
  if (projectDir) {
66
43
  const skills = await loadAvailableSkills(projectDir);
67
- const skillSection = buildSkillSection(skills, { provider, role: "reviewer" });
68
- if (skillSection) {
69
- sections.push(skillSection);
70
- }
44
+ skillSection = buildSkillSection(skills, { provider, role: "reviewer" });
71
45
  }
72
46
 
73
- return sections.join("\n\n");
47
+ return buildPromptLayout([
48
+ section(serenaEnabled ? SUBAGENT_PREAMBLE_SERENA : SUBAGENT_PREAMBLE, STABLE),
49
+ section(langInstruction, STABLE),
50
+ section(`You are a code reviewer in ${mode} mode.`, STABLE),
51
+ section("CRITICAL SCOPE RULE: Only review changes that are part of the diff below. Do NOT flag issues in unchanged code, missing features planned for future tasks, or improvements outside the scope of this task. If the diff is correct for what the task asks, approve it — even if the broader codebase has other issues.", STABLE),
52
+ section("Only block approval for issues IN THE DIFF that are bugs, security vulnerabilities, or clear violations of the review rules.", STABLE),
53
+ section("Return only one valid JSON object and nothing else.", STABLE),
54
+ section("JSON schema:", STABLE),
55
+ section('{"approved":boolean,"blocking_issues":[{"id":string,"severity":"critical|high|medium|low","file":string,"line":number,"description":string,"suggested_fix":string}],"non_blocking_suggestions":[string],"summary":string,"confidence":number}', STABLE),
56
+ section(serenaEnabled ? SERENA_INSTRUCTIONS : null, STABLE),
57
+ section(rtkSnippet, STABLE),
58
+ section(productContext ? `## Product Context\n${productContext}` : null, STABLE),
59
+ section(domainContext ? `## Domain Context\n${domainContext}` : null, STABLE),
60
+ section(`Review rules:\n${reviewRules}`, STABLE),
61
+ section(skillSection, STABLE),
62
+ section(`Task context:\n${task}`, VOLATILE),
63
+ section(`Git diff:\n${truncatedDiff}`, VOLATILE),
64
+ ]);
65
+ }
66
+
67
+ export async function buildReviewerPrompt(options) {
68
+ return joinLayout(await buildReviewerPromptLayout(options));
74
69
  }
@@ -123,12 +123,20 @@ export class AgentRole extends BaseRole {
123
123
  const agent = this.createAgentInstance(provider);
124
124
 
125
125
  const promptResult = await this.buildPrompt(extracted);
126
- const { prompt, onOutput } = typeof promptResult === "string"
126
+ const { prompt, onOutput, stablePrompt, volatilePrompt } = typeof promptResult === "string"
127
127
  ? { prompt: promptResult, onOutput: extracted.onOutput }
128
128
  : { onOutput: extracted.onOutput, ...promptResult };
129
129
 
130
130
  const runArgs = { prompt, role: this.name };
131
131
  if (onOutput) runArgs.onOutput = onOutput;
132
+ // Φ1-D (KJC-PCS-0057): roles that build their prompt as a
133
+ // stable/volatile layout forward both buckets so cache-aware agents
134
+ // (ClaudeAgent) can ship the stable block as system prompt. Agents
135
+ // that don't know the fields keep reading `prompt` as before.
136
+ if (stablePrompt && volatilePrompt) {
137
+ runArgs.stablePrompt = stablePrompt;
138
+ runArgs.volatilePrompt = volatilePrompt;
139
+ }
132
140
  // Kill a hung agent: without a silence timeout a coder / reviewer
133
141
  // that stalls with no output left `kj run` waiting indefinitely.
134
142
  // PlannerRole set this itself; every other role was unprotected.
@@ -1,5 +1,6 @@
1
1
  import { AgentRole } from "./agent-role.js";
2
- import { buildCoderPrompt } from "../prompts/coder.js";
2
+ import { buildCoderPromptLayout } from "../prompts/coder.js";
3
+ import { joinLayout } from "../prompts/prompt-layout.js";
3
4
  import { isHostAgent } from "../utils/agent-detect.js";
4
5
  import { HostAgent } from "../agents/host-agent.js";
5
6
  import { detectProjectStack } from "../utils/stack-detect.js";
@@ -66,7 +67,7 @@ export class CoderRole extends AgentRole {
66
67
  try { stack = await detectProjectStack(projectDir); } catch { /* best-effort */ }
67
68
  try { testFramework = await detectTestFramework(projectDir); } catch { /* best-effort */ }
68
69
  }
69
- const prompt = await buildCoderPrompt({
70
+ const layout = await buildCoderPromptLayout({
70
71
  task, reviewerFeedback, sonarSummary, deferredContext, acceptanceTests,
71
72
  adrs, specSection, reviewerFindings, huId,
72
73
  coderRules: this.instructions,
@@ -79,7 +80,9 @@ export class CoderRole extends AgentRole {
79
80
  stack, testFramework,
80
81
  provider: this._resolvedProvider || (typeof this.resolveProvider === "function" ? this.resolveProvider() : null)
81
82
  });
82
- return { prompt };
83
+ // Φ1-D: prompt is the joined layout (identical for every agent);
84
+ // the buckets ride along so ClaudeAgent can system-split them.
85
+ return { prompt: joinLayout(layout), stablePrompt: layout.stable, volatilePrompt: layout.volatile };
83
86
  }
84
87
 
85
88
  buildSuccessResult(parsed, provider, agentResult) {
@@ -1,6 +1,7 @@
1
1
  import { AgentRole } from "./agent-role.js";
2
2
  import { buildRtkInstructions } from "../prompts/rtk-snippet.js";
3
3
  import { extractFirstJson } from "../utils/json-extract.js";
4
+ import { section, buildPromptLayout, joinLayout, STABLE, VOLATILE } from "../prompts/prompt-layout.js";
4
5
 
5
6
  const MAX_DIFF_LENGTH = 12000;
6
7
 
@@ -32,30 +33,26 @@ export class ReviewerRole extends AgentRole {
32
33
  };
33
34
  }
34
35
 
36
+ // Φ1-E (KJC-PCS-0057): stable block (preamble, instructions, mode,
37
+ // schema, contexts, rtk, review rules) first; task + diff — different
38
+ // on every review — last. The buckets ride along so ClaudeAgent can
39
+ // ship the stable block via --append-system-prompt (Φ1-D).
35
40
  async buildPrompt({ task, diff, reviewRules }) {
36
- const sections = [SUBAGENT_PREAMBLE];
37
- if (this.instructions) sections.push(this.instructions);
38
- sections.push(
39
- `You are a code reviewer in ${this.config?.review_mode || "standard"} mode.`,
40
- "Return only one valid JSON object and nothing else.",
41
- "JSON schema:",
42
- '{"approved":boolean,"blocking_issues":[{"id":string,"severity":"critical|high|medium|low","file":string,"line":number,"description":string,"suggested_fix":string}],"non_blocking_suggestions":[string],"summary":string,"confidence":number}',
43
- `Task context:\n${task}`
44
- );
45
-
46
- const pc = this.config?.productContext;
47
- if (pc) sections.push(`## Product Context\n${pc}`);
48
- const dc = this.config?.domainContext;
49
- if (dc) sections.push(`## Domain Context\n${dc}`);
50
-
51
- const rtkSnippet = buildRtkInstructions({
52
- rtkAvailable: Boolean(this.config?.rtk?.available)
53
- });
54
- if (rtkSnippet) sections.push(rtkSnippet);
55
- if (reviewRules) sections.push(`Review rules:\n${reviewRules}`);
56
- sections.push(`Git diff:\n${truncateDiff(diff)}`);
57
-
58
- return { prompt: sections.join("\n\n") };
41
+ const layout = buildPromptLayout([
42
+ section(SUBAGENT_PREAMBLE, STABLE),
43
+ section(this.instructions, STABLE),
44
+ section(`You are a code reviewer in ${this.config?.review_mode || "standard"} mode.`, STABLE),
45
+ section("Return only one valid JSON object and nothing else.", STABLE),
46
+ section("JSON schema:", STABLE),
47
+ section('{"approved":boolean,"blocking_issues":[{"id":string,"severity":"critical|high|medium|low","file":string,"line":number,"description":string,"suggested_fix":string}],"non_blocking_suggestions":[string],"summary":string,"confidence":number}', STABLE),
48
+ section(this.config?.productContext ? `## Product Context\n${this.config.productContext}` : null, STABLE),
49
+ section(this.config?.domainContext ? `## Domain Context\n${this.config.domainContext}` : null, STABLE),
50
+ section(buildRtkInstructions({ rtkAvailable: Boolean(this.config?.rtk?.available) }), STABLE),
51
+ section(reviewRules ? `Review rules:\n${reviewRules}` : null, STABLE),
52
+ section(`Task context:\n${task}`, VOLATILE),
53
+ section(`Git diff:\n${truncateDiff(diff)}`, VOLATILE),
54
+ ]);
55
+ return { prompt: joinLayout(layout), stablePrompt: layout.stable, volatilePrompt: layout.volatile };
59
56
  }
60
57
 
61
58
  parseOutput(raw) {
@@ -18,7 +18,7 @@ import path from "node:path";
18
18
  * @property {"APPROVED"|"REJECTED"|"PAUSED"|"FAILED"|string} result
19
19
  * @property {number} iterations
20
20
  * @property {number} durationMs
21
- * @property {{ total_cost_usd?: number, total_tokens?: number, breakdown_by_role?: Object }} [budget]
21
+ * @property {{ total_cost_usd?: number, total_tokens?: number, total_cached_tokens?: number, breakdown_by_role?: Object }} [budget]
22
22
  * @property {Record<string, { ok?: boolean, summary?: string }>} [stages]
23
23
  * @property {Array<{ hash?: string, message?: string, date?: string, author?: string }>} [commits]
24
24
  * @property {string[]} [files] - names of other journal files in the same dir
@@ -107,6 +107,55 @@ function renderBreakdownByRole(breakdown) {
107
107
  return ["| Role | Tokens | Cost |", "|---|---|---|", ...rows].join("\n");
108
108
  }
109
109
 
110
+ /**
111
+ * Render the Cache hits section (Φ0-F, KJC-TSK-0524). Shows how many input
112
+ * tokens were served from provider-side prompt caches, per role, plus a
113
+ * conservative dollar savings estimate.
114
+ *
115
+ * Savings formula: cached tokens are billed at ~10% of the input rate (the
116
+ * Anthropic/OpenAI convention). Per role:
117
+ * savings_usd ≈ cost_usd * (cached_tokens / tokens_in) * 0.9
118
+ * The estimate is approximate (output tokens also contribute to cost_usd)
119
+ * and labelled with `~$` so users don't read it as exact.
120
+ *
121
+ * Returns:
122
+ * - null when no budget data is available
123
+ * - "cold run" placeholder when cached == 0 across all roles
124
+ * - Markdown table sorted by cached tokens desc when there is cache activity
125
+ */
126
+ function renderCacheHits(budget) {
127
+ if (!budget) return null;
128
+ const totalCached = Number(budget.total_cached_tokens ?? 0);
129
+ const breakdown = budget.breakdown_by_role || {};
130
+ const entries = Object.entries(breakdown)
131
+ .map(([role, m]) => ({
132
+ role,
133
+ cached: Number(m?.cached_tokens || 0),
134
+ tokens_in: Number(m?.tokens_in || 0),
135
+ cost: Number(m?.total_cost_usd || 0),
136
+ }))
137
+ .filter((e) => e.cached > 0);
138
+
139
+ if (totalCached === 0 && entries.length === 0) {
140
+ return "_Cache hits: 0 tokens (cold run)._";
141
+ }
142
+
143
+ const rows = entries
144
+ .sort((a, b) => b.cached - a.cached)
145
+ .map((e) => {
146
+ const ratio = e.tokens_in > 0 ? (e.cached / e.tokens_in) * 100 : 0;
147
+ const savings = e.tokens_in > 0 ? e.cost * (e.cached / e.tokens_in) * 0.9 : 0;
148
+ return `| \`${esc(e.role)}\` | ${e.cached.toLocaleString("en-US")} | ${ratio.toFixed(1)}% | ~$${savings.toFixed(4)} |`;
149
+ });
150
+ const header = "| Role | Cached tokens | Ratio (cached/in) | Est. savings |\n|---|---|---|---|";
151
+ return [
152
+ `**Total cached**: ${totalCached.toLocaleString("en-US")} tokens`,
153
+ "",
154
+ header,
155
+ ...rows,
156
+ ].join("\n");
157
+ }
158
+
110
159
  /**
111
160
  * Render the Skills section: which process skills (addyosmani) were resolved
112
161
  * for the task, which OpenSkills were installed, and which skills would have
@@ -192,6 +241,11 @@ export function buildSummaryMarkdown(input) {
192
241
  sections.push("", "## Budget breakdown (by role)", "", breakdown);
193
242
  }
194
243
 
244
+ const cacheHitsSection = renderCacheHits(input.budget);
245
+ if (cacheHitsSection) {
246
+ sections.push("", "## Cache hits", "", cacheHitsSection);
247
+ }
248
+
195
249
  const skillsSection = renderSkills(input.skills);
196
250
  if (skillsSection) {
197
251
  sections.push("", "## Skills Used", "", skillsSection);
@@ -26,6 +26,13 @@ export function extractUsageMetrics(result, defaultModel = null) {
26
26
  usage?.output_tokens ??
27
27
  usage?.completion_tokens ??
28
28
  0;
29
+ const cached_tokens =
30
+ result?.cached_tokens ??
31
+ usage?.cached_tokens ??
32
+ usage?.cache_read_input_tokens ??
33
+ usage?.prompt_tokens_details?.cached_tokens ??
34
+ usage?.cachedContentTokenCount ??
35
+ 0;
29
36
  const cost_usd =
30
37
  result?.cost_usd ??
31
38
  usage?.cost_usd ??
@@ -58,7 +65,7 @@ export function extractUsageMetrics(result, defaultModel = null) {
58
65
  }
59
66
  }
60
67
 
61
- return { tokens_in: finalTokensIn, tokens_out: finalTokensOut, cost_usd, model, estimated };
68
+ return { tokens_in: finalTokensIn, tokens_out: finalTokensOut, cached_tokens, cost_usd, model, estimated };
62
69
  }
63
70
 
64
71
  function toSafeNumber(value) {
@@ -79,9 +86,10 @@ function normalizeLimit(limit) {
79
86
  }
80
87
 
81
88
  function addToBreakdown(map, key, entry) {
82
- const current = map[key] || { tokens_in: 0, tokens_out: 0, total_tokens: 0, total_cost_usd: 0, count: 0 };
89
+ const current = map[key] || { tokens_in: 0, tokens_out: 0, cached_tokens: 0, total_tokens: 0, total_cost_usd: 0, count: 0 };
83
90
  current.tokens_in += entry.tokens_in;
84
91
  current.tokens_out += entry.tokens_out;
92
+ current.cached_tokens += entry.cached_tokens || 0;
85
93
  current.total_tokens += entry.tokens_in + entry.tokens_out;
86
94
  current.total_cost_usd = roundUsd(current.total_cost_usd + entry.cost_usd);
87
95
  current.count += 1;
@@ -94,9 +102,10 @@ export class BudgetTracker {
94
102
  this.pricing = mergePricing(DEFAULT_MODEL_PRICING, options.pricing || {});
95
103
  }
96
104
 
97
- record({ role, provider, model, tokens_in, tokens_out, cost_usd, duration_ms, stage_index, estimated } = {}) {
105
+ record({ role, provider, model, tokens_in, tokens_out, cached_tokens, cost_usd, duration_ms, stage_index, estimated } = {}) {
98
106
  const safeTokensIn = toSafeNumber(tokens_in);
99
107
  const safeTokensOut = toSafeNumber(tokens_out);
108
+ const safeCached = toSafeNumber(cached_tokens);
100
109
  const hasExplicitCost = cost_usd !== undefined && cost_usd !== null && cost_usd !== "";
101
110
  const modelName = model || provider || null;
102
111
  const computedCost = calculateUsageCostUsd({
@@ -113,6 +122,7 @@ export class BudgetTracker {
113
122
  timestamp: new Date().toISOString(),
114
123
  tokens_in: safeTokensIn,
115
124
  tokens_out: safeTokensOut,
125
+ cached_tokens: safeCached,
116
126
  cost_usd: roundUsd(hasExplicitCost ? cost_usd : computedCost)
117
127
  };
118
128
  if (duration_ms !== undefined && duration_ms !== null) {
@@ -129,19 +139,36 @@ export class BudgetTracker {
129
139
  }
130
140
 
131
141
  total() {
142
+ return this._aggregate(this.entries);
143
+ }
144
+
145
+ _aggregate(entries) {
132
146
  let tokensIn = 0;
133
147
  let tokensOut = 0;
148
+ let cached = 0;
134
149
  let totalCost = 0;
135
- for (const entry of this.entries) {
150
+ for (const entry of entries) {
136
151
  tokensIn += entry.tokens_in;
137
152
  tokensOut += entry.tokens_out;
153
+ cached += entry.cached_tokens || 0;
138
154
  totalCost = roundUsd(totalCost + entry.cost_usd);
139
155
  }
140
- return {
141
- tokens_in: tokensIn,
142
- tokens_out: tokensOut,
143
- cost_usd: totalCost
144
- };
156
+ return { tokens_in: tokensIn, tokens_out: tokensOut, cached_tokens: cached, cost_usd: totalCost };
157
+ }
158
+
159
+ /**
160
+ * Snapshot cursor (Φ0-E). Returns an opaque marker pointing at the current
161
+ * end of the entries log. Pair with `since(cursor)` to compute per-HU deltas
162
+ * without resetting global accumulators (per-HU isolation).
163
+ */
164
+ cursor() {
165
+ return this.entries.length;
166
+ }
167
+
168
+ since(cursor = 0) {
169
+ const start = Number.isFinite(cursor) && cursor >= 0 ? Math.min(cursor, this.entries.length) : 0;
170
+ const slice = this.entries.slice(start);
171
+ return { ...this._aggregate(slice), count: slice.length };
145
172
  }
146
173
 
147
174
  remaining(limit) {
@@ -171,6 +198,7 @@ export class BudgetTracker {
171
198
  const hasEstimates = this.entries.some(e => e.estimated);
172
199
  const result = {
173
200
  total_tokens: totals.tokens_in + totals.tokens_out,
201
+ total_cached_tokens: totals.cached_tokens,
174
202
  total_cost_usd: totals.cost_usd,
175
203
  breakdown_by_role: byRole,
176
204
  entries: [...this.entries],
@@ -191,6 +219,7 @@ export class BudgetTracker {
191
219
  duration_ms: entry.duration_ms ?? null,
192
220
  tokens_in: entry.tokens_in,
193
221
  tokens_out: entry.tokens_out,
222
+ cached_tokens: entry.cached_tokens || 0,
194
223
  cost_usd: entry.cost_usd
195
224
  };
196
225
  if (entry.estimated) item.estimated = true;
@@ -26,6 +26,49 @@ export function buildTelemetryPayload(eventName, data = {}) {
26
26
  };
27
27
  }
28
28
 
29
+ /**
30
+ * Φ0-H (KJC-TSK-0526): aggregate cache-hit ratio per role from the budget
31
+ * summary the orchestrator already builds. Returns `{ cached_pct_coder,
32
+ * cached_pct_reviewer, cached_pct_total }` with values rounded to one
33
+ * decimal, or `null` per slot when there is no measurable input (rather
34
+ * than `0`, so the backend can distinguish "no cache" from "no signal").
35
+ *
36
+ * Provider-agnostic by design: the BudgetTracker entries already
37
+ * normalise `cached_tokens` for Anthropic (`cache_read_input_tokens`),
38
+ * OpenAI / Codex (`prompt_tokens_details.cached_tokens`), Gemini
39
+ * (`cachedContentTokenCount`) and the LiteLLM-routed providers
40
+ * (aider, opencode), so this helper does not need to know which
41
+ * provider produced the run.
42
+ *
43
+ * @param {{ breakdown_by_role?: object, total_cached_tokens?: number } | null | undefined} summary
44
+ * @returns {{ cached_pct_coder: number|null, cached_pct_reviewer: number|null, cached_pct_total: number|null }}
45
+ */
46
+ export function computeCachedPct(summary) {
47
+ const empty = { cached_pct_coder: null, cached_pct_reviewer: null, cached_pct_total: null };
48
+ if (!summary || typeof summary !== "object") return empty;
49
+ const ratio = (cached, tokensIn) => {
50
+ const c = Number(cached);
51
+ const t = Number(tokensIn);
52
+ if (!Number.isFinite(c) || !Number.isFinite(t) || t <= 0 || c < 0) return null;
53
+ return Math.round((c / t) * 1000) / 10;
54
+ };
55
+ const byRole = summary.breakdown_by_role || {};
56
+ const coder = byRole.coder || null;
57
+ const reviewer = byRole.reviewer || null;
58
+ let totalCached = 0;
59
+ let totalIn = 0;
60
+ for (const role of Object.keys(byRole)) {
61
+ const r = byRole[role];
62
+ totalCached += Number(r?.cached_tokens || 0);
63
+ totalIn += Number(r?.tokens_in || 0);
64
+ }
65
+ return {
66
+ cached_pct_coder: coder ? ratio(coder.cached_tokens, coder.tokens_in) : null,
67
+ cached_pct_reviewer: reviewer ? ratio(reviewer.cached_tokens, reviewer.tokens_in) : null,
68
+ cached_pct_total: ratio(totalCached, totalIn)
69
+ };
70
+ }
71
+
29
72
  /**
30
73
  * Send an anonymous telemetry event. Non-blocking, fire-and-forget.
31
74
  * Never throws, never blocks the pipeline.