@probelabs/visor 0.1.179-ee → 0.1.180-ee

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 (175) hide show
  1. package/README.md +6 -4
  2. package/defaults/assistant.yaml +29 -1
  3. package/defaults/code-talk.yaml +331 -441
  4. package/defaults/engineer.yaml +608 -0
  5. package/defaults/project-setup.yaml +489 -0
  6. package/defaults/skills/engineer.yaml +41 -0
  7. package/dist/{560.index.js → 736.index.js} +359 -3132
  8. package/dist/agent-protocol/task-store.d.ts +3 -0
  9. package/dist/agent-protocol/task-store.d.ts.map +1 -1
  10. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  11. package/dist/ai-review-service.d.ts +6 -0
  12. package/dist/ai-review-service.d.ts.map +1 -1
  13. package/dist/cli-main.d.ts.map +1 -1
  14. package/dist/cli.d.ts +5 -0
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/defaults/assistant.yaml +29 -1
  18. package/dist/defaults/code-talk.yaml +331 -441
  19. package/dist/defaults/engineer.yaml +608 -0
  20. package/dist/defaults/project-setup.yaml +489 -0
  21. package/dist/defaults/skills/engineer.yaml +41 -0
  22. package/dist/docs/advanced-ai.md +39 -0
  23. package/dist/docs/ai-configuration.md +32 -0
  24. package/dist/docs/ai-custom-tools.md +25 -0
  25. package/dist/docs/architecture.md +3 -0
  26. package/dist/docs/assistant-workflows.md +395 -25
  27. package/dist/docs/configuration.md +2 -1
  28. package/dist/docs/glossary.md +27 -1
  29. package/dist/docs/guides/build-ai-agent.md +4 -0
  30. package/dist/docs/mcp.md +26 -0
  31. package/dist/docs/migration.md +2 -0
  32. package/dist/docs/pluggable.md +28 -1
  33. package/dist/docs/telemetry-reference.md +41 -0
  34. package/dist/docs/timeouts.md +86 -1
  35. package/dist/docs/utcp-provider.md +343 -0
  36. package/dist/docs/workflows.md +30 -0
  37. package/dist/examples/negotiated-timeout.yaml +65 -0
  38. package/dist/examples/screenshot-tool.yaml +100 -0
  39. package/dist/examples/utcp-provider-example.yaml +290 -0
  40. package/dist/examples/workflows/helper-workflow.yaml +15 -0
  41. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  42. package/dist/generated/config-schema.d.ts +75 -8
  43. package/dist/generated/config-schema.d.ts.map +1 -1
  44. package/dist/generated/config-schema.json +86 -8
  45. package/dist/index.js +42497 -33912
  46. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  47. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  48. package/dist/providers/check-provider.interface.d.ts +6 -0
  49. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  50. package/dist/providers/http-client-provider.d.ts.map +1 -1
  51. package/dist/providers/index.d.ts +1 -0
  52. package/dist/providers/index.d.ts.map +1 -1
  53. package/dist/providers/mcp-check-provider.d.ts +0 -8
  54. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  55. package/dist/providers/mcp-custom-sse-server.d.ts +5 -0
  56. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  57. package/dist/providers/utcp-check-provider.d.ts +81 -0
  58. package/dist/providers/utcp-check-provider.d.ts.map +1 -0
  59. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  60. package/dist/sandbox/check-runner.d.ts +1 -1
  61. package/dist/sandbox/check-runner.d.ts.map +1 -1
  62. package/dist/sandbox/compose-generator.d.ts +45 -0
  63. package/dist/sandbox/compose-generator.d.ts.map +1 -0
  64. package/dist/sandbox/index.d.ts +2 -1
  65. package/dist/sandbox/index.d.ts.map +1 -1
  66. package/dist/sandbox/sandbox-manager.d.ts +21 -1
  67. package/dist/sandbox/sandbox-manager.d.ts.map +1 -1
  68. package/dist/sandbox/types.d.ts +40 -0
  69. package/dist/sandbox/types.d.ts.map +1 -1
  70. package/dist/sdk/{a2a-frontend-KJFLIZJT.mjs → a2a-frontend-6FNPD53G.mjs} +20 -2
  71. package/dist/sdk/a2a-frontend-6FNPD53G.mjs.map +1 -0
  72. package/dist/sdk/{check-provider-registry-SYAHJMWJ.mjs → check-provider-registry-T4HIUBMT.mjs} +8 -7
  73. package/dist/sdk/{check-provider-registry-J27YX4IT.mjs → check-provider-registry-Z4MVXFLJ.mjs} +9 -8
  74. package/dist/sdk/{chunk-ZJYQMNPA.mjs → chunk-3ZKBUWDB.mjs} +3 -3
  75. package/dist/sdk/{chunk-OYHDBTKY.mjs → chunk-5DQY4LTK.mjs} +2 -2
  76. package/dist/sdk/chunk-ANCIFGQH.mjs +825 -0
  77. package/dist/sdk/chunk-ANCIFGQH.mjs.map +1 -0
  78. package/dist/sdk/chunk-F25U4YWJ.mjs +825 -0
  79. package/dist/sdk/chunk-F25U4YWJ.mjs.map +1 -0
  80. package/dist/sdk/{chunk-UBTZE3FO.mjs → chunk-J27D43HS.mjs} +51 -8
  81. package/dist/sdk/chunk-J27D43HS.mjs.map +1 -0
  82. package/dist/sdk/{chunk-BMXVAJ2M.mjs → chunk-KAVOGMLR.mjs} +90 -15
  83. package/dist/sdk/chunk-KAVOGMLR.mjs.map +1 -0
  84. package/dist/sdk/{chunk-FTPLYUQ3.mjs → chunk-MWUQFSEK.mjs} +6981 -6461
  85. package/dist/sdk/chunk-MWUQFSEK.mjs.map +1 -0
  86. package/dist/sdk/{chunk-CHARL3TY.mjs → chunk-NBUN22ZG.mjs} +12 -2
  87. package/dist/sdk/chunk-NBUN22ZG.mjs.map +1 -0
  88. package/dist/sdk/{chunk-KWHLB5E3.mjs → chunk-STAAKOPU.mjs} +6516 -5996
  89. package/dist/sdk/chunk-STAAKOPU.mjs.map +1 -0
  90. package/dist/sdk/{config-DFOF7LP4.mjs → config-ZZKC47SV.mjs} +2 -2
  91. package/dist/sdk/dist-X4HSBKSA.mjs +5716 -0
  92. package/dist/sdk/dist-X4HSBKSA.mjs.map +1 -0
  93. package/dist/sdk/dist-XF2FTM6E.mjs +5716 -0
  94. package/dist/sdk/dist-XF2FTM6E.mjs.map +1 -0
  95. package/dist/sdk/{failure-condition-evaluator-V2YGFRKO.mjs → failure-condition-evaluator-WNCCIP6N.mjs} +3 -3
  96. package/dist/sdk/{github-frontend-4LM4NAZK.mjs → github-frontend-QVMVUL3Y.mjs} +3 -3
  97. package/dist/sdk/{host-GBXJKNHL.mjs → host-5TJBWGGH.mjs} +4 -4
  98. package/dist/sdk/{host-XXPPPC76.mjs → host-RVLIZMTE.mjs} +4 -4
  99. package/dist/sdk/{loader-Q7K76ZIY.mjs → loader-ZNKKJEZ3.mjs} +1 -1
  100. package/dist/sdk/{routing-YAYBIVPL.mjs → routing-5DHNS7IW.mjs} +4 -4
  101. package/dist/sdk/{schedule-tool-OIVJDIDK.mjs → schedule-tool-25CFKVOI.mjs} +8 -7
  102. package/dist/sdk/{schedule-tool-WACIV77L.mjs → schedule-tool-UGWYLGJK.mjs} +9 -8
  103. package/dist/sdk/{schedule-tool-handler-ODKY57FO.mjs → schedule-tool-handler-VWBX4JEF.mjs} +8 -7
  104. package/dist/sdk/{schedule-tool-handler-SJF4ZKSB.mjs → schedule-tool-handler-WK22RO3M.mjs} +9 -8
  105. package/dist/sdk/sdk.d.mts +42 -2
  106. package/dist/sdk/sdk.d.ts +42 -2
  107. package/dist/sdk/sdk.js +28250 -21090
  108. package/dist/sdk/sdk.js.map +1 -1
  109. package/dist/sdk/sdk.mjs +8 -7
  110. package/dist/sdk/sdk.mjs.map +1 -1
  111. package/dist/sdk/{slack-frontend-OWD7BSWF.mjs → slack-frontend-BPWXNIHE.mjs} +3 -3
  112. package/dist/sdk/slack-frontend-BPWXNIHE.mjs.map +1 -0
  113. package/dist/sdk/{trace-helpers-QL2B75AK.mjs → trace-helpers-GCLQ3YKO.mjs} +2 -2
  114. package/dist/sdk/{track-execution-2Q66SXBZ.mjs → track-execution-GCGJKMAO.mjs} +6 -4
  115. package/dist/sdk/track-execution-GCGJKMAO.mjs.map +1 -0
  116. package/dist/sdk/utcp-check-provider-6YTBN5WQ.mjs +16 -0
  117. package/dist/sdk/utcp-check-provider-HT2MA5SS.mjs +16 -0
  118. package/dist/sdk/{workflow-check-provider-IXW6BMQA.mjs → workflow-check-provider-I732XE7D.mjs} +8 -7
  119. package/dist/sdk/{workflow-check-provider-UZQZYPOE.mjs → workflow-check-provider-T4PFK2EG.mjs} +9 -8
  120. package/dist/sdk/workflow-check-provider-T4PFK2EG.mjs.map +1 -0
  121. package/dist/sdk/{workflow-registry-LRSRWUM5.mjs → workflow-registry-X2IPY35M.mjs} +2 -2
  122. package/dist/sdk/workflow-registry-X2IPY35M.mjs.map +1 -0
  123. package/dist/slack/adapter.d.ts +8 -0
  124. package/dist/slack/adapter.d.ts.map +1 -1
  125. package/dist/slack/client.d.ts +1 -0
  126. package/dist/slack/client.d.ts.map +1 -1
  127. package/dist/slack/socket-runner.d.ts +1 -0
  128. package/dist/slack/socket-runner.d.ts.map +1 -1
  129. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  130. package/dist/state-machine/dispatch/sandbox-routing.d.ts +25 -1
  131. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -1
  132. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  133. package/dist/telemetry/opentelemetry.d.ts +6 -0
  134. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  135. package/dist/test-runner/core/flow-stage.d.ts +1 -2
  136. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  137. package/dist/test-runner/index.d.ts +0 -3
  138. package/dist/test-runner/index.d.ts.map +1 -1
  139. package/dist/test-runner/validator.d.ts.map +1 -1
  140. package/dist/types/config.d.ts +36 -2
  141. package/dist/types/config.d.ts.map +1 -1
  142. package/dist/utils/issue-normalizer.d.ts +27 -0
  143. package/dist/utils/issue-normalizer.d.ts.map +1 -0
  144. package/dist/utils/worktree-manager.d.ts +9 -2
  145. package/dist/utils/worktree-manager.d.ts.map +1 -1
  146. package/dist/workflow-registry.d.ts +5 -0
  147. package/dist/workflow-registry.d.ts.map +1 -1
  148. package/package.json +12 -2
  149. package/dist/sdk/a2a-frontend-KJFLIZJT.mjs.map +0 -1
  150. package/dist/sdk/chunk-BMXVAJ2M.mjs.map +0 -1
  151. package/dist/sdk/chunk-CHARL3TY.mjs.map +0 -1
  152. package/dist/sdk/chunk-FTPLYUQ3.mjs.map +0 -1
  153. package/dist/sdk/chunk-KWHLB5E3.mjs.map +0 -1
  154. package/dist/sdk/chunk-UBTZE3FO.mjs.map +0 -1
  155. package/dist/sdk/slack-frontend-OWD7BSWF.mjs.map +0 -1
  156. package/dist/sdk/track-execution-2Q66SXBZ.mjs.map +0 -1
  157. /package/dist/sdk/{check-provider-registry-J27YX4IT.mjs.map → check-provider-registry-T4HIUBMT.mjs.map} +0 -0
  158. /package/dist/sdk/{check-provider-registry-SYAHJMWJ.mjs.map → check-provider-registry-Z4MVXFLJ.mjs.map} +0 -0
  159. /package/dist/sdk/{chunk-ZJYQMNPA.mjs.map → chunk-3ZKBUWDB.mjs.map} +0 -0
  160. /package/dist/sdk/{chunk-OYHDBTKY.mjs.map → chunk-5DQY4LTK.mjs.map} +0 -0
  161. /package/dist/sdk/{config-DFOF7LP4.mjs.map → config-ZZKC47SV.mjs.map} +0 -0
  162. /package/dist/sdk/{failure-condition-evaluator-V2YGFRKO.mjs.map → failure-condition-evaluator-WNCCIP6N.mjs.map} +0 -0
  163. /package/dist/sdk/{github-frontend-4LM4NAZK.mjs.map → github-frontend-QVMVUL3Y.mjs.map} +0 -0
  164. /package/dist/sdk/{host-GBXJKNHL.mjs.map → host-5TJBWGGH.mjs.map} +0 -0
  165. /package/dist/sdk/{host-XXPPPC76.mjs.map → host-RVLIZMTE.mjs.map} +0 -0
  166. /package/dist/sdk/{loader-Q7K76ZIY.mjs.map → loader-ZNKKJEZ3.mjs.map} +0 -0
  167. /package/dist/sdk/{routing-YAYBIVPL.mjs.map → routing-5DHNS7IW.mjs.map} +0 -0
  168. /package/dist/sdk/{schedule-tool-OIVJDIDK.mjs.map → schedule-tool-25CFKVOI.mjs.map} +0 -0
  169. /package/dist/sdk/{schedule-tool-WACIV77L.mjs.map → schedule-tool-UGWYLGJK.mjs.map} +0 -0
  170. /package/dist/sdk/{schedule-tool-handler-ODKY57FO.mjs.map → schedule-tool-handler-VWBX4JEF.mjs.map} +0 -0
  171. /package/dist/sdk/{schedule-tool-handler-SJF4ZKSB.mjs.map → schedule-tool-handler-WK22RO3M.mjs.map} +0 -0
  172. /package/dist/sdk/{trace-helpers-QL2B75AK.mjs.map → trace-helpers-GCLQ3YKO.mjs.map} +0 -0
  173. /package/dist/sdk/{workflow-check-provider-IXW6BMQA.mjs.map → utcp-check-provider-6YTBN5WQ.mjs.map} +0 -0
  174. /package/dist/sdk/{workflow-check-provider-UZQZYPOE.mjs.map → utcp-check-provider-HT2MA5SS.mjs.map} +0 -0
  175. /package/dist/sdk/{workflow-registry-LRSRWUM5.mjs.map → workflow-check-provider-I732XE7D.mjs.map} +0 -0
