@specsafe/cli 0.5.0 → 0.7.0

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 (42) 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/constitution.d.ts +3 -0
  6. package/dist/commands/constitution.d.ts.map +1 -0
  7. package/dist/commands/constitution.js +192 -0
  8. package/dist/commands/constitution.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/extend.d.ts +6 -0
  14. package/dist/commands/extend.d.ts.map +1 -0
  15. package/dist/commands/extend.js +167 -0
  16. package/dist/commands/extend.js.map +1 -0
  17. package/dist/commands/memory.d.ts +3 -0
  18. package/dist/commands/memory.d.ts.map +1 -0
  19. package/dist/commands/memory.js +166 -0
  20. package/dist/commands/memory.js.map +1 -0
  21. package/dist/commands/new.d.ts.map +1 -1
  22. package/dist/commands/new.js +66 -1
  23. package/dist/commands/new.js.map +1 -1
  24. package/dist/commands/shard.d.ts +6 -0
  25. package/dist/commands/shard.d.ts.map +1 -0
  26. package/dist/commands/shard.js +199 -0
  27. package/dist/commands/shard.js.map +1 -0
  28. package/dist/commands/test-guide.d.ts +3 -0
  29. package/dist/commands/test-guide.d.ts.map +1 -0
  30. package/dist/commands/test-guide.js +190 -0
  31. package/dist/commands/test-guide.js.map +1 -0
  32. package/dist/commands/test-report.d.ts +3 -0
  33. package/dist/commands/test-report.d.ts.map +1 -0
  34. package/dist/commands/test-report.js +196 -0
  35. package/dist/commands/test-report.js.map +1 -0
  36. package/dist/commands/test-submit.d.ts +6 -0
  37. package/dist/commands/test-submit.d.ts.map +1 -0
  38. package/dist/commands/test-submit.js +236 -0
  39. package/dist/commands/test-submit.js.map +1 -0
  40. package/dist/index.js +21 -0
  41. package/dist/index.js.map +1 -1
  42. package/package.json +3 -3
