@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,135 +0,0 @@
|
|
|
1
|
-
import { type DeletionTargetVerdict, type EnvironmentResolution, type RiskProfile, type WhenClauseResult } from "../runtime/index.js";
|
|
2
|
-
import type { Manifest } from "../schema/index.js";
|
|
3
|
-
import { type EventInputSeams } from "./event-input.js";
|
|
4
|
-
import { type LoaderOptions } from "./loader.js";
|
|
5
|
-
export interface ExplainPolicyOptions extends EventInputSeams, LoaderOptions {
|
|
6
|
-
/** Path to the tool-event JSON file (the `--event` argument). */
|
|
7
|
-
eventPath: string;
|
|
8
|
-
/** Emit JSON instead of YAML. */
|
|
9
|
-
json?: boolean;
|
|
10
|
-
/** Inject the resolved manifest (tests); bypasses `loadManifest`. */
|
|
11
|
-
manifest?: Manifest;
|
|
12
|
-
/** Inject env vars for `env_var_patterns` (tests); defaults to `process.env`. */
|
|
13
|
-
env?: Record<string, string | undefined>;
|
|
14
|
-
/** Inject the kube context (tests); bypasses `~/.kube/config`. */
|
|
15
|
-
kubeContext?: string;
|
|
16
|
-
/** Inject the kube namespace (tests); bypasses `~/.kube/config`. */
|
|
17
|
-
kubeNamespace?: string;
|
|
18
|
-
/**
|
|
19
|
-
* cwd `session_start_preflight.setup`'s per-repo project layer is
|
|
20
|
-
* derived from when `opts.project` is absent (task c88461c1, review
|
|
21
|
-
* round 2, decision D-021b): the same `deriveProjectName` helper
|
|
22
|
-
* `harness session-start preflight` and `harness doctor` also feed
|
|
23
|
-
* their own `loadManifest` call from, so all three consumers agree on
|
|
24
|
-
* which project layer applies to a given cwd instead of `explain-
|
|
25
|
-
* policy` silently reporting the base/machine value for a repo whose
|
|
26
|
-
* producer is actually reading a project layer. Defaults to
|
|
27
|
-
* `process.cwd()`; tests inject a fixture repo dir to stay hermetic
|
|
28
|
-
* against the real cwd.
|
|
29
|
-
*/
|
|
30
|
-
cwd?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Which resolved layer decided `session_start_preflight.setup` (task
|
|
34
|
-
* c88461c1): "project" when the resolved project-override layer
|
|
35
|
-
* itself declares the key, "machine" when a resolved machine-override
|
|
36
|
-
* layer declares it (and no project layer does), "base" otherwise
|
|
37
|
-
* (the base manifest, or the schema default when nothing declares the
|
|
38
|
-
* key at all). Mirrors the loader's own last-wins precedence
|
|
39
|
-
* (`applyLayers(baseRaw, ...machineLayers, projectLayer)`,
|
|
40
|
-
* `src/overrides/merge.ts`): the project layer is checked first since
|
|
41
|
-
* it is the highest-precedence layer, then machine layers from the
|
|
42
|
-
* last-applied (highest-precedence) one back to the first.
|
|
43
|
-
*
|
|
44
|
-
* "unresolvable" (task c88461c1, review round 3 residual; task
|
|
45
|
-
* `1c4eb3ea` of the batch-44 follow-up run): the cwd-derived project-scoped SECOND
|
|
46
|
-
* load itself threw (a malformed project layer, an unreadable file).
|
|
47
|
-
* Deliberately NOT "base": the base/machine values were never actually
|
|
48
|
-
* re-read on this path (the plain load above them; see the round-3
|
|
49
|
-
* comment this residual corrected), so attributing the result to
|
|
50
|
-
* "base" would claim a value the base layer may not carry. `setup`
|
|
51
|
-
* degrades to `false` alongside it, matching the producer's own
|
|
52
|
-
* `setupEnabled` catch (`src/cli/session-start/index.ts`), so the two
|
|
53
|
-
* agree on a scoped-load failure instead of only on a healthy load.
|
|
54
|
-
*/
|
|
55
|
-
export type SessionStartPreflightLayerSource = "base" | "machine" | "project" | "unresolvable";
|
|
56
|
-
interface ExplainPolicyProjection {
|
|
57
|
-
policy: string;
|
|
58
|
-
description: string;
|
|
59
|
-
trigger: {
|
|
60
|
-
event: string;
|
|
61
|
-
match?: string;
|
|
62
|
-
path_match?: string;
|
|
63
|
-
bash_match?: string;
|
|
64
|
-
matched: boolean;
|
|
65
|
-
};
|
|
66
|
-
classifier: RiskProfile;
|
|
67
|
-
environment: EnvironmentResolution;
|
|
68
|
-
/**
|
|
69
|
-
* Which parts of the hook's evaluation this verb mirrors and which it
|
|
70
|
-
* deliberately does not (task 7c3919a2). `envelope_enrichment` lists the
|
|
71
|
-
* Bash-prefix merges shared with `harness policy intercept`;
|
|
72
|
-
* `not_evaluated` lists what the hook does that this hypothetical,
|
|
73
|
-
* read-free verb does not.
|
|
74
|
-
*/
|
|
75
|
-
parity: {
|
|
76
|
-
envelope_enrichment: string[];
|
|
77
|
-
not_evaluated: string[];
|
|
78
|
-
};
|
|
79
|
-
/** Static deletion-target verdict (task d03af8f6); null when the
|
|
80
|
-
* event's command is not a recognized deletion verb. */
|
|
81
|
-
deletion_target: DeletionTargetVerdict | null;
|
|
82
|
-
/**
|
|
83
|
-
* Resolved `session_start_preflight` config (task 30183330), shown
|
|
84
|
-
* only when the explained policy is one of the init-generated
|
|
85
|
-
* `preflight-before-*` gates (name starts with `preflight-before-`):
|
|
86
|
-
* this is the knob that decides whether the `harness session-start
|
|
87
|
-
* preflight` / `harness preflight` producer passes `--setup` to the
|
|
88
|
-
* `preflight run` invocation whose `ready:true` result these policies
|
|
89
|
-
* gate on. Omitted for every other policy; it has no bearing on
|
|
90
|
-
* their evaluation (review round 3 residual; task `1c4eb3ea`: the
|
|
91
|
-
* scoped SECOND load below this field's assignment site runs ONLY
|
|
92
|
-
* when this condition is already true, so a policy this block is
|
|
93
|
-
* never rendered for never pays for that extra load either).
|
|
94
|
-
* `source` (task c88461c1) names which resolved layer decided the
|
|
95
|
-
* value: `"base"` (also covers an injected `opts.manifest`, which
|
|
96
|
-
* carries no per-layer provenance to attribute), `"machine"`,
|
|
97
|
-
* `"project"` (the cwd-derived per-repo layer), or `"unresolvable"`
|
|
98
|
-
* (review round 3 residual; task `1c4eb3ea`: the scoped load itself
|
|
99
|
-
* threw, `setup` degrades to `false` alongside it). This function
|
|
100
|
-
* derives that project name itself, from `opts.cwd`, via the SAME
|
|
101
|
-
* `deriveProjectName` helper `harness session-start preflight` feeds
|
|
102
|
-
* through `LoaderOptions.project` (review round 2, decision D-021b:
|
|
103
|
-
* without this, an operator running `explain-policy` with no
|
|
104
|
-
* `--project` in a repo that DOES have a project layer would see the
|
|
105
|
-
* base/machine value while the producer itself reads the project
|
|
106
|
-
* layer, see src/cli/session-start/index.ts).
|
|
107
|
-
*/
|
|
108
|
-
session_start_preflight?: {
|
|
109
|
-
setup: boolean;
|
|
110
|
-
source: SessionStartPreflightLayerSource;
|
|
111
|
-
};
|
|
112
|
-
when: {
|
|
113
|
-
declared: false;
|
|
114
|
-
} | {
|
|
115
|
-
declared: true;
|
|
116
|
-
matched: boolean;
|
|
117
|
-
clauses: WhenClauseResult[];
|
|
118
|
-
unclassifiedFallback: boolean;
|
|
119
|
-
};
|
|
120
|
-
/** trigger AND when — would this policy fire on this event? */
|
|
121
|
-
applies: boolean;
|
|
122
|
-
}
|
|
123
|
-
export interface ExplainPolicyResult {
|
|
124
|
-
output: string;
|
|
125
|
-
projection: ExplainPolicyProjection;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Explain whether `policyName` applies to the event at `opts.eventPath`.
|
|
129
|
-
*
|
|
130
|
-
* Throws `HarnessExitError(EX_USAGE)` when the named policy is not
|
|
131
|
-
* declared in the manifest, and `HarnessExitError(EX_NOINPUT)` (via
|
|
132
|
-
* `loadEventEnvelope`) when the event file is missing or malformed.
|
|
133
|
-
*/
|
|
134
|
-
export declare function explainPolicy(policyName: string, opts: ExplainPolicyOptions): ExplainPolicyResult;
|
|
135
|
-
export {};
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
// Phase 7 #5 — `harness explain-policy` CLI entrypoint.
|
|
2
|
-
//
|
|
3
|
-
// Risk Gate debug verb: given a policy name and a tool-event JSON file,
|
|
4
|
-
// explain whether the policy would APPLY to that event, and why. A
|
|
5
|
-
// policy applies only when its `trigger:` matches AND — when declared —
|
|
6
|
-
// every `when:` clause holds against the enriched Action Envelope. This
|
|
7
|
-
// verb shows both verdicts side by side: the trigger match, the Risk
|
|
8
|
-
// Classifier profile, the resolved environment, and a per-clause `when:`
|
|
9
|
-
// breakdown, so an operator authoring a risk policy sees exactly which
|
|
10
|
-
// clause admitted an action or held it back.
|
|
11
|
-
//
|
|
12
|
-
// Distinct from `harness explain <policy> --trace`: that replays the
|
|
13
|
-
// LAST recorded decision from the evidence ledger; `explain-policy`
|
|
14
|
-
// evaluates a hypothetical event live and reads nothing from the ledger.
|
|
15
|
-
import * as fs from "node:fs";
|
|
16
|
-
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
17
|
-
import { buildActionEnvelope, classifyRisk, deriveProjectName, evaluateWhen, policyMatchesEvent, resolveDeletionTarget, resolveEnvironment, resolveKubeContext, } from "../runtime/index.js";
|
|
18
|
-
import { extractShellCommand } from "../runtime/tool-name-aliases.js";
|
|
19
|
-
import { DEFAULT_SAFE_DELETION_ROOTS } from "../schema/risk.js";
|
|
20
|
-
import { resolveBashPrefixEnrichment } from "./policy/risk-envelope-enrichment.js";
|
|
21
|
-
import { loadEventEnvelope } from "./event-input.js";
|
|
22
|
-
import { EX_USAGE, HarnessExitError } from "./exit-codes.js";
|
|
23
|
-
import { loadManifest } from "./loader.js";
|
|
24
|
-
/**
|
|
25
|
-
* Does `filePath`'s raw YAML explicitly declare `session_start_preflight.setup`?
|
|
26
|
-
*
|
|
27
|
-
* "Declare" means KEY PRESENCE, not "holds a boolean" (review round 2,
|
|
28
|
-
* finding: a tombstone, `session_start_preflight: null` or `{setup:
|
|
29
|
-
* null}`, both honoured by `mergeValue` in src/overrides/merge.ts as
|
|
30
|
-
* "delete whatever a lower layer set, falling back to the schema
|
|
31
|
-
* default", is exactly as much a deliberate declaration by THIS layer
|
|
32
|
-
* as `setup: true`/`false` is; it just resolves to a different final
|
|
33
|
-
* value. Attributing a tombstoned layer's decision to whichever lower
|
|
34
|
-
* layer happens to also declare the key (or to "base" when none does)
|
|
35
|
-
* would name the WRONG layer as the one that decided the merged
|
|
36
|
-
* result.
|
|
37
|
-
*/
|
|
38
|
-
function layerDeclaresSetup(filePath) {
|
|
39
|
-
try {
|
|
40
|
-
const raw = fs.readFileSync(filePath, "utf8");
|
|
41
|
-
const parsed = parseYaml(raw);
|
|
42
|
-
if (parsed === null || typeof parsed !== "object")
|
|
43
|
-
return false;
|
|
44
|
-
if (!("session_start_preflight" in parsed))
|
|
45
|
-
return false;
|
|
46
|
-
const block = parsed.session_start_preflight;
|
|
47
|
-
if (block === null)
|
|
48
|
-
return true; // whole-block tombstone
|
|
49
|
-
if (typeof block !== "object" || Array.isArray(block))
|
|
50
|
-
return false;
|
|
51
|
-
return "setup" in block;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Re-reads the resolved layer files (independent of the already-merged
|
|
59
|
-
* `manifest` object, which no longer carries per-layer provenance once
|
|
60
|
-
* `applyLayers` has folded them together) to attribute the decided
|
|
61
|
-
* `session_start_preflight.setup` value to the layer that set it.
|
|
62
|
-
*/
|
|
63
|
-
function resolveSessionStartPreflightSource(resolved) {
|
|
64
|
-
if (resolved.projectLayer !== null && layerDeclaresSetup(resolved.projectLayer)) {
|
|
65
|
-
return "project";
|
|
66
|
-
}
|
|
67
|
-
for (let i = resolved.machineLayers.length - 1; i >= 0; i--) {
|
|
68
|
-
if (layerDeclaresSetup(resolved.machineLayers[i]))
|
|
69
|
-
return "machine";
|
|
70
|
-
}
|
|
71
|
-
return "base";
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Explain whether `policyName` applies to the event at `opts.eventPath`.
|
|
75
|
-
*
|
|
76
|
-
* Throws `HarnessExitError(EX_USAGE)` when the named policy is not
|
|
77
|
-
* declared in the manifest, and `HarnessExitError(EX_NOINPUT)` (via
|
|
78
|
-
* `loadEventEnvelope`) when the event file is missing or malformed.
|
|
79
|
-
*/
|
|
80
|
-
export function explainPolicy(policyName, opts) {
|
|
81
|
-
// `resolved` is only available on the real `loadManifest(opts)` path:
|
|
82
|
-
// an injected `opts.manifest` already IS the merged result and
|
|
83
|
-
// carries no per-layer provenance, so `session_start_preflight.source`
|
|
84
|
-
// falls back to "base" in that case (see the field's doc comment).
|
|
85
|
-
//
|
|
86
|
-
// PLAIN load (task c88461c1, review round 3, decision D-028): every
|
|
87
|
-
// check this verb performs against `manifest` below -- finding the
|
|
88
|
-
// named policy, trigger matching, the Risk Classifier, environment
|
|
89
|
-
// resolution, deletion-target resolution, and the `when:` evaluation
|
|
90
|
-
// -- reads the base/machine/explicit-`--project` manifest only, an
|
|
91
|
-
// explicit `opts.project` still wins outright but NOTHING is derived
|
|
92
|
-
// from cwd here. This mirrors `harness policy intercept`
|
|
93
|
-
// (src/cli/policy/intercept.ts) and `harness dry-run`
|
|
94
|
-
// (src/cli/dry-run.ts), the two enforcement-facing verbs that decide
|
|
95
|
-
// a policy's real trigger verdict: neither ever consults a derived
|
|
96
|
-
// project layer, so this manifest must not either, or an operator's
|
|
97
|
-
// "would this apply" answer could disagree with what actually
|
|
98
|
-
// enforces. Only `session_start_preflight.setup` (and its `source`
|
|
99
|
-
// attribution) below get a project-scoped SECOND load: routing a
|
|
100
|
-
// derived layer through THIS one, unrelated load would let it
|
|
101
|
-
// silently reach the policy engine this verb evaluates, for zero
|
|
102
|
-
// benefit to the one key that needs it.
|
|
103
|
-
let manifest;
|
|
104
|
-
let resolvedPaths;
|
|
105
|
-
if (opts.manifest) {
|
|
106
|
-
manifest = opts.manifest;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const loaded = loadManifest(opts);
|
|
110
|
-
manifest = loaded.manifest;
|
|
111
|
-
resolvedPaths = loaded.resolved;
|
|
112
|
-
}
|
|
113
|
-
const policy = manifest.policies.find((p) => p.name === policyName);
|
|
114
|
-
if (!policy) {
|
|
115
|
-
const available = manifest.policies.map((p) => p.name).join(", ") || "(none)";
|
|
116
|
-
throw new HarnessExitError(`no policy named "${policyName}" declared; available: ${available}`, EX_USAGE);
|
|
117
|
-
}
|
|
118
|
-
// `session_start_preflight.setup` / `source` (task c88461c1, review
|
|
119
|
-
// round 2 decision D-021b; scope narrowed to this one key, review
|
|
120
|
-
// round 3 decision D-028; gated on the name-prefix check below,
|
|
121
|
-
// review round 3 residual, task `1c4eb3ea`): an explicit
|
|
122
|
-
// `opts.project` still wins outright; otherwise derive the project
|
|
123
|
-
// name from `opts.cwd` (defaulting to `process.cwd()`) via the SAME
|
|
124
|
-
// `deriveProjectName` the two other producers reach through
|
|
125
|
-
// `resolveScopedProjectName` (src/runtime/git-context.ts; this verb keeps
|
|
126
|
-
// its own copy with an `undefined` fallback, task f1eb1c5c), so this
|
|
127
|
-
// verb's `setup`/`source` reflect the layer the producer would read for
|
|
128
|
-
// this cwd, WITHOUT letting that derived layer reach the policy evaluation above. An injected
|
|
129
|
-
// `opts.manifest` carries no per-layer provenance to re-derive from
|
|
130
|
-
// and always reports "base" (unchanged from before this task).
|
|
131
|
-
//
|
|
132
|
-
// ONLY COMPUTED FOR `preflight-before-*` POLICIES (moved behind this
|
|
133
|
-
// check, review round 3 residual, task `1c4eb3ea`): the block below
|
|
134
|
-
// is rendered into the projection ONLY for those policies (see
|
|
135
|
-
// `ExplainPolicyProjection.session_start_preflight`'s doc comment),
|
|
136
|
-
// so a caller explaining any OTHER policy no longer pays for a
|
|
137
|
-
// second manifest load whose result it can never see.
|
|
138
|
-
let sessionStartPreflightSetup = false;
|
|
139
|
-
let sessionStartPreflightSource = "base";
|
|
140
|
-
if (policy.name.startsWith("preflight-before-")) {
|
|
141
|
-
sessionStartPreflightSetup = manifest.session_start_preflight.setup;
|
|
142
|
-
sessionStartPreflightSource = resolvedPaths
|
|
143
|
-
? resolveSessionStartPreflightSource(resolvedPaths)
|
|
144
|
-
: "base";
|
|
145
|
-
if (!opts.manifest) {
|
|
146
|
-
try {
|
|
147
|
-
const scoped = loadManifest({
|
|
148
|
-
...opts,
|
|
149
|
-
project: opts.project ?? deriveProjectName(opts.cwd ?? process.cwd()) ?? undefined,
|
|
150
|
-
});
|
|
151
|
-
sessionStartPreflightSetup = scoped.manifest.session_start_preflight.setup;
|
|
152
|
-
sessionStartPreflightSource = resolveSessionStartPreflightSource(scoped.resolved);
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
// Review round 3 residual, task `1c4eb3ea`: degrade to
|
|
156
|
-
// setup:false / source:"unresolvable" rather than keeping the
|
|
157
|
-
// plain load's values, matching the producer's own
|
|
158
|
-
// `setupEnabled` catch (`src/cli/session-start/index.ts`),
|
|
159
|
-
// which degrades to `setup: false` on the identical failure
|
|
160
|
-
// instead of falling back to a base/machine value it never
|
|
161
|
-
// actually re-read on this path. "base" would misattribute
|
|
162
|
-
// the result to a layer this function never consulted here.
|
|
163
|
-
sessionStartPreflightSetup = false;
|
|
164
|
-
sessionStartPreflightSource = "unresolvable";
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
const { event, envelope: baseEnvelope } = loadEventEnvelope(opts.eventPath, opts, "explain-policy");
|
|
169
|
-
// Kube seams resolve together: if either is injected, skip the
|
|
170
|
-
// `~/.kube/config` read entirely — same contract as `resolve-env`.
|
|
171
|
-
const kube = opts.kubeContext !== undefined || opts.kubeNamespace !== undefined
|
|
172
|
-
? { context: opts.kubeContext ?? "", namespace: opts.kubeNamespace ?? "" }
|
|
173
|
-
: resolveKubeContext();
|
|
174
|
-
// Envelope enrichment shared with `harness policy intercept` (task
|
|
175
|
-
// 7c3919a2): the leading Bash prefix (inline `VAR=value`, `cd <path>
|
|
176
|
-
// &&`, `git switch|checkout <branch> &&`) is parsed and merged into
|
|
177
|
-
// the resolver inputs by the SAME helper the hook uses, so this verb
|
|
178
|
-
// cannot report `unknown` for a command the hook resolves to
|
|
179
|
-
// `production`. Only the envelope enrichment is shared; this verb
|
|
180
|
-
// still reads no ledger or evidence.
|
|
181
|
-
const enrichment = resolveBashPrefixEnrichment({
|
|
182
|
-
event,
|
|
183
|
-
manifest,
|
|
184
|
-
cwd: baseEnvelope.runtime.cwd,
|
|
185
|
-
cwdGitContext: {
|
|
186
|
-
repo: baseEnvelope.session.repo,
|
|
187
|
-
branch: baseEnvelope.session.branch,
|
|
188
|
-
sha: "",
|
|
189
|
-
},
|
|
190
|
-
env: opts.env ?? process.env,
|
|
191
|
-
kubeContext: kube.context,
|
|
192
|
-
kubeNamespace: kube.namespace,
|
|
193
|
-
user: baseEnvelope.runtime.user,
|
|
194
|
-
host: baseEnvelope.runtime.host,
|
|
195
|
-
now: new Date(baseEnvelope.timestamp),
|
|
196
|
-
});
|
|
197
|
-
const envelope = enrichment.git.repo === baseEnvelope.session.repo &&
|
|
198
|
-
enrichment.git.branch === baseEnvelope.session.branch
|
|
199
|
-
? baseEnvelope
|
|
200
|
-
: buildActionEnvelope(event, {
|
|
201
|
-
cwd: baseEnvelope.runtime.cwd,
|
|
202
|
-
git: enrichment.git,
|
|
203
|
-
user: baseEnvelope.runtime.user,
|
|
204
|
-
host: baseEnvelope.runtime.host,
|
|
205
|
-
now: new Date(baseEnvelope.timestamp),
|
|
206
|
-
});
|
|
207
|
-
const classifier = classifyRisk(envelope, manifest.risk.classifiers);
|
|
208
|
-
const environment = resolveEnvironment(envelope, manifest.environments.resolvers, {
|
|
209
|
-
env: enrichment.env,
|
|
210
|
-
kubeContext: kube.context,
|
|
211
|
-
kubeNamespace: kube.namespace,
|
|
212
|
-
});
|
|
213
|
-
// Static deletion-target resolution (task d03af8f6) — same "raw
|
|
214
|
-
// command only, no ambient cwd/env" contract as the runtime's own
|
|
215
|
-
// `enrichEnvelope`. See `deletion-target-resolve.ts`.
|
|
216
|
-
const explainShellCommand = extractShellCommand({ raw_input: envelope.raw_input });
|
|
217
|
-
const deletionTarget = explainShellCommand === null
|
|
218
|
-
? null
|
|
219
|
-
: resolveDeletionTarget(explainShellCommand, manifest.risk.safe_deletion_roots ?? DEFAULT_SAFE_DELETION_ROOTS);
|
|
220
|
-
const triggerMatched = policyMatchesEvent(policy, event);
|
|
221
|
-
const whenEval = policy.when !== undefined
|
|
222
|
-
? evaluateWhen(policy.when, { risk: classifier, environment, deletionTarget })
|
|
223
|
-
: undefined;
|
|
224
|
-
const projection = {
|
|
225
|
-
policy: policy.name,
|
|
226
|
-
description: policy.description,
|
|
227
|
-
trigger: {
|
|
228
|
-
event: policy.trigger.event,
|
|
229
|
-
...(policy.trigger.match !== undefined && { match: policy.trigger.match }),
|
|
230
|
-
...(policy.trigger.path_match !== undefined && {
|
|
231
|
-
path_match: policy.trigger.path_match,
|
|
232
|
-
}),
|
|
233
|
-
...(policy.trigger.bash_match !== undefined && {
|
|
234
|
-
bash_match: policy.trigger.bash_match,
|
|
235
|
-
}),
|
|
236
|
-
matched: triggerMatched,
|
|
237
|
-
},
|
|
238
|
-
classifier,
|
|
239
|
-
environment,
|
|
240
|
-
parity: {
|
|
241
|
-
envelope_enrichment: ["inline_env", "cd_git_context", "branch_switch_upgrade"],
|
|
242
|
-
not_evaluated: ["ledger_requires", "kubectl_target"],
|
|
243
|
-
},
|
|
244
|
-
deletion_target: deletionTarget,
|
|
245
|
-
...(policy.name.startsWith("preflight-before-") && {
|
|
246
|
-
session_start_preflight: {
|
|
247
|
-
setup: sessionStartPreflightSetup,
|
|
248
|
-
source: sessionStartPreflightSource,
|
|
249
|
-
},
|
|
250
|
-
}),
|
|
251
|
-
when: whenEval
|
|
252
|
-
? {
|
|
253
|
-
declared: true,
|
|
254
|
-
matched: whenEval.matched,
|
|
255
|
-
clauses: whenEval.clauses,
|
|
256
|
-
unclassifiedFallback: whenEval.unclassifiedFallback,
|
|
257
|
-
}
|
|
258
|
-
: { declared: false },
|
|
259
|
-
applies: triggerMatched && (whenEval ? whenEval.matched : true),
|
|
260
|
-
};
|
|
261
|
-
const output = opts.json
|
|
262
|
-
? `${JSON.stringify(projection, null, 2)}\n`
|
|
263
|
-
: stringifyYaml(projection, { lineWidth: 0 });
|
|
264
|
-
return { output, projection };
|
|
265
|
-
}
|
|
266
|
-
//# sourceMappingURL=explain-policy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explain-policy.js","sourceRoot":"","sources":["../../src/cli/explain-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/explain.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { type LedgerQueryResult } from "../policies/index.js";
|
|
2
|
-
import { type PolicyDecisionPayload } from "../io/ledger-record.js";
|
|
3
|
-
import { type ResolveReadSessionOptions } from "../runtime/session-id.js";
|
|
4
|
-
import { type LoaderOptions } from "./loader.js";
|
|
5
|
-
export type ExplainDecisionFilter = PolicyDecisionPayload["outcome"];
|
|
6
|
-
export interface ExplainOptions extends LoaderOptions {
|
|
7
|
-
json?: boolean;
|
|
8
|
-
trace?: boolean;
|
|
9
|
-
/** Session whose audit log to inspect for `--trace`. */
|
|
10
|
-
sessionId?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Read-path session resolution overrides (tests). When `sessionId` is
|
|
13
|
-
* not given, `resolveReadSessionId` discovers the live session from
|
|
14
|
-
* the newest Claude Code transcript; this seam lets tests stub that
|
|
15
|
-
* scan so they stay hermetic.
|
|
16
|
-
*/
|
|
17
|
-
sessionDiscovery?: ResolveReadSessionOptions;
|
|
18
|
-
/**
|
|
19
|
-
* When true, ignore the policy-name argument and trace the most recent
|
|
20
|
-
* decision recorded in the ledger (any policy). Implies --trace.
|
|
21
|
-
*/
|
|
22
|
-
last?: boolean;
|
|
23
|
-
/** When `last` is set, only consider decisions of this outcome. */
|
|
24
|
-
decisionFilter?: ExplainDecisionFilter;
|
|
25
|
-
/** Override the ledger fetcher (tests). */
|
|
26
|
-
fetchLedger?: (sessionId: string) => Promise<LedgerQueryResult>;
|
|
27
|
-
}
|
|
28
|
-
export interface ExplainResult {
|
|
29
|
-
output: string;
|
|
30
|
-
}
|
|
31
|
-
export declare function explain(policyName: string | undefined, opts?: ExplainOptions): Promise<ExplainResult>;
|
package/dist/cli/explain.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { stringify as stringifyYaml } from "yaml";
|
|
2
|
-
import { buildRecordHint, queryLedgerByTag, } from "../policies/index.js";
|
|
3
|
-
import { decisionSortKey, decodeLedgerContent, } from "../io/ledger-record.js";
|
|
4
|
-
import { resolveReadSessionId, } from "../runtime/session-id.js";
|
|
5
|
-
import { EX_FAIL, EX_USAGE, HarnessExitError } from "./exit-codes.js";
|
|
6
|
-
import { loadManifest } from "./loader.js";
|
|
7
|
-
function defaultFetcher(opts) {
|
|
8
|
-
return async (sessionId) => {
|
|
9
|
-
const { manifest } = loadManifest(opts);
|
|
10
|
-
const server = manifest.tools.mcp.find((m) => m.name === "grounding-mcp");
|
|
11
|
-
if (!server) {
|
|
12
|
-
return { kind: "degraded", reason: "grounding-mcp not declared in manifest" };
|
|
13
|
-
}
|
|
14
|
-
const command = Array.isArray(server.command)
|
|
15
|
-
? server.command
|
|
16
|
-
: server.command.trim().split(/\s+/);
|
|
17
|
-
return queryLedgerByTag({
|
|
18
|
-
mcpCommand: command,
|
|
19
|
-
...(server.env && { mcpEnv: server.env }),
|
|
20
|
-
sessionId,
|
|
21
|
-
timeoutMs: server.health?.timeout_ms ?? 5_000,
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function decodeAll(entries) {
|
|
26
|
-
const out = [];
|
|
27
|
-
for (const entry of entries) {
|
|
28
|
-
const payload = decodeLedgerContent(entry.content);
|
|
29
|
-
if (!payload)
|
|
30
|
-
continue;
|
|
31
|
-
out.push({ entry, payload });
|
|
32
|
-
}
|
|
33
|
-
return out;
|
|
34
|
-
}
|
|
35
|
-
function selectLatestForPolicy(entries, policyName) {
|
|
36
|
-
const matches = decodeAll(entries).filter((d) => d.payload.name === policyName);
|
|
37
|
-
if (matches.length === 0)
|
|
38
|
-
return null;
|
|
39
|
-
matches.sort((a, b) => decisionSortKey(b.entry, b.payload) - decisionSortKey(a.entry, a.payload));
|
|
40
|
-
return matches[0];
|
|
41
|
-
}
|
|
42
|
-
function selectLatestAny(entries, decisionFilter) {
|
|
43
|
-
const matches = decodeAll(entries).filter((d) => decisionFilter === undefined || d.payload.outcome === decisionFilter);
|
|
44
|
-
if (matches.length === 0)
|
|
45
|
-
return null;
|
|
46
|
-
matches.sort((a, b) => decisionSortKey(b.entry, b.payload) - decisionSortKey(a.entry, a.payload));
|
|
47
|
-
return matches[0];
|
|
48
|
-
}
|
|
49
|
-
export async function explain(policyName, opts = {}) {
|
|
50
|
-
const { manifest } = loadManifest(opts);
|
|
51
|
-
if (opts.last) {
|
|
52
|
-
const sessionId = resolveReadSessionId(opts.sessionId, opts.sessionDiscovery);
|
|
53
|
-
const fetch = opts.fetchLedger ?? defaultFetcher(opts);
|
|
54
|
-
const result = await fetch(sessionId);
|
|
55
|
-
if (result.kind === "degraded") {
|
|
56
|
-
throw new HarnessExitError(`cannot read audit log: ${result.reason}`, EX_FAIL);
|
|
57
|
-
}
|
|
58
|
-
const latest = selectLatestAny(result.entries, opts.decisionFilter);
|
|
59
|
-
if (!latest) {
|
|
60
|
-
const filterSuffix = opts.decisionFilter ? ` with outcome \`${opts.decisionFilter}\`` : "";
|
|
61
|
-
throw new HarnessExitError(`no recorded policy decisions${filterSuffix} for session \`${sessionId}\`; the ledger may be empty or grounding-mcp is unreachable`, EX_FAIL);
|
|
62
|
-
}
|
|
63
|
-
return { output: renderTrace(latest, manifest, sessionId, opts.json) };
|
|
64
|
-
}
|
|
65
|
-
if (policyName === undefined) {
|
|
66
|
-
throw new HarnessExitError("policy name is required (or pass --last to trace the most recent decision)", EX_USAGE);
|
|
67
|
-
}
|
|
68
|
-
const policy = manifest.policies.find((p) => p.name === policyName);
|
|
69
|
-
if (!policy) {
|
|
70
|
-
const available = manifest.policies.map((p) => p.name).join(", ") || "(none)";
|
|
71
|
-
throw new HarnessExitError(`no policy named "${policyName}" declared; available: ${available}`, EX_USAGE);
|
|
72
|
-
}
|
|
73
|
-
if (!opts.trace) {
|
|
74
|
-
// `operator_only: true` policies (task 2cc73f55) declare no
|
|
75
|
-
// `requires:` at all: there is no ledger contract to show, and no
|
|
76
|
-
// hint to build — the policy is an unconditional deny, full stop.
|
|
77
|
-
const projection = {
|
|
78
|
-
name: policy.name,
|
|
79
|
-
description: policy.description,
|
|
80
|
-
trigger: policy.trigger,
|
|
81
|
-
...(policy.requires !== undefined && { requires: policy.requires }),
|
|
82
|
-
// toSatisfy mirrors the deny-time hint surfaced by `harness policy
|
|
83
|
-
// intercept`, so a contributor reading the policy under `harness
|
|
84
|
-
// explain <policy>` sees the same contract a blocked operator
|
|
85
|
-
// sees in Claude Code. Built from the un-substituted ledger_tag
|
|
86
|
-
// template (e.g. `review:${PR_NUMBER}`) so it reads as the policy
|
|
87
|
-
// contract, not a specific event's instance.
|
|
88
|
-
...(policy.requires !== undefined && {
|
|
89
|
-
toSatisfy: buildRecordHint(policy.requires, policy.requires.ledger_tag),
|
|
90
|
-
}),
|
|
91
|
-
...(policy.operator_only === true && {
|
|
92
|
-
toSatisfy: "none — operator_only: true is an unconditional deny; no in-session evidence can ever satisfy it",
|
|
93
|
-
}),
|
|
94
|
-
hook: policy.hook,
|
|
95
|
-
enforcement: policy.enforcement,
|
|
96
|
-
note: "run with --trace to see the last evaluation's full decision trail",
|
|
97
|
-
};
|
|
98
|
-
const output = opts.json
|
|
99
|
-
? `${JSON.stringify(projection, null, 2)}\n`
|
|
100
|
-
: stringifyYaml(projection, { lineWidth: 0 });
|
|
101
|
-
return { output };
|
|
102
|
-
}
|
|
103
|
-
const sessionId = resolveReadSessionId(opts.sessionId, opts.sessionDiscovery);
|
|
104
|
-
const fetch = opts.fetchLedger ?? defaultFetcher(opts);
|
|
105
|
-
const result = await fetch(sessionId);
|
|
106
|
-
if (result.kind === "degraded") {
|
|
107
|
-
throw new HarnessExitError(`cannot read audit log: ${result.reason}`, EX_FAIL);
|
|
108
|
-
}
|
|
109
|
-
const latest = selectLatestForPolicy(result.entries, policyName);
|
|
110
|
-
if (!latest) {
|
|
111
|
-
throw new HarnessExitError(`no recorded evaluations for policy \`${policyName}\` in session \`${sessionId}\`; ` +
|
|
112
|
-
`the policy may not have fired yet, grounding-mcp is unreachable, or the ` +
|
|
113
|
-
`decisions landed under a different session (pass --session <id>)`, EX_FAIL);
|
|
114
|
-
}
|
|
115
|
-
return { output: renderTrace(latest, manifest, sessionId, opts.json) };
|
|
116
|
-
}
|
|
117
|
-
function renderTrace(latest, manifest, sessionId, json) {
|
|
118
|
-
const policy = manifest.policies.find((p) => p.name === latest.payload.name);
|
|
119
|
-
const trigger = policy?.trigger;
|
|
120
|
-
const projection = {
|
|
121
|
-
name: latest.payload.name,
|
|
122
|
-
decision: latest.payload.outcome,
|
|
123
|
-
enforcement: latest.payload.enforcement,
|
|
124
|
-
reason: latest.payload.reason,
|
|
125
|
-
ledgerTag: latest.payload.ledgerTag,
|
|
126
|
-
evaluatedAt: latest.payload.evaluatedAt,
|
|
127
|
-
triggerMatched: {
|
|
128
|
-
event: trigger?.event ?? "(unknown: policy not declared in current manifest)",
|
|
129
|
-
...(trigger?.match !== undefined && { match: trigger.match }),
|
|
130
|
-
...(trigger?.bash_match !== undefined && { bashMatch: trigger.bash_match }),
|
|
131
|
-
},
|
|
132
|
-
...(latest.payload.risk && { classifier: latest.payload.risk }),
|
|
133
|
-
...(latest.payload.environment && {
|
|
134
|
-
environment: latest.payload.environment,
|
|
135
|
-
}),
|
|
136
|
-
extract: latest.payload.extractValues,
|
|
137
|
-
...(latest.payload.requiresEval && { requiresEval: latest.payload.requiresEval }),
|
|
138
|
-
...(policy?.requires !== undefined && {
|
|
139
|
-
toSatisfy: buildRecordHint(policy.requires, latest.payload.ledgerTag),
|
|
140
|
-
}),
|
|
141
|
-
// operator_only: true (task 2cc73f55) — no requires: to build a hint
|
|
142
|
-
// from; the policy is an unconditional deny.
|
|
143
|
-
...(policy?.operator_only === true && {
|
|
144
|
-
toSatisfy: "none — operator_only: true is an unconditional deny; no in-session evidence can ever satisfy it",
|
|
145
|
-
}),
|
|
146
|
-
// M7: surface the fail-closed unclassified flag in the trace so an
|
|
147
|
-
// operator can distinguish a real critical-severity deny from a
|
|
148
|
-
// fail-closed unclassified one via `explain --trace [--json]`.
|
|
149
|
-
// Absent when the payload lacks the field (pre-M7 rows or genuine hits).
|
|
150
|
-
...(latest.payload.whenUnclassifiedFallback === true && {
|
|
151
|
-
whenUnclassifiedFallback: true,
|
|
152
|
-
}),
|
|
153
|
-
ledgerQuery: { verb: "ledger_summary", sessionId },
|
|
154
|
-
};
|
|
155
|
-
return json
|
|
156
|
-
? `${JSON.stringify(projection, null, 2)}\n`
|
|
157
|
-
: stringifyYaml(projection, { lineWidth: 0 });
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=explain.js.map
|
package/dist/cli/explain.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"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"}
|