@probelabs/visor 0.1.127 → 0.1.129
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/README.md +31 -1
- package/defaults/.visor.yaml +420 -0
- package/dist/ai-review-service.d.ts +1 -0
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/daemon.js +19 -0
- package/dist/defaults/.visor.yaml +420 -0
- package/dist/docs/commands.md +1 -1
- package/dist/docs/debugging.md +133 -0
- package/dist/docs/dev-playbook.md +10 -0
- package/dist/docs/index.md +1 -0
- package/dist/docs/scheduler.md +503 -0
- package/dist/docs/slack-integration.md +21 -0
- package/dist/docs/timeouts.md +1 -1
- package/dist/docs/workflow-creation-guide.md +39 -0
- package/dist/examples/README.md +30 -0
- package/dist/examples/calculator-config.yaml +4 -4
- package/dist/examples/sandbox-basic.yaml +18 -0
- package/dist/examples/sandbox-cache.yaml +32 -0
- package/dist/examples/sandbox-dockerfile-inline.yaml +22 -0
- package/dist/examples/sandbox-env-passthrough.yaml +26 -0
- package/dist/examples/sandbox-multi-env.yaml +27 -0
- package/dist/examples/sandbox-read-only.yaml +33 -0
- package/dist/examples/scheduler-example.yaml +118 -0
- package/dist/frontends/host.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts.map +1 -1
- package/dist/generated/config-schema.d.ts +230 -9
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/index.js +13676 -1604
- package/dist/mcp-server.d.ts +8 -8
- package/dist/{traces/run-2026-02-01T09-59-08-165Z.ndjson → output/traces/run-2026-02-08T18-16-04-160Z.ndjson} +84 -84
- package/dist/{traces/run-2026-02-01T09-59-52-595Z.ndjson → output/traces/run-2026-02-08T18-16-51-253Z.ndjson} +1029 -1029
- package/dist/providers/ai-check-provider.d.ts +16 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +5 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts +3 -0
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +22 -2
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-tool-executor.d.ts +2 -0
- package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
- package/dist/sandbox/cache-volume-manager.d.ts +48 -0
- package/dist/sandbox/cache-volume-manager.d.ts.map +1 -0
- package/dist/sandbox/check-runner.d.ts +25 -0
- package/dist/sandbox/check-runner.d.ts.map +1 -0
- package/dist/sandbox/docker-compose-sandbox.d.ts +25 -0
- package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -0
- package/dist/sandbox/docker-image-sandbox.d.ts +32 -0
- package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -0
- package/dist/sandbox/env-filter.d.ts +19 -0
- package/dist/sandbox/env-filter.d.ts.map +1 -0
- package/dist/sandbox/index.d.ts +9 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/sandbox-manager.d.ts +39 -0
- package/dist/sandbox/sandbox-manager.d.ts.map +1 -0
- package/dist/sandbox/sandbox-telemetry.d.ts +9 -0
- package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -0
- package/dist/sandbox/trace-ingester.d.ts +19 -0
- package/dist/sandbox/trace-ingester.d.ts.map +1 -0
- package/dist/sandbox/types.d.ts +149 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/scheduler/cli-handler.d.ts +6 -0
- package/dist/scheduler/cli-handler.d.ts.map +1 -0
- package/dist/scheduler/index.d.ts +14 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/schedule-parser.d.ts +34 -0
- package/dist/scheduler/schedule-parser.d.ts.map +1 -0
- package/dist/scheduler/schedule-store.d.ts +182 -0
- package/dist/scheduler/schedule-store.d.ts.map +1 -0
- package/dist/scheduler/schedule-tool.d.ts +137 -0
- package/dist/scheduler/schedule-tool.d.ts.map +1 -0
- package/dist/scheduler/scheduler.d.ts +195 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/sdk/check-provider-registry-ACRGIYOB.mjs +28 -0
- package/dist/sdk/check-provider-registry-VYHKFHK2.mjs +28 -0
- package/dist/sdk/{chunk-CNX7V5JK.mjs → chunk-25IC7KXZ.mjs} +2 -2
- package/dist/sdk/{chunk-IHZOSIF4.mjs → chunk-2KB35MB7.mjs} +3 -3
- package/dist/sdk/{chunk-HQL734ZI.mjs → chunk-6W75IMDC.mjs} +3 -3
- package/dist/sdk/{chunk-XWJPT5KQ.mjs → chunk-7YSOINAQ.mjs} +392 -18
- package/dist/sdk/chunk-7YSOINAQ.mjs.map +1 -0
- package/dist/sdk/{chunk-3OMWVM6J.mjs → chunk-B7BVQM5K.mjs} +2 -2
- package/dist/sdk/chunk-BDGUM6BA.mjs +38825 -0
- package/dist/sdk/chunk-BDGUM6BA.mjs.map +1 -0
- package/dist/sdk/{chunk-VW2GBXQT.mjs → chunk-D5KI4YQ4.mjs} +3 -3
- package/dist/sdk/chunk-DGZPPGJJ.mjs +38825 -0
- package/dist/sdk/chunk-DGZPPGJJ.mjs.map +1 -0
- package/dist/sdk/chunk-H5BOW5CR.mjs +91 -0
- package/dist/sdk/chunk-H5BOW5CR.mjs.map +1 -0
- package/dist/sdk/{chunk-YSN4G6CI.mjs → chunk-HEX3RL32.mjs} +81 -3
- package/dist/sdk/{chunk-YSN4G6CI.mjs.map → chunk-HEX3RL32.mjs.map} +1 -1
- package/dist/sdk/{chunk-ZYAUYXSW.mjs → chunk-J5RGJQ53.mjs} +14 -3
- package/dist/sdk/{chunk-ZYAUYXSW.mjs.map → chunk-J5RGJQ53.mjs.map} +1 -1
- package/dist/sdk/{chunk-WMJKH4XE.mjs → chunk-J7LXIPZS.mjs} +16 -1
- package/dist/sdk/{chunk-EXFGO4FX.mjs → chunk-KFKHU6CM.mjs} +2 -2
- package/dist/sdk/{chunk-MPS4HVQI.mjs → chunk-N7HO6KKC.mjs} +8 -8
- package/dist/sdk/{chunk-O5EZDNYL.mjs → chunk-NCWIZVOT.mjs} +2 -2
- package/dist/sdk/{chunk-3NMLT3YS.mjs → chunk-PO7X5XI7.mjs} +3 -3
- package/dist/sdk/{chunk-BHOKBQPB.mjs → chunk-R5Z7YWPB.mjs} +5 -5
- package/dist/sdk/{chunk-EORMDOZU.mjs → chunk-SGS2VMEL.mjs} +7 -7
- package/dist/sdk/{chunk-BOVFH3LI.mjs → chunk-VF6XIUE4.mjs} +21 -10
- package/dist/sdk/chunk-VF6XIUE4.mjs.map +1 -0
- package/dist/sdk/{chunk-J2QWVDXK.mjs → chunk-XDLQ3UNF.mjs} +3 -3
- package/dist/sdk/{chunk-S2RUE2RG.mjs → chunk-XR7XXGL7.mjs} +3 -3
- package/dist/sdk/{chunk-NAW3DB3I.mjs → chunk-XXAEN5KU.mjs} +3 -3
- package/dist/sdk/command-executor-DVVXERLR.mjs +14 -0
- package/dist/sdk/config-7VTT64SQ.mjs +16 -0
- package/dist/sdk/config-merger-RKCZJQ44.mjs +10 -0
- package/dist/sdk/event-bus-5K3Y2FCS.mjs +43 -0
- package/dist/sdk/{event-bus-5BEVPQ6T.mjs.map → event-bus-5K3Y2FCS.mjs.map} +1 -1
- package/dist/sdk/failure-condition-evaluator-4WMDF4Q3.mjs +17 -0
- package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs +471 -0
- package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs.map +1 -0
- package/dist/sdk/{github-frontend-5PCKKHVC.mjs → github-frontend-3N2NLO66.mjs} +520 -588
- package/dist/sdk/github-frontend-3N2NLO66.mjs.map +1 -0
- package/dist/sdk/host-ONVMEHAA.mjs +63 -0
- package/dist/sdk/host-ONVMEHAA.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-I7O7KMHF.mjs → liquid-extensions-5IZLTFSZ.mjs} +8 -8
- package/dist/sdk/memory-store-3N4AZCYB.mjs +12 -0
- package/dist/sdk/{metrics-7PP3EJUH.mjs → metrics-GXQ2EDXA.mjs} +4 -4
- package/dist/sdk/ndjson-sink-FD2PSXGD.mjs +52 -0
- package/dist/sdk/{ndjson-sink-B4V4NTAQ.mjs.map → ndjson-sink-FD2PSXGD.mjs.map} +1 -1
- package/dist/sdk/{prompt-state-EZYOUG75.mjs → prompt-state-YHGXB2OA.mjs} +5 -5
- package/dist/sdk/{renderer-schema-CKFB5NDB.mjs → renderer-schema-CMXOLNIG.mjs} +4 -4
- package/dist/sdk/routing-S3Y7T2X3.mjs +24 -0
- package/dist/sdk/sdk.d.mts +212 -4
- package/dist/sdk/sdk.d.ts +212 -4
- package/dist/sdk/sdk.js +26927 -6264
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +23 -1278
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/session-registry-6PV6SGEJ.mjs +10 -0
- package/dist/sdk/slack-frontend-R3M2CACB.mjs +899 -0
- package/dist/sdk/slack-frontend-R3M2CACB.mjs.map +1 -0
- package/dist/sdk/{trace-helpers-VP6QYVBX.mjs → trace-helpers-YHNPC7MR.mjs} +4 -4
- package/dist/sdk/tracer-init-XPRWKMZT.mjs +10 -0
- package/dist/sdk/tui-frontend-S546M7A7.mjs +281 -0
- package/dist/sdk/tui-frontend-S546M7A7.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-4F3432ZP.mjs +28 -0
- package/dist/sdk/workflow-check-provider-A44PBPG2.mjs +28 -0
- package/dist/sdk/workflow-check-provider-A44PBPG2.mjs.map +1 -0
- package/dist/sdk/workflow-registry-ZAYYXLEP.mjs +12 -0
- package/dist/sdk/workflow-registry-ZAYYXLEP.mjs.map +1 -0
- package/dist/slack/client.d.ts +28 -0
- package/dist/slack/client.d.ts.map +1 -1
- package/dist/slack/schedule-tool-handler.d.ts +46 -0
- package/dist/slack/schedule-tool-handler.d.ts.map +1 -0
- package/dist/slack/slack-output-adapter.d.ts +44 -0
- package/dist/slack/slack-output-adapter.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +22 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
- package/dist/state-machine/dispatch/sandbox-routing.d.ts +21 -0
- package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -0
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts +5 -0
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/{output/traces/run-2026-02-01T09-59-08-165Z.ndjson → traces/run-2026-02-08T18-16-04-160Z.ndjson} +84 -84
- package/dist/{output/traces/run-2026-02-01T09-59-52-595Z.ndjson → traces/run-2026-02-08T18-16-51-253Z.ndjson} +1029 -1029
- package/dist/tui/chat-runner.d.ts +39 -0
- package/dist/tui/chat-runner.d.ts.map +1 -0
- package/dist/tui/chat-state.d.ts +56 -0
- package/dist/tui/chat-state.d.ts.map +1 -0
- package/dist/tui/chat-tui.d.ts +69 -0
- package/dist/tui/chat-tui.d.ts.map +1 -0
- package/dist/tui/components/chat-box.d.ts +33 -0
- package/dist/tui/components/chat-box.d.ts.map +1 -0
- package/dist/tui/components/input-bar.d.ts +50 -0
- package/dist/tui/components/input-bar.d.ts.map +1 -0
- package/dist/tui/components/status-bar.d.ts +31 -0
- package/dist/tui/components/status-bar.d.ts.map +1 -0
- package/dist/tui/components/trace-viewer.d.ts +73 -0
- package/dist/tui/components/trace-viewer.d.ts.map +1 -0
- package/dist/tui/index.d.ts +14 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/tui-frontend.d.ts +29 -0
- package/dist/tui/tui-frontend.d.ts.map +1 -0
- package/dist/types/bot.d.ts +35 -0
- package/dist/types/bot.d.ts.map +1 -1
- package/dist/types/config.d.ts +152 -3
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +3 -0
- package/dist/types/engine.d.ts.map +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts +22 -2
- package/dist/utils/workspace-manager.d.ts.map +1 -1
- package/dist/utils/worktree-manager.d.ts +2 -1
- package/dist/utils/worktree-manager.d.ts.map +1 -1
- package/package.json +4 -2
- package/dist/docs/NPM_USAGE.md +0 -281
- package/dist/generated/config-schema.json +0 -2161
- package/dist/sdk/check-provider-registry-CVUONJ5A.mjs +0 -28
- package/dist/sdk/chunk-BOVFH3LI.mjs.map +0 -1
- package/dist/sdk/chunk-TS6BUNAI.mjs +0 -17722
- package/dist/sdk/chunk-TS6BUNAI.mjs.map +0 -1
- package/dist/sdk/chunk-XWJPT5KQ.mjs.map +0 -1
- package/dist/sdk/command-executor-Q7MHJKZJ.mjs +0 -14
- package/dist/sdk/config-DXX64GD3.mjs +0 -16
- package/dist/sdk/config-merger-PX3WIT57.mjs +0 -10
- package/dist/sdk/event-bus-5BEVPQ6T.mjs +0 -35
- package/dist/sdk/failure-condition-evaluator-G4HMJPXF.mjs +0 -17
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +0 -458
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +0 -1
- package/dist/sdk/github-frontend-5PCKKHVC.mjs.map +0 -1
- package/dist/sdk/host-H3AWNZ2F.mjs +0 -52
- package/dist/sdk/host-H3AWNZ2F.mjs.map +0 -1
- package/dist/sdk/memory-store-RW5N2NGJ.mjs +0 -12
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +0 -44
- package/dist/sdk/routing-QHTGDIXF.mjs +0 -24
- package/dist/sdk/session-registry-4E6YRQ77.mjs +0 -10
- package/dist/sdk/slack-frontend-JUT3TYVC.mjs +0 -821
- package/dist/sdk/slack-frontend-JUT3TYVC.mjs.map +0 -1
- package/dist/sdk/tracer-init-GSLPPLCD.mjs +0 -10
- package/dist/sdk/workflow-check-provider-3IWBAZP7.mjs +0 -28
- package/dist/sdk/workflow-registry-KFWSDSLM.mjs +0 -12
- package/dist/tui.d.ts +0 -51
- package/dist/tui.d.ts.map +0 -1
- /package/dist/sdk/{check-provider-registry-CVUONJ5A.mjs.map → check-provider-registry-ACRGIYOB.mjs.map} +0 -0
- /package/dist/sdk/{chunk-WMJKH4XE.mjs.map → check-provider-registry-VYHKFHK2.mjs.map} +0 -0
- /package/dist/sdk/{chunk-CNX7V5JK.mjs.map → chunk-25IC7KXZ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-IHZOSIF4.mjs.map → chunk-2KB35MB7.mjs.map} +0 -0
- /package/dist/sdk/{chunk-HQL734ZI.mjs.map → chunk-6W75IMDC.mjs.map} +0 -0
- /package/dist/sdk/{chunk-3OMWVM6J.mjs.map → chunk-B7BVQM5K.mjs.map} +0 -0
- /package/dist/sdk/{chunk-VW2GBXQT.mjs.map → chunk-D5KI4YQ4.mjs.map} +0 -0
- /package/dist/sdk/{command-executor-Q7MHJKZJ.mjs.map → chunk-J7LXIPZS.mjs.map} +0 -0
- /package/dist/sdk/{chunk-EXFGO4FX.mjs.map → chunk-KFKHU6CM.mjs.map} +0 -0
- /package/dist/sdk/{chunk-MPS4HVQI.mjs.map → chunk-N7HO6KKC.mjs.map} +0 -0
- /package/dist/sdk/{chunk-O5EZDNYL.mjs.map → chunk-NCWIZVOT.mjs.map} +0 -0
- /package/dist/sdk/{chunk-3NMLT3YS.mjs.map → chunk-PO7X5XI7.mjs.map} +0 -0
- /package/dist/sdk/{chunk-BHOKBQPB.mjs.map → chunk-R5Z7YWPB.mjs.map} +0 -0
- /package/dist/sdk/{chunk-EORMDOZU.mjs.map → chunk-SGS2VMEL.mjs.map} +0 -0
- /package/dist/sdk/{chunk-J2QWVDXK.mjs.map → chunk-XDLQ3UNF.mjs.map} +0 -0
- /package/dist/sdk/{chunk-S2RUE2RG.mjs.map → chunk-XR7XXGL7.mjs.map} +0 -0
- /package/dist/sdk/{chunk-NAW3DB3I.mjs.map → chunk-XXAEN5KU.mjs.map} +0 -0
- /package/dist/sdk/{config-DXX64GD3.mjs.map → command-executor-DVVXERLR.mjs.map} +0 -0
- /package/dist/sdk/{config-merger-PX3WIT57.mjs.map → config-7VTT64SQ.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-G4HMJPXF.mjs.map → config-merger-RKCZJQ44.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-I7O7KMHF.mjs.map → failure-condition-evaluator-4WMDF4Q3.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-RW5N2NGJ.mjs.map → liquid-extensions-5IZLTFSZ.mjs.map} +0 -0
- /package/dist/sdk/{metrics-7PP3EJUH.mjs.map → memory-store-3N4AZCYB.mjs.map} +0 -0
- /package/dist/sdk/{prompt-state-EZYOUG75.mjs.map → metrics-GXQ2EDXA.mjs.map} +0 -0
- /package/dist/sdk/{routing-QHTGDIXF.mjs.map → prompt-state-YHGXB2OA.mjs.map} +0 -0
- /package/dist/sdk/{renderer-schema-CKFB5NDB.mjs.map → renderer-schema-CMXOLNIG.mjs.map} +0 -0
- /package/dist/sdk/{session-registry-4E6YRQ77.mjs.map → routing-S3Y7T2X3.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-VP6QYVBX.mjs.map → session-registry-6PV6SGEJ.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-GSLPPLCD.mjs.map → trace-helpers-YHNPC7MR.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-3IWBAZP7.mjs.map → tracer-init-XPRWKMZT.mjs.map} +0 -0
- /package/dist/sdk/{workflow-registry-KFWSDSLM.mjs.map → workflow-check-provider-4F3432ZP.mjs.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
__esm
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-J7LXIPZS.mjs";
|
|
4
4
|
|
|
5
5
|
// src/utils/author-permissions.ts
|
|
6
6
|
function getPermissionLevel(association) {
|
|
@@ -86,4 +86,4 @@ export {
|
|
|
86
86
|
resolveAssociationFromEvent,
|
|
87
87
|
init_author_permissions
|
|
88
88
|
};
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-25IC7KXZ.mjs.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_logger,
|
|
3
3
|
logger
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PO7X5XI7.mjs";
|
|
5
5
|
import {
|
|
6
6
|
__esm,
|
|
7
7
|
__export
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-J7LXIPZS.mjs";
|
|
9
9
|
|
|
10
10
|
// src/memory-store.ts
|
|
11
11
|
var memory_store_exports = {};
|
|
@@ -479,4 +479,4 @@ export {
|
|
|
479
479
|
memory_store_exports,
|
|
480
480
|
init_memory_store
|
|
481
481
|
};
|
|
482
|
-
//# sourceMappingURL=chunk-
|
|
482
|
+
//# sourceMappingURL=chunk-2KB35MB7.mjs.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_logger,
|
|
3
3
|
logger
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PO7X5XI7.mjs";
|
|
5
5
|
import {
|
|
6
6
|
__esm
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-J7LXIPZS.mjs";
|
|
8
8
|
|
|
9
9
|
// src/slack/prompt-state.ts
|
|
10
10
|
function getPromptStateManager(ttlMs) {
|
|
@@ -154,4 +154,4 @@ export {
|
|
|
154
154
|
resetPromptStateManager,
|
|
155
155
|
init_prompt_state
|
|
156
156
|
};
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
157
|
+
//# sourceMappingURL=chunk-6W75IMDC.mjs.map
|
|
@@ -2,21 +2,21 @@ import {
|
|
|
2
2
|
ConfigMerger,
|
|
3
3
|
config_merger_exports,
|
|
4
4
|
init_config_merger
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NCWIZVOT.mjs";
|
|
6
6
|
import {
|
|
7
7
|
init_sandbox,
|
|
8
8
|
validateJsSyntax
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VF6XIUE4.mjs";
|
|
10
10
|
import {
|
|
11
11
|
init_logger,
|
|
12
12
|
logger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PO7X5XI7.mjs";
|
|
14
14
|
import {
|
|
15
15
|
__esm,
|
|
16
16
|
__export,
|
|
17
17
|
__require,
|
|
18
18
|
__toCommonJS
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-J7LXIPZS.mjs";
|
|
20
20
|
|
|
21
21
|
// src/utils/config-loader.ts
|
|
22
22
|
import * as fs from "fs";
|
|
@@ -279,7 +279,7 @@ var init_config_loader = __esm({
|
|
|
279
279
|
const parentConfig = await this.fetchConfig(source, this.loadedConfigs.size);
|
|
280
280
|
parentConfigs.push(parentConfig);
|
|
281
281
|
}
|
|
282
|
-
const { ConfigMerger: ConfigMerger2 } = await import("./config-merger-
|
|
282
|
+
const { ConfigMerger: ConfigMerger2 } = await import("./config-merger-RKCZJQ44.mjs");
|
|
283
283
|
const merger = new ConfigMerger2();
|
|
284
284
|
let mergedParents = {};
|
|
285
285
|
for (const parentConfig of parentConfigs) {
|
|
@@ -564,6 +564,10 @@ var init_config_schema = __esm({
|
|
|
564
564
|
slack: {
|
|
565
565
|
$ref: "#/definitions/SlackConfig",
|
|
566
566
|
description: "Slack configuration"
|
|
567
|
+
},
|
|
568
|
+
scheduler: {
|
|
569
|
+
$ref: "#/definitions/SchedulerConfig",
|
|
570
|
+
description: "Scheduler configuration for scheduled workflow execution"
|
|
567
571
|
}
|
|
568
572
|
},
|
|
569
573
|
required: ["version"],
|
|
@@ -849,6 +853,10 @@ var init_config_schema = __esm({
|
|
|
849
853
|
$ref: "#/definitions/Record%3Cstring%2CMcpServerConfig%3E",
|
|
850
854
|
description: "MCP servers for this AI check - overrides global setting"
|
|
851
855
|
},
|
|
856
|
+
ai_mcp_servers_js: {
|
|
857
|
+
type: "string",
|
|
858
|
+
description: 'JavaScript expression to dynamically compute MCP servers for this AI check. Expression has access to: outputs, inputs, pr, files, env, memory Must return an object mapping server names to McpServerConfig objects.\n\nExample: ``` const servers = {}; const tags = outputs[\'route-intent\']?.tags || []; if (tags.includes(\'jira\')) { servers.jira = { command: "npx", args: ["-y", "@aashari/mcp-server-atlassian-jira"], env: { ATLASSIAN_SITE_NAME: "mysite" } }; } return servers; ```'
|
|
859
|
+
},
|
|
852
860
|
ai_custom_tools: {
|
|
853
861
|
type: "array",
|
|
854
862
|
items: {
|
|
@@ -856,6 +864,10 @@ var init_config_schema = __esm({
|
|
|
856
864
|
},
|
|
857
865
|
description: "List of custom tool names to expose to this AI check via ephemeral SSE MCP server"
|
|
858
866
|
},
|
|
867
|
+
ai_custom_tools_js: {
|
|
868
|
+
type: "string",
|
|
869
|
+
description: "JavaScript expression to dynamically compute custom tools for this AI check. Expression has access to: outputs, inputs, pr, files, env, memory Must return an array of tool names (strings) or WorkflowToolReference objects ({ workflow: string, args?: Record<string, unknown> })\n\nExample: ``` const tools = []; if (outputs['route-intent'].intent === 'engineer') { tools.push({ workflow: 'engineer', args: { projects: ['tyk'] } }); } return tools; ```"
|
|
870
|
+
},
|
|
859
871
|
claude_code: {
|
|
860
872
|
$ref: "#/definitions/ClaudeCodeConfig",
|
|
861
873
|
description: "Claude Code configuration (for claude-code type checks)"
|
|
@@ -1120,7 +1132,7 @@ var init_config_schema = __esm({
|
|
|
1120
1132
|
description: "Arguments/inputs for the workflow"
|
|
1121
1133
|
},
|
|
1122
1134
|
overrides: {
|
|
1123
|
-
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
1135
|
+
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E",
|
|
1124
1136
|
description: "Override specific step configurations in the workflow"
|
|
1125
1137
|
},
|
|
1126
1138
|
output_mapping: {
|
|
@@ -1136,7 +1148,7 @@ var init_config_schema = __esm({
|
|
|
1136
1148
|
description: "Config file path - alternative to workflow ID (loads a Visor config file as workflow)"
|
|
1137
1149
|
},
|
|
1138
1150
|
workflow_overrides: {
|
|
1139
|
-
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
1151
|
+
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E",
|
|
1140
1152
|
description: "Alias for overrides - workflow step overrides (backward compatibility)"
|
|
1141
1153
|
},
|
|
1142
1154
|
ref: {
|
|
@@ -1308,6 +1320,10 @@ var init_config_schema = __esm({
|
|
|
1308
1320
|
type: "boolean",
|
|
1309
1321
|
description: "Enable the delegate tool for task distribution to subagents"
|
|
1310
1322
|
},
|
|
1323
|
+
enableTasks: {
|
|
1324
|
+
type: "boolean",
|
|
1325
|
+
description: "Enable task management for tracking multi-goal requests"
|
|
1326
|
+
},
|
|
1311
1327
|
retry: {
|
|
1312
1328
|
$ref: "#/definitions/AIRetryConfig",
|
|
1313
1329
|
description: "Retry configuration for this provider"
|
|
@@ -1361,7 +1377,7 @@ var init_config_schema = __esm({
|
|
|
1361
1377
|
properties: {
|
|
1362
1378
|
command: {
|
|
1363
1379
|
type: "string",
|
|
1364
|
-
description: "Command to execute
|
|
1380
|
+
description: "Command to execute (presence indicates stdio server)"
|
|
1365
1381
|
},
|
|
1366
1382
|
args: {
|
|
1367
1383
|
type: "array",
|
|
@@ -1373,11 +1389,45 @@ var init_config_schema = __esm({
|
|
|
1373
1389
|
env: {
|
|
1374
1390
|
$ref: "#/definitions/Record%3Cstring%2Cstring%3E",
|
|
1375
1391
|
description: "Environment variables for the MCP server"
|
|
1392
|
+
},
|
|
1393
|
+
url: {
|
|
1394
|
+
type: "string",
|
|
1395
|
+
description: "URL endpoint (presence indicates external server)"
|
|
1396
|
+
},
|
|
1397
|
+
transport: {
|
|
1398
|
+
type: "string",
|
|
1399
|
+
enum: ["stdio", "sse", "http"],
|
|
1400
|
+
description: "Transport type"
|
|
1401
|
+
},
|
|
1402
|
+
workflow: {
|
|
1403
|
+
type: "string",
|
|
1404
|
+
description: "Workflow ID or path (presence indicates workflow tool)"
|
|
1405
|
+
},
|
|
1406
|
+
inputs: {
|
|
1407
|
+
$ref: "#/definitions/Record%3Cstring%2Cunknown%3E",
|
|
1408
|
+
description: "Inputs to pass to workflow"
|
|
1409
|
+
},
|
|
1410
|
+
description: {
|
|
1411
|
+
type: "string",
|
|
1412
|
+
description: "Tool description for AI"
|
|
1413
|
+
},
|
|
1414
|
+
allowedMethods: {
|
|
1415
|
+
type: "array",
|
|
1416
|
+
items: {
|
|
1417
|
+
type: "string"
|
|
1418
|
+
},
|
|
1419
|
+
description: 'Whitelist specific methods from this MCP server (supports wildcards like "search_*")'
|
|
1420
|
+
},
|
|
1421
|
+
blockedMethods: {
|
|
1422
|
+
type: "array",
|
|
1423
|
+
items: {
|
|
1424
|
+
type: "string"
|
|
1425
|
+
},
|
|
1426
|
+
description: 'Block specific methods from this MCP server (supports wildcards like "*_delete")'
|
|
1376
1427
|
}
|
|
1377
1428
|
},
|
|
1378
|
-
required: ["command"],
|
|
1379
1429
|
additionalProperties: false,
|
|
1380
|
-
description: "MCP
|
|
1430
|
+
description: "Unified MCP server/tool entry - type detected by which properties are present\n\nDetection logic (priority order): 1. Has `command` \u2192 stdio MCP server (external process) 2. Has `url` \u2192 SSE/HTTP MCP server (external endpoint) 3. Has `workflow` \u2192 workflow tool reference 4. Empty `{}` or just key \u2192 auto-detect from `tools:` section",
|
|
1381
1431
|
patternProperties: {
|
|
1382
1432
|
"^x-": {}
|
|
1383
1433
|
}
|
|
@@ -1770,7 +1820,7 @@ var init_config_schema = __esm({
|
|
|
1770
1820
|
description: "Custom output name (defaults to workflow name)"
|
|
1771
1821
|
},
|
|
1772
1822
|
overrides: {
|
|
1773
|
-
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
1823
|
+
$ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E",
|
|
1774
1824
|
description: "Step overrides"
|
|
1775
1825
|
},
|
|
1776
1826
|
output_mapping: {
|
|
@@ -1785,13 +1835,13 @@ var init_config_schema = __esm({
|
|
|
1785
1835
|
"^x-": {}
|
|
1786
1836
|
}
|
|
1787
1837
|
},
|
|
1788
|
-
"Record<string,Partial<interface-src_types_config.ts-
|
|
1838
|
+
"Record<string,Partial<interface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407>>": {
|
|
1789
1839
|
type: "object",
|
|
1790
1840
|
additionalProperties: {
|
|
1791
|
-
$ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-
|
|
1841
|
+
$ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E"
|
|
1792
1842
|
}
|
|
1793
1843
|
},
|
|
1794
|
-
"Partial<interface-src_types_config.ts-
|
|
1844
|
+
"Partial<interface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407>": {
|
|
1795
1845
|
type: "object",
|
|
1796
1846
|
additionalProperties: false
|
|
1797
1847
|
},
|
|
@@ -2431,6 +2481,177 @@ var init_config_schema = __esm({
|
|
|
2431
2481
|
patternProperties: {
|
|
2432
2482
|
"^x-": {}
|
|
2433
2483
|
}
|
|
2484
|
+
},
|
|
2485
|
+
SchedulerConfig: {
|
|
2486
|
+
type: "object",
|
|
2487
|
+
properties: {
|
|
2488
|
+
enabled: {
|
|
2489
|
+
type: "boolean",
|
|
2490
|
+
description: "Enable/disable the scheduler (default: true)"
|
|
2491
|
+
},
|
|
2492
|
+
storage: {
|
|
2493
|
+
type: "object",
|
|
2494
|
+
properties: {
|
|
2495
|
+
path: {
|
|
2496
|
+
type: "string",
|
|
2497
|
+
description: "Path to schedules JSON file (default: .visor/schedules.json)"
|
|
2498
|
+
}
|
|
2499
|
+
},
|
|
2500
|
+
additionalProperties: false,
|
|
2501
|
+
description: "Storage configuration",
|
|
2502
|
+
patternProperties: {
|
|
2503
|
+
"^x-": {}
|
|
2504
|
+
}
|
|
2505
|
+
},
|
|
2506
|
+
limits: {
|
|
2507
|
+
$ref: "#/definitions/SchedulerLimitsConfig",
|
|
2508
|
+
description: "Limits for dynamic schedules"
|
|
2509
|
+
},
|
|
2510
|
+
default_timezone: {
|
|
2511
|
+
type: "string",
|
|
2512
|
+
description: 'Default timezone (IANA format, e.g., "America/New_York")'
|
|
2513
|
+
},
|
|
2514
|
+
check_interval_ms: {
|
|
2515
|
+
type: "number",
|
|
2516
|
+
description: "Check interval in milliseconds (default: 60000)"
|
|
2517
|
+
},
|
|
2518
|
+
permissions: {
|
|
2519
|
+
$ref: "#/definitions/SchedulerPermissionsConfig",
|
|
2520
|
+
description: "Permissions for dynamic schedule creation (via AI tool)"
|
|
2521
|
+
},
|
|
2522
|
+
cron: {
|
|
2523
|
+
$ref: "#/definitions/Record%3Cstring%2CStaticCronJob%3E",
|
|
2524
|
+
description: "Static cron jobs defined in configuration (always executed)"
|
|
2525
|
+
}
|
|
2526
|
+
},
|
|
2527
|
+
additionalProperties: false,
|
|
2528
|
+
description: "Scheduler configuration for workflow scheduling",
|
|
2529
|
+
patternProperties: {
|
|
2530
|
+
"^x-": {}
|
|
2531
|
+
}
|
|
2532
|
+
},
|
|
2533
|
+
SchedulerLimitsConfig: {
|
|
2534
|
+
type: "object",
|
|
2535
|
+
properties: {
|
|
2536
|
+
max_per_user: {
|
|
2537
|
+
type: "number",
|
|
2538
|
+
description: "Maximum schedules per user (default: 25)"
|
|
2539
|
+
},
|
|
2540
|
+
max_recurring_per_user: {
|
|
2541
|
+
type: "number",
|
|
2542
|
+
description: "Maximum recurring schedules per user (default: 10)"
|
|
2543
|
+
},
|
|
2544
|
+
max_global: {
|
|
2545
|
+
type: "number",
|
|
2546
|
+
description: "Maximum total schedules (default: 1000)"
|
|
2547
|
+
}
|
|
2548
|
+
},
|
|
2549
|
+
additionalProperties: false,
|
|
2550
|
+
description: "Scheduler limits configuration",
|
|
2551
|
+
patternProperties: {
|
|
2552
|
+
"^x-": {}
|
|
2553
|
+
}
|
|
2554
|
+
},
|
|
2555
|
+
SchedulerPermissionsConfig: {
|
|
2556
|
+
type: "object",
|
|
2557
|
+
properties: {
|
|
2558
|
+
allow_personal: {
|
|
2559
|
+
type: "boolean",
|
|
2560
|
+
description: "Allow personal schedules (via DM or CLI)"
|
|
2561
|
+
},
|
|
2562
|
+
allow_channel: {
|
|
2563
|
+
type: "boolean",
|
|
2564
|
+
description: "Allow channel schedules (in Slack channels)"
|
|
2565
|
+
},
|
|
2566
|
+
allow_dm: {
|
|
2567
|
+
type: "boolean",
|
|
2568
|
+
description: "Allow DM schedules (to specific users)"
|
|
2569
|
+
},
|
|
2570
|
+
allowed_workflows: {
|
|
2571
|
+
type: "array",
|
|
2572
|
+
items: {
|
|
2573
|
+
type: "string"
|
|
2574
|
+
},
|
|
2575
|
+
description: 'List of allowed workflow patterns (glob-style, e.g., "report-*")'
|
|
2576
|
+
},
|
|
2577
|
+
denied_workflows: {
|
|
2578
|
+
type: "array",
|
|
2579
|
+
items: {
|
|
2580
|
+
type: "string"
|
|
2581
|
+
},
|
|
2582
|
+
description: "List of denied workflow patterns"
|
|
2583
|
+
}
|
|
2584
|
+
},
|
|
2585
|
+
additionalProperties: false,
|
|
2586
|
+
description: "Scheduler permissions for dynamic schedule creation",
|
|
2587
|
+
patternProperties: {
|
|
2588
|
+
"^x-": {}
|
|
2589
|
+
}
|
|
2590
|
+
},
|
|
2591
|
+
"Record<string,StaticCronJob>": {
|
|
2592
|
+
type: "object",
|
|
2593
|
+
additionalProperties: {
|
|
2594
|
+
$ref: "#/definitions/StaticCronJob"
|
|
2595
|
+
}
|
|
2596
|
+
},
|
|
2597
|
+
StaticCronJob: {
|
|
2598
|
+
type: "object",
|
|
2599
|
+
properties: {
|
|
2600
|
+
schedule: {
|
|
2601
|
+
type: "string",
|
|
2602
|
+
description: 'Cron expression (e.g., "0 9 * * 1" for every Monday at 9am)'
|
|
2603
|
+
},
|
|
2604
|
+
workflow: {
|
|
2605
|
+
type: "string",
|
|
2606
|
+
description: "Workflow/check ID to run"
|
|
2607
|
+
},
|
|
2608
|
+
inputs: {
|
|
2609
|
+
$ref: "#/definitions/Record%3Cstring%2Cunknown%3E",
|
|
2610
|
+
description: "Optional workflow inputs"
|
|
2611
|
+
},
|
|
2612
|
+
output: {
|
|
2613
|
+
type: "object",
|
|
2614
|
+
properties: {
|
|
2615
|
+
type: {
|
|
2616
|
+
type: "string",
|
|
2617
|
+
enum: ["slack", "github", "webhook", "none"],
|
|
2618
|
+
description: "Output type: slack, github, webhook, or none"
|
|
2619
|
+
},
|
|
2620
|
+
target: {
|
|
2621
|
+
type: "string",
|
|
2622
|
+
description: "Target (channel name, repo, URL)"
|
|
2623
|
+
},
|
|
2624
|
+
thread_id: {
|
|
2625
|
+
type: "string",
|
|
2626
|
+
description: "Thread ID for threaded outputs"
|
|
2627
|
+
}
|
|
2628
|
+
},
|
|
2629
|
+
required: ["type"],
|
|
2630
|
+
additionalProperties: false,
|
|
2631
|
+
description: "Output destination configuration",
|
|
2632
|
+
patternProperties: {
|
|
2633
|
+
"^x-": {}
|
|
2634
|
+
}
|
|
2635
|
+
},
|
|
2636
|
+
description: {
|
|
2637
|
+
type: "string",
|
|
2638
|
+
description: "Description for logging/display"
|
|
2639
|
+
},
|
|
2640
|
+
enabled: {
|
|
2641
|
+
type: "boolean",
|
|
2642
|
+
description: "Enable/disable this job (default: true)"
|
|
2643
|
+
},
|
|
2644
|
+
timezone: {
|
|
2645
|
+
type: "string",
|
|
2646
|
+
description: "Timezone for schedule (default: UTC or scheduler default)"
|
|
2647
|
+
}
|
|
2648
|
+
},
|
|
2649
|
+
required: ["schedule", "workflow"],
|
|
2650
|
+
additionalProperties: false,
|
|
2651
|
+
description: "Static cron job defined in YAML configuration These are always executed by the scheduler daemon",
|
|
2652
|
+
patternProperties: {
|
|
2653
|
+
"^x-": {}
|
|
2654
|
+
}
|
|
2434
2655
|
}
|
|
2435
2656
|
}
|
|
2436
2657
|
};
|
|
@@ -2781,7 +3002,7 @@ var init_config = __esm({
|
|
|
2781
3002
|
* When a workflow YAML is run standalone, register the workflow and use its tests as checks
|
|
2782
3003
|
*/
|
|
2783
3004
|
async convertWorkflowToConfig(workflowData, basePath) {
|
|
2784
|
-
const { WorkflowRegistry } = await import("./workflow-registry-
|
|
3005
|
+
const { WorkflowRegistry } = await import("./workflow-registry-ZAYYXLEP.mjs");
|
|
2785
3006
|
const registry = WorkflowRegistry.getInstance();
|
|
2786
3007
|
const workflowId = workflowData.id;
|
|
2787
3008
|
logger.info(`Detected standalone workflow file: ${workflowId}`);
|
|
@@ -2846,7 +3067,7 @@ ${errors}`);
|
|
|
2846
3067
|
if (!config.imports || config.imports.length === 0) {
|
|
2847
3068
|
return;
|
|
2848
3069
|
}
|
|
2849
|
-
const { WorkflowRegistry } = await import("./workflow-registry-
|
|
3070
|
+
const { WorkflowRegistry } = await import("./workflow-registry-ZAYYXLEP.mjs");
|
|
2850
3071
|
const registry = WorkflowRegistry.getInstance();
|
|
2851
3072
|
for (const source of config.imports) {
|
|
2852
3073
|
const results = await registry.import(source, { basePath, validate: true });
|
|
@@ -3017,6 +3238,49 @@ ${errors}`);
|
|
|
3017
3238
|
}
|
|
3018
3239
|
}
|
|
3019
3240
|
}
|
|
3241
|
+
if (config.sandboxes) {
|
|
3242
|
+
const sandboxNames = Object.keys(config.sandboxes);
|
|
3243
|
+
for (const [sandboxName, sandboxConfig] of Object.entries(config.sandboxes)) {
|
|
3244
|
+
this.validateSandboxConfig(sandboxName, sandboxConfig, errors);
|
|
3245
|
+
}
|
|
3246
|
+
if (config.sandbox && !sandboxNames.includes(config.sandbox)) {
|
|
3247
|
+
errors.push({
|
|
3248
|
+
field: "sandbox",
|
|
3249
|
+
message: `Top-level sandbox '${config.sandbox}' not found in sandboxes definitions. Available: ${sandboxNames.join(", ")}`,
|
|
3250
|
+
value: config.sandbox
|
|
3251
|
+
});
|
|
3252
|
+
}
|
|
3253
|
+
if (checksToValidate) {
|
|
3254
|
+
for (const [checkName, checkConfig] of Object.entries(checksToValidate)) {
|
|
3255
|
+
if (checkConfig.sandbox && !sandboxNames.includes(checkConfig.sandbox)) {
|
|
3256
|
+
errors.push({
|
|
3257
|
+
field: `checks.${checkName}.sandbox`,
|
|
3258
|
+
message: `Check '${checkName}' references sandbox '${checkConfig.sandbox}' which is not defined. Available: ${sandboxNames.join(", ")}`,
|
|
3259
|
+
value: checkConfig.sandbox
|
|
3260
|
+
});
|
|
3261
|
+
}
|
|
3262
|
+
}
|
|
3263
|
+
}
|
|
3264
|
+
} else {
|
|
3265
|
+
if (config.sandbox) {
|
|
3266
|
+
errors.push({
|
|
3267
|
+
field: "sandbox",
|
|
3268
|
+
message: `Top-level sandbox '${config.sandbox}' is set but no sandboxes are defined`,
|
|
3269
|
+
value: config.sandbox
|
|
3270
|
+
});
|
|
3271
|
+
}
|
|
3272
|
+
if (checksToValidate) {
|
|
3273
|
+
for (const [checkName, checkConfig] of Object.entries(checksToValidate)) {
|
|
3274
|
+
if (checkConfig.sandbox) {
|
|
3275
|
+
errors.push({
|
|
3276
|
+
field: `checks.${checkName}.sandbox`,
|
|
3277
|
+
message: `Check '${checkName}' references sandbox '${checkConfig.sandbox}' but no sandboxes are defined`,
|
|
3278
|
+
value: checkConfig.sandbox
|
|
3279
|
+
});
|
|
3280
|
+
}
|
|
3281
|
+
}
|
|
3282
|
+
}
|
|
3283
|
+
}
|
|
3020
3284
|
if (config.ai_mcp_servers) {
|
|
3021
3285
|
this.validateMcpServersObject(config.ai_mcp_servers, "ai_mcp_servers", errors, warnings);
|
|
3022
3286
|
}
|
|
@@ -3053,6 +3317,106 @@ ${errors}`);
|
|
|
3053
3317
|
}
|
|
3054
3318
|
}
|
|
3055
3319
|
}
|
|
3320
|
+
/**
|
|
3321
|
+
* Validate sandbox configuration
|
|
3322
|
+
*/
|
|
3323
|
+
validateSandboxConfig(name, config, errors) {
|
|
3324
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(name)) {
|
|
3325
|
+
errors.push({
|
|
3326
|
+
field: `sandboxes.${name}`,
|
|
3327
|
+
message: `Sandbox name '${name}' contains invalid characters. Only letters, numbers, dots, hyphens, underscores allowed.`
|
|
3328
|
+
});
|
|
3329
|
+
}
|
|
3330
|
+
const modes = [
|
|
3331
|
+
config.image ? "image" : null,
|
|
3332
|
+
config.dockerfile || config.dockerfile_inline ? "dockerfile" : null,
|
|
3333
|
+
config.compose ? "compose" : null
|
|
3334
|
+
].filter(Boolean);
|
|
3335
|
+
if (modes.length === 0) {
|
|
3336
|
+
errors.push({
|
|
3337
|
+
field: `sandboxes.${name}`,
|
|
3338
|
+
message: `Sandbox '${name}' must specify one of: image, dockerfile, dockerfile_inline, or compose`
|
|
3339
|
+
});
|
|
3340
|
+
} else if (modes.length > 1) {
|
|
3341
|
+
errors.push({
|
|
3342
|
+
field: `sandboxes.${name}`,
|
|
3343
|
+
message: `Sandbox '${name}' has multiple modes (${modes.join(", ")}). Specify exactly one.`
|
|
3344
|
+
});
|
|
3345
|
+
}
|
|
3346
|
+
if (config.compose && !config.service) {
|
|
3347
|
+
errors.push({
|
|
3348
|
+
field: `sandboxes.${name}.service`,
|
|
3349
|
+
message: `Sandbox '${name}' uses compose mode but is missing required 'service' field`
|
|
3350
|
+
});
|
|
3351
|
+
}
|
|
3352
|
+
if (config.dockerfile && /\.\./.test(config.dockerfile)) {
|
|
3353
|
+
errors.push({
|
|
3354
|
+
field: `sandboxes.${name}.dockerfile`,
|
|
3355
|
+
message: `Dockerfile path '${config.dockerfile}' in sandbox '${name}' must not contain '..' path traversal`
|
|
3356
|
+
});
|
|
3357
|
+
}
|
|
3358
|
+
if (config.compose && /\.\./.test(config.compose)) {
|
|
3359
|
+
errors.push({
|
|
3360
|
+
field: `sandboxes.${name}.compose`,
|
|
3361
|
+
message: `Compose file path '${config.compose}' in sandbox '${name}' must not contain '..' path traversal`
|
|
3362
|
+
});
|
|
3363
|
+
}
|
|
3364
|
+
if (config.workdir) {
|
|
3365
|
+
if (!config.workdir.startsWith("/")) {
|
|
3366
|
+
errors.push({
|
|
3367
|
+
field: `sandboxes.${name}.workdir`,
|
|
3368
|
+
message: `Workdir '${config.workdir}' in sandbox '${name}' must be an absolute path (start with /)`
|
|
3369
|
+
});
|
|
3370
|
+
}
|
|
3371
|
+
if (/\.\./.test(config.workdir)) {
|
|
3372
|
+
errors.push({
|
|
3373
|
+
field: `sandboxes.${name}.workdir`,
|
|
3374
|
+
message: `Workdir '${config.workdir}' in sandbox '${name}' must not contain '..' path traversal`
|
|
3375
|
+
});
|
|
3376
|
+
}
|
|
3377
|
+
}
|
|
3378
|
+
if (config.visor_path) {
|
|
3379
|
+
if (!config.visor_path.startsWith("/")) {
|
|
3380
|
+
errors.push({
|
|
3381
|
+
field: `sandboxes.${name}.visor_path`,
|
|
3382
|
+
message: `visor_path '${config.visor_path}' in sandbox '${name}' must be an absolute path (start with /)`
|
|
3383
|
+
});
|
|
3384
|
+
}
|
|
3385
|
+
if (/\.\./.test(config.visor_path)) {
|
|
3386
|
+
errors.push({
|
|
3387
|
+
field: `sandboxes.${name}.visor_path`,
|
|
3388
|
+
message: `visor_path '${config.visor_path}' in sandbox '${name}' must not contain '..' path traversal`
|
|
3389
|
+
});
|
|
3390
|
+
}
|
|
3391
|
+
}
|
|
3392
|
+
if (config.cache?.paths) {
|
|
3393
|
+
for (const p of config.cache.paths) {
|
|
3394
|
+
if (!p.startsWith("/")) {
|
|
3395
|
+
errors.push({
|
|
3396
|
+
field: `sandboxes.${name}.cache.paths`,
|
|
3397
|
+
message: `Cache path '${p}' in sandbox '${name}' must be absolute (start with /)`,
|
|
3398
|
+
value: p
|
|
3399
|
+
});
|
|
3400
|
+
}
|
|
3401
|
+
if (/\.\./.test(p)) {
|
|
3402
|
+
errors.push({
|
|
3403
|
+
field: `sandboxes.${name}.cache.paths`,
|
|
3404
|
+
message: `Cache path '${p}' in sandbox '${name}' must not contain '..' path traversal`,
|
|
3405
|
+
value: p
|
|
3406
|
+
});
|
|
3407
|
+
}
|
|
3408
|
+
}
|
|
3409
|
+
}
|
|
3410
|
+
if (config.resources?.cpu !== void 0) {
|
|
3411
|
+
if (typeof config.resources.cpu !== "number" || config.resources.cpu <= 0) {
|
|
3412
|
+
errors.push({
|
|
3413
|
+
field: `sandboxes.${name}.resources.cpu`,
|
|
3414
|
+
message: `CPU limit in sandbox '${name}' must be a positive number`,
|
|
3415
|
+
value: config.resources.cpu
|
|
3416
|
+
});
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
}
|
|
3056
3420
|
/**
|
|
3057
3421
|
* Validate individual check configuration
|
|
3058
3422
|
*/
|
|
@@ -3400,7 +3764,17 @@ ${errors}`);
|
|
|
3400
3764
|
const addl = e.params && e.params.additionalProperty || "unknown";
|
|
3401
3765
|
const fullField = pathStr ? `${pathStr}.${addl}` : addl;
|
|
3402
3766
|
const topLevel = !pathStr;
|
|
3403
|
-
|
|
3767
|
+
const allowedTopLevelKeys = /* @__PURE__ */ new Set([
|
|
3768
|
+
"tests",
|
|
3769
|
+
"slack",
|
|
3770
|
+
"sandboxes",
|
|
3771
|
+
"sandbox",
|
|
3772
|
+
"sandbox_defaults"
|
|
3773
|
+
]);
|
|
3774
|
+
if (topLevel && allowedTopLevelKeys.has(addl)) {
|
|
3775
|
+
continue;
|
|
3776
|
+
}
|
|
3777
|
+
if (!topLevel && addl === "sandbox" && pathStr.match(/^(checks|steps)\.[^.]+$/)) {
|
|
3404
3778
|
continue;
|
|
3405
3779
|
}
|
|
3406
3780
|
warnings.push({
|
|
@@ -3605,4 +3979,4 @@ export {
|
|
|
3605
3979
|
config_exports,
|
|
3606
3980
|
init_config
|
|
3607
3981
|
};
|
|
3608
|
-
//# sourceMappingURL=chunk-
|
|
3982
|
+
//# sourceMappingURL=chunk-7YSOINAQ.mjs.map
|