
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-plugin-teamflow
Advanced tools
TeamFlow 团队研发流水线(TypeScript):需求→PRD→设计→架构→技术方案→并行开发→QA→验收;backlog 持久化 + 断点续跑 + 完成汇报 + 防假交付;Web 团队工作台(conversation.view tab + 拖拽看板)
中文 | 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.2.1-alpha.4(预览版),下限 v0.2.1-alpha.2。
⚠️ 订正(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。
engines.dsh 声明为单区间 ">=0.2.1-alpha.2 <0.3.0"。此前用并集 ">=0.1.7-alpha.1 <0.3.0 || >=0.2.0-rc.1 <0.3.0",原因是「预发布只匹配同 tuple 区间」——旧下限的 tuple(0.1.7)与 0.2.0-rc.x 不同,单区间会把 rc 判 fail。抬到 0.2.1-alpha.2 后下限与当前宿主同 tuple,单区间即可(semver 7.8.5 实测:alpha.1=false / alpha.2~alpha.4=true / 0.2.0-rc.2=false / 0.2.1=true)。
⚠️ 订正(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 起)用独立的
desktopprofile(~/.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 生效:
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)宿主环境;本包不发布也无法独立运行。
0.2.8 起,插件会自己告诉你有新版本(无需盯着发布页):
三处都在两端可见(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)
不想被提示某一版?提示条上有「跳过这一版」——跳过的是具体版本号,更新的版本出现时仍会提示。
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~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 触发(会话级,新会话自动重置) |
MIT —— 详见 LICENSE。
FAQs
TeamFlow 团队研发流水线(TypeScript):需求→PRD→设计→架构→技术方案→并行开发→QA→验收;backlog 持久化 + 断点续跑 + 完成汇报 + 防假交付;Web 团队工作台(conversation.view tab + 拖拽看板)
We found that dsh-plugin-teamflow demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.