@speclife/cli 0.9.1 → 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.d.ts CHANGED
@@ -1,10 +1,3 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * SpecLife CLI
4
- *
5
- * Git/GitHub automation for spec-driven development.
6
- * Primary interface is slash commands in your editor.
7
- * This CLI provides git operations for CI/scripting.
8
- */
9
2
  export {};
10
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -1,4 +1,21 @@
1
1
  #!/usr/bin/env node
2
+ /*
3
+ * SpecLife - Git and GitHub automation for spec-driven development
4
+ * Copyright (C) 2026 malarbase
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
18
+ */
2
19
  /**
3
20
  * SpecLife CLI
4
21
  *
@@ -7,15 +24,25 @@
7
24
  * This CLI provides git operations for CI/scripting.
8
25
  */
9
26
  import { Command } from 'commander';
10
- import { readFile, writeFile, mkdir, access, symlink, unlink, readdir } from 'fs/promises';
27
+ import { readFile, writeFile, mkdir, access, readdir } from 'fs/promises';
11
28
  import { join, dirname } from 'path';
12
29
  import { fileURLToPath } from 'url';
13
- 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';
14
41
  const program = new Command();
15
42
  // Get version from package.json
16
43
  const __filename = fileURLToPath(import.meta.url);
17
44
  const __dirname = dirname(__filename);
