@vibe-validate/cli 0.17.6 → 0.18.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 (88) hide show
  1. package/dist/bin/vibe-validate +4 -0
  2. package/dist/bin/vibe-validate.js +4 -0
  3. package/dist/bin/vibe-validate.js.map +1 -1
  4. package/dist/bin/vv +4 -0
  5. package/dist/bin.js +12 -4
  6. package/dist/bin.js.map +1 -1
  7. package/dist/commands/cleanup.d.ts +4 -1
  8. package/dist/commands/cleanup.d.ts.map +1 -1
  9. package/dist/commands/cleanup.js +168 -122
  10. package/dist/commands/cleanup.js.map +1 -1
  11. package/dist/commands/config.d.ts.map +1 -1
  12. package/dist/commands/config.js +35 -21
  13. package/dist/commands/config.js.map +1 -1
  14. package/dist/commands/create-extractor.d.ts.map +1 -1
  15. package/dist/commands/create-extractor.js +29 -14
  16. package/dist/commands/create-extractor.js.map +1 -1
  17. package/dist/commands/doctor.d.ts.map +1 -1
  18. package/dist/commands/doctor.js +12 -23
  19. package/dist/commands/doctor.js.map +1 -1
  20. package/dist/commands/generate-workflow.d.ts.map +1 -1
  21. package/dist/commands/generate-workflow.js +6 -2
  22. package/dist/commands/generate-workflow.js.map +1 -1
  23. package/dist/commands/history.d.ts.map +1 -1
  24. package/dist/commands/history.js +19 -9
  25. package/dist/commands/history.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +3 -1
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/pre-commit.d.ts.map +1 -1
  30. package/dist/commands/pre-commit.js +3 -1
  31. package/dist/commands/pre-commit.js.map +1 -1
  32. package/dist/commands/run.d.ts.map +1 -1
  33. package/dist/commands/run.js +21 -13
  34. package/dist/commands/run.js.map +1 -1
  35. package/dist/commands/state.d.ts.map +1 -1
  36. package/dist/commands/state.js +11 -6
  37. package/dist/commands/state.js.map +1 -1
  38. package/dist/commands/watch-pr.d.ts +16 -0
  39. package/dist/commands/watch-pr.d.ts.map +1 -1
  40. package/dist/commands/watch-pr.js +574 -320
  41. package/dist/commands/watch-pr.js.map +1 -1
  42. package/dist/schemas/watch-pr-result.schema.d.ts +2071 -0
  43. package/dist/schemas/watch-pr-result.schema.d.ts.map +1 -0
  44. package/dist/schemas/watch-pr-result.schema.js +346 -0
  45. package/dist/schemas/watch-pr-result.schema.js.map +1 -0
  46. package/dist/schemas/watch-pr-schema.d.ts +6 -6
  47. package/dist/services/cache-manager.d.ts +113 -0
  48. package/dist/services/cache-manager.d.ts.map +1 -0
  49. package/dist/services/cache-manager.js +211 -0
  50. package/dist/services/cache-manager.js.map +1 -0
  51. package/dist/services/ci-providers/github-actions.d.ts.map +1 -1
  52. package/dist/services/ci-providers/github-actions.js +10 -16
  53. package/dist/services/ci-providers/github-actions.js.map +1 -1
  54. package/dist/services/external-check-extractor.d.ts +66 -0
  55. package/dist/services/external-check-extractor.d.ts.map +1 -0
  56. package/dist/services/external-check-extractor.js +114 -0
  57. package/dist/services/external-check-extractor.js.map +1 -0
  58. package/dist/services/extraction-mode-detector.d.ts +85 -0
  59. package/dist/services/extraction-mode-detector.d.ts.map +1 -0
  60. package/dist/services/extraction-mode-detector.js +200 -0
  61. package/dist/services/extraction-mode-detector.js.map +1 -0
  62. package/dist/services/github-fetcher.d.ts +234 -0
  63. package/dist/services/github-fetcher.d.ts.map +1 -0
  64. package/dist/services/github-fetcher.js +441 -0
  65. package/dist/services/github-fetcher.js.map +1 -0
  66. package/dist/services/history-summary-builder.d.ts +74 -0
  67. package/dist/services/history-summary-builder.d.ts.map +1 -0
  68. package/dist/services/history-summary-builder.js +199 -0
  69. package/dist/services/history-summary-builder.js.map +1 -0
  70. package/dist/services/watch-pr-orchestrator.d.ts +132 -0
  71. package/dist/services/watch-pr-orchestrator.d.ts.map +1 -0
  72. package/dist/services/watch-pr-orchestrator.js +451 -0
  73. package/dist/services/watch-pr-orchestrator.js.map +1 -0
  74. package/dist/utils/command-name.d.ts +21 -0
  75. package/dist/utils/command-name.d.ts.map +1 -0
  76. package/dist/utils/command-name.js +45 -0
  77. package/dist/utils/command-name.js.map +1 -0
  78. package/dist/utils/pid-lock.d.ts.map +1 -1
  79. package/dist/utils/pid-lock.js +3 -3
  80. package/dist/utils/pid-lock.js.map +1 -1
  81. package/dist/utils/secret-scanning.d.ts.map +1 -1
  82. package/dist/utils/secret-scanning.js +45 -17
  83. package/dist/utils/secret-scanning.js.map +1 -1
  84. package/dist/utils/temp-files.d.ts +1 -2
  85. package/dist/utils/temp-files.d.ts.map +1 -1
  86. package/dist/utils/temp-files.js +4 -4
  87. package/dist/utils/temp-files.js.map +1 -1
  88. package/package.json +8 -8
