# @arvoretech/pi-kiro-provider

A [pi](https://github.com/earendil-works/pi-coding-agent) provider extension that connects pi to the **Kiro API** (AWS CodeWhisperer/Q), exposing kiro-cli-verified models through one provider surface.

## Why this exists

Kiro gives you a strong free model menu, but pi needs a provider that speaks Kiro's auth, model catalog, and streaming protocol cleanly. `@arvoretech/pi-kiro-provider` handles that bridge, including:

- AWS Builder ID, IAM Identity Center, Google, and GitHub login flows
- shared credentials from an existing `kiro-cli` session when available
- reasoning-aware streaming
- region-aware model filtering so pi only shows models your Kiro region can actually use

## Quick start

Add to `.pi/settings.json`:

```json
{
  "packages": ["npm:@arvoretech/pi-kiro-provider"]
}
```

Or reference the local dist path for project-local development:

```json
{
  "extensions": ["./arvore-pi-extensions/packages/kiro-provider/dist/index.js"]
}
```

Then log in from pi:

```text
/login kiro
```

The login flow supports:
- **AWS Builder ID** — native device-code flow, works well over SSH/remotes
- **Your organization** — IAM Identity Center start URL
- **Google** — social login via `kiro-cli`
- **GitHub** — social login via `kiro-cli`

If you already use [kiro-cli](https://kiro.dev), the provider can reuse those credentials instead of forcing a second login.

## Models

| Family | Models | Context | Reasoning |
|--------|--------|---------|-----------|
| Claude Opus | `claude-opus-4-7`, `claude-opus-4-6` | 1M | ✓ |
| Claude Sonnet 5 | `claude-sonnet-5` | 1M | ✓ |
| Claude Sonnet 4.6 | `claude-sonnet-4-6` | 1M | ✓ |
| Claude Sonnet 4.5 | `claude-sonnet-4-5` | 200K | ✓ |
| Claude Sonnet 4 | `claude-sonnet-4` | 200K | ✓ |
| Claude Haiku 4.5 | `claude-haiku-4-5` | 200K | ✗ |
| Claude Fable 5 | `claude-fable-5` | 1M | ✓ |
| DeepSeek 3.2 | `deepseek-3-2` | 164K | ✓ |
| MiniMax | `minimax-m2-1`, `minimax-m2-5` | 196K | ✗ |
| GLM 5 | `glm-5` | 200K | ✓ |
| GPT-5.6 | `gpt-5-6-luna`, `gpt-5-6-terra`, `gpt-5-6-sol` | 372K | ✓ |
| Qwen3 Coder | `qwen3-coder-next` | 256K | ✓ |
| Auto | `auto` | 1M | ✓ |

All listed models are free to use through Kiro.

## Usage

Once logged in, select any Kiro model in pi:

```text
/model claude-sonnet-4-6
```

Or let Kiro pick automatically:

```text
/model auto
```

Reasoning follows pi's selected thinking level. GPT-5.6 supports `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`; `minimal` maps to the model's `low` effort, matching pi's native OpenAI Codex provider. When reasoning is `off`, the provider does not inject Kiro thinking instructions.

## Retry Behavior

Generic transient retries such as HTTP `429` and `5xx` are handled by `pi-coding-agent` at the session layer.

This provider only keeps local recovery for Kiro-specific cases:
- `403` auth races, where it can refresh credentials from `kiro-cli`
- first-token / stalled-stream recovery
- empty-stream retries
- non-retryable Kiro body markers like `MONTHLY_REQUEST_COUNT` and `INSUFFICIENT_MODEL_CAPACITY`

## Development

```bash
pnpm build       # Compile TypeScript
pnpm check       # Type check (no emit)
pnpm test        # Run the Vitest suite
pnpm test:watch  # Watch mode
```

## Architecture

The extension is organized as one feature per file:

```
src/
├── index.ts            # Extension registration
├── models.ts           # 12 model definitions + ID resolution
├── oauth.ts            # Multi-provider auth (Builder ID / Google / GitHub)
├── kiro-cli.ts         # kiro-cli credential sharing
├── transform.ts        # Message format conversion
├── history.ts          # Conversation history management
├── thinking-parser.ts  # Streaming <thinking> tag parser
├── event-parser.ts     # Kiro stream event parser
└── stream.ts           # Main streaming orchestrator
```

See [src/](src/) — each file owns one feature (extension registration, model catalog, OAuth, kiro-cli credential sharing, message transform, history management, thinking-tag parsing, event parsing, and the streaming orchestrator).

## License

MIT
