dsh-plugin-subagent-director 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,25 +1,53 @@
1
- # Changelog
2
-
1
+ # Changelog
2
+
3
3
  本项目的所有显著变更都会记录在此文件中。格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [SemVer](https://semver.org/lang/zh-CN/)。
4
4
 
5
- ## [0.1.0] - 2026-08-14
6
-
7
- 首个公开发布版本。
5
+ ## [0.2.0] - 2026-08-17
8
6
 
9
7
  ### 新增
10
8
 
11
- - 四级模型路由解析链(单次调用参数 > 角色绑定 > 插件默认 > 继承主代理),字段级覆盖、未配置零侵入;
12
- - `subagent_role` 模型可见委派工具:`role`/`provider`/`model`/`reasoningEffort` 可选参数,前景/one-shot 后台/continuable 后台三种执行路线;
13
- - 角色模板:命名角色携带职责描述、persona 与可选模型绑定,写入 settings 命名空间 `subagent-director`;
14
- - 主代理角色清单指引(系统提示段落,无角色时不注入);
15
- - 设置界面「子代理导演」:默认模型配置 + 角色卡片增删改(中英双语);
16
- - 子代理实际运行模型读数(composer dock,零额外请求);
17
- - 设置命名空间桥接条目 `subagent-director-bridge`:自注册 `/subagent-director` HTTP 路由,绕开 Web API 的 settings 白名单限制;
18
- - 129 个单元测试(路由解析、schema 校验、桥接信封、client 纯逻辑)。
9
+ - **默认模型兜底**:在 `ctx.subagents.start/startContinuable` 层注入默认
10
+ provider/model,对内置 `subagent`/`subagent_fork` 发起的子代理同样生效
11
+ (`applyDefaultRoute`,默认开启;未配置默认模型时零侵入);
12
+ - **配置热更新**:settings.yaml / 设置面板改动即时生效,无需重启;
13
+ - **角色按显示名引用**:`role` 参数未命中 id 时按 `displayName` 精确匹配,
14
+ 多个同名角色取定义顺序第一个并提示;
15
+ - **角色指引强化**:系统提示明确要求按 id 引用角色(Delegate 行),不要用显示名。
16
+
17
+ ### 修复
18
+
19
+ - 设置快照只在插件挂载时读取一次、运行中修改配置不生效的问题(`onChange` 现在会
20
+ 重新读取来源并刷新快照);
21
+ - 默认路由 seam 卸载时恢复原始方法的引用(保留未绑定引用,dispose 幂等)。
22
+
23
+ ### 测试
24
+
25
+ - 单元测试由 129 增至 150:默认模型兜底、显示名解析、指引渲染、设置快照热更新。
19
26
 
20
27
  ### 文档
21
28
 
22
- - README(中英双语):安装、配置示例、角色模板、FAQ;
23
- - MIT License。
29
+ - README:默认模型兜底、配置热更新、角色显示名引用、推荐默认角色示例;
30
+ - 新增设计文档与实现计划(`docs/superpowers/`)。
24
31
 
32
+ ## [0.1.0] - 2026-08-14
33
+
34
+ 首个公开发布版本。
35
+
36
+ ### 新增
37
+
38
+ - 四级模型路由解析链(单次调用参数 > 角色绑定 > 插件默认 > 继承主代理),字段级覆盖、未配置零侵入;
39
+ - `subagent_role` 模型可见委派工具:`role`/`provider`/`model`/`reasoningEffort` 可选参数,前景/one-shot 后台/continuable 后台三种执行路线;
40
+ - 角色模板:命名角色携带职责描述、persona 与可选模型绑定,写入 settings 命名空间 `subagent-director`;
41
+ - 主代理角色清单指引(系统提示段落,无角色时不注入);
42
+ - 设置界面「子代理导演」:默认模型配置 + 角色卡片增删改(中英双语);
43
+ - 子代理实际运行模型读数(composer dock,零额外请求);
44
+ - 设置命名空间桥接条目 `subagent-director-bridge`:自注册 `/subagent-director` HTTP 路由,绕开 Web API 的 settings 白名单限制;
45
+ - 129 个单元测试(路由解析、schema 校验、桥接信封、client 纯逻辑)。
46
+
47
+ ### 文档
48
+
49
+ - README(中英双语):安装、配置示例、角色模板、FAQ;
50
+ - MIT License。
51
+
25
52
  [0.1.0]: https://github.com/SeverusZh/dsh-plugin-subagent-director/releases/tag/v0.1.0
53
+ [0.2.0]: https://github.com/SeverusZh/dsh-plugin-subagent-director/releases/tag/v0.2.0
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Subagent Director contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Subagent Director contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,80 +1,114 @@
1
- # 🎬 Subagent Director(子代理导演)
2
-
3
- > 为 DeepSeek Harness 的 subagent 指定 LLM 供应商与模型,并用「角色模板」规划主代理与子代理的分工。
4
-
5
- <p align="center">
6
- <img alt="npm version" src="https://img.shields.io/npm/v/dsh-plugin-subagent-director?label=npm">
7
- <img alt="license" src="https://img.shields.io/npm/l/dsh-plugin-subagent-director">
8
- <img alt="DeepSeek Harness" src="https://img.shields.io/badge/DeepSeek%20Harness-0.1.0--rc.x-blue">
9
- </p>
10
-
11
- [English](#english) · [特性](#特性) · [快速开始](#快速开始) · [角色模板](#角色模板) · [术语](#术语) · [开发](#开发) · [路线图](#路线图) · [FAQ](#faq)
12
-
13
- ---
14
-
15
- ## 特性
16
-
1
+ # 🎬 Subagent Director(子代理导演)
2
+
3
+ > 为 DeepSeek Harness 的 subagent 指定 LLM 供应商与模型,并用「角色模板」规划主代理与子代理的分工。
4
+
5
+ <p align="center">
6
+ <img alt="npm version" src="https://img.shields.io/npm/v/dsh-plugin-subagent-director?label=npm">
7
+ <img alt="license" src="https://img.shields.io/npm/l/dsh-plugin-subagent-director">
8
+ <img alt="DeepSeek Harness" src="https://img.shields.io/badge/DeepSeek%20Harness-0.1.0--rc.x-blue">
9
+ </p>
10
+
11
+ [English](#english) · [特性](#特性) · [快速开始](#快速开始) · [角色模板](#角色模板) · [术语](#术语) · [开发](#开发) · [FAQ](#faq)
12
+
13
+ ---
14
+
15
+ ## 特性
16
+
17
17
  - **供应商与模型选择** —— 为 subagent 配置默认 LLM 供应商(route)与模型;每次委派也可以由模型显式指定;
18
+ - **默认模型兜底** —— 配置 `defaultProvider`/`defaultModel` 后,即使模型调用内置
19
+ `subagent`/`subagent_fork` 工具,未显式指定模型的子代理也会自动使用该模型
20
+ (`applyDefaultRoute`,默认开启;未配置默认模型时为零侵入空操作);
21
+ - **配置热更新** —— settings.yaml / 设置面板的改动即时生效,无需重启;
22
+ - **角色按显示名引用** —— `role` 参数未命中 id 时按 `displayName` 精确匹配(重名
23
+ 取定义顺序第一个并提示),模型按显示名也能命中模板;
18
24
  - **角色模板** —— 定义「代码审查员」「翻译员」等角色:职责描述(给主代理看)+ persona(注入子代理)+ 可选模型绑定;
19
- - **四级回退链** —— 单次调用参数 > 角色绑定 > 插件默认 > 继承主代理(未配置时零侵入);
20
- - **主代理指引** —— 系统提示自动注入角色清单,主代理知道何时委派给谁;
21
- - **设置界面** —— DSH 设置面板内可视化配置(默认模型 + 角色卡片增删改);
22
- - **continuable 后台** —— 返回可续聊子代理 id,配合 send_message 持续委派;
23
- - **可观测性** —— 打开子代理会话时,composer 下方显示其实际运行的供应商/模型。
24
-
25
- ## 快速开始
26
-
27
- ### 安装
25
+ - **四级回退链** —— 单次调用参数 > 角色绑定 > 插件默认 > 继承主代理(未配置时零侵入);
26
+ - **主代理指引** —— 系统提示自动注入角色清单,主代理知道何时委派给谁;
27
+ - **设置界面** —— DSH 设置面板内可视化配置(默认模型 + 角色卡片增删改);
28
+ - **continuable 后台** —— 返回可续聊子代理 id,配合 send_message 持续委派;
29
+ - **可观测性** —— 打开子代理会话时,composer 下方显示其实际运行的供应商/模型。⚠️ 该功能暂不可用,正在开发中;
30
+
31
+ ## 快速开始
32
+
33
+ ### 安装
34
+
35
+ ```bash
36
+ dsh plugin --profile <name> add dsh-plugin-subagent-director
37
+ ```
38
+
39
+ 或本地开发时以 `dsh plugin --profile <name> add link:<绝对路径>` 挂载本地 checkout
40
+ (配置示例见下)。
41
+
42
+ ### 配置(cordis.patch.yml,可选)
43
+
44
+ `dsh plugin add` 会通过插件包自带的 `cordis.patch.yml` 自动挂载主条目与桥接条目
45
+ (`subagent-director` / `subagent-director-bridge`,桥接条目用于把设置命名空间
46
+ 暴露给 Web UI),**不需要**手动 `insert`。需要覆盖默认配置时按 id 覆盖主条目:
28
47
 
29
- ```bash
30
- dsh plugin --profile <name> add dsh-plugin-subagent-director
48
+ ```yaml
49
+ - id: subagent-director
50
+ name: dsh-plugin-subagent-director
51
+ config:
52
+ subagentProvider: spawn # 传输:spawn(无父上下文)/ fork(继承父历史)
53
+ toolName: subagent_role # 模型可见工具名
54
+ enableRunInBackground: true
55
+ backgroundMode: one-shot # one-shot 或 continuable
56
+ maxDepth: 3
57
+ applyDefaultRoute: true # 默认 true:把默认模型应用到所有未显式指定模型的子代理
31
58
  ```
32
59
 
33
- 或本地开发时以 file: / link: 路径挂载(示例见下)。
34
-
35
- ### 配置(cordis.patch.yml)
60
+ > 注意:不要再用 `- insert:` 添加这两个条目,否则启动会报
61
+ > `duplicate loader entry id`。
36
62
 
37
- 需要**两个插件条目**(本包拆分了桥接条目,用于把设置命名空间暴露给 Web UI):
63
+ ### 安装注意事项
38
64
 
39
- ```yaml
40
- - insert:
41
- - id: subagent-director
42
- name: dsh-plugin-subagent-director
43
- config:
44
- subagentProvider: spawn # 传输:spawn(无父上下文)/ fork(继承父历史)
45
- toolName: subagent_role # 模型可见工具名
46
- enableRunInBackground: true
47
- backgroundMode: one-shot # one-shot 或 continuable
48
- maxDepth: 3
49
- - insert:
50
- - id: subagent-director-bridge
51
- name: dsh-plugin-subagent-director/bridge
52
- ```
65
+ - 推荐直接 `dsh plugin --profile <name> add dsh-plugin-subagent-director`(npm
66
+ 发布版已包含构建产物,peer 依赖由 DSH 的 `$DSH_HOME/profiles/node_modules`
67
+ fallback 提供,开箱即用)。
68
+ - 本地 `link:` 开发时:git 仓库不包含 `lib/`(已被 .gitignore),挂载前需先
69
+ `npm install && npm run build`;且 checkout 需位于 `$DSH_HOME/profiles/` 下
70
+ (或仓库自带 node_modules),否则 `@deepseek-ai/*` peer 依赖会报
71
+ `ERR_MODULE_NOT_FOUND`。
53
72
 
54
73
  ### 角色模板(设置界面或 settings.yaml)
55
74
 
56
- settings 命名空间 `subagent-director`:
75
+ settings 命名空间 `subagent-director`。角色可以不绑定 provider/model(继承全局
76
+ 默认模型),也可以按需绑定。推荐默认角色(含委派指引与 persona):
57
77
 
58
78
  ```yaml
59
79
  subagent-director:
60
- defaultRole: code-reviewer
61
- fallbackOnInvalid: true
80
+ defaultProvider: opencode-go
81
+ defaultModel: minimax-m2.7
82
+ defaultReasoningEffort: low
62
83
  roles:
63
84
  code-reviewer:
64
85
  displayName: 代码审查员
65
- description: 审查代码质量、安全与可维护性,输出结构化评审意见
66
- persona: 你是严谨的代码审查员,逐条指出问题并给出修改建议
67
- provider: deepseek-official
68
- model: deepseek-reasoner
86
+ description: 审查代码质量、安全、可维护性与测试覆盖,输出结构化评审意见(问题清单 + 严重级别 + 修改建议),适合在提交/合并前独立复核改动
87
+ persona: 你是严谨的代码审查员。先给结论再给证据,区分阻塞项与建议项;逐条指出问题并给出可操作的修改建议,语气客观直接,不吹捧也不刻薄。
88
+ architect:
89
+ displayName: 架构师
90
+ description: 设计系统架构、模块边界与数据流,评估技术选型与演进路线,把模糊需求拆成可落地的设计方案
91
+ persona: 你是资深架构师。先澄清约束(规模、性能、团队、时间),再权衡取舍;输出带理由的决策,明确边界、扩展点与风险,避免过度设计。
92
+ test-engineer:
93
+ displayName: 测试工程师
94
+ description: 编写与评审测试用例,识别边界条件与异常路径,设计单元/集成测试策略
95
+ persona: 你是细致的测试工程师。以发现缺陷为目标,覆盖正常、边界与异常路径;每个用例说明验证什么、断言什么,报告按严重度排序。
96
+ docs-writer:
97
+ displayName: 文档工程师
98
+ description: 撰写与润色技术文档、README、API 说明与变更日志,统一术语与结构
99
+ persona: 你是技术文档工程师。语言准确简洁、结构清晰、面向读者;不臆造内容,术语全文统一,示例可运行可验证。
100
+ researcher:
101
+ displayName: 研究分析员
102
+ description: 检索资料、整理证据、做数据探索与可行性分析,输出带来源与不确定性的结论
103
+ persona: 你是严谨的研究分析员。优先一手来源,区分事实与推断;结论注明依据、时效与不确定性,不夸大不臆测。
69
104
  translator:
70
105
  displayName: 翻译员
71
- description: 在中文与英文之间翻译技术文档
72
- provider: <pi-ai-route>
73
- model: qwen2.5-7b
106
+ description: 中英互译技术文档、代码注释与沟通内容,保留术语准确性与语气
107
+ persona: 你是专业翻译。术语统一、句式自然、保留原文意图;专有名词与技术缩写保持原文,拿不准的术语标注出来。
74
108
  ```
75
-
76
- ### 使用
77
-
109
+
110
+ ### 使用
111
+
78
112
  对话中委派(主代理会看到角色清单指引,自动选择工具与角色):
79
113
 
80
114
  ```text
@@ -82,54 +116,53 @@ subagent_role({ role: "translator", prompt: "把 README.md 翻译成英文" })
82
116
  subagent_role({ role: "code-reviewer", model: "deepseek-chat", prompt: "..." }) # 临时覆盖模型
83
117
  ```
84
118
 
85
- ## 术语
86
-
87
- - **subagentProvider(传输)**:`spawn` / `fork` / `acp`——子代理跑在哪条传输链路上;
88
- - **provider(LLM route)**:`deepseek-official`、pi-ai route——模型请求实际发给哪个供应商。
89
-
90
- 两者是**两套命名空间**,配置时不要混淆。
91
-
92
- ## 开发
93
-
94
- ```bash
95
- npm install
96
- npm test # vitest(129 用例)
97
- npm run typecheck
98
- npm run build # host(tsc) + client(rolldown bundle)
99
- ```
100
-
101
- ## 路线图
102
-
103
- - v0.2:子代理目录内直接展示实际模型;composer 快捷选择「本次委派模型」;
104
- - v0.3:顶替内置 subagent 工具名(无感升级);对 workflow/ralph 的默认模型兜底;
105
- - 欢迎通过 Issue / PR 提出想法。
106
-
119
+ `role` 参数支持用角色 id 或显示名引用:未命中 id 时会按 `displayName` 精确匹配
120
+ (多个同名角色取定义顺序第一个并提示);建议始终用 id,见系统提示中的 Delegate 行。
121
+
122
+ ## 术语
123
+
124
+ - **subagentProvider(传输)**:`spawn` / `fork` / `acp`——子代理跑在哪条传输链路上;
125
+ - **provider(LLM route)**:`deepseek-official`、pi-ai route——模型请求实际发给哪个供应商。
126
+
127
+ 两者是**两套命名空间**,配置时不要混淆。
128
+
129
+ ## 开发
130
+
131
+ ```bash
132
+ npm install
133
+ npm test # vitest(129 用例)
134
+ npm run typecheck
135
+ npm run build # host(tsc) + client(rolldown bundle)
136
+ ```
137
+
107
138
  ## FAQ
108
-
109
- **为什么需要两个插件条目?**
110
- DSH 的 Web API 只向白名单内的 settings 命名空间开放读写。本插件通过自注册的 `/subagent-director` HTTP 路由桥接自己的命名空间,而该路由依赖的 webServer 服务只能经 cordis `inject` 获取,因此拆成独立的 `subagent-director-bridge` 条目(无 Web 的 headless 场景它会自动不激活,主条目不受影响)。
111
-
139
+
140
+ **为什么需要两个插件条目?**
141
+ DSH 的 Web API 只向白名单内的 settings 命名空间开放读写。本插件通过自注册的 `/subagent-director` HTTP 路由桥接自己的命名空间,而该路由依赖的 webServer 服务只能经 cordis `inject` 获取,因此拆成独立的 `subagent-director-bridge` 条目(无 Web 的 headless 场景它会自动不激活,主条目不受影响)。
142
+
112
143
  **未配置任何角色时行为如何?**
113
- 与未安装本插件时完全一致:subagent 继承主代理模型,零侵入。
114
-
115
- **新供应商/API 会自动出现吗?**
116
- 会。设置页订阅了供应商与设置变更事件,在 Models 页新增供应商/API key 后,下拉列表自动刷新,无需重启。
117
-
118
- ## License
119
-
120
- [MIT](./LICENSE) © Subagent Director contributors
121
-
122
- ---
123
-
124
- ## English
125
-
126
- **Subagent Director** is an out-of-tree DeepSeek Harness plugin that lets you choose an LLM provider and model for subagents, and plan main-agent/subagent responsibilities through role templates.
127
-
128
- - **Provider/model selection** a configurable default route plus optional per-call `provider`/`model` arguments on the `subagent_role` tool;
129
- - **Role templates** — named roles carrying a description, a persona, and an optional model binding;
130
- - **Four-layer resolution** — call args > role binding > plugin default > inherit from the parent agent (zero intrusion when unconfigured);
131
- - **Settings UI** — manage defaults and role cards in the DSH settings panel;
132
- - **Continuable background** — durable subagent ids with send_message follow-ups;
133
- - **Observability** — the addressed subagent’s actual provider/model shown under the composer.
134
-
135
- **Install** — add two patch rows to your profile’s cordis.patch.yml: `dsh-plugin-subagent-director` (main) and `dsh-plugin-subagent-director/bridge` (Web settings bridge). See the Chinese section above for full configuration examples. License: MIT.
144
+ 未配置任何角色且未配置默认模型时与未安装本插件完全一致(零侵入)。配置了
145
+ `defaultProvider`/`defaultModel` 且未关闭 `applyDefaultRoute` 时,所有未显式
146
+ 指定模型的子代理(含内置工具发起的)都会使用该默认模型。
147
+
148
+ **新供应商/API 会自动出现吗?**
149
+ 会。设置页订阅了供应商与设置变更事件,在 Models 页新增供应商/API key 后,下拉列表自动刷新,无需重启。
150
+
151
+ ## License
152
+
153
+ [MIT](./LICENSE) © Subagent Director contributors
154
+
155
+ ---
156
+
157
+ ## English
158
+
159
+ **Subagent Director** is an out-of-tree DeepSeek Harness plugin that lets you choose an LLM provider and model for subagents, and plan main-agent/subagent responsibilities through role templates.
160
+
161
+ - **Provider/model selection** — a configurable default route plus optional per-call `provider`/`model` arguments on the `subagent_role` tool;
162
+ - **Role templates** — named roles carrying a description, a persona, and an optional model binding;
163
+ - **Four-layer resolution** — call args > role binding > plugin default > inherit from the parent agent (zero intrusion when unconfigured);
164
+ - **Settings UI** — manage defaults and role cards in the DSH settings panel;
165
+ - **Continuable background** — durable subagent ids with send_message follow-ups;
166
+ - **Observability** — the addressed subagent’s actual provider/model shown under the composer. ⚠️ Not yet available under development.
167
+
168
+ **Install** — `dsh plugin --profile <name> add dsh-plugin-subagent-director` mounts the main and bridge entries automatically from the package's bundle patch (`cordis.patch.yml`); optionally override the main entry's config in your profile's cordis.patch.yml (see the Chinese section above). License: MIT.
@@ -0,0 +1,12 @@
1
+ # dsh-plugin-subagent-director bundle patch.
2
+ #
3
+ # Adds the plugin's two entries: the main entry and the settings bridge that
4
+ # exposes the `subagent-director` settings namespace to the Web UI.
5
+ # Install: dsh plugin --profile <name> add dsh-plugin-subagent-director
6
+ # Restart `dsh --profile <name>` after installing.
7
+ - insert:
8
+ - id: subagent-director
9
+ name: dsh-plugin-subagent-director
10
+ - insert:
11
+ - id: subagent-director-bridge
12
+ name: dsh-plugin-subagent-director/bridge
package/lib/config.d.ts CHANGED
@@ -45,6 +45,15 @@ export interface DirectorConfig {
45
45
  * provider's `depthLimit` capability. 'provider-managed' sends no cap.
46
46
  */
47
47
  maxDepth?: number | 'provider-managed';
48
+ /**
49
+ * Whether to apply the settings `defaultProvider`/`defaultModel` to every
50
+ * subagent start that did not carry an explicit agentOptions — including
51
+ * starts initiated by the built-in `subagent`/`subagent_fork` tools (default
52
+ * true). With no default model configured this is a no-op (zero intrusion);
53
+ * set false to keep the defaults limited to `subagent_role`'s resolution
54
+ * chain.
55
+ */
56
+ applyDefaultRoute?: boolean;
48
57
  }
49
58
  /** Schemastery schema for {@link DirectorConfig}. */
50
59
  export declare const Config: z<Schemastery.ObjectS<{
@@ -53,11 +62,13 @@ export declare const Config: z<Schemastery.ObjectS<{
53
62
  enableRunInBackground: z<boolean, boolean>;
54
63
  backgroundMode: z<"continuable" | "one-shot", "continuable" | "one-shot">;
55
64
  maxDepth: z<number | "provider-managed", number | "provider-managed">;
65
+ applyDefaultRoute: z<boolean, boolean>;
56
66
  }>, Schemastery.ObjectT<{
57
67
  subagentProvider: z<string, string>;
58
68
  toolName: z<string, string>;
59
69
  enableRunInBackground: z<boolean, boolean>;
60
70
  backgroundMode: z<"continuable" | "one-shot", "continuable" | "one-shot">;
61
71
  maxDepth: z<number | "provider-managed", number | "provider-managed">;
72
+ applyDefaultRoute: z<boolean, boolean>;
62
73
  }>>;
63
74
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAE5C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACxC;AAED,qDAAqD;AACrD,eAAO,MAAM,MAAM;;;;;;;;;;;;GAOjB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAE5C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IAEvC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,qDAAqD;AACrD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;GAQjB,CAAC"}
package/lib/config.js CHANGED
@@ -22,5 +22,6 @@ export const Config = z.object({
22
22
  backgroundMode: z.union(['one-shot', 'continuable']).default('one-shot'),
23
23
  maxDepth: z
24
24
  .union([z.natural().max(Number.MAX_SAFE_INTEGER), z.const('provider-managed')]),
25
+ applyDefaultRoute: z.boolean().default(true),
25
26
  });
26
27
  //# sourceMappingURL=config.js.map
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAuCzC,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAC7C,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACxE,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;CAClF,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAiDzC,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAC7C,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACxE,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACjF,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC7C,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Default route seam (design: 默认模型兜底).
3
+ *
4
+ * Makes the plugin's configured `defaultProvider`/`defaultModel` apply to ANY
5
+ * subagent start that did not carry an explicit `agentOptions` — including
6
+ * starts initiated by the built-in `subagent` / `subagent_fork` tools, not just
7
+ * the plugin's own `subagent_role`. This closes the gap where the model picks
8
+ * the built-in tool and the configured defaults never take effect.
9
+ *
10
+ * Layering: explicit `agentOptions` (even partial) always wins; the seam is a
11
+ * best-effort default. An un-routable default provider falls back to
12
+ * inheritance and never throws, so a bad default cannot break built-in
13
+ * delegation; the strict `fallbackOnInvalid` error semantics remain the
14
+ * property of `subagent_role`'s explicit path (route-resolver.ts).
15
+ */
16
+ import type { AgentOptions } from '@deepseek-ai/dsh-agent';
17
+ import type { ContinuableStart, ContinuableStartSpec, SubagentRun, SubagentStartRequest } from '@deepseek-ai/dsh-subagent';
18
+ import type { SubagentDirectorSettings } from './route-resolver.js';
19
+ export interface SeamResolveInput {
20
+ agentOptions?: AgentOptions;
21
+ settings: SubagentDirectorSettings;
22
+ isRoutable?: (provider: string) => boolean;
23
+ }
24
+ export declare function resolveSeamAgentOptions(input: SeamResolveInput): Pick<AgentOptions, 'provider' | 'model'> | undefined;
25
+ /** The subset of the subagent service the seam wraps. */
26
+ export interface SubagentsSeam {
27
+ start(name: string, request: SubagentStartRequest): Promise<SubagentRun>;
28
+ startContinuable(spec: ContinuableStartSpec): Promise<ContinuableStart>;
29
+ }
30
+ /** Structural context the seam needs; keeps the wrapper unit-testable. */
31
+ export interface DefaultRouteSeamContext {
32
+ get(name: string): unknown;
33
+ logger: {
34
+ info(message: string): void;
35
+ warn(message: string): void;
36
+ };
37
+ subagents: SubagentsSeam;
38
+ }
39
+ /**
40
+ * Wrap `ctx.subagents.start` / `startContinuable` so a subagent start without
41
+ * explicit `agentOptions` receives the configured defaults. Returns a disposer
42
+ * that restores the original methods (registered via `ctx.effect` by the
43
+ * caller, so it runs when the plugin fiber unloads).
44
+ */
45
+ export declare function applyDefaultRouteSeam(ctx: DefaultRouteSeamContext, getSettings: () => SubagentDirectorSettings): () => void;
46
+ //# sourceMappingURL=default-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-route.d.ts","sourceRoot":"","sources":["../src/default-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAMD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,SAAS,CAUrH;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzE;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,MAAM,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrE,SAAS,EAAE,aAAa,CAAC;CAC1B;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,uBAAuB,EAC5B,WAAW,EAAE,MAAM,wBAAwB,GAC1C,MAAM,IAAI,CAmCZ"}
@@ -0,0 +1,56 @@
1
+ function isEmpty(value) {
2
+ return value === undefined || value === '';
3
+ }
4
+ export function resolveSeamAgentOptions(input) {
5
+ const { agentOptions, settings, isRoutable } = input;
6
+ if (agentOptions !== undefined && (agentOptions.provider !== undefined || agentOptions.model !== undefined)) {
7
+ return undefined;
8
+ }
9
+ const provider = settings.defaultProvider;
10
+ const model = settings.defaultModel;
11
+ if (isEmpty(provider) || isEmpty(model))
12
+ return undefined;
13
+ if (isRoutable !== undefined && !isRoutable(provider))
14
+ return undefined;
15
+ return { provider, model };
16
+ }
17
+ function makeIsRoutable(ctx) {
18
+ const llm = ctx.get('llm');
19
+ if (llm === undefined)
20
+ return undefined;
21
+ return (provider) => llm.listProviders().some((entry) => entry.id === provider);
22
+ }
23
+ /**
24
+ * Wrap `ctx.subagents.start` / `startContinuable` so a subagent start without
25
+ * explicit `agentOptions` receives the configured defaults. Returns a disposer
26
+ * that restores the original methods (registered via `ctx.effect` by the
27
+ * caller, so it runs when the plugin fiber unloads).
28
+ */
29
+ export function applyDefaultRouteSeam(ctx, getSettings) {
30
+ const subagents = ctx.subagents;
31
+ const originalStart = subagents.start;
32
+ const originalStartContinuable = subagents.startContinuable;
33
+ const isRoutable = makeIsRoutable(ctx);
34
+ const resolve = (request) => resolveSeamAgentOptions({ agentOptions: request.agentOptions, settings: getSettings(), isRoutable });
35
+ subagents.start = (name, request) => {
36
+ const agentOptions = resolve(request);
37
+ if (agentOptions !== undefined) {
38
+ ctx.logger.info(`[subagent-director] default route seam: applying ${agentOptions.provider}/${agentOptions.model} to ${name} subagent`);
39
+ return originalStart.call(subagents, name, { ...request, agentOptions });
40
+ }
41
+ return originalStart.call(subagents, name, request);
42
+ };
43
+ subagents.startContinuable = (spec) => {
44
+ const agentOptions = resolve(spec.request);
45
+ if (agentOptions !== undefined) {
46
+ ctx.logger.info(`[subagent-director] default route seam: applying ${agentOptions.provider}/${agentOptions.model} to continuable subagent`);
47
+ return originalStartContinuable.call(subagents, { ...spec, request: { ...spec.request, agentOptions } });
48
+ }
49
+ return originalStartContinuable.call(subagents, spec);
50
+ };
51
+ return () => {
52
+ subagents.start = originalStart;
53
+ subagents.startContinuable = originalStartContinuable;
54
+ };
55
+ }
56
+ //# sourceMappingURL=default-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-route.js","sourceRoot":"","sources":["../src/default-route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBhG;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,wBAAwB,EAC3C,QAAQ,EAAE,MAAM,GACf,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAQ1B"}
1
+ {"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBhG;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,wBAAwB,EAC3C,QAAQ,EAAE,MAAM,GACf,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAQ1B"}
package/lib/guidance.js CHANGED
@@ -15,6 +15,7 @@ export function renderRolesGuidance(settings, toolName) {
15
15
  return '';
16
16
  const lines = [
17
17
  'Subagent Director roles — delegate one of these role-bound subagents when the task matches its description. Each role may bind a model; when it does, the subagent runs on that model route.',
18
+ 'Reference roles by their id (shown in the Delegate line), never by display name; when the user names a role by its display name, map it to that id.',
18
19
  ];
19
20
  for (const [id, role] of entries) {
20
21
  const bound = role.provider !== undefined && role.provider !== '' ?
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAiBA,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkC,EAAE,QAAgB;IACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa;QACtB,8LAA8L;KAC/L,CAAC;IACF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC9H,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,EAAE,GAAG,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,aAAa,EAAE,qBAAqB,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAY,EACZ,WAA2C,EAC3C,QAAgB;IAEhB,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,YAAY,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAiBA,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkC,EAAE,QAAgB;IACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa;QACtB,8LAA8L;QAC9L,qJAAqJ;KACtJ,CAAC;IACF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC9H,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,EAAE,GAAG,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,aAAa,EAAE,qBAAqB,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAY,EACZ,WAA2C,EAC3C,QAAgB;IAEhB,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,YAAY,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAClH,OAAO,EACL,oCAAoC,EACpC,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,MAAM,UAA4C,CAAC;AAEhE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,cAAc,QAuD/E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAClH,OAAO,EACL,oCAAoC,EACpC,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,MAAM,UAA4C,CAAC;AAEhE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,cAAc,QA0D/E"}
package/lib/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { assertSubagentMaxDepth } from '@deepseek-ai/dsh-subagent';
2
2
  import { createDelegationTool } from './delegation-tool.js';
3
+ import { applyDefaultRouteSeam } from './default-route.js';
3
4
  import { applyGuidance } from './guidance.js';
4
- import { installDirectorSettings } from './settings.js';
5
+ import { createSettingsSnapshot, installDirectorSettings } from './settings.js';
5
6
  export { Config } from './config.js';
6
7
  export { assertDelegationCapabilities, buildSubagentRequest, createDelegationParameters, createDelegationOutputSchema, createDelegationTool, DELEGATION_TOOL_PREFIX, resolveDelegationMode, renderDelegationResult, } from './delegation-tool.js';
7
8
  export { applyGuidance, renderRolesGuidance, GUIDANCE_SECTION_ORDER, GUIDANCE_SECTION_NAME } from './guidance.js';
@@ -18,16 +19,18 @@ export function apply(ctx, config) {
18
19
  // through ctx.get(). The main entry must not touch webServer, or headless
19
20
  // profiles would lose the delegation tool.
20
21
  // ---- settings snapshot -------------------------------------------------
21
- let settings = {};
22
- installDirectorSettings(ctx, {}, {
23
- setSource: (current) => {
24
- settings = current();
25
- },
26
- onChange: () => {
27
- // snapshot already updated by setSource; nothing further to do in M1.
28
- },
29
- });
30
- const getSettings = () => settings;
22
+ // 快照跟随 dsh-settings onChange 热更新(settings.yaml / 设置面板改动
23
+ // 即时生效),不再只在挂载时读取一次。
24
+ const settingsSnapshot = createSettingsSnapshot({});
25
+ installDirectorSettings(ctx, {}, settingsSnapshot.hooks);
26
+ const getSettings = settingsSnapshot.get;
27
+ // ---- default route seam ------------------------------------------------
28
+ // settings 里的默认 provider/model 应用到一切未显式指定模型的子代理
29
+ // 启动(内置 subagent/subagent_fork 等),实现"无感生效";卸载时由
30
+ // ctx.effect 恢复被包装的原方法。
31
+ if (config.applyDefaultRoute !== false) {
32
+ ctx.effect(() => applyDefaultRouteSeam(ctx, getSettings), 'subagent-director:default-route-seam');
33
+ }
31
34
  // ---- role guidance ----------------------------------------------------
32
35
  applyGuidance(ctx, getSettings, toolName);
33
36
  // ---- delegation tool registration ------------------------------------
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-resolver.d.ts","sourceRoot":"","sources":["../src/route-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,6DAA6D;AAC7D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACpD;AAED,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,KAAK,EAAE,UAAU,CAAC;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IACxD,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA2E3D"}
1
+ {"version":3,"file":"route-resolver.d.ts","sourceRoot":"","sources":["../src/route-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,6DAA6D;AAC7D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACpD;AAED,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,KAAK,EAAE,UAAU,CAAC;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IACxD,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA4F3D"}
@@ -22,7 +22,19 @@ export function resolveRoute(input) {
22
22
  resolvedRoleId = roleIdRaw;
23
23
  }
24
24
  else {
25
- warnings.push('subagent-director: role "' + roleIdRaw + '" does not exist; its binding (persona/provider/model) is skipped');
25
+ const byDisplay = Object.entries(roles).find(([, candidate]) => candidate?.displayName === roleIdRaw);
26
+ if (byDisplay !== undefined) {
27
+ role = byDisplay[1];
28
+ resolvedRoleId = byDisplay[0];
29
+ warnings.push('subagent-director: role "' + roleIdRaw + '" is not an id; resolved by displayName to id "' + resolvedRoleId + '" — prefer passing the id directly');
30
+ const dupes = Object.entries(roles).filter(([id, candidate]) => id !== resolvedRoleId && candidate?.displayName === roleIdRaw);
31
+ if (dupes.length > 0) {
32
+ warnings.push('subagent-director: multiple roles share displayName "' + roleIdRaw + '"; using id "' + resolvedRoleId + '"');
33
+ }
34
+ }
35
+ else {
36
+ warnings.push('subagent-director: role "' + roleIdRaw + '" does not exist; its binding (persona/provider/model) is skipped');
37
+ }
26
38
  }
27
39
  }
28
40
  const roleProvider = role === undefined || isEmpty(role.provider) ? undefined : role.provider;
@@ -1 +1 @@
1
- {"version":3,"file":"route-resolver.js","sourceRoot":"","sources":["../src/route-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-resolver.js","sourceRoot":"","sources":["../src/route-resolver.ts"],"names":[],"mappings":"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"}
package/lib/settings.d.ts CHANGED
@@ -22,6 +22,23 @@ import type { SubagentDirectorSettings } from './route-resolver.js';
22
22
  /** Settings namespace for Subagent Director (design section 0 naming resolution). */
23
23
  export declare const SUBAGENT_DIRECTOR_SETTINGS_NAMESPACE: import("@deepseek-ai/dsh-settings").SettingsNamespace;
24
24
  export type { RoleTemplate, SubagentDirectorSettings } from './route-resolver.js';
25
+ /**
26
+ * Live settings snapshot holder.
27
+ *
28
+ * dsh-settings' `installSettingsSection` calls `setSource` exactly once with a
29
+ * source thunk and fires `onChange` on every settings change (settings.yaml
30
+ * hot reload, settings UI writes). The previous wiring captured the value
31
+ * inside setSource and left onChange empty, so edits were only visible after a
32
+ * restart. This helper keeps the source thunk so onChange can re-read it and
33
+ * the snapshot follows live settings.
34
+ */
35
+ export interface SettingsSnapshot<T> {
36
+ /** The dsh-settings consumer hooks to pass to installSettingsSection. */
37
+ hooks: SettingsSectionHooks<T>;
38
+ /** The current resolved snapshot (refreshed by onChange). */
39
+ get(): T;
40
+ }
41
+ export declare function createSettingsSnapshot<T>(initial: T): SettingsSnapshot<T>;
25
42
  /** Schemastery schema for one role template. All fields optional so a partial /
26
43
  * absent role resolves; semantic requirements are enforced by validate(). */
27
44
  export declare const RoleTemplateSchema: z<Schemastery.ObjectS<{
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAgB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAElF,qFAAqF;AACrF,eAAO,MAAM,oCAAoC,uDAAyC,CAAC;AAE3F,YAAY,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAKlF;6EAC6E;AAC7E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAW7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOzB,CAAC;AAWH;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CA4B9E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,GACpD,IAAI,CAQN;AAED,gDAAgD;AAChD,OAAO,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAgB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAElF,qFAAqF;AACrF,eAAO,MAAM,oCAAoC,uDAAyC,CAAC;AAE3F,YAAY,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAElF;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,yEAAyE;IACzE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/B,6DAA6D;IAC7D,GAAG,IAAI,CAAC,CAAC;CACV;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAezE;AAKD;6EAC6E;AAC7E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAW7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOzB,CAAC;AAWH;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CA4B9E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,GACpD,IAAI,CAQN;AAED,gDAAgD;AAChD,OAAO,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC"}
package/lib/settings.js CHANGED
@@ -20,6 +20,23 @@ import z from '@deepseek-ai/schemastery';
20
20
  import { installSettingsSection, settingsNamespace, } from '@deepseek-ai/dsh-settings';
21
21
  /** Settings namespace for Subagent Director (design section 0 naming resolution). */
22
22
  export const SUBAGENT_DIRECTOR_SETTINGS_NAMESPACE = settingsNamespace('subagent-director');
23
+ export function createSettingsSnapshot(initial) {
24
+ let source;
25
+ let snapshot = initial;
26
+ return {
27
+ hooks: {
28
+ setSource: (current) => {
29
+ source = current;
30
+ snapshot = current();
31
+ },
32
+ onChange: () => {
33
+ if (source !== undefined)
34
+ snapshot = source();
35
+ },
36
+ },
37
+ get: () => snapshot,
38
+ };
39
+ }
23
40
  /** Kebab-case: lowercase alphanumeric segments separated by single hyphens. */
24
41
  const KEBAB_CASE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
25
42
  /** Schemastery schema for one role template. All fields optional so a partial /
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AAInC,qFAAqF;AACrF,MAAM,CAAC,MAAM,oCAAoC,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;AAqB3F,MAAM,UAAU,sBAAsB,CAAI,OAAU;IAClD,IAAI,MAA6B,CAAC;IAClC,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,OAAO;QACL,KAAK,EAAE;YACL,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrB,MAAM,GAAG,OAAO,CAAC;gBACjB,QAAQ,GAAG,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,MAAM,KAAK,SAAS;oBAAE,QAAQ,GAAG,MAAM,EAAE,CAAC;YAChD,CAAC;SACF;QACD,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ;KACpB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAEhD;6EAC6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;CAClC,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,KAAgC;IAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,+DAA+D;AAC/D,SAAS,aAAa,CAAC,KAAgC;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAA+B;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,EAAE,GAAG,oEAAoE,CAC3G,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,GAAG,qCAAqC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,GAAG,qCAAqC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,GAAG,gDAAgD,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAY,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,KAAK,CAAC,WAAW,GAAG,qCAAqC,CAC/F,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAY,EACZ,KAA+B,EAC/B,KAAqD;IAErD,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,sHAAsH,CACvH,CAAC;QACF,OAAO;IACT,CAAC;IACD,sBAAsB,CAAC,GAAG,EAAE,oCAAoC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAClG,CAAC;AAED,gDAAgD;AAChD,OAAO,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,110 +1,114 @@
1
- {
2
- "name": "dsh-plugin-subagent-director",
3
- "version": "0.1.0",
4
- "description": "Subagent Director: choose an LLM provider/model for each subagent (call args > role binding > plugin default > inherit parent) and plan main-agent/subagent responsibilities with role templates, plus a settings UI.",
5
- "type": "module",
6
- "main": "lib/index.js",
7
- "types": "lib/index.d.ts",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/SeverusZh/dsh-plugin-subagent-director.git"
11
- },
12
- "homepage": "https://github.com/SeverusZh/dsh-plugin-subagent-director",
13
- "bugs": {
14
- "url": "https://github.com/SeverusZh/dsh-plugin-subagent-director/issues"
15
- },
16
- "files": [
17
- "lib",
18
- "CHANGELOG.md"
19
- ],
20
- "scripts": {
21
- "build": "tsc -p tsconfig.json && node scripts/build-client.mjs",
22
- "build:client": "node scripts/build-client.mjs",
23
- "test": "vitest run",
24
- "typecheck": "tsc --noEmit"
25
- },
26
- "exports": {
27
- ".": {
28
- "types": "./lib/index.d.ts",
29
- "default": "./lib/index.js"
30
- },
31
- "./client": {
32
- "types": "./lib/client/index.d.ts",
33
- "default": "./lib/client/index.js"
34
- },
35
- "./package.json": "./package.json",
36
- "./bridge": {
37
- "types": "./lib/bridge-entry.d.ts",
38
- "default": "./lib/bridge-entry.js"
39
- }
40
- },
41
- "dsh": {
42
- "client": {
43
- "inject": [
44
- "slots",
45
- "locale",
46
- "connection",
47
- "remote"
48
- ],
49
- "platform": "web"
50
- }
51
- },
52
- "keywords": [
53
- "dsh",
54
- "deepseek-harness",
55
- "cordis",
56
- "plugin",
57
- "subagent",
58
- "subagent-director",
59
- "llm",
60
- "provider",
61
- "model",
62
- "role-template"
63
- ],
64
- "license": "MIT",
65
- "peerDependencies": {
66
- "react": "^18.2.0",
67
- "@deepseek-ai/cordis": "^4.0.1",
68
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
69
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
70
- "@deepseek-ai/dsh-settings": "^0.1.0-rc.6",
71
- "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6",
72
- "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6",
73
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
74
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
75
- "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
76
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
77
- "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
78
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
79
- "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6",
80
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
81
- "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.6"
82
- },
83
- "devDependencies": {
84
- "react": "file:../../../DeepSeekHarness/node_modules/react",
85
- "react-dom": "file:../../../DeepSeekHarness/node_modules/react-dom",
86
- "use-sync-external-store": "file:../../../DeepSeekHarness/node_modules/use-sync-external-store",
87
- "@types/react": "^18.3.1",
88
- "@types/react-dom": "^18.3.1",
89
- "@deepseek-ai/cordis": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/cordis",
90
- "@deepseek-ai/dsh-agent": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-agent",
91
- "@deepseek-ai/dsh-llm": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-llm",
92
- "@deepseek-ai/dsh-settings": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-settings",
93
- "@deepseek-ai/dsh-subagent": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-subagent",
94
- "@deepseek-ai/dsh-system-prompt": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-system-prompt",
95
- "@deepseek-ai/dsh-tools": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-tools",
96
- "@deepseek-ai/schemastery": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/schemastery",
97
- "@deepseek-ai/dsh-client-runtime": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-runtime",
98
- "@deepseek-ai/dsh-client-connection": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-connection",
99
- "@deepseek-ai/dsh-client-ui-slots": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-slots",
100
- "@deepseek-ai/dsh-client-web-react": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-web-react",
101
- "@deepseek-ai/dsh-client-ui-settings": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-settings",
102
- "@deepseek-ai/dsh-client-schema-form": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-schema-form",
103
- "@deepseek-ai/dsh-client-locale": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-locale",
104
- "@deepseek-ai/dsh-client-ui-primitives": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-primitives",
105
- "@deepseek-ai/dsh-host-apiproxy": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-host-apiproxy",
106
- "@types/node": "^26.2.0",
107
- "typescript": "^7.0.2",
108
- "vitest": "^4.1.10"
109
- }
110
- }
1
+ {
2
+ "name": "dsh-plugin-subagent-director",
3
+ "version": "0.2.0",
4
+ "description": "Subagent Director: choose an LLM provider/model for each subagent (call args > role binding > plugin default > inherit parent) and plan main-agent/subagent responsibilities with role templates, plus a settings UI.",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/SeverusZh/dsh-plugin-subagent-director.git"
11
+ },
12
+ "homepage": "https://github.com/SeverusZh/dsh-plugin-subagent-director",
13
+ "bugs": {
14
+ "url": "https://github.com/SeverusZh/dsh-plugin-subagent-director/issues"
15
+ },
16
+ "files": [
17
+ "lib",
18
+ "CHANGELOG.md",
19
+ "cordis.patch.yml"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.json && node scripts/build-client.mjs",
23
+ "build:client": "node scripts/build-client.mjs",
24
+ "test": "vitest run",
25
+ "typecheck": "tsc --noEmit"
26
+ },
27
+ "exports": {
28
+ ".": {
29
+ "types": "./lib/index.d.ts",
30
+ "default": "./lib/index.js"
31
+ },
32
+ "./client": {
33
+ "types": "./lib/client/index.d.ts",
34
+ "default": "./lib/client/index.js"
35
+ },
36
+ "./package.json": "./package.json",
37
+ "./bridge": {
38
+ "types": "./lib/bridge-entry.d.ts",
39
+ "default": "./lib/bridge-entry.js"
40
+ }
41
+ },
42
+ "dsh": {
43
+ "bundle": {
44
+ "patch": "./cordis.patch.yml"
45
+ },
46
+ "client": {
47
+ "inject": [
48
+ "slots",
49
+ "locale",
50
+ "connection",
51
+ "remote"
52
+ ],
53
+ "platform": "web"
54
+ }
55
+ },
56
+ "keywords": [
57
+ "dsh",
58
+ "deepseek-harness",
59
+ "cordis",
60
+ "plugin",
61
+ "subagent",
62
+ "subagent-director",
63
+ "llm",
64
+ "provider",
65
+ "model",
66
+ "role-template"
67
+ ],
68
+ "license": "MIT",
69
+ "peerDependencies": {
70
+ "react": "^18.2.0",
71
+ "@deepseek-ai/cordis": "^4.0.1",
72
+ "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
73
+ "@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
74
+ "@deepseek-ai/dsh-settings": "^0.1.0-rc.6",
75
+ "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6",
76
+ "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6",
77
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
78
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
79
+ "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
80
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
81
+ "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
82
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
83
+ "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6",
84
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
85
+ "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.6"
86
+ },
87
+ "devDependencies": {
88
+ "react": "file:../../../DeepSeekHarness/node_modules/react",
89
+ "react-dom": "file:../../../DeepSeekHarness/node_modules/react-dom",
90
+ "use-sync-external-store": "file:../../../DeepSeekHarness/node_modules/use-sync-external-store",
91
+ "@types/react": "^18.3.1",
92
+ "@types/react-dom": "^18.3.1",
93
+ "@deepseek-ai/cordis": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/cordis",
94
+ "@deepseek-ai/dsh-agent": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-agent",
95
+ "@deepseek-ai/dsh-llm": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-llm",
96
+ "@deepseek-ai/dsh-settings": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-settings",
97
+ "@deepseek-ai/dsh-subagent": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-subagent",
98
+ "@deepseek-ai/dsh-system-prompt": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-system-prompt",
99
+ "@deepseek-ai/dsh-tools": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-tools",
100
+ "@deepseek-ai/schemastery": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/schemastery",
101
+ "@deepseek-ai/dsh-client-runtime": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-runtime",
102
+ "@deepseek-ai/dsh-client-connection": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-connection",
103
+ "@deepseek-ai/dsh-client-ui-slots": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-slots",
104
+ "@deepseek-ai/dsh-client-web-react": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-web-react",
105
+ "@deepseek-ai/dsh-client-ui-settings": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-settings",
106
+ "@deepseek-ai/dsh-client-schema-form": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-schema-form",
107
+ "@deepseek-ai/dsh-client-locale": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-locale",
108
+ "@deepseek-ai/dsh-client-ui-primitives": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-client-ui-primitives",
109
+ "@deepseek-ai/dsh-host-apiproxy": "file:../../../DeepSeekHarness/node_modules/@deepseek-ai/dsh-host-apiproxy",
110
+ "@types/node": "^26.2.0",
111
+ "typescript": "^7.0.2",
112
+ "vitest": "^4.1.10"
113
+ }
114
+ }