helloagents 3.0.33 → 3.0.35

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 (57) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/.codex-plugin/plugin.json +3 -4
  3. package/README.md +70 -71
  4. package/README_CN.md +70 -71
  5. package/bootstrap-lite.md +9 -11
  6. package/bootstrap.md +21 -23
  7. package/gemini-extension.json +1 -1
  8. package/install.ps1 +21 -3
  9. package/install.sh +19 -2
  10. package/package.json +2 -2
  11. package/scripts/capability-registry.mjs +5 -3
  12. package/scripts/cli-doctor-codex.mjs +150 -1
  13. package/scripts/cli-doctor-render.mjs +2 -1
  14. package/scripts/cli-lifecycle-hosts.mjs +76 -34
  15. package/scripts/cli-lifecycle.mjs +50 -15
  16. package/scripts/cli-messages.mjs +5 -5
  17. package/scripts/delivery-gate-messages.mjs +5 -4
  18. package/scripts/delivery-gate.mjs +11 -22
  19. package/scripts/guard.mjs +1 -1
  20. package/scripts/notify-closeout.mjs +61 -22
  21. package/scripts/notify-context.mjs +5 -5
  22. package/scripts/notify-route.mjs +1 -1
  23. package/scripts/notify.mjs +2 -2
  24. package/scripts/plan-contract.mjs +10 -14
  25. package/scripts/project-session-cleanup.mjs +45 -31
  26. package/scripts/qa-review-state.mjs +313 -0
  27. package/scripts/ralph-loop.mjs +32 -13
  28. package/scripts/runtime-scope.mjs +1 -3
  29. package/scripts/session-capsule.mjs +51 -13
  30. package/scripts/state-document.mjs +77 -0
  31. package/scripts/workflow-core.mjs +13 -19
  32. package/scripts/workflow-plan-files.mjs +1 -1
  33. package/scripts/workflow-recommendation.mjs +55 -67
  34. package/scripts/workflow-state.mjs +8 -8
  35. package/skills/commands/auto/SKILL.md +12 -12
  36. package/skills/commands/build/SKILL.md +9 -10
  37. package/skills/commands/commit/SKILL.md +1 -1
  38. package/skills/commands/help/SKILL.md +11 -13
  39. package/skills/commands/init/SKILL.md +18 -9
  40. package/skills/commands/loop/SKILL.md +70 -96
  41. package/skills/commands/plan/SKILL.md +7 -8
  42. package/skills/commands/prd/SKILL.md +3 -3
  43. package/skills/commands/qa/SKILL.md +49 -0
  44. package/skills/hello-ui/SKILL.md +3 -3
  45. package/skills/helloagents/SKILL.md +11 -14
  46. package/skills/qa-review/SKILL.md +92 -0
  47. package/templates/plans/contract.json +4 -7
  48. package/templates/plans/plan.md +1 -1
  49. package/templates/plans/tasks.md +1 -1
  50. package/templates/verify.yaml +1 -1
  51. package/scripts/review-state.mjs +0 -193
  52. package/scripts/verify-state.mjs +0 -175
  53. package/skills/commands/global/SKILL.md +0 -71
  54. package/skills/commands/verify/SKILL.md +0 -46
  55. package/skills/commands/wiki/SKILL.md +0 -57
  56. package/skills/hello-review/SKILL.md +0 -42
  57. package/skills/hello-verify/SKILL.md +0 -144
@@ -20,6 +20,7 @@ function describeStateLabel(state) {
20
20
  }
21
21
  return '当前会话的状态文件'
22
22
  }
