@probelabs/visor 0.1.159 → 0.1.160

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 (66) 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/output/traces/{run-2026-03-05T15-45-37-714Z.ndjson → run-2026-03-05T18-38-19-897Z.ndjson} +84 -84
  7. package/dist/output/traces/{run-2026-03-05T15-46-23-118Z.ndjson → run-2026-03-05T18-39-04-213Z.ndjson} +1915 -1877
  8. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  9. package/dist/sdk/{check-provider-registry-UVLGKORU.mjs → check-provider-registry-KSXUR6EX.mjs} +5 -5
  10. package/dist/sdk/{check-provider-registry-74VLAETF.mjs → check-provider-registry-YKW7KIYX.mjs} +5 -5
  11. package/dist/sdk/{chunk-5N33URMM.mjs → chunk-2LL6GIEU.mjs} +3 -3
  12. package/dist/sdk/{chunk-PSZI5NZL.mjs → chunk-5YC7JCOE.mjs} +2 -2
  13. package/dist/sdk/{chunk-IVTSD7ZW.mjs → chunk-BIURECPI.mjs} +111 -22
  14. package/dist/sdk/{chunk-AW3IHBCI.mjs.map → chunk-BIURECPI.mjs.map} +1 -1
  15. package/dist/sdk/{chunk-AW3IHBCI.mjs → chunk-CBCL664N.mjs} +111 -22
  16. package/dist/sdk/{chunk-IVTSD7ZW.mjs.map → chunk-CBCL664N.mjs.map} +1 -1
  17. package/dist/sdk/{chunk-PZONH3RK.mjs → chunk-CYIKOFJZ.mjs} +3 -3
  18. package/dist/sdk/chunk-CYIKOFJZ.mjs.map +1 -0
  19. package/dist/sdk/chunk-HB2PBNBH.mjs +1502 -0
  20. package/dist/sdk/chunk-HB2PBNBH.mjs.map +1 -0
  21. package/dist/sdk/chunk-HT3EFZ75.mjs +739 -0
  22. package/dist/sdk/chunk-HT3EFZ75.mjs.map +1 -0
  23. package/dist/sdk/chunk-ZQ7T4YX7.mjs +443 -0
  24. package/dist/sdk/{chunk-PZONH3RK.mjs.map → chunk-ZQ7T4YX7.mjs.map} +1 -1
  25. package/dist/sdk/{failure-condition-evaluator-LQ5NUFZN.mjs → failure-condition-evaluator-3Q45T5EW.mjs} +3 -3
  26. package/dist/sdk/failure-condition-evaluator-MX6RHBVS.mjs +17 -0
  27. package/dist/sdk/{github-frontend-YSRVB5FS.mjs → github-frontend-4FQRZSJN.mjs} +3 -3
  28. package/dist/sdk/github-frontend-SZBGCH43.mjs +1368 -0
  29. package/dist/sdk/github-frontend-SZBGCH43.mjs.map +1 -0
  30. package/dist/sdk/{host-YG6LPL6H.mjs → host-FB2HG74L.mjs} +2 -2
  31. package/dist/sdk/host-YZA5S2U2.mjs +63 -0
  32. package/dist/sdk/host-YZA5S2U2.mjs.map +1 -0
  33. package/dist/sdk/{routing-ZJSROSUU.mjs → routing-GGZBWOLZ.mjs} +4 -4
  34. package/dist/sdk/routing-WPBWIPF4.mjs +25 -0
  35. package/dist/sdk/{schedule-tool-2GSWLIWA.mjs → schedule-tool-2UDBXPLN.mjs} +5 -5
  36. package/dist/sdk/{schedule-tool-QCJWLYS3.mjs → schedule-tool-7GDLFKEV.mjs} +5 -5
  37. package/dist/sdk/{schedule-tool-handler-HWHHAHJD.mjs → schedule-tool-handler-7RWPVVKD.mjs} +5 -5
  38. package/dist/sdk/{schedule-tool-handler-K2LO33KU.mjs → schedule-tool-handler-QAM5ORVM.mjs} +5 -5
  39. package/dist/sdk/sdk.js +98 -9
  40. package/dist/sdk/sdk.js.map +1 -1
  41. package/dist/sdk/sdk.mjs +4 -4
  42. package/dist/sdk/{trace-helpers-23KC3NGK.mjs → trace-helpers-AXJZLLWE.mjs} +2 -2
  43. package/dist/sdk/trace-helpers-W572V66T.mjs +25 -0
  44. package/dist/sdk/trace-helpers-W572V66T.mjs.map +1 -0
  45. package/dist/sdk/{workflow-check-provider-DHNWJKYK.mjs → workflow-check-provider-FREHQYRZ.mjs} +5 -5
  46. package/dist/sdk/workflow-check-provider-FREHQYRZ.mjs.map +1 -0
  47. package/dist/sdk/{workflow-check-provider-OUREVWAI.mjs → workflow-check-provider-QSFEPL6Z.mjs} +5 -5
  48. package/dist/sdk/workflow-check-provider-QSFEPL6Z.mjs.map +1 -0
  49. package/dist/traces/{run-2026-03-05T15-45-37-714Z.ndjson → run-2026-03-05T18-38-19-897Z.ndjson} +84 -84
  50. package/dist/traces/{run-2026-03-05T15-46-23-118Z.ndjson → run-2026-03-05T18-39-04-213Z.ndjson} +1915 -1877
  51. package/package.json +2 -2
  52. /package/dist/sdk/{check-provider-registry-74VLAETF.mjs.map → check-provider-registry-KSXUR6EX.mjs.map} +0 -0
  53. /package/dist/sdk/{check-provider-registry-UVLGKORU.mjs.map → check-provider-registry-YKW7KIYX.mjs.map} +0 -0
  54. /package/dist/sdk/{chunk-5N33URMM.mjs.map → chunk-2LL6GIEU.mjs.map} +0 -0
  55. /package/dist/sdk/{chunk-PSZI5NZL.mjs.map → chunk-5YC7JCOE.mjs.map} +0 -0
  56. /package/dist/sdk/{failure-condition-evaluator-LQ5NUFZN.mjs.map → failure-condition-evaluator-3Q45T5EW.mjs.map} +0 -0
  57. /package/dist/sdk/{routing-ZJSROSUU.mjs.map → failure-condition-evaluator-MX6RHBVS.mjs.map} +0 -0
  58. /package/dist/sdk/{github-frontend-YSRVB5FS.mjs.map → github-frontend-4FQRZSJN.mjs.map} +0 -0
  59. /package/dist/sdk/{host-YG6LPL6H.mjs.map → host-FB2HG74L.mjs.map} +0 -0
  60. /package/dist/sdk/{schedule-tool-2GSWLIWA.mjs.map → routing-GGZBWOLZ.mjs.map} +0 -0
  61. /package/dist/sdk/{schedule-tool-QCJWLYS3.mjs.map → routing-WPBWIPF4.mjs.map} +0 -0
  62. /package/dist/sdk/{schedule-tool-handler-HWHHAHJD.mjs.map → schedule-tool-2UDBXPLN.mjs.map} +0 -0
  63. /package/dist/sdk/{schedule-tool-handler-K2LO33KU.mjs.map → schedule-tool-7GDLFKEV.mjs.map} +0 -0
  64. /package/dist/sdk/{trace-helpers-23KC3NGK.mjs.map → schedule-tool-handler-7RWPVVKD.mjs.map} +0 -0
  65. /package/dist/sdk/{workflow-check-provider-DHNWJKYK.mjs.map → schedule-tool-handler-QAM5ORVM.mjs.map} +0 -0
  66. /package/dist/sdk/{workflow-check-provider-OUREVWAI.mjs.map → trace-helpers-AXJZLLWE.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 = '345101301';
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 = '9e7322acd';
6
6
  /******/ (() => { // webpackBootstrap
7
7
  /******/ var __webpack_modules__ = ({
8
8
 
@@ -189455,27 +189455,141 @@ class WorkflowCheckProvider extends check_provider_interface_1.CheckProvider {
189455
189455
  process.cwd();
189456
189456
  // Create a Liquid engine for loadConfig that supports {% readfile %} with basePath
189457
189457
  const loadConfigLiquid = (0, liquid_extensions_1.createExtendedLiquid)();
189458
+ // Deep merge utility for extends support: objects merge recursively, arrays/primitives override
189459
+ const deepMerge = (base, override) => {
189460
+ if (!base ||
189461
+ !override ||
189462
+ typeof base !== 'object' ||
189463
+ typeof override !== 'object' ||
189464
+ Array.isArray(base) ||
189465
+ Array.isArray(override)) {
189466
+ return override;
189467
+ }
189468
+ const result = { ...base };
189469
+ for (const key of Object.keys(override)) {
189470
+ if (key in result &&
189471
+ typeof result[key] === 'object' &&
189472
+ result[key] !== null &&
189473
+ !Array.isArray(result[key]) &&
189474
+ typeof override[key] === 'object' &&
189475
+ override[key] !== null &&
189476
+ !Array.isArray(override[key])) {
189477
+ result[key] = deepMerge(result[key], override[key]);
189478
+ }
189479
+ else {
189480
+ result[key] = override[key];
189481
+ }
189482
+ }
189483
+ return result;
189484
+ };
189485
+ // Resolve visor:// and visor-ee:// paths to the defaults/ directory shipped with the package
189486
+ // In ncc bundle: __dirname is dist/, defaults/ is sibling → resolve(__dirname, '..', 'defaults')
189487
+ // In source/test: __dirname is src/providers/, defaults/ is two levels up → resolve(__dirname, '..', '..', 'defaults')
189488
+ const resolveVisorPath = (filePath) => {
189489
+ if (!filePath.startsWith('visor://') && !filePath.startsWith('visor-ee://')) {
189490
+ return null;
189491
+ }
189492
+ const relativePath = filePath.replace(/^visor(?:-ee)?:\/\//, '');
189493
+ // Try bundle path first (most common in production), then source path
189494
+ const candidates = [
189495
+ path.resolve(__dirname, '..', 'defaults'),
189496
+ path.resolve(__dirname, '..', '..', 'defaults'),
189497
+ ];
189498
+ let defaultsDir;
189499
+ for (const candidate of candidates) {
189500
+ if ((__nccwpck_require__(79896).existsSync)(candidate)) {
189501
+ defaultsDir = candidate;
189502
+ break;
189503
+ }
189504
+ }
189505
+ if (!defaultsDir) {
189506
+ throw new Error(`loadConfig: cannot find defaults directory for visor:// paths`);
189507
+ }
189508
+ const resolved = path.resolve(defaultsDir, relativePath);
189509
+ if (!resolved.startsWith(defaultsDir + path.sep) && resolved !== defaultsDir) {
189510
+ throw new Error(`loadConfig: visor:// path escapes defaults directory`);
189511
+ }
189512
+ return { resolvedPath: resolved, configDir: path.dirname(resolved) };
189513
+ };
189514
+ // Shared depth counter for loadConfig calls (tracks total nesting across expression + extends)
189515
+ let loadConfigCallDepth = 0;
189516
+ // Recursively resolve { expression: "..." } nodes and extends in parsed config
189517
+ const resolveExpressions = (value, depth) => {
189518
+ if (depth > 10) {
189519
+ throw new Error('loadConfig: maximum expression nesting depth (10) exceeded');
189520
+ }
189521
+ if (Array.isArray(value)) {
189522
+ return value.map(item => resolveExpressions(item, depth + 1));
189523
+ }
189524
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
189525
+ const obj = value;
189526
+ // Handle { expression: "..." } single-key objects
189527
+ const keys = Object.keys(obj);
189528
+ if (keys.length === 1 && keys[0] === 'expression' && typeof obj.expression === 'string') {
189529
+ const sandbox = (0, sandbox_1.createSecureSandbox)();
189530
+ const result = (0, sandbox_1.compileAndRun)(sandbox, obj.expression, templateContext, {
189531
+ injectLog: true,
189532
+ logPrefix: 'loadConfig.expression',
189533
+ });
189534
+ return resolveExpressions(result, depth + 1);
189535
+ }
189536
+ // Handle extends: load base config and deep merge
189537
+ if ('extends' in obj && typeof obj.extends === 'string') {
189538
+ const extendsPath = obj.extends;
189539
+ const overrideObj = { ...obj };
189540
+ delete overrideObj.extends;
189541
+ // Recursively resolve the override object first
189542
+ const resolvedOverride = resolveExpressions(overrideObj, depth + 1);
189543
+ // Load the base config (loadConfig itself handles visor:// and expressions)
189544
+ const baseConfig = loadConfig(extendsPath);
189545
+ return deepMerge(baseConfig, resolvedOverride);
189546
+ }
189547
+ // Recursively walk all values
189548
+ const result = {};
189549
+ for (const [k, v] of Object.entries(obj)) {
189550
+ result[k] = resolveExpressions(v, depth + 1);
189551
+ }
189552
+ return result;
189553
+ }
189554
+ return value;
189555
+ };
189458
189556
  // loadConfig helper - synchronously reads, renders Liquid templates, and parses YAML/JSON
189459
189557
  // Usage in expressions: loadConfig('config/intents.yaml')
189460
189558
  // Supports {% readfile "path" %} directives that resolve relative to the config file's directory
189559
+ // Supports visor:// paths for loading framework defaults
189560
+ // Recursively resolves { expression: "..." } nodes and extends fields
189461
189561
  const loadConfig = (filePath) => {
189462
189562
  try {
189463
- // Normalize basePath for security validation
189464
- const normalizedBasePath = path.normalize(basePath);
189465
- // Resolve path relative to basePath (or use absolute path)
189466
- const resolvedPath = path.isAbsolute(filePath)
189467
- ? path.normalize(filePath)
189468
- : path.normalize(path.resolve(basePath, filePath));
189469
- // Security: Validate that resolved path stays within basePath
189470
- // This prevents path traversal attacks (e.g., ../../../etc/passwd)
189471
- const basePathWithSep = normalizedBasePath.endsWith(path.sep)
189472
- ? normalizedBasePath
189473
- : normalizedBasePath + path.sep;
189474
- if (!resolvedPath.startsWith(basePathWithSep) && resolvedPath !== normalizedBasePath) {
189475
- throw new Error(`Path '${filePath}' escapes base directory`);
189476
- }
189477
- // Get the directory of the config file for resolving relative paths in {% readfile %}
189478
- const configDir = path.dirname(resolvedPath);
189563
+ loadConfigCallDepth++;
189564
+ if (loadConfigCallDepth > 10) {
189565
+ throw new Error('maximum loadConfig nesting depth (10) exceeded');
189566
+ }
189567
+ let resolvedPath;
189568
+ let configDir;
189569
+ // Check for visor:// or visor-ee:// paths
189570
+ const visorResolved = resolveVisorPath(filePath);
189571
+ if (visorResolved) {
189572
+ resolvedPath = visorResolved.resolvedPath;
189573
+ configDir = visorResolved.configDir;
189574
+ }
189575
+ else {
189576
+ // Normalize basePath for security validation
189577
+ const normalizedBasePath = path.normalize(basePath);
189578
+ // Resolve path relative to basePath (or use absolute path)
189579
+ resolvedPath = path.isAbsolute(filePath)
189580
+ ? path.normalize(filePath)
189581
+ : path.normalize(path.resolve(basePath, filePath));
189582
+ // Security: Validate that resolved path stays within basePath
189583
+ // This prevents path traversal attacks (e.g., ../../../etc/passwd)
189584
+ const basePathWithSep = normalizedBasePath.endsWith(path.sep)
189585
+ ? normalizedBasePath
189586
+ : normalizedBasePath + path.sep;
189587
+ if (!resolvedPath.startsWith(basePathWithSep) && resolvedPath !== normalizedBasePath) {
189588
+ throw new Error(`Path '${filePath}' escapes base directory`);
189589
+ }
189590
+ // Get the directory of the config file for resolving relative paths in {% readfile %}
189591
+ configDir = path.dirname(resolvedPath);
189592
+ }
189479
189593
  // Use sync read for sandbox expression context (expressions can't be async)
189480
189594
  const rawContent = (__nccwpck_require__(79896).readFileSync)(resolvedPath, 'utf-8');
189481
189595
  // Render Liquid templates (e.g., {% readfile "docs/file.md" %}) with basePath context
@@ -189485,13 +189599,18 @@ class WorkflowCheckProvider extends check_provider_interface_1.CheckProvider {
189485
189599
  });
189486
189600
  // Parse as YAML with JSON_SCHEMA for security (prevents custom type execution)
189487
189601
  // JSON_SCHEMA is safer than DEFAULT but still parses basic types (numbers, booleans, null)
189488
- return yaml.load(renderedContent, { schema: yaml.JSON_SCHEMA });
189602
+ const parsed = yaml.load(renderedContent, { schema: yaml.JSON_SCHEMA });
189603
+ // Recursively resolve expressions and extends in the parsed result
189604
+ return resolveExpressions(parsed, 0);
189489
189605
  }
189490
189606
  catch (error) {
189491
189607
  const msg = error instanceof Error ? error.message : String(error);
189492
189608
  logger_1.logger.error(`[WorkflowProvider] loadConfig failed for '${filePath}': ${msg}`);
189493
189609
  throw new Error(`loadConfig('${filePath}') failed: ${msg}`);
189494
189610
  }
189611
+ finally {
189612
+ loadConfigCallDepth--;
189613
+ }
189495
189614
  };
189496
189615
  const templateContext = {
189497
189616
  pr: prInfo,
@@ -278670,13 +278789,44 @@ var init_TaskManager = __esm({
278670
278789
  this.tasks = newTasks;
278671
278790
  }
278672
278791
  /**
278673
- * Create multiple tasks in batch
278792
+ * Create multiple tasks in batch, resolving user-provided IDs to auto-generated IDs.
278793
+ * If any task fails validation, no tasks are created (atomic operation).
278674
278794
  * @param {Object[]} tasksData - Array of task data objects
278675
278795
  * @returns {Task[]} Created tasks
278676
278796
  */
278677
278797
  createTasks(tasksData) {
278678
- const createdTasks = [];
278798
+ const idMap = /* @__PURE__ */ new Map();
278799
+ const batchAutoIds = /* @__PURE__ */ new Set();
278800
+ let nextCounter = this.taskCounter;
278679
278801
  for (const taskData of tasksData) {
278802
+ nextCounter++;
278803
+ const autoId = `task-${nextCounter}`;
278804
+ batchAutoIds.add(autoId);
278805
+ if (taskData.id) {
278806
+ idMap.set(taskData.id, autoId);
278807
+ }
278808
+ }
278809
+ const resolvedTasksData = tasksData.map((taskData) => {
278810
+ const resolved = { ...taskData };
278811
+ delete resolved.id;
278812
+ if (resolved.dependencies) {
278813
+ resolved.dependencies = resolved.dependencies.map((depId) => {
278814
+ if (idMap.has(depId)) return idMap.get(depId);
278815
+ if (this.tasks.has(depId) || batchAutoIds.has(depId)) return depId;
278816
+ throw new Error(`Dependency "${depId}" does not exist. Available tasks: ${this._getAvailableTaskIds()}${idMap.size > 0 ? `, batch IDs: ${Array.from(idMap.keys()).join(", ")}` : ""}`);
278817
+ });
278818
+ }
278819
+ if (resolved.after) {
278820
+ if (idMap.has(resolved.after)) {
278821
+ resolved.after = idMap.get(resolved.after);
278822
+ } else if (!this.tasks.has(resolved.after) && !batchAutoIds.has(resolved.after)) {
278823
+ 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(", ")}` : ""}`);
278824
+ }
278825
+ }
278826
+ return resolved;
278827
+ });
278828
+ const createdTasks = [];
278829
+ for (const taskData of resolvedTasksData) {
278680
278830
  const task = this.createTask(taskData);
278681
278831
  createdTasks.push(task);
278682
278832
  }
@@ -395515,7 +395665,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
395515
395665
  /***/ ((module) => {
395516
395666
 
395517
395667
  "use strict";
395518
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.159","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"]}}');
395668
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.160","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"]}}');
395519
395669
 
395520
395670
  /***/ })
395521
395671