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
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
import { BaseAgent } from "./base-agent.js";
|
|
2
2
|
import { resolveBin } from "./resolve-bin.js";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Extract OpenAI-style `usage` from OpenCode stdout. With `--format json`
|
|
6
|
+
* (used in reviewTask) the CLI emits a JSON document; with LiteLLM-backed
|
|
7
|
+
* runs that document carries `usage.prompt_tokens_details.cached_tokens`.
|
|
8
|
+
*
|
|
9
|
+
* Accepts the whole payload, individual lines, or array elements with a
|
|
10
|
+
* nested `usage` object. Returns `{tokens_in, tokens_out, cached_tokens}`
|
|
11
|
+
* or null (= unmeasured).
|
|
12
|
+
*/
|
|
13
|
+
export function extractOpenCodeUsage(text) {
|
|
14
|
+
if (!text) return null;
|
|
15
|
+
const candidates = [text.trim()];
|
|
16
|
+
for (const line of text.split("\n")) {
|
|
17
|
+
const t = line.trim();
|
|
18
|
+
if (t.startsWith("{") || t.startsWith("[")) candidates.push(t);
|
|
19
|
+
}
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
let obj;
|
|
22
|
+
try { obj = JSON.parse(candidate); } catch { continue; }
|
|
23
|
+
const usage = obj?.usage
|
|
24
|
+
?? obj?.result?.usage
|
|
25
|
+
?? (Array.isArray(obj) ? obj.find((e) => e?.usage)?.usage : null);
|
|
26
|
+
if (!usage || typeof usage.prompt_tokens !== "number") continue;
|
|
27
|
+
return {
|
|
28
|
+
tokens_in: usage.prompt_tokens,
|
|
29
|
+
tokens_out: usage.completion_tokens ?? 0,
|
|
30
|
+
cached_tokens: usage.prompt_tokens_details?.cached_tokens ?? 0
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
4
36
|
export class OpenCodeAgent extends BaseAgent {
|
|
5
37
|
async runTask(task) {
|
|
6
38
|
const role = task.role || "coder";
|
|
@@ -34,6 +66,7 @@ export class OpenCodeAgent extends BaseAgent {
|
|
|
34
66
|
silenceTimeoutMs: task.silenceTimeoutMs,
|
|
35
67
|
timeout: task.timeoutMs
|
|
36
68
|
});
|
|
37
|
-
|
|
69
|
+
const usage = extractOpenCodeUsage(res.stdout) ?? extractOpenCodeUsage(res.stderr);
|
|
70
|
+
return { ok: res.exitCode === 0, output: res.stdout, error: res.stderr, exitCode: res.exitCode, ...usage };
|
|
38
71
|
}
|
|
39
72
|
}
|
|
@@ -316,8 +316,19 @@ function wirePlanCallbacks({ session, loadedPlan, projectDir, syncResultsToPlan,
|
|
|
316
316
|
await savePlanToDisk(projectDir, loadedPlan);
|
|
317
317
|
if (outcome && Number.isFinite(outcome.cost_usd)) {
|
|
318
318
|
try {
|
|
319
|
-
const { setStoryCost } = await import("../../../../packages/hu-board/src/db.js");
|
|
319
|
+
const { setStoryCost, setStoryCachedTokens } = await import("../../../../packages/hu-board/src/db.js");
|
|
320
320
|
setStoryCost(huId, outcome.cost_usd);
|
|
321
|
+
// Φ0-G (KJC-TSK-0525): cached/in tokens travel in the same
|
|
322
|
+
// outcome blob as cost. Write them together so the board
|
|
323
|
+
// can render the "🎯 N% cached" badge on the same render.
|
|
324
|
+
// Either may be null (older runs, no cache) — setter handles it.
|
|
325
|
+
if (Number.isFinite(outcome.cached_tokens) || Number.isFinite(outcome.tokens_in)) {
|
|
326
|
+
setStoryCachedTokens(
|
|
327
|
+
huId,
|
|
328
|
+
Number.isFinite(outcome.cached_tokens) ? outcome.cached_tokens : null,
|
|
329
|
+
Number.isFinite(outcome.tokens_in) ? outcome.tokens_in : null,
|
|
330
|
+
);
|
|
331
|
+
}
|
|
321
332
|
} catch (err) {
|
|
322
333
|
logger?.warn?.(`Cost write failed for ${huId}: ${err.message}`);
|
|
323
334
|
}
|
|
@@ -263,15 +263,23 @@ async function _runFlowInner({ task, config, logger, flags = {}, emitter = null,
|
|
|
263
263
|
|
|
264
264
|
// --- Telemetry: anonymous pipeline_complete event (non-blocking) ---
|
|
265
265
|
try {
|
|
266
|
-
const { sendTelemetryEvent } = await import("../utils/telemetry.js");
|
|
266
|
+
const { sendTelemetryEvent, computeCachedPct } = await import("../utils/telemetry.js");
|
|
267
267
|
const durationS = Math.round((Date.now() - ctx.startedAt) / 1000);
|
|
268
268
|
const sessionStatus = ctx.session?.status || "unknown";
|
|
269
|
+
// Φ0-H (KJC-TSK-0526): aggregate cache-hit ratios per role so we
|
|
270
|
+
// can see on the fleet how much each provider's cache is buying.
|
|
271
|
+
let cachedPct = { cached_pct_coder: null, cached_pct_reviewer: null, cached_pct_total: null };
|
|
272
|
+
try {
|
|
273
|
+
const budgetSummary = ctx.budgetTracker?.summary?.();
|
|
274
|
+
if (budgetSummary) cachedPct = computeCachedPct(budgetSummary);
|
|
275
|
+
} catch { /* non-blocking — telemetry must never break runs */ }
|
|
269
276
|
sendTelemetryEvent("pipeline_complete", {
|
|
270
277
|
mode: config.review_mode,
|
|
271
278
|
agent: ctx.coderRole?.provider || config.coder,
|
|
272
279
|
duration_s: durationS,
|
|
273
280
|
success: sessionStatus === "approved",
|
|
274
|
-
taskType: ctx.session?.resolved_policies?.taskType || null
|
|
281
|
+
taskType: ctx.session?.resolved_policies?.taskType || null,
|
|
282
|
+
...cachedPct
|
|
275
283
|
}, config).catch(() => {});
|
|
276
284
|
} catch { /* non-blocking */ }
|
|
277
285
|
}
|
|
@@ -105,6 +105,31 @@ function sumCostUsd(entries) {
|
|
|
105
105
|
return Math.round(total * 1e6) / 1e6;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Sum an integer token-counter field across a slice of BudgetTracker
|
|
110
|
+
* entries (Φ0-G, KJC-TSK-0525). Same null-vs-0 semantics as sumCostUsd:
|
|
111
|
+
* returns null when nothing measurable was recorded so the board can
|
|
112
|
+
* distinguish "unmeasured" from "really zero".
|
|
113
|
+
*
|
|
114
|
+
* @param {Array<object>} entries
|
|
115
|
+
* @param {string} field — entry key to sum, e.g. "cached_tokens"
|
|
116
|
+
* @returns {number|null}
|
|
117
|
+
*/
|
|
118
|
+
function sumTokenField(entries, field) {
|
|
119
|
+
if (!Array.isArray(entries) || entries.length === 0) return null;
|
|
120
|
+
let total = 0;
|
|
121
|
+
let hasAny = false;
|
|
122
|
+
for (const e of entries) {
|
|
123
|
+
const n = Number(e?.[field]);
|
|
124
|
+
if (Number.isFinite(n) && n >= 0) {
|
|
125
|
+
total += n;
|
|
126
|
+
hasAny = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!hasAny) return null;
|
|
130
|
+
return Math.round(total);
|
|
131
|
+
}
|
|
132
|
+
|
|
108
133
|
/**
|
|
109
134
|
* Build the per-HU outcome blob from whatever metadata the iteration
|
|
110
135
|
* loop returned. Tolerant by design — most fields are optional and we
|
|
@@ -157,6 +182,11 @@ function buildHuOutcome({ story: _story, iterResult, status, startedAt, huBudget
|
|
|
157
182
|
blockers,
|
|
158
183
|
summary,
|
|
159
184
|
cost_usd: sumCostUsd(huBudgetEntries),
|
|
185
|
+
// Φ0-G (KJC-TSK-0525): cached/input tokens drive the "🎯 N% cached"
|
|
186
|
+
// board badge. Null when nothing measurable was recorded so the UI
|
|
187
|
+
// can hide the chip on cold runs or providers without cache.
|
|
188
|
+
cached_tokens: sumTokenField(huBudgetEntries, 'cached_tokens'),
|
|
189
|
+
tokens_in: sumTokenField(huBudgetEntries, 'tokens_in'),
|
|
160
190
|
finishedAt: new Date().toISOString(),
|
|
161
191
|
};
|
|
162
192
|
}
|
package/src/prompts/architect.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { loadAvailableSkills, buildSkillSection } from "../skills/skill-loader.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.",
|
|
@@ -9,19 +10,28 @@ const SUBAGENT_PREAMBLE = [
|
|
|
9
10
|
|
|
10
11
|
export const VALID_VERDICTS = new Set(["ready", "needs_clarification"]);
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Build the architect prompt as a { stable, volatile } layout (Φ1,
|
|
15
|
+
* KJC-PCS-0057): instructions, guidelines, schema, contexts and skills
|
|
16
|
+
* are identical across invocations on the same project; research
|
|
17
|
+
* context and the task itself go last.
|
|
18
|
+
*/
|
|
19
|
+
export async function buildArchitectPromptLayout({ task, instructions, researchContext = null, productContext = null, domainContext = null, projectDir = null, language = "en", provider = null }) {
|
|
13
20
|
const langInstruction = getLanguageInstruction(language);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
let skillSection = null;
|
|
22
|
+
if (projectDir) {
|
|
23
|
+
const skills = await loadAvailableSkills(projectDir);
|
|
24
|
+
skillSection = buildSkillSection(skills, { provider, role: "architect" });
|
|
18
25
|
}
|
|
19
26
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
return buildPromptLayout([
|
|
28
|
+
section(SUBAGENT_PREAMBLE, STABLE),
|
|
29
|
+
section(langInstruction, STABLE),
|
|
30
|
+
section(instructions, STABLE),
|
|
31
|
+
section("You are the architect in a multi-role AI pipeline.", STABLE),
|
|
32
|
+
section("Analyze the task and produce a concrete architecture design including layers, patterns, data model, API contracts, dependencies, and tradeoffs.", STABLE),
|
|
33
|
+
section("## Architecture Guidelines", STABLE),
|
|
34
|
+
section([
|
|
25
35
|
"- Identify the architecture type (layered, microservices, event-driven, etc.)",
|
|
26
36
|
"- Define the layers and their responsibilities",
|
|
27
37
|
"- Identify design patterns to apply",
|
|
@@ -30,34 +40,19 @@ export async function buildArchitectPrompt({ task, instructions, researchContext
|
|
|
30
40
|
"- List external and internal dependencies",
|
|
31
41
|
"- Document tradeoffs and their rationale",
|
|
32
42
|
"- If critical decisions cannot be made without more information, list clarifying questions"
|
|
33
|
-
].join("\n"),
|
|
34
|
-
"Return a single valid JSON object and nothing else.",
|
|
35
|
-
'JSON schema: {"verdict":"ready|needs_clarification","architecture":{"type":string,"layers":[string],"patterns":[string],"dataModel":{"entities":[string]},"apiContracts":[string],"dependencies":[string],"tradeoffs":[string]},"questions":[string],"summary":string}'
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
sections.push(`## Domain Context\n${domainContext}`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (researchContext) {
|
|
47
|
-
sections.push(`## Research Context\n${researchContext}`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
sections.push(`## Task\n${task}`);
|
|
51
|
-
|
|
52
|
-
if (projectDir) {
|
|
53
|
-
const skills = await loadAvailableSkills(projectDir);
|
|
54
|
-
const skillSection = buildSkillSection(skills, { provider, role: "architect" });
|
|
55
|
-
if (skillSection) {
|
|
56
|
-
sections.push(skillSection);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
43
|
+
].join("\n"), STABLE),
|
|
44
|
+
section("Return a single valid JSON object and nothing else.", STABLE),
|
|
45
|
+
section('JSON schema: {"verdict":"ready|needs_clarification","architecture":{"type":string,"layers":[string],"patterns":[string],"dataModel":{"entities":[string]},"apiContracts":[string],"dependencies":[string],"tradeoffs":[string]},"questions":[string],"summary":string}', STABLE),
|
|
46
|
+
section(productContext ? `## Product Context\n${productContext}` : null, STABLE),
|
|
47
|
+
section(domainContext ? `## Domain Context\n${domainContext}` : null, STABLE),
|
|
48
|
+
section(skillSection, STABLE),
|
|
49
|
+
section(researchContext ? `## Research Context\n${researchContext}` : null, VOLATILE),
|
|
50
|
+
section(`## Task\n${task}`, VOLATILE),
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
59
53
|
|
|
60
|
-
|
|
54
|
+
export async function buildArchitectPrompt(options) {
|
|
55
|
+
return joinLayout(await buildArchitectPromptLayout(options));
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
function filterStrings(arr) {
|
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
|
+
export 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
|
/**
|
|
@@ -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
|
+
}
|