@probelabs/visor 0.1.152 → 0.1.153

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 (88) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/docs/ai-configuration.md +4 -4
  3. package/dist/docs/sandbox-engines.md +53 -5
  4. package/dist/examples/ai-with-bash.yaml +2 -2
  5. package/dist/examples/sandbox-bind-paths.yaml +31 -0
  6. package/dist/examples/sandbox-host-workdir.yaml +27 -0
  7. package/dist/examples/workflow-sandbox.yaml +43 -0
  8. package/dist/generated/config-schema.d.ts +38 -8
  9. package/dist/generated/config-schema.d.ts.map +1 -1
  10. package/dist/generated/config-schema.json +40 -8
  11. package/dist/index.js +149 -37
  12. package/dist/output/traces/{run-2026-03-04T06-46-24-105Z.ndjson → run-2026-03-04T13-24-27-240Z.ndjson} +84 -84
  13. package/dist/{traces/run-2026-03-04T06-47-08-884Z.ndjson → output/traces/run-2026-03-04T13-25-12-321Z.ndjson} +1802 -1802
  14. package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
  15. package/dist/sandbox/check-runner.d.ts.map +1 -1
  16. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
  17. package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
  18. package/dist/sandbox/types.d.ts +13 -0
  19. package/dist/sandbox/types.d.ts.map +1 -1
  20. package/dist/scheduler/schedule-tool.d.ts +2 -0
  21. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  22. package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs → check-provider-registry-CSIZGIKC.mjs} +3 -3
  23. package/dist/sdk/{check-provider-registry-VY5ZZAEU.mjs → check-provider-registry-OEPUY5P6.mjs} +6 -6
  24. package/dist/sdk/{check-provider-registry-DCZR46KQ.mjs → check-provider-registry-ZOGNKTC3.mjs} +3 -3
  25. package/dist/sdk/{chunk-FYK2DJK6.mjs → chunk-CPYQDJ27.mjs} +86 -26
  26. package/dist/sdk/chunk-CPYQDJ27.mjs.map +1 -0
  27. package/dist/sdk/{chunk-QRR6OJQN.mjs → chunk-EYQWEVZF.mjs} +130 -91
  28. package/dist/sdk/chunk-EYQWEVZF.mjs.map +1 -0
  29. package/dist/sdk/{chunk-FP3RZSLW.mjs → chunk-KBX4OIXL.mjs} +2 -2
  30. package/dist/sdk/{chunk-XJZKNTKZ.mjs → chunk-NYK7WDGH.mjs} +130 -91
  31. package/dist/sdk/chunk-NYK7WDGH.mjs.map +1 -0
  32. package/dist/sdk/{chunk-6VQ73GYD.mjs → chunk-SMR5N5MG.mjs} +2 -2
  33. package/dist/sdk/{chunk-6VQ73GYD.mjs.map → chunk-SMR5N5MG.mjs.map} +1 -1
  34. package/dist/sdk/{chunk-PCI4FXAO.mjs → chunk-U7KB66AN.mjs} +138 -99
  35. package/dist/sdk/chunk-U7KB66AN.mjs.map +1 -0
  36. package/dist/sdk/{chunk-LLVVHYIP.mjs → chunk-VBN45DBR.mjs} +3 -3
  37. package/dist/sdk/{config-MTEIGCOQ.mjs → config-SW3VO4DQ.mjs} +2 -2
  38. package/dist/sdk/{failure-condition-evaluator-TV227HAG.mjs → failure-condition-evaluator-Y32S6DB2.mjs} +3 -3
  39. package/dist/sdk/{github-frontend-YLSS5NQ7.mjs → github-frontend-6SIR7QWX.mjs} +3 -3
  40. package/dist/sdk/{host-WNCX3MPT.mjs → host-YBJOWFT4.mjs} +2 -2
  41. package/dist/sdk/{routing-FKWK5BHS.mjs → routing-U63OJMZQ.mjs} +4 -4
  42. package/dist/sdk/{schedule-tool-IJC2TSKU.mjs → schedule-tool-74VMD77T.mjs} +3 -3
  43. package/dist/sdk/{schedule-tool-62XTFB6K.mjs → schedule-tool-NMCFABHK.mjs} +3 -3
  44. package/dist/sdk/{schedule-tool-VOZ536P4.mjs → schedule-tool-NYRLSV4F.mjs} +6 -6
  45. package/dist/sdk/{schedule-tool-handler-WBIZSBGJ.mjs → schedule-tool-handler-2TFSBZ2O.mjs} +6 -6
  46. package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs → schedule-tool-handler-DRVRLVGD.mjs} +3 -3
  47. package/dist/sdk/{schedule-tool-handler-T4L2ECBA.mjs → schedule-tool-handler-EOQBRZSD.mjs} +3 -3
  48. package/dist/sdk/sdk.d.mts +15 -2
  49. package/dist/sdk/sdk.d.ts +15 -2
  50. package/dist/sdk/sdk.js +210 -111
  51. package/dist/sdk/sdk.js.map +1 -1
  52. package/dist/sdk/sdk.mjs +5 -5
  53. package/dist/sdk/{trace-helpers-W33WMBL7.mjs → trace-helpers-2BIVADUK.mjs} +2 -2
  54. package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs → workflow-check-provider-4NHVFLMQ.mjs} +3 -3
  55. package/dist/sdk/{workflow-check-provider-FONJYRMR.mjs → workflow-check-provider-GIW4WECT.mjs} +3 -3
  56. package/dist/sdk/{workflow-check-provider-LREOGGTH.mjs → workflow-check-provider-UQMMFLSK.mjs} +6 -6
  57. package/dist/state-machine/workflow-projection.d.ts.map +1 -1
  58. package/dist/traces/{run-2026-03-04T06-46-24-105Z.ndjson → run-2026-03-04T13-24-27-240Z.ndjson} +84 -84
  59. package/dist/{output/traces/run-2026-03-04T06-47-08-884Z.ndjson → traces/run-2026-03-04T13-25-12-321Z.ndjson} +1802 -1802
  60. package/dist/types/config.d.ts +2 -2
  61. package/dist/types/config.d.ts.map +1 -1
  62. package/dist/types/workflow.d.ts +8 -0
  63. package/dist/types/workflow.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/sdk/chunk-FYK2DJK6.mjs.map +0 -1
  66. package/dist/sdk/chunk-PCI4FXAO.mjs.map +0 -1
  67. package/dist/sdk/chunk-QRR6OJQN.mjs.map +0 -1
  68. package/dist/sdk/chunk-XJZKNTKZ.mjs.map +0 -1
  69. /package/dist/sdk/{check-provider-registry-DCZR46KQ.mjs.map → check-provider-registry-CSIZGIKC.mjs.map} +0 -0
  70. /package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs.map → check-provider-registry-OEPUY5P6.mjs.map} +0 -0
  71. /package/dist/sdk/{check-provider-registry-VY5ZZAEU.mjs.map → check-provider-registry-ZOGNKTC3.mjs.map} +0 -0
  72. /package/dist/sdk/{chunk-FP3RZSLW.mjs.map → chunk-KBX4OIXL.mjs.map} +0 -0
  73. /package/dist/sdk/{chunk-LLVVHYIP.mjs.map → chunk-VBN45DBR.mjs.map} +0 -0
  74. /package/dist/sdk/{config-MTEIGCOQ.mjs.map → config-SW3VO4DQ.mjs.map} +0 -0
  75. /package/dist/sdk/{failure-condition-evaluator-TV227HAG.mjs.map → failure-condition-evaluator-Y32S6DB2.mjs.map} +0 -0
  76. /package/dist/sdk/{github-frontend-YLSS5NQ7.mjs.map → github-frontend-6SIR7QWX.mjs.map} +0 -0
  77. /package/dist/sdk/{host-WNCX3MPT.mjs.map → host-YBJOWFT4.mjs.map} +0 -0
  78. /package/dist/sdk/{routing-FKWK5BHS.mjs.map → routing-U63OJMZQ.mjs.map} +0 -0
  79. /package/dist/sdk/{schedule-tool-62XTFB6K.mjs.map → schedule-tool-74VMD77T.mjs.map} +0 -0
  80. /package/dist/sdk/{schedule-tool-IJC2TSKU.mjs.map → schedule-tool-NMCFABHK.mjs.map} +0 -0
  81. /package/dist/sdk/{schedule-tool-VOZ536P4.mjs.map → schedule-tool-NYRLSV4F.mjs.map} +0 -0
  82. /package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs.map → schedule-tool-handler-2TFSBZ2O.mjs.map} +0 -0
  83. /package/dist/sdk/{schedule-tool-handler-T4L2ECBA.mjs.map → schedule-tool-handler-DRVRLVGD.mjs.map} +0 -0
  84. /package/dist/sdk/{schedule-tool-handler-WBIZSBGJ.mjs.map → schedule-tool-handler-EOQBRZSD.mjs.map} +0 -0
  85. /package/dist/sdk/{trace-helpers-W33WMBL7.mjs.map → trace-helpers-2BIVADUK.mjs.map} +0 -0
  86. /package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs.map → workflow-check-provider-4NHVFLMQ.mjs.map} +0 -0
  87. /package/dist/sdk/{workflow-check-provider-FONJYRMR.mjs.map → workflow-check-provider-GIW4WECT.mjs.map} +0 -0
  88. /package/dist/sdk/{workflow-check-provider-LREOGGTH.mjs.map → workflow-check-provider-UQMMFLSK.mjs.map} +0 -0
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  config_exports,
35
35
  init_config
