dsh-plugin-t-expert 0.2.3 → 0.2.5
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 +33 -16
- package/THIRD-PARTY-NOTICES +23 -17
- package/data/source.json +3 -88
- package/data/t-team.config.json +1226 -381
- package/data/team-profiles.py +1 -1
- package/data/teams.json +625 -285
- package/data/teams.resolved.json +1279 -456
- package/data/zh/COVERAGE.json +1 -1
- package/lib/catalog.js +206 -42
- package/lib/client.js +458 -10
- package/lib/i18n.js +37 -5
- package/lib/index.js +315 -22
- package/lib/remote.js +173 -1
- package/lib/squads.js +9 -2
- package/package.json +2 -4
- package/vendor/dsh-agent-teams/VENDOR.md +0 -53
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# T专家(dsh-plugin-t-expert)
|
|
2
2
|
|
|
3
|
-
**T专家** 把一个 **22
|
|
3
|
+
**T专家** 把一个 **22 个分类 / 314 位专家**的名册(含全量中文译文)
|
|
4
4
|
做成一个独立的 DeepSeek Harness 插件,并在插件内部**自带一套多智能体团队引擎**(多成员小队、任务 DAG、调度、邮箱、活动面板)。
|
|
5
5
|
|
|
6
6
|
装上一个插件,你同时得到三样东西:
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
| 能力 | 说明 |
|
|
9
9
|
| --- | --- |
|
|
10
10
|
| 专家名册 | 314 位专家,含**中文侧车**(中文名 / 中文简介 / 中文人格正文,当前覆盖率 314/314) |
|
|
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
16
|
专家名册与团队引擎**解耦**:团队引擎挂载失败(例如宿主子代理契约不匹配)时,
|
|
17
17
|
专家名册、`@` 召唤、`/t` 列表仍然照常可用。
|
|
@@ -91,12 +91,12 @@ error: profile "desktop" is managed exclusively by the Electron application
|
|
|
91
91
|
|
|
92
92
|
```
|
|
93
93
|
~/.t-team/
|
|
94
|
-
├── experts/ #
|
|
94
|
+
├── experts/ # 专家名册:<分类>/<slug>.md(22 个分类、314 位)
|
|
95
95
|
├── zh/ # 中文侧车(译文只在这里,永不写进 experts/)
|
|
96
96
|
│ ├── names.json # slug → 中文名
|
|
97
97
|
│ ├── descriptions.json # slug → 中文简介
|
|
98
|
-
│ ├── divisions.json #
|
|
99
|
-
│ ├──
|
|
98
|
+
│ ├── divisions.json # 分类中文标签
|
|
99
|
+
│ ├── <分类>/<slug>.md # 中文人格正文(与 experts/ 同相对路径)
|
|
100
100
|
│ ├── manual.json # 人工补译:names / descriptions(优先于自动层)
|
|
101
101
|
│ ├── manual-bodies/ # 人工补译正文(最高优先,不会被覆盖)
|
|
102
102
|
│ └── COVERAGE.json # 中文覆盖率与缺口清单
|
|
@@ -117,10 +117,11 @@ error: profile "desktop" is managed exclusively by the Electron application
|
|
|
117
117
|
|
|
118
118
|
| 配置项 | 类型 | 默认值 | 含义 |
|
|
119
119
|
| --- | --- | --- | --- |
|
|
120
|
-
| `root` | string | `~/.t-team/experts` | 专家名册目录,读 `experts
|
|
121
|
-
| `zhRoot` | string | `~/.t-team/zh` | 中文侧车目录(名字 / 简介 / 正文 /
|
|
120
|
+
| `root` | string | `~/.t-team/experts` | 专家名册目录,读 `experts/<分类>/<slug>.md` |
|
|
121
|
+
| `zhRoot` | string | `~/.t-team/zh` | 中文侧车目录(名字 / 简介 / 正文 / 分类标签) |
|
|
122
|
+
| `customRoot` | string | `~/.t-team/custom` | 自建专家目录(面板「新建专家」写这里,默认落 `custom` 分类,可在表单里另建分类;与 `root` 分开是硬要求) |
|
|
122
123
|
| `provider` | string | `"spawn"` | 召唤专家时使用的子代理 provider |
|
|
123
|
-
| `divisions` | string[] | `[]` | 留空 = 自动扫描 `root` 下所有含 `.md`
|
|
124
|
+
| `divisions` | string[] | `[]` | 留空 = 自动扫描 `root` 下所有含 `.md` 的分类目录 |
|
|
124
125
|
| `maxDepth` | natural | 无默认(不传则不加限制) | 传给子代理的嵌套深度上限 |
|
|
125
126
|
| `maxSummonBatch` | natural | `8` | 一次 `summon_t_experts` 最多几位专家 |
|
|
126
127
|
| `summonConcurrency` | natural | `4` | `summon_t_experts` 的并发度 |
|
|
@@ -154,7 +155,7 @@ error: profile "desktop" is managed exclusively by the Electron application
|
|
|
154
155
|
|
|
155
156
|
| 工具 | 作用 |
|
|
156
157
|
| --- | --- |
|
|
157
|
-
| `list_t_experts` |
|
|
158
|
+
| `list_t_experts` | 列出**已启用**专家的分类与数量;传入分类名可列出该分类专家(用于挑出唯一的专家名) |
|
|
158
159
|
| `summon_t_expert` | 召唤 1 位专家:以该专家的完整人格跑一个子代理并返回结果(阻塞等待) |
|
|
159
160
|
| `summon_t_experts` | 并行召唤多位专家:最多 8 位、并发 4;部分失败时仍返回成功的结果 |
|
|
160
161
|
| `t_team_plan_check` | **只读** DAG 预检:把打算创建的一批团队任务先跑一遍引擎校验,一次报出全部问题、警示与建议执行顺序 |
|
|
@@ -208,6 +209,8 @@ error: profile "desktop" is managed exclusively by the Electron application
|
|
|
208
209
|
|
|
209
210
|
随包分发的专家名册、中文译文与内置团队引擎各自按 MIT 授权使用,
|
|
210
211
|
各自的来源、版本与署名要求写在 `THIRD-PARTY-NOTICES` 里,**完整许可文本随包放在 `vendor/` 下**。
|
|
212
|
+
名册与引擎**不再从上游同步**:`data/experts/` 与 `lib/teams/` 现在就是本仓的真源 / 手工源码,
|
|
213
|
+
而上游项目的署名义务不因停止同步而消失,故这些声明必须保留。
|
|
211
214
|
再分发本插件(含修改版)时,请一并保留 `LICENSE`、`THIRD-PARTY-NOTICES` 与 `vendor/` 下的许可文本。
|
|
212
215
|
|
|
213
216
|
---
|
|
@@ -216,24 +219,38 @@ error: profile "desktop" is managed exclusively by the Electron application
|
|
|
216
219
|
|
|
217
220
|
```bash
|
|
218
221
|
npm install # 安装依赖(peer 依赖由 DSH 宿主提供)
|
|
219
|
-
npm run build #
|
|
222
|
+
npm run build # 构建客户端产物
|
|
220
223
|
npm run verify # 自检套件(插件契约、工具、remote、客户端产物、播种与快照一致性)
|
|
221
224
|
npm run sync-data # 把运行时数据同步进包内 data/(默认源 ~/.t-team)
|
|
222
225
|
```
|
|
223
226
|
|
|
224
227
|
> ⚠️ 这些 script 的实现文件**不在本仓库里**:维护者把它们放在仓库同级的运维目录
|
|
225
|
-
> (`../
|
|
228
|
+
> (`../build-client.mjs`、`../verify.mjs`、`../sync-data.mjs`、`../add-expert.py`,由 `package.json`
|
|
226
229
|
> 的 `scripts` 以相对路径引用)。只 clone 本仓库是跑不了构建与自检的;要发布请使用完整的工作目录。
|
|
227
230
|
>
|
|
228
|
-
>
|
|
229
|
-
>
|
|
231
|
+
> 内置团队引擎(`lib/teams/`)是**手工维护的源码**:品牌化生成链与上游镜像已经移除(2026-09-12),
|
|
232
|
+
> 改引擎直接改 `lib/teams/*.js` 即可,不再有"改规则 → 重新生成"这一步。
|
|
230
233
|
|
|
231
234
|
---
|
|
232
235
|
|
|
233
236
|
## 九、已知限制
|
|
234
237
|
|
|
235
|
-
-
|
|
236
|
-
|
|
238
|
+
- **名册的增删(内置名册)**:`data/experts/` 就是真源(不再从上游拉取)。维护者用运维台
|
|
239
|
+
`bash ~/web/t-team/tz.sh 1` 新增:选分类(或新建分类)→ 给一个专家 `.md` 的路径 → 脚本把它
|
|
240
|
+
同时写进源码 `data/experts/<分类>/<slug>.md`(随包发布)与运行时 `~/.t-team/experts/<分类>/`(立即生效)。
|
|
241
|
+
删除走 `tz.sh 2`,统计 `tz.sh 3`,一致性校验 `tz.sh 5`。要求 `.md` 开头有 frontmatter
|
|
242
|
+
(`name` 与 `description` 必填,`emoji` 可选);没有 frontmatter 的文件可以在命令里用
|
|
243
|
+
`--name/--description` 补出来。分类名与插件扫描口径一致:`a-z 0-9 . -`,不以 `.` 开头。
|
|
244
|
+
- **自定义专家**:在 设置 → T专家 → 专家 里点「+ 新建专家」,填名称、简介与人格正文即可;自建的会在卡片上带「自建」标记,可以就地编辑或删除。
|
|
245
|
+
它们写在 `customRoot`(默认 `~/.t-team/custom/<分类>/<slug>.md`),**与随包发布的内置名册(`experts/`)分开**:内置名册是包的一部分,重装/升级会整棵替换,往里放文件会被覆盖掉。
|
|
246
|
+
- **自建分类**:表单里的「分类」下拉列出**全部分类**——官方 22 个(学术 / 金融 / 游戏 …)和你自建的都可以选;
|
|
247
|
+
选「+ 新建分类…」则填两个字段——**目录名**(小写 ASCII,成为 `~/.t-team/custom/<目录名>/`)与**显示名**(中文,记在 `<customRoot>/divisions.json`)。
|
|
248
|
+
设置页的 **分类** 标签页可以新建、改名、删除自建分类,并看到每个分类下有多少专家(含其中自建多少)。
|
|
249
|
+
- **把自建专家归到官方分类名下是允许的,也是安全的**:分类只是**归属**,文件永远写 `~/.t-team/custom/<分类>/<slug>.md`,
|
|
250
|
+
内置名册目录(`experts/`)一个字节都不会动,所以升级插件也不会把它删掉。官方分类本身只读——它的名字与存亡跟随包内名册,不接受本机改名或删除。
|
|
251
|
+
删除自建分类时若里面还有自建专家会被拒绝(先移走或删掉),不会静默连删。编辑时改分类=移动文件。
|
|
252
|
+
- 自建专家默认落在「自定义」分类,建好后记得启用;也能被 `/t` 小队挑成队员。
|
|
253
|
+
- 中文侧车(`zh/` 下的名字 / 简介 / 正文)的增删改都按 mtime 指纹自动重载,不需要重启;名册与自建专家同理。
|
|
237
254
|
- 包内快照只在数据目录**缺项**时播种。升级插件只更新包内快照,**不会覆盖你已有的数据目录内容**。
|
|
238
255
|
- 小队定义的改动需要重启 DSH 才对**建队**生效(见第五、六节)。
|
|
239
256
|
- 改插件代码后需要重新 `npm run build`(改了 `src/client.jsx` 才会重新生成客户端产物)并重装/重启。
|
package/THIRD-PARTY-NOTICES
CHANGED
|
@@ -12,13 +12,17 @@
|
|
|
12
12
|
| 上游仓库 | https://github.com/NanmiCoder/dsh-agent-teams |
|
|
13
13
|
| 版本 | `0.1.17-rc.1` |
|
|
14
14
|
| 许可 | MIT(完整文本随包:`vendor/dsh-agent-teams/LICENSE`)— Copyright (c) 2026 程序员阿江(Relakkes) |
|
|
15
|
-
| 位置 | `
|
|
15
|
+
| 位置 | `lib/teams/`(16 个文件,由上述上游派生的品牌化产物:命令 `/agent-teams` → `/t`、工具 `agent_teams_*` → `t_team_*`)。它的客户端产物内联在 `lib/client.js` 里 |
|
|
16
|
+
| 许可全文 | `vendor/dsh-agent-teams/LICENSE` |
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
**本插件对该上游做的改动**(都在 `lib/teams/` 里,可直接对照阅读):
|
|
19
|
+
一是品牌化改名(命令与工具名、包 id、事件与路由前缀);二是少量**本地缺陷修补与必要的行为改动**
|
|
20
|
+
(例如把 profile 上限从 16 抬到 48、修正命令视图 key、修正交接期与终态任务的校验、
|
|
21
|
+
放行 `.env.example` 一类模板文件等)。上游文本从未被修改过——我们只在自己的产物里改。
|
|
22
|
+
|
|
23
|
+
> 2026-09-12 起,上游的**逐字节原样镜像**(`vendor/dsh-agent-teams/upstream/`)与品牌化生成工具
|
|
24
|
+
> (`brand.mjs`)已从仓库移除:`lib/teams/` 转为**手工维护的源码**,不再在构建时从上游重新生成。
|
|
25
|
+
> 停止跟随上游不改变署名义务,故本节保留。
|
|
22
26
|
|
|
23
27
|
## 2. 专家名册与中文侧车
|
|
24
28
|
|
|
@@ -27,20 +31,22 @@
|
|
|
27
31
|
| 英文名册 | The Agency / AgentLand(`msitarzewski/agency-agents`)— MIT,Copyright (c) 2025 AgentLand Contributors。完整文本随包:`vendor/third-party-licenses/agency-agents.LICENSE` |
|
|
28
32
|
| 中文译文 | `jnMetaCode/agency-agents-zh`(中文翻译与本地化)— MIT,Copyright (c) 2025 Michael Sitarzewski(英文原版)、Copyright (c) 2026 jnMetaCode(中文翻译与本地化)。完整文本随包:`vendor/third-party-licenses/agency-agents-zh.LICENSE` |
|
|
29
33
|
| 分发形态 | 上述两部分内容随 `@michengai/dsh-agency-agents` 一同分发(该包自身的 TypeScript 源码与构建脚本为 Apache-2.0,**本插件不打包其任何代码**) |
|
|
30
|
-
|
|
|
31
|
-
|
|
|
34
|
+
| 位置 | `data/experts/`(22 个分类 / 314 位)、`data/zh/`(中文名字 / 简介 / 人格正文 / 分类标签) |
|
|
35
|
+
| 维护方式 | 上述内容随本插件分发(`data/` 是发布源,不再从上游重新镜像);`data/source.json` 是该名册的清单(专家数 / 分类 / 更新时间) |
|
|
36
|
+
|
|
37
|
+
名册的构成分两部分(总计 314 位):
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
- **279 位来自 `msitarzewski/agency-agents`**(上表英文名册一行)。
|
|
40
|
+
- **35 位来自 `@michengai/dsh-agency-agents` 的包内快照**(company / hr / legal / supply-chain
|
|
41
|
+
四个分类,以及若干中国本地化角色)。这些条目在另一上游仓库的任何历史与分支里都不存在,只随该包分发。
|
|
42
|
+
它们的英文人格与中文译文同样按上表两个 MIT 项目(AgentLand Contributors / jnMetaCode)的条款使用,
|
|
43
|
+
完整许可文本与上表共用。与已有角色职能重复的条目未并入。
|
|
34
44
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
四个分区,以及若干中国本地化角色)。这些条目在上游仓库的任何历史与分支里都不存在,只随该包分发;
|
|
38
|
-
其英文人格与中文译文同样按上表两个 MIT 项目(AgentLand Contributors / jnMetaCode)的条款使用,
|
|
39
|
-
完整许可文本与上表共用。补入范围与逐条判定依据记录在 `data/source.json` 的
|
|
40
|
-
`extraAdded` / `extraSkipped`(与上游角色职能重复的条目会被排除,不并入名册)。
|
|
45
|
+
> 两部分内容自 2026-09-12 起随本插件分发并作为**名册真源**维护,不再从上游重新拉取或镜像
|
|
46
|
+
> (原镜像 / 补入脚本与逐条判定记录已移除;需要追溯当时来源与判定,见仓库 git 历史)。
|
|
41
47
|
|
|
42
|
-
`data/zh/manual.json` 与 `data/zh/manual-bodies/`
|
|
43
|
-
|
|
48
|
+
`data/zh/manual.json` 与 `data/zh/manual-bodies/` 是**本项目的补充翻译**(用于补齐尚未覆盖的条目
|
|
49
|
+
或在译文不准确时覆盖),随本插件以 MIT 发布,同样保留在包内。
|
|
44
50
|
|
|
45
51
|
## 3. 分发要求
|
|
46
52
|
|
package/data/source.json
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"target": "<home>/web/t-team/data/experts",
|
|
5
|
-
"syncedAt": "2026-09-12 14:47:18 +0800",
|
|
2
|
+
"updatedAt": "2026-09-12 15:56:06 +0800",
|
|
3
|
+
"expertFiles": 314,
|
|
6
4
|
"divisions": [
|
|
7
5
|
"academic",
|
|
8
6
|
"company",
|
|
@@ -27,88 +25,5 @@
|
|
|
27
25
|
"support",
|
|
28
26
|
"testing"
|
|
29
27
|
],
|
|
30
|
-
"
|
|
31
|
-
"extraSource": "<home>/.dsh/profiles/desktop/node_modules/@michengai/dsh-agency-agents/assets/agency-agents",
|
|
32
|
-
"extraSourceVersion": "0.1.41",
|
|
33
|
-
"extraAdded": 35,
|
|
34
|
-
"extraSkipped": [
|
|
35
|
-
{
|
|
36
|
-
"division": "company",
|
|
37
|
-
"slug": "chief-of-staff",
|
|
38
|
-
"duplicateOf": "specialized-chief-of-staff",
|
|
39
|
-
"verdict": "duplicate"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"division": "engineering",
|
|
43
|
-
"slug": "engineering-network-engineer-china",
|
|
44
|
-
"duplicateOf": "engineering-china-network-engineer",
|
|
45
|
-
"verdict": "duplicate"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"division": "engineering",
|
|
49
|
-
"slug": "engineering-security-engineer",
|
|
50
|
-
"duplicateOf": "security-appsec-engineer",
|
|
51
|
-
"verdict": "duplicate"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"division": "engineering",
|
|
55
|
-
"slug": "engineering-threat-detection-engineer",
|
|
56
|
-
"duplicateOf": "security-threat-detection-engineer",
|
|
57
|
-
"verdict": "duplicate"
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"division": "finance",
|
|
61
|
-
"slug": "finance-financial-forecaster",
|
|
62
|
-
"duplicateOf": "finance-financial-analyst",
|
|
63
|
-
"verdict": "near-duplicate"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"division": "hr",
|
|
67
|
-
"slug": "hr-recruiter",
|
|
68
|
-
"duplicateOf": "specialized-recruitment-specialist",
|
|
69
|
-
"verdict": "duplicate"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"division": "marketing",
|
|
73
|
-
"slug": "marketing-bilibili-strategist",
|
|
74
|
-
"duplicateOf": "marketing-bilibili-content-strategist",
|
|
75
|
-
"verdict": "near-duplicate"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"division": "marketing",
|
|
79
|
-
"slug": "marketing-ecommerce-operator",
|
|
80
|
-
"duplicateOf": "marketing-china-ecommerce-operator",
|
|
81
|
-
"verdict": "duplicate"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"division": "marketing",
|
|
85
|
-
"slug": "marketing-wechat-operator",
|
|
86
|
-
"duplicateOf": "marketing-wechat-official-account",
|
|
87
|
-
"verdict": "duplicate"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"division": "marketing",
|
|
91
|
-
"slug": "marketing-xiaohongshu-operator",
|
|
92
|
-
"duplicateOf": "marketing-xiaohongshu-specialist",
|
|
93
|
-
"verdict": "duplicate"
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"division": "specialized",
|
|
97
|
-
"slug": "prompt-engineer",
|
|
98
|
-
"duplicateOf": "engineering-prompt-engineer",
|
|
99
|
-
"verdict": "duplicate"
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"division": "specialized",
|
|
103
|
-
"slug": "specialized-pricing-optimizer",
|
|
104
|
-
"duplicateOf": "specialized-pricing-analyst",
|
|
105
|
-
"verdict": "near-duplicate"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"division": "support",
|
|
109
|
-
"slug": "support-recruitment-specialist",
|
|
110
|
-
"duplicateOf": "specialized-recruitment-specialist",
|
|
111
|
-
"verdict": "duplicate"
|
|
112
|
-
}
|
|
113
|
-
]
|
|
28
|
+
"note": "本仓名册清单:data/experts 是真源,由 add-expert.py 维护(上游同步已移除)"
|
|
114
29
|
}
|