DeepSeek Harness(DSH)插件目录。每个插件维护在独立仓库中;本仓库只做索引、安装说明与设计笔记,不再包含插件源码。
| 插件 | 说明 | 安装 |
|---|---|---|
| Outbound Proxy | 让 DSH 出站 HTTP(S) 走本机代理(Clash / mihomo 等),端口跟随启动环境,插件行可单独覆盖 | dsh plugin --profile desktop add github:Dax233/dsh-outbound-proxy |
| Desktop Notify | Windows 原生通知:任务完成 / 需要提问 / 出错时弹 toast 并播放内置 ciallo 提示音 | dsh plugin --profile desktop add github:Dax233/dsh-desktop-notify |
已停用(2026-10-28,0.2.13):自研「自有 webview + loopback 桥」的 Agent 浏览器,已被下面的 dsh-agent-browser(直接驱动内置侧栏浏览器)取代;仓库与安装保留仅用于回滚/参考,desktop profile 中 bundle 已 enabled:false。历史能力:快照/点击/输入/滚动/截图、viewport/emulate/metrics/logs、qa 矩阵、preview、setContent、DSH Host 隔离显式报错、失败回执与状态新鲜度字段 |
dsh plugin --profile desktop add github:Dax233/dsh-sidebar-browser-control(已停用,不建议新装) |
|
| Agent Browser(第三方,MIT) | 驱动 DSH 内置右侧栏浏览器(用户看到的同一个 tab):browser_tabs/read/act/screenshot/navigate/viewport/close/eval 8 个工具;语义 ref、viewport 预设真实重排、可见性感知截图 + 借 tab 恢复、会话作用域 tab;Desktop only,Host 半 0 import(无端口/无 token/无文件写入),enableEval 默认关闭。本机 DSH 0.2.1-rc.3 实测其 14 套自测全过 |
dsh plugin --profile desktop add github:guanhaisen/dsh-agent-browser |
| Sidebar UX | 侧边栏增强(0.1.0):右键会话/工作区行直接打开官方「…」菜单(复用宿主菜单,不复制),工作区菜单追加「在文件资源管理器中打开」(走宿主 session.openWorkspacePath),把会话拖进输入框插入真正的会话引用 chip(走官方 insertReference 通道,非裸文本) |
dsh plugin --profile desktop add github:Dax233/dsh-sidebar-ux |
| Chrome Bridge | 控制真实 Chrome(0.1.30):后台标签、DSH Agent 标签组 ACL、UIA refs、动作回执、console/network 日志、iframe 观测与点击;CDP 视口/配色仿真、fullPage/clip/元素截图、networkIdle best-effort(忽略长连接类型)、命令串行化 | dsh plugin --profile desktop add github:Dax233/dsh-chrome-bridge |
| Codex Bridge | 桥接本机 Codex:线程清单 / 转录取读 / 无头投递任务 / goal 与活性监测(可对停滞线程补"继续");仓库另带离线 watch 告警脚本 | dsh plugin --profile desktop add github:Dax233/dsh-codex-bridge |
| Delete Guard | 删除指令守卫(0.2.0):shell 命令里出现删除动词时必须是唯一且顶层的单条语句;串联、管道、嵌套、cmd /c、iex 拒绝;run_code 内文件删除与 node -e/python -c 等解释器包装同样拦截 |
dsh plugin --profile desktop add github:Dax233/dsh-delete-guard |
| Provider Aliases | 模型目录别名:一个内置 provider 目录挂多条凭据路由(多 OpenCode Go 套餐等),附「模型别名」设置面板,每条路由独立 Key 与思维档位 | dsh plugin --profile desktop add github:Dax233/dsh-provider-aliases |
| Session Bridge (fork) | 跨工作区会话桥 fork(上游 MIT,0.8.1):按标题/工作区查找、读取任意会话,新增 session_search_global 全库正文检索;resume 会补齐模型路由(避免 {{model}} 装配错误,Cordis-safe);工具面可切换(当前开放建会话/发消息/监控/归档等写操作),bundle patch 开启持久化全文索引 |
dsh plugin --profile desktop add github:Dax233/dsh-session-bridge |
| Preset Hotswitch | 会话内热切换 Agent 预设:绕过官方「仅空白会话可切换」限制(agentPresets.recompose + agent-preset/selected),下一请求生效、重启保持 |
dsh plugin --profile desktop add github:Dax233/dsh-preset-hotswitch |
前置:DSH Desktop 带插件管理器(0.2.x),Windows 10/11。
dsh plugin --profile desktop add github:Dax233/dsh-outbound-proxy
dsh plugin --profile desktop add github:Dax233/dsh-desktop-notify
dsh plugin --profile desktop add github:Dax233/dsh-sidebar-browser-control
dsh plugin --profile desktop add github:Dax233/dsh-sidebar-ux
dsh plugin --profile desktop add github:Dax233/dsh-chrome-bridge
dsh plugin --profile desktop add github:Dax233/dsh-codex-bridge
dsh plugin --profile desktop add github:Dax233/dsh-provider-aliases
dsh plugin --profile desktop add github:Dax233/dsh-delete-guard
dsh plugin --profile desktop add github:Dax233/dsh-session-bridge
dsh plugin --profile desktop add github:Dax233/dsh-preset-hotswitch也可以直接在插件页添加对应 GitHub 地址;安装后重启 DSH Desktop。
下载现成扩展包:chrome-bridge 最新 Release 的 dsh-chrome-bridge-v*.zip,解压后在 chrome://extensions 开启开发者模式并 加载已解压的扩展程序。
.crx是自签名包,Chrome 稳定版不允许拖入安装(CRX_REQUIRED_PROOF_MISSING),仅用于企业策略/Chromium 开发版;日常安装请用 zip + Load unpacked。
- 在 Chrome 打开
chrome://extensions→ 开启开发者模式。 - 加载已解压的扩展程序 → 选择
dsh-chrome-bridge仓库的extensions/chrome-extension目录。 - 打开扩展选项页,确认端口(默认
47835)与 token(默认dsh-chrome-bridge-local)。
只有 DSH Agent 标签组 内的标签页可以被驱动;newTab 会自动入组,attach 是显式授权(把标签页拖出组即撤销)。
三套浏览器能力,按用途选:
- Agent Browser(
dsh-agent-browser,主用,0.1.0):驱动 DSH 内置右侧栏浏览器——用户看到的 就是 Agent 操作的同一个 tab,启动快、原生历史、keepMounted。8 个browser_*工具:browser_tabs(含 mounted/loading/failed/unverified/carrier)、browser_read(text/elements/html, elements 带稳定 ref)、browser_act(click/type/press/scroll/select/reload/wait,wait 支持 visible/attached/hidden 与 ignoreCache reload)、browser_screenshot(视口截图 + 预设尺寸)、browser_navigate、browser_viewport(auto/phone/tablet/desktop/custom,真实重排 + 缩放显示)、browser_close、browser_eval(默认因enableEval:false拒绝)。Desktop only,Host 半无 import。 - Chrome Bridge(0.1.30+):真实 Chrome 标签页上的 CDP 仿真:
emulate {width,height,deviceScaleFactor,mobile,colorScheme}、screenshot {fullPage,clip,ref,format,quality}(fullPage 临时拉高仿真视口再截,不用会挂死的 captureBeyondViewport)、wait {networkIdle}(忽略 WebSocket/EventSource/Ping 等长连接类型,超时 best-effort 返回 ok + warning); 扩展端命令串行化;会临时改变该标签显示,reset/detach/关标签自动复位,不是 CI/离屏方案。 Sidebar Browser Control(已停用,0.2.13):自研 QA renderer(已由内置浏览器驱动取代;保留代码与回滚:browser qa矩阵、fullPage 拼接、setContent/preview、DSH Host 隔离显式报错)。plugin_manager把@local/dsh-sidebar-browser-control的 bundle 重新 enabled 后再重启即可。
桌面壳边界(不是插件缺口):侧栏 webview 拿不到 CDP,所以真 DPR/媒体仿真与 HTTP 状态码不可用
(回执如实报真实 DPR/像素尺寸);壳只放行 http(s) 导航并取消 file:,所以 file:// 不可用
(用 setContent 或 preview 代替);插件也没有 Electron 主进程权限,不做离屏/CI。需要真 DPR 的
验收走 Chrome Bridge 或外部 CDP。另外壳按「loopback hostname + 当前 DSH Host 端口」整体 cancel
guest 请求,所以侧栏浏览器打不开 DSH 自身 GUI;0.2.10 起在挂载前就返回显式隔离错误(以
blocked by the desktop shell's isolation policy 开头,含 ERR_FAILED (-2) 与
setContent/preview/独立 dsh web 替代做法),并用 status.lastLoadFailure 回传原始
did-fail-load 原因——壳侧的 typed 原因、只读代理、按路径区分的策略仍是 DSH Desktop 上游 TODO。
需要本机已安装并登录 Codex(桌面版自带 CLI,或 npm i -g @openai/codex;登录态在 CODEX_HOME 下的 auth.json)。
插件只读 Codex home(转录、goal 数据库、写者锁、automation 文件),不修改 Codex 会话、goal 或配置;驱动 turn 走 codex exec / codex exec resume 子进程,子进程不继承凭据类环境变量。无头执行没有人工审批通道,默认 approval_policy=never;codex_liveness 的自动补活默认关闭,需要配置 allowNudge: true 才生效。
仓库另带 scripts/watch.mjs:确定性的 relay 异常检查(rollout heartbeat / goals / automation / liveness),只输出告警,退出码 0 无告警 / 10 有告警 / 2 检查失败。它不持有定时器、不唤醒 DSH,需用 --thread 或 watch.config.json 指定线程(无内置默认值),再配合 DSH schedule_create 或任务计划实现"异常才介入"。
插件挂在 tools/pre-execute 上:命令中出现删除动词(Remove-Item、rm、del、rd、
[IO.File]::Delete 等)时,只有唯一且顶层的一条语句才放行,其余组合在调用前被拒绝并返回原因。
0.2.0 起:run_code 代码文本里的文件删除 API 同样被拒绝(指引用独立 shell 删除),
node -e / python -c / perl -e / ruby -e / php -r / deno eval / bun -e 这类
「把删除藏在被求值字面量里」的包装也会被拒。
- 引号内字面量先掩码,路径里的
a;b不会被误判成串联;但iex "..."、解释器-c/-e这类会求值的场景会回查原文。 - 分析异常时 fail-open(放行),守卫自身出问题不会把会话卡死。
write/edit的覆盖写不在本插件范围(属编辑语义/文件观察策略层,没有「独立语句」等价物)。
一个包同时提供两半:同名扩展的内置 @deepseek-ai/dsh-llm-pi-ai 适配器(新增
catalog 别名能力)与「设置 → 模型别名」面板。安装后重启 DSH Desktop:
dsh plugin --profile desktop add github:Dax233/dsh-provider-aliases它覆盖的适配器编译自 DSH 0.2.1-rc.3;DSH 升级后需要等待仓库更新或按仓库 README
重跑 tools/sync.mjs 重新生成。
插件注册一个 Host 工具 switch_session_preset:官方切换入口只允许空白会话使用,
已开始的会话会被 registry 以 agent-preset/locked 拒绝;本插件改走公开的
agentPresets.recompose() 并写入 agent-preset/selected 事件,下一请求生效、重启后保持。
只作用于调用该工具的会话,不创建/删除预设;依赖宿主的 agentPresets 服务。
recompose 的契约自述"由调用方负责空白检查",本插件刻意跳过该检查,属实验性用法,
DSH 升级后可能失效。
- 浏览器控制插件的本机桥只监听
127.0.0.1(默认端口47834/47835)。 - 鉴权:侧栏桥使用
Authorization: Bearer;Chrome 桥使用 WebSockethello帧 token;两者都校验Host/Origin。 - 默认 token 仅用于本机零配置配对,可在扩展选项 / 环境变量中覆盖;不要把本机桥端口暴露到公网。
- 本目录仓库不包含密钥、代理凭据或个人路径。
本目录的 research/(同类方案调研、反馈分级、根因与真机验证记录)只保留在本地,不纳入
版本控制、不推送远端:里面会引用设备诊断、会话 id 与本机路径,公开会泄露本机信息。
仓库只发布插件索引、安装说明、平台边界与操作规范。
dsh plugin add link:<path>不更新dsh.profile.bundles:只写 dependencies,插件静默不加载。file:安装会更新 bundle,link:不会 → 装完必须核对dsh.profile.bundles(本仓库脚本/文档已注明)。- 运行中对 Host 插件
remove+add会重复注册:旧实例未卸载、新实例热加载 →Agent resolver 已经注册启动失败;需重启清状态。 - 运行中编辑 profile 的
package.json会触发热重载:服务图重建期间可能出现typert gateway: session/follow: active Service "sessionController" is unavailable;需重启恢复。 - 结论:profile/插件安装变更一律「先改好 → 一次性重启」,运行中不 remove/add Host 插件、不编辑 profile。
每个插件仓库独立开发与测试:
git clone https://github.com/Dax233/dsh-<plugin>.git
cd dsh-<plugin>
npm test桌面 profile 里的 @local 插件是 file: 复制安装(不是软链):改了仓库文件不会自动进安装副本,
同路径重跑 dsh plugin add file:F:/github/<repo> 只会输出 Already up to date。刷新方式:
$dsh = 'G:\programs\DSH\resources\runtime\cli\bin\dsh.cmd'
& $dsh plugin --profile desktop remove @local/<pkg>
& $dsh plugin --profile desktop add file:F:/github/<repo>
# 然后重启 DSH Desktop;Host 插件与 client bundle 都只在启动时加载file: 依赖的「内容变了但路径没变」不会触发 pnpm 重装,这是它按目录路径标识包的行为,不是插件问题。
MIT