agent-relay 2.3.4 → 2.3.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 (297) hide show
  1. package/README.md +1 -1
  2. package/dist/src/cli/index.js +124 -7
  3. package/dist/src/cli/index.js.map +1 -1
  4. package/package.json +20 -26
  5. package/packages/acp-bridge/package.json +2 -2
  6. package/packages/bridge/package.json +7 -7
  7. package/packages/config/package.json +2 -2
  8. package/packages/continuity/package.json +2 -2
  9. package/packages/daemon/package.json +12 -12
  10. package/packages/hooks/package.json +4 -4
  11. package/packages/mcp/package.json +5 -5
  12. package/packages/memory/package.json +2 -2
  13. package/packages/policy/package.json +2 -2
  14. package/packages/protocol/package.json +1 -1
  15. package/packages/resiliency/package.json +1 -1
  16. package/packages/sdk/dist/index.d.ts +1 -29
  17. package/packages/sdk/dist/index.d.ts.map +1 -1
  18. package/packages/sdk/dist/index.js +1 -38
  19. package/packages/sdk/dist/index.js.map +1 -1
  20. package/packages/sdk/package.json +4 -25
  21. package/packages/sdk/src/index.ts +1 -69
  22. package/packages/sdk-py/README.md +56 -0
  23. package/packages/sdk-py/pyproject.toml +23 -0
  24. package/packages/sdk-py/src/agent_relay/__init__.py +27 -0
  25. package/packages/sdk-py/src/agent_relay/builder.py +367 -0
  26. package/packages/sdk-py/src/agent_relay/types.py +92 -0
  27. package/packages/sdk-py/tests/__init__.py +0 -0
  28. package/packages/sdk-py/tests/test_builder.py +101 -0
  29. package/packages/sdk-ts/dist/index.d.ts +1 -0
  30. package/packages/sdk-ts/dist/index.d.ts.map +1 -1
  31. package/packages/sdk-ts/dist/index.js +1 -0
  32. package/packages/sdk-ts/dist/index.js.map +1 -1
  33. package/packages/sdk-ts/dist/workflows/barrier.d.ts +72 -0
  34. package/packages/sdk-ts/dist/workflows/barrier.d.ts.map +1 -0
  35. package/packages/sdk-ts/dist/workflows/barrier.js +162 -0
  36. package/packages/sdk-ts/dist/workflows/barrier.js.map +1 -0
  37. package/packages/sdk-ts/dist/workflows/builder.d.ts +101 -0
  38. package/packages/sdk-ts/dist/workflows/builder.d.ts.map +1 -0
  39. package/packages/sdk-ts/dist/workflows/builder.js +179 -0
  40. package/packages/sdk-ts/dist/workflows/builder.js.map +1 -0
  41. package/packages/sdk-ts/dist/workflows/cli.d.ts +10 -0
  42. package/packages/sdk-ts/dist/workflows/cli.d.ts.map +1 -0
  43. package/packages/sdk-ts/dist/workflows/cli.js +82 -0
  44. package/packages/sdk-ts/dist/workflows/cli.js.map +1 -0
  45. package/packages/sdk-ts/dist/workflows/coordinator.d.ts +68 -0
  46. package/packages/sdk-ts/dist/workflows/coordinator.d.ts.map +1 -0
  47. package/packages/sdk-ts/dist/workflows/coordinator.js +353 -0
  48. package/packages/sdk-ts/dist/workflows/coordinator.js.map +1 -0
  49. package/packages/sdk-ts/dist/workflows/index.d.ts +10 -0
  50. package/packages/sdk-ts/dist/workflows/index.d.ts.map +1 -0
  51. package/packages/sdk-ts/dist/workflows/index.js +10 -0
  52. package/packages/sdk-ts/dist/workflows/index.js.map +1 -0
  53. package/packages/sdk-ts/dist/workflows/memory-db.d.ts +17 -0
  54. package/packages/sdk-ts/dist/workflows/memory-db.d.ts.map +1 -0
  55. package/packages/sdk-ts/dist/workflows/memory-db.js +33 -0
  56. package/packages/sdk-ts/dist/workflows/memory-db.js.map +1 -0
  57. package/packages/sdk-ts/dist/workflows/run.d.ts +31 -0
  58. package/packages/sdk-ts/dist/workflows/run.d.ts.map +1 -0
  59. package/packages/sdk-ts/dist/workflows/run.js +24 -0
  60. package/packages/sdk-ts/dist/workflows/run.js.map +1 -0
  61. package/packages/sdk-ts/dist/workflows/runner.d.ts +119 -0
  62. package/packages/sdk-ts/dist/workflows/runner.d.ts.map +1 -0
  63. package/packages/sdk-ts/dist/workflows/runner.js +650 -0
  64. package/packages/sdk-ts/dist/workflows/runner.js.map +1 -0
  65. package/packages/sdk-ts/dist/workflows/state.d.ts +77 -0
  66. package/packages/sdk-ts/dist/workflows/state.d.ts.map +1 -0
  67. package/packages/sdk-ts/dist/workflows/state.js +140 -0
  68. package/packages/sdk-ts/dist/workflows/state.js.map +1 -0
  69. package/packages/sdk-ts/dist/workflows/templates.d.ts +47 -0
  70. package/packages/sdk-ts/dist/workflows/templates.d.ts.map +1 -0
  71. package/packages/sdk-ts/dist/workflows/templates.js +395 -0
  72. package/packages/sdk-ts/dist/workflows/templates.js.map +1 -0
  73. package/packages/sdk-ts/dist/workflows/types.d.ts +126 -0
  74. package/packages/sdk-ts/dist/workflows/types.d.ts.map +1 -0
  75. package/packages/sdk-ts/dist/workflows/types.js +8 -0
  76. package/packages/sdk-ts/dist/workflows/types.js.map +1 -0
  77. package/packages/sdk-ts/package.json +8 -2
  78. package/packages/sdk-ts/src/__tests__/error-scenarios.test.ts +682 -0
  79. package/packages/sdk-ts/src/__tests__/swarm-coordinator.test.ts +416 -0
  80. package/packages/sdk-ts/src/__tests__/workflow-runner.test.ts +333 -0
  81. package/packages/sdk-ts/src/index.ts +1 -0
  82. package/packages/sdk-ts/src/workflows/README.md +450 -0
  83. package/packages/sdk-ts/src/workflows/barrier.ts +254 -0
  84. package/packages/sdk-ts/src/workflows/builder.ts +241 -0
  85. package/packages/sdk-ts/src/workflows/builtin-templates/bug-fix.yaml +75 -0
  86. package/packages/sdk-ts/src/workflows/builtin-templates/code-review.yaml +82 -0
  87. package/packages/sdk-ts/src/workflows/builtin-templates/documentation.yaml +70 -0
  88. package/packages/sdk-ts/src/workflows/builtin-templates/feature-dev.yaml +76 -0
  89. package/packages/sdk-ts/src/workflows/builtin-templates/refactor.yaml +82 -0
  90. package/packages/sdk-ts/src/workflows/builtin-templates/security-audit.yaml +84 -0
  91. package/packages/sdk-ts/src/workflows/cli.ts +93 -0
  92. package/packages/sdk-ts/src/workflows/coordinator.ts +520 -0
  93. package/packages/sdk-ts/src/workflows/index.ts +9 -0
  94. package/packages/sdk-ts/src/workflows/memory-db.ts +39 -0
  95. package/packages/sdk-ts/src/workflows/run.ts +47 -0
  96. package/packages/sdk-ts/src/workflows/runner.ts +873 -0
  97. package/packages/sdk-ts/src/workflows/schema.json +321 -0
  98. package/packages/sdk-ts/src/workflows/state.ts +279 -0
  99. package/packages/sdk-ts/src/workflows/templates.ts +544 -0
  100. package/packages/sdk-ts/src/workflows/types.ts +178 -0
  101. package/packages/sdk-ts/tsconfig.json +6 -1
  102. package/packages/spawner/package.json +1 -1
  103. package/packages/state/package.json +1 -1
  104. package/packages/storage/package.json +2 -2
  105. package/packages/telemetry/package.json +1 -1
  106. package/packages/trajectory/package.json +2 -2
  107. package/packages/user-directory/package.json +2 -2
  108. package/packages/utils/package.json +3 -3
  109. package/packages/wrapper/package.json +5 -6
  110. package/packages/api-types/.trajectories/active/traj_xbsvuzogscey.json +0 -15
  111. package/packages/api-types/.trajectories/index.json +0 -12
  112. package/packages/api-types/dist/index.d.ts +0 -21
  113. package/packages/api-types/dist/index.d.ts.map +0 -1
  114. package/packages/api-types/dist/index.js +0 -22
  115. package/packages/api-types/dist/index.js.map +0 -1
  116. package/packages/api-types/dist/schemas/agent.d.ts +0 -259
  117. package/packages/api-types/dist/schemas/agent.d.ts.map +0 -1
  118. package/packages/api-types/dist/schemas/agent.js +0 -102
  119. package/packages/api-types/dist/schemas/agent.js.map +0 -1
  120. package/packages/api-types/dist/schemas/api.d.ts +0 -290
  121. package/packages/api-types/dist/schemas/api.d.ts.map +0 -1
  122. package/packages/api-types/dist/schemas/api.js +0 -162
  123. package/packages/api-types/dist/schemas/api.js.map +0 -1
  124. package/packages/api-types/dist/schemas/decision.d.ts +0 -230
  125. package/packages/api-types/dist/schemas/decision.d.ts.map +0 -1
  126. package/packages/api-types/dist/schemas/decision.js +0 -104
  127. package/packages/api-types/dist/schemas/decision.js.map +0 -1
  128. package/packages/api-types/dist/schemas/fleet.d.ts +0 -615
  129. package/packages/api-types/dist/schemas/fleet.d.ts.map +0 -1
  130. package/packages/api-types/dist/schemas/fleet.js +0 -71
  131. package/packages/api-types/dist/schemas/fleet.js.map +0 -1
  132. package/packages/api-types/dist/schemas/history.d.ts +0 -180
  133. package/packages/api-types/dist/schemas/history.d.ts.map +0 -1
  134. package/packages/api-types/dist/schemas/history.js +0 -72
  135. package/packages/api-types/dist/schemas/history.js.map +0 -1
  136. package/packages/api-types/dist/schemas/index.d.ts +0 -14
  137. package/packages/api-types/dist/schemas/index.d.ts.map +0 -1
  138. package/packages/api-types/dist/schemas/index.js +0 -22
  139. package/packages/api-types/dist/schemas/index.js.map +0 -1
  140. package/packages/api-types/dist/schemas/message.d.ts +0 -456
  141. package/packages/api-types/dist/schemas/message.d.ts.map +0 -1
  142. package/packages/api-types/dist/schemas/message.js +0 -88
  143. package/packages/api-types/dist/schemas/message.js.map +0 -1
  144. package/packages/api-types/dist/schemas/session.d.ts +0 -60
  145. package/packages/api-types/dist/schemas/session.d.ts.map +0 -1
  146. package/packages/api-types/dist/schemas/session.js +0 -36
  147. package/packages/api-types/dist/schemas/session.js.map +0 -1
  148. package/packages/api-types/dist/schemas/task.d.ts +0 -111
  149. package/packages/api-types/dist/schemas/task.d.ts.map +0 -1
  150. package/packages/api-types/dist/schemas/task.js +0 -64
  151. package/packages/api-types/dist/schemas/task.js.map +0 -1
  152. package/packages/api-types/package.json +0 -61
  153. package/packages/api-types/scripts/generate-openapi.ts +0 -106
  154. package/packages/api-types/src/index.ts +0 -22
  155. package/packages/api-types/src/schemas/agent.test.ts +0 -164
  156. package/packages/api-types/src/schemas/agent.ts +0 -110
  157. package/packages/api-types/src/schemas/api.test.ts +0 -372
  158. package/packages/api-types/src/schemas/api.ts +0 -194
  159. package/packages/api-types/src/schemas/decision.test.ts +0 -324
  160. package/packages/api-types/src/schemas/decision.ts +0 -136
  161. package/packages/api-types/src/schemas/fleet.test.ts +0 -212
  162. package/packages/api-types/src/schemas/fleet.ts +0 -83
  163. package/packages/api-types/src/schemas/history.test.ts +0 -242
  164. package/packages/api-types/src/schemas/history.ts +0 -84
  165. package/packages/api-types/src/schemas/index.ts +0 -148
  166. package/packages/api-types/src/schemas/message.test.ts +0 -192
  167. package/packages/api-types/src/schemas/message.ts +0 -98
  168. package/packages/api-types/src/schemas/session.test.ts +0 -104
  169. package/packages/api-types/src/schemas/session.ts +0 -40
  170. package/packages/api-types/src/schemas/task.test.ts +0 -192
  171. package/packages/api-types/src/schemas/task.ts +0 -78
  172. package/packages/api-types/tsconfig.json +0 -19
  173. package/packages/api-types/vitest.config.ts +0 -9
  174. package/packages/benchmark/README.md +0 -200
  175. package/packages/benchmark/datasets/coding-tasks.yaml +0 -127
  176. package/packages/benchmark/datasets/coordination-tasks.yaml +0 -122
  177. package/packages/benchmark/datasets/quick-test.yaml +0 -20
  178. package/packages/benchmark/dist/benchmark.d.ts +0 -47
  179. package/packages/benchmark/dist/benchmark.d.ts.map +0 -1
  180. package/packages/benchmark/dist/benchmark.js +0 -224
  181. package/packages/benchmark/dist/benchmark.js.map +0 -1
  182. package/packages/benchmark/dist/cli.d.ts +0 -8
  183. package/packages/benchmark/dist/cli.d.ts.map +0 -1
  184. package/packages/benchmark/dist/cli.js +0 -185
  185. package/packages/benchmark/dist/cli.js.map +0 -1
  186. package/packages/benchmark/dist/harbor.d.ts +0 -53
  187. package/packages/benchmark/dist/harbor.d.ts.map +0 -1
  188. package/packages/benchmark/dist/harbor.js +0 -127
  189. package/packages/benchmark/dist/harbor.js.map +0 -1
  190. package/packages/benchmark/dist/index.d.ts +0 -48
  191. package/packages/benchmark/dist/index.d.ts.map +0 -1
  192. package/packages/benchmark/dist/index.js +0 -50
  193. package/packages/benchmark/dist/index.js.map +0 -1
  194. package/packages/benchmark/dist/runners/base.d.ts +0 -63
  195. package/packages/benchmark/dist/runners/base.d.ts.map +0 -1
  196. package/packages/benchmark/dist/runners/base.js +0 -156
  197. package/packages/benchmark/dist/runners/base.js.map +0 -1
  198. package/packages/benchmark/dist/runners/index.d.ts +0 -10
  199. package/packages/benchmark/dist/runners/index.d.ts.map +0 -1
  200. package/packages/benchmark/dist/runners/index.js +0 -10
  201. package/packages/benchmark/dist/runners/index.js.map +0 -1
  202. package/packages/benchmark/dist/runners/single.d.ts +0 -19
  203. package/packages/benchmark/dist/runners/single.d.ts.map +0 -1
  204. package/packages/benchmark/dist/runners/single.js +0 -111
  205. package/packages/benchmark/dist/runners/single.js.map +0 -1
  206. package/packages/benchmark/dist/runners/subagent.d.ts +0 -32
  207. package/packages/benchmark/dist/runners/subagent.d.ts.map +0 -1
  208. package/packages/benchmark/dist/runners/subagent.js +0 -212
  209. package/packages/benchmark/dist/runners/subagent.js.map +0 -1
  210. package/packages/benchmark/dist/runners/swarm.d.ts +0 -36
  211. package/packages/benchmark/dist/runners/swarm.d.ts.map +0 -1
  212. package/packages/benchmark/dist/runners/swarm.js +0 -273
  213. package/packages/benchmark/dist/runners/swarm.js.map +0 -1
  214. package/packages/benchmark/dist/types.d.ts +0 -178
  215. package/packages/benchmark/dist/types.d.ts.map +0 -1
  216. package/packages/benchmark/dist/types.js +0 -16
  217. package/packages/benchmark/dist/types.js.map +0 -1
  218. package/packages/benchmark/package.json +0 -80
  219. package/packages/benchmark/src/benchmark.ts +0 -298
  220. package/packages/benchmark/src/cli.ts +0 -240
  221. package/packages/benchmark/src/harbor.ts +0 -170
  222. package/packages/benchmark/src/index.ts +0 -73
  223. package/packages/benchmark/src/runners/base.ts +0 -205
  224. package/packages/benchmark/src/runners/index.ts +0 -10
  225. package/packages/benchmark/src/runners/single.ts +0 -121
  226. package/packages/benchmark/src/runners/subagent.ts +0 -240
  227. package/packages/benchmark/src/runners/swarm.ts +0 -326
  228. package/packages/benchmark/src/types.ts +0 -205
  229. package/packages/benchmark/tsconfig.json +0 -20
  230. package/packages/cli-tester/README.md +0 -277
  231. package/packages/cli-tester/dist/index.d.ts +0 -21
  232. package/packages/cli-tester/dist/index.d.ts.map +0 -1
  233. package/packages/cli-tester/dist/index.js +0 -21
  234. package/packages/cli-tester/dist/index.js.map +0 -1
  235. package/packages/cli-tester/dist/utils/credential-check.d.ts +0 -56
  236. package/packages/cli-tester/dist/utils/credential-check.d.ts.map +0 -1
  237. package/packages/cli-tester/dist/utils/credential-check.js +0 -230
  238. package/packages/cli-tester/dist/utils/credential-check.js.map +0 -1
  239. package/packages/cli-tester/dist/utils/socket-client.d.ts +0 -76
  240. package/packages/cli-tester/dist/utils/socket-client.d.ts.map +0 -1
  241. package/packages/cli-tester/dist/utils/socket-client.js +0 -153
  242. package/packages/cli-tester/dist/utils/socket-client.js.map +0 -1
  243. package/packages/cli-tester/docker/Dockerfile +0 -61
  244. package/packages/cli-tester/docker/docker-compose.yml +0 -71
  245. package/packages/cli-tester/docker/entrypoint.sh +0 -58
  246. package/packages/cli-tester/package.json +0 -32
  247. package/packages/cli-tester/scripts/clear-auth.sh +0 -101
  248. package/packages/cli-tester/scripts/inject-message.sh +0 -42
  249. package/packages/cli-tester/scripts/start.sh +0 -71
  250. package/packages/cli-tester/scripts/test-cli.sh +0 -56
  251. package/packages/cli-tester/scripts/test-full-spawn.sh +0 -238
  252. package/packages/cli-tester/scripts/test-registration.sh +0 -182
  253. package/packages/cli-tester/scripts/test-setup-flow.sh +0 -202
  254. package/packages/cli-tester/scripts/test-spawn.sh +0 -140
  255. package/packages/cli-tester/scripts/test-with-daemon.sh +0 -247
  256. package/packages/cli-tester/scripts/verify-auth.sh +0 -112
  257. package/packages/cli-tester/src/index.ts +0 -40
  258. package/packages/cli-tester/src/utils/credential-check.ts +0 -284
  259. package/packages/cli-tester/src/utils/socket-client.ts +0 -211
  260. package/packages/cli-tester/tests/credential-check.test.ts +0 -56
  261. package/packages/cli-tester/tsconfig.json +0 -11
  262. package/packages/sdk/dist/browser-client.d.ts +0 -212
  263. package/packages/sdk/dist/browser-client.d.ts.map +0 -1
  264. package/packages/sdk/dist/browser-client.js +0 -750
  265. package/packages/sdk/dist/browser-client.js.map +0 -1
  266. package/packages/sdk/dist/browser-framing.d.ts +0 -46
  267. package/packages/sdk/dist/browser-framing.d.ts.map +0 -1
  268. package/packages/sdk/dist/browser-framing.js +0 -122
  269. package/packages/sdk/dist/browser-framing.js.map +0 -1
  270. package/packages/sdk/dist/standalone.d.ts +0 -89
  271. package/packages/sdk/dist/standalone.d.ts.map +0 -1
  272. package/packages/sdk/dist/standalone.js +0 -131
  273. package/packages/sdk/dist/standalone.js.map +0 -1
  274. package/packages/sdk/dist/transports/index.d.ts +0 -92
  275. package/packages/sdk/dist/transports/index.d.ts.map +0 -1
  276. package/packages/sdk/dist/transports/index.js +0 -129
  277. package/packages/sdk/dist/transports/index.js.map +0 -1
  278. package/packages/sdk/dist/transports/socket-transport.d.ts +0 -30
  279. package/packages/sdk/dist/transports/socket-transport.d.ts.map +0 -1
  280. package/packages/sdk/dist/transports/socket-transport.js +0 -94
  281. package/packages/sdk/dist/transports/socket-transport.js.map +0 -1
  282. package/packages/sdk/dist/transports/types.d.ts +0 -69
  283. package/packages/sdk/dist/transports/types.d.ts.map +0 -1
  284. package/packages/sdk/dist/transports/types.js +0 -10
  285. package/packages/sdk/dist/transports/types.js.map +0 -1
  286. package/packages/sdk/dist/transports/websocket-transport.d.ts +0 -55
  287. package/packages/sdk/dist/transports/websocket-transport.d.ts.map +0 -1
  288. package/packages/sdk/dist/transports/websocket-transport.js +0 -180
  289. package/packages/sdk/dist/transports/websocket-transport.js.map +0 -1
  290. package/packages/sdk/src/browser-client.ts +0 -985
  291. package/packages/sdk/src/browser-framing.test.ts +0 -115
  292. package/packages/sdk/src/browser-framing.ts +0 -150
  293. package/packages/sdk/src/standalone.ts +0 -183
  294. package/packages/sdk/src/transports/index.ts +0 -197
  295. package/packages/sdk/src/transports/socket-transport.ts +0 -115
  296. package/packages/sdk/src/transports/types.ts +0 -77
  297. package/packages/sdk/src/transports/websocket-transport.ts +0 -245
