agent-relay 3.2.3 → 3.2.5

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 (239) hide show
  1. package/README.md +25 -0
  2. package/dist/index.cjs +439 -115
  3. package/package.json +11 -10
  4. package/packages/acp-bridge/package.json +2 -2
  5. package/packages/config/dist/cli-registry.generated.d.ts +58 -1
  6. package/packages/config/dist/cli-registry.generated.d.ts.map +1 -1
  7. package/packages/config/dist/cli-registry.generated.js +195 -7
  8. package/packages/config/dist/cli-registry.generated.js.map +1 -1
  9. package/packages/config/package.json +1 -1
  10. package/packages/config/src/cli-registry.generated.ts +218 -8
  11. package/packages/hooks/package.json +4 -4
  12. package/packages/memory/package.json +2 -2
  13. package/packages/openclaw/package.json +2 -2
  14. package/packages/policy/package.json +2 -2
  15. package/packages/sdk/ADAPTER_REVIEW.md +109 -0
  16. package/packages/sdk/dist/communicate/a2a-bridge.d.ts +25 -0
  17. package/packages/sdk/dist/communicate/a2a-bridge.d.ts.map +1 -0
  18. package/packages/sdk/dist/communicate/a2a-bridge.js +89 -0
  19. package/packages/sdk/dist/communicate/a2a-bridge.js.map +1 -0
  20. package/packages/sdk/dist/communicate/a2a-server.d.ts +31 -0
  21. package/packages/sdk/dist/communicate/a2a-server.d.ts.map +1 -0
  22. package/packages/sdk/dist/communicate/a2a-server.js +220 -0
  23. package/packages/sdk/dist/communicate/a2a-server.js.map +1 -0
  24. package/packages/sdk/dist/communicate/a2a-transport.d.ts +48 -0
  25. package/packages/sdk/dist/communicate/a2a-transport.d.ts.map +1 -0
  26. package/packages/sdk/dist/communicate/a2a-transport.js +302 -0
  27. package/packages/sdk/dist/communicate/a2a-transport.js.map +1 -0
  28. package/packages/sdk/dist/communicate/a2a-types.d.ts +107 -0
  29. package/packages/sdk/dist/communicate/a2a-types.d.ts.map +1 -0
  30. package/packages/sdk/dist/communicate/a2a-types.js +209 -0
  31. package/packages/sdk/dist/communicate/a2a-types.js.map +1 -0
  32. package/packages/sdk/dist/communicate/adapters/claude-sdk.d.ts +28 -0
  33. package/packages/sdk/dist/communicate/adapters/claude-sdk.d.ts.map +1 -0
  34. package/packages/sdk/dist/communicate/adapters/claude-sdk.js +47 -0
  35. package/packages/sdk/dist/communicate/adapters/claude-sdk.js.map +1 -0
  36. package/packages/sdk/dist/communicate/adapters/crewai.d.ts +42 -0
  37. package/packages/sdk/dist/communicate/adapters/crewai.d.ts.map +1 -0
  38. package/packages/sdk/dist/communicate/adapters/crewai.js +95 -0
  39. package/packages/sdk/dist/communicate/adapters/crewai.js.map +1 -0
  40. package/packages/sdk/dist/communicate/adapters/google-adk.d.ts +53 -0
  41. package/packages/sdk/dist/communicate/adapters/google-adk.d.ts.map +1 -0
  42. package/packages/sdk/dist/communicate/adapters/google-adk.js +77 -0
  43. package/packages/sdk/dist/communicate/adapters/google-adk.js.map +1 -0
  44. package/packages/sdk/dist/communicate/adapters/index.d.ts +7 -0
  45. package/packages/sdk/dist/communicate/adapters/index.d.ts.map +1 -0
  46. package/packages/sdk/dist/communicate/adapters/index.js +7 -0
  47. package/packages/sdk/dist/communicate/adapters/index.js.map +1 -0
  48. package/packages/sdk/dist/communicate/adapters/langgraph.d.ts +40 -0
  49. package/packages/sdk/dist/communicate/adapters/langgraph.d.ts.map +1 -0
  50. package/packages/sdk/dist/communicate/adapters/langgraph.js +77 -0
  51. package/packages/sdk/dist/communicate/adapters/langgraph.js.map +1 -0
  52. package/packages/sdk/dist/communicate/adapters/openai-agents.d.ts +25 -0
  53. package/packages/sdk/dist/communicate/adapters/openai-agents.d.ts.map +1 -0
  54. package/packages/sdk/dist/communicate/adapters/openai-agents.js +70 -0
  55. package/packages/sdk/dist/communicate/adapters/openai-agents.js.map +1 -0
  56. package/packages/sdk/dist/communicate/adapters/pi.d.ts +45 -0
  57. package/packages/sdk/dist/communicate/adapters/pi.d.ts.map +1 -0
  58. package/packages/sdk/dist/communicate/adapters/pi.js +59 -0
  59. package/packages/sdk/dist/communicate/adapters/pi.js.map +1 -0
  60. package/packages/sdk/dist/communicate/core.d.ts +58 -0
  61. package/packages/sdk/dist/communicate/core.d.ts.map +1 -0
  62. package/packages/sdk/dist/communicate/core.js +128 -0
  63. package/packages/sdk/dist/communicate/core.js.map +1 -0
  64. package/packages/sdk/dist/communicate/index.d.ts +4 -0
  65. package/packages/sdk/dist/communicate/index.d.ts.map +1 -0
  66. package/packages/sdk/dist/communicate/index.js +4 -0
  67. package/packages/sdk/dist/communicate/index.js.map +1 -0
  68. package/packages/sdk/dist/communicate/transport.d.ts +36 -0
  69. package/packages/sdk/dist/communicate/transport.d.ts.map +1 -0
  70. package/packages/sdk/dist/communicate/transport.js +371 -0
  71. package/packages/sdk/dist/communicate/transport.js.map +1 -0
  72. package/packages/sdk/dist/communicate/types.d.ts +58 -0
  73. package/packages/sdk/dist/communicate/types.d.ts.map +1 -0
  74. package/packages/sdk/dist/communicate/types.js +66 -0
  75. package/packages/sdk/dist/communicate/types.js.map +1 -0
  76. package/packages/sdk/dist/models.d.ts +1 -1
  77. package/packages/sdk/dist/models.d.ts.map +1 -1
  78. package/packages/sdk/dist/models.js +2 -2
  79. package/packages/sdk/dist/models.js.map +1 -1
  80. package/packages/sdk/dist/workflows/builder.d.ts +35 -5
  81. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -1
  82. package/packages/sdk/dist/workflows/builder.js +81 -7
  83. package/packages/sdk/dist/workflows/builder.js.map +1 -1
  84. package/packages/sdk/dist/workflows/cli.js +14 -1
  85. package/packages/sdk/dist/workflows/cli.js.map +1 -1
  86. package/packages/sdk/dist/workflows/runner.d.ts +10 -2
  87. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  88. package/packages/sdk/dist/workflows/runner.js +95 -1
  89. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  90. package/packages/sdk/dist/workflows/types.d.ts +11 -0
  91. package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
  92. package/packages/sdk/examples/communicate/claude_sdk_example.ts +5 -0
  93. package/packages/sdk/examples/communicate/pi_example.ts +8 -0
  94. package/packages/sdk/package.json +48 -2
  95. package/packages/sdk/src/__tests__/builder-deterministic.test.ts +132 -0
  96. package/packages/sdk/src/__tests__/communicate/a2a-bridge.test.ts +211 -0
  97. package/packages/sdk/src/__tests__/communicate/a2a-server.test.ts +359 -0
  98. package/packages/sdk/src/__tests__/communicate/a2a-transport.test.ts +537 -0
  99. package/packages/sdk/src/__tests__/communicate/a2a-types.test.ts +297 -0
  100. package/packages/sdk/src/__tests__/communicate/adapters/claude-sdk.test.ts +163 -0
  101. package/packages/sdk/src/__tests__/communicate/adapters/crewai.test.ts +219 -0
  102. package/packages/sdk/src/__tests__/communicate/adapters/e2e-crewai.test.ts +101 -0
  103. package/packages/sdk/src/__tests__/communicate/adapters/e2e-google-adk.test.ts +166 -0
  104. package/packages/sdk/src/__tests__/communicate/adapters/e2e-langgraph.test.ts +181 -0
  105. package/packages/sdk/src/__tests__/communicate/adapters/e2e-openai-agents.test.ts +137 -0
  106. package/packages/sdk/src/__tests__/communicate/adapters/e2e-pi.test.ts +140 -0
  107. package/packages/sdk/src/__tests__/communicate/adapters/google-adk.test.ts +200 -0
  108. package/packages/sdk/src/__tests__/communicate/adapters/langgraph.test.ts +162 -0
  109. package/packages/sdk/src/__tests__/communicate/adapters/openai-agents.test.ts +166 -0
  110. package/packages/sdk/src/__tests__/communicate/adapters/pi.test.ts +140 -0
  111. package/packages/sdk/src/__tests__/communicate/core.test.ts +574 -0
  112. package/packages/sdk/src/__tests__/communicate/integration/cross-framework.test.ts +353 -0
  113. package/packages/sdk/src/__tests__/communicate/transport.test.ts +613 -0
  114. package/packages/sdk/src/__tests__/models.test.ts +61 -0
  115. package/packages/sdk/src/__tests__/start-from.test.ts +346 -0
  116. package/packages/sdk/src/communicate/a2a-bridge.ts +111 -0
  117. package/packages/sdk/src/communicate/a2a-server.ts +277 -0
  118. package/packages/sdk/src/communicate/a2a-transport.ts +395 -0
  119. package/packages/sdk/src/communicate/a2a-types.ts +338 -0
  120. package/packages/sdk/src/communicate/adapters/claude-sdk.ts +85 -0
  121. package/packages/sdk/src/communicate/adapters/crewai.ts +141 -0
  122. package/packages/sdk/src/communicate/adapters/google-adk.ts +139 -0
  123. package/packages/sdk/src/communicate/adapters/index.ts +6 -0
  124. package/packages/sdk/src/communicate/adapters/langgraph.ts +112 -0
  125. package/packages/sdk/src/communicate/adapters/openai-agents.ts +113 -0
  126. package/packages/sdk/src/communicate/adapters/pi.ts +105 -0
  127. package/packages/sdk/src/communicate/core.ts +157 -0
  128. package/packages/sdk/src/communicate/index.ts +3 -0
  129. package/packages/sdk/src/communicate/transport.ts +489 -0
  130. package/packages/sdk/src/communicate/types.ts +106 -0
  131. package/packages/sdk/src/examples/workflows/fix-dashboard-user-registration.yaml +182 -0
  132. package/packages/sdk/src/models.ts +6 -0
  133. package/packages/sdk/src/workflows/builder.ts +97 -9
  134. package/packages/sdk/src/workflows/cli.ts +16 -1
  135. package/packages/sdk/src/workflows/runner.ts +110 -1
  136. package/packages/sdk/src/workflows/types.ts +14 -0
  137. package/packages/sdk/tsconfig.build.json +6 -7
  138. package/packages/sdk/tsconfig.json +1 -7
  139. package/packages/sdk-py/README.md +67 -25
  140. package/packages/sdk-py/examples/communicate/agno_example.py +8 -0
  141. package/packages/sdk-py/examples/communicate/claude_sdk_example.py +6 -0
  142. package/packages/sdk-py/examples/communicate/crewai_example.py +7 -0
  143. package/packages/sdk-py/examples/communicate/google_adk_example.py +7 -0
  144. package/packages/sdk-py/examples/communicate/openai_agents_example.py +8 -0
  145. package/packages/sdk-py/examples/communicate/swarms_example.py +7 -0
  146. package/packages/sdk-py/pyproject.toml +12 -1
  147. package/packages/sdk-py/src/agent_relay/__init__.py +8 -0
  148. package/packages/sdk-py/src/agent_relay/builder.py +65 -26
  149. package/packages/sdk-py/src/agent_relay/communicate/__init__.py +6 -0
  150. package/packages/sdk-py/src/agent_relay/communicate/a2a_bridge.py +138 -0
  151. package/packages/sdk-py/src/agent_relay/communicate/a2a_server.py +242 -0
  152. package/packages/sdk-py/src/agent_relay/communicate/a2a_transport.py +366 -0
  153. package/packages/sdk-py/src/agent_relay/communicate/a2a_types.py +294 -0
  154. package/packages/sdk-py/src/agent_relay/communicate/adapters/__init__.py +10 -0
  155. package/packages/sdk-py/src/agent_relay/communicate/adapters/agno.py +74 -0
  156. package/packages/sdk-py/src/agent_relay/communicate/adapters/claude_sdk.py +78 -0
  157. package/packages/sdk-py/src/agent_relay/communicate/adapters/crewai.py +143 -0
  158. package/packages/sdk-py/src/agent_relay/communicate/adapters/google_adk.py +69 -0
  159. package/packages/sdk-py/src/agent_relay/communicate/adapters/openai_agents.py +86 -0
  160. package/packages/sdk-py/src/agent_relay/communicate/adapters/pi.py +175 -0
  161. package/packages/sdk-py/src/agent_relay/communicate/adapters/swarms.py +44 -0
  162. package/packages/sdk-py/src/agent_relay/communicate/core.py +293 -0
  163. package/packages/sdk-py/src/agent_relay/communicate/transport.py +502 -0
  164. package/packages/sdk-py/src/agent_relay/communicate/types.py +89 -0
  165. package/packages/sdk-py/src/agent_relay/types.py +2 -1
  166. package/packages/sdk-py/tests/communicate/__init__.py +0 -0
  167. package/packages/sdk-py/tests/communicate/adapters/__init__.py +0 -0
  168. package/packages/sdk-py/tests/communicate/adapters/e2e_test_agno.py +154 -0
  169. package/packages/sdk-py/tests/communicate/adapters/e2e_test_claude_sdk.py +428 -0
  170. package/packages/sdk-py/tests/communicate/adapters/e2e_test_crewai.py +234 -0
  171. package/packages/sdk-py/tests/communicate/adapters/e2e_test_google_adk.py +182 -0
  172. package/packages/sdk-py/tests/communicate/adapters/e2e_test_langgraph.py +262 -0
  173. package/packages/sdk-py/tests/communicate/adapters/e2e_test_openai_agents.py +88 -0
  174. package/packages/sdk-py/tests/communicate/adapters/e2e_test_pi.py +156 -0
  175. package/packages/sdk-py/tests/communicate/adapters/e2e_test_swarms.py +239 -0
  176. package/packages/sdk-py/tests/communicate/adapters/test_agno.py +140 -0
  177. package/packages/sdk-py/tests/communicate/adapters/test_claude_sdk.py +147 -0
  178. package/packages/sdk-py/tests/communicate/adapters/test_crewai.py +136 -0
  179. package/packages/sdk-py/tests/communicate/adapters/test_google_adk.py +125 -0
  180. package/packages/sdk-py/tests/communicate/adapters/test_openai_agents.py +99 -0
  181. package/packages/sdk-py/tests/communicate/adapters/test_pi.py +270 -0
  182. package/packages/sdk-py/tests/communicate/adapters/test_swarms.py +113 -0
  183. package/packages/sdk-py/tests/communicate/conftest.py +555 -0
  184. package/packages/sdk-py/tests/communicate/integration/__init__.py +1 -0
  185. package/packages/sdk-py/tests/communicate/integration/test_cross_framework.py +331 -0
  186. package/packages/sdk-py/tests/communicate/integration/test_end_to_end.py +151 -0
  187. package/packages/sdk-py/tests/communicate/test_a2a_bridge.py +363 -0
  188. package/packages/sdk-py/tests/communicate/test_a2a_server.py +346 -0
  189. package/packages/sdk-py/tests/communicate/test_a2a_transport.py +561 -0
  190. package/packages/sdk-py/tests/communicate/test_a2a_types.py +342 -0
  191. package/packages/sdk-py/tests/communicate/test_auto_detect.py +67 -0
  192. package/packages/sdk-py/tests/communicate/test_core.py +331 -0
  193. package/packages/sdk-py/tests/communicate/test_transport.py +373 -0
  194. package/packages/sdk-py/tests/communicate/test_types.py +285 -0
  195. package/packages/sdk-py/tests/test_builder_deterministic.py +118 -0
  196. package/packages/shared/cli-registry.yaml +14 -0
  197. package/packages/shared/codegen-ts.mjs +105 -3
  198. package/packages/telemetry/package.json +1 -1
  199. package/packages/trajectory/package.json +2 -2
  200. package/packages/user-directory/package.json +2 -2
  201. package/packages/utils/package.json +2 -2
  202. package/packages/sdk/dist/__tests__/completion-pipeline.test.d.ts +0 -14
  203. package/packages/sdk/dist/__tests__/completion-pipeline.test.d.ts.map +0 -1
  204. package/packages/sdk/dist/__tests__/completion-pipeline.test.js +0 -1476
  205. package/packages/sdk/dist/__tests__/completion-pipeline.test.js.map +0 -1
  206. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +0 -2
  207. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +0 -1
  208. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +0 -152
  209. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +0 -1
  210. package/packages/sdk/dist/__tests__/e2e-owner-review.test.d.ts +0 -16
  211. package/packages/sdk/dist/__tests__/e2e-owner-review.test.d.ts.map +0 -1
  212. package/packages/sdk/dist/__tests__/e2e-owner-review.test.js +0 -640
  213. package/packages/sdk/dist/__tests__/e2e-owner-review.test.js.map +0 -1
  214. package/packages/sdk/dist/__tests__/facade.test.d.ts +0 -2
  215. package/packages/sdk/dist/__tests__/facade.test.d.ts.map +0 -1
  216. package/packages/sdk/dist/__tests__/facade.test.js +0 -305
  217. package/packages/sdk/dist/__tests__/facade.test.js.map +0 -1
  218. package/packages/sdk/dist/__tests__/integration.test.d.ts +0 -2
  219. package/packages/sdk/dist/__tests__/integration.test.d.ts.map +0 -1
  220. package/packages/sdk/dist/__tests__/integration.test.js +0 -205
  221. package/packages/sdk/dist/__tests__/integration.test.js.map +0 -1
  222. package/packages/sdk/dist/__tests__/pty.test.d.ts +0 -2
  223. package/packages/sdk/dist/__tests__/pty.test.d.ts.map +0 -1
  224. package/packages/sdk/dist/__tests__/pty.test.js +0 -20
  225. package/packages/sdk/dist/__tests__/pty.test.js.map +0 -1
  226. package/packages/sdk/dist/__tests__/quickstart.test.d.ts +0 -2
  227. package/packages/sdk/dist/__tests__/quickstart.test.d.ts.map +0 -1
  228. package/packages/sdk/dist/__tests__/quickstart.test.js +0 -176
  229. package/packages/sdk/dist/__tests__/quickstart.test.js.map +0 -1
  230. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +0 -2
  231. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +0 -1
  232. package/packages/sdk/dist/__tests__/spawn-from-env.test.js +0 -222
  233. package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +0 -1
  234. package/packages/sdk/dist/__tests__/unit.test.d.ts +0 -2
  235. package/packages/sdk/dist/__tests__/unit.test.d.ts.map +0 -1
  236. package/packages/sdk/dist/__tests__/unit.test.js +0 -357
  237. package/packages/sdk/dist/__tests__/unit.test.js.map +0 -1
  238. package/packages/sdk-py/agent_relay/__init__.py +0 -21
  239. package/packages/sdk-py/agent_relay/models.py +0 -398
