@vibe-validate/cli 0.10.2 → 0.11.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 (71) hide show
  1. package/README.md +70 -88
  2. package/dist/bin.js +318 -13
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/cleanup.d.ts.map +1 -1
  5. package/dist/commands/cleanup.js +5 -16
  6. package/dist/commands/cleanup.js.map +1 -1
  7. package/dist/commands/config.js +0 -15
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +83 -58
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/generate-workflow.d.ts +2 -2
  13. package/dist/commands/generate-workflow.d.ts.map +1 -1
  14. package/dist/commands/generate-workflow.js +67 -21
  15. package/dist/commands/generate-workflow.js.map +1 -1
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +71 -109
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/state.d.ts.map +1 -1
  20. package/dist/commands/state.js +0 -5
  21. package/dist/commands/state.js.map +1 -1
  22. package/dist/commands/sync-check.d.ts.map +1 -1
  23. package/dist/commands/sync-check.js +5 -14
  24. package/dist/commands/sync-check.js.map +1 -1
  25. package/dist/commands/watch-pr.d.ts +6 -0
  26. package/dist/commands/watch-pr.d.ts.map +1 -0
  27. package/dist/commands/watch-pr.js +282 -0
  28. package/dist/commands/watch-pr.js.map +1 -0
  29. package/dist/schemas/watch-pr-schema.d.ts +261 -0
  30. package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
  31. package/dist/schemas/watch-pr-schema.js +58 -0
  32. package/dist/schemas/watch-pr-schema.js.map +1 -0
  33. package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
  34. package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
  35. package/dist/scripts/generate-watch-pr-schema.js +35 -0
  36. package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
  37. package/dist/services/ci-provider-registry.d.ts +38 -0
  38. package/dist/services/ci-provider-registry.d.ts.map +1 -0
  39. package/dist/services/ci-provider-registry.js +53 -0
  40. package/dist/services/ci-provider-registry.js.map +1 -0
  41. package/dist/services/ci-provider.d.ts +160 -0
  42. package/dist/services/ci-provider.d.ts.map +1 -0
  43. package/dist/services/ci-provider.js +11 -0
  44. package/dist/services/ci-provider.js.map +1 -0
  45. package/dist/services/ci-providers/github-actions.d.ts +40 -0
  46. package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
  47. package/dist/services/ci-providers/github-actions.js +305 -0
  48. package/dist/services/ci-providers/github-actions.js.map +1 -0
  49. package/dist/utils/check-validation.d.ts +1 -1
  50. package/dist/utils/check-validation.d.ts.map +1 -1
  51. package/dist/utils/check-validation.js +2 -2
  52. package/dist/utils/check-validation.js.map +1 -1
  53. package/dist/utils/config-loader.d.ts +15 -3
  54. package/dist/utils/config-loader.d.ts.map +1 -1
  55. package/dist/utils/config-loader.js +61 -17
  56. package/dist/utils/config-loader.js.map +1 -1
  57. package/dist/utils/context-detector.d.ts +1 -1
  58. package/dist/utils/context-detector.js +1 -1
  59. package/dist/utils/normalize-line-endings.d.ts +53 -0
  60. package/dist/utils/normalize-line-endings.d.ts.map +1 -0
  61. package/dist/utils/normalize-line-endings.js +57 -0
  62. package/dist/utils/normalize-line-endings.js.map +1 -0
  63. package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
  64. package/dist/utils/setup-checks/gitignore-check.js +3 -4
  65. package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
  66. package/dist/utils/template-discovery.d.ts +40 -0
  67. package/dist/utils/template-discovery.d.ts.map +1 -0
  68. package/dist/utils/template-discovery.js +136 -0
  69. package/dist/utils/template-discovery.js.map +1 -0
  70. package/package.json +9 -8
  71. package/watch-pr-result.schema.json +204 -0
