@specsafe/cli 0.6.0 → 0.7.1

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 (38) hide show
  1. package/dist/commands/capsule.d.ts +8 -0
  2. package/dist/commands/capsule.d.ts.map +1 -0
  3. package/dist/commands/capsule.js +466 -0
  4. package/dist/commands/capsule.js.map +1 -0
  5. package/dist/commands/create.d.ts +10 -0
  6. package/dist/commands/create.d.ts.map +1 -0
  7. package/dist/commands/create.js +120 -0
  8. package/dist/commands/create.js.map +1 -0
  9. package/dist/commands/export.d.ts +7 -0
  10. package/dist/commands/export.d.ts.map +1 -0
  11. package/dist/commands/export.js +179 -0
  12. package/dist/commands/export.js.map +1 -0
  13. package/dist/commands/memory.d.ts +3 -0
  14. package/dist/commands/memory.d.ts.map +1 -0
  15. package/dist/commands/memory.js +166 -0
  16. package/dist/commands/memory.js.map +1 -0
  17. package/dist/commands/new.d.ts.map +1 -1
  18. package/dist/commands/new.js +65 -1
  19. package/dist/commands/new.js.map +1 -1
  20. package/dist/commands/shard.d.ts +6 -0
  21. package/dist/commands/shard.d.ts.map +1 -0
  22. package/dist/commands/shard.js +199 -0
  23. package/dist/commands/shard.js.map +1 -0
  24. package/dist/commands/test-guide.d.ts +3 -0
  25. package/dist/commands/test-guide.d.ts.map +1 -0
  26. package/dist/commands/test-guide.js +190 -0
  27. package/dist/commands/test-guide.js.map +1 -0
  28. package/dist/commands/test-report.d.ts +3 -0
  29. package/dist/commands/test-report.d.ts.map +1 -0
  30. package/dist/commands/test-report.js +196 -0
  31. package/dist/commands/test-report.js.map +1 -0
  32. package/dist/commands/test-submit.d.ts +6 -0
  33. package/dist/commands/test-submit.d.ts.map +1 -0
  34. package/dist/commands/test-submit.js +236 -0
  35. package/dist/commands/test-submit.js.map +1 -0
  36. package/dist/index.js +21 -1
  37. package/dist/index.js.map +1 -1
  38. package/package.json +3 -3
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Capsule Command
4
+ * Manage story context capsules for specs
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const capsuleCommand: Command;
8
+ //# sourceMappingURL=capsule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/commands/capsule.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,cAAc,SAQzB,CAAC"}
@@ -0,0 +1,466 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Capsule Command
4
+ * Manage story context capsules for specs
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import { input, select, confirm } from '@inquirer/prompts';
9
+ import { writeFile } from 'fs/promises';
10
+ import { CapsuleManager, getTemplate, getTemplateChoices, isValidTemplateType, formatContent, TEMPLATE_NAMES, validateSpecId, validateTitle, validateAuthor, validateTags, } from '@specsafe/core';
11
+ export const capsuleCommand = new Command('capsule')
12
+ .description('Manage story context capsules for specs')
13
+ .addHelpText('after', `
14
+ Examples:
15
+ specsafe capsule add specs/checkout.md --type user-story
16
+ specsafe capsule list specs/checkout.md
17
+ specsafe capsule show specs/checkout.md capsule-abc123
18
+ specsafe capsule export specs/checkout.md
19
+ `);
20
+ // Add subcommand
21
+ capsuleCommand
22
+ .command('add')
23
+ .description('Add a new context capsule to a spec')
24
+ .argument('<spec>', 'Spec ID or path (e.g., specs/checkout.md)')
25
+ .option('-t, --type <type>', 'Capsule type (user-story, technical-context, business-justification, discovery-note)')
26
+ .option('--title <title>', 'Capsule title')
27
+ .option('--author <author>', 'Author name')
28
+ .action(async (spec, options) => {
29
+ try {
30
+ // Validate spec ID early to catch errors
31
+ try {
32
+ validateSpecId(spec);
33
+ }
34
+ catch (error) {
35
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
36
+ process.exit(1);
37
+ }
38
+ const manager = new CapsuleManager();
39
+ // Determine capsule type
40
+ let type;
41
+ if (options.type) {
42
+ if (!isValidTemplateType(options.type)) {
43
+ console.error(chalk.red(`Error: Invalid capsule type: ${options.type}`));
44
+ console.log(chalk.gray(`\nValid types: user-story, technical-context, business-justification, discovery-note`));
45
+ process.exit(1);
46
+ }
47
+ type = options.type;
48
+ }
49
+ else {
50
+ type = await select({
51
+ message: 'Select capsule type:',
52
+ choices: getTemplateChoices(),
53
+ });
54
+ }
55
+ const template = getTemplate(type);
56
+ console.log(chalk.blue(`\n${template.name}`));
57
+ console.log(chalk.gray(template.description));
58
+ console.log('');
59
+ // Get title with validation
60
+ let title = options.title || '';
61
+ if (!title) {
62
+ title = await input({
63
+ message: 'Title:',
64
+ validate: (value) => {
65
+ try {
66
+ validateTitle(value);
67
+ return true;
68
+ }
69
+ catch (error) {
70
+ return error instanceof Error ? error.message : 'Invalid title';
71
+ }
72
+ },
73
+ });
74
+ }
75
+ else {
76
+ try {
77
+ title = validateTitle(title);
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid title'}`));
81
+ process.exit(1);
82
+ }
83
+ }
84
+ // Get author with validation
85
+ let author = options.author || '';
86
+ if (!author) {
87
+ author = await input({
88
+ message: 'Author:',
89
+ default: process.env.USER || 'unknown',
90
+ validate: (value) => {
91
+ try {
92
+ validateAuthor(value);
93
+ return true;
94
+ }
95
+ catch (error) {
96
+ return error instanceof Error ? error.message : 'Invalid author';
97
+ }
98
+ },
99
+ });
100
+ }
101
+ else {
102
+ try {
103
+ author = validateAuthor(author);
104
+ }
105
+ catch (error) {
106
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid author'}`));
107
+ process.exit(1);
108
+ }
109
+ }
110
+ // Get content from template fields
111
+ const fields = {};
112
+ for (const field of template.fields) {
113
+ const value = await input({
114
+ message: field.label + ':',
115
+ default: field.placeholder || '',
116
+ });
117
+ fields[field.name] = value;
118
+ }
119
+ // Get tags (optional)
120
+ const tagInput = await input({
121
+ message: 'Tags (comma-separated, optional):',
122
+ default: '',
123
+ });
124
+ const tagsRaw = tagInput
125
+ .split(',')
126
+ .map((t) => t.trim())
127
+ .filter((t) => t.length > 0);
128
+ // Validate tags
129
+ let tags = [];
130
+ try {
131
+ tags = validateTags(tagsRaw);
132
+ }
133
+ catch (error) {
134
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid tags'}`));
135
+ process.exit(1);
136
+ }
137
+ // Confirm
138
+ console.log('');
139
+ console.log(chalk.blue('Preview:'));
140
+ console.log(chalk.cyan(`Type: ${TEMPLATE_NAMES[type]}`));
141
+ console.log(chalk.cyan(`Title: ${title}`));
142
+ console.log(chalk.cyan(`Author: ${author}`));
143
+ if (tags.length > 0) {
144
+ console.log(chalk.cyan(`Tags: ${tags.join(', ')}`));
145
+ }
146
+ console.log('');
147
+ const confirmed = await confirm({
148
+ message: 'Create this capsule?',
149
+ default: true,
150
+ });
151
+ if (!confirmed) {
152
+ console.log(chalk.yellow('Cancelled.'));
153
+ return;
154
+ }
155
+ // Create capsule
156
+ const content = formatContent(type, fields);
157
+ const capsule = await manager.add(spec, {
158
+ type,
159
+ title,
160
+ content,
161
+ author,
162
+ tags,
163
+ });
164
+ console.log('');
165
+ console.log(chalk.green(`āœ“ Created capsule: ${capsule.id}`));
166
+ }
167
+ catch (error) {
168
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to create capsule'}`));
169
+ process.exit(1);
170
+ }
171
+ });
172
+ // List subcommand
173
+ capsuleCommand
174
+ .command('list')
175
+ .description('List all capsules for a spec')
176
+ .argument('<spec>', 'Spec ID or path (e.g., specs/checkout.md)')
177
+ .option('-t, --type <types...>', 'Filter by type(s)')
178
+ .option('--tag <tags...>', 'Filter by tag(s)')
179
+ .option('--author <author>', 'Filter by author')
180
+ .action(async (spec, options) => {
181
+ try {
182
+ // Validate spec ID
183
+ try {
184
+ validateSpecId(spec);
185
+ }
186
+ catch (error) {
187
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
188
+ process.exit(1);
189
+ }
190
+ const manager = new CapsuleManager();
191
+ // Validate types if provided
192
+ if (options.type) {
193
+ for (const t of options.type) {
194
+ if (!isValidTemplateType(t)) {
195
+ console.error(chalk.red(`Error: Invalid capsule type: ${t}`));
196
+ process.exit(1);
197
+ }
198
+ }
199
+ }
200
+ const filter = {
201
+ types: options.type,
202
+ tags: options.tag,
203
+ author: options.author,
204
+ };
205
+ const capsules = await manager.list(spec, filter);
206
+ if (capsules.length === 0) {
207
+ console.log(chalk.yellow('No capsules found for this spec.'));
208
+ return;
209
+ }
210
+ console.log('');
211
+ console.log(chalk.blue(`Capsules for ${spec}:`));
212
+ console.log(chalk.gray(`Total: ${capsules.length}`));
213
+ console.log('');
214
+ // Group by type
215
+ const byType = {};
216
+ for (const capsule of capsules) {
217
+ if (!byType[capsule.type]) {
218
+ byType[capsule.type] = [];
219
+ }
220
+ byType[capsule.type].push(capsule);
221
+ }
222
+ for (const [type, typeCapsules] of Object.entries(byType)) {
223
+ console.log(chalk.cyan(`\n[${type}]`));
224
+ for (const capsule of typeCapsules) {
225
+ console.log(` ${chalk.white(capsule.title)}`);
226
+ console.log(` ${chalk.gray(capsule.id)}`);
227
+ console.log(` ${chalk.gray(`by ${capsule.author} on ${new Date(capsule.createdAt).toLocaleDateString()}`)}`);
228
+ if (capsule.tags.length > 0) {
229
+ console.log(` ${chalk.gray(`tags: ${capsule.tags.join(', ')}`)}`);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ catch (error) {
235
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to list capsules'}`));
236
+ process.exit(1);
237
+ }
238
+ });
239
+ // Show subcommand
240
+ capsuleCommand
241
+ .command('show')
242
+ .description('View a specific capsule')
243
+ .argument('<spec>', 'Spec ID or path')
244
+ .argument('<capsule-id>', 'Capsule ID')
245
+ .action(async (spec, capsuleId) => {
246
+ try {
247
+ // Validate spec ID
248
+ try {
249
+ validateSpecId(spec);
250
+ }
251
+ catch (error) {
252
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
253
+ process.exit(1);
254
+ }
255
+ // Validate capsule ID format
256
+ if (!capsuleId || typeof capsuleId !== 'string' || capsuleId.length === 0) {
257
+ console.error(chalk.red('Error: Invalid capsule ID'));
258
+ process.exit(1);
259
+ }
260
+ const manager = new CapsuleManager();
261
+ const capsule = await manager.get(spec, capsuleId);
262
+ if (!capsule) {
263
+ console.error(chalk.red(`Error: Capsule not found: ${capsuleId}`));
264
+ process.exit(1);
265
+ }
266
+ console.log('');
267
+ console.log(chalk.cyan.bold(capsule.title));
268
+ console.log(chalk.gray('─'.repeat(50)));
269
+ console.log(`${chalk.blue('Type:')} ${TEMPLATE_NAMES[capsule.type]}`);
270
+ console.log(`${chalk.blue('ID:')} ${capsule.id}`);
271
+ console.log(`${chalk.blue('Author:')} ${capsule.author}`);
272
+ console.log(`${chalk.blue('Created:')} ${new Date(capsule.createdAt).toLocaleString()}`);
273
+ if (capsule.tags.length > 0) {
274
+ console.log(`${chalk.blue('Tags:')} ${capsule.tags.join(', ')}`);
275
+ }
276
+ console.log('');
277
+ console.log(capsule.content);
278
+ console.log('');
279
+ }
280
+ catch (error) {
281
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to show capsule'}`));
282
+ process.exit(1);
283
+ }
284
+ });
285
+ // Remove subcommand
286
+ capsuleCommand
287
+ .command('remove')
288
+ .description('Remove a capsule')
289
+ .argument('<spec>', 'Spec ID or path')
290
+ .argument('<capsule-id>', 'Capsule ID')
291
+ .option('-y, --yes', 'Skip confirmation')
292
+ .action(async (spec, capsuleId, options) => {
293
+ try {
294
+ // Validate spec ID
295
+ try {
296
+ validateSpecId(spec);
297
+ }
298
+ catch (error) {
299
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
300
+ process.exit(1);
301
+ }
302
+ // Validate capsule ID format
303
+ if (!capsuleId || typeof capsuleId !== 'string' || capsuleId.length === 0) {
304
+ console.error(chalk.red('Error: Invalid capsule ID'));
305
+ process.exit(1);
306
+ }
307
+ const manager = new CapsuleManager();
308
+ const capsule = await manager.get(spec, capsuleId);
309
+ if (!capsule) {
310
+ console.error(chalk.red(`Error: Capsule not found: ${capsuleId}`));
311
+ process.exit(1);
312
+ }
313
+ let confirmed = options.yes;
314
+ if (!confirmed) {
315
+ confirmed = await confirm({
316
+ message: `Delete "${capsule.title}"?`,
317
+ default: false,
318
+ });
319
+ }
320
+ if (!confirmed) {
321
+ console.log(chalk.yellow('Cancelled.'));
322
+ return;
323
+ }
324
+ const removed = await manager.remove(spec, capsuleId);
325
+ if (removed) {
326
+ console.log(chalk.green(`āœ“ Removed capsule: ${capsuleId}`));
327
+ }
328
+ else {
329
+ console.error(chalk.red(`Failed to remove capsule: ${capsuleId}`));
330
+ process.exit(1);
331
+ }
332
+ }
333
+ catch (error) {
334
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to remove capsule'}`));
335
+ process.exit(1);
336
+ }
337
+ });
338
+ // Export subcommand
339
+ capsuleCommand
340
+ .command('export')
341
+ .description('Export capsules to markdown')
342
+ .argument('<spec>', 'Spec ID or path')
343
+ .option('-o, --output <file>', 'Output file (default: prints to stdout)')
344
+ .action(async (spec, options) => {
345
+ try {
346
+ // Validate spec ID
347
+ try {
348
+ validateSpecId(spec);
349
+ }
350
+ catch (error) {
351
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
352
+ process.exit(1);
353
+ }
354
+ // Validate output path if provided
355
+ if (options.output) {
356
+ if (typeof options.output !== 'string' || options.output.length === 0) {
357
+ console.error(chalk.red('Error: Invalid output path'));
358
+ process.exit(1);
359
+ }
360
+ // Security: Prevent path traversal in output path
361
+ const normalized = options.output.replace(/\\/g, '/');
362
+ if (normalized.includes('..')) {
363
+ console.error(chalk.red('Error: Output path cannot contain path traversal sequences'));
364
+ process.exit(1);
365
+ }
366
+ }
367
+ const manager = new CapsuleManager();
368
+ const markdown = await manager.exportToMarkdown(spec);
369
+ if (options.output) {
370
+ await writeFile(options.output, markdown, 'utf-8');
371
+ console.log(chalk.green(`āœ“ Exported to ${options.output}`));
372
+ }
373
+ else {
374
+ console.log(markdown);
375
+ }
376
+ }
377
+ catch (error) {
378
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to export capsules'}`));
379
+ process.exit(1);
380
+ }
381
+ });
382
+ // Edit subcommand
383
+ capsuleCommand
384
+ .command('edit')
385
+ .description('Edit an existing capsule')
386
+ .argument('<spec>', 'Spec ID or path')
387
+ .argument('<capsule-id>', 'Capsule ID')
388
+ .action(async (spec, capsuleId) => {
389
+ try {
390
+ // Validate spec ID
391
+ try {
392
+ validateSpecId(spec);
393
+ }
394
+ catch (error) {
395
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid spec ID'}`));
396
+ process.exit(1);
397
+ }
398
+ // Validate capsule ID format
399
+ if (!capsuleId || typeof capsuleId !== 'string' || capsuleId.length === 0) {
400
+ console.error(chalk.red('Error: Invalid capsule ID'));
401
+ process.exit(1);
402
+ }
403
+ const manager = new CapsuleManager();
404
+ const capsule = await manager.get(spec, capsuleId);
405
+ if (!capsule) {
406
+ console.error(chalk.red(`Error: Capsule not found: ${capsuleId}`));
407
+ process.exit(1);
408
+ }
409
+ console.log(chalk.blue('Editing capsule (leave blank to keep current value)'));
410
+ console.log('');
411
+ const titleInput = await input({
412
+ message: 'Title:',
413
+ default: capsule.title,
414
+ });
415
+ const title = titleInput || capsule.title;
416
+ const authorInput = await input({
417
+ message: 'Author:',
418
+ default: capsule.author,
419
+ });
420
+ const author = authorInput || capsule.author;
421
+ const tagInput = await input({
422
+ message: 'Tags (comma-separated):',
423
+ default: capsule.tags.join(', '),
424
+ });
425
+ const tagsRaw = tagInput
426
+ .split(',')
427
+ .map((t) => t.trim())
428
+ .filter((t) => t.length > 0);
429
+ // Validate inputs
430
+ let validatedTitle;
431
+ let validatedAuthor;
432
+ let validatedTags;
433
+ try {
434
+ validatedTitle = validateTitle(title);
435
+ validatedAuthor = validateAuthor(author);
436
+ validatedTags = validateTags(tagsRaw.length > 0 ? tagsRaw : capsule.tags);
437
+ }
438
+ catch (error) {
439
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Invalid input'}`));
440
+ process.exit(1);
441
+ }
442
+ const contentInput = await input({
443
+ message: 'Content:',
444
+ default: capsule.content,
445
+ });
446
+ const content = contentInput || capsule.content;
447
+ const updated = await manager.update(spec, capsuleId, {
448
+ title: validatedTitle,
449
+ author: validatedAuthor,
450
+ tags: validatedTags,
451
+ content,
452
+ });
453
+ if (updated) {
454
+ console.log(chalk.green(`āœ“ Updated capsule: ${capsuleId}`));
455
+ }
456
+ else {
457
+ console.error(chalk.red(`Failed to update capsule: ${capsuleId}`));
458
+ process.exit(1);
459
+ }
460
+ }
461
+ catch (error) {
462
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Failed to edit capsule'}`));
463
+ process.exit(1);
464
+ }
465
+ });
466
+ //# sourceMappingURL=capsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/commands/capsule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Create Command
3
+ * Interactive spec creation using the elicitation system
4
+ */
5
+ import { Command } from 'commander';
6
+ /**
7
+ * Generate default output path
8
+ */
9
+ export declare const createCommand: Command;
10
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2EpC;;GAEG;AAEH,eAAO,MAAM,aAAa,SA0EvB,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Create Command
3
+ * Interactive spec creation using the elicitation system
4
+ */
5
+ import { Command } from 'commander';
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { writeFile, mkdir } from 'fs/promises';
9
+ import { dirname, resolve } from 'path';
10
+ import { ElicitationEngine, quickFlow, fullFlow, earsFlow, generateSpec, defaultOutputPath, } from '@specsafe/core';
11
+ import { input, select, editor, confirm, checkbox } from '@inquirer/prompts';
12
+ /**
13
+ * Prompt the user for a single elicitation step
14
+ */
15
+ async function promptStep(step) {
16
+ const message = step.prompt;
17
+ switch (step.type) {
18
+ case 'text':
19
+ // Use editor for longer text fields (requirements, descriptions)
20
+ if (step.id.includes('requirements') ||
21
+ step.id.includes('description') ||
22
+ step.id.includes('criteria') ||
23
+ step.id.includes('considerations') ||
24
+ step.id.includes('risks') ||
25
+ step.id.includes('dependencies')) {
26
+ return editor({
27
+ message,
28
+ default: step.default,
29
+ });
30
+ }
31
+ return input({
32
+ message,
33
+ default: step.default,
34
+ required: step.required ?? false,
35
+ });
36
+ case 'choice':
37
+ return select({
38
+ message,
39
+ choices: (step.choices ?? []).map((c) => ({ name: c, value: c })),
40
+ default: step.default,
41
+ });
42
+ case 'multi-choice':
43
+ return checkbox({
44
+ message,
45
+ choices: (step.choices ?? []).map((c) => ({ name: c, value: c })),
46
+ });
47
+ case 'confirm':
48
+ return confirm({
49
+ message,
50
+ default: step.default ?? true,
51
+ });
52
+ case 'conditional':
53
+ // Conditional steps are handled by the engine; prompt as text
54
+ return input({
55
+ message,
56
+ default: step.default,
57
+ });
58
+ default:
59
+ return input({ message, default: step.default });
60
+ }
61
+ }
62
+ /**
63
+ * Generate default output path
64
+ */
65
+ export const createCommand = new Command('create')
66
+ .description('Create a new spec via interactive elicitation')
67
+ .option('--quick', 'Use quick flow (fewer questions)')
68
+ .option('--ears', 'Use EARS flow (structured requirements)')
69
+ .option('-o, --output <path>', 'Output file path')
70
+ .action(async (options) => {
71
+ console.log(chalk.blue('\n🧠 SpecSafe Interactive Spec Creation\n'));
72
+ // Select flow
73
+ let flow = fullFlow;
74
+ let flowLabel = 'full';
75
+ if (options.quick) {
76
+ flow = quickFlow;
77
+ flowLabel = 'quick';
78
+ }
79
+ else if (options.ears) {
80
+ flow = earsFlow;
81
+ flowLabel = 'EARS';
82
+ }
83
+ console.log(chalk.gray(`Using ${flowLabel} flow: ${flow.description}\n`));
84
+ // Run elicitation
85
+ const engine = new ElicitationEngine(flow);
86
+ let step = engine.start();
87
+ while (step) {
88
+ try {
89
+ const answer = await promptStep(step);
90
+ step = engine.answer(step.id, answer);
91
+ }
92
+ catch (err) {
93
+ // Handle validation errors — re-prompt
94
+ if (err.message?.includes('required') || err.message?.includes('Validation')) {
95
+ console.log(chalk.red(` ⚠ ${err.message}`));
96
+ continue;
97
+ }
98
+ throw err;
99
+ }
100
+ }
101
+ // Generate spec
102
+ const spinner = ora('Generating specification...').start();
103
+ const result = engine.getResult();
104
+ const spec = generateSpec(result);
105
+ // Determine output path
106
+ const outputPath = resolve(options.output ?? defaultOutputPath());
107
+ try {
108
+ // Ensure directory exists
109
+ await mkdir(dirname(outputPath), { recursive: true });
110
+ // Write spec
111
+ await writeFile(outputPath, spec, 'utf-8');
112
+ }
113
+ catch (err) {
114
+ spinner.fail(chalk.red(`Failed to write spec to ${chalk.bold(outputPath)}`));
115
+ throw err;
116
+ }
117
+ spinner.succeed(chalk.green(`Spec written to ${chalk.bold(outputPath)}`));
118
+ console.log(chalk.gray(`\n Flow: ${flowLabel} | Steps completed: ${Object.keys(result.answers).length} | Skipped: ${result.metadata.skipped.length}\n`));
119
+ });
120
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}