@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 +573 -205
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/land.md +12 -9
- package/templates/commands/start.md +1 -1
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,
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
136
|
-
continue; // Skip existing
|
|
137
|
-
}
|
|
237
|
+
if (!options.force)
|
|
238
|
+
continue;
|
|
138
239
|
}
|
|
139
240
|
catch {
|
|
140
|
-
// File doesn't exist
|
|
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
|
-
|
|
150
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
|
-
|
|
179
|
-
- **
|
|
180
|
-
- **
|
|
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
|
|
279
|
+
// Create GitHub workflow
|
|
211
280
|
const workflowDir = join(cwd, '.github', 'workflows');
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
|
|
285
|
+
existingWorkflow = true;
|
|
218
286
|
break;
|
|
219
287
|
}
|
|
220
288
|
catch {
|
|
221
|
-
// Continue
|
|
289
|
+
// Continue
|
|
222
290
|
}
|
|
223
291
|
}
|
|
224
|
-
if (
|
|
225
|
-
|
|
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
|
-
-
|
|
250
|
-
|
|
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
|
-
|
|
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
|
-
|
|
273
|
-
|
|
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
|
-
|
|
276
|
-
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
311
|
-
return;
|
|
502
|
+
// Keep as string
|
|
312
503
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
for (const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
-
|
|
363
|
-
|
|
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
|
-
|
|
367
|
-
|
|
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) =>
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
console.log('
|
|
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) =>
|
|
413
|
-
|
|
414
|
-
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
498
|
-
|
|
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
|
@@ -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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
-
|
|
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
|
|
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**
|