sillyspec 3.8.5 → 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.
Files changed (163) hide show
  1. package/README.md +0 -6
  2. package/docs/.vitepress/config.mts +45 -0
  3. package/docs/.vitepress/dist/404.html +25 -0
  4. package/docs/.vitepress/dist/assets/app.YytxICdd.js +1 -0
  5. package/docs/.vitepress/dist/assets/chunks/framework.Czhw_PXq.js +19 -0
  6. package/docs/.vitepress/dist/assets/chunks/theme.DusTRZQk.js +1 -0
  7. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.js +1 -0
  8. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.lean.js +1 -0
  9. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  10. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  11. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  12. package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  13. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  14. package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  15. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  16. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  17. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  18. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  19. package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  20. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  21. package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  22. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  23. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.js +15 -0
  24. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.lean.js +1 -0
  25. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.js +4 -0
  26. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.lean.js +1 -0
  27. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.js +1 -0
  28. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.lean.js +1 -0
  29. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.js +4 -0
  30. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.lean.js +1 -0
  31. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.js +5 -0
  32. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.lean.js +1 -0
  33. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.js +28 -0
  34. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.lean.js +1 -0
  35. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.js +30 -0
  36. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.lean.js +1 -0
  37. package/docs/.vitepress/dist/assets/style.DFTx90Kk.css +1 -0
  38. package/docs/.vitepress/dist/hashmap.json +1 -0
  39. package/docs/.vitepress/dist/index.html +28 -0
  40. package/docs/.vitepress/dist/sillyspec/commands.html +42 -0
  41. package/docs/.vitepress/dist/sillyspec/dashboard.html +31 -0
  42. package/docs/.vitepress/dist/sillyspec/file-io.html +28 -0
  43. package/docs/.vitepress/dist/sillyspec/getting-started.html +31 -0
  44. package/docs/.vitepress/dist/sillyspec/install.html +32 -0
  45. package/docs/.vitepress/dist/sillyspec/lifecycle.html +55 -0
  46. package/docs/.vitepress/dist/sillyspec/structure.html +57 -0
  47. package/docs/.vitepress/dist/vp-icons.css +1 -0
  48. package/docs/index.md +34 -0
  49. package/docs/sillyspec/commands.md +218 -0
  50. package/docs/sillyspec/dashboard.md +51 -0
  51. package/docs/sillyspec/file-io.md +34 -0
  52. package/docs/sillyspec/getting-started.md +61 -0
  53. package/docs/sillyspec/install.md +51 -0
  54. package/docs/sillyspec/lifecycle.md +146 -0
  55. package/docs/sillyspec/structure.md +62 -0
  56. package/package.json +11 -9
  57. package/packages/dashboard/dist/assets/index-Bh-GPjKY.css +1 -0
  58. package/packages/dashboard/dist/assets/index-CrCn5Gg6.js +17 -0
  59. package/packages/dashboard/dist/index.html +2 -2
  60. package/packages/dashboard/package-lock.json +0 -220
  61. package/packages/dashboard/package.json +5 -8
  62. package/packages/dashboard/server/index.js +106 -255
  63. package/packages/dashboard/server/parser.js +29 -333
  64. package/packages/dashboard/server/watcher.js +131 -203
  65. package/packages/dashboard/src/App.vue +10 -181
  66. package/packages/dashboard/src/components/ActionBar.vue +42 -26
  67. package/packages/dashboard/src/components/CommandPalette.vue +65 -40
  68. package/packages/dashboard/src/components/DetailPanel.vue +53 -68
  69. package/packages/dashboard/src/components/LogStream.vue +33 -13
  70. package/packages/dashboard/src/components/PipelineStage.vue +8 -8
  71. package/packages/dashboard/src/components/PipelineView.vue +45 -80
  72. package/packages/dashboard/src/components/ProjectList.vue +45 -103
  73. package/packages/dashboard/src/components/StageBadge.vue +13 -13
  74. package/packages/dashboard/src/components/StepCard.vue +15 -15
  75. package/packages/dashboard/src/composables/useDashboard.js +6 -20
  76. package/packages/dashboard/src/composables/useKeyboard.js +4 -6
  77. package/packages/dashboard/src/main.js +1 -4
  78. package/packages/dashboard/src/style.css +17 -17
  79. package/src/index.js +12 -123
  80. package/src/init.js +227 -86
  81. package/src/setup.js +9 -1
  82. package/templates/archive.md +121 -0
  83. package/templates/brainstorm.md +240 -0
  84. package/{.claude/skills/sillyspec-commit/SKILL.md → templates/commit.md} +47 -29
  85. package/templates/continue.md +32 -0
  86. package/templates/execute.md +314 -0
  87. package/templates/explore.md +60 -0
  88. package/templates/export.md +21 -0
  89. package/templates/init.md +61 -0
  90. package/templates/plan.md +157 -0
  91. package/templates/quick.md +135 -0
  92. package/templates/scan-quick.md +49 -0
  93. package/templates/scan.md +172 -0
  94. package/templates/skills/playwright-e2e/SKILL.md +340 -0
  95. package/templates/status.md +75 -0
  96. package/templates/verify.md +253 -0
  97. package/templates/workspace-sync.md +99 -0
  98. package/templates/workspace.md +70 -0
  99. package/.claude/skills/sillyspec-archive/SKILL.md +0 -17
  100. package/.claude/skills/sillyspec-auto/SKILL.md +0 -77
  101. package/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -17
  102. package/.claude/skills/sillyspec-continue/SKILL.md +0 -44
  103. package/.claude/skills/sillyspec-doctor/SKILL.md +0 -22
  104. package/.claude/skills/sillyspec-execute/SKILL.md +0 -17
  105. package/.claude/skills/sillyspec-explore/SKILL.md +0 -96
  106. package/.claude/skills/sillyspec-export/SKILL.md +0 -53
  107. package/.claude/skills/sillyspec-init/SKILL.md +0 -170
  108. package/.claude/skills/sillyspec-plan/SKILL.md +0 -52
  109. package/.claude/skills/sillyspec-propose/SKILL.md +0 -17
  110. package/.claude/skills/sillyspec-quick/SKILL.md +0 -17
  111. package/.claude/skills/sillyspec-resume/SKILL.md +0 -111
  112. package/.claude/skills/sillyspec-scan/SKILL.md +0 -17
  113. package/.claude/skills/sillyspec-state/SKILL.md +0 -54
  114. package/.claude/skills/sillyspec-status/SKILL.md +0 -17
  115. package/.claude/skills/sillyspec-verify/SKILL.md +0 -17
  116. package/.claude/skills/sillyspec-workspace/SKILL.md +0 -149
  117. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
  118. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
  119. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
  120. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
  121. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
  122. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
  123. package/.sillyspec/changes/auto-mode/design.md +0 -50
  124. package/.sillyspec/changes/auto-mode/proposal.md +0 -19
  125. package/.sillyspec/changes/auto-mode/requirements.md +0 -21
  126. package/.sillyspec/changes/auto-mode/tasks.md +0 -7
  127. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
  128. package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
  129. package/.sillyspec/changes/run-command-design/design.md +0 -1230
  130. package/.sillyspec/changes/unified-docs-design/design.md +0 -199
  131. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  132. package/.sillyspec/knowledge/INDEX.md +0 -8
  133. package/.sillyspec/knowledge/uncategorized.md +0 -3
  134. package/.sillyspec/projects/sillyspec.yaml +0 -3
  135. package/packages/dashboard/dist/assets/index-D1EVTLmc.js +0 -7446
  136. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
  137. package/packages/dashboard/public/logo.jpg +0 -0
  138. package/packages/dashboard/src/components/DocPreview.vue +0 -160
  139. package/packages/dashboard/src/components/DocTree.vue +0 -58
  140. package/packages/dashboard/src/components/ProjectOverview.vue +0 -178
  141. package/packages/dashboard/src/components/detail/DocsDetail.vue +0 -48
  142. package/packages/dashboard/src/components/detail/GitDetail.vue +0 -61
  143. package/packages/dashboard/src/components/detail/TechDetail.vue +0 -43
  144. package/src/derive.js +0 -147
  145. package/src/migrate.js +0 -117
  146. package/src/progress.js +0 -495
  147. package/src/run.js +0 -640
  148. package/src/stages/archive.js +0 -54
  149. package/src/stages/brainstorm.js +0 -239
  150. package/src/stages/doctor.js +0 -312
  151. package/src/stages/execute.js +0 -259
  152. package/src/stages/index.js +0 -35
  153. package/src/stages/plan.js +0 -259
  154. package/src/stages/propose.js +0 -115
  155. package/src/stages/quick.js +0 -64
  156. package/src/stages/scan.js +0 -141
  157. package/src/stages/status.js +0 -65
  158. package/src/stages/verify.js +0 -135
  159. /package/.sillyspec/{changes/brainstorm-archive → specs}/2026-04-05-dashboard-design.md +0 -0
  160. /package/{packages/dashboard → docs/.vitepress}/dist/favicon.jpg +0 -0
  161. /package/{logo.jpg → docs/.vitepress/dist/logo.jpg} +0 -0
  162. /package/{packages/dashboard → docs}/public/favicon.jpg +0 -0
  163. /package/{packages/dashboard/dist → docs/public}/logo.jpg +0 -0
