@agent-relay/sdk 7.1.1 → 8.0.1

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 (581) hide show
  1. package/README.md +177 -143
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/bin/agent-relay-broker-win32-x64.exe +0 -0
  7. package/dist/actions/errors.d.ts +18 -0
  8. package/dist/actions/errors.d.ts.map +1 -0
  9. package/dist/actions/errors.js +39 -0
  10. package/dist/actions/errors.js.map +1 -0
  11. package/dist/actions/index.d.ts +5 -0
  12. package/dist/actions/index.d.ts.map +1 -0
  13. package/dist/actions/index.js +5 -0
  14. package/dist/actions/index.js.map +1 -0
  15. package/dist/actions/json-schema-lite.d.ts +13 -0
  16. package/dist/actions/json-schema-lite.d.ts.map +1 -0
  17. package/dist/actions/json-schema-lite.js +322 -0
  18. package/dist/actions/json-schema-lite.js.map +1 -0
  19. package/dist/actions/registry.d.ts +20 -0
  20. package/dist/actions/registry.d.ts.map +1 -0
  21. package/dist/actions/registry.js +267 -0
  22. package/dist/actions/registry.js.map +1 -0
  23. package/dist/actions/types.d.ts +177 -0
  24. package/dist/actions/types.d.ts.map +1 -0
  25. package/dist/{provisioner → actions}/types.js.map +1 -1
  26. package/dist/agent-relay.d.ts +86 -0
  27. package/dist/agent-relay.d.ts.map +1 -0
  28. package/dist/agent-relay.js +197 -0
  29. package/dist/agent-relay.js.map +1 -0
  30. package/dist/capabilities.d.ts +6 -0
  31. package/dist/capabilities.d.ts.map +1 -0
  32. package/dist/capabilities.js +9 -0
  33. package/dist/capabilities.js.map +1 -0
  34. package/dist/delivery/index.d.ts +4 -0
  35. package/dist/delivery/index.d.ts.map +1 -0
  36. package/dist/delivery/index.js +4 -0
  37. package/dist/delivery/index.js.map +1 -0
  38. package/dist/delivery/runner.d.ts +26 -0
  39. package/dist/delivery/runner.d.ts.map +1 -0
  40. package/dist/delivery/runner.js +177 -0
  41. package/dist/delivery/runner.js.map +1 -0
  42. package/dist/delivery/types.d.ts +45 -0
  43. package/dist/delivery/types.d.ts.map +1 -0
  44. package/dist/delivery/types.js +2 -0
  45. package/dist/delivery/types.js.map +1 -0
  46. package/dist/facade.d.ts +151 -0
  47. package/dist/facade.d.ts.map +1 -0
  48. package/dist/facade.js +280 -0
  49. package/dist/facade.js.map +1 -0
  50. package/dist/index.d.ts +9 -25
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +9 -23
  53. package/dist/index.js.map +1 -1
  54. package/dist/listeners.d.ts +162 -0
  55. package/dist/listeners.d.ts.map +1 -0
  56. package/dist/listeners.js +297 -0
  57. package/dist/listeners.js.map +1 -0
  58. package/dist/messaging/index.d.ts +4 -0
  59. package/dist/messaging/index.d.ts.map +1 -0
  60. package/dist/messaging/index.js +4 -0
  61. package/dist/messaging/index.js.map +1 -0
  62. package/dist/messaging/normalize.d.ts +29 -0
  63. package/dist/messaging/normalize.d.ts.map +1 -0
  64. package/dist/messaging/normalize.js +602 -0
  65. package/dist/messaging/normalize.js.map +1 -0
  66. package/dist/messaging/relaycast.d.ts +270 -0
  67. package/dist/messaging/relaycast.d.ts.map +1 -0
  68. package/dist/messaging/relaycast.js +559 -0
  69. package/dist/messaging/relaycast.js.map +1 -0
  70. package/dist/messaging/types.d.ts +672 -0
  71. package/dist/messaging/types.d.ts.map +1 -0
  72. package/dist/messaging/types.js +2 -0
  73. package/dist/messaging/types.js.map +1 -0
  74. package/dist/relaycast-errors.d.ts +39 -0
  75. package/dist/relaycast-errors.d.ts.map +1 -0
  76. package/dist/relaycast-errors.js +111 -0
  77. package/dist/relaycast-errors.js.map +1 -0
  78. package/dist/session/index.d.ts +58 -0
  79. package/dist/session/index.d.ts.map +1 -0
  80. package/dist/session/index.js +54 -0
  81. package/dist/session/index.js.map +1 -0
  82. package/dist/session/types.d.ts +258 -0
  83. package/dist/session/types.d.ts.map +1 -0
  84. package/dist/session/types.js +7 -0
  85. package/dist/session/types.js.map +1 -0
  86. package/package.json +31 -199
  87. package/dist/broker-logs.d.ts +0 -80
  88. package/dist/broker-logs.d.ts.map +0 -1
  89. package/dist/broker-logs.js +0 -189
  90. package/dist/broker-logs.js.map +0 -1
  91. package/dist/broker-path.d.ts +0 -34
  92. package/dist/broker-path.d.ts.map +0 -1
  93. package/dist/broker-path.js +0 -267
  94. package/dist/broker-path.js.map +0 -1
  95. package/dist/browser.d.ts +0 -16
  96. package/dist/browser.d.ts.map +0 -1
  97. package/dist/browser.js +0 -19
  98. package/dist/browser.js.map +0 -1
  99. package/dist/cli-registry.d.ts +0 -44
  100. package/dist/cli-registry.d.ts.map +0 -1
  101. package/dist/cli-registry.js +0 -104
  102. package/dist/cli-registry.js.map +0 -1
  103. package/dist/cli-resolver.d.ts +0 -30
  104. package/dist/cli-resolver.d.ts.map +0 -1
  105. package/dist/cli-resolver.js +0 -132
  106. package/dist/cli-resolver.js.map +0 -1
  107. package/dist/client.d.ts +0 -278
  108. package/dist/client.d.ts.map +0 -1
  109. package/dist/client.js +0 -838
  110. package/dist/client.js.map +0 -1
  111. package/dist/communicate/a2a-bridge.d.ts +0 -25
  112. package/dist/communicate/a2a-bridge.d.ts.map +0 -1
  113. package/dist/communicate/a2a-bridge.js +0 -89
  114. package/dist/communicate/a2a-bridge.js.map +0 -1
  115. package/dist/communicate/a2a-server.d.ts +0 -31
  116. package/dist/communicate/a2a-server.d.ts.map +0 -1
  117. package/dist/communicate/a2a-server.js +0 -220
  118. package/dist/communicate/a2a-server.js.map +0 -1
  119. package/dist/communicate/a2a-transport.d.ts +0 -48
  120. package/dist/communicate/a2a-transport.d.ts.map +0 -1
  121. package/dist/communicate/a2a-transport.js +0 -305
  122. package/dist/communicate/a2a-transport.js.map +0 -1
  123. package/dist/communicate/a2a-types.d.ts +0 -107
  124. package/dist/communicate/a2a-types.d.ts.map +0 -1
  125. package/dist/communicate/a2a-types.js +0 -209
  126. package/dist/communicate/a2a-types.js.map +0 -1
  127. package/dist/communicate/adapters/ai-sdk.d.ts +0 -63
  128. package/dist/communicate/adapters/ai-sdk.d.ts.map +0 -1
  129. package/dist/communicate/adapters/ai-sdk.js +0 -114
  130. package/dist/communicate/adapters/ai-sdk.js.map +0 -1
  131. package/dist/communicate/adapters/claude-sdk.d.ts +0 -28
  132. package/dist/communicate/adapters/claude-sdk.d.ts.map +0 -1
  133. package/dist/communicate/adapters/claude-sdk.js +0 -47
  134. package/dist/communicate/adapters/claude-sdk.js.map +0 -1
  135. package/dist/communicate/adapters/crewai.d.ts +0 -42
  136. package/dist/communicate/adapters/crewai.d.ts.map +0 -1
  137. package/dist/communicate/adapters/crewai.js +0 -95
  138. package/dist/communicate/adapters/crewai.js.map +0 -1
  139. package/dist/communicate/adapters/google-adk.d.ts +0 -53
  140. package/dist/communicate/adapters/google-adk.d.ts.map +0 -1
  141. package/dist/communicate/adapters/google-adk.js +0 -77
  142. package/dist/communicate/adapters/google-adk.js.map +0 -1
  143. package/dist/communicate/adapters/index.d.ts +0 -3
  144. package/dist/communicate/adapters/index.d.ts.map +0 -1
  145. package/dist/communicate/adapters/index.js +0 -3
  146. package/dist/communicate/adapters/index.js.map +0 -1
  147. package/dist/communicate/adapters/langgraph.d.ts +0 -40
  148. package/dist/communicate/adapters/langgraph.d.ts.map +0 -1
  149. package/dist/communicate/adapters/langgraph.js +0 -77
  150. package/dist/communicate/adapters/langgraph.js.map +0 -1
  151. package/dist/communicate/adapters/openai-agents.d.ts +0 -25
  152. package/dist/communicate/adapters/openai-agents.d.ts.map +0 -1
  153. package/dist/communicate/adapters/openai-agents.js +0 -70
  154. package/dist/communicate/adapters/openai-agents.js.map +0 -1
  155. package/dist/communicate/adapters/pi.d.ts +0 -44
  156. package/dist/communicate/adapters/pi.d.ts.map +0 -1
  157. package/dist/communicate/adapters/pi.js +0 -55
  158. package/dist/communicate/adapters/pi.js.map +0 -1
  159. package/dist/communicate/core.d.ts +0 -58
  160. package/dist/communicate/core.d.ts.map +0 -1
  161. package/dist/communicate/core.js +0 -127
  162. package/dist/communicate/core.js.map +0 -1
  163. package/dist/communicate/index.d.ts +0 -20
  164. package/dist/communicate/index.d.ts.map +0 -1
  165. package/dist/communicate/index.js +0 -43
  166. package/dist/communicate/index.js.map +0 -1
  167. package/dist/communicate/transport.d.ts +0 -35
  168. package/dist/communicate/transport.d.ts.map +0 -1
  169. package/dist/communicate/transport.js +0 -279
  170. package/dist/communicate/transport.js.map +0 -1
  171. package/dist/communicate/types.d.ts +0 -58
  172. package/dist/communicate/types.d.ts.map +0 -1
  173. package/dist/communicate/types.js +0 -66
  174. package/dist/communicate/types.js.map +0 -1
  175. package/dist/consensus-helpers.d.ts +0 -103
  176. package/dist/consensus-helpers.d.ts.map +0 -1
  177. package/dist/consensus-helpers.js +0 -147
  178. package/dist/consensus-helpers.js.map +0 -1
  179. package/dist/consensus.d.ts +0 -72
  180. package/dist/consensus.d.ts.map +0 -1
  181. package/dist/consensus.js +0 -378
  182. package/dist/consensus.js.map +0 -1
  183. package/dist/event-bus.d.ts +0 -57
  184. package/dist/event-bus.d.ts.map +0 -1
  185. package/dist/event-bus.js +0 -76
  186. package/dist/event-bus.js.map +0 -1
  187. package/dist/examples/demo.d.ts +0 -2
  188. package/dist/examples/demo.d.ts.map +0 -1
  189. package/dist/examples/demo.js +0 -63
  190. package/dist/examples/demo.js.map +0 -1
  191. package/dist/examples/example.d.ts +0 -2
  192. package/dist/examples/example.d.ts.map +0 -1
  193. package/dist/examples/example.js +0 -77
  194. package/dist/examples/example.js.map +0 -1
  195. package/dist/examples/persona-spawn.d.ts +0 -2
  196. package/dist/examples/persona-spawn.d.ts.map +0 -1
  197. package/dist/examples/persona-spawn.js +0 -43
  198. package/dist/examples/persona-spawn.js.map +0 -1
  199. package/dist/examples/quickstart.d.ts +0 -2
  200. package/dist/examples/quickstart.d.ts.map +0 -1
  201. package/dist/examples/quickstart.js +0 -56
  202. package/dist/examples/quickstart.js.map +0 -1
  203. package/dist/examples/ralph-loop.d.ts +0 -2
  204. package/dist/examples/ralph-loop.d.ts.map +0 -1
  205. package/dist/examples/ralph-loop.js +0 -281
  206. package/dist/examples/ralph-loop.js.map +0 -1
  207. package/dist/examples/workflow-superiority.d.ts +0 -32
  208. package/dist/examples/workflow-superiority.d.ts.map +0 -1
  209. package/dist/examples/workflow-superiority.js +0 -1421
  210. package/dist/examples/workflow-superiority.js.map +0 -1
  211. package/dist/github.d.ts +0 -24
  212. package/dist/github.d.ts.map +0 -1
  213. package/dist/github.js +0 -24
  214. package/dist/github.js.map +0 -1
  215. package/dist/http.d.ts +0 -38
  216. package/dist/http.d.ts.map +0 -1
  217. package/dist/http.js +0 -60
  218. package/dist/http.js.map +0 -1
  219. package/dist/lifecycle-hooks.d.ts +0 -141
  220. package/dist/lifecycle-hooks.d.ts.map +0 -1
  221. package/dist/lifecycle-hooks.js +0 -29
  222. package/dist/lifecycle-hooks.js.map +0 -1
  223. package/dist/logs.d.ts +0 -106
  224. package/dist/logs.d.ts.map +0 -1
  225. package/dist/logs.js +0 -291
  226. package/dist/logs.js.map +0 -1
  227. package/dist/models.d.ts +0 -9
  228. package/dist/models.d.ts.map +0 -1
  229. package/dist/models.js +0 -17
  230. package/dist/models.js.map +0 -1
  231. package/dist/personas.d.ts +0 -160
  232. package/dist/personas.d.ts.map +0 -1
  233. package/dist/personas.js +0 -401
  234. package/dist/personas.js.map +0 -1
  235. package/dist/protocol.d.ts +0 -521
  236. package/dist/protocol.d.ts.map +0 -1
  237. package/dist/protocol.js +0 -2
  238. package/dist/protocol.js.map +0 -1
  239. package/dist/provisioner/__tests__/audit.test.d.ts +0 -2
  240. package/dist/provisioner/__tests__/audit.test.d.ts.map +0 -1
  241. package/dist/provisioner/__tests__/audit.test.js +0 -45
  242. package/dist/provisioner/__tests__/audit.test.js.map +0 -1
  243. package/dist/provisioner/__tests__/compiler.test.d.ts +0 -2
  244. package/dist/provisioner/__tests__/compiler.test.d.ts.map +0 -1
  245. package/dist/provisioner/__tests__/compiler.test.js +0 -345
  246. package/dist/provisioner/__tests__/compiler.test.js.map +0 -1
  247. package/dist/provisioner/__tests__/presets.test.d.ts +0 -2
  248. package/dist/provisioner/__tests__/presets.test.d.ts.map +0 -1
  249. package/dist/provisioner/__tests__/presets.test.js +0 -23
  250. package/dist/provisioner/__tests__/presets.test.js.map +0 -1
  251. package/dist/provisioner/__tests__/seeder.test.d.ts +0 -2
  252. package/dist/provisioner/__tests__/seeder.test.d.ts.map +0 -1
  253. package/dist/provisioner/__tests__/seeder.test.js +0 -224
  254. package/dist/provisioner/__tests__/seeder.test.js.map +0 -1
  255. package/dist/provisioner/__tests__/tar-seeder.test.d.ts +0 -2
  256. package/dist/provisioner/__tests__/tar-seeder.test.d.ts.map +0 -1
  257. package/dist/provisioner/__tests__/tar-seeder.test.js +0 -191
  258. package/dist/provisioner/__tests__/tar-seeder.test.js.map +0 -1
  259. package/dist/provisioner/__tests__/token-factory.test.d.ts +0 -2
  260. package/dist/provisioner/__tests__/token-factory.test.d.ts.map +0 -1
  261. package/dist/provisioner/__tests__/token-factory.test.js +0 -139
  262. package/dist/provisioner/__tests__/token-factory.test.js.map +0 -1
  263. package/dist/provisioner/__tests__/token.test.d.ts +0 -2
  264. package/dist/provisioner/__tests__/token.test.d.ts.map +0 -1
  265. package/dist/provisioner/__tests__/token.test.js +0 -49
  266. package/dist/provisioner/__tests__/token.test.js.map +0 -1
  267. package/dist/provisioner/audit.d.ts +0 -19
  268. package/dist/provisioner/audit.d.ts.map +0 -1
  269. package/dist/provisioner/audit.js +0 -74
  270. package/dist/provisioner/audit.js.map +0 -1
  271. package/dist/provisioner/compiler.d.ts +0 -23
  272. package/dist/provisioner/compiler.d.ts.map +0 -1
  273. package/dist/provisioner/compiler.js +0 -355
  274. package/dist/provisioner/compiler.js.map +0 -1
  275. package/dist/provisioner/index.d.ts +0 -10
  276. package/dist/provisioner/index.d.ts.map +0 -1
  277. package/dist/provisioner/index.js +0 -269
  278. package/dist/provisioner/index.js.map +0 -1
  279. package/dist/provisioner/local-jwks.d.ts +0 -25
  280. package/dist/provisioner/local-jwks.d.ts.map +0 -1
  281. package/dist/provisioner/local-jwks.js +0 -70
  282. package/dist/provisioner/local-jwks.js.map +0 -1
  283. package/dist/provisioner/mount.d.ts +0 -14
  284. package/dist/provisioner/mount.d.ts.map +0 -1
  285. package/dist/provisioner/mount.js +0 -329
  286. package/dist/provisioner/mount.js.map +0 -1
  287. package/dist/provisioner/seeder.d.ts +0 -17
  288. package/dist/provisioner/seeder.d.ts.map +0 -1
  289. package/dist/provisioner/seeder.js +0 -419
  290. package/dist/provisioner/seeder.js.map +0 -1
  291. package/dist/provisioner/token.d.ts +0 -41
  292. package/dist/provisioner/token.d.ts.map +0 -1
  293. package/dist/provisioner/token.js +0 -77
  294. package/dist/provisioner/token.js.map +0 -1
  295. package/dist/provisioner/types.d.ts +0 -134
  296. package/dist/provisioner/types.d.ts.map +0 -1
  297. package/dist/pty.d.ts +0 -8
  298. package/dist/pty.d.ts.map +0 -1
  299. package/dist/pty.js +0 -26
  300. package/dist/pty.js.map +0 -1
  301. package/dist/relay-adapter.d.ts +0 -124
  302. package/dist/relay-adapter.d.ts.map +0 -1
  303. package/dist/relay-adapter.js +0 -242
  304. package/dist/relay-adapter.js.map +0 -1
  305. package/dist/relay.d.ts +0 -550
  306. package/dist/relay.d.ts.map +0 -1
  307. package/dist/relay.js +0 -1682
  308. package/dist/relay.js.map +0 -1
  309. package/dist/shadow.d.ts +0 -101
  310. package/dist/shadow.d.ts.map +0 -1
  311. package/dist/shadow.js +0 -174
  312. package/dist/shadow.js.map +0 -1
  313. package/dist/slack.d.ts +0 -24
  314. package/dist/slack.d.ts.map +0 -1
  315. package/dist/slack.js +0 -24
  316. package/dist/slack.js.map +0 -1
  317. package/dist/spawn-from-env.d.ts +0 -78
  318. package/dist/spawn-from-env.d.ts.map +0 -1
  319. package/dist/spawn-from-env.js +0 -172
  320. package/dist/spawn-from-env.js.map +0 -1
  321. package/dist/transport.d.ts +0 -104
  322. package/dist/transport.d.ts.map +0 -1
  323. package/dist/transport.js +0 -520
  324. package/dist/transport.js.map +0 -1
  325. package/dist/types.d.ts +0 -101
  326. package/dist/types.d.ts.map +0 -1
  327. package/dist/types.js +0 -5
  328. package/dist/types.js.map +0 -1
  329. package/dist/workers.d.ts +0 -39
  330. package/dist/workers.d.ts.map +0 -1
  331. package/dist/workers.js +0 -39
  332. package/dist/workers.js.map +0 -1
  333. package/dist/workflows/__tests__/budget-enforcement.test.d.ts +0 -2
  334. package/dist/workflows/__tests__/budget-enforcement.test.d.ts.map +0 -1
  335. package/dist/workflows/__tests__/budget-enforcement.test.js +0 -411
  336. package/dist/workflows/__tests__/budget-enforcement.test.js.map +0 -1
  337. package/dist/workflows/__tests__/budget-tracker.test.d.ts +0 -2
  338. package/dist/workflows/__tests__/budget-tracker.test.d.ts.map +0 -1
  339. package/dist/workflows/__tests__/budget-tracker.test.js +0 -99
  340. package/dist/workflows/__tests__/budget-tracker.test.js.map +0 -1
  341. package/dist/workflows/__tests__/builder-paths.test.d.ts +0 -2
  342. package/dist/workflows/__tests__/builder-paths.test.d.ts.map +0 -1
  343. package/dist/workflows/__tests__/builder-paths.test.js +0 -63
  344. package/dist/workflows/__tests__/builder-paths.test.js.map +0 -1
  345. package/dist/workflows/__tests__/channel-messenger.test.d.ts +0 -2
  346. package/dist/workflows/__tests__/channel-messenger.test.d.ts.map +0 -1
  347. package/dist/workflows/__tests__/channel-messenger.test.js +0 -123
  348. package/dist/workflows/__tests__/channel-messenger.test.js.map +0 -1
  349. package/dist/workflows/__tests__/cli-session-collector.test.d.ts +0 -2
  350. package/dist/workflows/__tests__/cli-session-collector.test.d.ts.map +0 -1
  351. package/dist/workflows/__tests__/cli-session-collector.test.js +0 -54
  352. package/dist/workflows/__tests__/cli-session-collector.test.js.map +0 -1
  353. package/dist/workflows/__tests__/collectors/claude.test.d.ts +0 -2
  354. package/dist/workflows/__tests__/collectors/claude.test.d.ts.map +0 -1
  355. package/dist/workflows/__tests__/collectors/claude.test.js +0 -85
  356. package/dist/workflows/__tests__/collectors/claude.test.js.map +0 -1
  357. package/dist/workflows/__tests__/collectors/codex.test.d.ts +0 -2
  358. package/dist/workflows/__tests__/collectors/codex.test.d.ts.map +0 -1
  359. package/dist/workflows/__tests__/collectors/codex.test.js +0 -67
  360. package/dist/workflows/__tests__/collectors/codex.test.js.map +0 -1
  361. package/dist/workflows/__tests__/collectors/opencode.test.d.ts +0 -2
  362. package/dist/workflows/__tests__/collectors/opencode.test.d.ts.map +0 -1
  363. package/dist/workflows/__tests__/collectors/opencode.test.js +0 -119
  364. package/dist/workflows/__tests__/collectors/opencode.test.js.map +0 -1
  365. package/dist/workflows/__tests__/e2big-and-verify.test.d.ts +0 -2
  366. package/dist/workflows/__tests__/e2big-and-verify.test.d.ts.map +0 -1
  367. package/dist/workflows/__tests__/e2big-and-verify.test.js +0 -62
  368. package/dist/workflows/__tests__/e2big-and-verify.test.js.map +0 -1
  369. package/dist/workflows/__tests__/e2e-permissions.test.d.ts +0 -2
  370. package/dist/workflows/__tests__/e2e-permissions.test.d.ts.map +0 -1
  371. package/dist/workflows/__tests__/e2e-permissions.test.js +0 -338
  372. package/dist/workflows/__tests__/e2e-permissions.test.js.map +0 -1
  373. package/dist/workflows/__tests__/permission-types.test.d.ts +0 -2
  374. package/dist/workflows/__tests__/permission-types.test.d.ts.map +0 -1
  375. package/dist/workflows/__tests__/permission-types.test.js +0 -124
  376. package/dist/workflows/__tests__/permission-types.test.js.map +0 -1
  377. package/dist/workflows/__tests__/permissions-integration.test.d.ts +0 -2
  378. package/dist/workflows/__tests__/permissions-integration.test.d.ts.map +0 -1
  379. package/dist/workflows/__tests__/permissions-integration.test.js +0 -577
  380. package/dist/workflows/__tests__/permissions-integration.test.js.map +0 -1
  381. package/dist/workflows/__tests__/process-backend-executor.test.d.ts +0 -2
  382. package/dist/workflows/__tests__/process-backend-executor.test.d.ts.map +0 -1
  383. package/dist/workflows/__tests__/process-backend-executor.test.js +0 -83
  384. package/dist/workflows/__tests__/process-backend-executor.test.js.map +0 -1
  385. package/dist/workflows/__tests__/proxy-env.test.d.ts +0 -2
  386. package/dist/workflows/__tests__/proxy-env.test.d.ts.map +0 -1
  387. package/dist/workflows/__tests__/proxy-env.test.js +0 -135
  388. package/dist/workflows/__tests__/proxy-env.test.js.map +0 -1
  389. package/dist/workflows/__tests__/run-script.test.d.ts +0 -2
  390. package/dist/workflows/__tests__/run-script.test.d.ts.map +0 -1
  391. package/dist/workflows/__tests__/run-script.test.js +0 -426
  392. package/dist/workflows/__tests__/run-script.test.js.map +0 -1
  393. package/dist/workflows/__tests__/run-summary-table.test.d.ts +0 -2
  394. package/dist/workflows/__tests__/run-summary-table.test.d.ts.map +0 -1
  395. package/dist/workflows/__tests__/run-summary-table.test.js +0 -131
  396. package/dist/workflows/__tests__/run-summary-table.test.js.map +0 -1
  397. package/dist/workflows/__tests__/scrub-pty-chrome.test.d.ts +0 -2
  398. package/dist/workflows/__tests__/scrub-pty-chrome.test.d.ts.map +0 -1
  399. package/dist/workflows/__tests__/scrub-pty-chrome.test.js +0 -113
  400. package/dist/workflows/__tests__/scrub-pty-chrome.test.js.map +0 -1
  401. package/dist/workflows/__tests__/sibling-links.test.d.ts +0 -2
  402. package/dist/workflows/__tests__/sibling-links.test.d.ts.map +0 -1
  403. package/dist/workflows/__tests__/sibling-links.test.js +0 -166
  404. package/dist/workflows/__tests__/sibling-links.test.js.map +0 -1
  405. package/dist/workflows/__tests__/step-cwd.test.d.ts +0 -2
  406. package/dist/workflows/__tests__/step-cwd.test.d.ts.map +0 -1
  407. package/dist/workflows/__tests__/step-cwd.test.js +0 -42
  408. package/dist/workflows/__tests__/step-cwd.test.js.map +0 -1
  409. package/dist/workflows/__tests__/step-executor.test.d.ts +0 -2
  410. package/dist/workflows/__tests__/step-executor.test.d.ts.map +0 -1
  411. package/dist/workflows/__tests__/step-executor.test.js +0 -378
  412. package/dist/workflows/__tests__/step-executor.test.js.map +0 -1
  413. package/dist/workflows/__tests__/template-resolver.test.d.ts +0 -2
  414. package/dist/workflows/__tests__/template-resolver.test.d.ts.map +0 -1
  415. package/dist/workflows/__tests__/template-resolver.test.js +0 -145
  416. package/dist/workflows/__tests__/template-resolver.test.js.map +0 -1
  417. package/dist/workflows/__tests__/verification-custom.test.d.ts +0 -2
  418. package/dist/workflows/__tests__/verification-custom.test.d.ts.map +0 -1
  419. package/dist/workflows/__tests__/verification-custom.test.js +0 -230
  420. package/dist/workflows/__tests__/verification-custom.test.js.map +0 -1
  421. package/dist/workflows/__tests__/verification-traceback.test.d.ts +0 -2
  422. package/dist/workflows/__tests__/verification-traceback.test.d.ts.map +0 -1
  423. package/dist/workflows/__tests__/verification-traceback.test.js +0 -442
  424. package/dist/workflows/__tests__/verification-traceback.test.js.map +0 -1
  425. package/dist/workflows/__tests__/verification.test.d.ts +0 -2
  426. package/dist/workflows/__tests__/verification.test.d.ts.map +0 -1
  427. package/dist/workflows/__tests__/verification.test.js +0 -272
  428. package/dist/workflows/__tests__/verification.test.js.map +0 -1
  429. package/dist/workflows/__tests__/workflow-reliability-contract.test.d.ts +0 -2
  430. package/dist/workflows/__tests__/workflow-reliability-contract.test.d.ts.map +0 -1
  431. package/dist/workflows/__tests__/workflow-reliability-contract.test.js +0 -536
  432. package/dist/workflows/__tests__/workflow-reliability-contract.test.js.map +0 -1
  433. package/dist/workflows/__tests__/workflow-reliability-e2e.test.d.ts +0 -2
  434. package/dist/workflows/__tests__/workflow-reliability-e2e.test.d.ts.map +0 -1
  435. package/dist/workflows/__tests__/workflow-reliability-e2e.test.js +0 -199
  436. package/dist/workflows/__tests__/workflow-reliability-e2e.test.js.map +0 -1
  437. package/dist/workflows/api-executor.d.ts +0 -16
  438. package/dist/workflows/api-executor.d.ts.map +0 -1
  439. package/dist/workflows/api-executor.js +0 -94
  440. package/dist/workflows/api-executor.js.map +0 -1
  441. package/dist/workflows/barrier.d.ts +0 -72
  442. package/dist/workflows/barrier.d.ts.map +0 -1
  443. package/dist/workflows/barrier.js +0 -162
  444. package/dist/workflows/barrier.js.map +0 -1
  445. package/dist/workflows/budget-tracker.d.ts +0 -75
  446. package/dist/workflows/budget-tracker.d.ts.map +0 -1
  447. package/dist/workflows/budget-tracker.js +0 -184
  448. package/dist/workflows/budget-tracker.js.map +0 -1
  449. package/dist/workflows/builder.d.ts +0 -229
  450. package/dist/workflows/builder.d.ts.map +0 -1
  451. package/dist/workflows/builder.js +0 -430
  452. package/dist/workflows/builder.js.map +0 -1
  453. package/dist/workflows/channel-messenger.d.ts +0 -28
  454. package/dist/workflows/channel-messenger.d.ts.map +0 -1
  455. package/dist/workflows/channel-messenger.js +0 -275
  456. package/dist/workflows/channel-messenger.js.map +0 -1
  457. package/dist/workflows/cli-session-collector.d.ts +0 -39
  458. package/dist/workflows/cli-session-collector.d.ts.map +0 -1
  459. package/dist/workflows/cli-session-collector.js +0 -23
  460. package/dist/workflows/cli-session-collector.js.map +0 -1
  461. package/dist/workflows/cli.d.ts +0 -11
  462. package/dist/workflows/cli.d.ts.map +0 -1
  463. package/dist/workflows/cli.js +0 -395
  464. package/dist/workflows/cli.js.map +0 -1
  465. package/dist/workflows/cloud-runner.d.ts +0 -15
  466. package/dist/workflows/cloud-runner.d.ts.map +0 -1
  467. package/dist/workflows/cloud-runner.js +0 -41
  468. package/dist/workflows/cloud-runner.js.map +0 -1
  469. package/dist/workflows/cloud-schedules.d.ts +0 -3
  470. package/dist/workflows/cloud-schedules.d.ts.map +0 -1
  471. package/dist/workflows/cloud-schedules.js +0 -2
  472. package/dist/workflows/cloud-schedules.js.map +0 -1
  473. package/dist/workflows/collectors/claude.d.ts +0 -6
  474. package/dist/workflows/collectors/claude.d.ts.map +0 -1
  475. package/dist/workflows/collectors/claude.js +0 -330
  476. package/dist/workflows/collectors/claude.js.map +0 -1
  477. package/dist/workflows/collectors/codex.d.ts +0 -18
  478. package/dist/workflows/collectors/codex.d.ts.map +0 -1
  479. package/dist/workflows/collectors/codex.js +0 -265
  480. package/dist/workflows/collectors/codex.js.map +0 -1
  481. package/dist/workflows/collectors/opencode.d.ts +0 -6
  482. package/dist/workflows/collectors/opencode.d.ts.map +0 -1
  483. package/dist/workflows/collectors/opencode.js +0 -204
  484. package/dist/workflows/collectors/opencode.js.map +0 -1
  485. package/dist/workflows/coordinator.d.ts +0 -73
  486. package/dist/workflows/coordinator.d.ts.map +0 -1
  487. package/dist/workflows/coordinator.js +0 -647
  488. package/dist/workflows/coordinator.js.map +0 -1
  489. package/dist/workflows/custom-steps.d.ts +0 -73
  490. package/dist/workflows/custom-steps.d.ts.map +0 -1
  491. package/dist/workflows/custom-steps.js +0 -321
  492. package/dist/workflows/custom-steps.js.map +0 -1
  493. package/dist/workflows/default-logger.d.ts +0 -9
  494. package/dist/workflows/default-logger.d.ts.map +0 -1
  495. package/dist/workflows/default-logger.js +0 -104
  496. package/dist/workflows/default-logger.js.map +0 -1
  497. package/dist/workflows/dry-run-format.d.ts +0 -6
  498. package/dist/workflows/dry-run-format.d.ts.map +0 -1
  499. package/dist/workflows/dry-run-format.js +0 -76
  500. package/dist/workflows/dry-run-format.js.map +0 -1
  501. package/dist/workflows/file-db.d.ts +0 -85
  502. package/dist/workflows/file-db.d.ts.map +0 -1
  503. package/dist/workflows/file-db.js +0 -215
  504. package/dist/workflows/file-db.js.map +0 -1
  505. package/dist/workflows/index.d.ts +0 -36
  506. package/dist/workflows/index.d.ts.map +0 -1
  507. package/dist/workflows/index.js +0 -33
  508. package/dist/workflows/index.js.map +0 -1
  509. package/dist/workflows/listr-renderer.d.ts +0 -26
  510. package/dist/workflows/listr-renderer.d.ts.map +0 -1
  511. package/dist/workflows/listr-renderer.js +0 -230
  512. package/dist/workflows/listr-renderer.js.map +0 -1
  513. package/dist/workflows/memory-db.d.ts +0 -17
  514. package/dist/workflows/memory-db.d.ts.map +0 -1
  515. package/dist/workflows/memory-db.js +0 -33
  516. package/dist/workflows/memory-db.js.map +0 -1
  517. package/dist/workflows/process-backend-executor.d.ts +0 -18
  518. package/dist/workflows/process-backend-executor.d.ts.map +0 -1
  519. package/dist/workflows/process-backend-executor.js +0 -74
  520. package/dist/workflows/process-backend-executor.js.map +0 -1
  521. package/dist/workflows/process-spawner.d.ts +0 -35
  522. package/dist/workflows/process-spawner.d.ts.map +0 -1
  523. package/dist/workflows/process-spawner.js +0 -141
  524. package/dist/workflows/process-spawner.js.map +0 -1
  525. package/dist/workflows/proxy-env.d.ts +0 -52
  526. package/dist/workflows/proxy-env.d.ts.map +0 -1
  527. package/dist/workflows/proxy-env.js +0 -92
  528. package/dist/workflows/proxy-env.js.map +0 -1
  529. package/dist/workflows/run-script.d.ts +0 -82
  530. package/dist/workflows/run-script.d.ts.map +0 -1
  531. package/dist/workflows/run-script.js +0 -521
  532. package/dist/workflows/run-script.js.map +0 -1
  533. package/dist/workflows/run-summary-table.d.ts +0 -5
  534. package/dist/workflows/run-summary-table.d.ts.map +0 -1
  535. package/dist/workflows/run-summary-table.js +0 -132
  536. package/dist/workflows/run-summary-table.js.map +0 -1
  537. package/dist/workflows/run.d.ts +0 -45
  538. package/dist/workflows/run.d.ts.map +0 -1
  539. package/dist/workflows/run.js +0 -37
  540. package/dist/workflows/run.js.map +0 -1
  541. package/dist/workflows/runner.d.ts +0 -527
  542. package/dist/workflows/runner.d.ts.map +0 -1
  543. package/dist/workflows/runner.js +0 -6266
  544. package/dist/workflows/runner.js.map +0 -1
  545. package/dist/workflows/sibling-links.d.ts +0 -100
  546. package/dist/workflows/sibling-links.d.ts.map +0 -1
  547. package/dist/workflows/sibling-links.js +0 -205
  548. package/dist/workflows/sibling-links.js.map +0 -1
  549. package/dist/workflows/state.d.ts +0 -77
  550. package/dist/workflows/state.d.ts.map +0 -1
  551. package/dist/workflows/state.js +0 -140
  552. package/dist/workflows/state.js.map +0 -1
  553. package/dist/workflows/step-executor.d.ts +0 -95
  554. package/dist/workflows/step-executor.d.ts.map +0 -1
  555. package/dist/workflows/step-executor.js +0 -393
  556. package/dist/workflows/step-executor.js.map +0 -1
  557. package/dist/workflows/template-resolver.d.ts +0 -33
  558. package/dist/workflows/template-resolver.d.ts.map +0 -1
  559. package/dist/workflows/template-resolver.js +0 -144
  560. package/dist/workflows/template-resolver.js.map +0 -1
  561. package/dist/workflows/templates.d.ts +0 -47
  562. package/dist/workflows/templates.d.ts.map +0 -1
  563. package/dist/workflows/templates.js +0 -405
  564. package/dist/workflows/templates.js.map +0 -1
  565. package/dist/workflows/trajectory.d.ts +0 -87
  566. package/dist/workflows/trajectory.d.ts.map +0 -1
  567. package/dist/workflows/trajectory.js +0 -412
  568. package/dist/workflows/trajectory.js.map +0 -1
  569. package/dist/workflows/types.d.ts +0 -471
  570. package/dist/workflows/types.d.ts.map +0 -1
  571. package/dist/workflows/types.js +0 -37
  572. package/dist/workflows/types.js.map +0 -1
  573. package/dist/workflows/validator.d.ts +0 -11
  574. package/dist/workflows/validator.d.ts.map +0 -1
  575. package/dist/workflows/validator.js +0 -184
  576. package/dist/workflows/validator.js.map +0 -1
  577. package/dist/workflows/verification.d.ts +0 -53
  578. package/dist/workflows/verification.d.ts.map +0 -1
  579. package/dist/workflows/verification.js +0 -238
  580. package/dist/workflows/verification.js.map +0 -1
  581. /package/dist/{provisioner → actions}/types.js +0 -0
