Repository navigation
Releases: flyer103/dsh-side-chat
Release list
v0.4.1 — token-streamed replies (npm republication of 0.4.0)
Same code as 0.4.0, republished as 0.4.1.
The npm registry never released 0.4.0: the publish was accepted asynchronously (HTTP 202)
but the version never entered the packument, npm stage list exposed no stage id, and
republishing failed with 409 Cannot publish over previously staged version — the known
registry issue npm/cli#9889. A wedged version
number cannot be reused, so the identical tree ships as 0.4.1. Nothing else changed.
Highlights
- Replies stream token by token — the host half folds DSH's live assistant stream into a
per-session attempt and serves it overPOST /side-chat/api/events(SSE:hello,event,
live,status,error, 15 s ping). Committed events and agent status travel on the same
stream. - Streaming rendering — Markdown, reasoning and tool-call arguments update live through
the shell renderer'sstreamingflag; the committedassistant/messagereplaces the live
row on settlement, with a snapshot catch-up so nothing is lost. - Visibility-aware — hiding the tab aborts the stream; showing it reconnects from the
last seenseqwith a fresh live baseline. - Polling fallback — if a transport cannot stream (no readable body, JSON refusal, no
hellowithin ~2.5 s, or two failed connects), that tab falls back to
/side-chat/api/snapshotpolling, which also carries the live attempt. - Still dependency-free — no
@deepseek-ai/*imports in either half.
Install and upgrade
dsh plugin --profile desktop add @flyer103/dsh-side-chat
# or a pinned tag
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.4.1Restart DSH afterwards. Collapsing the sidebar or switching tabs pauses live updates (not the
side session); closing the tab still destroys the side session.
npm: https://www.npmjs.com/package/@flyer103/dsh-side-chat/v/0.4.1
v0.4.0 — token-streamed side-chat replies
Note: this version was never published to npm due to the registry issue
npm/cli#9889 — use
v0.4.1 instead
(@flyer103/dsh-side-chat@0.4.1). The code is identical.
Side-chat replies now stream token by token. Previously the tab showed a running
indicator and rendered an assistant message only after it committed; now text, reasoning
and tool-call arguments appear as the model produces them, and the committed message
takes over when the turn settles. No configuration change — update the plugin and
restart DSH.
Highlights
- Live event stream — the host half folds DSH's process-local assistant stream
(agent/assistant-stream) into a per-session live attempt and serves it over
POST /side-chat/api/events(SSE:hello,event,live,status,error, plus a
15 s ping comment). Committed events, agent status changes and errors travel on the same
stream, so an open tab no longer polls while it is streaming. - Streaming rendering — the live attempt renders after the committed rows as a normal
assistant row: Markdown through the shell renderer'sstreamingflag, with reasoning and
tool folds updated live. When the settlement commits, the host emitslive: nulland
forwards the committed event; the client reconciles with a one-shot snapshot catch-up so
the final message cannot be lost. - Presentation-only live state — live frames never become durable history. A revision
gap, transport error, or reconnect re-baselines fromhello/snapshot, and the committed
assistant/messagestays authoritative. The fork history and boundary message still never
leave the host floor. - Visibility-aware — hiding the tab aborts the stream; showing it reconnects from the
last seenseqwith a fresh live baseline, recovering text produced while hidden. - Polling fallback — if a transport cannot stream (no readable body, JSON refusal, no
hellowithin ~2.5 s, or two failed connects), that tab permanently falls back to the
existing/side-chat/api/snapshotpolling, which now also carries the live attempt. A tab
never runs both paths at once. - Still dependency-free — both halves import nothing from
@deepseek-ai/*; the host
uses a minimal local chunk assembler instead ofdsh-llm'sBlockAssembler.
Upgrade and install
dsh plugin --profile desktop add @flyer103/dsh-side-chat
# or a pinned tag
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.4.0Restart DSH afterwards. Collapsing the sidebar or switching tabs pauses live updates (not
the side session); closing the tab still destroys the side session.
Verification
- 80 unit tests pass (host 38, client 42; previously 61);
node --checkclean for both
halves. - Verified against DSH
0.2.1-rc.2with a real isolateddsh webprofile: the plugin
loads, all eight host routes answer (including the SSE route's JSON fallback), and the
v0.4.0 client bundle is served. - An in-process end-to-end check drives real assistant-stream/session events over a real
HTTP server and feeds the received SSE bytes through the client parser.
v0.3.2 — metadata, docs and CI hardening
Metadata, documentation and CI hardening. No runtime or API changes.
- Removed
docs/API-NOTES.md— internal DSH implementation notes no longer ship in the repository, and the three links to it are gone. - Version metadata —
dsh.plugin.jsonnow matchespackage.json(it was stuck at0.1.0); version references in both READMEs,docs/USAGE.mdanddocs/CONTRACT.mdrefreshed. - CI supply chain —
actions/checkoutandactions/setup-nodeare pinned to full commit SHAs (nowv7.0.1/v7.1.0), and the workflow declares least-privilegecontents: read. .gitignore— ignores.env*(keeping.env.example) andnpm packtarballs.
Install:
dsh plugin --profile desktop add @flyer103/dsh-side-chat
# or a pinned tag
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.3.2npm: https://www.npmjs.com/package/@flyer103/dsh-side-chat/v/0.3.2
v0.3.1 — npm distribution
Same feature set as v0.3.0 (real file edits, right-Sidebar tab, i18n). Version bumped only to recover from a staged npm publish that blocked 0.3.0.
Install from npm once published:
dsh plugin --profile desktop add @flyer103/dsh-side-chatOr from GitHub: dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.3.1.
v0.3.0 — real file edits, right-Sidebar tab, i18n
A side chat for the DeepSeek Harness Web GUI that can really modify files: it forks the
current session's context into an ephemeral conversation in the right sidebar, works with the
same agent and the same tool chain, and never writes into the main transcript.
Highlights
- Real file edits — the side conversation inherits the parent's preset, tools, skills,
cwd, model route, sandbox mode and approval policy, sowrite/edit/bashchange the
same workspace files. This is the difference from the read-only side-chat plugins. - Fork + live context — seeds the parent's completed-turn history and injects a snapshot
of what the main session is doing right now (in-flight user/assistant messages, tool calls). - Right Sidebar tab — no standalone button, no floating overlay: open the session header's
sidebar, add the Side chat (「侧边会话」) tab. Collapsing the column or switching tabs keeps
the side session; closing the tab destroys it. - Follows the UI language — every string follows the DSH locale (
zh/en; other
languages fall back to English). Host error messages stay in English as a technical detail line. - Isolated —
origin: 'subagent'without aparentSession, so the side chat never appears
in the session list or the subagent catalog. - Destroy on close — the agent is disposed and its own persisted session directory is
removed (best effort).
Install
# GitHub (default branch)
dsh plugin --profile desktop add github:flyer103/dsh-side-chat
# pinned to this release
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.3.0
# or from a local checkout
dsh plugin --profile desktop add /path/to/dsh-side-chatUse the profile you actually run (desktop for the Desktop app, web for a self-hosted web
profile). Restart DSH afterwards. No manual cordis.patch.yml edit is needed — dsh plugin add
appends the bundle to dsh.profile.bundles for you.
Compatibility
- Verified on DSH 0.2.1-rc.2 (Desktop app, Web GUI): plugin activation, all seven host
routes, the client bundle, and an end-to-end side chat that created and verified a real file. - Node.js >= 22 (the plugin itself has zero runtime dependencies).
- The package declares no
engines.dsh/ DSH peer range, so installation performs no DSH
version gate; the tested target above is the compatibility claim.
Known limitations
- Approval prompts are not rendered inside the tab: the side chat inherits the parent's policy,
and anaskpolicy would wait with no answerer in the tab. - No token-level streaming — an assistant reply appears when its message commits.
- A side chat cannot be reopened: closing the tab destroys it.
- One side-chat tab per parent session and pane.
Docs
Full changelog: this is the first release.
给 DeepSeek Harness Web GUI 用的侧边会话:从当前会话 fork 出上下文,在右侧边栏里开一个临时会话,
用同一套 agent / 工具链真实修改同一工作区的文件,且不写主会话 transcript。
- 能真改文件:继承父会话的 preset、工具、技能、
cwd、模型路由、sandbox 与审批策略;write/edit/bash的改动真实落盘。这是与只读型 side chat 插件的核心区别。 - Fork + 实时上下文:继承父会话已完成轮次,并额外注入主会话此刻的进行中活动快照。
- 右侧 Sidebar 原生 tab:没有独立按钮、没有浮层;展开侧边栏 → 添加「侧边会话」tab。收起侧栏/切 tab 只暂停轮询,关闭 tab 即销毁。
- 跟随界面语言:文案跟随 DSH 语言设置(中文/English,其它语言回退英文);host 报错原文作为等宽技术详情保留。
- 隔离:
origin: 'subagent'且无parentSession,不进会话列表、不进 subagent 目录。 - 关闭即销毁:dispose agent 并尽力删除它自己的落盘目录。
安装:dsh plugin --profile desktop add github:flyer103/dsh-side-chat(或 #v0.3.0 固定版本),重启 DSH。
在 DSH 0.2.1-rc.2 上实测:插件激活、7 条 host 路由、client bundle,以及一次端到端侧会话真实创建并校验了文件。
已知限制:审批提示不在 tab 内呈现、无 token 级流式、关闭后不可重开、每个父会话每分栏一个 tab。