mirror of
https://github.com/exo-explore/exo.git
synced 2026-05-19 12:15:07 -04:00
## Summary Adds a new **Pi** tab to the Integrations page (`/#/integrations`) alongside the existing Claude Code, OpenCode, Codex, OpenClaw, Open WebUI, n8n, and Firefox tabs. [pi](https://pi.dev) (`@mariozechner/pi-coding-agent`) is a terminal coding agent that supports custom OpenAI-compatible providers via `~/.pi/agent/models.json`. This tab gives users a copy-pasteable config to wire pi up to their exo cluster. ## What's in the tab - **Model selector** (shown when multiple models are running) — picks the default model for the generated shell command. - **Models Config card** — generates `~/.pi/agent/models.json` registering `exo` as a custom provider: - `baseUrl` → `<apiUrl>/v1` - `api` → `openai-completions` - `apiKey` → `"exo"` (placeholder; exo ignores it) - `compat.supportsDeveloperRole: false` and `compat.supportsReasoningEffort: false`, per pi docs recommendation for local OpenAI-compatible servers - Auto-populates every running model with `id`, `contextWindow` (from `/v1/models`), and `input: ["text", "image"]` for vision-capable models - **Shell Command card** — `pi --provider exo --model <model>` for quick launch. The tab gracefully falls back to `your-model-id` when no models are running, matching the behavior of the other tabs. ## Usage 1. `npm install -g @mariozechner/pi-coding-agent` 2. Paste the generated config into `~/.pi/agent/models.json` 3. Run `pi` and pick an exo model via `/model` — or run the shell command directly ## Changes - `dashboard/src/routes/integrations/+page.svelte` — adds `"Pi"` to the `tabs` tuple, `piModel` state, `piModelsJson` + `piShellCommand` derivations, and the tab content block. Single-file, scoped change — no backend or type changes. ## Testing - `cd dashboard && npm run build` — ✅ builds cleanly - `svelte-check` on the edited file — no new errors - Manually verified the tab renders, the model selector updates the generated JSON, and the config reflects `/v1/models` capabilities (vision → `input: ["text","image"]`, `context_length` → `contextWindow`). ## Screenshots <img width="1545" height="1236" alt="pi-tab" src="https://github.com/user-attachments/assets/38aa179f-4ed9-4a1e-9783-d3baa7738263" />
7 lines
82 B
JSON
7 lines
82 B
JSON
{
|
|
"name": "exo",
|
|
"lockfileVersion": 3,
|
|
"requires": true,
|
|
"packages": {}
|
|
}
|