Back to home@codelogickeep

deepseek-harness-plugin

DeepSeek Harness (DSH) 插件集合仓库与安装脚手架。

Stars
0
Language
JavaScript
Created
Aug 17, 2026
Updated
Aug 18, 2026

Introduction


title: deepseek-harness-plugin — DSH 插件集合与安装脚手架 description: DeepSeek Harness (DSH) 插件集合仓库:钉钉桥接器、MiniMax 网页搜索等插件统一沉淀,并提供 DSH 插件开发/安装的脚手架。 tags: [dsh, deepseek-harness, plugins, scaffold, dingtalk, minimax, ai-agent] date: 2026-08-17 status: active

deepseek-harness-plugin

DSH(DeepSeek Harness)插件集合仓库 + 安装脚手架:把你有用的 DSH 插件统一沉淀在这里,并提供开发/安装插件的脚手架。

当前已收录插件:

插件说明形态
钉钉桥接器 (dsh-dingtalk-bridge)在钉钉里直接和 DSH Agent 对话,含会话管理控制台、主动推送(定时提醒→钉钉)独立进程 ↔ DSH /api
MiniMax 网页搜索 (minimax-search)把 MiniMax 搜索注册为 DSH 宿主 Web 搜索 provider,web_search 工具直接可用DSH 宿主插件 (cordis.patch.yml)
自研定时调度 (cron-scheduler)标准 5 字段 cron 表达式定时任务(0 10 * * *),配置文件驱动、跨重启防重复,到点唤醒指定 Agent 会话DSH 宿主插件 (cordis.patch.yml)
flash-worker(pro 指挥、flash 执行)给主 agent 加 flash_agent 工具,把具体编码任务委派给 flash 模型子 agent,形成 orchestrator-worker 两级协同Agent preset(脚手架渲染安装)

另启用 DSH 官方 dsh-scheduleschedule_create/list/delete,after/at/every) 作为补充:临时/会话内定时用官方,固定 cron 节奏用自研 cron-scheduler。区别见 插件 3

以后开发的新插件都放这里(详情见 插件生态导览)。


插件目录

#插件快速入口
1钉钉桥接器docs/DEPLOYMENT.md 部署 · docs/ARCHITECTURE.md 架构
2MiniMax 搜索docs/MINIMAX-SEARCH.md 一键接入
3自研定时调度插件 3 · 事故复盘 docs/CRON-SCHEDULER-INCIDENT.md
4flash-worker(pro 指挥、flash 执行)docs/FLASH-WORKER.md 原理/安装/使用
脚手架/方法论docs/PLUGIN-ECOSYSTEM.md · docs/DSH-NOTES.md

插件 1:钉钉 ↔ DSH 桥接器

让你在钉钉里直接和 DSH 中的 Agent 对话。采用钉钉企业内部应用 + Stream 模式,无需公网域名/固定 IP/反向代理,本地即可运行。

快速开始

# 1. 安装依赖
npm install

# 2. 填写配置(复制模板,填入钉钉应用凭证)
cp .env.example .env

# 3. 校验配置
npm run check:config

# 4. 启动
npm start