package/README.md CHANGED
@@ -19,8 +19,8 @@ Visor is an open-source workflow engine that lets you define multi-step AI pipel
19
19
 
20
20
  - **YAML-driven pipelines** — define checks, transforms, routing, and AI prompts in a single config file.
21
21
  - **8 runtime modes** — CLI, GitHub Action, Slack bot, Telegram bot, Email, WhatsApp, Teams, HTTP server — same config, any surface.
22
- - **12+ provider types** — `ai`, `command`, `script`, `mcp`, `http`, `claude-code`, `github`, `memory`, `workflow`, and more.
23
- - **AI orchestration** — multi-provider (Gemini, Claude, OpenAI, Bedrock), session reuse, MCP tool calling, retry & fallback.
22
+ - **17 provider types** — `ai`, `command`, `script`, `mcp`, `utcp`, `http`, `claude-code`, `a2a`, `github`, `memory`, `workflow`, and more.
23
+ - **AI orchestration** — multi-provider (Gemini, Claude, OpenAI, Bedrock), session reuse, MCP/UTCP tool calling, retry & fallback.
24
24
  - **Execution engine** — dependency DAGs, parallel waves, forEach fan-out, conditional routing, failure auto-remediation.
25
25
  - **Built-in testing** — YAML-native integration tests with fixtures, mocks, and assertions.
