@lannguyensi/harness 0.63.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/README.md +46 -42
- package/dist/cli/add/index.js +17 -21
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +2 -2
- package/dist/cli/adopt/derive.js +2 -19
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +1 -1
- package/dist/cli/adopt/index.js +1 -12
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +20 -35
- package/dist/cli/apply/apply.js +61 -136
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-codex-config.js +10 -58
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/apply/generate-memory-index.js +1 -2
- package/dist/cli/apply/generate-memory-index.js.map +1 -1
- package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
- package/dist/cli/apply/generate-opencode-config.js +74 -113
- package/dist/cli/apply/generate-opencode-config.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +11 -64
- package/dist/cli/apply/generate-settings.js +27 -132
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -1
- package/dist/cli/apply/index.js +1 -1
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +153 -1
- package/dist/cli/apply/install-codex-config.js +445 -70
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +13 -1
- package/dist/cli/apply/next-steps.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +0 -23
- package/dist/cli/bounded-stdin.js +2 -49
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/describe.d.ts +1 -1
- package/dist/cli/describe.js +0 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/diff/engine.d.ts +0 -11
- package/dist/cli/diff/engine.js +1 -17
- package/dist/cli/diff/engine.js.map +1 -1
- package/dist/cli/diff/index.js +14 -25
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/claude-mcp.d.ts +4 -19
- package/dist/cli/doctor/claude-mcp.js +11 -22
- package/dist/cli/doctor/claude-mcp.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +12 -14
- package/dist/cli/doctor/codex.js +31 -144
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +23 -338
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/hook-liveness.d.ts +56 -0
- package/dist/cli/doctor/hook-liveness.js +455 -0
- package/dist/cli/doctor/hook-liveness.js.map +1 -0
- package/dist/cli/doctor/index.d.ts +13 -87
- package/dist/cli/doctor/index.js +57 -705
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/opencode.d.ts +2 -1
- package/dist/cli/doctor/opencode.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +21 -378
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/drain-stdio.d.ts +31 -0
- package/dist/cli/drain-stdio.js +76 -0
- package/dist/cli/drain-stdio.js.map +1 -0
- package/dist/cli/export.d.ts +3 -1
- package/dist/cli/export.js +7 -16
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/gate/codex-disable.d.ts +29 -0
- package/dist/cli/gate/codex-disable.js +195 -0
- package/dist/cli/gate/codex-disable.js.map +1 -0
- package/dist/cli/gate/codex-enable.d.ts +41 -0
- package/dist/cli/gate/codex-enable.js +127 -0
- package/dist/cli/gate/codex-enable.js.map +1 -0
- package/dist/cli/gate/codex-snapshot.d.ts +208 -0
- package/dist/cli/gate/codex-snapshot.js +402 -0
- package/dist/cli/gate/codex-snapshot.js.map +1 -0
- package/dist/cli/gate/disable.d.ts +9 -0
- package/dist/cli/gate/disable.js +263 -28
- package/dist/cli/gate/disable.js.map +1 -1
- package/dist/cli/gate/enable.d.ts +26 -6
- package/dist/cli/gate/enable.js +152 -80
- package/dist/cli/gate/enable.js.map +1 -1
- package/dist/cli/gate/link-chain.d.ts +53 -0
- package/dist/cli/gate/link-chain.js +122 -0
- package/dist/cli/gate/link-chain.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +289 -12
- package/dist/cli/gate/snapshot.js +481 -22
- package/dist/cli/gate/snapshot.js.map +1 -1
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +15 -2607
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/composer.d.ts +3 -6
- package/dist/cli/init/composer.js +6 -370
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/init/dependencies.d.ts +1 -2
- package/dist/cli/init/dependencies.js +4 -80
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/detect.js +5 -4
- package/dist/cli/init/detect.js.map +1 -1
- package/dist/cli/init/interactive.d.ts +1 -23
- package/dist/cli/init/interactive.js +33 -247
- package/dist/cli/init/interactive.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +2 -2
- package/dist/cli/init/profiles.js +51 -243
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +2 -37
- package/dist/cli/init/templates.js +25 -1237
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/list.d.ts +1 -1
- package/dist/cli/list.js +1 -38
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/loader.d.ts +15 -1
- package/dist/cli/loader.js +56 -39
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/main.js +7 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-home/index.js +2 -2
- package/dist/cli/migrate-home/index.js.map +1 -1
- package/dist/cli/pack/add.js +1 -1
- package/dist/cli/pack/add.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
- package/dist/cli/pack/hook-bootstrap.js +15 -291
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
- package/dist/cli/pack/hook-branch-protection.js +365 -340
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/index.d.ts +0 -1
- package/dist/cli/pack/index.js +0 -1
- package/dist/cli/pack/index.js.map +1 -1
- package/dist/cli/pack/list.js +1 -6
- package/dist/cli/pack/list.js.map +1 -1
- package/dist/cli/pack/mutate.d.ts +7 -9
- package/dist/cli/pack/mutate.js +6 -9
- package/dist/cli/pack/mutate.js.map +1 -1
- package/dist/cli/pack/reseed.d.ts +2 -2
- package/dist/cli/pack/reseed.js +16 -22
- package/dist/cli/pack/reseed.js.map +1 -1
- package/dist/cli/register-gate-group.d.ts +5 -0
- package/dist/cli/register-gate-group.js +348 -0
- package/dist/cli/register-gate-group.js.map +1 -0
- package/dist/cli/register-inspect-group.d.ts +6 -0
- package/dist/cli/register-inspect-group.js +189 -0
- package/dist/cli/register-inspect-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +5 -0
- package/dist/cli/register-operator-lifecycle.js +20 -0
- package/dist/cli/register-operator-lifecycle.js.map +1 -0
- package/dist/cli/register-pack-group.d.ts +5 -0
- package/dist/cli/register-pack-group.js +134 -0
- package/dist/cli/register-pack-group.js.map +1 -0
- package/dist/cli/register-setup-group.d.ts +5 -0
- package/dist/cli/register-setup-group.js +495 -0
- package/dist/cli/register-setup-group.js.map +1 -0
- package/dist/cli/remove/index.d.ts +0 -14
- package/dist/cli/remove/index.js +2 -115
- package/dist/cli/remove/index.js.map +1 -1
- package/dist/cli/remove/mutate.d.ts +0 -2
- package/dist/cli/remove/mutate.js +1 -19
- package/dist/cli/remove/mutate.js.map +1 -1
- package/dist/cli/remove/register.d.ts +5 -0
- package/dist/cli/remove/register.js +25 -0
- package/dist/cli/remove/register.js.map +1 -0
- package/dist/cli/shell-quote.d.ts +7 -0
- package/dist/cli/shell-quote.js +17 -0
- package/dist/cli/shell-quote.js.map +1 -0
- package/dist/cli/uninstall/index.d.ts +4 -2
- package/dist/cli/uninstall/index.js +15 -7
- package/dist/cli/uninstall/index.js.map +1 -1
- package/dist/cli/uninstall/register.d.ts +5 -0
- package/dist/cli/uninstall/register.js +171 -0
- package/dist/cli/uninstall/register.js.map +1 -0
- package/dist/cli/uninstall/snapshot.d.ts +15 -0
- package/dist/cli/uninstall/snapshot.js +38 -0
- package/dist/cli/uninstall/snapshot.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +0 -77
- package/dist/cli/validate/checks.js +3 -1049
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/cli/validate/index.js +19 -15
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/io/claude-mcp.d.ts +1 -1
- package/dist/io/claude-mcp.js +27 -14
- package/dist/io/claude-mcp.js.map +1 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/lock.d.ts +0 -26
- package/dist/io/lock.js +10 -27
- package/dist/io/lock.js.map +1 -1
- package/dist/io/merge-settings.js +6 -4
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/project-name.d.ts +22 -39
- package/dist/io/project-name.js +25 -42
- package/dist/io/project-name.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +103 -40
- package/dist/io/read-regular-file.js +196 -35
- package/dist/io/read-regular-file.js.map +1 -1
- package/dist/io/restart-hints.js +3 -6
- package/dist/io/restart-hints.js.map +1 -1
- package/dist/io/version-compare.d.ts +1 -3
- package/dist/io/version-compare.js +1 -3
- package/dist/io/version-compare.js.map +1 -1
- package/dist/io/write-regular-file.d.ts +30 -0
- package/dist/io/write-regular-file.js +85 -0
- package/dist/io/write-regular-file.js.map +1 -0
- package/dist/overrides/index.d.ts +1 -0
- package/dist/overrides/index.js +1 -0
- package/dist/overrides/index.js.map +1 -1
- package/dist/overrides/merge-layers.d.ts +43 -0
- package/dist/overrides/merge-layers.js +76 -0
- package/dist/overrides/merge-layers.js.map +1 -0
- package/dist/overrides/merge.d.ts +16 -0
- package/dist/overrides/merge.js +21 -8
- package/dist/overrides/merge.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
- package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
- package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
- package/dist/policy-packs/builtin/branch-protection.js +56 -89
- package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
- package/dist/policy-packs/config-check.d.ts +7 -5
- package/dist/policy-packs/config-check.js +2 -2
- package/dist/policy-packs/config-check.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +1 -3
- package/dist/policy-packs/expand.js +5 -42
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +3 -3
- package/dist/policy-packs/index.js +2 -2
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +9 -38
- package/dist/policy-packs/registry.js +5 -65
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/policy-packs/runtime.d.ts +0 -4
- package/dist/policy-packs/runtime.js +9 -22
- package/dist/policy-packs/runtime.js.map +1 -1
- package/dist/policy-packs/types.d.ts +0 -19
- package/dist/policy-packs/ux-compare.d.ts +1 -11
- package/dist/policy-packs/ux-compare.js +6 -42
- package/dist/policy-packs/ux-compare.js.map +1 -1
- package/dist/policy-packs/ux-drift-check.d.ts +5 -5
- package/dist/policy-packs/ux-drift-check.js +17 -22
- package/dist/policy-packs/ux-drift-check.js.map +1 -1
- package/dist/policy-packs/version-check.d.ts +5 -26
- package/dist/policy-packs/version-check.js +19 -74
- package/dist/policy-packs/version-check.js.map +1 -1
- package/dist/probes/memory.d.ts +1 -1
- package/dist/probes/memory.js +1 -1
- package/dist/probes/memory.js.map +1 -1
- package/dist/runtime/agent-facing.d.ts +9 -0
- package/dist/runtime/agent-facing.js +28 -14
- package/dist/runtime/agent-facing.js.map +1 -1
- package/dist/runtime/bounded-text.d.ts +15 -0
- package/dist/runtime/bounded-text.js +27 -0
- package/dist/runtime/bounded-text.js.map +1 -0
- package/dist/runtime/git-branch.d.ts +125 -0
- package/dist/runtime/git-branch.js +381 -0
- package/dist/runtime/git-branch.js.map +1 -0
- package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
- package/dist/runtime/hermetic-spawn-guard.js +24 -34
- package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
- package/dist/runtime/home-dir.js +3 -2
- package/dist/runtime/home-dir.js.map +1 -1
- package/dist/runtime/tool-name-aliases.d.ts +0 -6
- package/dist/runtime/tool-name-aliases.js +5 -18
- package/dist/runtime/tool-name-aliases.js.map +1 -1
- package/dist/schema/grounding.d.ts +7 -54
- package/dist/schema/grounding.js +10 -12
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/hooks.d.ts +39 -136
- package/dist/schema/hooks.js +3 -6
- package/dist/schema/hooks.js.map +1 -1
- package/dist/schema/index.d.ts +114 -3828
- package/dist/schema/index.js +41 -80
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.d.ts +54 -131
- package/dist/schema/memory.js +2 -2
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/policy-packs.d.ts +3 -45
- package/dist/schema/policy-packs.js +7 -13
- package/dist/schema/policy-packs.js.map +1 -1
- package/dist/schema/policy-ux.d.ts +7 -0
- package/dist/schema/policy-ux.js +18 -0
- package/dist/schema/policy-ux.js.map +1 -0
- package/dist/schema/removed-keys.d.ts +185 -0
- package/dist/schema/removed-keys.js +531 -0
- package/dist/schema/removed-keys.js.map +1 -0
- package/dist/schema/tools.d.ts +30 -268
- package/dist/schema/tools.js +4 -4
- package/dist/schema/tools.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/approve/branch-protection.d.ts +0 -69
- package/dist/cli/approve/branch-protection.js +0 -144
- package/dist/cli/approve/branch-protection.js.map +0 -1
- package/dist/cli/approve/risk.d.ts +0 -112
- package/dist/cli/approve/risk.js +0 -197
- package/dist/cli/approve/risk.js.map +0 -1
- package/dist/cli/approve/stdin-report.d.ts +0 -57
- package/dist/cli/approve/stdin-report.js +0 -145
- package/dist/cli/approve/stdin-report.js.map +0 -1
- package/dist/cli/approve/understanding.d.ts +0 -410
- package/dist/cli/approve/understanding.js +0 -996
- package/dist/cli/approve/understanding.js.map +0 -1
- package/dist/cli/audit.d.ts +0 -80
- package/dist/cli/audit.js +0 -252
- package/dist/cli/audit.js.map +0 -1
- package/dist/cli/delegate/index.d.ts +0 -76
- package/dist/cli/delegate/index.js +0 -443
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
- package/dist/cli/doctor/auto-approve-mode.js +0 -80
- package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
- package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
- package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
- package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
- package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
- package/dist/cli/doctor/codex-config-drift.js +0 -240
- package/dist/cli/doctor/codex-config-drift.js.map +0 -1
- package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
- package/dist/cli/doctor/rogue-ledger.js +0 -153
- package/dist/cli/doctor/rogue-ledger.js.map +0 -1
- package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
- package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
- package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
- package/dist/cli/doctor/settings-drift.d.ts +0 -25
- package/dist/cli/doctor/settings-drift.js +0 -213
- package/dist/cli/doctor/settings-drift.js.map +0 -1
- package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
- package/dist/cli/doctor/toolchain-parity.js +0 -154
- package/dist/cli/doctor/toolchain-parity.js.map +0 -1
- package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
- package/dist/cli/doctor/ug-auto-approvals.js +0 -91
- package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
- package/dist/cli/doctor/ug-delegations.d.ts +0 -26
- package/dist/cli/doctor/ug-delegations.js +0 -121
- package/dist/cli/doctor/ug-delegations.js.map +0 -1
- package/dist/cli/doctor/ug-inflight.d.ts +0 -35
- package/dist/cli/doctor/ug-inflight.js +0 -57
- package/dist/cli/doctor/ug-inflight.js.map +0 -1
- package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
- package/dist/cli/doctor/understanding-mode-env.js +0 -98
- package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
- package/dist/cli/dry-run.d.ts +0 -46
- package/dist/cli/dry-run.js +0 -250
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/event-input.d.ts +0 -28
- package/dist/cli/event-input.js +0 -73
- package/dist/cli/event-input.js.map +0 -1
- package/dist/cli/explain-action.d.ts +0 -20
- package/dist/cli/explain-action.js +0 -27
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -135
- package/dist/cli/explain-policy.js +0 -266
- package/dist/cli/explain-policy.js.map +0 -1
- package/dist/cli/explain.d.ts +0 -31
- package/dist/cli/explain.js +0 -159
- package/dist/cli/explain.js.map +0 -1
- package/dist/cli/gc/index.d.ts +0 -63
- package/dist/cli/gc/index.js +0 -566
- package/dist/cli/gc/index.js.map +0 -1
- package/dist/cli/pack/approve-escape.d.ts +0 -19
- package/dist/cli/pack/approve-escape.js +0 -190
- package/dist/cli/pack/approve-escape.js.map +0 -1
- package/dist/cli/pack/auto-approve-path.d.ts +0 -146
- package/dist/cli/pack/auto-approve-path.js +0 -462
- package/dist/cli/pack/auto-approve-path.js.map +0 -1
- package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
- package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
- package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
- package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
- package/dist/cli/pack/hook-codex-stop.js +0 -329
- package/dist/cli/pack/hook-codex-stop.js.map +0 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
- package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
- package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
- package/dist/cli/pack/hook-post-merge-gate.js +0 -277
- package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
- package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
- package/dist/cli/pack/hook-post-tool-use.js +0 -137
- package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
- package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
- package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
- package/dist/cli/pack/hook-runtime-reality.js +0 -210
- package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -337
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
- package/dist/cli/pack/hook-solution-acceptance.js +0 -530
- package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
- package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
- package/dist/cli/pack/hook-stay-in-scope.js +0 -128
- package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
- package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
- package/dist/cli/pack/hook-subagent-start.js +0 -88
- package/dist/cli/pack/hook-subagent-start.js.map +0 -1
- package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
- package/dist/cli/pack/hook-subagent-stop.js +0 -41
- package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
- package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
- package/dist/cli/pack/hook-track-active-claim.js +0 -275
- package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
- package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
- package/dist/cli/pack/transcript-report-scan.js +0 -359
- package/dist/cli/pack/transcript-report-scan.js.map +0 -1
- package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
- package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
- package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
- package/dist/cli/pack/upgrade.d.ts +0 -32
- package/dist/cli/pack/upgrade.js +0 -273
- package/dist/cli/pack/upgrade.js.map +0 -1
- package/dist/cli/pause/index.d.ts +0 -113
- package/dist/cli/pause/index.js +0 -251
- package/dist/cli/pause/index.js.map +0 -1
- package/dist/cli/pause-check.d.ts +0 -22
- package/dist/cli/pause-check.js +0 -54
- package/dist/cli/pause-check.js.map +0 -1
- package/dist/cli/policy/intercept.d.ts +0 -233
- package/dist/cli/policy/intercept.js +0 -1020
- package/dist/cli/policy/intercept.js.map +0 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
- package/dist/cli/policy/risk-envelope-enrichment.js +0 -108
- package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
- package/dist/cli/record/index.d.ts +0 -81
- package/dist/cli/record/index.js +0 -348
- package/dist/cli/record/index.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -47
- package/dist/cli/resolve-env.js.map +0 -1
- package/dist/cli/session-export/index.d.ts +0 -46
- package/dist/cli/session-export/index.js +0 -169
- package/dist/cli/session-export/index.js.map +0 -1
- package/dist/cli/session-export/redact.d.ts +0 -22
- package/dist/cli/session-export/redact.js +0 -47
- package/dist/cli/session-export/redact.js.map +0 -1
- package/dist/cli/session-export/transcript.d.ts +0 -24
- package/dist/cli/session-export/transcript.js +0 -164
- package/dist/cli/session-export/transcript.js.map +0 -1
- package/dist/cli/session-start/branch-check.d.ts +0 -18
- package/dist/cli/session-start/branch-check.js +0 -140
- package/dist/cli/session-start/branch-check.js.map +0 -1
- package/dist/cli/session-start/index.d.ts +0 -121
- package/dist/cli/session-start/index.js +0 -591
- package/dist/cli/session-start/index.js.map +0 -1
- package/dist/cli/session-start/shared-options.d.ts +0 -103
- package/dist/cli/session-start/shared-options.js +0 -107
- package/dist/cli/session-start/shared-options.js.map +0 -1
- package/dist/cli/session-start/stale-base-check.d.ts +0 -46
- package/dist/cli/session-start/stale-base-check.js +0 -352
- package/dist/cli/session-start/stale-base-check.js.map +0 -1
- package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
- package/dist/cli/session-start/toolchain-parity.js +0 -797
- package/dist/cli/session-start/toolchain-parity.js.map +0 -1
- package/dist/cli/smoke/assertions.d.ts +0 -46
- package/dist/cli/smoke/assertions.js +0 -170
- package/dist/cli/smoke/assertions.js.map +0 -1
- package/dist/cli/smoke/index.d.ts +0 -76
- package/dist/cli/smoke/index.js +0 -245
- package/dist/cli/smoke/index.js.map +0 -1
- package/dist/cli/smoke/runner.d.ts +0 -55
- package/dist/cli/smoke/runner.js +0 -134
- package/dist/cli/smoke/runner.js.map +0 -1
- package/dist/cli/smoke/stream-parser.d.ts +0 -65
- package/dist/cli/smoke/stream-parser.js +0 -115
- package/dist/cli/smoke/stream-parser.js.map +0 -1
- package/dist/cli/test-risk.d.ts +0 -26
- package/dist/cli/test-risk.js +0 -34
- package/dist/cli/test-risk.js.map +0 -1
- package/dist/io/display-path.d.ts +0 -11
- package/dist/io/display-path.js +0 -29
- package/dist/io/display-path.js.map +0 -1
- package/dist/io/duration.d.ts +0 -5
- package/dist/io/duration.js +0 -50
- package/dist/io/duration.js.map +0 -1
- package/dist/io/extract.d.ts +0 -79
- package/dist/io/extract.js +0 -226
- package/dist/io/extract.js.map +0 -1
- package/dist/io/ledger-record.d.ts +0 -83
- package/dist/io/ledger-record.js +0 -301
- package/dist/io/ledger-record.js.map +0 -1
- package/dist/io/read-json-dir-entries.d.ts +0 -36
- package/dist/io/read-json-dir-entries.js +0 -48
- package/dist/io/read-json-dir-entries.js.map +0 -1
- package/dist/io/safe-json-parse.d.ts +0 -5
- package/dist/io/safe-json-parse.js +0 -21
- package/dist/io/safe-json-parse.js.map +0 -1
- package/dist/policies/index.d.ts +0 -5
- package/dist/policies/index.js +0 -6
- package/dist/policies/index.js.map +0 -1
- package/dist/policies/ledger-client.d.ts +0 -113
- package/dist/policies/ledger-client.js +0 -500
- package/dist/policies/ledger-client.js.map +0 -1
- package/dist/policies/producers.d.ts +0 -12
- package/dist/policies/producers.js +0 -61
- package/dist/policies/producers.js.map +0 -1
- package/dist/policies/requires.d.ts +0 -75
- package/dist/policies/requires.js +0 -240
- package/dist/policies/requires.js.map +0 -1
- package/dist/policies/timestamp.d.ts +0 -14
- package/dist/policies/timestamp.js +0 -36
- package/dist/policies/timestamp.js.map +0 -1
- package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
- package/dist/policy-packs/builtin/permission-profiles.js +0 -74
- package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
- package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
- package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
- package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
- package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -618
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -93
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -620
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
- package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1074
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
- package/dist/policy-packs/permission-translator.d.ts +0 -9
- package/dist/policy-packs/permission-translator.js +0 -76
- package/dist/policy-packs/permission-translator.js.map +0 -1
- package/dist/runtime/action-envelope.d.ts +0 -64
- package/dist/runtime/action-envelope.js +0 -46
- package/dist/runtime/action-envelope.js.map +0 -1
- package/dist/runtime/approval-signing.d.ts +0 -111
- package/dist/runtime/approval-signing.js +0 -384
- package/dist/runtime/approval-signing.js.map +0 -1
- package/dist/runtime/bash-match-facts.d.ts +0 -60
- package/dist/runtime/bash-match-facts.js +0 -196
- package/dist/runtime/bash-match-facts.js.map +0 -1
- package/dist/runtime/bash-match-registry.d.ts +0 -112
- package/dist/runtime/bash-match-registry.js +0 -406
- package/dist/runtime/bash-match-registry.js.map +0 -1
- package/dist/runtime/bash-prefix-parse.d.ts +0 -31
- package/dist/runtime/bash-prefix-parse.js +0 -576
- package/dist/runtime/bash-prefix-parse.js.map +0 -1
- package/dist/runtime/command-normalize.d.ts +0 -658
- package/dist/runtime/command-normalize.js +0 -2410
- package/dist/runtime/command-normalize.js.map +0 -1
- package/dist/runtime/deletion-target-resolve.d.ts +0 -28
- package/dist/runtime/deletion-target-resolve.js +0 -1078
- package/dist/runtime/deletion-target-resolve.js.map +0 -1
- package/dist/runtime/destructive-shell-floor.d.ts +0 -19
- package/dist/runtime/destructive-shell-floor.js +0 -611
- package/dist/runtime/destructive-shell-floor.js.map +0 -1
- package/dist/runtime/environment-resolver.d.ts +0 -36
- package/dist/runtime/environment-resolver.js +0 -138
- package/dist/runtime/environment-resolver.js.map +0 -1
- package/dist/runtime/git-context.d.ts +0 -201
- package/dist/runtime/git-context.js +0 -422
- package/dist/runtime/git-context.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.js +0 -13
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/intercept.d.ts +0 -494
- package/dist/runtime/intercept.js +0 -1313
- package/dist/runtime/intercept.js.map +0 -1
- package/dist/runtime/kube-context.d.ts +0 -16
- package/dist/runtime/kube-context.js +0 -63
- package/dist/runtime/kube-context.js.map +0 -1
- package/dist/runtime/kubectl-target-parse.d.ts +0 -31
- package/dist/runtime/kubectl-target-parse.js +0 -249
- package/dist/runtime/kubectl-target-parse.js.map +0 -1
- package/dist/runtime/ledger-add.d.ts +0 -16
- package/dist/runtime/ledger-add.js +0 -150
- package/dist/runtime/ledger-add.js.map +0 -1
- package/dist/runtime/ledger-writer.d.ts +0 -27
- package/dist/runtime/ledger-writer.js +0 -46
- package/dist/runtime/ledger-writer.js.map +0 -1
- package/dist/runtime/pause-sentinel.d.ts +0 -60
- package/dist/runtime/pause-sentinel.js +0 -156
- package/dist/runtime/pause-sentinel.js.map +0 -1
- package/dist/runtime/pending-approval.d.ts +0 -23
- package/dist/runtime/pending-approval.js +0 -67
- package/dist/runtime/pending-approval.js.map +0 -1
- package/dist/runtime/read-only-bash.d.ts +0 -141
- package/dist/runtime/read-only-bash.js +0 -2204
- package/dist/runtime/read-only-bash.js.map +0 -1
- package/dist/runtime/recovery-git-commit.d.ts +0 -22
- package/dist/runtime/recovery-git-commit.js +0 -284
- package/dist/runtime/recovery-git-commit.js.map +0 -1
- package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
- package/dist/runtime/reject-malformed-session-id.js +0 -16
- package/dist/runtime/reject-malformed-session-id.js.map +0 -1
- package/dist/runtime/risk-classifier.d.ts +0 -38
- package/dist/runtime/risk-classifier.js +0 -311
- package/dist/runtime/risk-classifier.js.map +0 -1
- package/dist/runtime/session-id.d.ts +0 -113
- package/dist/runtime/session-id.js +0 -193
- package/dist/runtime/session-id.js.map +0 -1
- package/dist/runtime/shell-word.d.ts +0 -62
- package/dist/runtime/shell-word.js +0 -410
- package/dist/runtime/shell-word.js.map +0 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +0 -103
- package/dist/runtime/task-providers/agent-tasks.js +0 -245
- package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
- package/dist/runtime/when-eval.d.ts +0 -62
- package/dist/runtime/when-eval.js +0 -212
- package/dist/runtime/when-eval.js.map +0 -1
- package/dist/runtime/workflow-policies.d.ts +0 -207
- package/dist/runtime/workflow-policies.js +0 -596
- package/dist/runtime/workflow-policies.js.map +0 -1
- package/dist/schema/audit.d.ts +0 -71
- package/dist/schema/audit.js +0 -32
- package/dist/schema/audit.js.map +0 -1
- package/dist/schema/doctor.d.ts +0 -25
- package/dist/schema/doctor.js +0 -23
- package/dist/schema/doctor.js.map +0 -1
- package/dist/schema/environments.d.ts +0 -215
- package/dist/schema/environments.js +0 -101
- package/dist/schema/environments.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -9
- package/dist/schema/extract.js +0 -86
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/permission-profiles.d.ts +0 -2292
- package/dist/schema/permission-profiles.js +0 -60
- package/dist/schema/permission-profiles.js.map +0 -1
- package/dist/schema/policies.d.ts +0 -974
- package/dist/schema/policies.js +0 -298
- package/dist/schema/policies.js.map +0 -1
- package/dist/schema/requires.d.ts +0 -131
- package/dist/schema/requires.js +0 -88
- package/dist/schema/requires.js.map +0 -1
- package/dist/schema/risk.d.ts +0 -144
- package/dist/schema/risk.js +0 -194
- package/dist/schema/risk.js.map +0 -1
- package/dist/schema/session-start-preflight.d.ts +0 -10
- package/dist/schema/session-start-preflight.js +0 -106
- package/dist/schema/session-start-preflight.js.map +0 -1
- package/dist/schema/stale-base-check.d.ts +0 -18
- package/dist/schema/stale-base-check.js +0 -37
- package/dist/schema/stale-base-check.js.map +0 -1
- package/dist/schema/toolchain-parity.d.ts +0 -21
- package/dist/schema/toolchain-parity.js +0 -48
- package/dist/schema/toolchain-parity.js.map +0 -1
- package/dist/schema/workflows.d.ts +0 -519
- package/dist/schema/workflows.js +0 -81
- package/dist/schema/workflows.js.map +0 -1
- package/scripts/runtime-reality-docker-probe.mjs +0 -71
|
@@ -1,658 +0,0 @@
|
|
|
1
|
-
export interface NormalizedCommand {
|
|
2
|
-
/**
|
|
3
|
-
* The command with wrapper prefixes peeled and git invocations
|
|
4
|
-
* canonicalised to `git <subcommand>`. Shell boundary characters
|
|
5
|
-
* (`\n ; | && ( )`) are preserved verbatim so a boundary-anchored
|
|
6
|
-
* regex still matches. Byte-identical to the input when nothing
|
|
7
|
-
* recognisable was found anywhere in the command.
|
|
8
|
-
*/
|
|
9
|
-
normalized: string;
|
|
10
|
-
/**
|
|
11
|
-
* The effective target directory of the command's git invocation, or
|
|
12
|
-
* `null` when the command names none, the command names invocations
|
|
13
|
-
* that disagree, or the only named value is `~`-prefixed (see the
|
|
14
|
-
* module header's target-directory-extraction rules).
|
|
15
|
-
*
|
|
16
|
-
* STILL NOT WIRED TO ANY GATE (see the module header's STATUS
|
|
17
|
-
* paragraph): extracted and fully tested, but task `98ad072f`'s
|
|
18
|
-
* per-policy redesign (T-003) attributes a target from the per-segment
|
|
19
|
-
* `segmentViewOf` view below instead of this whole-command aggregate —
|
|
20
|
-
* a single per-event `targetDir` cannot express "this invocation
|
|
21
|
-
* targets repo B, but the gated verb after it runs in the caller's
|
|
22
|
-
* cwd," which is exactly the property the redesign needs.
|
|
23
|
-
*/
|
|
24
|
-
targetDir: string | null;
|
|
25
|
-
/**
|
|
26
|
-
* When `targetDir` is a RELATIVE path, the directory it should be
|
|
27
|
-
* resolved against instead of the caller's own cwd — the wrapping
|
|
28
|
-
* `env -C` on the same invocation, or a leading `cd` prefix (see the
|
|
29
|
-
* module header). `null` when `targetDir` is absolute, `null` itself,
|
|
30
|
-
* or no more specific base was found.
|
|
31
|
-
*
|
|
32
|
-
* Same unconsumed status as `targetDir` above — see the module
|
|
33
|
-
* header's STATUS paragraph.
|
|
34
|
-
*/
|
|
35
|
-
targetBase: string | null;
|
|
36
|
-
/**
|
|
37
|
-
* `true` when the input exceeded `MAX_NORMALIZE_LENGTH` and
|
|
38
|
-
* normalisation was skipped entirely (G4 fix, review round 2,
|
|
39
|
-
* 2026-07-27): the caller previously had no way to tell "nothing
|
|
40
|
-
* recognisable was found" apart from "normalisation never ran at all",
|
|
41
|
-
* so the skip carried no audit signal. `false` whenever the input WAS
|
|
42
|
-
* run through `normalizeCommandInner` (including when nothing
|
|
43
|
-
* recognisable was found there either — that case is still `false`,
|
|
44
|
-
* only the length-bound short-circuit sets this).
|
|
45
|
-
*/
|
|
46
|
-
truncated: boolean;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* One boundary-delimited segment's canonicalised text plus its own and
|
|
50
|
-
* "effective" target directory (task `98ad072f`, T-002 of run
|
|
51
|
-
* `2026-08-02-per-repo-gate-scoping-redesign`) — attributes a target to
|
|
52
|
-
* the SPECIFIC segment satisfying a policy's own `bash_match` trigger,
|
|
53
|
-
* instead of the single, whole-command `targetDir` / `targetBase` on
|
|
54
|
-
* `NormalizedCommand` above. Produced by `segmentViewOf`. WIRED as of
|
|
55
|
-
* T-003, this run: `src/runtime/intercept.ts`'s `attributeTriggerSegments`
|
|
56
|
-
* / `resolveAttributedContexts` are the consumer (see the module header's
|
|
57
|
-
* STATUS/UPDATE note for the exact contract).
|
|
58
|
-
*/
|
|
59
|
-
export interface CommandSegment {
|
|
60
|
-
/**
|
|
61
|
-
* This segment's canonicalised text — the same rewrite
|
|
62
|
-
* `NormalizedCommand.normalized` applies to the corresponding span,
|
|
63
|
-
* boundary tokens EXCLUDED (they sit between segments, never inside
|
|
64
|
-
* one). Every shipped `bash_match` pattern's boundary alternation
|
|
65
|
-
* includes a `^` branch, so testing such a pattern against THIS string
|
|
66
|
-
* alone (no leading boundary character) is well-defined — see
|
|
67
|
-
* `01-plan.md`'s Proposed Approach item 2 for how a future consumer
|
|
68
|
-
* uses this.
|
|
69
|
-
*/
|
|
70
|
-
text: string;
|
|
71
|
-
/**
|
|
72
|
-
* D-021 (UNIVERSAL-ADDITIVE, run 2026-08-02-per-repo-gate-scoping-
|
|
73
|
-
* redesign): the only remaining consumer of this field is
|
|
74
|
-
* `computeSegmentTarget`'s own internal `effectiveTarget` derivation
|
|
75
|
-
* (below) — `src/runtime/intercept.ts`'s `resolveAttributedContexts`
|
|
76
|
-
* (the gate) reads `effectiveTarget` only and no longer consults
|
|
77
|
-
* `ownTarget` at all. Kept as a public, separately-populated field
|
|
78
|
-
* (part of the T-002 API) rather than folded away, since a future
|
|
79
|
-
* consumer distinguishing "this segment's OWN explicit target" from
|
|
80
|
-
* "the directory it composes to once an incoming `cd` basis is
|
|
81
|
-
* accounted for" is exactly what the two-field split exists for.
|
|
82
|
-
*
|
|
83
|
-
* This segment's OWN explicit target, named by ITS OWN invocation
|
|
84
|
-
* only — a git invocation's REPO-RELOCATING global option ONLY: `-C` /
|
|
85
|
-
* `--git-dir` (or the SAME invocation's wrapping `env -C`, git-own-
|
|
86
|
-
* target-prioritised the same way `NormalizedCommand.targetDir` already
|
|
87
|
-
* is) — or, for a recognised bare `cd <path>` segment, the parsed path.
|
|
88
|
-
* Deliberately EXCLUDES `--work-tree` (D-017, fix round 2, run
|
|
89
|
-
* `2026-08-02-per-repo-gate-scoping-redesign`): `--work-tree` sets a
|
|
90
|
-
* git invocation's working tree but does NOT relocate its `--git-dir`
|
|
91
|
-
* search, so `git --work-tree=<B> push`/`log`/`status` still operate on
|
|
92
|
-
* whatever repo the invocation's ACTUAL directory names, never `<B>`
|
|
93
|
-
* alone — folding it into this field as though it were repo-identity-
|
|
94
|
-
* bearing (the pre-fix behaviour) let `resolveAttributedContexts`
|
|
95
|
-
* (`src/runtime/intercept.ts`, D-011) REPLACE the cwd demand with `<B>`'s
|
|
96
|
-
* on the strength of a flag that never moved the invocation there,
|
|
97
|
-
* measured as a live cross-repo fail-open. `null` when this segment
|
|
98
|
-
* names no repo-relocating target of its own (not a git invocation, not
|
|
99
|
-
* a `cd` segment, a bare git invocation, or a git invocation whose ONLY
|
|
100
|
-
* target-bearing flag is `--work-tree`) OR the named value is one of
|
|
101
|
-
* this view's unattributable forms: `~`-prefixed, carrying a stray quote
|
|
102
|
-
* character (the tokeniser is not quote-aware — a quoted value is
|
|
103
|
-
* captured WITH its quote character(s) still attached, not a real
|
|
104
|
-
* path), containing a command-substitution marker (`$(` or a backtick),
|
|
105
|
-
* or — for `cd` specifically — a bare `cd` with no argument or a `cd`
|
|
106
|
-
* with a flag (`cd -P /x`, three tokens instead of two). ALSO `null`
|
|
107
|
-
* when the SAME invocation names a git target via BOTH a relative own
|
|
108
|
-
* `-C` / `--git-dir` AND a wrapping `env -C` / `--chdir` base (`env -C
|
|
109
|
-
* /tmp/base git -C sub status`) — a mixed, internally ambiguous
|
|
110
|
-
* composition, unattributable for the same reason a relative own target
|
|
111
|
-
* after a preceding `cd` is (see `effectiveTarget` below); this is the
|
|
112
|
-
* ONE case where `ownTarget` itself, not just `effectiveTarget`, is
|
|
113
|
-
* nulled by a composition rule rather than by the raw value being
|
|
114
|
-
* unrecognisable on its own. A relative value (including `-C .`) and an
|
|
115
|
-
* absolute value are both otherwise preserved here verbatim, unresolved
|
|
116
|
-
* against any cwd — that resolution is a future consumer's job, not
|
|
117
|
-
* this module's. `git --git-dir=<A>/.git --work-tree=<B> ...`: this
|
|
118
|
-
* field is `<A>` (the `.git` parent) — `--git-dir` wins regardless of
|
|
119
|
-
* which flag appears first in the invocation, because `--work-tree`
|
|
120
|
-
* never contributes to this field at all, not because of any ordering
|
|
121
|
-
* rule between the two.
|
|
122
|
-
*
|
|
123
|
-
* ALSO `null` (D-018, fix round 3, pass-3 CRITICAL) when the invocation
|
|
124
|
-
* carries MORE THAN ONE recognised, resolved repo-relocating option:
|
|
125
|
-
* two-or-more `-C`, `-C` combined with `--git-dir`, `--git-dir` twice,
|
|
126
|
-
* or a same-invocation `env -C`/`--chdir` wrap whose target diverges
|
|
127
|
-
* from git's own ABSOLUTE `-C`/`--git-dir` target. Real git composes
|
|
128
|
-
* every one of these cumulatively (a later absolute value wins); this
|
|
129
|
-
* module does not encode that composition (same "not this module's
|
|
130
|
-
* job" reasoning as the relative-mix case above) and instead falls back
|
|
131
|
-
* to unattributable rather than trust the first flag it saw — `git -C
|
|
132
|
-
* <forge> -C <realA> push` actually runs in `<realA>`, but a first-
|
|
133
|
-
* flag-wins reading named `<forge>`, letting an agent redirect a gate's
|
|
134
|
-
* demanded evidence away from the repo the verb truly targets (measured
|
|
135
|
-
* against real git 2.34.1). An EXACT repeat of the same already-
|
|
136
|
-
* recorded value (`-C X -C X`, `env -C X git -C X`) is not new
|
|
137
|
-
* information and does not trigger this — see `peelGitGlobalOptions`'s
|
|
138
|
-
* `noteRelocatingOption` for the precise counting rule.
|
|
139
|
-
*
|
|
140
|
-
* D-021 (UNIVERSAL-ADDITIVE, operator decision, run 2026-08-02-per-
|
|
141
|
-
* repo-gate-scoping-redesign): the D-017/D-018 exclusions above (only a
|
|
142
|
-
* SINGLE recognised repo-relocating flag sets this field; `--work-tree`
|
|
143
|
-
* never does) are PRECISION, not the safety mechanism, since
|
|
144
|
-
* `src/runtime/intercept.ts`'s `resolveAttributedContexts` no longer
|
|
145
|
-
* REPLACES the cwd demand with this field's value — it ADDS to it, and
|
|
146
|
-
* the cwd demand is never dropped regardless of what this field
|
|
147
|
-
* resolves to. What these exclusions still prevent is a SPURIOUS extra
|
|
148
|
-
* demand (over-attributing a target the invocation does not actually,
|
|
149
|
-
* unambiguously name), not a dropped one — see that function's own doc
|
|
150
|
-
* comment for the full D-021 rationale.
|
|
151
|
-
*/
|
|
152
|
-
ownTarget: string | null;
|
|
153
|
-
/**
|
|
154
|
-
* The directory this segment's own invocation actually runs in, once
|
|
155
|
-
* composed with the LAST PRECEDING recognised `cd <path>` segment in the
|
|
156
|
-
* same command (not necessarily the immediately preceding segment — any
|
|
157
|
-
* non-`cd` segment in between leaves the running cd-basis unchanged, the
|
|
158
|
-
* same way a non-`cd` shell command never itself changes the directory).
|
|
159
|
-
* Composition rules (`01-plan.md`, Proposed Approach item 1, verbatim):
|
|
160
|
-
* - `ownTarget === null` → inherits the incoming cd-basis as-is
|
|
161
|
-
* (including `null` when nothing preceding named one either).
|
|
162
|
-
* - `ownTarget` absolute → itself, unconditionally — an absolute
|
|
163
|
-
* value is never "relative to" anything a preceding `cd` named.
|
|
164
|
-
* - `ownTarget` relative AND a preceding `cd` basis is known
|
|
165
|
-
* (non-`null`) → `null`. This is the K1 divergence case
|
|
166
|
-
* (`docs/okf/quote-model-divergence.md`): `cd T && git -C sub
|
|
167
|
-
* status` does NOT become `T/sub` here — that would need real
|
|
168
|
-
* filesystem-shaped path joining this module deliberately does not
|
|
169
|
-
* perform — so it is UNATTRIBUTABLE rather than guessed at.
|
|
170
|
-
* - `ownTarget` relative AND no preceding `cd` basis is known → the
|
|
171
|
-
* raw relative value itself (deferred to a future consumer to
|
|
172
|
-
* resolve against the real cwd).
|
|
173
|
-
* A same-invocation mixed `env -C <base>` + relative own `-C`/
|
|
174
|
-
* `--git-dir` composition (see `ownTarget` above — `--work-tree` is
|
|
175
|
-
* EXCLUDED from this mix entirely, D-017: it never sets `ownTarget`, so
|
|
176
|
-
* it can never trigger this ambiguity either) is `null` here TOO —
|
|
177
|
-
* checked BEFORE the cd-basis rules above and
|
|
178
|
-
* independently of them: `env -C /tmp/base git -C sub status` never
|
|
179
|
-
* becomes `/tmp/base/sub` (real path joining, deliberately not this
|
|
180
|
-
* module's job — same reasoning as the cd-basis K1 case) NOR does it
|
|
181
|
-
* fall through to the "relative, no cd basis, stays raw" branch above
|
|
182
|
-
* (that would hand a future consumer resolving relatives against ITS
|
|
183
|
-
* OWN cwd a CONFIDENTLY WRONG repository whenever the caller's cwd
|
|
184
|
-
* differs from `/tmp/base` — the "relative and `~` target dirs resolve
|
|
185
|
-
* to a confidently wrong repo" class named in the 07-27 review). A bare
|
|
186
|
-
* `env -C <base> git status` (no relative own target) is UNAFFECTED —
|
|
187
|
-
* `ownTarget` is `<base>` as usual, composed the ordinary way below.
|
|
188
|
-
* A recognised `cd <path>` segment whose OWN value is one of the
|
|
189
|
-
* unattributable forms above (e.g. `cd ~`) still RESETS the running
|
|
190
|
-
* cd-basis to `null` for every LATER segment — a later segment must not
|
|
191
|
-
* silently keep inheriting whatever basis existed BEFORE that `cd`,
|
|
192
|
-
* since the shell genuinely changed directory to somewhere this module
|
|
193
|
-
* cannot name.
|
|
194
|
-
*
|
|
195
|
-
* FULL reset-trigger list (D-014, fix round, run 2026-08-02-per-repo-
|
|
196
|
-
* gate-scoping-redesign — corrects this comment, which previously named
|
|
197
|
-
* only the unattributable-`cd`-value case above): the running basis
|
|
198
|
-
* resets to `null` — rather than the pre-fix behaviour of silently
|
|
199
|
-
* carrying an earlier basis forward unchanged — for ALL of: a bare `cd`
|
|
200
|
-
* with no argument, `cd -`, any other flagged `cd` (`cd -P /tmp/x`),
|
|
201
|
-
* `pushd`, `popd` (see `classifyCdSegment`), and the unattributable-
|
|
202
|
-
* `cd`-value case documented above. TWO of the reset triggers are NOT
|
|
203
|
-
* decided by this per-segment composition at all — they depend on the
|
|
204
|
-
* BOUNDARY a segment sits behind, which only the caller
|
|
205
|
-
* (`segmentAndCanonicalize`'s own walk) can see: the basis never
|
|
206
|
-
* crosses a bare `|` (each side of a pipe is bash's own subshell), and
|
|
207
|
-
* it resets after any segment whose text contains a `)` (a subshell
|
|
208
|
-
* close — `BOUNDARY_RE` has no `)` boundary of its own, so this is a
|
|
209
|
-
* substring check on the segment that happens to end there, not paren-
|
|
210
|
-
* depth tracking). See `segmentAndCanonicalize`'s own comment at its
|
|
211
|
-
* `computeSegmentTarget` call site for those two. NOT covered by any of
|
|
212
|
-
* this (same ceiling as before this fix round, unchanged): a `cd`
|
|
213
|
-
* inside a NESTED subshell that never closes within the command
|
|
214
|
-
* string's visible boundaries, and any construct outside this module's
|
|
215
|
-
* documented NOT-SUPPORTED list in the module header.
|
|
216
|
-
*/
|
|
217
|
-
effectiveTarget: string | null;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* The minimal shape `peelWrapperPrefixes` and every individual `peelX`
|
|
221
|
-
* wrapper-peeler actually need — `.text` only, never `.start`/`.end`
|
|
222
|
-
* (task d03af8f6, review round 3). Exported so
|
|
223
|
-
* `src/runtime/deletion-target-resolve.ts` can hand these SAME peelers a
|
|
224
|
-
* decoded token array of its own (built from ITS quote-aware tokenizer,
|
|
225
|
-
* not this module's `tokenizeWithOffsets`) without fabricating fake
|
|
226
|
-
* offsets: `Token` (with real offsets) is structurally assignable to
|
|
227
|
-
* `WrapperPeelToken[]` already, so `canonicalizeSegment`'s own call sites
|
|
228
|
-
* below need no change at all — this is a widening of the peelers'
|
|
229
|
-
* PARAMETER types only, not a behaviour change (none of them ever read
|
|
230
|
-
* `.start`/`.end`).
|
|
231
|
-
*/
|
|
232
|
-
export interface WrapperPeelToken {
|
|
233
|
-
text: string;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* The `git` token itself, matched by BASENAME so a path-qualified
|
|
237
|
-
* invocation (`/usr/bin/git`, `./git`) is recognised too (F4 fix).
|
|
238
|
-
* Anchored to the WHOLE token (not a substring) so `mygit` / `git-foo`
|
|
239
|
-
* still correctly fail to match — `\S*` only ever contributes characters
|
|
240
|
-
* immediately before a literal `/`, never before `git` directly.
|
|
241
|
-
* Exported (fix round 2, finding F3) so
|
|
242
|
-
* `tests/runtime/bash-match-head-token-drift.test.ts` can couple this
|
|
243
|
-
* module's covered set to what FULL_TEMPLATE's shipped `bash_match`
|
|
244
|
-
* policies actually key on today, instead of a test-owned duplicate.
|
|
245
|
-
*/
|
|
246
|
-
export declare const GIT_TOKEN_RE: RegExp;
|
|
247
|
-
/**
|
|
248
|
-
* git global options that this module's `peelGitGlobalOptions` skips over
|
|
249
|
-
* to find the subcommand. Exported so `read-only-bash.ts` can share the same
|
|
250
|
-
* source of truth; each module keeps its own decision about what a matched
|
|
251
|
-
* option means.
|
|
252
|
-
*
|
|
253
|
-
* Flags that consume a value (separate token or glued via `=`): `-C`,
|
|
254
|
-
* `--git-dir`, `--work-tree`, `-c`, `--namespace`.
|
|
255
|
-
*
|
|
256
|
-
* Flags without a value: `--no-pager`, `-p`, `--paginate`, `--exec-path`,
|
|
257
|
-
* `--literal-pathspecs`, `--no-replace-objects`.
|
|
258
|
-
*/
|
|
259
|
-
/**
|
|
260
|
-
* git global options that take a value, excluding `-c` for security.
|
|
261
|
-
* `-c KEY=VALUE` can inject arbitrary git config that executes code
|
|
262
|
-
* (core.fsmonitor, core.pager, core.editor, protocol.*.allow run
|
|
263
|
-
* arbitrary programs); fail-closed by not skipping it. read-only-bash.ts
|
|
264
|
-
* uses this set to skip only the safe value-taking options.
|
|
265
|
-
*
|
|
266
|
-
* Flags: `-C`, `--git-dir`, `--work-tree`, `--namespace` (recognized both
|
|
267
|
-
* standalone and glued with `=`).
|
|
268
|
-
*/
|
|
269
|
-
export declare const GIT_GLOBAL_VALUE_TAKING_FLAGS: ReadonlySet<string>;
|
|
270
|
-
/**
|
|
271
|
-
* git global options that take no value.
|
|
272
|
-
* Flags: `--no-pager`, `-p`, `--paginate`, `--exec-path`,
|
|
273
|
-
* `--literal-pathspecs`, `--no-replace-objects`.
|
|
274
|
-
*/
|
|
275
|
-
export declare const GIT_GLOBAL_NO_VALUE_FLAGS: ReadonlySet<string>;
|
|
276
|
-
/**
|
|
277
|
-
* The three OTHER head tokens this module covers (D-001, run
|
|
278
|
-
* 2026-07-28-nongit-trigger-wrappers) — `gh` (`gh pr merge` / `gh pr
|
|
279
|
-
* create`), `npm` (`npm publish`), `harness` (the kill-switch verbs). A
|
|
280
|
-
* closed set, deliberately NOT a general "any head token" rule (see the
|
|
281
|
-
* module header): matched by EXACT literal equality, unlike `GIT_TOKEN_RE`'s
|
|
282
|
-
* basename match, so a path-qualified spelling of any of these three stays
|
|
283
|
-
* out of scope (named residual, module header NOT-SUPPORTED list). This is
|
|
284
|
-
* NOT the complete set of head tokens a shipped `bash_match` trigger keys
|
|
285
|
-
* on — see the module header's "SHIPPED BUT NOT COVERED" paragraph (fix
|
|
286
|
-
* round 2, finding F1) for the four that are NOT in this set (`env`,
|
|
287
|
-
* `unset`, `tee`, `cp`) and why. Exported (fix round 2, finding F3) for the
|
|
288
|
-
* same drift-guard reason as `GIT_TOKEN_RE` above.
|
|
289
|
-
*/
|
|
290
|
-
export declare const NON_GIT_HEAD_TOKENS: ReadonlySet<string>;
|
|
291
|
-
/**
|
|
292
|
-
* Above this length, normalisation is skipped entirely and the command
|
|
293
|
-
* is returned unchanged (F3 fix — see the module header for why command
|
|
294
|
-
* SIZE must be bounded even after `findNextBoundary` was made linear).
|
|
295
|
-
* 100k characters comfortably covers any command a human or agent would
|
|
296
|
-
* plausibly type, while keeping the worst case a small constant instead
|
|
297
|
-
* of scaling with whatever ends up pasted into a single Bash call.
|
|
298
|
-
* Exported (G4 fix, review round 2) so a caller reporting the skip (see
|
|
299
|
-
* `NormalizedCommand.truncated`) can reference the same number instead of
|
|
300
|
-
* hand-copying it into a diagnostic message.
|
|
301
|
-
*/
|
|
302
|
-
export declare const MAX_NORMALIZE_LENGTH = 100000;
|
|
303
|
-
/**
|
|
304
|
-
* Second boundary alphabet (task aabbad63): identical to `BOUNDARY_RE`
|
|
305
|
-
* plus a bare `&` — bash's OWN "start a new command here" token, which
|
|
306
|
-
* every shipped `bash_match` trigger regex has treated as one of its own
|
|
307
|
-
* anchor characters since task `d834a065`, but which `BOUNDARY_RE` above
|
|
308
|
-
* has never recognised as a NORMALISATION-time boundary (see its comment
|
|
309
|
-
* for the reverted, measured-140/140-regression attempt to add it there
|
|
310
|
-
* directly).
|
|
311
|
-
*
|
|
312
|
-
* ALTERNATION ORDER IS LOAD-BEARING: `&&` MUST be listed to the LEFT of
|
|
313
|
-
* the bare `&` alternative. JS regex alternation is leftmost-FIRST, not
|
|
314
|
-
* leftmost-longest — with `&` tried before `&&`, every `&&` in a command
|
|
315
|
-
* would tokenise as TWO consecutive one-character `&` boundary MATCHES
|
|
316
|
-
* instead of a single two-character `&&` boundary match.
|
|
317
|
-
*
|
|
318
|
-
* MEASURED, NOT ASSUMED (do not "simplify" the pin below to an
|
|
319
|
-
* end-to-end `.normalized` string assertion): for THIS module's segment-
|
|
320
|
-
* and-rejoin architecture specifically, that reordering is, perhaps
|
|
321
|
-
* counter-intuitively, INVISIBLE in `normalizeCommandAmpAware`'s own
|
|
322
|
-
* output string. Two adjacent single-`&` matches sandwich a genuinely
|
|
323
|
-
* zero-length segment between them (the two `&` characters of a real
|
|
324
|
-
* `&&` are, by definition, adjacent), `canonicalizeSegment("")` is a
|
|
325
|
-
* verbatim no-op, and `parts.join("")` reassembles the exact same bytes
|
|
326
|
-
* either way — verified directly (not merely reasoned about) by
|
|
327
|
-
* temporarily swapping this alternation's order, rebuilding, and
|
|
328
|
-
* diffing `normalizeCommandAmpAware(...).normalized` across several
|
|
329
|
-
* `&&`-bearing commands (including this comment's own `git -C
|
|
330
|
-
* /tmp/repoB status && git -C /tmp/repoB log` example): byte-identical
|
|
331
|
-
* output both ways. So a test asserting on the OUTPUT STRING alone
|
|
332
|
-
* cannot distinguish the two orderings for this architecture — the pin
|
|
333
|
-
* in `tests/runtime/command-normalize.test.ts` therefore execs this
|
|
334
|
-
* regex object DIRECTLY against a `&&`-bearing string and asserts the
|
|
335
|
-
* match text is `"&&"`, not `"&"`, which DOES fail under a swap. The
|
|
336
|
-
* order is still specified exactly as documented above (leftmost-first
|
|
337
|
-
* is real JS semantics, and the internal `segmentAndCanonicalize`
|
|
338
|
-
* bookkeeping this alphabet ALSO drives — `hasAmbiguousNonGitSegment`,
|
|
339
|
-
* discarded by `normalizeCommandAmpAware` but not by a hypothetical
|
|
340
|
-
* future consumer of `segmentAndCanonicalize` under this alphabet —
|
|
341
|
-
* would still see a spurious extra "non-git segment" under the wrong
|
|
342
|
-
* order), it just cannot be pinned through this module's ONE exposed
|
|
343
|
-
* string alone.
|
|
344
|
-
*
|
|
345
|
-
* Used ONLY by `normalizeCommandAmpAware` below, which is consulted ONLY
|
|
346
|
-
* as `policyMatchesEvent`'s third, additional matching arm — see that
|
|
347
|
-
* function's own comment for why its result never carries a `targetDir`/
|
|
348
|
-
* `targetBase`, and `src/runtime/intercept.ts` for the memoised-thunk
|
|
349
|
-
* threading that keeps this off the common (raw-or-normalised-already-
|
|
350
|
-
* matched) path. Exported (mirrors `GIT_TOKEN_RE` / `NON_GIT_HEAD_TOKENS`
|
|
351
|
-
* / `MAX_NORMALIZE_LENGTH` above) solely so the ordering pin test can
|
|
352
|
-
* exec it directly instead of re-declaring an equivalent regex literal
|
|
353
|
-
* that would test JS semantics in general, not THIS source's actual
|
|
354
|
-
* alternation.
|
|
355
|
-
*/
|
|
356
|
-
export declare const AMP_BOUNDARY_RE: RegExp;
|
|
357
|
-
/**
|
|
358
|
-
* Given a Bash command string, return its normalised form and the target
|
|
359
|
-
* directory (and base, if relative) of its git invocation. Never throws:
|
|
360
|
-
* any internal failure (there should be none — this is a defensive
|
|
361
|
-
* backstop matching the fail-safe shape used elsewhere in this codebase,
|
|
362
|
-
* e.g. `policyMatchesEvent`'s `try/catch` around `new RegExp`) falls back
|
|
363
|
-
* to the input unchanged.
|
|
364
|
-
*/
|
|
365
|
-
export declare function normalizeCommand(command: string): NormalizedCommand;
|
|
366
|
-
/**
|
|
367
|
-
* Given a Bash command string, return its per-segment view (task
|
|
368
|
-
* `98ad072f` groundwork, T-002) — see `CommandSegment`'s own doc comment
|
|
369
|
-
* for the field-level composition rules. `null` when the input exceeded
|
|
370
|
-
* `MAX_NORMALIZE_LENGTH` (mirrors `NormalizedCommand.truncated`, but as
|
|
371
|
-
* the ABSENCE of a view rather than a boolean flag alongside one, since
|
|
372
|
-
* there is no meaningful per-segment view to return for an input whose
|
|
373
|
-
* normalisation itself was skipped). `[]` for an empty or non-string
|
|
374
|
-
* command, and as the never-throws fallback (mirrors `normalizeCommand`'s
|
|
375
|
-
* own defensive backstop — see its doc comment above).
|
|
376
|
-
*
|
|
377
|
-
* THIS function's OWN call into `segmentAndCanonicalize` (`collectSegments:
|
|
378
|
-
* true`) is one walk, O(length) — the "no additional pass" claim is scoped
|
|
379
|
-
* to that ONE call, not to a caller's total work. CORRECTED (D-015, fix
|
|
380
|
-
* round, run 2026-08-02-per-repo-gate-scoping-redesign) — the prior wording
|
|
381
|
-
* here read "no additional pass over the command string" without that
|
|
382
|
-
* scoping, which a reader could take as "calling this costs nothing beyond
|
|
383
|
-
* `normalizeCommand`'s own walk." Measured false: `normalizeCommand(cmd)`
|
|
384
|
-
* and `segmentViewOf(cmd)` are two SEPARATE top-level calls, each running
|
|
385
|
-
* its own full `segmentAndCanonicalize` pass over the SAME string — a
|
|
386
|
-
* caller needing both (as `src/cli/policy/intercept.ts` does, for
|
|
387
|
-
* `normalized`/`truncated` and the segment view respectively) pays TWO
|
|
388
|
-
* walks, not one; measured +206% at the `MAX_NORMALIZE_LENGTH` bound
|
|
389
|
-
* (2.73 → 8.36 ms), harmless against the 1000 ms hook budget but not free.
|
|
390
|
-
* As of the same fix round, the one production caller only pays this
|
|
391
|
-
* second walk lazily, when some matching policy actually needs it (see
|
|
392
|
-
* `InterceptOptions.commandSegmentsThunk` in `src/runtime/intercept.ts`) —
|
|
393
|
-
* but that laziness lives in the CALLER, not in this function, which still
|
|
394
|
-
* does exactly one walk every time it runs. The ampersand-aware second pass
|
|
395
|
-
* (`normalizeCommandAmpAware`) NEVER collects a segment view (always calls
|
|
396
|
-
* `segmentAndCanonicalize` with `collectSegments: false`) — see that
|
|
397
|
-
* function's own comment for why a directory extracted under the
|
|
398
|
-
* ampersand-aware alphabet would be unreliable in the first place; the
|
|
399
|
-
* same reasoning applies here, so this module offers no amp-aware variant
|
|
400
|
-
* of this function at all.
|
|
401
|
-
*/
|
|
402
|
-
export declare function segmentViewOf(command: string): CommandSegment[] | null;
|
|
403
|
-
/**
|
|
404
|
-
* Ampersand-aware sibling of `segmentViewOf` (task d03af8f6, review
|
|
405
|
-
* round 3): the same per-segment view, but segmented under
|
|
406
|
-
* `AMP_BOUNDARY_RE` (`BOUNDARY_RE` plus a bare `&`) instead of
|
|
407
|
-
* `BOUNDARY_RE` — closing the same bare-`&` gap `normalizeCommandAmpAware`
|
|
408
|
-
* closes for trigger matching (`echo hi & rm -rf /home/x`), but as a
|
|
409
|
-
* segment VIEW rather than a rejoined string, for
|
|
410
|
-
* `src/runtime/deletion-target-resolve.ts`'s multi-segment scan. Uses the
|
|
411
|
-
* SAME shared walk (`segmentAndCanonicalize`, parameterised on
|
|
412
|
-
* `boundaryRe` since task aabbad63) as every other pass in this module —
|
|
413
|
-
* no new segmentation logic. `CommandSegment.effectiveTarget`'s own
|
|
414
|
-
* composition rules are UNCHANGED by which alphabet drove the split; a
|
|
415
|
-
* caller that only needs `.text` per segment (as the deletion resolver
|
|
416
|
-
* does) is unaffected by the same directory-extraction reliability
|
|
417
|
-
* caveat `normalizeCommandAmpAware`'s own comment names for `targetDir`/
|
|
418
|
-
* `targetBase` — this function returns the FULL `CommandSegment` shape,
|
|
419
|
-
* `effectiveTarget` included, so a future caller relying on THAT field
|
|
420
|
-
* under this alphabet should read `normalizeCommandAmpAware`'s comment
|
|
421
|
-
* first. `null` under the same `MAX_NORMALIZE_LENGTH` condition
|
|
422
|
-
* `segmentViewOf` uses; `[]` for an empty/non-string command or the
|
|
423
|
-
* never-throws fallback.
|
|
424
|
-
*/
|
|
425
|
-
export declare function segmentViewOfAmpAware(command: string): CommandSegment[] | null;
|
|
426
|
-
/**
|
|
427
|
-
* Return type of `normalizeCommandAmpAware` — deliberately NOT
|
|
428
|
-
* `NormalizedCommand` (task aabbad63, hard constraint). It carries only
|
|
429
|
-
* `normalized`/`truncated`; there is no `targetDir`/`targetBase` field at
|
|
430
|
-
* all, so a future caller cannot wire one up to a gate by mistake — see
|
|
431
|
-
* `normalizeCommandAmpAware`'s own comment for why a directory extracted
|
|
432
|
-
* under the ampersand-aware alphabet would be unreliable in the first
|
|
433
|
-
* place, not merely "unwired today".
|
|
434
|
-
*/
|
|
435
|
-
export interface AmpAwareNormalizedCommand {
|
|
436
|
-
/** Same contract as `NormalizedCommand.normalized`, under `AMP_BOUNDARY_RE`. */
|
|
437
|
-
normalized: string;
|
|
438
|
-
/** Same contract as `NormalizedCommand.truncated`. */
|
|
439
|
-
truncated: boolean;
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Ampersand-aware SECOND normalisation pass (task aabbad63). Segments the
|
|
443
|
-
* command under `AMP_BOUNDARY_RE` (`BOUNDARY_RE` plus a bare `&`) instead
|
|
444
|
-
* of `BOUNDARY_RE`, then canonicalises exactly like the primary pass
|
|
445
|
-
* (same `canonicalizeSegment`, same wrapper-peeling rules, same
|
|
446
|
-
* `MAX_NORMALIZE_LENGTH` bound). Closes the gap `BOUNDARY_RE`'s own
|
|
447
|
-
* comment names: `A=x&env -C /tmp git status` and `echo hi & nice git
|
|
448
|
-
* status` were ungated because a wrapper can only be peeled after a
|
|
449
|
-
* recognised boundary, and a bare `&` was not one.
|
|
450
|
-
*
|
|
451
|
-
* Return type deliberately has NO `targetDir`/`targetBase` — not merely
|
|
452
|
-
* "always null under this alphabet", genuinely ABSENT from the type, so
|
|
453
|
-
* no consumer can read one by mistake. Reason: a bare `&` is ALSO how
|
|
454
|
-
* bash spells a background job (`git -C /x push &`) and how a redirect
|
|
455
|
-
* merges streams (`git -C /x log 2>&1`, `... &> out`). Under THIS
|
|
456
|
-
* alphabet each of those splits into a spurious extra "segment", which
|
|
457
|
-
* `segmentAndCanonicalize`'s own non-git-segment ambiguity rule (a
|
|
458
|
-
* segment that starts a new command and is not itself a git invocation
|
|
459
|
-
* forces `targetDir` to `null` — see its G1 comment) would turn into a
|
|
460
|
-
* wrong-shaped loss for a case the PRIMARY pass still resolves correctly
|
|
461
|
-
* today. Pinned in `tests/runtime/command-normalize.test.ts`'s "aabbad63
|
|
462
|
-
* groundwork" describe block, which exercises ONLY `normalizeCommand`
|
|
463
|
-
* (the primary pass), never this function — `targetDir`/`targetBase`
|
|
464
|
-
* stay the primary pass's property alone.
|
|
465
|
-
*
|
|
466
|
-
* Only consulted by `policyMatchesEvent`'s third arm
|
|
467
|
-
* (`src/runtime/intercept.ts`), and only when a policy's `bash_match`
|
|
468
|
-
* regex has already missed BOTH the raw command and the primary
|
|
469
|
-
* normalised form — see that module and `src/cli/policy/intercept.ts`
|
|
470
|
-
* for the memoised-thunk threading that keeps this computation off the
|
|
471
|
-
* common (already-matched) path.
|
|
472
|
-
*/
|
|
473
|
-
export declare function normalizeCommandAmpAware(command: string): AmpAwareNormalizedCommand;
|
|
474
|
-
/**
|
|
475
|
-
* Return type of `normalizeCommandQuoteAware` — same shape and same
|
|
476
|
-
* reasoning as `AmpAwareNormalizedCommand` above: no `targetDir`/
|
|
477
|
-
* `targetBase`, so no consumer can read one extracted under quote-aware
|
|
478
|
-
* segmentation by mistake. Unlike the amp-aware pass, THIS alphabet is
|
|
479
|
-
* exactly `BOUNDARY_RE`'s own (no new boundary characters, only new
|
|
480
|
-
* quote-tracking around the existing ones), so the reason for omitting
|
|
481
|
-
* these fields is different: `computeSegmentTarget` / `classifyCdSegment`
|
|
482
|
-
* / `canonicalizeSegment` all assume `tokenizeWithOffsets`'s whitespace
|
|
483
|
-
* tokenisation lines up with the segment boundaries `findNextBoundary`
|
|
484
|
-
* produces, which is still true for the boundary ALPHABET itself but is
|
|
485
|
-
* now also entangled with `consumeAssignment`'s OWN, separate quote
|
|
486
|
-
* tracking (per-token, inside one segment) once segments can be wider and
|
|
487
|
-
* carry an unbalanced quote at their edges in new ways this task's own
|
|
488
|
-
* corpus does not exhaustively characterise for `targetDir` purposes —
|
|
489
|
-
* left unexplored rather than guessed at, mirroring the amp-aware pass's
|
|
490
|
-
* own "not this task's job" scoping.
|
|
491
|
-
*/
|
|
492
|
-
export interface QuoteAwareNormalizedCommand {
|
|
493
|
-
/** Same contract as `NormalizedCommand.normalized`, under quote-aware segmentation. */
|
|
494
|
-
normalized: string;
|
|
495
|
-
/** Same contract as `NormalizedCommand.truncated`. */
|
|
496
|
-
truncated: boolean;
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Quote-aware THIRD normalisation pass (task cf3dff51). Segments the
|
|
500
|
-
* command under `BOUNDARY_RE`'s own alphabet — same characters as the
|
|
501
|
-
* primary pass, no widening — but tracks single/double-quote state while
|
|
502
|
-
* scanning (`findNextBoundaryQuoteAware` below) so a boundary character
|
|
503
|
-
* sitting INSIDE a quoted assignment value is no longer treated as a real
|
|
504
|
-
* segment split. Closes the gap the module header's "DELIBERATELY NOT
|
|
505
|
-
* SUPPORTED" list and `BOUNDARY_RE`'s own comment both name: `VAR='a; b'
|
|
506
|
-
* git push` (task 13e55484's pinned residual) — `BOUNDARY_RE` used to cut
|
|
507
|
-
* the segment at the `;`, landing squarely between the two halves of one
|
|
508
|
-
* quoted value, so neither resulting piece carried a recognisable
|
|
509
|
-
* invocation and `consumeAssignment`'s own multi-token quote continuation
|
|
510
|
-
* (built for exactly this shape) never got the chance to run: it operates
|
|
511
|
-
* AFTER segmentation, on tokens WITHIN one segment, and the quoted value
|
|
512
|
-
* was never in one segment to begin with. Once quote-aware segmentation
|
|
513
|
-
* keeps the value whole, `consumeAssignment` needs no changes at all — it
|
|
514
|
-
* already reconstructs a multi-token quoted value correctly; this pass
|
|
515
|
-
* only fixes what gets handed to it as ONE segment in the first place.
|
|
516
|
-
*
|
|
517
|
-
* BUILT AS A NEW, INDEPENDENT PASS RATHER THAN AN IN-PLACE EDIT OF
|
|
518
|
-
* `BOUNDARY_RE` / `segmentAndCanonicalize` — this is the module header's
|
|
519
|
-
* HALT CRITERION, restated here at the point it governs: quote-aware
|
|
520
|
-
* segmentation can MERGE a segment the primary pass currently splits, and
|
|
521
|
-
* that merge cuts in BOTH directions — it can turn a previously-missed
|
|
522
|
-
* bypass into a match (the fix), but it can just as easily turn a
|
|
523
|
-
* previously-accepted, ALREADY-WIRED over-block into a miss (a
|
|
524
|
-
* regression). Measured, not hypothetical: `tests/runtime/command-
|
|
525
|
-
* normalize.test.ts`'s "accepted over-block: a quoted assignment inside
|
|
526
|
-
* TEXT after a boundary char now matches" pin — `echo "a; VAR='x y' git
|
|
527
|
-
* push"` — matches via `normalizeCommand` TODAY only because `BOUNDARY_RE`
|
|
528
|
-
* splits it at the `;`, landing `VAR='x y' git push` at a segment start
|
|
529
|
-
* where the assignment continuation turns it into a match. An in-place
|
|
530
|
-
* quote-aware edit of THAT pass would un-split it back into the outer
|
|
531
|
-
* `echo "..."` segment — not itself a recognised invocation — and flip
|
|
532
|
-
* that pin to a lost match, in violation of the raw-OR-normalised-OR-amp-
|
|
533
|
-
* aware-OR-(this) never-lose-a-match discipline every other pass in this
|
|
534
|
-
* module already honours. Building this as a SEPARATE pass instead means
|
|
535
|
-
* `normalizeCommand`'s own segmentation, and every test resting on it —
|
|
536
|
-
* including that exact one — is untouched by this task; see this file's
|
|
537
|
-
* own test suite for the differential proof (every case the first three
|
|
538
|
-
* arms already matched still matches, by construction, because none of
|
|
539
|
-
* those three arms' code changed at all).
|
|
540
|
-
*
|
|
541
|
-
* WIRED to `policyMatchesEvent` (`src/runtime/intercept.ts`) as its
|
|
542
|
-
* FOURTH arm — same shape as `normalizeCommandAmpAware`'s own third-arm
|
|
543
|
-
* wiring (task aabbad63): consulted only after the raw command,
|
|
544
|
-
* `normalizedCommand`, and the amp-aware pass have all missed, via a
|
|
545
|
-
* memoised thunk (`InterceptOptions.quoteNormalizedCommandThunk`,
|
|
546
|
-
* `src/cli/policy/intercept.ts`'s `quoteNormalizedCommandThunk`) so the
|
|
547
|
-
* segmentation cost is paid at most once per event, on the common
|
|
548
|
-
* (already-matched) path it costs nothing at all. Wiring landed in a
|
|
549
|
-
* SECOND round of this task, after the orchestrator extended the first
|
|
550
|
-
* round's file scope specifically for this one wiring point — the first
|
|
551
|
-
* round shipped this function fully built and tested but genuinely
|
|
552
|
-
* unwired (an inert security fix, called out explicitly as the wrong
|
|
553
|
-
* shipped state in that round's own report) — `src/cli/dry-run.ts`'s own,
|
|
554
|
-
* independently-copied matcher was deliberately NOT extended in the same
|
|
555
|
-
* round (out of the extended scope too) and stayed a named residual until
|
|
556
|
-
* task f561e44c closed it by adding the same fourth OR-arm there too — see
|
|
557
|
-
* that file's own comment.
|
|
558
|
-
*
|
|
559
|
-
* THIS PASS'S OWN OVER-BLOCK SURFACE is measured and named in the test
|
|
560
|
-
* file rather than assumed — and the measurement CORRECTS an earlier,
|
|
561
|
-
* pre-measurement guess that used to sit in this comment: it does NOT
|
|
562
|
-
* reproduce the `echo "a; VAR='x y' git push"` accepted over-block named
|
|
563
|
-
* above. Quote-aware merging keeps that whole `echo "..."` segment
|
|
564
|
-
* together, starting with the unrecognised head token `echo`, so this
|
|
565
|
-
* function's output for it is byte-identical to the raw input
|
|
566
|
-
* (`normalizeCommand`'s OWN, separate, unchanged-by-this-task match for
|
|
567
|
-
* that same string is unaffected either way). Measured against a broader
|
|
568
|
-
* adversarial probe, both at this function's own level and again at
|
|
569
|
-
* `policyMatchesEvent`'s wired level (a bash-shim-verified corpus of
|
|
570
|
-
* chained/prefixed/subshell-wrapped genuine invocations plus candidate
|
|
571
|
-
* over-block shapes — entirely quoted `echo`/`printf` arguments that only
|
|
572
|
-
* PRINT the spelling): every additional match this pass adds beyond raw /
|
|
573
|
-
* `normalizeCommand` / `normalizeCommandAmpAware` is a TRUE positive (a
|
|
574
|
-
* real invocation bash would actually execute); no NEW over-block class
|
|
575
|
-
* distinct from `consumeAssignment`'s own, already-reviewed precision
|
|
576
|
-
* limits was found. This function shares `canonicalizeSegment` /
|
|
577
|
-
* `consumeAssignment` completely unchanged with the other passes — only
|
|
578
|
-
* the segmentation boundary decision differs — which is also the
|
|
579
|
-
* structural reason a longer (merged) segment can only REVEAL a match
|
|
580
|
-
* those functions would already accept from a shorter view, never
|
|
581
|
-
* fabricate a new kind of one; see the module header's cf3dff51 UPDATE
|
|
582
|
-
* paragraph for the fuller statement of this reasoning and its
|
|
583
|
-
* "not a formal proof" caveat.
|
|
584
|
-
*/
|
|
585
|
-
export declare function normalizeCommandQuoteAware(command: string): QuoteAwareNormalizedCommand;
|
|
586
|
-
/** Return type of `peelWrapperPrefixes` — see that function's own comment. */
|
|
587
|
-
export interface WrapperPeelResult {
|
|
588
|
-
/** Index of the first token after every recognised wrapper prefix this
|
|
589
|
-
* loop peeled — the wrapped invocation's own head token, or (if
|
|
590
|
-
* `tokens.length`) no head token survived at all. */
|
|
591
|
-
idx: number;
|
|
592
|
-
/**
|
|
593
|
-
* The `env -C <dir>` / `--chdir <dir>` target directory, when this
|
|
594
|
-
* chain peeled an `env` wrapper naming one (excluding a `~`-prefixed
|
|
595
|
-
* value — F5, treated as if absent). `null` when no `env -C`/`--chdir`
|
|
596
|
-
* was peeled. Consumed only by `canonicalizeSegment`'s own
|
|
597
|
-
* `targetDir`/`targetBase` bookkeeping —
|
|
598
|
-
* `src/runtime/deletion-target-resolve.ts` (the other caller, task
|
|
599
|
-
* d03af8f6, review round 3) has no analogous need and ignores it.
|
|
600
|
-
*/
|
|
601
|
-
envTargetDir: string | null;
|
|
602
|
-
}
|
|
603
|
-
/**
|
|
604
|
-
* Peel a leading wrapper-command chain: `VAR=value` tokens (any number,
|
|
605
|
-
* in sequence), `env` (+ its own flags/assignments, capturing `-C`/
|
|
606
|
-
* `--chdir`), `command` (+ its own flags), `nice` (+ its own flags),
|
|
607
|
-
* `sudo` / `doas` / `time` / `timeout` / `stdbuf` / `setsid` / `exec` /
|
|
608
|
-
* `nohup` (+ each one's own flags — F4 fix; `exec`/`nohup` added task
|
|
609
|
-
* d03af8f6, review round 3). Bounded by `tokens.length` so a
|
|
610
|
-
* pathological input cannot spin. Returns the cursor position of
|
|
611
|
-
* whatever token (if any) survives the peel — the caller decides what to
|
|
612
|
-
* do with it; this function never itself inspects the survivor.
|
|
613
|
-
*
|
|
614
|
-
* SHARED (task d03af8f6, review round 3) between `canonicalizeSegment`
|
|
615
|
-
* below — this module's own `git`/`gh`/`npm`/`harness` trigger
|
|
616
|
-
* recognition — and `src/runtime/deletion-target-resolve.ts`'s deletion-
|
|
617
|
-
* verb recognition (`rm`/`find`/`git clean`), which used to hand-roll an
|
|
618
|
-
* independent, narrower copy of this exact peeling vocabulary
|
|
619
|
-
* (`peelWrapperHeads`, missing `-u`/`-i`/`-C` on `env`, the duration-
|
|
620
|
-
* consuming shape of `timeout`, `nice`'s glued/`--adjustment=` forms,
|
|
621
|
-
* and `exec`/`nohup` entirely). Reusing this ONE loop instead of
|
|
622
|
-
* maintaining two means a future wrapper added here (or a flag fix to an
|
|
623
|
-
* existing one) benefits both gates automatically, and
|
|
624
|
-
* `npm run check:duplication`'s clone-count fitness function has one
|
|
625
|
-
* fewer near-duplicate block to flag. `deletion-target-resolve.ts` hands
|
|
626
|
-
* this a decoded token array built from ITS OWN quote-aware tokenizer
|
|
627
|
-
* (`WrapperPeelToken[]`, `.text` only — see that interface's own
|
|
628
|
-
* comment for why the offset-carrying `Token[]` this module's own
|
|
629
|
-
* `tokenizeWithOffsets` produces is not required here), then layers its
|
|
630
|
-
* own `xargs` handling on top (this loop deliberately does NOT recognise
|
|
631
|
-
* `xargs` — see the module header's NOT-SUPPORTED list for why `xargs`
|
|
632
|
-
* is architecturally different from every wrapper peeled here: its own
|
|
633
|
-
* argv is not simply "the command to run").
|
|
634
|
-
*/
|
|
635
|
-
export declare function peelWrapperPrefixes(tokens: readonly WrapperPeelToken[], startIdx?: number): WrapperPeelResult;
|
|
636
|
-
/**
|
|
637
|
-
* Generic "peel this wrapper's own flags" loop shared by the small,
|
|
638
|
-
* bounded-vocabulary runners added for F4 (`sudo`, `doas`, `time`,
|
|
639
|
-
* `stdbuf`, `setsid`, `exec`, `nohup`): consume `--`, any flag in
|
|
640
|
-
* `valueFlags` (+ its following token), any glued short/long form
|
|
641
|
-
* matching `gluedRe`, then any OTHER `-`-prefixed token treated as
|
|
642
|
-
* boolean (mirrors `peelCommand` above — safe because an unrecognised
|
|
643
|
-
* flag is either genuinely boolean, in which case this is correct, or
|
|
644
|
-
* value-taking, in which case its VALUE token is left for the next
|
|
645
|
-
* iteration and — not being `git`, a known wrapper, or another flag —
|
|
646
|
-
* simply causes a clean, safe bail-out a token late rather than a false
|
|
647
|
-
* match). Does NOT capture flag VALUES: none of these wrappers have a
|
|
648
|
-
* "run in a different directory" semantic this module tracks as a
|
|
649
|
-
* target directory — only `env -C`/`--chdir` does, and that stays
|
|
650
|
-
* hand-written in `peelEnv`. Exported (task d03af8f6, review round 3) so
|
|
651
|
-
* `src/runtime/deletion-target-resolve.ts` can reuse this SAME loop for
|
|
652
|
-
* `xargs`'s own flags (`-0`, `-n1`, ...) instead of a third
|
|
653
|
-
* independently-drifting copy — that module is the reason this needs no
|
|
654
|
-
* value-flag vocabulary of its own either: `xargs`'s own value-taking
|
|
655
|
-
* flags are not modelled there, matching this function's existing
|
|
656
|
-
* effort level for the boolean-only wrappers above.
|
|
657
|
-
*/
|
|
658
|
-
export declare function peelGenericFlags(tokens: readonly WrapperPeelToken[], startIdx: number, valueFlags: ReadonlySet<string>, gluedRe: RegExp | null): number;
|