@probelabs/visor 0.1.129 → 0.1.130

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 (206) hide show
  1. package/README.md +23 -0
  2. package/dist/cli-main.d.ts.map +1 -1
  3. package/dist/config.d.ts +4 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/docs/author-permissions.md +20 -0
  6. package/dist/docs/enterprise-policy.md +1325 -0
  7. package/dist/docs/index.md +10 -0
  8. package/dist/docs/scheduler-storage.md +433 -0
  9. package/dist/docs/scheduler.md +12 -2
  10. package/dist/enterprise/license/validator.d.ts +39 -0
  11. package/dist/enterprise/license/validator.d.ts.map +1 -0
  12. package/dist/enterprise/loader.d.ts +25 -0
  13. package/dist/enterprise/loader.d.ts.map +1 -0
  14. package/dist/enterprise/policy/opa-compiler.d.ts +37 -0
  15. package/dist/enterprise/policy/opa-compiler.d.ts.map +1 -0
  16. package/dist/enterprise/policy/opa-http-evaluator.d.ts +36 -0
  17. package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +1 -0
  18. package/dist/enterprise/policy/opa-policy-engine.d.ts +48 -0
  19. package/dist/enterprise/policy/opa-policy-engine.d.ts.map +1 -0
  20. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +34 -0
  21. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +1 -0
  22. package/dist/enterprise/policy/policy-input-builder.d.ts +120 -0
  23. package/dist/enterprise/policy/policy-input-builder.d.ts.map +1 -0
  24. package/dist/enterprise/scheduler/knex-store.d.ts +41 -0
  25. package/dist/enterprise/scheduler/knex-store.d.ts.map +1 -0
  26. package/dist/examples/README.md +23 -0
  27. package/dist/examples/enterprise-policy/README.md +344 -0
  28. package/dist/examples/enterprise-policy/policies/capability_resolve.rego +29 -0
  29. package/dist/examples/enterprise-policy/policies/capability_resolve_test.rego +230 -0
  30. package/dist/examples/enterprise-policy/policies/check_execute.rego +71 -0
  31. package/dist/examples/enterprise-policy/policies/check_execute_test.rego +321 -0
  32. package/dist/examples/enterprise-policy/policies/deploy_production.rego +33 -0
  33. package/dist/examples/enterprise-policy/policies/deploy_production_test.rego +29 -0
  34. package/dist/examples/enterprise-policy/policies/slack_channel_gate.rego +17 -0
  35. package/dist/examples/enterprise-policy/policies/slack_tool_restrict.rego +16 -0
  36. package/dist/examples/enterprise-policy/policies/tool_invoke.rego +24 -0
  37. package/dist/examples/enterprise-policy/policies/tool_invoke_test.rego +227 -0
  38. package/dist/examples/enterprise-policy/visor.yaml +64 -0
  39. package/dist/failure-condition-evaluator.d.ts +18 -0
  40. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  41. package/dist/frontends/slack-frontend.d.ts +1 -0
  42. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  43. package/dist/generated/config-schema.d.ts +139 -0
  44. package/dist/generated/config-schema.d.ts.map +1 -1
  45. package/dist/index.js +12121 -7169
  46. package/dist/liquid-extensions.d.ts.map +1 -1
  47. package/dist/output/traces/{run-2026-02-08T18-16-04-160Z.ndjson → run-2026-02-11T16-20-59-999Z.ndjson} +84 -84
  48. package/dist/{traces/run-2026-02-08T18-16-51-253Z.ndjson → output/traces/run-2026-02-11T16-21-47-711Z.ndjson} +1032 -1032
  49. package/dist/policy/default-engine.d.ts +17 -0
  50. package/dist/policy/default-engine.d.ts.map +1 -0
  51. package/dist/policy/index.d.ts +4 -0
  52. package/dist/policy/index.d.ts.map +1 -0
  53. package/dist/policy/policy-check-command.d.ts +65 -0
  54. package/dist/policy/policy-check-command.d.ts.map +1 -0
  55. package/dist/policy/types.d.ts +81 -0
  56. package/dist/policy/types.d.ts.map +1 -0
  57. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  58. package/dist/providers/check-provider.interface.d.ts +2 -0
  59. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  60. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  61. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  62. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  63. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  64. package/dist/scheduler/index.d.ts +2 -0
  65. package/dist/scheduler/index.d.ts.map +1 -1
  66. package/dist/scheduler/schedule-store.d.ts +33 -59
  67. package/dist/scheduler/schedule-store.d.ts.map +1 -1
  68. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  69. package/dist/scheduler/scheduler.d.ts +24 -3
  70. package/dist/scheduler/scheduler.d.ts.map +1 -1
  71. package/dist/scheduler/store/index.d.ts +7 -0
  72. package/dist/scheduler/store/index.d.ts.map +1 -0
  73. package/dist/scheduler/store/json-migrator.d.ts +10 -0
  74. package/dist/scheduler/store/json-migrator.d.ts.map +1 -0
  75. package/dist/scheduler/store/sqlite-store.d.ts +32 -0
  76. package/dist/scheduler/store/sqlite-store.d.ts.map +1 -0
  77. package/dist/scheduler/store/types.d.ts +127 -0
  78. package/dist/scheduler/store/types.d.ts.map +1 -0
  79. package/dist/sdk/check-provider-registry-M3Y6JMTW.mjs +28 -0
  80. package/dist/sdk/check-provider-registry-PANIXYRB.mjs +28 -0
  81. package/dist/sdk/{chunk-D5KI4YQ4.mjs → chunk-DIND4ZCV.mjs} +2 -2
  82. package/dist/sdk/{chunk-DGZPPGJJ.mjs → chunk-EUUAQBTW.mjs} +1463 -568
  83. package/dist/sdk/chunk-EUUAQBTW.mjs.map +1 -0
  84. package/dist/sdk/{chunk-XDLQ3UNF.mjs → chunk-GEW6LS32.mjs} +2 -2
  85. package/dist/sdk/{chunk-N7HO6KKC.mjs → chunk-HOKQOO3G.mjs} +11 -6
  86. package/dist/sdk/chunk-HOKQOO3G.mjs.map +1 -0
  87. package/dist/sdk/{chunk-XR7XXGL7.mjs → chunk-JL7JXCET.mjs} +2 -2
  88. package/dist/sdk/{chunk-6W75IMDC.mjs → chunk-LG4AUKHB.mjs} +2 -2
  89. package/dist/sdk/{chunk-BDGUM6BA.mjs → chunk-S6CD7GFM.mjs} +1463 -568
  90. package/dist/sdk/chunk-S6CD7GFM.mjs.map +1 -0
  91. package/dist/sdk/{chunk-PO7X5XI7.mjs → chunk-SZXICFQ3.mjs} +2 -2
  92. package/dist/sdk/{chunk-HEX3RL32.mjs → chunk-UCMJJ3IM.mjs} +5 -2
  93. package/dist/sdk/{chunk-HEX3RL32.mjs.map → chunk-UCMJJ3IM.mjs.map} +1 -1
  94. package/dist/sdk/{chunk-7YSOINAQ.mjs → chunk-UCNT3PDT.mjs} +342 -5
  95. package/dist/sdk/chunk-UCNT3PDT.mjs.map +1 -0
  96. package/dist/sdk/{chunk-R5Z7YWPB.mjs → chunk-V2IV3ILA.mjs} +7 -5
  97. package/dist/sdk/chunk-V2IV3ILA.mjs.map +1 -0
  98. package/dist/sdk/{chunk-SGS2VMEL.mjs → chunk-VMLORODQ.mjs} +107 -20
  99. package/dist/sdk/chunk-VMLORODQ.mjs.map +1 -0
  100. package/dist/sdk/{chunk-2KB35MB7.mjs → chunk-VPC3QSPW.mjs} +2 -2
  101. package/dist/sdk/{chunk-J5RGJQ53.mjs → chunk-YJRBN3XS.mjs} +2 -2
  102. package/dist/sdk/{command-executor-DVVXERLR.mjs → command-executor-TOYBBE7S.mjs} +4 -4
  103. package/dist/sdk/{config-7VTT64SQ.mjs → config-OGOS4ZU4.mjs} +4 -4
  104. package/dist/sdk/failure-condition-evaluator-HC3M5377.mjs +17 -0
  105. package/dist/sdk/{github-frontend-3N2NLO66.mjs → github-frontend-E2KJSC3Y.mjs} +7 -7
  106. package/dist/sdk/{host-ONVMEHAA.mjs → host-EE6EJ2FM.mjs} +4 -4
  107. package/dist/sdk/lazy-otel-5NH4ZJJM.mjs +24 -0
  108. package/dist/sdk/{liquid-extensions-5IZLTFSZ.mjs → liquid-extensions-E4EUOCES.mjs} +5 -5
  109. package/dist/sdk/memory-store-AAPL2MTE.mjs +12 -0
  110. package/dist/sdk/{metrics-GXQ2EDXA.mjs → metrics-I6A7IHG4.mjs} +3 -3
  111. package/dist/sdk/{prompt-state-YHGXB2OA.mjs → prompt-state-VAKKC773.mjs} +4 -4
  112. package/dist/sdk/{renderer-schema-CMXOLNIG.mjs → renderer-schema-HXEW6BRJ.mjs} +3 -3
  113. package/dist/sdk/{routing-S3Y7T2X3.mjs → routing-OZQWAGAI.mjs} +9 -8
  114. package/dist/sdk/schedule-tool-handler-B7TMSG6A.mjs +38 -0
  115. package/dist/sdk/schedule-tool-handler-IEB2VS7O.mjs +38 -0
  116. package/dist/sdk/sdk.d.mts +134 -4
  117. package/dist/sdk/sdk.d.ts +134 -4
  118. package/dist/sdk/sdk.js +2509 -1085
  119. package/dist/sdk/sdk.js.map +1 -1
  120. package/dist/sdk/sdk.mjs +14 -14
  121. package/dist/sdk/{slack-frontend-R3M2CACB.mjs → slack-frontend-LAY45IBR.mjs} +119 -29
  122. package/dist/sdk/slack-frontend-LAY45IBR.mjs.map +1 -0
  123. package/dist/sdk/{trace-helpers-YHNPC7MR.mjs → trace-helpers-PP3YHTAM.mjs} +3 -3
  124. package/dist/sdk/{tui-frontend-S546M7A7.mjs → tui-frontend-T56PZB67.mjs} +25 -16
  125. package/dist/sdk/tui-frontend-T56PZB67.mjs.map +1 -0
  126. package/dist/sdk/workflow-check-provider-2ET3SFZH.mjs +28 -0
  127. package/dist/sdk/workflow-check-provider-2ET3SFZH.mjs.map +1 -0
  128. package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs +28 -0
  129. package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs.map +1 -0
  130. package/dist/sdk/workflow-registry-AAD37XKZ.mjs +12 -0
  131. package/dist/sdk/workflow-registry-AAD37XKZ.mjs.map +1 -0
  132. package/dist/slack/client.d.ts +12 -0
  133. package/dist/slack/client.d.ts.map +1 -1
  134. package/dist/slack/slack-output-adapter.d.ts.map +1 -1
  135. package/dist/slack/socket-runner.d.ts.map +1 -1
  136. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  137. package/dist/state-machine/dispatch/policy-gate.d.ts +28 -0
  138. package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -0
  139. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  140. package/dist/state-machine/states/routing.d.ts.map +1 -1
  141. package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
  142. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  143. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  144. package/dist/test-runner/validator.d.ts.map +1 -1
  145. package/dist/traces/{run-2026-02-08T18-16-04-160Z.ndjson → run-2026-02-11T16-20-59-999Z.ndjson} +84 -84
  146. package/dist/{output/traces/run-2026-02-08T18-16-51-253Z.ndjson → traces/run-2026-02-11T16-21-47-711Z.ndjson} +1032 -1032
  147. package/dist/tui/chat-runner.d.ts.map +1 -1
  148. package/dist/tui/chat-state.d.ts +1 -0
  149. package/dist/tui/chat-state.d.ts.map +1 -1
  150. package/dist/tui/chat-tui.d.ts +3 -2
  151. package/dist/tui/chat-tui.d.ts.map +1 -1
  152. package/dist/tui/components/chat-box.d.ts +9 -0
  153. package/dist/tui/components/chat-box.d.ts.map +1 -1
  154. package/dist/tui/components/input-bar.d.ts +18 -1
  155. package/dist/tui/components/input-bar.d.ts.map +1 -1
  156. package/dist/tui/components/status-bar.d.ts +5 -2
  157. package/dist/tui/components/status-bar.d.ts.map +1 -1
  158. package/dist/tui/components/trace-viewer.d.ts +1 -0
  159. package/dist/tui/components/trace-viewer.d.ts.map +1 -1
  160. package/dist/tui/tui-frontend.d.ts.map +1 -1
  161. package/dist/types/config.d.ts +107 -3
  162. package/dist/types/config.d.ts.map +1 -1
  163. package/dist/types/engine.d.ts +5 -0
  164. package/dist/types/engine.d.ts.map +1 -1
  165. package/dist/types/execution.d.ts +1 -1
  166. package/dist/types/execution.d.ts.map +1 -1
  167. package/package.json +14 -4
  168. package/dist/sdk/check-provider-registry-ACRGIYOB.mjs +0 -28
  169. package/dist/sdk/check-provider-registry-VYHKFHK2.mjs +0 -28
  170. package/dist/sdk/chunk-7YSOINAQ.mjs.map +0 -1
  171. package/dist/sdk/chunk-BDGUM6BA.mjs.map +0 -1
  172. package/dist/sdk/chunk-DGZPPGJJ.mjs.map +0 -1
  173. package/dist/sdk/chunk-N7HO6KKC.mjs.map +0 -1
  174. package/dist/sdk/chunk-R5Z7YWPB.mjs.map +0 -1
  175. package/dist/sdk/chunk-SGS2VMEL.mjs.map +0 -1
  176. package/dist/sdk/failure-condition-evaluator-4WMDF4Q3.mjs +0 -17
  177. package/dist/sdk/memory-store-3N4AZCYB.mjs +0 -12
  178. package/dist/sdk/slack-frontend-R3M2CACB.mjs.map +0 -1
  179. package/dist/sdk/tui-frontend-S546M7A7.mjs.map +0 -1
  180. package/dist/sdk/workflow-check-provider-4F3432ZP.mjs +0 -28
  181. package/dist/sdk/workflow-check-provider-A44PBPG2.mjs +0 -28
  182. package/dist/sdk/workflow-registry-ZAYYXLEP.mjs +0 -12
  183. /package/dist/sdk/{check-provider-registry-ACRGIYOB.mjs.map → check-provider-registry-M3Y6JMTW.mjs.map} +0 -0
  184. /package/dist/sdk/{check-provider-registry-VYHKFHK2.mjs.map → check-provider-registry-PANIXYRB.mjs.map} +0 -0
  185. /package/dist/sdk/{chunk-D5KI4YQ4.mjs.map → chunk-DIND4ZCV.mjs.map} +0 -0
  186. /package/dist/sdk/{chunk-XDLQ3UNF.mjs.map → chunk-GEW6LS32.mjs.map} +0 -0
  187. /package/dist/sdk/{chunk-XR7XXGL7.mjs.map → chunk-JL7JXCET.mjs.map} +0 -0
  188. /package/dist/sdk/{chunk-6W75IMDC.mjs.map → chunk-LG4AUKHB.mjs.map} +0 -0
  189. /package/dist/sdk/{chunk-PO7X5XI7.mjs.map → chunk-SZXICFQ3.mjs.map} +0 -0
  190. /package/dist/sdk/{chunk-2KB35MB7.mjs.map → chunk-VPC3QSPW.mjs.map} +0 -0
  191. /package/dist/sdk/{chunk-J5RGJQ53.mjs.map → chunk-YJRBN3XS.mjs.map} +0 -0
  192. /package/dist/sdk/{command-executor-DVVXERLR.mjs.map → command-executor-TOYBBE7S.mjs.map} +0 -0
  193. /package/dist/sdk/{config-7VTT64SQ.mjs.map → config-OGOS4ZU4.mjs.map} +0 -0
  194. /package/dist/sdk/{failure-condition-evaluator-4WMDF4Q3.mjs.map → failure-condition-evaluator-HC3M5377.mjs.map} +0 -0
  195. /package/dist/sdk/{github-frontend-3N2NLO66.mjs.map → github-frontend-E2KJSC3Y.mjs.map} +0 -0
  196. /package/dist/sdk/{host-ONVMEHAA.mjs.map → host-EE6EJ2FM.mjs.map} +0 -0
  197. /package/dist/sdk/{liquid-extensions-5IZLTFSZ.mjs.map → lazy-otel-5NH4ZJJM.mjs.map} +0 -0
  198. /package/dist/sdk/{memory-store-3N4AZCYB.mjs.map → liquid-extensions-E4EUOCES.mjs.map} +0 -0
  199. /package/dist/sdk/{metrics-GXQ2EDXA.mjs.map → memory-store-AAPL2MTE.mjs.map} +0 -0
  200. /package/dist/sdk/{prompt-state-YHGXB2OA.mjs.map → metrics-I6A7IHG4.mjs.map} +0 -0
  201. /package/dist/sdk/{routing-S3Y7T2X3.mjs.map → prompt-state-VAKKC773.mjs.map} +0 -0
  202. /package/dist/sdk/{renderer-schema-CMXOLNIG.mjs.map → renderer-schema-HXEW6BRJ.mjs.map} +0 -0
  203. /package/dist/sdk/{trace-helpers-YHNPC7MR.mjs.map → routing-OZQWAGAI.mjs.map} +0 -0
  204. /package/dist/sdk/{workflow-check-provider-4F3432ZP.mjs.map → schedule-tool-handler-B7TMSG6A.mjs.map} +0 -0
  205. /package/dist/sdk/{workflow-check-provider-A44PBPG2.mjs.map → schedule-tool-handler-IEB2VS7O.mjs.map} +0 -0
  206. /package/dist/sdk/{workflow-registry-ZAYYXLEP.mjs.map → trace-helpers-PP3YHTAM.mjs.map} +0 -0