@@ -0,0 +1,192 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { writeFile, mkdir, readFile } from 'fs/promises';
5
+ import { existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { ConstitutionManager, generateConstitution, generateMinimalConstitution, generateStrictConstitution, BUILTIN_PRINCIPLES } from '@specsafe/core';
8
+ async function loadSpec(specId, cwd = process.cwd()) {
9
+ const specsDir = join(cwd, 'specs');
10
+ const specPath = join(specsDir, `${specId}.json`);
11
+ if (!existsSync(specPath))
12
+ throw new Error(`Spec file not found: ${specPath}`);
13
+ const content = await readFile(specPath, 'utf-8');
14
+ const spec = JSON.parse(content);
15
+ spec.createdAt = new Date(spec.createdAt);
16
+ spec.updatedAt = new Date(spec.updatedAt);
17
+ if (spec.completedAt)
18
+ spec.completedAt = new Date(spec.completedAt);
19
+ return spec;
20
+ }
21
+ export const constitutionCommand = new Command('constitution')
22
+ .description('Manage constitutional governance')
23
+ .addCommand(new Command('init')
24
+ .description('Initialize constitution')
25
+ .option('--minimal', 'Minimal constitution')
26
+ .option('--strict', 'Strict constitution')
27
+ .option('--force', 'Overwrite existing')
28
+ .action(async (options) => {
29
+ const spinner = ora('Initializing...').start();
30
+ try {
31
+ const cwd = process.cwd();
32
+ const specsafeDir = join(cwd, '.specsafe');
33
+ const constitutionPath = join(specsafeDir, 'constitution.md');
34
+ if (existsSync(constitutionPath) && !options.force) {
35
+ spinner.fail(chalk.red('Constitution exists. Use --force'));
36
+ process.exit(1);
37
+ }
38
+ await mkdir(specsafeDir, { recursive: true });
39
+ let projectName = 'My Project';
40
+ try {
41
+ const pkgPath = join(cwd, 'package.json');
42
+ if (existsSync(pkgPath)) {
43
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
44
+ projectName = pkg.name || projectName;
45
+ }
46
+ }
47
+ catch { }
48
+ let content;
49
+ if (options.minimal)
50
+ content = generateMinimalConstitution(projectName);
51
+ else if (options.strict)
52
+ content = generateStrictConstitution(projectName);
53
+ else
54
+ content = generateConstitution({ projectName });
55
+ await writeFile(constitutionPath, content);
56
+ spinner.succeed(chalk.green('Constitution initialized'));
57
+ console.log(chalk.gray(`\n${constitutionPath}`));
58
+ }
59
+ catch (error) {
60
+ spinner.fail(chalk.red(error.message));
61
+ process.exit(1);
62
+ }
63
+ }))
64
+ .addCommand(new Command('list')
65
+ .description('List principles')
66
+ .option('--builtin-only', 'Show built-ins only')
67
+ .action(async (options) => {
68
+ const spinner = ora('Loading...').start();
69
+ try {
70
+ if (options.builtinOnly) {
71
+ spinner.stop();
72
+ console.log(chalk.bold('\nšŸ“‹ Built-in Principles:\n'));
73
+ for (const p of BUILTIN_PRINCIPLES) {
74
+ const lock = p.immutable ? 'šŸ”’' : 'šŸ”“';
75
+ const sev = p.severity === 'error' ? '🚫' : 'āš ļø';
76
+ console.log(`${lock} ${sev} ${chalk.cyan(p.id.padEnd(30))} ${p.name}`);
77
+ }
78
+ return;
79
+ }
80
+ const mgr = new ConstitutionManager();
81
+ await mgr.load({ includeBuiltins: true });
82
+ const principles = mgr.listPrinciples();
83
+ spinner.stop();
84
+ console.log(chalk.bold('\nšŸ“‹ Principles:\n'));
85
+ const errors = principles.filter(p => p.severity === 'error');
86
+ const warnings = principles.filter(p => p.severity === 'warning');
87
+ if (errors.length > 0) {
88
+ console.log(chalk.bold('🚫 Errors:'));
89
+ for (const p of errors) {
90
+ const lock = p.immutable ? 'šŸ”’' : 'šŸ”“';
91
+ console.log(` ${lock} ${chalk.red(p.id.padEnd(30))} ${p.name}`);
92
+ }
93
+ console.log();
94
+ }
95
+ if (warnings.length > 0) {
96
+ console.log(chalk.bold('āš ļø Warnings:'));
97
+ for (const p of warnings) {
98
+ const lock = p.immutable ? 'šŸ”’' : 'šŸ”“';
99
+ console.log(` ${lock} ${chalk.yellow(p.id.padEnd(30))} ${p.name}`);
100
+ }
101
+ console.log();
102
+ }
103
+ console.log(chalk.gray(`Total: ${principles.length}`));
104
+ }
105
+ catch (error) {
106
+ spinner.fail(chalk.red(error.message));
107
+ process.exit(1);
108
+ }
109
+ }))
110
+ .addCommand(new Command('check')
111
+ .description('Check spec governance')
112
+ .argument('<spec-id>', 'Spec ID')
113
+ .action(async (specId) => {
114
+ const spinner = ora('Checking...').start();
115
+ try {
116
+ const spec = await loadSpec(specId);
117
+ const mgr = new ConstitutionManager();
118
+ await mgr.load({ includeBuiltins: true });
119
+ const results = await mgr.validate(spec);
120
+ spinner.stop();
121
+ console.log(chalk.bold(`\nšŸ” ${spec.name}\n`));
122
+ let totalErrors = 0;
123
+ let totalWarnings = 0;
124
+ for (const result of results) {
125
+ const icon = result.passed ? 'āœ…' : 'āŒ';
126
+ const color = result.passed ? chalk.green : chalk.red;
127
+ console.log(`${icon} ${color(result.gate.name)}`);
128
+ if (result.violations.length > 0) {
129
+ for (const v of result.violations) {
130
+ const vIcon = v.severity === 'error' ? '🚫' : 'āš ļø';
131
+ const vColor = v.severity === 'error' ? chalk.red : chalk.yellow;
132
+ console.log(` ${vIcon} ${vColor(v.principle.name)}`);
133
+ console.log(` ${chalk.gray(v.message)}`);
134
+ }
135
+ }
136
+ totalErrors += result.violations.filter(v => v.severity === 'error').length;
137
+ totalWarnings += result.violations.filter(v => v.severity === 'warning').length;
138
+ }
139
+ console.log(chalk.bold('\nSummary:'));
140
+ console.log(chalk.gray(`Gates: ${results.length}`));
141
+ if (totalErrors > 0)
142
+ console.log(chalk.red(`Errors: ${totalErrors}`));
143
+ if (totalWarnings > 0)
144
+ console.log(chalk.yellow(`Warnings: ${totalWarnings}`));
145
+ if (totalErrors === 0) {
146
+ console.log(chalk.green('\n✨ Passed!'));
147
+ }
148
+ else {
149
+ console.log(chalk.red('\nāŒ Failed'));
150
+ process.exit(1);
151
+ }
152
+ }
153
+ catch (error) {
154
+ spinner.fail(chalk.red(error.message));
155
+ process.exit(1);
156
+ }
157
+ }))
158
+ .addCommand(new Command('add')
159
+ .description('Add custom principle')
160
+ .argument('<id>', 'Principle ID')
161
+ .requiredOption('--name <name>', 'Name')
162
+ .requiredOption('--description <desc>', 'Description')
163
+ .option('--severity <level>', 'error or warning', 'warning')
164
+ .option('--immutable', 'Immutable', false)
165
+ .action(async (id, options) => {
166
+ const spinner = ora('Adding...').start();
167
+ try {
168
+ if (options.severity !== 'error' && options.severity !== 'warning') {
169
+ throw new Error('Severity must be error or warning');
170
+ }
171
+ const mgr = new ConstitutionManager();
172
+ await mgr.load({ includeBuiltins: false });
173
+ const principle = {
174
+ id,
175
+ name: options.name,
176
+ description: options.description,
177
+ severity: options.severity,
178
+ immutable: options.immutable,
179
+ metadata: { createdAt: new Date() },
180
+ };
181
+ mgr.addPrinciple(principle);
182
+ spinner.text = 'Saving...';
183
+ await mgr.save();
184
+ spinner.succeed(chalk.green('Added and saved'));
185
+ console.log(chalk.gray(`\n${principle.id}: ${principle.name}`));
186
+ }
187
+ catch (error) {
188
+ spinner.fail(chalk.red(error.message));
189
+ process.exit(1);
190
+ }
191
+ }));
192
+ //# sourceMappingURL=constitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution.js","sourceRoot":"","sources":["../../src/commands/constitution.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"}
@@ -0,0 +1,179 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Extension management commands
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const extendCommand: Command;
6
+ //# sourceMappingURL=extend.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,167 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/commands/extend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const memoryCommand: Command;
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAwLvB,CAAC"}