@specsafe/cli 0.3.6 → 0.5.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 (74) hide show
  1. package/dist/commands/apply.d.ts +3 -0
  2. package/dist/commands/apply.d.ts.map +1 -0
  3. package/dist/commands/apply.js +182 -0
  4. package/dist/commands/apply.js.map +1 -0
  5. package/dist/commands/complete.d.ts.map +1 -1
  6. package/dist/commands/complete.js +4 -1
  7. package/dist/commands/complete.js.map +1 -1
  8. package/dist/commands/delta.d.ts +3 -0
  9. package/dist/commands/delta.d.ts.map +1 -0
  10. package/dist/commands/delta.js +82 -0
  11. package/dist/commands/delta.js.map +1 -0
  12. package/dist/commands/diff.d.ts +3 -0
  13. package/dist/commands/diff.d.ts.map +1 -0
  14. package/dist/commands/diff.js +102 -0
  15. package/dist/commands/diff.js.map +1 -0
  16. package/dist/commands/done.d.ts +3 -0
  17. package/dist/commands/done.d.ts.map +1 -0
  18. package/dist/commands/done.js +237 -0
  19. package/dist/commands/done.js.map +1 -0
  20. package/dist/commands/explore.d.ts +3 -0
  21. package/dist/commands/explore.d.ts.map +1 -0
  22. package/dist/commands/explore.js +236 -0
  23. package/dist/commands/explore.js.map +1 -0
  24. package/dist/commands/init-old.d.ts +3 -0
  25. package/dist/commands/init-old.d.ts.map +1 -0
  26. package/dist/commands/init-old.js +146 -0
  27. package/dist/commands/init-old.js.map +1 -0
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +195 -43
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/new.d.ts.map +1 -1
  32. package/dist/commands/new.js +332 -29
  33. package/dist/commands/new.js.map +1 -1
  34. package/dist/commands/qa.d.ts.map +1 -1
  35. package/dist/commands/qa.js +37 -1
  36. package/dist/commands/qa.js.map +1 -1
  37. package/dist/commands/rules.d.ts.map +1 -1
  38. package/dist/commands/rules.js +182 -97
  39. package/dist/commands/rules.js.map +1 -1
  40. package/dist/commands/spec.d.ts.map +1 -1
  41. package/dist/commands/spec.js +257 -25
  42. package/dist/commands/spec.js.map +1 -1
  43. package/dist/commands/test-apply.d.ts +3 -0
  44. package/dist/commands/test-apply.d.ts.map +1 -0
  45. package/dist/commands/test-apply.js +228 -0
  46. package/dist/commands/test-apply.js.map +1 -0
  47. package/dist/commands/test-create.d.ts +3 -0
  48. package/dist/commands/test-create.d.ts.map +1 -0
  49. package/dist/commands/{test.js → test-create.js} +79 -30
  50. package/dist/commands/test-create.js.map +1 -0
  51. package/dist/commands/verify.d.ts +3 -0
  52. package/dist/commands/verify.d.ts.map +1 -0
  53. package/dist/commands/verify.js +288 -0
  54. package/dist/commands/verify.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +58 -6
  58. package/dist/index.js.map +1 -1
  59. package/dist/utils/generateToolConfig.d.ts +1 -1
  60. package/dist/utils/generateToolConfig.d.ts.map +1 -1
  61. package/dist/utils/generateToolConfig.js +980 -209
  62. package/dist/utils/generateToolConfig.js.map +1 -1
  63. package/dist/utils/testRunner.d.ts +39 -0
  64. package/dist/utils/testRunner.d.ts.map +1 -0
  65. package/dist/utils/testRunner.js +325 -0
  66. package/dist/utils/testRunner.js.map +1 -0
  67. package/package.json +3 -3
  68. package/dist/commands/code.d.ts +0 -3
  69. package/dist/commands/code.d.ts.map +0 -1
  70. package/dist/commands/code.js +0 -53
  71. package/dist/commands/code.js.map +0 -1
  72. package/dist/commands/test.d.ts +0 -3
  73. package/dist/commands/test.d.ts.map +0 -1
  74. package/dist/commands/test.js.map +0 -1