package/dist/client.js DELETED
@@ -1,838 +0,0 @@
1
- /**
2
- * AgentRelayClient — single client for communicating with an agent-relay broker
3
- * over HTTP/WS. Works identically for local and remote brokers.
4
- *
5
- * Usage:
6
- * // Remote broker (Daytona sandbox, cloud, etc.)
7
- * const client = new AgentRelayClient({ baseUrl, apiKey });
8
- *
9
- * // Local broker (spawn and connect)
10
- * const client = await AgentRelayClient.spawn({ cwd: '/my/project' });
11
- */
12
- import { spawn } from 'node:child_process';
13
- import { randomBytes } from 'node:crypto';
14
- import { readFileSync, existsSync } from 'node:fs';
15
- import path from 'node:path';
16
- import { BrokerTransport, AgentRelayProtocolError, } from './transport.js';
17
- import { getBrokerBinaryPath, formatBrokerNotFoundError } from './broker-path.js';
18
- import { EventBus } from './event-bus.js';
19
- function isHeadlessProvider(value) {
20
- return value === 'claude' || value === 'opencode';
21
- }
22
- function resolveSpawnTransport(input) {
23
- return input.transport ?? (input.provider === 'opencode' ? 'headless' : 'pty');
24
- }
25
- /**
26
- * Serialize a {@link SpawnPtyInput} for the broker `/api/spawn` endpoint.
27
- * Factored out of {@link AgentRelayClient.spawnPty} so the same shape can
28
- * be applied to the post-`beforeAgentSpawn` resolved input.
29
- */
30
- function buildSpawnPtyBody(input) {
31
- return {
32
- name: input.name,
33
- cli: input.cli,
34
- ...(input.model !== undefined ? { model: input.model } : {}),
35
- args: input.args ?? [],
36
- ...(input.task !== undefined ? { task: input.task } : {}),
37
- channels: input.channels ?? [],
38
- ...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
39
- ...(input.team !== undefined ? { team: input.team } : {}),
40
- ...(input.agentToken !== undefined ? { agentToken: input.agentToken } : {}),
41
- ...(input.shadowOf !== undefined ? { shadowOf: input.shadowOf } : {}),
42
- ...(input.shadowMode !== undefined ? { shadowMode: input.shadowMode } : {}),
43
- ...(input.continueFrom !== undefined ? { continueFrom: input.continueFrom } : {}),
44
- ...(input.idleThresholdSecs !== undefined ? { idleThresholdSecs: input.idleThresholdSecs } : {}),
45
- ...(input.restartPolicy !== undefined ? { restartPolicy: input.restartPolicy } : {}),
46
- ...(input.skipRelayPrompt !== undefined ? { skipRelayPrompt: input.skipRelayPrompt } : {}),
47
- ...(input.agentResultSchema !== undefined ? { agentResultSchema: input.agentResultSchema } : {}),
48
- };
49
- }
50
- function buildSpawnProviderBody(input, transport) {
51
- return {
52
- name: input.name,
53
- cli: input.provider,
54
- ...(input.model !== undefined ? { model: input.model } : {}),
55
- args: input.args ?? [],
56
- ...(input.task !== undefined ? { task: input.task } : {}),
57
- channels: input.channels ?? [],
58
- ...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
59
- ...(input.team !== undefined ? { team: input.team } : {}),
60
- ...(input.agentToken !== undefined ? { agentToken: input.agentToken } : {}),
61
- ...(input.shadowOf !== undefined ? { shadowOf: input.shadowOf } : {}),
62
- ...(input.shadowMode !== undefined ? { shadowMode: input.shadowMode } : {}),
63
- ...(input.continueFrom !== undefined ? { continueFrom: input.continueFrom } : {}),
64
- ...(input.idleThresholdSecs !== undefined ? { idleThresholdSecs: input.idleThresholdSecs } : {}),
65
- ...(input.restartPolicy !== undefined ? { restartPolicy: input.restartPolicy } : {}),
66
- ...(input.skipRelayPrompt !== undefined ? { skipRelayPrompt: input.skipRelayPrompt } : {}),
67
- ...(input.agentResultSchema !== undefined ? { agentResultSchema: input.agentResultSchema } : {}),
68
- transport,
69
- };
70
- }
71
- function isProcessRunning(pid) {
72
- if (!Number.isInteger(pid) || pid <= 0) {
73
- return false;
74
- }
75
- try {
76
- process.kill(pid, 0);
77
- return true;
78
- }
79
- catch (error) {
80
- return error.code === 'EPERM';
81
- }
82
- }
83
- function buildBrokerInitArgs(args) {
84
- if (!args) {
85
- return [];
86
- }
87
- const cliArgs = [];
88
- if (args.persist) {
89
- cliArgs.push('--persist');
90
- }
91
- if (args.apiPort !== undefined) {
92
- cliArgs.push('--api-port', String(args.apiPort));
93
- }
94
- if (args.apiBind !== undefined) {
95
- cliArgs.push('--api-bind', args.apiBind);
96
- }
97
- if (args.stateDir !== undefined) {
98
- cliArgs.push('--state-dir', args.stateDir);
99
- }
100
- return cliArgs;
101
- }
102
- // ── Client ─────────────────────────────────────────────────────────────
103
- export class AgentRelayClient {
104
- transport;
105
- /** Set after spawn() — the managed child process. */
106
- child = null;
107
- /** Lease renewal timer (only for spawned brokers). */
108
- leaseTimer = null;
109
- brokerExitInfo = null;
110
- brokerExitListeners = new Set();
111
- workspaceKey;
112
- /** Resolved broker URL — captured so call-site lifecycle contexts can surface it. */
113
- baseUrl;
114
- /** Shared multi-listener registry. Created bare when no `eventBus` is passed in. */
115
- eventBus;
116
- constructor(options) {
117
- this.baseUrl = options.baseUrl;
118
- this.eventBus = options.eventBus ?? new EventBus();
119
- this.transport = new BrokerTransport({
120
- baseUrl: options.baseUrl,
121
- apiKey: options.apiKey,
122
- fetch: options.fetch,
123
- requestTimeoutMs: options.requestTimeoutMs,
124
- });
125
- }
126
- addListener(event, handler) {
127
- return this.eventBus.addListener(event, handler);
128
- }
129
- removeListener(event, handler) {
130
- this.eventBus.removeListener(event, handler);
131
- }
132
- /**
133
- * Fold `beforeAgentSpawn` patches into the input. Listeners run in
134
- * registration order; each may return a {@link SpawnPatch} that is
135
- * shallow-merged over the running result. Handler exceptions are caught
136
- * and logged but do not abort the chain.
137
- */
138
- async runBeforeSpawn(ctx) {
139
- let resolved = { ...ctx.input };
140
- for (const handler of this.eventBus.listeners('beforeAgentSpawn')) {
141
- try {
142
- const patch = await handler({ ...ctx, input: resolved });
143
- if (patch && typeof patch === 'object') {
144
- resolved = { ...resolved, ...patch };
145
- }
146
- }
147
- catch (err) {
148
- console.error('[agent-relay] beforeAgentSpawn listener threw:', err);
149
- }
150
- }
151
- return resolved;
152
- }
153
- /**
154
- * Connect to an already-running broker by reading its connection file.
155
- *
156
- * The broker writes `connection.json` to its data directory ({cwd}/.agent-relay/
157
- * in persist mode). This method reads that file to get the URL and API key.
158
- *
159
- * @param cwd — project directory (default: process.cwd())
160
- * @param connectionPath — explicit path to connection.json (overrides cwd)
161
- */
162
- static connect(options) {
163
- const cwd = options?.cwd ?? process.cwd();
164
- const stateDir = process.env.AGENT_RELAY_STATE_DIR;
165
- const connPath = options?.connectionPath ?? path.join(stateDir ?? path.join(cwd, '.agent-relay'), 'connection.json');
166
- if (!existsSync(connPath)) {
167
- throw new Error(`No running broker found (${connPath} does not exist). Start one with 'agent-relay up' or use AgentRelayClient.spawn().`);
168
- }
169
- const raw = readFileSync(connPath, 'utf-8');
170
- let conn;
171
- try {
172
- conn = JSON.parse(raw);
173
- }
174
- catch {
175
- throw new Error(`Corrupt broker connection file (${connPath}). Remove it and start the broker again.`);
176
- }
177
- if (typeof conn.url !== 'string' || typeof conn.api_key !== 'string' || typeof conn.pid !== 'number') {
178
- throw new Error(`Invalid broker connection metadata in ${connPath}. Remove it and start the broker again.`);
179
- }
180
- if (!isProcessRunning(conn.pid)) {
181
- throw new Error(`Stale broker connection file (${connPath}) points to dead pid ${conn.pid}. Start the broker with 'agent-relay up' or use AgentRelayClient.spawn().`);
182
- }
183
- return new AgentRelayClient({
184
- baseUrl: conn.url,
185
- apiKey: conn.api_key,
186
- ...(options?.eventBus ? { eventBus: options.eventBus } : {}),
187
- });
188
- }
189
- /**
190
- * Spawn a local broker process and return a connected client.
191
- *
192
- * 1. Generates a random API key
193
- * 2. Spawns the broker binary (attached)
194
- * 3. Parses the API port from stdout
195
- * 4. Connects HTTP/WS transport
196
- * 5. Fetches session metadata
197
- * 6. Starts event stream + lease renewal
198
- */
199
- static async spawn(options) {
200
- let binaryPath = options?.binaryPath;
201
- if (!binaryPath) {
202
- const resolved = getBrokerBinaryPath();
203
- if (!resolved) {
204
- throw new Error(formatBrokerNotFoundError());
205
- }
206
- binaryPath = resolved;
207
- }
208
- const cwd = options?.cwd ?? process.cwd();
209
- const brokerName = options?.brokerName ?? (path.basename(cwd) || 'project');
210
- const channels = options?.channels ?? ['general'];
211
- const timeoutMs = options?.startupTimeoutMs ?? 45_000;
212
- const userArgs = buildBrokerInitArgs(options?.binaryArgs);
213
- const apiKey = `br_${randomBytes(16).toString('hex')}`;
214
- const env = {
215
- ...process.env,
216
- ...options?.env,
217
- AGENT_RELAY_STARTUP_DEBUG: options?.env?.AGENT_RELAY_STARTUP_DEBUG ?? process.env.AGENT_RELAY_STARTUP_DEBUG ?? '1',
218
- RELAY_BROKER_API_KEY: apiKey,
219
- };
220
- const args = ['init', '--name', brokerName, '--channels', channels.join(','), ...userArgs];
221
- const stderrLines = [];
222
- const stdoutLines = [];
223
- const child = spawn(binaryPath, args, {
224
- cwd,
225
- env,
226
- stdio: ['ignore', 'pipe', 'pipe'],
227
- });
228
- if (child.stderr) {
229
- const { createInterface } = await import('node:readline');
230
- const rl = createInterface({ input: child.stderr });
231
- rl.on('line', (line) => {
232
- pushBufferedLine(stderrLines, line);
233
- options?.onStderr?.(line);
234
- });
235
- }
236
- // Parse the API URL from stdout (the broker prints it after binding)
237
- const baseUrl = await waitForApiUrl(child, timeoutMs, {
238
- binaryPath,
239
- args,
240
- cwd,
241
- stdoutLines,
242
- stderrLines,
243
- });
244
- drainBrokerStdioAfterStartup(child);
245
- const client = new AgentRelayClient({
246
- baseUrl,
247
- apiKey,
248
- requestTimeoutMs: options?.requestTimeoutMs,
249
- ...(options?.eventBus ? { eventBus: options.eventBus } : {}),
250
- });
251
- client.child = child;
252
- client.installManagedBrokerExitHandler(child, stderrLines);
253
- // The broker prints "API listening on …" the moment its TCP listener is
254
- // bound, but it still needs to complete a Relaycast handshake before
255
- // `getSession()` will return. Two failure modes to handle:
256
- //
257
- // 1. Broker is alive and warming up — the startup-only API responds
258
- // 503 until the handshake completes. Poll until it succeeds.
259
- // 2. Broker died during the handshake (e.g. Relaycast unreachable) —
260
- // the in-flight fetch sees the socket drop as `TypeError: fetch
261
- // failed`, which is uninformative on its own.
262
- //
263
- // We race each `getSession()` against `brokerExited` so case (2) reports
264
- // as the actual broker exit (with its stderr tail and exit code), not as
265
- // a mystery network error. No backoff for the death case — we know it
266
- // immediately. 503 polling stays simple at 1s intervals.
267
- const brokerExited = new Promise((_, reject) => {
268
- child.once('exit', (code) => {
269
- reject(new Error(formatBrokerStartupError(`Broker process exited with code ${code} during initial handshake`, child, { binaryPath, args, cwd, stdoutLines, stderrLines })));
270
- });
271
- });
272
- // Suppress unhandledRejection if the race is won by getSession before
273
- // the broker exits later (e.g. on normal shutdown).
274
- brokerExited.catch(() => { });
275
- let session;
276
- for (let attempt = 0; attempt < 10; attempt++) {
277
- try {
278
- session = await Promise.race([client.getSession(), brokerExited]);
279
- break;
280
- }
281
- catch (err) {
282
- const message = err instanceof Error ? err.message : String(err);
283
- const is503 = message.includes('503') || message.includes('Service Unavailable');
284
- if (!is503 || attempt >= 9)
285
- throw err;
286
- await new Promise((resolve) => setTimeout(resolve, 1000));
287
- }
288
- }
289
- if (!client.brokerExitInfo) {
290
- client.connectEvents();
291
- // Renew the owner lease so the broker doesn't auto-shutdown
292
- client.leaseTimer = setInterval(() => {
293
- client.renewLease().catch(() => { });
294
- }, 60_000);
295
- }
296
- return client;
297
- }
298
- /** PID of the managed broker process, if spawned locally. */
299
- get brokerPid() {
300
- return this.child?.pid;
301
- }
302
- // ── Session ────────────────────────────────────────────────────────
303
- async getSession() {
304
- const session = await this.transport.request('/api/session');
305
- this.workspaceKey = session.workspace_key;
306
- return session;
307
- }
308
- async healthCheck() {
309
- return this.transport.request('/health');
310
- }
311
- // ── Events ─────────────────────────────────────────────────────────
312
- connectEvents(sinceSeq) {
313
- this.transport.connect(sinceSeq);
314
- }
315
- disconnectEvents() {
316
- this.transport.disconnect();
317
- }
318
- onEvent(listener) {
319
- return this.transport.onEvent(listener);
320
- }
321
- /**
322
- * Subscribe to managed broker child-process exit.
323
- *
324
- * Clients created with `new AgentRelayClient(...)` or `connect()` do not own a
325
- * broker child process, so this is a no-op for them.
326
- */
327
- onBrokerExit(listener) {
328
- if (!this.child && !this.brokerExitInfo) {
329
- return () => { };
330
- }
331
- this.brokerExitListeners.add(listener);
332
- if (this.brokerExitInfo) {
333
- const info = cloneBrokerExitInfo(this.brokerExitInfo);
334
- queueMicrotask(() => {
335
- if (this.brokerExitListeners.has(listener)) {
336
- try {
337
- listener(info);
338
- }
339
- catch {
340
- // Listener failures should not interfere with SDK cleanup.
341
- }
342
- }
343
- });
344
- }
345
- return () => {
346
- this.brokerExitListeners.delete(listener);
347
- };
348
- }
349
- queryEvents(filter) {
350
- return this.transport.queryEvents(filter);
351
- }
352
- getLastEvent(kind, name) {
353
- return this.transport.getLastEvent(kind, name);
354
- }
355
- // ── Agent lifecycle ────────────────────────────────────────────────
356
- async spawnPty(input) {
357
- const beforeCtx = {
358
- kind: 'pty',
359
- input,
360
- spawnerPid: process.pid,
361
- spawnStartTs: new Date().toISOString(),
362
- baseUrl: this.baseUrl,
363
- };
364
- const t0 = Date.now();
365
- const resolvedInput = (await this.runBeforeSpawn(beforeCtx));
366
- try {
367
- const result = await this.transport.request('/api/spawn', {
368
- method: 'POST',
369
- body: JSON.stringify(buildSpawnPtyBody(resolvedInput)),
370
- });
371
- await this.emitAfterSpawn(beforeCtx, resolvedInput, t0, result, undefined);
372
- return result;
373
- }
374
- catch (err) {
375
- await this.emitAfterSpawn(beforeCtx, resolvedInput, t0, undefined, err);
376
- throw err;
377
- }
378
- }
379
- async spawnProvider(input) {
380
- const transport = resolveSpawnTransport(input);
381
- if (transport === 'headless' && !isHeadlessProvider(input.provider)) {
382
- throw new Error(`provider '${input.provider}' does not support headless transport (supported: claude, opencode)`);
383
- }
384
- const beforeCtx = {
385
- kind: 'provider',
386
- input,
387
- spawnerPid: process.pid,
388
- spawnStartTs: new Date().toISOString(),
389
- baseUrl: this.baseUrl,
390
- };
391
- const t0 = Date.now();
392
- const resolvedInput = (await this.runBeforeSpawn(beforeCtx));
393
- try {
394
- const result = await this.transport.request('/api/spawn', {
395
- method: 'POST',
396
- body: JSON.stringify(buildSpawnProviderBody(resolvedInput, transport)),
397
- });
398
- await this.emitAfterSpawn(beforeCtx, resolvedInput, t0, result, undefined);
399
- return result;
400
- }
401
- catch (err) {
402
- await this.emitAfterSpawn(beforeCtx, resolvedInput, t0, undefined, err);
403
- throw err;
404
- }
405
- }
406
- async spawnHeadless(input) {
407
- return this.spawnProvider({ ...input, transport: 'headless' });
408
- }
409
- async spawnClaude(input) {
410
- return this.spawnProvider({ ...input, provider: 'claude' });
411
- }
412
- async spawnOpencode(input) {
413
- return this.spawnProvider({ ...input, provider: 'opencode' });
414
- }
415
- async release(name, reason) {
416
- const beforeCtx = { name, reason, baseUrl: this.baseUrl };
417
- const t0 = Date.now();
418
- await this.eventBus.emit('beforeAgentRelease', beforeCtx);
419
- try {
420
- const result = await this.transport.request(`/api/spawned/${encodeURIComponent(name)}`, {
421
- method: 'DELETE',
422
- ...(reason ? { body: JSON.stringify({ reason }) } : {}),
423
- });
424
- const afterCtx = {
425
- ...beforeCtx,
426
- durationMs: Date.now() - t0,
427
- };
428
- await this.eventBus.emit('afterAgentRelease', afterCtx);
429
- return result;
430
- }
431
- catch (err) {
432
- const afterCtx = {
433
- ...beforeCtx,
434
- error: err instanceof Error ? err : new Error(String(err)),
435
- durationMs: Date.now() - t0,
436
- };
437
- await this.eventBus.emit('afterAgentRelease', afterCtx);
438
- throw err;
439
- }
440
- }
441
- async emitAfterSpawn(beforeCtx, resolvedInput, startMs, result, error) {
442
- const afterCtx = {
443
- ...beforeCtx,
444
- resolvedInput,
445
- ...(result ? { result } : {}),
446
- ...(error !== undefined ? { error: error instanceof Error ? error : new Error(String(error)) } : {}),
447
- durationMs: Date.now() - startMs,
448
- };
449
- await this.eventBus.emit('afterAgentSpawn', afterCtx);
450
- }
451
- async listAgents() {
452
- const result = await this.transport.request('/api/spawned');
453
- return result.agents;
454
- }
455
- // ── PTY control ────────────────────────────────────────────────────
456
- async sendInput(name, data) {
457
- return this.transport.request(`/api/input/${encodeURIComponent(name)}`, {
458
- method: 'POST',
459
- body: JSON.stringify({ data }),
460
- });
461
- }
462
- openInputStream(name, options) {
463
- return this.transport.openInputStream(name, options);
464
- }
465
- async resizePty(name, rows, cols) {
466
- return this.transport.request(`/api/resize/${encodeURIComponent(name)}`, {
467
- method: 'POST',
468
- body: JSON.stringify({ rows, cols }),
469
- });
470
- }
471
- async getInboundDeliveryMode(name) {
472
- const result = await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/delivery-mode`);
473
- if (result.mode !== 'auto_inject' && result.mode !== 'manual_flush') {
474
- throw new AgentRelayProtocolError({
475
- code: 'invalid_response',
476
- message: "inbound delivery mode response missing valid 'mode'",
477
- });
478
- }
479
- return result.mode;
480
- }
481
- async setInboundDeliveryMode(name, mode) {
482
- const result = await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/delivery-mode`, {
483
- method: 'PUT',
484
- body: JSON.stringify({ mode }),
485
- });
486
- if (result.mode !== 'auto_inject' && result.mode !== 'manual_flush') {
487
- throw new AgentRelayProtocolError({
488
- code: 'invalid_response',
489
- message: "set inbound delivery mode response missing valid 'mode'",
490
- });
491
- }
492
- return {
493
- mode: result.mode,
494
- flushed: typeof result.flushed === 'number' ? result.flushed : 0,
495
- };
496
- }
497
- async getPending(name) {
498
- const result = await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/pending`);
499
- return Array.isArray(result.pending) ? result.pending : [];
500
- }
501
- async flushPending(name) {
502
- const result = await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/flush`, { method: 'POST' });
503
- return { flushed: typeof result.flushed === 'number' ? result.flushed : 0 };
504
- }
505
- async snapshot(name, format = 'plain') {
506
- return this.transport.request(`/api/spawned/${encodeURIComponent(name)}/snapshot?format=${encodeURIComponent(format)}`);
507
- }
508
- subscribeWorkerStream(name, options = {}) {
509
- this.connectEvents(options.sinceSeq);
510
- return {
511
- [Symbol.asyncIterator]: () => {
512
- const queue = [];
513
- let pending;
514
- let done = false;
515
- const unsubscribe = this.onEvent((event) => {
516
- if (event.kind !== 'worker_stream' ||
517
- event.name !== name ||
518
- (options.stream !== undefined && event.stream !== options.stream)) {
519
- return;
520
- }
521
- if (pending) {
522
- const { resolve } = pending;
523
- pending = undefined;
524
- resolve({ done: false, value: event.chunk });
525
- return;
526
- }
527
- queue.push(event.chunk);
528
- });
529
- const close = () => {
530
- done = true;
531
- unsubscribe();
532
- if (pending) {
533
- const { resolve } = pending;
534
- pending = undefined;
535
- resolve({ done: true, value: undefined });
536
- }
537
- return { done: true, value: undefined };
538
- };
539
- return {
540
- next() {
541
- if (queue.length > 0) {
542
- return Promise.resolve({ done: false, value: queue.shift() });
543
- }
544
- if (done) {
545
- return Promise.resolve({ done: true, value: undefined });
546
- }
547
- return new Promise((resolve, reject) => {
548
- pending = { resolve, reject };
549
- });
550
- },
551
- return() {
552
- return Promise.resolve(close());
553
- },
554
- throw(error) {
555
- done = true;
556
- unsubscribe();
557
- if (pending) {
558
- const { reject } = pending;
559
- pending = undefined;
560
- reject(error);
561
- }
562
- return Promise.reject(error);
563
- },
564
- [Symbol.asyncIterator]() {
565
- return this;
566
- },
567
- };
568
- },
569
- };
570
- }
571
- // ── Messaging ──────────────────────────────────────────────────────
572
- async sendMessage(input) {
573
- try {
574
- return await this.transport.request('/api/send', {
575
- method: 'POST',
576
- body: JSON.stringify({
577
- to: input.to,
578
- text: input.text,
579
- from: input.from,
580
- threadId: input.threadId,
581
- workspaceId: input.workspaceId,
582
- workspaceAlias: input.workspaceAlias,
583
- priority: input.priority,
584
- data: input.data,
585
- mode: input.mode,
586
- }),
587
- });
588
- }
589
- catch (error) {
590
- if (error instanceof AgentRelayProtocolError && error.code === 'unsupported_operation') {
591
- return { event_id: 'unsupported_operation', targets: [] };
592
- }
593
- throw error;
594
- }
595
- }
596
- // ── Model control ──────────────────────────────────────────────────
597
- async setModel(name, model, opts) {
598
- return this.transport.request(`/api/spawned/${encodeURIComponent(name)}/model`, {
599
- method: 'POST',
600
- body: JSON.stringify({ model, timeout_ms: opts?.timeoutMs }),
601
- });
602
- }
603
- // ── Channels ───────────────────────────────────────────────────────
604
- async subscribeChannels(name, channels) {
605
- await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/subscribe`, {
606
- method: 'POST',
607
- body: JSON.stringify({ channels }),
608
- });
609
- }
610
- async unsubscribeChannels(name, channels) {
611
- await this.transport.request(`/api/spawned/${encodeURIComponent(name)}/unsubscribe`, {
612
- method: 'POST',
613
- body: JSON.stringify({ channels }),
614
- });
615
- }
616
- // ── Observability ──────────────────────────────────────────────────
617
- async getMetrics(agent) {
618
- const query = agent ? `?agent=${encodeURIComponent(agent)}` : '';
619
- return this.transport.request(`/api/metrics${query}`);
620
- }
621
- async getStatus() {
622
- return this.transport.request('/api/status');
623
- }
624
- async getCrashInsights() {
625
- return this.transport.request('/api/crash-insights');
626
- }
627
- // ── Lifecycle ──────────────────────────────────────────────────────
628
- async preflight(agents) {
629
- return this.transport.request('/api/preflight', {
630
- method: 'POST',
631
- body: JSON.stringify({ agents }),
632
- });
633
- }
634
- async renewLease() {
635
- return this.transport.request('/api/session/renew', { method: 'POST' });
636
- }
637
- /**
638
- * Shut down and clean up.
639
- * - For spawned brokers (via .spawn()): sends POST /api/shutdown to kill the broker, waits for exit.
640
- * - For connected brokers (via .connect() or constructor): just disconnects the transport.
641
- * Does NOT kill the broker — the caller doesn't own it.
642
- */
643
- async shutdown() {
644
- if (this.leaseTimer) {
645
- clearInterval(this.leaseTimer);
646
- this.leaseTimer = null;
647
- }
648
- // Only send the shutdown command if we own the broker process
649
- if (this.child) {
650
- try {
651
- await this.transport.request('/api/shutdown', { method: 'POST' });
652
- }
653
- catch {
654
- // Broker may already be dead
655
- }
656
- }
657
- this.transport.disconnect();
658
- if (this.child) {
659
- await waitForExit(this.child, 5000);
660
- this.child = null;
661
- }
662
- }
663
- /** Disconnect without shutting down the broker. Alias for cases where the intent is clear. */
664
- disconnect() {
665
- if (this.leaseTimer) {
666
- clearInterval(this.leaseTimer);
667
- this.leaseTimer = null;
668
- }
669
- this.transport.disconnect();
670
- }
671
- async getConfig() {
672
- return this.transport.request('/api/config');
673
- }
674
- notifyBrokerExit(info) {
675
- if (this.brokerExitInfo)
676
- return;
677
- this.brokerExitInfo = cloneBrokerExitInfo(info);
678
- for (const listener of this.brokerExitListeners) {
679
- try {
680
- listener(cloneBrokerExitInfo(info));
681
- }
682
- catch {
683
- // Listener failures should not interfere with SDK cleanup.
684
- }
685
- }
686
- }
687
- installManagedBrokerExitHandler(child, stderrLines) {
688
- const handleExit = (code, signal) => {
689
- this.notifyBrokerExit({
690
- code,
691
- signal,
692
- pid: child.pid,
693
- recentStderr: [...stderrLines],
694
- });
695
- this.disconnectEvents();
696
- if (this.leaseTimer) {
697
- clearInterval(this.leaseTimer);
698
- this.leaseTimer = null;
699
- }
700
- if (this.child === child) {
701
- this.child = null;
702
- }
703
- };
704
- if (child.exitCode !== null || child.signalCode !== null) {
705
- handleExit(child.exitCode, child.signalCode);
706
- return;
707
- }
708
- child.once('exit', handleExit);
709
- }
710
- }
711
- // ── Helpers ──────────────────────────────────────────────────────────────
712
- /**
713
- * Parse the API URL from the broker's stdout. The broker prints:
714
- * [agent-relay] API listening on http://{bind}:{port}
715
- * Returns the full URL (e.g. "http://127.0.0.1:3889").
716
- */
717
- async function waitForApiUrl(child, timeoutMs, debug) {
718
- const { createInterface } = await import('node:readline');
719
- return new Promise((resolve, reject) => {
720
- if (!child.stdout) {
721
- reject(new Error('Broker stdout not available'));
722
- return;
723
- }
724
- let resolved = false;
725
- const rl = createInterface({ input: child.stdout });
726
- const timer = setTimeout(() => {
727
- if (!resolved) {
728
- resolved = true;
729
- rl.close();
730
- child.kill('SIGTERM');
731
- reject(new Error(formatBrokerStartupError(`Broker did not report API port within ${timeoutMs}ms`, child, debug)));
732
- }
733
- }, timeoutMs);
734
- child.on('exit', (code) => {
735
- if (!resolved) {
736
- resolved = true;
737
- clearTimeout(timer);
738
- rl.close();
739
- reject(new Error(formatBrokerStartupError(`Broker process exited with code ${code} before becoming ready`, child, debug)));
740
- }
741
- });
742
- child.on('error', (err) => {
743
- if (!resolved) {
744
- resolved = true;
745
- clearTimeout(timer);
746
- rl.close();
747
- reject(new Error(formatBrokerStartupError(`Failed to start broker: ${err.message}`, child, debug)));
748
- }
749
- });
750
- rl.on('line', (line) => {
751
- if (resolved)
752
- return;
753
- pushBufferedLine(debug.stdoutLines, line);
754
- const match = line.match(/API listening on (https?:\/\/[^\s]+)/);
755
- if (match) {
756
- resolved = true;
757
- clearTimeout(timer);
758
- rl.close();
759
- resolve(match[1]);
760
- }
761
- });
762
- });
763
- }
764
- function drainBrokerStdioAfterStartup(child) {
765
- // Drain both stdout AND stderr after startup so high-volume broker
766
- // diagnostics/events cannot fill either pipe and block the broker process.
767
- // Stderr also has a readline consumer above for line buffering/onStderr; this
768
- // raw drain is intentionally no-op and exists only to keep the stream flowing
769
- // if that consumer is changed or removed later.
770
- for (const stream of [child.stdout, child.stderr]) {
771
- if (!stream)
772
- continue;
773
- stream.on('data', () => { });
774
- stream.resume();
775
- }
776
- }
777
- /** @internal Test-only hooks; not part of the public SDK API. */
778
- export const __clientTestInternals = {
779
- drainBrokerStdioAfterStartup,
780
- };
781
- function pushBufferedLine(lines, line) {
782
- lines.push(line);
783
- if (lines.length > 40) {
784
- lines.splice(0, lines.length - 40);
785
- }
786
- }
787
- function cloneBrokerExitInfo(info) {
788
- return {
789
- ...info,
790
- recentStderr: [...info.recentStderr],
791
- };
792
- }
793
- function formatBrokerStartupError(message, child, debug) {
794
- const details = [
795
- `pid=${child.pid ?? 'unknown'}`,
796
- `cwd=${debug.cwd}`,
797
- `command=${formatCommand(debug.binaryPath, debug.args)}`,
798
- `stdout_tail=${formatBufferedLines(debug.stdoutLines)}`,
799
- `stderr_tail=${formatBufferedLines(debug.stderrLines)}`,
800
- ];
801
- return `${message} (${details.join('; ')})`;
802
- }
803
- function formatBufferedLines(lines) {
804
- if (lines.length === 0) {
805
- return '<empty>';
806
- }
807
- return lines
808
- .slice(-8)
809
- .map((line) => line.trim())
810
- .filter((line) => line.length > 0)
811
- .join(' | ');
812
- }
813
- function formatCommand(binaryPath, args) {
814
- const render = [binaryPath, ...args].map((value) => {
815
- if (/^[A-Za-z0-9_./:@=-]+$/u.test(value)) {
816
- return value;
817
- }
818
- return JSON.stringify(value);
819
- });
820
- return render.join(' ');
821
- }
822
- function waitForExit(child, timeoutMs) {
823
- return new Promise((resolve) => {
824
- if (child.exitCode !== null) {
825
- resolve();
826
- return;
827
- }
828
- const timer = setTimeout(() => {
829
- child.kill('SIGKILL');
830
- resolve();
831
- }, timeoutMs);
832
- child.on('exit', () => {
833
- clearTimeout(timer);
834
- resolve();
835
- });
836
- });
837
- }
838
- //# sourceMappingURL=client.js.map