@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.
Files changed (255) hide show
  1. package/README.md +31 -1
  2. package/defaults/.visor.yaml +420 -0
  3. package/dist/ai-review-service.d.ts +1 -0
  4. package/dist/ai-review-service.d.ts.map +1 -1
  5. package/dist/cli-main.d.ts.map +1 -1
  6. package/dist/config.d.ts +4 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/daemon.js +19 -0
  9. package/dist/defaults/.visor.yaml +420 -0
  10. package/dist/docs/commands.md +1 -1
  11. package/dist/docs/debugging.md +133 -0
  12. package/dist/docs/dev-playbook.md +10 -0
  13. package/dist/docs/index.md +1 -0
  14. package/dist/docs/scheduler.md +503 -0
  15. package/dist/docs/slack-integration.md +21 -0
  16. package/dist/docs/timeouts.md +1 -1
  17. package/dist/docs/workflow-creation-guide.md +39 -0
  18. package/dist/examples/README.md +30 -0
  19. package/dist/examples/calculator-config.yaml +4 -4
  20. package/dist/examples/sandbox-basic.yaml +18 -0
  21. package/dist/examples/sandbox-cache.yaml +32 -0
  22. package/dist/examples/sandbox-dockerfile-inline.yaml +22 -0
  23. package/dist/examples/sandbox-env-passthrough.yaml +26 -0
  24. package/dist/examples/sandbox-multi-env.yaml +27 -0
  25. package/dist/examples/sandbox-read-only.yaml +33 -0
  26. package/dist/examples/scheduler-example.yaml +118 -0
  27. package/dist/frontends/host.d.ts.map +1 -1
  28. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  29. package/dist/generated/config-schema.d.ts +230 -9
  30. package/dist/generated/config-schema.d.ts.map +1 -1
  31. package/dist/index.js +13676 -1604
  32. package/dist/mcp-server.d.ts +8 -8
  33. package/dist/{traces/run-2026-02-01T09-59-08-165Z.ndjson → output/traces/run-2026-02-08T18-16-04-160Z.ndjson} +84 -84
  34. package/dist/{traces/run-2026-02-01T09-59-52-595Z.ndjson → output/traces/run-2026-02-08T18-16-51-253Z.ndjson} +1029 -1029
  35. package/dist/providers/ai-check-provider.d.ts +16 -0
  36. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  37. package/dist/providers/check-provider.interface.d.ts +5 -0
  38. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  39. package/dist/providers/command-check-provider.d.ts.map +1 -1
  40. package/dist/providers/log-check-provider.d.ts.map +1 -1
  41. package/dist/providers/mcp-check-provider.d.ts +3 -0
  42. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  43. package/dist/providers/mcp-custom-sse-server.d.ts +22 -2
  44. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  45. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  46. package/dist/providers/workflow-tool-executor.d.ts +2 -0
  47. package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
  48. package/dist/sandbox/cache-volume-manager.d.ts +48 -0
  49. package/dist/sandbox/cache-volume-manager.d.ts.map +1 -0
  50. package/dist/sandbox/check-runner.d.ts +25 -0
  51. package/dist/sandbox/check-runner.d.ts.map +1 -0
  52. package/dist/sandbox/docker-compose-sandbox.d.ts +25 -0
  53. package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -0
  54. package/dist/sandbox/docker-image-sandbox.d.ts +32 -0
  55. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -0
  56. package/dist/sandbox/env-filter.d.ts +19 -0
  57. package/dist/sandbox/env-filter.d.ts.map +1 -0
  58. package/dist/sandbox/index.d.ts +9 -0
  59. package/dist/sandbox/index.d.ts.map +1 -0
  60. package/dist/sandbox/sandbox-manager.d.ts +39 -0
  61. package/dist/sandbox/sandbox-manager.d.ts.map +1 -0
  62. package/dist/sandbox/sandbox-telemetry.d.ts +9 -0
  63. package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -0
  64. package/dist/sandbox/trace-ingester.d.ts +19 -0
  65. package/dist/sandbox/trace-ingester.d.ts.map +1 -0
  66. package/dist/sandbox/types.d.ts +149 -0
  67. package/dist/sandbox/types.d.ts.map +1 -0
  68. package/dist/scheduler/cli-handler.d.ts +6 -0
  69. package/dist/scheduler/cli-handler.d.ts.map +1 -0
  70. package/dist/scheduler/index.d.ts +14 -0
  71. package/dist/scheduler/index.d.ts.map +1 -0
  72. package/dist/scheduler/schedule-parser.d.ts +34 -0
  73. package/dist/scheduler/schedule-parser.d.ts.map +1 -0
  74. package/dist/scheduler/schedule-store.d.ts +182 -0
  75. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  76. package/dist/scheduler/schedule-tool.d.ts +137 -0
  77. package/dist/scheduler/schedule-tool.d.ts.map +1 -0
  78. package/dist/scheduler/scheduler.d.ts +195 -0
  79. package/dist/scheduler/scheduler.d.ts.map +1 -0
  80. package/dist/sdk/check-provider-registry-ACRGIYOB.mjs +28 -0
  81. package/dist/sdk/check-provider-registry-VYHKFHK2.mjs +28 -0
  82. package/dist/sdk/{chunk-CNX7V5JK.mjs → chunk-25IC7KXZ.mjs} +2 -2
  83. package/dist/sdk/{chunk-IHZOSIF4.mjs → chunk-2KB35MB7.mjs} +3 -3
  84. package/dist/sdk/{chunk-HQL734ZI.mjs → chunk-6W75IMDC.mjs} +3 -3
  85. package/dist/sdk/{chunk-XWJPT5KQ.mjs → chunk-7YSOINAQ.mjs} +392 -18
  86. package/dist/sdk/chunk-7YSOINAQ.mjs.map +1 -0
  87. package/dist/sdk/{chunk-3OMWVM6J.mjs → chunk-B7BVQM5K.mjs} +2 -2
  88. package/dist/sdk/chunk-BDGUM6BA.mjs +38825 -0
  89. package/dist/sdk/chunk-BDGUM6BA.mjs.map +1 -0
  90. package/dist/sdk/{chunk-VW2GBXQT.mjs → chunk-D5KI4YQ4.mjs} +3 -3
  91. package/dist/sdk/chunk-DGZPPGJJ.mjs +38825 -0
  92. package/dist/sdk/chunk-DGZPPGJJ.mjs.map +1 -0
  93. package/dist/sdk/chunk-H5BOW5CR.mjs +91 -0
  94. package/dist/sdk/chunk-H5BOW5CR.mjs.map +1 -0
  95. package/dist/sdk/{chunk-YSN4G6CI.mjs → chunk-HEX3RL32.mjs} +81 -3
  96. package/dist/sdk/{chunk-YSN4G6CI.mjs.map → chunk-HEX3RL32.mjs.map} +1 -1
  97. package/dist/sdk/{chunk-ZYAUYXSW.mjs → chunk-J5RGJQ53.mjs} +14 -3
  98. package/dist/sdk/{chunk-ZYAUYXSW.mjs.map → chunk-J5RGJQ53.mjs.map} +1 -1
  99. package/dist/sdk/{chunk-WMJKH4XE.mjs → chunk-J7LXIPZS.mjs} +16 -1
  100. package/dist/sdk/{chunk-EXFGO4FX.mjs → chunk-KFKHU6CM.mjs} +2 -2
  101. package/dist/sdk/{chunk-MPS4HVQI.mjs → chunk-N7HO6KKC.mjs} +8 -8
  102. package/dist/sdk/{chunk-O5EZDNYL.mjs → chunk-NCWIZVOT.mjs} +2 -2
  103. package/dist/sdk/{chunk-3NMLT3YS.mjs → chunk-PO7X5XI7.mjs} +3 -3
  104. package/dist/sdk/{chunk-BHOKBQPB.mjs → chunk-R5Z7YWPB.mjs} +5 -5
  105. package/dist/sdk/{chunk-EORMDOZU.mjs → chunk-SGS2VMEL.mjs} +7 -7
  106. package/dist/sdk/{chunk-BOVFH3LI.mjs → chunk-VF6XIUE4.mjs} +21 -10
  107. package/dist/sdk/chunk-VF6XIUE4.mjs.map +1 -0
  108. package/dist/sdk/{chunk-J2QWVDXK.mjs → chunk-XDLQ3UNF.mjs} +3 -3
  109. package/dist/sdk/{chunk-S2RUE2RG.mjs → chunk-XR7XXGL7.mjs} +3 -3
  110. package/dist/sdk/{chunk-NAW3DB3I.mjs → chunk-XXAEN5KU.mjs} +3 -3
  111. package/dist/sdk/command-executor-DVVXERLR.mjs +14 -0
  112. package/dist/sdk/config-7VTT64SQ.mjs +16 -0
  113. package/dist/sdk/config-merger-RKCZJQ44.mjs +10 -0
  114. package/dist/sdk/event-bus-5K3Y2FCS.mjs +43 -0
  115. package/dist/sdk/{event-bus-5BEVPQ6T.mjs.map → event-bus-5K3Y2FCS.mjs.map} +1 -1
  116. package/dist/sdk/failure-condition-evaluator-4WMDF4Q3.mjs +17 -0
  117. package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs +471 -0
  118. package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs.map +1 -0
  119. package/dist/sdk/{github-frontend-5PCKKHVC.mjs → github-frontend-3N2NLO66.mjs} +520 -588
  120. package/dist/sdk/github-frontend-3N2NLO66.mjs.map +1 -0
  121. package/dist/sdk/host-ONVMEHAA.mjs +63 -0
  122. package/dist/sdk/host-ONVMEHAA.mjs.map +1 -0
  123. package/dist/sdk/{liquid-extensions-I7O7KMHF.mjs → liquid-extensions-5IZLTFSZ.mjs} +8 -8
  124. package/dist/sdk/memory-store-3N4AZCYB.mjs +12 -0
  125. package/dist/sdk/{metrics-7PP3EJUH.mjs → metrics-GXQ2EDXA.mjs} +4 -4
  126. package/dist/sdk/ndjson-sink-FD2PSXGD.mjs +52 -0
  127. package/dist/sdk/{ndjson-sink-B4V4NTAQ.mjs.map → ndjson-sink-FD2PSXGD.mjs.map} +1 -1
  128. package/dist/sdk/{prompt-state-EZYOUG75.mjs → prompt-state-YHGXB2OA.mjs} +5 -5
  129. package/dist/sdk/{renderer-schema-CKFB5NDB.mjs → renderer-schema-CMXOLNIG.mjs} +4 -4
  130. package/dist/sdk/routing-S3Y7T2X3.mjs +24 -0
  131. package/dist/sdk/sdk.d.mts +212 -4
  132. package/dist/sdk/sdk.d.ts +212 -4
  133. package/dist/sdk/sdk.js +26927 -6264
  134. package/dist/sdk/sdk.js.map +1 -1
  135. package/dist/sdk/sdk.mjs +23 -1278
  136. package/dist/sdk/sdk.mjs.map +1 -1
  137. package/dist/sdk/session-registry-6PV6SGEJ.mjs +10 -0
  138. package/dist/sdk/slack-frontend-R3M2CACB.mjs +899 -0
  139. package/dist/sdk/slack-frontend-R3M2CACB.mjs.map +1 -0
  140. package/dist/sdk/{trace-helpers-VP6QYVBX.mjs → trace-helpers-YHNPC7MR.mjs} +4 -4
  141. package/dist/sdk/tracer-init-XPRWKMZT.mjs +10 -0
  142. package/dist/sdk/tui-frontend-S546M7A7.mjs +281 -0
  143. package/dist/sdk/tui-frontend-S546M7A7.mjs.map +1 -0
  144. package/dist/sdk/workflow-check-provider-4F3432ZP.mjs +28 -0
  145. package/dist/sdk/workflow-check-provider-A44PBPG2.mjs +28 -0
  146. package/dist/sdk/workflow-check-provider-A44PBPG2.mjs.map +1 -0
  147. package/dist/sdk/workflow-registry-ZAYYXLEP.mjs +12 -0
  148. package/dist/sdk/workflow-registry-ZAYYXLEP.mjs.map +1 -0
  149. package/dist/slack/client.d.ts +28 -0
  150. package/dist/slack/client.d.ts.map +1 -1
  151. package/dist/slack/schedule-tool-handler.d.ts +46 -0
  152. package/dist/slack/schedule-tool-handler.d.ts.map +1 -0
  153. package/dist/slack/slack-output-adapter.d.ts +44 -0
  154. package/dist/slack/slack-output-adapter.d.ts.map +1 -0
  155. package/dist/slack/socket-runner.d.ts +22 -0
  156. package/dist/slack/socket-runner.d.ts.map +1 -1
  157. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  158. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
  159. package/dist/state-machine/dispatch/sandbox-routing.d.ts +21 -0
  160. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -0
  161. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  162. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  163. package/dist/test-runner/index.d.ts +5 -0
  164. package/dist/test-runner/index.d.ts.map +1 -1
  165. package/dist/{output/traces/run-2026-02-01T09-59-08-165Z.ndjson → traces/run-2026-02-08T18-16-04-160Z.ndjson} +84 -84
  166. package/dist/{output/traces/run-2026-02-01T09-59-52-595Z.ndjson → traces/run-2026-02-08T18-16-51-253Z.ndjson} +1029 -1029
  167. package/dist/tui/chat-runner.d.ts +39 -0
  168. package/dist/tui/chat-runner.d.ts.map +1 -0
  169. package/dist/tui/chat-state.d.ts +56 -0
  170. package/dist/tui/chat-state.d.ts.map +1 -0
  171. package/dist/tui/chat-tui.d.ts +69 -0
  172. package/dist/tui/chat-tui.d.ts.map +1 -0
  173. package/dist/tui/components/chat-box.d.ts +33 -0
  174. package/dist/tui/components/chat-box.d.ts.map +1 -0
  175. package/dist/tui/components/input-bar.d.ts +50 -0
  176. package/dist/tui/components/input-bar.d.ts.map +1 -0
  177. package/dist/tui/components/status-bar.d.ts +31 -0
  178. package/dist/tui/components/status-bar.d.ts.map +1 -0
  179. package/dist/tui/components/trace-viewer.d.ts +73 -0
  180. package/dist/tui/components/trace-viewer.d.ts.map +1 -0
  181. package/dist/tui/index.d.ts +14 -0
  182. package/dist/tui/index.d.ts.map +1 -0
  183. package/dist/tui/tui-frontend.d.ts +29 -0
  184. package/dist/tui/tui-frontend.d.ts.map +1 -0
  185. package/dist/types/bot.d.ts +35 -0
  186. package/dist/types/bot.d.ts.map +1 -1
  187. package/dist/types/config.d.ts +152 -3
  188. package/dist/types/config.d.ts.map +1 -1
  189. package/dist/types/engine.d.ts +3 -0
  190. package/dist/types/engine.d.ts.map +1 -1
  191. package/dist/utils/sandbox.d.ts.map +1 -1
  192. package/dist/utils/workspace-manager.d.ts +22 -2
  193. package/dist/utils/workspace-manager.d.ts.map +1 -1
  194. package/dist/utils/worktree-manager.d.ts +2 -1
  195. package/dist/utils/worktree-manager.d.ts.map +1 -1
  196. package/package.json +4 -2
  197. package/dist/docs/NPM_USAGE.md +0 -281
  198. package/dist/generated/config-schema.json +0 -2161
  199. package/dist/sdk/check-provider-registry-CVUONJ5A.mjs +0 -28
  200. package/dist/sdk/chunk-BOVFH3LI.mjs.map +0 -1
  201. package/dist/sdk/chunk-TS6BUNAI.mjs +0 -17722
  202. package/dist/sdk/chunk-TS6BUNAI.mjs.map +0 -1
  203. package/dist/sdk/chunk-XWJPT5KQ.mjs.map +0 -1
  204. package/dist/sdk/command-executor-Q7MHJKZJ.mjs +0 -14
  205. package/dist/sdk/config-DXX64GD3.mjs +0 -16
  206. package/dist/sdk/config-merger-PX3WIT57.mjs +0 -10
  207. package/dist/sdk/event-bus-5BEVPQ6T.mjs +0 -35
  208. package/dist/sdk/failure-condition-evaluator-G4HMJPXF.mjs +0 -17
  209. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +0 -458
  210. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +0 -1
  211. package/dist/sdk/github-frontend-5PCKKHVC.mjs.map +0 -1
  212. package/dist/sdk/host-H3AWNZ2F.mjs +0 -52
  213. package/dist/sdk/host-H3AWNZ2F.mjs.map +0 -1
  214. package/dist/sdk/memory-store-RW5N2NGJ.mjs +0 -12
  215. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +0 -44
  216. package/dist/sdk/routing-QHTGDIXF.mjs +0 -24
  217. package/dist/sdk/session-registry-4E6YRQ77.mjs +0 -10
  218. package/dist/sdk/slack-frontend-JUT3TYVC.mjs +0 -821
  219. package/dist/sdk/slack-frontend-JUT3TYVC.mjs.map +0 -1
  220. package/dist/sdk/tracer-init-GSLPPLCD.mjs +0 -10
  221. package/dist/sdk/workflow-check-provider-3IWBAZP7.mjs +0 -28
  222. package/dist/sdk/workflow-registry-KFWSDSLM.mjs +0 -12
  223. package/dist/tui.d.ts +0 -51
  224. package/dist/tui.d.ts.map +0 -1
  225. /package/dist/sdk/{check-provider-registry-CVUONJ5A.mjs.map → check-provider-registry-ACRGIYOB.mjs.map} +0 -0
  226. /package/dist/sdk/{chunk-WMJKH4XE.mjs.map → check-provider-registry-VYHKFHK2.mjs.map} +0 -0
  227. /package/dist/sdk/{chunk-CNX7V5JK.mjs.map → chunk-25IC7KXZ.mjs.map} +0 -0
  228. /package/dist/sdk/{chunk-IHZOSIF4.mjs.map → chunk-2KB35MB7.mjs.map} +0 -0
  229. /package/dist/sdk/{chunk-HQL734ZI.mjs.map → chunk-6W75IMDC.mjs.map} +0 -0
  230. /package/dist/sdk/{chunk-3OMWVM6J.mjs.map → chunk-B7BVQM5K.mjs.map} +0 -0
  231. /package/dist/sdk/{chunk-VW2GBXQT.mjs.map → chunk-D5KI4YQ4.mjs.map} +0 -0
  232. /package/dist/sdk/{command-executor-Q7MHJKZJ.mjs.map → chunk-J7LXIPZS.mjs.map} +0 -0
  233. /package/dist/sdk/{chunk-EXFGO4FX.mjs.map → chunk-KFKHU6CM.mjs.map} +0 -0
  234. /package/dist/sdk/{chunk-MPS4HVQI.mjs.map → chunk-N7HO6KKC.mjs.map} +0 -0
  235. /package/dist/sdk/{chunk-O5EZDNYL.mjs.map → chunk-NCWIZVOT.mjs.map} +0 -0
  236. /package/dist/sdk/{chunk-3NMLT3YS.mjs.map → chunk-PO7X5XI7.mjs.map} +0 -0
  237. /package/dist/sdk/{chunk-BHOKBQPB.mjs.map → chunk-R5Z7YWPB.mjs.map} +0 -0
  238. /package/dist/sdk/{chunk-EORMDOZU.mjs.map → chunk-SGS2VMEL.mjs.map} +0 -0
  239. /package/dist/sdk/{chunk-J2QWVDXK.mjs.map → chunk-XDLQ3UNF.mjs.map} +0 -0
  240. /package/dist/sdk/{chunk-S2RUE2RG.mjs.map → chunk-XR7XXGL7.mjs.map} +0 -0
  241. /package/dist/sdk/{chunk-NAW3DB3I.mjs.map → chunk-XXAEN5KU.mjs.map} +0 -0
  242. /package/dist/sdk/{config-DXX64GD3.mjs.map → command-executor-DVVXERLR.mjs.map} +0 -0
  243. /package/dist/sdk/{config-merger-PX3WIT57.mjs.map → config-7VTT64SQ.mjs.map} +0 -0
  244. /package/dist/sdk/{failure-condition-evaluator-G4HMJPXF.mjs.map → config-merger-RKCZJQ44.mjs.map} +0 -0
  245. /package/dist/sdk/{liquid-extensions-I7O7KMHF.mjs.map → failure-condition-evaluator-4WMDF4Q3.mjs.map} +0 -0
  246. /package/dist/sdk/{memory-store-RW5N2NGJ.mjs.map → liquid-extensions-5IZLTFSZ.mjs.map} +0 -0
  247. /package/dist/sdk/{metrics-7PP3EJUH.mjs.map → memory-store-3N4AZCYB.mjs.map} +0 -0
  248. /package/dist/sdk/{prompt-state-EZYOUG75.mjs.map → metrics-GXQ2EDXA.mjs.map} +0 -0
  249. /package/dist/sdk/{routing-QHTGDIXF.mjs.map → prompt-state-YHGXB2OA.mjs.map} +0 -0
  250. /package/dist/sdk/{renderer-schema-CKFB5NDB.mjs.map → renderer-schema-CMXOLNIG.mjs.map} +0 -0
  251. /package/dist/sdk/{session-registry-4E6YRQ77.mjs.map → routing-S3Y7T2X3.mjs.map} +0 -0
  252. /package/dist/sdk/{trace-helpers-VP6QYVBX.mjs.map → session-registry-6PV6SGEJ.mjs.map} +0 -0
  253. /package/dist/sdk/{tracer-init-GSLPPLCD.mjs.map → trace-helpers-YHNPC7MR.mjs.map} +0 -0
  254. /package/dist/sdk/{workflow-check-provider-3IWBAZP7.mjs.map → tracer-init-XPRWKMZT.mjs.map} +0 -0
  255. /package/dist/sdk/{workflow-registry-KFWSDSLM.mjs.map → workflow-check-provider-4F3432ZP.mjs.map} +0 -0