23
+
23
24
  export function classifyPlan(plan) {
24
25
  if (!plan) {
25
26
  return {
@@ -64,24 +65,14 @@ export function classifyPlan(plan) {
64
65
  }
65
66
  }
66
67
 
67
- export function determineVerifyMode(plan) {
68
+ export function determineQaMode(plan) {
68
69
  if (!plan) return null
69
70
 
70
71
  if (plan.contractIssues.length > 0) {
71
72
  return {
72
73
  mode: 'metadata-first',
73
- reason: '方案包缺少可信的结构化契约',
74
- guidance: '验证分流:当前还不适合直接进入 reviewer / tester;先回到 ~plan / ~prd 补齐 `contract.json`,明确 `verifyMode`、`reviewerFocus` `testerFocus`。',
75
- }
76
- }
77
-
78
- if (plan.contract?.verifyMode === 'review-first') {
79
- const reviewerFocus = plan.contract.reviewerFocus.join(';')
80
- const testerFocus = plan.contract.testerFocus.join(';')
81
- return {
82
- mode: 'review-first',
83
- reason: '方案契约已明确要求审查优先',
84
- guidance: `验证分流:当前更适合审查优先;先执行 reviewer / hello-review 范围审查,再交给 tester / hello-verify 跑完整验证。${reviewerFocus ? ` reviewer 重点:${reviewerFocus}。` : ''}${testerFocus ? ` tester 重点:${testerFocus}。` : ''}`.trim(),
74
+ reason: '方案包缺少可信的结构化 QA 契约',
75
+ guidance: '质量闭环:当前还不适合直接进入 ~qa;先回到 ~plan / ~prd 补齐 `contract.json`,明确 `qaMode` `qaFocus`。',
85
76
  }
86
77
  }
87
78
 
@@ -89,14 +80,16 @@ export function determineVerifyMode(plan) {
89
80
  return {
90
81
  mode: 'metadata-first',
91
82
  reason: 'tasks.md 仍缺少可信的任务元数据',
92
- guidance: '验证分流:当前还不适合直接进入 reviewer / tester;先补齐 tasks.md 中每个任务的“涉及文件”“完成标准”和“验证方式”。',
83
+ guidance: '质量闭环:当前还不适合直接进入 ~qa;先补齐 tasks.md 中每个任务的“涉及文件”“完成标准”和“验证方式”。',
93
84
  }
94
85
  }
95
86
 
87
+ const qaMode = plan.contract?.qaMode === 'deep' ? 'deep' : 'standard'
88
+ const qaFocus = (plan.contract?.qaFocus || []).join(';')
96
89
  return {
97
- mode: 'test-first',
98
- reason: '方案契约已明确验证主路径,且任务契约已完整',
99
- guidance: `验证分流:当前更适合测试优先;先执行 tester / hello-verify 跑完整验证,再针对失败点或关键边界补充 hello-review。${plan.contract?.testerFocus?.length ? ` tester 重点:${plan.contract.testerFocus.join(';')}。` : ''}`.trim(),
90
+ mode: qaMode,
91
+ reason: qaMode === 'deep' ? '方案契约已明确要求深度 qa-review' : '方案契约已明确要求统一 qa-review',
92
+ guidance: `质量闭环:当前统一使用 qa-review;先完成阻断性质量审查,再运行验证命令、修复失败项并留下最新 qa-review 证据。${qaFocus ? ` QA 重点:${qaFocus}。` : ''}`.trim(),
100
93
  }
101
94
  }
102
95
 
@@ -131,12 +124,13 @@ function collectStateSyncIssues(snapshot) {
131
124
  return issues
132
125
  }
133
126
 
134
- export function buildVerifyModeHintFromSnapshot(snapshot) {
127
+ export function buildQaFocusHintFromSnapshot(snapshot) {
135
128
  const plan = getTargetPlans(snapshot)[0]
136
129
  if (!plan) return ''
137
130
  if (!plan.planSections['风险与验证'] && plan.taskSummary.total === 0) return ''
138
- return determineVerifyMode(plan)?.guidance || ''
131
+ return determineQaMode(plan)?.guidance || ''
139
132
  }
133
+
140
134
  export function buildStateSyncHintFromSnapshot(snapshot) {
141
135
  const issues = collectStateSyncIssues(snapshot)
142
136
  if (issues.length === 0) return ''
@@ -18,7 +18,7 @@ const PLAN_TEMPLATE_MARKERS = {
18
18
  /# \{项目\/功能名称\} — 实施规划/,
19
19
  /\[本次要解决的问题、范围边界、验收目标\]/,
20
20
  /\[关键决策及理由\]/,
21
- /\[功能完成时必须为真的条件、关键验收点、reviewer \/ tester 关注边界\]/,
21
+ /\[功能完成时必须为真的条件、关键验收点、qaMode qaFocus\]/,
22
22
  ],
23
23
  'tasks.md': [
24
24
  /# \{项目\/功能名称\} — 任务分解/,
@@ -1,23 +1,21 @@
1
1
  import { getCloseoutEvidenceStatus } from './closeout-state.mjs'
2
2
  import { getAdvisorEvidenceStatus } from './advisor-state.mjs'
3
3
  import { getAdvisorRequirement, getVisualValidationRequirement } from './plan-contract.mjs'
4
- import { getReviewEvidenceStatus } from './review-state.mjs'
4
+ import { getQaReviewEvidenceStatus } from './qa-review-state.mjs'
5
5
  import { getVisualEvidenceStatus } from './visual-state.mjs'
6
- import { getVerifyEvidenceStatus } from './verify-state.mjs'
7
6
  import {
8
7
  classifyPlan,
9
- determineVerifyMode,
8
+ determineQaMode,
10
9
  getTargetPlans,
11
10
  normalizeTaskFile,
12
11
  } from './workflow-core.mjs'
13
12
 
14
13
  function getClosedPlanEvidenceStatus(cwd, plan, options = {}) {
15
- const verifyMode = determineVerifyMode(plan)
14
+ const qaMode = determineQaMode(plan)
16
15
  const advisorRequirement = getAdvisorRequirement(plan.contract)
17
16
  const visualRequirement = getVisualValidationRequirement(plan.contract)
18
- const verificationStatus = getVerifyEvidenceStatus(cwd, options)
19
- const reviewStatus = getReviewEvidenceStatus(cwd, {
20
- required: verifyMode?.mode === 'review-first',
17
+ const qaStatus = getQaReviewEvidenceStatus(cwd, {
18
+ required: qaMode?.mode !== 'metadata-first',
21
19
  ...options,
22
20
  })
23
21
  const advisorStatus = getAdvisorEvidenceStatus(cwd, {
@@ -31,26 +29,23 @@ function getClosedPlanEvidenceStatus(cwd, plan, options = {}) {
31
29
  states: visualRequirement.states,
32
30
  ...options,
33
31
  })
34
- const verifyReady = !verificationStatus.required || verificationStatus.status === 'valid'
35
- const reviewReady = !reviewStatus.required || reviewStatus.status === 'valid'
32
+ const qaReady = !qaStatus.required || qaStatus.status === 'valid'
36
33
  const advisorReady = !advisorStatus.required || advisorStatus.status === 'valid'
37
34
  const visualReady = !visualStatus.required || visualStatus.status === 'valid'
38
35
  const closeoutStatus = getCloseoutEvidenceStatus(cwd, {
39
- required: verifyReady && reviewReady && advisorReady && visualReady,
36
+ required: qaReady && advisorReady && visualReady,
40
37
  ...options,
41
38
  })
42
39
 
43
40
  return {
44
- verifyMode,
41
+ qaMode,
45
42
  advisorRequirement,
46
43
  visualRequirement,
47
- verificationStatus,
48
- reviewStatus,
44
+ qaStatus,
49
45
  advisorStatus,
50
46
  visualStatus,
51
47
  closeoutStatus,
52
- verifyReady,
53
- reviewReady,
48
+ qaReady,
54
49
  advisorReady,
55
50
  visualReady,
56
51
  closeoutReady: !closeoutStatus.required || closeoutStatus.status === 'valid',
@@ -63,7 +58,7 @@ function buildConsolidateAction(recommendation) {
63
58
  phase: 'consolidate',
64
59
  mode: recommendation.mode,
65
60
  routeHint: recommendation.guidance,
66
- gateHint: '交付把关:审查与验证证据已满足;先写当前会话 `artifacts/closeout.json` 记录需求覆盖与交付清单,再更新 `state_path` 并归档后才可交付。',
61
+ gateHint: '交付把关:qa-review 与附加证据已满足;先写当前会话 `artifacts/closeout.json` 记录需求覆盖与交付清单,再更新 `state_path` 并归档后才可交付。',
67
62
  }
68
63
  }
69
64
 
@@ -75,8 +70,8 @@ function buildConsolidateAction(recommendation) {
75
70
  }
76
71
  }
77
72
 
78
- function buildVerifyAction(plan, verifyMode) {
79
- if (!verifyMode) return null
73
+ function buildQaAction(plan, qaMode) {
74
+ if (!qaMode) return null
80
75
  const advisorRequirement = getAdvisorRequirement(plan.contract)
81
76
  const visualRequirement = getVisualValidationRequirement(plan.contract)
82
77
  const extraChecks = []
@@ -87,30 +82,23 @@ function buildVerifyAction(plan, verifyMode) {
87
82
  extraChecks.push('完成视觉验收并写入当前会话 `artifacts/visual.json`')
88
83
  }
89
84
  const gateSuffix = extraChecks.length > 0 ? ` ${extraChecks.join(',')},再进入 CONSOLIDATE。` : ''
90
- if (verifyMode.mode === 'review-first') {
91
- return {
92
- phase: 'verify',
93
- mode: verifyMode.mode,
94
- routeHint: verifyMode.guidance,
95
- gateHint: `交付把关:进入 CONSOLIDATE 前,必须先完成 reviewer / hello-review 范围审查,再完成 tester / hello-verify 全量验证,并留下最新验证证据;两步都通过后才可交付。${gateSuffix}`.trim(),
96
- }
97
- }
98
- if (verifyMode.mode === 'metadata-first') {
85
+
86
+ if (qaMode.mode === 'metadata-first') {
99
87
  return {
100
- phase: 'verify',
101
- mode: verifyMode.mode,
102
- routeHint: verifyMode.guidance,
88
+ phase: 'plan',
89
+ mode: qaMode.mode,
90
+ routeHint: qaMode.guidance,
103
91
  gateHint: plan.contractIssues.length > 0
104
- ? '交付把关:当前还不能进入 CONSOLIDATE;先补齐 `contract.json` 中的 `verifyMode`、`reviewerFocus`、`testerFocus`,再进入 reviewer / tester。'
105
- : '交付把关:当前还不能进入 CONSOLIDATE;先补齐 tasks.md 中每个任务的“涉及文件”“完成标准”和“验证方式”,再进入 reviewer / tester。',
92
+ ? '交付把关:当前还不能进入 CONSOLIDATE;先补齐 `contract.json` 中的 `qaMode` `qaFocus`,再进入 ~qa。'
93
+ : '交付把关:当前还不能进入 CONSOLIDATE;先补齐 tasks.md 中每个任务的“涉及文件”“完成标准”和“验证方式”,再进入 ~qa。',
106
94
  }
107
95
  }
108
96
 
109
97
  return {
110
- phase: 'verify',
111
- mode: verifyMode.mode,
112
- routeHint: verifyMode.guidance,
113
- gateHint: `交付把关:进入 CONSOLIDATE 前,先完成 tester / hello-verify 全量验证并留下最新验证证据,再针对失败点或关键边界补充 hello-review;确认通过后才可交付。${gateSuffix}`.trim(),
98
+ phase: 'qa',
99
+ mode: qaMode.mode,
100
+ routeHint: qaMode.guidance,
101
+ gateHint: `交付把关:进入 CONSOLIDATE 前,必须完成 qa-review 全量质量闭环,并留下最新 qa-review 证据。${gateSuffix}`.trim(),
114
102
  }
115
103
  }
116
104
 
@@ -122,19 +110,19 @@ export function buildDeliveryActionFromSnapshot(snapshot, cwd, recommendation =
122
110
  }
123
111
 
124
112
  const plan = getTargetPlans(snapshot)[0]
125
- if (recommendation.nextCommand === 'verify' && plan) {
126
- return buildVerifyAction(plan, determineVerifyMode(plan))
113
+ if (recommendation.nextCommand === 'qa' && plan) {
114
+ return buildQaAction(plan, determineQaMode(plan))
127
115
  }
128
116
  if (recommendation.nextCommand === 'build') {
129
117
  return {
130
118
  phase: 'build',
131
- gateHint: '交付把关:当前还不能报告完成;先回到 ~build 完成剩余任务,再进入 ~verify。',
119
+ gateHint: '交付把关:当前还不能报告完成;先回到 ~build 完成剩余任务,再进入 ~qa。',
132
120
  }
133
121
  }
134
122
  if (recommendation.nextCommand === 'plan') {
135
123
  return {
136
124
  phase: 'plan',
137
- gateHint: '交付把关:当前还不能报告完成;先回到 ~plan 修复或补齐当前方案包,再进入 ~build / ~verify。',
125
+ gateHint: '交付把关:当前还不能报告完成;先回到 ~plan 修复或补齐当前方案包,再进入 ~build / ~qa。',
138
126
  }
139
127
  }
140
128
 
@@ -152,13 +140,13 @@ function buildPlanRecommendation(scopeLabel, plan, classification) {
152
140
  status: classification.status,
153
141
  details: classification.details,
154
142
  nextCommand: 'plan',
155
- nextPath: '~plan -> ~build / ~verify',
143
+ nextPath: '~plan -> ~build / ~qa',
156
144
  summary: classification.status === 'incomplete'
157
145
  ? `${scopeLabel} "${plan.planName}" 仍不完整(${classification.details.join(';')})。`
158
146
  : `${scopeLabel} "${plan.planName}" 尚未形成可执行任务清单。`,
159
147
  guidance: classification.status === 'incomplete'
160
- ? '优先先走 ~plan 修复或补全当前方案包,再进入实现或验证;不要把不完整的结构化产物直接当成可交付依据。'
161
- : '先回到 ~plan 补齐 tasks.md 的原子任务,再进入实现、验证或收尾。',
148
+ ? '优先先走 ~plan 修复或补全当前方案包,再进入实现或 qa-review;不要把不完整的结构化产物直接当成可交付依据。'
149
+ : '先回到 ~plan 补齐 tasks.md 的原子任务,再进入实现、qa-review 或收尾。',
162
150
  }
163
151
  }
164
152
 
@@ -169,23 +157,23 @@ function buildInProgressRecommendation(scopeLabel, plan, classification) {
169
157
  status: classification.status,
170
158
  details: classification.details,
171
159
  nextCommand: 'build',
172
- nextPath: '~build -> ~verify',
160
+ nextPath: '~build -> ~qa',
173
161
  summary: `${scopeLabel} "${plan.planName}" 仍有 ${classification.openCount} 个未完成任务。`,
174
- guidance: '若用户是在继续当前功能、落实既有方案、或让你“继续做完”,优先复用现有 requirements.md / plan.md / tasks.md 进入 ~build;完成当前实现后再进入 ~verify。除非用户明确要求重规划或现有方案已失效,不要重新回到 ~idea。',
162
+ guidance: '若用户是在继续当前功能、落实既有方案、或让你“继续做完”,优先复用现有 requirements.md / plan.md / tasks.md 进入 ~build;完成当前实现后再进入 ~qa。除非用户明确要求重规划或现有方案已失效,不要重新回到 ~idea。',
175
163
  }
176
164
  }
177
165
 
178
166
  function buildClosedRecommendation(scopeLabel, plan, cwd, options = {}) {
179
167
  const closedPlanEvidence = getClosedPlanEvidenceStatus(cwd, plan, options)
180
- if (closedPlanEvidence.verifyMode?.mode === 'metadata-first') {
168
+ if (closedPlanEvidence.qaMode?.mode === 'metadata-first') {
181
169
  return {
182
170
  scopeLabel,
183
171
  plan,
184
172
  status: 'closed',
185
- nextCommand: 'verify',
186
- nextPath: '~verify -> CONSOLIDATE',
187
- summary: `${scopeLabel} "${plan.planName}" 的任务已全部闭合,但验证契约仍未结构化。`,
188
- guidance: closedPlanEvidence.verifyMode.guidance,
173
+ nextCommand: 'plan',
174
+ nextPath: '~plan -> ~qa',
175
+ summary: `${scopeLabel} "${plan.planName}" 的任务已全部闭合,但 QA 契约仍未结构化。`,
176
+ guidance: closedPlanEvidence.qaMode.guidance,
189
177
  }
190
178
  }
191
179
 
@@ -199,10 +187,10 @@ function buildClosedRecommendation(scopeLabel, plan, cwd, options = {}) {
199
187
  scopeLabel,
200
188
  plan,
201
189
  status: 'closed',
202
- nextCommand: 'verify',
203
- nextPath: '~verify -> CONSOLIDATE',
190
+ nextCommand: 'qa',
191
+ nextPath: '~qa -> CONSOLIDATE',
204
192
  summary: `${scopeLabel} "${plan.planName}" 的任务已闭合,但当前 UI 契约仍要求独立 advisor 复查与视觉验收。`,
205
- guidance: '先在 ~verify 阶段完成独立 advisor / style advisor 复查,并写入当前会话 `artifacts/advisor.json`;再完成视觉验收并写入当前会话 `artifacts/visual.json`,记录 reason、tooling、screensChecked、statesChecked、status 与 summary;两项都通过后再进入 CONSOLIDATE。',
193
+ guidance: '先在 ~qa 阶段完成独立 advisor / style advisor 复查,并写入当前会话 `artifacts/advisor.json`;再完成视觉验收并写入当前会话 `artifacts/visual.json`,记录 reason、tooling、screensChecked、statesChecked、status 与 summary;两项都通过后再进入 CONSOLIDATE。',
206
194
  }
207
195
  }
208
196
 
@@ -211,10 +199,10 @@ function buildClosedRecommendation(scopeLabel, plan, cwd, options = {}) {
211
199
  scopeLabel,
212
200
  plan,
213
201
  status: 'closed',
214
- nextCommand: 'verify',
215
- nextPath: '~verify -> CONSOLIDATE',
202
+ nextCommand: 'qa',
203
+ nextPath: '~qa -> CONSOLIDATE',
216
204
  summary: `${scopeLabel} "${plan.planName}" 的任务已闭合,但当前契约仍要求独立 advisor 复查。`,
217
- guidance: '先在 ~verify 阶段完成独立 advisor / style advisor 复查,并写入当前会话 `artifacts/advisor.json` 记录复查原因、focus、来源与结论;advisor 通过后再进入 CONSOLIDATE。',
205
+ guidance: '先在 ~qa 阶段完成独立 advisor / style advisor 复查,并写入当前会话 `artifacts/advisor.json` 记录复查原因、focus、来源与结论;advisor 通过后再进入 CONSOLIDATE。',
218
206
  }
219
207
  }
220
208
 
@@ -223,25 +211,25 @@ function buildClosedRecommendation(scopeLabel, plan, cwd, options = {}) {
223
211
  scopeLabel,
224
212
  plan,
225
213
  status: 'closed',
226
- nextCommand: 'verify',
227
- nextPath: '~verify -> CONSOLIDATE',
214
+ nextCommand: 'qa',
215
+ nextPath: '~qa -> CONSOLIDATE',
228
216
  summary: `${scopeLabel} "${plan.planName}" 的任务已闭合,但当前 UI 契约仍要求视觉验收。`,
229
- guidance: '先在 ~verify 阶段完成视觉验收,并写入当前会话 `artifacts/visual.json` 记录 reason、tooling、screensChecked、statesChecked、status 与 summary;视觉验收通过后再进入 CONSOLIDATE。',
217
+ guidance: '先在 ~qa 阶段完成视觉验收,并写入当前会话 `artifacts/visual.json` 记录 reason、tooling、screensChecked、statesChecked、status 与 summary;视觉验收通过后再进入 CONSOLIDATE。',
230
218
  }
231
219
  }
232
220
 
233
- if (closedPlanEvidence.verifyReady && closedPlanEvidence.reviewReady && closedPlanEvidence.advisorReady && closedPlanEvidence.visualReady) {
221
+ if (closedPlanEvidence.qaReady && closedPlanEvidence.advisorReady && closedPlanEvidence.visualReady) {
234
222
  return {
235
223
  scopeLabel,
236
224
  plan,
237
225
  status: 'closed',
238
226
  stage: 'consolidate',
239
227
  mode: closedPlanEvidence.closeoutReady ? 'ready' : 'closeout-pending',
240
- nextCommand: 'verify',
228
+ nextCommand: 'qa',
241
229
  nextPath: 'CONSOLIDATE',
242
230
  summary: closedPlanEvidence.closeoutReady
243
231
  ? `${scopeLabel} "${plan.planName}" 的任务与交付证据已闭合。`
244
- : `${scopeLabel} "${plan.planName}" 的任务、审查与验证已闭合。`,
232
+ : `${scopeLabel} "${plan.planName}" 的任务与 qa-review 已闭合。`,
245
233
  guidance: closedPlanEvidence.closeoutReady
246
234
  ? '当前进入 CONSOLIDATE:更新 `state_path`、知识文件并归档方案后即可交付;不要无故重开新的方案包或重新跑一遍无关验证。'
247
235
  : '当前进入 CONSOLIDATE:先写当前会话 `artifacts/closeout.json` 记录需求覆盖与交付清单,再更新 `state_path` 并归档后交付。',
@@ -252,10 +240,10 @@ function buildClosedRecommendation(scopeLabel, plan, cwd, options = {}) {
252
240
  scopeLabel,
253
241
  plan,
254
242
  status: 'closed',
255
- nextCommand: 'verify',
256
- nextPath: '~verify -> CONSOLIDATE',
243
+ nextCommand: 'qa',
244
+ nextPath: '~qa -> CONSOLIDATE',
257
245
  summary: `${scopeLabel} "${plan.planName}" 的任务已全部闭合。`,
258
- guidance: '若用户是在做收尾、验真、复查或准备交付,优先走 ~verify 或 CONSOLIDATE;不要无故重开新的方案包。',
246
+ guidance: '若用户是在做收尾、验真、复查或准备交付,优先走 ~qa 或 CONSOLIDATE;不要无故重开新的方案包。',
259
247
  }
260
248
  }
261
249
 
@@ -323,9 +311,9 @@ export function buildOrchestrationHintFromSnapshot(snapshot, cwd, recommendation
323
311
  if (recommendation.nextCommand === 'build') {
324
312
  return buildBuildOrchestrationHint(plan)
325
313
  }
326
- if (recommendation.nextCommand === 'verify' && plan.taskSummary.total >= 1) {
314
+ if (recommendation.nextCommand === 'qa' && plan.taskSummary.total >= 1) {
327
315
  const action = buildDeliveryActionFromSnapshot(snapshot, cwd, recommendation)
328
- if (action?.phase === 'verify') {
316
+ if (action?.phase === 'qa') {
329
317
  return `编排提示:当前已进入收尾;${[action.routeHint, action.gateHint].filter(Boolean).join(' ')}`
330
318
  }
331
319
  }
@@ -1,10 +1,10 @@
1
1
  import { basename } from 'node:path'
2
2
 
3
3
  import {
4
+ buildQaFocusHintFromSnapshot,
4
5
  buildStateRoleHintFromSnapshot,
5
6
  buildStateSyncHintFromSnapshot,
6
7
  buildUiContractHint,
7
- buildVerifyModeHintFromSnapshot,
8
8
  getWorkflowSnapshot,
9
9
  readStateSnapshot,
10
10
  listPlanPackages,
@@ -54,14 +54,14 @@ export function buildWorkflowRouteHint(cwd, options = {}) {
54
54
  return `${recommendation.summary} 当前应执行 ~${recommendation.nextCommand}。执行路径:${recommendation.nextPath}。${recommendation.guidance}${suffix ? ` ${suffix}` : ''}`
55
55
  }
56
56
 
57
- function buildCommandRouteMessage(skillName, recommendation, verifyModeHint) {
57
+ function buildCommandRouteMessage(skillName, recommendation, qaFocusHint) {
58
58
  if (skillName === 'auto') {
59
59
  return recommendation.stage === 'consolidate'
60
60
  ? `当前工作流约束:${recommendation.summary} 本次 ~auto 应直接完成当前收尾。${recommendation.guidance} 未命中阻塞判定前不要停下,也不要把收尾动作写成“下一步建议”。`
61
61
  : `当前工作流约束:${recommendation.summary} 本次 ~auto 的执行主路径:${recommendation.nextPath}。${recommendation.guidance} 命中主路径后继续执行后续阶段;未触发阻塞判定前不要停下,也不要把阶段结果写成“下一步建议”。`
62
62
  }
63
63
  if (skillName === 'loop') {
64
- return `当前工作流约束:用户已显式使用 ~loop,应按 ~loop 的循环规则直接执行。现有工作流只作上下文参考:${recommendation.summary} ${recommendation.guidance} 除非达到迭代上限、达成目标或命中阻塞判定,否则不要停下,也不要把单轮结果写成“下一步建议”。`
64
+ return `当前工作流约束:用户已显式使用 ~loop,应把它视为长任务入口,默认按“/goal -> ~auto -> ~qa”直接推进。现有工作流只作上下文参考:${recommendation.summary} ${recommendation.guidance} 若当前宿主不支持 /goal,则按 ~auto 持续推进,并在交付前强制进入 ~qa。未命中阻塞判定前不要停下,也不要把阶段结果写成“下一步建议”。`
65
65
  }
66
66
  if (skillName === 'plan') {
67
67
  if (recommendation.stage === 'consolidate') {
@@ -79,13 +79,13 @@ function buildCommandRouteMessage(skillName, recommendation, verifyModeHint) {
79
79
  ? `当前工作流约束:${recommendation.summary} 当前应执行 ~build。${recommendation.guidance}`
80
80
  : `当前工作流约束:${recommendation.summary} 当前不该继续 ~build;先按 ~${recommendation.nextCommand} 处理。只有在用户明确提出新增实现范围时,才继续 ~build。`
81
81
  }
82
- if (skillName === 'verify') {
82
+ if (skillName === 'qa') {
83
83
  if (recommendation.stage === 'consolidate') {
84
84
  return `当前工作流约束:${recommendation.summary} 当前应直接进入 CONSOLIDATE。${recommendation.guidance}`
85
85
  }
86
- return recommendation.nextCommand === 'verify'
87
- ? `当前工作流约束:${recommendation.summary} 当前应执行 ~verify。${recommendation.guidance}`
88
- : `当前工作流约束:${recommendation.summary} 当前不该把 ~verify 当成越级入口;先按 ~${recommendation.nextCommand} 处理。即使执行 ~verify,也不能越过当前工作流边界。${verifyModeHint ? ` 若本次仅做阶段内审查或验真,${verifyModeHint}` : ''}`
86
+ return recommendation.nextCommand === 'qa'
87
+ ? `当前工作流约束:${recommendation.summary} 当前应执行 ~qa。${recommendation.guidance}`
88
+ : `当前工作流约束:${recommendation.summary} 当前不该把 ~qa 当成越级入口;先按 ~${recommendation.nextCommand} 处理。即使执行 ~qa,也不能越过当前工作流边界。${qaFocusHint ? ` 若本次只是阶段内收尾,${qaFocusHint}` : ''}`
89
89
  }
90
90
  return `当前工作流约束:${recommendation.summary} 当前应执行 ~${recommendation.nextCommand}。${recommendation.guidance}`
91
91
  }
@@ -104,7 +104,7 @@ export function buildCommandRouteHint(skillName, cwd, options = {}) {
104
104
  return contextHints.join(' ')
105
105
  }
106
106
 
107
- const message = buildCommandRouteMessage(skillName, recommendation, buildVerifyModeHintFromSnapshot(snapshot))
107
+ const message = buildCommandRouteMessage(skillName, recommendation, buildQaFocusHintFromSnapshot(snapshot))
108
108
  return [message, ...contextHints].join(' ')
109
109
  }
110
110
 
@@ -1,18 +1,18 @@
1
1
  ---
2
2
  name: ~auto
3
- description: 自动执行命令 — 自动选择并依次执行 ~idea / ~plan / ~build / ~verify / ~prd,默认持续推进直到交付完成(~auto 命令)
3
+ description: 自动执行命令 — 自动选择并依次执行 ~idea / ~plan / ~build / ~qa / ~prd,默认持续推进直到交付完成(~auto 命令)
4
4
  policy:
5
5
  allow_implicit_invocation: false
6
6
  ---
7
7
  Trigger: ~auto <任务描述>
8
8
 
9
- `~auto` 是自动执行命令。它根据任务类型、复杂度、风险等级与项目状态,在 `~idea`、`~plan`、`~build`、`~verify`、`~prd` 之间选择合适主路径,并连续推进。
9
+ `~auto` 是自动执行命令。它根据任务类型、复杂度、风险等级与项目状态,在 `~idea`、`~plan`、`~build`、`~qa`、`~prd` 之间选择合适主路径,并连续推进。
10
10
  `~auto` 不止做一次选路;主路径一旦确定,就按需要继续执行后续阶段,默认持续推进直到完成交付,只有命中 HelloAGENTS 阻塞判定时才停下。
11
11
 
12
12
  ## 铁律
13
13
  - 不为了“自动化”而强行走重流程
14
14
  - 复杂度与风险不足以支撑更重路径时,优先选更轻但能保证质量的路线
15
- - `T3` 高风险或不可逆操作默认不直接进入 `~build`;优先先走 `~plan` 或 `~prd`,纯审查/纯验证请求才可先进入 `~verify`
15
+ - `T3` 高风险或不可逆操作默认不直接进入 `~build`;优先先走 `~plan` 或 `~prd`,纯质量审查、验真或收尾请求才可先进入 `~qa`
16
16
  - 主路径一旦确定,立即读取对应 command skill,并在阶段完成后继续执行后续阶段,避免同一任务重复探索或重复等待
17
17
  - 选路不替代授权;涉及外部副作用或高风险不可逆操作时,仍遵守 HelloAGENTS 阻塞判定与确认规则
18
18
  - 用户显式使用 `~auto`,表示已授权在当前任务边界内沿选定主路径持续执行;若当前运行在 Codex `/goal` 下,`/goal` 只提供长程续跑与预算,`~auto` 仍按方案包、`state_path` 与验证契约推进;`~plan` / `~prd` 作为中间阶段时,不再额外询问“是否开始执行”,除非仍有真实阻塞;不得把 `🔄 下一步` 当作阶段交接或继续执行占位
@@ -25,8 +25,8 @@ Trigger: ~auto <任务描述>
25
25
  - 若当前上下文中已注入“当前工作流提示”或“当前工作流约束”,优先服从其中的推荐下一命令 / 主路径
26
26
  - 默认原则:
27
27
  - 活跃方案包不完整或缺少任务清单 → 先 `~plan`
28
- - 活跃方案包仍在执行 → 先 `~build`,完成当前实现后再 `~verify`
29
- - 活跃方案包已闭合 → 先 `~verify` 或收尾
28
+ - 活跃方案包仍在执行 → 先 `~build`,完成当前实现后再 `~qa`
29
+ - 活跃方案包已闭合 → 先 `~qa` 或收尾
30
30
  - Codex active goal 已关联方案包 → 按 `tasks.md` 未完成 AFK 项、`contract.json` 与 `state_path` 确定主路径,不把 goal 目标原文替代方案包
31
31
  - 只有当用户明确要求换方向、重做方案,或现有方案已失效时,才偏离当前推荐重新规划
32
32
 
@@ -36,7 +36,7 @@ Trigger: ~auto <任务描述>
36
36
  - 若当前上下文没有足够的注入约束,再结合以下信号补足判断:影响范围、风险等级、是否需要结构化产物、是否已有活跃方案包、用户是否只想先比较方向
37
37
  - 选路优先级:
38
38
  - 纯探索 / 点子 / 方向比较 → `~idea`
39
- - 明确要求验证 / 审查 / 跑检查 → `~verify`
39
+ - 明确要求质量审查 / 验真 / 跑检查 / 收尾 → `~qa`
40
40
  - 0 到 1 / 产品级 / 多维规格 → `~prd`
41
41
  - 多文件功能 / 架构变更 / 新项目规划 → `~plan`
42
42
  - 明确修复 / 小范围实现 / 按现有方案实现 → `~build`
@@ -44,28 +44,28 @@ Trigger: ~auto <任务描述>
44
44
  ### 2. 按 Tier 校正
45
45
 
46
46
  - `T0` → 保持在 `~idea`,不创建项目文件
47
- - `T1` → 在 `~build` / `~verify` 间选择最短可交付路径
47
+ - `T1` → 在 `~build` / `~qa` 间选择最短可交付路径
48
48
  - `T2` → 需要结构化产物或范围未完全明确时优先 `~plan`
49
- - `T3` → 纯审查/验真走 `~verify`;其余默认 `~plan` 或 `~prd`,待方案与风险边界明确后再进入实现
49
+ - `T3` → 纯质量审查/验真走 `~qa`;其余默认 `~plan` 或 `~prd`,待方案与风险边界明确后再进入实现
50
50
 
51
51
  ### 3. 读取对应命令并执行主路径
52
52
 
53
53
  - 选中 `idea` → 读取 `skills/commands/idea/SKILL.md`
54
54
  - 选中 `plan` → 读取 `skills/commands/plan/SKILL.md`
55
55
  - 选中 `build` → 读取 `skills/commands/build/SKILL.md`
56
- - 选中 `verify` → 读取 `skills/commands/verify/SKILL.md`
56
+ - 选中 `qa` → 读取 `skills/commands/qa/SKILL.md`
57
57
  - 选中 `prd` → 读取 `skills/commands/prd/SKILL.md`
58
58
 
59
59
  不要额外读取未选中的 command skill。
60
60
 
61
61
  ### 4. 持续执行直到完成
62
62
 
63
- - 若主路径是 `~build` → 完成实现后继续进入 `~verify`,再进入收尾
63
+ - 若主路径是 `~build` → 完成实现后继续进入 `~qa`,再进入收尾
64
64
  - 若主路径是 `~plan` → 方案包写入后,若当前任务来自 `~auto` 且未命中阻塞判定,直接继续进入 `~build`,不要把“方案已形成”当作最终停点
65
65
  - 若主路径是 `~prd` → PRD / 任务 / 契约写入后,若当前任务来自 `~auto` 且未命中阻塞判定,按当前结果继续进入 `~build`,必要时先补一轮轻量 `~plan`
66
- - 若主路径是 `~verify` → 完成审查 / 验证 / 收尾后结束
66
+ - 若主路径是 `~qa` → 完成质量闭环 / 收尾后结束
67
67
  - 若主路径是 `~idea`,且用户本意就是探索/比较,则在探索输出后结束;若探索后已有明确方向且当前任务仍要求写文件或改代码,则继续进入 `~plan` 或 `~build`
68
- - 若 Codex active goal 的目标已满足 → 仍先完成 `~verify` 与 HelloAGENTS 收尾,再标记 goal complete;未满足时继续下一项可执行 AFK 任务
68
+ - 若 Codex active goal 的目标已满足 → 仍先完成 `~qa` 与 HelloAGENTS 收尾,再标记 goal complete;未满足时继续下一项可执行 AFK 任务
69
69
 
70
70
  ### 5. 何时允许停下
71
71
 
@@ -6,8 +6,8 @@ policy:
6
6
  ---
7
7
  Trigger: ~build [description]
8
8
 
9
- `~build` 是执行实现命令。它负责读取现有需求、方案包与项目上下文,完成实现、局部验证、修复循环,并把结果交给后续验证与收尾。
10
- 执行 `~build` 时,通用阶段边界按当前已加载的 HelloAGENTS 规则执行;本 skill 负责补充实现前定位、实现约束,以及进入 `~verify` / 收尾前的实现边界。
9
+ `~build` 是执行实现命令。它负责读取现有需求、方案包与项目上下文,完成实现、局部验证、修复循环,并把结果交给后续质量闭环与收尾。
10
+ 执行 `~build` 时,通用阶段边界按当前已加载的 HelloAGENTS 规则执行;本 skill 负责补充实现前定位、实现约束,以及进入 `~qa` / 收尾前的实现边界。
11
11
  `.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`;会话证据使用当前 `state_path` 所在目录下的 `artifacts/*.json`;若 `project_store_mode=repo-shared`,知识库、`DESIGN.md`、`verify.yaml` 与方案包按当前上下文中已注入的项目知识/方案目录解析。
12
12
 
13
13
  ## 铁律
@@ -27,7 +27,7 @@ Trigger: ~build [description]
27
27
  - `tasks.md`
28
28
  - `contract.json`
29
29
  - 实现时优先把 `tasks.md` 中每个任务的“完成标准”当作本次实现约束,不要只按任务标题猜测范围
30
- - `contract.json` 存在时,优先按其中的 `verifyMode`、`reviewerFocus`、`testerFocus` 理解后续验证边界
30
+ - `contract.json` 存在时,优先按其中的 `qaMode`、`qaFocus` 理解后续质量闭环边界
31
31
  - 若当前运行在 Codex active goal 下,按 `tasks.md` 未完成项、`contract.json` 与 `state_path` 恢复实现位置;不要自动创建新 goal,也不要把 goal 目标原文替代方案包
32
32
  - 若当前上下文中已注入“当前工作流约束”或“当前推荐下一命令”,先服从它;只有推荐仍为 `~build`,或用户明确提出新增实现范围时,才继续 `~build`
33
33
  - 其余项目知识库与相关代码文件,按 HelloAGENTS 项目上下文要求读取
@@ -53,17 +53,16 @@ Trigger: ~build [description]
53
53
  - 每次编辑后主动跑确定性检查
54
54
  - 可并行任务通过子代理执行,但不同子代理不得改同一文件
55
55
 
56
- ### 4. 验证与修复循环
56
+ ### 4. 局部验证与修复循环
57
57
 
58
- - 读取 `hello-verify` SKILL.md
59
- - 运行 lint / typecheck / test / build 等验证
58
+ - 按当前任务与 `tasks.md` 中的“验证方式”运行 lint / typecheck / test / build 等局部验证
60
59
  - 若失败,修复后重跑
61
- - 若涉及 review 场景,可按需读取 `hello-review`
60
+ - 若当前实现已接近交付,主动对照 `qaFocus` 自检本次改动是否覆盖关键风险
62
61
 
63
62
  ### 5. 交付前处理
64
63
 
65
64
  - 有方案包时,只同步本次实现直接影响的任务状态;未完成项保持打开
66
- - 当前实现已闭合、且需要进入交付或收尾时,转入 `~verify`
67
- - 若 Codex active goal 仍有未完成 AFK 任务,继续下一项可执行任务;若目标已满足,先转入 `~verify` 与 HelloAGENTS 收尾,再标记 goal complete
68
- - 状态文件、知识库、`CHANGELOG.md`、modules 文档与归档边界,按当前已加载的 HelloAGENTS 规则进入 VERIFY / CONSOLIDATE
65
+ - 当前实现已闭合、且需要进入交付或收尾时,转入 `~qa`
66
+ - 若 Codex active goal 仍有未完成 AFK 任务,继续下一项可执行任务;若目标已满足,先转入 `~qa` 与 HelloAGENTS 收尾,再标记 goal complete
67
+ - 状态文件、知识库、`CHANGELOG.md`、modules 文档与归档边界,按当前已加载的 HelloAGENTS 规则进入 QA / CONSOLIDATE
69
68
  - 不在 `~build` 内把仍未闭合的方案包整体报告为已完成
@@ -27,5 +27,5 @@ Trigger: ~commit [message]
27
27
  提交后,继续复用上方已解析的同一份设置获取 `kb_create_mode`,不要再次读取 `~/.helloagents/helloagents.json`:
28
28
  - 0 = 跳过
29
29
  - 1 = 知识库已存在时自动同步(默认)
30
- - 2 = 编码任务在知识库已存在或全局模式下自动创建或同步
30
+ - 2 = 编码任务在知识库已存在或当前项目已初始化时自动创建或同步
31
31
  同步范围与更新格式按当前已加载的 HelloAGENTS CONSOLIDATE 阶段执行。
@@ -12,16 +12,14 @@ Trigger: ~help
12
12
  | 命令 | 说明 |
13
13
  |------|------|
14
14
  | ~idea | 轻量点子探索与方向比较 |
15
- | ~auto | 自动执行:自动选主路径并持续推进到执行 / 验证 / 收尾,除非命中真实阻塞 |
15
+ | ~auto | 自动执行:自动选主路径并持续推进到实现 / 质量闭环 / 收尾,除非命中真实阻塞 |
16
16
  | ~plan | 结构化规划:需求澄清 + 方案确认 + 方案包 |
17
- | ~build | 执行实现:按需求或方案包完成实现与验证 |
17
+ | ~build | 执行实现:按需求或方案包完成实现与局部验证 |
18
18
  | ~prd | 完整 PRD:头脑风暴式逐维度挖掘,生成现代产品需求文档 |
19
- | ~loop | 自主迭代优化:设定目标和指标,循环修改-验证-保留/回滚 |
20
- | ~wiki | 仅创建/同步项目知识库 |
21
- | ~init | 同 `~wiki` |
22
- | ~global | 初始化项目级全局模式 |
19
+ | ~loop | 长任务入口:在 Codex 中优先走 `/goal -> ~auto -> ~qa` |
20
+ | ~init | 初始化项目工作流并同步知识库 |
23
21
  | ~test | 为指定模块或最近变更编写完整测试 |
24
- | ~verify | 验证总入口:审查 + 运行验证命令 + 修复循环 |
22
+ | ~qa | 统一质量总入口:审查 + 运行验证命令 + 修复循环 + 收尾前证据 |
25
23
  | ~commit | 规范化提交 + 知识库同步 |
26
24
  | ~clean | 清理临时文件和归档方案包 |
27
25
  | ~help | 显示此帮助 |
@@ -29,15 +27,15 @@ Trigger: ~help
29
27
  兼容别名:
30
28
  - `~do` → 等同 `~build`
31
29
  - `~design` → 等同 `~plan`
32
- - `~review` → 等同 `~verify` 的审查优先模式
30
+ - `~review` → 等同 `~qa`
33
31
 
34
32
  ### 自动激活技能
35
- 以下技能仅在全局模式或已初始化项目时自动激活(例如执行过 `~global`,或当前项目级规则文件已包含 `<!-- HELLOAGENTS_PROFILE: full -->`)。
33
+ 以下技能仅在宿主全局模式或已初始化项目时自动激活(例如当前项目级规则文件已包含 `<!-- HELLOAGENTS_PROFILE: full -->`,通常由 `~init` 建立)。
36
34
  纯标准模式、且项目未初始化时不会自动触发这些技能;但涉及 UI 的任务仍受 UI 质量基线约束。
37
35
 
38
36
  编码时:hello-ui, hello-api, hello-data, hello-security, hello-errors, hello-perf, hello-arch, hello-test
39
- 特定场景:hello-debug, hello-subagent, hello-write, hello-review
40
- 完成时:hello-verify, hello-reflect
37
+ 特定场景:hello-debug, hello-subagent, hello-write
38
+ 完成时:qa-review, hello-reflect
41
39
 
42
40
  ### 当前设置
43
41
  优先使用当前会话上下文中已注入的“当前用户设置”、该配置文件原始 JSON 或此前读取结果摘要显示;若会话上下文不存在该信息,或缺少下表任一配置项,才读取一次 `~/.helloagents/helloagents.json`,并在后续轮次复用。对 Codex 来说,首次对话前若当前上下文仍缺少这些配置项,或刚经历压缩/恢复后的首次对话,同样先读取一次再继续。
@@ -47,9 +45,9 @@ Trigger: ~help
47
45
  | output_language | "" | 空=跟随用户语言/填写则指定(如 zh-CN、en) | Claude Code + Gemini CLI + Codex CLI |
48
46
  | output_format | true | true=主代理最终回复必须使用 HelloAGENTS 格式,流式/中间输出及子代理输出保持自然;false=自然输出 | Claude Code + Gemini CLI + Codex CLI |
49
47
  | notify_level | 0 | 0=关闭/1=桌面通知/2=声音/3=两者 | Claude Code + Gemini CLI + Codex CLI |
50
- | ralph_loop_enabled | true | 自动验证循环(显式 ~verify / ~loop 或收尾要求时触发 lint/test/build) | Claude Code + Gemini CLI + Codex CLI |
48
+ | ralph_loop_enabled | true | 收尾 QA gate(显式 ~qa / ~loop 或收尾要求时触发审查、lint/test/build) | Claude Code + Gemini CLI + Codex CLI |
51
49
  | guard_enabled | true | 阻断危险命令与写入后的安全扫描 | Claude Code + Gemini CLI + Codex CLI |
52
- | kb_create_mode | 1 | 0=关闭/1=知识库已存在时自动同步/2=编码任务在知识库已存在或全局模式下自动创建或同步 | Claude Code + Gemini CLI + Codex CLI |
50
+ | kb_create_mode | 1 | 0=关闭/1=知识库已存在时自动同步/2=编码任务在知识库已存在或当前项目已初始化时自动创建或同步 | Claude Code + Gemini CLI + Codex CLI |
53
51
  | project_store_mode | "local" | "local"=知识库/方案包保留在项目本地 `.helloagents/`;"repo-shared"=本地 `.helloagents/` 仅保留项目本地状态/运行态,知识库与方案包改写到 `~/.helloagents/projects/<repo-key>/` | Claude Code + Gemini CLI + Codex CLI |
54
52
  | auto_commit_enabled | true | true=验证完成且有变更时自动执行本地提交;false=跳过自动提交,仍可手动用 `~commit` | Claude Code + Gemini CLI + Codex CLI |
55
53
  | commit_attribution | "" | 空=不添加/填写内容则添加到 commit message | Claude Code + Gemini CLI + Codex CLI |