package/dist/sdk/sdk.d.ts CHANGED
@@ -121,6 +121,45 @@ interface SandboxConfig {
121
121
  cache?: SandboxCacheConfig;
122
122
  }
123
123
 
124
+ interface PolicyConfig {
125
+ /** Policy engine mode */
126
+ engine: 'local' | 'remote' | 'disabled';
127
+ /** Path to .rego files or .wasm bundle (local mode) */
128
+ rules?: string | string[];
129
+ /** Path to a JSON file to load as OPA data document */
130
+ data?: string;
131
+ /** OPA server URL (remote mode) */
132
+ url?: string;
133
+ /** Default decision when policy evaluation fails */
134
+ fallback?: 'allow' | 'deny' | 'warn';
135
+ /** Evaluation timeout in ms (default: 5000) */
136
+ timeout?: number;
137
+ /** Role definitions: map role names to conditions */
138
+ roles?: Record<string, PolicyRoleConfig>;
139
+ }
140
+ interface PolicyRoleConfig {
141
+ /** GitHub author associations that map to this role */
142
+ author_association?: string[];
143
+ /** GitHub team slugs (requires GitHub API) */
144
+ teams?: string[];
145
+ /** Explicit GitHub usernames */
146
+ users?: string[];
147
+ /** Slack user IDs (e.g., ["U0123ABC"]) */
148
+ slack_users?: string[];
149
+ /** Email addresses for identity matching (e.g., ["alice@co.com"]) */
150
+ emails?: string[];
151
+ /** Slack channel IDs — role only applies when triggered from these channels */
152
+ slack_channels?: string[];
153
+ }
154
+ interface StepPolicyOverride {
155
+ /** Required role(s) - any of these roles suffices */
156
+ require?: string | string[];
157
+ /** Explicit deny for roles */
158
+ deny?: string[];
159
+ /** Custom OPA rule path for this step */
160
+ rule?: string;
161
+ }
162
+
124
163
  /**
125
164
  * Failure condition severity levels
126
165
  */
