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

队友模型路由 Lingrui98/dsh-plugin-team-model-routing

DeepSeek Harness
Lingrui9817 天前有提交已提供中文文档扫描:未发现敏感能力

为每个队友单独指定模型与推理强度

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Lingrui98/dsh-plugin-team-model-routing
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · model
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件:让 Agent Teams Lead 为它派生的每个队友选择服务商、模型和推理强度。

README

由 DeepSeek 最新模型翻译生成
Team Model Routing(dsh-plugin-team-model-routing) 让 Agent Teams 的 Lead 在创建 teammate 时指定它的 provider、model 与 reasoning_effort,并按 Subagent 模型选择白名单校验。 为什么必须做成插件 官方 spawn_teammate 没有路由参数,而 ctx.agentTeams.spawnTeammate() 只把一个 provider 名字传给 ctx.subagents.startContinuable() —— agentOptions 在后者手里。 teammate 是 continuable 子代理:continuation registry 直接通过 ctx.agents.create() 物化它,永远不会调用 subagent provider 的 start()。 所以"包装一个 subagent provider"这个最直觉的做法根本路由不了一个 teammate ——包装器压根不会被要求启动它,teammate 会静默落在继承来的路由上。
展开完整文档(README 剩余 1 节)
Team Model Routing(dsh-plugin-team-model-routing)

让 Agent Teams 的 Lead 在创建 teammate 时指定它的 provider、model 与 reasoning_effort,并按 Subagent 模型选择白名单校验。

为什么必须做成插件

官方 spawn_teammate 没有路由参数,而 ctx.agentTeams.spawnTeammate() 只把一个 provider 名字传给 ctx.subagents.startContinuable() —— agentOptions 在后者手里。

teammate 是 continuable 子代理:continuation registry 直接通过
ctx.agents.create() 物化它,永远不会调用 subagent provider 的 start()。
所以"包装一个 subagent provider"这个最直觉的做法根本路由不了一个 teammate ——包装器压根不会被要求启动它,teammate 会静默落在继承来的路由上。

真正可用的接缝

spawn_teammate_routed 按 (Lead, teammate 名, context) 记录路由 ↓
agentTeams.spawnTeammate(...) 官方 Team 服务,契约不变
↓
ctx.agents.create() 子代理物化;初始 prompt 进入 inbox
↓
agent/pre-step(子代理作用域) ← 插件:claim 路由并改写 child.options ↓
AgentLoop.prepareRequest() 每步读 this.options → 进入 request/header、
assistant 消息的 model source、以及后续每一步

成立的两个事实(都在已安装源码里核对过):

- agent/pre-step 是 awaited waterfall,跑在 step() → prepareRequest() 之前 (dsh-agent-loop/lib/index.js:902-925 → 978 → 1050)。
- prepareRequest() 每一步都重读 this.options (dsh-agent-loop/lib/index.js:1168-1173),且 loop 与 Agent 对象共享同一个 options 引用(:774、:1739)。

反方向的顺序同样关键:子代理的初始 prompt 是 create 之后才投递的,而 transcript 记录只在那一步内部才发生;所以 teammate 名字必须从该步的 claimed messages (payload.messages)里取,transcript 只作 resume 的兜底。在 agent/created 时读 session 快照什么也读不到 —— 这是第一版实现的致命缺陷。

工具

| 工具 | 用途 |
| spawn_teammate_routed | 契约同 spawn_teammate,额外支持 provider / model / reasoning_effort。三个都不传即继承 Lead 路由。 |
| list_teammate_models | 列出可选 provider;给出 provider 后列出可选模型;再给出 model 后列出它的 reasoning efforts。 |

两者都装在 Lead 自己的 Agent scope(不装全局),teammate 看不到它们。

白名单

当 @deepseek-ai/dsh-tool-subagent/model-selection-settings 为 enabled: true 时, allowedModels 之外的显式路由会在 teammate 被创建之前拒绝。纯继承从不受限;白名单 enabled 但为空时是所有路由都不可选,而不是连继承一起失败。

路由还会经过 llm.resolveCallConfig() 校验,所以未知模型或不支持的 effort 会直接以 adapter 自己的报错失败,而不是拖到某个 turn 才炸。

配置

- id: team-model-routing
name: 'dsh-plugin-team-model-routing'
config:
toolName: spawn_teammate_routed
listToolName: list_teammate_models
freshProvider: spawn
forkProvider: fork
routeTtlMs: 120000

freshProvider / forkProvider 是交给官方 Team 服务的 provider 名,必须是已注册的 subagent provider(spawn、fork)。

已知限制

- 路由只存在于进程内存。 它在子代理于本进程创建时生效。Harness 重启后被冷 resume 的 teammate 会退回其 subagent/descriptor 里记录的 agentOptions。要让它跨重启存活需要一份持久记录,这是自然的后续工作。
- agent.options 是运行时对象,不在公开的 Agent 接口里。正因为要改写它,这件事才只能做成插件而不是一行改动;上游的正解是让 provider 通过 ContinuableCreateSpec 贡献 agentOptions(或让 Team 的 spawn 请求直接接受它)。上游仓库不接受外部 PR,所以路径是发布 dsh-plugin 并在 Discussions 提出这个 API 缺口。
- 一条从未被 claim 的路由(例如子代理存在之前就失败的 spawn)会在 routeTtlMs 后过期,无副作用。

