dsh plugin teamflow
在 DeepSeek Harness 终端运行:
dsh plugin --profile web add michaelshii/dsh-plugin-teamflow中文 | English
TeamFlow 团队研发流水线 —— DeepSeek Harness 可分发插件(dsh plugin --profile web add 安装)。
把「用户一句话需求 → 真实研发团队多 Agent 流水线」做成宿主级能力:
需求 → PRD(基于既有模式/产品记忆,文档归档防臃肿)
→ (UI 改造时)UI/UX 设计
→ (新项目时)架构师规划并落地脚手架 + AGENTS.md
→ 高级全栈工程师技术方案(与派发任务对齐)
→ 可拆分任务时按并发并行开发
→ QA 功能测试(结构化缺陷 → 登记 Bug)
→ 产品验收(更新产品记忆)
全局面板——左侧边栏「🏭 团队工作台」图标(跨会话 / 产品线视角:产品线列表 + run 列表 + Backlog 标签页 + 覆盖式详情浮层)

流水线视图——阶段蛇形泳道 + 节点卡片(状态/耗时/token/子代理会话)

阶段详情抽屉——阶段性产物全文 + token 明细 +「🎬 跳转子代理会话」

Backlog 看板——需求/任务/缺陷拖拽泳道

看板任务详情——任务卡抽屉(需求原文/分配/事件时间线/子卡/缺陷/token)

团队选择——🏭 按钮 + 团队下拉

