DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

jiayaoting /

jiayaoting/dsh-archive-confirm

Verified

给 DSH Web 的「归档会话」加一道二次确认的客户端插件(AI 生成,可自由使用,再分发需注明来源)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@ceb21d67

dsh-archive-confirm

给 DSH Web 的「归档会话」(Archive session)补一道二次确认,挡住侧栏行尾图标、右键菜单、快捷键这几处最常见的误触。

关于这个项目:本插件由 AI 生成——需求、方案与验收由使用者提出并把关,实现在 AI 协作下完成。你可以随意使用、修改、再分发,唯一的要求是注明来源(见文末使用与署名)。


为什么需要它

DSH 官方对「归档会话」的处理是:

  • 静止的会话:点了就归档,没有任何确认;
  • 只有还有工作在跑的会话,才会被 Host 拒绝,并弹出「停止并归档」的确认框(按族列出进行中的回合、子代理、后台任务、定时提醒)。

也就是说,鼠标扫过会话行尾那两个小图标(置顶 / 归档)时手一抖,会话就当场从侧栏消失了。归档本身不删数据、还能在「已归档会话」里恢复,但误触之后的寻找与恢复成本并不低。

本插件只补这一件事:归档之前问一句。

它做什么

  • 拦截 uiWorkspace.archiveSession(sessionId),先弹确认框,点「归档」才真正归档,点「取消」什么都不会发生。
  • 官方侧栏的行尾图标、右键菜单项、Mod+Shift+A 快捷键都汇到这一个服务方法,所以一处拦截即可覆盖全部入口;第三方侧栏插件只要仍走同一方法也自动生效。
  • 带 stopActivity: true 的调用直接透传——那是官方「停止并归档」对话框确认后的第二次调用,不会连环弹框。
  • 归档成功后仍由官方给出 toast 与「撤销」,本插件不介入归档结果,也不改变任何归档语义。

它不做什么

  • 不改 DSH 本体(resources/app.asar 一个字节都不动),不碰会话数据、不碰归档集合。
  • 不拦 dsh-tree-view 的「收进树 / 收起其他分支」(走 Host 注册表,本身自带确认)。
  • 不拦脚本或自动化里的宿主侧归档。

界面

弹窗复用官方 Modal / Button 组件,外观与官方「停止并归档」一致:

  • 标题:归档这个会话?
  • 说明:它会从侧栏移除,之后可以在「设置 → 已归档会话」里恢复。归档不会删除任何聊天记录。
  • 按钮:取消(默认焦点)/ 归档;Esc 关闭等同取消。

运行中的会话会连续遇到两次确认:本插件的「归档?」+ 官方的「停止并归档」(后者列出正在跑的工作,信息更全)。这是有意为之——第二次确认包含你真正需要的决策信息。

降级与安全边界

插件可能失效,但不允许它把归档卡住或弄坏界面:

情况 行为
拿不到 uiWorkspace 服务 记一条警告,不拦截,归档照旧
服务方法不可写(实例与原型都试过) 记一条警告,不拦截,归档照旧
弹窗挂载/渲染失败 记一条警告,按原行为直接归档
弹窗 30 秒没有结果 按「取消」收口,并记一条警告
平台模块(react 等)缺失 退化为自绘弹窗;再缺则按原行为直接归档

用户取消时抛出的拒绝带 ArchiveCancelledError 标记:官方调用方只记一条 console.warn,既不会弹错误提示,也不会误报「已归档」。

安装

要求:DSH Web / 桌面版(本插件在 0.2.2-rc.1 实测),profile 为 desktop 或 web 均可。

方式一:插件界面安装(推荐)

把本仓库克隆到本地任意目录,然后在「设置 → 插件」里安装该本地目录;或在设置里启用后重启 DeepSeek Harness。

方式二:命令行安装

git clone https://github.com/jiayaoting/dsh-archive-confirm.git
dsh plugin --profile desktop add link:<克隆下来的绝对路径>

