为队友指定模型并随时切换,支持嵌套管理者与工人
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add funk80rus/dsh-agent-teams-model-override该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
模型选择、模型切换,以及 DeepSeek Harness 智能体团队中真正的嵌套管理者/工作者团队。
README
由 DeepSeek 最新模型翻译生成dsh-agent-teams-model-override
一个为 DeepSeek Harness Agent Teams 提供的小型、失败即关闭的扩展,新增:
1. 创建队友时选择模型 —— spawn_teammate_with_model 接受 provider、model 和 reasoning_effort;队友在后续轮次和冷恢复中保持该路由。名册报告会话的真实模型,而不是配置档默认值。
2. 真正的嵌套团队 —— 管理者可以创建自己的工人,使用真实的 Session.header.parentSession = manager,共享 Lead 的任务板,在自己的区域内委派工作,并中断自己的工人。嵌套记录从 Team 面板打开。
3. 为在线队友切换模型 —— switch_teammate_model 在下次请求时更改现有队友的路由,不创建新成员,也不丢失历史。
它是官方 Agent Teams 包的薄扩展。它不实现第二个编排器,不复制任务板转换,也不替换原生可续子代理生命周期。当官方 spawn_teammate 自己学会这些参数时,这个包就可以消失。
状态:1.6.0。 201 个测试针对 DSH 0.2.1-rc.2 通过。创建/模型路径已实机验证。
展开完整文档(README 剩余 1 节)
dsh-agent-teams-model-override
一个为 DeepSeek Harness Agent Teams 提供的小型、失败即关闭的扩展,新增:
1. 创建队友时选择模型 —— spawn_teammate_with_model 接受 provider、model 和 reasoning_effort;队友在后续轮次和冷恢复中保持该路由。名册报告会话的真实模型,而不是配置档默认值。
2. 真正的嵌套团队 —— 管理者可以创建自己的工人,使用真实的 Session.header.parentSession = manager,共享 Lead 的任务板,在自己的区域内委派工作,并中断自己的工人。嵌套记录从 Team 面板打开。
3. 为在线队友切换模型 —— switch_teammate_model 在下次请求时更改现有队友的路由,不创建新成员,也不丢失历史。
它是官方 Agent Teams 包的薄扩展。它不实现第二个编排器,不复制任务板转换,也不替换原生可续子代理生命周期。当官方 spawn_teammate 自己学会这些参数时,这个包就可以消失。
状态:1.6.0。 201 个测试针对 DSH 0.2.1-rc.2 通过。创建/模型路径已实机验证。1.6.0 的管理者中断和嵌套记录路径由针对已安装运行时的契约测试覆盖;实机 UI 验证仍待进行,因此将这两条路径视为候选发布行为。
要求
| 要求 | 值 |
| DeepSeek Harness | 桌面版 0.2.1-rc.2(已测试),也支持 0.2.0-rc.2 |
| 官方包 | Agent Teams 已安装并启用 |
| Node.js | 22+(仅开发用;已安装的 Host 提供自己的运行时) |
| 配置档 | 任意;该包是普通 DSH 包 |
插件在安装前检查私有运行时接缝。如果已安装的 DSH 不再匹配编写时所依据的契约,受影响的组件拒绝安装,并将原因写入 Host 日志,而不是在轮次中途失败。
安装
从 DSH 插件管理器(推荐)
1. 确保官方 Agent Teams 包已安装并启用。
2. 在 Creator Mode 中打开 Plugin Manager,选择 Install bundle。
3. 输入 GitHub spec:
github:funk80rus/dsh-agent-teams-model-override
4. 启用 dsh-agent-teams-model-override。Components 中出现三行组件;每行有自己的开关:
| 组件 | 新增内容 |
| agent-teams-model-override | spawn_teammate_with_model,准确的名册模型 |
| agent-teams-manager | spawn_team_worker,区域任务委派,管理者中断,嵌套记录 |
| agent-teams-teammate-model | 为运行中的队友提供 switch_teammate_model |
已提交的 runtime/<hash>/ 图就是 Host 加载的内容。GitHub 安装不需要构建步骤。
从命令行
DSH_HOME="${DSH_HOME:-$HOME/.dsh}"
PROFILE="$DSH_HOME/profiles/<profile>" # e.g. desktop
cd "$PROFILE"
pnpm add github:funk80rus/dsh-agent-teams-model-override
然后通过 Plugin Manager 界面启用这个 bundle,或者在 DSH 会话里执行:
plugin_manager { action: "set_bundle", target: "dsh-agent-teams-model-override", enabled: true }
如果 pnpm 因为 release-age 策略拒绝全新的 git 依赖,改用 Plugin Manager 安装,或者在那条命令上单独传 --config.minimumReleaseAge=0。
这个包没有发布到 npm,并且标记为 "private": true;分发渠道是 GitHub。
用法
为新队友挑选模型
先问 Host 哪些路由可用:
list_subagent_models({})
list_subagent_models({ provider: "opencode-go" })
list_subagent_models({ provider: "opencode-go", model: "glm-5.3-flash" })
然后创建队友:
spawn_teammate_with_model({
name: "reviewer",
description: "Independent review of the implementation",
prompt: "Review the implementation and report concrete defects.",
context: "fresh",
provider: "opencode-go",
model: "glm-5.3-flash"
})
* provider 和 model 必须一起提供。reasoning_effort 可选,会按该模型实际声明的 effort 校验。
* 三者全部省略,就完全沿用委派智能体的路由,行为与官方 spawn_teammate 一致。
* 路由未知,或者不在配置档的子代理模型允许列表里,会直接报错拒绝;绝不会悄悄回退到父模型。
* 选模型不会带来额外的委派权限。限制、深度、成员名额、工具权限都不变。
创建真正的 manager/worker 层级
// Lead: create a manager with the normal or model-aware tool
spawn_teammate({ name: "mg-1", description: "Release manager", prompt: "..." })
// mg-1, from its own scope:
spawn_team_worker({ name: "w-1", description: "Worker", prompt: "..." })
// The worker is a teammate in the same team, but its durable parent is mg-1:
// list_agents, the shared task board, send_message and cold resume all see it.
Lead 也可以显式指定真正的父级:
spawn_teammate_with_model({ name: "w-2", ..., manager: "mg-1" })
分配并跟踪任务:
team_task_assign({ subject: "Fix the parser", description: "...", owner: "w-1" })
team_task_list({})
team_task_update({ task_id: "task-7", expected_revision: 2, action: "complete" })
team_hierarchy({})
manager 只能在自己的实际后代区域内改任务(区域按持久化的 parentSession 头计算,不看声明的标签)。超出这个区域,调用会失败并返回 TEAM_TASK_OUT_OF_ZONE;claim 永远不会放宽,Lead 不受影响。
停止 worker
interrupt_agent({ target: "w-1" })
管理者只能中断自己的后代;Lead 可以中断任何人。区域检查之后,原生 interrupt 操作仍以真正的 Lead 身份执行,因此官方语义得以保留:当前回合停止,待处理的 inbox/activation 保留,下一条消息会让 worker 重新启动。中断自己返回 TEAM_INTERRUPT_SELF;目标无关则返回 TEAM_INTERRUPT_OUT_OF_ZONE。
切换运行中队友的模型
switch_teammate_model({
target: "w-1",
provider: "opencode-go",
model: "qwen3.8-flash"
})
成员保留自己的 id、名称、历史、journal 条目和看板任务。只有下一次请求会走新路由。官方会话控制器会追加持久的 model/selection 事件,所以冷恢复后改动依然有效。响应会说明走了哪条路径:
* via: "session-controller" —— 立即提交;
* via: "pending" —— 队友未加载;下次启动时应用该路由。
target: "lead" 会改变 Lead 自己的路由。管理者可以切换自己区域内的成员;没有区域的叶子队友根本拿不到这个工具。
组件与配置
三行都由 cordis.patch.yml 插入,并选用同一份不可变图 runtime/<hash>/,因此组件版本永远不会彼此漂移。
- insert:
- id: agent-teams-model-override
name: './runtime/<hash>/plugin.js'
config: { force: false, rosterModel: true }
- id: agent-teams-manager
name: './runtime/<hash>/manager-component.js'
config: { nestedTeams: true }
- id: agent-teams-teammate-model
name: './runtime/<hash>/teammate-model.js'
config: { switchModel: true }
* force —— 即使路由接缝缺失也安装(不推荐;组件将无法交付路由)。
* rosterModel —— 只把 roster 行的 model 字段替换为会话的有效模型。
* nestedTeams —— 启用真正的嵌套管理者/worker,以及区域任务/中断权限。
* switchModel —— 注册 switch_teammate_model。
禁用某一行会立即移除它的工具和影子。只要还有另一行处于加载状态,禁用管理者行不会破坏已创建的嵌套成员;读/恢复桥接采用引用计数。
不要把这些行加到配置档自己的 cordis.patch.yml 里。 配置档级别的插入会让插件在 set_bundle(enabled: false) 之后仍然存活,导致 bundle 无法干净地禁用。只用包内的 cordis.patch.yml,由 bundle 加载器应用。
工作原理
更完整的说明见 docs/ARCHITECTURE.md。
* 路由注入按调用生效。 选中的路由存放在一次工具调用创建的 AsyncLocalStorage 存储中,由第一个父级为该委派智能体的 startContinuable / startActivation 恰好消费一次。不会改动任何全局状态。
* 嵌套创建复用官方准入路径。 桥接层以真实 Lead 身份调用原始 roster.spawn(名称检查、成员上限、journal 根目录、provisioning),随后在原生启动前一刻把 request.parent 改写为 manager。子会话拿到真实 parentSession、manager 的目录,以及共享的团队 journal/board。
* 权限区来自真实血缘。 任务与中断权限由 parentSession 头计算,不依赖装饰性层级记录。manager 无法给自己授予对另一个 manager 子会话的权限。
* 嵌套会话记录打开是读侧修复。 Team 面板以 parent = Lead 请求历史;对嵌套 worker 来说,持久父级是 manager,因此 Host 以 subagent/unauthorized 拒绝。组件只包装 sessionController.page 和 follow:如果传入的 parent 是实际 parent 的真实祖先,就把地址改写为实际 parent;否则请求保持不变,Host 仍然拒绝。
* 模型切换走官方提交路径。 会话控制器上的 selectForNextRequest 追加持久选择并重新安装路由监听器。如果该方法不可用,工具会报告 via: "session-append" 并附一条警告,而不是假装路由已改变。
* 交付按图版本化。 npm run build 把 lib/ 下每个文件哈希进 runtime/<hash>/;包导出与 bundle 补丁始终指向一张完整图。Host 从不直接加载可编辑的 lib/ 文件。
限制
以下是已知且经过测试的限制,不是猜测。
1. 私有运行时接缝。 嵌套团队依赖已安装的 Agent Teams/subagent 内部实现(roster.spawnAdmitted、激活注册表、delivery 符号、会话控制器)。未来 DSH 若改动它们,组件会以失败关闭方式报错,并在 Host 日志中给出原因。这不构成向前兼容承诺。
2. 不能删除或重命名队友。 官方 roster 只追加。failed 的创建仍消耗名称与槽位。Lead 会话有 16 个队友槽位(Lead 单独计算);context: "fresh" 创建新成员,不复用旧成员。
3. 没有真正的上下文清除。 GUI 里的 /compact 只总结历史,不擦除历史。唯一干净的起点是带 context: "fresh" 的新队友。1.6.0 中没有给队友用的 /clear 工具。
4. 嵌套 worker 回复的是 manager, 不是 Lead。这是真实 parentSession 的后果。worker 必须回答 Lead 时,显式调用 send_message({ target: "lead" })。
5. 待定模型切换在内存中。 如果 Host 在 switch_teammate_model 返回 via: "pending" 之后、队友下次启动之前重启,请重做切换。
6. context: "fork" 加上已改变的路由 可能阻止服务商复用继承的对话前缀。这与官方子代理分叉是同一个取舍。
7. 管理者的权限按区域划分,不是全局的。 管理者只能操作真正的后代。它不能抢占其他成员的任务,不能跨管理者重新分配,也不能操作 Lead。team_hierarchy_set 无法在物理上重新指定现有会话的父级。
8. 1.6.0 有两条 UI 路径仍需实机验证。 管理者中断和 Team 面板嵌套记录打开已针对已安装名册和假会话控制器测试过,但最终的实机 UI 检查尚未完成(见上文 Status)。
故障排查
| 症状 | 检查项 |
| 启用后没有新工具 | 官方 Agent Teams 包是否已启用?包是否已启用?组件是否记录了 runtimeSupportReport 失败? |
| 管理者返回 TEAM_LEAD_REQUIRED | agent-teams-manager 行被禁用或安装失败。 |
| TEAM_INTERRUPT_OUT_OF_ZONE | 目标不是调用者的真正后代。检查 team_hierarchy。 |
| 打开嵌套记录时出现 subagent/unauthorized | 确认 agent-teams-manager 已在 1.6.0+ 启用;这是读取侧的修复。 |
| 模型没有变化 | 查看响应中的 via 和 warning。session-append 表示官方提交路径不可用。 |
| 在 pnpm 中安装失败 | 使用 Plugin Manager,将 Node 更新到 22+,或对 git 依赖去掉 release-age 策略后重试。 |
| DSH 更新后工具消失 | 私有契约变了;查看 Host 日志中的 fail-closed 原因。 |
开发
npm test # 201 tests; installed-runtime tests skip when DSH is not found
npm run build # writes lib/ into runtime/<hash>/ and rewrites exports + patch
npm run verify # build, then the full suite
* DSH_ASAR 可以指向非默认的 app.asar;否则测试辅助代码会查找 /Applications/DeepSeek Harness.app/Contents/Resources/app.asar。
* 绝不要手动编辑 runtime/<hash>/。 它是内容寻址的。改 lib/,运行 npm run build,然后把新的依赖图连同更新后的 package.json 和 cordis.patch.yml 一起提交。
* 包没有运行时依赖;测试使用 Node 内置的测试运行器。
* 不要把本地日志、配置档快照、会话 id 和绝对家目录路径提交进仓库。
.gitignore 已排除 .diagnostics/、docs/evidence/、docs/rollback/ 和作者的内部笔记。
欢迎贡献;见 CONTRIBUTING.md。
隐私与安全
插件在本地 DSH Host 内以用户权限运行。它自身不发起网络请求,没有遥测,也不读取凭据或 API key。它读取本地会话头和官方服务来计算血缘、路由和历史地址;这些数据留在本机。
它确实会钩住私有运行时接缝,所以请把它当作有特权的本地代码:从信任你提交的代码,报告漏洞前先读 SECURITY.md。
许可证
MIT。见 LICENSE。上游 @deepseek-ai/dsh-* 包同样是 MIT;本包未内嵌它们的代码。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
funk80rus/dsh-agent-teams-model-override
为队友指定模型并随时切换,支持嵌套管理者与工人
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,399未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,384已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13950 个插件含 PR 收录与…
★ 360已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。