specweave 1.0.129 → 1.0.131
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/README.md +12 -2
- package/bin/specweave.js +19 -0
- package/dist/src/cli/commands/update-instructions.d.ts +1 -0
- package/dist/src/cli/commands/update-instructions.d.ts.map +1 -1
- package/dist/src/cli/commands/update-instructions.js +71 -0
- package/dist/src/cli/commands/update-instructions.js.map +1 -1
- package/dist/src/cli/commands/update.d.ts +47 -0
- package/dist/src/cli/commands/update.d.ts.map +1 -0
- package/dist/src/cli/commands/update.js +344 -0
- package/dist/src/cli/commands/update.js.map +1 -0
- package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/directory-structure.js +39 -4
- package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
- package/dist/src/cli/helpers/init/gitignore-generator.d.ts +72 -0
- package/dist/src/cli/helpers/init/gitignore-generator.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/gitignore-generator.js +685 -0
- package/dist/src/cli/helpers/init/gitignore-generator.js.map +1 -0
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.js +25 -25
- package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
- package/dist/src/config/types.d.ts +4 -4
- package/dist/src/core/deployment/project-analyzer.d.ts.map +1 -1
- package/dist/src/core/deployment/project-analyzer.js +2 -1
- package/dist/src/core/deployment/project-analyzer.js.map +1 -1
- package/dist/src/core/lazy-loading/keyword-detector.d.ts +35 -5
- package/dist/src/core/lazy-loading/keyword-detector.d.ts.map +1 -1
- package/dist/src/core/lazy-loading/keyword-detector.js +516 -32
- package/dist/src/core/lazy-loading/keyword-detector.js.map +1 -1
- package/dist/src/core/plugins/plugin-loader.d.ts +14 -0
- package/dist/src/core/plugins/plugin-loader.d.ts.map +1 -1
- package/dist/src/core/plugins/plugin-loader.js +53 -0
- package/dist/src/core/plugins/plugin-loader.js.map +1 -1
- package/dist/src/core/reflection/learning-validator.d.ts +102 -0
- package/dist/src/core/reflection/learning-validator.d.ts.map +1 -0
- package/dist/src/core/reflection/learning-validator.js +351 -0
- package/dist/src/core/reflection/learning-validator.js.map +1 -0
- package/dist/src/core/skills/activation-tracker.d.ts +61 -0
- package/dist/src/core/skills/activation-tracker.d.ts.map +1 -0
- package/dist/src/core/skills/activation-tracker.js +150 -0
- package/dist/src/core/skills/activation-tracker.js.map +1 -0
- package/dist/src/core/skills/api-validator.d.ts +192 -0
- package/dist/src/core/skills/api-validator.d.ts.map +1 -0
- package/dist/src/core/skills/api-validator.js +434 -0
- package/dist/src/core/skills/api-validator.js.map +1 -0
- package/dist/src/core/skills/skill-judge.d.ts +108 -0
- package/dist/src/core/skills/skill-judge.d.ts.map +1 -0
- package/dist/src/core/skills/skill-judge.js +451 -0
- package/dist/src/core/skills/skill-judge.js.map +1 -0
- package/dist/src/core/skills/skill-validator.d.ts +174 -0
- package/dist/src/core/skills/skill-validator.d.ts.map +1 -0
- package/dist/src/core/skills/skill-validator.js +468 -0
- package/dist/src/core/skills/skill-validator.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +2 -2
- package/package.json +1 -1
- package/plugins/PLUGINS-INDEX.md +13 -3
- package/plugins/specweave/commands/judge-llm.md +37 -0
- package/plugins/specweave/commands/npm.md +697 -0
- package/plugins/specweave/hooks/stop-auto.sh +173 -4
- package/plugins/specweave/hooks/user-prompt-submit.sh +21 -2
- package/plugins/specweave/hooks/validate-skill-activations.sh +259 -0
- package/plugins/specweave/lib/vendor/utils/credential-masker.d.ts +118 -0
- package/plugins/specweave/lib/vendor/utils/credential-masker.js +275 -0
- package/plugins/specweave/lib/vendor/utils/credential-masker.js.map +1 -0
- package/plugins/specweave/skills/self-validating-example/SKILL.md +145 -0
- package/plugins/specweave-infrastructure/skills/deploy-router/SKILL.md +162 -0
- package/plugins/specweave-testing/.claude-plugin/plugin.json +7 -2
- package/plugins/specweave-testing/commands/image.md +124 -0
- package/plugins/specweave-testing/commands/ui-automate.md +176 -0
- package/plugins/specweave-testing/commands/ui-inspect.md +70 -0
- package/plugins/specweave-testing/skills/browser-automation/SKILL.md +314 -0
- package/plugins/specweave-testing/skills/image-generation/SKILL.md +386 -0
- package/plugins/specweave-testing/skills/ui-testing/SKILL.md +604 -0
- package/plugins/specweave-testing/skills/visual-regression/SKILL.md +728 -0
- package/plugins/specweave-ui/.claude-plugin/plugin.json +3 -1
package/README.md
CHANGED
|
@@ -207,8 +207,9 @@ Then in Claude Code:
|
|
|
207
207
|
|
|
208
208
|
**Troubleshooting** - if commands/skills stop working:
|
|
209
209
|
```bash
|
|
210
|
-
specweave
|
|
211
|
-
specweave update
|
|
210
|
+
specweave update # Full update: CLI + instructions + config (recommended)
|
|
211
|
+
specweave update --plugins # Also refresh marketplace plugins
|
|
212
|
+
specweave refresh-marketplace # Reinstall all plugins from GitHub (standalone)
|
|
212
213
|
```
|
|
213
214
|
|
|
214
215
|
**[Full Quickstart Guide ->](https://spec-weave.com/docs/guides/getting-started/quickstart)**
|
|
@@ -384,6 +385,15 @@ Anthropic doesn't just use standards — they **define** them. SpecWeave builds
|
|
|
384
385
|
| `/sw:sync-progress` | Push to GitHub/JIRA/ADO |
|
|
385
386
|
| `/sw:cancel-auto` | Stop autonomous session |
|
|
386
387
|
|
|
388
|
+
### CLI Commands
|
|
389
|
+
|
|
390
|
+
| Command | Purpose |
|
|
391
|
+
|---------|---------|
|
|
392
|
+
| `specweave update` | **Full update**: CLI (self-update via npm), instructions, config |
|
|
393
|
+
| `specweave update --plugins` | Update + refresh marketplace plugins |
|
|
394
|
+
| `specweave refresh-marketplace` | Reinstall plugins from GitHub |
|
|
395
|
+
| `specweave init .` | Initialize project |
|
|
396
|
+
|
|
387
397
|
**[53 total commands ->](https://spec-weave.com/docs/commands/overview)**
|
|
388
398
|
|
|
389
399
|
---
|
package/bin/specweave.js
CHANGED
|
@@ -508,6 +508,21 @@ program
|
|
|
508
508
|
await updateInstructionsCommand(options);
|
|
509
509
|
});
|
|
510
510
|
|
|
511
|
+
// Unified update command - One-stop update for everything (self-updates CLI by default)
|
|
512
|
+
program
|
|
513
|
+
.command('update')
|
|
514
|
+
.description('Update SpecWeave: CLI (via npm), instructions, config, and optionally plugins')
|
|
515
|
+
.option('--no-self', 'Skip CLI self-update via npm')
|
|
516
|
+
.option('--plugins', 'Also refresh marketplace plugins')
|
|
517
|
+
.option('--all', 'Full update including all plugins (not just router)')
|
|
518
|
+
.option('--check', 'Dry run - show what would change without making changes')
|
|
519
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
520
|
+
.option('-f, --force', 'Force refresh even if up to date')
|
|
521
|
+
.action(async (options) => {
|
|
522
|
+
const { updateCommand } = await import('../dist/src/cli/commands/update.js');
|
|
523
|
+
await updateCommand(options);
|
|
524
|
+
});
|
|
525
|
+
|
|
511
526
|
// Check discipline command - Validate increment discipline
|
|
512
527
|
program
|
|
513
528
|
.command('check-discipline')
|
|
@@ -1098,6 +1113,10 @@ program.on('--help', () => {
|
|
|
1098
1113
|
console.log(' $ specweave refresh-marketplace --local # Use local dev version');
|
|
1099
1114
|
console.log(' $ specweave migrate-memory # Migrate legacy memory files');
|
|
1100
1115
|
console.log(' $ specweave migrate-memory --dry-run # Preview migration');
|
|
1116
|
+
console.log(' $ specweave update # Update CLI + instructions + config');
|
|
1117
|
+
console.log(' $ specweave update --plugins # Also refresh marketplace plugins');
|
|
1118
|
+
console.log(' $ specweave update --no-self # Skip CLI update, only project files');
|
|
1119
|
+
console.log(' $ specweave update --check # Dry run - preview changes');
|
|
1101
1120
|
console.log(' $ specweave load-plugins # Load all plugins');
|
|
1102
1121
|
console.log(' $ specweave load-plugins github # Load GitHub plugin group');
|
|
1103
1122
|
console.log(' $ specweave load-plugins infra --force # Force reload infra plugins');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-instructions.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/update-instructions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update-instructions.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/update-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,UAAU,yBAAyB;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAeD;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAmEf"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Smart merge for CLAUDE.md and AGENTS.md instruction files.
|
|
5
5
|
* Preserves user customizations while updating SpecWeave sections.
|
|
6
|
+
* Also migrates config.json to add missing sections (v1.0.131+).
|
|
6
7
|
*/
|
|
7
8
|
import * as fs from '../../utils/fs-native.js';
|
|
8
9
|
import * as path from 'path';
|
|
@@ -11,6 +12,18 @@ import { mergeInstructionFile, parseTemplateSections, getPackageVersion } from '
|
|
|
11
12
|
import { findSourceDir } from '../helpers/init/path-utils.js';
|
|
12
13
|
import { getDirname } from '../../utils/esm-helpers.js';
|
|
13
14
|
const __dirname = getDirname(import.meta.url);
|
|
15
|
+
/**
|
|
16
|
+
* Default auto configuration (v1.0.131+)
|
|
17
|
+
* Added to old projects missing this section
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_AUTO_CONFIG = {
|
|
20
|
+
enabled: true,
|
|
21
|
+
maxRetries: 20,
|
|
22
|
+
requireTests: false,
|
|
23
|
+
requireValidation: true,
|
|
24
|
+
requireJudgeLLM: false,
|
|
25
|
+
skipQualityGates: false,
|
|
26
|
+
};
|
|
14
27
|
/**
|
|
15
28
|
* CLI command to update CLAUDE.md and AGENTS.md with smart merge
|
|
16
29
|
*/
|
|
@@ -20,6 +33,8 @@ export async function updateInstructionsCommand(options = {}) {
|
|
|
20
33
|
console.log(chalk.blue('\n📄 Updating Instruction Files'));
|
|
21
34
|
console.log(chalk.gray(' Version: ' + version));
|
|
22
35
|
console.log(chalk.gray(' Project: ' + projectPath + '\n'));
|
|
36
|
+
// Migrate config.json (add missing sections)
|
|
37
|
+
const configMigrated = await migrateConfig(projectPath, options);
|
|
23
38
|
// Find templates directory
|
|
24
39
|
const templatesDir = findSourceDir('templates', __dirname);
|
|
25
40
|
if (!templatesDir || !fs.existsSync(templatesDir)) {
|
|
@@ -34,6 +49,10 @@ export async function updateInstructionsCommand(options = {}) {
|
|
|
34
49
|
console.log(chalk.blue('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
35
50
|
console.log(chalk.blue(' Summary'));
|
|
36
51
|
console.log(chalk.blue('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
|
|
52
|
+
if (configMigrated.sectionsAdded > 0) {
|
|
53
|
+
console.log(' config.json: ' + chalk.blue('migrated'));
|
|
54
|
+
console.log(chalk.gray(' Added ' + configMigrated.sectionsAdded + ' missing section(s): ' + configMigrated.sections.join(', ')));
|
|
55
|
+
}
|
|
37
56
|
if (claudeResult.action !== 'skipped') {
|
|
38
57
|
console.log(' CLAUDE.md: ' + formatAction(claudeResult.action));
|
|
39
58
|
if (claudeResult.preserved > 0) {
|
|
@@ -131,4 +150,56 @@ function formatAction(action) {
|
|
|
131
150
|
return action;
|
|
132
151
|
}
|
|
133
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Migrate config.json to add missing sections
|
|
155
|
+
*
|
|
156
|
+
* v1.0.131+: Adds 'auto' section for stop hook circuit breaker config
|
|
157
|
+
*
|
|
158
|
+
* This is safe and idempotent:
|
|
159
|
+
* - Only adds sections that don't exist
|
|
160
|
+
* - Preserves all existing configuration
|
|
161
|
+
* - Can be run multiple times
|
|
162
|
+
*/
|
|
163
|
+
async function migrateConfig(projectPath, options) {
|
|
164
|
+
const configPath = path.join(projectPath, '.specweave', 'config.json');
|
|
165
|
+
const sectionsAdded = [];
|
|
166
|
+
if (!fs.existsSync(configPath)) {
|
|
167
|
+
if (options.verbose) {
|
|
168
|
+
console.log(chalk.gray(' ⊘ config.json: not found, skipping migration'));
|
|
169
|
+
}
|
|
170
|
+
return { sectionsAdded: 0, sections: [] };
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
174
|
+
const config = JSON.parse(configContent);
|
|
175
|
+
let modified = false;
|
|
176
|
+
// Add 'auto' section if missing (v1.0.131+)
|
|
177
|
+
if (!config.auto) {
|
|
178
|
+
config.auto = DEFAULT_AUTO_CONFIG;
|
|
179
|
+
sectionsAdded.push('auto');
|
|
180
|
+
modified = true;
|
|
181
|
+
}
|
|
182
|
+
// Future migrations can be added here:
|
|
183
|
+
// if (!config.someOtherSection) { ... }
|
|
184
|
+
if (modified) {
|
|
185
|
+
if (options.dryRun) {
|
|
186
|
+
console.log(chalk.yellow(' ○ config.json: would add missing sections: ' + sectionsAdded.join(', ')));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
190
|
+
console.log(chalk.blue(' ✓ config.json: added missing sections'));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (options.verbose) {
|
|
194
|
+
console.log(chalk.gray(' ⊘ config.json: already up to date'));
|
|
195
|
+
}
|
|
196
|
+
return { sectionsAdded: sectionsAdded.length, sections: sectionsAdded };
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
if (options.verbose) {
|
|
200
|
+
console.log(chalk.yellow(' ⚠ config.json: could not parse, skipping migration'));
|
|
201
|
+
}
|
|
202
|
+
return { sectionsAdded: 0, sections: [] };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
134
205
|
//# sourceMappingURL=update-instructions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-instructions.js","sourceRoot":"","sources":["../../../../src/cli/commands/update-instructions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update-instructions.js","sourceRoot":"","sources":["../../../../src/cli/commands/update-instructions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SpecWeave Update Command
|
|
4
|
+
*
|
|
5
|
+
* Unified update command for keeping SpecWeave up-to-date.
|
|
6
|
+
* This is the recommended command for users to run when updating.
|
|
7
|
+
*
|
|
8
|
+
* What it does (by default):
|
|
9
|
+
* 1. Self-updates SpecWeave CLI via npm (npm i -g specweave@latest)
|
|
10
|
+
* 2. Migrates config.json (adds missing sections like 'auto')
|
|
11
|
+
* 3. Updates instruction files (CLAUDE.md, AGENTS.md)
|
|
12
|
+
* 4. Validates project health
|
|
13
|
+
* 5. Refreshes marketplace plugins (optional, with --plugins)
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* specweave update # Update CLI + instructions + config
|
|
17
|
+
* specweave update --plugins # Also refresh marketplace plugins
|
|
18
|
+
* specweave update --all # Full update including all plugins
|
|
19
|
+
* specweave update --no-self # Skip CLI update, only project files
|
|
20
|
+
* specweave update --check # Dry run - show what would change
|
|
21
|
+
*
|
|
22
|
+
* @since 1.0.131
|
|
23
|
+
*/
|
|
24
|
+
interface UpdateOptions {
|
|
25
|
+
/** Also refresh marketplace plugins */
|
|
26
|
+
plugins?: boolean;
|
|
27
|
+
/** Install all plugins (not just router) */
|
|
28
|
+
all?: boolean;
|
|
29
|
+
/** Dry run - show what would change */
|
|
30
|
+
check?: boolean;
|
|
31
|
+
/** Verbose output */
|
|
32
|
+
verbose?: boolean;
|
|
33
|
+
/** Force refresh even if up to date */
|
|
34
|
+
force?: boolean;
|
|
35
|
+
/** Skip self-update of specweave CLI (default: false, CLI updates by default) */
|
|
36
|
+
noSelf?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Main update command
|
|
40
|
+
*/
|
|
41
|
+
export declare function updateCommand(options?: UpdateOptions): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Register command with Commander
|
|
44
|
+
*/
|
|
45
|
+
export declare function registerUpdateCommand(program: import('commander').Command): void;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/update.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,UAAU,aAAa;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAYD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+J9E;AAgLD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI,CAahF"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SpecWeave Update Command
|
|
4
|
+
*
|
|
5
|
+
* Unified update command for keeping SpecWeave up-to-date.
|
|
6
|
+
* This is the recommended command for users to run when updating.
|
|
7
|
+
*
|
|
8
|
+
* What it does (by default):
|
|
9
|
+
* 1. Self-updates SpecWeave CLI via npm (npm i -g specweave@latest)
|
|
10
|
+
* 2. Migrates config.json (adds missing sections like 'auto')
|
|
11
|
+
* 3. Updates instruction files (CLAUDE.md, AGENTS.md)
|
|
12
|
+
* 4. Validates project health
|
|
13
|
+
* 5. Refreshes marketplace plugins (optional, with --plugins)
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* specweave update # Update CLI + instructions + config
|
|
17
|
+
* specweave update --plugins # Also refresh marketplace plugins
|
|
18
|
+
* specweave update --all # Full update including all plugins
|
|
19
|
+
* specweave update --no-self # Skip CLI update, only project files
|
|
20
|
+
* specweave update --check # Dry run - show what would change
|
|
21
|
+
*
|
|
22
|
+
* @since 1.0.131
|
|
23
|
+
*/
|
|
24
|
+
import chalk from 'chalk';
|
|
25
|
+
import * as fs from 'fs';
|
|
26
|
+
import * as path from 'path';
|
|
27
|
+
import ora from 'ora';
|
|
28
|
+
import { execSync } from 'child_process';
|
|
29
|
+
import { updateInstructionsCommand } from './update-instructions.js';
|
|
30
|
+
import { refreshMarketplaceCommand } from './refresh-marketplace.js';
|
|
31
|
+
import { getPackageVersion } from '../helpers/init/instruction-file-merger.js';
|
|
32
|
+
/**
|
|
33
|
+
* Main update command
|
|
34
|
+
*/
|
|
35
|
+
export async function updateCommand(options = {}) {
|
|
36
|
+
const projectPath = process.cwd();
|
|
37
|
+
const version = getPackageVersion();
|
|
38
|
+
const isSpecWeaveProject = fs.existsSync(path.join(projectPath, '.specweave'));
|
|
39
|
+
console.log(chalk.blue.bold('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
40
|
+
console.log(chalk.blue.bold(' SpecWeave Update'));
|
|
41
|
+
console.log(chalk.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
|
|
42
|
+
console.log(chalk.gray(` Version: ${version}`));
|
|
43
|
+
console.log(chalk.gray(` Project: ${projectPath}`));
|
|
44
|
+
if (options.check) {
|
|
45
|
+
console.log(chalk.yellow('\n Mode: DRY RUN (no changes will be made)\n'));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log('');
|
|
49
|
+
}
|
|
50
|
+
const result = {
|
|
51
|
+
configMigrated: false,
|
|
52
|
+
instructionsUpdated: false,
|
|
53
|
+
pluginsRefreshed: false,
|
|
54
|
+
selfUpdated: false,
|
|
55
|
+
errors: [],
|
|
56
|
+
warnings: [],
|
|
57
|
+
};
|
|
58
|
+
const spinner = ora();
|
|
59
|
+
// Step 0: Self-update SpecWeave CLI (default: ON, skip with --no-self)
|
|
60
|
+
if (!options.noSelf) {
|
|
61
|
+
const selfUpdateResult = await selfUpdateSpecWeave(version, options, spinner);
|
|
62
|
+
result.selfUpdated = selfUpdateResult.updated;
|
|
63
|
+
result.newVersion = selfUpdateResult.newVersion;
|
|
64
|
+
if (selfUpdateResult.error) {
|
|
65
|
+
result.errors.push(selfUpdateResult.error);
|
|
66
|
+
}
|
|
67
|
+
// If self-update happened, recommend restarting
|
|
68
|
+
if (result.selfUpdated) {
|
|
69
|
+
console.log(chalk.green(`\n✓ SpecWeave updated to ${result.newVersion}`));
|
|
70
|
+
console.log(chalk.yellow(' Please restart your terminal and run this command again.\n'));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Check if this is a SpecWeave project
|
|
75
|
+
if (!isSpecWeaveProject) {
|
|
76
|
+
console.log(chalk.yellow('⚠️ Not a SpecWeave project (no .specweave directory found)'));
|
|
77
|
+
console.log(chalk.gray(' Run: specweave init\n'));
|
|
78
|
+
// Still allow plugins refresh for global updates
|
|
79
|
+
if (options.plugins || options.all) {
|
|
80
|
+
console.log(chalk.blue('Proceeding with plugins refresh only...\n'));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Step 1: Update instructions & migrate config
|
|
87
|
+
if (isSpecWeaveProject) {
|
|
88
|
+
spinner.start('Updating instructions and config...');
|
|
89
|
+
try {
|
|
90
|
+
await updateInstructionsCommand({
|
|
91
|
+
dryRun: options.check,
|
|
92
|
+
verbose: options.verbose,
|
|
93
|
+
});
|
|
94
|
+
result.instructionsUpdated = true;
|
|
95
|
+
result.configMigrated = true; // updateInstructionsCommand now handles this
|
|
96
|
+
spinner.succeed('Instructions and config updated');
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
spinner.fail('Failed to update instructions');
|
|
100
|
+
result.errors.push(`Instructions update failed: ${error}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Step 2: Validate project health (quick checks)
|
|
104
|
+
if (isSpecWeaveProject && !options.check) {
|
|
105
|
+
spinner.start('Validating project health...');
|
|
106
|
+
const healthIssues = await validateProjectHealth(projectPath);
|
|
107
|
+
if (healthIssues.length > 0) {
|
|
108
|
+
spinner.warn(`Found ${healthIssues.length} issue(s)`);
|
|
109
|
+
result.warnings.push(...healthIssues);
|
|
110
|
+
if (options.verbose) {
|
|
111
|
+
healthIssues.forEach(issue => {
|
|
112
|
+
console.log(chalk.yellow(` - ${issue}`));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
spinner.succeed('Project health OK');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Step 3: Refresh plugins (if requested)
|
|
121
|
+
if (options.plugins || options.all) {
|
|
122
|
+
console.log('');
|
|
123
|
+
spinner.start('Refreshing marketplace plugins...');
|
|
124
|
+
spinner.stop();
|
|
125
|
+
try {
|
|
126
|
+
await refreshMarketplaceCommand({
|
|
127
|
+
all: options.all,
|
|
128
|
+
force: options.force,
|
|
129
|
+
verbose: options.verbose,
|
|
130
|
+
});
|
|
131
|
+
result.pluginsRefreshed = true;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
result.errors.push(`Plugin refresh failed: ${error}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Summary
|
|
138
|
+
console.log(chalk.blue.bold('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
139
|
+
console.log(chalk.blue.bold(' Update Summary'));
|
|
140
|
+
console.log(chalk.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
|
|
141
|
+
if (isSpecWeaveProject) {
|
|
142
|
+
console.log(` Config: ${result.configMigrated ? chalk.green('✓ Updated') : chalk.gray('No changes')}`);
|
|
143
|
+
console.log(` Instructions: ${result.instructionsUpdated ? chalk.green('✓ Updated') : chalk.gray('No changes')}`);
|
|
144
|
+
}
|
|
145
|
+
if (options.plugins || options.all) {
|
|
146
|
+
console.log(` Plugins: ${result.pluginsRefreshed ? chalk.green('✓ Refreshed') : chalk.red('Failed')}`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log(chalk.gray(` Plugins: Skipped (use --plugins to refresh)`));
|
|
150
|
+
}
|
|
151
|
+
if (result.warnings.length > 0) {
|
|
152
|
+
console.log(chalk.yellow(`\n Warnings: ${result.warnings.length}`));
|
|
153
|
+
if (!options.verbose) {
|
|
154
|
+
console.log(chalk.gray(' Use --verbose to see details'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (result.errors.length > 0) {
|
|
158
|
+
console.log(chalk.red(`\n Errors: ${result.errors.length}`));
|
|
159
|
+
result.errors.forEach(err => {
|
|
160
|
+
console.log(chalk.red(` - ${err}`));
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// Next steps
|
|
164
|
+
console.log(chalk.blue('\n Next steps:'));
|
|
165
|
+
if (options.plugins || options.all) {
|
|
166
|
+
console.log(chalk.gray(' 1. Restart Claude Code for plugin changes'));
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.log(chalk.gray(' 1. Run `specweave update --plugins` to also refresh plugins'));
|
|
170
|
+
}
|
|
171
|
+
if (result.warnings.length > 0) {
|
|
172
|
+
console.log(chalk.gray(' 2. Review warnings above'));
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Quick project health validation
|
|
178
|
+
*/
|
|
179
|
+
async function validateProjectHealth(projectPath) {
|
|
180
|
+
const issues = [];
|
|
181
|
+
// Check config.json exists and is valid
|
|
182
|
+
const configPath = path.join(projectPath, '.specweave', 'config.json');
|
|
183
|
+
if (fs.existsSync(configPath)) {
|
|
184
|
+
try {
|
|
185
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
186
|
+
// Check for missing recommended sections
|
|
187
|
+
if (!config.auto) {
|
|
188
|
+
issues.push('Missing "auto" section in config.json (will be added)');
|
|
189
|
+
}
|
|
190
|
+
if (!config.project?.name) {
|
|
191
|
+
issues.push('Missing project.name in config.json');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
issues.push('config.json is invalid JSON');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
issues.push('config.json not found');
|
|
200
|
+
}
|
|
201
|
+
// Check for orphaned state files
|
|
202
|
+
const stateDir = path.join(projectPath, '.specweave', 'state');
|
|
203
|
+
if (fs.existsSync(stateDir)) {
|
|
204
|
+
const staleFiles = [
|
|
205
|
+
'auto-mode.json',
|
|
206
|
+
'auto-session.json',
|
|
207
|
+
'.stop-auto-dedup',
|
|
208
|
+
'.stop-auto-last-fire',
|
|
209
|
+
'.stop-auto-retry',
|
|
210
|
+
];
|
|
211
|
+
for (const file of staleFiles) {
|
|
212
|
+
const filePath = path.join(stateDir, file);
|
|
213
|
+
if (fs.existsSync(filePath)) {
|
|
214
|
+
try {
|
|
215
|
+
const stats = fs.statSync(filePath);
|
|
216
|
+
const ageHours = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60);
|
|
217
|
+
// Warn if state file is older than 24 hours
|
|
218
|
+
if (ageHours > 24) {
|
|
219
|
+
issues.push(`Stale state file: ${file} (${Math.floor(ageHours)}h old)`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Ignore stat errors
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Check for too many active increments
|
|
229
|
+
const incrementsDir = path.join(projectPath, '.specweave', 'increments');
|
|
230
|
+
if (fs.existsSync(incrementsDir)) {
|
|
231
|
+
try {
|
|
232
|
+
const dirs = fs.readdirSync(incrementsDir).filter(name => /^\d{4}/.test(name));
|
|
233
|
+
let activeCount = 0;
|
|
234
|
+
for (const dir of dirs) {
|
|
235
|
+
const metadataPath = path.join(incrementsDir, dir, 'metadata.json');
|
|
236
|
+
if (fs.existsSync(metadataPath)) {
|
|
237
|
+
try {
|
|
238
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
|
|
239
|
+
if (metadata.status === 'active' || metadata.status === 'in-progress') {
|
|
240
|
+
activeCount++;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Ignore parse errors
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (activeCount > 5) {
|
|
249
|
+
issues.push(`High number of active increments: ${activeCount} (consider closing some)`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Ignore directory read errors
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return issues;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Self-update SpecWeave CLI via npm
|
|
260
|
+
*/
|
|
261
|
+
async function selfUpdateSpecWeave(currentVersion, options, spinner) {
|
|
262
|
+
spinner.start('Checking for SpecWeave updates...');
|
|
263
|
+
try {
|
|
264
|
+
// Get latest version from npm
|
|
265
|
+
const latestVersion = execSync('npm view specweave version', {
|
|
266
|
+
encoding: 'utf-8',
|
|
267
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
268
|
+
}).trim();
|
|
269
|
+
// Compare versions
|
|
270
|
+
if (latestVersion === currentVersion) {
|
|
271
|
+
spinner.succeed(`SpecWeave is up to date (v${currentVersion})`);
|
|
272
|
+
return { updated: false };
|
|
273
|
+
}
|
|
274
|
+
// Check if newer version available
|
|
275
|
+
const currentParts = currentVersion.split('.').map(Number);
|
|
276
|
+
const latestParts = latestVersion.split('.').map(Number);
|
|
277
|
+
let isNewer = false;
|
|
278
|
+
for (let i = 0; i < 3; i++) {
|
|
279
|
+
if (latestParts[i] > currentParts[i]) {
|
|
280
|
+
isNewer = true;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
else if (latestParts[i] < currentParts[i]) {
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (!isNewer) {
|
|
288
|
+
spinner.succeed(`SpecWeave is up to date (v${currentVersion})`);
|
|
289
|
+
return { updated: false };
|
|
290
|
+
}
|
|
291
|
+
// Dry run - just report
|
|
292
|
+
if (options.check) {
|
|
293
|
+
spinner.info(`New version available: v${currentVersion} → v${latestVersion}`);
|
|
294
|
+
console.log(chalk.gray(' Run without --check to update'));
|
|
295
|
+
return { updated: false, newVersion: latestVersion };
|
|
296
|
+
}
|
|
297
|
+
// Perform update
|
|
298
|
+
spinner.text = `Updating SpecWeave: v${currentVersion} → v${latestVersion}...`;
|
|
299
|
+
execSync('npm install -g specweave@latest', {
|
|
300
|
+
encoding: 'utf-8',
|
|
301
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
302
|
+
});
|
|
303
|
+
spinner.succeed(`SpecWeave updated: v${currentVersion} → v${latestVersion}`);
|
|
304
|
+
return { updated: true, newVersion: latestVersion };
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
spinner.fail('Failed to check/update SpecWeave');
|
|
308
|
+
// Provide helpful error messages
|
|
309
|
+
if (error.message?.includes('EACCES') || error.message?.includes('permission denied')) {
|
|
310
|
+
return {
|
|
311
|
+
updated: false,
|
|
312
|
+
error: 'Permission denied. Try: sudo npm install -g specweave@latest',
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
if (error.message?.includes('ENOENT') || error.message?.includes('npm: not found')) {
|
|
316
|
+
return {
|
|
317
|
+
updated: false,
|
|
318
|
+
error: 'npm not found. Make sure Node.js is installed.',
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
updated: false,
|
|
323
|
+
error: `Self-update failed: ${error.message || error}`,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Register command with Commander
|
|
329
|
+
*/
|
|
330
|
+
export function registerUpdateCommand(program) {
|
|
331
|
+
program
|
|
332
|
+
.command('update')
|
|
333
|
+
.description('Update SpecWeave: CLI, instructions, config, and optionally plugins')
|
|
334
|
+
.option('--no-self', 'Skip CLI self-update via npm')
|
|
335
|
+
.option('--plugins', 'Also refresh marketplace plugins')
|
|
336
|
+
.option('--all', 'Full update including all plugins (not just router)')
|
|
337
|
+
.option('--check', 'Dry run - show what would change without making changes')
|
|
338
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
339
|
+
.option('-f, --force', 'Force refresh even if up to date')
|
|
340
|
+
.action(async (options) => {
|
|
341
|
+
await updateCommand(options);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-structure.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/directory-structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"directory-structure.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/directory-structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,gDAAgD,CAAC;AAIxD;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAmEf;AA4BD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACrE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC,CAAC,CAsBD;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,iBAAwB,GACjC,OAAO,CAAC,IAAI,CAAC,CAyJf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,iBAAiB,EAC3B,iBAAiB,GAAE,OAAc,EACjC,QAAQ,CAAC,EAAE,QAAQ,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAgGN"}
|