/** * Git-Bash resolver (mmnto-ai/totem#2159) — the cohort-standard fix for the * bare-`bash`-is-WSL trap. * * On Windows hosts, Git-for-Windows puts only `Git\cmd` on PATH, so a bare * `bash` spawn outside an MSYS/git-hook context resolves to * `C:\Windows\System32\bash.exe` — WSL's Linux bash, which cannot read * `D:\...` Windows paths and fails every script it is handed. The * operator-ruled cohort standard (2026-06-12; strategy concur 0240Z) is * repo-side mechanization with ONE exported resolver: **bare `bash` is never * spawned by repo tooling on win32** — every bash-invoking surface consumes * this function instead. * * Resolution: memo → POSIX fast-path (`'bash'` is genuine there) → * `git --exec-path` derivation (walk up to Git's install root, probe * `usr/bin/bash.exe` — the real MSYS bash — then `bin/bash.exe`, the * wrapper) → conventional install-path probes → HARD `TotemError` naming * every probed path. A bare-`'bash'` final fallback is deliberately absent: * it would silently re-enter the WSL trap this module exists to kill * (Tenet 4 — the failure must be loud and actionable, not a cryptic * `No such file or directory` from a Linux bash reading a Windows path). */ /** * Resolve the bash executable repo tooling must spawn. Returns `'bash'` on * POSIX (no subprocess spent); on win32 returns an absolute Git-Bash path or * throws `BASH_RESOLUTION_FAILED` — never the literal `'bash'`. */ export declare function resolveBash(): string; /** * Child-process env for spawning the resolved bash: on win32, Git's * `usr\bin` and `bin` are PREPENDED to PATH so the script's own children * (`grep`, `tr`, `sha256sum`, `cut` — the MSYS coreutils) resolve. This is * the trap's second layer: a directly-spawned Git-Bash inherits the parent * PATH (which lacks `usr\bin` — that's the whole #2159 class), so the bash * binary runs but every coreutil inside the script is `command not found`. * Git-hook contexts never see this because git prepends its own tree before * running hooks; this function reproduces that contract for plain spawns. * * POSIX returns `base` unchanged. The existing PATH key's casing is * preserved (Windows env keys are case-insensitive; introducing a second * `PATH` spelling alongside an inherited `Path` is undefined behavior). */ export declare function bashSpawnEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv; /** * Reset the module memo so unit tests can exercise every resolution branch * without cross-test bleed. Test-only by convention (underscore prefix); * production callers have no reason to clear an immutable host fact. * * @internal */ export declare function _clearBashResolverCacheForTesting(): void; //# sourceMappingURL=bash-resolver.d.ts.map