@relayflows/sdk 2.0.8 → 2.0.10

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 (474) 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-transport.d.ts +84 -0
  22. package/dist/agent-relay-transport.d.ts.map +1 -0
  23. package/dist/agent-relay-transport.js +134 -0
  24. package/dist/agent-relay-transport.js.map +1 -0
  25. package/dist/authored-budget.d.ts +13 -0
  26. package/dist/authored-budget.d.ts.map +1 -0
  27. package/dist/authored-budget.js +78 -0
  28. package/dist/authored-budget.js.map +1 -0
  29. package/dist/authored-flow-error.d.ts +1 -1
  30. package/dist/authored-flow-error.d.ts.map +1 -1
  31. package/dist/authored-flow-error.js.map +1 -1
  32. package/dist/authored-flow-executor.d.ts +13 -7
  33. package/dist/authored-flow-executor.d.ts.map +1 -1
  34. package/dist/authored-flow-executor.js +115 -194
  35. package/dist/authored-flow-executor.js.map +1 -1
  36. package/dist/authored-flow-loader.d.ts +10 -1
  37. package/dist/authored-flow-loader.d.ts.map +1 -1
  38. package/dist/authored-flow-loader.js +56 -3
  39. package/dist/authored-flow-loader.js.map +1 -1
  40. package/dist/authored-flow-operation.d.ts +9 -1
  41. package/dist/authored-flow-operation.d.ts.map +1 -1
  42. package/dist/authored-flow-operation.js +35 -4
  43. package/dist/authored-flow-operation.js.map +1 -1
  44. package/dist/authored-helper-effect.d.ts +12 -0
  45. package/dist/authored-helper-effect.d.ts.map +1 -0
  46. package/dist/authored-helper-effect.js +144 -0
  47. package/dist/authored-helper-effect.js.map +1 -0
  48. package/dist/authored-mcp.d.ts +17 -0
  49. package/dist/authored-mcp.d.ts.map +1 -0
  50. package/dist/authored-mcp.js +171 -0
  51. package/dist/authored-mcp.js.map +1 -0
  52. package/dist/authored-memory.d.ts +7 -0
  53. package/dist/authored-memory.d.ts.map +1 -0
  54. package/dist/authored-memory.js +60 -0
  55. package/dist/authored-memory.js.map +1 -0
  56. package/dist/authored-plugin-effect.d.ts +16 -0
  57. package/dist/authored-plugin-effect.d.ts.map +1 -0
  58. package/dist/authored-plugin-effect.js +163 -0
  59. package/dist/authored-plugin-effect.js.map +1 -0
  60. package/dist/authored-step-output.d.ts +23 -0
  61. package/dist/authored-step-output.d.ts.map +1 -0
  62. package/dist/authored-step-output.js +67 -0
  63. package/dist/authored-step-output.js.map +1 -0
  64. package/dist/authored-worker-step.d.ts +15 -0
  65. package/dist/authored-worker-step.d.ts.map +1 -0
  66. package/dist/authored-worker-step.js +136 -0
  67. package/dist/authored-worker-step.js.map +1 -0
  68. package/dist/budget-preflight.d.ts +5 -0
  69. package/dist/budget-preflight.d.ts.map +1 -0
  70. package/dist/budget-preflight.js +33 -0
  71. package/dist/budget-preflight.js.map +1 -0
  72. package/dist/budget.d.ts +14 -0
  73. package/dist/budget.d.ts.map +1 -0
  74. package/dist/budget.js +52 -0
  75. package/dist/budget.js.map +1 -0
  76. package/dist/bundle-transport.d.ts +18 -0
  77. package/dist/bundle-transport.d.ts.map +1 -0
  78. package/dist/bundle-transport.js +111 -0
  79. package/dist/bundle-transport.js.map +1 -0
  80. package/dist/bundle-typescript.d.ts +8 -0
  81. package/dist/bundle-typescript.d.ts.map +1 -0
  82. package/dist/bundle-typescript.js +108 -0
  83. package/dist/bundle-typescript.js.map +1 -0
  84. package/dist/bundle.d.ts +25 -0
  85. package/dist/bundle.d.ts.map +1 -0
  86. package/dist/bundle.js +199 -0
  87. package/dist/bundle.js.map +1 -0
  88. package/dist/child-stop.d.ts +59 -0
  89. package/dist/child-stop.d.ts.map +1 -0
  90. package/dist/child-stop.js +94 -0
  91. package/dist/child-stop.js.map +1 -0
  92. package/dist/cli/add.d.ts +6 -0
  93. package/dist/cli/add.d.ts.map +1 -0
  94. package/dist/cli/add.js +47 -0
  95. package/dist/cli/add.js.map +1 -0
  96. package/dist/cli/build.d.ts +13 -0
  97. package/dist/cli/build.d.ts.map +1 -0
  98. package/dist/cli/build.js +224 -0
  99. package/dist/cli/build.js.map +1 -0
  100. package/dist/cli/bundle-preflight.d.ts +5 -0
  101. package/dist/cli/bundle-preflight.d.ts.map +1 -0
  102. package/dist/cli/bundle-preflight.js +28 -0
  103. package/dist/cli/bundle-preflight.js.map +1 -0
  104. package/dist/cli/check-helper-body.d.ts +4 -0
  105. package/dist/cli/check-helper-body.d.ts.map +1 -0
  106. package/dist/cli/check-helper-body.js +15 -0
  107. package/dist/cli/check-helper-body.js.map +1 -0
  108. package/dist/cli/check-triggers.d.ts +14 -0
  109. package/dist/cli/check-triggers.d.ts.map +1 -0
  110. package/dist/cli/check-triggers.js +37 -0
  111. package/dist/cli/check-triggers.js.map +1 -0
  112. package/dist/cli/check-typescript.d.ts +20 -0
  113. package/dist/cli/check-typescript.d.ts.map +1 -0
  114. package/dist/cli/check-typescript.js +54 -0
  115. package/dist/cli/check-typescript.js.map +1 -0
  116. package/dist/cli/check.d.ts +36 -3
  117. package/dist/cli/check.d.ts.map +1 -1
  118. package/dist/cli/check.js +122 -11
  119. package/dist/cli/check.js.map +1 -1
  120. package/dist/cli/cloud-run.d.ts +8 -0
  121. package/dist/cli/cloud-run.d.ts.map +1 -0
  122. package/dist/cli/cloud-run.js +50 -0
  123. package/dist/cli/cloud-run.js.map +1 -0
  124. package/dist/cli/deploy.d.ts +9 -0
  125. package/dist/cli/deploy.d.ts.map +1 -0
  126. package/dist/cli/deploy.js +58 -0
  127. package/dist/cli/deploy.js.map +1 -0
  128. package/dist/cli/deterministic-failure.d.ts +5 -0
  129. package/dist/cli/deterministic-failure.d.ts.map +1 -0
  130. package/dist/cli/deterministic-failure.js +66 -0
  131. package/dist/cli/deterministic-failure.js.map +1 -0
  132. package/dist/cli/direct-run.d.ts.map +1 -1
  133. package/dist/cli/direct-run.js +83 -7
  134. package/dist/cli/direct-run.js.map +1 -1
  135. package/dist/cli/hn-monitor.d.ts.map +1 -1
  136. package/dist/cli/hn-monitor.js +2 -1
  137. package/dist/cli/hn-monitor.js.map +1 -1
  138. package/dist/cli/replay.d.ts +12 -0
  139. package/dist/cli/replay.d.ts.map +1 -0
  140. package/dist/cli/replay.js +82 -0
  141. package/dist/cli/replay.js.map +1 -0
  142. package/dist/cli/reuse.d.ts +8 -0
  143. package/dist/cli/reuse.d.ts.map +1 -0
  144. package/dist/cli/reuse.js +25 -0
  145. package/dist/cli/reuse.js.map +1 -0
  146. package/dist/cli/run-digest.d.ts +4 -0
  147. package/dist/cli/run-digest.d.ts.map +1 -0
  148. package/dist/cli/run-digest.js +24 -0
  149. package/dist/cli/run-digest.js.map +1 -0
  150. package/dist/cli/run.d.ts +16 -5
  151. package/dist/cli/run.d.ts.map +1 -1
  152. package/dist/cli/run.js +99 -17
  153. package/dist/cli/run.js.map +1 -1
  154. package/dist/cli/serve-webhook.d.ts +40 -0
  155. package/dist/cli/serve-webhook.d.ts.map +1 -0
  156. package/dist/cli/serve-webhook.js +233 -0
  157. package/dist/cli/serve-webhook.js.map +1 -0
  158. package/dist/cli/tick-runner.d.ts.map +1 -1
  159. package/dist/cli/tick-runner.js +2 -1
  160. package/dist/cli/tick-runner.js.map +1 -1
  161. package/dist/cli-adapter.d.ts +8 -14
  162. package/dist/cli-adapter.d.ts.map +1 -1
  163. package/dist/cli-adapter.js +19 -64
  164. package/dist/cli-adapter.js.map +1 -1
  165. package/dist/cli-watch.d.ts +13 -0
  166. package/dist/cli-watch.d.ts.map +1 -0
  167. package/dist/cli-watch.js +185 -0
  168. package/dist/cli-watch.js.map +1 -0
  169. package/dist/cli.d.ts +4 -0
  170. package/dist/cli.d.ts.map +1 -1
  171. package/dist/cli.js +387 -14
  172. package/dist/cli.js.map +1 -1
  173. package/dist/cloud-http.d.ts +22 -0
  174. package/dist/cloud-http.d.ts.map +1 -0
  175. package/dist/cloud-http.js +84 -0
  176. package/dist/cloud-http.js.map +1 -0
  177. package/dist/cloud-run.d.ts +38 -0
  178. package/dist/cloud-run.d.ts.map +1 -0
  179. package/dist/cloud-run.js +112 -0
  180. package/dist/cloud-run.js.map +1 -0
  181. package/dist/compile.d.ts +21 -3
  182. package/dist/compile.d.ts.map +1 -1
  183. package/dist/compile.js +97 -23
  184. package/dist/compile.js.map +1 -1
  185. package/dist/create-flow.d.ts +17 -0
  186. package/dist/create-flow.d.ts.map +1 -0
  187. package/dist/create-flow.js +72 -0
  188. package/dist/create-flow.js.map +1 -0
  189. package/dist/daemon-connection.d.ts +14 -0
  190. package/dist/daemon-connection.d.ts.map +1 -1
  191. package/dist/daemon-connection.js +33 -1
  192. package/dist/daemon-connection.js.map +1 -1
  193. package/dist/demo-hn-monitor.js +2 -1
  194. package/dist/demo-hn-monitor.js.map +1 -1
  195. package/dist/effect-channel.d.ts +30 -0
  196. package/dist/effect-channel.d.ts.map +1 -0
  197. package/dist/effect-channel.js +71 -0
  198. package/dist/effect-channel.js.map +1 -0
  199. package/dist/failure-kinds.d.ts +14 -3
  200. package/dist/failure-kinds.d.ts.map +1 -1
  201. package/dist/failure-kinds.js +27 -0
  202. package/dist/failure-kinds.js.map +1 -1
  203. package/dist/gate-contract.d.ts.map +1 -1
  204. package/dist/gate-contract.js +9 -0
  205. package/dist/gate-contract.js.map +1 -1
  206. package/dist/helper-preflight.d.ts +18 -0
  207. package/dist/helper-preflight.d.ts.map +1 -0
  208. package/dist/helper-preflight.js +32 -0
  209. package/dist/helper-preflight.js.map +1 -0
  210. package/dist/helper-storage.d.ts +5 -0
  211. package/dist/helper-storage.d.ts.map +1 -0
  212. package/dist/helper-storage.js +31 -0
  213. package/dist/helper-storage.js.map +1 -0
  214. package/dist/helper-writeback.d.ts +12 -0
  215. package/dist/helper-writeback.d.ts.map +1 -0
  216. package/dist/helper-writeback.js +95 -0
  217. package/dist/helper-writeback.js.map +1 -0
  218. package/dist/index.d.ts +10 -2
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +7 -1
  221. package/dist/index.js.map +1 -1
  222. package/dist/input-binding.d.ts +4 -0
  223. package/dist/input-binding.d.ts.map +1 -0
  224. package/dist/input-binding.js +78 -0
  225. package/dist/input-binding.js.map +1 -0
  226. package/dist/journal-client.d.ts +12 -4
  227. package/dist/journal-client.d.ts.map +1 -1
  228. package/dist/journal-client.js +17 -6
  229. package/dist/journal-client.js.map +1 -1
  230. package/dist/journal-offset.d.ts +3 -0
  231. package/dist/journal-offset.d.ts.map +1 -0
  232. package/dist/journal-offset.js +69 -0
  233. package/dist/journal-offset.js.map +1 -0
  234. package/dist/journal-reader.d.ts +30 -0
  235. package/dist/journal-reader.d.ts.map +1 -0
  236. package/dist/journal-reader.js +156 -0
  237. package/dist/journal-reader.js.map +1 -0
  238. package/dist/json-schema.d.ts +2 -0
  239. package/dist/json-schema.d.ts.map +1 -1
  240. package/dist/json-schema.js +38 -22
  241. package/dist/json-schema.js.map +1 -1
  242. package/dist/llm-worker.d.ts +16 -0
  243. package/dist/llm-worker.d.ts.map +1 -0
  244. package/dist/llm-worker.js +79 -0
  245. package/dist/llm-worker.js.map +1 -0
  246. package/dist/local-agent.d.ts +8 -0
  247. package/dist/local-agent.d.ts.map +1 -0
  248. package/dist/local-agent.js +25 -0
  249. package/dist/local-agent.js.map +1 -0
  250. package/dist/mcp-client.d.ts +15 -0
  251. package/dist/mcp-client.d.ts.map +1 -0
  252. package/dist/mcp-client.js +104 -0
  253. package/dist/mcp-client.js.map +1 -0
  254. package/dist/mcp-config.d.ts +4 -0
  255. package/dist/mcp-config.d.ts.map +1 -0
  256. package/dist/mcp-config.js +61 -0
  257. package/dist/mcp-config.js.map +1 -0
  258. package/dist/mcp-stdio.d.ts +24 -0
  259. package/dist/mcp-stdio.d.ts.map +1 -0
  260. package/dist/mcp-stdio.js +89 -0
  261. package/dist/mcp-stdio.js.map +1 -0
  262. package/dist/model-pricing.d.ts +22 -0
  263. package/dist/model-pricing.d.ts.map +1 -0
  264. package/dist/model-pricing.js +30 -0
  265. package/dist/model-pricing.js.map +1 -0
  266. package/dist/mount-registry.d.ts +9 -0
  267. package/dist/mount-registry.d.ts.map +1 -0
  268. package/dist/mount-registry.js +47 -0
  269. package/dist/mount-registry.js.map +1 -0
  270. package/dist/named-gate-lowering.d.ts +9 -0
  271. package/dist/named-gate-lowering.d.ts.map +1 -0
  272. package/dist/named-gate-lowering.js +152 -0
  273. package/dist/named-gate-lowering.js.map +1 -0
  274. package/dist/named-gates.d.ts +10 -0
  275. package/dist/named-gates.d.ts.map +1 -0
  276. package/dist/named-gates.js +69 -0
  277. package/dist/named-gates.js.map +1 -0
  278. package/dist/observer-link.d.ts +129 -0
  279. package/dist/observer-link.d.ts.map +1 -0
  280. package/dist/observer-link.js +274 -0
  281. package/dist/observer-link.js.map +1 -0
  282. package/dist/plugin-loader.d.ts +13 -0
  283. package/dist/plugin-loader.d.ts.map +1 -0
  284. package/dist/plugin-loader.js +110 -0
  285. package/dist/plugin-loader.js.map +1 -0
  286. package/dist/plugin-manifest.d.ts +27 -0
  287. package/dist/plugin-manifest.d.ts.map +1 -0
  288. package/dist/plugin-manifest.js +89 -0
  289. package/dist/plugin-manifest.js.map +1 -0
  290. package/dist/preflight.d.ts +26 -2
  291. package/dist/preflight.d.ts.map +1 -1
  292. package/dist/preflight.js +175 -1
  293. package/dist/preflight.js.map +1 -1
  294. package/dist/progress.d.ts +14 -0
  295. package/dist/progress.d.ts.map +1 -0
  296. package/dist/progress.js +39 -0
  297. package/dist/progress.js.map +1 -0
  298. package/dist/protocol.d.ts +11 -0
  299. package/dist/protocol.d.ts.map +1 -1
  300. package/dist/pty-sidechannel.d.ts +14 -0
  301. package/dist/pty-sidechannel.d.ts.map +1 -0
  302. package/dist/pty-sidechannel.js +103 -0
  303. package/dist/pty-sidechannel.js.map +1 -0
  304. package/dist/scope-compiler.d.ts +52 -0
  305. package/dist/scope-compiler.d.ts.map +1 -0
  306. package/dist/scope-compiler.js +62 -0
  307. package/dist/scope-compiler.js.map +1 -0
  308. package/dist/slack-preflight.d.ts +6 -0
  309. package/dist/slack-preflight.d.ts.map +1 -0
  310. package/dist/slack-preflight.js +28 -0
  311. package/dist/slack-preflight.js.map +1 -0
  312. package/dist/slack-writeback.d.ts +40 -0
  313. package/dist/slack-writeback.d.ts.map +1 -0
  314. package/dist/slack-writeback.js +60 -0
  315. package/dist/slack-writeback.js.map +1 -0
  316. package/dist/spec.d.ts +134 -4
  317. package/dist/spec.d.ts.map +1 -1
  318. package/dist/spec.js.map +1 -1
  319. package/dist/step-dependencies.d.ts.map +1 -1
  320. package/dist/step-dependencies.js +2 -1
  321. package/dist/step-dependencies.js.map +1 -1
  322. package/dist/step-fields.d.ts +4 -4
  323. package/dist/step-fields.d.ts.map +1 -1
  324. package/dist/step-fields.js +5 -2
  325. package/dist/step-fields.js.map +1 -1
  326. package/dist/trigger-executor.d.ts +7 -0
  327. package/dist/trigger-executor.d.ts.map +1 -0
  328. package/dist/trigger-executor.js +35 -0
  329. package/dist/trigger-executor.js.map +1 -0
  330. package/dist/validate.d.ts.map +1 -1
  331. package/dist/validate.js +53 -6
  332. package/dist/validate.js.map +1 -1
  333. package/dist/webhook-rate-limit.d.ts +29 -0
  334. package/dist/webhook-rate-limit.d.ts.map +1 -0
  335. package/dist/webhook-rate-limit.js +38 -0
  336. package/dist/webhook-rate-limit.js.map +1 -0
  337. package/dist/webhook-signature.d.ts +22 -0
  338. package/dist/webhook-signature.d.ts.map +1 -0
  339. package/dist/webhook-signature.js +53 -0
  340. package/dist/webhook-signature.js.map +1 -0
  341. package/dist/worker-cli.d.ts +13 -1
  342. package/dist/worker-cli.d.ts.map +1 -1
  343. package/dist/worker-cli.js +133 -12
  344. package/dist/worker-cli.js.map +1 -1
  345. package/dist/worker-input.d.ts +4 -0
  346. package/dist/worker-input.d.ts.map +1 -0
  347. package/dist/worker-input.js +14 -0
  348. package/dist/worker-input.js.map +1 -0
  349. package/dist/worker-lease.d.ts +5 -0
  350. package/dist/worker-lease.d.ts.map +1 -0
  351. package/dist/worker-lease.js +80 -0
  352. package/dist/worker-lease.js.map +1 -0
  353. package/dist/worker-spend.d.ts +19 -0
  354. package/dist/worker-spend.d.ts.map +1 -0
  355. package/dist/worker-spend.js +22 -0
  356. package/dist/worker-spend.js.map +1 -0
  357. package/dist/worker-usage.d.ts +7 -0
  358. package/dist/worker-usage.d.ts.map +1 -0
  359. package/dist/worker-usage.js +54 -0
  360. package/dist/worker-usage.js.map +1 -0
  361. package/dist/worker.d.ts +2 -0
  362. package/dist/worker.d.ts.map +1 -1
  363. package/dist/worker.js +22 -8
  364. package/dist/worker.js.map +1 -1
  365. package/dist/wrapper-session.d.ts +1 -1
  366. package/dist/wrapper-session.d.ts.map +1 -1
  367. package/dist/wrapper-session.js +56 -19
  368. package/dist/wrapper-session.js.map +1 -1
  369. package/dist/yaml-helper-effect.d.ts +8 -0
  370. package/dist/yaml-helper-effect.d.ts.map +1 -0
  371. package/dist/yaml-helper-effect.js +79 -0
  372. package/dist/yaml-helper-effect.js.map +1 -0
  373. package/dist/yaml-helpers.d.ts +18 -0
  374. package/dist/yaml-helpers.d.ts.map +1 -0
  375. package/dist/yaml-helpers.js +116 -0
  376. package/dist/yaml-helpers.js.map +1 -0
  377. package/package.json +19 -2
  378. package/src/adapters/base.ts +53 -0
  379. package/src/adapters/claude.ts +55 -0
  380. package/src/adapters/codex.ts +56 -0
  381. package/src/adapters/index.ts +36 -0
  382. package/src/adapters/wrapper.ts +42 -0
  383. package/src/agent-relay-transport.ts +187 -0
  384. package/src/authored-budget.ts +69 -0
  385. package/src/authored-flow-error.ts +10 -0
  386. package/src/authored-flow-executor.ts +170 -293
  387. package/src/authored-flow-loader.ts +60 -3
  388. package/src/authored-flow-operation.ts +38 -5
  389. package/src/authored-helper-effect.ts +143 -0
  390. package/src/authored-mcp.ts +166 -0
  391. package/src/authored-memory.ts +55 -0
  392. package/src/authored-plugin-effect.ts +152 -0
  393. package/src/authored-step-output.ts +107 -0
  394. package/src/authored-worker-step.ts +181 -0
  395. package/src/budget-preflight.ts +31 -0
  396. package/src/budget.ts +49 -0
  397. package/src/bundle-transport.ts +79 -0
  398. package/src/bundle-typescript.ts +98 -0
  399. package/src/bundle.ts +182 -0
  400. package/src/child-stop.ts +138 -0
  401. package/src/cli/add.ts +45 -0
  402. package/src/cli/build.ts +214 -0
  403. package/src/cli/bundle-preflight.ts +28 -0
  404. package/src/cli/check-helper-body.ts +14 -0
  405. package/src/cli/check-triggers.ts +41 -0
  406. package/src/cli/check-typescript.ts +63 -0
  407. package/src/cli/check.ts +132 -14
  408. package/src/cli/cloud-run.ts +47 -0
  409. package/src/cli/deploy.ts +52 -0
  410. package/src/cli/deterministic-failure.ts +69 -0
  411. package/src/cli/direct-run.ts +79 -7
  412. package/src/cli/hn-monitor.ts +2 -1
  413. package/src/cli/replay.ts +81 -0
  414. package/src/cli/reuse.ts +23 -0
  415. package/src/cli/run-digest.ts +24 -0
  416. package/src/cli/run.ts +104 -21
  417. package/src/cli/serve-webhook.ts +246 -0
  418. package/src/cli/tick-runner.ts +2 -1
  419. package/src/cli-adapter.ts +31 -74
  420. package/src/cli-watch.ts +174 -0
  421. package/src/cli.ts +396 -17
  422. package/src/cloud-http.ts +100 -0
  423. package/src/cloud-run.ts +137 -0
  424. package/src/compile.ts +102 -23
  425. package/src/create-flow.ts +82 -0
  426. package/src/daemon-connection.ts +32 -1
  427. package/src/demo-hn-monitor.ts +2 -1
  428. package/src/effect-channel.ts +97 -0
  429. package/src/failure-kinds.ts +38 -0
  430. package/src/gate-contract.ts +7 -0
  431. package/src/helper-preflight.ts +34 -0
  432. package/src/helper-storage.ts +23 -0
  433. package/src/helper-writeback.ts +83 -0
  434. package/src/index.ts +26 -0
  435. package/src/input-binding.ts +76 -0
  436. package/src/journal-client.ts +20 -7
  437. package/src/journal-offset.ts +60 -0
  438. package/src/journal-reader.ts +165 -0
  439. package/src/json-schema.ts +34 -18
  440. package/src/llm-worker.ts +82 -0
  441. package/src/local-agent.ts +30 -0
  442. package/src/mcp-client.ts +97 -0
  443. package/src/mcp-config.ts +42 -0
  444. package/src/mcp-stdio.ts +84 -0
  445. package/src/model-pricing.ts +32 -0
  446. package/src/mount-registry.ts +44 -0
  447. package/src/named-gate-lowering.ts +147 -0
  448. package/src/named-gates.ts +76 -0
  449. package/src/observer-link.ts +368 -0
  450. package/src/plugin-loader.ts +88 -0
  451. package/src/plugin-manifest.ts +76 -0
  452. package/src/preflight.ts +178 -4
  453. package/src/progress.ts +51 -0
  454. package/src/protocol.ts +12 -0
  455. package/src/pty-sidechannel.ts +92 -0
  456. package/src/scope-compiler.ts +105 -0
  457. package/src/slack-preflight.ts +25 -0
  458. package/src/slack-writeback.ts +63 -0
  459. package/src/spec.ts +112 -4
  460. package/src/step-dependencies.ts +3 -1
  461. package/src/step-fields.ts +5 -2
  462. package/src/trigger-executor.ts +34 -0
  463. package/src/validate.ts +47 -6
  464. package/src/webhook-rate-limit.ts +69 -0
  465. package/src/webhook-signature.ts +74 -0
  466. package/src/worker-cli.ts +156 -11
  467. package/src/worker-input.ts +15 -0
  468. package/src/worker-lease.ts +85 -0
  469. package/src/worker-spend.ts +23 -0
  470. package/src/worker-usage.ts +48 -0
  471. package/src/worker.ts +27 -9
  472. package/src/wrapper-session.ts +50 -15
  473. package/src/yaml-helper-effect.ts +78 -0
  474. package/src/yaml-helpers.ts +131 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * First-class headless adapter contract (flows#141).
3
+ *
4
+ * Every supported agent CLI ships one implementation. `worker-cli.ts` and
5
+ * `cli/check.ts` dispatch through the registry in `./index.ts` — never string
6
+ * formatting against per-CLI knowledge inline. Adding a new CLI is one new
7
+ * file that implements this interface.
8
+ *
9
+ * Behavior-preserving migration: the exported functions in `cli-adapter.ts`
10
+ * (`agentExecution`, `llmExecution`, `authenticationProbe`,
11
+ * `modelReadinessProbe`, `adapterIdentification`) now delegate to the
12
+ * registered adapter for the resolved kind, so callers don't change.
13
+ */
14
+ export interface CliInvocation {
15
+ args: string[];
16
+ timeoutMs: number;
17
+ /** Set only for wrapper readiness probes; raw providers receive a model flag. */
18
+ modelEnv?: string;
19
+ }
20
+ export interface CliAdapterIdentification {
21
+ invocation: CliInvocation;
22
+ expectedStdout?: string;
23
+ }
24
+ /**
25
+ * The declared, per-CLI headless contract. Members intentionally mirror the
26
+ * function-scoped predecessors in `cli-adapter.ts` so migration is mechanical.
27
+ */
28
+ export interface HeadlessAdapter {
29
+ /** Identity of this adapter — matches CliAdapterKind for registry keys. */
30
+ readonly kind: string;
31
+ /** Shape-check invocation before classifying an auth failure. */
32
+ buildIdentification(): CliAdapterIdentification;
33
+ /** Non-interactive auth-status probe. */
34
+ buildAuthProbe(): CliInvocation;
35
+ /**
36
+ * Real, noninteractive model round-trip. Providers hand the model via a
37
+ * native flag; wrappers hand it via the explicitly identified environment
38
+ * contract on `modelEnv`.
39
+ */
40
+ buildModelReadinessProbe(model: string): CliInvocation;
41
+ /** Agent-step worker argv for an instruction under an optional model. */
42
+ buildAgentInvocation(instruction: string, model?: string): CliInvocation;
43
+ /** LLM-step worker argv for a prompt under an optional model. */
44
+ buildLlmInvocation(prompt: string, model?: string): CliInvocation;
45
+ }
46
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,mBAAmB,IAAI,wBAAwB,CAAC;IAEhD,yCAAyC;IACzC,cAAc,IAAI,aAAa,CAAC;IAEhC;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAEvD,yEAAyE;IACzE,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzE,iEAAiE;IACjE,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CACnE"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * First-class headless adapter contract (flows#141).
3
+ *
4
+ * Every supported agent CLI ships one implementation. `worker-cli.ts` and
5
+ * `cli/check.ts` dispatch through the registry in `./index.ts` — never string
6
+ * formatting against per-CLI knowledge inline. Adding a new CLI is one new
7
+ * file that implements this interface.
8
+ *
9
+ * Behavior-preserving migration: the exported functions in `cli-adapter.ts`
10
+ * (`agentExecution`, `llmExecution`, `authenticationProbe`,
11
+ * `modelReadinessProbe`, `adapterIdentification`) now delegate to the
12
+ * registered adapter for the resolved kind, so callers don't change.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,5 @@
1
+ import type { HeadlessAdapter } from './base.js';
2
+ /** Claude Code CLI headless contract. Wire and behavior identical to the
3
+ * pre-#141 inline shape in `cli-adapter.ts` — only the packaging changed. */
4
+ export declare const claudeAdapter: HeadlessAdapter;
5
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB;8EAC8E;AAC9E,eAAO,MAAM,aAAa,EAAE,eA4C3B,CAAC"}
@@ -0,0 +1,44 @@
1
+ const MODEL_PROBE_PROMPT = 'Reply with exactly RELAYFLOWS_MODEL_READY and nothing else.';
2
+ /** Claude Code CLI headless contract. Wire and behavior identical to the
3
+ * pre-#141 inline shape in `cli-adapter.ts` — only the packaging changed. */
4
+ export const claudeAdapter = {
5
+ kind: 'claude',
6
+ buildIdentification() {
7
+ return { invocation: { args: ['auth', 'status', '--help'], timeoutMs: 10_000 } };
8
+ },
9
+ buildAuthProbe() {
10
+ return { args: ['auth', 'status'], timeoutMs: 10_000 };
11
+ },
12
+ buildModelReadinessProbe(model) {
13
+ return {
14
+ args: [
15
+ '-p', '--model', model, '--tools', '', '--no-session-persistence',
16
+ MODEL_PROBE_PROMPT,
17
+ ],
18
+ timeoutMs: 60_000,
19
+ };
20
+ },
21
+ buildAgentInvocation(instruction, model) {
22
+ return {
23
+ args: [
24
+ '-p',
25
+ // Symmetric to codex's --dangerously-bypass-approvals-and-sandbox: in
26
+ // agent mode the flow explicitly delegates writes. Without this
27
+ // claude's headless mode prompts for tool approval, gets no TTY,
28
+ // and completes "successfully" without touching files.
29
+ '--dangerously-skip-permissions',
30
+ ...(model === undefined ? [] : ['--model', model]),
31
+ instruction,
32
+ ],
33
+ timeoutMs: 0,
34
+ };
35
+ },
36
+ buildLlmInvocation(prompt, model) {
37
+ return {
38
+ args: ['-p', '--tools', '', '--no-session-persistence',
39
+ ...(model === undefined ? [] : ['--model', model]), prompt],
40
+ timeoutMs: 0,
41
+ };
42
+ },
43
+ };
44
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAMA,MAAM,kBAAkB,GAAG,6DAA6D,CAAC;AAEzF;8EAC8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,IAAI,EAAE,QAAQ;IAEd,mBAAmB;QACjB,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACnF,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,0BAA0B;gBACjE,kBAAkB;aACnB;YACD,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,KAAc;QACtD,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI;gBACJ,sEAAsE;gBACtE,gEAAgE;gBAChE,iEAAiE;gBACjE,uDAAuD;gBACvD,gCAAgC;gBAChC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClD,WAAW;aACZ;YACD,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,KAAc;QAC/C,OAAO;YACL,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,0BAA0B;gBACpD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;YAC7D,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { HeadlessAdapter } from './base.js';
2
+ /** OpenAI Codex CLI headless contract. Behavior identical to the pre-#141
3
+ * inline shape in `cli-adapter.ts` — only the packaging changed. */
4
+ export declare const codexAdapter: HeadlessAdapter;
5
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB;qEACqE;AACrE,eAAO,MAAM,YAAY,EAAE,eA6C1B,CAAC"}
@@ -0,0 +1,45 @@
1
+ const MODEL_PROBE_PROMPT = 'Reply with exactly RELAYFLOWS_MODEL_READY and nothing else.';
2
+ /** OpenAI Codex CLI headless contract. Behavior identical to the pre-#141
3
+ * inline shape in `cli-adapter.ts` — only the packaging changed. */
4
+ export const codexAdapter = {
5
+ kind: 'codex',
6
+ buildIdentification() {
7
+ return { invocation: { args: ['login', 'status', '--help'], timeoutMs: 10_000 } };
8
+ },
9
+ buildAuthProbe() {
10
+ return { args: ['login', 'status'], timeoutMs: 10_000 };
11
+ },
12
+ buildModelReadinessProbe(model) {
13
+ return {
14
+ args: [
15
+ 'exec', '--ephemeral', '--sandbox', 'read-only', '--skip-git-repo-check',
16
+ '--model', model, MODEL_PROBE_PROMPT,
17
+ ],
18
+ timeoutMs: 60_000,
19
+ };
20
+ },
21
+ buildAgentInvocation(instruction, model) {
22
+ return {
23
+ args: [
24
+ 'exec', '--ephemeral', '--skip-git-repo-check',
25
+ // Agent-mode is where the flow explicitly delegates code changes to
26
+ // the CLI. Without this flag codex prompts for approval on every
27
+ // write, gets nothing (no TTY), and completes "successfully" without
28
+ // touching files — the dogfood no-op failure mode. LLM-mode stays
29
+ // read-only and does NOT get the bypass.
30
+ '--dangerously-bypass-approvals-and-sandbox',
31
+ ...(model === undefined ? [] : ['--model', model]),
32
+ instruction,
33
+ ],
34
+ timeoutMs: 0,
35
+ };
36
+ },
37
+ buildLlmInvocation(prompt, model) {
38
+ return {
39
+ args: ['exec', '--ephemeral', '--sandbox', 'read-only', '--skip-git-repo-check',
40
+ ...(model === undefined ? [] : ['--model', model]), prompt],
41
+ timeoutMs: 0,
42
+ };
43
+ },
44
+ };
45
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAMA,MAAM,kBAAkB,GAAG,6DAA6D,CAAC;AAEzF;qEACqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,OAAO;IAEb,mBAAmB;QACjB,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACpF,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC1D,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO;YACL,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB;gBACxE,SAAS,EAAE,KAAK,EAAE,kBAAkB;aACrC;YACD,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,KAAc;QACtD,OAAO;YACL,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa,EAAE,uBAAuB;gBAC9C,oEAAoE;gBACpE,iEAAiE;gBACjE,qEAAqE;gBACrE,kEAAkE;gBAClE,yCAAyC;gBACzC,4CAA4C;gBAC5C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClD,WAAW;aACZ;YACD,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,KAAc;QAC/C,OAAO;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB;gBAC7E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;YAC7D,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { claudeAdapter } from './claude.js';
2
+ import { codexAdapter } from './codex.js';
3
+ import { wrapperAdapter } from './wrapper.js';
4
+ import type { HeadlessAdapter } from './base.js';
5
+ export type CliAdapterKind = 'claude' | 'codex' | 'relayflows-wrapper-v1';
6
+ /** Select the adapter for the resolved executable basename. */
7
+ export declare function resolveAdapter(executable: string): HeadlessAdapter;
8
+ /** Backward-compatible kind lookup for callers still speaking string-tag lang. */
9
+ export declare function resolveAdapterKind(executable: string): CliAdapterKind;
10
+ /** Registered adapters by kind (read-only view for tests and diagnostics). */
11
+ export declare function registeredAdapters(): Readonly<Record<CliAdapterKind, HeadlessAdapter>>;
12
+ export { claudeAdapter, codexAdapter, wrapperAdapter };
13
+ export type { HeadlessAdapter, CliInvocation, CliAdapterIdentification } from './base.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,uBAAuB,CAAC;AAS1E,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAKlE;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAErE;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAEtF;AAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { basename } from 'node:path';
2
+ import { claudeAdapter } from './claude.js';
3
+ import { codexAdapter } from './codex.js';
4
+ import { wrapperAdapter } from './wrapper.js';
5
+ /** The registered adapter set. Adding a CLI is adding one file + one entry. */
6
+ const ADAPTERS = {
7
+ claude: claudeAdapter,
8
+ codex: codexAdapter,
9
+ 'relayflows-wrapper-v1': wrapperAdapter,
10
+ };
11
+ /** Select the adapter for the resolved executable basename. */
12
+ export function resolveAdapter(executable) {
13
+ const name = basename(executable).replace(/\.exe$/i, '');
14
+ if (name === 'claude')
15
+ return ADAPTERS.claude;
16
+ if (name === 'codex')
17
+ return ADAPTERS.codex;
18
+ return ADAPTERS['relayflows-wrapper-v1'];
19
+ }
20
+ /** Backward-compatible kind lookup for callers still speaking string-tag lang. */
21
+ export function resolveAdapterKind(executable) {
22
+ return resolveAdapter(executable).kind;
23
+ }
24
+ /** Registered adapters by kind (read-only view for tests and diagnostics). */
25
+ export function registeredAdapters() {
26
+ return ADAPTERS;
27
+ }
28
+ export { claudeAdapter, codexAdapter, wrapperAdapter };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C,+EAA+E;AAC/E,MAAM,QAAQ,GAA4C;IACxD,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,uBAAuB,EAAE,cAAc;CACxC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC9C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IAC5C,OAAO,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC3C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,IAAsB,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HeadlessAdapter } from './base.js';
2
+ /**
3
+ * `relayflows-adapter-v1` identifies a per-flow wrapper script — the pre-#141
4
+ * per-flow shim shape. The wrapper answers a probe with a known token; agent
5
+ * and llm execution flow through `runWrapperSession`, so this adapter refuses
6
+ * to construct a direct-argv invocation for them.
7
+ */
8
+ export declare const WRAPPER_IDENTIFY_ARG = "--relayflows-adapter-v1";
9
+ export declare const WRAPPER_IDENTIFY_TOKEN = "relayflows-agent-cli-v1";
10
+ export declare const WRAPPER_EXECUTE_TOKEN = "relayflows-agent-cli-v1-execute";
11
+ export declare const wrapperAdapter: HeadlessAdapter;
12
+ //# sourceMappingURL=wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/adapters/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAChE,eAAO,MAAM,qBAAqB,oCAAoC,CAAC;AAEvE,eAAO,MAAM,cAAc,EAAE,eAyB5B,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `relayflows-adapter-v1` identifies a per-flow wrapper script — the pre-#141
3
+ * per-flow shim shape. The wrapper answers a probe with a known token; agent
4
+ * and llm execution flow through `runWrapperSession`, so this adapter refuses
5
+ * to construct a direct-argv invocation for them.
6
+ */
7
+ export const WRAPPER_IDENTIFY_ARG = '--relayflows-adapter-v1';
8
+ export const WRAPPER_IDENTIFY_TOKEN = 'relayflows-agent-cli-v1';
9
+ export const WRAPPER_EXECUTE_TOKEN = 'relayflows-agent-cli-v1-execute';
10
+ export const wrapperAdapter = {
11
+ kind: 'relayflows-wrapper-v1',
12
+ buildIdentification() {
13
+ return {
14
+ invocation: { args: [WRAPPER_IDENTIFY_ARG], timeoutMs: 10_000 },
15
+ expectedStdout: WRAPPER_IDENTIFY_TOKEN,
16
+ };
17
+ },
18
+ buildAuthProbe() {
19
+ return { args: ['auth', 'status'], timeoutMs: 10_000 };
20
+ },
21
+ buildModelReadinessProbe(model) {
22
+ return { args: ['auth', 'status'], timeoutMs: 60_000, modelEnv: model };
23
+ },
24
+ buildAgentInvocation() {
25
+ throw new Error('custom wrapper execution requires the runAgentCli same-process session');
26
+ },
27
+ buildLlmInvocation() {
28
+ throw new Error('custom wrapper execution requires the same-process session');
29
+ },
30
+ };
31
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/adapters/wrapper.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iCAAiC,CAAC;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,uBAAuB;IAE7B,mBAAmB;QACjB,OAAO;YACL,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;YAC/D,cAAc,EAAE,sBAAsB;SACvC,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1E,CAAC;IAED,oBAAoB;QAClB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,kBAAkB;QAChB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;CACF,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Agent-relay HTTP transport for f.agent step dispatch (flows#385).
3
+ *
4
+ * The SDK's default agent path is a direct `child_process.spawn(cli, ...)`
5
+ * in worker-cli.ts. That is unobservable — you cannot DM the spawned agent
6
+ * mid-flight, and every ecosystem tool that wants to steer or watch it
7
+ * ends up shelling out to the `agent-relay` CLI, which is fragile.
8
+ *
9
+ * This module speaks to agent-relay via structured HTTP: the same call
10
+ * shape the `mcp__agent-relay__spawn` MCP tool posts. The SDK becomes a
11
+ * first-class agent-relay participant, registered under a derived agent
12
+ * name a caller can DM against.
13
+ *
14
+ * Scope: spawn + close. Streaming inbox and observation are follow-ups.
15
+ */
16
+ export type AgentTransport = 'direct' | 'relay';
17
+ export interface AgentRelaySpawnRequest {
18
+ /** Registered agent name in the workspace. */
19
+ name: string;
20
+ /** CLI to launch. */
21
+ cli: 'claude' | 'codex' | 'gemini' | 'aider' | 'goose' | 'grok' | 'opencode';
22
+ /** Initial task instructions. */
23
+ task: string;
24
+ /** Optional model powering the worker. */
25
+ model?: string;
26
+ /** Optional working directory for the spawned worker process. */
27
+ worker_cwd?: string;
28
+ /** Optional target fleet node name. */
29
+ target_node?: string;
30
+ /** Declared objective for workforce reporting. */
31
+ objective?: string;
32
+ /** Declared role for workforce reporting. */
33
+ role?: string;
34
+ /** Declared project for workforce reporting. */
35
+ project?: string;
36
+ /** Declared workstream for workforce reporting. */
37
+ workstream?: string;
38
+ }
39
+ export interface AgentRelayEnv {
40
+ /** `RELAY_BASE_URL` env; defaults to https://cast.agentrelay.com. */
41
+ baseUrl?: string;
42
+ /** `RELAY_API_KEY` env (rk_live_...). Required. */
43
+ apiKey?: string;
44
+ /** `RELAY_DEFAULT_WORKSPACE` env; workspace scoping for the spawn. */
45
+ workspaceId?: string;
46
+ /** Optional bearer token for the individual agent identity, if pre-registered. */
47
+ agentToken?: string;
48
+ }
49
+ export interface AgentSpawnHandle {
50
+ /** Registered agent name in the workspace — DM this to steer. */
51
+ readonly registeredName: string;
52
+ /** Invocation id returned by relay; use for status polling. */
53
+ readonly invocationId: string;
54
+ /** Best-effort deregistration/notification. */
55
+ close(): Promise<void>;
56
+ }
57
+ export declare class AgentRelayTransportError extends Error {
58
+ readonly cause?: unknown | undefined;
59
+ constructor(message: string, cause?: unknown | undefined);
60
+ }
61
+ /**
62
+ * Read the same env the relay MCP already consumes. Explicit override wins.
63
+ * Missing RELAY_API_KEY refuses immediately — the transport cannot proceed
64
+ * unauthenticated and the direct-spawn fallback is a separate decision.
65
+ */
66
+ export declare function readAgentRelayEnv(env?: NodeJS.ProcessEnv): Required<Pick<AgentRelayEnv, 'baseUrl' | 'apiKey'>> & AgentRelayEnv;
67
+ /**
68
+ * Spawn a worker via agent-relay HTTP. The endpoint mirrors what the
69
+ * `mcp__agent-relay__spawn` MCP tool wraps — a POST that requests a fleet
70
+ * node dispatch. Returns a handle keyed on the registered agent name.
71
+ *
72
+ * The `fetch` argument is injected so tests can mock the transport without
73
+ * hitting the network.
74
+ */
75
+ export declare function agentRelaySpawn(request: AgentRelaySpawnRequest, env?: AgentRelayEnv & {
76
+ fetch?: typeof fetch;
77
+ }): Promise<AgentSpawnHandle>;
78
+ /**
79
+ * Derive a workspace-unique agent name from a run identity + step id. The
80
+ * result is stable across replays of the same step so DMs can be addressed
81
+ * even during retries.
82
+ */
83
+ export declare function deriveAgentName(runId: string, stepId: string): string;
84
+ //# sourceMappingURL=agent-relay-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-relay-transport.d.ts","sourceRoot":"","sources":["../src/agent-relay-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7E,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aACJ,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAI7D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,GAAG,aAAa,CAc3I;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,GAAG,GAAE,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACjD,OAAO,CAAC,gBAAgB,CAAC,CA2E3B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIrE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Agent-relay HTTP transport for f.agent step dispatch (flows#385).
3
+ *
4
+ * The SDK's default agent path is a direct `child_process.spawn(cli, ...)`
5
+ * in worker-cli.ts. That is unobservable — you cannot DM the spawned agent
6
+ * mid-flight, and every ecosystem tool that wants to steer or watch it
7
+ * ends up shelling out to the `agent-relay` CLI, which is fragile.
8
+ *
9
+ * This module speaks to agent-relay via structured HTTP: the same call
10
+ * shape the `mcp__agent-relay__spawn` MCP tool posts. The SDK becomes a
11
+ * first-class agent-relay participant, registered under a derived agent
12
+ * name a caller can DM against.
13
+ *
14
+ * Scope: spawn + close. Streaming inbox and observation are follow-ups.
15
+ */
16
+ export class AgentRelayTransportError extends Error {
17
+ cause;
18
+ constructor(message, cause) {
19
+ super(message);
20
+ this.cause = cause;
21
+ this.name = 'AgentRelayTransportError';
22
+ }
23
+ }
24
+ /**
25
+ * Read the same env the relay MCP already consumes. Explicit override wins.
26
+ * Missing RELAY_API_KEY refuses immediately — the transport cannot proceed
27
+ * unauthenticated and the direct-spawn fallback is a separate decision.
28
+ */
29
+ export function readAgentRelayEnv(env = process.env) {
30
+ const baseUrl = env['RELAY_BASE_URL']?.trim() || 'https://cast.agentrelay.com';
31
+ const apiKey = env['RELAY_API_KEY']?.trim();
32
+ if (!apiKey) {
33
+ throw new AgentRelayTransportError('agent-relay transport requires RELAY_API_KEY in the environment; falling back to direct transport is the caller\'s responsibility.');
34
+ }
35
+ return {
36
+ baseUrl,
37
+ apiKey,
38
+ workspaceId: env['RELAY_DEFAULT_WORKSPACE']?.trim() || undefined,
39
+ agentToken: env['RELAY_AGENT_TOKEN']?.trim() || undefined,
40
+ };
41
+ }
42
+ /**
43
+ * Spawn a worker via agent-relay HTTP. The endpoint mirrors what the
44
+ * `mcp__agent-relay__spawn` MCP tool wraps — a POST that requests a fleet
45
+ * node dispatch. Returns a handle keyed on the registered agent name.
46
+ *
47
+ * The `fetch` argument is injected so tests can mock the transport without
48
+ * hitting the network.
49
+ */
50
+ export async function agentRelaySpawn(request, env = {}) {
51
+ // Only fall back to process.env if the caller didn't supply the required
52
+ // fields directly. Tests pass { apiKey, fetch } inline; they shouldn't need
53
+ // to also set RELAY_API_KEY in the runner env.
54
+ const fromEnv = env.apiKey
55
+ ? { baseUrl: env.baseUrl || 'https://cast.agentrelay.com' }
56
+ : readAgentRelayEnv();
57
+ const resolved = { ...fromEnv, ...env };
58
+ const url = new URL('/api/v1/agents/spawn', resolved.baseUrl).toString();
59
+ const doFetch = env.fetch ?? globalThis.fetch;
60
+ if (typeof doFetch !== 'function') {
61
+ throw new AgentRelayTransportError('global fetch is unavailable; provide { fetch } explicitly.');
62
+ }
63
+ const headers = {
64
+ 'content-type': 'application/json',
65
+ 'authorization': `Bearer ${resolved.apiKey}`,
66
+ };
67
+ if (resolved.workspaceId !== undefined)
68
+ headers['x-relay-workspace'] = resolved.workspaceId;
69
+ if (resolved.agentToken !== undefined)
70
+ headers['x-relay-agent-token'] = resolved.agentToken;
71
+ let response;
72
+ try {
73
+ response = await doFetch(url, {
74
+ method: 'POST',
75
+ headers,
76
+ body: JSON.stringify(request),
77
+ });
78
+ }
79
+ catch (cause) {
80
+ throw new AgentRelayTransportError(`agent-relay spawn network error at ${url}: ${cause.message ?? String(cause)}`, cause);
81
+ }
82
+ if (response.status < 200 || response.status >= 300) {
83
+ let body;
84
+ try {
85
+ body = (await response.text()).slice(0, 512);
86
+ }
87
+ catch {
88
+ body = '<no body>';
89
+ }
90
+ throw new AgentRelayTransportError(`agent-relay spawn refused with status ${response.status}: ${body}`);
91
+ }
92
+ let json;
93
+ try {
94
+ json = await response.json();
95
+ }
96
+ catch (cause) {
97
+ throw new AgentRelayTransportError('agent-relay spawn response was not JSON', cause);
98
+ }
99
+ const invocationId = json.invocation?.invocationId;
100
+ const registeredName = json.invocation?.input?.name ?? request.name;
101
+ if (typeof invocationId !== 'string' || invocationId.length === 0) {
102
+ throw new AgentRelayTransportError('agent-relay spawn response missing invocation.invocationId');
103
+ }
104
+ return {
105
+ registeredName,
106
+ invocationId,
107
+ async close() {
108
+ // Best-effort: post to /api/v1/invocations/<id>/close if defined server-side;
109
+ // no throw on error because the invocation may already be terminal.
110
+ const closeUrl = new URL(`/api/v1/invocations/${encodeURIComponent(invocationId)}/close`, resolved.baseUrl).toString();
111
+ try {
112
+ await doFetch(closeUrl, {
113
+ method: 'POST',
114
+ headers,
115
+ body: JSON.stringify({ reason: 'sdk_transport_close' }),
116
+ });
117
+ }
118
+ catch {
119
+ // Deliberate: close is advisory in this minimum-viable slice.
120
+ }
121
+ },
122
+ };
123
+ }
124
+ /**
125
+ * Derive a workspace-unique agent name from a run identity + step id. The
126
+ * result is stable across replays of the same step so DMs can be addressed
127
+ * even during retries.
128
+ */
129
+ export function deriveAgentName(runId, stepId) {
130
+ // Keep readable + collision-safe: prefix with 'flow-' and use lower-kebab.
131
+ const clean = (s) => s.toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
132
+ return `flow-${clean(runId)}-${clean(stepId)}`.slice(0, 96);
133
+ }
134
+ //# sourceMappingURL=agent-relay-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-relay-transport.js","sourceRoot":"","sources":["../src/agent-relay-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { JournalClient } from './journal-client.js';
2
+ import type { RunOutcome } from './protocol.js';
3
+ import type { KernelRunSpec } from './spec.js';
4
+ /** Serialized admission for the internal authored runner's separate step runs. */
5
+ export declare class AuthoredBudget {
6
+ private readonly limit;
7
+ private failed;
8
+ private tail;
9
+ private charges;
10
+ constructor(header: unknown);
11
+ execute<T>(journal: JournalClient, spec: KernelRunSpec, consume: (outcome: RunOutcome) => Promise<T>): Promise<T>;
12
+ }
13
+ //# sourceMappingURL=authored-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-budget.d.ts","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,WAAW,CAAC;AAEjE,kFAAkF;AAClF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,OAAO,CAAmF;gBAEtF,MAAM,EAAE,OAAO;IASrB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA8CxH"}
@@ -0,0 +1,78 @@
1
+ import { BudgetSyntaxError, parseBudget, toKernelBudget } from './budget.js';
2
+ import { AuthoredFlowExecutionError } from './authored-flow-error.js';
3
+ /** Serialized admission for the internal authored runner's separate step runs. */
4
+ export class AuthoredBudget {
5
+ limit;
6
+ failed = false;
7
+ tail = Promise.resolve();
8
+ charges = [];
9
+ constructor(header) {
10
+ try {
11
+ this.limit = header === undefined ? undefined : toKernelBudget(parseBudget(header));
12
+ }
13
+ catch (error) {
14
+ if (error instanceof BudgetSyntaxError)
15
+ throw new AuthoredFlowExecutionError('budget_syntax_invalid', error.message);
16
+ throw error;
17
+ }
18
+ }
19
+ async execute(journal, spec, consume) {
20
+ if (this.limit === undefined)
21
+ return consume(await journal.runStart(spec));
22
+ const previous = this.tail;
23
+ let release;
24
+ this.tail = new Promise(resolve => { release = resolve; });
25
+ await previous;
26
+ try {
27
+ if (this.failed)
28
+ throw new AuthoredFlowExecutionError('step_failed', 'A prior budgeted step did not finish successfully.');
29
+ // Window selection follows journal timestamps, never the SDK host clock.
30
+ const day = this.charges.at(-1)?.day;
31
+ const total = this.charges.filter(c => this.limit.window !== 'day' || c.day === day)
32
+ .reduce((s, c) => ({ input: s.input + c.input, output: s.output + c.output, micro: s.micro + c.micro, ms: s.ms + c.ms }), { input: 0n, output: 0n, micro: 0n, ms: 0n });
33
+ const exactNumber = (n) => { if (n > BigInt(Number.MAX_SAFE_INTEGER))
34
+ throw new Error('budget counter overflow'); return Number(n); };
35
+ const outcome = await journal.runStart({ ...spec, budget: { ...this.limit, prior_spend: {
36
+ tokens_in: exactNumber(total.input), tokens_out: exactNumber(total.output),
37
+ dollars: `${total.micro / 1000000n}.${String(total.micro % 1000000n).padStart(6, '0')}`,
38
+ wallclock_ms: exactNumber(total.ms), ...(this.limit.window === 'day' && day !== undefined ? { day } : {}),
39
+ } } });
40
+ try {
41
+ if (outcome.completion_reason === 'budget_exceeded')
42
+ throw new AuthoredFlowExecutionError('step_failed', 'Flow budget exceeded before the next step.', 'budget_exceeded', outcome.run_id);
43
+ return await consume(outcome);
44
+ }
45
+ finally {
46
+ let seq = 1;
47
+ for (;;) {
48
+ const { entries } = await journal.journalRead(outcome.run_id, seq);
49
+ if (entries.length === 0)
50
+ break;
51
+ for (const raw of entries) {
52
+ const e = raw;
53
+ seq = e.seq + 1;
54
+ if (!['step.completed', 'memory.injected'].includes(e.entry_type))
55
+ continue;
56
+ const b = e.payload.budget;
57
+ if (b === undefined)
58
+ throw new Error('journal completion missing budget');
59
+ const [whole, fraction = ''] = b.dollars.split('.');
60
+ if (fraction.length > 6 && /[1-9]/.test(fraction.slice(6)))
61
+ throw new Error('budget accounting requires microdollar precision');
62
+ this.charges.push({ input: BigInt(b.tokens_in), output: BigInt(b.tokens_out),
63
+ micro: BigInt(whole) * 1000000n + BigInt(fraction.slice(0, 6).padEnd(6, '0')),
64
+ ms: BigInt(e.payload.spend?.wallclock_ms ?? 0), day: Math.floor(e.at_ms / 86_400_000) });
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch (error) {
70
+ this.failed = true;
71
+ throw error;
72
+ }
73
+ finally {
74
+ release();
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=authored-budget.js.map