@specsafe/cli 0.7.1 → 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 +32 -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,236 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { input, editor, select, confirm } from '@inquirer/prompts';
5
- import { mkdir, writeFile } from 'fs/promises';
6
- import { join } from 'path';
7
- export const exploreCommand = new Command('explore')
8
- .description('Explore ideas before creating a spec')
9
- .argument('[topic]', 'Topic or idea to explore')
10
- .option('-t, --template <type>', 'Exploration template', 'general')
11
- .action(async (topic, options) => {
12
- const spinner = ora('Starting exploration session...').start();
13
- try {
14
- spinner.stop();
15
- console.log(chalk.blue('\n🔍 SpecSafe Exploration Mode\n'));
16
- console.log(chalk.gray('Think through ideas before committing to a spec.\n'));
17
- // Get the topic if not provided
18
- let explorationTopic = topic;
19
- if (!explorationTopic) {
20
- explorationTopic = await input({
21
- message: 'What idea or feature do you want to explore?',
22
- validate: (value) => value.length > 0 || 'Please provide a topic'
23
- });
24
- }
25
- console.log(chalk.blue(`\nExploring: ${explorationTopic}\n`));
26
- // Choose exploration approach
27
- const approach = await select({
28
- message: 'What aspect do you want to focus on?',
29
- choices: [
30
- {
31
- name: 'Technical Feasibility',
32
- value: 'feasibility',
33
- description: 'Evaluate if this is technically possible'
34
- },
35
- {
36
- name: 'User Impact',
37
- value: 'impact',
38
- description: 'Understand how users would benefit'
39
- },
40
- {
41
- name: 'Implementation Approaches',
42
- value: 'approaches',
43
- description: 'Compare different ways to build this'
44
- },
45
- {
46
- name: 'Risk Assessment',
47
- value: 'risks',
48
- description: 'Identify potential problems and mitigations'
49
- },
50
- {
51
- name: 'Free-form Exploration',
52
- value: 'freeform',
53
- description: 'Open-ended exploration'
54
- }
55
- ]
56
- });
57
- const result = {
58
- idea: explorationTopic,
59
- approach: '',
60
- pros: [],
61
- cons: [],
62
- alternatives: [],
63
- recommendation: 'proceed',
64
- nextSteps: []
65
- };
66
- // Guided prompts based on approach
67
- switch (approach) {
68
- case 'feasibility':
69
- result.approach = await editor({
70
- message: 'Describe the proposed solution:',
71
- default: `# ${explorationTopic}\n\n## Proposed Solution\n\n[Describe your idea here]\n\n## Technical Considerations\n\n- What technologies would be needed?\n- What are the integration points?\n- Are there any blockers?`
72
- });
73
- break;
74
- case 'impact':
75
- result.approach = await editor({
76
- message: 'Describe the user impact:',
77
- default: `# ${explorationTopic}\n\n## Target Users\n\n[Who benefits from this?]\n\n## Problem Being Solved\n\n[What pain point does this address?]\n\n## Expected Outcomes\n\n[What changes for the user?]`
78
- });
79
- break;
80
- case 'approaches':
81
- result.approach = await editor({
82
- message: 'Compare different approaches:',
83
- default: `# ${explorationTopic}\n\n## Option 1: [Name]\n\nDescription...\n\nPros:\n- \n\nCons:\n- \n\n## Option 2: [Name]\n\nDescription...\n\nPros:\n- \n\nCons:\n- `
84
- });
85
- break;
86
- case 'risks':
87
- result.approach = await editor({
88
- message: 'Identify risks and mitigations:',
89
- default: `# ${explorationTopic}\n\n## Potential Risks\n\n| Risk | Probability | Impact | Mitigation |\n|------|-------------|--------|------------|\n| | | | |\n\n## Dependencies\n\n- What does this depend on?\n- What depends on this?\n\n## Unknowns\n\n[What don't we know yet?]`
90
- });
91
- break;
92
- case 'freeform':
93
- default:
94
- result.approach = await editor({
95
- message: 'Explore your idea freely:',
96
- default: explorationTopic
97
- });
98
- }
99
- // Pros and cons
100
- console.log(chalk.blue('\nPros and Cons:\n'));
101
- const prosInput = await editor({
102
- message: 'List the advantages/benefits:',
103
- default: '- \n- \n- '
104
- });
105
- result.pros = prosInput.split('\n').filter(line => line.trim().startsWith('-')).map(line => line.replace(/^-\s*/, '').trim());
106
- const consInput = await editor({
107
- message: 'List the challenges/risks:',
108
- default: '- \n- \n- '
109
- });
110
- result.cons = consInput.split('\n').filter(line => line.trim().startsWith('-')).map(line => line.replace(/^-\s*/, '').trim());
111
- // Alternatives
112
- const alternativesInput = await editor({
113
- message: 'What alternatives exist?',
114
- default: `- Do nothing (status quo)
115
- - [Alternative approach 1]
116
- - [Alternative approach 2]`
117
- });
118
- result.alternatives = alternativesInput.split('\n').filter(line => line.trim().startsWith('-')).map(line => line.replace(/^-\s*/, '').trim());
119
- // Recommendation
120
- result.recommendation = await select({
121
- message: 'What is your recommendation?',
122
- choices: [
123
- { name: '✅ Proceed - Create a spec', value: 'proceed' },
124
- { name: '🔄 Refine - Needs more thought', value: 'refine' },
125
- { name: '↩️ Pivot - Consider alternatives', value: 'pivot' },
126
- { name: '❌ Abort - Not worth pursuing', value: 'abort' }
127
- ]
128
- });
129
- // Next steps
130
- const nextStepsInput = await editor({
131
- message: 'What are the next steps?',
132
- default: result.recommendation === 'proceed'
133
- ? `1. Create spec with: specsafe new ${explorationTopic.toLowerCase().replace(/\s+/g, '-')}\n2. Define detailed requirements\n3. Identify technical approach`
134
- : `1. [Research needed]\n2. [Stakeholder input needed]\n3. [Decision needed]`
135
- });
136
- result.nextSteps = nextStepsInput.split('\n').filter(line => line.trim());
137
- // Generate summary
138
- console.log(chalk.blue('\n' + '━'.repeat(60)));
139
- console.log(chalk.bold(' Exploration Summary'));
140
- console.log(chalk.blue('━'.repeat(60) + '\n'));
141
- console.log(chalk.white(` Topic: ${explorationTopic}`));
142
- console.log(chalk.gray(` Focus: ${approach}\n`));
143
- if (result.pros.length > 0) {
144
- console.log(chalk.green(' Pros:'));
145
- for (const pro of result.pros) {
146
- console.log(chalk.green(` ✓ ${pro}`));
147
- }
148
- console.log();
149
- }
150
- if (result.cons.length > 0) {
151
- console.log(chalk.red(' Cons:'));
152
- for (const con of result.cons) {
153
- console.log(chalk.red(` ✗ ${con}`));
154
- }
155
- console.log();
156
- }
157
- // Recommendation
158
- const recColors = {
159
- proceed: chalk.green.bold,
160
- refine: chalk.yellow.bold,
161
- pivot: chalk.blue.bold,
162
- abort: chalk.red.bold
163
- };
164
- const recLabels = {
165
- proceed: 'PROCEED',
166
- refine: 'REFINE',
167
- pivot: 'PIVOT',
168
- abort: 'ABORT'
169
- };
170
- const recColor = recColors[result.recommendation];
171
- const recLabel = recLabels[result.recommendation];
172
- console.log(chalk.white(' Recommendation: ') + recColor(recLabel));
173
- console.log();
174
- if (result.nextSteps.length > 0) {
175
- console.log(chalk.blue(' Next Steps:'));
176
- for (const step of result.nextSteps) {
177
- console.log(chalk.white(` → ${step}`));
178
- }
179
- }
180
- console.log(chalk.blue('\n' + '━'.repeat(60)));
181
- // Persist exploration results to disk
182
- const explorationDir = join('specs', 'exploration');
183
- await mkdir(explorationDir, { recursive: true });
184
- const fileSlug = explorationTopic
185
- .toLowerCase()
186
- .replace(/[^a-z0-9]+/g, '-')
187
- .replace(/^-+|-+$/g, '') || 'exploration';
188
- const timestamp = new Date().toISOString().slice(0, 10);
189
- const explorationPath = join(explorationDir, `${timestamp}-${fileSlug}.md`);
190
- const explorationContent = `# Exploration: ${explorationTopic}
191
-
192
- **Date:** ${new Date().toISOString()}
193
- **Focus:** ${options.template}
194
- **Recommendation:** ${result.recommendation.toUpperCase()}
195
-
196
- ## Approach
197
-
198
- ${result.approach}
199
-
200
- ## Pros
201
- ${result.pros.map(p => `- ${p}`).join('\n') || '- None listed'}
202
-
203
- ## Cons
204
- ${result.cons.map(c => `- ${c}`).join('\n') || '- None listed'}
205
-
206
- ## Alternatives
207
- ${result.alternatives.map(a => `- ${a}`).join('\n') || '- None listed'}
208
-
209
- ## Next Steps
210
- ${result.nextSteps.map(s => `- ${s}`).join('\n') || '- None listed'}
211
- `;
212
- await writeFile(explorationPath, explorationContent, 'utf-8');
213
- console.log(chalk.gray(` 💾 Saved exploration notes: ${explorationPath}`));
214
- // Offer to create spec if recommended
215
- if (result.recommendation === 'proceed') {
216
- const shouldCreate = await confirm({
217
- message: 'Create a spec now?',
218
- default: true
219
- });
220
- if (shouldCreate) {
221
- const featureName = explorationTopic.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
222
- console.log(chalk.blue(`\nRun: specsafe new ${featureName}`));
223
- }
224
- }
225
- console.log();
226
- }
227
- catch (error) {
228
- if (error.message.includes('User force closed')) {
229
- console.log(chalk.gray('\nExploration cancelled.'));
230
- process.exit(0);
231
- }
232
- console.error(chalk.red('Error:'), error.message);
233
- process.exit(1);
234
- }
235
- });
236
- //# sourceMappingURL=explore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Export Command
3
- * Export specs in multiple formats: markdown, json, html, stakeholder bundles
4
- */
5
- import { Command } from 'commander';
6
- export declare const exportCommand: Command;
7
- //# sourceMappingURL=export.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,aAAa,SAyFtB,CAAC"}
@@ -1,179 +0,0 @@
1
- /**
2
- * Export Command
3
- * Export specs in multiple formats: markdown, json, html, stakeholder bundles
4
- */
5
- import { Command } from 'commander';
6
- import chalk from 'chalk';
7
- import ora from 'ora';
8
- import { writeFile, mkdir, access } from 'fs/promises';
9
- import { join } from 'path';
10
- import { parseSpecFromFile, exportSpec, generateStakeholderBundle, validateFilePath, validateOutputPath, sanitizeFilename, validateExportFormat, } from '@specsafe/core';
11
- export const exportCommand = new Command('export')
12
- .description('Export spec in multiple formats')
13
- .argument('<spec>', 'Spec ID or path to spec file (e.g., SPEC-20260212-001 or specs/active/SPEC-20260212-001.md)')
14
- .option('-f, --format <format>', 'Export format: markdown, json, html, stakeholder', 'markdown')
15
- .option('-o, --output <path>', 'Output file or directory')
16
- .option('--stakeholder', 'Generate all 4 stakeholder bundles')
17
- .option('--bundle', 'Export all formats as zip (not implemented yet)')
18
- .option('--no-metadata', 'Exclude metadata from export')
19
- .option('--include-history', 'Include history in export (JSON only)')
20
- .action(async (specPathOrId, options) => {
21
- const spinner = ora('Loading spec...').start();
22
- try {
23
- // Validate export format
24
- try {
25
- validateExportFormat(options.format);
26
- }
27
- catch (error) {
28
- spinner.fail(chalk.red(error.message));
29
- process.exit(1);
30
- }
31
- // Determine spec file path
32
- let specFilePath = specPathOrId;
33
- // If it looks like a spec ID, find the file
34
- if (!specFilePath.includes('/') && !specFilePath.includes('.md')) {
35
- const specId = specPathOrId.toUpperCase();
36
- // Try active folder first
37
- try {
38
- const activePath = `specs/active/${specId}.md`;
39
- await access(activePath);
40
- specFilePath = activePath;
41
- }
42
- catch {
43
- // Try completed folder
44
- try {
45
- const completedPath = `specs/completed/${specId}.md`;
46
- await access(completedPath);
47
- specFilePath = completedPath;
48
- }
49
- catch {
50
- // Try as is (full path)
51
- specFilePath = `${specPathOrId}.md`;
52
- }
53
- }
54
- }
55
- spinner.text = 'Parsing spec...';
56
- // Parse spec from file (with path validation)
57
- const spec = await parseSpecFromFile(specFilePath);
58
- spinner.text = 'Generating export...';
59
- // Handle different export modes
60
- if (options.stakeholder) {
61
- await exportStakeholderBundles(spec, options.output);
62
- }
63
- else if (options.bundle) {
64
- spinner.stop();
65
- console.log(chalk.yellow('⚠️ Bundle export (zip) is not yet implemented.'));
66
- console.log(chalk.gray('Use --stakeholder to generate individual bundle files.'));
67
- console.log(chalk.gray('Or specify --format for single format export.'));
68
- process.exit(1);
69
- }
70
- else {
71
- await exportSingleFormat(spec, options.format, options.output, options.metadata !== false, options.includeHistory);
72
- }
73
- spinner.succeed(chalk.green('Export completed successfully!'));
74
- }
75
- catch (error) {
76
- spinner.fail(chalk.red(error.message));
77
- if (error.code === 'ENOENT') {
78
- console.log(chalk.gray('\n💡 Tip: Make sure the spec file exists.'));
79
- console.log(chalk.gray(' Example: specsafe export SPEC-20260212-001'));
80
- console.log(chalk.gray(' Or: specsafe export specs/active/SPEC-20260212-001.md'));
81
- }
82
- process.exit(1);
83
- }
84
- });
85
- /**
86
- * Export spec in a single format
87
- */
88
- async function exportSingleFormat(spec, format, outputPath, includeMetadata = true, includeHistory = false) {
89
- const result = exportSpec(spec, format, {
90
- includeMetadata,
91
- includeHistory,
92
- });
93
- // Determine output path with validation
94
- let finalPath;
95
- if (!outputPath) {
96
- // Default to current directory with generated filename
97
- finalPath = result.filename;
98
- }
99
- else {
100
- // Validate and sanitize the output path
101
- try {
102
- finalPath = validateFilePath(outputPath);
103
- }
104
- catch (error) {
105
- throw new Error(`Invalid output path: ${error.message}`);
106
- }
107
- }
108
- // Write the file with error handling
109
- try {
110
- await writeFile(finalPath, result.content);
111
- }
112
- catch (error) {
113
- throw new Error(`Failed to write export file: ${error.message}`);
114
- }
115
- // Display result info
116
- console.log(chalk.blue('\n📄 Export Details:'));
117
- console.log(` Format: ${chalk.cyan(format.toUpperCase())}`);
118
- console.log(` File: ${chalk.cyan(finalPath)}`);
119
- console.log(` Size: ${chalk.cyan(formatBytes(result.size))}`);
120
- console.log();
121
- }
122
- /**
123
- * Export all stakeholder bundles
124
- */
125
- async function exportStakeholderBundles(spec, outputDir) {
126
- const bundle = generateStakeholderBundle(spec);
127
- // Determine output directory with validation
128
- let dir;
129
- if (outputDir) {
130
- try {
131
- dir = validateOutputPath(outputDir);
132
- }
133
- catch (error) {
134
- throw new Error(`Invalid output directory: ${error.message}`);
135
- }
136
- }
137
- else {
138
- dir = join(process.cwd(), 'bundles');
139
- }
140
- // Create directory if needed with error handling
141
- try {
142
- await mkdir(dir, { recursive: true });
143
- }
144
- catch (error) {
145
- throw new Error(`Failed to create output directory: ${error.message}`);
146
- }
147
- // Write each bundle file with error handling
148
- const files = [
149
- { name: 'Executive Summary', result: bundle.executive },
150
- { name: 'Technical Specification', result: bundle.technical },
151
- { name: 'QA Specification', result: bundle.qa },
152
- { name: 'Design Specification', result: bundle.design },
153
- ];
154
- for (const file of files) {
155
- try {
156
- const sanitizedFilename = sanitizeFilename(file.result.filename);
157
- const filePath = join(dir, sanitizedFilename);
158
- await writeFile(filePath, file.result.content);
159
- console.log(chalk.cyan(` ✓ ${file.name}: ${filePath}`));
160
- }
161
- catch (error) {
162
- throw new Error(`Failed to write ${file.name}: ${error.message}`);
163
- }
164
- }
165
- console.log(chalk.blue(`\n📦 Generated ${files.length} stakeholder bundles in: ${dir}`));
166
- console.log();
167
- }
168
- /**
169
- * Format bytes to human-readable string
170
- */
171
- function formatBytes(bytes) {
172
- if (bytes === 0)
173
- return '0 Bytes';
174
- const k = 1024;
175
- const sizes = ['Bytes', 'KB', 'MB', 'GB'];
176
- const i = Math.floor(Math.log(bytes) / Math.log(k));
177
- return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
178
- }
179
- //# sourceMappingURL=export.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Extension management commands
3
- */
4
- import { Command } from 'commander';
5
- export declare const extendCommand: Command;
6
- //# sourceMappingURL=extend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extend.d.ts","sourceRoot":"","sources":["../../src/commands/extend.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SAkMvB,CAAC"}
@@ -1,167 +0,0 @@
1
- /**
2
- * Extension management commands
3
- */
4
- import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import { listExtensions, listEnabledExtensions, enableExtension, disableExtension, getExtension, loadBuiltinExtensions, } from '@specsafe/core';
7
- export const extendCommand = new Command('extend')
8
- .description('Manage SpecSafe extensions')
9
- .addCommand(new Command('list')
10
- .description('List all available extensions')
11
- .option('-e, --enabled-only', 'Show only enabled extensions')
12
- .action(async (options) => {
13
- try {
14
- // Load builtins first
15
- await loadBuiltinExtensions();
16
- const extensions = options.enabledOnly
17
- ? listEnabledExtensions()
18
- : listExtensions();
19
- if (extensions.length === 0) {
20
- console.log(chalk.yellow('No extensions found.'));
21
- return;
22
- }
23
- console.log(chalk.bold('\n📦 Extensions:\n'));
24
- for (const ext of extensions) {
25
- const status = ext.enabled === false
26
- ? chalk.red('disabled')
27
- : chalk.green('enabled');
28
- console.log(chalk.bold(` ${ext.name}`) + ` (${status})`);
29
- console.log(chalk.gray(` ID: ${ext.id}`));
30
- console.log(chalk.gray(` Version: ${ext.version}`));
31
- if (ext.author) {
32
- console.log(chalk.gray(` Author: ${ext.author}`));
33
- }
34
- console.log(` ${ext.description}`);
35
- const hookPhases = Object.keys(ext.hooks);
36
- if (hookPhases.length > 0) {
37
- console.log(chalk.cyan(` Hooks: ${hookPhases.join(', ')}`));
38
- }
39
- console.log();
40
- }
41
- console.log(chalk.gray(`Total: ${extensions.length} extension(s)\n`));
42
- }
43
- catch (error) {
44
- console.error(chalk.red('Failed to list extensions:'), error);
45
- process.exit(1);
46
- }
47
- }))
48
- .addCommand(new Command('enable')
49
- .description('Enable an extension')
50
- .argument('<name>', 'Extension ID or name')
51
- .action(async (name) => {
52
- try {
53
- // Load builtins first
54
- await loadBuiltinExtensions();
55
- // Try to find by ID first
56
- let extension = getExtension(name);
57
- // If not found, search by name
58
- if (!extension) {
59
- const allExtensions = listExtensions();
60
- extension = allExtensions.find((ext) => ext.name.toLowerCase() === name.toLowerCase());
61
- }
62
- if (!extension) {
63
- console.error(chalk.red(`Extension "${name}" not found.`));
64
- console.log(chalk.gray('Run "specsafe extend list" to see available extensions.'));
65
- process.exit(1);
66
- }
67
- const success = enableExtension(extension.id);
68
- if (success) {
69
- console.log(chalk.green(`✓ Enabled extension: ${extension.name}`));
70
- }
71
- else {
72
- console.error(chalk.red(`Failed to enable extension: ${extension.name}`));
73
- process.exit(1);
74
- }
75
- }
76
- catch (error) {
77
- console.error(chalk.red('Failed to enable extension:'), error);
78
- process.exit(1);
79
- }
80
- }))
81
- .addCommand(new Command('disable')
82
- .description('Disable an extension')
83
- .argument('<name>', 'Extension ID or name')
84
- .action(async (name) => {
85
- try {
86
- // Load builtins first
87
- await loadBuiltinExtensions();
88
- // Try to find by ID first
89
- let extension = getExtension(name);
90
- // If not found, search by name
91
- if (!extension) {
92
- const allExtensions = listExtensions();
93
- extension = allExtensions.find((ext) => ext.name.toLowerCase() === name.toLowerCase());
94
- }
95
- if (!extension) {
96
- console.error(chalk.red(`Extension "${name}" not found.`));
97
- console.log(chalk.gray('Run "specsafe extend list" to see available extensions.'));
98
- process.exit(1);
99
- }
100
- const success = disableExtension(extension.id);
101
- if (success) {
102
- console.log(chalk.green(`✓ Disabled extension: ${extension.name}`));
103
- }
104
- else {
105
- console.error(chalk.red(`Failed to disable extension: ${extension.name}`));
106
- process.exit(1);
107
- }
108
- }
109
- catch (error) {
110
- console.error(chalk.red('Failed to disable extension:'), error);
111
- process.exit(1);
112
- }
113
- }))
114
- .addCommand(new Command('info')
115
- .description('Show detailed information about an extension')
116
- .argument('<name>', 'Extension ID or name')
117
- .action(async (name) => {
118
- try {
119
- // Load builtins first
120
- await loadBuiltinExtensions();
121
- // Try to find by ID first
122
- let extension = getExtension(name);
123
- // If not found, search by name
124
- if (!extension) {
125
- const allExtensions = listExtensions();
126
- extension = allExtensions.find((ext) => ext.name.toLowerCase() === name.toLowerCase());
127
- }
128
- if (!extension) {
129
- console.error(chalk.red(`Extension "${name}" not found.`));
130
- console.log(chalk.gray('Run "specsafe extend list" to see available extensions.'));
131
- process.exit(1);
132
- }
133
- console.log();
134
- console.log(chalk.bold(extension.name));
135
- console.log(chalk.gray('─'.repeat(50)));
136
- console.log(chalk.gray(`ID: ${extension.id}`));
137
- console.log(chalk.gray(`Version: ${extension.version}`));
138
- if (extension.author) {
139
- console.log(chalk.gray(`Author: ${extension.author}`));
140
- }
141
- const status = extension.enabled === false
142
- ? chalk.red('disabled')
143
- : chalk.green('enabled');
144
- console.log(chalk.gray(`Status: ${status}`));
145
- console.log();
146
- console.log(extension.description);
147
- console.log();
148
- const hookPhases = Object.keys(extension.hooks);
149
- if (hookPhases.length > 0) {
150
- console.log(chalk.bold('Hooks:'));
151
- for (const phase of hookPhases) {
152
- console.log(chalk.cyan(` • ${phase}`));
153
- }
154
- }
155
- if (extension.config && Object.keys(extension.config).length > 0) {
156
- console.log();
157
- console.log(chalk.bold('Configuration:'));
158
- console.log(JSON.stringify(extension.config, null, 2));
159
- }
160
- console.log();
161
- }
162
- catch (error) {
163
- console.error(chalk.red('Failed to get extension info:'), error);
164
- process.exit(1);
165
- }
166
- }));
167
- //# sourceMappingURL=extend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/commands/extend.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const initCommand: Command;
3
- //# sourceMappingURL=init-old.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-old.d.ts","sourceRoot":"","sources":["../../src/commands/init-old.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,WAAW,SAyJpB,CAAC"}