@smthrs/gateway 0.35.0 → 1.0.0-rc.3

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 (605) hide show
  1. package/CHANGELOG.md +198 -0
  2. package/LICENSE +1 -1
  3. package/README.md +92 -0
  4. package/dist/cjs/Diagnosis.d.ts +275 -0
  5. package/dist/cjs/Diagnosis.d.ts.map +1 -0
  6. package/dist/cjs/Diagnosis.js +476 -0
  7. package/dist/cjs/Diagnosis.js.map +7 -0
  8. package/dist/cjs/EngineTrace.d.ts +76 -0
  9. package/dist/cjs/EngineTrace.d.ts.map +1 -0
  10. package/dist/cjs/EngineTrace.js +501 -0
  11. package/dist/cjs/EngineTrace.js.map +7 -0
  12. package/dist/cjs/GatewayError.d.ts +54 -0
  13. package/dist/cjs/GatewayError.d.ts.map +1 -0
  14. package/dist/cjs/GatewayError.js +51 -0
  15. package/dist/cjs/GatewayError.js.map +7 -0
  16. package/dist/cjs/GatewayProjection.d.ts +480 -0
  17. package/dist/cjs/GatewayProjection.d.ts.map +1 -0
  18. package/dist/cjs/GatewayProjection.js +462 -0
  19. package/dist/cjs/GatewayProjection.js.map +7 -0
  20. package/dist/cjs/GatewayRpcs.d.ts +1886 -0
  21. package/dist/cjs/GatewayRpcs.d.ts.map +1 -0
  22. package/dist/cjs/GatewayRpcs.js +121 -0
  23. package/dist/cjs/GatewayRpcs.js.map +7 -0
  24. package/dist/cjs/GatewaySchema.d.ts +3274 -0
  25. package/dist/cjs/GatewaySchema.d.ts.map +1 -0
  26. package/dist/cjs/GatewaySchema.js +141 -0
  27. package/dist/cjs/GatewaySchema.js.map +7 -0
  28. package/dist/cjs/GatewayServer.d.ts +427 -0
  29. package/dist/cjs/GatewayServer.d.ts.map +1 -0
  30. package/dist/cjs/GatewayServer.js +428 -0
  31. package/dist/cjs/GatewayServer.js.map +7 -0
  32. package/dist/cjs/HostBranchPresence.d.ts +12 -0
  33. package/dist/cjs/HostBranchPresence.d.ts.map +1 -0
  34. package/dist/cjs/HostBranchPresence.js +82 -0
  35. package/dist/cjs/HostBranchPresence.js.map +7 -0
  36. package/dist/cjs/Projections.d.ts +209 -0
  37. package/dist/cjs/Projections.d.ts.map +1 -0
  38. package/dist/cjs/Projections.js +906 -0
  39. package/dist/cjs/Projections.js.map +7 -0
  40. package/dist/cjs/RunDevTools.d.ts +181 -0
  41. package/dist/cjs/RunDevTools.d.ts.map +1 -0
  42. package/dist/cjs/RunDevTools.js +195 -0
  43. package/dist/cjs/RunDevTools.js.map +7 -0
  44. package/dist/cjs/RunHistory.d.ts +185 -0
  45. package/dist/cjs/RunHistory.d.ts.map +1 -0
  46. package/dist/cjs/RunHistory.js +68 -0
  47. package/dist/cjs/RunHistory.js.map +7 -0
  48. package/dist/cjs/RunTrace.d.ts +753 -0
  49. package/dist/cjs/RunTrace.d.ts.map +1 -0
  50. package/dist/cjs/RunTrace.js +1593 -0
  51. package/dist/cjs/RunTrace.js.map +7 -0
  52. package/dist/cjs/RuntimeBridge.d.ts +1386 -0
  53. package/dist/cjs/RuntimeBridge.d.ts.map +1 -0
  54. package/dist/cjs/RuntimeBridge.js +598 -0
  55. package/dist/cjs/RuntimeBridge.js.map +7 -0
  56. package/dist/cjs/bun/BunGateway.d.ts +20 -0
  57. package/dist/cjs/bun/BunGateway.d.ts.map +1 -0
  58. package/dist/cjs/bun/BunGateway.js +62 -0
  59. package/dist/cjs/bun/BunGateway.js.map +7 -0
  60. package/dist/cjs/index.d.ts +65 -0
  61. package/dist/cjs/index.d.ts.map +1 -0
  62. package/dist/cjs/index.js +59 -0
  63. package/dist/cjs/index.js.map +7 -0
  64. package/dist/cjs/internal/NativeGateway.d.ts +176 -0
  65. package/dist/cjs/internal/NativeGateway.d.ts.map +1 -0
  66. package/dist/cjs/internal/NativeGateway.js +187 -0
  67. package/dist/cjs/internal/NativeGateway.js.map +7 -0
  68. package/dist/cjs/internal/actionRenderings.d.ts +2 -0
  69. package/dist/cjs/internal/actionRenderings.d.ts.map +1 -0
  70. package/dist/cjs/internal/actionRenderings.js +224 -0
  71. package/dist/cjs/internal/actionRenderings.js.map +7 -0
  72. package/dist/cjs/internal/callEvents.d.ts +97 -0
  73. package/dist/cjs/internal/callEvents.d.ts.map +1 -0
  74. package/dist/cjs/internal/callEvents.js +169 -0
  75. package/dist/cjs/internal/callEvents.js.map +7 -0
  76. package/dist/cjs/internal/digestIndex.d.ts +31 -0
  77. package/dist/cjs/internal/digestIndex.d.ts.map +1 -0
  78. package/dist/cjs/internal/digestIndex.js +105 -0
  79. package/dist/cjs/internal/digestIndex.js.map +7 -0
  80. package/dist/cjs/internal/digestMemory.d.ts +19 -0
  81. package/dist/cjs/internal/digestMemory.d.ts.map +1 -0
  82. package/dist/cjs/internal/digestMemory.js +33 -0
  83. package/dist/cjs/internal/digestMemory.js.map +7 -0
  84. package/dist/cjs/internal/inspectLabels.d.ts +8 -0
  85. package/dist/cjs/internal/inspectLabels.d.ts.map +1 -0
  86. package/dist/cjs/internal/inspectLabels.js +29 -0
  87. package/dist/cjs/internal/inspectLabels.js.map +7 -0
  88. package/dist/cjs/internal/nativeResolution.d.ts +41 -0
  89. package/dist/cjs/internal/nativeResolution.d.ts.map +1 -0
  90. package/dist/cjs/internal/nativeResolution.js +62 -0
  91. package/dist/cjs/internal/nativeResolution.js.map +7 -0
  92. package/dist/cjs/internal/nodeEvents.d.ts +47 -0
  93. package/dist/cjs/internal/nodeEvents.d.ts.map +1 -0
  94. package/dist/cjs/internal/nodeEvents.js +60 -0
  95. package/dist/cjs/internal/nodeEvents.js.map +7 -0
  96. package/dist/cjs/node/NodeGateway.d.ts +16 -0
  97. package/dist/cjs/node/NodeGateway.d.ts.map +1 -0
  98. package/dist/cjs/node/NodeGateway.js +48 -0
  99. package/dist/cjs/node/NodeGateway.js.map +7 -0
  100. package/dist/cjs/package.json +1 -0
  101. package/dist/esm/Diagnosis.d.ts +275 -0
  102. package/dist/esm/Diagnosis.d.ts.map +1 -0
  103. package/dist/esm/Diagnosis.js +697 -0
  104. package/dist/esm/Diagnosis.js.map +1 -0
  105. package/dist/esm/EngineTrace.d.ts +76 -0
  106. package/dist/esm/EngineTrace.d.ts.map +1 -0
  107. package/dist/esm/EngineTrace.js +548 -0
  108. package/dist/esm/EngineTrace.js.map +1 -0
  109. package/dist/esm/GatewayError.d.ts +54 -0
  110. package/dist/esm/GatewayError.d.ts.map +1 -0
  111. package/dist/esm/GatewayError.js +60 -0
  112. package/dist/esm/GatewayError.js.map +1 -0
  113. package/dist/esm/GatewayProjection.d.ts +480 -0
  114. package/dist/esm/GatewayProjection.d.ts.map +1 -0
  115. package/dist/esm/GatewayProjection.js +792 -0
  116. package/dist/esm/GatewayProjection.js.map +1 -0
  117. package/dist/esm/GatewayRpcs.d.ts +1886 -0
  118. package/dist/esm/GatewayRpcs.d.ts.map +1 -0
  119. package/dist/esm/GatewayRpcs.js +145 -0
  120. package/dist/esm/GatewayRpcs.js.map +1 -0
  121. package/dist/esm/GatewaySchema.d.ts +3274 -0
  122. package/dist/esm/GatewaySchema.d.ts.map +1 -0
  123. package/dist/esm/GatewaySchema.js +244 -0
  124. package/dist/esm/GatewaySchema.js.map +1 -0
  125. package/dist/esm/GatewayServer.d.ts +427 -0
  126. package/dist/esm/GatewayServer.d.ts.map +1 -0
  127. package/dist/esm/GatewayServer.js +725 -0
  128. package/dist/esm/GatewayServer.js.map +1 -0
  129. package/dist/esm/HostBranchPresence.d.ts +12 -0
  130. package/dist/esm/HostBranchPresence.d.ts.map +1 -0
  131. package/dist/esm/HostBranchPresence.js +54 -0
  132. package/dist/esm/HostBranchPresence.js.map +1 -0
  133. package/dist/esm/Projections.d.ts +209 -0
  134. package/dist/esm/Projections.d.ts.map +1 -0
  135. package/dist/esm/Projections.js +1254 -0
  136. package/dist/esm/Projections.js.map +1 -0
  137. package/dist/esm/RunDevTools.d.ts +181 -0
  138. package/dist/esm/RunDevTools.d.ts.map +1 -0
  139. package/dist/esm/RunDevTools.js +281 -0
  140. package/dist/esm/RunDevTools.js.map +1 -0
  141. package/dist/esm/RunHistory.d.ts +185 -0
  142. package/dist/esm/RunHistory.d.ts.map +1 -0
  143. package/dist/esm/RunHistory.js +109 -0
  144. package/dist/esm/RunHistory.js.map +1 -0
  145. package/dist/esm/RunTrace.d.ts +753 -0
  146. package/dist/esm/RunTrace.d.ts.map +1 -0
  147. package/dist/esm/RunTrace.js +2105 -0
  148. package/dist/esm/RunTrace.js.map +1 -0
  149. package/dist/esm/RuntimeBridge.d.ts +1386 -0
  150. package/dist/esm/RuntimeBridge.d.ts.map +1 -0
  151. package/dist/esm/RuntimeBridge.js +659 -0
  152. package/dist/esm/RuntimeBridge.js.map +1 -0
  153. package/dist/esm/bun/BunGateway.d.ts +20 -0
  154. package/dist/esm/bun/BunGateway.d.ts.map +1 -0
  155. package/dist/esm/bun/BunGateway.js +32 -0
  156. package/dist/esm/bun/BunGateway.js.map +1 -0
  157. package/dist/esm/index.d.ts +65 -0
  158. package/dist/esm/index.d.ts.map +1 -0
  159. package/dist/esm/index.js +65 -0
  160. package/dist/esm/index.js.map +1 -0
  161. package/dist/esm/internal/NativeGateway.d.ts +176 -0
  162. package/dist/esm/internal/NativeGateway.d.ts.map +1 -0
  163. package/dist/esm/internal/NativeGateway.js +268 -0
  164. package/dist/esm/internal/NativeGateway.js.map +1 -0
  165. package/dist/esm/internal/actionRenderings.d.ts +2 -0
  166. package/dist/esm/internal/actionRenderings.d.ts.map +1 -0
  167. package/dist/esm/internal/actionRenderings.js +202 -0
  168. package/dist/esm/internal/actionRenderings.js.map +1 -0
  169. package/dist/esm/internal/callEvents.d.ts +97 -0
  170. package/dist/esm/internal/callEvents.d.ts.map +1 -0
  171. package/dist/esm/internal/callEvents.js +206 -0
  172. package/dist/esm/internal/callEvents.js.map +1 -0
  173. package/dist/esm/internal/digestIndex.d.ts +31 -0
  174. package/dist/esm/internal/digestIndex.d.ts.map +1 -0
  175. package/dist/esm/internal/digestIndex.js +87 -0
  176. package/dist/esm/internal/digestIndex.js.map +1 -0
  177. package/dist/esm/internal/digestMemory.d.ts +19 -0
  178. package/dist/esm/internal/digestMemory.d.ts.map +1 -0
  179. package/dist/esm/internal/digestMemory.js +23 -0
  180. package/dist/esm/internal/digestMemory.js.map +1 -0
  181. package/dist/esm/internal/inspectLabels.d.ts +8 -0
  182. package/dist/esm/internal/inspectLabels.d.ts.map +1 -0
  183. package/dist/esm/internal/inspectLabels.js +12 -0
  184. package/dist/esm/internal/inspectLabels.js.map +1 -0
  185. package/dist/esm/internal/nativeResolution.d.ts +41 -0
  186. package/dist/esm/internal/nativeResolution.d.ts.map +1 -0
  187. package/dist/esm/internal/nativeResolution.js +78 -0
  188. package/dist/esm/internal/nativeResolution.js.map +1 -0
  189. package/dist/esm/internal/nodeEvents.d.ts +47 -0
  190. package/dist/esm/internal/nodeEvents.d.ts.map +1 -0
  191. package/dist/esm/internal/nodeEvents.js +60 -0
  192. package/dist/esm/internal/nodeEvents.js.map +1 -0
  193. package/dist/esm/node/NodeGateway.d.ts +16 -0
  194. package/dist/esm/node/NodeGateway.d.ts.map +1 -0
  195. package/dist/esm/node/NodeGateway.js +13 -0
  196. package/dist/esm/node/NodeGateway.js.map +1 -0
  197. package/dist/vendor/adapters.json +2707 -0
  198. package/dist/vendor/bun/BunChildProcessSpawner.d.ts +7 -0
  199. package/dist/vendor/bun/BunChildProcessSpawner.js +14 -0
  200. package/dist/vendor/bun/BunClusterHttp.d.ts +83 -0
  201. package/dist/vendor/bun/BunClusterHttp.js +39 -0
  202. package/dist/vendor/bun/BunClusterSocket.d.ts +65 -0
  203. package/dist/vendor/bun/BunClusterSocket.js +22 -0
  204. package/dist/vendor/bun/BunCrypto.d.ts +10 -0
  205. package/dist/vendor/bun/BunCrypto.js +8 -0
  206. package/dist/vendor/bun/BunFileSystem.d.ts +10 -0
  207. package/dist/vendor/bun/BunFileSystem.js +9 -0
  208. package/dist/vendor/bun/BunHttpClient.d.ts +9 -0
  209. package/dist/vendor/bun/BunHttpClient.js +1 -0
  210. package/dist/vendor/bun/BunHttpPlatform.d.ts +10 -0
  211. package/dist/vendor/bun/BunHttpPlatform.js +11 -0
  212. package/dist/vendor/bun/BunHttpServer.d.ts +142 -0
  213. package/dist/vendor/bun/BunHttpServer.js +38 -0
  214. package/dist/vendor/bun/BunHttpServerRequest.d.ts +18 -0
  215. package/dist/vendor/bun/BunHttpServerRequest.js +7 -0
  216. package/dist/vendor/bun/BunMultipart.d.ts +31 -0
  217. package/dist/vendor/bun/BunMultipart.js +12 -0
  218. package/dist/vendor/bun/BunPath.d.ts +24 -0
  219. package/dist/vendor/bun/BunPath.js +12 -0
  220. package/dist/vendor/bun/BunRedis.d.ts +49 -0
  221. package/dist/vendor/bun/BunRedis.js +11 -0
  222. package/dist/vendor/bun/BunRuntime.d.ts +85 -0
  223. package/dist/vendor/bun/BunRuntime.js +8 -0
  224. package/dist/vendor/bun/BunServices.d.ts +34 -0
  225. package/dist/vendor/bun/BunServices.js +23 -0
  226. package/dist/vendor/bun/BunSink.d.ts +8 -0
  227. package/dist/vendor/bun/BunSink.js +12 -0
  228. package/dist/vendor/bun/BunSocket.d.ts +40 -0
  229. package/dist/vendor/bun/BunSocket.js +29 -0
  230. package/dist/vendor/bun/BunSocketServer.d.ts +8 -0
  231. package/dist/vendor/bun/BunSocketServer.js +21 -0
  232. package/dist/vendor/bun/BunStdio.d.ts +11 -0
  233. package/dist/vendor/bun/BunStdio.js +10 -0
  234. package/dist/vendor/bun/BunStream.d.ts +19 -0
  235. package/dist/vendor/bun/BunStream.js +30 -0
  236. package/dist/vendor/bun/BunTerminal.d.ts +21 -0
  237. package/dist/vendor/bun/BunTerminal.js +10 -0
  238. package/dist/vendor/bun/BunWorker.d.ts +20 -0
  239. package/dist/vendor/bun/BunWorker.js +9 -0
  240. package/dist/vendor/bun/BunWorkerRunner.d.ts +12 -0
  241. package/dist/vendor/bun/BunWorkerRunner.js +7 -0
  242. package/dist/vendor/bun/LICENSE +21 -0
  243. package/dist/vendor/bun/index.d.ts +92 -0
  244. package/dist/vendor/bun/index.js +107 -0
  245. package/dist/vendor/chunk-2GCOZTTW.js +48 -0
  246. package/dist/vendor/chunk-37CUR3PO.js +81 -0
  247. package/dist/vendor/chunk-3ARKKENZ.js +45 -0
  248. package/dist/vendor/chunk-3NV2UDBI.js +7 -0
  249. package/dist/vendor/chunk-3OSW7CT7.js +143 -0
  250. package/dist/vendor/chunk-62R63L74.js +62 -0
  251. package/dist/vendor/chunk-6AQLBC2I.js +118 -0
  252. package/dist/vendor/chunk-6C5H7S6B.js +18 -0
  253. package/dist/vendor/chunk-6DY5RBZD.js +85 -0
  254. package/dist/vendor/chunk-6UPBD47P.js +53 -0
  255. package/dist/vendor/chunk-AVVVN75Z.js +96 -0
  256. package/dist/vendor/chunk-B4DHEMBB.js +14 -0
  257. package/dist/vendor/chunk-BCK3NJOX.js +15 -0
  258. package/dist/vendor/chunk-BFBIHJ6X.js +0 -0
  259. package/dist/vendor/chunk-CES4OUM4.js +63 -0
  260. package/dist/vendor/chunk-D64L6YND.js +59 -0
  261. package/dist/vendor/chunk-DS2R6WOM.js +18 -0
  262. package/dist/vendor/chunk-DX4Z23DM.js +65 -0
  263. package/dist/vendor/chunk-DZ2VOUDP.js +564 -0
  264. package/dist/vendor/chunk-FOXN6JPJ.js +61 -0
  265. package/dist/vendor/chunk-FPQF7CR5.js +55 -0
  266. package/dist/vendor/chunk-FUTCTCEG.js +20 -0
  267. package/dist/vendor/chunk-GUPAV2YZ.js +18 -0
  268. package/dist/vendor/chunk-H2Z2Y4QH.js +70 -0
  269. package/dist/vendor/chunk-HAEDVSSM.js +129 -0
  270. package/dist/vendor/chunk-HY7BBL3K.js +93 -0
  271. package/dist/vendor/chunk-IFTTT6D5.js +31 -0
  272. package/dist/vendor/chunk-KQDSNB7M.js +26 -0
  273. package/dist/vendor/chunk-LIHLXXGQ.js +26 -0
  274. package/dist/vendor/chunk-LKCGQEE5.js +28 -0
  275. package/dist/vendor/chunk-MH2J3BYB.js +0 -0
  276. package/dist/vendor/chunk-ML2NAFH2.js +131 -0
  277. package/dist/vendor/chunk-MLFIZ5O2.js +0 -0
  278. package/dist/vendor/chunk-MLKGABMK.js +9 -0
  279. package/dist/vendor/chunk-MSCLEMYX.js +71 -0
  280. package/dist/vendor/chunk-OBWXQKVP.js +57 -0
  281. package/dist/vendor/chunk-QR557K66.js +20 -0
  282. package/dist/vendor/chunk-R4QUY7DH.js +18 -0
  283. package/dist/vendor/chunk-RGECXXJS.js +18 -0
  284. package/dist/vendor/chunk-TFY7W6D4.js +36 -0
  285. package/dist/vendor/chunk-TGPIVY4A.js +104 -0
  286. package/dist/vendor/chunk-TGXCX6W3.js +398 -0
  287. package/dist/vendor/chunk-TOHSFXMV.js +437 -0
  288. package/dist/vendor/chunk-UHIDPUFF.js +34 -0
  289. package/dist/vendor/chunk-ULT6CWUI.js +109 -0
  290. package/dist/vendor/chunk-UXBGYQR3.js +18 -0
  291. package/dist/vendor/chunk-V6LUGQ7O.js +21 -0
  292. package/dist/vendor/chunk-W4OASVX6.js +92 -0
  293. package/dist/vendor/chunk-WAII54GA.js +18 -0
  294. package/dist/vendor/chunk-WECQDT36.js +426 -0
  295. package/dist/vendor/chunk-WHKMOC7Z.js +28 -0
  296. package/dist/vendor/chunk-WVFOZ2UL.js +40 -0
  297. package/dist/vendor/chunk-X73E2UPI.js +18 -0
  298. package/dist/vendor/chunk-XCYARUII.js +63 -0
  299. package/dist/vendor/chunk-XFEVTDVD.js +34 -0
  300. package/dist/vendor/chunk-XFZZYSJ4.js +22 -0
  301. package/dist/vendor/chunk-XJWJXLXJ.js +18 -0
  302. package/dist/vendor/chunk-XY3Q62EO.js +18 -0
  303. package/dist/vendor/chunk-YDASSC75.js +394 -0
  304. package/dist/vendor/chunk-Z6C7SO5Z.js +507 -0
  305. package/dist/vendor/chunk-Z7QNPJEB.js +229 -0
  306. package/dist/vendor/chunk-Z7QPP4YH.js +249 -0
  307. package/dist/vendor/chunk-ZCHYLHJH.js +86 -0
  308. package/dist/vendor/chunk-ZIQVYVMA.js +22 -0
  309. package/dist/vendor/chunk-ZPIG2CUA.js +34 -0
  310. package/dist/vendor/cjs/bun/BunChildProcessSpawner.d.ts +7 -0
  311. package/dist/vendor/cjs/bun/BunChildProcessSpawner.js +1 -0
  312. package/dist/vendor/cjs/bun/BunClusterHttp.d.ts +83 -0
  313. package/dist/vendor/cjs/bun/BunClusterHttp.js +1 -0
  314. package/dist/vendor/cjs/bun/BunClusterSocket.d.ts +65 -0
  315. package/dist/vendor/cjs/bun/BunClusterSocket.js +1 -0
  316. package/dist/vendor/cjs/bun/BunCrypto.d.ts +10 -0
  317. package/dist/vendor/cjs/bun/BunCrypto.js +1 -0
  318. package/dist/vendor/cjs/bun/BunFileSystem.d.ts +10 -0
  319. package/dist/vendor/cjs/bun/BunFileSystem.js +1 -0
  320. package/dist/vendor/cjs/bun/BunHttpClient.d.ts +9 -0
  321. package/dist/vendor/cjs/bun/BunHttpClient.js +1 -0
  322. package/dist/vendor/cjs/bun/BunHttpPlatform.d.ts +10 -0
  323. package/dist/vendor/cjs/bun/BunHttpPlatform.js +1 -0
  324. package/dist/vendor/cjs/bun/BunHttpServer.d.ts +142 -0
  325. package/dist/vendor/cjs/bun/BunHttpServer.js +1 -0
  326. package/dist/vendor/cjs/bun/BunHttpServerRequest.d.ts +18 -0
  327. package/dist/vendor/cjs/bun/BunHttpServerRequest.js +1 -0
  328. package/dist/vendor/cjs/bun/BunMultipart.d.ts +31 -0
  329. package/dist/vendor/cjs/bun/BunMultipart.js +1 -0
  330. package/dist/vendor/cjs/bun/BunPath.d.ts +24 -0
  331. package/dist/vendor/cjs/bun/BunPath.js +1 -0
  332. package/dist/vendor/cjs/bun/BunRedis.d.ts +49 -0
  333. package/dist/vendor/cjs/bun/BunRedis.js +1 -0
  334. package/dist/vendor/cjs/bun/BunRuntime.d.ts +85 -0
  335. package/dist/vendor/cjs/bun/BunRuntime.js +1 -0
  336. package/dist/vendor/cjs/bun/BunServices.d.ts +34 -0
  337. package/dist/vendor/cjs/bun/BunServices.js +1 -0
  338. package/dist/vendor/cjs/bun/BunSink.d.ts +8 -0
  339. package/dist/vendor/cjs/bun/BunSink.js +1 -0
  340. package/dist/vendor/cjs/bun/BunSocket.d.ts +40 -0
  341. package/dist/vendor/cjs/bun/BunSocket.js +1 -0
  342. package/dist/vendor/cjs/bun/BunSocketServer.d.ts +8 -0
  343. package/dist/vendor/cjs/bun/BunSocketServer.js +1 -0
  344. package/dist/vendor/cjs/bun/BunStdio.d.ts +11 -0
  345. package/dist/vendor/cjs/bun/BunStdio.js +1 -0
  346. package/dist/vendor/cjs/bun/BunStream.d.ts +19 -0
  347. package/dist/vendor/cjs/bun/BunStream.js +1 -0
  348. package/dist/vendor/cjs/bun/BunTerminal.d.ts +21 -0
  349. package/dist/vendor/cjs/bun/BunTerminal.js +1 -0
  350. package/dist/vendor/cjs/bun/BunWorker.d.ts +20 -0
  351. package/dist/vendor/cjs/bun/BunWorker.js +1 -0
  352. package/dist/vendor/cjs/bun/BunWorkerRunner.d.ts +12 -0
  353. package/dist/vendor/cjs/bun/BunWorkerRunner.js +1 -0
  354. package/dist/vendor/cjs/bun/index.d.ts +92 -0
  355. package/dist/vendor/cjs/bun/index.js +1 -0
  356. package/dist/vendor/cjs/node/NodeChildProcessSpawner.d.ts +7 -0
  357. package/dist/vendor/cjs/node/NodeChildProcessSpawner.js +1 -0
  358. package/dist/vendor/cjs/node/NodeClusterHttp.d.ts +63 -0
  359. package/dist/vendor/cjs/node/NodeClusterHttp.js +1 -0
  360. package/dist/vendor/cjs/node/NodeClusterSocket.d.ts +79 -0
  361. package/dist/vendor/cjs/node/NodeClusterSocket.js +1 -0
  362. package/dist/vendor/cjs/node/NodeCrypto.d.ts +10 -0
  363. package/dist/vendor/cjs/node/NodeCrypto.js +1 -0
  364. package/dist/vendor/cjs/node/NodeFileSystem.d.ts +10 -0
  365. package/dist/vendor/cjs/node/NodeFileSystem.js +1 -0
  366. package/dist/vendor/cjs/node/NodeHttpClient.d.ts +179 -0
  367. package/dist/vendor/cjs/node/NodeHttpClient.js +1 -0
  368. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.d.ts +62 -0
  369. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.js +1 -0
  370. package/dist/vendor/cjs/node/NodeHttpPlatform.d.ts +36 -0
  371. package/dist/vendor/cjs/node/NodeHttpPlatform.js +1 -0
  372. package/dist/vendor/cjs/node/NodeHttpServer.d.ts +120 -0
  373. package/dist/vendor/cjs/node/NodeHttpServer.js +1 -0
  374. package/dist/vendor/cjs/node/NodeHttpServerRequest.d.ts +29 -0
  375. package/dist/vendor/cjs/node/NodeHttpServerRequest.js +1 -0
  376. package/dist/vendor/cjs/node/NodeMultipart.d.ts +46 -0
  377. package/dist/vendor/cjs/node/NodeMultipart.js +1 -0
  378. package/dist/vendor/cjs/node/NodeMultipartParser.d.ts +97 -0
  379. package/dist/vendor/cjs/node/NodeMultipartParser.js +1 -0
  380. package/dist/vendor/cjs/node/NodePath.d.ts +27 -0
  381. package/dist/vendor/cjs/node/NodePath.js +1 -0
  382. package/dist/vendor/cjs/node/NodeRedis.d.ts +74 -0
  383. package/dist/vendor/cjs/node/NodeRedis.js +1 -0
  384. package/dist/vendor/cjs/node/NodeRuntime.d.ts +85 -0
  385. package/dist/vendor/cjs/node/NodeRuntime.js +1 -0
  386. package/dist/vendor/cjs/node/NodeServices.d.ts +34 -0
  387. package/dist/vendor/cjs/node/NodeServices.js +1 -0
  388. package/dist/vendor/cjs/node/NodeSink.d.ts +8 -0
  389. package/dist/vendor/cjs/node/NodeSink.js +1 -0
  390. package/dist/vendor/cjs/node/NodeSocket.d.ts +38 -0
  391. package/dist/vendor/cjs/node/NodeSocket.js +1 -0
  392. package/dist/vendor/cjs/node/NodeSocketServer.d.ts +8 -0
  393. package/dist/vendor/cjs/node/NodeSocketServer.js +1 -0
  394. package/dist/vendor/cjs/node/NodeStdio.d.ts +11 -0
  395. package/dist/vendor/cjs/node/NodeStdio.js +1 -0
  396. package/dist/vendor/cjs/node/NodeStream.d.ts +8 -0
  397. package/dist/vendor/cjs/node/NodeStream.js +1 -0
  398. package/dist/vendor/cjs/node/NodeTerminal.d.ts +21 -0
  399. package/dist/vendor/cjs/node/NodeTerminal.js +1 -0
  400. package/dist/vendor/cjs/node/NodeWorker.d.ts +22 -0
  401. package/dist/vendor/cjs/node/NodeWorker.js +1 -0
  402. package/dist/vendor/cjs/node/NodeWorkerRunner.d.ts +12 -0
  403. package/dist/vendor/cjs/node/NodeWorkerRunner.js +1 -0
  404. package/dist/vendor/cjs/node/Undici.d.ts +28 -0
  405. package/dist/vendor/cjs/node/Undici.js +1 -0
  406. package/dist/vendor/cjs/node/index.d.ts +100 -0
  407. package/dist/vendor/cjs/node/index.js +1 -0
  408. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  409. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.js +1 -0
  410. package/dist/vendor/cjs/node-shared/NodeClusterSocket.d.ts +22 -0
  411. package/dist/vendor/cjs/node-shared/NodeClusterSocket.js +1 -0
  412. package/dist/vendor/cjs/node-shared/NodeCrypto.d.ts +27 -0
  413. package/dist/vendor/cjs/node-shared/NodeCrypto.js +1 -0
  414. package/dist/vendor/cjs/node-shared/NodeFileSystem.d.ts +11 -0
  415. package/dist/vendor/cjs/node-shared/NodeFileSystem.js +1 -0
  416. package/dist/vendor/cjs/node-shared/NodeHttpCompression.d.ts +36 -0
  417. package/dist/vendor/cjs/node-shared/NodeHttpCompression.js +1 -0
  418. package/dist/vendor/cjs/node-shared/NodePath.d.ts +27 -0
  419. package/dist/vendor/cjs/node-shared/NodePath.js +1 -0
  420. package/dist/vendor/cjs/node-shared/NodeRuntime.d.ts +47 -0
  421. package/dist/vendor/cjs/node-shared/NodeRuntime.js +1 -0
  422. package/dist/vendor/cjs/node-shared/NodeSink.d.ts +69 -0
  423. package/dist/vendor/cjs/node-shared/NodeSink.js +1 -0
  424. package/dist/vendor/cjs/node-shared/NodeSocket.d.ts +134 -0
  425. package/dist/vendor/cjs/node-shared/NodeSocket.js +1 -0
  426. package/dist/vendor/cjs/node-shared/NodeSocketServer.d.ts +80 -0
  427. package/dist/vendor/cjs/node-shared/NodeSocketServer.js +1 -0
  428. package/dist/vendor/cjs/node-shared/NodeStdio.d.ts +12 -0
  429. package/dist/vendor/cjs/node-shared/NodeStdio.js +1 -0
  430. package/dist/vendor/cjs/node-shared/NodeStream.d.ts +179 -0
  431. package/dist/vendor/cjs/node-shared/NodeStream.js +1 -0
  432. package/dist/vendor/cjs/node-shared/NodeTerminal.d.ts +22 -0
  433. package/dist/vendor/cjs/node-shared/NodeTerminal.js +1 -0
  434. package/dist/vendor/cjs/node-shared/index.d.ts +56 -0
  435. package/dist/vendor/cjs/node-shared/index.js +1 -0
  436. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  437. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.js +1 -0
  438. package/dist/vendor/cjs/node-shared/internal/utils.d.ts +2 -0
  439. package/dist/vendor/cjs/node-shared/internal/utils.js +1 -0
  440. package/dist/vendor/cjs/package.json +1 -0
  441. package/dist/vendor/cjs/platform-bun.d.ts +92 -0
  442. package/dist/vendor/cjs/platform-bun.js +1 -0
  443. package/dist/vendor/cjs/platform-node-shared.d.ts +56 -0
  444. package/dist/vendor/cjs/platform-node-shared.js +1 -0
  445. package/dist/vendor/cjs/platform-node.d.ts +100 -0
  446. package/dist/vendor/cjs/platform-node.js +1 -0
  447. package/dist/vendor/node/LICENSE +21 -0
  448. package/dist/vendor/node/NodeChildProcessSpawner.d.ts +7 -0
  449. package/dist/vendor/node/NodeChildProcessSpawner.js +14 -0
  450. package/dist/vendor/node/NodeClusterHttp.d.ts +63 -0
  451. package/dist/vendor/node/NodeClusterHttp.js +43 -0
  452. package/dist/vendor/node/NodeClusterSocket.d.ts +79 -0
  453. package/dist/vendor/node/NodeClusterSocket.js +30 -0
  454. package/dist/vendor/node/NodeCrypto.d.ts +10 -0
  455. package/dist/vendor/node/NodeCrypto.js +8 -0
  456. package/dist/vendor/node/NodeFileSystem.d.ts +10 -0
  457. package/dist/vendor/node/NodeFileSystem.js +9 -0
  458. package/dist/vendor/node/NodeHttpClient.d.ts +179 -0
  459. package/dist/vendor/node/NodeHttpClient.js +46 -0
  460. package/dist/vendor/node/NodeHttpIncomingMessage.d.ts +62 -0
  461. package/dist/vendor/node/NodeHttpIncomingMessage.js +10 -0
  462. package/dist/vendor/node/NodeHttpPlatform.d.ts +36 -0
  463. package/dist/vendor/node/NodeHttpPlatform.js +16 -0
  464. package/dist/vendor/node/NodeHttpServer.d.ts +120 -0
  465. package/dist/vendor/node/NodeHttpServer.js +46 -0
  466. package/dist/vendor/node/NodeHttpServerRequest.d.ts +29 -0
  467. package/dist/vendor/node/NodeHttpServerRequest.js +9 -0
  468. package/dist/vendor/node/NodeMultipart.d.ts +46 -0
  469. package/dist/vendor/node/NodeMultipart.js +15 -0
  470. package/dist/vendor/node/NodeMultipartParser.d.ts +97 -0
  471. package/dist/vendor/node/NodeMultipartParser.js +11 -0
  472. package/dist/vendor/node/NodePath.d.ts +27 -0
  473. package/dist/vendor/node/NodePath.js +12 -0
  474. package/dist/vendor/node/NodeRedis.d.ts +74 -0
  475. package/dist/vendor/node/NodeRedis.js +11 -0
  476. package/dist/vendor/node/NodeRuntime.d.ts +85 -0
  477. package/dist/vendor/node/NodeRuntime.js +8 -0
  478. package/dist/vendor/node/NodeServices.d.ts +34 -0
  479. package/dist/vendor/node/NodeServices.js +23 -0
  480. package/dist/vendor/node/NodeSink.d.ts +8 -0
  481. package/dist/vendor/node/NodeSink.js +12 -0
  482. package/dist/vendor/node/NodeSocket.d.ts +38 -0
  483. package/dist/vendor/node/NodeSocket.js +31 -0
  484. package/dist/vendor/node/NodeSocketServer.d.ts +8 -0
  485. package/dist/vendor/node/NodeSocketServer.js +21 -0
  486. package/dist/vendor/node/NodeStdio.d.ts +11 -0
  487. package/dist/vendor/node/NodeStdio.js +10 -0
  488. package/dist/vendor/node/NodeStream.d.ts +8 -0
  489. package/dist/vendor/node/NodeStream.js +27 -0
  490. package/dist/vendor/node/NodeTerminal.d.ts +21 -0
  491. package/dist/vendor/node/NodeTerminal.js +10 -0
  492. package/dist/vendor/node/NodeWorker.d.ts +22 -0
  493. package/dist/vendor/node/NodeWorker.js +9 -0
  494. package/dist/vendor/node/NodeWorkerRunner.d.ts +12 -0
  495. package/dist/vendor/node/NodeWorkerRunner.js +7 -0
  496. package/dist/vendor/node/Undici.d.ts +28 -0
  497. package/dist/vendor/node/Undici.js +9 -0
  498. package/dist/vendor/node/index.d.ts +100 -0
  499. package/dist/vendor/node/index.js +115 -0
  500. package/dist/vendor/node-shared/LICENSE +21 -0
  501. package/dist/vendor/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  502. package/dist/vendor/node-shared/NodeChildProcessSpawner.js +13 -0
  503. package/dist/vendor/node-shared/NodeClusterSocket.d.ts +22 -0
  504. package/dist/vendor/node-shared/NodeClusterSocket.js +11 -0
  505. package/dist/vendor/node-shared/NodeCrypto.d.ts +27 -0
  506. package/dist/vendor/node-shared/NodeCrypto.js +9 -0
  507. package/dist/vendor/node-shared/NodeFileSystem.d.ts +11 -0
  508. package/dist/vendor/node-shared/NodeFileSystem.js +8 -0
  509. package/dist/vendor/node-shared/NodeHttpCompression.d.ts +36 -0
  510. package/dist/vendor/node-shared/NodeHttpCompression.js +13 -0
  511. package/dist/vendor/node-shared/NodePath.d.ts +27 -0
  512. package/dist/vendor/node-shared/NodePath.js +11 -0
  513. package/dist/vendor/node-shared/NodeRuntime.d.ts +47 -0
  514. package/dist/vendor/node-shared/NodeRuntime.js +7 -0
  515. package/dist/vendor/node-shared/NodeSink.d.ts +69 -0
  516. package/dist/vendor/node-shared/NodeSink.js +11 -0
  517. package/dist/vendor/node-shared/NodeSocket.d.ts +134 -0
  518. package/dist/vendor/node-shared/NodeSocket.js +23 -0
  519. package/dist/vendor/node-shared/NodeSocketServer.d.ts +80 -0
  520. package/dist/vendor/node-shared/NodeSocketServer.js +20 -0
  521. package/dist/vendor/node-shared/NodeStdio.d.ts +12 -0
  522. package/dist/vendor/node-shared/NodeStdio.js +9 -0
  523. package/dist/vendor/node-shared/NodeStream.d.ts +179 -0
  524. package/dist/vendor/node-shared/NodeStream.js +26 -0
  525. package/dist/vendor/node-shared/NodeTerminal.d.ts +22 -0
  526. package/dist/vendor/node-shared/NodeTerminal.js +9 -0
  527. package/dist/vendor/node-shared/index.d.ts +56 -0
  528. package/dist/vendor/node-shared/index.js +58 -0
  529. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  530. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.js +7 -0
  531. package/dist/vendor/node-shared/internal/utils.d.ts +2 -0
  532. package/dist/vendor/node-shared/internal/utils.js +7 -0
  533. package/dist/vendor/platform-bun.d.ts +92 -0
  534. package/dist/vendor/platform-bun.js +107 -0
  535. package/dist/vendor/platform-node-shared.d.ts +56 -0
  536. package/dist/vendor/platform-node-shared.js +58 -0
  537. package/dist/vendor/platform-node.d.ts +100 -0
  538. package/dist/vendor/platform-node.js +115 -0
  539. package/docs/README.md +158 -0
  540. package/docs/api.md +601 -0
  541. package/docs/concepts/projections.md +250 -0
  542. package/docs/concepts/subscriptions.md +204 -0
  543. package/docs/concepts/trust-boundary.md +256 -0
  544. package/docs/guides/diagnose-a-run.md +115 -0
  545. package/docs/guides/follow-a-run.md +150 -0
  546. package/docs/guides/host-the-gateway.md +153 -0
  547. package/docs/guides/read-a-projection.md +138 -0
  548. package/docs/guides/serve-beyond-loopback.md +166 -0
  549. package/docs/guides/submit-an-approval.md +187 -0
  550. package/docs/guides/testing.md +148 -0
  551. package/docs/installation.md +89 -0
  552. package/docs/quickstart.md +200 -0
  553. package/docs/troubleshooting.md +355 -0
  554. package/package.json +264 -32
  555. package/src/Diagnosis.ts +892 -0
  556. package/src/EngineTrace.ts +605 -0
  557. package/src/GatewayError.ts +71 -0
  558. package/src/GatewayProjection.ts +948 -0
  559. package/src/GatewayRpcs.ts +179 -0
  560. package/src/GatewaySchema.ts +516 -0
  561. package/src/GatewayServer.ts +932 -0
  562. package/src/HostBranchPresence.ts +72 -0
  563. package/src/Projections.ts +1735 -0
  564. package/src/RunDevTools.ts +394 -0
  565. package/src/RunHistory.ts +174 -0
  566. package/src/RunTrace.ts +2793 -0
  567. package/src/RuntimeBridge.ts +835 -0
  568. package/src/bun/BunGateway.ts +52 -0
  569. package/src/index.ts +77 -0
  570. package/src/internal/NativeGateway.ts +360 -0
  571. package/src/internal/actionRenderings.ts +201 -0
  572. package/src/internal/callEvents.ts +257 -0
  573. package/src/internal/digestIndex.ts +134 -0
  574. package/src/internal/digestMemory.ts +27 -0
  575. package/src/internal/inspectLabels.ts +13 -0
  576. package/src/internal/nativeResolution.ts +103 -0
  577. package/src/internal/nodeEvents.ts +100 -0
  578. package/src/node/NodeGateway.ts +30 -0
  579. package/openapi.yaml +0 -29945
  580. package/src/README.md +0 -39
  581. package/src/api/README.md +0 -23
  582. package/src/api/apiCollectionNames.js +0 -10
  583. package/src/api/index.d.ts +0 -126
  584. package/src/api/index.js +0 -14
  585. package/src/api/normalizeApiRow.js +0 -36
  586. package/src/api/serializeAccountRow.js +0 -10
  587. package/src/api/serializeApprovalRow.js +0 -53
  588. package/src/api/serializeComparisonScoreRow.js +0 -18
  589. package/src/api/serializeCronRow.js +0 -30
  590. package/src/api/serializeDocRow.js +0 -20
  591. package/src/api/serializeMemoryFactRow.js +0 -21
  592. package/src/api/serializePromptRow.js +0 -10
  593. package/src/api/serializeRunEventRow.js +0 -28
  594. package/src/api/serializeRunRow.js +0 -93
  595. package/src/api/serializeScoreDetailRow.js +0 -25
  596. package/src/api/serializeScoreRow.js +0 -26
  597. package/src/api/serializeTicketRow.js +0 -20
  598. package/src/api/serializeWorkflowRow.js +0 -10
  599. package/src/auth/scopes.d.ts +0 -19
  600. package/src/auth/scopes.js +0 -164
  601. package/src/index.d.ts +0 -316
  602. package/src/index.js +0 -108
  603. package/src/rpc/gatewayRpcTypes.ts +0 -186
  604. package/src/rpc/index.d.ts +0 -223
  605. package/src/rpc/index.js +0 -2527
