mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-14 11:12:17 +03:00
116 lines
5.6 KiB
Markdown
116 lines
5.6 KiB
Markdown
# Devin Claude Bridge Progress
|
|
|
|
Updated: 2026-07-28
|
|
|
|
## Baseline
|
|
|
|
- Fork version: `3.8.49`.
|
|
- Starting branch: `release/v3.8.49`.
|
|
- Starting commit: `ed7db3ee5f89a144b2d931d8605534522f83de30`.
|
|
- Fixed runtime artifacts: Node `26.0.0`, Claude Code `2.1.220`, Devin CLI `3000.2.17`.
|
|
- Existing `devin-cli` remains unchanged; the new path is the separate
|
|
`devin-cli-agentic` provider.
|
|
|
|
## Implemented architecture
|
|
|
|
- Claude Code runs only inside the non-root bridge container with its own empty config
|
|
volume and local OmniRoute base URL.
|
|
- `devin-cli-agentic` preserves Anthropic messages, tool schemas, `tool_use`, and
|
|
`tool_result`, then calls the official Devin CLI over ACP stdio.
|
|
- The executor starts `devin acp --agent-type summarizer`. This is the only fixed official
|
|
ACP role in the pinned CLI that has no Devin-owned tools.
|
|
- The request is framed as an execution trace. Devin can return one strict client tool
|
|
envelope; Claude Code executes that tool locally.
|
|
- Internal ACP `tool_call` events, unsupported blocks, invalid schemas, narrative actions,
|
|
timeouts, cancellation, and process failure all fail closed.
|
|
- Provider and network policy prevent combo/auto/Anthropic fallback.
|
|
|
|
## Offline proof
|
|
|
|
- Focused serializer, parser, executor, ACP lifecycle, wire-format, environment, and audit
|
|
tests pass (39/39).
|
|
- The contract suite covers Anthropic JSON/SSE, `tool_use`, `tool_result` continuation,
|
|
fragmented ACP frames, stderr, early exit, timeout, cancellation, and fail-closed provider
|
|
loss.
|
|
- The production bridge image builds with the pinned CLIs.
|
|
- Real Claude Code offline E2E loads `CLAUDE.md`, the project skill and slash command, fires
|
|
hooks, executes local tools over multiple turns, observes a failed test, repairs the file,
|
|
reruns the test, and completes.
|
|
- The isolation verifier proves non-root/read-only execution, isolated mounts and config,
|
|
blocked Anthropic/Claude access, no host credential mounts, local-only inference, and no
|
|
fallback.
|
|
|
|
Evidence is generated under `.sandbox/evidence` and ignored by Git.
|
|
|
|
## Regression status
|
|
|
|
- `typecheck:core`, focused ESLint, Prettier, shell/Node syntax, and the complete documentation
|
|
accuracy suite pass.
|
|
- The broad `npm run check` is not reported as passed: after its lint phase, the repository
|
|
test runner remained alive while an existing `ioredis` client repeatedly retried an
|
|
unavailable local Redis endpoint after `quota-redis-store.test.ts`. The bridge-focused
|
|
suites, production image build, offline E2E, isolation proof, and live gate do not use that
|
|
Redis service and all pass.
|
|
|
|
## Live Devin proof
|
|
|
|
Passed with the official in-container login and discovered model
|
|
`swe-1-7-lightning`. The terminal live run completed all three scenarios:
|
|
|
|
1. Claude Code loaded the fixture instructions, issued client-owned `Read` calls, and
|
|
returned a correct defect analysis.
|
|
2. Claude Code issued a real `Edit` changing subtraction to addition, then a client-owned
|
|
`Bash` call running `npm test`; the test reported one pass and zero failures.
|
|
3. Claude Code initialization listed `bridge-check` and `bridge-proof`, read the corrected
|
|
source and test, executed another client-owned `npm test`, and completed successfully.
|
|
|
|
The live evidence validator parses stream JSON and requires successful tool results. It does
|
|
not accept a textual claim that a tool ran. It also rejects terminal summaries that report a
|
|
blocker, incomplete work, or required next steps.
|
|
|
|
The final live gate reported:
|
|
|
|
```text
|
|
PASS: validated Claude evidence for LIVE_ANALYSIS_COMPLETE
|
|
PASS: validated Claude evidence for LIVE_FIX_COMPLETE
|
|
PASS: validated Claude evidence for BRIDGE_E2E_COMPLETE
|
|
PASS: three live Devin-backed Claude Code scenarios completed
|
|
PASS: live model swe-1-7-lightning was discovered and validated by three scenarios
|
|
```
|
|
|
|
The same gate validated the network audit: only the Devin guard path was used, no internal
|
|
Devin tool event was accepted, and the Claude egress audit remained empty.
|
|
|
|
## Investigation conclusion
|
|
|
|
The initial default-agent hypothesis failed because ACP permission modes do not turn the
|
|
default Devin agent into a raw inference backend. Even `ask` mode can emit Devin-owned
|
|
`tool_call` events. A discovered `allowed-tools: []` agent configuration was not consumed by
|
|
`devin acp` in CLI `3000.2.17`.
|
|
|
|
The working adaptation uses the official `summarizer` agent because it is structurally
|
|
no-tools. Its fixed summarization behavior can produce intermediate prose, so the bridge
|
|
frames requests as execution traces, detects future-action narration, performs at most one
|
|
strict repair, and otherwise fails. Live validation also exposed transient ACP timeouts;
|
|
the harness now spaces independent scenarios rather than weakening routing or retrying into
|
|
another provider.
|
|
|
|
## Safety record
|
|
|
|
No host Claude executable, configuration, login, OAuth token, Keychain, or Anthropic API was
|
|
used. The dedicated Docker volumes remain role-separated. No credential value is written to
|
|
the repository or evidence output.
|
|
|
|
During the early baseline, a focused test without isolated `DATA_DIR` initialized the
|
|
repository's normal OmniRoute database at `/Users/lucasisrael/.omniroute/storage.sqlite`.
|
|
It was not rolled back or touched again. Every bridge command now pins database and temporary
|
|
paths under the worktree's `.sandbox` directory.
|
|
|
|
## Remaining limits
|
|
|
|
- The no-tools backend has a summarizer system role rather than a neutral generation role.
|
|
- One client tool call per response is supported; parallel tool calls are rejected.
|
|
- ACP processes are per-turn and stateless.
|
|
- Live Devin availability can still produce explicit `502`/`504` failures.
|
|
- Images and unadvertised vision/effort/large-context capabilities remain unsupported.
|