specweave 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.
Files changed (70) hide show
  1. package/CLAUDE.md +100 -13
  2. package/README.md +97 -251
  3. package/bin/install-agents.sh +1 -1
  4. package/bin/install-commands.sh +1 -1
  5. package/bin/install-hooks.sh +1 -1
  6. package/bin/install-skills.sh +1 -1
  7. package/bin/specweave.js +32 -0
  8. package/dist/cli/commands/validate-jira.d.ts +35 -0
  9. package/dist/cli/commands/validate-jira.d.ts.map +1 -0
  10. package/dist/cli/commands/validate-jira.js +112 -0
  11. package/dist/cli/commands/validate-jira.js.map +1 -0
  12. package/dist/cli/commands/validate-plugins.d.ts +41 -0
  13. package/dist/cli/commands/validate-plugins.d.ts.map +1 -0
  14. package/dist/cli/commands/validate-plugins.js +171 -0
  15. package/dist/cli/commands/validate-plugins.js.map +1 -0
  16. package/dist/core/types/sync-profile.d.ts +177 -29
  17. package/dist/core/types/sync-profile.d.ts.map +1 -1
  18. package/dist/core/types/sync-profile.js +48 -1
  19. package/dist/core/types/sync-profile.js.map +1 -1
  20. package/dist/hooks/lib/translate-living-docs.d.ts.map +1 -1
  21. package/dist/hooks/lib/translate-living-docs.js +16 -7
  22. package/dist/hooks/lib/translate-living-docs.js.map +1 -1
  23. package/dist/metrics/dora-calculator.d.ts +7 -3
  24. package/dist/metrics/dora-calculator.d.ts.map +1 -1
  25. package/dist/metrics/dora-calculator.js +19 -6
  26. package/dist/metrics/dora-calculator.js.map +1 -1
  27. package/dist/metrics/report-generator.d.ts +17 -0
  28. package/dist/metrics/report-generator.d.ts.map +1 -0
  29. package/dist/metrics/report-generator.js +403 -0
  30. package/dist/metrics/report-generator.js.map +1 -0
  31. package/dist/utils/external-resource-validator.d.ts +102 -0
  32. package/dist/utils/external-resource-validator.d.ts.map +1 -0
  33. package/dist/utils/external-resource-validator.js +381 -0
  34. package/dist/utils/external-resource-validator.js.map +1 -0
  35. package/dist/utils/plugin-validator.d.ts +161 -0
  36. package/dist/utils/plugin-validator.d.ts.map +1 -0
  37. package/dist/utils/plugin-validator.js +565 -0
  38. package/dist/utils/plugin-validator.js.map +1 -0
  39. package/package.json +2 -1
  40. package/plugins/specweave/commands/specweave-do.md +47 -0
  41. package/plugins/specweave/commands/specweave-increment.md +82 -0
  42. package/plugins/specweave/commands/specweave-next.md +47 -0
  43. package/plugins/specweave/hooks/post-increment-planning.sh +117 -38
  44. package/plugins/specweave/hooks/pre-tool-use.sh +133 -0
  45. package/plugins/specweave/plugin.json +22 -0
  46. package/plugins/specweave/skills/plugin-validator/SKILL.md +427 -0
  47. package/plugins/specweave-ado/.claude-plugin/plugin.json +2 -4
  48. package/plugins/specweave-ado/lib/ado-board-resolver.ts +328 -0
  49. package/plugins/specweave-ado/lib/ado-hierarchical-sync.ts +484 -0
  50. package/plugins/specweave-ado/plugin.json +20 -0
  51. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +15 -2
  52. package/plugins/specweave-backend/.claude-plugin/plugin.json +15 -2
  53. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +14 -2
  54. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +14 -2
  55. package/plugins/specweave-docs/.claude-plugin/plugin.json +13 -2
  56. package/plugins/specweave-figma/.claude-plugin/plugin.json +14 -2
  57. package/plugins/specweave-frontend/.claude-plugin/plugin.json +15 -2
  58. package/plugins/specweave-github/lib/github-board-resolver.ts +164 -0
  59. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +344 -0
  60. package/plugins/specweave-github/plugin.json +19 -0
  61. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +15 -2
  62. package/plugins/specweave-jira/.claude-plugin/plugin.json +14 -2
  63. package/plugins/specweave-jira/lib/jira-board-resolver.ts +127 -0
  64. package/plugins/specweave-jira/lib/jira-hierarchical-sync.ts +283 -0
  65. package/plugins/specweave-jira/plugin.json +20 -0
  66. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +584 -0
  67. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +14 -2
  68. package/plugins/specweave-payments/.claude-plugin/plugin.json +14 -2
  69. package/plugins/specweave-testing/.claude-plugin/plugin.json +14 -2
  70. package/plugins/specweave-tooling/.claude-plugin/plugin.json +13 -2
