@specsafe/cli 0.8.0 → 2.0.2

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 (242) hide show
  1. package/README.md +100 -279
  2. package/canonical/personas/bolt-zane.md +29 -0
  3. package/canonical/personas/forge-reva.md +29 -0
  4. package/canonical/personas/herald-cass.md +30 -0
  5. package/canonical/personas/mason-kai.md +30 -0
  6. package/canonical/personas/scout-elena.md +27 -0
  7. package/canonical/personas/warden-lyra.md +30 -0
  8. package/canonical/rules/.cursorrules.mdc +53 -0
  9. package/canonical/rules/.rules +48 -0
  10. package/canonical/rules/AGENTS.md +48 -0
  11. package/canonical/rules/CLAUDE.md +48 -0
  12. package/canonical/rules/CONVENTIONS.md +41 -0
  13. package/canonical/rules/GEMINI.md +50 -0
  14. package/canonical/rules/continue-config.yaml +5 -0
  15. package/canonical/skills/specsafe-archive/SKILL.md +63 -0
  16. package/canonical/skills/specsafe-code/SKILL.md +7 -0
  17. package/canonical/skills/specsafe-code/workflow.md +212 -0
  18. package/canonical/skills/specsafe-complete/SKILL.md +7 -0
  19. package/canonical/skills/specsafe-complete/workflow.md +130 -0
  20. package/canonical/skills/specsafe-doctor/SKILL.md +103 -0
  21. package/canonical/skills/specsafe-explore/SKILL.md +7 -0
  22. package/canonical/skills/specsafe-explore/workflow.md +100 -0
  23. package/canonical/skills/specsafe-init/SKILL.md +119 -0
  24. package/canonical/skills/specsafe-new/SKILL.md +7 -0
  25. package/canonical/skills/specsafe-new/workflow.md +156 -0
  26. package/canonical/skills/specsafe-qa/SKILL.md +7 -0
  27. package/canonical/skills/specsafe-qa/workflow.md +223 -0
  28. package/canonical/skills/specsafe-spec/SKILL.md +7 -0
  29. package/canonical/skills/specsafe-spec/workflow.md +158 -0
  30. package/canonical/skills/specsafe-status/SKILL.md +77 -0
  31. package/canonical/skills/specsafe-test/SKILL.md +7 -0
  32. package/canonical/skills/specsafe-test/workflow.md +210 -0
  33. package/canonical/skills/specsafe-verify/SKILL.md +7 -0
  34. package/canonical/skills/specsafe-verify/workflow.md +143 -0
  35. package/canonical/templates/project-state-template.md +33 -0
  36. package/canonical/templates/qa-report-template.md +55 -0
  37. package/canonical/templates/spec-template.md +52 -0
  38. package/canonical/templates/specsafe-config-template.json +10 -0
  39. package/generators/dist/adapters/aider.d.ts +2 -0
  40. package/generators/dist/adapters/aider.js +23 -0
  41. package/generators/dist/adapters/aider.js.map +1 -0
  42. package/generators/dist/adapters/antigravity.d.ts +2 -0
  43. package/generators/dist/adapters/antigravity.js +33 -0
  44. package/generators/dist/adapters/antigravity.js.map +1 -0
  45. package/generators/dist/adapters/claude-code.d.ts +2 -0
  46. package/generators/dist/adapters/claude-code.js +31 -0
  47. package/generators/dist/adapters/claude-code.js.map +1 -0
  48. package/generators/dist/adapters/continue.d.ts +2 -0
  49. package/generators/dist/adapters/continue.js +33 -0
  50. package/generators/dist/adapters/continue.js.map +1 -0
  51. package/generators/dist/adapters/cursor.d.ts +2 -0
  52. package/generators/dist/adapters/cursor.js +32 -0
  53. package/generators/dist/adapters/cursor.js.map +1 -0
  54. package/generators/dist/adapters/gemini.d.ts +2 -0
  55. package/generators/dist/adapters/gemini.js +36 -0
  56. package/generators/dist/adapters/gemini.js.map +1 -0
  57. package/generators/dist/adapters/index.d.ts +13 -0
  58. package/generators/dist/adapters/index.js +29 -0
  59. package/generators/dist/adapters/index.js.map +1 -0
  60. package/generators/dist/adapters/opencode.d.ts +2 -0
  61. package/generators/dist/adapters/opencode.js +32 -0
  62. package/generators/dist/adapters/opencode.js.map +1 -0
  63. package/generators/dist/adapters/types.d.ts +49 -0
  64. package/generators/dist/adapters/types.js +14 -0
  65. package/generators/dist/adapters/types.js.map +1 -0
  66. package/generators/dist/adapters/utils.d.ts +12 -0
  67. package/generators/dist/adapters/utils.js +68 -0
  68. package/generators/dist/adapters/utils.js.map +1 -0
  69. package/generators/dist/adapters/zed.d.ts +2 -0
  70. package/generators/dist/adapters/zed.js +31 -0
  71. package/generators/dist/adapters/zed.js.map +1 -0
  72. package/generators/dist/doctor.d.ts +10 -0
  73. package/generators/dist/doctor.js +123 -0
  74. package/generators/dist/doctor.js.map +1 -0
  75. package/generators/dist/index.d.ts +2 -0
  76. package/generators/dist/index.js +45 -0
  77. package/generators/dist/index.js.map +1 -0
  78. package/generators/dist/init.d.ts +9 -0
  79. package/generators/dist/init.js +167 -0
  80. package/generators/dist/init.js.map +1 -0
  81. package/generators/dist/install.d.ts +5 -0
  82. package/generators/dist/install.js +66 -0
  83. package/generators/dist/install.js.map +1 -0
  84. package/generators/dist/registry.d.ts +3 -0
  85. package/generators/dist/registry.js +8 -0
  86. package/generators/dist/registry.js.map +1 -0
  87. package/generators/dist/update.d.ts +5 -0
  88. package/generators/dist/update.js +40 -0
  89. package/generators/dist/update.js.map +1 -0
  90. package/package.json +31 -27
  91. package/dist/commands/apply.d.ts +0 -3
  92. package/dist/commands/apply.d.ts.map +0 -1
  93. package/dist/commands/apply.js +0 -182
  94. package/dist/commands/apply.js.map +0 -1
  95. package/dist/commands/archive.d.ts +0 -3
  96. package/dist/commands/archive.d.ts.map +0 -1
  97. package/dist/commands/archive.js +0 -99
  98. package/dist/commands/archive.js.map +0 -1
  99. package/dist/commands/capsule.d.ts +0 -8
  100. package/dist/commands/capsule.d.ts.map +0 -1
  101. package/dist/commands/capsule.js +0 -466
  102. package/dist/commands/capsule.js.map +0 -1
  103. package/dist/commands/complete.d.ts +0 -3
  104. package/dist/commands/complete.d.ts.map +0 -1
  105. package/dist/commands/complete.js +0 -140
  106. package/dist/commands/complete.js.map +0 -1
  107. package/dist/commands/constitution.d.ts +0 -3
  108. package/dist/commands/constitution.d.ts.map +0 -1
  109. package/dist/commands/constitution.js +0 -192
  110. package/dist/commands/constitution.js.map +0 -1
  111. package/dist/commands/create.d.ts +0 -10
  112. package/dist/commands/create.d.ts.map +0 -1
  113. package/dist/commands/create.js +0 -120
  114. package/dist/commands/create.js.map +0 -1
  115. package/dist/commands/delta.d.ts +0 -3
  116. package/dist/commands/delta.d.ts.map +0 -1
  117. package/dist/commands/delta.js +0 -82
  118. package/dist/commands/delta.js.map +0 -1
  119. package/dist/commands/diff.d.ts +0 -3
  120. package/dist/commands/diff.d.ts.map +0 -1
  121. package/dist/commands/diff.js +0 -102
  122. package/dist/commands/diff.js.map +0 -1
  123. package/dist/commands/doctor.d.ts +0 -3
  124. package/dist/commands/doctor.d.ts.map +0 -1
  125. package/dist/commands/doctor.js +0 -204
  126. package/dist/commands/doctor.js.map +0 -1
  127. package/dist/commands/done.d.ts +0 -3
  128. package/dist/commands/done.d.ts.map +0 -1
  129. package/dist/commands/done.js +0 -237
  130. package/dist/commands/done.js.map +0 -1
  131. package/dist/commands/explore.d.ts +0 -3
  132. package/dist/commands/explore.d.ts.map +0 -1
  133. package/dist/commands/explore.js +0 -236
  134. package/dist/commands/explore.js.map +0 -1
  135. package/dist/commands/export.d.ts +0 -7
  136. package/dist/commands/export.d.ts.map +0 -1
  137. package/dist/commands/export.js +0 -179
  138. package/dist/commands/export.js.map +0 -1
  139. package/dist/commands/extend.d.ts +0 -6
  140. package/dist/commands/extend.d.ts.map +0 -1
  141. package/dist/commands/extend.js +0 -167
  142. package/dist/commands/extend.js.map +0 -1
  143. package/dist/commands/init-old.d.ts +0 -3
  144. package/dist/commands/init-old.d.ts.map +0 -1
  145. package/dist/commands/init-old.js +0 -146
  146. package/dist/commands/init-old.js.map +0 -1
  147. package/dist/commands/init.d.ts +0 -3
  148. package/dist/commands/init.d.ts.map +0 -1
  149. package/dist/commands/init.js +0 -298
  150. package/dist/commands/init.js.map +0 -1
  151. package/dist/commands/list.d.ts +0 -3
  152. package/dist/commands/list.d.ts.map +0 -1
  153. package/dist/commands/list.js +0 -122
  154. package/dist/commands/list.js.map +0 -1
  155. package/dist/commands/memory.d.ts +0 -3
  156. package/dist/commands/memory.d.ts.map +0 -1
  157. package/dist/commands/memory.js +0 -166
  158. package/dist/commands/memory.js.map +0 -1
  159. package/dist/commands/new.d.ts +0 -3
  160. package/dist/commands/new.d.ts.map +0 -1
  161. package/dist/commands/new.js +0 -508
  162. package/dist/commands/new.js.map +0 -1
  163. package/dist/commands/qa.d.ts +0 -3
  164. package/dist/commands/qa.d.ts.map +0 -1
  165. package/dist/commands/qa.js +0 -179
  166. package/dist/commands/qa.js.map +0 -1
  167. package/dist/commands/rules.d.ts +0 -6
  168. package/dist/commands/rules.d.ts.map +0 -1
  169. package/dist/commands/rules.js +0 -232
  170. package/dist/commands/rules.js.map +0 -1
  171. package/dist/commands/shard.d.ts +0 -6
  172. package/dist/commands/shard.d.ts.map +0 -1
  173. package/dist/commands/shard.js +0 -199
  174. package/dist/commands/shard.js.map +0 -1
  175. package/dist/commands/spec.d.ts +0 -3
  176. package/dist/commands/spec.d.ts.map +0 -1
  177. package/dist/commands/spec.js +0 -302
  178. package/dist/commands/spec.js.map +0 -1
  179. package/dist/commands/status.d.ts +0 -3
  180. package/dist/commands/status.d.ts.map +0 -1
  181. package/dist/commands/status.js +0 -47
  182. package/dist/commands/status.js.map +0 -1
  183. package/dist/commands/test-apply.d.ts +0 -3
  184. package/dist/commands/test-apply.d.ts.map +0 -1
  185. package/dist/commands/test-apply.js +0 -228
  186. package/dist/commands/test-apply.js.map +0 -1
  187. package/dist/commands/test-create.d.ts +0 -3
  188. package/dist/commands/test-create.d.ts.map +0 -1
  189. package/dist/commands/test-create.js +0 -183
  190. package/dist/commands/test-create.js.map +0 -1
  191. package/dist/commands/test-guide.d.ts +0 -3
  192. package/dist/commands/test-guide.d.ts.map +0 -1
  193. package/dist/commands/test-guide.js +0 -190
  194. package/dist/commands/test-guide.js.map +0 -1
  195. package/dist/commands/test-report.d.ts +0 -3
  196. package/dist/commands/test-report.d.ts.map +0 -1
  197. package/dist/commands/test-report.js +0 -196
  198. package/dist/commands/test-report.js.map +0 -1
  199. package/dist/commands/test-submit.d.ts +0 -6
  200. package/dist/commands/test-submit.d.ts.map +0 -1
  201. package/dist/commands/test-submit.js +0 -236
  202. package/dist/commands/test-submit.js.map +0 -1
  203. package/dist/commands/verify.d.ts +0 -3
  204. package/dist/commands/verify.d.ts.map +0 -1
  205. package/dist/commands/verify.js +0 -288
  206. package/dist/commands/verify.js.map +0 -1
  207. package/dist/config.d.ts +0 -23
  208. package/dist/config.d.ts.map +0 -1
  209. package/dist/config.js +0 -44
  210. package/dist/config.js.map +0 -1
  211. package/dist/index.d.ts +0 -8
  212. package/dist/index.d.ts.map +0 -1
  213. package/dist/index.js +0 -129
  214. package/dist/index.js.map +0 -1
  215. package/dist/rules/downloader.d.ts +0 -40
  216. package/dist/rules/downloader.d.ts.map +0 -1
  217. package/dist/rules/downloader.js +0 -253
  218. package/dist/rules/downloader.js.map +0 -1
  219. package/dist/rules/index.d.ts +0 -8
  220. package/dist/rules/index.d.ts.map +0 -1
  221. package/dist/rules/index.js +0 -8
  222. package/dist/rules/index.js.map +0 -1
  223. package/dist/rules/registry.d.ts +0 -45
  224. package/dist/rules/registry.d.ts.map +0 -1
  225. package/dist/rules/registry.js +0 -158
  226. package/dist/rules/registry.js.map +0 -1
  227. package/dist/rules/types.d.ts +0 -86
  228. package/dist/rules/types.d.ts.map +0 -1
  229. package/dist/rules/types.js +0 -6
  230. package/dist/rules/types.js.map +0 -1
  231. package/dist/utils/detectTools.d.ts +0 -15
  232. package/dist/utils/detectTools.d.ts.map +0 -1
  233. package/dist/utils/detectTools.js +0 -54
  234. package/dist/utils/detectTools.js.map +0 -1
  235. package/dist/utils/generateToolConfig.d.ts +0 -12
  236. package/dist/utils/generateToolConfig.d.ts.map +0 -1
  237. package/dist/utils/generateToolConfig.js +0 -1179
  238. package/dist/utils/generateToolConfig.js.map +0 -1
  239. package/dist/utils/testRunner.d.ts +0 -39
  240. package/dist/utils/testRunner.d.ts.map +0 -1
  241. package/dist/utils/testRunner.js +0 -325
  242. package/dist/utils/testRunner.js.map +0 -1
