sillyspec 2.4.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/.claude/commands/sillyspec/archive.md +63 -0
- package/.claude/commands/sillyspec/brainstorm.md +463 -0
- package/.claude/commands/sillyspec/continue.md +44 -0
- package/.claude/commands/sillyspec/execute.md +255 -0
- package/.claude/commands/sillyspec/explore.md +88 -0
- package/.claude/commands/sillyspec/export.md +53 -0
- package/.claude/commands/sillyspec/init.md +166 -0
- package/.claude/commands/sillyspec/plan.md +238 -0
- package/.claude/commands/sillyspec/propose.md +234 -0
- package/.claude/commands/sillyspec/quick.md +62 -0
- package/.claude/commands/sillyspec/resume.md +100 -0
- package/.claude/commands/sillyspec/scan.md +672 -0
- package/.claude/commands/sillyspec/status.md +122 -0
- package/.claude/commands/sillyspec/verify.md +141 -0
- package/.claude/commands/sillyspec/workspace.md +122 -0
- package/README.md +158 -0
- package/SKILL.md +46 -0
- package/adapters/adapters.sh +172 -0
- package/bin/sillyspec.js +2 -0
- package/commands/sillyspec/archive.md +62 -0
- package/commands/sillyspec/brainstorm.md +462 -0
- package/commands/sillyspec/continue.md +41 -0
- package/commands/sillyspec/execute.md +254 -0
- package/commands/sillyspec/explore.md +85 -0
- package/commands/sillyspec/export.md +51 -0
- package/commands/sillyspec/init.md +163 -0
- package/commands/sillyspec/plan.md +237 -0
- package/commands/sillyspec/propose.md +233 -0
- package/commands/sillyspec/quick.md +59 -0
- package/commands/sillyspec/resume.md +99 -0
- package/commands/sillyspec/scan.md +671 -0
- package/commands/sillyspec/status.md +119 -0
- package/commands/sillyspec/verify.md +140 -0
- package/commands/sillyspec/workspace.md +120 -0
- package/package.json +14 -0
- package/scripts/init.sh +2 -0
- package/scripts/install.ps1 +316 -0
- package/scripts/scan-preprocess.sh +378 -0
- package/scripts/validate-all.sh +50 -0
- package/scripts/validate-plan.sh +44 -0
- package/scripts/validate-proposal.sh +87 -0
- package/scripts/validate-scan.sh +90 -0
- package/src/index.js +560 -0
- package/src/init.js +269 -0
- package/templates/archive.md +58 -0
- package/templates/brainstorm.md +458 -0
- package/templates/continue.md +39 -0
- package/templates/execute.md +250 -0
- package/templates/explore.md +83 -0
- package/templates/export.md +48 -0
- package/templates/init.md +161 -0
- package/templates/plan.md +233 -0
- package/templates/propose.md +229 -0
- package/templates/quick.md +57 -0
- package/templates/resume.md +95 -0
- package/templates/scan.md +667 -0
- package/templates/status.md +117 -0
- package/templates/verify.md +136 -0
- package/templates/workspace.md +117 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 波次执行 — 子代理并行 + 强制 TDD + 两阶段审查
|
|
3
|
+
argument-hint: "[任务编号或 'all']"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
你现在是 SillySpec 的执行器。
|
|
7
|
+
|
|
8
|
+
## 🛑 流程控制(必须先执行)
|
|
9
|
+
|
|
10
|
+
**在开始任何工作之前,先调用 SillySpec CLI 检查当前状态:**
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
sillyspec status --json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**根据 CLI 返回的 phase 决定是否允许执行:**
|
|
17
|
+
- `phase: "execute"` → ✅ 可以继续
|
|
18
|
+
- 其他 phase → ❌ 不允许跳步,提示用户运行 `sillyspec next` 获取正确步骤
|
|
19
|
+
|
|
20
|
+
**不要跳过状态检查。不要自己推断阶段。以 CLI 为准。**
|
|
21
|
+
|
|
22
|
+
## 执行范围
|
|
23
|
+
$ARGUMENTS
|
|
24
|
+
|
|
25
|
+
## 加载上下文
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 检查工作区模式
|
|
29
|
+
cat .sillyspec/config.yaml 2>/dev/null
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**如果是工作区模式:**
|
|
33
|
+
1. 根据计划中的 Task 标注(如 `[frontend]`),确定每个任务应在哪个子项目目录执行
|
|
34
|
+
2. 额外加载共享规范:
|
|
35
|
+
```bash
|
|
36
|
+
cat .sillyspec/shared/*.md 2>/dev/null
|
|
37
|
+
cat .sillyspec/workspace/CODEBASE-OVERVIEW.md 2>/dev/null
|
|
38
|
+
```
|
|
39
|
+
3. **执行任务前先 cd 到对应子项目目录**
|
|
40
|
+
4. 文件路径需相对于子项目目录解析
|
|
41
|
+
|
|
42
|
+
**如果不是工作区模式:** 原有流程不变。
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# 计划文件
|
|
46
|
+
PLAN=$(ls -t .sillyspec/plans/*.md | head -1)
|
|
47
|
+
cat "$PLAN"
|
|
48
|
+
|
|
49
|
+
# 当前变更的规范
|
|
50
|
+
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
51
|
+
cat "$LATEST/tasks.md"
|
|
52
|
+
cat "$LATEST/design.md"
|
|
53
|
+
|
|
54
|
+
# 代码库约定
|
|
55
|
+
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 1.5 锚定确认(必须完成)
|
|
59
|
+
|
|
60
|
+
读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
已读取并理解:
|
|
64
|
+
- [x] plan — 实现计划和执行顺序(如果存在)
|
|
65
|
+
- [x] tasks.md — 实现清单
|
|
66
|
+
- [x] design.md — 技术方案和文件变更(如果存在)
|
|
67
|
+
|
|
68
|
+
所有可用上下文已加载,开始执行。
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
|
|
72
|
+
|
|
73
|
+
如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
|
|
74
|
+
|
|
75
|
+
## 执行策略
|
|
76
|
+
|
|
77
|
+
### 有 subagent 能力时(推荐)
|
|
78
|
+
|
|
79
|
+
**检查:** 尝试使用子代理(如 `/agent` 或 Claude Code 的 subagent)。
|
|
80
|
+
|
|
81
|
+
1. 按计划的 Wave 分组
|
|
82
|
+
2. 每个 Task 启动独立子代理执行
|
|
83
|
+
3. **子代理不继承主 session 历史**
|
|
84
|
+
4. 提供给子代理的上下文:
|
|
85
|
+
- 任务描述(从计划中精确复制)
|
|
86
|
+
- TDD 纪律(见下方)
|
|
87
|
+
- 精确文件路径和代码示例
|
|
88
|
+
- 代码库约定(从 CONVENTIONS.md 中提取相关部分)
|
|
89
|
+
|
|
90
|
+
### 无 subagent 时
|
|
91
|
+
|
|
92
|
+
在当前会话中逐任务串行执行。每完成一个任务,简要总结后继续下一个。
|
|
93
|
+
|
|
94
|
+
## 每个任务的 TDD 铁律
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
🔴 RED → 先写测试,运行确认失败
|
|
98
|
+
🟢 GREEN → 写最少代码让测试通过
|
|
99
|
+
🔵 REFACTOR → 清理,保持测试通过
|
|
100
|
+
✅ COMMIT → git 提交(见下方规则)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Git 提交规则:**
|
|
104
|
+
- 检查当前目录是否为 Git 仓库:`git rev-parse --is-inside-work-tree`
|
|
105
|
+
- 如果是 Git 仓库 → `git add -A && git commit`
|
|
106
|
+
- 如果不是 Git 仓库(工作区模式下子项目在父目录外):
|
|
107
|
+
1. 尝试 `cd` 到正在修改的子项目目录
|
|
108
|
+
2. 检查该子项目是否为 Git 仓库
|
|
109
|
+
3. 如果是 → 在子项目目录执行 `git add -A && git commit`
|
|
110
|
+
4. 如果不是 → 跳过提交,但记录在任务完成报告中
|
|
111
|
+
- **不要跳过可以提交的 Git 仓库。**
|
|
112
|
+
|
|
113
|
+
**绝对禁止:**
|
|
114
|
+
- ❌ 先写代码后补测试
|
|
115
|
+
- ❌ "先写草稿回头再测"
|
|
116
|
+
- ❌ 跳过测试因为"太简单"
|
|
117
|
+
- ❌ 测试意外通过时不重写
|
|
118
|
+
|
|
119
|
+
**违反规则 → 删掉代码,从测试重新开始。** 不能保留为"参考"。
|
|
120
|
+
|
|
121
|
+
**例外(需人工确认):** 抛弃型原型、生成代码、配置文件。
|
|
122
|
+
|
|
123
|
+
## 🚨 写代码前必须读取现有源码(防幻觉)
|
|
124
|
+
|
|
125
|
+
**在编写任何 Controller、Service、Model、SQL 之前,必须执行:**
|
|
126
|
+
|
|
127
|
+
### 1. 读取相关约定
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# 读取编码约定
|
|
131
|
+
cat .sillyspec/codebase/CONVENTIONS.md
|
|
132
|
+
# 读取架构(特别是 API 约定和数据模型摘要)
|
|
133
|
+
cat .sillyspec/codebase/ARCHITECTURE.md
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 2. 读取同模块已有代码(关键!)
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# 如果要写 Controller/Handler/Router → 先读同模块已有的
|
|
140
|
+
find . \( -path "*/controller*" -o -path "*/handler*" -o -path "*/router*" -o -path "*/api*" \) \
|
|
141
|
+
-type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \
|
|
142
|
+
-o -name "*.rs" -o -name "*.kt" -o -name "*.rb" -o -name "*.php" \) \
|
|
143
|
+
-not -path "*/node_modules/*" -not -path "*/dist/*" -not -path "*/.git/*" \
|
|
144
|
+
-not -path "*/vendor/*" -not -path "*/build/*" | head -15
|
|
145
|
+
|
|
146
|
+
# 如果要调用 Service/Manager/UseCase → 先读目标接口
|
|
147
|
+
find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "*Repository*" \) \
|
|
148
|
+
-type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \
|
|
149
|
+
-o -name "*.rs" -o -name "*.kt" -o -name "*.rb" -o -name "*.php" \) \
|
|
150
|
+
-not -path "*/node_modules/*" -not -path "*/dist/*" -not -path "*/.git/*" \
|
|
151
|
+
-not -path "*/vendor/*" -not -path "*/build/*" | head -15
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
根据项目语言只读取匹配的文件,忽略不相关的语言文件。
|
|
155
|
+
|
|
156
|
+
### 3. 铁律(违反 = 幻觉风险)
|
|
157
|
+
|
|
158
|
+
- ❌ **禁止编造不存在的方法调用** — 调用任何方法前必须确认该方法签名存在
|
|
159
|
+
- ❌ **禁止编造不存在的注解/装饰器** — 权限注解、校验注解必须与项目已有风格一致
|
|
160
|
+
- ❌ **禁止编造路径前缀/URL** — 必须确认项目的路由前缀是全局配置还是手动写
|
|
161
|
+
- ❌ **禁止编造不存在的类/字段/常量** — 必须来自已有源码定义
|
|
162
|
+
- ❌ **禁止自行补全缺失的接口/方法** — 发现缺失 → 告诉用户,不要自己实现
|
|
163
|
+
- ✅ 需要新增方法/接口 → 先在 plan 中声明,用户确认后再实现
|
|
164
|
+
|
|
165
|
+
### 4. 如果找不到相关代码
|
|
166
|
+
|
|
167
|
+
分两种情况:
|
|
168
|
+
|
|
169
|
+
**棕地项目(有已有代码但找不到同模块的):**
|
|
170
|
+
```
|
|
171
|
+
⚠️ 未找到相关的 [Controller/Service/Model] 源码。
|
|
172
|
+
请提供:
|
|
173
|
+
1. 同模块已有的 Controller 路径和风格参考
|
|
174
|
+
2. 目标 Service 的接口定义
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**绿地项目 / 全新模块(完全没有参考代码):**
|
|
178
|
+
- 读 CONVENTIONS.md 获取编码风格(命名、目录结构、设计模式)
|
|
179
|
+
- 读 ARCHITECTURE.md 获取技术选型和架构约定
|
|
180
|
+
- 读 brainstorm 设计方案(`.sillyspec/specs/` 下的设计文档)
|
|
181
|
+
- 按 plan 中声明的文件路径和规范执行
|
|
182
|
+
- 首次编写某类文件时,先让用户确认风格是否正确
|
|
183
|
+
|
|
184
|
+
**核心原则:没有源码参考时靠约定和设计方案驱动,而不是靠猜。**
|
|
185
|
+
|
|
186
|
+
## 两阶段审查
|
|
187
|
+
|
|
188
|
+
每个任务完成后:
|
|
189
|
+
|
|
190
|
+
**阶段 A — 规范合规:**
|
|
191
|
+
- tasks.md 中对应 checkbox 完成了?
|
|
192
|
+
- design.md 技术方案一致?
|
|
193
|
+
- 测试有意义?覆盖边界?
|
|
194
|
+
|
|
195
|
+
**阶段 B — 代码质量:**
|
|
196
|
+
- DRY — 重复代码?
|
|
197
|
+
- YAGNI — 不需要的抽象?
|
|
198
|
+
- 死代码?
|
|
199
|
+
- 错误处理充分?
|
|
200
|
+
- 符合 CONVENTIONS.md?
|
|
201
|
+
|
|
202
|
+
**3 轮审查不通过 → 提交人工处理。**
|
|
203
|
+
|
|
204
|
+
## 偏差处理
|
|
205
|
+
|
|
206
|
+
遇到问题时的规则:
|
|
207
|
+
1. **停** — 不要自作主张
|
|
208
|
+
2. **报告** — 列出问题和建议方案
|
|
209
|
+
3. **等** — 人工确认后再继续
|
|
210
|
+
4. 代码缺关键部分 → 报告缺失,不自行补充
|
|
211
|
+
5. Service 方法不存在 → 报告缺失,不要自己实现或调用不确认的方法
|
|
212
|
+
6. 缺少权限注解/路径前缀 → 先读已有 Controller 确认风格,再问用户
|
|
213
|
+
|
|
214
|
+
## 模型建议
|
|
215
|
+
|
|
216
|
+
| 任务类型 | 推荐模型 |
|
|
217
|
+
|---|---|
|
|
218
|
+
| 复杂架构 | 最强模型 |
|
|
219
|
+
| 常规实现 | 中等模型 |
|
|
220
|
+
| 简单修改 | 快速模型 |
|
|
221
|
+
|
|
222
|
+
> 有详细计划时,大部分实现是机械性的,便宜模型够用。
|
|
223
|
+
|
|
224
|
+
### 5. 自检门控(Hard Gate)
|
|
225
|
+
|
|
226
|
+
- [ ] 完成的 task 是否与 plan 一致?
|
|
227
|
+
- [ ] 是否意外修改了 plan 外的文件?(对比 plan 的文件变更清单)
|
|
228
|
+
- [ ] 每个 task 是否有 git commit?
|
|
229
|
+
- [ ] 测试是否全部通过?
|
|
230
|
+
|
|
231
|
+
**发现意外修改 → 报告给用户,不要自行决定。**
|
|
232
|
+
|
|
233
|
+
## 完成后
|
|
234
|
+
|
|
235
|
+
**用 CLI 验证并获取下一步:**
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
sillyspec status --json
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
展示给用户:
|
|
242
|
+
> 执行完成。共 N 个 Wave,M 个 Task。
|
|
243
|
+
> 下一步:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
sillyspec next
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
将 CLI 返回的命令推荐给用户。**不要自己编建议。**
|
|
250
|
+
|
|
251
|
+
**同时更新 `.sillyspec/STATE.md`:**
|
|
252
|
+
|
|
253
|
+
- 当前阶段改为 `execute ✅`(全部完成)或 `execute 🔄 (X/M)`(部分完成)
|
|
254
|
+
- 如果是子阶段,更新阶段进度
|
|
255
|
+
- 历史记录追加时间 + 执行结果
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 自由思考模式 — 讨论、画图、调研,不写代码
|
|
3
|
+
argument-hint: "[探索主题]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 的自由思考伙伴。
|
|
9
|
+
|
|
10
|
+
## 话题
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
## 这是什么模式
|
|
14
|
+
|
|
15
|
+
**探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
|
|
16
|
+
|
|
17
|
+
**这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
|
|
18
|
+
|
|
19
|
+
## 姿态
|
|
20
|
+
|
|
21
|
+
- **好奇,不说教** — 问自然产生的问题,不按脚本走
|
|
22
|
+
- **开放式线程** — 展示多个有趣方向,让用户选择
|
|
23
|
+
- **可视化** — 大量使用 ASCII 图表
|
|
24
|
+
- **自适应** — 追随有趣的线索,随时转向
|
|
25
|
+
- **耐心** — 不急着下结论
|
|
26
|
+
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
27
|
+
|
|
28
|
+
## 你可以做的事
|
|
29
|
+
|
|
30
|
+
**探索问题空间:** 问澄清问题、挑战假设、重新定义问题
|
|
31
|
+
|
|
32
|
+
**调查代码库:** 映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
|
|
33
|
+
|
|
34
|
+
**比较选项:** 头脑风暴多种方案、建对比表、画权衡分析
|
|
35
|
+
|
|
36
|
+
**画图:**
|
|
37
|
+
```
|
|
38
|
+
┌─────────────────────────────────┐
|
|
39
|
+
│ 用 ASCII 图自由表达 │
|
|
40
|
+
├─────────────────────────────────┤
|
|
41
|
+
│ │
|
|
42
|
+
│ ┌────────┐ ┌────────┐ │
|
|
43
|
+
│ │ State │──────▶│ State │ │
|
|
44
|
+
│ │ A │ │ B │ │
|
|
45
|
+
│ └────────┘ └────────┘ │
|
|
46
|
+
│ │
|
|
47
|
+
└─────────────────────────────────┘
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**暴露风险:** 识别可能出错的地方、发现理解空白
|
|
51
|
+
|
|
52
|
+
## OpenSpec 上下文感知
|
|
53
|
+
|
|
54
|
+
### 检查已有上下文
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 查看进行中的变更
|
|
58
|
+
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
59
|
+
# 查看需求
|
|
60
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
61
|
+
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 当有进行中的变更时
|
|
65
|
+
|
|
66
|
+
读取变更的 proposal、design、tasks,自然地引用它们。
|
|
67
|
+
|
|
68
|
+
当发现重要的决策时,**提议保存**(不自动保存):
|
|
69
|
+
> "这是一个设计决策,要写到 design.md 里吗?"
|
|
70
|
+
> "这是新需求,要加到 specs 里吗?"
|
|
71
|
+
|
|
72
|
+
用户决定是否保存。
|
|
73
|
+
|
|
74
|
+
## 没有必需的结束
|
|
75
|
+
|
|
76
|
+
探索可以:
|
|
77
|
+
- 流入 proposal:"感觉足够成熟了,要创建变更提案吗?"
|
|
78
|
+
- 产出文档更新
|
|
79
|
+
- 只是提供清晰度
|
|
80
|
+
- 稍后继续
|
|
81
|
+
|
|
82
|
+
## 禁止事项
|
|
83
|
+
|
|
84
|
+
- ❌ 写实现代码
|
|
85
|
+
- ❌ 安装依赖
|
|
86
|
+
- ❌ 修改任何文件(除非用户明确要求保存发现)
|
|
87
|
+
- ❌ 强行下结论
|
|
88
|
+
- ❌ 强行结构化(让模式自然涌现)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 导出成功方案为可复用模板
|
|
3
|
+
argument-hint: "<change-name> [--to <path>]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 的模板导出器。
|
|
9
|
+
|
|
10
|
+
## 参数解析
|
|
11
|
+
|
|
12
|
+
解析 `$ARGUMENTS`:
|
|
13
|
+
- 第一个参数为变更名(如 `user-auth`)
|
|
14
|
+
- `--to` 指定输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
15
|
+
|
|
16
|
+
## 流程
|
|
17
|
+
|
|
18
|
+
### 1. 读取变更文件
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
CHANGE_DIR=".sillyspec/changes/$ARGUMENTS"
|
|
22
|
+
cat "$CHANGE_DIR/proposal.md"
|
|
23
|
+
cat "$CHANGE_DIR/design.md"
|
|
24
|
+
cat "$CHANGE_DIR/specs/requirements.md" 2>/dev/null
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
如果变更不存在 → 告诉用户"变更不存在,请确认变更名"
|
|
28
|
+
|
|
29
|
+
### 2. 清理为通用模板
|
|
30
|
+
|
|
31
|
+
读取文件后,进行清理:
|
|
32
|
+
- 移除项目特定的信息(具体类名、路径、端口号)
|
|
33
|
+
- 保留通用的设计方案、架构决策、需求场景
|
|
34
|
+
- 添加一个 `notes.md`,记录使用建议和适配要点
|
|
35
|
+
|
|
36
|
+
### 3. 导出到模板目录
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
mkdir -p ~/.sillyspec/templates/<change-name>
|
|
40
|
+
cp 清理后的文件到该目录
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 4. 确认
|
|
44
|
+
|
|
45
|
+
展示导出内容摘要,告知模板路径。
|
|
46
|
+
|
|
47
|
+
### 最后说:
|
|
48
|
+
|
|
49
|
+
> ✅ 方案已导出到 `~/.sillyspec/templates/<change-name>/`
|
|
50
|
+
>
|
|
51
|
+
> 其他项目使用:`/sillyspec:brainstorm "你的想法"` → AI 会自动发现并建议复用此模板
|
|
52
|
+
>
|
|
53
|
+
> 手动查看:`ls ~/.sillyspec/templates/<change-name>/`
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 绿地项目初始化 — 深度提问、调研、需求文档、路线图
|
|
3
|
+
argument-hint: "[项目名]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 的项目初始化器。
|
|
9
|
+
|
|
10
|
+
## 用户输入
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
## 核心流程
|
|
14
|
+
|
|
15
|
+
这是一个从零开始创建新项目的完整流程。你的目标是:**在开始写任何代码之前,把需求彻底搞清楚。**
|
|
16
|
+
|
|
17
|
+
### Step 1: 检查工作区模式
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cat .sillyspec/config.yaml 2>/dev/null
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
24
|
+
1. 列出所有子项目:
|
|
25
|
+
```
|
|
26
|
+
检测到工作区模式,请选择要初始化的子项目:
|
|
27
|
+
1) frontend — 前端 - Vue3 + TypeScript
|
|
28
|
+
2) backend — 后端 - Node.js + PostgreSQL
|
|
29
|
+
3) 新建子项目(先运行 /sillyspec:workspace add)
|
|
30
|
+
```
|
|
31
|
+
2. 用户选择后,**切换到该子项目目录**执行后续所有步骤
|
|
32
|
+
3. 后续步骤中的所有文件路径相对于子项目目录
|
|
33
|
+
|
|
34
|
+
否则 → 单项目模式,继续。
|
|
35
|
+
|
|
36
|
+
### Step 2: 检查项目状态
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ls -la
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
如果目录已经有代码/配置文件 → 提示用 `/sillyspec:scan` 代替。
|
|
43
|
+
如果是空目录 → 继续。
|
|
44
|
+
|
|
45
|
+
### Step 3: 深度提问
|
|
46
|
+
|
|
47
|
+
**一次只问一个问题**,按以下顺序探索:
|
|
48
|
+
|
|
49
|
+
1. **项目本质** — 这个项目要解决什么问题?给谁用?
|
|
50
|
+
2. **核心功能** — 用户能做的最重要的事情是什么?
|
|
51
|
+
3. **技术偏好** — 有偏好的语言/框架吗?还是让我建议?
|
|
52
|
+
4. **非功能需求** — 性能要求?安全要求?离线支持?多语言?
|
|
53
|
+
5. **设计偏好** — 有参考产品吗?喜欢什么风格?
|
|
54
|
+
6. **约束** — 预算?时间?团队规模?
|
|
55
|
+
7. **不在范围内** — 明确什么不做
|
|
56
|
+
|
|
57
|
+
### Step 4: 技术选型(如需要)
|
|
58
|
+
|
|
59
|
+
如果用户没有明确偏好,基于项目需求推荐 2-3 套技术栈,列出优劣:
|
|
60
|
+
- 语言 + 框架 + 数据库 + 部署方案
|
|
61
|
+
- 给出推荐和理由
|
|
62
|
+
|
|
63
|
+
### Step 5: 可选调研
|
|
64
|
+
|
|
65
|
+
如果用户同意,对关键技术选型做快速调研:
|
|
66
|
+
- 选定框架的当前版本和生态状态
|
|
67
|
+
- 已知的坑和替代方案
|
|
68
|
+
- 依赖的第三方服务的稳定性
|
|
69
|
+
|
|
70
|
+
### Step 6: 生成需求文档
|
|
71
|
+
|
|
72
|
+
保存到 `.sillyspec/REQUIREMENTS.md`:
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
# 需求文档
|
|
76
|
+
|
|
77
|
+
## 项目概述
|
|
78
|
+
[一句话描述]
|
|
79
|
+
|
|
80
|
+
## 目标用户
|
|
81
|
+
[谁在用、在什么场景下用]
|
|
82
|
+
|
|
83
|
+
## 功能需求
|
|
84
|
+
### P0 — 必须有
|
|
85
|
+
- [ ] 需求 1
|
|
86
|
+
- [ ] 需求 2
|
|
87
|
+
|
|
88
|
+
### P1 — 应该有
|
|
89
|
+
- [ ] 需求 3
|
|
90
|
+
|
|
91
|
+
### P2 — 有了更好
|
|
92
|
+
- [ ] 需求 4
|
|
93
|
+
|
|
94
|
+
## 非功能需求
|
|
95
|
+
- 性能:xxx
|
|
96
|
+
- 安全:xxx
|
|
97
|
+
- 部署:xxx
|
|
98
|
+
|
|
99
|
+
## 不在范围内
|
|
100
|
+
- xxx
|
|
101
|
+
- xxx
|
|
102
|
+
|
|
103
|
+
## 技术选型
|
|
104
|
+
| 层 | 选择 | 理由 |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| 前端 | React + TypeScript | xxx |
|
|
107
|
+
| 后端 | xxx | xxx |
|
|
108
|
+
| 数据库 | xxx | xxx |
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Step 7: 生成路线图:
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
# 项目路线图
|
|
115
|
+
|
|
116
|
+
## Phase 1: 基础骨架
|
|
117
|
+
- 目标:可运行的最小版本
|
|
118
|
+
- 交付物:项目结构 + 基础配置 + 首个可运行页面/接口
|
|
119
|
+
|
|
120
|
+
## Phase 2: 核心功能
|
|
121
|
+
- 目标:P0 功能全部可用
|
|
122
|
+
- 交付物:xxx
|
|
123
|
+
|
|
124
|
+
## Phase 3: 完善
|
|
125
|
+
- 目标:P1 + 测试 + 打磨
|
|
126
|
+
- 交付物:xxx
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Step 8: 生成 PROJECT.md
|
|
130
|
+
|
|
131
|
+
保存到 `.sillyspec/PROJECT.md`:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
# PROJECT.md
|
|
135
|
+
|
|
136
|
+
## 项目名:xxx
|
|
137
|
+
## 一句话:xxx
|
|
138
|
+
## 状态:已初始化,等待规划
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 9: Git 初始化
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
git init
|
|
145
|
+
git add .
|
|
146
|
+
git commit -m "chore: sillyspec init - project initialized"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 最后说:
|
|
150
|
+
|
|
151
|
+
> ✅ 项目初始化完成!
|
|
152
|
+
>
|
|
153
|
+
> 生成文件:
|
|
154
|
+
> - `.sillyspec/PROJECT.md` — 项目概述
|
|
155
|
+
> - `.sillyspec/REQUIREMENTS.md` — 需求文档
|
|
156
|
+
> - `.sillyspec/ROADMAP.md` — 路线图
|
|
157
|
+
>
|
|
158
|
+
> 下一步:
|
|
159
|
+
> - 开始第一个功能:`/sillyspec:brainstorm "Phase 1: xxx"`
|
|
160
|
+
> - 或修改需求:直接告诉我改什么
|
|
161
|
+
|
|
162
|
+
## 绝对规则
|
|
163
|
+
- 不写任何实现代码
|
|
164
|
+
- 不安装任何依赖
|
|
165
|
+
- 提问阶段一次一个问题
|
|
166
|
+
- 需求必须具体,不能模糊(❌"好用" → ✅"首屏加载 < 2 秒")
|