@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.
Files changed (167) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +80 -5
  3. package/README.zh.md +73 -6
  4. package/bin/cli.mjs +228 -2
  5. package/docs/roster-v2.md +220 -0
  6. package/examples/dist/core-review-1.0.0.json +160 -0
  7. package/examples/dist/research-0.1.0.json +95 -0
  8. package/examples/roles/core-review-correctness/AGENT.md +20 -0
  9. package/examples/roles/core-review-lead/AGENT.md +23 -0
  10. package/examples/roles/core-review-lead-captain/AGENT.md +13 -0
  11. package/examples/roles/core-review-maintainer/AGENT.md +20 -0
  12. package/examples/roles/research-scout/AGENT.md +16 -0
  13. package/examples/roles/research-verifier/AGENT.md +16 -0
  14. package/examples/rosters/core-review/roster.yaml +39 -0
  15. package/examples/rosters/research/roster.yaml +20 -0
  16. package/examples-orchestration/dist/core-review-1.0.0.json +185 -0
  17. package/examples-orchestration/dist/core-review-1.0.0.tasks.json +76 -0
  18. package/examples-orchestration/roles/fixer/AGENT.md +18 -0
  19. package/examples-orchestration/roles/lead/AGENT.md +18 -0
  20. package/examples-orchestration/roles/reviewer/AGENT.md +23 -0
  21. package/examples-orchestration/roles/reviewer/parts/checklist.md +6 -0
  22. package/examples-orchestration/rosters/core-review/overrides/fixer.md +1 -0
  23. package/examples-orchestration/rosters/core-review/roster.yaml +43 -0
  24. package/index.js +8 -1
  25. package/lib/compile2.js +522 -0
  26. package/lib/format-v2.js +196 -0
  27. package/lib/frontmatter.js +113 -0
  28. package/lib/migrate.js +326 -0
  29. package/lib/plan.js +167 -0
  30. package/lib/registry.js +65 -11
  31. package/lib/role.js +498 -0
  32. package/lib/roster2.js +591 -0
  33. package/lib/run.js +188 -0
  34. package/lib/write.js +14 -8
  35. package/orgs/agent-roster-collective/dist/api-design-1.0.0.json +130 -0
  36. package/orgs/agent-roster-collective/dist/content-ops-1.0.0.json +130 -0
  37. package/orgs/agent-roster-collective/dist/contract-review-1.0.0.json +130 -0
  38. package/orgs/agent-roster-collective/dist/data-quality-1.0.0.json +130 -0
  39. package/orgs/agent-roster-collective/dist/db-migration-1.0.0.json +130 -0
  40. package/orgs/agent-roster-collective/dist/docs-writer-1.0.0.json +130 -0
  41. package/orgs/agent-roster-collective/dist/finance-recon-1.0.0.json +130 -0
  42. package/orgs/agent-roster-collective/dist/frontend-ui-1.0.0.json +130 -0
  43. package/orgs/agent-roster-collective/dist/i18n-l10n-1.0.0.json +130 -0
  44. package/orgs/agent-roster-collective/dist/incident-response-1.0.0.json +130 -0
  45. package/orgs/agent-roster-collective/dist/literature-review-1.0.0.json +130 -0
  46. package/orgs/agent-roster-collective/dist/market-research-1.0.0.json +130 -0
  47. package/orgs/agent-roster-collective/dist/ml-eval-1.0.0.json +130 -0
  48. package/orgs/agent-roster-collective/dist/performance-1.0.0.json +130 -0
  49. package/orgs/agent-roster-collective/dist/product-discovery-1.0.0.json +130 -0
  50. package/orgs/agent-roster-collective/dist/qa-regression-1.0.0.json +130 -0
  51. package/orgs/agent-roster-collective/dist/recruiting-1.0.0.json +130 -0
  52. package/orgs/agent-roster-collective/dist/release-manager-1.0.0.json +130 -0
  53. package/orgs/agent-roster-collective/dist/security-audit-1.0.0.json +132 -0
  54. package/orgs/agent-roster-collective/dist/sre-oncall-1.0.0.json +130 -0
  55. package/orgs/agent-roster-collective/dist/support-triage-1.0.0.json +130 -0
  56. package/orgs/agent-roster-collective/roles/api-design-failure-mode/AGENT.md +19 -0
  57. package/orgs/agent-roster-collective/roles/api-design-lead/AGENT.md +19 -0
  58. package/orgs/agent-roster-collective/roles/api-design-schema/AGENT.md +20 -0
  59. package/orgs/agent-roster-collective/roles/content-ops-distributor/AGENT.md +19 -0
  60. package/orgs/agent-roster-collective/roles/content-ops-editor/AGENT.md +19 -0
  61. package/orgs/agent-roster-collective/roles/content-ops-lead/AGENT.md +19 -0
  62. package/orgs/agent-roster-collective/roles/contract-review-clause-reader/AGENT.md +19 -0
  63. package/orgs/agent-roster-collective/roles/contract-review-lead/AGENT.md +19 -0
  64. package/orgs/agent-roster-collective/roles/contract-review-risk-note/AGENT.md +19 -0
  65. package/orgs/agent-roster-collective/roles/data-quality-lead/AGENT.md +19 -0
  66. package/orgs/agent-roster-collective/roles/data-quality-profiler/AGENT.md +19 -0
  67. package/orgs/agent-roster-collective/roles/data-quality-rule-author/AGENT.md +19 -0
  68. package/orgs/agent-roster-collective/roles/db-migration-lead/AGENT.md +19 -0
  69. package/orgs/agent-roster-collective/roles/db-migration-migrator/AGENT.md +19 -0
  70. package/orgs/agent-roster-collective/roles/db-migration-verifier/AGENT.md +19 -0
  71. package/orgs/agent-roster-collective/roles/docs-writer-example-runner/AGENT.md +19 -0
  72. package/orgs/agent-roster-collective/roles/docs-writer-lead/AGENT.md +19 -0
  73. package/orgs/agent-roster-collective/roles/docs-writer-writer/AGENT.md +19 -0
  74. package/orgs/agent-roster-collective/roles/finance-recon-exception/AGENT.md +19 -0
  75. package/orgs/agent-roster-collective/roles/finance-recon-lead/AGENT.md +19 -0
  76. package/orgs/agent-roster-collective/roles/finance-recon-matcher/AGENT.md +19 -0
  77. package/orgs/agent-roster-collective/roles/frontend-ui-a11y-reviewer/AGENT.md +19 -0
  78. package/orgs/agent-roster-collective/roles/frontend-ui-implementer/AGENT.md +19 -0
  79. package/orgs/agent-roster-collective/roles/frontend-ui-lead/AGENT.md +19 -0
  80. package/orgs/agent-roster-collective/roles/i18n-l10n-lead/AGENT.md +19 -0
  81. package/orgs/agent-roster-collective/roles/i18n-l10n-reviewer/AGENT.md +19 -0
  82. package/orgs/agent-roster-collective/roles/i18n-l10n-translator/AGENT.md +19 -0
  83. package/orgs/agent-roster-collective/roles/incident-response-commander/AGENT.md +19 -0
  84. package/orgs/agent-roster-collective/roles/incident-response-scribe/AGENT.md +19 -0
  85. package/orgs/agent-roster-collective/roles/incident-response-triage/AGENT.md +19 -0
  86. package/orgs/agent-roster-collective/roles/literature-review-critic/AGENT.md +19 -0
  87. package/orgs/agent-roster-collective/roles/literature-review-extractor/AGENT.md +19 -0
  88. package/orgs/agent-roster-collective/roles/literature-review-lead/AGENT.md +19 -0
  89. package/orgs/agent-roster-collective/roles/market-research-lead/AGENT.md +19 -0
  90. package/orgs/agent-roster-collective/roles/market-research-researcher/AGENT.md +19 -0
  91. package/orgs/agent-roster-collective/roles/market-research-synthesizer/AGENT.md +19 -0
  92. package/orgs/agent-roster-collective/roles/ml-eval-dataset/AGENT.md +19 -0
  93. package/orgs/agent-roster-collective/roles/ml-eval-lead/AGENT.md +19 -0
  94. package/orgs/agent-roster-collective/roles/ml-eval-metric/AGENT.md +19 -0
  95. package/orgs/agent-roster-collective/roles/performance-lead/AGENT.md +19 -0
  96. package/orgs/agent-roster-collective/roles/performance-load-tester/AGENT.md +19 -0
  97. package/orgs/agent-roster-collective/roles/performance-profiler/AGENT.md +19 -0
  98. package/orgs/agent-roster-collective/roles/product-discovery-interviewer/AGENT.md +19 -0
  99. package/orgs/agent-roster-collective/roles/product-discovery-lead/AGENT.md +19 -0
  100. package/orgs/agent-roster-collective/roles/product-discovery-skeptic/AGENT.md +19 -0
  101. package/orgs/agent-roster-collective/roles/qa-regression-case-writer/AGENT.md +19 -0
  102. package/orgs/agent-roster-collective/roles/qa-regression-flake-hunter/AGENT.md +19 -0
  103. package/orgs/agent-roster-collective/roles/qa-regression-lead/AGENT.md +19 -0
  104. package/orgs/agent-roster-collective/roles/recruiting-lead/AGENT.md +19 -0
  105. package/orgs/agent-roster-collective/roles/recruiting-scheduler/AGENT.md +19 -0
  106. package/orgs/agent-roster-collective/roles/recruiting-screener/AGENT.md +19 -0
  107. package/orgs/agent-roster-collective/roles/release-manager-changelog/AGENT.md +19 -0
  108. package/orgs/agent-roster-collective/roles/release-manager-lead/AGENT.md +19 -0
  109. package/orgs/agent-roster-collective/roles/release-manager-rollback/AGENT.md +19 -0
  110. package/orgs/agent-roster-collective/roles/security-audit-code-auditor/AGENT.md +19 -0
  111. package/orgs/agent-roster-collective/roles/security-audit-lead/AGENT.md +19 -0
  112. package/orgs/agent-roster-collective/roles/security-audit-threat-modeler/AGENT.md +19 -0
  113. package/orgs/agent-roster-collective/roles/sre-oncall-capacity/AGENT.md +19 -0
  114. package/orgs/agent-roster-collective/roles/sre-oncall-lead/AGENT.md +19 -0
  115. package/orgs/agent-roster-collective/roles/sre-oncall-runbook/AGENT.md +19 -0
  116. package/orgs/agent-roster-collective/roles/support-triage-classifier/AGENT.md +19 -0
  117. package/orgs/agent-roster-collective/roles/support-triage-lead/AGENT.md +19 -0
  118. package/orgs/agent-roster-collective/roles/support-triage-responder/AGENT.md +19 -0
  119. package/orgs/agent-roster-collective/rosters/api-design/roster.yaml +26 -0
  120. package/orgs/agent-roster-collective/rosters/content-ops/roster.yaml +25 -0
  121. package/orgs/agent-roster-collective/rosters/contract-review/roster.yaml +25 -0
  122. package/orgs/agent-roster-collective/rosters/data-quality/roster.yaml +26 -0
  123. package/orgs/agent-roster-collective/rosters/db-migration/roster.yaml +26 -0
  124. package/orgs/agent-roster-collective/rosters/docs-writer/roster.yaml +25 -0
  125. package/orgs/agent-roster-collective/rosters/finance-recon/roster.yaml +25 -0
  126. package/orgs/agent-roster-collective/rosters/frontend-ui/roster.yaml +26 -0
  127. package/orgs/agent-roster-collective/rosters/i18n-l10n/roster.yaml +26 -0
  128. package/orgs/agent-roster-collective/rosters/incident-response/roster.yaml +26 -0
  129. package/orgs/agent-roster-collective/rosters/literature-review/roster.yaml +25 -0
  130. package/orgs/agent-roster-collective/rosters/market-research/roster.yaml +25 -0
  131. package/orgs/agent-roster-collective/rosters/ml-eval/roster.yaml +25 -0
  132. package/orgs/agent-roster-collective/rosters/performance/roster.yaml +25 -0
  133. package/orgs/agent-roster-collective/rosters/product-discovery/roster.yaml +25 -0
  134. package/orgs/agent-roster-collective/rosters/qa-regression/roster.yaml +26 -0
  135. package/orgs/agent-roster-collective/rosters/recruiting/roster.yaml +25 -0
  136. package/orgs/agent-roster-collective/rosters/release-manager/roster.yaml +25 -0
  137. package/orgs/agent-roster-collective/rosters/security-audit/roster.yaml +30 -0
  138. package/orgs/agent-roster-collective/rosters/sre-oncall/roster.yaml +26 -0
  139. package/orgs/agent-roster-collective/rosters/support-triage/roster.yaml +25 -0
  140. package/package.json +3 -1
  141. package/schema/compiled.v1.schema.json +391 -0
  142. package/schema/role.v1.schema.json +240 -0
  143. package/schema/roster.v2.schema.json +437 -0
  144. package/examples/core-review/roster.yaml +0 -82
  145. package/examples/research/roster.yaml +0 -42
  146. package/orgs/agent-roster-collective/api-design/roster.yaml +0 -67
  147. package/orgs/agent-roster-collective/content-ops/roster.yaml +0 -55
  148. package/orgs/agent-roster-collective/contract-review/roster.yaml +0 -58
  149. package/orgs/agent-roster-collective/data-quality/roster.yaml +0 -64
  150. package/orgs/agent-roster-collective/db-migration/roster.yaml +0 -64
  151. package/orgs/agent-roster-collective/docs-writer/roster.yaml +0 -59
  152. package/orgs/agent-roster-collective/finance-recon/roster.yaml +0 -63
  153. package/orgs/agent-roster-collective/frontend-ui/roster.yaml +0 -60
  154. package/orgs/agent-roster-collective/i18n-l10n/roster.yaml +0 -60
  155. package/orgs/agent-roster-collective/incident-response/roster.yaml +0 -65
  156. package/orgs/agent-roster-collective/literature-review/roster.yaml +0 -61
  157. package/orgs/agent-roster-collective/market-research/roster.yaml +0 -60
  158. package/orgs/agent-roster-collective/ml-eval/roster.yaml +0 -63
  159. package/orgs/agent-roster-collective/performance/roster.yaml +0 -63
  160. package/orgs/agent-roster-collective/product-discovery/roster.yaml +0 -55
  161. package/orgs/agent-roster-collective/qa-regression/roster.yaml +0 -64
  162. package/orgs/agent-roster-collective/recruiting/roster.yaml +0 -58
  163. package/orgs/agent-roster-collective/release-manager/roster.yaml +0 -59
  164. package/orgs/agent-roster-collective/security-audit/roster.yaml +0 -65
  165. package/orgs/agent-roster-collective/sre-oncall/roster.yaml +0 -60
  166. package/orgs/agent-roster-collective/support-triage/roster.yaml +0 -58
  167. /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,6 @@
1
+ ## 检查清单
2
+
3
+ 1. 边界:空值、空数组、零、负数、超长输入。
4
+ 2. 错误:失败时调用方能不能分辨「没数据」与「坏了」。
5
+ 3. 并发:有没有共享可变状态;重入会不会踩同一份缓存。
6
+ 4. 契约:改了返回形状就要在同一次改动里改所有调用点。
@@ -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 validated = parsed.ok ? validateRoster(parsed.value, { file: result.file }) : null;
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,