@probelabs/visor 0.1.20 → 0.1.21
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/dist/action-cli-bridge.d.ts +0 -1
- package/dist/action-cli-bridge.d.ts.map +1 -1
- package/dist/ai-review-service.d.ts +0 -1
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/check-execution-engine.d.ts +0 -1
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/cli-main.d.ts +0 -2
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/commands.d.ts +0 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/dependency-resolver.d.ts +0 -1
- package/dist/dependency-resolver.d.ts.map +1 -1
- package/dist/event-mapper.d.ts +0 -1
- package/dist/event-mapper.d.ts.map +1 -1
- package/dist/failure-condition-evaluator.d.ts +0 -1
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/git-repository-analyzer.d.ts +0 -1
- package/dist/git-repository-analyzer.d.ts.map +1 -1
- package/dist/github-check-service.d.ts +0 -1
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-comments.d.ts +0 -1
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127704 -805
- package/dist/output-formatters.d.ts +0 -1
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/pr-analyzer.d.ts +0 -1
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/dist/pr-detector.d.ts +0 -1
- package/dist/pr-detector.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/noop-check-provider.d.ts.map +1 -1
- package/dist/providers/tool-check-provider.d.ts.map +1 -1
- package/dist/providers/webhook-check-provider.d.ts.map +1 -1
- package/dist/reviewer.d.ts +0 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/session-registry.d.ts +0 -1
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/env-resolver.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/action-cli-bridge.js +0 -387
- package/dist/action-cli-bridge.js.map +0 -1
- package/dist/ai-review-service.js +0 -854
- package/dist/ai-review-service.js.map +0 -1
- package/dist/check-execution-engine.js +0 -1720
- package/dist/check-execution-engine.js.map +0 -1
- package/dist/cli-main.js +0 -249
- package/dist/cli-main.js.map +0 -1
- package/dist/cli.js +0 -241
- package/dist/cli.js.map +0 -1
- package/dist/commands.js +0 -53
- package/dist/commands.js.map +0 -1
- package/dist/config.js +0 -437
- package/dist/config.js.map +0 -1
- package/dist/dependency-resolver.js +0 -163
- package/dist/dependency-resolver.js.map +0 -1
- package/dist/event-mapper.js +0 -316
- package/dist/event-mapper.js.map +0 -1
- package/dist/failure-condition-evaluator.js +0 -481
- package/dist/failure-condition-evaluator.js.map +0 -1
- package/dist/git-repository-analyzer.js +0 -285
- package/dist/git-repository-analyzer.js.map +0 -1
- package/dist/github-check-service.js +0 -369
- package/dist/github-check-service.js.map +0 -1
- package/dist/github-comments.js +0 -289
- package/dist/github-comments.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/output-formatters.js +0 -624
- package/dist/output-formatters.js.map +0 -1
- package/dist/pr-analyzer.js +0 -195
- package/dist/pr-analyzer.js.map +0 -1
- package/dist/pr-detector.js +0 -357
- package/dist/pr-detector.js.map +0 -1
- package/dist/providers/ai-check-provider.js +0 -437
- package/dist/providers/ai-check-provider.js.map +0 -1
- package/dist/providers/check-provider-registry.js +0 -138
- package/dist/providers/check-provider-registry.js.map +0 -1
- package/dist/providers/check-provider.interface.js +0 -11
- package/dist/providers/check-provider.interface.js.map +0 -1
- package/dist/providers/index.js +0 -19
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/noop-check-provider.js +0 -55
- package/dist/providers/noop-check-provider.js.map +0 -1
- package/dist/providers/tool-check-provider.js +0 -174
- package/dist/providers/tool-check-provider.js.map +0 -1
- package/dist/providers/webhook-check-provider.js +0 -173
- package/dist/providers/webhook-check-provider.js.map +0 -1
- package/dist/reviewer.js +0 -260
- package/dist/reviewer.js.map +0 -1
- package/dist/session-registry.js +0 -67
- package/dist/session-registry.js.map +0 -1
- package/dist/types/cli.js +0 -3
- package/dist/types/cli.js.map +0 -1
- package/dist/types/config.js +0 -6
- package/dist/types/config.js.map +0 -1
- package/dist/utils/env-resolver.js +0 -130
- package/dist/utils/env-resolver.js.map +0 -1
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NoopCheckProvider = void 0;
|
|
4
|
-
const check_provider_interface_1 = require("./check-provider.interface");
|
|
5
|
-
/**
|
|
6
|
-
* No-operation check provider that doesn't perform any analysis.
|
|
7
|
-
*
|
|
8
|
-
* This provider is designed for command orchestration - it allows creating
|
|
9
|
-
* checks that exist purely to trigger other checks through dependencies.
|
|
10
|
-
*
|
|
11
|
-
* Example use case: A "/review" command that triggers multiple analysis checks
|
|
12
|
-
* without performing any analysis itself.
|
|
13
|
-
*/
|
|
14
|
-
class NoopCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
15
|
-
getName() {
|
|
16
|
-
return 'noop';
|
|
17
|
-
}
|
|
18
|
-
getDescription() {
|
|
19
|
-
return 'No-operation provider for command orchestration and dependency triggering';
|
|
20
|
-
}
|
|
21
|
-
async validateConfig(config) {
|
|
22
|
-
if (!config || typeof config !== 'object') {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
const cfg = config;
|
|
26
|
-
// Type must be 'noop'
|
|
27
|
-
if (cfg.type !== 'noop') {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
async execute(_prInfo, _config, _dependencyResults, _sessionInfo) {
|
|
33
|
-
// Noop provider doesn't perform any analysis
|
|
34
|
-
// It exists purely for command orchestration and dependency triggering
|
|
35
|
-
return {
|
|
36
|
-
issues: [],
|
|
37
|
-
suggestions: [],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
getSupportedConfigKeys() {
|
|
41
|
-
return ['type', 'command', 'depends_on', 'on', 'if', 'group'];
|
|
42
|
-
}
|
|
43
|
-
async isAvailable() {
|
|
44
|
-
// Noop provider is always available
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
getRequirements() {
|
|
48
|
-
return [
|
|
49
|
-
'No external dependencies required',
|
|
50
|
-
'Used for command orchestration and dependency triggering',
|
|
51
|
-
];
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.NoopCheckProvider = NoopCheckProvider;
|
|
55
|
-
//# sourceMappingURL=noop-check-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noop-check-provider.js","sourceRoot":"","sources":["../../src/providers/noop-check-provider.ts"],"names":[],"mappings":";;;AAAA,yEAAgF;AAIhF;;;;;;;;GAQG;AACH,MAAa,iBAAkB,SAAQ,wCAAa;IAClD,OAAO;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc;QACZ,OAAO,2EAA2E,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAe;QAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,MAA6B,CAAC;QAE1C,sBAAsB;QACtB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAe,EACf,OAA4B,EAC5B,kBAA+C,EAC/C,YAAmE;QAEnE,6CAA6C;QAC7C,uEAAuE;QACvE,OAAO;YACL,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,sBAAsB;QACpB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,oCAAoC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO;YACL,mCAAmC;YACnC,0DAA0D;SAC3D,CAAC;IACJ,CAAC;CACF;AArDD,8CAqDC"}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ToolCheckProvider = void 0;
|
|
4
|
-
const check_provider_interface_1 = require("./check-provider.interface");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
|
-
const liquidjs_1 = require("liquidjs");
|
|
7
|
-
/**
|
|
8
|
-
* Check provider that executes external tools and commands with Liquid template support
|
|
9
|
-
* Supports both simple commands and complex templated execution with stdin
|
|
10
|
-
*/
|
|
11
|
-
class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
12
|
-
liquid;
|
|
13
|
-
constructor() {
|
|
14
|
-
super();
|
|
15
|
-
this.liquid = new liquidjs_1.Liquid({
|
|
16
|
-
strictVariables: false,
|
|
17
|
-
strictFilters: false,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
getName() {
|
|
21
|
-
return 'tool';
|
|
22
|
-
}
|
|
23
|
-
getDescription() {
|
|
24
|
-
return 'Execute external code analysis tools (ESLint, Prettier, etc.)';
|
|
25
|
-
}
|
|
26
|
-
async validateConfig(config) {
|
|
27
|
-
if (!config || typeof config !== 'object') {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
const cfg = config;
|
|
31
|
-
// Type must be 'tool'
|
|
32
|
-
if (cfg.type !== 'tool') {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
// Must have exec specified for tool execution
|
|
36
|
-
if (typeof cfg.exec !== 'string' || !cfg.exec) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
async execute(prInfo, config, _dependencyResults, _sessionInfo) {
|
|
42
|
-
const execTemplate = config.exec;
|
|
43
|
-
const stdinTemplate = config.stdin;
|
|
44
|
-
// Prepare template context
|
|
45
|
-
const templateContext = {
|
|
46
|
-
pr: {
|
|
47
|
-
number: prInfo.number,
|
|
48
|
-
title: prInfo.title,
|
|
49
|
-
body: prInfo.body,
|
|
50
|
-
author: prInfo.author,
|
|
51
|
-
base: prInfo.base,
|
|
52
|
-
head: prInfo.head,
|
|
53
|
-
totalAdditions: prInfo.totalAdditions,
|
|
54
|
-
totalDeletions: prInfo.totalDeletions,
|
|
55
|
-
},
|
|
56
|
-
files: prInfo.files.map(f => ({
|
|
57
|
-
filename: f.filename,
|
|
58
|
-
status: f.status,
|
|
59
|
-
additions: f.additions,
|
|
60
|
-
deletions: f.deletions,
|
|
61
|
-
changes: f.changes,
|
|
62
|
-
patch: f.patch,
|
|
63
|
-
})),
|
|
64
|
-
// Add convenience arrays for common use cases
|
|
65
|
-
filenames: prInfo.files.map(f => f.filename),
|
|
66
|
-
config: config, // Allow access to config values in templates
|
|
67
|
-
};
|
|
68
|
-
// Render the command template
|
|
69
|
-
const renderedCommand = await this.liquid.parseAndRender(execTemplate, templateContext);
|
|
70
|
-
// Render stdin if provided
|
|
71
|
-
let renderedStdin;
|
|
72
|
-
if (stdinTemplate) {
|
|
73
|
-
renderedStdin = await this.liquid.parseAndRender(stdinTemplate, templateContext);
|
|
74
|
-
}
|
|
75
|
-
// Execute the tool
|
|
76
|
-
const output = await this.executeCommand(renderedCommand.trim(), renderedStdin);
|
|
77
|
-
// Parse tool output (this would be customized per tool)
|
|
78
|
-
const comments = this.parseToolOutput(output, renderedCommand);
|
|
79
|
-
const issues = comments.map(comment => ({
|
|
80
|
-
file: comment.file,
|
|
81
|
-
line: comment.line,
|
|
82
|
-
endLine: undefined,
|
|
83
|
-
ruleId: `tool/${comment.category}`,
|
|
84
|
-
message: comment.message,
|
|
85
|
-
severity: comment.severity,
|
|
86
|
-
category: comment.category,
|
|
87
|
-
suggestion: undefined,
|
|
88
|
-
replacement: undefined,
|
|
89
|
-
}));
|
|
90
|
-
return {
|
|
91
|
-
issues,
|
|
92
|
-
suggestions: this.generateSuggestions(comments, renderedCommand),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
async executeCommand(command, stdin) {
|
|
96
|
-
return new Promise((resolve, reject) => {
|
|
97
|
-
// Parse command and arguments (handle quoted arguments)
|
|
98
|
-
const parts = command.match(/(?:[^\s"]+|"[^"]*")+/g) || [command];
|
|
99
|
-
const cmd = parts[0];
|
|
100
|
-
const args = parts.slice(1).map(arg => arg.replace(/^"(.*)"$/, '$1'));
|
|
101
|
-
const child = (0, child_process_1.spawn)(cmd, args, {
|
|
102
|
-
shell: false,
|
|
103
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
104
|
-
});
|
|
105
|
-
let output = '';
|
|
106
|
-
let error = '';
|
|
107
|
-
child.stdout.on('data', data => {
|
|
108
|
-
output += data.toString();
|
|
109
|
-
});
|
|
110
|
-
child.stderr.on('data', data => {
|
|
111
|
-
error += data.toString();
|
|
112
|
-
});
|
|
113
|
-
// Send stdin data if provided
|
|
114
|
-
if (stdin) {
|
|
115
|
-
child.stdin.write(stdin);
|
|
116
|
-
child.stdin.end();
|
|
117
|
-
}
|
|
118
|
-
child.on('close', _code => {
|
|
119
|
-
// Many tools return non-zero on issues found
|
|
120
|
-
resolve(output || error);
|
|
121
|
-
});
|
|
122
|
-
child.on('error', err => {
|
|
123
|
-
reject(new Error(`Failed to execute ${cmd}: ${err.message}`));
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
parseToolOutput(output, _command) {
|
|
128
|
-
const comments = [];
|
|
129
|
-
// This is a simplified parser - real implementation would handle specific tool formats
|
|
130
|
-
const lines = output.split('\n');
|
|
131
|
-
for (const line of lines) {
|
|
132
|
-
// Example: file.js:10:5: error: Missing semicolon
|
|
133
|
-
const match = line.match(/^(.+?):(\d+):(\d+):\s*(critical|error|warning|info):\s*(.+)$/);
|
|
134
|
-
if (match) {
|
|
135
|
-
comments.push({
|
|
136
|
-
file: match[1],
|
|
137
|
-
line: parseInt(match[2]),
|
|
138
|
-
message: match[5],
|
|
139
|
-
severity: match[4],
|
|
140
|
-
category: 'style',
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return comments;
|
|
145
|
-
}
|
|
146
|
-
generateSuggestions(comments, command) {
|
|
147
|
-
const suggestions = [];
|
|
148
|
-
if (comments.length > 0) {
|
|
149
|
-
suggestions.push(`Fix ${comments.length} issues found by ${command}`);
|
|
150
|
-
const errorCount = comments.filter(c => c.severity === 'error').length;
|
|
151
|
-
if (errorCount > 0) {
|
|
152
|
-
suggestions.push(`Priority: Fix ${errorCount} errors before merging`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return suggestions;
|
|
156
|
-
}
|
|
157
|
-
getSupportedConfigKeys() {
|
|
158
|
-
return ['type', 'exec', 'command', 'stdin', 'timeout', 'workingDirectory'];
|
|
159
|
-
}
|
|
160
|
-
async isAvailable() {
|
|
161
|
-
// Check if common tools are available
|
|
162
|
-
// In a real implementation, this would check for specific tools based on config
|
|
163
|
-
return true;
|
|
164
|
-
}
|
|
165
|
-
getRequirements() {
|
|
166
|
-
return [
|
|
167
|
-
'External tool must be installed (e.g., eslint, prettier)',
|
|
168
|
-
'Tool must be accessible in PATH',
|
|
169
|
-
'Appropriate configuration files for the tool',
|
|
170
|
-
];
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
exports.ToolCheckProvider = ToolCheckProvider;
|
|
174
|
-
//# sourceMappingURL=tool-check-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-check-provider.js","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebhookCheckProvider = void 0;
|
|
4
|
-
const check_provider_interface_1 = require("./check-provider.interface");
|
|
5
|
-
/**
|
|
6
|
-
* Check provider that sends PR info to a webhook for external analysis
|
|
7
|
-
*/
|
|
8
|
-
class WebhookCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
9
|
-
getName() {
|
|
10
|
-
return 'webhook';
|
|
11
|
-
}
|
|
12
|
-
getDescription() {
|
|
13
|
-
return 'Send PR data to external webhook for custom analysis';
|
|
14
|
-
}
|
|
15
|
-
async validateConfig(config) {
|
|
16
|
-
if (!config || typeof config !== 'object') {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const cfg = config;
|
|
20
|
-
// Type must be 'webhook'
|
|
21
|
-
if (cfg.type !== 'webhook') {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
// Must have URL specified
|
|
25
|
-
if (typeof cfg.url !== 'string' || !cfg.url) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
// Validate URL format
|
|
29
|
-
try {
|
|
30
|
-
new URL(cfg.url);
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
async execute(prInfo, config, _dependencyResults, _sessionInfo) {
|
|
38
|
-
const url = config.url;
|
|
39
|
-
const method = config.method || 'POST';
|
|
40
|
-
const headers = config.headers || {};
|
|
41
|
-
const timeout = config.timeout || 30000;
|
|
42
|
-
// Prepare webhook payload
|
|
43
|
-
const payload = {
|
|
44
|
-
title: prInfo.title,
|
|
45
|
-
body: prInfo.body,
|
|
46
|
-
author: prInfo.author,
|
|
47
|
-
base: prInfo.base,
|
|
48
|
-
head: prInfo.head,
|
|
49
|
-
files: prInfo.files.map(f => ({
|
|
50
|
-
filename: f.filename,
|
|
51
|
-
status: f.status,
|
|
52
|
-
additions: f.additions,
|
|
53
|
-
deletions: f.deletions,
|
|
54
|
-
changes: f.changes,
|
|
55
|
-
patch: f.patch,
|
|
56
|
-
})),
|
|
57
|
-
totalAdditions: prInfo.totalAdditions,
|
|
58
|
-
totalDeletions: prInfo.totalDeletions,
|
|
59
|
-
metadata: config.metadata || {},
|
|
60
|
-
};
|
|
61
|
-
try {
|
|
62
|
-
// Send webhook request
|
|
63
|
-
const response = await this.sendWebhookRequest(url, method, headers, payload, timeout);
|
|
64
|
-
// Parse webhook response
|
|
65
|
-
return this.parseWebhookResponse(response, url);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
return this.createErrorResult(url, error);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
async sendWebhookRequest(url, method, headers, payload, timeout) {
|
|
72
|
-
// Check if fetch is available (Node 18+)
|
|
73
|
-
if (typeof fetch === 'undefined') {
|
|
74
|
-
throw new Error('Webhook provider requires Node.js 18+ or node-fetch package');
|
|
75
|
-
}
|
|
76
|
-
const controller = new AbortController();
|
|
77
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
78
|
-
try {
|
|
79
|
-
const response = await fetch(url, {
|
|
80
|
-
method,
|
|
81
|
-
headers: {
|
|
82
|
-
'Content-Type': 'application/json',
|
|
83
|
-
...headers,
|
|
84
|
-
},
|
|
85
|
-
body: JSON.stringify(payload),
|
|
86
|
-
signal: controller.signal,
|
|
87
|
-
});
|
|
88
|
-
clearTimeout(timeoutId);
|
|
89
|
-
if (!response.ok) {
|
|
90
|
-
throw new Error(`Webhook returned ${response.status}: ${response.statusText}`);
|
|
91
|
-
}
|
|
92
|
-
return (await response.json());
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
clearTimeout(timeoutId);
|
|
96
|
-
if (error?.name === 'AbortError') {
|
|
97
|
-
throw new Error(`Webhook request timed out after ${timeout}ms`);
|
|
98
|
-
}
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
parseWebhookResponse(response, url) {
|
|
103
|
-
// Validate and normalize the webhook response
|
|
104
|
-
if (!response || typeof response !== 'object') {
|
|
105
|
-
return this.createErrorResult(url, new Error('Invalid webhook response format'));
|
|
106
|
-
}
|
|
107
|
-
const issues = Array.isArray(response.comments)
|
|
108
|
-
? response.comments.map(c => ({
|
|
109
|
-
file: c.file || 'unknown',
|
|
110
|
-
line: c.line || 0,
|
|
111
|
-
endLine: c.endLine,
|
|
112
|
-
ruleId: c.ruleId || `webhook/${this.validateCategory(c.category)}`,
|
|
113
|
-
message: c.message || '',
|
|
114
|
-
severity: this.validateSeverity(c.severity),
|
|
115
|
-
category: this.validateCategory(c.category),
|
|
116
|
-
suggestion: c.suggestion,
|
|
117
|
-
replacement: c.replacement,
|
|
118
|
-
}))
|
|
119
|
-
: [];
|
|
120
|
-
return {
|
|
121
|
-
issues,
|
|
122
|
-
suggestions: Array.isArray(response.suggestions) ? response.suggestions : [],
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
createErrorResult(url, error) {
|
|
126
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
127
|
-
return {
|
|
128
|
-
issues: [
|
|
129
|
-
{
|
|
130
|
-
file: 'webhook',
|
|
131
|
-
line: 0,
|
|
132
|
-
endLine: undefined,
|
|
133
|
-
ruleId: 'webhook/error',
|
|
134
|
-
message: `Webhook execution error: ${errorMessage}`,
|
|
135
|
-
severity: 'error',
|
|
136
|
-
category: 'logic',
|
|
137
|
-
suggestion: undefined,
|
|
138
|
-
replacement: undefined,
|
|
139
|
-
},
|
|
140
|
-
],
|
|
141
|
-
suggestions: [`Webhook ${url} failed: ${errorMessage}`],
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
validateSeverity(severity) {
|
|
145
|
-
const valid = ['info', 'warning', 'error', 'critical'];
|
|
146
|
-
return valid.includes(severity)
|
|
147
|
-
? severity
|
|
148
|
-
: 'info';
|
|
149
|
-
}
|
|
150
|
-
validateCategory(category) {
|
|
151
|
-
const valid = ['security', 'performance', 'style', 'logic', 'documentation'];
|
|
152
|
-
return valid.includes(category)
|
|
153
|
-
? category
|
|
154
|
-
: 'logic';
|
|
155
|
-
}
|
|
156
|
-
getSupportedConfigKeys() {
|
|
157
|
-
return ['type', 'url', 'method', 'headers', 'timeout', 'metadata', 'retryCount', 'retryDelay'];
|
|
158
|
-
}
|
|
159
|
-
async isAvailable() {
|
|
160
|
-
// Webhook is available if fetch is available
|
|
161
|
-
return typeof fetch !== 'undefined';
|
|
162
|
-
}
|
|
163
|
-
getRequirements() {
|
|
164
|
-
return [
|
|
165
|
-
'Valid webhook URL',
|
|
166
|
-
'Network access to webhook endpoint',
|
|
167
|
-
'Webhook must return JSON in ReviewSummary format',
|
|
168
|
-
'Webhook must respond within timeout period',
|
|
169
|
-
];
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
exports.WebhookCheckProvider = WebhookCheckProvider;
|
|
173
|
-
//# sourceMappingURL=webhook-check-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-check-provider.js","sourceRoot":"","sources":["../../src/providers/webhook-check-provider.ts"],"names":[],"mappings":"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"}
|