@lannguyensi/harness 0.64.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 +64 -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 -345
- 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 -713
- 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 -387
- 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 +9 -2131
- 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 -245
- 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/{delegate/register.d.ts → register-gate-group.d.ts} +1 -1
- 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 +1 -1
- package/dist/cli/register-operator-lifecycle.js +3 -100
- package/dist/cli/register-operator-lifecycle.js.map +1 -1
- 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-audit-group.d.ts → register-setup-group.d.ts} +1 -1
- 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.js +2 -19
- package/dist/cli/remove/register.js.map +1 -1
- 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.js +6 -4
- package/dist/cli/uninstall/register.js.map +1 -1
- 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 -444
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/delegate/register.js +0 -90
- package/dist/cli/delegate/register.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/expire-on-tool-match.d.ts +0 -15
- package/dist/cli/doctor/expire-on-tool-match.js +0 -58
- package/dist/cli/doctor/expire-on-tool-match.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 -58
- package/dist/cli/dry-run.js +0 -283
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/enriched-event.d.ts +0 -35
- package/dist/cli/enriched-event.js +0 -60
- package/dist/cli/enriched-event.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 -25
- package/dist/cli/explain-action.js +0 -57
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -147
- package/dist/cli/explain-policy.js +0 -248
- 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 -438
- 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 -1022
- 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 -110
- 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/register-audit-group.js +0 -91
- package/dist/cli/register-audit-group.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -46
- 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 -27
- package/dist/cli/test-risk.js +0 -38
- 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 -643
- 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 -106
- 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 -625
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1076
- 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 -1078
- 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 -623
- package/dist/runtime/intercept.js +0 -1384
- 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 -105
- package/dist/runtime/task-providers/agent-tasks.js +0 -247
- 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,438 +0,0 @@
|
|
|
1
|
-
// `harness pack hook solution-acceptance-writeguard` — PreToolUse
|
|
2
|
-
// anti-forgery write-guard for the `solution-acceptance` policy pack.
|
|
3
|
-
//
|
|
4
|
-
// This is the load-bearing closure of the gate. The completion-gate alone
|
|
5
|
-
// is forgeable: relocating the verdict dir does NOT help because
|
|
6
|
-
// understanding-gate allows all Bash once approved, so an approved agent
|
|
7
|
-
// could `echo '{...ready:true}' > <verdict-dir>/<id>.json` and walk the gate.
|
|
8
|
-
// This hook restores the invariant that the ONLY writer of the verdict dir
|
|
9
|
-
// is the producer (the operator-launched grounding-mcp MCP server, which
|
|
10
|
-
// runs real preflight and does not flow through the agent's gated tools).
|
|
11
|
-
//
|
|
12
|
-
// It denies, on the agent's tool surface:
|
|
13
|
-
// - Write / Edit / MultiEdit / NotebookEdit whose target file resolves
|
|
14
|
-
// inside the verdict dir.
|
|
15
|
-
// - Codex `apply_patch` whose patch body references the verdict dir.
|
|
16
|
-
// - Bash that is NOT provably read-only AND references the verdict dir
|
|
17
|
-
// (covers `echo >`, `$SOLUTION_VERDICT_DIR` spellings, `tee`, `mv`/`cp`/
|
|
18
|
-
// `ln`/`install`, `python3 -c '...path...'`, and `chmod`/`chattr` that
|
|
19
|
-
// would loosen perms) — or whose shell cwd is inside the dir.
|
|
20
|
-
// Merely NAMING one of the pack's own source files (its doc, hook,
|
|
21
|
-
// runtime module or tests) is not a reference: `bashReferencesVerdictDir`
|
|
22
|
-
// scrubs the pack name out of plain words before its glob/brace
|
|
23
|
-
// leaf-word scan (task e8c9edaf; skipped when the command carries
|
|
24
|
-
// runtime-construction syntax), so editing those files from the shell
|
|
25
|
-
// is allowed while a command that also reaches the dir stays blocked.
|
|
26
|
-
// - Bash `cd` whose RESOLVED target is inside the verdict dir. `cd` itself
|
|
27
|
-
// is provably read-only (task fb67b402 added it to the shared
|
|
28
|
-
// read-only-bash floor: it mutates only the invoking shell's own cwd,
|
|
29
|
-
// never the filesystem), so it no longer reaches the "not read-only"
|
|
30
|
-
// checks below. But stepping into the dir is the setup half of a
|
|
31
|
-
// two-call forge (`cd <dir>` then, in a LATER un-chained Bash call,
|
|
32
|
-
// a bare relative write): this pre-check keeps that first step blocked
|
|
33
|
-
// as defense-in-depth, ahead of (not instead of) the cwd-inside check
|
|
34
|
-
// below, which is what actually closes the later relative-write call
|
|
35
|
-
// once cwd has genuinely moved. A `cd` target that `path.resolve`
|
|
36
|
-
// cannot literally evaluate does NOT get `cd`'s read-only fast path
|
|
37
|
-
// either: it falls through to the same reference-based checks as any
|
|
38
|
-
// other non-read-only Bash. `CD_TARGET_UNRESOLVABLE_CHARS` documents
|
|
39
|
-
// exactly WHICH expansions this enumerates (quoting, `$`/env-var,
|
|
40
|
-
// `~`, glob, and `{...}` brace expansion) — that list is what this
|
|
41
|
-
// check catches, not a claim that every shell-expansion class is
|
|
42
|
-
// closed. Known-open residual, pre-existing (not introduced by this
|
|
43
|
-
// branch, since it applies to `bashReferencesVerdictDir`'s textual
|
|
44
|
-
// match on ANY Bash command, not just `cd`): a backslash-escaped
|
|
45
|
-
// spelling of the leaf, e.g. `cd <parent>/solution\-verdicts`, still
|
|
46
|
-
// navigates into the dir under bash (verified against bash 3.2.57)
|
|
47
|
-
// while `bashReferencesVerdictDir` returns false — the backslash
|
|
48
|
-
// breaks the literal-leaf substring match and no metacharacter here
|
|
49
|
-
// triggers the glob/brace fallback either. Closing it needs
|
|
50
|
-
// shell-unescaping in the textual check itself, which is more than
|
|
51
|
-
// this task absorbs; do not assume the class is closed.
|
|
52
|
-
// A SECOND residual of the same class, and on a macOS operator
|
|
53
|
-
// machine the more reachable of the two: case variance.
|
|
54
|
-
// `cd <parent>/SOLUTION-VERDICTS` navigates into the dir on a
|
|
55
|
-
// case-insensitive APFS volume, but `isInsideDir` compares with a
|
|
56
|
-
// case-sensitive `path.relative` and the textual check uses a
|
|
57
|
-
// case-sensitive `includes`, so both return false. Also allowed:
|
|
58
|
-
// a trailing backslash, `cd <DIR>\`. Both pre-existing; closing
|
|
59
|
-
// them needs case-folding in the textual check.
|
|
60
|
-
//
|
|
61
|
-
// Pure reads (`cat <dir>/x.json`) are allowed so the guard is not over-broad.
|
|
62
|
-
// So is a single-`|` pipeline of pure reads (`grep -n 'a*b' solution-x.md |
|
|
63
|
-
// head`; task 95a3712d): every stage must itself pass the shared read-only
|
|
64
|
-
// classifier (`isReadOnlyBashPipeline`, reused unchanged), every `|` must be
|
|
65
|
-
// a real stage boundary (none quoted or escaped, see
|
|
66
|
-
// `pipeBoundariesAreRealStageBoundaries`) and no stage may be a `cd`. This
|
|
67
|
-
// deliberately departs from the header of `src/runtime/read-only-bash.ts`,
|
|
68
|
-
// which says this guard should treat no chaining as read-only: that held while
|
|
69
|
-
// the pipeline arm did not exist, and it still holds for `;`, `&&`, `||`,
|
|
70
|
-
// `&`, `|&`, redirects, substitution and subshells, which stay on the old
|
|
71
|
-
// route. The glob/brace leaf-word heuristic in `bashReferencesVerdictDir` is
|
|
72
|
-
// unchanged: a non-read-only command still trips it.
|
|
73
|
-
//
|
|
74
|
-
// No manifest is consulted: the decision is a pure target-vs-dir check, so
|
|
75
|
-
// the guard cannot be broken by a manifest issue and never blocks a write
|
|
76
|
-
// that does not target the verdict dir. The hook is only wired into settings
|
|
77
|
-
// when the pack is enabled, so a disabled pack never invokes it. It yields to
|
|
78
|
-
// `harness pause` like every other gate.
|
|
79
|
-
//
|
|
80
|
-
// Honest residual (operator decision, 2026-05-30): v1 closes the ENUMERATED
|
|
81
|
-
// write paths above. A path constructed at runtime inside an interpreter
|
|
82
|
-
// with no textual reference is NOT caught; marker signing (a cross-repo
|
|
83
|
-
// follow-up) closes content-authenticity against an unguarded write
|
|
84
|
-
// primitive. The `cd`-target check added later (task fb67b402) has its own
|
|
85
|
-
// enumerated, not exhaustive, expansion list — see the bullet above and
|
|
86
|
-
// `CD_TARGET_UNRESOLVABLE_CHARS`'s docstring for the backslash-escaping
|
|
87
|
-
// residual specifically.
|
|
88
|
-
import { bashReferencesVerdictDir, isInsideDir, PACK_NAME, verdictDir as resolveVerdictDir, } from "../../policy-packs/builtin/solution-acceptance-runtime.js";
|
|
89
|
-
import { isReadOnlyBashCommand, isReadOnlyBashPipeline } from "../../runtime/read-only-bash.js";
|
|
90
|
-
import { decodeShellWord } from "../../runtime/shell-word.js";
|
|
91
|
-
import { checkHookPause, readStdin, runGateWithStdinRefusal, stdoutBlockRefusal, } from "./hook-bootstrap.js";
|
|
92
|
-
/** Single-file target for path-mutating tools, or null when not applicable. */
|
|
93
|
-
function pathToolTarget(toolName, toolInput) {
|
|
94
|
-
if (typeof toolInput !== "object" || toolInput === null)
|
|
95
|
-
return null;
|
|
96
|
-
const input = toolInput;
|
|
97
|
-
switch (toolName) {
|
|
98
|
-
case "Write":
|
|
99
|
-
case "Edit":
|
|
100
|
-
case "MultiEdit": {
|
|
101
|
-
const fp = input["file_path"];
|
|
102
|
-
return typeof fp === "string" && fp.length > 0 ? fp : null;
|
|
103
|
-
}
|
|
104
|
-
case "NotebookEdit": {
|
|
105
|
-
const np = input["notebook_path"];
|
|
106
|
-
return typeof np === "string" && np.length > 0 ? np : null;
|
|
107
|
-
}
|
|
108
|
-
default:
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function bashCommandOf(toolInput) {
|
|
113
|
-
if (typeof toolInput !== "object" || toolInput === null)
|
|
114
|
-
return "";
|
|
115
|
-
const cmd = toolInput["command"];
|
|
116
|
-
return typeof cmd === "string" ? cmd : "";
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Extract `cd`'s destination argument from a Bash command string, or null
|
|
120
|
-
* when the command is not a `cd` invocation or has no statically resolvable
|
|
121
|
-
* destination. Whitespace-tokenized, same as `read-only-bash.ts`'s own
|
|
122
|
-
* classifier (this hook does not shell-parse either).
|
|
123
|
-
*
|
|
124
|
-
* Deliberately narrow:
|
|
125
|
-
* - Only fires when the FIRST token is exactly `cd`. `env cd x` or a
|
|
126
|
-
* chained `foo && cd x` do not match here (tokens[0] would be `env` /
|
|
127
|
-
* `foo`); those are unaffected by this pre-check and are still governed
|
|
128
|
-
* by the existing not-read-only + `bashReferencesVerdictDir` checks
|
|
129
|
-
* below, which already close the `cd <parent> && write <relative>`
|
|
130
|
-
* descent via the leaf-segment match.
|
|
131
|
-
* - `cd`'s own flags (`-L`, `-P`, `-e`, `-@`, and combinations) are
|
|
132
|
-
* skipped to find the first positional path argument.
|
|
133
|
-
* - `cd -` (switch to `$OLDPWD`) and a bare `cd` (goes to `$HOME`) have no
|
|
134
|
-
* destination this function can resolve without ambient shell state;
|
|
135
|
-
* both return null (not flagged), the same conservative stance as the
|
|
136
|
-
* rest of this module's enumerated-path checks.
|
|
137
|
-
* - A single layer of surrounding quotes (`"..."` or `'...'`) is stripped
|
|
138
|
-
* from the returned token before the caller does anything with it, so
|
|
139
|
-
* `cd "<path>"` and `cd <path>` are treated identically (both the
|
|
140
|
-
* resolved-path inside-dir check AND the unresolvable-chars check see
|
|
141
|
-
* the same unquoted value). Without this, a quoted literal that merely
|
|
142
|
-
* shares a text prefix with the verdict dir (`cd "<dir>-decoy"`) would
|
|
143
|
-
* route to the textual leaf match and be wrongly blocked, while the
|
|
144
|
-
* unquoted `cd <dir>-decoy` correctly passes via the resolved-path
|
|
145
|
-
* check — spelling-dependent behavior for what is the same destination.
|
|
146
|
-
*/
|
|
147
|
-
function cdTargetArgument(command) {
|
|
148
|
-
const tokens = command.trim().split(/\s+/);
|
|
149
|
-
if (tokens[0] !== "cd")
|
|
150
|
-
return null;
|
|
151
|
-
for (let i = 1; i < tokens.length; i += 1) {
|
|
152
|
-
const t = tokens[i];
|
|
153
|
-
if (t === undefined)
|
|
154
|
-
break;
|
|
155
|
-
if (t === "-")
|
|
156
|
-
return null;
|
|
157
|
-
if (t.startsWith("-"))
|
|
158
|
-
continue;
|
|
159
|
-
return stripSurroundingQuotes(t);
|
|
160
|
-
}
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Strip one layer of surrounding double or single quotes from `token`, or
|
|
165
|
-
* return it unchanged if it is not fully wrapped in a matching pair. Does
|
|
166
|
-
* NOT attempt any other shell-quoting semantics (no backslash-escape
|
|
167
|
-
* handling, no nested-quote handling) — this is a narrow normalization so a
|
|
168
|
-
* simple quoted literal reads the same as its unquoted form, not a shell
|
|
169
|
-
* parser.
|
|
170
|
-
*/
|
|
171
|
-
function stripSurroundingQuotes(token) {
|
|
172
|
-
if (token.length >= 2 &&
|
|
173
|
-
((token.startsWith('"') && token.endsWith('"')) ||
|
|
174
|
-
(token.startsWith("'") && token.endsWith("'")))) {
|
|
175
|
-
return token.slice(1, -1);
|
|
176
|
-
}
|
|
177
|
-
return token;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Characters/sequences that make a `cd` destination token something
|
|
181
|
-
* `path.resolve` cannot literally evaluate: quoting (`"`, `'` — the residual
|
|
182
|
-
* case after `stripSurroundingQuotes` has already removed a clean single
|
|
183
|
-
* layer, e.g. an unbalanced or embedded quote), env-var expansion (`$`),
|
|
184
|
-
* home-directory expansion (`~`), shell globbing (`*`, `?`, `[`), and brace
|
|
185
|
-
* expansion (`{`, `}`, `,`). `path.resolve` treats the raw token as a
|
|
186
|
-
* literal path segment, so `cd "$SOLUTION_VERDICT_DIR"`, `cd
|
|
187
|
-
* ~/.../solution-verdicts`, or `cd <parent>/{solution-verdicts,x}` all
|
|
188
|
-
* resolve to a nonsense path that is never "inside" the dir even though a
|
|
189
|
-
* real shell would expand each of them TO (or, for the brace form, INTO)
|
|
190
|
-
* the dir. A `cd` target containing any of these must therefore NOT take
|
|
191
|
-
* the read-only fast path in `evaluateWriteGuard`: control must fall
|
|
192
|
-
* through to the same `bashReferencesVerdictDir` text-reference check any
|
|
193
|
-
* other non-read-only Bash command goes through, which DOES recognize
|
|
194
|
-
* these spellings (the env-var token, the `agent-grounding/solution-verdicts`
|
|
195
|
-
* tail, and — after the matching widening in
|
|
196
|
-
* `solution-acceptance-runtime.ts`'s glob-metacharacter test — glob- and
|
|
197
|
-
* brace-obscured leaf words).
|
|
198
|
-
*
|
|
199
|
-
* This list is enumerated, not exhaustive: it is exactly the expansion
|
|
200
|
-
* classes this check has been reasoned about, not a claim that every way a
|
|
201
|
-
* shell can rewrite a `cd` argument is covered. A known-open residual
|
|
202
|
-
* (pre-existing, not introduced by this check) is backslash escaping — see
|
|
203
|
-
* the module header's "Known-open residual" note.
|
|
204
|
-
*/
|
|
205
|
-
const CD_TARGET_UNRESOLVABLE_CHARS = /[$~*?[{},"']/;
|
|
206
|
-
/**
|
|
207
|
-
* True when every `|` in `command` is a real stage boundary: outside any
|
|
208
|
-
* quote, not backslash-escaped, and not inside an expansion or group the
|
|
209
|
-
* shell reads as one word. `isReadOnlyBashPipeline` cuts the text at EVERY
|
|
210
|
-
* `|` character without modelling the shell's grammar, so a `|` that is not
|
|
211
|
-
* a stage boundary turns one command into fragments that are each classified
|
|
212
|
-
* on their own: `find <dir> -name 'a|cat -x' -delete` splits into
|
|
213
|
-
* `find <dir> -name 'a` and `cat -x' -delete`, both of which look read-only,
|
|
214
|
-
* while the real command deletes. The same cut happens for
|
|
215
|
-
* `${x//a|cat -x}`, `$[1|cat -x]` and an extglob `@(a|cat -x)`. This scan
|
|
216
|
-
* refuses everything it cannot vouch for: a `|` inside quotes or escaped, an
|
|
217
|
-
* unterminated quote, an unquoted `(` or `)` (extglob, subshell, arithmetic
|
|
218
|
-
* command), and a `$` that is not followed by a plain variable-name
|
|
219
|
-
* character (`${`, `$(`, `$[`, `$'`, `$"`, a lone `$`), outside quotes and
|
|
220
|
-
* inside double quotes. A refused command keeps the old route through the
|
|
221
|
-
* verdict-dir reference check. Deliberately a refuse-only filter in front of
|
|
222
|
-
* the shared classifier, not a second pipeline definition; the cost is that
|
|
223
|
-
* a read using `${VAR}` or a parenthesised group is not fast-pathed.
|
|
224
|
-
*/
|
|
225
|
-
function pipeBoundariesAreRealStageBoundaries(command) {
|
|
226
|
-
const isNameChar = (ch) => /^[A-Za-z0-9_]$/.test(ch);
|
|
227
|
-
let quote = null;
|
|
228
|
-
for (let i = 0; i < command.length; i += 1) {
|
|
229
|
-
const c = command.charAt(i);
|
|
230
|
-
if (quote === "'") {
|
|
231
|
-
if (c === "|")
|
|
232
|
-
return false;
|
|
233
|
-
if (c === "'")
|
|
234
|
-
quote = null;
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
if (c === "$" && !isNameChar(command.charAt(i + 1)))
|
|
238
|
-
return false;
|
|
239
|
-
if (quote === '"') {
|
|
240
|
-
if (c === "|")
|
|
241
|
-
return false;
|
|
242
|
-
if (c === "\\")
|
|
243
|
-
i += 1;
|
|
244
|
-
else if (c === '"')
|
|
245
|
-
quote = null;
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
if (c === "\\") {
|
|
249
|
-
if (command.charAt(i + 1) === "|")
|
|
250
|
-
return false;
|
|
251
|
-
i += 1;
|
|
252
|
-
}
|
|
253
|
-
else if (c === "'" || c === '"') {
|
|
254
|
-
quote = c;
|
|
255
|
-
}
|
|
256
|
-
else if (c === "(" || c === ")") {
|
|
257
|
-
return false;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return quote === null;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* True when some stage of the `|` pipeline is (or wraps) a `cd`. A pipeline
|
|
264
|
-
* stage runs in a subshell, so a `cd` there cannot move the calling shell,
|
|
265
|
-
* but the pre-checks above only look at a LEADING `cd`; a `cd` stage later in
|
|
266
|
-
* the pipeline must not ride the read-only fast path either, so it falls
|
|
267
|
-
* through to the verdict-dir reference check exactly as it did before. The
|
|
268
|
-
* `command` and `env` runners are included because the shared classifier
|
|
269
|
-
* recurses through them to the wrapped command. First tokens are compared
|
|
270
|
-
* raw and decoded (`'cd'`), same raw-or-decoded shape as the classifier.
|
|
271
|
-
*/
|
|
272
|
-
function pipelineHasCdStage(command) {
|
|
273
|
-
return command.split("|").some((stage) => {
|
|
274
|
-
const first = stage.trim().split(/\s+/)[0] ?? "";
|
|
275
|
-
return [first, decodeShellWord(first)].some((t) => t === "cd" || t === "command" || t === "env");
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* The read-only fast path for a `|` pipeline: every stage is provably
|
|
280
|
-
* read-only per the shared classifier, every `|` is a real stage boundary,
|
|
281
|
-
* and no stage is a `cd`. A command without a `|` is classified exactly as
|
|
282
|
-
* the strict single-command check already did, so it adds nothing here.
|
|
283
|
-
*/
|
|
284
|
-
function isReadOnlyPipelineForWriteGuard(command) {
|
|
285
|
-
return (pipeBoundariesAreRealStageBoundaries(command) &&
|
|
286
|
-
!pipelineHasCdStage(command) &&
|
|
287
|
-
isReadOnlyBashPipeline(command));
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Pure write-guard decision for a tool event. Exported for direct unit
|
|
291
|
-
* testing of the full forge-attempt matrix without spinning up the CLI.
|
|
292
|
-
*/
|
|
293
|
-
export function evaluateWriteGuard(toolName, toolInput, dir, cwd) {
|
|
294
|
-
// Path-mutating tools: block iff the target resolves inside the dir.
|
|
295
|
-
const target = pathToolTarget(toolName, toolInput);
|
|
296
|
-
if (target !== null) {
|
|
297
|
-
if (isInsideDir(target, dir, cwd)) {
|
|
298
|
-
return {
|
|
299
|
-
blocked: true,
|
|
300
|
-
reason: `${toolName} target resolves inside the harness-protected solution-verdict dir (${dir}); the verdict marker may only be written by the grounding-mcp producer`,
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
return { blocked: false, reason: `${toolName} target is outside the verdict dir` };
|
|
304
|
-
}
|
|
305
|
-
// Codex apply_patch: best-effort textual reference check on the patch body.
|
|
306
|
-
if (toolName === "apply_patch") {
|
|
307
|
-
const input = typeof toolInput === "object" && toolInput !== null
|
|
308
|
-
? toolInput
|
|
309
|
-
: {};
|
|
310
|
-
const body = typeof input["patch"] === "string"
|
|
311
|
-
? input["patch"]
|
|
312
|
-
: typeof input["input"] === "string"
|
|
313
|
-
? input["input"]
|
|
314
|
-
: JSON.stringify(toolInput ?? "");
|
|
315
|
-
if (bashReferencesVerdictDir(body, dir)) {
|
|
316
|
-
return {
|
|
317
|
-
blocked: true,
|
|
318
|
-
reason: `apply_patch references the harness-protected solution-verdict dir (${dir})`,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
return { blocked: false, reason: "apply_patch does not reference the verdict dir" };
|
|
322
|
-
}
|
|
323
|
-
// Bash: allow provable reads; block non-read-only commands that reference
|
|
324
|
-
// the dir, or whose shell cwd is inside it.
|
|
325
|
-
if (toolName === "Bash") {
|
|
326
|
-
const command = bashCommandOf(toolInput);
|
|
327
|
-
if (command === "")
|
|
328
|
-
return { blocked: false, reason: "empty Bash command" };
|
|
329
|
-
// Defense-in-depth, ahead of the read-only fast path below: `cd` itself
|
|
330
|
-
// cannot write, but `cd`ing into the verdict dir is the setup half of a
|
|
331
|
-
// two-call forge (see the module header). Only a RESOLVED-path check
|
|
332
|
-
// (via the shared `isInsideDir`, not a substring match) so a sibling
|
|
333
|
-
// that merely shares a text prefix with the dir (`solution-verdicts-decoy`,
|
|
334
|
-
// or a parent directory of it) is not wrongly flagged.
|
|
335
|
-
const cdTarget = cdTargetArgument(command);
|
|
336
|
-
if (cdTarget !== null && isInsideDir(cdTarget, dir, cwd)) {
|
|
337
|
-
return {
|
|
338
|
-
blocked: true,
|
|
339
|
-
reason: `cd targets the harness-protected solution-verdict dir (${dir}); stepping into it would set up a later un-chained relative write to forge the verdict marker`,
|
|
340
|
-
};
|
|
341
|
-
}
|
|
342
|
-
// A `cd` target containing one of the enumerated unresolvable
|
|
343
|
-
// expansions (see `CD_TARGET_UNRESOLVABLE_CHARS`'s docstring for the
|
|
344
|
-
// exact list and its non-exhaustive scope) must not take `cd`'s
|
|
345
|
-
// read-only fast path below: without this, `cd "$SOLUTION_VERDICT_DIR"`
|
|
346
|
-
// etc. would be waved through by `isReadOnlyBashCommand` (true for ANY
|
|
347
|
-
// `cd`, per the shared read-only-bash floor) before ever reaching the
|
|
348
|
-
// reference check that recognizes these exact spellings.
|
|
349
|
-
const cdTargetUnresolvable = cdTarget !== null && CD_TARGET_UNRESOLVABLE_CHARS.test(cdTarget);
|
|
350
|
-
if (!cdTargetUnresolvable && isReadOnlyBashCommand(command)) {
|
|
351
|
-
return { blocked: false, reason: "read-only Bash command" };
|
|
352
|
-
}
|
|
353
|
-
// A `|` pipeline whose every stage is read-only (task 95a3712d). Same
|
|
354
|
-
// preconditions as the arm above: the cd checks have already run, and an
|
|
355
|
-
// unresolvable `cd` target never takes a read-only fast path.
|
|
356
|
-
if (!cdTargetUnresolvable && isReadOnlyPipelineForWriteGuard(command)) {
|
|
357
|
-
return { blocked: false, reason: "read-only Bash pipeline" };
|
|
358
|
-
}
|
|
359
|
-
if (isInsideDir(".", dir, cwd)) {
|
|
360
|
-
return {
|
|
361
|
-
blocked: true,
|
|
362
|
-
reason: `non-read-only Bash with a shell cwd inside the harness-protected solution-verdict dir (${dir})`,
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
if (bashReferencesVerdictDir(command, dir)) {
|
|
366
|
-
return {
|
|
367
|
-
blocked: true,
|
|
368
|
-
reason: `non-read-only Bash references the harness-protected solution-verdict dir (${dir}); the verdict marker may only be written by the grounding-mcp producer`,
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
return { blocked: false, reason: "non-read-only Bash does not reference the verdict dir" };
|
|
372
|
-
}
|
|
373
|
-
return { blocked: false, reason: `${toolName} is not a guarded write surface` };
|
|
374
|
-
}
|
|
375
|
-
function blockJson(toolName, reason) {
|
|
376
|
-
const text = `solution-acceptance write-guard: refusing ${toolName}. ${reason}.\n` +
|
|
377
|
-
`The solution-acceptance verdict marker is derived by the producer from a ` +
|
|
378
|
-
`real preflight run; hand-writing it would forge a green "done". ` +
|
|
379
|
-
`Run \`mcp__grounding-mcp__solution_evaluate({ id: "<task-id>" })\` instead, ` +
|
|
380
|
-
`which writes the marker for you.\n` +
|
|
381
|
-
`Operator override: \`harness pause\`.`;
|
|
382
|
-
return JSON.stringify({
|
|
383
|
-
decision: "block",
|
|
384
|
-
reason: text,
|
|
385
|
-
hookSpecificOutput: {
|
|
386
|
-
hookEventName: "PreToolUse",
|
|
387
|
-
permissionDecision: "deny",
|
|
388
|
-
permissionDecisionReason: text,
|
|
389
|
-
},
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
async function runPackHookSolutionAcceptanceWriteguardCliInner(opts = {}) {
|
|
393
|
-
const stdin = opts.stdin ?? process.stdin;
|
|
394
|
-
const stdout = opts.stdout ?? process.stdout;
|
|
395
|
-
const stderr = opts.stderr ?? process.stderr;
|
|
396
|
-
const note = (msg) => {
|
|
397
|
-
stderr.write(`harness pack hook solution-acceptance-writeguard: ${msg}\n`);
|
|
398
|
-
};
|
|
399
|
-
const raw = await readStdin(stdin);
|
|
400
|
-
let event = {};
|
|
401
|
-
try {
|
|
402
|
-
event = JSON.parse(raw.trim() || "{}");
|
|
403
|
-
}
|
|
404
|
-
catch {
|
|
405
|
-
/* event stays {} -> not a guarded surface -> allow */
|
|
406
|
-
}
|
|
407
|
-
if (checkHookPause(`${PACK_NAME}-writeguard`, stderr, opts).paused) {
|
|
408
|
-
const diagnostic = "harness paused; write-guard allowing without evaluating.";
|
|
409
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
410
|
-
}
|
|
411
|
-
const toolName = typeof event.tool_name === "string" ? event.tool_name : "(unknown)";
|
|
412
|
-
const cwd = typeof opts.cwd === "string" && opts.cwd.length > 0
|
|
413
|
-
? opts.cwd
|
|
414
|
-
: typeof event.cwd === "string" && event.cwd.length > 0
|
|
415
|
-
? event.cwd
|
|
416
|
-
: process.cwd();
|
|
417
|
-
const dir = opts.verdictDir ?? resolveVerdictDir();
|
|
418
|
-
const decision = evaluateWriteGuard(toolName, event.tool_input, dir, cwd);
|
|
419
|
-
if (!decision.blocked) {
|
|
420
|
-
const diagnostic = `allow — ${decision.reason}`;
|
|
421
|
-
note(diagnostic);
|
|
422
|
-
return { exitCode: 0, blocked: false, diagnostic };
|
|
423
|
-
}
|
|
424
|
-
const diagnostic = `BLOCK — ${decision.reason}`;
|
|
425
|
-
note(diagnostic);
|
|
426
|
-
stdout.write(`${blockJson(toolName, decision.reason)}\n`);
|
|
427
|
-
return { exitCode: 0, blocked: true, diagnostic };
|
|
428
|
-
}
|
|
429
|
-
/**
|
|
430
|
-
* `harness pack hook solution-acceptance-writeguard`. A stdin read that times out is refused here
|
|
431
|
-
* instead of being handed to the gate as an empty or truncated event it would
|
|
432
|
-
* treat as malformed input (task 7dfdcaaf). The operator pause still wins;
|
|
433
|
-
* every other input runs the gate unchanged.
|
|
434
|
-
*/
|
|
435
|
-
export function runPackHookSolutionAcceptanceWriteguardCli(opts = {}) {
|
|
436
|
-
return runGateWithStdinRefusal(opts, (stderr) => checkHookPause(`${PACK_NAME}-writeguard`, stderr, opts).paused, stdoutBlockRefusal("solution-acceptance-writeguard"), runPackHookSolutionAcceptanceWriteguardCliInner);
|
|
437
|
-
}
|
|
438
|
-
//# sourceMappingURL=hook-solution-acceptance-writeguard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-solution-acceptance-writeguard.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-solution-acceptance-writeguard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { type VerdictReadOutcome } from "../../policy-packs/builtin/solution-acceptance-runtime.js";
|
|
2
|
-
import { type LockCheckResult } from "../../io/lock.js";
|
|
3
|
-
import { type Manifest } from "../../schema/index.js";
|
|
4
|
-
import { type LoaderOptions } from "../loader.js";
|
|
5
|
-
export interface PackHookSolutionAcceptanceOptions extends LoaderOptions {
|
|
6
|
-
/** Defaults to process.stdin. */
|
|
7
|
-
stdin?: NodeJS.ReadableStream;
|
|
8
|
-
/** Defaults to process.stdout. */
|
|
9
|
-
stdout?: NodeJS.WritableStream;
|
|
10
|
-
/** Defaults to process.stderr. */
|
|
11
|
-
stderr?: NodeJS.WritableStream;
|
|
12
|
-
/** Override cwd resolution (test injection). */
|
|
13
|
-
cwd?: string;
|
|
14
|
-
/** Inject a manifest (test). */
|
|
15
|
-
manifest?: Manifest;
|
|
16
|
-
/** Override the harness.generated/ directory (test injection). */
|
|
17
|
-
generatedDir?: string;
|
|
18
|
-
/** Override the verdict directory (test injection; default = producer default). */
|
|
19
|
-
verdictDir?: string;
|
|
20
|
-
/** Override the active-claim resolution (test injection). */
|
|
21
|
-
activeClaim?: string | null;
|
|
22
|
-
/** Override process.env (test injection); defaults to process.env. */
|
|
23
|
-
env?: NodeJS.ProcessEnv;
|
|
24
|
-
}
|
|
25
|
-
export interface PackHookSolutionAcceptanceResult {
|
|
26
|
-
exitCode: number;
|
|
27
|
-
blocked: boolean;
|
|
28
|
-
diagnostic: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Staleness window this hook applies when READING the attempt-lock anchor:
|
|
32
|
-
* the producer's own DOCUMENTED default, `DEFAULT_ATTEMPT_LOCK_STALE_MS`
|
|
33
|
-
* (grounding-mcp-v0.12.0 packages/grounding-mcp/src/solution-attempt-log.ts:102,
|
|
34
|
-
* `= 30_000`), the `staleMs` `acquireAttemptLock` passes straight through
|
|
35
|
-
* to `lockfile.lock(anchor, { retries: 0, realpath: false, stale:
|
|
36
|
-
* options.staleMs, ... })` (same file, lines 472-475) on every DEFAULT
|
|
37
|
-
* acquisition, pinned here as a literal rather than imported (this package
|
|
38
|
-
* has no dependency on grounding-mcp's internals). This hook applies the
|
|
39
|
-
* producer's documented default window pinned to grounding-mcp-v0.12.0; it
|
|
40
|
-
* diverges from what the producer actually enforces for a given attempt
|
|
41
|
-
* if the producer's own default changes in a later release, or if a
|
|
42
|
-
* caller of `acquireAttemptLock` overrides `staleMs` away from that
|
|
43
|
-
* default (the producer's own option is caller-settable, same file),
|
|
44
|
-
* since neither is observable from this side of the lock: an operational
|
|
45
|
-
* pin, not a mathematical guarantee, that needs re-checking on every
|
|
46
|
-
* grounding-mcp bump this pack's producer floor moves past.
|
|
47
|
-
*/
|
|
48
|
-
export declare const ATTEMPT_LOCK_STALE_MS = 30000;
|
|
49
|
-
export type NullVerdictReading = "live-attempt" | "never-evaluated" | "unreadable-marker";
|
|
50
|
-
/**
|
|
51
|
-
* WHY a present marker path yielded no verdict, carried straight from the
|
|
52
|
-
* ONE `readVerdictDetailed` observation the gate decided on, never
|
|
53
|
-
* re-derived from a second look at the path. Exactly the non-`ok`,
|
|
54
|
-
* non-`missing`, non-`invalid-id` kinds of `VerdictReadOutcome`, so the
|
|
55
|
-
* agent-facing line for reading (3) names what that read established
|
|
56
|
-
* rather than restating a disjunction by hand.
|
|
57
|
-
*/
|
|
58
|
-
export type RejectedMarkerKind = Exclude<VerdictReadOutcome["kind"], "ok" | "missing" | "invalid-id">;
|
|
59
|
-
/**
|
|
60
|
-
* Every state the null-verdict note renders a line for, as data. The note
|
|
61
|
-
* is a total function over this list (`coordinateOf` below maps each
|
|
62
|
-
* `NullVerdictInfo` onto exactly one coordinate, and the compiler rejects a
|
|
63
|
-
* member without a line), and
|
|
64
|
-
* `tests/cli/pack-hook-solution-acceptance.test.ts` iterates it to assert
|
|
65
|
-
* the state table has a row per member. A state added to the classifier
|
|
66
|
-
* without a row therefore fails the build or the suite, instead of
|
|
67
|
-
* shipping an unpinned line to an agent.
|
|
68
|
-
*/
|
|
69
|
-
export declare const NULL_VERDICT_NOTE_STATES: readonly ["unusable-id", "never-evaluated", "marker-symlink", "marker-not-regular", "marker-unreadable", "marker-invalid-record", "live-attempt"];
|
|
70
|
-
export type NullVerdictNoteState = (typeof NULL_VERDICT_NOTE_STATES)[number];
|
|
71
|
-
/**
|
|
72
|
-
* The two states whose line carries no liveness clause: the unusable-id
|
|
73
|
-
* line (nothing was read, so no liveness exists to name) and the
|
|
74
|
-
* live-attempt line (its liveness is `"live"` by definition). Every other
|
|
75
|
-
* state's line names what the lock check said, so it exists once per
|
|
76
|
-
* clause.
|
|
77
|
-
*/
|
|
78
|
-
export declare const NULL_VERDICT_CLAUSE_FREE_STATES: readonly ["unusable-id", "live-attempt"];
|
|
79
|
-
type ClauseFreeNoteState = (typeof NULL_VERDICT_CLAUSE_FREE_STATES)[number];
|
|
80
|
-
type ClauseNoteState = Exclude<NullVerdictNoteState, ClauseFreeNoteState>;
|
|
81
|
-
/**
|
|
82
|
-
* Three-valued liveness read, never a boolean: `"live"`, `"not-live"` (no
|
|
83
|
-
* lock directory, or one past the stale window: `proper-lockfile`'s own
|
|
84
|
-
* check answers `false` for both, swallowing the absent-lock `ENOENT`
|
|
85
|
-
* inside the library), or `"unknown"` (the check threw: an unreadable
|
|
86
|
-
* directory, a symlink loop, ...). `"unknown"` must never be
|
|
87
|
-
* treated as `"not-live"` downstream: that would assert an attempt is
|
|
88
|
-
* confirmed absent when liveness simply could not be determined (see
|
|
89
|
-
* `classifyNullVerdictReading` and `nullVerdictReadingNote` below, which
|
|
90
|
-
* keep the two states distinct all the way into the agent-facing text).
|
|
91
|
-
*/
|
|
92
|
-
export type AttemptLockLiveness = LockCheckResult;
|
|
93
|
-
/**
|
|
94
|
-
* The lock-check results a clause-carrying line can render. `"live"` is
|
|
95
|
-
* absent on purpose: a live lock is settled as the live-attempt state
|
|
96
|
-
* before any marker line is chosen, so no marker line is ever rendered for
|
|
97
|
-
* it. Spelled out rather than derived from `AttemptLockLiveness`, so a new
|
|
98
|
-
* lock-check result fails the typecheck at the classifier instead of
|
|
99
|
-
* reaching the renderer's runtime throw inside the deny path.
|
|
100
|
-
*/
|
|
101
|
-
type ClauseLiveness = "not-live" | "unknown";
|
|
102
|
-
/**
|
|
103
|
-
* One reachable (note state, liveness) combination, the coordinate a line
|
|
104
|
-
* is rendered at. Unreachable pairs have no member: `"live"` exists only
|
|
105
|
-
* with the live-attempt state, and the unusable-id state carries no
|
|
106
|
-
* liveness at all (no placeholder value to mistake for an observation).
|
|
107
|
-
*/
|
|
108
|
-
export type NullVerdictNoteCoordinate = {
|
|
109
|
-
state: ClauseFreeNoteState;
|
|
110
|
-
} | {
|
|
111
|
-
state: ClauseNoteState;
|
|
112
|
-
liveness: ClauseLiveness;
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* One line per note state, as a total `Record` keyed by
|
|
116
|
-
* `NULL_VERDICT_NOTE_STATES`: a state added to the list without a line
|
|
117
|
-
* here fails the build, which is what makes the list a checklist rather
|
|
118
|
-
* than a convention.
|
|
119
|
-
*
|
|
120
|
-
* Invariant across every line: it states only what the gate established,
|
|
121
|
-
* and never a cause that was not observed. The liveness clause names what
|
|
122
|
-
* the lock check said ("no attempt reads as currently live" vs "liveness
|
|
123
|
-
* could not be determined") instead of always asserting absence, and the
|
|
124
|
-
* marker lines come from the gate's OWN read of the marker, never from a
|
|
125
|
-
* second look at the path. `tests/cli/pack-hook-solution-acceptance.test.ts`
|
|
126
|
-
* pins one exact expected line per state and asserts every member of the
|
|
127
|
-
* list has a row, so a future state whose line would overstate fails there
|
|
128
|
-
* rather than reaching an agent.
|
|
129
|
-
*/
|
|
130
|
-
export declare const NULL_VERDICT_NOTE_RENDERERS: Record<NullVerdictNoteState, (taskId: string, clause: string) => string>;
|
|
131
|
-
/**
|
|
132
|
-
* Every reachable coordinate, derived from `NULL_VERDICT_NOTE_STATES`: one
|
|
133
|
-
* per clause-free state, one per liveness clause for every other state. The
|
|
134
|
-
* state table in `tests/cli/pack-hook-solution-acceptance.test.ts` requires
|
|
135
|
-
* a row per member and derives its "no other line appears" set from it, so
|
|
136
|
-
* a state added to the list joins both without anyone extending a list.
|
|
137
|
-
*/
|
|
138
|
-
export declare const NULL_VERDICT_NOTE_COORDINATES: readonly NullVerdictNoteCoordinate[];
|
|
139
|
-
/**
|
|
140
|
-
* The exact line a coordinate renders for `taskId`. The one place a state
|
|
141
|
-
* and a liveness become a line: the hook renders through it, and the state
|
|
142
|
-
* table derives its "no other line appears" set and checks each row's
|
|
143
|
-
* declared coordinate against it. Total over reachable coordinates only: a
|
|
144
|
-
* pair the type excludes (`"live"` beside a clause-carrying state, any
|
|
145
|
-
* liveness beside a clause-free one) throws instead of rendering a line
|
|
146
|
-
* that would misstate what was observed, for a caller that bypasses the
|
|
147
|
-
* type.
|
|
148
|
-
*/
|
|
149
|
-
export declare function renderNullVerdictNote(coordinate: NullVerdictNoteCoordinate, taskId: string): string;
|
|
150
|
-
/**
|
|
151
|
-
* `harness pack hook solution-acceptance`. A stdin read that times out is refused here
|
|
152
|
-
* instead of being handed to the gate as an empty or truncated event it would
|
|
153
|
-
* treat as malformed input (task 7dfdcaaf). The operator pause still wins;
|
|
154
|
-
* every other input runs the gate unchanged.
|
|
155
|
-
*/
|
|
156
|
-
export declare function runPackHookSolutionAcceptanceCli(opts?: PackHookSolutionAcceptanceOptions): Promise<PackHookSolutionAcceptanceResult>;
|
|
157
|
-
export {};
|