@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,416 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AICheckProvider = void 0;
7
+ const check_provider_interface_1 = require("./check-provider.interface");
8
+ const ai_review_service_1 = require("../ai-review-service");
9
+ const env_resolver_1 = require("../utils/env-resolver");
10
+ const liquidjs_1 = require("liquidjs");
11
+ const promises_1 = __importDefault(require("fs/promises"));
12
+ const path_1 = __importDefault(require("path"));
13
+ /**
14
+ * AI-powered check provider using probe agent
15
+ */
16
+ class AICheckProvider extends check_provider_interface_1.CheckProvider {
17
+ aiReviewService;
18
+ liquidEngine;
19
+ constructor() {
20
+ super();
21
+ this.aiReviewService = new ai_review_service_1.AIReviewService();
22
+ this.liquidEngine = new liquidjs_1.Liquid();
23
+ }
24
+ getName() {
25
+ return 'ai';
26
+ }
27
+ getDescription() {
28
+ return 'AI-powered code review using Google Gemini, Anthropic Claude, or OpenAI GPT models';
29
+ }
30
+ async validateConfig(config) {
31
+ if (!config || typeof config !== 'object') {
32
+ return false;
33
+ }
34
+ const cfg = config;
35
+ // Type must be 'ai'
36
+ if (cfg.type !== 'ai') {
37
+ return false;
38
+ }
39
+ // Check for prompt or focus
40
+ const prompt = cfg.prompt || cfg.focus;
41
+ if (typeof prompt !== 'string') {
42
+ return false;
43
+ }
44
+ // Validate focus if specified
45
+ if (cfg.focus && !['security', 'performance', 'style', 'all'].includes(cfg.focus)) {
46
+ return false;
47
+ }
48
+ // Validate AI provider config if present
49
+ if (cfg.ai) {
50
+ if (cfg.ai.provider &&
51
+ !['google', 'anthropic', 'openai', 'mock'].includes(cfg.ai.provider)) {
52
+ return false;
53
+ }
54
+ }
55
+ return true;
56
+ }
57
+ /**
58
+ * Group files by their file extension for template context
59
+ */
60
+ groupFilesByExtension(files) {
61
+ const grouped = {};
62
+ files.forEach(file => {
63
+ const parts = file.filename.split('.');
64
+ const ext = parts.length > 1 ? parts.pop()?.toLowerCase() : 'noext';
65
+ if (!grouped[ext]) {
66
+ grouped[ext] = [];
67
+ }
68
+ grouped[ext].push(file);
69
+ });
70
+ return grouped;
71
+ }
72
+ /**
73
+ * Process prompt configuration to resolve final prompt string
74
+ */
75
+ async processPrompt(promptConfig, prInfo, eventContext, dependencyResults) {
76
+ let promptContent;
77
+ // Auto-detect if it's a file path or inline content
78
+ if (await this.isFilePath(promptConfig)) {
79
+ promptContent = await this.loadPromptFromFile(promptConfig);
80
+ }
81
+ else {
82
+ promptContent = promptConfig;
83
+ }
84
+ // Process Liquid templates in the prompt
85
+ return await this.renderPromptTemplate(promptContent, prInfo, eventContext, dependencyResults);
86
+ }
87
+ /**
88
+ * Detect if a string is likely a file path and if the file exists
89
+ */
90
+ async isFilePath(str) {
91
+ // Quick checks to exclude obvious non-file-path content
92
+ if (!str || str.trim() !== str || str.length > 512) {
93
+ return false;
94
+ }
95
+ // Exclude strings that are clearly content (contain common content indicators)
96
+ // But be more careful with paths that might contain common words as directory names
97
+ if (/\s{2,}/.test(str) || // Multiple consecutive spaces
98
+ /\n/.test(str) || // Contains newlines
99
+ /^(please|analyze|review|check|find|identify|look|search)/i.test(str.trim()) || // Starts with command words
100
+ str.split(' ').length > 8 // Too many words for a typical file path
101
+ ) {
102
+ return false;
103
+ }
104
+ // For strings with path separators, be more lenient about common words
105
+ // as they might be legitimate directory names
106
+ if (!/[\/\\]/.test(str)) {
107
+ // Only apply strict English word filter to non-path strings
108
+ if (/\b(the|and|or|but|for|with|by|from|in|on|at|as)\b/i.test(str)) {
109
+ return false;
110
+ }
111
+ }
112
+ // Positive indicators for file paths
113
+ const hasFileExtension = /\.[a-zA-Z0-9]{1,10}$/i.test(str);
114
+ const hasPathSeparators = /[\/\\]/.test(str);
115
+ const isRelativePath = /^\.{1,2}\//.test(str);
116
+ const isAbsolutePath = path_1.default.isAbsolute(str);
117
+ const hasTypicalFileChars = /^[a-zA-Z0-9._\-\/\\:~]+$/.test(str);
118
+ // Must have at least one strong indicator
119
+ if (!(hasFileExtension || isRelativePath || isAbsolutePath || hasPathSeparators)) {
120
+ return false;
121
+ }
122
+ // Must contain only typical file path characters
123
+ if (!hasTypicalFileChars) {
124
+ return false;
125
+ }
126
+ // Additional validation for suspected file paths
127
+ try {
128
+ // Try to resolve and check if file exists
129
+ let resolvedPath;
130
+ if (path_1.default.isAbsolute(str)) {
131
+ resolvedPath = path_1.default.normalize(str);
132
+ }
133
+ else {
134
+ // Resolve relative to current working directory
135
+ resolvedPath = path_1.default.resolve(process.cwd(), str);
136
+ }
137
+ // Check if file exists
138
+ const fs = require('fs').promises;
139
+ try {
140
+ const stat = await fs.stat(resolvedPath);
141
+ return stat.isFile();
142
+ }
143
+ catch {
144
+ // File doesn't exist, but might still be a valid file path format
145
+ // Return true if it has strong file path indicators
146
+ return hasFileExtension && (isRelativePath || isAbsolutePath || hasPathSeparators);
147
+ }
148
+ }
149
+ catch {
150
+ return false;
151
+ }
152
+ }
153
+ /**
154
+ * Load prompt content from file with security validation
155
+ */
156
+ async loadPromptFromFile(promptPath) {
157
+ let resolvedPath;
158
+ if (path_1.default.isAbsolute(promptPath)) {
159
+ // Absolute path - use as-is
160
+ resolvedPath = promptPath;
161
+ }
162
+ else {
163
+ // Relative path - resolve relative to current working directory
164
+ resolvedPath = path_1.default.resolve(process.cwd(), promptPath);
165
+ }
166
+ // Security: For relative paths, ensure they don't escape the current directory
167
+ if (!path_1.default.isAbsolute(promptPath)) {
168
+ const normalizedPath = path_1.default.normalize(resolvedPath);
169
+ const currentDir = path_1.default.resolve(process.cwd());
170
+ if (!normalizedPath.startsWith(currentDir)) {
171
+ throw new Error('Invalid prompt file path: path traversal detected');
172
+ }
173
+ }
174
+ // Security: Check for obvious path traversal patterns
175
+ if (promptPath.includes('../..')) {
176
+ throw new Error('Invalid prompt file path: path traversal detected');
177
+ }
178
+ try {
179
+ const promptContent = await promises_1.default.readFile(resolvedPath, 'utf-8');
180
+ return promptContent;
181
+ }
182
+ catch (error) {
183
+ throw new Error(`Failed to load prompt from ${resolvedPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
184
+ }
185
+ }
186
+ /**
187
+ * Render Liquid template in prompt with comprehensive event context
188
+ */
189
+ async renderPromptTemplate(promptContent, prInfo, eventContext, dependencyResults) {
190
+ // Create comprehensive template context with PR and event information
191
+ const templateContext = {
192
+ // PR Information
193
+ pr: {
194
+ number: prInfo.number,
195
+ title: prInfo.title,
196
+ body: prInfo.body,
197
+ author: prInfo.author,
198
+ baseBranch: prInfo.base,
199
+ headBranch: prInfo.head,
200
+ isIncremental: prInfo.isIncremental,
201
+ filesChanged: prInfo.files?.map(f => f.filename) || [],
202
+ totalAdditions: prInfo.files?.reduce((sum, f) => sum + f.additions, 0) || 0,
203
+ totalDeletions: prInfo.files?.reduce((sum, f) => sum + f.deletions, 0) || 0,
204
+ totalChanges: prInfo.files?.reduce((sum, f) => sum + f.changes, 0) || 0,
205
+ base: prInfo.base,
206
+ head: prInfo.head,
207
+ },
208
+ // File Details
209
+ files: prInfo.files || [],
210
+ description: prInfo.body || '',
211
+ // GitHub Event Context
212
+ event: eventContext
213
+ ? {
214
+ name: eventContext.event_name || 'unknown',
215
+ action: eventContext.action,
216
+ // Repository Info
217
+ repository: eventContext.repository
218
+ ? {
219
+ owner: eventContext.repository.owner?.login,
220
+ name: eventContext.repository.name,
221
+ fullName: eventContext.repository
222
+ ? `${eventContext.repository.owner?.login}/${eventContext.repository.name}`
223
+ : undefined,
224
+ }
225
+ : undefined,
226
+ // Comment Data (for comment events)
227
+ comment: eventContext.comment
228
+ ? {
229
+ body: eventContext.comment.body,
230
+ author: eventContext.comment.user?.login,
231
+ }
232
+ : undefined,
233
+ // Issue Data (for issue events)
234
+ issue: eventContext.issue
235
+ ? {
236
+ number: eventContext.issue.number,
237
+ isPullRequest: !!eventContext.issue.pull_request,
238
+ }
239
+ : undefined,
240
+ // Pull Request Event Data
241
+ pullRequest: eventContext.pull_request
242
+ ? {
243
+ number: eventContext.pull_request.number,
244
+ state: eventContext.pull_request.state,
245
+ draft: eventContext.pull_request.draft,
246
+ headSha: eventContext.pull_request.head?.sha,
247
+ headRef: eventContext.pull_request.head?.ref,
248
+ baseSha: eventContext.pull_request.base?.sha,
249
+ baseRef: eventContext.pull_request.base?.ref,
250
+ }
251
+ : undefined,
252
+ // Raw event payload for advanced use cases
253
+ payload: eventContext,
254
+ }
255
+ : undefined,
256
+ // Utility data for templates
257
+ utils: {
258
+ // Date/time helpers
259
+ now: new Date().toISOString(),
260
+ today: new Date().toISOString().split('T')[0],
261
+ // Dynamic file grouping by extension
262
+ filesByExtension: this.groupFilesByExtension(prInfo.files || []),
263
+ // File status categorizations
264
+ addedFiles: (prInfo.files || []).filter(f => f.status === 'added'),
265
+ modifiedFiles: (prInfo.files || []).filter(f => f.status === 'modified'),
266
+ removedFiles: (prInfo.files || []).filter(f => f.status === 'removed'),
267
+ renamedFiles: (prInfo.files || []).filter(f => f.status === 'renamed'),
268
+ // Change analysis
269
+ hasLargeChanges: (prInfo.files || []).some(f => f.changes > 50),
270
+ totalFiles: (prInfo.files || []).length,
271
+ },
272
+ // Previous check outputs (dependency results)
273
+ outputs: dependencyResults
274
+ ? Object.fromEntries(Array.from(dependencyResults.entries()).map(([checkName, result]) => [
275
+ checkName,
276
+ {
277
+ // Summary data
278
+ totalIssues: result.issues?.length || 0,
279
+ criticalIssues: result.issues?.filter(i => i.severity === 'critical').length || 0,
280
+ errorIssues: result.issues?.filter(i => i.severity === 'error').length || 0,
281
+ warningIssues: result.issues?.filter(i => i.severity === 'warning').length || 0,
282
+ infoIssues: result.issues?.filter(i => i.severity === 'info').length || 0,
283
+ // Issues grouped by category
284
+ securityIssues: result.issues?.filter(i => i.category === 'security') || [],
285
+ performanceIssues: result.issues?.filter(i => i.category === 'performance') || [],
286
+ styleIssues: result.issues?.filter(i => i.category === 'style') || [],
287
+ logicIssues: result.issues?.filter(i => i.category === 'logic') || [],
288
+ documentationIssues: result.issues?.filter(i => i.category === 'documentation') || [],
289
+ // All issues and suggestions
290
+ issues: result.issues || [],
291
+ suggestions: result.suggestions || [],
292
+ // Debug information if available
293
+ debug: result.debug,
294
+ // Raw data for advanced use
295
+ raw: result,
296
+ },
297
+ ]))
298
+ : {},
299
+ };
300
+ try {
301
+ return await this.liquidEngine.parseAndRender(promptContent, templateContext);
302
+ }
303
+ catch (error) {
304
+ throw new Error(`Failed to render prompt template: ${error instanceof Error ? error.message : 'Unknown error'}`);
305
+ }
306
+ }
307
+ async execute(prInfo, config, _dependencyResults) {
308
+ // Apply environment configuration if present
309
+ if (config.env) {
310
+ const result = env_resolver_1.EnvironmentResolver.withTemporaryEnv(config.env, () => {
311
+ // This will be executed with the temporary environment
312
+ return this.executeWithConfig(prInfo, config, _dependencyResults);
313
+ });
314
+ if (result instanceof Promise) {
315
+ return result;
316
+ }
317
+ return result;
318
+ }
319
+ return this.executeWithConfig(prInfo, config, _dependencyResults);
320
+ }
321
+ async executeWithConfig(prInfo, config, _dependencyResults) {
322
+ // Extract AI configuration - only set properties that are explicitly provided
323
+ const aiConfig = {};
324
+ // Check-level AI configuration (ai object)
325
+ if (config.ai) {
326
+ // Only set properties that are actually defined to avoid overriding env vars
327
+ if (config.ai.apiKey !== undefined) {
328
+ aiConfig.apiKey = config.ai.apiKey;
329
+ }
330
+ if (config.ai.model !== undefined) {
331
+ aiConfig.model = config.ai.model;
332
+ }
333
+ if (config.ai.timeout !== undefined) {
334
+ aiConfig.timeout = config.ai.timeout;
335
+ }
336
+ if (config.ai.provider !== undefined) {
337
+ aiConfig.provider = config.ai.provider;
338
+ }
339
+ if (config.ai.debug !== undefined) {
340
+ aiConfig.debug = config.ai.debug;
341
+ }
342
+ }
343
+ // Check-level AI model and provider (top-level properties)
344
+ if (config.ai_model !== undefined) {
345
+ aiConfig.model = config.ai_model;
346
+ }
347
+ if (config.ai_provider !== undefined) {
348
+ aiConfig.provider = config.ai_provider;
349
+ }
350
+ // Get custom prompt from config - REQUIRED, no fallbacks
351
+ const customPrompt = config.prompt;
352
+ if (!customPrompt) {
353
+ throw new Error(`No prompt defined for check. All checks must have prompts defined in .visor.yaml configuration.`);
354
+ }
355
+ // Process prompt with Liquid templates and file loading
356
+ const processedPrompt = await this.processPrompt(customPrompt, prInfo, config.eventContext, _dependencyResults);
357
+ // Create AI service with config - environment variables will be used if aiConfig is empty
358
+ const service = new ai_review_service_1.AIReviewService(aiConfig);
359
+ console.error(`🔧 Debug: AICheckProvider using processed prompt: ${processedPrompt.substring(0, 100)}...`);
360
+ // Pass the custom prompt and schema - no fallbacks
361
+ const schema = config.schema;
362
+ console.error(`🔧 Debug: AICheckProvider schema from config: ${JSON.stringify(schema)}`);
363
+ console.error(`🔧 Debug: AICheckProvider full config: ${JSON.stringify(config, null, 2)}`);
364
+ try {
365
+ return await service.executeReview(prInfo, processedPrompt, schema);
366
+ }
367
+ catch (error) {
368
+ const errorMessage = error instanceof Error ? error.message : String(error);
369
+ // Log detailed error information
370
+ console.error(`❌ AI Check Provider Error for check: ${errorMessage}`);
371
+ // Check if this is a critical error (authentication, rate limits, etc)
372
+ const isCriticalError = errorMessage.includes('API rate limit') ||
373
+ errorMessage.includes('403') ||
374
+ errorMessage.includes('401') ||
375
+ errorMessage.includes('authentication') ||
376
+ errorMessage.includes('API key');
377
+ if (isCriticalError) {
378
+ console.error(`🚨 CRITICAL ERROR: AI provider authentication or rate limit issue detected`);
379
+ console.error(`🚨 This check cannot proceed without valid API credentials`);
380
+ }
381
+ // Re-throw with more context
382
+ throw new Error(`AI analysis failed: ${errorMessage}`);
383
+ }
384
+ }
385
+ getSupportedConfigKeys() {
386
+ return [
387
+ 'type',
388
+ 'prompt',
389
+ 'focus',
390
+ 'schema',
391
+ 'group',
392
+ 'ai.provider',
393
+ 'ai.model',
394
+ 'ai.apiKey',
395
+ 'ai.timeout',
396
+ 'ai_model',
397
+ 'ai_provider',
398
+ 'env',
399
+ ];
400
+ }
401
+ async isAvailable() {
402
+ // Check if any AI API key is available
403
+ return !!(process.env.GOOGLE_API_KEY ||
404
+ process.env.ANTHROPIC_API_KEY ||
405
+ process.env.OPENAI_API_KEY);
406
+ }
407
+ getRequirements() {
408
+ return [
409
+ 'At least one of: GOOGLE_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY',
410
+ 'Optional: MODEL_NAME environment variable',
411
+ 'Network access to AI provider APIs',
412
+ ];
413
+ }
414
+ }
415
+ exports.AICheckProvider = AICheckProvider;
416
+ //# sourceMappingURL=ai-check-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-check-provider.js","sourceRoot":"","sources":["../../src/providers/ai-check-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { CheckProvider } from './check-provider.interface';
2
+ /**
3
+ * Registry for managing check providers
4
+ */
5
+ export declare class CheckProviderRegistry {
6
+ private providers;
7
+ private static instance;
8
+ private constructor();
9
+ /**
10
+ * Get singleton instance
11
+ */
12
+ static getInstance(): CheckProviderRegistry;
13
+ /**
14
+ * Register default built-in providers
15
+ */
16
+ private registerDefaultProviders;
17
+ /**
18
+ * Register a check provider
19
+ */
20
+ register(provider: CheckProvider): void;
21
+ /**
22
+ * Unregister a check provider
23
+ */
24
+ unregister(name: string): void;
25
+ /**
26
+ * Get a provider by name
27
+ */
28
+ getProvider(name: string): CheckProvider | undefined;
29
+ /**
30
+ * Get provider or throw if not found
31
+ */
32
+ getProviderOrThrow(name: string): CheckProvider;
33
+ /**
34
+ * Check if a provider exists
35
+ */
36
+ hasProvider(name: string): boolean;
37
+ /**
38
+ * Get all registered provider names
39
+ */
40
+ getAvailableProviders(): string[];
41
+ /**
42
+ * Get all providers
43
+ */
44
+ getAllProviders(): CheckProvider[];
45
+ /**
46
+ * Get providers that are currently available (have required dependencies)
47
+ */
48
+ getActiveProviders(): Promise<CheckProvider[]>;
49
+ /**
50
+ * List provider information
51
+ */
52
+ listProviders(): Promise<Array<{
53
+ name: string;
54
+ description: string;
55
+ available: boolean;
56
+ requirements: string[];
57
+ }>>;
58
+ /**
59
+ * Reset registry (mainly for testing)
60
+ */
61
+ reset(): void;
62
+ /**
63
+ * Clear singleton instance (for testing)
64
+ */
65
+ static clearInstance(): void;
66
+ }
67
+ //# sourceMappingURL=check-provider-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-provider-registry.d.ts","sourceRoot":"","sources":["../../src/providers/check-provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAE/C,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAQhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIpD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAU/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAapD;;OAEG;IACG,aAAa,IAAI,OAAO,CAC5B,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CACH;IAgBD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;CAG7B"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckProviderRegistry = void 0;
4
+ const ai_check_provider_1 = require("./ai-check-provider");
5
+ const tool_check_provider_1 = require("./tool-check-provider");
6
+ const script_check_provider_1 = require("./script-check-provider");
7
+ const webhook_check_provider_1 = require("./webhook-check-provider");
8
+ /**
9
+ * Registry for managing check providers
10
+ */
11
+ class CheckProviderRegistry {
12
+ providers = new Map();
13
+ static instance;
14
+ constructor() {
15
+ // Register default providers
16
+ this.registerDefaultProviders();
17
+ }
18
+ /**
19
+ * Get singleton instance
20
+ */
21
+ static getInstance() {
22
+ if (!CheckProviderRegistry.instance) {
23
+ CheckProviderRegistry.instance = new CheckProviderRegistry();
24
+ }
25
+ return CheckProviderRegistry.instance;
26
+ }
27
+ /**
28
+ * Register default built-in providers
29
+ */
30
+ registerDefaultProviders() {
31
+ // Register all built-in providers
32
+ this.register(new ai_check_provider_1.AICheckProvider());
33
+ this.register(new tool_check_provider_1.ToolCheckProvider());
34
+ this.register(new script_check_provider_1.ScriptCheckProvider());
35
+ this.register(new webhook_check_provider_1.WebhookCheckProvider());
36
+ }
37
+ /**
38
+ * Register a check provider
39
+ */
40
+ register(provider) {
41
+ const name = provider.getName();
42
+ if (this.providers.has(name)) {
43
+ throw new Error(`Provider '${name}' is already registered`);
44
+ }
45
+ this.providers.set(name, provider);
46
+ // Send provider registration messages to stderr to avoid contaminating JSON output
47
+ console.error(`Registered check provider: ${name}`);
48
+ }
49
+ /**
50
+ * Unregister a check provider
51
+ */
52
+ unregister(name) {
53
+ if (!this.providers.has(name)) {
54
+ throw new Error(`Provider '${name}' not found`);
55
+ }
56
+ this.providers.delete(name);
57
+ // Send provider unregistration messages to stderr to avoid contaminating JSON output
58
+ console.error(`Unregistered check provider: ${name}`);
59
+ }
60
+ /**
61
+ * Get a provider by name
62
+ */
63
+ getProvider(name) {
64
+ return this.providers.get(name);
65
+ }
66
+ /**
67
+ * Get provider or throw if not found
68
+ */
69
+ getProviderOrThrow(name) {
70
+ const provider = this.providers.get(name);
71
+ if (!provider) {
72
+ throw new Error(`Check provider '${name}' not found. Available providers: ${this.getAvailableProviders().join(', ')}`);
73
+ }
74
+ return provider;
75
+ }
76
+ /**
77
+ * Check if a provider exists
78
+ */
79
+ hasProvider(name) {
80
+ return this.providers.has(name);
81
+ }
82
+ /**
83
+ * Get all registered provider names
84
+ */
85
+ getAvailableProviders() {
86
+ return Array.from(this.providers.keys());
87
+ }
88
+ /**
89
+ * Get all providers
90
+ */
91
+ getAllProviders() {
92
+ return Array.from(this.providers.values());
93
+ }
94
+ /**
95
+ * Get providers that are currently available (have required dependencies)
96
+ */
97
+ async getActiveProviders() {
98
+ const providers = this.getAllProviders();
99
+ const activeProviders = [];
100
+ for (const provider of providers) {
101
+ if (await provider.isAvailable()) {
102
+ activeProviders.push(provider);
103
+ }
104
+ }
105
+ return activeProviders;
106
+ }
107
+ /**
108
+ * List provider information
109
+ */
110
+ async listProviders() {
111
+ const providers = this.getAllProviders();
112
+ const info = [];
113
+ for (const provider of providers) {
114
+ info.push({
115
+ name: provider.getName(),
116
+ description: provider.getDescription(),
117
+ available: await provider.isAvailable(),
118
+ requirements: provider.getRequirements(),
119
+ });
120
+ }
121
+ return info;
122
+ }
123
+ /**
124
+ * Reset registry (mainly for testing)
125
+ */
126
+ reset() {
127
+ this.providers.clear();
128
+ this.registerDefaultProviders();
129
+ }
130
+ /**
131
+ * Clear singleton instance (for testing)
132
+ */
133
+ static clearInstance() {
134
+ CheckProviderRegistry.instance = undefined;
135
+ }
136
+ }
137
+ exports.CheckProviderRegistry = CheckProviderRegistry;
138
+ //# sourceMappingURL=check-provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-provider-registry.js","sourceRoot":"","sources":["../../src/providers/check-provider-registry.ts"],"names":[],"mappings":";;;AACA,2DAAsD;AACtD,+DAA0D;AAC1D,mEAA8D;AAC9D,qEAAgE;AAEhE;;GAEG;AACH,MAAa,qBAAqB;IACxB,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;IAClD,MAAM,CAAC,QAAQ,CAAwB;IAE/C;QACE,6BAA6B;QAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YACpC,qBAAqB,CAAC,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,kCAAkC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,mCAAe,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,uCAAiB,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,2CAAmB,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,6CAAoB,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAuB;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,yBAAyB,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,mFAAmF;QACnF,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,qFAAqF;QACrF,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAY;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,qCAAqC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,eAAe,GAAoB,EAAE,CAAC;QAE5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QAQjB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE;gBACxB,WAAW,EAAE,QAAQ,CAAC,cAAc,EAAE;gBACtC,SAAS,EAAE,MAAM,QAAQ,CAAC,WAAW,EAAE;gBACvC,YAAY,EAAE,QAAQ,CAAC,eAAe,EAAE;aACzC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,qBAAqB,CAAC,QAAQ,GAAG,SAAgB,CAAC;IACpD,CAAC;CACF;AAxJD,sDAwJC"}