@relayflows/sdk 2.0.9 → 2.0.11

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 (485) hide show
  1. package/dist/adapters/base.d.ts +46 -0
  2. package/dist/adapters/base.d.ts.map +1 -0
  3. package/dist/adapters/base.js +15 -0
  4. package/dist/adapters/base.js.map +1 -0
  5. package/dist/adapters/claude.d.ts +5 -0
  6. package/dist/adapters/claude.d.ts.map +1 -0
  7. package/dist/adapters/claude.js +44 -0
  8. package/dist/adapters/claude.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +5 -0
  10. package/dist/adapters/codex.d.ts.map +1 -0
  11. package/dist/adapters/codex.js +45 -0
  12. package/dist/adapters/codex.js.map +1 -0
  13. package/dist/adapters/index.d.ts +14 -0
  14. package/dist/adapters/index.d.ts.map +1 -0
  15. package/dist/adapters/index.js +29 -0
  16. package/dist/adapters/index.js.map +1 -0
  17. package/dist/adapters/wrapper.d.ts +12 -0
  18. package/dist/adapters/wrapper.d.ts.map +1 -0
  19. package/dist/adapters/wrapper.js +31 -0
  20. package/dist/adapters/wrapper.js.map +1 -0
  21. package/dist/agent-relay-receipt.d.ts +24 -0
  22. package/dist/agent-relay-receipt.d.ts.map +1 -0
  23. package/dist/agent-relay-receipt.js +66 -0
  24. package/dist/agent-relay-receipt.js.map +1 -0
  25. package/dist/agent-relay-state.d.ts +18 -0
  26. package/dist/agent-relay-state.d.ts.map +1 -0
  27. package/dist/agent-relay-state.js +58 -0
  28. package/dist/agent-relay-state.js.map +1 -0
  29. package/dist/agent-relay-transport.d.ts +31 -0
  30. package/dist/agent-relay-transport.d.ts.map +1 -0
  31. package/dist/agent-relay-transport.js +199 -0
  32. package/dist/agent-relay-transport.js.map +1 -0
  33. package/dist/authored-budget.d.ts +13 -0
  34. package/dist/authored-budget.d.ts.map +1 -0
  35. package/dist/authored-budget.js +78 -0
  36. package/dist/authored-budget.js.map +1 -0
  37. package/dist/authored-flow-error.d.ts +2 -21
  38. package/dist/authored-flow-error.d.ts.map +1 -1
  39. package/dist/authored-flow-error.js +1 -12
  40. package/dist/authored-flow-error.js.map +1 -1
  41. package/dist/authored-flow-executor.d.ts +13 -7
  42. package/dist/authored-flow-executor.d.ts.map +1 -1
  43. package/dist/authored-flow-executor.js +116 -235
  44. package/dist/authored-flow-executor.js.map +1 -1
  45. package/dist/authored-flow-loader.d.ts +10 -1
  46. package/dist/authored-flow-loader.d.ts.map +1 -1
  47. package/dist/authored-flow-loader.js +56 -3
  48. package/dist/authored-flow-loader.js.map +1 -1
  49. package/dist/authored-flow-operation.d.ts +9 -1
  50. package/dist/authored-flow-operation.d.ts.map +1 -1
  51. package/dist/authored-flow-operation.js +35 -4
  52. package/dist/authored-flow-operation.js.map +1 -1
  53. package/dist/authored-helper-effect.d.ts +12 -0
  54. package/dist/authored-helper-effect.d.ts.map +1 -0
  55. package/dist/authored-helper-effect.js +144 -0
  56. package/dist/authored-helper-effect.js.map +1 -0
  57. package/dist/authored-mcp.d.ts +17 -0
  58. package/dist/authored-mcp.d.ts.map +1 -0
  59. package/dist/authored-mcp.js +171 -0
  60. package/dist/authored-mcp.js.map +1 -0
  61. package/dist/authored-memory.d.ts +7 -0
  62. package/dist/authored-memory.d.ts.map +1 -0
  63. package/dist/authored-memory.js +60 -0
  64. package/dist/authored-memory.js.map +1 -0
  65. package/dist/authored-plugin-effect.d.ts +16 -0
  66. package/dist/authored-plugin-effect.d.ts.map +1 -0
  67. package/dist/authored-plugin-effect.js +163 -0
  68. package/dist/authored-plugin-effect.js.map +1 -0
  69. package/dist/authored-step-output.d.ts +23 -0
  70. package/dist/authored-step-output.d.ts.map +1 -0
  71. package/dist/authored-step-output.js +67 -0
  72. package/dist/authored-step-output.js.map +1 -0
  73. package/dist/authored-worker-step.d.ts +15 -0
  74. package/dist/authored-worker-step.d.ts.map +1 -0
  75. package/dist/authored-worker-step.js +136 -0
  76. package/dist/authored-worker-step.js.map +1 -0
  77. package/dist/budget-preflight.d.ts +5 -0
  78. package/dist/budget-preflight.d.ts.map +1 -0
  79. package/dist/budget-preflight.js +33 -0
  80. package/dist/budget-preflight.js.map +1 -0
  81. package/dist/budget.d.ts +14 -0
  82. package/dist/budget.d.ts.map +1 -0
  83. package/dist/budget.js +52 -0
  84. package/dist/budget.js.map +1 -0
  85. package/dist/bundle-transport.d.ts +18 -0
  86. package/dist/bundle-transport.d.ts.map +1 -0
  87. package/dist/bundle-transport.js +111 -0
  88. package/dist/bundle-transport.js.map +1 -0
  89. package/dist/bundle-typescript.d.ts +8 -0
  90. package/dist/bundle-typescript.d.ts.map +1 -0
  91. package/dist/bundle-typescript.js +108 -0
  92. package/dist/bundle-typescript.js.map +1 -0
  93. package/dist/bundle.d.ts +25 -0
  94. package/dist/bundle.d.ts.map +1 -0
  95. package/dist/bundle.js +199 -0
  96. package/dist/bundle.js.map +1 -0
  97. package/dist/child-stop.d.ts +59 -0
  98. package/dist/child-stop.d.ts.map +1 -0
  99. package/dist/child-stop.js +94 -0
  100. package/dist/child-stop.js.map +1 -0
  101. package/dist/cli/add.d.ts +6 -0
  102. package/dist/cli/add.d.ts.map +1 -0
  103. package/dist/cli/add.js +47 -0
  104. package/dist/cli/add.js.map +1 -0
  105. package/dist/cli/build.d.ts +13 -0
  106. package/dist/cli/build.d.ts.map +1 -0
  107. package/dist/cli/build.js +224 -0
  108. package/dist/cli/build.js.map +1 -0
  109. package/dist/cli/bundle-preflight.d.ts +5 -0
  110. package/dist/cli/bundle-preflight.d.ts.map +1 -0
  111. package/dist/cli/bundle-preflight.js +28 -0
  112. package/dist/cli/bundle-preflight.js.map +1 -0
  113. package/dist/cli/check-helper-body.d.ts +4 -0
  114. package/dist/cli/check-helper-body.d.ts.map +1 -0
  115. package/dist/cli/check-helper-body.js +15 -0
  116. package/dist/cli/check-helper-body.js.map +1 -0
  117. package/dist/cli/check-triggers.d.ts +14 -0
  118. package/dist/cli/check-triggers.d.ts.map +1 -0
  119. package/dist/cli/check-triggers.js +37 -0
  120. package/dist/cli/check-triggers.js.map +1 -0
  121. package/dist/cli/check-typescript.d.ts +20 -0
  122. package/dist/cli/check-typescript.d.ts.map +1 -0
  123. package/dist/cli/check-typescript.js +54 -0
  124. package/dist/cli/check-typescript.js.map +1 -0
  125. package/dist/cli/check.d.ts +36 -3
  126. package/dist/cli/check.d.ts.map +1 -1
  127. package/dist/cli/check.js +122 -11
  128. package/dist/cli/check.js.map +1 -1
  129. package/dist/cli/cloud-run.d.ts +8 -0
  130. package/dist/cli/cloud-run.d.ts.map +1 -0
  131. package/dist/cli/cloud-run.js +50 -0
  132. package/dist/cli/cloud-run.js.map +1 -0
  133. package/dist/cli/deploy.d.ts +9 -0
  134. package/dist/cli/deploy.d.ts.map +1 -0
  135. package/dist/cli/deploy.js +58 -0
  136. package/dist/cli/deploy.js.map +1 -0
  137. package/dist/cli/deterministic-failure.d.ts +5 -0
  138. package/dist/cli/deterministic-failure.d.ts.map +1 -0
  139. package/dist/cli/deterministic-failure.js +66 -0
  140. package/dist/cli/deterministic-failure.js.map +1 -0
  141. package/dist/cli/direct-run.d.ts.map +1 -1
  142. package/dist/cli/direct-run.js +83 -18
  143. package/dist/cli/direct-run.js.map +1 -1
  144. package/dist/cli/hn-monitor.d.ts.map +1 -1
  145. package/dist/cli/hn-monitor.js +2 -1
  146. package/dist/cli/hn-monitor.js.map +1 -1
  147. package/dist/cli/replay.d.ts +12 -0
  148. package/dist/cli/replay.d.ts.map +1 -0
  149. package/dist/cli/replay.js +82 -0
  150. package/dist/cli/replay.js.map +1 -0
  151. package/dist/cli/reuse.d.ts +8 -0
  152. package/dist/cli/reuse.d.ts.map +1 -0
  153. package/dist/cli/reuse.js +25 -0
  154. package/dist/cli/reuse.js.map +1 -0
  155. package/dist/cli/run-digest.d.ts +4 -0
  156. package/dist/cli/run-digest.d.ts.map +1 -0
  157. package/dist/cli/run-digest.js +24 -0
  158. package/dist/cli/run-digest.js.map +1 -0
  159. package/dist/cli/run.d.ts +16 -5
  160. package/dist/cli/run.d.ts.map +1 -1
  161. package/dist/cli/run.js +99 -17
  162. package/dist/cli/run.js.map +1 -1
  163. package/dist/cli/serve-webhook.d.ts +40 -0
  164. package/dist/cli/serve-webhook.d.ts.map +1 -0
  165. package/dist/cli/serve-webhook.js +233 -0
  166. package/dist/cli/serve-webhook.js.map +1 -0
  167. package/dist/cli/tick-runner.d.ts.map +1 -1
  168. package/dist/cli/tick-runner.js +2 -1
  169. package/dist/cli/tick-runner.js.map +1 -1
  170. package/dist/cli-adapter.d.ts +8 -14
  171. package/dist/cli-adapter.d.ts.map +1 -1
  172. package/dist/cli-adapter.js +19 -64
  173. package/dist/cli-adapter.js.map +1 -1
  174. package/dist/cli-watch.d.ts +13 -0
  175. package/dist/cli-watch.d.ts.map +1 -0
  176. package/dist/cli-watch.js +185 -0
  177. package/dist/cli-watch.js.map +1 -0
  178. package/dist/cli.d.ts +4 -0
  179. package/dist/cli.d.ts.map +1 -1
  180. package/dist/cli.js +387 -14
  181. package/dist/cli.js.map +1 -1
  182. package/dist/cloud-http.d.ts +22 -0
  183. package/dist/cloud-http.d.ts.map +1 -0
  184. package/dist/cloud-http.js +84 -0
  185. package/dist/cloud-http.js.map +1 -0
  186. package/dist/cloud-run.d.ts +38 -0
  187. package/dist/cloud-run.d.ts.map +1 -0
  188. package/dist/cloud-run.js +112 -0
  189. package/dist/cloud-run.js.map +1 -0
  190. package/dist/compile.d.ts +21 -3
  191. package/dist/compile.d.ts.map +1 -1
  192. package/dist/compile.js +97 -23
  193. package/dist/compile.js.map +1 -1
  194. package/dist/create-flow.d.ts +17 -0
  195. package/dist/create-flow.d.ts.map +1 -0
  196. package/dist/create-flow.js +72 -0
  197. package/dist/create-flow.js.map +1 -0
  198. package/dist/daemon-connection.d.ts +14 -0
  199. package/dist/daemon-connection.d.ts.map +1 -1
  200. package/dist/daemon-connection.js +33 -1
  201. package/dist/daemon-connection.js.map +1 -1
  202. package/dist/demo-hn-monitor.js +2 -1
  203. package/dist/demo-hn-monitor.js.map +1 -1
  204. package/dist/effect-channel.d.ts +30 -0
  205. package/dist/effect-channel.d.ts.map +1 -0
  206. package/dist/effect-channel.js +71 -0
  207. package/dist/effect-channel.js.map +1 -0
  208. package/dist/failure-kinds.d.ts +14 -3
  209. package/dist/failure-kinds.d.ts.map +1 -1
  210. package/dist/failure-kinds.js +27 -0
  211. package/dist/failure-kinds.js.map +1 -1
  212. package/dist/gate-contract.d.ts.map +1 -1
  213. package/dist/gate-contract.js +9 -0
  214. package/dist/gate-contract.js.map +1 -1
  215. package/dist/helper-preflight.d.ts +18 -0
  216. package/dist/helper-preflight.d.ts.map +1 -0
  217. package/dist/helper-preflight.js +32 -0
  218. package/dist/helper-preflight.js.map +1 -0
  219. package/dist/helper-storage.d.ts +5 -0
  220. package/dist/helper-storage.d.ts.map +1 -0
  221. package/dist/helper-storage.js +31 -0
  222. package/dist/helper-storage.js.map +1 -0
  223. package/dist/helper-writeback.d.ts +12 -0
  224. package/dist/helper-writeback.d.ts.map +1 -0
  225. package/dist/helper-writeback.js +95 -0
  226. package/dist/helper-writeback.js.map +1 -0
  227. package/dist/index.d.ts +10 -2
  228. package/dist/index.d.ts.map +1 -1
  229. package/dist/index.js +7 -1
  230. package/dist/index.js.map +1 -1
  231. package/dist/input-binding.d.ts +4 -0
  232. package/dist/input-binding.d.ts.map +1 -0
  233. package/dist/input-binding.js +78 -0
  234. package/dist/input-binding.js.map +1 -0
  235. package/dist/journal-client.d.ts +12 -4
  236. package/dist/journal-client.d.ts.map +1 -1
  237. package/dist/journal-client.js +17 -6
  238. package/dist/journal-client.js.map +1 -1
  239. package/dist/journal-offset.d.ts +3 -0
  240. package/dist/journal-offset.d.ts.map +1 -0
  241. package/dist/journal-offset.js +69 -0
  242. package/dist/journal-offset.js.map +1 -0
  243. package/dist/journal-reader.d.ts +30 -0
  244. package/dist/journal-reader.d.ts.map +1 -0
  245. package/dist/journal-reader.js +156 -0
  246. package/dist/journal-reader.js.map +1 -0
  247. package/dist/json-schema.d.ts +2 -0
  248. package/dist/json-schema.d.ts.map +1 -1
  249. package/dist/json-schema.js +38 -22
  250. package/dist/json-schema.js.map +1 -1
  251. package/dist/llm-worker.d.ts +16 -0
  252. package/dist/llm-worker.d.ts.map +1 -0
  253. package/dist/llm-worker.js +79 -0
  254. package/dist/llm-worker.js.map +1 -0
  255. package/dist/local-agent.d.ts +8 -0
  256. package/dist/local-agent.d.ts.map +1 -0
  257. package/dist/local-agent.js +25 -0
  258. package/dist/local-agent.js.map +1 -0
  259. package/dist/mcp-client.d.ts +15 -0
  260. package/dist/mcp-client.d.ts.map +1 -0
  261. package/dist/mcp-client.js +104 -0
  262. package/dist/mcp-client.js.map +1 -0
  263. package/dist/mcp-config.d.ts +4 -0
  264. package/dist/mcp-config.d.ts.map +1 -0
  265. package/dist/mcp-config.js +61 -0
  266. package/dist/mcp-config.js.map +1 -0
  267. package/dist/mcp-stdio.d.ts +24 -0
  268. package/dist/mcp-stdio.d.ts.map +1 -0
  269. package/dist/mcp-stdio.js +89 -0
  270. package/dist/mcp-stdio.js.map +1 -0
  271. package/dist/model-pricing.d.ts +22 -0
  272. package/dist/model-pricing.d.ts.map +1 -0
  273. package/dist/model-pricing.js +30 -0
  274. package/dist/model-pricing.js.map +1 -0
  275. package/dist/mount-registry.d.ts +9 -0
  276. package/dist/mount-registry.d.ts.map +1 -0
  277. package/dist/mount-registry.js +47 -0
  278. package/dist/mount-registry.js.map +1 -0
  279. package/dist/named-gate-lowering.d.ts +9 -0
  280. package/dist/named-gate-lowering.d.ts.map +1 -0
  281. package/dist/named-gate-lowering.js +152 -0
  282. package/dist/named-gate-lowering.js.map +1 -0
  283. package/dist/named-gates.d.ts +10 -0
  284. package/dist/named-gates.d.ts.map +1 -0
  285. package/dist/named-gates.js +69 -0
  286. package/dist/named-gates.js.map +1 -0
  287. package/dist/observer-link.d.ts +129 -0
  288. package/dist/observer-link.d.ts.map +1 -0
  289. package/dist/observer-link.js +274 -0
  290. package/dist/observer-link.js.map +1 -0
  291. package/dist/plugin-loader.d.ts +13 -0
  292. package/dist/plugin-loader.d.ts.map +1 -0
  293. package/dist/plugin-loader.js +110 -0
  294. package/dist/plugin-loader.js.map +1 -0
  295. package/dist/plugin-manifest.d.ts +27 -0
  296. package/dist/plugin-manifest.d.ts.map +1 -0
  297. package/dist/plugin-manifest.js +89 -0
  298. package/dist/plugin-manifest.js.map +1 -0
  299. package/dist/preflight.d.ts +26 -2
  300. package/dist/preflight.d.ts.map +1 -1
  301. package/dist/preflight.js +175 -1
  302. package/dist/preflight.js.map +1 -1
  303. package/dist/progress.d.ts +14 -0
  304. package/dist/progress.d.ts.map +1 -0
  305. package/dist/progress.js +39 -0
  306. package/dist/progress.js.map +1 -0
  307. package/dist/protocol.d.ts +11 -0
  308. package/dist/protocol.d.ts.map +1 -1
  309. package/dist/pty-sidechannel.d.ts +14 -0
  310. package/dist/pty-sidechannel.d.ts.map +1 -0
  311. package/dist/pty-sidechannel.js +103 -0
  312. package/dist/pty-sidechannel.js.map +1 -0
  313. package/dist/scope-compiler.d.ts +52 -0
  314. package/dist/scope-compiler.d.ts.map +1 -0
  315. package/dist/scope-compiler.js +62 -0
  316. package/dist/scope-compiler.js.map +1 -0
  317. package/dist/slack-preflight.d.ts +6 -0
  318. package/dist/slack-preflight.d.ts.map +1 -0
  319. package/dist/slack-preflight.js +28 -0
  320. package/dist/slack-preflight.js.map +1 -0
  321. package/dist/slack-writeback.d.ts +40 -0
  322. package/dist/slack-writeback.d.ts.map +1 -0
  323. package/dist/slack-writeback.js +60 -0
  324. package/dist/slack-writeback.js.map +1 -0
  325. package/dist/spec.d.ts +134 -4
  326. package/dist/spec.d.ts.map +1 -1
  327. package/dist/spec.js.map +1 -1
  328. package/dist/step-dependencies.d.ts.map +1 -1
  329. package/dist/step-dependencies.js +2 -1
  330. package/dist/step-dependencies.js.map +1 -1
  331. package/dist/step-fields.d.ts +4 -4
  332. package/dist/step-fields.d.ts.map +1 -1
  333. package/dist/step-fields.js +5 -2
  334. package/dist/step-fields.js.map +1 -1
  335. package/dist/trigger-executor.d.ts +7 -0
  336. package/dist/trigger-executor.d.ts.map +1 -0
  337. package/dist/trigger-executor.js +35 -0
  338. package/dist/trigger-executor.js.map +1 -0
  339. package/dist/validate.d.ts.map +1 -1
  340. package/dist/validate.js +53 -6
  341. package/dist/validate.js.map +1 -1
  342. package/dist/webhook-rate-limit.d.ts +29 -0
  343. package/dist/webhook-rate-limit.d.ts.map +1 -0
  344. package/dist/webhook-rate-limit.js +38 -0
  345. package/dist/webhook-rate-limit.js.map +1 -0
  346. package/dist/webhook-signature.d.ts +22 -0
  347. package/dist/webhook-signature.d.ts.map +1 -0
  348. package/dist/webhook-signature.js +53 -0
  349. package/dist/webhook-signature.js.map +1 -0
  350. package/dist/worker-cli.d.ts +16 -1
  351. package/dist/worker-cli.d.ts.map +1 -1
  352. package/dist/worker-cli.js +129 -12
  353. package/dist/worker-cli.js.map +1 -1
  354. package/dist/worker-input.d.ts +4 -0
  355. package/dist/worker-input.d.ts.map +1 -0
  356. package/dist/worker-input.js +14 -0
  357. package/dist/worker-input.js.map +1 -0
  358. package/dist/worker-lease.d.ts +5 -0
  359. package/dist/worker-lease.d.ts.map +1 -0
  360. package/dist/worker-lease.js +80 -0
  361. package/dist/worker-lease.js.map +1 -0
  362. package/dist/worker-spend.d.ts +19 -0
  363. package/dist/worker-spend.d.ts.map +1 -0
  364. package/dist/worker-spend.js +22 -0
  365. package/dist/worker-spend.js.map +1 -0
  366. package/dist/worker-usage.d.ts +7 -0
  367. package/dist/worker-usage.d.ts.map +1 -0
  368. package/dist/worker-usage.js +54 -0
  369. package/dist/worker-usage.js.map +1 -0
  370. package/dist/worker.d.ts +2 -0
  371. package/dist/worker.d.ts.map +1 -1
  372. package/dist/worker.js +29 -9
  373. package/dist/worker.js.map +1 -1
  374. package/dist/wrapper-session.d.ts +1 -1
  375. package/dist/wrapper-session.d.ts.map +1 -1
  376. package/dist/wrapper-session.js +56 -19
  377. package/dist/wrapper-session.js.map +1 -1
  378. package/dist/yaml-helper-effect.d.ts +8 -0
  379. package/dist/yaml-helper-effect.d.ts.map +1 -0
  380. package/dist/yaml-helper-effect.js +79 -0
  381. package/dist/yaml-helper-effect.js.map +1 -0
  382. package/dist/yaml-helpers.d.ts +18 -0
  383. package/dist/yaml-helpers.d.ts.map +1 -0
  384. package/dist/yaml-helpers.js +116 -0
  385. package/dist/yaml-helpers.js.map +1 -0
  386. package/package.json +19 -2
  387. package/src/adapters/base.ts +53 -0
  388. package/src/adapters/claude.ts +55 -0
  389. package/src/adapters/codex.ts +56 -0
  390. package/src/adapters/index.ts +36 -0
  391. package/src/adapters/wrapper.ts +42 -0
  392. package/src/agent-relay-receipt.ts +120 -0
  393. package/src/agent-relay-state.ts +73 -0
  394. package/src/agent-relay-transport.ts +273 -0
  395. package/src/authored-budget.ts +69 -0
  396. package/src/authored-flow-error.ts +10 -10
  397. package/src/authored-flow-executor.ts +171 -347
  398. package/src/authored-flow-loader.ts +60 -3
  399. package/src/authored-flow-operation.ts +38 -5
  400. package/src/authored-helper-effect.ts +143 -0
  401. package/src/authored-mcp.ts +166 -0
  402. package/src/authored-memory.ts +55 -0
  403. package/src/authored-plugin-effect.ts +152 -0
  404. package/src/authored-step-output.ts +107 -0
  405. package/src/authored-worker-step.ts +181 -0
  406. package/src/budget-preflight.ts +31 -0
  407. package/src/budget.ts +49 -0
  408. package/src/bundle-transport.ts +79 -0
  409. package/src/bundle-typescript.ts +98 -0
  410. package/src/bundle.ts +182 -0
  411. package/src/child-stop.ts +138 -0
  412. package/src/cli/add.ts +45 -0
  413. package/src/cli/build.ts +214 -0
  414. package/src/cli/bundle-preflight.ts +28 -0
  415. package/src/cli/check-helper-body.ts +14 -0
  416. package/src/cli/check-triggers.ts +41 -0
  417. package/src/cli/check-typescript.ts +63 -0
  418. package/src/cli/check.ts +132 -14
  419. package/src/cli/cloud-run.ts +47 -0
  420. package/src/cli/deploy.ts +52 -0
  421. package/src/cli/deterministic-failure.ts +69 -0
  422. package/src/cli/direct-run.ts +79 -18
  423. package/src/cli/hn-monitor.ts +2 -1
  424. package/src/cli/replay.ts +81 -0
  425. package/src/cli/reuse.ts +23 -0
  426. package/src/cli/run-digest.ts +24 -0
  427. package/src/cli/run.ts +104 -21
  428. package/src/cli/serve-webhook.ts +246 -0
  429. package/src/cli/tick-runner.ts +2 -1
  430. package/src/cli-adapter.ts +31 -74
  431. package/src/cli-watch.ts +174 -0
  432. package/src/cli.ts +396 -17
  433. package/src/cloud-http.ts +100 -0
  434. package/src/cloud-run.ts +137 -0
  435. package/src/compile.ts +102 -23
  436. package/src/create-flow.ts +82 -0
  437. package/src/daemon-connection.ts +32 -1
  438. package/src/demo-hn-monitor.ts +2 -1
  439. package/src/effect-channel.ts +97 -0
  440. package/src/failure-kinds.ts +38 -0
  441. package/src/gate-contract.ts +7 -0
  442. package/src/helper-preflight.ts +34 -0
  443. package/src/helper-storage.ts +23 -0
  444. package/src/helper-writeback.ts +83 -0
  445. package/src/index.ts +26 -0
  446. package/src/input-binding.ts +76 -0
  447. package/src/journal-client.ts +20 -7
  448. package/src/journal-offset.ts +60 -0
  449. package/src/journal-reader.ts +165 -0
  450. package/src/json-schema.ts +34 -18
  451. package/src/llm-worker.ts +82 -0
  452. package/src/local-agent.ts +30 -0
  453. package/src/mcp-client.ts +97 -0
  454. package/src/mcp-config.ts +42 -0
  455. package/src/mcp-stdio.ts +84 -0
  456. package/src/model-pricing.ts +32 -0
  457. package/src/mount-registry.ts +44 -0
  458. package/src/named-gate-lowering.ts +147 -0
  459. package/src/named-gates.ts +76 -0
  460. package/src/observer-link.ts +368 -0
  461. package/src/plugin-loader.ts +88 -0
  462. package/src/plugin-manifest.ts +76 -0
  463. package/src/preflight.ts +178 -4
  464. package/src/progress.ts +51 -0
  465. package/src/protocol.ts +12 -0
  466. package/src/pty-sidechannel.ts +92 -0
  467. package/src/scope-compiler.ts +105 -0
  468. package/src/slack-preflight.ts +25 -0
  469. package/src/slack-writeback.ts +63 -0
  470. package/src/spec.ts +112 -4
  471. package/src/step-dependencies.ts +3 -1
  472. package/src/step-fields.ts +5 -2
  473. package/src/trigger-executor.ts +34 -0
  474. package/src/validate.ts +47 -6
  475. package/src/webhook-rate-limit.ts +69 -0
  476. package/src/webhook-signature.ts +74 -0
  477. package/src/worker-cli.ts +150 -11
  478. package/src/worker-input.ts +15 -0
  479. package/src/worker-lease.ts +85 -0
  480. package/src/worker-spend.ts +23 -0
  481. package/src/worker-usage.ts +48 -0
  482. package/src/worker.ts +34 -10
  483. package/src/wrapper-session.ts +50 -15
  484. package/src/yaml-helper-effect.ts +78 -0
  485. package/src/yaml-helpers.ts +131 -0
