@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,179 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { Workflow, ProjectTracker, validateSpecId, generateEARSReport, getEARSScore } from '@specsafe/core';
5
- import { exec } from 'child_process';
6
- import { promisify } from 'util';
7
- import { writeFile, mkdir } from 'fs/promises';
8
- import { join } from 'path';
9
- const execAsync = promisify(exec);
10
- export const qaCommand = new Command('qa')
11
- .description('Run QA validation (CODE → QA)')
12
- .argument('<id>', 'Spec ID')
13
- .option('-o, --output <path>', 'Output path for QA report')
14
- .option('--ears', 'Validate EARS compliance and generate EARS report')
15
- .action(async (id, options) => {
16
- const spinner = ora(`Running QA for ${id}...`).start();
17
- try {
18
- // Validate spec ID format
19
- validateSpecId(id);
20
- const workflow = new Workflow();
21
- const tracker = new ProjectTracker(process.cwd());
22
- // Load existing specs from disk
23
- await tracker.loadSpecsIntoWorkflow(workflow);
24
- // Run test suite
25
- spinner.text = `Running test suite for ${id}...`;
26
- let testResults = [];
27
- let coverage = { statements: 0, branches: 0, functions: 0, lines: 0 };
28
- let allPassed = false;
29
- let testsFound = false;
30
- try {
31
- const { stdout } = await execAsync('npm test -- --reporter=json --coverage');
32
- testsFound = true;
33
- // Parse test results from JSON reporter output
34
- try {
35
- const parsed = JSON.parse(stdout);
36
- if (parsed.testResults && Array.isArray(parsed.testResults)) {
37
- testResults = parsed.testResults.map((r) => ({
38
- file: r.name || r.file || 'unknown',
39
- passed: r.numPassingTests ?? (r.status === 'passed' ? 1 : 0),
40
- failed: r.numFailingTests ?? (r.status === 'failed' ? 1 : 0),
41
- skipped: r.numPendingTests ?? 0,
42
- duration: r.perfStats?.runtime ?? r.duration ?? 0
43
- }));
44
- }
45
- if (parsed.coverageMap || parsed.coverage) {
46
- const cov = parsed.coverageMap || parsed.coverage;
47
- coverage = {
48
- statements: cov.statements?.pct ?? 85,
49
- branches: cov.branches?.pct ?? 80,
50
- functions: cov.functions?.pct ?? 90,
51
- lines: cov.lines?.pct ?? 85
52
- };
53
- }
54
- }
55
- catch {
56
- // JSON parse failed, treat as success with defaults
57
- spinner.text = `Warning: Could not parse test output as JSON, using default results...`;
58
- testResults = [{ file: 'test-suite', passed: 1, failed: 0, skipped: 0, duration: 0 }];
59
- coverage = { statements: 85, branches: 80, functions: 90, lines: 85 };
60
- }
61
- allPassed = testResults.every(r => r.failed === 0);
62
- }
63
- catch (testError) {
64
- // Tests failed (non-zero exit)
65
- if (!testsFound) {
66
- throw new Error('No tests found. Run \'specsafe test ' + id + '\' to generate tests first.');
67
- }
68
- testResults = [{ file: 'test-suite', passed: 0, failed: 1, skipped: 0, duration: 0 }];
69
- allPassed = false;
70
- }
71
- // Move to QA stage (validates implementation exists)
72
- try {
73
- workflow.moveToQA(id);
74
- }
75
- catch (moveError) {
76
- if (moveError.message.includes('not found')) {
77
- throw new Error(`Spec '${id}' not found. Run 'specsafe spec ${id}' to create it first.`);
78
- }
79
- if (moveError.message.includes('Must be in CODE stage')) {
80
- throw new Error(`Spec '${id}' is not in CODE stage. Run 'specsafe code ${id}' first.`);
81
- }
82
- if (moveError.message.includes('No implementation files')) {
83
- throw new Error(`Spec '${id}' has no implementation files. Run 'specsafe code ${id}' and implement the functionality first.`);
84
- }
85
- throw moveError;
86
- }
87
- // Build issues from failing tests as proper Issue objects
88
- const issues = testResults
89
- .filter(r => r.failed > 0)
90
- .map(r => ({
91
- severity: 'high',
92
- description: `${r.failed} test(s) failed in ${r.file}`,
93
- file: r.file
94
- }));
95
- // Generate QA report
96
- const qaReport = {
97
- id: `QA-${id}`,
98
- specId: id,
99
- timestamp: new Date(),
100
- testResults,
101
- coverage,
102
- recommendation: allPassed ? 'GO' : 'NO-GO',
103
- issues,
104
- notes: allPassed
105
- ? 'All tests passing. Ready for completion.'
106
- : 'Some tests failed. Address issues before completing.'
107
- };
108
- // Save QA report
109
- await mkdir('qa-reports', { recursive: true });
110
- const reportPath = options.output || join('qa-reports', `qa-${id}.json`);
111
- await writeFile(reportPath, JSON.stringify(qaReport, null, 2));
112
- // EARS validation if requested
113
- let earsScore;
114
- let earsReportPath;
115
- if (options.ears) {
116
- spinner.text = `Validating EARS compliance for ${id}...`;
117
- const spec = workflow.getSpec(id);
118
- earsScore = getEARSScore(spec);
119
- const earsReport = generateEARSReport(spec);
120
- earsReportPath = join('qa-reports', `ears-${id}.md`);
121
- await writeFile(earsReportPath, earsReport);
122
- }
123
- // Persist state
124
- await tracker.addSpec(workflow.getSpec(id));
125
- if (qaReport.recommendation === 'GO') {
126
- spinner.succeed(chalk.green(`✅ QA passed for ${id}`));
127
- console.log(chalk.blue(` Report: ${reportPath}`));
128
- if (options.ears && earsScore !== undefined) {
129
- console.log(chalk.blue(` EARS Report: ${earsReportPath}`));
130
- if (earsScore >= 90) {
131
- console.log(chalk.green(` EARS Score: ${earsScore}/100 ✅`));
132
- }
133
- else if (earsScore >= 70) {
134
- console.log(chalk.yellow(` EARS Score: ${earsScore}/100 ⚠️`));
135
- }
136
- else {
137
- console.log(chalk.red(` EARS Score: ${earsScore}/100 ❌`));
138
- }
139
- }
140
- console.log(chalk.green('Ready for completion!'));
141
- console.log(chalk.blue(` Run: specsafe complete ${id} --report ${reportPath}`));
142
- }
143
- else {
144
- spinner.warn(chalk.yellow(`⚠️ QA issues found for ${id}`));
145
- const issueDescs = qaReport.issues.map(i => i.description);
146
- console.log(chalk.red(` Issues: ${issueDescs.join(', ')}`));
147
- if (options.ears && earsScore !== undefined) {
148
- console.log(chalk.blue(` EARS Report: ${earsReportPath}`));
149
- if (earsScore >= 90) {
150
- console.log(chalk.green(` EARS Score: ${earsScore}/100 ✅`));
151
- }
152
- else if (earsScore >= 70) {
153
- console.log(chalk.yellow(` EARS Score: ${earsScore}/100 ⚠️`));
154
- }
155
- else {
156
- console.log(chalk.red(` EARS Score: ${earsScore}/100 ❌`));
157
- }
158
- }
159
- console.log(chalk.blue('Fix issues and re-run: specsafe qa <id>'));
160
- }
161
- }
162
- catch (error) {
163
- spinner.fail(chalk.red(error.message));
164
- if (error.message.includes('not in CODE stage') || error.message.includes('Run \'specsafe code\'')) {
165
- console.log(chalk.gray(`💡 Tip: Run 'specsafe code ${id}' to move to CODE stage first.`));
166
- }
167
- else if (error.message.includes('No tests found') || error.message.includes('generate tests')) {
168
- console.log(chalk.gray(`💡 Tip: Run 'specsafe test ${id}' to generate tests first.`));
169
- }
170
- else if (error.message.includes('not found')) {
171
- console.log(chalk.gray(`💡 Tip: Run 'specsafe new <name>' to create a spec first.`));
172
- }
173
- else if (error.message.includes('No implementation files')) {
174
- console.log(chalk.gray(`💡 Tip: Implement the functionality in src/ to match the requirements.`));
175
- }
176
- process.exit(1);
177
- }
178
- });
179
- //# sourceMappingURL=qa.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { Command } from 'commander';
2
- /**
3
- * Rules command - manage AI coding assistant integrations
4
- */
5
- export declare const rulesCommand: Command;
6
- //# sourceMappingURL=rules.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/commands/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkFpC;;GAEG;AACH,eAAO,MAAM,YAAY,SA8MtB,CAAC"}
@@ -1,232 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { writeFile, readFile, mkdir } from 'fs/promises';
5
- import { existsSync } from 'fs';
6
- import { join, dirname } from 'path';
7
- import { getSupportedAgents, getAgent, AGENT_DEFINITIONS, } from '@specsafe/core';
8
- /**
9
- * Load installed agents from config
10
- */
11
- async function loadInstalledAgents(cwd = process.cwd()) {
12
- const configPath = join(cwd, 'specsafe.config.json');
13
- try {
14
- const content = await readFile(configPath, 'utf-8');
15
- const config = JSON.parse(content);
16
- return new Map(Object.entries(config.agents || {}));
17
- }
18
- catch {
19
- return new Map();
20
- }
21
- }
22
- /**
23
- * Save agent configuration
24
- */
25
- async function saveAgentConfig(agentId, config, cwd = process.cwd()) {
26
- const configPath = join(cwd, 'specsafe.config.json');
27
- let existingConfig = {};
28
- try {
29
- const content = await readFile(configPath, 'utf-8');
30
- existingConfig = JSON.parse(content);
31
- }
32
- catch {
33
- // Config doesn't exist yet
34
- }
35
- existingConfig.agents = {
36
- ...(existingConfig.agents || {}),
37
- [agentId]: config,
38
- };
39
- await writeFile(configPath, JSON.stringify(existingConfig, null, 2));
40
- }
41
- /**
42
- * Remove agent configuration
43
- */
44
- async function removeAgentConfig(agentId, cwd = process.cwd()) {
45
- const configPath = join(cwd, 'specsafe.config.json');
46
- // Read phase - handle ENOENT gracefully
47
- let config;
48
- try {
49
- const content = await readFile(configPath, 'utf-8');
50
- config = JSON.parse(content);
51
- }
52
- catch (err) {
53
- // Config doesn't exist or is malformed
54
- if (err.code === 'ENOENT') {
55
- return;
56
- }
57
- throw err;
58
- }
59
- // Write phase - let errors bubble up
60
- if (config.agents && config.agents[agentId]) {
61
- delete config.agents[agentId];
62
- await writeFile(configPath, JSON.stringify(config, null, 2));
63
- }
64
- }
65
- /**
66
- * Rules command - manage AI coding assistant integrations
67
- */
68
- export const rulesCommand = new Command('rules')
69
- .description('Manage AI coding assistant rules and integrations')
70
- .addCommand(new Command('list')
71
- .description('List available and installed agents')
72
- .action(async () => {
73
- const spinner = ora('Loading agents...').start();
74
- try {
75
- const installedAgents = await loadInstalledAgents();
76
- spinner.stop();
77
- console.log(chalk.bold('\n📋 Available Agents:\n'));
78
- for (const agentDef of AGENT_DEFINITIONS) {
79
- const agentEntry = getAgent(agentDef.id);
80
- const isInstalled = installedAgents.has(agentDef.id);
81
- const isDetected = agentEntry ? await agentEntry.adapter.detect(process.cwd()) : false;
82
- const status = isInstalled
83
- ? chalk.green('[installed]')
84
- : isDetected
85
- ? chalk.yellow('[detected]')
86
- : chalk.gray('[available]');
87
- console.log(` ${status} ${chalk.cyan(agentDef.id.padEnd(15))} ${agentDef.name}`);
88
- if (isDetected && !isInstalled && agentDef.detectionFiles.length > 0) {
89
- console.log(` ${chalk.gray(`Detected: ${agentDef.detectionFiles[0]}`)}`);
90
- }
91
- }
92
- console.log(chalk.gray(`\n${AGENT_DEFINITIONS.length} agents available`));
93
- console.log(chalk.gray(`\nUse 'specsafe rules add <agent>' to install agent configs`));
94
- }
95
- catch (error) {
96
- spinner.fail(chalk.red(`Failed to list agents: ${error.message}`));
97
- process.exit(1);
98
- }
99
- }))
100
- .addCommand(new Command('add')
101
- .description('Install configuration for an agent')
102
- .argument('<agent>', 'Agent ID (claude-code, cursor, copilot, etc.)')
103
- .option('--force', 'Overwrite existing files')
104
- .action(async (agentId, options) => {
105
- const supportedAgents = getSupportedAgents();
106
- if (!supportedAgents.includes(agentId)) {
107
- console.error(chalk.red(`Error: Unknown agent "${agentId}"`));
108
- console.log(chalk.gray(`\nAvailable agents: ${supportedAgents.join(', ')}`));
109
- process.exit(1);
110
- }
111
- const agentEntry = getAgent(agentId);
112
- if (!agentEntry) {
113
- console.error(chalk.red(`Error: Agent "${agentId}" has no adapter registered.`));
114
- console.log(chalk.gray('This agent is defined but not yet implemented.'));
115
- process.exit(1);
116
- }
117
- const spinner = ora(`Installing ${agentEntry.name} configuration...`).start();
118
- try {
119
- const projectDir = process.cwd();
120
- // Generate config files
121
- const configFiles = await agentEntry.adapter.generateConfig(projectDir, {
122
- force: options.force,
123
- });
124
- // Generate command files
125
- const commandFiles = await agentEntry.adapter.generateCommands(projectDir, {
126
- force: options.force,
127
- });
128
- const allFiles = [...configFiles, ...commandFiles];
129
- let created = 0;
130
- let skipped = 0;
131
- // Write files
132
- for (const file of allFiles) {
133
- const filePath = join(projectDir, file.path);
134
- const fileDir = dirname(filePath);
135
- // Create directory (mkdir recursive is idempotent)
136
- await mkdir(fileDir, { recursive: true });
137
- // Check if file exists
138
- if (existsSync(filePath) && !options.force) {
139
- skipped++;
140
- continue;
141
- }
142
- // Write file
143
- await writeFile(filePath, file.content);
144
- created++;
145
- }
146
- // Save to config
147
- await saveAgentConfig(agentId, { enabled: true });
148
- spinner.succeed(chalk.green(`Installed ${agentEntry.name} configuration`));
149
- console.log(chalk.gray(`\nFiles: ${created} created, ${skipped} skipped`));
150
- // Show instructions
151
- console.log('\n' + chalk.blue('Usage Instructions:'));
152
- console.log(agentEntry.adapter.getInstructions());
153
- }
154
- catch (error) {
155
- spinner.fail(chalk.red(`Failed to install ${agentId}: ${error.message}`));
156
- process.exit(1);
157
- }
158
- }))
159
- .addCommand(new Command('remove')
160
- .description('Remove configuration for an agent')
161
- .argument('<agent>', 'Agent ID to remove')
162
- .action(async (agentId) => {
163
- const supportedAgents = getSupportedAgents();
164
- if (!supportedAgents.includes(agentId)) {
165
- console.error(chalk.red(`Error: Unknown agent "${agentId}"`));
166
- process.exit(1);
167
- }
168
- // Check if agent is actually installed
169
- const installedAgents = await loadInstalledAgents();
170
- if (!installedAgents.has(agentId)) {
171
- console.warn(chalk.yellow(`Warning: Agent "${agentId}" is not configured in this project.`));
172
- console.log(chalk.gray('Nothing to remove.'));
173
- process.exit(0);
174
- }
175
- const spinner = ora(`Removing ${agentId} configuration...`).start();
176
- try {
177
- // Remove from config
178
- await removeAgentConfig(agentId);
179
- spinner.succeed(chalk.green(`Removed ${agentId} from configuration`));
180
- console.log(chalk.gray('\nNote: Config files were not deleted. Remove them manually if needed.'));
181
- }
182
- catch (error) {
183
- spinner.fail(chalk.red(`Failed to remove ${agentId}: ${error.message}`));
184
- process.exit(1);
185
- }
186
- }))
187
- .addCommand(new Command('info')
188
- .description('Show information about an agent')
189
- .argument('<agent>', 'Agent ID')
190
- .action(async (agentId) => {
191
- const agentEntry = getAgent(agentId);
192
- if (!agentEntry) {
193
- // Fallback to agent definition if no adapter available
194
- const agentDef = AGENT_DEFINITIONS.find(def => def.id === agentId);
195
- if (!agentDef) {
196
- console.error(chalk.red(`Error: Unknown agent "${agentId}"`));
197
- const supported = getSupportedAgents();
198
- console.log(chalk.gray(`\nAvailable agents: ${supported.join(', ')}`));
199
- process.exit(1);
200
- }
201
- // Show metadata but note no adapter available
202
- console.log(chalk.bold(`\n${agentDef.name}\n`));
203
- console.log(chalk.gray(`ID: ${agentDef.id}`));
204
- console.log(chalk.gray(`Config Directory: ${agentDef.configDir || 'N/A'}`));
205
- console.log(chalk.gray(`Command Directory: ${agentDef.commandDir || 'N/A'}`));
206
- console.log(chalk.gray(`File Extension: ${agentDef.fileExtension}`));
207
- console.log(chalk.gray(`Command Format: ${agentDef.commandFormat}`));
208
- console.log('\n' + chalk.blue('Detection Files:'));
209
- for (const file of agentDef.detectionFiles) {
210
- const exists = existsSync(join(process.cwd(), file));
211
- const status = exists ? chalk.green('✓') : chalk.gray('✗');
212
- console.log(` ${status} ${file}`);
213
- }
214
- console.log('\n' + chalk.yellow('⚠ No adapter available for this agent'));
215
- return;
216
- }
217
- console.log(chalk.bold(`\n${agentEntry.name}\n`));
218
- console.log(chalk.gray(`ID: ${agentEntry.id}`));
219
- console.log(chalk.gray(`Config Directory: ${agentEntry.configDir || 'N/A'}`));
220
- console.log(chalk.gray(`Command Directory: ${agentEntry.commandDir || 'N/A'}`));
221
- console.log(chalk.gray(`File Extension: ${agentEntry.fileExtension}`));
222
- console.log(chalk.gray(`Command Format: ${agentEntry.commandFormat}`));
223
- console.log('\n' + chalk.blue('Detection Files:'));
224
- for (const file of agentEntry.detectionFiles) {
225
- const exists = existsSync(join(process.cwd(), file));
226
- const status = exists ? chalk.green('✓') : chalk.gray('✗');
227
- console.log(` ${status} ${file}`);
228
- }
229
- console.log('\n' + chalk.blue('Instructions:'));
230
- console.log(agentEntry.adapter.getInstructions());
231
- }));
232
- //# sourceMappingURL=rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/commands/rules.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Shard Command - Analyze and split specs into AI-consumable chunks
3
- */
4
- import { Command } from 'commander';
5
- export declare const shardCommand: Command;
6
- //# sourceMappingURL=shard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../src/commands/shard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDpC,eAAO,MAAM,YAAY,SA+ErB,CAAC"}