@@ -0,0 +1,146 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { writeFile, mkdir } from 'fs/promises';
5
+ import { ProjectTracker } from '@specsafe/core';
6
+ import { checkbox, select, confirm, input } from '@inquirer/prompts';
7
+ import { detectInstalledTools, availableTools } from '../utils/detectTools.js';
8
+ import { generateToolConfig, generateGitHooks } from '../utils/generateToolConfig.js';
9
+ export const initCommand = new Command('init')
10
+ .description('Initialize a new SpecSafe project')
11
+ .argument('[name]', 'Project name', 'my-project')
12
+ .action(async (defaultName) => {
13
+ const spinner = ora('Initializing SpecSafe project...').start();
14
+ try {
15
+ // Interactive prompts for project name
16
+ spinner.stop();
17
+ const name = await input({
18
+ message: 'Project name:',
19
+ default: defaultName,
20
+ });
21
+ // 1. Detect existing tools
22
+ const detectedTools = detectInstalledTools();
23
+ // 2. Prompt user to confirm/select tools
24
+ const toolChoices = availableTools.map((tool) => ({
25
+ name: tool.displayName + (detectedTools.includes(tool.name) ? ' (detected)' : ''),
26
+ value: tool.name,
27
+ checked: detectedTools.includes(tool.name),
28
+ }));
29
+ const selectedTools = await checkbox({
30
+ message: 'Which AI coding assistants do you use?',
31
+ choices: toolChoices,
32
+ });
33
+ // 3. Prompt for test framework
34
+ const testFramework = await select({
35
+ message: 'Select testing framework:',
36
+ choices: [
37
+ { name: 'Vitest (recommended)', value: 'vitest' },
38
+ { name: 'Jest', value: 'jest' },
39
+ { name: 'Playwright (E2E)', value: 'playwright' },
40
+ ],
41
+ default: 'vitest',
42
+ });
43
+ // 4. Prompt for git hooks
44
+ const useGitHooks = await confirm({
45
+ message: 'Enable git hooks for spec validation?',
46
+ default: true,
47
+ });
48
+ spinner.start('Creating project structure...');
49
+ // Create directory structure
50
+ await mkdir('specs/active', { recursive: true });
51
+ await mkdir('specs/completed', { recursive: true });
52
+ await mkdir('specs/archive', { recursive: true });
53
+ await mkdir('src', { recursive: true });
54
+ await mkdir('tests', { recursive: true });
55
+ // Create PROJECT_STATE.md
56
+ const tracker = new ProjectTracker(process.cwd());
57
+ await tracker.initialize(name);
58
+ // Create spec template
59
+ const template = `# Spec Template
60
+
61
+ ## Metadata
62
+ - **ID**: SPEC-{YYYYMMDD}-{NNN}
63
+ - **Status**: draft
64
+ - **Priority**: P1
65
+
66
+ ## 1. Purpose (WHY)
67
+
68
+ ## 2. Scope (WHAT)
69
+ ### In Scope
70
+ -
71
+
72
+ ### Out of Scope
73
+ -
74
+
75
+ ## 3. Requirements
76
+ | ID | Requirement | Priority | Acceptance Criteria |
77
+ |----|-------------|----------|---------------------|
78
+ | | | | |
79
+
80
+ ## 4. Technical Approach (HOW)
81
+
82
+ ## 5. Test Strategy
83
+
84
+ ## 6. Implementation Plan
85
+
86
+ ## 7. Success Criteria
87
+ - [ ]
88
+
89
+ ## 8. Risks & Mitigations
90
+
91
+ ## 9. Notes & References
92
+ `;
93
+ await writeFile('specs/template.md', template);
94
+ // Create config file with selected tools
95
+ const toolsConfig = {};
96
+ for (const tool of selectedTools) {
97
+ toolsConfig[tool] = { enabled: true };
98
+ }
99
+ const config = {
100
+ project: name,
101
+ version: '1.0.0',
102
+ stages: ['spec', 'test', 'code', 'qa', 'complete'],
103
+ testFramework,
104
+ language: 'typescript',
105
+ tools: toolsConfig,
106
+ gitHooks: {
107
+ enabled: useGitHooks,
108
+ },
109
+ };
110
+ await writeFile('specsafe.config.json', JSON.stringify(config, null, 2));
111
+ spinner.text = 'Generating tool configurations...';
112
+ // Generate tool configs for selected tools
113
+ for (const tool of selectedTools) {
114
+ await generateToolConfig(tool, '.');
115
+ }
116
+ // Generate git hooks if enabled
117
+ if (useGitHooks) {
118
+ await generateGitHooks('.');
119
+ }
120
+ spinner.succeed(chalk.green(`Initialized SpecSafe project: ${name}`));
121
+ console.log('\n' + chalk.blue('Generated configurations:'));
122
+ for (const tool of selectedTools) {
123
+ console.log(chalk.green(` ✓ ${tool} configuration`));
124
+ }
125
+ if (useGitHooks) {
126
+ console.log(chalk.green(' ✓ Git hooks enabled'));
127
+ }
128
+ console.log(chalk.green(` ✓ ${testFramework} configuration`));
129
+ console.log('\n' + chalk.blue('Next steps:'));
130
+ console.log(' 1. specsafe new <spec-name> - Create a new spec');
131
+ console.log(' 2. specsafe status - View project status');
132
+ console.log(' 3. Edit specs/active/ to define requirements');
133
+ }
134
+ catch (error) {
135
+ spinner.fail(chalk.red(`Failed to initialize: ${error.message}`));
136
+ if (error.message.includes('EEXIST')) {
137
+ console.log(chalk.gray("💡 Tip: Directory already exists. Use 'specsafe init <name>' to create elsewhere."));
138
+ }
139
+ if (error.message.includes('User force closed')) {
140
+ console.log(chalk.gray('💡 Tip: Init was cancelled by user.'));
141
+ process.exit(0);
142
+ }
143
+ process.exit(1);
144
+ }
145
+ });
146
+ //# sourceMappingURL=init-old.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-old.js","sourceRoot":"","sources":["../../src/commands/init-old.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,WAAW,SAyJpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,eAAO,MAAM,WAAW,SA4PpB,CAAC"}
@@ -1,15 +1,78 @@
1
1
  import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
