@probelabs/visor 0.1.19 → 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.
Files changed (107) hide show
  1. package/dist/action-cli-bridge.d.ts +0 -1
  2. package/dist/action-cli-bridge.d.ts.map +1 -1
  3. package/dist/ai-review-service.d.ts +0 -1
  4. package/dist/ai-review-service.d.ts.map +1 -1
  5. package/dist/check-execution-engine.d.ts +0 -1
  6. package/dist/check-execution-engine.d.ts.map +1 -1
  7. package/dist/cli-main.d.ts +0 -2
  8. package/dist/cli-main.d.ts.map +1 -1
  9. package/dist/cli.d.ts +0 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/commands.d.ts +0 -1
  12. package/dist/commands.d.ts.map +1 -1
  13. package/dist/config.d.ts +0 -1
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/dependency-resolver.d.ts +0 -1
  16. package/dist/dependency-resolver.d.ts.map +1 -1
  17. package/dist/event-mapper.d.ts +0 -1
  18. package/dist/event-mapper.d.ts.map +1 -1
  19. package/dist/failure-condition-evaluator.d.ts +0 -1
  20. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  21. package/dist/git-repository-analyzer.d.ts +0 -1
  22. package/dist/git-repository-analyzer.d.ts.map +1 -1
  23. package/dist/github-check-service.d.ts +0 -1
  24. package/dist/github-check-service.d.ts.map +1 -1
  25. package/dist/github-comments.d.ts +0 -1
  26. package/dist/github-comments.d.ts.map +1 -1
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +127704 -805
  30. package/dist/output-formatters.d.ts +0 -1
  31. package/dist/output-formatters.d.ts.map +1 -1
  32. package/dist/pr-analyzer.d.ts +0 -1
  33. package/dist/pr-analyzer.d.ts.map +1 -1
  34. package/dist/pr-detector.d.ts +0 -1
  35. package/dist/pr-detector.d.ts.map +1 -1
  36. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  37. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  38. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  39. package/dist/providers/index.d.ts.map +1 -1
  40. package/dist/providers/noop-check-provider.d.ts.map +1 -1
  41. package/dist/providers/tool-check-provider.d.ts.map +1 -1
  42. package/dist/providers/webhook-check-provider.d.ts.map +1 -1
  43. package/dist/reviewer.d.ts +0 -1
  44. package/dist/reviewer.d.ts.map +1 -1
  45. package/dist/session-registry.d.ts +0 -1
  46. package/dist/session-registry.d.ts.map +1 -1
  47. package/dist/types/cli.d.ts.map +1 -1
  48. package/dist/types/config.d.ts.map +1 -1
  49. package/dist/utils/env-resolver.d.ts.map +1 -1
  50. package/package.json +3 -3
  51. package/dist/action-cli-bridge.js +0 -380
  52. package/dist/action-cli-bridge.js.map +0 -1
  53. package/dist/ai-review-service.js +0 -854
  54. package/dist/ai-review-service.js.map +0 -1
  55. package/dist/check-execution-engine.js +0 -1720
  56. package/dist/check-execution-engine.js.map +0 -1
  57. package/dist/cli-main.js +0 -249
  58. package/dist/cli-main.js.map +0 -1
  59. package/dist/cli.js +0 -241
  60. package/dist/cli.js.map +0 -1
  61. package/dist/commands.js +0 -53
  62. package/dist/commands.js.map +0 -1
  63. package/dist/config.js +0 -437
  64. package/dist/config.js.map +0 -1
  65. package/dist/dependency-resolver.js +0 -163
  66. package/dist/dependency-resolver.js.map +0 -1
  67. package/dist/event-mapper.js +0 -316
  68. package/dist/event-mapper.js.map +0 -1
  69. package/dist/failure-condition-evaluator.js +0 -481
  70. package/dist/failure-condition-evaluator.js.map +0 -1
  71. package/dist/git-repository-analyzer.js +0 -285
  72. package/dist/git-repository-analyzer.js.map +0 -1
  73. package/dist/github-check-service.js +0 -369
  74. package/dist/github-check-service.js.map +0 -1
  75. package/dist/github-comments.js +0 -289
  76. package/dist/github-comments.js.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/output-formatters.js +0 -624
  79. package/dist/output-formatters.js.map +0 -1
  80. package/dist/pr-analyzer.js +0 -195
  81. package/dist/pr-analyzer.js.map +0 -1
  82. package/dist/pr-detector.js +0 -357
  83. package/dist/pr-detector.js.map +0 -1
  84. package/dist/providers/ai-check-provider.js +0 -437
  85. package/dist/providers/ai-check-provider.js.map +0 -1
  86. package/dist/providers/check-provider-registry.js +0 -138
  87. package/dist/providers/check-provider-registry.js.map +0 -1
  88. package/dist/providers/check-provider.interface.js +0 -11
  89. package/dist/providers/check-provider.interface.js.map +0 -1
  90. package/dist/providers/index.js +0 -19
  91. package/dist/providers/index.js.map +0 -1
  92. package/dist/providers/noop-check-provider.js +0 -55
  93. package/dist/providers/noop-check-provider.js.map +0 -1
  94. package/dist/providers/tool-check-provider.js +0 -174
  95. package/dist/providers/tool-check-provider.js.map +0 -1
  96. package/dist/providers/webhook-check-provider.js +0 -173
  97. package/dist/providers/webhook-check-provider.js.map +0 -1
  98. package/dist/reviewer.js +0 -260
  99. package/dist/reviewer.js.map +0 -1
  100. package/dist/session-registry.js +0 -67
  101. package/dist/session-registry.js.map +0 -1
  102. package/dist/types/cli.js +0 -3
  103. package/dist/types/cli.js.map +0 -1
  104. package/dist/types/config.js +0 -6
  105. package/dist/types/config.js.map +0 -1
  106. package/dist/utils/env-resolver.js +0 -130
  107. package/dist/utils/env-resolver.js.map +0 -1