方式三:手动挂载(无需 pnpm)

  1. 把整个目录复制到 ~/.dsh/local-plugins/dsh-archive-confirm(Windows:C:\Users\<你>\.dsh\local-plugins\dsh-archive-confirm)。

  2. 在 ~/.dsh/profiles/<profile>/package.json 里加两处:

    {
      "dependencies": {
        "dsh-archive-confirm": "file:<插件目录的绝对路径>"
      },
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "dsh-archive-confirm"
          ]
        }
      }
    }
    
  3. 在 ~/.dsh/profiles/<profile>/node_modules 里建一个指向插件目录的链接(Windows 可用 mklink /J)。

  4. 重启 DeepSeek Harness(客户端插件在页面启动时加载,热更新不会加载新条目)。

验证是否生效

  1. 打开 DevTools Console,应能看到:

    [dsh-archive-confirm] 已启用:归档会话前会二次确认
    

    或执行 window.__dshArchiveConfirm,应返回 { version: '0.1.0', patched: true }。

  2. 鼠标划过侧栏任一会话 → 点行尾归档图标 → 应弹出「归档这个会话?」。

  3. 点「取消」→ 会话原地不动;点「归档」→ 正常归档,出现官方 toast 与「撤销」。

  4. 右键菜单、Mod+Shift+A 各试一次。

卸载 / 回滚

  • 首选:在「设置 → 插件」里停用本插件,重启后即恢复官方原行为。
  • 彻底移除:从 profile 的 package.json 删掉上面那两处登记,删掉 node_modules 里的链接与插件目录,重启。
  • 若插件导致启动异常:把 package.json 恢复成安装前的备份,删掉链接,重启。

兼容性与已知限制

  • 依赖 @deepseek-ai/dsh-client-ui-workspace 暴露的 uiWorkspace.archiveSession。这是一个非官方公开扩展点的包装:若上游改签名或改为不可写,插件会按上表降级为「不拦截」,不会阻断归档。
  • 文案目前按 navigator.language 在中文 / 英文之间二选一,未接入 DSH 的语言设置。
  • 运行中的会话会有两次确认(见上文,属预期)。
  • 若将来官方给静止会话也加了确认,会出现两层确认框——届时停用本插件即可。

实现要点(给维护者)

  • 为什么拦在服务层而不是按钮上:官方 UI 的三个入口(行内图标、菜单项、快捷键)最终都调用同一个 uiWorkspace.archiveSession,拦服务一处即全覆盖,也不用去抢 slot 里官方已注册的条目。
  • 怎么包装:优先给实例赋同名属性(影子方法),失败则退到原型上改;两者都不可写时放弃拦截。所有降级路径都只记警告。
  • 为什么取消用拒绝而不是静默 resolve:官方调用方在 archiveSession 成功后会给「已归档」toast 和「撤销」按钮;取消若 resolve,会误报一条归档成功。拒绝则只留下一条 console 警告。
  • 为什么带 stopActivity 就透传:那是官方确认对话框的回调,重复询问只会让人多点一次。

使用与署名

  • 生成方式:本插件由 AI 生成(用户提出需求并审阅方案,AI 完成实现、测试与文档)。
  • 使用条件:可自由使用、修改、再分发,无需授权、无需付费;唯一要求是注明来源——在衍生项目的 README、发布说明或关于页面里给出本仓库地址即可。
  • 不提供担保:按「现状」提供,因误用或上游接口变更造成的任何损失由使用者自行承担。
  • 许可证:MIT,见 LICENSE。署名要求是本项目在 MIT 之外额外提出的请求,请一并遵守。

源码结构

dsh-archive-confirm/
├─ lib/index.js        # 宿主半侧:空壳挂载点,让插件出现在插件列表里可启停
├─ lib/client.js       # 浏览器半侧:包装 uiWorkspace.archiveSession + 确认框
├─ cordis.patch.yml    # bundle patch:往 profile 的加载树插入一行
├─ test/smoke.mjs      # 离线自测:取消/确认/透传/降级/还原五个用例
└─ package.json        # dsh.client / dsh.bundle 声明

跑一次自测(会用最小桩件在 Node 里模拟浏览器环境,不需要真正启动 DSH):

npm test
—/ 5

No ratings yet

Verified DSH bundle

Commit ceb21d673164

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