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
@@ -0,0 +1,138 @@
1
+ <sup>yoctocolors 🌈</sup>
2
+
3
+ > The smallest and fastest command-line coloring package on the internet
4
+
5
+ *Check out [Chalk](https://github.com/chalk/chalk) if you want something more mature and comprehensive.*
6
+
7
+ ## Highlights
8
+
9
+ - Tiny
10
+ - Fast
11
+ - Handles nested colors
12
+ - Tree-shakeable
13
+ - No dependencies
14
+ - Actively maintained
15
+
16
+ ## Install
17
+
18
+ ESM:
19
+
20
+ ```sh
21
+ npm install yoctocolors
22
+ ```
23
+
24
+ Or CommonJS:
25
+
26
+ ```sh
27
+ npm install yoctocolors-cjs
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ ```js
33
+ import colors from 'yoctocolors';
34
+
35
+ console.log(colors.red('Yo!'));
36
+
37
+ console.log(colors.blue(`Welcome to the ${colors.green('yoctocolors')} package!`));
38
+ ```
39
+
40
+ You can also import colors as named imports:
41
+
42
+ ```js
43
+ import {red, blue, green} from 'yoctocolors';
44
+
45
+ console.log(red('Yo!'));
46
+
47
+ console.log(blue(`Welcome to the ${green('yoctocolors')} package!`));
48
+ ```
49
+
50
+ *This package supports [basic color detection](https://nodejs.org/api/tty.html#writestreamhascolorscount-env). Colors can be forcefully enabled by setting the `FORCE_COLOR` environment variable to `1` and can be forcefully disabled by setting `NO_COLOR` or `NODE_DISABLE_COLORS` to any value. [More info.](https://nodejs.org/api/tty.html#writestreamgetcolordepthenv)*
51
+
52
+ ## Styles
53
+
54
+ ### Modifiers
55
+
56
+ - `reset` - Reset the current style.
57
+ - `bold` - Make the text bold.
58
+ - `dim` - Make the text have lower opacity.
59
+ - `italic` - Make the text italic. *(Not widely supported)*
60
+ - `underline` - Put a horizontal line above the text. *(Not widely supported)*
61
+ - `overline` - Put a horizontal line below the text. *(Not widely supported)*
62
+ - `inverse`- Invert background and foreground colors.
63
+ - `hidden` - Print the text but make it invisible.
64
+ - `strikethrough` - Put a horizontal line through the center of the text. *(Not widely supported)*
65
+
66
+ ### Colors
67
+
68
+ - `black`
69
+ - `red`
70
+ - `green`
71
+ - `yellow`
72
+ - `blue`
73
+ - `magenta`
74
+ - `cyan`
75
+ - `white`
76
+ - `gray`
77
+ - `redBright`
78
+ - `greenBright`
79
+ - `yellowBright`
80
+ - `blueBright`
81
+ - `magentaBright`
82
+ - `cyanBright`
83
+ - `whiteBright`
84
+
85
+ ### Background colors
86
+
87
+ - `bgBlack`
88
+ - `bgRed`
89
+ - `bgGreen`
90
+ - `bgYellow`
91
+ - `bgBlue`
92
+ - `bgMagenta`
93
+ - `bgCyan`
94
+ - `bgWhite`
95
+ - `bgGray`
96
+ - `bgRedBright`
97
+ - `bgGreenBright`
98
+ - `bgYellowBright`
99
+ - `bgBlueBright`
100
+ - `bgMagentaBright`
101
+ - `bgCyanBright`
102
+ - `bgWhiteBright`
103
+
104
+ ## Prior art
105
+
106
+ Yes
107
+
108
+ ## Benchmark
109
+
110
+ ```sh
111
+ $ ./benchmark.js
112
+ ┌─────────┬────────────────┬─────────────┐
113
+ │ (index) │ library │ ops/sec │
114
+ ├─────────┼────────────────┼─────────────┤
115
+ │ 0 │ 'yoctocolors' │ '8,000,000' │
116
+ │ 1 │ 'colorette' │ '8,000,000' │
117
+ │ 2 │ 'picocolors' │ '8,000,000' │
118
+ │ 3 │ 'nanocolors' │ '5,988,024' │
119
+ │ 4 │ 'chalk' │ '4,807,692' │
120
+ │ 5 │ 'kleur/colors' │ '4,807,692' │
121
+ │ 6 │ 'kleur' │ '4,784,689' │
122
+ │ 7 │ 'ansi-colors' │ '2,178,649' │
123
+ │ 8 │ 'cli-color' │ '585,138' │
124
+ └─────────┴────────────────┴─────────────┘
125
+ ```
126
+
127
+ *See [benchmark.js](benchmark.js).*
128
+
129
+ ## FAQ
130
+
131
+ ### What is yocto?
132
+
133
+ [It was the smallest official unit prefix in the metric system until 2022.](https://en.wikipedia.org/wiki/Yocto-) Much smaller than nano.
134
+
135
+ ## Related
136
+
137
+ - [yoctodelay](https://github.com/sindresorhus/yoctodelay) - Delay a promise a given amount of time
138
+ - [chalk](https://github.com/chalk/chalk) - Terminal string styling
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karajan-code",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
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",
@@ -84,6 +84,7 @@
84
84
  },
85
85
  "dependencies": {
86
86
  "@babel/parser": "^7.29.7",
87
+ "@karajan/core": "*",
87
88
  "@modelcontextprotocol/sdk": "^1.29.0",
88
89
  "better-sqlite3": "^12.10.0",
89
90
  "chokidar": "^5.0.0",
@@ -99,6 +100,9 @@
99
100
  "valibot": "^1.4.1",
100
101
  "web-tree-sitter": "^0.26.9"
101
102
  },
103
+ "bundleDependencies": [
104
+ "@karajan/core"
105
+ ],
102
106
  "devDependencies": {
103
107
  "@eslint/js": "^10.0.1",
104
108
  "@vitest/coverage-v8": "^4.1.8",
@@ -40,6 +40,9 @@ async function renderBoard() {
40
40
  api(`/api/projects/${encodeURIComponent(selectedProject)}/cost`).catch(() => null),
41
41
  ]);
42
42
  const costSummary = projectCost ? formatProjectCostSummary(projectCost) : null;
43
+ // Φ0-G (KJC-TSK-0525): aggregated cache-hit badge at the project
44
+ // header, rendered alongside the project cost chip.
45
+ const cacheSummary = projectCost ? formatCacheRatio(projectCost.cachedTokens, projectCost.tokensIn) : null;
43
46
 
44
47
  // Pre-resolve project initials + name for every distinct project_id in
45
48
  // the fetched stories so `renderStoryCard` is synchronous and the header
@@ -101,6 +104,7 @@ async function renderBoard() {
101
104
  ` : ''}