18
- let version = '0.2.0';
45
+ let version = '0.3.0';
19
46
  try {
20
47
  const pkgPath = join(__dirname, '..', 'package.json');
21
48
  const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
@@ -24,6 +51,35 @@ try {
24
51
  catch {
25
52
  // Use default version
26
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
+ // =============================================================================
27
83
  program
28
84
  .name('speclife')
29
85
  .description('Git/GitHub automation for spec-driven development')
@@ -35,17 +91,26 @@ program
35
91
  .command('init')
36
92
  .description('Configure project for AI editors (one-time setup)')
37
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')
38
97
  .action(async (options) => {
39
98
  try {
40
99
  const cwd = process.cwd();
41
- 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...');
42
108
  // Detect spec directory
43
109
  let specDir = 'openspec';
44
110
  for (const dir of ['openspec', 'specs']) {
45
111
  try {
46
112
  await access(join(cwd, dir));
47
113
  specDir = dir;
48
- console.log(`✓ Found ${dir}/ directory`);
49
114
  break;
50
115
  }
51
116
  catch {
@@ -64,8 +129,74 @@ program
64
129
  catch {
65
130
  // Use default
66
131
  }
67
- 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
+ }
68
198
  // Create .specliferc.yaml
199
+ spinner.start('Creating configuration...');
69
200
  const configPath = join(cwd, '.specliferc.yaml');
70
201
  let configExists = false;
71
202
  try {
@@ -87,69 +218,38 @@ git:
87
218
  worktreeDir: worktrees
88
219
  `;
89
220
  await writeFile(configPath, configContent);
90
- console.log('✓ Created .specliferc.yaml');
91
- }
92
- else {
93
- console.log('✓ .specliferc.yaml already exists (use --force to overwrite)');
94
221
  }
95
- // 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...');
96
225
  const commandsDir = join(cwd, specDir, 'commands', 'speclife');
97
- try {
98
- await mkdir(commandsDir, { recursive: true });
99
- console.log(`✓ Created ${specDir}/commands/speclife/`);
100
- }
101
- catch {
102
- console.log(`✓ ${specDir}/commands/speclife/ already exists`);
103
- }
104
- // Copy slash command templates (from templates embedded in package)
226
+ await mkdir(commandsDir, { recursive: true });
105
227
  const templatesDir = join(__dirname, '..', 'templates', 'commands');
106
228
  const templateFiles = await readdir(templatesDir);
107
229
  const slashCommands = templateFiles
108
230
  .filter(f => f.endsWith('.md'))
109
231
  .map(f => f.replace('.md', ''));
110
232
  let copiedCount = 0;
111
- let skippedCount = 0;
112
- const errors = [];
113
233
  for (const cmd of slashCommands) {
114
234
  const destPath = join(commandsDir, `${cmd}.md`);
115
235
  try {
116
236
  await access(destPath);
117
- if (!options.force) {
118
- skippedCount++;
119
- continue; // Skip existing
120
- }
237
+ if (!options.force)
238
+ continue;
121
239
  }
122
240
  catch {
123
- // File doesn't exist, create it
124
- }
125
- // Try to copy from templates
126
- try {
127
- const templatePath = join(templatesDir, `${cmd}.md`);
128
- const content = await readFile(templatePath, 'utf-8');
129
- await writeFile(destPath, content);
130
- copiedCount++;
131
- }
132
- catch (err) {
133
- errors.push(`${cmd}.md: ${err instanceof Error ? err.message : 'unknown error'}`);
134
- }
135
- }
136
- if (copiedCount > 0) {
137
- console.log(`✓ Created ${copiedCount} slash command(s) in ${specDir}/commands/speclife/`);
138
- }
139
- if (skippedCount > 0) {
140
- console.log(` (${skippedCount} existing command(s) skipped, use --force to overwrite)`);
141
- }
142
- if (errors.length > 0) {
143
- console.log(`⚠️ Failed to copy ${errors.length} template(s):`);
144
- for (const err of errors) {
145
- console.log(` - ${err}`);
241
+ // File doesn't exist
146
242
  }
243
+ const templatePath = join(templatesDir, `${cmd}.md`);
244
+ const content = await readFile(templatePath, 'utf-8');
245
+ await writeFile(destPath, content);
246
+ copiedCount++;
147
247
  }
148
- // Create speclife.md if it doesn't exist
248
+ spinner.succeed(chalk.green(`Installed ${copiedCount} slash commands`));
249
+ // Create speclife.md
149
250
  const speclifeMdPath = join(cwd, specDir, 'speclife.md');
150
251
  try {
151
252
  await access(speclifeMdPath);
152
- console.log(`✓ ${specDir}/speclife.md already exists`);
153
253
  }
154
254
  catch {
155
255
  const speclifeMdContent = `# SpecLife Configuration
@@ -158,199 +258,421 @@ This file provides context for AI agents using speclife slash commands.
158
258
 
159
259
  ## Commands
160
260
 
161
- <!-- Values auto-detected by /speclife setup from package.json, Makefile, Cargo.toml, etc. -->
162
- - **Test:** \`TODO: detect test command\`
163
- - **Build:** \`TODO: detect build command\`
164
- - **Lint:** \`TODO: detect lint command\`
261
+ - **Test:** \`npm test\`
262
+ - **Build:** \`npm run build\`
263
+ - **Lint:** \`npm run lint\`
165
264
 
166
265
  ## Release Policy
167
266
 
168
267
  - **Auto-release:** patch and minor versions
169
268
  - **Manual release:** major versions (breaking changes)
170
269
 
171
- ## Publish
172
-
173
- <!-- Auto-detected by /speclife setup -->
174
- - **Registry:** TODO: detect (npm / PyPI / crates.io / None)
175
- - **Workflow:** TODO: check .github/workflows/publish.yml
176
- - **Secret:** TODO: NPM_TOKEN / PYPI_TOKEN / CARGO_REGISTRY_TOKEN
177
-
178
270
  ## Context Files
179
271
 
180
272
  When implementing changes, always read:
181
273
  - \`${specDir}/project.md\` - project context and conventions
182
274
  - \`${specDir}/AGENTS.md\` - agent guidelines
183
275
  - \`README.md\` - project overview
184
-
185
- ## Notes
186
-
187
- - Run \`/speclife setup\` to auto-detect commands and publish config
188
- - Or manually edit the TODO items above
189
276
  `;
190
277
  await writeFile(speclifeMdPath, speclifeMdContent);
191
- console.log(`✓ Created ${specDir}/speclife.md (template)`);
192
278
  }
193
- // Create GitHub release workflow (only if no release workflow exists)
279
+ // Create GitHub workflow
194
280
  const workflowDir = join(cwd, '.github', 'workflows');
195
- const releaseWorkflows = ['release.yml', 'speclife-release.yml'];
196
- let existingReleaseWorkflow = null;
197
- for (const wf of releaseWorkflows) {
281
+ let existingWorkflow = false;
282
+ for (const wf of ['release.yml', 'speclife-release.yml']) {
198
283
  try {
199
284
  await access(join(workflowDir, wf));
200
- existingReleaseWorkflow = wf;
285
+ existingWorkflow = true;
201
286
  break;
202
287
  }
203
288
  catch {
204
- // Continue checking
289
+ // Continue
205
290
  }
206
291
  }
207
- if (existingReleaseWorkflow) {
208
- console.log(`✓ Release workflow already exists: .github/workflows/${existingReleaseWorkflow}`);
209
- }
210
- else {
211
- try {
212
- await mkdir(workflowDir, { recursive: true });
213
- const workflowContent = `# SpecLife Release Workflow
214
- # Automatically creates GitHub releases when release commits are merged
215
-
292
+ if (!existingWorkflow) {
293
+ await mkdir(workflowDir, { recursive: true });
294
+ const workflowContent = `# SpecLife Release Workflow
216
295
  name: Create Release
217
296
 
218
297
  on:
219
298
  push:
220
- branches:
221
- - ${baseBranch}
299
+ branches: [${baseBranch}]
222
300
 
223
301
  jobs:
224
302
  release:
225
303
  runs-on: ubuntu-latest
226
304
  if: startsWith(github.event.head_commit.message, 'chore(release):')
227
-
228
305
  permissions:
229
306
  contents: write
230
-
231
307
  steps:
232
- - name: Checkout
233
- uses: actions/checkout@v4
234
-
235
- - name: Extract version from commit
308
+ - uses: actions/checkout@v4
309
+ - name: Extract version
236
310
  id: version
237
311
  run: |
238
312
  VERSION=$(echo "\${{ github.event.head_commit.message }}" | grep -oP 'v\\d+\\.\\d+\\.\\d+')
239
313
  echo "version=$VERSION" >> $GITHUB_OUTPUT
240
- echo "Detected version: $VERSION"
241
-
242
- - name: Create and push tag
314
+ - name: Create tag
243
315
  run: |
244
316
  git config user.name "github-actions[bot]"
245
317
  git config user.email "github-actions[bot]@users.noreply.github.com"
246
318
  git tag \${{ steps.version.outputs.version }}
247
319
  git push origin \${{ steps.version.outputs.version }}
248
-
249
- - name: Create GitHub Release
250
- uses: softprops/action-gh-release@v2
320
+ - uses: softprops/action-gh-release@v2
251
321
  with:
252
322
  tag_name: \${{ steps.version.outputs.version }}
253
323
  generate_release_notes: true
254
324
  `;
255
- await writeFile(join(workflowDir, 'speclife-release.yml'), workflowContent);
256
- 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
+ });
337
+ }
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
+ });
384
+ }
385
+ }
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(' ║'));
257
416
  }
258
- catch (err) {
259
- console.log('⚠️ Could not create release workflow');
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(' ║'));
260
425
  }
261
426
  }
262
- // Configure editor symlinks
263
- await configureEditorSymlinks(cwd, specDir, options.force);
264
- console.log('\n✅ SpecLife configured!');
265
- console.log('\nNext steps:');
266
- console.log(' 1. Run /speclife setup to auto-detect project commands');
267
- console.log(' 2. Or manually edit openspec/speclife.md');
268
- console.log(' 3. Use /speclife start to begin a new change');
427
+ console.log(chalk.cyan('╚══════════════════════════════════════════════════════════════╝'));
428
+ console.log();
269
429
  }
270
430
  catch (error) {
271
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
431
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
272
432
  process.exit(1);
273
433
  }
274
434
  });
275
- /**
276
- * Configure editor symlinks for slash commands
277
- */
278
- async function configureEditorSymlinks(cwd, specDir, force) {
279
- const editors = [
280
- { name: 'Cursor', dir: '.cursor' },
281
- { name: 'Claude Code', dir: '.claude' },
282
- ];
283
- const sourceDir = join(cwd, specDir, 'commands', 'speclife');
284
- // Dynamically discover commands from source directory
285
- 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;
286
498
  try {
287
- const files = await readdir(sourceDir);
288
- slashCommands = files
289
- .filter(f => f.endsWith('.md'))
290
- .map(f => f.replace('.md', ''));
499
+ parsedValue = JSON.parse(value);
291
500
  }
292
501
  catch {
293
- // Source directory doesn't exist yet, skip symlinks
294
- return;
502
+ // Keep as string
295
503
  }
296
- for (const editor of editors) {
297
- const editorCommandsDir = join(cwd, editor.dir, 'commands', 'speclife');
298
- 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);
299
564
  try {
300
- // Create editor commands directory
301
- await mkdir(editorCommandsBase, { recursive: true });
302
- // Create symlink for speclife/ directory (or update if force)
303
- try {
304
- await access(editorCommandsDir);
305
- if (force) {
306
- await unlink(editorCommandsDir);
307
- await symlink(sourceDir, editorCommandsDir);
308
- console.log(`✓ Updated ${editor.name} speclife/ symlink`);
309
- }
310
- else {
311
- console.log(`✓ ${editor.name} commands already configured`);
312
- }
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`);
313
579
  }
314
- catch {
315
- await symlink(sourceDir, editorCommandsDir);
316
- 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}`));
317
599
  }
318
- // Create dash-prefixed symlinks for each command
319
- // e.g., speclife-release.md speclife/release.md
320
- let dashLinksCreated = 0;
321
- for (const cmd of slashCommands) {
322
- const dashFile = join(editorCommandsBase, `speclife-${cmd}.md`);
323
- // Use relative path for symlink to be portable
324
- const targetFile = join('speclife', `${cmd}.md`);
325
- try {
326
- await access(dashFile);
327
- if (force) {
328
- await unlink(dashFile);
329
- await symlink(targetFile, dashFile);
330
- dashLinksCreated++;
331
- }
332
- // else: skip existing
333
- }
334
- catch {
335
- // File doesn't exist, create symlink
336
- try {
337
- await symlink(targetFile, dashFile);
338
- dashLinksCreated++;
339
- }
340
- catch {
341
- // Skip if target doesn't exist
342
- }
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;
343
647
  }
344
648
  }
345
- if (dashLinksCreated > 0) {
346
- console.log(`✓ Created ${dashLinksCreated} ${editor.name} dash-prefixed command symlinks`);
649
+ catch {
650
+ // File doesn't exist
347
651
  }
652
+ const content = await readFile(templatePath, 'utf-8');
653
+ await writeFile(destPath, content);
654
+ updated++;
348
655
  }
349
- catch {
350
- // 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
+ }
351
668
  }
669
+ spinner.succeed(chalk.green('Editor symlinks refreshed'));
352
670
  }
353
- }
671
+ catch (error) {
672
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
673
+ process.exit(1);
674
+ }
675
+ });
354
676
  // =============================================================================
355
677
  // speclife worktree - Worktree management
356
678
  // =============================================================================
@@ -366,17 +688,23 @@ worktreeCmd
366
688
  const cwd = process.cwd();
367
689
  const config = await loadConfig(cwd);
368
690
  const git = createGitAdapter(cwd);
691
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
692
+ spinner.start(`Creating worktree for ${changeId}...`);
369
693
  const result = await worktreeCreate({
370
694
  changeId,
371
695
  skipBootstrap: options.skipBootstrap,
372
- }, { git, config }, (event) => console.log(` ${event.message}`));
373
- console.log(`\n✓ Created worktree: ${result.worktreePath}`);
374
- console.log(`✓ Created branch: ${result.branch}`);
375
- console.log(`\nNext: cd ${result.worktreePath}`);
376
- 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`);
377
705
  }
378
706
  catch (error) {
379
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
707
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
380
708
  process.exit(1);
381
709
  }
382
710
  });
@@ -389,40 +717,50 @@ worktreeCmd
389
717
  const cwd = process.cwd();
390
718
  const config = await loadConfig(cwd);
391
719
  const git = createGitAdapter(cwd);
720
+ const spinner = ora({ isSilent: !process.stdout.isTTY });
721
+ spinner.start(`Removing worktree ${changeId}...`);
392
722
  const result = await worktreeRemove({
393
723
  changeId,
394
724
  force: options.force,
395
- }, { git, config }, (event) => console.log(` ${event.message}`));
396
- console.log(`\n✓ Removed worktree: ${result.worktreePath}`);
397
- 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)}`);
398
731
  }
399
732
  catch (error) {
400
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
733
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
401
734
  process.exit(1);
402
735
  }
403
736
  });
404
737
  worktreeCmd
405
738
  .command('list')
406
739
  .description('List all active worktrees')
407
- .action(async () => {
740
+ .option('--json', 'Output as JSON')
741
+ .action(async (options) => {
408
742
  try {
409
743
  const cwd = process.cwd();
410
744
  const config = await loadConfig(cwd);
411
745
  const git = createGitAdapter(cwd);
412
746
  const result = await worktreeList({ git, config });
747
+ if (options.json) {
748
+ console.log(JSON.stringify(result.worktrees, null, 2));
749
+ return;
750
+ }
413
751
  if (result.worktrees.length === 0) {
414
- console.log('No active worktrees');
752
+ console.log(chalk.yellow('No active worktrees'));
415
753
  return;
416
754
  }
417
- console.log('Active worktrees:');
755
+ console.log(chalk.bold('Active worktrees:'));
418
756
  for (const wt of result.worktrees) {
419
- console.log(` ${wt.changeId}`);
420
- console.log(` Branch: ${wt.branch}`);
421
- 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}`);
422
760
  }
