dsh-plugin-t-expert 0.1.1 → 0.2.2
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/README.md +58 -33
- package/THIRD-PARTY-NOTICES +24 -13
- package/cordis.patch.yml +1 -1
- package/data/source.json +1 -1
- package/data/team-profiles.py +1 -1
- package/data/teams.json +1 -1
- package/data/zh/manual.json +1 -1
- package/lib/catalog.js +1 -1
- package/lib/client.js +111 -65
- package/lib/i18n.js +4 -4
- package/lib/index.js +124 -50
- package/lib/plan-check.js +3 -1
- package/lib/teams/capabilities.js +1 -1
- package/lib/teams/index.js +1 -1
- package/lib/teams/quality-gates.js +4 -5
- package/lib/teams/tools.js +6 -3
- package/package.json +10 -12
- package/vendor/dsh-agent-teams/LICENSE +21 -0
- package/vendor/dsh-agent-teams/VENDOR.md +53 -0
- package/vendor/third-party-licenses/README.md +22 -0
- package/vendor/third-party-licenses/agency-agents-zh.LICENSE +22 -0
- package/vendor/third-party-licenses/agency-agents.LICENSE +21 -0
package/README.md
CHANGED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
| `@` 召唤 | 在输入框打 `@` 出现按分区分组的中文菜单,选中的专家作为原生引用 chip 进入本轮对话 |
|
|
12
12
|
| 模型工具 | `list_t_experts` / `summon_t_expert` / `summon_t_experts` / `t_team_plan_check` 四个工具 |
|
|
13
13
|
| 小队命令 | `/t` 列出小队;`/t <小队名\|别名> <目标>` 直接拉起一支多成员小队干活 |
|
|
14
|
-
| 设置页 | 设置 → T
|
|
14
|
+
| 设置页 | 设置 → T专家,两个标签:**专家**(启停 / 看提示词)与 **队伍**(小队模板 + 运行中的团队) |
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
专家名册与团队引擎**解耦**:团队引擎挂载失败(例如宿主子代理契约不匹配)时,
|
|
17
|
+
专家名册、`@` 召唤、`/t` 列表仍然照常可用。
|
|
18
|
+
> 注意:这条解耦覆盖的是**引擎的运行时挂载**。宿主包本身缺失时(插件声明了若干
|
|
19
|
+
> `@deepseek-ai/*` peer 依赖,由 DSH 安装提供)整个插件都无法加载 —— 这是任何插件的共同前提。
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -42,7 +42,7 @@ dsh plugin --profile web add dsh-plugin-t-expert
|
|
|
42
42
|
需要锁版本时:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
dsh plugin --profile web add --save-exact dsh-plugin-t-expert@0.1.
|
|
45
|
+
dsh plugin --profile web add --save-exact dsh-plugin-t-expert@0.1.1
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
插件在 `package.json` 里声明了 `dsh.bundle`(补丁文件 `cordis.patch.yml`),
|
|
@@ -57,21 +57,16 @@ dsh plugin --profile web add --save-exact dsh-plugin-t-expert@0.1.0
|
|
|
57
57
|
error: profile "desktop" is managed exclusively by the Electron application
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **插件市场(推荐)**:在 DSH Desktop 里用插件市场(dsh-market)一键安装。
|
|
63
|
-
- **仓库内的安装脚本**:先在本仓库里构建,再安装:
|
|
60
|
+
**请用插件市场(dsh-market)安装**:在 DSH Desktop 里搜索本插件一键装即可。
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
bash scripts/install-desktop.sh # 真正安装
|
|
70
|
-
bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest)
|
|
71
|
-
```
|
|
62
|
+
本仓库**不自带安装脚本**(维护者的运维脚本不在仓库里)。如果你要手工装,等价动作是:
|
|
63
|
+
把包内的 `lib/`、`data/`、`cordis.patch.yml` 与许可文件复制到一个运行目录,在目标 profile 的
|
|
64
|
+
`package.json` 里加一条 `file:<该目录>` 依赖并追加到 `dsh.profile.bundles`,再把整个目录
|
|
65
|
+
**真目录拷贝**(不要符号链接)到 profile 的 `node_modules/<包名>`。
|
|
72
66
|
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
> ⚠️ 该 `file:` 依赖指向的是**运行目录**,与首次播种出来的数据目录是两处,不要混在一起:
|
|
68
|
+
> 运行目录可随时重建,数据目录必须长期保留。清空或迁移运行目录会连带影响插件解析,
|
|
69
|
+
> 届时重跑一遍安装步骤即可。
|
|
75
70
|
|
|
76
71
|
### 3. 装完之后
|
|
77
72
|
|
|
@@ -102,7 +97,7 @@ bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest
|
|
|
102
97
|
│ ├── descriptions.json # slug → 中文简介
|
|
103
98
|
│ ├── divisions.json # 分区中文标签
|
|
104
99
|
│ ├── <分区>/<slug>.md # 中文人格正文(与 experts/ 同相对路径)
|
|
105
|
-
│ ├── manual.json # 人工补译:names / descriptions
|
|
100
|
+
│ ├── manual.json # 人工补译:names / descriptions(优先于自动层)
|
|
106
101
|
│ ├── manual-bodies/ # 人工补译正文(最高优先,不会被覆盖)
|
|
107
102
|
│ └── COVERAGE.json # 中文覆盖率与缺口清单
|
|
108
103
|
├── teams.json # 小队定义(设置页「小队」标签写回这里)
|
|
@@ -127,6 +122,29 @@ bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest
|
|
|
127
122
|
| `provider` | string | `"spawn"` | 召唤专家时使用的子代理 provider |
|
|
128
123
|
| `divisions` | string[] | `[]` | 留空 = 自动扫描 `root` 下所有含 `.md` 的分区目录 |
|
|
129
124
|
| `maxDepth` | natural | 无默认(不传则不加限制) | 传给子代理的嵌套深度上限 |
|
|
125
|
+
| `maxSummonBatch` | natural | `8` | 一次 `summon_t_experts` 最多几位专家 |
|
|
126
|
+
| `summonConcurrency` | natural | `4` | `summon_t_experts` 的并发度 |
|
|
127
|
+
| `summonTaskMaxChars` | natural | `8000` | 单个专家任务的字符上限 |
|
|
128
|
+
| `descriptionLimit` | natural | `120` | `list_t_experts` 里简介的截断长度 |
|
|
129
|
+
| `engineConfig` | string | `root` 同级目录下的 `t-team.config.json` | 团队引擎配置路径(`team-profiles.py` 的产物) |
|
|
130
|
+
| `stateDir` | string | `".agent-teams"` | 团队状态目录(相对工作区) |
|
|
131
|
+
| `memberProvider` | string | `"spawn"` | 队员子代理使用的 provider |
|
|
132
|
+
| `memberModel` | string | 不传 = 跟随队长 | 队员默认模型 |
|
|
133
|
+
| `maxMembers` | natural | `8` | 一支团队最多几名成员 |
|
|
134
|
+
|
|
135
|
+
> 这些都可以在 profile 的 `cordis.patch.yml` 里覆盖,例如:
|
|
136
|
+
>
|
|
137
|
+
> ```yaml
|
|
138
|
+
> - id: t-team
|
|
139
|
+
> name: 'dsh-plugin-t-expert'
|
|
140
|
+
> config:
|
|
141
|
+
> maxSummonBatch: 4
|
|
142
|
+
> stateDir: .my-team-state
|
|
143
|
+
> ```
|
|
144
|
+
>
|
|
145
|
+
> 注意 patch 行的 `config` 是**整体替换**而不是深合并,覆盖时要重述该行需要的每一个键。
|
|
146
|
+
|
|
147
|
+
**引擎配置:缺失 vs 损坏**。`engineConfig` 指向的文件不存在时(例如自定义了 `root`、还没生成过小队),插件正常加载,只是团队功能不可用 —— 原因会写进日志、由 `/t` 报出,并进入系统提示段让模型知道,不是静默跳过。而文件存在却解析失败、或 `profiles` 类型不对,属于自带数据的错配,插件会在**加载时直接失败**并指出路径与修法。
|
|
130
148
|
|
|
131
149
|
---
|
|
132
150
|
|
|
@@ -152,13 +170,14 @@ bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest
|
|
|
152
170
|
| `/t <小队名\|别名> <目标>` | 拉起该小队执行目标(队长先给出成员与任务草案,等你 review 后再启动) |
|
|
153
171
|
| `/t <一句话目标>` | 没有匹配到小队名时,按目标自动挑选最合适的小队 |
|
|
154
172
|
|
|
155
|
-
|
|
173
|
+
小队**列表与匹配**每次都从磁盘读定义,所以改完名字立刻反映在 `/t` 里;
|
|
174
|
+
但**建队时用的是插件启动时载入的引擎配置**,因此小队定义的增删改要**重启 DSH** 才对建队生效。
|
|
156
175
|
|
|
157
176
|
---
|
|
158
177
|
|
|
159
178
|
## 六、编辑小队
|
|
160
179
|
|
|
161
|
-
**设置 → T专家 →
|
|
180
|
+
**设置 → T专家 → 队伍** 标签里可以搜索、修改成员 / 别名 / 启停,然后保存。
|
|
162
181
|
|
|
163
182
|
保存流程:
|
|
164
183
|
|
|
@@ -167,6 +186,9 @@ bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest
|
|
|
167
186
|
3. **编译失败会自动回滚** `teams.json`(不会把坏定义留在盘上);
|
|
168
187
|
4. 缺 `python3` 时报错并回滚。
|
|
169
188
|
|
|
189
|
+
> ⚠️ **保存后需要重启 DSH**:`/t` 列表会立刻看到新小队,但引擎配置在插件启动时已载入,
|
|
190
|
+
> 不重启就建不了队(`/t 新队 目标` 会提示「小队不存在」)。
|
|
191
|
+
|
|
170
192
|
硬约束(由 `team-profiles.py` 与小队数据层校验):
|
|
171
193
|
|
|
172
194
|
| 约束 | 值 |
|
|
@@ -184,32 +206,35 @@ bash scripts/install-desktop.sh --remove # 卸载(还原 profile manifest
|
|
|
184
206
|
|
|
185
207
|
本插件以 **MIT** 发布,全文见 `LICENSE`。
|
|
186
208
|
|
|
187
|
-
|
|
188
|
-
`THIRD-PARTY-NOTICES`
|
|
209
|
+
随包分发的专家名册、中文译文与内置团队引擎各自按 MIT 授权使用,
|
|
210
|
+
各自的来源、版本与署名要求写在 `THIRD-PARTY-NOTICES` 里,**完整许可文本随包放在 `vendor/` 下**。
|
|
211
|
+
再分发本插件(含修改版)时,请一并保留 `LICENSE`、`THIRD-PARTY-NOTICES` 与 `vendor/` 下的许可文本。
|
|
189
212
|
|
|
190
213
|
---
|
|
191
214
|
|
|
192
215
|
## 八、开发 / 构建
|
|
193
216
|
|
|
194
217
|
```bash
|
|
195
|
-
npm install #
|
|
196
|
-
npm run build #
|
|
218
|
+
npm install # 安装依赖(peer 依赖由 DSH 宿主提供)
|
|
219
|
+
npm run build # 品牌化 + 构建客户端产物
|
|
197
220
|
npm run verify # 自检套件(插件契约、工具、remote、客户端产物、播种与快照一致性)
|
|
221
|
+
npm run sync-data # 把运行时数据同步进包内 data/(默认源 ~/.t-team)
|
|
198
222
|
```
|
|
199
223
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
224
|
+
> ⚠️ 这些 script 的实现文件**不在本仓库里**:维护者把它们放在仓库同级的运维目录
|
|
225
|
+
> (`../brand.mjs`、`../build-client.mjs`、`../verify.mjs`、`../sync-data.mjs`,由 `package.json`
|
|
226
|
+
> 的 `scripts` 以相对路径引用)。只 clone 本仓库是跑不了构建与自检的;要发布请使用完整的工作目录。
|
|
227
|
+
>
|
|
228
|
+
> `npm run build` 必须**先**品牌化再构建客户端:客户端产物把品牌化后的引擎 bundle 内联进去,
|
|
229
|
+
> 顺序错了会把旧文本打进产物。
|
|
206
230
|
|
|
207
231
|
---
|
|
208
232
|
|
|
209
233
|
## 九、已知限制
|
|
210
234
|
|
|
211
235
|
- 客户端面板**不做自定义专家的增删改**;要加自己的专家,直接把 `.md` 放进 `~/.t-team/experts/<分区>/`,宿主按 mtime 指纹自动重载,不需要重启。
|
|
236
|
+
(中文侧车同理:`zh/` 下的名字 / 简介 / 正文文件增删改都会按指纹重载。)
|
|
212
237
|
- 包内快照只在数据目录**缺项**时播种。升级插件只更新包内快照,**不会覆盖你已有的数据目录内容**。
|
|
213
|
-
-
|
|
238
|
+
- 小队定义的改动需要重启 DSH 才对**建队**生效(见第五、六节)。
|
|
214
239
|
- 改插件代码后需要重新 `npm run build`(改了 `src/client.jsx` 才会重新生成客户端产物)并重装/重启。
|
|
215
240
|
- 团队引擎挂载失败时,团队相关功能不可用,但专家名册、`@` 召唤、`/t` 列表不受影响,失败原因由 `/t` 报出。
|
package/THIRD-PARTY-NOTICES
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# 第三方组件与内容声明
|
|
2
2
|
|
|
3
|
-
本插件(`dsh-plugin-t-expert`,MIT,见 `LICENSE
|
|
4
|
-
|
|
3
|
+
本插件(`dsh-plugin-t-expert`,MIT,见 `LICENSE`)打包了两部分第三方成果。
|
|
4
|
+
它们各自保留原许可,本文件说明来源、版本与许可,以便再分发时履行署名义务。
|
|
5
|
+
**完整许可文本随包分发**在 `vendor/` 下(见第 3 节)。
|
|
5
6
|
|
|
6
7
|
## 1. 内置团队引擎
|
|
7
8
|
|
|
@@ -10,24 +11,34 @@
|
|
|
10
11
|
| 上游包 | `@nanmicoder/dsh-agent-teams` |
|
|
11
12
|
| 上游仓库 | https://github.com/NanmiCoder/dsh-agent-teams |
|
|
12
13
|
| 版本 | `0.1.17-rc.1` |
|
|
13
|
-
| 许可 | MIT
|
|
14
|
-
| 位置 | `vendor/dsh-agent-teams
|
|
14
|
+
| 许可 | MIT(完整文本随包:`vendor/dsh-agent-teams/LICENSE`)— Copyright (c) 2026 程序员阿江(Relakkes) |
|
|
15
|
+
| 位置 | `vendor/dsh-agent-teams/upstream/`(上游文件逐字节原样保留,含 `LICENSE` 与 `VENDOR.md`)、`lib/teams/`(由品牌化工具 `brand.mjs` 从上游镜像生成的品牌化产物:命令 `/agent-teams` → `/t`、工具 `agent_teams_*` → `t_team_*`) |
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
**对上游镜像的改动**:`vendor/dsh-agent-teams/upstream/` 内的文件**永不修改**;
|
|
18
|
+
`lib/teams/` 是生成物,差异 = 品牌化改名 + `brand.mjs` 中逐条注释的 `FIXES`。
|
|
19
|
+
除改名外,`FIXES` 还包含少量**本地缺陷修补与必要的行为改动**(例如把 profile 上限从 16 抬到 48、
|
|
20
|
+
修正命令视图 key、修正交接期与终态任务的校验、放行 `.env.example` 一类模板文件等)。
|
|
21
|
+
每条 `FIXES` 都声明了期望命中次数,上游文本一变即构建失败,不会静默退回上游行为。
|
|
17
22
|
|
|
18
|
-
## 2.
|
|
23
|
+
## 2. 专家名册与中文侧车
|
|
19
24
|
|
|
20
25
|
| 项 | 值 |
|
|
21
26
|
| --- | --- |
|
|
22
|
-
|
|
|
27
|
+
| 英文名册 | The Agency / AgentLand(`msitarzewski/agency-agents`)— MIT,Copyright (c) 2025 AgentLand Contributors。完整文本随包:`vendor/third-party-licenses/agency-agents.LICENSE` |
|
|
28
|
+
| 中文译文 | `jnMetaCode/agency-agents-zh`(中文翻译与本地化)— MIT,Copyright (c) 2025 Michael Sitarzewski(英文原版)、Copyright (c) 2026 jnMetaCode(中文翻译与本地化)。完整文本随包:`vendor/third-party-licenses/agency-agents-zh.LICENSE` |
|
|
29
|
+
| 分发形态 | 上述两部分内容随 `@michengai/dsh-agency-agents` 一同分发(该包自身的 TypeScript 源码与构建脚本为 Apache-2.0,**本插件不打包其任何代码**) |
|
|
23
30
|
| 版本指纹 | 见 `data/source.json` 的 `sourceRevision` |
|
|
24
|
-
|
|
|
25
|
-
| 位置 | `data/experts/`(18 分区 / 279 位,逐字节镜像)、`data/zh/`(中文侧车) |
|
|
31
|
+
| 位置 | `data/experts/`(18 分区 / 279 位,逐字节镜像)、`data/zh/`(中文名字 / 简介 / 人格正文 / 分区标签) |
|
|
26
32
|
|
|
27
|
-
`data/zh/`
|
|
28
|
-
|
|
33
|
+
`data/zh/manual.json` 与 `data/zh/manual-bodies/` 是**本项目的补充翻译**(用于补齐上游尚未覆盖的
|
|
34
|
+
条目或在译文不准确时覆盖),随本插件以 MIT 发布。
|
|
29
35
|
|
|
30
36
|
## 3. 分发要求
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
再分发本插件(或其修改版)时请一并保留以下文件(它们都在 npm 包内):
|
|
39
|
+
|
|
40
|
+
- `LICENSE`(本插件)
|
|
41
|
+
- `THIRD-PARTY-NOTICES`(本文件)
|
|
42
|
+
- `vendor/dsh-agent-teams/LICENSE`(内置团队引擎)
|
|
43
|
+
- `vendor/third-party-licenses/agency-agents.LICENSE`(英文名册)
|
|
44
|
+
- `vendor/third-party-licenses/agency-agents-zh.LICENSE`(中文译文)
|
package/cordis.patch.yml
CHANGED
package/data/source.json
CHANGED
package/data/team-profiles.py
CHANGED
|
@@ -42,7 +42,7 @@ DEFAULT_PATCH = os.environ.get("T_TEAM_PATCH", os.path.join(HOME, ".dsh", "profi
|
|
|
42
42
|
MARKER_START = "# >>> t-team teams(由 team-profiles.py 生成,勿手改;改 teams.json 后重跑)"
|
|
43
43
|
MARKER_END = "# <<< t-team teams"
|
|
44
44
|
|
|
45
|
-
MAX_PROFILES = 48 #
|
|
45
|
+
MAX_PROFILES = 48 # 引擎侧已由品牌化工具 brand.mjs 把 MAX_TEAM_PROFILES 调到 48(上游默认 16)
|
|
46
46
|
MAX_MEMBERS = 8 # 一个 profile 的成员数上限(经验值:队长上下文压力)
|
|
47
47
|
MAX_SEED_TASKS = 32 # AgentTeams: MAX_PROFILE_TASKS
|
|
48
48
|
PROFILE_KEY_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
|
package/data/teams.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_note": "T专家 小队定义(人工维护)。每支小队 =
|
|
2
|
+
"_note": "T专家 小队定义(人工维护)。每支小队 = 一个团队引擎 profile:key 用 ASCII(用 /t <key> <目标> 拉起,引擎内是 /t --profile <key>),中文放 description 与 aliases(供 /t 匹配),members 是 T专家 名册里的专家 slug。改完跑 `python3 team-profiles.py` 重新生成引擎配置。",
|
|
3
3
|
"defaults": {
|
|
4
4
|
"taskPlanning": "captain",
|
|
5
5
|
"personaMode": "summary",
|
package/data/zh/manual.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_note": "T
|
|
2
|
+
"_note": "T专家 的中文人工补译层(人工维护)。键是专家 slug。名字/简介写在本文件的 names/descriptions;正文另放 zh/manual-bodies/<分区>/<slug>.md(最高优先,同步清场时整棵子树跳过、永不被删)。上游新增专家若缺译文会出现在 zh/COVERAGE.json 的 gaps 里,在这里补上即可。",
|
|
3
3
|
"names": {
|
|
4
4
|
"engineering-ats-validator-architect": "ATS 简历解析验证架构师",
|
|
5
5
|
"engineering-china-network-engineer": "中国网络工程师",
|
package/lib/catalog.js
CHANGED