前提:

  • Node.js ≥ 22
  • DSH Web 正在运行(默认 http://127.0.0.1:3080
  • 已按 docs/DEPLOYMENT.md 在钉钉开放平台创建企业内部应用并启用机器人

架构

┌──────────┐   Stream WS    ┌──────────────────┐   HTTP POST /api/session.*   ┌──────────────┐
│  钉钉客户端  │ ───────────► │  dsh-dingtalk-   │ ──────────────────────────► │   DSH Host    │
│ (企业内部App│               │  bridge (daemon) │                               │  (Agent 会话)  │
│   机器人)   │ ◄─────────── │                  │ ◄────────────────────────── │              │
└──────────┘   消息应答Webhook└──────────────────┘   WS /api/events.mux        └──────────────┘
  • 钉钉侧:官方 dingtalk-stream SDK 连接钉钉 Stream 网关,订阅 TOPIC_ROBOT 接收机器人消息;用消息携带的 sessionWebhook 回发回复。
  • DSH 侧:复用浏览器同款 /api 协议 —— POST /api/session.prompt 发消息,WS /api/events.mux 收 Agent 回复事件流。
  • 映射:每个钉钉会话(单聊/群聊)稳定映射到一个 DSH 会话,上下文连续,重启不丢。

详见 docs/ARCHITECTURE.md

钉钉内指令(会话管理控制台)

指令说明
/status查看当前投递目标(会话、项目、标题、状态)
/list按 DSH 工作区分组列出会话(▶=当前目标;/list all 平铺含未挂载)
/use <序号|关键词|会话ID>切换投递目标到某个会话(历史保留,切回可续聊
/new [路径]新建一个 DSH 会话并设为当前目标(可选指定项目路径)
/help显示帮助
  • 每个钉钉会话(单聊/群聊)对应一个「投递目标」DSH 会话,映射持久化到 data/session-mapping.json不入库)。
  • /use 切换后原会话保留,切回可续聊;新会话默认独立上下文。

主动推送(定时提醒 → 钉钉)

DSH 会话产生非用户触发的消息(自研 cron-scheduler 或官方 dsh-schedule 定时提醒到期、Agent 主动输出)时, 桥接器会把它推到将该会话设为投递目标的钉钉会话(📨 Agent 主动消息 前缀)。

  • 前提:该钉钉用户先给机器人发过消息(持久化其 sessionWebhook)。
  • 只推最终结果:中间输出(思考/工具过程)不推,静默 ACTIVE_PUSH_QUIET_MS(默认 2.5s)后仅推最终结论。
  • 配置:ENABLE_ACTIVE_PUSH=true(默认开)· ACTIVE_PUSH_PREFIX=📨 Agent 主动消息 · ACTIVE_PUSH_QUIET_MS=2500
  • 链路:定时到期 → Agent 输出 → 事件流捕获 → 去抖只取最终 → 持久 webhook → 钉钉
  • 端到端已实测:docs/LESSONS.md「番外:定时任务 + 主动推送」。

插件 2:MiniMax 网页搜索(DSH 宿主插件)

MiniMax「coding_plan/search」 注册为 DSH 的 web 搜索 provider,替代失效的 DeepSeek 官方搜索。接入后用 web_search 工具即可获得真实网页结果。

  • 源码plugins/minimax-search/minimax-search.mjs(仓库唯一真相源)
  • 安装npm run install:plugins(脚手架同步到 ~/.dsh/profiles/web/plugins/
  • 一键接入docs/MINIMAX-SEARCH.md
  • 宿主机制cordis.patch.yml disable 内置 DeepSeek + searchProvider: minimax + 插入插件行
  • key~/.dsh/.env(DSH 启动自动读取,不入库)

插件 3:自研定时调度(cron-scheduler)

DSH 宿主插件,把「标准 5 字段 cron 表达式 + 人类可读配置文件」带到 DSH 本体: 到点唤醒目标 Agent 会话处理提醒(Agent 的回复经桥接器推送到钉钉)。

与官方 dsh-schedule 的区别

维度自研 cron-scheduler官方 dsh-schedule
触发方式标准 cron 表达式0 10 * * **/5 * * * *工具 schedule_create/list/delete(after/at/every,every≥5min)
配置入口配置文件 cron-schedules.json(版本化、可 review)会话内工具调用(Agent 创建,写 session 日志)
粒度分钟级(30s tick)分钟级(after/at)或周期(every≥5min)
目标会话每条可指定 session(或回退活动会话)session-local(原会话且存活)
适合场景固定节奏巡检/日报(JIRA、例行)临时提醒、会话内一次性/周期任务

两者共存互补:固定 cron 节奏用自研,临时/会话内用官方。官方 dsh-schedule 通过 cordis.patch.yml 同目录启用(Agent 有 schedule_* 工具)。

配置

// 默认 ~/.dsh/cron-schedules.json(config.schedulesPath 可覆盖)
{
  "timezone": "Asia/Shanghai",
  "schedules": [
    {
      "id": "jira-daily",
      "cron": "0 10 * * *",
      "timezone": "Asia/Shanghai",
      "session": "session-xxx",      // 可选:目标 DSH 会话
      "message": "查看 JIRA 支持网缺陷", // 必填:提醒正文
      "title": "每日 JIRA 巡检",       // 可选:钉钉标题
      "enabled": true
    }
  ]
}

设计要点(可维护性优先)

  • 核心算法单一事实源:cron 解析/调度逻辑与插件入口同目录(cron.js + scheduler.js), 整目录自包含,部署与测试同源(避免两处漂移)。
  • 跨重启防重复:触发后 lastFiredAt 回写;主配置若在 DSH 沙箱外不可写时, 自动落到 workspace 内 config/cron-scheduler-state.json(根治重复触发死循环)。
  • 不再写自定义 session 事件:审计走 logger,绝不 session.append 自定义类型 (DSH 白名单外事件会导致历史无法加载——详见 事故复盘)。
  • 测试:test/cron.test.jstest/scheduler.test.jstest/cron-scheduler.integration.test.js(43+ 用例)。

安装与源码

  • 源码plugins/cron-scheduler/(自包含目录:cron-scheduler.mjs 入口 + cron.js/scheduler.js 核心)
  • 部署npm run install:plugins 整目录同步到宿主 ~/.dsh/profiles/web/plugins/cron-scheduler/
  • 宿主机制cordis.patch.yml 插入 cron-scheduler 行,引用 ./plugins/cron-scheduler/cron-scheduler.mjs(已启用)
  • 核心自定位:入口用 import.meta.url 定位同目录核心模块,部署与测试同源、无仓库绝对路径耦合

脚手架:如何往这个项目里加新插件

目录规矩(重要,新插件必须遵守)

插件类别放哪部署
DSH 宿主插件plugins/<name>/(自包含子目录:入口 + 核心 + 依赖)npm run install:plugins 整目录同步
Agent presetpresets/<name>/agent.cordis.yml + preset.ymlnpm run install:flash-worker 渲染安装
独立进程插件src/(桥接器等,通过 /api 协议通信)独立 launchd 服务
  1. DSH 宿主插件(如 MiniMax 搜索、cron-scheduler)→ 一律放 plugins/<name>/ 子目录, 一个插件一个目录(入口文件 + 核心代码同目录,自包含); 用 npm run install:plugins 整目录同步到宿主 plugins/<name>/,patch 引用 ./plugins/<name>/<入口文件>(见 scripts/install-plugins.mjs)。
  2. 独立进程类(如钉钉桥接器)→ 放 src/,共享 /api 协议,与宿主插件无依赖。
  3. Agent preset(如 flash-worker)→ 放 presets/<name>/,由脚手架渲染安装到 ~/.dsh/.agent-presets/<name>/
  4. 新插件务必写文档(带 frontmatter)+ 测试(放 test/)+ 更新 README 插件目录。

规矩的本质:plugins/ 只装 DSH 宿主插件(被 cordis.patch.yml 加载),src/ 只装独立进程 (被 launchd/npm start 拉起),presets/ 只装 agent preset(被脚手架装到用户 preset 根), 三者绝不混放。cron-scheduler 已从 src/ 迁到 plugins/cron-scheduler/ 作为规范示例。

一键安装(插件 + preset)

# 只装 DSH 宿主插件(MiniMax 搜索、cron-scheduler)
npm run install:plugins

# 只装「pro 指挥、flash 执行」agent preset(渲染 flash provider/model 后安装)
npm run install:flash-worker -- --provider <flash-provider> --model <flash-model>

# 一键装全部(宿主插件 + preset),并把默认 preset 切到 flash-worker
npm run setup -- --provider <flash-provider> --model <flash-model> --set-default

# 查看当前安装的 provider/model(只读,不重装)
npm run install:flash-worker -- --show

install:flash-worker 的 provider/model 来源:--provider/--model 参数 > FLASH_PROVIDER/FLASH_MODEL 环境变量 > 交互式询问。preset 模板在 presets/flash-worker/agent.cordis.yml.tpl,其中的 {{FLASH_PROVIDER}}/{{FLASH_MODEL}} 占位符在安装时注入,避免把个人模型 id 写死进仓库。

flash-worker preset 是什么:给主 agent(pro)新增一个 flash_agent 工具,主 agent 把 具体编码任务委派给 flash 模型子 agent 执行、拿回结果后 review,形成「pro 指挥、flash 执行」 的两级开发协同。子 agent 保留全部工具集。详见 docs/FLASH-WORKER.md

机制与目录规划详见 docs/PLUGIN-ECOSYSTEM.md


项目结构

├── src/                     # 独立进程类插件(仅钉钉桥接器)
│   ├── index.js             # 入口/装配/优雅关闭
│   ├── config.js            # 配置加载(env/.env/config.json + 校验)
│   ├── dsh-client.js        # DSH 外部客户端(RPC + WS 事件流 + 自动重连)
│   ├── dingtalk-client.js   # 钉钉 Stream 客户端(含连接守护)
│   ├── sessions.js          # 会话映射持久化
│   └── bridge.js            # 双向转发核心
├── plugins/                 # DSH 宿主插件(每个插件一个自包含子目录)
│   ├── minimax-search/
│   │   └── minimax-search.mjs
│   └── cron-scheduler/
│       ├── cron-scheduler.mjs   # 自研 cron 定时调度入口
│       ├── cron.js              #   cron 解析/下一命中(核心算法)
│       └── scheduler.js         #   调度状态机/防重复(核心算法)
├── presets/                 # Agent preset(脚手架渲染安装到 ~/.dsh/.agent-presets/)
│   └── flash-worker/
│       ├── agent.cordis.yml.tpl #   含 {{FLASH_PROVIDER}}/{{FLASH_MODEL}} 占位符
│       └── preset.yml
├── tools/
│   └── restart-dsh-and-verify.mjs # launchd 重启 DSH 并自动验证
├── scripts/
│   ├── install-plugins.mjs      # 脚手架:整目录同步 plugins/<name>/ → 宿主 plugins/<name>/
│   ├── install-flash-preset.mjs # 脚手架:渲染并安装 flash-worker preset
│   └── setup.mjs                # 一键式:装插件 + 装 preset +(可选)切默认
├── test/                    # 集成测试(需要 DSH 在线)
├── config/config.example.json
├── docs/
│   ├── ARCHITECTURE.md      # 架构与协议说明
│   ├── DEPLOYMENT.md        # 钉钉开放平台配置 + 部署指南
│   ├── LESSONS.md           # 研发复盘与踩坑记录
│   ├── PLUGIN-ECOSYSTEM.md  # 插件生态导览(两类插件 + 目录规划)
│   ├── DSH-NOTES.md         # DSH 知识沉淀(官方动态 + 插件机制)
│   ├── CRON-SCHEDULER-INCIDENT.md # 定时任务事故复盘 + 插件开发法则
│   └── MINIMAX-SEARCH.md    # MiniMax 搜索接入指南
└── .env.example

指南

测试

npm test

测试包含 DSH 真实协议集成测试(需要 DSH Web 在线)与桥接端到端测试(用 Mock 钉钉模拟 Stream 消息,验证 钉钉→DSH→回复→钉钉 全链路)。

安全提醒

  • .env 含 AppSecret 等凭证,勿提交(已在 .gitignore)。
  • data/(会话映射)含会话标识符,不入库。
  • DSH /api 是回环信任模型;外部接入请部署在本机/内网,勿暴露公网。
  • 群聊默认仅在被 @ 时响应(可在 src/bridge.js_shouldIgnore 调整)。

License

MIT