@@ -0,0 +1,273 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isIP } from "node:net";
3
+ import { setTimeout as delay } from "node:timers/promises";
4
+ import { claimRelayTask } from "./agent-relay-state.js";
5
+ import { canonicalize } from "./canonical.js";
6
+ import {
7
+ isRecord,
8
+ nonempty,
9
+ readTaskReceipt,
10
+ type RelayTaskReceipt,
11
+ } from "./agent-relay-receipt.js";
12
+
13
+ export type AgentTransport = "direct" | "relay";
14
+ export interface AgentRelayTaskRequest {
15
+ cli: string;
16
+ task: string;
17
+ model?: string;
18
+ worker_cwd?: string;
19
+ result_schema?: unknown;
20
+ runId: string;
21
+ stepId: string;
22
+ idempotencyKey: string;
23
+ dataDir: string;
24
+ /** Engine task contract ceiling; bounded independently of the renewing lease. */
25
+ timeoutMs?: number;
26
+ }
27
+ export interface AgentRelayEnv {
28
+ baseUrl?: string;
29
+ agentToken?: string;
30
+ }
31
+ export class AgentRelayTransportError extends Error {
32
+ constructor(
33
+ message: string,
34
+ public readonly cause?: unknown,
35
+ ) {
36
+ super(message);
37
+ this.name = "AgentRelayTransportError";
38
+ }
39
+ }
40
+ export function readAgentRelayEnv(
41
+ env: NodeJS.ProcessEnv = process.env,
42
+ ): Required<AgentRelayEnv> {
43
+ const agentToken = env.RELAY_AGENT_TOKEN?.trim();
44
+ if (!agentToken)
45
+ throw new AgentRelayTransportError(
46
+ "Relay task transport requires a pre-provisioned RELAY_AGENT_TOKEN.",
47
+ );
48
+ return {
49
+ baseUrl: env.RELAY_BASE_URL?.trim() || "https://cast.agentrelay.com",
50
+ agentToken,
51
+ };
52
+ }
53
+
54
+ /** Exact Relaycast #436 HTTP contract. Only terminal GET receipts can return. */
55
+ export async function runAgentRelayTask(
56
+ request: AgentRelayTaskRequest,
57
+ options: AgentRelayEnv & {
58
+ fetch?: typeof fetch;
59
+ signal?: AbortSignal;
60
+ pollMs?: number;
61
+ } = {},
62
+ ): Promise<RelayTaskReceipt> {
63
+ const env = options.agentToken
64
+ ? {
65
+ baseUrl: options.baseUrl || "https://cast.agentrelay.com",
66
+ agentToken: options.agentToken,
67
+ }
68
+ : { ...readAgentRelayEnv(), ...options };
69
+ const base = new URL(env.baseUrl!);
70
+ if (
71
+ base.username ||
72
+ base.password ||
73
+ base.search ||
74
+ base.hash ||
75
+ base.pathname !== "/" ||
76
+ !["https:", "http:"].includes(base.protocol)
77
+ )
78
+ throw new AgentRelayTransportError("Invalid Relay task base URL");
79
+ const loopback =
80
+ base.hostname === "[::1]" ||
81
+ (isIP(base.hostname) === 4 && base.hostname.startsWith("127."));
82
+ if (base.protocol !== "https:" && !loopback) {
83
+ throw new AgentRelayTransportError(
84
+ "Relay task credentials require HTTPS outside literal loopback addresses",
85
+ );
86
+ }
87
+ const baseUrl = base.origin;
88
+ const timeoutMs = request.timeoutMs ?? 86_400_000;
89
+ if (
90
+ !Number.isSafeInteger(timeoutMs) ||
91
+ timeoutMs < 1 ||
92
+ timeoutMs > 86_400_000 ||
93
+ ![
94
+ request.runId,
95
+ request.stepId,
96
+ request.idempotencyKey,
97
+ request.dataDir,
98
+ request.cli,
99
+ ].every(nonempty)
100
+ ) {
101
+ throw new AgentRelayTransportError(
102
+ "Relay task requires durable dispatch identity and a valid deadline",
103
+ );
104
+ }
105
+ const pollMs = options.pollMs ?? 1000;
106
+ if (!Number.isFinite(pollMs) || pollMs < 1)
107
+ throw new AgentRelayTransportError("Invalid Relay task polling interval");
108
+ const doFetch = options.fetch ?? globalThis.fetch;
109
+ const outer = options.signal ?? new AbortController().signal;
110
+ let deadline = Date.now() + timeoutMs + 30_000;
111
+ let missingDeadline = Date.now() + 30_000;
112
+ async function http(
113
+ path: string,
114
+ body?: unknown,
115
+ ): Promise<Record<string, unknown>> {
116
+ for (;;) {
117
+ outer.throwIfAborted();
118
+ if (Date.now() >= deadline)
119
+ throw new AgentRelayTransportError(
120
+ "Relay task status unavailable before its reconciliation deadline",
121
+ );
122
+ const bounded = AbortSignal.any([
123
+ outer,
124
+ AbortSignal.timeout(
125
+ Math.min(15_000, Math.max(1, deadline - Date.now())),
126
+ ),
127
+ ]);
128
+ let response: Response | undefined;
129
+ let value: unknown;
130
+ try {
131
+ response = await doFetch(new URL(path, baseUrl), {
132
+ method: body === undefined ? "GET" : "POST",
133
+ redirect: "error",
134
+ signal: bounded,
135
+ headers: {
136
+ authorization: `Bearer ${env.agentToken}`,
137
+ "content-type": "application/json",
138
+ ...(body === undefined
139
+ ? {}
140
+ : { "Idempotency-Key": request.idempotencyKey }),
141
+ },
142
+ ...(body === undefined ? {} : { body: canonicalize(body) }),
143
+ });
144
+ if (
145
+ response.status === 404 &&
146
+ body === undefined &&
147
+ path.includes("/invocations/")
148
+ ) {
149
+ if (Date.now() >= missingDeadline)
150
+ throw new AgentRelayTransportError(
151
+ "Relay task dispatch remains unconfirmed; no repeat POST is permitted",
152
+ );
153
+ } else if (
154
+ !response.ok &&
155
+ response.status !== 429 &&
156
+ response.status < 500
157
+ ) {
158
+ // Never copy untrusted response bodies, URLs, or tokens into diagnostics.
159
+ throw new AgentRelayTransportError(
160
+ `Relay task request refused with HTTP ${response.status}`,
161
+ );
162
+ }
163
+ if (response.ok) value = await response.json();
164
+ if (body !== undefined && !response.ok) return {}; // ambiguous POST: GET only below
165
+ } catch (error) {
166
+ outer.throwIfAborted();
167
+ if (error instanceof AgentRelayTransportError) throw error;
168
+ if (body !== undefined) return {}; // response loss or invalid JSON never causes another POST
169
+ if (response?.ok && !bounded.aborted)
170
+ throw new AgentRelayTransportError(
171
+ "Relay task response was not valid JSON",
172
+ );
173
+ }
174
+ outer.throwIfAborted();
175
+ if (response?.ok && value !== undefined) {
176
+ if (!isRecord(value) || value.ok !== true || !isRecord(value.data))
177
+ throw new AgentRelayTransportError(
178
+ "Relay task response has an invalid data envelope",
179
+ );
180
+ return value.data;
181
+ }
182
+ await delay(pollMs, undefined, { signal: outer });
183
+ }
184
+ }
185
+ // Resolving the agent is read-only. Pin identity before any invocation so a
186
+ // restarted runner cannot create a second task using another caller's key.
187
+ const agent = await http("/v1/agent");
188
+ if (!nonempty(agent.id))
189
+ throw new AgentRelayTransportError("Relay task caller identity is missing");
190
+ if (!nonempty(agent.workspace_id))
191
+ throw new AgentRelayTransportError(
192
+ "Relay task workspace identity is missing",
193
+ );
194
+ // Pinned action-invoke-v1 identity contract from Relaycast #436.
195
+ const invocationId =
196
+ "inv_idem_" +
197
+ createHash("sha256")
198
+ .update(
199
+ [
200
+ "action-invoke-v1",
201
+ agent.workspace_id,
202
+ agent.id,
203
+ "task.run",
204
+ request.idempotencyKey,
205
+ ].join("\0"),
206
+ )
207
+ .digest("hex");
208
+ const input = {
209
+ cli: request.cli,
210
+ task: request.task,
211
+ ...(request.model === undefined ? {} : { model: request.model }),
212
+ ...(request.worker_cwd === undefined
213
+ ? {}
214
+ : { worker_cwd: request.worker_cwd }),
215
+ ...(request.result_schema === undefined
216
+ ? {}
217
+ : { result_schema: request.result_schema }),
218
+ task_context: {
219
+ run_id: request.runId,
220
+ step_id: request.stepId,
221
+ dispatch_id: request.idempotencyKey,
222
+ timeout_ms: timeoutMs,
223
+ },
224
+ };
225
+ const { claim, created } = await claimRelayTask(request.dataDir, {
226
+ version: 1,
227
+ baseUrl,
228
+ callerId: agent.id,
229
+ workspaceId: agent.workspace_id,
230
+ invocationId,
231
+ runId: request.runId,
232
+ stepId: request.stepId,
233
+ idempotencyKey: request.idempotencyKey,
234
+ input,
235
+ startedAt: Date.now(),
236
+ });
237
+ // A restarted runner may recover a terminal receipt after the task deadline.
238
+ // Give that read one bounded window; never reopen or extend the remote task.
239
+ deadline = Math.max(
240
+ claim.startedAt + timeoutMs + 30_000,
241
+ Date.now() + 15_000,
242
+ );
243
+ missingDeadline = claim.startedAt + 30_000;
244
+ if (created) {
245
+ const ack = await http("/v1/actions/task.run/invoke", { input });
246
+ if (
247
+ Object.keys(ack).length &&
248
+ (ack.invocation_id !== invocationId ||
249
+ ack.action_name !== "task.run" ||
250
+ canonicalize(ack.input) !== canonicalize(input))
251
+ ) {
252
+ throw new AgentRelayTransportError(
253
+ "Relay task acknowledgment has mismatched invocation or input",
254
+ );
255
+ }
256
+ }
257
+ let previous: RelayTaskReceipt | undefined;
258
+ for (;;) {
259
+ const value = await http(
260
+ `/v1/actions/task.run/invocations/${encodeURIComponent(invocationId)}`,
261
+ );
262
+ if (value.caller_id !== agent.id)
263
+ throw new AgentRelayTransportError(
264
+ "Relay task receipt belongs to another caller",
265
+ );
266
+ const receipt = readTaskReceipt(value, invocationId, input, previous);
267
+ outer.throwIfAborted();
268
+ if (receipt.status === "completed" || receipt.status === "failed")
269
+ return receipt;
270
+ previous = receipt;
271
+ await delay(pollMs, undefined, { signal: outer });
272
+ }
273
+ }
@@ -0,0 +1,69 @@
1
+ import { BudgetSyntaxError, parseBudget, toKernelBudget } from './budget.js';
2
+ import { AuthoredFlowExecutionError } from './authored-flow-error.js';
3
+ import type { JournalClient } from './journal-client.js';
4
+ import type { RunOutcome } from './protocol.js';
5
+ import type { KernelBudgetSpec, KernelRunSpec } from './spec.js';
6
+
7
+ /** Serialized admission for the internal authored runner's separate step runs. */
8
+ export class AuthoredBudget {
9
+ private readonly limit: KernelBudgetSpec | undefined;
10
+ private failed = false;
11
+ private tail: Promise<unknown> = Promise.resolve();
12
+ private charges: { input: bigint; output: bigint; micro: bigint; ms: bigint; day: number }[] = [];
13
+
14
+ constructor(header: unknown) {
15
+ try {
16
+ this.limit = header === undefined ? undefined : toKernelBudget(parseBudget(header));
17
+ } catch (error) {
18
+ if (error instanceof BudgetSyntaxError) throw new AuthoredFlowExecutionError('budget_syntax_invalid', error.message);
19
+ throw error;
20
+ }
21
+ }
22
+
23
+ async execute<T>(journal: JournalClient, spec: KernelRunSpec, consume: (outcome: RunOutcome) => Promise<T>): Promise<T> {
24
+ if (this.limit === undefined) return consume(await journal.runStart(spec));
25
+ const previous = this.tail;
26
+ let release!: () => void;
27
+ this.tail = new Promise<void>(resolve => { release = resolve; });
28
+ await previous;
29
+ try {
30
+ if (this.failed) throw new AuthoredFlowExecutionError('step_failed', 'A prior budgeted step did not finish successfully.');
31
+ // Window selection follows journal timestamps, never the SDK host clock.
32
+ const day = this.charges.at(-1)?.day;
33
+ const total = this.charges.filter(c => this.limit!.window !== 'day' || c.day === day)
34
+ .reduce((s, c) => ({ input: s.input + c.input, output: s.output + c.output, micro: s.micro + c.micro, ms: s.ms + c.ms }),
35
+ { input: 0n, output: 0n, micro: 0n, ms: 0n });
36
+ const exactNumber = (n: bigint) => { if (n > BigInt(Number.MAX_SAFE_INTEGER)) throw new Error('budget counter overflow'); return Number(n); };
37
+ const outcome = await journal.runStart({ ...spec, budget: { ...this.limit, prior_spend: {
38
+ tokens_in: exactNumber(total.input), tokens_out: exactNumber(total.output),
39
+ dollars: `${total.micro / 1_000_000n}.${String(total.micro % 1_000_000n).padStart(6, '0')}`,
40
+ wallclock_ms: exactNumber(total.ms), ...(this.limit.window === 'day' && day !== undefined ? { day } : {}),
41
+ } } });
42
+ try {
43
+ if (outcome.completion_reason === 'budget_exceeded') throw new AuthoredFlowExecutionError('step_failed', 'Flow budget exceeded before the next step.', 'budget_exceeded', outcome.run_id);
44
+ return await consume(outcome);
45
+ } finally {
46
+ let seq = 1;
47
+ for (;;) {
48
+ const { entries } = await journal.journalRead(outcome.run_id, seq);
49
+ if (entries.length === 0) break;
50
+ for (const raw of entries) {
51
+ const e = raw as {seq: number; entry_type: string; at_ms: number; payload: {budget?: {tokens_in: number; tokens_out: number; dollars: string}; spend?: {wallclock_ms: number}}};
52
+ seq = e.seq + 1;
53
+ if (!['step.completed', 'memory.injected'].includes(e.entry_type)) continue;
54
+ const b = e.payload.budget;
55
+ if (b === undefined) throw new Error('journal completion missing budget');
56
+ const [whole, fraction = ''] = b.dollars.split('.');
57
+ if (fraction.length > 6 && /[1-9]/.test(fraction.slice(6))) throw new Error('budget accounting requires microdollar precision');
58
+ this.charges.push({input: BigInt(b.tokens_in), output: BigInt(b.tokens_out),
59
+ micro: BigInt(whole!) * 1_000_000n + BigInt(fraction.slice(0, 6).padEnd(6, '0')),
60
+ ms: BigInt(e.payload.spend?.wallclock_ms ?? 0), day: Math.floor(e.at_ms / 86_400_000)});
61
+ }
62
+ }
63
+ }
64
+ } catch (error) {
65
+ this.failed = true;
66
+ throw error;
67
+ } finally { release(); }
68
+ }
69
+ }
@@ -1,18 +1,27 @@
1
- import type { CheckFailureKind } from './failure-kinds.js';
2
1
  import type {
3
2
  CompletionReason as ProtocolCompletionReason,
4
3
  RunCompletionReason as ProtocolRunCompletionReason,
5
4
  } from './protocol.js';
