@stofone/dsh-agent-roster 0.9.2 → 0.10.1
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 +68 -0
- package/README.md +80 -5
- package/README.zh.md +73 -6
- package/bin/cli.mjs +228 -2
- 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,185 @@
|
|
|
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
|
+
],
|
|
15
|
+
"captain": {
|
|
16
|
+
"role": "lead@1.0.0",
|
|
17
|
+
"provider": "deepseek",
|
|
18
|
+
"model": "deepseek-v4.1-flash",
|
|
19
|
+
"reasoningEffort": "high",
|
|
20
|
+
"persona": "你负责推进,不负责写代码。每张卡先写清验收标准再派出去;收到回报先核对证据,再决定收口还是打回。\n遇到需要用户拍板的事,直接说清选项与代价,不要替他选。",
|
|
21
|
+
"personaPath": null,
|
|
22
|
+
"personaChars": 76,
|
|
23
|
+
"personaSha256": "9ea2862bd577f049067484509b710f32f7b8a95abcb2ae569de0ff25f4f5c5ae"
|
|
24
|
+
},
|
|
25
|
+
"members": [
|
|
26
|
+
{
|
|
27
|
+
"name": "reviewer",
|
|
28
|
+
"role": "代码评审",
|
|
29
|
+
"roleRef": "reviewer@1.0.0",
|
|
30
|
+
"roleName": "reviewer",
|
|
31
|
+
"roleVersion": "1.0.0",
|
|
32
|
+
"provider": "deepseek",
|
|
33
|
+
"model": "deepseek-v4.1-flash",
|
|
34
|
+
"reasoningEffort": "high",
|
|
35
|
+
"toolPolicy": "member-safe",
|
|
36
|
+
"executionPrompt": "你是这个团队的代码评审。你的读者是写这段代码的人,他比你更了解背景,但没你冷静。\n\n先说结论:这段改动能不能合、卡在哪一条。再按严重度从高到低列问题,每条给出文件、行号与具体改法。\n没有把握的地方标成「猜测」,不要用肯定的语气说出来。\n\n## 检查清单\n\n1. 边界:空值、空数组、零、负数、超长输入。\n2. 错误:失败时调用方能不能分辨「没数据」与「坏了」。\n3. 并发:有没有共享可变状态;重入会不会踩同一份缓存。\n4. 契约:改了返回形状就要在同一次改动里改所有调用点。\n",
|
|
37
|
+
"promptStats": {
|
|
38
|
+
"chars": 239,
|
|
39
|
+
"parts": [
|
|
40
|
+
{
|
|
41
|
+
"path": "roles/reviewer/AGENT.md",
|
|
42
|
+
"kind": "body+parts"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "body",
|
|
46
|
+
"kind": "part"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "parts/checklist.md",
|
|
50
|
+
"kind": "part"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"sha256": "821be94c03087f86f9eb42620933c05a6a6a257101abfdba2abe19e77bedcb78"
|
|
54
|
+
},
|
|
55
|
+
"provenance": {
|
|
56
|
+
"role": "reviewer@1.0.0",
|
|
57
|
+
"sha256": "8c331102"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "fixer",
|
|
62
|
+
"role": "修复",
|
|
63
|
+
"roleRef": "fixer@1.0.0",
|
|
64
|
+
"roleName": "fixer",
|
|
65
|
+
"roleVersion": "1.0.0",
|
|
66
|
+
"provider": "deepseek",
|
|
67
|
+
"model": "deepseek-v4.1-flash",
|
|
68
|
+
"reasoningEffort": "high",
|
|
69
|
+
"toolPolicy": "member-safe",
|
|
70
|
+
"executionPrompt": "只改评审指出的问题。每改一条说明改了哪个文件、为什么这样改、怎么验证的。\n发现意见本身不对时先说明,不要默默按错的方向改。\n\n在这个团队里,你还要顺带跑一次 `node --test`,把失败用例贴进回报里。",
|
|
71
|
+
"promptStats": {
|
|
72
|
+
"chars": 104,
|
|
73
|
+
"parts": [
|
|
74
|
+
{
|
|
75
|
+
"path": "roles/fixer/AGENT.md",
|
|
76
|
+
"kind": "body+parts"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"path": "body",
|
|
80
|
+
"kind": "part"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"path": "在这个团队里,你还要顺带跑一次 `node --test`,把失败用例贴进回报里。",
|
|
84
|
+
"kind": "append"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"sha256": "ae95875f1ce3098b29475dd4a13609a8da5eac0a95a71bbe0be5cac92f2ec3ce"
|
|
88
|
+
},
|
|
89
|
+
"provenance": {
|
|
90
|
+
"role": "fixer@1.0.0",
|
|
91
|
+
"sha256": "a50981a7"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"orchestration": {
|
|
96
|
+
"shape": "gate-pipeline",
|
|
97
|
+
"stages": [
|
|
98
|
+
{
|
|
99
|
+
"id": "build",
|
|
100
|
+
"parallel": [],
|
|
101
|
+
"serial": [
|
|
102
|
+
"fixer"
|
|
103
|
+
],
|
|
104
|
+
"join": null,
|
|
105
|
+
"on": null,
|
|
106
|
+
"role": null,
|
|
107
|
+
"maxRounds": 1
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "audit",
|
|
111
|
+
"parallel": [
|
|
112
|
+
"reviewer"
|
|
113
|
+
],
|
|
114
|
+
"serial": [],
|
|
115
|
+
"join": null,
|
|
116
|
+
"on": null,
|
|
117
|
+
"role": null,
|
|
118
|
+
"maxRounds": 1
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"gates": [
|
|
122
|
+
{
|
|
123
|
+
"id": "tests-pass",
|
|
124
|
+
"after": [
|
|
125
|
+
"audit"
|
|
126
|
+
],
|
|
127
|
+
"requires": [
|
|
128
|
+
"现有测试全部通过",
|
|
129
|
+
"没有新增未覆盖的分支"
|
|
130
|
+
],
|
|
131
|
+
"verify": [
|
|
132
|
+
{
|
|
133
|
+
"command": "node --test",
|
|
134
|
+
"expectExit": 0
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"command": "node bin/cli.mjs validate --dir examples",
|
|
138
|
+
"expectExit": 0
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"by": "reviewer"
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"status": "declaration"
|
|
145
|
+
},
|
|
146
|
+
"declarations": [
|
|
147
|
+
{
|
|
148
|
+
"scope": "roster",
|
|
149
|
+
"field": "defaults.route",
|
|
150
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"scope": "roster",
|
|
154
|
+
"field": "defaults.route",
|
|
155
|
+
"note": "materialized:已展开成每个成员的显式值"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"scope": "member",
|
|
159
|
+
"member": "fixer",
|
|
160
|
+
"field": "prompt.append/prepend",
|
|
161
|
+
"note": "materialized:已拼进 executionPrompt"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"scope": "captain",
|
|
165
|
+
"field": "route",
|
|
166
|
+
"note": "config:队长的路由只能由 profile 的 agent-default-model 落地,插件不写运行时"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"scope": "captain",
|
|
170
|
+
"field": "persona",
|
|
171
|
+
"note": "config:需要落到 profile preset 的 persona"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"scope": "orchestration",
|
|
175
|
+
"field": "stages/gates",
|
|
176
|
+
"note": "declaration:运行时不会执行这份编排;它先作为可校验的计划存在,编译成任务 DAG 是下一步"
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"requires": {
|
|
180
|
+
"skills": [],
|
|
181
|
+
"toolPolicies": [
|
|
182
|
+
"member-safe"
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "dsh-agent-roster/plan@1",
|
|
3
|
+
"roster": {
|
|
4
|
+
"id": "core-review",
|
|
5
|
+
"version": "1.0.0"
|
|
6
|
+
},
|
|
7
|
+
"shape": "gate-pipeline",
|
|
8
|
+
"executor": "captain",
|
|
9
|
+
"tasks": [
|
|
10
|
+
{
|
|
11
|
+
"id": "build",
|
|
12
|
+
"kind": "stage",
|
|
13
|
+
"stage": "build",
|
|
14
|
+
"member": "fixer",
|
|
15
|
+
"subject": "核心评审组 · build · fixer",
|
|
16
|
+
"description": "阶段 build:fixer(修复)负责。\n这是第一个阶段,没有前置卡片。\n完成后把结果写进任务输出;不要自行判定门。",
|
|
17
|
+
"dependencies": [],
|
|
18
|
+
"gate": null
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "audit",
|
|
22
|
+
"kind": "stage",
|
|
23
|
+
"stage": "audit",
|
|
24
|
+
"member": "reviewer",
|
|
25
|
+
"subject": "核心评审组 · audit · reviewer",
|
|
26
|
+
"description": "阶段 audit:reviewer(代码评审)负责。\n前置:build。\n完成后把结果写进任务输出;不要自行判定门。",
|
|
27
|
+
"dependencies": [
|
|
28
|
+
"build"
|
|
29
|
+
],
|
|
30
|
+
"gate": null
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "tests-pass",
|
|
34
|
+
"kind": "gate",
|
|
35
|
+
"stage": null,
|
|
36
|
+
"member": "reviewer",
|
|
37
|
+
"subject": "核心评审组 · 判定 · tests-pass",
|
|
38
|
+
"description": "门 tests-pass:由 reviewer 判定,必须先跑完下面的命令。\n $ node --test\n 期望退出码 0\n $ node bin/cli.mjs validate --dir examples\n 期望退出码 0\n此外还要满足(人读判据,不能替代上面的命令):\n - 现有测试全部通过\n - 没有新增未覆盖的分支\n判定结论写进任务输出;不通过时在 reviewer 的结论里写清哪条命令失败、失败输出前 20 行。",
|
|
39
|
+
"dependencies": [
|
|
40
|
+
"audit"
|
|
41
|
+
],
|
|
42
|
+
"gate": {
|
|
43
|
+
"id": "tests-pass",
|
|
44
|
+
"requires": [
|
|
45
|
+
"现有测试全部通过",
|
|
46
|
+
"没有新增未覆盖的分支"
|
|
47
|
+
],
|
|
48
|
+
"verify": [
|
|
49
|
+
{
|
|
50
|
+
"command": "node --test",
|
|
51
|
+
"expectExit": 0
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"command": "node bin/cli.mjs validate --dir examples",
|
|
55
|
+
"expectExit": 0
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"by": "reviewer"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"loop": {
|
|
63
|
+
"onGateFailure": {
|
|
64
|
+
"retry": "build",
|
|
65
|
+
"maxRounds": 1
|
|
66
|
+
},
|
|
67
|
+
"runRecord": "dist/core-review-1.0.0.run.json"
|
|
68
|
+
},
|
|
69
|
+
"notes": [
|
|
70
|
+
"插件不调用任何 agent_teams_* 工具:这份文件是给队长会话的施工图。",
|
|
71
|
+
"卡片真正的 id 由团队分配;这里的 id 只在施工图内部表达依赖。",
|
|
72
|
+
"门必须先跑 verify 里的命令,全部满足期望退出码才算通过;requires 是给人读的补充判据,不能替代 verify。",
|
|
73
|
+
"失败意见写进 runRecord 指向的文件,下一次编译会把它带进重试卡。",
|
|
74
|
+
"orchestration.status = declaration:施工图描述的是「打算怎么跑」,不是「已经跑过」。"
|
|
75
|
+
]
|
|
76
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: dsh-agent-roster/role@1
|
|
3
|
+
name: fixer
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
role: 修复
|
|
6
|
+
title: 只修被指出的那几条
|
|
7
|
+
description: 按评审意见改,不做顺手重构;改完给出复跑结果。
|
|
8
|
+
tags: [fix]
|
|
9
|
+
route:
|
|
10
|
+
provider: deepseek
|
|
11
|
+
model: deepseek-v4.1-flash
|
|
12
|
+
reasoningEffort: medium
|
|
13
|
+
tools:
|
|
14
|
+
policy: member-safe
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
只改评审指出的问题。每改一条说明改了哪个文件、为什么这样改、怎么验证的。
|
|
18
|
+
发现意见本身不对时先说明,不要默默按错的方向改。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: dsh-agent-roster/role@1
|
|
3
|
+
name: lead
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
role: 队长
|
|
6
|
+
title: 拆任务与收口的那个会话
|
|
7
|
+
description: 把目标拆成可验收的卡,逐张派给成员,验收后收口;不亲自实现。
|
|
8
|
+
tags: [lead]
|
|
9
|
+
route:
|
|
10
|
+
provider: deepseek
|
|
11
|
+
model: deepseek-v4.1-flash
|
|
12
|
+
reasoningEffort: high
|
|
13
|
+
tools:
|
|
14
|
+
policy: member-safe
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
你负责推进,不负责写代码。每张卡先写清验收标准再派出去;收到回报先核对证据,再决定收口还是打回。
|
|
18
|
+
遇到需要用户拍板的事,直接说清选项与代价,不要替他选。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: dsh-agent-roster/role@1
|
|
3
|
+
name: reviewer
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
role: 代码评审
|
|
6
|
+
title: 严格但不啰嗦的评审
|
|
7
|
+
description: 只对 diff 里真实存在的风险发言,按严重度排序,给可执行的修法。
|
|
8
|
+
tags: [review, quality]
|
|
9
|
+
route:
|
|
10
|
+
provider: deepseek
|
|
11
|
+
model: deepseek-v4.1-flash
|
|
12
|
+
reasoningEffort: high
|
|
13
|
+
tools:
|
|
14
|
+
policy: member-safe
|
|
15
|
+
prompt:
|
|
16
|
+
parts: [parts/checklist.md]
|
|
17
|
+
budget: 4000
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
你是这个团队的代码评审。你的读者是写这段代码的人,他比你更了解背景,但没你冷静。
|
|
21
|
+
|
|
22
|
+
先说结论:这段改动能不能合、卡在哪一条。再按严重度从高到低列问题,每条给出文件、行号与具体改法。
|
|
23
|
+
没有把握的地方标成「猜测」,不要用肯定的语气说出来。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
在这个团队里,你还要顺带跑一次 `node --test`,把失败用例贴进回报里。
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
kind: dsh-agent-roster/roster@2
|
|
2
|
+
id: core-review
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
title: 核心评审组
|
|
5
|
+
description: 一个小团队:队长拆任务,评审把关,修复收尾。用来演示 v2 的引用式成员与声明式编排。
|
|
6
|
+
license: MIT
|
|
7
|
+
maintainers: [stofone]
|
|
8
|
+
tags: [review, example]
|
|
9
|
+
defaults:
|
|
10
|
+
route:
|
|
11
|
+
provider: deepseek
|
|
12
|
+
model: deepseek-v4.1-flash
|
|
13
|
+
reasoningEffort: high
|
|
14
|
+
targets: [agent-teams/members]
|
|
15
|
+
members:
|
|
16
|
+
- as: reviewer
|
|
17
|
+
role: reviewer@1.0.0
|
|
18
|
+
- as: fixer
|
|
19
|
+
role: fixer@1.0.0
|
|
20
|
+
prompt:
|
|
21
|
+
append: overrides/fixer.md
|
|
22
|
+
captain:
|
|
23
|
+
role: lead@1.0.0
|
|
24
|
+
orchestration:
|
|
25
|
+
shape: gate-pipeline
|
|
26
|
+
stages:
|
|
27
|
+
- id: build
|
|
28
|
+
serial: [fixer]
|
|
29
|
+
- id: audit
|
|
30
|
+
parallel: [reviewer]
|
|
31
|
+
gates:
|
|
32
|
+
- id: tests-pass
|
|
33
|
+
after: [audit]
|
|
34
|
+
by: reviewer
|
|
35
|
+
requires: [现有测试全部通过, 没有新增未覆盖的分支]
|
|
36
|
+
verify:
|
|
37
|
+
- command: node --test
|
|
38
|
+
expectExit: 0
|
|
39
|
+
- command: node bin/cli.mjs validate --dir examples
|
|
40
|
+
expectExit: 0
|
|
41
|
+
requires:
|
|
42
|
+
toolPolicies: [member-safe]
|
|
43
|
+
onMissing: refuse
|
package/index.js
CHANGED
|
@@ -20,7 +20,9 @@ import { configView } from "./lib/config-view.js";
|
|
|
20
20
|
import { applyCaptain, listSessions } from "./lib/apply.js";
|
|
21
21
|
import { collectLibrary } from "./lib/library.js";
|
|
22
22
|
import { parseDocumentText } from "./lib/parse.js";
|
|
23
|
+
import { ROSTER2_KIND } from "./lib/format-v2.js";
|
|
23
24
|
import { validateRoster } from "./lib/validate.js";
|
|
25
|
+
import { validateRoster2 } from "./lib/roster2.js";
|
|
24
26
|
import { sendError, sendJson, createAuthGate, readJsonBody, requireMethod } from "./lib/http.js";
|
|
25
27
|
import { buildPanelSnapshot, installCollection, loadRemotePanel, resolveRoots } from "./lib/service.js";
|
|
26
28
|
import { fetchCollection } from "./lib/remote.js";
|
|
@@ -203,7 +205,12 @@ export function apply(ctx, config) {
|
|
|
203
205
|
}
|
|
204
206
|
// 编辑表单需要人设原文:解析一份给编辑器用,解析失败也不挡"看源码"这条路。
|
|
205
207
|
const parsed = parseDocumentText(result.text, { file: result.file, format: result.format });
|
|
206
|
-
const
|
|
208
|
+
const isV2 = parsed.ok && parsed.value?.kind === ROSTER2_KIND;
|
|
209
|
+
const validated = parsed.ok
|
|
210
|
+
? isV2
|
|
211
|
+
? validateRoster2(parsed.value, { file: result.file })
|
|
212
|
+
: validateRoster(parsed.value, { file: result.file })
|
|
213
|
+
: null;
|
|
207
214
|
sendJson(res, 200, {
|
|
208
215
|
ok: true,
|
|
209
216
|
file: result.file,
|