@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,46 +0,0 @@
|
|
|
1
|
-
// Shared manifest -> grounding-mcp ledger-writer wiring (task T-001,
|
|
2
|
-
// record-verbs).
|
|
3
|
-
//
|
|
4
|
-
// `harness session-start preflight` originally inlined this lookup
|
|
5
|
-
// (find the `grounding-mcp` MCP server entry in the manifest, split its
|
|
6
|
-
// `command` into an argv array, resolve a per-call timeout, and close
|
|
7
|
-
// over `addLedgerFact`). `harness record {review,review-subagent,
|
|
8
|
-
// dogfood}` needs the exact same wiring, so it is lifted here verbatim
|
|
9
|
-
// — behavior unchanged, just made reusable. `session-start/index.ts`
|
|
10
|
-
// now imports this instead of defining its own copies.
|
|
11
|
-
import { addLedgerFact } from "./ledger-add.js";
|
|
12
|
-
export function findGroundingMcp(manifest) {
|
|
13
|
-
return manifest.tools.mcp.find((m) => m.name === "grounding-mcp") ?? null;
|
|
14
|
-
}
|
|
15
|
-
export function mcpCommandList(server) {
|
|
16
|
-
return Array.isArray(server.command)
|
|
17
|
-
? server.command
|
|
18
|
-
: server.command.trim().split(/\s+/);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Resolve a `LedgerWriteFn` bound to the manifest's declared
|
|
22
|
-
* `grounding-mcp` server, or `{ ok: false, reason }` when no such
|
|
23
|
-
* server is declared. Callers that want a verb-specific tail on the
|
|
24
|
-
* reason (e.g. "; cannot record preflight tag") append it themselves —
|
|
25
|
-
* this function's message stays generic so it is reusable verbatim
|
|
26
|
-
* across every producer.
|
|
27
|
-
*/
|
|
28
|
-
export function resolveManifestLedgerWriter(manifest, opts = {}) {
|
|
29
|
-
const server = findGroundingMcp(manifest);
|
|
30
|
-
if (!server) {
|
|
31
|
-
return { ok: false, reason: "grounding-mcp not declared in manifest" };
|
|
32
|
-
}
|
|
33
|
-
const command = mcpCommandList(server);
|
|
34
|
-
const env = server.env ?? undefined;
|
|
35
|
-
const timeoutMs = opts.ledgerTimeoutMs ?? server.health?.timeout_ms ?? 5_000;
|
|
36
|
-
return {
|
|
37
|
-
ok: true,
|
|
38
|
-
write: (args) => addLedgerFact({
|
|
39
|
-
mcpCommand: command,
|
|
40
|
-
...(env && { mcpEnv: env }),
|
|
41
|
-
timeoutMs,
|
|
42
|
-
...args,
|
|
43
|
-
}),
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=ledger-writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-writer.js","sourceRoot":"","sources":["../../src/runtime/ledger-writer.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iBAAiB;AACjB,EAAE;AACF,mEAAmE;AACnE,wEAAwE;AACxE,sEAAsE;AACtE,kEAAkE;AAClE,uEAAuE;AACvE,qEAAqE;AACrE,uDAAuD;AAEvD,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAW1E,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAAkB,EAClB,OAAqC,EAAE;IAEvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;IAC7E,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,aAAa,CAAC;YACZ,UAAU,EAAE,OAAO;YACnB,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC3B,SAAS;YACT,GAAG,IAAI;SACR,CAAC;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export declare const SENTINEL_BASENAME = ".harness-paused";
|
|
2
|
-
export interface PauseSentinel {
|
|
3
|
-
/** ISO-8601 of when `harness pause` ran. */
|
|
4
|
-
pausedAt: string;
|
|
5
|
-
/** ISO-8601 expiry, or null for `--indefinite`. */
|
|
6
|
-
expiresAt: string | null;
|
|
7
|
-
/** Operator-supplied reason, or null when none was passed. */
|
|
8
|
-
reason: string | null;
|
|
9
|
-
/** Caller identity recorded by the CLI (host/user). */
|
|
10
|
-
pausedBy: string | null;
|
|
11
|
-
}
|
|
12
|
-
export declare function sentinelPath(generatedDir: string): string;
|
|
13
|
-
export type ReadSentinelResult = {
|
|
14
|
-
kind: "absent";
|
|
15
|
-
} | {
|
|
16
|
-
kind: "active";
|
|
17
|
-
sentinel: PauseSentinel;
|
|
18
|
-
} | {
|
|
19
|
-
kind: "expired";
|
|
20
|
-
sentinel: PauseSentinel;
|
|
21
|
-
};
|
|
22
|
-
export declare function readSentinel(generatedDir: string, now?: Date): ReadSentinelResult;
|
|
23
|
-
export declare function writeSentinel(generatedDir: string, sentinel: PauseSentinel): void;
|
|
24
|
-
/** Returns true when a sentinel existed and was removed. */
|
|
25
|
-
export declare function deleteSentinel(generatedDir: string): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Format a short human-readable relative offset between `from` (the past
|
|
28
|
-
* anchor for "since X ago") or `to` (the future anchor for "in X") and
|
|
29
|
-
* `now`. Always rounds toward 1 so a near-boundary value never reads "0s".
|
|
30
|
-
*/
|
|
31
|
-
export declare function formatRelative(targetIso: string, now: Date): string;
|
|
32
|
-
export interface AnnouncePauseOptions {
|
|
33
|
-
/** Already-resolved generatedDir. Required: hooks resolve this themselves. */
|
|
34
|
-
generatedDir: string;
|
|
35
|
-
/** Override "now" for tests. */
|
|
36
|
-
now?: Date;
|
|
37
|
-
/** Where to write the notice line. Defaults to process.stderr. */
|
|
38
|
-
stderr?: NodeJS.WritableStream;
|
|
39
|
-
/**
|
|
40
|
-
* Hook label inserted into the notice line so an operator scanning a
|
|
41
|
-
* busy stderr can tell which hook fire emitted it. Defaults to a
|
|
42
|
-
* generic "hook" tag.
|
|
43
|
-
*/
|
|
44
|
-
hookLabel?: string;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Hook integration helper. One call from each PreToolUse / PostToolUse
|
|
48
|
-
* hook covers:
|
|
49
|
-
* - active sentinel → emit one stderr line; caller exits 0 (allow).
|
|
50
|
-
* - expired sentinel → silently delete (auto-resume); caller proceeds.
|
|
51
|
-
* - absent sentinel → no-op; caller proceeds.
|
|
52
|
-
*
|
|
53
|
-
* The boolean `paused` return tells the caller whether to short-circuit.
|
|
54
|
-
* Any I/O error in the sentinel read degrades to `paused: false` rather
|
|
55
|
-
* than blocking: a broken state file is a debug nuisance, not a reason
|
|
56
|
-
* to silently freeze the whole session.
|
|
57
|
-
*/
|
|
58
|
-
export declare function maybeAnnouncePause(opts: AnnouncePauseOptions): {
|
|
59
|
-
paused: boolean;
|
|
60
|
-
};
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
// harness pause/resume sentinel — temporary hook bypass for operator-only
|
|
2
|
-
// recovery, debug, and incident-mode flows.
|
|
3
|
-
//
|
|
4
|
-
// The whole feature is one JSON file at `<generatedDir>/.harness-paused`.
|
|
5
|
-
// While it exists and has not expired, every PreToolUse / PostToolUse hook
|
|
6
|
-
// emits a one-line stderr notice and short-circuits to allow instead of
|
|
7
|
-
// evaluating its normal gate logic. On the first hook fire AFTER expiry,
|
|
8
|
-
// the sentinel is silently deleted (auto-resume) and evaluation resumes.
|
|
9
|
-
//
|
|
10
|
-
// Source-of-truth split:
|
|
11
|
-
// - Hook enforcement reads the sentinel file. Stat() on a known path —
|
|
12
|
-
// no per-call grounding-mcp roundtrip.
|
|
13
|
-
// - Audit trail goes to the evidence ledger via `harness pause` and
|
|
14
|
-
// `harness resume`. The ledger is queryable history; the sentinel is
|
|
15
|
-
// ephemeral state.
|
|
16
|
-
//
|
|
17
|
-
// Operator-only design: the `harness pause` verb refuses to run inside an
|
|
18
|
-
// agent shell (where `$CLAUDE_CODE_SESSION_ID` / `$CLAUDE_SESSION_ID` /
|
|
19
|
-
// `$CODEX_SESSION_ID` is set) and refuses non-TTY stdin without an explicit
|
|
20
|
-
// `--i-am-the-operator` acknowledgement. These are a speed bump, not a
|
|
21
|
-
// boundary: a Claude Code `! `-prefixed shell inherits the session's env
|
|
22
|
-
// AND its non-TTY stdin, so it is indistinguishable from an agent-issued
|
|
23
|
-
// command and trips both checks (verified live; see
|
|
24
|
-
// docs/okf/pause-vs-gate-kill-switch.md). The real enforcement boundary is
|
|
25
|
-
// the PreToolUse deny-policy layer (`harness pause` / `harness resume` /
|
|
26
|
-
// `harness gate disable` / `harness gate enable` denied from Bash, see
|
|
27
|
-
// `src/cli/init/templates.ts`) plus the operator running the verb from a
|
|
28
|
-
// terminal genuinely outside the agent session. This sentinel is also
|
|
29
|
-
// unsigned plain JSON (see `writeSentinel` below): any process with
|
|
30
|
-
// filesystem write access under `harness.generated/` can forge it
|
|
31
|
-
// regardless of what the CLI guards do.
|
|
32
|
-
import * as fs from "node:fs";
|
|
33
|
-
import * as path from "node:path";
|
|
34
|
-
import { atomicWriteFile } from "../io/atomic-write.js";
|
|
35
|
-
export const SENTINEL_BASENAME = ".harness-paused";
|
|
36
|
-
export function sentinelPath(generatedDir) {
|
|
37
|
-
return path.join(generatedDir, SENTINEL_BASENAME);
|
|
38
|
-
}
|
|
39
|
-
export function readSentinel(generatedDir, now = new Date()) {
|
|
40
|
-
let raw;
|
|
41
|
-
try {
|
|
42
|
-
raw = fs.readFileSync(sentinelPath(generatedDir), "utf8");
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return { kind: "absent" };
|
|
46
|
-
}
|
|
47
|
-
let sentinel;
|
|
48
|
-
try {
|
|
49
|
-
sentinel = normalizeSentinel(JSON.parse(raw));
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// A malformed sentinel file is treated as absent: a broken state file
|
|
53
|
-
// must never escalate into a session-wide block. The `harness pause`
|
|
54
|
-
// verb only ever writes well-formed JSON, so this branch is reserved
|
|
55
|
-
// for operator-corrupted files.
|
|
56
|
-
return { kind: "absent" };
|
|
57
|
-
}
|
|
58
|
-
if (sentinel.expiresAt === null)
|
|
59
|
-
return { kind: "active", sentinel };
|
|
60
|
-
const expires = Date.parse(sentinel.expiresAt);
|
|
61
|
-
if (!Number.isFinite(expires))
|
|
62
|
-
return { kind: "active", sentinel };
|
|
63
|
-
if (expires <= now.getTime())
|
|
64
|
-
return { kind: "expired", sentinel };
|
|
65
|
-
return { kind: "active", sentinel };
|
|
66
|
-
}
|
|
67
|
-
function normalizeSentinel(raw) {
|
|
68
|
-
const pausedAt = typeof raw["pausedAt"] === "string" ? raw["pausedAt"] : "";
|
|
69
|
-
if (pausedAt === "")
|
|
70
|
-
throw new Error("missing pausedAt");
|
|
71
|
-
// expiresAt must be either an explicit null (indefinite) or a non-empty
|
|
72
|
-
// string. A typed-wrong value (e.g. number 42) is rejected as malformed
|
|
73
|
-
// rather than silently downgraded to indefinite — without this, a forged
|
|
74
|
-
// sentinel of `{"pausedAt":"...","expiresAt":42}` would read as a no-
|
|
75
|
-
// auto-resume pause that survives every hook fire.
|
|
76
|
-
const expiresAtRaw = raw["expiresAt"];
|
|
77
|
-
let expiresAt;
|
|
78
|
-
if (expiresAtRaw === null || expiresAtRaw === undefined) {
|
|
79
|
-
expiresAt = null;
|
|
80
|
-
}
|
|
81
|
-
else if (typeof expiresAtRaw === "string" && expiresAtRaw.length > 0) {
|
|
82
|
-
expiresAt = expiresAtRaw;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
throw new Error("expiresAt must be a non-empty ISO string or null");
|
|
86
|
-
}
|
|
87
|
-
const reason = typeof raw["reason"] === "string" ? raw["reason"] : null;
|
|
88
|
-
const pausedBy = typeof raw["pausedBy"] === "string" ? raw["pausedBy"] : null;
|
|
89
|
-
return { pausedAt, expiresAt, reason, pausedBy };
|
|
90
|
-
}
|
|
91
|
-
export function writeSentinel(generatedDir, sentinel) {
|
|
92
|
-
atomicWriteFile(sentinelPath(generatedDir), `${JSON.stringify(sentinel, null, 2)}\n`);
|
|
93
|
-
}
|
|
94
|
-
/** Returns true when a sentinel existed and was removed. */
|
|
95
|
-
export function deleteSentinel(generatedDir) {
|
|
96
|
-
try {
|
|
97
|
-
fs.rmSync(sentinelPath(generatedDir));
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Format a short human-readable relative offset between `from` (the past
|
|
106
|
-
* anchor for "since X ago") or `to` (the future anchor for "in X") and
|
|
107
|
-
* `now`. Always rounds toward 1 so a near-boundary value never reads "0s".
|
|
108
|
-
*/
|
|
109
|
-
export function formatRelative(targetIso, now) {
|
|
110
|
-
const target = Date.parse(targetIso);
|
|
111
|
-
if (!Number.isFinite(target))
|
|
112
|
-
return "?";
|
|
113
|
-
const abs = Math.max(1, Math.round(Math.abs(target - now.getTime()) / 1000));
|
|
114
|
-
if (abs < 90)
|
|
115
|
-
return `${abs}s`;
|
|
116
|
-
const mins = Math.round(abs / 60);
|
|
117
|
-
if (mins < 90)
|
|
118
|
-
return `${mins}m`;
|
|
119
|
-
const hrs = Math.round(mins / 60);
|
|
120
|
-
if (hrs < 36)
|
|
121
|
-
return `${hrs}h`;
|
|
122
|
-
const days = Math.round(hrs / 24);
|
|
123
|
-
return `${days}d`;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Hook integration helper. One call from each PreToolUse / PostToolUse
|
|
127
|
-
* hook covers:
|
|
128
|
-
* - active sentinel → emit one stderr line; caller exits 0 (allow).
|
|
129
|
-
* - expired sentinel → silently delete (auto-resume); caller proceeds.
|
|
130
|
-
* - absent sentinel → no-op; caller proceeds.
|
|
131
|
-
*
|
|
132
|
-
* The boolean `paused` return tells the caller whether to short-circuit.
|
|
133
|
-
* Any I/O error in the sentinel read degrades to `paused: false` rather
|
|
134
|
-
* than blocking: a broken state file is a debug nuisance, not a reason
|
|
135
|
-
* to silently freeze the whole session.
|
|
136
|
-
*/
|
|
137
|
-
export function maybeAnnouncePause(opts) {
|
|
138
|
-
const now = opts.now ?? new Date();
|
|
139
|
-
const stderr = opts.stderr ?? process.stderr;
|
|
140
|
-
const hookLabel = opts.hookLabel ?? "hook";
|
|
141
|
-
const result = readSentinel(opts.generatedDir, now);
|
|
142
|
-
if (result.kind === "absent")
|
|
143
|
-
return { paused: false };
|
|
144
|
-
if (result.kind === "expired") {
|
|
145
|
-
deleteSentinel(opts.generatedDir);
|
|
146
|
-
return { paused: false };
|
|
147
|
-
}
|
|
148
|
-
const reason = result.sentinel.reason ?? "(no reason given)";
|
|
149
|
-
const since = formatRelative(result.sentinel.pausedAt, now);
|
|
150
|
-
const remaining = result.sentinel.expiresAt === null
|
|
151
|
-
? "indefinite (no auto-resume)"
|
|
152
|
-
: `auto-resumes in ${formatRelative(result.sentinel.expiresAt, now)}`;
|
|
153
|
-
stderr.write(`harness ${hookLabel}: PAUSED since ${since} ago (reason: ${reason}); ${remaining}. Run \`harness resume\` to re-enable.\n`);
|
|
154
|
-
return { paused: true };
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=pause-sentinel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pause-sentinel.js","sourceRoot":"","sources":["../../src/runtime/pause-sentinel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { GENERATED_DIRNAME, resolveGeneratedDir } from "../io/generated-dir.js";
|
|
2
|
-
export { GENERATED_DIRNAME, resolveGeneratedDir };
|
|
3
|
-
export declare const PENDING_APPROVAL_BASENAME = ".pending-approval";
|
|
4
|
-
export declare function pendingApprovalPath(generatedDir: string): string;
|
|
5
|
-
/**
|
|
6
|
-
* Producer: stage `sessionId` for a later `harness approve`. `atomicWriteFile`
|
|
7
|
-
* creates `generatedDir` if missing, so a hand-wired hook with no prior
|
|
8
|
-
* apply still benefits. Callers treat this as best-effort — a write
|
|
9
|
-
* failure must never escalate a gate block into a thrown hook error.
|
|
10
|
-
*/
|
|
11
|
-
export declare function writePendingApproval(generatedDir: string, sessionId: string): void;
|
|
12
|
-
/**
|
|
13
|
-
* Consumer: read the staged session id, or null when the file is absent,
|
|
14
|
-
* empty, whitespace-only, or unreadable. Trims the trailing newline the
|
|
15
|
-
* producer writes plus any surrounding whitespace.
|
|
16
|
-
*/
|
|
17
|
-
export declare function readPendingApproval(generatedDir: string): string | null;
|
|
18
|
-
/**
|
|
19
|
-
* Consumer: drop the staging file once its id has been consumed, so a
|
|
20
|
-
* later arg-less `harness approve` cannot revive a stale session id.
|
|
21
|
-
* Best-effort — a missing file counts as success.
|
|
22
|
-
*/
|
|
23
|
-
export declare function clearPendingApproval(generatedDir: string): void;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Task 33abc147 — `.pending-approval` session-id staging file.
|
|
2
|
-
//
|
|
3
|
-
// The understanding-gate PreToolUse hook knows the running session's
|
|
4
|
-
// exact `session_id` (it arrives on the hook event's stdin). `harness
|
|
5
|
-
// approve`, run from the operator's `!`-shell, does NOT: $CLAUDE_SESSION_ID
|
|
6
|
-
// is unset in that shell, and guessing the id from the newest project
|
|
7
|
-
// transcript is a heuristic that breaks on subagent / parallel-session
|
|
8
|
-
// transcripts (the approve error message warns about exactly that).
|
|
9
|
-
//
|
|
10
|
-
// So the producer hands the id off instead of making the consumer guess:
|
|
11
|
-
// on every block / ask the gate hook writes the `session_id` to
|
|
12
|
-
// `<generatedDir>/.pending-approval`, and `harness approve` reads it when
|
|
13
|
-
// no `--session` flag and no `$CLAUDE_SESSION_ID` are given. Deterministic,
|
|
14
|
-
// not a guess.
|
|
15
|
-
//
|
|
16
|
-
// `harness apply` only writes its own known files into harness.generated/
|
|
17
|
-
// (it never wipes the directory), so the staging file survives applies.
|
|
18
|
-
// `harness approve` deletes it after a successful resolve so a later
|
|
19
|
-
// arg-less invocation cannot revive a stale session id.
|
|
20
|
-
import * as fs from "node:fs";
|
|
21
|
-
import * as path from "node:path";
|
|
22
|
-
import { atomicWriteFile } from "../io/atomic-write.js";
|
|
23
|
-
import { GENERATED_DIRNAME, resolveGeneratedDir } from "../io/generated-dir.js";
|
|
24
|
-
export { GENERATED_DIRNAME, resolveGeneratedDir };
|
|
25
|
-
export const PENDING_APPROVAL_BASENAME = ".pending-approval";
|
|
26
|
-
export function pendingApprovalPath(generatedDir) {
|
|
27
|
-
return path.join(generatedDir, PENDING_APPROVAL_BASENAME);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Producer: stage `sessionId` for a later `harness approve`. `atomicWriteFile`
|
|
31
|
-
* creates `generatedDir` if missing, so a hand-wired hook with no prior
|
|
32
|
-
* apply still benefits. Callers treat this as best-effort — a write
|
|
33
|
-
* failure must never escalate a gate block into a thrown hook error.
|
|
34
|
-
*/
|
|
35
|
-
export function writePendingApproval(generatedDir, sessionId) {
|
|
36
|
-
atomicWriteFile(pendingApprovalPath(generatedDir), `${sessionId}\n`);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Consumer: read the staged session id, or null when the file is absent,
|
|
40
|
-
* empty, whitespace-only, or unreadable. Trims the trailing newline the
|
|
41
|
-
* producer writes plus any surrounding whitespace.
|
|
42
|
-
*/
|
|
43
|
-
export function readPendingApproval(generatedDir) {
|
|
44
|
-
let raw;
|
|
45
|
-
try {
|
|
46
|
-
raw = fs.readFileSync(pendingApprovalPath(generatedDir), "utf8");
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
const trimmed = raw.trim();
|
|
52
|
-
return trimmed.length > 0 ? trimmed : null;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Consumer: drop the staging file once its id has been consumed, so a
|
|
56
|
-
* later arg-less `harness approve` cannot revive a stale session id.
|
|
57
|
-
* Best-effort — a missing file counts as success.
|
|
58
|
-
*/
|
|
59
|
-
export function clearPendingApproval(generatedDir) {
|
|
60
|
-
try {
|
|
61
|
-
fs.rmSync(pendingApprovalPath(generatedDir));
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
/* already gone (or never written) — nothing to clean up */
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=pending-approval.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pending-approval.js","sourceRoot":"","sources":["../../src/runtime/pending-approval.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,4EAA4E;AAC5E,sEAAsE;AACtE,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,gEAAgE;AAChE,0EAA0E;AAC1E,4EAA4E;AAC5E,eAAe;AACf,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,wDAAwD;AAExD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB,EAAE,SAAiB;IAC1E,eAAe,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command-runner binaries: their argv is itself a nested command to
|
|
3
|
-
* execute, so the "each accepts arguments without changing
|
|
4
|
-
* classification" rule does NOT hold for them. `command rm -rf /tmp/x`
|
|
5
|
-
* runs `rm`, and `env FOO=bar rm -rf /tmp/x` runs `rm` too. Including
|
|
6
|
-
* them in `SIMPLE_READ_ONLY_BINS` would classify the WRAPPER as
|
|
7
|
-
* read-only while the wrapped command does the write, a hard gate
|
|
8
|
-
* bypass. Each runner gets a `find`-style special case below that
|
|
9
|
-
* strips the runner's own leading flags/assignments and recurse-
|
|
10
|
-
* classifies the residual underlying command. Bare `env` /
|
|
11
|
-
* `command` (no underlying command) stay read-only: they only print
|
|
12
|
-
* the environment or resolve a name.
|
|
13
|
-
*
|
|
14
|
-
* `env` leading flags that take no command and do not change the fact
|
|
15
|
-
* that what follows is still a command to run. `-i` / `--ignore-
|
|
16
|
-
* environment` and `-u NAME` / `--unset=NAME` scrub the environment
|
|
17
|
-
* but still execute the residual command; `-` is the historical
|
|
18
|
-
* synonym for `-i`. `--` ends option parsing. We skip these (and any
|
|
19
|
-
* `NAME=VALUE` assignment tokens) to find the real underlying command.
|
|
20
|
-
*
|
|
21
|
-
* Exported (F6 fix, review round 2026-07-27, run
|
|
22
|
-
* 2026-07-27-gate-target-repo-resolution): `command-normalize.ts`'s
|
|
23
|
-
* `peelEnv` used to hand-roll its own copy of this exact enumeration
|
|
24
|
-
* ("that module's constants are private" — no longer true), and the two
|
|
25
|
-
* copies had already drifted (see that module's header for the confirmed
|
|
26
|
-
* divergence). Exporting the NAME sets here — not the parsing logic
|
|
27
|
-
* itself — lets both callers share one source of truth for "which `env`
|
|
28
|
-
* flags exist" while each keeps its own decision about what a match
|
|
29
|
-
* means (this file only needs to skip past them; `command-normalize.ts`
|
|
30
|
-
* additionally needs the VALUE of `-C`/`--chdir` to extract a target
|
|
31
|
-
* directory, which stays local to that module). No behaviour change here.
|
|
32
|
-
*/
|
|
33
|
-
export declare const ENV_LEADING_FLAGS: ReadonlySet<string>;
|
|
34
|
-
/** `env` flags that consume the following token as their value. */
|
|
35
|
-
export declare const ENV_VALUE_FLAGS: ReadonlySet<string>;
|
|
36
|
-
/**
|
|
37
|
-
* `env -S` / `--split-string` re-parses its single string argument
|
|
38
|
-
* into a fresh argv, which defeats our whitespace tokenization: the
|
|
39
|
-
* write would live inside one quoted token. Any appearance of the
|
|
40
|
-
* split-string flag (bare, glued, or long-form) forfeits the
|
|
41
|
-
* read-only classification. Fail closed.
|
|
42
|
-
*/
|
|
43
|
-
export declare const ENV_SPLIT_STRING_FLAGS: RegExp;
|
|
44
|
-
/**
|
|
45
|
-
* Classify a Bash command string. `true` means the command is
|
|
46
|
-
* provably read-only and the understanding-gate can allow it without
|
|
47
|
-
* an approved report. `false` means the command is either a write or
|
|
48
|
-
* unclassifiable; the gate must block (fail-closed).
|
|
49
|
-
*
|
|
50
|
-
* The classifier inspects the command as a raw shell string. It does
|
|
51
|
-
* NOT shell-parse or evaluate the command — that would introduce its
|
|
52
|
-
* own attack surface. Instead it rejects any string that contains
|
|
53
|
-
* shell metacharacters that could hide a write, then looks at the
|
|
54
|
-
* first one or two tokens.
|
|
55
|
-
*/
|
|
56
|
-
export declare function isReadOnlyBashCommand(command: string): boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Classify a Bash command that MAY be a `|` pipeline. `true` means every
|
|
59
|
-
* stage is provably read-only, so the whole pipeline reads without
|
|
60
|
-
* writing and the understanding-gate can allow it without an approved
|
|
61
|
-
* report. This is the pipeline-aware companion to `isReadOnlyBashCommand`,
|
|
62
|
-
* used ONLY by the understanding-gate PreToolUse hooks so a post-task
|
|
63
|
-
* read-only poll like `gh pr checks 123 | head` is not blocked.
|
|
64
|
-
*
|
|
65
|
-
* Safety: a pipe between provably read-only stages authorizes no writes —
|
|
66
|
-
* writing requires a write-bin (not on the conservative allowlist), a
|
|
67
|
-
* redirection, or a command substitution, all of which are still refused
|
|
68
|
-
* before the split. Everything except a single `|` is rejected up front:
|
|
69
|
-
* `;`, `&` (and thus `&&`, `|&`, background `&`), `<`, `>`, backtick, and
|
|
70
|
-
* `$(`. `||` (logical OR) and a leading/trailing/doubled pipe surface as
|
|
71
|
-
* an empty stage and are refused. Each stage is then handed to the strict
|
|
72
|
-
* `isReadOnlyBashCommand`, so the per-bin write-flag guards (`find`,
|
|
73
|
-
* `sort`, `tree`, `file`) and the `command`/`env` runner recursion all
|
|
74
|
-
* still apply per stage.
|
|
75
|
-
*/
|
|
76
|
-
export declare function isReadOnlyBashPipeline(command: string): boolean;
|
|
77
|
-
/**
|
|
78
|
-
* Kubectl read-only floor for the Risk Classifier ONLY — see the module
|
|
79
|
-
* doc above this constant block for scope and the blast-radius
|
|
80
|
-
* decision. `true` means every token after `kubectl` is argv-shaped as
|
|
81
|
-
* a plain word, a curated read verb was invoked, every flag is drawn
|
|
82
|
-
* from that verb's (or the global) allowlist, and — for `get`/
|
|
83
|
-
* `describe` — no token mentions a Secret or ConfigMap resource, with
|
|
84
|
-
* no shell chaining, redirection, or substitution anywhere in the
|
|
85
|
-
* command.
|
|
86
|
-
*/
|
|
87
|
-
export declare function isReadOnlyKubectlCommand(command: string): boolean;
|
|
88
|
-
/**
|
|
89
|
-
* `sed` read-only floor for the Risk Classifier ONLY.
|
|
90
|
-
*
|
|
91
|
-
* CORRECTS A FALSE PREMISE this task shipped in round 1 ("without `-i`,
|
|
92
|
-
* sed only writes to stdout"). It does not: sed's `w FILE` command and the
|
|
93
|
-
* `s///w FILE` substitution flag write an operator-named file with no
|
|
94
|
-
* `-i`, no redirection and no shell metacharacter, and `-f SCRIPTFILE`
|
|
95
|
-
* executes a script this classifier never reads. GNU sed's `e` command and
|
|
96
|
-
* `s///e` flag additionally execute a shell command. All four are refused
|
|
97
|
-
* here.
|
|
98
|
-
*
|
|
99
|
-
* `true` requires ALL of: the head is exactly `sed`; no token carries a
|
|
100
|
-
* live shell expansion; every flag is drawn from the read-only allowlist
|
|
101
|
-
* above (so `-i` in every spelling: `-i`, `-i.bak`, `-ni`,
|
|
102
|
-
* `--in-place`, `--in-place=SUFFIX`, and `-f`/`--file` forfeit by never
|
|
103
|
-
* being ON it, not by being enumerated as write flags); and every script
|
|
104
|
-
* (each `-e`/`--expression` value, or the first positional operand when no
|
|
105
|
-
* `-e` was given) parses as a read-only sed program under
|
|
106
|
-
* `sedScriptIsReadOnly`.
|
|
107
|
-
*/
|
|
108
|
-
export declare function isReadOnlySedCommand(command: string): boolean;
|
|
109
|
-
/**
|
|
110
|
-
* curl read-only SHAPE floor for the Risk Classifier ONLY (task fdaad781,
|
|
111
|
-
* decision D-026, round 2 hardening). Composes exactly like the sed and
|
|
112
|
-
* kubectl floors above: it never sinks below an operator classifier,
|
|
113
|
-
* and only the DESTRUCTIVE floor (evaluated first in
|
|
114
|
-
* `risk-classifier.ts`) can raise above it. This comment states only
|
|
115
|
-
* the grammar; see docs/risk-gate.md's "curl read-only SHAPE floor"
|
|
116
|
-
* section for the full history (D-013's two leaked flag lists), the
|
|
117
|
-
* round-2 changes (mandatory `-q`, dropped `-L`/`-k`, the `\r`/query-
|
|
118
|
-
* string fixes), the residuals, and the operator escape hatch.
|
|
119
|
-
*
|
|
120
|
-
* `true` requires ALL of: no shell chaining, redirection, substitution,
|
|
121
|
-
* or background `&` anywhere in the whole command (the same whole-string
|
|
122
|
-
* guard every other floor in this file uses); the head word is exactly
|
|
123
|
-
* `curl` (unquoted, not composite -- no path prefix, no `env`/`command`/
|
|
124
|
-
* `sudo`/other wrapper, those are other heads and forfeit here); the
|
|
125
|
-
* SECOND word is exactly `-q` or `--disable` (unquoted, not composite,
|
|
126
|
-
* not inside a cluster, not merely present later -- curl only honors it
|
|
127
|
-
* as the first argument, and skipping it leaves `$CURL_HOME/.curlrc` /
|
|
128
|
-
* `$XDG_CONFIG_HOME/curlrc` / `~/.curlrc` free to set `output`,
|
|
129
|
-
* `request`, `data`, or `upload-file` underneath every other spelling
|
|
130
|
-
* this shape would otherwise accept -- see docs/risk-gate.md's curl
|
|
131
|
-
* section for the measurement); every remaining word is either a flag
|
|
132
|
-
* drawn from the closed allowlists above (no flag on this list names a
|
|
133
|
-
* file, and the only method any of them selects is HEAD, which is
|
|
134
|
-
* read-only; curl's config surface is closed off by the mandatory
|
|
135
|
-
* `-q`; a value-taking flag consumed only in its separate-token form,
|
|
136
|
-
* and never repeated) or the SINGLE operand, which must be a single-quoted,
|
|
137
|
-
* unbroken word matching `CURL_SHAPE_URL_RE`. Any composite word, any
|
|
138
|
-
* unknown flag, any `=`-glued flag, any second operand, or a missing
|
|
139
|
-
* operand forfeits the whole command.
|
|
140
|
-
*/
|
|
141
|
-
export declare function isReadOnlyCurlCommand(command: string): boolean;
|