@@ -1,20 +1,20 @@
1
1
  @import "tailwindcss";
2
2
 
3
3
  @theme {
4
- --color-bg: #F5F5F7;
5
- --color-primary: #D97706;
6
- --color-primary-dim: #92400E;
7
- --color-warning: #EA580C;
8
- --color-danger: #DC2626;
9
- --color-muted: #6B7280;
10
- --color-surface: #FFFFFF;
11
- --color-surface-2: #F0F0F3;
12
- --color-border: #E5E5EA;
13
- --color-border-light: #D1D1D6;
14
- --color-text: #1C1C1E;
15
- --color-text-secondary: #636366;
16
- --color-info: #2563EB;
17
- --color-success: #16A34A;
4
+ --color-bg: #0A0A0B;
5
+ --color-primary: #FBBF24;
6
+ --color-primary-dim: #B45309;
7
+ --color-warning: #FB923C;
8
+ --color-danger: #EF4444;
9
+ --color-muted: #525252;
10
+ --color-surface: #141416;
11
+ --color-surface-2: #1C1C1F;
12
+ --color-border: #2A2A2D;
13
+ --color-border-light: #3A3A3D;
14
+ --color-text: #E4E4E7;
15
+ --color-text-secondary: #8B8B8E;
16
+ --color-info: #38BDF8;
17
+ --color-success: #34D399;
18
18
 
19
19
  --font-display: 'JetBrains Mono', monospace;
20
20
  --font-body: 'DM Sans', sans-serif;
@@ -96,7 +96,7 @@
96
96
 
97
97
  /* Skeleton shimmer */
98
98
  .skeleton-shimmer {
99
- background: linear-gradient(90deg, #1A1E28 25%, #2A3040 50%, #1A1E28 75%);
99
+ background: linear-gradient(90deg, #1C1C1F 25%, #2A2A2D 50%, #1C1C1F 75%);
100
100
  background-size: 200% 100%;
101
101
  animation: shimmer 1.5s ease-in-out infinite;
102
102
  }
@@ -112,12 +112,12 @@
112
112
  }
113
113
 
114
114
  ::-webkit-scrollbar-thumb {
115
- background: #2A3040;
115
+ background: #2A2A2D;
116
116
  border-radius: 10px;
117
117
  }
118
118
 
119
119
  ::-webkit-scrollbar-thumb:hover {
120
- background: #3A4555;
120
+ background: #3A3A3D;
121
121
  }
122
122
 
123
123
  * {
package/src/index.js CHANGED
@@ -4,12 +4,11 @@
4
4
  * SillySpec CLI — 安装工具
5
5
  *
6
6
  * 只负责两件事:init(安装命令模板)和 setup(安装 MCP 工具)。
7
- * 状态管理通过 progress.json 完成,使用 `sillyspec progress` 命令。
7
+ * 状态管理由 AI 直接读文件(STATE.md)完成,不需要 CLI。
8
8
  */
9
- import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
10
- import { join, resolve } from 'path';
9
+ import { existsSync } from 'fs';
10
+ import { resolve } from 'path';
11
11
  import { cmdInit, getVersion } from './init.js';
12
- import { ProgressManager } from './progress.js';
13
12
 
14
13
  // ── CLI 入口 ──
15
14
 
@@ -20,22 +19,12 @@ SillySpec CLI — 规范驱动开发工具包
20
19
  用法:
21
20
  sillyspec init 初始化(零交互,自动检测工具)
22
21
  [--tool <name>] 只安装指定工具
22
+ [--workspace] 工作区模式
23
23
  [--interactive] 交互式引导
24
24
  [--dir <path>] 指定目录
25
25
  sillyspec setup [--list] 安装推荐 MCP 工具
26
26
  [--list] 查看已安装状态
27
- sillyspec progress <cmd> 进度管理
28
- init 初始化 progress.json
29
- show 查看当前进度
30
- set-stage <stage> 设置当前阶段
31
- add-step <stage> <name> 添加步骤
32
- update-step <s> <n> --status <st> [--output <t>]
33
- complete-stage <stage> 完成阶段并推进
34
- validate 校验并修复
35
- reset [--stage X] 重置进度
36
- complete --stage X 归档已完成阶段
37
- sillyspec docs migrate 迁移旧文档到统一结构
38
- sillyspec dashboard 启动 Dashboard Web UI
27
+ sillyspec dashboard 启动 Dashboard Web UI
39
28
  [--port <number>] 指定端口(默认 3456)
40
29
  [--no-open] 不自动打开浏览器
41
30
 
@@ -46,7 +35,7 @@ SillySpec CLI — 规范驱动开发工具包
46
35
  示例:
47
36
  sillyspec init
48
37
  sillyspec init --tool claude
49
-
38
+ sillyspec init --workspace
50
39
  sillyspec setup
51
40
  sillyspec setup --list
52
41
  sillyspec dashboard
@@ -71,6 +60,7 @@ async function main() {
71
60
  let json = false;
72
61
  let targetDir = process.cwd();
73
62
  let tool = null;
63
+ let workspace = false;
74
64
  let interactive = false;
75
65
  const filteredArgs = [];
76
66
 
@@ -83,6 +73,8 @@ async function main() {
83
73
  } else if (args[i] === '--tool' && args[i + 1]) {
84
74
  tool = args[i + 1];
85
75
  i++;
76
+ } else if (args[i] === '--workspace' || args[i] === '-w') {
77
+ workspace = true;
86
78
  } else if (args[i] === '--interactive' || args[i] === '-i') {
87
79
  interactive = true;
88
80
  } else if (args[i] === '--list' || args[i] === '-l') {
@@ -93,11 +85,6 @@ async function main() {
93
85
  }
94
86
 
95
87
  const command = filteredArgs[0];
96
- // 支持 sillyspec init /path/to/project 语法:如果第二个参数看起来像路径,当作 targetDir
97
- if (command === 'init' && filteredArgs[1] && !filteredArgs[1].startsWith('-')) {
98
- targetDir = resolve(filteredArgs[1]);
99
- filteredArgs.splice(1, 1);
100
- }
101
88
  const dir = targetDir;
102
89
 
103
90
  if (!existsSync(dir)) {
@@ -107,113 +94,15 @@ async function main() {
107
94
 
108
95
  switch (command) {
109
96
  case 'init':
110
- await cmdInit(dir, { tool, interactive });
97
+ await cmdInit(dir, { tool, workspace, interactive });
111
98
  break;
112
99
  case 'setup':
113
100
  const setupList = filteredArgs.includes('--list') || filteredArgs.includes('-l');
114
101
  await (await import('./setup.js')).cmdSetup(dir, { json, list: setupList });
115
102
  break;
116
- case 'progress': {
117
- const pm = new ProgressManager();
118
- const subCommand = filteredArgs[1];
119
- const stageIdx = filteredArgs.indexOf('--stage');
120
- const stage = stageIdx >= 0 && filteredArgs[stageIdx + 1] ? filteredArgs[stageIdx + 1] : null;
121
-
122
- switch (subCommand) {
123
- case 'init':
124
- pm.init(dir);
125
- break;
126
- case 'status':
127
- case 'show':
128
- pm.show(dir);
129
- break;
130
- case 'validate':
131
- await pm.validate(dir, filteredArgs.includes('--deep'));
132
- break;
133
- case 'reset':
134
- pm.reset(dir, stage);
135
- break;
136
- case 'complete':
137
- pm.complete(dir, stage);
138
- break;
139
- case 'set-stage': {
140
- const setStageName = filteredArgs[2];
141
- if (!setStageName) { console.log('❌ 用法: sillyspec progress set-stage <stage>'); break; }
142
- pm.setStage(dir, setStageName);
143
- break;
144
- }
145
- case 'add-step': {
146
- const addStepStage = filteredArgs[2];
147
- const addStepName = filteredArgs[3];
148
- if (!addStepStage || !addStepName) { console.log('❌ 用法: sillyspec progress add-step <stage> <step-name>'); break; }
149
- pm.addStep(dir, addStepStage, addStepName);
150
- break;
151
- }
152
- case 'update-step': {
153
- const updStepStage = filteredArgs[2];
154
- const updStepName = filteredArgs[3];
155
- if (!updStepStage || !updStepName) { console.log('❌ 用法: sillyspec progress update-step <stage> <step-name> --status <status> [--output <text>]'); break; }
156
- // Parse --status and --output from args
157
- let updStatus = null, updOutput = undefined;
158
- for (let ai = 0; ai < args.length; ai++) {
159
- if (args[ai] === '--status' && args[ai + 1]) { updStatus = args[ai + 1]; ai++; }
160
- if (args[ai] === '--output' && args[ai + 1]) { updOutput = args[ai + 1]; ai++; }
161
- }
162
- pm.updateStep(dir, updStepStage, updStepName, { status: updStatus, output: updOutput });
163
- break;
164
- }
165
- case 'complete-stage': {
166
- const compStageName = filteredArgs[2];
167
- if (!compStageName) { console.log('❌ 用法: sillyspec progress complete-stage <stage>'); break; }
168
- pm.completeStage(dir, compStageName);
169
- break;
170
- }
171
- case 'batch': {
172
- if (filteredArgs.includes('--status')) {
173
- const bp = pm.readBatchProgress(dir);
174
- if (!bp) { console.log('📭 无批量进度数据'); break; }
175
- const line = pm._renderBatchProgress(bp);
176
- console.log(line || '📭 无批量进度数据');
177
- console.log(JSON.stringify(bp, null, 2));
178
- } else {
179
- let batchData = {};
180
- const a = args;
181
- for (let i = 0; i < a.length; i++) {
182
- if (a[i] === '--total' && a[i + 1]) { batchData.total = parseInt(a[i + 1]); i++; }
183
- if (a[i] === '--completed' && a[i + 1]) { batchData.completed = parseInt(a[i + 1]); i++; }
184
- if (a[i] === '--failed' && a[i + 1]) { batchData.failed = parseInt(a[i + 1]); i++; }
185
- if (a[i] === '--skipped' && a[i + 1]) { batchData.skipped = parseInt(a[i + 1]); i++; }
186
- }
187
- if (Object.keys(batchData).length === 0) {
188
- console.log('用法: sillyspec progress batch --total 100 --completed 73');
189
- console.log(' sillyspec progress batch --status');
190
- break;
191
- }
192
- pm.updateBatchProgress(dir, batchData);
193
- console.log('✅ 批量进度已更新');
194
- }
195
- break;
196
- }
197
- default:
198
- console.log('用法: sillyspec progress <init|show|validate|reset|complete|set-stage|add-step|update-step|complete-stage>');
199
- }
200
- break;
201
- }
202
- case 'docs': {
203
- const docsSubCmd = filteredArgs[1];
204
- if (docsSubCmd === 'migrate') {
205
- const { migrateDocs } = await import('./migrate.js');
206
- migrateDocs(dir);
207
- } else {
208
- console.log('用法: sillyspec docs migrate');
209
- }
103
+ case 'progress':
104
+ console.log('⚠️ 阶段控制功能已移除,各阶段独立运行。');
210
105
  break;
211
- }
212
- case 'run': {
213
- const { runCommand } = await import('./run.js')
214
- await runCommand(filteredArgs.slice(1), dir)
215
- break
216
- }
217
106
  case 'dashboard': {
218
107
  // Parse dashboard options
219
108
  let port = 3456;