cdsr: wire the omp harness into the IDE as a native agent panel over ACP
Pin formulahendry.acp-client 0.2.0 (Open VSX, MIT, sha256-verified) and point acp.agents at `omp acp`. OMP already ships an ACP v1 server, so no custom extension and no marketplace exception were needed. Verified in the running IDE: status bar `ACP: Oh My Pi`, session/list returns real prior OMP sessions for the open folder, and a full prompt turn streams text plus tool-call and plan cards. Credentials never move: OMP authenticates from ~/.omp via its `agent` auth method and the extension is given no key.
This commit is contained in:
@@ -97,6 +97,15 @@
|
|||||||
"reason": "Current Container Tools extension; its README states it replaces the older Docker extension functionality.",
|
"reason": "Current Container Tools extension; its README states it replaces the older Docker extension functionality.",
|
||||||
"mode": "baseline"
|
"mode": "baseline"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "formulahendry.acp-client",
|
||||||
|
"version": "0.2.0",
|
||||||
|
"platform": "universal",
|
||||||
|
"vsix_url": "https://open-vsx.org/api/formulahendry/acp-client/0.2.0/file/formulahendry.acp-client-0.2.0.vsix",
|
||||||
|
"sha256_url": "https://open-vsx.org/api/formulahendry/acp-client/0.2.0/file/formulahendry.acp-client-0.2.0.sha256",
|
||||||
|
"reason": "Generic Agent Client Protocol client. Drives the local omp harness via `omp acp` (ACP wire version 1), giving the IDE a native agent panel without a custom extension. MIT, engines.vscode ^1.85.0, no extensionKind so it loads in the remote extension host where child_process exists.",
|
||||||
|
"mode": "baseline"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "sourcegraph.cody-ai",
|
"id": "sourcegraph.cody-ai",
|
||||||
"version": "1.155.0",
|
"version": "1.155.0",
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ Browser IDE for user `loca`, reverse-proxied by Nginx, gated by Authelia one-fac
|
|||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `Continue.continue` | 2.1.0 | open-source AI agent, chat, edit, autocomplete |
|
| `Continue.continue` | 2.1.0 | open-source AI agent, chat, edit, autocomplete |
|
||||||
| `Anthropic.claude-code` | 2.1.235 | first-party Claude Code IDE integration |
|
| `Anthropic.claude-code` | 2.1.235 | first-party Claude Code IDE integration |
|
||||||
|
| `formulahendry.acp-client` | 0.2.0 | ACP client; runs the local `omp` harness as a native agent panel |
|
||||||
| `ms-python.python` | 2026.4.0 | Python language support |
|
| `ms-python.python` | 2026.4.0 | Python language support |
|
||||||
| `ms-python.debugpy` | 2026.6.0 | Python debugger, pinned explicitly |
|
| `ms-python.debugpy` | 2026.6.0 | Python debugger, pinned explicitly |
|
||||||
| `ms-toolsai.jupyter` | 2025.9.1 | notebooks in the browser IDE |
|
| `ms-toolsai.jupyter` | 2025.9.1 | notebooks in the browser IDE |
|
||||||
@@ -45,6 +46,7 @@ Browser IDE for user `loca`, reverse-proxied by Nginx, gated by Authelia one-fac
|
|||||||
- audit against the lock file: `./scripts/list-extension-versions.sh`
|
- audit against the lock file: `./scripts/list-extension-versions.sh`
|
||||||
- optional, enterprise-only: `sourcegraph.cody-ai` 1.155.0 via `./scripts/install-extensions.sh --include-optional`
|
- optional, enterprise-only: `sourcegraph.cody-ai` 1.155.0 via `./scripts/install-extensions.sh --include-optional`
|
||||||
- AI models come from the host LiteLLM gateway (`127.0.0.1:52001`), not a cloud sign-in; use the `free` model — see [[operations/extensions]]
|
- AI models come from the host LiteLLM gateway (`127.0.0.1:52001`), not a cloud sign-in; use the `free` model — see [[operations/extensions]]
|
||||||
|
- the `omp` harness is available as a native agent panel: activity bar → ACP Client → `ACP: New Conversation` → `Oh My Pi`, backed by `omp acp` over stdio — see [[operations/extensions]]
|
||||||
- a fresh browser profile starts in Restricted Mode and hides every third-party extension until the folder is trusted — see [[operations/extensions]]
|
- a fresh browser profile starts in Restricted Mode and hides every third-party extension until the folder is trusted — see [[operations/extensions]]
|
||||||
- details: [[operations/extensions]]
|
- details: [[operations/extensions]]
|
||||||
|
|
||||||
|
|||||||
@@ -7,18 +7,46 @@ reviewed: 2026-08-20
|
|||||||
|
|
||||||
# 🧩 Extension baseline
|
# 🧩 Extension baseline
|
||||||
|
|
||||||
## Pinned baseline (six entries)
|
## Pinned baseline (seven entries)
|
||||||
|
|
||||||
| id | version | platform | reason |
|
| id | version | platform | reason |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `Continue.continue` | 2.1.0 | linux-x64 | Primary open-source AI agent/chat/edit/autocomplete extension. |
|
| `Continue.continue` | 2.1.0 | linux-x64 | Primary open-source AI agent/chat/edit/autocomplete extension. |
|
||||||
| `Anthropic.claude-code` | 2.1.235 | linux-x64 | First-party Claude Code IDE integration. |
|
| `Anthropic.claude-code` | 2.1.235 | linux-x64 | First-party Claude Code IDE integration. |
|
||||||
|
| `formulahendry.acp-client` | 0.2.0 | universal | Generic Agent Client Protocol client; drives the local `omp` harness as a native agent panel. |
|
||||||
| `ms-python.python` | 2026.4.0 | universal | Python language support expected in this environment. |
|
| `ms-python.python` | 2026.4.0 | universal | Python language support expected in this environment. |
|
||||||
| `ms-python.debugpy` | 2026.6.0 | linux-x64 | Explicit debugger dependency instead of relying on later bootstrap by the Python extension. |
|
| `ms-python.debugpy` | 2026.6.0 | linux-x64 | Explicit debugger dependency instead of relying on later bootstrap by the Python extension. |
|
||||||
| `ms-toolsai.jupyter` | 2025.9.1 | universal | Notebook workflow support in the browser IDE. |
|
| `ms-toolsai.jupyter` | 2025.9.1 | universal | Notebook workflow support in the browser IDE. |
|
||||||
| `ms-azuretools.vscode-containers` | 2.4.5 | universal | Current Container Tools extension; its README states it replaces the older Docker extension functionality. |
|
| `ms-azuretools.vscode-containers` | 2.4.5 | universal | Current Container Tools extension; its README states it replaces the older Docker extension functionality. |
|
||||||
|
|
||||||
All six come from `config/extensions.lock.json` (registry: `https://open-vsx.org`).
|
All seven come from `config/extensions.lock.json` (registry: `https://open-vsx.org`).
|
||||||
|
|
||||||
|
## OMP as a native agent panel (ACP)
|
||||||
|
|
||||||
|
The `omp` harness is wired into the IDE over the Agent Client Protocol. No custom extension and no marketplace exception were needed: OMP already ships an ACP server and Open VSX already ships a generic ACP client.
|
||||||
|
|
||||||
|
- agent side: `omp acp` runs Oh My Pi as an ACP server over stdio. Verified against the installed binary — `initialize` returns `protocolVersion 1` and `agentInfo {name: oh-my-pi, version: 17.4.0}`, and a full `session/new` + `session/prompt` turn streams `tool_call`, `plan`, `agent_message_chunk`, `usage_update`, `stopReason: end_turn`
|
||||||
|
- client side: `formulahendry.acp-client` 0.2.0, MIT, `engines.vscode ^1.85.0`. It declares no `extensionKind`, so it loads in the remote extension host where Node and `child_process` exist — a requirement, since the client spawns the agent as a child process
|
||||||
|
- protocol versions differ but interoperate: the client bundles ACP SDK `^0.21.1`, OMP pins `0.25.0`, both negotiate wire version 1
|
||||||
|
- configuration lives in `data/user/User/settings.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"acp.agents": {
|
||||||
|
"Oh My Pi": { "command": "/home/loca/.local/bin/omp", "args": ["acp"], "env": {} }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
VS Code merges this object with the extension's own defaults, so the agent tree shows the shipped entries (Copilot, Claude Code, Gemini, Qwen and others, all of which would `npx`-fetch at runtime) plus `Oh My Pi`. Only `Oh My Pi` is a pinned local binary; treat the rest as unpinned and unsupported here.
|
||||||
|
|
||||||
|
Usage: activity bar → ACP Client → `ACP: New Conversation` → pick `Oh My Pi`. The status bar shows `ACP: Oh My Pi` when connected. The chat panel renders OMP's own session config as native controls (mode Default/Plan, model, thinking level), and the agents tree lists real prior OMP sessions for the open folder, because the client calls `session/list` and OMP answers from `~/.omp/agent/sessions`.
|
||||||
|
|
||||||
|
Operational notes:
|
||||||
|
|
||||||
|
- credentials never move. OMP authenticates itself from `~/.omp` via its `agent` auth method; the extension is not given any key. This is why the ACP route was chosen over exposing OMP on a loopback port
|
||||||
|
- the IDE runs as `loca`, which holds `NOPASSWD: ALL`. An OMP session in this panel is therefore root-equivalent, gated only by Authelia one_factor on `cdsr.loca.zone`. Leave the client's permission prompts enabled; its file and terminal handlers are not workspace-confined
|
||||||
|
- OMP's own `tools.approvalMode` default is permissive and subagents are unconditionally so. Set it explicitly rather than inheriting it
|
||||||
|
- one `omp acp` process serves multiple sessions, but stdio carries a single client, so the IDE panel and a CLI `omp` are separate processes. They share `~/.omp`: session transcripts are per-directory with unique filenames and atomic rewrites, so that is safe, but memory and config are shared context, not isolation
|
||||||
|
- OMP cannot be reached over MCP. It implements an MCP client only, so Continue's `mcpServers` cannot point at it; ACP is the only protocol bridge
|
||||||
|
|
||||||
## Lock file mechanics
|
## Lock file mechanics
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Operations reference for the single-user code-server deployment at `cdsr.loca.zo
|
|||||||
|
|
||||||
- [[operations/install-upgrade]] — install or upgrade the upstream Debian package, service lifecycle, extension reinstall after Code version bumps, fallback path
|
- [[operations/install-upgrade]] — install or upgrade the upstream Debian package, service lifecycle, extension reinstall after Code version bumps, fallback path
|
||||||
- [[operations/auth-tls]] — Authelia access rule, nginx four-block topology, shared cert lineage, proof commands, rollback/debug order
|
- [[operations/auth-tls]] — Authelia access rule, nginx four-block topology, shared cert lineage, proof commands, rollback/debug order
|
||||||
- [[operations/extensions]] — pinned baseline table, optional Cody, explicit exclusions, first-run sign-in notes, install/audit scripts
|
- [[operations/extensions]] — pinned baseline table, the OMP-over-ACP agent panel, LiteLLM model wiring, optional Cody, explicit exclusions, install/audit scripts
|
||||||
- [[operations/verification]] — every smoke check with expected outputs: systemctl, loopback healthz, auth redirect, wiki public, Authelia compose, extension audit, browser flows, dev proxy, wiki build
|
- [[operations/verification]] — every smoke check with expected outputs: systemctl, loopback healthz, auth redirect, wiki public, Authelia compose, extension audit, browser flows, dev proxy, wiki build
|
||||||
|
|
||||||
## 🚨 Triage order when something is broken
|
## 🚨 Triage order when something is broken
|
||||||
|
|||||||
@@ -76,8 +76,23 @@ Exit code: `0`
|
|||||||
1. Open `https://cdsr.loca.zone` in a browser.
|
1. Open `https://cdsr.loca.zone` in a browser.
|
||||||
2. Complete Authelia one-factor login at `auth.loca.zone`.
|
2. Complete Authelia one-factor login at `auth.loca.zone`.
|
||||||
3. Confirm code-server editor shell loads (activity bar, file explorer, terminals).
|
3. Confirm code-server editor shell loads (activity bar, file explorer, terminals).
|
||||||
4. Open Extensions view (Ctrl+Shift+X): verify `Continue` and `Claude Code` are installed and enabled.
|
4. Open Extensions view (Ctrl+Shift+X): verify `Continue`, `Claude Code` and `ACP Client` are installed and enabled.
|
||||||
5. Open integrated terminal (Ctrl+`): run `whoami` -> output `loca`.
|
5. Open integrated terminal (Ctrl+`): run `whoami` -> output `loca`.
|
||||||
|
6. If the activity bar shows no third-party icons, the folder is in Restricted Mode: Command Palette → `Workspaces: Manage Workspace Trust` → Trust. Workspace Trust silently disables every third-party extension, which looks exactly like a failed install.
|
||||||
|
|
||||||
|
## 7b. OMP agent panel over ACP (manual)
|
||||||
|
|
||||||
|
Proves the `omp` harness is reachable as a native agent, end to end.
|
||||||
|
|
||||||
|
1. Activity bar → `ACP Client`. The `AGENTS` tree lists `Oh My Pi` alongside the extension's shipped defaults; only `Oh My Pi` is a pinned local binary.
|
||||||
|
2. Command Palette → `ACP: New Conversation` → pick `Oh My Pi`.
|
||||||
|
3. Status bar reads `ACP: Oh My Pi`. The chat header shows the open folder and OMP's own session controls: mode (Default/Plan), model, thinking level.
|
||||||
|
4. Send `Reply with exactly: IDE-ACP-OK`. Expect the reply text plus rendered tool-call and plan cards.
|
||||||
|
5. Agent-side check without the IDE, if the panel misbehaves:
|
||||||
|
```bash
|
||||||
|
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":true,"writeTextFile":true}}}}' | omp acp
|
||||||
|
```
|
||||||
|
Expect one JSON line containing `"protocolVersion":1` and `"agentInfo":{"name":"oh-my-pi"`. If that works and the panel does not, the fault is the extension or `acp.agents`, not OMP.
|
||||||
|
|
||||||
## 8. dev-routing smoke (manual)
|
## 8. dev-routing smoke (manual)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user