DSH Plugins

August 15, 2026 · View on GitHub

DeepSeek Harness 的自有插件仓库。每一个子目录是一个插件(Dynamic Cordis Plugin),把完整源码存档在这里,需要时通过 DSH 的动态插件机制按需加载。

仓库用途:源码存档 + 复用。插件不写入正在运行的 profile,零风险、不依赖重启。

本仓库插件列表

目录功能
archived-session-view查看/打开/删除已归档会话

如何使用

  1. 打开 DSH 的 Cordis 面板(@cordis)。
  2. 通过动态插件机制(define + run)加载对应插件的 plugin.js 源码。
  3. 也可以把 plugin.js 的 Host/Client 两段分别提供给动态插件定义。

每个子目录的 README 里写有该插件的具体说明与重建步骤。

一键重载(重启后恢复所有插件)

./reload.sh 扫描仓库中所有插件的源码并生成加载清单:

cd dsh-plugins && ./reload.sh        # 打印加载清单 + 加载步骤
cd dsh-plugins && ./reload.sh --json # 输出机器可读清单(供 agent 使用)

注意:reload.sh 只做「准备 / 诊断」。DSH 动态插件最终必须由 Agent 通过 cordis define + cordis run 逐插件加载,并经你在界面批准。脚本不能也不 会直接注入运行中的进程。让 Agent 跑 reload.sh --json,然后按清单重建即可。

为什么是源码存档

DSH 的动态插件是进程内的、临时的(process-local),重启后不会自动存在。因此把完整源码保存在本仓库,作为长期资产;每次重启后需要时拉回源码重建即可,无需修改 profile 配置、无集成风险。

重要:Client 端必须用官方 inject 写法

有 UI 的插件,其 plugin.js 的 Client 段必须用官方写法:

return {
  inject: ['slots'],
  apply(ctx) {
    const s = ctx.slots
    // 用 s.inject(...) / s.register(...) 注册 UI
  }
}

不要用 const slots = ctx.get('slots'); if (!slots) return 的可选写法——那会导致 Client 段静默退出、UI 没有真正注册进 Slot 系统,页面上看不到入口(本插件早期就踩过这个坑)。

新增插件

复制 archived-session-view 目录结构,新建一个子目录:

  • plugin.js —— 完整源码(Host + Client)
  • README.md —— 插件说明与用法