@speclife/cli 0.9.2 → 0.10.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.
package/dist/index.js CHANGED
@@ -24,15 +24,25 @@
24
24
  * This CLI provides git operations for CI/scripting.
25
25
  */
26
26
  import { Command } from 'commander';
27
- import { readFile, writeFile, mkdir, access, symlink, unlink, readdir } from 'fs/promises';
27
+ import { readFile, writeFile, mkdir, access, readdir } from 'fs/promises';
28
28
  import { join, dirname } from 'path';
29
29
  import { fileURLToPath } from 'url';
30
- import { loadConfig, createGitAdapter, createOpenSpecAdapter, worktreeCreate, worktreeRemove, worktreeList, statusWorkflow, } from '@speclife/core';
30
+ import chalk from 'chalk';
31
+ import ora from 'ora';
32
+ import { loadConfig, createGitAdapter, createOpenSpecAdapter, worktreeCreate, worktreeRemove, worktreeList, statusWorkflow,
33
+ // Utils
34
+ formatTable, formatSummary, sortItems, filterByStatus, createProgressBar, loadTasksFile,
35
+ // Global config
36
+ getGlobalConfigPath, getGlobalConfig, saveGlobalConfig, getGlobalConfigValue, setGlobalConfigValue, unsetGlobalConfigValue, resetGlobalConfig, listGlobalConfig,
37
+ // Editor configurators
38
+ EditorRegistry, detectEditors, sortByPreference,
39
+ // Completions
40
+ generateCompletions, getInstallInstructions, getSupportedShells, } from '@speclife/core';
31
41
  const program = new Command();
32
42
  // Get version from package.json
33
43
  const __filename = fileURLToPath(import.meta.url);
34
44
  const __dirname = dirname(__filename);
