[ACP] session/new never sends available_commands_update, so ACP clients show an empty command/skill palette #6322
Replies: 2 comments
|
Local patch, verified. The same fork branch now also emits
After Measured ( The skills registry is optional ( This is stacked on the |
|
Update (Paseo slash palette). Emitting Fix on the Paseo side: wait for that first
dsh ACP source for the emit + |
Uh oh!
There was an error while loading. Please reload this page.
Summary.
dsh's ACP bridge never advertises slash commands. ACP clients learn an agent's commands from asession/updatenotification carryingsessionUpdate: "available_commands_update", sent aftersession/new(and aftersession/load/session/resume).@deepseek-ai/dsh-acpdoes not send it at any point, so the command palette of every ACP client is empty for dsh. Paseo 0.8.0 showsNo commands foundwhen the user types/.Where.
packages/acp/acp/src/index.ts— the bridge's only update emitters areagent_message_chunk(≈577),agent_message_chunk/agent_thought_chunk(≈566),tool_call(≈593),tool_call_update(≈618),usage_update(≈631) andconfig_option_update(≈776).available_commands_updatedoes not appear in the package at all.session/newreturns only:Measured (dsh
0.1.5-rc.1, macOS,dsh --profile acpover stdio). A minimal ACP client sendsinitialize, thensession/new, then waits 3 s while recording everysession/update:Zero updates on the whole connection, not merely zero commands. The count does not change with a longer wait or a second
session/new, so this is not a timing race — the notification is never produced.Why the registries are unreachable from this path. The bridge's cordis context dependencies are
ctx.agents,ctx.effect,ctx.get,ctx.llm,ctx.logger,ctx.on,ctx.sessionPersistenceandctx.sessions. There is noctx.skillsand noctx.commands, so the skill and command registries that the rest of dsh populates are never consulted when a session is opened for an ACP client.Impact. Skills remain fully functional for the model in a dsh ACP session —
skill,skill-filesystemandtool-skillare mounted bydsh-base(skill-badgeis the only disabled row), roots are~/.agents/skills,~/.dsh/skillsand the project's.dsh/skills/.agents/skills, and the agent invokes them through theskilltool. What is missing is human-facing discovery: a user driving dsh from an ACP client cannot browse or invoke what is installed, and gets an empty palette with no indication that anything is wrong. This is a visible asymmetry against sibling providers in the same client — Codex surfaces its skills through theskills/listapp-server RPC and Claude through the Agent SDK, so the same UI is populated for them and empty for dsh.Request. After a session is established (
session/new,loadSession,unstable_resumeSession), emit onesession/updatewithsessionUpdate: "available_commands_update", listing the currently resolvable model- and user-invocable skills together with any other user-invocable commands, read fromctx.skills/ctx.commands. Re-emit on registry change so an already-open client picks up newly installed skills without reconnecting.All reactions