6
5
 
7
6
  export type AuthoredFlowExecutionErrorCode =
7
+ | 'helper_provider.mount_required'
8
+ | 'helper_provider.unsupported'
9
+ | 'helper_slack.credential_missing'
10
+ | 'helper_slack.mount_required'
11
+ | 'budget_syntax_invalid'
12
+ | 'budget_missing_price'
8
13
  | 'agent_cli_unresolved'
9
14
  | 'agent_parked'
15
+ | 'llm_cli_unresolved'
16
+ | 'llm_parked'
10
17
  | 'duplicate_completion'
11
18
  | 'journal_protocol_violation'
12
19
  | 'missing_completion'
20
+ | 'memory_unreachable'
13
21
  | 'operation_after_completion'
14
22
  | 'operation_callback_failed'
15
23
  | 'step_failed'
24
+ | 'lease_exceeded'
16
25
  | 'unsupported_completion'
17
26
  | 'unsupported_gate'
18
27
  | 'unsupported_header'
@@ -28,15 +37,6 @@ export class AuthoredFlowExecutionError extends Error {
28
37
  message: string,
29
38
  readonly completionReason?: ProtocolCompletionReason | ProtocolRunCompletionReason,
30
39
  readonly runId?: string,
31
- /**
32
- * Set only for `code === 'agent_cli_unresolved'`: the specific preflight
33
- * refusal kind (`cli_missing`, `model_unknown`, `model_unavailable`, ...)
34
- * `checkAuthoredFlow` actually produced, so a caller can distinguish a bad
35
- * model declaration from a missing CLI the same way the declarative
36
- * `flows check` path's `report.diagnostics[].kind` already lets it —
37
- * collapsing every refusal to one generic code would lose that taxonomy.
38
- */
39
- readonly refusalKind?: CheckFailureKind,
40
40
  ) {
41
41
  super(`${code}: ${message}`);
42
42
  this.name = 'AuthoredFlowExecutionError';