Replies: 2 comments
|
Update: a working prototype exists. Since
The bridge is 1822 lines; the change is ~142 (~75 in Repo (MIT, Verified on Two observations worth passing on regardless of what you decide for this feature:
If the team would rather own this, the change is confined to two call sites plus one mapping module and I am glad to hand over the exact diff. Otherwise this community bridge is the fallback — with the caveat that it must be rebased against |
|
Added the client-side evidence, since "does it actually fix the client?" is the question this needs to answer. End to end through a real client (Paseo 0.7.2 daemon,
The client needed no change: its ACP adapter takes the Also hardened the prototype for the version skew this thread is partly about. The bridge now refuses to mount when the harness does not offer the calls it needs, and says why:
None of this changes the ask: a vendored bridge has to be rebased on every |
Uh oh!
There was an error while loading. Please reload this page.
Summary
dsh-acpis advertised as an automation-only surface, and its README listssession/loadamong the unsupported calls. Becausesession/resumealso restores a session without replaying its updates, a standard ACP client has no way to rebuild a session transcript after its own process restarts — even though the harness keeps that transcript on disk. The model keeps its full context; only the client's view of the conversation disappears.This post asks whether transcript replay can be supported, or whether there is a supported way for a client to rebuild a transcript that I have missed.
What a client expects
ACP's
session/loadis the standard way for a client to reopen a persisted session: the agent replays the session assession/updatenotifications before returning the session state, so the client can render the history. Clients that resume a session and only get future updates end up showing an empty conversation next to an agent that still remembers everything.What I observe (dsh 0.1.5-rc.1, same on 0.1.2-rc.1)
initializeadvertises list/resume/close, and noloadSession:{ "protocolVersion": 1, "agentInfo": { "name": "deepseek-harness-acp", "version": "0.0.1" }, "agentCapabilities": { "mcpCapabilities": { "http": true }, "promptCapabilities": { "image": false, "audio": false, "embeddedContext": false }, "sessionCapabilities": { "close": {}, "list": {}, "resume": {} } }, "authMethods": [] }A fresh process that calls
session/resumewith a session id from a previous run receives the session state and then nosession/updatetraffic for the earlier turns. The turns are on disk — in my case a session log of 856 KB / 1404 records (~/.dsh/sessions/<escaped-cwd>/<session-id>/session.v3.jsonl.zstd) — and a prompt sent to the resumed session clearly has the full prior context. The client just cannot see it.Reproduction:
dsh --profile acp(stdio),initialize→ note the missingloadSession.session/new, send one or two prompts, observesession/update.initialize, thensession/resumewith the same session id.Impact
I am the author of a Paseo provider integration (getpaseo/paseo) that drives
dsh --profile acp. Paseo's design states that the provider transcript is the durable authority and a resumed agent rebuilds its timeline from it (that is how its Claude/Codex/OpenCode/Pi adapters work), and its ACP adapter replays history only when the agent advertisesloadSession:For DeepSeek Harness this takes the second branch, so after a client restart the conversation renders empty while the agent still answers with full knowledge of it. That is a confusing state for users, and it is the only provider I integrate where a long-lived session becomes invisible this way. Any editor-style ACP client that offers session history would hit the same wall.
Ask
Either of these would resolve it, and I am happy to test a build:
session/loadper the ACP spec (replay the persisted turns assession/update, then return the session state). This is the interoperable option and requires no client-side knowledge of your log format.session/resumebehind an opt-in flag (for example a_metaor parameter the client sets), keeping the default behavior automation-friendly.~/.dsh/sessions/**/session.v3.jsonl.zstdfrom the client works, but it couples clients to an internal, versioned file format (v3 today), which I would rather not ship.Context for why I am not asking for anything else on this surface: modes, commands, plans, and terminals being absent is fine for automation — resume-without-history is the one that makes a persistent session unusable from the client that created it.
All reactions