@@ -0,0 +1,282 @@
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
+ console.log(stringifyYaml({
26
+ error: error instanceof Error ? error.message : String(error),
27
+ }));
28
+ }
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ /**
34
+ * Execute watch-pr command
35
+ *
36
+ * @returns Exit code (0 = success, 1 = failure, 2 = timeout)
37
+ */
38
+ async function watchPRCommand(prNumber, options) {
39
+ const registry = new CIProviderRegistry();
40
+ // Auto-detect or use specified provider
41
+ const provider = options.provider
42
+ ? registry.getProvider(options.provider)
43
+ : await registry.detectProvider();
44
+ if (!provider) {
45
+ const availableProviders = registry.getProviderNames().join(', ');
46
+ throw new Error(`No supported CI provider detected. Available: ${availableProviders}\n` +
47
+ 'GitHub Actions requires: gh CLI installed and github.com remote');
48
+ }
49
+ // If no PR number, try to detect from current branch
50
+ let prId = prNumber;
51
+ if (!prId) {
52
+ const pr = await provider.detectPullRequest();
53
+ if (!pr) {
54
+ throw new Error('Could not detect PR from current branch.\n' +
55
+ 'Usage: vibe-validate watch-pr <pr-number>');
56
+ }
57
+ prId = pr.id.toString();
58
+ }
59
+ // Watch the PR
60
+ return await watchPR(provider, prId, options);
61
+ }
62
+ /**
63
+ * Watch PR until completion or timeout
64
+ */
65
+ async function watchPR(provider, prId, options) {
66
+ const timeoutMs = parseInt(options.timeout || '3600') * 1000;
67
+ const pollIntervalMs = parseInt(options.pollInterval || '10') * 1000;
68
+ const startTime = Date.now();
69
+ let lastStatus = null;
70
+ let iteration = 0;
71
+ while (true) {
72
+ const elapsed = Date.now() - startTime;
73
+ // Check timeout
74
+ if (elapsed >= timeoutMs) {
75
+ if (options.yaml && lastStatus) {
76
+ const result = {
77
+ pr: lastStatus.pr,
78
+ status: 'timeout',
79
+ result: 'unknown',
80
+ duration: formatDuration(elapsed),
81
+ summary: 'Timed out waiting for checks to complete',
82
+ checks: lastStatus.checks.map((c) => ({
83
+ name: c.name,
84
+ status: c.status,
85
+ conclusion: c.conclusion,
86
+ duration: c.duration,
87
+ url: c.url,
88
+ })),
89
+ };
90
+ console.log(stringifyYaml(result));
91
+ }
92
+ else {
93
+ console.log('\n⏱️ Timeout reached. Checks still pending.');
94
+ }
95
+ return 2;
96
+ }
97
+ // Fetch current status
98
+ const status = await provider.fetchCheckStatus(prId);
99
+ lastStatus = status;
100
+ // Display current status
101
+ if (!options.yaml) {
102
+ displayHumanStatus(status, iteration === 0);
103
+ }
104
+ // Check if we should fail fast
105
+ if (options.failFast) {
106
+ const anyFailure = status.checks.some((c) => c.conclusion === 'failure');
107
+ if (anyFailure) {
108
+ return await handleCompletion(provider, status, options, elapsed);
109
+ }
110
+ }
111
+ // Check if all checks are complete
112
+ if (status.status === 'completed') {
113
+ return await handleCompletion(provider, status, options, elapsed);
114
+ }
115
+ // Wait before next poll
116
+ iteration++;
117
+ await sleep(pollIntervalMs);
118
+ }
119
+ }
120
+ /**
121
+ * Handle completion - fetch failure details if needed and output result
122
+ */
123
+ async function handleCompletion(provider, status, options, elapsedMs) {
124
+ const failures = status.checks.filter((c) => c.conclusion === 'failure');
125
+ // Fetch detailed failure information
126
+ const failureDetails = await Promise.all(failures.map(async (check) => {
127
+ try {
128
+ const logs = await provider.fetchFailureLogs(check.id);
129
+ return {
130
+ name: check.name,
131
+ checkId: check.id,
132
+ errorSummary: logs.errorSummary,
133
+ stateFile: logs.stateFile,
134
+ nextSteps: generateNextSteps(check.id, logs.stateFile),
135
+ };
136
+ }
137
+ catch (error) {
138
+ return {
139
+ name: check.name,
140
+ checkId: check.id,
141
+ errorSummary: `Failed to fetch logs: ${error}`,
142
+ nextSteps: [`gh run view ${check.id} --log-failed`],
143
+ };
144
+ }
145
+ }));
146
+ // Output final result
147
+ if (options.yaml) {
148
+ const result = {
149
+ pr: {
150
+ id: status.pr.id,
151
+ title: status.pr.title,
152
+ url: status.pr.url,
153
+ },
154
+ status: status.status,
155
+ result: status.result,
156
+ duration: formatDuration(elapsedMs),
157
+ summary: `${status.checks.filter((c) => c.conclusion === 'success').length}/${status.checks.length} checks passed`,
158
+ checks: status.checks.map((c) => ({
159
+ name: c.name,
160
+ status: c.status,
161
+ conclusion: c.conclusion,
162
+ duration: c.duration,
163
+ url: c.url,
164
+ })),
165
+ failures: failureDetails.length > 0 ? failureDetails : undefined,
166
+ };
167
+ console.log(stringifyYaml(result));
168
+ }
169
+ else {
170
+ displayHumanCompletion(status, failureDetails, elapsedMs);
171
+ }
172
+ // Return appropriate exit code
173
+ return status.result === 'success' ? 0 : 1;
174
+ }
175
+ /**
176
+ * Display human-friendly status update
177
+ */
178
+ function displayHumanStatus(status, isFirst) {
179
+ if (isFirst) {
180
+ console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}`);
181
+ console.log(` ${status.pr.url}\n`);
182
+ }
183
+ // Clear previous output (for live updating)
184
+ if (!isFirst) {
185
+ process.stdout.write('\x1B[2J\x1B[H'); // Clear screen and move cursor to top
186
+ console.log(`🔍 Watching PR #${status.pr.id}: ${status.pr.title}\n`);
187
+ }
188
+ // Display checks
189
+ for (const check of status.checks) {
190
+ const icon = getCheckIcon(check);
191
+ const statusStr = check.conclusion || check.status;
192
+ const duration = check.duration || '';
193
+ console.log(`${icon} ${check.name.padEnd(40)} ${statusStr.padEnd(12)} ${duration}`);
194
+ }
195
+ // Display summary
196
+ const completed = status.checks.filter((c) => c.status === 'completed').length;
197
+ const total = status.checks.length;
198
+ const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
199
+ console.log(`\n${completed}/${total} checks complete (${percentage}%)`);
200
+ }
201
+ /**
202
+ * Display human-friendly completion message
203
+ */
204
+ function displayHumanCompletion(status, failures, elapsedMs) {
205
+ console.log('\n' + '='.repeat(60));
206
+ if (status.result === 'success') {
207
+ console.log('✅ All checks passed!');
208
+ console.log(` Duration: ${formatDuration(elapsedMs)}`);
209
+ console.log(` Ready to merge: ${status.pr.url}`);
210
+ }
211
+ else {
212
+ console.log('❌ Some checks failed');
213
+ console.log(` Duration: ${formatDuration(elapsedMs)}`);
214
+ for (const failure of failures) {
215
+ console.log(`\n📋 ${failure.name}:`);
216
+ if (failure.stateFile) {
217
+ console.log(` Failed step: ${failure.stateFile.failedStep}`);
218
+ if (failure.stateFile.rerunCommand) {
219
+ console.log(` Re-run locally: ${failure.stateFile.rerunCommand}`);
220
+ }
221
+ if (failure.stateFile.failedStepOutput) {
222
+ console.log(`\n Error output:`);
223
+ const lines = failure.stateFile.failedStepOutput.split('\n').slice(0, 10);
224
+ lines.forEach((line) => console.log(` ${line}`));
225
+ }
226
+ }
227
+ else if (failure.errorSummary) {
228
+ console.log(` ${failure.errorSummary}`);
229
+ }
230
+ console.log(`\n Next steps:`);
231
+ failure.nextSteps.forEach((step) => console.log(` - ${step}`));
232
+ }
233
+ }
234
+ console.log('='.repeat(60));
235
+ }
236
+ /**
237
+ * Get icon for check status
238
+ */
239
+ function getCheckIcon(check) {
240
+ if (check.conclusion === 'success')
241
+ return '✅';
242
+ if (check.conclusion === 'failure')
243
+ return '❌';
244
+ if (check.conclusion === 'cancelled')
245
+ return '🚫';
246
+ if (check.conclusion === 'skipped')
247
+ return '⏭️ ';
248
+ if (check.status === 'in_progress')
249
+ return '⏳';
250
+ return '⏸️ ';
251
+ }
252
+ /**
253
+ * Generate next steps for a failure
254
+ */
255
+ function generateNextSteps(checkId, stateFile) {
256
+ const steps = [];
257
+ if (stateFile?.rerunCommand) {
258
+ steps.push(`Run locally: ${stateFile.rerunCommand}`);
259
+ }
260
+ steps.push(`View logs: gh run view ${checkId} --log-failed`);
261
+ steps.push(`Re-run check: gh run rerun ${checkId} --failed`);
262
+ return steps;
263
+ }
264
+ /**
265
+ * Format duration in human-readable format
266
+ */
267
+ function formatDuration(ms) {
268
+ const seconds = Math.floor(ms / 1000);
269
+ const minutes = Math.floor(seconds / 60);
270
+ const remainingSeconds = seconds % 60;
271
+ if (minutes > 0) {
272
+ return `${minutes}m ${remainingSeconds}s`;
273
+ }
274
+ return `${seconds}s`;
275
+ }
276
+ /**
277
+ * Sleep for specified milliseconds
278
+ */
279
+ function sleep(ms) {
280
+ return new Promise((resolve) => setTimeout(resolve, ms));
281
+ }
282
+ //# 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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"}
@@ -0,0 +1,261 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for watch-pr command result
4
+ *
5
+ * This schema defines the structure of YAML output from the watch-pr command.
6
+ * Enables validation of watch-pr output in tests and documentation.
7
+ */
8
+ export declare const WatchPRResultSchema: z.ZodObject<{
9
+ pr: z.ZodObject<{
10
+ id: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
11
+ title: z.ZodString;
12
+ url: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string | number;
15
+ title: string;
16
+ url: string;
17
+ }, {
18
+ id: string | number;
19
+ title: string;
20
+ url: string;
21
+ }>;
22
+ status: z.ZodEnum<["pending", "in_progress", "completed", "timeout"]>;
23
+ result: z.ZodEnum<["success", "failure", "cancelled", "unknown"]>;
24
+ duration: z.ZodString;
25
+ summary: z.ZodString;
26
+ checks: z.ZodArray<z.ZodObject<{
27
+ name: z.ZodString;
28
+ status: z.ZodString;
29
+ conclusion: z.ZodNullable<z.ZodString>;
30
+ duration: z.ZodOptional<z.ZodString>;
31
+ url: z.ZodOptional<z.ZodString>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ name: string;
34
+ status: string;
35
+ conclusion: string | null;
36
+ url?: string | undefined;
37
+ duration?: string | undefined;
38
+ }, {
39
+ name: string;
40
+ status: string;
41
+ conclusion: string | null;
42
+ url?: string | undefined;
43
+ duration?: string | undefined;
44
+ }>, "many">;
45
+ failures: z.ZodOptional<z.ZodArray<z.ZodObject<{
46
+ name: z.ZodString;
47
+ checkId: z.ZodString;
48
+ errorSummary: z.ZodOptional<z.ZodString>;
49
+ stateFile: z.ZodOptional<z.ZodObject<{
50
+ passed: z.ZodBoolean;
51
+ timestamp: z.ZodOptional<z.ZodString>;
52
+ treeHash: z.ZodOptional<z.ZodString>;
53
+ failedStep: z.ZodOptional<z.ZodString>;
54
+ rerunCommand: z.ZodOptional<z.ZodString>;
55
+ failedStepOutput: z.ZodOptional<z.ZodString>;
56
+ phases: z.ZodOptional<z.ZodArray<z.ZodObject<{
57
+ name: z.ZodString;
58
+ passed: z.ZodBoolean;
59
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ name: z.ZodString;
61
+ passed: z.ZodBoolean;
62
+ durationSecs: z.ZodOptional<z.ZodNumber>;
63
+ output: z.ZodOptional<z.ZodString>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ passed: boolean;
66
+ name: string;
67
+ output?: string | undefined;
68
+ durationSecs?: number | undefined;
69
+ }, {
70
+ passed: boolean;
71
+ name: string;
72
+ output?: string | undefined;
73
+ durationSecs?: number | undefined;
74
+ }>, "many">>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ passed: boolean;
77
+ name: string;
78
+ steps?: {
79
+ passed: boolean;
80
+ name: string;
81
+ output?: string | undefined;
82
+ durationSecs?: number | undefined;
83
+ }[] | undefined;
84
+ }, {
85
+ passed: boolean;
86
+ name: string;
87
+ steps?: {
88
+ passed: boolean;
89
+ name: string;
90
+ output?: string | undefined;
91
+ durationSecs?: number | undefined;
92
+ }[] | undefined;
93
+ }>, "many">>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ passed: boolean;
96
+ failedStep?: string | undefined;
97
+ phases?: {
98
+ passed: boolean;
99
+ name: string;
100
+ steps?: {
101
+ passed: boolean;
102
+ name: string;
103
+ output?: string | undefined;
104
+ durationSecs?: number | undefined;
105
+ }[] | undefined;
106
+ }[] | undefined;
107
+ rerunCommand?: string | undefined;
108
+ failedStepOutput?: string | undefined;
109
+ timestamp?: string | undefined;
110
+ treeHash?: string | undefined;
111
+ }, {
112
+ passed: boolean;
113
+ failedStep?: string | undefined;
114
+ phases?: {
115
+ passed: boolean;
116
+ name: string;
117
+ steps?: {
118
+ passed: boolean;
119
+ name: string;
120
+ output?: string | undefined;
121
+ durationSecs?: number | undefined;
122
+ }[] | undefined;
123
+ }[] | undefined;
124
+ rerunCommand?: string | undefined;
125
+ failedStepOutput?: string | undefined;
126
+ timestamp?: string | undefined;
127
+ treeHash?: string | undefined;
128
+ }>>;
129
+ nextSteps: z.ZodArray<z.ZodString, "many">;
130
+ }, "strip", z.ZodTypeAny, {
131
+ name: string;
132
+ checkId: string;
133
+ nextSteps: string[];
134
+ errorSummary?: string | undefined;
135
+ stateFile?: {
136
+ passed: boolean;
137
+ failedStep?: string | undefined;
138
+ phases?: {
139
+ passed: boolean;
140
+ name: string;
141
+ steps?: {
142
+ passed: boolean;
143
+ name: string;
144
+ output?: string | undefined;
145
+ durationSecs?: number | undefined;
146
+ }[] | undefined;
147
+ }[] | undefined;
148
+ rerunCommand?: string | undefined;
149
+ failedStepOutput?: string | undefined;
150
+ timestamp?: string | undefined;
151
+ treeHash?: string | undefined;
152
+ } | undefined;
153
+ }, {
154
+ name: string;
155
+ checkId: string;
156
+ nextSteps: string[];
157
+ errorSummary?: string | undefined;
158
+ stateFile?: {
159
+ passed: boolean;
160
+ failedStep?: string | undefined;
161
+ phases?: {
162
+ passed: boolean;
163
+ name: string;
164
+ steps?: {
165
+ passed: boolean;
166
+ name: string;
167
+ output?: string | undefined;
168
+ durationSecs?: number | undefined;
169
+ }[] | undefined;
170
+ }[] | undefined;
171
+ rerunCommand?: string | undefined;
172
+ failedStepOutput?: string | undefined;
173
+ timestamp?: string | undefined;
174
+ treeHash?: string | undefined;
175
+ } | undefined;
176
+ }>, "many">>;
177
+ }, "strip", z.ZodTypeAny, {
178
+ checks: {
179
+ name: string;
180
+ status: string;
181
+ conclusion: string | null;
182
+ url?: string | undefined;
183
+ duration?: string | undefined;
184
+ }[];
185
+ pr: {
186
+ id: string | number;
187
+ title: string;
188
+ url: string;
189
+ };
190
+ status: "in_progress" | "completed" | "pending" | "timeout";
191
+ result: "success" | "failure" | "cancelled" | "unknown";
192
+ duration: string;
193
+ summary: string;
194
+ failures?: {
195
+ name: string;
196
+ checkId: string;
197
+ nextSteps: string[];
198
+ errorSummary?: string | undefined;
199
+ stateFile?: {
200
+ passed: boolean;
201
+ failedStep?: string | undefined;
202
+ phases?: {
203
+ passed: boolean;
204
+ name: string;
205
+ steps?: {
206
+ passed: boolean;
207
+ name: string;
208
+ output?: string | undefined;
209
+ durationSecs?: number | undefined;
210
+ }[] | undefined;
211
+ }[] | undefined;
212
+ rerunCommand?: string | undefined;
213
+ failedStepOutput?: string | undefined;
214
+ timestamp?: string | undefined;
215
+ treeHash?: string | undefined;
216
+ } | undefined;
217
+ }[] | undefined;
218
+ }, {
219
+ checks: {
220
+ name: string;
221
+ status: string;
222
+ conclusion: string | null;
223
+ url?: string | undefined;
224
+ duration?: string | undefined;
225
+ }[];
226
+ pr: {
227
+ id: string | number;
228
+ title: string;
229
+ url: string;
230
+ };
231
+ status: "in_progress" | "completed" | "pending" | "timeout";
232
+ result: "success" | "failure" | "cancelled" | "unknown";
233
+ duration: string;
234
+ summary: string;
235
+ failures?: {
236
+ name: string;
237
+ checkId: string;
238
+ nextSteps: string[];
239
+ errorSummary?: string | undefined;
240
+ stateFile?: {
241
+ passed: boolean;
242
+ failedStep?: string | undefined;
243
+ phases?: {
244
+ passed: boolean;
245
+ name: string;
246
+ steps?: {
247
+ passed: boolean;
248
+ name: string;
249
+ output?: string | undefined;
250
+ durationSecs?: number | undefined;
251
+ }[] | undefined;
252
+ }[] | undefined;
253
+ rerunCommand?: string | undefined;
254
+ failedStepOutput?: string | undefined;
255
+ timestamp?: string | undefined;
256
+ treeHash?: string | undefined;
257
+ } | undefined;
258
+ }[] | undefined;
259
+ }>;
260
+ export type WatchPRResult = z.infer<typeof WatchPRResultSchema>;
261
+ //# sourceMappingURL=watch-pr-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-pr-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyD9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for watch-pr command result
4
+ *
5
+ * This schema defines the structure of YAML output from the watch-pr command.
6
+ * Enables validation of watch-pr output in tests and documentation.
7
+ */
8
+ export const WatchPRResultSchema = z.object({
9
+ pr: z.object({
10
+ id: z.union([z.number(), z.string()]),
11
+ title: z.string(),
12
+ url: z.string().url(),
13
+ }),
14
+ status: z.enum(['pending', 'in_progress', 'completed', 'timeout']),
15
+ result: z.enum(['success', 'failure', 'cancelled', 'unknown']),
16
+ duration: z.string(),
17
+ summary: z.string(),
18
+ checks: z.array(z.object({
19
+ name: z.string(),
20
+ status: z.string(),
21
+ conclusion: z.string().nullable(),
22
+ duration: z.string().optional(),
23
+ url: z.string().url().optional(),
24
+ })),
25
+ failures: z
26
+ .array(z.object({
27
+ name: z.string(),
28
+ checkId: z.string(),
29
+ errorSummary: z.string().optional(),
30
+ stateFile: z
31
+ .object({
32
+ passed: z.boolean(),
33
+ timestamp: z.string().optional(),
34
+ treeHash: z.string().optional(),
35
+ failedStep: z.string().optional(),
36
+ rerunCommand: z.string().optional(),
37
+ failedStepOutput: z.string().optional(),
38
+ phases: z
39
+ .array(z.object({
40
+ name: z.string(),
41
+ passed: z.boolean(),
42
+ steps: z
43
+ .array(z.object({
44
+ name: z.string(),
45
+ passed: z.boolean(),
46
+ durationSecs: z.number().optional(),
47
+ output: z.string().optional(),
48
+ }))
49
+ .optional(),
50
+ }))
51
+ .optional(),
52
+ })
53
+ .optional(),
54
+ nextSteps: z.array(z.string()),
55
+ }))
56
+ .optional(),
57
+ });
58
+ //# sourceMappingURL=watch-pr-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-pr-schema.js","sourceRoot":"","sources":["../../src/schemas/watch-pr-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;QACX,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CACH;IACD,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,SAAS,EAAE,CAAC;aACT,MAAM,CAAC;YACN,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACnC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACvC,MAAM,EAAE,CAAC;iBACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;gBACnB,KAAK,EAAE,CAAC;qBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;oBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;oBAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;oBACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAC9B,CAAC,CACH;qBACA,QAAQ,EAAE;aACd,CAAC,CACH;iBACA,QAAQ,EAAE;SACd,CAAC;aACD,QAAQ,EAAE;QACb,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/B,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate JSON Schema for watch-pr command output
4
+ *
5
+ * This script generates a JSON Schema file from the Zod schema defined in
6
+ * watch-pr-schema.ts. The JSON Schema can be used for:
7
+ * - IDE autocomplete/validation for YAML files
8
+ * - Validating watch-pr output in tests
9
+ * - Documentation generation
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=generate-watch-pr-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-watch-pr-schema.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-watch-pr-schema.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate JSON Schema for watch-pr command output
4
+ *
5
+ * This script generates a JSON Schema file from the Zod schema defined in
6
+ * watch-pr-schema.ts. The JSON Schema can be used for:
7
+ * - IDE autocomplete/validation for YAML files
8
+ * - Validating watch-pr output in tests
9
+ * - Documentation generation
10
+ */
11
+ import { writeFileSync } from 'fs';
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { zodToJsonSchema } from 'zod-to-json-schema';
15
+ import { WatchPRResultSchema } from '../schemas/watch-pr-schema.js';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ // Generate JSON Schema
19
+ const jsonSchema = zodToJsonSchema(WatchPRResultSchema, {
20
+ name: 'WatchPRResult',
21
+ $refStrategy: 'none', // Inline all definitions for simpler schema
22
+ });
23
+ // Add metadata
24
+ const schemaWithMetadata = {
25
+ $schema: 'http://json-schema.org/draft-07/schema#',
26
+ $id: 'https://github.com/jdutton/vibe-validate/blob/main/packages/cli/watch-pr-result.schema.json',
27
+ title: 'vibe-validate watch-pr Result Schema',
28
+ description: 'JSON Schema for vibe-validate watch-pr command YAML output',
29
+ ...jsonSchema,
30
+ };
31
+ // Write to file
32
+ const outputPath = join(__dirname, '../../watch-pr-result.schema.json');
33
+ writeFileSync(outputPath, JSON.stringify(schemaWithMetadata, null, 2));
34
+ console.log('✓ Generated watch-pr-result.schema.json');
35
+ //# sourceMappingURL=generate-watch-pr-schema.js.map