specweave 0.7.1 → 0.8.2

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 (137) hide show
  1. package/CLAUDE.md +307 -11
  2. package/README.md +41 -3
  3. package/bin/specweave.js +0 -27
  4. package/dist/cli/commands/import-docs.d.ts +21 -0
  5. package/dist/cli/commands/import-docs.d.ts.map +1 -0
  6. package/dist/cli/commands/import-docs.js +146 -0
  7. package/dist/cli/commands/import-docs.js.map +1 -0
  8. package/dist/cli/commands/init-multiproject.d.ts +11 -0
  9. package/dist/cli/commands/init-multiproject.d.ts.map +1 -0
  10. package/dist/cli/commands/init-multiproject.js +202 -0
  11. package/dist/cli/commands/init-multiproject.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +4 -93
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/migrate-to-multiproject.d.ts +37 -0
  16. package/dist/cli/commands/migrate-to-multiproject.d.ts.map +1 -0
  17. package/dist/cli/commands/migrate-to-multiproject.js +189 -0
  18. package/dist/cli/commands/migrate-to-multiproject.js.map +1 -0
  19. package/dist/cli/commands/migrate-to-profiles.d.ts +25 -0
  20. package/dist/cli/commands/migrate-to-profiles.d.ts.map +1 -0
  21. package/dist/cli/commands/migrate-to-profiles.js +350 -0
  22. package/dist/cli/commands/migrate-to-profiles.js.map +1 -0
  23. package/dist/cli/commands/switch-project.d.ts +13 -0
  24. package/dist/cli/commands/switch-project.d.ts.map +1 -0
  25. package/dist/cli/commands/switch-project.js +91 -0
  26. package/dist/cli/commands/switch-project.js.map +1 -0
  27. package/dist/cli/helpers/issue-tracker/index.js +4 -4
  28. package/dist/cli/helpers/issue-tracker/index.js.map +1 -1
  29. package/dist/cli/helpers/issue-tracker/utils.d.ts +6 -3
  30. package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -1
  31. package/dist/cli/helpers/issue-tracker/utils.js +9 -7
  32. package/dist/cli/helpers/issue-tracker/utils.js.map +1 -1
  33. package/dist/core/brownfield/analyzer.d.ts +86 -0
  34. package/dist/core/brownfield/analyzer.d.ts.map +1 -0
  35. package/dist/core/brownfield/analyzer.js +365 -0
  36. package/dist/core/brownfield/analyzer.js.map +1 -0
  37. package/dist/core/brownfield/importer.d.ts +76 -0
  38. package/dist/core/brownfield/importer.d.ts.map +1 -0
  39. package/dist/core/brownfield/importer.js +287 -0
  40. package/dist/core/brownfield/importer.js.map +1 -0
  41. package/dist/core/config-manager.d.ts +47 -0
  42. package/dist/core/config-manager.d.ts.map +1 -0
  43. package/dist/core/config-manager.js +136 -0
  44. package/dist/core/config-manager.js.map +1 -0
  45. package/dist/core/project-manager.d.ts +127 -0
  46. package/dist/core/project-manager.d.ts.map +1 -0
  47. package/dist/core/project-manager.js +524 -0
  48. package/dist/core/project-manager.js.map +1 -0
  49. package/dist/core/sync/profile-manager.d.ts +72 -0
  50. package/dist/core/sync/profile-manager.d.ts.map +1 -0
  51. package/dist/core/sync/profile-manager.js +338 -0
  52. package/dist/core/sync/profile-manager.js.map +1 -0
  53. package/dist/core/sync/profile-selector.d.ts +52 -0
  54. package/dist/core/sync/profile-selector.d.ts.map +1 -0
  55. package/dist/core/sync/profile-selector.js +179 -0
  56. package/dist/core/sync/profile-selector.js.map +1 -0
  57. package/dist/core/sync/project-context.d.ts +81 -0
  58. package/dist/core/sync/project-context.d.ts.map +1 -0
  59. package/dist/core/sync/project-context.js +354 -0
  60. package/dist/core/sync/project-context.js.map +1 -0
  61. package/dist/core/sync/rate-limiter.d.ts +116 -0
  62. package/dist/core/sync/rate-limiter.d.ts.map +1 -0
  63. package/dist/core/sync/rate-limiter.js +308 -0
  64. package/dist/core/sync/rate-limiter.js.map +1 -0
  65. package/dist/core/sync/time-range-selector.d.ts +48 -0
  66. package/dist/core/sync/time-range-selector.d.ts.map +1 -0
  67. package/dist/core/sync/time-range-selector.js +224 -0
  68. package/dist/core/sync/time-range-selector.js.map +1 -0
  69. package/dist/core/types/config.d.ts +4 -0
  70. package/dist/core/types/config.d.ts.map +1 -1
  71. package/dist/core/types/config.js.map +1 -1
  72. package/dist/core/types/sync-profile.d.ts +205 -0
  73. package/dist/core/types/sync-profile.d.ts.map +1 -0
  74. package/dist/core/types/sync-profile.js +8 -0
  75. package/dist/core/types/sync-profile.js.map +1 -0
  76. package/dist/utils/project-detection.d.ts +141 -0
  77. package/dist/utils/project-detection.d.ts.map +1 -0
  78. package/dist/utils/project-detection.js +321 -0
  79. package/dist/utils/project-detection.js.map +1 -0
  80. package/package.json +2 -1
  81. package/plugins/specweave/agents/pm/AGENT.md +7 -4
  82. package/plugins/specweave/commands/specweave-abandon.md +17 -17
  83. package/plugins/specweave/commands/specweave-check-tests.md +14 -14
  84. package/plugins/specweave/commands/specweave-costs.md +1 -1
  85. package/plugins/specweave/commands/specweave-do.md +12 -12
  86. package/plugins/specweave/commands/specweave-done.md +28 -15
  87. package/plugins/specweave/commands/specweave-import-docs.md +212 -0
  88. package/plugins/specweave/commands/specweave-increment.md +10 -10
  89. package/plugins/specweave/commands/specweave-init-multiproject.md +146 -0
  90. package/plugins/specweave/commands/specweave-next.md +16 -16
  91. package/plugins/specweave/commands/specweave-pause.md +17 -17
  92. package/plugins/specweave/commands/specweave-progress.md +10 -10
  93. package/plugins/specweave/commands/specweave-qa.md +11 -11
  94. package/plugins/specweave/commands/specweave-resume.md +22 -22
  95. package/plugins/specweave/commands/specweave-status.md +18 -18
  96. package/plugins/specweave/commands/specweave-switch-project.md +168 -0
  97. package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
  98. package/plugins/specweave/commands/specweave-sync-tasks.md +9 -9
  99. package/plugins/specweave/commands/specweave-tdd-cycle.md +7 -0
  100. package/plugins/specweave/commands/specweave-tdd-green.md +7 -0
  101. package/plugins/specweave/commands/specweave-tdd-red.md +7 -0
  102. package/plugins/specweave/commands/specweave-tdd-refactor.md +7 -0
  103. package/plugins/specweave/commands/specweave-translate.md +1 -1
  104. package/plugins/specweave/commands/specweave-update-scope.md +8 -8
  105. package/plugins/specweave/commands/specweave-validate.md +18 -20
  106. package/plugins/specweave/commands/specweave.md +5 -5
  107. package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
  108. package/plugins/specweave/skills/increment-planner/SKILL.md +40 -4
  109. package/plugins/specweave/skills/increment-quality-judge/SKILL.md +5 -5
  110. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +5 -5
  111. package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
  112. package/plugins/specweave-ado/commands/{close-workitem.md → specweave-ado-close-workitem.md} +1 -1
  113. package/plugins/specweave-ado/commands/{create-workitem.md → specweave-ado-create-workitem.md} +1 -1
  114. package/plugins/specweave-ado/commands/{status.md → specweave-ado-status.md} +1 -1
  115. package/plugins/specweave-ado/commands/{sync.md → specweave-ado-sync.md} +1 -1
  116. package/plugins/specweave-ado/lib/ado-client-v2.ts +547 -0
  117. package/plugins/specweave-github/commands/{close-issue.md → specweave-github-close-issue.md} +1 -1
  118. package/plugins/specweave-github/commands/{create-issue.md → specweave-github-create-issue.md} +1 -1
  119. package/plugins/specweave-github/commands/{status.md → specweave-github-status.md} +1 -1
  120. package/plugins/specweave-github/commands/{sync-tasks.md → specweave-github-sync-tasks.md} +1 -1
  121. package/plugins/specweave-github/commands/specweave-github-sync.md +568 -0
  122. package/plugins/specweave-github/lib/github-client-v2.ts +555 -0
  123. package/plugins/specweave-infrastructure/commands/{monitor-setup.md → specweave-infrastructure-monitor-setup.md} +1 -1
  124. package/plugins/specweave-infrastructure/commands/{slo-implement.md → specweave-infrastructure-slo-implement.md} +1 -1
  125. package/plugins/specweave-jira/commands/{sync.md → specweave-jira-sync.md} +1 -1
  126. package/plugins/specweave-jira/lib/jira-client-v2.ts +529 -0
  127. package/plugins/specweave-ml/commands/{ml-deploy.md → specweave-ml-deploy.md} +1 -1
  128. package/plugins/specweave-ml/commands/{ml-evaluate.md → specweave-ml-evaluate.md} +1 -1
  129. package/plugins/specweave-ml/commands/{ml-explain.md → specweave-ml-explain.md} +1 -1
  130. package/plugins/specweave-ml/commands/{ml-pipeline.md → specweave-ml-pipeline.md} +1 -1
  131. package/src/templates/AGENTS.md.template +1 -0
  132. package/src/templates/CLAUDE.md.template +1 -0
  133. package/plugins/specweave/hooks/post-increment-plugin-detect.sh +0 -142
  134. package/plugins/specweave/hooks/pre-task-plugin-detect.sh +0 -96
  135. package/plugins/specweave/skills/plugin-detector/SKILL.md +0 -324
  136. package/plugins/specweave-github/commands/sync.md +0 -443
  137. /package/plugins/specweave/{commands/README.md → COMMANDS.md} +0 -0
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Rate Limiter for External Sync
3
+ *
4
+ * Provides rate limiting protection, estimation, and backoff strategies
5
+ * for GitHub, JIRA, and Azure DevOps sync operations.
6
+ */
7
+ import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
8
+ // ============================================================================
9
+ // Provider Rate Limit Constants
10
+ // ============================================================================
11
+ export const PROVIDER_RATE_LIMITS = {
12
+ github: {
13
+ limit: 5000,
14
+ window: '1h',
15
+ thresholds: {
16
+ low: 250, // < 5% of limit
17
+ medium: 1000, // < 20% of limit
18
+ high: 2500, // < 50% of limit
19
+ },
20
+ },
21
+ jira: {
22
+ limit: 100,
23
+ window: '1m',
24
+ thresholds: {
25
+ low: 25,
26
+ medium: 50,
27
+ high: 75,
28
+ },
29
+ },
30
+ ado: {
31
+ limit: 200,
32
+ window: '5m',
33
+ thresholds: {
34
+ low: 50,
35
+ medium: 100,
36
+ high: 150,
37
+ },
38
+ },
39
+ };
40
+ // ============================================================================
41
+ // Time Range Estimation Constants
42
+ // ============================================================================
43
+ /**
44
+ * Average work items created per time period
45
+ * (Adjust based on real project velocity)
46
+ */
47
+ const ITEMS_PER_PERIOD = {
48
+ '1W': 50,
49
+ '2W': 100,
50
+ '1M': 200,
51
+ '3M': 600,
52
+ '6M': 1200,
53
+ '1Y': 2400,
54
+ ALL: 5000, // Estimate - actual will vary greatly
55
+ };
56
+ /**
57
+ * API call multiplier (overhead for pagination, metadata, etc.)
58
+ */
59
+ const API_CALL_MULTIPLIER = 1.5;
60
+ /**
61
+ * Throughput (items synced per minute)
62
+ */
63
+ const ITEMS_PER_MINUTE = 100;
64
+ // ============================================================================
65
+ // Rate Limiter Class
66
+ // ============================================================================
67
+ export class RateLimiter {
68
+ constructor(provider) {
69
+ this.provider = provider;
70
+ }
71
+ // ==========================================================================
72
+ // Estimation
73
+ // ==========================================================================
74
+ /**
75
+ * Estimate sync operation impact
76
+ *
77
+ * @param timeRange Time range preset
78
+ * @param customFactor Custom scaling factor (default: 1.0)
79
+ * @returns Estimate of items, API calls, duration, and impact
80
+ */
81
+ estimateSync(timeRange, customFactor = 1.0) {
82
+ // Base estimate from preset
83
+ const baseItems = ITEMS_PER_PERIOD[timeRange];
84
+ const items = Math.ceil(baseItems * customFactor);
85
+ // Calculate API calls (with overhead)
86
+ const apiCalls = Math.ceil(items * API_CALL_MULTIPLIER);
87
+ // Estimate duration
88
+ const durationMinutes = Math.ceil(items / ITEMS_PER_MINUTE);
89
+ // Calculate rate limit impact
90
+ const rateLimitImpact = this.calculateImpact(apiCalls);
91
+ return {
92
+ items,
93
+ apiCalls,
94
+ durationMinutes,
95
+ rateLimitImpact,
96
+ };
97
+ }
98
+ /**
99
+ * Calculate rate limit impact level
100
+ *
101
+ * @param apiCalls Number of API calls
102
+ * @returns Impact level: low, medium, high, or critical
103
+ */
104
+ calculateImpact(apiCalls) {
105
+ const limits = PROVIDER_RATE_LIMITS[this.provider];
106
+ if (apiCalls < limits.thresholds.low) {
107
+ return 'low';
108
+ }
109
+ else if (apiCalls < limits.thresholds.medium) {
110
+ return 'medium';
111
+ }
112
+ else if (apiCalls < limits.thresholds.high) {
113
+ return 'high';
114
+ }
115
+ else {
116
+ return 'critical';
117
+ }
118
+ }
119
+ // ==========================================================================
120
+ // Rate Limit Checking
121
+ // ==========================================================================
122
+ /**
123
+ * Check current rate limit status (provider-specific)
124
+ *
125
+ * @param client Provider client (e.g., GitHubClient)
126
+ * @returns Current rate limit status
127
+ */
128
+ async checkRateLimitStatus(client) {
129
+ try {
130
+ if (this.provider === 'github') {
131
+ return await this.checkGitHubRateLimit(client);
132
+ }
133
+ else if (this.provider === 'jira') {
134
+ return await this.checkJiraRateLimit(client);
135
+ }
136
+ else if (this.provider === 'ado') {
137
+ return await this.checkAdoRateLimit(client);
138
+ }
139
+ return null;
140
+ }
141
+ catch (error) {
142
+ console.warn(`Failed to check rate limit for ${this.provider}:`, error);
143
+ return null;
144
+ }
145
+ }
146
+ /**
147
+ * Check GitHub rate limit status
148
+ */
149
+ async checkGitHubRateLimit(client) {
150
+ try {
151
+ // Use secure execFileNoThrow instead of execSync
152
+ const result = await execFileNoThrow('gh', [
153
+ 'api',
154
+ 'rate_limit',
155
+ '--jq',
156
+ '.resources.core',
157
+ ]);
158
+ if (!result.success) {
159
+ throw new Error(`GitHub CLI command failed: ${result.stderr || 'Unknown error'}`);
160
+ }
161
+ const data = JSON.parse(result.stdout);
162
+ return {
163
+ remaining: data.remaining,
164
+ limit: data.limit,
165
+ resetAt: new Date(data.reset * 1000).toISOString(),
166
+ percentUsed: ((data.limit - data.remaining) / data.limit) * 100,
167
+ };
168
+ }
169
+ catch (error) {
170
+ throw new Error(`Failed to check GitHub rate limit. Is \`gh\` CLI authenticated? ${error.message}`);
171
+ }
172
+ }
173
+ /**
174
+ * Check JIRA rate limit status
175
+ * (JIRA doesn't expose rate limit info - return estimated)
176
+ */
177
+ async checkJiraRateLimit(client) {
178
+ // JIRA: No API to check rate limits - return estimated
179
+ const limits = PROVIDER_RATE_LIMITS.jira;
180
+ return {
181
+ remaining: limits.limit,
182
+ limit: limits.limit,
183
+ resetAt: new Date(Date.now() + 60 * 1000).toISOString(), // 1 minute window
184
+ percentUsed: 0, // Unknown
185
+ };
186
+ }
187
+ /**
188
+ * Check Azure DevOps rate limit status
189
+ * (ADO doesn't expose rate limit info - return estimated)
190
+ */
191
+ async checkAdoRateLimit(client) {
192
+ // ADO: No API to check rate limits - return estimated
193
+ const limits = PROVIDER_RATE_LIMITS.ado;
194
+ return {
195
+ remaining: limits.limit,
196
+ limit: limits.limit,
197
+ resetAt: new Date(Date.now() + 5 * 60 * 1000).toISOString(), // 5 minute window
198
+ percentUsed: 0, // Unknown
199
+ };
200
+ }
201
+ // ==========================================================================
202
+ // Sync Protection
203
+ // ==========================================================================
204
+ /**
205
+ * Validate sync operation is safe to proceed
206
+ *
207
+ * @param estimate Sync estimate
208
+ * @param rateLimitStatus Current rate limit status (optional)
209
+ * @returns Validation result
210
+ */
211
+ validateSync(estimate, rateLimitStatus) {
212
+ const warnings = [];
213
+ const blockers = [];
214
+ // Check impact level
215
+ if (estimate.rateLimitImpact === 'high') {
216
+ warnings.push(`High rate limit impact: ${estimate.apiCalls} API calls (will use ${this.getImpactPercentage(estimate.apiCalls)}% of ${this.provider} rate limit)`);
217
+ }
218
+ else if (estimate.rateLimitImpact === 'critical') {
219
+ blockers.push(`CRITICAL rate limit impact: ${estimate.apiCalls} API calls exceeds safe threshold for ${this.provider}`);
220
+ }
221
+ // Check duration
222
+ if (estimate.durationMinutes > 10) {
223
+ warnings.push(`Long sync duration: ~${estimate.durationMinutes} minutes`);
224
+ }
225
+ // Check current rate limit status
226
+ if (rateLimitStatus) {
227
+ const percentUsed = rateLimitStatus.percentUsed;
228
+ if (percentUsed > 80) {
229
+ warnings.push(`Rate limit already ${Math.round(percentUsed)}% used. Consider waiting until reset at ${rateLimitStatus.resetAt}`);
230
+ }
231
+ // Check if sync would exceed limit
232
+ const afterSync = rateLimitStatus.remaining - estimate.apiCalls;
233
+ if (afterSync < 0) {
234
+ blockers.push(`Not enough rate limit remaining. Need ${estimate.apiCalls} calls, only ${rateLimitStatus.remaining} remaining. Reset at ${rateLimitStatus.resetAt}`);
235
+ }
236
+ else if (afterSync < rateLimitStatus.limit * 0.1) {
237
+ warnings.push(`After sync, only ${afterSync} requests remaining (${Math.round((afterSync / rateLimitStatus.limit) * 100)}%)`);
238
+ }
239
+ }
240
+ return {
241
+ safe: blockers.length === 0,
242
+ warnings,
243
+ blockers,
244
+ };
245
+ }
246
+ /**
247
+ * Get impact percentage for given API calls
248
+ */
249
+ getImpactPercentage(apiCalls) {
250
+ const limits = PROVIDER_RATE_LIMITS[this.provider];
251
+ return Math.round((apiCalls / limits.limit) * 100);
252
+ }
253
+ // ==========================================================================
254
+ // Backoff Strategy
255
+ // ==========================================================================
256
+ /**
257
+ * Calculate backoff delay when rate limited
258
+ *
259
+ * @param attempt Current retry attempt (0-indexed)
260
+ * @param maxBackoff Maximum backoff in milliseconds (default: 5 minutes)
261
+ * @returns Delay in milliseconds
262
+ */
263
+ calculateBackoff(attempt, maxBackoff = 5 * 60 * 1000) {
264
+ // Exponential backoff: 2^attempt * 1000ms, capped at maxBackoff
265
+ const delay = Math.min(Math.pow(2, attempt) * 1000, maxBackoff);
266
+ return delay;
267
+ }
268
+ /**
269
+ * Wait for rate limit to reset
270
+ *
271
+ * @param resetAt ISO timestamp when rate limit resets
272
+ * @returns Promise that resolves when rate limit resets
273
+ */
274
+ async waitForReset(resetAt) {
275
+ const resetTime = new Date(resetAt).getTime();
276
+ const now = Date.now();
277
+ const delay = Math.max(0, resetTime - now);
278
+ if (delay > 0) {
279
+ console.log(`⏳ Waiting for rate limit reset... (${Math.ceil(delay / 1000 / 60)} minutes)`);
280
+ await new Promise((resolve) => setTimeout(resolve, delay));
281
+ }
282
+ }
283
+ // ==========================================================================
284
+ // Formatting Helpers
285
+ // ==========================================================================
286
+ /**
287
+ * Format estimate for display
288
+ */
289
+ formatEstimate(estimate) {
290
+ const impactEmoji = {
291
+ low: '⚡',
292
+ medium: '⚠️ ',
293
+ high: '⚠️ ',
294
+ critical: '❌',
295
+ };
296
+ return `${estimate.items} items | ${estimate.apiCalls} API calls | ${impactEmoji[estimate.rateLimitImpact]} ${estimate.durationMinutes} min | Rate: ${estimate.rateLimitImpact.toUpperCase()}`;
297
+ }
298
+ /**
299
+ * Format rate limit status for display
300
+ */
301
+ formatRateLimitStatus(status) {
302
+ const resetDate = new Date(status.resetAt);
303
+ const now = new Date();
304
+ const minutesUntilReset = Math.ceil((resetDate.getTime() - now.getTime()) / 1000 / 60);
305
+ return `${status.remaining}/${status.limit} (${Math.round(100 - status.percentUsed)}% available) | Resets in ${minutesUntilReset} min`;
306
+ }
307
+ }
308
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/core/sync/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Interactive Time Range Selector
3
+ *
4
+ * Rich CLI interface for selecting time ranges with:
5
+ * - Real-time estimates (items, duration, API calls)
6
+ * - Rate limit impact visualization
7
+ * - Current rate limit status
8
+ * - Warnings and recommendations
9
+ */
10
+ import { TimeRangePreset, TimeRangeEstimate, RateLimitStatus, SyncProvider } from '../types/sync-profile';
11
+ export declare class TimeRangeSelector {
12
+ private rateLimiter;
13
+ private provider;
14
+ constructor(provider: SyncProvider);
15
+ /**
16
+ * Display time range options with estimates
17
+ *
18
+ * @param rateLimitStatus Current rate limit status (optional)
19
+ * @returns Object with selected range, estimate, and user confirmed
20
+ */
21
+ displayOptions(rateLimitStatus?: RateLimitStatus | null): {
22
+ options: TimeRangeOption[];
23
+ rateLimitInfo: string[];
24
+ recommendation: string;
25
+ };
26
+ /**
27
+ * Format option for display
28
+ */
29
+ formatOption(option: TimeRangeOption, index: number): string[];
30
+ /**
31
+ * Display preview after selection
32
+ */
33
+ displayPreview(selectedOption: TimeRangeOption, rateLimitStatus?: RateLimitStatus | null): string[];
34
+ private getProviderDisplayName;
35
+ private getImpactEmoji;
36
+ private formatImpact;
37
+ private formatDuration;
38
+ private getImpactPercentage;
39
+ private getDateRange;
40
+ }
41
+ export interface TimeRangeOption {
42
+ preset: TimeRangePreset;
43
+ label: string;
44
+ estimate: TimeRangeEstimate;
45
+ recommended?: boolean;
46
+ warning?: string;
47
+ }
48
+ //# sourceMappingURL=time-range-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-range-selector.d.ts","sourceRoot":"","sources":["../../../src/core/sync/time-range-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,EACb,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAe;gBAEnB,QAAQ,EAAE,YAAY;IASlC;;;;;OAKG;IACH,cAAc,CACZ,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,GACvC;QACD,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB;IA0ED;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB9D;;OAEG;IACH,cAAc,CACZ,cAAc,EAAE,eAAe,EAC/B,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,GACvC,MAAM,EAAE;IAyEX,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,YAAY;CA6BrB;AAMD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Interactive Time Range Selector
3
+ *
4
+ * Rich CLI interface for selecting time ranges with:
5
+ * - Real-time estimates (items, duration, API calls)
6
+ * - Rate limit impact visualization
7
+ * - Current rate limit status
8
+ * - Warnings and recommendations
9
+ */
10
+ import { RateLimiter, PROVIDER_RATE_LIMITS } from './rate-limiter';
11
+ // ============================================================================
12
+ // Time Range Selector
13
+ // ============================================================================
14
+ export class TimeRangeSelector {
15
+ constructor(provider) {
16
+ this.provider = provider;
17
+ this.rateLimiter = new RateLimiter(provider);
18
+ }
19
+ // ==========================================================================
20
+ // Interactive Selection
21
+ // ==========================================================================
22
+ /**
23
+ * Display time range options with estimates
24
+ *
25
+ * @param rateLimitStatus Current rate limit status (optional)
26
+ * @returns Object with selected range, estimate, and user confirmed
27
+ */
28
+ displayOptions(rateLimitStatus) {
29
+ const options = [
30
+ {
31
+ preset: '1W',
32
+ label: 'Last 1 week',
33
+ estimate: this.rateLimiter.estimateSync('1W'),
34
+ },
35
+ {
36
+ preset: '2W',
37
+ label: 'Last 2 weeks',
38
+ estimate: this.rateLimiter.estimateSync('2W'),
39
+ },
40
+ {
41
+ preset: '1M',
42
+ label: 'Last 1 month',
43
+ estimate: this.rateLimiter.estimateSync('1M'),
44
+ recommended: true,
45
+ },
46
+ {
47
+ preset: '3M',
48
+ label: 'Last 3 months',
49
+ estimate: this.rateLimiter.estimateSync('3M'),
50
+ },
51
+ {
52
+ preset: '6M',
53
+ label: 'Last 6 months',
54
+ estimate: this.rateLimiter.estimateSync('6M'),
55
+ },
56
+ {
57
+ preset: '1Y',
58
+ label: 'Last 1 year',
59
+ estimate: this.rateLimiter.estimateSync('1Y'),
60
+ },
61
+ {
62
+ preset: 'ALL',
63
+ label: 'All time',
64
+ estimate: this.rateLimiter.estimateSync('ALL'),
65
+ warning: '⚠️ WARNING: Will likely exceed rate limit! Not recommended.',
66
+ },
67
+ ];
68
+ // Build rate limit info
69
+ const rateLimitInfo = [];
70
+ const limits = PROVIDER_RATE_LIMITS[this.provider];
71
+ rateLimitInfo.push(`📅 ${this.getProviderDisplayName()} Rate Limits:`);
72
+ rateLimitInfo.push(` • Limit: ${limits.limit.toLocaleString()} requests per ${limits.window}`);
73
+ if (rateLimitStatus) {
74
+ rateLimitInfo.push(` • Current: ${rateLimitStatus.remaining.toLocaleString()}/${rateLimitStatus.limit.toLocaleString()} (${Math.round(100 - rateLimitStatus.percentUsed)}% available)`);
75
+ const resetDate = new Date(rateLimitStatus.resetAt);
76
+ const now = new Date();
77
+ const minutesUntilReset = Math.ceil((resetDate.getTime() - now.getTime()) / 1000 / 60);
78
+ rateLimitInfo.push(` • Resets: ${resetDate.toLocaleTimeString()} (${minutesUntilReset} min)`);
79
+ }
80
+ return {
81
+ options,
82
+ rateLimitInfo,
83
+ recommendation: '💡 Recommended: 1 month balances completeness with performance',
84
+ };
85
+ }
86
+ /**
87
+ * Format option for display
88
+ */
89
+ formatOption(option, index) {
90
+ const lines = [];
91
+ // Option number and label
92
+ const recommendedTag = option.recommended ? ' ← Recommended' : '';
93
+ lines.push(` ${index + 1}. ${option.label}${recommendedTag}`);
94
+ // Estimate details
95
+ const estimate = option.estimate;
96
+ const impactEmoji = this.getImpactEmoji(estimate.rateLimitImpact);
97
+ const durationStr = this.formatDuration(estimate.durationMinutes);
98
+ lines.push(` └─ ~${estimate.items} items | ${estimate.apiCalls} API calls | ${impactEmoji} ${durationStr} | Rate: ${this.formatImpact(estimate.rateLimitImpact)}`);
99
+ // Warning if present
100
+ if (option.warning) {
101
+ lines.push(` └─ ${option.warning}`);
102
+ }
103
+ return lines;
104
+ }
105
+ /**
106
+ * Display preview after selection
107
+ */
108
+ displayPreview(selectedOption, rateLimitStatus) {
109
+ const lines = [];
110
+ lines.push('');
111
+ lines.push('📊 Sync Preview:');
112
+ lines.push('');
113
+ lines.push(` Time range: ${selectedOption.label}`);
114
+ lines.push(` └─ ${this.getDateRange(selectedOption.preset)}`);
115
+ lines.push('');
116
+ lines.push(' Estimated sync:');
117
+ lines.push(` ├─ Work items: ~${selectedOption.estimate.items} issues/PRs/work items`);
118
+ lines.push(` ├─ API calls: ~${selectedOption.estimate.apiCalls} requests`);
119
+ lines.push(` ├─ Duration: ~${this.formatDuration(selectedOption.estimate.durationMinutes)}`);
120
+ lines.push(` └─ Rate limit: ${this.formatImpact(selectedOption.estimate.rateLimitImpact)} impact (${this.getImpactPercentage(selectedOption.estimate)}% of ${this.getProviderDisplayName()} limit)`);
121
+ // Rate limit status
122
+ if (rateLimitStatus) {
123
+ lines.push('');
124
+ lines.push(` ${this.getProviderDisplayName()} rate limit (BEFORE sync):`);
125
+ lines.push(` ├─ Current: ${rateLimitStatus.remaining.toLocaleString()}/${rateLimitStatus.limit.toLocaleString()} (${Math.round(100 - rateLimitStatus.percentUsed)}% available)`);
126
+ const afterSync = rateLimitStatus.remaining - selectedOption.estimate.apiCalls;
127
+ const afterPercentage = (afterSync / rateLimitStatus.limit) * 100;
128
+ lines.push(` ├─ After sync: ~${afterSync.toLocaleString()}/${rateLimitStatus.limit.toLocaleString()} (${Math.round(afterPercentage)}% available)`);
129
+ const resetDate = new Date(rateLimitStatus.resetAt);
130
+ lines.push(` └─ Reset: ${resetDate.toLocaleTimeString()}`);
131
+ }
132
+ lines.push('');
133
+ // Safety assessment
134
+ const validation = this.rateLimiter.validateSync(selectedOption.estimate, rateLimitStatus);
135
+ if (validation.safe) {
136
+ lines.push('✅ This sync is SAFE to proceed');
137
+ }
138
+ else {
139
+ lines.push('❌ This sync may FAIL due to:');
140
+ validation.blockers.forEach((blocker) => {
141
+ lines.push(` • ${blocker}`);
142
+ });
143
+ }
144
+ if (validation.warnings.length > 0) {
145
+ lines.push('');
146
+ lines.push('⚠️ Warnings:');
147
+ validation.warnings.forEach((warning) => {
148
+ lines.push(` • ${warning}`);
149
+ });
150
+ }
151
+ return lines;
152
+ }
153
+ // ==========================================================================
154
+ // Formatting Helpers
155
+ // ==========================================================================
156
+ getProviderDisplayName() {
157
+ const names = {
158
+ github: 'GitHub',
159
+ jira: 'JIRA',
160
+ ado: 'Azure DevOps',
161
+ };
162
+ return names[this.provider];
163
+ }
164
+ getImpactEmoji(impact) {
165
+ const emojis = {
166
+ low: '⚡',
167
+ medium: '⚠️ ',
168
+ high: '⚠️ ',
169
+ critical: '❌',
170
+ };
171
+ return emojis[impact] || '?';
172
+ }
173
+ formatImpact(impact) {
174
+ return impact.toUpperCase();
175
+ }
176
+ formatDuration(minutes) {
177
+ if (minutes < 1) {
178
+ return '< 1 min';
179
+ }
180
+ else if (minutes === 1) {
181
+ return '1 min';
182
+ }
183
+ else if (minutes < 60) {
184
+ return `${minutes} min`;
185
+ }
186
+ else {
187
+ const hours = Math.floor(minutes / 60);
188
+ const mins = minutes % 60;
189
+ return mins > 0 ? `${hours}h ${mins}min` : `${hours}h`;
190
+ }
191
+ }
192
+ getImpactPercentage(estimate) {
193
+ const limits = PROVIDER_RATE_LIMITS[this.provider];
194
+ return Math.round((estimate.apiCalls / limits.limit) * 100);
195
+ }
196
+ getDateRange(preset) {
197
+ const now = new Date();
198
+ const since = new Date(now);
199
+ switch (preset) {
200
+ case '1W':
201
+ since.setDate(now.getDate() - 7);
202
+ break;
203
+ case '2W':
204
+ since.setDate(now.getDate() - 14);
205
+ break;
206
+ case '1M':
207
+ since.setMonth(now.getMonth() - 1);
208
+ break;
209
+ case '3M':
210
+ since.setMonth(now.getMonth() - 3);
211
+ break;
212
+ case '6M':
213
+ since.setMonth(now.getMonth() - 6);
214
+ break;
215
+ case '1Y':
216
+ since.setFullYear(now.getFullYear() - 1);
217
+ break;
218
+ case 'ALL':
219
+ return '1970-01-01 to present';
220
+ }
221
+ return `${since.toISOString().split('T')[0]} to ${now.toISOString().split('T')[0]}`;
222
+ }
223
+ }
224
+ //# sourceMappingURL=time-range-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-range-selector.js","sourceRoot":"","sources":["../../../src/core/sync/time-range-selector.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,10 @@ export interface ProjectMetadata {
48
48
  version?: string;
