yuluo554/dsh-pipeline ↗★ 0

dsh-pipeline

Multi-node workflow orchestration plugin for DeepSeek Harness (dsh) 适合需要自动化多步骤、多模型路由复杂工作流的用户,需dsh版本不低于0.2.0-rc.1。

Package
dsh-pipeline
Compatibility
Unverified
Harness peer range
0.2.0-rc.1
Cordis peer range
4.0.4
Version
0.2.0
License
MIT
Last updated
Sep 29, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yuluo554/dsh-pipeline

dsh-pipeline

DeepSeek Harness(dsh)多节点工作流编排插件 —— 回应官方讨论 #7704: 把"每轮对话手动换模型、挂技能、贴提示词、复制上一步结果"的重复流程, 定义成一份可复用、可进 git 的 JSON 流水线,一条命令编译并运行。

每个节点独立声明 prompt / model / skills,节点间自动传递输出,失败有策略、 取消能干净退出;Web 端提供零手写 JSON 的表单编辑器与运行入口, 会话流内实时渲染节点链运行卡(逐节点状态、耗时、token 用量、双模型成本对比)。

社区第三方插件,非官方出品。要求 dsh ≥ 0.2.0-rc.1(npm next 标签)。

特性

  • 流水线即文件:定义存放在工作区 .dsh/pipelines/.json,纯 JSON、可审查、可分享(FR-1)
  • 确定性编译:定义 → IR → 官方 workflow 引擎脚本(普通 JS,无 eval),快照逐字节冻结(FR-2)
  • 节点级模型路由:每节点独立 provider/model,成本敏感场景可把大纲/成文路由到不同档位(FR-6)
  • 节点内多条 prompt:prompts[] 顺序投递,中间结果经 {{prev}} 链式传递(FR-7)
  • 跨节点模板变量:{{input}}、{{}}、{{prev}} 自动注入上游输出(FR-4/T4)
  • 显式 DAG:dependsOn 覆盖隐式串接,支持汇聚;引用缺失/环/自依赖编译期拒绝(FR-2)
  • 结构化输出:节点级 outputSchema(引擎 schema 子集),下游可安全插值(FR-2)
  • 技能注入:节点级 skills[] 经 ctx.skills 解析内容进提示词,缺技能 fail-loud(FR-10)
  • 失败策略:节点级 abort(默认)/ skip / retry:n,流水线级默认策略(FR-9)
  • 取消传播:会话中断/AbortSignal 经引擎共享 signal 传播到全部受管子 agent,干净结算(FR-8)
  • 能力探测先行:provider 缺 agentOptions/outputSchema 通路时运行前给可读错误,绝不静默降级(FR-12)
  • Web 编辑器:设置区流水线列表 + 表单式节点编辑(模型下拉读 catalog、技能注入说明),零手写 JSON(FR-13)
  • 运行入口页:选流水线 + 填输入 + 一键运行,发起后进会话流看运行卡(FR-13)
  • 实时运行卡:pipeline-run 会话节点卡——节点链状态徽章、每节点耗时/token、双模型用量对比徽章(FR-14/15)
  • 错误信息 en/zh:插件配置 locale,默认 en
  • 编译期闸门(fail-loud,不静默忽略):节点级 tools 路由与 model.reasoningEffort—— 当前引擎 seam 不提供对应通路(见限制)

架构

双半包(host lib/ + client bundle),全部走官方 seam:

