@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.
Files changed (116) hide show
  1. package/README.md +1240 -0
  2. package/action.yml +142 -0
  3. package/defaults/.visor.yaml +184 -0
  4. package/dist/action-cli-bridge.d.ts +104 -0
  5. package/dist/action-cli-bridge.d.ts.map +1 -0
  6. package/dist/action-cli-bridge.js +372 -0
  7. package/dist/action-cli-bridge.js.map +1 -0
  8. package/dist/ai-review-service.d.ts +84 -0
  9. package/dist/ai-review-service.d.ts.map +1 -0
  10. package/dist/ai-review-service.js +674 -0
  11. package/dist/ai-review-service.js.map +1 -0
  12. package/dist/check-execution-engine.d.ts +165 -0
  13. package/dist/check-execution-engine.d.ts.map +1 -0
  14. package/dist/check-execution-engine.js +1172 -0
  15. package/dist/check-execution-engine.js.map +1 -0
  16. package/dist/cli-main.d.ts +6 -0
  17. package/dist/cli-main.d.ts.map +1 -0
  18. package/dist/cli-main.js +247 -0
  19. package/dist/cli-main.js.map +1 -0
  20. package/dist/cli.d.ts +47 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +224 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/commands.d.ts +10 -0
  25. package/dist/commands.d.ts.map +1 -0
  26. package/dist/commands.js +53 -0
  27. package/dist/commands.js.map +1 -0
  28. package/dist/config.d.ts +63 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +369 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/dependency-resolver.d.ts +54 -0
  33. package/dist/dependency-resolver.d.ts.map +1 -0
  34. package/dist/dependency-resolver.js +163 -0
  35. package/dist/dependency-resolver.js.map +1 -0
  36. package/dist/event-mapper.d.ts +125 -0
  37. package/dist/event-mapper.d.ts.map +1 -0
  38. package/dist/event-mapper.js +311 -0
  39. package/dist/event-mapper.js.map +1 -0
  40. package/dist/failure-condition-evaluator.d.ts +81 -0
  41. package/dist/failure-condition-evaluator.d.ts.map +1 -0
  42. package/dist/failure-condition-evaluator.js +445 -0
  43. package/dist/failure-condition-evaluator.js.map +1 -0
  44. package/dist/git-repository-analyzer.d.ts +45 -0
  45. package/dist/git-repository-analyzer.d.ts.map +1 -0
  46. package/dist/git-repository-analyzer.js +285 -0
  47. package/dist/git-repository-analyzer.js.map +1 -0
  48. package/dist/github-check-service.d.ts +104 -0
  49. package/dist/github-check-service.d.ts.map +1 -0
  50. package/dist/github-check-service.js +382 -0
  51. package/dist/github-check-service.js.map +1 -0
  52. package/dist/github-comments.d.ts +109 -0
  53. package/dist/github-comments.d.ts.map +1 -0
  54. package/dist/github-comments.js +289 -0
  55. package/dist/github-comments.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1265 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/output-formatters.d.ts +66 -0
  61. package/dist/output-formatters.d.ts.map +1 -0
  62. package/dist/output-formatters.js +624 -0
  63. package/dist/output-formatters.js.map +1 -0
  64. package/dist/pr-analyzer.d.ts +47 -0
  65. package/dist/pr-analyzer.d.ts.map +1 -0
  66. package/dist/pr-analyzer.js +194 -0
  67. package/dist/pr-analyzer.js.map +1 -0
  68. package/dist/pr-detector.d.ts +78 -0
  69. package/dist/pr-detector.d.ts.map +1 -0
  70. package/dist/pr-detector.js +357 -0
  71. package/dist/pr-detector.js.map +1 -0
  72. package/dist/providers/ai-check-provider.d.ts +40 -0
  73. package/dist/providers/ai-check-provider.d.ts.map +1 -0
  74. package/dist/providers/ai-check-provider.js +416 -0
  75. package/dist/providers/ai-check-provider.js.map +1 -0
  76. package/dist/providers/check-provider-registry.d.ts +67 -0
  77. package/dist/providers/check-provider-registry.d.ts.map +1 -0
  78. package/dist/providers/check-provider-registry.js +138 -0
  79. package/dist/providers/check-provider-registry.js.map +1 -0
  80. package/dist/providers/check-provider.interface.d.ts +78 -0
  81. package/dist/providers/check-provider.interface.d.ts.map +1 -0
  82. package/dist/providers/check-provider.interface.js +11 -0
  83. package/dist/providers/check-provider.interface.js.map +1 -0
  84. package/dist/providers/index.d.ts +10 -0
  85. package/dist/providers/index.d.ts.map +1 -0
  86. package/dist/providers/index.js +19 -0
  87. package/dist/providers/index.js.map +1 -0
  88. package/dist/providers/script-check-provider.d.ts +20 -0
  89. package/dist/providers/script-check-provider.d.ts.map +1 -0
  90. package/dist/providers/script-check-provider.js +163 -0
  91. package/dist/providers/script-check-provider.js.map +1 -0
  92. package/dist/providers/tool-check-provider.d.ts +19 -0
  93. package/dist/providers/tool-check-provider.d.ts.map +1 -0
  94. package/dist/providers/tool-check-provider.js +125 -0
  95. package/dist/providers/tool-check-provider.js.map +1 -0
  96. package/dist/providers/webhook-check-provider.d.ts +21 -0
  97. package/dist/providers/webhook-check-provider.d.ts.map +1 -0
  98. package/dist/providers/webhook-check-provider.js +173 -0
  99. package/dist/providers/webhook-check-provider.js.map +1 -0
  100. package/dist/reviewer.d.ts +88 -0
  101. package/dist/reviewer.d.ts.map +1 -0
  102. package/dist/reviewer.js +760 -0
  103. package/dist/reviewer.js.map +1 -0
  104. package/dist/types/cli.d.ts +41 -0
  105. package/dist/types/cli.d.ts.map +1 -0
  106. package/dist/types/cli.js +3 -0
  107. package/dist/types/cli.js.map +1 -0
  108. package/dist/types/config.d.ts +315 -0
  109. package/dist/types/config.d.ts.map +1 -0
  110. package/dist/types/config.js +6 -0
  111. package/dist/types/config.js.map +1 -0
  112. package/dist/utils/env-resolver.d.ts +38 -0
  113. package/dist/utils/env-resolver.d.ts.map +1 -0
  114. package/dist/utils/env-resolver.js +130 -0
  115. package/dist/utils/env-resolver.js.map +1 -0
  116. package/package.json +116 -0