102
105
  <span class="section-header__count">${stories.length} stories</span>
103
106
  ${costSummary ? `<span class="section-header__cost" title="${esc(costSummary.tooltip)}">💵 ${esc(costSummary.label)}</span>` : ''}
107
+ ${cacheSummary ? `<span class="section-header__cache" title="${esc(cacheSummary.tooltip)}">${esc(cacheSummary.label)}</span>` : ''}
104
108
  ${isRunning ? `
105
109
  <button id="running-badge-btn" class="section-header__badge"
106
110
  style="margin-left:auto;padding:4px 10px;font-size:0.8rem;background:var(--color-yellow,#eab308);color:#000;border-radius:var(--radius-sm);font-weight:600;border:none;cursor:pointer;"
@@ -381,6 +385,13 @@ function renderStoryCard(story) {
381
385
  const c = formatCost(story.cost_usd);
382
386
  return c ? `<span class="story-card__cost" title="${esc(c.tooltip)}">💵 ${esc(c.label)}</span>` : '';
383
387
  })()}
388
+ ${(() => {
389
+ // Φ0-G (KJC-TSK-0525): per-HU cache hit badge. Rendered next to
390
+ // the cost so users can correlate "this run cost $X and 73% of
391
+ // input was served from cache" in one glance.
392
+ const r = formatCacheRatio(story.cached_tokens, story.tokens_in);
393
+ return r ? `<span class="story-card__cache" title="${esc(r.tooltip)}">${esc(r.label)}</span>` : '';
394
+ })()}
384
395
  </div>
385
396
  ${missingTestContract ? `
386
397
  <div class="story-card__meta" style="margin-top:4px;font-size:0.75rem;color:var(--color-yellow,#eab308);font-weight:600" title="This HU has no acceptance_tests declared — Run plan will reject it until you add at least one.">
@@ -55,6 +55,26 @@ function formatCost(costUsd) {
55
55
  };
56
56
  }
57
57
 