package/bin/specweave.js CHANGED
@@ -131,6 +131,33 @@ program
131
131
  await qaCommand(incrementId, options);
132
132
  });
133
133
 
134
+ // Validate plugins command - Plugin validation
135
+ program
136
+ .command('validate-plugins')
137
+ .description('Validate SpecWeave plugin installation')
138
+ .option('--auto-install', 'Auto-install missing components', false)
139
+ .option('--context <description>', 'Increment description for context detection')
140
+ .option('--dry-run', 'Show what would be installed without installing', false)
141
+ .option('-v, --verbose', 'Show detailed validation steps', false)
142
+ .action(async (options) => {
143
+ const { setupValidatePluginsCommand } = await import('../dist/cli/commands/validate-plugins.js');
144
+ // Create a temporary program for this command
145
+ const tempProgram = new Command();
146
+ setupValidatePluginsCommand(tempProgram);
147
+ // Execute the action directly
148
+ await import('../dist/cli/commands/validate-plugins.js').then(m => m.runValidation(options));
149
+ });
150
+
151
+ // Validate Jira command - Jira resource validation
152
+ program
153
+ .command('validate-jira')
154
+ .description('Validate Jira configuration and create missing resources')
155
+ .option('--env <path>', 'Path to .env file', '.env')
156
+ .action(async (options) => {
157
+ const { runJiraValidation } = await import('../dist/cli/commands/validate-jira.js');
158
+ await runJiraValidation(options);
159
+ });
160
+
134
161
  // Help text
