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.
- package/README.md +1 -1
- package/node_modules/@karajan/core/README.md +42 -0
- package/node_modules/@karajan/core/package.json +38 -0
- package/node_modules/@karajan/core/src/atomic-write.js +43 -0
- package/node_modules/@karajan/core/src/cost/index.js +102 -0
- package/node_modules/@karajan/core/src/hu-snapshot.js +105 -0
- package/node_modules/@karajan/core/src/index.js +18 -0
- package/node_modules/@karajan/core/src/paths.js +123 -0
- package/node_modules/@karajan/core/src/plan-hu-ops.js +338 -0
- package/node_modules/@karajan/core/src/plan-id.js +45 -0
- package/node_modules/@karajan/core/src/plan-validation.js +82 -0
- package/node_modules/@karajan/core/src/port-check.js +45 -0
- package/node_modules/@karajan/core/src/pricing/index.js +64 -0
- package/node_modules/@karajan/core/src/pricing/model-pricing.json +28 -0
- package/node_modules/@karajan/core/src/process.js +188 -0
- package/node_modules/@karajan/core/src/run-registry.js +115 -0
- package/node_modules/@karajan/core/src/shared-paths.js +41 -0
- package/node_modules/@karajan/core/src/standby-scheduler.js +92 -0
- package/node_modules/@karajan/core/src/standby-store.js +168 -0
- package/node_modules/@karajan/core/src/vec-store.js +253 -0
- package/node_modules/@karajan/core/tests/atomic-write.test.js +30 -0
- package/node_modules/@karajan/core/tests/cost/index.test.js +89 -0
- package/node_modules/@karajan/core/tests/hu-snapshot.test.js +39 -0
- package/node_modules/@karajan/core/tests/paths.test.js +51 -0
- package/node_modules/@karajan/core/tests/plan-hu-ops.test.js +68 -0
- package/node_modules/@karajan/core/tests/plan-id.test.js +21 -0
- package/node_modules/@karajan/core/tests/plan-validation.test.js +39 -0
- package/node_modules/@karajan/core/tests/port-check.test.js +47 -0
- package/node_modules/@karajan/core/tests/pricing/index.test.js +95 -0
- package/node_modules/@karajan/core/tests/process.test.js +22 -0
- package/node_modules/@karajan/core/tests/run-registry.test.js +71 -0
- package/node_modules/@karajan/core/tests/shared-paths.test.js +30 -0
- package/node_modules/@karajan/core/tests/standby.test.js +66 -0
- package/node_modules/@karajan/core/tests/vec-store.test.js +98 -0
- package/node_modules/@karajan/core/vitest.config.js +12 -0
- package/node_modules/@sec-ant/readable-stream/LICENSE +21 -0
- package/node_modules/@sec-ant/readable-stream/README.md +230 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterablePrototype.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterator.d.ts +27 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/fromAnyIterable.d.ts +6 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.js +5 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.js +5 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/index.js +8 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.js +3 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.js +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.js +4 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +89 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +34 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +6 -0
- package/node_modules/@sec-ant/readable-stream/dist/types/async-iterator.d.ts +11 -0
- package/node_modules/@sec-ant/readable-stream/package.json +96 -0
- package/node_modules/@sindresorhus/merge-streams/index.d.ts +44 -0
- package/node_modules/@sindresorhus/merge-streams/index.js +265 -0
- package/node_modules/@sindresorhus/merge-streams/license +9 -0
- package/node_modules/@sindresorhus/merge-streams/package.json +49 -0
- package/node_modules/@sindresorhus/merge-streams/readme.md +53 -0
- package/node_modules/base64-js/LICENSE +21 -0
- package/node_modules/base64-js/README.md +34 -0
- package/node_modules/base64-js/base64js.min.js +1 -0
- package/node_modules/base64-js/index.d.ts +3 -0
- package/node_modules/base64-js/index.js +150 -0
- package/node_modules/base64-js/package.json +47 -0
- package/node_modules/better-sqlite3/LICENSE +21 -0
- package/node_modules/better-sqlite3/README.md +99 -0
- package/node_modules/better-sqlite3/binding.gyp +38 -0
- package/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/node_modules/better-sqlite3/deps/common.gypi +68 -0
- package/node_modules/better-sqlite3/deps/copy.js +31 -0
- package/node_modules/better-sqlite3/deps/defines.gypi +42 -0
- package/node_modules/better-sqlite3/deps/download.sh +123 -0
- package/node_modules/better-sqlite3/deps/patches/1208.patch +15 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +268879 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +14335 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +739 -0
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +80 -0
- package/node_modules/better-sqlite3/deps/test_extension.c +21 -0
- package/node_modules/better-sqlite3/lib/database.js +90 -0
- package/node_modules/better-sqlite3/lib/index.js +3 -0
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
- package/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
- package/node_modules/better-sqlite3/lib/methods/function.js +31 -0
- package/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
- package/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
- package/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
- package/node_modules/better-sqlite3/lib/methods/table.js +189 -0
- package/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
- package/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
- package/node_modules/better-sqlite3/lib/util.js +12 -0
- package/node_modules/better-sqlite3/package.json +59 -0
- package/node_modules/better-sqlite3/src/addon.cpp +47 -0
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +74 -0
- package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
- package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
- package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
- package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
- package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
- package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
- package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
- package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
- package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
- package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
- package/node_modules/better-sqlite3/src/util/macros.cpp +83 -0
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
- package/node_modules/bindings/LICENSE.md +22 -0
- package/node_modules/bindings/README.md +98 -0
- package/node_modules/bindings/bindings.js +221 -0
- package/node_modules/bindings/package.json +28 -0
- package/node_modules/bl/.travis.yml +17 -0
- package/node_modules/bl/BufferList.js +396 -0
- package/node_modules/bl/LICENSE.md +13 -0
- package/node_modules/bl/README.md +247 -0
- package/node_modules/bl/bl.js +84 -0
- package/node_modules/bl/package.json +37 -0
- package/node_modules/bl/test/convert.js +21 -0
- package/node_modules/bl/test/indexOf.js +492 -0
- package/node_modules/bl/test/isBufferList.js +32 -0
- package/node_modules/bl/test/test.js +869 -0
- package/node_modules/buffer/AUTHORS.md +70 -0
- package/node_modules/buffer/LICENSE +21 -0
- package/node_modules/buffer/README.md +410 -0
- package/node_modules/buffer/index.d.ts +186 -0
- package/node_modules/buffer/index.js +1817 -0
- package/node_modules/buffer/package.json +96 -0
- package/node_modules/chownr/LICENSE +15 -0
- package/node_modules/chownr/README.md +3 -0
- package/node_modules/chownr/chownr.js +167 -0
- package/node_modules/chownr/package.json +29 -0
- package/node_modules/cross-spawn/LICENSE +21 -0
- package/node_modules/cross-spawn/README.md +89 -0
- package/node_modules/cross-spawn/index.js +39 -0
- package/node_modules/cross-spawn/lib/enoent.js +59 -0
- package/node_modules/cross-spawn/lib/parse.js +91 -0
- package/node_modules/cross-spawn/lib/util/escape.js +47 -0
- package/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
- package/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
- package/node_modules/cross-spawn/package.json +73 -0
- package/node_modules/decompress-response/index.d.ts +22 -0
- package/node_modules/decompress-response/index.js +58 -0
- package/node_modules/decompress-response/license +9 -0
- package/node_modules/decompress-response/package.json +56 -0
- package/node_modules/decompress-response/readme.md +48 -0
- package/node_modules/deep-extend/CHANGELOG.md +46 -0
- package/node_modules/deep-extend/LICENSE +20 -0
- package/node_modules/deep-extend/README.md +91 -0
- package/node_modules/deep-extend/index.js +1 -0
- package/node_modules/deep-extend/lib/deep-extend.js +150 -0
- package/node_modules/deep-extend/package.json +62 -0
- package/node_modules/detect-libc/LICENSE +201 -0
- package/node_modules/detect-libc/README.md +163 -0
- package/node_modules/detect-libc/index.d.ts +14 -0
- package/node_modules/detect-libc/lib/detect-libc.js +313 -0
- package/node_modules/detect-libc/lib/elf.js +39 -0
- package/node_modules/detect-libc/lib/filesystem.js +51 -0
- package/node_modules/detect-libc/lib/process.js +24 -0
- package/node_modules/detect-libc/package.json +44 -0
- package/node_modules/end-of-stream/LICENSE +21 -0
- package/node_modules/end-of-stream/README.md +54 -0
- package/node_modules/end-of-stream/index.js +96 -0
- package/node_modules/end-of-stream/package.json +37 -0
- package/node_modules/execa/index.d.ts +27 -0
- package/node_modules/execa/index.js +28 -0
- package/node_modules/execa/lib/arguments/command.js +20 -0
- package/node_modules/execa/lib/arguments/cwd.js +39 -0
- package/node_modules/execa/lib/arguments/encoding-option.js +50 -0
- package/node_modules/execa/lib/arguments/escape.js +88 -0
- package/node_modules/execa/lib/arguments/fd-options.js +108 -0
- package/node_modules/execa/lib/arguments/file-url.js +25 -0
- package/node_modules/execa/lib/arguments/options.js +96 -0
- package/node_modules/execa/lib/arguments/shell.js +11 -0
- package/node_modules/execa/lib/arguments/specific.js +111 -0
- package/node_modules/execa/lib/convert/add.js +15 -0
- package/node_modules/execa/lib/convert/concurrent.js +33 -0
- package/node_modules/execa/lib/convert/duplex.js +69 -0
- package/node_modules/execa/lib/convert/iterable.js +34 -0
- package/node_modules/execa/lib/convert/readable.js +113 -0
- package/node_modules/execa/lib/convert/shared.js +46 -0
- package/node_modules/execa/lib/convert/writable.js +90 -0
- package/node_modules/execa/lib/io/contents.js +116 -0
- package/node_modules/execa/lib/io/input-sync.js +44 -0
- package/node_modules/execa/lib/io/iterate.js +110 -0
- package/node_modules/execa/lib/io/max-buffer.js +89 -0
- package/node_modules/execa/lib/io/output-async.js +80 -0
- package/node_modules/execa/lib/io/output-sync.js +135 -0
- package/node_modules/execa/lib/io/pipeline.js +48 -0
- package/node_modules/execa/lib/io/strip-newline.js +12 -0
- package/node_modules/execa/lib/ipc/array.js +4 -0
- package/node_modules/execa/lib/ipc/buffer-messages.js +47 -0
- package/node_modules/execa/lib/ipc/forward.js +56 -0
- package/node_modules/execa/lib/ipc/get-each.js +89 -0
- package/node_modules/execa/lib/ipc/get-one.js +69 -0
- package/node_modules/execa/lib/ipc/graceful.js +72 -0
- package/node_modules/execa/lib/ipc/incoming.js +79 -0
- package/node_modules/execa/lib/ipc/ipc-input.js +44 -0
- package/node_modules/execa/lib/ipc/methods.js +49 -0
- package/node_modules/execa/lib/ipc/outgoing.js +47 -0
- package/node_modules/execa/lib/ipc/reference.js +44 -0
- package/node_modules/execa/lib/ipc/send.js +91 -0
- package/node_modules/execa/lib/ipc/strict.js +113 -0
- package/node_modules/execa/lib/ipc/validation.js +111 -0
- package/node_modules/execa/lib/methods/bind.js +23 -0
- package/node_modules/execa/lib/methods/command.js +43 -0
- package/node_modules/execa/lib/methods/create.js +65 -0
- package/node_modules/execa/lib/methods/main-async.js +194 -0
- package/node_modules/execa/lib/methods/main-sync.js +163 -0
- package/node_modules/execa/lib/methods/node.js +51 -0
- package/node_modules/execa/lib/methods/parameters.js +31 -0
- package/node_modules/execa/lib/methods/promise.js +15 -0
- package/node_modules/execa/lib/methods/script.js +22 -0
- package/node_modules/execa/lib/methods/template.js +153 -0
- package/node_modules/execa/lib/pipe/abort.js +20 -0
- package/node_modules/execa/lib/pipe/pipe-arguments.js +91 -0
- package/node_modules/execa/lib/pipe/sequence.js +24 -0
- package/node_modules/execa/lib/pipe/setup.js +72 -0
- package/node_modules/execa/lib/pipe/streaming.js +51 -0
- package/node_modules/execa/lib/pipe/throw.js +58 -0
- package/node_modules/execa/lib/resolve/all-async.js +46 -0
- package/node_modules/execa/lib/resolve/all-sync.js +33 -0
- package/node_modules/execa/lib/resolve/exit-async.js +54 -0
- package/node_modules/execa/lib/resolve/exit-sync.js +25 -0
- package/node_modules/execa/lib/resolve/stdio.js +47 -0
- package/node_modules/execa/lib/resolve/wait-stream.js +96 -0
- package/node_modules/execa/lib/resolve/wait-subprocess.js +146 -0
- package/node_modules/execa/lib/return/duration.js +8 -0
- package/node_modules/execa/lib/return/early-error.js +60 -0
- package/node_modules/execa/lib/return/final-error.js +40 -0
- package/node_modules/execa/lib/return/message.js +157 -0
- package/node_modules/execa/lib/return/reject.js +13 -0
- package/node_modules/execa/lib/return/result.js +186 -0
- package/node_modules/execa/lib/stdio/direction.js +76 -0
- package/node_modules/execa/lib/stdio/duplicate.js +116 -0
- package/node_modules/execa/lib/stdio/handle-async.js +52 -0
- package/node_modules/execa/lib/stdio/handle-sync.js +57 -0
- package/node_modules/execa/lib/stdio/handle.js +214 -0
- package/node_modules/execa/lib/stdio/input-option.js +50 -0
- package/node_modules/execa/lib/stdio/native.js +106 -0
- package/node_modules/execa/lib/stdio/stdio-option.js +60 -0
- package/node_modules/execa/lib/stdio/type.js +173 -0
- package/node_modules/execa/lib/terminate/cancel.js +20 -0
- package/node_modules/execa/lib/terminate/cleanup.js +16 -0
- package/node_modules/execa/lib/terminate/graceful.js +71 -0
- package/node_modules/execa/lib/terminate/kill.js +93 -0
- package/node_modules/execa/lib/terminate/signal.js +70 -0
- package/node_modules/execa/lib/terminate/timeout.js +21 -0
- package/node_modules/execa/lib/transform/encoding-transform.js +51 -0
- package/node_modules/execa/lib/transform/generator.js +107 -0
- package/node_modules/execa/lib/transform/normalize.js +111 -0
- package/node_modules/execa/lib/transform/object-mode.js +41 -0
- package/node_modules/execa/lib/transform/run-async.js +60 -0
- package/node_modules/execa/lib/transform/run-sync.js +50 -0
- package/node_modules/execa/lib/transform/split.js +110 -0
- package/node_modules/execa/lib/transform/validate.js +43 -0
- package/node_modules/execa/lib/utils/abort-signal.js +8 -0
- package/node_modules/execa/lib/utils/deferred.js +7 -0
- package/node_modules/execa/lib/utils/max-listeners.js +14 -0
- package/node_modules/execa/lib/utils/standard-stream.js +6 -0
- package/node_modules/execa/lib/utils/uint-array.js +69 -0
- package/node_modules/execa/lib/verbose/complete.js +24 -0
- package/node_modules/execa/lib/verbose/custom.js +26 -0
- package/node_modules/execa/lib/verbose/default.js +54 -0
- package/node_modules/execa/lib/verbose/error.js +13 -0
- package/node_modules/execa/lib/verbose/info.js +39 -0
- package/node_modules/execa/lib/verbose/ipc.js +15 -0
- package/node_modules/execa/lib/verbose/log.js +54 -0
- package/node_modules/execa/lib/verbose/output.js +60 -0
- package/node_modules/execa/lib/verbose/start.js +15 -0
- package/node_modules/execa/lib/verbose/values.js +33 -0
- package/node_modules/execa/license +9 -0
- package/node_modules/execa/package.json +105 -0
- package/node_modules/execa/readme.md +461 -0
- package/node_modules/execa/types/arguments/encoding-option.d.ts +19 -0
- package/node_modules/execa/types/arguments/fd-options.d.ts +8 -0
- package/node_modules/execa/types/arguments/options.d.ts +400 -0
- package/node_modules/execa/types/arguments/specific.d.ts +52 -0
- package/node_modules/execa/types/convert.d.ts +58 -0
- package/node_modules/execa/types/ipc.d.ts +156 -0
- package/node_modules/execa/types/methods/command.d.ts +114 -0
- package/node_modules/execa/types/methods/main-async.d.ts +379 -0
- package/node_modules/execa/types/methods/main-sync.d.ts +59 -0
- package/node_modules/execa/types/methods/node.d.ts +62 -0
- package/node_modules/execa/types/methods/script.d.ts +115 -0
- package/node_modules/execa/types/methods/template.d.ts +18 -0
- package/node_modules/execa/types/pipe.d.ts +58 -0
- package/node_modules/execa/types/return/final-error.d.ts +51 -0
- package/node_modules/execa/types/return/ignore.d.ts +26 -0
- package/node_modules/execa/types/return/result-all.d.ts +30 -0
- package/node_modules/execa/types/return/result-ipc.d.ts +27 -0
- package/node_modules/execa/types/return/result-stdio.d.ts +17 -0
- package/node_modules/execa/types/return/result-stdout.d.ts +50 -0
- package/node_modules/execa/types/return/result.d.ts +203 -0
- package/node_modules/execa/types/stdio/array.d.ts +16 -0
- package/node_modules/execa/types/stdio/direction.d.ts +12 -0
- package/node_modules/execa/types/stdio/option.d.ts +40 -0
- package/node_modules/execa/types/stdio/type.d.ts +170 -0
- package/node_modules/execa/types/subprocess/all.d.ts +17 -0
- package/node_modules/execa/types/subprocess/stdio.d.ts +18 -0
- package/node_modules/execa/types/subprocess/stdout.d.ts +22 -0
- package/node_modules/execa/types/subprocess/subprocess.d.ts +117 -0
- package/node_modules/execa/types/transform/normalize.d.ts +57 -0
- package/node_modules/execa/types/transform/object-mode.d.ts +21 -0
- package/node_modules/execa/types/utils.d.ts +13 -0
- package/node_modules/execa/types/verbose.d.ts +98 -0
- package/node_modules/expand-template/.travis.yml +6 -0
- package/node_modules/expand-template/LICENSE +21 -0
- package/node_modules/expand-template/README.md +43 -0
- package/node_modules/expand-template/index.js +26 -0
- package/node_modules/expand-template/package.json +29 -0
- package/node_modules/expand-template/test.js +67 -0
- package/node_modules/figures/index.d.ts +279 -0
- package/node_modules/figures/index.js +292 -0
- package/node_modules/figures/license +9 -0
- package/node_modules/figures/package.json +49 -0
- package/node_modules/figures/readme.md +337 -0
- package/node_modules/file-uri-to-path/.npmignore +1 -0
- package/node_modules/file-uri-to-path/.travis.yml +30 -0
- package/node_modules/file-uri-to-path/History.md +21 -0
- package/node_modules/file-uri-to-path/LICENSE +20 -0
- package/node_modules/file-uri-to-path/README.md +74 -0
- package/node_modules/file-uri-to-path/index.d.ts +2 -0
- package/node_modules/file-uri-to-path/index.js +66 -0
- package/node_modules/file-uri-to-path/package.json +32 -0
- package/node_modules/file-uri-to-path/test/test.js +24 -0
- package/node_modules/file-uri-to-path/test/tests.json +13 -0
- package/node_modules/fs-constants/LICENSE +21 -0
- package/node_modules/fs-constants/README.md +26 -0
- package/node_modules/fs-constants/browser.js +1 -0
- package/node_modules/fs-constants/index.js +1 -0
- package/node_modules/fs-constants/package.json +19 -0
- package/node_modules/get-stream/license +9 -0
- package/node_modules/get-stream/package.json +60 -0
- package/node_modules/get-stream/readme.md +303 -0
- package/node_modules/get-stream/source/array-buffer.js +84 -0
- package/node_modules/get-stream/source/array.js +32 -0
- package/node_modules/get-stream/source/buffer.js +19 -0
- package/node_modules/get-stream/source/contents.js +121 -0
- package/node_modules/get-stream/source/exports.js +5 -0
- package/node_modules/get-stream/source/index.d.ts +121 -0
- package/node_modules/get-stream/source/index.js +13 -0
- package/node_modules/get-stream/source/stream.js +65 -0
- package/node_modules/get-stream/source/string.js +41 -0
- package/node_modules/get-stream/source/utils.js +11 -0
- package/node_modules/github-from-package/.travis.yml +4 -0
- package/node_modules/github-from-package/LICENSE +18 -0
- package/node_modules/github-from-package/example/package.json +8 -0
- package/node_modules/github-from-package/example/url.js +3 -0
- package/node_modules/github-from-package/index.js +17 -0
- package/node_modules/github-from-package/package.json +30 -0
- package/node_modules/github-from-package/readme.markdown +53 -0
- package/node_modules/github-from-package/test/a.json +8 -0
- package/node_modules/github-from-package/test/b.json +5 -0
- package/node_modules/github-from-package/test/c.json +5 -0
- package/node_modules/github-from-package/test/d.json +7 -0
- package/node_modules/github-from-package/test/e.json +5 -0
- package/node_modules/github-from-package/test/url.js +19 -0
- package/node_modules/human-signals/LICENSE +201 -0
- package/node_modules/human-signals/README.md +171 -0
- package/node_modules/human-signals/build/src/core.js +273 -0
- package/node_modules/human-signals/build/src/main.d.ts +206 -0
- package/node_modules/human-signals/build/src/main.js +70 -0
- package/node_modules/human-signals/build/src/realtime.js +16 -0
- package/node_modules/human-signals/build/src/signals.js +34 -0
- package/node_modules/human-signals/package.json +66 -0
- package/node_modules/ieee754/LICENSE +11 -0
- package/node_modules/ieee754/README.md +51 -0
- package/node_modules/ieee754/index.d.ts +10 -0
- package/node_modules/ieee754/index.js +85 -0
- package/node_modules/ieee754/package.json +52 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +9 -0
- package/node_modules/inherits/inherits_browser.js +27 -0
- package/node_modules/inherits/package.json +29 -0
- package/node_modules/ini/LICENSE +15 -0
- package/node_modules/ini/README.md +102 -0
- package/node_modules/ini/ini.js +206 -0
- package/node_modules/ini/package.json +33 -0
- package/node_modules/is-plain-obj/index.d.ts +35 -0
- package/node_modules/is-plain-obj/index.js +8 -0
- package/node_modules/is-plain-obj/license +9 -0
- package/node_modules/is-plain-obj/package.json +41 -0
- package/node_modules/is-plain-obj/readme.md +58 -0
- package/node_modules/is-stream/index.d.ts +90 -0
- package/node_modules/is-stream/index.js +37 -0
- package/node_modules/is-stream/license +9 -0
- package/node_modules/is-stream/package.json +48 -0
- package/node_modules/is-stream/readme.md +57 -0
- package/node_modules/is-unicode-supported/index.d.ts +12 -0
- package/node_modules/is-unicode-supported/index.js +21 -0
- package/node_modules/is-unicode-supported/license +9 -0
- package/node_modules/is-unicode-supported/package.json +47 -0
- package/node_modules/is-unicode-supported/readme.md +35 -0
- package/node_modules/isexe/.npmignore +2 -0
- package/node_modules/isexe/LICENSE +15 -0
- package/node_modules/isexe/README.md +51 -0
- package/node_modules/isexe/index.js +57 -0
- package/node_modules/isexe/mode.js +41 -0
- package/node_modules/isexe/package.json +31 -0
- package/node_modules/isexe/test/basic.js +221 -0
- package/node_modules/isexe/windows.js +42 -0
- package/node_modules/mimic-response/index.d.ts +17 -0
- package/node_modules/mimic-response/index.js +77 -0
- package/node_modules/mimic-response/license +9 -0
- package/node_modules/mimic-response/package.json +42 -0
- package/node_modules/mimic-response/readme.md +78 -0
- package/node_modules/minimist/.eslintrc +29 -0
- package/node_modules/minimist/.github/FUNDING.yml +12 -0
- package/node_modules/minimist/.nycrc +14 -0
- package/node_modules/minimist/CHANGELOG.md +298 -0
- package/node_modules/minimist/LICENSE +18 -0
- package/node_modules/minimist/README.md +121 -0
- package/node_modules/minimist/example/parse.js +4 -0
- package/node_modules/minimist/index.js +263 -0
- package/node_modules/minimist/package.json +75 -0
- package/node_modules/minimist/test/all_bool.js +34 -0
- package/node_modules/minimist/test/bool.js +177 -0
- package/node_modules/minimist/test/dash.js +43 -0
- package/node_modules/minimist/test/default_bool.js +37 -0
- package/node_modules/minimist/test/dotted.js +24 -0
- package/node_modules/minimist/test/kv_short.js +32 -0
- package/node_modules/minimist/test/long.js +33 -0
- package/node_modules/minimist/test/num.js +38 -0
- package/node_modules/minimist/test/parse.js +209 -0
- package/node_modules/minimist/test/parse_modified.js +11 -0
- package/node_modules/minimist/test/proto.js +64 -0
- package/node_modules/minimist/test/short.js +69 -0
- package/node_modules/minimist/test/stop_early.js +17 -0
- package/node_modules/minimist/test/unknown.js +104 -0
- package/node_modules/minimist/test/whitespace.js +10 -0
- package/node_modules/mkdirp-classic/LICENSE +21 -0
- package/node_modules/mkdirp-classic/README.md +18 -0
- package/node_modules/mkdirp-classic/index.js +98 -0
- package/node_modules/mkdirp-classic/package.json +18 -0
- package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +31 -0
- package/node_modules/napi-build-utils/LICENSE +21 -0
- package/node_modules/napi-build-utils/README.md +52 -0
- package/node_modules/napi-build-utils/index.js +214 -0
- package/node_modules/napi-build-utils/index.md +0 -0
- package/node_modules/napi-build-utils/package.json +42 -0
- package/node_modules/node-abi/LICENSE +21 -0
- package/node_modules/node-abi/README.md +54 -0
- package/node_modules/node-abi/abi_registry.json +446 -0
- package/node_modules/node-abi/index.js +179 -0
- package/node_modules/node-abi/package.json +45 -0
- package/node_modules/npm-run-path/index.d.ts +90 -0
- package/node_modules/npm-run-path/index.js +55 -0
- package/node_modules/npm-run-path/license +9 -0
- package/node_modules/npm-run-path/node_modules/path-key/index.d.ts +31 -0
- package/node_modules/npm-run-path/node_modules/path-key/index.js +12 -0
- package/node_modules/npm-run-path/node_modules/path-key/license +9 -0
- package/node_modules/npm-run-path/node_modules/path-key/package.json +41 -0
- package/node_modules/npm-run-path/node_modules/path-key/readme.md +57 -0
- package/node_modules/npm-run-path/package.json +52 -0
- package/node_modules/npm-run-path/readme.md +104 -0
- package/node_modules/once/LICENSE +15 -0
- package/node_modules/once/README.md +79 -0
- package/node_modules/once/once.js +42 -0
- package/node_modules/once/package.json +33 -0
- package/node_modules/parse-ms/index.d.ts +30 -0
- package/node_modules/parse-ms/index.js +45 -0
- package/node_modules/parse-ms/license +9 -0
- package/node_modules/parse-ms/package.json +47 -0
- package/node_modules/parse-ms/readme.md +46 -0
- package/node_modules/path-key/index.d.ts +40 -0
- package/node_modules/path-key/index.js +16 -0
- package/node_modules/path-key/license +9 -0
- package/node_modules/path-key/package.json +39 -0
- package/node_modules/path-key/readme.md +61 -0
- package/node_modules/prebuild-install/CHANGELOG.md +131 -0
- package/node_modules/prebuild-install/CONTRIBUTING.md +6 -0
- package/node_modules/prebuild-install/LICENSE +21 -0
- package/node_modules/prebuild-install/README.md +163 -0
- package/node_modules/prebuild-install/asset.js +44 -0
- package/node_modules/prebuild-install/bin.js +78 -0
- package/node_modules/prebuild-install/download.js +142 -0
- package/node_modules/prebuild-install/error.js +14 -0
- package/node_modules/prebuild-install/help.txt +16 -0
- package/node_modules/prebuild-install/index.js +1 -0
- package/node_modules/prebuild-install/log.js +33 -0
- package/node_modules/prebuild-install/package.json +67 -0
- package/node_modules/prebuild-install/proxy.js +35 -0
- package/node_modules/prebuild-install/rc.js +64 -0
- package/node_modules/prebuild-install/util.js +143 -0
- package/node_modules/pretty-ms/index.d.ts +157 -0
- package/node_modules/pretty-ms/index.js +149 -0
- package/node_modules/pretty-ms/license +9 -0
- package/node_modules/pretty-ms/package.json +55 -0
- package/node_modules/pretty-ms/readme.md +179 -0
- package/node_modules/pump/.github/FUNDING.yml +2 -0
- package/node_modules/pump/.travis.yml +5 -0
- package/node_modules/pump/LICENSE +21 -0
- package/node_modules/pump/README.md +74 -0
- package/node_modules/pump/SECURITY.md +5 -0
- package/node_modules/pump/empty.js +1 -0
- package/node_modules/pump/index.js +86 -0
- package/node_modules/pump/package.json +30 -0
- package/node_modules/pump/test-browser.js +66 -0
- package/node_modules/pump/test-node.js +53 -0
- package/node_modules/rc/LICENSE.APACHE2 +15 -0
- package/node_modules/rc/LICENSE.BSD +26 -0
- package/node_modules/rc/LICENSE.MIT +24 -0
- package/node_modules/rc/README.md +227 -0
- package/node_modules/rc/browser.js +7 -0
- package/node_modules/rc/cli.js +4 -0
- package/node_modules/rc/index.js +53 -0
- package/node_modules/rc/lib/utils.js +104 -0
- package/node_modules/rc/package.json +29 -0
- package/node_modules/rc/test/ini.js +16 -0
- package/node_modules/rc/test/nested-env-vars.js +50 -0
- package/node_modules/rc/test/test.js +59 -0
- package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
- package/node_modules/readable-stream/GOVERNANCE.md +136 -0
- package/node_modules/readable-stream/LICENSE +47 -0
- package/node_modules/readable-stream/README.md +106 -0
- package/node_modules/readable-stream/errors-browser.js +127 -0
- package/node_modules/readable-stream/errors.js +116 -0
- package/node_modules/readable-stream/experimentalWarning.js +17 -0
- package/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
- package/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
- package/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
- package/node_modules/readable-stream/lib/_stream_transform.js +190 -0
- package/node_modules/readable-stream/lib/_stream_writable.js +641 -0
- package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
- package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
- package/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- package/node_modules/readable-stream/package.json +68 -0
- package/node_modules/readable-stream/readable-browser.js +9 -0
- package/node_modules/readable-stream/readable.js +16 -0
- package/node_modules/safe-buffer/LICENSE +21 -0
- package/node_modules/safe-buffer/README.md +584 -0
- package/node_modules/safe-buffer/index.d.ts +187 -0
- package/node_modules/safe-buffer/index.js +65 -0
- package/node_modules/safe-buffer/package.json +51 -0
- package/node_modules/semver/LICENSE +15 -0
- package/node_modules/semver/README.md +665 -0
- package/node_modules/semver/bin/semver.js +191 -0
- package/node_modules/semver/classes/comparator.js +143 -0
- package/node_modules/semver/classes/index.js +7 -0
- package/node_modules/semver/classes/range.js +557 -0
- package/node_modules/semver/classes/semver.js +333 -0
- package/node_modules/semver/functions/clean.js +8 -0
- package/node_modules/semver/functions/cmp.js +54 -0
- package/node_modules/semver/functions/coerce.js +62 -0
- package/node_modules/semver/functions/compare-build.js +9 -0
- package/node_modules/semver/functions/compare-loose.js +5 -0
- package/node_modules/semver/functions/compare.js +7 -0
- package/node_modules/semver/functions/diff.js +60 -0
- package/node_modules/semver/functions/eq.js +5 -0
- package/node_modules/semver/functions/gt.js +5 -0
- package/node_modules/semver/functions/gte.js +5 -0
- package/node_modules/semver/functions/inc.js +21 -0
- package/node_modules/semver/functions/lt.js +5 -0
- package/node_modules/semver/functions/lte.js +5 -0
- package/node_modules/semver/functions/major.js +5 -0
- package/node_modules/semver/functions/minor.js +5 -0
- package/node_modules/semver/functions/neq.js +5 -0
- package/node_modules/semver/functions/parse.js +18 -0
- package/node_modules/semver/functions/patch.js +5 -0
- package/node_modules/semver/functions/prerelease.js +8 -0
- package/node_modules/semver/functions/rcompare.js +5 -0
- package/node_modules/semver/functions/rsort.js +5 -0
- package/node_modules/semver/functions/satisfies.js +12 -0
- package/node_modules/semver/functions/sort.js +5 -0
- package/node_modules/semver/functions/valid.js +8 -0
- package/node_modules/semver/index.js +91 -0
- package/node_modules/semver/internal/constants.js +37 -0
- package/node_modules/semver/internal/debug.js +11 -0
- package/node_modules/semver/internal/identifiers.js +29 -0
- package/node_modules/semver/internal/lrucache.js +42 -0
- package/node_modules/semver/internal/parse-options.js +17 -0
- package/node_modules/semver/internal/re.js +223 -0
- package/node_modules/semver/package.json +78 -0
- package/node_modules/semver/preload.js +4 -0
- package/node_modules/semver/range.bnf +16 -0
- package/node_modules/semver/ranges/gtr.js +6 -0
- package/node_modules/semver/ranges/intersects.js +9 -0
- package/node_modules/semver/ranges/ltr.js +6 -0
- package/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/node_modules/semver/ranges/min-version.js +63 -0
- package/node_modules/semver/ranges/outside.js +82 -0
- package/node_modules/semver/ranges/simplify.js +49 -0
- package/node_modules/semver/ranges/subset.js +249 -0
- package/node_modules/semver/ranges/to-comparators.js +10 -0
- package/node_modules/semver/ranges/valid.js +13 -0
- package/node_modules/shebang-command/index.js +19 -0
- package/node_modules/shebang-command/license +9 -0
- package/node_modules/shebang-command/package.json +34 -0
- package/node_modules/shebang-command/readme.md +34 -0
- package/node_modules/shebang-regex/index.d.ts +22 -0
- package/node_modules/shebang-regex/index.js +2 -0
- package/node_modules/shebang-regex/license +9 -0
- package/node_modules/shebang-regex/package.json +35 -0
- package/node_modules/shebang-regex/readme.md +33 -0
- package/node_modules/signal-exit/LICENSE.txt +16 -0
- package/node_modules/signal-exit/README.md +74 -0
- package/node_modules/signal-exit/dist/cjs/browser.d.ts +12 -0
- package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/browser.js +10 -0
- package/node_modules/signal-exit/dist/cjs/browser.js.map +1 -0
- package/node_modules/signal-exit/dist/cjs/index.d.ts +48 -0
- package/node_modules/signal-exit/dist/cjs/index.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/index.js +279 -0
- package/node_modules/signal-exit/dist/cjs/index.js.map +1 -0
- package/node_modules/signal-exit/dist/cjs/package.json +3 -0
- package/node_modules/signal-exit/dist/cjs/signals.d.ts +29 -0
- package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/signals.js +42 -0
- package/node_modules/signal-exit/dist/cjs/signals.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/browser.d.ts +12 -0
- package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/browser.js +4 -0
- package/node_modules/signal-exit/dist/mjs/browser.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/index.d.ts +48 -0
- package/node_modules/signal-exit/dist/mjs/index.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/index.js +275 -0
- package/node_modules/signal-exit/dist/mjs/index.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/package.json +3 -0
- package/node_modules/signal-exit/dist/mjs/signals.d.ts +29 -0
- package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/signals.js +39 -0
- package/node_modules/signal-exit/dist/mjs/signals.js.map +1 -0
- package/node_modules/signal-exit/package.json +106 -0
- package/node_modules/simple-concat/.travis.yml +3 -0
- package/node_modules/simple-concat/LICENSE +20 -0
- package/node_modules/simple-concat/README.md +44 -0
- package/node_modules/simple-concat/index.js +15 -0
- package/node_modules/simple-concat/package.json +47 -0
- package/node_modules/simple-concat/test/basic.js +41 -0
- package/node_modules/simple-get/.github/dependabot.yml +15 -0
- package/node_modules/simple-get/.github/workflows/ci.yml +23 -0
- package/node_modules/simple-get/LICENSE +20 -0
- package/node_modules/simple-get/README.md +333 -0
- package/node_modules/simple-get/index.js +108 -0
- package/node_modules/simple-get/package.json +67 -0
- package/node_modules/sqlite-vec/README.md +1 -0
- package/node_modules/sqlite-vec/index.cjs +46 -0
- package/node_modules/sqlite-vec/index.d.ts +17 -0
- package/node_modules/sqlite-vec/index.mjs +47 -0
- package/node_modules/sqlite-vec/package.json +1 -0
- package/node_modules/sqlite-vec-linux-x64/README.md +1 -0
- package/node_modules/sqlite-vec-linux-x64/package.json +1 -0
- package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
- package/node_modules/string_decoder/LICENSE +48 -0
- package/node_modules/string_decoder/README.md +47 -0
- package/node_modules/string_decoder/lib/string_decoder.js +296 -0
- package/node_modules/string_decoder/package.json +34 -0
- package/node_modules/strip-final-newline/index.d.ts +18 -0
- package/node_modules/strip-final-newline/index.js +26 -0
- package/node_modules/strip-final-newline/license +9 -0
- package/node_modules/strip-final-newline/package.json +49 -0
- package/node_modules/strip-final-newline/readme.md +34 -0
- package/node_modules/strip-json-comments/index.js +70 -0
- package/node_modules/strip-json-comments/license +21 -0
- package/node_modules/strip-json-comments/package.json +42 -0
- package/node_modules/strip-json-comments/readme.md +64 -0
- package/node_modules/tar-fs/.travis.yml +6 -0
- package/node_modules/tar-fs/LICENSE +21 -0
- package/node_modules/tar-fs/README.md +165 -0
- package/node_modules/tar-fs/index.js +363 -0
- package/node_modules/tar-fs/package.json +41 -0
- package/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
- package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
- package/node_modules/tar-fs/test/fixtures/e/file +0 -0
- package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
- package/node_modules/tar-fs/test/index.js +346 -0
- package/node_modules/tar-stream/LICENSE +21 -0
- package/node_modules/tar-stream/README.md +168 -0
- package/node_modules/tar-stream/extract.js +257 -0
- package/node_modules/tar-stream/headers.js +295 -0
- package/node_modules/tar-stream/index.js +2 -0
- package/node_modules/tar-stream/pack.js +255 -0
- package/node_modules/tar-stream/package.json +58 -0
- package/node_modules/tar-stream/sandbox.js +11 -0
- package/node_modules/tunnel-agent/LICENSE +55 -0
- package/node_modules/tunnel-agent/README.md +4 -0
- package/node_modules/tunnel-agent/index.js +244 -0
- package/node_modules/tunnel-agent/package.json +22 -0
- package/node_modules/unicorn-magic/default.d.ts +13 -0
- package/node_modules/unicorn-magic/default.js +14 -0
- package/node_modules/unicorn-magic/license +9 -0
- package/node_modules/unicorn-magic/node.d.ts +125 -0
- package/node_modules/unicorn-magic/node.js +49 -0
- package/node_modules/unicorn-magic/package.json +62 -0
- package/node_modules/unicorn-magic/readme.md +25 -0
- package/node_modules/util-deprecate/History.md +16 -0
- package/node_modules/util-deprecate/LICENSE +24 -0
- package/node_modules/util-deprecate/README.md +53 -0
- package/node_modules/util-deprecate/browser.js +67 -0
- package/node_modules/util-deprecate/node.js +6 -0
- package/node_modules/util-deprecate/package.json +27 -0
- package/node_modules/which/CHANGELOG.md +166 -0
- package/node_modules/which/LICENSE +15 -0
- package/node_modules/which/README.md +54 -0
- package/node_modules/which/bin/node-which +52 -0
- package/node_modules/which/package.json +43 -0
- package/node_modules/which/which.js +125 -0
- package/node_modules/wrappy/LICENSE +15 -0
- package/node_modules/wrappy/README.md +36 -0
- package/node_modules/wrappy/package.json +29 -0
- package/node_modules/wrappy/wrappy.js +33 -0
- package/node_modules/yoctocolors/base.d.ts +47 -0
- package/node_modules/yoctocolors/base.js +94 -0
- package/node_modules/yoctocolors/index.d.ts +2 -0
- package/node_modules/yoctocolors/index.js +2 -0
- package/node_modules/yoctocolors/license +9 -0
- package/node_modules/yoctocolors/package.json +69 -0
- package/node_modules/yoctocolors/readme.md +138 -0
- package/package.json +5 -1
- package/packages/hu-board/public/utils/board-view.js +11 -0
- package/packages/hu-board/public/utils/formatters.js +28 -1
- package/packages/hu-board/src/db.js +62 -3
- package/packages/hu-board/src/format.js +46 -1
- package/src/agents/aider-agent.js +42 -1
- package/src/agents/claude-agent.js +31 -5
- package/src/agents/codex-agent.js +44 -7
- package/src/agents/gemini-agent.js +37 -1
- package/src/agents/opencode-agent.js +34 -1
- package/src/orchestrator/drivers/pre-loop-phases/inject-loaded-plan.js +12 -1
- package/src/orchestrator/flow-runner.js +10 -2
- package/src/orchestrator/hu-sub-pipeline.js +30 -0
- package/src/prompts/architect.js +32 -37
- package/src/prompts/coder.js +71 -96
- package/src/prompts/hu-reviewer.js +23 -29
- package/src/prompts/prompt-layout.js +80 -0
- package/src/prompts/reviewer.js +34 -39
- package/src/roles/agent-role.js +9 -1
- package/src/roles/coder-role.js +6 -3
- package/src/roles/reviewer-role.js +20 -23
- package/src/session/journal/summary-writer.js +55 -1
- package/src/utils/budget.js +38 -9
- package/src/utils/telemetry.js +43 -0
package/src/prompts/reviewer.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
68
|
-
if (skillSection) {
|
|
69
|
-
sections.push(skillSection);
|
|
70
|
-
}
|
|
44
|
+
skillSection = buildSkillSection(skills, { provider, role: "reviewer" });
|
|
71
45
|
}
|
|
72
46
|
|
|
73
|
-
return
|
|
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
|
}
|
package/src/roles/agent-role.js
CHANGED
|
@@ -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.
|
package/src/roles/coder-role.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AgentRole } from "./agent-role.js";
|
|
2
|
-
import {
|
|
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
|
|
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
|
-
|
|
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
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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);
|
package/src/utils/budget.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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;
|
package/src/utils/telemetry.js
CHANGED
|
@@ -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.
|