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
@@ -0,0 +1,403 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * DORA Metrics Report Generator
4
+ *
5
+ * Generates detailed markdown reports from DORA metrics
6
+ * Provides insights, trends, and actionable recommendations
7
+ */
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ /**
11
+ * Format date for display
12
+ */
13
+ function formatDate(date) {
14
+ const d = typeof date === 'string' ? new Date(date) : date;
15
+ return d.toLocaleDateString('en-US', {
16
+ year: 'numeric',
17
+ month: 'short',
18
+ day: 'numeric',
19
+ });
20
+ }
21
+ /**
22
+ * Get tier emoji
23
+ */
24
+ function getTierEmoji(tier) {
25
+ switch (tier) {
26
+ case 'Elite': return '🏆';
27
+ case 'High': return '⭐';
28
+ case 'Medium': return '📊';
29
+ case 'Low': return '⚠️';
30
+ default: return '⚪';
31
+ }
32
+ }
33
+ /**
34
+ * Get status emoji
35
+ */
36
+ function getStatusEmoji(tier) {
37
+ switch (tier) {
38
+ case 'Elite':
39
+ case 'High':
40
+ return '✅';
41
+ case 'Medium':
42
+ return '⚠️';
43
+ case 'Low':
44
+ return '❌';
45
+ default:
46
+ return 'ℹ️';
47
+ }
48
+ }
49
+ /**
50
+ * Generate deployment frequency insights
51
+ */
52
+ function generateDFInsights(value, tier) {
53
+ const insights = [];
54
+ if (tier === 'Elite') {
55
+ insights.push('🎉 **Elite Performance**: Deploying multiple times per day enables rapid feedback and reduced risk');
56
+ insights.push('✅ Continue current cadence - no action needed');
57
+ }
58
+ else if (tier === 'High') {
59
+ insights.push('✅ **Strong Performance**: Weekly to monthly deployments indicate healthy delivery rhythm');
60
+ insights.push('📈 **Next Level**: Consider increasing to daily deployments for elite performance');
61
+ insights.push('💡 **Tip**: Implement feature flags to decouple deployment from release');
62
+ }
63
+ else if (tier === 'Medium') {
64
+ insights.push('⚠️ **Room for Improvement**: Monthly to quarterly deployments increase risk');
65
+ insights.push('🎯 **Action**: Break down changes into smaller, more frequent deployments');
66
+ insights.push('🔧 **Focus**: Improve CI/CD pipeline automation');
67
+ }
68
+ else {
69
+ insights.push('❌ **Critical**: Infrequent deployments create significant risk and slow feedback');
70
+ insights.push('🚨 **Urgent**: Implement automated deployment pipeline');
71
+ insights.push('📋 **Priority**: Break monolithic releases into incremental deployments');
72
+ }
73
+ return insights;
74
+ }
75
+ /**
76
+ * Generate lead time insights
77
+ */
78
+ function generateLTInsights(value, tier, p50, p90) {
79
+ const insights = [];
80
+ if (tier === 'Elite') {
81
+ insights.push('🎉 **Elite Performance**: Sub-hour lead time enables rapid iteration');
82
+ insights.push('✅ Best-in-class delivery speed');
83
+ }
84
+ else if (tier === 'High') {
85
+ insights.push('✅ **Strong Performance**: Lead time under 1 week is competitive');
86
+ if (p50 && p90) {
87
+ insights.push(`📊 **Distribution**: 50% of changes deploy in ${p50}h, 90% in ${p90}h`);
88
+ }
89
+ insights.push('📈 **Next Level**: Focus on reducing p90 to reach elite tier');
90
+ insights.push('💡 **Tip**: Identify bottlenecks in slowest 10% of deployments');
91
+ }
92
+ else if (tier === 'Medium') {
93
+ insights.push('⚠️ **Moderate Performance**: 1 week to 1 month lead time slows feedback');
94
+ insights.push('🎯 **Action**: Reduce code review time and automate testing');
95
+ insights.push('🔧 **Focus**: Eliminate manual approval steps');
96
+ }
97
+ else {
98
+ insights.push('❌ **Critical**: Long lead times reduce agility and increase risk');
99
+ insights.push('🚨 **Urgent**: Implement automated testing and deployment');
100
+ insights.push('📋 **Priority**: Reduce batch size and increase deployment frequency');
101
+ }
102
+ return insights;
103
+ }
104
+ /**
105
+ * Generate change failure rate insights
106
+ */
107
+ function generateCFRInsights(value, tier, failed, total) {
108
+ const insights = [];
109
+ if (tier === 'Elite') {
110
+ insights.push('🎉 **Elite Performance**: < 15% failure rate indicates high quality');
111
+ if (failed === 0) {
112
+ insights.push('🏆 **Perfect Record**: Zero failures across all deployments!');
113
+ }
114
+ insights.push('✅ Maintain current quality standards');
115
+ }
116
+ else if (tier === 'High') {
117
+ insights.push('✅ **Good Performance**: 16-30% failure rate is manageable');
118
+ insights.push(`📊 **Stats**: ${failed} failures out of ${total} deployments`);
119
+ insights.push('📈 **Next Level**: Focus on test coverage and pre-deployment validation');
120
+ insights.push('💡 **Tip**: Implement smoke tests and canary deployments');
121
+ }
122
+ else if (tier === 'Medium') {
123
+ insights.push('⚠️ **Concerning**: 31-45% failure rate impacts reliability');
124
+ insights.push(`📊 **Stats**: ${failed} failures out of ${total} deployments`);
125
+ insights.push('🎯 **Action**: Increase automated test coverage');
126
+ insights.push('🔧 **Focus**: Implement pre-commit hooks and PR validation');
127
+ }
128
+ else {
129
+ insights.push('❌ **Critical**: > 45% failure rate severely impacts trust');
130
+ insights.push(`📊 **Stats**: ${failed} failures out of ${total} deployments`);
131
+ insights.push('🚨 **Urgent**: Implement comprehensive test suite');
132
+ insights.push('📋 **Priority**: Add smoke tests and staging environment');
133
+ }
134
+ return insights;
135
+ }
136
+ /**
137
+ * Generate MTTR insights
138
+ */
139
+ function generateMTTRInsights(value, tier, p50, p90) {
140
+ const insights = [];
141
+ if (value === 0 || tier === 'N/A') {
142
+ insights.push('ℹ️ **No Incidents**: No production incidents in measurement period');
143
+ insights.push('✅ This is good news! Either stability is high or incident tracking needs improvement');
144
+ insights.push('💡 **Tip**: Ensure production incidents are labeled "incident" or "production-bug"');
145
+ return insights;
146
+ }
147
+ if (tier === 'Elite') {
148
+ insights.push('🎉 **Elite Performance**: Sub-hour recovery time minimizes impact');
149
+ insights.push('✅ Excellent incident response capability');
150
+ }
151
+ else if (tier === 'High') {
152
+ insights.push('✅ **Strong Performance**: Recovery within 24 hours limits damage');
153
+ if (p50 && p90) {
154
+ insights.push(`📊 **Distribution**: 50% resolve in ${p50} min, 90% in ${p90} min`);
155
+ }
156
+ insights.push('📈 **Next Level**: Implement auto-remediation for common issues');
157
+ }
158
+ else if (tier === 'Medium') {
159
+ insights.push('⚠️ **Room for Improvement**: Multi-day recovery extends impact');
160
+ insights.push('🎯 **Action**: Create runbooks for common incidents');
161
+ insights.push('🔧 **Focus**: Improve monitoring and alerting');
162
+ }
163
+ else {
164
+ insights.push('❌ **Critical**: Week-plus recovery time is unacceptable');
165
+ insights.push('🚨 **Urgent**: Implement on-call rotation and incident procedures');
166
+ insights.push('📋 **Priority**: Create disaster recovery plan');
167
+ }
168
+ return insights;
169
+ }
170
+ /**
171
+ * Generate markdown report
172
+ */
173
+ export function generateMarkdownReport(metrics, releases, issues) {
174
+ const timestamp = new Date(metrics.timestamp);
175
+ const { deploymentFrequency, leadTime, changeFailureRate, mttr } = metrics.metrics;
176
+ let report = `# DORA Metrics Report
177
+
178
+ **Generated**: ${formatDate(timestamp)} at ${timestamp.toLocaleTimeString('en-US')}
179
+ **Period**: Last 30 days
180
+
181
+ ---
182
+
183
+ ## 📊 Executive Summary
184
+
185
+ | Metric | Value | Tier | Status |
186
+ |--------|-------|------|--------|
187
+ | **Deployment Frequency** | ${deploymentFrequency.value} ${deploymentFrequency.unit} | ${getTierEmoji(deploymentFrequency.tier)} ${deploymentFrequency.tier} | ${getStatusEmoji(deploymentFrequency.tier)} |
188
+ | **Lead Time for Changes** | ${leadTime.value} ${leadTime.unit} | ${getTierEmoji(leadTime.tier)} ${leadTime.tier} | ${getStatusEmoji(leadTime.tier)} |
189
+ | **Change Failure Rate** | ${changeFailureRate.value}% | ${getTierEmoji(changeFailureRate.tier)} ${changeFailureRate.tier} | ${getStatusEmoji(changeFailureRate.tier)} |
190
+ | **Mean Time to Recovery** | ${mttr.value} ${mttr.unit} | ${getTierEmoji(mttr.tier)} ${mttr.tier} | ${getStatusEmoji(mttr.tier)} |
191
+
192
+ `;
193
+ // Overall assessment
194
+ const tiers = [deploymentFrequency.tier, leadTime.tier, changeFailureRate.tier, mttr.tier];
195
+ const eliteCount = tiers.filter(t => t === 'Elite').length;
196
+ const highCount = tiers.filter(t => t === 'High').length;
197
+ if (eliteCount >= 3) {
198
+ report += `**Overall Assessment**: 🏆 **Elite Team** - ${eliteCount}/4 metrics at elite level\n\n`;
199
+ }
200
+ else if (eliteCount + highCount >= 3) {
201
+ report += `**Overall Assessment**: ⭐ **High-Performing Team** - ${eliteCount + highCount}/4 metrics at high or elite\n\n`;
202
+ }
203
+ else {
204
+ report += `**Overall Assessment**: 📊 **Growing Team** - Focus on continuous improvement\n\n`;
205
+ }
206
+ report += `---
207
+
208
+ ## 🚀 Deployment Frequency
209
+
210
+ **Current**: ${deploymentFrequency.value} ${deploymentFrequency.unit} (${getTierEmoji(deploymentFrequency.tier)} ${deploymentFrequency.tier})
211
+
212
+ **Industry Benchmarks**:
213
+ - 🏆 Elite: Multiple deploys per day (>365/year)
214
+ - ⭐ High: Weekly to monthly (52-365/year)
215
+ - 📊 Medium: Monthly to quarterly (12-52/year)
216
+ - ⚠️ Low: Less than quarterly (<12/year)
217
+
218
+ ### Insights
219
+
220
+ ${generateDFInsights(deploymentFrequency.value, deploymentFrequency.tier).map(i => `- ${i}`).join('\n')}
221
+
222
+ ---
223
+
224
+ ## ⚡ Lead Time for Changes
225
+
226
+ **Current**: ${leadTime.value} ${leadTime.unit} (${getTierEmoji(leadTime.tier)} ${leadTime.tier})
227
+ `;
228
+ if (leadTime.p50 && leadTime.p90) {
229
+ report += `**Percentiles**: P50 = ${leadTime.p50}h, P90 = ${leadTime.p90}h\n`;
230
+ }
231
+ report += `
232
+ **Industry Benchmarks**:
233
+ - 🏆 Elite: Less than 1 hour
234
+ - ⭐ High: 1 day to 1 week
235
+ - 📊 Medium: 1 week to 1 month
236
+ - ⚠️ Low: More than 1 month
237
+
238
+ ### Insights
239
+
240
+ ${generateLTInsights(leadTime.value, leadTime.tier, leadTime.p50, leadTime.p90).map(i => `- ${i}`).join('\n')}
241
+
242
+ ---
243
+
244
+ ## ✅ Change Failure Rate
245
+
246
+ **Current**: ${changeFailureRate.value}% (${getTierEmoji(changeFailureRate.tier)} ${changeFailureRate.tier})
247
+ **Failed Releases**: ${changeFailureRate.failedReleases} / ${changeFailureRate.totalReleases}
248
+
249
+ **Industry Benchmarks**:
250
+ - 🏆 Elite: 0-15%
251
+ - ⭐ High: 16-30%
252
+ - 📊 Medium: 31-45%
253
+ - ⚠️ Low: More than 45%
254
+
255
+ ### Insights
256
+
257
+ ${generateCFRInsights(changeFailureRate.value, changeFailureRate.tier, changeFailureRate.failedReleases, changeFailureRate.totalReleases).map(i => `- ${i}`).join('\n')}
258
+
259
+ ---
260
+
261
+ ## 🔧 Mean Time to Recovery (MTTR)
262
+
263
+ **Current**: ${mttr.value} ${mttr.unit} (${getTierEmoji(mttr.tier)} ${mttr.tier})
264
+ `;
265
+ if (mttr.p50 && mttr.p90) {
266
+ report += `**Percentiles**: P50 = ${mttr.p50} min, P90 = ${mttr.p90} min\n`;
267
+ }
268
+ report += `
269
+ **Industry Benchmarks**:
270
+ - 🏆 Elite: Less than 1 hour
271
+ - ⭐ High: 1 hour to 1 day
272
+ - 📊 Medium: 1 day to 1 week
273
+ - ⚠️ Low: More than 1 week
274
+
275
+ ### Insights
276
+
277
+ ${generateMTTRInsights(mttr.value, mttr.tier, mttr.p50, mttr.p90).map(i => `- ${i}`).join('\n')}
278
+
279
+ ---
280
+
281
+ ## 📈 Recent Activity
282
+
283
+ `;
284
+ // Add release information if available
285
+ if (releases && releases.length > 0) {
286
+ report += `### Recent Releases (${releases.length} in last 30 days)\n\n`;
287
+ releases.slice(0, 5).forEach((release) => {
288
+ const publishedAt = new Date(release.published_at);
289
+ report += `- **[${release.tag_name}](${release.html_url})** - ${formatDate(publishedAt)}\n`;
290
+ if (release.name && release.name !== release.tag_name) {
291
+ report += ` _${release.name}_\n`;
292
+ }
293
+ });
294
+ if (releases.length > 5) {
295
+ report += `\n_...and ${releases.length - 5} more releases_\n`;
296
+ }
297
+ report += '\n';
298
+ }
299
+ // Add incident information if available
300
+ if (issues && issues.length > 0) {
301
+ report += `### Production Incidents (${issues.length} tracked)\n\n`;
302
+ issues.slice(0, 5).forEach((issue) => {
303
+ const createdAt = new Date(issue.created_at);
304
+ const closedAt = issue.closed_at ? new Date(issue.closed_at) : null;
305
+ const duration = closedAt
306
+ ? Math.round((closedAt.getTime() - createdAt.getTime()) / (1000 * 60))
307
+ : 'ongoing';
308
+ report += `- **[#${issue.number}](${issue.html_url})** ${issue.title}\n`;
309
+ report += ` Created: ${formatDate(createdAt)} | `;
310
+ if (typeof duration === 'number') {
311
+ report += `Resolved in: ${duration} minutes\n`;
312
+ }
313
+ else {
314
+ report += `Status: ${duration}\n`;
315
+ }
316
+ });
317
+ if (issues.length > 5) {
318
+ report += `\n_...and ${issues.length - 5} more incidents_\n`;
319
+ }
320
+ }
321
+ else {
322
+ report += `### Production Incidents
323
+
324
+ ℹ️ No production incidents tracked in the last 30 days.
325
+
326
+ 💡 **Tip**: Label issues with "incident" or "production-bug" to track them automatically.
327
+
328
+ `;
329
+ }
330
+ report += `---
331
+
332
+ ## 🎯 Recommended Actions
333
+
334
+ `;
335
+ const actions = [];
336
+ // Deployment frequency actions
337
+ if (deploymentFrequency.tier === 'Medium' || deploymentFrequency.tier === 'Low') {
338
+ actions.push('1. **Increase Deployment Frequency**');
339
+ actions.push(' - Implement automated CI/CD pipeline');
340
+ actions.push(' - Use feature flags to decouple deployment from release');
341
+ actions.push(' - Break down large changes into smaller increments');
342
+ }
343
+ // Lead time actions
344
+ if (leadTime.tier === 'Medium' || leadTime.tier === 'Low') {
345
+ actions.push('2. **Reduce Lead Time**');
346
+ actions.push(' - Automate code review and approval processes');
347
+ actions.push(' - Implement automated testing (unit, integration, E2E)');
348
+ actions.push(' - Reduce manual steps in deployment pipeline');
349
+ }
350
+ // Change failure rate actions
351
+ if (changeFailureRate.tier === 'Medium' || changeFailureRate.tier === 'Low') {
352
+ actions.push('3. **Improve Change Failure Rate**');
353
+ actions.push(' - Increase test coverage (target: 80%+)');
354
+ actions.push(' - Implement pre-commit hooks and linting');
355
+ actions.push(' - Add smoke tests and staging environment');
356
+ }
357
+ // MTTR actions
358
+ if (mttr.tier === 'Medium' || mttr.tier === 'Low') {
359
+ actions.push('4. **Reduce Mean Time to Recovery**');
360
+ actions.push(' - Create incident runbooks for common issues');
361
+ actions.push(' - Implement automated rollback procedures');
362
+ actions.push(' - Improve monitoring and alerting');
363
+ }
364
+ if (actions.length === 0) {
365
+ report += `✅ **Great work!** All metrics are performing well. Focus on maintaining current standards.
366
+
367
+ 💡 **Continue**:
368
+ - Monitor metrics regularly for trends
369
+ - Share DORA metrics with team for transparency
370
+ - Celebrate successes and learn from incidents
371
+ `;
372
+ }
373
+ else {
374
+ report += actions.join('\n') + '\n';
375
+ }
376
+ report += `
377
+ ---
378
+
379
+ ## 📚 Resources
380
+
381
+ - **DORA Research**: [State of DevOps Report](https://cloud.google.com/devops/state-of-devops)
382
+ - **Metrics Calculation**: [GitHub Workflow](https://github.com/anton-abyzov/specweave/actions/workflows/dora-metrics.yml)
383
+ - **Implementation**: [SpecWeave DORA Calculator](https://github.com/anton-abyzov/specweave/tree/develop/src/metrics)
384
+
385
+ ---
386
+
387
+ _This report was generated automatically by SpecWeave DORA Metrics Calculator_
388
+ _Last updated: ${formatDate(timestamp)}_
389
+ `;
390
+ return report;
391
+ }
392
+ /**
393
+ * Write report to markdown file
394
+ */
395
+ export function writeReport(report, filePath) {
396
+ const dir = path.dirname(filePath);
397
+ if (!fs.existsSync(dir)) {
398
+ fs.mkdirSync(dir, { recursive: true });
399
+ }
400
+ fs.writeFileSync(filePath, report, 'utf-8');
401
+ console.log(`\n✅ Report written to ${filePath}`);
402
+ }
403
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/metrics/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * External Resource Validator
3
+ *
4
+ * Validates and creates external resources (Jira projects, boards, etc.)
5
+ * Smart enough to:
6
+ * - Check if resources exist
7
+ * - Prompt user to select existing or create new
8
+ * - Create missing resources automatically
9
+ * - Update .env with actual IDs after creation
10
+ *
11
+ * @module utils/external-resource-validator
12
+ * @since 0.9.5
13
+ */
14
+ export interface JiraProject {
15
+ id: string;
16
+ key: string;
17
+ name: string;
18
+ }
19
+ export interface JiraBoard {
20
+ id: number;
21
+ name: string;
22
+ type: string;
23
+ }
24
+ export interface JiraValidationResult {
25
+ valid: boolean;
26
+ project: {
27
+ exists: boolean;
28
+ key?: string;
29
+ id?: string;
30
+ name?: string;
31
+ };
32
+ boards: {
33
+ valid: boolean;
34
+ existing: number[];
35
+ missing: string[];
36
+ created: Array<{
37
+ name: string;
38
+ id: number;
39
+ }>;
40
+ };
41
+ envUpdated: boolean;
42
+ }
43
+ export declare class JiraResourceValidator {
44
+ private apiToken;
45
+ private email;
46
+ private domain;
47
+ private envPath;
48
+ constructor(envPath?: string);
49
+ /**
50
+ * Load .env file
51
+ */
52
+ private loadEnv;
53
+ /**
54
+ * Update .env file with new values
55
+ */
56
+ private updateEnv;
57
+ /**
58
+ * Call Jira API
59
+ */
60
+ private callJiraApi;
61
+ /**
62
+ * Fetch all Jira projects
63
+ */
64
+ fetchProjects(): Promise<JiraProject[]>;
65
+ /**
66
+ * Check if project exists
67
+ */
68
+ checkProject(projectKey: string): Promise<JiraProject | null>;
69
+ /**
70
+ * Create new Jira project
71
+ */
72
+ createProject(projectKey: string, projectName: string): Promise<JiraProject>;
73
+ /**
74
+ * Get current user ID (for project lead)
75
+ */
76
+ private getCurrentUserId;
77
+ /**
78
+ * Fetch all boards for a project
79
+ */
80
+ fetchBoards(projectKey: string): Promise<JiraBoard[]>;
81
+ /**
82
+ * Check if board exists by ID
83
+ */
84
+ checkBoard(boardId: number): Promise<JiraBoard | null>;
85
+ /**
86
+ * Create new Jira board
87
+ */
88
+ createBoard(boardName: string, projectKey: string): Promise<JiraBoard>;
89
+ /**
90
+ * Get or create filter for board
91
+ */
92
+ private getOrCreateFilter;
93
+ /**
94
+ * Validate and fix Jira configuration
95
+ */
96
+ validate(): Promise<JiraValidationResult>;
97
+ }
98
+ /**
99
+ * Validate Jira resources
100
+ */
101
+ export declare function validateJiraResources(envPath?: string): Promise<JiraValidationResult>;
102
+ //# sourceMappingURL=external-resource-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-resource-validator.d.ts","sourceRoot":"","sources":["../../src/utils/external-resource-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE;QACP,MAAM,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAe;IASpC;;OAEG;IACH,OAAO,CAAC,OAAO;IAwBf;;OAEG;YACW,SAAS;IAyBvB;;OAEG;YACW,WAAW;IAmBzB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAa7C;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAanE;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBlF;;OAEG;YACW,gBAAgB;IAS9B;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAa3D;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAa5D;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB5E;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC;CA0IhD;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,MAAe,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAG/B"}