claude-code-to-dsh
August 15, 2026 · View on GitHub
把 Claude Code 的会话 JSONL(~/.claude/projects/...)提取成可续接的上下文,而不是回放事件。
设计哲学(方案 A:context import,非 session migration):
- ✅ 提取自动摘要链(
summary行,即claude --resume标题的来源)、首条真实用户消息、动过的文件(Write/Edit/Read 足迹)、会话尾部状态。 - ❌ 不做逐事件回放:工具调用本身没有续接价值,状态已经落在 git 工作树里;把 112MB 事件流塞进 DSH 事件格式只会变成一份没人读的转录,而且 DSH 内部格式(header 强校验 +
SESSION_FORMAT_VERSION门禁)在 rc 阶段随时会变。
产出两种形态:
- 续接文档(
export)—— 一份 markdown,含上下文链、文件足迹、尾部状态、未完成线索,可直接存档或作为任务简报。 - 开场上下文块(
seed)—— 一段纯文本,粘贴进新的 DSH(DeepSeek Harness)会话开头,让新会话无缝接手旧 Claude Code 会话的工作。
安装
零依赖,Python ≥ 3.10:
pip install -e . # 提供 claude-code-to-dsh 命令
# 或不安装,直接:
python -m claude_code_to_dsh list
DSH 插件(Web GUI 一键导入)
dsh-plugin/ 是一个 DeepSeek Harness 插件,把上面的能力直接搬进 DSH Web GUI。它已抽成可独立发布的包 dsh-plugin-claude-import(本目录即其工作副本;包内声明了 dsh.bundle,支持 dsh plugin --profile web add dsh-plugin-claude-import 一键安装,详见包内 README.md):
- agent 工具(host 半区):
claude_session_list—— 列出~/.claude/projects下所有会话(ID/项目/标题/时间/统计)claude_session_import—— 导入指定会话,返回 seed 开场上下文或完整 markdown 续接文档;createSession=true时在 Claude 会话所属项目目录新建 DSH 会话,并把上下文作为首条消息投递
- Web UI(client 半区):会话头部新增「Claude 导入」入口 —— 输入会话 ID(留空 = 最近一个),自动新建并切换 DSH 会话,agent 工具接管并汇报。
本地开发时直接装本目录(需要 pnpm,可用 corepack enable pnpm 启用):
cd ~/.dsh/profiles/web
pnpm add /Users/ch/code/claude-code-to-dsh/dsh-plugin
# 开发机:为插件的 peer 依赖建立软链(或把 @deepseek-ai/dsh-tools、@deepseek-ai/schemastery 装进 profile)
mkdir -p /Users/ch/code/claude-code-to-dsh/dsh-plugin/node_modules/@deepseek-ai
ln -s <dsh安装目录>/node_modules/@deepseek-ai/dsh-tools /Users/ch/code/claude-code-to-dsh/dsh-plugin/node_modules/@deepseek-ai/dsh-tools
ln -s <dsh安装目录>/node_modules/@deepseek-ai/schemastery /Users/ch/code/claude-code-to-dsh/dsh-plugin/node_modules/@deepseek-ai/schemastery
然后在 ~/.dsh/profiles/web/cordis.patch.yml 注册:
- insert:
- id: claude-import
name: 'dsh-plugin-claude-import'
重启 dsh web 生效(dsh web 无 dev watcher 时需重启进程;client 半区由 host 按需 serve,无需重建前端产物)。验证:dsh --profile web --dump-config | grep claude 应看到 claude-import。
用法
# 列出所有会话(最新在前)
claude-code-to-dsh list
# 导出某个会话的续接文档
claude-code-to-dsh export f1728cdc -o out/f1728cdc.md
claude-code-to-dsh export ~/.claude/projects/-Users-ch-code-xushang-code/f1728cdc-....jsonl
# 生成粘贴进 DSH 新会话的开场上下文块
claude-code-to-dsh seed f1728cdc
claude-code-to-dsh seed f1728cdc -o out/f1728cdc-seed.txt
# 会话根目录不在默认位置时
claude-code-to-dsh --projects-root /path/to/projects list
session 参数接受会话 ID 前缀(如 f1728cdc)或完整的 .jsonl 路径。
输出示例
export 的 markdown 长这样:
# 会话续接文档:staging-api 排障
## 会话元信息
- 项目目录:`/Users/ch/code/xushang-code`
- 时间范围:...
- 消息统计:user × 42 / assistant × 51 / tool_call × 300 / tool_error × 12
## 上下文链(自动摘要,新→旧)
1. 已定位到 ...
2. 尝试了 ...
3. 待验证 ...
## 动过的文件(Write/Edit)
- `services/agents/master-agent/...` — Write, Edit
## 会话尾部状态
最近用户消息:...
最后一条助手回复:...
## 未完成线索
...
测试
python -m unittest discover -s tests -v
后续方向
- ✅ 正式 DSH 插件化:Web GUI 一个入口完成 列表 → 挑选 → 播种 新会话(见上节
dsh-plugin/,已支持dsh plugin add安装)。 - ✅
seed直接对接 DSH 的会话创建 API:claude_session_import的createSession=true会在 Claude 会话所属项目目录新建 DSH 会话并投递上下文,不再是剪贴板粘贴。 - ✅ 插件发布:
dsh-plugin-claude-import已推送到独立仓库 github.com/changhang155/dsh-plugin-claude-import 并打上dsh-plugintopic;npm 发布待npm login后执行npm publish。
License
MIT