@probelabs/visor 0.1.159-ee → 0.1.160-ee

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 (36) hide show
  1. package/defaults/assistant.yaml +143 -0
  2. package/defaults/skills/code-explorer.yaml +41 -0
  3. package/dist/defaults/assistant.yaml +143 -0
  4. package/dist/defaults/skills/code-explorer.yaml +41 -0
  5. package/dist/index.js +174 -24
  6. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  7. package/dist/sdk/{check-provider-registry-A32RRIIF.mjs → check-provider-registry-EFBU3XPX.mjs} +5 -5
  8. package/dist/sdk/chunk-2LL6GIEU.mjs +1502 -0
  9. package/dist/sdk/chunk-2LL6GIEU.mjs.map +1 -0
  10. package/dist/sdk/chunk-CYIKOFJZ.mjs +443 -0
  11. package/dist/sdk/chunk-CYIKOFJZ.mjs.map +1 -0
  12. package/dist/sdk/{chunk-RHAKGIBI.mjs → chunk-FHWFG5AS.mjs} +111 -22
  13. package/dist/sdk/{chunk-RHAKGIBI.mjs.map → chunk-FHWFG5AS.mjs.map} +1 -1
  14. package/dist/sdk/chunk-HT3EFZ75.mjs +739 -0
  15. package/dist/sdk/chunk-HT3EFZ75.mjs.map +1 -0
  16. package/dist/sdk/failure-condition-evaluator-3Q45T5EW.mjs +17 -0
  17. package/dist/sdk/github-frontend-SZBGCH43.mjs +1368 -0
  18. package/dist/sdk/github-frontend-SZBGCH43.mjs.map +1 -0
  19. package/dist/sdk/{host-KO3WVPVP.mjs → host-Z6OFA24O.mjs} +2 -2
  20. package/dist/sdk/routing-GGZBWOLZ.mjs +25 -0
  21. package/dist/sdk/{schedule-tool-RF3GRKMG.mjs → schedule-tool-DWHKTTEY.mjs} +5 -5
  22. package/dist/sdk/{schedule-tool-handler-JRSULLPY.mjs → schedule-tool-handler-IZPIN2GK.mjs} +5 -5
  23. package/dist/sdk/schedule-tool-handler-IZPIN2GK.mjs.map +1 -0
  24. package/dist/sdk/sdk.js +97 -8
  25. package/dist/sdk/sdk.js.map +1 -1
  26. package/dist/sdk/sdk.mjs +4 -4
  27. package/dist/sdk/trace-helpers-AXJZLLWE.mjs +25 -0
  28. package/dist/sdk/trace-helpers-AXJZLLWE.mjs.map +1 -0
  29. package/dist/sdk/{workflow-check-provider-LWJTZ5AI.mjs → workflow-check-provider-XGW3WVPS.mjs} +5 -5
  30. package/dist/sdk/workflow-check-provider-XGW3WVPS.mjs.map +1 -0
  31. package/package.json +2 -2
  32. /package/dist/sdk/{check-provider-registry-A32RRIIF.mjs.map → check-provider-registry-EFBU3XPX.mjs.map} +0 -0
  33. /package/dist/sdk/{schedule-tool-RF3GRKMG.mjs.map → failure-condition-evaluator-3Q45T5EW.mjs.map} +0 -0
  34. /package/dist/sdk/{host-KO3WVPVP.mjs.map → host-Z6OFA24O.mjs.map} +0 -0
  35. /package/dist/sdk/{schedule-tool-handler-JRSULLPY.mjs.map → routing-GGZBWOLZ.mjs.map} +0 -0
  36. /package/dist/sdk/{workflow-check-provider-LWJTZ5AI.mjs.map → schedule-tool-DWHKTTEY.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- process.env.VISOR_VERSION = '0.1.159';
3
- process.env.PROBE_VERSION = '0.6.0-rc274';
4
- process.env.VISOR_COMMIT_SHA = '345101301086b988952a5425033fc0ca9cbaafe1';
5
- process.env.VISOR_COMMIT_SHORT = '3451013';
2
+ process.env.VISOR_VERSION = '0.1.160';
3
+ process.env.PROBE_VERSION = '0.6.0-rc275';
4
+ process.env.VISOR_COMMIT_SHA = '9e7322acd7e3cc1f894977a15731383084320de7';
5
+ process.env.VISOR_COMMIT_SHORT = '9e7322a';
6
6
  /******/ (() => { // webpackBootstrap
7
7
  /******/ var __webpack_modules__ = ({
8
8
 
@@ -191288,27 +191288,141 @@ class WorkflowCheckProvider extends check_provider_interface_1.CheckProvider {
191288
191288
  process.cwd();
191289
191289
  // Create a Liquid engine for loadConfig that supports {% readfile %} with basePath
191290
191290
  const loadConfigLiquid = (0, liquid_extensions_1.createExtendedLiquid)();
191291
+ // Deep merge utility for extends support: objects merge recursively, arrays/primitives override
191292
+ const deepMerge = (base, override) => {
191293
+ if (!base ||
191294
+ !override ||
191295
+ typeof base !== 'object' ||
191296
+ typeof override !== 'object' ||
191297
+ Array.isArray(base) ||
191298
+ Array.isArray(override)) {
191299
+ return override;
191300
+ }
191301
+ const result = { ...base };
191302
+ for (const key of Object.keys(override)) {
191303
+ if (key in result &&
191304
+ typeof result[key] === 'object' &&
191305
+ result[key] !== null &&
191306
+ !Array.isArray(result[key]) &&
191307
+ typeof override[key] === 'object' &&
191308
+ override[key] !== null &&
191309
+ !Array.isArray(override[key])) {
191310
+ result[key] = deepMerge(result[key], override[key]);
191311
+ }
191312
+ else {
191313
+ result[key] = override[key];
191314
+ }
191315
+ }
191316
+ return result;
191317
+ };
191318
+ // Resolve visor:// and visor-ee:// paths to the defaults/ directory shipped with the package
191319
+ // In ncc bundle: __dirname is dist/, defaults/ is sibling → resolve(__dirname, '..', 'defaults')
191320
+ // In source/test: __dirname is src/providers/, defaults/ is two levels up → resolve(__dirname, '..', '..', 'defaults')
191321
+ const resolveVisorPath = (filePath) => {
191322
+ if (!filePath.startsWith('visor://') && !filePath.startsWith('visor-ee://')) {
191323
+ return null;
191324
+ }
191325
+ const relativePath = filePath.replace(/^visor(?:-ee)?:\/\//, '');
191326
+ // Try bundle path first (most common in production), then source path
191327
+ const candidates = [
191328
+ path.resolve(__dirname, '..', 'defaults'),
191329
+ path.resolve(__dirname, '..', '..', 'defaults'),
191330
+ ];
191331
+ let defaultsDir;
191332
+ for (const candidate of candidates) {
191333
+ if ((__nccwpck_require__(79896).existsSync)(candidate)) {
191334
+ defaultsDir = candidate;
191335
+ break;
191336
+ }
191337
+ }
191338
+ if (!defaultsDir) {
191339
+ throw new Error(`loadConfig: cannot find defaults directory for visor:// paths`);
191340
+ }
191341
+ const resolved = path.resolve(defaultsDir, relativePath);
191342
+ if (!resolved.startsWith(defaultsDir + path.sep) && resolved !== defaultsDir) {
191343
+ throw new Error(`loadConfig: visor:// path escapes defaults directory`);
191344
+ }
191345
+ return { resolvedPath: resolved, configDir: path.dirname(resolved) };
191346
+ };
191347
+ // Shared depth counter for loadConfig calls (tracks total nesting across expression + extends)
191348
+ let loadConfigCallDepth = 0;
191349
+ // Recursively resolve { expression: "..." } nodes and extends in parsed config
191350
+ const resolveExpressions = (value, depth) => {
191351
+ if (depth > 10) {
191352
+ throw new Error('loadConfig: maximum expression nesting depth (10) exceeded');
191353
+ }
191354
+ if (Array.isArray(value)) {
191355
+ return value.map(item => resolveExpressions(item, depth + 1));
191356
+ }
191357
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
191358
+ const obj = value;
191359
+ // Handle { expression: "..." } single-key objects
191360
+ const keys = Object.keys(obj);
191361
+ if (keys.length === 1 && keys[0] === 'expression' && typeof obj.expression === 'string') {
191362
+ const sandbox = (0, sandbox_1.createSecureSandbox)();
191363
+ const result = (0, sandbox_1.compileAndRun)(sandbox, obj.expression, templateContext, {
191364
+ injectLog: true,
191365
+ logPrefix: 'loadConfig.expression',
191366
+ });
191367
+ return resolveExpressions(result, depth + 1);
191368
+ }
191369
+ // Handle extends: load base config and deep merge
191370
+ if ('extends' in obj && typeof obj.extends === 'string') {
191371
+ const extendsPath = obj.extends;
191372
+ const overrideObj = { ...obj };
191373
+ delete overrideObj.extends;
191374
+ // Recursively resolve the override object first
191375
+ const resolvedOverride = resolveExpressions(overrideObj, depth + 1);
191376
+ // Load the base config (loadConfig itself handles visor:// and expressions)
191377
+ const baseConfig = loadConfig(extendsPath);
191378
+ return deepMerge(baseConfig, resolvedOverride);
191379
+ }
191380
+ // Recursively walk all values
191381
+ const result = {};
191382
+ for (const [k, v] of Object.entries(obj)) {
191383
+ result[k] = resolveExpressions(v, depth + 1);
191384
+ }
191385
+ return result;
191386
+ }
191387
+ return value;
191388
+ };
191291
191389
  // loadConfig helper - synchronously reads, renders Liquid templates, and parses YAML/JSON
191292
191390
  // Usage in expressions: loadConfig('config/intents.yaml')
191293
191391
  // Supports {% readfile "path" %} directives that resolve relative to the config file's directory
191392
+ // Supports visor:// paths for loading framework defaults
191393
+ // Recursively resolves { expression: "..." } nodes and extends fields
191294
191394
  const loadConfig = (filePath) => {
191295
191395
  try {
191296
- // Normalize basePath for security validation
191297
- const normalizedBasePath = path.normalize(basePath);
191298
- // Resolve path relative to basePath (or use absolute path)
191299
- const resolvedPath = path.isAbsolute(filePath)
191300
- ? path.normalize(filePath)
191301
- : path.normalize(path.resolve(basePath, filePath));
191302
- // Security: Validate that resolved path stays within basePath
191303
- // This prevents path traversal attacks (e.g., ../../../etc/passwd)
191304
- const basePathWithSep = normalizedBasePath.endsWith(path.sep)
191305
- ? normalizedBasePath
191306
- : normalizedBasePath + path.sep;
191307
- if (!resolvedPath.startsWith(basePathWithSep) && resolvedPath !== normalizedBasePath) {
191308
- throw new Error(`Path '${filePath}' escapes base directory`);
191309
- }
191310
- // Get the directory of the config file for resolving relative paths in {% readfile %}
191311
- const configDir = path.dirname(resolvedPath);
191396
+ loadConfigCallDepth++;
191397
+ if (loadConfigCallDepth > 10) {
191398
+ throw new Error('maximum loadConfig nesting depth (10) exceeded');
191399
+ }
191400
+ let resolvedPath;
191401
+ let configDir;
191402
+ // Check for visor:// or visor-ee:// paths
191403
+ const visorResolved = resolveVisorPath(filePath);
191404
+ if (visorResolved) {
191405
+ resolvedPath = visorResolved.resolvedPath;
191406
+ configDir = visorResolved.configDir;
191407
+ }
191408
+ else {
191409
+ // Normalize basePath for security validation
191410
+ const normalizedBasePath = path.normalize(basePath);
191411
+ // Resolve path relative to basePath (or use absolute path)
191412
+ resolvedPath = path.isAbsolute(filePath)
191413
+ ? path.normalize(filePath)
191414
+ : path.normalize(path.resolve(basePath, filePath));
191415
+ // Security: Validate that resolved path stays within basePath
191416
+ // This prevents path traversal attacks (e.g., ../../../etc/passwd)
191417
+ const basePathWithSep = normalizedBasePath.endsWith(path.sep)
191418
+ ? normalizedBasePath
191419
+ : normalizedBasePath + path.sep;
191420
+ if (!resolvedPath.startsWith(basePathWithSep) && resolvedPath !== normalizedBasePath) {
191421
+ throw new Error(`Path '${filePath}' escapes base directory`);
191422
+ }
191423
+ // Get the directory of the config file for resolving relative paths in {% readfile %}
191424
+ configDir = path.dirname(resolvedPath);
191425
+ }
191312
191426
  // Use sync read for sandbox expression context (expressions can't be async)
191313
191427
  const rawContent = (__nccwpck_require__(79896).readFileSync)(resolvedPath, 'utf-8');
191314
191428
  // Render Liquid templates (e.g., {% readfile "docs/file.md" %}) with basePath context
@@ -191318,13 +191432,18 @@ class WorkflowCheckProvider extends check_provider_interface_1.CheckProvider {
191318
191432
  });
191319
191433
  // Parse as YAML with JSON_SCHEMA for security (prevents custom type execution)
191320
191434
  // JSON_SCHEMA is safer than DEFAULT but still parses basic types (numbers, booleans, null)
191321
- return yaml.load(renderedContent, { schema: yaml.JSON_SCHEMA });
191435
+ const parsed = yaml.load(renderedContent, { schema: yaml.JSON_SCHEMA });
191436
+ // Recursively resolve expressions and extends in the parsed result
191437
+ return resolveExpressions(parsed, 0);
191322
191438
  }
191323
191439
  catch (error) {
191324
191440
  const msg = error instanceof Error ? error.message : String(error);
191325
191441
  logger_1.logger.error(`[WorkflowProvider] loadConfig failed for '${filePath}': ${msg}`);
191326
191442
  throw new Error(`loadConfig('${filePath}') failed: ${msg}`);
191327
191443
  }
191444
+ finally {
191445
+ loadConfigCallDepth--;
191446
+ }
191328
191447
  };
191329
191448
  const templateContext = {
191330
191449
  pr: prInfo,
@@ -280487,13 +280606,44 @@ var init_TaskManager = __esm({
280487
280606
  this.tasks = newTasks;
280488
280607
  }
280489
280608
  /**
280490
- * Create multiple tasks in batch
280609
+ * Create multiple tasks in batch, resolving user-provided IDs to auto-generated IDs.
280610
+ * If any task fails validation, no tasks are created (atomic operation).
280491
280611
  * @param {Object[]} tasksData - Array of task data objects
280492
280612
  * @returns {Task[]} Created tasks
280493
280613
  */
280494
280614
  createTasks(tasksData) {
280495
- const createdTasks = [];
280615
+ const idMap = /* @__PURE__ */ new Map();
280616
+ const batchAutoIds = /* @__PURE__ */ new Set();
280617
+ let nextCounter = this.taskCounter;
280496
280618
  for (const taskData of tasksData) {
280619
+ nextCounter++;
280620
+ const autoId = `task-${nextCounter}`;
280621
+ batchAutoIds.add(autoId);
280622
+ if (taskData.id) {
280623
+ idMap.set(taskData.id, autoId);
280624
+ }
280625
+ }
280626
+ const resolvedTasksData = tasksData.map((taskData) => {
280627
+ const resolved = { ...taskData };
280628
+ delete resolved.id;
280629
+ if (resolved.dependencies) {
280630
+ resolved.dependencies = resolved.dependencies.map((depId) => {
280631
+ if (idMap.has(depId)) return idMap.get(depId);
280632
+ if (this.tasks.has(depId) || batchAutoIds.has(depId)) return depId;
280633
+ throw new Error(`Dependency "${depId}" does not exist. Available tasks: ${this._getAvailableTaskIds()}${idMap.size > 0 ? `, batch IDs: ${Array.from(idMap.keys()).join(", ")}` : ""}`);
280634
+ });
280635
+ }
280636
+ if (resolved.after) {
280637
+ if (idMap.has(resolved.after)) {
280638
+ resolved.after = idMap.get(resolved.after);
280639
+ } else if (!this.tasks.has(resolved.after) && !batchAutoIds.has(resolved.after)) {
280640
+ throw new Error(`Task "${resolved.after}" does not exist. Cannot insert after non-existent task. Available tasks: ${this._getAvailableTaskIds()}${idMap.size > 0 ? `, batch IDs: ${Array.from(idMap.keys()).join(", ")}` : ""}`);
280641
+ }
280642
+ }
280643
+ return resolved;
280644
+ });
280645
+ const createdTasks = [];
280646
+ for (const taskData of resolvedTasksData) {
280497
280647
  const task = this.createTask(taskData);
280498
280648
  createdTasks.push(task);
280499
280649
  }
@@ -397332,7 +397482,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
397332
397482
  /***/ ((module) => {
397333
397483
 
397334
397484
  "use strict";
397335
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.42","main":"dist/index.js","bin":{"visor":"./dist/index.js"},"exports":{".":{"require":"./dist/index.js","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/sdk.d.ts","import":"./dist/sdk/sdk.mjs","require":"./dist/sdk/sdk.js"},"./cli":{"require":"./dist/index.js"}},"files":["dist/","defaults/","action.yml","README.md","LICENSE"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build:cli":"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo \'#!/usr/bin/env node\' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js","build:sdk":"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk","build":"./scripts/build-oss.sh","build:ee":"npm run build:cli && npm run build:sdk","test":"jest && npm run test:yaml","test:unit":"jest","prepublishOnly":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage","test:ee":"jest --testPathPatterns=\'tests/ee\' --testPathIgnorePatterns=\'/node_modules/\' --no-coverage","test:manual:bash":"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts","lint":"eslint src tests --ext .ts","lint:fix":"eslint src tests --ext .ts --fix","format":"prettier --write src tests","format:check":"prettier --check src tests","clean":"","clean:traces":"node scripts/clean-traces.js","prebuild":"npm run clean && node scripts/generate-config-schema.js","pretest":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","pretest:unit":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","test:with-build":"npm run build:cli && jest","test:yaml":"node dist/index.js test --progress compact","test:yaml:parallel":"node dist/index.js test --progress compact --max-parallel 4","prepare":"husky","pre-commit":"lint-staged","deploy:site":"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true","deploy:worker":"npx wrangler deploy","deploy":"npm run deploy:site && npm run deploy:worker","publish:ee":"./scripts/publish-ee.sh","release":"./scripts/release.sh","release:patch":"./scripts/release.sh patch","release:minor":"./scripts/release.sh minor","release:major":"./scripts/release.sh major","release:prerelease":"./scripts/release.sh prerelease","docs:validate":"node scripts/validate-readme-links.js","workshop:setup":"npm install -D reveal-md@6.1.2","workshop:serve":"cd workshop && reveal-md slides.md -w","workshop:export":"reveal-md workshop/slides.md --static workshop/build","workshop:pdf":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter","workshop:pdf:ci":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\"--no-sandbox --disable-dev-shm-usage\\"","workshop:pdf:a4":"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4","workshop:build":"npm run workshop:export && npm run workshop:pdf","simulate:issue":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug","simulate:comment":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug"},"keywords":["code-review","ai","github-action","cli","pr-review","visor"],"author":"Probe Labs","license":"MIT","description":"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines","repository":{"type":"git","url":"git+https://github.com/probelabs/visor.git"},"bugs":{"url":"https://github.com/probelabs/visor/issues"},"homepage":"https://github.com/probelabs/visor#readme","dependencies":{"@actions/core":"^1.11.1","@apidevtools/swagger-parser":"^12.1.0","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9","@octokit/action":"^8.0.2","@octokit/auth-app":"^8.1.0","@octokit/core":"^7.0.3","@octokit/rest":"^22.0.0","@opentelemetry/api":"^1.9.0","@opentelemetry/core":"^1.30.1","@opentelemetry/exporter-trace-otlp-grpc":"^0.203.0","@opentelemetry/exporter-trace-otlp-http":"^0.203.0","@opentelemetry/instrumentation":"^0.203.0","@opentelemetry/resources":"^1.30.1","@opentelemetry/sdk-metrics":"^1.30.1","@opentelemetry/sdk-node":"^0.203.0","@opentelemetry/sdk-trace-base":"^1.30.1","@opentelemetry/semantic-conventions":"^1.30.1","@probelabs/probe":"^0.6.0-rc274","@types/commander":"^2.12.0","@types/uuid":"^10.0.0","acorn":"^8.16.0","acorn-walk":"^8.3.5","ajv":"^8.17.1","ajv-formats":"^3.0.1","better-sqlite3":"^11.0.0","blessed":"^0.1.81","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","ignore":"^7.0.5","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","minimatch":"^10.2.2","node-cron":"^3.0.3","open":"^9.1.0","simple-git":"^3.28.0","uuid":"^11.1.0","ws":"^8.18.3"},"optionalDependencies":{"@anthropic/claude-code-sdk":"npm:null@*","@open-policy-agent/opa-wasm":"^1.10.0","knex":"^3.1.0","mysql2":"^3.11.0","pg":"^8.13.0","tedious":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.34.0","@kie/act-js":"^2.6.2","@kie/mock-github":"^2.0.1","@swc/core":"^1.13.2","@swc/jest":"^0.2.37","@types/better-sqlite3":"^7.6.0","@types/blessed":"^0.1.27","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/node":"^24.3.0","@types/node-cron":"^3.0.11","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.42.0","@typescript-eslint/parser":"^8.42.0","@vercel/ncc":"^0.38.4","eslint":"^9.34.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.1.3","lint-staged":"^16.1.6","prettier":"^3.6.2","reveal-md":"^6.1.2","ts-json-schema-generator":"^1.5.1","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.9.2","wrangler":"^3.0.0"},"peerDependenciesMeta":{"@anthropic/claude-code-sdk":{"optional":true}},"directories":{"test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["eslint --fix","prettier --write"],"tests/**/*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]}}');
397485
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.42","main":"dist/index.js","bin":{"visor":"./dist/index.js"},"exports":{".":{"require":"./dist/index.js","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/sdk.d.ts","import":"./dist/sdk/sdk.mjs","require":"./dist/sdk/sdk.js"},"./cli":{"require":"./dist/index.js"}},"files":["dist/","defaults/","action.yml","README.md","LICENSE"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build:cli":"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo \'#!/usr/bin/env node\' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js","build:sdk":"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk","build":"./scripts/build-oss.sh","build:ee":"npm run build:cli && npm run build:sdk","test":"jest && npm run test:yaml","test:unit":"jest","prepublishOnly":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage","test:ee":"jest --testPathPatterns=\'tests/ee\' --testPathIgnorePatterns=\'/node_modules/\' --no-coverage","test:manual:bash":"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts","lint":"eslint src tests --ext .ts","lint:fix":"eslint src tests --ext .ts --fix","format":"prettier --write src tests","format:check":"prettier --check src tests","clean":"","clean:traces":"node scripts/clean-traces.js","prebuild":"npm run clean && node scripts/generate-config-schema.js","pretest":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","pretest:unit":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","test:with-build":"npm run build:cli && jest","test:yaml":"node dist/index.js test --progress compact","test:yaml:parallel":"node dist/index.js test --progress compact --max-parallel 4","prepare":"husky","pre-commit":"lint-staged","deploy:site":"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true","deploy:worker":"npx wrangler deploy","deploy":"npm run deploy:site && npm run deploy:worker","publish:ee":"./scripts/publish-ee.sh","release":"./scripts/release.sh","release:patch":"./scripts/release.sh patch","release:minor":"./scripts/release.sh minor","release:major":"./scripts/release.sh major","release:prerelease":"./scripts/release.sh prerelease","docs:validate":"node scripts/validate-readme-links.js","workshop:setup":"npm install -D reveal-md@6.1.2","workshop:serve":"cd workshop && reveal-md slides.md -w","workshop:export":"reveal-md workshop/slides.md --static workshop/build","workshop:pdf":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter","workshop:pdf:ci":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\"--no-sandbox --disable-dev-shm-usage\\"","workshop:pdf:a4":"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4","workshop:build":"npm run workshop:export && npm run workshop:pdf","simulate:issue":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug","simulate:comment":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug"},"keywords":["code-review","ai","github-action","cli","pr-review","visor"],"author":"Probe Labs","license":"MIT","description":"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines","repository":{"type":"git","url":"git+https://github.com/probelabs/visor.git"},"bugs":{"url":"https://github.com/probelabs/visor/issues"},"homepage":"https://github.com/probelabs/visor#readme","dependencies":{"@actions/core":"^1.11.1","@apidevtools/swagger-parser":"^12.1.0","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9","@octokit/action":"^8.0.2","@octokit/auth-app":"^8.1.0","@octokit/core":"^7.0.3","@octokit/rest":"^22.0.0","@opentelemetry/api":"^1.9.0","@opentelemetry/core":"^1.30.1","@opentelemetry/exporter-trace-otlp-grpc":"^0.203.0","@opentelemetry/exporter-trace-otlp-http":"^0.203.0","@opentelemetry/instrumentation":"^0.203.0","@opentelemetry/resources":"^1.30.1","@opentelemetry/sdk-metrics":"^1.30.1","@opentelemetry/sdk-node":"^0.203.0","@opentelemetry/sdk-trace-base":"^1.30.1","@opentelemetry/semantic-conventions":"^1.30.1","@probelabs/probe":"^0.6.0-rc275","@types/commander":"^2.12.0","@types/uuid":"^10.0.0","acorn":"^8.16.0","acorn-walk":"^8.3.5","ajv":"^8.17.1","ajv-formats":"^3.0.1","better-sqlite3":"^11.0.0","blessed":"^0.1.81","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","ignore":"^7.0.5","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","minimatch":"^10.2.2","node-cron":"^3.0.3","open":"^9.1.0","simple-git":"^3.28.0","uuid":"^11.1.0","ws":"^8.18.3"},"optionalDependencies":{"@anthropic/claude-code-sdk":"npm:null@*","@open-policy-agent/opa-wasm":"^1.10.0","knex":"^3.1.0","mysql2":"^3.11.0","pg":"^8.13.0","tedious":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.34.0","@kie/act-js":"^2.6.2","@kie/mock-github":"^2.0.1","@swc/core":"^1.13.2","@swc/jest":"^0.2.37","@types/better-sqlite3":"^7.6.0","@types/blessed":"^0.1.27","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/node":"^24.3.0","@types/node-cron":"^3.0.11","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.42.0","@typescript-eslint/parser":"^8.42.0","@vercel/ncc":"^0.38.4","eslint":"^9.34.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.1.3","lint-staged":"^16.1.6","prettier":"^3.6.2","reveal-md":"^6.1.2","ts-json-schema-generator":"^1.5.1","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.9.2","wrangler":"^3.0.0"},"peerDependenciesMeta":{"@anthropic/claude-code-sdk":{"optional":true}},"directories":{"test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["eslint --fix","prettier --write"],"tests/**/*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]}}');
397336
397486
 
397337
397487
  /***/ })
397338
397488
 
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/workflow-check-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAa5C;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAS;;IASvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,aAAa,CAAC;IAiIzB,sBAAsB,IAAI,MAAM,EAAE;IAa5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;YACW,aAAa;IAsN3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH;;OAEG;YACW,sBAAsB;IAsOpC;;OAEG;YACW,+BAA+B;IA2J7C;;OAEG;IACH,OAAO,CAAC,oCAAoC;IA8B5C,OAAO,CAAC,oBAAoB;IA6C5B;;;OAGG;YACW,0BAA0B;CAwEzC"}
1
+ {"version":3,"file":"workflow-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/workflow-check-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAa5C;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAS;;IASvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,aAAa,CAAC;IAiIzB,sBAAsB,IAAI,MAAM,EAAE;IAa5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;YACW,aAAa;IAuV3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH;;OAEG;YACW,sBAAsB;IAsOpC;;OAEG;YACW,+BAA+B;IA2J7C;;OAEG;IACH,OAAO,CAAC,oCAAoC;IA8B5C,OAAO,CAAC,oBAAoB;IA6C5B;;;OAGG;YACW,0BAA0B;CAwEzC"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CheckProviderRegistry,
3
3
  init_check_provider_registry
4
- } from "./chunk-RHAKGIBI.mjs";
4
+ } from "./chunk-FHWFG5AS.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
6
  import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
@@ -11,9 +11,9 @@ import "./chunk-GEW6LS32.mjs";
11
11
  import "./chunk-NZADFXHE.mjs";
12
12
  import "./chunk-AS6LIEO4.mjs";
13
13
  import "./chunk-NCWIZVOT.mjs";
14
- import "./chunk-QSY3XLA3.mjs";
15
- import "./chunk-ITZWA2RF.mjs";
16
- import "./chunk-WYD5ISLQ.mjs";
14
+ import "./chunk-2LL6GIEU.mjs";
15
+ import "./chunk-HT3EFZ75.mjs";
16
+ import "./chunk-CYIKOFJZ.mjs";
17
17
  import "./chunk-JL7JXCET.mjs";
18
18
  import "./chunk-ZUEQNCKB.mjs";
19
19
  import "./chunk-25IC7KXZ.mjs";
@@ -26,4 +26,4 @@ init_check_provider_registry();
26
26
  export {
27
27
  CheckProviderRegistry
28
28
  };
29
- //# sourceMappingURL=check-provider-registry-A32RRIIF.mjs.map
29
+ //# sourceMappingURL=check-provider-registry-EFBU3XPX.mjs.map