@vibe-validate/cli 0.10.3 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +84 -92
  2. package/dist/bin.js +137 -20
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/cleanup.d.ts +4 -0
  5. package/dist/commands/cleanup.d.ts.map +1 -1
  6. package/dist/commands/cleanup.js +96 -15
  7. package/dist/commands/cleanup.js.map +1 -1
  8. package/dist/commands/config.d.ts +4 -0
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +83 -15
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +4 -0
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +385 -82
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/generate-workflow.d.ts +6 -2
  17. package/dist/commands/generate-workflow.d.ts.map +1 -1
  18. package/dist/commands/generate-workflow.js +188 -33
  19. package/dist/commands/generate-workflow.js.map +1 -1
  20. package/dist/commands/history.d.ts +13 -0
  21. package/dist/commands/history.d.ts.map +1 -0
  22. package/dist/commands/history.js +415 -0
  23. package/dist/commands/history.js.map +1 -0
  24. package/dist/commands/init.d.ts +4 -0
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +252 -109
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/pre-commit.d.ts +4 -0
  29. package/dist/commands/pre-commit.d.ts.map +1 -1
  30. package/dist/commands/pre-commit.js +158 -7
  31. package/dist/commands/pre-commit.js.map +1 -1
  32. package/dist/commands/state.d.ts +5 -1
  33. package/dist/commands/state.d.ts.map +1 -1
  34. package/dist/commands/state.js +192 -23
  35. package/dist/commands/state.js.map +1 -1
  36. package/dist/commands/sync-check.d.ts +4 -0
  37. package/dist/commands/sync-check.d.ts.map +1 -1
  38. package/dist/commands/sync-check.js +101 -14
  39. package/dist/commands/sync-check.js.map +1 -1
  40. package/dist/commands/validate.d.ts +5 -1
  41. package/dist/commands/validate.d.ts.map +1 -1
  42. package/dist/commands/validate.js +184 -28
  43. package/dist/commands/validate.js.map +1 -1
  44. package/dist/commands/watch-pr.d.ts +10 -0
  45. package/dist/commands/watch-pr.d.ts.map +1 -0
  46. package/dist/commands/watch-pr.js +443 -0
  47. package/dist/commands/watch-pr.js.map +1 -0
  48. package/dist/schemas/watch-pr-schema.d.ts +261 -0
  49. package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
  50. package/dist/schemas/watch-pr-schema.js +58 -0
  51. package/dist/schemas/watch-pr-schema.js.map +1 -0
  52. package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
  53. package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
  54. package/dist/scripts/generate-watch-pr-schema.js +35 -0
  55. package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
  56. package/dist/services/ci-provider-registry.d.ts +38 -0
  57. package/dist/services/ci-provider-registry.d.ts.map +1 -0
  58. package/dist/services/ci-provider-registry.js +53 -0
  59. package/dist/services/ci-provider-registry.js.map +1 -0
  60. package/dist/services/ci-provider.d.ts +165 -0
  61. package/dist/services/ci-provider.d.ts.map +1 -0
  62. package/dist/services/ci-provider.js +11 -0
  63. package/dist/services/ci-provider.js.map +1 -0
  64. package/dist/services/ci-providers/github-actions.d.ts +41 -0
  65. package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
  66. package/dist/services/ci-providers/github-actions.js +314 -0
  67. package/dist/services/ci-providers/github-actions.js.map +1 -0
  68. package/dist/utils/check-validation.d.ts +7 -4
  69. package/dist/utils/check-validation.d.ts.map +1 -1
  70. package/dist/utils/check-validation.js +129 -48
  71. package/dist/utils/check-validation.js.map +1 -1
  72. package/dist/utils/config-loader.d.ts +15 -3
  73. package/dist/utils/config-loader.d.ts.map +1 -1
  74. package/dist/utils/config-loader.js +61 -17
  75. package/dist/utils/config-loader.js.map +1 -1
  76. package/dist/utils/context-detector.d.ts +1 -1
  77. package/dist/utils/context-detector.js +1 -1
  78. package/dist/utils/normalize-line-endings.d.ts +53 -0
  79. package/dist/utils/normalize-line-endings.d.ts.map +1 -0
  80. package/dist/utils/normalize-line-endings.js +57 -0
  81. package/dist/utils/normalize-line-endings.js.map +1 -0
  82. package/dist/utils/run-validation-with-cache.d.ts +48 -0
  83. package/dist/utils/run-validation-with-cache.d.ts.map +1 -0
  84. package/dist/utils/run-validation-with-cache.js +123 -0
  85. package/dist/utils/run-validation-with-cache.js.map +1 -0
  86. package/dist/utils/runner-adapter.d.ts +1 -0
  87. package/dist/utils/runner-adapter.d.ts.map +1 -1
  88. package/dist/utils/runner-adapter.js +25 -17
  89. package/dist/utils/runner-adapter.js.map +1 -1
  90. package/dist/utils/setup-checks/gitignore-check.d.ts +10 -15
  91. package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
  92. package/dist/utils/setup-checks/gitignore-check.js +20 -138
  93. package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
  94. package/dist/utils/template-discovery.d.ts +40 -0
  95. package/dist/utils/template-discovery.d.ts.map +1 -0
  96. package/dist/utils/template-discovery.js +136 -0
  97. package/dist/utils/template-discovery.js.map +1 -0
  98. package/dist/utils/validate-workflow.d.ts +28 -0
  99. package/dist/utils/validate-workflow.d.ts.map +1 -0
  100. package/dist/utils/validate-workflow.js +247 -0
  101. package/dist/utils/validate-workflow.js.map +1 -0
  102. package/dist/utils/validation-cache.d.ts +30 -0
  103. package/dist/utils/validation-cache.d.ts.map +1 -0
  104. package/dist/utils/validation-cache.js +57 -0
  105. package/dist/utils/validation-cache.js.map +1 -0
  106. package/package.json +19 -16
  107. package/watch-pr-result.schema.json +204 -0
  108. package/LICENSE +0 -21
