@probelabs/visor 0.1.17 → 0.1.19
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 +78 -0
- package/defaults/.visor.yaml +53 -1
- package/dist/ai-review-service.js +2 -2
- package/dist/ai-review-service.js.map +1 -1
- package/dist/check-execution-engine.d.ts +32 -1
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/check-execution-engine.js +289 -19
- package/dist/check-execution-engine.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -3
- package/dist/config.js.map +1 -1
- package/dist/event-mapper.d.ts.map +1 -1
- package/dist/event-mapper.js +1 -1
- package/dist/event-mapper.js.map +1 -1
- package/dist/failure-condition-evaluator.d.ts +8 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/failure-condition-evaluator.js +25 -3
- package/dist/failure-condition-evaluator.js.map +1 -1
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-check-service.js +26 -39
- package/dist/github-check-service.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +331 -690
- package/dist/index.js.map +1 -1
- package/dist/licenses.txt +2300 -0
- package/dist/output/code-review/schema.json +84 -0
- package/dist/output/code-review/template.liquid +32 -0
- package/dist/output/plain/schema.json +14 -0
- package/dist/output/plain/template.liquid +1 -0
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/output-formatters.js +14 -14
- package/dist/output-formatters.js.map +1 -1
- package/dist/pr-analyzer.d.ts +2 -1
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/dist/pr-analyzer.js +2 -1
- package/dist/pr-analyzer.js.map +1 -1
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.js +4 -0
- package/dist/providers/ai-check-provider.js.map +1 -1
- package/dist/providers/check-provider-registry.js +2 -2
- package/dist/providers/check-provider-registry.js.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +2 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -3
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/noop-check-provider.d.ts +25 -0
- package/dist/providers/noop-check-provider.d.ts.map +1 -0
- package/dist/providers/noop-check-provider.js +55 -0
- package/dist/providers/noop-check-provider.js.map +1 -0
- package/dist/providers/tool-check-provider.d.ts +4 -1
- package/dist/providers/tool-check-provider.d.ts.map +1 -1
- package/dist/providers/tool-check-provider.js +64 -15
- package/dist/providers/tool-check-provider.js.map +1 -1
- package/dist/reviewer.d.ts +19 -37
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/reviewer.js +83 -593
- package/dist/reviewer.js.map +1 -1
- package/dist/tiktoken_bg.wasm +0 -0
- package/dist/types/config.d.ts +52 -5
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/providers/script-check-provider.d.ts +0 -23
- package/dist/providers/script-check-provider.d.ts.map +0 -1
- package/dist/providers/script-check-provider.js +0 -163
- package/dist/providers/script-check-provider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uEAAgF;AAAvE,yHAAA,aAAa,OAAA;AACtB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uEAAgF;AAAvE,yHAAA,aAAa,OAAA;AACtB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
|
|
2
|
+
import { PRInfo } from '../pr-analyzer';
|
|
3
|
+
import { ReviewSummary } from '../reviewer';
|
|
4
|
+
/**
|
|
5
|
+
* No-operation check provider that doesn't perform any analysis.
|
|
6
|
+
*
|
|
7
|
+
* This provider is designed for command orchestration - it allows creating
|
|
8
|
+
* checks that exist purely to trigger other checks through dependencies.
|
|
9
|
+
*
|
|
10
|
+
* Example use case: A "/review" command that triggers multiple analysis checks
|
|
11
|
+
* without performing any analysis itself.
|
|
12
|
+
*/
|
|
13
|
+
export declare class NoopCheckProvider extends CheckProvider {
|
|
14
|
+
getName(): string;
|
|
15
|
+
getDescription(): string;
|
|
16
|
+
validateConfig(config: unknown): Promise<boolean>;
|
|
17
|
+
execute(_prInfo: PRInfo, _config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>, _sessionInfo?: {
|
|
18
|
+
parentSessionId?: string;
|
|
19
|
+
reuseSession?: boolean;
|
|
20
|
+
}): Promise<ReviewSummary>;
|
|
21
|
+
getSupportedConfigKeys(): string[];
|
|
22
|
+
isAvailable(): Promise<boolean>;
|
|
23
|
+
getRequirements(): string[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=noop-check-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-check-provider.d.ts","sourceRoot":"","sources":["../../src/providers/noop-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAejD,OAAO,CACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;IASzB,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAM5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -2,9 +2,12 @@ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
|
|
|
2
2
|
import { PRInfo } from '../pr-analyzer';
|
|
3
3
|
import { ReviewSummary } from '../reviewer';
|
|
4
4
|
/**
|
|
5
|
-
* Check provider that executes external tools
|
|
5
|
+
* Check provider that executes external tools and commands with Liquid template support
|
|
6
|
+
* Supports both simple commands and complex templated execution with stdin
|
|
6
7
|
*/
|
|
7
8
|
export declare class ToolCheckProvider extends CheckProvider {
|
|
9
|
+
private liquid;
|
|
10
|
+
constructor();
|
|
8
11
|
getName(): string;
|
|
9
12
|
getDescription(): string;
|
|
10
13
|
validateConfig(config: unknown): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-check-provider.d.ts","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAA8B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-check-provider.d.ts","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAA8B,MAAM,aAAa,CAAC;AAIxE;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;;IASvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;YA8DX,cAAc;IAwC5B,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,mBAAmB;IAe3B,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
|
|
@@ -3,10 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ToolCheckProvider = void 0;
|
|
4
4
|
const check_provider_interface_1 = require("./check-provider.interface");
|
|
5
5
|
const child_process_1 = require("child_process");
|
|
6
|
+
const liquidjs_1 = require("liquidjs");
|
|
6
7
|
/**
|
|
7
|
-
* Check provider that executes external tools
|
|
8
|
+
* Check provider that executes external tools and commands with Liquid template support
|
|
9
|
+
* Supports both simple commands and complex templated execution with stdin
|
|
8
10
|
*/
|
|
9
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
|
+
}
|
|
10
20
|
getName() {
|
|
11
21
|
return 'tool';
|
|
12
22
|
}
|
|
@@ -22,25 +32,55 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
|
22
32
|
if (cfg.type !== 'tool') {
|
|
23
33
|
return false;
|
|
24
34
|
}
|
|
25
|
-
// Must have
|
|
26
|
-
if (typeof cfg.
|
|
35
|
+
// Must have exec specified for tool execution
|
|
36
|
+
if (typeof cfg.exec !== 'string' || !cfg.exec) {
|
|
27
37
|
return false;
|
|
28
38
|
}
|
|
29
39
|
return true;
|
|
30
40
|
}
|
|
31
41
|
async execute(prInfo, config, _dependencyResults, _sessionInfo) {
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
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
|
+
}
|
|
35
75
|
// Execute the tool
|
|
36
|
-
const output = await this.executeCommand(
|
|
76
|
+
const output = await this.executeCommand(renderedCommand.trim(), renderedStdin);
|
|
37
77
|
// Parse tool output (this would be customized per tool)
|
|
38
|
-
const comments = this.parseToolOutput(output,
|
|
78
|
+
const comments = this.parseToolOutput(output, renderedCommand);
|
|
39
79
|
const issues = comments.map(comment => ({
|
|
40
80
|
file: comment.file,
|
|
41
81
|
line: comment.line,
|
|
42
82
|
endLine: undefined,
|
|
43
|
-
ruleId:
|
|
83
|
+
ruleId: `tool/${comment.category}`,
|
|
44
84
|
message: comment.message,
|
|
45
85
|
severity: comment.severity,
|
|
46
86
|
category: comment.category,
|
|
@@ -49,12 +89,16 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
|
49
89
|
}));
|
|
50
90
|
return {
|
|
51
91
|
issues,
|
|
52
|
-
suggestions: this.generateSuggestions(comments,
|
|
92
|
+
suggestions: this.generateSuggestions(comments, renderedCommand),
|
|
53
93
|
};
|
|
54
94
|
}
|
|
55
|
-
async executeCommand(command,
|
|
95
|
+
async executeCommand(command, stdin) {
|
|
56
96
|
return new Promise((resolve, reject) => {
|
|
57
|
-
|
|
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, {
|
|
58
102
|
shell: false,
|
|
59
103
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
60
104
|
});
|
|
@@ -66,12 +110,17 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
|
66
110
|
child.stderr.on('data', data => {
|
|
67
111
|
error += data.toString();
|
|
68
112
|
});
|
|
113
|
+
// Send stdin data if provided
|
|
114
|
+
if (stdin) {
|
|
115
|
+
child.stdin.write(stdin);
|
|
116
|
+
child.stdin.end();
|
|
117
|
+
}
|
|
69
118
|
child.on('close', _code => {
|
|
70
|
-
// Many
|
|
119
|
+
// Many tools return non-zero on issues found
|
|
71
120
|
resolve(output || error);
|
|
72
121
|
});
|
|
73
122
|
child.on('error', err => {
|
|
74
|
-
reject(new Error(`Failed to execute ${
|
|
123
|
+
reject(new Error(`Failed to execute ${cmd}: ${err.message}`));
|
|
75
124
|
});
|
|
76
125
|
});
|
|
77
126
|
}
|
|
@@ -106,7 +155,7 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
|
106
155
|
return suggestions;
|
|
107
156
|
}
|
|
108
157
|
getSupportedConfigKeys() {
|
|
109
|
-
return ['type', 'command', '
|
|
158
|
+
return ['type', 'exec', 'command', 'stdin', 'timeout', 'workingDirectory'];
|
|
110
159
|
}
|
|
111
160
|
async isAvailable() {
|
|
112
161
|
// Check if common tools are available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-check-provider.js","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":";;;AAAA,yEAAgF;AAGhF,iDAAsC;
|
|
1
|
+
{"version":3,"file":"tool-check-provider.js","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/reviewer.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Octokit } from '@octokit/rest';
|
|
2
2
|
import { PRInfo } from './pr-analyzer';
|
|
3
3
|
import { AIDebugInfo } from './ai-review-service';
|
|
4
|
-
import { CustomTemplateConfig } from './types/config';
|
|
5
4
|
export interface ReviewIssue {
|
|
6
5
|
file: string;
|
|
7
6
|
line: number;
|
|
@@ -13,7 +12,6 @@ export interface ReviewIssue {
|
|
|
13
12
|
group?: string;
|
|
14
13
|
schema?: string;
|
|
15
14
|
timestamp?: number;
|
|
16
|
-
template?: CustomTemplateConfig;
|
|
17
15
|
suggestion?: string;
|
|
18
16
|
replacement?: string;
|
|
19
17
|
}
|
|
@@ -27,12 +25,25 @@ export interface ReviewComment {
|
|
|
27
25
|
replacement?: string;
|
|
28
26
|
ruleId?: string;
|
|
29
27
|
}
|
|
28
|
+
export interface CheckResult {
|
|
29
|
+
checkName: string;
|
|
30
|
+
content: string;
|
|
31
|
+
group: string;
|
|
32
|
+
debug?: AIDebugInfo;
|
|
33
|
+
issues?: ReviewIssue[];
|
|
34
|
+
}
|
|
35
|
+
export interface GroupedCheckResults {
|
|
36
|
+
[groupName: string]: CheckResult[];
|
|
37
|
+
}
|
|
30
38
|
export interface ReviewSummary {
|
|
31
|
-
issues
|
|
32
|
-
suggestions
|
|
33
|
-
/** Debug information (only included when debug mode is enabled) */
|
|
39
|
+
issues?: ReviewIssue[];
|
|
40
|
+
suggestions?: string[];
|
|
34
41
|
debug?: AIDebugInfo;
|
|
35
42
|
}
|
|
43
|
+
export declare function convertReviewSummaryToGroupedResults(reviewSummary: ReviewSummary, checkName?: string, groupName?: string): GroupedCheckResults;
|
|
44
|
+
export declare function calculateTotalIssues(issues?: ReviewIssue[]): number;
|
|
45
|
+
export declare function calculateCriticalIssues(issues?: ReviewIssue[]): number;
|
|
46
|
+
export declare function convertIssuesToComments(issues: ReviewIssue[]): ReviewComment[];
|
|
36
47
|
export interface ReviewOptions {
|
|
37
48
|
focus?: 'security' | 'performance' | 'style' | 'all';
|
|
38
49
|
format?: 'table' | 'json' | 'markdown' | 'sarif';
|
|
@@ -41,48 +52,19 @@ export interface ReviewOptions {
|
|
|
41
52
|
checks?: string[];
|
|
42
53
|
parallelExecution?: boolean;
|
|
43
54
|
}
|
|
44
|
-
export declare function calculateTotalIssues(issues: ReviewIssue[]): number;
|
|
45
|
-
export declare function calculateCriticalIssues(issues: ReviewIssue[]): number;
|
|
46
|
-
export declare function convertIssuesToComments(issues: ReviewIssue[]): ReviewComment[];
|
|
47
55
|
export declare class PRReviewer {
|
|
48
56
|
private octokit;
|
|
49
57
|
private commentManager;
|
|
50
58
|
private aiReviewService;
|
|
51
59
|
constructor(octokit: Octokit);
|
|
52
|
-
reviewPR(owner: string, repo: string, prNumber: number, prInfo: PRInfo, options?: ReviewOptions): Promise<
|
|
53
|
-
postReviewComment(owner: string, repo: string, prNumber: number,
|
|
60
|
+
reviewPR(owner: string, repo: string, prNumber: number, prInfo: PRInfo, options?: ReviewOptions): Promise<GroupedCheckResults>;
|
|
61
|
+
postReviewComment(owner: string, repo: string, prNumber: number, groupedResults: GroupedCheckResults, options?: ReviewOptions & {
|
|
54
62
|
commentId?: string;
|
|
55
63
|
triggeredBy?: string;
|
|
56
64
|
commitSha?: string;
|
|
57
65
|
}): Promise<void>;
|
|
58
|
-
private
|
|
59
|
-
private renderWithSchemaTemplate;
|
|
60
|
-
private generateGitHubDiffHash;
|
|
61
|
-
private enhanceIssuesWithGitHubLinks;
|
|
62
|
-
private renderSingleCheckTemplate;
|
|
63
|
-
private groupIssuesByCheck;
|
|
64
|
-
private extractCheckNameFromRuleId;
|
|
65
|
-
private groupIssuesByGroup;
|
|
66
|
-
private formatReviewComment;
|
|
67
|
-
private groupCommentsByCategory;
|
|
68
|
-
private groupCommentsByCheck;
|
|
66
|
+
private formatGroupComment;
|
|
69
67
|
private formatDebugSection;
|
|
70
68
|
private saveDebugArtifact;
|
|
71
|
-
private formatDebugAsMarkdown;
|
|
72
|
-
private parseCheckSections;
|
|
73
|
-
private formatIssuesTable;
|
|
74
|
-
private getLanguageHint;
|
|
75
|
-
/**
|
|
76
|
-
* Load custom template content from file or raw content
|
|
77
|
-
*/
|
|
78
|
-
private loadCustomTemplate;
|
|
79
|
-
/**
|
|
80
|
-
* Detect if a string is likely a file path and if the file exists
|
|
81
|
-
*/
|
|
82
|
-
private isFilePath;
|
|
83
|
-
/**
|
|
84
|
-
* Safely load template from file with security checks
|
|
85
|
-
*/
|
|
86
|
-
private loadTemplateFromFile;
|
|
87
69
|
}
|
|
88
70
|
//# sourceMappingURL=reviewer.d.ts.map
|
package/dist/reviewer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAmB,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"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"}
|