@stofone/dsh-agent-roster 0.9.1 → 0.10.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 +71 -1
- package/README.md +78 -4
- package/README.zh.md +44 -1
- package/bin/cli.mjs +228 -2
- package/client.js +49 -24
- package/docs/roster-v2.md +220 -0
- package/examples/dist/core-review-1.0.0.json +160 -0
- package/examples/dist/research-0.1.0.json +95 -0
- package/examples/roles/core-review-correctness/AGENT.md +20 -0
- package/examples/roles/core-review-lead/AGENT.md +23 -0
- package/examples/roles/core-review-lead-captain/AGENT.md +13 -0
- package/examples/roles/core-review-maintainer/AGENT.md +20 -0
- package/examples/roles/research-scout/AGENT.md +16 -0
- package/examples/roles/research-verifier/AGENT.md +16 -0
- package/examples/rosters/core-review/roster.yaml +39 -0
- package/examples/rosters/research/roster.yaml +20 -0
- package/examples-orchestration/dist/core-review-1.0.0.json +185 -0
- package/examples-orchestration/dist/core-review-1.0.0.tasks.json +76 -0
- package/examples-orchestration/roles/fixer/AGENT.md +18 -0
- package/examples-orchestration/roles/lead/AGENT.md +18 -0
- package/examples-orchestration/roles/reviewer/AGENT.md +23 -0
- package/examples-orchestration/roles/reviewer/parts/checklist.md +6 -0
- package/examples-orchestration/rosters/core-review/overrides/fixer.md +1 -0
- package/examples-orchestration/rosters/core-review/roster.yaml +43 -0
- package/index.js +8 -1
- package/lib/compile2.js +522 -0
- package/lib/format-v2.js +196 -0
- package/lib/frontmatter.js +113 -0
- package/lib/migrate.js +326 -0
- package/lib/plan.js +167 -0
- package/lib/registry.js +65 -11
- package/lib/role.js +498 -0
- package/lib/roster2.js +591 -0
- package/lib/run.js +188 -0
- package/lib/write.js +14 -8
- package/orgs/agent-roster-collective/dist/api-design-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/content-ops-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/contract-review-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/data-quality-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/db-migration-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/docs-writer-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/finance-recon-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/frontend-ui-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/i18n-l10n-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/incident-response-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/literature-review-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/market-research-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/ml-eval-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/performance-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/product-discovery-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/qa-regression-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/recruiting-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/release-manager-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/security-audit-1.0.0.json +132 -0
- package/orgs/agent-roster-collective/dist/sre-oncall-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/dist/support-triage-1.0.0.json +130 -0
- package/orgs/agent-roster-collective/roles/api-design-failure-mode/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/api-design-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/api-design-schema/AGENT.md +20 -0
- package/orgs/agent-roster-collective/roles/content-ops-distributor/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/content-ops-editor/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/content-ops-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/contract-review-clause-reader/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/contract-review-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/contract-review-risk-note/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/data-quality-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/data-quality-profiler/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/data-quality-rule-author/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/db-migration-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/db-migration-migrator/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/db-migration-verifier/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/docs-writer-example-runner/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/docs-writer-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/docs-writer-writer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/finance-recon-exception/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/finance-recon-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/finance-recon-matcher/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/frontend-ui-a11y-reviewer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/frontend-ui-implementer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/frontend-ui-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/i18n-l10n-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/i18n-l10n-reviewer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/i18n-l10n-translator/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/incident-response-commander/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/incident-response-scribe/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/incident-response-triage/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/literature-review-critic/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/literature-review-extractor/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/literature-review-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/market-research-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/market-research-researcher/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/market-research-synthesizer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/ml-eval-dataset/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/ml-eval-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/ml-eval-metric/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/performance-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/performance-load-tester/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/performance-profiler/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/product-discovery-interviewer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/product-discovery-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/product-discovery-skeptic/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/qa-regression-case-writer/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/qa-regression-flake-hunter/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/qa-regression-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/recruiting-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/recruiting-scheduler/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/recruiting-screener/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/release-manager-changelog/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/release-manager-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/release-manager-rollback/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/security-audit-code-auditor/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/security-audit-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/security-audit-threat-modeler/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/sre-oncall-capacity/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/sre-oncall-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/sre-oncall-runbook/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/support-triage-classifier/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/support-triage-lead/AGENT.md +19 -0
- package/orgs/agent-roster-collective/roles/support-triage-responder/AGENT.md +19 -0
- package/orgs/agent-roster-collective/rosters/api-design/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/content-ops/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/contract-review/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/data-quality/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/db-migration/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/docs-writer/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/finance-recon/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/frontend-ui/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/i18n-l10n/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/incident-response/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/literature-review/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/market-research/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/ml-eval/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/performance/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/product-discovery/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/qa-regression/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/recruiting/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/release-manager/roster.yaml +25 -0
- package/orgs/agent-roster-collective/rosters/security-audit/roster.yaml +30 -0
- package/orgs/agent-roster-collective/rosters/sre-oncall/roster.yaml +26 -0
- package/orgs/agent-roster-collective/rosters/support-triage/roster.yaml +25 -0
- package/package.json +3 -1
- package/schema/compiled.v1.schema.json +391 -0
- package/schema/role.v1.schema.json +240 -0
- package/schema/roster.v2.schema.json +437 -0
- package/examples/core-review/roster.yaml +0 -82
- package/examples/research/roster.yaml +0 -42
- package/orgs/agent-roster-collective/api-design/roster.yaml +0 -67
- package/orgs/agent-roster-collective/content-ops/roster.yaml +0 -55
- package/orgs/agent-roster-collective/contract-review/roster.yaml +0 -58
- package/orgs/agent-roster-collective/data-quality/roster.yaml +0 -64
- package/orgs/agent-roster-collective/db-migration/roster.yaml +0 -64
- package/orgs/agent-roster-collective/docs-writer/roster.yaml +0 -59
- package/orgs/agent-roster-collective/finance-recon/roster.yaml +0 -63
- package/orgs/agent-roster-collective/frontend-ui/roster.yaml +0 -60
- package/orgs/agent-roster-collective/i18n-l10n/roster.yaml +0 -60
- package/orgs/agent-roster-collective/incident-response/roster.yaml +0 -65
- package/orgs/agent-roster-collective/literature-review/roster.yaml +0 -61
- package/orgs/agent-roster-collective/market-research/roster.yaml +0 -60
- package/orgs/agent-roster-collective/ml-eval/roster.yaml +0 -63
- package/orgs/agent-roster-collective/performance/roster.yaml +0 -63
- package/orgs/agent-roster-collective/product-discovery/roster.yaml +0 -55
- package/orgs/agent-roster-collective/qa-regression/roster.yaml +0 -64
- package/orgs/agent-roster-collective/recruiting/roster.yaml +0 -58
- package/orgs/agent-roster-collective/release-manager/roster.yaml +0 -59
- package/orgs/agent-roster-collective/security-audit/roster.yaml +0 -65
- package/orgs/agent-roster-collective/sre-oncall/roster.yaml +0 -60
- package/orgs/agent-roster-collective/support-triage/roster.yaml +0 -58
- /package/orgs/agent-roster-collective/{security-audit → rosters/security-audit}/capabilities.yaml +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# 档案 v2:角色 / 组装 / 编译
|
|
2
|
+
|
|
3
|
+
> 状态:draft → 实现中(`lib/role.js`、`lib/roster2.js`、`lib/compile2.js` 已落地并通过单测;CLI 与工具接线待做)。
|
|
4
|
+
> 判别键:`dsh-agent-roster/role@1`、`dsh-agent-roster/roster@2`、`dsh-agent-roster/compiled@1`。
|
|
5
|
+
> v1(`dsh-agent-roster/v1`)**冻结**:不再长字段,只按本文的迁移规则重写成 v2。
|
|
6
|
+
|
|
7
|
+
## 1. 为什么分层
|
|
8
|
+
|
|
9
|
+
v1 把四类不同性质的权威塞进同一份 `roster.yaml`:
|
|
10
|
+
|
|
11
|
+
| 权威 | 该谁拥有 | v1 的做法 | 后果 |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| 人设(散文) | 角色 | YAML 块标量 `systemPrompt` | 散文缩在 YAML 里,diff 不可读,编辑器不给补全 |
|
|
14
|
+
| 路由与工具策略(参数) | 角色 | 与散文并列 | 换模型要改人设文件 |
|
|
15
|
+
| 目录元数据(标题、描述、标签) | 组装 | 同文件 | 同一角色的两套组装各写一份标题 |
|
|
16
|
+
| 队长配置 | 组装 | `lead` 既是成员又进 `captain` | 双写,两份会漂移 |
|
|
17
|
+
|
|
18
|
+
再加三条结构性缺陷:
|
|
19
|
+
|
|
20
|
+
- **拼装协议藏在插件代码里**:运行时只收到一条 `executionPrompt` 字符串,谁拼的、拼了哪些片段,产物里看不出来。
|
|
21
|
+
- **身份靠路径**:目录名必须等于文件里的 `id`,改 id 就得移目录。
|
|
22
|
+
- **没有编排层**:质量门、修复回合只能队长临场发挥,格式里写不下来,也就没法校验。
|
|
23
|
+
|
|
24
|
+
v2 的答案是三层,每层只有一个权威:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
roles/<任意目录>/AGENT.md ← 角色:frontmatter=参数,正文=人设,parts/=可选片段
|
|
28
|
+
rosters/<id>/roster.yaml ← 组装:成员是引用,队长独立成段,编排是一等公民
|
|
29
|
+
dist/<id>-<ver>.json ← 编译产物:自包含、可哈希、消费者只看这个
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 2. 三个判别键,一条规则
|
|
33
|
+
|
|
34
|
+
| 文件 | 判别键 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `roles/*/AGENT.md` 的 frontmatter | `kind: dsh-agent-roster/role@1` |
|
|
37
|
+
| `rosters/*/roster.yaml` | `kind: dsh-agent-roster/roster@2` |
|
|
38
|
+
| `dist/*.json`、`compiled/` | `kind: dsh-agent-roster/compiled@1` |
|
|
39
|
+
| `.agent-roster/lock.yaml` | `kind: dsh-agent-roster/lock@1` |
|
|
40
|
+
|
|
41
|
+
**判别键决定版本,目录与文件名不决定版本。** 同一个目录不允许两种格式共存:v1 文件被 v2 加载器读到就报 `kind` 不符,`roster migrate` 负责原地重写。
|
|
42
|
+
|
|
43
|
+
## 3. 角色:`roles/<dir>/AGENT.md`
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
---
|
|
47
|
+
kind: dsh-agent-roster/role@1
|
|
48
|
+
name: reviewer
|
|
49
|
+
version: 1.4.0
|
|
50
|
+
role: 代码评审
|
|
51
|
+
route:
|
|
52
|
+
provider: deepseek
|
|
53
|
+
model: deepseek-v4.1-flash
|
|
54
|
+
reasoningEffort: high
|
|
55
|
+
tools:
|
|
56
|
+
policy: member-safe
|
|
57
|
+
prompt:
|
|
58
|
+
parts: [parts/checklist.md, parts/tone.md]
|
|
59
|
+
budget: 6000
|
|
60
|
+
requires:
|
|
61
|
+
skills: [dsh-chat-import]
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
你是评审。先读 diff,再读测试……
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- **正文就是人设**,不再需要块标量;`parts/` 里的片段按 `prompt.parts` 的顺序拼在正文之后。
|
|
68
|
+
- **拼装语义写进格式**(不是插件的秘密):
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
executionPrompt = join("\n\n", [body, ...parts, ...rosterAppend])
|
|
72
|
+
其中每段前置 member.prompt.prepend(若有)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
分隔符固定为两个换行,`assemblePrompt()` 是唯一实现(`lib/frontmatter.js`)。
|
|
76
|
+
- **预算按字符**:`prompt.budget` 与 `LIMITS2.promptChars`(12000)都是字符数。不引入 token 预算——token 估算随 provider 变,会变成第二种真源。
|
|
77
|
+
- **字段归宿**与 v1 一致的三分法:`route`/`tools.policy` 是 `direct`(进 `agent_teams_add_member`);`tools.scope` 是 `config`(声明,不承载);`requires` 是证据源约束(技能目录 / 部署声明的 toolPolicies)。
|
|
78
|
+
- **未知键一律拒绝**:角色文档宁可报错,也不带一个没人校验的键。
|
|
79
|
+
|
|
80
|
+
## 4. 组装:`rosters/<id>/roster.yaml`
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
kind: dsh-agent-roster/roster@2
|
|
84
|
+
id: money-lab
|
|
85
|
+
version: 10.0.0
|
|
86
|
+
title: 资金实验室
|
|
87
|
+
defaults:
|
|
88
|
+
route: { provider: deepseek, model: deepseek-v4.1-flash, reasoningEffort: high }
|
|
89
|
+
targets: [agent-teams/members]
|
|
90
|
+
members:
|
|
91
|
+
- as: reviewer
|
|
92
|
+
role: reviewer@1.4.0
|
|
93
|
+
prompt: { append: overrides/reviewer.md }
|
|
94
|
+
captain:
|
|
95
|
+
role: lead@2.0.0
|
|
96
|
+
persona: personas/lead.md
|
|
97
|
+
requires:
|
|
98
|
+
toolPolicies: [member-safe]
|
|
99
|
+
orchestration:
|
|
100
|
+
shape: gate-pipeline
|
|
101
|
+
stages:
|
|
102
|
+
- { id: build, parallel: [reviewer], join: audit }
|
|
103
|
+
- { id: fix, role: fixer@1.0.0, maxRounds: 2 }
|
|
104
|
+
gates:
|
|
105
|
+
- { id: audit, after: [build], by: reviewer, verify: [{ command: node --test, expectExit: 0 }] }
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
四条规则:
|
|
109
|
+
|
|
110
|
+
1. **成员是引用不是内嵌**:`role: name@x.y.z`,不写范围、不写 latest。角色内容改了必须发版,引用它的组装才知道要跟。
|
|
111
|
+
2. **队长独立成段**:`captain` 不是成员。它描述"创建这个团队的那个会话",路由与 persona 只能落 profile 配置——这是 `config` 层,插件只声明。
|
|
112
|
+
3. **`targets` 决定字段落到哪个面**:`agent-teams/members`(桥接参数)、`agent-teams/orchestration`(任务 DAG)、`profile/agent-preset`。没有目标的面,字段只能是声明。
|
|
113
|
+
4. **`orchestration` 先当声明**:它能被校验(stage/gate 交叉引用、`maxRounds` 上限),但编译器只把它原样带进产物并标 `status: "declaration"`。**没有任何验证器能证明它会被执行**,所以不假装生效;编译成 `create_task` 的 DAG 是下一步。
|
|
114
|
+
|
|
115
|
+
### 身份与唯一性
|
|
116
|
+
|
|
117
|
+
- `id` 来自文档,不再要求等于目录名(不同就报 info `id-directory-differs`)。
|
|
118
|
+
- 代价是丢了 v1 用路径换来的唯一性,所以补一条更强的规则:**同一座库里 `name`(角色)与 `as`(成员)必须唯一**,重名是 error。
|
|
119
|
+
- 锁文件(`.agent-roster/lock.yaml`)双轨记录:`role@x.y.z` + 角色文件 sha256。版本回答"该不该升",哈希回答"内容是不是我以为的那份"。
|
|
120
|
+
|
|
121
|
+
## 5. 门必须有可执行的判据
|
|
122
|
+
|
|
123
|
+
一个门如果只写一句「现有测试全部通过」,那它唯一的判定者就是签字的人自己——这正是 issue #2 修掉的那种假绿。所以 v2 的门**必须**带至少一条 `verify`:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
gates:
|
|
127
|
+
- id: tests-pass
|
|
128
|
+
after: [audit]
|
|
129
|
+
by: reviewer
|
|
130
|
+
verify:
|
|
131
|
+
- command: node --test
|
|
132
|
+
expectExit: 0
|
|
133
|
+
requires: [没有新增未覆盖的分支] # 人读判据,不能替代 verify
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- `verify` 是可执行判据:跑什么命令、期望哪个退出码。判定者必须先跑它,跑不过就是不过。
|
|
137
|
+
- `requires` 保留,但降级为**补充说明**:它描述「命令之外还想让人看什么」,不能替代 `verify`。
|
|
138
|
+
- 没有 `verify` 的门在组装校验阶段就被拒(`gate-unverifiable`),不会流进编译产物。
|
|
139
|
+
|
|
140
|
+
## 6. 编译产物:`dist/<id>-<ver>.json`
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"kind": "dsh-agent-roster/compiled@1",
|
|
145
|
+
"source": { "roster": "money-lab", "version": "10.0.0", "file": "rosters/money-lab/roster.yaml", "lock": "…", "repo": "github:…", "ref": "main" },
|
|
146
|
+
"targets": ["agent-teams/members"],
|
|
147
|
+
"captain": { "role": "lead@2.0.0", "provider": "deepseek", "model": "…", "personaPath": "personas/lead.md", "personaChars": 900, "personaSha256": "…" },
|
|
148
|
+
"members": [
|
|
149
|
+
{
|
|
150
|
+
"name": "reviewer",
|
|
151
|
+
"role": "reviewer@1.4.0",
|
|
152
|
+
"roleName": "reviewer",
|
|
153
|
+
"roleVersion": "1.4.0",
|
|
154
|
+
"executionPrompt": "……",
|
|
155
|
+
"promptStats": { "chars": 4210, "parts": [{ "path": "AGENT.md", "kind": "body+parts" }], "sha256": "…" },
|
|
156
|
+
"provenance": { "role": "reviewer@1.4.0", "sha256": "ab12cd34" }
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"orchestration": { "shape": "gate-pipeline", "stages": [], "gates": [], "status": "declaration" },
|
|
160
|
+
"declarations": [{ "scope": "member", "member": "reviewer", "field": "tools.scope", "note": "运行时只认 toolPolicy,scope 不承载" }],
|
|
161
|
+
"requires": { "skills": [], "toolPolicies": ["member-safe"] }
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- **消费者只看产物**:桥接层、registry、面板都从 `compiled` 读,不再各自解析源文件。
|
|
166
|
+
- **自包含**:产物里有人设全文与哈希、有每个成员的来源角色与短哈希,不需要回头再读 `roles/`。
|
|
167
|
+
- **可 diff、可哈希**:产物序列化稳定(键顺序固定、无时间戳),`sha256` 直接当发布指纹。
|
|
168
|
+
- **声明清单显式化**:凡是"写下来但不会被运行时执行"的字段,都在 `declarations[]` 里点名,避免第二次"看起来生效了"。
|
|
169
|
+
|
|
170
|
+
## 7. 施工图:`dist/<id>-<ver>.tasks.json`
|
|
171
|
+
|
|
172
|
+
编译产物回答「这份档案长什么样」,施工图回答「照它该怎么跑」。它把 stages/gates 摊成一张张卡片,每张卡带 `id / kind / member / subject / description / dependencies`,门卡额外带 `gate.verify`。
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"kind": "dsh-agent-roster/plan@1",
|
|
177
|
+
"roster": { "id": "core-review", "version": "1.0.0" },
|
|
178
|
+
"executor": "captain",
|
|
179
|
+
"tasks": [
|
|
180
|
+
{ "id": "build", "kind": "stage", "member": "fixer", "dependencies": [] },
|
|
181
|
+
{ "id": "audit", "kind": "stage", "member": "reviewer", "dependencies": ["build"] },
|
|
182
|
+
{ "id": "tests-pass", "kind": "gate", "member": "reviewer", "dependencies": ["audit"],
|
|
183
|
+
"gate": { "id": "tests-pass", "verify": [{ "command": "node --test", "expectExit": 0 }] } }
|
|
184
|
+
],
|
|
185
|
+
"loop": { "onGateFailure": { "retry": "build", "maxRounds": 2 }, "runRecord": "dist/core-review-1.0.0.run.json" }
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
三件事在这份文件里被写死,不留解释空间:
|
|
190
|
+
|
|
191
|
+
1. **谁执行**:`executor: "captain"`。插件不调用 `agent_teams_create_task`——写团队状态的能力只属于队长会话。施工图是**给队长的施工图**,不是插件替队长施工。
|
|
192
|
+
2. **谁判门**:`gate.verify` 里的命令。判定者跑完把结论写进卡片输出;没跑就等于没判。
|
|
193
|
+
3. **谁重试**:门不过就回到第一个阶段,最多 `maxRounds` 轮;失败意见写进 `runRecord` 指向的文件,下一轮重试卡把它带上。
|
|
194
|
+
|
|
195
|
+
卡片真正的 id 由团队分配,施工图里的 id 只在内部表达依赖——否则「编译产物」就变成了「团队状态的第二真源」。
|
|
196
|
+
|
|
197
|
+
## 8. 迁移
|
|
198
|
+
|
|
199
|
+
- `roster migrate --dir <库> [--write]` 读 v1 档案,把 `systemPrompt` 拆成角色(`roles/<member>/AGENT.md`)+ 组装(成员改为引用),原地重写并生成 `dist/`。默认只出计划,`--write` 才落盘——这是唯一会删旧目录的命令。
|
|
200
|
+
- **角色名带档案 id 前缀**(`core-review-reviewer`):v2 要求同库角色名唯一,而真实档案库里几十套组装都可能叫 `lead`。队长与成员同名时,队长得到 `-captain` 后缀,不与人设合并。
|
|
201
|
+
- `maintainers` 用 `handle` 模式(允许大写与点),不复用档案 id 的小写短横线规则——维护者是账号,不是标识符。
|
|
202
|
+
- v1 冻结:新字段只进 v2,不再回填 v1。
|
|
203
|
+
- 同一目录两种格式共存是**禁止**的:判别键说了算。
|
|
204
|
+
|
|
205
|
+
## 9. 与既有两层声明的关系
|
|
206
|
+
|
|
207
|
+
| 层 | 文件 | 回答的问题 |
|
|
208
|
+
|---|---|---|
|
|
209
|
+
| 能力 | `capabilities.yaml` | 这份档案要求部署提供什么(有证据源) |
|
|
210
|
+
| 组织 | `organization.yaml` | 这座库收了哪些档案、哪些已归档 |
|
|
211
|
+
| 角色/组装 | `AGENT.md` + `roster.yaml` | 谁是谁、怎么拼、编排放哪 |
|
|
212
|
+
|
|
213
|
+
三者正交:`requires` 说"必须有",`capabilities.yaml` 说"这份组装必须有",`organization.yaml` 说"这座库有哪些"。
|
|
214
|
+
|
|
215
|
+
## 10. 未决与下一步
|
|
216
|
+
|
|
217
|
+
1. **施工图 ↔ 团队真实卡 id 的映射**:`run@1` 已经能读、能合并(`compile --run` 会把上一轮失败写进重试卡),但「施工图内部 id ↔ 团队真实 task id」的映射表还没落成文件——目前靠执行者按 id 命名建卡。
|
|
218
|
+
2. `dist` 的发布与 `registry` 只登记产物(现在 registry 登记的是档案路径)。
|
|
219
|
+
3. `profile/agent-preset` 目标:把队长与成员的 preset 片段生成出来,仍然只产参不写入。
|
|
220
|
+
4. 编辑器支持:三个 schema 已就位,LSP 级校验待做。
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "dsh-agent-roster/compiled@1",
|
|
3
|
+
"source": {
|
|
4
|
+
"roster": "core-review",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"title": "代码审查小组",
|
|
7
|
+
"repo": "dsh-agent-roster/dsh-agent-roster",
|
|
8
|
+
"ref": "main",
|
|
9
|
+
"lock": null,
|
|
10
|
+
"file": "roster.yaml"
|
|
11
|
+
},
|
|
12
|
+
"targets": [
|
|
13
|
+
"agent-teams/members",
|
|
14
|
+
"profile/agent-preset"
|
|
15
|
+
],
|
|
16
|
+
"captain": {
|
|
17
|
+
"role": "core-review-lead-captain@1.0.0",
|
|
18
|
+
"provider": "deepseek",
|
|
19
|
+
"model": "deepseek-v4.1-flash",
|
|
20
|
+
"reasoningEffort": "high",
|
|
21
|
+
"persona": "派活前先复述目标与验收标准;汇报时先结论后证据。",
|
|
22
|
+
"personaPath": null,
|
|
23
|
+
"personaChars": 24,
|
|
24
|
+
"personaSha256": "cc141df98d1ce3e120594c9081479a4429da74794e6396420696b9c0ef59aee7"
|
|
25
|
+
},
|
|
26
|
+
"members": [
|
|
27
|
+
{
|
|
28
|
+
"name": "lead",
|
|
29
|
+
"role": "队长",
|
|
30
|
+
"roleRef": "core-review-lead@1.0.0",
|
|
31
|
+
"roleName": "core-review-lead",
|
|
32
|
+
"roleVersion": "1.0.0",
|
|
33
|
+
"provider": "deepseek",
|
|
34
|
+
"model": "deepseek-v4.1-flash",
|
|
35
|
+
"reasoningEffort": "high",
|
|
36
|
+
"toolPolicy": "read-only",
|
|
37
|
+
"executionPrompt": "你负责这次审查的编排:先划定改动影响面,再把任务分给两名审查者,最后合并结论。\n只在两种情况下自己下结论:两人结论冲突且证据不足,或风险高到必须先止损。\n报告要能直接贴进 PR:结论在前,证据在后,不确定的地方明确写\"未验证\"。",
|
|
38
|
+
"promptStats": {
|
|
39
|
+
"chars": 114,
|
|
40
|
+
"parts": [
|
|
41
|
+
{
|
|
42
|
+
"path": "roles/core-review-lead/AGENT.md",
|
|
43
|
+
"kind": "body+parts"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "body",
|
|
47
|
+
"kind": "part"
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"sha256": "3ce50b3ace450af76ae43e37b9b26d69746a75d081ae44dc9268f38622e16d7f"
|
|
51
|
+
},
|
|
52
|
+
"provenance": {
|
|
53
|
+
"role": "core-review-lead@1.0.0",
|
|
54
|
+
"sha256": "5d67665b"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "correctness",
|
|
59
|
+
"role": "正确性审查",
|
|
60
|
+
"roleRef": "core-review-correctness@1.0.0",
|
|
61
|
+
"roleName": "core-review-correctness",
|
|
62
|
+
"roleVersion": "1.0.0",
|
|
63
|
+
"provider": "deepseek",
|
|
64
|
+
"model": "deepseek-v4.1-flash",
|
|
65
|
+
"reasoningEffort": "high",
|
|
66
|
+
"toolPolicy": "read-only",
|
|
67
|
+
"executionPrompt": "你只关心\"这段代码在什么输入下会做错事\":边界值、空值、并发、错误路径、类型退化。\n每条结论必须给出可复现的触发条件;给不出就标注为\"怀疑,未验证\"。\n不要评论风格,那是另一个人的事。",
|
|
68
|
+
"promptStats": {
|
|
69
|
+
"chars": 92,
|
|
70
|
+
"parts": [
|
|
71
|
+
{
|
|
72
|
+
"path": "roles/core-review-correctness/AGENT.md",
|
|
73
|
+
"kind": "body+parts"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"path": "body",
|
|
77
|
+
"kind": "part"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"sha256": "21edc9b263e6a15569cf6a59b8ac5c0f7f358c8a87420585163da780b05d79c5"
|
|
81
|
+
},
|
|
82
|
+
"provenance": {
|
|
83
|
+
"role": "core-review-correctness@1.0.0",
|
|
84
|
+
"sha256": "e56fa01d"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "maintainer",
|
|
89
|
+
"role": "可维护性审查",
|
|
90
|
+
"roleRef": "core-review-maintainer@1.0.0",
|
|
91
|
+
"roleName": "core-review-maintainer",
|
|
92
|
+
"roleVersion": "1.0.0",
|
|
93
|
+
"provider": "deepseek",
|
|
94
|
+
"model": "deepseek-v4.1-flash",
|
|
95
|
+
"reasoningEffort": "high",
|
|
96
|
+
"toolPolicy": "read-only",
|
|
97
|
+
"executionPrompt": "你关心的是\"半年后接手的人能不能安全改动\":命名、重复、隐含耦合、缺测试、错误信息质量。\n对每处问题给出最小修改方向,不要重写整个模块。\n风格问题只在它影响可读性判断时提,且最多三条。",
|
|
98
|
+
"promptStats": {
|
|
99
|
+
"chars": 92,
|
|
100
|
+
"parts": [
|
|
101
|
+
{
|
|
102
|
+
"path": "roles/core-review-maintainer/AGENT.md",
|
|
103
|
+
"kind": "body+parts"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"path": "body",
|
|
107
|
+
"kind": "part"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"sha256": "94d7dd9a541f37bfc83153fc244e07a7701accdecae893ffc87c518c5cd81ca9"
|
|
111
|
+
},
|
|
112
|
+
"provenance": {
|
|
113
|
+
"role": "core-review-maintainer@1.0.0",
|
|
114
|
+
"sha256": "ec33c376"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"orchestration": null,
|
|
119
|
+
"declarations": [
|
|
120
|
+
{
|
|
121
|
+
"scope": "member",
|
|
122
|
+
"member": "lead",
|
|
123
|
+
"field": "requires",
|
|
124
|
+
"note": "deployment:角色级要求,编译时并入 requires"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"scope": "roster",
|
|
128
|
+
"field": "defaults.route",
|
|
129
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"scope": "roster",
|
|
133
|
+
"field": "defaults.route",
|
|
134
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"scope": "roster",
|
|
138
|
+
"field": "defaults.route",
|
|
139
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"scope": "captain",
|
|
143
|
+
"field": "route",
|
|
144
|
+
"note": "config:队长的路由只能由 profile 的 agent-default-model 落地,插件不写运行时"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"scope": "captain",
|
|
148
|
+
"field": "persona",
|
|
149
|
+
"note": "config:需要落到 profile preset 的 persona"
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"requires": {
|
|
153
|
+
"skills": [
|
|
154
|
+
"frontend-skill"
|
|
155
|
+
],
|
|
156
|
+
"toolPolicies": [
|
|
157
|
+
"read-only"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "dsh-agent-roster/compiled@1",
|
|
3
|
+
"source": {
|
|
4
|
+
"roster": "research",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"title": "外部调研小组",
|
|
7
|
+
"repo": "dsh-agent-roster/dsh-agent-roster",
|
|
8
|
+
"ref": "main",
|
|
9
|
+
"lock": null,
|
|
10
|
+
"file": "roster.yaml"
|
|
11
|
+
},
|
|
12
|
+
"targets": [
|
|
13
|
+
"agent-teams/members"
|
|
14
|
+
],
|
|
15
|
+
"captain": null,
|
|
16
|
+
"members": [
|
|
17
|
+
{
|
|
18
|
+
"name": "scout",
|
|
19
|
+
"role": "一手资料",
|
|
20
|
+
"roleRef": "research-scout@1.0.0",
|
|
21
|
+
"roleName": "research-scout",
|
|
22
|
+
"roleVersion": "1.0.0",
|
|
23
|
+
"provider": "deepseek",
|
|
24
|
+
"model": "deepseek-v4.1-pro",
|
|
25
|
+
"reasoningEffort": "medium",
|
|
26
|
+
"toolPolicy": null,
|
|
27
|
+
"executionPrompt": "你负责找一手资料:官方文档、源码、发布说明、原始数据。二手转述只能用来说明\"存在争议\"。\n每条事实必须附可点击链接与日期;找不到就写\"没找到\",不要用常识补。",
|
|
28
|
+
"promptStats": {
|
|
29
|
+
"chars": 79,
|
|
30
|
+
"parts": [
|
|
31
|
+
{
|
|
32
|
+
"path": "roles/research-scout/AGENT.md",
|
|
33
|
+
"kind": "body+parts"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "body",
|
|
37
|
+
"kind": "part"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"sha256": "a5b6baa0b2177b2d2f48bafa71f93699bd64d4d9400838ecc3b467cab394e4e7"
|
|
41
|
+
},
|
|
42
|
+
"provenance": {
|
|
43
|
+
"role": "research-scout@1.0.0",
|
|
44
|
+
"sha256": "220dbcd9"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "verifier",
|
|
49
|
+
"role": "交叉复核",
|
|
50
|
+
"roleRef": "research-verifier@1.0.0",
|
|
51
|
+
"roleName": "research-verifier",
|
|
52
|
+
"roleVersion": "1.0.0",
|
|
53
|
+
"provider": "deepseek",
|
|
54
|
+
"model": "deepseek-v4.1-pro",
|
|
55
|
+
"reasoningEffort": "medium",
|
|
56
|
+
"toolPolicy": null,
|
|
57
|
+
"executionPrompt": "你只做一件事:拿另一条独立来源验证别人的结论。你有意不共享 scout 的上下文,避免同源偏差。\n结论分三档:已复现 / 部分一致 / 无法复现。无法复现时必须写清缺哪条关键证据。",
|
|
58
|
+
"promptStats": {
|
|
59
|
+
"chars": 90,
|
|
60
|
+
"parts": [
|
|
61
|
+
{
|
|
62
|
+
"path": "roles/research-verifier/AGENT.md",
|
|
63
|
+
"kind": "body+parts"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"path": "body",
|
|
67
|
+
"kind": "part"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"sha256": "7c89d62baf193550f90abd75f6f08a517bff06b6b91bf3b7984314f055539f5c"
|
|
71
|
+
},
|
|
72
|
+
"provenance": {
|
|
73
|
+
"role": "research-verifier@1.0.0",
|
|
74
|
+
"sha256": "af8cce36"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"orchestration": null,
|
|
79
|
+
"declarations": [
|
|
80
|
+
{
|
|
81
|
+
"scope": "roster",
|
|
82
|
+
"field": "defaults.route",
|
|
83
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"scope": "roster",
|
|
87
|
+
"field": "defaults.route",
|
|
88
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"requires": {
|
|
92
|
+
"skills": [],
|
|
93
|
+
"toolPolicies": []
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "core-review-correctness"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "正确性审查"
|
|
6
|
+
title: "找会出错的地方"
|
|
7
|
+
description: "只找\"什么输入下会做错事\",每条结论给可复现的触发条件"
|
|
8
|
+
tags:
|
|
9
|
+
- "correctness"
|
|
10
|
+
route:
|
|
11
|
+
provider: "deepseek"
|
|
12
|
+
model: "deepseek-v4.1-flash"
|
|
13
|
+
reasoningEffort: "high"
|
|
14
|
+
tools:
|
|
15
|
+
policy: "read-only"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
你只关心"这段代码在什么输入下会做错事":边界值、空值、并发、错误路径、类型退化。
|
|
19
|
+
每条结论必须给出可复现的触发条件;给不出就标注为"怀疑,未验证"。
|
|
20
|
+
不要评论风格,那是另一个人的事。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "core-review-lead"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "队长"
|
|
6
|
+
title: "编排与取舍"
|
|
7
|
+
description: "编排这次审查、拆任务、合并结论;不写具体代码"
|
|
8
|
+
tags:
|
|
9
|
+
- "orchestration"
|
|
10
|
+
route:
|
|
11
|
+
provider: "deepseek"
|
|
12
|
+
model: "deepseek-v4.1-flash"
|
|
13
|
+
reasoningEffort: "high"
|
|
14
|
+
tools:
|
|
15
|
+
policy: "read-only"
|
|
16
|
+
requires:
|
|
17
|
+
skills:
|
|
18
|
+
- "frontend-skill"
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
你负责这次审查的编排:先划定改动影响面,再把任务分给两名审查者,最后合并结论。
|
|
22
|
+
只在两种情况下自己下结论:两人结论冲突且证据不足,或风险高到必须先止损。
|
|
23
|
+
报告要能直接贴进 PR:结论在前,证据在后,不确定的地方明确写"未验证"。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "core-review-lead-captain"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "队长"
|
|
6
|
+
description: "主会话即队长,负责拆活与验收"
|
|
7
|
+
route:
|
|
8
|
+
provider: "deepseek"
|
|
9
|
+
model: "deepseek-v4.1-flash"
|
|
10
|
+
reasoningEffort: "high"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
派活前先复述目标与验收标准;汇报时先结论后证据。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "core-review-maintainer"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "可维护性审查"
|
|
6
|
+
title: "看六个月后谁来改"
|
|
7
|
+
description: "看命名、重复、耦合、测试与错误信息;只给最小修改方向"
|
|
8
|
+
tags:
|
|
9
|
+
- "maintainability"
|
|
10
|
+
route:
|
|
11
|
+
provider: "deepseek"
|
|
12
|
+
model: "deepseek-v4.1-flash"
|
|
13
|
+
reasoningEffort: "high"
|
|
14
|
+
tools:
|
|
15
|
+
policy: "read-only"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
你关心的是"半年后接手的人能不能安全改动":命名、重复、隐含耦合、缺测试、错误信息质量。
|
|
19
|
+
对每处问题给出最小修改方向,不要重写整个模块。
|
|
20
|
+
风格问题只在它影响可读性判断时提,且最多三条。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "research-scout"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "一手资料"
|
|
6
|
+
title: "找原始出处"
|
|
7
|
+
tags:
|
|
8
|
+
- "sourcing"
|
|
9
|
+
route:
|
|
10
|
+
provider: "deepseek"
|
|
11
|
+
model: "deepseek-v4.1-pro"
|
|
12
|
+
reasoningEffort: "medium"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你负责找一手资料:官方文档、源码、发布说明、原始数据。二手转述只能用来说明"存在争议"。
|
|
16
|
+
每条事实必须附可点击链接与日期;找不到就写"没找到",不要用常识补。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: "dsh-agent-roster/role@1"
|
|
3
|
+
name: "research-verifier"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
role: "交叉复核"
|
|
6
|
+
title: "独立复现结论"
|
|
7
|
+
tags:
|
|
8
|
+
- "verification"
|
|
9
|
+
route:
|
|
10
|
+
provider: "deepseek"
|
|
11
|
+
model: "deepseek-v4.1-flash"
|
|
12
|
+
reasoningEffort: "high"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你只做一件事:拿另一条独立来源验证别人的结论。你有意不共享 scout 的上下文,避免同源偏差。
|
|
16
|
+
结论分三档:已复现 / 部分一致 / 无法复现。无法复现时必须写清缺哪条关键证据。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
kind: "dsh-agent-roster/roster@2"
|
|
2
|
+
id: "core-review"
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
title: "代码审查小组"
|
|
5
|
+
description: "一名队长加两名审查者:一人盯正确性,一人盯可维护性与边界条件。"
|
|
6
|
+
license: "MIT"
|
|
7
|
+
maintainers:
|
|
8
|
+
- "STofone"
|
|
9
|
+
tags:
|
|
10
|
+
- "review"
|
|
11
|
+
- "example"
|
|
12
|
+
defaults:
|
|
13
|
+
route:
|
|
14
|
+
provider: "deepseek"
|
|
15
|
+
model: "deepseek-v4.1-flash"
|
|
16
|
+
reasoningEffort: "high"
|
|
17
|
+
tools:
|
|
18
|
+
policy: "read-only"
|
|
19
|
+
targets:
|
|
20
|
+
- "agent-teams/members"
|
|
21
|
+
- "profile/agent-preset"
|
|
22
|
+
members:
|
|
23
|
+
- as: "lead"
|
|
24
|
+
role: "core-review-lead@1.0.0"
|
|
25
|
+
- as: "correctness"
|
|
26
|
+
role: "core-review-correctness@1.0.0"
|
|
27
|
+
- as: "maintainer"
|
|
28
|
+
role: "core-review-maintainer@1.0.0"
|
|
29
|
+
captain:
|
|
30
|
+
role: "core-review-lead-captain@1.0.0"
|
|
31
|
+
route:
|
|
32
|
+
provider: "deepseek"
|
|
33
|
+
model: "deepseek-v4.1-flash"
|
|
34
|
+
reasoningEffort: "high"
|
|
35
|
+
requires:
|
|
36
|
+
skills:
|
|
37
|
+
- "frontend-skill"
|
|
38
|
+
toolPolicies:
|
|
39
|
+
- "read-only"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
kind: "dsh-agent-roster/roster@2"
|
|
2
|
+
id: "research"
|
|
3
|
+
version: "0.1.0"
|
|
4
|
+
title: "外部调研小组"
|
|
5
|
+
description: "一手资料收集 + 交叉复核;复核者的结论必须能被另一条独立来源支撑。"
|
|
6
|
+
tags:
|
|
7
|
+
- "research"
|
|
8
|
+
- "example"
|
|
9
|
+
defaults:
|
|
10
|
+
route:
|
|
11
|
+
provider: "deepseek"
|
|
12
|
+
model: "deepseek-v4.1-pro"
|
|
13
|
+
reasoningEffort: "medium"
|
|
14
|
+
targets:
|
|
15
|
+
- "agent-teams/members"
|
|
16
|
+
members:
|
|
17
|
+
- as: "scout"
|
|
18
|
+
role: "research-scout@1.0.0"
|
|
19
|
+
- as: "verifier"
|
|
20
|
+
role: "research-verifier@1.0.0"
|