A-G-guy/dsh-plus

dsh-plus

DSH+ —— DeepSeek Harness 自定义插件 monorepo:移动端窄屏适配 / 任务结束邮件通知 / 子代理独立模型 / 自定义 LLM 路由 / ......

未分類ai-agentsdsh

DSH+

面向 DSH(DeepSeek Harness) 的增强插件集,发布于 npm @dsh-plus scope


DSH+ 以 pnpm monorepo 形式维护一组 DSH 增强插件。每个插件都是独立的 ESM npm 包 (cordis 约定导出),全部发布在 npm 的 @dsh-plus scope 下,可单独安装,也可经 @dsh-plus/bundle-main 聚合为一层有序的 cordis patch 统一装配。

插件一览

包类型平台说明文档
@dsh-plus/ui-mobile-fitUI通用纯 CSS 覆盖的移动端窄屏响应式适配,不 fork 上游、跟随升级docs
@dsh-plus/remote-settingsUI通用修复非 loopback 访问(loopback-rewrite 反代)下设置→模型目录报错与插件配置卡片不渲染docs
@dsh-plus/notify-emailservice + UI通用任务完成 / 等待决策 / 出错停止时向指定邮箱发送邮件通知docs
@dsh-plus/llm-piservice + UI通用基于 pi-ai 的自定义 LLM 路由:协议集合现场推导、官方目录继承与字段级覆盖、全量 compat、内置模型目录浏览器;常备官方应急 LLM 配置副本docs
@dsh-plus/lifeboatservice通用故障救生艇:兄弟插件崩溃自动隔离(写 patch 层禁用)+ LLM 应急副本指引 + 邮件告警docs
@dsh-plus/reloadservice + UILinux设置页「重新加载」按钮与 /reload 命令:两段确认+倒计时后重启 dsh-web(systemd,桌面/Windows 下按钮禁用并提示)docs
@dsh-plus/usage-panelservice + UI通用全量会话 token 用量面板:实时+历史扫描双通道聚合,按日/模型报表,可选价目估算费用docs
@dsh-plus/access-gateservice + UI通用Web 访问围栏(已合并官方认证):官方 cookie 为唯一凭据,未认证导航渲染 token 输入页(PWA 可恢复),可选 IP 附加围栏,loopback 管理通道取当前认证链接docs
@dsh-plus/boot-retryservice通用弱网引导重试:经官方 __DSH_TRANSPORT__.loadBundle 缝注入零缓存重试加载器,消除一次抖动导致的「Failed to load plugins」;不改 URL/不缓存,HMR 语义不变docs
@dsh-plus/web-cache-headersservice通用给 GUI 静态资源补长缓存:内容哈希 /assets/* 200 响应增量加 immutable,消除每次刷新重复传输 ~1.4MB(gzip 后约 500KB)docs
@dsh-plus/web-boot-timingservice + UI通用弱网首屏计时观测:五相时钟(ttfb/index/DCL/FCP/遮罩移除/首次输入)+ 资源分桶报告,输出 console/globalThis 钩子/localStorage 历史对比;纯观测零行为改动docs
@dsh-plus/web-shell-swservice + UI通用外壳 Service Worker:内容寻址资源 cache-first、index network-first 离线兜底;不碰 RPC/SSE/token 交换,no-store 永不入库,settings 一键注销恢复原生docs
@dsh-plus/error-retryservice通用特定报错纳入上游重试:模糊/正则匹配 failure.message(如 content_filter → PI_AI_ERROR)并改写载荷 retryPolicy,退避/持久事件/次数预算仍全由官方 dsh-llm-retry 执行,次数可配(默认 5)docs
@dsh-plus/subagent-modelservice通用子代理独立模型配置:按 provider 为 subagent/subagent_fork 注入 agentOptions(provider/model/思考程度),default 条目共享单条路由;主代理显式选择仍优先docs
@dsh-plus/web-filesservice + UI通用Web 内嵌类 SFTP 文件浏览与编辑:目录导航/预览/编辑、图片直连预览、双分隔符路径判据docs
@dsh-plus/image-studioservice + UI通用图像工作室:OpenAI Images 协议文生图/图生图、全参数开关化、预设体系与可二次编辑画廊docs
@dsh-plus/secret-envservice + UI通用密钥环境变量:以 $DSH_VAR_* 变量名向 agent 暴露密钥,执行期经 dsh-shell-env 注入,值不进消息流、不影响缓存率docs
@dsh-plus/web-search-servicesservice通用·pyweb_search 免费后端聚合(Tavily/Exa/OpenAI Chat),官方 web_search 工具零修改;需本机 Python(自动发现,Windows 兜底 py -3)docs
@dsh-plus/siyuanservice通用思源笔记主插件:MCP tools/list × kernel CLI help 树自动派生能力清单(docker/native/http 连接与 token 自动发现、双源交叉校验、降级执行),注册 siyuan agent 预设(操作面仅思源工具 + web/提问/待办辅助行,精简版系统提示词不复述工具描述)docs
@dsh-plus/siyuan-toolstool通用思源笔记子插件(仅 siyuan 预设挂载):能力 1:1 包装为 agent 作用域 DSH 工具,写操作按 DSH 审批策略确认(完全权限自动通过、绝不静默拒绝),写前数据历史快照,siyuan:env 环境快照,MCP 优先 CLI 兜底docs
@dsh-plus/actual-mcplib + bin通用Actual Budget 能力的可移植封装(格式一):把本机 @actual-app/cli 按 help 文本运行时派生为 MCP 服务,stdio 入口可被任意 MCP 宿主直接运行;零 DSH 依赖,同时是格式二的唯一能力来源docs
@dsh-plus/actualservice + UI通用Actual Budget 主插件:进程内挂载格式一的 MCP 服务端并从 tools/list 派生能力清单(CLI help 树交叉校验、会话失败降级为 CLI 目录、CLI×服务端版本探针与 warn/strict 策略),注册 actual agent 预设(操作面仅 Actual 工具 + web/提问/待办辅助行,精简版系统提示词不复述工具描述),附插件页配置卡片(地址/Sync ID/CLI/策略可 GUI 直改,密钥走行级注入)docs
@dsh-plus/actual-toolstool通用Actual Budget 子插件(仅 actual 预设挂载):能力 1:1 包装为 agent 作用域 DSH 工具,写操作按 DSH 审批策略确认(完全权限自动通过、绝不静默拒绝),actual:env 环境快照(含版本不匹配告警),MCP 优先 CLI 兜底docs
@dsh-plus/tool-text-transformtool通用纯函数演示工具(uppercase / lowercase / reverse / length),插件链路参考实现docs
@dsh-plus/agent-preset-chatpersona通用注册纯聊天模式 agent 预设(id=chat):空工具目录 + complete persona 前缀,含遗留 .agent-presets/chat 迁移docs
@dsh-plus/agent-preset-leanpersona通用注册精简模式 agent 预设(id=lean):镜像官方 standard 预设的行子集(shell/文件/联网/技能/待办/提问/计划/交付 + 压缩),去掉委派与编排类工具以降低固定开销;上游行漂移由镜像测试拦下docs
@dsh-plus/bundle-mainbundle通用聚合编排层:按序 insert 正式插件行,单插件脱离 bundle 亦可独立安装—
@dsh-plus/sharedlibrary通用工作区共享纯函数库(非插件;原子写委托官方 dsh-atomic-write)—
各包版本号见对应 packages/*/package.json 与 npm 页面,不在此复述(避免与发版脱节)。