@@ -682,6 +721,8 @@ interface CheckConfig {
682
721
  persist_worktree?: boolean;
683
722
  /** Sandbox name to use for this check (overrides workspace-level default) */
684
723
  sandbox?: string;
724
+ /** Per-step policy override (enterprise) */
725
+ policy?: StepPolicyOverride;
685
726
  }
686
727
  /**
687
728
  * Backoff policy for retries
@@ -724,12 +765,16 @@ interface OnFailConfig {
724
765
  */
725
766
  transitions?: TransitionRule[];
726
767
  }
768
+ /**
769
+ * Success routing run item - can be step name, step with args, or workflow with args
770
+ */
771
+ type OnSuccessRunItem = string | OnInitStepInvocation | OnInitWorkflowInvocation;
727
772
  /**
728
773
  * Success routing configuration per check
729
774
  */
730
775
  interface OnSuccessConfig {
731
- /** Post-success steps to run */
732
- run?: string[];
776
+ /** Post-success steps to run - can be step names or rich invocations with arguments */
777
+ run?: OnSuccessRunItem[];
733
778
  /** Optional jump back to ancestor step (by id) */
734
779
  goto?: string;
735
780
  /** Simulate a different event when performing goto (e.g., 'pr_updated') */
@@ -1141,6 +1186,60 @@ interface SchedulerPermissionsConfig {
1141
1186
  /** List of denied workflow patterns */
1142
1187
  denied_workflows?: string[];
1143
1188
  }
1189
+ /**
1190
+ * SSL/TLS configuration for scheduler database connections
1191
+ */
1192
+ interface SchedulerSslConfig {
1193
+ /** Enable SSL (default: true when SslConfig object is provided) */
1194
+ enabled?: boolean;
1195
+ /** Reject unauthorized certificates (default: true) */
1196
+ reject_unauthorized?: boolean;
1197
+ /** Path to CA certificate PEM file */
1198
+ ca?: string;
1199
+ /** Path to client certificate PEM file */
1200
+ cert?: string;
1201
+ /** Path to client key PEM file */
1202
+ key?: string;
1203
+ }
1204
+ /**
1205
+ * Scheduler storage connection configuration
1206
+ */
1207
+ interface SchedulerStorageConnectionConfig {
1208
+ /** SQLite database file path (default: '.visor/schedules.db') */
1209
+ filename?: string;
1210
+ /** Database host (PostgreSQL/MySQL/MSSQL) */
1211
+ host?: string;
1212
+ /** Database port (PostgreSQL/MySQL/MSSQL) */
1213
+ port?: number;
1214
+ /** Database name (PostgreSQL/MySQL/MSSQL) */
1215
+ database?: string;
1216
+ /** Database user (PostgreSQL/MySQL/MSSQL) */
1217
+ user?: string;
1218
+ /** Database password (PostgreSQL/MySQL/MSSQL) */
1219
+ password?: string;
1220
+ /** SSL/TLS configuration (PostgreSQL/MySQL/MSSQL) */
1221
+ ssl?: boolean | SchedulerSslConfig;
1222
+ /** Connection string URL (e.g., postgresql://user:pass@host/db) */
1223
+ connection_string?: string;
1224
+ /** Connection pool configuration */
1225
+ pool?: {
1226
+ min?: number;
1227
+ max?: number;
1228
+ };
1229
+ }
1230
+ /**
1231
+ * Scheduler high-availability configuration
1232
+ */
1233
+ interface SchedulerHAConfig {
1234
+ /** Enable distributed locking for multi-node deployments (default: false) */
1235
+ enabled?: boolean;
1236
+ /** Unique node identifier (default: hostname-pid) */
1237
+ node_id?: string;
1238
+ /** Lock time-to-live in seconds (default: 60) */
1239
+ lock_ttl?: number;
1240
+ /** Heartbeat interval for lock renewal in seconds (default: 15) */
1241
+ heartbeat_interval?: number;
1242
+ }
1144
1243
  /**
1145
1244
  * Scheduler configuration for workflow scheduling
1146
1245
  */
@@ -1149,9 +1248,15 @@ interface SchedulerConfig {
1149
1248
  enabled?: boolean;
1150
1249
  /** Storage configuration */
1151
1250
  storage?: {
1152
- /** Path to schedules JSON file (default: .visor/schedules.json) */
1251
+ /** Path to schedules JSON file (legacy, triggers auto-migration) */
1153
1252
  path?: string;
1253
+ /** Database driver (default: 'sqlite') */
1254
+ driver?: 'sqlite' | 'postgresql' | 'mysql' | 'mssql';
1255
+ /** Database connection configuration */
1256
+ connection?: SchedulerStorageConnectionConfig;
1154
1257
  };
1258
+ /** High-availability configuration for multi-node deployments */
1259
+ ha?: SchedulerHAConfig;
1155
1260
  /** Limits for dynamic schedules */
1156
1261
  limits?: SchedulerLimitsConfig;
1157
1262
  /** Default timezone (IANA format, e.g., "America/New_York") */
@@ -1234,6 +1339,8 @@ interface VisorConfig {
1234
1339
  slack?: SlackConfig;
1235
1340
  /** Scheduler configuration for scheduled workflow execution */
1236
1341
  scheduler?: SchedulerConfig;
1342
+ /** Enterprise policy engine configuration */
1343
+ policy?: PolicyConfig;
1237
1344
  }
1238
1345
  /**
1239
1346
  * Workspace isolation configuration
@@ -1286,7 +1393,7 @@ interface CheckExecutionStats {
1286
1393
  failedRuns: number;
1287
1394
  skippedRuns: number;
1288
1395
  skipped: boolean;
1289
- skipReason?: 'if_condition' | 'fail_fast' | 'dependency_failed' | 'forEach_empty' | 'assume';
1396
+ skipReason?: 'if_condition' | 'fail_fast' | 'dependency_failed' | 'forEach_empty' | 'assume' | 'policy_denied';
1290
1397
  skipCondition?: string;
1291
1398
  totalDuration: number;
1292
1399
  providerDurationMs?: number;
@@ -1395,6 +1502,27 @@ declare class EventBus {
1395
1502
  emit(event: AnyEvent | EventEnvelope): Promise<void>;
1396
1503
  }
1397
1504
 
1505
+ /** Bot transport types (trimmed for Slack v1) */
1506
+ type BotTransportType = 'slack' | string;
1507
+ interface NormalizedMessage {
1508
+ role: 'user' | 'bot';
1509
+ text: string;
1510
+ timestamp: string;
1511
+ origin?: string;
1512
+ /** Optional user identifier (e.g., Slack user id, GitHub login) */
1513
+ user?: string;
1514
+ }
1515
+ interface ConversationContext {
1516
+ transport: BotTransportType;
1517
+ thread: {
1518
+ id: string;
1519
+ url?: string;
1520
+ };
1521
+ messages: NormalizedMessage[];
1522
+ current: NormalizedMessage;
1523
+ attributes: Record<string, string>;
1524
+ }
1525
+
1398
1526
  /**
1399
1527
  * Execution context passed to check providers
1400
1528
  */
@@ -1404,6 +1532,8 @@ interface ExecutionContext {
1404
1532
  reuseSession?: boolean;
1405
1533
  /** CLI message value (from --message argument) */
1406
1534
  cliMessage?: string;
1535
+ /** Conversation context - unified access to user message across transports (CLI, Slack, etc.) */
1536
+ conversation?: ConversationContext;
1407
1537
  /**
1408
1538
  * Stage-local baseline of output history lengths per check name.
1409
1539
  * When present, providers should expose an `outputs_history_stage` object in