@@ -0,0 +1,443 @@
1
+ import { stringify as stringifyYaml } from 'yaml';
2
+ import { CIProviderRegistry } from '../services/ci-provider-registry.js';
3
+ /**
4
+ * Register the watch-pr command
5
+ */
6
+ export function registerWatchPRCommand(program) {
7
+ program
8
+ .command('watch-pr [pr-number]')
9
+ .description('Watch CI checks for a pull/merge request in real-time')
10
+ .option('--provider <name>', 'Force specific CI provider (github-actions, gitlab-ci)')
11
+ .option('--yaml', 'Output YAML only (no interactive display)')
12
+ .option('--timeout <seconds>', 'Maximum time to wait in seconds (default: 3600)', '3600')
13
+ .option('--poll-interval <seconds>', 'Polling frequency in seconds (default: 10)', '10')
14
+ .option('--fail-fast', 'Exit immediately on first check failure')
15
+ .action(async (prNumber, options) => {
16
+ try {
17
+ const exitCode = await watchPRCommand(prNumber, options);
18
+ process.exit(exitCode);
19
+ }
20
+ catch (error) {
21
+ if (!options.yaml) {
22
+ console.error('❌ Error:', error instanceof Error ? error.message : String(error));
23
+ }
24
+ else {
25
+ // YAML mode: Output error to stdout
26
+ process.stdout.write('---\n');
27
+ process.stdout.write(stringifyYaml({
28
+ error: error instanceof Error ? error.message : String(error),
29
+ }));
30
+ }
31
+ process.exit(1);
32
+ }
33
+ });
34
+ }
35
+ /**
36
+ * Execute watch-pr command
37
+ *
38
+ * @returns Exit code (0 = success, 1 = failure, 2 = timeout)
39
+ */
40
+ async function watchPRCommand(prNumber, options) {
41
+ const registry = new CIProviderRegistry();
42
+ // Auto-detect or use specified provider
43
+ const provider = options.provider
44
+ ? registry.getProvider(options.provider)
45
+ : await registry.detectProvider();
46
+ if (!provider) {
47
+ const availableProviders = registry.getProviderNames().join(', ');
48
+ throw new Error(`No supported CI provider detected. Available: ${availableProviders}\n` +
49
+ 'GitHub Actions requires: gh CLI installed and github.com remote');
50
+ }
51
+ // If no PR number, try to detect from current branch
52
+ let prId = prNumber;
53
+ if (!prId) {
54
+ const pr = await provider.detectPullRequest();
55
+ if (!pr) {
56
+ throw new Error('Could not detect PR from current branch.\n' +
57
+ 'Usage: vibe-validate watch-pr <pr-number>');
58
+ }
59
+ prId = pr.id.toString();
60
+ }
61
+ // Watch the PR
62
+ return await watchPR(provider, prId, options);
63
+ }
64
+ /**
65
+ * Watch PR until completion or timeout
66
+ */
67
+ async function watchPR(provider, prId, options) {
68
+ const timeoutMs = parseInt(options.timeout || '3600') * 1000;
69
+ const pollIntervalMs = parseInt(options.pollInterval || '10') * 1000;
70
+ const startTime = Date.now();
71
+ let lastStatus = null;
72
+ let iteration = 0;
73
+ while (true) {
74
+ const elapsed = Date.now() - startTime;
75
+ // Check timeout
76
+ if (elapsed >= timeoutMs) {
77
+ if (options.yaml && lastStatus) {
78
+ const result = {
79
+ pr: lastStatus.pr,
80
+ status: 'timeout',
81
+ result: 'unknown',
82
+ duration: formatDuration(elapsed),
83
+ summary: 'Timed out waiting for checks to complete',
84
+ checks: lastStatus.checks.map((c) => ({
85
+ name: c.name,
86
+ status: c.status,
87
+ conclusion: c.conclusion,
88
+ duration: c.duration,
89
+ url: c.url,
90
+ })),
91
+ };
92
+ // YAML mode: Output timeout result to stdout
93
+ process.stdout.write('---\n');
94
+ process.stdout.write(stringifyYaml(result));
95
+ }
96
+ else {
97
+ console.log('\n⏱️ Timeout reached. Checks still pending.');
98
+ }
99
+ return 2;
100
+ }
101
+ // Fetch current status
102
+ const status = await provider.fetchCheckStatus(prId);
103
+ lastStatus = status;
104
+ // Display current status
105
+ if (!options.yaml) {
106
+ displayHumanStatus(status, iteration === 0);
107
+ }
108
+ // Check if we should fail fast
109
+ if (options.failFast) {
110
+ const anyFailure = status.checks.some((c) => c.conclusion === 'failure');
111
+ if (anyFailure) {
112
+ return await handleCompletion(provider, status, options, elapsed);
113
+ }
114
+ }
115
+ // Check if all checks are complete
116
+ if (status.status === 'completed') {
117
+ return await handleCompletion(provider, status, options, elapsed);
118
+ }
119
+ // Wait before next poll
120
+ iteration++;
121
+ await sleep(pollIntervalMs);
122
+ }
123
+ }
124
+ /**
125
+ * Handle completion - fetch failure details if needed and output result
126
+ */
127
+ async function handleCompletion(provider, status, options, elapsedMs) {
128
+ const failures = status.checks.filter((c) => c.conclusion === 'failure');
129
+ // Fetch detailed failure information
130
+ const failureDetails = await Promise.all(failures.map(async (check) => {
131
+ try {
132
+ const logs = await provider.fetchFailureLogs(check.id);
133
+ return {
134
+ name: check.name,
135
+ checkId: check.id,
136
+ errorSummary: logs.errorSummary,
137
+ validationResult: logs.validationResult,
138
+ nextSteps: generateNextSteps(check.id, logs.validationResult),
139
+ };
140
+ }
141
+ catch (error) {
142
+ return {
143
+ name: check.name,
144
+ checkId: check.id,
145
+ errorSummary: `Failed to fetch logs: ${error}`,
146
+ nextSteps: [`gh run view ${check.id} --log-failed`],
147
+ };
148
+ }
149
+ }));
150
+ // Output final result
151
+ if (options.yaml) {
152
+ const result = {
153
+ pr: {
154
+ id: status.pr.id,
155
+ title: status.pr.title,
156
+ url: status.pr.url,
157
+ },
158
+ status: status.status,
159
+ result: status.result,
160
+ duration: formatDuration(elapsedMs),
161
+ summary: `${status.checks.filter((c) => c.conclusion === 'success').length}/${status.checks.length} checks passed`,
162
+ checks: status.checks.map((c) => ({
163
+ name: c.name,
164
+ status: c.status,
165
+ conclusion: c.conclusion,
166
+ duration: c.duration,
167
+ url: c.url,
168
+ })),
169
+ failures: failureDetails.length > 0 ? failureDetails : undefined,
170
+ };
171
+ // YAML mode: Output completion result to stdout
172
+ process.stdout.write('---\n');
173
+ process.stdout.write(stringifyYaml(result));
174
+ }
175
+ else {
176
+ displayHumanCompletion(status, failureDetails, elapsedMs);
177
+ }
178
+ // Return appropriate exit code
179
+ return status.result === 'success' ? 0 : 1;
180
+ }
181
+ /**
182
+ * Display human-friendly status update
183
+ */
184
+ function displayHumanStatus(status, isFirst) {
185
+ if (isFirst) {
186
+ console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}`);
187
+ console.log(` ${status.pr.url}\n`);
188
+ }
189
+ // Clear previous output (for live updating)
190
+ if (!isFirst) {
191
+ process.stdout.write('\x1B[2J\x1B[H'); // Clear screen and move cursor to top
192
+ console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}\n`);
193
+ }
194
+ // Display checks
195
+ for (const check of status.checks) {
196
+ const icon = getCheckIcon(check);
197
+ const statusStr = check.conclusion || check.status;
198
+ const duration = check.duration || '';
199
+ console.log(`${icon} ${check.name.padEnd(40)} ${statusStr.padEnd(12)} ${duration}`);
200
+ }
201
+ // Display summary
202
+ const completed = status.checks.filter((c) => c.status === 'completed').length;
203
+ const total = status.checks.length;
204
+ const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
205
+ console.log(`\n${completed}/${total} checks complete (${percentage}%)`);
206
+ }
207
+ /**
208
+ * Display human-friendly completion message
209
+ */
210
+ function displayHumanCompletion(status, failures, elapsedMs) {
211
+ console.log('\n' + '='.repeat(60));
212
+ if (status.result === 'success') {
213
+ console.log('✅ All checks passed!');
214
+ console.log(` Duration: ${formatDuration(elapsedMs)}`);
215
+ console.log(` Ready to merge: ${status.pr.url}`);
216
+ }
217
+ else {
218
+ console.log('❌ Some checks failed');
219
+ console.log(` Duration: ${formatDuration(elapsedMs)}`);
220
+ for (const failure of failures) {
221
+ console.log(`\n📋 ${failure.name}:`);
222
+ if (failure.validationResult) {
223
+ console.log(` Failed step: ${failure.validationResult.failedStep}`);
224
+ if (failure.validationResult.rerunCommand) {
225
+ console.log(` Re-run locally: ${failure.validationResult.rerunCommand}`);
226
+ }
227
+ // Show parsed test failures (extracted by extractors package)
228
+ if (failure.validationResult.failedTests && failure.validationResult.failedTests.length > 0) {
229
+ console.log(`\n Failed tests:`);
230
+ failure.validationResult.failedTests.forEach((test) => {
231
+ console.log(` ❌ ${test}`);
232
+ });
233
+ }
234
+ else if (failure.validationResult.failedStepOutput) {
235
+ // Fallback: show raw output if extractor didn't extract anything
236
+ console.log(`\n Error output:`);
237
+ const lines = failure.validationResult.failedStepOutput.split('\n').slice(0, 10);
238
+ lines.forEach((line) => console.log(` ${line}`));
239
+ }
240
+ }
241
+ else if (failure.errorSummary) {
242
+ console.log(` ${failure.errorSummary}`);
243
+ }
244
+ console.log(`\n Next steps:`);
245
+ failure.nextSteps.forEach((step) => console.log(` - ${step}`));
246
+ }
247
+ // Suggest reporting extractor issues if extraction quality is poor
248
+ console.log('\n💡 Error output unclear or missing details?');
249
+ console.log(' Help improve extraction: https://github.com/jdutton/vibe-validate/issues/new?template=extractor-improvement.yml');
250
+ }
251
+ console.log('='.repeat(60));
252
+ }
253
+ /**
254
+ * Get icon for check status
255
+ */
256
+ function getCheckIcon(check) {
257
+ if (check.conclusion === 'success')
258
+ return '✅';
259
+ if (check.conclusion === 'failure')
260
+ return '❌';
261
+ if (check.conclusion === 'cancelled')
262
+ return '🚫';
263
+ if (check.conclusion === 'skipped')
264
+ return '⏭️ ';
265
+ if (check.status === 'in_progress')
266
+ return '⏳';
267
+ return '⏸️ ';
268
+ }
269
+ /**
270
+ * Generate next steps for a failure
271
+ */
272
+ function generateNextSteps(checkId, validationResult) {
273
+ const steps = [];
274
+ if (validationResult?.rerunCommand) {
275
+ steps.push(`Run locally: ${validationResult.rerunCommand}`);
276
+ }
277
+ steps.push(`View logs: gh run view ${checkId} --log-failed`);
278
+ steps.push(`Re-run check: gh run rerun ${checkId} --failed`);
279
+ return steps;
280
+ }
281
+ /**
282
+ * Format duration in human-readable format
283
+ */
284
+ function formatDuration(ms) {
285
+ const seconds = Math.floor(ms / 1000);
286
+ const minutes = Math.floor(seconds / 60);
287
+ const remainingSeconds = seconds % 60;
288
+ if (minutes > 0) {
289
+ return `${minutes}m ${remainingSeconds}s`;
290
+ }
291
+ return `${seconds}s`;
292
+ }
293
+ /**
294
+ * Sleep for specified milliseconds
295
+ */
296
+ function sleep(ms) {
297
+ return new Promise((resolve) => setTimeout(resolve, ms));
298
+ }
299
+ /**
300
+ * Show verbose help with detailed documentation
301
+ */
302
+ export function showWatchPRVerboseHelp() {
303
+ console.log(`# watch-pr Command Reference
304
+
305
+ > Watch CI checks for a pull/merge request in real-time
306
+
307
+ ## Overview
308
+
309
+ The \`watch-pr\` command monitors CI provider (GitHub Actions) check status in real-time after pushing to a PR. It provides live progress updates, extracts validation results from CI logs on failure, and provides actionable recovery commands. This is especially useful for AI agents waiting for CI completion.
310
+
311
+ ## How It Works
312
+
313
+ 1. Detects PR from current branch (or uses provided PR number)
314
+ 2. Polls CI provider (GitHub Actions) for check status
315
+ 3. Shows real-time progress of all matrix jobs
316
+ 4. On failure: fetches logs and extracts vibe-validate state file
317
+ 5. Provides actionable recovery commands
318
+ 6. Exits when all checks complete or timeout reached
319
+
320
+ ## Options
321
+
322
+ - \`--provider <name>\` - Force specific CI provider (github-actions, gitlab-ci)
323
+ - \`--yaml\` - Output YAML only (no interactive display)
324
+ - \`--timeout <seconds>\` - Maximum time to wait in seconds (default: 3600)
325
+ - \`--poll-interval <seconds>\` - Polling frequency in seconds (default: 10)
326
+ - \`--fail-fast\` - Exit immediately on first check failure
327
+
328
+ ## Exit Codes
329
+
330
+ - \`0\` - All checks passed
331
+ - \`1\` - One or more checks failed
332
+ - \`2\` - Timeout reached before completion
333
+
334
+ ## Examples
335
+
336
+ \`\`\`bash
337
+ # Push to PR and watch
338
+ git push origin my-branch
339
+ vibe-validate watch-pr # Auto-detect PR
340
+
341
+ # Watch specific PR
342
+ vibe-validate watch-pr 42
343
+
344
+ # YAML output only
345
+ vibe-validate watch-pr --yaml
346
+
347
+ # Exit on first failure
348
+ vibe-validate watch-pr --fail-fast
349
+
350
+ # Custom timeout (10 minutes)
351
+ vibe-validate watch-pr --timeout 600
352
+ \`\`\`
353
+
354
+ ## Common Workflows
355
+
356
+ ### Standard workflow after pushing PR
357
+
358
+ \`\`\`bash
359
+ # Push changes
360
+ git push origin feature/my-work
361
+
362
+ # Create PR (if not exists)
363
+ gh pr create
364
+
365
+ # Watch CI checks
366
+ vibe-validate watch-pr
367
+
368
+ # If passes: merge
369
+ gh pr merge
370
+
371
+ # Cleanup
372
+ vibe-validate cleanup
373
+ \`\`\`
374
+
375
+ ### CI dogfooding workflow (for vibe-validate developers)
376
+
377
+ \`\`\`bash
378
+ # Push changes
379
+ git push origin my-branch
380
+
381
+ # Watch with fail-fast (exit on first failure for quick feedback)
382
+ vibe-validate watch-pr --fail-fast
383
+
384
+ # If fails: view validation result from YAML
385
+ vibe-validate watch-pr 42 --yaml | yq '.failures[0].validationResult'
386
+
387
+ # Fix errors and re-run
388
+ gh run rerun <run-id> --failed
389
+ \`\`\`
390
+
391
+ ### AI agent workflow
392
+
393
+ \`\`\`bash
394
+ # AI agent pushes code
395
+ git push origin feature/ai-generated
396
+
397
+ # AI agent watches PR (YAML mode for parsing)
398
+ vibe-validate watch-pr --yaml --timeout 600
399
+
400
+ # AI agent parses YAML result
401
+ # - If passed: proceed with merge
402
+ # - If failed: extract error details and fix
403
+ \`\`\`
404
+
405
+ ## Error Recovery
406
+
407
+ ### If check fails
408
+
409
+ **View validation result from YAML output:**
410
+ \`\`\`bash
411
+ # View validation result from YAML output
412
+ vibe-validate watch-pr 42 --yaml | yq '.failures[0].validationResult'
413
+
414
+ # Re-run failed check
415
+ gh run rerun <run-id> --failed
416
+ \`\`\`
417
+
418
+ ### If no PR found
419
+
420
+ **Create PR first:**
421
+ \`\`\`bash
422
+ # Create PR first
423
+ gh pr create
424
+
425
+ # Or specify PR number explicitly
426
+ vibe-validate watch-pr 42
427
+ \`\`\`
428
+
429
+ ## CI Provider Support
430
+
431
+ ### GitHub Actions (default)
432
+
433
+ - **Requirements**: \`gh\` CLI installed and github.com remote
434
+ - **Auto-detection**: Checks for .github/workflows and github.com remote
435
+ - **Features**: Matrix job support, log extraction, vibe-validate state parsing
436
+
437
+ ### GitLab CI (planned)
438
+
439
+ - **Status**: Not yet implemented
440
+ - **Tracking**: https://github.com/jdutton/vibe-validate/issues
441
+ `);
442
+ }
443
+ //# sourceMappingURL=watch-pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-pr.js","sourceRoot":"","sources":["../../src/commands/watch-pr.ts"],"names":[],"mappings":"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"}