fix(oc-plugin): replace Pi-direct with MACP controller bridge in runTurn
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/pr/ci Pipeline failed

This commit is contained in:
Jarvis
2026-03-30 10:33:32 -05:00
parent 5cb72e8ca6
commit a9340adad7
5 changed files with 510 additions and 149 deletions

View File

@@ -2,14 +2,15 @@
This plugin registers a new OpenClaw ACP runtime backend named `macp`.
When OpenClaw calls `sessions_spawn(runtime: "macp", agentId: "pi")`, the plugin runs a Pi agent turn in-process using the MACP Pi runner logic and streams Pi output back as ACP runtime events.
When OpenClaw calls `sessions_spawn(runtime: "macp")`, the plugin now writes the prompt to a brief file, queues a MACP controller task in `.mosaic/orchestrator/tasks.json`, triggers `mosaic-orchestrator-run --once`, polls `.mosaic/orchestrator/results/<task-id>.json`, and streams the resulting output back as ACP runtime events.
## Current behavior
- Supports `agentId: "pi"` only
- Supports ACP `mode: "oneshot"` only
- Accepts any `agentId` and maps it to the queued MACP task `runtime`
- Defaults queued tasks to `dispatch: "yolo"` and `runtime: "codex"` when no override is provided
- Rejects persistent ACP sessions
- Reuses the Pi default tools from `tools/macp/dispatcher/pi_runner.ts`
- Keeps `src/pi-bridge.ts` for future `dispatch: "pi"` support
## Install in OpenClaw
@@ -32,15 +33,29 @@ Add the plugin entry to your OpenClaw config:
"defaultModel": "openai/gpt-5-mini",
"systemPrompt": "You are Pi running via MACP.",
"timeoutMs": 300000,
"logDir": "~/.openclaw/state/macp"
"logDir": "~/.openclaw/state/macp",
"repoRoot": "~/src/mosaic-mono-v1",
"orchDir": "~/src/mosaic-mono-v1/.mosaic/orchestrator",
"defaultDispatch": "yolo",
"defaultRuntime": "codex"
}
}
]
}
```
## Runtime flow
1. OpenClaw ensures a oneshot `macp` session and preserves the requested `agentId`.
2. `runTurn` writes the turn prompt to `~/.mosaic/macp-oc/<session>-<request>.md`.
3. The plugin appends a pending MACP task to the configured orchestrator queue.
4. The plugin triggers `~/.config/mosaic/bin/mosaic-orchestrator-run --once` in the configured repo root.
5. The plugin polls for `.mosaic/orchestrator/results/<task-id>.json` and streams the result back to OpenClaw.
## Verification
```bash
pnpm exec tsc --noEmit -p plugins/macp/tsconfig.json
pnpm --filter @mosaic/oc-macp-plugin typecheck || npx tsc --noEmit -p plugins/macp/tsconfig.json
pnpm prettier --write "plugins/macp/**/*.{ts,json,md}"
pnpm format:check
```