测试

node packages/team-model-routing/test/logic.test.mjs

18 项检查,覆盖路由校验、白名单、发现渲染、claim 存储、名字提取。它只覆盖 logic.js —— agent/pre-step 那个接缝需要真实运行才能验证。

安装

已发布到 npm:dsh-plugin-team-model-routing;源码在 Lingrui98/dsh-plugin-team-model-routing。

npm install dsh-plugin-team-model-routing

或者让插件管理器指向已安装的包名 / 工作区目录:

plugin_manager({ action: 'install_bundle', target: 'dsh-plugin-team-model-routing' })

安装只加载一次模块;由于 Node 按解析路径缓存 ES module,替换本包代码需要重启 Harness 才会在运行中的进程生效。

仓库结构

index.js Cordis Host 插件:工具、路由钩子、Provider 装配 logic.js 零依赖的路由/claim 逻辑(有单测) cordis.patch.yml Loader patch:本插件行 + tool-agent-team 配置
locale/{en,zh}.json Plugin Manager 展示文案
test/logic.test.mjs 18 项逻辑测试(不打进 npm tarball)

npm pack 产物:index.js、logic.js、cordis.patch.yml、icon.svg、 locale/*.json、LICENSE、两个 README。

已实测

在 desktop profile、2026-10-15、profile 的 subagentModelSelection 白名单开启下观察:

| 验证点 | 证据 |
| 指定路由确实到达子代理 | spawn_teammate_routed({ provider: 'model-server', model: 'glm-5.3', reasoning_effort: 'high' }) → host 日志 team-model-routing: teammate "confirm-route" now runs on model-server/glm-5.3 (effort high);且 list_agents 里该 teammate 为 model: "glm-5.3",而 Lead 是 gpt-6.1-sol、profile 默认是 bosc/deepseek-flash |
| list_agents 读回生效路由 | 被路由的 teammate 显示改写后的 model;在本插件之前创建的 teammate 则显示继承来的 gpt-6.1-sol |
| 白名单在创建前拦截 | spawn_teammate_routed({ provider: 'bosc', model: 'gpt-5.6-luna' }) → Error: teammate LLM route "bosc/gpt-5.6-luna" is not allowed by the Subagent model-selection allowlist; allowed: model-server/glm-5.3, kimi-code/k3, bosc/gpt-5.6-sol, model-server/kimi-k3, bosc/deepseek-flash,没有创建 teammate |
| 两个工具都在 Lead 作用域生效 | Tool.listTools 同时列出 spawn_teammate_routed(含三个路由参数)与 list_teammate_models |

live 未覆盖:fork 上下文,以及 teammate 冷 resume 后的路由保持(见"已知限制")。

发布新版本

本包是 dsh-plugin 形态:dsh.bundle.patch 指向 cordis.patch.yml,manifest 带展示用 meta、icon.svg、locale/{en,zh}.json,并且是 type: module。发布流程:

1. 改 package.json 的 version(npm 不允许重复发布同一版本)。
2. node test/logic.test.mjs —— 18 项必须全过。
3. npm pack --dry-run —— 确认 tarball 就是「仓库结构」里列的 10 个文件。
4. npm publish —— npm 账号开了 2FA,所以要带 --otp=,或改用勾了 bypass 2FA 的 granular token。需要验证码时当场问,不要把它存下来。
5. git commit 并 git push。
6. 若包名有变,同步修改 cordis.patch.yml 里的 name: —— Loader 按这个字符串解析行。

推动上游修复

本包里的 agent/pre-step 改写,是在绕过一个缺失的上游扩展点:continuable 子代理的 provider 无法贡献 agentOptions,因为 continuable 子代理根本不会调用 provider 的
start()。如果该缺口被补上,本包保留工具与发现部分,删掉那段绕行即可。

上游仓库不接受外部 PR,所以提出方式是 GitHub Discussion。可直接发帖的文稿在工作区的 proposal/ 目录(不打进 npm tarball):

- proposal/discussion-post.zh.md —— 帖子正文(中文,可直接复制)。
- proposal/upstream-continuable-agent-options.zh.md —— 完整提案,含精确代码路径与测试点。
- proposal/upstream-continuable-agent-options.md —— 英文版。

发到 deepseek-ai/deepseek-harness → Discussions → Show Your Plugins!(介绍本包)或 Ideas(提 API 缺口)。注意在该仓库建 Discussion 需要对它有写权限,外部贡献者没有,所以这份文稿是给人手动粘贴用的。
预览分享卡片长什么样 ↓Lingrui98/dsh-plugin-team-model-routing
分享 · DeepSeek Harness Hub
Lingrui98/dsh-plugin-team-model-routing

为每个队友单独指定模型与推理强度

回到顶部