@@ -0,0 +1,18 @@
1
+ version: "2.0"
2
+
3
+ # Simplest sandbox: run a command check inside a Docker container
4
+ sandboxes:
5
+ node-env:
6
+ image: "node:20-alpine"
7
+
8
+ sandbox: node-env
9
+
10
+ checks:
11
+ node-version:
12
+ type: command
13
+ exec: "node --version"
14
+
15
+ lint-check:
16
+ type: command
17
+ depends_on: [node-version]
18
+ exec: "echo 'All files pass lint'"
@@ -0,0 +1,32 @@
1
+ version: "2.0"
2
+
3
+ # Cache volumes: persist data between sandbox runs
4
+ sandboxes:
5
+ node-env:
6
+ image: "node:20-alpine"
7
+ cache:
8
+ paths:
9
+ - "/tmp/cache"
10
+ - "/root/.npm"
11
+ ttl: "7d"
12
+ max_scopes: 5
13
+
14
+ sandbox: node-env
15
+
16
+ checks:
17
+ warm-cache:
18
+ type: command
19
+ exec: |
20
+ mkdir -p /tmp/cache
21
+ echo "cached-data" > /tmp/cache/result.txt
22
+ echo "cache warmed"
23
+
24
+ read-cache:
25
+ type: command
26
+ depends_on: [warm-cache]
27
+ exec: |
28
+ if [ -f /tmp/cache/result.txt ]; then
29
+ echo "cache hit: $(cat /tmp/cache/result.txt)"
30
+ else
31
+ echo "cache miss"
32
+ fi
@@ -0,0 +1,22 @@
1
+ version: "2.0"
2
+
3
+ # Inline Dockerfile: install custom tools in the sandbox image
4
+ sandboxes:
5
+ jq-env:
6
+ dockerfile_inline: |
7
+ FROM alpine:3.19
8
+ RUN apk add --no-cache jq
9
+
10
+ sandbox: jq-env
11
+
12
+ checks:
13
+ parse-json:
14
+ type: command
15
+ exec: |
16
+ echo '{"name":"visor","version":"2.0"}' | jq -r '.name'
17
+
18
+ transform-json:
19
+ type: command
20
+ depends_on: [parse-json]
21
+ exec: |
22
+ echo '[{"severity":"high"},{"severity":"low"}]' | jq '[.[] | select(.severity == "high")] | length'
@@ -0,0 +1,26 @@
1
+ version: "2.0"
2
+
3
+ # Environment variable forwarding into sandbox containers
4
+ sandboxes:
5
+ node-env:
6
+ image: "node:20-alpine"
7
+ # Forward host env vars matching these patterns into the container
8
+ env_passthrough:
9
+ - "CI"
10
+ - "NODE_*"
11
+ - "GITHUB_*"
12
+
13
+ sandbox: node-env
14
+
15
+ checks:
16
+ check-env:
17
+ type: command
18
+ # Check-level env vars are always injected (override host vars)
19
+ env:
20
+ MY_VAR: hello
21
+ BUILD_MODE: production
22
+ exec: "echo \"MY_VAR=$MY_VAR BUILD_MODE=$BUILD_MODE\""
23
+
24
+ check-passthrough:
25
+ type: command
26
+ exec: "echo \"CI=$CI NODE_ENV=$NODE_ENV\""
@@ -0,0 +1,27 @@
1
+ version: "2.0"
2
+
3
+ # Multiple sandbox environments with per-check overrides
4
+ sandboxes:
5
+ node-env:
6
+ image: "node:20-alpine"
7
+ alpine-env:
8
+ image: "alpine:3.19"
9
+
10
+ # Default: all checks run in node-env
11
+ sandbox: node-env
12
+
13
+ checks:
14
+ build:
15
+ type: command
16
+ exec: "node -e \"console.log('build OK')\""
17
+
18
+ system-check:
19
+ type: command
20
+ # Override: this check runs in alpine-env instead of node-env
21
+ sandbox: alpine-env
22
+ exec: "cat /etc/os-release | head -1"
23
+
24
+ final:
25
+ type: command
26
+ depends_on: [build, system-check]
27
+ exec: "echo 'all checks passed'"
@@ -0,0 +1,33 @@
1
+ version: "2.0"
2
+
3
+ # Secure execution: read-only workspace + no network access
4
+ sandboxes:
5
+ secure-env:
6
+ image: "node:20-alpine"
7
+ read_only: true
8
+ network: false
9
+
10
+ sandbox: secure-env
11
+
12
+ checks:
13
+ read-source:
14
+ type: command
15
+ exec: "cat package.json | head -5"
16
+
17
+ verify-read-only:
18
+ type: command
19
+ exec: |
20
+ if touch /workspace/test-file 2>/dev/null; then
21
+ echo "ERROR: workspace is writable" >&2
22
+ exit 1
23
+ fi
24
+ echo "workspace is read-only as expected"
25
+
26
+ verify-no-network:
27
+ type: command
28
+ exec: |
29
+ if wget -q --timeout=2 https://example.com -O /dev/null 2>/dev/null; then
30
+ echo "ERROR: network is available" >&2
31
+ exit 1
32
+ fi
33
+ echo "network is disabled as expected"
@@ -0,0 +1,118 @@
1
+ # Scheduler Example Configuration
2
+ # Demonstrates static cron jobs and scheduler permissions
3
+ version: "1.0"
4
+
5
+ # Scheduler configuration
6
+ scheduler:
7
+ enabled: true
8
+ storage:
9
+ path: .visor/schedules.json
10
+ default_timezone: America/New_York
11
+ check_interval_ms: 60000
12
+
13
+ # Limits for dynamic schedules created via AI tool
14
+ limits:
15
+ max_per_user: 25
16
+ max_recurring_per_user: 10
17
+ max_global: 1000
18
+
19
+ # Permissions for dynamic schedule creation
20
+ permissions:
21
+ allow_personal: true # Allow personal schedules (via DM or CLI)
22
+ allow_channel: true # Allow channel schedules (in Slack channels)
23
+ allow_dm: false # Disable sending scheduled DMs to other users
24
+ allowed_workflows: # Only these workflows can be scheduled dynamically
25
+ - "report-*"
26
+ - "status-*"
27
+ - "summary-*"
28
+ denied_workflows: # Block admin and dangerous workflows
29
+ - "admin-*"
30
+ - "dangerous-*"
31
+ - "deploy-*"
32
+
33
+ # Static cron jobs (always execute, bypass permissions)
34
+ cron:
35
+ # Daily status report on weekdays
36
+ daily-status:
37
+ workflow: daily-status-report
38
+ schedule: "0 9 * * 1-5" # Weekdays at 9am
39
+ timezone: America/New_York
40
+ output:
41
+ type: slack
42
+ target: "#team-updates"
43
+
44
+ # Weekly summary on Mondays
45
+ weekly-summary:
46
+ workflow: weekly-summary
47
+ schedule: "0 10 * * 1" # Mondays at 10am
48
+ inputs:
49
+ include_metrics: true
50
+ include_trends: true
51
+ output:
52
+ type: slack
53
+ target: "#engineering"
54
+
55
+ # Hourly health check
56
+ health-check:
57
+ workflow: health-check
58
+ schedule: "0 * * * *" # Every hour on the hour
59
+ output:
60
+ type: webhook
61
+ target: https://api.example.com/health-status
62
+
63
+ # Monthly audit report
64
+ monthly-audit:
65
+ workflow: monthly-audit
66
+ schedule: "0 8 1 * *" # First day of month at 8am
67
+ inputs:
68
+ detailed: true
69
+ output:
70
+ type: slack
71
+ target: "#security"
72
+
73
+ # Workflows that can be scheduled
74
+ checks:
75
+ # Daily status report workflow
76
+ daily-status-report:
77
+ type: ai
78
+ prompt: |
79
+ Generate a brief daily status report for the team.
80
+ Include:
81
+ - Recent commits and changes
82
+ - Open issues and PRs
83
+ - Any blockers or concerns
84
+
85
+ # Weekly summary workflow
86
+ weekly-summary:
87
+ type: ai
88
+ prompt: |
89
+ Generate a weekly summary report.
90
+ {% if inputs.include_metrics %}Include key metrics and statistics.{% endif %}
91
+ {% if inputs.include_trends %}Include trend analysis.{% endif %}
92
+
93
+ # Health check workflow
94
+ health-check:
95
+ type: command
96
+ command: "echo 'Health check passed at $(date)'"
97
+
98
+ # Monthly audit workflow
99
+ monthly-audit:
100
+ type: ai
101
+ prompt: |
102
+ Perform a monthly security and compliance audit.
103
+ {% if inputs.detailed %}Provide detailed findings.{% endif %}
104
+
105
+ # Report workflow that can be dynamically scheduled
106
+ report-team-status:
107
+ type: ai
108
+ prompt: "Generate a team status report"
109
+
110
+ # Status workflow that can be dynamically scheduled
111
+ status-quick:
112
+ type: command
113
+ command: "echo 'Quick status: All systems operational'"
114
+
115
+ # Summary workflow that can be dynamically scheduled
116
+ summary-daily:
117
+ type: ai
118
+ prompt: "Summarize today's activities"
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC5B,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACvC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,cAAc,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC;IAKnD,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1C,QAAQ,CAAC,UAAU,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC5B,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACvC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,cAAc,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC;IAKnD,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB1C,QAAQ,CAAC,UAAU,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack-frontend.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/slack-frontend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAUxD,KAAK,mBAAmB,GAAG;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,qBAAa,aAAc,YAAW,QAAQ;IAC5C,SAAgB,IAAI,WAAW;IAC/B,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,GAAG,CAAsB;IAEjC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,MAAM,CAAC,EAAE,mBAAmB;IAIxC,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAgJjC,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,kBAAkB;YAcZ,cAAc;IAoC5B,OAAO,CAAC,uBAAuB;YAcjB,yBAAyB;YAgCzB,qBAAqB;YAkCrB,iBAAiB;IA6B/B;;;;OAIG;YACW,oBAAoB;IAgKlC,OAAO,CAAC,YAAY;CAWrB"}
1
+ {"version":3,"file":"slack-frontend.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/frontends/slack-frontend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAUxD,KAAK,mBAAmB,GAAG;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,qBAAa,aAAc,YAAW,QAAQ;IAC5C,SAAgB,IAAI,WAAW;IAC/B,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,GAAG,CAAsB;IAEjC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,MAAM,CAAC,EAAE,mBAAmB;IAIxC,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAgJjC,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,kBAAkB;YAcZ,cAAc;IAoC5B,OAAO,CAAC,uBAAuB;YAcjB,yBAAyB;YAgCzB,qBAAqB;YAkCrB,iBAAiB;IA6B/B;;;;OAIG;YACW,oBAAoB;IAyKlC,OAAO,CAAC,YAAY;CAWrB"}
@@ -150,6 +150,10 @@ export declare const configSchema: {
150
150
  readonly $ref: "#/definitions/SlackConfig";
151
151
  readonly description: "Slack configuration";
152
152
  };
