Repository navigation
Replies: 2 comments
|
Both gaps are confirmed at source in Gap 1 — no route pinning. Gap 2 — the roster shows the Lead's model. The source is const model = live?.options.model ?? root.options.modelso an idle member falls back to the root's route exactly as you describe, while the durable One correction to the workaround. A seam that avoids Caveat worth stating: pinning at request time applies to every request the teammate makes, so adding |
|
Cross-reference: the same gap is tracked in #6985 "Model selection in agent-teams" (2026-09-17), where two community plugins are already listed as workarounds — probably worth consolidating there so maintainers see one thread. Confirming argszero's readings independently against the packaged runtime (
One safety note for whoever wires the roster fallback: that fallback is not merely cosmetic. For a running member the vendor reports the live model; only the no-live-agent case ( On |
Uh oh!
There was an error while loading. Please reload this page.
Feature/behavior request. Note: this repository's issue tracker is disabled (HTTP 410), so this is filed as a Discussion.
Summary (EN)
Two related gaps in the Agent Teams stack, both verified against
@deepseek-ai/dsh-desktop@0.2.0-rc.2:spawn_teammatecannot pin a teammate's LLM route. The tool schema takesonly
name/description/prompt/context(
@deepseek-ai/dsh-experimental-tool-agent-team/lib/index.js:245-266) and theTeam runtime builds its subagent request as
{ prompt, parent }only(
@deepseek-ai/dsh-experimental-agent-team/lib/index.js,spawnAdmitted,around lines 544-582). The child route is resolved inside
startContinuableviaresolveChildAgentOptions(parent, request.agentOptions, depth)before any provider hook (@deepseek-ai/dsh-subagent/lib/types/ continuation.js:101-170), soagentRouteDefaultscannot reach this patheither (it is consumed only by
dsh-tool-subagent). Net effect: everyteammate inherits the Lead's route, and heterogeneous teams are impossible
without switching the Lead's own model between spawns.
The roster shows the wrong model for idle teammates.
roster.list()computes
const model = live?.options.model ?? root.options.model(
@deepseek-ai/dsh-experimental-agent-team/lib/index.js:448-449), so once ateammate has no live activation,
list_agentsdisplays the Lead's model —even though the teammate's real route is durable in its session's
subagent/descriptor(agentProvider/agentModel/agentReasoningEffort), andcold resume correctly restores it from there
(
dsh-subagent/lib/types/continuation.js:355-374). Verified with realsessions: a teammate spawned pinned to
grok/grok-4.7@xhighhad both itsinitialandresumerequests on that route whilelist_agentsshowed theLead's
deepseek-flash.Reproduction
session runs on model B (e.g. via the local workaround plugin below, or by
switching the Lead's model around the spawn).
inactive).list_agentsshows the teammate on model A. The child session'srequest/headerevents (bothinitialandresume) prove model B.Suggested fixes
startContinuablereturn the resolved child route(or let the Team runtime read it back), store it on the member snapshot, and
make
roster.list()fall backlive?.options.model ?? member.model ?? root.options.model. Alternatively resolve the model from the member session'ssubagent/descriptoron demand.provider/model/reasoning_effortparameters to
spawn_teammateand forward them asagentOptionsinto thespawn request. The runtime side already honors
request.agentOptions; onlythe tool/service layer needs the pass-through.
spawn_teammate_modeledin theworkaround below is a working reference implementation of the semantics
(including a
forkcontext that must keep using the fork backend).Workaround in use today (local plugin, not a vendor patch)
dsh-teammate-model-routes(local profile bundle): wraps the rawsubagents.startContinuable(resolved viactx.reflect._getImpl(...).value,because
ctx.get()returns a traceable Proxy that swallows property writes) andinjects
agentOptionsonly inside anAsyncLocalStoragescope opened by itsspawn_teammate_modeledtool for exactly that caller/label (consume-once); italso records
childId -> pinned routeand wrapsagentTeams.listMemberstocorrect the idle display. If DSH adopts the native fixes above, the plugin can
be retired.
Environment
@deepseek-ai/dsh-desktop@0.2.0-rc.2(Electron desktop profile, Windows)numbers) available on request.
中文摘要
Agent Teams 两个相关缺口(针对 0.2.0-rc.2,均有源码行号与会话级证据):
spawn_teammate无法按席指定模型:工具层无路由参数,Team runtime 只向startContinuable传{prompt, parent},且路由在 provider 钩子之前就已按“继承父会话”定死——队友永远继承 Lead 的模型。
roster.list()在队友无驻留进程时回退显示 Lead 的模型,而真实路由其实持久在子会话
subagent/descriptor里(冷恢复也据此还原),造成
list_agents与实际请求路由不一致。建议:(a)
startContinuable回传解析后的路由(或 Team 落入成员快照),list()三级回退;(b)spawn_teammate增加可选provider/model/ reasoning_effort并透传agentOptions(runtime 已支持)。本地已有可退役的参考实现(dsh-teammate-model-routes)。
All reactions