@@ -0,0 +1,835 @@
1
+ /**
2
+ * Versioned JSON boundary between the Go product backend and the canonical
3
+ * TypeScript Flow/Control host.
4
+ *
5
+ * This module adapts HTTP-shaped commands to `Control`. It owns no graph,
6
+ * scheduler, journal, or lifecycle state of its own.
7
+ *
8
+ * @since 1.0.0
9
+ */
10
+
11
+ import { Control } from "@smthrs/control/Control"
12
+ import * as ControlError from "@smthrs/control/ControlError"
13
+ import { ControlExecutor, type Service as ControlExecutorService } from "@smthrs/control/ControlExecutor"
14
+ import type { Principal, WatchCursor } from "@smthrs/control/ControlSchema"
15
+ import {
16
+ ApprovalPayload,
17
+ ControlEvent,
18
+ MessageSteer,
19
+ Receipt,
20
+ RunSummary,
21
+ SignalPayload
22
+ } from "@smthrs/control/ControlSchema"
23
+ import * as Fault from "@smthrs/flow/Fault"
24
+ import { Effect, Layer, Schema, Stream } from "effect"
25
+ import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
26
+ import { RunSummaryRow } from "./GatewayProjection.ts"
27
+ import * as Projections from "./Projections.ts"
28
+ import { monitorFromJournal } from "./RunTrace.ts"
29
+
30
+ /**
31
+ * The only protocol version accepted by this host.
32
+ * @since 1.0.0
33
+ * @category constants
34
+ */
35
+ export const protocol = "smithers.flow-runtime/v1" as const
36
+
37
+ const Sha256 = Schema.String.check(Schema.isPattern(/^[0-9a-f]{64}$/))
38
+ const SourceRevision = Schema.String.check(Schema.isPattern(/^[0-9a-f]{40}$/))
39
+ const PositiveSafeInteger = Schema.Int.check(
40
+ Schema.isGreaterThan(0),
41
+ Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER)
42
+ )
43
+ const RequestId = Schema.NonEmptyString.check(Schema.isMaxLength(1024))
44
+ // A decimal consumes a whole journal entry. v1 preserves an expansion offset;
45
+ // the empty seed consumes nothing, including sequence zero.
46
+ const observationCursorPattern = /^(?:(0|[1-9][0-9]*)|v1:(0|[1-9][0-9]*):(0|[1-9][0-9]*))?(?![\s\S])/
47
+
48
+ /**
49
+ * Non-secret identity published by readiness for startup compatibility.
50
+ * @since 1.0.0
51
+ * @category models
52
+ */
53
+ export const Identity = Schema.Struct({
54
+ protocol: Schema.Literal(protocol),
55
+ runtimeArtifactDigest: Sha256,
56
+ sourceRevision: SourceRevision,
57
+ ownerGeneration: PositiveSafeInteger
58
+ })
59
+
60
+ /**
61
+ * Non-secret identity published by readiness for startup compatibility.
62
+ * @since 1.0.0
63
+ * @category models
64
+ */
65
+ export type Identity = typeof Identity.Type
66
+ const common = {
67
+ protocol: Schema.Literal(protocol),
68
+ applicationRequestId: RequestId,
69
+ ownerGeneration: PositiveSafeInteger
70
+ }
71
+
72
+ // The version a launch must run: a flow, the source commit it was chosen
73
+ // from and that flow's execution digest. A pinned launch runs only a plan
74
+ // with that exact identity.
75
+ const LaunchPin = Schema.Struct({
76
+ flow: Schema.NonEmptyString,
77
+ sourceCommit: SourceRevision,
78
+ executionDigest: Sha256
79
+ })
80
+
81
+ /**
82
+ * Launches one immutable named flow. Planning and running stay in Control.
83
+ * @since 1.0.0
84
+ * @category models
85
+ */
86
+ export const LaunchCommand = Schema.Struct({
87
+ ...common,
88
+ operation: Schema.Literal("launch"),
89
+ attempt: PositiveSafeInteger,
90
+ runId: Schema.optional(Schema.NonEmptyString),
91
+ runtimeArtifactDigest: Sha256,
92
+ sourceRevision: SourceRevision,
93
+ flowId: Schema.NonEmptyString,
94
+ payload: Schema.Json,
95
+ pin: Schema.optional(LaunchPin)
96
+ })
97
+
98
+ /**
99
+ * Submits an approval or denial payload produced by the same Control host.
100
+ * @since 1.0.0
101
+ * @category models
102
+ */
103
+ export const DecisionCommand = Schema.Struct({
104
+ ...common,
105
+ operation: Schema.Literals(["approve", "deny"]),
106
+ approval: ApprovalPayload
107
+ })
108
+
109
+ /**
110
+ * Delivers one durable named signal.
111
+ * @since 1.0.0
112
+ * @category models
113
+ */
114
+ export const SignalCommand = Schema.Struct({
115
+ ...common,
116
+ operation: Schema.Literal("signal"),
117
+ runId: Schema.NonEmptyString,
118
+ signal: SignalPayload
119
+ })
120
+
121
+ const Steer = Schema.Union([
122
+ Schema.Struct({ kind: Schema.Literal("Message"), body: Schema.String }),
123
+ Schema.Struct({ kind: Schema.Literal("Seat"), seat: Schema.NonEmptyString }),
124
+ Schema.Struct({
125
+ kind: Schema.Literal("Thinking"),
126
+ thinking: Schema.Literals(["none", "minimal", "low", "medium", "high", "xhigh"])
127
+ }),
128
+ Schema.Struct({ kind: Schema.Literal("Tools"), toolNames: Schema.NonEmptyArray(Schema.NonEmptyString) })
129
+ ])
130
+
131
+ /**
132
+ * Enqueues one steer for the runtime's next turn boundary.
133
+ * @since 1.0.0
134
+ * @category models
135
+ */
136
+ export const SteerCommand = Schema.Struct({
137
+ version: Schema.optional(Schema.Number),
138
+ ...common,
139
+ operation: Schema.Literal("steer"),
140
+ runId: Schema.NonEmptyString,
141
+ messageId: Schema.NonEmptyString,
142
+ createdAt: Schema.Number,
143
+ attribution: MessageSteer.fields.attribution,
144
+ steer: Steer
145
+ })
146
+
147
+ /**
148
+ * Requests cancellation, explicit resume, or completion of a retained run.
149
+ * @since 1.0.0
150
+ * @category models
151
+ */
152
+ export const LifecycleCommand = Schema.Struct({
153
+ ...common,
154
+ /** Completion is a host-only lifecycle operation. @since 1.0.0 */
155
+ operation: Schema.Literals(["cancel", "resume", "complete"]),
156
+ runId: Schema.NonEmptyString,
157
+ reason: Schema.optional(Schema.String)
158
+ })
159
+
160
+ /**
161
+ * Every mutating operation accepted by the bridge.
162
+ * @since 1.0.0
163
+ * @category models
164
+ */
165
+ export const Command = Schema.Union([
166
+ LaunchCommand,
167
+ DecisionCommand,
168
+ SignalCommand,
169
+ SteerCommand,
170
+ LifecycleCommand
171
+ ])
172
+
173
+ /**
174
+ * Every mutating operation accepted by the bridge.
175
+ * @since 1.0.0
176
+ * @category models
177
+ */
178
+ export type Command = typeof Command.Type
179
+
180
+ /**
181
+ * A bounded, reconnectable read of one canonical runtime execution.
182
+ * @since 1.0.0
183
+ * @category models
184
+ */
185
+ export const ObserveRequest = Schema.Struct({
186
+ protocol: Schema.Literal(protocol),
187
+ runId: Schema.NonEmptyString,
188
+ afterCursor: Schema.optional(Schema.String.check(Schema.isPattern(observationCursorPattern))),
189
+ limit: Schema.optional(PositiveSafeInteger)
190
+ })
191
+
192
+ /**
193
+ * A bounded, reconnectable read of one canonical runtime execution.
194
+ * @since 1.0.0
195
+ * @category models
196
+ */
197
+ export type ObserveRequest = typeof ObserveRequest.Type
198
+
199
+ /**
200
+ * A process result recorded by installed host equipment, never by a flow result.
201
+ * @since 1.0.0
202
+ * @category models
203
+ */
204
+ export const CommandReceipt = Schema.Struct({
205
+ runId: Schema.NonEmptyString,
206
+ operationId: Schema.NonEmptyString,
207
+ status: Schema.Literals(["running", "completed"]),
208
+ argv: Schema.NonEmptyArray(Schema.String),
209
+ exitCode: Schema.optionalKey(Schema.Int),
210
+ stderr: Schema.optionalKey(Schema.String),
211
+ fault: Schema.optionalKey(Schema.Literals(["factory", "infra"]))
212
+ })
213
+ /**
214
+ * A process result recorded by installed host equipment.
215
+ * @since 1.0.0
216
+ * @category models
217
+ */
218
+ export type CommandReceipt = typeof CommandReceipt.Type
219
+
220
+ /**
221
+ * Host identity fixed for the lifetime of one owning process.
222
+ * @since 1.0.0
223
+ * @category models
224
+ */
225
+ export interface Config {
226
+ readonly runtimeArtifactDigest: string
227
+ readonly sourceRevision: string
228
+ /** Captured and verified by native catalog registration, never decoded from a request or environment. */
229
+ readonly verifiedCatalogSourceRevision?: string | undefined
230
+ readonly ownerGeneration: number
231
+ /**
232
+ * Private installed-host receipt reader; never accepted on the command wire.
233
+ * @since 1.0.0
234
+ */
235
+ readonly commandReceipt?: ((runId: string) => Effect.Effect<CommandReceipt | undefined, unknown>) | undefined
236
+ /**
237
+ * Native host completion port, captured from the executor rather than from a request.
238
+ * @since 1.0.0
239
+ */
240
+ readonly requestComplete?: ControlExecutorService["requestComplete"]
241
+ readonly authenticate: (
242
+ headers: Readonly<Record<string, string>>
243
+ ) => Effect.Effect<Principal, ControlError.Unauthorized>
244
+ }
245
+
246
+ /**
247
+ * Stable bridge-only failures. Control failures retain their own code.
248
+ * @since 1.0.0
249
+ * @category errors
250
+ */
251
+ export class BridgeError extends Schema.TaggedError<BridgeError>()("@smthrs/gateway/RuntimeBridgeError", {
252
+ code: Schema.Literals([
253
+ "invalid_request",
254
+ "artifact_mismatch",
255
+ "source_mismatch",
256
+ "stale_owner",
257
+ "run_not_found",
258
+ "resource_limit",
259
+ "unavailable",
260
+ "internal"
261
+ ]),
262
+ message: Schema.String,
263
+ retryable: Schema.Boolean
264
+ }) {}
265
+
266
+ const decodeCommand = Schema.decodeUnknownEffect(Command)
267
+ const decodeObserve = Schema.decodeUnknownEffect(ObserveRequest)
268
+ const terminal = new Set(["completed", "failed", "cancelled"])
269
+ const retryableCodes = new Set(["transport_error", "unavailable", "persistence_failed", "launch_failed"])
270
+ const notFoundCodes = new Set(["run_not_found", "flow_not_found", "plan_not_found"])
271
+ const conflictCodes = new Set(["stale_owner", "artifact_mismatch", "source_mismatch", "conflict"])
272
+ const defaultEventLimit = 250
273
+ const maximumEventLimit = 1_000
274
+
275
+ // Host generation fences who may execute a delivery, but it is not part of
276
+ // the durable product request identity. A replacement owner must reconcile a
277
+ // lost acknowledgement against the same Control command keys.
278
+ const idempotencyKey = (input: Pick<Command, "applicationRequestId">, suffix: string) =>
279
+ `bridge:v1:${input.applicationRequestId}:${suffix}`
280
+
281
+ const validateOwner = (config: Config, input: Pick<Command, "ownerGeneration">) =>
282
+ input.ownerGeneration === config.ownerGeneration
283
+ ? Effect.void
284
+ : Effect.fail(
285
+ new BridgeError({ code: "stale_owner", message: "Runtime owner generation is stale", retryable: true })
286
+ )
287
+
288
+ /**
289
+ * Executes one decoded command exclusively through the canonical Control API.
290
+ * @since 1.0.0
291
+ * @category constructors
292
+ */
293
+ export const execute = (
294
+ config: Config,
295
+ control: Control["Service"],
296
+ principal: Principal,
297
+ input: Command
298
+ ) =>
299
+ Effect.gen(function*() {
300
+ yield* validateOwner(config, input)
301
+ switch (input.operation) {
302
+ case "launch": {
303
+ if (input.runtimeArtifactDigest !== config.runtimeArtifactDigest) {
304
+ return yield* Effect.fail(
305
+ new BridgeError({
306
+ code: "artifact_mismatch",
307
+ message: "Runtime artifact digest does not match the owning host",
308
+ retryable: false
309
+ })
310
+ )
311
+ }
312
+ if (input.sourceRevision !== config.sourceRevision) {
313
+ return yield* Effect.fail(
314
+ new BridgeError({
315
+ code: "source_mismatch",
316
+ message: "Flow source revision does not match the owning host",
317
+ retryable: false
318
+ })
319
+ )
320
+ }
321
+ // Every launch of a pinned attempt (its composition and the engine's
322
+ // launches) runs from the pinned source commit: a host serving any
323
+ // other source refuses before planning imports anything.
324
+ if (input.pin !== undefined && input.pin.sourceCommit !== config.sourceRevision) {
325
+ return yield* Effect.fail(
326
+ new BridgeError({
327
+ code: "source_mismatch",
328
+ message: "Flow source revision does not match the pinned launch",
329
+ retryable: false
330
+ })
331
+ )
332
+ }
333
+ const plan = yield* control.plan({
334
+ flowId: input.flowId,
335
+ input: input.payload,
336
+ idempotencyKey: idempotencyKey(input, "plan")
337
+ })
338
+ // Graphs are optional for valid Flow declarations. Only a verified
339
+ // native catalog snapshot can supply the missing provenance; the
340
+ // configured/wire identity by itself cannot stand in for that proof.
341
+ const plannedSource = plan.graph?.sourceRevision ?? config.verifiedCatalogSourceRevision
342
+ if (plannedSource !== input.sourceRevision) {
343
+ return yield* Effect.fail(
344
+ new BridgeError({
345
+ code: "source_mismatch",
346
+ message: "Flow source revision does not match the immutable request",
347
+ retryable: false
348
+ })
349
+ )
350
+ }
351
+ // A pinned launch runs nothing but its pin: a plan with no execution
352
+ // identity, or the pinned flow planned as other code, never starts.
353
+ if (
354
+ input.pin !== undefined &&
355
+ (plan.executionDigest === undefined ||
356
+ (input.pin.flow === input.flowId && plan.executionDigest !== input.pin.executionDigest))
357
+ ) {
358
+ return yield* Effect.fail(
359
+ new BridgeError({
360
+ code: "source_mismatch",
361
+ message: "Flow execution digest does not match the pinned launch",
362
+ retryable: false
363
+ })
364
+ )
365
+ }
366
+ const receipt = yield* control.run({
367
+ _tag: "Plan",
368
+ planId: plan.planId,
369
+ digest: plan.digest,
370
+ envelope: plan.envelope,
371
+ idempotencyKey: idempotencyKey(input, `run:${input.runId ?? input.attempt}`),
372
+ principal,
373
+ ...(input.runId === undefined ? {} : { reservedRunId: input.runId })
374
+ })
375
+ return {
376
+ operation: input.operation,
377
+ applicationRequestId: input.applicationRequestId,
378
+ ownerGeneration: input.ownerGeneration,
379
+ runtimeArtifactDigest: config.runtimeArtifactDigest,
380
+ sourceRevision: input.sourceRevision,
381
+ planId: plan.planId,
382
+ planDigest: plan.digest,
383
+ ...(plan.executionDigest === undefined ? {} : { executionDigest: plan.executionDigest }),
384
+ envelope: plan.envelope,
385
+ approval: plan.approval,
386
+ receipt
387
+ } as const
388
+ }
389
+ case "approve":
390
+ case "deny": {
391
+ const request = {
392
+ ...input.approval,
393
+ idempotencyKey: idempotencyKey(input, input.operation),
394
+ principal
395
+ }
396
+ const receipt = yield* input.operation === "approve" ? control.approve(request) : control.deny(request)
397
+ return { operation: input.operation, applicationRequestId: input.applicationRequestId, receipt } as const
398
+ }
399
+ case "signal": {
400
+ const receipt = yield* control.signal({
401
+ runId: input.runId,
402
+ signal: input.signal,
403
+ idempotencyKey: idempotencyKey(input, "signal"),
404
+ principal
405
+ })
406
+ return { operation: input.operation, applicationRequestId: input.applicationRequestId, receipt } as const
407
+ }
408
+ case "steer": {
409
+ const receipt = yield* control.steer({
410
+ runId: input.runId,
411
+ idempotencyKey: idempotencyKey(input, "steer"),
412
+ ...(input.version === undefined ? {} : { version: input.version }),
413
+ message: {
414
+ ...input.steer,
415
+ runId: input.runId,
416
+ messageId: input.messageId,
417
+ createdAt: input.createdAt,
418
+ ...(input.attribution === undefined ? {} : { attribution: input.attribution }),
419
+ principal
420
+ }
421
+ })
422
+ return { operation: input.operation, applicationRequestId: input.applicationRequestId, receipt } as const
423
+ }
424
+ // This authenticated host bridge is not a catalog or public Control
425
+ // verb. The executor validates the completed native child and resumes
426
+ // its retained parent to settle from that child's committed result.
427
+ case "complete": {
428
+ const executor = yield* Effect.serviceOption(ControlExecutor)
429
+ const complete = config.requestComplete ??
430
+ (executor._tag === "Some" ? executor.value.requestComplete : undefined)
431
+ if (complete === undefined) {
432
+ return yield* Effect.fail(
433
+ new BridgeError({
434
+ code: "unavailable",
435
+ message: "Completed-module settlement is unavailable",
436
+ retryable: true
437
+ })
438
+ )
439
+ }
440
+ const receipt = yield* complete({ runId: input.runId, receiptId: idempotencyKey(input, "complete") })
441
+ return { operation: input.operation, applicationRequestId: input.applicationRequestId, receipt } as const
442
+ }
443
+ case "cancel":
444
+ case "resume": {
445
+ const request = {
446
+ runId: input.runId,
447
+ idempotencyKey: idempotencyKey(input, input.operation),
448
+ ...(input.reason === undefined ? {} : { reason: input.reason }),
449
+ principal
450
+ }
451
+ const receipt = yield* input.operation === "cancel" ? control.cancel(request) : control.resume(request)
452
+ return { operation: input.operation, applicationRequestId: input.applicationRequestId, receipt } as const
453
+ }
454
+ }
455
+ })
456
+
457
+ const cursorPosition = (cursor: string | undefined): Effect.Effect<WatchCursor | undefined, BridgeError> => {
458
+ if (cursor === undefined || cursor === "") return Effect.succeed(undefined)
459
+ const match = observationCursorPattern.exec(cursor)
460
+ const sequence = Number(match?.[1] ?? match?.[2])
461
+ const offset = match?.[3] === undefined ? undefined : Number(match[3])
462
+ const valid = (value: number) => Number.isSafeInteger(value) && value >= 0 && value < Number.MAX_SAFE_INTEGER
463
+ return match !== null && valid(sequence) && (offset === undefined || valid(offset))
464
+ ? Effect.succeed({ sequence, ...(offset === undefined ? {} : { offset }) })
465
+ : Effect.fail(
466
+ new BridgeError({
467
+ code: "invalid_request",
468
+ message: "Observation cursor is invalid or out of range",
469
+ retryable: false
470
+ })
471
+ )
472
+ }
473
+
474
+ const encodedCursor = (cursor: WatchCursor): string =>
475
+ cursor.offset === undefined ? String(cursor.sequence) : `v1:${cursor.sequence}:${cursor.offset}`
476
+
477
+ /**
478
+ * Reads a bounded event replay and current canonical run projection.
479
+ * @since 1.0.0
480
+ * @category constructors
481
+ */
482
+ export const observe = (control: Control["Service"], input: ObserveRequest, receipts?: Config["commandReceipt"]) =>
483
+ Effect.gen(function*() {
484
+ const after = yield* cursorPosition(input.afterCursor)
485
+ const limit = Math.min(input.limit ?? defaultEventLimit, maximumEventLimit)
486
+ const listed = yield* control.list({ _tag: "runs", filters: { runId: input.runId }, limit: 1 })
487
+ const summary = listed._tag === "runs" ? listed.items[0] : undefined
488
+ if (summary === undefined) {
489
+ return yield* Effect.fail(
490
+ new BridgeError({ code: "run_not_found", message: "Runtime execution was not found", retryable: true })
491
+ )
492
+ }
493
+ const events = Array.from(
494
+ yield* Stream.runCollect(Stream.take(
495
+ control.watch({
496
+ runId: input.runId,
497
+ ...(after === undefined
498
+ ? {}
499
+ : after.offset === undefined
500
+ ? { afterSequence: after.sequence }
501
+ : { afterCursor: after }),
502
+ follow: false
503
+ }),
504
+ limit + 1
505
+ ))
506
+ )
507
+ const page = events.slice(0, limit)
508
+ const last = page.at(-1)
509
+ // Typed Flow results use the same committed root projection as the app.
510
+ // A terminal status alone never supplies a result, and a bounded event
511
+ // page cannot reconstruct a root result that precedes its cursor.
512
+ let finalOutput: string | undefined
513
+ let failure: { readonly failureFault?: Fault.Class; readonly failureTag?: string } = {}
514
+ if (terminal.has(summary.status)) {
515
+ const projections = yield* Projections.make(control)
516
+ const snapshot = yield* projections.snapshot({ _tag: "run-summary", runId: input.runId })
517
+ const row = snapshot.rows.find(Schema.is(RunSummaryRow))
518
+ if (
519
+ row === undefined || row.runId !== summary.runId || row.flowId !== summary.flowId ||
520
+ row.status !== summary.status || row.planId !== summary.planId || row.planDigest !== summary.planDigest
521
+ ) {
522
+ return yield* Effect.fail(
523
+ new BridgeError({ code: "internal", message: "Terminal result observation changed", retryable: true })
524
+ )
525
+ }
526
+ finalOutput = row.finalOutput
527
+ failure = {
528
+ ...(row.failureFault === undefined ? {} : { failureFault: row.failureFault }),
529
+ ...(row.failureTag === undefined ? {} : { failureTag: row.failureTag })
530
+ }
531
+ }
532
+ // Keep the private receipt out of every repository-controlled projection.
533
+ const hostSummary = yield* Schema.decodeUnknownEffect(RunSummary)(summary)
534
+ const commandReceipt = receipts === undefined ? undefined : yield* receipts(input.runId)
535
+ if (commandReceipt !== undefined && commandReceipt.runId !== input.runId) {
536
+ return yield* Effect.fail(
537
+ new BridgeError({ code: "internal", message: "Host command receipt names another run", retryable: false })
538
+ )
539
+ }
540
+ return {
541
+ run: {
542
+ ...hostSummary,
543
+ ...(commandReceipt === undefined ? {} : { commandReceipt }),
544
+ ...(finalOutput === undefined ? {} : { finalOutput }),
545
+ ...failure
546
+ },
547
+ events: page,
548
+ nextCursor: last === undefined
549
+ ? input.afterCursor ?? ""
550
+ : encodedCursor(last.cursor ?? { sequence: last.sequence }),
551
+ hasMore: events.length > limit,
552
+ terminal: terminal.has(summary.status)
553
+ }
554
+ })
555
+
556
+ // Disposable raw journal prefixes for Inspect. This stores no run state: the
557
+ // existing monitor fold still derives every answer from journal records. Bound
558
+ // retention across all runs of one control service, and rebuild after eviction.
559
+ const monitorJournals = new WeakMap<
560
+ Control["Service"],
561
+ Map<string, {
562
+ readonly records: ReadonlyArray<ControlEvent>
563
+ readonly bytes: number
564
+ }>
565
+ >()
566
+ const monitorJournalBytes = 64 * 1024 * 1024
567
+
568
+ /** Read an existing run and its committed journal without invoking any execution door.
569
+ * @since 1.0.0
570
+ * @category constructors
571
+ */
572
+ export const monitor = (control: Control["Service"], runId: string, at?: number) =>
573
+ Effect.gen(function*() {
574
+ const listed = yield* control.list({ _tag: "runs", filters: { runId }, limit: 1 })
575
+ const run = listed._tag === "runs" ? listed.items[0] : undefined
576
+ if (run === undefined || run.runId !== runId) {
577
+ return yield* new BridgeError({
578
+ code: "run_not_found",
579
+ message: "Runtime execution was not found",
580
+ retryable: false
581
+ })
582
+ }
583
+ const cache = monitorJournals.get(control) ??
584
+ new Map<string, { readonly records: ReadonlyArray<ControlEvent>; readonly bytes: number }>()
585
+ monitorJournals.set(control, cache)
586
+ const cached = cache.get(runId)
587
+ const last = cached?.records.at(-1)?.sequence
588
+ // Replay the final entry because one entry may expand into several events.
589
+ const consumed = last === undefined ? 0 : cached!.records.filter((row) => row.sequence === last).length
590
+ let skipped = 0
591
+ const suffix = Array.from(
592
+ yield* Stream.runCollect(
593
+ control.watch({
594
+ runId,
595
+ follow: false,
596
+ ...(last === undefined || last === 0 ? {} : { afterSequence: last - 1 })
597
+ }).pipe(
598
+ Stream.filter((row) =>
599
+ last === undefined || row.sequence > last || row.sequence === last && skipped++ >= consumed
600
+ ),
601
+ Stream.take(Projections.maxEventsScanned + 1)
602
+ )
603
+ )
604
+ )
605
+ const records = [...(cached?.records ?? []), ...suffix]
606
+ if (records.length > Projections.maxEventsScanned) {
607
+ return yield* new BridgeError({
608
+ code: "resource_limit",
609
+ message: "Run journal exceeds the inspection limit",
610
+ retryable: false
611
+ })
612
+ }
613
+ const bytes = (cached?.bytes ?? 0) +
614
+ suffix.reduce((sum, row) => sum + new TextEncoder().encode(JSON.stringify(row)).byteLength, 0)
615
+ const current = cache.get(runId)
616
+ // A slower reader cannot overwrite a longer committed prefix.
617
+ if (bytes <= monitorJournalBytes && (current === undefined || current.records.length <= records.length)) {
618
+ cache.delete(runId)
619
+ cache.set(runId, { records, bytes })
620
+ let total = [...cache.values()].reduce((sum, entry) => sum + entry.bytes, 0)
621
+ while (cache.size > 32 || total > monitorJournalBytes) {
622
+ const oldest = cache.keys().next().value!
623
+ total -= cache.get(oldest)!.bytes
624
+ cache.delete(oldest)
625
+ }
626
+ }
627
+ const folded = monitorFromJournal({ runId, flowId: run.flowId, status: run.status }, records, at)
628
+ // The journal is read page by page when its tab opens (run-events). Only a
629
+ // replay frame carries its own journal prefix. The extent bounds the run.
630
+ let start = Infinity
631
+ let end = 0
632
+ for (const row of records) {
633
+ if (row.occurredAt > 0) {
634
+ start = Math.min(start, row.occurredAt)
635
+ end = Math.max(end, row.occurredAt)
636
+ }
637
+ }
638
+ const value: Partial<typeof folded> & Omit<typeof folded, "journal"> & { extent?: { start: string; end: string } } =
639
+ {
640
+ ...folded,
641
+ ...(end === 0 ? {} : { extent: { start: new Date(start).toISOString(), end: new Date(end).toISOString() } })
642
+ }
643
+ if (at === undefined) delete value.journal
644
+ if (new TextEncoder().encode(JSON.stringify(value)).byteLength > Projections.maxProjectionBytes) {
645
+ return yield* new BridgeError({
646
+ code: "resource_limit",
647
+ message: "Run monitor exceeds the inspection limit",
648
+ retryable: false
649
+ })
650
+ }
651
+ return value
652
+ })
653
+
654
+ /**
655
+ * Successful command response on the JSON wire.
656
+ * @since 1.0.0
657
+ * @category models
658
+ */
659
+ export const CommandResponse = Schema.Struct({
660
+ protocol: Schema.Literal(protocol),
661
+ ok: Schema.Literal(true),
662
+ value: Schema.Struct({
663
+ operation: Schema.String,
664
+ applicationRequestId: Schema.String,
665
+ ownerGeneration: Schema.optional(PositiveSafeInteger),
666
+ runtimeArtifactDigest: Schema.optional(Sha256),
667
+ sourceRevision: Schema.optional(SourceRevision),
668
+ planId: Schema.optional(Schema.String),
669
+ planDigest: Schema.optional(Sha256),
670
+ executionDigest: Schema.optional(Sha256),
671
+ envelope: Schema.optional(Schema.Json),
672
+ approval: Schema.optional(ApprovalPayload),
673
+ receipt: Receipt
674
+ })
675
+ })
676
+
677
+ /**
678
+ * Successful observation response on the JSON wire.
679
+ * @since 1.0.0
680
+ * @category models
681
+ */
682
+ export const ObserveResponse = Schema.Struct({
683
+ protocol: Schema.Literal(protocol),
684
+ ok: Schema.Literal(true),
685
+ value: Schema.Struct({
686
+ run: Schema.Struct({
687
+ ...RunSummary.fields,
688
+ finalOutput: Schema.optional(Schema.String),
689
+ failureFault: Schema.optional(Fault.Class),
690
+ failureTag: Schema.optional(Schema.String),
691
+ commandReceipt: Schema.optionalKey(CommandReceipt)
692
+ }),
693
+ events: Schema.Array(ControlEvent),
694
+ nextCursor: Schema.String,
695
+ hasMore: Schema.Boolean,
696
+ terminal: Schema.Boolean
697
+ })
698
+ })
699
+
700
+ /**
701
+ * Stable sanitized failure response on the JSON wire.
702
+ * @since 1.0.0
703
+ * @category models
704
+ */
705
+ export const ErrorResponse = Schema.Struct({
706
+ protocol: Schema.Literal(protocol),
707
+ ok: Schema.Literal(false),
708
+ error: Schema.Struct({ code: Schema.String, message: Schema.String, retryable: Schema.Boolean })
709
+ })
710
+
711
+ const errorResponse = (cause: unknown) => {
712
+ const known = Schema.is(ControlError.ControlErrorSchema)(cause)
713
+ const code = cause instanceof BridgeError || known ? cause.code : "internal"
714
+ const retryable = cause instanceof BridgeError
715
+ ? cause.retryable
716
+ : cause instanceof ControlError.TransportError
717
+ ? cause.retryable
718
+ : retryableCodes.has(code)
719
+ // Control errors can contain storage paths, SQL diagnostics, or executor
720
+ // output. The bridge publishes their stable code, never that backend text.
721
+ const message = cause instanceof BridgeError ? cause.message : "Runtime bridge failed"
722
+ const status = code === "unauthorized" ?
723
+ 401
724
+ : notFoundCodes.has(code) ?
725
+ 404
726
+ : conflictCodes.has(code) ?
727
+ 409
728
+ : retryable ?
729
+ 503
730
+ : code === "internal" ?
731
+ 500
732
+ : 400
733
+ return HttpServerResponse.jsonUnsafe({ protocol, ok: false, error: { code, message, retryable } }, { status })
734
+ }
735
+
736
+ /**
737
+ * Answers a failed bridge request with its sanitized response, logging it first.
738
+ *
739
+ * The wire carries only the stable code. The operator log carries the full
740
+ * cause of every failure the caller did not cause, so a launch that failed in
741
+ * storage or in the executor can be diagnosed from the host.
742
+ */
743
+ const respondToFailure = (operation: "runtime-bridge.command" | "runtime-bridge.observe") => (cause: unknown) => {
744
+ const response = errorResponse(cause)
745
+ if (cause instanceof BridgeError) return Effect.succeed(response)
746
+ const code = Schema.is(ControlError.ControlErrorSchema)(cause) ? cause.code : "internal"
747
+ return Effect.logError({ message: "Runtime bridge request failed", operation, code, cause }).pipe(
748
+ Effect.as(response)
749
+ )
750
+ }
751
+
752
+ const readJson = Effect.gen(function*() {
753
+ const request = yield* HttpServerRequest.HttpServerRequest
754
+ const text = yield* request.text
755
+ return yield* Effect.try({
756
+ try: () => JSON.parse(text) as unknown,
757
+ catch: () => new BridgeError({ code: "invalid_request", message: "Request body must be JSON", retryable: false })
758
+ })
759
+ })
760
+
761
+ const authenticated = <A, E, R>(
762
+ config: Config,
763
+ effect: (principal: Principal) => Effect.Effect<A, E, R>
764
+ ) =>
765
+ Effect.gen(function*() {
766
+ const request = yield* HttpServerRequest.HttpServerRequest
767
+ const principal = yield* config.authenticate(request.headers)
768
+ return yield* effect(principal)
769
+ })
770
+
771
+ /**
772
+ * Mounts the authenticated JSON bridge beside the existing gateway RPCs.
773
+ * @since 1.0.0
774
+ * @category layers
775
+ */
776
+ export const layer = (config: Config) => {
777
+ const command = authenticated(config, (principal) =>
778
+ Effect.gen(function*() {
779
+ const body = yield* readJson
780
+ const input = yield* decodeCommand(body).pipe(Effect.mapError(() =>
781
+ new BridgeError({
782
+ code: "invalid_request",
783
+ message: "Request does not match the runtime bridge contract",
784
+ retryable: false
785
+ })
786
+ ))
787
+ const control = yield* Control
788
+ const value = yield* execute(config, control, principal, input)
789
+ return HttpServerResponse.jsonUnsafe({ protocol, ok: true, value })
790
+ })).pipe(
791
+ Effect.catch(respondToFailure("runtime-bridge.command")),
792
+ Effect.withSpan("runtime-bridge.command")
793
+ )
794
+
795
+ const observation = authenticated(config, () =>
796
+ Effect.gen(function*() {
797
+ const body = yield* readJson
798
+ const input = yield* decodeObserve(body).pipe(Effect.mapError(() =>
799
+ new BridgeError({
800
+ code: "invalid_request",
801
+ message: "Request does not match the observation contract",
802
+ retryable: false
803
+ })
804
+ ))
805
+ const control = yield* Control
806
+ const value = yield* observe(control, input, config.commandReceipt)
807
+ return HttpServerResponse.jsonUnsafe({ protocol, ok: true, value })
808
+ })).pipe(
809
+ Effect.catch(respondToFailure("runtime-bridge.observe")),
810
+ Effect.withSpan("runtime-bridge.observe")
811
+ )
812
+
813
+ const inspection = authenticated(config, () =>
814
+ Effect.gen(function*() {
815
+ const body = yield* readJson
816
+ const input = yield* Schema.decodeUnknownEffect(Schema.Struct({
817
+ protocol: Schema.Literal(protocol),
818
+ runId: Schema.NonEmptyString,
819
+ at: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)))
820
+ }))(body).pipe(Effect.mapError(() =>
821
+ new BridgeError({ code: "invalid_request", message: "Invalid monitor request", retryable: false })
822
+ ))
823
+ const control = yield* Control
824
+ return HttpServerResponse.jsonUnsafe({
825
+ protocol,
826
+ ok: true,
827
+ value: yield* monitor(control, input.runId, input.at)
828
+ })
829
+ })).pipe(Effect.catch(respondToFailure("runtime-bridge.observe")))
830
+
831
+ return HttpRouter.add("POST", "/runtime/v1/command", command).pipe(
832
+ Layer.merge(HttpRouter.add("POST", "/runtime/v1/monitor", inspection)),
833
+ Layer.merge(HttpRouter.add("POST", "/runtime/v1/observe", observation))
834
+ )
835
+ }