Note
Grok responding on behalf of Julius.
Confirmed on current main (f8ed2a0). Clear eng bug: UI advertises Compact for ACP-registry agents that expose a compact slash command, but the adapter never opts into compaction, so the orchestrator fails the turn before session/prompt.
What main does
- UI enablement (works).
providerSupportsManualCompactionis purely slash-command based:
| 1 | // apps/web/src/components/chat/ContextWindowMeter.logic.ts |
| 2 | return provider?.snapshot.slashCommands.some((command) => command.name === "compact") ?? false; |
#16021 (merged) feeds available_commands_update into the provider snapshot’s slashCommands, so Devin (and any other registry agent that advertises compact) gets the Compact affordance.
- Dispatch (broken). Bare
/compact(no attachments) is special-cased inRunExecutionServiceand routed tosession.compactThread, notstartTurn:
| 1 | // apps/server/src/orchestration-v2/RunExecutionService.ts (~1376-1389) |
| 2 | const compact = |
| 3 | input.message.attachments.length === 0 && |
| 4 | input.message.text.trim().toLowerCase() === "/compact"; |
| 5 | const startTurn = compact |
| 6 | ? (input.session.compactThread?.(turnInput) ?? |
| 7 | Effect.fail( |
| 8 | new ProviderAdapterTurnStartError({ |
| 9 | /* ... */ |
| 10 | cause: "This provider does not support context compaction.", |
| 11 | }), |
| 12 | )) |
| 13 | : input.session.startTurn(turnInput); |
That matches the reported ProviderAdapterTurnStartError with no session/prompt.
- Adapter gap.
AcpAdapterV2only attachescompactThreadwhen the flavor setssupportsCompaction: true(and that helper just rewrites the message to/compactand callsstartTurn):
| 1 | // apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.ts (~7393-7400) |
| 2 | ...(flavor.supportsCompaction === true |
| 3 | ? { |
| 4 | compactThread: (turnInput) => |
| 5 | startTurn({ |
| 6 | ...turnInput, |
| 7 | message: { ...turnInput.message, text: "/compact" }, |
| 8 | }), |
| 9 | } |
| 10 | : {}), |
- Antigravity / Grok ACP flavors set
supportsCompaction: true(AntigravityAdapterV2.ts~225,GrokAdapterV2.ts~255). makeAcpRegistryAdapterV2never sets it — the flavor only wires driver/capabilities/Devin+Mistral exceptions/runtimeCoordinator hooks (AcpRegistryAdapterV2.ts~190-239). NosupportsCompactionsymbol in that file on main.
So any ACP-registry agent that advertises compact gets a button that cannot succeed. The attachment workaround in the report is real: non-empty attachments skips the compact special-case and goes through startTurn → session/prompt.
Related (not duplicates)
| Ref | Notes |
|---|---|
| #16021 (merged) | Added local ACP slash commands → UI enablement path. |
| #5412 (closed) | Grok /compact + compaction feedback — different flavor, already sets the flag. |
| #11276 (closed) | Devin via ACP — landed the provider, not this compaction gate. |
| #10164 / #10959 (open) | Compaction notification / Claude status UX — unrelated to registry supportsCompaction. |
Fix direction (no open fix PR found)
Agree with the reporter: set supportsCompaction: true on the acpRegistry flavor. Existing compactThread already forwards /compact via startTurn, which is what Devin expects over ACP. Optionally also gate runtime compact on the captured slashCommands for defense in depth. No open PR from stilak12 (or anyone else) targets this; issue has no comments / linked PRs yet.
Verdict: valid eng bug — ready to track / fix.