153
+ readonly scheduler: {
154
+ readonly $ref: "#/definitions/SchedulerConfig";
155
+ readonly description: "Scheduler configuration for scheduled workflow execution";
156
+ };
153
157
  };
154
158
  readonly required: readonly ["version"];
155
159
  readonly patternProperties: {
@@ -434,6 +438,10 @@ export declare const configSchema: {
434
438
  readonly $ref: "#/definitions/Record%3Cstring%2CMcpServerConfig%3E";
435
439
  readonly description: "MCP servers for this AI check - overrides global setting";
436
440
  };
441
+ readonly ai_mcp_servers_js: {
442
+ readonly type: "string";
443
+ readonly 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; ```";
444
+ };
437
445
  readonly ai_custom_tools: {
438
446
  readonly type: "array";
439
447
  readonly items: {
@@ -441,6 +449,10 @@ export declare const configSchema: {
441
449
  };
442
450
  readonly description: "List of custom tool names to expose to this AI check via ephemeral SSE MCP server";
443
451
  };
452
+ readonly ai_custom_tools_js: {
453
+ readonly type: "string";
454
+ readonly 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; ```";
455
+ };
444
456
  readonly claude_code: {
445
457
  readonly $ref: "#/definitions/ClaudeCodeConfig";
446
458
  readonly description: "Claude Code configuration (for claude-code type checks)";
@@ -690,7 +702,7 @@ export declare const configSchema: {
690
702
  readonly description: "Arguments/inputs for the workflow";
691
703
  };
692
704
  readonly overrides: {
693
- readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453%3E%3E";
705
+ readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E";
694
706
  readonly description: "Override specific step configurations in the workflow";
695
707
  };
696
708
  readonly output_mapping: {
@@ -706,7 +718,7 @@ export declare const configSchema: {
706
718
  readonly description: "Config file path - alternative to workflow ID (loads a Visor config file as workflow)";
707
719
  };
708
720
  readonly workflow_overrides: {
709
- readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453%3E%3E";
721
+ readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E";
710
722
  readonly description: "Alias for overrides - workflow step overrides (backward compatibility)";
711
723
  };
712
724
  readonly ref: {
@@ -850,6 +862,10 @@ export declare const configSchema: {
850
862
  readonly type: "boolean";
851
863
  readonly description: "Enable the delegate tool for task distribution to subagents";
852
864
  };
865
+ readonly enableTasks: {
866
+ readonly type: "boolean";
867
+ readonly description: "Enable task management for tracking multi-goal requests";
868
+ };
853
869
  readonly retry: {
854
870
  readonly $ref: "#/definitions/AIRetryConfig";
855
871
  readonly description: "Retry configuration for this provider";
@@ -903,7 +919,7 @@ export declare const configSchema: {
903
919
  readonly properties: {
904
920
  readonly command: {
905
921
  readonly type: "string";
906
- readonly description: "Command to execute for the MCP server";
922
+ readonly description: "Command to execute (presence indicates stdio server)";
907
923
  };
908
924
  readonly args: {
909
925
  readonly type: "array";
@@ -916,10 +932,44 @@ export declare const configSchema: {
916
932
  readonly $ref: "#/definitions/Record%3Cstring%2Cstring%3E";
917
933
  readonly description: "Environment variables for the MCP server";
918
934
  };
935
+ readonly url: {
936
+ readonly type: "string";
937
+ readonly description: "URL endpoint (presence indicates external server)";
938
+ };
939
+ readonly transport: {
940
+ readonly type: "string";
941
+ readonly enum: readonly ["stdio", "sse", "http"];
942
+ readonly description: "Transport type";
943
+ };
944
+ readonly workflow: {
945
+ readonly type: "string";
946
+ readonly description: "Workflow ID or path (presence indicates workflow tool)";
947
+ };
948
+ readonly inputs: {
949
+ readonly $ref: "#/definitions/Record%3Cstring%2Cunknown%3E";
950
+ readonly description: "Inputs to pass to workflow";
951
+ };
952
+ readonly description: {
953
+ readonly type: "string";
954
+ readonly description: "Tool description for AI";
955
+ };
956
+ readonly allowedMethods: {
957
+ readonly type: "array";
958
+ readonly items: {
959
+ readonly type: "string";
960
+ };
961
+ readonly description: "Whitelist specific methods from this MCP server (supports wildcards like \"search_*\")";
962
+ };
963
+ readonly blockedMethods: {
964
+ readonly type: "array";
965
+ readonly items: {
966
+ readonly type: "string";
967
+ };
968
+ readonly description: "Block specific methods from this MCP server (supports wildcards like \"*_delete\")";
969
+ };
919
970
  };
920
- readonly required: readonly ["command"];
921
971
  readonly additionalProperties: false;
922
- readonly description: "MCP Server configuration";
972
+ readonly description: "Unified MCP server/tool entry - type detected by which properties are present\n\nDetection logic (priority order): 1. Has `command` → stdio MCP server (external process) 2. Has `url` → SSE/HTTP MCP server (external endpoint) 3. Has `workflow` → workflow tool reference 4. Empty `{}` or just key → auto-detect from `tools:` section";
923
973
  readonly patternProperties: {
924
974
  readonly '^x-': {};
925
975
  };
@@ -1304,7 +1354,7 @@ export declare const configSchema: {
1304
1354
  readonly description: "Custom output name (defaults to workflow name)";
1305
1355
  };
1306
1356
  readonly overrides: {
1307
- readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453%3E%3E";
1357
+ readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E%3E";
1308
1358
  readonly description: "Step overrides";
1309
1359
  };
1310
1360
  readonly output_mapping: {
@@ -1319,13 +1369,13 @@ export declare const configSchema: {
1319
1369
  readonly '^x-': {};
1320
1370
  };
1321
1371
  };
1322
- readonly 'Record<string,Partial<interface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453>>': {
1372
+ readonly 'Record<string,Partial<interface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407>>': {
1323
1373
  readonly type: "object";
1324
1374
  readonly additionalProperties: {
1325
- readonly $ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453%3E";
1375
+ readonly $ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407%3E";
1326
1376
  };
1327
1377
  };
1328
- readonly 'Partial<interface-src_types_config.ts-11434-23754-src_types_config.ts-0-41453>': {
1378
+ readonly 'Partial<interface-src_types_config.ts-12605-26099-src_types_config.ts-0-46407>': {
1329
1379
  readonly type: "object";
1330
1380
  readonly additionalProperties: false;
1331
1381
  };
@@ -1960,6 +2010,177 @@ export declare const configSchema: {
1960
2010
  readonly '^x-': {};
1961
2011
  };
1962
2012
  };
2013
+ readonly SchedulerConfig: {
2014
+ readonly type: "object";
2015
+ readonly properties: {
2016
+ readonly enabled: {
2017
+ readonly type: "boolean";
2018
+ readonly description: "Enable/disable the scheduler (default: true)";
2019
+ };
2020
+ readonly storage: {
2021
+ readonly type: "object";
2022
+ readonly properties: {
2023
+ readonly path: {
2024
+ readonly type: "string";
2025
+ readonly description: "Path to schedules JSON file (default: .visor/schedules.json)";
2026
+ };
2027
+ };
2028
+ readonly additionalProperties: false;
2029
+ readonly description: "Storage configuration";
2030
+ readonly patternProperties: {
2031
+ readonly '^x-': {};
2032
+ };
2033
+ };
2034
+ readonly limits: {
2035
+ readonly $ref: "#/definitions/SchedulerLimitsConfig";
2036
+ readonly description: "Limits for dynamic schedules";
2037
+ };
2038
+ readonly default_timezone: {
2039
+ readonly type: "string";
2040
+ readonly description: "Default timezone (IANA format, e.g., \"America/New_York\")";
2041
+ };
2042
+ readonly check_interval_ms: {
2043
+ readonly type: "number";
2044
+ readonly description: "Check interval in milliseconds (default: 60000)";
2045
+ };
2046
+ readonly permissions: {
2047
+ readonly $ref: "#/definitions/SchedulerPermissionsConfig";
2048
+ readonly description: "Permissions for dynamic schedule creation (via AI tool)";
2049
+ };
2050
+ readonly cron: {
2051
+ readonly $ref: "#/definitions/Record%3Cstring%2CStaticCronJob%3E";
2052
+ readonly description: "Static cron jobs defined in configuration (always executed)";
2053
+ };
2054
+ };
2055
+ readonly additionalProperties: false;
2056
+ readonly description: "Scheduler configuration for workflow scheduling";
2057
+ readonly patternProperties: {
2058
+ readonly '^x-': {};
2059
+ };
2060
+ };
2061
+ readonly SchedulerLimitsConfig: {
2062
+ readonly type: "object";
2063
+ readonly properties: {
2064
+ readonly max_per_user: {
2065
+ readonly type: "number";
2066
+ readonly description: "Maximum schedules per user (default: 25)";
2067
+ };
2068
+ readonly max_recurring_per_user: {
2069
+ readonly type: "number";
2070
+ readonly description: "Maximum recurring schedules per user (default: 10)";
2071
+ };
2072
+ readonly max_global: {
2073
+ readonly type: "number";
2074
+ readonly description: "Maximum total schedules (default: 1000)";
2075
+ };
2076
+ };
2077
+ readonly additionalProperties: false;
2078
+ readonly description: "Scheduler limits configuration";
2079
+ readonly patternProperties: {
2080
+ readonly '^x-': {};
2081
+ };
2082
+ };
2083
+ readonly SchedulerPermissionsConfig: {
2084
+ readonly type: "object";
2085
+ readonly properties: {
2086
+ readonly allow_personal: {
2087
+ readonly type: "boolean";
2088
+ readonly description: "Allow personal schedules (via DM or CLI)";
2089
+ };
2090
+ readonly allow_channel: {
2091
+ readonly type: "boolean";
2092
+ readonly description: "Allow channel schedules (in Slack channels)";
2093
+ };
2094
+ readonly allow_dm: {
2095
+ readonly type: "boolean";
2096
+ readonly description: "Allow DM schedules (to specific users)";
2097
+ };
2098
+ readonly allowed_workflows: {
2099
+ readonly type: "array";
2100
+ readonly items: {
2101
+ readonly type: "string";
2102
+ };
2103
+ readonly description: "List of allowed workflow patterns (glob-style, e.g., \"report-*\")";
2104
+ };
2105
+ readonly denied_workflows: {
2106
+ readonly type: "array";
2107
+ readonly items: {
2108
+ readonly type: "string";
2109
+ };
2110
+ readonly description: "List of denied workflow patterns";
2111
+ };
2112
+ };
2113
+ readonly additionalProperties: false;
2114
+ readonly description: "Scheduler permissions for dynamic schedule creation";
2115
+ readonly patternProperties: {
2116
+ readonly '^x-': {};
2117
+ };
2118
+ };
2119
+ readonly 'Record<string,StaticCronJob>': {
2120
+ readonly type: "object";
2121
+ readonly additionalProperties: {
2122
+ readonly $ref: "#/definitions/StaticCronJob";
2123
+ };
2124
+ };
2125
+ readonly StaticCronJob: {
2126
+ readonly type: "object";
2127
+ readonly properties: {
2128
+ readonly schedule: {
2129
+ readonly type: "string";
2130
+ readonly description: "Cron expression (e.g., \"0 9 * * 1\" for every Monday at 9am)";
2131
+ };
2132
+ readonly workflow: {
2133
+ readonly type: "string";
2134
+ readonly description: "Workflow/check ID to run";
2135
+ };
2136
+ readonly inputs: {
2137
+ readonly $ref: "#/definitions/Record%3Cstring%2Cunknown%3E";
2138
+ readonly description: "Optional workflow inputs";
2139
+ };
2140
+ readonly output: {
2141
+ readonly type: "object";
2142
+ readonly properties: {
2143
+ readonly type: {
2144
+ readonly type: "string";
2145
+ readonly enum: readonly ["slack", "github", "webhook", "none"];
2146
+ readonly description: "Output type: slack, github, webhook, or none";
2147
+ };
2148
+ readonly target: {
2149
+ readonly type: "string";
2150
+ readonly description: "Target (channel name, repo, URL)";
2151
+ };
2152
+ readonly thread_id: {
2153
+ readonly type: "string";
2154
+ readonly description: "Thread ID for threaded outputs";
2155
+ };
2156
+ };
2157
+ readonly required: readonly ["type"];
2158
+ readonly additionalProperties: false;
2159
+ readonly description: "Output destination configuration";
2160
+ readonly patternProperties: {
2161
+ readonly '^x-': {};
2162
+ };
2163
+ };
2164
+ readonly description: {
2165
+ readonly type: "string";
2166
+ readonly description: "Description for logging/display";
2167
+ };
2168
+ readonly enabled: {
2169
+ readonly type: "boolean";
2170
+ readonly description: "Enable/disable this job (default: true)";
2171
+ };
2172
+ readonly timezone: {
2173
+ readonly type: "string";
2174
+ readonly description: "Timezone for schedule (default: UTC or scheduler default)";
2175
+ };
2176
+ };
2177
+ readonly required: readonly ["schedule", "workflow"];
2178
+ readonly additionalProperties: false;
2179
+ readonly description: "Static cron job defined in YAML configuration These are always executed by the scheduler daemon";
2180
+ readonly patternProperties: {
2181
+ readonly '^x-': {};
2182
+ };
2183
+ };
1963
2184
  };
1964
2185
  };
1965
2186
  export default configSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/generated/config-schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2hEf,CAAC;AACX,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/generated/config-schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8vEf,CAAC;AACX,eAAe,YAAY,CAAC"}