@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.
- package/dist/config.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts.map +1 -1
- package/dist/index.js +344 -29
- package/dist/output/traces/{run-2026-03-06T13-08-34-152Z.ndjson → run-2026-03-06T13-29-14-416Z.ndjson} +84 -84
- package/dist/output/traces/{run-2026-03-06T13-09-10-593Z.ndjson → run-2026-03-06T13-29-52-749Z.ndjson} +1892 -1892
- package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs → check-provider-registry-6WR2SG66.mjs} +3 -3
- package/dist/sdk/{check-provider-registry-TGPICTHD.mjs → check-provider-registry-GPV5DYN5.mjs} +3 -3
- package/dist/sdk/{check-provider-registry-WXEBJWXY.mjs → check-provider-registry-P356JWTA.mjs} +6 -6
- package/dist/sdk/{chunk-WSYVK6ML.mjs → chunk-2G2PJKHM.mjs} +297 -31
- package/dist/sdk/chunk-2G2PJKHM.mjs.map +1 -0
- package/dist/sdk/{chunk-HFCOZPAS.mjs → chunk-HM3RZ3NP.mjs} +2 -2
- package/dist/sdk/{chunk-HFCOZPAS.mjs.map → chunk-HM3RZ3NP.mjs.map} +1 -1
- package/dist/sdk/{chunk-DEAPFYNX.mjs → chunk-KYBKVKBS.mjs} +7 -1
- package/dist/sdk/{chunk-DEAPFYNX.mjs.map → chunk-KYBKVKBS.mjs.map} +1 -1
- package/dist/sdk/{chunk-KKGMGB4X.mjs → chunk-MHLP6P4V.mjs} +297 -31
- package/dist/sdk/chunk-MHLP6P4V.mjs.map +1 -0
- package/dist/sdk/{chunk-OQ3CML4F.mjs → chunk-UNUZFJ5I.mjs} +3 -3
- package/dist/sdk/{chunk-KBTFMYZQ.mjs → chunk-XYQSWTGC.mjs} +2 -2
- package/dist/sdk/{chunk-ZQR4AGS3.mjs → chunk-YSQV7N5H.mjs} +304 -38
- package/dist/sdk/chunk-YSQV7N5H.mjs.map +1 -0
- package/dist/sdk/{config-D6WF2U4B.mjs → config-DP5QU3XC.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-5EAESM44.mjs → failure-condition-evaluator-VWQ54IK4.mjs} +3 -3
- package/dist/sdk/{github-frontend-BPRRUIGB.mjs → github-frontend-SOVBEAK4.mjs} +21 -3
- package/dist/sdk/{github-frontend-BPRRUIGB.mjs.map → github-frontend-SOVBEAK4.mjs.map} +1 -1
- package/dist/sdk/{github-frontend-P274ISBJ.mjs → github-frontend-VM52NX7N.mjs} +19 -1
- package/dist/sdk/{github-frontend-P274ISBJ.mjs.map → github-frontend-VM52NX7N.mjs.map} +1 -1
- package/dist/sdk/{host-753E6PKF.mjs → host-7MGCKSHM.mjs} +2 -2
- package/dist/sdk/{host-AIMRV5YL.mjs → host-JHMDZR6P.mjs} +2 -2
- package/dist/sdk/{routing-QHWSMAIH.mjs → routing-3WG46XWU.mjs} +4 -4
- package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs → schedule-tool-B6SEZ77N.mjs} +3 -3
- package/dist/sdk/{schedule-tool-MQHISNJ6.mjs → schedule-tool-MPHHE2IM.mjs} +3 -3
- package/dist/sdk/{schedule-tool-ZVOSSFN2.mjs → schedule-tool-SPJWY2Y2.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-BGOL2TOP.mjs → schedule-tool-handler-SUYGQJ63.mjs} +3 -3
- package/dist/sdk/{schedule-tool-handler-TZYXM664.mjs → schedule-tool-handler-V7A4AQGS.mjs} +3 -3
- package/dist/sdk/{schedule-tool-handler-4NCS4ARE.mjs → schedule-tool-handler-VNAVYBCM.mjs} +6 -6
- package/dist/sdk/sdk.js +312 -22
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +5 -5
- package/dist/sdk/{trace-helpers-CTHTK6V5.mjs → trace-helpers-7BSOH35A.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-3M5LXLLX.mjs → workflow-check-provider-AECYZCBK.mjs} +3 -3
- package/dist/sdk/{workflow-check-provider-QKHL6AFT.mjs → workflow-check-provider-N4ZTFOH6.mjs} +3 -3
- package/dist/sdk/{workflow-check-provider-UTNO6XN6.mjs → workflow-check-provider-X7ZGHZA6.mjs} +6 -6
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- package/dist/traces/{run-2026-03-06T13-08-34-152Z.ndjson → run-2026-03-06T13-29-14-416Z.ndjson} +84 -84
- package/dist/traces/{run-2026-03-06T13-09-10-593Z.ndjson → run-2026-03-06T13-29-52-749Z.ndjson} +1892 -1892
- package/dist/utils/fair-concurrency-limiter.d.ts +56 -0
- package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -0
- package/dist/utils/interactive-prompt.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/sdk/chunk-KKGMGB4X.mjs.map +0 -1
- package/dist/sdk/chunk-WSYVK6ML.mjs.map +0 -1
- package/dist/sdk/chunk-ZQR4AGS3.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-TGPICTHD.mjs.map → check-provider-registry-6WR2SG66.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs.map → check-provider-registry-GPV5DYN5.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-WXEBJWXY.mjs.map → check-provider-registry-P356JWTA.mjs.map} +0 -0
- /package/dist/sdk/{chunk-OQ3CML4F.mjs.map → chunk-UNUZFJ5I.mjs.map} +0 -0
- /package/dist/sdk/{chunk-KBTFMYZQ.mjs.map → chunk-XYQSWTGC.mjs.map} +0 -0
- /package/dist/sdk/{config-D6WF2U4B.mjs.map → config-DP5QU3XC.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-5EAESM44.mjs.map → failure-condition-evaluator-VWQ54IK4.mjs.map} +0 -0
- /package/dist/sdk/{host-753E6PKF.mjs.map → host-7MGCKSHM.mjs.map} +0 -0
- /package/dist/sdk/{host-AIMRV5YL.mjs.map → host-JHMDZR6P.mjs.map} +0 -0
- /package/dist/sdk/{routing-QHWSMAIH.mjs.map → routing-3WG46XWU.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-MQHISNJ6.mjs.map → schedule-tool-B6SEZ77N.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs.map → schedule-tool-MPHHE2IM.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-ZVOSSFN2.mjs.map → schedule-tool-SPJWY2Y2.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-4NCS4ARE.mjs.map → schedule-tool-handler-SUYGQJ63.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-BGOL2TOP.mjs.map → schedule-tool-handler-V7A4AQGS.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-TZYXM664.mjs.map → schedule-tool-handler-VNAVYBCM.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-CTHTK6V5.mjs.map → trace-helpers-7BSOH35A.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-3M5LXLLX.mjs.map → workflow-check-provider-AECYZCBK.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-QKHL6AFT.mjs.map → workflow-check-provider-N4ZTFOH6.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-UTNO6XN6.mjs.map → workflow-check-provider-X7ZGHZA6.mjs.map} +0 -0
package/dist/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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.
|
|
2
|
+
process.env.VISOR_VERSION = '0.1.167';
|
|
3
3
|
process.env.PROBE_VERSION = '0.6.0-rc280';
|
|
4
|
-
process.env.VISOR_COMMIT_SHA = '
|
|
5
|
-
process.env.VISOR_COMMIT_SHORT = '
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
201364
|
-
|
|
201365
|
-
|
|
201366
|
-
|
|
201367
|
-
|
|
201368
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|