patch / lite 档裁剪阶段集,不必为一行改动跑完整瀑布。docs/teamflow/ 任务夹,插件自己的运行日志在 run 结束时归档出项目,收口提交只带代码 + 任务夹(一个 run 一个 commit,不需要你预先配置 .gitignore)。若历史提交里已经混进过 logs/teamflow/,在目标仓库执行 git rm -r --cached logs/teamflow 移出即可(本地文件保留)。AGENTS.md 会被 harness 无条件注入每个会话,是团队资产。TeamFlow 遵循职责分离:
<!-- teamflow:begin/end --> 托管区(仅指针)。docs/teamflow/memory.md(按需读取,不注入每次会话 → 省 token)。docs/teamflow/ 即完全复原,AGENTS.md 无残留账本。web profile 宿主组合
├── teamflow-host (host/) Cordis service `teamflow`
│ ├── ctx.typert.register(strict descriptors) ← Remote 方法(descriptors.ts 纯数据,host / client 共用)
│ ├── ctx.tools.register(teamflow_*) ← 模型工具
│ └── node:fs → $DSH_HOME/teamflow/… ← backlog / journal / 归档日志
└── teamflow-client (client/) ← package.json 声明 dsh.client,宿主组合自动扫描注册
├── conversation.view「🏭 团队工作台」(会话内 tab)
├── sidebar.panellist + main/teamflow(全局产品线面板)
└── sidebarRightTabs「teamflow-run」(右栏 run 详情)
两条硬约束决定了这个形态(详见 AGENTS.md §3):不用 @Remote 装饰器(插件以纯 JS 分发,Remote 走 ctx.typert.register 的严格描述符);必须是宿主级插件(动态插件的 fs 被沙箱限制在运行时根,写不了 $DSH_HOME)。
dsh-plugin-teamflow/
package.json # dsh.bundle.patch + dsh.client 声明;exports 指向 lib/ 构建产物
cordis.patch.yml # 插件挂载 patch(insert 块,entry 用包根)
tsdown*.config.ts # 构建:client → lib/client.js;host/store/descriptors → lib/*.mjs
host/ # TeamflowService + core/*(流水线 / backlog / runner / guard / triage / state…)
client/ # Web 工作台(会话内 tab + 全局面板 + 右栏 run 详情)
store.ts # 持久化层(原子写 / 备份 / 损坏自愈 + journal 序列化)
descriptors.ts # Remote 描述符(纯数据,host / client 共用)
test/ # 无依赖测试(node test/*.js,14 套件)
docs/ # ADR / 开发日志 / 评测语料 / release notes
全仓 TS/TSX:host 必须构建(Node 的 type stripping 对 node_modules 下的文件不生效,而宿主从 profile 的 node_modules 加载插件),改源码后跑 pnpm bundle 重建并同步 profile 副本的 lib/。逐文件说明与开发环境见 CONTRIBUTING.md。
@deepseek-ai/dsh-* 与 react(peerDependencies,宿主注入,无需单独安装)。本插件开发与验证基于 dsh v0.1.7-alpha.1(session 格式 v4)。这也是「能跑流水线」的宿主下限:插件注入的每条 message 必须带 producer-owned 的 source.kind(plugin:dsh-plugin-teamflow),而 v3 宿主把 source.kind 校验为封闭词表(SOURCE_KINDS 不含 plugin:*)——旧写法 {kind:'plugin', plugin:…} 在 v4 宿主当场被拒,新写法在 v3 宿主同样非法,两种形态互不兼容,故不再声称可回退到 v0.1.5-rc.2 运行。Remote 描述符仍同时提供 schema 与 create() 两个字段(供不同代际的宿主读取),见下「typert 描述符契约」。package.json 的 engines.dsh: ">=0.1.7-alpha.1 <0.2.0"(已随本次下限收窄,见下条实测)与 dsh.manifestVersion: 1 是作者声明性元数据(宿主不读取/校验)。
⚠️ 预发布 tuple 规则与本次区间的实测关系(2026-09-23 用 semver 7.7.4 的 satisfies 实测):受「预发布版本只匹配同 [major,minor,patch] tuple 的区间」规则约束——>=0.1.7-alpha.1 <0.2.0 对 0.1.7-alpha.1 / 0.1.7-alpha.2 / 0.1.7 / 0.1.8 / 0.1.9 判 PASS,对 0.1.6-alpha.2 / 0.1.6 / 0.2.0-rc.1 / 0.2.0 判 fail(与上条 v4 下限恰好一致)。注意旧区间 >=0.1.5-rc.2 <0.2.0 在同一 rule 下连当时正在用的 0.1.6-alpha.2 都判 false,所以这类字段只表达对正式版的兼容声明;宿主既不校验它,日常应以 next 为准——latest 常滞后于 next,不要用 latest 判断发布线。
v0.1.7-alpha.1 的 breaking 面(本次核对):session 事件格式升到 v4——宿主在事件被 Session 采纳前校验每条 message 的 source.kind,拒绝 v3 退役的 plugin wrapper({kind:'plugin', plugin:…} → 抛 format v4 message requires a producer-owned source kind),要求 kind:'plugin:<name>'。插件原先四处注入(团队上下文 ×2 / 完成汇报 / 护栏提醒)写的都是旧 wrapper → 新 run 在写入阶段即失败(journal 都落不了盘)。现已全部改为 plugin:dsh-plugin-teamflow。全量核对其余面(typert 严格描述符仍要 create()、subagents.start/SubagentRun、tokenUsage 四桶 + sessionStats.steps、agent.inject/followup/steer、settings.locale 只读端口、remote.$mount、sessions.openSubagent、sidebarRight.openResource)均无破坏。
v0.1.6-alpha.2 的 breaking 面(上次核对):typert strict codec 由 { mode, typeSymbol, schema } 变为 { mode, typeSymbol, create: () => Schema }(懒物化,materializeSchema 里 record.value ??= record.create());validateCodec 对缺 create() 的 strict codec 注册即抛 "strict codec has no create() factory"。叠加 dsh-app-boot 的策略(required 插件 activate 失败 → 整个 profile startup failed),表现为插件一挂就是「dsh 起不来」(web boot: N entries did not activate)。全量 diff 其余面(client-modules / subagent / agent runtime / manifest / tools 的 llm 投影)对本插件无破坏,三个 UI slot 包的 src/index.ts 零变更 → slot 名安全。
升级 dsh 后若行为异常,先核对两处:① 插件注入的 session 事件(tool-workflow/agent-start、user/message + source.kind='plugin:dsh-plugin-teamflow')必须落在宿主事件词表内——v4 宿主只收 producer-owned 的 source kind(plugin 这个 v3 wrapper 已退役),而 v3 宿主的封闭词表也不收 plugin:*(因此下限是 v4 宿主);tool-workflow/agent-start 不带 message/source 槽位,不在该校验范围内。新增自定义事件类型要带 ignorable: true、已知类型不要加词表外的键;② 计量读的是宿主投影 key(tokenUsage / sessionStats),宿主改 key 或 state 版本时需同步 host/core/metering.ts。历次兼容核对结论与待跟进项见 CHANGELOG.md(0.1.6–0.1.9 段)与 docs/TODO.md(例如复读检测仍读已弃用的事件读取器)。
# 从 npm 安装(发布后)
dsh plugin --profile web add dsh-plugin-teamflow
# 或本地目录安装(开发时)
dsh plugin --profile web add file:./plugins/dsh-plugin-teamflow
安装后重启 dsh --profile web,宿主行 teamflow-host 生效:
teamflow_* 工具:start / triage / status / backlog / claim / update / assign / cancel / resume / pause / resume_session / merge;$DSH_HOME/teamflow/<product>/backlog/*.json。注意:
@deepseek-ai/*为宿主私有包,运行需 DeepSeek Harness(dsh)宿主环境;本包不发布也无法独立运行。
teamflow_start(自动分诊模式:patch / lite / tech / medium / full)——也可以用「直接跑 medium 模式做这个」等指定档位;使用规则提醒:
teamflow_start调用后主线程不要自行改代码或跑验证——实现、QA、汇报由流水线各阶段子代理完成(避免与流水线抢活)。
dsh plugin --profile web remove dsh-plugin-teamflow
重启 dsh --profile web 后插件完全移除(模型侧 teamflow_* 工具与「🏭 团队工作台」tab 消失)。
可选清理(卸载不会自动清,按需执行):
$DSH_HOME/teamflow/(backlog / 运行记录,删除前确认不再需要)。AGENTS.md 中的 <!-- teamflow:begin/end --> 托管块与 docs/teamflow/ 目录,即可完全复原(AGENTS.md 最小侵入原则的"退出干净")。pnpm test # smoke(描述符/结构/安全)+ journal(断点续跑行为)
pnpm run typecheck # tsc --noEmit 类型检查(需本机 dsh profile 提供 @deepseek-ai/* 类型)
node --check lib/host.mjs lib/client.js lib/store.mjs lib/descriptors.mjs
pnpm run bundle # 构建 client(tsdown → lib/client.js,__ModuleLoader__.load 注册)
插件开发者(本插件的本地开发链路)见仓库内 AGENTS.md 与 docs/adr/——含部署同步(node deploy.mjs → 重启 dsh --profile web)、生效前提(运行中 web 从 profile 部署副本加载 host,只构建源码不生效)、设计决策记录(ADR-0001~0009)与基准对比(docs/benchmarks/)。本仓库其余源码均为 TS/TSX,需先 pnpm bundle 构建后再运行(node_modules 下 strip-types 不生效)。
注意:lib/ 被 .gitignore 排除,但发布必须带上构建产物(files 白名单已含 lib/;exports["./client"] 指向 ./lib/client.js)。
| 工具 / Remote | 作用 |
|---|---|
teamflow_start / teamflow.start(sessionId, requirement, options) |
启动流水线 |
teamflow_status / teamflow.list() + teamflow.snapshot(runId) |
查询运行进度(阶段/状态/token/日志/是否需人工) |
teamflow_backlog / teamflow.backlog(product) |
查看 backlog(+ persistence 落盘路径) |
teamflow_claim |
认领任务或缺陷 |
teamflow_update / teamflow.backlogUpdate(kind, id, to, product, reason) |
人工流转状态(处理 needs-human) |
teamflow_cancel / teamflow.cancel(runId) |
取消运行(工作台 / 全局面板 run 行 / run 详情三处按钮,两段式确认;仅对正在跑的 run 生效) |
teamflow_resume / teamflow.resume(runId, sessionId) |
断点续跑(从第一个未完成阶段重跑) |
teamflow_triage |
需求分诊预览(默认 start 自动分诊,仅在想预评估/强制 mode 时使用) |
teamflow_assign |
指定任务/缺陷的负责人(与 claim 分离:claim 只改状态) |
teamflow_pause / teamflow_resume_session |
当前会话暂停/恢复 teamflow 触发(会话级,新会话自动重置) |
MIT —— 详见 LICENSE。
登录后即可为该插件评分和评价。
还没有人评价这个插件,来抢个沙发吧!