dsh-plugin-t-expert 0.2.4 → 0.2.6
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 +86 -180
- package/THIRD-PARTY-NOTICES +23 -17
- package/data/source.json +3 -88
- package/data/team-profiles.py +1 -1
- 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,240 +1,146 @@
|
|
|
1
1
|
# T专家(dsh-plugin-t-expert)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
DeepSeek Harness 插件:**22 个分类 / 314 位专家**的名册(中文名、简介、人格正文全量覆盖),
|
|
4
|
+
外加插件内自带的**多智能体团队引擎**(小队模板、任务 DAG、调度、活动面板)。
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
装上以后你能做四件事:
|
|
7
7
|
|
|
8
|
-
|
|
|
8
|
+
| 做什么 | 怎么做 |
|
|
9
9
|
| --- | --- |
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
| 设置页 | 设置 → T专家,两个标签:**专家**(启停 / 看提示词)与 **队伍**(小队模板 + 运行中的团队) |
|
|
10
|
+
| 用专家 | 输入框打 `@` → 按分类分组的菜单 → 选中的专家作为引用 chip 进本轮对话;模型也可用 `summon_t_expert` 召唤 |
|
|
11
|
+
| 拉起一支小队干活 | `/t <小队> <目标>`(`/t` 单跑列出现有小队) |
|
|
12
|
+
| 管名册 | 设置 → T专家 → **专家**(启停 / 看提示词 / 新建自建专家) |
|
|
13
|
+
| 管分类与小队 | 设置 → T专家 → **分类**(新建 / 改名 / 删除自建分类)、**队伍**(小队模板 + 运行中的团队) |
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
> 注意:这条解耦覆盖的是**引擎的运行时挂载**。宿主包本身缺失时(插件声明了若干
|
|
19
|
-
> `@deepseek-ai/*` peer 依赖,由 DSH 安装提供)整个插件都无法加载 —— 这是任何插件的共同前提。
|
|
15
|
+
设置页一共**三个标签**:**专家**(启停 / 看提示词 / 新建自建专家)、**分类**(自建分类的增删改)、
|
|
16
|
+
**队伍**(小队模板 + 运行中的团队)。
|
|
20
17
|
|
|
21
18
|
---
|
|
22
19
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
| 项 | 要求 |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| DSH 宿主 | `0.1.5-rc.1` 或 `0.1.5-rc.2` |
|
|
28
|
-
| Node.js | `^22.19.0 || >=24` |
|
|
29
|
-
| pnpm | **必须在 PATH 上**。`dsh plugin` 本质上是在 profile 目录里转发 pnpm,缺 pnpm 会直接报错 |
|
|
30
|
-
| python3 | 仅在用设置页「小队」标签编辑并编译小队时需要(保存时要调用 `team-profiles.py`) |
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 二、安装
|
|
35
|
-
|
|
36
|
-
### 1. 命令行安装(推荐)
|
|
20
|
+
## 一、安装
|
|
37
21
|
|
|
38
22
|
```bash
|
|
39
23
|
dsh plugin --profile web add dsh-plugin-t-expert
|
|
40
24
|
```
|
|
41
25
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
dsh plugin --profile web add --save-exact dsh-plugin-t-expert@0.1.1
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
插件在 `package.json` 里声明了 `dsh.bundle`(补丁文件 `cordis.patch.yml`),
|
|
49
|
-
`dsh plugin` 会**自动**把它接到 profile 的 bundle 层(注册 `t-team` 与 `t-team-remote` 两行)。
|
|
50
|
-
**你不需要手改任何配置文件。**
|
|
51
|
-
|
|
52
|
-
### 2. 图形端(DSH Desktop)
|
|
53
|
-
|
|
54
|
-
`desktop` profile 由 Electron 应用独占,`dsh plugin --profile desktop …` 会被 CLI 直接拒绝:
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
error: profile "desktop" is managed exclusively by the Electron application
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**请用插件市场(dsh-market)安装**:在 DSH Desktop 里搜索本插件一键装即可。
|
|
61
|
-
|
|
62
|
-
本仓库**不自带安装脚本**(维护者的运维脚本不在仓库里)。如果你要手工装,等价动作是:
|
|
63
|
-
把包内的 `lib/`、`data/`、`cordis.patch.yml` 与许可文件复制到一个运行目录,在目标 profile 的
|
|
64
|
-
`package.json` 里加一条 `file:<该目录>` 依赖并追加到 `dsh.profile.bundles`,再把整个目录
|
|
65
|
-
**真目录拷贝**(不要符号链接)到 profile 的 `node_modules/<包名>`。
|
|
26
|
+
**DSH Desktop 请在插件市场里装**(搜 `dsh-plugin-t-expert` 一键安装)。
|
|
27
|
+
`dsh plugin --profile desktop …` 会被 CLI 拒绝(desktop profile 由 Electron 应用独占),
|
|
28
|
+
这不是本插件的限制——任何插件都一样。
|
|
66
29
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
30
|
+
依赖:DSH 宿主 `0.1.5-rc.1` / `0.1.5-rc.2`;Node `^22.19.0 || >=24`;`pnpm` 在 PATH 上
|
|
31
|
+
(`dsh plugin` 本质是在 profile 目录里转发 pnpm)。`python3` 只在**设置页保存小队**时需要
|
|
32
|
+
(要调用小队编译器);缺它插件照常加载,只是小队编译会报错并回滚。
|
|
70
33
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
1. 重启 DSH。
|
|
74
|
-
2. 打开 **设置 → T专家**。
|
|
75
|
-
3. 勾选要启用的专家(**默认全部未启用**,未启用的专家不能被召唤)。
|
|
76
|
-
4. 回到输入框打 `@`,出现 T专家的分组菜单即可用。
|
|
34
|
+
装完重启 DSH,然后在 **设置 → T专家** 里启用专家——**默认全部未启用**,未启用的专家不能被召唤。
|
|
77
35
|
|
|
78
36
|
---
|
|
79
37
|
|
|
80
|
-
##
|
|
81
|
-
|
|
82
|
-
插件对任何机器都是**自包含**的:包内自带一份数据快照(`data/`),
|
|
83
|
-
首次启动时会把快照**播种**到你的数据目录 `~/.t-team/`,因此不需要任何额外脚本或同步流程。
|
|
38
|
+
## 二、数据目录
|
|
84
39
|
|
|
85
|
-
|
|
86
|
-
- **已有的文件不会被覆盖**:目录(`experts` / `zh`)与文件(`teams.json` / `teams.resolved.json` / `t-team.config.json` / `team-profiles.py` / `source.json`)按项独立判断,缺哪个补哪个。
|
|
87
|
-
- 因此**升级插件不会动你改过的内容**(例如你编辑过的小队定义、你补译的中文正文)。
|
|
88
|
-
- 播种失败(只读文件系统、权限不足等)只告警,插件照常加载。
|
|
89
|
-
|
|
90
|
-
播种后的数据目录大致是:
|
|
40
|
+
插件对任何机器都**自包含**:包内带一份名册快照,首次启动播种到 `~/.t-team/`。
|
|
91
41
|
|
|
92
42
|
```
|
|
93
43
|
~/.t-team/
|
|
94
|
-
├── experts/
|
|
95
|
-
├── zh/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
│ └── COVERAGE.json # 中文覆盖率与缺口清单
|
|
103
|
-
├── teams.json # 小队定义(设置页「小队」标签写回这里)
|
|
104
|
-
├── teams.resolved.json # 编译产物:/t 列表与成员解析用
|
|
105
|
-
├── t-team.config.json # 编译产物:内置团队引擎的配置(人格已内联)
|
|
106
|
-
├── team-profiles.py # 小队编译器(设置页保存小队时调用)
|
|
107
|
-
└── source.json # 名册指纹(宿主据此判断名册是否变化)
|
|
44
|
+
├── experts/ 名册:<分类>/<slug>.md(22 个分类、314 位)
|
|
45
|
+
├── zh/ 中文侧车:names.json、descriptions.json、<分类>/<slug>.md、divisions.json
|
|
46
|
+
├── custom/ 你在面板里自建的专家
|
|
47
|
+
├── teams.json 小队定义(设置页「队伍」写回这里)
|
|
48
|
+
├── t-team.config.json 小队编译产物(引擎配置,人格已内联)
|
|
49
|
+
├── teams.resolved.json 小队编译产物(/t 列表用)
|
|
50
|
+
├── team-profiles.py 小队编译器的播种副本(实际跑的是包内那份)
|
|
51
|
+
└── source.json 名册清单(专家数 / 分类 / 更新时间)
|
|
108
52
|
```
|
|
109
53
|
|
|
110
|
-
|
|
54
|
+
- **已有文件不会被覆盖**:升级插件不会动你改过的小队定义或补译的中文正文。
|
|
55
|
+
唯一例外是小队编译器——它是代码、随插件版本走,始终用包内那份(数据目录里那份只作兜底)。
|
|
56
|
+
- 想换目录位置,用配置项 `root` / `zhRoot` / `customRoot` 覆盖即可,不必改代码。
|
|
111
57
|
|
|
112
58
|
---
|
|
113
59
|
|
|
114
|
-
##
|
|
115
|
-
|
|
116
|
-
以插件 `Config` 定义为准(`lib/index.js`):
|
|
117
|
-
|
|
118
|
-
| 配置项 | 类型 | 默认值 | 含义 |
|
|
119
|
-
| --- | --- | --- | --- |
|
|
120
|
-
| `root` | string | `~/.t-team/experts` | 专家名册目录,读 `experts/<分区>/<slug>.md` |
|
|
121
|
-
| `zhRoot` | string | `~/.t-team/zh` | 中文侧车目录(名字 / 简介 / 正文 / 分区标签) |
|
|
122
|
-
| `provider` | string | `"spawn"` | 召唤专家时使用的子代理 provider |
|
|
123
|
-
| `divisions` | string[] | `[]` | 留空 = 自动扫描 `root` 下所有含 `.md` 的分区目录 |
|
|
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` 类型不对,属于自带数据的错配,插件会在**加载时直接失败**并指出路径与修法。
|
|
60
|
+
## 三、自建专家与分类
|
|
148
61
|
|
|
149
|
-
|
|
62
|
+
**新建专家**:设置 → 专家 → 「+ 新建专家」,选分类(官方 22 个或你自建的),填名称 / 简介 / 人格正文。
|
|
150
63
|
|
|
151
|
-
|
|
64
|
+
- 自建专家写在 `customRoot`(默认 `~/.t-team/custom/<分类>/<slug>.md`),**与随包发布的名册分开**:
|
|
65
|
+
内置名册升级时整棵替换,自建的不受影响。
|
|
66
|
+
- 归到官方分类名下是**允许且安全**的:分类只是归属,文件仍在 `customRoot`,内置名册一个字节不动。
|
|
67
|
+
- 自建专家自带中文(frontmatter 里的 `name` 就是显示名),不依赖中文侧车。
|
|
152
68
|
|
|
153
|
-
|
|
69
|
+
**新建分类**:设置 → 分类 → 填目录名(小写 ASCII)+ 显示名(中文)。
|
|
70
|
+
官方分类只读(名字与存亡随包内名册);删除自建分类时若里面还有专家会被拒绝,不会静默连删。
|
|
154
71
|
|
|
155
|
-
|
|
156
|
-
| --- | --- |
|
|
157
|
-
| `list_t_experts` | 列出**已启用**专家的分区与数量;传入分区名可列出该分区专家(用于挑出唯一的专家名) |
|
|
158
|
-
| `summon_t_expert` | 召唤 1 位专家:以该专家的完整人格跑一个子代理并返回结果(阻塞等待) |
|
|
159
|
-
| `summon_t_experts` | 并行召唤多位专家:最多 8 位、并发 4;部分失败时仍返回成功的结果 |
|
|
160
|
-
| `t_team_plan_check` | **只读** DAG 预检:把打算创建的一批团队任务先跑一遍引擎校验,一次报出全部问题、警示与建议执行顺序 |
|
|
72
|
+
---
|
|
161
73
|
|
|
162
|
-
|
|
74
|
+
## 四、工具与命令
|
|
163
75
|
|
|
164
|
-
|
|
76
|
+
| 工具 | 作用 |
|
|
77
|
+
| --- | --- |
|
|
78
|
+
| `list_t_experts` | 列出已启用专家的分类与数量;传分类名可列出该分类的专家 |
|
|
79
|
+
| `summon_t_expert` | 召唤 1 位专家:以它的完整人格跑一个子代理并返回结果 |
|
|
80
|
+
| `summon_t_experts` | 并行召唤多位(最多 8 位、并发 4;部分失败仍返回成功的结果) |
|
|
81
|
+
| `t_team_plan_check` | 只读 DAG 预检:一批团队任务先跑一遍引擎校验,一次报出全部问题 |
|
|
165
82
|
|
|
166
|
-
|
|
|
83
|
+
| 命令 | 行为 |
|
|
167
84
|
| --- | --- |
|
|
168
85
|
| `/t` | 列出所有小队(key、别名、人数、成员中文名) |
|
|
169
|
-
| `/t
|
|
170
|
-
| `/t
|
|
171
|
-
| `/t <一句话目标>` |
|
|
86
|
+
| `/t <小队\|别名>` | 选定小队,队长列出成员并问你目标 |
|
|
87
|
+
| `/t <小队\|别名> <目标>` | 拉起小队干活(先给成员与任务草案,你 review 后开跑) |
|
|
88
|
+
| `/t <一句话目标>` | 没匹配到小队名时,按目标自动挑最合适的小队 |
|
|
172
89
|
|
|
173
|
-
|
|
174
|
-
|
|
90
|
+
团队引擎另注册 **13 个 `t_team_*` 工具**(`t_team_create` 建队、`t_team_approve` 审批、
|
|
91
|
+
`t_team_create_task` 建任务、`t_team_reassign_task` 派发、`t_team_status` 看状态、`t_team_resume` 恢复等),
|
|
92
|
+
随插件一起提供;队长与成员各看到其中一个子集。
|
|
175
93
|
|
|
176
94
|
---
|
|
177
95
|
|
|
178
|
-
##
|
|
96
|
+
## 五、小队
|
|
97
|
+
|
|
98
|
+
设置 → 队伍 里搜索、修改成员 / 别名 / 启停,然后保存:改动写回 `~/.t-team/teams.json`,
|
|
99
|
+
再调用小队编译器生成引擎配置;**编译失败会自动回滚**,不会把坏定义留在盘上。
|
|
179
100
|
|
|
180
|
-
|
|
101
|
+
> ⚠️ **保存后要重启 DSH 才对建队生效**:`/t` 列表会立刻显示新小队,
|
|
102
|
+
> 但引擎配置在插件启动时就已载入,不重启用新小队建不了队。
|
|
181
103
|
|
|
182
|
-
|
|
104
|
+
约束:小队 key 只能 ASCII `a-z0-9-`(中文放 `description` / `aliases`);每队 ≤ 8 人;小队总数 ≤ 48;
|
|
105
|
+
别名全局唯一;成员必须是名册里真实存在的专家。
|
|
183
106
|
|
|
184
|
-
|
|
185
|
-
2. 调用 `~/.t-team/team-profiles.py` 编译出 `t-team.config.json` 与 `teams.resolved.json`;
|
|
186
|
-
3. **编译失败会自动回滚** `teams.json`(不会把坏定义留在盘上);
|
|
187
|
-
4. 缺 `python3` 时报错并回滚。
|
|
107
|
+
---
|
|
188
108
|
|
|
189
|
-
|
|
190
|
-
> 不重启就建不了队(`/t 新队 目标` 会提示「小队不存在」)。
|
|
109
|
+
## 六、配置项
|
|
191
110
|
|
|
192
|
-
|
|
111
|
+
全部以插件 `Config` 定义为准(`lib/index.js`,共 15 项)。常用的几个:
|
|
193
112
|
|
|
194
|
-
|
|
|
195
|
-
| --- | --- |
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
113
|
+
| 配置项 | 默认值 | 含义 |
|
|
114
|
+
| --- | --- | --- |
|
|
115
|
+
| `root` | `~/.t-team/experts` | 名册目录 |
|
|
116
|
+
| `zhRoot` | `~/.t-team/zh` | 中文侧车目录 |
|
|
117
|
+
| `customRoot` | `~/.t-team/custom` | 自建专家目录(与 `root` 分开是硬要求) |
|
|
118
|
+
| `provider` | `"spawn"` | 召唤专家用的子代理 provider |
|
|
119
|
+
| `divisions` | `[]` | 留空=自动扫描 `root` 下所有含 `.md` 的分类 |
|
|
120
|
+
| `maxSummonBatch` / `summonConcurrency` | `8` / `4` | 批量召唤上限与并发 |
|
|
121
|
+
| `stateDir` / `memberProvider` / `memberModel` / `maxMembers` | — | 转给内置团队引擎 |
|
|
202
122
|
|
|
203
123
|
---
|
|
204
124
|
|
|
205
125
|
## 七、许可
|
|
206
126
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
各自的来源、版本与署名要求写在 `THIRD-PARTY-NOTICES` 里,**完整许可文本随包放在 `vendor/` 下**。
|
|
211
|
-
再分发本插件(含修改版)时,请一并保留 `LICENSE`、`THIRD-PARTY-NOTICES` 与 `vendor/` 下的许可文本。
|
|
127
|
+
本插件 MIT(见 `LICENSE`)。随包分发的专家名册、中文译文与内置团队引擎各自按其原许可使用:
|
|
128
|
+
来源、版本与署名写在 `THIRD-PARTY-NOTICES`,完整许可文本随包放在 `vendor/`。
|
|
129
|
+
再分发(含修改版)时请一并保留这三样。
|
|
212
130
|
|
|
213
131
|
---
|
|
214
132
|
|
|
215
|
-
## 八、开发
|
|
133
|
+
## 八、开发
|
|
216
134
|
|
|
217
135
|
```bash
|
|
218
|
-
npm
|
|
219
|
-
npm run
|
|
220
|
-
|
|
221
|
-
npm run sync-data
|
|
136
|
+
npm run build # 构建客户端产物(lib/client.js)
|
|
137
|
+
npm run verify # 自检套件:插件契约、工具、remote、客户端产物、播种与快照,
|
|
138
|
+
# 外加「发布包自洽」(真打一份 tgz、解开、再用插件解析器读一遍)
|
|
139
|
+
npm run sync-data # 把运行时数据同步进包内 data/
|
|
222
140
|
```
|
|
223
141
|
|
|
224
|
-
>
|
|
225
|
-
>
|
|
226
|
-
> 的 `scripts` 以相对路径引用)。只 clone 本仓库是跑不了构建与自检的;要发布请使用完整的工作目录。
|
|
227
|
-
>
|
|
228
|
-
> `npm run build` 必须**先**品牌化再构建客户端:客户端产物把品牌化后的引擎 bundle 内联进去,
|
|
229
|
-
> 顺序错了会把旧文本打进产物。
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 九、已知限制
|
|
142
|
+
> 这些 script 的实现不在本仓库:维护者的构建 / 自检脚本放在仓库同级的运维目录,
|
|
143
|
+
> 由 `package.json` 以 `node ../<file>.mjs` 引用。只 clone 本仓库跑不了构建与自检。
|
|
234
144
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
- 包内快照只在数据目录**缺项**时播种。升级插件只更新包内快照,**不会覆盖你已有的数据目录内容**。
|
|
238
|
-
- 小队定义的改动需要重启 DSH 才对**建队**生效(见第五、六节)。
|
|
239
|
-
- 改插件代码后需要重新 `npm run build`(改了 `src/client.jsx` 才会重新生成客户端产物)并重装/重启。
|
|
240
|
-
- 团队引擎挂载失败时,团队相关功能不可用,但专家名册、`@` 召唤、`/t` 列表不受影响,失败原因由 `/t` 报出。
|
|
145
|
+
内置团队引擎(`lib/teams/`)是**手工维护的源码**,改引擎直接改这里;
|
|
146
|
+
名册(`data/experts/`)与中文侧车(`data/zh/`)就是发布源,两者都不再从任何上游同步。
|
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
|
}
|
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 # 引擎侧 lib/teams/profiles.js 已把 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/zh/COVERAGE.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"missingDescription": [],
|
|
15
15
|
"missingBody": []
|
|
16
16
|
},
|
|
17
|
-
"generatedFrom": "<home
|
|
17
|
+
"generatedFrom": "<home>/web/t-team/vendor/agency-agents",
|
|
18
18
|
"divisions": 22,
|
|
19
19
|
"unlabelledDivisions": []
|
|
20
20
|
}
|