Repository navigation
Releases
v1.2.12
Fixed
- 修复「折叠的
tool:*提示词段在子代理上未被隐藏」(issue #3)。子代理在 tool-manager install 之前就被委派层childCtx.tools.restrict(toolFilter)裁过工具面,baseline 里可能一个被折叠工具都没有,denyNames()因此返回空、system-prompt/assemble直接放行,全局注册的tool:<名称>段照旧出现在子代理提示词里。现在段落判定不再只依赖 baseline:只要该工具落在预设的disabled里,或命中某个未 open 的按需组 patterns,就按「已折叠」处理并删除其说明段;tool:<名称>、mcp:<服务器>、mcp-resource-servers三种段落都适用。族内成员取 baseline 与实际策略字面名的并集,全部被隐藏才删除,任一可见则保留。 - 修复「工具已收进按需组或已关闭,系统提示词里却仍保留只介绍这些工具的段落」的问题。此前只按
tool:<名称>剔除单工具说明段,因此 MCP 的mcp-resource-servers(三个共享资源工具)和mcp:<服务器>(服务器 instructions)即使对应工具全部不可见也照样出现在提示词里,模型会读到「可以调用」的指令却找不到工具,调用还会被 guard 拒绝。DSH 的提示词段落没有工具归属元数据,现在按命名约定把段落归到工具族:tool:<名称>、mcp:<服务器>(该服务器全部mcp__<服务器>__*工具)、mcp-resource-servers(三个共享资源工具)。族内工具全部被隐藏时整段删除,任一工具可见则保留;无归属或族内没有注册工具的段落不处理。 - 修复「安装新插件后,把它的工具加入按需组,新旧会话都不生效,必须重启 DSH」的问题。按需组是否有效取决于该 Agent 的 baseline(继承工具名快照),而 baseline 只在
install()(agent/created)与tools/change时刷新;插件热装/组合重载可能把工具注册落在两者之间,于是组解析为 0 个工具、从目录里消失,组内工具反而一直可见,直到重启重建快照。现在每一步都在tools.resolve()之前、agent/pre-step里以及tool_list打开组时用 liveschemas(agent)核对 baseline(一次 map 遍历):只要 live 面出现快照没有的名字,就立即采用并reconcile(),新工具在当步就归入按需组并从该步的工具集合中剔除,目录同一步更新,不需要重启。只对「新增」生效——工具面收缩可能是组合切换的空窗,仍交给tools/change的防抖刷新,避免为一步把组内工具放出来。 - 修复本插件的 HTTP 路由在插件重载后残留的问题:
context.inject(["webServer"], ...)的回调没有保留也没有返回webServer.register()的 disposer,重载后新实例注册同一路径会抛webserver: duplicate exact route,而旧实例的 handler 仍在服务——设置页会继续读写一个已经没人驱动的 runtime。现在所有路由的 disposer 都被收集,并在注入作用域卸载时统一释放;若中途某条路由被拒绝,已注册的部分也会立刻回滚。
Changed
- 最低支持的 DSH 版本提升到
0.2.2-rc.1(engines.dsh由>=0.2.0-rc.2改为>=0.2.2-rc.1)。提示词段落隐藏现在依赖0.2.2的PromptPresentation语义(工具声明在 waterfall 之后挂回),工具隐藏依赖tools.resolve()的 per-step 过滤,两者都是0.2.2才有的能力。仍停留在0.2.0/0.2.1的用户请继续使用1.2.11;升级到0.2.2前记得移除tools.mode/DSH_TOOLS_MODE,并把 Node.js 升到 24.9 以上。 - README 同步适配范围(
>=0.2.2-rc.1,旧版用1.2.11)。 - 版本提升至
1.2.12。
v1.2.11
Fixed
- 适配 DSH 0.2.2(含
0.2.2-rc.1):system-prompt/assemble的载荷由PromptAssembly改为PromptPresentation,只带sections/contexts/variables,工具声明改由工具注册表在 waterfall 之后挂回。旧实现要求载荷同时包含tools数组,在 0.2.2 上判断失败并原样返回,导致tool:<名称>提示词段落不再剔除。现在只要求sections:旧版继续同时过滤工具声明与段落,新版过滤段落文本。 - 恢复 DSH 0.2.2 上「所有工具都能隐藏」的行为:新增 per-step 过滤,包装
tools.resolve()返回的准入集合,把策略隐藏的工具名从该步的工具集合中剔除。0.2.2 的提示词工具声明、PTC 绑定与执行查找全部由这份集合派生,因此按 Agent 自身作用域 注册的工具(subagent、list_subagent_models、schedule_*等)与全局工具表现一致:未打开按需组或已关闭时,既不在模型工具列表中,也无法调用。这是tools.restrict()之外的补充路径——restrict()按设计只作用于 global/祖先层,无法隐藏 Agent 自身作用域的注册。包装只改写view()的投影,失败时原样返回 Host 的集合,插件卸载时还原;旧版 DSH 没有resolve(),自动跳过。 - 若上述包装无法安装(Host 改动了该接口),保留 0.2.2 的降级路径并只告警一次:继续过滤提示词段落,调用仍由 guard 拦截,并列出受影响的工具名。
Changed
- 移除工具目录快照中的
trust字段:DSH 自 0.1.7 起不再上报 Preset 信任级别,快照此前始终填system,属于误导性数据;设置页从未渲染该字段。 - README 补充 DSH 0.2.2 的适配范围、Node.js 24.9 最低要求,以及升级前需移除
tools.mode/DSH_TOOLS_MODE的提醒。 - 版本提升至
1.2.11;engines.dsh保持>=0.2.0-rc.2,0.2.1 用户无需改变。
v1.2.10
Fixed
- 修复保存按需分组时把「只按 Agent 作用域注册」的工具误判为空组、导致无法保存的问题。典型表现:为
@deepseek-ai/dsh-schedule提供的schedule_create/schedule_list/schedule_delete/schedule_update建组后点保存,报Preset "standard" has empty tool groups: "定时提醒管理",而页面明明列出了这些工具、tool_list也能正常打开该组。根因是保存校验只读 Preset 的 standing composition(acquireScope()),而页面目录是 standing 与 Agent 作用域注册(探针 + 运行中 Agent 观测)的并集;subagent等由modelSelectionSettings注入的工具同样受影响。现在校验与页面使用同一份目录,并且只在真正读不到 standing composition 时才跳过该校验。同时修正了同一根因下的两个次生问题:仅含 Agent 作用域工具的组里出现已关闭成员时误报「空组」而非「已关闭工具不能入组」,以及两个此类组之间的重复成员漏检。
v1.2.9
Changed
- 适配 DSH 0.2.0-rc.2:
engines.dsh提升为>=0.2.0-rc.2,README 同步标明适配范围;旧版本请继续使用1.2.8。 - 工具管理页「工具目录」面板补充说明:
tool_list只在当前 Preset 有有效按需组时才出现(保存后从下一个模型步骤生效),没有有效按需组时模型看不到它;并说明它由插件自动管理,不出现在本页工具目录中,也不能在本页开关或分组。
v1.2.8
Changed
- 适配 DSH 0.1.7:Preset standing 目录改为
agentPresets.acquireScope(),并在读完 schema 后释放租约。standingKeyFor()已从 DSH 移除,继续调用会让设置页快照和保存校验失败。 - 插件管理页补充中英文
locale标题与描述。 - 设置页 API 请求改为相对当前文档 base URI,避免 Web 部署在反向代理子路径下打到错误主机。
engines.dsh提升为>=0.1.7-alpha.1。- README 标明仅适配 DSH 0.1.7-alpha.1 及更新版本;更早版本请继续使用
1.2.7。
v1.2.7
Fixed
- 修复在其他设置页与“工具管理”之间往返时,动态 Agent 作用域工具可能隔次从目录消失、又隔次恢复的问题。Preset 目录现在保留已完成的 live/probe 观测并与当前观测取并集,避免在
tools/change后的短暂注册空窗中把subagent、list_subagent_models等真实工具误报成“已不存在的关闭项”。
v1.2.6
Fixed
- 按需组尚未打开时直接调用组内工具,现在会明确提示该工具所属的按需组,并给出需要先调用的
tool_list参数;不再误报成工具已被 Preset 策略关闭。明确关闭的工具仍保留原有禁用提示。
v1.2.5
Fixed
-
新增通用的组合切换自愈(
src/composition-watch.ts):插件监听tools/change,发现某个会话的 Preset 发生切换后,把它借另一个 Preset(compositionInventory()中 composition row 最少者,通常是极简模式)空转一圈再切回目标 Preset。旧 composition 在离开时执行的removeScoped()会连带丢掉 DSH 因撞名失败而永久缓存的记录,目标 composition 于是在一个没有同名注册的 Agent 上干净安装。该机制不含任何工具名假设:任何插件按 Agent 注册的工具、无论丢了几个,都走同一条路径恢复。只对未开始对话的空白会话执行(DSH 本身也只允许空白会话切换模式),用recompose()因而不写会话记录、界面无感知;两条腿串行且第二条永远执行,失败会回滚到目标 Preset 并告警;已经开始的会话不被改动,只按探针参照系报出缺失工具并提示重开。自愈成功时输出一条自我报告日志(... re-calibration restored them.)。 -
定位并缓解“标准模式新建会话 → 切到创造模式后丢失
subagent/list_subagent_models”:根因是 DSH 自身的组合切换竞态(@deepseek-ai/dsh-tool-subagent的按 Agent 注册与上一个 composition 的异步拆除竞速,失败后该 Agent 被永久记住),与本插件的开关策略无关(出问题的会话里disabled为空、也不存在隐藏这两个工具的按需分组)。插件侧现在于加载时立刻组合部署默认 Agent Preset 的 standing composition,并让此后所有由插件发起的 mount(冷 Preset 探针、自动命名/自动分组、保存校验、快照)都先等它完成,从而不再由插件引入反向顺序。分析与上游修复建议见 docs/composition-switch-race.md。 -
修复共享冷 Preset 探针在切换作用域时把上一 Preset 的动态 Agent 工具串入下一 Preset 目录的问题;例如“极简模式”不再误显示仅 standard/ptc/cordis 提供的
subagent和list_subagent_models。 -
探针切换后会等待动态作用域注册完成清理,并且探针自身的过渡态不再写入运行中 Agent 的持久观察缓存。
-
修复 Preset 切换或新会话初始化期间,动态 Agent 作用域工具短暂卸载时被采样为永久 baseline,导致在 standard 关闭代理工具后,创造模式中的
subagent/list_subagent_models也消失且重新开启无法恢复的问题;工具目录变化现在延迟到下一事件循环再刷新。
v1.2.4
Fixed
- Preset 动态工具探测不再为每次页面请求和每个空闲 Preset 创建随机
tool-manager-probe-*Session。现在所有冷 Preset 串行复用唯一的tool-manager-probe-internal-v1,跨插件重载恢复同一个持久化 Session,并以origin: subagent从普通会话列表隐藏。 - 固定探针恢复失败时直接报错并回退现有工具目录,不创建随机或递增 ID 的替代 Session,避免会话存储持续增长。
v1.2.3
Fixed
- 修复仅在 Agent 自身作用域注册的工具(如启用
modelSelectionSettings后动态注入的subagent)在工具管理页面无法显示、无法关闭的问题:现在通过运行中 Agent 的真实工具目录与必要时对空闲 Preset 临时挂载探测 Agent 来补齐页面目录,不再依赖工具名硬编码。 - 修复关闭 Agent 本地作用域注册的工具后,模型请求仍然能看到该工具并附带
tool:<name>提示词段的问题:在system-prompt/assemble阶段过滤assembly.tools与对应提示词段,并安装tools.guard()拒绝执行已关闭工具,与原有tools.restrict()形成三层防护。 - 自动命名与自动分组的可用工具目录也同步使用相同合并策略,避免页面能关闭的工具在生成接口中找不到。