Back to home

simbamo

dsh-session-unarchive

DeepSeek Harness 插件:查看并恢复已归档的会话(侧边栏「归档会话」入口 + session_archive 工具 + /unarchive 命令)

Stars
1
Language
JavaScript
Created
Aug 17, 2026
Updated
Aug 17, 2026

Introduction

dsh-session-unarchive

DeepSeek Harness 插件:查看并恢复已归档的会话。

原生 DSH 侧边栏只有「归档会话」、没有「取消归档」——会话一旦归档就从所有分组界面消失,且没有任何查看或恢复入口(这是 dsh-client-ui-workspace README 明确记录的已知限制)。本插件补齐这个能力:把归档的会话单独展示在一个「归档会话」入口里,可随时打开查看或恢复回原位。

功能

  1. 侧边栏「归档 (N)」入口(客户端 UI):列在侧边栏底部(设置按钮旁),点开弹出面板,列出全部已归档会话,每个可「打开」或「恢复」。
  2. session_archive 工具list / unarchive / unarchive-all(供 agent 调用)。
  3. /unarchive 命令list / restore <序号|id|关键词> / restore-all
  4. HTTP APIGET /session-unarchive/api/archivedPOST /session-unarchive/api/unarchive(供客户端 UI 调用)。

安装

本插件是 host + client 双半插件,零运行时依赖。

  1. 克隆到插件目录: git clone https://github.com/simbamo/dsh-session-unarchive.git ~/.dsh/plugins/dsh-session-unarchive
  2. 建符号链接到 profile node_modules: ln -sfn ../../../plugins/dsh-session-unarchive ~/.dsh/profiles/web/node_modules/dsh-session-unarchive
  3. ~/.dsh/profiles/web/package.json 的 dependencies 里加: "dsh-session-unarchive": "link:/Users/<你>/....../dsh-session-unarchive"
  4. ~/.dsh/profiles/web/cordis.patch.yml 里插入 loader 条目:
    - insert:
        - id: dsh-session-unarchive
          name: dsh-session-unarchive
    
  5. 重启 DSH web + 浏览器硬刷新。

装完必须重启 DSH web 才生效(agent 无法从会话内自重启 DSH web,需手动 kill $(lsof -nP -t -iTCP:3080 -sTCP:LISTEN) 后重跑 dsh web)。

使用

侧边栏 UI

重启后,侧边栏底部(设置按钮旁)会出现「归档 (N)」入口:

  • 点开 → 列出全部已归档会话(标题 + 工作目录)
  • 「打开」→ 直接打开该会话查看
  • 「恢复」→ 把会话移回它原来的工作区分组(取消归档)

命令

/unarchive list
/unarchive restore 3
/unarchive restore <id或标题关键词>
/unarchive restore-all

工具

让 agent 直接调 session_archive 工具(list / unarchive / unarchive-all)。

原理

  • 归档集合持久化在 ~/.dsh/storages/workspace.jsonglobal.archivedSessionIds(由核心 workspaceRegistry 服务维护)。
  • 原生只有 archiveSession()(写入归档集合)、没有 unarchiveSession()。本插件在 apply() 阶段给 ctx.workspaceRegistry 实例补上 unarchiveSession(sessionId),复用其自身的 enqueueOperation 串行化 + setState 持久化,与原生完全对称。
  • 客户端 UI 通过 sidebar.footer.action 槽注册(DSH 原生侧边栏没有树内分组扩展槽,只能用 footer 入口方案),数据来自 useWorkspaces(归档集合)与 useSessions(标题)。
  • 「恢复」通过 HTTP API 调 host 的 unarchiveSession,成功后 ctx.workspaces.refresh() 刷新侧边栏。

目录

lib/
  index.js   # host 端:unarchive 补丁 + 工具 + 命令 + HTTP API
  client.js  # 客户端 bundle:sidebar.footer.action 的「归档会话」面板
package.json

License

MIT