@@ -0,0 +1,78 @@
1
+ import { PRInfo } from '../pr-analyzer';
2
+ import { ReviewSummary } from '../reviewer';
3
+ import { EnvConfig } from '../types/config';
4
+ /**
5
+ * Configuration for a check provider
6
+ */
7
+ export interface CheckProviderConfig {
8
+ type: string;
9
+ prompt?: string;
10
+ eventContext?: any;
11
+ focus?: string;
12
+ command?: string;
13
+ args?: string[];
14
+ script?: string;
15
+ interpreter?: string;
16
+ url?: string;
17
+ method?: string;
18
+ headers?: Record<string, string>;
19
+ timeout?: number;
20
+ metadata?: Record<string, unknown>;
21
+ workingDirectory?: string;
22
+ env?: EnvConfig;
23
+ ai?: {
24
+ provider?: string;
25
+ model?: string;
26
+ apiKey?: string;
27
+ timeout?: number;
28
+ debug?: boolean;
29
+ };
30
+ /** AI model to use for this check - overrides global setting */
31
+ ai_model?: string;
32
+ /** AI provider to use for this check - overrides global setting */
33
+ ai_provider?: 'google' | 'anthropic' | 'openai' | string;
34
+ [key: string]: unknown;
35
+ }
36
+ /**
37
+ * Abstract base class for all check providers
38
+ * Implementing classes provide specific check functionality (AI, tool, script, etc.)
39
+ */
40
+ export declare abstract class CheckProvider {
41
+ /**
42
+ * Get the unique name/type of this provider
43
+ */
44
+ abstract getName(): string;
45
+ /**
46
+ * Get a human-readable description of this provider
47
+ */
48
+ abstract getDescription(): string;
49
+ /**
50
+ * Validate provider-specific configuration
51
+ * @param config The configuration to validate
52
+ * @returns true if configuration is valid, false otherwise
53
+ */
54
+ abstract validateConfig(config: unknown): Promise<boolean>;
55
+ /**
56
+ * Execute the check on the given PR information
57
+ * @param prInfo Information about the pull request
58
+ * @param config Provider-specific configuration
59
+ * @param dependencyResults Optional results from dependency checks that this check depends on
60
+ * @returns Review summary with scores, issues, and comments
61
+ */
62
+ abstract execute(prInfo: PRInfo, config: CheckProviderConfig, dependencyResults?: Map<string, ReviewSummary>): Promise<ReviewSummary>;
63
+ /**
64
+ * Get the list of configuration keys this provider supports
65
+ * Used for documentation and validation
66
+ */
67
+ abstract getSupportedConfigKeys(): string[];
68
+ /**
69
+ * Check if this provider is available (e.g., has required API keys)
70
+ * @returns true if provider can be used, false otherwise
71
+ */
72
+ abstract isAvailable(): Promise<boolean>;
73
+ /**
74
+ * Get provider requirements (e.g., environment variables needed)
75
+ */
76
+ abstract getRequirements(): string[];
77
+ }
78
+ //# sourceMappingURL=check-provider.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-provider.interface.d.ts","sourceRoot":"","sources":["../../src/providers/check-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,CAAC,EAAE;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,8BAAsB,aAAa;IACjC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE1D;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAC7C,OAAO,CAAC,aAAa,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAE3C;;;OAGG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM,EAAE;CACrC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckProvider = void 0;
4
+ /**
5
+ * Abstract base class for all check providers
6
+ * Implementing classes provide specific check functionality (AI, tool, script, etc.)
7
+ */
8
+ class CheckProvider {
9
+ }
10
+ exports.CheckProvider = CheckProvider;
11
+ //# sourceMappingURL=check-provider.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-provider.interface.js","sourceRoot":"","sources":["../../src/providers/check-provider.interface.ts"],"names":[],"mappings":";;;AAqCA;;;GAGG;AACH,MAAsB,aAAa;CA+ClC;AA/CD,sCA+CC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Export all provider-related classes and interfaces
3
+ */
4
+ export { CheckProvider, CheckProviderConfig } from './check-provider.interface';
5
+ export { CheckProviderRegistry } from './check-provider-registry';
6
+ export { AICheckProvider } from './ai-check-provider';
7
+ export { ToolCheckProvider } from './tool-check-provider';
8
+ export { ScriptCheckProvider } from './script-check-provider';
9
+ export { WebhookCheckProvider } from './webhook-check-provider';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Export all provider-related classes and interfaces
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WebhookCheckProvider = exports.ScriptCheckProvider = exports.ToolCheckProvider = exports.AICheckProvider = exports.CheckProviderRegistry = exports.CheckProvider = void 0;
7
+ var check_provider_interface_1 = require("./check-provider.interface");
8
+ Object.defineProperty(exports, "CheckProvider", { enumerable: true, get: function () { return check_provider_interface_1.CheckProvider; } });
9
+ var check_provider_registry_1 = require("./check-provider-registry");
10
+ Object.defineProperty(exports, "CheckProviderRegistry", { enumerable: true, get: function () { return check_provider_registry_1.CheckProviderRegistry; } });
11
+ var ai_check_provider_1 = require("./ai-check-provider");
12
+ Object.defineProperty(exports, "AICheckProvider", { enumerable: true, get: function () { return ai_check_provider_1.AICheckProvider; } });
13
+ var tool_check_provider_1 = require("./tool-check-provider");
14
+ Object.defineProperty(exports, "ToolCheckProvider", { enumerable: true, get: function () { return tool_check_provider_1.ToolCheckProvider; } });
15
+ var script_check_provider_1 = require("./script-check-provider");
16
+ Object.defineProperty(exports, "ScriptCheckProvider", { enumerable: true, get: function () { return script_check_provider_1.ScriptCheckProvider; } });
17
+ var webhook_check_provider_1 = require("./webhook-check-provider");
18
+ Object.defineProperty(exports, "WebhookCheckProvider", { enumerable: true, get: function () { return webhook_check_provider_1.WebhookCheckProvider; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,20 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Check provider that executes custom scripts for analysis
6
+ */
7
+ export declare class ScriptCheckProvider extends CheckProvider {
8
+ getName(): string;
9
+ getDescription(): string;
10
+ validateConfig(config: unknown): Promise<boolean>;
11
+ execute(prInfo: PRInfo, config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>): Promise<ReviewSummary>;
12
+ private executeScript;
13
+ private parseScriptOutput;
14
+ private validateSeverity;
15
+ private validateCategory;
16
+ getSupportedConfigKeys(): string[];
17
+ isAvailable(): Promise<boolean>;
18
+ getRequirements(): string[];
19
+ }
20
+ //# sourceMappingURL=script-check-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-check-provider.d.ts","sourceRoot":"","sources":["../../src/providers/script-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;AAIzD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,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,GAC9C,OAAO,CAAC,aAAa,CAAC;YA8BX,aAAa;IA6C3B,OAAO,CAAC,iBAAiB;IA6CzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IASxB,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScriptCheckProvider = void 0;
4
+ const check_provider_interface_1 = require("./check-provider.interface");
5
+ const child_process_1 = require("child_process");
6
+ const fs_1 = require("fs");
7
+ /**
8
+ * Check provider that executes custom scripts for analysis
9
+ */
10
+ class ScriptCheckProvider extends check_provider_interface_1.CheckProvider {
11
+ getName() {
12
+ return 'script';
13
+ }
14
+ getDescription() {
15
+ return 'Execute custom scripts for code analysis and review';
16
+ }
17
+ async validateConfig(config) {
18
+ if (!config || typeof config !== 'object') {
19
+ return false;
20
+ }
21
+ const cfg = config;
22
+ // Type must be 'script'
23
+ if (cfg.type !== 'script') {
24
+ return false;
25
+ }
26
+ // Must have script path specified
27
+ if (typeof cfg.script !== 'string' || !cfg.script) {
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ async execute(prInfo, config, _dependencyResults) {
33
+ const scriptPath = config.script;
34
+ const interpreter = config.interpreter || 'bash';
35
+ // Prepare input for the script (PR info as JSON)
36
+ const scriptInput = JSON.stringify({
37
+ title: prInfo.title,
38
+ body: prInfo.body,
39
+ author: prInfo.author,
40
+ base: prInfo.base,
41
+ head: prInfo.head,
42
+ files: prInfo.files.map(f => ({
43
+ filename: f.filename,
44
+ status: f.status,
45
+ additions: f.additions,
46
+ deletions: f.deletions,
47
+ changes: f.changes,
48
+ patch: f.patch,
49
+ })),
50
+ totalAdditions: prInfo.totalAdditions,
51
+ totalDeletions: prInfo.totalDeletions,
52
+ });
53
+ // Execute the script
54
+ const output = await this.executeScript(interpreter, scriptPath, scriptInput);
55
+ // Parse script output (expected to be JSON)
56
+ return this.parseScriptOutput(output, scriptPath);
57
+ }
58
+ async executeScript(interpreter, scriptPath, input) {
59
+ return new Promise((resolve, reject) => {
60
+ // Check if script exists
61
+ if (!fs_1.promises.access(scriptPath)) {
62
+ reject(new Error(`Script not found: ${scriptPath}`));
63
+ return;
64
+ }
65
+ const child = (0, child_process_1.spawn)(interpreter, [scriptPath], {
66
+ shell: false,
67
+ stdio: ['pipe', 'pipe', 'pipe'],
68
+ });
69
+ let output = '';
70
+ let error = '';
71
+ // Write input to script's stdin
72
+ child.stdin.write(input);
73
+ child.stdin.end();
74
+ child.stdout.on('data', data => {
75
+ output += data.toString();
76
+ });
77
+ child.stderr.on('data', data => {
78
+ error += data.toString();
79
+ });
80
+ child.on('close', code => {
81
+ if (code !== 0) {
82
+ console.error(`Script exited with code ${code}: ${error}`);
83
+ }
84
+ resolve(output);
85
+ });
86
+ child.on('error', err => {
87
+ reject(new Error(`Failed to execute script: ${err.message}`));
88
+ });
89
+ });
90
+ }
91
+ parseScriptOutput(output, scriptPath) {
92
+ try {
93
+ // Expect script to output JSON in ReviewSummary format
94
+ const result = JSON.parse(output);
95
+ // Convert to ReviewIssue format
96
+ const issues = Array.isArray(result.comments)
97
+ ? result.comments.map((c) => ({
98
+ file: c.file || 'unknown',
99
+ line: c.line || 0,
100
+ endLine: c.endLine,
101
+ ruleId: c.ruleId || `script/${this.validateCategory(c.category)}`,
102
+ message: c.message || '',
103
+ severity: this.validateSeverity(c.severity),
104
+ category: this.validateCategory(c.category),
105
+ suggestion: c.suggestion,
106
+ replacement: c.replacement,
107
+ }))
108
+ : [];
109
+ return {
110
+ issues,
111
+ suggestions: Array.isArray(result.suggestions) ? result.suggestions : [],
112
+ };
113
+ }
114
+ catch (error) {
115
+ // If script output is not valid JSON, create an error result
116
+ return {
117
+ issues: [
118
+ {
119
+ file: 'script',
120
+ line: 0,
121
+ endLine: undefined,
122
+ ruleId: 'script/error',
123
+ message: `Script execution error: ${error instanceof Error ? error.message : 'Unknown error'}`,
124
+ severity: 'error',
125
+ category: 'logic',
126
+ suggestion: undefined,
127
+ replacement: undefined,
128
+ },
129
+ ],
130
+ suggestions: [`Script ${scriptPath} failed to produce valid JSON output`],
131
+ };
132
+ }
133
+ }
134
+ validateSeverity(severity) {
135
+ const valid = ['info', 'warning', 'error', 'critical'];
136
+ return valid.includes(severity)
137
+ ? severity
138
+ : 'info';
139
+ }
140
+ validateCategory(category) {
141
+ const valid = ['security', 'performance', 'style', 'logic', 'documentation'];
142
+ return valid.includes(category)
143
+ ? category
144
+ : 'logic';
145
+ }
146
+ getSupportedConfigKeys() {
147
+ return ['type', 'script', 'interpreter', 'timeout', 'workingDirectory', 'env'];
148
+ }
149
+ async isAvailable() {
150
+ // Scripts are always available if the runtime supports child_process
151
+ return true;
152
+ }
153
+ getRequirements() {
154
+ return [
155
+ 'Script file must exist and be executable',
156
+ 'Script interpreter must be available (bash, python, node, etc.)',
157
+ 'Script must output JSON in ReviewSummary format',
158
+ 'Script receives PR info as JSON via stdin',
159
+ ];
160
+ }
161
+ }
162
+ exports.ScriptCheckProvider = ScriptCheckProvider;
163
+ //# sourceMappingURL=script-check-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-check-provider.js","sourceRoot":"","sources":["../../src/providers/script-check-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Check provider that executes external tools (linters, analyzers, etc.)
6
+ */
7
+ export declare class ToolCheckProvider extends CheckProvider {
8
+ getName(): string;
9
+ getDescription(): string;
10
+ validateConfig(config: unknown): Promise<boolean>;
11
+ execute(prInfo: PRInfo, config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>): Promise<ReviewSummary>;
12
+ private executeCommand;
13
+ private parseToolOutput;
14
+ private generateSuggestions;
15
+ getSupportedConfigKeys(): string[];
16
+ isAvailable(): Promise<boolean>;
17
+ getRequirements(): string[];
18
+ }
19
+ //# sourceMappingURL=tool-check-provider.d.ts.map
@@ -0,0 +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;AAGxE;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,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,GAC9C,OAAO,CAAC,aAAa,CAAC;YA6BX,cAAc;IA6B5B,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"}
@@ -0,0 +1,125 @@
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
+ /**
7
+ * Check provider that executes external tools (linters, analyzers, etc.)
8
+ */
9
+ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
10
+ getName() {
11
+ return 'tool';
12
+ }
13
+ getDescription() {
14
+ return 'Execute external code analysis tools (ESLint, Prettier, etc.)';
15
+ }
16
+ async validateConfig(config) {
17
+ if (!config || typeof config !== 'object') {
18
+ return false;
19
+ }
20
+ const cfg = config;
21
+ // Type must be 'tool'
22
+ if (cfg.type !== 'tool') {
23
+ return false;
24
+ }
25
+ // Must have command specified
26
+ if (typeof cfg.command !== 'string' || !cfg.command) {
27
+ return false;
28
+ }
29
+ return true;
30
+ }
31
+ async execute(prInfo, config, _dependencyResults) {
32
+ const command = config.command;
33
+ const args = config.args || [];
34
+ const files = prInfo.files.map(f => f.filename);
35
+ // Execute the tool
36
+ const output = await this.executeCommand(command, args, files);
37
+ // Parse tool output (this would be customized per tool)
38
+ const comments = this.parseToolOutput(output, command);
39
+ const issues = comments.map(comment => ({
40
+ file: comment.file,
41
+ line: comment.line,
42
+ endLine: undefined,
43
+ ruleId: `${command}/${comment.category}`,
44
+ message: comment.message,
45
+ severity: comment.severity,
46
+ category: comment.category,
47
+ suggestion: undefined,
48
+ replacement: undefined,
49
+ }));
50
+ return {
51
+ issues,
52
+ suggestions: this.generateSuggestions(comments, command),
53
+ };
54
+ }
55
+ async executeCommand(command, args, files) {
56
+ return new Promise((resolve, reject) => {
57
+ const child = (0, child_process_1.spawn)(command, [...args, ...files], {
58
+ shell: false,
59
+ stdio: ['pipe', 'pipe', 'pipe'],
60
+ });
61
+ let output = '';
62
+ let error = '';
63
+ child.stdout.on('data', data => {
64
+ output += data.toString();
65
+ });
66
+ child.stderr.on('data', data => {
67
+ error += data.toString();
68
+ });
69
+ child.on('close', _code => {
70
+ // Many linters return non-zero on issues found
71
+ resolve(output || error);
72
+ });
73
+ child.on('error', err => {
74
+ reject(new Error(`Failed to execute ${command}: ${err.message}`));
75
+ });
76
+ });
77
+ }
78
+ parseToolOutput(output, _command) {
79
+ const comments = [];
80
+ // This is a simplified parser - real implementation would handle specific tool formats
81
+ const lines = output.split('\n');
82
+ for (const line of lines) {
83
+ // Example: file.js:10:5: error: Missing semicolon
84
+ const match = line.match(/^(.+?):(\d+):(\d+):\s*(critical|error|warning|info):\s*(.+)$/);
85
+ if (match) {
86
+ comments.push({
87
+ file: match[1],
88
+ line: parseInt(match[2]),
89
+ message: match[5],
90
+ severity: match[4],
91
+ category: 'style',
92
+ });
93
+ }
94
+ }
95
+ return comments;
96
+ }
97
+ generateSuggestions(comments, command) {
98
+ const suggestions = [];
99
+ if (comments.length > 0) {
100
+ suggestions.push(`Fix ${comments.length} issues found by ${command}`);
101
+ const errorCount = comments.filter(c => c.severity === 'error').length;
102
+ if (errorCount > 0) {
103
+ suggestions.push(`Priority: Fix ${errorCount} errors before merging`);
104
+ }
105
+ }
106
+ return suggestions;
107
+ }
108
+ getSupportedConfigKeys() {
109
+ return ['type', 'command', 'args', 'timeout', 'workingDirectory'];
110
+ }
111
+ async isAvailable() {
112
+ // Check if common tools are available
113
+ // In a real implementation, this would check for specific tools based on config
114
+ return true;
115
+ }
116
+ getRequirements() {
117
+ return [
118
+ 'External tool must be installed (e.g., eslint, prettier)',
119
+ 'Tool must be accessible in PATH',
120
+ 'Appropriate configuration files for the tool',
121
+ ];
122
+ }
123
+ }
124
+ exports.ToolCheckProvider = ToolCheckProvider;
125
+ //# sourceMappingURL=tool-check-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-check-provider.js","sourceRoot":"","sources":["../../src/providers/tool-check-provider.ts"],"names":[],"mappings":";;;AAAA,yEAAgF;AAGhF,iDAAsC;AAEtC;;GAEG;AACH,MAAa,iBAAkB,SAAQ,wCAAa;IAClD,OAAO;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc;QACZ,OAAO,+DAA+D,CAAC;IACzE,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,8BAA8B;QAC9B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAc,EACd,MAA2B,EAC3B,kBAA+C;QAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAiB,CAAC;QACzC,MAAM,IAAI,GAAI,MAAM,CAAC,IAAiB,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEhD,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE/D,wDAAwD;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAkB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;YACxC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC;SACzD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,IAAc,EAAE,KAAe;QAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;gBAChD,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,KAAK,GAAG,EAAE,CAAC;YAEf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBAC7B,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACxB,+CAA+C;gBAC/C,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,MAAc,EAAE,QAAgB;QACtD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,uFAAuF;QACvF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,kDAAkD;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACzF,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAA8C;oBAC/D,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,mBAAmB,CAAC,QAAyB,EAAE,OAAe;QACpE,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAEtE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YACvE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,iBAAiB,UAAU,wBAAwB,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,sBAAsB;QACpB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,sCAAsC;QACtC,gFAAgF;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO;YACL,0DAA0D;YAC1D,iCAAiC;YACjC,8CAA8C;SAC/C,CAAC;IACJ,CAAC;CACF;AAjJD,8CAiJC"}
@@ -0,0 +1,21 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Check provider that sends PR info to a webhook for external analysis
6
+ */
7
+ export declare class WebhookCheckProvider extends CheckProvider {
8
+ getName(): string;
9
+ getDescription(): string;
10
+ validateConfig(config: unknown): Promise<boolean>;
11
+ execute(prInfo: PRInfo, config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>): Promise<ReviewSummary>;
12
+ private sendWebhookRequest;
13
+ private parseWebhookResponse;
14
+ private createErrorResult;
15
+ private validateSeverity;
16
+ private validateCategory;
17
+ getSupportedConfigKeys(): string[];
18
+ isAvailable(): Promise<boolean>;
19
+ getRequirements(): string[];
20
+ }
21
+ //# sourceMappingURL=webhook-check-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-check-provider.d.ts","sourceRoot":"","sources":["../../src/providers/webhook-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;AAEzD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAC9C,OAAO,CAAC,aAAa,CAAC;YAqCX,kBAAkB;IA4ChC,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IASxB,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}