sdd-flow-kit 1.0.9 → 1.0.11
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/dist/adapters/index.js +6 -5
- package/dist/steps/runFlow.js +5 -5
- package/dist/steps/startFlow.js +17 -9
- package/package.json +1 -1
- package/src/templates/artifacts/05-openspec-/346/217/220/346/241/210/350/215/211/347/250/277.template.md +27 -16
- package/src/templates/artifacts/06-agent-skill.template.md +73 -13
- package/src/templates/prompts/02-sdd-loop-prompt.md +6 -5
- package/src/templates/skills/confluence-doc.py.template +10 -2
- package/src/templates/skills/doc-skill.SKILL.md.template +1 -0
package/dist/adapters/index.js
CHANGED
|
@@ -38,11 +38,12 @@ async function runClaudeFlow(args) {
|
|
|
38
38
|
return false;
|
|
39
39
|
const prompt = [
|
|
40
40
|
`你在项目目录内执行需求流程,runId=${args.runId}。`,
|
|
41
|
-
"
|
|
42
|
-
"1)
|
|
43
|
-
"2)
|
|
44
|
-
"3)
|
|
45
|
-
"4)
|
|
41
|
+
"请按分阶段门禁执行(禁止跳步):",
|
|
42
|
+
"1) 01-获取需求文档指引:回填 source/PRD.md(及接口文档,如有)。",
|
|
43
|
+
"2) 02-需求分析:若矛盾点未闭合,仅更新 03-待确认问题清单.md 并停止;用户确认后再生成 01/02/闭环03。",
|
|
44
|
+
"3) 用户确认后补全 04-技术文档草稿.md。",
|
|
45
|
+
"4) /opsx-propose:基于 01、02 与 UI 参考生成 openspec change,并记录到 05-openspec-提案草稿.md。",
|
|
46
|
+
"5) /opsx-apply:提案 apply-ready 后执行 delivery-pipeline。",
|
|
46
47
|
"完成后输出一句:SDD flow completed",
|
|
47
48
|
"",
|
|
48
49
|
"以下是第2步提示词:",
|
package/dist/steps/runFlow.js
CHANGED
|
@@ -22,11 +22,11 @@ function buildChecklist(args) {
|
|
|
22
22
|
"- 或按 `RUNME.md` 逐步执行。",
|
|
23
23
|
"",
|
|
24
24
|
"## 最小闭环检查",
|
|
25
|
-
"- Step1
|
|
26
|
-
"- Step2
|
|
27
|
-
"-
|
|
28
|
-
"-
|
|
29
|
-
"-
|
|
25
|
+
"- Step1:`source/PRD.md` 已回填",
|
|
26
|
+
"- Step2 提问模式:仅 `03`,未闭合时禁止 01/02/04",
|
|
27
|
+
"- Step4(用户确认后):`01/02/03闭环/04` 齐全",
|
|
28
|
+
"- Step5:`/opsx-propose` 已生成 `openspec/changes/<change-name>/`,`05` 已记录 change 名",
|
|
29
|
+
"- Step6:`/opsx-apply` + delivery-pipeline exit 0",
|
|
30
30
|
"",
|
|
31
31
|
].join("\n");
|
|
32
32
|
}
|
package/dist/steps/startFlow.js
CHANGED
|
@@ -87,18 +87,26 @@ async function startFlowScaffold(options) {
|
|
|
87
87
|
"请打开 `02-需求分析提示词.md`,在 Cursor/Claude Code/Codex/OpenClaw 中执行。",
|
|
88
88
|
"门禁:提问模式仅允许更新 `03-待确认问题清单.md`;闭环后才允许输出最终版 `01/02`。",
|
|
89
89
|
"",
|
|
90
|
-
"## Step 3
|
|
91
|
-
"
|
|
90
|
+
"## Step 3:人工核验(暂停点)",
|
|
91
|
+
"用户补充待确认点并确认闭环后,才进入 Step 4。",
|
|
92
|
+
"门禁:未闭环时禁止生成 01/02/04,禁止 /opsx-propose。",
|
|
92
93
|
"",
|
|
93
|
-
"## Step 4
|
|
94
|
-
"
|
|
94
|
+
"## Step 4:生成 01 / 02 / 闭环03 / 04",
|
|
95
|
+
"用户确认后产出:",
|
|
96
|
+
"- `03-待确认问题清单.md`(已闭合)",
|
|
97
|
+
"- `01-需求分析报告.md`",
|
|
98
|
+
"- `02-改动点清单.md`",
|
|
99
|
+
"- `04-技术文档草稿.md`",
|
|
95
100
|
"",
|
|
96
|
-
"## Step 5
|
|
97
|
-
"
|
|
101
|
+
"## Step 5:/opsx-propose 生成提案",
|
|
102
|
+
"基于 `01`、`02` 与用户提供的 UI 参考,执行 `/opsx-propose`。",
|
|
103
|
+
"产出在 `openspec/changes/<change-name>/`;在 `05-openspec-提案草稿.md` 记录 change 名称。",
|
|
104
|
+
"门禁:仅当 03 已闭环且 01/02/04 完成后执行。",
|
|
98
105
|
"",
|
|
99
|
-
"## Step 6
|
|
100
|
-
"
|
|
101
|
-
"
|
|
106
|
+
"## Step 6:/opsx-apply 实现收尾",
|
|
107
|
+
"提案 apply-ready 后,按 `.opsx/config.json` 执行 `/opsx-apply` 对应 change 的 apply 与 delivery-pipeline。",
|
|
108
|
+
"必须在当前仓库本地 OPSX 配置下执行,禁止跨仓 fallback。",
|
|
109
|
+
"门禁:delivery-pipeline exit 0 前禁止宣称流程结束。",
|
|
102
110
|
].join("\n"));
|
|
103
111
|
return {
|
|
104
112
|
runId,
|
package/package.json
CHANGED
|
@@ -1,21 +1,32 @@
|
|
|
1
|
-
# 05-openspec
|
|
1
|
+
# 05-openspec 提案阶段指引(阶段 C 完成后填写)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 本文件不是最终提案正文,而是 **/opsx-propose 执行后的索引与交接记录**。
|
|
4
|
+
> 真正提案产物在 `openspec/changes/<change-name>/`。
|
|
4
5
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
4. 进入生成 UI 图 + 任务拆解 + 开发阶段
|
|
6
|
+
## 前置条件(必须全部满足)
|
|
7
|
+
- [ ] `03-待确认问题清单.md` 已标注 **矛盾点池状态:已闭合**
|
|
8
|
+
- [ ] `01-需求分析报告.md`、`02-改动点清单.md`、`04-技术文档草稿.md` 已生成
|
|
9
|
+
- [ ] 用户已确认可进入提案阶段
|
|
10
10
|
|
|
11
|
-
##
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
11
|
+
## /opsx-propose 输入清单
|
|
12
|
+
- 需求分析:`01-需求分析报告.md`
|
|
13
|
+
- 改动清单:`02-改动点清单.md`
|
|
14
|
+
- UI/交互参考:(填写用户提供的路径,例如原型页面或设计稿目录)
|
|
15
15
|
|
|
16
|
-
##
|
|
17
|
-
- `
|
|
18
|
-
-
|
|
19
|
-
- `03-待确认问题清单.md`:已闭环(无悬而未决)
|
|
20
|
-
- `04-技术文档草稿.md`:已完成
|
|
16
|
+
## 执行命令(在 AI 工具中)
|
|
17
|
+
- `/opsx-propose`
|
|
18
|
+
- 说明需基于上述 01/02 + UI 参考一次性生成 change
|
|
21
19
|
|
|
20
|
+
## 产出记录(执行后填写)
|
|
21
|
+
- change 名称:
|
|
22
|
+
- change 路径:`openspec/changes/<change-name>/`
|
|
23
|
+
- 主要文件:
|
|
24
|
+
- `proposal.md`
|
|
25
|
+
- `design.md`
|
|
26
|
+
- `specs/`
|
|
27
|
+
- `tasks.md`
|
|
28
|
+
- openspec status:(如 4/4 apply-ready)
|
|
29
|
+
|
|
30
|
+
## 下一步
|
|
31
|
+
- 阶段 D:执行 `/opsx-apply`(或 `pnpm run opsx:delivery-pipeline -- <change-name>`)
|
|
32
|
+
- 禁止在 pipeline 未成功前宣称“需求开发完成”
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd-flow-kit-trigger
|
|
3
|
-
description: 当用户说“开发 <产品> <版本> 需求/版本/PRD”或类似表达时,必须启动 sdd-flow-kit
|
|
3
|
+
description: 当用户说“开发 <产品> <版本> 需求/版本/PRD”或类似表达时,必须启动 sdd-flow-kit 分阶段流程;其它对话保持原本 AI 行为。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD Flow Trigger Skill
|
|
@@ -14,22 +14,82 @@ description: 当用户说“开发 <产品> <版本> 需求/版本/PRD”或类
|
|
|
14
14
|
- `开发 XXX PRD`
|
|
15
15
|
- 或明确要求“按 SDD 流程”推进某版本需求
|
|
16
16
|
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
## 触发后执行规则(分阶段,禁止跳步)
|
|
18
|
+
|
|
19
|
+
### 准备
|
|
20
|
+
1. 从用户输入提取 `product`、`version`
|
|
21
|
+
2. 执行:`npx sdd-flow-kit run --product <product> --version <version> -y`
|
|
22
|
+
3. 工作目录:`openspec/PRD/<runId>/`(见 `RUNME.md`)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### 阶段 A — Step1 + Step2(必须可停顿)
|
|
27
|
+
1. **Step1**:按 `01-获取需求文档指引.md` 拉取 PRD,回填 `source/PRD.md`(及可选接口文档)
|
|
28
|
+
2. **Step2**:执行 `02-需求分析提示词.md`(引用 `docs/` 下已下载的 PRD)
|
|
29
|
+
|
|
30
|
+
**门禁(Step2)**
|
|
31
|
+
- 若矛盾点池**未闭合**(提问模式):
|
|
32
|
+
- **仅允许** 输出/更新 `03-待确认问题清单.md`
|
|
33
|
+
- **禁止** 生成 `01-需求分析报告.md`、`02-改动点清单.md`、`04-技术文档草稿.md`
|
|
34
|
+
- **必须停止**,请用户补充/确认待确认项
|
|
35
|
+
- **不得** 进入阶段 B/C/D
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### 阶段 B — 用户确认后(仅文档 01/02/03/04)
|
|
40
|
+
**触发条件**:用户已回复待确认点,或明确表示“矛盾点池已闭合 / 按确认点继续”。
|
|
41
|
+
|
|
42
|
+
**本阶段只允许产出:**
|
|
43
|
+
1. 更新 `03-待确认问题清单.md`(标注 **矛盾点池状态:已闭合**,写入用户确认结论)
|
|
44
|
+
2. 生成最终版 `01-需求分析报告.md`
|
|
45
|
+
3. 生成最终版 `02-改动点清单.md`(仅代码文件改动)
|
|
46
|
+
4. 生成 `04-技术文档草稿.md`
|
|
47
|
+
|
|
48
|
+
**本阶段禁止:**
|
|
49
|
+
- 执行 `/opsx-propose` 或 `/opsx-apply`
|
|
50
|
+
- 生成 openspec change 目录或宣称“开发完成”
|
|
51
|
+
|
|
52
|
+
完成后告知用户:“01/02/03/04 已就绪,是否提供 UI 参考图路径?确认后我将执行 /opsx-propose。”
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### 阶段 C — `/opsx-propose`(生成提案,对应你说的「05」)
|
|
57
|
+
**触发条件**:阶段 B 已完成,且用户确认可进入提案(可提供 UI 参考路径,如原型页面文件)。
|
|
58
|
+
|
|
59
|
+
**必须执行:**
|
|
60
|
+
1. 先读当前仓库 `.opsx/config.json` 与本地 OPSX skills(禁止跨项目 fallback)
|
|
61
|
+
2. 执行 **`/opsx-propose`**,输入至少包含:
|
|
23
62
|
- `01-需求分析报告.md`
|
|
24
63
|
- `02-改动点清单.md`
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
64
|
+
- **UI 图/交互参考**(用户指定路径;无则说明缺失并继续文字 spec)
|
|
65
|
+
3. 一次性生成 openspec change(`proposal.md`、`design.md`、`specs/`、`tasks.md` 等)
|
|
66
|
+
|
|
67
|
+
**本阶段交付物 = openspec 提案产物**(即手动流程里的 Step5 结果)。
|
|
68
|
+
可在 `openspec/PRD/<runId>/05-openspec-提案草稿.md` 记录 change 名称与路径索引。
|
|
69
|
+
|
|
70
|
+
**本阶段禁止:**
|
|
71
|
+
- 执行 `/opsx-apply`(留给阶段 D)
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 阶段 D — `/opsx-apply`(实现与交付收尾)
|
|
76
|
+
**触发条件**:阶段 C 的 openspec 提案已生成且状态为 apply-ready。
|
|
77
|
+
|
|
78
|
+
**必须执行:**
|
|
79
|
+
1. 按总编排 skill(`.opsx/config.json` 中 `deliveryPipeline` 指向的 skill)执行 **`/opsx-apply`**
|
|
80
|
+
2. 在当前仓库根目录跑 delivery-pipeline(如 `pnpm run opsx:delivery-pipeline -- <change-name>`)
|
|
81
|
+
3. **仅在 pipeline 成功(exit 0)后** 才可宣称本需求开发流程结束
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 严禁(全局)
|
|
86
|
+
- 未闭合时一次性生成 `01~05` 或直接进入提案/实现
|
|
87
|
+
- 跳过用户确认点
|
|
88
|
+
- 在错误仓库执行 OPSX(如 fallback 到其它项目的 poquan-web 路径)
|
|
28
89
|
|
|
29
90
|
## 非触发场景
|
|
30
|
-
-
|
|
31
|
-
- 继续按常规 AI 对话处理用户问题
|
|
91
|
+
- 非“开发某版本需求”类对话 → 按普通问答处理
|
|
32
92
|
|
|
33
93
|
## 当前环境
|
|
34
94
|
- agent: {{AGENT_NAME}}
|
|
35
|
-
-
|
|
95
|
+
- 安装: `npx sdd-flow-kit install`
|
|
@@ -73,13 +73,14 @@
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
75
|
#### 路径 B:交付模式 (矛盾点池已闭合)
|
|
76
|
-
>
|
|
76
|
+
> **触发条件**:用户已回复待确认点,或明确表示矛盾点池已闭合(不得在未获用户确认时自行进入)。
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
1.
|
|
80
|
-
2.
|
|
78
|
+
**任务(本路径仅文档,不含 openspec)**:
|
|
79
|
+
1. 更新 `03-待确认问题清单.md`,标注“**矛盾点池状态:已闭合**”,写入用户确认结论。
|
|
80
|
+
2. 生成最终版 `01-需求分析报告.md` 和 `02-改动点清单.md`。
|
|
81
81
|
3. 确认 `02-改动点清单.md` 中仅包含代码文件改动,不涉及 `openspec/spec/` 内容。
|
|
82
|
-
4.
|
|
82
|
+
4. **禁止** 在本路径执行 `/opsx-propose` 或 `/opsx-apply`。
|
|
83
|
+
5. 输出时附带一句:`01/02/03 已就绪,请补全 04-技术文档草稿.md 后,再执行 /opsx-propose(输入 01、02 与 UI 参考)`。
|
|
83
84
|
|
|
84
85
|
---
|
|
85
86
|
|
|
@@ -163,7 +163,15 @@ def find_search_result(page, base_url: str, keyword: str):
|
|
|
163
163
|
|
|
164
164
|
def run_search(page, base_url: str, keyword: str) -> str | None:
|
|
165
165
|
search_selector = None
|
|
166
|
-
for selector in [
|
|
166
|
+
for selector in [
|
|
167
|
+
"#quick-search-query",
|
|
168
|
+
"#search-query-input",
|
|
169
|
+
"input[name='search-query']",
|
|
170
|
+
"input.search-query",
|
|
171
|
+
"input[placeholder*='搜索']",
|
|
172
|
+
"input[placeholder*='Search']",
|
|
173
|
+
"input[id*='search']",
|
|
174
|
+
]:
|
|
167
175
|
if page.locator(selector).count() > 0:
|
|
168
176
|
search_selector = selector
|
|
169
177
|
break
|
|
@@ -190,7 +198,7 @@ def main():
|
|
|
190
198
|
load_env_file(repo_root / env_name)
|
|
191
199
|
|
|
192
200
|
base_url = env("CONFLUENCE_BASE_URL", "https://confluence.huan.tv") or "https://confluence.huan.tv"
|
|
193
|
-
search_url = env("CONFLUENCE_SEARCH_URL") or f"{base_url.rstrip('/')}
|
|
201
|
+
search_url = env("CONFLUENCE_SEARCH_URL") or f"{base_url.rstrip('/')}/#all-updates"
|
|
194
202
|
username = (
|
|
195
203
|
env("CONFLUENCE_USERNAME")
|
|
196
204
|
or env("CONFLUENCE_USER")
|
|
@@ -58,5 +58,6 @@ python3 confluence-doc.py {{PRODUCT_PREFIX}}_V1.2.3
|
|
|
58
58
|
- 脚本:`docs/{{SKILL_DIR}}/confluence-doc.py`
|
|
59
59
|
- 脚本已内置默认账号密码;如需使用其他账号可用环境变量覆盖
|
|
60
60
|
- 默认 Confluence 地址为 `https://confluence.huan.tv`(可用 `CONFLUENCE_BASE_URL` 覆盖)
|
|
61
|
+
- 默认搜索入口为 `https://confluence.huan.tv/#all-updates`(可用 `CONFLUENCE_SEARCH_URL` 覆盖)
|
|
61
62
|
- 脚本会自动尝试读取仓库根目录的 `.env.pre` / `.env` / `.env.local` / `.env.development` / `.env.test`(若其中存在 `CONFLUENCE_*` 配置可直接复用)
|
|
62
63
|
|