@probelabs/visor 0.1.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.
- package/README.md +1240 -0
- package/action.yml +142 -0
- package/defaults/.visor.yaml +184 -0
- package/dist/action-cli-bridge.d.ts +104 -0
- package/dist/action-cli-bridge.d.ts.map +1 -0
- package/dist/action-cli-bridge.js +372 -0
- package/dist/action-cli-bridge.js.map +1 -0
- package/dist/ai-review-service.d.ts +84 -0
- package/dist/ai-review-service.d.ts.map +1 -0
- package/dist/ai-review-service.js +674 -0
- package/dist/ai-review-service.js.map +1 -0
- package/dist/check-execution-engine.d.ts +165 -0
- package/dist/check-execution-engine.d.ts.map +1 -0
- package/dist/check-execution-engine.js +1172 -0
- package/dist/check-execution-engine.js.map +1 -0
- package/dist/cli-main.d.ts +6 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +247 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +47 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +10 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +53 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +63 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +369 -0
- package/dist/config.js.map +1 -0
- package/dist/dependency-resolver.d.ts +54 -0
- package/dist/dependency-resolver.d.ts.map +1 -0
- package/dist/dependency-resolver.js +163 -0
- package/dist/dependency-resolver.js.map +1 -0
- package/dist/event-mapper.d.ts +125 -0
- package/dist/event-mapper.d.ts.map +1 -0
- package/dist/event-mapper.js +311 -0
- package/dist/event-mapper.js.map +1 -0
- package/dist/failure-condition-evaluator.d.ts +81 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -0
- package/dist/failure-condition-evaluator.js +445 -0
- package/dist/failure-condition-evaluator.js.map +1 -0
- package/dist/git-repository-analyzer.d.ts +45 -0
- package/dist/git-repository-analyzer.d.ts.map +1 -0
- package/dist/git-repository-analyzer.js +285 -0
- package/dist/git-repository-analyzer.js.map +1 -0
- package/dist/github-check-service.d.ts +104 -0
- package/dist/github-check-service.d.ts.map +1 -0
- package/dist/github-check-service.js +382 -0
- package/dist/github-check-service.js.map +1 -0
- package/dist/github-comments.d.ts +109 -0
- package/dist/github-comments.d.ts.map +1 -0
- package/dist/github-comments.js +289 -0
- package/dist/github-comments.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1265 -0
- package/dist/index.js.map +1 -0
- package/dist/output-formatters.d.ts +66 -0
- package/dist/output-formatters.d.ts.map +1 -0
- package/dist/output-formatters.js +624 -0
- package/dist/output-formatters.js.map +1 -0
- package/dist/pr-analyzer.d.ts +47 -0
- package/dist/pr-analyzer.d.ts.map +1 -0
- package/dist/pr-analyzer.js +194 -0
- package/dist/pr-analyzer.js.map +1 -0
- package/dist/pr-detector.d.ts +78 -0
- package/dist/pr-detector.d.ts.map +1 -0
- package/dist/pr-detector.js +357 -0
- package/dist/pr-detector.js.map +1 -0
- package/dist/providers/ai-check-provider.d.ts +40 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -0
- package/dist/providers/ai-check-provider.js +416 -0
- package/dist/providers/ai-check-provider.js.map +1 -0
- package/dist/providers/check-provider-registry.d.ts +67 -0
- package/dist/providers/check-provider-registry.d.ts.map +1 -0
- package/dist/providers/check-provider-registry.js +138 -0
- package/dist/providers/check-provider-registry.js.map +1 -0
- package/dist/providers/check-provider.interface.d.ts +78 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -0
- package/dist/providers/check-provider.interface.js +11 -0
- package/dist/providers/check-provider.interface.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/script-check-provider.d.ts +20 -0
- package/dist/providers/script-check-provider.d.ts.map +1 -0
- package/dist/providers/script-check-provider.js +163 -0
- package/dist/providers/script-check-provider.js.map +1 -0
- package/dist/providers/tool-check-provider.d.ts +19 -0
- package/dist/providers/tool-check-provider.d.ts.map +1 -0
- package/dist/providers/tool-check-provider.js +125 -0
- package/dist/providers/tool-check-provider.js.map +1 -0
- package/dist/providers/webhook-check-provider.d.ts +21 -0
- package/dist/providers/webhook-check-provider.d.ts.map +1 -0
- package/dist/providers/webhook-check-provider.js +173 -0
- package/dist/providers/webhook-check-provider.js.map +1 -0
- package/dist/reviewer.d.ts +88 -0
- package/dist/reviewer.d.ts.map +1 -0
- package/dist/reviewer.js +760 -0
- package/dist/reviewer.js.map +1 -0
- package/dist/types/cli.d.ts +41 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +3 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +315 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/utils/env-resolver.d.ts +38 -0
- package/dist/utils/env-resolver.d.ts.map +1 -0
- package/dist/utils/env-resolver.js +130 -0
- package/dist/utils/env-resolver.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
export interface PRDiff {
|
|
3
|
+
filename: string;
|
|
4
|
+
additions: number;
|
|
5
|
+
deletions: number;
|
|
6
|
+
changes: number;
|
|
7
|
+
patch?: string;
|
|
8
|
+
status: 'added' | 'removed' | 'modified' | 'renamed';
|
|
9
|
+
}
|
|
10
|
+
export interface PRInfo {
|
|
11
|
+
number: number;
|
|
12
|
+
title: string;
|
|
13
|
+
body: string;
|
|
14
|
+
author: string;
|
|
15
|
+
base: string;
|
|
16
|
+
head: string;
|
|
17
|
+
files: PRDiff[];
|
|
18
|
+
totalAdditions: number;
|
|
19
|
+
totalDeletions: number;
|
|
20
|
+
fullDiff?: string;
|
|
21
|
+
commitDiff?: string;
|
|
22
|
+
isIncremental?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare class PRAnalyzer {
|
|
25
|
+
private octokit;
|
|
26
|
+
private maxRetries;
|
|
27
|
+
constructor(octokit: Octokit, maxRetries?: number);
|
|
28
|
+
/**
|
|
29
|
+
* Fetch commit diff for incremental analysis
|
|
30
|
+
*/
|
|
31
|
+
fetchCommitDiff(owner: string, repo: string, commitSha: string): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Generate unified diff for all PR files
|
|
34
|
+
*/
|
|
35
|
+
private generateFullDiff;
|
|
36
|
+
fetchPRDiff(owner: string, repo: string, prNumber: number, commitSha?: string): Promise<PRInfo>;
|
|
37
|
+
fetchPRComments(owner: string, repo: string, prNumber: number): Promise<{
|
|
38
|
+
id: number;
|
|
39
|
+
author: string;
|
|
40
|
+
body: string;
|
|
41
|
+
createdAt: string;
|
|
42
|
+
updatedAt: string;
|
|
43
|
+
}[]>;
|
|
44
|
+
private withRetry;
|
|
45
|
+
private isRetryableError;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=pr-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-analyzer.d.ts","sourceRoot":"","sources":["../src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAoGZ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;YAkBrD,SAAS;IAwCvB,OAAO,CAAC,gBAAgB;CAkBzB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRAnalyzer = void 0;
|
|
4
|
+
class PRAnalyzer {
|
|
5
|
+
octokit;
|
|
6
|
+
maxRetries;
|
|
7
|
+
constructor(octokit, maxRetries = 3) {
|
|
8
|
+
this.octokit = octokit;
|
|
9
|
+
this.maxRetries = maxRetries;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Fetch commit diff for incremental analysis
|
|
13
|
+
*/
|
|
14
|
+
async fetchCommitDiff(owner, repo, commitSha) {
|
|
15
|
+
try {
|
|
16
|
+
const { data: commit } = await this.withRetry(() => this.octokit.rest.repos.getCommit({
|
|
17
|
+
owner,
|
|
18
|
+
repo,
|
|
19
|
+
ref: commitSha,
|
|
20
|
+
}));
|
|
21
|
+
// Extract patches from all files in the commit
|
|
22
|
+
const patches = commit.files
|
|
23
|
+
?.filter(file => file.patch)
|
|
24
|
+
.map(file => `--- ${file.filename}\n${file.patch}`)
|
|
25
|
+
.join('\n\n') || '';
|
|
26
|
+
return patches;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.warn(`Failed to fetch commit diff for ${commitSha}:`, error);
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate unified diff for all PR files
|
|
35
|
+
*/
|
|
36
|
+
generateFullDiff(files) {
|
|
37
|
+
return files
|
|
38
|
+
.filter(file => file.patch)
|
|
39
|
+
.map(file => `--- ${file.filename}\n${file.patch}`)
|
|
40
|
+
.join('\n\n');
|
|
41
|
+
}
|
|
42
|
+
async fetchPRDiff(owner, repo, prNumber, commitSha) {
|
|
43
|
+
const [prData, filesData] = await Promise.all([
|
|
44
|
+
this.withRetry(() => this.octokit.rest.pulls.get({
|
|
45
|
+
owner,
|
|
46
|
+
repo,
|
|
47
|
+
pull_number: prNumber,
|
|
48
|
+
})),
|
|
49
|
+
this.withRetry(() => this.octokit.rest.pulls.listFiles({
|
|
50
|
+
owner,
|
|
51
|
+
repo,
|
|
52
|
+
pull_number: prNumber,
|
|
53
|
+
})),
|
|
54
|
+
]);
|
|
55
|
+
const pr = prData?.data;
|
|
56
|
+
const files = filesData?.data || [];
|
|
57
|
+
// Handle missing or malformed PR data gracefully
|
|
58
|
+
if (!pr) {
|
|
59
|
+
throw new Error('Invalid or missing pull request data');
|
|
60
|
+
}
|
|
61
|
+
// Validate critical fields and provide defaults for missing data
|
|
62
|
+
const title = typeof pr.title === 'string' ? pr.title : pr.title ? String(pr.title) : 'MISSING';
|
|
63
|
+
const body = typeof pr.body === 'string' ? pr.body : pr.body ? String(pr.body) : '';
|
|
64
|
+
const author = pr.user && typeof pr.user === 'object' && pr.user.login
|
|
65
|
+
? typeof pr.user.login === 'string'
|
|
66
|
+
? pr.user.login
|
|
67
|
+
: String(pr.user.login)
|
|
68
|
+
: 'unknown';
|
|
69
|
+
const base = pr.base && typeof pr.base === 'object' && pr.base.ref
|
|
70
|
+
? typeof pr.base.ref === 'string'
|
|
71
|
+
? pr.base.ref
|
|
72
|
+
: String(pr.base.ref)
|
|
73
|
+
: 'main';
|
|
74
|
+
const head = pr.head && typeof pr.head === 'object' && pr.head.ref
|
|
75
|
+
? typeof pr.head.ref === 'string'
|
|
76
|
+
? pr.head.ref
|
|
77
|
+
: String(pr.head.ref)
|
|
78
|
+
: 'feature';
|
|
79
|
+
// Filter out malformed files and handle invalid data types
|
|
80
|
+
const validFiles = files
|
|
81
|
+
? files
|
|
82
|
+
.filter(file => file && typeof file === 'object' && file.filename)
|
|
83
|
+
.map(file => ({
|
|
84
|
+
filename: typeof file.filename === 'string'
|
|
85
|
+
? file.filename
|
|
86
|
+
: String(file.filename || 'unknown'),
|
|
87
|
+
additions: typeof file.additions === 'number' ? Math.max(0, file.additions) : 0,
|
|
88
|
+
deletions: typeof file.deletions === 'number' ? Math.max(0, file.deletions) : 0,
|
|
89
|
+
changes: typeof file.changes === 'number' ? Math.max(0, file.changes) : 0,
|
|
90
|
+
patch: typeof file.patch === 'string' ? file.patch : undefined,
|
|
91
|
+
status: (['added', 'removed', 'modified', 'renamed'].includes(file.status)
|
|
92
|
+
? file.status
|
|
93
|
+
: 'modified'),
|
|
94
|
+
}))
|
|
95
|
+
.filter(file => file.filename.length > 0) // Remove files with empty names
|
|
96
|
+
: [];
|
|
97
|
+
const prInfo = {
|
|
98
|
+
number: typeof pr.number === 'number' ? pr.number : parseInt(String(pr.number || 1), 10),
|
|
99
|
+
title,
|
|
100
|
+
body,
|
|
101
|
+
author,
|
|
102
|
+
base,
|
|
103
|
+
head,
|
|
104
|
+
files: validFiles,
|
|
105
|
+
totalAdditions: validFiles.reduce((sum, file) => sum + file.additions, 0),
|
|
106
|
+
totalDeletions: validFiles.reduce((sum, file) => sum + file.deletions, 0),
|
|
107
|
+
fullDiff: this.generateFullDiff(validFiles),
|
|
108
|
+
};
|
|
109
|
+
// Add commit diff for incremental analysis
|
|
110
|
+
if (commitSha) {
|
|
111
|
+
console.log(`🔧 Fetching incremental diff for commit: ${commitSha}`);
|
|
112
|
+
prInfo.commitDiff = await this.fetchCommitDiff(owner, repo, commitSha);
|
|
113
|
+
prInfo.isIncremental = true;
|
|
114
|
+
if (!prInfo.commitDiff || prInfo.commitDiff.length === 0) {
|
|
115
|
+
console.warn(`⚠️ No commit diff retrieved for ${commitSha}, will use full diff as fallback`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log(`✅ Incremental diff retrieved (${prInfo.commitDiff.length} chars)`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
prInfo.isIncremental = false;
|
|
123
|
+
}
|
|
124
|
+
return prInfo;
|
|
125
|
+
}
|
|
126
|
+
async fetchPRComments(owner, repo, prNumber) {
|
|
127
|
+
const { data: comments } = await this.withRetry(() => this.octokit.rest.issues.listComments({
|
|
128
|
+
owner,
|
|
129
|
+
repo,
|
|
130
|
+
issue_number: prNumber,
|
|
131
|
+
}));
|
|
132
|
+
return comments.map(comment => ({
|
|
133
|
+
id: comment.id,
|
|
134
|
+
author: comment.user?.login || 'unknown',
|
|
135
|
+
body: comment.body || '',
|
|
136
|
+
createdAt: comment.created_at,
|
|
137
|
+
updatedAt: comment.updated_at,
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
async withRetry(operation) {
|
|
141
|
+
let lastError = new Error('Unknown error');
|
|
142
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
143
|
+
try {
|
|
144
|
+
return await operation();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
// Preserve the original error object if possible
|
|
148
|
+
if (error instanceof Error) {
|
|
149
|
+
lastError = error;
|
|
150
|
+
}
|
|
151
|
+
else if (typeof error === 'object' && error !== null) {
|
|
152
|
+
// For objects like {code: 'ETIMEDOUT', message: 'Network timeout'}
|
|
153
|
+
const errorObj = error;
|
|
154
|
+
const message = errorObj.message || errorObj.code || 'Unknown error';
|
|
155
|
+
lastError = new Error(String(message));
|
|
156
|
+
// Preserve important properties
|
|
157
|
+
Object.assign(lastError, error);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
lastError = new Error(String(error));
|
|
161
|
+
}
|
|
162
|
+
// Don't retry on the last attempt
|
|
163
|
+
if (attempt === this.maxRetries) {
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
// Check if this is a retryable error
|
|
167
|
+
if (this.isRetryableError(error)) {
|
|
168
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 5000); // Exponential backoff, max 5s
|
|
169
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// Non-retryable error, fail immediately with original error
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
throw lastError;
|
|
178
|
+
}
|
|
179
|
+
isRetryableError(error) {
|
|
180
|
+
// Retry on network timeouts, connection errors, and temporary server errors
|
|
181
|
+
const retryableErrors = ['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN'];
|
|
182
|
+
const retryableStatuses = [408, 429, 500, 502, 503, 504];
|
|
183
|
+
// Type guard for error objects
|
|
184
|
+
if (typeof error !== 'object' || error === null) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
const err = error;
|
|
188
|
+
return ((err.code !== undefined && retryableErrors.includes(err.code)) ||
|
|
189
|
+
(err.status !== undefined && retryableStatuses.includes(err.status)) ||
|
|
190
|
+
(err.response?.status !== undefined && retryableStatuses.includes(err.response.status)));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.PRAnalyzer = PRAnalyzer;
|
|
194
|
+
//# sourceMappingURL=pr-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-analyzer.js","sourceRoot":"","sources":["../src/pr-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
export interface PRDetectionResult {
|
|
3
|
+
prNumber: number | null;
|
|
4
|
+
confidence: 'high' | 'medium' | 'low';
|
|
5
|
+
source: 'direct' | 'api_query' | 'comment' | 'branch_search' | 'commit_search';
|
|
6
|
+
details?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface GitHubEventContext {
|
|
9
|
+
event_name: string;
|
|
10
|
+
repository?: {
|
|
11
|
+
owner: {
|
|
12
|
+
login: string;
|
|
13
|
+
};
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
event?: {
|
|
17
|
+
pull_request?: {
|
|
18
|
+
number: number;
|
|
19
|
+
head?: {
|
|
20
|
+
sha: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
issue?: {
|
|
24
|
+
number: number;
|
|
25
|
+
pull_request?: any;
|
|
26
|
+
};
|
|
27
|
+
comment?: any;
|
|
28
|
+
action?: string;
|
|
29
|
+
commits?: any[];
|
|
30
|
+
head_commit?: {
|
|
31
|
+
id: string;
|
|
32
|
+
};
|
|
33
|
+
ref?: string;
|
|
34
|
+
};
|
|
35
|
+
payload?: any;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Robust PR detection utility that works across all GitHub event types
|
|
39
|
+
*/
|
|
40
|
+
export declare class PRDetector {
|
|
41
|
+
private octokit;
|
|
42
|
+
private debug;
|
|
43
|
+
constructor(octokit: Octokit, debug?: boolean);
|
|
44
|
+
private log;
|
|
45
|
+
/**
|
|
46
|
+
* Detect PR number from GitHub context with comprehensive fallback strategies
|
|
47
|
+
*/
|
|
48
|
+
detectPRNumber(context: GitHubEventContext, owner?: string, repo?: string): Promise<PRDetectionResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Strategy 1: Detect PR from direct PR events
|
|
51
|
+
*/
|
|
52
|
+
private detectFromDirectPREvent;
|
|
53
|
+
/**
|
|
54
|
+
* Strategy 2: Detect PR from issue comment events
|
|
55
|
+
*/
|
|
56
|
+
private detectFromIssueComment;
|
|
57
|
+
/**
|
|
58
|
+
* Strategy 3: Detect PR from push events by querying associated PRs
|
|
59
|
+
*/
|
|
60
|
+
private detectFromPushEvent;
|
|
61
|
+
/**
|
|
62
|
+
* Strategy 4: Detect PR by searching current branch
|
|
63
|
+
*/
|
|
64
|
+
private detectFromBranch;
|
|
65
|
+
/**
|
|
66
|
+
* Strategy 5: Detect PR by searching for commits
|
|
67
|
+
*/
|
|
68
|
+
private detectFromCommit;
|
|
69
|
+
/**
|
|
70
|
+
* Search for PRs containing a specific commit
|
|
71
|
+
*/
|
|
72
|
+
private searchPRsByCommit;
|
|
73
|
+
/**
|
|
74
|
+
* Get PR detection summary for debugging
|
|
75
|
+
*/
|
|
76
|
+
getDetectionStrategies(): string[];
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=pr-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-detector.d.ts","sourceRoot":"","sources":["../src/pr-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QAC1D,KAAK,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,GAAG,CAAA;SAAE,CAAC;QAC/C,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,WAAW,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,OAAO,EAAE,KAAK,UAAQ;IAK3C,OAAO,CAAC,GAAG;IAMX;;OAEG;IACU,cAAc,CACzB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC;IAwE7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;YACW,mBAAmB;IAyEjC;;OAEG;YACW,gBAAgB;IAgF9B;;OAEG;YACW,gBAAgB;IAwB9B;;OAEG;YACW,iBAAiB;IA+E/B;;OAEG;IACI,sBAAsB,IAAI,MAAM,EAAE;CAS1C"}
|