@probelabs/visor 0.1.166 → 0.1.167

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 (72) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/frontends/github-frontend.d.ts.map +1 -1
  3. package/dist/index.js +344 -29
  4. package/dist/output/traces/{run-2026-03-06T13-08-34-152Z.ndjson → run-2026-03-06T13-29-14-416Z.ndjson} +84 -84
  5. package/dist/output/traces/{run-2026-03-06T13-09-10-593Z.ndjson → run-2026-03-06T13-29-52-749Z.ndjson} +1892 -1892
  6. package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs → check-provider-registry-6WR2SG66.mjs} +3 -3
  7. package/dist/sdk/{check-provider-registry-TGPICTHD.mjs → check-provider-registry-GPV5DYN5.mjs} +3 -3
  8. package/dist/sdk/{check-provider-registry-WXEBJWXY.mjs → check-provider-registry-P356JWTA.mjs} +6 -6
  9. package/dist/sdk/{chunk-WSYVK6ML.mjs → chunk-2G2PJKHM.mjs} +297 -31
  10. package/dist/sdk/chunk-2G2PJKHM.mjs.map +1 -0
  11. package/dist/sdk/{chunk-HFCOZPAS.mjs → chunk-HM3RZ3NP.mjs} +2 -2
  12. package/dist/sdk/{chunk-HFCOZPAS.mjs.map → chunk-HM3RZ3NP.mjs.map} +1 -1
  13. package/dist/sdk/{chunk-DEAPFYNX.mjs → chunk-KYBKVKBS.mjs} +7 -1
  14. package/dist/sdk/{chunk-DEAPFYNX.mjs.map → chunk-KYBKVKBS.mjs.map} +1 -1
  15. package/dist/sdk/{chunk-KKGMGB4X.mjs → chunk-MHLP6P4V.mjs} +297 -31
  16. package/dist/sdk/chunk-MHLP6P4V.mjs.map +1 -0
  17. package/dist/sdk/{chunk-OQ3CML4F.mjs → chunk-UNUZFJ5I.mjs} +3 -3
  18. package/dist/sdk/{chunk-KBTFMYZQ.mjs → chunk-XYQSWTGC.mjs} +2 -2
  19. package/dist/sdk/{chunk-ZQR4AGS3.mjs → chunk-YSQV7N5H.mjs} +304 -38
  20. package/dist/sdk/chunk-YSQV7N5H.mjs.map +1 -0
  21. package/dist/sdk/{config-D6WF2U4B.mjs → config-DP5QU3XC.mjs} +2 -2
  22. package/dist/sdk/{failure-condition-evaluator-5EAESM44.mjs → failure-condition-evaluator-VWQ54IK4.mjs} +3 -3
  23. package/dist/sdk/{github-frontend-BPRRUIGB.mjs → github-frontend-SOVBEAK4.mjs} +21 -3
  24. package/dist/sdk/{github-frontend-BPRRUIGB.mjs.map → github-frontend-SOVBEAK4.mjs.map} +1 -1
  25. package/dist/sdk/{github-frontend-P274ISBJ.mjs → github-frontend-VM52NX7N.mjs} +19 -1
  26. package/dist/sdk/{github-frontend-P274ISBJ.mjs.map → github-frontend-VM52NX7N.mjs.map} +1 -1
  27. package/dist/sdk/{host-753E6PKF.mjs → host-7MGCKSHM.mjs} +2 -2
  28. package/dist/sdk/{host-AIMRV5YL.mjs → host-JHMDZR6P.mjs} +2 -2
  29. package/dist/sdk/{routing-QHWSMAIH.mjs → routing-3WG46XWU.mjs} +4 -4
  30. package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs → schedule-tool-B6SEZ77N.mjs} +3 -3
  31. package/dist/sdk/{schedule-tool-MQHISNJ6.mjs → schedule-tool-MPHHE2IM.mjs} +3 -3
  32. package/dist/sdk/{schedule-tool-ZVOSSFN2.mjs → schedule-tool-SPJWY2Y2.mjs} +6 -6
  33. package/dist/sdk/{schedule-tool-handler-BGOL2TOP.mjs → schedule-tool-handler-SUYGQJ63.mjs} +3 -3
  34. package/dist/sdk/{schedule-tool-handler-TZYXM664.mjs → schedule-tool-handler-V7A4AQGS.mjs} +3 -3
  35. package/dist/sdk/{schedule-tool-handler-4NCS4ARE.mjs → schedule-tool-handler-VNAVYBCM.mjs} +6 -6
  36. package/dist/sdk/sdk.js +312 -22
  37. package/dist/sdk/sdk.js.map +1 -1
  38. package/dist/sdk/sdk.mjs +5 -5
  39. package/dist/sdk/{trace-helpers-CTHTK6V5.mjs → trace-helpers-7BSOH35A.mjs} +2 -2
  40. package/dist/sdk/{workflow-check-provider-3M5LXLLX.mjs → workflow-check-provider-AECYZCBK.mjs} +3 -3
  41. package/dist/sdk/{workflow-check-provider-QKHL6AFT.mjs → workflow-check-provider-N4ZTFOH6.mjs} +3 -3
  42. package/dist/sdk/{workflow-check-provider-UTNO6XN6.mjs → workflow-check-provider-X7ZGHZA6.mjs} +6 -6
  43. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
  44. package/dist/traces/{run-2026-03-06T13-08-34-152Z.ndjson → run-2026-03-06T13-29-14-416Z.ndjson} +84 -84
  45. package/dist/traces/{run-2026-03-06T13-09-10-593Z.ndjson → run-2026-03-06T13-29-52-749Z.ndjson} +1892 -1892
  46. package/dist/utils/fair-concurrency-limiter.d.ts +56 -0
  47. package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -0
  48. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/sdk/chunk-KKGMGB4X.mjs.map +0 -1
  51. package/dist/sdk/chunk-WSYVK6ML.mjs.map +0 -1
  52. package/dist/sdk/chunk-ZQR4AGS3.mjs.map +0 -1
  53. /package/dist/sdk/{check-provider-registry-TGPICTHD.mjs.map → check-provider-registry-6WR2SG66.mjs.map} +0 -0
  54. /package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs.map → check-provider-registry-GPV5DYN5.mjs.map} +0 -0
  55. /package/dist/sdk/{check-provider-registry-WXEBJWXY.mjs.map → check-provider-registry-P356JWTA.mjs.map} +0 -0
  56. /package/dist/sdk/{chunk-OQ3CML4F.mjs.map → chunk-UNUZFJ5I.mjs.map} +0 -0
  57. /package/dist/sdk/{chunk-KBTFMYZQ.mjs.map → chunk-XYQSWTGC.mjs.map} +0 -0
  58. /package/dist/sdk/{config-D6WF2U4B.mjs.map → config-DP5QU3XC.mjs.map} +0 -0
  59. /package/dist/sdk/{failure-condition-evaluator-5EAESM44.mjs.map → failure-condition-evaluator-VWQ54IK4.mjs.map} +0 -0
  60. /package/dist/sdk/{host-753E6PKF.mjs.map → host-7MGCKSHM.mjs.map} +0 -0
  61. /package/dist/sdk/{host-AIMRV5YL.mjs.map → host-JHMDZR6P.mjs.map} +0 -0
  62. /package/dist/sdk/{routing-QHWSMAIH.mjs.map → routing-3WG46XWU.mjs.map} +0 -0
  63. /package/dist/sdk/{schedule-tool-MQHISNJ6.mjs.map → schedule-tool-B6SEZ77N.mjs.map} +0 -0
  64. /package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs.map → schedule-tool-MPHHE2IM.mjs.map} +0 -0
  65. /package/dist/sdk/{schedule-tool-ZVOSSFN2.mjs.map → schedule-tool-SPJWY2Y2.mjs.map} +0 -0
  66. /package/dist/sdk/{schedule-tool-handler-4NCS4ARE.mjs.map → schedule-tool-handler-SUYGQJ63.mjs.map} +0 -0
  67. /package/dist/sdk/{schedule-tool-handler-BGOL2TOP.mjs.map → schedule-tool-handler-V7A4AQGS.mjs.map} +0 -0
  68. /package/dist/sdk/{schedule-tool-handler-TZYXM664.mjs.map → schedule-tool-handler-VNAVYBCM.mjs.map} +0 -0
  69. /package/dist/sdk/{trace-helpers-CTHTK6V5.mjs.map → trace-helpers-7BSOH35A.mjs.map} +0 -0
  70. /package/dist/sdk/{workflow-check-provider-3M5LXLLX.mjs.map → workflow-check-provider-AECYZCBK.mjs.map} +0 -0
  71. /package/dist/sdk/{workflow-check-provider-QKHL6AFT.mjs.map → workflow-check-provider-N4ZTFOH6.mjs.map} +0 -0
  72. /package/dist/sdk/{workflow-check-provider-UTNO6XN6.mjs.map → workflow-check-provider-X7ZGHZA6.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAU9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAiGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuL7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAqG7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAU9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAuGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuL7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAqG7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"github-frontend.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/github-frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAmBxD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,iBAAiB,CAAqD;IAG9E,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,WAAW,CAAyC;IACrD,gBAAgB,EAAE,MAAM,CAAQ;IAEvC,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IA4K3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBb,aAAa;IAU3B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAetB;;;;;;;;OAQG;YACW,oBAAoB;IA8ClC;;OAEG;YACW,2BAA2B;IAkEzC,OAAO,CAAC,iBAAiB;YAeX,qBAAqB;IA4CnC,OAAO,CAAC,aAAa;IAoErB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;YACW,sBAAsB;IA6DpC,OAAO,CAAC,cAAc;YAgBR,QAAQ;IAWtB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"github-frontend.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/github-frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAmBxD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,iBAAiB,CAAqD;IAG9E,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,WAAW,CAAyC;IACrD,gBAAgB,EAAE,MAAM,CAAQ;IAEvC,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IA4K3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBb,aAAa;IAU3B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAetB;;;;;;;;OAQG;YACW,oBAAoB;IAgElC;;OAEG;YACW,2BAA2B;IAkEzC,OAAO,CAAC,iBAAiB;YAeX,qBAAqB;IA4CnC,OAAO,CAAC,aAAa;IAoErB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;YACW,sBAAsB;IA6DpC,OAAO,CAAC,cAAc;YAgBR,QAAQ;IAWtB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- process.env.VISOR_VERSION = '0.1.166';
2
+ process.env.VISOR_VERSION = '0.1.167';
3
3
  process.env.PROBE_VERSION = '0.6.0-rc280';
4
- process.env.VISOR_COMMIT_SHA = 'eff5ed2df07d89e22e1c88d7d96b97572b0fd908';
5
- process.env.VISOR_COMMIT_SHORT = 'eff5ed2df';
4
+ process.env.VISOR_COMMIT_SHA = '1e0341f43c4243f35be19f2043e34b954fdecde1';
5
+ process.env.VISOR_COMMIT_SHORT = '1e0341f4';
6
6
  /******/ (() => { // webpackBootstrap
7
7
  /******/ var __webpack_modules__ = ({
8
8
 
@@ -164097,6 +164097,12 @@ class ConfigManager {
164097
164097
  if (workflowData.on) {
164098
164098
  visorConfig.on = workflowData.on;
164099
164099
  }
164100
+ if (workflowData.sandboxes) {
164101
+ visorConfig.sandboxes = workflowData.sandboxes;
164102
+ }
164103
+ if (workflowData.sandbox) {
164104
+ visorConfig.sandbox = workflowData.sandbox;
164105
+ }
164100
164106
  logger_1.logger.debug(`Standalone workflow config has ${Object.keys(workflowSteps).length} workflow steps as checks`);
164101
164107
  logger_1.logger.debug(`Workflow step names: ${Object.keys(workflowSteps).join(', ')}`);
164102
164108
  logger_1.logger.debug(`Config keys after conversion: ${Object.keys(visorConfig).join(', ')}`);
@@ -168178,8 +168184,14 @@ ${end}`);
168178
168184
  // Immediately set our lock so subsequent callers will wait for us
168179
168185
  this.updateLocks.set(group, ourLock);
168180
168186
  try {
168181
- // Wait for the previous lock to complete (if any)
168187
+ // Wait for the previous update to complete (if any)
168182
168188
  if (existingLock) {
168189
+ logger_1.logger.info(`[github-frontend] Comment update for group "${group}" queued, waiting for previous update to finish...`);
168190
+ const queuedAt = Date.now();
168191
+ const reminder = setInterval(() => {
168192
+ const waited = Math.round((Date.now() - queuedAt) / 1000);
168193
+ logger_1.logger.info(`[github-frontend] Comment update for group "${group}" still queued (${waited}s).`);
168194
+ }, 10000);
168183
168195
  try {
168184
168196
  await existingLock;
168185
168197
  }
@@ -168187,6 +168199,13 @@ ${end}`);
168187
168199
  logger_1.logger.warn(`[github-frontend] Previous update for group ${group} failed: ${error instanceof Error ? error.message : error}`);
168188
168200
  // Continue with current update despite previous failure
168189
168201
  }
168202
+ finally {
168203
+ clearInterval(reminder);
168204
+ const waitedMs = Date.now() - queuedAt;
168205
+ if (waitedMs > 100) {
168206
+ logger_1.logger.info(`[github-frontend] Comment update for group "${group}" dequeued after ${Math.round(waitedMs / 1000)}s.`);
168207
+ }
168208
+ }
168190
168209
  }
168191
168210
  // Now perform our update
168192
168211
  await this.performGroupedCommentUpdate(ctx, comments, group, changedIds);
@@ -201271,20 +201290,7 @@ const memory_store_1 = __nccwpck_require__(18216);
201271
201290
  const human_id_1 = __nccwpck_require__(30920);
201272
201291
  const logger_1 = __nccwpck_require__(86999);
201273
201292
  const workspace_manager_1 = __nccwpck_require__(6134);
201274
- // Lazy-resolve DelegationManager from @probelabs/probe.
201275
- // The class may not be exported in older published versions, so we
201276
- // fall back gracefully to avoid breaking the build.
201277
- let _DelegationManager = null;
201278
- try {
201279
- // eslint-disable-next-line @typescript-eslint/no-var-requires
201280
- const probe = __nccwpck_require__(83841);
201281
- if (probe && typeof probe.DelegationManager === 'function') {
201282
- _DelegationManager = probe.DelegationManager;
201283
- }
201284
- }
201285
- catch {
201286
- // Not available — max_ai_concurrency will be silently ignored
201287
- }
201293
+ const fair_concurrency_limiter_1 = __nccwpck_require__(13656);
201288
201294
  /**
201289
201295
  * Apply minimal criticality defaults in-place.
201290
201296
  * This is a no-behavior-change scaffold: we only default missing
@@ -201358,14 +201364,40 @@ function buildEngineContextForRun(workingDirectory, config, prInfo, debug, maxPa
201358
201364
  // Initialize journal and memory
201359
201365
  const journal = new snapshot_store_1.ExecutionJournal();
201360
201366
  const memory = memory_store_1.MemoryStore.getInstance(clonedConfig.memory);
201361
- // Create shared AI concurrency limiter if configured
201367
+ // Create shared AI concurrency limiter if configured.
201368
+ // Uses a global singleton fair limiter: round-robin across sessions so
201369
+ // no single user/task can starve others.
201362
201370
  let sharedConcurrencyLimiter = undefined;
201363
- if (clonedConfig.max_ai_concurrency && _DelegationManager) {
201364
- sharedConcurrencyLimiter = new _DelegationManager({
201365
- maxConcurrent: clonedConfig.max_ai_concurrency,
201366
- maxPerSession: 999, // No per-session limit needed for global AI gating
201367
- });
201368
- logger_1.logger.debug(`[EngineContext] Created shared AI concurrency limiter (max: ${clonedConfig.max_ai_concurrency})`);
201371
+ const sessionId = (0, human_id_1.generateHumanId)();
201372
+ if (clonedConfig.max_ai_concurrency) {
201373
+ const fairLimiter = fair_concurrency_limiter_1.FairConcurrencyLimiter.getInstance(clonedConfig.max_ai_concurrency);
201374
+ // Bind this engine run's session ID into acquire/release so the fair limiter
201375
+ // knows which user/task each call belongs to. Probe calls acquire(null)
201376
+ // we intercept and inject our session ID.
201377
+ sharedConcurrencyLimiter = {
201378
+ async acquire(parentSessionId, _dbg, queueTimeout) {
201379
+ // Use visor session ID if probe didn't provide one
201380
+ const sid = parentSessionId || sessionId;
201381
+ return fairLimiter.acquire(sid, _dbg, queueTimeout);
201382
+ },
201383
+ release(parentSessionId, _dbg) {
201384
+ const sid = parentSessionId || sessionId;
201385
+ return fairLimiter.release(sid, _dbg);
201386
+ },
201387
+ tryAcquire(parentSessionId) {
201388
+ const sid = parentSessionId || sessionId;
201389
+ return fairLimiter.tryAcquire(sid);
201390
+ },
201391
+ getStats() {
201392
+ return fairLimiter.getStats();
201393
+ },
201394
+ shutdown() {
201395
+ // Don't destroy the singleton — other sessions may still use it
201396
+ },
201397
+ cleanup() {
201398
+ // Don't destroy the singleton — other sessions may still use it
201399
+ },
201400
+ };
201369
201401
  }
201370
201402
  return {
201371
201403
  mode: 'state-machine',
@@ -201375,7 +201407,7 @@ function buildEngineContextForRun(workingDirectory, config, prInfo, debug, maxPa
201375
201407
  memory,
201376
201408
  workingDirectory,
201377
201409
  originalWorkingDirectory: workingDirectory,
201378
- sessionId: (0, human_id_1.generateHumanId)(),
201410
+ sessionId,
201379
201411
  event: prInfo.eventType,
201380
201412
  debug,
201381
201413
  maxParallelism,
@@ -204805,7 +204837,27 @@ async function executeCheckGroup(checks, context, state, maxParallelism, emitEve
204805
204837
  catch { }
204806
204838
  // Wait if pool is full
204807
204839
  if (pool.length >= maxParallelism) {
204808
- await Promise.race(pool);
204840
+ const activeCount = pool.filter(p => !p._settled).length;
204841
+ logger_1.logger.info(`[LevelDispatch] Check pool full (${activeCount}/${maxParallelism} active). ` +
204842
+ `Check "${checkId}" queued, waiting for a slot...`);
204843
+ const queuedAt = Date.now();
204844
+ // Periodic reminder while waiting
204845
+ const reminder = setInterval(() => {
204846
+ const waited = Math.round((Date.now() - queuedAt) / 1000);
204847
+ const stillActive = pool.filter(p => !p._settled).length;
204848
+ logger_1.logger.info(`[LevelDispatch] Check "${checkId}" still queued (${waited}s). ` +
204849
+ `${stillActive}/${maxParallelism} slots busy.`);
204850
+ }, 15000);
204851
+ try {
204852
+ await Promise.race(pool);
204853
+ }
204854
+ finally {
204855
+ clearInterval(reminder);
204856
+ }
204857
+ const waitedMs = Date.now() - queuedAt;
204858
+ if (waitedMs > 100) {
204859
+ logger_1.logger.info(`[LevelDispatch] Check "${checkId}" dequeued after ${Math.round(waitedMs / 1000)}s wait.`);
204860
+ }
204809
204861
  // Remove completed promises
204810
204862
  pool.splice(0, pool.length, ...pool.filter(p => {
204811
204863
  const settled = p._settled;
@@ -220391,6 +220443,254 @@ class EnvironmentResolver {
220391
220443
  exports.EnvironmentResolver = EnvironmentResolver;
220392
220444
 
220393
220445
 
220446
+ /***/ }),
220447
+
220448
+ /***/ 13656:
220449
+ /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
220450
+
220451
+ "use strict";
220452
+
220453
+ /**
220454
+ * Fair round-robin concurrency limiter.
220455
+ *
220456
+ * Single global limiter for all AI/delegation calls in the process.
220457
+ * Instead of FIFO (which lets one session hog all slots), this grants
220458
+ * slots in round-robin order across sessions so every user gets fair access.
220459
+ *
220460
+ * Usage:
220461
+ * const limiter = FairConcurrencyLimiter.getInstance(maxConcurrent);
220462
+ * await limiter.acquire(sessionId); // blocks until slot available
220463
+ * try { ... } finally { limiter.release(sessionId); }
220464
+ */
220465
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
220466
+ exports.FairConcurrencyLimiter = void 0;
220467
+ const logger_1 = __nccwpck_require__(86999);
220468
+ class FairConcurrencyLimiter {
220469
+ maxConcurrent;
220470
+ globalActive = 0;
220471
+ // Per-session FIFO queues
220472
+ sessionQueues = new Map();
220473
+ // Round-robin order of sessions with waiting entries
220474
+ roundRobinSessions = [];
220475
+ roundRobinIndex = 0;
220476
+ // Per-session active count (for stats)
220477
+ sessionActive = new Map();
220478
+ constructor(maxConcurrent) {
220479
+ this.maxConcurrent = maxConcurrent;
220480
+ }
220481
+ static getInstance(maxConcurrent) {
220482
+ const key = Symbol.for('visor.fairConcurrencyLimiter');
220483
+ let instance = globalThis[key];
220484
+ if (!instance) {
220485
+ instance = new FairConcurrencyLimiter(maxConcurrent);
220486
+ globalThis[key] = instance;
220487
+ logger_1.logger.info(`[FairLimiter] Created global fair concurrency limiter (max: ${maxConcurrent})`);
220488
+ }
220489
+ else if (instance.maxConcurrent !== maxConcurrent) {
220490
+ // Config changed — update max (live resize)
220491
+ const old = instance.maxConcurrent;
220492
+ instance.maxConcurrent = maxConcurrent;
220493
+ logger_1.logger.info(`[FairLimiter] Updated max concurrency: ${old} -> ${maxConcurrent}`);
220494
+ // Process queue in case new slots opened up
220495
+ instance._processQueue();
220496
+ }
220497
+ return instance;
220498
+ }
220499
+ /**
220500
+ * Try to acquire a slot immediately (non-blocking).
220501
+ */
220502
+ tryAcquire(sessionId) {
220503
+ if (this.globalActive >= this.maxConcurrent) {
220504
+ return false;
220505
+ }
220506
+ this.globalActive++;
220507
+ const sid = sessionId || '__anonymous__';
220508
+ this.sessionActive.set(sid, (this.sessionActive.get(sid) || 0) + 1);
220509
+ return true;
220510
+ }
220511
+ /**
220512
+ * Acquire a slot, waiting in a fair queue if necessary.
220513
+ * Sessions are served round-robin so no single session can starve others.
220514
+ */
220515
+ async acquire(sessionId, _debug, queueTimeout) {
220516
+ const sid = sessionId || '__anonymous__';
220517
+ // Fast path — slot available
220518
+ if (this.tryAcquire(sid)) {
220519
+ return true;
220520
+ }
220521
+ // Compute queue stats for logging
220522
+ const totalQueued = this._totalQueued();
220523
+ const sessionsWaiting = this.sessionQueues.size;
220524
+ const sessionQueueLen = this.sessionQueues.get(sid)?.length || 0;
220525
+ logger_1.logger.info(`[FairLimiter] Slot unavailable (${this.globalActive}/${this.maxConcurrent} active). ` +
220526
+ `Session "${sid}" queued (${sessionQueueLen} own + ${totalQueued} total across ${sessionsWaiting} sessions). Waiting...`);
220527
+ const queuedAt = Date.now();
220528
+ const effectiveTimeout = queueTimeout ?? 120000; // default 2 min
220529
+ return new Promise((resolve, reject) => {
220530
+ const entry = { resolve, reject, queuedAt };
220531
+ // Periodic reminder every 15s
220532
+ entry.reminder = setInterval(() => {
220533
+ const waited = Math.round((Date.now() - queuedAt) / 1000);
220534
+ const curQueued = this._totalQueued();
220535
+ const curSessions = this._waitingSessions();
220536
+ logger_1.logger.info(`[FairLimiter] Session "${sid}" still waiting (${waited}s). ` +
220537
+ `${this.globalActive}/${this.maxConcurrent} active, ` +
220538
+ `${curQueued} queued across ${curSessions} sessions.`);
220539
+ }, 15000);
220540
+ // Add to this session's queue
220541
+ let queue = this.sessionQueues.get(sid);
220542
+ if (!queue) {
220543
+ queue = [];
220544
+ this.sessionQueues.set(sid, queue);
220545
+ // Add to round-robin rotation
220546
+ this.roundRobinSessions.push(sid);
220547
+ }
220548
+ queue.push(entry);
220549
+ // Timeout
220550
+ if (effectiveTimeout > 0) {
220551
+ setTimeout(() => {
220552
+ // Remove from queue if still there
220553
+ const q = this.sessionQueues.get(sid);
220554
+ if (q) {
220555
+ const idx = q.indexOf(entry);
220556
+ if (idx !== -1) {
220557
+ q.splice(idx, 1);
220558
+ if (q.length === 0) {
220559
+ this.sessionQueues.delete(sid);
220560
+ this._removeFromRoundRobin(sid);
220561
+ }
220562
+ this._clearReminder(entry);
220563
+ reject(new Error(`[FairLimiter] Queue timeout: session "${sid}" waited ${effectiveTimeout}ms for a slot`));
220564
+ }
220565
+ }
220566
+ }, effectiveTimeout);
220567
+ }
220568
+ });
220569
+ }
220570
+ /**
220571
+ * Release a slot and grant the next one fairly (round-robin across sessions).
220572
+ */
220573
+ release(sessionId, _debug) {
220574
+ const sid = sessionId || '__anonymous__';
220575
+ this.globalActive = Math.max(0, this.globalActive - 1);
220576
+ const active = this.sessionActive.get(sid);
220577
+ if (active !== undefined) {
220578
+ if (active <= 1) {
220579
+ this.sessionActive.delete(sid);
220580
+ }
220581
+ else {
220582
+ this.sessionActive.set(sid, active - 1);
220583
+ }
220584
+ }
220585
+ this._processQueue();
220586
+ }
220587
+ /**
220588
+ * Round-robin queue processing: cycle through sessions and grant one slot per session per round.
220589
+ */
220590
+ _processQueue() {
220591
+ const toGrant = [];
220592
+ while (this.globalActive < this.maxConcurrent && this.roundRobinSessions.length > 0) {
220593
+ // Wrap index
220594
+ if (this.roundRobinIndex >= this.roundRobinSessions.length) {
220595
+ this.roundRobinIndex = 0;
220596
+ }
220597
+ const sid = this.roundRobinSessions[this.roundRobinIndex];
220598
+ const queue = this.sessionQueues.get(sid);
220599
+ if (!queue || queue.length === 0) {
220600
+ // Session has no more waiters — remove from rotation
220601
+ this.sessionQueues.delete(sid);
220602
+ this.roundRobinSessions.splice(this.roundRobinIndex, 1);
220603
+ // Don't increment index — next session slides into this position
220604
+ continue;
220605
+ }
220606
+ // Grant the oldest entry from this session
220607
+ const entry = queue.shift();
220608
+ if (queue.length === 0) {
220609
+ this.sessionQueues.delete(sid);
220610
+ this.roundRobinSessions.splice(this.roundRobinIndex, 1);
220611
+ // Don't increment — next session slides in
220612
+ }
220613
+ else {
220614
+ this.roundRobinIndex++;
220615
+ }
220616
+ this.globalActive++;
220617
+ this.sessionActive.set(sid, (this.sessionActive.get(sid) || 0) + 1);
220618
+ toGrant.push({ entry, sid });
220619
+ }
220620
+ // Resolve outside the loop to avoid reentrancy issues
220621
+ for (const { entry, sid } of toGrant) {
220622
+ this._clearReminder(entry);
220623
+ const waitedMs = Date.now() - entry.queuedAt;
220624
+ if (waitedMs > 100) {
220625
+ logger_1.logger.info(`[FairLimiter] Session "${sid}" acquired slot after ${Math.round(waitedMs / 1000)}s wait.`);
220626
+ }
220627
+ // Defer to next tick to avoid blocking event loop
220628
+ setImmediate(() => entry.resolve(true));
220629
+ }
220630
+ }
220631
+ getStats() {
220632
+ const perSession = {};
220633
+ const allSessions = new Set([...this.sessionActive.keys(), ...this.sessionQueues.keys()]);
220634
+ for (const sid of allSessions) {
220635
+ perSession[sid] = {
220636
+ active: this.sessionActive.get(sid) || 0,
220637
+ queued: this.sessionQueues.get(sid)?.length || 0,
220638
+ };
220639
+ }
220640
+ return {
220641
+ globalActive: this.globalActive,
220642
+ maxConcurrent: this.maxConcurrent,
220643
+ queueSize: this._totalQueued(),
220644
+ waitingSessions: this._waitingSessions(),
220645
+ perSession,
220646
+ };
220647
+ }
220648
+ cleanup() {
220649
+ // Clear all reminders
220650
+ for (const queue of this.sessionQueues.values()) {
220651
+ for (const entry of queue) {
220652
+ this._clearReminder(entry);
220653
+ }
220654
+ }
220655
+ this.sessionQueues.clear();
220656
+ this.roundRobinSessions = [];
220657
+ this.roundRobinIndex = 0;
220658
+ // Remove singleton
220659
+ const key = Symbol.for('visor.fairConcurrencyLimiter');
220660
+ delete globalThis[key];
220661
+ }
220662
+ shutdown() {
220663
+ this.cleanup();
220664
+ }
220665
+ // -- helpers --
220666
+ _totalQueued() {
220667
+ let n = 0;
220668
+ for (const q of this.sessionQueues.values())
220669
+ n += q.length;
220670
+ return n;
220671
+ }
220672
+ _waitingSessions() {
220673
+ return this.roundRobinSessions.length;
220674
+ }
220675
+ _removeFromRoundRobin(sid) {
220676
+ const idx = this.roundRobinSessions.indexOf(sid);
220677
+ if (idx !== -1) {
220678
+ this.roundRobinSessions.splice(idx, 1);
220679
+ if (this.roundRobinIndex > idx) {
220680
+ this.roundRobinIndex--;
220681
+ }
220682
+ }
220683
+ }
220684
+ _clearReminder(entry) {
220685
+ if (entry.reminder) {
220686
+ clearInterval(entry.reminder);
220687
+ entry.reminder = undefined;
220688
+ }
220689
+ }
220690
+ }
220691
+ exports.FairConcurrencyLimiter = FairConcurrencyLimiter;
220692
+
220693
+
220394
220694
  /***/ }),
