karajan-code 3.3.0 → 3.4.1
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/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/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/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/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/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/src/routes/api.js +70 -49
- package/packages/hu-board/src/zombie-reaper.js +1 -1
- package/src/agents/aider-agent.js +1 -1
- package/src/agents/claude-agent.js +17 -2
- package/src/agents/gemini-agent.js +1 -1
- package/src/agents/opencode-agent.js +1 -1
- package/src/audit/agent-readiness.js +2 -1
- package/src/audit/deterministic-summary.js +11 -5
- package/src/audit/issue-filter.js +3 -6
- package/src/audit/plan-adherence.js +3 -1
- package/src/audit/semgrep-findings.js +5 -1
- package/src/brain/agent-error-classifier.js +8 -1
- package/src/brain/decisor.js +2 -2
- package/src/brain/solomon-consult.js +2 -2
- package/src/brain/standby-scheduler.js +0 -2
- package/src/commands/audit.js +8 -3
- package/src/commands/board.js +1 -1
- package/src/commands/standby.js +4 -1
- package/src/config/loader.js +2 -2
- package/src/golden/asserter.js +3 -1
- package/src/golden/schema.js +1 -1
- package/src/hu/auto-generator.js +1 -1
- package/src/lang/tree-sitter-loader.js +1 -5
- package/src/mcp/handlers/management-handlers.js +4 -3
- package/src/orchestrator/drivers/post-loop.js +43 -91
- package/src/orchestrator/flow-runner.js +25 -0
- package/src/orchestrator/fs-leak-detector.js +6 -1
- package/src/orchestrator/preflight-checks.js +51 -0
- package/src/orchestrator/solomon-rules.js +12 -1
- package/src/prompts/architect.js +32 -37
- package/src/prompts/audit.js +12 -11
- package/src/prompts/coder.js +71 -96
- package/src/prompts/hu-reviewer.js +23 -29
- package/src/prompts/planner.js +1 -1
- package/src/prompts/prompt-layout.js +80 -0
- package/src/prompts/reviewer.js +34 -39
- package/src/rag/embedders/factory.js +0 -1
- package/src/rag/retriever.js +1 -1
- package/src/roles/agent-role.js +10 -2
- package/src/roles/audit-role.js +10 -2
- package/src/roles/coder-role.js +6 -3
- package/src/roles/reviewer-role.js +20 -23
- package/src/session/journal/write-all.js +89 -0
- package/src/sonar/discovery.js +2 -1
- package/src/sonar/scanner.js +1 -1
- package/src/utils/cli-progress.js +4 -2
- package/src/utils/escape-regexp.js +15 -0
- package/src/utils/paths.js +0 -1
- package/src/utils/port-occupant.js +2 -1
- package/src/utils/project-detect.js +1 -1
package/src/prompts/coder.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.",
|
|
@@ -179,7 +180,16 @@ function buildStackSection({ stack, testFramework }) {
|
|
|
179
180
|
return lines.join("\n");
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
|
|
183
|
+
/**
|
|
184
|
+
* Build the coder prompt as a { stable, volatile } layout (Φ1, KJC-PCS-0057).
|
|
185
|
+
*
|
|
186
|
+
* stable: identical across iterations of the same HU and across HUs of the
|
|
187
|
+
* same plan — rendered FIRST so prefix-caching providers hit on it, and
|
|
188
|
+
* available separately so ClaudeAgent can ship it via --append-system-prompt.
|
|
189
|
+
* volatile: per-HU/iteration content, rendered LAST preserving the relative
|
|
190
|
+
* order the legacy prompt used (ADRs → SPEC → findings → tests → … → feedback).
|
|
191
|
+
*/
|
|
192
|
+
export async function buildCoderPromptLayout({ task, reviewerFeedback = null, sonarSummary = null, coderRules = null, methodology = "tdd", serenaEnabled = false, rtkAvailable = false, deferredContext = null, productContext = null, domainContext = null, plan = null, projectDir = null, language = "en", provider = null, acceptanceTests = null, adrs = null, specSection = null, reviewerFindings = null, huId = null, stack = null, testFramework = null }) {
|
|
183
193
|
const langInstruction = getLanguageInstruction(language);
|
|
184
194
|
// KJC-BUG-0032 (PR-I): hard rule about file paths. Real bug: a HU
|
|
185
195
|
// titled "Initialize project skeleton: create assistant/ directory…"
|
|
@@ -203,110 +213,75 @@ export async function buildCoderPrompt({ task, reviewerFeedback = null, sonarSum
|
|
|
203
213
|
].join("\n")
|
|
204
214
|
: null;
|
|
205
215
|
|
|
206
|
-
const sections = [
|
|
207
|
-
serenaEnabled ? SUBAGENT_PREAMBLE_SERENA : SUBAGENT_PREAMBLE,
|
|
208
|
-
...(langInstruction ? [langInstruction] : []),
|
|
209
|
-
`Task:\n${task}`,
|
|
210
|
-
"Implement directly in the repository.",
|
|
211
|
-
"Keep changes minimal and production-ready.",
|
|
212
|
-
"Follow SOLID principles. Write small, focused functions (< 30 lines).",
|
|
213
|
-
"Make atomic commits: 1 logical change = 1 commit. Keep PRs small and reviewable.",
|
|
214
|
-
"Security: validate all input, parameterize queries, never expose secrets. Use the auth pattern that matches the stack (e.g. httpOnly cookies for web sessions).",
|
|
215
|
-
"Use the project's standard logger and type system (no console.log when a structured logger exists; use the project's type idiom — TS types, JSDoc, Python type hints, Go interfaces…).",
|
|
216
|
-
SUBPROCESS_CONSTRAINTS
|
|
217
|
-
];
|
|
218
216
|
const stackRule = buildStackSection({ stack, testFramework });
|
|
219
|
-
if (stackRule) sections.push(stackRule);
|
|
220
|
-
if (projectDirRule) sections.push(projectDirRule);
|
|
221
|
-
|
|
222
|
-
if (serenaEnabled) {
|
|
223
|
-
sections.push(SERENA_INSTRUCTIONS);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
217
|
const rtkSnippet = buildRtkInstructions({ rtkAvailable });
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (productContext) {
|
|
232
|
-
sections.push(`## Product Context\n${productContext}`);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
if (domainContext) {
|
|
236
|
-
sections.push(`## Domain Context\n${domainContext}`);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if (plan) {
|
|
240
|
-
sections.push(`## Implementation Plan (from planner)\nFollow these steps:\n${plan}`);
|
|
218
|
+
let skillSection = null;
|
|
219
|
+
if (projectDir) {
|
|
220
|
+
const skills = await loadAvailableSkills(projectDir);
|
|
221
|
+
skillSection = buildSkillSection(skills, { provider });
|
|
241
222
|
}
|
|
242
223
|
|
|
243
|
-
//
|
|
224
|
+
// Volatile sections keep the legacy relative order — order matters:
|
|
244
225
|
// 1. ADRs first (they constrain HOW you implement),
|
|
245
226
|
// 2. SPEC reference (what section we're satisfying),
|
|
246
227
|
// 3. Reviewer findings about THIS HU (warnings the coder needs
|
|
247
228
|
// to consider while writing code),
|
|
248
229
|
// 4. Acceptance tests (the gate the implementation must pass).
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (testsSection) {
|
|
263
|
-
sections.push(testsSection);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
if (coderRules) {
|
|
267
|
-
sections.push(`Coder rules (MUST follow):\n${coderRules}`);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (methodology === "tdd") {
|
|
271
|
-
sections.push(
|
|
272
|
-
[
|
|
273
|
-
"Default development policy: TDD.",
|
|
274
|
-
"1) Add or update failing tests first.",
|
|
275
|
-
"2) Implement minimal code to make tests pass.",
|
|
276
|
-
"3) Refactor safely while keeping tests green."
|
|
277
|
-
].join("\n")
|
|
278
|
-
);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (sonarSummary) {
|
|
282
|
-
sections.push(`Sonar summary:\n${sonarSummary}`);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
if (reviewerFeedback) {
|
|
286
|
-
sections.push(
|
|
287
|
-
`## Reviewer blocking feedback — YOU MUST FIX THESE BEFORE PROCEEDING`,
|
|
288
|
-
reviewerFeedback,
|
|
289
|
-
"",
|
|
290
|
-
"For each issue above:",
|
|
291
|
-
"1. Find the relevant file(s) in the project",
|
|
292
|
-
"2. Make the specific code change needed to resolve the issue",
|
|
293
|
-
"3. If tests are missing, write them",
|
|
294
|
-
"4. If dependencies are needed, install them with the project's package manager (npm install / pip install / go get / cargo add — pick the one that matches the stack above)",
|
|
295
|
-
"5. Do NOT skip any issue — all must be resolved"
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
if (deferredContext) {
|
|
300
|
-
sections.push(deferredContext);
|
|
301
|
-
}
|
|
230
|
+
const reviewerFeedbackSection = reviewerFeedback
|
|
231
|
+
? [
|
|
232
|
+
`## Reviewer blocking feedback — YOU MUST FIX THESE BEFORE PROCEEDING`,
|
|
233
|
+
reviewerFeedback,
|
|
234
|
+
"",
|
|
235
|
+
"For each issue above:",
|
|
236
|
+
"1. Find the relevant file(s) in the project",
|
|
237
|
+
"2. Make the specific code change needed to resolve the issue",
|
|
238
|
+
"3. If tests are missing, write them",
|
|
239
|
+
"4. If dependencies are needed, install them with the project's package manager (npm install / pip install / go get / cargo add — pick the one that matches the stack above)",
|
|
240
|
+
"5. Do NOT skip any issue — all must be resolved"
|
|
241
|
+
].join("\n\n")
|
|
242
|
+
: null;
|
|
302
243
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
244
|
+
return buildPromptLayout([
|
|
245
|
+
section(serenaEnabled ? SUBAGENT_PREAMBLE_SERENA : SUBAGENT_PREAMBLE, STABLE),
|
|
246
|
+
section(langInstruction, STABLE),
|
|
247
|
+
section("Implement directly in the repository.", STABLE),
|
|
248
|
+
section("Keep changes minimal and production-ready.", STABLE),
|
|
249
|
+
section("Follow SOLID principles. Write small, focused functions (< 30 lines).", STABLE),
|
|
250
|
+
section("Make atomic commits: 1 logical change = 1 commit. Keep PRs small and reviewable.", STABLE),
|
|
251
|
+
section("Security: validate all input, parameterize queries, never expose secrets. Use the auth pattern that matches the stack (e.g. httpOnly cookies for web sessions).", STABLE),
|
|
252
|
+
section("Use the project's standard logger and type system (no console.log when a structured logger exists; use the project's type idiom — TS types, JSDoc, Python type hints, Go interfaces…).", STABLE),
|
|
253
|
+
section(SUBPROCESS_CONSTRAINTS, STABLE),
|
|
254
|
+
section(stackRule, STABLE),
|
|
255
|
+
section(projectDirRule, STABLE),
|
|
256
|
+
section(serenaEnabled ? SERENA_INSTRUCTIONS : null, STABLE),
|
|
257
|
+
section(rtkSnippet, STABLE),
|
|
258
|
+
section(productContext ? `## Product Context\n${productContext}` : null, STABLE),
|
|
259
|
+
section(domainContext ? `## Domain Context\n${domainContext}` : null, STABLE),
|
|
260
|
+
section(coderRules ? `Coder rules (MUST follow):\n${coderRules}` : null, STABLE),
|
|
261
|
+
section(
|
|
262
|
+
methodology === "tdd"
|
|
263
|
+
? [
|
|
264
|
+
"Default development policy: TDD.",
|
|
265
|
+
"1) Add or update failing tests first.",
|
|
266
|
+
"2) Implement minimal code to make tests pass.",
|
|
267
|
+
"3) Refactor safely while keeping tests green."
|
|
268
|
+
].join("\n")
|
|
269
|
+
: null,
|
|
270
|
+
STABLE
|
|
271
|
+
),
|
|
272
|
+
section(skillSection, STABLE),
|
|
273
|
+
section(`Task:\n${task}`, VOLATILE),
|
|
274
|
+
section(plan ? `## Implementation Plan (from planner)\nFollow these steps:\n${plan}` : null, VOLATILE),
|
|
275
|
+
section(renderAdrSection(adrs) || null, VOLATILE),
|
|
276
|
+
section(renderSpecSectionLine(specSection) || null, VOLATILE),
|
|
277
|
+
section(renderReviewerFindingsSection(reviewerFindings, huId) || null, VOLATILE),
|
|
278
|
+
section(renderAcceptanceTestsSection(acceptanceTests) || null, VOLATILE),
|
|
279
|
+
section(sonarSummary ? `Sonar summary:\n${sonarSummary}` : null, VOLATILE),
|
|
280
|
+
section(reviewerFeedbackSection, VOLATILE),
|
|
281
|
+
section(deferredContext, VOLATILE),
|
|
282
|
+
]);
|
|
283
|
+
}
|
|
310
284
|
|
|
311
|
-
|
|
285
|
+
export async function buildCoderPrompt(options) {
|
|
286
|
+
return joinLayout(await buildCoderPromptLayout(options));
|
|
312
287
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { extractFirstJson } from "../utils/json-extract.js";
|
|
2
2
|
import { getLanguageInstruction } from "../utils/locale.js";
|
|
3
|
+
import { section, buildPromptLayout, joinLayout, STABLE, VOLATILE } from "./prompt-layout.js";
|
|
3
4
|
|
|
4
5
|
const SUBAGENT_PREAMBLE = [
|
|
5
6
|
"IMPORTANT: You are running as a Karajan sub-agent.",
|
|
@@ -22,38 +23,31 @@ const DIMENSION_KEYS = [
|
|
|
22
23
|
* @param {{stories: Array<{id: string, text: string}>, instructions: string|null, context?: string|null}} params
|
|
23
24
|
* @returns {string} The assembled prompt.
|
|
24
25
|
*/
|
|
25
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Build the HU-reviewer prompt as a { stable, volatile } layout (Φ1,
|
|
28
|
+
* KJC-PCS-0057): preamble, instructions, JSON schema and contexts are
|
|
29
|
+
* identical across batches on the same project; the stories under
|
|
30
|
+
* evaluation and the per-batch additional context go last.
|
|
31
|
+
*/
|
|
32
|
+
function buildHuReviewerPromptLayout({ stories, instructions, context = null, productContext = null, domainContext = null, hu_language = "en" }) {
|
|
26
33
|
const langInstruction = getLanguageInstruction(hu_language);
|
|
27
|
-
const sections = [SUBAGENT_PREAMBLE, ...(langInstruction ? [langInstruction] : [])];
|
|
28
|
-
|
|
29
|
-
if (instructions) {
|
|
30
|
-
sections.push(instructions);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
sections.push("## Stories to Evaluate");
|
|
34
|
-
|
|
35
|
-
for (const story of stories) {
|
|
36
|
-
sections.push(`### ${story.id}\n${story.text}`);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
sections.push(
|
|
40
|
-
"Return a single valid JSON object and nothing else.",
|
|
41
|
-
`JSON schema: {"evaluations":[{"story_id":string,"scores":{"D1_jtbd_context":number,"D2_user_specificity":number,"D3_behavior_change":number,"D4_control_zone":number,"D5_time_constraints":number,"D6_survivable_experiment":number},"total":number,"antipatterns_detected":[string],"verdict":"certified|needs_rewrite|needs_context","evaluation_notes":string,"rewritten":object|null,"certified_hu":object|null,"context_needed":object|null}],"batch_summary":{"total":number,"certified":number,"needs_rewrite":number,"needs_context":number,"consolidated_questions":string}}`
|
|
42
|
-
);
|
|
43
34
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
35
|
+
return buildPromptLayout([
|
|
36
|
+
section(SUBAGENT_PREAMBLE, STABLE),
|
|
37
|
+
section(langInstruction, STABLE),
|
|
38
|
+
section(instructions, STABLE),
|
|
39
|
+
section("Return a single valid JSON object and nothing else.", STABLE),
|
|
40
|
+
section(`JSON schema: {"evaluations":[{"story_id":string,"scores":{"D1_jtbd_context":number,"D2_user_specificity":number,"D3_behavior_change":number,"D4_control_zone":number,"D5_time_constraints":number,"D6_survivable_experiment":number},"total":number,"antipatterns_detected":[string],"verdict":"certified|needs_rewrite|needs_context","evaluation_notes":string,"rewritten":object|null,"certified_hu":object|null,"context_needed":object|null}],"batch_summary":{"total":number,"certified":number,"needs_rewrite":number,"needs_context":number,"consolidated_questions":string}}`, STABLE),
|
|
41
|
+
section(productContext ? `## Product Context\n${productContext}` : null, STABLE),
|
|
42
|
+
section(domainContext ? `## Domain Context\n${domainContext}` : null, STABLE),
|
|
43
|
+
section("## Stories to Evaluate", VOLATILE),
|
|
44
|
+
...stories.map((story) => section(`### ${story.id}\n${story.text}`, VOLATILE)),
|
|
45
|
+
section(context ? `## Additional Context\n${context}` : null, VOLATILE),
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
55
48
|
|
|
56
|
-
|
|
49
|
+
export function buildHuReviewerPrompt(options) {
|
|
50
|
+
return joinLayout(buildHuReviewerPromptLayout(options));
|
|
57
51
|
}
|
|
58
52
|
|
|
59
53
|
/**
|
package/src/prompts/planner.js
CHANGED
|
@@ -70,7 +70,7 @@ export function parsePlannerOutput(output) {
|
|
|
70
70
|
* @param {string} task
|
|
71
71
|
* @returns {string[]} deduplicated trimmed exclusion items
|
|
72
72
|
*/
|
|
73
|
-
|
|
73
|
+
function extractScopeExclusions(task) {
|
|
74
74
|
if (!task || typeof task !== "string") return [];
|
|
75
75
|
const patterns = [
|
|
76
76
|
/\bNO\s+incluye[^:\n]{0,60}:\s*([^.\n]+)/gi,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt layout helper — Phase 1 (KJC-PCS-0057, cache propio).
|
|
3
|
+
*
|
|
4
|
+
* Separates prompt sections into two buckets so every prompt builder can
|
|
5
|
+
* emit a cache-friendly shape:
|
|
6
|
+
*
|
|
7
|
+
* - stable: identical across iterations of the same HU and across HUs
|
|
8
|
+
* of the same plan (preamble, rules, constraints, skills,
|
|
9
|
+
* product/domain context). Goes FIRST in the rendered prompt
|
|
10
|
+
* so providers with automatic prefix caching (OpenAI, Gemini,
|
|
11
|
+
* LiteLLM-routed) hit on the literal prefix. For Anthropic,
|
|
12
|
+
* agents can send this bucket via --append-system-prompt
|
|
13
|
+
* where the CLI already places cache breakpoints.
|
|
14
|
+
* - volatile: changes per HU/iteration (task, plan, acceptance tests,
|
|
15
|
+
* reviewer feedback, diff). Goes LAST, preserving the
|
|
16
|
+
* relative order the builder pushed it in — the semantic
|
|
17
|
+
* ordering inside the bucket ("order matters" in coder.js)
|
|
18
|
+
* is untouched.
|
|
19
|
+
*
|
|
20
|
+
* Tagging is explicit on purpose: an untagged section throws instead of
|
|
21
|
+
* silently landing in one bucket (a misclassified volatile section would
|
|
22
|
+
* silently break the byte-identical invariant the prefix cache relies on).
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
export const STABLE = "stable";
|
|
26
|
+
export const VOLATILE = "volatile";
|
|
27
|
+
|
|
28
|
+
const SEPARATOR = "\n\n";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Tag a section for buildPromptLayout. Returns null for empty/non-string
|
|
32
|
+
* content so builders can push conditional sections without guards.
|
|
33
|
+
*
|
|
34
|
+
* @param {string|null|undefined} content
|
|
35
|
+
* @param {"stable"|"volatile"} [stability]
|
|
36
|
+
* @returns {{content: string, stability: string}|null}
|
|
37
|
+
*/
|
|
38
|
+
export function section(content, stability = VOLATILE) {
|
|
39
|
+
if (typeof content !== "string" || content.length === 0) return null;
|
|
40
|
+
return { content, stability };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Split tagged sections into { stable, volatile } blocks. Insertion order
|
|
45
|
+
* is preserved within each bucket. Null/undefined entries are skipped.
|
|
46
|
+
*
|
|
47
|
+
* @param {Array<{content: string, stability: string}|null|undefined>} sections
|
|
48
|
+
* @returns {{stable: string, volatile: string}}
|
|
49
|
+
*/
|
|
50
|
+
export function buildPromptLayout(sections) {
|
|
51
|
+
const stable = [];
|
|
52
|
+
const volatile = [];
|
|
53
|
+
for (const entry of sections) {
|
|
54
|
+
if (entry == null) continue;
|
|
55
|
+
if (entry.stability === STABLE) {
|
|
56
|
+
stable.push(entry.content);
|
|
57
|
+
} else if (entry.stability === VOLATILE) {
|
|
58
|
+
volatile.push(entry.content);
|
|
59
|
+
} else {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`prompt-layout: section has invalid stability tag "${entry?.stability}" — use section(content, STABLE|VOLATILE)`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { stable: stable.join(SEPARATOR), volatile: volatile.join(SEPARATOR) };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Render a layout as a single prompt string: stable prefix first, volatile
|
|
70
|
+
* tail last. Used by agents whose provider caches on the literal token
|
|
71
|
+
* prefix (codex, gemini, aider, opencode).
|
|
72
|
+
*
|
|
73
|
+
* @param {{stable: string, volatile: string}} layout
|
|
74
|
+
* @returns {string}
|
|
75
|
+
*/
|
|
76
|
+
export function joinLayout({ stable, volatile }) {
|
|
77
|
+
if (!stable) return volatile;
|
|
78
|
+
if (!volatile) return stable;
|
|
79
|
+
return `${stable}${SEPARATOR}${volatile}`;
|
|
80
|
+
}
|
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/rag/retriever.js
CHANGED
package/src/roles/agent-role.js
CHANGED
|
@@ -25,7 +25,7 @@ import { withBrainRecovery } from "../brain/with-brain-recovery.js";
|
|
|
25
25
|
* @param {object} config
|
|
26
26
|
* @returns {number|null}
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
function resolveAgentSilenceTimeoutMs(config) {
|
|
29
29
|
const minutes = Number(config?.session?.max_agent_silence_minutes);
|
|
30
30
|
return Number.isFinite(minutes) && minutes > 0 ? Math.round(minutes * 60 * 1000) : null;
|
|
31
31
|
}
|
|
@@ -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/audit-role.js
CHANGED
|
@@ -205,11 +205,13 @@ export class AuditRole extends AgentRole {
|
|
|
205
205
|
* result fields. Returns a single object so consumers (CLI formatter,
|
|
206
206
|
* report-file writer, MCP) don't need to know about the spread shape.
|
|
207
207
|
*
|
|
208
|
+
* Consumed by tests via vi.importActual (knip blind spot) — keep exported.
|
|
209
|
+
* @public
|
|
208
210
|
* @param {object} result - raw agent.runTask() return
|
|
209
211
|
* @param {{provider: string, durationMs: number}} ctx
|
|
210
|
-
* @returns {{available: boolean, provider: string, model?: string, tokens_in?: number, tokens_out?: number, total_tokens?: number, cost_usd?: number, durationMs: number, reason?: string}}
|
|
212
|
+
* @returns {{available: boolean, provider: string, model?: string, tokens_in?: number, tokens_out?: number, cached_tokens?: number, total_tokens?: number, cost_usd?: number, durationMs: number, reason?: string}}
|
|
211
213
|
*/
|
|
212
|
-
function extractUsage(result, { provider, durationMs }) {
|
|
214
|
+
export function extractUsage(result, { provider, durationMs }) {
|
|
213
215
|
if (!result || typeof result !== "object") {
|
|
214
216
|
return { available: false, provider, durationMs, reason: "no agent result" };
|
|
215
217
|
}
|
|
@@ -218,12 +220,18 @@ function extractUsage(result, { provider, durationMs }) {
|
|
|
218
220
|
if (tokens_in === null && tokens_out === null) {
|
|
219
221
|
return { available: false, provider, model: result.model, durationMs, reason: `provider "${provider}" did not report token usage` };
|
|
220
222
|
}
|
|
223
|
+
// KJC-BUG-0085: cached_tokens must survive this consolidation — the
|
|
224
|
+
// budget chain (computeUsage → BudgetTracker → summary.md Cache hits →
|
|
225
|
+
// telemetry) reads it from `usage` and the audit is the most expensive
|
|
226
|
+
// role of the session.
|
|
227
|
+
const cached_tokens = Number.isFinite(result.cached_tokens) ? result.cached_tokens : 0;
|
|
221
228
|
return {
|
|
222
229
|
available: true,
|
|
223
230
|
provider,
|
|
224
231
|
model: result.model,
|
|
225
232
|
tokens_in: tokens_in ?? 0,
|
|
226
233
|
tokens_out: tokens_out ?? 0,
|
|
234
|
+
cached_tokens,
|
|
227
235
|
total_tokens: (tokens_in ?? 0) + (tokens_out ?? 0),
|
|
228
236
|
cost_usd: typeof result.cost_usd === "number" ? result.cost_usd : null,
|
|
229
237
|
durationMs,
|
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) {
|