## Summary - Add `fusion-plugin-omp-runtime` so Fusion agents can run through operator-installed **Oh My Pi (`omp`)** over the [Agent Client Protocol](https://omp.sh/docs/acp) (`omp acp`). - Wire staged/bundled install, Settings → Authentication card (enable + binary path), model discovery (`omp models` → `omp-cli/*`), and MCP eligibility for runtime id `omp`. - Forward Fusion `systemPrompt` via ACP `session/new` `_meta.systemPromptOverride`. ## How operators use it 1. Install/auth `omp` (credentials under `~/.omp`). 2. Enable **Oh My Pi — via omp ACP** in Settings → Authentication (optional binary path). 3. Set agent **Runtime Source → OMP Runtime** (`runtimeHint: "omp"`), or pick an `omp-cli/*` model when enabled. ## Known v1 gaps - No Grok-style Fusion `fn_*` loopback tool bridge yet (operator MCP is forwarded; in-process custom tools are not). - Model is fixed at spawn (`omp --model … acp`); no mid-session Fusion model switch. ## Test plan - [x] `pnpm --filter @fusion-plugin-examples/omp-runtime test` (unit + live ACP when `omp` is on PATH) - [x] Auth routes: `POST /api/auth/omp-cli`, `GET /api/providers/omp-cli/status` - [x] Engine `runtimeSupportsMcp("omp")` - [ ] Manual: enable card in dashboard, select OMP runtime on an agent, run a short chat turn <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Oh My Pi (OMP) CLI support as an ACP-backed runtime and model provider, including model discovery and probing. * Added dashboard auth/status controls to enable OMP, check readiness, and configure the local binary path (with validation). * Exposed OMP custom `fn_*` tools via an MCP loopback bridge, plus optional filesystem capabilities and stricter tool permission gating. * **Documentation** * Added/expanded OMP runtime contract and integration docs (including the ACP session/handshake flow). * **Tests** * Added Vitest coverage for settings wiring, provider status, model discovery, runtime sessions, permissions, MCP bridging, and live connectivity. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2.8 KiB
2.8 KiB
OMP ACP Runtime Contract
Date: 2026-07-11
Launch/readiness contract for fusion-plugin-omp-runtime, which drives
Oh My Pi (omp) over the
Agent Client Protocol (omp acp).
Mirrors the shape of docs/acp-contract.md and docs/grok-cli-contract.md.
Transport
- Newline-delimited JSON-RPC 2.0 over stdio via
@agentclientprotocol/sdk(ndJsonStream+ClientSideConnection), vendored under the plugin’ssrc/acp/(same client as Grok ACP — not imported from the experimentalfusion-plugin-acp-runtimepackage). - Fusion launches
ompas a subprocess with piped stdio. stderris captured for diagnostics, never parsed as protocol.
Invocation
omp acp
# optional model:
omp --model <id> acp
# equivalent mode flag:
omp --mode acp
Upstream docs: https://omp.sh/docs/acp
Binary detection / readiness
- Probe:
omp --version(exit 0 ⇒ available). - Auth is owned by the local
ompinstall under~/.omp(provider keys / OAuth). Fusion does not require a Fusion-visible API key. - ACP handshake:
initialize→authenticate(prefer methodagent) →session/new→session/promptturns.
Env isolation
Subprocess env is built from OMP_ACP_ENV_ALLOWLIST only (HOME/PATH/XDG + common
provider key names). Inherited process.env is not forwarded.
Failure surface
| Situation | Behavior |
|---|---|
| Binary missing | Probe available: false; createSession emits onText diagnostic |
| ACP handshake fail | Dead session + visible onText diagnostic (never silent empty) |
| Mid-turn error | Partial text kept; empty turn gets diagnostic |
| Dispose / no connection | Follow-up prompts re-surface connection diagnostic |
External integration evidence
- Canonical upstream repo: https://github.com/can1357/oh-my-pi
- Docs / homepage: https://omp.sh/ · https://omp.sh/docs/acp
- Release / download: https://github.com/can1357/oh-my-pi/releases · installer script / npm
@oh-my-pi/pi-coding-agent - Binary / CLI name:
omp - Checksum:
upstream-pending-verification(operator-installed)
Plugin metadata
- Plugin ID:
fusion-plugin-omp-runtime - Runtime ID:
omp - Provider ID:
omp-cli - Package:
@fusion-plugin-examples/omp-runtime - Global settings:
useOmpCli,ompCliBinaryPath - Auth routes:
POST /api/auth/omp-cli,GET /api/providers/omp-cli/status
Fusion context delivery
systemPromptis forwarded on ACPsession/newas_meta.systemPromptOverride(plus rules describing Fusion MCP tools when present).- Operator MCP servers are eligible for
session/new.mcpServers(runtimeSupportsMcp("omp")). - Fusion in-process
fn_*custom tools are bridged via loopback HTTP + stdio MCP serverfusion-custom-tools(mcp-schema-server.cjs, envFUSION_OMP_TOOL_BRIDGE_URL) — same pattern as Grok ACP.