135
162
  program.on('--help', () => {
136
163
  console.log('');
@@ -150,6 +177,11 @@ program.on('--help', () => {
150
177
  console.log(' $ specweave qa 0008 # Quick quality check');
151
178
  console.log(' $ specweave qa 0008 --pre # Pre-implementation check');
152
179
  console.log(' $ specweave qa 0008 --gate --export # Quality gate + export to tasks');
180
+ console.log(' $ specweave validate-plugins # Validate plugin installation');
181
+ console.log(' $ specweave validate-plugins --auto-install # Auto-install missing plugins');
182
+ console.log(' $ specweave validate-plugins --dry-run # Preview what would be installed');
183
+ console.log(' $ specweave validate-jira # Validate Jira configuration');
184
+ console.log(' $ specweave validate-jira --env .env.prod # Validate with custom .env file');
153
185
  console.log('');
154
186
  console.log('Supported AI Tools:');
155
187
  console.log(' - Claude Code (full automation) - Native skills, agents, hooks');
@@ -0,0 +1,35 @@
1
+ /**
2
+ * CLI Command: validate-jira
3
+ *
4
+ * Validates Jira configuration and creates missing resources
5
+ *
6
+ * Usage:
7
+ * specweave validate-jira [options]
8
+ *
9
+ * Options:
10
+ * --env <path> Path to .env file (default: .env)
11
+ * -h, --help Display help for command
12
+ *
13
+ * @module cli/commands/validate-jira
14
+ * @since 0.9.5
15
+ */
16
+ import { Command } from 'commander';
17
+ /**
18
+ * Setup validate-jira command
19
+ *
20
+ * @param program - Commander program instance
21
+ */
22
+ export declare function setupValidateJiraCommand(program: Command): void;
23
+ /**
24
+ * Run Jira validation
25
+ *
26
+ * @param options - Command options
27
+ */
28
+ declare function runJiraValidation(options: {
29
+ env: string;
30
+ }): Promise<void>;
31
+ /**
32
+ * Export for programmatic use
33
+ */
34
+ export { runJiraValidation };
35
+ //# sourceMappingURL=validate-jira.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-jira.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate-jira.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ/D;AAED;;;;GAIG;AACH,iBAAe,iBAAiB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBxE;AAgED;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * CLI Command: validate-jira
3
+ *
4
+ * Validates Jira configuration and creates missing resources
5
+ *
6
+ * Usage:
7
+ * specweave validate-jira [options]
8
+ *
9
+ * Options:
10
+ * --env <path> Path to .env file (default: .env)
11
+ * -h, --help Display help for command
12
+ *
13
+ * @module cli/commands/validate-jira
14
+ * @since 0.9.5
15
+ */
16
+ import chalk from 'chalk';
17
+ import ora from 'ora';
18
+ import { validateJiraResources } from '../../utils/external-resource-validator.js';
19
+ /**
20
+ * Setup validate-jira command
21
+ *
22
+ * @param program - Commander program instance
23
+ */
24
+ export function setupValidateJiraCommand(program) {
25
+ program
26
+ .command('validate-jira')
27
+ .description('Validate Jira configuration and create missing resources')
28
+ .option('--env <path>', 'Path to .env file', '.env')
29
+ .action(async (options) => {
30
+ await runJiraValidation(options);
31
+ });
32
+ }
33
+ /**
34
+ * Run Jira validation
35
+ *
36
+ * @param options - Command options
37
+ */
38
+ async function runJiraValidation(options) {
39
+ const spinner = ora('Validating Jira configuration...').start();
40
+ try {
41
+ spinner.stop();
42
+ const result = await validateJiraResources(options.env);
43
+ // Display results
44
+ if (result.valid) {
45
+ displaySuccess(result);
46
+ process.exit(0);
47
+ }
48
+ else {
49
+ displayFailure(result);
50
+ process.exit(1);
51
+ }
52
+ }
53
+ catch (error) {
54
+ spinner.stop();
55
+ console.error(chalk.red(`\n❌ Validation error: ${error.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ /**
60
+ * Display success message
61
+ */
62
+ function displaySuccess(result) {
63
+ console.log(chalk.green('\n✅ Jira configuration validated!\n'));
64
+ // Show project info
65
+ if (result.project.exists) {
66
+ console.log(chalk.gray('Project:'));
67
+ console.log(chalk.white(` • ${result.project.key} - ${result.project.name}`));
68
+ console.log(chalk.dim(` ID: ${result.project.id}\n`));
69
+ }
70
+ // Show boards info
71
+ if (result.boards.existing.length > 0) {
72
+ console.log(chalk.gray('Boards:'));
73
+ result.boards.existing.forEach((id) => {
74
+ console.log(chalk.white(` • Board ID: ${id}`));
75
+ });
76
+ console.log();
77
+ }
78
+ // Show created boards
79
+ if (result.boards.created.length > 0) {
80
+ console.log(chalk.green('Created boards:'));
81
+ result.boards.created.forEach((board) => {
82
+ console.log(chalk.green(` ✅ ${board.name} (ID: ${board.id})`));
83
+ });
84
+ console.log();
85
+ }
86
+ // Show env update
87
+ if (result.envUpdated) {
88
+ console.log(chalk.cyan('📝 .env file updated with actual IDs\n'));
89
+ }
90
+ }
91
+ /**
92
+ * Display failure message
93
+ */
94
+ function displayFailure(result) {
95
+ console.log(chalk.red('\n❌ Jira validation failed\n'));
96
+ // Show project issues
97
+ if (!result.project.exists) {
98
+ console.log(chalk.yellow('Project:'));
99
+ console.log(chalk.yellow(' • Project not found or not created\n'));
100
+ }
101
+ // Show board issues
102
+ if (!result.boards.valid && result.boards.missing.length > 0) {
103
+ console.log(chalk.yellow('Boards:'));
104
+ console.log(chalk.yellow(` • Missing boards: ${result.boards.missing.join(', ')}\n`));
105
+ }
106
+ console.log(chalk.cyan('💡 Run again to retry validation and fix configuration\n'));
107
+ }
108
+ /**
109
+ * Export for programmatic use
110
+ */
111
+ export { runJiraValidation };
112
+ //# sourceMappingURL=validate-jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-jira.js","sourceRoot":"","sources":["../../../src/cli/commands/validate-jira.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * CLI Command: validate-plugins
3
+ *
4
+ * Validates SpecWeave plugin installation and optionally installs missing components.
5
+ *
6
+ * Usage:
7
+ * specweave validate-plugins [options]
8
+ *
9
+ * Options:
10
+ * --auto-install Auto-install missing components
11
+ * --context <description> Increment description for context detection
12
+ * --dry-run Show what would be installed without installing
13
+ * --verbose Show detailed validation steps
14
+ * -h, --help Display help for command
15
+ *
16
+ * @module cli/commands/validate-plugins
17
+ * @since 0.9.4
18
+ */
19
+ import { Command } from 'commander';
20
+ /**
21
+ * Setup validate-plugins command
22
+ *
23
+ * @param program - Commander program instance
24
+ */
25
+ export declare function setupValidatePluginsCommand(program: Command): void;
26
+ /**
27
+ * Run validation
28
+ *
29
+ * @param options - Command options
30
+ */
31
+ declare function runValidation(options: {
32
+ autoInstall: boolean;
33
+ context?: string;
34
+ dryRun: boolean;
35
+ verbose: boolean;
36
+ }): Promise<void>;
37
+ /**
38
+ * Export for programmatic use
39
+ */
40
+ export { runValidation };
41
+ //# sourceMappingURL=validate-plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plugins.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate-plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkBlE;AAED;;;;GAIG;AACH,iBAAe,aAAa,CAAC,OAAO,EAAE;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChB;AAiJD;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * CLI Command: validate-plugins
3
+ *
4
+ * Validates SpecWeave plugin installation and optionally installs missing components.
5
+ *
6
+ * Usage:
7
+ * specweave validate-plugins [options]
8
+ *
9
+ * Options:
10
+ * --auto-install Auto-install missing components
11
+ * --context <description> Increment description for context detection
12
+ * --dry-run Show what would be installed without installing
13
+ * --verbose Show detailed validation steps
14
+ * -h, --help Display help for command
15
+ *
16
+ * @module cli/commands/validate-plugins
17
+ * @since 0.9.4
18
+ */
19
+ import chalk from 'chalk';
20
+ import ora from 'ora';
21
+ import { PluginValidator, } from '../../utils/plugin-validator.js';
22
+ /**
23
+ * Setup validate-plugins command
24
+ *
25
+ * @param program - Commander program instance
26
+ */
27
+ export function setupValidatePluginsCommand(program) {
28
+ program
29
+ .command('validate-plugins')
30
+ .description('Validate SpecWeave plugin installation')
31
+ .option('--auto-install', 'Auto-install missing components', false)
32
+ .option('--context <description>', 'Increment description for context detection')
33
+ .option('--dry-run', 'Show what would be installed without installing', false)
34
+ .option('--verbose', 'Show detailed validation steps', false)
35
+ .action(async (options) => {
36
+ await runValidation(options);
37
+ });
38
+ }
39
+ /**
40
+ * Run validation
41
+ *
42
+ * @param options - Command options
43
+ */
44
+ async function runValidation(options) {
45
+ const spinner = ora('Validating SpecWeave environment...').start();
46
+ try {
47
+ const validator = new PluginValidator();
48
+ const validationOptions = {
49
+ autoInstall: options.autoInstall,
50
+ context: options.context,
51
+ dryRun: options.dryRun,
52
+ verbose: options.verbose,
53
+ };
54
+ const result = await validator.validate(validationOptions);
55
+ spinner.stop();
56
+ // Display results
57
+ if (result.valid) {
58
+ displaySuccess(result);
59
+ process.exit(0);
60
+ }
61
+ else {
62
+ displayFailure(result, options);
63
+ process.exit(1);
64
+ }
65
+ }
66
+ catch (error) {
67
+ spinner.stop();
68
+ console.error(chalk.red(`\n❌ Validation error: ${error.message}`));
69
+ // Show manual instructions
70
+ showManualInstructions();
71
+ process.exit(1);
72
+ }
73
+ }
74
+ /**
75
+ * Display success message
76
+ *
77
+ * @param result - Validation result
78
+ */
79
+ function displaySuccess(result) {
80
+ console.log(chalk.green('\n✅ All plugins validated!'));
81
+ // Show installed components
82
+ if (result.installed.corePlugin) {
83
+ const version = result.installed.corePluginVersion
84
+ ? ` (v${result.installed.corePluginVersion})`
85
+ : '';
86
+ console.log(chalk.gray(` • Core plugin: installed${version}`));
87
+ }
88
+ if (result.installed.contextPlugins.length > 0) {
89
+ console.log(chalk.gray(` • Context plugins: ${result.installed.contextPlugins.join(', ')}`));
90
+ }
91
+ // Show cache info
92
+ if (result.cache?.hit) {
93
+ console.log(chalk.gray(` • Cache: hit (age: ${Math.round(result.cache.age)}s)`));
94
+ }
95
+ console.log(); // Empty line
96
+ }
97
+ /**
98
+ * Display failure message
99
+ *
100
+ * @param result - Validation result
101
+ * @param options - Command options
102
+ */
103
+ function displayFailure(result, options) {
104
+ console.log(chalk.red('\n❌ Missing components detected:'));
105
+ // Show missing components
106
+ if (result.missing.marketplace) {
107
+ console.log(chalk.yellow(' • SpecWeave marketplace not registered'));
108
+ }
109
+ if (result.missing.corePlugin) {
110
+ console.log(chalk.yellow(' • Core plugin (specweave) not installed'));
111
+ }
112
+ if (result.missing.contextPlugins.length > 0) {
113
+ console.log(chalk.yellow(` • Context plugins: ${result.missing.contextPlugins.join(', ')}`));
114
+ }
115
+ // Show errors if any
116
+ if (result.errors.length > 0) {
117
+ console.log(chalk.red('\n🚨 Errors encountered:'));
118
+ result.errors.forEach((error) => {
119
+ console.log(chalk.red(` • ${error}`));
120
+ });
121
+ }
122
+ // Show recommendations
123
+ if (result.recommendations.length > 0) {
124
+ console.log(chalk.cyan('\n📦 Recommendations:'));
125
+ result.recommendations.forEach((rec) => {
126
+ console.log(chalk.gray(` ${rec}`));
127
+ });
128
+ }
129
+ // Show dry-run note
130
+ if (options.dryRun) {
131
+ console.log(chalk.cyan('\n💡 Dry-run mode: No changes made. Remove --dry-run to install.'));
132
+ }
133
+ // Show auto-install suggestion
134
+ if (!options.autoInstall && !options.dryRun) {
135
+ console.log(chalk.cyan('\n💡 Tip: Use --auto-install flag to automatically install missing components'));
136
+ }
137
+ console.log(); // Empty line
138
+ }
139
+ /**
140
+ * Show manual installation instructions
141
+ */
142
+ function showManualInstructions() {
143
+ console.log(chalk.cyan('\n📖 Manual Installation Instructions:'));
144
+ console.log();
145
+ console.log(chalk.gray('1. Register SpecWeave marketplace:'));
146
+ console.log(chalk.gray(' Edit ~/.claude/settings.json and add:'));
147
+ console.log(chalk.gray(` {
148
+ "extraKnownMarketplaces": {
149
+ "specweave": {
150
+ "source": {
151
+ "source": "github",
152
+ "repo": "anton-abyzov/specweave",
153
+ "path": ".claude-plugin"
154
+ }
155
+ }
156
+ }
157
+ }`));
158
+ console.log();
159
+ console.log(chalk.gray('2. Install core plugin:'));
160
+ console.log(chalk.gray(' Run: /plugin install specweave'));
161
+ console.log();
162
+ console.log(chalk.gray('3. Restart Claude Code'));
163
+ console.log();
164
+ console.log(chalk.gray('4. Re-run: specweave validate-plugins'));
165
+ console.log();
166
+ }
167
+ /**
168
+ * Export for programmatic use
169
+ */
170
+ export { runValidation };
171
+ //# sourceMappingURL=validate-plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plugins.js","sourceRoot":"","sources":["../../../src/cli/commands/validate-plugins.ts"],"names":[],"mappings":"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"}