@lannguyensi/harness 0.63.0 → 1.0.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/CHANGELOG.md +90 -0
- package/README.md +46 -42
- package/dist/cli/add/index.js +17 -21
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +2 -2
- package/dist/cli/adopt/derive.js +2 -19
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +1 -1
- package/dist/cli/adopt/index.js +1 -12
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +20 -35
- package/dist/cli/apply/apply.js +61 -136
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-codex-config.js +10 -58
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/apply/generate-memory-index.js +1 -2
- package/dist/cli/apply/generate-memory-index.js.map +1 -1
- package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
- package/dist/cli/apply/generate-opencode-config.js +74 -113
- package/dist/cli/apply/generate-opencode-config.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +11 -64
- package/dist/cli/apply/generate-settings.js +27 -132
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -1
- package/dist/cli/apply/index.js +1 -1
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +153 -1
- package/dist/cli/apply/install-codex-config.js +445 -70
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +13 -1
- package/dist/cli/apply/next-steps.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +0 -23
- package/dist/cli/bounded-stdin.js +2 -49
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/describe.d.ts +1 -1
- package/dist/cli/describe.js +0 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/diff/engine.d.ts +0 -11
- package/dist/cli/diff/engine.js +1 -17
- package/dist/cli/diff/engine.js.map +1 -1
- package/dist/cli/diff/index.js +14 -25
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/claude-mcp.d.ts +4 -19
- package/dist/cli/doctor/claude-mcp.js +11 -22
- package/dist/cli/doctor/claude-mcp.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +12 -14
- package/dist/cli/doctor/codex.js +31 -144
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +23 -338
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/hook-liveness.d.ts +56 -0
- package/dist/cli/doctor/hook-liveness.js +455 -0
- package/dist/cli/doctor/hook-liveness.js.map +1 -0
- package/dist/cli/doctor/index.d.ts +13 -87
- package/dist/cli/doctor/index.js +57 -705
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/opencode.d.ts +2 -1
- package/dist/cli/doctor/opencode.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +21 -378
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/drain-stdio.d.ts +31 -0
- package/dist/cli/drain-stdio.js +76 -0
- package/dist/cli/drain-stdio.js.map +1 -0
- package/dist/cli/export.d.ts +3 -1
- package/dist/cli/export.js +7 -16
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/gate/codex-disable.d.ts +29 -0
- package/dist/cli/gate/codex-disable.js +195 -0
- package/dist/cli/gate/codex-disable.js.map +1 -0
- package/dist/cli/gate/codex-enable.d.ts +41 -0
- package/dist/cli/gate/codex-enable.js +127 -0
- package/dist/cli/gate/codex-enable.js.map +1 -0
- package/dist/cli/gate/codex-snapshot.d.ts +208 -0
- package/dist/cli/gate/codex-snapshot.js +402 -0
- package/dist/cli/gate/codex-snapshot.js.map +1 -0
- package/dist/cli/gate/disable.d.ts +9 -0
- package/dist/cli/gate/disable.js +263 -28
- package/dist/cli/gate/disable.js.map +1 -1
- package/dist/cli/gate/enable.d.ts +26 -6
- package/dist/cli/gate/enable.js +152 -80
- package/dist/cli/gate/enable.js.map +1 -1
- package/dist/cli/gate/link-chain.d.ts +53 -0
- package/dist/cli/gate/link-chain.js +122 -0
- package/dist/cli/gate/link-chain.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +289 -12
- package/dist/cli/gate/snapshot.js +481 -22
- package/dist/cli/gate/snapshot.js.map +1 -1
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +15 -2607
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/composer.d.ts +3 -6
- package/dist/cli/init/composer.js +6 -370
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/init/dependencies.d.ts +1 -2
- package/dist/cli/init/dependencies.js +4 -80
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/detect.js +5 -4
- package/dist/cli/init/detect.js.map +1 -1
- package/dist/cli/init/interactive.d.ts +1 -23
- package/dist/cli/init/interactive.js +33 -247
- package/dist/cli/init/interactive.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +2 -2
- package/dist/cli/init/profiles.js +51 -243
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +2 -37
- package/dist/cli/init/templates.js +25 -1237
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/list.d.ts +1 -1
- package/dist/cli/list.js +1 -38
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/loader.d.ts +15 -1
- package/dist/cli/loader.js +56 -39
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/main.js +7 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-home/index.js +2 -2
- package/dist/cli/migrate-home/index.js.map +1 -1
- package/dist/cli/pack/add.js +1 -1
- package/dist/cli/pack/add.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
- package/dist/cli/pack/hook-bootstrap.js +15 -291
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
- package/dist/cli/pack/hook-branch-protection.js +365 -340
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/index.d.ts +0 -1
- package/dist/cli/pack/index.js +0 -1
- package/dist/cli/pack/index.js.map +1 -1
- package/dist/cli/pack/list.js +1 -6
- package/dist/cli/pack/list.js.map +1 -1
- package/dist/cli/pack/mutate.d.ts +7 -9
- package/dist/cli/pack/mutate.js +6 -9
- package/dist/cli/pack/mutate.js.map +1 -1
- package/dist/cli/pack/reseed.d.ts +2 -2
- package/dist/cli/pack/reseed.js +16 -22
- package/dist/cli/pack/reseed.js.map +1 -1
- package/dist/cli/register-gate-group.d.ts +5 -0
- package/dist/cli/register-gate-group.js +348 -0
- package/dist/cli/register-gate-group.js.map +1 -0
- package/dist/cli/register-inspect-group.d.ts +6 -0
- package/dist/cli/register-inspect-group.js +189 -0
- package/dist/cli/register-inspect-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +5 -0
- package/dist/cli/register-operator-lifecycle.js +20 -0
- package/dist/cli/register-operator-lifecycle.js.map +1 -0
- package/dist/cli/register-pack-group.d.ts +5 -0
- package/dist/cli/register-pack-group.js +134 -0
- package/dist/cli/register-pack-group.js.map +1 -0
- package/dist/cli/register-setup-group.d.ts +5 -0
- package/dist/cli/register-setup-group.js +495 -0
- package/dist/cli/register-setup-group.js.map +1 -0
- package/dist/cli/remove/index.d.ts +0 -14
- package/dist/cli/remove/index.js +2 -115
- package/dist/cli/remove/index.js.map +1 -1
- package/dist/cli/remove/mutate.d.ts +0 -2
- package/dist/cli/remove/mutate.js +1 -19
- package/dist/cli/remove/mutate.js.map +1 -1
- package/dist/cli/remove/register.d.ts +5 -0
- package/dist/cli/remove/register.js +25 -0
- package/dist/cli/remove/register.js.map +1 -0
- package/dist/cli/shell-quote.d.ts +7 -0
- package/dist/cli/shell-quote.js +17 -0
- package/dist/cli/shell-quote.js.map +1 -0
- package/dist/cli/uninstall/index.d.ts +4 -2
- package/dist/cli/uninstall/index.js +15 -7
- package/dist/cli/uninstall/index.js.map +1 -1
- package/dist/cli/uninstall/register.d.ts +5 -0
- package/dist/cli/uninstall/register.js +171 -0
- package/dist/cli/uninstall/register.js.map +1 -0
- package/dist/cli/uninstall/snapshot.d.ts +15 -0
- package/dist/cli/uninstall/snapshot.js +38 -0
- package/dist/cli/uninstall/snapshot.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +0 -77
- package/dist/cli/validate/checks.js +3 -1049
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/cli/validate/index.js +19 -15
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/io/claude-mcp.d.ts +1 -1
- package/dist/io/claude-mcp.js +27 -14
- package/dist/io/claude-mcp.js.map +1 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/lock.d.ts +0 -26
- package/dist/io/lock.js +10 -27
- package/dist/io/lock.js.map +1 -1
- package/dist/io/merge-settings.js +6 -4
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/project-name.d.ts +22 -39
- package/dist/io/project-name.js +25 -42
- package/dist/io/project-name.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +103 -40
- package/dist/io/read-regular-file.js +196 -35
- package/dist/io/read-regular-file.js.map +1 -1
- package/dist/io/restart-hints.js +3 -6
- package/dist/io/restart-hints.js.map +1 -1
- package/dist/io/version-compare.d.ts +1 -3
- package/dist/io/version-compare.js +1 -3
- package/dist/io/version-compare.js.map +1 -1
- package/dist/io/write-regular-file.d.ts +30 -0
- package/dist/io/write-regular-file.js +85 -0
- package/dist/io/write-regular-file.js.map +1 -0
- package/dist/overrides/index.d.ts +1 -0
- package/dist/overrides/index.js +1 -0
- package/dist/overrides/index.js.map +1 -1
- package/dist/overrides/merge-layers.d.ts +43 -0
- package/dist/overrides/merge-layers.js +76 -0
- package/dist/overrides/merge-layers.js.map +1 -0
- package/dist/overrides/merge.d.ts +16 -0
- package/dist/overrides/merge.js +21 -8
- package/dist/overrides/merge.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
- package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
- package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
- package/dist/policy-packs/builtin/branch-protection.js +56 -89
- package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
- package/dist/policy-packs/config-check.d.ts +7 -5
- package/dist/policy-packs/config-check.js +2 -2
- package/dist/policy-packs/config-check.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +1 -3
- package/dist/policy-packs/expand.js +5 -42
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +3 -3
- package/dist/policy-packs/index.js +2 -2
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +9 -38
- package/dist/policy-packs/registry.js +5 -65
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/policy-packs/runtime.d.ts +0 -4
- package/dist/policy-packs/runtime.js +9 -22
- package/dist/policy-packs/runtime.js.map +1 -1
- package/dist/policy-packs/types.d.ts +0 -19
- package/dist/policy-packs/ux-compare.d.ts +1 -11
- package/dist/policy-packs/ux-compare.js +6 -42
- package/dist/policy-packs/ux-compare.js.map +1 -1
- package/dist/policy-packs/ux-drift-check.d.ts +5 -5
- package/dist/policy-packs/ux-drift-check.js +17 -22
- package/dist/policy-packs/ux-drift-check.js.map +1 -1
- package/dist/policy-packs/version-check.d.ts +5 -26
- package/dist/policy-packs/version-check.js +19 -74
- package/dist/policy-packs/version-check.js.map +1 -1
- package/dist/probes/memory.d.ts +1 -1
- package/dist/probes/memory.js +1 -1
- package/dist/probes/memory.js.map +1 -1
- package/dist/runtime/agent-facing.d.ts +9 -0
- package/dist/runtime/agent-facing.js +28 -14
- package/dist/runtime/agent-facing.js.map +1 -1
- package/dist/runtime/bounded-text.d.ts +15 -0
- package/dist/runtime/bounded-text.js +27 -0
- package/dist/runtime/bounded-text.js.map +1 -0
- package/dist/runtime/git-branch.d.ts +125 -0
- package/dist/runtime/git-branch.js +381 -0
- package/dist/runtime/git-branch.js.map +1 -0
- package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
- package/dist/runtime/hermetic-spawn-guard.js +24 -34
- package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
- package/dist/runtime/home-dir.js +3 -2
- package/dist/runtime/home-dir.js.map +1 -1
- package/dist/runtime/tool-name-aliases.d.ts +0 -6
- package/dist/runtime/tool-name-aliases.js +5 -18
- package/dist/runtime/tool-name-aliases.js.map +1 -1
- package/dist/schema/grounding.d.ts +7 -54
- package/dist/schema/grounding.js +10 -12
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/hooks.d.ts +39 -136
- package/dist/schema/hooks.js +3 -6
- package/dist/schema/hooks.js.map +1 -1
- package/dist/schema/index.d.ts +114 -3828
- package/dist/schema/index.js +41 -80
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.d.ts +54 -131
- package/dist/schema/memory.js +2 -2
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/policy-packs.d.ts +3 -45
- package/dist/schema/policy-packs.js +7 -13
- package/dist/schema/policy-packs.js.map +1 -1
- package/dist/schema/policy-ux.d.ts +7 -0
- package/dist/schema/policy-ux.js +18 -0
- package/dist/schema/policy-ux.js.map +1 -0
- package/dist/schema/removed-keys.d.ts +185 -0
- package/dist/schema/removed-keys.js +531 -0
- package/dist/schema/removed-keys.js.map +1 -0
- package/dist/schema/tools.d.ts +30 -268
- package/dist/schema/tools.js +4 -4
- package/dist/schema/tools.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/approve/branch-protection.d.ts +0 -69
- package/dist/cli/approve/branch-protection.js +0 -144
- package/dist/cli/approve/branch-protection.js.map +0 -1
- package/dist/cli/approve/risk.d.ts +0 -112
- package/dist/cli/approve/risk.js +0 -197
- package/dist/cli/approve/risk.js.map +0 -1
- package/dist/cli/approve/stdin-report.d.ts +0 -57
- package/dist/cli/approve/stdin-report.js +0 -145
- package/dist/cli/approve/stdin-report.js.map +0 -1
- package/dist/cli/approve/understanding.d.ts +0 -410
- package/dist/cli/approve/understanding.js +0 -996
- package/dist/cli/approve/understanding.js.map +0 -1
- package/dist/cli/audit.d.ts +0 -80
- package/dist/cli/audit.js +0 -252
- package/dist/cli/audit.js.map +0 -1
- package/dist/cli/delegate/index.d.ts +0 -76
- package/dist/cli/delegate/index.js +0 -443
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
- package/dist/cli/doctor/auto-approve-mode.js +0 -80
- package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
- package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
- package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
- package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
- package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
- package/dist/cli/doctor/codex-config-drift.js +0 -240
- package/dist/cli/doctor/codex-config-drift.js.map +0 -1
- package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
- package/dist/cli/doctor/rogue-ledger.js +0 -153
- package/dist/cli/doctor/rogue-ledger.js.map +0 -1
- package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
- package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
- package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
- package/dist/cli/doctor/settings-drift.d.ts +0 -25
- package/dist/cli/doctor/settings-drift.js +0 -213
- package/dist/cli/doctor/settings-drift.js.map +0 -1
- package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
- package/dist/cli/doctor/toolchain-parity.js +0 -154
- package/dist/cli/doctor/toolchain-parity.js.map +0 -1
- package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
- package/dist/cli/doctor/ug-auto-approvals.js +0 -91
- package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
- package/dist/cli/doctor/ug-delegations.d.ts +0 -26
- package/dist/cli/doctor/ug-delegations.js +0 -121
- package/dist/cli/doctor/ug-delegations.js.map +0 -1
- package/dist/cli/doctor/ug-inflight.d.ts +0 -35
- package/dist/cli/doctor/ug-inflight.js +0 -57
- package/dist/cli/doctor/ug-inflight.js.map +0 -1
- package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
- package/dist/cli/doctor/understanding-mode-env.js +0 -98
- package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
- package/dist/cli/dry-run.d.ts +0 -46
- package/dist/cli/dry-run.js +0 -250
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/event-input.d.ts +0 -28
- package/dist/cli/event-input.js +0 -73
- package/dist/cli/event-input.js.map +0 -1
- package/dist/cli/explain-action.d.ts +0 -20
- package/dist/cli/explain-action.js +0 -27
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -135
- package/dist/cli/explain-policy.js +0 -266
- package/dist/cli/explain-policy.js.map +0 -1
- package/dist/cli/explain.d.ts +0 -31
- package/dist/cli/explain.js +0 -159
- package/dist/cli/explain.js.map +0 -1
- package/dist/cli/gc/index.d.ts +0 -63
- package/dist/cli/gc/index.js +0 -566
- package/dist/cli/gc/index.js.map +0 -1
- package/dist/cli/pack/approve-escape.d.ts +0 -19
- package/dist/cli/pack/approve-escape.js +0 -190
- package/dist/cli/pack/approve-escape.js.map +0 -1
- package/dist/cli/pack/auto-approve-path.d.ts +0 -146
- package/dist/cli/pack/auto-approve-path.js +0 -462
- package/dist/cli/pack/auto-approve-path.js.map +0 -1
- package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
- package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
- package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
- package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
- package/dist/cli/pack/hook-codex-stop.js +0 -329
- package/dist/cli/pack/hook-codex-stop.js.map +0 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
- package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
- package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
- package/dist/cli/pack/hook-post-merge-gate.js +0 -277
- package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
- package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
- package/dist/cli/pack/hook-post-tool-use.js +0 -137
- package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
- package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
- package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
- package/dist/cli/pack/hook-runtime-reality.js +0 -210
- package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -337
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
- package/dist/cli/pack/hook-solution-acceptance.js +0 -530
- package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
- package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
- package/dist/cli/pack/hook-stay-in-scope.js +0 -128
- package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
- package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
- package/dist/cli/pack/hook-subagent-start.js +0 -88
- package/dist/cli/pack/hook-subagent-start.js.map +0 -1
- package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
- package/dist/cli/pack/hook-subagent-stop.js +0 -41
- package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
- package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
- package/dist/cli/pack/hook-track-active-claim.js +0 -275
- package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
- package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
- package/dist/cli/pack/transcript-report-scan.js +0 -359
- package/dist/cli/pack/transcript-report-scan.js.map +0 -1
- package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
- package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
- package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
- package/dist/cli/pack/upgrade.d.ts +0 -32
- package/dist/cli/pack/upgrade.js +0 -273
- package/dist/cli/pack/upgrade.js.map +0 -1
- package/dist/cli/pause/index.d.ts +0 -113
- package/dist/cli/pause/index.js +0 -251
- package/dist/cli/pause/index.js.map +0 -1
- package/dist/cli/pause-check.d.ts +0 -22
- package/dist/cli/pause-check.js +0 -54
- package/dist/cli/pause-check.js.map +0 -1
- package/dist/cli/policy/intercept.d.ts +0 -233
- package/dist/cli/policy/intercept.js +0 -1020
- package/dist/cli/policy/intercept.js.map +0 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
- package/dist/cli/policy/risk-envelope-enrichment.js +0 -108
- package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
- package/dist/cli/record/index.d.ts +0 -81
- package/dist/cli/record/index.js +0 -348
- package/dist/cli/record/index.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -47
- package/dist/cli/resolve-env.js.map +0 -1
- package/dist/cli/session-export/index.d.ts +0 -46
- package/dist/cli/session-export/index.js +0 -169
- package/dist/cli/session-export/index.js.map +0 -1
- package/dist/cli/session-export/redact.d.ts +0 -22
- package/dist/cli/session-export/redact.js +0 -47
- package/dist/cli/session-export/redact.js.map +0 -1
- package/dist/cli/session-export/transcript.d.ts +0 -24
- package/dist/cli/session-export/transcript.js +0 -164
- package/dist/cli/session-export/transcript.js.map +0 -1
- package/dist/cli/session-start/branch-check.d.ts +0 -18
- package/dist/cli/session-start/branch-check.js +0 -140
- package/dist/cli/session-start/branch-check.js.map +0 -1
- package/dist/cli/session-start/index.d.ts +0 -121
- package/dist/cli/session-start/index.js +0 -591
- package/dist/cli/session-start/index.js.map +0 -1
- package/dist/cli/session-start/shared-options.d.ts +0 -103
- package/dist/cli/session-start/shared-options.js +0 -107
- package/dist/cli/session-start/shared-options.js.map +0 -1
- package/dist/cli/session-start/stale-base-check.d.ts +0 -46
- package/dist/cli/session-start/stale-base-check.js +0 -352
- package/dist/cli/session-start/stale-base-check.js.map +0 -1
- package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
- package/dist/cli/session-start/toolchain-parity.js +0 -797
- package/dist/cli/session-start/toolchain-parity.js.map +0 -1
- package/dist/cli/smoke/assertions.d.ts +0 -46
- package/dist/cli/smoke/assertions.js +0 -170
- package/dist/cli/smoke/assertions.js.map +0 -1
- package/dist/cli/smoke/index.d.ts +0 -76
- package/dist/cli/smoke/index.js +0 -245
- package/dist/cli/smoke/index.js.map +0 -1
- package/dist/cli/smoke/runner.d.ts +0 -55
- package/dist/cli/smoke/runner.js +0 -134
- package/dist/cli/smoke/runner.js.map +0 -1
- package/dist/cli/smoke/stream-parser.d.ts +0 -65
- package/dist/cli/smoke/stream-parser.js +0 -115
- package/dist/cli/smoke/stream-parser.js.map +0 -1
- package/dist/cli/test-risk.d.ts +0 -26
- package/dist/cli/test-risk.js +0 -34
- package/dist/cli/test-risk.js.map +0 -1
- package/dist/io/display-path.d.ts +0 -11
- package/dist/io/display-path.js +0 -29
- package/dist/io/display-path.js.map +0 -1
- package/dist/io/duration.d.ts +0 -5
- package/dist/io/duration.js +0 -50
- package/dist/io/duration.js.map +0 -1
- package/dist/io/extract.d.ts +0 -79
- package/dist/io/extract.js +0 -226
- package/dist/io/extract.js.map +0 -1
- package/dist/io/ledger-record.d.ts +0 -83
- package/dist/io/ledger-record.js +0 -301
- package/dist/io/ledger-record.js.map +0 -1
- package/dist/io/read-json-dir-entries.d.ts +0 -36
- package/dist/io/read-json-dir-entries.js +0 -48
- package/dist/io/read-json-dir-entries.js.map +0 -1
- package/dist/io/safe-json-parse.d.ts +0 -5
- package/dist/io/safe-json-parse.js +0 -21
- package/dist/io/safe-json-parse.js.map +0 -1
- package/dist/policies/index.d.ts +0 -5
- package/dist/policies/index.js +0 -6
- package/dist/policies/index.js.map +0 -1
- package/dist/policies/ledger-client.d.ts +0 -113
- package/dist/policies/ledger-client.js +0 -500
- package/dist/policies/ledger-client.js.map +0 -1
- package/dist/policies/producers.d.ts +0 -12
- package/dist/policies/producers.js +0 -61
- package/dist/policies/producers.js.map +0 -1
- package/dist/policies/requires.d.ts +0 -75
- package/dist/policies/requires.js +0 -240
- package/dist/policies/requires.js.map +0 -1
- package/dist/policies/timestamp.d.ts +0 -14
- package/dist/policies/timestamp.js +0 -36
- package/dist/policies/timestamp.js.map +0 -1
- package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
- package/dist/policy-packs/builtin/permission-profiles.js +0 -74
- package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
- package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
- package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
- package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
- package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -618
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -93
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -620
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
- package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1074
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
- package/dist/policy-packs/permission-translator.d.ts +0 -9
- package/dist/policy-packs/permission-translator.js +0 -76
- package/dist/policy-packs/permission-translator.js.map +0 -1
- package/dist/runtime/action-envelope.d.ts +0 -64
- package/dist/runtime/action-envelope.js +0 -46
- package/dist/runtime/action-envelope.js.map +0 -1
- package/dist/runtime/approval-signing.d.ts +0 -111
- package/dist/runtime/approval-signing.js +0 -384
- package/dist/runtime/approval-signing.js.map +0 -1
- package/dist/runtime/bash-match-facts.d.ts +0 -60
- package/dist/runtime/bash-match-facts.js +0 -196
- package/dist/runtime/bash-match-facts.js.map +0 -1
- package/dist/runtime/bash-match-registry.d.ts +0 -112
- package/dist/runtime/bash-match-registry.js +0 -406
- package/dist/runtime/bash-match-registry.js.map +0 -1
- package/dist/runtime/bash-prefix-parse.d.ts +0 -31
- package/dist/runtime/bash-prefix-parse.js +0 -576
- package/dist/runtime/bash-prefix-parse.js.map +0 -1
- package/dist/runtime/command-normalize.d.ts +0 -658
- package/dist/runtime/command-normalize.js +0 -2410
- package/dist/runtime/command-normalize.js.map +0 -1
- package/dist/runtime/deletion-target-resolve.d.ts +0 -28
- package/dist/runtime/deletion-target-resolve.js +0 -1078
- package/dist/runtime/deletion-target-resolve.js.map +0 -1
- package/dist/runtime/destructive-shell-floor.d.ts +0 -19
- package/dist/runtime/destructive-shell-floor.js +0 -611
- package/dist/runtime/destructive-shell-floor.js.map +0 -1
- package/dist/runtime/environment-resolver.d.ts +0 -36
- package/dist/runtime/environment-resolver.js +0 -138
- package/dist/runtime/environment-resolver.js.map +0 -1
- package/dist/runtime/git-context.d.ts +0 -201
- package/dist/runtime/git-context.js +0 -422
- package/dist/runtime/git-context.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.js +0 -13
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/intercept.d.ts +0 -494
- package/dist/runtime/intercept.js +0 -1313
- package/dist/runtime/intercept.js.map +0 -1
- package/dist/runtime/kube-context.d.ts +0 -16
- package/dist/runtime/kube-context.js +0 -63
- package/dist/runtime/kube-context.js.map +0 -1
- package/dist/runtime/kubectl-target-parse.d.ts +0 -31
- package/dist/runtime/kubectl-target-parse.js +0 -249
- package/dist/runtime/kubectl-target-parse.js.map +0 -1
- package/dist/runtime/ledger-add.d.ts +0 -16
- package/dist/runtime/ledger-add.js +0 -150
- package/dist/runtime/ledger-add.js.map +0 -1
- package/dist/runtime/ledger-writer.d.ts +0 -27
- package/dist/runtime/ledger-writer.js +0 -46
- package/dist/runtime/ledger-writer.js.map +0 -1
- package/dist/runtime/pause-sentinel.d.ts +0 -60
- package/dist/runtime/pause-sentinel.js +0 -156
- package/dist/runtime/pause-sentinel.js.map +0 -1
- package/dist/runtime/pending-approval.d.ts +0 -23
- package/dist/runtime/pending-approval.js +0 -67
- package/dist/runtime/pending-approval.js.map +0 -1
- package/dist/runtime/read-only-bash.d.ts +0 -141
- package/dist/runtime/read-only-bash.js +0 -2204
- package/dist/runtime/read-only-bash.js.map +0 -1
- package/dist/runtime/recovery-git-commit.d.ts +0 -22
- package/dist/runtime/recovery-git-commit.js +0 -284
- package/dist/runtime/recovery-git-commit.js.map +0 -1
- package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
- package/dist/runtime/reject-malformed-session-id.js +0 -16
- package/dist/runtime/reject-malformed-session-id.js.map +0 -1
- package/dist/runtime/risk-classifier.d.ts +0 -38
- package/dist/runtime/risk-classifier.js +0 -311
- package/dist/runtime/risk-classifier.js.map +0 -1
- package/dist/runtime/session-id.d.ts +0 -113
- package/dist/runtime/session-id.js +0 -193
- package/dist/runtime/session-id.js.map +0 -1
- package/dist/runtime/shell-word.d.ts +0 -62
- package/dist/runtime/shell-word.js +0 -410
- package/dist/runtime/shell-word.js.map +0 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +0 -103
- package/dist/runtime/task-providers/agent-tasks.js +0 -245
- package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
- package/dist/runtime/when-eval.d.ts +0 -62
- package/dist/runtime/when-eval.js +0 -212
- package/dist/runtime/when-eval.js.map +0 -1
- package/dist/runtime/workflow-policies.d.ts +0 -207
- package/dist/runtime/workflow-policies.js +0 -596
- package/dist/runtime/workflow-policies.js.map +0 -1
- package/dist/schema/audit.d.ts +0 -71
- package/dist/schema/audit.js +0 -32
- package/dist/schema/audit.js.map +0 -1
- package/dist/schema/doctor.d.ts +0 -25
- package/dist/schema/doctor.js +0 -23
- package/dist/schema/doctor.js.map +0 -1
- package/dist/schema/environments.d.ts +0 -215
- package/dist/schema/environments.js +0 -101
- package/dist/schema/environments.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -9
- package/dist/schema/extract.js +0 -86
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/permission-profiles.d.ts +0 -2292
- package/dist/schema/permission-profiles.js +0 -60
- package/dist/schema/permission-profiles.js.map +0 -1
- package/dist/schema/policies.d.ts +0 -974
- package/dist/schema/policies.js +0 -298
- package/dist/schema/policies.js.map +0 -1
- package/dist/schema/requires.d.ts +0 -131
- package/dist/schema/requires.js +0 -88
- package/dist/schema/requires.js.map +0 -1
- package/dist/schema/risk.d.ts +0 -144
- package/dist/schema/risk.js +0 -194
- package/dist/schema/risk.js.map +0 -1
- package/dist/schema/session-start-preflight.d.ts +0 -10
- package/dist/schema/session-start-preflight.js +0 -106
- package/dist/schema/session-start-preflight.js.map +0 -1
- package/dist/schema/stale-base-check.d.ts +0 -18
- package/dist/schema/stale-base-check.js +0 -37
- package/dist/schema/stale-base-check.js.map +0 -1
- package/dist/schema/toolchain-parity.d.ts +0 -21
- package/dist/schema/toolchain-parity.js +0 -48
- package/dist/schema/toolchain-parity.js.map +0 -1
- package/dist/schema/workflows.d.ts +0 -519
- package/dist/schema/workflows.js +0 -81
- package/dist/schema/workflows.js.map +0 -1
- package/scripts/runtime-reality-docker-probe.mjs +0 -71
|
@@ -1,530 +0,0 @@
|
|
|
1
|
-
// `harness pack hook solution-acceptance` — PreToolUse completion-gate for
|
|
2
|
-
// the `solution-acceptance` policy pack.
|
|
3
|
-
//
|
|
4
|
-
// Receives Claude Code's PreToolUse event JSON on stdin and emits a
|
|
5
|
-
// `{ decision: "block" }` envelope when the agent is about to FINISH a task
|
|
6
|
-
// (agent-tasks completion verb, or a `git push` / `gh pr merge` bash
|
|
7
|
-
// command) without a READY solution-acceptance verdict at the current git
|
|
8
|
-
// HEAD.
|
|
9
|
-
//
|
|
10
|
-
// The verdict id is the active-claim task id (the same `active-claim` file
|
|
11
|
-
// `harness approve understanding` consumes). For solo / non-agent-tasks
|
|
12
|
-
// sessions that never call `task_start`, the `SOLUTION_VERDICT_ID` env knob
|
|
13
|
-
// supplies the id instead; it is consulted only when no active claim is
|
|
14
|
-
// present, so a claimed session's id stays authoritative (an env var cannot
|
|
15
|
-
// redirect a claimed task's verdict). With neither source the gate fails
|
|
16
|
-
// CLOSED — a sessionId fallback would reopen the wrong-scope bug class
|
|
17
|
-
// understanding-gate already fixed.
|
|
18
|
-
//
|
|
19
|
-
// Failure mode: any error in load / parse / HEAD-resolution / verdict-read
|
|
20
|
-
// resolves to BLOCK (branch-protection's fail-closed posture, not
|
|
21
|
-
// understanding-gate's fail-open). The gate's whole job is to prevent
|
|
22
|
-
// completion without earned acceptance, so a bug that silently allowed a
|
|
23
|
-
// finish through would defeat the purpose. The block envelope always names
|
|
24
|
-
// `solution_evaluate` as the recovery path so the operator is never wedged;
|
|
25
|
-
// `harness pause` (honored first) is the operator's hard override.
|
|
26
|
-
import * as path from "node:path";
|
|
27
|
-
import { readActiveClaim, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
|
|
28
|
-
import { DEFAULT_PUSH_BASH_RE, evaluateGate, PACK_NAME, readVerdictDetailed, resolveExplicitVerdictId, resolveProtectedCompletionTools, sanitizeVerdictId, VERDICT_ID_ENV, verdictDir as resolveVerdictDir, } from "../../policy-packs/builtin/solution-acceptance-runtime.js";
|
|
29
|
-
import { RECONNECT_RESULT_TOOL, RECONNECT_STATUS_TOOL, renderReconnectDenyParagraph, } from "../../policy-packs/builtin/solution-acceptance-reconnect.js";
|
|
30
|
-
import { resolveGeneratedDir } from "../../io/generated-dir.js";
|
|
31
|
-
import { checkFileLock } from "../../io/lock.js";
|
|
32
|
-
import { resolveGitContext } from "../../runtime/git-context.js";
|
|
33
|
-
import { renderAgentFacing } from "../../runtime/agent-facing.js";
|
|
34
|
-
import { canonicalAgentTasksVerb, DEFAULT_PROTECTED_COMPLETION_TOOLS, } from "../../runtime/task-providers/agent-tasks.js";
|
|
35
|
-
import { checkHookPause, loadManifestOrInjected, parseConfigUx, readStdin, runGateWithStdinRefusal, stdoutBlockRefusal, } from "./hook-bootstrap.js";
|
|
36
|
-
function bashCommandOf(toolInput) {
|
|
37
|
-
if (typeof toolInput !== "object" || toolInput === null)
|
|
38
|
-
return "";
|
|
39
|
-
const cmd = toolInput["command"];
|
|
40
|
-
return typeof cmd === "string" ? cmd : "";
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Decide whether this PreToolUse call is a gated completion action. Returns
|
|
44
|
-
* the human label of the action when gated, or null when this call should
|
|
45
|
-
* pass through (the hook matches all Bash, but only push/merge bash commands
|
|
46
|
-
* are completion actions).
|
|
47
|
-
*/
|
|
48
|
-
function completionActionLabel(toolName, toolInput, protectedVerbs) {
|
|
49
|
-
const agentTasksVerb = canonicalAgentTasksVerb(toolName, protectedVerbs);
|
|
50
|
-
if (agentTasksVerb !== null) {
|
|
51
|
-
return `agent-tasks ${agentTasksVerb}`;
|
|
52
|
-
}
|
|
53
|
-
if (toolName === "Bash") {
|
|
54
|
-
const command = bashCommandOf(toolInput);
|
|
55
|
-
if (command && DEFAULT_PUSH_BASH_RE.test(command))
|
|
56
|
-
return "git push / gh pr merge";
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Suffix of the attempt-lock ANCHOR file grounding-mcp writes beside the
|
|
63
|
-
* verdict marker, mirroring its own `LOCK_ANCHOR_SUFFIX`
|
|
64
|
-
* (grounding-mcp-v0.12.0 packages/grounding-mcp/src/solution-attempt-log.ts:209)
|
|
65
|
-
* and README table row "Attempt lock anchor" (`<verdict dir>/<id>.attempt-lock`,
|
|
66
|
-
* mode `0600`; the lock itself is the `<id>.attempt-lock.lock` directory
|
|
67
|
-
* `proper-lockfile` manages beside it, packages/grounding-mcp/README.md:42
|
|
68
|
-
* at that tag).
|
|
69
|
-
*/
|
|
70
|
-
const ATTEMPT_LOCK_ANCHOR_SUFFIX = ".attempt-lock";
|
|
71
|
-
/**
|
|
72
|
-
* Staleness window this hook applies when READING the attempt-lock anchor:
|
|
73
|
-
* the producer's own DOCUMENTED default, `DEFAULT_ATTEMPT_LOCK_STALE_MS`
|
|
74
|
-
* (grounding-mcp-v0.12.0 packages/grounding-mcp/src/solution-attempt-log.ts:102,
|
|
75
|
-
* `= 30_000`), the `staleMs` `acquireAttemptLock` passes straight through
|
|
76
|
-
* to `lockfile.lock(anchor, { retries: 0, realpath: false, stale:
|
|
77
|
-
* options.staleMs, ... })` (same file, lines 472-475) on every DEFAULT
|
|
78
|
-
* acquisition, pinned here as a literal rather than imported (this package
|
|
79
|
-
* has no dependency on grounding-mcp's internals). This hook applies the
|
|
80
|
-
* producer's documented default window pinned to grounding-mcp-v0.12.0; it
|
|
81
|
-
* diverges from what the producer actually enforces for a given attempt
|
|
82
|
-
* if the producer's own default changes in a later release, or if a
|
|
83
|
-
* caller of `acquireAttemptLock` overrides `staleMs` away from that
|
|
84
|
-
* default (the producer's own option is caller-settable, same file),
|
|
85
|
-
* since neither is observable from this side of the lock: an operational
|
|
86
|
-
* pin, not a mathematical guarantee, that needs re-checking on every
|
|
87
|
-
* grounding-mcp bump this pack's producer floor moves past.
|
|
88
|
-
*/
|
|
89
|
-
export const ATTEMPT_LOCK_STALE_MS = 30_000;
|
|
90
|
-
/**
|
|
91
|
-
* Every state the null-verdict note renders a line for, as data. The note
|
|
92
|
-
* is a total function over this list (`coordinateOf` below maps each
|
|
93
|
-
* `NullVerdictInfo` onto exactly one coordinate, and the compiler rejects a
|
|
94
|
-
* member without a line), and
|
|
95
|
-
* `tests/cli/pack-hook-solution-acceptance.test.ts` iterates it to assert
|
|
96
|
-
* the state table has a row per member. A state added to the classifier
|
|
97
|
-
* without a row therefore fails the build or the suite, instead of
|
|
98
|
-
* shipping an unpinned line to an agent.
|
|
99
|
-
*/
|
|
100
|
-
export const NULL_VERDICT_NOTE_STATES = [
|
|
101
|
-
"unusable-id",
|
|
102
|
-
"never-evaluated",
|
|
103
|
-
"marker-symlink",
|
|
104
|
-
"marker-not-regular",
|
|
105
|
-
"marker-unreadable",
|
|
106
|
-
"marker-invalid-record",
|
|
107
|
-
"live-attempt",
|
|
108
|
-
];
|
|
109
|
-
/**
|
|
110
|
-
* The two states whose line carries no liveness clause: the unusable-id
|
|
111
|
-
* line (nothing was read, so no liveness exists to name) and the
|
|
112
|
-
* live-attempt line (its liveness is `"live"` by definition). Every other
|
|
113
|
-
* state's line names what the lock check said, so it exists once per
|
|
114
|
-
* clause.
|
|
115
|
-
*/
|
|
116
|
-
export const NULL_VERDICT_CLAUSE_FREE_STATES = ["unusable-id", "live-attempt"];
|
|
117
|
-
function isClauseFreeNoteState(state) {
|
|
118
|
-
return NULL_VERDICT_CLAUSE_FREE_STATES.includes(state);
|
|
119
|
-
}
|
|
120
|
-
function attemptLockAnchorPath(dir, id) {
|
|
121
|
-
return path.join(dir, `${sanitizeVerdictId(id)}${ATTEMPT_LOCK_ANCHOR_SUFFIX}`);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Read-only, three-valued liveness check: does `id`'s attempt-lock
|
|
125
|
-
* anchor's `.lock` directory exist and read as NOT stale under
|
|
126
|
-
* `ATTEMPT_LOCK_STALE_MS`? Routed through `src/io/lock.ts`'s
|
|
127
|
-
* `checkFileLock` (the designated read-only wrapper around
|
|
128
|
-
* `proper-lockfile`'s own `checkSync`, the SAME library the producer
|
|
129
|
-
* acquires the lock with), so the stale/live split is decided by the
|
|
130
|
-
* producer's own mechanism, not a reimplementation of its mtime
|
|
131
|
-
* arithmetic. `realpath: false` mirrors the producer's own
|
|
132
|
-
* `acquireAttemptLock` call (cited above): with the library default
|
|
133
|
-
* `realpath: true`, checking an anchor that was never created (the
|
|
134
|
-
* anchor is created lazily, on first acquisition, the common "never
|
|
135
|
-
* evaluated" case) would `realpath` the anchor FILE itself first and
|
|
136
|
-
* throw `ENOENT`, instead of answering the ordinary "not locked" case.
|
|
137
|
-
* Never acquires or mutates the lock; a check-only read has no cleanup
|
|
138
|
-
* to restore.
|
|
139
|
-
*
|
|
140
|
-
* PRECONDITION: `id` is already known usable. `attemptLockAnchorPath`'s
|
|
141
|
-
* only throw source is `sanitizeVerdictId`, which the caller has already
|
|
142
|
-
* passed (`readVerdictDetailed` answered something other than
|
|
143
|
-
* `invalid-id` for the same id, through the same function), so this has no
|
|
144
|
-
* catch of its own: an unreachable arm cannot be tested and cannot be
|
|
145
|
-
* killed by a mutant, which is worse than no arm at all (review finding,
|
|
146
|
-
* harness/799de976, round 6).
|
|
147
|
-
*/
|
|
148
|
-
function readAttemptLockLiveness(dir, id) {
|
|
149
|
-
return checkFileLock(attemptLockAnchorPath(dir, id), { staleMs: ATTEMPT_LOCK_STALE_MS });
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Classify WHY `gate.verdict === null` for `id`: whether the id is usable
|
|
153
|
-
* at all, and if it is, which of the three readings applies, AND the raw
|
|
154
|
-
* liveness result the classification rests
|
|
155
|
-
* on, so the deny text can name the reading it detected without ever
|
|
156
|
-
* collapsing "liveness could not be determined" into "confirmed not
|
|
157
|
-
* live" (see docs/policy-packs/solution-acceptance.md, "Reading the
|
|
158
|
-
* attempt-lock anchor to distinguish the three readings", for the
|
|
159
|
-
* record). Live-attempt takes priority over the marker-presence check: a
|
|
160
|
-
* live attempt can coexist with a stale or corrupt marker left by an
|
|
161
|
-
* earlier run for the same id, and "reconnect to the live attempt" is
|
|
162
|
-
* the actionable reading in that overlap.
|
|
163
|
-
*/
|
|
164
|
-
function classifyNullVerdictReading(dir, id, read) {
|
|
165
|
-
// The marker is NOT looked at again here. `read` is the same observation
|
|
166
|
-
// `evaluateGate` decided on, passed in: a second look can disagree with
|
|
167
|
-
// the first (a background attempt finishing between the two), and a note
|
|
168
|
-
// rendered from the later one would describe a rejection the gate never
|
|
169
|
-
// made (review finding, harness/799de976, round 6). Only the LOCK, a
|
|
170
|
-
// different subject with its own clause, is read here.
|
|
171
|
-
if (read.kind === "invalid-id")
|
|
172
|
-
return { kind: "unusable-id" };
|
|
173
|
-
const liveness = readAttemptLockLiveness(dir, id);
|
|
174
|
-
if (liveness === "live")
|
|
175
|
-
return { kind: "reading", reading: "live-attempt" };
|
|
176
|
-
if (read.kind === "missing")
|
|
177
|
-
return { kind: "reading", reading: "never-evaluated", liveness };
|
|
178
|
-
// `read.kind` is narrowed to the rejected kinds by the parameter type: a
|
|
179
|
-
// read that produced a verdict never reaches the classifier, so there is
|
|
180
|
-
// no arm here that could name a valid record as invalid.
|
|
181
|
-
const markerKind = read.kind;
|
|
182
|
-
return { kind: "reading", reading: "unreadable-marker", liveness, markerKind };
|
|
183
|
-
}
|
|
184
|
-
/** The one coordinate a classification renders at, as a total mapping. */
|
|
185
|
-
function coordinateOf(info) {
|
|
186
|
-
if (info.kind === "unusable-id")
|
|
187
|
-
return { state: "unusable-id" };
|
|
188
|
-
switch (info.reading) {
|
|
189
|
-
case "live-attempt":
|
|
190
|
-
return { state: "live-attempt" };
|
|
191
|
-
case "never-evaluated":
|
|
192
|
-
return { state: "never-evaluated", liveness: info.liveness };
|
|
193
|
-
case "unreadable-marker":
|
|
194
|
-
switch (info.markerKind) {
|
|
195
|
-
case "symlink":
|
|
196
|
-
return { state: "marker-symlink", liveness: info.liveness };
|
|
197
|
-
case "not-regular":
|
|
198
|
-
return { state: "marker-not-regular", liveness: info.liveness };
|
|
199
|
-
case "unreadable":
|
|
200
|
-
return { state: "marker-unreadable", liveness: info.liveness };
|
|
201
|
-
case "invalid-record":
|
|
202
|
-
return { state: "marker-invalid-record", liveness: info.liveness };
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/** The liveness clause, which names what the lock check actually said. */
|
|
207
|
-
const UNDETERMINED_LIVENESS_CLAUSE = "liveness could not be determined";
|
|
208
|
-
const NOT_LIVE_CLAUSE = "no attempt reads as currently live";
|
|
209
|
-
/**
|
|
210
|
-
* One line per note state, as a total `Record` keyed by
|
|
211
|
-
* `NULL_VERDICT_NOTE_STATES`: a state added to the list without a line
|
|
212
|
-
* here fails the build, which is what makes the list a checklist rather
|
|
213
|
-
* than a convention.
|
|
214
|
-
*
|
|
215
|
-
* Invariant across every line: it states only what the gate established,
|
|
216
|
-
* and never a cause that was not observed. The liveness clause names what
|
|
217
|
-
* the lock check said ("no attempt reads as currently live" vs "liveness
|
|
218
|
-
* could not be determined") instead of always asserting absence, and the
|
|
219
|
-
* marker lines come from the gate's OWN read of the marker, never from a
|
|
220
|
-
* second look at the path. `tests/cli/pack-hook-solution-acceptance.test.ts`
|
|
221
|
-
* pins one exact expected line per state and asserts every member of the
|
|
222
|
-
* list has a row, so a future state whose line would overstate fails there
|
|
223
|
-
* rather than reaching an agent.
|
|
224
|
-
*/
|
|
225
|
-
export const NULL_VERDICT_NOTE_RENDERERS = {
|
|
226
|
-
// Nothing was read here and no liveness was established, so the note
|
|
227
|
-
// claims neither: it reports the one fact the classifier settled, names
|
|
228
|
-
// the only surface this id can have come from, and names the verb that
|
|
229
|
-
// clears it. An explicit SOLUTION_VERDICT_ID cannot reach this state:
|
|
230
|
-
// `resolveExplicitVerdictId` validates through the same
|
|
231
|
-
// `sanitizeVerdictId` and answers null for anything it rejects.
|
|
232
|
-
"unusable-id": (taskId) => `The claimed id ${JSON.stringify(taskId)} is not a usable verdict id: no verdict marker path and no attempt-lock path can be derived from it, so neither was read. Release the active claim carrying it (mcp__agent-tasks__task_abandon, or have the operator clear harness.generated/active-claim), claim the real task, then run solution_evaluate for it.`,
|
|
233
|
-
// Only "the marker read found nothing" is established (the shared reader
|
|
234
|
-
// folds every lstat failure into `missing`), plus whatever the lock check
|
|
235
|
-
// said at a later moment. Neither clause names a cause: earlier versions
|
|
236
|
-
// guessed one ("the verdict directory could not be read"), then a
|
|
237
|
-
// narrower disjunction of two, then "solution_evaluate has not been
|
|
238
|
-
// called for this id", and each guess was falsified by a state that
|
|
239
|
-
// reached this branch without it: a marker recorded and then deleted, an
|
|
240
|
-
// attempt finishing between the marker read and the lock read, or an
|
|
241
|
-
// lstat failure of some other kind.
|
|
242
|
-
"never-evaluated": (taskId, clause) => clause === UNDETERMINED_LIVENESS_CLAUSE
|
|
243
|
-
? `No verdict marker was found for "${taskId}" and liveness could not be determined: run solution_evaluate for this id.`
|
|
244
|
-
: `No verdict marker was found for "${taskId}"; ${clause}: run solution_evaluate for this id.`,
|
|
245
|
-
// One line per rejection kind, each naming exactly what the gate's own
|
|
246
|
-
// read established. A hand-written disjunction over the kinds was the
|
|
247
|
-
// round-6 finding: it read as a claim about the path as it is NOW, while
|
|
248
|
-
// the kinds come from the read the gate decided on.
|
|
249
|
-
"marker-symlink": (taskId, clause) => `The verdict marker path for "${taskId}" is a symlink, which this gate refuses to follow; ${clause}: replace it with a marker recorded by solution_evaluate.`,
|
|
250
|
-
"marker-not-regular": (taskId, clause) => `The verdict marker path for "${taskId}" is not a regular file; ${clause}: replace it with a marker recorded by solution_evaluate.`,
|
|
251
|
-
"marker-unreadable": (taskId, clause) => `The verdict marker for "${taskId}" could not be read; ${clause}: re-run solution_evaluate to record a fresh one.`,
|
|
252
|
-
"marker-invalid-record": (taskId, clause) => `The verdict marker for "${taskId}" was read but is not a valid verdict record; ${clause}: re-run solution_evaluate to record a fresh one.`,
|
|
253
|
-
"live-attempt": (taskId) => `A solution_evaluate attempt for "${taskId}" is still live: its attempt-lock anchor is held.`,
|
|
254
|
-
};
|
|
255
|
-
/**
|
|
256
|
-
* Every reachable coordinate, derived from `NULL_VERDICT_NOTE_STATES`: one
|
|
257
|
-
* per clause-free state, one per liveness clause for every other state. The
|
|
258
|
-
* state table in `tests/cli/pack-hook-solution-acceptance.test.ts` requires
|
|
259
|
-
* a row per member and derives its "no other line appears" set from it, so
|
|
260
|
-
* a state added to the list joins both without anyone extending a list.
|
|
261
|
-
*/
|
|
262
|
-
export const NULL_VERDICT_NOTE_COORDINATES = NULL_VERDICT_NOTE_STATES.flatMap((state) => isClauseFreeNoteState(state)
|
|
263
|
-
? [{ state }]
|
|
264
|
-
: [
|
|
265
|
-
{ state, liveness: "not-live" },
|
|
266
|
-
{ state, liveness: "unknown" },
|
|
267
|
-
]);
|
|
268
|
-
/**
|
|
269
|
-
* The exact line a coordinate renders for `taskId`. The one place a state
|
|
270
|
-
* and a liveness become a line: the hook renders through it, and the state
|
|
271
|
-
* table derives its "no other line appears" set and checks each row's
|
|
272
|
-
* declared coordinate against it. Total over reachable coordinates only: a
|
|
273
|
-
* pair the type excludes (`"live"` beside a clause-carrying state, any
|
|
274
|
-
* liveness beside a clause-free one) throws instead of rendering a line
|
|
275
|
-
* that would misstate what was observed, for a caller that bypasses the
|
|
276
|
-
* type.
|
|
277
|
-
*/
|
|
278
|
-
export function renderNullVerdictNote(coordinate, taskId) {
|
|
279
|
-
const liveness = "liveness" in coordinate ? coordinate.liveness : undefined;
|
|
280
|
-
if (isClauseFreeNoteState(coordinate.state)) {
|
|
281
|
-
if (liveness !== undefined) {
|
|
282
|
-
throw new Error(`null-verdict note state ${coordinate.state} carries no liveness clause, got ${String(liveness)}`);
|
|
283
|
-
}
|
|
284
|
-
return NULL_VERDICT_NOTE_RENDERERS[coordinate.state](taskId, "");
|
|
285
|
-
}
|
|
286
|
-
if (liveness !== "not-live" && liveness !== "unknown") {
|
|
287
|
-
throw new Error(`null-verdict note state ${coordinate.state} renders only for liveness not-live or unknown, got ${String(liveness)}`);
|
|
288
|
-
}
|
|
289
|
-
const clause = liveness === "unknown" ? UNDETERMINED_LIVENESS_CLAUSE : NOT_LIVE_CLAUSE;
|
|
290
|
-
return NULL_VERDICT_NOTE_RENDERERS[coordinate.state](taskId, clause);
|
|
291
|
-
}
|
|
292
|
-
function nullVerdictReadingNote(taskId, info) {
|
|
293
|
-
return renderNullVerdictNote(coordinateOf(info), taskId);
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Reconnect-vs-retry guidance appended to the default deny text only for
|
|
297
|
-
* reading (2), "an attempt is live" (`classifyNullVerdictReading` above
|
|
298
|
-
* returned `reading: "live-attempt"`): the paragraph is rendered from
|
|
299
|
-
* `solution-acceptance-reconnect.ts`, the SAME fact source the pack's
|
|
300
|
-
* `instructions.md` "Reconnecting vs. retrying" section renders from, so
|
|
301
|
-
* the two surfaces cannot silently drift apart. Readings (1)
|
|
302
|
-
* (never-evaluated) and (3) (unreadable-marker) instead get their own
|
|
303
|
-
* short `nullVerdictReadingNote` line, with no reconnect paragraph: there
|
|
304
|
-
* is no live attempt to reconnect to. See
|
|
305
|
-
* docs/policy-packs/solution-acceptance.md, "Reading the attempt-lock
|
|
306
|
-
* anchor to distinguish the three readings", for the decision record.
|
|
307
|
-
*/
|
|
308
|
-
function reconnectGuidanceFor(taskId, info) {
|
|
309
|
-
if (info === null || info.kind !== "reading" || info.reading !== "live-attempt")
|
|
310
|
-
return "";
|
|
311
|
-
return renderReconnectDenyParagraph(taskId);
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Converge step 2, as a function of the reading: for the live-attempt
|
|
315
|
-
* reading a call instruction naming `solution_evaluate` is the wrong next
|
|
316
|
-
* action (a call JOINS the live attempt rather than evaluating; only
|
|
317
|
-
* `forceNewAttempt` is refused while the lock holds, see
|
|
318
|
-
* `RECONNECT_FACT_JOIN_NOT_RETRY`), so that reading gets its own step 2
|
|
319
|
-
* naming the poll tools instead. The other two null-verdict readings
|
|
320
|
-
* (never-evaluated, unreadable-marker) and every non-null-verdict deny
|
|
321
|
-
* (drift, not-ready, ...) keep the original step naming `solution_evaluate`
|
|
322
|
-
* unqualified, since a call there genuinely starts the evaluation.
|
|
323
|
-
*/
|
|
324
|
-
function convergeStep2For(taskId, nullVerdict) {
|
|
325
|
-
if (nullVerdict !== null && nullVerdict.kind === "reading" && nullVerdict.reading === "live-attempt") {
|
|
326
|
-
return (` 2. An attempt for "${taskId}" is already live (see the reconnect paragraph below): ` +
|
|
327
|
-
`poll \`${RECONNECT_STATUS_TOOL}\` / \`${RECONNECT_RESULT_TOOL}\` for the SAME id until it resolves, ` +
|
|
328
|
-
`instead of starting a new evaluation. A clean verdict at the current HEAD unblocks this tool; ` +
|
|
329
|
-
`a not-ready or failing verdict lists the blockers to fix (then back to step 1).\n`);
|
|
330
|
-
}
|
|
331
|
-
return (` 2. mcp__grounding-mcp__solution_evaluate({ id: "${taskId}" }): runs \`preflight run --json\` ` +
|
|
332
|
-
`(lint/typecheck/test/audit/secret) and records a HEAD-pinned verdict. A clean run at the current ` +
|
|
333
|
-
`HEAD unblocks this tool; a failing run lists the blockers to fix (then back to step 1).\n`);
|
|
334
|
-
}
|
|
335
|
-
function blockJson(actionLabel, toolName, taskId, detail, ux, sessionId, nullVerdict = null) {
|
|
336
|
-
let reasonText;
|
|
337
|
-
if (ux) {
|
|
338
|
-
reasonText = renderAgentFacing(ux, {
|
|
339
|
-
TOOL_NAME: toolName,
|
|
340
|
-
SESSION_ID: sessionId,
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
reasonText =
|
|
345
|
-
`solution-acceptance: refusing ${actionLabel} (${toolName}). ${detail}\n` +
|
|
346
|
-
(nullVerdict !== null ? `${nullVerdictReadingNote(taskId, nullVerdict)}\n` : "") +
|
|
347
|
-
`Completion must be EARNED from a real preflight run at the CURRENT HEAD, not claimed.\n` +
|
|
348
|
-
`Converge in this order, all at one commit:\n` +
|
|
349
|
-
` 1. If the working tree is dirty, COMMIT first. The verdict is pinned to the HEAD it was evaluated at, so any commit you make afterward makes it stale; commit the change before evaluating so the verdict pins to the final HEAD.\n` +
|
|
350
|
-
convergeStep2For(taskId, nullVerdict) +
|
|
351
|
-
` 3. For \`git push\` / \`gh pr merge\`: the separate preflight-before-push gate is satisfied by a preflight at the current HEAD (its \`at_head\` rule), so refresh it at this same commit with \`harness preflight\` before retrying. Satisfy both push-gates at one HEAD.\n` +
|
|
352
|
-
reconnectGuidanceFor(taskId, nullVerdict) +
|
|
353
|
-
`\n` +
|
|
354
|
-
`Operator override: \`harness pause\` (yields this and every other gate).`;
|
|
355
|
-
}
|
|
356
|
-
return JSON.stringify({
|
|
357
|
-
decision: "block",
|
|
358
|
-
reason: reasonText,
|
|
359
|
-
hookSpecificOutput: {
|
|
360
|
-
hookEventName: "PreToolUse",
|
|
361
|
-
permissionDecision: "deny",
|
|
362
|
-
permissionDecisionReason: reasonText,
|
|
363
|
-
},
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
async function runPackHookSolutionAcceptanceCliInner(opts = {}) {
|
|
367
|
-
const stdin = opts.stdin ?? process.stdin;
|
|
368
|
-
const stdout = opts.stdout ?? process.stdout;
|
|
369
|
-
const stderr = opts.stderr ?? process.stderr;
|
|
370
|
-
const note = (msg) => {
|
|
371
|
-
stderr.write(`harness pack hook solution-acceptance: ${msg}\n`);
|
|
372
|
-
};
|
|
373
|
-
const env = opts.env ?? process.env;
|
|
374
|
-
const raw = await readStdin(stdin);
|
|
375
|
-
let event = {};
|
|
376
|
-
try {
|
|
377
|
-
event = JSON.parse(raw.trim() || "{}");
|
|
378
|
-
}
|
|
379
|
-
catch {
|
|
380
|
-
/* event stays {} */
|
|
381
|
-
}
|
|
382
|
-
// Operator pause yields even this gate.
|
|
383
|
-
if (checkHookPause(PACK_NAME, stderr, opts).paused) {
|
|
384
|
-
const diagnostic = "harness paused; solution-acceptance allowing without evaluating.";
|
|
385
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
386
|
-
}
|
|
387
|
-
const sessionId = (typeof event.session_id === "string" ? event.session_id : undefined) ??
|
|
388
|
-
env["CLAUDE_CODE_SESSION_ID"] ??
|
|
389
|
-
env["CLAUDE_SESSION_ID"] ??
|
|
390
|
-
"";
|
|
391
|
-
const toolName = typeof event.tool_name === "string" ? event.tool_name : "(unknown)";
|
|
392
|
-
const cwd = typeof opts.cwd === "string" && opts.cwd.length > 0
|
|
393
|
-
? opts.cwd
|
|
394
|
-
: typeof event.cwd === "string" && event.cwd.length > 0
|
|
395
|
-
? event.cwd
|
|
396
|
-
: process.cwd();
|
|
397
|
-
// Load manifest to resolve the pack config. A load failure forces BLOCK
|
|
398
|
-
// only if this turns out to be a completion action; resolve it first.
|
|
399
|
-
// `manifestPath` (the resolved manifest base) feeds the harness.generated/
|
|
400
|
-
// lookup below — it is populated whether the operator passed --config or
|
|
401
|
-
// the default (~/.harness/harness.yaml) was resolved, so the bare
|
|
402
|
-
// production hook command still resolves the active-claim id.
|
|
403
|
-
let manifest;
|
|
404
|
-
let manifestPath;
|
|
405
|
-
try {
|
|
406
|
-
({ manifest, manifestPath } = loadManifestOrInjected(opts, opts.manifest));
|
|
407
|
-
}
|
|
408
|
-
catch (err) {
|
|
409
|
-
// We cannot tell if this is a gated action without the config, but a
|
|
410
|
-
// manifest load failure should not block unrelated tool calls. Only
|
|
411
|
-
// the completion verbs / push commands are ever gated, so classify
|
|
412
|
-
// by tool name with the DEFAULT verb set as a failsafe.
|
|
413
|
-
const label = completionActionLabel(toolName, event.tool_input, DEFAULT_PROTECTED_COMPLETION_TOOLS);
|
|
414
|
-
if (label === null) {
|
|
415
|
-
const diagnostic = `manifest load failed (${err.message}) but ${toolName} is not a completion action; allowing`;
|
|
416
|
-
note(diagnostic);
|
|
417
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
418
|
-
}
|
|
419
|
-
const reason = `manifest load failed (${err.message}); refusing ${label} on failsafe`;
|
|
420
|
-
const diagnostic = `BLOCK — ${reason}`;
|
|
421
|
-
note(diagnostic);
|
|
422
|
-
stdout.write(`${blockJson(label, toolName, "<unknown>", reason, undefined, sessionId)}\n`);
|
|
423
|
-
return { exitCode: 0, blocked: true, diagnostic };
|
|
424
|
-
}
|
|
425
|
-
const pack = manifest.policy_packs.find((p) => p.name === PACK_NAME);
|
|
426
|
-
if (!pack) {
|
|
427
|
-
const diagnostic = `pack "${PACK_NAME}" not declared in manifest, allowing`;
|
|
428
|
-
note(diagnostic);
|
|
429
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
430
|
-
}
|
|
431
|
-
if (!pack.enabled) {
|
|
432
|
-
const diagnostic = `pack "${PACK_NAME}" is enabled:false, allowing`;
|
|
433
|
-
note(diagnostic);
|
|
434
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
435
|
-
}
|
|
436
|
-
const protectedVerbs = resolveProtectedCompletionTools(pack);
|
|
437
|
-
const actionLabel = completionActionLabel(toolName, event.tool_input, protectedVerbs);
|
|
438
|
-
if (actionLabel === null) {
|
|
439
|
-
const diagnostic = `${toolName} is not a gated completion action; allowing`;
|
|
440
|
-
note(diagnostic);
|
|
441
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
442
|
-
}
|
|
443
|
-
const configUx = parseConfigUx(pack.config["ux"], stderr, "harness pack hook solution-acceptance");
|
|
444
|
-
// Resolve the verdict id. Precedence: the agent-tasks active-claim task id
|
|
445
|
-
// first (authoritative for claimed sessions — an env var must not redirect a
|
|
446
|
-
// claimed task's verdict), then the SOLUTION_VERDICT_ID env knob for solo /
|
|
447
|
-
// non-agent-tasks sessions, then fail CLOSED. A sessionId fallback is
|
|
448
|
-
// intentionally NOT a source (it would reopen the wrong-scope bug class).
|
|
449
|
-
const generatedDir = opts.generatedDir ??
|
|
450
|
-
(manifestPath !== undefined
|
|
451
|
-
? resolveGeneratedDir({
|
|
452
|
-
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
453
|
-
manifestPath,
|
|
454
|
-
})
|
|
455
|
-
: undefined);
|
|
456
|
-
const activeClaim = opts.activeClaim !== undefined
|
|
457
|
-
? opts.activeClaim
|
|
458
|
-
: generatedDir !== undefined
|
|
459
|
-
? readActiveClaim(generatedDir)
|
|
460
|
-
: null;
|
|
461
|
-
const taskId = activeClaim ?? resolveExplicitVerdictId(env);
|
|
462
|
-
if (!taskId) {
|
|
463
|
-
const detail = opts.activeClaim === undefined && generatedDir === undefined
|
|
464
|
-
? " (could not resolve harness.generated/; pass --config)"
|
|
465
|
-
: "";
|
|
466
|
-
const reason = `no verdict id: no active-claim task id recorded${detail} and ${VERDICT_ID_ENV} is unset or invalid.\n` +
|
|
467
|
-
`\n` +
|
|
468
|
-
`Converge one of two ways:\n` +
|
|
469
|
-
`\n` +
|
|
470
|
-
`1. Agent-tasks workflow: Call mcp__agent-tasks__task_start first to claim the task (the verdict id is the active task). For post-done work (Release, deploy, etc.), create a separate task and call task_start for it.\n` +
|
|
471
|
-
`\n` +
|
|
472
|
-
`2. Solo / non-agent-tasks session: ${VERDICT_ID_ENV} must be set in the environment at Session-Start time (Operator option; it is read at Hook startup, not agent-sideeffect-settable from within the session).`;
|
|
473
|
-
const diagnostic = `BLOCK — ${reason}`;
|
|
474
|
-
note(diagnostic);
|
|
475
|
-
stdout.write(`${blockJson(actionLabel, toolName, "<no-verdict-id>", reason, configUx, sessionId)}\n`);
|
|
476
|
-
return { exitCode: 0, blocked: true, diagnostic };
|
|
477
|
-
}
|
|
478
|
-
// The verdict DIR still resolves SOLUTION_VERDICT_DIR from process.env (the
|
|
479
|
-
// `env` seam above covers the verdict id + sessionId, not the dir); in
|
|
480
|
-
// production both see the same process.env, and tests inject opts.verdictDir.
|
|
481
|
-
const dir = opts.verdictDir ?? resolveVerdictDir();
|
|
482
|
-
const currentHead = resolveGitContext(cwd).sha || null;
|
|
483
|
-
// ONE observation of the marker, shared by the gate decision below and,
|
|
484
|
-
// when it denies, by the deny text's own classification: the text must
|
|
485
|
-
// describe the read the decision rests on, not a later, possibly
|
|
486
|
-
// different state of the same path (harness/799de976, round 6).
|
|
487
|
-
const read = readVerdictDetailed(dir, taskId);
|
|
488
|
-
const verdict = read.kind === "ok" ? read.verdict : null;
|
|
489
|
-
// generatedDir (harness's own .generated/ dir, NOT the verdict dir) holds
|
|
490
|
-
// the shared approval-signing key evaluateGate needs to verify the
|
|
491
|
-
// verdict's HMAC signature (harness/c7c3f606); undefined fails closed
|
|
492
|
-
// inside evaluateGate with its own distinct reason.
|
|
493
|
-
const gate = evaluateGate(verdict, currentHead, taskId, generatedDir);
|
|
494
|
-
if (gate.allowed) {
|
|
495
|
-
const diagnostic = `${gate.reason}; allowing ${actionLabel}`;
|
|
496
|
-
note(diagnostic);
|
|
497
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
498
|
-
}
|
|
499
|
-
// Distinct operator-facing audit tag when the gate blocked SPECIFICALLY
|
|
500
|
-
// because the verdict was forged/unsigned or identity-mismatched
|
|
501
|
-
// (GateResult.forged, harness/c7c3f606), not the routine "no verdict" /
|
|
502
|
-
// "not ready" / "stale" cases — mirrors the `ackEcho` audit-echo pattern
|
|
503
|
-
// in hook-branch-protection.ts (a short, greppable tag appended only to
|
|
504
|
-
// the STDERR diagnostic), NOT that same hook's `markerForgedNote`: that
|
|
505
|
-
// one folds its forged-marker wording into the AGENT-facing block reason
|
|
506
|
-
// too (`why` there feeds both `note()` and `blockJson`). This tag stays
|
|
507
|
-
// out of the agent-facing reason on purpose — `gate.reason` already
|
|
508
|
-
// narrates the forgery in prose for the agent, so there is nothing this
|
|
509
|
-
// tag would add there; it exists so an operator scanning hook logs for
|
|
510
|
-
// active forgery attempts does not have to pattern-match the prose.
|
|
511
|
-
const forgedTag = gate.forged ? " [audit: forged/unsigned verdict marker rejected]" : "";
|
|
512
|
-
const diagnostic = `BLOCK — ${gate.reason}${forgedTag}`;
|
|
513
|
-
note(diagnostic);
|
|
514
|
-
// Classify only a denial whose read produced no verdict. A deny with a
|
|
515
|
-
// verdict on record (`read.kind === "ok"`) gets no null-verdict note at all
|
|
516
|
-
// rather than a line describing a rejection the gate never made.
|
|
517
|
-
const nullVerdict = read.kind !== "ok" ? classifyNullVerdictReading(dir, taskId, read) : null;
|
|
518
|
-
stdout.write(`${blockJson(actionLabel, toolName, taskId, gate.reason, configUx, sessionId, nullVerdict)}\n`);
|
|
519
|
-
return { exitCode: 0, blocked: true, diagnostic };
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* `harness pack hook solution-acceptance`. A stdin read that times out is refused here
|
|
523
|
-
* instead of being handed to the gate as an empty or truncated event it would
|
|
524
|
-
* treat as malformed input (task 7dfdcaaf). The operator pause still wins;
|
|
525
|
-
* every other input runs the gate unchanged.
|
|
526
|
-
*/
|
|
527
|
-
export function runPackHookSolutionAcceptanceCli(opts = {}) {
|
|
528
|
-
return runGateWithStdinRefusal(opts, (stderr) => checkHookPause(PACK_NAME, stderr, opts).paused, stdoutBlockRefusal("solution-acceptance"), runPackHookSolutionAcceptanceCliInner);
|
|
529
|
-
}
|
|
530
|
-
//# sourceMappingURL=hook-solution-acceptance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-solution-acceptance.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-solution-acceptance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { type StayInScopeMatchedRule } from "../../policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js";
|
|
2
|
-
import type { Manifest } from "../../schema/index.js";
|
|
3
|
-
import type { LoaderOptions } from "../loader.js";
|
|
4
|
-
export declare const STAY_IN_SCOPE_DISABLED_ENV = "STAY_IN_SCOPE_DISABLED";
|
|
5
|
-
export declare const STAY_IN_SCOPE_LOG_ENV = "STAY_IN_SCOPE_LOG";
|
|
6
|
-
export declare const REMINDERS_SUBDIR = "reminders";
|
|
7
|
-
export declare const STAY_IN_SCOPE_LOG_BASENAME = "stay-in-scope.log";
|
|
8
|
-
export type MatchedRule = StayInScopeMatchedRule;
|
|
9
|
-
export interface StayInScopeAuditRecord {
|
|
10
|
-
ts: string;
|
|
11
|
-
taskId: string | null;
|
|
12
|
-
title: string | null;
|
|
13
|
-
labels: string[];
|
|
14
|
-
parentPrUrl: string | null;
|
|
15
|
-
secondOrder: boolean;
|
|
16
|
-
matchedRule: MatchedRule;
|
|
17
|
-
}
|
|
18
|
-
export interface PackHookStayInScopeOptions extends LoaderOptions {
|
|
19
|
-
pack?: string;
|
|
20
|
-
generatedDir?: string;
|
|
21
|
-
logPath?: string;
|
|
22
|
-
stdin?: NodeJS.ReadableStream;
|
|
23
|
-
stderr?: NodeJS.WritableStream;
|
|
24
|
-
now?: Date;
|
|
25
|
-
env?: NodeJS.ProcessEnv;
|
|
26
|
-
manifest?: Manifest;
|
|
27
|
-
}
|
|
28
|
-
export interface PackHookStayInScopeResult {
|
|
29
|
-
exitCode: number;
|
|
30
|
-
matched: boolean;
|
|
31
|
-
matchedRule: MatchedRule;
|
|
32
|
-
logged: boolean;
|
|
33
|
-
secondOrder: boolean;
|
|
34
|
-
logPath: string | null;
|
|
35
|
-
diagnostic: string;
|
|
36
|
-
}
|
|
37
|
-
export declare function runPackHookStayInScopeCli(opts?: PackHookStayInScopeOptions): Promise<PackHookStayInScopeResult>;
|