423
761
  }
424
762
  catch (error) {
425
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
763
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
426
764
  process.exit(1);
427
765
  }
428
766
  });
@@ -432,7 +770,8 @@ worktreeCmd
432
770
  program
433
771
  .command('status [change-id]')
434
772
  .description('Show status of a change')
435
- .action(async (changeId) => {
773
+ .option('--json', 'Output as JSON')
774
+ .action(async (changeId, options) => {
436
775
  try {
437
776
  const cwd = process.cwd();
438
777
  const config = await loadConfig(cwd);
@@ -440,19 +779,30 @@ program
440
779
  const openspec = createOpenSpecAdapter({ projectRoot: cwd, specDir: config.specDir });
441
780
  const result = await statusWorkflow({ changeId }, { git, openspec });
442
781
  if (!result) {
443
- console.log(changeId
782
+ const msg = changeId
444
783
  ? `Change '${changeId}' not found`
445
- : '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
+ }
446
791
  return;
447
792
  }
448
793
  const { change, onBranch, taskSummary } = result;
449
- console.log(`Change: ${change.id}`);
450
- console.log(`State: ${change.state}`);
451
- console.log(`Branch: ${change.branch}${onBranch ? ' (current)' : ''}`);
452
- 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}`);
453
803
  }
454
804
  catch (error) {
455
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
805
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
456
806
  process.exit(1);
457
807
  }
458
808
  });
@@ -462,7 +812,11 @@ program
462
812
  program
463
813
  .command('list')
464
814
  .description('List all active changes')
465
- .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) => {
466
820
  try {
467
821
  const cwd = process.cwd();
468
822
  const config = await loadConfig(cwd);
@@ -470,20 +824,51 @@ program
470
824
  const openspec = createOpenSpecAdapter({ projectRoot: cwd, specDir: config.specDir });
471
825
  const changeIds = await openspec.listChanges();
472
826
  if (changeIds.length === 0) {
473
- 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
+ }
474
833
  return;
475
834
  }
476
- console.log('Active changes:');
835
+ const items = [];
477
836
  for (const id of changeIds) {
478
837
  const result = await statusWorkflow({ changeId: id }, { git, openspec });
479
838
  if (result) {
480
- const marker = result.onBranch ? '→ ' : ' ';
481
- 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
+ });
482
846
  }
483
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
+ }
484
869
  }
485
870
  catch (error) {
486
- console.error(`Error: ${error instanceof Error ? error.message : error}`);
871
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
487
872
  process.exit(1);
488
873
  }
489
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.1",
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
@@ -8,6 +8,7 @@ description: Formalize ad-hoc changes on main into a spec-tracked change for rev
8
8
  - Execute immediately—must be on `main` with uncommitted changes or unpushed commits
9
9
  - Generate spec from actual changes (retrospective), not speculation
10
10
  - STOP after PR created—do NOT auto-invoke `/speclife land`
11
+ - Do NOT manually replicate `openspec archive`—run the command and report errors if it fails
11
12
 
12
13
  **Steps**
13
14
  1. Detect changes: `git status --short` and `git log origin/main..HEAD --oneline`; error if no changes.
@@ -8,6 +8,7 @@ description: Commit changes, push to remote, and create a PR for review.
8
8
  - Execute immediately—do not ask for confirmation
9
9
  - Detect branch type: `spec/*` = full OpenSpec workflow, other non-main = ad-hoc, `main` = error
10
10
  - STOP after PR created—do NOT auto-invoke `/speclife land`
11
+ - Do NOT manually replicate `openspec` commands—run them and report errors if they fail
11
12
 
12
13
  **Steps**
13
14
  1. For spec branches: run `openspec validate <id>`, commit changes, run `openspec archive <id> --yes`, commit archive.
@@ -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**