为每个队友单独指定模型与推理强度
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 需要对它有写权限,外部贡献者没有,所以这份文稿是给人手动粘贴用的。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Lingrui98/dsh-plugin-team-model-routing
为每个队友单独指定模型与推理强度
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1