3
  import ora from 'ora';
4
- import { writeFile, mkdir } from 'fs/promises';
5
- import { ProjectTracker } from '@specsafe/core';
4
+ import { writeFile, mkdir, access, chmod } from 'fs/promises';
5
+ import { existsSync } from 'fs';
6
+ import { join, dirname } from 'path';
7
+ import { execSync } from 'child_process';
8
+ import { ProjectTracker, getSupportedAgents, getAgent, AGENT_DEFINITIONS } from '@specsafe/core';
6
9
  import { checkbox, select, confirm, input } from '@inquirer/prompts';
7
- import { detectInstalledTools, availableTools } from '../utils/detectTools.js';
8
- import { generateToolConfig, generateGitHooks } from '../utils/generateToolConfig.js';
10
+ /**
11
+ * Detect which agents are already configured in the project
12
+ */
13
+ async function detectConfiguredAgents(projectDir) {
14
+ const detected = [];
15
+ for (const agentDef of AGENT_DEFINITIONS) {
16
+ for (const file of agentDef.detectionFiles) {
17
+ const filePath = join(projectDir, file);
18
+ try {
19
+ await access(filePath);
20
+ detected.push(agentDef.id);
21
+ break; // Found one file, that's enough
22
+ }
23
+ catch {
24
+ // File doesn't exist, continue
25
+ }
26
+ }
27
+ }
28
+ return detected;
29
+ }
30
+ /**
31
+ * Generate configurations for selected agents
32
+ */
33
+ async function generateAgentConfigs(agents, projectDir, projectName) {
34
+ for (const agentId of agents) {
35
+ const agentEntry = getAgent(agentId);
36
+ if (!agentEntry) {
37
+ console.warn(chalk.yellow(`Warning: Agent ${agentId} not found in registry`));
38
+ continue;
39
+ }
40
+ try {
41
+ // Generate main config files
42
+ const configFiles = await agentEntry.adapter.generateConfig(projectDir, {
43
+ projectName,
44
+ });
45
+ // Generate command files
46
+ const commandFiles = await agentEntry.adapter.generateCommands(projectDir, {
47
+ projectName,
48
+ });
49
+ const allFiles = [...configFiles, ...commandFiles];
50
+ // Write files
51
+ for (const file of allFiles) {
52
+ const filePath = join(projectDir, file.path);
53
+ const fileDir = dirname(filePath);
54
+ // Create directory if needed (mkdir recursive is idempotent, no need to check existsSync)
55
+ await mkdir(fileDir, { recursive: true });
56
+ // Skip if file exists
57
+ if (existsSync(filePath)) {
58
+ console.log(chalk.yellow(` ⚠ ${file.path} already exists, skipping`));
59
+ continue;
60
+ }
61
+ // Write file
62
+ await writeFile(filePath, file.content);
63
+ console.log(chalk.green(` ✓ Created ${file.path}`));
64
+ }
65
+ }
66
+ catch (error) {
67
+ console.error(chalk.red(` ✗ Failed to generate ${agentId} config: ${error.message}`));
68
+ }
69
+ }
70
+ }
9
71
  export const initCommand = new Command('init')