26
26
 
@@ -34,6 +34,7 @@ Visor is an open-source workflow engine that lets you define multi-step AI pipel
34
34
  | **Chat assistant / Bot** | [Bot Integrations](docs/bot-integrations.md) | [teams-assistant.yaml](examples/teams-assistant.yaml) |
35
35
  | **Run shell commands + AI** | [Command Provider](docs/command-provider.md) | [ai-with-bash.yaml](examples/ai-with-bash.yaml) |
36
36
  | **Connect MCP tools** | [MCP Provider](docs/mcp-provider.md) | [mcp-provider-example.yaml](examples/mcp-provider-example.yaml) |
37
+ | **Call tools via UTCP** | [UTCP Provider](docs/utcp-provider.md) | [utcp-provider-example.yaml](examples/utcp-provider-example.yaml) |
37
38
  | **Add API integrations (TDD)** | [Guide: TDD Assistant Workflows](docs/guides/tdd-assistant-workflows.md) | [workable.tests.yaml](https://github.com/TykTechnologies/REFINE/blob/main/Oel/tests/workable.tests.yaml) |
38
39
 
39
40
  > **First time?** Run `npx visor init` to scaffold a working config, then `npx visor` to run it.
@@ -241,7 +242,7 @@ Learn more: [docs/commands.md](docs/commands.md)
241
242
  | Concept | What it is |
242
243
  |---------|-----------|
243
244
  | **Step** (or Check) | Unit of work — a shell command, AI call, HTTP request, script, etc. |
244
- | **Provider** | How a step runs: `ai`, `command`, `script`, `mcp`, `http`, `claude-code`, `github`, `memory`, `workflow`, … |
245
+ | **Provider** | How a step runs: `ai`, `command`, `script`, `mcp`, `utcp`, `http`, `claude-code`, `github`, `memory`, `workflow`, … |
245
246
  | **depends_on** | Execution order — independents run in parallel, dependents wait. |
246
247
  | **forEach** | Fan-out — transform output into an array, run dependents per item. |
247
248
  | **Routing** | `on_fail`, `on_success`, `goto`, `retry` — conditional flow with loop safety. |
@@ -260,6 +261,7 @@ Learn more: [docs/commands.md](docs/commands.md)
260
261
  | `command` | Shell commands with Liquid templating | Run tests, build, lint |
261
262
  | `script` | JavaScript in a secure sandbox | Transform data, custom logic |
262
263
  | `mcp` | MCP tool execution (stdio/SSE/HTTP) | External tool integration |
264
+ | `utcp` | UTCP tool execution (HTTP/CLI/SSE) | Direct tool calling via manuals |
263
265
  | `claude-code` | Claude Code SDK with MCP tools | Deep code analysis, refactoring |
264
266
  | `http` | HTTP output/webhook sender | Notify Slack, trigger CI |
265
267
  | `http_input` | Webhook receiver | Accept external events |
@@ -778,7 +780,7 @@ Learn more: [docs/enterprise-policy.md](docs/enterprise-policy.md)
778
780
  [Tools & Toolkits](docs/tools-and-toolkits.md) · [Assistant workflows](docs/assistant-workflows.md) · [TDD for assistant workflows](docs/guides/tdd-assistant-workflows.md) · [Workflow creation](docs/workflow-creation-guide.md) · [Workflow style guide](docs/guides/workflow-style-guide.md) · [Dependencies](docs/dependencies.md) · [forEach propagation](docs/foreach-dependency-propagation.md) · [Failure routing](docs/failure-routing.md) · [Router patterns](docs/router-patterns.md) · [Lifecycle hooks](docs/lifecycle-hooks.md) · [Liquid templates](docs/liquid-templates.md) · [Schema-template system](docs/schema-templates.md) · [Fail conditions](docs/fail-if.md) · [Failure conditions schema](docs/failure-conditions-schema.md) · [Failure conditions impl](docs/failure-conditions-implementation.md) · [Timeouts](docs/timeouts.md) · [Execution limits](docs/limits.md) · [Event triggers](docs/event-triggers.md) · [Output formats](docs/output-formats.md) · [Output formatting](docs/output-formatting.md) · [Default output schema](docs/default-output-schema.md) · [Output history](docs/output-history.md) · [Reusable workflows](docs/workflows.md) · [Criticality modes](docs/guides/criticality-modes.md) · [Fault management](docs/guides/fault-management-and-contracts.md)
779
781
 
780
782
  **Providers:**
781
- [A2A](docs/a2a-provider.md) · [Command](docs/command-provider.md) · [Script](docs/script.md) · [MCP](docs/mcp-provider.md) · [MCP tools for AI](docs/mcp.md) · [Claude Code](docs/claude-code.md) · [AI custom tools](docs/ai-custom-tools.md) · [AI custom tools usage](docs/ai-custom-tools-usage.md) · [Custom tools](docs/custom-tools.md) · [GitHub ops](docs/github-ops.md) · [Git checkout](docs/providers/git-checkout.md) · [HTTP integration](docs/http.md) · [Memory](docs/memory.md) · [Human input](docs/human-input-provider.md) · [Custom providers](docs/pluggable.md)
783
+ [A2A](docs/a2a-provider.md) · [Command](docs/command-provider.md) · [Script](docs/script.md) · [MCP](docs/mcp-provider.md) · [UTCP](docs/utcp-provider.md) · [MCP tools for AI](docs/mcp.md) · [Claude Code](docs/claude-code.md) · [AI custom tools](docs/ai-custom-tools.md) · [AI custom tools usage](docs/ai-custom-tools-usage.md) · [Custom tools](docs/custom-tools.md) · [GitHub ops](docs/github-ops.md) · [Git checkout](docs/providers/git-checkout.md) · [HTTP integration](docs/http.md) · [Memory](docs/memory.md) · [Human input](docs/human-input-provider.md) · [Custom providers](docs/pluggable.md)
782
784
 
783
785
  **Operations:**
784
786
  [Security](docs/security.md) · [Performance](docs/performance.md) · [Observability](docs/observability.md) · [Debugging](docs/debugging.md) · [Debug visualizer](docs/debug-visualizer.md) · [Telemetry setup](docs/telemetry-setup.md) · [Dashboards](docs/dashboards/README.md) · [Troubleshooting](docs/troubleshooting.md) · [Suppressions](docs/suppressions.md) · [GitHub checks](docs/GITHUB_CHECKS.md) · [Bot integrations](docs/bot-integrations.md) · [Slack](docs/slack-integration.md) · [Telegram](docs/telegram-integration.md) · [Email](docs/email-integration.md) · [WhatsApp](docs/whatsapp-integration.md) · [Teams](docs/teams-integration.md) · [Scheduler](docs/scheduler.md) · [Sandbox engines](docs/sandbox-engines.md)
@@ -72,6 +72,7 @@ version: "1.0.0"
72
72
  imports:
73
73
  - intent-router.yaml
74
74
  - code-talk.yaml
75
+ - engineer.yaml
75
76
 
76
77
  inputs:
77
78
  # =========================================================================
@@ -536,6 +537,7 @@ steps:
536
537
  const knowledgeParts = [];
537
538
  const bashAllow = [];
538
539
  const bashDeny = [];
540
+ const extraAllowedFolders = [];
539
541
  let bashEnabled = false;
540
542
  let executePlanEnabled = false;
541
543
 
@@ -685,6 +687,15 @@ steps:
685
687
  }
