[ACP] session/resume restores the agent but does not replay history; loadSession is missing, so ACP clients show a blank transcript #6393
Replies: 3 comments
|
Supplementary evidence: the replay projectors already exist; the missing piece is a call site. Confirming the same gap on Windows 11 + Zed (custom ACP agent entry, Two details that may help whoever picks this up: 1. The projection layer is already implemented. In
2. The gap is the call site, not the mapping. Client side is also ready: One discrepancy worth noting: this box reports |
|
Local patch, verified against Paseo 0.8.0. CONTRIBUTING.md says this repo cannot take external PRs, so the source lives on a fork instead of a PR against
What it does (
Measured ( Paseo then paints the previous turn. Reopening a dsh ACP thread in Paseo 0.8.0 shows history instead of a blank chat. Happy to adjust the replay mapping if the team wants a different event → update table. Cherry-pick of that branch is the smallest landing. |
|
ACP work on the fork (verified locally with Paseo). Same branch as the slash-command emit: https://github.com/apple-ouyang/deepseek-harness/tree/feat/acp-session-load-replay
Paseo still needed to wait for the notification on generic ACP providers; that is a Paseo bug, not dsh:
Cherry-pick of the fork branch is still the smallest landing on this repo (CONTRIBUTING.md blocks external PRs). |
Uh oh!
There was an error while loading. Please reload this page.
Summary.
@deepseek-ai/dsh-acpadvertisessessionCapabilities.resumeand implementssession/resume, which restores the persisted Agent (JSONL) for the model. It does not advertiseloadSession, does not implementsession/load, andsession/resumereturns only{ configOptions }with zero historicalsession/updatenotifications. ACP clients that hydrate their transcript from a load-time replay (Paseo 0.8.0 is one) therefore open an existing dsh session as a blank chat, even though the session file still exists under~/.dsh.This is adjacent to #6322 (missing
available_commands_update) but a separate gap: that one is discovery; this one is transcript restore.ACP semantics. Current ACP distinguishes:
session/load— restore and replay history assession/updateso the client can render the transcript (loadSession: true).session/resume— reattach runtime state without replaying the transcript (sessionCapabilities.resume).dsh implements the second and omits the first. Clients that only paint history from the load replay therefore show nothing.
Where.
packages/acp/acp(@deepseek-ai/dsh-acp@0.1.5-rc.1):initializereturnsagentCapabilities.sessionCapabilities = { close, list, resume }and does not setloadSession: true.session/new,session/list,session/resume,session/close,session/prompt— there is nosession/loadhandler.resumeSessionrestores viactx.agents.resume({ resumeSessionId })(so the model can continue), then returns{ configOptions }. It never walks the JSONL / projection to emituser_message/agent_message_chunk/agent_thought_chunk/tool_callupdates.Measured (dsh
0.1.5-rc.1, macOS,dsh --profile acpover stdio):Paseo 0.8.0 (
packages/server/src/server/agent/providers/acp-agent.ts):streamHistory().streamHistory()is populated only on theagentCapabilities.loadSession === truepath, which callssession/loadand records replayedsession/updateevents.sessionCapabilities.resumebranch callsunstable_resumeSessionand does not sethistoryPending, so the renderer gets an empty generator.Result in the Paseo UI: reopen a dsh ACP thread → blank transcript. Sibling providers in the same app (Pi / Codex) that implement
loadSession+ replay still show history. dsh TUI /dsh webcan still open the same JSONL, so the data is not lost — only the ACP client cannot see it.Request.
loadSession: truefrominitialize.session/load: restore the persisted Agent (same as resume) and replay the stored conversation assession/updatenotifications (user/ assistant / thought / tool_call / tool_call_update) before returning, matching Gemini CLI / Goose ACP.session/resumeas a no-replay reattach, per current ACP spec.That unblocks every ACP client that hydrates from load replay (Paseo, Zed-style hosts, agent-shell) without changing TUI/web.
All reactions