49
49
  /** Project description */
50
50
  description?: string;
51
+ /** Technology stack */
52
+ techStack?: string[];
53
+ /** Team name */
54
+ team?: string;
51
55
  }
52
56
  /**
53
57
  * Adapter configuration
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,wCAAwC;IACxC,aAAa,CAAC,EAAE;QACd,mEAAmE;QACnE,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;QAE1C,yDAAyD;QACzD,eAAe,CAAC,EAAE;YAChB,yDAAyD;YACzD,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IAEF,mCAAmC;IACnC,SAAS,CAAC,EAAE;QACV,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1C,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,eAAe,CA0BnD,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,wCAAwC;IACxC,aAAa,CAAC,EAAE;QACd,mEAAmE;QACnE,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;QAE1C,yDAAyD;QACzD,eAAe,CAAC,EAAE;YAChB,yDAAyD;YACzD,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IAEF,mCAAmC;IACnC,SAAS,CAAC,EAAE;QACV,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1C,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,eAAe,CA0BnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA8FxD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,SAAS,EAAE,CAAC,IAAI,CAAC;QACjB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,MAAM;QACd,sBAAsB,EAAE,IAAI;KAC7B;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,QAAQ;KAClB;IACD,MAAM,EAAE;QACN,mBAAmB,EAAE,CAAC,EAAS,8CAA8C;QAC7E,OAAO,EAAE,CAAC,EAAqB,+BAA+B;QAC9D,uBAAuB,EAAE,IAAI,EAAE,gCAAgC;QAC/D,aAAa,EAAE;YACb,YAAY,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,iCAAiC;YAC1F,eAAe,EAAE;gBACf,UAAU,EAAE,EAAE,EAAa,iCAAiC;aAC7D;SACF;QACD,SAAS,EAAE;YACT,MAAM,EAAE,CAAC,EAAoB,yBAAyB;YACtD,MAAM,EAAE,EAAE,EAAmB,0BAA0B;SACxD;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAoGxD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,SAAS,EAAE,CAAC,IAAI,CAAC;QACjB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,MAAM;QACd,sBAAsB,EAAE,IAAI;KAC7B;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,QAAQ;KAClB;IACD,MAAM,EAAE;QACN,mBAAmB,EAAE,CAAC,EAAS,8CAA8C;QAC7E,OAAO,EAAE,CAAC,EAAqB,+BAA+B;QAC9D,uBAAuB,EAAE,IAAI,EAAE,gCAAgC;QAC/D,aAAa,EAAE;YACb,YAAY,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,iCAAiC;YAC1F,eAAe,EAAE;gBACf,UAAU,EAAE,EAAE,EAAa,iCAAiC;aAC7D;SACF;QACD,SAAS,EAAE;YACT,MAAM,EAAE,CAAC,EAAoB,yBAAyB;YACtD,MAAM,EAAE,EAAE,EAAmB,0BAA0B;SACxD;KACF;CACF,CAAC"}