@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,623 +0,0 @@
|
|
|
1
|
-
import { type ExtractBuiltins, type ExtractEventContext, type LedgerQueryResult } from "../policies/index.js";
|
|
2
|
-
import type { Manifest, Policy } from "../schema/index.js";
|
|
3
|
-
import { type AmpAwareNormalizedCommand, type CommandSegment, type NormalizedCommand, type QuoteAwareNormalizedCommand } from "./command-normalize.js";
|
|
4
|
-
import { type EnvironmentResolution } from "./environment-resolver.js";
|
|
5
|
-
import { type GitRepoContext } from "./git-context.js";
|
|
6
|
-
import { type RiskProfile } from "./risk-classifier.js";
|
|
7
|
-
export interface ToolEvent {
|
|
8
|
-
hook_event_name?: string;
|
|
9
|
-
tool_name?: string;
|
|
10
|
-
tool_input?: unknown;
|
|
11
|
-
session_id?: string;
|
|
12
|
-
cwd?: string;
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
}
|
|
15
|
-
export type PolicyOutcome = "allow" | "warn" | "require_approval" | "deny" | "warn-degraded" | "deny-degraded";
|
|
16
|
-
export interface PolicyDecision {
|
|
17
|
-
policyName: string;
|
|
18
|
-
enforcement: Policy["enforcement"];
|
|
19
|
-
outcome: PolicyOutcome;
|
|
20
|
-
reason: string;
|
|
21
|
-
extractValues: Record<string, string>;
|
|
22
|
-
ledgerTag: string;
|
|
23
|
-
requiresEval?: {
|
|
24
|
-
matchedCount: number;
|
|
25
|
-
reason: string;
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Risk Classifier verdict for the action this decision was made
|
|
29
|
-
* about. Present only when the Risk Gate was active for the event
|
|
30
|
-
* (the manifest declared at least one `when:`-bearing policy); absent
|
|
31
|
-
* for a pure Phase-4 manifest, keeping its decisions byte-identical.
|
|
32
|
-
* Recorded to the audit ledger so `harness explain --trace` can
|
|
33
|
-
* replay the classification.
|
|
34
|
-
*/
|
|
35
|
-
risk?: RiskProfile;
|
|
36
|
-
/** Context Resolver verdict, present under the same condition as `risk`. */
|
|
37
|
-
environment?: EnvironmentResolution;
|
|
38
|
-
/**
|
|
39
|
-
* One-line "to satisfy" hint synthesised from the policy's `requires`
|
|
40
|
-
* spec. Carried on the live decision so the deny-envelope formatter
|
|
41
|
-
* can append it to the user-facing reason text together with the
|
|
42
|
-
* session id. Optional because the warn-degraded path (requires eval
|
|
43
|
-
* threw) skips the requires evaluator and has no hint to forward.
|
|
44
|
-
*/
|
|
45
|
-
recordHint?: string;
|
|
46
|
-
/**
|
|
47
|
-
* True when the policy's `when:` block matched because the action was
|
|
48
|
-
* unclassified (the fail-close rule in `when-eval.ts`: "unknown is not
|
|
49
|
-
* safe" for `risk.category_in` / `action.reversible`, the "treated as
|
|
50
|
-
* high" rung for `risk.severity_at_least`). Absent when the policy has
|
|
51
|
-
* no `when:` block, when the match was a genuine classification hit,
|
|
52
|
-
* or when `unclassifiedFallback` was false. Present in the audit
|
|
53
|
-
* record, the non-ux block-time deny message, AND (task 2929c5b7) the
|
|
54
|
-
* ux-declared `cannot:` deny message, so an operator — or the agent
|
|
55
|
-
* reading its own deny — can distinguish a real critical-severity
|
|
56
|
-
* match from a fail-closed unclassified command at a glance.
|
|
57
|
-
*/
|
|
58
|
-
whenUnclassifiedFallback?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Set when the policy's `ledger_tag` references `${REPO}` / `${BRANCH}`
|
|
61
|
-
* and the value resolved for this context was empty (cwd outside every
|
|
62
|
-
* git repository, detached HEAD, or an empty override), so the engine
|
|
63
|
-
* decided per enforcement WITHOUT rendering or querying a ledger tag.
|
|
64
|
-
* In-memory only: it is not part of the serialised audit row (the
|
|
65
|
-
* `reason` and the placeholder `ledgerTag` already carry the cause).
|
|
66
|
-
* The agent envelope renders `reason` with precedence over the policy's
|
|
67
|
-
* `ux:` / `producers:` text when this is set.
|
|
68
|
-
*/
|
|
69
|
-
emptyIdentifier?: EmptyIdentifier;
|
|
70
|
-
/**
|
|
71
|
-
* Set when this decision was made for a FOREIGN attributed context: the
|
|
72
|
-
* repository a target-naming command (`git -C <dir>`, `cd <dir> &&`)
|
|
73
|
-
* resolved to, as opposed to the working directory's own. Absent for
|
|
74
|
-
* every cwd-context decision. In-memory only (not part of the serialised
|
|
75
|
-
* audit row); the block message uses it to name the repository and
|
|
76
|
-
* directory whose evidence is missing.
|
|
77
|
-
*/
|
|
78
|
-
foreignTarget?: ForeignTarget;
|
|
79
|
-
evaluatedAt: string;
|
|
80
|
-
}
|
|
81
|
-
/** The repository name and directory a foreign attributed context resolved to. */
|
|
82
|
-
export interface ForeignTarget {
|
|
83
|
-
repo: string;
|
|
84
|
-
dir: string;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Claude Code hook "block" output. The top-level `decision: "block"` /
|
|
88
|
-
* `reason` pair is the form every hook event accepts (UserPromptSubmit,
|
|
89
|
-
* PostToolUse, Stop, ...). The `hookSpecificOutput.permissionDecision`
|
|
90
|
-
* envelope is PreToolUse-only per Anthropic's hook protocol, so it is
|
|
91
|
-
* present only when the inbound event is PreToolUse and absent
|
|
92
|
-
* otherwise. Emitting both keys for a PreToolUse event keeps the deny
|
|
93
|
-
* JSON readable by older Claude Code CLIs (which look at top-level
|
|
94
|
-
* `decision`) and current 2.1+ ones (which prefer the envelope).
|
|
95
|
-
*
|
|
96
|
-
* The legacy `decision` value MUST be `"block"`, not `"deny"`: Claude
|
|
97
|
-
* Code never recognised `"deny"` at the top level, so an emitter that
|
|
98
|
-
* shipped that value silently let the tool call through.
|
|
99
|
-
*/
|
|
100
|
-
export interface ClaudeDenyJson {
|
|
101
|
-
decision: "block";
|
|
102
|
-
reason: string;
|
|
103
|
-
hookSpecificOutput?: {
|
|
104
|
-
hookEventName: "PreToolUse";
|
|
105
|
-
permissionDecision: "deny";
|
|
106
|
-
permissionDecisionReason: string;
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
export interface InterceptResult {
|
|
110
|
-
decisions: PolicyDecision[];
|
|
111
|
-
/** non-null iff at least one matching policy with enforcement=block denied. */
|
|
112
|
-
blockJson: ClaudeDenyJson | null;
|
|
113
|
-
}
|
|
114
|
-
export interface LedgerClient {
|
|
115
|
-
query(tag: string, sessionId: string, timeoutMs?: number): Promise<LedgerQueryResult>;
|
|
116
|
-
/**
|
|
117
|
-
* Record a `policy_decision` entry to the evidence ledger. Implementations
|
|
118
|
-
* MUST be best-effort: failures bubble back as `null`/false so a degraded
|
|
119
|
-
* audit log doesn't itself block the tool call.
|
|
120
|
-
*/
|
|
121
|
-
record(decision: PolicyDecision, sessionId: string): Promise<void>;
|
|
122
|
-
/**
|
|
123
|
-
* Release any pooled connection (the real client holds one grounding-mcp
|
|
124
|
-
* subprocess across all queries + records of an intercept invocation).
|
|
125
|
-
* Owned by the CLI wrapper that constructed the client — `intercept()`
|
|
126
|
-
* itself never calls it. Optional so injected test doubles and the
|
|
127
|
-
* degraded no-op client don't have to implement it.
|
|
128
|
-
*/
|
|
129
|
-
dispose?(): void;
|
|
130
|
-
}
|
|
131
|
-
export interface InterceptOptions {
|
|
132
|
-
manifest: Manifest;
|
|
133
|
-
event: ToolEvent;
|
|
134
|
-
ledger: LedgerClient;
|
|
135
|
-
builtins: ExtractBuiltins;
|
|
136
|
-
/** Timeout passed through to the ledger client. */
|
|
137
|
-
ledgerTimeoutMs?: number;
|
|
138
|
-
/** Override "now" for deterministic tests. */
|
|
139
|
-
now?: Date;
|
|
140
|
-
/**
|
|
141
|
-
* Current git HEAD sha for the event's cwd, resolved by the CLI
|
|
142
|
-
* wrapper. Threaded through to `evaluateRequires` so the `at_head`
|
|
143
|
-
* branch can compare against ledger entries' `head:<sha>` token.
|
|
144
|
-
* Optional: omitted on non-git events, in which case the at_head
|
|
145
|
-
* branch falls through to the standard time-window check.
|
|
146
|
-
*/
|
|
147
|
-
currentHeadSha?: string;
|
|
148
|
-
/**
|
|
149
|
-
* Ambient context for the Risk Gate stages — the Action Envelope
|
|
150
|
-
* build (#2) and the environment resolution (#4). Resolved by the CLI
|
|
151
|
-
* wrapper (git / user / host / kube-config / env reads) and threaded
|
|
152
|
-
* in, keeping `intercept()` itself I/O-free, the same
|
|
153
|
-
* resolved-by-the-wrapper pattern as `currentHeadSha` and `builtins`.
|
|
154
|
-
*
|
|
155
|
-
* Optional: omitted by Phase-4-era callers and by unit tests that do
|
|
156
|
-
* not exercise `when:`. When omitted, the envelope is built from the
|
|
157
|
-
* event alone — risk then classifies as unclassified and the
|
|
158
|
-
* environment resolves to `unknown`. A manifest with no `when:`
|
|
159
|
-
* policy never reads any of this regardless (see `intercept`).
|
|
160
|
-
*/
|
|
161
|
-
riskContext?: RiskGateContext;
|
|
162
|
-
/**
|
|
163
|
-
* Precomputed `NormalizedCommand` for a Bash event's
|
|
164
|
-
* `tool_input.command`. `runInterceptCli` already calls
|
|
165
|
-
* `normalizeCommand` once (for `bash_match` trigger normalisation);
|
|
166
|
-
* threading the SAME result in here lets `policyMatchesEvent` reuse it
|
|
167
|
-
* for every policy in the `matching` loop below instead of recomputing
|
|
168
|
-
* it — same resolved-by-the-wrapper pattern as `currentHeadSha`,
|
|
169
|
-
* `builtins`, and `riskContext`. Optional: omitted by non-Bash events
|
|
170
|
-
* and by callers/tests that don't supply one, in which case
|
|
171
|
-
* `policyMatchesEvent` computes it lazily per policy (correct, just
|
|
172
|
-
* not de-duplicated).
|
|
173
|
-
*
|
|
174
|
-
* INVARIANT: this is NOT checked against `event` at runtime — nothing
|
|
175
|
-
* verifies the `NormalizedCommand`
|
|
176
|
-
* passed in was actually derived from THIS event's own
|
|
177
|
-
* `tool_input.command`. Safe today because there is exactly one
|
|
178
|
-
* production caller (`runInterceptCli`, `src/cli/policy/intercept.ts`),
|
|
179
|
-
* which computes it from the SAME `event` it then passes to
|
|
180
|
-
* `intercept()`. A future second caller that threads a mismatched
|
|
181
|
-
* `NormalizedCommand` (e.g. reused across two different events) would
|
|
182
|
-
* silently apply the wrong command's `bash_match` normalisation with
|
|
183
|
-
* no error — keep this pairing manual-but-obvious at every call site
|
|
184
|
-
* rather than assuming it self-enforces.
|
|
185
|
-
*/
|
|
186
|
-
normalizedCommand?: NormalizedCommand;
|
|
187
|
-
/**
|
|
188
|
-
* Memoised thunk resolving the ampersand-aware SECOND normalisation
|
|
189
|
-
* pass for the SAME Bash event's `tool_input.command` (task aabbad63,
|
|
190
|
-
* `src/runtime/command-normalize.ts`'s `normalizeCommandAmpAware`).
|
|
191
|
-
* `policyMatchesEvent`'s third arm calls this ONLY when a policy's
|
|
192
|
-
* regex has already missed BOTH the raw command and `normalizedCommand`
|
|
193
|
-
* above — most events never reach it. Threaded as a THUNK rather than
|
|
194
|
-
* a precomputed value (unlike `normalizedCommand`) specifically so that
|
|
195
|
-
* "compute at most once per event" can be achieved WITHOUT paying the
|
|
196
|
-
* cost on the common (already-matched) path: `runInterceptCli`
|
|
197
|
-
* constructs one self-memoising closure per event and hands it here;
|
|
198
|
-
* every policy in the `matching` loop below that still needs the amp
|
|
199
|
-
* form calls the SAME thunk, and only the FIRST such call does the
|
|
200
|
-
* actual work.
|
|
201
|
-
*
|
|
202
|
-
* Optional: omitted by non-Bash events and by callers/tests that don't
|
|
203
|
-
* supply one, in which case `policyMatchesEvent` falls back to calling
|
|
204
|
-
* `normalizeCommandAmpAware` directly per policy (correct, just not
|
|
205
|
-
* de-duplicated) — the same fallback shape `normalizedCommand` already
|
|
206
|
-
* has.
|
|
207
|
-
*
|
|
208
|
-
* SAME INVARIANT as `normalizedCommand` above: this is NOT checked
|
|
209
|
-
* against `event` at runtime. Nothing verifies the thunk passed in was
|
|
210
|
-
* actually derived from THIS event's own `tool_input.command`. Safe
|
|
211
|
-
* today because there is exactly one production caller
|
|
212
|
-
* (`runInterceptCli`), which builds the thunk from the SAME `event` it
|
|
213
|
-
* then passes to `intercept()` — keep this pairing manual-but-obvious
|
|
214
|
-
* at every call site rather than assuming it self-enforces.
|
|
215
|
-
*/
|
|
216
|
-
ampNormalizedCommandThunk?: () => AmpAwareNormalizedCommand;
|
|
217
|
-
/**
|
|
218
|
-
* Memoised thunk resolving the quote-aware THIRD normalisation pass for
|
|
219
|
-
* the SAME Bash event's `tool_input.command` (task cf3dff51,
|
|
220
|
-
* `src/runtime/command-normalize.ts`'s `normalizeCommandQuoteAware`).
|
|
221
|
-
* `policyMatchesEvent`'s FOURTH arm calls this ONLY when a policy's
|
|
222
|
-
* regex has already missed the raw command, `normalizedCommand`, AND
|
|
223
|
-
* `ampNormalizedCommandThunk` above — mirrors `ampNormalizedCommandThunk`
|
|
224
|
-
* exactly (same memoise-once-per-event-via-thunk shape, same reason:
|
|
225
|
-
* "compute at most once per event" without paying the cost on the
|
|
226
|
-
* common, already-matched path).
|
|
227
|
-
*
|
|
228
|
-
* Optional: omitted by non-Bash events and by callers/tests that don't
|
|
229
|
-
* supply one, in which case `policyMatchesEvent` falls back to calling
|
|
230
|
-
* `normalizeCommandQuoteAware` directly per policy (correct, just not
|
|
231
|
-
* de-duplicated) — the same fallback shape `normalizedCommand` /
|
|
232
|
-
* `ampNormalizedCommandThunk` already have.
|
|
233
|
-
*
|
|
234
|
-
* SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
|
|
235
|
-
* above: this is NOT checked against `event` at runtime. Nothing
|
|
236
|
-
* verifies the thunk passed in was actually derived from THIS event's
|
|
237
|
-
* own `tool_input.command`. Safe today because there is exactly one
|
|
238
|
-
* production caller (`runInterceptCli`), which builds the thunk from
|
|
239
|
-
* the SAME `event` it then passes to `intercept()` — keep this pairing
|
|
240
|
-
* manual-but-obvious at every call site rather than assuming it
|
|
241
|
-
* self-enforces.
|
|
242
|
-
*/
|
|
243
|
-
quoteNormalizedCommandThunk?: () => QuoteAwareNormalizedCommand;
|
|
244
|
-
/**
|
|
245
|
-
* Precomputed per-segment view (`command-normalize.ts`'s
|
|
246
|
-
* `segmentViewOf`) of a Bash event's `tool_input.command`, EAGERLY
|
|
247
|
-
* supplied (task `98ad072f`, T-003). `null` mirrors `segmentViewOf`'s
|
|
248
|
-
* own contract: the command exceeded `MAX_NORMALIZE_LENGTH`, so no
|
|
249
|
-
* segment view exists (treated as `[]` — unattributable, cwd builtins,
|
|
250
|
-
* identical to a command with no `bash_match` trigger at all).
|
|
251
|
-
*
|
|
252
|
-
* CORRECTED (D-015, fix round, run 2026-08-02-per-repo-gate-scoping-
|
|
253
|
-
* redesign): the prior wording here claimed a manifest with no
|
|
254
|
-
* `${REPO}`/`${BRANCH}`/`at_head` policy "never pays this cost even
|
|
255
|
-
* when uninjected" — true only for a caller that omits BOTH this field
|
|
256
|
-
* AND `commandSegmentsThunk` below. The one production caller
|
|
257
|
-
* (`runInterceptCli`) previously injected THIS field eagerly, computed
|
|
258
|
-
* unconditionally for every Bash event regardless of whether any policy
|
|
259
|
-
* needed it — measured a real, avoidable second segmentation walk (see
|
|
260
|
-
* `segmentViewOf`'s own doc comment in `command-normalize.ts` for the
|
|
261
|
-
* +206% number). It now injects `commandSegmentsThunk` instead, which
|
|
262
|
-
* IS deferred until first use. This eager field still exists for a
|
|
263
|
-
* caller that already has a segment view in hand (or a test asserting
|
|
264
|
-
* against a specific one) and wants to skip `intercept()`'s own lazy
|
|
265
|
-
* resolution entirely — it is simply not, by itself, a laziness
|
|
266
|
-
* guarantee. Optional: omitted by non-Bash events and by callers/tests
|
|
267
|
-
* that don't supply one, in which case `resolveCommandSegments` falls
|
|
268
|
-
* through to `commandSegmentsThunk`, then to computing it lazily itself.
|
|
269
|
-
*
|
|
270
|
-
* SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
|
|
271
|
-
* above: not checked against `event` at runtime; the one production
|
|
272
|
-
* caller derives it from the identical event, same as those two.
|
|
273
|
-
*/
|
|
274
|
-
commandSegments?: CommandSegment[] | null;
|
|
275
|
-
/**
|
|
276
|
-
* Memoised thunk resolving the per-segment view (task `98ad072f`,
|
|
277
|
-
* T-003; D-015 fix round) — the SAME resolved-by-the-wrapper,
|
|
278
|
-
* compute-at-most-once-per-event pattern `ampNormalizedCommandThunk`
|
|
279
|
-
* above already uses, applied to `commandSegments` so the segmentation
|
|
280
|
-
* walk it wraps is deferred until some matching policy actually needs
|
|
281
|
-
* it (`usesPerRepoBuiltins` below), not paid on every Bash event
|
|
282
|
-
* regardless. Preferred over the eager `commandSegments` field above
|
|
283
|
-
* when both are supplied. Optional: omitted by non-Bash events and by
|
|
284
|
-
* callers/tests that don't supply one, in which case
|
|
285
|
-
* `resolveCommandSegments` falls back to `commandSegments`, then to
|
|
286
|
-
* computing it lazily itself — same fallback chain shape as
|
|
287
|
-
* `normalizedCommand` / `ampNormalizedCommandThunk`.
|
|
288
|
-
*
|
|
289
|
-
* SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
|
|
290
|
-
* above: not checked against `event` at runtime.
|
|
291
|
-
*/
|
|
292
|
-
commandSegmentsThunk?: () => CommandSegment[] | null;
|
|
293
|
-
/**
|
|
294
|
-
* Whether `options.builtins.REPO` / `.BRANCH` were set by an explicit
|
|
295
|
-
* operator override (`HARNESS_REPO` / `HARNESS_BRANCH` env vars) rather
|
|
296
|
-
* than derived from the cwd's git context (D-015 fix round, run
|
|
297
|
-
* 2026-08-02-per-repo-gate-scoping-redesign). `src/cli/policy/
|
|
298
|
-
* intercept.ts`'s own comment on its `builtins` object says "an
|
|
299
|
-
* explicit env var still wins" — true for the cwd context, but a
|
|
300
|
-
* per-policy ATTRIBUTED context (a foreign target's resolved
|
|
301
|
-
* `${REPO}`/`${BRANCH}`) unconditionally overwrote REPO/BRANCH with the
|
|
302
|
-
* target repo's own identity, discarding the override — measured.
|
|
303
|
-
* When true here, `resolveAttributedContexts` keeps
|
|
304
|
-
* `options.builtins.REPO` (already the override value — see the CLI
|
|
305
|
-
* wrapper) instead of substituting the attributed target's own repo
|
|
306
|
-
* name; independently for BRANCH via `branchOverridden`. `false` /
|
|
307
|
-
* absent — the default for every caller that does not set this,
|
|
308
|
-
* including every existing test — when the corresponding builtin was
|
|
309
|
-
* derived, not overridden.
|
|
310
|
-
*/
|
|
311
|
-
repoOverridden?: boolean;
|
|
312
|
-
/** See `repoOverridden` above; the same override for `${BRANCH}`. */
|
|
313
|
-
branchOverridden?: boolean;
|
|
314
|
-
/**
|
|
315
|
-
* Destination for audit-write failure diagnostics. Defaults to
|
|
316
|
-
* `process.stderr` when omitted. Goes to stderr so Claude Code's
|
|
317
|
-
* stdout deny-JSON contract is unaffected.
|
|
318
|
-
*
|
|
319
|
-
* Injected by callers (tests, CLI wrapper) so the function stays
|
|
320
|
-
* deterministic and testable without capturing process.stderr.
|
|
321
|
-
*/
|
|
322
|
-
stderr?: NodeJS.WritableStream;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Ambient inputs the Risk Gate needs that the CLI wrapper resolves from
|
|
326
|
-
* the host (filesystem + process). Mirrors the `EnvelopeContext` /
|
|
327
|
-
* `SignalInputs` split the debug verbs already use.
|
|
328
|
-
*/
|
|
329
|
-
export interface RiskGateContext {
|
|
330
|
-
/** Git context resolved against the event's cwd. */
|
|
331
|
-
git: GitRepoContext;
|
|
332
|
-
/** Working directory the action runs in. */
|
|
333
|
-
cwd: string;
|
|
334
|
-
/** OS user, or "" when unavailable. */
|
|
335
|
-
user: string;
|
|
336
|
-
/** Host name, or "" when unavailable. */
|
|
337
|
-
host: string;
|
|
338
|
-
/** Environment variables, for resolver `env_var_patterns`. */
|
|
339
|
-
env: Record<string, string | undefined>;
|
|
340
|
-
/** Current kube context name, or "" when unknown. */
|
|
341
|
-
kubeContext: string;
|
|
342
|
-
/** Current kube namespace, or "" when unknown. */
|
|
343
|
-
kubeNamespace: string;
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Does a policy's `trigger:` match this event? This is the WHICH-tool-
|
|
347
|
-
* calls filter; the WHETHER-it-applies filter is `policy.when:`,
|
|
348
|
-
* evaluated separately (`evaluateWhen`). A policy fires only when both
|
|
349
|
-
* hold. Exported so `harness explain-policy` can report the trigger
|
|
350
|
-
* verdict on its own.
|
|
351
|
-
*
|
|
352
|
-
* `precomputedNormalizedCommand` is an optional caller-supplied
|
|
353
|
-
* `NormalizedCommand` for the event's command: `intercept()` below
|
|
354
|
-
* resolves ONE `NormalizedCommand` per event (via
|
|
355
|
-
* `options.normalizedCommand`, itself computed once by
|
|
356
|
-
* `runInterceptCli`) and threads it into every `policyMatchesEvent`
|
|
357
|
-
* call in its `matching` loop, so a raw-miss event normalises the
|
|
358
|
-
* command exactly ONCE across the whole manifest instead of once per
|
|
359
|
-
* policy. Omitted by standalone callers (`harness explain-policy`, most
|
|
360
|
-
* tests), which fall back to computing it lazily right here — correct
|
|
361
|
-
* either way, since `normalizeCommand` is a pure function of the
|
|
362
|
-
* command string alone.
|
|
363
|
-
*
|
|
364
|
-
* `ampNormalizedCommandThunk` (task aabbad63) is the SAME
|
|
365
|
-
* resolved-by-the-wrapper pattern for the ampersand-aware SECOND
|
|
366
|
-
* normalisation pass, but threaded as a memoised THUNK rather than a
|
|
367
|
-
* precomputed value — see `InterceptOptions.ampNormalizedCommandThunk`
|
|
368
|
-
* for why laziness matters here specifically. Omitted callers fall back
|
|
369
|
-
* to calling `normalizeCommandAmpAware` directly, same shape as the
|
|
370
|
-
* `precomputedNormalizedCommand` fallback above.
|
|
371
|
-
*
|
|
372
|
-
* `quoteNormalizedCommandThunk` (task cf3dff51) is the SAME thunk pattern
|
|
373
|
-
* again, for the quote-aware THIRD normalisation pass — see
|
|
374
|
-
* `InterceptOptions.quoteNormalizedCommandThunk`. Omitted callers fall
|
|
375
|
-
* back to calling `normalizeCommandQuoteAware` directly, same shape as
|
|
376
|
-
* the two fallbacks above.
|
|
377
|
-
*/
|
|
378
|
-
export declare function policyMatchesEvent(policy: Policy, event: ToolEvent, precomputedNormalizedCommand?: NormalizedCommand, ampNormalizedCommandThunk?: () => AmpAwareNormalizedCommand, quoteNormalizedCommandThunk?: () => QuoteAwareNormalizedCommand): boolean;
|
|
379
|
-
/**
|
|
380
|
-
* Does a decision abort the tool call? Phase 7 #6 makes the Risk Gate
|
|
381
|
-
* authoritative at the `PreToolUse` boundary:
|
|
382
|
-
* - `deny` aborts (a `block`-enforcement policy whose requires failed,
|
|
383
|
-
* the Phase 4 mechanism, unchanged).
|
|
384
|
-
* - `require_approval` aborts until the approval evidence exists. In
|
|
385
|
-
* Phase 7 #5 this outcome was returned but did not block; #6 makes
|
|
386
|
-
* it block. The approval tag is satisfiable through the policy's
|
|
387
|
-
* `requires:` (an operator runs `harness approve risk`); once the
|
|
388
|
-
* tag is on record the requires evaluation passes and the outcome
|
|
389
|
-
* is `allow` instead.
|
|
390
|
-
* - `deny-degraded` aborts (task f1aea826): it is only ever produced
|
|
391
|
-
* for `block` / `require_approval` policies under the default
|
|
392
|
-
* `preserve_enforcement` posture (see `degradedOutcome`), so its
|
|
393
|
-
* presence alone means "an incident-preventing gate could not read
|
|
394
|
-
* its evidence" — fail closed.
|
|
395
|
-
* - `allow` / `warn` / `warn-degraded` never abort.
|
|
396
|
-
*
|
|
397
|
-
* Exported for the CLI wrapper's pending-approval staging
|
|
398
|
-
* (`src/cli/policy/intercept.ts`), which must agree with the runtime on
|
|
399
|
-
* WHICH decision is the first blocking one — a hand-rolled copy there
|
|
400
|
-
* drifted when `deny-degraded` was added (review 2026-08-08, low
|
|
401
|
-
* finding). Keep this the single definition.
|
|
402
|
-
*/
|
|
403
|
-
export declare function isBlockingDecision(d: PolicyDecision): boolean;
|
|
404
|
-
/**
|
|
405
|
-
* Bound and clean a transport-level reason before it is interpolated
|
|
406
|
-
* into the agent-facing deny-degraded envelope. The string can embed
|
|
407
|
-
* output captured from the grounding-mcp SUBPROCESS (`exitDiagnostic`
|
|
408
|
-
* in `src/policies/ledger-client.ts` appends the child's last stderr
|
|
409
|
-
* line), i.e. untrusted content that previously only reached stderr
|
|
410
|
-
* and the audit ledger, never model-visible text. The full, untouched
|
|
411
|
-
* string still goes to the audit row and the verbose diagnostic; only
|
|
412
|
-
* the envelope interpolation and the default-verbosity operator hint
|
|
413
|
-
* are bounded.
|
|
414
|
-
*
|
|
415
|
-
* Exported for the CLI wrapper's deny-degraded operator hint (review
|
|
416
|
-
* 2026-08-08, round 3; default-verbosity only, suppressed under
|
|
417
|
-
* verbose), which interpolates the same untrusted reason into its
|
|
418
|
-
* one-line stderr surface.
|
|
419
|
-
*/
|
|
420
|
-
export declare function sanitizeEnvelopeReason(reason: string): string;
|
|
421
|
-
/** Which per-repo builtin resolved to an empty value; see {@link emptyIdentifierGuard}. */
|
|
422
|
-
export type EmptyIdentifier = "REPO" | "BRANCH";
|
|
423
|
-
export interface EmptyIdentifierGuard {
|
|
424
|
-
identifier: EmptyIdentifier;
|
|
425
|
-
/** Agent-facing text naming a state the agent can establish itself. */
|
|
426
|
-
message: string;
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Does `ledgerTagTemplate` reference `${REPO}` / `${BRANCH}` while the
|
|
430
|
-
* value resolved for this context is empty? An empty identifier must
|
|
431
|
-
* never be rendered into a ledger tag: `preflight:` is a substring of
|
|
432
|
-
* EVERY preflight fact, so a blank tag lets any unrelated fact satisfy
|
|
433
|
-
* the gate (and `preflight-before-push` would render "You cannot push
|
|
434
|
-
* branch yet."). The caller decides per enforcement with
|
|
435
|
-
* `message` instead of querying the ledger.
|
|
436
|
-
*
|
|
437
|
-
* `REPO` wins over `BRANCH`, and a branch-only template evaluated where
|
|
438
|
-
* REPO is empty too (no repository at all) gets the no-repository text,
|
|
439
|
-
* since "HEAD is detached" would be false there. The messages name a
|
|
440
|
-
* state the agent can establish (`cd` / `git -C` / `git switch`), never
|
|
441
|
-
* a tag to produce, so there is no producer trap, and never an opt-out
|
|
442
|
-
* (a block that names its own disable path is not a gate).
|
|
443
|
-
*
|
|
444
|
-
* Exported so `harness dry-run` shows the same hint instead of a blank
|
|
445
|
-
* tag (`src/cli/dry-run.ts`).
|
|
446
|
-
*/
|
|
447
|
-
export declare function emptyIdentifierGuard(ledgerTagTemplate: string, values: Record<string, string>): EmptyIdentifierGuard | null;
|
|
448
|
-
/**
|
|
449
|
-
* Which of a policy's own trigger-satisfying segments name a target — the
|
|
450
|
-
* attribution sibling of `policyMatchesEvent` (task `98ad072f`, T-003).
|
|
451
|
-
* Re-tests the policy's OWN `bash_match` regex against each segment's
|
|
452
|
-
* `text` in isolation: every shipped `bash_match` alternation includes a
|
|
453
|
-
* `^` branch, so testing it against one segment's canonicalised text
|
|
454
|
-
* alone (no leading boundary character — see `CommandSegment.text`'s own
|
|
455
|
-
* doc comment) is well-defined. Returns every segment that matches on its
|
|
456
|
-
* own — usually one, occasionally several (D-004: a decoy read and a cwd
|
|
457
|
-
* read chained in one command can each independently satisfy the SAME
|
|
458
|
-
* trigger).
|
|
459
|
-
*
|
|
460
|
-
* Never changes WHETHER a policy matches — `policyMatchesEvent` already
|
|
461
|
-
* decided that from the WHOLE command (raw-or-normalised-or-amp-
|
|
462
|
-
* normalised), unchanged by this function. This only narrows down WHICH
|
|
463
|
-
* segment(s), if any, are individually responsible for the match, so
|
|
464
|
-
* `intercept()` below knows which segment's target — if any — to resolve
|
|
465
|
-
* the `${REPO}`/`${BRANCH}`/`currentHeadSha` builtins from instead of the
|
|
466
|
-
* event's own cwd. `[]` when the policy has no `bash_match` trigger (an
|
|
467
|
-
* MCP-tool-name-triggered policy — no segment concept applies), when its
|
|
468
|
-
* regex is malformed (mirrors `policyMatchesEvent`'s own defensive
|
|
469
|
-
* `try/catch`), or when the whole-command match came ONLY from the
|
|
470
|
-
* ampersand-aware third arm: `segments` here is always built from the
|
|
471
|
-
* PRIMARY (`BOUNDARY_RE`) segmentation, which — by construction — cannot
|
|
472
|
-
* itself contain the bare-`&` split the amp arm relies on, so an amp-
|
|
473
|
-
* only match finds no individually-matching segment and this returns
|
|
474
|
-
* `[]` (D-003: cwd builtins, identical to shipped).
|
|
475
|
-
*/
|
|
476
|
-
export declare function attributeTriggerSegments(policy: Policy, segments: readonly CommandSegment[]): CommandSegment[];
|
|
477
|
-
/**
|
|
478
|
-
* Does a policy's `requires:` reference the per-repo `${REPO}`/`${BRANCH}`
|
|
479
|
-
* builtins, or ask for `at_head`? Only these policies pay the per-policy
|
|
480
|
-
* attribution cost below — every other matching policy keeps the plain,
|
|
481
|
-
* per-event cwd builtins `options.builtins` already carries, byte-
|
|
482
|
-
* identical to before this task. D-005: `at_head` is included even when
|
|
483
|
-
* `ledger_tag` itself doesn't reference `${REPO}`/`${BRANCH}`, because
|
|
484
|
-
* `at_head` compares against `currentHeadSha`, which this task resolves
|
|
485
|
-
* from the SAME per-policy context — splitting the two would check
|
|
486
|
-
* `at_head` against the cwd's HEAD while `${REPO}` (if present elsewhere)
|
|
487
|
-
* named a different repo, the worse inconsistency D-005 rejects.
|
|
488
|
-
*/
|
|
489
|
-
export declare function usesPerRepoBuiltins(policy: Policy): boolean;
|
|
490
|
-
/** One `${REPO}`/`${BRANCH}`/`currentHeadSha` context a policy is evaluated against. */
|
|
491
|
-
interface AttributedContext {
|
|
492
|
-
builtins: ExtractBuiltins;
|
|
493
|
-
currentHeadSha: string | undefined;
|
|
494
|
-
/** Set only on a foreign context; the cwd context never carries it. */
|
|
495
|
-
foreignTarget?: ForeignTarget;
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Bound on the number of DISTINCT attributed contexts one policy is
|
|
499
|
-
* evaluated against for one event (D-013, fix round, run
|
|
500
|
-
* 2026-08-02-per-repo-gate-scoping-redesign). Each distinct context costs
|
|
501
|
-
* one ledger query and one audit write in `intercept()`'s evaluation loop
|
|
502
|
-
* below; on a manifest with several per-repo-builtins policies (the
|
|
503
|
-
* shipped `FULL_TEMPLATE` has four), an event naming K distinct targets
|
|
504
|
-
* amplifies to 4K queries/writes, unbounded by `MAX_NORMALIZE_LENGTH` —
|
|
505
|
-
* measured 200/200 at K=200 by reviewer 2, on a hook budget whose timeout
|
|
506
|
-
* is ALLOW (same class as the 07-27 quadratic hot-path fail-open: a slow
|
|
507
|
-
* enough event silently passes). `resolveAttributedContexts` returns a
|
|
508
|
-
* `"bounded"` result instead of a `contexts` array once a policy's DISTINCT
|
|
509
|
-
* targets would exceed this constant; `intercept()` denies that policy
|
|
510
|
-
* directly (naming the ambiguity) without querying the ledger for any of
|
|
511
|
-
* them, rather than silently evaluating all of them.
|
|
512
|
-
*/
|
|
513
|
-
export declare const MAX_ATTRIBUTED_CONTEXTS = 4;
|
|
514
|
-
/** Discriminated result of `resolveAttributedContexts` (D-013). */
|
|
515
|
-
export type AttributedContextsResult = {
|
|
516
|
-
kind: "contexts";
|
|
517
|
-
contexts: AttributedContext[];
|
|
518
|
-
} | {
|
|
519
|
-
kind: "bounded";
|
|
520
|
-
distinctCount: number;
|
|
521
|
-
};
|
|
522
|
-
/**
|
|
523
|
-
* Resolve the distinct `${REPO}`/`${BRANCH}`/`currentHeadSha` contexts a
|
|
524
|
-
* `usesPerRepoBuiltins` policy must be evaluated against (task `98ad072f`,
|
|
525
|
-
* T-003, `01-plan.md` Proposed Approach items 2-4). The engine trusts a
|
|
526
|
-
* trigger-satisfying segment's `effectiveTarget` UNIFORMLY as the
|
|
527
|
-
* directory that segment's own invocation genuinely runs in (bash
|
|
528
|
-
* semantics) — orchestrator decision D-010, 2026-08-02: an earlier
|
|
529
|
-
* revision of this function additionally distrusted an inherited target
|
|
530
|
-
* whenever a DIFFERENT invocation intervened between the `cd` and the
|
|
531
|
-
* satisfying segment — REJECTED: that coupling has no basis in bash's own
|
|
532
|
-
* semantics, is dodgeable by inserting any harmless read between the `cd`
|
|
533
|
-
* and the gated verb, and carried its own unverified `cd`-recognition
|
|
534
|
-
* gap. The `cd <B> && git log && git push` shape this was meant to guard
|
|
535
|
-
* is not a regression at all under this design — `git push` genuinely
|
|
536
|
-
* runs inside B — see `tests/runtime/intercept-cli.test.ts`'s "leading-cd
|
|
537
|
-
* is now a deliverable" block.
|
|
538
|
-
*
|
|
539
|
-
* D-021 (UNIVERSAL-ADDITIVE, operator decision, fix round, run
|
|
540
|
-
* 2026-08-02-per-repo-gate-scoping-redesign): attribution is uniformly
|
|
541
|
-
* ADDITIVE, never REPLACE. Every satisfying segment with an attributable
|
|
542
|
-
* target — `seg.effectiveTarget !== null`, whether it came from the
|
|
543
|
-
* segment's OWN explicit repo-relocating flag (`-C`/`env -C`/`--git-dir`;
|
|
544
|
-
* `--work-tree` is excluded from ever producing a target at all, D-017)
|
|
545
|
-
* or was INHERITED from a preceding `cd` — demands the cwd context AND
|
|
546
|
-
* that target's own context, side by side; `seg.ownTarget` is not
|
|
547
|
-
* consulted for this decision. Any unsatisfied context blocks the whole
|
|
548
|
-
* event (the existing per-context evaluation machinery below is
|
|
549
|
-
* unchanged). `seg.effectiveTarget === null` (fully unattributable —
|
|
550
|
-
* D-003) still adds ONLY the cwd context — there is no foreign target to
|
|
551
|
-
* be additive WITH.
|
|
552
|
-
*
|
|
553
|
-
* Demanding cwd unconditionally makes the engine structurally immune to
|
|
554
|
-
* misattribution of the foreign target: no gap in `command-normalize.ts`'s
|
|
555
|
-
* static, string-only model of shell control flow (subshells, pipes,
|
|
556
|
-
* `cd -`, a later `cd`, an unmodeled git flag composition) can ever make a
|
|
557
|
-
* gate WEAKER than the shipped, cwd-only engine, because cwd's own demand
|
|
558
|
-
* is never dropped — only added to. This replaces an earlier REPLACE-for-
|
|
559
|
-
* own-target design (D-011) that trusted a statically extracted own
|
|
560
|
-
* target as proof of "this one invocation operates there"; four
|
|
561
|
-
* independent review passes each measured a live bypass of that
|
|
562
|
-
* invariant against the shipped binary (a forged `.git/HEAD` directory
|
|
563
|
-
* reached through, respectively, a non-persisting `cd`, `--work-tree`,
|
|
564
|
-
* more than one repo-relocating flag, and a tilde-valued flag not counted
|
|
565
|
-
* by the multi-flag guard) — see `03-decisions.md` D-011/D-017/D-018/
|
|
566
|
-
* D-019/D-020/D-021 for the full history. The static-analysis-proves-it
|
|
567
|
-
* invariant those bypasses each disproved is not carried forward here.
|
|
568
|
-
* Cost accepted by the operator: a legitimate `git -C B` from cwd A now
|
|
569
|
-
* demands BOTH A's and B's context, where the pre-D-021 engine demanded
|
|
570
|
-
* only B's.
|
|
571
|
-
*
|
|
572
|
-
* One exception to "never dropped": when the working directory is outside
|
|
573
|
-
* every git repository (a blank `${REPO}` for the policy, as the guard
|
|
574
|
-
* sees it), its cwd context is not demanded next to a segment whose own
|
|
575
|
-
* target resolved to a real repository (see the loop body). That
|
|
576
|
-
* exception relies on two static models: the target attribution, whose
|
|
577
|
-
* known misattribution (a `GIT_DIR=` prefix or a third repository reached
|
|
578
|
-
* through another construct) exists for every cwd, and the check that the
|
|
579
|
-
* cwd is outside every repository, which errs toward inside: it holds only
|
|
580
|
-
* when neither the cwd nor any ancestor has an entry named `HEAD` or
|
|
581
|
-
* `.git` (`mayBeInsideRepository`). A detached cwd and every other
|
|
582
|
-
* non-blank cwd context are still never dropped.
|
|
583
|
-
*
|
|
584
|
-
* D-012: a target reached through a symlink resolves to its REAL
|
|
585
|
-
* (realpath'd) repository identity, not the symlink's own lexical
|
|
586
|
-
* basename — `resolveGitContext` derives `repo` from the basename of
|
|
587
|
-
* wherever it's pointed, and never itself realpaths, so an agent could
|
|
588
|
-
* otherwise pick the demanded repo identity by naming a symlink.
|
|
589
|
-
*
|
|
590
|
-
* D-013: distinct contexts are bounded at `MAX_ATTRIBUTED_CONTEXTS`; see
|
|
591
|
-
* that constant's own comment.
|
|
592
|
-
*
|
|
593
|
-
* D-015: the cwd context is deduped by its OWN `[REPO, BRANCH, sha]`
|
|
594
|
-
* signature (not the literal string `"cwd"`), so a foreign path that
|
|
595
|
-
* resolves to the SAME repository identity as cwd (e.g. a subdirectory of
|
|
596
|
-
* the cwd repo reached via an explicit `-C`) collapses into the cwd
|
|
597
|
-
* context instead of producing a spurious duplicate decision/audit write.
|
|
598
|
-
* `repoOverridden` / `branchOverridden` (from `InterceptOptions`, both
|
|
599
|
-
* default `false`) keep an operator's `HARNESS_REPO`/`HARNESS_BRANCH`
|
|
600
|
-
* override intact in an attributed foreign context instead of letting the
|
|
601
|
-
* target repo's own identity silently overwrite it — independently per
|
|
602
|
-
* field. `satisfying` is a `Set` (not `Array.includes` per segment) for
|
|
603
|
-
* O(1) membership tests instead of O(n) per segment.
|
|
604
|
-
*
|
|
605
|
-
* A policy with no attributable foreign target (no `bash_match`, no
|
|
606
|
-
* individually-matching segment, only an amp-arm-only match, an
|
|
607
|
-
* unattributable composition, a target resolving to the SAME repository
|
|
608
|
-
* identity as cwd, or a target outside any git repo — D-003) is evaluated
|
|
609
|
-
* EXACTLY as it is today, with the EXACT SAME `options.builtins` object
|
|
610
|
-
* reference (no clone) when nothing attributed, keeping that the
|
|
611
|
-
* byte-identical common case.
|
|
612
|
-
*
|
|
613
|
-
* `resolveGitContextMemo` is a per-`intercept()`-call cache keyed by the
|
|
614
|
-
* REALPATH'D absolute path (never module-level state — no cross-event
|
|
615
|
-
* caching), so several policies (or several satisfying segments) naming
|
|
616
|
-
* the same foreign path within one event pay the `fs` cost once, not
|
|
617
|
-
* once per policy per segment. `mayBeInsideRepositoryMemo` is the same
|
|
618
|
-
* kind of per-call cache for the cwd's own outside-every-repository
|
|
619
|
-
* check, keyed by the cwd's real path, so that walk runs once per event.
|
|
620
|
-
*/
|
|
621
|
-
export declare function resolveAttributedContexts(policy: Policy, segments: readonly CommandSegment[], cwdBuiltins: ExtractBuiltins, cwdCurrentHeadSha: string | undefined, resolveGitContextMemo: Map<string, GitRepoContext>, mayBeInsideRepositoryMemo: Map<string, boolean>, repoOverridden: boolean, branchOverridden: boolean, extractContext: ExtractEventContext): AttributedContextsResult;
|
|
622
|
-
export declare function intercept(options: InterceptOptions): Promise<InterceptResult>;
|
|
623
|
-
export {};
|