dsh-side-chat-plus
Select part of a conversation and ask about it in a right-side side chat; bring AI replies back to the main chat directly or as a summary.
Install
dsh plugin --profile web add dsh-side-chat-plus
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-side-chat — 侧边聊天 (Side chat)
Targets DSH 0.2.1-rc.1 and newer (verified against 0.2.2-alpha.3 and the floor 0.2.1-rc.1). See [compatibility changes](CHANGELOG.md).
An enhanced version of a Codex-style side chat for
DSH: a dedicated, agentic chat in a right-side
panel, scoped to the conversation it was started from and aware of its
workspace. Select part of a conversation and ask about it in the side chat; the
side chat inherits the main conversation's toolset, model, and permission
preset, and its AI replies can be brought back to the main conversation
(directly or as a summary, into the composer draft or as a collapsed context
row).
On top of the Codex-style base, it adds one extra capability: when the main
agent asks you a question dialog, you can side-chat about the question and
its options without interrupting the flow — let the AI help you think it
through first, then bring the answer back and answer the dialog.
中文文档见 [README.zh.md](./README.zh.md).
What it does
- Select text → ask in a side chat. Select any part of a message and a
floating button "Ask in side chat" appears. The selected text is carried
into the side chat automatically.
- Per-conversation isolation. Each side chat is a hidden ordinary DSH
session (meta.parentSession links it to the conversation that started it,
and the session is archived so it stays out of the main session list).
DSH 0.1.7 refuses a model step to an archived session, so the archive is
lifted for exactly as long as a side-chat turn is running and restored when
it settles. A host-created session is never accounted to a Workspace, so even
in that window it can only surface under the sidebar's Ungrouped bucket,
never under the workspace it was started from.
Every conversation gets its own side chat.
- Inherits main-conversation context. The side chat is aware of the
conversation it was started from and its working directory, and inherits the
main conversation's toolset, model, thinking effort, and permission preset by
default — so it can act on the same workspace as the main conversation.
- Model / effort / permission are adjustable. A two-level model menu
(provider → model → effort) and a permission menu are copied from the main
conversation, so each side chat can be tuned independently.
- "Look up workspace / parent when needed" switch (default off). When on,
the side chat may read files from the workspace and the parent conversation
when it needs more information.
- Normal conversation capabilities. Markdown replies, thinking/reasoning
display, image attachments (paste / drag-and-drop), send/stop controls, and
thinking-duration display — all reuse the same UI primitives as the main
conversation.
- Bring AI replies back to the main conversation. Every assistant reply in
the side chat can be brought into the current main conversation: select part
of it with the mouse, or insert the whole reply in one click. Either way you
can choose "Insert directly" (verbatim) or "Summarize & insert" (the
side chat's inherited model summarizes it first). Where it lands is
configurable: into the composer draft, or as a collapsed context row
(injected as context — not into the composer, never sent).
- Ask about the current question dialog — without interrupting the flow.
When the main conversation shows a question dialog (the agent asking you
something), the side panel automatically lists the question and each option
(no manual text selection needed). Each question has "Bring all" and each
option has "Bring", both offering to continue an existing side chat or
start a new one. The list can be collapsed / expanded, and items can
be deleted individually or all at once (deleted items stay gone).
- Deletable side chats. Each entry in the side-chat list can be deleted
individually, or all of them at once via "Delete all".
- Resolution-aware, resizable, collapsible panel. Drag to resize
(280–720 px); the width is automatically capped to keep the panel within
~40% of the window and to leave the main chat usable, re-adapts when the
window is resized (different monitor, zoom), and is remembered across
reloads. Collapse and expand; no close button.
- Language-aware. The plugin follows DSH's language setting (Chinese /
English).
Codex-style side chat, enhanced
This plugin is an enhanced version of a Codex-style side chat: a second,
agentic chat that works beside the main conversation — plus an extra capability
on top of the Codex-style base: side-chatting about the current **question
dialog** without interrupting the flow.
The Codex-style base. The side chat is a real DSH agent session, not a
scratchpad:
- It inherits the main conversation's setup — toolset, permission preset,
model / thinking effort, and working directory — so it can read and work with
the same workspace as the main conversation, subject to the permission preset
you choose for it.
- The "Look up workspace / parent when needed" switch (default off) lets it
read workspace files and the parent conversation's records when the task needs
more context.
- Model / thinking effort / permission preset are adjustable per chat, so a
hard task can be handed to a stronger model without touching the main
conversation.
- The final reply (or a summary of it) can be brought back into the main
conversation — into the composer draft or as a collapsed context row — the
Codex-style "hand the result over" without copy-pasting.
The enhancement: question-dialog side chat, no flow interruption. When the
main agent asks you something, the flow normally stops until you answer. This
plugin lets you keep moving: the side panel automatically lists the question and
every option; bring the whole question or any single option into a side chat
(new or existing), let t
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::12,最后更新 2026-11-03