686
688
  }
687
689
  }
690
+
691
+ // Collect extra allowed folders (e.g. /tmp for screenshot tools)
692
+ if (Array.isArray(skill.allowed_folders)) {
693
+ for (let j = 0; j < skill.allowed_folders.length; j++) {
694
+ if (extraAllowedFolders.indexOf(skill.allowed_folders[j]) === -1) {
695
+ extraAllowedFolders.push(skill.allowed_folders[j]);
696
+ }
697
+ }
698
+ }
688
699
  }
689
700
  }
690
701
 
@@ -747,7 +758,8 @@ steps:
747
758
  bash_config: {
748
759
  allow: bashAllow,
749
760
  deny: bashDeny
750
- }
761
+ },
762
+ extra_allowed_folders: extraAllowedFolders
751
763
  };
752
764
 
753
765
  # -------------------------------------------------------------------------
@@ -762,6 +774,20 @@ steps:
762
774
  - "outputs['build-config'] != null"
763
775
  guarantee: "(output?.text ?? '').length > 0"
764
776
  ai:
777
+ # ── Timeout Configuration ──────────────────────────────────────────
778
+ # Visor hard kill: 2 hours (safety net, always active)
779
+ timeout: 7200000
780
+ # Probe soft timeout: 30 minutes — observer fires here
781
+ ai_timeout: 1800000
782
+ # Negotiated: independent observer LLM decides extensions
783
+ timeout_behavior: negotiated
784
+ # Budget: 60 min total (3 × 20 min extensions → up to 1.5h total)
785
+ negotiated_timeout_budget: 3600000
786
+ negotiated_timeout_max_requests: 3
787
+ negotiated_timeout_max_per_request: 1200000
788
+ # Wind-down for sub-workflows (engineer, code-talk) after stop
789
+ graceful_stop_deadline: 30000
790
+ # ──────────────────────────────────────────────────────────────────
765
791
  max_iterations: "{{ inputs.max_iterations }}"
766
792
  enableDelegate: "{{ inputs.enableDelegate }}"
767
793
  enableTasks: "{{ inputs.enableTasks }}"
@@ -820,6 +846,8 @@ steps:
820
846
  ai_mcp_servers_js: |
821
847
  // Return the pre-built MCP servers from build-config
822
848
  return outputs['build-config']?.mcp_servers ?? {};
849
+ ai_extra_allowed_folders_js: |
850
+ return outputs['build-config']?.extra_allowed_folders ?? [];
823
851
  ai_bash_config_js: |
824
852
  return outputs['build-config']?.bash_config ?? {};
825
853
  schema: