liangmianya/dsh-synapse
liangmianya/dsh-synapseDeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
为 DSH 原生会话加入完全只读、可脚本控制的历史回放,支持模拟用户输入、正放与倒放、逐事件移动、变速、空闲间隔压缩,以及按事件、轮次或记录时间直接跳转。
English | 简体中文
Read-only, scriptable session playback for the DeepSeek Harness WebUI.
https://github.com/user-attachments/assets/3c9dfdcf-a454-4750-9edf-76771ed5a9a6
The demo shows Bites the DSH together with dsh-turn-fold.
The plugin turns the native conversation into a replay view without opening a separate panel. A single native session-header control enters replay. While replay is active, the conversation is fully read-only: the native composer and session-changing interactions are blocked, while UI and scripts may move time without mutating the source session.
ctx.sessionPlayback for time-only scripting.ChatView; the source session and live head continue independently.playbackClock: { kind: 'historical', time: cursorTime } so projection consumers never treat an open historical turn as live wall-clock work.The development baseline is DSH 0.1.5-rc.2; 0.1.6-alpha.2 and 0.1.7-rc.2 are also checked. This migration requires the new Conversation/Chat services. Harmony selector drift fails the automated test instead of silently changing the wrong component.
DSH 0.2.0-rc.2 is explicitly supported after checking its actual UI types, bundle selectors, browser startup, and combined loading with Turn Fold. The native assembler is resolved after Conversation activation, and decorators observe the shared playback controller even before slot hooks register. Replay behavior is covered by the bundle integration test; a real historical-session browser pass and macOS/Linux browser checks remain separate validation steps.
dsh plugin --profile web add @ch4acko3/bites-the-dsh
dsh harmony status --profile web
All four Bites the DSH patches should report bound. Reload the WebUI, open a
session, then use Replay session in the native session header.
Other DSH plugins can use the same per-session clock through the provided Cordis service:
const playback = ctx.sessionPlayback
playback.enter(sessionId)
playback.seekTime(sessionId, Date.parse('2026-08-20T12:00:00Z'))
playback.play(sessionId, 1)
playback.pause(sessionId)
playback.exit(sessionId)
Time values such as the argument to seekTime use Unix epoch milliseconds,
matching JavaScript Date values and recorded event timestamps.
The service also supports event and turn seeking, reverse playback, rate and idle-gap settings, subscriptions, and position reads. It deliberately exposes no operation that mutates the source session.
Requires Node.js ^22.22.3 || >=24.11.1 and pnpm 11.
pnpm install
pnpm check
Every push to main and every pull request runs pnpm check and verifies the
npm package contents. Pushing a v<package.json version> tag runs the same
checks, creates the matching GitHub Release, and publishes the public package
to npm through Trusted Publishing (OIDC), with automatic provenance and no npm
token stored in GitHub.
MIT
Compatibility check (2026-09-28): 26 unit tests match the DSH 0.1.7-rc.2 compiled Conversation/Chat bundles, including all four Harmony selectors. Historical chat hooks read the projected node store; releasing a Session removes subscriptions, pending history state and read-only mode. Browser interaction and macOS/Linux validation remain separate from these Windows checks.