@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 +0,0 @@
1
- {"version":3,"file":"generateToolConfig.js","sourceRoot":"","sources":["../../src/utils/generateToolConfig.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- export interface TestResult {
2
- passed: boolean;
3
- passCount: number;
4
- failCount: number;
5
- failures: Array<{
6
- testName: string;
7
- error: string;
8
- }>;
9
- }
10
- export type TestFramework = 'vitest' | 'jest' | 'mocha';
11
- interface FrameworkDetectionResult {
12
- framework: TestFramework;
13
- command: string;
14
- args: string[];
15
- }
16
- /**
17
- * Detects the test framework by checking:
18
- * 1. Package.json for test scripts
19
- * 2. Config files (vitest.config.*, jest.config.*, etc.)
20
- * 3. Installed dependencies
21
- * 4. Defaults to vitest
22
- */
23
- export declare function detectTestFramework(cwd?: string): FrameworkDetectionResult;
24
- /**
25
- * Runs tests using the detected framework and returns structured results
26
- * @param specId Optional spec ID to filter tests
27
- * @param cwd Working directory to run tests in
28
- * @returns TestResult with pass/fail counts and failure details
29
- */
30
- export declare function runTests(specId?: string, cwd?: string): Promise<TestResult>;
31
- /**
32
- * Runs tests synchronously (for simpler use cases)
33
- * @param specId Optional spec ID to filter tests
34
- * @param cwd Working directory to run tests in
35
- * @returns TestResult with pass/fail counts and failure details
36
- */
37
- export declare function runTestsSync(specId?: string, cwd?: string): TestResult;
38
- export {};
39
- //# sourceMappingURL=testRunner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testRunner.d.ts","sourceRoot":"","sources":["../../src/utils/testRunner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD,UAAU,wBAAwB;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG,wBAAwB,CAmEzF;AA+ID;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqEhG;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,UAAU,CAgDrF"}
@@ -1,325 +0,0 @@
1
- import { execSync, spawn } from 'child_process';
2
- import { existsSync, readFileSync } from 'fs';
3
- import { join } from 'path';
4
- /**
5
- * Detects the test framework by checking:
6
- * 1. Package.json for test scripts
7
- * 2. Config files (vitest.config.*, jest.config.*, etc.)
8
- * 3. Installed dependencies
9
- * 4. Defaults to vitest
10
- */
11
- export function detectTestFramework(cwd = process.cwd()) {
12
- const packageJsonPath = join(cwd, 'package.json');
13
- let packageJson = {};
14
- if (existsSync(packageJsonPath)) {
15
- try {
16
- packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
17
- }
18
- catch {
19
- // Invalid package.json, continue with detection
20
- }
21
- }
22
- // Check for config files first (most reliable)
23
- if (existsSync(join(cwd, 'vitest.config.ts')) ||
24
- existsSync(join(cwd, 'vitest.config.js')) ||
25
- existsSync(join(cwd, 'vitest.config.mjs')) ||
26
- existsSync(join(cwd, 'vitest.config.cjs'))) {
27
- return { framework: 'vitest', command: 'npx', args: ['vitest', 'run', '--reporter=json'] };
28
- }
29
- if (existsSync(join(cwd, 'jest.config.ts')) ||
30
- existsSync(join(cwd, 'jest.config.js')) ||
31
- existsSync(join(cwd, 'jest.config.mjs')) ||
32
- existsSync(join(cwd, 'jest.config.cjs')) ||
33
- existsSync(join(cwd, 'jest.config.json'))) {
34
- return { framework: 'jest', command: 'npx', args: ['jest', '--json'] };
35
- }
36
- if (existsSync(join(cwd, '.mocharc.js')) ||
37
- existsSync(join(cwd, '.mocharc.json')) ||
38
- existsSync(join(cwd, '.mocharc.yaml')) ||
39
- existsSync(join(cwd, '.mocharc.yml'))) {
40
- return { framework: 'mocha', command: 'npx', args: ['mocha', '--reporter=json'] };
41
- }
42
- // Check package.json scripts for clues
43
- const scripts = packageJson.scripts || {};
44
- const testScript = scripts.test || '';
45
- if (testScript.includes('vitest')) {
46
- return { framework: 'vitest', command: 'npx', args: ['vitest', 'run', '--reporter=json'] };
47
- }
48
- if (testScript.includes('jest')) {
49
- return { framework: 'jest', command: 'npx', args: ['jest', '--json'] };
50
- }
51
- if (testScript.includes('mocha')) {
52
- return { framework: 'mocha', command: 'npx', args: ['mocha', '--reporter=json'] };
53
- }
54
- // Check installed dependencies
55
- const allDeps = {
56
- ...packageJson.dependencies,
57
- ...packageJson.devDependencies
58
- };
59
- if (allDeps?.vitest) {
60
- return { framework: 'vitest', command: 'npx', args: ['vitest', 'run', '--reporter=json'] };
61
- }
62
- if (allDeps?.jest) {
63
- return { framework: 'jest', command: 'npx', args: ['jest', '--json'] };
64
- }
65
- if (allDeps?.mocha) {
66
- return { framework: 'mocha', command: 'npx', args: ['mocha', '--reporter=json'] };
67
- }
68
- // Default to vitest
69
- return { framework: 'vitest', command: 'npx', args: ['vitest', 'run', '--reporter=json'] };
70
- }
71
- /**
72
- * Parses Vitest JSON output
73
- */
74
- function parseVitestOutput(output) {
75
- try {
76
- const result = JSON.parse(output);
77
- const failures = [];
78
- let passCount = 0;
79
- let failCount = 0;
80
- // Vitest JSON format varies by version, handle common formats
81
- if (result.testResults) {
82
- // Newer vitest format
83
- for (const testFile of result.testResults) {
84
- if (testFile.assertionResults) {
85
- for (const assertion of testFile.assertionResults) {
86
- if (assertion.status === 'passed') {
87
- passCount++;
88
- }
89
- else {
90
- failCount++;
91
- failures.push({
92
- testName: `${testFile.name} > ${assertion.title}`,
93
- error: assertion.failureMessages?.join('\n') || 'Test failed'
94
- });
95
- }
96
- }
97
- }
98
- }
99
- }
100
- // Alternative format
101
- if (result.results) {
102
- for (const testFile of result.results) {
103
- if (Array.isArray(testFile)) {
104
- for (const test of testFile) {
105
- if (test.status === 'passed' || test.status === 'fulfilled') {
106
- passCount++;
107
- }
108
- else {
109
- failCount++;
110
- failures.push({
111
- testName: test.name || 'Unknown test',
112
- error: test.error?.message || test.error || 'Test failed'
113
- });
114
- }
115
- }
116
- }
117
- }
118
- }
119
- return {
120
- passed: failCount === 0 && passCount > 0,
121
- passCount,
122
- failCount,
123
- failures
124
- };
125
- }
126
- catch {
127
- // Fallback: try to parse from stdout
128
- return parseGenericOutput(output);
129
- }
130
- }
131
- /**
132
- * Parses Jest JSON output
133
- */
134
- function parseJestOutput(output) {
135
- try {
136
- const result = JSON.parse(output);
137
- const failures = [];
138
- if (result.testResults) {
139
- for (const testFile of result.testResults) {
140
- if (testFile.message) {
141
- failures.push({
142
- testName: testFile.name,
143
- error: testFile.message
144
- });
145
- }
146
- }
147
- }
148
- return {
149
- passed: result.success || result.numFailedTests === 0,
150
- passCount: result.numPassedTests || 0,
151
- failCount: result.numFailedTests || 0,
152
- failures
153
- };
154
- }
155
- catch {
156
- return parseGenericOutput(output);
157
- }
158
- }
159
- /**
160
- * Parses Mocha JSON output
161
- */
162
- function parseMochaOutput(output) {
163
- try {
164
- const result = JSON.parse(output);
165
- const failures = [];
166
- if (result.failures) {
167
- for (const failure of result.failures) {
168
- failures.push({
169
- testName: failure.fullTitle || failure.title,
170
- error: failure.err?.message || failure.err || 'Test failed'
171
- });
172
- }
173
- }
174
- return {
175
- passed: result.failures?.length === 0 && (result.passes?.length || 0) > 0,
176
- passCount: result.passes?.length || 0,
177
- failCount: result.failures?.length || 0,
178
- failures
179
- };
180
- }
181
- catch {
182
- return parseGenericOutput(output);
183
- }
184
- }
185
- /**
186
- * Generic output parser for when JSON parsing fails
187
- * Attempts to extract pass/fail counts from text output
188
- */
189
- function parseGenericOutput(output) {
190
- const failures = [];
191
- // Try to extract pass/fail counts from common patterns
192
- const passMatch = output.match(/(\d+)\s+passing|passed\s+(\d+)|(\d+)\s+passed/i);
193
- const failMatch = output.match(/(\d+)\s+failing|failed\s+(\d+)|(\d+)\s+failed/i);
194
- const passCount = parseInt(passMatch?.[1] || passMatch?.[2] || passMatch?.[3] || '0', 10);
195
- const failCount = parseInt(failMatch?.[1] || failMatch?.[2] || failMatch?.[3] || '0', 10);
196
- return {
197
- passed: failCount === 0 && passCount > 0,
198
- passCount,
199
- failCount,
200
- failures
201
- };
202
- }
203
- /**
204
- * Runs tests using the detected framework and returns structured results
205
- * @param specId Optional spec ID to filter tests
206
- * @param cwd Working directory to run tests in
207
- * @returns TestResult with pass/fail counts and failure details
208
- */
209
- export async function runTests(specId, cwd = process.cwd()) {
210
- const detection = detectTestFramework(cwd);
211
- // Add spec filter if provided
212
- const args = [...detection.args];
213
- if (specId) {
214
- if (detection.framework === 'vitest') {
215
- args.push('-t', specId);
216
- }
217
- else if (detection.framework === 'jest') {
218
- args.push('-t', specId);
219
- }
220
- else if (detection.framework === 'mocha') {
221
- args.push('-g', specId);
222
- }
223
- }
224
- return new Promise((resolve, reject) => {
225
- const child = spawn(detection.command, args, {
226
- cwd,
227
- stdio: ['pipe', 'pipe', 'pipe'],
228
- shell: true
229
- });
230
- let stdout = '';
231
- let stderr = '';
232
- child.stdout?.on('data', (data) => {
233
- stdout += data.toString();
234
- });
235
- child.stderr?.on('data', (data) => {
236
- stderr += data.toString();
237
- });
238
- child.on('close', (code) => {
239
- // Combine stdout and stderr for parsing (some frameworks output to stderr)
240
- const output = stdout + stderr;
241
- try {
242
- let result;
243
- switch (detection.framework) {
244
- case 'vitest':
245
- result = parseVitestOutput(output);
246
- break;
247
- case 'jest':
248
- result = parseJestOutput(output);
249
- break;
250
- case 'mocha':
251
- result = parseMochaOutput(output);
252
- break;
253
- default:
254
- result = parseGenericOutput(output);
255
- }
256
- // If no tests were found but command succeeded, treat as passed with 0 tests
257
- if (result.passCount === 0 && result.failCount === 0 && code === 0) {
258
- result.passed = true;
259
- }
260
- resolve(result);
261
- }
262
- catch (error) {
263
- reject(new Error(`Failed to parse test output: ${error}`));
264
- }
265
- });
266
- child.on('error', (error) => {
267
- reject(new Error(`Failed to run tests: ${error.message}`));
268
- });
269
- });
270
- }
271
- /**
272
- * Runs tests synchronously (for simpler use cases)
273
- * @param specId Optional spec ID to filter tests
274
- * @param cwd Working directory to run tests in
275
- * @returns TestResult with pass/fail counts and failure details
276
- */
277
- export function runTestsSync(specId, cwd = process.cwd()) {
278
- const detection = detectTestFramework(cwd);
279
- // Add spec filter if provided
280
- const args = [...detection.args];
281
- if (specId) {
282
- if (detection.framework === 'vitest') {
283
- args.push('-t', specId);
284
- }
285
- else if (detection.framework === 'jest') {
286
- args.push('-t', specId);
287
- }
288
- else if (detection.framework === 'mocha') {
289
- args.push('-g', specId);
290
- }
291
- }
292
- try {
293
- const output = execSync(`${detection.command} ${args.join(' ')}`, {
294
- cwd,
295
- encoding: 'utf-8',
296
- stdio: ['pipe', 'pipe', 'pipe']
297
- });
298
- switch (detection.framework) {
299
- case 'vitest':
300
- return parseVitestOutput(output);
301
- case 'jest':
302
- return parseJestOutput(output);
303
- case 'mocha':
304
- return parseMochaOutput(output);
305
- default:
306
- return parseGenericOutput(output);
307
- }
308
- }
309
- catch (error) {
310
- // Test command may exit with non-zero code on test failures
311
- // Try to parse output anyway
312
- const output = error.stdout || error.message || '';
313
- switch (detection.framework) {
314
- case 'vitest':
315
- return parseVitestOutput(output);
316
- case 'jest':
317
- return parseJestOutput(output);
318
- case 'mocha':
319
- return parseMochaOutput(output);
320
- default:
321
- return parseGenericOutput(output);
322
- }
323
- }
324
- }
325
- //# sourceMappingURL=testRunner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testRunner.js","sourceRoot":"","sources":["../../src/utils/testRunner.ts"],"names":[],"mappings":"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"}