@lannguyensi/harness 0.64.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/README.md +46 -42
- package/dist/cli/add/index.js +17 -21
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +2 -2
- package/dist/cli/adopt/derive.js +2 -19
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +1 -1
- package/dist/cli/adopt/index.js +1 -12
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +20 -35
- package/dist/cli/apply/apply.js +61 -136
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-codex-config.js +10 -58
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/apply/generate-memory-index.js +1 -2
- package/dist/cli/apply/generate-memory-index.js.map +1 -1
- package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
- package/dist/cli/apply/generate-opencode-config.js +74 -113
- package/dist/cli/apply/generate-opencode-config.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +11 -64
- package/dist/cli/apply/generate-settings.js +27 -132
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -1
- package/dist/cli/apply/index.js +1 -1
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +153 -1
- package/dist/cli/apply/install-codex-config.js +445 -70
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +13 -1
- package/dist/cli/apply/next-steps.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +0 -23
- package/dist/cli/bounded-stdin.js +2 -49
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/describe.d.ts +1 -1
- package/dist/cli/describe.js +0 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/diff/engine.d.ts +0 -11
- package/dist/cli/diff/engine.js +1 -17
- package/dist/cli/diff/engine.js.map +1 -1
- package/dist/cli/diff/index.js +14 -25
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/claude-mcp.d.ts +4 -19
- package/dist/cli/doctor/claude-mcp.js +11 -22
- package/dist/cli/doctor/claude-mcp.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +12 -14
- package/dist/cli/doctor/codex.js +31 -144
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +23 -345
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/hook-liveness.d.ts +56 -0
- package/dist/cli/doctor/hook-liveness.js +455 -0
- package/dist/cli/doctor/hook-liveness.js.map +1 -0
- package/dist/cli/doctor/index.d.ts +13 -87
- package/dist/cli/doctor/index.js +57 -713
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/opencode.d.ts +2 -1
- package/dist/cli/doctor/opencode.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +21 -387
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/drain-stdio.d.ts +31 -0
- package/dist/cli/drain-stdio.js +76 -0
- package/dist/cli/drain-stdio.js.map +1 -0
- package/dist/cli/export.d.ts +3 -1
- package/dist/cli/export.js +7 -16
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/gate/codex-disable.d.ts +29 -0
- package/dist/cli/gate/codex-disable.js +195 -0
- package/dist/cli/gate/codex-disable.js.map +1 -0
- package/dist/cli/gate/codex-enable.d.ts +41 -0
- package/dist/cli/gate/codex-enable.js +127 -0
- package/dist/cli/gate/codex-enable.js.map +1 -0
- package/dist/cli/gate/codex-snapshot.d.ts +208 -0
- package/dist/cli/gate/codex-snapshot.js +402 -0
- package/dist/cli/gate/codex-snapshot.js.map +1 -0
- package/dist/cli/gate/disable.d.ts +9 -0
- package/dist/cli/gate/disable.js +263 -28
- package/dist/cli/gate/disable.js.map +1 -1
- package/dist/cli/gate/enable.d.ts +26 -6
- package/dist/cli/gate/enable.js +152 -80
- package/dist/cli/gate/enable.js.map +1 -1
- package/dist/cli/gate/link-chain.d.ts +53 -0
- package/dist/cli/gate/link-chain.js +122 -0
- package/dist/cli/gate/link-chain.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +289 -12
- package/dist/cli/gate/snapshot.js +481 -22
- package/dist/cli/gate/snapshot.js.map +1 -1
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +9 -2131
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/composer.d.ts +3 -6
- package/dist/cli/init/composer.js +6 -370
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/init/dependencies.d.ts +1 -2
- package/dist/cli/init/dependencies.js +4 -80
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/detect.js +5 -4
- package/dist/cli/init/detect.js.map +1 -1
- package/dist/cli/init/interactive.d.ts +1 -23
- package/dist/cli/init/interactive.js +33 -247
- package/dist/cli/init/interactive.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +2 -2
- package/dist/cli/init/profiles.js +51 -245
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +2 -37
- package/dist/cli/init/templates.js +25 -1237
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/list.d.ts +1 -1
- package/dist/cli/list.js +1 -38
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/loader.d.ts +15 -1
- package/dist/cli/loader.js +56 -39
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/main.js +7 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-home/index.js +2 -2
- package/dist/cli/migrate-home/index.js.map +1 -1
- package/dist/cli/pack/add.js +1 -1
- package/dist/cli/pack/add.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
- package/dist/cli/pack/hook-bootstrap.js +15 -291
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
- package/dist/cli/pack/hook-branch-protection.js +365 -340
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/index.d.ts +0 -1
- package/dist/cli/pack/index.js +0 -1
- package/dist/cli/pack/index.js.map +1 -1
- package/dist/cli/pack/list.js +1 -6
- package/dist/cli/pack/list.js.map +1 -1
- package/dist/cli/pack/mutate.d.ts +7 -9
- package/dist/cli/pack/mutate.js +6 -9
- package/dist/cli/pack/mutate.js.map +1 -1
- package/dist/cli/pack/reseed.d.ts +2 -2
- package/dist/cli/pack/reseed.js +16 -22
- package/dist/cli/pack/reseed.js.map +1 -1
- package/dist/cli/{delegate/register.d.ts → register-gate-group.d.ts} +1 -1
- package/dist/cli/register-gate-group.js +348 -0
- package/dist/cli/register-gate-group.js.map +1 -0
- package/dist/cli/register-inspect-group.d.ts +6 -0
- package/dist/cli/register-inspect-group.js +189 -0
- package/dist/cli/register-inspect-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +1 -1
- package/dist/cli/register-operator-lifecycle.js +3 -100
- package/dist/cli/register-operator-lifecycle.js.map +1 -1
- package/dist/cli/register-pack-group.d.ts +5 -0
- package/dist/cli/register-pack-group.js +134 -0
- package/dist/cli/register-pack-group.js.map +1 -0
- package/dist/cli/{register-audit-group.d.ts → register-setup-group.d.ts} +1 -1
- package/dist/cli/register-setup-group.js +495 -0
- package/dist/cli/register-setup-group.js.map +1 -0
- package/dist/cli/remove/index.d.ts +0 -14
- package/dist/cli/remove/index.js +2 -115
- package/dist/cli/remove/index.js.map +1 -1
- package/dist/cli/remove/mutate.d.ts +0 -2
- package/dist/cli/remove/mutate.js +1 -19
- package/dist/cli/remove/mutate.js.map +1 -1
- package/dist/cli/remove/register.js +2 -19
- package/dist/cli/remove/register.js.map +1 -1
- package/dist/cli/shell-quote.d.ts +7 -0
- package/dist/cli/shell-quote.js +17 -0
- package/dist/cli/shell-quote.js.map +1 -0
- package/dist/cli/uninstall/index.d.ts +4 -2
- package/dist/cli/uninstall/index.js +15 -7
- package/dist/cli/uninstall/index.js.map +1 -1
- package/dist/cli/uninstall/register.js +6 -4
- package/dist/cli/uninstall/register.js.map +1 -1
- package/dist/cli/uninstall/snapshot.d.ts +15 -0
- package/dist/cli/uninstall/snapshot.js +38 -0
- package/dist/cli/uninstall/snapshot.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +0 -77
- package/dist/cli/validate/checks.js +3 -1049
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/cli/validate/index.js +19 -15
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/io/claude-mcp.d.ts +1 -1
- package/dist/io/claude-mcp.js +27 -14
- package/dist/io/claude-mcp.js.map +1 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/lock.d.ts +0 -26
- package/dist/io/lock.js +10 -27
- package/dist/io/lock.js.map +1 -1
- package/dist/io/merge-settings.js +6 -4
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/project-name.d.ts +22 -39
- package/dist/io/project-name.js +25 -42
- package/dist/io/project-name.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +103 -40
- package/dist/io/read-regular-file.js +196 -35
- package/dist/io/read-regular-file.js.map +1 -1
- package/dist/io/restart-hints.js +3 -6
- package/dist/io/restart-hints.js.map +1 -1
- package/dist/io/version-compare.d.ts +1 -3
- package/dist/io/version-compare.js +1 -3
- package/dist/io/version-compare.js.map +1 -1
- package/dist/io/write-regular-file.d.ts +30 -0
- package/dist/io/write-regular-file.js +85 -0
- package/dist/io/write-regular-file.js.map +1 -0
- package/dist/overrides/index.d.ts +1 -0
- package/dist/overrides/index.js +1 -0
- package/dist/overrides/index.js.map +1 -1
- package/dist/overrides/merge-layers.d.ts +43 -0
- package/dist/overrides/merge-layers.js +76 -0
- package/dist/overrides/merge-layers.js.map +1 -0
- package/dist/overrides/merge.d.ts +16 -0
- package/dist/overrides/merge.js +21 -8
- package/dist/overrides/merge.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
- package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
- package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
- package/dist/policy-packs/builtin/branch-protection.js +56 -89
- package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
- package/dist/policy-packs/config-check.d.ts +7 -5
- package/dist/policy-packs/config-check.js +2 -2
- package/dist/policy-packs/config-check.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +1 -3
- package/dist/policy-packs/expand.js +5 -42
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +3 -3
- package/dist/policy-packs/index.js +2 -2
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +9 -38
- package/dist/policy-packs/registry.js +5 -65
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/policy-packs/runtime.d.ts +0 -4
- package/dist/policy-packs/runtime.js +9 -22
- package/dist/policy-packs/runtime.js.map +1 -1
- package/dist/policy-packs/types.d.ts +0 -19
- package/dist/policy-packs/ux-compare.d.ts +1 -11
- package/dist/policy-packs/ux-compare.js +6 -42
- package/dist/policy-packs/ux-compare.js.map +1 -1
- package/dist/policy-packs/ux-drift-check.d.ts +5 -5
- package/dist/policy-packs/ux-drift-check.js +17 -22
- package/dist/policy-packs/ux-drift-check.js.map +1 -1
- package/dist/policy-packs/version-check.d.ts +5 -26
- package/dist/policy-packs/version-check.js +19 -74
- package/dist/policy-packs/version-check.js.map +1 -1
- package/dist/probes/memory.d.ts +1 -1
- package/dist/probes/memory.js +1 -1
- package/dist/probes/memory.js.map +1 -1
- package/dist/runtime/agent-facing.d.ts +9 -0
- package/dist/runtime/agent-facing.js +28 -14
- package/dist/runtime/agent-facing.js.map +1 -1
- package/dist/runtime/bounded-text.d.ts +15 -0
- package/dist/runtime/bounded-text.js +27 -0
- package/dist/runtime/bounded-text.js.map +1 -0
- package/dist/runtime/git-branch.d.ts +125 -0
- package/dist/runtime/git-branch.js +381 -0
- package/dist/runtime/git-branch.js.map +1 -0
- package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
- package/dist/runtime/hermetic-spawn-guard.js +24 -34
- package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
- package/dist/runtime/home-dir.js +3 -2
- package/dist/runtime/home-dir.js.map +1 -1
- package/dist/runtime/tool-name-aliases.d.ts +0 -6
- package/dist/runtime/tool-name-aliases.js +5 -18
- package/dist/runtime/tool-name-aliases.js.map +1 -1
- package/dist/schema/grounding.d.ts +7 -54
- package/dist/schema/grounding.js +10 -12
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/hooks.d.ts +39 -136
- package/dist/schema/hooks.js +3 -6
- package/dist/schema/hooks.js.map +1 -1
- package/dist/schema/index.d.ts +114 -3828
- package/dist/schema/index.js +41 -80
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.d.ts +54 -131
- package/dist/schema/memory.js +2 -2
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/policy-packs.d.ts +3 -45
- package/dist/schema/policy-packs.js +7 -13
- package/dist/schema/policy-packs.js.map +1 -1
- package/dist/schema/policy-ux.d.ts +7 -0
- package/dist/schema/policy-ux.js +18 -0
- package/dist/schema/policy-ux.js.map +1 -0
- package/dist/schema/removed-keys.d.ts +185 -0
- package/dist/schema/removed-keys.js +531 -0
- package/dist/schema/removed-keys.js.map +1 -0
- package/dist/schema/tools.d.ts +30 -268
- package/dist/schema/tools.js +4 -4
- package/dist/schema/tools.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/approve/branch-protection.d.ts +0 -69
- package/dist/cli/approve/branch-protection.js +0 -144
- package/dist/cli/approve/branch-protection.js.map +0 -1
- package/dist/cli/approve/risk.d.ts +0 -112
- package/dist/cli/approve/risk.js +0 -197
- package/dist/cli/approve/risk.js.map +0 -1
- package/dist/cli/approve/stdin-report.d.ts +0 -57
- package/dist/cli/approve/stdin-report.js +0 -145
- package/dist/cli/approve/stdin-report.js.map +0 -1
- package/dist/cli/approve/understanding.d.ts +0 -410
- package/dist/cli/approve/understanding.js +0 -996
- package/dist/cli/approve/understanding.js.map +0 -1
- package/dist/cli/audit.d.ts +0 -80
- package/dist/cli/audit.js +0 -252
- package/dist/cli/audit.js.map +0 -1
- package/dist/cli/delegate/index.d.ts +0 -76
- package/dist/cli/delegate/index.js +0 -444
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/delegate/register.js +0 -90
- package/dist/cli/delegate/register.js.map +0 -1
- package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
- package/dist/cli/doctor/auto-approve-mode.js +0 -80
- package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
- package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
- package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
- package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
- package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
- package/dist/cli/doctor/codex-config-drift.js +0 -240
- package/dist/cli/doctor/codex-config-drift.js.map +0 -1
- package/dist/cli/doctor/expire-on-tool-match.d.ts +0 -15
- package/dist/cli/doctor/expire-on-tool-match.js +0 -58
- package/dist/cli/doctor/expire-on-tool-match.js.map +0 -1
- package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
- package/dist/cli/doctor/rogue-ledger.js +0 -153
- package/dist/cli/doctor/rogue-ledger.js.map +0 -1
- package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
- package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
- package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
- package/dist/cli/doctor/settings-drift.d.ts +0 -25
- package/dist/cli/doctor/settings-drift.js +0 -213
- package/dist/cli/doctor/settings-drift.js.map +0 -1
- package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
- package/dist/cli/doctor/toolchain-parity.js +0 -154
- package/dist/cli/doctor/toolchain-parity.js.map +0 -1
- package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
- package/dist/cli/doctor/ug-auto-approvals.js +0 -91
- package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
- package/dist/cli/doctor/ug-delegations.d.ts +0 -26
- package/dist/cli/doctor/ug-delegations.js +0 -121
- package/dist/cli/doctor/ug-delegations.js.map +0 -1
- package/dist/cli/doctor/ug-inflight.d.ts +0 -35
- package/dist/cli/doctor/ug-inflight.js +0 -57
- package/dist/cli/doctor/ug-inflight.js.map +0 -1
- package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
- package/dist/cli/doctor/understanding-mode-env.js +0 -98
- package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
- package/dist/cli/dry-run.d.ts +0 -58
- package/dist/cli/dry-run.js +0 -283
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/enriched-event.d.ts +0 -35
- package/dist/cli/enriched-event.js +0 -60
- package/dist/cli/enriched-event.js.map +0 -1
- package/dist/cli/event-input.d.ts +0 -28
- package/dist/cli/event-input.js +0 -73
- package/dist/cli/event-input.js.map +0 -1
- package/dist/cli/explain-action.d.ts +0 -25
- package/dist/cli/explain-action.js +0 -57
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -147
- package/dist/cli/explain-policy.js +0 -248
- package/dist/cli/explain-policy.js.map +0 -1
- package/dist/cli/explain.d.ts +0 -31
- package/dist/cli/explain.js +0 -159
- package/dist/cli/explain.js.map +0 -1
- package/dist/cli/gc/index.d.ts +0 -63
- package/dist/cli/gc/index.js +0 -566
- package/dist/cli/gc/index.js.map +0 -1
- package/dist/cli/pack/approve-escape.d.ts +0 -19
- package/dist/cli/pack/approve-escape.js +0 -190
- package/dist/cli/pack/approve-escape.js.map +0 -1
- package/dist/cli/pack/auto-approve-path.d.ts +0 -146
- package/dist/cli/pack/auto-approve-path.js +0 -462
- package/dist/cli/pack/auto-approve-path.js.map +0 -1
- package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
- package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
- package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
- package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
- package/dist/cli/pack/hook-codex-stop.js +0 -329
- package/dist/cli/pack/hook-codex-stop.js.map +0 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
- package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
- package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
- package/dist/cli/pack/hook-post-merge-gate.js +0 -277
- package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
- package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
- package/dist/cli/pack/hook-post-tool-use.js +0 -137
- package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
- package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
- package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
- package/dist/cli/pack/hook-runtime-reality.js +0 -210
- package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -438
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
- package/dist/cli/pack/hook-solution-acceptance.js +0 -530
- package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
- package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
- package/dist/cli/pack/hook-stay-in-scope.js +0 -128
- package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
- package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
- package/dist/cli/pack/hook-subagent-start.js +0 -88
- package/dist/cli/pack/hook-subagent-start.js.map +0 -1
- package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
- package/dist/cli/pack/hook-subagent-stop.js +0 -41
- package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
- package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
- package/dist/cli/pack/hook-track-active-claim.js +0 -275
- package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
- package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
- package/dist/cli/pack/transcript-report-scan.js +0 -359
- package/dist/cli/pack/transcript-report-scan.js.map +0 -1
- package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
- package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
- package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
- package/dist/cli/pack/upgrade.d.ts +0 -32
- package/dist/cli/pack/upgrade.js +0 -273
- package/dist/cli/pack/upgrade.js.map +0 -1
- package/dist/cli/pause/index.d.ts +0 -113
- package/dist/cli/pause/index.js +0 -251
- package/dist/cli/pause/index.js.map +0 -1
- package/dist/cli/pause-check.d.ts +0 -22
- package/dist/cli/pause-check.js +0 -54
- package/dist/cli/pause-check.js.map +0 -1
- package/dist/cli/policy/intercept.d.ts +0 -233
- package/dist/cli/policy/intercept.js +0 -1022
- package/dist/cli/policy/intercept.js.map +0 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
- package/dist/cli/policy/risk-envelope-enrichment.js +0 -110
- package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
- package/dist/cli/record/index.d.ts +0 -81
- package/dist/cli/record/index.js +0 -348
- package/dist/cli/record/index.js.map +0 -1
- package/dist/cli/register-audit-group.js +0 -91
- package/dist/cli/register-audit-group.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -46
- package/dist/cli/resolve-env.js.map +0 -1
- package/dist/cli/session-export/index.d.ts +0 -46
- package/dist/cli/session-export/index.js +0 -169
- package/dist/cli/session-export/index.js.map +0 -1
- package/dist/cli/session-export/redact.d.ts +0 -22
- package/dist/cli/session-export/redact.js +0 -47
- package/dist/cli/session-export/redact.js.map +0 -1
- package/dist/cli/session-export/transcript.d.ts +0 -24
- package/dist/cli/session-export/transcript.js +0 -164
- package/dist/cli/session-export/transcript.js.map +0 -1
- package/dist/cli/session-start/branch-check.d.ts +0 -18
- package/dist/cli/session-start/branch-check.js +0 -140
- package/dist/cli/session-start/branch-check.js.map +0 -1
- package/dist/cli/session-start/index.d.ts +0 -121
- package/dist/cli/session-start/index.js +0 -591
- package/dist/cli/session-start/index.js.map +0 -1
- package/dist/cli/session-start/shared-options.d.ts +0 -103
- package/dist/cli/session-start/shared-options.js +0 -107
- package/dist/cli/session-start/shared-options.js.map +0 -1
- package/dist/cli/session-start/stale-base-check.d.ts +0 -46
- package/dist/cli/session-start/stale-base-check.js +0 -352
- package/dist/cli/session-start/stale-base-check.js.map +0 -1
- package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
- package/dist/cli/session-start/toolchain-parity.js +0 -797
- package/dist/cli/session-start/toolchain-parity.js.map +0 -1
- package/dist/cli/smoke/assertions.d.ts +0 -46
- package/dist/cli/smoke/assertions.js +0 -170
- package/dist/cli/smoke/assertions.js.map +0 -1
- package/dist/cli/smoke/index.d.ts +0 -76
- package/dist/cli/smoke/index.js +0 -245
- package/dist/cli/smoke/index.js.map +0 -1
- package/dist/cli/smoke/runner.d.ts +0 -55
- package/dist/cli/smoke/runner.js +0 -134
- package/dist/cli/smoke/runner.js.map +0 -1
- package/dist/cli/smoke/stream-parser.d.ts +0 -65
- package/dist/cli/smoke/stream-parser.js +0 -115
- package/dist/cli/smoke/stream-parser.js.map +0 -1
- package/dist/cli/test-risk.d.ts +0 -27
- package/dist/cli/test-risk.js +0 -38
- package/dist/cli/test-risk.js.map +0 -1
- package/dist/io/display-path.d.ts +0 -11
- package/dist/io/display-path.js +0 -29
- package/dist/io/display-path.js.map +0 -1
- package/dist/io/duration.d.ts +0 -5
- package/dist/io/duration.js +0 -50
- package/dist/io/duration.js.map +0 -1
- package/dist/io/extract.d.ts +0 -79
- package/dist/io/extract.js +0 -226
- package/dist/io/extract.js.map +0 -1
- package/dist/io/ledger-record.d.ts +0 -83
- package/dist/io/ledger-record.js +0 -301
- package/dist/io/ledger-record.js.map +0 -1
- package/dist/io/read-json-dir-entries.d.ts +0 -36
- package/dist/io/read-json-dir-entries.js +0 -48
- package/dist/io/read-json-dir-entries.js.map +0 -1
- package/dist/io/safe-json-parse.d.ts +0 -5
- package/dist/io/safe-json-parse.js +0 -21
- package/dist/io/safe-json-parse.js.map +0 -1
- package/dist/policies/index.d.ts +0 -5
- package/dist/policies/index.js +0 -6
- package/dist/policies/index.js.map +0 -1
- package/dist/policies/ledger-client.d.ts +0 -113
- package/dist/policies/ledger-client.js +0 -500
- package/dist/policies/ledger-client.js.map +0 -1
- package/dist/policies/producers.d.ts +0 -12
- package/dist/policies/producers.js +0 -61
- package/dist/policies/producers.js.map +0 -1
- package/dist/policies/requires.d.ts +0 -75
- package/dist/policies/requires.js +0 -240
- package/dist/policies/requires.js.map +0 -1
- package/dist/policies/timestamp.d.ts +0 -14
- package/dist/policies/timestamp.js +0 -36
- package/dist/policies/timestamp.js.map +0 -1
- package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
- package/dist/policy-packs/builtin/permission-profiles.js +0 -74
- package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
- package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
- package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
- package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
- package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -643
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -106
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -625
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1076
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
- package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1078
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
- package/dist/policy-packs/permission-translator.d.ts +0 -9
- package/dist/policy-packs/permission-translator.js +0 -76
- package/dist/policy-packs/permission-translator.js.map +0 -1
- package/dist/runtime/action-envelope.d.ts +0 -64
- package/dist/runtime/action-envelope.js +0 -46
- package/dist/runtime/action-envelope.js.map +0 -1
- package/dist/runtime/approval-signing.d.ts +0 -111
- package/dist/runtime/approval-signing.js +0 -384
- package/dist/runtime/approval-signing.js.map +0 -1
- package/dist/runtime/bash-match-facts.d.ts +0 -60
- package/dist/runtime/bash-match-facts.js +0 -196
- package/dist/runtime/bash-match-facts.js.map +0 -1
- package/dist/runtime/bash-match-registry.d.ts +0 -112
- package/dist/runtime/bash-match-registry.js +0 -406
- package/dist/runtime/bash-match-registry.js.map +0 -1
- package/dist/runtime/bash-prefix-parse.d.ts +0 -31
- package/dist/runtime/bash-prefix-parse.js +0 -576
- package/dist/runtime/bash-prefix-parse.js.map +0 -1
- package/dist/runtime/command-normalize.d.ts +0 -658
- package/dist/runtime/command-normalize.js +0 -2410
- package/dist/runtime/command-normalize.js.map +0 -1
- package/dist/runtime/deletion-target-resolve.d.ts +0 -28
- package/dist/runtime/deletion-target-resolve.js +0 -1078
- package/dist/runtime/deletion-target-resolve.js.map +0 -1
- package/dist/runtime/destructive-shell-floor.d.ts +0 -19
- package/dist/runtime/destructive-shell-floor.js +0 -611
- package/dist/runtime/destructive-shell-floor.js.map +0 -1
- package/dist/runtime/environment-resolver.d.ts +0 -36
- package/dist/runtime/environment-resolver.js +0 -138
- package/dist/runtime/environment-resolver.js.map +0 -1
- package/dist/runtime/git-context.d.ts +0 -201
- package/dist/runtime/git-context.js +0 -422
- package/dist/runtime/git-context.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.js +0 -13
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/intercept.d.ts +0 -623
- package/dist/runtime/intercept.js +0 -1384
- package/dist/runtime/intercept.js.map +0 -1
- package/dist/runtime/kube-context.d.ts +0 -16
- package/dist/runtime/kube-context.js +0 -63
- package/dist/runtime/kube-context.js.map +0 -1
- package/dist/runtime/kubectl-target-parse.d.ts +0 -31
- package/dist/runtime/kubectl-target-parse.js +0 -249
- package/dist/runtime/kubectl-target-parse.js.map +0 -1
- package/dist/runtime/ledger-add.d.ts +0 -16
- package/dist/runtime/ledger-add.js +0 -150
- package/dist/runtime/ledger-add.js.map +0 -1
- package/dist/runtime/ledger-writer.d.ts +0 -27
- package/dist/runtime/ledger-writer.js +0 -46
- package/dist/runtime/ledger-writer.js.map +0 -1
- package/dist/runtime/pause-sentinel.d.ts +0 -60
- package/dist/runtime/pause-sentinel.js +0 -156
- package/dist/runtime/pause-sentinel.js.map +0 -1
- package/dist/runtime/pending-approval.d.ts +0 -23
- package/dist/runtime/pending-approval.js +0 -67
- package/dist/runtime/pending-approval.js.map +0 -1
- package/dist/runtime/read-only-bash.d.ts +0 -141
- package/dist/runtime/read-only-bash.js +0 -2204
- package/dist/runtime/read-only-bash.js.map +0 -1
- package/dist/runtime/recovery-git-commit.d.ts +0 -22
- package/dist/runtime/recovery-git-commit.js +0 -284
- package/dist/runtime/recovery-git-commit.js.map +0 -1
- package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
- package/dist/runtime/reject-malformed-session-id.js +0 -16
- package/dist/runtime/reject-malformed-session-id.js.map +0 -1
- package/dist/runtime/risk-classifier.d.ts +0 -38
- package/dist/runtime/risk-classifier.js +0 -311
- package/dist/runtime/risk-classifier.js.map +0 -1
- package/dist/runtime/session-id.d.ts +0 -113
- package/dist/runtime/session-id.js +0 -193
- package/dist/runtime/session-id.js.map +0 -1
- package/dist/runtime/shell-word.d.ts +0 -62
- package/dist/runtime/shell-word.js +0 -410
- package/dist/runtime/shell-word.js.map +0 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +0 -105
- package/dist/runtime/task-providers/agent-tasks.js +0 -247
- package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
- package/dist/runtime/when-eval.d.ts +0 -62
- package/dist/runtime/when-eval.js +0 -212
- package/dist/runtime/when-eval.js.map +0 -1
- package/dist/runtime/workflow-policies.d.ts +0 -207
- package/dist/runtime/workflow-policies.js +0 -596
- package/dist/runtime/workflow-policies.js.map +0 -1
- package/dist/schema/audit.d.ts +0 -71
- package/dist/schema/audit.js +0 -32
- package/dist/schema/audit.js.map +0 -1
- package/dist/schema/doctor.d.ts +0 -25
- package/dist/schema/doctor.js +0 -23
- package/dist/schema/doctor.js.map +0 -1
- package/dist/schema/environments.d.ts +0 -215
- package/dist/schema/environments.js +0 -101
- package/dist/schema/environments.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -9
- package/dist/schema/extract.js +0 -86
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/permission-profiles.d.ts +0 -2292
- package/dist/schema/permission-profiles.js +0 -60
- package/dist/schema/permission-profiles.js.map +0 -1
- package/dist/schema/policies.d.ts +0 -974
- package/dist/schema/policies.js +0 -298
- package/dist/schema/policies.js.map +0 -1
- package/dist/schema/requires.d.ts +0 -131
- package/dist/schema/requires.js +0 -88
- package/dist/schema/requires.js.map +0 -1
- package/dist/schema/risk.d.ts +0 -144
- package/dist/schema/risk.js +0 -194
- package/dist/schema/risk.js.map +0 -1
- package/dist/schema/session-start-preflight.d.ts +0 -10
- package/dist/schema/session-start-preflight.js +0 -106
- package/dist/schema/session-start-preflight.js.map +0 -1
- package/dist/schema/stale-base-check.d.ts +0 -18
- package/dist/schema/stale-base-check.js +0 -37
- package/dist/schema/stale-base-check.js.map +0 -1
- package/dist/schema/toolchain-parity.d.ts +0 -21
- package/dist/schema/toolchain-parity.js +0 -48
- package/dist/schema/toolchain-parity.js.map +0 -1
- package/dist/schema/workflows.d.ts +0 -519
- package/dist/schema/workflows.js +0 -81
- package/dist/schema/workflows.js.map +0 -1
- package/scripts/runtime-reality-docker-probe.mjs +0 -71
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import type { Manifest } from "../../schema/index.js";
|
|
2
|
-
import { type LoaderOptions } from "../loader.js";
|
|
3
|
-
export interface ApproveRiskOptions extends LoaderOptions {
|
|
4
|
-
/** Explicit session id (overrides $CLAUDE_CODE_SESSION_ID / $CLAUDE_SESSION_ID / $CODEX_SESSION_ID). */
|
|
5
|
-
session?: string;
|
|
6
|
-
/**
|
|
7
|
-
* Restrict the ledger tag this verb writes to one Risk Gate ARM
|
|
8
|
-
* instead of the shared production tag (task d03af8f6, review round
|
|
9
|
-
* 2, HIGH 2 fix). `"deletion"` writes
|
|
10
|
-
* `risk-approved:deletion:${SESSION_ID}` — the tag
|
|
11
|
-
* `gate-dev-unsafe-deletion` alone consults — instead of the default
|
|
12
|
-
* `risk-approved:${SESSION_ID}` that BOTH `gate-prod-destructive-
|
|
13
|
-
* approval` and (before this fix) `gate-dev-unsafe-deletion` used to
|
|
14
|
-
* share. The measured bug this closes: approving a routine `rm -rf
|
|
15
|
-
* dist` on a task branch used to clear `gate-prod-destructive-
|
|
16
|
-
* approval` for the rest of the session too, since both policies
|
|
17
|
-
* consulted the exact same tag. Omitted (the default) writes ONLY the
|
|
18
|
-
* production tag, unchanged from before this option existed — an
|
|
19
|
-
* operator who never passes `--scope` sees no behavior change at all.
|
|
20
|
-
* Ignored when `force` is set (a forced override always writes the
|
|
21
|
-
* deny-tier `risk-override:` tag, which has no scope of its own).
|
|
22
|
-
*/
|
|
23
|
-
scope?: "deletion";
|
|
24
|
-
/**
|
|
25
|
-
* Operator-deliberate override of a Risk Gate `deny` decision. Writes
|
|
26
|
-
* `risk-override:${SESSION_ID}:forced:<reason-slug>` instead of the
|
|
27
|
-
* default `risk-approved:${SESSION_ID}` tag, so the built-in
|
|
28
|
-
* `gate-prod-destructive` policy (which gates on `risk-override:`,
|
|
29
|
-
* see `src/cli/init/templates.ts`) clears. `deny` is by design not
|
|
30
|
-
* approvable, so this path is hard-gated behind operator-only checks:
|
|
31
|
-
* a TTY stdin OR explicit `iAmTheOperator` acknowledgement is
|
|
32
|
-
* required, mirroring `harness pause`. The reason becomes part of the
|
|
33
|
-
* audit trail and is sanitised to a tag-safe slug.
|
|
34
|
-
*/
|
|
35
|
-
force?: {
|
|
36
|
-
reason: string;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Acknowledge a non-TTY / scripted invocation of `--force`. Without
|
|
40
|
-
* this flag a non-TTY `--force` refuses with a usage error.
|
|
41
|
-
*/
|
|
42
|
-
iAmTheOperator?: boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Override `process.stdin.isTTY` for tests; mirrors the pause/resume
|
|
45
|
-
* seam so the non-TTY refusal can be exercised hermetically.
|
|
46
|
-
*/
|
|
47
|
-
stdinIsTTY?: boolean;
|
|
48
|
-
/** Override the harness.generated/ directory (test injection). */
|
|
49
|
-
generatedDir?: string;
|
|
50
|
-
/** Inject a manifest (test); bypasses `loadManifest`. */
|
|
51
|
-
manifest?: Manifest;
|
|
52
|
-
/** Override the ledger writer (test). */
|
|
53
|
-
ledgerAdd?: (sessionId: string, content: string) => Promise<{
|
|
54
|
-
ok: true;
|
|
55
|
-
} | {
|
|
56
|
-
ok: false;
|
|
57
|
-
reason: string;
|
|
58
|
-
}>;
|
|
59
|
-
}
|
|
60
|
-
export interface ApproveRiskResult {
|
|
61
|
-
sessionId: string;
|
|
62
|
-
/** Where `sessionId` came from — surfaced so the operator can sanity-check it. */
|
|
63
|
-
sessionSource: "flag" | "env-claude-code" | "env-claude" | "env-codex" | "pending-approval";
|
|
64
|
-
/**
|
|
65
|
-
* True when the verb wrote a `risk-override:` tag via `--force`
|
|
66
|
-
* instead of the default `risk-approved:`. The CLI surfaces this so
|
|
67
|
-
* the operator can see at a glance that they exercised the deny-tier
|
|
68
|
-
* override, not a clean require_approval approval.
|
|
69
|
-
*/
|
|
70
|
-
forced: boolean;
|
|
71
|
-
ledger: {
|
|
72
|
-
ok: boolean;
|
|
73
|
-
tag: string;
|
|
74
|
-
reason?: string;
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* The evidence-ledger tag a Risk Gate `require_approval` policy
|
|
79
|
-
* consults. With no `scope`, this is the SHARED production tag
|
|
80
|
-
* `gate-prod-destructive-approval` consults (unchanged since Phase 7
|
|
81
|
-
* #6). `scope: "deletion"` (task d03af8f6, review round 2) writes the
|
|
82
|
-
* dev-context deletion arm's OWN tag instead — `gate-dev-unsafe-
|
|
83
|
-
* deletion` consults `risk-approved:deletion:${SESSION_ID}` exclusively,
|
|
84
|
-
* so approving one does not clear the other. See `ApproveRiskOptions.scope`.
|
|
85
|
-
*/
|
|
86
|
-
export declare function riskApprovedTagFor(sessionId: string, scope?: "deletion"): string;
|
|
87
|
-
/**
|
|
88
|
-
* The evidence-ledger tag a Risk Gate `deny`-tier policy with
|
|
89
|
-
* `requires.ledger_tag: risk-override:${SESSION_ID}` consults. The
|
|
90
|
-
* `:forced:<reason>` suffix is additive metadata: the built-in
|
|
91
|
-
* policy's matcher pins the `risk-override:<session>` substring, so the
|
|
92
|
-
* suffix never affects whether the gate clears. It exists for the
|
|
93
|
-
* audit trail (`harness audit` can grep `:forced:` to surface every
|
|
94
|
-
* operator-deliberate override).
|
|
95
|
-
*/
|
|
96
|
-
export declare function riskOverrideTagFor(sessionId: string, reason: string): string;
|
|
97
|
-
/**
|
|
98
|
-
* Resolve the target session id and write its `risk-approved:` ledger
|
|
99
|
-
* tag. Session id precedence mirrors `harness approve understanding`
|
|
100
|
-
* tiers 1-4: explicit `--session`, then `$CLAUDE_CODE_SESSION_ID`
|
|
101
|
-
* (the var Claude Code itself sets), then `$CLAUDE_SESSION_ID` (legacy
|
|
102
|
-
* / docs name), then `$CODEX_SESSION_ID`, then the `.pending-approval`
|
|
103
|
-
* file the gate hook staged on its last block. There is no
|
|
104
|
-
* persisted-report tier-5 guess: the Risk Gate produces no persisted
|
|
105
|
-
* reports.
|
|
106
|
-
*
|
|
107
|
-
* Throws `HarnessExitError(EX_FAIL)` when no session id can be resolved.
|
|
108
|
-
* A degraded ledger (grounding-mcp absent / unreachable) is surfaced in
|
|
109
|
-
* the result, not thrown — same best-effort contract as `approve
|
|
110
|
-
* understanding`'s ledger write.
|
|
111
|
-
*/
|
|
112
|
-
export declare function approveRisk(opts?: ApproveRiskOptions): Promise<ApproveRiskResult>;
|
package/dist/cli/approve/risk.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
// Phase 7 #6 — `harness approve risk [--session <id>]` CLI verb.
|
|
2
|
-
//
|
|
3
|
-
// The operator's grant for a Risk Gate `require_approval` decision.
|
|
4
|
-
// When `harness policy intercept` blocks a risky action with outcome
|
|
5
|
-
// `require_approval`, the policy's `requires:` names a `risk-approved:
|
|
6
|
-
// ${SESSION_ID}` ledger tag; this verb writes that tag so the next
|
|
7
|
-
// evaluation of the same policy passes and the outcome becomes `allow`.
|
|
8
|
-
//
|
|
9
|
-
// Deliberately simpler than `harness approve understanding`: the Risk
|
|
10
|
-
// Gate's requires-evaluator reads the evidence ledger (it is the same
|
|
11
|
-
// Phase 4 evaluator), so an ordinary `ledger_add` entry IS the approval.
|
|
12
|
-
// There is no persisted-report flip and no filesystem marker — the
|
|
13
|
-
// ledger tag is the single source of truth, exactly as Phase 7's design
|
|
14
|
-
// (docs/risk-gate.md "Decision model") specifies. `agent-grounding`
|
|
15
|
-
// needs no change: it already stores arbitrary tags through `ledger_add`.
|
|
16
|
-
import { addLedgerFact } from "../../runtime/ledger-add.js";
|
|
17
|
-
import { resolveGeneratedDir } from "../../runtime/pending-approval.js";
|
|
18
|
-
import { resolveApprovalSessionId } from "../../runtime/session-id.js";
|
|
19
|
-
import { EX_FAIL, EX_USAGE, HarnessExitError } from "../exit-codes.js";
|
|
20
|
-
import { loadManifest, resolvePaths } from "../loader.js";
|
|
21
|
-
const RISK_APPROVED_PREFIX = "risk-approved";
|
|
22
|
-
const RISK_OVERRIDE_PREFIX = "risk-override";
|
|
23
|
-
/**
|
|
24
|
-
* The evidence-ledger tag a Risk Gate `require_approval` policy
|
|
25
|
-
* consults. With no `scope`, this is the SHARED production tag
|
|
26
|
-
* `gate-prod-destructive-approval` consults (unchanged since Phase 7
|
|
27
|
-
* #6). `scope: "deletion"` (task d03af8f6, review round 2) writes the
|
|
28
|
-
* dev-context deletion arm's OWN tag instead — `gate-dev-unsafe-
|
|
29
|
-
* deletion` consults `risk-approved:deletion:${SESSION_ID}` exclusively,
|
|
30
|
-
* so approving one does not clear the other. See `ApproveRiskOptions.scope`.
|
|
31
|
-
*/
|
|
32
|
-
export function riskApprovedTagFor(sessionId, scope) {
|
|
33
|
-
return scope === "deletion"
|
|
34
|
-
? `${RISK_APPROVED_PREFIX}:deletion:${sessionId}`
|
|
35
|
-
: `${RISK_APPROVED_PREFIX}:${sessionId}`;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* The evidence-ledger tag a Risk Gate `deny`-tier policy with
|
|
39
|
-
* `requires.ledger_tag: risk-override:${SESSION_ID}` consults. The
|
|
40
|
-
* `:forced:<reason>` suffix is additive metadata: the built-in
|
|
41
|
-
* policy's matcher pins the `risk-override:<session>` substring, so the
|
|
42
|
-
* suffix never affects whether the gate clears. It exists for the
|
|
43
|
-
* audit trail (`harness audit` can grep `:forced:` to surface every
|
|
44
|
-
* operator-deliberate override).
|
|
45
|
-
*/
|
|
46
|
-
export function riskOverrideTagFor(sessionId, reason) {
|
|
47
|
-
return `${RISK_OVERRIDE_PREFIX}:${sessionId}:forced:${sanitiseReasonSlug(reason)}`;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Reduce an operator-supplied free-form reason to a tag-safe slug. Keeps
|
|
51
|
-
* `[A-Za-z0-9._-]`, collapses any other run to a single `-`, trims
|
|
52
|
-
* leading / trailing `-`, lowercases, caps at 64 chars. An empty result
|
|
53
|
-
* (e.g. the operator passed only punctuation) is rejected upstream.
|
|
54
|
-
*/
|
|
55
|
-
function sanitiseReasonSlug(reason) {
|
|
56
|
-
const slug = reason
|
|
57
|
-
.toLowerCase()
|
|
58
|
-
.replace(/[^a-z0-9._-]+/g, "-")
|
|
59
|
-
.replace(/^-+|-+$/g, "")
|
|
60
|
-
.slice(0, 64);
|
|
61
|
-
return slug.length > 0 ? slug : "operator-override";
|
|
62
|
-
}
|
|
63
|
-
function refuseForcedIfNonTTY(opts) {
|
|
64
|
-
if (!opts.force)
|
|
65
|
-
return;
|
|
66
|
-
if (opts.iAmTheOperator === true)
|
|
67
|
-
return;
|
|
68
|
-
// Deliberate divergence from `harness pause`'s twin guard
|
|
69
|
-
// (`src/cli/pause/index.ts`'s `refuseIfAgentShell`): this verb is
|
|
70
|
-
// designed to be runnable from inside `!`-prefixed Claude Code shells
|
|
71
|
-
// where `$CLAUDE_SESSION_ID` is set (the session-id resolver below
|
|
72
|
-
// reads it as a fallback tier). Refusing on that env var would gut
|
|
73
|
-
// the `! ` UX. Operator intent is gated by the non-empty `<reason>`
|
|
74
|
-
// and the TTY / `--i-am-the-operator` check; that is sufficient.
|
|
75
|
-
const tty = opts.stdinIsTTY !== undefined ? opts.stdinIsTTY : process.stdin.isTTY === true;
|
|
76
|
-
if (tty)
|
|
77
|
-
return;
|
|
78
|
-
throw new HarnessExitError([
|
|
79
|
-
"harness approve risk --force refuses to run with non-TTY stdin (looks scripted).",
|
|
80
|
-
"",
|
|
81
|
-
"This is the load-bearing guardrail against `--force` becoming an agent-driven",
|
|
82
|
-
"bypass of a deny-tier Risk Gate decision. Run the verb from your own operator",
|
|
83
|
-
"shell (in Claude Code: prefix the command with `! `), or pass --i-am-the-operator",
|
|
84
|
-
"to acknowledge a one-off recovery script.",
|
|
85
|
-
].join("\n"), EX_USAGE);
|
|
86
|
-
}
|
|
87
|
-
function findGroundingMcp(manifest) {
|
|
88
|
-
return manifest.tools.mcp.find((m) => m.name === "grounding-mcp") ?? null;
|
|
89
|
-
}
|
|
90
|
-
async function writeLedgerTag(manifest, sessionId, content, opts) {
|
|
91
|
-
if (opts.ledgerAdd)
|
|
92
|
-
return opts.ledgerAdd(sessionId, content);
|
|
93
|
-
const server = findGroundingMcp(manifest);
|
|
94
|
-
if (!server) {
|
|
95
|
-
return { ok: false, reason: "grounding-mcp not declared in manifest" };
|
|
96
|
-
}
|
|
97
|
-
// No `~` expansion here: `addLedgerFact` expands leading `~/` in every
|
|
98
|
-
// command token itself, so a second pass would be dead work.
|
|
99
|
-
const command = Array.isArray(server.command)
|
|
100
|
-
? server.command
|
|
101
|
-
: server.command.trim().split(/\s+/);
|
|
102
|
-
return addLedgerFact({
|
|
103
|
-
mcpCommand: command,
|
|
104
|
-
...(server.env && { mcpEnv: server.env }),
|
|
105
|
-
timeoutMs: server.health?.timeout_ms ?? 5_000,
|
|
106
|
-
sessionId,
|
|
107
|
-
content,
|
|
108
|
-
source: "harness-approve-risk",
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Resolve the target session id and write its `risk-approved:` ledger
|
|
113
|
-
* tag. Session id precedence mirrors `harness approve understanding`
|
|
114
|
-
* tiers 1-4: explicit `--session`, then `$CLAUDE_CODE_SESSION_ID`
|
|
115
|
-
* (the var Claude Code itself sets), then `$CLAUDE_SESSION_ID` (legacy
|
|
116
|
-
* / docs name), then `$CODEX_SESSION_ID`, then the `.pending-approval`
|
|
117
|
-
* file the gate hook staged on its last block. There is no
|
|
118
|
-
* persisted-report tier-5 guess: the Risk Gate produces no persisted
|
|
119
|
-
* reports.
|
|
120
|
-
*
|
|
121
|
-
* Throws `HarnessExitError(EX_FAIL)` when no session id can be resolved.
|
|
122
|
-
* A degraded ledger (grounding-mcp absent / unreachable) is surfaced in
|
|
123
|
-
* the result, not thrown — same best-effort contract as `approve
|
|
124
|
-
* understanding`'s ledger write.
|
|
125
|
-
*/
|
|
126
|
-
export async function approveRisk(opts = {}) {
|
|
127
|
-
// --force is operator-deliberate; guard before any side effect. The
|
|
128
|
-
// session-id resolution below intentionally still runs the agent-shell
|
|
129
|
-
// env tier (CLAUDE_CODE_SESSION_ID etc.), since the operator may be
|
|
130
|
-
// running from `!` with --i-am-the-operator and the session id has to
|
|
131
|
-
// come from somewhere.
|
|
132
|
-
refuseForcedIfNonTTY(opts);
|
|
133
|
-
const generatedDir = opts.generatedDir ??
|
|
134
|
-
resolveGeneratedDir({
|
|
135
|
-
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
136
|
-
manifestPath: resolvePaths(opts).base,
|
|
137
|
-
});
|
|
138
|
-
// Session id precedence mirrors `harness approve understanding` tiers 1-5:
|
|
139
|
-
// explicit --session, then $CLAUDE_CODE_SESSION_ID (canonical Claude Code
|
|
140
|
-
// var), then $CLAUDE_SESSION_ID (legacy), then $CODEX_SESSION_ID, then the
|
|
141
|
-
// .pending-approval file staged by the gate hook or preflight. No
|
|
142
|
-
// persisted-report tier: the Risk Gate produces no persisted reports.
|
|
143
|
-
const { sessionId, sessionSource: rawSessionSource } = resolveApprovalSessionId({
|
|
144
|
-
session: opts.session,
|
|
145
|
-
generatedDir,
|
|
146
|
-
});
|
|
147
|
-
// Cast is safe: no newestReportFallback passed, so "newest-report" is
|
|
148
|
-
// unreachable at runtime. The wider return type of resolveApprovalSessionId
|
|
149
|
-
// requires the cast for TypeScript.
|
|
150
|
-
const sessionSource = rawSessionSource;
|
|
151
|
-
if (sessionId === "") {
|
|
152
|
-
throw new HarnessExitError([
|
|
153
|
-
"no session id available. Pass --session <id>, or set one of",
|
|
154
|
-
"$CLAUDE_CODE_SESSION_ID (Claude Code) / $CLAUDE_SESSION_ID (legacy) /",
|
|
155
|
-
"$CODEX_SESSION_ID (Codex).",
|
|
156
|
-
"",
|
|
157
|
-
"The understanding-gate PreToolUse hook and `harness preflight` both stage the",
|
|
158
|
-
`session id in ${generatedDir}/.pending-approval, so an arg-less`,
|
|
159
|
-
"`harness approve risk` works after either has fired. An empty result means",
|
|
160
|
-
"neither has run for the current session yet.",
|
|
161
|
-
"",
|
|
162
|
-
"From inside the running agent you can also read the id directly:",
|
|
163
|
-
"Claude Code exposes $CLAUDE_CODE_SESSION_ID; Codex exposes $CODEX_SESSION_ID.",
|
|
164
|
-
].join("\n"), EX_FAIL);
|
|
165
|
-
}
|
|
166
|
-
// The manifest is needed only for the grounding-mcp command. If it
|
|
167
|
-
// cannot load, the ledger write degrades to a surfaced warning rather
|
|
168
|
-
// than aborting — the operator still learns the resolved session id.
|
|
169
|
-
let manifest = null;
|
|
170
|
-
try {
|
|
171
|
-
manifest = opts.manifest ?? loadManifest(opts).manifest;
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
/* swallow; ledger write becomes a degraded-ok */
|
|
175
|
-
}
|
|
176
|
-
// Forced override writes a different tag prefix (`risk-override:`)
|
|
177
|
-
// that the deny-tier `gate-prod-destructive` policy template consults.
|
|
178
|
-
// The audit-only `:forced:<reason>` suffix lets `harness audit` and
|
|
179
|
-
// `harness explain --trace` distinguish a clean require_approval
|
|
180
|
-
// approval from a deliberate deny override.
|
|
181
|
-
const forced = opts.force !== undefined;
|
|
182
|
-
const tag = forced
|
|
183
|
-
? riskOverrideTagFor(sessionId, opts.force.reason)
|
|
184
|
-
: riskApprovedTagFor(sessionId, opts.scope);
|
|
185
|
-
const ledgerResult = manifest
|
|
186
|
-
? await writeLedgerTag(manifest, sessionId, tag, opts)
|
|
187
|
-
: { ok: false, reason: "manifest unreadable; skipped ledger write" };
|
|
188
|
-
return {
|
|
189
|
-
sessionId,
|
|
190
|
-
sessionSource,
|
|
191
|
-
forced,
|
|
192
|
-
ledger: ledgerResult.ok
|
|
193
|
-
? { ok: true, tag }
|
|
194
|
-
: { ok: false, tag, reason: ledgerResult.reason },
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=risk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../../../src/cli/approve/risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { type UnderstandingGateMode } from "@lannguyensi/understanding-gate";
|
|
2
|
-
export type StdinReportOutcome = {
|
|
3
|
-
ok: true;
|
|
4
|
-
filePath: string;
|
|
5
|
-
} | {
|
|
6
|
-
ok: false;
|
|
7
|
-
reason: string;
|
|
8
|
-
parseErrorLogPath?: string;
|
|
9
|
-
};
|
|
10
|
-
export interface PersistStdinReportArgs {
|
|
11
|
-
/** The heredoc body: Understanding Report markdown. */
|
|
12
|
-
markdown: string;
|
|
13
|
-
/** Directory the approve flow lists reports from. */
|
|
14
|
-
reportsDir: string;
|
|
15
|
-
/** Resolved session id; stamped onto the persisted JSON. */
|
|
16
|
-
sessionId: string;
|
|
17
|
-
/** Clock injection for deterministic tests. */
|
|
18
|
-
now: Date;
|
|
19
|
-
/**
|
|
20
|
-
* Gap-fill mode default, used only when the report's own `**Metadata**`
|
|
21
|
-
* block declares none. Callers with pack-config context (the real
|
|
22
|
-
* `approve understanding` CLI path) should pass the harness-resolved
|
|
23
|
-
* mode (Env > config.mode > DEFAULT_MODE — see
|
|
24
|
-
* `resolveMode`/`toPackageMode` in
|
|
25
|
-
* policy-packs/builtin/understanding-before-execution.ts) so a report
|
|
26
|
-
* that omits `mode:` still gets validated against the operator's
|
|
27
|
-
* actually-configured mode instead of silently defaulting to
|
|
28
|
-
* `fast_confirm` regardless of `config.mode` (harness task 5d73d78d).
|
|
29
|
-
* Defaults to `"fast_confirm"` — the pre-fix behaviour — for callers
|
|
30
|
-
* without pack-config context.
|
|
31
|
-
*/
|
|
32
|
-
mode?: UnderstandingGateMode;
|
|
33
|
-
}
|
|
34
|
-
/** Reports are a few KB; anything beyond this is not a report. */
|
|
35
|
-
export declare const STDIN_REPORT_MAX_BYTES: number;
|
|
36
|
-
export interface PipedStdinResult {
|
|
37
|
-
text: string;
|
|
38
|
-
/**
|
|
39
|
-
* True only when the stream ended cleanly within the size cap. A
|
|
40
|
-
* timeout with partial data, a stream error, or a size-cap hit all
|
|
41
|
-
* yield `complete: false` — the caller must NOT feed such text into
|
|
42
|
-
* the capture path, or a truncated-but-still-parseable report could
|
|
43
|
-
* be persisted and approved as if it were whole (review 2026-07-10).
|
|
44
|
-
*/
|
|
45
|
-
complete: boolean;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Read piped stdin fully, with a hang guard. The caller must already
|
|
49
|
-
* have established that stdin is NOT a TTY. The timeout exists because
|
|
50
|
-
* this read sits on the operator-approval path: if some harness wires
|
|
51
|
-
* the CLI to an open-but-idle pipe, a blocked read here would brick
|
|
52
|
-
* approvals — after `timeoutMs` we proceed with whatever arrived
|
|
53
|
-
* (a real heredoc is delivered immediately by the shell), flagged
|
|
54
|
-
* `complete: false`.
|
|
55
|
-
*/
|
|
56
|
-
export declare function readPipedStdin(stream: NodeJS.ReadableStream, maxBytes?: number, timeoutMs?: number): Promise<PipedStdinResult>;
|
|
57
|
-
export declare function persistStdinReport(args: PersistStdinReportArgs): StdinReportOutcome;
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// Report capture for `harness approve understanding` (task 61fd36db).
|
|
2
|
-
//
|
|
3
|
-
// The Understanding Report arrives as a heredoc on the approve command's
|
|
4
|
-
// stdin (see src/cli/pack/approve-escape.ts for why this is the only
|
|
5
|
-
// channel that reliably carries it: the Stop-hook producer fires after
|
|
6
|
-
// approve already ran, and current Claude Code builds do not reliably
|
|
7
|
-
// persist mid-turn assistant text to the transcript JSONL). This module
|
|
8
|
-
// parses the markdown with the canonical parser from
|
|
9
|
-
// `@lannguyensi/understanding-gate` and persists it — session-bound and
|
|
10
|
-
// `pending` — into the same reports directory the Stop hook targets, so
|
|
11
|
-
// the approve flow's existing selection / validation / flip path picks
|
|
12
|
-
// it up via a strict sessionId match.
|
|
13
|
-
//
|
|
14
|
-
// On parse failure it writes a parse-error log in the exact format the
|
|
15
|
-
// standalone Stop hook uses (JSON header incl. sessionId, `--- raw ---`
|
|
16
|
-
// separator, raw markdown), so `findLatestParseError` in
|
|
17
|
-
// approve/understanding.ts surfaces the reason on the `report:` line
|
|
18
|
-
// instead of a silent dead end.
|
|
19
|
-
import * as path from "node:path";
|
|
20
|
-
import { createHash } from "node:crypto";
|
|
21
|
-
import { parseReport } from "@lannguyensi/understanding-gate";
|
|
22
|
-
import { atomicWriteFile } from "../../io/atomic-write.js";
|
|
23
|
-
/** Mirror of the standalone package's slug rule (persistence.ts). */
|
|
24
|
-
function sanitizeSlug(raw) {
|
|
25
|
-
const cleaned = raw.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
26
|
-
return cleaned.slice(0, 40);
|
|
27
|
-
}
|
|
28
|
-
function summarizeParseError(error) {
|
|
29
|
-
if (error.message.length > 0)
|
|
30
|
-
return error.message;
|
|
31
|
-
const missing = error.missing.length > 0 ? ` (missing: ${error.missing.join(", ")})` : "";
|
|
32
|
-
return `${error.reason}${missing}`;
|
|
33
|
-
}
|
|
34
|
-
/** Reports are a few KB; anything beyond this is not a report. */
|
|
35
|
-
export const STDIN_REPORT_MAX_BYTES = 512 * 1024;
|
|
36
|
-
/**
|
|
37
|
-
* Read piped stdin fully, with a hang guard. The caller must already
|
|
38
|
-
* have established that stdin is NOT a TTY. The timeout exists because
|
|
39
|
-
* this read sits on the operator-approval path: if some harness wires
|
|
40
|
-
* the CLI to an open-but-idle pipe, a blocked read here would brick
|
|
41
|
-
* approvals — after `timeoutMs` we proceed with whatever arrived
|
|
42
|
-
* (a real heredoc is delivered immediately by the shell), flagged
|
|
43
|
-
* `complete: false`.
|
|
44
|
-
*/
|
|
45
|
-
export function readPipedStdin(stream, maxBytes = STDIN_REPORT_MAX_BYTES, timeoutMs = 2_000) {
|
|
46
|
-
return new Promise((resolve) => {
|
|
47
|
-
const chunks = [];
|
|
48
|
-
let length = 0;
|
|
49
|
-
let done = false;
|
|
50
|
-
const finish = (complete) => {
|
|
51
|
-
if (done)
|
|
52
|
-
return;
|
|
53
|
-
done = true;
|
|
54
|
-
clearTimeout(timer);
|
|
55
|
-
resolve({
|
|
56
|
-
text: Buffer.concat(chunks).toString("utf8"),
|
|
57
|
-
complete: complete && length <= maxBytes,
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
const timer = setTimeout(() => finish(false), timeoutMs);
|
|
61
|
-
// Let a finished CLI exit even if the timer is still pending.
|
|
62
|
-
timer.unref?.();
|
|
63
|
-
stream.on("data", (chunk) => {
|
|
64
|
-
if (done)
|
|
65
|
-
return;
|
|
66
|
-
if (length < maxBytes) {
|
|
67
|
-
const remaining = maxBytes - length;
|
|
68
|
-
chunks.push(chunk.length > remaining ? chunk.subarray(0, remaining) : chunk);
|
|
69
|
-
}
|
|
70
|
-
length += chunk.length;
|
|
71
|
-
});
|
|
72
|
-
stream.on("end", () => finish(true));
|
|
73
|
-
stream.on("error", () => finish(false));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
export function persistStdinReport(args) {
|
|
77
|
-
// Defaults mirror the standalone Stop hook (handle-stop.ts): the
|
|
78
|
-
// report's own `**Metadata**` block wins for any field it declares;
|
|
79
|
-
// these only fill gaps. approvalStatus is forced to "pending" by
|
|
80
|
-
// parseReport regardless of input.
|
|
81
|
-
const result = parseReport(args.markdown, {
|
|
82
|
-
taskId: args.sessionId,
|
|
83
|
-
createdAt: args.now.toISOString(),
|
|
84
|
-
mode: args.mode ?? "fast_confirm",
|
|
85
|
-
riskLevel: "medium",
|
|
86
|
-
});
|
|
87
|
-
const stamp = args.now.toISOString().replace(/[:.]/g, "-");
|
|
88
|
-
if (!result.ok) {
|
|
89
|
-
const summary = summarizeParseError(result.error);
|
|
90
|
-
// Same side-channel location + format as the standalone Stop hook:
|
|
91
|
-
// <reportsDir>/../parse-errors/<stamp>.log with a JSON header that
|
|
92
|
-
// carries sessionId (findLatestParseError skips logs it cannot
|
|
93
|
-
// attribute to the approving session).
|
|
94
|
-
const parseErrorDir = path.join(path.dirname(args.reportsDir), "parse-errors");
|
|
95
|
-
const malformedSections = result.error.malformedSections ?? [];
|
|
96
|
-
const payload = `${JSON.stringify({
|
|
97
|
-
reason: result.error.reason,
|
|
98
|
-
missing: result.error.missing,
|
|
99
|
-
malformedSections,
|
|
100
|
-
schemaErrors: result.error.schemaErrors,
|
|
101
|
-
message: result.error.message,
|
|
102
|
-
stamp,
|
|
103
|
-
sessionId: args.sessionId,
|
|
104
|
-
source: "harness-approve-stdin",
|
|
105
|
-
}, null, 2)}\n\n--- raw ---\n${args.markdown}\n`;
|
|
106
|
-
let parseErrorLogPath;
|
|
107
|
-
try {
|
|
108
|
-
parseErrorLogPath = path.join(parseErrorDir, `${stamp}.log`);
|
|
109
|
-
atomicWriteFile(parseErrorLogPath, payload);
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
// Best-effort side channel; the loud `stdin:` line still names the
|
|
113
|
-
// parse failure even when the log write itself fails.
|
|
114
|
-
parseErrorLogPath = undefined;
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
ok: false,
|
|
118
|
-
reason: `report on stdin did not parse: ${summary}`,
|
|
119
|
-
...(parseErrorLogPath !== undefined ? { parseErrorLogPath } : {}),
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
// The standalone package's saveReport cannot be used here: its
|
|
123
|
-
// canonical serializer whitelists the schema keys and would strip the
|
|
124
|
-
// sessionId binding, which is exactly what makes the approve flow's
|
|
125
|
-
// strict match (and the tier-6 session-id fallback) work. Persist the
|
|
126
|
-
// same JSON shape plus `sessionId`, with the package's filename
|
|
127
|
-
// convention (<isoStamp>-<slug>-<hash8>.json) so directory listings
|
|
128
|
-
// read uniformly.
|
|
129
|
-
const persisted = { ...result.report, sessionId: args.sessionId };
|
|
130
|
-
const json = `${JSON.stringify(persisted, null, 2)}\n`;
|
|
131
|
-
const hash = createHash("sha256").update(json).digest("hex").slice(0, 8);
|
|
132
|
-
const slug = sanitizeSlug(result.report.taskId) || "report";
|
|
133
|
-
const filePath = path.join(args.reportsDir, `${stamp}-${slug}-${hash}.json`);
|
|
134
|
-
try {
|
|
135
|
-
atomicWriteFile(filePath, json);
|
|
136
|
-
}
|
|
137
|
-
catch (err) {
|
|
138
|
-
return {
|
|
139
|
-
ok: false,
|
|
140
|
-
reason: `report parsed but could not be persisted to ${filePath}: ${err.message}`,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return { ok: true, filePath };
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=stdin-report.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stdin-report.js","sourceRoot":"","sources":["../../../src/cli/approve/stdin-report.ts"],"names":[],"mappings":"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"}
|