@@ -1,288 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { Workflow, ProjectTracker, validateSpecId } from '@specsafe/core';
5
- import { exec } from 'child_process';
6
- import { promisify } from 'util';
7
- import { access } from 'fs/promises';
8
- import { join } from 'path';
9
- import { loadConfig } from '../config.js';
10
- const execAsync = promisify(exec);
11
- export const verifyCommand = new Command('verify')
12
- .description('Run tests and loop on failure (TEST → CODE loop)')
13
- .argument('<id>', 'Spec ID')
14
- .option('-w, --watch', 'Run in watch mode for continuous feedback')
15
- .option('-u, --update', 'Update snapshots if applicable')
16
- .option('--ci', 'Run in CI mode (no interactive)')
17
- .action(async (id, options) => {
18
- const spinner = ora(`Verifying ${id}...`).start();
19
- try {
20
- // Validate spec ID format
21
- validateSpecId(id);
22
- const workflow = new Workflow();
23
- const tracker = new ProjectTracker(process.cwd());
24
- const config = await loadConfig();
25
- // Load existing specs from disk
26
- await tracker.loadSpecsIntoWorkflow(workflow);
27
- // Check if spec exists
28
- const spec = workflow.getSpec(id);
29
- if (!spec) {
30
- throw new Error(`Spec '${id}' not found. Run 'specsafe new <name>' to create it first.`);
31
- }
32
- // Check if spec is in the right stage
33
- if (spec.stage !== 'test' && spec.stage !== 'code' && spec.stage !== 'qa') {
34
- throw new Error(`Spec '${id}' is in ${spec.stage.toUpperCase()} stage. Must be in TEST, CODE, or QA stage to verify.`);
35
- }
36
- // Check for test files
37
- if (spec.testFiles.length === 0) {
38
- // Try to find test file automatically
39
- const testPath = join('tests', `${id.toLowerCase().replace(/-/g, '_')}.test.ts`);
40
- try {
41
- await access(testPath);
42
- spec.testFiles.push(testPath);
43
- }
44
- catch {
45
- throw new Error(`No test files found for ${id}. Run 'specsafe test ${id}' to generate tests first.`);
46
- }
47
- }
48
- spinner.text = `Running ${config.testFramework} tests...`;
49
- // Run tests based on framework
50
- let testResult;
51
- try {
52
- testResult = await runTests(config.testFramework, spec.testFiles, options);
53
- }
54
- catch (error) {
55
- // Parse test output even if tests fail
56
- testResult = parseTestOutput(error.stdout, error.stderr, config.testFramework);
57
- }
58
- spinner.stop();
59
- // Display results
60
- console.log('\n' + chalk.bold('━'.repeat(60)));
61
- console.log(chalk.bold(` Test Results for ${id}`));
62
- console.log(chalk.bold('━'.repeat(60)));
63
- if (testResult.passed) {
64
- console.log(chalk.green(`\n ✅ All tests passed!`));
65
- console.log(chalk.green(` ${testResult.passedTests}/${testResult.totalTests} tests passed`));
66
- console.log(chalk.gray(` Duration: ${testResult.duration}ms`));
67
- // If in CODE stage, suggest moving to QA
68
- if (spec.stage === 'code') {
69
- console.log(chalk.blue(`\n 💡 Ready for QA! Run: specsafe qa ${id}`));
70
- }
71
- else if (spec.stage === 'qa') {
72
- console.log(chalk.green(`\n 🎉 Ready to complete! Run: specsafe done ${id}`));
73
- }
74
- else {
75
- console.log(chalk.blue(`\n 💡 Tests pass! Ready to implement. Run: specsafe code ${id}`));
76
- }
77
- console.log(chalk.bold('━'.repeat(60)));
78
- return;
79
- }
80
- // Tests failed - show detailed output
81
- console.log(chalk.red(`\n ❌ Tests failed`));
82
- console.log(chalk.red(` ${testResult.failedTests}/${testResult.totalTests} tests failed`));
83
- console.log(chalk.gray(` ${testResult.passedTests} passed, ${testResult.skippedTests} skipped`));
84
- console.log(chalk.gray(` Duration: ${testResult.duration}ms`));
85
- if (testResult.failures.length > 0) {
86
- console.log(chalk.yellow(`\n Failed Tests:\n`));
87
- for (const failure of testResult.failures.slice(0, 5)) {
88
- console.log(chalk.red(` ✗ ${failure.name}`));
89
- if (failure.file) {
90
- console.log(chalk.gray(` File: ${failure.file}`));
91
- }
92
- console.log(chalk.gray(` ${failure.error.split('\n')[0]}`));
93
- console.log();
94
- }
95
- if (testResult.failures.length > 5) {
96
- console.log(chalk.gray(` ... and ${testResult.failures.length - 5} more failures`));
97
- }
98
- }
99
- console.log(chalk.bold('━'.repeat(60)));
100
- // Provide guidance for fixes
101
- console.log(chalk.yellow('\n 🔧 Suggested fixes:\n'));
102
- const suggestions = generateFixSuggestions(testResult.failures, spec);
103
- for (const suggestion of suggestions) {
104
- console.log(chalk.blue(` • ${suggestion}`));
105
- }
106
- console.log(chalk.gray(`\n 💡 Run 'specsafe code ${id}' to continue development`));
107
- console.log(chalk.gray(` Then run 'specsafe verify ${id}' again`));
108
- if (!options.ci) {
109
- console.log(chalk.gray(`\n Or use --watch mode for continuous feedback:`));
110
- console.log(chalk.gray(` specsafe verify ${id} --watch`));
111
- }
112
- // Exit with error code in CI mode
113
- if (options.ci) {
114
- process.exit(1);
115
- }
116
- }
117
- catch (error) {
118
- spinner.fail(chalk.red(error.message));
119
- if (error.message.includes('not found')) {
120
- console.log(chalk.gray(`💡 Tip: Run 'specsafe new <name>' to create a spec first.`));
121
- }
122
- else if (error.message.includes('stage')) {
123
- console.log(chalk.gray(`💡 Tip: Current workflow: SPEC → TEST → CODE → QA → COMPLETE`));
124
- }
125
- process.exit(1);
126
- }
127
- });
128
- async function runTests(framework, testFiles, options) {
129
- const testFilePattern = testFiles.length > 0 ? testFiles.join(' ') : '';
130
- let command;
131
- switch (framework) {
132
- case 'vitest':
133
- command = options.watch
134
- ? `npx vitest ${testFilePattern}`
135
- : `npx vitest run ${testFilePattern}`;
136
- if (options.update)
137
- command += ' --update';
138
- break;
139
- case 'jest':
140
- command = `npx jest ${testFilePattern}`;
141
- if (options.watch)
142
- command += ' --watch';
143
- if (options.update)
144
- command += ' --updateSnapshot';
145
- break;
146
- case 'playwright':
147
- command = `npx playwright test ${testFilePattern}`;
148
- if (options.watch)
149
- command += ' --ui';
150
- break;
151
- default:
152
- // Try to detect from package.json
153
- command = `npm test -- ${testFilePattern}`;
154
- if (options.watch)
155
- command += ' --watch';
156
- }
157
- try {
158
- const { stdout, stderr } = await execAsync(command, {
159
- timeout: options.watch ? undefined : 120000,
160
- env: { ...process.env, CI: options.watch ? 'false' : 'true' }
161
- });
162
- return parseTestOutput(stdout, stderr, framework);
163
- }
164
- catch (error) {
165
- // Test command failed - parse the output anyway
166
- if (error.stdout || error.stderr) {
167
- return parseTestOutput(error.stdout || '', error.stderr || '', framework);
168
- }
169
- throw error;
170
- }
171
- }
172
- function parseTestOutput(stdout, stderr, framework) {
173
- const output = stdout + stderr;
174
- const result = {
175
- passed: false,
176
- totalTests: 0,
177
- passedTests: 0,
178
- failedTests: 0,
179
- skippedTests: 0,
180
- duration: 0,
181
- failures: []
182
- };
183
- if (framework === 'vitest' || output.includes('vitest')) {
184
- // Parse Vitest output
185
- const passMatch = output.match(/(\d+) passed/);
186
- const failMatch = output.match(/(\d+) failed/);
187
- const skipMatch = output.match(/(\d+) skipped/);
188
- const totalMatch = output.match(/Test Files?\s+\d+ passed \((\d+) total\)/);
189
- const timeMatch = output.match(/Duration\s+(\d+)ms/);
190
- if (passMatch)
191
- result.passedTests = parseInt(passMatch[1], 10);
192
- if (failMatch)
193
- result.failedTests = parseInt(failMatch[1], 10);
194
- if (skipMatch)
195
- result.skippedTests = parseInt(skipMatch[1], 10);
196
- if (timeMatch)
197
- result.duration = parseInt(timeMatch[1], 10);
198
- // Parse failures
199
- const failureBlocks = output.match(/FAIL\s+[\s\S]+?(?=FAIL|Test Files|✓|passed|failed|$)/g) || [];
200
- for (const block of failureBlocks) {
201
- const testMatch = block.match(/FAIL\s+(.+)/);
202
- const errorMatch = block.match(/AssertionError:\s*(.+)/) || block.match(/Error:\s*(.+)/);
203
- if (testMatch) {
204
- result.failures.push({
205
- name: testMatch[1].trim(),
206
- error: errorMatch ? errorMatch[1].trim() : 'Test failed',
207
- file: testMatch[1].trim().split(' ')[0]
208
- });
209
- }
210
- }
211
- result.totalTests = result.passedTests + result.failedTests + result.skippedTests;
212
- result.passed = result.failedTests === 0 && result.totalTests > 0;
213
- }
214
- else if (framework === 'jest' || output.includes('jest')) {
215
- // Parse Jest output
216
- const passedMatch = output.match(/(\d+)\s+passed/);
217
- const failedMatch = output.match(/(\d+)\s+failed/);
218
- const skippedMatch = output.match(/(\d+)\s+skipped/);
219
- const totalMatch = output.match(/(\d+)\s+total/);
220
- if (passedMatch)
221
- result.passedTests = parseInt(passedMatch[1], 10);
222
- if (failedMatch)
223
- result.failedTests = parseInt(failedMatch[1], 10);
224
- if (skippedMatch)
225
- result.skippedTests = parseInt(skippedMatch[1], 10);
226
- if (totalMatch) {
227
- result.totalTests = parseInt(totalMatch[1], 10);
228
- }
229
- else {
230
- result.totalTests = result.passedTests + result.failedTests + result.skippedTests;
231
- }
232
- const timeMatch = output.match(/Time:\s+([\d.]+)\s*s/);
233
- if (timeMatch)
234
- result.duration = Math.round(parseFloat(timeMatch[1]) * 1000);
235
- result.passed = result.failedTests === 0 && result.totalTests > 0;
236
- // Parse Jest failures
237
- const failMatches = output.matchAll(/✕\s+(.+)\s+\((.+?)\)/g);
238
- for (const match of failMatches) {
239
- result.failures.push({
240
- name: match[1].trim(),
241
- error: 'Test failed',
242
- file: match[2].trim()
243
- });
244
- }
245
- }
246
- else {
247
- // Generic parsing
248
- const passed = output.match(/passed|✓|success/gi);
249
- const failed = output.match(/failed|✕|error/gi);
250
- result.passed = !!(!failed || (passed && !failed));
251
- result.passedTests = passed ? passed.length : 0;
252
- result.failedTests = failed ? failed.length : 0;
253
- result.totalTests = result.passedTests + result.failedTests;
254
- }
255
- return result;
256
- }
257
- function generateFixSuggestions(failures, spec) {
258
- const suggestions = [];
259
- if (failures.length === 0) {
260
- suggestions.push('No specific failures detected. Check test output above.');
261
- return suggestions;
262
- }
263
- // Analyze failure patterns
264
- const hasAssertionErrors = failures.some(f => f.error.toLowerCase().includes('expected') ||
265
- f.error.toLowerCase().includes('assertion'));
266
- const hasMissingImports = failures.some(f => f.error.toLowerCase().includes('cannot find module') ||
267
- f.error.toLowerCase().includes('cannot resolve'));
268
- const hasTypeErrors = failures.some(f => f.error.toLowerCase().includes('type') ||
269
- f.error.toLowerCase().includes('property'));
270
- if (hasMissingImports) {
271
- suggestions.push('Missing imports detected. Check that all dependencies are installed: npm install');
272
- }
273
- if (hasTypeErrors) {
274
- suggestions.push('Type errors found. Run: npx tsc --noEmit to see full type errors');
275
- }
276
- if (hasAssertionErrors) {
277
- suggestions.push('Test assertions failing. Review the expected vs actual values above.');
278
- suggestions.push('Check if implementation matches the spec requirements in ' + spec.id);
279
- }
280
- if (!hasMissingImports && !hasTypeErrors && !hasAssertionErrors) {
281
- suggestions.push('Review the spec file: specs/active/' + spec.id + '.md');
282
- suggestions.push('Ensure implementation covers all acceptance criteria');
283
- suggestions.push('Check that test setup/teardown is correct');
284
- }
285
- suggestions.push('Run individual test: npx vitest run --reporter=verbose ' + spec.testFiles[0]);
286
- return suggestions;
287
- }
288
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts DELETED
@@ -1,23 +0,0 @@
1
- /**
2
- * SpecSafe Config Loader
3
- * Loads configuration from specsafe.config.json with sensible defaults
4
- */
5
- export interface SpecSafeConfig {
6
- projectName: string;
7
- version: string;
8
- stages: string[];
9
- testFramework: 'vitest' | 'jest';
10
- language: 'typescript';
11
- tools?: {
12
- [toolName: string]: {
13
- enabled: boolean;
14
- version: string;
15
- };
16
- };
17
- }
18
- /**
19
- * Load SpecSafe configuration from specsafe.config.json
20
- * Returns defaults if file doesn't exist
21
- */
22
- export declare function loadConfig(cwd?: string): Promise<SpecSafeConfig>;
23
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,CAAC,QAAQ,EAAE,MAAM,GAAG;YAClB,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAUD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4BrF"}
package/dist/config.js DELETED
@@ -1,44 +0,0 @@
1
- /**
2
- * SpecSafe Config Loader
3
- * Loads configuration from specsafe.config.json with sensible defaults
4
- */
5
- import { readFile, access } from 'fs/promises';
6
- import { join } from 'path';
7
- const DEFAULT_CONFIG = {
8
- projectName: 'Untitled Project',
9
- version: '1.0.0',
10
- stages: ['spec', 'test', 'code', 'qa', 'complete', 'archived'],
11
- testFramework: 'vitest',
12
- language: 'typescript'
13
- };
14
- /**
15
- * Load SpecSafe configuration from specsafe.config.json
16
- * Returns defaults if file doesn't exist
17
- */
18
- export async function loadConfig(cwd = process.cwd()) {
19
- const configPath = join(cwd, 'specsafe.config.json');
20
- try {
21
- await access(configPath);
22
- const content = await readFile(configPath, 'utf-8');
23
- const parsed = JSON.parse(content);
24
- // Merge with defaults
25
- return {
26
- projectName: parsed.projectName ?? DEFAULT_CONFIG.projectName,
27
- version: parsed.version ?? DEFAULT_CONFIG.version,
28
- stages: parsed.stages ?? DEFAULT_CONFIG.stages,
29
- testFramework: parsed.testFramework ?? DEFAULT_CONFIG.testFramework,
30
- language: parsed.language ?? DEFAULT_CONFIG.language
31
- };
32
- }
33
- catch (error) {
34
- if (error.code === 'ENOENT') {
35
- // Config file doesn't exist, return defaults
36
- return { ...DEFAULT_CONFIG };
37
- }
38
- if (error instanceof SyntaxError) {
39
- throw new Error(`Invalid JSON in specsafe.config.json: ${error.message}`);
40
- }
41
- throw error;
42
- }
43
- }
44
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgB5B,MAAM,cAAc,GAAmB;IACrC,WAAW,EAAE,kBAAkB;IAC/B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;IAC9D,aAAa,EAAE,QAAQ;IACvB,QAAQ,EAAE,YAAY;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAE9D,sBAAsB;QACtB,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW;YAC7D,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;YACjD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM;YAC9C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,cAAc,CAAC,aAAa;YACnE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ;SACrD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,6CAA6C;YAC7C,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * SpecSafe CLI
4
- * Command-line interface for the SpecSafe TDD framework
5
- * Version 0.4.0 - OpenSpec-style workflow
6
- */
7
- export {};
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
package/dist/index.js DELETED
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * SpecSafe CLI
4
- * Command-line interface for the SpecSafe TDD framework
5
- * Version 0.4.0 - OpenSpec-style workflow
6
- */
7
- import { Command } from 'commander';
8
- import chalk from 'chalk';
9
- import { initCommand } from './commands/init.js';
10
- import { newCommand } from './commands/new.js';
11
- import { statusCommand } from './commands/status.js';
12
- import { specCommand } from './commands/spec.js';
13
- import { testCreateCommand } from './commands/test-create.js';
14
- import { testApplyCommand } from './commands/test-apply.js';
15
- import { qaCommand } from './commands/qa.js';
16
- import { doneCommand } from './commands/done.js';
17
- import { completeCommand } from './commands/complete.js';
18
- import { listCommand } from './commands/list.js';
19
- import { archiveCommand } from './commands/archive.js';
20
- import { doctorCommand } from './commands/doctor.js';
21
- import { rulesCommand } from './commands/rules.js';
22
- import { verifyCommand } from './commands/verify.js';
23
- import { exploreCommand } from './commands/explore.js';
24
- import { deltaCommand } from './commands/delta.js';
25
- import { applyCommand } from './commands/apply.js';
26
- import { diffCommand } from './commands/diff.js';
27
- import { extendCommand } from './commands/extend.js';
28
- import { testGuideCommand } from './commands/test-guide.js';
29
- import { testSubmitCommand } from './commands/test-submit.js';
30
- import { testReportCommand } from './commands/test-report.js';
31
- import { constitutionCommand } from './commands/constitution.js';
32
- import { exportCommand } from './commands/export.js';
33
- import { memoryCommand } from './commands/memory.js';
34
- import { capsuleCommand } from './commands/capsule.js';
35
- import { shardCommand } from './commands/shard.js';
36
- import { createCommand } from './commands/create.js';
37
- import { createRequire } from 'module';
38
- const require = createRequire(import.meta.url);
39
- const packageJson = require('../package.json');
40
- const program = new Command();
41
- program
42
- .name('specsafe')
43
- .description('SpecSafe - Test-Driven Development framework for AI-assisted software engineering')
44
- .version(packageJson.version)
45
- .option('-v, --verbose', 'Enable verbose output');
46
- // Add commands
47
- program.addCommand(initCommand);
48
- program.addCommand(newCommand);
49
- program.addCommand(statusCommand);
50
- program.addCommand(listCommand);
51
- program.addCommand(exploreCommand); // NEW: Pre-spec exploration
52
- program.addCommand(specCommand);
53
- program.addCommand(testCreateCommand); // NEW: Generate tests from scenarios
54
- program.addCommand(testApplyCommand); // NEW: Run tests, loop on failure
55
- program.addCommand(qaCommand);
56
- program.addCommand(verifyCommand); // NEW: Test runner with loop
57
- program.addCommand(doneCommand); // NEW: Complete + archive
58
- program.addCommand(completeCommand); // DEPRECATED: Use 'done' instead
59
- program.addCommand(archiveCommand);
60
- program.addCommand(doctorCommand);
61
- program.addCommand(rulesCommand);
62
- // Delta spec commands (brownfield)
63
- program.addCommand(deltaCommand); // Create delta spec
64
- program.addCommand(applyCommand); // Apply delta specs
65
- program.addCommand(diffCommand); // Preview delta changes
66
- // Extension system
67
- program.addCommand(extendCommand);
68
- // E2E Testing commands
69
- program.addCommand(testGuideCommand);
70
- program.addCommand(testSubmitCommand);
71
- program.addCommand(testReportCommand);
72
- // Governance & Export
73
- program.addCommand(constitutionCommand); // Constitutional governance
74
- program.addCommand(exportCommand); // Export specs in multiple formats
75
- program.addCommand(memoryCommand); // Project memory commands
76
- program.addCommand(capsuleCommand); // Manage context capsules
77
- program.addCommand(shardCommand); // Spec sharding for AI consumption
78
- program.addCommand(createCommand); // Interactive spec creation via elicitation
79
- // Workflow command group
80
- program
81
- .command('workflow')
82
- .description('Show the SpecSafe workflow diagram')
83
- .action(() => {
84
- console.log(chalk.blue('\n┌─────────────────────────────────────────────────────────────┐'));
85
- console.log(chalk.blue('│ SpecSafe Workflow │'));
86
- console.log(chalk.blue('│ v0.4.0 - OpenSpec │'));
87
- console.log(chalk.blue('└─────────────────────────────────────────────────────────────┘\n'));
88
- console.log(chalk.white('Pre-Spec:'));
89
- console.log(chalk.gray(' specsafe explore → Think through ideas before committing\n'));
90
- console.log(chalk.white('Development Cycle:'));
91
- console.log(chalk.cyan(' specsafe new [feature] → Create spec with PRD + BRD'));
92
- console.log(chalk.gray(' ↓'));
93
- console.log(chalk.cyan(' specsafe spec <id> → Flesh out detailed spec'));
94
- console.log(chalk.gray(' ↓'));
95
- console.log(chalk.cyan(' specsafe test-create <id> → Generate tests from scenarios'));
96
- console.log(chalk.gray(' ↓'));
97
- console.log(chalk.cyan(' specsafe test-apply <id> → Run tests, loop on failure'));
98
- console.log(chalk.gray(' ↓ (if tests pass)'));
99
- console.log(chalk.cyan(' specsafe qa <id> → QA validation'));
100
- console.log(chalk.gray(' ↓'));
101
- console.log(chalk.cyan(' specsafe done <id> → Complete & archive'));
102
- console.log();
103
- console.log(chalk.white('Brownfield Changes (Delta Specs):'));
104
- console.log(chalk.cyan(' specsafe delta <id> → Create delta spec for changes'));
105
- console.log(chalk.cyan(' specsafe diff <id> → Preview delta changes'));
106
- console.log(chalk.cyan(' specsafe apply <id> → Apply delta to base spec'));
107
- console.log();
108
- console.log(chalk.white('Utility Commands:'));
109
- console.log(chalk.gray(' specsafe status → View project status'));
110
- console.log(chalk.gray(' specsafe list → List all specs'));
111
- console.log(chalk.gray(' specsafe doctor → Check project health'));
112
- console.log();
113
- console.log(chalk.yellow('💡 The verify command is the key differentiator:'));
114
- console.log(chalk.yellow(' It runs tests and provides feedback for the dev loop.\n'));
115
- });
116
- // Global error handling
117
- program.exitOverride();
118
- (async () => {
119
- try {
120
- await program.parseAsync();
121
- }
122
- catch (error) {
123
- if (error.code !== 'commander.help' && error.code !== 'commander.version') {
124
- console.error(chalk.red('Error:'), error.message);
125
- process.exit(1);
126
- }
127
- }
128
- })();
129
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Rules Downloader
3
- * Downloads rules from the GitHub repository or local source
4
- */
5
- import type { DownloadOptions, RuleOperationResult } from './types.js';
6
- /**
7
- * Path to the rules directory in the repository
8
- */
9
- export declare function getRulesSourcePath(): string;
10
- /**
11
- * Get the path to a specific tool's rules
12
- */
13
- export declare function getToolRulesPath(toolName: string): string;
14
- /**
15
- * Check if rules exist for a tool in the source
16
- */
17
- export declare function rulesExist(toolName: string): Promise<boolean>;
18
- /**
19
- * Get the content of a rule file from the source
20
- */
21
- export declare function getRuleContent(toolName: string, fileName: string): Promise<string | null>;
22
- /**
23
- * Get the version of rules for a tool
24
- * Currently returns '1.0.0' as placeholder
25
- * In the future, this could read from a manifest.json
26
- */
27
- export declare function getRulesVersion(_toolName: string): Promise<string>;
28
- /**
29
- * Download and install rules for a tool
30
- */
31
- export declare function downloadRules(toolName: string, cwd?: string, options?: DownloadOptions): Promise<RuleOperationResult>;
32
- /**
33
- * Remove rules for a tool
34
- */
35
- export declare function removeRules(toolName: string, cwd?: string): Promise<RuleOperationResult>;
36
- /**
37
- * Update rules for a tool to the latest version
38
- */
39
- export declare function updateRules(toolName: string, cwd?: string): Promise<RuleOperationResult>;
40
- //# sourceMappingURL=downloader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/rules/downloader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOvE;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAa3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAiF9B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAqD9B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAW9B"}