flowchart LR
  subgraph def["定义(可复用文件)"]
    A[".dsh/pipelines/*.json"]
  end

  subgraph host["宿主半 lib/"]
    S["schema 校验"] --> IR["IR + 编译器"]
    IR --> |"普通 JS 脚本(无 eval)"| R["runner
能力预检 + 结果映射"]
  end

  subgraph client["客户端半 client bundle"]
    E["设置区编辑器
列表 + 表单节点编辑"]
    P["运行入口页"]
    C["pipeline-run 运行卡
状态/耗时/token/成本徽章"]
  end

  A --> S
  E -->|"store RPC
/api/dsh-pipeline/*"| S
  P -->|"POST /run"| R
  R --> W["workflow-ptc 引擎
(共享沙箱 PTC 运行时)"]
  W --> AG["子 agent × N
每节点独立 model / skills"]
  W -. "workflow/agent-start|end" .-> REC["run-recorder"]
  REC -. "session.append 持久日志" .-> C
  • 命令/工具入口:/pipeline list|show|run 用户命令(不经模型轮次)与面向模型的 pipeline 工具(参数 {name, input}),均在会话内发起,产物经官方引擎运行; 子 agent 继承父会话工作区
  • 运行卡事件通路:与官方 tool-workflow 同款——宿主 recorder 监听引擎事件,写父会话 持久日志(pipeline-run/run-start|agent-start|agent-end|run-end),浏览器从日志重放纯折叠; 事件断连/重连后卡片不脏渲染。token 聚合自子会话 usage,成本徽章按声明路由分组(含失败尝试的真实开销)
  • bundle 契约:懒 CJS window.__ModuleLoader__.load,external 仅平台种子表 + locale 包; 插件 bundle patch 只翻转 web profile 默认禁用的 workflow-ptc 引擎开关,官方面向模型的 workflow 工具保持原样,两者共存

快速开始

前置要求

  • Node ≥ 20
  • dsh ≥ 0.2.0-rc.1(0.2.0-rc.1 在 npm next 标签:npm i -g @deepseek-ai/dsh@next; latest 仍指 0.1.x,无法运行本插件)
  • 已配置可用的模型 provider(子 agent 走 dsh 自身模型配置;本插件不内置任何 key)

安装

dsh plugin --profile web add dsh-pipeline

包内含预构建产物,安装即用,无需本地构建。安装时插件的 bundle patch 会自动启用 web profile 默认禁用的 workflow-ptc 引擎(本插件是它的专用消费方)。

定义第一条流水线

把下面的 JSON 存为工作区 .dsh/pipelines/three-node-two-models.json (大纲用便宜路由、复查走默认路由、成文用 reasoner):

{
  "name": "three-node-two-models",
  "description": "Outline on the cheap route, review on the parent route, write on the reasoner route.",
  "nodes": [
    {
      "id": "outline",
      "label": "Outline",
      "prompts": ["Write a concise bullet-list outline for a short article about {{input}}."],
      "model": { "provider": "deepseek", "model": "deepseek-chat" }
    },
    {
      "id": "review",
      "label": "Review",
      "prompts": ["Review the outline for factual risks. Return numbered revision notes.\n\n{{outline}}"]
    },
    {
      "id": "write",
      "label": "Write",
      "prompts": ["Write the final short article about {{input}}.\n\nOutline:\n{{outline}}\n\nNotes:\n{{review}}"],
      "model": { "provider": "deepseek", "model": "deepseek-reasoner" }
    }
  ]
}

定义格式完整字段(prompts[] / model / skills / dependsOn / outputSchema / failurePolicy / retry / options.defaultFailurePolicy)见 data/pipelines/ 的 7 份示例与 GitHub 仓库 plan/03-模块详设.md。

运行

/pipeline list                     # 列出已保存流水线
/pipeline show               # 打印定义 + 校验状态
/pipeline run three-node-two-models    # 直接运行(不经模型轮次)

或直接对模型说"用 three-node-two-models 流水线写一篇关于 ×× 的文章", 让模型调用 pipeline 工具发起;也可在 Web 端 设置 → 流水线 的运行入口页选流水线一键运行。 运行发起后会话流内出现实时运行卡:节点链状态徽章、每节点耗时与 token、双模型用量对比。

本地开发回路(从源码)

git clone 
cd dsh-pipeline
pnpm install && pnpm build
# 在本仓库的父目录执行(相对路径 link 安装):
dsh plugin --profile web add ./dsh-pipeline
dsh --profile web --dump-config   # 应可见 "# == dsh-pipeline" 层 + workflow-ptc enabled

卸载:dsh plugin --profile web remove dsh-pipeline(层消失、注册随 effect 注销)。

内置基准评测

全部离线可重复(零 API 依赖、零模型调用),pnpm bench 一条命令出全部指标:

基准输入判据当前指标
B1 编译快照data/pipelines/*.json(7 份)编译输出与 data/snapshots/ 逐字节一致7/7,0 diff
B2 校验矩阵data/invalid/*.json(15 份)+ 合法集按冻结清单接受/拒绝且错误码正确22/22,100%
B3 mock 引擎 e2emock WorkflowEngine × 4 场景agent() 调用参数序列 + 事件序完全匹配;取消后无残留调用4/4,完全匹配
B4 策略矩阵注入失败节点 × abort/skip/retry × 6 场景各策略结果/事件序符合语义(skip 置 null 继续;retry 节点级重跑、耗尽按策略收场;取消打断重试不失控)6/6,完全匹配

测试套件(pnpm test)共 101 例,全部离线:B1-B4 断言 + 真实 PTC 引擎(取消/策略)+ 真实 Session 集成(运行卡事件族落盘/重建/卸载兼容)+ form-model/web/client-bundle + 脱敏守门(工作区 + 全历史)。 快照真值冻结口径见 data/README.md。

限制

  • 节点级 tools 路由与 model.reasoningEffort 编译期显式拒绝:官方 workflow 引擎 guest 的 agent 选项仅接受 label/phase/schema/provider/model,seam 无 toolFilter 通路 (实测 0.2.0-rc.1 仍如此);Web 编辑器对这两类字段只读展示,round-trip 无损保留
  • provider 能力依赖:模型路由与结构化输出依赖 provider 的 agentOptions/outputSchema 通路;不支持的 provider(如部分 ACP 后端)运行前报可读错误,不做 workaround
  • 单会话编排:流水线在触发它的会话内运行,不做跨会话/定时/无人值守调度; 不做图形化拖拽画布;不替代官方 workflow 工具与 agentTeams
  • Web 发起的运行若宿主崩溃,运行卡停留 running(无 run-end 事件;不引入墙上时钟 误报长节点——诚实停留优于虚报 interrupted)
  • 成本徽章按声明路由分组:取自定义里声明的 provider|model;走默认路由的节点 实际模型可能与徽章分组不同(徽章文案按"声明路由"表述)
  • 只支持 dsh.compatibility.dsh 锁定的 preview 线(≥ 0.2.0-rc.1);preview 期 API 可能变动

免责声明

  • 本项目为社区第三方插件,与 DeepSeek 官方无关;#7704 是本项目的需求来源
  • 流水线运行会创建真实子 agent 并消耗真实 token(含失败与重试尝试);成本自行评估
  • 项目不内置、不代理任何模型 API key;所有模型流量走 dsh 自身的凭据配置
  • 软件按 MIT 许可提供,不附带任何担保;请在自己的账户与数据上自行评估风险

已知环境问题

实测记录(Windows + Git Bash + dsh 0.2.0-rc.1):

  • dsh 0.2.0-rc.1 在 npm next 标签,latest 仍指 0.1.x——装 dsh 本体时注意标签; 本插件的 patch 行指向 workflow-ptc,在 0.1.x 上引擎无法启用、插件会 pending 不激活
  • Windows Git Bash 下 npm i -g 可能段错误(npm 包装脚本崩溃):改用 node "/node_modules/npm/bin/npm-cli.js" i -g 直跑
  • 验装捷径:dsh --help 不加载插件;验证安装用 dsh --profile web --dump-config (可见层与 workflow-ptc enabled)或后台启动抓 apply 日志
  • Node 进程偶发原生崩溃(V8 unreachable / 0xC0000005,构建或测试期):同命令重试即过, 与代码无关;崩溃无业务输出 ≠ 测试失败,重试后再定性

开发

pnpm install
pnpm build        # tsc -> lib/ + esbuild client bundle
pnpm test         # node:test,99 例,全离线
pnpm bench        # B1-B4 指标表(ALL GREEN 门槛)
pnpm lint           # host + client 双 tsconfig
pnpm release:audit  # 脱敏审查:文件名门 + 内容级扫描 + 全历史扫描(发布门,随测试运行)

仓库导览:src/ 宿主半(schema/ir/compiler/runner/web/entry/run-events/run-recorder)、 client/ 客户端半(编辑器/运行页/运行卡)、data/ 基准 fixtures 与冻结快照、 scripts/ 构建/冻结/基准脚本、plan/ 全套任务编排文档(需求→架构→详设→测试→里程碑→决策记录) 与各里程碑演示留档。

License

MIT