🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

团队流水线 MichaelShii/dsh-plugin-teamflow

DeepSeek Harnessv0.3.2
MichaelShii2 天前有提交已提供中文文档扫描:含敏感能力

团队研发流水线插件DeepSeek Harness:需求 → PRD → 设计 → 开发 → QA → 验收,断点续跑…

41.5/100
综合分
18
GitHub 星标
805
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-teamflow
npm 源 · dsh-plugin-teamflow 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · security
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/31·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 2 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-plugin-teamflow @ 0.3.2
✓Node 引擎要求 >=22.18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 02:20:21

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 124 处,展示前 38 条)
  • 读取本地文件
    lib/host.mjs:2082
    if (!existsSync(path)) return null;
  • 读取本地文件
    lib/host.mjs:2083
    const t = readFileSync(path, "utf8").trim();
  • 读取本地文件
    lib/host.mjs:2097
    if (!existsSync(path)) return null;
  • 读取本地文件
    lib/host.mjs:2098
    const st = statSync(path);
  • 读取本地文件
    lib/host.mjs:2182
    entries = readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    lib/host.mjs:3461
    es = readdirSync(d, { withFileTypes: true });
  • 写入本地文件
    lib/host.mjs:4021
    mkdirSync(join(teamflowRoot(), projectKey), { recursive: true });
  • 写入本地文件
    lib/host.mjs:4023
    writeFileSync(file, JSON.stringify(state, null, 2), "utf8");
  • 写入本地文件
    lib/host.mjs:4258
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/host.mjs:4260
    writeFileSync(p, raw, "utf8");
  • 写入本地文件
    lib/host.mjs:5154
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/host.mjs:5155
    writeFileSync(file, JSON.stringify({
  • 执行外部命令固定命令
    lib/host.mjs:5204
    out: execFileSync("git", args, {
  • 执行外部命令固定命令
    lib/host.mjs:5312
    execFileSync("git", [
  • 执行外部命令固定命令
    lib/host.mjs:5332
    execFileSync("git", [
  • 执行外部命令来自配置/变量
    lib/host.mjs:5524
    if (spawnSync(probe, [bin], {
  • 删除本地文件
    lib/host.mjs:5558
    unlinkSync(shot);
  • 执行外部命令来自配置/变量
    lib/host.mjs:5561
    const r = spawnSync(chrome, [
  • 执行外部命令来自配置/变量
    lib/host.mjs:5660
    const r = spawnSync(chrome, [
  • 删除本地文件
    lib/host.mjs:9720
    rmSync(dir, {
  • 删除本地文件
    lib/host.mjs:9844
    rmSync(tmp, {
  • 删除本地文件
    lib/host.mjs:10810
    if (existsSync(root) && readdirSync(root).length === 0) rmSync(root, {
  • 删除本地文件
    lib/host.mjs:10815
    if (existsSync(parent) && readdirSync(parent).length === 0) rmSync(parent, {
  • 删除本地文件
    lib/host.mjs:10855
    rmSync(src, {
  • 写入剪贴板
    lib/client.js:1496
    nav.clipboard.writeText(cmd).then(() => setCopied("ok")).catch(() => setCopied("fail"));
  • 写入剪贴板
    lib/client.js:5369
    nav.clipboard.writeText(text).then(() => setCopyState("ok")).catch(() => setCopyState("fail"));
  • 读取本地文件
    lib/store.mjs:51
    if (!existsSync(file)) return fallback;
  • 读取本地文件
    lib/store.mjs:52
    return JSON.parse(readFileSync(file, "utf8"));
  • 读取本地文件
    lib/store.mjs:56
    if (existsSync(file + ".bak")) {
  • 读取本地文件
    lib/store.mjs:57
    const b = JSON.parse(readFileSync(file + ".bak", "utf8"));
  • 写入本地文件
    lib/store.mjs:77
    mkdirSync(dirname(file), { recursive: true });
  • 读取本地文件
    lib/store.mjs:78
    if (existsSync(file)) try {
  • 读取本地文件
    lib/store.mjs:79
    const cur = JSON.parse(readFileSync(file, "utf8"));
  • 写入本地文件
    lib/store.mjs:80
    if (Array.isArray(cur)) copyFileSync(file, file + ".bak");
  • 写入本地文件
    lib/store.mjs:83
    renameSync(file, `${file}.corrupt-${Date.now()}`);
  • 写入本地文件
    lib/store.mjs:87
    writeFileSync(tmp, JSON.stringify(value, null, 2), "utf8");
  • 写入本地文件
    lib/store.mjs:88
    renameSync(tmp, file);
  • 写入本地文件
    lib/store.mjs:222
    mkdirSync(dirname(file), { recursive: true });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-base@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-modules@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-sidebar-right@deepseek-ai/dsh-llm@deepseek-ai/dsh-sandbox-windows-acl@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-util-workspace-path
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 团队研发流水线
v0.3.32026-11-01
· TeamFlow v0.3.3 发布日期:2026-11-01。变更清单按 release-npm-package 铁律 1 由 git log v0.3.2..HEAD 生成 (28 笔提交 / 27 个文件 / +1930 −526;该区间另含依赖/CI 合并与本次发版提交),不凭会话记忆。 ⚠️ 本版含一处行为变更(子代理续跑等待判据)与一处 engines 变更(宿主下限抬到 0.2.1-rc.5)。 逐笔归属与真机取证见 docs/devlog.md 的 v0.3.3 批次。本文件面向使用者;内部流水不在正文里。 · 中文 · ⬆️ 升级要点 · engines 有变:宿主 dsh 下限由 0.2.1-alpha.2 抬到 0.2.1-rc.5(上界仍 <0.3.0);Node ≥ 22.18。 升完重启 dsh --profile web(桌面版重启应用)——修复都在宿主侧,不重启不生效。 · 一处行为变更:子代理续跑的等待由「固定 25 分钟墙钟」改为「有进展就续等」。此前一个正常跑长任务的 子代理(写测试 + 反复跑构建)会被旧逻辑在 25 分钟处误判失败,而它实际仍在推进、最终成功。 · 无 teamflow_* 工具 schema / journal / 任务夹契约改动,不需要迁移。 · ① 长任务不再被墙钟误杀(修复) 现象:人工 resume 复活的子代理这一轮正常跑了很久,插件在固定 25 分钟到顶时判「没拿到正文」失败;卡片 还显示首次尝试的时长(几分钟),看起来像「早就失败的弃子」,实际它仍在正常干活。 根因:续跑等待是固定墙钟,到顶即放弃,不看是否还在推进;且判失败时不更新该阶段记录,结束时间停在首次运行。 修复:放弃判据改为「无新事件、无产物变更持续 10 分钟才放手」(天花板 2 小时);判失败时落真实结束时刻。 · ② 续跑与重试复用同一个子代理(省 token) 现象:每次重试都新起子代理,对上一轮一无所知,从零重读 PRD/技术方案/源码,单阶段可烧掉千万级 token。 修复:重试与中断后的 resume 都在原 child 里继续;指令投递成功后绝不回落新起——两个子代理会并发改同一批 文件,宁可本轮按失败收场转人工。 · ③ 切模型即时到达子代理 现象:界面切成别的模型后,子代理仍打旧(已不可用/被限流)的模型。 根因:只读父会话「上一次实际请求」的配置,而它只在父代理真正发请求后才刷新 ⇒ 切模型后是陈旧快照。 修复:优先读「待生效选择」;旧模型确属外部不可用且用户已切模型时,改道新起子代理吃新路由。 · ④ 开发阶段的边界守卫(修复) 越界发现落成「收口任务」;依赖成环改为串行化(读者不再与写者同波);技术方案钉死的数值常量被改动直接停 (不等验收);本轮有失败就不再起收口任务(失败态下 spawn 起不来,白烧两次尝试)。 · ⑤ QA 回环在 resume 后不再失效(修复) QA 打回轮次改为跨 resume 累计(续跑后曾有界闭环整个失效);超限日志不再谎称「跳过产品验收」;长命令挂住时 给出可见提醒 + QA 命令纪律(一条命令只做一件事、带超时)。 · ⑥ 供应链加固 + 宿主下限锚定 CI 的 action 钉 commit SHA、引入 dependabot 分组、进程调用改 execFileSync(去掉 shell 字符串); engines.dsh 下限抬到 0.2.1-rc.5。 · English · ⬆️ Upgrade notes · engines changed: the host dsh floor is raised from 0.2.1-alpha.2 to 0.2.1-rc.5 (upper bound still <0.3.0); Node ≥ 22.18. Restart dsh --profile web (or the desktop app) after upgrading — all fixes live host-side and do not take effect until restart. · One behavior change: the sub-agent continuation wait changes from a fixed 25-minute wall clock to "keep waiting as long as there is progress". A sub-agent legitimately working on a long task (writing tests, re-running builds) used t
v0.3.22026-10-26内容较长已截断
· TeamFlow v0.3.2 发布日期:2026-10-26。变更清单按 release-npm-package 铁律 1 由 git log v0.3.1..HEAD 生成 (16 笔开发提交 / 26 个文件 / +1253 −116;该区间另含 1 笔 v0.3.1 合并与本次发版提交),不凭会话记忆。 ⚠️ 本版含一处行为变更(PRD 改写的等待判据)。逐笔归属与真机取证见 docs/devlog.md 的 v0.3.2 批次。 本文件面向使用者;内部流水不在正文里。 · 中文 · ⬆️ 升级要点 · engines 未变(宿主仍须 ≥ 0.2.1-alpha.2,Node ≥ 22.18)。升完重启 dsh --profile web (桌面版重启应用)—— 四条修复都在宿主侧,不重启不生效。 · 一处行为变更:PRD 改写的等待判据由「固定 300s 墙钟」改为「无进展即放手」(idle 240s / 天花板 600s)。 用户可见差异:带较大改动的 PRD 改写不再莫名回落成「重跑 PRD」。 · 无 teamflow_* 工具 schema / journal / 任务夹契约改动,不需要迁移。 · ① 界面语言不再漂移成英文(修复) 现象:新开一个工作区后,整轮产物被生成成英文(团队名、子代理 label、PRD 正文),而界面是中文 ⇒ 中英混排。 根因:宿主侧拿语言的唯一通道是客户端上报。上报器把「值还没就绪」当成「无事可做」——既不推送、也不重试; 而语言服务只在语言变化时回调、不含初始值 ⇒ 挂载那一刻取到空值,之后永远没人再推,宿主停在 en 兜底。 修复:把「值没就绪」算作待重试,且重试时重新取值(不是重发旧值);宿主侧同时修掉「空值把已有好值抹掉」。 真机验证:locale 为 zh、无兜底告警、团队名/阶段名/PRD 正文均为中文。 · ② 分诊不再白跑一次(修复) 现象:用户在确认单上点选后重新开工,却看到一个全新的分诊子代理又跑了一遍。 根因:分诊缓存键含「需求 + 补充说明」;点选那一步模型会重写补充说明(即使语义没变)⇒ 键变 ⇒ 缓存未命中。 修复:「待决策」期间按需求原文放宽命中并迁移待决策状态。真改了需求仍会重跑。 真机验证:四次 resume、每次补充说明都不同,分诊仍只跑一次。 · ③ PRD 改写不再「完工前放弃」(行为变更 + 修复) 现象:在确认单上改了 PRD,日志写「第二轮跑了但没拿到可用文本」然后重跑整份 PRD——白等约 5 分钟, 而且两份 PRD 并行跑了一段。 根因:等待用的是固定 300s 墙钟。一次真实改写跑了 377s(含多次编辑 + 全文重写 + 状态文件更新), 插件在它完工前 77 秒放弃;子代理会话证据显示那一轮其实完整跑完了。 修复:放弃判据改为「无进展」——既没有新事件、也没有产物变更,持续一段时间才放手;天花板抬到 600s。 同时支持「回合结束但回复没有正文」时按文件即产物判完成(真实改写常常只写文件、回复只给一段小结)。 · ④ 蓝图不再整份丢弃(修复) 现象:开发阶段退化成「整体开发」一张卡,并行度消失、调用数暴涨。 根因:技术阶段写的架构蓝图是 JSON,而模型把正则原样写进其中(如 /\.md$/i)。JSON 不允许 \. 这类转义 ⇒ 整份蓝图被拒绝 ⇒ 拆卡信息全部丢失。 修复:对字符串内的非法 JSON 转义做确定性修复(加倍成字面反斜杠——JSON 里它没有第二种解释), 并覆盖「末尾截断 + 非法转义」并发的形态;修复过会打一条告警留痕,不静默。 真机验证:同一份失败蓝图恢复出 8 个任务 / 16 个模块;后续 run 正常拆成 5 波、3 路并发。 · ⑤ 需求澄清与确认单(体验) · 确认单清单化:最多一张汇总卡,不再逐题弹卡片;事实项与口味项分开标注。 · PRD 增加 anti-goals 段:显式回答「技术可行但产品失败」的形态(可观察、具体)。 · /teamflow-brainstorm:需求头脑风暴入口,只允许用户调用,模型不能自己触发。 · 缺陷修复先看「最近改了什么」:先看提交与对基线的 diff,再决定读哪个模块。 · ⑥ 稳健性(修复) · 参数类失败判据补第三族:曾把「参数写错」误判成「环境不可用」⇒ 直接停掉自动重试。 · 批准后的续跑不重复计数:复用已完成的 PRD 时,用量不再叠加。 · 部署自检:核对 profile 的版本号与产物指纹;依赖声明用 file:,防 npm install
v0.3.12026-10-18
· v0.3.1 发布说明(取证) 版本:0.3.1(patch) 基线:v0.3.0 → HEAD,12 笔提交 / 18 个文件 / +1540 −24 行(git log v0.3.0..HEAD 生成) 主题:确认单上的「改 PRD」做成闭环 —— 改写绑定版本、在原 child 上下文里续跑、用量准确、批准语义收紧。 本文件是取证与论证;结论层见 CHANGELOG.md。 --- · 1. 为什么做这一版 v0.3.0 把「确认单必须由人批准」这道闸门立起来了,但用户提出「要改」时,链路还是断的: 1. 改完 PRD,上一版的批准没有失效 ⇒ 改过的 PRD 从未被批准却直接开工(issue #11,用户截图实证); 2. 修成「重出确认单」后加了次数上限(2 次)⇒ 第 3 次直接拒绝,用户只能重开 run、白丢已跑的 PRD; 3. 改写实现是重跑整个 PRD 子代理(新 spawn、从零读需求)⇒ 又贵又漂移:用户只要求改一处, 没提的部分也可能被顺手改写; 4. 放开次数后又发现:confirmApprovedRev 被模型自己写死 ⇒ PRD 永久改不动。 本版把这条链路补完整,并用真机逐环验通。 --- · 2. 变更清单(按 git 对比,逐笔归属) | 提交 | 类型 | 内容 | |---|---|---| | 90012eb | fix | 确认单绑 PRD 版本:改写后批准失效、必须重出单(当时含次数上限) | | c831b07 | fix | 去掉次数上限,改为「版本号 + 上一版快照」 | | ba628a5 | feat | 改写走 continuable 续跑(prd-revise.ts),失败回落重跑 | | ad617c0 | fix | 批准语义:无 supplement 的 resume 必须有显式批准;记账加严 | | 5ca24d9 | fix | prdChildId 必须在摘阶段记录之前取;回落出口全部可见 | | ccd7bb0 | fix | 续跑等待 180s→300s;回落原因拆成三条可区分诊断 | | f8988ed | fix | 快照路径:runDocs 是相对路径,必须拼工作区 | | e93859b | fix | 快照从任务夹移到 logs/teamflow//(不进交付物) | | 7daa91d | fix | 阶段用量必须累计(改写多轮时前几轮 token 不能消失) | | 2c5a933 | fix | 修用量精确翻倍(prdUsageAcc 与 stage.usage 同引用 ⇒ addUsage(a,a)) | | 22aa418 | chore | 用量逐轮留痕 + 重复护栏 | | edde46e | docs | ADR-0011 追加「快照=机器可查的落实证据」 | --- · 3. 真机取证 工具链:dsh --profile web,插件经 deploy.mjs --sync 同步(50 文件),每条 run 均重启宿主后执行。 · 3.1 改写闭环(hy3) | run | 轮数 | 结果 | |---|---|---| | tf-mvchuuvf-j7kmzk | 5 版 | 第 4/5 版走续跑;第 5 版正确删除 --depth、保留 children 与 stdout/stderr | | tf-mvcl5m8t-0qhl8y | 5 版 | 同上;第 3 版曾因 180s 超时回落(后提到 300s) | | tf-mvdeqi60-p48r0f | 4 版 | 每版都命中续跑、零回落 | | tf-mvdhxn6h-87vnog | 3 版 | 11 条 AC 逐条对上两次要求;旧结构字段只出现在说明性语境 | 上下文累积的直接证据:PRD.v1 → v2 → PRD.md 的特征计数 (--depth 0→16、children 0→11),证明第 1 轮加参数、第 2 轮改 JSON 结构的落地情况。 · 3.2 续跑 vs 重跑的成本(同一子代理、按 turn 统计) | 路由 | 轮次 | 每轮新算 input | cacheRead | 耗时 | |---|---|---|---|---| | workbuddy/hy3 | 重跑 / 续跑 ×2 | 217,782 / 203,350 / 231,713 | 27,904 / 7,744 / 2,368 | 122s / 116s / 163s | | deepseek-account/d
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-teamflow TeamFlow 团队研发流水线 —— DeepSeek Harness 可分发插件(用 dsh plugin --profile web add 安装)。 把「用户一句话需求 → 真实研发团队多 Agent 流水线」做成宿主级能力: 需求 → PRD(基于既有模式/产品记忆,文档归档防臃肿) → (UI 改造时)UI/UX 设计 → (新项目时)架构师规划并落地脚手架 + AGENTS.md → 高级全栈工程师技术方案(与派发任务对齐) → 可拆分任务时按并发并行开发 → QA 功能测试(结构化缺陷 → 登记 Bug) → 产品验收(更新产品记忆) 界面预览 1. 全局面板——左侧边栏「🏭 团队工作台」图标(跨会话 / 产品线视角:产品线列表 + run 列表 + Backlog 标签页 + 覆盖式详情浮层) 全局面板 2. 流水线视图——阶段蛇形泳道 + 节点卡片(状态/耗时/token/子代理会话) 流水线视图 3. 阶段详情抽屉——阶段性产物全文 + token 明细 +「🎬 跳转子代理会话」 阶段详情 4. Backlog 看板——需求/任务/缺陷拖拽泳道 Backlog 看板 5. 看板任务详情——任务卡抽屉(需求原文/分配/事件时间线/子卡/缺陷/token) 看板任务详情
展开完整文档(README 剩余 1 节)
dsh-plugin-teamflow

TeamFlow 团队研发流水线 —— DeepSeek Harness 可分发插件(用 dsh plugin --profile web add 安装)。

把「用户一句话需求 → 真实研发团队多 Agent 流水线」做成宿主级能力:

需求 → PRD(基于既有模式/产品记忆,文档归档防臃肿) → (UI 改造时)UI/UX 设计 → (新项目时)架构师规划并落地脚手架 + AGENTS.md → 高级全栈工程师技术方案(与派发任务对齐) → 可拆分任务时按并发并行开发 → QA 功能测试(结构化缺陷 → 登记 Bug) → 产品验收(更新产品记忆)

界面预览

1. 全局面板——左侧边栏「🏭 团队工作台」图标(跨会话 / 产品线视角:产品线列表 + run 列表 + Backlog 标签页 + 覆盖式详情浮层)

全局面板

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

流水线视图

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

阶段详情

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

Backlog 看板

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

看板任务详情

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

团队选择

核心特性

- 一句话需求 → 可验收的交付:从需求到 PRD / 技术方案 / 并行开发 / QA / 验收全链路自动编排,每个阶段有任务卡、有产物、有结论;机械小改动可用 patch / lite 档裁剪阶段集,不必为一行改动跑完整瀑布。
- 多 Agent 团队 + 并行开发:按架构蓝图把需求拆成可并行任务(默认 3 路并发,上限 8),产品 / 架构 / 开发 / QA 各自独立上下文,互不污染。
- 防假交付:交付看证据不看措辞——阶段必须给出「命令 + 退出码 + 断言数」的验证证据,QA 有独立对抗探针,验收只认显式结论行(缺失即停线转人工)。
- QA 打回闭环:P0–P2 缺陷自动打回修复 → 复验(≤2 轮),每条缺陷都带「检测命令 + 通过判据」;超限转人工,不会伪装成「已完成」。
- 断点续跑 + 完成汇报:进程崩溃 / 重启后从第一个未完成阶段继续(已完成阶段复用产物);流水线结束时自动把汇总(状态 / 阶段 / token / 后续指引)投递回发起会话。
- 你的仓库保持干净:流水线文档收口在 docs/teamflow/ 任务夹,插件自己的运行日志在 run 结束时归档出项目,收口提交只带代码 + 任务夹(一个 run 一个 commit,不需要你预先配置 .gitignore)。若历史提交里已经混进过 logs/teamflow/,在目标仓库执行 git rm -r --cached logs/teamflow 移出即可(本地文件保留)。
- 🏭 团队工作台(Web 双入口):会话内 tab(流水线图 + 拖拽看板 + 成本中心 + 人工介入中心)与应用级主面板(产品线视角,跨会话可用);点开 run 看阶段、token、验证证据与产物。界面中英双语,跟随宿主语言实时切换;host 侧的回复、流水线日志与产物文档同样跟随语言(run 起跑时定一次,同一条 run 内一致)。
- token 有账可查:按官方口径记录每个阶段的输入(未命中 / 命中)/ 写缓存 / 输出与调用数,并给出缓存命中率,汇报与看板同口径;机械阶段自动降档推理强度,重试时回升。

AGENTS.md 最小侵入原则(重要)

AGENTS.md 会被 harness 无条件注入每个会话,是团队资产。TeamFlow 遵循职责分离:

- AGENTS.md 只放稳定共识层:团队角色流程、工程约定、文档索引、 托管区(仅指针)。
- 产品记忆/待办放独立活文档 docs/teamflow/memory.md(按需读取,不注入每次会话 → 省 token)。
- 已有项目接入:检测到 AGENTS.md 已存在 → 绝不重写/重排/覆盖,仅在文末追加托管块(若没有);团队原有约定一行不动。
- 退出干净:团队停用 TeamFlow 后,删除托管块与 docs/teamflow/ 即完全复原,AGENTS.md 无残留账本。

架构(阶段 3)

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 Harness(dsh)宿主,web profile(插件含浏览器端工作台,client 面向 web 平台);
- Node.js ≥ 22.18;
- 依赖宿主提供的 @deepseek-ai/dsh- 与 react(peerDependencies,宿主注入,无需单独安装)。

版本锚定(dsh 宿主兼容性)

基线 dsh v0.2.1-rc.5(发布线最新 rc),下限 v0.2.1-rc.5,上界 <0.3.0。

⚠️ 订正(2026-10-15,issue #20)—— 下限由 v0.1.7-alpha.1 抬到 v0.2.1-alpha.2,不再向下兼容。
宿主在 alpha.2 把扁平入口 subagents.start(name, request) 整体删除(提交 3d852a1cea,首个含它的 tag 即 dsh-v0.2.1-alpha.2;官方迁移指南 docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/),唯一入口改为 startActivation(spec),且回执不再携带活 Agent 句柄(localAgent)。旧宿主上的症状是「起得来、第一个阶段就 TypeError」——所以从本版起要求 dsh ≥ 0.2.1-alpha.2。

⚠️ 再抬(2026-11-01)—— 下限由 v0.2.1-alpha.2 抬到 v0.2.1-rc.5。 发布线已推进到 v0.2.1-rc.5;本插件在 rc.5 及之后的 0.2.x(含实测运行的 0.2.2-alpha.2)上逐项验证通过。

engines.dsh 声明为单区间 ">=0.2.1-rc.5 <0.3.0"。此前下限为 0.2.1-alpha.2;下限与当前宿主同一 tuple,单区间即可(预发布只能匹配同 tuple 的比较器,而 0.2.1-rc 与 0.2.2-alpha 同属 0.2 tuple,includePrerelease 下均匹配)。semver 实测矩阵:

| 宿主版本 | >=0.2.1-rc.5 <0.3.0 |
| 0.2.1-rc.4 | ✗ false |
| 0.2.1-rc.5 | ✓ true |
| 0.2.1 | ✓ true |
| 0.2.2-alpha.2 | ✓ true |
| 0.3.0 | ✗ false |

⚠️ 订正(2026-10-15,同上):本 README 此前写「宿主不校验 engines.dsh」是错的。
宿主 @deepseek-ai/dsh-app-boot 装载 profile 时会校验它(packages/boot/app-boot/src/profile.ts 的 evaluatePluginCompatibility):不满足的 bundle 被跳过并记入 skippedBundles(原因随诊断输出),也可用 dsh plugin allow-version 按「精确插件版本 × 精确宿主版本」豁免。这个字段现在是真正的门禁,不再只是兼容声明 —— 旧宿主上装本版插件会被宿主挡在装载阶段并说明原因,而不是跑起来才炸。

0.2.0 逐项核对:未发现破坏(tsc 对着已装的 0.2.0-rc.2 编译 0 错;实际 import 的 4 个宿主包导出 0 缺失;inject 语义、manifest schema、patch 的 insert: 均未变;新增的可选 external 本插件用不上)。⚠ 这是静态核对,运行时仍以重启实测为准。

可能受益:0.2.0 的 Windows ACL 修复(可重测「E: 盘 fresh 目录 grantWrite 必败 Win32 5」);user-questions 的定时等待与迟到回复(澄清闸门需复验调用契约)。
升级 dsh 后若行为异常,先核对两处:① 注入的 session 事件必须用 producer-owned 的 source.kind='plugin:dsh-plugin-teamflow'(v3 的 plugin wrapper 已退役);② 计量读宿主投影 key(tokenUsage / sessionStats),宿主改 key 时需同步 host/core/metering.ts。历次兼容核对的逐项证据见 CHANGELOG.md(v0.1.6 / v0.1.7 / 0.2.0 三次审计)与 docs/TODO.md。

安装(对使用者)

推荐在应用内的「插件」页安装 —— web 与桌面版是同一个页面:左侧边栏「插件」→ 右上「添加插件」(或「更多 → 安装第三方插件」)→ 输入 npm 包名(dsh-plugin-teamflow)、GitHub 仓库地址或本地目录路径。

⚠️ 两端各装一次:桌面版(dsh 0.2.0 起)用独立的 desktop profile(~/.dsh/profiles/desktop),与 web 各自一份 node_modules —— 只装在一端,另一端看不到本插件(不是插件坏了)。
页面本身两端通用,差别只在装到哪个 profile。

命令行是等价替代(便于脚本化 / 批量环境;桌面版 CLI 不接受 --profile desktop):

从 npm 安装 —— 装到 web profile
dsh plugin --profile web add dsh-plugin-teamflow

本地源码目录(开发时)
dsh plugin --profile web add file:./plugins/dsh-plugin-teamflow

安装后重启 dsh --profile web(桌面版则重启桌面应用),宿主行 teamflow-host 生效:
- 模型侧出现 12 个 teamflow_ 工具:start / triage / status / backlog / claim / update / assign / cancel / resume / pause / resume_session / merge;
- 浏览器侧:会话头部「🏭 团队工作台」tab(会话内)+ 左侧边栏「团队工作台」图标(全局面板,产品线视角);
- backlog 写入 $DSH_HOME/teamflow/<product>/backlog/.json。

注意:@deepseek-ai/ 为宿主私有包,运行需 DeepSeek Harness(dsh)宿主环境;本包不发布也无法独立运行。

升级(对使用者)

0.2.8 起,插件会自己告诉你有新版本(无需盯着发布页):

- 打开团队工作台时,顶部出现「有新版本 x.y.z」提示条;
- 左侧边栏全局面板头部有「检查更新」按钮(手动查,绕过缓存);
- 「插件」页里本插件旁会出现新版本徽标(web 与桌面版同一个页面)。

三处都在两端可见(web 走浏览器、桌面版走应用),但升级动作各归各的 profile:web 用下面的命令,桌面版在应用内的「插件」页操作(CLI 不接受 --profile desktop)。

registry 安装(npm 装的)可直接一键升级:点提示条上的「升级到 x.y.z」→ 确认 → 升完重启 dsh --profile web(桌面版重启桌面应用)。本地 / git / tarball 安装不会给一键(一键会把依赖悄悄换成线上版本),只给可复制的命令。

ℹ️ 为什么值得用这个而不是卸载重装:宿主「插件」页的「更新」只给官方插件,第三方插件(含本插件)在宿主的口径里是「请先卸载再安装新版」(见宿主插件页提示)。本插件在页面上贡献的徽标与「升级」按钮就是补这个缺口:不用卸载,依赖由宿主服务原地更新。

命令行升级(等价替代,便于脚本化):

web profile
dsh plugin --profile web add dsh-plugin-teamflow@latest

桌面版请在应用内「插件」页操作(CLI 拒绝 --profile desktop)

不想被提示某一版?提示条上有「跳过这一版」——跳过的是具体版本号,更新的版本出现时仍会提示。

快速上手

1. 选团队:会话输入框旁点「🏭」按钮,选择团队(或选「无团队」= 不走流水线,直接对话);
2. 发需求:直接说需求,模型会自动调用 teamflow_start(自动分诊模式:patch / lite / tech / medium / full)——也可以用「直接跑 medium 模式做这个」等指定档位;
3. 看进展:会话头部切到「🏭 团队工作台」tab——流水线图实时刷新(每阶段 token / 耗时 / 子代理会话),Backlog 看板可拖拽流转、点卡片看详情;点「⇥ 右栏打开」把该 run 详情放到右侧栏(与任务夹产物并排)。想看跨会话/全局的情况,点左侧边栏「团队工作台」图标(产品线视角:产品线 → run 列表 + backlog);
4. 收结果:流水线完成后自动向当前会话汇报(状态 / 阶段统计 / token / 后续指引);中断/失败的运行可「↻ 从断点重跑」。

使用规则提醒:teamflow_start 调用后主线程不要自行改代码或跑验证——实现、QA、汇报由流水线各阶段子代理完成(避免与流水线抢活)。

卸载(对使用者)

dsh plugin --profile web remove dsh-plugin-teamflow

重启 dsh --profile web 后插件完全移除(模型侧 teamflow_ 工具与「🏭 团队工作台」tab 消失)。

可选清理(卸载不会自动清,按需执行):
- 运行数据:删除 $DSH_HOME/teamflow/(backlog / 运行记录,删除前确认不再需要)。
- 项目痕迹:若某项目用过 TeamFlow,删除该项目 AGENTS.md 中的 托管块与 docs/teamflow/ 目录,即可完全复原(AGENTS.md 最小侵入原则的"退出干净")。

开发与验证

bash
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~0010)与基准对比(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 触发(会话级,新会话自动重置) |

License

MIT —— 详见 LICENSE。
预览分享卡片长什么样 ↓MichaelShii/dsh-plugin-teamflow
分享 · DeepSeek Harness Hub
MichaelShii/dsh-plugin-teamflow

团队研发流水线插件DeepSeek Harness:需求 → PRD → 设计 → 开发 → QA → 验收,断点续跑…

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部