specweave 0.7.0 → 0.8.1
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/CLAUDE.md +307 -11
- package/README.md +41 -3
- package/dist/cli/commands/import-docs.d.ts +21 -0
- package/dist/cli/commands/import-docs.d.ts.map +1 -0
- package/dist/cli/commands/import-docs.js +146 -0
- package/dist/cli/commands/import-docs.js.map +1 -0
- package/dist/cli/commands/init-multiproject.d.ts +11 -0
- package/dist/cli/commands/init-multiproject.d.ts.map +1 -0
- package/dist/cli/commands/init-multiproject.js +202 -0
- package/dist/cli/commands/init-multiproject.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrate-to-multiproject.d.ts +37 -0
- package/dist/cli/commands/migrate-to-multiproject.d.ts.map +1 -0
- package/dist/cli/commands/migrate-to-multiproject.js +189 -0
- package/dist/cli/commands/migrate-to-multiproject.js.map +1 -0
- package/dist/cli/commands/migrate-to-profiles.d.ts +25 -0
- package/dist/cli/commands/migrate-to-profiles.d.ts.map +1 -0
- package/dist/cli/commands/migrate-to-profiles.js +350 -0
- package/dist/cli/commands/migrate-to-profiles.js.map +1 -0
- package/dist/cli/commands/switch-project.d.ts +13 -0
- package/dist/cli/commands/switch-project.d.ts.map +1 -0
- package/dist/cli/commands/switch-project.js +91 -0
- package/dist/cli/commands/switch-project.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.js +4 -4
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/cli/helpers/issue-tracker/utils.d.ts +6 -3
- package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -1
- package/dist/cli/helpers/issue-tracker/utils.js +9 -7
- package/dist/cli/helpers/issue-tracker/utils.js.map +1 -1
- package/dist/core/brownfield/analyzer.d.ts +86 -0
- package/dist/core/brownfield/analyzer.d.ts.map +1 -0
- package/dist/core/brownfield/analyzer.js +365 -0
- package/dist/core/brownfield/analyzer.js.map +1 -0
- package/dist/core/brownfield/importer.d.ts +76 -0
- package/dist/core/brownfield/importer.d.ts.map +1 -0
- package/dist/core/brownfield/importer.js +287 -0
- package/dist/core/brownfield/importer.js.map +1 -0
- package/dist/core/config-manager.d.ts +47 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +136 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/project-manager.d.ts +127 -0
- package/dist/core/project-manager.d.ts.map +1 -0
- package/dist/core/project-manager.js +524 -0
- package/dist/core/project-manager.js.map +1 -0
- package/dist/core/sync/profile-manager.d.ts +72 -0
- package/dist/core/sync/profile-manager.d.ts.map +1 -0
- package/dist/core/sync/profile-manager.js +338 -0
- package/dist/core/sync/profile-manager.js.map +1 -0
- package/dist/core/sync/profile-selector.d.ts +52 -0
- package/dist/core/sync/profile-selector.d.ts.map +1 -0
- package/dist/core/sync/profile-selector.js +179 -0
- package/dist/core/sync/profile-selector.js.map +1 -0
- package/dist/core/sync/project-context.d.ts +81 -0
- package/dist/core/sync/project-context.d.ts.map +1 -0
- package/dist/core/sync/project-context.js +354 -0
- package/dist/core/sync/project-context.js.map +1 -0
- package/dist/core/sync/rate-limiter.d.ts +116 -0
- package/dist/core/sync/rate-limiter.d.ts.map +1 -0
- package/dist/core/sync/rate-limiter.js +308 -0
- package/dist/core/sync/rate-limiter.js.map +1 -0
- package/dist/core/sync/time-range-selector.d.ts +48 -0
- package/dist/core/sync/time-range-selector.d.ts.map +1 -0
- package/dist/core/sync/time-range-selector.js +224 -0
- package/dist/core/sync/time-range-selector.js.map +1 -0
- package/dist/core/types/config.d.ts +4 -0
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/sync-profile.d.ts +205 -0
- package/dist/core/types/sync-profile.d.ts.map +1 -0
- package/dist/core/types/sync-profile.js +8 -0
- package/dist/core/types/sync-profile.js.map +1 -0
- package/dist/utils/project-detection.d.ts +141 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +321 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/package.json +2 -1
- package/plugins/specweave/agents/pm/AGENT.md +7 -4
- package/plugins/specweave/commands/specweave-abandon.md +17 -17
- package/plugins/specweave/commands/specweave-check-tests.md +14 -14
- package/plugins/specweave/commands/specweave-costs.md +1 -1
- package/plugins/specweave/commands/specweave-do.md +12 -12
- package/plugins/specweave/commands/specweave-done.md +28 -15
- package/plugins/specweave/commands/specweave-import-docs.md +212 -0
- package/plugins/specweave/commands/specweave-increment.md +10 -10
- package/plugins/specweave/commands/specweave-init-multiproject.md +146 -0
- package/plugins/specweave/commands/specweave-next.md +16 -16
- package/plugins/specweave/commands/specweave-pause.md +17 -17
- package/plugins/specweave/commands/specweave-progress.md +10 -10
- package/plugins/specweave/commands/specweave-qa.md +11 -11
- package/plugins/specweave/commands/specweave-resume.md +22 -22
- package/plugins/specweave/commands/specweave-status.md +18 -18
- package/plugins/specweave/commands/specweave-switch-project.md +168 -0
- package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
- package/plugins/specweave/commands/specweave-sync-tasks.md +9 -9
- package/plugins/specweave/commands/specweave-tdd-cycle.md +7 -0
- package/plugins/specweave/commands/specweave-tdd-green.md +7 -0
- package/plugins/specweave/commands/specweave-tdd-red.md +7 -0
- package/plugins/specweave/commands/specweave-tdd-refactor.md +7 -0
- package/plugins/specweave/commands/specweave-translate.md +1 -1
- package/plugins/specweave/commands/specweave-update-scope.md +8 -8
- package/plugins/specweave/commands/specweave-validate.md +18 -20
- package/plugins/specweave/commands/specweave.md +5 -5
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/increment-planner/SKILL.md +40 -4
- package/plugins/specweave/skills/increment-quality-judge/SKILL.md +5 -5
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +5 -5
- package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
- package/plugins/specweave-ado/commands/{close-workitem.md → specweave-ado-close-workitem.md} +1 -1
- package/plugins/specweave-ado/commands/{create-workitem.md → specweave-ado-create-workitem.md} +1 -1
- package/plugins/specweave-ado/commands/{status.md → specweave-ado-status.md} +1 -1
- package/plugins/specweave-ado/commands/{sync.md → specweave-ado-sync.md} +1 -1
- package/plugins/specweave-ado/lib/ado-client-v2.ts +547 -0
- package/plugins/specweave-github/commands/{close-issue.md → specweave-github-close-issue.md} +1 -1
- package/plugins/specweave-github/commands/{create-issue.md → specweave-github-create-issue.md} +1 -1
- package/plugins/specweave-github/commands/{status.md → specweave-github-status.md} +1 -1
- package/plugins/specweave-github/commands/{sync-tasks.md → specweave-github-sync-tasks.md} +1 -1
- package/plugins/specweave-github/commands/specweave-github-sync.md +568 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +555 -0
- package/plugins/specweave-infrastructure/commands/{monitor-setup.md → specweave-infrastructure-monitor-setup.md} +1 -1
- package/plugins/specweave-infrastructure/commands/{slo-implement.md → specweave-infrastructure-slo-implement.md} +1 -1
- package/plugins/specweave-jira/commands/{sync.md → specweave-jira-sync.md} +1 -1
- package/plugins/specweave-jira/lib/jira-client-v2.ts +529 -0
- package/plugins/specweave-ml/commands/{ml-deploy.md → specweave-ml-deploy.md} +1 -1
- package/plugins/specweave-ml/commands/{ml-evaluate.md → specweave-ml-evaluate.md} +1 -1
- package/plugins/specweave-ml/commands/{ml-explain.md → specweave-ml-explain.md} +1 -1
- package/plugins/specweave-ml/commands/{ml-pipeline.md → specweave-ml-pipeline.md} +1 -1
- package/src/templates/AGENTS.md.template +1 -0
- package/src/templates/CLAUDE.md.template +1 -0
- package/plugins/specweave-github/commands/sync.md +0 -443
- /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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAQjE,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE;QACN,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE;YACV,GAAG,EAAE,GAAG,EAAK,gBAAgB;YAC7B,MAAM,EAAE,IAAI,EAAE,iBAAiB;YAC/B,IAAI,EAAE,IAAI,EAAI,iBAAiB;SAChC;KACF;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;SACT;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;SACV;KACF;CACO,CAAC;AAEX,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,gBAAgB,GAAoC;IACxD,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI,EAAE,sCAAsC;CAClD,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;GAEG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,OAAO,WAAW;IAGtB,YAAY,QAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,6EAA6E;IAC7E,aAAa;IACb,6EAA6E;IAE7E;;;;;;OAMG;IACH,YAAY,CACV,SAA0B,EAC1B,eAAuB,GAAG;QAE1B,4BAA4B;QAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC;QAElD,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,CAAC;QAExD,oBAAoB;QACpB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC;QAE5D,8BAA8B;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAEvD,OAAO;YACL,KAAK;YACL,QAAQ;YACR,eAAe;YACf,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,eAAe,CACrB,QAAgB;QAEhB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,sBAAsB;IACtB,6EAA6E;IAE7E;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,MAAW;QACpC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACnC,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,MAAW;QAC5C,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;gBACzC,KAAK;gBACL,YAAY;gBACZ,MAAM;gBACN,iBAAiB;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CACb,8BAA8B,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CACjE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEvC,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBAClD,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG;aAChE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,mEAAmE,KAAK,CAAC,OAAO,EAAE,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAAC,MAAW;QAC1C,uDAAuD;QACvD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC;QAEzC,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,KAAK;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,kBAAkB;YAC3E,WAAW,EAAE,CAAC,EAAE,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAW;QACzC,sDAAsD;QACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC;QAExC,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,KAAK;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,kBAAkB;YAC/E,WAAW,EAAE,CAAC,EAAE,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAE7E;;;;;;OAMG;IACH,YAAY,CACV,QAA2B,EAC3B,eAAwC;QAMxC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,qBAAqB;QACrB,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CACX,2BAA2B,QAAQ,CAAC,QAAQ,wBAAwB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,cAAc,CACnJ,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CACX,+BAA+B,QAAQ,CAAC,QAAQ,yCAAyC,IAAI,CAAC,QAAQ,EAAE,CACzG,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,IAAI,QAAQ,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CACX,wBAAwB,QAAQ,CAAC,eAAe,UAAU,CAC3D,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;YAEhD,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CACX,sBAAsB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,2CAA2C,eAAe,CAAC,OAAO,EAAE,CAClH,CAAC;YACJ,CAAC;YAED,mCAAmC;YACnC,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAChE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CACX,yCAAyC,QAAQ,CAAC,QAAQ,gBAAgB,eAAe,CAAC,SAAS,wBAAwB,eAAe,CAAC,OAAO,EAAE,CACrJ,CAAC;YACJ,CAAC;iBAAM,IAAI,SAAS,GAAG,eAAe,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;gBACnD,QAAQ,CAAC,IAAI,CACX,oBAAoB,SAAS,wBAAwB,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAC/G,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC3B,QAAQ;YACR,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAAgB;QAC1C,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAE7E;;;;;;OAMG;IACH,gBAAgB,CAAC,OAAe,EAAE,aAAqB,CAAC,GAAG,EAAE,GAAG,IAAI;QAClE,gEAAgE;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;QAE3C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,sCAAsC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,WAAW,CAC9E,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,qBAAqB;IACrB,6EAA6E;IAE7E;;OAEG;IACH,cAAc,CAAC,QAA2B;QACxC,MAAM,WAAW,GAAG;YAClB,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,GAAG;SACd,CAAC;QAEF,OAAO,GAAG,QAAQ,CAAC,KAAK,YAAY,QAAQ,CAAC,QAAQ,gBAAgB,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,eAAe,gBAAgB,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;IACjM,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,MAAuB;QAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAEvF,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,4BAA4B,iBAAiB,MAAM,CAAC;IACzI,CAAC;CACF"}
|
|
@@ -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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"}
|
|
@@ -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;
|
|
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;
|
|
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"}
|