package/README.md CHANGED
@@ -194,7 +194,7 @@ agent-relay is a messaging layer, not a framework. It works with any CLI tool, a
194
194
 
195
195
  ## License
196
196
 
197
- Apache-2.0 — Copyright 2025 Agent Workforce Incorporated
197
+ Apache-2.0 — Copyright 2026 Agent Workforce Incorporated
198
198
 
199
199
  ---
200
200
 
@@ -33,7 +33,7 @@ import path from 'node:path';
33
33
  import { homedir, tmpdir } from 'node:os';
34
34
  import readline from 'node:readline';
35
35
  import { promisify } from 'node:util';
36
- import { exec, execSync, spawn as spawnProcess } from 'node:child_process';
36
+ import { exec, execFileSync, execSync, spawn as spawnProcess } from 'node:child_process';
37
37
  import { fileURLToPath } from 'node:url';
38
38
  /**
39
39
  * Find the dashboard binary if installed as standalone.
@@ -3642,6 +3642,7 @@ program
3642
3642
  .option('--token <token>', 'One-time CLI token from dashboard (skips cloud config requirement)')
3643
3643
  .option('--cloud-url <url>', 'Cloud API URL (overrides linked config and AGENT_RELAY_CLOUD_URL)')
3644
3644
  .option('--timeout <seconds>', 'Timeout in seconds (default: 300)', '300')
3645
+ .option('--use-auth-broker', 'Use dedicated auth broker instead of workspace SSH (for Daytona/sandboxed environments)')
3645
3646
  .action(async (providerArg, options) => {
3646
3647
  const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
3647
3648
  const green = (s) => `\x1b[32m${s}\x1b[0m`;
@@ -3675,6 +3676,7 @@ program
3675
3676
  console.log(` ${cyan('npx agent-relay auth claude --workspace=<ID>')}`);
3676
3677
  console.log(` ${cyan('npx agent-relay auth codex --workspace=<ID>')}`);
3677
3678
  console.log(` ${cyan('npx agent-relay auth gemini --workspace=<ID>')}`);
3679
+ console.log(` ${cyan('npx agent-relay auth claude --use-auth-broker')} ${dim('(for Daytona/sandboxed environments)')}`);
3678
3680
  console.log('');
3679
3681
  console.log('Supported provider ids:');
3680
3682
  console.log(` ${known.join(', ')}`);
@@ -3727,13 +3729,19 @@ program
3727
3729
  const CLOUD_URL = (options.cloudUrl || process.env.AGENT_RELAY_CLOUD_URL || cloudConfig.cloudUrl || 'https://agent-relay.com')
3728
3730
  .replace(/\/$/, '');
3729
3731
  const requestedWorkspaceId = options.workspace || process.env.WORKSPACE_ID;
3732
+ const useAuthBroker = options.useAuthBroker ?? false;
3730
3733
  console.log('');
3731
3734
  console.log(cyan('═══════════════════════════════════════════════════'));
3732
3735
  console.log(cyan(' Provider Authentication (SSH)'));
3733
3736
  console.log(cyan('═══════════════════════════════════════════════════'));
3734
3737
  console.log('');
3735
3738
  console.log(`Provider: ${providerConfig.displayName} (${provider})`);
3736
- console.log(`Workspace: ${requestedWorkspaceId ? `${requestedWorkspaceId.slice(0, 8)}...` : '(default)'}`);
3739
+ if (useAuthBroker) {
3740
+ console.log(`Target: ${cyan('Auth Broker')} (dedicated authentication instance)`);
3741
+ }
3742
+ else {
3743
+ console.log(`Workspace: ${requestedWorkspaceId ? `${requestedWorkspaceId.slice(0, 8)}...` : '(default)'}`);
3744
+ }
3737
3745
  console.log(dim(`Cloud: ${CLOUD_URL}`));
3738
3746
  console.log('');
3739
3747
  // Step 1: Request SSH session info from cloud.
@@ -3751,6 +3759,7 @@ program
3751
3759
  provider,
3752
3760
  workspaceId: requestedWorkspaceId,
3753
3761
  ...(cliToken && { token: cliToken }),
3762
+ ...(useAuthBroker && { useAuthBroker: true }),
3754
3763
  }),
3755
3764
  });
3756
3765
  if (!response.ok) {
@@ -3792,7 +3801,10 @@ program
3792
3801
  ? `mkdir -p /data/users/${shellEscape(start.userId)} && HOME=/data/users/${shellEscape(start.userId)} PATH=/home/workspace/.local/bin:$PATH ${baseCommand}`
3793
3802
  : `PATH=/home/workspace/.local/bin:$PATH ${baseCommand}`;
3794
3803
  console.log(green('✓ SSH session created'));
3795
- if (start.workspaceName) {
3804
+ if (useAuthBroker) {
3805
+ console.log(`Target: ${cyan('Auth Broker')}`);
3806
+ }
3807
+ else if (start.workspaceName) {
3796
3808
  console.log(`Workspace: ${cyan(start.workspaceName)} (${start.workspaceId.slice(0, 8)}...)`);
3797
3809
  }
3798
3810
  else {
@@ -3803,8 +3815,9 @@ program
3803
3815
  console.log('');
3804
3816
  const TUNNEL_PORT = 1455;
3805
3817
  const ssh2 = await loadSSH2();
3818
+ const tunnelTarget = useAuthBroker ? 'auth-broker' : 'workspace';
3806
3819
  console.log(yellow('Connecting via SSH...'));
3807
- console.log(dim(` Tunnel: localhost:${TUNNEL_PORT} → workspace:${TUNNEL_PORT}`));
3820
+ console.log(dim(` Tunnel: localhost:${TUNNEL_PORT} → ${tunnelTarget}:${TUNNEL_PORT}`));
3808
3821
  console.log(dim(` Running: ${remoteCommand}`));
3809
3822
  console.log('');
3810
3823
  // Get success/error patterns from CLI_AUTH_CONFIG for auto-detection
@@ -4151,8 +4164,14 @@ program
4151
4164
  // Exit code 127 = command not found
4152
4165
  if (execResult?.exitCode === 127) {
4153
4166
  console.log('');
4154
- console.log(yellow(`The ${providerConfig.displayName} CLI ("${providerConfig.command}") is not installed on this workspace.`));
4155
- console.log(dim('Ask your workspace administrator to install it, or check the workspace Dockerfile.'));
4167
+ if (useAuthBroker) {
4168
+ console.log(yellow(`The ${providerConfig.displayName} CLI ("${providerConfig.command}") is not installed on the auth broker.`));
4169
+ console.log(dim('This is unexpected. Please report this issue.'));
4170
+ }
4171
+ else {
4172
+ console.log(yellow(`The ${providerConfig.displayName} CLI ("${providerConfig.command}") is not installed on this workspace.`));
4173
+ console.log(dim('Ask your workspace administrator to install it, or check the workspace Dockerfile.'));
4174
+ }
4156
4175
  }
4157
4176
  process.exit(1);
4158
4177
  }
@@ -4161,7 +4180,13 @@ program
4161
4180
  console.log(green(' Authentication Complete!'));
4162
4181
  console.log(green('═══════════════════════════════════════════════════'));
4163
4182
  console.log('');
4164
- console.log(`${providerConfig.displayName} is now connected to workspace ${start.workspaceId.slice(0, 8)}...`);
4183
+ if (useAuthBroker) {
4184
+ console.log(`${providerConfig.displayName} credentials are now stored in your account.`);
4185
+ console.log(dim('Your Daytona/sandboxed workspaces will use these credentials automatically.'));
4186
+ }
4187
+ else {
4188
+ console.log(`${providerConfig.displayName} is now connected to workspace ${start.workspaceId.slice(0, 8)}...`);
4189
+ }
4165
4190
  console.log('');
4166
4191
  });
4167
4192
  // ============================================================================
@@ -4820,5 +4845,97 @@ program
4820
4845
  process.exit(1);
4821
4846
  }
4822
4847
  });
4848
+ // run - Execute a workflow file (YAML, TypeScript, or Python)
4849
+ import { runWorkflow } from '@agent-relay/broker-sdk/workflows';
4850
+ function logWorkflowEvent(event) {
4851
+ const prefix = event.type.startsWith('run:') ? '[run]' : '[step]';
4852
+ const name = 'stepName' in event ? `${event.stepName} ` : '';
4853
+ const status = event.type.split(':')[1];
4854
+ const detail = 'error' in event ? `: ${event.error}` : '';
4855
+ console.log(`${prefix} ${name}${status}${detail}`);
4856
+ }
4857
+ function runScriptFile(filePath) {
4858
+ const resolved = path.resolve(filePath);
4859
+ if (!fs.existsSync(resolved)) {
4860
+ throw new Error(`File not found: ${resolved}`);
4861
+ }
4862
+ const ext = path.extname(resolved).toLowerCase();
4863
+ if (ext === '.ts' || ext === '.tsx') {
4864
+ // Try tsx first, then ts-node, then npx tsx
4865
+ const runners = ['tsx', 'ts-node'];
4866
+ for (const runner of runners) {
4867
+ try {
4868
+ execFileSync(runner, [resolved], { stdio: 'inherit' });
4869
+ return;
4870
+ }
4871
+ catch (err) {
4872
+ // Only try next runner if this one isn't found (ENOENT)
4873
+ // Re-throw if the runner exists but the script failed
4874
+ if (err?.code !== 'ENOENT') {
4875
+ throw err;
4876
+ }
4877
+ }
4878
+ }
4879
+ // Fallback to npx tsx
4880
+ execFileSync('npx', ['tsx', resolved], { stdio: 'inherit' });
4881
+ }
4882
+ else if (ext === '.py') {
4883
+ // Try python3 first, then python
4884
+ const runners = ['python3', 'python'];
4885
+ for (const runner of runners) {
4886
+ try {
4887
+ execFileSync(runner, [resolved], { stdio: 'inherit' });
4888
+ return;
4889
+ }
4890
+ catch (err) {
4891
+ // Only try next runner if this one isn't found (ENOENT)
4892
+ // Re-throw if the runner exists but the script failed
4893
+ if (err?.code !== 'ENOENT') {
4894
+ throw err;
4895
+ }
4896
+ }
4897
+ }
4898
+ throw new Error('Python not found. Install Python 3.10+ to run .py workflow files.');
4899
+ }
4900
+ else {
4901
+ throw new Error(`Unsupported file type: ${ext}. Use .yaml, .yml, .ts, or .py`);
4902
+ }
4903
+ }
4904
+ program
4905
+ .command('run')
4906
+ .description('Run a workflow file (YAML, TypeScript, or Python)')
4907
+ .argument('<file>', 'Path to workflow file (.yaml, .yml, .ts, or .py)')
4908
+ .option('-w, --workflow <name>', 'Run a specific workflow by name (default: first, YAML only)')
4909
+ .action(async (filePath, options) => {
4910
+ try {
4911
+ const ext = path.extname(filePath).toLowerCase();
4912
+ if (ext === '.yaml' || ext === '.yml') {
4913
+ console.log(`Running workflow from ${filePath}...`);
4914
+ const result = await runWorkflow(filePath, {
4915
+ workflow: options.workflow,
4916
+ onEvent: logWorkflowEvent,
4917
+ });
4918
+ if (result.status === 'completed') {
4919
+ console.log('\nWorkflow completed successfully.');
4920
+ }
4921
+ else {
4922
+ console.error(`\nWorkflow ${result.status}${result.error ? `: ${result.error}` : ''}`);
4923
+ process.exit(1);
4924
+ }
4925
+ }
4926
+ else if (ext === '.ts' || ext === '.tsx' || ext === '.py') {
4927
+ console.log(`Running workflow script ${filePath}...`);
4928
+ runScriptFile(filePath);
4929
+ }
4930
+ else {
4931
+ console.error(`Unsupported file type: ${ext}. Use .yaml, .yml, .ts, or .py`);
4932
+ process.exit(1);
4933
+ }
4934
+ }
4935
+ catch (err) {
4936
+ console.error(`Error: ${err.message}`);
4937
+ process.exit(1);
4938
+ }
4939
+ });
4823
4940
  program.parse();
4824
4941
  //# sourceMappingURL=index.js.map