@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
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
// Branch reader for the branch-protection gate (task a4d8adc5).
|
|
2
|
+
//
|
|
3
|
+
// The gate asks git which branch a directory is on instead of parsing git's
|
|
4
|
+
// files itself. A directory is read in two steps, both bounded
|
|
5
|
+
// (`readBranchAt`):
|
|
6
|
+
//
|
|
7
|
+
// 1. Presence walk: from the directory, as it is given, up to the
|
|
8
|
+
// filesystem root, `lstat` an entry named `.git` (any type; nothing is
|
|
9
|
+
// opened or read). When no such entry exists anywhere above, the
|
|
10
|
+
// directory is outside every repository and git is not spawned at all.
|
|
11
|
+
// 2. `git -C <dir> symbolic-ref -q HEAD` through `execFile` (no shell,
|
|
12
|
+
// stdin closed at once, each output stream capped), in the process
|
|
13
|
+
// environment minus every `GIT_*` variable (so a `GIT_DIR` or
|
|
14
|
+
// `GIT_WORK_TREE` inherited by the hook cannot point git at another
|
|
15
|
+
// repository) plus `LC_ALL=C`, `GIT_TERMINAL_PROMPT=0` and
|
|
16
|
+
// `GIT_OPTIONAL_LOCKS=0`. `HOME` stays, so the user's global git
|
|
17
|
+
// configuration (`safe.directory` and the like) applies exactly as it
|
|
18
|
+
// does to the agent's own git. A timeout ends the call with SIGKILL.
|
|
19
|
+
//
|
|
20
|
+
// git's answer is classified and never interpreted further: exit 0 with
|
|
21
|
+
// `refs/heads/<name>` is a branch, exit 1 with nothing on stdout and nothing
|
|
22
|
+
// on stderr is a detached HEAD (`symbolic-ref -q` prints nothing then), and
|
|
23
|
+
// anything else (another exit, an exit 1 with any output, a signal, a
|
|
24
|
+
// timeout, git missing, output past the cap, an exit-0 answer of another
|
|
25
|
+
// shape) is an error carrying git's first stderr line. The caller decides
|
|
26
|
+
// what an error means; the branch-protection hook refuses on every one.
|
|
27
|
+
//
|
|
28
|
+
// A path can name a directory in two ways, and the hook judges both:
|
|
29
|
+
//
|
|
30
|
+
// - as written (`nearestExistingDirectoryAsWritten`): `.` and `..` are
|
|
31
|
+
// resolved on the text (`path.resolve`), symlinks stay in the path, and
|
|
32
|
+
// `readBranchAt` walks and asks git there;
|
|
33
|
+
// - physically (`nearestExistingDirectory`, `writeTargetDirectories`,
|
|
34
|
+
// `readBranch`): symlinks followed and `..` taken from the directory
|
|
35
|
+
// reached so far, the directory `git -C` changes into.
|
|
36
|
+
//
|
|
37
|
+
// Resolving the paths of one event is bounded by the caller (`PathResolution`)
|
|
38
|
+
// and shares one cache of physical directories.
|
|
39
|
+
//
|
|
40
|
+
// The process runner is injectable (`GitHeadReader`) so tests can produce a
|
|
41
|
+
// timeout, a signal or a missing binary without depending on the host.
|
|
42
|
+
import { execFile } from "node:child_process";
|
|
43
|
+
import * as fs from "node:fs";
|
|
44
|
+
import * as path from "node:path";
|
|
45
|
+
/** Bound on one git call; the child is killed with SIGKILL when it passes. */
|
|
46
|
+
export const GIT_BRANCH_TIMEOUT_MS = 2000;
|
|
47
|
+
/** Cap on each of git's output streams, in bytes. */
|
|
48
|
+
export const GIT_OUTPUT_CAP_BYTES = 4096;
|
|
49
|
+
/** Cap on the stderr line carried into a refusal, in characters. */
|
|
50
|
+
export const GIT_STDERR_LINE_CAP = 200;
|
|
51
|
+
/**
|
|
52
|
+
* The environment git runs in: the given environment without any variable
|
|
53
|
+
* whose name starts with `GIT_` (compared upper-cased), plus the three fixed
|
|
54
|
+
* settings. Everything else, `HOME` and `PATH` included, is kept.
|
|
55
|
+
*/
|
|
56
|
+
export function gitReaderEnv(base = process.env) {
|
|
57
|
+
const env = {};
|
|
58
|
+
for (const [key, value] of Object.entries(base)) {
|
|
59
|
+
if (key.toUpperCase().startsWith("GIT_"))
|
|
60
|
+
continue;
|
|
61
|
+
env[key] = value;
|
|
62
|
+
}
|
|
63
|
+
env["LC_ALL"] = "C";
|
|
64
|
+
env["GIT_TERMINAL_PROMPT"] = "0";
|
|
65
|
+
env["GIT_OPTIONAL_LOCKS"] = "0";
|
|
66
|
+
return env;
|
|
67
|
+
}
|
|
68
|
+
function decode(out) {
|
|
69
|
+
if (Buffer.isBuffer(out))
|
|
70
|
+
return out.toString("utf8");
|
|
71
|
+
return typeof out === "string" ? out : "";
|
|
72
|
+
}
|
|
73
|
+
/** The real reader: one `execFile` of git, never a shell. */
|
|
74
|
+
export const readGitHead = (dir, timeoutMs) => new Promise((resolve) => {
|
|
75
|
+
let settled = false;
|
|
76
|
+
const finish = (answer) => {
|
|
77
|
+
if (settled)
|
|
78
|
+
return;
|
|
79
|
+
settled = true;
|
|
80
|
+
resolve(answer);
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
const child = execFile("git", ["-C", dir, "symbolic-ref", "-q", "HEAD"], {
|
|
84
|
+
env: gitReaderEnv(),
|
|
85
|
+
encoding: "buffer",
|
|
86
|
+
maxBuffer: GIT_OUTPUT_CAP_BYTES,
|
|
87
|
+
timeout: timeoutMs,
|
|
88
|
+
killSignal: "SIGKILL",
|
|
89
|
+
windowsHide: true,
|
|
90
|
+
shell: false,
|
|
91
|
+
}, (err, stdout, stderr) => {
|
|
92
|
+
const out = decode(stdout);
|
|
93
|
+
const errText = decode(stderr);
|
|
94
|
+
if (err === null) {
|
|
95
|
+
finish({ kind: "exited", code: 0, stdout: out, stderr: errText });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const code = err.code;
|
|
99
|
+
if (code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER") {
|
|
100
|
+
finish({ kind: "oversized", stderr: errText });
|
|
101
|
+
}
|
|
102
|
+
else if (typeof code === "number") {
|
|
103
|
+
finish({ kind: "exited", code, stdout: out, stderr: errText });
|
|
104
|
+
}
|
|
105
|
+
else if (err.killed === true) {
|
|
106
|
+
// execFile killed the child itself and the output cap is ruled
|
|
107
|
+
// out above, so its timer fired.
|
|
108
|
+
finish({ kind: "timed-out", timeoutMs, stderr: errText });
|
|
109
|
+
}
|
|
110
|
+
else if (typeof err.signal === "string" && err.signal.length > 0) {
|
|
111
|
+
finish({ kind: "signaled", signal: err.signal, stderr: errText });
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
finish({ kind: "spawn-failed", code: typeof code === "string" ? code : "unknown" });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// stdin is closed at once: git never waits on it.
|
|
118
|
+
child.stdin?.on("error", () => undefined);
|
|
119
|
+
child.stdin?.end();
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
const code = err.code;
|
|
123
|
+
finish({ kind: "spawn-failed", code: typeof code === "string" ? code : "unknown" });
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
/** First non-empty line of `text`, control characters replaced, capped. */
|
|
127
|
+
export function firstLine(text) {
|
|
128
|
+
const line = text.split(/\r?\n/).find((l) => l.trim().length > 0) ?? "";
|
|
129
|
+
const clean = line.trim().replace(/[\u0000-\u001f\u007f-\u009f]/g, "?");
|
|
130
|
+
return clean.length > GIT_STDERR_LINE_CAP ? `${clean.slice(0, GIT_STDERR_LINE_CAP)}...` : clean;
|
|
131
|
+
}
|
|
132
|
+
function withLine(what, stderr) {
|
|
133
|
+
const line = firstLine(stderr);
|
|
134
|
+
return line.length > 0 ? `${what}: ${line}` : what;
|
|
135
|
+
}
|
|
136
|
+
const BRANCH_REF = /^refs\/heads\/([^\n\r\u0000]+)\n?$/;
|
|
137
|
+
/** Classify one git answer. Never returns `outside`. */
|
|
138
|
+
export function classifyGitHeadAnswer(answer) {
|
|
139
|
+
switch (answer.kind) {
|
|
140
|
+
case "exited": {
|
|
141
|
+
if (answer.code === 0) {
|
|
142
|
+
const m = BRANCH_REF.exec(answer.stdout);
|
|
143
|
+
if (m !== null)
|
|
144
|
+
return { kind: "branch", name: m[1] };
|
|
145
|
+
return { kind: "error", detail: `unexpected output from git: "${firstLine(answer.stdout)}"` };
|
|
146
|
+
}
|
|
147
|
+
if (answer.code === 1 && answer.stdout === "" && answer.stderr === "")
|
|
148
|
+
return { kind: "detached" };
|
|
149
|
+
return { kind: "error", detail: withLine(`git exited ${answer.code}`, answer.stderr) };
|
|
150
|
+
}
|
|
151
|
+
case "signaled":
|
|
152
|
+
return { kind: "error", detail: withLine(`git was killed by ${answer.signal}`, answer.stderr) };
|
|
153
|
+
case "timed-out":
|
|
154
|
+
return { kind: "error", detail: withLine(`git did not answer within ${answer.timeoutMs} ms`, answer.stderr) };
|
|
155
|
+
case "oversized":
|
|
156
|
+
return { kind: "error", detail: withLine(`git's output passed ${GIT_OUTPUT_CAP_BYTES} bytes`, answer.stderr) };
|
|
157
|
+
case "spawn-failed":
|
|
158
|
+
return { kind: "error", detail: `git could not be started (${answer.code})` };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* True when an entry named `.git` exists in `dir` or any directory above it.
|
|
163
|
+
* Only `lstat` is used, so the entry is never opened. An `lstat` that fails
|
|
164
|
+
* for another reason than a missing path counts as present: git decides.
|
|
165
|
+
* `dir` is walked as written (`..` taken on the text, symlinks left in
|
|
166
|
+
* place); `readBranch` passes the physical directory.
|
|
167
|
+
*/
|
|
168
|
+
export function hasGitEntryAbove(dir) {
|
|
169
|
+
let current = path.resolve(dir);
|
|
170
|
+
for (;;) {
|
|
171
|
+
try {
|
|
172
|
+
fs.lstatSync(path.join(current, ".git"));
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
const code = err.code;
|
|
177
|
+
if (code !== "ENOENT" && code !== "ENOTDIR")
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
const parent = path.dirname(current);
|
|
181
|
+
if (parent === current)
|
|
182
|
+
return false;
|
|
183
|
+
current = parent;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** Bound on the symlinks followed by their text for one target. */
|
|
187
|
+
const MAX_LINK_HOPS = 32;
|
|
188
|
+
/** Thrown when resolving the paths of one event passes the caller's bound. */
|
|
189
|
+
export class PathBoundError extends Error {
|
|
190
|
+
constructor() {
|
|
191
|
+
super("resolving the paths passed the bound");
|
|
192
|
+
this.name = "PathBoundError";
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function checkBound(res) {
|
|
196
|
+
if (res.overBound?.() === true)
|
|
197
|
+
throw new PathBoundError();
|
|
198
|
+
}
|
|
199
|
+
/** `p` made absolute against `base` without editing its text (`..` and symlinks stay for the filesystem). */
|
|
200
|
+
export function absolutePath(p, base = process.cwd()) {
|
|
201
|
+
if (path.isAbsolute(p))
|
|
202
|
+
return p;
|
|
203
|
+
const b = path.isAbsolute(base) ? base : `${process.cwd()}${path.sep}${base}`;
|
|
204
|
+
return `${b}${path.sep}${p}`;
|
|
205
|
+
}
|
|
206
|
+
/** The root and the components of an absolute path, `..` kept, `.` and empty ones dropped. */
|
|
207
|
+
function splitPath(p) {
|
|
208
|
+
const root = path.parse(p).root;
|
|
209
|
+
const separators = process.platform === "win32" ? /[\\/]+/ : /\/+/;
|
|
210
|
+
const parts = p
|
|
211
|
+
.slice(root.length)
|
|
212
|
+
.split(separators)
|
|
213
|
+
.filter((part) => part !== "" && part !== ".");
|
|
214
|
+
return { root, parts };
|
|
215
|
+
}
|
|
216
|
+
/** The physical path of `p` when it leads to an existing directory; null otherwise. */
|
|
217
|
+
function physicalDirectory(p, res) {
|
|
218
|
+
const known = res.memo?.get(p);
|
|
219
|
+
if (known !== undefined)
|
|
220
|
+
return known;
|
|
221
|
+
let found;
|
|
222
|
+
try {
|
|
223
|
+
const real = fs.realpathSync.native(p);
|
|
224
|
+
found = fs.statSync(real).isDirectory() ? real : null;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
found = null;
|
|
228
|
+
}
|
|
229
|
+
res.memo?.set(p, found);
|
|
230
|
+
return found;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Walk `parts` from `root` the way the operating system resolves a path:
|
|
234
|
+
* each existing component is resolved through the filesystem (symlinks
|
|
235
|
+
* followed), and `..` steps up from the directory reached so far. From the
|
|
236
|
+
* first component that is not an existing directory on, the rest is kept as
|
|
237
|
+
* text (a write may create it; a `..` there steps back over it). Returns the
|
|
238
|
+
* physical directory reached and how many components below it are missing.
|
|
239
|
+
*/
|
|
240
|
+
function walkPhysical(root, parts, res) {
|
|
241
|
+
let dir = physicalDirectory(root, res) ?? root;
|
|
242
|
+
const pending = [];
|
|
243
|
+
for (const part of parts) {
|
|
244
|
+
checkBound(res);
|
|
245
|
+
if (part === "..") {
|
|
246
|
+
if (pending.length > 0)
|
|
247
|
+
pending.pop();
|
|
248
|
+
else
|
|
249
|
+
dir = path.dirname(dir);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (pending.length > 0) {
|
|
253
|
+
pending.push(part);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
const next = physicalDirectory(path.join(dir, part), res);
|
|
257
|
+
if (next === null)
|
|
258
|
+
pending.push(part);
|
|
259
|
+
else
|
|
260
|
+
dir = next;
|
|
261
|
+
}
|
|
262
|
+
return { dir, missing: pending.length };
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* The nearest directory at or above `p` that exists (a Write may create the
|
|
266
|
+
* directories in between), as the operating system resolves `p`: through
|
|
267
|
+
* symlinks, with `..` taken from the directory reached so far. A path that
|
|
268
|
+
* cannot be examined counts as missing.
|
|
269
|
+
*/
|
|
270
|
+
export function nearestExistingDirectory(p, res = {}) {
|
|
271
|
+
const { root, parts } = splitPath(absolutePath(p));
|
|
272
|
+
return walkPhysical(root, parts, res).dir;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* The nearest directory at or above `p` that exists, with `p` taken as
|
|
276
|
+
* written: made absolute and `.` and `..` resolved on the text
|
|
277
|
+
* (`path.resolve`), then shortened from the end until it names an existing
|
|
278
|
+
* directory. Symlinks stay in the result. A path that cannot be examined
|
|
279
|
+
* counts as missing.
|
|
280
|
+
*/
|
|
281
|
+
export function nearestExistingDirectoryAsWritten(p, res = {}) {
|
|
282
|
+
let current = path.resolve(p);
|
|
283
|
+
for (;;) {
|
|
284
|
+
checkBound(res);
|
|
285
|
+
try {
|
|
286
|
+
if (fs.statSync(current).isDirectory())
|
|
287
|
+
return current;
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
/* missing or not examinable: look one level up */
|
|
291
|
+
}
|
|
292
|
+
const parent = path.dirname(current);
|
|
293
|
+
if (parent === current)
|
|
294
|
+
return current;
|
|
295
|
+
current = parent;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
function isSymlink(p) {
|
|
299
|
+
try {
|
|
300
|
+
return fs.lstatSync(p).isSymbolicLink();
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The physical directories a write to `target` (relative to `cwd`) lands
|
|
308
|
+
* in: the nearest existing directory holding it and, when the target itself
|
|
309
|
+
* is a symlink, the directory it leads to as well (a write may replace the
|
|
310
|
+
* link or go through it). A link that does not resolve yet is followed by
|
|
311
|
+
* its text, up to a bound.
|
|
312
|
+
*/
|
|
313
|
+
export function writeTargetDirectories(target, cwd, res = {}) {
|
|
314
|
+
const dirs = [];
|
|
315
|
+
let next = absolutePath(target, cwd);
|
|
316
|
+
for (let hops = 0; next !== null && hops <= MAX_LINK_HOPS; hops += 1) {
|
|
317
|
+
checkBound(res);
|
|
318
|
+
const { root, parts } = splitPath(next);
|
|
319
|
+
next = null;
|
|
320
|
+
const name = parts[parts.length - 1];
|
|
321
|
+
if (name === undefined || name === "..") {
|
|
322
|
+
dirs.push(walkPhysical(root, parts, res).dir);
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
const holder = walkPhysical(root, parts.slice(0, -1), res);
|
|
326
|
+
dirs.push(holder.dir);
|
|
327
|
+
if (holder.missing > 0)
|
|
328
|
+
break;
|
|
329
|
+
const entry = path.join(holder.dir, name);
|
|
330
|
+
if (!isSymlink(entry))
|
|
331
|
+
break;
|
|
332
|
+
try {
|
|
333
|
+
const real = fs.realpathSync.native(entry);
|
|
334
|
+
dirs.push(physicalDirectory(real, res) ?? path.dirname(real));
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
try {
|
|
338
|
+
next = absolutePath(fs.readlinkSync(entry), holder.dir);
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
next = null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return [...new Set(dirs)];
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Presence walk from `dir` as it is given (`..` taken on the text, symlinks
|
|
349
|
+
* left in place), then `git -C <dir>`. `dir` should be an existing absolute
|
|
350
|
+
* directory.
|
|
351
|
+
*/
|
|
352
|
+
export async function readBranchAt(dir, opts = {}) {
|
|
353
|
+
if (!hasGitEntryAbove(dir))
|
|
354
|
+
return { kind: "outside" };
|
|
355
|
+
const reader = opts.reader ?? readGitHead;
|
|
356
|
+
return classifyGitHeadAnswer(await reader(dir, opts.timeoutMs ?? GIT_BRANCH_TIMEOUT_MS));
|
|
357
|
+
}
|
|
358
|
+
/** The physical path of the directory `dir` (the one `git -C` changes into), or why it has none. */
|
|
359
|
+
export function resolveDirectory(dir) {
|
|
360
|
+
let physical;
|
|
361
|
+
try {
|
|
362
|
+
physical = fs.realpathSync.native(dir);
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
const code = err.code;
|
|
366
|
+
return { kind: "error", detail: `the directory could not be resolved (${typeof code === "string" ? code : "unknown"})` };
|
|
367
|
+
}
|
|
368
|
+
return { kind: "path", path: physical };
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Presence walk, then git, both on the physical directory of `dir` (the one
|
|
372
|
+
* `git -C` changes into). `dir` should be an existing directory; one that
|
|
373
|
+
* cannot be resolved is an error.
|
|
374
|
+
*/
|
|
375
|
+
export async function readBranch(dir, opts = {}) {
|
|
376
|
+
const physical = resolveDirectory(dir);
|
|
377
|
+
if (physical.kind === "error")
|
|
378
|
+
return physical;
|
|
379
|
+
return readBranchAt(physical.path, opts);
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=git-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-branch.js","sourceRoot":"","sources":["../../src/runtime/git-branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ export declare class HermeticSpawnViolationError extends Error {
|
|
|
18
18
|
* the disabled guard is visible rather than silent.
|
|
19
19
|
*
|
|
20
20
|
* @param binaryLabel human-readable name of what would be spawned (e.g.
|
|
21
|
-
* `"
|
|
21
|
+
* `"npm i -g"`), used in the error message.
|
|
22
22
|
* @param hint one line telling the test author what to do instead (e.g.
|
|
23
|
-
* "inject a fake `
|
|
23
|
+
* "inject a fake `installSpawn` runner").
|
|
24
24
|
*/
|
|
25
25
|
export declare function assertNoRealSpawnInTests(binaryLabel: string, hint: string): void;
|
|
@@ -1,42 +1,33 @@
|
|
|
1
1
|
// Hermetic-spawn guard (task 54739002). Small, reusable primitive for
|
|
2
2
|
// "real spawn" implementations that back a test-injectable runner (e.g.
|
|
3
|
-
// `
|
|
3
|
+
// the `installSpawn` option of the init wizard, which defaults to
|
|
4
|
+
// `realSpawn` in src/cli/init/dependencies.ts, and the sibling
|
|
4
5
|
// `realClaudeMcpExec` guard planned in task 0d80e969 for
|
|
5
6
|
// src/io/claude-mcp.ts).
|
|
6
7
|
//
|
|
7
8
|
// Incident this guards against: PR #359 found a confirm-queue in
|
|
8
9
|
// tests/cli/init-interactive.test.ts that fell through the trailing
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// `real*Exec` functions are:
|
|
10
|
+
// co-install offer (no queued answer + no injected spawn runner),
|
|
11
|
+
// which let a test silently run a REAL `npx` command against the
|
|
12
|
+
// checkout. The bug itself is already fixed (the mock confirm queue
|
|
13
|
+
// throws on an exhausted queue); this guard is defense-in-depth so any
|
|
14
|
+
// FUTURE gap of the same shape (a new call site, a reordered prompt, a
|
|
15
|
+
// queue typo) fails the test loudly instead of quietly spawning a real
|
|
16
|
+
// process. A follow-up review (same task) found the same "injectable
|
|
17
|
+
// runner + real default" shape unguarded at three more call sites; a
|
|
18
|
+
// sixth (`realNpmExec` in src/cli/doctor/npm-bin-path.ts) was guarded
|
|
19
|
+
// later, under task 325ace29. As of that task, the guarded
|
|
20
|
+
// `real*Spawn`/`real*Exec` functions are:
|
|
21
21
|
// - `realClaudeMcpExec` (src/io/claude-mcp.ts)
|
|
22
22
|
// - `realSpawn` (src/cli/init/dependencies.ts)
|
|
23
23
|
// - `realProbeSpawn` (src/cli/init/agent-tasks-auth.ts)
|
|
24
24
|
// - `realLoginSpawn` (src/cli/init/agent-tasks-auth.ts)
|
|
25
|
-
// - `realOwInitSpawn` (src/cli/init/interactive.ts)
|
|
26
25
|
// - `realNpmExec` (src/cli/doctor/npm-bin-path.ts)
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
// hermetic)
|
|
33
|
-
// - `realNpmGlobalsSpawn` (spawns `npm ls -g --depth=0 --json`)
|
|
34
|
-
// A ninth was added under the stale-base-check task (ce3903b0, incident
|
|
35
|
-
// ea8becf5), in src/cli/session-start/stale-base-check.ts:
|
|
36
|
-
// - `realCheckStaleBase` (spawns `git fetch`/`rev-list`/`log` — the only
|
|
37
|
-
// one of the nine that touches the network; tests either inject
|
|
38
|
-
// `runCheck` or opt into the real path via HARNESS_ALLOW_REAL_SPAWN=1
|
|
39
|
-
// against a LOCAL fixture repo, never a real network host)
|
|
26
|
+
// Three more (`realNodeVersionSpawn`, `realNpmGlobalsSpawn`,
|
|
27
|
+
// `realCheckStaleBase`) guarded the session-start producers and were
|
|
28
|
+
// removed with them in task f3f15290. `realOwInitSpawn`
|
|
29
|
+
// (src/cli/init/interactive.ts), the first guarded site, backed the
|
|
30
|
+
// orchestrator-workflow offer and was removed with it in task 68dca91f.
|
|
40
31
|
// Naming them here (instead of just a count) is deliberate (review
|
|
41
32
|
// finding F5, task T-007): a bare count silently drifts every time a new
|
|
42
33
|
// call site is added and nobody remembers to bump it. See the guard call
|
|
@@ -84,11 +75,10 @@
|
|
|
84
75
|
// caller falls back to via `opts.someSpawn ?? realSomeSpawn`), BEFORE
|
|
85
76
|
// touching `child_process`. It throws instead of returning so a caller
|
|
86
77
|
// whose surrounding try/catch degrades ordinary spawn failures to a
|
|
87
|
-
// warning
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
// pattern).
|
|
78
|
+
// warning does not accidentally swallow a hermetic violation too;
|
|
79
|
+
// callers must re-throw `HermeticSpawnViolationError` past any such
|
|
80
|
+
// catch (see the claude-code wiring catch in
|
|
81
|
+
// src/cli/init/interactive.ts for the pattern).
|
|
92
82
|
/**
|
|
93
83
|
* Thrown by {@link assertNoRealSpawnInTests} when a real-spawn code path
|
|
94
84
|
* runs under vitest without a test-injected fake. Callers whose
|
|
@@ -123,9 +113,9 @@ let printedAllowRealSpawnWarning = false;
|
|
|
123
113
|
* the disabled guard is visible rather than silent.
|
|
124
114
|
*
|
|
125
115
|
* @param binaryLabel human-readable name of what would be spawned (e.g.
|
|
126
|
-
* `"
|
|
116
|
+
* `"npm i -g"`), used in the error message.
|
|
127
117
|
* @param hint one line telling the test author what to do instead (e.g.
|
|
128
|
-
* "inject a fake `
|
|
118
|
+
* "inject a fake `installSpawn` runner").
|
|
129
119
|
*/
|
|
130
120
|
export function assertNoRealSpawnInTests(binaryLabel, hint) {
|
|
131
121
|
if (process.env.HARNESS_ALLOW_REAL_SPAWN === "1") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermetic-spawn-guard.js","sourceRoot":"","sources":["../../src/runtime/hermetic-spawn-guard.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"hermetic-spawn-guard.js","sourceRoot":"","sources":["../../src/runtime/hermetic-spawn-guard.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,kEAAkE;AAClE,+DAA+D;AAC/D,yDAAyD;AACzD,yBAAyB;AACzB,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,kEAAkE;AAClE,iEAAiE;AACjE,oEAAoE;AACpE,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,2DAA2D;AAC3D,0CAA0C;AAC1C,iDAAiD;AACjD,iDAAiD;AACjD,0DAA0D;AAC1D,0DAA0D;AAC1D,qDAAqD;AACrD,6DAA6D;AAC7D,qEAAqE;AACrE,wDAAwD;AACxD,oEAAoE;AACpE,wEAAwE;AACxE,mEAAmE;AACnE,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,qDAAqD;AACrD,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,qEAAqE;AACrE,oEAAoE;AACpE,wEAAwE;AACxE,sEAAsE;AACtE,0DAA0D;AAC1D,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,mEAAmE;AACnE,gEAAgE;AAChE,oEAAoE;AACpE,uEAAuE;AACvE,yDAAyD;AACzD,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,YAAY;AACZ,EAAE;AACF,qEAAqE;AACrE,kEAAkE;AAClE,iEAAiE;AACjE,sEAAsE;AACtE,wEAAwE;AACxE,sEAAsE;AACtE,kFAAkF;AAClF,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,kEAAkE;AAClE,sEAAsE;AACtE,uEAAuE;AACvE,oEAAoE;AACpE,kEAAkE;AAClE,oEAAoE;AACpE,6CAA6C;AAC7C,gDAAgD;AAEhD;;;;;;GAMG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YAAY,WAAmB,EAAE,IAAY;QAC3C,KAAK,CACH,6BAA6B,WAAW,uCAAuC;YAC7E,gCAAgC,IAAI,EAAE,CACzC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED,gFAAgF;AAChF,SAAS,iBAAiB;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC;AAC3C,CAAC;AAED,sEAAsE;AACtE,mEAAmE;AACnE,gEAAgE;AAChE,mCAAmC;AACnC,IAAI,4BAA4B,GAAG,KAAK,CAAC;AAEzC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,IAAY;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,EAAE,CAAC;QACjD,IAAI,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACzD,4BAA4B,GAAG,IAAI,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,2BAA2B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
package/dist/runtime/home-dir.js
CHANGED
|
@@ -25,8 +25,9 @@
|
|
|
25
25
|
//
|
|
26
26
|
// Subdirectory names are unchanged from the v0.23.x layout: a fresh
|
|
27
27
|
// `~/.harness/` install contains the same `harness.yaml`,
|
|
28
|
-
// `harness.generated/`,
|
|
29
|
-
//
|
|
28
|
+
// `harness.generated/`, `harness.lock` children that the legacy
|
|
29
|
+
// `~/.claude/` install would have (a legacy `.understanding-gate/`
|
|
30
|
+
// child is still handled by migrate-home and uninstall). This
|
|
30
31
|
// keeps the migration `mv`-only and avoids cascading file-rename
|
|
31
32
|
// churn across every test fixture.
|
|
32
33
|
import * as fs from "node:fs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-dir.js","sourceRoot":"","sources":["../../src/runtime/home-dir.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,kEAAkE;AAClE,gEAAgE;AAChE,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAC/D,+DAA+D;AAC/D,oBAAoB;AACpB,EAAE;AACF,yBAAyB;AACzB,qEAAqE;AACrE,mDAAmD;AACnD,2CAA2C;AAC3C,oEAAoE;AACpE,kEAAkE;AAClE,yDAAyD;AACzD,wDAAwD;AACxD,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,aAAa;AACb,EAAE;AACF,oEAAoE;AACpE,0DAA0D;AAC1D
|
|
1
|
+
{"version":3,"file":"home-dir.js","sourceRoot":"","sources":["../../src/runtime/home-dir.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,kEAAkE;AAClE,gEAAgE;AAChE,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAC/D,+DAA+D;AAC/D,oBAAoB;AACpB,EAAE;AACF,yBAAyB;AACzB,qEAAqE;AACrE,mDAAmD;AACnD,2CAA2C;AAC3C,oEAAoE;AACpE,kEAAkE;AAClE,yDAAyD;AACzD,wDAAwD;AACxD,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,aAAa;AACb,EAAE;AACF,oEAAoE;AACpE,0DAA0D;AAC1D,gEAAgE;AAChE,mEAAmE;AACnE,8DAA8D;AAC9D,iEAAiE;AACjE,mCAAmC;AAEnC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,SAAS,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C;;;;;GAKG;AACH,IAAI,YAAY,GAAG,KAAK,CAAC;AAiCzB,MAAM,UAAU,cAAc,CAAC,OAA8B,EAAE;IAC7D,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;IAEpE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,iEAAiE;IACjE,+DAA+D;IAC/D,mEAAmE;IACnE,iDAAiD;IACjD,IAAI,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,MAAM,CAAC,KAAK,CACV,qCAAqC,UAAU,iDAAiD,OAAO,+DAA+D,CACvK,CAAC;YACF,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,kEAAkE;IAClE,gEAAgE;IAChE,mEAAmE;IACnE,6DAA6D;IAC7D,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC"}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
export declare const SHELL_ALIASES: readonly ["Bash", "shell", "exec_command", "functions.exec_command"];
|
|
2
1
|
export declare function expandToolNameAliases(toolName: string): string[];
|
|
3
2
|
export declare function expandCodexHookMatchPattern(match: string): string;
|
|
4
|
-
export declare function extractShellCommand(event: {
|
|
5
|
-
tool_input?: unknown;
|
|
6
|
-
raw_input?: unknown;
|
|
7
|
-
input?: unknown;
|
|
8
|
-
}): string | null;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
// Canonical shell-tool alias set: Claude Code's single "Bash" tool plus
|
|
2
|
-
// the Codex shell-tool names current runtimes emit.
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
export const SHELL_ALIASES = [
|
|
2
|
+
// the Codex shell-tool names current runtimes emit. It is the shell-alias
|
|
3
|
+
// set `expandToolNameAliases` expands tokens with, which
|
|
4
|
+
// `expandCodexHookMatchPattern` applies to the tool-name tokens of Codex
|
|
5
|
+
// hook matchers (emitted by `generate-codex-config.ts`).
|
|
6
|
+
const SHELL_ALIASES = [
|
|
8
7
|
"Bash",
|
|
9
8
|
"shell",
|
|
10
9
|
"exec_command",
|
|
@@ -65,16 +64,4 @@ export function expandCodexHookMatchPattern(match) {
|
|
|
65
64
|
}
|
|
66
65
|
return [...expanded].join("|");
|
|
67
66
|
}
|
|
68
|
-
export function extractShellCommand(event) {
|
|
69
|
-
for (const candidate of [event.tool_input, event.raw_input, event.input]) {
|
|
70
|
-
if (!candidate || typeof candidate !== "object")
|
|
71
|
-
continue;
|
|
72
|
-
const args = candidate;
|
|
73
|
-
if (typeof args.command === "string")
|
|
74
|
-
return args.command;
|
|
75
|
-
if (typeof args.cmd === "string")
|
|
76
|
-
return args.cmd;
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
67
|
//# sourceMappingURL=tool-name-aliases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-name-aliases.js","sourceRoot":"","sources":["../../src/runtime/tool-name-aliases.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"tool-name-aliases.js","sourceRoot":"","sources":["../../src/runtime/tool-name-aliases.ts"],"names":[],"mappings":"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"}
|