dsh-Visual-WorkflowDeepSeek Harness plugin
专为 DeepSeek Harness Web GUI 打造的可视化多 Agent 工作流编排插件。公开测试版已上线!接下来会随着 DSH 的正式版上线一并发布正式版!
- Stars
- 15
- Forks
- 0
- License
- MIT
- Last commit
- Sep 1, 2026
Overview
专为 DeepSeek Harness Web GUI 打造的可视化多 Agent 工作流编排插件。公开测试版已上线!接下来会随着 DSH 的正式版上线一并发布正式版!
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
Visual Workflow
为 DeepSeek Harness 量身打造的可视化多 Agent 工作流设计器
English · 简体中文
核心亮点
✦ 拖拽式编排
- 零代码拖拽连线,纯 SVG 画布流畅交互、撤销重做一应俱全;无限画布、一键整理,复杂工作流触手可及。
✦ 双模式架构
- 流程编排模式:长流程多 Agent 智能调度,父代理自主推进,支持断点续跑与运行中实时编辑;
- API服务模式:一键发布为独立 REST API 服务(OpenAI 兼容协议),多租户会话隔离,端口自动分配。
|
|
将 DSH 作为独立后端服务部署,持久化 无头Agent 后台运行,可连接外部APP(如QQ机器人、飞书)或自建前端。
✦ 画布双向同步
- 画布修改保存后,编排器实时感知最新拓扑(新增节点/连线即时生效);运行状态(节点高亮、状态徽标)实时回显画布;双向变更防回环,运行锁保护跨会话冲突,编排与画布始终一致。
✦ 深度自定义
- 每个子代理节点独立配置 system prompt、LLM 模型、思考强度、工具组合(内置预设 / 自定义组合)及 ReAct 迭代上限、回流重试上限;父代理亦可自由选择模型与调度模板,满足精细化编排需求。
|
|
工具自由组合分配给各个代理,避免无用工具占据上下文;mcp服务器只需一行配置自动注册并支持热重载即时生效。
✦ 协作组与虚拟节点
- 将多个角色节点拖入协作组,组内 Agent 并行执行并通过
wf_ask_agent相互通信;虚拟节点作为主节点的别名引用,共享同一执行实例,拓扑复用更灵活。
✦ 定时触发
- 工作台内置定时任务,选择工作流模板配置执行窗口与触发策略,自动创建实例并运行,错过窗口自动挂起/续跑,支持错峰调用api,省钱又省心。
全自动化运维管理,定时自动运行工作流,可支持峰谷时段错时调用,自动暂停,保存流程数据,谷时自动运行。
✦ 零官方包依赖
- 所有 DSH 生态服务(LLM、子代理、工具、用户问题等)均通过
ctx.get()运行时解析,Host 工具以纯对象定义注册,插件自身无任何官方包编译时依赖,升级兼容性更强。
核心概念
| 概念 | 说明 |
|---|---|
| 模板 | 角色/文件/数据库/工作流的“蓝图”,存储在 ~/.dsh/visual-workflow/;模板与实例深拷贝解耦,修改模板不影响已生成节点 |
| 实例 | 工作流或服务的具体运行实例(workflows/ 与 services/),只能从工作流模板创建,可在画布中编辑并保存 |
| 节点 | 画布上的卡片,分为父代理、子代理、文件、数据库、阶段(启动/结束/暂停)、协作组、虚拟节点 |
| 连线 | 传递流程方向(流程线)、上下文内容(上下文线)、数据库标识(数据库线);流程线可带条件标签(通过/不通过/内容),由父代理语义判断 |
| 父代理 | 编排的核心调度者,模式一中负责监督与调度(不执行具体任务),模式二中为最终回答者;可由用户指定调整编排流程 |
| 子代理 | 任务执行者,独立配置 persona、模型、工具等,由父代理按需创建与调度 |
| 编排 | 主 Agent 使用 wf_run_node / wf_ask / wf_finish 等工具自主推进流程,控制节点状态 |
| 模式 | 插件提供两种运行模式:流程编排模式(模式一)与 API 服务模式(模式二),通过顶栏切换,分别存储于不同目录 |
| 断点续跑 | 流程暂停或宿主意外中断后,已执行节点状态持久化,恢复后不重跑,从断点继续 |
| 协作组 | 将多个角色节点组合为一个并行执行单元,组内 Agent 可自由通信,组整体完成后再触发后续流程 |
| 虚拟节点 | 主节点的别名引用,不存储独立配置,共享主节点的执行实例,用于拓扑复用 |
区别:不同于官方 subagent 调度只能传递父的工具和模型,
wf_run_node创建的子代理节点可以自由组合任意工具、设定不同模型和系统提示词(system prompt)。
节点卡片
1. 角色节点(任务执行单元)
卡片形态(左 3 入、右 2 出):
┌─────────────────────────┐
左一 ●│ [角色卡片] 标题 │● 右一
(数据库)│ 类型徽标 / 模型 / │(上下文)
左二 ●│ 工具组合徽标 │● 右二
(上下文)│ │(流程出)
左三 ●│ │
(流程入)│ │
└─────────────────────────┘
| 接点 | 名称 | 语义 |
|---|---|---|
| 左一 | 数据库输入 | 连接数据库节点,注入检索/查询工具 |
| 左二 | 上下文输入 | 接收上游上下文(不连接则不继承) |
| 左三 | 流程输入 | 控制执行顺序 |
| 右一 | 上下文输出 | 向下游传递本节点产出 |
| 右二 | 流程输出 | 顺序执行/条件分支(通过/不通过/内容) |
属性配置:
| 配置项 | 说明 |
|---|---|
| 名称 | 节点名称 |
| system prompt | 文本输入或引用 .md,设定角色系统提示词 |
| LLM 模型 | 独立选择 provider + model |
| 思考强度 | 与官方下拉一致 |
| 工具组合 | 内置预设(标准/极简/ptc/创造)+ 自定义组合(组合管理中创建) |
| ReAct 迭代上限 | 软截停:达上限后强制收尾(不发起新工具调用,输出已有结论),默认 50 |
| 回流重试上限 | 节点级尝试计数护栏,默认 3 |
| 输入/输出数据结构 | 文本/JSON 描述(辅助模型理解) |
| 系统提示词开关 | 控制官方系统提示词注入(默认开启);两个开关分别控制官方 persona 和工具文本注入 |
虚拟节点:点击“复制”可生成虚拟节点(虚线边框 + “↻ 引用”角标),与主节点共享配置与执行实例,删除主节点时级联清除。
2. 文件节点
- 文件内容直接存于模板(文本 / PDF 提取文本 / 图片等非文本文件以受管路径存储)
- 右侧属性面板可上传/替换文件,保存后所有引用节点同步
- 功能:用于给角色节点注入提示词、需求、压缩摘要等上下文
- 文本内容注入上限默认 20000 字符,超出截断并提示;非文本仅注入受管路径,代理通过官方读取工具访问
3. 数据库节点
- 本地类型:支持 SQLite 文件,内置向量检索(bge-small-zh-v1.5,CPU 推理;模型资产缺失/加载失败自动降级 BM25)
- 服务器类型:支持 MySQL / PostgreSQL,提供结构化只读查询与向量检索(本地构建索引)
- 右侧面板可配置连接信息、测试连接,并调整检索高级选项(召回条数、分块窗口、相似度阈值、索引容量)
- 数据库检索,转换为
wf_db_query工具(单工具三模式:search/query/schema)供代理调用,代理需通过 db-in 连线获得该工具
4. 阶段节点
- 启动(模式一) / 输入(模式二):流程入口;模式二下自动接收外部用户问题作为初始上下文
- 结束(模式一) / 输出(模式二):流程终点;模式二下汇聚父代理最终输出并流式返回
- 暂停(仅模式一):流程门,运行至此暂停并保存断点(人工审查点),再次运行从右出继续
5. 协作组节点
- 将多个角色节点拖入协作组,组内角色并行启动(组内角色仅保留上下文/数据库连线)
- 协作 Prompt 追加到每个成员的首条用户消息末尾,并自动列出所有成员的 ID 与角色名称
- 组内 Agent 通过
wf_ask_agent阻塞通信、通过wf_ask向用户交流提问 - 组卡片左入流程、右出流程;组内成员节点支持跨组上下文/数据库连线
- 卡片支持拉伸(八方向),内部成员列表可滚动
连线
连线类型与颜色:
| 连线类型 | 语义说明 | 颜色 |
|---|---|---|
| 流程连线 | 控制执行顺序 | ⚪ 冷灰 / 银白 |
| 上下文连线 | 传递文本内容、文件索引 | 🟡 琥珀金 |
| 数据库连线 | 传递数据库服务标识 | 🔵 天蓝 |
| 条件:通过 | 条件判断为真,执行该分支 | 🟢 翠绿 |
| 条件:不通过 | 条件判断为假,执行该分支或回流 | 🔴 珊瑚红 |
| 条件:内容 | 自定义语义判断(路由标签) | 🟣 紫罗兰 |
编辑条件后,条件颜色覆盖初始颜色;条件判断由父代理进行语义判断。
编排工具
各 Agent 通过以下工具自主调度(插件提供护栏与持久化):
| 工具名称 | 参数 | 功能说明 |
|---|---|---|
wf_run_node | nodeId – 节点IDthinking? – 思考强度iterationLimit? – ReAct 迭代上限retryLimit? – 回流重试上限 | 异步启动节点子代理,立即返回 started;若为暂停节点则返回 paused 并持久化断点。 |
wf_run_node_wait | nodeId – 节点IDthinking? – 思考强度iterationLimit? – ReAct 迭代上限retryLimit? – 回流重试上限 | 阻塞等待节点执行完成,返回 ok/fail 及最终输出。 |
wf_ask | questions[] – 问题列表(支持多问)options? – 可选项配置multi_select? – 是否允许多选 | 向用户提问,渲染官方提问卡片,阻塞等待用户回答。 |
wf_ask_agent | cmd: ask/reply/resolve – 命令类型targetChildId – 目标代理IDmessage? – 消息内容askId? – 提问ID(用于回复/裁决) | Agent间阻塞通信:ask 发起提问并挂起,reply 定向回复,resolve 由父代理进行超时裁决(继续/重发/终止)。 |
wf_db_query | dataId – 数据节点IDmode: search/query/schema – 查询模式query?/sql? – 查询语句topK? – 返回条数 | 数据库只读访问:向量检索、结构化查询(仅 SELECT)、查看表结构。 |
wf_finish | status? – 完成状态(completed/failed)summary? – 总结信息 | 工作流收尾,标记完成或失败,释放运行锁(幂等)。 |
安装(Windows)
bashdsh plugin --profile web add "github:GZX2211/dsh-Visual-Workflow#main"
重启 dsh web,左下角设置上方“工作流”按钮即入口(点击展开工作台)。
验证挂载:
bashdsh --profile web --dump-config | findstr "visual-workflow"
卸载:
bashdsh plugin --profile web remove dsh-visual-workflow
安装问题速查
出现 Host key verification failed 报错
在 PowerShell 或 CMD 中执行:
bashgit config --global url."https://github.com/".insteadOf "git@github.com:"
pnpm 拦截提示:声明了 prepare,需要allowBuilds(常见)
文件管理器定位:%USERPROFILE%\.dsh\profiles\web\pnpm-workspace.yaml,把报错中给出的包名添加到 allowBuilds 列表里,保存再重新安装。
快速开始
- 新建工作流模板 – 左侧「工作流」→ 下方模板区点击
+创建空白模板 - 创建角色模板 – 左侧「角色」→
+→ 配置 prompt / 模型 / 工具组合 → 保存 - 拖拽至画布 – 从左侧拖入角色/文件/数据库/阶段/协作组等模板,生成节点
- 连线 – 从右侧输出点拖到左侧输入点(
flow控制顺序,ctx传递上下文,db注入数据工具) - 创建实例并运行 – 点击画布上方「创建实例」(或直接点击「运行」,自动创建实例),模式一启动流程;模式二点击「运行」启动 API 服务
- 实时编辑 – 运行中可修改画布并保存,后续调度即时生效;节点状态高亮回显,支持撤销/重做
- 断点续跑 – 暂停节点或关闭窗口后,再次运行从断点继续;历史面板可查看所有 run 记录并恢复中断的流程
模式切换:顶栏「模式」下拉选项可选择运行的模式,模式一面向长流程定时编排,模式二面向持久化API服务。 组合管理:顶栏「组合」按钮可创建自定义工具组合(官方工具/自建工具 + MCP 服务器),在角色模式中选用。 定时任务:顶栏「定时任务」入口,选择工作流模板,配置执行窗口与触发策略,即可自动调度运行。
数据存储
所有文件位于 ~/.dsh/visual-workflow/,原子写入(临时文件 + fsync + rename),人可读 JSON:
workflows/ # 模式一实例(按会话隔离)
services/ # 模式二实例(按会话隔离)
flow-templates/ # 工作流模板(全局共享)
roles/ # 角色模板
files/ # 文件模板
databases/ # 数据库模板
combos.json # 自定义工具组合
runs/ # 运行历史(run 快照,含断点数据)
orchestrations/ # 每次运行的编排事实源(供父代理读取)
data/files/ # 受管非文本文件拷贝
data/vector/ # 向量索引文件(按 dataId)
scheduler/ # 定时任务定义与触发记录
services/*.sessions.json # 模式二 userId↔sessionId 映射
配置
在 cordis.patch.yml 中可覆盖默认值:
yaml1- insert: 2 - id: visual-workflow 3 name: dsh-visual-workflow 4 config: 5 dataDir: !!js dshHomePath('visual-workflow') 6 servicePortBase: 7860 7 apiKey: null 8 maxConcurrentPerService: 50 9 wfAskAgentTimeoutMs: 120000 10 runIdleTimeoutMs: 1800000 11 reactIterationLimitDefault: 50 12 retryLimitDefault: 3 13 outputFullLimit: 102400 14 documentTextLimit: 20000 15 embeddingModelDir: null 16 embeddingEndpoint: null 17 runPollMs: 2000
各配置项含义详见 架构文档.md §2.2。
本地开发
bashgit clone https://github.com/GZX2211/dsh-Visual-Workflow.git cd dsh-visual-workflow pnpm install dsh plugin --profile web add "link:$PWD"
常用命令:
bashpnpm build # 构建 Host(tsc)+ Client(tsdown) pnpm test # 单元测试(vitest) pnpm client-smoke # Client 冒烟测试 pnpm check # 全量检查(类型+测试+构建+smoke) pnpm verify # 同上(门禁)
修改 Client 需重新构建并硬刷新浏览器;修改 Host 需重启
dsh web。
目录结构(核心)
dsh-visual-workflow/
├── src/
│ ├── host/ # Host 插件
│ │ ├── shared/ # 前后端共享纯类型契约
│ │ ├── storage/ # 原子存储(FlowStore)
│ │ ├── orchestrator/ # 运行锁、断点状态机、双向同步
│ │ ├── agent/ # 子代理执行引擎、护栏、提示词注入
│ │ ├── tools/ # wf_* 工具注册
│ │ ├── remote/ # GUI API 端点
│ │ ├── service/ # 模式二服务管理器(fork/端口池/恢复)
│ │ ├── embedding/ # 本地向量嵌入与索引
│ │ ├── scheduler/ # 定时任务引擎
│ │ └── prompts/ # 编排/节点任务提示词模板
│ └── client/ # WebUI 源码
│ ├── studio/ # 主状态机(useReducer)
│ ├── components/ # 画布/面板/组合/历史/定时任务等
│ ├── hooks/ # 职责单一 hooks
│ └── lib/ # 纯逻辑(remote/graph-model/bundle)
├── tests/ # 单元 + 集成测试
├── scripts/ # 构建与 watch 脚本
├── assets/models/ # 本地嵌入模型资产
├── cordis.patch.yml # Web profile 挂载层
├── serve.patch.yml # 模式二服务进程组合层模板
├── docs/ # 需求文档 / 架构文档 / MCP注册指南
└── package.json
未来规划
- 组合依赖深度处理(冲突探测)
- 更多节点类型(HTTP 请求、条件判断、循环等)
- 第三方平台适配器(飞书/企微)接入模式二
- 界面交互细节优化(侧边栏拖动更换布局)
- 工作流提示词优化(命令执行准确度、异常处理)
- API 服务优化(运行日志、错误提示)
- 工具优化(合并工具缩减上下文)
- 父代理工具白名单配置(支持装卸,缩减无用上下文)
许可
MIT © GZX2211。欢迎提 Issue / PR。社区项目,界面形态参考 dsh-deepseek-flow。