sillyspec 3.8.4 → 3.8.6
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 +0 -6
- package/docs/.vitepress/config.mts +45 -0
- package/docs/.vitepress/dist/404.html +25 -0
- package/docs/.vitepress/dist/assets/app.YytxICdd.js +1 -0
- package/docs/.vitepress/dist/assets/chunks/framework.Czhw_PXq.js +19 -0
- package/docs/.vitepress/dist/assets/chunks/theme.DusTRZQk.js +1 -0
- package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.js +1 -0
- package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.lean.js +1 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.js +15 -0
- package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.js +4 -0
- package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.js +4 -0
- package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.js +5 -0
- package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.js +28 -0
- package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.lean.js +1 -0
- package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.js +30 -0
- package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.lean.js +1 -0
- package/docs/.vitepress/dist/assets/style.DFTx90Kk.css +1 -0
- package/docs/.vitepress/dist/hashmap.json +1 -0
- package/docs/.vitepress/dist/index.html +28 -0
- package/docs/.vitepress/dist/sillyspec/commands.html +42 -0
- package/docs/.vitepress/dist/sillyspec/dashboard.html +31 -0
- package/docs/.vitepress/dist/sillyspec/file-io.html +28 -0
- package/docs/.vitepress/dist/sillyspec/getting-started.html +31 -0
- package/docs/.vitepress/dist/sillyspec/install.html +32 -0
- package/docs/.vitepress/dist/sillyspec/lifecycle.html +55 -0
- package/docs/.vitepress/dist/sillyspec/structure.html +57 -0
- package/docs/.vitepress/dist/vp-icons.css +1 -0
- package/docs/index.md +34 -0
- package/docs/sillyspec/commands.md +218 -0
- package/docs/sillyspec/dashboard.md +51 -0
- package/docs/sillyspec/file-io.md +34 -0
- package/docs/sillyspec/getting-started.md +61 -0
- package/docs/sillyspec/install.md +51 -0
- package/docs/sillyspec/lifecycle.md +146 -0
- package/docs/sillyspec/structure.md +62 -0
- package/package.json +11 -9
- package/packages/dashboard/dist/assets/index-Bh-GPjKY.css +1 -0
- package/packages/dashboard/dist/assets/index-CrCn5Gg6.js +17 -0
- package/packages/dashboard/dist/index.html +2 -2
- package/packages/dashboard/package-lock.json +0 -220
- package/packages/dashboard/package.json +5 -8
- package/packages/dashboard/server/index.js +106 -255
- package/packages/dashboard/server/parser.js +29 -333
- package/packages/dashboard/server/watcher.js +131 -203
- package/packages/dashboard/src/App.vue +10 -181
- package/packages/dashboard/src/components/ActionBar.vue +42 -26
- package/packages/dashboard/src/components/CommandPalette.vue +65 -40
- package/packages/dashboard/src/components/DetailPanel.vue +53 -68
- package/packages/dashboard/src/components/LogStream.vue +33 -13
- package/packages/dashboard/src/components/PipelineStage.vue +8 -8
- package/packages/dashboard/src/components/PipelineView.vue +45 -80
- package/packages/dashboard/src/components/ProjectList.vue +45 -103
- package/packages/dashboard/src/components/StageBadge.vue +13 -13
- package/packages/dashboard/src/components/StepCard.vue +15 -15
- package/packages/dashboard/src/composables/useDashboard.js +6 -20
- package/packages/dashboard/src/composables/useKeyboard.js +4 -6
- package/packages/dashboard/src/main.js +1 -4
- package/packages/dashboard/src/style.css +17 -17
- package/src/index.js +12 -123
- package/src/init.js +227 -86
- package/src/setup.js +9 -1
- package/templates/archive.md +121 -0
- package/templates/brainstorm.md +240 -0
- package/{.claude/skills/sillyspec-commit/SKILL.md → templates/commit.md} +47 -29
- package/templates/continue.md +32 -0
- package/templates/execute.md +314 -0
- package/templates/explore.md +60 -0
- package/templates/export.md +21 -0
- package/templates/init.md +61 -0
- package/templates/plan.md +157 -0
- package/templates/quick.md +135 -0
- package/templates/scan-quick.md +49 -0
- package/templates/scan.md +172 -0
- package/templates/skills/playwright-e2e/SKILL.md +340 -0
- package/templates/status.md +75 -0
- package/templates/verify.md +253 -0
- package/templates/workspace-sync.md +99 -0
- package/templates/workspace.md +70 -0
- package/.claude/skills/sillyspec-archive/SKILL.md +0 -17
- package/.claude/skills/sillyspec-auto/SKILL.md +0 -77
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -17
- package/.claude/skills/sillyspec-continue/SKILL.md +0 -44
- package/.claude/skills/sillyspec-doctor/SKILL.md +0 -22
- package/.claude/skills/sillyspec-execute/SKILL.md +0 -17
- package/.claude/skills/sillyspec-explore/SKILL.md +0 -96
- package/.claude/skills/sillyspec-export/SKILL.md +0 -53
- package/.claude/skills/sillyspec-init/SKILL.md +0 -170
- package/.claude/skills/sillyspec-plan/SKILL.md +0 -52
- package/.claude/skills/sillyspec-propose/SKILL.md +0 -17
- package/.claude/skills/sillyspec-quick/SKILL.md +0 -17
- package/.claude/skills/sillyspec-resume/SKILL.md +0 -111
- package/.claude/skills/sillyspec-scan/SKILL.md +0 -17
- package/.claude/skills/sillyspec-state/SKILL.md +0 -54
- package/.claude/skills/sillyspec-status/SKILL.md +0 -17
- package/.claude/skills/sillyspec-verify/SKILL.md +0 -17
- package/.claude/skills/sillyspec-workspace/SKILL.md +0 -149
- package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
- package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
- package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
- package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
- package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
- package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
- package/.sillyspec/changes/auto-mode/design.md +0 -50
- package/.sillyspec/changes/auto-mode/proposal.md +0 -19
- package/.sillyspec/changes/auto-mode/requirements.md +0 -21
- package/.sillyspec/changes/auto-mode/tasks.md +0 -7
- package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
- package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
- package/.sillyspec/changes/run-command-design/design.md +0 -1230
- package/.sillyspec/changes/unified-docs-design/design.md +0 -199
- package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
- package/.sillyspec/knowledge/INDEX.md +0 -8
- package/.sillyspec/knowledge/uncategorized.md +0 -3
- package/.sillyspec/projects/sillyspec.yaml +0 -3
- package/packages/dashboard/dist/assets/index-D1EVTLmc.js +0 -7446
- package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
- package/packages/dashboard/public/logo.jpg +0 -0
- package/packages/dashboard/src/components/DocPreview.vue +0 -160
- package/packages/dashboard/src/components/DocTree.vue +0 -58
- package/packages/dashboard/src/components/ProjectOverview.vue +0 -178
- package/packages/dashboard/src/components/detail/DocsDetail.vue +0 -48
- package/packages/dashboard/src/components/detail/GitDetail.vue +0 -61
- package/packages/dashboard/src/components/detail/TechDetail.vue +0 -43
- package/src/derive.js +0 -147
- package/src/migrate.js +0 -117
- package/src/progress.js +0 -495
- package/src/run.js +0 -640
- package/src/stages/archive.js +0 -54
- package/src/stages/brainstorm.js +0 -239
- package/src/stages/doctor.js +0 -312
- package/src/stages/execute.js +0 -258
- package/src/stages/index.js +0 -35
- package/src/stages/plan.js +0 -259
- package/src/stages/propose.js +0 -115
- package/src/stages/quick.js +0 -64
- package/src/stages/scan.js +0 -141
- package/src/stages/status.js +0 -65
- package/src/stages/verify.js +0 -135
- /package/.sillyspec/{changes/brainstorm-archive → specs}/2026-04-05-dashboard-design.md +0 -0
- /package/{packages/dashboard → docs/.vitepress}/dist/favicon.jpg +0 -0
- /package/{logo.jpg → docs/.vitepress/dist/logo.jpg} +0 -0
- /package/{packages/dashboard → docs}/public/favicon.jpg +0 -0
- /package/{packages/dashboard/dist → docs/public}/logo.jpg +0 -0
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:workspace
|
|
3
|
-
description: 工作区管理 — 初始化、管理多项目工作区,查看子项目状态
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 交互规范
|
|
7
|
-
|
|
8
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
9
|
-
|
|
10
|
-
不要用编号列表让用户手动输入数字。
|
|
11
|
-
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
你现在是 SillySpec 的工作区管理器。
|
|
16
|
-
|
|
17
|
-
## 用户指令
|
|
18
|
-
$ARGUMENTS
|
|
19
|
-
|
|
20
|
-
## 核心流程
|
|
21
|
-
|
|
22
|
-
### Step 1: 检查工作区配置
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
|
|
29
|
-
1. 初始化工作区
|
|
30
|
-
2. 跳过
|
|
31
|
-
|
|
32
|
-
### Step 2: 解析指令
|
|
33
|
-
|
|
34
|
-
根据 `$ARGUMENTS` 或默认行为:
|
|
35
|
-
|
|
36
|
-
- **无参数 / `status`** → 显示工作区状态
|
|
37
|
-
- **`add`** → 添加子项目
|
|
38
|
-
- **`remove`** → 移除子项目
|
|
39
|
-
- **`info`** → 显示某个子项目详情
|
|
40
|
-
- 无参数且 projects/*.yaml 不存在 → 初始化工作区
|
|
41
|
-
|
|
42
|
-
### Step 3: 执行对应操作
|
|
43
|
-
|
|
44
|
-
#### 3a. 初始化工作区(projects/ 不存在时)
|
|
45
|
-
|
|
46
|
-
1. 询问工作区名称(默认用当前目录名)
|
|
47
|
-
2. 逐个添加子项目:
|
|
48
|
-
- 询问子项目名称(如 `frontend`、`backend`)
|
|
49
|
-
- 询问子项目路径(相对于工作区根目录,如 `./frontend`)
|
|
50
|
-
- 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
|
|
51
|
-
- 询问仓库地址(可选)
|
|
52
|
-
- 验证路径存在
|
|
53
|
-
添加完后询问:
|
|
54
|
-
> 1. 继续添加子项目
|
|
55
|
-
> 2. 完成,配置共享规范
|
|
56
|
-
3. 询问共享规范文件
|
|
57
|
-
4. 为每个子项目创建 `.sillyspec/projects/<name>.yaml`:
|
|
58
|
-
```yaml
|
|
59
|
-
name: <name>
|
|
60
|
-
path: <relative-path>
|
|
61
|
-
status: active
|
|
62
|
-
role: <description>
|
|
63
|
-
repo: <repo-url> # 可选
|
|
64
|
-
```
|
|
65
|
-
5. 创建 `.sillyspec/shared/` 目录
|
|
66
|
-
|
|
67
|
-
#### 3b. 添加子项目(`add`)
|
|
68
|
-
|
|
69
|
-
1. 询问名称、路径、角色
|
|
70
|
-
2. 验证路径存在
|
|
71
|
-
3. 创建/更新 `.sillyspec/projects/<name>.yaml`
|
|
72
|
-
4. Git 提交
|
|
73
|
-
|
|
74
|
-
#### 3c. 移除子项目(`remove`)
|
|
75
|
-
|
|
76
|
-
1. 显示当前所有子项目列表
|
|
77
|
-
2. 询问要移除哪个:
|
|
78
|
-
> 1. (列出子项目名称)
|
|
79
|
-
> 2. 取消
|
|
80
|
-
3. 删除 `.sillyspec/projects/<name>.yaml`
|
|
81
|
-
4. Git 提交
|
|
82
|
-
|
|
83
|
-
#### 3d. 工作区状态(`status`,默认)
|
|
84
|
-
|
|
85
|
-
读取所有 `projects/*.yaml`,对每个子项目检查:
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
# 读取子项目列表
|
|
89
|
-
for f in .sillyspec/projects/*.yaml; do
|
|
90
|
-
[ -f "$f" ] || continue
|
|
91
|
-
proj_name=$(basename "$f" .yaml)
|
|
92
|
-
proj_path=$(grep '^path:' "$f" | head -1 | sed 's/^path:[[:space:]]*//')
|
|
93
|
-
proj_role=$(grep '^role:' "$f" | head -1 | sed 's/^role:[[:space:]]*//')
|
|
94
|
-
# 检查子项目状态
|
|
95
|
-
cd "$proj_path"
|
|
96
|
-
ls .sillyspec/ 2>/dev/null
|
|
97
|
-
cat .sillyspec/PROJECT.md 2>/dev/null
|
|
98
|
-
ls docs/${proj_name}/scan/ 2>/dev/null | wc -l
|
|
99
|
-
cd -
|
|
100
|
-
done
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
输出格式:
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
🏢 工作区:<workspace-name>
|
|
107
|
-
|
|
108
|
-
📦 子项目(N 个):
|
|
109
|
-
✅ frontend ./frontend 前端 - Vue3 + TypeScript 已扫描(7 份文档)
|
|
110
|
-
⚠️ backend ./backend 后端 - Node.js 已初始化(未扫描)
|
|
111
|
-
❌ miniprogram ./miniprogram 小程序 - Taro 未初始化
|
|
112
|
-
|
|
113
|
-
📄 共享规范:2 份
|
|
114
|
-
- api-contract.md
|
|
115
|
-
- data-models.md
|
|
116
|
-
|
|
117
|
-
💡 操作:
|
|
118
|
-
/sillyspec:workspace add — 添加子项目
|
|
119
|
-
/sillyspec:workspace remove — 移除子项目
|
|
120
|
-
/sillyspec:init — 初始化子项目
|
|
121
|
-
/sillyspec:scan — 扫描子项目
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
#### 3e. 子项目详情(`info <name>`)
|
|
125
|
-
|
|
126
|
-
显示指定子项目的详细信息,包括 PROJECT.md、REQUIREMENTS.md 内容摘要、扫描文档列表。
|
|
127
|
-
|
|
128
|
-
### Step 4: projects/*.yaml 格式
|
|
129
|
-
|
|
130
|
-
每个子项目对应 `.sillyspec/projects/<name>.yaml`:
|
|
131
|
-
|
|
132
|
-
```yaml
|
|
133
|
-
name: frontend
|
|
134
|
-
path: ./frontend
|
|
135
|
-
status: active
|
|
136
|
-
role: 前端 - Vue3 + TypeScript
|
|
137
|
-
repo: https://github.com/xxx/frontend.git # 可选
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### 最后说:
|
|
141
|
-
|
|
142
|
-
> 工作区已更新。
|
|
143
|
-
> 下一步:对子项目运行 `/sillyspec:init` 或 `/sillyspec:scan`。
|
|
144
|
-
|
|
145
|
-
## 绝对规则
|
|
146
|
-
- 不修改子项目目录下的任何文件
|
|
147
|
-
- projects/*.yaml 必须是合法 YAML
|
|
148
|
-
- 子项目路径必须是相对于工作区根目录的相对路径
|
|
149
|
-
- 路径必须验证存在性
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# deriveState 状态推导
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:10:00
|
|
5
|
-
|
|
6
|
-
## 背景
|
|
7
|
-
|
|
8
|
-
当前 sillyspec 的状态管理依赖 `progress.json` 作为唯一数据源。如果 AI 崩溃或异常中断,progress.json 可能与实际产出不一致(如 artifacts 文件已生成但步骤未标记完成)。
|
|
9
|
-
|
|
10
|
-
借鉴 GSD v2 的 deriveState 架构,从文件系统反推状态,与 progress.json 交叉校验。
|
|
11
|
-
|
|
12
|
-
## 需求
|
|
13
|
-
|
|
14
|
-
1. `--done` 完成步骤时轻量校验当前步骤
|
|
15
|
-
2. `doctor` 自检时全量扫描所有阶段
|
|
16
|
-
3. `progress validate --deep` 支持手动触发全量校验
|
|
17
|
-
4. 安全修复策略:明显正确的情况自动修复,有歧义的不动
|
|
18
|
-
|
|
19
|
-
## 设计
|
|
20
|
-
|
|
21
|
-
### 新增文件:`src/derive.js`
|
|
22
|
-
|
|
23
|
-
纯函数模块,零外部依赖(仅 fs/path)。
|
|
24
|
-
|
|
25
|
-
```js
|
|
26
|
-
export function deriveState(cwd, options = {}) {
|
|
27
|
-
// options.mode: 'light' | 'full'(默认 light)
|
|
28
|
-
// options.fix: boolean(默认 false,只报告不修复)
|
|
29
|
-
// 返回 { issues: [{type, severity, step, artifact, suggestion}], fixed: number }
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
#### 扫描逻辑
|
|
34
|
-
|
|
35
|
-
1. 读取 progress.json,获取所有阶段步骤状态
|
|
36
|
-
2. 扫描 `.sillyspec/.runtime/artifacts/` 目录
|
|
37
|
-
3. 文件名格式:`{stage}-step{N}-{timestamp}.txt`
|
|
38
|
-
4. 解析文件名提取 stage、stepIndex 信息
|
|
39
|
-
5. 对比规则:
|
|
40
|
-
|
|
41
|
-
| 情况 | 严重度 | 自动修复 |
|
|
42
|
-
|------|--------|----------|
|
|
43
|
-
| artifacts 有文件但 progress 标记未完成 | issue | ✅ 标记为 done |
|
|
44
|
-
| progress 标记已完成但 artifacts 无文件 | warning | ❌ 可能被手动清理 |
|
|
45
|
-
| artifacts 有 step5 但 progress 只到 step3 | issue | ✅ 补齐中间步骤 |
|
|
46
|
-
|
|
47
|
-
#### 模式
|
|
48
|
-
|
|
49
|
-
- **light**:只检查 currentStage 的当前步骤和前一步
|
|
50
|
-
- **full**:检查所有阶段所有步骤
|
|
51
|
-
|
|
52
|
-
### 集成方式
|
|
53
|
-
|
|
54
|
-
#### 1. run.js — `--done` 轻量校验
|
|
55
|
-
|
|
56
|
-
在 `completeStep` 末尾:
|
|
57
|
-
```js
|
|
58
|
-
import { deriveState } from './derive.js';
|
|
59
|
-
const result = deriveState(cwd, { mode: 'light', fix: true });
|
|
60
|
-
if (result.fixed > 0) {
|
|
61
|
-
console.log(`⚠️ 状态修复:${result.fixed} 个步骤已从 artifacts 恢复`);
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
#### 2. doctor.js — 全量扫描
|
|
66
|
-
|
|
67
|
-
第一步(SillySpec 内部检查)调用:
|
|
68
|
-
```js
|
|
69
|
-
const result = deriveState(cwd, { mode: 'full', fix: false });
|
|
70
|
-
// 将 issues 加入自检报告
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
#### 3. progress.js — `validate --deep`
|
|
74
|
-
|
|
75
|
-
validate 方法支持 deep 参数:
|
|
76
|
-
```js
|
|
77
|
-
validate(cwd, deep = false) {
|
|
78
|
-
// ...现有校验逻辑...
|
|
79
|
-
if (deep) {
|
|
80
|
-
const result = deriveState(cwd, { mode: 'full', fix: true });
|
|
81
|
-
// 输出校验结果
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
CLI:`sillyspec progress validate --deep`
|
|
87
|
-
|
|
88
|
-
## 改动范围
|
|
89
|
-
|
|
90
|
-
- 新增:`src/derive.js`(~80 行)
|
|
91
|
-
- 修改:`src/run.js`(2 行)、`src/stages/doctor.js`(3 行)、`src/progress.js`(5 行)、`src/index.js`(parse --deep)
|
|
92
|
-
|
|
93
|
-
## 不做的事
|
|
94
|
-
|
|
95
|
-
- 不引入 SQLite 或其他新依赖
|
|
96
|
-
- 不改变 progress.json 的数据结构
|
|
97
|
-
- 不自动删除 progress 中有但 artifacts 无的步骤(可能被手动清理)
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# deriveState 状态推导 — 实现计划
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:12:00
|
|
5
|
-
|
|
6
|
-
## Wave 1(核心,无依赖)
|
|
7
|
-
|
|
8
|
-
- [ ] 实现 derive.js 核心函数
|
|
9
|
-
- 新增: `src/derive.js`
|
|
10
|
-
- 步骤:
|
|
11
|
-
1. 实现 `deriveState(cwd, options)` 纯函数
|
|
12
|
-
2. 实现 artifacts 文件名解析(`{stage}-step{N}-{timestamp}.txt`)
|
|
13
|
-
3. 实现 light/full 模式扫描逻辑
|
|
14
|
-
4. 实现安全修复策略(issues 分类 + fix 逻辑)
|
|
15
|
-
5. 验证: 在 sillyspec 项目上手动创建测试 artifacts,运行 `node -e "import('./src/derive.js').then(m => console.log(m.deriveState(process.cwd(), {mode:'full'})))"` 确认输出
|
|
16
|
-
|
|
17
|
-
## Wave 2(集成,依赖 Wave 1)
|
|
18
|
-
|
|
19
|
-
- [ ] 集成 run.js --done 轻量校验
|
|
20
|
-
- 修改: `src/run.js`
|
|
21
|
-
- 参考: `completeStep` 函数末尾
|
|
22
|
-
- 步骤:
|
|
23
|
-
1. 在 completeStep 末尾 import 并调用 deriveState(cwd, {mode:'light', fix:true})
|
|
24
|
-
2. 有修复时输出警告信息
|
|
25
|
-
3. 验证: 运行 brainstorm 完成 --done,确认无报错
|
|
26
|
-
|
|
27
|
-
- [ ] 扩展 validate 支持 --deep
|
|
28
|
-
- 修改: `src/progress.js`
|
|
29
|
-
- 参考: `validate()` 方法
|
|
30
|
-
- 步骤:
|
|
31
|
-
1. validate 方法加 deep 参数
|
|
32
|
-
2. deep=true 时调用 deriveState(cwd, {mode:'full', fix:true})
|
|
33
|
-
3. 验证: `sillyspec progress validate --deep` 确认输出校验结果
|
|
34
|
-
|
|
35
|
-
- [ ] CLI parse --deep 参数
|
|
36
|
-
- 修改: `src/index.js`
|
|
37
|
-
- 参考: progress 子命令的参数解析
|
|
38
|
-
- 步骤:
|
|
39
|
-
1. 在 progress validate 命令中解析 --deep flag
|
|
40
|
-
2. 传递给 validate 方法
|
|
41
|
-
3. 验证: `sillyspec progress validate --deep` 确认 flag 生效
|
|
42
|
-
|
|
43
|
-
## Wave 3(集成,依赖 Wave 1)
|
|
44
|
-
|
|
45
|
-
- [ ] 集成 doctor.js 全量扫描
|
|
46
|
-
- 修改: `src/stages/doctor.js`
|
|
47
|
-
- 参考: doctor 第一步(SillySpec 内部检查)的 prompt
|
|
48
|
-
- 步骤:
|
|
49
|
-
1. 在第一步 prompt 中加入 deriveState 全量扫描指令
|
|
50
|
-
2. 将 issues 列表纳入自检报告
|
|
51
|
-
3. 验证: `sillyspec run doctor` 确认第一步输出包含状态一致性检查
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# deriveState 状态推导 — 提案
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:11:00
|
|
5
|
-
|
|
6
|
-
## 动机
|
|
7
|
-
|
|
8
|
-
当前 progress.json 是 sillyspec 唯一的状态数据源。AI 崩溃或异常中断时,progress.json 可能与实际产出不一致(artifacts 已生成但步骤未标记完成)。需要从文件系统反推状态,交叉校验。
|
|
9
|
-
|
|
10
|
-
## 变更范围
|
|
11
|
-
|
|
12
|
-
- 新增 `src/derive.js`(状态推导纯函数)
|
|
13
|
-
- 修改 `src/run.js`(--done 轻量校验)
|
|
14
|
-
- 修改 `src/stages/doctor.js`(全量扫描)
|
|
15
|
-
- 修改 `src/progress.js`(validate --deep)
|
|
16
|
-
- 修改 `src/index.js`(parse --deep 参数)
|
|
17
|
-
|
|
18
|
-
## 不在范围内
|
|
19
|
-
|
|
20
|
-
- 不改 progress.json 数据结构
|
|
21
|
-
- 不引入新依赖
|
|
22
|
-
- 不自动删除 progress 中有但 artifacts 无的步骤
|
|
23
|
-
|
|
24
|
-
## 成功标准
|
|
25
|
-
|
|
26
|
-
1. `--done` 完成步骤时自动校验并修复当前步骤
|
|
27
|
-
2. `doctor` 输出全量状态一致性报告
|
|
28
|
-
3. `sillyspec progress validate --deep` 可手动触发全量校验
|
|
29
|
-
4. 所有校验通过现有测试
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# deriveState 状态推导 — 需求
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:11:00
|
|
5
|
-
|
|
6
|
-
## 功能需求
|
|
7
|
-
|
|
8
|
-
### FR1: deriveState 核心函数
|
|
9
|
-
- 从 artifacts 目录扫描文件,解析 `{stage}-step{N}-{timestamp}.txt` 格式
|
|
10
|
-
- 与 progress.json 步骤状态对比
|
|
11
|
-
- 返回 issues 列表和修复计数
|
|
12
|
-
|
|
13
|
-
### FR2: 轻量模式(light)
|
|
14
|
-
- 只检查 currentStage 的当前步骤和前一步
|
|
15
|
-
- 用于 `--done` 完成时
|
|
16
|
-
|
|
17
|
-
### FR3: 全量模式(full)
|
|
18
|
-
- 检查所有阶段所有步骤
|
|
19
|
-
- 用于 doctor 和 validate --deep
|
|
20
|
-
|
|
21
|
-
### FR4: 安全修复策略
|
|
22
|
-
- artifacts 有但 progress 漏记 → 自动修复为 done
|
|
23
|
-
- artifacts 有 step5 但 progress 只到 step3 → 自动补齐
|
|
24
|
-
- progress 有但 artifacts 无 → 只警告,不修复
|
|
25
|
-
|
|
26
|
-
### FR5: CLI 集成
|
|
27
|
-
- `--done` 时静默调用轻量校验,有修复才输出
|
|
28
|
-
- `doctor` 第一步输出全量报告
|
|
29
|
-
- `sillyspec progress validate --deep` 手动触发
|
|
30
|
-
|
|
31
|
-
## 非功能需求
|
|
32
|
-
- 零外部依赖(仅 fs/path)
|
|
33
|
-
- 纯函数,易于测试
|
|
34
|
-
- 不改变现有 API 行为
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# deriveState 状态推导 — 任务
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:11:00
|
|
5
|
-
|
|
6
|
-
## 任务列表
|
|
7
|
-
|
|
8
|
-
- [x] 实现 derive.js 核心函数 — `src/derive.js`
|
|
9
|
-
- [x] 集成 run.js --done 轻量校验 — `src/run.js`
|
|
10
|
-
- [x] 集成 doctor.js 全量扫描 — `src/stages/doctor.js`
|
|
11
|
-
- [x] 扩展 validate 支持 --deep — `src/progress.js`
|
|
12
|
-
- [x] CLI parse --deep 参数 — `src/index.js`
|
|
13
|
-
- [ ] 测试验证
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# derive-state 验证报告
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:21:00
|
|
5
|
-
|
|
6
|
-
## 结论:✅ PASS
|
|
7
|
-
|
|
8
|
-
## 检查结果
|
|
9
|
-
|
|
10
|
-
### 1. 规范文件加载
|
|
11
|
-
- ✅ design.md
|
|
12
|
-
- ✅ proposal.md
|
|
13
|
-
- ✅ requirements.md
|
|
14
|
-
- ✅ tasks.md
|
|
15
|
-
- ✅ plan.md
|
|
16
|
-
|
|
17
|
-
### 2. 任务完成度:5/6 (83%)
|
|
18
|
-
- ✅ 实现 derive.js 核心函数
|
|
19
|
-
- ✅ 集成 run.js --done 轻量校验
|
|
20
|
-
- ✅ 集成 doctor.js 全量扫描
|
|
21
|
-
- ✅ 扩展 validate 支持 --deep
|
|
22
|
-
- ✅ CLI parse --deep 参数
|
|
23
|
-
- ⬜ 测试验证(本项目无自动化测试套件,通过手动验证替代)
|
|
24
|
-
|
|
25
|
-
### 3. 设计一致性
|
|
26
|
-
- ✅ derive.js 纯函数模块,零外部依赖(仅 fs/path)
|
|
27
|
-
- ✅ light/full 模式
|
|
28
|
-
- ✅ fix 参数 + 安全修复策略
|
|
29
|
-
- ✅ run.js --done 轻量校验集成
|
|
30
|
-
- ✅ doctor.js 全量扫描集成
|
|
31
|
-
- ✅ progress.js validate --deep 支持
|
|
32
|
-
- ✅ index.js CLI --deep 参数
|
|
33
|
-
- ✅ 改动文件范围与 design.md 一致
|
|
34
|
-
|
|
35
|
-
### 4. 测试和质量
|
|
36
|
-
- ✅ derive.js 模块导入正常
|
|
37
|
-
- ✅ sillyspec progress validate --deep 通过
|
|
38
|
-
- ✅ 无 TODO/FIXME/HACK/XXX 技术债务
|
|
39
|
-
- ✅ sillyspec run quick --status 正常
|
|
40
|
-
- ✅ sillyspec run doctor --status 正常
|
|
41
|
-
|
|
42
|
-
## 下一步
|
|
43
|
-
sillyspec run archive
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# auto mode — 设计文档
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:28:00
|
|
5
|
-
|
|
6
|
-
## 背景
|
|
7
|
-
|
|
8
|
-
当前 sillyspec 的每个阶段(brainstorm → plan → execute → verify)需要用户手动执行 `sillyspec run <stage>` 和 `sillyspec run <stage> --done`。用户希望一个自动模式,从 brainstorm 一路推进到 verify 完成。
|
|
9
|
-
|
|
10
|
-
## 需求
|
|
11
|
-
|
|
12
|
-
1. 用户启动一次,AI 自动循环所有阶段和步骤
|
|
13
|
-
2. 步骤内部的用户确认点保留不变
|
|
14
|
-
3. 不修改 CLI 代码,纯 skill 文件实现
|
|
15
|
-
|
|
16
|
-
## 设计
|
|
17
|
-
|
|
18
|
-
### 新增文件:`.claude/skills/sillyspec-auto/SKILL.md`
|
|
19
|
-
|
|
20
|
-
**核心逻辑:**
|
|
21
|
-
|
|
22
|
-
1. 读 `$ARGUMENTS` 作为用户需求
|
|
23
|
-
2. 阶段循环(brainstorm → plan → execute → verify)
|
|
24
|
-
3. 每个阶段内步骤循环:
|
|
25
|
-
- `sillyspec run <stage> --input "需求"` → 读 step prompt
|
|
26
|
-
- 执行 prompt 中的操作
|
|
27
|
-
- 需要用户确认的步骤 → 暂停等回复
|
|
28
|
-
- 完成后自动 `sillyspec run <stage> --done --output "摘要"`
|
|
29
|
-
- 读下一步 prompt,继续
|
|
30
|
-
4. 当前阶段全部完成 → 自动进入下一阶段
|
|
31
|
-
5. verify 完成 → 输出总结,停止
|
|
32
|
-
6. 命令失败 → 暂停,等用户介入
|
|
33
|
-
|
|
34
|
-
**确认点保留规则:**
|
|
35
|
-
- prompt 中有"请用户选择""等待用户回答""展示给用户"等字样 → 暂停
|
|
36
|
-
- prompt 中有"自审""检查"等纯内部操作 → 自动完成
|
|
37
|
-
|
|
38
|
-
### 同步到 npm 包
|
|
39
|
-
|
|
40
|
-
init.js 已有逻辑复制 `sillyspec-*` skills 到项目 `.claude/skills/`,新 skill 自动生效。
|
|
41
|
-
|
|
42
|
-
## 改动范围
|
|
43
|
-
|
|
44
|
-
- 新增:`.claude/skills/sillyspec-auto/SKILL.md`(~60 行)
|
|
45
|
-
|
|
46
|
-
## 不做的事
|
|
47
|
-
|
|
48
|
-
- 不修改任何 JS 源码
|
|
49
|
-
- 不改变现有阶段流程
|
|
50
|
-
- 不自动 commit 或发布
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# auto mode — 提案
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:29:00
|
|
5
|
-
|
|
6
|
-
## 动机
|
|
7
|
-
用户希望一次启动就自动完成 brainstorm → plan → execute → verify 全流程,不需要手动输入 `sillyspec run <stage>` 和 `--done`。
|
|
8
|
-
|
|
9
|
-
## 变更范围
|
|
10
|
-
新增 `.claude/skills/sillyspec-auto/SKILL.md`
|
|
11
|
-
|
|
12
|
-
## 不在范围内
|
|
13
|
-
- 不修改 JS 源码
|
|
14
|
-
- 不改变阶段流程
|
|
15
|
-
|
|
16
|
-
## 成功标准
|
|
17
|
-
1. `/sillyspec:auto "需求"` 能自动推进全流程
|
|
18
|
-
2. 步骤内部确认点正常暂停
|
|
19
|
-
3. 异常时暂停等用户介入
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# auto mode — 需求
|
|
2
|
-
|
|
3
|
-
author: qinyi
|
|
4
|
-
created_at: 2026-04-08 07:29:00
|
|
5
|
-
|
|
6
|
-
## 功能需求
|
|
7
|
-
|
|
8
|
-
### FR1: 阶段自动推进
|
|
9
|
-
- 按 brainstorm → plan → execute → verify 顺序自动执行
|
|
10
|
-
- 当前阶段完成后自动进入下一阶段
|
|
11
|
-
|
|
12
|
-
### FR2: 步骤自动循环
|
|
13
|
-
- 每个步骤:读 prompt → 执行 → 自动 --done → 读下一步
|
|
14
|
-
- 不需要用户手动触发 --done
|
|
15
|
-
|
|
16
|
-
### FR3: 确认点保留
|
|
17
|
-
- prompt 中有用户确认要求时暂停等回复
|
|
18
|
-
- 纯内部操作步骤自动完成
|
|
19
|
-
|
|
20
|
-
### FR4: 异常处理
|
|
21
|
-
- 命令失败时暂停,展示错误,等用户介入
|