nan1010082085 / dsh-chat-sync

Listed

DSH plugin: browse & live-sync local Claude Code / Codex CLI / Cursor Agent conversations inside the dsh web GUI

mainTool View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:nan1010082085/dsh-chat-sync

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 6e2edcdSynced Aug 18, 2026

dsh-chat-sync

DSH(DeepSeek Harness)插件:把本地 Claude Code / Codex CLI / Cursor Agent 的历史与进行中的对话同步进 DSH Web GUI,集成到侧边栏「对话同步」标签页,按来源分组浏览 + 动态同步。

功能

能力说明
三源分组侧边栏按 Claude Code / Codex CLI / Cursor Agent 三个目录分组显示,每个目录可展开/折叠
会话回放点开任意会话查看完整消息流:用户输入、助手回复(含模型名)、工具调用胶囊、工具结果、system 事件
动态同步三个数据根目录 fs.watch(递归)→ 去抖扫描 → SSE 推送到浏览器:列表自动刷新,无需手动刷新
活跃标记最近有写入的会话带绿色脉动点(「活跃」按钮可一键只看活跃会话)
隐私围栏所有 API 仅接受 loopback 请求(socket + Host + same-origin 三重校验),不向局域网暴露任何对话内容

只读设计:插件只读取本地会话文件,绝不写入 / 修改任何 Claude、Codex、Cursor 的数据。

数据源

路径标题来源
Claude Code~/.claude/projects/<项目>/<sessionId>.jsonlai-title / summary 行,回退首条真实用户消息
Codex CLI~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl~/.codex/session_index.jsonl 的 thread name,回退首条用户消息
Cursor Agent~/.cursor/projects/<项目>/agent-transcripts/<uuid>/<uuid>.jsonlCursor conversation-search.db(node:sqlite 只读,不可用时自动回退),回退首条 <user_query>

边界:Cursor 侧只收录 Agent transcriptsagent-transcripts 目录,即 Cursor Agent / 后台 Agent 会话);旧版 Composer 聊天(state.vscdb 二进制 blob)不在范围内。

工作原理

  • 服务端半lib/index.jslib/sources.js + lib/routes.js):扫描三源 jsonl,按 (mtime, size) 缓存会话元数据;GET /api/dsh-chat-sync/* 提供状态 / 列表 / 消息三个只读接口 + /events SSE 流。消息读取按字节偏移增量:会话文件是 append-only JSONL,解析结果与 next 偏移一并返回,客户端带 from=<next> 续读,只传新增消息。
  • 动态同步:三个数据根目录递归 fs.watch → 400ms 去抖重扫 → diff 出变化会话 → SSE changed 帧广播。不支持递归 watch 的平台自动退化为轮询(pollFallbackMs)。
  • 浏览器半lib/client.js,零构建手写 ModuleLoader 工厂):注册为 dsh-better-sidebar 的标签页,与文件、Git 标签并列显示。按来源分组展示会话树,点击会话查看详情。

安装

# 本地 link 安装(开发推荐)
dsh plugin --profile web add link:/Users/yangdongnan/work/dsh-plugins/packages/chat-sync

# 或从 GitHub 安装
dsh plugin --profile web add github:nan1010082085/dsh-chat-sync

# 重启 dsh web 生效

dsh plugin 会自动把声明了 dsh.bundle 的包追加进 profile 的 dsh.profile.bundles

依赖

需要安装 dsh-better-sidebar 插件(提供侧边栏标签页系统)。

配置

默认零配置可用。需要调整时,在 profile 的 cordis.patch.yml~/.dsh/profiles/web/cordis.patch.yml)按 id 覆盖:

- id: chat-sync
  config:
    enabled: true
    watch: true            # 动态同步(文件监听 + SSE 推送)
    pollFallbackMs: 5000   # 递归 watch 不可用时的轮询间隔(0 关闭)
    debounceMs: 400        # 文件事件去抖窗口
    maxSessions: 500       # 会话列表上限
    maxMessageChars: 8000  # 单条消息截断长度
    recentLiveMs: 180000   # 「活跃」判定窗口
    titleHeadBytes: 65536  # 新文件标题提取读取的头部字节数

API(均 loopback-only)

路由说明
GET /api/dsh-chat-sync/status各源可用性 / 会话数 / 同步模式
GET /api/dsh-chat-sync/sessions?source=&q=&limit=&offset=&live=1过滤后的会话列表
GET /api/dsh-chat-sync/session?id=<source:uuid>&from=<next>消息流(增量)
GET /api/dsh-chat-sync/eventsSSE:hello / changed

开发与测试

node --check lib/index.js lib/sources.js lib/routes.js lib/client.js
node tests/smoke.mjs         # 端到端:假 home + 真 HTTP + SSE 动态推送
node tests/client-load.mjs   # 浏览器半:ModuleLoader 契约 + apply 冒烟

License

MIT

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected

Repository information

Language
JavaScript
License
MIT
Latest release
v0.1.0
Last updated
Aug 18, 2026, 3:41 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.