karajan-code 3.4.0 → 3.4.2
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/package.json +12 -1
- package/package.json +4 -2
- package/packages/hu-board/src/routes/api.js +70 -49
- package/packages/hu-board/src/zombie-reaper.js +1 -1
- package/scripts/verify-pack.mjs +108 -0
- package/src/agents/aider-agent.js +1 -1
- 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/audit.js +12 -11
- package/src/prompts/hu-reviewer.js +1 -1
- package/src/prompts/planner.js +1 -1
- package/src/rag/embedders/factory.js +0 -1
- package/src/rag/retriever.js +1 -1
- package/src/roles/agent-role.js +1 -1
- package/src/roles/audit-role.js +10 -2
- 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/node_modules/@sec-ant/readable-stream/LICENSE +0 -21
- package/node_modules/@sec-ant/readable-stream/README.md +0 -230
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterablePrototype.d.ts +0 -1
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterator.d.ts +0 -27
- package/node_modules/@sec-ant/readable-stream/dist/core/fromAnyIterable.d.ts +0 -6
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.d.ts +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.js +0 -5
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.d.ts +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.js +0 -5
- package/node_modules/@sec-ant/readable-stream/dist/index/index.d.ts +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/index/index.js +0 -8
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.d.ts +0 -1
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.js +0 -3
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.d.ts +0 -1
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.js +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.d.ts +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.js +0 -4
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.d.ts +0 -1
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +0 -89
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.d.ts +0 -1
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +0 -34
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.d.ts +0 -2
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +0 -6
- package/node_modules/@sec-ant/readable-stream/dist/types/async-iterator.d.ts +0 -11
- package/node_modules/@sec-ant/readable-stream/package.json +0 -96
- package/node_modules/@sindresorhus/merge-streams/index.d.ts +0 -44
- package/node_modules/@sindresorhus/merge-streams/index.js +0 -265
- package/node_modules/@sindresorhus/merge-streams/license +0 -9
- package/node_modules/@sindresorhus/merge-streams/package.json +0 -49
- package/node_modules/@sindresorhus/merge-streams/readme.md +0 -53
- package/node_modules/base64-js/LICENSE +0 -21
- package/node_modules/base64-js/README.md +0 -34
- package/node_modules/base64-js/base64js.min.js +0 -1
- package/node_modules/base64-js/index.d.ts +0 -3
- package/node_modules/base64-js/index.js +0 -150
- package/node_modules/base64-js/package.json +0 -47
- package/node_modules/better-sqlite3/LICENSE +0 -21
- package/node_modules/better-sqlite3/README.md +0 -99
- package/node_modules/better-sqlite3/binding.gyp +0 -38
- package/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/node_modules/better-sqlite3/deps/common.gypi +0 -68
- package/node_modules/better-sqlite3/deps/copy.js +0 -31
- package/node_modules/better-sqlite3/deps/defines.gypi +0 -42
- package/node_modules/better-sqlite3/deps/download.sh +0 -123
- package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -268879
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -14335
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -739
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
- package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
- package/node_modules/better-sqlite3/lib/database.js +0 -90
- package/node_modules/better-sqlite3/lib/index.js +0 -3
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
- package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
- package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
- package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
- package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
- package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
- package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
- package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
- package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
- package/node_modules/better-sqlite3/lib/util.js +0 -12
- package/node_modules/better-sqlite3/package.json +0 -59
- package/node_modules/better-sqlite3/src/addon.cpp +0 -47
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
- package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
- package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
- package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
- package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
- package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
- package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
- package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
- package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
- package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
- package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
- package/node_modules/better-sqlite3/src/util/macros.cpp +0 -83
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
- package/node_modules/bindings/LICENSE.md +0 -22
- package/node_modules/bindings/README.md +0 -98
- package/node_modules/bindings/bindings.js +0 -221
- package/node_modules/bindings/package.json +0 -28
- package/node_modules/bl/.travis.yml +0 -17
- package/node_modules/bl/BufferList.js +0 -396
- package/node_modules/bl/LICENSE.md +0 -13
- package/node_modules/bl/README.md +0 -247
- package/node_modules/bl/bl.js +0 -84
- package/node_modules/bl/package.json +0 -37
- package/node_modules/bl/test/convert.js +0 -21
- package/node_modules/bl/test/indexOf.js +0 -492
- package/node_modules/bl/test/isBufferList.js +0 -32
- package/node_modules/bl/test/test.js +0 -869
- package/node_modules/buffer/AUTHORS.md +0 -70
- package/node_modules/buffer/LICENSE +0 -21
- package/node_modules/buffer/README.md +0 -410
- package/node_modules/buffer/index.d.ts +0 -186
- package/node_modules/buffer/index.js +0 -1817
- package/node_modules/buffer/package.json +0 -96
- package/node_modules/chownr/LICENSE +0 -15
- package/node_modules/chownr/README.md +0 -3
- package/node_modules/chownr/chownr.js +0 -167
- package/node_modules/chownr/package.json +0 -29
- package/node_modules/cross-spawn/LICENSE +0 -21
- package/node_modules/cross-spawn/README.md +0 -89
- package/node_modules/cross-spawn/index.js +0 -39
- package/node_modules/cross-spawn/lib/enoent.js +0 -59
- package/node_modules/cross-spawn/lib/parse.js +0 -91
- package/node_modules/cross-spawn/lib/util/escape.js +0 -47
- package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
- package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
- package/node_modules/cross-spawn/package.json +0 -73
- package/node_modules/decompress-response/index.d.ts +0 -22
- package/node_modules/decompress-response/index.js +0 -58
- package/node_modules/decompress-response/license +0 -9
- package/node_modules/decompress-response/package.json +0 -56
- package/node_modules/decompress-response/readme.md +0 -48
- package/node_modules/deep-extend/CHANGELOG.md +0 -46
- package/node_modules/deep-extend/LICENSE +0 -20
- package/node_modules/deep-extend/README.md +0 -91
- package/node_modules/deep-extend/index.js +0 -1
- package/node_modules/deep-extend/lib/deep-extend.js +0 -150
- package/node_modules/deep-extend/package.json +0 -62
- package/node_modules/detect-libc/LICENSE +0 -201
- package/node_modules/detect-libc/README.md +0 -163
- package/node_modules/detect-libc/index.d.ts +0 -14
- package/node_modules/detect-libc/lib/detect-libc.js +0 -313
- package/node_modules/detect-libc/lib/elf.js +0 -39
- package/node_modules/detect-libc/lib/filesystem.js +0 -51
- package/node_modules/detect-libc/lib/process.js +0 -24
- package/node_modules/detect-libc/package.json +0 -44
- package/node_modules/end-of-stream/LICENSE +0 -21
- package/node_modules/end-of-stream/README.md +0 -54
- package/node_modules/end-of-stream/index.js +0 -96
- package/node_modules/end-of-stream/package.json +0 -37
- package/node_modules/execa/index.d.ts +0 -27
- package/node_modules/execa/index.js +0 -28
- package/node_modules/execa/lib/arguments/command.js +0 -20
- package/node_modules/execa/lib/arguments/cwd.js +0 -39
- package/node_modules/execa/lib/arguments/encoding-option.js +0 -50
- package/node_modules/execa/lib/arguments/escape.js +0 -88
- package/node_modules/execa/lib/arguments/fd-options.js +0 -108
- package/node_modules/execa/lib/arguments/file-url.js +0 -25
- package/node_modules/execa/lib/arguments/options.js +0 -96
- package/node_modules/execa/lib/arguments/shell.js +0 -11
- package/node_modules/execa/lib/arguments/specific.js +0 -111
- package/node_modules/execa/lib/convert/add.js +0 -15
- package/node_modules/execa/lib/convert/concurrent.js +0 -33
- package/node_modules/execa/lib/convert/duplex.js +0 -69
- package/node_modules/execa/lib/convert/iterable.js +0 -34
- package/node_modules/execa/lib/convert/readable.js +0 -113
- package/node_modules/execa/lib/convert/shared.js +0 -46
- package/node_modules/execa/lib/convert/writable.js +0 -90
- package/node_modules/execa/lib/io/contents.js +0 -116
- package/node_modules/execa/lib/io/input-sync.js +0 -44
- package/node_modules/execa/lib/io/iterate.js +0 -110
- package/node_modules/execa/lib/io/max-buffer.js +0 -89
- package/node_modules/execa/lib/io/output-async.js +0 -80
- package/node_modules/execa/lib/io/output-sync.js +0 -135
- package/node_modules/execa/lib/io/pipeline.js +0 -48
- package/node_modules/execa/lib/io/strip-newline.js +0 -12
- package/node_modules/execa/lib/ipc/array.js +0 -4
- package/node_modules/execa/lib/ipc/buffer-messages.js +0 -47
- package/node_modules/execa/lib/ipc/forward.js +0 -56
- package/node_modules/execa/lib/ipc/get-each.js +0 -89
- package/node_modules/execa/lib/ipc/get-one.js +0 -69
- package/node_modules/execa/lib/ipc/graceful.js +0 -72
- package/node_modules/execa/lib/ipc/incoming.js +0 -79
- package/node_modules/execa/lib/ipc/ipc-input.js +0 -44
- package/node_modules/execa/lib/ipc/methods.js +0 -49
- package/node_modules/execa/lib/ipc/outgoing.js +0 -47
- package/node_modules/execa/lib/ipc/reference.js +0 -44
- package/node_modules/execa/lib/ipc/send.js +0 -91
- package/node_modules/execa/lib/ipc/strict.js +0 -113
- package/node_modules/execa/lib/ipc/validation.js +0 -111
- package/node_modules/execa/lib/methods/bind.js +0 -23
- package/node_modules/execa/lib/methods/command.js +0 -43
- package/node_modules/execa/lib/methods/create.js +0 -65
- package/node_modules/execa/lib/methods/main-async.js +0 -194
- package/node_modules/execa/lib/methods/main-sync.js +0 -163
- package/node_modules/execa/lib/methods/node.js +0 -51
- package/node_modules/execa/lib/methods/parameters.js +0 -31
- package/node_modules/execa/lib/methods/promise.js +0 -15
- package/node_modules/execa/lib/methods/script.js +0 -22
- package/node_modules/execa/lib/methods/template.js +0 -153
- package/node_modules/execa/lib/pipe/abort.js +0 -20
- package/node_modules/execa/lib/pipe/pipe-arguments.js +0 -91
- package/node_modules/execa/lib/pipe/sequence.js +0 -24
- package/node_modules/execa/lib/pipe/setup.js +0 -72
- package/node_modules/execa/lib/pipe/streaming.js +0 -51
- package/node_modules/execa/lib/pipe/throw.js +0 -58
- package/node_modules/execa/lib/resolve/all-async.js +0 -46
- package/node_modules/execa/lib/resolve/all-sync.js +0 -33
- package/node_modules/execa/lib/resolve/exit-async.js +0 -54
- package/node_modules/execa/lib/resolve/exit-sync.js +0 -25
- package/node_modules/execa/lib/resolve/stdio.js +0 -47
- package/node_modules/execa/lib/resolve/wait-stream.js +0 -96
- package/node_modules/execa/lib/resolve/wait-subprocess.js +0 -146
- package/node_modules/execa/lib/return/duration.js +0 -8
- package/node_modules/execa/lib/return/early-error.js +0 -60
- package/node_modules/execa/lib/return/final-error.js +0 -40
- package/node_modules/execa/lib/return/message.js +0 -157
- package/node_modules/execa/lib/return/reject.js +0 -13
- package/node_modules/execa/lib/return/result.js +0 -186
- package/node_modules/execa/lib/stdio/direction.js +0 -76
- package/node_modules/execa/lib/stdio/duplicate.js +0 -116
- package/node_modules/execa/lib/stdio/handle-async.js +0 -52
- package/node_modules/execa/lib/stdio/handle-sync.js +0 -57
- package/node_modules/execa/lib/stdio/handle.js +0 -214
- package/node_modules/execa/lib/stdio/input-option.js +0 -50
- package/node_modules/execa/lib/stdio/native.js +0 -106
- package/node_modules/execa/lib/stdio/stdio-option.js +0 -60
- package/node_modules/execa/lib/stdio/type.js +0 -173
- package/node_modules/execa/lib/terminate/cancel.js +0 -20
- package/node_modules/execa/lib/terminate/cleanup.js +0 -16
- package/node_modules/execa/lib/terminate/graceful.js +0 -71
- package/node_modules/execa/lib/terminate/kill.js +0 -93
- package/node_modules/execa/lib/terminate/signal.js +0 -70
- package/node_modules/execa/lib/terminate/timeout.js +0 -21
- package/node_modules/execa/lib/transform/encoding-transform.js +0 -51
- package/node_modules/execa/lib/transform/generator.js +0 -107
- package/node_modules/execa/lib/transform/normalize.js +0 -111
- package/node_modules/execa/lib/transform/object-mode.js +0 -41
- package/node_modules/execa/lib/transform/run-async.js +0 -60
- package/node_modules/execa/lib/transform/run-sync.js +0 -50
- package/node_modules/execa/lib/transform/split.js +0 -110
- package/node_modules/execa/lib/transform/validate.js +0 -43
- package/node_modules/execa/lib/utils/abort-signal.js +0 -8
- package/node_modules/execa/lib/utils/deferred.js +0 -7
- package/node_modules/execa/lib/utils/max-listeners.js +0 -14
- package/node_modules/execa/lib/utils/standard-stream.js +0 -6
- package/node_modules/execa/lib/utils/uint-array.js +0 -69
- package/node_modules/execa/lib/verbose/complete.js +0 -24
- package/node_modules/execa/lib/verbose/custom.js +0 -26
- package/node_modules/execa/lib/verbose/default.js +0 -54
- package/node_modules/execa/lib/verbose/error.js +0 -13
- package/node_modules/execa/lib/verbose/info.js +0 -39
- package/node_modules/execa/lib/verbose/ipc.js +0 -15
- package/node_modules/execa/lib/verbose/log.js +0 -54
- package/node_modules/execa/lib/verbose/output.js +0 -60
- package/node_modules/execa/lib/verbose/start.js +0 -15
- package/node_modules/execa/lib/verbose/values.js +0 -33
- package/node_modules/execa/license +0 -9
- package/node_modules/execa/package.json +0 -105
- package/node_modules/execa/readme.md +0 -461
- package/node_modules/execa/types/arguments/encoding-option.d.ts +0 -19
- package/node_modules/execa/types/arguments/fd-options.d.ts +0 -8
- package/node_modules/execa/types/arguments/options.d.ts +0 -400
- package/node_modules/execa/types/arguments/specific.d.ts +0 -52
- package/node_modules/execa/types/convert.d.ts +0 -58
- package/node_modules/execa/types/ipc.d.ts +0 -156
- package/node_modules/execa/types/methods/command.d.ts +0 -114
- package/node_modules/execa/types/methods/main-async.d.ts +0 -379
- package/node_modules/execa/types/methods/main-sync.d.ts +0 -59
- package/node_modules/execa/types/methods/node.d.ts +0 -62
- package/node_modules/execa/types/methods/script.d.ts +0 -115
- package/node_modules/execa/types/methods/template.d.ts +0 -18
- package/node_modules/execa/types/pipe.d.ts +0 -58
- package/node_modules/execa/types/return/final-error.d.ts +0 -51
- package/node_modules/execa/types/return/ignore.d.ts +0 -26
- package/node_modules/execa/types/return/result-all.d.ts +0 -30
- package/node_modules/execa/types/return/result-ipc.d.ts +0 -27
- package/node_modules/execa/types/return/result-stdio.d.ts +0 -17
- package/node_modules/execa/types/return/result-stdout.d.ts +0 -50
- package/node_modules/execa/types/return/result.d.ts +0 -203
- package/node_modules/execa/types/stdio/array.d.ts +0 -16
- package/node_modules/execa/types/stdio/direction.d.ts +0 -12
- package/node_modules/execa/types/stdio/option.d.ts +0 -40
- package/node_modules/execa/types/stdio/type.d.ts +0 -170
- package/node_modules/execa/types/subprocess/all.d.ts +0 -17
- package/node_modules/execa/types/subprocess/stdio.d.ts +0 -18
- package/node_modules/execa/types/subprocess/stdout.d.ts +0 -22
- package/node_modules/execa/types/subprocess/subprocess.d.ts +0 -117
- package/node_modules/execa/types/transform/normalize.d.ts +0 -57
- package/node_modules/execa/types/transform/object-mode.d.ts +0 -21
- package/node_modules/execa/types/utils.d.ts +0 -13
- package/node_modules/execa/types/verbose.d.ts +0 -98
- package/node_modules/expand-template/.travis.yml +0 -6
- package/node_modules/expand-template/LICENSE +0 -21
- package/node_modules/expand-template/README.md +0 -43
- package/node_modules/expand-template/index.js +0 -26
- package/node_modules/expand-template/package.json +0 -29
- package/node_modules/expand-template/test.js +0 -67
- package/node_modules/figures/index.d.ts +0 -279
- package/node_modules/figures/index.js +0 -292
- package/node_modules/figures/license +0 -9
- package/node_modules/figures/package.json +0 -49
- package/node_modules/figures/readme.md +0 -337
- package/node_modules/file-uri-to-path/.npmignore +0 -1
- package/node_modules/file-uri-to-path/.travis.yml +0 -30
- package/node_modules/file-uri-to-path/History.md +0 -21
- package/node_modules/file-uri-to-path/LICENSE +0 -20
- package/node_modules/file-uri-to-path/README.md +0 -74
- package/node_modules/file-uri-to-path/index.d.ts +0 -2
- package/node_modules/file-uri-to-path/index.js +0 -66
- package/node_modules/file-uri-to-path/package.json +0 -32
- package/node_modules/file-uri-to-path/test/test.js +0 -24
- package/node_modules/file-uri-to-path/test/tests.json +0 -13
- package/node_modules/fs-constants/LICENSE +0 -21
- package/node_modules/fs-constants/README.md +0 -26
- package/node_modules/fs-constants/browser.js +0 -1
- package/node_modules/fs-constants/index.js +0 -1
- package/node_modules/fs-constants/package.json +0 -19
- package/node_modules/get-stream/license +0 -9
- package/node_modules/get-stream/package.json +0 -60
- package/node_modules/get-stream/readme.md +0 -303
- package/node_modules/get-stream/source/array-buffer.js +0 -84
- package/node_modules/get-stream/source/array.js +0 -32
- package/node_modules/get-stream/source/buffer.js +0 -19
- package/node_modules/get-stream/source/contents.js +0 -121
- package/node_modules/get-stream/source/exports.js +0 -5
- package/node_modules/get-stream/source/index.d.ts +0 -121
- package/node_modules/get-stream/source/index.js +0 -13
- package/node_modules/get-stream/source/stream.js +0 -65
- package/node_modules/get-stream/source/string.js +0 -41
- package/node_modules/get-stream/source/utils.js +0 -11
- package/node_modules/github-from-package/.travis.yml +0 -4
- package/node_modules/github-from-package/LICENSE +0 -18
- package/node_modules/github-from-package/example/package.json +0 -8
- package/node_modules/github-from-package/example/url.js +0 -3
- package/node_modules/github-from-package/index.js +0 -17
- package/node_modules/github-from-package/package.json +0 -30
- package/node_modules/github-from-package/readme.markdown +0 -53
- package/node_modules/github-from-package/test/a.json +0 -8
- package/node_modules/github-from-package/test/b.json +0 -5
- package/node_modules/github-from-package/test/c.json +0 -5
- package/node_modules/github-from-package/test/d.json +0 -7
- package/node_modules/github-from-package/test/e.json +0 -5
- package/node_modules/github-from-package/test/url.js +0 -19
- package/node_modules/human-signals/LICENSE +0 -201
- package/node_modules/human-signals/README.md +0 -171
- package/node_modules/human-signals/build/src/core.js +0 -273
- package/node_modules/human-signals/build/src/main.d.ts +0 -206
- package/node_modules/human-signals/build/src/main.js +0 -70
- package/node_modules/human-signals/build/src/realtime.js +0 -16
- package/node_modules/human-signals/build/src/signals.js +0 -34
- package/node_modules/human-signals/package.json +0 -66
- package/node_modules/ieee754/LICENSE +0 -11
- package/node_modules/ieee754/README.md +0 -51
- package/node_modules/ieee754/index.d.ts +0 -10
- package/node_modules/ieee754/index.js +0 -85
- package/node_modules/ieee754/package.json +0 -52
- package/node_modules/inherits/LICENSE +0 -16
- package/node_modules/inherits/README.md +0 -42
- package/node_modules/inherits/inherits.js +0 -9
- package/node_modules/inherits/inherits_browser.js +0 -27
- package/node_modules/inherits/package.json +0 -29
- package/node_modules/ini/LICENSE +0 -15
- package/node_modules/ini/README.md +0 -102
- package/node_modules/ini/ini.js +0 -206
- package/node_modules/ini/package.json +0 -33
- package/node_modules/is-plain-obj/index.d.ts +0 -35
- package/node_modules/is-plain-obj/index.js +0 -8
- package/node_modules/is-plain-obj/license +0 -9
- package/node_modules/is-plain-obj/package.json +0 -41
- package/node_modules/is-plain-obj/readme.md +0 -58
- package/node_modules/is-stream/index.d.ts +0 -90
- package/node_modules/is-stream/index.js +0 -37
- package/node_modules/is-stream/license +0 -9
- package/node_modules/is-stream/package.json +0 -48
- package/node_modules/is-stream/readme.md +0 -57
- package/node_modules/is-unicode-supported/index.d.ts +0 -12
- package/node_modules/is-unicode-supported/index.js +0 -21
- package/node_modules/is-unicode-supported/license +0 -9
- package/node_modules/is-unicode-supported/package.json +0 -47
- package/node_modules/is-unicode-supported/readme.md +0 -35
- package/node_modules/isexe/.npmignore +0 -2
- package/node_modules/isexe/LICENSE +0 -15
- package/node_modules/isexe/README.md +0 -51
- package/node_modules/isexe/index.js +0 -57
- package/node_modules/isexe/mode.js +0 -41
- package/node_modules/isexe/package.json +0 -31
- package/node_modules/isexe/test/basic.js +0 -221
- package/node_modules/isexe/windows.js +0 -42
- package/node_modules/mimic-response/index.d.ts +0 -17
- package/node_modules/mimic-response/index.js +0 -77
- package/node_modules/mimic-response/license +0 -9
- package/node_modules/mimic-response/package.json +0 -42
- package/node_modules/mimic-response/readme.md +0 -78
- package/node_modules/minimist/.eslintrc +0 -29
- package/node_modules/minimist/.github/FUNDING.yml +0 -12
- package/node_modules/minimist/.nycrc +0 -14
- package/node_modules/minimist/CHANGELOG.md +0 -298
- package/node_modules/minimist/LICENSE +0 -18
- package/node_modules/minimist/README.md +0 -121
- package/node_modules/minimist/example/parse.js +0 -4
- package/node_modules/minimist/index.js +0 -263
- package/node_modules/minimist/package.json +0 -75
- package/node_modules/minimist/test/all_bool.js +0 -34
- package/node_modules/minimist/test/bool.js +0 -177
- package/node_modules/minimist/test/dash.js +0 -43
- package/node_modules/minimist/test/default_bool.js +0 -37
- package/node_modules/minimist/test/dotted.js +0 -24
- package/node_modules/minimist/test/kv_short.js +0 -32
- package/node_modules/minimist/test/long.js +0 -33
- package/node_modules/minimist/test/num.js +0 -38
- package/node_modules/minimist/test/parse.js +0 -209
- package/node_modules/minimist/test/parse_modified.js +0 -11
- package/node_modules/minimist/test/proto.js +0 -64
- package/node_modules/minimist/test/short.js +0 -69
- package/node_modules/minimist/test/stop_early.js +0 -17
- package/node_modules/minimist/test/unknown.js +0 -104
- package/node_modules/minimist/test/whitespace.js +0 -10
- package/node_modules/mkdirp-classic/LICENSE +0 -21
- package/node_modules/mkdirp-classic/README.md +0 -18
- package/node_modules/mkdirp-classic/index.js +0 -98
- package/node_modules/mkdirp-classic/package.json +0 -18
- package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +0 -31
- package/node_modules/napi-build-utils/LICENSE +0 -21
- package/node_modules/napi-build-utils/README.md +0 -52
- package/node_modules/napi-build-utils/index.js +0 -214
- package/node_modules/napi-build-utils/index.md +0 -0
- package/node_modules/napi-build-utils/package.json +0 -42
- package/node_modules/node-abi/LICENSE +0 -21
- package/node_modules/node-abi/README.md +0 -54
- package/node_modules/node-abi/abi_registry.json +0 -446
- package/node_modules/node-abi/index.js +0 -179
- package/node_modules/node-abi/package.json +0 -45
- package/node_modules/npm-run-path/index.d.ts +0 -90
- package/node_modules/npm-run-path/index.js +0 -55
- package/node_modules/npm-run-path/license +0 -9
- package/node_modules/npm-run-path/node_modules/path-key/index.d.ts +0 -31
- package/node_modules/npm-run-path/node_modules/path-key/index.js +0 -12
- package/node_modules/npm-run-path/node_modules/path-key/license +0 -9
- package/node_modules/npm-run-path/node_modules/path-key/package.json +0 -41
- package/node_modules/npm-run-path/node_modules/path-key/readme.md +0 -57
- package/node_modules/npm-run-path/package.json +0 -52
- package/node_modules/npm-run-path/readme.md +0 -104
- package/node_modules/once/LICENSE +0 -15
- package/node_modules/once/README.md +0 -79
- package/node_modules/once/once.js +0 -42
- package/node_modules/once/package.json +0 -33
- package/node_modules/parse-ms/index.d.ts +0 -30
- package/node_modules/parse-ms/index.js +0 -45
- package/node_modules/parse-ms/license +0 -9
- package/node_modules/parse-ms/package.json +0 -47
- package/node_modules/parse-ms/readme.md +0 -46
- package/node_modules/path-key/index.d.ts +0 -40
- package/node_modules/path-key/index.js +0 -16
- package/node_modules/path-key/license +0 -9
- package/node_modules/path-key/package.json +0 -39
- package/node_modules/path-key/readme.md +0 -61
- package/node_modules/prebuild-install/CHANGELOG.md +0 -131
- package/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
- package/node_modules/prebuild-install/LICENSE +0 -21
- package/node_modules/prebuild-install/README.md +0 -163
- package/node_modules/prebuild-install/asset.js +0 -44
- package/node_modules/prebuild-install/bin.js +0 -78
- package/node_modules/prebuild-install/download.js +0 -142
- package/node_modules/prebuild-install/error.js +0 -14
- package/node_modules/prebuild-install/help.txt +0 -16
- package/node_modules/prebuild-install/index.js +0 -1
- package/node_modules/prebuild-install/log.js +0 -33
- package/node_modules/prebuild-install/package.json +0 -67
- package/node_modules/prebuild-install/proxy.js +0 -35
- package/node_modules/prebuild-install/rc.js +0 -64
- package/node_modules/prebuild-install/util.js +0 -143
- package/node_modules/pretty-ms/index.d.ts +0 -157
- package/node_modules/pretty-ms/index.js +0 -149
- package/node_modules/pretty-ms/license +0 -9
- package/node_modules/pretty-ms/package.json +0 -55
- package/node_modules/pretty-ms/readme.md +0 -179
- package/node_modules/pump/.github/FUNDING.yml +0 -2
- package/node_modules/pump/.travis.yml +0 -5
- package/node_modules/pump/LICENSE +0 -21
- package/node_modules/pump/README.md +0 -74
- package/node_modules/pump/SECURITY.md +0 -5
- package/node_modules/pump/empty.js +0 -1
- package/node_modules/pump/index.js +0 -86
- package/node_modules/pump/package.json +0 -30
- package/node_modules/pump/test-browser.js +0 -66
- package/node_modules/pump/test-node.js +0 -53
- package/node_modules/rc/LICENSE.APACHE2 +0 -15
- package/node_modules/rc/LICENSE.BSD +0 -26
- package/node_modules/rc/LICENSE.MIT +0 -24
- package/node_modules/rc/README.md +0 -227
- package/node_modules/rc/browser.js +0 -7
- package/node_modules/rc/cli.js +0 -4
- package/node_modules/rc/index.js +0 -53
- package/node_modules/rc/lib/utils.js +0 -104
- package/node_modules/rc/package.json +0 -29
- package/node_modules/rc/test/ini.js +0 -16
- package/node_modules/rc/test/nested-env-vars.js +0 -50
- package/node_modules/rc/test/test.js +0 -59
- package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/node_modules/readable-stream/LICENSE +0 -47
- package/node_modules/readable-stream/README.md +0 -106
- package/node_modules/readable-stream/errors-browser.js +0 -127
- package/node_modules/readable-stream/errors.js +0 -116
- package/node_modules/readable-stream/experimentalWarning.js +0 -17
- package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
- package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
- package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
- package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
- package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
- package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
- package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
- package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
- package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
- package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/node_modules/readable-stream/package.json +0 -68
- package/node_modules/readable-stream/readable-browser.js +0 -9
- package/node_modules/readable-stream/readable.js +0 -16
- package/node_modules/safe-buffer/LICENSE +0 -21
- package/node_modules/safe-buffer/README.md +0 -584
- package/node_modules/safe-buffer/index.d.ts +0 -187
- package/node_modules/safe-buffer/index.js +0 -65
- package/node_modules/safe-buffer/package.json +0 -51
- package/node_modules/semver/LICENSE +0 -15
- package/node_modules/semver/README.md +0 -665
- package/node_modules/semver/bin/semver.js +0 -191
- package/node_modules/semver/classes/comparator.js +0 -143
- package/node_modules/semver/classes/index.js +0 -7
- package/node_modules/semver/classes/range.js +0 -557
- package/node_modules/semver/classes/semver.js +0 -333
- package/node_modules/semver/functions/clean.js +0 -8
- package/node_modules/semver/functions/cmp.js +0 -54
- package/node_modules/semver/functions/coerce.js +0 -62
- package/node_modules/semver/functions/compare-build.js +0 -9
- package/node_modules/semver/functions/compare-loose.js +0 -5
- package/node_modules/semver/functions/compare.js +0 -7
- package/node_modules/semver/functions/diff.js +0 -60
- package/node_modules/semver/functions/eq.js +0 -5
- package/node_modules/semver/functions/gt.js +0 -5
- package/node_modules/semver/functions/gte.js +0 -5
- package/node_modules/semver/functions/inc.js +0 -21
- package/node_modules/semver/functions/lt.js +0 -5
- package/node_modules/semver/functions/lte.js +0 -5
- package/node_modules/semver/functions/major.js +0 -5
- package/node_modules/semver/functions/minor.js +0 -5
- package/node_modules/semver/functions/neq.js +0 -5
- package/node_modules/semver/functions/parse.js +0 -18
- package/node_modules/semver/functions/patch.js +0 -5
- package/node_modules/semver/functions/prerelease.js +0 -8
- package/node_modules/semver/functions/rcompare.js +0 -5
- package/node_modules/semver/functions/rsort.js +0 -5
- package/node_modules/semver/functions/satisfies.js +0 -12
- package/node_modules/semver/functions/sort.js +0 -5
- package/node_modules/semver/functions/valid.js +0 -8
- package/node_modules/semver/index.js +0 -91
- package/node_modules/semver/internal/constants.js +0 -37
- package/node_modules/semver/internal/debug.js +0 -11
- package/node_modules/semver/internal/identifiers.js +0 -29
- package/node_modules/semver/internal/lrucache.js +0 -42
- package/node_modules/semver/internal/parse-options.js +0 -17
- package/node_modules/semver/internal/re.js +0 -223
- package/node_modules/semver/package.json +0 -78
- package/node_modules/semver/preload.js +0 -4
- package/node_modules/semver/range.bnf +0 -16
- package/node_modules/semver/ranges/gtr.js +0 -6
- package/node_modules/semver/ranges/intersects.js +0 -9
- package/node_modules/semver/ranges/ltr.js +0 -6
- package/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/node_modules/semver/ranges/min-version.js +0 -63
- package/node_modules/semver/ranges/outside.js +0 -82
- package/node_modules/semver/ranges/simplify.js +0 -49
- package/node_modules/semver/ranges/subset.js +0 -249
- package/node_modules/semver/ranges/to-comparators.js +0 -10
- package/node_modules/semver/ranges/valid.js +0 -13
- package/node_modules/shebang-command/index.js +0 -19
- package/node_modules/shebang-command/license +0 -9
- package/node_modules/shebang-command/package.json +0 -34
- package/node_modules/shebang-command/readme.md +0 -34
- package/node_modules/shebang-regex/index.d.ts +0 -22
- package/node_modules/shebang-regex/index.js +0 -2
- package/node_modules/shebang-regex/license +0 -9
- package/node_modules/shebang-regex/package.json +0 -35
- package/node_modules/shebang-regex/readme.md +0 -33
- package/node_modules/signal-exit/LICENSE.txt +0 -16
- package/node_modules/signal-exit/README.md +0 -74
- package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
- package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
- package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
- package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
- package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/index.js +0 -279
- package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
- package/node_modules/signal-exit/dist/cjs/package.json +0 -3
- package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
- package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
- package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
- package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
- package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
- package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/index.js +0 -275
- package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/package.json +0 -3
- package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
- package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
- package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
- package/node_modules/signal-exit/package.json +0 -106
- package/node_modules/simple-concat/.travis.yml +0 -3
- package/node_modules/simple-concat/LICENSE +0 -20
- package/node_modules/simple-concat/README.md +0 -44
- package/node_modules/simple-concat/index.js +0 -15
- package/node_modules/simple-concat/package.json +0 -47
- package/node_modules/simple-concat/test/basic.js +0 -41
- package/node_modules/simple-get/.github/dependabot.yml +0 -15
- package/node_modules/simple-get/.github/workflows/ci.yml +0 -23
- package/node_modules/simple-get/LICENSE +0 -20
- package/node_modules/simple-get/README.md +0 -333
- package/node_modules/simple-get/index.js +0 -108
- package/node_modules/simple-get/package.json +0 -67
- package/node_modules/sqlite-vec/README.md +0 -1
- package/node_modules/sqlite-vec/index.cjs +0 -46
- package/node_modules/sqlite-vec/index.d.ts +0 -17
- package/node_modules/sqlite-vec/index.mjs +0 -47
- package/node_modules/sqlite-vec/package.json +0 -1
- package/node_modules/sqlite-vec-linux-x64/README.md +0 -1
- package/node_modules/sqlite-vec-linux-x64/package.json +0 -1
- package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
- package/node_modules/string_decoder/LICENSE +0 -48
- package/node_modules/string_decoder/README.md +0 -47
- package/node_modules/string_decoder/lib/string_decoder.js +0 -296
- package/node_modules/string_decoder/package.json +0 -34
- package/node_modules/strip-final-newline/index.d.ts +0 -18
- package/node_modules/strip-final-newline/index.js +0 -26
- package/node_modules/strip-final-newline/license +0 -9
- package/node_modules/strip-final-newline/package.json +0 -49
- package/node_modules/strip-final-newline/readme.md +0 -34
- package/node_modules/strip-json-comments/index.js +0 -70
- package/node_modules/strip-json-comments/license +0 -21
- package/node_modules/strip-json-comments/package.json +0 -42
- package/node_modules/strip-json-comments/readme.md +0 -64
- package/node_modules/tar-fs/.travis.yml +0 -6
- package/node_modules/tar-fs/LICENSE +0 -21
- package/node_modules/tar-fs/README.md +0 -165
- package/node_modules/tar-fs/index.js +0 -363
- package/node_modules/tar-fs/package.json +0 -41
- package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
- package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
- 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 +0 -346
- package/node_modules/tar-stream/LICENSE +0 -21
- package/node_modules/tar-stream/README.md +0 -168
- package/node_modules/tar-stream/extract.js +0 -257
- package/node_modules/tar-stream/headers.js +0 -295
- package/node_modules/tar-stream/index.js +0 -2
- package/node_modules/tar-stream/pack.js +0 -255
- package/node_modules/tar-stream/package.json +0 -58
- package/node_modules/tar-stream/sandbox.js +0 -11
- package/node_modules/tunnel-agent/LICENSE +0 -55
- package/node_modules/tunnel-agent/README.md +0 -4
- package/node_modules/tunnel-agent/index.js +0 -244
- package/node_modules/tunnel-agent/package.json +0 -22
- package/node_modules/unicorn-magic/default.d.ts +0 -13
- package/node_modules/unicorn-magic/default.js +0 -14
- package/node_modules/unicorn-magic/license +0 -9
- package/node_modules/unicorn-magic/node.d.ts +0 -125
- package/node_modules/unicorn-magic/node.js +0 -49
- package/node_modules/unicorn-magic/package.json +0 -62
- package/node_modules/unicorn-magic/readme.md +0 -25
- package/node_modules/util-deprecate/History.md +0 -16
- package/node_modules/util-deprecate/LICENSE +0 -24
- package/node_modules/util-deprecate/README.md +0 -53
- package/node_modules/util-deprecate/browser.js +0 -67
- package/node_modules/util-deprecate/node.js +0 -6
- package/node_modules/util-deprecate/package.json +0 -27
- package/node_modules/which/CHANGELOG.md +0 -166
- package/node_modules/which/LICENSE +0 -15
- package/node_modules/which/README.md +0 -54
- package/node_modules/which/bin/node-which +0 -52
- package/node_modules/which/package.json +0 -43
- package/node_modules/which/which.js +0 -125
- package/node_modules/wrappy/LICENSE +0 -15
- package/node_modules/wrappy/README.md +0 -36
- package/node_modules/wrappy/package.json +0 -29
- package/node_modules/wrappy/wrappy.js +0 -33
- package/node_modules/yoctocolors/base.d.ts +0 -47
- package/node_modules/yoctocolors/base.js +0 -94
- package/node_modules/yoctocolors/index.d.ts +0 -2
- package/node_modules/yoctocolors/index.js +0 -2
- package/node_modules/yoctocolors/license +0 -9
- package/node_modules/yoctocolors/package.json +0 -69
- package/node_modules/yoctocolors/readme.md +0 -138
|
@@ -72,6 +72,10 @@ export async function collectSemgrepFindings(projectDir, logger = null) {
|
|
|
72
72
|
return { available: true, ...parseSemgrepOutput(parsed, projectDir) };
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
function relativizeSemgrepPath(p, projectDir) {
|
|
76
|
+
return p.startsWith(projectDir + "/") ? p.slice(projectDir.length + 1) : p;
|
|
77
|
+
}
|
|
78
|
+
|
|
75
79
|
/**
|
|
76
80
|
* Convert semgrep's JSON shape into the flat findings list the prompt
|
|
77
81
|
* builder consumes. Semgrep emits results[] with rule id, severity,
|
|
@@ -86,7 +90,7 @@ export function parseSemgrepOutput(raw, projectDir = "") {
|
|
|
86
90
|
const findings = [];
|
|
87
91
|
for (const r of results) {
|
|
88
92
|
const file = r.path && projectDir
|
|
89
|
-
? r.path
|
|
93
|
+
? relativizeSemgrepPath(r.path, projectDir)
|
|
90
94
|
: r.path || "";
|
|
91
95
|
findings.push({
|
|
92
96
|
rule: r.check_id || "(unknown)",
|
|
@@ -37,7 +37,14 @@ const SILENCED_PATTERNS = /killed\s+after\s+\d+\s*ms|silence\s*timeout|no\s+outp
|
|
|
37
37
|
// ("You've hit your session limit · resets 10:10pm"). Without them the
|
|
38
38
|
// message fell through to UNKNOWN_FATAL and the run aborted instead of
|
|
39
39
|
// hibernating until the reset.
|
|
40
|
-
|
|
40
|
+
// Decomposed by family (S5843, complexity 36 → 3 named groups). The
|
|
41
|
+
// union of tokens is identical to the original single alternation.
|
|
42
|
+
const RATE_LIMIT_GROUPS = [
|
|
43
|
+
/rate\s*limit|too\s+many\s+requests|\b429\b|throttl/i,
|
|
44
|
+
/exceeded\s+your\s+current\s+quota|resource\s+exhausted|quota\s+exceeded|token\s+limit\s+reached/i,
|
|
45
|
+
/usage\s+limit|monthly\s+limit|weekly\s+limit|daily\s+limit|session\s+limit/i,
|
|
46
|
+
];
|
|
47
|
+
const RATE_LIMIT_PATTERNS = { test: (text) => RATE_LIMIT_GROUPS.some((re) => re.test(text)) };
|
|
41
48
|
const API_DOWN_PATTERNS = /\b50[0-4]\b|bad\s+gateway|service\s+unavailable|gateway\s+timeout|overloaded|internal\s+server\s+error/i;
|
|
42
49
|
const NETWORK_PATTERNS = /ECONNREFUSED|ECONNRESET|ETIMEDOUT|socket\s+hang\s+up|fetch\s+failed|network\s+error/i;
|
|
43
50
|
|
package/src/brain/decisor.js
CHANGED
|
@@ -179,8 +179,8 @@ export function buildDecision({ triage, task: _task, config = {}, overrides = {}
|
|
|
179
179
|
solomonReason = "triage returned no level";
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
const rolesOn = Array.from(roles).sort();
|
|
183
|
-
const rolesOff = Array.from(VALID_ROLES).filter((r) => !roles.has(r)).sort();
|
|
182
|
+
const rolesOn = Array.from(roles).sort((a, b) => a.localeCompare(b));
|
|
183
|
+
const rolesOff = Array.from(VALID_ROLES).filter((r) => !roles.has(r)).sort((a, b) => a.localeCompare(b));
|
|
184
184
|
|
|
185
185
|
const rationale = buildRationale({ level, taskType, rolesOn, appliedOverrides, triage });
|
|
186
186
|
|
|
@@ -161,8 +161,8 @@ export function applyRulingToDecision(decision, ruling, logger) {
|
|
|
161
161
|
|
|
162
162
|
return {
|
|
163
163
|
...decision,
|
|
164
|
-
rolesOn: Array.from(rolesOn).sort(),
|
|
165
|
-
rolesOff: Array.from(rolesOff).sort(),
|
|
164
|
+
rolesOn: Array.from(rolesOn).sort((a, b) => a.localeCompare(b)),
|
|
165
|
+
rolesOff: Array.from(rolesOff).sort((a, b) => a.localeCompare(b)),
|
|
166
166
|
appliedOverrides: [...decision.appliedOverrides, ...applied],
|
|
167
167
|
confidence: applied.length > 0 ? "high" : decision.confidence,
|
|
168
168
|
consultSolomon: false,
|
package/src/commands/audit.js
CHANGED
|
@@ -38,7 +38,8 @@ function promptContinueWithLlm({ promptFn = null } = {}) {
|
|
|
38
38
|
function formatFindings(findings) {
|
|
39
39
|
const lines = [];
|
|
40
40
|
for (const f of findings) {
|
|
41
|
-
const
|
|
41
|
+
const lineSuffix = f.line ? `:${f.line}` : "";
|
|
42
|
+
const loc = f.file ? `${f.file}${lineSuffix}` : "";
|
|
42
43
|
const rule = f.rule ? ` [${f.rule}]` : "";
|
|
43
44
|
lines.push(` - [${f.severity.toUpperCase()}] ${loc}${rule}`);
|
|
44
45
|
lines.push(` ${f.description}`);
|
|
@@ -116,7 +117,8 @@ function formatAudit(parsed, usage = null) {
|
|
|
116
117
|
function formatUsageSummary(usage) {
|
|
117
118
|
if (!usage) return null;
|
|
118
119
|
const lines = ["## LLM Usage"];
|
|
119
|
-
|
|
120
|
+
const modelSuffix = usage.model ? ` (${usage.model})` : "";
|
|
121
|
+
lines.push(`- Provider: ${usage.provider}${modelSuffix}`);
|
|
120
122
|
if (typeof usage.durationMs === "number") {
|
|
121
123
|
lines.push(`- Duration: ${(usage.durationMs / 1000).toFixed(1)}s`);
|
|
122
124
|
}
|
|
@@ -130,6 +132,9 @@ function formatUsageSummary(usage) {
|
|
|
130
132
|
// locale-less Node and "1,234" on a US-locale workstation).
|
|
131
133
|
const fmt = (n) => n.toLocaleString("en-US");
|
|
132
134
|
lines.push(`- Tokens: ${fmt(usage.total_tokens)} total (${fmt(usage.tokens_in)} in, ${fmt(usage.tokens_out)} out)`);
|
|
135
|
+
if (typeof usage.cached_tokens === "number" && usage.cached_tokens > 0) {
|
|
136
|
+
lines.push(`- Cached tokens: ${fmt(usage.cached_tokens)} (prompt-cache hits)`);
|
|
137
|
+
}
|
|
133
138
|
if (typeof usage.cost_usd === "number") {
|
|
134
139
|
lines.push(`- Estimated cost: $${usage.cost_usd.toFixed(4)} USD`);
|
|
135
140
|
}
|
|
@@ -402,4 +407,4 @@ export async function auditCommand({ task, config, logger, dimensions, json, age
|
|
|
402
407
|
}
|
|
403
408
|
|
|
404
409
|
// Exposed for tests — kept module-private otherwise.
|
|
405
|
-
export { formatAudit, formatUsageSummary
|
|
410
|
+
export { formatAudit, formatUsageSummary };
|
package/src/commands/board.js
CHANGED
|
@@ -128,7 +128,7 @@ export function waitForEarlyExit(child, logPath) {
|
|
|
128
128
|
// out, so we never announce "HU Board started" for an unreachable
|
|
129
129
|
// server. Overridable with KJ_BOARD_READY_TIMEOUT_MS (tests set it
|
|
130
130
|
// low to stay fast).
|
|
131
|
-
|
|
131
|
+
async function waitForBoardReachable(port, totalTimeoutMs) {
|
|
132
132
|
const envTimeout = Number(process.env.KJ_BOARD_READY_TIMEOUT_MS);
|
|
133
133
|
const budget = Number.isFinite(envTimeout) && envTimeout >= 0
|
|
134
134
|
? envTimeout
|
package/src/commands/standby.js
CHANGED
|
@@ -49,7 +49,10 @@ export async function standbyListCommand({ json } = {}) {
|
|
|
49
49
|
const ms = new Date(s.cooldownUntil).getTime() - now;
|
|
50
50
|
const status = ms <= 0 ? "✓ lista para resume" : `⏳ resume en ${formatCountdown(ms)}`;
|
|
51
51
|
console.log(` ${s.sessionId} · ${s.reason || "?"} · ${status}`);
|
|
52
|
-
if (s.planId)
|
|
52
|
+
if (s.planId) {
|
|
53
|
+
const huSuffix = s.huId ? `, HU: ${s.huId}` : "";
|
|
54
|
+
console.log(` plan: ${s.planId}${huSuffix}`);
|
|
55
|
+
}
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
|
package/src/config/loader.js
CHANGED
|
@@ -187,8 +187,8 @@ function stripRuntimeOnlyKeys(config) {
|
|
|
187
187
|
// warning on every subsequent kj run.
|
|
188
188
|
if (out.sonarqube && typeof out.sonarqube === "object"
|
|
189
189
|
&& Object.prototype.hasOwnProperty.call(out.sonarqube, "enabled")) {
|
|
190
|
-
const
|
|
191
|
-
|
|
190
|
+
const rest = { ...out.sonarqube };
|
|
191
|
+
delete rest.enabled;
|
|
192
192
|
out.sonarqube = rest;
|
|
193
193
|
}
|
|
194
194
|
return out;
|
package/src/golden/asserter.js
CHANGED
|
@@ -10,12 +10,14 @@
|
|
|
10
10
|
* allowed_loc_range need filesystem access — PR-3a wires those.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import { escapeRegExp } from "../utils/escape-regexp.js";
|
|
14
|
+
|
|
13
15
|
const COMMIT_LINE = /^- `([^`]+)`\s+(.*)$/;
|
|
14
16
|
const SCORE_LINE = /^\*\*Score\*\*:\s*(\d+)\s*\/\s*100/m;
|
|
15
17
|
const AUDIT_ROW = /^\|\s*`audit`\s*\|\s*([^|]+?)\s*\|/m;
|
|
16
18
|
|
|
17
19
|
function extractSection(content, heading) {
|
|
18
|
-
const re = new RegExp(`^## ${heading}\\s*$([\\s\\S]*?)(?=^## |\\Z)`, "m");
|
|
20
|
+
const re = new RegExp(`^## ${escapeRegExp(heading)}\\s*$([\\s\\S]*?)(?=^## |\\Z)`, "m");
|
|
19
21
|
const m = content.match(re);
|
|
20
22
|
return m ? m[1].trim() : "";
|
|
21
23
|
}
|
package/src/golden/schema.js
CHANGED
|
@@ -12,7 +12,7 @@ const NonNegInt = v.pipe(v.number(), v.integer(), v.minValue(0));
|
|
|
12
12
|
const LocRangeSchema = v.pipe(v.array(NonNegInt), v.length(2),
|
|
13
13
|
v.check((arr) => arr[0] <= arr[1], "allowed_loc_range: min must be <= max"));
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const GoldenTaskSchema = v.looseObject({
|
|
16
16
|
id: v.pipe(NonEmptyString, v.regex(/^[a-z0-9_-]+$/, "id must be lowercase a-z0-9_-")),
|
|
17
17
|
title: NonEmptyString,
|
|
18
18
|
prompt: NonEmptyString,
|
package/src/hu/auto-generator.js
CHANGED
|
@@ -106,7 +106,7 @@ function filterConflictingHints(hints) {
|
|
|
106
106
|
* @param {string[]} hints
|
|
107
107
|
* @returns {"python"|"go"|"rust"|"javascript"}
|
|
108
108
|
*/
|
|
109
|
-
|
|
109
|
+
function resolveLanguageFromHints(hints) {
|
|
110
110
|
if (!hints || hints.length === 0) return "javascript";
|
|
111
111
|
if (hints.some((h) => HINT_PYTHON.has(h))) return "python";
|
|
112
112
|
if (hints.some((h) => HINT_GO.has(h))) return "go";
|
|
@@ -24,7 +24,7 @@ async function initRuntime() {
|
|
|
24
24
|
return runtimePromise;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
function grammarPath(id) {
|
|
28
28
|
return resolve(GRAMMAR_DIR, `${id}.wasm`);
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -43,7 +43,3 @@ export function getLoaded(id) {
|
|
|
43
43
|
return cache.get(id) || null;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
export function resetForTests() {
|
|
47
|
-
cache.clear();
|
|
48
|
-
runtimePromise = null;
|
|
49
|
-
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
} from "../shared-helpers.js";
|
|
17
17
|
import { buildDashboardJson } from "../../utils/status-dashboard.js";
|
|
18
18
|
import { loadMostRecentSession } from "../../session/store.js";
|
|
19
|
+
import { escapeRegExp } from "../../utils/escape-regexp.js";
|
|
19
20
|
|
|
20
21
|
const AGENT_ROLES = new Set(["coder", "reviewer", "tester", "security", "solomon"]);
|
|
21
22
|
|
|
@@ -72,9 +73,9 @@ export async function handleAgents(a) {
|
|
|
72
73
|
function parseHumanResponseOverrides(humanResponse, overrides) {
|
|
73
74
|
for (const role of AGENT_ROLES) {
|
|
74
75
|
const patterns = [
|
|
75
|
-
new RegExp(String.raw`use\s+(\w+)\s+(?:as|for)\s+${role}`, "i"),
|
|
76
|
-
new RegExp(String.raw`${role}\s*[:=]\s*(\w+)`, "i"),
|
|
77
|
-
new RegExp(String.raw`set\s+${role}\s+(?:to|=)\s*(\w+)`, "i")
|
|
76
|
+
new RegExp(String.raw`use\s+(\w+)\s+(?:as|for)\s+${escapeRegExp(role)}`, "i"),
|
|
77
|
+
new RegExp(String.raw`${escapeRegExp(role)}\s*[:=]\s*(\w+)`, "i"),
|
|
78
|
+
new RegExp(String.raw`set\s+${escapeRegExp(role)}\s+(?:to|=)\s*(\w+)`, "i")
|
|
78
79
|
];
|
|
79
80
|
for (const pat of patterns) {
|
|
80
81
|
const m = pat.exec(humanResponse);
|
|
@@ -34,7 +34,6 @@ import { emitProgress, makeEvent } from "../../utils/events.js";
|
|
|
34
34
|
import { runTesterStage, runSecurityStage, runFinalAuditStage } from "../post-loop-stages.js";
|
|
35
35
|
import { invokeSolomon } from "../solomon-escalation.js";
|
|
36
36
|
import { tryCiComment } from "../ci-integration.js";
|
|
37
|
-
import { writeIterationsJournal } from "../session-journal.js";
|
|
38
37
|
import { getIntegration } from "../integrations.js";
|
|
39
38
|
|
|
40
39
|
export async function handlePostLoopStages({ config, session, emitter, eventBase, coderRole, trackBudget, i, task, stageResults, ciEnabled: _ciEnabled, testerEnabled, securityEnabled, askQuestion, logger, brainCtx }) {
|
|
@@ -129,103 +128,56 @@ export async function finalizeApprovedSession({ config, gitCtx, task, logger, se
|
|
|
129
128
|
if (rtkSavings) setRtkSavings(session, rtkSavings);
|
|
130
129
|
await saveSession(session);
|
|
131
130
|
|
|
132
|
-
// --- Journal: write final files ---
|
|
131
|
+
// --- Journal: write final files (shared writer, KJC-BUG-0084) ---
|
|
133
132
|
const journalDir = session._journalDir;
|
|
134
133
|
if (journalDir) {
|
|
134
|
+
// 2026-05-07 dogfooding: gitResult.commits only carries the post-loop
|
|
135
|
+
// commit (scaffold). Compute the full range from session_start_sha so
|
|
136
|
+
// every commit the run produced shows up in execution order.
|
|
137
|
+
let allCommits;
|
|
138
|
+
try { allCommits = (await listCommitsBetween(session.head_at_start || session.session_start_sha)) || []; }
|
|
139
|
+
catch { allCommits = gitResult?.commits || []; }
|
|
140
|
+
const summaryCommits = allCommits.length > 0 ? allCommits : (gitResult?.commits || []);
|
|
141
|
+
|
|
142
|
+
// KJC-TSK-0376 — plan adherence metric (deepeval-inspired). When the
|
|
143
|
+
// run executed against a known plan (`kj run --plan <id>`), score how
|
|
144
|
+
// faithfully the coder followed it. Pure offline; safe-by-default
|
|
145
|
+
// (try/catch swallows missing helper or unreadable plan).
|
|
146
|
+
let planAdherence = null;
|
|
135
147
|
try {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// breakdown, brain/solomon counts, typed links to other journal files).
|
|
154
|
-
const { writeSummaryJournal: writeSummaryJournalV2 } =
|
|
155
|
-
await import("../../session/journal/summary-writer.js");
|
|
156
|
-
const startedAt = session._startedAt ? new Date(session._startedAt).toISOString() : undefined;
|
|
157
|
-
// 2026-05-07 dogfooding: gitResult.commits only carries the post-loop
|
|
158
|
-
// commit (scaffold), not the coder's own commit. The summary's
|
|
159
|
-
// "Commits" section was therefore misleading — it claimed the run
|
|
160
|
-
// produced one chore commit when in fact the coder had also written
|
|
161
|
-
// a docs/feat commit. Compute the full range from session_start_sha
|
|
162
|
-
// so every commit between then and HEAD shows up in execution order.
|
|
163
|
-
// try/catch (instead of `.catch(...)`) so we tolerate both promise
|
|
164
|
-
// rejection AND a sync return of undefined — the latter happens
|
|
165
|
-
// when a test mocks listCommitsBetween with a plain vi.fn() that
|
|
166
|
-
// resetAllMocks has stripped of its mockResolvedValue.
|
|
167
|
-
let allCommits = [];
|
|
168
|
-
try { allCommits = (await listCommitsBetween(session.head_at_start || session.session_start_sha)) || []; }
|
|
169
|
-
catch { allCommits = gitResult?.commits || []; }
|
|
170
|
-
const summaryCommits = allCommits.length > 0 ? allCommits : (gitResult?.commits || []);
|
|
171
|
-
|
|
172
|
-
// KJC-TSK-0376 — plan adherence metric (deepeval-inspired). When the
|
|
173
|
-
// run executed against a known plan (`kj run --plan <id>`), score how
|
|
174
|
-
// faithfully the coder followed it. Pure offline; safe-by-default
|
|
175
|
-
// (try/catch swallows missing helper or unreadable plan).
|
|
176
|
-
let planAdherence = null;
|
|
177
|
-
try {
|
|
178
|
-
const planId = session._planRef?.planId
|
|
179
|
-
|| stageResults?.huReviewer?.planId
|
|
180
|
-
|| null;
|
|
181
|
-
if (planId) {
|
|
182
|
-
const projectDir = config?.projectDir
|
|
183
|
-
|| session.config_snapshot?.projectDir
|
|
184
|
-
|| process.cwd();
|
|
185
|
-
const plan = await loadPlan(projectDir, planId).catch(() => null);
|
|
186
|
-
if (plan && Array.isArray(plan.hus) && plan.hus.length > 0) {
|
|
187
|
-
const filesChanged = await listFilesChangedSince(
|
|
188
|
-
session.head_at_start || session.session_start_sha,
|
|
189
|
-
).catch(() => []);
|
|
190
|
-
planAdherence = computePlanAdherenceScore({
|
|
191
|
-
commits: summaryCommits,
|
|
192
|
-
plan,
|
|
193
|
-
filesChanged,
|
|
194
|
-
});
|
|
195
|
-
}
|
|
148
|
+
const planId = session._planRef?.planId
|
|
149
|
+
|| stageResults?.huReviewer?.planId
|
|
150
|
+
|| null;
|
|
151
|
+
if (planId) {
|
|
152
|
+
const projectDir = config?.projectDir
|
|
153
|
+
|| session.config_snapshot?.projectDir
|
|
154
|
+
|| process.cwd();
|
|
155
|
+
const plan = await loadPlan(projectDir, planId).catch(() => null);
|
|
156
|
+
if (plan && Array.isArray(plan.hus) && plan.hus.length > 0) {
|
|
157
|
+
const filesChanged = await listFilesChangedSince(
|
|
158
|
+
session.head_at_start || session.session_start_sha,
|
|
159
|
+
).catch(() => []);
|
|
160
|
+
planAdherence = computePlanAdherenceScore({
|
|
161
|
+
commits: summaryCommits,
|
|
162
|
+
plan,
|
|
163
|
+
filesChanged,
|
|
164
|
+
});
|
|
196
165
|
}
|
|
197
|
-
} catch (err) {
|
|
198
|
-
logger?.warn?.(`Plan adherence calculation skipped: ${err.message}`);
|
|
199
166
|
}
|
|
200
|
-
|
|
201
|
-
await writeSummaryJournalV2(journalDir, {
|
|
202
|
-
task: session.task,
|
|
203
|
-
result: "APPROVED",
|
|
204
|
-
sessionId: session.id,
|
|
205
|
-
iterations: i,
|
|
206
|
-
durationMs: Date.now() - (session._startedAt || Date.now()),
|
|
207
|
-
budget: budgetSummary(),
|
|
208
|
-
stages: stageResults,
|
|
209
|
-
commits: summaryCommits,
|
|
210
|
-
files: journalFiles,
|
|
211
|
-
startedAt,
|
|
212
|
-
finishedAt: new Date().toISOString(),
|
|
213
|
-
brainDecisions: Array.isArray(session.brainDecisions) ? session.brainDecisions.length : 0,
|
|
214
|
-
solomonInvocations: Array.isArray(session.solomonRulings) ? session.solomonRulings.length : 0,
|
|
215
|
-
// KJC-TSK-0327: surface skill-source decisions in the summary so the
|
|
216
|
-
// post-mortem shows which process skills (addyosmani) and stack skills
|
|
217
|
-
// (OpenSkills) actually shaped the role prompts.
|
|
218
|
-
skills: {
|
|
219
|
-
addyosmani: session.addyosmaniSkills,
|
|
220
|
-
installed: session.autoInstalledSkills,
|
|
221
|
-
recommended: session.skillsRecommended,
|
|
222
|
-
},
|
|
223
|
-
planAdherence,
|
|
224
|
-
}, { logger });
|
|
225
|
-
logger.info(`Session journal written to ${journalDir}`);
|
|
226
167
|
} catch (err) {
|
|
227
|
-
logger
|
|
168
|
+
logger?.warn?.(`Plan adherence calculation skipped: ${err.message}`);
|
|
228
169
|
}
|
|
170
|
+
|
|
171
|
+
const { writeSessionJournal } = await import("../../session/journal/write-all.js");
|
|
172
|
+
await writeSessionJournal({
|
|
173
|
+
session, logger,
|
|
174
|
+
result: "APPROVED",
|
|
175
|
+
iterations: i,
|
|
176
|
+
budget: budgetSummary(),
|
|
177
|
+
stages: stageResults,
|
|
178
|
+
commits: summaryCommits,
|
|
179
|
+
planAdherence,
|
|
180
|
+
});
|
|
229
181
|
}
|
|
230
182
|
|
|
231
183
|
// Mirror the same enriched commit list into the session:end event so the
|
|
@@ -247,6 +247,31 @@ async function _runFlowInner({ task, config, logger, flags = {}, emitter = null,
|
|
|
247
247
|
await sealSessionStatusIfStillRunning(ctx.session, result);
|
|
248
248
|
return result;
|
|
249
249
|
} finally {
|
|
250
|
+
// --- Journal: best-effort write for non-approved endings (KJC-BUG-0084) ---
|
|
251
|
+
// finalizeApprovedSession writes the journal on the happy path and sets
|
|
252
|
+
// session._journalWritten. Every other terminal ending (sonar_repeat
|
|
253
|
+
// stall, stage_error, thrown stage, budget exceeded) used to leave only
|
|
254
|
+
// triage.md behind — losing the Cache hits table, budget breakdown and
|
|
255
|
+
// commits exactly on the runs where the post-mortem matters most.
|
|
256
|
+
// Paused sessions are skipped: they resume later and the eventual
|
|
257
|
+
// finalize overwrites the journal with the real outcome.
|
|
258
|
+
try {
|
|
259
|
+
const s = ctx.session;
|
|
260
|
+
if (s && s._journalDir && !s._journalWritten && s.status !== "paused") {
|
|
261
|
+
const { writeSessionJournal } = await import("../session/journal/write-all.js");
|
|
262
|
+
const badge = s.status && s.status !== "running" ? s.status.toUpperCase() : "FAILED";
|
|
263
|
+
await writeSessionJournal({
|
|
264
|
+
session: s, logger,
|
|
265
|
+
result: badge,
|
|
266
|
+
iterations: s._journalIterations?.length || 0,
|
|
267
|
+
budget: typeof ctx.budgetSummary === "function" ? ctx.budgetSummary() : null,
|
|
268
|
+
stages: ctx.stageResults || {},
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
} catch (err) {
|
|
272
|
+
logger.warn(`Final journal write failed (non-blocking): ${err.message}`);
|
|
273
|
+
}
|
|
274
|
+
|
|
250
275
|
// --- Cleanup auto-installed skills ---
|
|
251
276
|
const autoSkills = ctx.session?.autoInstalledSkills;
|
|
252
277
|
if (autoSkills && autoSkills.length > 0) {
|
|
@@ -156,11 +156,16 @@ export function detectTranscriptCdLeaks(transcript, projectDir) {
|
|
|
156
156
|
const projectDirAbs = projectDir ? path.resolve(projectDir) : null;
|
|
157
157
|
const homeDir = os.homedir();
|
|
158
158
|
// Capture cd target + the next ~200 chars of the same line for write-cmd lookup.
|
|
159
|
-
|
|
159
|
+
// Two-step (S5843, complexity 31): capture ANY cd target with one simple
|
|
160
|
+
// class, then filter to the absolute/home-rooted shapes the original
|
|
161
|
+
// single alternation required (~/, $HOME/, /).
|
|
162
|
+
const cdRegex = /\bcd\s+([^\s&|;`'"\n]+)([^\n]{0,200})/g;
|
|
163
|
+
const absoluteTargetRe = /^(?:~\/|\$HOME\/|\/)/;
|
|
160
164
|
const writeCmdRegex = /\b(mkdir|touch|cp|mv|git\s+init|(?:pnpm|npm|yarn)\s+(?:init|create)|npx\s+create|cat\s*>|echo\s+[^|]*>|>>?\s*\S)/i;
|
|
161
165
|
const leaks = new Set();
|
|
162
166
|
let match;
|
|
163
167
|
while ((match = cdRegex.exec(transcript)) !== null) {
|
|
168
|
+
if (!absoluteTargetRe.test(match[1])) continue;
|
|
164
169
|
const original = match[1];
|
|
165
170
|
let target = original;
|
|
166
171
|
const rest = match[2] || "";
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import { checkBinary } from "../utils/agent-detect.js";
|
|
13
13
|
import { isSonarReachable, sonarUp } from "../sonar/manager.js";
|
|
14
|
+
import { resolveSonarProjectKey, canResolveSonarProjectKey } from "../sonar/project-key.js";
|
|
14
15
|
import { runCommand } from "../utils/process.js";
|
|
15
16
|
import { emitProgress, makeEvent } from "../utils/events.js";
|
|
16
17
|
import { msg, getLang } from "../utils/messages.js";
|
|
@@ -137,6 +138,28 @@ async function checkSonarAuth(config) {
|
|
|
137
138
|
return { name: "sonar-auth", ok: false, detail: "Could not validate or generate Sonar token" };
|
|
138
139
|
}
|
|
139
140
|
|
|
141
|
+
/**
|
|
142
|
+
* KJC-BUG-0083 — run the real project-key resolver at preflight time so a
|
|
143
|
+
* repo Sonar cannot scan aborts BEFORE the first coder iteration instead
|
|
144
|
+
* of dying in sonar_repeat after burning tokens. Sonar stays mandatory
|
|
145
|
+
* for code tasks (v2.7.4 contract); this only moves the failure earlier.
|
|
146
|
+
*/
|
|
147
|
+
async function checkSonarProjectKey(config) {
|
|
148
|
+
// No remote at all (fresh local project): the SonarStage already skips
|
|
149
|
+
// cleanly via canResolveSonarProjectKey, so preflight must not block.
|
|
150
|
+
// The hard-fail case is the inconsistent one: a remote EXISTS but the
|
|
151
|
+
// resolver cannot parse it — that's what looped into sonar_repeat.
|
|
152
|
+
if (!(await canResolveSonarProjectKey(config))) {
|
|
153
|
+
return { name: "sonar-project-key", ok: true, detail: "No git remote — Sonar stage will skip cleanly" };
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
const key = await resolveSonarProjectKey(config);
|
|
157
|
+
return { name: "sonar-project-key", ok: true, detail: `Project key resolved: ${key}` };
|
|
158
|
+
} catch (err) {
|
|
159
|
+
return { name: "sonar-project-key", ok: false, detail: err.message };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
140
163
|
async function checkSecurityAgent(config) {
|
|
141
164
|
const provider = config.roles?.security?.provider
|
|
142
165
|
|| config.roles?.coder?.provider
|
|
@@ -311,6 +334,34 @@ export async function runPreflightChecks({ config, logger, emitter, eventBase, r
|
|
|
311
334
|
}
|
|
312
335
|
}
|
|
313
336
|
|
|
337
|
+
// --- 3b. Sonar project key derivable (KJC-BUG-0083) ---
|
|
338
|
+
// The scanner derives its project key from git remote.origin.url. With
|
|
339
|
+
// an unparseable remote (local-path bare, exotic URL) and no explicit
|
|
340
|
+
// sonarqube.project_key, every iteration's scan threw, the run burned
|
|
341
|
+
// coder tokens and died in sonar_repeat. Run the REAL resolver here —
|
|
342
|
+
// canResolveSonarProjectKey() is weaker (any non-empty remote passes) —
|
|
343
|
+
// so the run fails fast with the actionable message before iteration 1.
|
|
344
|
+
if (sonarEnabled && result.ok) {
|
|
345
|
+
const keyCheck = await checkSonarProjectKey(config);
|
|
346
|
+
result.checks.push(keyCheck);
|
|
347
|
+
|
|
348
|
+
emitProgress(emitter, makeEvent("preflight:check", { ...eventBase, stage: "preflight" }, {
|
|
349
|
+
status: keyCheck.ok ? "ok" : "fail",
|
|
350
|
+
message: `Sonar project key: ${keyCheck.detail}`,
|
|
351
|
+
detail: keyCheck
|
|
352
|
+
}));
|
|
353
|
+
|
|
354
|
+
if (!keyCheck.ok) {
|
|
355
|
+
result.ok = false;
|
|
356
|
+
result.errors.push({
|
|
357
|
+
check: "sonar-project-key",
|
|
358
|
+
message: "Sonar cannot scan this repository: no project key can be derived.",
|
|
359
|
+
fix: withDocLink("Set sonarqube.project_key in kj.config.yml, or point remote.origin.url at a valid SSH/HTTPS remote.", "sonar_docker")
|
|
360
|
+
});
|
|
361
|
+
logger.error("Preflight: Sonar project key not derivable — failing fast before burning iterations");
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
314
365
|
// --- 4. Security agent (graceful — only warning, not blocking) ---
|
|
315
366
|
if (securityEnabled) {
|
|
316
367
|
const secCheck = await checkSecurityAgent(config);
|
|
@@ -70,7 +70,18 @@ export function evaluateRules(context, rulesConfig = {}) {
|
|
|
70
70
|
const styleKeywords = /\b(naming|name|rename|style|format|formatting|indent|spacing|camelCase|snake_case|convention|cosmetic|readability|comment|jsdoc|documentation|whitespace|semicolon|quotes|trailing)\b/i;
|
|
71
71
|
// Anti-style: if any of these match, the issue is NOT style — it's a real correctness/security concern.
|
|
72
72
|
// Fixes KJC-BUG-0026 (Solomon approving legitimate security blockers misclassified as "style").
|
|
73
|
-
|
|
73
|
+
// Decomposed by concern (S5843, complexity 71 → 7 named groups).
|
|
74
|
+
// The union of tokens is byte-identical to the original alternation.
|
|
75
|
+
const SECURITY_KEYWORD_GROUPS = [
|
|
76
|
+
/\b(sql\s*injection|xss|csrf|ssrf|rce|injection|vulnerab|exploit)\b/i,
|
|
77
|
+
/\b(sanitiz|escape\b|encod\b|cors|traversal|prototype[-_\s]*pollution|deserializ)\b/i,
|
|
78
|
+
/\b(auth|authn|authz|password|secret|credential|token|api[-_\s]*key|private[-_\s]*key)\b/i,
|
|
79
|
+
/\b(hash|cipher|crypto|encrypt|decrypt|tls|ssl|certificate)\b/i,
|
|
80
|
+
/\b(leak|sensitive|pii|privacy|insecure|unsafe)\b/i,
|
|
81
|
+
/\b(race[-_\s]*condition|deadlock|memory[-_\s]*leak|null[-_\s]*deref|uaf|overflow)\b/i,
|
|
82
|
+
/\b(eval\b|exec\b|spawn|shell|command[-_\s]*injection)\b/i,
|
|
83
|
+
];
|
|
84
|
+
const securityKeywords = { test: (text) => SECURITY_KEYWORD_GROUPS.some((re) => re.test(text)) };
|
|
74
85
|
const securityCategories = new Set(["security", "correctness", "bug", "vulnerability"]);
|
|
75
86
|
const styleSeverities = new Set(["low", "minor"]);
|
|
76
87
|
const blockingSeverities = new Set(["critical", "high", "blocker", "major"]);
|
package/src/prompts/audit.js
CHANGED
|
@@ -49,13 +49,10 @@ export function buildAuditPrompt({ task, instructions, dimensions = null, contex
|
|
|
49
49
|
const stackLines = ["## Project Stack"];
|
|
50
50
|
if (stack.language) stackLines.push(`- Language: ${stack.language}`);
|
|
51
51
|
if (stack.frameworks?.length) stackLines.push(`- Frameworks: ${stack.frameworks.join(", ")}`);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
: stack.isBackend
|
|
57
|
-
? "backend-only"
|
|
58
|
-
: "unknown";
|
|
52
|
+
let tier = "unknown";
|
|
53
|
+
if (stack.isFullstack) tier = "fullstack (frontend + backend)";
|
|
54
|
+
else if (stack.isFrontend) tier = "frontend-only";
|
|
55
|
+
else if (stack.isBackend) tier = "backend-only";
|
|
59
56
|
stackLines.push(`- Tier: ${tier}`);
|
|
60
57
|
if (stack.isFullstack) {
|
|
61
58
|
stackLines.push("Apply BOTH backend heuristics (queries, sync I/O, caching) AND frontend heuristics (bundle size, lazy loading, render-blocking) where each layer applies.");
|
|
@@ -241,7 +238,8 @@ export function buildAuditPrompt({ task, instructions, dimensions = null, contex
|
|
|
241
238
|
lines.push(`### ${severity} (${issues.length})`);
|
|
242
239
|
const slice = issues.slice(0, Math.max(0, remaining));
|
|
243
240
|
for (const issue of slice) {
|
|
244
|
-
const
|
|
241
|
+
const lineSuffix = issue.line ? `:${issue.line}` : "";
|
|
242
|
+
const loc = issue.component ? `${issue.component}${lineSuffix}` : "";
|
|
245
243
|
const rule = issue.rule ? ` [${issue.rule}]` : "";
|
|
246
244
|
lines.push(` - ${loc}${rule} ${issue.message || ""}`.trim());
|
|
247
245
|
}
|
|
@@ -332,8 +330,10 @@ export function buildAuditPrompt({ task, instructions, dimensions = null, contex
|
|
|
332
330
|
lines.push(`### ${severity} (${findings.length})`);
|
|
333
331
|
const slice = findings.slice(0, Math.max(0, remaining));
|
|
334
332
|
for (const f of slice) {
|
|
335
|
-
const
|
|
336
|
-
const
|
|
333
|
+
const lineSuffix = f.line ? `:${f.line}` : "";
|
|
334
|
+
const loc = f.file ? `${f.file}${lineSuffix}` : "";
|
|
335
|
+
const cweText = Array.isArray(f.cwe) ? f.cwe.join(", ") : f.cwe;
|
|
336
|
+
const cwe = f.cwe ? ` (${cweText})` : "";
|
|
337
337
|
lines.push(` - ${loc} [${f.rule}]${cwe}: ${f.message || ""}`.trim());
|
|
338
338
|
}
|
|
339
339
|
if (findings.length > slice.length) {
|
|
@@ -355,7 +355,8 @@ export function buildAuditPrompt({ task, instructions, dimensions = null, contex
|
|
|
355
355
|
lines.push(`- Unused files: ${(deadExports.files || []).length}`);
|
|
356
356
|
const allItems = [...(deadExports.exports || []), ...(deadExports.files || [])].slice(0, 40);
|
|
357
357
|
for (const item of allItems) {
|
|
358
|
-
const
|
|
358
|
+
const lineSuffix = item.line ? `:${item.line}` : "";
|
|
359
|
+
const loc = `${item.path}${lineSuffix}`;
|
|
359
360
|
const name = item.name ? ` \`${item.name}\`` : "";
|
|
360
361
|
lines.push(` - [${item.severity}] ${loc} [${item.rule}]${name}`);
|
|
361
362
|
}
|
|
@@ -29,7 +29,7 @@ const DIMENSION_KEYS = [
|
|
|
29
29
|
* identical across batches on the same project; the stories under
|
|
30
30
|
* evaluation and the per-batch additional context go last.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
function buildHuReviewerPromptLayout({ stories, instructions, context = null, productContext = null, domainContext = null, hu_language = "en" }) {
|
|
33
33
|
const langInstruction = getLanguageInstruction(hu_language);
|
|
34
34
|
|
|
35
35
|
return buildPromptLayout([
|
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,
|
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
|
}
|