Skip to content

Releases: flyer103/dsh-side-chat

v0.4.1 — token-streamed replies (npm republication of 0.4.0)

Choose a tag to compare

@flyer103 flyer103 released this 20 Oct 15:40

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 over POST /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's streaming flag; the committed assistant/message replaces 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 seen seq with a fresh live baseline.
  • Polling fallback — if a transport cannot stream (no readable body, JSON refusal, no
    hello within ~2.5 s, or two failed connects), that tab falls back to
    /side-chat/api/snapshot polling, 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.1

Restart 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

Choose a tag to compare

@flyer103 flyer103 released this 20 Oct 15:26

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's streaming flag, with reasoning and
    tool folds updated live. When the settlement commits, the host emits live: null and
    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 from hello/snapshot, and the committed
    assistant/message stays 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 seen seq with a fresh live baseline, recovering text produced while hidden.
  • Polling fallback — if a transport cannot stream (no readable body, JSON refusal, no
    hello within ~2.5 s, or two failed connects), that tab permanently falls back to the
    existing /side-chat/api/snapshot polling, 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 of dsh-llm's BlockAssembler.

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.0

Restart 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 --check clean for both
    halves.
  • Verified against DSH 0.2.1-rc.2 with a real isolated dsh web profile: 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

Choose a tag to compare

@flyer103 flyer103 released this 18 Oct 15:11

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.json now matches package.json (it was stuck at 0.1.0); version references in both READMEs, docs/USAGE.md and docs/CONTRACT.md refreshed.
  • CI supply chain — actions/checkout and actions/setup-node are pinned to full commit SHAs (now v7.0.1 / v7.1.0), and the workflow declares least-privilege contents: read.
  • .gitignore — ignores .env* (keeping .env.example) and npm pack tarballs.

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.2

npm: https://www.npmjs.com/package/@flyer103/dsh-side-chat/v/0.3.2

v0.3.1 — npm distribution

Choose a tag to compare

@flyer103 flyer103 released this 18 Oct 14:31

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-chat

Or 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

Choose a tag to compare

@flyer103 flyer103 released this 18 Oct 14:19

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, so write / edit / bash change 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 a parentSession, 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-chat

Use 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 an ask policy 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。