specweave 0.28.57 → 0.28.61

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 (44) hide show
  1. package/bin/specweave.js +36 -0
  2. package/dist/src/cli/commands/init.d.ts.map +1 -1
  3. package/dist/src/cli/commands/init.js +13 -1
  4. package/dist/src/cli/commands/init.js.map +1 -1
  5. package/dist/src/cli/commands/jobs.d.ts +20 -0
  6. package/dist/src/cli/commands/jobs.d.ts.map +1 -0
  7. package/dist/src/cli/commands/jobs.js +448 -0
  8. package/dist/src/cli/commands/jobs.js.map +1 -0
  9. package/dist/src/cli/helpers/init/ado-repo-cloning.d.ts +32 -0
  10. package/dist/src/cli/helpers/init/ado-repo-cloning.d.ts.map +1 -0
  11. package/dist/src/cli/helpers/init/ado-repo-cloning.js +161 -0
  12. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -0
  13. package/dist/src/cli/helpers/init/external-import.d.ts +18 -1
  14. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  15. package/dist/src/cli/helpers/init/external-import.js +61 -21
  16. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  17. package/dist/src/cli/helpers/selection-strategy.d.ts +28 -0
  18. package/dist/src/cli/helpers/selection-strategy.d.ts.map +1 -1
  19. package/dist/src/cli/helpers/selection-strategy.js +48 -0
  20. package/dist/src/cli/helpers/selection-strategy.js.map +1 -1
  21. package/dist/src/cli/workers/import-worker.d.ts +18 -0
  22. package/dist/src/cli/workers/import-worker.d.ts.map +1 -0
  23. package/dist/src/cli/workers/import-worker.js +268 -0
  24. package/dist/src/cli/workers/import-worker.js.map +1 -0
  25. package/dist/src/core/background/index.d.ts +8 -0
  26. package/dist/src/core/background/index.d.ts.map +1 -1
  27. package/dist/src/core/background/index.js +8 -0
  28. package/dist/src/core/background/index.js.map +1 -1
  29. package/dist/src/core/background/job-launcher.d.ts +54 -0
  30. package/dist/src/core/background/job-launcher.d.ts.map +1 -0
  31. package/dist/src/core/background/job-launcher.js +206 -0
  32. package/dist/src/core/background/job-launcher.js.map +1 -0
  33. package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts +15 -0
  34. package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts.map +1 -1
  35. package/dist/src/core/repo-structure/providers/azure-devops-provider.js +56 -0
  36. package/dist/src/core/repo-structure/providers/azure-devops-provider.js.map +1 -1
  37. package/dist/src/importers/ado-importer.d.ts +7 -1
  38. package/dist/src/importers/ado-importer.d.ts.map +1 -1
  39. package/dist/src/importers/ado-importer.js +108 -61
  40. package/dist/src/importers/ado-importer.js.map +1 -1
  41. package/package.json +1 -1
  42. package/plugins/specweave/commands/specweave-jobs.md +133 -29
  43. package/plugins/specweave-ado/commands/specweave-ado-clone-repos.md +379 -0
  44. package/plugins/specweave-release/commands/specweave-release-npm.md +51 -14
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Background Jobs CLI Command
3
+ *
4
+ * Monitor and manage long-running background operations:
5
+ * - Repository cloning (multi-repo/umbrella setup)
6
+ * - Issue import (10K+ items from GitHub/JIRA/ADO)
7
+ * - External sync operations
8
+ *
9
+ * Usage:
10
+ * specweave jobs # Show active jobs
11
+ * specweave jobs --all # Show all jobs (including completed)
12
+ * specweave jobs --id <jobId> # Show details for specific job
13
+ * specweave jobs --logs <jobId> # Show worker log output
14
+ * specweave jobs --follow <jobId> # Follow job progress in real-time
15
+ * specweave jobs --kill <jobId> # Kill running background job
16
+ * specweave jobs --resume <jobId> # Resume paused job
17
+ */
18
+ import * as path from 'path';
19
+ import chalk from 'chalk';
20
+ import { Command } from 'commander';
21
+ import { getJobManager, isJobRunning, killJob, getJobLog, getJobResult, launchImportJob, } from '../../core/background/index.js';
22
+ import * as fs from '../../utils/fs-native.js';
23
+ export function createJobsCommand() {
24
+ const cmd = new Command('jobs')
25
+ .description('Monitor and manage background jobs (imports, cloning, sync)')
26
+ .option('--all', 'Show all jobs (including completed)')
27
+ .option('--id <jobId>', 'Show details for specific job')
28
+ .option('--logs <jobId>', 'Show worker log output')
29
+ .option('--follow <jobId>', 'Follow job progress in real-time')
30
+ .option('--kill <jobId>', 'Kill running background job')
31
+ .option('--resume <jobId>', 'Resume paused job')
32
+ .action(async (options) => {
33
+ const projectPath = process.cwd();
34
+ // Check if SpecWeave is initialized
35
+ const specweavePath = path.join(projectPath, '.specweave');
36
+ if (!fs.existsSync(specweavePath)) {
37
+ console.log(chalk.yellow('No SpecWeave project found in current directory.'));
38
+ console.log(chalk.gray('Run `specweave init` to initialize a project.'));
39
+ return;
40
+ }
41
+ try {
42
+ if (options.kill) {
43
+ await handleKill(projectPath, options.kill);
44
+ }
45
+ else if (options.resume) {
46
+ await handleResume(projectPath, options.resume);
47
+ }
48
+ else if (options.logs) {
49
+ await handleLogs(projectPath, options.logs);
50
+ }
51
+ else if (options.follow) {
52
+ await handleFollow(projectPath, options.follow);
53
+ }
54
+ else if (options.id) {
55
+ await handleJobDetails(projectPath, options.id);
56
+ }
57
+ else {
58
+ await handleListJobs(projectPath, options.all);
59
+ }
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : String(error);
63
+ console.error(chalk.red(`Error: ${errorMessage}`));
64
+ process.exit(1);
65
+ }
66
+ });
67
+ return cmd;
68
+ }
69
+ /**
70
+ * Get provider from job config (type-safe)
71
+ */
72
+ function getJobProvider(job) {
73
+ const config = job.config;
74
+ if (config.type === 'import-issues' || config.type === 'sync-external') {
75
+ return config.provider || 'unknown';
76
+ }
77
+ return 'unknown';
78
+ }
79
+ /**
80
+ * List all jobs
81
+ */
82
+ async function handleListJobs(projectPath, showAll) {
83
+ const jobManager = getJobManager(projectPath);
84
+ const jobs = jobManager.getJobs();
85
+ if (jobs.length === 0) {
86
+ console.log(chalk.gray('No background jobs found.'));
87
+ console.log(chalk.gray('\nJobs are created when importing large datasets during `specweave init`.'));
88
+ return;
89
+ }
90
+ // Group jobs by status
91
+ const running = jobs.filter((j) => j.status === 'running');
92
+ const paused = jobs.filter((j) => j.status === 'paused');
93
+ const completed = jobs.filter((j) => j.status === 'completed');
94
+ const failed = jobs.filter((j) => j.status === 'failed');
95
+ console.log(chalk.blue('\n📋 Background Jobs\n'));
96
+ // Running jobs
97
+ if (running.length > 0) {
98
+ console.log(chalk.green(`🔄 Running (${running.length}):`));
99
+ for (const job of running) {
100
+ printJobSummary(job, projectPath);
101
+ }
102
+ console.log('');
103
+ }
104
+ // Paused jobs
105
+ if (paused.length > 0) {
106
+ console.log(chalk.yellow(`⏸️ Paused (${paused.length}):`));
107
+ for (const job of paused) {
108
+ printJobSummary(job, projectPath);
109
+ }
110
+ console.log('');
111
+ }
112
+ // Failed jobs
113
+ if (failed.length > 0) {
114
+ console.log(chalk.red(`❌ Failed (${failed.length}):`));
115
+ for (const job of failed) {
116
+ printJobSummary(job, projectPath);
117
+ }
118
+ console.log('');
119
+ }
120
+ // Completed jobs (only if --all)
121
+ if (showAll && completed.length > 0) {
122
+ console.log(chalk.gray(`✅ Completed (${completed.length}):`));
123
+ for (const job of completed.slice(0, 10)) {
124
+ printJobSummary(job, projectPath, true);
125
+ }
126
+ if (completed.length > 10) {
127
+ console.log(chalk.gray(` ... and ${completed.length - 10} more`));
128
+ }
129
+ console.log('');
130
+ }
131
+ // Show hints
132
+ console.log(chalk.blue('💡 Commands:'));
133
+ console.log(chalk.gray(' specweave jobs --id <jobId> → Details for specific job'));
134
+ console.log(chalk.gray(' specweave jobs --follow <jobId> → Follow progress live'));
135
+ console.log(chalk.gray(' specweave jobs --logs <jobId> → View worker logs'));
136
+ if (paused.length > 0) {
137
+ console.log(chalk.gray(' specweave jobs --resume <jobId> → Resume paused job'));
138
+ }
139
+ if (running.length > 0) {
140
+ console.log(chalk.gray(' specweave jobs --kill <jobId> → Kill running job'));
141
+ }
142
+ console.log(chalk.gray(' specweave jobs --all → Show all jobs (including completed)'));
143
+ console.log('');
144
+ }
145
+ /**
146
+ * Print job summary line
147
+ */
148
+ function printJobSummary(job, projectPath, compact = false) {
149
+ const shortId = job.id.slice(0, 8);
150
+ const provider = getJobProvider(job);
151
+ const progress = job.progress;
152
+ if (compact) {
153
+ // Compact format for completed jobs
154
+ const ago = getTimeAgo(job.updatedAt);
155
+ console.log(chalk.gray(` [${shortId}] ${job.type} - ${progress.current} items - ${ago}`));
156
+ return;
157
+ }
158
+ // Full format for active jobs
159
+ console.log(chalk.white(` [${shortId}] ${job.type} (${provider})`));
160
+ // Progress bar
161
+ const percentage = progress.total > 0
162
+ ? Math.round((progress.current / progress.total) * 100)
163
+ : 0;
164
+ const progressBar = createProgressBar(percentage);
165
+ console.log(chalk.gray(` Progress: ${progressBar} ${progress.current}/${progress.total} (${percentage}%)`));
166
+ // Rate and ETA
167
+ const elapsed = (Date.now() - new Date(job.startedAt).getTime()) / 1000;
168
+ const rate = elapsed > 0 ? (progress.current / elapsed).toFixed(1) : '0';
169
+ const remaining = progress.total - progress.current;
170
+ const eta = parseFloat(rate) > 0 ? Math.round(remaining / parseFloat(rate)) : 0;
171
+ const etaStr = formatDuration(eta);
172
+ console.log(chalk.gray(` Rate: ${rate}/s | ETA: ${etaStr}`));
173
+ // Current item
174
+ if (progress.currentItem) {
175
+ console.log(chalk.gray(` Current: ${progress.currentItem}`));
176
+ }
177
+ // Process status
178
+ const running = isJobRunning(projectPath, job.id);
179
+ const pidFile = path.join(projectPath, '.specweave', 'state', 'jobs', job.id, 'worker.pid');
180
+ let pid = 'unknown';
181
+ try {
182
+ if (fs.existsSync(pidFile)) {
183
+ pid = fs.readFileSync(pidFile, 'utf-8').trim();
184
+ }
185
+ }
186
+ catch { /* ignore */ }
187
+ const started = getTimeAgo(job.startedAt);
188
+ console.log(chalk.gray(` PID: ${pid} (${running ? 'alive' : 'not running'}) | Started: ${started}`));
189
+ // Error for failed jobs
190
+ if (job.error) {
191
+ console.log(chalk.red(` Error: ${job.error}`));
192
+ }
193
+ }
194
+ /**
195
+ * Show detailed job info
196
+ */
197
+ async function handleJobDetails(projectPath, jobId) {
198
+ const jobManager = getJobManager(projectPath);
199
+ const job = jobManager.getJob(jobId) || findJobByPrefix(jobManager.getJobs(), jobId);
200
+ if (!job) {
201
+ console.log(chalk.red(`Job not found: ${jobId}`));
202
+ return;
203
+ }
204
+ console.log(chalk.blue(`\n📦 Job Details: ${job.id}\n`));
205
+ console.log(`Type: ${job.type}`);
206
+ console.log(`Status: ${formatStatus(job.status)}`);
207
+ console.log(`Provider: ${getJobProvider(job)}`);
208
+ const pidFile = path.join(projectPath, '.specweave', 'state', 'jobs', job.id, 'worker.pid');
209
+ let pid = 'N/A';
210
+ try {
211
+ if (fs.existsSync(pidFile)) {
212
+ pid = fs.readFileSync(pidFile, 'utf-8').trim();
213
+ }
214
+ }
215
+ catch { /* ignore */ }
216
+ console.log(`PID: ${pid}`);
217
+ console.log('');
218
+ console.log(`Started: ${job.startedAt}`);
219
+ console.log(`Updated: ${job.updatedAt}`);
220
+ console.log('');
221
+ const progress = job.progress;
222
+ const percentage = progress.total > 0
223
+ ? Math.round((progress.current / progress.total) * 100)
224
+ : 0;
225
+ console.log(`Progress: ${progress.current}/${progress.total} (${percentage}%)`);
226
+ if (progress.currentItem) {
227
+ console.log(`Current: ${progress.currentItem}`);
228
+ }
229
+ const elapsed = (Date.now() - new Date(job.startedAt).getTime()) / 1000;
230
+ const rate = elapsed > 0 ? (progress.current / elapsed).toFixed(1) : '0';
231
+ console.log(`Rate: ${rate} items/sec`);
232
+ const remaining = progress.total - progress.current;
233
+ const eta = parseFloat(rate) > 0 ? Math.round(remaining / parseFloat(rate)) : 0;
234
+ console.log(`ETA: ${formatDuration(eta)}`);
235
+ console.log('');
236
+ // Files
237
+ console.log('Files:');
238
+ const jobDir = path.join(projectPath, '.specweave', 'state', 'jobs', job.id);
239
+ console.log(` Config: ${path.join(jobDir, 'config.json')}`);
240
+ console.log(` Logs: ${path.join(jobDir, 'worker.log')}`);
241
+ console.log(` PID: ${pidFile}`);
242
+ // Result if available
243
+ const result = getJobResult(projectPath, job.id);
244
+ if (result) {
245
+ console.log('');
246
+ console.log('Result:');
247
+ console.log(` Total Count: ${result.totalCount}`);
248
+ console.log(` Completed At: ${result.completedAt}`);
249
+ }
250
+ // Error if any
251
+ if (job.error) {
252
+ console.log('');
253
+ console.log(chalk.red(`Error: ${job.error}`));
254
+ }
255
+ }
256
+ /**
257
+ * Show job logs
258
+ */
259
+ async function handleLogs(projectPath, jobId) {
260
+ const jobManager = getJobManager(projectPath);
261
+ const job = jobManager.getJob(jobId) || findJobByPrefix(jobManager.getJobs(), jobId);
262
+ if (!job) {
263
+ console.log(chalk.red(`Job not found: ${jobId}`));
264
+ return;
265
+ }
266
+ const logs = getJobLog(projectPath, job.id, 50);
267
+ if (!logs) {
268
+ console.log(chalk.gray('No logs available for this job.'));
269
+ return;
270
+ }
271
+ console.log(chalk.blue(`\n📋 Worker Logs for ${job.id.slice(0, 8)} (last 50 lines):\n`));
272
+ console.log(logs);
273
+ }
274
+ /**
275
+ * Follow job progress in real-time
276
+ */
277
+ async function handleFollow(projectPath, jobId) {
278
+ const jobManager = getJobManager(projectPath);
279
+ let job = jobManager.getJob(jobId) || findJobByPrefix(jobManager.getJobs(), jobId);
280
+ if (!job) {
281
+ console.log(chalk.red(`Job not found: ${jobId}`));
282
+ return;
283
+ }
284
+ console.log(chalk.blue(`\n📦 Following job ${job.id.slice(0, 8)} (Ctrl+C to stop)\n`));
285
+ let lastProgress = -1;
286
+ let lastItem = '';
287
+ const interval = setInterval(() => {
288
+ // Refresh job data
289
+ job = jobManager.getJob(job.id);
290
+ if (!job) {
291
+ console.log(chalk.yellow('\nJob no longer exists.'));
292
+ clearInterval(interval);
293
+ return;
294
+ }
295
+ const progress = job.progress;
296
+ const timestamp = new Date().toLocaleTimeString();
297
+ // Only print if something changed
298
+ if (progress.current !== lastProgress || progress.currentItem !== lastItem) {
299
+ const percentage = progress.total > 0
300
+ ? Math.round((progress.current / progress.total) * 100)
301
+ : 0;
302
+ const progressBar = createProgressBar(percentage);
303
+ console.log(chalk.gray(`[${timestamp}] ${progressBar} ${progress.current}/${progress.total} (${percentage}%) - ${progress.currentItem || 'processing...'}`));
304
+ lastProgress = progress.current;
305
+ lastItem = progress.currentItem || '';
306
+ }
307
+ // Stop if job completed
308
+ if (job.status === 'completed' || job.status === 'failed') {
309
+ console.log('');
310
+ if (job.status === 'completed') {
311
+ console.log(chalk.green(`✅ Job completed! ${progress.current} items processed.`));
312
+ }
313
+ else {
314
+ console.log(chalk.red(`❌ Job failed: ${job.error}`));
315
+ }
316
+ clearInterval(interval);
317
+ }
318
+ }, 1000);
319
+ // Handle Ctrl+C
320
+ process.on('SIGINT', () => {
321
+ clearInterval(interval);
322
+ console.log(chalk.gray('\nStopped following. Job continues in background.'));
323
+ process.exit(0);
324
+ });
325
+ // Keep process alive
326
+ await new Promise(() => { }); // Never resolves, until SIGINT
327
+ }
328
+ /**
329
+ * Kill a running job
330
+ */
331
+ async function handleKill(projectPath, jobId) {
332
+ const jobManager = getJobManager(projectPath);
333
+ const job = jobManager.getJob(jobId) || findJobByPrefix(jobManager.getJobs(), jobId);
334
+ if (!job) {
335
+ console.log(chalk.red(`Job not found: ${jobId}`));
336
+ return;
337
+ }
338
+ const progress = job.progress;
339
+ const percentage = progress.total > 0 ? Math.round((progress.current / progress.total) * 100) : 0;
340
+ console.log(chalk.yellow(`\n⚠️ Killing job ${job.id.slice(0, 8)}...`));
341
+ console.log(` Type: ${job.type}`);
342
+ console.log(` Progress: ${progress.current}/${progress.total} (${percentage}%)`);
343
+ const success = killJob(projectPath, job.id);
344
+ if (success) {
345
+ console.log(chalk.green('\n✅ Job killed. Status changed to "paused".'));
346
+ console.log(chalk.gray(` Resume later: specweave jobs --resume ${job.id.slice(0, 8)}`));
347
+ }
348
+ else {
349
+ console.log(chalk.yellow('\n⚠️ Could not kill job (may already be stopped).'));
350
+ console.log(chalk.gray(' Check status: specweave jobs --id ' + job.id.slice(0, 8)));
351
+ }
352
+ }
353
+ /**
354
+ * Resume a paused job
355
+ */
356
+ async function handleResume(projectPath, jobId) {
357
+ const jobManager = getJobManager(projectPath);
358
+ const job = jobManager.getJob(jobId) || findJobByPrefix(jobManager.getJobs(), jobId);
359
+ if (!job) {
360
+ console.log(chalk.red(`Job not found: ${jobId}`));
361
+ return;
362
+ }
363
+ if (job.status === 'running') {
364
+ console.log(chalk.yellow(`Job ${job.id.slice(0, 8)} is already running.`));
365
+ console.log(chalk.gray(` Follow progress: specweave jobs --follow ${job.id.slice(0, 8)}`));
366
+ return;
367
+ }
368
+ if (job.status === 'completed') {
369
+ console.log(chalk.gray(`Job ${job.id.slice(0, 8)} is already completed.`));
370
+ return;
371
+ }
372
+ console.log(chalk.cyan(`\n🔄 Resuming job ${job.id.slice(0, 8)}...`));
373
+ console.log(` Type: ${job.type}`);
374
+ console.log(` Provider: ${getJobProvider(job)}`);
375
+ console.log(` Resuming from: item ${job.progress.current} of ${job.progress.total}`);
376
+ // Load original config
377
+ const configPath = path.join(projectPath, '.specweave', 'state', 'jobs', job.id, 'config.json');
378
+ if (!fs.existsSync(configPath)) {
379
+ console.log(chalk.red('\n❌ Cannot resume: job config not found.'));
380
+ return;
381
+ }
382
+ const jobConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
383
+ // Mark job as running again (startJob does this)
384
+ jobManager.startJob(job.id);
385
+ // Re-launch worker
386
+ const result = await launchImportJob({
387
+ type: job.type,
388
+ projectPath,
389
+ coordinatorConfig: jobConfig.coordinatorConfig,
390
+ estimatedTotal: job.progress.total,
391
+ });
392
+ if (result.isBackground) {
393
+ console.log(chalk.green(`\n✅ Job resumed in background.`));
394
+ console.log(chalk.gray(` New PID: ${result.pid}`));
395
+ console.log(chalk.gray(` Check progress: specweave jobs --follow ${job.id.slice(0, 8)}`));
396
+ }
397
+ else {
398
+ console.log(chalk.yellow('\n⚠️ Running in foreground (background mode unavailable).'));
399
+ }
400
+ }
401
+ // Helper functions
402
+ function findJobByPrefix(jobs, prefix) {
403
+ return jobs.find(j => j.id.startsWith(prefix));
404
+ }
405
+ function formatStatus(status) {
406
+ switch (status) {
407
+ case 'running':
408
+ return chalk.green('running');
409
+ case 'paused':
410
+ return chalk.yellow('paused');
411
+ case 'completed':
412
+ return chalk.gray('completed');
413
+ case 'failed':
414
+ return chalk.red('failed');
415
+ default:
416
+ return status;
417
+ }
418
+ }
419
+ function createProgressBar(percentage, width = 20) {
420
+ const filled = Math.round((percentage / 100) * width);
421
+ const empty = width - filled;
422
+ return `[${'█'.repeat(filled)}${'░'.repeat(empty)}]`;
423
+ }
424
+ function formatDuration(seconds) {
425
+ if (seconds <= 0)
426
+ return 'calculating...';
427
+ if (seconds < 60)
428
+ return `${seconds}s`;
429
+ const minutes = Math.floor(seconds / 60);
430
+ const secs = seconds % 60;
431
+ if (minutes < 60)
432
+ return `${minutes}m ${secs}s`;
433
+ const hours = Math.floor(minutes / 60);
434
+ const mins = minutes % 60;
435
+ return `${hours}h ${mins}m`;
436
+ }
437
+ function getTimeAgo(dateStr) {
438
+ const date = new Date(dateStr);
439
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
440
+ if (seconds < 60)
441
+ return 'just now';
442
+ if (seconds < 3600)
443
+ return `${Math.floor(seconds / 60)} mins ago`;
444
+ if (seconds < 86400)
445
+ return `${Math.floor(seconds / 3600)} hours ago`;
446
+ return `${Math.floor(seconds / 86400)} days ago`;
447
+ }
448
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../../src/cli/commands/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAE/C,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;SAC5B,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC;SACtD,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;SAC9D,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SACvD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAkB;IACxC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACvE,OAAQ,MAA0C,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC3E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,OAAgB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,eAAe;IACf,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAkB,EAAE,WAAmB,EAAE,OAAO,GAAG,KAAK;IAC/E,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,IAAI,OAAO,EAAE,CAAC;QACZ,oCAAoC;QACpC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,KAAK,GAAG,CAAC,IAAI,MAAM,QAAQ,CAAC,OAAO,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;IAErE,eAAe;IACf,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,WAAW,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC;IAEhH,eAAe;IACf,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjE,eAAe;IACf,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,iBAAiB;IACjB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5F,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAC;IAEzG,wBAAwB;IACxB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,KAAa;IAChE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAErF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5F,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC,CAAC,CAAC,CAAC;IACN,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC;IAChF,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,QAAQ,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IAEjC,sBAAsB;IACtB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,eAAe;IACf,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,KAAa;IAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAErF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,KAAa;IAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAEnF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEvF,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,mBAAmB;QACnB,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,GAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAElD,kCAAkC;QAClC,IAAI,QAAQ,CAAC,OAAO,KAAK,YAAY,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC;gBACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACvD,CAAC,CAAC,CAAC,CAAC;YACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,QAAQ,QAAQ,CAAC,WAAW,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC;YAE7J,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;YAChC,QAAQ,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,wBAAwB;QACxB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,gBAAgB;IAChB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B;AAC9D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,KAAa;IAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAErF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAE7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,KAAa;IAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAErF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,QAAQ,CAAC,OAAO,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvF,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAChG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,iDAAiD;IACjD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,mBAAmB;IACnB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,IAAuB;QACjC,WAAW;QACX,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;QAC9C,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;KACnC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,mBAAmB;AAEnB,SAAS,eAAe,CAAC,IAAqB,EAAE,MAAc;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,IAAI,GAAG,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;IAC1B,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,OAAsB;IACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEjE,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC;IAClE,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IACtE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;AACnD,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ADO Repository Cloning
3
+ *
4
+ * Handles fetching and cloning Azure DevOps repositories during init.
5
+ * Cloning runs in background (non-blocking) via job manager.
6
+ *
7
+ * @module cli/helpers/init/ado-repo-cloning
8
+ */
9
+ import { type ClonePatternResult } from '../selection-strategy.js';
10
+ /**
11
+ * ADO project selection (from repository-setup.ts)
12
+ */
13
+ export interface AdoProjectSelection {
14
+ org: string;
15
+ pat: string;
16
+ projects: string[];
17
+ }
18
+ /**
19
+ * Trigger ADO repository cloning during init
20
+ *
21
+ * This function:
22
+ * 1. Fetches repository list from each selected ADO project
23
+ * 2. Filters repositories by clone pattern (glob/regex)
24
+ * 3. Creates a background job for cloning
25
+ * 4. Starts cloning asynchronously (non-blocking)
26
+ *
27
+ * @param projectPath - Target directory for cloning
28
+ * @param adoProjectSelection - ADO org, PAT, and selected projects
29
+ * @param clonePattern - Clone pattern configuration
30
+ */
31
+ export declare function triggerAdoRepoCloning(projectPath: string, adoProjectSelection: AdoProjectSelection, clonePattern: ClonePatternResult): Promise<void>;
32
+ //# sourceMappingURL=ado-repo-cloning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ado-repo-cloning.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/ado-repo-cloning.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKhG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiFf"}