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 +43 -15
- package/LICENSE +21 -21
- package/README.md +140 -107
- package/cordis.patch.yml +12 -0
- package/lib/config.d.ts +11 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +1 -0
- package/lib/config.js.map +1 -1
- package/lib/default-route.d.ts +46 -0
- package/lib/default-route.d.ts.map +1 -0
- package/lib/default-route.js +56 -0
- package/lib/default-route.js.map +1 -0
- package/lib/guidance.d.ts.map +1 -1
- package/lib/guidance.js +1 -0
- package/lib/guidance.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -11
- package/lib/index.js.map +1 -1
- package/lib/route-resolver.d.ts.map +1 -1
- package/lib/route-resolver.js +13 -1
- package/lib/route-resolver.js.map +1 -1
- package/lib/settings.d.ts +17 -0
- package/lib/settings.d.ts.map +1 -1
- package/lib/settings.js +17 -0
- package/lib/settings.js.map +1 -1
- package/package.json +114 -110
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.
|
|
6
|
-
|
|
7
|
-
首个公开发布版本。
|
|
5
|
+
## [0.2.0] - 2026-08-17
|
|
8
6
|
|
|
9
7
|
### 新增
|
|
10
8
|
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
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
|
|
23
|
-
-
|
|
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) · [特性](#特性) · [快速开始](#快速开始) · [角色模板](#角色模板) · [术语](#术语) · [开发](#开发) · [
|
|
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
|
-
```
|
|
30
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
### 配置(cordis.patch.yml)
|
|
60
|
+
> 注意:不要再用 `- insert:` 添加这两个条目,否则启动会报
|
|
61
|
+
> `duplicate loader entry id`。
|
|
36
62
|
|
|
37
|
-
|
|
63
|
+
### 安装注意事项
|
|
38
64
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
npm
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
- **
|
|
131
|
-
- **
|
|
132
|
-
- **
|
|
133
|
-
- **
|
|
134
|
-
|
|
135
|
-
**
|
|
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.
|
package/cordis.patch.yml
ADDED
|
@@ -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
|
package/lib/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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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"}
|
package/lib/guidance.d.ts.map
CHANGED
|
@@ -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,
|
|
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 !== '' ?
|
package/lib/guidance.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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":"AAoBA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;
|
|
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,
|
|
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"}
|
package/lib/route-resolver.js
CHANGED
|
@@ -22,7 +22,19 @@ export function resolveRoute(input) {
|
|
|
22
22
|
resolvedRoleId = roleIdRaw;
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
|
|
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":"AAyHA,SAAS,OAAO,CAAC,KAAyB;IACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,4EAA4E;IAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAEpF,6EAA6E;IAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAChE,MAAM,SAAS,GAAG,YAAY,IAAI,QAAQ,CAAC,WAAW,CAAC;IAEvD,IAAI,IAA8B,CAAC;IACnC,IAAI,cAAkC,CAAC;IACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,KAAK,CAAC;YACb,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CACX,2BAA2B,GAAG,SAAS,GAAG,mEAAmE,CAC9G,CAAC;
|
|
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<{
|
package/lib/settings.d.ts.map
CHANGED
|
@@ -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;
|
|
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 /
|
package/lib/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,110 +1,114 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-plugin-subagent-director",
|
|
3
|
-
"version": "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
|
-
|
|
21
|
-
|
|
22
|
-
"build
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"./
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"
|
|
71
|
-
"@deepseek-ai/
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
"@deepseek-ai/dsh-
|
|
75
|
-
"@deepseek-ai/dsh-
|
|
76
|
-
"@deepseek-ai/dsh-
|
|
77
|
-
"@deepseek-ai/dsh-
|
|
78
|
-
"@deepseek-ai/dsh-client-
|
|
79
|
-
"@deepseek-ai/dsh-client-
|
|
80
|
-
"@deepseek-ai/dsh-client-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"@
|
|
92
|
-
"@
|
|
93
|
-
"@deepseek-ai/
|
|
94
|
-
"@deepseek-ai/dsh-
|
|
95
|
-
"@deepseek-ai/dsh-
|
|
96
|
-
"@deepseek-ai/
|
|
97
|
-
"@deepseek-ai/dsh-
|
|
98
|
-
"@deepseek-ai/dsh-
|
|
99
|
-
"@deepseek-ai/dsh-
|
|
100
|
-
"@deepseek-ai/
|
|
101
|
-
"@deepseek-ai/dsh-client-
|
|
102
|
-
"@deepseek-ai/dsh-client-
|
|
103
|
-
"@deepseek-ai/dsh-client-
|
|
104
|
-
"@deepseek-ai/dsh-client-
|
|
105
|
-
"@deepseek-ai/dsh-
|
|
106
|
-
"@
|
|
107
|
-
"
|
|
108
|
-
"
|
|
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
|
+
}
|