speccore 6.76.0 → 6.77.0
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/.agents/skills/spec-analyze/SKILL.md +174 -4
- package/.agents/skills/spec-change/SKILL.md +156 -20
- package/.agents/skills/spec-doc2spec/SKILL.md +121 -4
- package/.agents/skills/spec-execute/SKILL.md +148 -5
- package/.agents/skills/spec-iteration-create/SKILL.md +128 -9
- package/.agents/skills/spec-plan/SKILL.md +123 -4
- package/.agents/skills/spec-spec2doc/SKILL.md +126 -4
- package/.agents/skills/spec-split/SKILL.md +214 -4
- package/.agents/skills/spec-task-create/SKILL.md +156 -9
- package/.agents/skills/speccore-router/SKILL.md +21 -1
- package/dist/cli.js +22 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +2 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +241 -14
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/clarify.d.ts +11 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +138 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/execute.d.ts +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +15 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/split.d.ts +3 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +125 -153
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/update.js +0 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/core/analyze-context-guard.js +2 -2
- package/dist/core/analyze-context-guard.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +3 -2
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/change-detector.d.ts +25 -0
- package/dist/core/change-detector.d.ts.map +1 -0
- package/dist/core/change-detector.js +170 -0
- package/dist/core/change-detector.js.map +1 -0
- package/dist/core/requirement-clarifier.d.ts +41 -0
- package/dist/core/requirement-clarifier.d.ts.map +1 -0
- package/dist/core/requirement-clarifier.js +181 -0
- package/dist/core/requirement-clarifier.js.map +1 -0
- package/dist/core/streaming-analyzer.d.ts.map +1 -1
- package/dist/core/streaming-analyzer.js +17 -4
- package/dist/core/streaming-analyzer.js.map +1 -1
- package/package.json +1 -1
- package/.agents/skills/spec-dev/SKILL.md +0 -10
- package/.agents/skills/spec-synthesize/SKILL.md +0 -10
|
@@ -1,10 +1,180 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-analyze
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
需求分析专属 Skill。在调用 speccore ask 之前,执行参数提取、
|
|
5
|
+
前置校验(迭代存在性、需求文档检测、专业度评估、端列表读取),
|
|
6
|
+
参数缺失时输出交互式提示。不影响 speccore ask 的意图识别能力。
|
|
7
|
+
allowed-tools: ["Bash", "Read"]
|
|
5
8
|
disable-model-invocation: false
|
|
6
9
|
---
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
# spec-analyze — 需求分析(专属逻辑)
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
> **定位**:`/analyze` 快捷入口的专属预处理层
|
|
14
|
+
> **原则**:不影响 `speccore ask` 的意图识别能力
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 调用方式
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/analyze [参数]
|
|
22
|
+
/analyze -I Iteration-001 --auto
|
|
23
|
+
/analyze -I Iteration-001 --scope global --with-code
|
|
24
|
+
/analyze -I Iteration-001 --clarify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 执行流程
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
用户输入 /analyze [参数]
|
|
33
|
+
│
|
|
34
|
+
▼
|
|
35
|
+
┌───────────────────────────────────────┐
|
|
36
|
+
│ Step 1: 参数提取 │
|
|
37
|
+
│ 从用户输入提取 iteration/scope/auto 等 │
|
|
38
|
+
└───────────────┬───────────────────────┘
|
|
39
|
+
│
|
|
40
|
+
参数缺失?
|
|
41
|
+
│
|
|
42
|
+
是 ──► 输出交互式提示
|
|
43
|
+
│
|
|
44
|
+
否 ──► 继续
|
|
45
|
+
│
|
|
46
|
+
▼
|
|
47
|
+
┌───────────────────────────────────────┐
|
|
48
|
+
│ Step 2: 参数补全 │
|
|
49
|
+
│ iteration 缺失 → 读 context.json │
|
|
50
|
+
│ scope 缺失 → 根据上下文推断 │
|
|
51
|
+
└───────────────┬───────────────────────┘
|
|
52
|
+
│
|
|
53
|
+
▼
|
|
54
|
+
┌───────────────────────────────────────┐
|
|
55
|
+
│ Step 3: 前置校验 │
|
|
56
|
+
│ - 迭代是否存在? │
|
|
57
|
+
│ - 需求文档是否存在? │
|
|
58
|
+
│ - 需求专业度评估(clarify) │
|
|
59
|
+
│ - CONSTITUTION 端列表读取 │
|
|
60
|
+
└───────────────┬───────────────────────┘
|
|
61
|
+
│
|
|
62
|
+
▼
|
|
63
|
+
┌───────────────────────────────────────┐
|
|
64
|
+
│ Step 4: 调用 speccore ask │
|
|
65
|
+
└───────────────────────────────────────┘
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Step 1: 参数提取
|
|
71
|
+
|
|
72
|
+
| 参数 | 短名 | 长名 | 必填 | 说明 |
|
|
73
|
+
|:---|:---|:---|:---|:---|
|
|
74
|
+
| iteration | -i | --iteration | 否 | 目标迭代名 |
|
|
75
|
+
| scope | -s | --scope | 否 | 分析范围: global / iteration / task |
|
|
76
|
+
| auto | -a | --auto | 否 | 全自动模式(不交互)|
|
|
77
|
+
| with-code | -c | --with-code | 否 | 结合源码分析 |
|
|
78
|
+
| full | -f | --full | 否 | 全自动三阶段合成(原 synthesize)|
|
|
79
|
+
| phase | -p | --phase | 否 | 单阶段执行 1/2/3 |
|
|
80
|
+
| clarify | - | --clarify | 否 | 需求专业度检测,口语化时触发 clarify |
|
|
81
|
+
| dev-guide | - | --dev-guide | 否 | 生成 DEV_GUIDE.md 实现指南 |
|
|
82
|
+
| platforms | - | --platforms | 否 | 只分析指定端 |
|
|
83
|
+
| prompt | - | --prompt | 否 | 只输出 Prompt,不执行 |
|
|
84
|
+
| apply | - | --apply | 否 | 应用 AI 分析结果(支持 @file.json)|
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Step 2: 参数缺失 → 交互式提示
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
🔍 speccore analyze — 需求分析
|
|
92
|
+
|
|
93
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
94
|
+
📋 当前环境
|
|
95
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
+
迭代: Iteration-001-meeting-system(从 context.json 读取)
|
|
97
|
+
端列表: api, h5-mobile, admin-web(从 CONSTITUTION.md 读取)
|
|
98
|
+
|
|
99
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
100
|
+
📖 可用参数
|
|
101
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
+
-I, --iteration <name> 目标迭代(默认: 当前迭代)
|
|
103
|
+
-s, --scope <scope> 分析范围:
|
|
104
|
+
global — 全局层分析(项目级,跨端)
|
|
105
|
+
iteration — 迭代级分析(默认)
|
|
106
|
+
task — 任务级分析
|
|
107
|
+
-a, --auto 全自动模式(不交互,直接输出)
|
|
108
|
+
-c, --with-code 结合源码分析(扫描各端源码)
|
|
109
|
+
--full 全自动三阶段合成(原 synthesize --full)
|
|
110
|
+
--phase <N> 单阶段执行: 1(逐端) | 2(跨端) | 3(索引)
|
|
111
|
+
--clarify 需求专业度检测,口语化时自动触发澄清
|
|
112
|
+
--dev-guide 同时生成 DEV_GUIDE.md 开发者实现指南
|
|
113
|
+
--platforms <list> 只分析指定端(如 api,h5)
|
|
114
|
+
--prompt 只输出 Prompt,不执行分析
|
|
115
|
+
--apply <json|@file> 应用 AI 分析结果(支持 @file.json 文件方式)
|
|
116
|
+
|
|
117
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
118
|
+
💡 使用示例
|
|
119
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
120
|
+
/analyze -I Q1 --auto # 全自动分析迭代
|
|
121
|
+
/analyze --scope global --with-code # 全局层 + 源码分析
|
|
122
|
+
/analyze --full # 三阶段全量合成
|
|
123
|
+
/analyze --clarify # 检测需求专业度
|
|
124
|
+
/analyze --dev-guide # 分析 + 生成实现指南
|
|
125
|
+
/analyze --platforms api,h5 # 只分析 api 和 h5 端
|
|
126
|
+
/analyze --prompt # 只输出 Prompt
|
|
127
|
+
|
|
128
|
+
请补充参数后重新调用,或直接调用 /analyze 使用默认设置。
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Step 3: 前置校验
|
|
134
|
+
|
|
135
|
+
### 3.1 检查迭代是否存在
|
|
136
|
+
```bash
|
|
137
|
+
# 检查迭代目录是否存在
|
|
138
|
+
# 如果不存在 → 提示用户先创建迭代
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 3.2 检查需求文档
|
|
142
|
+
```bash
|
|
143
|
+
# 检查 010-requirements/REQUIREMENT.md 或 converted/*.md 是否存在
|
|
144
|
+
# 如果不存在 → 提示用户先准备需求文档
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3.3 需求专业度检测(--clarify)
|
|
148
|
+
```bash
|
|
149
|
+
# 读取 REQUIREMENT.md 或用户输入
|
|
150
|
+
# 检测指标:
|
|
151
|
+
# - 口语化表达("我要/我想/能不能")
|
|
152
|
+
# - 缺少结构化标题(## / ###)
|
|
153
|
+
# - 缺少验收标准
|
|
154
|
+
# - 缺少技术约束
|
|
155
|
+
# - 缺少错误处理
|
|
156
|
+
# - 缺少数据模型
|
|
157
|
+
# 如果专业度低 → 提示用户先执行 clarify
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 3.4 读取端列表
|
|
161
|
+
```bash
|
|
162
|
+
# 从 CONSTITUTION.md 读取项目配置的端列表
|
|
163
|
+
# 如果 --platforms 指定了不存在的端 → 提示可用端
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 3.5 检查 --apply 文件
|
|
167
|
+
```bash
|
|
168
|
+
# 如果 --apply 以 @ 开头,从文件读取 JSON
|
|
169
|
+
# 检查文件是否存在
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Step 4: 调用 speccore ask
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
execute_command("speccore ask '分析 Iteration-XXX...'")
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
> ⚠️ 最终仍然调用 `speccore ask`,不要绕过 ask 引擎。
|
|
@@ -1,13 +1,166 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-change
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
需求变更专属 Skill。在调用 speccore ask 之前,执行参数提取、
|
|
5
|
+
前置校验(当前迭代、已有 Task 列表、变更类型判断),
|
|
6
|
+
参数缺失时输出交互式提示。不影响 speccore ask 的意图识别能力。
|
|
4
7
|
allowed-tools: ["Bash", "Read"]
|
|
5
8
|
disable-model-invocation: false
|
|
6
9
|
---
|
|
7
10
|
|
|
8
|
-
# spec-change —
|
|
11
|
+
# spec-change — 需求变更与新增(专属逻辑)
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
> **定位**:`/change` 快捷入口的专属预处理层
|
|
14
|
+
> **原则**:不影响 `speccore ask` 的意图识别能力
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 调用方式
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/change [参数]
|
|
22
|
+
/change --prompt "新增一个通知功能"
|
|
23
|
+
/change --prompt "订单模块加个退款接口" -I Iteration-001
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 执行流程
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
用户输入 /change [参数]
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
┌───────────────────────────────────────┐
|
|
35
|
+
│ Step 1: 参数提取 │
|
|
36
|
+
│ 从用户输入提取 iteration/prompt/response │
|
|
37
|
+
└───────────────┬───────────────────────┘
|
|
38
|
+
│
|
|
39
|
+
参数缺失?
|
|
40
|
+
│
|
|
41
|
+
是 ──► 输出交互式提示
|
|
42
|
+
│
|
|
43
|
+
否 ──► 继续
|
|
44
|
+
│
|
|
45
|
+
▼
|
|
46
|
+
┌───────────────────────────────────────┐
|
|
47
|
+
│ Step 2: 参数补全 │
|
|
48
|
+
│ iteration 缺失 → 读 context.json │
|
|
49
|
+
│ intent 推断 → 新增 or 变更 │
|
|
50
|
+
└───────────────┬───────────────────────┘
|
|
51
|
+
│
|
|
52
|
+
▼
|
|
53
|
+
┌───────────────────────────────────────┐
|
|
54
|
+
│ Step 3: 前置校验 │
|
|
55
|
+
│ - 当前迭代是否存在? │
|
|
56
|
+
│ - 已有 Task 列表扫描 │
|
|
57
|
+
│ - 变更类型判断(新增/变更) │
|
|
58
|
+
│ - 附件检测(inbox/ 目录) │
|
|
59
|
+
└───────────────┬───────────────────────┘
|
|
60
|
+
│
|
|
61
|
+
▼
|
|
62
|
+
┌───────────────────────────────────────┐
|
|
63
|
+
│ Step 4: 调用 speccore ask │
|
|
64
|
+
└───────────────────────────────────────┘
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Step 1: 参数提取
|
|
70
|
+
|
|
71
|
+
| 参数 | 短名 | 长名 | 必填 | 说明 |
|
|
72
|
+
|:---|:---|:---|:---|:---|
|
|
73
|
+
| iteration | -i | --iteration | 否 | 目标迭代名 |
|
|
74
|
+
| prompt | -p | --prompt | 否 | 生成澄清 Prompt(传入用户原话)|
|
|
75
|
+
| response | -r | --response | 否 | 应用 AI 澄清结果(JSON)|
|
|
76
|
+
| file | -f | --file | 否 | 附件文件路径 |
|
|
77
|
+
| task | -t | --task | 否 | 指定受影响的 Task |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Step 2: 参数缺失 → 交互式提示
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
🔄 speccore change — 需求变更与新增
|
|
85
|
+
|
|
86
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
87
|
+
📋 当前环境
|
|
88
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
+
迭代: Iteration-001-meeting-system(从 context.json 读取)
|
|
90
|
+
已有任务: 3 个(Task-001, Task-002, Task-003)
|
|
91
|
+
|
|
92
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
93
|
+
📖 可用参数
|
|
94
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
95
|
+
-I, --iteration <name> 目标迭代(默认: 当前迭代)
|
|
96
|
+
-p, --prompt <text> 用户原始需求描述(用于生成澄清 Prompt)
|
|
97
|
+
-r, --response <json> AI 澄清后的结构化结果(JSON)
|
|
98
|
+
-f, --file <path> 附件文件路径
|
|
99
|
+
-t, --task <id> 指定受影响的 Task(可选)
|
|
100
|
+
|
|
101
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
+
💡 使用示例
|
|
103
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
+
/change --prompt "新增一个通知功能" # 生成澄清 Prompt
|
|
105
|
+
/change --prompt "订单模块加个退款接口" # 变更现有功能
|
|
106
|
+
/change --response '{...json...}' # 应用澄清结果
|
|
107
|
+
/change --prompt "新增功能" -f ./PRD.pdf # 带附件的变更
|
|
108
|
+
|
|
109
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
+
🔄 核心流程
|
|
111
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
112
|
+
1. /change --prompt "你的需求描述" → 生成澄清 Prompt
|
|
113
|
+
2. AI 根据 Prompt 生成结构化 JSON → 展示给用户确认
|
|
114
|
+
3. 用户确认后 → /change --response '{JSON}'
|
|
115
|
+
4. CLI 解析 JSON 并写入文件 → 完成变更/新增
|
|
116
|
+
|
|
117
|
+
请补充 --prompt 参数后重新调用。
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Step 3: 前置校验
|
|
123
|
+
|
|
124
|
+
### 3.1 检查迭代是否存在
|
|
125
|
+
```bash
|
|
126
|
+
# 检查迭代目录是否存在
|
|
127
|
+
# 如果不存在 → 提示用户先创建迭代
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 3.2 扫描已有 Task
|
|
131
|
+
```bash
|
|
132
|
+
# 读取 030-tasks/ 下的 Task 列表
|
|
133
|
+
# 用于判断变更影响范围(直接/间接/无影响)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 3.3 变更类型判断
|
|
137
|
+
```bash
|
|
138
|
+
# 根据用户输入判断意图:
|
|
139
|
+
# "新增/加/创建/实现 + 描述" → 🆕 新增需求
|
|
140
|
+
# "{task} 需求变了/要改/修改" → 🔄 需求变更
|
|
141
|
+
# 模糊描述 → AI 判断并询问用户
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 3.4 附件检测
|
|
145
|
+
```bash
|
|
146
|
+
# 检查 .speccore/inbox/ 目录是否有文件
|
|
147
|
+
# 检查用户是否通过 --file 指定了附件
|
|
148
|
+
# 有附件时,澄清 Prompt 自动包含附件内容
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Step 4: 调用 speccore ask
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
execute_command("speccore ask '处理需求变更...'")
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
> ⚠️ 最终仍然调用 `speccore ask`,不要绕过 ask 引擎。
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 核心流程(保留)
|
|
11
164
|
|
|
12
165
|
```
|
|
13
166
|
用户自然语言输入(如 "新增一个通知功能" 或 "订单模块加个退款接口")
|
|
@@ -70,20 +223,3 @@ disable-model-invocation: false
|
|
|
70
223
|
2. **用户不满意就反复澄清** — 直到用户说"可以"为止
|
|
71
224
|
3. **澄清 = 需求分析** — 结果必须持久化到 REQ.md,不是临时判断
|
|
72
225
|
4. **不要输出命令文本** — 用 execute_command 执行
|
|
73
|
-
|
|
74
|
-
## 附件支持
|
|
75
|
-
|
|
76
|
-
用户可能通过以下方式提供附件:
|
|
77
|
-
- 拖入文件(图片/文档)
|
|
78
|
-
- 放到 `.speccore/inbox/` 目录
|
|
79
|
-
- 用 `--file` 参数指定
|
|
80
|
-
|
|
81
|
-
有附件时,澄清 Prompt 会自动包含附件内容。
|
|
82
|
-
|
|
83
|
-
## 意图检测
|
|
84
|
-
|
|
85
|
-
| 用户说法 | 意图 |
|
|
86
|
-
|:---|:---|
|
|
87
|
-
| "新增/加/创建/实现 + 描述" | 🆕 新增需求 |
|
|
88
|
-
| "{task} 需求变了/要改/修改" | 🔄 需求变更 |
|
|
89
|
-
| 模糊描述 | AI 判断并询问用户 |
|
|
@@ -1,10 +1,127 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-doc2spec
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
文档转规格专属 Skill。在调用 speccore ask 之前,执行参数提取、
|
|
5
|
+
前置校验(文件存在性、格式检测),参数缺失时输出交互式提示。
|
|
6
|
+
不影响 speccore ask 的意图识别能力。
|
|
7
|
+
allowed-tools: ["Bash", "Read"]
|
|
5
8
|
disable-model-invocation: false
|
|
6
9
|
---
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
# spec-doc2spec — 文档转规格(专属逻辑)
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
> **定位**:`/doc2spec` 快捷入口的专属预处理层
|
|
14
|
+
> **原则**:不影响 `speccore ask` 的意图识别能力
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 调用方式
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/doc2spec [参数]
|
|
22
|
+
/doc2spec --file PRD.pdf -I Iteration-001
|
|
23
|
+
/doc2spec --file requirements.docx --output 010-requirements/converted/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 执行流程
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
用户输入 /doc2spec [参数]
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
┌───────────────────────────────────────┐
|
|
35
|
+
│ Step 1: 参数提取 │
|
|
36
|
+
│ 从用户输入提取 file/iteration/output 等 │
|
|
37
|
+
└───────────────┬───────────────────────┘
|
|
38
|
+
│
|
|
39
|
+
参数缺失?
|
|
40
|
+
│
|
|
41
|
+
是 ──► 输出交互式提示
|
|
42
|
+
│
|
|
43
|
+
否 ──► 继续
|
|
44
|
+
│
|
|
45
|
+
▼
|
|
46
|
+
┌───────────────────────────────────────┐
|
|
47
|
+
│ Step 2: 前置校验 │
|
|
48
|
+
│ - 文件是否存在? │
|
|
49
|
+
│ - 格式是否支持? │
|
|
50
|
+
│ - 迭代是否存在? │
|
|
51
|
+
└───────────────┬───────────────────────┘
|
|
52
|
+
│
|
|
53
|
+
▼
|
|
54
|
+
┌───────────────────────────────────────┐
|
|
55
|
+
│ Step 3: 调用 speccore ask │
|
|
56
|
+
└───────────────────────────────────────┘
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Step 1: 参数提取
|
|
62
|
+
|
|
63
|
+
| 参数 | 短名 | 长名 | 必填 | 说明 |
|
|
64
|
+
|:---|:---|:---|:---|:---|
|
|
65
|
+
| file | -f | --file | 是 | 源文档路径(PDF/DOCX/MD/HTML)|
|
|
66
|
+
| iteration | -i | --iteration | 否 | 目标迭代名 |
|
|
67
|
+
| output | -o | --output | 否 | 输出目录 |
|
|
68
|
+
| prompt | - | --prompt | 否 | 只输出 Prompt,不执行 |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Step 2: 参数缺失 → 交互式提示
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
📄 speccore doc2spec — 文档转规格
|
|
76
|
+
|
|
77
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
78
|
+
📖 可用参数
|
|
79
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
80
|
+
-f, --file <path> 源文档路径(必填)
|
|
81
|
+
支持: .pdf, .docx, .md, .html, .txt
|
|
82
|
+
-I, --iteration <name> 目标迭代(默认: 当前迭代)
|
|
83
|
+
-o, --output <dir> 输出目录(默认: 010-requirements/converted/)
|
|
84
|
+
--prompt 只输出 Prompt,不执行转换
|
|
85
|
+
|
|
86
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
87
|
+
💡 使用示例
|
|
88
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
+
/doc2spec -f PRD.pdf # 转换 PDF 到当前迭代
|
|
90
|
+
/doc2spec -f requirements.docx -I Q1 # 转换到指定迭代
|
|
91
|
+
/doc2spec -f design.md -o ./output/ # 指定输出目录
|
|
92
|
+
/doc2spec -f PRD.pdf --prompt # 只生成 Prompt
|
|
93
|
+
|
|
94
|
+
请补充 --file 参数后重新调用。
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Step 3: 前置校验
|
|
100
|
+
|
|
101
|
+
### 3.1 检查文件是否存在
|
|
102
|
+
```bash
|
|
103
|
+
# 检查 --file 指定的路径
|
|
104
|
+
# 如果不存在 → 提示用户确认路径
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 3.2 检查文件格式
|
|
108
|
+
```bash
|
|
109
|
+
# 支持的格式: .pdf, .docx, .md, .html, .txt
|
|
110
|
+
# 如果格式不支持 → 提示用户
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 3.3 检查迭代是否存在
|
|
114
|
+
```bash
|
|
115
|
+
# 如果指定了 -I,检查迭代目录是否存在
|
|
116
|
+
# 如果不存在 → 提示用户先创建迭代
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Step 4: 调用 speccore ask
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
execute_command("speccore ask '将文档转为规格...'")
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> ⚠️ 最终仍然调用 `speccore ask`,不要绕过 ask 引擎。
|
|
@@ -1,13 +1,156 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-execute
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
执行开发专属 Skill。在调用 speccore ask 之前,执行参数提取、
|
|
5
|
+
前置校验(任务状态检查、代码模式读取、上下文准备),
|
|
6
|
+
参数缺失时输出交互式提示(参数说明 + 使用示例)。
|
|
7
|
+
不影响 speccore ask 的意图识别能力。
|
|
8
|
+
allowed-tools: ["Bash", "Read"]
|
|
5
9
|
disable-model-invocation: false
|
|
6
10
|
---
|
|
7
11
|
|
|
8
|
-
|
|
12
|
+
# spec-execute — 执行开发(专属逻辑)
|
|
9
13
|
|
|
10
|
-
|
|
14
|
+
> **定位**:`/execute` 快捷入口的专属预处理层
|
|
15
|
+
> **原则**:不影响 `speccore ask` 的意图识别能力,只在调用 ask 之前做参数校验和上下文准备
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 调用方式
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/execute [参数]
|
|
23
|
+
/execute -t Task-001
|
|
24
|
+
/execute -I Iteration-001 --all
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 执行流程
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
用户输入 /execute [参数]
|
|
33
|
+
│
|
|
34
|
+
▼
|
|
35
|
+
┌───────────────────────────────────────┐
|
|
36
|
+
│ Step 1: 参数提取 │
|
|
37
|
+
│ 从用户输入提取 iteration/task/all 等 │
|
|
38
|
+
└───────────────┬───────────────────────┘
|
|
39
|
+
│
|
|
40
|
+
参数缺失?
|
|
41
|
+
│
|
|
42
|
+
是 ──► 输出交互式提示
|
|
43
|
+
│
|
|
44
|
+
否 ──► 继续
|
|
45
|
+
│
|
|
46
|
+
▼
|
|
47
|
+
┌───────────────────────────────────────┐
|
|
48
|
+
│ Step 2: 前置校验 │
|
|
49
|
+
│ - 任务是否存在? │
|
|
50
|
+
│ - 上游文档是否有更新? │
|
|
51
|
+
│ - 代码模式读取(.speccore/PATTERNS/) │
|
|
52
|
+
└───────────────┬───────────────────────┘
|
|
53
|
+
│
|
|
54
|
+
▼
|
|
55
|
+
┌───────────────────────────────────────┐
|
|
56
|
+
│ Step 3: 调用 speccore ask │
|
|
57
|
+
└───────────────────────────────────────┘
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Step 1: 参数提取
|
|
63
|
+
|
|
64
|
+
| 参数 | 短名 | 长名 | 必填 | 说明 |
|
|
65
|
+
|:---|:---|:---|:---|:---|
|
|
66
|
+
| iteration | -i | --iteration | 否 | 目标迭代名 |
|
|
67
|
+
| task | -t | --task | 否 | 指定任务(与 --all 互斥)|
|
|
68
|
+
| all | -a | --all | 否 | 全部待执行任务 |
|
|
69
|
+
| force | -f | --force | 否 | 跳过确认直接执行 |
|
|
70
|
+
| resume | -r | --resume | 否 | 断点续跑 |
|
|
71
|
+
| batch-size | -b | --batch-size | 否 | 每批任务数(默认 3)|
|
|
72
|
+
| verify | -v | --verify | 否 | 执行后自动验证 |
|
|
73
|
+
| agent | - | --agent | 否 | 外部 AI 工具 |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 2: 参数缺失 → 交互式提示
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
🔨 speccore execute — 执行开发
|
|
81
|
+
|
|
82
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
83
|
+
📋 当前环境
|
|
84
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
85
|
+
迭代: Iteration-001-meeting-system(从 context.json 读取)
|
|
86
|
+
待执行任务: 3 个(Task-001, Task-002, Task-003)
|
|
87
|
+
|
|
88
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
+
📖 可用参数
|
|
90
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
91
|
+
-I, --iteration <name> 目标迭代(默认: 当前迭代)
|
|
92
|
+
-t, --task <id> 指定任务(如 Task-001)
|
|
93
|
+
-a, --all 全部待执行任务
|
|
94
|
+
-f, --force 跳过确认直接执行
|
|
95
|
+
-r, --resume 断点续跑(从上次中断处继续)
|
|
96
|
+
--batch-size <n> 每批任务数(默认 3)
|
|
97
|
+
--verify 执行后自动运行测试验证
|
|
98
|
+
--agent <tool> 外部 AI 工具(copilot/claude/cursor/trae/qoder)
|
|
99
|
+
--ignore-upstream-update 跳过上游变更检测
|
|
100
|
+
|
|
101
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
+
💡 使用示例
|
|
103
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
+
/execute -t Task-001 # 执行单个任务
|
|
105
|
+
/execute --all # 执行全部待完成任务
|
|
106
|
+
/execute --all --force # 全部执行,跳过确认
|
|
107
|
+
/execute --resume # 断点续跑
|
|
108
|
+
/execute --all --batch-size 5 # 每批 5 个任务
|
|
109
|
+
/execute -t Task-001 --verify # 执行后自动验证
|
|
110
|
+
|
|
111
|
+
请补充参数后重新调用。
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Step 3: 前置校验
|
|
117
|
+
|
|
118
|
+
### 3.1 检查任务是否存在
|
|
119
|
+
```bash
|
|
120
|
+
# 扫描 030-tasks/ 目录
|
|
121
|
+
# 如果 Task 不存在 → 提示用户
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 3.2 检查任务状态
|
|
125
|
+
```bash
|
|
126
|
+
# 读取 Task/.meta/status
|
|
127
|
+
# 如果状态为 done → 提示用户是否重新执行
|
|
128
|
+
# 如果状态为 pending → 正常执行
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 3.3 上游变更检测
|
|
132
|
+
```bash
|
|
133
|
+
# 比较 020-specs/ 和 Task/00-specs/ 的 mtime
|
|
134
|
+
# 如果有更新 → 提示用户建议重新拆分
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 3.4 读取代码模式
|
|
138
|
+
```bash
|
|
139
|
+
# 读取 .speccore/PATTERNS/ 中匹配的代码模式
|
|
140
|
+
# 为 AI 提供参考代码片段
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Step 4: 调用 speccore ask
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
execute_command("speccore ask '执行 Task-XXX 的开发...'")
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
> ⚠️ 最终仍然调用 `speccore ask`,不要绕过 ask 引擎。
|
|
152
|
+
|
|
153
|
+
---
|
|
11
154
|
|
|
12
155
|
## 📦 批次执行模式(防止上下文溢出)
|
|
13
156
|
|
|
@@ -38,7 +181,7 @@ speccore execute --response '<代码JSON>' --task=<任务ID> -i <迭代名>
|
|
|
38
181
|
3. 在新对话中,先读取 `<path>` 文件恢复上下文(约 1K tokens,包含已完成任务摘要、待执行任务、依赖关系)
|
|
39
182
|
4. 然后执行提示的命令继续下一批次
|
|
40
183
|
|
|
41
|
-
> 💡
|
|
184
|
+
> 💡 "文件即记忆"机制:每个任务完成后,CLI 自动将进度、产出摘要、依赖关系写入摘要文件。
|
|
42
185
|
> 新会话只需读取这个文件(~1K tokens)就能恢复全局视角,无需重新扫描全部文件。
|
|
43
186
|
|
|
44
187
|
### 为什么需要批次执行?
|