@lannguyensi/harness 0.63.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/README.md +46 -42
- package/dist/cli/add/index.js +17 -21
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +2 -2
- package/dist/cli/adopt/derive.js +2 -19
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +1 -1
- package/dist/cli/adopt/index.js +1 -12
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +20 -35
- package/dist/cli/apply/apply.js +61 -136
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-codex-config.js +10 -58
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/apply/generate-memory-index.js +1 -2
- package/dist/cli/apply/generate-memory-index.js.map +1 -1
- package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
- package/dist/cli/apply/generate-opencode-config.js +74 -113
- package/dist/cli/apply/generate-opencode-config.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +11 -64
- package/dist/cli/apply/generate-settings.js +27 -132
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -1
- package/dist/cli/apply/index.js +1 -1
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +153 -1
- package/dist/cli/apply/install-codex-config.js +445 -70
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +13 -1
- package/dist/cli/apply/next-steps.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +0 -23
- package/dist/cli/bounded-stdin.js +2 -49
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/describe.d.ts +1 -1
- package/dist/cli/describe.js +0 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/diff/engine.d.ts +0 -11
- package/dist/cli/diff/engine.js +1 -17
- package/dist/cli/diff/engine.js.map +1 -1
- package/dist/cli/diff/index.js +14 -25
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/claude-mcp.d.ts +4 -19
- package/dist/cli/doctor/claude-mcp.js +11 -22
- package/dist/cli/doctor/claude-mcp.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +12 -14
- package/dist/cli/doctor/codex.js +31 -144
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +23 -338
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/hook-liveness.d.ts +56 -0
- package/dist/cli/doctor/hook-liveness.js +455 -0
- package/dist/cli/doctor/hook-liveness.js.map +1 -0
- package/dist/cli/doctor/index.d.ts +13 -87
- package/dist/cli/doctor/index.js +57 -705
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/opencode.d.ts +2 -1
- package/dist/cli/doctor/opencode.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +21 -378
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/drain-stdio.d.ts +31 -0
- package/dist/cli/drain-stdio.js +76 -0
- package/dist/cli/drain-stdio.js.map +1 -0
- package/dist/cli/export.d.ts +3 -1
- package/dist/cli/export.js +7 -16
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/gate/codex-disable.d.ts +29 -0
- package/dist/cli/gate/codex-disable.js +195 -0
- package/dist/cli/gate/codex-disable.js.map +1 -0
- package/dist/cli/gate/codex-enable.d.ts +41 -0
- package/dist/cli/gate/codex-enable.js +127 -0
- package/dist/cli/gate/codex-enable.js.map +1 -0
- package/dist/cli/gate/codex-snapshot.d.ts +208 -0
- package/dist/cli/gate/codex-snapshot.js +402 -0
- package/dist/cli/gate/codex-snapshot.js.map +1 -0
- package/dist/cli/gate/disable.d.ts +9 -0
- package/dist/cli/gate/disable.js +263 -28
- package/dist/cli/gate/disable.js.map +1 -1
- package/dist/cli/gate/enable.d.ts +26 -6
- package/dist/cli/gate/enable.js +152 -80
- package/dist/cli/gate/enable.js.map +1 -1
- package/dist/cli/gate/link-chain.d.ts +53 -0
- package/dist/cli/gate/link-chain.js +122 -0
- package/dist/cli/gate/link-chain.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +289 -12
- package/dist/cli/gate/snapshot.js +481 -22
- package/dist/cli/gate/snapshot.js.map +1 -1
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +15 -2607
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/composer.d.ts +3 -6
- package/dist/cli/init/composer.js +6 -370
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/init/dependencies.d.ts +1 -2
- package/dist/cli/init/dependencies.js +4 -80
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/detect.js +5 -4
- package/dist/cli/init/detect.js.map +1 -1
- package/dist/cli/init/interactive.d.ts +1 -23
- package/dist/cli/init/interactive.js +33 -247
- package/dist/cli/init/interactive.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +2 -2
- package/dist/cli/init/profiles.js +51 -243
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +2 -37
- package/dist/cli/init/templates.js +25 -1237
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/list.d.ts +1 -1
- package/dist/cli/list.js +1 -38
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/loader.d.ts +15 -1
- package/dist/cli/loader.js +56 -39
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/main.js +7 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-home/index.js +2 -2
- package/dist/cli/migrate-home/index.js.map +1 -1
- package/dist/cli/pack/add.js +1 -1
- package/dist/cli/pack/add.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
- package/dist/cli/pack/hook-bootstrap.js +15 -291
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
- package/dist/cli/pack/hook-branch-protection.js +365 -340
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/index.d.ts +0 -1
- package/dist/cli/pack/index.js +0 -1
- package/dist/cli/pack/index.js.map +1 -1
- package/dist/cli/pack/list.js +1 -6
- package/dist/cli/pack/list.js.map +1 -1
- package/dist/cli/pack/mutate.d.ts +7 -9
- package/dist/cli/pack/mutate.js +6 -9
- package/dist/cli/pack/mutate.js.map +1 -1
- package/dist/cli/pack/reseed.d.ts +2 -2
- package/dist/cli/pack/reseed.js +16 -22
- package/dist/cli/pack/reseed.js.map +1 -1
- package/dist/cli/register-gate-group.d.ts +5 -0
- package/dist/cli/register-gate-group.js +348 -0
- package/dist/cli/register-gate-group.js.map +1 -0
- package/dist/cli/register-inspect-group.d.ts +6 -0
- package/dist/cli/register-inspect-group.js +189 -0
- package/dist/cli/register-inspect-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +5 -0
- package/dist/cli/register-operator-lifecycle.js +20 -0
- package/dist/cli/register-operator-lifecycle.js.map +1 -0
- package/dist/cli/register-pack-group.d.ts +5 -0
- package/dist/cli/register-pack-group.js +134 -0
- package/dist/cli/register-pack-group.js.map +1 -0
- package/dist/cli/register-setup-group.d.ts +5 -0
- package/dist/cli/register-setup-group.js +495 -0
- package/dist/cli/register-setup-group.js.map +1 -0
- package/dist/cli/remove/index.d.ts +0 -14
- package/dist/cli/remove/index.js +2 -115
- package/dist/cli/remove/index.js.map +1 -1
- package/dist/cli/remove/mutate.d.ts +0 -2
- package/dist/cli/remove/mutate.js +1 -19
- package/dist/cli/remove/mutate.js.map +1 -1
- package/dist/cli/remove/register.d.ts +5 -0
- package/dist/cli/remove/register.js +25 -0
- package/dist/cli/remove/register.js.map +1 -0
- package/dist/cli/shell-quote.d.ts +7 -0
- package/dist/cli/shell-quote.js +17 -0
- package/dist/cli/shell-quote.js.map +1 -0
- package/dist/cli/uninstall/index.d.ts +4 -2
- package/dist/cli/uninstall/index.js +15 -7
- package/dist/cli/uninstall/index.js.map +1 -1
- package/dist/cli/uninstall/register.d.ts +5 -0
- package/dist/cli/uninstall/register.js +171 -0
- package/dist/cli/uninstall/register.js.map +1 -0
- package/dist/cli/uninstall/snapshot.d.ts +15 -0
- package/dist/cli/uninstall/snapshot.js +38 -0
- package/dist/cli/uninstall/snapshot.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +0 -77
- package/dist/cli/validate/checks.js +3 -1049
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/cli/validate/index.js +19 -15
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/io/claude-mcp.d.ts +1 -1
- package/dist/io/claude-mcp.js +27 -14
- package/dist/io/claude-mcp.js.map +1 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/lock.d.ts +0 -26
- package/dist/io/lock.js +10 -27
- package/dist/io/lock.js.map +1 -1
- package/dist/io/merge-settings.js +6 -4
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/project-name.d.ts +22 -39
- package/dist/io/project-name.js +25 -42
- package/dist/io/project-name.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +103 -40
- package/dist/io/read-regular-file.js +196 -35
- package/dist/io/read-regular-file.js.map +1 -1
- package/dist/io/restart-hints.js +3 -6
- package/dist/io/restart-hints.js.map +1 -1
- package/dist/io/version-compare.d.ts +1 -3
- package/dist/io/version-compare.js +1 -3
- package/dist/io/version-compare.js.map +1 -1
- package/dist/io/write-regular-file.d.ts +30 -0
- package/dist/io/write-regular-file.js +85 -0
- package/dist/io/write-regular-file.js.map +1 -0
- package/dist/overrides/index.d.ts +1 -0
- package/dist/overrides/index.js +1 -0
- package/dist/overrides/index.js.map +1 -1
- package/dist/overrides/merge-layers.d.ts +43 -0
- package/dist/overrides/merge-layers.js +76 -0
- package/dist/overrides/merge-layers.js.map +1 -0
- package/dist/overrides/merge.d.ts +16 -0
- package/dist/overrides/merge.js +21 -8
- package/dist/overrides/merge.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
- package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
- package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
- package/dist/policy-packs/builtin/branch-protection.js +56 -89
- package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
- package/dist/policy-packs/config-check.d.ts +7 -5
- package/dist/policy-packs/config-check.js +2 -2
- package/dist/policy-packs/config-check.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +1 -3
- package/dist/policy-packs/expand.js +5 -42
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +3 -3
- package/dist/policy-packs/index.js +2 -2
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +9 -38
- package/dist/policy-packs/registry.js +5 -65
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/policy-packs/runtime.d.ts +0 -4
- package/dist/policy-packs/runtime.js +9 -22
- package/dist/policy-packs/runtime.js.map +1 -1
- package/dist/policy-packs/types.d.ts +0 -19
- package/dist/policy-packs/ux-compare.d.ts +1 -11
- package/dist/policy-packs/ux-compare.js +6 -42
- package/dist/policy-packs/ux-compare.js.map +1 -1
- package/dist/policy-packs/ux-drift-check.d.ts +5 -5
- package/dist/policy-packs/ux-drift-check.js +17 -22
- package/dist/policy-packs/ux-drift-check.js.map +1 -1
- package/dist/policy-packs/version-check.d.ts +5 -26
- package/dist/policy-packs/version-check.js +19 -74
- package/dist/policy-packs/version-check.js.map +1 -1
- package/dist/probes/memory.d.ts +1 -1
- package/dist/probes/memory.js +1 -1
- package/dist/probes/memory.js.map +1 -1
- package/dist/runtime/agent-facing.d.ts +9 -0
- package/dist/runtime/agent-facing.js +28 -14
- package/dist/runtime/agent-facing.js.map +1 -1
- package/dist/runtime/bounded-text.d.ts +15 -0
- package/dist/runtime/bounded-text.js +27 -0
- package/dist/runtime/bounded-text.js.map +1 -0
- package/dist/runtime/git-branch.d.ts +125 -0
- package/dist/runtime/git-branch.js +381 -0
- package/dist/runtime/git-branch.js.map +1 -0
- package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
- package/dist/runtime/hermetic-spawn-guard.js +24 -34
- package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
- package/dist/runtime/home-dir.js +3 -2
- package/dist/runtime/home-dir.js.map +1 -1
- package/dist/runtime/tool-name-aliases.d.ts +0 -6
- package/dist/runtime/tool-name-aliases.js +5 -18
- package/dist/runtime/tool-name-aliases.js.map +1 -1
- package/dist/schema/grounding.d.ts +7 -54
- package/dist/schema/grounding.js +10 -12
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/hooks.d.ts +39 -136
- package/dist/schema/hooks.js +3 -6
- package/dist/schema/hooks.js.map +1 -1
- package/dist/schema/index.d.ts +114 -3828
- package/dist/schema/index.js +41 -80
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.d.ts +54 -131
- package/dist/schema/memory.js +2 -2
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/policy-packs.d.ts +3 -45
- package/dist/schema/policy-packs.js +7 -13
- package/dist/schema/policy-packs.js.map +1 -1
- package/dist/schema/policy-ux.d.ts +7 -0
- package/dist/schema/policy-ux.js +18 -0
- package/dist/schema/policy-ux.js.map +1 -0
- package/dist/schema/removed-keys.d.ts +185 -0
- package/dist/schema/removed-keys.js +531 -0
- package/dist/schema/removed-keys.js.map +1 -0
- package/dist/schema/tools.d.ts +30 -268
- package/dist/schema/tools.js +4 -4
- package/dist/schema/tools.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/approve/branch-protection.d.ts +0 -69
- package/dist/cli/approve/branch-protection.js +0 -144
- package/dist/cli/approve/branch-protection.js.map +0 -1
- package/dist/cli/approve/risk.d.ts +0 -112
- package/dist/cli/approve/risk.js +0 -197
- package/dist/cli/approve/risk.js.map +0 -1
- package/dist/cli/approve/stdin-report.d.ts +0 -57
- package/dist/cli/approve/stdin-report.js +0 -145
- package/dist/cli/approve/stdin-report.js.map +0 -1
- package/dist/cli/approve/understanding.d.ts +0 -410
- package/dist/cli/approve/understanding.js +0 -996
- package/dist/cli/approve/understanding.js.map +0 -1
- package/dist/cli/audit.d.ts +0 -80
- package/dist/cli/audit.js +0 -252
- package/dist/cli/audit.js.map +0 -1
- package/dist/cli/delegate/index.d.ts +0 -76
- package/dist/cli/delegate/index.js +0 -443
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
- package/dist/cli/doctor/auto-approve-mode.js +0 -80
- package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
- package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
- package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
- package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
- package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
- package/dist/cli/doctor/codex-config-drift.js +0 -240
- package/dist/cli/doctor/codex-config-drift.js.map +0 -1
- package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
- package/dist/cli/doctor/rogue-ledger.js +0 -153
- package/dist/cli/doctor/rogue-ledger.js.map +0 -1
- package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
- package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
- package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
- package/dist/cli/doctor/settings-drift.d.ts +0 -25
- package/dist/cli/doctor/settings-drift.js +0 -213
- package/dist/cli/doctor/settings-drift.js.map +0 -1
- package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
- package/dist/cli/doctor/toolchain-parity.js +0 -154
- package/dist/cli/doctor/toolchain-parity.js.map +0 -1
- package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
- package/dist/cli/doctor/ug-auto-approvals.js +0 -91
- package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
- package/dist/cli/doctor/ug-delegations.d.ts +0 -26
- package/dist/cli/doctor/ug-delegations.js +0 -121
- package/dist/cli/doctor/ug-delegations.js.map +0 -1
- package/dist/cli/doctor/ug-inflight.d.ts +0 -35
- package/dist/cli/doctor/ug-inflight.js +0 -57
- package/dist/cli/doctor/ug-inflight.js.map +0 -1
- package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
- package/dist/cli/doctor/understanding-mode-env.js +0 -98
- package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
- package/dist/cli/dry-run.d.ts +0 -46
- package/dist/cli/dry-run.js +0 -250
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/event-input.d.ts +0 -28
- package/dist/cli/event-input.js +0 -73
- package/dist/cli/event-input.js.map +0 -1
- package/dist/cli/explain-action.d.ts +0 -20
- package/dist/cli/explain-action.js +0 -27
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -135
- package/dist/cli/explain-policy.js +0 -266
- package/dist/cli/explain-policy.js.map +0 -1
- package/dist/cli/explain.d.ts +0 -31
- package/dist/cli/explain.js +0 -159
- package/dist/cli/explain.js.map +0 -1
- package/dist/cli/gc/index.d.ts +0 -63
- package/dist/cli/gc/index.js +0 -566
- package/dist/cli/gc/index.js.map +0 -1
- package/dist/cli/pack/approve-escape.d.ts +0 -19
- package/dist/cli/pack/approve-escape.js +0 -190
- package/dist/cli/pack/approve-escape.js.map +0 -1
- package/dist/cli/pack/auto-approve-path.d.ts +0 -146
- package/dist/cli/pack/auto-approve-path.js +0 -462
- package/dist/cli/pack/auto-approve-path.js.map +0 -1
- package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
- package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
- package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
- package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
- package/dist/cli/pack/hook-codex-stop.js +0 -329
- package/dist/cli/pack/hook-codex-stop.js.map +0 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
- package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
- package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
- package/dist/cli/pack/hook-post-merge-gate.js +0 -277
- package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
- package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
- package/dist/cli/pack/hook-post-tool-use.js +0 -137
- package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
- package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
- package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
- package/dist/cli/pack/hook-runtime-reality.js +0 -210
- package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -337
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
- package/dist/cli/pack/hook-solution-acceptance.js +0 -530
- package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
- package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
- package/dist/cli/pack/hook-stay-in-scope.js +0 -128
- package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
- package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
- package/dist/cli/pack/hook-subagent-start.js +0 -88
- package/dist/cli/pack/hook-subagent-start.js.map +0 -1
- package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
- package/dist/cli/pack/hook-subagent-stop.js +0 -41
- package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
- package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
- package/dist/cli/pack/hook-track-active-claim.js +0 -275
- package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
- package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
- package/dist/cli/pack/transcript-report-scan.js +0 -359
- package/dist/cli/pack/transcript-report-scan.js.map +0 -1
- package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
- package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
- package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
- package/dist/cli/pack/upgrade.d.ts +0 -32
- package/dist/cli/pack/upgrade.js +0 -273
- package/dist/cli/pack/upgrade.js.map +0 -1
- package/dist/cli/pause/index.d.ts +0 -113
- package/dist/cli/pause/index.js +0 -251
- package/dist/cli/pause/index.js.map +0 -1
- package/dist/cli/pause-check.d.ts +0 -22
- package/dist/cli/pause-check.js +0 -54
- package/dist/cli/pause-check.js.map +0 -1
- package/dist/cli/policy/intercept.d.ts +0 -233
- package/dist/cli/policy/intercept.js +0 -1020
- package/dist/cli/policy/intercept.js.map +0 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
- package/dist/cli/policy/risk-envelope-enrichment.js +0 -108
- package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
- package/dist/cli/record/index.d.ts +0 -81
- package/dist/cli/record/index.js +0 -348
- package/dist/cli/record/index.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -47
- package/dist/cli/resolve-env.js.map +0 -1
- package/dist/cli/session-export/index.d.ts +0 -46
- package/dist/cli/session-export/index.js +0 -169
- package/dist/cli/session-export/index.js.map +0 -1
- package/dist/cli/session-export/redact.d.ts +0 -22
- package/dist/cli/session-export/redact.js +0 -47
- package/dist/cli/session-export/redact.js.map +0 -1
- package/dist/cli/session-export/transcript.d.ts +0 -24
- package/dist/cli/session-export/transcript.js +0 -164
- package/dist/cli/session-export/transcript.js.map +0 -1
- package/dist/cli/session-start/branch-check.d.ts +0 -18
- package/dist/cli/session-start/branch-check.js +0 -140
- package/dist/cli/session-start/branch-check.js.map +0 -1
- package/dist/cli/session-start/index.d.ts +0 -121
- package/dist/cli/session-start/index.js +0 -591
- package/dist/cli/session-start/index.js.map +0 -1
- package/dist/cli/session-start/shared-options.d.ts +0 -103
- package/dist/cli/session-start/shared-options.js +0 -107
- package/dist/cli/session-start/shared-options.js.map +0 -1
- package/dist/cli/session-start/stale-base-check.d.ts +0 -46
- package/dist/cli/session-start/stale-base-check.js +0 -352
- package/dist/cli/session-start/stale-base-check.js.map +0 -1
- package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
- package/dist/cli/session-start/toolchain-parity.js +0 -797
- package/dist/cli/session-start/toolchain-parity.js.map +0 -1
- package/dist/cli/smoke/assertions.d.ts +0 -46
- package/dist/cli/smoke/assertions.js +0 -170
- package/dist/cli/smoke/assertions.js.map +0 -1
- package/dist/cli/smoke/index.d.ts +0 -76
- package/dist/cli/smoke/index.js +0 -245
- package/dist/cli/smoke/index.js.map +0 -1
- package/dist/cli/smoke/runner.d.ts +0 -55
- package/dist/cli/smoke/runner.js +0 -134
- package/dist/cli/smoke/runner.js.map +0 -1
- package/dist/cli/smoke/stream-parser.d.ts +0 -65
- package/dist/cli/smoke/stream-parser.js +0 -115
- package/dist/cli/smoke/stream-parser.js.map +0 -1
- package/dist/cli/test-risk.d.ts +0 -26
- package/dist/cli/test-risk.js +0 -34
- package/dist/cli/test-risk.js.map +0 -1
- package/dist/io/display-path.d.ts +0 -11
- package/dist/io/display-path.js +0 -29
- package/dist/io/display-path.js.map +0 -1
- package/dist/io/duration.d.ts +0 -5
- package/dist/io/duration.js +0 -50
- package/dist/io/duration.js.map +0 -1
- package/dist/io/extract.d.ts +0 -79
- package/dist/io/extract.js +0 -226
- package/dist/io/extract.js.map +0 -1
- package/dist/io/ledger-record.d.ts +0 -83
- package/dist/io/ledger-record.js +0 -301
- package/dist/io/ledger-record.js.map +0 -1
- package/dist/io/read-json-dir-entries.d.ts +0 -36
- package/dist/io/read-json-dir-entries.js +0 -48
- package/dist/io/read-json-dir-entries.js.map +0 -1
- package/dist/io/safe-json-parse.d.ts +0 -5
- package/dist/io/safe-json-parse.js +0 -21
- package/dist/io/safe-json-parse.js.map +0 -1
- package/dist/policies/index.d.ts +0 -5
- package/dist/policies/index.js +0 -6
- package/dist/policies/index.js.map +0 -1
- package/dist/policies/ledger-client.d.ts +0 -113
- package/dist/policies/ledger-client.js +0 -500
- package/dist/policies/ledger-client.js.map +0 -1
- package/dist/policies/producers.d.ts +0 -12
- package/dist/policies/producers.js +0 -61
- package/dist/policies/producers.js.map +0 -1
- package/dist/policies/requires.d.ts +0 -75
- package/dist/policies/requires.js +0 -240
- package/dist/policies/requires.js.map +0 -1
- package/dist/policies/timestamp.d.ts +0 -14
- package/dist/policies/timestamp.js +0 -36
- package/dist/policies/timestamp.js.map +0 -1
- package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
- package/dist/policy-packs/builtin/permission-profiles.js +0 -74
- package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
- package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
- package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
- package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
- package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -618
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -93
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -620
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
- package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1074
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
- package/dist/policy-packs/permission-translator.d.ts +0 -9
- package/dist/policy-packs/permission-translator.js +0 -76
- package/dist/policy-packs/permission-translator.js.map +0 -1
- package/dist/runtime/action-envelope.d.ts +0 -64
- package/dist/runtime/action-envelope.js +0 -46
- package/dist/runtime/action-envelope.js.map +0 -1
- package/dist/runtime/approval-signing.d.ts +0 -111
- package/dist/runtime/approval-signing.js +0 -384
- package/dist/runtime/approval-signing.js.map +0 -1
- package/dist/runtime/bash-match-facts.d.ts +0 -60
- package/dist/runtime/bash-match-facts.js +0 -196
- package/dist/runtime/bash-match-facts.js.map +0 -1
- package/dist/runtime/bash-match-registry.d.ts +0 -112
- package/dist/runtime/bash-match-registry.js +0 -406
- package/dist/runtime/bash-match-registry.js.map +0 -1
- package/dist/runtime/bash-prefix-parse.d.ts +0 -31
- package/dist/runtime/bash-prefix-parse.js +0 -576
- package/dist/runtime/bash-prefix-parse.js.map +0 -1
- package/dist/runtime/command-normalize.d.ts +0 -658
- package/dist/runtime/command-normalize.js +0 -2410
- package/dist/runtime/command-normalize.js.map +0 -1
- package/dist/runtime/deletion-target-resolve.d.ts +0 -28
- package/dist/runtime/deletion-target-resolve.js +0 -1078
- package/dist/runtime/deletion-target-resolve.js.map +0 -1
- package/dist/runtime/destructive-shell-floor.d.ts +0 -19
- package/dist/runtime/destructive-shell-floor.js +0 -611
- package/dist/runtime/destructive-shell-floor.js.map +0 -1
- package/dist/runtime/environment-resolver.d.ts +0 -36
- package/dist/runtime/environment-resolver.js +0 -138
- package/dist/runtime/environment-resolver.js.map +0 -1
- package/dist/runtime/git-context.d.ts +0 -201
- package/dist/runtime/git-context.js +0 -422
- package/dist/runtime/git-context.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.js +0 -13
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/intercept.d.ts +0 -494
- package/dist/runtime/intercept.js +0 -1313
- package/dist/runtime/intercept.js.map +0 -1
- package/dist/runtime/kube-context.d.ts +0 -16
- package/dist/runtime/kube-context.js +0 -63
- package/dist/runtime/kube-context.js.map +0 -1
- package/dist/runtime/kubectl-target-parse.d.ts +0 -31
- package/dist/runtime/kubectl-target-parse.js +0 -249
- package/dist/runtime/kubectl-target-parse.js.map +0 -1
- package/dist/runtime/ledger-add.d.ts +0 -16
- package/dist/runtime/ledger-add.js +0 -150
- package/dist/runtime/ledger-add.js.map +0 -1
- package/dist/runtime/ledger-writer.d.ts +0 -27
- package/dist/runtime/ledger-writer.js +0 -46
- package/dist/runtime/ledger-writer.js.map +0 -1
- package/dist/runtime/pause-sentinel.d.ts +0 -60
- package/dist/runtime/pause-sentinel.js +0 -156
- package/dist/runtime/pause-sentinel.js.map +0 -1
- package/dist/runtime/pending-approval.d.ts +0 -23
- package/dist/runtime/pending-approval.js +0 -67
- package/dist/runtime/pending-approval.js.map +0 -1
- package/dist/runtime/read-only-bash.d.ts +0 -141
- package/dist/runtime/read-only-bash.js +0 -2204
- package/dist/runtime/read-only-bash.js.map +0 -1
- package/dist/runtime/recovery-git-commit.d.ts +0 -22
- package/dist/runtime/recovery-git-commit.js +0 -284
- package/dist/runtime/recovery-git-commit.js.map +0 -1
- package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
- package/dist/runtime/reject-malformed-session-id.js +0 -16
- package/dist/runtime/reject-malformed-session-id.js.map +0 -1
- package/dist/runtime/risk-classifier.d.ts +0 -38
- package/dist/runtime/risk-classifier.js +0 -311
- package/dist/runtime/risk-classifier.js.map +0 -1
- package/dist/runtime/session-id.d.ts +0 -113
- package/dist/runtime/session-id.js +0 -193
- package/dist/runtime/session-id.js.map +0 -1
- package/dist/runtime/shell-word.d.ts +0 -62
- package/dist/runtime/shell-word.js +0 -410
- package/dist/runtime/shell-word.js.map +0 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +0 -103
- package/dist/runtime/task-providers/agent-tasks.js +0 -245
- package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
- package/dist/runtime/when-eval.d.ts +0 -62
- package/dist/runtime/when-eval.js +0 -212
- package/dist/runtime/when-eval.js.map +0 -1
- package/dist/runtime/workflow-policies.d.ts +0 -207
- package/dist/runtime/workflow-policies.js +0 -596
- package/dist/runtime/workflow-policies.js.map +0 -1
- package/dist/schema/audit.d.ts +0 -71
- package/dist/schema/audit.js +0 -32
- package/dist/schema/audit.js.map +0 -1
- package/dist/schema/doctor.d.ts +0 -25
- package/dist/schema/doctor.js +0 -23
- package/dist/schema/doctor.js.map +0 -1
- package/dist/schema/environments.d.ts +0 -215
- package/dist/schema/environments.js +0 -101
- package/dist/schema/environments.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -9
- package/dist/schema/extract.js +0 -86
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/permission-profiles.d.ts +0 -2292
- package/dist/schema/permission-profiles.js +0 -60
- package/dist/schema/permission-profiles.js.map +0 -1
- package/dist/schema/policies.d.ts +0 -974
- package/dist/schema/policies.js +0 -298
- package/dist/schema/policies.js.map +0 -1
- package/dist/schema/requires.d.ts +0 -131
- package/dist/schema/requires.js +0 -88
- package/dist/schema/requires.js.map +0 -1
- package/dist/schema/risk.d.ts +0 -144
- package/dist/schema/risk.js +0 -194
- package/dist/schema/risk.js.map +0 -1
- package/dist/schema/session-start-preflight.d.ts +0 -10
- package/dist/schema/session-start-preflight.js +0 -106
- package/dist/schema/session-start-preflight.js.map +0 -1
- package/dist/schema/stale-base-check.d.ts +0 -18
- package/dist/schema/stale-base-check.js +0 -37
- package/dist/schema/stale-base-check.js.map +0 -1
- package/dist/schema/toolchain-parity.d.ts +0 -21
- package/dist/schema/toolchain-parity.js +0 -48
- package/dist/schema/toolchain-parity.js.map +0 -1
- package/dist/schema/workflows.d.ts +0 -519
- package/dist/schema/workflows.js +0 -81
- package/dist/schema/workflows.js.map +0 -1
- package/scripts/runtime-reality-docker-probe.mjs +0 -71
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// Ledger audit/forensics helpers, split out of the former monolithic
|
|
2
|
-
// understanding-before-execution-runtime.ts (structural concentration
|
|
3
|
-
// slice 2, agent-tasks 348a4d42). Pure move: see
|
|
4
|
-
// src/policy-packs/builtin/understanding-before-execution/index.ts for
|
|
5
|
-
// the re-exported public surface.
|
|
6
|
-
import { POLICY_DECISION_TYPE } from "../../../io/ledger-record.js";
|
|
7
|
-
import { APPROVAL_MARKER_DIRNAME } from "./markers.js";
|
|
8
|
-
export const APPROVED_LEDGER_TAG_PREFIX = "understanding-approved:";
|
|
9
|
-
/** Build the per-session ledger tag the pack searches for. */
|
|
10
|
-
export function approvedLedgerTagFor(sessionId) {
|
|
11
|
-
return `${APPROVED_LEDGER_TAG_PREFIX}${sessionId}`;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Phase 6 #6 — substring-pollution defence shared by every PreToolUse
|
|
15
|
-
* blocker (Claude Code + Codex). Drops policy_decision rows so a
|
|
16
|
-
* `understanding-approved:<sess>` substring inside an audit row's
|
|
17
|
-
* JSON-encoded `reason` cannot accidentally satisfy the gate.
|
|
18
|
-
*/
|
|
19
|
-
export function isPolicyDecisionRow(e) {
|
|
20
|
-
if (e.type === POLICY_DECISION_TYPE)
|
|
21
|
-
return true;
|
|
22
|
-
if (typeof e.content === "string" && e.content.startsWith(`${POLICY_DECISION_TYPE}:`)) {
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Match a ledger fetch against the per-session approval tag. Kept for
|
|
29
|
-
* the audit / forensics path only: a ledger entry tagged
|
|
30
|
-
* `understanding-approved:<sid>` is no longer a sufficient signal to
|
|
31
|
-
* unblock the gate (agent-tasks/88ca4bb3: the agent has the same MCP
|
|
32
|
-
* surface and could self-write the row). Use `checkApprovalMarker`
|
|
33
|
-
* for the gate decision; this helper now serves `harness audit` /
|
|
34
|
-
* `harness explain --trace` style read paths that surface the
|
|
35
|
-
* historic ledger trail without granting approval power.
|
|
36
|
-
*/
|
|
37
|
-
export function matchLedgerEntries(entries, sessionId) {
|
|
38
|
-
const wanted = approvedLedgerTagFor(sessionId);
|
|
39
|
-
let scanned = 0;
|
|
40
|
-
for (const e of entries) {
|
|
41
|
-
if (isPolicyDecisionRow(e))
|
|
42
|
-
continue;
|
|
43
|
-
scanned += 1;
|
|
44
|
-
if (typeof e.content === "string" && e.content.includes(wanted)) {
|
|
45
|
-
return {
|
|
46
|
-
matched: true,
|
|
47
|
-
detail: `audit: ledger tag ${wanted} present at ${e.createdAt} (no longer satisfies the gate; see harness.generated/${APPROVAL_MARKER_DIRNAME}/${sessionId})`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
matched: false,
|
|
53
|
-
detail: `no ledger entry matched ${wanted} (scanned ${scanned} non-policy_decision row(s))`,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=ledger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/ledger.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sEAAsE;AACtE,iDAAiD;AACjD,uEAAuE;AACvE,kCAAkC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,GAAG,0BAA0B,GAAG,SAAS,EAAE,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAc;IAChD,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,SAAiB;IAEjB,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,mBAAmB,CAAC,CAAC,CAAC;YAAE,SAAS;QACrC,OAAO,IAAI,CAAC,CAAC;QACb,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,qBAAqB,MAAM,eAAe,CAAC,CAAC,SAAS,yDAAyD,uBAAuB,IAAI,SAAS,GAAG;aAC9J,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,2BAA2B,MAAM,aAAa,OAAO,8BAA8B;KAC5F,CAAC;AACJ,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface ApprovalLifecycle {
|
|
2
|
-
/** Tool-name patterns whose successful PostToolUse expires the marker. */
|
|
3
|
-
expireOnToolMatch: string[];
|
|
4
|
-
/** Pre-compiled regex patterns matched against `Bash` tool_input.command. */
|
|
5
|
-
expireOnBashMatch: RegExp[];
|
|
6
|
-
/** Max marker age in milliseconds. Undefined means no TTL. */
|
|
7
|
-
maxAgeMs?: number;
|
|
8
|
-
/** Whether the operator explicitly opted out via `{ mode: "session" }`. */
|
|
9
|
-
legacyMode: boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Parse the optional `approval_lifecycle` block from a pack config.
|
|
13
|
-
* Best-effort: malformed values fall back to the default (no expiry,
|
|
14
|
-
* legacyMode=false) and write a one-line warning to the supplied
|
|
15
|
-
* stderr. The PreToolUse / PostToolUse hooks must keep working even
|
|
16
|
-
* when the operator typed a typo in the YAML.
|
|
17
|
-
*/
|
|
18
|
-
export declare function parseApprovalLifecycle(raw: unknown, stderr?: {
|
|
19
|
-
write: (s: string) => void;
|
|
20
|
-
} | null): ApprovalLifecycle;
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
// `approval_lifecycle` pack-config parsing, split out of the former
|
|
2
|
-
// monolithic understanding-before-execution-runtime.ts (structural
|
|
3
|
-
// concentration slice 2, agent-tasks 348a4d42). Pure move: see
|
|
4
|
-
// src/policy-packs/builtin/understanding-before-execution/index.ts for
|
|
5
|
-
// the re-exported public surface.
|
|
6
|
-
import { InvalidDurationError, parseDurationSeconds } from "../../../policies/index.js";
|
|
7
|
-
const DEFAULT_LIFECYCLE = {
|
|
8
|
-
expireOnToolMatch: [],
|
|
9
|
-
expireOnBashMatch: [],
|
|
10
|
-
legacyMode: false,
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Parse the optional `approval_lifecycle` block from a pack config.
|
|
14
|
-
* Best-effort: malformed values fall back to the default (no expiry,
|
|
15
|
-
* legacyMode=false) and write a one-line warning to the supplied
|
|
16
|
-
* stderr. The PreToolUse / PostToolUse hooks must keep working even
|
|
17
|
-
* when the operator typed a typo in the YAML.
|
|
18
|
-
*/
|
|
19
|
-
export function parseApprovalLifecycle(raw, stderr) {
|
|
20
|
-
if (raw === undefined || raw === null)
|
|
21
|
-
return DEFAULT_LIFECYCLE;
|
|
22
|
-
if (typeof raw !== "object" || Array.isArray(raw)) {
|
|
23
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle ignored (expected object, got ${typeof raw})\n`);
|
|
24
|
-
return DEFAULT_LIFECYCLE;
|
|
25
|
-
}
|
|
26
|
-
const obj = raw;
|
|
27
|
-
if (obj["mode"] === "session") {
|
|
28
|
-
const maxAgeMs = parseMaxAge(obj["max_age"], stderr);
|
|
29
|
-
return {
|
|
30
|
-
expireOnToolMatch: [],
|
|
31
|
-
expireOnBashMatch: [],
|
|
32
|
-
...(maxAgeMs !== undefined && { maxAgeMs }),
|
|
33
|
-
legacyMode: true,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const expireOnToolMatch = [];
|
|
37
|
-
const list = obj["expire_on_tool_match"];
|
|
38
|
-
if (Array.isArray(list)) {
|
|
39
|
-
for (const v of list) {
|
|
40
|
-
if (typeof v === "string" && v.length > 0)
|
|
41
|
-
expireOnToolMatch.push(v);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else if (list !== undefined) {
|
|
45
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_tool_match ignored (expected string[], got ${typeof list})\n`);
|
|
46
|
-
}
|
|
47
|
-
const expireOnBashMatch = [];
|
|
48
|
-
const bashList = obj["expire_on_bash_match"];
|
|
49
|
-
if (Array.isArray(bashList)) {
|
|
50
|
-
for (const v of bashList) {
|
|
51
|
-
if (typeof v !== "string" || v.length === 0)
|
|
52
|
-
continue;
|
|
53
|
-
try {
|
|
54
|
-
expireOnBashMatch.push(new RegExp(v));
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_bash_match entry ignored ("${v}"): ${err.message}\n`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (bashList !== undefined) {
|
|
62
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_bash_match ignored (expected string[], got ${typeof bashList})\n`);
|
|
63
|
-
}
|
|
64
|
-
const maxAgeMs = parseMaxAge(obj["max_age"], stderr);
|
|
65
|
-
return {
|
|
66
|
-
expireOnToolMatch,
|
|
67
|
-
expireOnBashMatch,
|
|
68
|
-
...(maxAgeMs !== undefined && { maxAgeMs }),
|
|
69
|
-
legacyMode: false,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Parse `approval_lifecycle.max_age` into milliseconds. Shared by both the
|
|
74
|
-
* boundary-lifecycle branch and the `{ mode: "session" }` branch (task
|
|
75
|
-
* 496660c5) so a malformed value warns identically in either mode.
|
|
76
|
-
*/
|
|
77
|
-
function parseMaxAge(maxAgeRaw, stderr) {
|
|
78
|
-
if (typeof maxAgeRaw === "string" && maxAgeRaw.length > 0) {
|
|
79
|
-
try {
|
|
80
|
-
return parseDurationSeconds(maxAgeRaw) * 1_000;
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
const msg = err instanceof InvalidDurationError ? err.message : String(err);
|
|
84
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle.max_age ignored: ${msg}\n`);
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (maxAgeRaw !== undefined) {
|
|
89
|
-
stderr?.write(`harness pack hook: config.approval_lifecycle.max_age ignored (expected duration string like "4h", got ${typeof maxAgeRaw})\n`);
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
export declare const APPROVAL_MARKER_DIRNAME = ".approvals";
|
|
2
|
-
/** Filesystem path of the per-session approval marker. */
|
|
3
|
-
export declare function approvalMarkerPathFor(generatedDir: string, sessionId: string): string;
|
|
4
|
-
export interface ApprovalMarker {
|
|
5
|
-
approvedAt: string;
|
|
6
|
-
approvedBy: string;
|
|
7
|
-
/**
|
|
8
|
-
* sha256 hex of the persisted-report content this approval is bound to
|
|
9
|
-
* at sign-time (harness/f9485cc7). Optional on write (defaults to
|
|
10
|
-
* `null` — a marker with no report to bind, e.g. `harness approve
|
|
11
|
-
* branch-protection`, or a ledger-only approval); always present
|
|
12
|
-
* (possibly `null`) on a marker `checkApprovalMarker` returns.
|
|
13
|
-
*/
|
|
14
|
-
reportContentHash?: string | null;
|
|
15
|
-
/**
|
|
16
|
-
* Task binding (task 5018c0c4): the active-claim task id this approval
|
|
17
|
-
* was granted for, `null` when no claim was held at approval time.
|
|
18
|
-
* Signed. On write, omitted means "resolve it now from the active-claim
|
|
19
|
-
* file" (see `writeApprovalMarker`). On a marker `checkApprovalMarker`
|
|
20
|
-
* returns, the property is ABSENT for a marker that carries no binding
|
|
21
|
-
* (one written by a release before the binding existed); the gate's
|
|
22
|
-
* session-marker reader (`checkSessionApprovalMarker`) refuses such a
|
|
23
|
-
* marker.
|
|
24
|
-
*/
|
|
25
|
-
claimTaskId?: string | null;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Operator-side: write the marker file the gate consults. Atomic so a
|
|
29
|
-
* crash mid-write cannot leave a half-empty file the gate would accept
|
|
30
|
-
* as approved. Caller is `harness approve understanding`, which the
|
|
31
|
-
* operator runs from their un-hooked shell; if the agent could call
|
|
32
|
-
* this path the gate's value would collapse, so it lives behind the
|
|
33
|
-
* approve CLI rather than as a generally importable verb.
|
|
34
|
-
*
|
|
35
|
-
* The marker is HMAC-signed (harness/f9485cc7) over (sessionId,
|
|
36
|
-
* approvedAt, approvedBy, reportContentHash), plus the claimTaskId every
|
|
37
|
-
* marker this writer signs carries (see `canonicalPayload`), using an operator-side key
|
|
38
|
-
* lazily generated at `<generatedDir>/.approval-signing.key` — see
|
|
39
|
-
* `src/runtime/approval-signing.ts` for the key-management contract and
|
|
40
|
-
* the honest trust model. Mode 0600 on the marker file itself, best-
|
|
41
|
-
* effort (matches the signing key's own permission convention); this is
|
|
42
|
-
* defense-in-depth alongside the signature, not a substitute for it.
|
|
43
|
-
*
|
|
44
|
-
* Task binding (task 5018c0c4): every marker this writer signs records
|
|
45
|
-
* the task id of the active claim at the moment of writing (`null` when
|
|
46
|
-
* none is held), unless the caller passes `claimTaskId` explicitly. The
|
|
47
|
-
* binding is resolved here, at the one writer, so no approve path (the
|
|
48
|
-
* `harness approve understanding` CLI, the hook's auto-approval path)
|
|
49
|
-
* can mint an unbound session marker. Only the understanding gate's
|
|
50
|
-
* session-marker reader enforces it, and only outside
|
|
51
|
-
* `approval_lifecycle: { mode: session }` (the field is written in every
|
|
52
|
-
* mode so a later mode change takes effect); the branch-protection marker, which
|
|
53
|
-
* shares this writer under its own id, carries the field unused.
|
|
54
|
-
*/
|
|
55
|
-
export declare function writeApprovalMarker(generatedDir: string, sessionId: string, marker: ApprovalMarker): string;
|
|
56
|
-
export interface MarkerCheck {
|
|
57
|
-
matched: boolean;
|
|
58
|
-
detail: string;
|
|
59
|
-
marker: ApprovalMarker | null;
|
|
60
|
-
/**
|
|
61
|
-
* True when `matched` is false SPECIFICALLY because a readable marker
|
|
62
|
-
* existed but its `approvedAt` exceeded `opts.maxAgeMs`
|
|
63
|
-
* (agent-tasks/d8ee60ca) — as opposed to the marker being absent
|
|
64
|
-
* (never approved, or cleared by a task-completion boundary tool via
|
|
65
|
-
* `clearApprovalMarker`), corrupted, or the session id malformed.
|
|
66
|
-
* False whenever `matched` is true. This is the signal task 6e888423's
|
|
67
|
-
* recovery-git-commit exemption keys off: "this session/task DID have
|
|
68
|
-
* a real operator approval and it merely aged out" is safe to treat
|
|
69
|
-
* differently from "this session/task was never approved" or "a task
|
|
70
|
-
* boundary just cleared it for a new task" — see
|
|
71
|
-
* src/runtime/recovery-git-commit.ts for the full argument.
|
|
72
|
-
*/
|
|
73
|
-
expired: boolean;
|
|
74
|
-
/**
|
|
75
|
-
* True when a marker FILE existed at the expected path but failed
|
|
76
|
-
* signature verification (harness/f9485cc7): missing `signature`/`alg`
|
|
77
|
-
* fields (a legacy pre-signing marker, or a marker planted without the
|
|
78
|
-
* operator-side key), a mismatched `alg`, or a signature that does not
|
|
79
|
-
* verify against the current key. Distinct from the marker being
|
|
80
|
-
* simply absent (`forged: false`, `matched: false`) so a caller can
|
|
81
|
-
* log/alert on an active forgery attempt instead of the routine
|
|
82
|
-
* "nobody has approved yet" case. `matched` is always false when
|
|
83
|
-
* `forged` is true — a forged marker never satisfies the gate,
|
|
84
|
-
* regardless of `approval_lifecycle.max_age`. A transient I/O read
|
|
85
|
-
* failure (`forged: false`, `matched: false`) is kept distinct from
|
|
86
|
-
* both: it is neither "no marker" nor evidence of tampering, just a
|
|
87
|
-
* marker whose integrity cannot be proven right now.
|
|
88
|
-
*/
|
|
89
|
-
forged: boolean;
|
|
90
|
-
}
|
|
91
|
-
export interface CheckApprovalMarkerOptions {
|
|
92
|
-
/**
|
|
93
|
-
* Max marker age in milliseconds (agent-tasks/d8ee60ca). When set,
|
|
94
|
-
* a marker whose `approvedAt` is older than `now - maxAgeMs` is
|
|
95
|
-
* treated as expired and returns `matched:false` with an
|
|
96
|
-
* "expired" detail. When omitted, the marker has no TTL — the
|
|
97
|
-
* legacy contract (one approval per session, no expiry).
|
|
98
|
-
*/
|
|
99
|
-
maxAgeMs?: number;
|
|
100
|
-
/** Override "now" for deterministic tests. */
|
|
101
|
-
now?: Date;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Gate-side: is the per-session marker file present, readable, AND
|
|
105
|
-
* validly signed? (harness/f9485cc7 — this replaced the earlier
|
|
106
|
-
* "existence is enough" contract: a marker's mere presence used to
|
|
107
|
-
* satisfy the gate even with a malformed or corrupted body, on the
|
|
108
|
-
* theory that Edit/Write/Bash being gated meant only the operator could
|
|
109
|
-
* ever create the file. That theory holds only as long as no OTHER
|
|
110
|
-
* write primitive reaches `harness.generated/` — exactly the invariant
|
|
111
|
-
* this signing scheme no longer has to trust blindly.) A marker with no
|
|
112
|
-
* `signature`, a wrong `alg`, or a signature that fails to verify is
|
|
113
|
-
* REJECTED — see `MarkerCheck.forged` — with the SAME `matched: false`
|
|
114
|
-
* outcome as no marker at all, but a distinct, forgery-specific detail
|
|
115
|
-
* string so callers can tell the two apart for audit.
|
|
116
|
-
*
|
|
117
|
-
* `opts.maxAgeMs` (agent-tasks/d8ee60ca): when set, a validly-signed
|
|
118
|
-
* marker whose `approvedAt` is older than the cutoff returns
|
|
119
|
-
* `matched:false` with an "expired" detail so the agent gets the same
|
|
120
|
-
* "no approval" UX as a never-approved session and must re-approve.
|
|
121
|
-
* Expiry is only evaluated AFTER signature verification succeeds — an
|
|
122
|
-
* unsigned/forged marker is rejected outright, never "expired".
|
|
123
|
-
*/
|
|
124
|
-
export declare function checkApprovalMarker(generatedDir: string, sessionId: string, opts?: CheckApprovalMarkerOptions): MarkerCheck;
|
|
125
|
-
/** Clear the per-session marker (used by `harness approve --revoke` and tests). */
|
|
126
|
-
export declare function clearApprovalMarker(generatedDir: string, sessionId: string): void;
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
// Session-scoped approval marker file (the signed filesystem source that
|
|
2
|
-
// is the gate's only approval authority), split out of the former monolithic
|
|
3
|
-
// understanding-before-execution-runtime.ts (structural concentration
|
|
4
|
-
// slice 2, agent-tasks 348a4d42). Pure move: see
|
|
5
|
-
// src/policy-packs/builtin/understanding-before-execution/index.ts for
|
|
6
|
-
// the re-exported public surface.
|
|
7
|
-
import * as fs from "node:fs";
|
|
8
|
-
import * as path from "node:path";
|
|
9
|
-
import { atomicWriteFile } from "../../../io/atomic-write.js";
|
|
10
|
-
import { readRegularFileRejectingSymlink } from "../../../io/read-regular-file.js";
|
|
11
|
-
import { signMarker, verifyMarkerSignature } from "../../../runtime/approval-signing.js";
|
|
12
|
-
import { rejectMalformedSessionId } from "../../../runtime/reject-malformed-session-id.js";
|
|
13
|
-
import { safeJsonParse } from "../../../io/safe-json-parse.js";
|
|
14
|
-
import { readActiveClaim } from "./active-claim.js";
|
|
15
|
-
export const APPROVAL_MARKER_DIRNAME = ".approvals";
|
|
16
|
-
/** Filesystem path of the per-session approval marker. */
|
|
17
|
-
export function approvalMarkerPathFor(generatedDir, sessionId) {
|
|
18
|
-
rejectMalformedSessionId(sessionId);
|
|
19
|
-
return path.join(generatedDir, APPROVAL_MARKER_DIRNAME, sessionId);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Operator-side: write the marker file the gate consults. Atomic so a
|
|
23
|
-
* crash mid-write cannot leave a half-empty file the gate would accept
|
|
24
|
-
* as approved. Caller is `harness approve understanding`, which the
|
|
25
|
-
* operator runs from their un-hooked shell; if the agent could call
|
|
26
|
-
* this path the gate's value would collapse, so it lives behind the
|
|
27
|
-
* approve CLI rather than as a generally importable verb.
|
|
28
|
-
*
|
|
29
|
-
* The marker is HMAC-signed (harness/f9485cc7) over (sessionId,
|
|
30
|
-
* approvedAt, approvedBy, reportContentHash), plus the claimTaskId every
|
|
31
|
-
* marker this writer signs carries (see `canonicalPayload`), using an operator-side key
|
|
32
|
-
* lazily generated at `<generatedDir>/.approval-signing.key` — see
|
|
33
|
-
* `src/runtime/approval-signing.ts` for the key-management contract and
|
|
34
|
-
* the honest trust model. Mode 0600 on the marker file itself, best-
|
|
35
|
-
* effort (matches the signing key's own permission convention); this is
|
|
36
|
-
* defense-in-depth alongside the signature, not a substitute for it.
|
|
37
|
-
*
|
|
38
|
-
* Task binding (task 5018c0c4): every marker this writer signs records
|
|
39
|
-
* the task id of the active claim at the moment of writing (`null` when
|
|
40
|
-
* none is held), unless the caller passes `claimTaskId` explicitly. The
|
|
41
|
-
* binding is resolved here, at the one writer, so no approve path (the
|
|
42
|
-
* `harness approve understanding` CLI, the hook's auto-approval path)
|
|
43
|
-
* can mint an unbound session marker. Only the understanding gate's
|
|
44
|
-
* session-marker reader enforces it, and only outside
|
|
45
|
-
* `approval_lifecycle: { mode: session }` (the field is written in every
|
|
46
|
-
* mode so a later mode change takes effect); the branch-protection marker, which
|
|
47
|
-
* shares this writer under its own id, carries the field unused.
|
|
48
|
-
*/
|
|
49
|
-
export function writeApprovalMarker(generatedDir, sessionId, marker) {
|
|
50
|
-
const filePath = approvalMarkerPathFor(generatedDir, sessionId);
|
|
51
|
-
const claimTaskId = marker.claimTaskId !== undefined ? marker.claimTaskId : readActiveClaim(generatedDir);
|
|
52
|
-
const signed = signMarker(generatedDir, sessionId, { ...marker, claimTaskId });
|
|
53
|
-
atomicWriteFile(filePath, `${JSON.stringify(signed, null, 2)}\n`, { mode: 0o600 });
|
|
54
|
-
return filePath;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Gate-side: is the per-session marker file present, readable, AND
|
|
58
|
-
* validly signed? (harness/f9485cc7 — this replaced the earlier
|
|
59
|
-
* "existence is enough" contract: a marker's mere presence used to
|
|
60
|
-
* satisfy the gate even with a malformed or corrupted body, on the
|
|
61
|
-
* theory that Edit/Write/Bash being gated meant only the operator could
|
|
62
|
-
* ever create the file. That theory holds only as long as no OTHER
|
|
63
|
-
* write primitive reaches `harness.generated/` — exactly the invariant
|
|
64
|
-
* this signing scheme no longer has to trust blindly.) A marker with no
|
|
65
|
-
* `signature`, a wrong `alg`, or a signature that fails to verify is
|
|
66
|
-
* REJECTED — see `MarkerCheck.forged` — with the SAME `matched: false`
|
|
67
|
-
* outcome as no marker at all, but a distinct, forgery-specific detail
|
|
68
|
-
* string so callers can tell the two apart for audit.
|
|
69
|
-
*
|
|
70
|
-
* `opts.maxAgeMs` (agent-tasks/d8ee60ca): when set, a validly-signed
|
|
71
|
-
* marker whose `approvedAt` is older than the cutoff returns
|
|
72
|
-
* `matched:false` with an "expired" detail so the agent gets the same
|
|
73
|
-
* "no approval" UX as a never-approved session and must re-approve.
|
|
74
|
-
* Expiry is only evaluated AFTER signature verification succeeds — an
|
|
75
|
-
* unsigned/forged marker is rejected outright, never "expired".
|
|
76
|
-
*/
|
|
77
|
-
export function checkApprovalMarker(generatedDir, sessionId, opts = {}) {
|
|
78
|
-
// Construct the path defensively: a malformed sessionId must fail CLOSED
|
|
79
|
-
// here (no valid marker, so the gate blocks and demands approval), not
|
|
80
|
-
// throw out of the gate hook, which the top-level handler turns into a
|
|
81
|
-
// non-blocking exit that would let the gated tool proceed.
|
|
82
|
-
let filePath;
|
|
83
|
-
try {
|
|
84
|
-
filePath = approvalMarkerPathFor(generatedDir, sessionId);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
return {
|
|
88
|
-
matched: false,
|
|
89
|
-
detail: `invalid sessionId for approval marker: ${err instanceof Error ? err.message : String(err)}`,
|
|
90
|
-
marker: null,
|
|
91
|
-
expired: false,
|
|
92
|
-
forged: false,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
const approvalsDir = path.join(generatedDir, APPROVAL_MARKER_DIRNAME);
|
|
96
|
-
let approvalsDirStat;
|
|
97
|
-
try {
|
|
98
|
-
approvalsDirStat = fs.lstatSync(approvalsDir);
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
return {
|
|
102
|
-
matched: false,
|
|
103
|
-
detail: `no approval marker at ${filePath}`,
|
|
104
|
-
marker: null,
|
|
105
|
-
expired: false,
|
|
106
|
-
forged: false,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
if (!approvalsDirStat.isDirectory()) {
|
|
110
|
-
return {
|
|
111
|
-
matched: false,
|
|
112
|
-
detail: `approval marker containment refusal: ${approvalsDir} is not a plain directory`,
|
|
113
|
-
marker: null,
|
|
114
|
-
expired: false,
|
|
115
|
-
forged: false,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
// Shared symlink-rejecting read (src/io/read-regular-file.ts): the lstat
|
|
119
|
-
// reject is defense-in-depth against a planted symlink
|
|
120
|
-
// (agent-tasks/d39f160e); each failure mode keeps its distinct detail.
|
|
121
|
-
const read = readRegularFileRejectingSymlink(filePath);
|
|
122
|
-
if (read.kind === "missing") {
|
|
123
|
-
return {
|
|
124
|
-
matched: false,
|
|
125
|
-
detail: `no approval marker at ${filePath}`,
|
|
126
|
-
marker: null,
|
|
127
|
-
expired: false,
|
|
128
|
-
forged: false,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
if (read.kind === "symlink") {
|
|
132
|
-
return {
|
|
133
|
-
matched: false,
|
|
134
|
-
detail: `approval marker is a symlink, refusing for safety: ${filePath}`,
|
|
135
|
-
marker: null,
|
|
136
|
-
expired: false,
|
|
137
|
-
forged: false,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
if (read.kind === "not-regular") {
|
|
141
|
-
return {
|
|
142
|
-
matched: false,
|
|
143
|
-
detail: `approval marker path is not a regular file: ${filePath}`,
|
|
144
|
-
marker: null,
|
|
145
|
-
expired: false,
|
|
146
|
-
forged: false,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
if (read.kind === "unreadable") {
|
|
150
|
-
// A genuine I/O error reading an existing regular file (permissions
|
|
151
|
-
// changed mid-flight, etc.) — not evidence of tampering, but its
|
|
152
|
-
// signature cannot be proven either, so fail closed. Kept distinct
|
|
153
|
-
// from `forged` (no claim of an active forgery attempt).
|
|
154
|
-
return {
|
|
155
|
-
matched: false,
|
|
156
|
-
detail: `approval marker at ${filePath} exists but could not be read (I/O error); treating as unapproved since its signature cannot be verified`,
|
|
157
|
-
marker: null,
|
|
158
|
-
expired: false,
|
|
159
|
-
forged: false,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
// read.kind === "ok"
|
|
163
|
-
const parsed = safeJsonParse(read.content);
|
|
164
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
165
|
-
return {
|
|
166
|
-
matched: false,
|
|
167
|
-
detail: `forged/unsigned marker rejected: marker body at ${filePath} is not a JSON object`,
|
|
168
|
-
marker: null,
|
|
169
|
-
expired: false,
|
|
170
|
-
forged: true,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
const obj = parsed;
|
|
174
|
-
const verification = verifyMarkerSignature(generatedDir, sessionId, obj);
|
|
175
|
-
if (!verification.ok) {
|
|
176
|
-
if (verification.kind === "key-unavailable") {
|
|
177
|
-
// Fail-closed I/O problem (permission error / disk issue reading or
|
|
178
|
-
// creating the signing key), NOT evidence of an active forgery
|
|
179
|
-
// attempt — a marker written by the operator with a perfectly valid
|
|
180
|
-
// signature would also fail this exact check if the key file became
|
|
181
|
-
// unreadable. Kept distinct from `forged` (review LOW 1,
|
|
182
|
-
// harness/f9485cc7) so a broken key file doesn't read as an attack
|
|
183
|
-
// in audit output, mirroring the `read.kind === "unreadable"` branch
|
|
184
|
-
// above.
|
|
185
|
-
return {
|
|
186
|
-
matched: false,
|
|
187
|
-
detail: `approval marker at ${filePath} could not be verified: ${verification.reason}; treating as unapproved`,
|
|
188
|
-
marker: null,
|
|
189
|
-
expired: false,
|
|
190
|
-
forged: false,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
return {
|
|
194
|
-
matched: false,
|
|
195
|
-
detail: `forged/unsigned marker rejected: ${verification.reason} (${filePath})`,
|
|
196
|
-
marker: null,
|
|
197
|
-
expired: false,
|
|
198
|
-
forged: true,
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
const approvedAt = obj["approvedAt"];
|
|
202
|
-
const approvedBy = obj["approvedBy"];
|
|
203
|
-
const reportContentHash = typeof obj["reportContentHash"] === "string" ? obj["reportContentHash"] : null;
|
|
204
|
-
const marker = { approvedAt, approvedBy, reportContentHash };
|
|
205
|
-
// Signature verification above already rejected a malformed binding.
|
|
206
|
-
if (Object.prototype.hasOwnProperty.call(obj, "claimTaskId")) {
|
|
207
|
-
marker.claimTaskId = obj["claimTaskId"];
|
|
208
|
-
}
|
|
209
|
-
if (opts.maxAgeMs !== undefined) {
|
|
210
|
-
const approvedAtMs = Date.parse(approvedAt);
|
|
211
|
-
if (Number.isFinite(approvedAtMs)) {
|
|
212
|
-
const nowMs = (opts.now ?? new Date()).getTime();
|
|
213
|
-
const ageMs = nowMs - approvedAtMs;
|
|
214
|
-
if (ageMs > opts.maxAgeMs) {
|
|
215
|
-
const ageMin = Math.round(ageMs / 60_000);
|
|
216
|
-
const maxMin = Math.round(opts.maxAgeMs / 60_000);
|
|
217
|
-
// KEEP IN SYNC: describeMarkerTtlExpiry (expiry-reason.ts) parses this detail.
|
|
218
|
-
return {
|
|
219
|
-
matched: false,
|
|
220
|
-
detail: `approval marker ${path.basename(filePath)} expired: age ${ageMin}m > max ${maxMin}m (approved at ${approvedAt})`,
|
|
221
|
-
marker,
|
|
222
|
-
expired: true,
|
|
223
|
-
forged: false,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return {
|
|
229
|
-
matched: true,
|
|
230
|
-
detail: `approved via marker ${path.basename(filePath)}: approved at ${approvedAt} by ${approvedBy}, signature verified`,
|
|
231
|
-
marker,
|
|
232
|
-
expired: false,
|
|
233
|
-
forged: false,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
/** Clear the per-session marker (used by `harness approve --revoke` and tests). */
|
|
237
|
-
export function clearApprovalMarker(generatedDir, sessionId) {
|
|
238
|
-
try {
|
|
239
|
-
fs.rmSync(approvalMarkerPathFor(generatedDir, sessionId));
|
|
240
|
-
}
|
|
241
|
-
catch {
|
|
242
|
-
/* already gone */
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
//# sourceMappingURL=markers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/markers.ts"],"names":[],"mappings":"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"}
|
package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export type MeasuredHarness = "claude-code" | "codex";
|
|
2
|
-
export interface MeasuredPermissionMode {
|
|
3
|
-
readonly harness: MeasuredHarness;
|
|
4
|
-
readonly permissionMode: string;
|
|
5
|
-
/** Repo-relative path under dogfood/ug-auto-mode-signals/payloads/. */
|
|
6
|
-
readonly fixture: string;
|
|
7
|
-
}
|
|
8
|
-
/** Repo-relative directory every registry fixture must live in. */
|
|
9
|
-
export declare const MEASURED_FIXTURES_DIR = "dogfood/ug-auto-mode-signals/payloads";
|
|
10
|
-
/**
|
|
11
|
-
* Which harness a fixture file under {@link MEASURED_FIXTURES_DIR} was
|
|
12
|
-
* captured from, by file-name convention: `codex-*` is Codex, anything
|
|
13
|
-
* else is Claude Code. Shared with the sync test so the convention has
|
|
14
|
-
* one definition.
|
|
15
|
-
*/
|
|
16
|
-
export declare function harnessForFixtureFile(basename: string): MeasuredHarness;
|
|
17
|
-
export declare const MEASURED_PERMISSION_MODES: ReadonlyArray<MeasuredPermissionMode>;
|
|
18
|
-
/**
|
|
19
|
-
* True when the given HARNESS has a measured fixture for this exact
|
|
20
|
-
* literal. `auto_approve.harnesses` (docs/decisions/2026-08-27-ug-auto-mode-approval.md,
|
|
21
|
-
* Slice 2) scopes which harnesses' PreToolUse hooks may take the auto
|
|
22
|
-
* path at all, so "measured" is checked per listed harness, not across
|
|
23
|
-
* the whole registry: a literal measured only for Claude Code is not
|
|
24
|
-
* evidence that Codex ever emits it. Exact string equality: no case
|
|
25
|
-
* folding, no wildcards.
|
|
26
|
-
*/
|
|
27
|
-
export declare function isMeasuredPermissionModeFor(literal: string, harness: MeasuredHarness): boolean;
|
|
28
|
-
/** Sorted, de-duplicated list of every literal measured for HARNESS. */
|
|
29
|
-
export declare function measuredPermissionModeLiteralsFor(harness: MeasuredHarness): string[];
|