DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

youridol /

youridol/dsh-sess

Verified

DeepSeek Harness 会话管理全局插件:侧边栏会话删除、工作区归档管理(重命名/恢复/删除)。原生 UI,profile 挂载,不改 DSH 源码。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@fc739a5a

dsh-sess

DeepSeek Harness(DSH)会话管理全局插件 —— 原生 Web UI、通过 profile 挂载、零源码修改。

dsh-sess is a global session-management plugin for DeepSeek Harness (DSH).
It adds a "Delete session" entry to every sidebar session ellipsis menu and an
"Archive manager" to every workspace ellipsis menu (rename / restore / delete
archived sessions). Native UI, mounted via the web profile, no DSH source
changes. Topic: dsh-plugin.

功能

  1. 侧边栏会话条目 · 删除会话 每条会话条目的省略号菜单(原有:重命名 / 复制 / 归档)新增「删除会话」, 点击后弹出原生确认框,确认后删除该会话的完整日志、工作区记账与归档记录。
  2. 工作区条目 · 归档管理 每个工作区(项目)条目的省略号菜单新增「归档管理」,打开原生归档管理器:
    • 列出全部已归档会话(标题 / 所属工作区 / 相对时间);
    • 重命名 已归档会话(复用 DSH 原生重命名能力);
    • 恢复 已归档会话(还原到正常工作区列表,保留原位置);
    • 删除 已归档会话(与侧边栏删除同一套确认与删除流程)。

说明:DSH 原生只有「归档」(加入归档集合),没有恢复接口。dsh-sess 的恢复通过 storage-domain 直接更新 workspace 域全局状态实现,浏览器端由 host/archived-sessions-changed 帧即时刷新。

兼容性

项 值
DSH 版本 0.1.1-rc.1(浏览器端静态模块表含 ui-slots / ui-primitives 的版本)
平台 Windows / macOS / Linux(纯 Node,无原生依赖)
挂载方式 dsh.profile.bundles 或 --patch overlay,均不改 DSH 源码

安装(挂载到 web profile)

方式 A:profile bundle(推荐,长期生效)

  1. 从 GitHub 仓库安装到 profile(npm 会自动 clone 并执行 prepare 构建 lib/ 产物):

    cd ~/.dsh/profiles/web
    npm install github:youridol/dsh-sess
    # 或指定完整地址:
    # npm install https://github.com/youridol/dsh-sess.git
    

    pnpm 布局的 profile 使用 pnpm add github:youridol/dsh-sess。 已发布到 npm 后可直接 npm install dsh-sess。

  2. 在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 追加 "dsh-sess":

    {
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "dsh-sess"
          ]
        }
      }
    }
    
  3. 重启 dsh web。

方式 B:--patch overlay(临时验证)

dsh --profile web --patch ./path/to/dsh-sess/testing/overlay.yml

(需保证 dsh-sess 可从 profile 目录解析:npm install github:youridol/dsh-sess 后即位于 profile 的 node_modules。)

开发

npm install            # 安装 devDependencies(esbuild/typescript/vitest)
npm run typecheck      # 客户端 + 宿主端双类型环境检查
npm run test           # 菜单注入器 jsdom 集成测试
npm run build          # 产出 lib/index.js(宿主)+ lib/client.js(浏览器)+ lib/types

客户端与宿主端类型环境不同(DSH 的 Context 合并在两侧不同),因此类型检查 拆成 tsconfig.client.json 与 tsconfig.host.json 两个项目。

工作原理(架构)

  • 宿主端(lib/index.js):在共享 /api 通道上拦截 dshSess.* 端点 (ctx.connection.rpc.intercept,authority: 'loopback' 沿用 DSH 信任围栏)。
    • dshSess.deleteSession:删除日志目录(含压缩产物)→ 解除工作区记账 → 清理归档集合;挂载中的会话拒绝删除(返回 agent-busy)。
    • dshSess.restoreSession:把会话 id 移出归档集合(domain.global.set)。
  • 浏览器端(lib/client.js):__ModuleLoader__ 闭包工厂产物,平台模块外置。
    • 捕获阶段监听行内按钮点击 + MutationObserver 观察菜单 portal,向会话行/工作区行 的省略号菜单末尾注入条目(克隆原生菜单条目类名,观感一致);
    • 会话行身份经 React fiber 链解析(props.node.id)并与会话列表快照交叉校验, 杜绝误删;
    • 删除确认框与归档管理器复用 ui-primitives 的 Modal/Button/Input 原生组件。

已知边界(诚实说明)

  • 挂载中的会话无法删除。DSH 的会话由创建方 fiber 持有(AgentHandle.dispose 是仅限创建者的能力),第三方插件没有公开途径安全拆除挂载中的会话;直接删除日志 会在下次落盘时重建(复活)。因此对挂载中的会话返回 agent-busy 并给出提示, 重启 dsh 后(所有会话变为冷会话)即可删除。
  • 归档集合的恢复/清理与 workspaceRegistry 内存缓存存在短暂不一致(直接写域 存储所致,重启后自然一致)。浏览器端由 host/archived-sessions-changed 帧驱动 正确集合;且归档列表总是与会话列表联表展示,被删会话的残留 id 不会显示。
  • 错误码复用浏览器端 rpcErrorSchema 封闭联合(session-not-found / agent-busy / internal),自定义错误码会被客户端校验拒绝——语义经 message 表达。

开源

本仓库以 dsh-plugin 为 GitHub 话题,便于 DSH 插件生态检索。

  • 许可证:MIT
  • 话题:dsh-plugin deepseek-harness cordis

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit fc739a5a0427

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout