@gepeiyu/smart 0.1.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/LICENSE +21 -0
- package/README.md +94 -0
- package/SKILL.md +269 -0
- package/bin/smart.js +3 -0
- package/package.json +39 -0
- package/reference/file-structure.md +61 -0
- package/reference/issue-lifecycle.md +96 -0
- package/reference/smart-yaml-fields.md +66 -0
- package/scripts/smart-archive.sh +138 -0
- package/scripts/smart-env.sh +145 -0
- package/scripts/smart-guard.sh +214 -0
- package/scripts/smart-handoff.sh +127 -0
- package/scripts/smart-state.sh +365 -0
- package/smart-archive/SKILL.md +102 -0
- package/smart-build/SKILL.md +317 -0
- package/smart-design/SKILL.md +264 -0
- package/smart-hotfix/SKILL.md +200 -0
- package/smart-issue/SKILL.md +259 -0
- package/smart-tweak/SKILL.md +176 -0
- package/smart-verify/SKILL.md +232 -0
- package/src/deploy.js +47 -0
- package/src/index.js +54 -0
- package/src/init.js +80 -0
- package/src/platforms.js +20 -0
- package/src/status.js +31 -0
- package/src/uninstall.js +31 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: smart-hotfix
|
|
3
|
+
description: "Smart 预设路径:Bug fix / 热修复。跳过 brainstorming,直接 issue → build → verify → archive。适用于行为修复、不涉及新 capability 设计的场景。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Smart 预设路径:Hotfix
|
|
7
|
+
|
|
8
|
+
快速 bug fix 工作流:issue → build → verify → archive。跳过 brainstorming 和完整 plan,适用于行为修复、不涉及新 capability 设计的场景。
|
|
9
|
+
|
|
10
|
+
**适用条件**(必须全部满足):
|
|
11
|
+
1. 修复已有功能的 bug,不新增 capability
|
|
12
|
+
2. 不涉及接口变更或架构调整
|
|
13
|
+
3. 改动范围可预估(通常 ≤ 2 个文件)
|
|
14
|
+
|
|
15
|
+
**不适用**:如修复过程发现需要架构调整,应升级为完整 `/smart` 流程。
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 流程(preset workflow,6 步)
|
|
20
|
+
|
|
21
|
+
### 0. 输出语言约束
|
|
22
|
+
|
|
23
|
+
精简版 OpenSpec 产物必须使用触发本次工作流的用户请求语言。
|
|
24
|
+
|
|
25
|
+
执行链路:issue → build → verify → archive。Hotfix 为每个阶段提供默认决策:精简开启、直接构建、按规模验证、验证通过后进入归档前最终确认。
|
|
26
|
+
|
|
27
|
+
开始前先定位 Smart 脚本:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
SMART_ENV="${SMART_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/smart/scripts/smart-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
31
|
+
if [ -z "$SMART_ENV" ]; then
|
|
32
|
+
echo "ERROR: smart-env.sh not found. Ensure the smart skill is installed." >&2
|
|
33
|
+
return 1
|
|
34
|
+
fi
|
|
35
|
+
. "$SMART_ENV"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1. 快速开启(preset issue)
|
|
39
|
+
|
|
40
|
+
复用 Smart issue 能力创建 change,但使用 hotfix 默认值:不执行 `openspec-explore` 长探索,直接进入精简 change 创建。
|
|
41
|
+
|
|
42
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。禁止跳过此步骤。
|
|
43
|
+
|
|
44
|
+
技能加载后,按其指引创建精简版产物:
|
|
45
|
+
- `proposal.md` — 问题描述 + 根因分析 + 修复目标(无需方案对比)
|
|
46
|
+
- `design.md` — 修复方案(1 个即可,无需多方案对比)
|
|
47
|
+
- `tasks.md` — 修复任务清单
|
|
48
|
+
- **无需 delta spec**(除非修复改变了已有 spec 的验收场景)
|
|
49
|
+
|
|
50
|
+
初始化 Smart 状态文件:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
"$SMART_BASH" "$SMART_STATE" init <name> hotfix
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
初始化后验证状态:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
"$SMART_BASH" "$SMART_STATE" check <name> issue
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
阶段守卫完成 issue → build 过渡:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
"$SMART_BASH" "$SMART_GUARD" <change-name> issue --apply
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
检查 `auto_transition` 决定是否继续:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
"$SMART_BASH" "$SMART_STATE" next <name>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- `NEXT: auto` → 继续 Step 2
|
|
75
|
+
- `NEXT: manual` → 暂停,按 `HINT` 提示用户手动运行 `/<SKILL>`
|
|
76
|
+
|
|
77
|
+
### 2. 直接构建(preset build)
|
|
78
|
+
|
|
79
|
+
使用 hotfix 默认值:`build_mode: direct`,默认 `review_mode: off`。跳过 Superpowers `brainstorming` 和 `writing-plans`(除非任务 > 3 个;若超过 3 个任务,转入 `/smart-build` 的计划与执行方式选择——注意这不触发 full workflow 升级,仅切换执行方式)。
|
|
80
|
+
|
|
81
|
+
继续或开始修改前,按 `smart/reference/dirty-worktree.md` 协议处理未提交改动。若归因后发现修复范围超出 hotfix,按本文件“升级条件”处理。
|
|
82
|
+
|
|
83
|
+
**立即执行:** 按 tasks.md 逐个执行任务:
|
|
84
|
+
|
|
85
|
+
1. 读取 `openspec/changes/<name>/tasks.md`,获取未完成任务列表
|
|
86
|
+
2. 对每个未完成任务:
|
|
87
|
+
- 根据任务描述修改代码
|
|
88
|
+
- 运行项目格式化命令(如 `mvn spotless:apply`、`npm run format` 等)
|
|
89
|
+
- 运行相关测试确认通过
|
|
90
|
+
- 将 tasks.md 中对应 `- [ ]` 勾选为 `- [x]`
|
|
91
|
+
- 提交代码,commit message 格式:`fix: <简述修复>`
|
|
92
|
+
3. 全部任务完成后,显式运行项目相关测试和构建命令
|
|
93
|
+
|
|
94
|
+
执行 hotfix 期间,只要运行程序、测试、构建或手动验证时出现崩溃、异常行为、测试失败或构建失败,必须使用 Skill 工具加载 Superpowers `systematic-debugging` 技能。在完成根因调查前,不得提出或实施源码修复。
|
|
95
|
+
|
|
96
|
+
具体调查、最小失败测试、修复验证和保持当前 change 验证闭环的要求,按 `smart/reference/debug-gate.md` 执行。
|
|
97
|
+
|
|
98
|
+
**如修复影响已有 spec 验收场景**:
|
|
99
|
+
- 在 `openspec/changes/<name>/specs/<capability>/spec.md` 创建 delta spec
|
|
100
|
+
- 仅包含 `## MODIFIED Requirements` 部分
|
|
101
|
+
|
|
102
|
+
### 3. 根因消除检查
|
|
103
|
+
|
|
104
|
+
**在运行 build guard 之前执行**,确保修复确实消除了问题根因:
|
|
105
|
+
|
|
106
|
+
1. 读取 proposal.md 中的 bug 描述和根因
|
|
107
|
+
2. 搜索验证问题代码不再存在
|
|
108
|
+
3. 如根因未消除,回到 Step 2 继续修复(此时仍在 build 阶段,无需状态回退)
|
|
109
|
+
|
|
110
|
+
**升级条件**:
|
|
111
|
+
- 根因消除检查发现深层架构问题 → 停止 hotfix,按升级条件阻塞确认处理
|
|
112
|
+
- 修复需要额外接口变更 → 停止 hotfix,按升级条件阻塞确认处理
|
|
113
|
+
|
|
114
|
+
根因确认消除后,运行阶段守卫完成 build → verify 过渡:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
"$SMART_BASH" "$SMART_GUARD" <change-name> build --apply
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
状态文件自动更新为 `phase: verify`、`verify_result: pending`,然后进入验证。
|
|
121
|
+
|
|
122
|
+
### 4. 验证(preset verify)
|
|
123
|
+
|
|
124
|
+
复用 `/smart-verify`,由 smart-verify 的规模评估决定轻量或完整验证。
|
|
125
|
+
|
|
126
|
+
**立即执行:** 使用 Skill 工具加载 `smart-verify` 技能。禁止跳过此步骤。
|
|
127
|
+
|
|
128
|
+
无 delta spec 的小范围 hotfix 通常满足轻量验证条件(≤ 3 tasks、≤ 2 files),smart-verify 的规模评估会选择轻量验证路径(6 项快速检查;默认 `review_mode: off` 时不自动派发代码审查)。若用户希望增加审查,可在验证前运行 `"$SMART_BASH" "$SMART_STATE" set <name> review_mode standard` 或 `thorough`。若 hotfix 创建了 delta spec,则根据 smart-verify 的规模评估规则进入完整验证路径。
|
|
129
|
+
|
|
130
|
+
验证通过后,按 `/smart-verify` 的规则将 `.smart.yaml` 的 `verify_result` 记录为 `pass`,归档前不得跳过该状态。验证通过后仍必须进入 `/smart-archive` 的归档前最终确认,不得自动运行归档脚本。
|
|
131
|
+
|
|
132
|
+
### 5. 归档(preset archive)
|
|
133
|
+
|
|
134
|
+
复用 `/smart-archive`。归档前必须满足 `.smart.yaml` 中 `verify_result: pass`,并等待 `/smart-archive` 的归档前最终确认。
|
|
135
|
+
|
|
136
|
+
**立即执行:** 使用 Skill 工具加载 `smart-archive` 技能进行归档。禁止跳过此步骤。
|
|
137
|
+
如有 delta spec,按 smart-archive 规则同步到 main spec,并处理关联 Design Doc 与 Plan 的归档标注。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 连续执行模式
|
|
142
|
+
|
|
143
|
+
<IMPORTANT>
|
|
144
|
+
Hotfix 流程默认 **一次性连续执行**。调用 `/smart-hotfix` 后,agent 在 hotfix 自有步骤间自动推进,不主动停顿。**例外**:若 `auto_transition: false`,则在每个 phase 边界(build/verify/archive 之间)停下,由用户手动运行下一阶段命令——此时连续执行降级为逐阶段手动推进,详见下方「自动衔接下一阶段」。但无论 `auto_transition` 取何值,以下情况都必须暂停等待用户确认:
|
|
145
|
+
|
|
146
|
+
1. 遇到升级条件(见"升级条件"章节),**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确确认**升级为完整流程
|
|
147
|
+
2. 任务超过 3 个转入 `/smart-build` 时的工作区隔离和执行方式选择
|
|
148
|
+
3. 验证阶段(smart-verify)的验证失败决策和分支处理决策
|
|
149
|
+
4. 归档前最终确认(smart-archive 执行归档脚本前)
|
|
150
|
+
|
|
151
|
+
执行顺序:快速开启 → 直接构建 → 根因消除检查 → 验证 → 归档 → 完成
|
|
152
|
+
|
|
153
|
+
每个阶段完成后立即进入下一阶段。阶段内部仍必须按上文要求调用对应 Smart/OpenSpec/Superpowers skill,被调用的 skill 如有自己的用户决策点,按该 skill 规则执行。
|
|
154
|
+
</IMPORTANT>
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 升级条件
|
|
159
|
+
|
|
160
|
+
满足以下**任一**条件时,停止 hotfix 流程,升级为完整 `/smart`:
|
|
161
|
+
|
|
162
|
+
| 条件 | 说明 |
|
|
163
|
+
|------|------|
|
|
164
|
+
| 改动涉及 **3+ 文件** | 超出单点修复范围 |
|
|
165
|
+
| 架构变更 | 新模块、新接口、新依赖 |
|
|
166
|
+
| 数据库 schema 变更 | 结构性调整 |
|
|
167
|
+
| 引入新的 public API | 修复产生了新的对外接口 |
|
|
168
|
+
| 修复范围超出单一函数/模块 | 需要多处协调修改 |
|
|
169
|
+
|
|
170
|
+
满足升级条件时**必须按 `smart/reference/decision-point.md` 的协议暂停并等待用户明确确认**升级为完整 `/smart` 流程。不得直接进入 `/smart-design`,不得自动补充 Design Doc。
|
|
171
|
+
|
|
172
|
+
用户确认升级后,**必须先更新 workflow 和 phase 字段**再进入完整流程:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
"$SMART_BASH" "$SMART_STATE" set <name> workflow full
|
|
176
|
+
"$SMART_BASH" "$SMART_STATE" set <name> phase design
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
然后在当前 change 基础上补充 Design Doc:**立即使用 Skill 工具加载 `smart-design` skill**,后续正常走完整流程。若用户不确认升级,停止 hotfix 并报告当前变更已超出 hotfix 适用范围。
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 退出条件
|
|
184
|
+
|
|
185
|
+
- Bug 已修复,测试通过
|
|
186
|
+
- change 已归档
|
|
187
|
+
- 如有 spec 变更,已同步到 main spec
|
|
188
|
+
- **阶段守卫**:build → verify 前运行 `"$SMART_BASH" "$SMART_GUARD" <change-name> build --apply`,verify → archive 前按 `/smart-verify` 规则运行 `"$SMART_BASH" "$SMART_GUARD" <change-name> verify --apply`
|
|
189
|
+
|
|
190
|
+
## 自动衔接下一阶段
|
|
191
|
+
|
|
192
|
+
按 `smart/reference/auto-transition.md` 执行。关键命令:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
"$SMART_BASH" "$SMART_STATE" next <name>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
- `NEXT: auto` → 调用 `SKILL` 指向的 skill 继续 hotfix 流程(`phase: build` 返回 `smart-hotfix`,`verify` 返回 `smart-verify`,`archive` 返回 `smart-archive`)
|
|
199
|
+
- `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
|
|
200
|
+
- `NEXT: done` → 流程已完成,无需继续
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: smart-issue
|
|
3
|
+
description: "Smart 阶段 1:开启(issue)。用 /smart-issue 调用。从 GitHub Issue(#ID 经 gh 拉取)或描述出发,通过 OpenSpec 探索、澄清,创建 change 结构(proposal + design + tasks + .smart.yaml)。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Smart 阶段 1:issue(开启)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- 无活跃 change,或用户希望创建新 change
|
|
11
|
+
- 触发源:`/smart-issue <描述>` 或 `/smart-issue #<issue-id>`
|
|
12
|
+
|
|
13
|
+
## 步骤
|
|
14
|
+
|
|
15
|
+
### 0. 输出语言约束
|
|
16
|
+
|
|
17
|
+
传递给 OpenSpec 的所有提问和产物要求都必须包含输出语言约束:使用触发本次工作流的用户请求语言。恢复已有 change 且产物已有明确主语言时,除非用户明确要求切换,否则保持该语言。
|
|
18
|
+
|
|
19
|
+
### 1. 触发源解析与需求种子
|
|
20
|
+
|
|
21
|
+
**两种触发方式**:
|
|
22
|
+
|
|
23
|
+
- **`/smart-issue #<id>`**(Issue 驱动):从 GitHub Issue 拉取需求种子。立即执行:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
gh issue view <id> --json number,title,body,comments,labels
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
将 Issue 的 `title` + `body` + `comments` 解析为需求种子(目标/非目标/范围边界/验收场景线索)。记下 `issue_number=<id>` 与 `issue_repo=<owner/repo>`(取 gh 默认 repo,或用户以 `--repo` 指定)。后续阶段会向该 Issue 回写进度,归档时关闭它。
|
|
30
|
+
|
|
31
|
+
- **`/smart-issue <描述>`**(描述驱动):用户描述即需求种子,`issue_number=null`(用户稍后可回填)。
|
|
32
|
+
|
|
33
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过此步骤。
|
|
34
|
+
|
|
35
|
+
技能加载后,按其指引探索问题空间,但不得把一次问答视为足够澄清。以 Issue 正文/用户描述为种子,围绕下列内容继续提问、对齐并形成澄清摘要:
|
|
36
|
+
|
|
37
|
+
- 目标:用户真正要解决的问题和期望结果
|
|
38
|
+
- 非目标:本次明确不做的内容
|
|
39
|
+
- 范围边界:涉及/不涉及的模块、用户、平台或数据
|
|
40
|
+
- 关键未知项:仍不确定的假设、风险或依赖
|
|
41
|
+
- 验收场景草案:至少覆盖核心成功场景和关键边界场景
|
|
42
|
+
|
|
43
|
+
澄清摘要必须包含:目标、非目标、范围边界、关键未知项、验收场景草案。
|
|
44
|
+
|
|
45
|
+
### 1a. PRD 拆分预检(阻塞点)
|
|
46
|
+
|
|
47
|
+
当用户输入是大型 PRD、路线图、完整产品方案,或澄清摘要显示包含多个独立能力、模块、用户路径或里程碑时,必须在创建 OpenSpec artifacts 前评估是否需要拆分为多个 change。
|
|
48
|
+
|
|
49
|
+
拆分预检必须基于已澄清的信息,输出候选拆分清单。每个候选拆分项必须包含:
|
|
50
|
+
|
|
51
|
+
- 建议 change 名称
|
|
52
|
+
- 目标与范围边界
|
|
53
|
+
- 明确非目标
|
|
54
|
+
- 依赖关系或推荐执行顺序
|
|
55
|
+
- 对应的核心验收场景
|
|
56
|
+
|
|
57
|
+
满足任一条件时,应推荐拆分:
|
|
58
|
+
|
|
59
|
+
- PRD 包含多个可独立设计、构建、验证、归档的 capability
|
|
60
|
+
- 涉及多个模块或用户路径,且其中一部分可独立交付
|
|
61
|
+
- 存在明显分阶段里程碑
|
|
62
|
+
- 预计会产生多个 delta spec 或超过 3 个大任务
|
|
63
|
+
- 任一部分失败或延期不应阻塞其他部分进入后续阶段
|
|
64
|
+
|
|
65
|
+
如推荐拆分,必须按 `smart/reference/decision-point.md` 的协议暂停并等待用户选择。
|
|
66
|
+
|
|
67
|
+
用户选择必须包含:
|
|
68
|
+
|
|
69
|
+
- 「创建多个 OpenSpec changes」— 按候选拆分逐个创建独立 change
|
|
70
|
+
- 「保持为一个 change」— 继续单 change 流程,并在 proposal/design/tasks 中记录不拆分原因
|
|
71
|
+
- 「调整拆分方案后继续」— 用户说明调整方向后,重新输出候选拆分清单并再次确认
|
|
72
|
+
|
|
73
|
+
每个被接受的拆分项都必须通过 `/smart-issue` 创建独立 change,不得直接调用 `/opsx:new`。`/smart-issue` 负责同时创建 OpenSpec artifacts 和 `.smart.yaml`,确保每个 change 都进入 Smart 状态机。
|
|
74
|
+
|
|
75
|
+
不得在用户完成 PRD 拆分选择前创建 proposal.md、design.md 或 tasks.md。若用户选择创建多个 change,当前 `/smart-issue` 调用只负责完成拆分确认与调度,随后按用户确认的顺序分别进入每个拆分项的 `/smart-issue`。
|
|
76
|
+
|
|
77
|
+
批量拆分模式下,进入每个拆分项的 `/smart-issue` 时必须明确标注「已确认拆分项」并携带该拆分项的目标、范围、非目标和验收场景。已确认拆分项默认跳过 PRD 拆分预检,除非该拆分项本身仍明显包含多个独立 capability。
|
|
78
|
+
|
|
79
|
+
批量拆分模式下,单个拆分项完成 issue 阶段后不得自动流转到 `/smart-design`。拆分完毕后必须暂停询问用户开始哪一个 change;用户选择后,只推进该 change 进入 `/smart-design`,其他 change 保持 active,稍后通过 `/smart` 恢复。
|
|
80
|
+
|
|
81
|
+
最小断点恢复规则:不新增专用批量状态文件。若批量拆分过程中断,恢复时先检查已创建的 active changes;已存在且包含 `.smart.yaml` 的拆分项不得重复创建,未创建的拆分项按用户已确认的拆分清单继续通过 `/smart-issue` 创建。若对话中已确认的拆分清单不可恢复,必须重新向用户确认拆分清单后再继续。
|
|
82
|
+
|
|
83
|
+
### 1b. 需求澄清完成确认(阻塞点)
|
|
84
|
+
|
|
85
|
+
创建 OpenSpec artifacts 前,必须按 `smart/reference/decision-point.md` 的协议暂停并等待用户确认需求澄清完成。
|
|
86
|
+
|
|
87
|
+
暂停时必须展示澄清摘要:目标、非目标、范围边界、关键未知项、验收场景草案。
|
|
88
|
+
|
|
89
|
+
不得在用户确认需求澄清完成前创建 proposal.md、design.md 或 tasks.md,也不得使用 Skill 工具加载 `openspec-propose` 技能一次性生成全部 artifacts。
|
|
90
|
+
|
|
91
|
+
### 1c. Change 名称确认(阻塞点)
|
|
92
|
+
|
|
93
|
+
创建 change 目录(`openspec new change`)前,必须按 `smart/reference/decision-point.md` 的协议暂停,让用户决定 change 名称。不得自动生成或静默推断 change 名称。
|
|
94
|
+
|
|
95
|
+
OpenSpec change 名称必须是 **kebab-case 英文**(小写字母、数字、连字符;如 `refine-requirements-doc`)。中文或其他不合规名称无效。
|
|
96
|
+
|
|
97
|
+
暂停时必须展示:
|
|
98
|
+
|
|
99
|
+
- 基于已确认澄清摘要派生的 **2-3 个推荐 kebab-case 英文名**,每个附一行说明其隐含范围
|
|
100
|
+
- 一个让用户 **自行输入名称** 的明确选项
|
|
101
|
+
- 提示:**若用户输入中文(或任何非 kebab-case 文本),会被转换为合规的 kebab-case 英文名**,转换结果必须回显给用户确认后才能使用
|
|
102
|
+
|
|
103
|
+
决策选项必须包含:
|
|
104
|
+
|
|
105
|
+
- 选择某个推荐名称
|
|
106
|
+
- 「自行输入名称」——接收用户输入;若已是合规 kebab-case 英文则直接使用;若为中文或其他不合规形式,则转换为合规 kebab-case 英文并回显转换后的名称,确认后再继续
|
|
107
|
+
|
|
108
|
+
不得在用户确认最终 change 名称前运行 `openspec new change` 或创建 `.smart.yaml`。若选定/转换后的名称与已有 change 冲突,必须报告冲突并请用户另选名称。
|
|
109
|
+
|
|
110
|
+
### 2. 创建 Change 结构 + 初始化状态
|
|
111
|
+
|
|
112
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。禁止跳过此步骤。
|
|
113
|
+
|
|
114
|
+
完整 `/smart` 流程默认不得使用 Skill 工具加载 `openspec-propose` 技能;只有用户明确要求一次性生成提案和 artifacts 时才允许加载。
|
|
115
|
+
|
|
116
|
+
技能加载后,按其指引创建 change 骨架,但当 Step 1b 的已确认澄清摘要已存在于对话上下文时,覆盖其"STOP and wait for user direction"行为。
|
|
117
|
+
|
|
118
|
+
如果用户已确认澄清摘要(Step 1b),直接使用该摘要填充产物内容。如果不存在澄清摘要(边缘情况),回退到技能的默认行为,询问用户。
|
|
119
|
+
|
|
120
|
+
change 骨架创建后,按以下标准产物循环逐个生成 `proposal`、`design`、`specs`、`tasks`:
|
|
121
|
+
|
|
122
|
+
**标准产物循环**(对每个 `artifact-id`:`proposal` → `design` → `specs` → `tasks`):
|
|
123
|
+
|
|
124
|
+
1. 刷新状态:`openspec status --change "<name>" --json`
|
|
125
|
+
2. 获取产物指令:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
openspec instructions proposal --change "<name>" --json
|
|
129
|
+
openspec instructions design --change "<name>" --json
|
|
130
|
+
openspec instructions specs --change "<name>" --json
|
|
131
|
+
openspec instructions tasks --change "<name>" --json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
3. 对返回的 JSON 指令载荷,必须:
|
|
135
|
+
- 读取 `dependencies` 中列出的每个已完成依赖产物
|
|
136
|
+
- 以 `template` 作为产物结构
|
|
137
|
+
- 遵循 `instruction` 的指引
|
|
138
|
+
- 将 `context` 和 `rules` 作为约束条件应用,**不得复制到 artifact 内容中**
|
|
139
|
+
- 写入 `resolvedOutputPath`
|
|
140
|
+
- 验证输出文件存在且非空
|
|
141
|
+
4. 每创建一个 artifact 后,重新运行 `openspec status --change "<name>" --json` 确认状态,然后继续下一个 artifact
|
|
142
|
+
|
|
143
|
+
**失败处理**:如果 `openspec instructions` 失败、返回无效 JSON、报告未满足的 `dependencies`、或未提供可用的 `resolvedOutputPath`,必须立即停止 artifact 创建并报告 OpenSpec 错误。不得回退为硬编码文档结构,因为那样会绕过项目规则。
|
|
144
|
+
|
|
145
|
+
**命名与范围守卫**:change name 必须使用 Step 1c 中用户确认的 kebab-case 英文名,不得自动生成、推断或使用非 kebab-case(如中文)名称。变更范围必须与用户描述一致,不得自行扩大或缩小。
|
|
146
|
+
|
|
147
|
+
确认以下产物已创建:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
openspec/changes/<name>/
|
|
151
|
+
├── .openspec.yaml
|
|
152
|
+
├── .smart.yaml
|
|
153
|
+
├── proposal.md # Why + What:问题、目标、范围
|
|
154
|
+
├── design.md # How(高层):架构决策、方案选型
|
|
155
|
+
├── specs/<cap>/spec.md # delta spec
|
|
156
|
+
└── tasks.md # 任务清单(勾选框)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
创建 `.smart.yaml` 状态文件:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
SMART_ENV="${SMART_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/scripts/smart-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
163
|
+
if [ -z "$SMART_ENV" ]; then
|
|
164
|
+
echo "ERROR: smart-env.sh not found. Ensure the smart skill is installed." >&2
|
|
165
|
+
return 1
|
|
166
|
+
fi
|
|
167
|
+
. "$SMART_ENV"
|
|
168
|
+
|
|
169
|
+
if [ -z "$SMART_GUARD" ] || [ -z "$SMART_STATE" ]; then
|
|
170
|
+
echo "ERROR: Smart scripts not found. Ensure the smart skill is installed." >&2
|
|
171
|
+
return 1
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
"$SMART_BASH" "$SMART_STATE" init <name> <full|hotfix|tweak> <issue_number> <issue_repo>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`issue_number` 为 null 时,脚本跳过所有 `gh` 读写(本地流程仍完整);非 null 时,后续阶段会向该 Issue 回写进度,归档时 `smart-archive.sh` 执行 `gh issue close`。
|
|
178
|
+
|
|
179
|
+
### 3. 入口状态验证
|
|
180
|
+
|
|
181
|
+
验证状态机已正确初始化:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
"$SMART_BASH" "$SMART_STATE" check <name> issue
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
验证通过后继续 Step 4。验证失败时脚本会输出具体失败原因。
|
|
188
|
+
|
|
189
|
+
**幂等性**:issue 阶段所有操作可安全重复执行。如 `.smart.yaml` 已处于 `phase: issue` 且产物文件均已存在,跳过已完成步骤,从第一个缺失步骤继续。
|
|
190
|
+
|
|
191
|
+
### 4. 内容完整性检查
|
|
192
|
+
|
|
193
|
+
确认文档内容完整:
|
|
194
|
+
|
|
195
|
+
- **proposal.md**:问题背景、目标、范围、非目标
|
|
196
|
+
- **design.md**:高层架构决策、方案选型、数据流
|
|
197
|
+
- **tasks.md**:任务列表,每个任务有明确描述
|
|
198
|
+
|
|
199
|
+
**文件存在性验证**:逐个确认文件路径存在且非空。任一文件缺失或为空时,不得进入 Step 5 或执行阶段守卫,必须回到创建步骤补充。
|
|
200
|
+
|
|
201
|
+
### 5. 用户审视确认(阻塞点)+ Issue 回写
|
|
202
|
+
|
|
203
|
+
文档创建完成且内容完整性检查通过后,**必须按 `smart/reference/decision-point.md` 的协议暂停并等待用户确认**。不得在用户确认前执行阶段守卫或自动流转。
|
|
204
|
+
|
|
205
|
+
用户确认问题必须以单选题形式呈现,包含以下摘要和选项:
|
|
206
|
+
|
|
207
|
+
**摘要内容**:
|
|
208
|
+
|
|
209
|
+
- **proposal.md**:问题背景、目标、范围
|
|
210
|
+
- **design.md**:高层架构决策、方案选型
|
|
211
|
+
- **tasks.md**:任务数量和关键任务描述
|
|
212
|
+
|
|
213
|
+
**选项**:
|
|
214
|
+
|
|
215
|
+
- 「确认,继续下一阶段」— 产物符合预期,执行阶段守卫流转
|
|
216
|
+
- 「需要调整」— 附带调整说明,修改后重新请求确认
|
|
217
|
+
|
|
218
|
+
用户选择「确认」后,若 `issue_number` 非 null,回写收纳评论到 Issue:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
gh issue comment <n> --body "## Smart 已收纳
|
|
222
|
+
|
|
223
|
+
- **change**: \`<name>\`
|
|
224
|
+
- **issue**: #<n>
|
|
225
|
+
- **阶段计划**: issue → design → build → verify → archive
|
|
226
|
+
- **workflow**: full|hotfix|tweak
|
|
227
|
+
|
|
228
|
+
已创建 OpenSpec change 目录与 \`.smart.yaml\`。接下来进入 design 阶段做深度技术设计。"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
用户选择「需要调整」时,按其说明修改对应文件,然后重新请求确认。
|
|
232
|
+
|
|
233
|
+
## 退出条件
|
|
234
|
+
|
|
235
|
+
- proposal.md、design.md、specs、tasks.md 均已创建且内容完整
|
|
236
|
+
- **用户已确认** proposal、design、tasks 内容符合预期
|
|
237
|
+
- **阶段守卫**:运行 `"$SMART_BASH" "$SMART_GUARD" <change-name> issue --apply`,全部 PASS 后由守卫推进到下一阶段(此步骤更新 `phase` 字段,与 `auto_transition` 无关)
|
|
238
|
+
|
|
239
|
+
退出前必须使用 `--apply`,否则 `.smart.yaml` 仍停留在 `phase: issue`,下一阶段入口检查会失败。
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
"$SMART_BASH" "$SMART_GUARD" <change-name> issue --apply
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
完整流程会自动更新为 `phase: design`;hotfix/tweak preset 会自动更新为 `phase: build`。
|
|
246
|
+
|
|
247
|
+
## 自动衔接下一阶段
|
|
248
|
+
|
|
249
|
+
按 `smart/reference/auto-transition.md` 执行。关键命令:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
"$SMART_BASH" "$SMART_STATE" next <change-name>
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
- `NEXT: auto` → 调用 `SKILL` 指向的 skill 进入下一阶段(`phase: issue` → `SKILL: smart-design`)
|
|
256
|
+
- `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
|
|
257
|
+
- `NEXT: done` → 流程已完成,无需继续
|
|
258
|
+
|
|
259
|
+
hotfix/tweak preset 由对应 preset skill 控制后续流转(phase 直接进入 build),其 `next` 会返回对应 preset skill。
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: smart-tweak
|
|
3
|
+
description: "Smart 预设路径:非 bug 的小改动(tweak)。跳过 brainstorming 和完整 plan,直接 issue → lightweight build → light verify → archive。适用于文案、配置、文档或 prompt 的局部优化。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Smart 预设路径:Tweak
|
|
7
|
+
|
|
8
|
+
Tweak 是 Smart 五阶段能力的预设工作流,不是独立的平行流程。它复用 issue、build、verify、archive 能力,仅跳过 brainstorming 和完整 plan。
|
|
9
|
+
|
|
10
|
+
适用于非 bug 的小范围变更,例如文案调整、配置调整、文档或 prompt 的局部优化。
|
|
11
|
+
|
|
12
|
+
**适用条件**(必须全部满足):
|
|
13
|
+
1. 不新增 capability
|
|
14
|
+
2. 不改变架构
|
|
15
|
+
3. 不涉及接口变化
|
|
16
|
+
4. 通常不超过 3 个 tasks(文件数约束见下方升级条件)
|
|
17
|
+
|
|
18
|
+
**不适用**:如变更过程中发现需要 capability、架构或接口调整,应升级为完整 `/smart` 流程。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 流程(preset workflow,4 阶段)
|
|
23
|
+
|
|
24
|
+
### 0. 输出语言约束
|
|
25
|
+
|
|
26
|
+
精简版 OpenSpec 产物必须使用触发本次工作流的用户请求语言。
|
|
27
|
+
|
|
28
|
+
执行链路:issue → lightweight build → light verify → archive。Tweak 为每个阶段提供默认决策:精简开启、轻量构建、轻量验证、验证通过后进入归档前最终确认。
|
|
29
|
+
|
|
30
|
+
开始前先定位 Smart 脚本:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
SMART_ENV="${SMART_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/smart/scripts/smart-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
34
|
+
if [ -z "$SMART_ENV" ]; then
|
|
35
|
+
echo "ERROR: smart-env.sh not found. Ensure the smart skill is installed." >&2
|
|
36
|
+
return 1
|
|
37
|
+
fi
|
|
38
|
+
. "$SMART_ENV"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 1. 快速开启(preset issue)
|
|
42
|
+
|
|
43
|
+
复用 Smart issue 能力创建 change,但使用 tweak 默认值:不执行 `openspec-explore` 长探索,直接进入精简 change 创建。
|
|
44
|
+
|
|
45
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。禁止跳过此步骤。
|
|
46
|
+
|
|
47
|
+
技能加载后,按其指引创建精简版产物:
|
|
48
|
+
- `proposal.md` — 变更动机 + 目标 + 范围
|
|
49
|
+
- `design.md` — 简短实现说明(无需方案对比)
|
|
50
|
+
- `tasks.md` — 不超过 3 个任务
|
|
51
|
+
- **无需 delta spec**(除非变更改变了已有 spec 的验收场景;一旦需要 delta spec,升级为完整 `/smart`)
|
|
52
|
+
|
|
53
|
+
初始化 Smart 状态文件:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
"$SMART_BASH" "$SMART_STATE" init <name> tweak
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
初始化后验证状态:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
"$SMART_BASH" "$SMART_STATE" check <name> issue
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
阶段守卫完成 issue → build 过渡:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
"$SMART_BASH" "$SMART_GUARD" <change-name> issue --apply
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. 轻量构建(preset build)
|
|
72
|
+
|
|
73
|
+
使用 tweak 默认值:`build_mode: direct`。跳过 Superpowers `brainstorming` 和 `writing-plans`。
|
|
74
|
+
|
|
75
|
+
继续或开始修改前,按 `smart/reference/dirty-worktree.md` 协议处理未提交改动。若归因后发现范围超出 tweak,按本文件“升级条件”处理。
|
|
76
|
+
|
|
77
|
+
**立即执行:** 按 tasks.md 逐个执行任务:
|
|
78
|
+
|
|
79
|
+
1. 读取 `openspec/changes/<name>/tasks.md`,获取未完成任务列表
|
|
80
|
+
2. 对每个未完成任务:
|
|
81
|
+
- 根据任务描述修改目标文件
|
|
82
|
+
- 运行项目格式化命令(如 `mvn spotless:apply`、`npm run format` 等)
|
|
83
|
+
- 运行相关测试确认通过
|
|
84
|
+
- 将 tasks.md 中对应 `- [ ]` 勾选为 `- [x]`
|
|
85
|
+
- 提交代码,commit message 格式:`tweak: <简述变更>`
|
|
86
|
+
3. 全部任务完成后,显式运行项目相关测试和构建命令
|
|
87
|
+
4. 运行阶段守卫完成 build → verify 过渡:
|
|
88
|
+
|
|
89
|
+
执行 tweak 期间,只要运行程序、测试、构建或手动验证时出现崩溃、异常行为、测试失败或构建失败,必须使用 Skill 工具加载 Superpowers `systematic-debugging` 技能。在完成根因调查前,不得提出或实施源码修复。
|
|
90
|
+
|
|
91
|
+
具体调查、最小失败测试、修复验证和保持当前 change 验证闭环的要求,按 `smart/reference/debug-gate.md` 执行。
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
"$SMART_BASH" "$SMART_GUARD" <change-name> build --apply
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
状态文件自动更新为 `phase: verify`、`verify_result: pending`,然后进入验证。
|
|
98
|
+
|
|
99
|
+
### 3. 轻量验证(preset verify)
|
|
100
|
+
|
|
101
|
+
复用 `/smart-verify`。Tweak 必须保持轻量验证条件:≤ 3 tasks、≤ 4 files、无 delta spec、无新 capability。
|
|
102
|
+
|
|
103
|
+
**立即执行:** 使用 Skill 工具加载 `smart-verify` 技能。禁止跳过此步骤。
|
|
104
|
+
|
|
105
|
+
如规模评估进入完整验证路径,停止 tweak,按升级条件阻塞确认处理。
|
|
106
|
+
|
|
107
|
+
验证通过后,按 `/smart-verify` 的规则将 `.smart.yaml` 的 `verify_result` 记录为 `pass`,归档前不得跳过该状态。验证通过后仍必须进入 `/smart-archive` 的归档前最终确认,不得自动运行归档脚本。
|
|
108
|
+
|
|
109
|
+
### 4. 归档(preset archive)
|
|
110
|
+
|
|
111
|
+
复用 `/smart-archive`。归档前必须满足 `.smart.yaml` 中 `verify_result: pass`,并等待 `/smart-archive` 的归档前最终确认。
|
|
112
|
+
|
|
113
|
+
**立即执行:** 使用 Skill 工具加载 `smart-archive` 技能进行归档。禁止跳过此步骤。
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 连续执行模式
|
|
118
|
+
|
|
119
|
+
<IMPORTANT>
|
|
120
|
+
Tweak 流程默认 **一次性连续执行**。调用 `/smart-tweak` 后,agent 在 tweak 自有步骤间自动推进,不主动停顿。**例外**:若 `auto_transition: false`,则在每个 phase 边界(build/verify/archive 之间)停下,由用户手动运行下一阶段命令——此时连续执行降级为逐阶段手动推进,详见下方「自动衔接下一阶段」。但无论 `auto_transition` 取何值,以下情况都必须暂停等待用户确认:
|
|
121
|
+
|
|
122
|
+
1. 遇到升级条件(见"升级条件"章节),**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确确认**升级为完整流程
|
|
123
|
+
2. 验证阶段(smart-verify)的验证失败决策和分支处理决策
|
|
124
|
+
3. 归档前最终确认(smart-archive 执行归档脚本前)
|
|
125
|
+
|
|
126
|
+
执行顺序:快速开启 → 轻量构建 → 轻量验证 → 归档 → 完成
|
|
127
|
+
|
|
128
|
+
每个阶段完成后立即进入下一阶段。阶段内部仍必须按上文要求调用对应 Smart/OpenSpec/Superpowers skill,被调用的 skill 如有自己的用户决策点,按该 skill 规则执行。
|
|
129
|
+
</IMPORTANT>
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 升级条件
|
|
134
|
+
|
|
135
|
+
满足以下**任一**条件时,停止 tweak 流程,升级为完整 `/smart`:
|
|
136
|
+
|
|
137
|
+
| 条件 | 说明 |
|
|
138
|
+
|------|------|
|
|
139
|
+
| 改动涉及 **5+ 文件** | 超出小改动范围 |
|
|
140
|
+
| 多模块协调修改 | 需要跨组件协调 |
|
|
141
|
+
| 需要新增测试用例 **5+** | 变更复杂度上升 |
|
|
142
|
+
| 配置项新增或删除 | 非值修改的配置变更 |
|
|
143
|
+
| 需要新增 capability | 超出局部优化 |
|
|
144
|
+
| 需要 delta spec | 影响了已有规格 |
|
|
145
|
+
|
|
146
|
+
满足升级条件时**必须按 `smart/reference/decision-point.md` 的协议暂停并等待用户明确确认**升级为完整 `/smart` 流程。不得直接进入 `/smart-design`,不得自动补充 Design Doc。
|
|
147
|
+
|
|
148
|
+
用户确认升级后,**必须先更新 workflow 和 phase 字段**再进入完整流程:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
"$SMART_BASH" "$SMART_STATE" set <name> workflow full
|
|
152
|
+
"$SMART_BASH" "$SMART_STATE" set <name> phase design
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
然后在当前 change 基础上补充 Design Doc:**立即使用 Skill 工具加载 `smart-design` skill**,后续正常走完整流程。若用户不确认升级,停止 tweak 并报告当前变更已超出 tweak 适用范围。
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 退出条件
|
|
160
|
+
|
|
161
|
+
- 小改动已完成,测试通过
|
|
162
|
+
- change 已归档
|
|
163
|
+
- 未新增 capability、架构调整或接口变化
|
|
164
|
+
- **阶段守卫**:build → verify 前运行 `"$SMART_BASH" "$SMART_GUARD" <change-name> build --apply`,verify → archive 前按 `/smart-verify` 规则运行 `"$SMART_BASH" "$SMART_GUARD" <change-name> verify --apply`
|
|
165
|
+
|
|
166
|
+
## 自动衔接下一阶段
|
|
167
|
+
|
|
168
|
+
按 `smart/reference/auto-transition.md` 执行。关键命令:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
"$SMART_BASH" "$SMART_STATE" next <name>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
- `NEXT: auto` → 调用 `SKILL` 指向的 skill 继续 tweak 流程(`phase: build` 返回 `smart-tweak`,`verify` 返回 `smart-verify`,`archive` 返回 `smart-archive`)
|
|
175
|
+
- `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
|
|
176
|
+
- `NEXT: done` → 流程已完成,无需继续
|