helloagents 3.0.8-beta.1 → 3.0.10-beta.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +6 -6
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +18 -9
- package/README_CN.md +42 -33
- package/bootstrap-lite.md +18 -17
- package/bootstrap.md +22 -21
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/scripts/capability-registry.mjs +5 -5
- package/scripts/cli-codex-config.mjs +8 -2
- package/scripts/cli-codex.mjs +7 -3
- package/scripts/cli-doctor.mjs +6 -1
- package/scripts/cli-host-detect.mjs +18 -2
- package/scripts/cli-lifecycle.mjs +11 -0
- package/scripts/cli-messages.mjs +3 -3
- package/scripts/cli-toml-values.mjs +25 -0
- package/scripts/cli-toml.mjs +15 -0
- package/scripts/delivery-gate.mjs +5 -4
- package/scripts/guard.mjs +7 -6
- package/scripts/notify-context.mjs +32 -30
- package/scripts/notify-events.mjs +0 -8
- package/scripts/notify-gates.mjs +128 -0
- package/scripts/notify-route.mjs +5 -2
- package/scripts/notify-source.mjs +3 -60
- package/scripts/notify-ui.mjs +3 -0
- package/scripts/notify.mjs +72 -83
- package/scripts/project-storage.mjs +107 -15
- package/scripts/session-token.mjs +73 -0
- package/scripts/workflow-core.mjs +16 -8
- package/scripts/workflow-plan-files.mjs +17 -6
- package/scripts/workflow-recommendation.mjs +4 -4
- package/scripts/workflow-state.mjs +13 -13
- package/skills/commands/auto/SKILL.md +13 -13
- package/skills/commands/build/SKILL.md +5 -5
- package/skills/commands/clean/SKILL.md +6 -6
- package/skills/commands/commit/SKILL.md +2 -2
- package/skills/commands/help/SKILL.md +2 -2
- package/skills/commands/idea/SKILL.md +5 -5
- package/skills/commands/init/SKILL.md +4 -4
- package/skills/commands/loop/SKILL.md +4 -4
- package/skills/commands/plan/SKILL.md +13 -13
- package/skills/commands/prd/SKILL.md +13 -13
- package/skills/commands/verify/SKILL.md +3 -3
- package/skills/commands/wiki/SKILL.md +5 -5
- package/skills/hello-subagent/SKILL.md +1 -1
- package/skills/hello-ui/SKILL.md +3 -3
- package/skills/helloagents/SKILL.md +3 -2
- package/templates/plans/contract.json +2 -2
|
@@ -13,6 +13,13 @@ import { describeProjectStoreFile, getProjectDesignContractPath } from './projec
|
|
|
13
13
|
export function getTargetPlans(snapshot) {
|
|
14
14
|
return snapshot.activePlans.length > 0 ? snapshot.activePlans : snapshot.plans
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
function describeStateLabel(state) {
|
|
18
|
+
if (state.stateSessionMode === 'default') {
|
|
19
|
+
return '当前分支默认位置的状态文件'
|
|
20
|
+
}
|
|
21
|
+
return '当前会话的状态文件'
|
|
22
|
+
}
|
|
16
23
|
export function classifyPlan(plan) {
|
|
17
24
|
if (!plan) {
|
|
18
25
|
return {
|
|
@@ -97,27 +104,28 @@ function collectStateSyncIssues(snapshot) {
|
|
|
97
104
|
const issues = []
|
|
98
105
|
const hasPlans = snapshot.plans.length > 0
|
|
99
106
|
const state = snapshot.state
|
|
107
|
+
const stateLabel = describeStateLabel(state)
|
|
100
108
|
|
|
101
109
|
if (!hasPlans) {
|
|
102
110
|
return issues
|
|
103
111
|
}
|
|
104
112
|
|
|
105
113
|
if (!state.exists) {
|
|
106
|
-
issues.push(
|
|
114
|
+
issues.push(`当前已存在方案包,但${stateLabel} 缺失`)
|
|
107
115
|
return issues
|
|
108
116
|
}
|
|
109
117
|
|
|
110
118
|
if (!state.referencedPlanDir) {
|
|
111
|
-
issues.push(
|
|
119
|
+
issues.push(`${stateLabel} 未记录活跃方案路径`)
|
|
112
120
|
}
|
|
113
121
|
if (!state.sections['主线目标']) {
|
|
114
|
-
issues.push(
|
|
122
|
+
issues.push(`${stateLabel} 缺少“主线目标”`)
|
|
115
123
|
}
|
|
116
124
|
if (!state.sections['正在做什么']) {
|
|
117
|
-
issues.push(
|
|
125
|
+
issues.push(`${stateLabel} 缺少“正在做什么”`)
|
|
118
126
|
}
|
|
119
127
|
if (!state.sections['下一步']) {
|
|
120
|
-
issues.push(
|
|
128
|
+
issues.push(`${stateLabel} 缺少“下一步”`)
|
|
121
129
|
}
|
|
122
130
|
|
|
123
131
|
return issues
|
|
@@ -132,12 +140,12 @@ export function buildVerifyModeHintFromSnapshot(snapshot) {
|
|
|
132
140
|
export function buildStateSyncHintFromSnapshot(snapshot) {
|
|
133
141
|
const issues = collectStateSyncIssues(snapshot)
|
|
134
142
|
if (issues.length === 0) return ''
|
|
135
|
-
return
|
|
143
|
+
return `状态文件提醒:${issues.join(';')};继续项目级流程、收尾或进入压缩前先同步状态文件。`
|
|
136
144
|
}
|
|
137
145
|
|
|
138
146
|
export function buildStateRoleHintFromSnapshot(snapshot) {
|
|
139
147
|
if (!snapshot.state.exists || snapshot.plans.length > 0) return ''
|
|
140
|
-
return
|
|
148
|
+
return `恢复约束:当前仅检测到${describeStateLabel(snapshot.state)};先以当前用户消息、显式命令和代码事实确认当前任务。状态文件只用于找回上次停在哪,不是当前任务的自动授权或唯一判断依据。`
|
|
141
149
|
}
|
|
142
150
|
|
|
143
151
|
export function buildUiContractHint(cwd, snapshot) {
|
|
@@ -159,7 +167,7 @@ export function buildUiContractHint(cwd, snapshot) {
|
|
|
159
167
|
if (visualValidationRequired) {
|
|
160
168
|
extraHints.push('若当前 UI 契约要求视觉验收,收尾前需写 `.helloagents/.ralph-visual.json` 记录关键视口、状态与结论')
|
|
161
169
|
}
|
|
162
|
-
return `UI
|
|
170
|
+
return `UI 约束提示:如本次属于视觉/交互任务,设计决策优先级固定为:当前活跃 plan.md / prd/03-ui-design.md → ${describeProjectStoreFile(cwd, 'DESIGN.md')} → hello-ui。${extraHints.length > 0 ? ` ${extraHints.join(';')}。` : ''}`
|
|
163
171
|
}
|
|
164
172
|
|
|
165
173
|
export { normalizeTaskFile, readStateSnapshot, listPlanPackages, getWorkflowSnapshot }
|
|
@@ -2,7 +2,11 @@ import { existsSync, readdirSync, readFileSync } from 'node:fs'
|
|
|
2
2
|
import { isAbsolute, join, normalize } from 'node:path'
|
|
3
3
|
|
|
4
4
|
import { getPlanContractIssues, readPlanContract } from './plan-contract.mjs'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
getProjectPlansDir,
|
|
7
|
+
getProjectSessionStateScope,
|
|
8
|
+
resolveProjectPlanDir,
|
|
9
|
+
} from './project-storage.mjs'
|
|
6
10
|
|
|
7
11
|
const PLAN_TEMPLATE_MARKERS = {
|
|
8
12
|
'requirements.md': [
|
|
@@ -170,15 +174,22 @@ function comparePlanEntries(a, b) {
|
|
|
170
174
|
return a.planName.localeCompare(b.planName)
|
|
171
175
|
}
|
|
172
176
|
|
|
173
|
-
export function readStateSnapshot(cwd) {
|
|
174
|
-
const
|
|
177
|
+
export function readStateSnapshot(cwd, options = {}) {
|
|
178
|
+
const stateScope = getProjectSessionStateScope(cwd, options)
|
|
179
|
+
const statePath = stateScope.statePath
|
|
180
|
+
const exists = existsSync(statePath)
|
|
175
181
|
const content = readText(statePath)
|
|
176
182
|
const sections = parseMarkdownSections(content)
|
|
177
183
|
const referencedPlanDir = resolvePlanDir(cwd, sections['方案'])
|
|
178
184
|
|
|
179
185
|
return {
|
|
180
186
|
statePath,
|
|
181
|
-
|
|
187
|
+
stateScope: stateScope.stateScope,
|
|
188
|
+
stateSessionToken: stateScope.stateSessionToken,
|
|
189
|
+
stateSessionMode: stateScope.stateSessionMode,
|
|
190
|
+
stateBranch: stateScope.stateBranch,
|
|
191
|
+
sessionScoped: stateScope.stateScope === 'session',
|
|
192
|
+
exists,
|
|
182
193
|
content,
|
|
183
194
|
sections,
|
|
184
195
|
referencedPlanDir,
|
|
@@ -230,8 +241,8 @@ export function listPlanPackages(cwd) {
|
|
|
230
241
|
.sort(comparePlanEntries)
|
|
231
242
|
}
|
|
232
243
|
|
|
233
|
-
export function getWorkflowSnapshot(cwd) {
|
|
234
|
-
const state = readStateSnapshot(cwd)
|
|
244
|
+
export function getWorkflowSnapshot(cwd, options = {}) {
|
|
245
|
+
const state = readStateSnapshot(cwd, options)
|
|
235
246
|
const plans = listPlanPackages(cwd).map((entry) => ({
|
|
236
247
|
...entry,
|
|
237
248
|
referencedByState: state.referencedPlanDir ? normalize(entry.dirPath) === normalize(state.referencedPlanDir) : false,
|
|
@@ -59,7 +59,7 @@ function buildConsolidateAction(recommendation) {
|
|
|
59
59
|
phase: 'consolidate',
|
|
60
60
|
mode: recommendation.mode,
|
|
61
61
|
routeHint: recommendation.guidance,
|
|
62
|
-
gateHint: '交付把关:审查与验证证据已满足;先写 `.helloagents/.ralph-closeout.json`
|
|
62
|
+
gateHint: '交付把关:审查与验证证据已满足;先写 `.helloagents/.ralph-closeout.json` 记录需求覆盖与交付清单,再更新 `state_path` 并归档后才可交付。',
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ function buildConsolidateAction(recommendation) {
|
|
|
67
67
|
phase: 'consolidate',
|
|
68
68
|
mode: recommendation.mode || 'ready',
|
|
69
69
|
routeHint: recommendation.guidance,
|
|
70
|
-
gateHint: '
|
|
70
|
+
gateHint: '交付把关:当前已具备收尾证据;更新 `state_path`、知识文件并归档后即可交付。',
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -239,8 +239,8 @@ function buildClosedRecommendation(scopeLabel, plan, cwd) {
|
|
|
239
239
|
? `${scopeLabel} "${plan.planName}" 的任务与交付证据已闭合。`
|
|
240
240
|
: `${scopeLabel} "${plan.planName}" 的任务、审查与验证已闭合。`,
|
|
241
241
|
guidance: closedPlanEvidence.closeoutReady
|
|
242
|
-
? '当前进入 CONSOLIDATE
|
|
243
|
-
: '当前进入 CONSOLIDATE:先写 `.helloagents/.ralph-closeout.json`
|
|
242
|
+
? '当前进入 CONSOLIDATE:更新 `state_path`、知识文件并归档方案后即可交付;不要无故重开新的方案包或重新跑一遍无关验证。'
|
|
243
|
+
: '当前进入 CONSOLIDATE:先写 `.helloagents/.ralph-closeout.json` 记录需求覆盖与交付清单,再更新 `state_path` 并归档后交付。',
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
|
|
@@ -16,27 +16,27 @@ import {
|
|
|
16
16
|
buildRecommendation,
|
|
17
17
|
} from './workflow-recommendation.mjs'
|
|
18
18
|
|
|
19
|
-
export function getDeliveryAction(cwd) {
|
|
20
|
-
const snapshot = getWorkflowSnapshot(cwd)
|
|
19
|
+
export function getDeliveryAction(cwd, options = {}) {
|
|
20
|
+
const snapshot = getWorkflowSnapshot(cwd, options)
|
|
21
21
|
const recommendation = buildRecommendation(snapshot, cwd)
|
|
22
22
|
return buildDeliveryActionFromSnapshot(snapshot, cwd, recommendation)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export function getWorkflowRecommendation(cwd) {
|
|
26
|
-
return buildRecommendation(getWorkflowSnapshot(cwd), cwd)
|
|
25
|
+
export function getWorkflowRecommendation(cwd, options = {}) {
|
|
26
|
+
return buildRecommendation(getWorkflowSnapshot(cwd, options), cwd)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export function buildStateSyncHint(cwd) {
|
|
30
|
-
return buildStateSyncHintFromSnapshot(getWorkflowSnapshot(cwd))
|
|
29
|
+
export function buildStateSyncHint(cwd, options = {}) {
|
|
30
|
+
return buildStateSyncHintFromSnapshot(getWorkflowSnapshot(cwd, options))
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export function buildDeliveryGateHint(cwd) {
|
|
34
|
-
const snapshot = getWorkflowSnapshot(cwd)
|
|
33
|
+
export function buildDeliveryGateHint(cwd, options = {}) {
|
|
34
|
+
const snapshot = getWorkflowSnapshot(cwd, options)
|
|
35
35
|
return buildDeliveryGateHintFromSnapshot(snapshot, cwd, buildRecommendation(snapshot, cwd))
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export function buildWorkflowRouteHint(cwd) {
|
|
39
|
-
const snapshot = getWorkflowSnapshot(cwd)
|
|
38
|
+
export function buildWorkflowRouteHint(cwd, options = {}) {
|
|
39
|
+
const snapshot = getWorkflowSnapshot(cwd, options)
|
|
40
40
|
const recommendation = buildRecommendation(snapshot, cwd)
|
|
41
41
|
const stateSyncHint = buildStateSyncHintFromSnapshot(snapshot)
|
|
42
42
|
const stateRoleHint = buildStateRoleHintFromSnapshot(snapshot)
|
|
@@ -58,7 +58,7 @@ function buildCommandRouteMessage(skillName, recommendation, verifyModeHint) {
|
|
|
58
58
|
if (skillName === 'auto') {
|
|
59
59
|
return recommendation.stage === 'consolidate'
|
|
60
60
|
? `当前工作流约束:${recommendation.summary} 当前建议下一阶段:CONSOLIDATE。${recommendation.guidance} 若本次明确使用 ~auto,则在未命中阻塞判定时直接完成当前收尾,不再额外停下询问。`
|
|
61
|
-
: `当前工作流约束:${recommendation.summary} 当前建议主路径:${recommendation.nextPath}。${recommendation.guidance} 若本次明确使用 ~auto
|
|
61
|
+
: `当前工作流约束:${recommendation.summary} 当前建议主路径:${recommendation.nextPath}。${recommendation.guidance} 若本次明确使用 ~auto,则命中主路径后继续执行后续阶段,除非触发阻塞判定,否则不要在方案/PRD 阶段额外停下。`
|
|
62
62
|
}
|
|
63
63
|
if (skillName === 'plan') {
|
|
64
64
|
if (recommendation.stage === 'consolidate') {
|
|
@@ -87,8 +87,8 @@ function buildCommandRouteMessage(skillName, recommendation, verifyModeHint) {
|
|
|
87
87
|
return `当前工作流约束:${recommendation.summary} 当前建议下一命令:~${recommendation.nextCommand}。${recommendation.guidance}`
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
export function buildCommandRouteHint(skillName, cwd) {
|
|
91
|
-
const snapshot = getWorkflowSnapshot(cwd)
|
|
90
|
+
export function buildCommandRouteHint(skillName, cwd, options = {}) {
|
|
91
|
+
const snapshot = getWorkflowSnapshot(cwd, options)
|
|
92
92
|
const recommendation = buildRecommendation(snapshot, cwd)
|
|
93
93
|
const contextHints = [
|
|
94
94
|
buildStateRoleHintFromSnapshot(snapshot),
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ~auto
|
|
3
|
-
description:
|
|
3
|
+
description: 自动执行命令 — 自动选择并依次执行 ~idea / ~plan / ~build / ~verify / ~prd,默认持续推进直到交付完成(~auto 命令)
|
|
4
4
|
policy:
|
|
5
5
|
allow_implicit_invocation: false
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~auto <任务描述>
|
|
8
8
|
|
|
9
|
-
`~auto`
|
|
10
|
-
`~auto`
|
|
9
|
+
`~auto` 是自动执行命令。它根据任务类型、复杂度、风险等级与项目状态,在 `~idea`、`~plan`、`~build`、`~verify`、`~prd` 之间选择合适主路径,并连续推进。
|
|
10
|
+
`~auto` 不止做一次选路;主路径一旦确定,就按需要继续执行后续阶段,默认持续推进直到完成交付,只有命中 bootstrap 的阻塞判定时才停下。
|
|
11
11
|
|
|
12
12
|
## 铁律
|
|
13
13
|
- 不为了“自动化”而强行走重流程
|
|
14
14
|
- 复杂度与风险不足以支撑更重路径时,优先选更轻但能保证质量的路线
|
|
15
|
-
- `T3`
|
|
16
|
-
- 主路径一旦确定,立即读取对应 command skill
|
|
15
|
+
- `T3` 高风险或不可逆操作默认不直接进入 `~build`;优先先走 `~plan` 或 `~prd`,纯审查/纯验证请求才可先进入 `~verify`
|
|
16
|
+
- 主路径一旦确定,立即读取对应 command skill,并在阶段完成后继续执行后续阶段,避免同一任务重复探索或重复等待
|
|
17
17
|
- 选路不替代授权;涉及外部副作用或高风险不可逆操作时,仍遵守 bootstrap 的阻塞判定与确认规则
|
|
18
18
|
- 用户显式使用 `~auto`,表示已授权在当前任务边界内沿选定主路径持续执行;`~plan` / `~prd` 作为中间阶段时,不再额外询问“是否开始执行”,除非仍有真实阻塞
|
|
19
19
|
- 优先消费当前上下文中已注入的 ROUTE / TIER、当前工作流约束与项目状态;不要在 `~auto` 内另建一套关键词路由表
|
|
@@ -38,13 +38,13 @@ Trigger: ~auto <任务描述>
|
|
|
38
38
|
- 明确要求验证 / 审查 / 跑检查 → `~verify`
|
|
39
39
|
- 0 到 1 / 产品级 / 多维规格 → `~prd`
|
|
40
40
|
- 多文件功能 / 架构变更 / 新项目规划 → `~plan`
|
|
41
|
-
- 明确修复 / 小范围实现 /
|
|
41
|
+
- 明确修复 / 小范围实现 / 按现有方案实现 → `~build`
|
|
42
42
|
|
|
43
43
|
### 2. 按 Tier 校正
|
|
44
44
|
|
|
45
45
|
- `T0` → 保持在 `~idea`,不创建项目文件
|
|
46
46
|
- `T1` → 在 `~build` / `~verify` 间选择最短可交付路径
|
|
47
|
-
- `T2` →
|
|
47
|
+
- `T2` → 需要结构化产物或范围未完全明确时优先 `~plan`
|
|
48
48
|
- `T3` → 纯审查/验真走 `~verify`;其余默认 `~plan` 或 `~prd`,待方案与风险边界明确后再进入实现
|
|
49
49
|
|
|
50
50
|
### 3. 读取对应命令并执行主路径
|
|
@@ -57,16 +57,16 @@ Trigger: ~auto <任务描述>
|
|
|
57
57
|
|
|
58
58
|
不要额外读取未选中的 command skill。
|
|
59
59
|
|
|
60
|
-
### 4.
|
|
60
|
+
### 4. 持续执行直到完成
|
|
61
61
|
|
|
62
|
-
- 若主路径是 `~build` → 完成实现后继续进入 `~verify
|
|
63
|
-
- 若主路径是 `~plan` →
|
|
64
|
-
- 若主路径是 `~prd` → PRD / 任务 /
|
|
62
|
+
- 若主路径是 `~build` → 完成实现后继续进入 `~verify`,再进入收尾
|
|
63
|
+
- 若主路径是 `~plan` → 方案包写入后,若当前任务来自 `~auto` 且未命中阻塞判定,直接继续进入 `~build`,不要把“方案已形成”当作最终停点
|
|
64
|
+
- 若主路径是 `~prd` → PRD / 任务 / 契约写入后,若当前任务来自 `~auto` 且未命中阻塞判定,按当前结果继续进入 `~build`,必要时先补一轮轻量 `~plan`
|
|
65
65
|
- 若主路径是 `~verify` → 完成审查 / 验证 / 收尾后结束
|
|
66
|
-
- 若主路径是 `~idea
|
|
66
|
+
- 若主路径是 `~idea`,且用户本意就是探索/比较,则在探索输出后结束;若探索后已有明确方向且当前任务仍要求写文件或改代码,则继续进入 `~plan` 或 `~build`
|
|
67
67
|
|
|
68
68
|
### 5. 何时允许停下
|
|
69
69
|
|
|
70
70
|
- 仅在 bootstrap 的阻塞判定成立时停下:真实歧义、缺必需信息/文件/凭据、未授权外部副作用、高风险或不可逆操作
|
|
71
|
-
- 不得把 `~plan` / `~prd` 中“是否进入执行”的默认询问原样带入 `~auto`
|
|
71
|
+
- 不得把 `~plan` / `~prd` 中“是否进入执行”的默认询问原样带入 `~auto` 流程
|
|
72
72
|
- 不得把“给出方案”“给出任务列表”“给出建议下一步”当作 `~auto` 的默认完成态;用户显式要求 `~auto` 时,默认目标是把当前任务推进到可交付完成
|
|
@@ -6,9 +6,9 @@ policy:
|
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~build [description]
|
|
8
8
|
|
|
9
|
-
`~build`
|
|
9
|
+
`~build` 是执行实现命令。它负责读取现有需求、方案包与项目上下文,完成实现、局部验证、修复循环,并把结果交给后续验证与收尾。
|
|
10
10
|
执行 `~build` 时,通用阶段边界按当前已加载 bootstrap 执行;本 skill 负责补充实现前定位、实现约束,以及进入 `~verify` / 收尾前的实现边界。
|
|
11
|
-
`.helloagents/` 在本 skill
|
|
11
|
+
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`,`.ralph-*.json` 保持项目本地;若 `project_store_mode=repo-shared`,知识库、`DESIGN.md`、`verify.yaml` 与方案包按当前上下文中已注入的项目知识/方案目录解析。
|
|
12
12
|
|
|
13
13
|
## 铁律
|
|
14
14
|
- 默认先定位上下文与范围,再修改代码
|
|
@@ -20,7 +20,7 @@ Trigger: ~build [description]
|
|
|
20
20
|
|
|
21
21
|
### 1. 恢复与定位
|
|
22
22
|
|
|
23
|
-
- 优先按当前已加载 bootstrap 的“.helloagents/
|
|
23
|
+
- 优先按当前已加载 bootstrap 的“.helloagents/ 文件读取优先级”恢复当前任务;若当前消息明确要继续上次任务,或会话刚经历恢复 / 压缩,先读取 `state_path`,再用当前用户消息、活跃方案包 / PRD 与代码事实确认当前任务
|
|
24
24
|
- 若存在最近的活跃方案包,读取对应的:
|
|
25
25
|
- `requirements.md`
|
|
26
26
|
- `plan.md`
|
|
@@ -59,9 +59,9 @@ Trigger: ~build [description]
|
|
|
59
59
|
- 若失败,修复后重跑
|
|
60
60
|
- 若涉及 review 场景,可按需读取 `hello-review`
|
|
61
61
|
|
|
62
|
-
### 5.
|
|
62
|
+
### 5. 交付前处理
|
|
63
63
|
|
|
64
64
|
- 有方案包时,只同步本次实现直接影响的任务状态;未完成项保持打开
|
|
65
65
|
- 当前实现已闭合、且需要进入交付或收尾时,转入 `~verify`
|
|
66
|
-
-
|
|
66
|
+
- 状态文件、知识库、`CHANGELOG.md`、modules 文档与归档边界,按当前已加载 bootstrap 的 VERIFY / CONSOLIDATE 规则执行
|
|
67
67
|
- 不在 `~build` 内把仍未闭合的方案包整体报告为已完成
|
|
@@ -6,18 +6,18 @@ policy:
|
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~clean
|
|
8
8
|
|
|
9
|
-
执行 `~clean`
|
|
10
|
-
`.helloagents/` 在本 skill
|
|
9
|
+
执行 `~clean` 时,方案包归档、临时文件清理和状态文件更新范围按当前已加载 bootstrap 执行;本命令只负责判定哪些方案包可以清理,以及输出清理摘要。
|
|
10
|
+
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`,临时运行态文件保持项目本地;若 `project_store_mode=repo-shared`,`plans/` 与 `archive/` 按当前上下文中已注入的项目知识/方案目录解析。
|
|
11
11
|
|
|
12
12
|
## 流程
|
|
13
13
|
|
|
14
14
|
1. 扫描 `.helloagents/plans/` 下的方案包(按当前项目存储模式解析;`project_store_mode=repo-shared` 时使用共享知识/方案目录)
|
|
15
|
-
2. 判定完成状态:优先以 tasks.md 中所有任务已标记 [√]
|
|
15
|
+
2. 判定完成状态:优先以 tasks.md 中所有任务已标记 [√] 为准;只有任务清单无法判断时,才读取 `state_path` 中与当前方案一致的“主线目标”+“正在做什么”作为辅助信息
|
|
16
16
|
3. 已完成的方案包 → 按 bootstrap 的归档规则移入 `.helloagents/archive/YYYY-MM/`(按当前项目存储模式解析),并同步更新 `.helloagents/archive/_index.md`
|
|
17
17
|
4. 清理 bootstrap 中定义的临时文件
|
|
18
|
-
5. 按 bootstrap 的流程状态规则更新 `
|
|
18
|
+
5. 按 bootstrap 的流程状态规则更新 `state_path`;若当前状态指向已归档方案包,则清空对应方案路径
|
|
19
19
|
7. 输出清理摘要(归档了几个方案包、清理了哪些文件)
|
|
20
20
|
|
|
21
21
|
## 不删除
|
|
22
|
-
- 除按流程状态规则必须重写的 `
|
|
23
|
-
-
|
|
22
|
+
- 除按流程状态规则必须重写的 `state_path` 外,不删除流程状态文件
|
|
23
|
+
- 不删除知识文件或项目级设计契约
|
|
@@ -6,7 +6,7 @@ policy:
|
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~commit [message]
|
|
8
8
|
|
|
9
|
-
执行 `~commit`
|
|
9
|
+
执行 `~commit` 时,知识库同步与状态文件更新范围按当前已加载 bootstrap 的 CONSOLIDATE / 流程状态规则执行;本命令只负责生成提交信息、读取提交归属配置并完成提交动作。
|
|
10
10
|
|
|
11
11
|
## 流程
|
|
12
12
|
|
|
@@ -20,7 +20,7 @@ Trigger: ~commit [message]
|
|
|
20
20
|
- ""(空,默认)→ 不添加归属
|
|
21
21
|
- 有内容(如 "Co-Authored-By: HelloAGENTS")→ 添加该内容到 commit message
|
|
22
22
|
6. 执行 git commit
|
|
23
|
-
7.
|
|
23
|
+
7. 若 `state_path` 已存在,按 bootstrap 的“已有则更新”规则同步当前已提交状态
|
|
24
24
|
|
|
25
25
|
## 知识库同步
|
|
26
26
|
提交后,继续复用上方已解析的同一份设置获取 `kb_create_mode`,不要再次读取 `~/.helloagents/helloagents.json`:
|
|
@@ -12,8 +12,8 @@ Trigger: ~help
|
|
|
12
12
|
| 命令 | 说明 |
|
|
13
13
|
|------|------|
|
|
14
14
|
| ~idea | 轻量点子探索与方向比较 |
|
|
15
|
-
| ~auto |
|
|
16
|
-
| ~plan | 结构化规划:需求澄清 +
|
|
15
|
+
| ~auto | 自动执行:自动选主路径并持续推进到执行 / 验证 / 收尾,除非命中真实阻塞 |
|
|
16
|
+
| ~plan | 结构化规划:需求澄清 + 方案确认 + 方案包 |
|
|
17
17
|
| ~build | 执行实现:按需求或方案包完成实现与验证 |
|
|
18
18
|
| ~prd | 完整 PRD:头脑风暴式逐维度挖掘,生成现代产品需求文档 |
|
|
19
19
|
| ~loop | 自主迭代优化:设定目标和指标,循环修改-验证-保留/回滚 |
|
|
@@ -6,12 +6,12 @@ policy:
|
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~idea [description]
|
|
8
8
|
|
|
9
|
-
`~idea`
|
|
9
|
+
`~idea` 是轻量探索命令,用于在不写文件、不进入执行、不激活完整项目流程的前提下,帮用户快速比较方向、生成点子、明确方案。
|
|
10
10
|
|
|
11
11
|
## 铁律
|
|
12
12
|
- 只讨论,不编写实现代码,不创建项目文件,不执行实现操作
|
|
13
13
|
- 不创建 `.helloagents/`
|
|
14
|
-
-
|
|
14
|
+
- 不创建或更新当前项目存储中的 `state_path`;同样禁止更新知识库文件、方案包或项目级规则文件
|
|
15
15
|
- 不生成方案包
|
|
16
16
|
- 不执行会改变工作区或外部状态的命令
|
|
17
17
|
- 不默认使用子代理
|
|
@@ -45,11 +45,11 @@ Trigger: ~idea [description]
|
|
|
45
45
|
- 想形成结构化方案 → `~plan`
|
|
46
46
|
- 想直接进入实现 → `~build`
|
|
47
47
|
- 需要重型产品规格 → `~prd`
|
|
48
|
-
- 想让 AI
|
|
49
|
-
- 如果用户在 `~idea` 过程中转而明确要求写文件、改代码、创建知识库或执行命令,不在 `~idea`
|
|
48
|
+
- 想让 AI 自动执行完整流程 → `~auto`
|
|
49
|
+
- 如果用户在 `~idea` 过程中转而明确要求写文件、改代码、创建知识库或执行命令,不在 `~idea` 内偷偷写文件;改为按最合适的升级路径继续
|
|
50
50
|
|
|
51
51
|
## 输出要求
|
|
52
52
|
|
|
53
|
-
-
|
|
53
|
+
- 允许发散,但必须给出明确结论
|
|
54
54
|
- 不做“点子堆砌”
|
|
55
55
|
- 不把尚未决定的探索结果伪装成已确认方案
|
|
@@ -7,14 +7,14 @@ policy:
|
|
|
7
7
|
Trigger: ~init
|
|
8
8
|
|
|
9
9
|
~init 是用户显式命令,创建完整知识库,不受 kb_create_mode 限制。
|
|
10
|
-
执行 `~init` 时,`.helloagents/`
|
|
11
|
-
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:项目本地 `.helloagents/`
|
|
10
|
+
执行 `~init` 时,`.helloagents/` 目录结构、模板格式和状态文件规则按当前已加载 bootstrap 执行;本命令额外负责项目级规则文件和各宿主项目级原生 skills 链接。
|
|
11
|
+
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:项目本地 `.helloagents/` 继续承担激活目录;状态文件只使用 `state_path`;若 `project_store_mode=repo-shared`,知识库、`DESIGN.md` 与方案包按当前上下文中已注入的项目知识/方案目录写入。
|
|
12
12
|
|
|
13
13
|
## 流程
|
|
14
14
|
|
|
15
15
|
### 阶段 1:环境搭建(必做)
|
|
16
16
|
|
|
17
|
-
1. 创建 `.helloagents/` 目录 + `
|
|
17
|
+
1. 创建 `.helloagents/` 目录 + `state_path`(按 templates/STATE.md 格式,初始“主线目标”写当前初始化任务,初始状态为空闲)
|
|
18
18
|
2. 定位插件根目录:优先读取当前上下文中已注入的“当前 HelloAGENTS 包根目录”;若上下文未提供,再根据当前已加载的规则文件反推,禁止猜测其他目录
|
|
19
19
|
3. 刷新各宿主项目级原生 skills 链接(删除旧的重建):
|
|
20
20
|
- `.claude/skills/helloagents` symlink → `{插件根目录}/`
|
|
@@ -62,7 +62,7 @@ commands:
|
|
|
62
62
|
## 幂等性
|
|
63
63
|
重复执行 ~init 是安全的:
|
|
64
64
|
- 已存在的 .helloagents/ 文件不覆盖
|
|
65
|
-
- `
|
|
65
|
+
- `state_path` 只记录当前初始化任务;后续进入其他任务时必须按新任务重写
|
|
66
66
|
- 各宿主项目级原生 skills 链接会刷新(删除旧的重建)
|
|
67
67
|
- AGENTS.md/CLAUDE.md/GEMINI.md 中标记内容替换更新
|
|
68
68
|
- .gitignore 只追加缺失行
|
|
@@ -19,12 +19,12 @@ Trigger: ~loop <目标描述> [--iterations N] [--metric "命令"] [--direction
|
|
|
19
19
|
## 初始化
|
|
20
20
|
|
|
21
21
|
1. 确认 git 工作区干净(有未提交变更则先提醒用户处理)
|
|
22
|
-
2. 确保 `.helloagents/` 目录和
|
|
22
|
+
2. 确保 `.helloagents/` 目录和 `state_path` 存在;文件不存在时按 `templates/STATE.md` 创建。`~loop` 必须维护这个状态文件,不受 `kb_create_mode` 控制;“主线目标”固定写本次优化目标,避免混入其他任务
|
|
23
23
|
3. 运行指标命令获取基线值,记录到 results log
|
|
24
24
|
4. 如有守卫命令,运行确认基线通过
|
|
25
25
|
5. 创建 `.helloagents/loop-results.tsv`,并确保 .gitignore 包含该文件
|
|
26
26
|
6. 根据优化目标标记可能需要的 hello-* 质量技能(如性能优化标记 hello-perf,UI 优化标记 hello-ui)
|
|
27
|
-
7. 重写
|
|
27
|
+
7. 重写 `state_path`:记录主线目标=当前优化目标、基线指标、守卫命令、下一步设为第一轮迭代的具体动作
|
|
28
28
|
|
|
29
29
|
results log 格式:
|
|
30
30
|
```
|
|
@@ -77,7 +77,7 @@ iteration commit metric delta guard status description
|
|
|
77
77
|
### Phase 7: Log
|
|
78
78
|
- 追加一行到 results log
|
|
79
79
|
- status: baseline / keep / discard / crash / no-op
|
|
80
|
-
- 重写
|
|
80
|
+
- 重写 `state_path`:保持主线目标=当前优化目标,并记录当前迭代轮次、最近一次决策(keep / discard / crash)、当前最佳指标、下一步动作
|
|
81
81
|
|
|
82
82
|
### Phase 8: Repeat
|
|
83
83
|
- 如果 iterations > 0 且 current_iteration >= max_iterations → 输出总结并停止
|
|
@@ -90,7 +90,7 @@ iteration commit metric delta guard status description
|
|
|
90
90
|
- 总迭代次数 / 保留次数 / 丢弃次数
|
|
91
91
|
- 最有效的 3 个改进
|
|
92
92
|
- results log 路径
|
|
93
|
-
- 重写
|
|
93
|
+
- 重写 `state_path`:将“主线目标”保留为本次优化目标,“正在做什么”更新为已完成,保留最终结论摘要,清空阻塞项,并给出可立即执行的下一步(如继续优化、停止、切换目标)
|
|
94
94
|
|
|
95
95
|
## 安全规则
|
|
96
96
|
- 使用 `git revert`(保留历史)而非 `git reset --hard`(丢失历史)
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ~plan
|
|
3
|
-
description: 结构化规划工作流 —
|
|
3
|
+
description: 结构化规划工作流 — 需求澄清、方案确认、任务分解与方案包生成(~plan 命令)
|
|
4
4
|
policy:
|
|
5
5
|
allow_implicit_invocation: false
|
|
6
6
|
---
|
|
7
7
|
Trigger: ~plan [description]
|
|
8
8
|
|
|
9
|
-
`~plan`
|
|
10
|
-
执行 `~plan` 时,通用阶段边界按当前已加载 bootstrap 执行;本 skill 负责补充 `~plan`
|
|
11
|
-
`.helloagents/` 在本 skill
|
|
9
|
+
`~plan` 是实现前的主规划命令。它负责需求澄清、方案设计、任务拆解与方案写入;直接显式执行 `~plan` 时,默认停在“形成可执行方案”,只有用户明确授权继续时才继续执行。
|
|
10
|
+
执行 `~plan` 时,通用阶段边界按当前已加载 bootstrap 执行;本 skill 负责补充 `~plan` 的需求澄清、方案确认、方案包写入与继续执行要求。
|
|
11
|
+
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`,`.ralph-*.json` 保持项目本地;若 `project_store_mode=repo-shared`,知识库、`DESIGN.md` 与 `plans/` / `archive/` 按当前上下文中已注入的项目知识/方案目录解析。
|
|
12
12
|
|
|
13
13
|
## 铁律
|
|
14
14
|
- 在用户确认方案之前,禁止编写任何实现代码、创建任何实现文件、或执行任何实现操作
|
|
15
15
|
- 需求澄清阶段不读取实现类技能(hello-ui / hello-test / hello-verify 等),需求明确后再按需读取
|
|
16
|
-
-
|
|
17
|
-
-
|
|
16
|
+
- 方案必须整理为可执行产物,不停留在泛化建议
|
|
17
|
+
- 若当前任务来自 `~auto`,则“开始执行”视为已包含在 `~auto` 授权内;方案包写入后默认继续执行,只有命中阻塞判定时才停下
|
|
18
18
|
- 涉及 UI 时,当前方案包中的 UI 决策优先于 `.helloagents/DESIGN.md`;`.helloagents/DESIGN.md`(按当前项目存储模式解析)优先于通用 UI 规则
|
|
19
19
|
|
|
20
20
|
## 流程
|
|
@@ -22,7 +22,7 @@ Trigger: ~plan [description]
|
|
|
22
22
|
### 1. 上下文收集与需求澄清准备
|
|
23
23
|
|
|
24
24
|
已有项目:
|
|
25
|
-
- 按当前已加载 bootstrap 的“.helloagents/
|
|
25
|
+
- 按当前已加载 bootstrap 的“.helloagents/ 文件读取优先级”和“项目文件”规则恢复上下文;若当前消息明确要继续上次任务,或会话刚经历恢复 / 压缩,先读取 `state_path`,再用当前用户消息、显式命令、活跃方案包 / PRD 与代码事实确认当前任务
|
|
26
26
|
- 在需求澄清前,至少确认 `.helloagents/context.md`、`.helloagents/guidelines.md`(按当前项目存储模式解析);涉及 UI 时,如存在 `.helloagents/DESIGN.md`(按当前项目存储模式解析),一并读取现有设计契约
|
|
27
27
|
- 只扫描与当前需求直接相关的代码文件,用于形成假设和识别约束
|
|
28
28
|
|
|
@@ -49,7 +49,7 @@ Trigger: ~plan [description]
|
|
|
49
49
|
- 选项必须体现当前前沿水准
|
|
50
50
|
- 每个选项都要有具体、可执行的视觉特征描述
|
|
51
51
|
|
|
52
|
-
### 3.
|
|
52
|
+
### 3. 方案确认
|
|
53
53
|
|
|
54
54
|
基于已确认需求,给出 2-3 个可行方案:
|
|
55
55
|
- 每个方案说明架构思路与关键取舍
|
|
@@ -81,12 +81,12 @@ Trigger: ~plan [description]
|
|
|
81
81
|
- `tasks.md`
|
|
82
82
|
- `contract.json`
|
|
83
83
|
- 写 `contract.json` 时,至少落成以下字段:`verifyMode`、`reviewerFocus`、`testerFocus`;涉及 UI 时再写 `ui.required`、`ui.designContract` 与 `ui.sourcePriority`
|
|
84
|
-
- 只有在 UI
|
|
84
|
+
- 只有在 UI 方向确需先明确时,才额外写 `ui.styleAdvisor.required`、`ui.styleAdvisor.reason` 与 `ui.styleAdvisor.focus`;它复用 `.helloagents/.ralph-advisor.json`,不是默认常驻步骤
|
|
85
85
|
- 只有在 UI 验收确有收益时,才额外写 `ui.visualValidation.required`、`ui.visualValidation.reason`、`ui.visualValidation.screens` 与 `ui.visualValidation.states`;不要把视觉验收扩成所有 UI 任务的固定步骤
|
|
86
86
|
- 只有在 `T3`、非 UI 的高风险审查或确需额外跨模型建议时,才写 `advisor.required`、`advisor.reason`、`advisor.focus` 与 `advisor.preferredSources`;不要把 advisor 变成默认常驻流程
|
|
87
87
|
- 使用 `scripts/plan-contract.mjs write` 写 `contract.json`,不要让后续检查脚本再从 `plan.md` 的自然语言说明里猜验证主路径
|
|
88
88
|
- 涉及 UI 的项目:生成或更新 `.helloagents/DESIGN.md`(按当前项目存储模式解析);若原文件不存在,先按模板建立最小设计契约,再写入已确认的稳定设计决策
|
|
89
|
-
- 重写
|
|
89
|
+
- 重写 `state_path`,其中“主线目标”写本次规划要完成的目标,不保留其他任务的内容
|
|
90
90
|
|
|
91
91
|
知识库完整创建与归档按当前已加载 bootstrap 的后续规则执行。
|
|
92
92
|
|
|
@@ -95,10 +95,10 @@ Trigger: ~plan [description]
|
|
|
95
95
|
展示方案摘要后,仅在是否进入执行仍构成阻塞决策时才询问用户:
|
|
96
96
|
- 开始执行 → 继续进入 `~build`
|
|
97
97
|
- 修改方案 → 返回方案细化
|
|
98
|
-
- 暂不执行,保留方案 → 更新 `
|
|
98
|
+
- 暂不执行,保留方案 → 更新 `state_path`;“主线目标”写当前已确认方案要解决的问题,下一步写为“方案已确认;执行需用户明确启动”
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
如果用户已明确表示继续执行,则视为授权成立,可直接继续执行。
|
|
101
|
+
如果当前任务来自 `~auto`,且方案包已足够支撑实现、也未命中阻塞判定,则默认直接进入 `~build`,不再追加一次“是否开始执行”的询问。
|
|
102
102
|
|
|
103
103
|
## 方案包要求
|
|
104
104
|
|
|
@@ -7,16 +7,16 @@ policy:
|
|
|
7
7
|
Trigger: ~prd [description]
|
|
8
8
|
|
|
9
9
|
执行 `~prd` 时,不读取 `~plan` 的 command skill;只有当前流程明确需要时,才继续读取对应的 hello-* 技能。
|
|
10
|
-
执行 `~prd` 时,通用阶段边界按当前已加载 bootstrap 执行;本 skill 负责补充规格探索、PRD
|
|
11
|
-
`.helloagents/` 在本 skill
|
|
10
|
+
执行 `~prd` 时,通用阶段边界按当前已加载 bootstrap 执行;本 skill 负责补充规格探索、PRD 写入与继续执行要求。
|
|
11
|
+
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`,`.ralph-*.json` 保持项目本地;若 `project_store_mode=repo-shared`,知识库、`DESIGN.md` 与 `plans/` / `archive/` 按当前上下文中已注入的项目知识/方案目录解析。
|
|
12
12
|
|
|
13
13
|
## 铁律
|
|
14
14
|
- 在用户确认方案之前,禁止编写任何实现代码、创建任何文件、或执行任何实现操作。
|
|
15
15
|
- 每个维度的选项必须体现当前前沿水准。若当前已加载 bootstrap 含审美/体验规则则遵循其要求;否则至少给出具体、可执行、非泛化的视觉特征,不确定时主动搜索查阅。
|
|
16
16
|
- 用户说"跳过"某维度 → 跳过,不生成该文件。不强迫用户讨论不关心的维度。
|
|
17
17
|
- 大项目检测:涉及多个独立子系统时,先帮用户分解为子项目,每个子项目走独立的 ~prd 循环。
|
|
18
|
-
-
|
|
19
|
-
- 涉及 UI 时,`prd/03-ui-design.md`
|
|
18
|
+
- 若当前任务来自 `~auto`,则 PRD / 任务 / 契约写入后默认继续执行;只有真实阻塞时才停在规格阶段。
|
|
19
|
+
- 涉及 UI 时,`prd/03-ui-design.md` 负责记录本次产品/功能的 UI 决策;项目级稳定设计契约同步写入 `.helloagents/DESIGN.md`(按当前项目存储模式解析)
|
|
20
20
|
|
|
21
21
|
## PRD 维度清单
|
|
22
22
|
|
|
@@ -58,7 +58,7 @@ Trigger: ~prd [description]
|
|
|
58
58
|
### 1. 上下文收集
|
|
59
59
|
|
|
60
60
|
已有项目:
|
|
61
|
-
- 按当前已加载 bootstrap 的“.helloagents/
|
|
61
|
+
- 按当前已加载 bootstrap 的“.helloagents/ 文件读取优先级”和“项目文件”规则恢复上下文;若当前消息明确要继续上次任务,或会话刚经历恢复 / 压缩,先读取 `state_path`,再用当前用户消息、显式命令、活跃方案包 / PRD 与代码事实确认当前任务
|
|
62
62
|
- 在进入维度探索前,至少确认 `.helloagents/context.md`、`.helloagents/guidelines.md`,并只扫描与当前产品范围直接相关的代码和配置
|
|
63
63
|
|
|
64
64
|
全新项目(无 .helloagents/ 目录):
|
|
@@ -102,26 +102,26 @@ c. AI 总结该维度的决策结果,进入下一个维度
|
|
|
102
102
|
- 按 templates/plans/prd/ 的模板格式,仅写入用户未跳过的维度文件
|
|
103
103
|
- 生成 tasks.md(每个任务包含具体文件路径、预期变更、完成标准、验证方式;任务独立可验证;依赖顺序明确)
|
|
104
104
|
- 生成 decisions.md(贯穿全程的决策日志)
|
|
105
|
-
- 生成 `contract.json`(至少包含 `verifyMode`、`reviewerFocus`、`testerFocus`;涉及 UI 时补 `ui.required`、`ui.designContract`、`ui.sourcePriority
|
|
105
|
+
- 生成 `contract.json`(至少包含 `verifyMode`、`reviewerFocus`、`testerFocus`;涉及 UI 时补 `ui.required`、`ui.designContract`、`ui.sourcePriority`;仅在确需先明确审美方向时再补 `ui.styleAdvisor.required`、`ui.styleAdvisor.reason`、`ui.styleAdvisor.focus`;仅在确需视觉验收时再补 `ui.visualValidation.required`、`ui.visualValidation.reason`、`ui.visualValidation.screens`、`ui.visualValidation.states`;仅在确需独立 advisor 时,再补 `advisor.required`、`advisor.reason`、`advisor.focus`、`advisor.preferredSources`)
|
|
106
106
|
- 使用 `scripts/plan-contract.mjs write` 写 `contract.json`,不要只把验证路径留在自然语言说明里
|
|
107
107
|
- 涉及 UI 的项目:生成或更新 `.helloagents/DESIGN.md`(按当前项目存储模式解析);若原文件不存在,先按模板建立最小设计契约,再同步已确认的稳定 UI 决策
|
|
108
|
-
- 重写
|
|
108
|
+
- 重写 `state_path`,其中“主线目标”写本次 PRD 要完成的产品 / 功能目标,不保留其他任务的内容
|
|
109
109
|
|
|
110
110
|
输出 PRD 完整度摘要:已覆盖 N/13 个维度,建议后续补充的维度(如有)。
|
|
111
111
|
|
|
112
112
|
### 5. 执行决策
|
|
113
113
|
|
|
114
114
|
展示 PRD 摘要后,仅在是否进入执行仍构成阻塞决策时才询问用户:
|
|
115
|
-
- 开始执行 → 重写 `
|
|
115
|
+
- 开始执行 → 重写 `state_path`(“主线目标”保持当前 PRD 目标,下一步设为第一个任务的具体动作)
|
|
116
116
|
- 修改 PRD / 补充维度 → 回到对应维度继续讨论
|
|
117
|
-
- 暂不执行,保留方案 → 重写 `
|
|
117
|
+
- 暂不执行,保留方案 → 重写 `state_path`(“主线目标”保持当前 PRD 目标,下一步设为“方案已确认;执行需用户明确启动”)
|
|
118
118
|
|
|
119
|
-
如果用户已对当前 PRD 或继续执行作出明确同意,视为执行授权成立,可直接进入执行,或按需先补一轮 `~plan`
|
|
120
|
-
|
|
119
|
+
如果用户已对当前 PRD 或继续执行作出明确同意,视为执行授权成立,可直接进入执行,或按需先补一轮 `~plan` 明确实现方案。
|
|
120
|
+
如果当前任务来自 `~auto`,且 PRD 已整理成可执行任务、也未命中阻塞判定,则默认继续进入 `~build`,必要时先补一轮轻量 `~plan`,不再额外询问一次“是否开始执行”。
|
|
121
121
|
|
|
122
|
-
### 6.
|
|
122
|
+
### 6. 继续执行
|
|
123
123
|
|
|
124
|
-
按 tasks.md 逐项完成,每项进入当前已加载 bootstrap 中定义的统一执行流程,完成后同步重写
|
|
124
|
+
按 tasks.md 逐项完成,每项进入当前已加载 bootstrap 中定义的统一执行流程,完成后同步重写 `state_path`。
|
|
125
125
|
任务状态标记仅写入 tasks.md、验收清单或验证结果;普通说明、方案解释、状态汇报不用 [√] / [-] / [ ]。
|
|
126
126
|
所有任务完成后进入当前已加载 bootstrap 中定义的 VERIFY / CONSOLIDATE 收尾阶段。
|
|
127
127
|
可并行的任务标记后用子代理并行执行(不同子代理不改同一文件)。
|