220395
220695
 
220396
220696
  /***/ 69342:
@@ -220789,7 +221089,22 @@ async function acquirePromptLock() {
220789
221089
  activePrompt = true;
220790
221090
  return;
220791
221091
  }
220792
- await new Promise(resolve => waiters.push(resolve));
221092
+ console.error(`[human-input] Prompt queued, waiting for active prompt to finish (${waiters.length} already waiting).`);
221093
+ const queuedAt = Date.now();
221094
+ const reminder = setInterval(() => {
221095
+ const waited = Math.round((Date.now() - queuedAt) / 1000);
221096
+ console.error(`[human-input] Still waiting for prompt lock (${waited}s, ${waiters.length} in queue).`);
221097
+ }, 10000);
221098
+ try {
221099
+ await new Promise(resolve => waiters.push(resolve));
221100
+ }
221101
+ finally {
221102
+ clearInterval(reminder);
221103
+ const waitedMs = Date.now() - queuedAt;
221104
+ if (waitedMs > 100) {
221105
+ console.error(`[human-input] Prompt lock acquired after ${Math.round(waitedMs / 1000)}s wait.`);
221106
+ }
221107
+ }
220793
221108
  activePrompt = true;
220794
221109
  }
220795
221110
  function releasePromptLock() {
@@ -396151,7 +396466,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
396151
396466
  /***/ ((module) => {
396152
396467
 
396153
396468
  "use strict";
396154
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.166","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-rc280","@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"]}}');
396469
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.167","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-rc280","@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"]}}');
396155
396470
 
396156
396471
  /***/ })
396157
396472