# dsh-session-port 把会话带进带出 DeepSeek Harness —— 将一个会话(及其引用的一切)打成单个 ZIP,然后在任意 DSH 上一键还原。 [English](README.md) ## 能做什么 把一个会话连同它引用的所有内容——日志(根会话 + 子代理)、媒体、工作区文件——导出成一个归档,再在另一台 DSH 上完整还原,并自动挂回对应工作区。 | 动作 | 说明 | | --- | --- | | **导出 Export** | 流式生成一个 ZIP:manifest → 日志 → 子代理 → 媒体 → 引用的工作区文件 | | **导入 Import** | 还原会话、媒体、工作区文件;路径重映射;自动把会话挂入工作区 | | **修复 Repair** | 对已导入会话重新挂入工作区并重建标题(修复「未分组」/ 标题缺失) | ## 安装 需要 Node.js ≥ 22.10 以及 `pnpm`(`dsh plugin` 底层用 pnpm 安装)。 ```sh # 从 GitHub 安装(默认分支,或固定某个 tag) dsh plugin --profile web add "github:seth-hg/dsh-session-port" dsh plugin --profile web add "github:seth-hg/dsh-session-port#v0.1.4" # 从本地检出目录安装 dsh plugin --profile web add /path/to/dsh-session-port ``` 重启 `dsh web`。会话头部会出现 **Export / Import** 两个按钮。 ## 用法 ### 会话头部按钮 - **Export** —— 下载 `session-port-.zip`。 - **Import** —— 选择一个 `.zip`,还原到当前会话所在的工作区(即当前会话的 header cwd)。 导入同样接受 DSH 自带的会话日志导出(头部 `/export` 下载的文件):还原根会话、子代理与媒体。该导出不含工作区文件,因此无需处理额外文件。 ### HTTP 路由(环回信任) ```sh # 导出(默认 scope=referenced,可选 workspace) curl 'http://127.0.0.1:3080/wsx/session-pack?sessionId=&scope=referenced' -o out.zip # 导入到某个工作区(路径重映射:old::new) curl -X POST 'http://127.0.0.1:3080/wsx/session-pack/import?workspace=/path/to/workspace&remap=/old::/new' \ --data-binary @out.zip # 修复已导入会话(重新挂入 + 重建标题) curl -X POST 'http://127.0.0.1:3080/wsx/session-pack/repair?sessionId=' ``` ## HTTP API | 路由 | 方法 | 作用 | | --- | --- | --- | | `/wsx/session-pack?sessionId=&scope=referenced\|workspace&level=0-9` | GET | 流式返回 ZIP 归档 | | `/wsx/session-pack/import?workspace=&remap=::` | POST | 还原归档(返回 JSON 摘要) | | `/wsx/session-pack/repair?sessionId=` | POST | 重新挂入 + 重建标题(幂等) | ## License MIT