@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 +0 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +590 -205
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/land.md +12 -9
- package/templates/commands/retrofit.md +1 -0
- package/templates/commands/ship.md +1 -0
- package/templates/commands/start.md +1 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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,
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
119
|
-
continue; // Skip existing
|
|
120
|
-
}
|
|
237
|
+
if (!options.force)
|
|
238
|
+
continue;
|
|
121
239
|
}
|
|
122
240
|
catch {
|
|
123
|
-
// File doesn't exist
|
|
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
|
-
|
|
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
|
-
|
|
162
|
-
- **
|
|
163
|
-
- **
|
|
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
|
|
279
|
+
// Create GitHub workflow
|
|
194
280
|
const workflowDir = join(cwd, '.github', 'workflows');
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
285
|
+
existingWorkflow = true;
|
|
201
286
|
break;
|
|
202
287
|
}
|
|
203
288
|
catch {
|
|
204
|
-
// Continue
|
|
289
|
+
// Continue
|
|
205
290
|
}
|
|
206
291
|
}
|
|
207
|
-
if (
|
|
208
|
-
|
|
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
|
-
-
|
|
233
|
-
|
|
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
|
-
|
|
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
|
-
|
|
256
|
-
|
|
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
|
-
|
|
259
|
-
|
|
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
|
-
|
|
263
|
-
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
294
|
-
return;
|
|
502
|
+
// Keep as string
|
|
295
503
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
for (const
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
346
|
-
|
|
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
|
-
|
|
350
|
-
|
|
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) =>
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
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`);
|
|
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) =>
|
|
396
|
-
|
|
397
|
-
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
481
|
-
|
|
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
|
@@ -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
|
|
@@ -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
|
|
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**
|