平台列图例:通用 = 无平台限制(web profile / 桌面端 / Windows 按设计接入, 未注明处不含平台特判);通用·py = 需要本机 Python 解释器;Linux = 依赖 systemd,桌面端/Windows 下相关能力显式降级。桌面/Windows 的验证状态见 docs/reference/官方机制参照.md「平台验证矩阵」。

快速开始

环境要求

  • Node.js ≥ 22(测试依赖 node --test 直接运行 TypeScript)
  • pnpm(经 corepack 启用)
  • 已安装 DSH(@deepseek-ai/dsh@0.2.1-alpha.2,本仓唯一受支持基线)

安装到 DSH

所有包已发布到 npm,直接用 dsh plugin 安装即可(工作区内部依赖会正常解析):

# 安装单个插件到 web profile
dsh plugin --profile web add @dsh-plus/ui-mobile-fit

# 或安装聚合包:cordis.patch.yml 会把全部正式插件按序装配进组合树
dsh plugin --profile web add @dsh-plus/bundle-main

安装后重启 dsh web 生效;带配置界面的插件在 webui 侧边栏「插件」页对应行的 「配置」入口调整,持久化到 profile 行级覆盖层(cordis.patch.yml)并热生效。

桌面端(官方 DSH Desktop):插件不经 CLI 安装——在桌面端 GUI 内 「设置 → 插件 → 安装插件」搜索 @dsh-plus/… 安装(桌面端内置 pnpm 管理, profile 为 desktop,配置落 $DSH_HOME/profiles/desktop;CLI 不接受 --profile desktop)。带配置卡片的插件在该页对应行的「配置」入口调整,与 web 端一致。

Windows:CLI 安装与开发在 Git Bash/WSL 下照常(dsh plugin add 同命令); 插件运行时的平台适配见下方「平台与桌面端支持」。

