ai-project-manage-cli 4.0.22 → 5.0.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/README.md +23 -12
- package/dist/index.js +360 -1345
- package/package.json +4 -11
- package/template/apm.config.json +1 -24
- package/template/deploy/README.md +0 -3
- package/template/skills/apm-apply-change/SKILL.md +0 -191
- package/template/skills/apm-deploy/SKILL.md +0 -135
- package/template/skills/apm-dev/SKILL.md +0 -161
- package/template/skills/apm-propose/SKILL.md +0 -123
- package/template/skills/apm-propose/design-instruction.md +0 -94
- package/template/skills/apm-propose/propose-instruction.md +0 -81
- package/template/skills/apm-propose/specs-instruction.md +0 -114
- package/template/skills/apm-propose/tasks-instruction.md +0 -90
- package/template/skills/apm-refine/SKILL.md +0 -99
- package/template/skills/apm-refine/apm-refine-template.md +0 -73
- package/template/skills/apm-review/SKILL.md +0 -111
- package/template/skills/apm-review/output-template.md +0 -60
- package/template/theater-skills/README.md +0 -13
- package/template/theater-skills/apm-theater-backend/SKILL.md +0 -115
- package/template/theater-skills/apm-theater-backend/apm-theater-api-template.md +0 -146
- package/template/theater-skills/apm-theater-backend/apm-theater-backend-template.md +0 -132
- package/template/theater-skills/apm-theater-dev/SKILL.md +0 -174
- package/template/theater-skills/apm-theater-prd/SKILL.md +0 -98
- package/template/workitems/README.md +0 -20
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-project-manage-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "命令行工具:后续用于调用平台后端 API 完成运维与自动化操作",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -17,16 +17,11 @@
|
|
|
17
17
|
"build": "rm -rf dist && esbuild src/index.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/index.js && tsc --noEmit -p tsconfig.json",
|
|
18
18
|
"prepublishOnly": "npm run build",
|
|
19
19
|
"test": "vitest run",
|
|
20
|
-
"test:watch": "vitest"
|
|
21
|
-
"test:init": "vitest run tests/cli-init.test.ts",
|
|
22
|
-
"test:pull": "vitest run tests/cli-pull.test.ts",
|
|
23
|
-
"test:cursor": "vitest run tests/cursor.test.ts"
|
|
24
|
-
|
|
20
|
+
"test:watch": "vitest"
|
|
25
21
|
},
|
|
26
22
|
"devDependencies": {
|
|
27
23
|
"@types/node": "^22.0.0",
|
|
28
24
|
"typescript": "~5.6.0",
|
|
29
|
-
"@types/ws": "~8.18.1",
|
|
30
25
|
"esbuild": "~0.28.0",
|
|
31
26
|
"vitest": "~4.1.5",
|
|
32
27
|
"@types/dockerode": "~4.0.1"
|
|
@@ -35,12 +30,10 @@
|
|
|
35
30
|
"node": ">=18"
|
|
36
31
|
},
|
|
37
32
|
"dependencies": {
|
|
38
|
-
"ws": "~8.20.0",
|
|
39
33
|
"listpage-http": "~0.0.318",
|
|
40
34
|
"commander": "~14.0.3",
|
|
41
35
|
"yaml": "~2.8.4",
|
|
42
36
|
"minio": "~8.0.7",
|
|
43
|
-
"dockerode": "~5.0.0"
|
|
44
|
-
"@cursor/sdk": "~1.0.13"
|
|
37
|
+
"dockerode": "~5.0.0"
|
|
45
38
|
}
|
|
46
|
-
}
|
|
39
|
+
}
|
package/template/apm.config.json
CHANGED
|
@@ -1,26 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"frontendDeploy": {
|
|
4
|
-
"endpoint": "",
|
|
5
|
-
"port": 9000,
|
|
6
|
-
"useSsl": false,
|
|
7
|
-
"accessKey": "",
|
|
8
|
-
"secretKey": "",
|
|
9
|
-
"bucket": ""
|
|
10
|
-
},
|
|
11
|
-
"backendDeploy": {
|
|
12
|
-
"registryHost": "",
|
|
13
|
-
"registryNamespace": "",
|
|
14
|
-
"registryUser": "",
|
|
15
|
-
"registryPassword": "",
|
|
16
|
-
"remoteHost": "",
|
|
17
|
-
"remotePort": 2376,
|
|
18
|
-
"remoteProtocol": "https",
|
|
19
|
-
"caPath": "",
|
|
20
|
-
"certPath": "",
|
|
21
|
-
"keyPath": "",
|
|
22
|
-
"envFilePath": "",
|
|
23
|
-
"containerPortsMappings": ["3000:3000"],
|
|
24
|
-
"dockerNetwork": ""
|
|
25
|
-
}
|
|
2
|
+
"name": ""
|
|
26
3
|
}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: apm-apply-change
|
|
3
|
-
description: 在 .apm/workitems/<requirementId>/ 按 tasks.md 逐项实现、勾选;一项任务一个 commit。遇事实性阻塞(如规划与代码严重不符)须停止执行,仅陈述事实与需用户提供的材料,不替用户决策或列方案。/opsx:apply 同此技能。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# APM 工作项:按任务实现
|
|
7
|
-
|
|
8
|
-
根据工作项目录下的 **`tasks.md`** 驱动实现:**读规划 → 做代码 → 对账元数据 → 勾选 → 单独 commit**,直至全部完成或遇硬阻塞;上下文以 **`.apm/workitems/<requirementId>/`** 内文件为准。
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## 输入
|
|
13
|
-
|
|
14
|
-
| 字段 | 规则 |
|
|
15
|
-
| --- | --- |
|
|
16
|
-
| **`requirementId`** | **推荐显式提供**(与 `.apm/workitems/<requirementId>/` 目录名一致)。 |
|
|
17
|
-
|
|
18
|
-
若本轮未提供 `requirementId`:
|
|
19
|
-
|
|
20
|
-
1. 若对话中已能**唯一**确定工作项目录名,则用之。
|
|
21
|
-
2. 否则查看 **`.apm/workitems/`** 下子目录:若**仅有一个**,自动采用;若**多个**,**按目录名字典序取第一个**作为本次工作项,并在回复中列出当时可见的候选名,声明 **使用工作项:`<requirementId>`** 及如何覆盖(例如下次显式给出 id)。**不要**调用 AskUserQuestion,**不要**停下来让用户当场选择。
|
|
22
|
-
|
|
23
|
-
**不要**为澄清需求而反问用户。若执行中发现**无法在无决策前提下继续**的事实性问题(见上文 **「停止执行」**),**不要**用推断顶过去。
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 停止执行(优先于继续推进)
|
|
28
|
-
|
|
29
|
-
若在实施过程中**发现**任一情况,**立即停止**本技能所驱动的后续实现与勾选(不再继续下一项任务),仅在会话中输出:
|
|
30
|
-
|
|
31
|
-
1. **客观事实**:已读到的文件/路径、与代码或任务条目的**具体矛盾点**(可摘引,避免主观评价)。
|
|
32
|
-
2. **当前进度**:处理到 `tasks.md` 的哪一条、仓库是否已有未提交改动(若有,说明范围)。
|
|
33
|
-
3. **需要用户提供什么**:为继续推进所**缺的信息或决策**(例如:以何者为准、是否接受某类改动、需确认的业务口径)。用**清单**列出,**一句一项**。
|
|
34
|
-
|
|
35
|
-
**禁止**:给出「建议你先改 A / 再改 B」「可选方案 1/2/3」「宜采用…」等**替用户决策**或**行动建议**;不指导用户如何改文档、不预设优先级。
|
|
36
|
-
|
|
37
|
-
**允许**:描述「若不补充某信息则无法继续」的**逻辑关系**(仍不展开成方案)。
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 工作项路径与必备文件
|
|
42
|
-
|
|
43
|
-
- **根路径**:**`.apm/workitems/<requirementId>/`**
|
|
44
|
-
- **必备**:**`tasks.md`**(含 `- [ ]` / `- [x]` 待办)。若不存在或无可执行条目:**阻塞**,说明须先完成 **apm-propose**(或手工补齐 `tasks.md`)。
|
|
45
|
-
- **强烈建议读**:**`prd.md`**(范围与验收);实现时按需 **Read** **`proposal.md`**、**`design.md`**、**`specs/`**(与 **`tasks-instruction.md`** 中每条任务的元数据一致)。
|
|
46
|
-
- **进度**:仅由 **`tasks.md`** 中复选框统计「已完成 / 总数」。
|
|
47
|
-
|
|
48
|
-
### 单会话读取(可选减负)
|
|
49
|
-
|
|
50
|
-
同一轮连续执行多项任务时:**`prd.md` / `design.md` / 各 spec** 若已在会话内读过且无疑虑,不必每个任务重复全文 Read;以**当前任务行**及元数据指向的 spec/设计段落为准,必要时对文件 **Read(偏移)** 或再读全文。
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Steps
|
|
55
|
-
|
|
56
|
-
### 1. 锚定工作项
|
|
57
|
-
|
|
58
|
-
确定 **`requirementId`** 与工作项根路径;声明 **使用工作项:`<requirementId>`**(若依上节规则自动选定,须说明如何覆盖)。
|
|
59
|
-
|
|
60
|
-
### 2. 读取 `tasks.md` 并判断状态
|
|
61
|
-
|
|
62
|
-
- **Read** **`.apm/workitems/<requirementId>/tasks.md`**。
|
|
63
|
-
- 若文件缺失、为空、或无任何 `- [ ]`:**停止**,提示先具备可执行 `tasks`(规划阶段)。
|
|
64
|
-
- 若全部已为 `- [x]`:**可**直接汇报「已全部完成」(仅作事实陈述,不建议是否提交或发 MR)。
|
|
65
|
-
|
|
66
|
-
### 3. 读取实现上下文(按任务需要)
|
|
67
|
-
|
|
68
|
-
开始**第一个**未勾选任务前,至少 **Read**:
|
|
69
|
-
|
|
70
|
-
- **`prd.md`**(若存在;与验收相关条款)
|
|
71
|
-
- 与任务相关的 **`design.md`** 片段、**`specs/`** 下对应文件(见任务条目的 **需求编号** / 描述)
|
|
72
|
-
|
|
73
|
-
不要求每次任务都重读全部规划文件;以 **`tasks.md` 当前项** + **缺口再 Read** 为准。
|
|
74
|
-
|
|
75
|
-
### 4. 展示当前进度
|
|
76
|
-
|
|
77
|
-
在对话中简要展示:
|
|
78
|
-
|
|
79
|
-
- **工作项**:`requirementId`
|
|
80
|
-
- **进度**:「N/M 个任务已完成」(由 `tasks.md` 勾选统计)
|
|
81
|
-
- **当前将处理**:下一条 `- [ ]` 的摘要(含组号/编号如 `2.1`)
|
|
82
|
-
|
|
83
|
-
### 5. 实现任务(循环直至完成或阻塞)
|
|
84
|
-
|
|
85
|
-
对每一条 **未勾选** 任务(建议按 `tasks.md` 自上而下顺序):
|
|
86
|
-
|
|
87
|
-
1. **说明**正在处理哪一项(编号 + 简述)。
|
|
88
|
-
2. **实现**所需代码/配置/迁移等;改动保持**最小**、与该项描述一致。
|
|
89
|
-
3. **标记完成前**在回复或备注中收集依据(与 **`tasks-instruction.md`** 子列表字段对齐即可):
|
|
90
|
-
- **需求编号**:本实现对应 specs / tasks 中的哪条需求或场景。
|
|
91
|
-
- **预期改动路径** 与 **实际改动文件**:若有合理偏差,简要说明原因。
|
|
92
|
-
- **验证用例编号**(若任务中有)。
|
|
93
|
-
- **验证结果** / **完成标准**:如何确认本项已达成(可简短)。
|
|
94
|
-
4. 仅在依据已齐、且自洽通过后,将 **`tasks.md`** 中对应行 **`- [ ]` 改为 `- [x]`**。
|
|
95
|
-
5. **Git**:本待办对应的**实现 + 勾选**等改动,**单独 `git commit` 一次**(**一项待办 = 一个 commit**;勿把多项待办混在同一 commit)。提交信息建议包含 `requirementId` 与任务编号或简述。
|
|
96
|
-
|
|
97
|
-
**何时停止(不继续下一项)**——与上文 **「停止执行」** 一致:
|
|
98
|
-
|
|
99
|
-
- **`design` / `specs` / `tasks` 与当前代码或彼此严重不一致**,以致无法按任务字面含义在**不臆造**的前提下完成 → **按「停止执行」输出**(事实 + 需用户提供的材料),**不**建议先改哪份文档、不改哪些。
|
|
100
|
-
- 命令失败、环境错误、权限等**硬阻塞** → 说明原因、失败点、已执行步骤;**不**给排障步骤或替代命令建议(除非任务本身要求执行某命令且该命令已写在任务/文档中)。
|
|
101
|
-
- 用户中断。
|
|
102
|
-
|
|
103
|
-
**何时仍可继续**(仅当满足):任务表述略含糊,但可在 **prd / design / specs / tasks** 已有文字内**自洽**完成;若有**假设**,在回复中写清**假设**(仍不反问)。一旦假设会触及「以谁为准」的**产品/架构决策**,转 **「停止执行」**。
|
|
104
|
-
|
|
105
|
-
### 6. 完成或暂停时展示状态
|
|
106
|
-
|
|
107
|
-
- **本会话**完成了哪些任务(可列勾选项摘要)。
|
|
108
|
-
- **总体进度**:「N/M 个任务已完成」。
|
|
109
|
-
- 若**全部完成**:仅陈述事实(进度与勾选状态),**不**建议后续流程(MR/发布/归档等)。
|
|
110
|
-
- 若**暂停**:按 **「停止执行」** 或硬阻塞格式输出,**无**「可选后续」或方案建议。
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## 实现过程中的输出(示例)
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
## 正在实施:<requirementId>
|
|
118
|
-
|
|
119
|
-
处理任务 3/7:2.1 实现导出接口
|
|
120
|
-
[...实现过程...]
|
|
121
|
-
✓ 任务完成 · commit <short-sha> <subject>
|
|
122
|
-
|
|
123
|
-
处理任务 4/7:2.2 …
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 全部完成时的输出(示例)
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
## 实现完成
|
|
132
|
-
|
|
133
|
-
**工作项:** <requirementId>
|
|
134
|
-
**进度:** 7/7 个任务已完成 ✓
|
|
135
|
-
|
|
136
|
-
### 本会话已完成
|
|
137
|
-
- [x] …
|
|
138
|
-
- [x] …
|
|
139
|
-
|
|
140
|
-
(每项待办均已对应独立 commit。)
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## 暂停时的输出(示例)
|
|
146
|
-
|
|
147
|
-
```
|
|
148
|
-
## 实现已暂停
|
|
149
|
-
|
|
150
|
-
**工作项:** <requirementId>
|
|
151
|
-
**进度:** 4/7 个任务已完成
|
|
152
|
-
|
|
153
|
-
### 事实与原因
|
|
154
|
-
<客观描述:文件/行/与任务或代码的矛盾点>
|
|
155
|
-
|
|
156
|
-
### 需要用户提供(或决策)
|
|
157
|
-
- …
|
|
158
|
-
- …
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
(无方案列表、无「建议」;用户补充信息后可再次运行本技能。)
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## 约束
|
|
166
|
-
|
|
167
|
-
- 持续执行待办直至完成、**停止执行**或硬阻塞。
|
|
168
|
-
- 开始前须已能对照 **`tasks.md`** 与 **`prd.md`**(及任务所需的 design/spec);**不要**在未读清当前任务依赖时盲改。
|
|
169
|
-
- 任务表述有歧义时,仅在**无需用户决策**的前提下依据 **specs / design / prd** 推断;一旦涉及**以谁为准**或**严重不一致**,**停止执行**(见上文)。
|
|
170
|
-
- **不**因「发现规划与代码不符」而**主动建议**修改 `design.md` / `specs/` / `tasks.md`;**停止**并说明事实与需用户提供的材料即可。
|
|
171
|
-
- 代码改动保持最小、与**当前任务**范围一致。
|
|
172
|
-
- 未完成需求/验证对账前,**不要**将任务勾为完成。
|
|
173
|
-
- 验证失败或依据不足时,保持 **`- [ ]`**,并明确写出缺口。
|
|
174
|
-
- 若任务元数据缺失(需求编号、预期改动路径、完成标准等),在可能范围内于实现前**补全或按 tasks 模板推断**,并在说明中注明。
|
|
175
|
-
- 每完成一项任务并记录依据后,**立即**更新勾选并**随即**单独 `git commit`。
|
|
176
|
-
- 遇硬阻塞时暂停并说明原因(**不**给出替代命令或排查建议,除非任务/文档已写明);
|
|
177
|
-
- 需求不清且无法自洽推断时,**停止执行**并列出需用户提供的材料;**不反问用户**。
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 与规划流程的衔接
|
|
182
|
-
|
|
183
|
-
- **`tasks.md`** 须由 **apm-propose**(或等价流程)生成并符合 **`tasks-instruction.md`** 格式(`- [ ]`、元数据子列表等),否则本技能无法可靠追踪。
|
|
184
|
-
- 若执行中发现 **`design` / `specs` 与代码严重不一致**:**停止执行**,按上文输出事实与**需用户提供**的决策/信息;**不**建议先改哪类工件、不代用户排优先级。
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 流动工作流
|
|
189
|
-
|
|
190
|
-
- **可分段调用**:可在部分任务完成后结束会话,下次同一工作项继续。
|
|
191
|
-
- **规划修订**:由用户在**流程外**修订 `design.md` / `specs/` / `tasks.md` 后,再触发本技能;本技能执行中**不因发现不符**而主动改规划文件或提出修改方案。
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: apm-deploy
|
|
3
|
-
description: 路径相对仓库根 `<repoRoot>`;`.apm` 常被 gitignore,须直接 Read 或用 Shell 验磁盘,勿仅靠索引/搜索。用户仅提供需求 ID;目标部署环境从当前任务说明读取(勿读 requirement-status.yaml 的 env);读 deploy README 与 workitems 后按 README 执行并汇总;不足则终止;@ 本技能、自动部署或「apm-deploy」时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# APM 自动部署(按 `.apm/deploy/README.md`)
|
|
7
|
-
|
|
8
|
-
- **部署怎么做**:**唯一**以仓库 **`.apm/deploy/README.md`** 为准(用户/团队维护)。文档有问题时**不得**猜着部署或绕过文档擅自执行生产级危险操作。
|
|
9
|
-
- **参数从哪来**:用户**只需提供需求 ID**(`requirementId`);**目标部署环境**(如 `test` / `online`)从**当前任务说明/指令**中解析(平台自动部署节点会在指令中写明「部署到 XX 环境」);其余上下文从 **`.apm/workitems/<requirementId>/`** 内按需 **Read**,**不向用户追问**分支等 README 未写明的部署参数。
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 路径基准:项目(仓库)根目录 **`<repoRoot>`**
|
|
14
|
-
|
|
15
|
-
本技能中出现的 **`.apm/...` 路径一律相对于 `<repoRoot>`**,**不得**相对于当前打开的文件、编辑器所在子目录、终端当前工作目录或其它隐含目录拼接。**找错文件视为执行错误**:若首次 Read 失败且路径明显可能在子目录下被误解析,**允许**仅因「路径基准错误」纠正一次——改为从 `<repoRoot>` 起算后重试该 Read。
|
|
16
|
-
|
|
17
|
-
**如何确定 `<repoRoot>`**
|
|
18
|
-
|
|
19
|
-
1. **优先**:当前 Cursor **工作区根**(Workspace Folder)即为本 Rush/Git 仓库根(通常含 **`rush.json`**、**`.apm/`**、**`apps/`** 等同级结构的那一层)。
|
|
20
|
-
2. **若工作区误开在子目录**:向上查找同时存在 **`rush.json`**(或根 **`package.json`** + 单仓约定)且存在 **`.apm/`** 的目录,该目录即为 `<repoRoot>`;**不得**把仅有嵌套 `.apm` 副本的深层目录当作根(除非 README 明确声明)。
|
|
21
|
-
3. **工具调用**:**Read / 编辑 / 执行 Shell** 时,凡本技能写明的路径均写成 **从 `<repoRoot>` 起的相对路径**(例如 `.apm/deploy/README.md`、`.apm/workitems/<requirementId>/requirement-status.yaml`)。需要绝对路径时,用 `<repoRoot>` 拼接,**不要**使用 `./apps/.../.apm/...` 这类错误前缀。
|
|
22
|
-
4. **Shell**:默认 **`cwd` = `<repoRoot>`**;仅当 README **明确**要求 `cd` 到子目录时再切换,执行完若需继续本技能后续步骤应回到 `<repoRoot>` 或严格按 README 指定目录执行下一步。
|
|
23
|
-
|
|
24
|
-
### `.gitignore`:被忽略的目录仍可能在磁盘上
|
|
25
|
-
|
|
26
|
-
**`.apm/`**(及其中 `deploy`、`workitems` 等)在多数仓库里会被 **`.gitignore`**,因此:
|
|
27
|
-
|
|
28
|
-
- **语义搜索、代码索引、默认排除 gitignore 的 ripgrep/grep** 往往**扫不到**这些路径 → **绝不能**因为「搜不到」就认定文件不存在或跳过本技能。
|
|
29
|
-
- **必须以磁盘为准**:对 `.apm/deploy/README.md`、`.apm/workitems/<requirementId>/...` 使用 **Read 工具并给出从 `<repoRoot>` 起的完整相对路径**(不要先依赖「在全仓搜索 `.apm`」来发现路径)。
|
|
30
|
-
- 若 **Read** 报错且不确定是真不存在还是被工具策略拦截:在仓库根执行 Shell(**`cwd`** = `<repoRoot>`),例如 **`test -e .apm/deploy/README.md`**、**`ls .apm/workitems/<requirementId>`**(读磁盘,**不依赖** `git ls-files`)。
|
|
31
|
-
- **`git status` 不列出未跟踪/被 ignore 的文件是正常的**,不代表本地没有该文件。
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 输入与前置
|
|
36
|
-
|
|
37
|
-
| 字段 | 规则 |
|
|
38
|
-
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
39
|
-
| **`requirementId`** | **必填**。与 **`<repoRoot>/.apm/workitems/<requirementId>/`** 目录名一致;**缺则索要,不猜测**。 |
|
|
40
|
-
| **`<repoRoot>`** | 见上节「路径基准」;所有 `.apm` 路径均锚定于此。 |
|
|
41
|
-
| **`deployEnv`(目标部署环境)** | **从当前任务说明/指令解析**(例如「将项目部署到 online 环境」→ `deployEnv=online`)。**禁止**从 **`requirement-status.yaml`** 读取 `env`——该文件由 `apm pull` 生成,**不含**部署环境字段。若任务说明未给出目标环境:**终止**,说明「任务说明未指定部署环境」。 |
|
|
42
|
-
| **工作项上下文** | 路径 **`<repoRoot>/.apm/workitems/<requirementId>/`**。README 需要何种信息(命名空间、标签、产物说明等),**优先在该目录下找对应文件**;**`requirement-status.yaml`** 仅含 `id` / `status` / `title`,用于核对需求身份,**不作为部署环境来源**。若 README 指向其它文件名(如任务状态、发布说明),在同一目录 **Read** 即可。 |
|
|
43
|
-
| **参数仍不足** | 若 README 要求某信息且在工作项目录、任务说明与 README 附属文档中**仍无法取得**:**不得**向用户口头凑参数;**终止**并列出「README 要什么 / 已查了哪些路径 / 缺什么」。 |
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 流程总览
|
|
48
|
-
|
|
49
|
-
| 序号 | 步骤 | 说明 |
|
|
50
|
-
| ---- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
51
|
-
| 1 | **阅读部署文档** | **Read** 全文:`.apm/deploy/README.md`(及 README 明确要求阅读的附属文档)。 |
|
|
52
|
-
| 2 | **文档验收(门禁)** | 判定 README 是否足以执行;不足则**终止**(见「文档验收」)。 |
|
|
53
|
-
| 3 | **解析部署环境并加载工作项上下文** | 门禁通过后:从**任务说明**解析 `deployEnv`;按 README 所需 **Read** `.apm/workitems/<requirementId>/` 下其它文件;仍缺参数则**终止**(见「输入与前置」)。 |
|
|
54
|
-
| 4 | **按文档执行** | **严格**按 README 的步骤、顺序与命令执行,并用上一步解析出的参数(含 `deployEnv`、替换占位符、导出环境变量);不添加 README 未要求的步骤。 |
|
|
55
|
-
| 5 | **对用户回复** | 用**Markdown 表格**汇总各步与命令结果(见文末模板);简述阻塞或跳过原因。 |
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 步骤 1:阅读 `.apm/deploy/README.md`
|
|
60
|
-
|
|
61
|
-
1. 在 **`<repoRoot>`** 下 **Read**(相对路径):`.apm/deploy/README.md`。路径**必须**以仓库根为前缀,**禁止**从子项目目录推导同名路径。**禁止**仅用 codebase 搜索来找该文件(易被 gitignore 漏掉);**直接 Read** 上述路径。
|
|
62
|
-
2. **文件不存在或不可读**:先用上节「`.gitignore`」方式区分是真不存在还是路径基准错误;确认路径正确且磁盘上仍无文件时**立即停止**本流程。在对话中明确写出:路径、错误(如 ENOENT、权限),**不要**尝试默认部署命令或猜测流程。
|
|
63
|
-
3. **存在则读全文**(含其指向的同级/子路径文档时:若 README 写明「须同时阅读某文件」,则 **Read** 该文件;若链断裂或文件缺失,按「文档验收 → 文档缺陷」处理)。
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 步骤 2:文档验收(门禁,失败即终止)
|
|
68
|
-
|
|
69
|
-
在阅读完成后、加载工作项上下文与执行任何部署命令前,必须自检下列项。**任一条不满足**:**不得执行部署**;在对话中**逐条列出问题**(引用 README 片段或章节标题即可),然后**终止本技能流程**。
|
|
70
|
-
|
|
71
|
-
| 验收项 | 不满足时的表现(示例) |
|
|
72
|
-
| ------------ | --------------------------------------------------------------------------------------- |
|
|
73
|
-
| **可执行性** | 缺少前置条件(账号、CLI、密钥、目标环境)、缺少具体命令或顺序混乱到无法唯一确定下一步。 |
|
|
74
|
-
| **一致性** | 前后矛盾(例如同一环境两套冲突命令)、版本/工具要求互相打架。 |
|
|
75
|
-
| **完整性** | 引用不存在的脚本/配置文件、Broken link、关键占位符未替换说明。 |
|
|
76
|
-
| **清晰性** | 读完仍**不知道**该如何在本仓库完成一次部署(步骤含糊到无法落地)。 |
|
|
77
|
-
|
|
78
|
-
**特别约定(用户维护文档)**
|
|
79
|
-
|
|
80
|
-
- 文档若有错别字、过时链接、危险指令描述不清等:**直接报出问题**,**不**替用户「纠正文档后继续」。
|
|
81
|
-
- **阅读之后仍然不知道如何部署**:视为「清晰性」不满足,**终止**,说明「依据当前 README 无法确定可执行步骤」及缺失项。
|
|
82
|
-
- **不要**因文档差而自行检索互联网或套用其它项目的部署习惯来代替 README。
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 步骤 3:解析部署环境并加载工作项上下文
|
|
87
|
-
|
|
88
|
-
仅在「文档验收」**全部通过**后执行。
|
|
89
|
-
|
|
90
|
-
1. **解析 `deployEnv`**:从**当前任务说明/指令**提取目标部署环境(如 `test`、`online`)。平台自动部署节点典型表述为「将项目部署到 {环境} 环境」。**不得**打开 `requirement-status.yaml` 找 `env` 字段。
|
|
91
|
-
2. 确认目录 **`<repoRoot>/.apm/workitems/<requirementId>/`**(工具相对路径:`.apm/workitems/<requirementId>/`)存在;不存在则**终止**(不要假想 ID)。
|
|
92
|
-
3. 根据 README 描述的占位符或变量,**Read** 该目录内相应文件(路径锚定 `<repoRoot>`);**`requirement-status.yaml`** 可用于核对 `id` / `status` / `title`,**不含**部署环境。
|
|
93
|
-
4. 若 README 需要的某项信息在任务说明、工作项目录与 README 附属文档中**不存在或未填写**:**终止**,说明缺失字段与已查路径;**不**请用户在对话里补充(用户约定仅提供需求 ID 与任务说明中的环境)。
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## 步骤 4:按文档执行
|
|
98
|
-
|
|
99
|
-
仅在「工作项上下文」**已满足 README 对参数的要求**后执行。
|
|
100
|
-
|
|
101
|
-
1. **严格对照** README:顺序、工作目录(若文档指定 `cd`)、环境变量、所用 CLI(如 `rush`、`docker`、`kubectl`、`apm deploy-frontend` 等)均以文档为准;将步骤 3 得到的 **`deployEnv` 等**按 README 约定注入命令或环境(禁止凭猜测填值)。**默认在 `<repoRoot>` 执行**;遵守本仓库 **AGENTS.md**(如 Rush 安装/构建约定),但**不**执行 README **未写出**的额外构建/发布步骤。
|
|
102
|
-
2. **每条命令**记录:是否成功、退出码或关键输出摘要、失败时的 stderr(可截断至可读长度)。
|
|
103
|
-
3. **失败处理**:与 **Guardrails** 一致——默认**失败即终止**后续部署步骤,在表格与摘要中写明失败命令与原因;**不因网络抖动等做无文档依据的多轮重试**(除非 README **明确**要求重试策略)。
|
|
104
|
-
4. **安全**:若 README 要求确认交互(如 `Are you sure?`),按文档处理;文档要求人工审批而 Agent 无法完成时,执行到该步即停止,并标明「需人工完成」。
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## 步骤 5:对用户回复(状态汇总)
|
|
109
|
-
|
|
110
|
-
回复中**必须包含**一张汇总表,建议结构:
|
|
111
|
-
|
|
112
|
-
| 阶段 | 内容 | 结果 |
|
|
113
|
-
| ------ | ------------------------------------------------------------ | ------------------------------------- |
|
|
114
|
-
| 阅读 | `.apm/deploy/README.md`(及 README 要求阅读的附属文档) | 成功 / 失败(原因) |
|
|
115
|
-
| 验收 | 文档是否足以执行 | 通过 / **未通过**(列具体问题) |
|
|
116
|
-
| 上下文 | 任务说明中的 `deployEnv` + `.apm/workitems/<requirementId>/` | 成功 / **失败**(缺环境或未找到文件) |
|
|
117
|
-
| 执行 | 按 README 执行的命令或步骤摘要(可按行拆分) | 每步 成功 / 失败 / 跳过 / 需人工 |
|
|
118
|
-
| 结论 | 部署是否完成 README 所述目标 | 是 / 否 / 未执行(门禁或上下文未过) |
|
|
119
|
-
|
|
120
|
-
若门禁或上下文未通过:**不要**出现「已尝试部署」的误导性表述;表格中「执行」阶段填 **未执行(原因)**。
|
|
121
|
-
|
|
122
|
-
**可选**:表格外一两句话概括当前阻塞点或已成功完成的范围。
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Guardrails
|
|
127
|
-
|
|
128
|
-
- **gitignore 不等于不存在**:`.apm` 下文件可能不入 Git 索引;**禁止**用「搜索无结果」代替 **Read** 或磁盘校验。
|
|
129
|
-
- **路径锚定 `<repoRoot>`**:凡 `.apm/deploy`、`.apm/workitems` 等路径**仅**相对仓库根;**禁止**因当前焦点在 monorepo 内某一子目录而在错误基底上拼路径。
|
|
130
|
-
- **文档优先**:无合格 `.apm/deploy/README.md` 解读结果,**不部署**。
|
|
131
|
-
- **部署环境来源**:`deployEnv` **只**来自当前任务说明/指令;**禁止**从 `requirement-status.yaml` 读取 `env`(该字段已不再由 `apm pull` 写入)。
|
|
132
|
-
- **用户只给 ID + 任务环境**:除 **`requirementId`** 与任务说明中的**目标环境**外,**不依赖**用户在对话中口头补充密钥、分支等;这些信息须来自 **工作项目录** 或 README 已写明的本地/CI 约定。缺数据则**终止并写明缺口**,而非让用户「现场补一句」。
|
|
133
|
-
- **失败即终止**:在文档与上下文明确的前提下,任一步骤失败 → 停止后续步骤,仅记录状态;**例外**仅允许 Agent **自身**错误(如错目录)纠正后对**同一步**再试一次,仍失败则终止。
|
|
134
|
-
- **不臆造**:README 未写的命令、环境、目标集群/命名空间,**不补充**;任务说明与工作项 **未提供**的字段**不得**编造。
|
|
135
|
-
- **不报假成功**:命令失败或未完成 README 目标时,结论必须为「否」或等价表述。
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: apm-dev
|
|
3
|
-
description: 按需求 ID 全自动开发:切分支、Read defect.xml(无/空内容→新功能;有内容→修 Bug 可短路至提交)、读 PRD、按改动规模选择 Quick 或 Spec、提交并推送、同步产物;子 Agent 承担编码与规划落地;当用户 @ 本技能、提及全自动开发或「apm-dev」时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# APM 全自动开发(按需求 ID)
|
|
7
|
-
|
|
8
|
-
用户给出 **需求 ID**(`requirementId`,与工作项目录名一致)。**缺 ID 时索要,不猜测。**
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 输入
|
|
12
|
-
|
|
13
|
-
| 字段 | 规则 |
|
|
14
|
-
| --- | --- |
|
|
15
|
-
| **`requirementId`** | **必填**。与 `.apm/workitems/<requirementId>/` 目录名一致。 |
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 技能文件定位(apm-propose / apm-apply-change)
|
|
20
|
-
|
|
21
|
-
Spec 路径依赖的技能**仅**来自 **`.apm/skills/`**。执行前父 Agent **须 Read**:
|
|
22
|
-
|
|
23
|
-
| 技能 | 路径 |
|
|
24
|
-
| --- | --- |
|
|
25
|
-
| **apm-propose** | `.apm/skills/apm-propose/SKILL.md` |
|
|
26
|
-
| **apm-apply-change** | `.apm/skills/apm-apply-change/SKILL.md` |
|
|
27
|
-
|
|
28
|
-
instruction 子文件随该目录类推(如 `.apm/skills/apm-propose/propose-instruction.md`)。若上述 `SKILL.md` **不存在或不可读**:**不得**进入 Spec 子流程;在表格中标记失败原因(例如需先 `apm init` 或同步 `.apm/skills`),并停止步骤 5。
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 流程总览
|
|
33
|
-
|
|
34
|
-
| 序号 | 步骤 | 说明 |
|
|
35
|
-
| --- | --- | --- |
|
|
36
|
-
| 1 | **切分支** | 在仓库根目录执行 `apm branch <requirementId>` |
|
|
37
|
-
| 2 | **缺陷清单(分流)** | **Read** `defect.xml`:**无文件或无有效内容** → 跳过,进入步骤 3(**新功能**);**有内容** → **修复 Bug**:Quick 修 Bug(子 Agent)成功后**跳过步骤 3~5**,直达步骤 **6** |
|
|
38
|
-
| 3 | **读 PRD + 成本评估** | **Read** `.apm/workitems/<requirementId>/prd.md`,判定 Quick / Spec(步骤 2 未走修 Bug 短路时执行,即新功能流程) |
|
|
39
|
-
| 4 | **Quick 开发** | 仅当判定为「改动成本较小」时执行;由 **子 Agent** 写代码 |
|
|
40
|
-
| 5 | **Spec 开发** | 仅当判定为「改动成本较大」时执行;先 **apm-propose** 再 **apm-apply-change**,均由 **子 Agent** 按对应技能执行 |
|
|
41
|
-
| 6 | **提交与推送** | `git` 提交并 `push`,工作区干净 |
|
|
42
|
-
| 7 | **同步产物** | `apm upload-artifact <requirementId>`,将工作项目录内 Markdown 产物同步到平台 |
|
|
43
|
-
| 8 | **对用户回复** | **一张 Markdown 表格**汇总各步执行结果(见文末模板) |
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 步骤 1:`apm branch`
|
|
48
|
-
|
|
49
|
-
1. 在**仓库/工作区根目录**执行:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
apm branch <requirementId>
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
2. 记录:命令是否成功、简要输出或错误信息(写入最终表格)。**失败则按「Guardrails → 失败即终止」处理**,不为此命令做多轮重试(除非属 Agent 用错目录等可纠正失误)。
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 步骤 2:读取缺陷清单(defect.xml)
|
|
60
|
-
|
|
61
|
-
1. 父 Agent 使用 **Read** 工具读取:`.apm/workitems/<requirementId>/defect.xml`(缺陷列表,格式以平台同步为准)。
|
|
62
|
-
2. **分流(非失败)**:
|
|
63
|
-
- **无文件、仍读不到、或文件无有效内容**(空文件、仅空白、无实质缺陷条目等;具体结构以同步格式为准):**不视为步骤失败**。表格步骤 2 填 **跳过(无 defect 内容 → 新功能)**,**直接进入步骤 3**。
|
|
64
|
-
- **文件存在且有有效内容**:视为本轮为 **修复 Bug 流程**(与步骤 4 同属 Quick 形态,对照 **defect.xml + 必要时 prd.md**,目标是消除所列缺陷):
|
|
65
|
-
- 父 Agent 已通过 **Read** 掌握 `defect.xml`;若启动子 Agent,在委派提示中写明 **`requirementId`**、工作项路径、`defect.xml` 路径,以及「逐项对照缺陷列表修复,改动范围最小化」。
|
|
66
|
-
- 使用 **Task** 工具,`subagent_type: generalPurpose`,**readonly: false**,委派子 Agent:
|
|
67
|
-
- 自行 **Read** `.apm/workitems/<requirementId>/defect.xml`(及需要时的 `prd.md`)。
|
|
68
|
-
- 按缺陷列表直接改代码;遵守本仓库构建与依赖约定(AGENTS.md)。
|
|
69
|
-
- 完成后在返回中说明:修了哪些缺陷项、改了哪些路径、本地检查结果(若有)。
|
|
70
|
-
- 父 Agent 根据子 Agent 返回填写表格步骤 2 **状态**(成功 / 失败);**失败则按 Guardrails 终止**。
|
|
71
|
-
4. **短路规则**:步骤 2 走 **修复 Bug** 且子 Agent **成功**后:**不再执行步骤 3~5**(表格中步骤 3、4、5 均填 **跳过(缺陷短路)**),直接进入 **步骤 6**(提交与推送)。
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## 步骤 3:读取 PRD 并评估改动成本
|
|
76
|
-
|
|
77
|
-
**条件**:仅当步骤 2 **未**以「`defect.xml` **有内容**且 Quick 修 Bug **成功** → 短路至步骤 6」结束时执行(含:`defect.xml` 缺失、拉取后仍无、或**无有效内容**而走新功能流程)。
|
|
78
|
-
|
|
79
|
-
1. **Read** 全文:`.apm/workitems/<requirementId>/prd.md`。
|
|
80
|
-
2. 若失败则**停止后续实现**,仅在表格中标记失败原因。
|
|
81
|
-
3. **不**为评估向用户发起追问;信息不足时倾向 **Spec**(保守)。
|
|
82
|
-
|
|
83
|
-
### Quick(较小)与 Spec(较大)判定参考
|
|
84
|
-
|
|
85
|
-
**倾向 Quick**(满足越多越适用):
|
|
86
|
-
|
|
87
|
-
- 影响范围局部:少量文件或单一层次(例如仅前端组件、或仅一个后端模块小改)。
|
|
88
|
-
- 无新表结构/大规模迁移/权限模型变更。
|
|
89
|
-
- PRD 验收点清晰且数量少(经验上 **≤3** 条独立验收维度)。
|
|
90
|
-
- 不需要跨多服务的架构裁定即可开工。
|
|
91
|
-
|
|
92
|
-
**倾向 Spec**(命中任一条即可):
|
|
93
|
-
|
|
94
|
-
- 前后端联动、多包改造或新公共抽象。
|
|
95
|
-
- 新数据模型、迁移、或安全/审计/权限相关。
|
|
96
|
-
- PRD 范围大、条款多,或存在明显「待确认/多方案」需先规划。
|
|
97
|
-
- 评估认为不先产出 **proposal / design / specs / tasks** 则难以保证实现与验收对齐。
|
|
98
|
-
|
|
99
|
-
在表格「步骤 3」中写明结论:**Quick** 或 **Spec**,以及**一行内**理由(关键词即可)。
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## 步骤 4:Quick 开发模式(子 Agent)
|
|
104
|
-
|
|
105
|
-
**条件**:步骤 3 判定为 **Quick**(且未走步骤 2 缺陷短路)。
|
|
106
|
-
|
|
107
|
-
1. 父 Agent 已通过 **Read** 掌握 `prd.md`;若启动新子 Agent,在委派提示中写明 **`requirementId`**、工作项路径、以及「实现须严格对照 PRD,改动范围最小化」。
|
|
108
|
-
2. 使用 **Task** 工具,`subagent_type: generalPurpose`,**readonly: false**,委派子 Agent:
|
|
109
|
-
- 自行 **Read** `.apm/workitems/<requirementId>/prd.md`(若会话未带全文)。
|
|
110
|
-
- 按 PRD 直接改代码;遵守本仓库构建与依赖约定(AGENTS.md)。
|
|
111
|
-
- 完成后在返回中说明:改了哪些路径、如何对照验收、是否通过本地可执行的检查(若子 Agent 跑了 `rushx build` / 测试等则写明结果)。
|
|
112
|
-
3. 父 Agent 根据子 Agent 返回在表格中填写步骤 4 **状态**;本模式下步骤 5 填 **跳过**。
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## 步骤 5:Spec 开发模式(子 Agent)
|
|
117
|
-
|
|
118
|
-
**条件**:步骤 3 判定为 **Spec**(且未走步骤 2 缺陷短路)。
|
|
119
|
-
|
|
120
|
-
1. 父 Agent **Read** **apm-propose**、**apm-apply-change** 的 `SKILL.md`(**仅** `.apm/skills/` 下路径,见上节)。
|
|
121
|
-
2. **子 Agent A(规划)**:Task `generalPurpose`,提示其自行 **Read** `.apm/skills/apm-propose/SKILL.md` 并完整遵循:在 `.apm/workitems/<requirementId>/` 生成 **proposal、design、specs、tasks** 等工件(顺序与依赖以 SKILL 为准)。
|
|
122
|
-
3. **子 Agent B(实现)**:待 A 成功落盘后,再 Task `generalPurpose`,提示其自行 **Read** `.apm/skills/apm-apply-change/SKILL.md` 并完整遵循:按 **`tasks.md`** 驱动实现与勾选;遵守该技能中的停止条件与 commit 约定。
|
|
123
|
-
4. 若 **apm-propose** 未产出可用 **`tasks.md`**,不得强行进入 **apm-apply-change**;表格中标记阻塞原因。
|
|
124
|
-
5. 表格中步骤 4 填 **跳过**;步骤 5 分两行或合并一行写清 propose / apply 状态(见表格模板)。
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 步骤 6:提交并推送
|
|
129
|
-
|
|
130
|
-
在仓库根目录执行(可用一条复合命令或分步;以实际仓库远程为准):
|
|
131
|
-
|
|
132
|
-
1. `git status`:确认变更范围。
|
|
133
|
-
2. 若有未提交变更:`git add -A`,然后 `git commit -m "feat(req-<requirementId>): <简短说明>"`(说明应概括本轮需求实现;若子 Agent 已按任务多次 commit,则可能无需新 commit,以 `status` 为准)。
|
|
134
|
-
3. `git push`:推送到当前分支对应远程(首次必要时 `-u origin <branch>`)。
|
|
135
|
-
4. 再次 `git status`:**须为干净工作区**(无未提交、未跟踪的重要残留;若有应记录为失败或说明例外)。
|
|
136
|
-
|
|
137
|
-
将命令结果、最终分支名、是否已 push、工作区是否干净写入表格。
|
|
138
|
-
|
|
139
|
-
## 步骤 7:对用户回复(表格)
|
|
140
|
-
|
|
141
|
-
对用户回复 **必须包含一张 Markdown 表格**,汇总 **步骤 1~7**(步骤 8 为呈现表格本身,可不单独成行)。表头建议:
|
|
142
|
-
|
|
143
|
-
| 步骤 | 内容 | 结果 |
|
|
144
|
-
| --- | --- | --- |
|
|
145
|
-
| 1 | `apm branch <requirementId>` | 成功 / 失败(原因) |
|
|
146
|
-
| 2 | Read `defect.xml`:无/空→新功能;有内容→Quick 修 Bug(子 Agent) | 跳过(无内容·新功能)/ 成功 / 失败;短路时注明 |
|
|
147
|
-
| 3 | 读 PRD + 成本评估 | Quick 或 Spec;一行理由 / **跳过(缺陷短路)** |
|
|
148
|
-
| 4 | Quick 开发(子 Agent) | 成功 / 失败 / **跳过** |
|
|
149
|
-
| 5 | Spec:apm-propose → apm-apply-change(子 Agent) | 成功 / 失败 / **跳过**;可注明子步骤 |
|
|
150
|
-
| 6 | commit & push;工作区干净 | 成功 / 失败(原因) |
|
|
151
|
-
|
|
152
|
-
**可选**:在表格外增加**简短**一句话摘要(例如当前分支名、阻塞点);若用户此前约定「仅表格」,则可仅输出表格。
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Guardrails
|
|
157
|
-
|
|
158
|
-
- **失败即终止**:在用户提供的 **`requirementId`** 等参数合法、命令与路径按本技能书写的前提下,任一步骤(含 `apm branch`、读文件、子 Agent、`git`)**一旦失败**:**停止后续所有步骤**,仅在表格中记录失败步骤与原因;**不要**为登录、依赖、网络、命令结果等做**多次**或「轮番」重试。
|
|
159
|
-
- **例外(Agent 自身失误)**:若失败明显由执行 Agent **用错工作目录、读错/漏写路径** 等导致,**允许**纠正 `cwd` 或路径后**仅对该失败步骤再执行一次**;纠正后仍失败则**立即终止**,不再扩展尝试。
|
|
160
|
-
- **不要**在无 `prd.md`的情况下编造需求实现。
|
|
161
|
-
- **子 Agent** 提示中须带 **`requirementId`** 与仓库根路径意识,避免改错工作树。
|