@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,591 +0,0 @@
|
|
|
1
|
-
// `harness session-start preflight` — SessionStart hook entrypoint.
|
|
2
|
-
//
|
|
3
|
-
// Wired by the Full template's `git-preflight` SessionStart hook. Reads
|
|
4
|
-
// the SessionStart event JSON from stdin, runs `agent-preflight`
|
|
5
|
-
// (`preflight run --json [--setup] <cwd>`; `--setup` is opt-in via the
|
|
6
|
-
// manifest's `session_start_preflight.setup` key, default `false`, task
|
|
7
|
-
// 30183330, see ./src/schema/session-start-preflight.ts), and on a
|
|
8
|
-
// `ready:true` result writes a `preflight:${REPO}` fact to the evidence
|
|
9
|
-
// ledger so the `preflight-before-investigation` / `preflight-before-push`
|
|
10
|
-
// policies have a fresh tag to match within their `within` windows.
|
|
11
|
-
//
|
|
12
|
-
// SessionStart hooks are `blocking:false`: this command MUST NOT break
|
|
13
|
-
// the session loop. Every failure path — `preflight` not on PATH, a
|
|
14
|
-
// timeout, a non-`ready` result, an unreachable ledger — logs one line
|
|
15
|
-
// to stderr and exits 0. The only observable effect of a failure is
|
|
16
|
-
// that the preflight policies stay closed (which is the safe default).
|
|
17
|
-
//
|
|
18
|
-
// `ready:false` deliberately does NOT write the tag: the policy intent
|
|
19
|
-
// is "block investigative git reads until agent-preflight ran cleanly",
|
|
20
|
-
// so a failing preflight must leave the gate shut, not satisfy it.
|
|
21
|
-
import { execFile } from "node:child_process";
|
|
22
|
-
import { randomBytes } from "node:crypto";
|
|
23
|
-
import * as fs from "node:fs";
|
|
24
|
-
import * as path from "node:path";
|
|
25
|
-
import { resolveGitContext, resolveScopedProjectName, } from "../../runtime/index.js";
|
|
26
|
-
import { resolveManifestLedgerWriter } from "../../runtime/ledger-writer.js";
|
|
27
|
-
import { resolveGeneratedDir } from "../../runtime/pending-approval.js";
|
|
28
|
-
import { resolveReadSessionId } from "../../runtime/session-id.js";
|
|
29
|
-
import { readStdinBounded, STDIN_IDLE_TIMEOUT_MS, stdinTimeoutNote } from "../bounded-stdin.js";
|
|
30
|
-
import { loadManifest, resolvePaths } from "../loader.js";
|
|
31
|
-
import { classifySessionSource, explicitSessionId, FALLBACK_SESSION, } from "./shared-options.js";
|
|
32
|
-
// Exported (task 6993d9b5, round 2 F5) so
|
|
33
|
-
// `session-start-preflight-setup-version.ts`'s `PREFLIGHT_SETUP_VERSION_COMMAND`
|
|
34
|
-
// derives from this producer's own binary name instead of carrying an
|
|
35
|
-
// independent "preflight" string literal that could silently drift from it.
|
|
36
|
-
export const PREFLIGHT_BIN = "preflight";
|
|
37
|
-
// Default upper bound on `preflight run --json <cwd>` for the
|
|
38
|
-
// SessionStart producer. Was 25s through v0.17.4; bumped to 60s after
|
|
39
|
-
// the agent-grounding dogfood (agent-tasks/7265599e) where a healthy
|
|
40
|
-
// preflight took ~28s, just past the old ceiling. The wrapper still
|
|
41
|
-
// kills runaway invocations; this only widens the window for honest
|
|
42
|
-
// medium-size repos. Operators with even larger preflights can still
|
|
43
|
-
// override per-call via `harness preflight --timeout <ms>`.
|
|
44
|
-
const DEFAULT_PREFLIGHT_TIMEOUT_MS = 60_000;
|
|
45
|
-
const LEDGER_SOURCE = "harness-session-start-preflight";
|
|
46
|
-
// Not-ready diagnostic log: the raw `preflight run --json` payload is
|
|
47
|
-
// persisted so an operator (or a follow-up session) can see the FULL
|
|
48
|
-
// check output, not just the capped first-N detail lines this producer
|
|
49
|
-
// surfaces on stderr. `keep-last-20` rotation bounds the directory —
|
|
50
|
-
// it is shared across every repo the operator preflights from this
|
|
51
|
-
// host, so unbounded growth would be a slow disk leak.
|
|
52
|
-
const FAIL_LOG_KEEP_LAST = 20;
|
|
53
|
-
const FAIL_LOG_PREFIX = "preflight-";
|
|
54
|
-
/**
|
|
55
|
-
* Environment for the spawned `preflight` child: the parent env minus
|
|
56
|
-
* HARNESS_ALLOW_REAL_GENERATED_DIR. The launcher sets that flag so the
|
|
57
|
-
* real harness binary may fall back to the operator's home dir, but the
|
|
58
|
-
* preflight child runs the repo's own test suite (its `npm-test` check),
|
|
59
|
-
* and an inherited flag re-enables the implicit real-homedir fallback
|
|
60
|
-
* INSIDE those test processes. With non-empty operator state (e.g. a
|
|
61
|
-
* `harness pause` sentinel) that broke 110 tests and surfaced as a false
|
|
62
|
-
* `failing: npm-test`, keeping the preflight gate shut. Third incident
|
|
63
|
-
* of the operator-state-isolation class PR #199 pinned; the flag must
|
|
64
|
-
* stay scoped to the process the operator actually invoked.
|
|
65
|
-
*/
|
|
66
|
-
export function preflightChildEnv(parentEnv = process.env) {
|
|
67
|
-
const env = { ...parentEnv };
|
|
68
|
-
delete env["HARNESS_ALLOW_REAL_GENERATED_DIR"];
|
|
69
|
-
return env;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Build the argv passed to the `preflight` child (task 30183330). Pure
|
|
73
|
-
* and exported so a test can pin the rendered command directly, with
|
|
74
|
-
* and without `setup`, instead of only exercising the injected
|
|
75
|
-
* `runPreflight` seam. `--setup` is inserted before the positional
|
|
76
|
-
* `cwd` argument, matching agent-preflight's own `preflight run
|
|
77
|
-
* [options] [repoPath]` usage.
|
|
78
|
-
*/
|
|
79
|
-
export function buildPreflightArgv(cwd, setup) {
|
|
80
|
-
return setup ? ["run", "--json", "--setup", cwd] : ["run", "--json", cwd];
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Default `preflight` runner: spawn `preflight run --json [--setup]
|
|
84
|
-
* <cwd>` and parse its stdout. Resolves `{ ok: false }` (never throws)
|
|
85
|
-
* for the not-installed / timeout / unparseable cases so the caller can
|
|
86
|
-
* degrade.
|
|
87
|
-
*/
|
|
88
|
-
function spawnPreflight(cwd, timeoutMs, setup) {
|
|
89
|
-
return new Promise((resolve) => {
|
|
90
|
-
execFile(PREFLIGHT_BIN, buildPreflightArgv(cwd, setup), {
|
|
91
|
-
timeout: timeoutMs,
|
|
92
|
-
maxBuffer: 16 * 1024 * 1024,
|
|
93
|
-
encoding: "utf8",
|
|
94
|
-
env: preflightChildEnv(),
|
|
95
|
-
}, (err, stdout) => {
|
|
96
|
-
// `preflight` may exit non-zero on a not-ready result while still
|
|
97
|
-
// emitting valid JSON, so a parseable stdout wins over the exit
|
|
98
|
-
// code. Only a missing binary / timeout / unparseable output is a
|
|
99
|
-
// genuine "could not run".
|
|
100
|
-
const text = (stdout ?? "").trim();
|
|
101
|
-
if (text.length > 0) {
|
|
102
|
-
try {
|
|
103
|
-
return resolve({ ok: true, json: JSON.parse(text) });
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
/* fall through to the error path */
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (err) {
|
|
110
|
-
const e = err;
|
|
111
|
-
if (e.code === "ENOENT") {
|
|
112
|
-
return resolve({
|
|
113
|
-
ok: false,
|
|
114
|
-
reason: `\`${PREFLIGHT_BIN}\` not on PATH (npm i -g @lannguyensi/agent-preflight)`,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
// maxBuffer overflow also sets `killed:true`; check it first so
|
|
118
|
-
// an over-budget output is not mis-reported as a timeout.
|
|
119
|
-
if (e.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER") {
|
|
120
|
-
return resolve({
|
|
121
|
-
ok: false,
|
|
122
|
-
reason: `\`${PREFLIGHT_BIN} run --json\` output exceeded the read buffer`,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
if (e.killed) {
|
|
126
|
-
return resolve({
|
|
127
|
-
ok: false,
|
|
128
|
-
reason: `\`${PREFLIGHT_BIN} run\` timed out after ${timeoutMs}ms`,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
return resolve({ ok: false, reason: `\`${PREFLIGHT_BIN} run\` failed: ${e.message}` });
|
|
132
|
-
}
|
|
133
|
-
return resolve({
|
|
134
|
-
ok: false,
|
|
135
|
-
reason: `\`${PREFLIGHT_BIN} run --json\` produced no parseable JSON`,
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
// Up to this many valid detail lines are surfaced per failing check.
|
|
141
|
-
// Was 1 (the check's first detail line only) through v0.2x; a bare
|
|
142
|
-
// check name plus a single truncated line once cost a long false-
|
|
143
|
-
// negative diagnosis because the actual FAIL line (test name) sat
|
|
144
|
-
// past the first line the producer looked at. Task T-001.
|
|
145
|
-
const MAX_DETAIL_LINES_PER_CHECK = 3;
|
|
146
|
-
const DETAIL_LINE_CHAR_CAP = 140;
|
|
147
|
-
function capDetailLine(raw) {
|
|
148
|
-
const trimmed = raw.trim().replace(/\s+/g, " ");
|
|
149
|
-
return trimmed.length > DETAIL_LINE_CHAR_CAP
|
|
150
|
-
? `${trimmed.slice(0, DETAIL_LINE_CHAR_CAP - 1)}…`
|
|
151
|
-
: trimmed;
|
|
152
|
-
}
|
|
153
|
-
function describeNotReady(json, logPath) {
|
|
154
|
-
const failing = (json.checks ?? [])
|
|
155
|
-
.filter((c) => c.status === "fail" || c.status === "error")
|
|
156
|
-
.map((c) => {
|
|
157
|
-
const name = c.name ?? "(unnamed)";
|
|
158
|
-
// Surface up to MAX_DETAIL_LINES_PER_CHECK of the check's own detail
|
|
159
|
-
// lines: a bare check name ("failing: npm-test") once cost a long
|
|
160
|
-
// false-negative diagnosis because the actual reason never left the
|
|
161
|
-
// child JSON. The typeof guards matter: this is untrusted subprocess
|
|
162
|
-
// JSON behind a cast, and a SessionStart producer must never throw
|
|
163
|
-
// (blocking:false, exit-0 contract above), so a malformed element is
|
|
164
|
-
// filtered out instead of crashing; a check with no valid detail
|
|
165
|
-
// line at all degrades to its bare name.
|
|
166
|
-
const validDetails = Array.isArray(c.details)
|
|
167
|
-
? c.details.filter((d) => typeof d === "string" && d.trim().length > 0)
|
|
168
|
-
: [];
|
|
169
|
-
const lines = validDetails.length > 0
|
|
170
|
-
? validDetails.slice(0, MAX_DETAIL_LINES_PER_CHECK)
|
|
171
|
-
: typeof c.message === "string" && c.message.trim().length > 0
|
|
172
|
-
? [c.message]
|
|
173
|
-
: [];
|
|
174
|
-
if (lines.length === 0)
|
|
175
|
-
return name;
|
|
176
|
-
const capped = lines.map(capDetailLine).join(" | ");
|
|
177
|
-
return `${name} (${capped})`;
|
|
178
|
-
});
|
|
179
|
-
const confidence = typeof json.confidence === "number" ? json.confidence.toFixed(2) : "?";
|
|
180
|
-
const failSuffix = failing.length > 0 ? `; failing: ${failing.join(", ")}` : "";
|
|
181
|
-
const logSuffix = logPath ? `; log: ${logPath}` : "";
|
|
182
|
-
return `preflight not ready (confidence ${confidence})${failSuffix}${logSuffix}`;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Default not-ready log directory: `<home>/logs` (task T-001). Routed
|
|
186
|
-
* through `resolvePaths()` — the same idiom `defaultReportsDir`'s caller
|
|
187
|
-
* uses in approve/understanding.ts — instead of hardcoding
|
|
188
|
-
* `path.join(os.homedir(), ".harness", "logs")` directly (task 80f49922,
|
|
189
|
-
* reviewer finding on a48b9729). Two effects: (1) this now respects the
|
|
190
|
-
* real home-dir precedence chain ($HARNESS_HOME, then `~/.harness/`,
|
|
191
|
-
* then the legacy `~/.claude/` fallback) instead of silently diverging
|
|
192
|
-
* from the rest of the harness state (regression from 31fbf856); (2) it
|
|
193
|
-
* inherits the throw-on-real-home-dir guard in `resolvePaths()`
|
|
194
|
-
* (loader.ts:45-64), which previously protected this seam only via a
|
|
195
|
-
* suite-local `vi.mock("node:os")` pin in preflight.test.ts — a caller
|
|
196
|
-
* that forgot to inject `logDir` from any OTHER test or child process
|
|
197
|
-
* would still silently write into the operator's real home dir.
|
|
198
|
-
* Evaluated lazily from the `opts.logDir ?? defaultFailLogDir(opts)`
|
|
199
|
-
* call site, so injecting `logDir` alone still bypasses the guard.
|
|
200
|
-
*
|
|
201
|
-
* Precedence when BOTH `homeDir` and `configPath` are injected at once:
|
|
202
|
-
* `configPath` wins here, inherited from `resolvePaths()`'s own `base =
|
|
203
|
-
* opts.configPath ?? path.join(home, DEFAULT_BASENAME)` (loader.ts) —
|
|
204
|
-
* `configPath`, when present, is used verbatim regardless of `homeDir`.
|
|
205
|
-
* This is the opposite of `resolveGeneratedDir()` (io/generated-dir.ts),
|
|
206
|
-
* which checks `homeDir` FIRST and only falls back to the manifest
|
|
207
|
-
* path's directory when `homeDir` is undefined, so `homeDir` wins there.
|
|
208
|
-
* Intentional, pre-existing divergence between the two resolvers, not a
|
|
209
|
-
* bug to reconcile here — documented, not changed.
|
|
210
|
-
*/
|
|
211
|
-
function defaultFailLogDir(opts) {
|
|
212
|
-
return path.join(path.dirname(resolvePaths(opts).base), "logs");
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Resolve the not-ready fail-log directory, catching only the
|
|
216
|
-
* `resolvePaths()` guard's throw (task 80f49922 reviewer finding).
|
|
217
|
-
* `persistFailLog()` below has its own never-throws contract (see its
|
|
218
|
-
* doc comment), so it is called OUTSIDE this try/catch at the call
|
|
219
|
-
* site — wrapping it here too would blur which of the two failure
|
|
220
|
-
* modes (guard throw vs. write failure) actually produced a given
|
|
221
|
-
* `{ ok: false, reason }`.
|
|
222
|
-
*/
|
|
223
|
-
function resolveFailLogDir(opts) {
|
|
224
|
-
try {
|
|
225
|
-
return { ok: true, logDir: opts.logDir ?? defaultFailLogDir(opts) };
|
|
226
|
-
}
|
|
227
|
-
catch (err) {
|
|
228
|
-
return { ok: false, reason: err instanceof Error ? err.message : String(err) };
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
/** Repo names land in a filename; strip anything not filename-safe. */
|
|
232
|
-
function sanitizeForFilename(value) {
|
|
233
|
-
const cleaned = value.replace(/[^a-zA-Z0-9._-]/g, "-");
|
|
234
|
-
return cleaned.length > 0 ? cleaned : "repo";
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Rotate `logDir` down to the `FAIL_LOG_KEEP_LAST` most recently modified
|
|
238
|
-
* `preflight-*.json` files, oldest first. Best-effort: any single stat/
|
|
239
|
-
* unlink failure is swallowed so one unreadable entry cannot block
|
|
240
|
-
* rotation of the rest. The directory is shared across every repo the
|
|
241
|
-
* operator preflights from this host, so filename order is not a
|
|
242
|
-
* reliable time proxy — mtime is.
|
|
243
|
-
*/
|
|
244
|
-
function rotateFailLogDir(logDir) {
|
|
245
|
-
const names = fs
|
|
246
|
-
.readdirSync(logDir)
|
|
247
|
-
.filter((name) => name.startsWith(FAIL_LOG_PREFIX) && name.endsWith(".json"));
|
|
248
|
-
if (names.length <= FAIL_LOG_KEEP_LAST)
|
|
249
|
-
return;
|
|
250
|
-
const withMtime = names
|
|
251
|
-
.map((name) => {
|
|
252
|
-
const full = path.join(logDir, name);
|
|
253
|
-
try {
|
|
254
|
-
return { full, mtimeMs: fs.statSync(full).mtimeMs };
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
return null;
|
|
258
|
-
}
|
|
259
|
-
})
|
|
260
|
-
.filter((e) => e !== null)
|
|
261
|
-
.sort((a, b) => a.mtimeMs - b.mtimeMs);
|
|
262
|
-
const excess = withMtime.length - FAIL_LOG_KEEP_LAST;
|
|
263
|
-
for (let i = 0; i < excess; i++) {
|
|
264
|
-
const entry = withMtime[i];
|
|
265
|
-
if (!entry)
|
|
266
|
-
continue;
|
|
267
|
-
try {
|
|
268
|
-
fs.unlinkSync(entry.full);
|
|
269
|
-
}
|
|
270
|
-
catch {
|
|
271
|
-
/* best-effort rotation; a stray leftover file is not fatal */
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Persist the not-ready `preflight run --json` payload (pretty-printed)
|
|
277
|
-
* to `<logDir>/preflight-<repo>-<timestamp>-<hex4>.json`, then rotate the
|
|
278
|
-
* directory. The 4-hex suffix disambiguates writes that land in the same
|
|
279
|
-
* millisecond (the ISO timestamp's resolution), where the second write
|
|
280
|
-
* would otherwise silently overwrite the first. Never throws: a write or
|
|
281
|
-
* rotation failure degrades to `{ ok: false, reason }` so the caller can
|
|
282
|
-
* note() and keep going — the SessionStart producer must exit 0 on every
|
|
283
|
-
* path.
|
|
284
|
-
*/
|
|
285
|
-
function persistFailLog(json, repo, logDir) {
|
|
286
|
-
let filePath;
|
|
287
|
-
try {
|
|
288
|
-
fs.mkdirSync(logDir, { recursive: true });
|
|
289
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
290
|
-
const unique = randomBytes(2).toString("hex");
|
|
291
|
-
// Cap the sanitized basename so a very long repo/worktree name can't blow past filesystem name-length limits.
|
|
292
|
-
filePath = path.join(logDir, `${FAIL_LOG_PREFIX}${sanitizeForFilename(repo).slice(0, 100)}-${timestamp}-${unique}.json`);
|
|
293
|
-
fs.writeFileSync(filePath, `${JSON.stringify(json, null, 2)}\n`, "utf8");
|
|
294
|
-
}
|
|
295
|
-
catch (err) {
|
|
296
|
-
return { ok: false, reason: err.message };
|
|
297
|
-
}
|
|
298
|
-
try {
|
|
299
|
-
rotateFailLogDir(logDir);
|
|
300
|
-
}
|
|
301
|
-
catch {
|
|
302
|
-
/* rotation failure must not undo an already-successful log write */
|
|
303
|
-
}
|
|
304
|
-
return { ok: true, path: filePath };
|
|
305
|
-
}
|
|
306
|
-
export async function runSessionStartPreflight(opts = {}) {
|
|
307
|
-
const stdin = opts.stdin ?? process.stdin;
|
|
308
|
-
const stderr = opts.stderr ?? process.stderr;
|
|
309
|
-
const preflightTimeoutMs = opts.preflightTimeoutMs ?? DEFAULT_PREFLIGHT_TIMEOUT_MS;
|
|
310
|
-
const note = (msg) => {
|
|
311
|
-
stderr.write(`harness session-start preflight: ${msg}\n`);
|
|
312
|
-
};
|
|
313
|
-
const done = (wrote, repo, branch, sessionId, sessionSource, reason) => ({
|
|
314
|
-
exitCode: 0,
|
|
315
|
-
wrote,
|
|
316
|
-
repo,
|
|
317
|
-
branch,
|
|
318
|
-
sessionId,
|
|
319
|
-
sessionSource,
|
|
320
|
-
...(reason !== undefined && { reason }),
|
|
321
|
-
});
|
|
322
|
-
// An explicit --session id overrides every other source, so stdin is not
|
|
323
|
-
// read at all in that case: a manual or scripted call must not wait on a
|
|
324
|
-
// stream that may never close. Without it, the read is idle-bounded and a
|
|
325
|
-
// timeout falls back to the default session resolution below.
|
|
326
|
-
let event;
|
|
327
|
-
try {
|
|
328
|
-
if (typeof opts.session === "string" && opts.session.length > 0) {
|
|
329
|
-
event = {};
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
const idleTimeoutMs = opts.stdinIdleTimeoutMs ?? STDIN_IDLE_TIMEOUT_MS;
|
|
333
|
-
const read = await readStdinBounded(stdin, idleTimeoutMs);
|
|
334
|
-
if (read.timedOut)
|
|
335
|
-
note(stdinTimeoutNote(read, idleTimeoutMs));
|
|
336
|
-
event = JSON.parse(read.text.trim() || "{}");
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
catch (err) {
|
|
340
|
-
const reason = `malformed event JSON: ${err.message}`;
|
|
341
|
-
note(reason);
|
|
342
|
-
return done(false, "", "", FALLBACK_SESSION, "default", reason);
|
|
343
|
-
}
|
|
344
|
-
const cwd = typeof event.cwd === "string" && event.cwd.length > 0 ? event.cwd : process.cwd();
|
|
345
|
-
const { repo, branch, sha } = resolveGitContext(cwd);
|
|
346
|
-
if (repo === "") {
|
|
347
|
-
const reason = `cwd is not inside a git work tree (${cwd}); nothing to preflight`;
|
|
348
|
-
note(reason);
|
|
349
|
-
return done(false, "", "", FALLBACK_SESSION, "default", reason);
|
|
350
|
-
}
|
|
351
|
-
// Session-id resolution chain. The hook-driven path (Claude Code feeds
|
|
352
|
-
// SessionStart event JSON on stdin) lands at tier "stdin" and is the
|
|
353
|
-
// common case. Manual invocations from an operator's `!`-shell — where
|
|
354
|
-
// there is no event JSON — fall back through env, then transcript
|
|
355
|
-
// discovery (same heuristic `harness audit` / `harness explain --trace`
|
|
356
|
-
// use), and only as a last resort to the literal `"default"`. Tags
|
|
357
|
-
// recorded under `"default"` will never satisfy a `preflight-before-*`
|
|
358
|
-
// gate, so we loud-warn rather than letting the success line read as
|
|
359
|
-
// if the producer worked.
|
|
360
|
-
const explicit = explicitSessionId(opts.session, event);
|
|
361
|
-
const resolveSession = opts.resolveSession ?? resolveReadSessionId;
|
|
362
|
-
const sessionId = resolveSession(explicit, {});
|
|
363
|
-
const sessionSource = classifySessionSource(opts.session, event, sessionId);
|
|
364
|
-
// Stage `.pending-approval` as soon as we resolve a real session id so
|
|
365
|
-
// `harness approve understanding` (no flags) works from the operator's
|
|
366
|
-
// `!`-shell without needing a prior PreToolUse gate-block. Producer
|
|
367
|
-
// hand-off matches the PreToolUse hook's existing one (same writer,
|
|
368
|
-
// same path, same single-line content). Skipped when the session id
|
|
369
|
-
// is the literal "default", since pointing approve at "default" would
|
|
370
|
-
// never satisfy any task-scoped gate. Best-effort: a write failure
|
|
371
|
-
// must NOT break the session loop, so any error is silently swallowed
|
|
372
|
-
// (the operator can always fall back to `--session <id>` as before).
|
|
373
|
-
// Multi-session caveat: two parallel Claude sessions on the same host
|
|
374
|
-
// will clobber each other's `.pending-approval` (single-slot file).
|
|
375
|
-
// Acceptable for the one-Claude-per-repo operator pattern; the worst
|
|
376
|
-
// case is approve resolving to the wrong session id, which the operator
|
|
377
|
-
// catches via the canonical-gate-signal line in the approve output.
|
|
378
|
-
// OPT-IN: only fires when the caller explicitly passes a writer. The
|
|
379
|
-
// CLI entry points wire `writePendingApproval`; library callers (and
|
|
380
|
-
// every existing vitest case) get the no-op default, so the producer
|
|
381
|
-
// never pollutes the real `~/.claude/harness.generated/` from a test.
|
|
382
|
-
// Hotfix for v0.21.0 which defaulted to ON and caused the npm-test
|
|
383
|
-
// preflight check to clobber the operator's pending-approval file.
|
|
384
|
-
if (sessionSource !== "default" &&
|
|
385
|
-
typeof opts.stagePendingApproval === "function") {
|
|
386
|
-
try {
|
|
387
|
-
const generatedDir = resolveGeneratedDir({
|
|
388
|
-
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
389
|
-
manifestPath: resolvePaths(opts).base,
|
|
390
|
-
});
|
|
391
|
-
opts.stagePendingApproval(generatedDir, sessionId);
|
|
392
|
-
}
|
|
393
|
-
catch {
|
|
394
|
-
/* best-effort, never escalate into a hook error */
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
// Resolve `--setup` (task 30183330) BEFORE spawning `preflight` so the
|
|
398
|
-
// flag reaches the very first invocation. Best-effort, independent of
|
|
399
|
-
// the ledger-writer's own `loadManifest` call further down: a
|
|
400
|
-
// config/parse failure here degrades to `setup: false` (matches the
|
|
401
|
-
// sibling companions' "not configured -> skip" contract) rather than
|
|
402
|
-
// aborting the whole preflight run over an unrelated manifest problem,
|
|
403
|
-
// whereas the ledger-writer's later load failure DOES abort (existing
|
|
404
|
-
// behavior, unrelated to this change).
|
|
405
|
-
//
|
|
406
|
-
// Per-repo scoping (task c88461c1): an explicit `opts.project` (the
|
|
407
|
-
// CLI's `--project <name>`) still wins outright. Otherwise this
|
|
408
|
-
// producer derives a project name from `cwd` via the shared
|
|
409
|
-
// `deriveProjectName` helper (review round 2, decision D-021a:
|
|
410
|
-
// resolves to the MAIN checkout's directory name, the basename of
|
|
411
|
-
// the directory containing the repository's shared git common dir,
|
|
412
|
-
// so every linked worktree of one repository shares the same
|
|
413
|
-
// project layer, unlike `repo` above, which names the checkout
|
|
414
|
-
// directory itself and differs per worktree) and feeds it through
|
|
415
|
-
// the loader's EXISTING `LoaderOptions.project` mechanism
|
|
416
|
-
// (src/cli/loader.ts's `resolvePaths`/`applyLayers`), the same seam
|
|
417
|
-
// every other command's own `--project <name>` flag already uses.
|
|
418
|
-
// `explain-policy` and `doctor` derive the SAME name from the SAME
|
|
419
|
-
// helper (review round 2, decision D-021b), so all three consumers
|
|
420
|
-
// of `session_start_preflight.setup` agree on which layer applies to
|
|
421
|
-
// a given cwd. The `?? repo` fallback only matters when
|
|
422
|
-
// `deriveProjectName` returns null (an unreadable `.git` file); `cwd`
|
|
423
|
-
// is already known to sit inside a git work tree at this point (an
|
|
424
|
-
// empty `repo` already returned early above), so in practice this
|
|
425
|
-
// reduces to the checkout basename either way. A repo with no
|
|
426
|
-
// `<home>/projects/<name>/harness.overrides.yaml` on disk keeps the
|
|
427
|
-
// host-wide (base plus machine-layer) value: the loader resolves
|
|
428
|
-
// `projectLayer: null` when that file does not exist (loader.ts's
|
|
429
|
-
// `fs.existsSync` check), so nothing extra is merged in that case.
|
|
430
|
-
// See docs/CLI.md's `session_start_preflight.setup` Notes for the
|
|
431
|
-
// full rule.
|
|
432
|
-
const sessionStartPreflightProjectName = resolveScopedProjectName({
|
|
433
|
-
project: opts.project,
|
|
434
|
-
cwd,
|
|
435
|
-
fallback: repo,
|
|
436
|
-
});
|
|
437
|
-
const setupEnabled = (() => {
|
|
438
|
-
try {
|
|
439
|
-
const manifest = opts.manifest ??
|
|
440
|
-
loadManifest({ ...opts, project: sessionStartPreflightProjectName }).manifest;
|
|
441
|
-
return manifest.session_start_preflight.setup;
|
|
442
|
-
}
|
|
443
|
-
catch (err) {
|
|
444
|
-
// One diagnostic line naming the layer path (task c88461c1,
|
|
445
|
-
// review round 3 residual; task `1c4eb3ea`): a scoped-load
|
|
446
|
-
// failure here was silent everywhere before this task, degrading
|
|
447
|
-
// straight to `setup: false` with no trace of WHY. Best-effort:
|
|
448
|
-
// only fires when `!opts.manifest` (an injected manifest never
|
|
449
|
-
// reaches `loadManifest` above, so a throw from THAT branch would
|
|
450
|
-
// be a caller bug, not a layer failure) and only names the layer
|
|
451
|
-
// path when `resolvePaths` itself can resolve one (its own
|
|
452
|
-
// "refused to fall back to the real harness home dir" test-safety
|
|
453
|
-
// throw, see loader.ts, is swallowed here rather than surfaced as
|
|
454
|
-
// a misleading "layer failed to load" line).
|
|
455
|
-
//
|
|
456
|
-
// Lead-in describes the SCOPED LOAD, not "the project layer"
|
|
457
|
-
// (task 1c4eb3ea, round 2, D-027 item 5): `loadManifest` above
|
|
458
|
-
// merges the base manifest, every applicable machine-override
|
|
459
|
-
// layer, AND the project layer in one call, so a throw here can
|
|
460
|
-
// come from any of the three; `layerPath` below is only ever
|
|
461
|
-
// used to DECIDE whether to emit this line at all (a project
|
|
462
|
-
// layer must actually exist on disk to attribute the failure to
|
|
463
|
-
// project scoping at all) and as context in the message, never
|
|
464
|
-
// as the claimed culprit, so a base- or machine-layer parse
|
|
465
|
-
// failure with a valid, existing project layer no longer reads
|
|
466
|
-
// as "the project layer failed to load" when it did not.
|
|
467
|
-
// Multi-line YAML parse errors are collapsed to their FIRST line
|
|
468
|
-
// (D-027 item 5) so this stays the promised one diagnostic line.
|
|
469
|
-
if (!opts.manifest) {
|
|
470
|
-
try {
|
|
471
|
-
const layerPath = resolvePaths({
|
|
472
|
-
...opts,
|
|
473
|
-
project: sessionStartPreflightProjectName,
|
|
474
|
-
}).projectLayer;
|
|
475
|
-
if (layerPath !== null) {
|
|
476
|
-
const errMessage = err instanceof Error ? err.message : String(err);
|
|
477
|
-
const errFirstLine = errMessage.split("\n")[0];
|
|
478
|
-
note(`session_start_preflight.setup: the project-scoped manifest load for ` +
|
|
479
|
-
`project ${sessionStartPreflightProjectName} failed (${errFirstLine}); ` +
|
|
480
|
-
`degrading to setup: false (project layer: ${layerPath})`);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
catch {
|
|
484
|
-
/* best-effort diagnostic only; setup:false below still happens */
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
return false;
|
|
488
|
-
}
|
|
489
|
-
})();
|
|
490
|
-
const runPreflight = opts.runPreflight ?? spawnPreflight;
|
|
491
|
-
const preflight = await runPreflight(cwd, preflightTimeoutMs, setupEnabled);
|
|
492
|
-
if (!preflight.ok) {
|
|
493
|
-
note(preflight.reason);
|
|
494
|
-
return done(false, repo, branch, sessionId, sessionSource, preflight.reason);
|
|
495
|
-
}
|
|
496
|
-
if (preflight.json.ready !== true) {
|
|
497
|
-
// defaultFailLogDir() now routes through resolvePaths(), which throws
|
|
498
|
-
// when neither homeDir nor configPath is injected and the real binary
|
|
499
|
-
// has not set HARNESS_ALLOW_REAL_GENERATED_DIR=1 (loader.ts:45-64,
|
|
500
|
-
// task 80f49922). Fold that into the same { ok: false, reason } shape
|
|
501
|
-
// persistFailLog already returns for a write failure — this producer
|
|
502
|
-
// must degrade, never throw (see file header).
|
|
503
|
-
const logDirResult = resolveFailLogDir(opts);
|
|
504
|
-
const persisted = logDirResult.ok
|
|
505
|
-
? persistFailLog(preflight.json, repo, logDirResult.logDir)
|
|
506
|
-
: { ok: false, reason: logDirResult.reason };
|
|
507
|
-
if (!persisted.ok) {
|
|
508
|
-
note(`preflight fail-log write failed: ${persisted.reason}`);
|
|
509
|
-
}
|
|
510
|
-
const reason = describeNotReady(preflight.json, persisted.ok ? persisted.path : undefined);
|
|
511
|
-
note(`${reason} — leaving the preflight tag unwritten so the gate stays closed`);
|
|
512
|
-
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
513
|
-
}
|
|
514
|
-
const confidence = typeof preflight.json.confidence === "number"
|
|
515
|
-
? preflight.json.confidence.toFixed(2)
|
|
516
|
-
: "?";
|
|
517
|
-
// Emit BOTH per-repo and per-branch tags in one fact: the requires
|
|
518
|
-
// evaluator substring-matches, so a single entry containing
|
|
519
|
-
// `preflight:${REPO}` and `preflight:${BRANCH}` satisfies both
|
|
520
|
-
// `preflight-before-investigation` (REPO, within 1h) and
|
|
521
|
-
// `preflight-before-push` (BRANCH, within 10m). Caveat: a SessionStart
|
|
522
|
-
// producer cannot keep the 10m push window fresh through a long
|
|
523
|
-
// session — a push-time refresh is a separate concern (see task notes).
|
|
524
|
-
// On a detached HEAD `branch` is "" — only the REPO tag is written.
|
|
525
|
-
// `head:<sha>` is appended when resolveGitContext returned a sha (loose
|
|
526
|
-
// ref read or packed-refs fallback succeeded, or detached HEAD held a
|
|
527
|
-
// raw sha). The at_head requires-flag relies on this token to satisfy
|
|
528
|
-
// the gate at the recorded HEAD regardless of `within`; consumers that
|
|
529
|
-
// ignore the flag continue to work because the token is ignored by
|
|
530
|
-
// substring-match logic.
|
|
531
|
-
const tags = branch.length > 0 ? `preflight:${repo} preflight:${branch}` : `preflight:${repo}`;
|
|
532
|
-
const headSuffix = sha.length > 0 ? ` head:${sha}` : "";
|
|
533
|
-
const content = `${tags} ready:true confidence:${confidence}${headSuffix}`;
|
|
534
|
-
let writeLedger = opts.writeLedger;
|
|
535
|
-
if (!writeLedger) {
|
|
536
|
-
let manifest;
|
|
537
|
-
try {
|
|
538
|
-
// Second `loadManifest(opts)` call of this run (task 30183330); the
|
|
539
|
-
// `setupEnabled` resolution earlier in this function is the first.
|
|
540
|
-
// Deliberately NOT reused, and deliberately NOT reading
|
|
541
|
-
// `opts.manifest`: a failure here ABORTS the whole run (the catch
|
|
542
|
-
// below returns early with no ledger write attempted), while the
|
|
543
|
-
// `setupEnabled` call's failure degrades to `setup: false` and lets
|
|
544
|
-
// the run proceed. One shared load could carry both outcomes (a
|
|
545
|
-
// captured result plus its error), but two local try/catch blocks
|
|
546
|
-
// keep each site's failure handling obvious where it is read, and
|
|
547
|
-
// the second load is cheap; that is the whole reason for the repeat.
|
|
548
|
-
//
|
|
549
|
-
// Deliberately plain `opts` here (no `project: deriveProjectName(cwd)
|
|
550
|
-
// ?? repo`, unlike the `setupEnabled` load above, task c88461c1):
|
|
551
|
-
// this manifest only feeds `resolveManifestLedgerWriter` below, which
|
|
552
|
-
// reads the ledger-writer wiring (`tools.mcp[]` / grounding config),
|
|
553
|
-
// not `session_start_preflight`. The per-repo project layer exists
|
|
554
|
-
// to scope THAT key; routing it through this unrelated load would
|
|
555
|
-
// let a project layer silently reach ledger-writer config it was
|
|
556
|
-
// never meant to touch, for zero benefit to this call site.
|
|
557
|
-
manifest = loadManifest(opts).manifest;
|
|
558
|
-
}
|
|
559
|
-
catch (err) {
|
|
560
|
-
const reason = `manifest load failed: ${err.message}`;
|
|
561
|
-
note(reason);
|
|
562
|
-
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
563
|
-
}
|
|
564
|
-
const resolved = resolveManifestLedgerWriter(manifest, {
|
|
565
|
-
...(opts.ledgerTimeoutMs !== undefined ? { ledgerTimeoutMs: opts.ledgerTimeoutMs } : {}),
|
|
566
|
-
});
|
|
567
|
-
if (!resolved.ok) {
|
|
568
|
-
const reason = `${resolved.reason}; cannot record preflight tag`;
|
|
569
|
-
note(reason);
|
|
570
|
-
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
571
|
-
}
|
|
572
|
-
writeLedger = resolved.write;
|
|
573
|
-
}
|
|
574
|
-
const result = await writeLedger({ sessionId, content, source: LEDGER_SOURCE });
|
|
575
|
-
if (!result.ok) {
|
|
576
|
-
const reason = `ledger write failed: ${result.reason ?? "unknown error"}`;
|
|
577
|
-
note(reason);
|
|
578
|
-
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
579
|
-
}
|
|
580
|
-
note(`recorded ${content} for session ${sessionId}`);
|
|
581
|
-
if (sessionSource === "default") {
|
|
582
|
-
// Loud-warn: the tag landed under the literal "default" session, which
|
|
583
|
-
// no `preflight-before-*` policy ever queries. The recorded line above
|
|
584
|
-
// can read as success; this second line is the actionable corrective.
|
|
585
|
-
note("WARNING: session resolved to the literal \"default\". preflight-before-* gates query " +
|
|
586
|
-
"the real Claude Code session id and will NOT see this tag. Pipe SessionStart event JSON " +
|
|
587
|
-
"on stdin, export $CLAUDE_SESSION_ID, or pass --session <id> for manual / scripted use.");
|
|
588
|
-
}
|
|
589
|
-
return done(true, repo, branch, sessionId, sessionSource);
|
|
590
|
-
}
|
|
591
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/session-start/index.ts"],"names":[],"mappings":"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"}
|