@@ -1,163 +0,0 @@
1
- "use strict";
2
- /**
3
- * Dependency resolution and execution ordering for checks
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DependencyResolver = void 0;
7
- class DependencyResolver {
8
- /**
9
- * Build dependency graph from check dependencies
10
- */
11
- static buildDependencyGraph(checkDependencies) {
12
- const nodes = new Map();
13
- // Initialize all nodes
14
- for (const checkId of Object.keys(checkDependencies)) {
15
- nodes.set(checkId, {
16
- id: checkId,
17
- dependencies: checkDependencies[checkId] || [],
18
- dependents: [],
19
- depth: 0,
20
- });
21
- }
22
- // Build bidirectional relationships
23
- for (const [checkId, dependencies] of Object.entries(checkDependencies)) {
24
- for (const depId of dependencies || []) {
25
- if (!nodes.has(depId)) {
26
- throw new Error(`Check "${checkId}" depends on "${depId}" but "${depId}" is not defined`);
27
- }
28
- const depNode = nodes.get(depId);
29
- depNode.dependents.push(checkId);
30
- }
31
- }
32
- // Detect cycles using DFS
33
- const cycleDetection = this.detectCycles(nodes);
34
- if (cycleDetection.hasCycles) {
35
- return {
36
- nodes,
37
- executionOrder: [],
38
- hasCycles: true,
39
- cycleNodes: cycleDetection.cycleNodes,
40
- };
41
- }
42
- // Calculate execution order using topological sort
43
- const executionOrder = this.topologicalSort(nodes);
44
- return {
45
- nodes,
46
- executionOrder,
47
- hasCycles: false,
48
- };
49
- }
50
- /**
51
- * Detect cycles in the dependency graph using DFS
52
- */
53
- static detectCycles(nodes) {
54
- const visited = new Set();
55
- const recursionStack = new Set();
56
- const cycleNodes = [];
57
- const dfs = (nodeId) => {
58
- if (recursionStack.has(nodeId)) {
59
- cycleNodes.push(nodeId);
60
- return true;
61
- }
62
- if (visited.has(nodeId)) {
63
- return false;
64
- }
65
- visited.add(nodeId);
66
- recursionStack.add(nodeId);
67
- const node = nodes.get(nodeId);
68
- if (node) {
69
- for (const depId of node.dependencies) {
70
- if (dfs(depId)) {
71
- cycleNodes.push(nodeId);
72
- return true;
73
- }
74
- }
75
- }
76
- recursionStack.delete(nodeId);
77
- return false;
78
- };
79
- for (const nodeId of nodes.keys()) {
80
- if (!visited.has(nodeId)) {
81
- if (dfs(nodeId)) {
82
- return { hasCycles: true, cycleNodes: [...new Set(cycleNodes)] };
83
- }
84
- }
85
- }
86
- return { hasCycles: false };
87
- }
88
- /**
89
- * Perform topological sort to determine execution order
90
- * Groups checks that can run in parallel at each level
91
- */
92
- static topologicalSort(nodes) {
93
- const remainingNodes = new Map(nodes);
94
- const executionGroups = [];
95
- let level = 0;
96
- while (remainingNodes.size > 0) {
97
- // Find nodes with no remaining dependencies
98
- const readyNodes = [];
99
- for (const [nodeId, node] of remainingNodes.entries()) {
100
- const unmetDependencies = node.dependencies.filter(depId => remainingNodes.has(depId));
101
- if (unmetDependencies.length === 0) {
102
- readyNodes.push(nodeId);
103
- }
104
- }
105
- if (readyNodes.length === 0) {
106
- // This shouldn't happen if cycle detection worked correctly
107
- throw new Error('Unable to resolve dependencies - possible circular dependency detected');
108
- }
109
- // Add this group to execution order
110
- executionGroups.push({
111
- parallel: readyNodes,
112
- level,
113
- });
114
- // Remove processed nodes
115
- for (const nodeId of readyNodes) {
116
- remainingNodes.delete(nodeId);
117
- }
118
- level++;
119
- }
120
- return executionGroups;
121
- }
122
- /**
123
- * Validate that all dependencies exist
124
- */
125
- static validateDependencies(checkIds, dependencies) {
126
- const errors = [];
127
- const checkIdSet = new Set(checkIds);
128
- for (const [checkId, deps] of Object.entries(dependencies)) {
129
- if (!checkIdSet.has(checkId)) {
130
- errors.push(`Check "${checkId}" is not in the list of available checks`);
131
- continue;
132
- }
133
- for (const depId of deps || []) {
134
- if (!checkIdSet.has(depId)) {
135
- errors.push(`Check "${checkId}" depends on "${depId}" which is not available`);
136
- }
137
- }
138
- }
139
- return {
140
- valid: errors.length === 0,
141
- errors,
142
- };
143
- }
144
- /**
145
- * Get execution statistics for debugging
146
- */
147
- static getExecutionStats(graph) {
148
- const totalChecks = graph.nodes.size;
149
- const parallelLevels = graph.executionOrder.length;
150
- const maxParallelism = Math.max(...graph.executionOrder.map(group => group.parallel.length));
151
- const averageParallelism = totalChecks / parallelLevels;
152
- const checksWithDependencies = Array.from(graph.nodes.values()).filter(node => node.dependencies.length > 0).length;
153
- return {
154
- totalChecks,
155
- parallelLevels,
156
- maxParallelism,
157
- averageParallelism,
158
- checksWithDependencies,
159
- };
160
- }
161
- }
162
- exports.DependencyResolver = DependencyResolver;
163
- //# sourceMappingURL=dependency-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../src/dependency-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,316 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventMapper = void 0;
4
- exports.createEventMapper = createEventMapper;
5
- exports.extractFileContext = extractFileContext;
6
- /**
7
- * Maps GitHub events to Visor check executions based on configuration
8
- */
9
- class EventMapper {
10
- config;
11
- constructor(config) {
12
- this.config = config;
13
- }
14
- /**
15
- * Map GitHub event to execution plan
16
- */
17
- mapEventToExecution(eventContext, fileContext) {
18
- // Validate input payload first
19
- if (!eventContext || typeof eventContext !== 'object') {
20
- throw new Error('Invalid or corrupted event payload: missing event context');
21
- }
22
- if (!eventContext.event_name || typeof eventContext.event_name !== 'string') {
23
- throw new Error('Invalid or corrupted event payload: missing or invalid event_name');
24
- }
25
- const eventTrigger = this.mapGitHubEventToTrigger(eventContext);
26
- if (!eventTrigger) {
27
- return {
28
- shouldExecute: false,
29
- checksToRun: [],
30
- executionContext: {
31
- eventType: 'pr_opened',
32
- repository: this.getRepositoryName(eventContext),
33
- triggeredBy: 'unknown_event',
34
- },
35
- };
36
- }
37
- const checksToRun = this.getChecksForEvent(eventTrigger, fileContext);
38
- const repository = this.getRepositoryName(eventContext);
39
- return {
40
- shouldExecute: checksToRun.length > 0,
41
- checksToRun,
42
- executionContext: {
43
- eventType: eventTrigger,
44
- prNumber: this.extractPRNumber(eventContext),
45
- repository,
46
- triggeredBy: this.getTriggeredBy(eventContext),
47
- },
48
- };
49
- }
50
- /**
51
- * Map GitHub event to Visor event trigger
52
- */
53
- mapGitHubEventToTrigger(eventContext) {
54
- const { event_name, action } = eventContext;
55
- switch (event_name) {
56
- case 'pull_request':
57
- if (action === 'opened')
58
- return 'pr_opened';
59
- if (action === 'synchronize' || action === 'edited')
60
- return 'pr_updated';
61
- if (action === 'closed')
62
- return 'pr_closed';
63
- break;
64
- case 'issues':
65
- if (action === 'opened')
66
- return 'issue_opened';
67
- break;
68
- case 'issue_comment':
69
- // Check if this is a comment on a PR (has pull_request property)
70
- if (eventContext.issue?.pull_request) {
71
- return 'pr_updated'; // Treat PR comments as PR updates
72
- }
73
- return 'issue_comment'; // Regular issue comments remain issue_comment
74
- break;
75
- case 'pull_request_review':
76
- return 'pr_updated';
77
- case 'push':
78
- // Push events are not directly supported as PR events
79
- // They would need additional context to determine if they're part of a PR
80
- return null;
81
- }
82
- return null;
83
- }
84
- /**
85
- * Get checks that should run for a specific event
86
- */
87
- getChecksForEvent(eventTrigger, fileContext) {
88
- const checksToRun = [];
89
- for (const [checkName, checkConfig] of Object.entries(this.config.checks || {})) {
90
- if (this.shouldRunCheck(checkConfig, eventTrigger, fileContext)) {
91
- checksToRun.push(checkName);
92
- }
93
- }
94
- return checksToRun;
95
- }
96
- /**
97
- * Determine if a specific check should run
98
- */
99
- shouldRunCheck(checkConfig, eventTrigger, fileContext) {
100
- // Check if event trigger matches
101
- if (!checkConfig.on.includes(eventTrigger)) {
102
- return false;
103
- }
104
- // Check file-based triggers if file context is available
105
- if (fileContext && checkConfig.triggers) {
106
- return this.matchesFilePatterns(checkConfig.triggers, fileContext);
107
- }
108
- // If no file triggers specified, run on matching events
109
- return true;
110
- }
111
- /**
112
- * Check if file changes match trigger patterns
113
- */
114
- matchesFilePatterns(patterns, fileContext) {
115
- const allFiles = [
116
- ...(fileContext.changedFiles || []),
117
- ...(fileContext.addedFiles || []),
118
- ...(fileContext.modifiedFiles || []),
119
- ];
120
- return patterns.some(pattern => {
121
- const regex = this.convertGlobToRegex(pattern);
122
- return allFiles.some(file => regex.test(file));
123
- });
124
- }
125
- /**
126
- * Convert glob pattern to RegExp
127
- */
128
- convertGlobToRegex(glob) {
129
- let regexPattern = glob.replace(/[.+^${}()|[\]\\]/g, '\\$&'); // Escape special regex chars
130
- // Handle different types of glob patterns
131
- regexPattern = regexPattern
132
- .replace(/\*\*\/\*/g, '___GLOBSTAR_ALL___') // Temporarily replace **/*
133
- .replace(/\*\*\//g, '___GLOBSTAR_DIR___') // Temporarily replace **/
134
- .replace(/\/\*\*/g, '___SLASH_GLOBSTAR___') // Temporarily replace /**
135
- .replace(/\*\*/g, '___GLOBSTAR___') // Temporarily replace **
136
- .replace(/\*/g, '[^/]*') // Convert * to [^/]* (matches within directory)
137
- .replace(/\?/g, '.') // Convert ? to .
138
- .replace(/___GLOBSTAR_ALL___/g, '.*') // Convert **/* to .*
139
- .replace(/___GLOBSTAR_DIR___/g, '(?:.*/)?') // Convert **/ to (?:.*/)?
140
- .replace(/___SLASH_GLOBSTAR___/g, '(?:/.*)?') // Convert /** to (?:/.*)?
141
- .replace(/___GLOBSTAR___/g, '.*'); // Convert ** to .*
142
- // Handle brace expansion {a,b} -> (a|b)
143
- regexPattern = regexPattern.replace(/\\\{([^}]+)\\\}/g, (match, content) => {
144
- // Convert comma-separated alternatives to regex alternation
145
- const alternatives = content.split(',').map((alt) => alt.trim());
146
- return `(${alternatives.join('|')})`;
147
- });
148
- return new RegExp(`^${regexPattern}$`);
149
- }
150
- /**
151
- * Extract PR number from event context
152
- */
153
- extractPRNumber(eventContext) {
154
- if (eventContext.pull_request) {
155
- return eventContext.pull_request.number;
156
- }
157
- if (eventContext.issue?.pull_request) {
158
- return eventContext.issue.number;
159
- }
160
- return undefined;
161
- }
162
- /**
163
- * Get repository name from event context
164
- */
165
- getRepositoryName(eventContext) {
166
- if (eventContext.repository &&
167
- typeof eventContext.repository === 'object' &&
168
- eventContext.repository.owner &&
169
- typeof eventContext.repository.owner === 'object' &&
170
- eventContext.repository.owner.login &&
171
- eventContext.repository.name) {
172
- return `${eventContext.repository.owner.login}/${eventContext.repository.name}`;
173
- }
174
- return 'unknown/repository';
175
- }
176
- /**
177
- * Get triggered by information
178
- */
179
- getTriggeredBy(eventContext) {
180
- const { event_name, action } = eventContext;
181
- if (eventContext.comment?.user?.login) {
182
- return `comment_by_${eventContext.comment.user.login}`;
183
- }
184
- return action ? `${event_name}_${action}` : event_name;
185
- }
186
- /**
187
- * Get selective execution plan for specific checks
188
- */
189
- getSelectiveExecution(eventContext, requestedChecks, fileContext) {
190
- const eventTrigger = this.mapGitHubEventToTrigger(eventContext);
191
- if (!eventTrigger) {
192
- return {
193
- shouldExecute: false,
194
- checksToRun: [],
195
- executionContext: {
196
- eventType: 'pr_opened',
197
- repository: this.getRepositoryName(eventContext),
198
- triggeredBy: 'selective_execution',
199
- },
200
- };
201
- }
202
- // Filter requested checks by what's available in config and what should run
203
- const validChecks = requestedChecks.filter(checkName => {
204
- const checkConfig = this.config.checks?.[checkName];
205
- return checkConfig && this.shouldRunCheck(checkConfig, eventTrigger, fileContext);
206
- });
207
- return {
208
- shouldExecute: validChecks.length > 0,
209
- checksToRun: validChecks,
210
- executionContext: {
211
- eventType: eventTrigger,
212
- prNumber: this.extractPRNumber(eventContext),
213
- repository: this.getRepositoryName(eventContext),
214
- triggeredBy: 'selective_execution',
215
- },
216
- };
217
- }
218
- /**
219
- * Check if event should trigger any executions
220
- */
221
- shouldProcessEvent(eventContext) {
222
- const eventTrigger = this.mapGitHubEventToTrigger(eventContext);
223
- if (!eventTrigger) {
224
- return false;
225
- }
226
- // Check if any configured checks match this event
227
- return Object.values(this.config.checks || {}).some(checkConfig => checkConfig.on.includes(eventTrigger));
228
- }
229
- /**
230
- * Get available checks for display purposes
231
- */
232
- getAvailableChecks() {
233
- return Object.entries(this.config.checks || {}).map(([name, config]) => ({
234
- name,
235
- description: config.prompt?.split('\n')[0] || config.exec?.split(' ')[0] || 'No description available',
236
- triggers: config.on,
237
- }));
238
- }
239
- /**
240
- * Validate event context
241
- */
242
- validateEventContext(eventContext) {
243
- const errors = [];
244
- if (!eventContext.event_name) {
245
- errors.push('Missing event_name in event context');
246
- }
247
- if (!eventContext.repository) {
248
- errors.push('Missing repository information in event context');
249
- }
250
- // For PR events, ensure PR information is present
251
- if (eventContext.event_name === 'pull_request' && !eventContext.pull_request) {
252
- errors.push('Missing pull_request information for pull_request event');
253
- }
254
- // For comment events, ensure comment and issue information is present
255
- if (eventContext.event_name === 'issue_comment') {
256
- if (!eventContext.comment) {
257
- errors.push('Missing comment information for issue_comment event');
258
- }
259
- if (!eventContext.issue) {
260
- errors.push('Missing issue information for issue_comment event');
261
- }
262
- }
263
- return {
264
- isValid: errors.length === 0,
265
- errors,
266
- };
267
- }
268
- }
269
- exports.EventMapper = EventMapper;
270
- /**
271
- * Utility function to create EventMapper from config
272
- */
273
- function createEventMapper(config) {
274
- return new EventMapper(config);
275
- }
276
- /**
277
- * Utility function to extract file context from GitHub PR
278
- */
279
- async function extractFileContext(octokit, owner, repo, prNumber) {
280
- try {
281
- const { data: files } = await octokit.rest.pulls.listFiles({
282
- owner,
283
- repo,
284
- pull_number: prNumber,
285
- });
286
- const changedFiles = [];
287
- const addedFiles = [];
288
- const modifiedFiles = [];
289
- const deletedFiles = [];
290
- for (const file of files) {
291
- changedFiles.push(file.filename);
292
- switch (file.status) {
293
- case 'added':
294
- addedFiles.push(file.filename);
295
- break;
296
- case 'modified':
297
- modifiedFiles.push(file.filename);
298
- break;
299
- case 'removed':
300
- deletedFiles.push(file.filename);
301
- break;
302
- }
303
- }
304
- return {
305
- changedFiles,
306
- addedFiles,
307
- modifiedFiles,
308
- deletedFiles,
309
- };
310
- }
311
- catch (error) {
312
- console.error('Failed to extract file context:', error);
313
- return {};
314
- }
315
- }
316
- //# sourceMappingURL=event-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-mapper.js","sourceRoot":"","sources":["../src/event-mapper.ts"],"names":[],"mappings":"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"}