35
- let version = '0.2.0';
45
+ let version = '0.3.0';
36
46
  try {
37
47
  const pkgPath = join(__dirname, '..', 'package.json');
38
48
  const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
@@ -41,6 +51,35 @@ try {
41
51
  catch {
42
52
  // Use default version
43
53
  }
54
+ // =============================================================================
55
+ // ASCII Art Banner
56
+ // =============================================================================
57
+ const BANNER = chalk.cyan(`
58
+ ____ __ _ ____
59
+ / __/__ ___ ____/ / (_) __/__
60
+ _\\ \\/ _ \\/ -_) __/ /__/ / _/ -_)
61
+ /___/ .__/\\__/\\__/____/_/_/ \\__/
62
+ /_/
63
+ `) + chalk.dim(`v${version}`);
64
+ // =============================================================================
65
+ // Helper Functions
66
+ // =============================================================================
67
+ /**
68
+ * Check if running in interactive mode
69
+ */
70
+ function isInteractive() {
71
+ return process.stdin.isTTY === true && !process.env.CI;
72
+ }
73
+ /**
74
+ * Dynamic import of inquirer to avoid stdin issues in CI
75
+ */
76
+ async function getInquirer() {
77
+ const inquirer = await import('inquirer');
78
+ return inquirer.default;
79
+ }
80
+ // =============================================================================
81
+ // Program Setup
82
+ // =============================================================================
44
83
  program
45
84
  .name('speclife')
46
85
  .description('Git/GitHub automation for spec-driven development')
@@ -52,17 +91,26 @@ program
52
91
  .command('init')
53
92
  .description('Configure project for AI editors (one-time setup)')
54
93
  .option('--force', 'Overwrite existing configuration')
94
+ .option('--tools <editors>', 'Comma-separated list of editors to configure')
95
+ .option('--no-interactive', 'Run without prompts (for CI)')
96
+ .option('-y, --yes', 'Accept all defaults')
55
97
  .action(async (options) => {
56
98
  try {
57
99
  const cwd = process.cwd();
58
- console.log('Detecting project settings...');
100
+ const interactive = isInteractive() && options.interactive !== false && !options.yes;
101
+ // Show banner in interactive mode
102
+ if (interactive) {
103
+ console.log(BANNER);
104
+ console.log();
105
+ }
106
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
107
+ spinner.start('Detecting project settings...');
59
108
  // Detect spec directory
60
109
  let specDir = 'openspec';
61
110
  for (const dir of ['openspec', 'specs']) {
62
111
  try {
63
112
  await access(join(cwd, dir));
64
113
  specDir = dir;
65
- console.log(`✓ Found ${dir}/ directory`);
66
114
  break;
67
115
  }
68
116
  catch {
@@ -81,8 +129,74 @@ program
81
129
  catch {
82
130
  // Use default
83
131
  }
84
- console.log(`✓ Detected git base branch: ${baseBranch}`);
132
+ spinner.succeed(chalk.green('Project settings detected'));
133
+ console.log(` ${chalk.dim('•')} Spec directory: ${chalk.cyan(specDir)}`);
134
+ console.log(` ${chalk.dim('•')} Base branch: ${chalk.cyan(baseBranch)}`);
135
+ // Detect available editors
136
+ spinner.start('Detecting editors...');
137
+ const editorResults = await detectEditors(cwd);
138
+ const sortedResults = sortByPreference(editorResults);
139
+ spinner.succeed(chalk.green('Editor detection complete'));
140
+ // Select editors
141
+ let selectedEditors = [];
142
+ if (options.tools) {
143
+ // Use provided tools
144
+ selectedEditors = options.tools.split(',').map((s) => s.trim());
145
+ }
146
+ else if (interactive) {
147
+ // Interactive selection
148
+ const inquirer = await getInquirer();
149
+ const choices = sortedResults.map((r) => ({
150
+ name: `${r.editor.name}${r.installed ? chalk.green(' (detected)') : ''}${r.configured ? chalk.dim(' [configured]') : ''}`,
151
+ value: r.editor.id,
152
+ checked: r.installed,
153
+ }));
154
+ console.log();
155
+ const { editors } = await inquirer.prompt([{
156
+ type: 'checkbox',
157
+ name: 'editors',
158
+ message: 'Select editors to configure:',
159
+ choices,
160
+ }]);
161
+ selectedEditors = editors;
162
+ }
163
+ else {
164
+ // Non-interactive: configure detected editors
165
+ selectedEditors = sortedResults
166
+ .filter((r) => r.installed)
167
+ .map((r) => r.editor.id);
168
+ if (selectedEditors.length === 0) {
169
+ selectedEditors = ['cursor', 'claude-code']; // Default fallback
170
+ }
171
+ }
172
+ // Preview changes
173
+ if (interactive) {
174
+ console.log();
175
+ console.log(chalk.bold('The following files will be created/modified:'));
176
+ console.log(` ${chalk.dim('•')} .specliferc.yaml`);
177
+ console.log(` ${chalk.dim('•')} ${specDir}/commands/speclife/`);
178
+ console.log(` ${chalk.dim('•')} ${specDir}/speclife.md`);
179
+ console.log(` ${chalk.dim('•')} .github/workflows/speclife-release.yml`);
180
+ for (const editorId of selectedEditors) {
181
+ const editor = EditorRegistry.get(editorId);
182
+ if (editor) {
183
+ console.log(` ${chalk.dim('•')} ${editor.configDir}/commands/`);
184
+ }
185
+ }
186
+ console.log();
187
+ const { proceed } = await (await getInquirer()).prompt([{
188
+ type: 'confirm',
189
+ name: 'proceed',
190
+ message: 'Proceed with configuration?',
191
+ default: true,
192
+ }]);
193
+ if (!proceed) {
194
+ console.log(chalk.yellow('Aborted.'));
195
+ return;
196
+ }
197
+ }
85
198
  // Create .specliferc.yaml
199
+ spinner.start('Creating configuration...');
86
200
  const configPath = join(cwd, '.specliferc.yaml');
87
201
  let configExists = false;
88
202
  try {
@@ -104,69 +218,38 @@ git:
104
218
  worktreeDir: worktrees
105
219
  `;
106
220
  await writeFile(configPath, configContent);
107
- console.log('✓ Created .specliferc.yaml');
108
- }
109
- else {
110
- console.log('✓ .specliferc.yaml already exists (use --force to overwrite)');
111
221
  }
112
- // Create slash commands directory
222
+ spinner.succeed(chalk.green('Configuration created'));
223
+ // Create slash commands directory and copy templates
224
+ spinner.start('Installing slash commands...');
113
225
  const commandsDir = join(cwd, specDir, 'commands', 'speclife');
114
- try {
115
- await mkdir(commandsDir, { recursive: true });
116
- console.log(`✓ Created ${specDir}/commands/speclife/`);
117
- }
118
- catch {
119
- console.log(`✓ ${specDir}/commands/speclife/ already exists`);
120
- }
121
- // Copy slash command templates (from templates embedded in package)
226
+ await mkdir(commandsDir, { recursive: true });
122
227
  const templatesDir = join(__dirname, '..', 'templates', 'commands');
123
228
  const templateFiles = await readdir(templatesDir);
124
229
  const slashCommands = templateFiles
125
230
  .filter(f => f.endsWith('.md'))
126
231
  .map(f => f.replace('.md', ''));
127
232
  let copiedCount = 0;
128
- let skippedCount = 0;
129
- const errors = [];
130
233
  for (const cmd of slashCommands) {
131
234
  const destPath = join(commandsDir, `${cmd}.md`);
132
235
  try {
133
236
  await access(destPath);
134
- if (!options.force) {
135
- skippedCount++;
136
- continue; // Skip existing
137
- }
237
+ if (!options.force)
238
+ continue;
138
239
  }
139
240
  catch {
140
- // File doesn't exist, create it
141
- }
142
- // Try to copy from templates
143
- try {
144
- const templatePath = join(templatesDir, `${cmd}.md`);
145
- const content = await readFile(templatePath, 'utf-8');
146
- await writeFile(destPath, content);
147
- copiedCount++;
241
+ // File doesn't exist
148
242
  }
149
- catch (err) {
150
- errors.push(`${cmd}.md: ${err instanceof Error ? err.message : 'unknown error'}`);
151
- }
152
- }
153
- if (copiedCount > 0) {
154
- console.log(`✓ Created ${copiedCount} slash command(s) in ${specDir}/commands/speclife/`);
155
- }
156
- if (skippedCount > 0) {
157
- console.log(` (${skippedCount} existing command(s) skipped, use --force to overwrite)`);
243
+ const templatePath = join(templatesDir, `${cmd}.md`);
244
+ const content = await readFile(templatePath, 'utf-8');
245
+ await writeFile(destPath, content);
246
+ copiedCount++;
158
247
  }
159
- if (errors.length > 0) {
160
- console.log(`⚠️ Failed to copy ${errors.length} template(s):`);
161
- for (const err of errors) {
162
- console.log(` - ${err}`);
163
- }
164
- }
165
- // Create speclife.md if it doesn't exist
248
+ spinner.succeed(chalk.green(`Installed ${copiedCount} slash commands`));
249
+ // Create speclife.md
166
250
  const speclifeMdPath = join(cwd, specDir, 'speclife.md');
167
251
  try {
168
252
  await access(speclifeMdPath);
169
- console.log(`✓ ${specDir}/speclife.md already exists`);
170
253
  }
171
254
  catch {
172
255
  const speclifeMdContent = `# SpecLife Configuration
@@ -175,199 +258,421 @@ This file provides context for AI agents using speclife slash commands.
175
258
 
176
259
  ## Commands
177
260
 
178
- <!-- Values auto-detected by /speclife setup from package.json, Makefile, Cargo.toml, etc. -->
179
- - **Test:** \`TODO: detect test command\`
180
- - **Build:** \`TODO: detect build command\`
181
- - **Lint:** \`TODO: detect lint command\`
261
+ - **Test:** \`npm test\`
262
+ - **Build:** \`npm run build\`
263
+ - **Lint:** \`npm run lint\`
182
264
 
183
265
  ## Release Policy
184
266
 
185
267
  - **Auto-release:** patch and minor versions
186
268
  - **Manual release:** major versions (breaking changes)
187
269
 
188
- ## Publish
189
-
190
- <!-- Auto-detected by /speclife setup -->
191
- - **Registry:** TODO: detect (npm / PyPI / crates.io / None)
192
- - **Workflow:** TODO: check .github/workflows/publish.yml
193
- - **Secret:** TODO: NPM_TOKEN / PYPI_TOKEN / CARGO_REGISTRY_TOKEN
194
-
195
270
  ## Context Files
196
271
 
197
272
  When implementing changes, always read:
198
273
  - \`${specDir}/project.md\` - project context and conventions
199
274
  - \`${specDir}/AGENTS.md\` - agent guidelines
200
275
  - \`README.md\` - project overview
201
-
202
- ## Notes
203
-
204
- - Run \`/speclife setup\` to auto-detect commands and publish config
205
- - Or manually edit the TODO items above
206
276
  `;
207
277
  await writeFile(speclifeMdPath, speclifeMdContent);
208
- console.log(`✓ Created ${specDir}/speclife.md (template)`);
209
278
  }
210
- // Create GitHub release workflow (only if no release workflow exists)
279
+ // Create GitHub workflow
211
280
  const workflowDir = join(cwd, '.github', 'workflows');
212
- const releaseWorkflows = ['release.yml', 'speclife-release.yml'];
213
- let existingReleaseWorkflow = null;
214
- for (const wf of releaseWorkflows) {
281
+ let existingWorkflow = false;
282
+ for (const wf of ['release.yml', 'speclife-release.yml']) {
215
283
  try {
216
284
  await access(join(workflowDir, wf));
217
- existingReleaseWorkflow = wf;
285
+ existingWorkflow = true;
218
286
  break;
219
287
  }
220
288
  catch {
221
- // Continue checking
289
+ // Continue
222
290
  }
223
291
  }
224
- if (existingReleaseWorkflow) {
225
- console.log(`✓ Release workflow already exists: .github/workflows/${existingReleaseWorkflow}`);
226
- }
227
- else {
228
- try {
229
- await mkdir(workflowDir, { recursive: true });
230
- const workflowContent = `# SpecLife Release Workflow
231
- # Automatically creates GitHub releases when release commits are merged
232
-
292
+ if (!existingWorkflow) {
293
+ await mkdir(workflowDir, { recursive: true });
294
+ const workflowContent = `# SpecLife Release Workflow
233
295
  name: Create Release
234
296
 
235
297
  on:
236
298
  push:
237
- branches:
238
- - ${baseBranch}
299
+ branches: [${baseBranch}]
239
300
 
240
301
  jobs:
241
302
  release:
242
303
  runs-on: ubuntu-latest
243
304
  if: startsWith(github.event.head_commit.message, 'chore(release):')
244
-
245
305
  permissions:
246
306
  contents: write
247
-
248
307
  steps:
249
- - name: Checkout
250
- uses: actions/checkout@v4
251
-
252
- - name: Extract version from commit
308
+ - uses: actions/checkout@v4
309
+ - name: Extract version
253
310
  id: version
254
311
  run: |
255
312
  VERSION=$(echo "\${{ github.event.head_commit.message }}" | grep -oP 'v\\d+\\.\\d+\\.\\d+')
256
313
  echo "version=$VERSION" >> $GITHUB_OUTPUT
257
- echo "Detected version: $VERSION"
258
-
259
- - name: Create and push tag
314
+ - name: Create tag
260
315
  run: |
261
316
  git config user.name "github-actions[bot]"
262
317
  git config user.email "github-actions[bot]@users.noreply.github.com"
263
318
  git tag \${{ steps.version.outputs.version }}
264
319
  git push origin \${{ steps.version.outputs.version }}
265
-
266
- - name: Create GitHub Release
267
- uses: softprops/action-gh-release@v2
320
+ - uses: softprops/action-gh-release@v2
268
321
  with:
269
322
  tag_name: \${{ steps.version.outputs.version }}
270
323
  generate_release_notes: true
271
324
  `;
272
- await writeFile(join(workflowDir, 'speclife-release.yml'), workflowContent);
273
- console.log('✓ Created .github/workflows/speclife-release.yml');
325
+ await writeFile(join(workflowDir, 'speclife-release.yml'), workflowContent);
326
+ }
327
+ // Configure editors
328
+ spinner.start('Configuring editors...');
329
+ for (const editorId of selectedEditors) {
330
+ const editor = EditorRegistry.get(editorId);
331
+ if (editor) {
332
+ await editor.configure({
333
+ projectPath: cwd,
334
+ specDir,
335
+ force: options.force,
336
+ });
274
337
  }
275
- catch (err) {
276
- console.log('⚠️ Could not create release workflow');
338
+ }
339
+ spinner.succeed(chalk.green('Editors configured'));
340
+ // Success message
341
+ console.log();
342
+ console.log(chalk.green.bold('✅ SpecLife configured!'));
343
+ console.log();
344
+ console.log(chalk.bold('Next steps:'));
345
+ console.log(` ${chalk.cyan('1.')} Run ${chalk.yellow('/speclife setup')} to auto-detect project commands`);
346
+ console.log(` ${chalk.cyan('2.')} Use ${chalk.yellow('/speclife start "your change"')} to begin a new change`);
347
+ console.log();
348
+ console.log(chalk.dim('Tip: Enable tab completion with:'));
349
+ console.log(chalk.dim(` speclife completion ${process.env.SHELL?.includes('zsh') ? 'zsh' : 'bash'} >> ~/.${process.env.SHELL?.includes('zsh') ? 'zshrc' : 'bashrc'}`));
350
+ }
351
+ catch (error) {
352
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
353
+ process.exit(1);
354
+ }
355
+ });
356
+ // =============================================================================
357
+ // speclife view - Dashboard view
358
+ // =============================================================================
359
+ program
360
+ .command('view')
361
+ .description('Show interactive dashboard of all changes')
362
+ .option('--json', 'Output as JSON')
363
+ .action(async (options) => {
364
+ try {
365
+ const cwd = process.cwd();
366
+ const config = await loadConfig(cwd);
367
+ const git = createGitAdapter(cwd);
368
+ const openspec = createOpenSpecAdapter({ projectRoot: cwd, specDir: config.specDir });
369
+ const spinner = ora({ isSilent: options.json || !process.stdout.isTTY });
370
+ spinner.start('Loading changes...');
371
+ const changeIds = await openspec.listChanges();
372
+ const items = [];
373
+ const currentBranch = await git.getCurrentBranch();
374
+ for (const id of changeIds) {
375
+ const result = await statusWorkflow({ changeId: id }, { git, openspec });
376
+ if (result) {
377
+ items.push({
378
+ id,
379
+ progress: result.taskSummary,
380
+ prStatus: 'local',
381
+ isCurrent: result.onBranch,
382
+ lastActive: new Date(),
383
+ });
277
384
  }
278
385
  }
279
- // Configure editor symlinks
280
- await configureEditorSymlinks(cwd, specDir, options.force);
281
- console.log('\n✅ SpecLife configured!');
282
- console.log('\nNext steps:');
283
- console.log(' 1. Run /speclife setup to auto-detect project commands');
284
- console.log(' 2. Or manually edit openspec/speclife.md');
285
- console.log(' 3. Use /speclife start to begin a new change');
386
+ spinner.stop();
387
+ if (options.json) {
388
+ console.log(JSON.stringify({ changes: items, currentBranch }, null, 2));
389
+ return;
390
+ }
391
+ if (items.length === 0) {
392
+ console.log(chalk.yellow('No active changes'));
393
+ console.log(chalk.dim('Use /speclife start to create a new change'));
394
+ return;
395
+ }
396
+ // Header
397
+ console.log();
398
+ console.log(chalk.bold.cyan('╔══════════════════════════════════════════════════════════════╗'));
399
+ console.log(chalk.bold.cyan('║ SpecLife Dashboard ║'));
400
+ console.log(chalk.bold.cyan('╠══════════════════════════════════════════════════════════════╣'));
401
+ // Summary
402
+ const ready = items.filter(i => i.progress.percentage === 100).length;
403
+ const inProgress = items.length - ready;
404
+ console.log(chalk.cyan('║ ') + `Summary: ${chalk.bold(items.length)} changes (${chalk.green(ready + ' ready')}, ${chalk.yellow(inProgress + ' in progress')})`.padEnd(60) + chalk.cyan(' ║'));
405
+ console.log(chalk.cyan('╠──────────────────────────────────────────────────────────────╣'));
406
+ // Group by completion
407
+ const completed = items.filter(i => i.progress.percentage === 100);
408
+ const pending = items.filter(i => i.progress.percentage < 100);
409
+ if (pending.length > 0) {
410
+ console.log(chalk.cyan('║ ') + chalk.bold('In Progress').padEnd(60) + chalk.cyan(' ║'));
411
+ for (const item of pending) {
412
+ const marker = item.isCurrent ? chalk.cyan('→') : ' ';
413
+ const bar = createProgressBar(item.progress.percentage, { width: 10 });
414
+ const line = `${marker} ${item.id.padEnd(22)} ${bar} ${(item.progress.completed + '/' + item.progress.total).padStart(5)}`;
415
+ console.log(chalk.cyan('║ ') + line.padEnd(60) + chalk.cyan(' ║'));
416
+ }
417
+ }
418
+ if (completed.length > 0) {
419
+ console.log(chalk.cyan('╠──────────────────────────────────────────────────────────────╣'));
420
+ console.log(chalk.cyan('║ ') + chalk.bold.green('Ready to Land').padEnd(60) + chalk.cyan(' ║'));
421
+ for (const item of completed) {
422
+ const marker = item.isCurrent ? chalk.cyan('→') : ' ';
423
+ const line = `${marker} ${chalk.green('✓')} ${item.id.padEnd(20)} ${chalk.green('[██████████] 100%')}`;
424
+ console.log(chalk.cyan('║ ') + line.padEnd(60) + chalk.cyan(' ║'));
425
+ }
426
+ }
427
+ console.log(chalk.cyan('╚══════════════════════════════════════════════════════════════╝'));
428
+ console.log();
286
429
  }
287
430
  catch (error) {
288
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
431
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
289
432
  process.exit(1);
290
433
  }
291
434
  });
292
- /**
293
- * Configure editor symlinks for slash commands
294
- */
295
- async function configureEditorSymlinks(cwd, specDir, force) {
296
- const editors = [
297
- { name: 'Cursor', dir: '.cursor' },
298
- { name: 'Claude Code', dir: '.claude' },
299
- ];
300
- const sourceDir = join(cwd, specDir, 'commands', 'speclife');
301
- // Dynamically discover commands from source directory
302
- let slashCommands = [];
435
+ // =============================================================================
436
+ // speclife completion - Shell completions
437
+ // =============================================================================
438
+ program
439
+ .command('completion <shell>')
440
+ .description('Generate shell completion script')
441
+ .action(async (shell) => {
442
+ const supportedShells = getSupportedShells();
443
+ if (!supportedShells.includes(shell)) {
444
+ console.error(chalk.red(`Unsupported shell: ${shell}`));
445
+ console.error(chalk.dim(`Supported shells: ${supportedShells.join(', ')}`));
446
+ process.exit(1);
447
+ }
448
+ const script = generateCompletions(shell);
449
+ console.log(script);
450
+ // Print installation hint to stderr so it doesn't interfere with piping
451
+ console.error(chalk.dim('\n# Installation:'));
452
+ console.error(chalk.dim(getInstallInstructions(shell)));
453
+ });
454
+ // =============================================================================
455
+ // speclife config - Configuration management
456
+ // =============================================================================
457
+ const configCmd = program
458
+ .command('config')
459
+ .description('Manage global configuration');
460
+ configCmd
461
+ .command('path')
462
+ .description('Show config file path')
463
+ .action(() => {
464
+ console.log(getGlobalConfigPath());
465
+ });
466
+ configCmd
467
+ .command('list')
468
+ .description('List all config values')
469
+ .option('--json', 'Output as JSON')
470
+ .action(async (options) => {
471
+ const config = await getGlobalConfig();
472
+ if (options.json) {
473
+ console.log(JSON.stringify(config, null, 2));
474
+ return;
475
+ }
476
+ const entries = await listGlobalConfig(config);
477
+ for (const [key, value] of entries) {
478
+ console.log(`${chalk.cyan(key)}: ${chalk.yellow(String(value))}`);
479
+ }
480
+ });
481
+ configCmd
482
+ .command('get <key>')
483
+ .description('Get a config value')
484
+ .action(async (key) => {
485
+ const value = await getGlobalConfigValue(key);
486
+ if (value === undefined) {
487
+ console.error(chalk.red(`Key not found: ${key}`));
488
+ process.exit(1);
489
+ }
490
+ console.log(value);
491
+ });
492
+ configCmd
493
+ .command('set <key> <value>')
494
+ .description('Set a config value')
495
+ .action(async (key, value) => {
496
+ // Parse value as JSON if possible
497
+ let parsedValue = value;
303
498
  try {
304
- const files = await readdir(sourceDir);
305
- slashCommands = files
306
- .filter(f => f.endsWith('.md'))
307
- .map(f => f.replace('.md', ''));
499
+ parsedValue = JSON.parse(value);
308
500
  }
309
501
  catch {
310
- // Source directory doesn't exist yet, skip symlinks
311
- return;
502
+ // Keep as string
312
503
  }
313
- for (const editor of editors) {
314
- const editorCommandsDir = join(cwd, editor.dir, 'commands', 'speclife');
315
- const editorCommandsBase = join(cwd, editor.dir, 'commands');
504
+ await setGlobalConfigValue(key, parsedValue);
505
+ console.log(chalk.green(`Set ${key} = ${value}`));
506
+ });
507
+ configCmd
508
+ .command('unset <key>')
509
+ .description('Remove a config value')
510
+ .action(async (key) => {
511
+ await unsetGlobalConfigValue(key);
512
+ console.log(chalk.green(`Removed ${key}`));
513
+ });
514
+ configCmd
515
+ .command('reset')
516
+ .description('Reset to default values')
517
+ .action(async () => {
518
+ await resetGlobalConfig();
519
+ console.log(chalk.green('Config reset to defaults'));
520
+ });
521
+ configCmd
522
+ .command('edit')
523
+ .description('Open config in editor')
524
+ .action(async () => {
525
+ const configPath = getGlobalConfigPath();
526
+ const editor = process.env.EDITOR || 'vi';
527
+ // Ensure config exists
528
+ const config = await getGlobalConfig();
529
+ await saveGlobalConfig(config);
530
+ const { spawn } = await import('child_process');
531
+ spawn(editor, [configPath], { stdio: 'inherit' });
532
+ });
533
+ // =============================================================================
534
+ // speclife validate - Validation
535
+ // =============================================================================
536
+ program
537
+ .command('validate [change-id]')
538
+ .description('Validate a change spec')
539
+ .option('--json', 'Output as JSON')
540
+ .option('--strict', 'Fail on warnings')
541
+ .action(async (changeId, options) => {
542
+ try {
543
+ const cwd = process.cwd();
544
+ const config = await loadConfig(cwd);
545
+ const git = createGitAdapter(cwd);
546
+ // Determine change ID
547
+ let targetChangeId = changeId;
548
+ if (!targetChangeId) {
549
+ const branch = await git.getCurrentBranch();
550
+ if (branch?.startsWith(config.git?.branchPrefix ?? 'spec/')) {
551
+ targetChangeId = branch.replace(config.git?.branchPrefix ?? 'spec/', '');
552
+ }
553
+ }
554
+ if (!targetChangeId) {
555
+ console.error(chalk.red('No change ID specified and not on a spec branch'));
556
+ process.exit(1);
557
+ }
558
+ const spinner = ora({ isSilent: options.json || !process.stdout.isTTY });
559
+ spinner.start(`Validating ${targetChangeId}...`);
560
+ const errors = [];
561
+ const warnings = [];
562
+ // Check proposal.md exists
563
+ const changeDir = join(cwd, config.specDir, 'changes', targetChangeId);
316
564
  try {
317
- // Create editor commands directory
318
- await mkdir(editorCommandsBase, { recursive: true });
319
- // Create symlink for speclife/ directory (or update if force)
320
- try {
321
- await access(editorCommandsDir);
322
- if (force) {
323
- await unlink(editorCommandsDir);
324
- await symlink(sourceDir, editorCommandsDir);
325
- console.log(`✓ Updated ${editor.name} speclife/ symlink`);
326
- }
327
- else {
328
- console.log(`✓ ${editor.name} commands already configured`);
329
- }
565
+ await access(join(changeDir, 'proposal.md'));
566
+ }
567
+ catch {
568
+ errors.push('proposal.md not found');
569
+ }
570
+ // Check tasks.md exists and has content
571
+ const tasks = await loadTasksFile(cwd, config.specDir, targetChangeId);
572
+ if (tasks.tasks.length === 0) {
573
+ warnings.push('tasks.md is empty or not found');
574
+ }
575
+ else {
576
+ const pending = tasks.tasks.filter((t) => !t.completed).length;
577
+ if (pending > 0) {
578
+ warnings.push(`${pending} task(s) still pending`);
330
579
  }
331
- catch {
332
- await symlink(sourceDir, editorCommandsDir);
333
- console.log(`✓ Configured ${editor.name} commands`);
580
+ }
581
+ // Check branch exists
582
+ try {
583
+ await git.listWorktrees();
584
+ // Branch check is informational
585
+ }
586
+ catch {
587
+ warnings.push('Could not verify branch status');
588
+ }
589
+ spinner.stop();
590
+ const status = errors.length > 0 ? 'fail' : warnings.length > 0 ? 'pass_with_warnings' : 'pass';
591
+ if (options.json) {
592
+ console.log(JSON.stringify({ status, errors, warnings }, null, 2));
593
+ process.exit(status === 'fail' || (options.strict && status === 'pass_with_warnings') ? 1 : 0);
594
+ }
595
+ if (errors.length > 0) {
596
+ console.log(chalk.red.bold('✗ Validation failed'));
597
+ for (const err of errors) {
598
+ console.log(chalk.red(` • ${err}`));
334
599
  }
335
- // Create dash-prefixed symlinks for each command
336
- // e.g., speclife-release.md speclife/release.md
337
- let dashLinksCreated = 0;
338
- for (const cmd of slashCommands) {
339
- const dashFile = join(editorCommandsBase, `speclife-${cmd}.md`);
340
- // Use relative path for symlink to be portable
341
- const targetFile = join('speclife', `${cmd}.md`);
342
- try {
343
- await access(dashFile);
344
- if (force) {
345
- await unlink(dashFile);
346
- await symlink(targetFile, dashFile);
347
- dashLinksCreated++;
348
- }
349
- // else: skip existing
350
- }
351
- catch {
352
- // File doesn't exist, create symlink
353
- try {
354
- await symlink(targetFile, dashFile);
355
- dashLinksCreated++;
356
- }
357
- catch {
358
- // Skip if target doesn't exist
359
- }
600
+ }
601
+ if (warnings.length > 0) {
602
+ console.log(chalk.yellow.bold('⚠ Warnings'));
603
+ for (const warn of warnings) {
604
+ console.log(chalk.yellow(` • ${warn}`));
605
+ }
606
+ }
607
+ if (status === 'pass') {
608
+ console.log(chalk.green.bold('✓ Validation passed'));
609
+ }
610
+ if (status === 'fail' || (options.strict && status === 'pass_with_warnings')) {
611
+ process.exit(1);
612
+ }
613
+ }
614
+ catch (error) {
615
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
616
+ process.exit(1);
617
+ }
618
+ });
619
+ // =============================================================================
620
+ // speclife update - Refresh managed files
621
+ // =============================================================================
622
+ program
623
+ .command('update')
624
+ .description('Update slash command templates')
625
+ .option('-f, --force', 'Overwrite customizations')
626
+ .action(async (options) => {
627
+ try {
628
+ const cwd = process.cwd();
629
+ const config = await loadConfig(cwd);
630
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
631
+ spinner.start('Updating templates...');
632
+ const commandsDir = join(cwd, config.specDir, 'commands', 'speclife');
633
+ const templatesDir = join(__dirname, '..', 'templates', 'commands');
634
+ let updated = 0;
635
+ let skipped = 0;
636
+ const templateFiles = await readdir(templatesDir);
637
+ for (const file of templateFiles) {
638
+ if (!file.endsWith('.md'))
639
+ continue;
640
+ const destPath = join(commandsDir, file);
641
+ const templatePath = join(templatesDir, file);
642
+ try {
643
+ await access(destPath);
644
+ if (!options.force) {
645
+ skipped++;
646
+ continue;
360
647
  }
361
648
  }
362
- if (dashLinksCreated > 0) {
363
- console.log(`✓ Created ${dashLinksCreated} ${editor.name} dash-prefixed command symlinks`);
649
+ catch {
650
+ // File doesn't exist
364
651
  }
652
+ const content = await readFile(templatePath, 'utf-8');
653
+ await writeFile(destPath, content);
654
+ updated++;
365
655
  }
366
- catch {
367
- // Source doesn't exist yet, skip
656
+ spinner.succeed(chalk.green(`Updated ${updated} template(s)${skipped > 0 ? `, ${skipped} skipped (use --force)` : ''}`));
657
+ // Update editor symlinks
658
+ spinner.start('Refreshing editor symlinks...');
659
+ const editors = EditorRegistry.getAll();
660
+ for (const editor of editors) {
661
+ if (await editor.isConfigured(cwd)) {
662
+ await editor.configure({
663
+ projectPath: cwd,
664
+ specDir: config.specDir,
665
+ force: true,
666
+ });
667
+ }
368
668
  }
669
+ spinner.succeed(chalk.green('Editor symlinks refreshed'));
369
670
  }
370
- }
671
+ catch (error) {
672
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
673
+ process.exit(1);
674
+ }
675
+ });
371
676
  // =============================================================================
372
677
  // speclife worktree - Worktree management
373
678
  // =============================================================================
@@ -383,17 +688,23 @@ worktreeCmd
383
688
  const cwd = process.cwd();
384
689
  const config = await loadConfig(cwd);
385
690
  const git = createGitAdapter(cwd);
691
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
692
+ spinner.start(`Creating worktree for ${changeId}...`);
386
693
  const result = await worktreeCreate({
387
694
  changeId,
388
695
  skipBootstrap: options.skipBootstrap,
389
- }, { git, config }, (event) => console.log(` ${event.message}`));
390
- console.log(`\n✓ Created worktree: ${result.worktreePath}`);
391
- console.log(`✓ Created branch: ${result.branch}`);
392
- console.log(`\nNext: cd ${result.worktreePath}`);
393
- console.log('Then: Run /openspec-proposal to create the spec');
696
+ }, { git, config }, (event) => {
697
+ spinner.text = event.message;
698
+ });
699
+ spinner.succeed(chalk.green('Worktree created'));
700
+ console.log(` ${chalk.dim('•')} Path: ${chalk.cyan(result.worktreePath)}`);
701
+ console.log(` ${chalk.dim('•')} Branch: ${chalk.cyan(result.branch)}`);
702
+ console.log();
703
+ console.log(`${chalk.bold('Next:')} cd ${result.worktreePath}`);
704
+ console.log(`${chalk.dim('Then:')} Run /openspec-proposal to create the spec`);
394
705
  }
395
706
  catch (error) {
396
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
707
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
397
708
  process.exit(1);
398
709
  }
399
710
  });
@@ -406,40 +717,50 @@ worktreeCmd
406
717
  const cwd = process.cwd();
407
718
  const config = await loadConfig(cwd);
408
719
  const git = createGitAdapter(cwd);
720
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
721
+ spinner.start(`Removing worktree ${changeId}...`);
409
722
  const result = await worktreeRemove({
410
723
  changeId,
411
724
  force: options.force,
412
- }, { git, config }, (event) => console.log(` ${event.message}`));
413
- console.log(`\n✓ Removed worktree: ${result.worktreePath}`);
414
- console.log(`✓ Deleted branch: ${result.branch}`);
725
+ }, { git, config }, (event) => {
726
+ spinner.text = event.message;
727
+ });
728
+ spinner.succeed(chalk.green('Worktree removed'));
729
+ console.log(` ${chalk.dim('•')} Removed: ${chalk.cyan(result.worktreePath)}`);
730
+ console.log(` ${chalk.dim('•')} Branch: ${chalk.cyan(result.branch)}`);
415
731
  }
416
732
  catch (error) {
417
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
733
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
418
734
  process.exit(1);
419
735
  }
420
736
  });
421
737
  worktreeCmd
422
738
  .command('list')
423
739
  .description('List all active worktrees')
424
- .action(async () => {
740
+ .option('--json', 'Output as JSON')
741
+ .action(async (options) => {
425
742
  try {
426
743
  const cwd = process.cwd();
427
744
  const config = await loadConfig(cwd);
428
745
  const git = createGitAdapter(cwd);
429
746
  const result = await worktreeList({ git, config });
747
+ if (options.json) {
748
+ console.log(JSON.stringify(result.worktrees, null, 2));
749
+ return;
750
+ }
430
751
  if (result.worktrees.length === 0) {
431
- console.log('No active worktrees');
752
+ console.log(chalk.yellow('No active worktrees'));
432
753
  return;
433
754
  }
434
- console.log('Active worktrees:');
755
+ console.log(chalk.bold('Active worktrees:'));
435
756
  for (const wt of result.worktrees) {
436
- console.log(` ${wt.changeId}`);
437
- console.log(` Branch: ${wt.branch}`);
438
- console.log(` Path: ${wt.path}`);
757
+ console.log(` ${chalk.cyan(wt.changeId)}`);
758
+ console.log(` ${chalk.dim('Branch:')} ${wt.branch}`);
759
+ console.log(` ${chalk.dim('Path:')} ${wt.path}`);
439
760
  }
440
761
  }
441
762
  catch (error) {
442
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
763
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
443
764
  process.exit(1);
444
765
  }
445
766
  });
@@ -449,7 +770,8 @@ worktreeCmd
449
770
  program
450
771
  .command('status [change-id]')
451
772
  .description('Show status of a change')
452
- .action(async (changeId) => {
773
+ .option('--json', 'Output as JSON')
774
+ .action(async (changeId, options) => {
453
775
  try {
454
776
  const cwd = process.cwd();
455
777
  const config = await loadConfig(cwd);
@@ -457,19 +779,30 @@ program
457
779
  const openspec = createOpenSpecAdapter({ projectRoot: cwd, specDir: config.specDir });
458
780
  const result = await statusWorkflow({ changeId }, { git, openspec });
459
781
  if (!result) {
460
- console.log(changeId
782
+ const msg = changeId
461
783
  ? `Change '${changeId}' not found`
462
- : 'No active change on current branch');
784
+ : 'No active change on current branch';
785
+ if (options.json) {
786
+ console.log(JSON.stringify({ error: msg }, null, 2));
787
+ }
788
+ else {
789
+ console.log(chalk.yellow(msg));
790
+ }
463
791
  return;
464
792
  }
465
793
  const { change, onBranch, taskSummary } = result;
466
- console.log(`Change: ${change.id}`);
467
- console.log(`State: ${change.state}`);
468
- console.log(`Branch: ${change.branch}${onBranch ? ' (current)' : ''}`);
469
- console.log(`Tasks: ${taskSummary.completed}/${taskSummary.total} (${taskSummary.percentage}%)`);
794
+ if (options.json) {
795
+ console.log(JSON.stringify({ change, onBranch, taskSummary }, null, 2));
796
+ return;
797
+ }
798
+ const bar = createProgressBar(taskSummary.percentage, { width: 10, showPercentage: true });
799
+ console.log(chalk.bold(`Change: ${chalk.cyan(change.id)}`));
800
+ console.log(` ${chalk.dim('State:')} ${change.state}`);
801
+ console.log(` ${chalk.dim('Branch:')} ${change.branch}${onBranch ? chalk.green(' (current)') : ''}`);
802
+ console.log(` ${chalk.dim('Tasks:')} ${bar} ${taskSummary.completed}/${taskSummary.total}`);
470
803
  }
471
804
  catch (error) {
472
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
805
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
473
806
  process.exit(1);
474
807
  }
475
808
  });
@@ -479,7 +812,11 @@ program
479
812
  program
480
813
  .command('list')
481
814
  .description('List all active changes')
482
- .action(async () => {
815
+ .option('--json', 'Output as JSON')
816
+ .option('--compact', 'Compact output')
817
+ .option('--sort <order>', 'Sort by: activity, progress, name', 'activity')
818
+ .option('--status <filter>', 'Filter by status: draft, ready, merged, closed, local')
819
+ .action(async (options) => {
483
820
  try {
484
821
  const cwd = process.cwd();
485
822
  const config = await loadConfig(cwd);
@@ -487,20 +824,51 @@ program
487
824
  const openspec = createOpenSpecAdapter({ projectRoot: cwd, specDir: config.specDir });
488
825
  const changeIds = await openspec.listChanges();
489
826
  if (changeIds.length === 0) {
490
- console.log('No active changes');
827
+ if (options.json) {
828
+ console.log(JSON.stringify([], null, 2));
829
+ }
830
+ else {
831
+ console.log(chalk.yellow('No active changes'));
832
+ }
491
833
  return;
492
834
  }
493
- console.log('Active changes:');
835
+ const items = [];
494
836
  for (const id of changeIds) {
495
837
  const result = await statusWorkflow({ changeId: id }, { git, openspec });
496
838
  if (result) {
497
- const marker = result.onBranch ? '→ ' : ' ';
498
- console.log(`${marker}${id} (${result.change.state}, ${result.taskSummary.completed}/${result.taskSummary.total} tasks)`);
839
+ items.push({
840
+ id,
841
+ progress: result.taskSummary,
842
+ prStatus: 'local',
843
+ isCurrent: result.onBranch,
844
+ lastActive: new Date(),
845
+ });
499
846
  }
500
847
  }
848
+ // Sort and filter
849
+ let processed = sortItems(items, options.sort);
850
+ if (options.status) {
851
+ processed = filterByStatus(processed, options.status);
852
+ }
853
+ if (options.json) {
854
+ console.log(JSON.stringify(processed, null, 2));
855
+ return;
856
+ }
857
+ if (options.compact) {
858
+ for (const item of processed) {
859
+ const marker = item.isCurrent ? chalk.cyan('→ ') : ' ';
860
+ const bar = createProgressBar(item.progress.percentage, { width: 10 });
861
+ console.log(`${marker}${item.id.padEnd(24)} ${bar} ${item.progress.completed}/${item.progress.total}`);
862
+ }
863
+ }
864
+ else {
865
+ console.log(formatTable(processed));
866
+ console.log();
867
+ console.log(chalk.dim(formatSummary(processed)));
868
+ }
501
869
  }
502
870
  catch (error) {
503
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
871
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
504
872
  process.exit(1);
505
873
  }
506
874
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speclife/cli",
3
- "version": "0.9.2",
3
+ "version": "0.10.0",
4
4
  "description": "CLI for SpecLife - for CI/scripts",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,18 +8,21 @@ description: Merge an approved PR, clean up, and trigger auto-release.
8
8
  - Execute immediately—if PR number provided (#42), use it; if on feature branch, find its PR; if on main, prompt for PR number
9
9
  - Confirm with user only for major (breaking) version bumps
10
10
  - STOP after reporting—GitHub Actions handles release
11
+ - **CRITICAL: Version bump MUST happen before merge (step 4) so it's included in the squash commit**
11
12
 
12
13
  **Steps**
13
14
  1. Find PR: by branch (`gh pr view`) or by number (`gh pr view <num>`); error if not found.
14
15
  2. Check readiness: state=open, approved (or no reviews required), CI passing, no conflicts; report issues and stop if not ready.
15
- 3. Detect version bump from PR title/commits: `feat:` → minor, `fix:/docs:/chore:` → patch, `feat!:/BREAKING CHANGE` → major.
16
- 4. For major bumps: confirm with user; abort if declined (suggest `/speclife release --major` for manual control).
17
- 5. Bump version in feature branch: `npm version <bump> --no-git-tag-version`, commit `chore(release): v<version>`, push.
18
- 6. Squash merge: `gh pr merge --squash --delete-branch`.
19
- 7. Update local: `git checkout main && git pull`.
20
- 8. Cleanup: remove worktree if spec branch (`speclife worktree rm <id>`), else delete local branch.
21
- 9. Report: version bumped, PR merged, cleanup done, GitHub Actions creating release.
16
+ 3. Detect version bump from PR title/commits: `feat:` → minor, `fix:/docs:/chore:` → patch, `feat!:/BREAKING CHANGE` → major. For major bumps: confirm with user; abort if declined.
17
+
18
+ **— Version bump (before merge) —**
19
+ 4. On feature branch: `npm version <bump> --no-git-tag-version`, commit `chore(release): v<version>`, push.
20
+
21
+ **— Merge and cleanup —**
22
+ 5. Squash merge: `gh pr merge --squash --delete-branch`.
23
+ 6. Update local: `git checkout main && git pull`.
24
+ 7. Cleanup: remove worktree if spec branch (`speclife worktree rm <id>`), else delete local branch.
25
+ 8. Report: version bumped, PR merged, cleanup done, GitHub Actions creating release.
22
26
 
23
27
  **Reference**
24
- - Version bump happens BEFORE merge so it's included in squash commit
25
- - Release workflow triggered by `chore(release): vX.X.X` commit message
28
+ - Release workflow triggered by `chore(release): vX.X.X` commit message pattern
@@ -7,7 +7,7 @@ description: Create a new branch for a change, optionally in a worktree for para
7
7
  **Guardrails**
8
8
  - Execute immediately when invoked
9
9
  - Parse input for resume keywords (`resume`, `continue`, `pick up`, `implement <id>`)
10
- - Parse for mode keywords: "in a branch" → branch-only, otherwise → worktree (default)
10
+ - Parse for mode keywords: "in a worktree" or "with worktree" worktree, otherwise → branch-only (default)
11
11
  - STOP after scaffolding—do NOT auto-invoke `/openspec-apply`
12
12
 
13
13
  **Steps**