10
72
  .description('Initialize a new SpecSafe project')
11
73
  .argument('[name]', 'Project name', 'my-project')
12
- .action(async (defaultName) => {
74
+ .option('--agent <agents...>', 'AI coding agents to configure (can be repeated)')
75
+ .action(async (defaultName, options) => {
13
76
  const spinner = ora('Initializing SpecSafe project...').start();
14
77
  try {
15
78
  // Interactive prompts for project name
@@ -18,19 +81,61 @@ export const initCommand = new Command('init')
18
81
  message: 'Project name:',
19
82
  default: defaultName,
20
83
  });
21
- // 1. Detect existing tools
22
- const detectedTools = detectInstalledTools();
23
- // 2. Prompt user to confirm/select tools
24
- const toolChoices = availableTools.map((tool) => ({
25
- name: tool.displayName + (detectedTools.includes(tool.name) ? ' (detected)' : ''),
26
- value: tool.name,
27
- checked: detectedTools.includes(tool.name),
28
- }));
29
- const selectedTools = await checkbox({
30
- message: 'Which AI coding assistants do you use?',
31
- choices: toolChoices,
32
- });
33
- // 3. Prompt for test framework
84
+ const projectDir = process.cwd();
85
+ // 1. Determine which agents to configure
86
+ let selectedAgents = [];
87
+ if (options.agent && options.agent.length > 0) {
88
+ // Agents specified via CLI flag - validate each one
89
+ const supportedAgents = getSupportedAgents();
90
+ const invalidAgents = options.agent.filter(id => !supportedAgents.includes(id));
91
+ if (invalidAgents.length > 0) {
92
+ console.error(chalk.red(`Error: Invalid agent(s): ${invalidAgents.join(', ')}`));
93
+ console.log(chalk.gray(`\nSupported agents: ${supportedAgents.join(', ')}`));
94
+ process.exit(1);
95
+ }
96
+ selectedAgents = options.agent;
97
+ console.log(chalk.blue(`Using agents from CLI: ${selectedAgents.join(', ')}`));
98
+ }
99
+ else {
100
+ // Auto-detect or prompt
101
+ const detectedAgents = await detectConfiguredAgents(projectDir);
102
+ if (detectedAgents.length > 0) {
103
+ console.log(chalk.green(`Detected agents: ${detectedAgents.join(', ')}`));
104
+ const useDetected = await confirm({
105
+ message: 'Use detected agents?',
106
+ default: true,
107
+ });
108
+ if (useDetected) {
109
+ selectedAgents = detectedAgents;
110
+ }
111
+ }
112
+ if (selectedAgents.length === 0) {
113
+ // Prompt user to select
114
+ const agentChoices = AGENT_DEFINITIONS.map((agent) => ({
115
+ name: agent.name,
116
+ value: agent.id,
117
+ checked: detectedAgents.includes(agent.id),
118
+ }));
119
+ selectedAgents = await checkbox({
120
+ message: 'Which AI coding agents do you use?',
121
+ choices: agentChoices,
122
+ required: false,
123
+ });
124
+ // Default to all if none selected
125
+ if (selectedAgents.length === 0) {
126
+ const useAll = await confirm({
127
+ message: 'No agents selected. Generate configs for all supported agents?',
128
+ default: false,
129
+ });
130
+ if (useAll) {
131
+ // Filter to only agents that have registered adapters
132
+ selectedAgents = getSupportedAgents().filter(id => getAgent(id) !== undefined);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ // 2. Prompt for test framework
138
+ spinner.stop();
34
139
  const testFramework = await select({
35
140
  message: 'Select testing framework:',
36
141
  choices: [
@@ -40,20 +145,22 @@ export const initCommand = new Command('init')
40
145
  ],
41
146
  default: 'vitest',
42
147
  });
43
- // 4. Prompt for git hooks
148
+ // 3. Prompt for git hooks
44
149
  const useGitHooks = await confirm({
45
150
  message: 'Enable git hooks for spec validation?',
46
151
  default: true,
47
152
  });
48
153
  spinner.start('Creating project structure...');
49
- // Create directory structure
50
- await mkdir('specs/active', { recursive: true });
51
- await mkdir('specs/completed', { recursive: true });
52
- await mkdir('specs/archive', { recursive: true });
53
- await mkdir('src', { recursive: true });
54
- await mkdir('tests', { recursive: true });
154
+ // Create directory structure (relative to projectDir)
155
+ await mkdir(join(projectDir, 'specs/active'), { recursive: true });
156
+ await mkdir(join(projectDir, 'specs/completed'), { recursive: true });
157
+ await mkdir(join(projectDir, 'specs/archive'), { recursive: true });
158
+ await mkdir(join(projectDir, 'specs/drafts'), { recursive: true });
159
+ await mkdir(join(projectDir, 'specs/exploration'), { recursive: true });
160
+ await mkdir(join(projectDir, 'src'), { recursive: true });
161
+ await mkdir(join(projectDir, 'tests'), { recursive: true });
55
162
  // Create PROJECT_STATE.md
56
- const tracker = new ProjectTracker(process.cwd());
163
+ const tracker = new ProjectTracker(projectDir);
57
164
  await tracker.initialize(name);
58
165
  // Create spec template
59
166
  const template = `# Spec Template
@@ -90,37 +197,71 @@ export const initCommand = new Command('init')
90
197
 
91
198
  ## 9. Notes & References
92
199
  `;
93
- await writeFile('specs/template.md', template);
94
- // Create config file with selected tools
95
- const toolsConfig = {};
96
- for (const tool of selectedTools) {
97
- toolsConfig[tool] = { enabled: true };
200
+ await writeFile(join(projectDir, 'specs/template.md'), template);
201
+ // Create config file with selected agents
202
+ const agentsConfig = {};
203
+ for (const agentId of selectedAgents) {
204
+ agentsConfig[agentId] = { enabled: true };
98
205
  }
99
206
  const config = {
100
207
  project: name,
101
208
  version: '1.0.0',
102
- stages: ['spec', 'test', 'code', 'qa', 'complete'],
209
+ stages: ['explore', 'draft', 'spec', 'test-create', 'test-apply', 'verify', 'complete'],
103
210
  testFramework,
104
211
  language: 'typescript',
105
- tools: toolsConfig,
212
+ agents: agentsConfig,
106
213
  gitHooks: {
107
214
  enabled: useGitHooks,
108
215
  },
109
216
  };
110
- await writeFile('specsafe.config.json', JSON.stringify(config, null, 2));
111
- spinner.text = 'Generating tool configurations...';
112
- // Generate tool configs for selected tools
113
- for (const tool of selectedTools) {
114
- await generateToolConfig(tool, '.');
115
- }
217
+ await writeFile(join(projectDir, 'specsafe.config.json'), JSON.stringify(config, null, 2));
218
+ spinner.text = 'Generating agent configurations...';
219
+ // Generate configs for selected agents
220
+ await generateAgentConfigs(selectedAgents, projectDir, name);
116
221
  // Generate git hooks if enabled
117
222
  if (useGitHooks) {
118
- await generateGitHooks('.');
223
+ const hooksDir = join(projectDir, '.githooks');
224
+ await mkdir(hooksDir, { recursive: true });
225
+ const preCommitPath = join(hooksDir, 'pre-commit');
226
+ if (!existsSync(preCommitPath)) {
227
+ const preCommitContent = `#!/bin/bash
228
+ # SpecSafe pre-commit hook v1.0
229
+ set -e
230
+
231
+ echo "Running SpecSafe pre-commit checks..."
232
+
233
+ # Check PROJECT_STATE.md exists
234
+ if [ ! -f "PROJECT_STATE.md" ]; then
235
+ echo "PROJECT_STATE.md not found."
236
+ exit 1
237
+ fi
238
+
239
+ # Run specsafe doctor if available
240
+ if command -v specsafe >/dev/null 2>&1; then
241
+ specsafe doctor --silent || true
242
+ fi
243
+
244
+ echo "Pre-commit checks passed"
245
+ exit 0
246
+ `;
247
+ await writeFile(preCommitPath, preCommitContent);
248
+ // Make the hook executable
249
+ await chmod(preCommitPath, 0o755);
250
+ // Configure git to use .githooks directory
251
+ try {
252
+ execSync('git config --local core.hooksPath .githooks', { cwd: projectDir });
253
+ console.log(chalk.green(' ✓ Created .githooks/pre-commit'));
254
+ }
255
+ catch (err) {
256
+ console.log(chalk.yellow(' ⚠ Created .githooks/pre-commit (run: git config --local core.hooksPath .githooks)'));
257
+ }
258
+ }
119
259
  }
120
260
  spinner.succeed(chalk.green(`Initialized SpecSafe project: ${name}`));
121
261
  console.log('\n' + chalk.blue('Generated configurations:'));
122
- for (const tool of selectedTools) {
123
- console.log(chalk.green(` ✓ ${tool} configuration`));
262
+ for (const agentId of selectedAgents) {
263
+ const agentDef = AGENT_DEFINITIONS.find((a) => a.id === agentId);
264
+ console.log(chalk.green(` ✓ ${agentDef?.name || agentId}`));
124
265
  }
125
266
  if (useGitHooks) {
126
267
  console.log(chalk.green(' ✓ Git hooks enabled'));
@@ -130,11 +271,22 @@ export const initCommand = new Command('init')
130
271
  console.log(' 1. specsafe new <spec-name> - Create a new spec');
131
272
  console.log(' 2. specsafe status - View project status');
132
273
  console.log(' 3. Edit specs/active/ to define requirements');
274
+ if (selectedAgents.length > 0) {
275
+ console.log('\n' + chalk.blue('Agent commands:'));
276
+ for (const agentId of selectedAgents.slice(0, 3)) {
277
+ const agentEntry = getAgent(agentId);
278
+ if (agentEntry) {
279
+ // Use regex for whole-word replacement
280
+ const cmdFormat = agentEntry.commandFormat.replace(/\bcommand\b/, 'specsafe');
281
+ console.log(` ${agentEntry.name}: ${cmdFormat}`);
282
+ }
283
+ }
284
+ }
133
285
  }
134
286
  catch (error) {
135
287
  spinner.fail(chalk.red(`Failed to initialize: ${error.message}`));
136
288
  if (error.message.includes('EEXIST')) {
137
- console.log(chalk.gray("💡 Tip: Directory already exists. Use 'specsafe init <name>' to create elsewhere."));
289
+ console.log(chalk.gray("💡 Tip: Directory already exists."));
138
290
  }
139
291
  if (error.message.includes('User force closed')) {
140
292
  console.log(chalk.gray('💡 Tip: Init was cancelled by user.'));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,UAAU,SAmJnB,CAAC"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,UAAU,SAgdnB,CAAC"}