Replies: 1 comment
|
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
摘要(TL;DR)
新建会话(此时已按默认 preset
standardmaterialize)→ 在发出第一条消息之前把模式切成cordis→ 首条消息的工具表里没有subagent,也没有list_subagent_models(65 个工具)。对照:会话创建时就是
cordis(同进程、同 preset)→ 67 个工具,两者齐全。rc.1 与 master 的
tool-subagent/agent-presets代码在相关路径上一致,master 未修复。环境
0.1.5-rc.1(desktop tagdsh-0.1.5-rc.1-34455899979,commitb386d2c4c48850a8beaf72dd18402112c361ad30)web(dsh-base+dsh-web-app),Windowssettings.yaml:agent-presets.default: standard、subagent-model-selection.enabled: truepackages/subagent/tool-subagent/src/index.ts、packages/preset/agent-presets/src/index.ts复现步骤
agent-presets.default保持standard。agentPreset: "standard",agent 已创建)。cordis(日志出现agent-preset/selected)。request/header。实际:
tools(65),无subagent、无list_subagent_models。预期:
tools(67),与"创建时即 cordis"的会话一致。证据
1. 同进程对照(同一 Host)
subagent2. 空白期选择被记成"运行中变更"(同一 lifecycle 问题)
即:点开新会话的瞬间就落下 4 份会话级快照(permission / sandbox / approval / agentPreset),此后空白期的任何选择都只能是 patch。
定位线索
@deepseek-ai/dsh-web-app/cordis.patch.yml:443-453(tool-subagent/tool-subagent-fork均disabled: true)。modelSelectionSettings: true,fork 行都不带:packages/preset/agent-presets/presets/{standard,ptc,cordis}/agent.cordis.yml。tool-subagent里两条路径不同(packages/subagent/tool-subagent/src/index.ts):modelSelectionSettings→install(ctx, undefined),composition 级注册,与 agent 无关(fork 因此始终可见);modelSelectionSettings→ standing 分支:只对belongsToComposition(agent)为真的 agent 逐个installScoped,入口是
agent/created、tools/change与 apply 时的reconcileComposedAgents()。agent-presets的recompose()会binding.rebind(standing.key)重绑 scope 父链,随后this.ctx.emit('tools/change'),语义上应当让 standing 分支重新评估该 agent —— 但实测没有生效。
待定位
已排除的两个假设:
:Cordis 的tools/change作用域到不了 preset 内的监听器EventsService.emit是全局总线(dispatch仅在调用方显式传 scope filter 时才过滤),this.ctx.emit('tools/change')不带 filter,所有监听器都收得到。:scopeChainOf有缓存导致链未更新scopeChainOf实时遍历scopeParentsWeakMap,rebind直接改表。当前最强假设:
installScoped对已发布的 agent 调candidate.ctx.inject([...], install)时,injected fiber 的回调未执行、或注册未落到该 agent 的工具视图上(agent/created创建窗口内可行,recompose 之后不可行)。建议的断言点:recompose 之后同时读
agentPresets.composedPreset(agent.ctx)(预期为cordis)scopeChainOf(scopeOf(agent.ctx)).includes(compositionScope)若前者为
cordis而后者为 false(或为 true 但工具未注册),即可定位到具体分支。相关既有报告:#3615(切换后旧 preset 的 agent-scoped 注册残留)看起来是同一次 recompose 的另一面,建议合并调查。
影响
任何"新会话 → 空白期选模式"的用户,选中的 preset 里所有
modelSelectionSettings: true的 delegation 工具全部缺失,且无日志、无 UI 提示;subagent与list_subagent_models同时消失。三个内置 preset 全中。期望
原则:在首次提交之前,不应存在任何被持久化的会话状态;并且要把"创建期被消费掉的输入"和"运行期可变的输入"分开处理。
因此:
现状是两头都占:打开即建档(快照已落盘),UI 却仍允许在空白期修改设置——于是修改只能被记成"对已存在会话的 patch"。
绕过(用户侧可行)
standard本身就带subagent(含provider/model/reasoning_effort,可直接选外部路由);agent-presets.default设为目标 preset 再新建会话;modelSelectionSettings: true(回落到 composition 级注册,代价是失去模型选择参数)。相关 Discussion
All reactions