package/dist/index.cjs CHANGED
@@ -8829,9 +8829,11 @@ __export(index_exports, {
8829
8829
  InMemoryAdapter: () => InMemoryAdapter,
8830
8830
  InMemoryWorkflowDb: () => InMemoryWorkflowDb,
8831
8831
  JsonFileWorkflowDb: () => JsonFileWorkflowDb,
8832
+ ModelMetadata: () => ModelMetadata,
8832
8833
  ModelOptions: () => ModelOptions,
8833
8834
  Models: () => Models,
8834
8835
  PROTOCOL_VERSION: () => PROTOCOL_VERSION,
8836
+ ReasoningEfforts: () => ReasoningEfforts,
8835
8837
  RelayAdapter: () => RelayAdapter,
8836
8838
  RelayCast: () => RelayCast,
8837
8839
  RelayError: () => RelayError,
@@ -8886,16 +8888,19 @@ __export(index_exports, {
8886
8888
  getCachedRelayPtyPath: () => getCachedRelayPtyPath,
8887
8889
  getCompiledPatterns: () => getCompiledPatterns,
8888
8890
  getCustomStepsPath: () => getCustomStepsPath,
8891
+ getDefaultReasoningEffort: () => getDefaultReasoningEffort,
8889
8892
  getGitRemoteUrl: () => getGitRemoteUrl,
8890
8893
  getInboxPath: () => getInboxPath,
8891
8894
  getLastSearchPaths: () => getLastSearchPaths,
8892
8895
  getLogs: () => getLogs,
8893
8896
  getMemoryHooks: () => getMemoryHooks,
8894
8897
  getModelCommandConfig: () => getModelCommandConfig,
8898
+ getModelMetadata: () => getModelMetadata,
8895
8899
  getPatternMetrics: () => getPatternMetrics,
8896
8900
  getRepoFullName: () => getRepoFullName,
8897
8901
  getRepoFullNameFromPath: () => getRepoFullNameFromPath,
8898
8902
  getSupportedPlatforms: () => getSupportedPlatforms,
8903
+ getSupportedReasoningEfforts: () => getSupportedReasoningEfforts,
8899
8904
  getTrajectoryHooks: () => getTrajectoryHooks,
8900
8905
  handleResponse: () => handleResponse2,
8901
8906
  hasRelayPtyBinary: () => hasRelayPtyBinary,
@@ -14789,19 +14794,25 @@ var OpencodeModels = {
14789
14794
  /** O4 Mini Deep Research */
14790
14795
  OPENAI_O4_MINI_DEEP_RESEARCH: "openai/o4-mini-deep-research"
14791
14796
  };
14797
+ var ReasoningEfforts = {
14798
+ LOW: "low",
14799
+ MEDIUM: "medium",
14800
+ HIGH: "high",
14801
+ XHIGH: "xhigh"
14802
+ };
14792
14803
  var CLAUDE_MODEL_OPTIONS = [
14793
14804
  { value: "sonnet", label: "Sonnet" },
14794
14805
  { value: "opus", label: "Opus" },
14795
14806
  { value: "haiku", label: "Haiku" }
14796
14807
  ];
14797
14808
  var CODEX_MODEL_OPTIONS = [
14798
- { value: "gpt-5.4", label: "GPT-5.4 \u2014 Latest frontier agentic coding model" },
14799
- { value: "gpt-5.3-codex", label: "GPT-5.3 Codex \u2014 Frontier agentic coding model" },
14800
- { value: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark \u2014 Ultra-fast coding model" },
14801
- { value: "gpt-5.2-codex", label: "GPT-5.2 Codex \u2014 Frontier agentic coding model" },
14802
- { value: "gpt-5.2", label: "GPT-5.2 \u2014 Frontier model, knowledge & reasoning" },
14803
- { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max \u2014 Deep and fast reasoning" },
14804
- { value: "gpt-5.1-codex-mini", label: "GPT-5.1 Codex Mini \u2014 Cheaper, faster" }
14809
+ { value: "gpt-5.4", label: "GPT-5.4 \u2014 Latest frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14810
+ { value: "gpt-5.3-codex", label: "GPT-5.3 Codex \u2014 Frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14811
+ { value: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark \u2014 Ultra-fast coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14812
+ { value: "gpt-5.2-codex", label: "GPT-5.2 Codex \u2014 Frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14813
+ { value: "gpt-5.2", label: "GPT-5.2 \u2014 Frontier model, knowledge & reasoning", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14814
+ { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max \u2014 Deep and fast reasoning", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14815
+ { value: "gpt-5.1-codex-mini", label: "GPT-5.1 Codex Mini \u2014 Cheaper, faster", reasoningEfforts: ["medium", "high"], defaultReasoningEffort: "high" }
14805
14816
  ];
14806
14817
  var GEMINI_MODEL_OPTIONS = [
14807
14818
  { value: "gemini-3.1-pro-preview", label: "Gemini 3.1 Pro Preview" },
@@ -14913,6 +14924,130 @@ var OPENCODE_MODEL_OPTIONS = [
14913
14924
  { value: "openai/o4-mini", label: "O4 Mini" },
14914
14925
  { value: "openai/o4-mini-deep-research", label: "O4 Mini Deep Research" }
14915
14926
  ];
14927
+ var CLAUDE_MODEL_METADATA = {
14928
+ "sonnet": { value: "sonnet", label: "Sonnet" },
14929
+ "opus": { value: "opus", label: "Opus" },
14930
+ "haiku": { value: "haiku", label: "Haiku" }
14931
+ };
14932
+ var CODEX_MODEL_METADATA = {
14933
+ "gpt-5.4": { value: "gpt-5.4", label: "GPT-5.4 \u2014 Latest frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14934
+ "gpt-5.3-codex": { value: "gpt-5.3-codex", label: "GPT-5.3 Codex \u2014 Frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14935
+ "gpt-5.3-codex-spark": { value: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark \u2014 Ultra-fast coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14936
+ "gpt-5.2-codex": { value: "gpt-5.2-codex", label: "GPT-5.2 Codex \u2014 Frontier agentic coding model", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14937
+ "gpt-5.2": { value: "gpt-5.2", label: "GPT-5.2 \u2014 Frontier model, knowledge & reasoning", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14938
+ "gpt-5.1-codex-max": { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max \u2014 Deep and fast reasoning", reasoningEfforts: ["low", "medium", "high", "xhigh"], defaultReasoningEffort: "xhigh" },
14939
+ "gpt-5.1-codex-mini": { value: "gpt-5.1-codex-mini", label: "GPT-5.1 Codex Mini \u2014 Cheaper, faster", reasoningEfforts: ["medium", "high"], defaultReasoningEffort: "high" }
14940
+ };
14941
+ var GEMINI_MODEL_METADATA = {
14942
+ "gemini-3.1-pro-preview": { value: "gemini-3.1-pro-preview", label: "Gemini 3.1 Pro Preview" },
14943
+ "gemini-3-flash-preview": { value: "gemini-3-flash-preview", label: "Gemini 3 Flash Preview" },
14944
+ "gemini-2.5-pro": { value: "gemini-2.5-pro", label: "Gemini 2.5 Pro" },
14945
+ "gemini-2.5-flash": { value: "gemini-2.5-flash", label: "Gemini 2.5 Flash" },
14946
+ "gemini-2.5-flash-lite": { value: "gemini-2.5-flash-lite", label: "Gemini 2.5 Flash Lite" }
14947
+ };
14948
+ var CURSOR_MODEL_METADATA = {
14949
+ "opus-4.6-thinking": { value: "opus-4.6-thinking", label: "Claude 4.6 Opus (Thinking)" },
14950
+ "opus-4.6": { value: "opus-4.6", label: "Claude 4.6 Opus" },
14951
+ "opus-4.5": { value: "opus-4.5", label: "Claude 4.5 Opus" },
14952
+ "opus-4.5-thinking": { value: "opus-4.5-thinking", label: "Claude 4.5 Opus (Thinking)" },
14953
+ "sonnet-4.6": { value: "sonnet-4.6", label: "Claude 4.6 Sonnet" },
14954
+ "sonnet-4.6-thinking": { value: "sonnet-4.6-thinking", label: "Claude 4.6 Sonnet (Thinking)" },
14955
+ "sonnet-4.5": { value: "sonnet-4.5", label: "Claude 4.5 Sonnet" },
14956
+ "sonnet-4.5-thinking": { value: "sonnet-4.5-thinking", label: "Claude 4.5 Sonnet (Thinking)" },
14957
+ "composer-1.5": { value: "composer-1.5", label: "Composer 1.5" },
14958
+ "composer-1": { value: "composer-1", label: "Composer 1" },
14959
+ "gpt-5.4-xhigh": { value: "gpt-5.4-xhigh", label: "GPT-5.4 Extra High" },
14960
+ "gpt-5.4-xhigh-fast": { value: "gpt-5.4-xhigh-fast", label: "GPT-5.4 Extra High Fast" },
14961
+ "gpt-5.4-high": { value: "gpt-5.4-high", label: "GPT-5.4 High" },
14962
+ "gpt-5.4-high-fast": { value: "gpt-5.4-high-fast", label: "GPT-5.4 High Fast" },
14963
+ "gpt-5.4-medium": { value: "gpt-5.4-medium", label: "GPT-5.4" },
14964
+ "gpt-5.4-medium-fast": { value: "gpt-5.4-medium-fast", label: "GPT-5.4 Fast" },
14965
+ "gpt-5.4-low": { value: "gpt-5.4-low", label: "GPT-5.4 Low" },
14966
+ "gpt-5.3-codex-xhigh": { value: "gpt-5.3-codex-xhigh", label: "GPT-5.3 Codex Extra High" },
14967
+ "gpt-5.3-codex-xhigh-fast": { value: "gpt-5.3-codex-xhigh-fast", label: "GPT-5.3 Codex Extra High Fast" },
14968
+ "gpt-5.3-codex-high": { value: "gpt-5.3-codex-high", label: "GPT-5.3 Codex High" },
14969
+ "gpt-5.3-codex-high-fast": { value: "gpt-5.3-codex-high-fast", label: "GPT-5.3 Codex High Fast" },
14970
+ "gpt-5.3-codex": { value: "gpt-5.3-codex", label: "GPT-5.3 Codex" },
14971
+ "gpt-5.3-codex-fast": { value: "gpt-5.3-codex-fast", label: "GPT-5.3 Codex Fast" },
14972
+ "gpt-5.3-codex-low": { value: "gpt-5.3-codex-low", label: "GPT-5.3 Codex Low" },
14973
+ "gpt-5.3-codex-low-fast": { value: "gpt-5.3-codex-low-fast", label: "GPT-5.3 Codex Low Fast" },
14974
+ "gpt-5.3-codex-spark-preview": { value: "gpt-5.3-codex-spark-preview", label: "GPT-5.3 Codex Spark" },
14975
+ "gpt-5.2-codex-xhigh": { value: "gpt-5.2-codex-xhigh", label: "GPT-5.2 Codex Extra High" },
14976
+ "gpt-5.2-codex-xhigh-fast": { value: "gpt-5.2-codex-xhigh-fast", label: "GPT-5.2 Codex Extra High Fast" },
14977
+ "gpt-5.2-codex-high": { value: "gpt-5.2-codex-high", label: "GPT-5.2 Codex High" },
14978
+ "gpt-5.2-codex-high-fast": { value: "gpt-5.2-codex-high-fast", label: "GPT-5.2 Codex High Fast" },
14979
+ "gpt-5.2-codex": { value: "gpt-5.2-codex", label: "GPT-5.2 Codex" },
14980
+ "gpt-5.2-codex-fast": { value: "gpt-5.2-codex-fast", label: "GPT-5.2 Codex Fast" },
14981
+ "gpt-5.2-codex-low": { value: "gpt-5.2-codex-low", label: "GPT-5.2 Codex Low" },
14982
+ "gpt-5.2-codex-low-fast": { value: "gpt-5.2-codex-low-fast", label: "GPT-5.2 Codex Low Fast" },
14983
+ "gpt-5.2": { value: "gpt-5.2", label: "GPT-5.2" },
14984
+ "gpt-5.2-high": { value: "gpt-5.2-high", label: "GPT-5.2 High" },
14985
+ "gpt-5.1-codex-max": { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
14986
+ "gpt-5.1-codex-max-high": { value: "gpt-5.1-codex-max-high", label: "GPT-5.1 Codex Max High" },
14987
+ "gpt-5.1-codex-mini": { value: "gpt-5.1-codex-mini", label: "GPT-5.1 Codex Mini" },
14988
+ "gpt-5.1-high": { value: "gpt-5.1-high", label: "GPT-5.1 High" },
14989
+ "gemini-3.1-pro": { value: "gemini-3.1-pro", label: "Gemini 3.1 Pro" },
14990
+ "gemini-3-pro": { value: "gemini-3-pro", label: "Gemini 3 Pro" },
14991
+ "gemini-3-flash": { value: "gemini-3-flash", label: "Gemini 3 Flash" },
14992
+ "grok": { value: "grok", label: "Grok" },
14993
+ "kimi-k2.5": { value: "kimi-k2.5", label: "Kimi K2.5" }
14994
+ };
14995
+ var DROID_MODEL_METADATA = {
14996
+ "opus-4.6-fast": { value: "opus-4.6-fast", label: "Opus 4.6 Fast Mode (12x)" },
14997
+ "opus-4.5": { value: "opus-4.5", label: "Opus 4.5 (2x)" },
14998
+ "sonnet-4.5": { value: "sonnet-4.5", label: "Sonnet 4.5 (1.2x)" },
14999
+ "haiku-4.5": { value: "haiku-4.5", label: "Haiku 4.5 (0.4x)" },
15000
+ "gpt-5.2": { value: "gpt-5.2", label: "GPT-5.2 (0.7x)" },
15001
+ "gpt-5.2-codex": { value: "gpt-5.2-codex", label: "GPT-5.2 Codex (0.7x)" },
15002
+ "gemini-3-flash": { value: "gemini-3-flash", label: "Gemini 3 Flash (0.2x)" },
15003
+ "droid-core-glm-4.7": { value: "droid-core-glm-4.7", label: "Droid Core (GLM-4.7) (0.25x)" }
15004
+ };
15005
+ var OPENCODE_MODEL_METADATA = {
15006
+ "opencode/big-pickle": { value: "opencode/big-pickle", label: "Big Pickle" },
15007
+ "opencode/gpt-5-nano": { value: "opencode/gpt-5-nano", label: "GPT-5 Nano (OpenCode)" },
15008
+ "opencode/mimo-v2-flash-free": { value: "opencode/mimo-v2-flash-free", label: "Mimo V2 Flash Free" },
15009
+ "opencode/minimax-m2.5-free": { value: "opencode/minimax-m2.5-free", label: "MiniMax M2.5 Free" },
15010
+ "openai/codex-mini-latest": { value: "openai/codex-mini-latest", label: "Codex Mini Latest" },
15011
+ "openai/gpt-3.5-turbo": { value: "openai/gpt-3.5-turbo", label: "GPT-3.5 Turbo" },
15012
+ "openai/gpt-4": { value: "openai/gpt-4", label: "GPT-4" },
15013
+ "openai/gpt-4-turbo": { value: "openai/gpt-4-turbo", label: "GPT-4 Turbo" },
15014
+ "openai/gpt-4.1": { value: "openai/gpt-4.1", label: "GPT-4.1" },
15015
+ "openai/gpt-4.1-mini": { value: "openai/gpt-4.1-mini", label: "GPT-4.1 Mini" },
15016
+ "openai/gpt-4.1-nano": { value: "openai/gpt-4.1-nano", label: "GPT-4.1 Nano" },
15017
+ "openai/gpt-4o": { value: "openai/gpt-4o", label: "GPT-4o" },
15018
+ "openai/gpt-4o-2024-05-13": { value: "openai/gpt-4o-2024-05-13", label: "GPT-4o (2024-05-13)" },
15019
+ "openai/gpt-4o-2024-08-06": { value: "openai/gpt-4o-2024-08-06", label: "GPT-4o (2024-08-06)" },
15020
+ "openai/gpt-4o-2024-11-20": { value: "openai/gpt-4o-2024-11-20", label: "GPT-4o (2024-11-20)" },
15021
+ "openai/gpt-4o-mini": { value: "openai/gpt-4o-mini", label: "GPT-4o Mini" },
15022
+ "openai/gpt-5": { value: "openai/gpt-5", label: "GPT-5" },
15023
+ "openai/gpt-5-codex": { value: "openai/gpt-5-codex", label: "GPT-5 Codex" },
15024
+ "openai/gpt-5-mini": { value: "openai/gpt-5-mini", label: "GPT-5 Mini" },
15025
+ "openai/gpt-5-nano": { value: "openai/gpt-5-nano", label: "GPT-5 Nano" },
15026
+ "openai/gpt-5-pro": { value: "openai/gpt-5-pro", label: "GPT-5 Pro" },
15027
+ "openai/gpt-5.1": { value: "openai/gpt-5.1", label: "GPT-5.1" },
15028
+ "openai/gpt-5.1-chat-latest": { value: "openai/gpt-5.1-chat-latest", label: "GPT-5.1 Chat Latest" },
15029
+ "openai/gpt-5.1-codex": { value: "openai/gpt-5.1-codex", label: "GPT-5.1 Codex" },
15030
+ "openai/gpt-5.1-codex-max": { value: "openai/gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
15031
+ "openai/gpt-5.1-codex-mini": { value: "openai/gpt-5.1-codex-mini", label: "GPT-5.1 Codex Mini" },
15032
+ "openai/gpt-5.2": { value: "openai/gpt-5.2", label: "GPT-5.2" },
15033
+ "openai/gpt-5.2-chat-latest": { value: "openai/gpt-5.2-chat-latest", label: "GPT-5.2 Chat Latest" },
15034
+ "openai/gpt-5.2-codex": { value: "openai/gpt-5.2-codex", label: "GPT-5.2 Codex" },
15035
+ "openai/gpt-5.2-pro": { value: "openai/gpt-5.2-pro", label: "GPT-5.2 Pro" },
15036
+ "openai/gpt-5.3-codex": { value: "openai/gpt-5.3-codex", label: "GPT-5.3 Codex" },
15037
+ "openai/gpt-5.3-codex-spark": { value: "openai/gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark" },
15038
+ "openai/gpt-5.4": { value: "openai/gpt-5.4", label: "GPT-5.4" },
15039
+ "openai/gpt-5.4-pro": { value: "openai/gpt-5.4-pro", label: "GPT-5.4 Pro" },
15040
+ "openai/o1": { value: "openai/o1", label: "O1" },
15041
+ "openai/o1-mini": { value: "openai/o1-mini", label: "O1 Mini" },
15042
+ "openai/o1-preview": { value: "openai/o1-preview", label: "O1 Preview" },
15043
+ "openai/o1-pro": { value: "openai/o1-pro", label: "O1 Pro" },
15044
+ "openai/o3": { value: "openai/o3", label: "O3" },
15045
+ "openai/o3-deep-research": { value: "openai/o3-deep-research", label: "O3 Deep Research" },
15046
+ "openai/o3-mini": { value: "openai/o3-mini", label: "O3 Mini" },
15047
+ "openai/o3-pro": { value: "openai/o3-pro", label: "O3 Pro" },
15048
+ "openai/o4-mini": { value: "openai/o4-mini", label: "O4 Mini" },
15049
+ "openai/o4-mini-deep-research": { value: "openai/o4-mini-deep-research", label: "O4 Mini Deep Research" }
15050
+ };
14916
15051
  var Models = {
14917
15052
  Claude: ClaudeModels,
14918
15053
  Codex: CodexModels,
@@ -14929,6 +15064,33 @@ var ModelOptions = {
14929
15064
  Droid: DROID_MODEL_OPTIONS,
14930
15065
  Opencode: OPENCODE_MODEL_OPTIONS
14931
15066
  };
15067
+ var ModelMetadata = {
15068
+ Claude: CLAUDE_MODEL_METADATA,
15069
+ Codex: CODEX_MODEL_METADATA,
15070
+ Gemini: GEMINI_MODEL_METADATA,
15071
+ Cursor: CURSOR_MODEL_METADATA,
15072
+ Droid: DROID_MODEL_METADATA,
15073
+ Opencode: OPENCODE_MODEL_METADATA
15074
+ };
15075
+ var MODEL_METADATA_BY_CLI = {
15076
+ claude: CLAUDE_MODEL_METADATA,
15077
+ codex: CODEX_MODEL_METADATA,
15078
+ gemini: GEMINI_MODEL_METADATA,
15079
+ cursor: CURSOR_MODEL_METADATA,
15080
+ droid: DROID_MODEL_METADATA,
15081
+ opencode: OPENCODE_MODEL_METADATA,
15082
+ aider: {},
15083
+ goose: {}
15084
+ };
15085
+ function getModelMetadata(cli, model) {
15086
+ return MODEL_METADATA_BY_CLI[cli]?.[model];
15087
+ }
15088
+ function getSupportedReasoningEfforts(cli, model) {
15089
+ return getModelMetadata(cli, model)?.reasoningEfforts;
15090
+ }
15091
+ function getDefaultReasoningEffort(cli, model) {
15092
+ return getModelMetadata(cli, model)?.defaultReasoningEffort;
15093
+ }
14932
15094
  var SwarmPatterns = {
14933
15095
  /** Central coordinator distributes tasks to workers */
14934
15096
  HUB_SPOKE: "hub-spoke",
@@ -15849,10 +16011,10 @@ var HttpAgentRelayClient = class _HttpAgentRelayClient {
15849
16011
  }
15850
16012
  };
15851
16013
 
15852
- // node_modules/@relaycast/sdk/dist/version.js
16014
+ // packages/sdk/node_modules/@relaycast/sdk/dist/version.js
15853
16015
  var SDK_VERSION = "0.4.2";
15854
16016
 
15855
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/external.js
16017
+ // packages/sdk/node_modules/zod/v4/classic/external.js
15856
16018
  var external_exports2 = {};
15857
16019
  __export(external_exports2, {
15858
16020
  $brand: () => $brand,
@@ -16093,7 +16255,7 @@ __export(external_exports2, {
16093
16255
  xor: () => xor
16094
16256
  });
16095
16257
 
16096
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/index.js
16258
+ // packages/sdk/node_modules/zod/v4/core/index.js
16097
16259
  var core_exports2 = {};
16098
16260
  __export(core_exports2, {
16099
16261
  $ZodAny: () => $ZodAny,
@@ -16371,7 +16533,7 @@ __export(core_exports2, {
16371
16533
  version: () => version
16372
16534
  });
16373
16535
 
16374
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/core.js
16536
+ // packages/sdk/node_modules/zod/v4/core/core.js
16375
16537
  var NEVER2 = Object.freeze({
16376
16538
  status: "aborted"
16377
16539
  });
@@ -16446,7 +16608,7 @@ function config(newConfig) {
16446
16608
  return globalConfig;
16447
16609
  }
16448
16610
 
16449
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/util.js
16611
+ // packages/sdk/node_modules/zod/v4/core/util.js
16450
16612
  var util_exports = {};
16451
16613
  __export(util_exports, {
16452
16614
  BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES,
@@ -17125,7 +17287,7 @@ var Class = class {
17125
17287
  }
17126
17288
  };
17127
17289
 
17128
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/errors.js
17290
+ // packages/sdk/node_modules/zod/v4/core/errors.js
17129
17291
  var initializer = (inst, def) => {
17130
17292
  inst.name = "$ZodError";
17131
17293
  Object.defineProperty(inst, "_zod", {
@@ -17261,7 +17423,7 @@ function prettifyError(error48) {
17261
17423
  return lines.join("\n");
17262
17424
  }
17263
17425
 
17264
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/parse.js
17426
+ // packages/sdk/node_modules/zod/v4/core/parse.js
17265
17427
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
17266
17428
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
17267
17429
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -17349,7 +17511,7 @@ var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
17349
17511
  };
17350
17512
  var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
17351
17513
 
17352
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/regexes.js
17514
+ // packages/sdk/node_modules/zod/v4/core/regexes.js
17353
17515
  var regexes_exports = {};
17354
17516
  __export(regexes_exports, {
17355
17517
  base64: () => base64,
@@ -17506,7 +17668,7 @@ var sha512_hex = /^[0-9a-fA-F]{128}$/;
17506
17668
  var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
17507
17669
  var sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
17508
17670
 
17509
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/checks.js
17671
+ // packages/sdk/node_modules/zod/v4/core/checks.js
17510
17672
  var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
17511
17673
  var _a2;
17512
17674
  inst._zod ?? (inst._zod = {});
@@ -18054,7 +18216,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
18054
18216
  };
18055
18217
  });
18056
18218
 
18057
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/doc.js
18219
+ // packages/sdk/node_modules/zod/v4/core/doc.js
18058
18220
  var Doc = class {
18059
18221
  constructor(args = []) {
18060
18222
  this.content = [];
@@ -18090,14 +18252,14 @@ var Doc = class {
18090
18252
  }
18091
18253
  };
18092
18254
 
18093
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/versions.js
18255
+ // packages/sdk/node_modules/zod/v4/core/versions.js
18094
18256
  var version = {
18095
18257
  major: 4,
18096
18258
  minor: 3,
18097
18259
  patch: 6
18098
18260
  };
18099
18261
 
18100
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/schemas.js
18262
+ // packages/sdk/node_modules/zod/v4/core/schemas.js
18101
18263
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
18102
18264
  var _a2;
18103
18265
  inst ?? (inst = {});
@@ -20068,7 +20230,7 @@ function handleRefineResult(result, payload, input, inst) {
20068
20230
  }
20069
20231
  }
20070
20232
 
20071
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/index.js
20233
+ // packages/sdk/node_modules/zod/v4/locales/index.js
20072
20234
  var locales_exports = {};
20073
20235
  __export(locales_exports, {
20074
20236
  ar: () => ar_default,
@@ -20122,7 +20284,7 @@ __export(locales_exports, {
20122
20284
  zhTW: () => zh_TW_default
20123
20285
  });
20124
20286
 
20125
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ar.js
20287
+ // packages/sdk/node_modules/zod/v4/locales/ar.js
20126
20288
  var error = () => {
20127
20289
  const Sizable = {
20128
20290
  string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
@@ -20229,7 +20391,7 @@ function ar_default() {
20229
20391
  };
20230
20392
  }
20231
20393
 
20232
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/az.js
20394
+ // packages/sdk/node_modules/zod/v4/locales/az.js
20233
20395
  var error2 = () => {
20234
20396
  const Sizable = {
20235
20397
  string: { unit: "simvol", verb: "olmal\u0131d\u0131r" },
@@ -20335,7 +20497,7 @@ function az_default() {
20335
20497
  };
20336
20498
  }
20337
20499
 
20338
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/be.js
20500
+ // packages/sdk/node_modules/zod/v4/locales/be.js
20339
20501
  function getBelarusianPlural(count, one, few, many) {
20340
20502
  const absCount = Math.abs(count);
20341
20503
  const lastDigit = absCount % 10;
@@ -20492,7 +20654,7 @@ function be_default() {
20492
20654
  };
20493
20655
  }
20494
20656
 
20495
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/bg.js
20657
+ // packages/sdk/node_modules/zod/v4/locales/bg.js
20496
20658
  var error4 = () => {
20497
20659
  const Sizable = {
20498
20660
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
@@ -20613,7 +20775,7 @@ function bg_default() {
20613
20775
  };
20614
20776
  }
20615
20777
 
20616
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ca.js
20778
+ // packages/sdk/node_modules/zod/v4/locales/ca.js
20617
20779
  var error5 = () => {
20618
20780
  const Sizable = {
20619
20781
  string: { unit: "car\xE0cters", verb: "contenir" },
@@ -20722,7 +20884,7 @@ function ca_default() {
20722
20884
  };
20723
20885
  }
20724
20886
 
20725
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/cs.js
20887
+ // packages/sdk/node_modules/zod/v4/locales/cs.js
20726
20888
  var error6 = () => {
20727
20889
  const Sizable = {
20728
20890
  string: { unit: "znak\u016F", verb: "m\xEDt" },
@@ -20834,7 +20996,7 @@ function cs_default() {
20834
20996
  };
20835
20997
  }
20836
20998
 
20837
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/da.js
20999
+ // packages/sdk/node_modules/zod/v4/locales/da.js
20838
21000
  var error7 = () => {
20839
21001
  const Sizable = {
20840
21002
  string: { unit: "tegn", verb: "havde" },
@@ -20950,7 +21112,7 @@ function da_default() {
20950
21112
  };
20951
21113
  }
20952
21114
 
20953
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/de.js
21115
+ // packages/sdk/node_modules/zod/v4/locales/de.js
20954
21116
  var error8 = () => {
20955
21117
  const Sizable = {
20956
21118
  string: { unit: "Zeichen", verb: "zu haben" },
@@ -21059,7 +21221,7 @@ function de_default() {
21059
21221
  };
21060
21222
  }
21061
21223
 
21062
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/en.js
21224
+ // packages/sdk/node_modules/zod/v4/locales/en.js
21063
21225
  var error9 = () => {
21064
21226
  const Sizable = {
21065
21227
  string: { unit: "characters", verb: "to have" },
@@ -21168,7 +21330,7 @@ function en_default2() {
21168
21330
  };
21169
21331
  }
21170
21332
 
21171
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/eo.js
21333
+ // packages/sdk/node_modules/zod/v4/locales/eo.js
21172
21334
  var error10 = () => {
21173
21335
  const Sizable = {
21174
21336
  string: { unit: "karaktrojn", verb: "havi" },
@@ -21278,7 +21440,7 @@ function eo_default() {
21278
21440
  };
21279
21441
  }
21280
21442
 
21281
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/es.js
21443
+ // packages/sdk/node_modules/zod/v4/locales/es.js
21282
21444
  var error11 = () => {
21283
21445
  const Sizable = {
21284
21446
  string: { unit: "caracteres", verb: "tener" },
@@ -21411,7 +21573,7 @@ function es_default() {
21411
21573
  };
21412
21574
  }
21413
21575
 
21414
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fa.js
21576
+ // packages/sdk/node_modules/zod/v4/locales/fa.js
21415
21577
  var error12 = () => {
21416
21578
  const Sizable = {
21417
21579
  string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
@@ -21526,7 +21688,7 @@ function fa_default() {
21526
21688
  };
21527
21689
  }
21528
21690
 
21529
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fi.js
21691
+ // packages/sdk/node_modules/zod/v4/locales/fi.js
21530
21692
  var error13 = () => {
21531
21693
  const Sizable = {
21532
21694
  string: { unit: "merkki\xE4", subject: "merkkijonon" },
@@ -21639,7 +21801,7 @@ function fi_default() {
21639
21801
  };
21640
21802
  }
21641
21803
 
21642
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fr.js
21804
+ // packages/sdk/node_modules/zod/v4/locales/fr.js
21643
21805
  var error14 = () => {
21644
21806
  const Sizable = {
21645
21807
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -21748,7 +21910,7 @@ function fr_default() {
21748
21910
  };
21749
21911
  }
21750
21912
 
21751
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fr-CA.js
21913
+ // packages/sdk/node_modules/zod/v4/locales/fr-CA.js
21752
21914
  var error15 = () => {
21753
21915
  const Sizable = {
21754
21916
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -21856,7 +22018,7 @@ function fr_CA_default() {
21856
22018
  };
21857
22019
  }
21858
22020
 
21859
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/he.js
22021
+ // packages/sdk/node_modules/zod/v4/locales/he.js
21860
22022
  var error16 = () => {
21861
22023
  const TypeNames = {
21862
22024
  string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" },
@@ -22051,7 +22213,7 @@ function he_default() {
22051
22213
  };
22052
22214
  }
22053
22215
 
22054
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hu.js
22216
+ // packages/sdk/node_modules/zod/v4/locales/hu.js
22055
22217
  var error17 = () => {
22056
22218
  const Sizable = {
22057
22219
  string: { unit: "karakter", verb: "legyen" },
@@ -22160,7 +22322,7 @@ function hu_default() {
22160
22322
  };
22161
22323
  }
22162
22324
 
22163
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hy.js
22325
+ // packages/sdk/node_modules/zod/v4/locales/hy.js
22164
22326
  function getArmenianPlural(count, one, many) {
22165
22327
  return Math.abs(count) === 1 ? one : many;
22166
22328
  }
@@ -22308,7 +22470,7 @@ function hy_default() {
22308
22470
  };
22309
22471
  }
22310
22472
 
22311
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/id.js
22473
+ // packages/sdk/node_modules/zod/v4/locales/id.js
22312
22474
  var error19 = () => {
22313
22475
  const Sizable = {
22314
22476
  string: { unit: "karakter", verb: "memiliki" },
@@ -22415,7 +22577,7 @@ function id_default() {
22415
22577
  };
22416
22578
  }
22417
22579
 
22418
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/is.js
22580
+ // packages/sdk/node_modules/zod/v4/locales/is.js
22419
22581
  var error20 = () => {
22420
22582
  const Sizable = {
22421
22583
  string: { unit: "stafi", verb: "a\xF0 hafa" },
@@ -22525,7 +22687,7 @@ function is_default() {
22525
22687
  };
22526
22688
  }
22527
22689
 
22528
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/it.js
22690
+ // packages/sdk/node_modules/zod/v4/locales/it.js
22529
22691
  var error21 = () => {
22530
22692
  const Sizable = {
22531
22693
  string: { unit: "caratteri", verb: "avere" },
@@ -22634,7 +22796,7 @@ function it_default() {
22634
22796
  };
22635
22797
  }
22636
22798
 
22637
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ja.js
22799
+ // packages/sdk/node_modules/zod/v4/locales/ja.js
22638
22800
  var error22 = () => {
22639
22801
  const Sizable = {
22640
22802
  string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
@@ -22742,7 +22904,7 @@ function ja_default() {
22742
22904
  };
22743
22905
  }
22744
22906
 
22745
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ka.js
22907
+ // packages/sdk/node_modules/zod/v4/locales/ka.js
22746
22908
  var error23 = () => {
22747
22909
  const Sizable = {
22748
22910
  string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
@@ -22855,7 +23017,7 @@ function ka_default() {
22855
23017
  };
22856
23018
  }
22857
23019
 
22858
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/km.js
23020
+ // packages/sdk/node_modules/zod/v4/locales/km.js
22859
23021
  var error24 = () => {
22860
23022
  const Sizable = {
22861
23023
  string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
@@ -22966,12 +23128,12 @@ function km_default() {
22966
23128
  };
22967
23129
  }
22968
23130
 
22969
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/kh.js
23131
+ // packages/sdk/node_modules/zod/v4/locales/kh.js
22970
23132
  function kh_default() {
22971
23133
  return km_default();
22972
23134
  }
22973
23135
 
22974
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ko.js
23136
+ // packages/sdk/node_modules/zod/v4/locales/ko.js
22975
23137
  var error25 = () => {
22976
23138
  const Sizable = {
22977
23139
  string: { unit: "\uBB38\uC790", verb: "to have" },
@@ -23083,7 +23245,7 @@ function ko_default() {
23083
23245
  };
23084
23246
  }
23085
23247
 
23086
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/lt.js
23248
+ // packages/sdk/node_modules/zod/v4/locales/lt.js
23087
23249
  var capitalizeFirstCharacter = (text) => {
23088
23250
  return text.charAt(0).toUpperCase() + text.slice(1);
23089
23251
  };
@@ -23287,7 +23449,7 @@ function lt_default() {
23287
23449
  };
23288
23450
  }
23289
23451
 
23290
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/mk.js
23452
+ // packages/sdk/node_modules/zod/v4/locales/mk.js
23291
23453
  var error27 = () => {
23292
23454
  const Sizable = {
23293
23455
  string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
@@ -23397,7 +23559,7 @@ function mk_default() {
23397
23559
  };
23398
23560
  }
23399
23561
 
23400
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ms.js
23562
+ // packages/sdk/node_modules/zod/v4/locales/ms.js
23401
23563
  var error28 = () => {
23402
23564
  const Sizable = {
23403
23565
  string: { unit: "aksara", verb: "mempunyai" },
@@ -23505,7 +23667,7 @@ function ms_default() {
23505
23667
  };
23506
23668
  }
23507
23669
 
23508
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/nl.js
23670
+ // packages/sdk/node_modules/zod/v4/locales/nl.js
23509
23671
  var error29 = () => {
23510
23672
  const Sizable = {
23511
23673
  string: { unit: "tekens", verb: "heeft" },
@@ -23616,7 +23778,7 @@ function nl_default() {
23616
23778
  };
23617
23779
  }
23618
23780
 
23619
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/no.js
23781
+ // packages/sdk/node_modules/zod/v4/locales/no.js
23620
23782
  var error30 = () => {
23621
23783
  const Sizable = {
23622
23784
  string: { unit: "tegn", verb: "\xE5 ha" },
@@ -23725,7 +23887,7 @@ function no_default() {
23725
23887
  };
23726
23888
  }
23727
23889
 
23728
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ota.js
23890
+ // packages/sdk/node_modules/zod/v4/locales/ota.js
23729
23891
  var error31 = () => {
23730
23892
  const Sizable = {
23731
23893
  string: { unit: "harf", verb: "olmal\u0131d\u0131r" },
@@ -23835,7 +23997,7 @@ function ota_default() {
23835
23997
  };
23836
23998
  }
23837
23999
 
23838
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ps.js
24000
+ // packages/sdk/node_modules/zod/v4/locales/ps.js
23839
24001
  var error32 = () => {
23840
24002
  const Sizable = {
23841
24003
  string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
@@ -23950,7 +24112,7 @@ function ps_default() {
23950
24112
  };
23951
24113
  }
23952
24114
 
23953
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/pl.js
24115
+ // packages/sdk/node_modules/zod/v4/locales/pl.js
23954
24116
  var error33 = () => {
23955
24117
  const Sizable = {
23956
24118
  string: { unit: "znak\xF3w", verb: "mie\u0107" },
@@ -24060,7 +24222,7 @@ function pl_default() {
24060
24222
  };
24061
24223
  }
24062
24224
 
24063
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/pt.js
24225
+ // packages/sdk/node_modules/zod/v4/locales/pt.js
24064
24226
  var error34 = () => {
24065
24227
  const Sizable = {
24066
24228
  string: { unit: "caracteres", verb: "ter" },
@@ -24169,7 +24331,7 @@ function pt_default() {
24169
24331
  };
24170
24332
  }
24171
24333
 
24172
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ru.js
24334
+ // packages/sdk/node_modules/zod/v4/locales/ru.js
24173
24335
  function getRussianPlural(count, one, few, many) {
24174
24336
  const absCount = Math.abs(count);
24175
24337
  const lastDigit = absCount % 10;
@@ -24326,7 +24488,7 @@ function ru_default() {
24326
24488
  };
24327
24489
  }
24328
24490
 
24329
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/sl.js
24491
+ // packages/sdk/node_modules/zod/v4/locales/sl.js
24330
24492
  var error36 = () => {
24331
24493
  const Sizable = {
24332
24494
  string: { unit: "znakov", verb: "imeti" },
@@ -24436,7 +24598,7 @@ function sl_default() {
24436
24598
  };
24437
24599
  }
24438
24600
 
24439
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/sv.js
24601
+ // packages/sdk/node_modules/zod/v4/locales/sv.js
24440
24602
  var error37 = () => {
24441
24603
  const Sizable = {
24442
24604
  string: { unit: "tecken", verb: "att ha" },
@@ -24547,7 +24709,7 @@ function sv_default() {
24547
24709
  };
24548
24710
  }
24549
24711
 
24550
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ta.js
24712
+ // packages/sdk/node_modules/zod/v4/locales/ta.js
24551
24713
  var error38 = () => {
24552
24714
  const Sizable = {
24553
24715
  string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" },
@@ -24658,7 +24820,7 @@ function ta_default() {
24658
24820
  };
24659
24821
  }
24660
24822
 
24661
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/th.js
24823
+ // packages/sdk/node_modules/zod/v4/locales/th.js
24662
24824
  var error39 = () => {
24663
24825
  const Sizable = {
24664
24826
  string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
@@ -24769,7 +24931,7 @@ function th_default() {
24769
24931
  };
24770
24932
  }
24771
24933
 
24772
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/tr.js
24934
+ // packages/sdk/node_modules/zod/v4/locales/tr.js
24773
24935
  var error40 = () => {
24774
24936
  const Sizable = {
24775
24937
  string: { unit: "karakter", verb: "olmal\u0131" },
@@ -24875,7 +25037,7 @@ function tr_default() {
24875
25037
  };
24876
25038
  }
24877
25039
 
24878
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/uk.js
25040
+ // packages/sdk/node_modules/zod/v4/locales/uk.js
24879
25041
  var error41 = () => {
24880
25042
  const Sizable = {
24881
25043
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
@@ -24984,12 +25146,12 @@ function uk_default() {
24984
25146
  };
24985
25147
  }
24986
25148
 
24987
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ua.js
25149
+ // packages/sdk/node_modules/zod/v4/locales/ua.js
24988
25150
  function ua_default() {
24989
25151
  return uk_default();
24990
25152
  }
24991
25153
 
24992
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ur.js
25154
+ // packages/sdk/node_modules/zod/v4/locales/ur.js
24993
25155
  var error42 = () => {
24994
25156
  const Sizable = {
24995
25157
  string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" },
@@ -25100,7 +25262,7 @@ function ur_default() {
25100
25262
  };
25101
25263
  }
25102
25264
 
25103
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/uz.js
25265
+ // packages/sdk/node_modules/zod/v4/locales/uz.js
25104
25266
  var error43 = () => {
25105
25267
  const Sizable = {
25106
25268
  string: { unit: "belgi", verb: "bo\u2018lishi kerak" },
@@ -25210,7 +25372,7 @@ function uz_default() {
25210
25372
  };
25211
25373
  }
25212
25374
 
25213
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/vi.js
25375
+ // packages/sdk/node_modules/zod/v4/locales/vi.js
25214
25376
  var error44 = () => {
25215
25377
  const Sizable = {
25216
25378
  string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" },
@@ -25319,7 +25481,7 @@ function vi_default() {
25319
25481
  };
25320
25482
  }
25321
25483
 
25322
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/zh-CN.js
25484
+ // packages/sdk/node_modules/zod/v4/locales/zh-CN.js
25323
25485
  var error45 = () => {
25324
25486
  const Sizable = {
25325
25487
  string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" },
@@ -25429,7 +25591,7 @@ function zh_CN_default() {
25429
25591
  };
25430
25592
  }
25431
25593
 
25432
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/zh-TW.js
25594
+ // packages/sdk/node_modules/zod/v4/locales/zh-TW.js
25433
25595
  var error46 = () => {
25434
25596
  const Sizable = {
25435
25597
  string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" },
@@ -25537,7 +25699,7 @@ function zh_TW_default() {
25537
25699
  };
25538
25700
  }
25539
25701
 
25540
- // node_modules/@relaycast/sdk/node_modules/zod/v4/locales/yo.js
25702
+ // packages/sdk/node_modules/zod/v4/locales/yo.js
25541
25703
  var error47 = () => {
25542
25704
  const Sizable = {
25543
25705
  string: { unit: "\xE0mi", verb: "n\xED" },
@@ -25645,7 +25807,7 @@ function yo_default() {
25645
25807
  };
25646
25808
  }
25647
25809
 
25648
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/registries.js
25810
+ // packages/sdk/node_modules/zod/v4/core/registries.js
25649
25811
  var _a;
25650
25812
  var $output = /* @__PURE__ */ Symbol("ZodOutput");
25651
25813
  var $input = /* @__PURE__ */ Symbol("ZodInput");
@@ -25695,7 +25857,7 @@ function registry() {
25695
25857
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
25696
25858
  var globalRegistry = globalThis.__zod_globalRegistry;
25697
25859
 
25698
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/api.js
25860
+ // packages/sdk/node_modules/zod/v4/core/api.js
25699
25861
  // @__NO_SIDE_EFFECTS__
25700
25862
  function _string(Class2, params) {
25701
25863
  return new Class2({
@@ -26734,7 +26896,7 @@ function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
26734
26896
  return inst;
26735
26897
  }
26736
26898
 
26737
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/to-json-schema.js
26899
+ // packages/sdk/node_modules/zod/v4/core/to-json-schema.js
26738
26900
  function initializeContext(params) {
26739
26901
  let target = params?.target ?? "draft-2020-12";
26740
26902
  if (target === "draft-4")
@@ -27086,7 +27248,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) =
27086
27248
  return finalize(ctx, schema);
27087
27249
  };
27088
27250
 
27089
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/json-schema-processors.js
27251
+ // packages/sdk/node_modules/zod/v4/core/json-schema-processors.js
27090
27252
  var formatMap = {
27091
27253
  guid: "uuid",
27092
27254
  url: "uri",
@@ -27637,7 +27799,7 @@ function toJSONSchema(input, params) {
27637
27799
  return finalize(ctx, input);
27638
27800
  }
27639
27801
 
27640
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/json-schema-generator.js
27802
+ // packages/sdk/node_modules/zod/v4/core/json-schema-generator.js
27641
27803
  var JSONSchemaGenerator = class {
27642
27804
  /** @deprecated Access via ctx instead */
27643
27805
  get metadataRegistry() {
@@ -27712,10 +27874,10 @@ var JSONSchemaGenerator = class {
27712
27874
  }
27713
27875
  };
27714
27876
 
27715
- // node_modules/@relaycast/sdk/node_modules/zod/v4/core/json-schema.js
27877
+ // packages/sdk/node_modules/zod/v4/core/json-schema.js
27716
27878
  var json_schema_exports = {};
27717
27879
 
27718
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.js
27880
+ // packages/sdk/node_modules/zod/v4/classic/schemas.js
27719
27881
  var schemas_exports2 = {};
27720
27882
  __export(schemas_exports2, {
27721
27883
  ZodAny: () => ZodAny2,
@@ -27884,7 +28046,7 @@ __export(schemas_exports2, {
27884
28046
  xor: () => xor
27885
28047
  });
27886
28048
 
27887
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/checks.js
28049
+ // packages/sdk/node_modules/zod/v4/classic/checks.js
27888
28050
  var checks_exports2 = {};
27889
28051
  __export(checks_exports2, {
27890
28052
  endsWith: () => _endsWith,
@@ -27918,7 +28080,7 @@ __export(checks_exports2, {
27918
28080
  uppercase: () => _uppercase
27919
28081
  });
27920
28082
 
27921
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/iso.js
28083
+ // packages/sdk/node_modules/zod/v4/classic/iso.js
27922
28084
  var iso_exports = {};
27923
28085
  __export(iso_exports, {
27924
28086
  ZodISODate: () => ZodISODate,
@@ -27959,7 +28121,7 @@ function duration2(params) {
27959
28121
  return _isoDuration(ZodISODuration, params);
27960
28122
  }
27961
28123
 
27962
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/errors.js
28124
+ // packages/sdk/node_modules/zod/v4/classic/errors.js
27963
28125
  var initializer2 = (inst, issues) => {
27964
28126
  $ZodError.init(inst, issues);
27965
28127
  inst.name = "ZodError";
@@ -27999,7 +28161,7 @@ var ZodRealError = $constructor("ZodError", initializer2, {
27999
28161
  Parent: Error
28000
28162
  });
28001
28163
 
28002
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/parse.js
28164
+ // packages/sdk/node_modules/zod/v4/classic/parse.js
28003
28165
  var parse2 = /* @__PURE__ */ _parse(ZodRealError);
28004
28166
  var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
28005
28167
  var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -28013,7 +28175,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
28013
28175
  var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
28014
28176
  var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
28015
28177
 
28016
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.js
28178
+ // packages/sdk/node_modules/zod/v4/classic/schemas.js
28017
28179
  var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
28018
28180
  $ZodType.init(inst, def);
28019
28181
  Object.assign(inst["~standard"], {
@@ -29092,7 +29254,7 @@ function preprocess(fn, schema) {
29092
29254
  return pipe(transform(fn), schema);
29093
29255
  }
29094
29256
 
29095
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/compat.js
29257
+ // packages/sdk/node_modules/zod/v4/classic/compat.js
29096
29258
  var ZodIssueCode2 = {
29097
29259
  invalid_type: "invalid_type",
29098
29260
  too_big: "too_big",
@@ -29118,7 +29280,7 @@ var ZodFirstPartyTypeKind2;
29118
29280
  /* @__PURE__ */ (function(ZodFirstPartyTypeKind3) {
29119
29281
  })(ZodFirstPartyTypeKind2 || (ZodFirstPartyTypeKind2 = {}));
29120
29282
 
29121
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/from-json-schema.js
29283
+ // packages/sdk/node_modules/zod/v4/classic/from-json-schema.js
29122
29284
  var z = {
29123
29285
  ...schemas_exports2,
29124
29286
  ...checks_exports2,
@@ -29592,7 +29754,7 @@ function fromJSONSchema(schema, params) {
29592
29754
  return convertSchema(schema, ctx);
29593
29755
  }
29594
29756
 
29595
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/coerce.js
29757
+ // packages/sdk/node_modules/zod/v4/classic/coerce.js
29596
29758
  var coerce_exports = {};
29597
29759
  __export(coerce_exports, {
29598
29760
  bigint: () => bigint3,
@@ -29617,10 +29779,10 @@ function date4(params) {
29617
29779
  return _coercedDate(ZodDate2, params);
29618
29780
  }
29619
29781
 
29620
- // node_modules/@relaycast/sdk/node_modules/zod/v4/classic/external.js
29782
+ // packages/sdk/node_modules/zod/v4/classic/external.js
29621
29783
  config(en_default2());
29622
29784
 
29623
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/workspace.js
29785
+ // packages/sdk/node_modules/@relaycast/types/dist/workspace.js
29624
29786
  var WorkspaceSchema = external_exports2.object({
29625
29787
  id: external_exports2.string(),
29626
29788
  name: external_exports2.string(),
@@ -29675,7 +29837,7 @@ var TokenRotateResponseSchema = external_exports2.object({
29675
29837
  token: external_exports2.string()
29676
29838
  });
29677
29839
 
29678
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/agent.js
29840
+ // packages/sdk/node_modules/@relaycast/types/dist/agent.js
29679
29841
  var AgentTypeSchema = external_exports2.enum(["agent", "human", "system"]);
29680
29842
  var AgentStatusSchema = external_exports2.enum(["online", "offline", "away"]);
29681
29843
  var AgentSchema = external_exports2.object({
@@ -29752,7 +29914,7 @@ var ReleaseAgentResponseSchema = external_exports2.object({
29752
29914
  reason: external_exports2.string().nullable()
29753
29915
  });
29754
29916
 
29755
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/channel.js
29917
+ // packages/sdk/node_modules/@relaycast/types/dist/channel.js
29756
29918
  var ChannelMemberInfoSchema = external_exports2.object({
29757
29919
  agent_id: external_exports2.string(),
29758
29920
  agent_name: external_exports2.string(),
@@ -29799,7 +29961,7 @@ var InviteChannelResponseSchema = external_exports2.object({
29799
29961
  agent: external_exports2.string()
29800
29962
  });
29801
29963
 
29802
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/file.js
29964
+ // packages/sdk/node_modules/@relaycast/types/dist/file.js
29803
29965
  var FileStatusSchema = external_exports2.enum(["pending", "complete", "deleted"]);
29804
29966
  var FileRecordSchema = external_exports2.object({
29805
29967
  id: external_exports2.string(),
@@ -29846,7 +30008,7 @@ var CompleteUploadResponseSchema = external_exports2.object({
29846
30008
  download_url: external_exports2.string()
29847
30009
  });
29848
30010
 
29849
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/reaction.js
30011
+ // packages/sdk/node_modules/@relaycast/types/dist/reaction.js
29850
30012
  var ReactionSchema = external_exports2.object({
29851
30013
  id: external_exports2.string(),
29852
30014
  message_id: external_exports2.string(),
@@ -29870,7 +30032,7 @@ var ReactionGroupSchema = external_exports2.object({
29870
30032
  agents: external_exports2.array(external_exports2.string())
29871
30033
  });
29872
30034
 
29873
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/message.js
30035
+ // packages/sdk/node_modules/@relaycast/types/dist/message.js
29874
30036
  var HeaderBlockSchema = external_exports2.object({
29875
30037
  type: external_exports2.literal("header"),
29876
30038
  text: external_exports2.string()
@@ -29960,7 +30122,7 @@ var SearchMessageResultSchema = external_exports2.object({
29960
30122
  relevance_score: external_exports2.number()
29961
30123
  });
29962
30124
 
29963
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/receipt.js
30125
+ // packages/sdk/node_modules/@relaycast/types/dist/receipt.js
29964
30126
  var ReadReceiptSchema = external_exports2.object({
29965
30127
  message_id: external_exports2.string(),
29966
30128
  agent_id: external_exports2.string(),
@@ -29977,7 +30139,7 @@ var ChannelReadStatusSchema = external_exports2.object({
29977
30139
  last_read_at: external_exports2.string().nullable()
29978
30140
  });
29979
30141
 
29980
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/dm.js
30142
+ // packages/sdk/node_modules/@relaycast/types/dist/dm.js
29981
30143
  var DmTypeSchema = external_exports2.enum(["1:1", "group"]);
29982
30144
  var DmConversationSchema = external_exports2.object({
29983
30145
  id: external_exports2.string(),
@@ -30049,7 +30211,7 @@ var GroupDmParticipantResponseSchema = external_exports2.object({
30049
30211
  already_member: external_exports2.boolean()
30050
30212
  });
30051
30213
 
30052
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/events.js
30214
+ // packages/sdk/node_modules/@relaycast/types/dist/events.js
30053
30215
  var SubscribeEventSchema = external_exports2.object({
30054
30216
  type: external_exports2.literal("subscribe"),
30055
30217
  channels: external_exports2.array(external_exports2.string())
@@ -30260,7 +30422,7 @@ var WsClientEventSchema = external_exports2.discriminatedUnion("type", [
30260
30422
  WsCloseEventSchema
30261
30423
  ]);
30262
30424
 
30263
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/api.js
30425
+ // packages/sdk/node_modules/@relaycast/types/dist/api.js
30264
30426
  var ApiErrorSchema = external_exports2.object({
30265
30427
  ok: external_exports2.literal(false),
30266
30428
  error: external_exports2.object({
@@ -30286,7 +30448,7 @@ var InboxResponseSchema = external_exports2.object({
30286
30448
  }))
30287
30449
  });
30288
30450
 
30289
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/webhook.js
30451
+ // packages/sdk/node_modules/@relaycast/types/dist/webhook.js
30290
30452
  var WebhookSchema = external_exports2.object({
30291
30453
  id: external_exports2.string(),
30292
30454
  name: external_exports2.string(),
@@ -30320,7 +30482,7 @@ var WebhookTriggerResponseSchema = external_exports2.object({
30320
30482
  created_at: external_exports2.string()
30321
30483
  });
30322
30484
 
30323
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/subscription.js
30485
+ // packages/sdk/node_modules/@relaycast/types/dist/subscription.js
30324
30486
  var SubscribableEventTypeSchema = external_exports2.enum([
30325
30487
  "message.created",
30326
30488
  "message.updated",
@@ -30368,7 +30530,7 @@ var CreateSubscriptionResponseSchema = external_exports2.object({
30368
30530
  created_at: external_exports2.string()
30369
30531
  });
30370
30532
 
30371
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/command.js
30533
+ // packages/sdk/node_modules/@relaycast/types/dist/command.js
30372
30534
  var CommandParameterSchema = external_exports2.object({
30373
30535
  name: external_exports2.string(),
30374
30536
  description: external_exports2.string().optional(),
@@ -30415,7 +30577,7 @@ var CommandInvocationSchema = external_exports2.object({
30415
30577
  created_at: external_exports2.string()
30416
30578
  });
30417
30579
 
30418
- // node_modules/@relaycast/sdk/node_modules/@relaycast/types/dist/telemetry.js
30580
+ // packages/sdk/node_modules/@relaycast/types/dist/telemetry.js
30419
30581
  var TELEMETRY_MAX_PROPERTIES = 64;
30420
30582
  var TELEMETRY_VALUE_MAX_LENGTH = 512;
30421
30583
  var telemetryString = (max) => external_exports2.string().trim().min(1).max(max);
@@ -30518,14 +30680,14 @@ var internalTelemetryEventSchema = telemetryEnvelopeBaseSchema.extend({
30518
30680
  event: telemetryEventSchema
30519
30681
  }).merge(telemetryOriginSchema);
30520
30682
 
30521
- // node_modules/@relaycast/sdk/dist/origin.js
30683
+ // packages/sdk/node_modules/@relaycast/sdk/dist/origin.js
30522
30684
  var SDK_ORIGIN = Object.freeze({
30523
30685
  surface: "sdk",
30524
30686
  client: "@relaycast/sdk",
30525
30687
  version: SDK_VERSION
30526
30688
  });
30527
30689
 
30528
- // node_modules/@relaycast/sdk/dist/casing.js
30690
+ // packages/sdk/node_modules/@relaycast/sdk/dist/casing.js
30529
30691
  function isPlainObject2(value) {
30530
30692
  if (Object.prototype.toString.call(value) !== "[object Object]")
30531
30693
  return false;
@@ -30568,7 +30730,7 @@ function decamelizeKey(key) {
30568
30730
  return toSnakeKey(key);
30569
30731
  }
30570
30732
 
30571
- // node_modules/@relaycast/sdk/dist/ws.js
30733
+ // packages/sdk/node_modules/@relaycast/sdk/dist/ws.js
30572
30734
  var INTERNAL_WS_ORIGIN = /* @__PURE__ */ Symbol("relaycast.internal.ws-origin");
30573
30735
  function readInternalWsOrigin(options) {
30574
30736
  return options[INTERNAL_WS_ORIGIN];
@@ -30832,7 +30994,7 @@ var WsClient = class {
30832
30994
  }
30833
30995
  };
30834
30996
 
30835
- // node_modules/@relaycast/sdk/dist/agent.js
30997
+ // packages/sdk/node_modules/@relaycast/sdk/dist/agent.js
30836
30998
  function stripHash(channel) {
30837
30999
  return channel.startsWith("#") ? channel.slice(1) : channel;
30838
31000
  }
@@ -31141,7 +31303,7 @@ var AgentClient = class {
31141
31303
  };
31142
31304
  };
31143
31305
 
31144
- // node_modules/@relaycast/sdk/dist/errors.js
31306
+ // packages/sdk/node_modules/@relaycast/sdk/dist/errors.js
31145
31307
  var RAW_CODE_MAP = {
31146
31308
  name_conflict: "name_conflict",
31147
31309
  agent_already_exists: "name_conflict",
@@ -31200,7 +31362,7 @@ function relayErrorFromApi(rawCode, message, statusCode) {
31200
31362
  return new RelayError(code, message, { statusCode, rawCode });
31201
31363
  }
31202
31364
 
31203
- // node_modules/@relaycast/sdk/dist/client.js
31365
+ // packages/sdk/node_modules/@relaycast/sdk/dist/client.js
31204
31366
  var INTERNAL_ORIGIN = /* @__PURE__ */ Symbol("relaycast.internal.origin");
31205
31367
  function readInternalOrigin(options) {
31206
31368
  return options[INTERNAL_ORIGIN];
@@ -31395,7 +31557,7 @@ var HttpClient = class _HttpClient {
31395
31557
  }
31396
31558
  };
31397
31559
 
31398
- // node_modules/@relaycast/sdk/dist/identity.js
31560
+ // packages/sdk/node_modules/@relaycast/sdk/dist/identity.js
31399
31561
  var COMPAT_EVENT_NAME = "relaycast.compatibility";
31400
31562
  var emittedCompatibilityEvents = /* @__PURE__ */ new Set();
31401
31563
  function emitCompatibilityTelemetry(event, metadata = {}) {
@@ -31418,7 +31580,7 @@ function isNameConflictError(err) {
31418
31580
  return err instanceof RelayError && err.code === "name_conflict";
31419
31581
  }
31420
31582
 
31421
- // node_modules/@relaycast/sdk/dist/relay.js
31583
+ // packages/sdk/node_modules/@relaycast/sdk/dist/relay.js
31422
31584
  var RelayCast = class {
31423
31585
  client;
31424
31586
  identityHint = null;
@@ -35819,7 +35981,7 @@ ${err.suggestion}`);
35819
35981
  }
35820
35982
  // ── Execution ───────────────────────────────────────────────────────────
35821
35983
  /** Execute a named workflow from a validated config. */
35822
- async execute(config2, workflowName, vars) {
35984
+ async execute(config2, workflowName, vars, executeOptions) {
35823
35985
  this.abortController = new AbortController();
35824
35986
  this.paused = false;
35825
35987
  const resolved = vars ? this.resolveVariables(config2, vars) : config2;
@@ -35876,6 +36038,37 @@ ${err.suggestion}`);
35876
36038
  await this.db.insertStep(stepRow);
35877
36039
  stepStates.set(step.name, { row: stepRow });
35878
36040
  }
36041
+ if (executeOptions?.startFrom) {
36042
+ const startFromName = executeOptions.startFrom;
36043
+ const stepNames = new Set(resolvedWorkflow.steps.map((s) => s.name));
36044
+ if (!stepNames.has(startFromName)) {
36045
+ throw new Error(`startFrom step "${startFromName}" not found in workflow. Available steps: ${[...stepNames].join(", ")}`);
36046
+ }
36047
+ const transitiveDeps = this.collectTransitiveDeps(startFromName, resolvedWorkflow.steps);
36048
+ const skippedCount = transitiveDeps.size;
36049
+ const cacheRunId = executeOptions.previousRunId ?? this.findMostRecentRunWithSteps(transitiveDeps);
36050
+ for (const depName of transitiveDeps) {
36051
+ const state = stepStates.get(depName);
36052
+ if (!state)
36053
+ continue;
36054
+ const cachedOutput = cacheRunId ? this.loadStepOutput(cacheRunId, depName) : void 0;
36055
+ if (!cachedOutput) {
36056
+ this.log(`[startFrom] No cached output for skipped step "${depName}" \u2014 using empty string`);
36057
+ }
36058
+ state.row.status = "completed";
36059
+ state.row.output = cachedOutput ?? "";
36060
+ state.row.completedAt = now;
36061
+ await this.db.updateStep(state.row.id, {
36062
+ status: "completed",
36063
+ output: state.row.output,
36064
+ completedAt: now,
36065
+ updatedAt: now
36066
+ });
36067
+ }
36068
+ if (skippedCount > 0) {
36069
+ this.log(`[startFrom] Skipping ${skippedCount} steps, starting from "${startFromName}"`);
36070
+ }
36071
+ }
35879
36072
  return this.runWorkflowCore({
35880
36073
  run,
35881
36074
  workflow: resolvedWorkflow,
@@ -38563,6 +38756,33 @@ DO NOT:
38563
38756
  }
38564
38757
  }
38565
38758
  }
38759
+ // ── startFrom dependency resolution ─────────────────────────────────
38760
+ /**
38761
+ * Walk the dependsOn graph backwards from a target step to collect ALL
38762
+ * transitive dependencies (i.e. every step that must complete before
38763
+ * the target step can run). The target step itself is NOT included.
38764
+ */
38765
+ collectTransitiveDeps(targetStep, steps) {
38766
+ const stepMap = /* @__PURE__ */ new Map();
38767
+ for (const s of steps)
38768
+ stepMap.set(s.name, s);
38769
+ const deps = /* @__PURE__ */ new Set();
38770
+ const queue = [...stepMap.get(targetStep)?.dependsOn ?? []];
38771
+ while (queue.length > 0) {
38772
+ const current = queue.shift();
38773
+ if (deps.has(current))
38774
+ continue;
38775
+ deps.add(current);
38776
+ const step = stepMap.get(current);
38777
+ if (step?.dependsOn) {
38778
+ for (const dep of step.dependsOn) {
38779
+ if (!deps.has(dep))
38780
+ queue.push(dep);
38781
+ }
38782
+ }
38783
+ }
38784
+ return deps;
38785
+ }
38566
38786
  // ── Control flow helpers ──────────────────────────────────────────────
38567
38787
  checkAborted() {
38568
38788
  if (this.abortController?.signal.aborted) {
@@ -38934,6 +39154,35 @@ ${excerpt}` : "";
38934
39154
  ${preview}
38935
39155
  \`\`\``, { stepName });
38936
39156
  }
39157
+ /** Scan .agent-relay/step-outputs/ for the most recent run directory containing the needed steps. */
39158
+ findMostRecentRunWithSteps(stepNames) {
39159
+ try {
39160
+ const baseDir = import_node_path8.default.join(this.cwd, ".agent-relay", "step-outputs");
39161
+ if (!(0, import_node_fs5.existsSync)(baseDir))
39162
+ return void 0;
39163
+ const entries = (0, import_node_fs5.readdirSync)(baseDir);
39164
+ let best;
39165
+ for (const entry of entries) {
39166
+ const dirPath = import_node_path8.default.join(baseDir, entry);
39167
+ try {
39168
+ const stat2 = (0, import_node_fs5.statSync)(dirPath);
39169
+ if (!stat2.isDirectory())
39170
+ continue;
39171
+ const hasAny = [...stepNames].some((name) => (0, import_node_fs5.existsSync)(import_node_path8.default.join(dirPath, `${name}.md`)));
39172
+ if (!hasAny)
39173
+ continue;
39174
+ if (!best || stat2.mtimeMs > best.mtime) {
39175
+ best = { name: entry, mtime: stat2.mtimeMs };
39176
+ }
39177
+ } catch {
39178
+ continue;
39179
+ }
39180
+ }
39181
+ return best?.name;
39182
+ } catch {
39183
+ return void 0;
39184
+ }
39185
+ }
38937
39186
  /** Load persisted step output from disk. */
38938
39187
  loadStepOutput(runId, stepName) {
38939
39188
  try {
@@ -39181,6 +39430,11 @@ var WorkflowBuilder = class {
39181
39430
  _agents = [];
39182
39431
  _steps = [];
39183
39432
  _errorHandling;
39433
+ _coordination;
39434
+ _state;
39435
+ _trajectories;
39436
+ _startFrom;
39437
+ _previousRunId;
39184
39438
  constructor(name) {
39185
39439
  this._name = name;
39186
39440
  }
@@ -39214,6 +39468,31 @@ var WorkflowBuilder = class {
39214
39468
  this._idleNudge = config2;
39215
39469
  return this;
39216
39470
  }
39471
+ /** Set workflow coordination settings (barriers, voting threshold, consensus strategy). */
39472
+ coordination(config2) {
39473
+ this._coordination = config2;
39474
+ return this;
39475
+ }
39476
+ /** Configure shared workflow state backend settings. */
39477
+ state(config2) {
39478
+ this._state = config2;
39479
+ return this;
39480
+ }
39481
+ /** Configure trajectory recording, or pass `false` to disable it. */
39482
+ trajectories(config2) {
39483
+ this._trajectories = config2;
39484
+ return this;
39485
+ }
39486
+ /** Start execution from a specific step, skipping all predecessor steps. */
39487
+ startFrom(stepName) {
39488
+ this._startFrom = stepName;
39489
+ return this;
39490
+ }
39491
+ /** Set the previous run ID whose cached step outputs should be used with startFrom. */
39492
+ previousRunId(id) {
39493
+ this._previousRunId = id;
39494
+ return this;
39495
+ }
39217
39496
  /** Add an agent definition. */
39218
39497
  agent(name, options) {
39219
39498
  const def = {
@@ -39250,25 +39529,56 @@ var WorkflowBuilder = class {
39250
39529
  step(name, options) {
39251
39530
  const step = { name };
39252
39531
  if ("type" in options && options.type === "deterministic") {
39532
+ if (!options.command) {
39533
+ throw new Error("deterministic steps must have a command");
39534
+ }
39535
+ if ("agent" in options || "task" in options) {
39536
+ throw new Error("deterministic steps must not have agent or task");
39537
+ }
39253
39538
  step.type = "deterministic";
39254
39539
  step.command = options.command;
39255
- if (options.failOnError !== void 0)
39256
- step.failOnError = options.failOnError;
39257
39540
  if (options.captureOutput !== void 0)
39258
39541
  step.captureOutput = options.captureOutput;
39542
+ if (options.failOnError !== void 0)
39543
+ step.failOnError = options.failOnError;
39544
+ if (options.dependsOn !== void 0)
39545
+ step.dependsOn = options.dependsOn;
39546
+ if (options.verification !== void 0)
39547
+ step.verification = options.verification;
39548
+ if (options.timeoutMs !== void 0)
39549
+ step.timeoutMs = options.timeoutMs;
39550
+ } else if ("type" in options && options.type === "worktree") {
39551
+ if ("agent" in options || "task" in options) {
39552
+ throw new Error("worktree steps must not have agent or task");
39553
+ }
39554
+ step.type = "worktree";
39555
+ step.branch = options.branch;
39556
+ if (options.baseBranch !== void 0)
39557
+ step.baseBranch = options.baseBranch;
39558
+ if (options.path !== void 0)
39559
+ step.path = options.path;
39560
+ if (options.createBranch !== void 0)
39561
+ step.createBranch = options.createBranch;
39562
+ if (options.dependsOn !== void 0)
39563
+ step.dependsOn = options.dependsOn;
39564
+ if (options.timeoutMs !== void 0)
39565
+ step.timeoutMs = options.timeoutMs;
39259
39566
  } else {
39260
39567
  const agentOpts = options;
39568
+ if (!agentOpts.agent || !agentOpts.task) {
39569
+ throw new Error("Agent steps must have both agent and task");
39570
+ }
39261
39571
  step.agent = agentOpts.agent;
39262
39572
  step.task = agentOpts.task;
39573
+ if (agentOpts.dependsOn !== void 0)
39574
+ step.dependsOn = agentOpts.dependsOn;
39263
39575
  if (agentOpts.verification !== void 0)
39264
39576
  step.verification = agentOpts.verification;
39577
+ if (agentOpts.timeoutMs !== void 0)
39578
+ step.timeoutMs = agentOpts.timeoutMs;
39265
39579
  if (agentOpts.retries !== void 0)
39266
39580
  step.retries = agentOpts.retries;
39267
39581
  }
39268
- if (options.dependsOn !== void 0)
39269
- step.dependsOn = options.dependsOn;
39270
- if (options.timeoutMs !== void 0)
39271
- step.timeoutMs = options.timeoutMs;
39272
39582
  this._steps.push(step);
39273
39583
  return this;
39274
39584
  }
@@ -39317,6 +39627,12 @@ var WorkflowBuilder = class {
39317
39627
  config2.swarm.idleNudge = this._idleNudge;
39318
39628
  if (this._errorHandling !== void 0)
39319
39629
  config2.errorHandling = this._errorHandling;
39630
+ if (this._coordination !== void 0)
39631
+ config2.coordination = this._coordination;
39632
+ if (this._state !== void 0)
39633
+ config2.state = this._state;
39634
+ if (this._trajectories !== void 0)
39635
+ config2.trajectories = this._trajectories;
39320
39636
  return config2;
39321
39637
  }
39322
39638
  /** Serialize the config to a YAML string. */
@@ -39339,7 +39655,10 @@ var WorkflowBuilder = class {
39339
39655
  if (options.onEvent) {
39340
39656
  runner.on(options.onEvent);
39341
39657
  }
39342
- return runner.execute(config2, options.workflow, options.vars);
39658
+ const startFrom = this._startFrom ?? options.startFrom;
39659
+ const previousRunId = this._previousRunId ?? options.previousRunId;
39660
+ const executeOptions = startFrom ? { startFrom, previousRunId } : void 0;
39661
+ return runner.execute(config2, options.workflow, options.vars, executeOptions);
39343
39662
  }
39344
39663
  };
39345
39664
  function workflow(name) {
@@ -43109,9 +43428,11 @@ init_dist();
43109
43428
  InMemoryAdapter,
43110
43429
  InMemoryWorkflowDb,
43111
43430
  JsonFileWorkflowDb,
43431
+ ModelMetadata,
43112
43432
  ModelOptions,
43113
43433
  Models,
43114
43434
  PROTOCOL_VERSION,
43435
+ ReasoningEfforts,
43115
43436
  RelayAdapter,
43116
43437
  RelayCast,
43117
43438
  RelayError,
@@ -43166,16 +43487,19 @@ init_dist();
43166
43487
  getCachedRelayPtyPath,
43167
43488
  getCompiledPatterns,
43168
43489
  getCustomStepsPath,
43490
+ getDefaultReasoningEffort,
43169
43491
  getGitRemoteUrl,
43170
43492
  getInboxPath,
43171
43493
  getLastSearchPaths,
43172
43494
  getLogs,
43173
43495
  getMemoryHooks,
43174
43496
  getModelCommandConfig,
43497
+ getModelMetadata,
43175
43498
  getPatternMetrics,
43176
43499
  getRepoFullName,
43177
43500
  getRepoFullNameFromPath,
43178
43501
  getSupportedPlatforms,
43502
+ getSupportedReasoningEfforts,
43179
43503
  getTrajectoryHooks,
43180
43504
  handleResponse,
43181
43505
  hasRelayPtyBinary,