@vibe-validate/cli 0.17.6-rc.2 → 0.18.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) 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/commands/cleanup.d.ts.map +1 -1
  6. package/dist/commands/cleanup.js +5 -2
  7. package/dist/commands/cleanup.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +3 -1
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/create-extractor.d.ts.map +1 -1
  12. package/dist/commands/create-extractor.js +3 -1
  13. package/dist/commands/create-extractor.js.map +1 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +11 -5
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/generate-workflow.d.ts.map +1 -1
  18. package/dist/commands/generate-workflow.js +6 -2
  19. package/dist/commands/generate-workflow.js.map +1 -1
  20. package/dist/commands/history.d.ts.map +1 -1
  21. package/dist/commands/history.js +23 -13
  22. package/dist/commands/history.js.map +1 -1
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +3 -1
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/pre-commit.d.ts.map +1 -1
  27. package/dist/commands/pre-commit.js +5 -2
  28. package/dist/commands/pre-commit.js.map +1 -1
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +12 -10
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/state.d.ts.map +1 -1
  33. package/dist/commands/state.js +15 -10
  34. package/dist/commands/state.js.map +1 -1
  35. package/dist/commands/sync-check.js +5 -5
  36. package/dist/commands/sync-check.js.map +1 -1
  37. package/dist/commands/watch-pr.d.ts +16 -0
  38. package/dist/commands/watch-pr.d.ts.map +1 -1
  39. package/dist/commands/watch-pr.js +572 -318
  40. package/dist/commands/watch-pr.js.map +1 -1
  41. package/dist/schemas/watch-pr-result.schema.d.ts +2010 -0
  42. package/dist/schemas/watch-pr-result.schema.d.ts.map +1 -0
  43. package/dist/schemas/watch-pr-result.schema.js +335 -0
  44. package/dist/schemas/watch-pr-result.schema.js.map +1 -0
  45. package/dist/schemas/watch-pr-schema.d.ts +6 -6
  46. package/dist/services/cache-manager.d.ts +113 -0
  47. package/dist/services/cache-manager.d.ts.map +1 -0
  48. package/dist/services/cache-manager.js +211 -0
  49. package/dist/services/cache-manager.js.map +1 -0
  50. package/dist/services/ci-providers/github-actions.d.ts.map +1 -1
  51. package/dist/services/ci-providers/github-actions.js +10 -16
  52. package/dist/services/ci-providers/github-actions.js.map +1 -1
  53. package/dist/services/external-check-extractor.d.ts +66 -0
  54. package/dist/services/external-check-extractor.d.ts.map +1 -0
  55. package/dist/services/external-check-extractor.js +114 -0
  56. package/dist/services/external-check-extractor.js.map +1 -0
  57. package/dist/services/extraction-mode-detector.d.ts +85 -0
  58. package/dist/services/extraction-mode-detector.d.ts.map +1 -0
  59. package/dist/services/extraction-mode-detector.js +200 -0
  60. package/dist/services/extraction-mode-detector.js.map +1 -0
  61. package/dist/services/github-fetcher.d.ts +210 -0
  62. package/dist/services/github-fetcher.d.ts.map +1 -0
  63. package/dist/services/github-fetcher.js +412 -0
  64. package/dist/services/github-fetcher.js.map +1 -0
  65. package/dist/services/history-summary-builder.d.ts +74 -0
  66. package/dist/services/history-summary-builder.d.ts.map +1 -0
  67. package/dist/services/history-summary-builder.js +199 -0
  68. package/dist/services/history-summary-builder.js.map +1 -0
  69. package/dist/services/watch-pr-orchestrator.d.ts +119 -0
  70. package/dist/services/watch-pr-orchestrator.d.ts.map +1 -0
  71. package/dist/services/watch-pr-orchestrator.js +420 -0
  72. package/dist/services/watch-pr-orchestrator.js.map +1 -0
  73. package/dist/utils/command-name.d.ts +21 -0
  74. package/dist/utils/command-name.d.ts.map +1 -0
  75. package/dist/utils/command-name.js +45 -0
  76. package/dist/utils/command-name.js.map +1 -0
  77. package/dist/utils/pid-lock.d.ts.map +1 -1
  78. package/dist/utils/pid-lock.js +3 -3
  79. package/dist/utils/pid-lock.js.map +1 -1
  80. package/dist/utils/secret-scanning.d.ts +1 -1
  81. package/dist/utils/secret-scanning.d.ts.map +1 -1
  82. package/dist/utils/secret-scanning.js +32 -4
  83. package/dist/utils/secret-scanning.js.map +1 -1
  84. package/dist/utils/temp-files.d.ts.map +1 -1
  85. package/dist/utils/temp-files.js +2 -2
  86. package/dist/utils/temp-files.js.map +1 -1
  87. package/dist/utils/validate-workflow.js +7 -7
  88. package/dist/utils/validate-workflow.js.map +1 -1
  89. package/package.json +7 -7
@@ -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,119 @@
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 result for a specific run ID
41
+ *
42
+ * Useful for watching specific failed runs to test extraction.
43
+ * Does not use history summary (since it's a single run).
44
+ *
45
+ * @param prNumber - PR number
46
+ * @param runId - GitHub run ID
47
+ * @param options - Options (useCache)
48
+ * @returns WatchPRResult with single check
49
+ */
50
+ buildResultForRun(prNumber: number, runId: number, options?: {
51
+ useCache?: boolean;
52
+ }): Promise<WatchPRResult>;
53
+ /**
54
+ * Get priority for check ordering (lower is higher priority)
55
+ */
56
+ private getCheckPriority;
57
+ /**
58
+ * Order checks: failed first, then pending, then passed
59
+ *
60
+ * @param checks - GitHub Action checks
61
+ * @returns Ordered checks
62
+ */
63
+ private orderChecks;
64
+ /**
65
+ * Order external checks: failed first, then pending, then passed
66
+ *
67
+ * @param checks - External checks
68
+ * @returns Ordered checks
69
+ */
70
+ private orderExternalChecks;
71
+ /**
72
+ * Generate intelligent guidance based on check results
73
+ *
74
+ * @param status - Overall status
75
+ * @param githubActions - GitHub Action checks
76
+ * @param externalChecks - External checks
77
+ * @param mergeable - Is PR mergeable?
78
+ * @returns Guidance with next steps
79
+ */
80
+ private generateGuidance;
81
+ /**
82
+ * Fetch logs with retry logic for race conditions
83
+ *
84
+ * When GitHub marks a check as complete, logs may not be immediately available.
85
+ * This method retries with exponential backoff to handle the race condition.
86
+ *
87
+ * Retry schedule: 2s, 4s, 8s (total 3 attempts over ~14 seconds)
88
+ *
89
+ * @param runId - GitHub run ID
90
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
91
+ * @returns Log content, or null if all retries failed
92
+ */
93
+ private fetchLogsWithRetry;
94
+ /**
95
+ * Fetch all workflow runs for a PR (for --history flag)
96
+ *
97
+ * @param prNumber - PR number
98
+ * @returns List of workflow runs with basic metadata
99
+ */
100
+ fetchRunsForPR(prNumber: number): Promise<Array<{
101
+ run_id: number;
102
+ workflow_name: string;
103
+ status: string;
104
+ conclusion: string | null;
105
+ started_at: string;
106
+ duration?: string;
107
+ }>>;
108
+ /**
109
+ * Determine if output should be YAML format
110
+ *
111
+ * Auto-YAML on failure (consistent with validate command)
112
+ *
113
+ * @param status - Overall status
114
+ * @param forceYAML - Force YAML output
115
+ * @returns True if should output YAML
116
+ */
117
+ shouldOutputYAML(status: string, forceYAML: boolean): boolean;
118
+ }
119
+ //# 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,EAOV,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;IAiJzB;;;;;;;;;;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;IAuFzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;OAKG;IAEH,OAAO,CAAC,mBAAmB;IAM3B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAoFxB;;;;;;;;;;;OAWG;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"}