@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,444 +0,0 @@
|
|
|
1
|
-
// `harness delegate`: slice 3 of docs/decisions/2026-08-27-ug-auto-mode-approval.md
|
|
2
|
-
// ("`claude -p` child processes", "Delegation marker shape", "TTL, cwd,
|
|
3
|
-
// and subagents"), acceptance criterion 1.
|
|
4
|
-
//
|
|
5
|
-
// Issues a signed delegation for a headless `claude -p` child session,
|
|
6
|
-
// bound to an already-approved PARENT session. The delegation is a
|
|
7
|
-
// PRE-AUTHORIZATION, not an approval (key one of the ADR's two-key
|
|
8
|
-
// design): it supplies the trusted signal and the parent linkage; the
|
|
9
|
-
// child's own Understanding Report (key two) is still checked, and its
|
|
10
|
-
// auto-marker still minted, by the child's own PreToolUse hook: nothing
|
|
11
|
-
// here opens a gate.
|
|
12
|
-
//
|
|
13
|
-
// `issueDelegation` is an in-process function, never calling
|
|
14
|
-
// `process.exit`, so the smoke runner (a future consumer, ADR "TTL, cwd,
|
|
15
|
-
// and subagents": "The harness smoke runner ... is the natural first
|
|
16
|
-
// consumer") and tests can call it directly. The CLI wiring in
|
|
17
|
-
// `src/cli/delegate/register.ts` (registered from `buildProgram` in
|
|
18
|
-
// `src/cli/index.ts`) is a thin wrapper: flag parsing, one CLI-level
|
|
19
|
-
// usage check with the exact ADR-specified message, and printing the
|
|
20
|
-
// result in the approve CLI's line style.
|
|
21
|
-
//
|
|
22
|
-
// PARENT SESSION RESOLUTION mirrors `harness approve understanding`
|
|
23
|
-
// exactly (flag > $CLAUDE_CODE_SESSION_ID > $CLAUDE_SESSION_ID >
|
|
24
|
-
// $CODEX_SESSION_ID > staged .pending-approval), via the same
|
|
25
|
-
// `resolveApprovalSessionId` helper, with NO newest-report fallback
|
|
26
|
-
// (delegation has no report of its own to guess a session from).
|
|
27
|
-
//
|
|
28
|
-
// LEDGER SOURCE: the ledger fact this verb writes uses its own fixed
|
|
29
|
-
// source tag `harness-delegate-cli` (ADR "Audit and doctor"), distinct
|
|
30
|
-
// from `harness approve understanding`'s `harness-approve-understanding`.
|
|
31
|
-
// Reused directly: the approve CLI's `writeLedgerTag` now takes `source`
|
|
32
|
-
// as an additive parameter (default unchanged, so `approveUnderstanding`'s
|
|
33
|
-
// own call is unaffected) so this verb does not re-implement the same
|
|
34
|
-
// findGroundingMcp + addLedgerFact shape `branch-protection.ts` already
|
|
35
|
-
// carries its own independent copy of. There is no actor field to stamp
|
|
36
|
-
// on a delegation and no `--approved-by` flag to override the source:
|
|
37
|
-
// the delegation's signed `approvedBy` string is the packed
|
|
38
|
-
// `delegated:<parent>;cwd=...;task=...;expires=...` tuple
|
|
39
|
-
// (delegation-markers.ts), which has no room for one, and the ADR rules
|
|
40
|
-
// out adding a new required signed field (a `SIGNING_ALG` bump; only an
|
|
41
|
-
// optional field left out of the payload when absent, like `claimTaskId`,
|
|
42
|
-
// keeps the old bytes).
|
|
43
|
-
//
|
|
44
|
-
// REPORT FALLBACK (`--report <path>`): binds the launcher-supplied
|
|
45
|
-
// report by BOTH its content (`reportContentHash`) and its path
|
|
46
|
-
// (`reportPathHash`, via the same `hashDelegationCwd` the cwd binding
|
|
47
|
-
// uses, so both sides of the delegation hash paths the same way). The
|
|
48
|
-
// path bound is NOT the operator's original `--report` argument: this
|
|
49
|
-
// verb COPIES the file (mode 0600) to the conventional location
|
|
50
|
-
// `delegationReportPathFor` derives from the child session id
|
|
51
|
-
// (`harness.generated/.delegation-reports/<child-sid>.md`) and hashes
|
|
52
|
-
// THAT path instead. The child's PreToolUse hook has no channel to learn
|
|
53
|
-
// an arbitrary operator-chosen path, so binding the original path would
|
|
54
|
-
// leave the hook unable to derive it, exactly the gap agent-tasks
|
|
55
|
-
// 49d1ee41 closes; the conventional path is the one location both the
|
|
56
|
-
// writer here and the hook can compute from nothing but a session id.
|
|
57
|
-
// The copy step never silently overwrites a DIFFERENT file already
|
|
58
|
-
// staged there (see `report-conflict` below): the conventional location
|
|
59
|
-
// is per-child, not per-delegation, so re-delegating the same child with
|
|
60
|
-
// a changed report is a caller error to surface loudly, not a quiet
|
|
61
|
-
// clobber of whatever the hook may already be mid-verification against.
|
|
62
|
-
import * as fs from "node:fs";
|
|
63
|
-
import { parseReport } from "@lannguyensi/understanding-gate";
|
|
64
|
-
import { sha256Hex, signingKeyExists, signingKeyPathFor } from "../../runtime/approval-signing.js";
|
|
65
|
-
import { atomicWriteFile } from "../../io/atomic-write.js";
|
|
66
|
-
import { resolveGeneratedDir } from "../../runtime/pending-approval.js";
|
|
67
|
-
import { resolveApprovalSessionId } from "../../runtime/session-id.js";
|
|
68
|
-
import { checkSessionApprovalMarker, delegationReportPathFor, hashDelegationCwd, parseApprovalLifecycle, writeDelegationMarker, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
|
|
69
|
-
import { readRegularFileRejectingSymlink } from "../../io/read-regular-file.js";
|
|
70
|
-
import { resolveMode, toPackageMode } from "../../policy-packs/builtin/understanding-before-execution.js";
|
|
71
|
-
import { loadDeclaredUnderstandingPack, writeLedgerTag } from "../approve/understanding.js";
|
|
72
|
-
import { resolvePaths } from "../loader.js";
|
|
73
|
-
/** Default delegation lifetime when neither `--ttl` nor the pack's `approval_lifecycle.max_age` is set (ADR "TTL, cwd, and subagents"). */
|
|
74
|
-
export const DEFAULT_DELEGATION_TTL_SECONDS = 3600;
|
|
75
|
-
/** Default ledger `source` tag for the audit-only fact this verb writes (ADR "Audit and doctor"). */
|
|
76
|
-
export const DEFAULT_DELEGATE_LEDGER_SOURCE = "harness-delegate-cli";
|
|
77
|
-
/** Ceiling for an explicit `--ttl` when the applied pack sets no `approval_lifecycle.max_age` (L4 fix, agent-tasks 37ad0b05: an unbounded `--ttl` would otherwise let a caller mint a delegation that outlives any lifetime the pack's own policy intends). */
|
|
78
|
-
export const MAX_DELEGATION_TTL_SECONDS = 24 * 60 * 60;
|
|
79
|
-
/** Same 8-4-4-4-12 hex shape the session-id helpers already validate a Claude Code session id against (`session-id.ts`'s `SESSION_TRANSCRIPT_RE`), case-insensitive. */
|
|
80
|
-
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
81
|
-
/** The exact usage message the ADR pins for a delegation with no binding (AC 1). Shared so the CLI's early usage check and this function's own refusal read identically. */
|
|
82
|
-
export const NO_BINDING_MESSAGE = "a delegation must bind a cwd or a task";
|
|
83
|
-
/** The `understanding-delegated:<child-sid>:<parent-sid>` ledger fact content (ADR "Audit and doctor"). */
|
|
84
|
-
export function delegationLedgerFactFor(childSessionId, parentSessionId) {
|
|
85
|
-
return `understanding-delegated:${childSessionId}:${parentSessionId}`;
|
|
86
|
-
}
|
|
87
|
-
/** Control characters rejected from a raw `--task` value, mirroring the `CONTROL_CHARS` check `delegation-markers.ts` already runs on `parentSessionId` (not exported, so mirrored rather than imported). */
|
|
88
|
-
const TASK_ID_CONTROL_CHARS = /[\x00-\x1f\x7f]/;
|
|
89
|
-
/**
|
|
90
|
-
* Validate a raw `--task` value before it ever reaches
|
|
91
|
-
* `writeDelegationMarker` (L1 fix, agent-tasks 37ad0b05: an unvalidated
|
|
92
|
-
* `--task` used to surface downstream as an opaque `write-failed`, or
|
|
93
|
-
* silently rebind, depending on the value). Mirrors
|
|
94
|
-
* `delegation-markers.ts`'s own (unexported) `rejectUnsafeSegmentValue`:
|
|
95
|
-
* empty, or carrying a `;`/`=` segment delimiter, both corrupt the
|
|
96
|
-
* packed `approvedBy` encoding, plus the reserved unbound literal
|
|
97
|
-
* `"-"` (would silently round-trip as "no task bound") and a control
|
|
98
|
-
* character. Returns a detail string on a rejected value, `null` on a
|
|
99
|
-
* safe one.
|
|
100
|
-
*/
|
|
101
|
-
function validateTaskId(taskId) {
|
|
102
|
-
if (taskId.length === 0) {
|
|
103
|
-
return "--task must not be empty";
|
|
104
|
-
}
|
|
105
|
-
if (taskId === "-") {
|
|
106
|
-
return '--task must not be the reserved unbound literal "-"';
|
|
107
|
-
}
|
|
108
|
-
if (taskId.includes(";") || taskId.includes("=")) {
|
|
109
|
-
return `--task must not contain a delegation-segment delimiter (";" or "="): ${JSON.stringify(taskId)}`;
|
|
110
|
-
}
|
|
111
|
-
if (TASK_ID_CONTROL_CHARS.test(taskId)) {
|
|
112
|
-
return `--task must not contain a control character: ${JSON.stringify(taskId)}`;
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Issue a signed delegation marker for a `claude -p` child session. Never
|
|
118
|
-
* calls `process.exit`; every failure mode is a `{ ok: false }` result
|
|
119
|
-
* with a distinct `reason` (ADR slice plan format rule: every refusal is
|
|
120
|
-
* a block with a distinct diagnostic, never a fall-through to allow).
|
|
121
|
-
*
|
|
122
|
-
* Consumption is Claude Code only: the Codex adapter has no delegation
|
|
123
|
-
* consumer (`hook-codex-pre-tool-use.ts` reads neither `.delegations/` nor
|
|
124
|
-
* a child report through this mechanism), so a Codex session can never be
|
|
125
|
-
* the delegated CHILD of this verb. Issuing is a separate question and is
|
|
126
|
-
* NOT restricted the same way: the parent-session resolution below reads
|
|
127
|
-
* `$CODEX_SESSION_ID` like any other tier, and the parent-marker check
|
|
128
|
-
* that follows accepts any validly signed marker regardless of which
|
|
129
|
-
* hook minted it, so a Codex session holding one can be the delegating
|
|
130
|
-
* PARENT of a Claude `-p` child today. Both are a decided platform
|
|
131
|
-
* boundary, not an oversight, see the "Platform scope" amendment in
|
|
132
|
-
* `docs/decisions/2026-08-27-ug-auto-mode-approval.md` and gap 14 in
|
|
133
|
-
* `docs/okf/codex-adapter-parity-gaps.md`.
|
|
134
|
-
*/
|
|
135
|
-
export async function issueDelegation(opts) {
|
|
136
|
-
if (!UUID_RE.test(opts.childSessionId)) {
|
|
137
|
-
return {
|
|
138
|
-
ok: false,
|
|
139
|
-
reason: "invalid-child-session",
|
|
140
|
-
detail: `--child-session must be a UUID (8-4-4-4-12 hex, case-insensitive): got ${JSON.stringify(opts.childSessionId)}`,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
if (opts.cwd === undefined && opts.taskId === undefined) {
|
|
144
|
-
return { ok: false, reason: "no-binding", detail: NO_BINDING_MESSAGE };
|
|
145
|
-
}
|
|
146
|
-
// L3 fix (agent-tasks 37ad0b05): an empty `--cwd` used to fall through
|
|
147
|
-
// uncaught, and `hashDelegationCwd("")` -> `path.resolve("")` silently
|
|
148
|
-
// rebinds it to the issuer's OWN cwd rather than refusing. Caught here,
|
|
149
|
-
// alongside the no-binding check, before either value reaches a hash.
|
|
150
|
-
if (opts.cwd !== undefined && opts.cwd.length === 0) {
|
|
151
|
-
return {
|
|
152
|
-
ok: false,
|
|
153
|
-
reason: "invalid-cwd",
|
|
154
|
-
detail: "--cwd must not be empty (an empty value would silently rebind to the issuer's own cwd via path.resolve)",
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
if (opts.taskId !== undefined) {
|
|
158
|
-
const taskError = validateTaskId(opts.taskId);
|
|
159
|
-
if (taskError !== null) {
|
|
160
|
-
return { ok: false, reason: "invalid-task", detail: taskError };
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
const generatedDir = opts.generatedDir ??
|
|
164
|
-
resolveGeneratedDir({
|
|
165
|
-
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
166
|
-
manifestPath: resolvePaths(opts).base,
|
|
167
|
-
});
|
|
168
|
-
// Signing-key precheck FIRST, before resolving or checking the parent
|
|
169
|
-
// marker at all. `checkApprovalMarker`'s own read path (via
|
|
170
|
-
// `verifyMarkerSignature` -> `getOrCreateSigningKey`) self-heals a
|
|
171
|
-
// missing key by CREATING one as a side effect of verification, that
|
|
172
|
-
// is correct for the gate's read side (delegation-markers.ts's own
|
|
173
|
-
// doc comment on `verifyDelegation` explains why), but it would mean
|
|
174
|
-
// this precheck could never observe a genuinely absent key if it ran
|
|
175
|
-
// after the parent-marker check: by the time that check returns, a
|
|
176
|
-
// key would already exist again. Checking here, before either
|
|
177
|
-
// resolveApprovalSessionId or checkApprovalMarker touches the
|
|
178
|
-
// filesystem, is what keeps "no operator signing key" a real,
|
|
179
|
-
// independently reachable refusal rather than one only writeDelegationMarker's
|
|
180
|
-
// own (necessarily later) precheck could ever see.
|
|
181
|
-
if (!signingKeyExists(generatedDir)) {
|
|
182
|
-
return {
|
|
183
|
-
ok: false,
|
|
184
|
-
reason: "signing-key-absent",
|
|
185
|
-
detail: `no operator signing key at ${signingKeyPathFor(generatedDir)}; refusing to delegate (key creation is an operator-side act, never a side effect of delegating)`,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
// Parent session resolution: exactly the `harness approve
|
|
189
|
-
// understanding` precedence chain (flag > $CLAUDE_CODE_SESSION_ID >
|
|
190
|
-
// $CLAUDE_SESSION_ID > $CODEX_SESSION_ID > staged .pending-approval),
|
|
191
|
-
// with NO 6th-tier newest-report fallback: a delegation has no report
|
|
192
|
-
// of its own to guess a parent session from, and guessing the PARENT
|
|
193
|
-
// wrong here would mint a pre-authorization under the wrong identity.
|
|
194
|
-
const resolvedParent = resolveApprovalSessionId({
|
|
195
|
-
session: opts.parentSessionId,
|
|
196
|
-
generatedDir,
|
|
197
|
-
});
|
|
198
|
-
const parentSessionId = resolvedParent.sessionId;
|
|
199
|
-
if (parentSessionId === "") {
|
|
200
|
-
return {
|
|
201
|
-
ok: false,
|
|
202
|
-
reason: "parent-session-unresolved",
|
|
203
|
-
detail: "no parent session id available. Pass --session-id <id>, or set one of " +
|
|
204
|
-
"$CLAUDE_CODE_SESSION_ID / $CLAUDE_SESSION_ID / $CODEX_SESSION_ID, or run " +
|
|
205
|
-
"`harness preflight` (or trip the gate once) so harness.generated/.pending-approval is staged.",
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
// Manifest: best-effort, exactly like the approve CLI (shared via
|
|
209
|
-
// `loadDeclaredUnderstandingPack`, agent-tasks 37ad0b05). A load
|
|
210
|
-
// failure here degrades the TTL default (falls back to the hardcoded
|
|
211
|
-
// default below) and the ledger write (audit-only, never a refusal)
|
|
212
|
-
// but never blocks issuing the delegation itself.
|
|
213
|
-
const { manifest, manifestLoadError, declaredPack } = loadDeclaredUnderstandingPack(opts);
|
|
214
|
-
const lifecycle = parseApprovalLifecycle(declaredPack.config["approval_lifecycle"]);
|
|
215
|
-
// Key one of the ADR's two-key design: the parent must already carry a
|
|
216
|
-
// valid, unexpired, signed approval marker. Same session-marker check
|
|
217
|
-
// the gate itself runs (`checkSessionApprovalMarker`: signature,
|
|
218
|
-
// `max_age`, and, outside `mode: session`, the task binding of task
|
|
219
|
-
// 5018c0c4, so a parent approval granted for another task does not
|
|
220
|
-
// count), same `max_age` bound.
|
|
221
|
-
const parentCheck = checkSessionApprovalMarker(generatedDir, parentSessionId, {
|
|
222
|
-
...(lifecycle.maxAgeMs !== undefined ? { maxAgeMs: lifecycle.maxAgeMs } : {}),
|
|
223
|
-
...(opts.now !== undefined ? { now: opts.now } : {}),
|
|
224
|
-
taskBinding: !lifecycle.legacyMode,
|
|
225
|
-
});
|
|
226
|
-
if (!parentCheck.matched) {
|
|
227
|
-
const reason = parentCheck.forged
|
|
228
|
-
? "parent-marker-forged"
|
|
229
|
-
: parentCheck.expired
|
|
230
|
-
? "parent-marker-expired"
|
|
231
|
-
: "parent-marker-missing";
|
|
232
|
-
return { ok: false, reason, detail: parentCheck.detail };
|
|
233
|
-
}
|
|
234
|
-
const now = opts.now ?? new Date();
|
|
235
|
-
// L2/L4 fix (agent-tasks 37ad0b05): an explicit `--ttl` is validated
|
|
236
|
-
// and clamped BEFORE it can reach `expiresAt`. `ttlSeconds <= 0` (or
|
|
237
|
-
// non-finite) used to mint a delegation that is already expired
|
|
238
|
-
// (L2); an unbounded `--ttl` used to let a caller mint one that
|
|
239
|
-
// outlives the applied pack's own `approval_lifecycle.max_age` (L4,
|
|
240
|
-
// or the 24h default ceiling when the pack sets none). Only an
|
|
241
|
-
// EXPLICIT `--ttl` is checked here: the computed default below (from
|
|
242
|
-
// `max_age` or the hardcoded default) is by construction already
|
|
243
|
-
// within whichever ceiling would apply to it.
|
|
244
|
-
let ttlSeconds;
|
|
245
|
-
if (opts.ttlSeconds !== undefined) {
|
|
246
|
-
if (!Number.isFinite(opts.ttlSeconds) || opts.ttlSeconds <= 0) {
|
|
247
|
-
return {
|
|
248
|
-
ok: false,
|
|
249
|
-
reason: "invalid-ttl",
|
|
250
|
-
detail: `--ttl must resolve to a positive, finite number of seconds; got ${opts.ttlSeconds}`,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
const ceilingSeconds = lifecycle.maxAgeMs !== undefined
|
|
254
|
-
? Math.round(lifecycle.maxAgeMs / 1_000)
|
|
255
|
-
: MAX_DELEGATION_TTL_SECONDS;
|
|
256
|
-
if (opts.ttlSeconds > ceilingSeconds) {
|
|
257
|
-
return {
|
|
258
|
-
ok: false,
|
|
259
|
-
reason: "ttl-above-max-age",
|
|
260
|
-
detail: lifecycle.maxAgeMs !== undefined
|
|
261
|
-
? `--ttl (${opts.ttlSeconds}s) exceeds the applied pack's approval_lifecycle.max_age (${ceilingSeconds}s)`
|
|
262
|
-
: `--ttl (${opts.ttlSeconds}s) exceeds the default ${ceilingSeconds}s (24h) ceiling; set approval_lifecycle.max_age to raise it`,
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
ttlSeconds = opts.ttlSeconds;
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
ttlSeconds =
|
|
269
|
-
lifecycle.maxAgeMs !== undefined
|
|
270
|
-
? Math.round(lifecycle.maxAgeMs / 1_000)
|
|
271
|
-
: DEFAULT_DELEGATION_TTL_SECONDS;
|
|
272
|
-
}
|
|
273
|
-
const expiresAt = new Date(now.getTime() + ttlSeconds * 1_000).toISOString();
|
|
274
|
-
// Fallback shape: bind the launcher-supplied report by BOTH its
|
|
275
|
-
// content and its path (delegation-markers.ts, "Delegation marker
|
|
276
|
-
// shape" table: half a binding is worse than none). The path bound is
|
|
277
|
-
// the CONVENTIONAL copy this verb writes, not the operator's original
|
|
278
|
-
// `--report` argument (module header, "REPORT FALLBACK").
|
|
279
|
-
let reportPathHash;
|
|
280
|
-
let reportContentHash;
|
|
281
|
-
if (opts.reportPath !== undefined) {
|
|
282
|
-
const read = readRegularFileRejectingSymlink(opts.reportPath);
|
|
283
|
-
if (read.kind !== "ok") {
|
|
284
|
-
return {
|
|
285
|
-
ok: false,
|
|
286
|
-
reason: "report-unreadable",
|
|
287
|
-
detail: `--report ${opts.reportPath} could not be read (${read.kind})`,
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
reportContentHash = sha256Hex(read.content);
|
|
291
|
-
// Validate parseability NOW, with the SAME parser AND the SAME
|
|
292
|
-
// gap-fill mode `persistStdinReport` applies when the child's hook
|
|
293
|
-
// later tries to mint from this report (`stdin-report.ts`'s own
|
|
294
|
-
// `parseReport` call, `mode: toPackageMode(resolveMode(declared).mode)`
|
|
295
|
-
// at hook-pre-tool-use.ts). A hardcoded `"fast_confirm"` here would
|
|
296
|
-
// let a short-form report pass staging and then fail persist under
|
|
297
|
-
// an operator's actually-configured `grill_me`, blocking the child
|
|
298
|
-
// with no retry available (see below). Refusing an unparseable
|
|
299
|
-
// `--report` file here, before anything is signed or staged, matters
|
|
300
|
-
// because a failure caught only at mint time is not cheaply
|
|
301
|
-
// retryable: the adoption ledger records the report's content hash
|
|
302
|
-
// as spent BEFORE `persistStdinReport` even runs, so a bad report
|
|
303
|
-
// permanently spends that content hash, and this verb's own
|
|
304
|
-
// `report-conflict` refusal then blocks re-staging different content
|
|
305
|
-
// at the same conventional path until the file is removed by hand.
|
|
306
|
-
// Catching it here costs nothing and needs no manual cleanup.
|
|
307
|
-
const parsed = parseReport(read.content, {
|
|
308
|
-
taskId: opts.childSessionId,
|
|
309
|
-
createdAt: now.toISOString(),
|
|
310
|
-
mode: toPackageMode(resolveMode(declaredPack).mode),
|
|
311
|
-
riskLevel: "medium",
|
|
312
|
-
});
|
|
313
|
-
if (!parsed.ok) {
|
|
314
|
-
const summary = parsed.error.message.length > 0
|
|
315
|
-
? parsed.error.message
|
|
316
|
-
: `${parsed.error.reason}${parsed.error.missing.length > 0 ? ` (missing: ${parsed.error.missing.join(", ")})` : ""}`;
|
|
317
|
-
return {
|
|
318
|
-
ok: false,
|
|
319
|
-
reason: "report-unparseable",
|
|
320
|
-
detail: `--report ${opts.reportPath} did not parse: ${summary}`,
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
// Stage the conventional copy the child's hook will read back from.
|
|
324
|
-
// Never a silent overwrite: a DIFFERENT file already staged there
|
|
325
|
-
// (a stale copy from an earlier `--report` targeting the same
|
|
326
|
-
// child session id, or anything else) is a refusal, not a clobber.
|
|
327
|
-
// An IDENTICAL file already staged there is left as-is (idempotent
|
|
328
|
-
// re-delegation of the same child with the same report).
|
|
329
|
-
const conventionalPath = delegationReportPathFor(generatedDir, opts.childSessionId);
|
|
330
|
-
const existingAtConventional = readRegularFileRejectingSymlink(conventionalPath);
|
|
331
|
-
if (existingAtConventional.kind === "symlink" || existingAtConventional.kind === "not-regular") {
|
|
332
|
-
return {
|
|
333
|
-
ok: false,
|
|
334
|
-
reason: "report-conflict",
|
|
335
|
-
detail: `${conventionalPath} exists and is not a plain file; refusing to write the launcher-supplied report through it`,
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
if (existingAtConventional.kind === "unreadable") {
|
|
339
|
-
return {
|
|
340
|
-
ok: false,
|
|
341
|
-
reason: "report-conflict",
|
|
342
|
-
detail: `${conventionalPath} exists but could not be read (I/O error); refusing to overwrite it without first confirming its content matches`,
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
if (existingAtConventional.kind === "ok" && existingAtConventional.content !== read.content) {
|
|
346
|
-
return {
|
|
347
|
-
ok: false,
|
|
348
|
-
reason: "report-conflict",
|
|
349
|
-
detail: `a different report is already staged at ${conventionalPath} for child session ${opts.childSessionId}; refusing to overwrite it (no silent overwrite). Remove it first if the new --report content is intentional.`,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
if (existingAtConventional.kind === "missing") {
|
|
353
|
-
try {
|
|
354
|
-
atomicWriteFile(conventionalPath, read.content, { mode: 0o600 });
|
|
355
|
-
}
|
|
356
|
-
catch (err) {
|
|
357
|
-
return {
|
|
358
|
-
ok: false,
|
|
359
|
-
reason: "write-failed",
|
|
360
|
-
detail: `could not stage the launcher-supplied report at ${conventionalPath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
// `existingAtConventional.kind === "ok"` with matching content:
|
|
366
|
-
// already staged, nothing to WRITE, but the pack doc promises mode
|
|
367
|
-
// 0600 for the conventional copy unconditionally, not only on
|
|
368
|
-
// first write, so a pre-existing identical file left at a looser
|
|
369
|
-
// mode by something other than this verb is still brought to 0600
|
|
370
|
-
// on restage.
|
|
371
|
-
try {
|
|
372
|
-
fs.chmodSync(conventionalPath, 0o600);
|
|
373
|
-
}
|
|
374
|
-
catch (err) {
|
|
375
|
-
return {
|
|
376
|
-
ok: false,
|
|
377
|
-
reason: "write-failed",
|
|
378
|
-
detail: `could not set mode 0600 on the already-staged report at ${conventionalPath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
reportPathHash = hashDelegationCwd(conventionalPath);
|
|
383
|
-
}
|
|
384
|
-
const cwdHash = opts.cwd !== undefined ? hashDelegationCwd(opts.cwd) : null;
|
|
385
|
-
const taskId = opts.taskId !== undefined ? opts.taskId : null;
|
|
386
|
-
const writeResult = writeDelegationMarker({
|
|
387
|
-
generatedDir,
|
|
388
|
-
childSessionId: opts.childSessionId,
|
|
389
|
-
parentSessionId,
|
|
390
|
-
cwdHash,
|
|
391
|
-
taskId,
|
|
392
|
-
expiresAt,
|
|
393
|
-
...(reportPathHash !== undefined ? { reportPathHash } : {}),
|
|
394
|
-
...(reportContentHash !== undefined ? { reportContentHash } : {}),
|
|
395
|
-
now,
|
|
396
|
-
});
|
|
397
|
-
if (!writeResult.ok) {
|
|
398
|
-
if (writeResult.reason === "signing-key-absent") {
|
|
399
|
-
return { ok: false, reason: "signing-key-absent", detail: writeResult.detail };
|
|
400
|
-
}
|
|
401
|
-
if (writeResult.reason === "invalid-input") {
|
|
402
|
-
// Reachable: a malformed raw parent session id (`--session-id`, or
|
|
403
|
-
// a value read from $CLAUDE_CODE_SESSION_ID / $CLAUDE_SESSION_ID /
|
|
404
|
-
// $CODEX_SESSION_ID / a staged .pending-approval) still reaches
|
|
405
|
-
// `buildDelegationApprovedBy`'s `rejectMalformedSessionId` /
|
|
406
|
-
// `rejectUnsafeSegmentValue` checks on `parentSessionId`
|
|
407
|
-
// unvalidated by this function. `--task` no longer reaches this
|
|
408
|
-
// branch: its own value is now validated (the `invalid-task`
|
|
409
|
-
// refusal above) before `writeDelegationMarker` is ever called.
|
|
410
|
-
// Mapped to its own reason rather than folded into "write-failed",
|
|
411
|
-
// so a malformed parent session id fails closed with a diagnostic
|
|
412
|
-
// distinct from a genuine I/O write failure.
|
|
413
|
-
return { ok: false, reason: "invalid-input", detail: writeResult.detail };
|
|
414
|
-
}
|
|
415
|
-
return { ok: false, reason: "write-failed", detail: writeResult.detail };
|
|
416
|
-
}
|
|
417
|
-
const ledgerContent = delegationLedgerFactFor(opts.childSessionId, parentSessionId);
|
|
418
|
-
let ledgerResult;
|
|
419
|
-
if (opts.ledgerAdd) {
|
|
420
|
-
ledgerResult = await opts.ledgerAdd(opts.childSessionId, ledgerContent);
|
|
421
|
-
}
|
|
422
|
-
else if (manifest) {
|
|
423
|
-
ledgerResult = await writeLedgerTag(manifest, opts.childSessionId, ledgerContent, {}, DEFAULT_DELEGATE_LEDGER_SOURCE);
|
|
424
|
-
}
|
|
425
|
-
else {
|
|
426
|
-
ledgerResult = {
|
|
427
|
-
ok: false,
|
|
428
|
-
reason: manifestLoadError
|
|
429
|
-
? `manifest unreadable (${manifestLoadError}); skipped ledger write`
|
|
430
|
-
: "manifest unreadable; skipped ledger write",
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
return {
|
|
434
|
-
ok: true,
|
|
435
|
-
filePath: writeResult.filePath,
|
|
436
|
-
parentSessionId,
|
|
437
|
-
childSessionId: opts.childSessionId,
|
|
438
|
-
expiresAt,
|
|
439
|
-
ledgerFact: ledgerResult.ok
|
|
440
|
-
? { written: true }
|
|
441
|
-
: { written: false, reason: ledgerResult.reason },
|
|
442
|
-
};
|
|
443
|
-
}
|
|
444
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/delegate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { issueDelegation } from "./index.js";
|
|
2
|
-
import { InvalidDurationError, parseDurationSeconds } from "../../policies/index.js";
|
|
3
|
-
import { EX_FAIL, EX_USAGE, HarnessExitError } from "../exit-codes.js";
|
|
4
|
-
export function registerDelegate(program, io) {
|
|
5
|
-
const { stdout } = io;
|
|
6
|
-
// `harness delegate` (Slice 3 of docs/decisions/2026-08-27-ug-auto-mode-approval.md,
|
|
7
|
-
// agent-tasks 37ad0b05): issue a signed pre-authorization for a
|
|
8
|
-
// headless `claude -p` child session, bound to an already-approved
|
|
9
|
-
// PARENT session. NOT an approval: the child still writes and gets its
|
|
10
|
-
// own Understanding Report checked by its own PreToolUse hook before
|
|
11
|
-
// its auto-marker is minted. Writes harness.generated/.delegations/,
|
|
12
|
-
// never .approvals/.
|
|
13
|
-
program
|
|
14
|
-
.command("delegate")
|
|
15
|
-
.description("Issue a signed delegation for a headless `claude -p` child session, bound to " +
|
|
16
|
-
"an already-approved parent session (pre-authorization, not an approval: the " +
|
|
17
|
-
"child still writes and gets its own Understanding Report checked). Writes " +
|
|
18
|
-
"harness.generated/.delegations/<child-sid>, never .approvals/. Consumption is " +
|
|
19
|
-
"Claude Code only: the Codex adapter has no delegation consumer, so a Codex " +
|
|
20
|
-
"session cannot be the delegated child. A Codex session CAN be the delegating " +
|
|
21
|
-
"parent today (parent resolution reads $CODEX_SESSION_ID and accepts any " +
|
|
22
|
-
"validly signed marker). See docs/decisions/2026-08-27-ug-auto-mode-approval.md.")
|
|
23
|
-
.requiredOption("--child-session <uuid>", "session id of the claude -p child this delegation authorizes (UUID)")
|
|
24
|
-
.option("--cwd <path>", "bind the delegation to this working directory; at least one of --cwd/--task is required")
|
|
25
|
-
.option("--task <id>", "bind the delegation to this agent-tasks task id; at least one of --cwd/--task is required")
|
|
26
|
-
.option("--ttl <duration>", "delegation lifetime (e.g. 30m, 1h); default: the pack's approval_lifecycle.max_age when set, else 1h")
|
|
27
|
-
.option("--report <path>", "fallback shape: copy the child's Understanding Report to harness.generated/.delegation-reports/<child-sid>.md and bind it by content + that conventional path's hash at spawn time; the child's PreToolUse hook reads it back from there, see the pack doc")
|
|
28
|
-
.option("--session-id <id>", "explicit parent session id (default: $CLAUDE_CODE_SESSION_ID, then $CLAUDE_SESSION_ID, then $CODEX_SESSION_ID, then staged .pending-approval)")
|
|
29
|
-
.option("--config <path>", "manifest path (default: ~/.harness/harness.yaml; legacy fallback ~/.claude/harness.yaml)")
|
|
30
|
-
.option("--project <name>", "apply per-project overrides")
|
|
31
|
-
.action(async (options) => {
|
|
32
|
-
// Usage-level check ahead of every deeper resolution, with the
|
|
33
|
-
// exact message the ADR slice 3 acceptance criterion pins.
|
|
34
|
-
// `issueDelegation` carries the identical check (reason
|
|
35
|
-
// "no-binding") for callers that invoke it directly (the smoke
|
|
36
|
-
// runner, tests) without going through commander's flag parsing.
|
|
37
|
-
if (options.cwd === undefined && options.task === undefined) {
|
|
38
|
-
throw new HarnessExitError("a delegation must bind a cwd or a task", EX_FAIL);
|
|
39
|
-
}
|
|
40
|
-
let ttlSeconds;
|
|
41
|
-
if (options.ttl) {
|
|
42
|
-
try {
|
|
43
|
-
ttlSeconds = parseDurationSeconds(options.ttl);
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
if (err instanceof InvalidDurationError) {
|
|
47
|
-
throw new HarnessExitError(`--ttl: ${err.message}`, EX_USAGE);
|
|
48
|
-
}
|
|
49
|
-
throw err;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const cliOpts = {
|
|
53
|
-
childSessionId: options.childSession,
|
|
54
|
-
};
|
|
55
|
-
// `!== undefined` (not truthy), agreeing with the usage check
|
|
56
|
-
// above: a truthy check would silently drop an explicit `--cwd
|
|
57
|
-
// ''` / `--task ''` instead of letting `issueDelegation` refuse
|
|
58
|
-
// it with `invalid-cwd` / `invalid-task` (L3 fix, agent-tasks
|
|
59
|
-
// 37ad0b05).
|
|
60
|
-
if (options.cwd !== undefined)
|
|
61
|
-
cliOpts.cwd = options.cwd;
|
|
62
|
-
if (options.task !== undefined)
|
|
63
|
-
cliOpts.taskId = options.task;
|
|
64
|
-
if (ttlSeconds !== undefined)
|
|
65
|
-
cliOpts.ttlSeconds = ttlSeconds;
|
|
66
|
-
if (options.report)
|
|
67
|
-
cliOpts.reportPath = options.report;
|
|
68
|
-
if (options.sessionId)
|
|
69
|
-
cliOpts.parentSessionId = options.sessionId;
|
|
70
|
-
if (options.config)
|
|
71
|
-
cliOpts.configPath = options.config;
|
|
72
|
-
if (options.project)
|
|
73
|
-
cliOpts.project = options.project;
|
|
74
|
-
const result = await issueDelegation(cliOpts);
|
|
75
|
-
if (!result.ok) {
|
|
76
|
-
throw new HarnessExitError(`delegate refused (${result.reason}): ${result.detail}`, EX_FAIL);
|
|
77
|
-
}
|
|
78
|
-
const lines = [
|
|
79
|
-
`delegation: ✓ ${result.filePath} (child ${result.childSessionId}, parent ${result.parentSessionId}, expires ${result.expiresAt})`,
|
|
80
|
-
];
|
|
81
|
-
if (result.ledgerFact.written) {
|
|
82
|
-
lines.push(`ledger: ✓ wrote understanding-delegated:${result.childSessionId}:${result.parentSessionId} (audit only)`);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
lines.push(`ledger: ⚠ skipped (${result.ledgerFact.reason ?? "unknown"}) (audit only)`);
|
|
86
|
-
}
|
|
87
|
-
stdout(`${lines.join("\n")}\n`);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/delegate/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,UAAU,gBAAgB,CAC9B,OAAgB,EAChB,EAAgE;IAEhE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACtB,qFAAqF;IACrF,gEAAgE;IAChE,mEAAmE;IACnE,uEAAuE;IACvE,qEAAqE;IACrE,qEAAqE;IACrE,qBAAqB;IACrB,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,+EAA+E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,gFAAgF;QAChF,6EAA6E;QAC7E,+EAA+E;QAC/E,0EAA0E;QAC1E,iFAAiF,CACpF;SACA,cAAc,CACb,wBAAwB,EACxB,qEAAqE,CACtE;SACA,MAAM,CACL,cAAc,EACd,yFAAyF,CAC1F;SACA,MAAM,CACL,aAAa,EACb,2FAA2F,CAC5F;SACA,MAAM,CACL,kBAAkB,EAClB,sGAAsG,CACvG;SACA,MAAM,CACL,iBAAiB,EACjB,4PAA4P,CAC7P;SACA,MAAM,CACL,mBAAmB,EACnB,+IAA+I,CAChJ;SACA,MAAM,CAAC,iBAAiB,EAAE,0FAA0F,CAAC;SACrH,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CACL,KAAK,EAAE,OASN,EAAE,EAAE;QACH,+DAA+D;QAC/D,2DAA2D;QAC3D,wDAAwD;QACxD,+DAA+D;QAC/D,iEAAiE;QACjE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,IAAI,gBAAgB,CACxB,wCAAwC,EACxC,OAAO,CACR,CAAC;QACJ,CAAC;QACD,IAAI,UAA8B,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;oBACxC,MAAM,IAAI,gBAAgB,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAA0C;YACrD,cAAc,EAAE,OAAO,CAAC,YAAY;SACrC,CAAC;QACF,8DAA8D;QAC9D,+DAA+D;QAC/D,gEAAgE;QAChE,8DAA8D;QAC9D,aAAa;QACb,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9D,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;QACnE,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,EAAE,EACvD,OAAO,CACR,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAa;YACtB,iBAAiB,MAAM,CAAC,QAAQ,WAAW,MAAM,CAAC,cAAc,YAAY,MAAM,CAAC,eAAe,aAAa,MAAM,CAAC,SAAS,GAAG;SACnI,CAAC;QACF,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,+CAA+C,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,eAAe,eAAe,CAC9G,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,0BAA0B,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,gBAAgB,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CACF,CAAC;AACN,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Manifest } from "../../schema/index.js";
|
|
2
|
-
export interface AutoApproveModeWarning {
|
|
3
|
-
/**
|
|
4
|
-
* The RESOLVED effective mode (`resolveModeFromConfig(pack).mode`);
|
|
5
|
-
* never the literal `pack.config.mode` value. Always a recognised
|
|
6
|
-
* Mode literal (the resolver always returns one, defaulting to
|
|
7
|
-
* `grill_me` when `config.mode` is absent or unrecognised).
|
|
8
|
-
*/
|
|
9
|
-
mode: string;
|
|
10
|
-
/** Rendered as the `⚠` line itself. */
|
|
11
|
-
message: string;
|
|
12
|
-
/**
|
|
13
|
-
* Indented detail lines rendered directly under {@link message} by
|
|
14
|
-
* `format.ts`, mirroring `understandingModeEnv`'s detail-line idiom.
|
|
15
|
-
*/
|
|
16
|
-
detail: string[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Pure: manifest in, a warning out (or `undefined` when there is nothing
|
|
20
|
-
* to flag). Only fires when:
|
|
21
|
-
* - the `understanding-before-execution` pack is declared AND enabled
|
|
22
|
-
* (a pack that never runs has no live auto-approve path to warn
|
|
23
|
-
* about, mirrors the enabled-gate `understanding-mode-env.ts` and
|
|
24
|
-
* `ug-auto-approvals.ts` use);
|
|
25
|
-
* - `config.auto_approve` parses as a valid opt-in block (schema
|
|
26
|
-
* validation already rejects a malformed block at lint time, so a
|
|
27
|
-
* manifest that reaches doctor with an unparseable block has
|
|
28
|
-
* already failed loud elsewhere; this mirrors that same fail-closed
|
|
29
|
-
* "not opted in" reading rather than re-deriving a second opinion);
|
|
30
|
-
* - the RESOLVED effective mode (`resolveModeFromConfig(pack).mode`)
|
|
31
|
-
* is not `"grill_me"`. An absent or unrecognised `config.mode`
|
|
32
|
-
* resolves to `grill_me` (`DEFAULT_MODE`) and therefore never fires
|
|
33
|
-
* this warning, see the module header for why that resolved value,
|
|
34
|
-
* not the literal config key, is what the auto path's report
|
|
35
|
-
* actually carries.
|
|
36
|
-
*/
|
|
37
|
-
export declare function checkAutoApproveMode(manifest: Manifest): AutoApproveModeWarning | undefined;
|