36
- } from "./chunk-FYK2DJK6.mjs";
36
+ } from "./chunk-CPYQDJ27.mjs";
37
37
  import {
38
38
  ExecutionJournal,
39
39
  checkLoopBudget,
@@ -2300,7 +2300,7 @@ ${"=".repeat(60)}
2300
2300
  * Generate mock response for testing
2301
2301
  */
2302
2302
  async generateMockResponse(_prompt, _checkName, _schema) {
2303
- await new Promise((resolve8) => setTimeout(resolve8, 500));
2303
+ await new Promise((resolve9) => setTimeout(resolve9, 500));
2304
2304
  const name = (_checkName || "").toLowerCase();
2305
2305
  if (name.includes("extract-facts")) {
2306
2306
  const arr = Array.from({ length: 6 }, (_, i) => ({
@@ -3959,7 +3959,7 @@ async function executeWorkflowAsTool(workflowId, args, context2, argsOverrides)
3959
3959
  ...args,
3960
3960
  ...argsOverrides
3961
3961
  };
3962
- const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-6TEZHBZJ.mjs");
3962
+ const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-GIW4WECT.mjs");
3963
3963
  const provider = new WorkflowCheckProvider2();
3964
3964
  const checkConfig = {
3965
3965
  type: "workflow",
@@ -6171,7 +6171,7 @@ var init_check_runner = __esm({
6171
6171
  sandboxConfig.env_passthrough,
6172
6172
  workspaceDefaults?.env_passthrough
6173
6173
  );
6174
- const workdir = sandboxConfig.workdir || "/workspace";
6174
+ const workdir = sandboxConfig.workdir === "host" ? sandboxManager.getRepoPath() : sandboxConfig.workdir || "/workspace";
6175
6175
  let hostTracePath;
6176
6176
  if (!sandboxConfig.read_only) {
6177
6177
  const traceFileName = `.visor-trace-${randomUUID().slice(0, 8)}.ndjson`;
@@ -11208,7 +11208,7 @@ var init_runner = __esm({
11208
11208
  import { promisify } from "util";
11209
11209
  import { execFile as execFileCb } from "child_process";
11210
11210
  import { writeFileSync as writeFileSync3, unlinkSync as unlinkSync2, mkdtempSync } from "fs";
11211
- import { join as join5 } from "path";
11211
+ import { join as join5, resolve } from "path";
11212
11212
  import { tmpdir } from "os";
11213
11213
  import { randomUUID as randomUUID2 } from "crypto";
11214
11214
  var execFileAsync, EXEC_MAX_BUFFER, DockerImageSandbox;
@@ -11296,7 +11296,7 @@ var init_docker_image_sandbox = __esm({
11296
11296
  */
11297
11297
  async start() {
11298
11298
  const image = await this.buildImageIfNeeded();
11299
- const workdir = this.config.workdir || "/workspace";
11299
+ const workdir = this.config.workdir === "host" ? this.repoPath : this.config.workdir || "/workspace";
11300
11300
  const visorPath = this.config.visor_path || "/opt/visor";
11301
11301
  const readOnlySuffix = this.config.read_only ? ":ro" : "";
11302
11302
  const args = [
@@ -11324,6 +11324,14 @@ var init_docker_image_sandbox = __esm({
11324
11324
  for (const mount of this.cacheVolumeMounts) {
11325
11325
  args.push("-v", mount);
11326
11326
  }
11327
+ if (this.config.bind_paths) {
11328
+ for (const bp of this.config.bind_paths) {
11329
+ const hostPath = bp.host.startsWith("~") ? resolve((process.env.HOME || "/root") + bp.host.slice(1)) : resolve(bp.host);
11330
+ const containerPath = bp.container || hostPath;
11331
+ const readOnly = bp.read_only !== false;
11332
+ args.push("-v", `${hostPath}:${containerPath}${readOnly ? ":ro" : ""}`);
11333
+ }
11334
+ }
11327
11335
  args.push(image, "sleep", "infinity");
11328
11336
  logger.info(`Starting sandbox container '${this.containerName}'`);
11329
11337
  const { stdout } = await execFileAsync(args[0], args.slice(1), {
@@ -11702,7 +11710,7 @@ __export(bubblewrap_sandbox_exports, {
11702
11710
  import { promisify as promisify4 } from "util";
11703
11711
  import { execFile as execFileCb4 } from "child_process";
11704
11712
  import { existsSync as existsSync4 } from "fs";
11705
- import { resolve } from "path";
11713
+ import { resolve as resolve2 } from "path";
11706
11714
  var execFileAsync4, EXEC_MAX_BUFFER4, BubblewrapSandbox;
11707
11715
  var init_bubblewrap_sandbox = __esm({
11708
11716
  "src/sandbox/bubblewrap-sandbox.ts"() {
@@ -11719,8 +11727,8 @@ var init_bubblewrap_sandbox = __esm({
11719
11727
  constructor(name, config, repoPath, visorDistPath) {
11720
11728
  this.name = name;
11721
11729
  this.config = config;
11722
- this.repoPath = resolve(repoPath);
11723
- this.visorDistPath = resolve(visorDistPath);
11730
+ this.repoPath = resolve2(repoPath);
11731
+ this.visorDistPath = resolve2(visorDistPath);
11724
11732
  }
11725
11733
  /**
11726
11734
  * Check if bwrap binary is available on the system.
@@ -11776,7 +11784,7 @@ var init_bubblewrap_sandbox = __esm({
11776
11784
  * Build the bwrap command-line arguments.
11777
11785
  */
11778
11786
  buildArgs(options) {
11779
- const workdir = this.config.workdir || "/workspace";
11787
+ const workdir = this.config.workdir === "host" ? this.repoPath : this.config.workdir || "/workspace";
11780
11788
  const args = [];
11781
11789
  args.push("--ro-bind", "/usr", "/usr");
11782
11790
  args.push("--ro-bind", "/bin", "/bin");
@@ -11803,6 +11811,14 @@ var init_bubblewrap_sandbox = __esm({
11803
11811
  }
11804
11812
  const visorPath = this.config.visor_path || "/opt/visor";
11805
11813
  args.push("--ro-bind", this.visorDistPath, visorPath);
11814
+ if (this.config.bind_paths) {
11815
+ for (const bp of this.config.bind_paths) {
11816
+ const hostPath = bp.host.startsWith("~") ? resolve2((process.env.HOME || "/root") + bp.host.slice(1)) : resolve2(bp.host);
11817
+ const containerPath = bp.container || hostPath;
11818
+ const readOnly = bp.read_only !== false;
11819
+ args.push(readOnly ? "--ro-bind" : "--bind", hostPath, containerPath);
11820
+ }
11821
+ }
11806
11822
  args.push("--chdir", workdir);
11807
11823
  args.push("--unshare-pid");
11808
11824
  args.push("--new-session");
@@ -11830,7 +11846,7 @@ __export(seatbelt_sandbox_exports, {
11830
11846
  });
11831
11847
  import { promisify as promisify5 } from "util";
11832
11848
  import { execFile as execFileCb5 } from "child_process";
11833
- import { resolve as resolve2 } from "path";
11849
+ import { resolve as resolve3 } from "path";
11834
11850
  import { realpathSync } from "fs";
11835
11851
  var execFileAsync5, EXEC_MAX_BUFFER5, SeatbeltSandbox;
11836
11852
  var init_seatbelt_sandbox = __esm({
@@ -11848,8 +11864,8 @@ var init_seatbelt_sandbox = __esm({
11848
11864
  constructor(name, config, repoPath, visorDistPath) {
11849
11865
  this.name = name;
11850
11866
  this.config = config;
11851
- this.repoPath = realpathSync(resolve2(repoPath));
11852
- this.visorDistPath = realpathSync(resolve2(visorDistPath));
11867
+ this.repoPath = realpathSync(resolve3(repoPath));
11868
+ this.visorDistPath = realpathSync(resolve3(visorDistPath));
11853
11869
  }
11854
11870
  /**
11855
11871
  * Check if sandbox-exec binary is available on the system.
@@ -11952,6 +11968,16 @@ var init_seatbelt_sandbox = __esm({
11952
11968
  }
11953
11969
  const visorDistPath = this.escapePath(this.visorDistPath);
11954
11970
  lines.push(`(allow file-read* (subpath "${visorDistPath}"))`);
11971
+ if (this.config.bind_paths) {
11972
+ for (const bp of this.config.bind_paths) {
11973
+ const hostPath = bp.host.startsWith("~") ? resolve3((process.env.HOME || "/root") + bp.host.slice(1)) : resolve3(bp.host);
11974
+ const escapedPath = this.escapePath(hostPath);
11975
+ lines.push(`(allow file-read* (subpath "${escapedPath}"))`);
11976
+ if (bp.read_only === false) {
11977
+ lines.push(`(allow file-write* (subpath "${escapedPath}"))`);
11978
+ }
11979
+ }
11980
+ }
11955
11981
  if (this.config.network !== false) {
11956
11982
  lines.push("(allow network*)");
11957
11983
  }
@@ -11965,7 +11991,7 @@ var init_seatbelt_sandbox = __esm({
11965
11991
  });
11966
11992
 
11967
11993
  // src/sandbox/sandbox-manager.ts
11968
- import { resolve as resolve3, dirname, join as join6 } from "path";
11994
+ import { resolve as resolve4, dirname, join as join6 } from "path";
11969
11995
  import { existsSync as existsSync5 } from "fs";
11970
11996
  var SandboxManager;
11971
11997
  var init_sandbox_manager = __esm({
@@ -11989,10 +12015,10 @@ var init_sandbox_manager = __esm({
11989
12015
  }
11990
12016
  constructor(sandboxDefs, repoPath, gitBranch) {
11991
12017
  this.sandboxDefs = sandboxDefs;
11992
- this.repoPath = resolve3(repoPath);
12018
+ this.repoPath = resolve4(repoPath);
11993
12019
  this.gitBranch = gitBranch;
11994
12020
  this.cacheManager = new CacheVolumeManager();
11995
- this.visorDistPath = existsSync5(join6(__dirname, "index.js")) ? __dirname : resolve3(dirname(__dirname));
12021
+ this.visorDistPath = existsSync5(join6(__dirname, "index.js")) ? __dirname : resolve4(dirname(__dirname));
11996
12022
  }
11997
12023
  /**
11998
12024
  * Resolve which sandbox a check should use.
@@ -12213,8 +12239,8 @@ var init_workspace_manager = __esm({
12213
12239
  );
12214
12240
  if (this.cleanupRequested && this.activeOperations === 0) {
12215
12241
  logger.debug(`[Workspace] All references released, proceeding with deferred cleanup`);
12216
- for (const resolve8 of this.cleanupResolvers) {
12217
- resolve8();
12242
+ for (const resolve9 of this.cleanupResolvers) {
12243
+ resolve9();
12218
12244
  }
12219
12245
  this.cleanupResolvers = [];
12220
12246
  }
@@ -12371,19 +12397,19 @@ var init_workspace_manager = __esm({
12371
12397
  );
12372
12398
  this.cleanupRequested = true;
12373
12399
  await Promise.race([
12374
- new Promise((resolve8) => {
12400
+ new Promise((resolve9) => {
12375
12401
  if (this.activeOperations === 0) {
12376
- resolve8();
12402
+ resolve9();
12377
12403
  } else {
12378
- this.cleanupResolvers.push(resolve8);
12404
+ this.cleanupResolvers.push(resolve9);
12379
12405
  }
12380
12406
  }),
12381
- new Promise((resolve8) => {
12407
+ new Promise((resolve9) => {
12382
12408
  setTimeout(() => {
12383
12409
  logger.warn(
12384
12410
  `[Workspace] Cleanup timeout after ${timeout}ms, proceeding anyway (${this.activeOperations} operations still active)`
12385
12411
  );
12386
- resolve8();
12412
+ resolve9();
12387
12413
  }, timeout);
12388
12414
  })
12389
12415
  ]);
@@ -13001,7 +13027,7 @@ var init_state_machine_execution_engine = __esm({
13001
13027
  try {
13002
13028
  const map = options?.webhookContext?.webhookData;
13003
13029
  if (map) {
13004
- const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-QBURXJ6B.mjs");
13030
+ const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-ZOGNKTC3.mjs");
13005
13031
  const reg = CheckProviderRegistry2.getInstance();
13006
13032
  const p = reg.getProvider("http_input");
13007
13033
  if (p && typeof p.setWebhookContext === "function") p.setWebhookContext(map);
@@ -13114,7 +13140,7 @@ var init_state_machine_execution_engine = __esm({
13114
13140
  logger.info("[StateMachine] Using state machine engine");
13115
13141
  }
13116
13142
  if (!config) {
13117
- const { ConfigManager } = await import("./config-MTEIGCOQ.mjs");
13143
+ const { ConfigManager } = await import("./config-SW3VO4DQ.mjs");
13118
13144
  const configManager = new ConfigManager();
13119
13145
  config = await configManager.getDefaultConfig();
13120
13146
  logger.debug("[StateMachine] Using default configuration (no config provided)");
@@ -13124,7 +13150,7 @@ var init_state_machine_execution_engine = __esm({
13124
13150
  tag_filter: tagFilter
13125
13151
  } : config;
13126
13152
  try {
13127
- const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-QBURXJ6B.mjs");
13153
+ const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-ZOGNKTC3.mjs");
13128
13154
  const registry = CheckProviderRegistry2.getInstance();
13129
13155
  registry.setCustomTools(configWithTagFilter.tools || {});
13130
13156
  } catch (error) {
@@ -13188,7 +13214,7 @@ var init_state_machine_execution_engine = __esm({
13188
13214
  try {
13189
13215
  const webhookData = this.executionContext?.webhookContext?.webhookData;
13190
13216
  if (webhookData instanceof Map) {
13191
- const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-5K275UT6.mjs");
13217
+ const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-EOQBRZSD.mjs");
13192
13218
  const slackCtx = extractSlackContext2(webhookData);
13193
13219
  if (slackCtx) {
13194
13220
  const payload = Array.from(webhookData.values())[0];
@@ -15022,11 +15048,11 @@ async function handleCreateTrigger(args, context2, store) {
15022
15048
  error: `Available workflows: ${context2.availableWorkflows.slice(0, 5).join(", ")}${context2.availableWorkflows.length > 5 ? "..." : ""}`
15023
15049
  };
15024
15050
  }
15025
- if ((!args.trigger_channels || args.trigger_channels.length === 0) && (!args.trigger_contains || args.trigger_contains.length === 0) && !args.trigger_match) {
15051
+ if ((!args.trigger_channels || args.trigger_channels.length === 0) && (!args.trigger_from || args.trigger_from.length === 0) && (!args.trigger_contains || args.trigger_contains.length === 0) && !args.trigger_match) {
15026
15052
  return {
15027
15053
  success: false,
15028
15054
  message: "Missing trigger filters",
15029
- error: "Please specify at least one filter: trigger_channels, trigger_contains, or trigger_match."
15055
+ error: "Please specify at least one filter: trigger_channels, trigger_from, trigger_contains, or trigger_match."
15030
15056
  };
15031
15057
  }
15032
15058
  const permissionCheck = checkSchedulePermissions(context2, args.workflow);
@@ -15044,6 +15070,7 @@ async function handleCreateTrigger(args, context2, store) {
15044
15070
  creatorName: context2.userName,
15045
15071
  description: args.trigger_description,
15046
15072
  channels: args.trigger_channels,
15073
+ fromUsers: args.trigger_from,
15047
15074
  fromBots: args.trigger_from_bots ?? false,
15048
15075
  contains: args.trigger_contains,
15049
15076
  matchPattern: args.trigger_match,
@@ -15062,7 +15089,8 @@ async function handleCreateTrigger(args, context2, store) {
15062
15089
 
15063
15090
  **Workflow**: ${trigger.workflow}
15064
15091
  **Channels**: ${trigger.channels?.join(", ") || "all"}
15065
- ${trigger.contains?.length ? `**Contains**: ${trigger.contains.join(", ")}
15092
+ ${trigger.fromUsers?.length ? `**From users**: ${trigger.fromUsers.join(", ")}
15093
+ ` : ""}${trigger.contains?.length ? `**Contains**: ${trigger.contains.join(", ")}
15066
15094
  ` : ""}${trigger.matchPattern ? `**Pattern**: /${trigger.matchPattern}/
15067
15095
  ` : ""}${trigger.description ? `**Description**: ${trigger.description}
15068
15096
  ` : ""}
@@ -15188,7 +15216,7 @@ Slack messages in specific channels. Use the create_trigger, list_triggers, dele
15188
15216
  actions for this. Message triggers fire workflows based on message content, channel, sender, and thread scope.
15189
15217
 
15190
15218
  TRIGGER ACTIONS:
15191
- - create_trigger: Create a new message trigger (requires workflow + at least one filter)
15219
+ - create_trigger: Create a new message trigger (requires workflow + at least one filter). Supports filtering by user IDs (trigger_from), channels, keywords, regex, and thread scope.
15192
15220
  - list_triggers: Show user's message triggers
15193
15221
  - delete_trigger: Remove a trigger by ID
15194
15222
  - update_trigger: Enable/disable a trigger by ID
@@ -15285,6 +15313,9 @@ User: "cancel schedule abc123"
15285
15313
  User: "watch #cicd for messages containing 'failed' and run %handle-cicd"
15286
15314
  \u2192 { "action": "create_trigger", "trigger_channels": ["C0CICD"], "trigger_contains": ["failed"], "workflow": "handle-cicd" }
15287
15315
 
15316
+ User: "trigger on each of my messages in this channel and run %auto-reply" (user ID is U3P2L4XNE)
15317
+ \u2192 { "action": "create_trigger", "trigger_channels": ["C09V810NY6R"], "trigger_from": ["U3P2L4XNE"], "workflow": "auto-reply" }
15318
+
15288
15319
  User: "list my message triggers"
15289
15320
  \u2192 { "action": "list_triggers" }
15290
15321
 
@@ -15366,6 +15397,11 @@ User: "disable trigger abc123"
15366
15397
  items: { type: "string" },
15367
15398
  description: 'For create_trigger: Slack channel IDs to monitor (e.g., ["C0CICD"]). Supports wildcard suffix (e.g., "CENG*").'
15368
15399
  },
15400
+ trigger_from: {
15401
+ type: "array",
15402
+ items: { type: "string" },
15403
+ description: 'For create_trigger: Slack user IDs to filter by. Only messages from these users will trigger the workflow. E.g., ["U3P2L4XNE"]. If omitted, messages from any user will trigger.'
15404
+ },
15369
15405
  trigger_from_bots: {
15370
15406
  type: "boolean",
15371
15407
  description: "For create_trigger: allow bot messages to trigger (default: false)"
@@ -15713,7 +15749,7 @@ var init_mcp_custom_sse_server = __esm({
15713
15749
  * Returns the actual bound port number
15714
15750
  */
15715
15751
  async start() {
15716
- return new Promise((resolve8, reject) => {
15752
+ return new Promise((resolve9, reject) => {
15717
15753
  try {
15718
15754
  this.server = http.createServer((req, res) => {
15719
15755
  this.handleRequest(req, res).catch((error) => {
@@ -15747,7 +15783,7 @@ var init_mcp_custom_sse_server = __esm({
15747
15783
  );
15748
15784
  }
15749
15785
  this.startKeepalive();
15750
- resolve8(this.port);
15786
+ resolve9(this.port);
15751
15787
  });
15752
15788
  } catch (error) {
15753
15789
  reject(error);
@@ -15810,7 +15846,7 @@ var init_mcp_custom_sse_server = __esm({
15810
15846
  logger.debug(
15811
15847
  `[CustomToolsSSEServer:${this.sessionId}] Grace period before stop: ${waitMs}ms (activeToolCalls=${this.activeToolCalls})`
15812
15848
  );
15813
- await new Promise((resolve8) => setTimeout(resolve8, waitMs));
15849
+ await new Promise((resolve9) => setTimeout(resolve9, waitMs));
15814
15850
  }
15815
15851
  }
15816
15852
  if (this.activeToolCalls > 0) {
@@ -15819,7 +15855,7 @@ var init_mcp_custom_sse_server = __esm({
15819
15855
  `[CustomToolsSSEServer:${this.sessionId}] Waiting for ${this.activeToolCalls} active tool call(s) before stop`
15820
15856
  );
15821
15857
  while (this.activeToolCalls > 0 && Date.now() - startedAt < effectiveDrainTimeoutMs) {
15822
- await new Promise((resolve8) => setTimeout(resolve8, 250));
15858
+ await new Promise((resolve9) => setTimeout(resolve9, 250));
15823
15859
  }
15824
15860
  if (this.activeToolCalls > 0) {
15825
15861
  logger.warn(
@@ -15844,21 +15880,21 @@ var init_mcp_custom_sse_server = __esm({
15844
15880
  }
15845
15881
  this.connections.clear();
15846
15882
  if (this.server) {
15847
- await new Promise((resolve8, reject) => {
15883
+ await new Promise((resolve9, reject) => {
15848
15884
  const timeout = setTimeout(() => {
15849
15885
  if (this.debug) {
15850
15886
  logger.debug(
15851
15887
  `[CustomToolsSSEServer:${this.sessionId}] Force closing server after timeout`
15852
15888
  );
15853
15889
  }
15854
- this.server?.close(() => resolve8());
15890
+ this.server?.close(() => resolve9());
15855
15891
  }, 5e3);
15856
15892
  this.server.close((error) => {
15857
15893
  clearTimeout(timeout);
15858
15894
  if (error) {
15859
15895
  reject(error);
15860
15896
  } else {
15861
- resolve8();
15897
+ resolve9();
15862
15898
  }
15863
15899
  });
15864
15900
  });
@@ -16284,7 +16320,7 @@ var init_mcp_custom_sse_server = __esm({
16284
16320
  logger.warn(
16285
16321
  `[CustomToolsSSEServer:${this.sessionId}] Tool ${toolName} failed (attempt ${attempt + 1}/${retryCount + 1}): ${errorMsg}. Retrying in ${delay}ms`
16286
16322
  );
16287
- await new Promise((resolve8) => setTimeout(resolve8, delay));
16323
+ await new Promise((resolve9) => setTimeout(resolve9, delay));
16288
16324
  attempt++;
16289
16325
  }
16290
16326
  }
@@ -25554,8 +25590,8 @@ var require_util2 = __commonJS({
25554
25590
  function createDeferredPromise() {
25555
25591
  let res;
25556
25592
  let rej;
25557
- const promise = new Promise((resolve8, reject) => {
25558
- res = resolve8;
25593
+ const promise = new Promise((resolve9, reject) => {
25594
+ res = resolve9;
25559
25595
  rej = reject;
25560
25596
  });
25561
25597
  return { promise, resolve: res, reject: rej };
@@ -27060,8 +27096,8 @@ Content-Type: ${value.type || "application/octet-stream"}\r
27060
27096
  });
27061
27097
  }
27062
27098
  });
27063
- const busboyResolve = new Promise((resolve8, reject) => {
27064
- busboy.on("finish", resolve8);
27099
+ const busboyResolve = new Promise((resolve9, reject) => {
27100
+ busboy.on("finish", resolve9);
27065
27101
  busboy.on("error", (err) => reject(new TypeError(err)));
27066
27102
  });
27067
27103
  if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk);
@@ -27595,9 +27631,9 @@ var require_dispatcher_base = __commonJS({
27595
27631
  }
27596
27632
  close(callback) {
27597
27633
  if (callback === void 0) {
27598
- return new Promise((resolve8, reject) => {
27634
+ return new Promise((resolve9, reject) => {
27599
27635
  this.close((err, data) => {
27600
- return err ? reject(err) : resolve8(data);
27636
+ return err ? reject(err) : resolve9(data);
27601
27637
  });
27602
27638
  });
27603
27639
  }
@@ -27635,12 +27671,12 @@ var require_dispatcher_base = __commonJS({
27635
27671
  err = null;
27636
27672
  }
27637
27673
  if (callback === void 0) {
27638
- return new Promise((resolve8, reject) => {
27674
+ return new Promise((resolve9, reject) => {
27639
27675
  this.destroy(err, (err2, data) => {
27640
27676
  return err2 ? (
27641
27677
  /* istanbul ignore next: should never error */
27642
27678
  reject(err2)
27643
- ) : resolve8(data);
27679
+ ) : resolve9(data);
27644
27680
  });
27645
27681
  });
27646
27682
  }
@@ -28702,16 +28738,16 @@ var require_client = __commonJS({
28702
28738
  return this[kNeedDrain] < 2;
28703
28739
  }
28704
28740
  async [kClose]() {
28705
- return new Promise((resolve8) => {
28741
+ return new Promise((resolve9) => {
28706
28742
  if (!this[kSize]) {
28707
- resolve8(null);
28743
+ resolve9(null);
28708
28744
  } else {
28709
- this[kClosedResolve] = resolve8;
28745
+ this[kClosedResolve] = resolve9;
28710
28746
  }
28711
28747
  });
28712
28748
  }
28713
28749
  async [kDestroy](err) {
28714
- return new Promise((resolve8) => {
28750
+ return new Promise((resolve9) => {
28715
28751
  const requests = this[kQueue].splice(this[kPendingIdx]);
28716
28752
  for (let i = 0; i < requests.length; i++) {
28717
28753
  const request = requests[i];
@@ -28722,7 +28758,7 @@ var require_client = __commonJS({
28722
28758
  this[kClosedResolve]();
28723
28759
  this[kClosedResolve] = null;
28724
28760
  }
28725
- resolve8();
28761
+ resolve9();
28726
28762
  };
28727
28763
  if (this[kHTTP2Session] != null) {
28728
28764
  util.destroy(this[kHTTP2Session], err);
@@ -29302,7 +29338,7 @@ var require_client = __commonJS({
29302
29338
  });
29303
29339
  }
29304
29340
  try {
29305
- const socket = await new Promise((resolve8, reject) => {
29341
+ const socket = await new Promise((resolve9, reject) => {
29306
29342
  client[kConnector]({
29307
29343
  host,
29308
29344
  hostname,
@@ -29314,7 +29350,7 @@ var require_client = __commonJS({
29314
29350
  if (err) {
29315
29351
  reject(err);
29316
29352
  } else {
29317
- resolve8(socket2);
29353
+ resolve9(socket2);
29318
29354
  }
29319
29355
  });
29320
29356
  });
@@ -29938,12 +29974,12 @@ upgrade: ${upgrade}\r
29938
29974
  cb();
29939
29975
  }
29940
29976
  }
29941
- const waitForDrain = () => new Promise((resolve8, reject) => {
29977
+ const waitForDrain = () => new Promise((resolve9, reject) => {
29942
29978
  assert(callback === null);
29943
29979
  if (socket[kError]) {
29944
29980
  reject(socket[kError]);
29945
29981
  } else {
29946
- callback = resolve8;
29982
+ callback = resolve9;
29947
29983
  }
29948
29984
  });
29949
29985
  if (client[kHTTPConnVersion] === "h2") {
@@ -30289,8 +30325,8 @@ var require_pool_base = __commonJS({
30289
30325
  if (this[kQueue].isEmpty()) {
30290
30326
  return Promise.all(this[kClients].map((c) => c.close()));
30291
30327
  } else {
30292
- return new Promise((resolve8) => {
30293
- this[kClosedResolve] = resolve8;
30328
+ return new Promise((resolve9) => {
30329
+ this[kClosedResolve] = resolve9;
30294
30330
  });
30295
30331
  }
30296
30332
  }
@@ -30868,7 +30904,7 @@ var require_readable = __commonJS({
30868
30904
  if (this.closed) {
30869
30905
  return Promise.resolve(null);
30870
30906
  }
30871
- return new Promise((resolve8, reject) => {
30907
+ return new Promise((resolve9, reject) => {
30872
30908
  const signalListenerCleanup = signal ? util.addAbortListener(signal, () => {
30873
30909
  this.destroy();
30874
30910
  }) : noop;
@@ -30877,7 +30913,7 @@ var require_readable = __commonJS({
30877
30913
  if (signal && signal.aborted) {
30878
30914
  reject(signal.reason || Object.assign(new Error("The operation was aborted"), { name: "AbortError" }));
30879
30915
  } else {
30880
- resolve8(null);
30916
+ resolve9(null);
30881
30917
  }
30882
30918
  }).on("error", noop).on("data", function(chunk) {
30883
30919
  limit -= chunk.length;
@@ -30899,11 +30935,11 @@ var require_readable = __commonJS({
30899
30935
  throw new TypeError("unusable");
30900
30936
  }
30901
30937
  assert(!stream[kConsume]);
30902
- return new Promise((resolve8, reject) => {
30938
+ return new Promise((resolve9, reject) => {
30903
30939
  stream[kConsume] = {
30904
30940
  type,
30905
30941
  stream,
30906
- resolve: resolve8,
30942
+ resolve: resolve9,
30907
30943
  reject,
30908
30944
  length: 0,
30909
30945
  body: []
@@ -30938,12 +30974,12 @@ var require_readable = __commonJS({
30938
30974
  }
30939
30975
  }
30940
30976
  function consumeEnd(consume2) {
30941
- const { type, body, resolve: resolve8, stream, length } = consume2;
30977
+ const { type, body, resolve: resolve9, stream, length } = consume2;
30942
30978
  try {
30943
30979
  if (type === "text") {
30944
- resolve8(toUSVString(Buffer.concat(body)));
30980
+ resolve9(toUSVString(Buffer.concat(body)));
30945
30981
  } else if (type === "json") {
30946
- resolve8(JSON.parse(Buffer.concat(body)));
30982
+ resolve9(JSON.parse(Buffer.concat(body)));
30947
30983
  } else if (type === "arrayBuffer") {
30948
30984
  const dst = new Uint8Array(length);
30949
30985
  let pos = 0;
@@ -30951,12 +30987,12 @@ var require_readable = __commonJS({
30951
30987
  dst.set(buf, pos);
30952
30988
  pos += buf.byteLength;
30953
30989
  }
30954
- resolve8(dst.buffer);
30990
+ resolve9(dst.buffer);
30955
30991
  } else if (type === "blob") {
30956
30992
  if (!Blob2) {
30957
30993
  Blob2 = __require("buffer").Blob;
30958
30994
  }
30959
- resolve8(new Blob2(body, { type: stream[kContentType] }));
30995
+ resolve9(new Blob2(body, { type: stream[kContentType] }));
30960
30996
  }
30961
30997
  consumeFinish(consume2);
30962
30998
  } catch (err) {
@@ -31213,9 +31249,9 @@ var require_api_request = __commonJS({
31213
31249
  };
31214
31250
  function request(opts, callback) {
31215
31251
  if (callback === void 0) {
31216
- return new Promise((resolve8, reject) => {
31252
+ return new Promise((resolve9, reject) => {
31217
31253
  request.call(this, opts, (err, data) => {
31218
- return err ? reject(err) : resolve8(data);
31254
+ return err ? reject(err) : resolve9(data);
31219
31255
  });
31220
31256
  });
31221
31257
  }
@@ -31388,9 +31424,9 @@ var require_api_stream = __commonJS({
31388
31424
  };
31389
31425
  function stream(opts, factory, callback) {
31390
31426
  if (callback === void 0) {
31391
- return new Promise((resolve8, reject) => {
31427
+ return new Promise((resolve9, reject) => {
31392
31428
  stream.call(this, opts, factory, (err, data) => {
31393
- return err ? reject(err) : resolve8(data);
31429
+ return err ? reject(err) : resolve9(data);
31394
31430
  });
31395
31431
  });
31396
31432
  }
@@ -31671,9 +31707,9 @@ var require_api_upgrade = __commonJS({
31671
31707
  };
31672
31708
  function upgrade(opts, callback) {
31673
31709
  if (callback === void 0) {
31674
- return new Promise((resolve8, reject) => {
31710
+ return new Promise((resolve9, reject) => {
31675
31711
  upgrade.call(this, opts, (err, data) => {
31676
- return err ? reject(err) : resolve8(data);
31712
+ return err ? reject(err) : resolve9(data);
31677
31713
  });
31678
31714
  });
31679
31715
  }
@@ -31762,9 +31798,9 @@ var require_api_connect = __commonJS({
31762
31798
  };
31763
31799
  function connect(opts, callback) {
31764
31800
  if (callback === void 0) {
31765
- return new Promise((resolve8, reject) => {
31801
+ return new Promise((resolve9, reject) => {
31766
31802
  connect.call(this, opts, (err, data) => {
31767
- return err ? reject(err) : resolve8(data);
31803
+ return err ? reject(err) : resolve9(data);
31768
31804
  });
31769
31805
  });
31770
31806
  }
@@ -35387,7 +35423,7 @@ var require_fetch = __commonJS({
35387
35423
  async function dispatch({ body }) {
35388
35424
  const url = requestCurrentURL(request);
35389
35425
  const agent = fetchParams.controller.dispatcher;
35390
- return new Promise((resolve8, reject) => agent.dispatch(
35426
+ return new Promise((resolve9, reject) => agent.dispatch(
35391
35427
  {
35392
35428
  path: url.pathname + url.search,
35393
35429
  origin: url.origin,
@@ -35463,7 +35499,7 @@ var require_fetch = __commonJS({
35463
35499
  }
35464
35500
  }
35465
35501
  }
35466
- resolve8({
35502
+ resolve9({
35467
35503
  status,
35468
35504
  statusText,
35469
35505
  headersList: headers[kHeadersList],
@@ -35506,7 +35542,7 @@ var require_fetch = __commonJS({
35506
35542
  const val = headersList[n + 1].toString("latin1");
35507
35543
  headers[kHeadersList].append(key, val);
35508
35544
  }
35509
- resolve8({
35545
+ resolve9({
35510
35546
  status,
35511
35547
  statusText: STATUS_CODES[status],
35512
35548
  headersList: headers[kHeadersList],
@@ -39301,7 +39337,7 @@ var init_mcp_check_provider = __esm({
39301
39337
  logger.warn(
39302
39338
  `MCP ${transportName} failed (attempt ${attempt + 1}/${maxRetries + 1}), retrying in ${delay}ms: ${error instanceof Error ? error.message : String(error)}`
39303
39339
  );
39304
- await new Promise((resolve8) => setTimeout(resolve8, delay));
39340
+ await new Promise((resolve9) => setTimeout(resolve9, delay));
39305
39341
  attempt += 1;
39306
39342
  } finally {
39307
39343
  try {
@@ -39584,7 +39620,7 @@ async function acquirePromptLock() {
39584
39620
  activePrompt = true;
39585
39621
  return;
39586
39622
  }
39587
- await new Promise((resolve8) => waiters.push(resolve8));
39623
+ await new Promise((resolve9) => waiters.push(resolve9));
39588
39624
  activePrompt = true;
39589
39625
  }
39590
39626
  function releasePromptLock() {
@@ -39594,7 +39630,7 @@ function releasePromptLock() {
39594
39630
  }
39595
39631
  async function interactivePrompt(options) {
39596
39632
  await acquirePromptLock();
39597
- return new Promise((resolve8, reject) => {
39633
+ return new Promise((resolve9, reject) => {
39598
39634
  const dbg = process.env.VISOR_DEBUG === "true";
39599
39635
  try {
39600
39636
  if (dbg) {
@@ -39681,12 +39717,12 @@ async function interactivePrompt(options) {
39681
39717
  };
39682
39718
  const finish = (value) => {
39683
39719
  cleanup();
39684
- resolve8(value);
39720
+ resolve9(value);
39685
39721
  };
39686
39722
  if (options.timeout && options.timeout > 0) {
39687
39723
  timeoutId = setTimeout(() => {
39688
39724
  cleanup();
39689
- if (defaultValue !== void 0) return resolve8(defaultValue);
39725
+ if (defaultValue !== void 0) return resolve9(defaultValue);
39690
39726
  return reject(new Error("Input timeout"));
39691
39727
  }, options.timeout);
39692
39728
  }
@@ -39818,7 +39854,7 @@ async function interactivePrompt(options) {
39818
39854
  });
39819
39855
  }
39820
39856
  async function simplePrompt(prompt) {
39821
- return new Promise((resolve8) => {
39857
+ return new Promise((resolve9) => {
39822
39858
  const rl = readline.createInterface({
39823
39859
  input: process.stdin,
39824
39860
  output: process.stdout
@@ -39834,7 +39870,7 @@ async function simplePrompt(prompt) {
39834
39870
  rl.question(`${prompt}
39835
39871
  > `, (answer) => {
39836
39872
  rl.close();
39837
- resolve8(answer.trim());
39873
+ resolve9(answer.trim());
39838
39874
  });
39839
39875
  });
39840
39876
  }
@@ -39852,7 +39888,7 @@ function isStdinAvailable() {
39852
39888
  return !process.stdin.isTTY;
39853
39889
  }
39854
39890
  async function readStdin(timeout, maxSize = 1024 * 1024) {
39855
- return new Promise((resolve8, reject) => {
39891
+ return new Promise((resolve9, reject) => {
39856
39892
  let data = "";
39857
39893
  let timeoutId;
39858
39894
  if (timeout) {
@@ -39879,7 +39915,7 @@ async function readStdin(timeout, maxSize = 1024 * 1024) {
39879
39915
  };
39880
39916
  const onEnd = () => {
39881
39917
  cleanup();
39882
- resolve8(data.trim());
39918
+ resolve9(data.trim());
39883
39919
  };
39884
39920
  const onError = (err) => {
39885
39921
  cleanup();
@@ -40666,8 +40702,8 @@ function buildBuiltinGlobals(opts) {
40666
40702
  const asyncFunctionNames = /* @__PURE__ */ new Set();
40667
40703
  const scheduleFn = async (args = {}) => {
40668
40704
  try {
40669
- const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-62XTFB6K.mjs");
40670
- const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-5K275UT6.mjs");
40705
+ const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-74VMD77T.mjs");
40706
+ const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-EOQBRZSD.mjs");
40671
40707
  const parentCtx = opts.sessionInfo?._parentContext;
40672
40708
  const webhookData = parentCtx?.prInfo?.eventContext?.webhookData;
40673
40709
  const visorCfg = parentCtx?.config;
@@ -42895,7 +42931,10 @@ function projectWorkflowToGraph(workflow, workflowInputs, _parentCheckId) {
42895
42931
  group_by: "check",
42896
42932
  collapse: false
42897
42933
  }
42898
- }
42934
+ },
42935
+ ...workflow.sandboxes && { sandboxes: workflow.sandboxes },
42936
+ ...workflow.sandbox && { sandbox: workflow.sandbox },
42937
+ ...workflow.sandbox_defaults && { sandbox_defaults: workflow.sandbox_defaults }
42899
42938
  };
42900
42939
  if (logger.isDebugEnabled?.()) {
42901
42940
  logger.debug(
@@ -43712,4 +43751,4 @@ undici/lib/fetch/body.js:
43712
43751
  undici/lib/websocket/frame.js:
43713
43752
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
43714
43753
  */
43715
- //# sourceMappingURL=chunk-QRR6OJQN.mjs.map
43754
+ //# sourceMappingURL=chunk-EYQWEVZF.mjs.map