平台与桌面端支持

  • 桌面端 = 官方 DSH Desktop(Electron,desktop profile):插件由桌面端 内置 pnpm 安装管理;ctx.profileContext(installAnchor/patchPath/name) 是 CLI 与桌面端共用的运行时事实,本仓库的 dsh 树解析、patch 落点均优先取它。
  • Windows(范围 = 仅插件运行时):仓库工具链(scripts/dshctl.py、测试脚本) 不做 Windows 化;插件运行时已适配——进程树终止走 taskkill /PID <pid> /T /F、 解释器发现走 PATH + py -3 兜底、路径判据识别盘符与 UNC、双分隔符面包屑、 桌面/非 Linux 的门控文案。官方上游本身就是 bash↔pwsh 双轨(process.platform === 'win32'),无 systemd/journalctl 依赖。
  • 不做平台特判的部分:桌面端 webServer 流量对插件的可见性(IPC bridge)、 桌面端插件清单、Electron 是否暴露重启 API——均未实测,对应能力以降级形态 提供(reload 按钮禁用、lifeboat 无 patchPath 时告警停用)。
  • 官方机制与平台验证矩阵:见 docs/reference/官方机制参照.md 的 「桌面端与 profileContext」「客户端平台与热更」「Windows 运行时要点」「平台验证矩阵」。

从源码构建

pnpm install      # 安装 workspace 依赖
pnpm build        # 构建全部插件(产物在 packages/*/lib)
pnpm lint         # biome 静态检查(lint + format + import 整理)
pnpm lint:fix     # biome 自动修复并格式化
pnpm test         # 运行全部单元测试(纯逻辑,无网络、零 API 费用)

# 本地开发:link 安装,配合 tsdown --watch 热更浏览器半
dsh plugin --profile web add link:packages/ui-mobile-fit

仓库结构

packages/
  ui-mobile-fit/        移动端窄屏适配(UI 覆盖)
  remote-settings/      非 loopback 页面设置平面修复
  notify-email/         任务结束邮件通知
  llm-pi/               自定义 LLM 路由(含官方应急 LLM 配置副本)
  lifeboat/             故障救生艇(隔离/应急副本指引/告警)
  reload/               设置按钮 + /reload 命令重载或重启 dsh-web
  usage-panel/          用量统计面板(token 聚合/报表/费用估算)
  access-gate/          Web 访问围栏(合并官方认证 / token 输入页恢复 PWA / IP 附加围栏)
  boot-retry/           弱网引导重试(零缓存重试加载器)
  web-cache-headers/    GUI 静态资源 immutable 缓存头
  web-boot-timing/      弱网首屏计时观测
  web-shell-sw/         外壳 Service Worker(离线兜底)
  error-retry/          特定报错纳入上游重试
  subagent-model/       子代理独立模型配置
  web-files/            Web 内嵌类 SFTP 文件浏览与编辑
  image-studio/         图像工作室(文生图/图生图/画廊)
  secret-env/           环境变量密钥注入($DSH_VAR_*)
  web-search-services/  web_search 免费后端聚合(Python 桥接特例)
  siyuan/               思源笔记主插件(能力发现服务 + siyuan 预设注册)
  siyuan-tools/         思源笔记子插件(预设内工具包装 + 审批/写前快照安全网)
  actual-mcp/           Actual 能力封装(格式一:CLI help 树 → stdio MCP 服务)
  actual/               Actual 主插件(能力发现服务 + actual 预设注册 + 配置卡片)
  actual-tools/         Actual 子插件(预设内工具包装 + 审批/环境快照)
  tool-text-transform/  演示工具(dev-only,不进生产 bundle)
  agent-preset-chat/    纯聊天 agent 预设(id=chat)
  agent-preset-lean/    精简 agent 预设(id=lean,官方 standard 行子集)
  bundle-main/          聚合编排层
  shared/               共享纯函数库
scripts/
  dshctl.py             开发/分发入口(测试、mock 调试、dev 实例、npm 发版)
  dshctl/               dshctl 实现与 dsh-dev-mock 技能
  mock_llm.py           本机 mock LLM(开发零真实 API 费用)
  tests/                dshctl 单元测试

开发

python3 scripts/dshctl.py --help        # 全部子命令与用法
python3 scripts/dshctl.py test          # 静态检查 + 构建 + 单测
python3 scripts/dshctl.py dev up        # 起 dev 实例(mock LLM,零费用)

本机差异经环境变量配置(DSHCTL_DSH_BIN / DSHCTL_TOKEN_FILES), 或写入 scripts/dshctl/local_config.py(不入库);git 门禁统一由 projects-go 钩子承载(python3 scripts/dshctl.py init-hooks 安装,每人一次)。

许可证

MIT © 2026 agguy