# pi-bash-to-ps

A [pi](https://pi.dev) extension that lets AI coding agents write bash commands on Windows — they get transpiled to PowerShell and run natively. No Git Bash or WSL required.

```
LLM generates:  ls -la src/ | grep TODO | wc -l
                    ↓ transpiled
Executes:        Get-ChildItem ... | Select-String ... | Measure-Object -Line
```

The extension overrides pi's built-in `bash` tool transparently — the LLM never knows anything is different. Same tool name, same schema, same output format.

## Install

```bash
# Install globally as a pi package
pi install npm:pi-bash-to-ps

# Or from GitHub
pi install github.com/Paul-Yuchao-Dong/pi-bash-to-ps

# Or test without installing
pi -e npm:pi-bash-to-ps
```

You can also clone and run locally:

```bash
git clone https://github.com/Paul-Yuchao-Dong/pi-bash-to-ps
cd pi-bash-to-ps
npm install
pi -e ./index.ts
```

## How it works

On `bash` tool calls, the extension:

1. **Transpiles** the bash command to PowerShell via [joyi-ai/bash-to-powershell](#attribution)
2. **Spawns** `pwsh.exe` (PS 7) or `powershell.exe` (PS 5.1) with the transpiled command
3. **Falls back** to the original bash command via the system shell if transpilation fails
4. **No-ops** on macOS and Linux — the built-in bash tool is untouched

Native tools (`rg`, `fd`, `curl.exe`, `jq`) are auto-detected and preferred over PowerShell cmdlet fallbacks.

## Platform support

| OS | Behavior |
|----|----------|
| Windows | Bash → transpile → PowerShell |
| macOS / Linux | No-op (built-in bash tool unchanged) |

## Architecture decisions

See [docs/adr/0001-override-bash-tool.md](docs/adr/0001-override-bash-tool.md) for why we chose to override the tool rather than intercept events.

## Attribution

**bash-to-powershell** — the transpiler that powers this extension.

- GitHub: [joyi-ai/bash-to-powershell](https://github.com/joyi-ai/bash-to-powershell)
- License: MIT
- Vendored at `bash-to-powershell/` with [`LICENSE`](bash-to-powershell/LICENSE)

## License

MIT