58
+ // Φ0-G (KJC-TSK-0525): mirror of formatCacheRatio in src/format.js.
59
+ // Kept duplicated because this file is a classic script loaded into
60
+ // the browser, while src/format.js uses ES modules and is consumed by
61
+ // Node tests. See KJC-TSK-0501 header notes above.
62
+ function formatCacheRatio(cachedTokens, tokensIn) {
63
+ if (cachedTokens === null || cachedTokens === undefined) return null;
64
+ if (tokensIn === null || tokensIn === undefined) return null;
65
+ const c = Number(cachedTokens);
66
+ const t = Number(tokensIn);
67
+ if (!Number.isFinite(c) || !Number.isFinite(t)) return null;
68
+ if (t <= 0 || c < 0) return null;
69
+ const pct = Math.round((c / t) * 1000) / 10;
70
+ const num = c.toLocaleString("en-US");
71
+ const den = t.toLocaleString("en-US");
72
+ return {
73
+ label: `🎯 ${pct}%`,
74
+ tooltip: `Cache hits: ${num} / ${den} input tokens (${pct}%)`,
75
+ };
76
+ }
77
+
58
78
  function formatProjectCostSummary(cost) {
59
79
  if (!cost || typeof cost !== "object") return null;
60
80
  const total = Number(cost.totalUsd);
@@ -63,6 +83,9 @@ function formatProjectCostSummary(cost) {
63
83
  if (total === 0 && byPlan.length === 0) return null;
64
84
 
65
85
  const lines = [`Total: $${total.toFixed(4)}`];
86
+ // Φ0-G (KJC-TSK-0525): aggregate cache hits line + per-plan suffix.
87
+ const projCache = formatCacheRatio(cost.cachedTokens, cost.tokensIn);
88
+ if (projCache) lines.push(`Cache: ${projCache.tooltip.split(": ")[1]}`);
66
89
  if (byPlan.length > 0) {
67
90
  lines.push("By plan:");
68
91
  for (const p of byPlan) {
@@ -70,7 +93,11 @@ function formatProjectCostSummary(cost) {
70
93
  if (!Number.isFinite(planTotal)) continue;
71
94
  const huCount = Number.isFinite(p?.huCount) ? p.huCount : 0;
72
95
  const planLabel = p?.planId || "unassigned";
73
- lines.push(` ${planLabel}: $${planTotal.toFixed(2)} (${huCount} HU${huCount === 1 ? "" : "s"})`);
96
+ const cachePct = p?.cachedRatioPct;
97
+ const cacheSuffix = (cachePct !== null && cachePct !== undefined && Number.isFinite(Number(cachePct)))
98
+ ? ` 🎯 ${cachePct}%`
99
+ : "";
100
+ lines.push(` ${planLabel}: $${planTotal.toFixed(2)} (${huCount} HU${huCount === 1 ? "" : "s"})${cacheSuffix}`);
74
101
  }
75
102
  }
76
103
  const unk = cost.unknownModelTokens;
@@ -328,6 +328,13 @@ export function initDb() {
328
328
  // renders "—" while NULL. Stored as REAL so the SQL aggregations in
329
329
  // Cost E (/api/projects/:id/cost) can SUM directly without parsing.
330
330
  try { db.exec('ALTER TABLE stories ADD COLUMN cost_usd REAL'); } catch { /* already migrated */ }
331
+ // KJC-TSK-0525 (Φ0-G): persisted cached/input tokens per HU so the
332
+ // board can render the "🎯 N% cached" badge without re-parsing the
333
+ // session summary. NULL = unmeasured (older runs, cold runs without
334
+ // cache support). INTEGER because providers report token counts as
335
+ // ints. Ratio is computed at read time as cached_tokens / tokens_in.
336
+ try { db.exec('ALTER TABLE stories ADD COLUMN cached_tokens INTEGER'); } catch { /* already migrated */ }
337
+ try { db.exec('ALTER TABLE stories ADD COLUMN tokens_in INTEGER'); } catch { /* already migrated */ }
331
338
  try { db.exec('CREATE INDEX IF NOT EXISTS idx_stories_plan ON stories(plan_id)'); } catch { /* ignore */ }
332
339
 
333
340
  // is_test (KJC-TSK-0371 — board polish #3): per-project flag that
@@ -530,6 +537,35 @@ export function setStoryCost(storyId, costUsd) {
530
537
  return res.changes > 0;
531
538
  }
532
539
 
540
+ /**
541
+ * Persist cached/input tokens for a HU (KJC-TSK-0525, Φ0-G). Called by
542
+ * the orchestrator alongside `setStoryCost` once the HU finishes. Both
543
+ * values come from `BudgetTracker.since(huCursor)` (Φ0-E). Pass `null`
544
+ * to clear either cell. Non-finite numbers throw so callers don't
545
+ * silently null-out real telemetry.
546
+ *
547
+ * @param {string} storyId
548
+ * @param {number|null} cachedTokens
549
+ * @param {number|null} tokensIn
550
+ * @returns {boolean} true when the row existed and was updated
551
+ */
552
+ export function setStoryCachedTokens(storyId, cachedTokens, tokensIn) {
553
+ const coerce = (v, name) => {
554
+ if (v === null || v === undefined) return null;
555
+ const n = Number(v);
556
+ if (!Number.isFinite(n) || n < 0) {
557
+ throw new Error(`setStoryCachedTokens: ${name} must be a non-negative finite number or null (got ${v})`);
558
+ }
559
+ return Math.round(n);
560
+ };
561
+ const cached = coerce(cachedTokens, 'cachedTokens');
562
+ const tin = coerce(tokensIn, 'tokensIn');
563
+ const res = getDb()
564
+ .prepare('UPDATE stories SET cached_tokens = ?, tokens_in = ?, updated_at = ? WHERE id = ?')
565
+ .run(cached, tin, new Date().toISOString(), storyId);
566
+ return res.changes > 0;
567
+ }
568
+
533
569
  /**
534
570
  * List every distinct `plan_id` stamped on the stories of a given project.
535
571
  * Used by "mark plan ready" so the board can act on each plan of a project
@@ -643,9 +679,13 @@ export function getProjectCost(projectId) {
643
679
  .get(projectId);
644
680
  if (!project) return null;
645
681
 
682
+ // Φ0-G: cached_tokens / tokens_in are nullable independently of
683
+ // cost_usd, so we read all three columns but keep cost as the
684
+ // primary filter (a row with only cache telemetry but no $ should
685
+ // not appear in the per-plan totals — cost rules the byPlan list).
646
686
  const rows = getDb()
647
687
  .prepare(
648
- `SELECT plan_id, cost_usd FROM stories
688
+ `SELECT plan_id, cost_usd, cached_tokens, tokens_in FROM stories
649
689
  WHERE project_id = ? AND cost_usd IS NOT NULL`
650
690
  )
651
691
  .all(projectId);
@@ -653,24 +693,43 @@ export function getProjectCost(projectId) {
653
693
  const round4 = (n) => Math.round(n * 10000) / 10000;
654
694
  const byPlanMap = new Map();
655
695
  let totalUsd = 0;
696
+ let totalCached = 0;
697
+ let totalTokensIn = 0;
656
698
  for (const r of rows) {
657
699
  const planId = r.plan_id || 'unassigned';
658
700
  const cost = Number(r.cost_usd);
659
701
  if (!Number.isFinite(cost)) continue;
660
702
  totalUsd += cost;
661
- const cur = byPlanMap.get(planId) || { planId, totalUsd: 0, huCount: 0 };
703
+ const cached = Number(r.cached_tokens);
704
+ const tin = Number(r.tokens_in);
705
+ if (Number.isFinite(cached) && cached >= 0) totalCached += cached;
706
+ if (Number.isFinite(tin) && tin >= 0) totalTokensIn += tin;
707
+ const cur = byPlanMap.get(planId) || { planId, totalUsd: 0, huCount: 0, cachedTokens: 0, tokensIn: 0 };
662
708
  cur.totalUsd += cost;
663
709
  cur.huCount += 1;
710
+ if (Number.isFinite(cached) && cached >= 0) cur.cachedTokens += cached;
711
+ if (Number.isFinite(tin) && tin >= 0) cur.tokensIn += tin;
664
712
  byPlanMap.set(planId, cur);
665
713
  }
666
714
 
715
+ const ratio = (cached, tin) => tin > 0 ? Math.round((cached / tin) * 1000) / 10 : null;
667
716
  const byPlan = Array.from(byPlanMap.values())
668
- .map((p) => ({ planId: p.planId, totalUsd: round4(p.totalUsd), huCount: p.huCount }))
717
+ .map((p) => ({
718
+ planId: p.planId,
719
+ totalUsd: round4(p.totalUsd),
720
+ huCount: p.huCount,
721
+ cachedTokens: p.cachedTokens,
722
+ tokensIn: p.tokensIn,
723
+ cachedRatioPct: ratio(p.cachedTokens, p.tokensIn),
724
+ }))
669
725
  .sort((a, b) => b.totalUsd - a.totalUsd);
670
726
 
671
727
  return {
672
728
  totalUsd: round4(totalUsd),
673
729
  byPlan,
730
+ cachedTokens: totalCached,
731
+ tokensIn: totalTokensIn,
732
+ cachedRatioPct: ratio(totalCached, totalTokensIn),
674
733
  unknownModelTokens: { tokensIn: 0, tokensOut: 0, models: [] },
675
734
  currency: 'USD',
676
735
  };
@@ -87,6 +87,42 @@ export function formatCost(costUsd) {
87
87
  };
88
88
  }
89
89
 
90
+ /**
91
+ * Φ0-G (KJC-TSK-0525): per-HU and per-plan cached-tokens badge.
92
+ *
93
+ * Returns `{ label, tooltip }` for "🎯 23%" with a tooltip showing the
94
+ * exact numerator/denominator. Same "don't render 0% when there is no
95
+ * data" stance as formatCost — returns null when:
96
+ * - either arg is null/undefined/non-finite,
97
+ * - tokens_in is 0 (no input → ratio undefined, not zero),
98
+ * - cached is negative (would only happen from corrupted telemetry).
99
+ *
100
+ * The badge intentionally shows 1 decimal to keep narrow runs (e.g.
101
+ * a 73-token cache out of 1 200) readable without rounding to 0%.
102
+ *
103
+ * @param {number|null|undefined} cachedTokens
104
+ * @param {number|null|undefined} tokensIn
105
+ * @returns {{ label: string, tooltip: string } | null}
106
+ */
107
+ export function formatCacheRatio(cachedTokens, tokensIn) {
108
+ // Reject null/undefined explicitly — Number(null) coerces to 0,
109
+ // which would otherwise render an honest-looking "🎯 0%" badge for
110
+ // runs where we simply have no telemetry. Same stance as formatCost.
111
+ if (cachedTokens === null || cachedTokens === undefined) return null;
112
+ if (tokensIn === null || tokensIn === undefined) return null;
113
+ const c = Number(cachedTokens);
114
+ const t = Number(tokensIn);
115
+ if (!Number.isFinite(c) || !Number.isFinite(t)) return null;
116
+ if (t <= 0 || c < 0) return null;
117
+ const pct = Math.round((c / t) * 1000) / 10;
118
+ const num = c.toLocaleString("en-US");
119
+ const den = t.toLocaleString("en-US");
120
+ return {
121
+ label: `🎯 ${pct}%`,
122
+ tooltip: `Cache hits: ${num} / ${den} input tokens (${pct}%)`,
123
+ };
124
+ }
125
+
90
126
  /**
91
127
  * Format the aggregated project-level cost chip rendered in the board
92
128
  * header. Cost G (KJC-TSK-0518). Consumes the shape returned by
@@ -116,6 +152,11 @@ export function formatProjectCostSummary(cost) {
116
152
  if (total === 0 && byPlan.length === 0) return null;
117
153
 
118
154
  const lines = [`Total: $${total.toFixed(4)}`];
155
+ // Φ0-G (KJC-TSK-0525): when the API includes project-level cache
156
+ // counters, show the aggregate cached% line right under the total
157
+ // so users can see at a glance how much was served from cache.
158
+ const projCache = formatCacheRatio(cost.cachedTokens, cost.tokensIn);
159
+ if (projCache) lines.push(`Cache: ${projCache.tooltip.split(": ")[1]}`);
119
160
  if (byPlan.length > 0) {
120
161
  lines.push("By plan:");
121
162
  for (const p of byPlan) {
@@ -123,7 +164,11 @@ export function formatProjectCostSummary(cost) {
123
164
  if (!Number.isFinite(planTotal)) continue;
124
165
  const huCount = Number.isFinite(p?.huCount) ? p.huCount : 0;
125
166
  const planLabel = p?.planId || "unassigned";
126
- lines.push(` ${planLabel}: $${planTotal.toFixed(2)} (${huCount} HU${huCount === 1 ? "" : "s"})`);
167
+ const cachePct = p?.cachedRatioPct;
168
+ const cacheSuffix = (cachePct !== null && cachePct !== undefined && Number.isFinite(Number(cachePct)))
169
+ ? ` 🎯 ${cachePct}%`
170
+ : "";
171
+ lines.push(` ${planLabel}: $${planTotal.toFixed(2)} (${huCount} HU${huCount === 1 ? "" : "s"})${cacheSuffix}`);
127
172
  }
128
173
  }
129
174
  const unk = cost.unknownModelTokens;
@@ -1,6 +1,46 @@
1
1
  import { BaseAgent } from "./base-agent.js";
2
2
  import { resolveBin } from "./resolve-bin.js";
3
3
 
4
+ /**
5
+ * Extract token usage from Aider's stdout. Two shapes are supported:
6
+ *
7
+ * 1. LiteLLM passthrough — an OpenAI-style JSON `usage` block surfaces
8
+ * `prompt_tokens_details.cached_tokens` for prompt-cache hits.
9
+ * 2. Aider's native footer "Tokens: <sent> sent, <received> received
10
+ * [, <cached> cache hit]." (supports comma-separated and `k` suffix).
11
+ *
12
+ * Returns `{tokens_in, tokens_out, cached_tokens}` or null when no usage
13
+ * is found (= unmeasured; callers leave the fields undefined).
14
+ */
15
+ export function extractAiderUsage(text) {
16
+ if (!text) return null;
17
+ for (const line of text.split("\n")) {
18
+ const t = line.trim();
19
+ if (!t.startsWith("{")) continue;
20
+ let obj;
21
+ try { obj = JSON.parse(t); } catch { continue; }
22
+ const u = obj?.usage ?? (typeof obj?.prompt_tokens === "number" ? obj : null);
23
+ if (!u || typeof u.prompt_tokens !== "number") continue;
24
+ return {
25
+ tokens_in: u.prompt_tokens,
26
+ tokens_out: u.completion_tokens ?? 0,
27
+ cached_tokens: u.prompt_tokens_details?.cached_tokens ?? 0
28
+ };
29
+ }
30
+ const m = text.match(/Tokens:\s*([\d.,]+k?)\s*sent,\s*([\d.,]+k?)\s*received(?:,\s*([\d.,]+k?)\s*cache\s*hit)?/i);
31
+ if (!m) return null;
32
+ const parse = (s) => {
33
+ const c = s.replaceAll(",", "");
34
+ return c.toLowerCase().endsWith("k")
35
+ ? Math.round(parseFloat(c.slice(0, -1)) * 1000)
36
+ : Number(c);
37
+ };
38
+ const sent = parse(m[1]);
39
+ const recv = parse(m[2]);
40
+ if (!Number.isFinite(sent) || !Number.isFinite(recv)) return null;
41
+ return { tokens_in: sent, tokens_out: recv, cached_tokens: m[3] ? parse(m[3]) : 0 };
42
+ }
43
+
4
44
  export class AiderAgent extends BaseAgent {
5
45
  async runTask(task) {
6
46
  const role = task.role || "coder";
@@ -32,6 +72,7 @@ export class AiderAgent extends BaseAgent {
32
72
  silenceTimeoutMs: task.silenceTimeoutMs,
33
73
  timeout: task.timeoutMs
34
74
  });
35
- return { ok: res.exitCode === 0, output: res.stdout, error: res.stderr, exitCode: res.exitCode };
75
+ const usage = extractAiderUsage(res.stdout) ?? extractAiderUsage(res.stderr);
76
+ return { ok: res.exitCode === 0, output: res.stdout, error: res.stderr, exitCode: res.exitCode, ...usage };
36
77
  }
37
78
  }
@@ -68,8 +68,16 @@ function collectAssistantText(obj) {
68
68
  /**
69
69
  * Extract usage metrics from stream-json/json NDJSON output.
70
70
  * Looks for the "result" line which contains total_cost_usd,
71
- * usage.input_tokens/output_tokens, and modelUsage.
72
- * Returns an object with tokens_in, tokens_out, cost_usd, model or null if not found.
71
+ * usage.input_tokens/output_tokens, cache_read_input_tokens,
72
+ * cache_creation_input_tokens, and modelUsage.
73
+ *
74
+ * `cached_tokens` aggregates both cache_read_input_tokens (tokens served
75
+ * from Anthropic's automatic prompt cache) and cache_creation_input_tokens
76
+ * (tokens just written to the cache during this call). The sum represents
77
+ * the total volume of input that benefited from prompt-caching machinery.
78
+ *
79
+ * Returns an object with tokens_in, tokens_out, cached_tokens, cost_usd,
80
+ * model or null if not found.
73
81
  */
74
82
  function extractUsageFromStreamJson(raw) {
75
83
  const events = parseClaudeEvents(raw);
@@ -79,11 +87,14 @@ function extractUsageFromStreamJson(raw) {
79
87
 
80
88
  const tokens_in = obj.usage?.input_tokens ?? 0;
81
89
  const tokens_out = obj.usage?.output_tokens ?? 0;
90
+ const cache_read = obj.usage?.cache_read_input_tokens ?? 0;
91
+ const cache_creation = obj.usage?.cache_creation_input_tokens ?? 0;
92
+ const cached_tokens = cache_read + cache_creation;
82
93
  const cost_usd = obj.total_cost_usd ?? undefined;
83
94
  const modelUsage = obj.modelUsage;
84
95
  const model = modelUsage ? Object.keys(modelUsage)[0] || null : null;
85
96
 
86
- return { tokens_in, tokens_out, cost_usd, model };
97
+ return { tokens_in, tokens_out, cached_tokens, cost_usd, model };
87
98
  }
88
99
  return null;
89
100
  }
@@ -310,6 +321,21 @@ const ALLOWED_TOOLS = [
310
321
  "Read", "Write", "Edit", "Bash", "Glob", "Grep"
311
322
  ];
312
323
 
324
+ /**
325
+ * Base CLI args for a task (Φ1-D, KJC-PCS-0057). When the role provides the
326
+ * prompt split in stable/volatile buckets, the stable block travels via
327
+ * --append-system-prompt — the CLI places cache breakpoints on the system
328
+ * block, so Anthropic's prompt cache hits on it across iterations — and only
329
+ * the volatile block goes in the -p message. Without the split, legacy
330
+ * single-prompt behavior is unchanged.
331
+ */
332
+ function buildPromptArgs(task) {
333
+ if (task.stablePrompt && task.volatilePrompt) {
334
+ return ["-p", task.volatilePrompt, "--append-system-prompt", task.stablePrompt, "--allowedTools", ...ALLOWED_TOOLS];
335
+ }
336
+ return ["-p", task.prompt, "--allowedTools", ...ALLOWED_TOOLS];
337
+ }
338
+
313
339
  export class ClaudeAgent extends BaseAgent {
314
340
  async runTask(task) {
315
341
  const role = task.role || "coder";
@@ -334,7 +360,7 @@ export class ClaudeAgent extends BaseAgent {
334
360
  }
335
361
 
336
362
  async _runTaskExec(task, model, _role) {
337
- const args = ["-p", task.prompt, "--allowedTools", ...ALLOWED_TOOLS];
363
+ const args = buildPromptArgs(task);
338
364
  if (model) args.push("--model", model);
339
365
 
340
366
  // Use stream-json when onOutput is provided to get real-time feedback
@@ -362,7 +388,7 @@ export class ClaudeAgent extends BaseAgent {
362
388
  }
363
389
 
364
390
  async _reviewTaskExec(task, model) {
365
- const args = ["-p", task.prompt, "--allowedTools", ...ALLOWED_TOOLS, "--output-format", "stream-json", "--verbose"];
391
+ const args = [...buildPromptArgs(task), "--output-format", "stream-json", "--verbose"];
366
392
  if (model) args.push("--model", model);
367
393
  const res = await this.runCommand(resolveBin("claude"), args, cleanExecaOpts({
368
394
  onOutput: task.onOutput,
@@ -2,18 +2,55 @@ import { BaseAgent } from "./base-agent.js";
2
2
  import { resolveBin } from "./resolve-bin.js";
3
3
 
4
4
  /**
5
- * Extract token usage from Codex CLI stdout.
6
- * Codex prints "tokens used\n<number>" at the end, where number may have comma separators.
7
- * Returns { tokens_out } with the total token count, or null if not found.
8
- * Since Codex doesn't split input/output, we assign the total to tokens_out
9
- * as a conservative estimate for cost calculation.
5
+ * Try to extract an OpenAI-style `usage` JSON block from codex stdout.
6
+ *
7
+ * OpenAI's Chat Completions API exposes prompt-cache hits via
8
+ * `usage.prompt_tokens_details.cached_tokens` (since Aug 2024). Codex
9
+ * CLI doesn't surface this in its default footer, but newer flags or a
10
+ * wrapper may emit a JSON `usage` line. We scan stdout line-by-line and
11
+ * accept the first parseable object that carries `prompt_tokens`.
12
+ *
13
+ * Returns `{tokens_in, tokens_out, cached_tokens}` or null when absent.
14
+ */
15
+ function extractJsonUsage(stdout) {
16
+ for (const line of stdout.split("\n")) {
17
+ const trimmed = line.trim();
18
+ if (!trimmed.startsWith("{")) continue;
19
+ let obj;
20
+ try { obj = JSON.parse(trimmed); } catch { continue; }
21
+ const usage = obj?.usage ?? (typeof obj?.prompt_tokens === "number" ? obj : null);
22
+ if (!usage || typeof usage.prompt_tokens !== "number") continue;
23
+ return {
24
+ tokens_in: usage.prompt_tokens,
25
+ tokens_out: usage.completion_tokens ?? 0,
26
+ cached_tokens: usage.prompt_tokens_details?.cached_tokens ?? 0
27
+ };
28
+ }
29
+ return null;
30
+ }
31
+
32
+ /**
33
+ * Extract token usage from Codex CLI stdout. Two shapes are supported:
34
+ *
35
+ * 1. OpenAI-style JSON `usage` block (preferred):
36
+ * `{"usage":{"prompt_tokens":N,"completion_tokens":M,
37
+ * "prompt_tokens_details":{"cached_tokens":C}}}`
38
+ * → `{tokens_in:N, tokens_out:M, cached_tokens:C}`.
39
+ *
40
+ * 2. Legacy "tokens used\n<number>" footer (codex's default total,
41
+ * no cache visibility) → `{tokens_in:0, tokens_out, cached_tokens:0}`.
42
+ *
43
+ * Returns null when neither shape is found.
10
44
  */
11
45
  function extractCodexTokens(stdout) {
12
- const match = (stdout || "").match(/tokens?\s+used\s*\n\s*([\d,]+)/i);
46
+ if (!stdout) return null;
47
+ const json = extractJsonUsage(stdout);
48
+ if (json) return json;
49
+ const match = stdout.match(/tokens?\s+used\s*\n\s*([\d,]+)/i);
13
50
  if (!match) return null;
14
51
  const total = Number(match[1].replaceAll(/,/g, ""));
15
52
  if (!Number.isFinite(total) || total <= 0) return null;
16
- return { tokens_in: 0, tokens_out: total };
53
+ return { tokens_in: 0, tokens_out: total, cached_tokens: 0 };
17
54
  }
18
55
 
19
56
  export class CodexAgent extends BaseAgent {
@@ -1,6 +1,41 @@
1
1
  import { BaseAgent } from "./base-agent.js";
2
2
  import { resolveBin } from "./resolve-bin.js";
3
3
 
4
+ /**
5
+ * Extract Gemini's `usageMetadata` from stdout, including
6
+ * `cachedContentTokenCount` (Gemini's context-caching API metric,
7
+ * https://ai.google.dev/api/caching).
8
+ *
9
+ * The gemini CLI emits `usageMetadata` as part of its JSON response
10
+ * shape (today: only `--output-format json`, used in reviewTask; in
11
+ * plain runTask mode no usage is surfaced). When absent, returns null
12
+ * so the caller leaves `cached_tokens` undefined (= unmeasured,
13
+ * distinct from a measured 0).
14
+ */
15
+ export function extractGeminiUsage(text) {
16
+ if (!text) return null;
17
+ const candidates = [];
18
+ for (const line of text.split("\n")) {
19
+ const t = line.trim();
20
+ if (t.startsWith("{") || t.startsWith("[")) candidates.push(t);
21
+ }
22
+ candidates.push(text.trim());
23
+ for (const candidate of candidates) {
24
+ let obj;
25
+ try { obj = JSON.parse(candidate); } catch { continue; }
26
+ const meta = obj?.usageMetadata
27
+ ?? obj?.usage_metadata
28
+ ?? obj?.response?.usageMetadata;
29
+ if (!meta || typeof meta.promptTokenCount !== "number") continue;
30
+ return {
31
+ tokens_in: meta.promptTokenCount,
32
+ tokens_out: meta.candidatesTokenCount ?? 0,
33
+ cached_tokens: meta.cachedContentTokenCount ?? 0
34
+ };
35
+ }
36
+ return null;
37
+ }
38
+
4
39
  export class GeminiAgent extends BaseAgent {
5
40
  async runTask(task) {
6
41
  const role = task.role || "coder";
@@ -33,6 +68,7 @@ export class GeminiAgent extends BaseAgent {
33
68
  silenceTimeoutMs: task.silenceTimeoutMs,
34
69
  timeout: task.timeoutMs
35
70
  });
36
- return { ok: res.exitCode === 0, output: res.stdout, error: res.stderr, exitCode: res.exitCode };
71
+ const usage = extractGeminiUsage(res.stdout) ?? extractGeminiUsage(res.stderr);
72
+ return { ok: res.exitCode === 0, output: res.stdout, error: res.stderr, exitCode: res.exitCode, ...usage };
37
73
  }
38
74
  }