@@ -0,0 +1,199 @@
1
+ /**
2
+ * History Summary Builder
3
+ *
4
+ * Fetches workflow runs for a PR branch and calculates:
5
+ * - Total number of runs
6
+ * - Recent pattern (passed/failed/flaky)
7
+ * - Success rate
8
+ *
9
+ * Provides context for pattern recognition without full history details.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { safeExecSync } from '@vibe-validate/utils';
14
+ /**
15
+ * HistorySummaryBuilder
16
+ *
17
+ * Builds a condensed history summary for pattern recognition.
18
+ */
19
+ export class HistorySummaryBuilder {
20
+ _owner;
21
+ _repo;
22
+ constructor(_owner, _repo) {
23
+ this._owner = _owner;
24
+ this._repo = _repo;
25
+ }
26
+ /**
27
+ * Build history summary for a PR branch
28
+ *
29
+ * @param branch - Branch name
30
+ * @returns History summary with total runs, pattern, and success rate
31
+ */
32
+ async buildSummary(branch) {
33
+ try {
34
+ const runs = await this.fetchWorkflowRuns(branch);
35
+ if (runs.length === 0) {
36
+ return {
37
+ total_runs: 0,
38
+ recent_pattern: 'No previous runs',
39
+ };
40
+ }
41
+ const totalRuns = runs.length;
42
+ const recentRuns = runs.slice(0, 10); // Last 10 for pattern detection
43
+ const recentPattern = this.detectPattern(runs);
44
+ const successRate = this.calculateSuccessRate(recentRuns);
45
+ return {
46
+ total_runs: totalRuns,
47
+ recent_pattern: recentPattern,
48
+ success_rate: successRate,
49
+ };
50
+ }
51
+ catch {
52
+ // Gracefully handle errors (gh CLI not available, API errors, etc.)
53
+ // Note: Error intentionally not logged for production use
54
+ return {
55
+ total_runs: 0,
56
+ recent_pattern: 'No previous runs',
57
+ };
58
+ }
59
+ }
60
+ /**
61
+ * Fetch workflow runs for a branch via gh CLI
62
+ *
63
+ * @param branch - Branch name
64
+ * @returns Array of workflow runs (sorted by created_at DESC)
65
+ */
66
+ async fetchWorkflowRuns(branch) {
67
+ const output = safeExecSync('gh', [
68
+ 'run',
69
+ 'list',
70
+ '--repo',
71
+ `${this._owner}/${this._repo}`,
72
+ '--branch',
73
+ branch,
74
+ '--json',
75
+ 'conclusion,createdAt',
76
+ '--limit',
77
+ '50', // Fetch up to 50 runs (more than we need)
78
+ ], { cwd: process.cwd(), encoding: 'utf8' });
79
+ const outputStr = typeof output === 'string' ? output : output.toString('utf8');
80
+ const runs = JSON.parse(outputStr);
81
+ // Map to our internal format
82
+ return runs.map((run) => ({
83
+ conclusion: run.conclusion,
84
+ created_at: run.createdAt,
85
+ }));
86
+ }
87
+ /**
88
+ * Detect pattern from recent runs
89
+ *
90
+ * Patterns:
91
+ * - "Passed last N runs" - All recent runs passed
92
+ * - "Failed last N runs" - All recent runs failed
93
+ * - "Flaky (alternating)" - Alternating pass/fail
94
+ * - "Recently fixed (was failing)" - Recent passes after failures
95
+ * - Generic pattern otherwise
96
+ *
97
+ * @param runs - All runs (sorted DESC)
98
+ * @returns Pattern description
99
+ */
100
+ // eslint-disable-next-line sonarjs/cognitive-complexity
101
+ detectPattern(runs) {
102
+ if (runs.length === 0) {
103
+ return 'No previous runs';
104
+ }
105
+ // Check for consistent success
106
+ const recentRuns = runs.slice(0, 10);
107
+ const consecutivePasses = this.countConsecutive(runs, 'success');
108
+ const consecutiveFails = this.countConsecutive(runs, 'failure');
109
+ if (consecutivePasses === runs.length && runs.length >= 1) {
110
+ return `Passed last ${runs.length} run${runs.length > 1 ? 's' : ''}`;
111
+ }
112
+ if (consecutiveFails === runs.length && runs.length >= 1) {
113
+ return `Failed last ${runs.length} run${runs.length > 1 ? 's' : ''}`;
114
+ }
115
+ // Check for recently fixed (BEFORE checking consecutive passes alone)
116
+ if (consecutivePasses >= 2 && runs.length > consecutivePasses) {
117
+ const afterPasses = runs.slice(consecutivePasses);
118
+ const failsAfter = afterPasses.filter((r) => r.conclusion === 'failure').length;
119
+ if (failsAfter >= 2) {
120
+ return 'Recently fixed (was failing)';
121
+ }
122
+ }
123
+ if (consecutivePasses >= 2) {
124
+ return `Passed last ${consecutivePasses} run${consecutivePasses > 1 ? 's' : ''}`;
125
+ }
126
+ if (consecutiveFails >= 2) {
127
+ return `Failed last ${consecutiveFails} run${consecutiveFails > 1 ? 's' : ''}`;
128
+ }
129
+ // Check for alternating pattern (flaky)
130
+ if (this.isAlternating(recentRuns)) {
131
+ return 'Flaky (alternating)';
132
+ }
133
+ // Generic pattern
134
+ const passCount = recentRuns.filter((r) => r.conclusion === 'success').length;
135
+ const failCount = recentRuns.filter((r) => r.conclusion === 'failure').length;
136
+ if (passCount > failCount) {
137
+ return `Mostly passing (${passCount}/${recentRuns.length} runs)`;
138
+ }
139
+ if (failCount > passCount) {
140
+ return `Mostly failing (${failCount}/${recentRuns.length} runs)`;
141
+ }
142
+ return `Mixed results (${passCount} passed, ${failCount} failed)`;
143
+ }
144
+ /**
145
+ * Count consecutive runs with the same conclusion (starting from most recent)
146
+ *
147
+ * @param runs - Workflow runs
148
+ * @param conclusion - Conclusion to check
149
+ * @returns Count of consecutive runs
150
+ */
151
+ countConsecutive(runs, conclusion) {
152
+ let count = 0;
153
+ for (const run of runs) {
154
+ if (run.conclusion === conclusion) {
155
+ count++;
156
+ }
157
+ else {
158
+ break;
159
+ }
160
+ }
161
+ return count;
162
+ }
163
+ /**
164
+ * Check if runs are alternating between success and failure
165
+ *
166
+ * @param runs - Workflow runs (at least 4 required)
167
+ * @returns True if alternating pattern detected
168
+ */
169
+ isAlternating(runs) {
170
+ if (runs.length < 4) {
171
+ return false;
172
+ }
173
+ for (let i = 0; i < runs.length - 1; i++) {
174
+ const current = runs[i].conclusion;
175
+ const next = runs[i + 1].conclusion;
176
+ // Check if they're different (success vs failure)
177
+ const isSuccess = (c) => c === 'success';
178
+ if (isSuccess(current) === isSuccess(next)) {
179
+ return false; // Not alternating
180
+ }
181
+ }
182
+ return true;
183
+ }
184
+ /**
185
+ * Calculate success rate from recent runs
186
+ *
187
+ * @param runs - Recent workflow runs (up to 10)
188
+ * @returns Success rate as percentage string (e.g., "75%")
189
+ */
190
+ calculateSuccessRate(runs) {
191
+ if (runs.length === 0) {
192
+ return undefined;
193
+ }
194
+ const successCount = runs.filter((r) => r.conclusion === 'success').length;
195
+ const rate = Math.round((successCount / runs.length) * 100);
196
+ return `${rate}%`;
197
+ }
198
+ }
199
+ //# sourceMappingURL=history-summary-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-summary-builder.js","sourceRoot":"","sources":["../../src/services/history-summary-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * WatchPROrchestrator - Coordinate all components to build complete WatchPRResult
3
+ *
4
+ * Responsibilities:
5
+ * - Coordinate data fetching (PR metadata, checks, history, changes)
6
+ * - Extract errors from check logs (matrix + non-matrix modes)
7
+ * - Extract external check details (codecov, SonarCloud, etc.)
8
+ * - Build complete WatchPRResult with validation
9
+ * - Generate intelligent guidance
10
+ * - Handle caching (save/retrieve results)
11
+ * - Select output format (YAML on failure, text on success)
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ import type { WatchPRResult } from '../schemas/watch-pr-result.schema.js';
16
+ /**
17
+ * WatchPROrchestrator - Build complete WatchPRResult
18
+ */
19
+ export declare class WatchPROrchestrator {
20
+ private readonly owner;
21
+ private readonly repo;
22
+ private readonly fetcher;
23
+ private readonly historyBuilder;
24
+ private readonly extractionDetector;
25
+ private readonly externalCheckExtractor;
26
+ private cacheManager?;
27
+ constructor(owner: string, repo: string);
28
+ /**
29
+ * Build complete WatchPRResult
30
+ *
31
+ * @param prNumber - PR number
32
+ * @param options - Options (useCache, forceFetch)
33
+ * @returns Complete WatchPRResult
34
+ */
35
+ buildResult(prNumber: number, options?: {
36
+ useCache?: boolean;
37
+ forceFetch?: boolean;
38
+ }): Promise<WatchPRResult>;
39
+ /**
40
+ * Build GitHub Action check from a workflow job
41
+ */
42
+ private buildCheckFromJob;
43
+ /**
44
+ * Extract errors for a check from run logs
45
+ */
46
+ private extractErrorsForCheck;
47
+ /**
48
+ * Determine overall PR status from checks
49
+ */
50
+ private determineOverallStatus;
51
+ /**
52
+ * Build result for a specific run ID
53
+ *
54
+ * Fetches all jobs for the workflow run and creates individual checks for each job.
55
+ * This provides consistent job-level detail matching the default behavior.
56
+ *
57
+ * @param prNumber - PR number
58
+ * @param runId - GitHub run ID
59
+ * @param options - Options (useCache)
60
+ * @returns WatchPRResult with job-level checks
61
+ */
62
+ buildResultForRun(prNumber: number, runId: number, options?: {
63
+ useCache?: boolean;
64
+ }): Promise<WatchPRResult>;
65
+ /**
66
+ * Get priority for check ordering (lower is higher priority)
67
+ */
68
+ private getCheckPriority;
69
+ /**
70
+ * Order checks: failed first, then pending, then passed
71
+ *
72
+ * @param checks - GitHub Action checks
73
+ * @returns Ordered checks
74
+ */
75
+ private orderChecks;
76
+ /**
77
+ * Order external checks: failed first, then pending, then passed
78
+ *
79
+ * @param checks - External checks
80
+ * @returns Ordered checks
81
+ */
82
+ private orderExternalChecks;
83
+ /**
84
+ * Generate intelligent guidance based on check results
85
+ *
86
+ * @param status - Overall status
87
+ * @param githubActions - GitHub Action checks
88
+ * @param externalChecks - External checks
89
+ * @param mergeable - Is PR mergeable?
90
+ * @returns Guidance with next steps
91
+ */
92
+ private generateGuidance;
93
+ /**
94
+ * Fetch logs with retry logic for race conditions
95
+ *
96
+ * When GitHub marks a check as complete, logs may not be immediately available.
97
+ * This method retries with exponential backoff to handle the race condition.
98
+ *
99
+ * Retry schedule: 2s, 4s, 8s (total 3 attempts over ~14 seconds)
100
+ *
101
+ * @param runId - GitHub run ID
102
+ * @param jobId - GitHub job ID (optional, for matrix strategy jobs)
103
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
104
+ * @returns Log content, or null if all retries failed
105
+ */
106
+ private fetchLogsWithRetry;
107
+ /**
108
+ * Fetch all workflow runs for a PR (for --history flag)
109
+ *
110
+ * @param prNumber - PR number
111
+ * @returns List of workflow runs with basic metadata
112
+ */
113
+ fetchRunsForPR(prNumber: number): Promise<Array<{
114
+ run_id: number;
115
+ workflow_name: string;
116
+ status: string;
117
+ conclusion: string | null;
118
+ started_at: string;
119
+ duration?: string;
120
+ }>>;
121
+ /**
122
+ * Determine if output should be YAML format
123
+ *
124
+ * Auto-YAML on failure (consistent with validate command)
125
+ *
126
+ * @param status - Overall status
127
+ * @param forceYAML - Force YAML output
128
+ * @returns True if should output YAML
129
+ */
130
+ shouldOutputYAML(status: string, forceYAML: boolean): boolean;
131
+ }
132
+ //# sourceMappingURL=watch-pr-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-pr-orchestrator.d.ts","sourceRoot":"","sources":["../../src/services/watch-pr-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAQV,aAAa,EACd,MAAM,sCAAsC,CAAC;AAY9C;;GAEG;AACH,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyB;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA4B;IACnE,OAAO,CAAC,YAAY,CAAC,CAAe;gBAGjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM;IAY/B;;;;;;OAMG;IAEG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GACzD,OAAO,CAAC,aAAa,CAAC;IAmJzB;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;YACW,qBAAqB;IAkBnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GACnC,OAAO,CAAC,aAAa,CAAC;IAkDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;OAKG;IAEH,OAAO,CAAC,mBAAmB;IAM3B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAoFxB;;;;;;;;;;;;OAYG;YACW,kBAAkB;IAsBhC;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACpD,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IAIH;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;CAG9D"}