@mysten-incubation/devstack 0.0.1 → 0.1.0

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 (838) hide show
  1. package/README.md +7 -3
  2. package/dashboard-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  3. package/dashboard-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  4. package/dashboard-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  5. package/dashboard-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  6. package/dashboard-ui/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  7. package/dashboard-ui/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  8. package/dashboard-ui/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  9. package/dashboard-ui/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  10. package/dashboard-ui/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  11. package/dashboard-ui/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  12. package/dashboard-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  13. package/dashboard-ui/assets/index-Bmi1UtAg.js +1356 -0
  14. package/dashboard-ui/assets/index-D5EShVt4.js +3 -0
  15. package/dashboard-ui/assets/index-Deml9drg.css +1 -0
  16. package/dashboard-ui/index.html +13 -0
  17. package/dist/api/define-capabilities.d.mts +14 -3
  18. package/dist/api/define-capabilities.mjs +18 -1
  19. package/dist/api/define-capabilities.mjs.map +1 -1
  20. package/dist/api/define-devstack.d.mts +1 -1
  21. package/dist/api/define-devstack.mjs +6 -26
  22. package/dist/api/define-devstack.mjs.map +1 -1
  23. package/dist/api/define-plugin.d.mts +1 -0
  24. package/dist/api/define-plugin.mjs +2 -0
  25. package/dist/api/inference-network.d.mts +132 -0
  26. package/dist/api/inference-network.mjs +105 -16
  27. package/dist/api/inference-network.mjs.map +1 -1
  28. package/dist/api/plugin-errors.d.mts +7 -0
  29. package/dist/api/run-stack.d.mts +20 -9
  30. package/dist/api/run-stack.mjs +56 -29
  31. package/dist/api/run-stack.mjs.map +1 -1
  32. package/dist/build-integrations/playwright/config.d.mts +6 -4
  33. package/dist/build-integrations/playwright/config.mjs +5 -3
  34. package/dist/build-integrations/playwright/config.mjs.map +1 -1
  35. package/dist/build-integrations/playwright/errors.d.mts +1 -1
  36. package/dist/build-integrations/playwright/global-setup.d.mts +43 -17
  37. package/dist/build-integrations/playwright/global-setup.mjs +250 -13
  38. package/dist/build-integrations/playwright/global-setup.mjs.map +1 -1
  39. package/dist/build-integrations/playwright/index.d.mts +5 -3
  40. package/dist/build-integrations/playwright/index.mjs +4 -2
  41. package/dist/build-integrations/playwright/stack-context.d.mts +0 -1
  42. package/dist/build-integrations/playwright/stack-context.mjs +24 -63
  43. package/dist/build-integrations/playwright/stack-context.mjs.map +1 -1
  44. package/dist/build-integrations/playwright/wallet-context.d.mts +7 -10
  45. package/dist/build-integrations/playwright/wallet-context.mjs +8 -13
  46. package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -1
  47. package/dist/build-integrations/runtime/cold-start-url.d.mts +5 -0
  48. package/dist/build-integrations/runtime/cold-start-url.mjs +4 -3
  49. package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -1
  50. package/dist/build-integrations/runtime/conventional-routes.d.mts +51 -0
  51. package/dist/build-integrations/runtime/conventional-routes.mjs +92 -0
  52. package/dist/build-integrations/runtime/conventional-routes.mjs.map +1 -0
  53. package/dist/build-integrations/runtime/discover.d.mts +38 -30
  54. package/dist/build-integrations/runtime/discover.mjs +73 -70
  55. package/dist/build-integrations/runtime/discover.mjs.map +1 -1
  56. package/dist/build-integrations/runtime/endpoint-registry.d.mts +3 -1
  57. package/dist/build-integrations/runtime/endpoint-registry.mjs +3 -1
  58. package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -1
  59. package/dist/build-integrations/runtime/index.d.mts +7 -2
  60. package/dist/build-integrations/runtime/index.mjs +9 -2
  61. package/dist/build-integrations/runtime/manifest-types.d.mts +2 -0
  62. package/dist/build-integrations/runtime/manifest-types.mjs +3 -0
  63. package/dist/build-integrations/runtime/playwright-stack-context-slot.d.mts +29 -0
  64. package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs +10 -0
  65. package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs.map +1 -0
  66. package/dist/build-integrations/runtime/read-stack-context.d.mts +1 -1
  67. package/dist/build-integrations/runtime/read-stack-context.mjs +10 -4
  68. package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -1
  69. package/dist/build-integrations/runtime/resolve-discovery-env.d.mts +48 -0
  70. package/dist/build-integrations/runtime/resolve-discovery-env.mjs +42 -0
  71. package/dist/build-integrations/runtime/resolve-discovery-env.mjs.map +1 -0
  72. package/dist/build-integrations/runtime/stack-context.d.mts +1 -1
  73. package/dist/build-integrations/runtime/wallet-paths.mjs +2 -0
  74. package/dist/build-integrations/vite/index.d.mts +51 -0
  75. package/dist/build-integrations/vite/index.mjs +73 -0
  76. package/dist/build-integrations/vite/index.mjs.map +1 -0
  77. package/dist/build-integrations/vitest/env.d.mts +4 -3
  78. package/dist/build-integrations/vitest/env.mjs +6 -4
  79. package/dist/build-integrations/vitest/env.mjs.map +1 -1
  80. package/dist/build-integrations/vitest/errors.d.mts +25 -4
  81. package/dist/build-integrations/vitest/errors.mjs +15 -2
  82. package/dist/build-integrations/vitest/errors.mjs.map +1 -1
  83. package/dist/build-integrations/vitest/index.d.mts +2 -2
  84. package/dist/build-integrations/vitest/index.mjs +3 -3
  85. package/dist/build-integrations/vitest/setup.d.mts +4 -2
  86. package/dist/build-integrations/vitest/setup.mjs +2 -2
  87. package/dist/build-integrations/vitest/setup.mjs.map +1 -1
  88. package/dist/build-integrations/vitest/stack-context.d.mts +0 -1
  89. package/dist/build-integrations/vitest/stack-context.mjs +33 -13
  90. package/dist/build-integrations/vitest/stack-context.mjs.map +1 -1
  91. package/dist/cli/bail.mjs +23 -0
  92. package/dist/cli/bail.mjs.map +1 -0
  93. package/dist/{surfaces/cli/commands → cli}/doctor-probes.mjs +26 -16
  94. package/dist/cli/doctor-probes.mjs.map +1 -0
  95. package/dist/cli/main.d.mts +15 -1
  96. package/dist/cli/main.mjs +166 -482
  97. package/dist/cli/main.mjs.map +1 -1
  98. package/dist/cli/prune-direct.mjs +31 -201
  99. package/dist/cli/prune-direct.mjs.map +1 -1
  100. package/dist/cli/snapshot-reader.mjs +14 -11
  101. package/dist/cli/snapshot-reader.mjs.map +1 -1
  102. package/dist/cli/up-lifecycle.mjs +4 -1
  103. package/dist/cli/up-lifecycle.mjs.map +1 -1
  104. package/dist/cli/wirings/apply.mjs +95 -0
  105. package/dist/cli/wirings/apply.mjs.map +1 -0
  106. package/dist/cli/wirings/build-verb-layers.mjs +42 -0
  107. package/dist/cli/wirings/build-verb-layers.mjs.map +1 -0
  108. package/dist/cli/wirings/config-loader.mjs +69 -0
  109. package/dist/cli/wirings/config-loader.mjs.map +1 -0
  110. package/dist/cli/wirings/engine-command.mjs +30 -0
  111. package/dist/cli/wirings/engine-command.mjs.map +1 -0
  112. package/dist/cli/wirings/identity.mjs +72 -0
  113. package/dist/cli/wirings/identity.mjs.map +1 -0
  114. package/dist/cli/wirings/provide-file-system.mjs +7 -0
  115. package/dist/cli/wirings/provide-file-system.mjs.map +1 -0
  116. package/dist/cli/wirings/snapshot.mjs +177 -0
  117. package/dist/cli/wirings/snapshot.mjs.map +1 -0
  118. package/dist/cli/wirings/up.mjs +287 -0
  119. package/dist/cli/wirings/up.mjs.map +1 -0
  120. package/dist/cli/wirings/wipe.mjs +40 -0
  121. package/dist/cli/wirings/wipe.mjs.map +1 -0
  122. package/dist/contracts/capability-decl.d.mts +0 -2
  123. package/dist/contracts/codegenable.d.mts +43 -0
  124. package/dist/contracts/container-runtime.d.mts +26 -1
  125. package/dist/contracts/faucet-strategy.d.mts +25 -0
  126. package/dist/contracts/funding-strategy.d.mts +42 -0
  127. package/dist/contracts/plugin-expander.mjs +60 -0
  128. package/dist/contracts/plugin-expander.mjs.map +1 -0
  129. package/dist/contracts/projection.d.mts +5 -3
  130. package/dist/contracts/renderer.d.mts +23 -0
  131. package/dist/contracts/routable.d.mts +14 -1
  132. package/dist/contracts/snapshotable.d.mts +25 -3
  133. package/dist/contracts/wallet-protocol.d.mts +52 -0
  134. package/dist/contracts/wallet-protocol.mjs +52 -0
  135. package/dist/contracts/wallet-protocol.mjs.map +1 -0
  136. package/dist/index.d.mts +26 -25
  137. package/dist/index.mjs +20 -13
  138. package/dist/{runtime → orchestrators}/built-in-plugin-layers.mjs +10 -5
  139. package/dist/orchestrators/built-in-plugin-layers.mjs.map +1 -0
  140. package/dist/orchestrators/codegen/bindings.d.mts +1 -2
  141. package/dist/orchestrators/codegen/bindings.mjs +52 -186
  142. package/dist/orchestrators/codegen/bindings.mjs.map +1 -1
  143. package/dist/orchestrators/codegen/emit.mjs +19 -1
  144. package/dist/orchestrators/codegen/emit.mjs.map +1 -1
  145. package/dist/orchestrators/codegen/errors.mjs +8 -3
  146. package/dist/orchestrators/codegen/errors.mjs.map +1 -1
  147. package/dist/orchestrators/codegen/format.mjs +47 -39
  148. package/dist/orchestrators/codegen/format.mjs.map +1 -1
  149. package/dist/orchestrators/codegen/gitignore.mjs +3 -1
  150. package/dist/orchestrators/codegen/gitignore.mjs.map +1 -1
  151. package/dist/orchestrators/codegen/output-location.mjs +40 -0
  152. package/dist/orchestrators/codegen/output-location.mjs.map +1 -0
  153. package/dist/orchestrators/codegen/paths.d.mts +1 -1
  154. package/dist/orchestrators/codegen/paths.mjs +40 -14
  155. package/dist/orchestrators/codegen/paths.mjs.map +1 -1
  156. package/dist/orchestrators/codegen/permissions.mjs +3 -1
  157. package/dist/orchestrators/codegen/permissions.mjs.map +1 -1
  158. package/dist/orchestrators/codegen/service.mjs +157 -105
  159. package/dist/orchestrators/codegen/service.mjs.map +1 -1
  160. package/dist/orchestrators/lifecycle-prune/errors.mjs +31 -0
  161. package/dist/orchestrators/lifecycle-prune/errors.mjs.map +1 -0
  162. package/dist/orchestrators/lifecycle-prune/index.mjs +350 -0
  163. package/dist/orchestrators/lifecycle-prune/index.mjs.map +1 -0
  164. package/dist/orchestrators/router/cleanup.mjs +26 -27
  165. package/dist/orchestrators/router/cleanup.mjs.map +1 -1
  166. package/dist/orchestrators/router/entrypoints.mjs +2 -2
  167. package/dist/orchestrators/router/entrypoints.mjs.map +1 -1
  168. package/dist/orchestrators/router/file-provider.mjs +14 -5
  169. package/dist/orchestrators/router/file-provider.mjs.map +1 -1
  170. package/dist/orchestrators/router/hostname.mjs +19 -55
  171. package/dist/orchestrators/router/hostname.mjs.map +1 -1
  172. package/dist/orchestrators/router/index.mjs +11 -0
  173. package/dist/orchestrators/router/profile.mjs +2 -2
  174. package/dist/orchestrators/router/sentinels.mjs +26 -0
  175. package/dist/orchestrators/router/sentinels.mjs.map +1 -0
  176. package/dist/orchestrators/router/service.mjs +40 -37
  177. package/dist/orchestrators/router/service.mjs.map +1 -1
  178. package/dist/orchestrators/router/traefik-container.mjs +27 -16
  179. package/dist/orchestrators/router/traefik-container.mjs.map +1 -1
  180. package/dist/{substrate/runtime → orchestrators}/run.mjs +26 -21
  181. package/dist/orchestrators/run.mjs.map +1 -0
  182. package/dist/orchestrators/runtime-composition.d.mts +1 -1
  183. package/dist/orchestrators/runtime-composition.mjs +123 -39
  184. package/dist/orchestrators/runtime-composition.mjs.map +1 -1
  185. package/dist/orchestrators/snapshot/capture-command.d.mts +1 -0
  186. package/dist/orchestrators/snapshot/capture-command.mjs +25 -0
  187. package/dist/orchestrators/snapshot/capture-command.mjs.map +1 -0
  188. package/dist/orchestrators/snapshot/capture.mjs +42 -28
  189. package/dist/orchestrators/snapshot/capture.mjs.map +1 -1
  190. package/dist/orchestrators/snapshot/descriptor.mjs +35 -10
  191. package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -1
  192. package/dist/orchestrators/snapshot/identity-guard.mjs +1 -1
  193. package/dist/orchestrators/snapshot/index.mjs +13 -0
  194. package/dist/orchestrators/snapshot/integrity.d.mts +1 -1
  195. package/dist/orchestrators/snapshot/integrity.mjs +73 -17
  196. package/dist/orchestrators/snapshot/integrity.mjs.map +1 -1
  197. package/dist/orchestrators/snapshot/pending-marker.d.mts +1 -0
  198. package/dist/orchestrators/snapshot/pending-marker.mjs +99 -0
  199. package/dist/orchestrators/snapshot/pending-marker.mjs.map +1 -0
  200. package/dist/orchestrators/snapshot/phase-error.mjs +23 -0
  201. package/dist/orchestrators/snapshot/phase-error.mjs.map +1 -0
  202. package/dist/orchestrators/snapshot/prune.mjs +20 -55
  203. package/dist/orchestrators/snapshot/prune.mjs.map +1 -1
  204. package/dist/orchestrators/snapshot/recover-pending.d.mts +1 -0
  205. package/dist/orchestrators/snapshot/recover-pending.mjs +223 -0
  206. package/dist/orchestrators/snapshot/recover-pending.mjs.map +1 -0
  207. package/dist/orchestrators/snapshot/restore.mjs +118 -84
  208. package/dist/orchestrators/snapshot/restore.mjs.map +1 -1
  209. package/dist/orchestrators/snapshot/service.mjs +53 -56
  210. package/dist/orchestrators/snapshot/service.mjs.map +1 -1
  211. package/dist/orchestrators/snapshot/state-document.d.mts +1 -0
  212. package/dist/orchestrators/snapshot/state-document.mjs +47 -7
  213. package/dist/orchestrators/snapshot/state-document.mjs.map +1 -1
  214. package/dist/orchestrators/snapshot/wipe.mjs +67 -10
  215. package/dist/orchestrators/snapshot/wipe.mjs.map +1 -1
  216. package/dist/plugins/account/codegen.mjs +9 -8
  217. package/dist/plugins/account/codegen.mjs.map +1 -1
  218. package/dist/plugins/account/errors.d.mts +33 -6
  219. package/dist/plugins/account/errors.mjs.map +1 -1
  220. package/dist/plugins/account/funding.d.mts +29 -19
  221. package/dist/plugins/account/funding.mjs +84 -66
  222. package/dist/plugins/account/funding.mjs.map +1 -1
  223. package/dist/plugins/account/index.d.mts +2 -4
  224. package/dist/plugins/account/index.mjs +64 -31
  225. package/dist/plugins/account/index.mjs.map +1 -1
  226. package/dist/plugins/account/keypair.mjs +6 -9
  227. package/dist/plugins/account/keypair.mjs.map +1 -1
  228. package/dist/plugins/account/lease.mjs +1 -0
  229. package/dist/plugins/account/lease.mjs.map +1 -1
  230. package/dist/plugins/account/registry.d.mts +14 -1
  231. package/dist/plugins/account/registry.mjs +18 -18
  232. package/dist/plugins/account/registry.mjs.map +1 -1
  233. package/dist/plugins/account/service.d.mts +23 -4
  234. package/dist/plugins/account/service.mjs +83 -45
  235. package/dist/plugins/account/service.mjs.map +1 -1
  236. package/dist/plugins/account/snapshot.mjs +2 -5
  237. package/dist/plugins/account/snapshot.mjs.map +1 -1
  238. package/dist/plugins/account/spans.mjs +16 -0
  239. package/dist/plugins/account/spans.mjs.map +1 -0
  240. package/dist/plugins/account/variants/keystore.mjs +6 -8
  241. package/dist/plugins/account/variants/keystore.mjs.map +1 -1
  242. package/dist/plugins/action/build-context.d.mts +3 -2
  243. package/dist/plugins/action/errors.d.mts +16 -12
  244. package/dist/plugins/action/errors.mjs.map +1 -1
  245. package/dist/plugins/action/execute.mjs +65 -103
  246. package/dist/plugins/action/execute.mjs.map +1 -1
  247. package/dist/plugins/action/index.d.mts +0 -2
  248. package/dist/plugins/action/index.mjs +17 -13
  249. package/dist/plugins/action/index.mjs.map +1 -1
  250. package/dist/plugins/action/service.mjs +38 -35
  251. package/dist/plugins/action/service.mjs.map +1 -1
  252. package/dist/plugins/action/spans.mjs +11 -0
  253. package/dist/plugins/action/spans.mjs.map +1 -0
  254. package/dist/plugins/coin/codegen.mjs +9 -8
  255. package/dist/plugins/coin/codegen.mjs.map +1 -1
  256. package/dist/plugins/coin/discovery.mjs +8 -4
  257. package/dist/plugins/coin/discovery.mjs.map +1 -1
  258. package/dist/plugins/coin/index.d.mts +11 -29
  259. package/dist/plugins/coin/index.mjs +56 -27
  260. package/dist/plugins/coin/index.mjs.map +1 -1
  261. package/dist/plugins/coin/metadata.mjs +8 -15
  262. package/dist/plugins/coin/metadata.mjs.map +1 -1
  263. package/dist/plugins/coin/mint.d.mts +30 -11
  264. package/dist/plugins/coin/mint.mjs +78 -74
  265. package/dist/plugins/coin/mint.mjs.map +1 -1
  266. package/dist/plugins/coin/registry.mjs +4 -7
  267. package/dist/plugins/coin/registry.mjs.map +1 -1
  268. package/dist/plugins/coin/service.d.mts +39 -1
  269. package/dist/plugins/coin/service.mjs +11 -4
  270. package/dist/plugins/coin/service.mjs.map +1 -1
  271. package/dist/plugins/coin/spans.mjs +20 -0
  272. package/dist/plugins/coin/spans.mjs.map +1 -0
  273. package/dist/plugins/dashboard/domain.mjs +402 -0
  274. package/dist/plugins/dashboard/domain.mjs.map +1 -0
  275. package/dist/plugins/dashboard/index.d.mts +29 -0
  276. package/dist/plugins/dashboard/index.mjs +91 -0
  277. package/dist/plugins/dashboard/index.mjs.map +1 -0
  278. package/dist/plugins/dashboard/origin-policy.mjs +36 -0
  279. package/dist/plugins/dashboard/origin-policy.mjs.map +1 -0
  280. package/dist/plugins/dashboard/routable.mjs +27 -0
  281. package/dist/plugins/dashboard/routable.mjs.map +1 -0
  282. package/dist/plugins/dashboard/schema/builder.mjs +21 -0
  283. package/dist/plugins/dashboard/schema/builder.mjs.map +1 -0
  284. package/dist/plugins/dashboard/schema/enums.mjs +72 -0
  285. package/dist/plugins/dashboard/schema/enums.mjs.map +1 -0
  286. package/dist/plugins/dashboard/schema/root.mjs +351 -0
  287. package/dist/plugins/dashboard/schema/root.mjs.map +1 -0
  288. package/dist/plugins/dashboard/schema/types.mjs +508 -0
  289. package/dist/plugins/dashboard/schema/types.mjs.map +1 -0
  290. package/dist/plugins/dashboard/schema.mjs +11 -0
  291. package/dist/plugins/dashboard/schema.mjs.map +1 -0
  292. package/dist/plugins/dashboard/server.mjs +166 -0
  293. package/dist/plugins/dashboard/server.mjs.map +1 -0
  294. package/dist/plugins/deepbook/deploy.mjs +53 -115
  295. package/dist/plugins/deepbook/deploy.mjs.map +1 -1
  296. package/dist/plugins/deepbook/errors.mjs +1 -0
  297. package/dist/plugins/deepbook/errors.mjs.map +1 -1
  298. package/dist/plugins/deepbook/faucet-strategy.mjs +47 -34
  299. package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -1
  300. package/dist/plugins/deepbook/hash.mjs +9 -0
  301. package/dist/plugins/deepbook/hash.mjs.map +1 -0
  302. package/dist/plugins/deepbook/index.d.mts +1 -10
  303. package/dist/plugins/deepbook/index.mjs +25 -22
  304. package/dist/plugins/deepbook/index.mjs.map +1 -1
  305. package/dist/plugins/deepbook/pyth/index.mjs +26 -55
  306. package/dist/plugins/deepbook/pyth/index.mjs.map +1 -1
  307. package/dist/plugins/deepbook/snapshot.mjs +17 -29
  308. package/dist/plugins/deepbook/snapshot.mjs.map +1 -1
  309. package/dist/plugins/deepbook/spans.mjs +18 -0
  310. package/dist/plugins/deepbook/spans.mjs.map +1 -0
  311. package/dist/plugins/deepbook/type-strings.mjs +65 -0
  312. package/dist/plugins/deepbook/type-strings.mjs.map +1 -0
  313. package/dist/plugins/deepbook/types.d.mts +2 -3
  314. package/dist/plugins/deepbook/types.mjs.map +1 -1
  315. package/dist/plugins/faucet/dispatcher.d.mts +21 -2
  316. package/dist/plugins/faucet/dispatcher.mjs +1 -2
  317. package/dist/plugins/faucet/dispatcher.mjs.map +1 -1
  318. package/dist/plugins/faucet/errors.d.mts +11 -24
  319. package/dist/plugins/faucet/errors.mjs.map +1 -1
  320. package/dist/plugins/faucet/http.mjs +33 -14
  321. package/dist/plugins/faucet/http.mjs.map +1 -1
  322. package/dist/plugins/faucet/index.d.mts +15 -5
  323. package/dist/plugins/faucet/index.mjs +3 -0
  324. package/dist/plugins/faucet/index.mjs.map +1 -1
  325. package/dist/plugins/faucet/spans.mjs +12 -0
  326. package/dist/plugins/faucet/spans.mjs.map +1 -0
  327. package/dist/plugins/host-service/errors.d.mts +1 -1
  328. package/dist/plugins/host-service/index.mjs +34 -8
  329. package/dist/plugins/host-service/index.mjs.map +1 -1
  330. package/dist/plugins/host-service/routable.mjs +2 -1
  331. package/dist/plugins/host-service/routable.mjs.map +1 -1
  332. package/dist/plugins/host-service/service.d.mts +21 -0
  333. package/dist/plugins/host-service/service.mjs +136 -81
  334. package/dist/plugins/host-service/service.mjs.map +1 -1
  335. package/dist/plugins/internal/acquire-on-chain-artifact.mjs +23 -0
  336. package/dist/plugins/internal/acquire-on-chain-artifact.mjs.map +1 -0
  337. package/dist/plugins/internal/codegen-helpers.mjs +18 -0
  338. package/dist/plugins/internal/codegen-helpers.mjs.map +1 -0
  339. package/dist/plugins/internal/funding-failure-error.mjs +32 -0
  340. package/dist/plugins/internal/funding-failure-error.mjs.map +1 -0
  341. package/dist/plugins/package/build.mjs +1 -1
  342. package/dist/plugins/package/build.mjs.map +1 -1
  343. package/dist/plugins/package/codegen.mjs +26 -0
  344. package/dist/plugins/package/codegen.mjs.map +1 -1
  345. package/dist/plugins/package/errors.d.mts +16 -6
  346. package/dist/plugins/package/errors.mjs.map +1 -1
  347. package/dist/plugins/package/index.d.mts +0 -4
  348. package/dist/plugins/package/index.mjs +27 -21
  349. package/dist/plugins/package/index.mjs.map +1 -1
  350. package/dist/plugins/package/mode-known.mjs +26 -12
  351. package/dist/plugins/package/mode-known.mjs.map +1 -1
  352. package/dist/plugins/package/mode-local.mjs +47 -41
  353. package/dist/plugins/package/mode-local.mjs.map +1 -1
  354. package/dist/plugins/package/publish-executor.mjs +55 -114
  355. package/dist/plugins/package/publish-executor.mjs.map +1 -1
  356. package/dist/plugins/package/registry.mjs +2 -1
  357. package/dist/plugins/package/registry.mjs.map +1 -1
  358. package/dist/plugins/package/service.mjs.map +1 -1
  359. package/dist/plugins/package/spans.mjs +14 -0
  360. package/dist/plugins/package/spans.mjs.map +1 -0
  361. package/dist/plugins/postgres/db-ensure.mjs +19 -12
  362. package/dist/plugins/postgres/db-ensure.mjs.map +1 -1
  363. package/dist/plugins/postgres/errors.d.mts +5 -0
  364. package/dist/plugins/postgres/errors.mjs.map +1 -1
  365. package/dist/plugins/postgres/index.mjs +10 -17
  366. package/dist/plugins/postgres/index.mjs.map +1 -1
  367. package/dist/plugins/postgres/service.mjs +58 -24
  368. package/dist/plugins/postgres/service.mjs.map +1 -1
  369. package/dist/plugins/postgres/snapshot.mjs.map +1 -1
  370. package/dist/plugins/postgres/spans.mjs +11 -0
  371. package/dist/plugins/postgres/spans.mjs.map +1 -0
  372. package/dist/plugins/router-entrypoints.mjs +4 -4
  373. package/dist/plugins/router-entrypoints.mjs.map +1 -1
  374. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +15 -13
  375. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -1
  376. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +15 -19
  377. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -1
  378. package/dist/plugins/seal/codegen.d.mts +2 -3
  379. package/dist/plugins/seal/codegen.mjs.map +1 -1
  380. package/dist/plugins/seal/config-render.mjs +35 -8
  381. package/dist/plugins/seal/config-render.mjs.map +1 -1
  382. package/dist/plugins/seal/deploy.mjs +31 -39
  383. package/dist/plugins/seal/deploy.mjs.map +1 -1
  384. package/dist/plugins/seal/errors.d.mts +1 -3
  385. package/dist/plugins/seal/errors.mjs +7 -1
  386. package/dist/plugins/seal/errors.mjs.map +1 -1
  387. package/dist/plugins/seal/index.d.mts +1 -6
  388. package/dist/plugins/seal/index.mjs +40 -14
  389. package/dist/plugins/seal/index.mjs.map +1 -1
  390. package/dist/plugins/seal/key-manager.d.mts +1 -9
  391. package/dist/plugins/seal/key-manager.mjs +2 -18
  392. package/dist/plugins/seal/key-manager.mjs.map +1 -1
  393. package/dist/plugins/seal/key-server.mjs +37 -36
  394. package/dist/plugins/seal/key-server.mjs.map +1 -1
  395. package/dist/plugins/seal/keygen.mjs +16 -17
  396. package/dist/plugins/seal/keygen.mjs.map +1 -1
  397. package/dist/plugins/seal/mode/fork-known.mjs +36 -14
  398. package/dist/plugins/seal/mode/fork-known.mjs.map +1 -1
  399. package/dist/plugins/seal/mode/live.d.mts +6 -4
  400. package/dist/plugins/seal/mode/live.mjs +14 -21
  401. package/dist/plugins/seal/mode/live.mjs.map +1 -1
  402. package/dist/plugins/seal/mode/local-keygen.mjs +57 -21
  403. package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -1
  404. package/dist/plugins/seal/registry-publish.mjs +1 -0
  405. package/dist/plugins/seal/registry-publish.mjs.map +1 -1
  406. package/dist/plugins/seal/routable.mjs.map +1 -1
  407. package/dist/plugins/seal/service.mjs.map +1 -1
  408. package/dist/plugins/seal/spans.mjs +18 -0
  409. package/dist/plugins/seal/spans.mjs.map +1 -0
  410. package/dist/plugins/sui/auto-tick.mjs +17 -23
  411. package/dist/plugins/sui/auto-tick.mjs.map +1 -1
  412. package/dist/plugins/sui/chain-build-container.mjs +18 -0
  413. package/dist/plugins/sui/chain-build-container.mjs.map +1 -0
  414. package/dist/plugins/sui/chain-probe.d.mts +5 -5
  415. package/dist/plugins/sui/chain-probe.mjs +28 -58
  416. package/dist/plugins/sui/chain-probe.mjs.map +1 -1
  417. package/dist/plugins/sui/codegen.mjs +26 -0
  418. package/dist/plugins/sui/codegen.mjs.map +1 -1
  419. package/dist/plugins/sui/errors.d.mts +2 -29
  420. package/dist/plugins/sui/errors.mjs +1 -3
  421. package/dist/plugins/sui/errors.mjs.map +1 -1
  422. package/dist/plugins/sui/fork-faucet-strategy.d.mts +1 -0
  423. package/dist/plugins/sui/fork-faucet-strategy.mjs +55 -0
  424. package/dist/plugins/sui/fork-faucet-strategy.mjs.map +1 -0
  425. package/dist/plugins/sui/fork-orchestration.d.mts +1 -0
  426. package/dist/plugins/sui/fork-orchestration.mjs +170 -2
  427. package/dist/plugins/sui/fork-orchestration.mjs.map +1 -1
  428. package/dist/plugins/sui/fork-transaction.d.mts +2 -0
  429. package/dist/plugins/sui/fork-transaction.mjs +92 -28
  430. package/dist/plugins/sui/fork-transaction.mjs.map +1 -1
  431. package/dist/plugins/sui/index.d.mts +33 -70
  432. package/dist/plugins/sui/index.mjs +58 -35
  433. package/dist/plugins/sui/index.mjs.map +1 -1
  434. package/dist/plugins/{faucet/strategies/sui-local.mjs → sui/local-faucet-strategy.mjs} +10 -7
  435. package/dist/plugins/sui/local-faucet-strategy.mjs.map +1 -0
  436. package/dist/plugins/sui/mode/external.mjs +7 -13
  437. package/dist/plugins/sui/mode/external.mjs.map +1 -1
  438. package/dist/plugins/sui/mode/fork.mjs +136 -59
  439. package/dist/plugins/sui/mode/fork.mjs.map +1 -1
  440. package/dist/plugins/sui/mode/live.mjs +10 -16
  441. package/dist/plugins/sui/mode/live.mjs.map +1 -1
  442. package/dist/plugins/sui/mode/local.mjs +37 -36
  443. package/dist/plugins/sui/mode/local.mjs.map +1 -1
  444. package/dist/plugins/sui/mode/shared-boot.mjs +38 -115
  445. package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -1
  446. package/dist/plugins/sui/mode/shared.d.mts +1 -5
  447. package/dist/plugins/sui/mode/shared.mjs.map +1 -1
  448. package/dist/plugins/sui/mode/spec.d.mts +18 -0
  449. package/dist/plugins/sui/move-summary-runner.mjs +207 -0
  450. package/dist/plugins/sui/move-summary-runner.mjs.map +1 -0
  451. package/dist/plugins/sui/network-resolver.d.mts +4 -3
  452. package/dist/plugins/sui/service.mjs.map +1 -1
  453. package/dist/plugins/sui/snapshot.mjs +3 -0
  454. package/dist/plugins/sui/snapshot.mjs.map +1 -1
  455. package/dist/plugins/sui/spans.mjs +17 -0
  456. package/dist/plugins/sui/spans.mjs.map +1 -0
  457. package/dist/plugins/wallet/codegen.d.mts +0 -1
  458. package/dist/plugins/wallet/codegen.mjs +8 -9
  459. package/dist/plugins/wallet/codegen.mjs.map +1 -1
  460. package/dist/plugins/wallet/index.d.mts +6 -8
  461. package/dist/plugins/wallet/index.mjs +46 -35
  462. package/dist/plugins/wallet/index.mjs.map +1 -1
  463. package/dist/plugins/wallet/origin-policy.mjs +12 -28
  464. package/dist/plugins/wallet/origin-policy.mjs.map +1 -1
  465. package/dist/plugins/wallet/pairing.mjs +6 -4
  466. package/dist/plugins/wallet/pairing.mjs.map +1 -1
  467. package/dist/plugins/wallet/protocol.d.mts +1 -0
  468. package/dist/plugins/wallet/protocol.mjs +5 -44
  469. package/dist/plugins/wallet/protocol.mjs.map +1 -1
  470. package/dist/plugins/wallet/routable.mjs +2 -8
  471. package/dist/plugins/wallet/routable.mjs.map +1 -1
  472. package/dist/plugins/wallet/server.mjs +36 -44
  473. package/dist/plugins/wallet/server.mjs.map +1 -1
  474. package/dist/plugins/wallet/service.d.mts +1 -5
  475. package/dist/plugins/wallet/service.mjs +22 -18
  476. package/dist/plugins/wallet/service.mjs.map +1 -1
  477. package/dist/plugins/wallet/spans.mjs +22 -0
  478. package/dist/plugins/wallet/spans.mjs.map +1 -0
  479. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +33 -8
  480. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -1
  481. package/dist/plugins/walrus/codegen.d.mts +3 -3
  482. package/dist/plugins/walrus/codegen.mjs.map +1 -1
  483. package/dist/plugins/walrus/deploy-paths.mjs +21 -5
  484. package/dist/plugins/walrus/deploy-paths.mjs.map +1 -1
  485. package/dist/plugins/walrus/deploy.mjs +67 -69
  486. package/dist/plugins/walrus/deploy.mjs.map +1 -1
  487. package/dist/plugins/walrus/errors.mjs +1 -0
  488. package/dist/plugins/walrus/errors.mjs.map +1 -1
  489. package/dist/plugins/walrus/faucet-strategy.mjs +12 -7
  490. package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -1
  491. package/dist/plugins/walrus/index.d.mts +2 -13
  492. package/dist/plugins/walrus/index.mjs +18 -23
  493. package/dist/plugins/walrus/index.mjs.map +1 -1
  494. package/dist/plugins/walrus/mode/known-deploy.mjs +7 -5
  495. package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -1
  496. package/dist/plugins/walrus/mode/local-cluster.mjs +26 -7
  497. package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -1
  498. package/dist/plugins/walrus/registry-publish.mjs.map +1 -1
  499. package/dist/plugins/walrus/routable.mjs +7 -23
  500. package/dist/plugins/walrus/routable.mjs.map +1 -1
  501. package/dist/plugins/walrus/service.mjs.map +1 -1
  502. package/dist/plugins/walrus/spans.mjs +18 -0
  503. package/dist/plugins/walrus/spans.mjs.map +1 -0
  504. package/dist/plugins/walrus/storage-nodes.d.mts +6 -2
  505. package/dist/plugins/walrus/storage-nodes.mjs +15 -8
  506. package/dist/plugins/walrus/storage-nodes.mjs.map +1 -1
  507. package/dist/plugins/walrus/wal-swap.mjs +58 -15
  508. package/dist/plugins/walrus/wal-swap.mjs.map +1 -1
  509. package/dist/primitives/artifact-publisher.d.mts +1 -1
  510. package/dist/primitives/artifact-publisher.mjs +15 -0
  511. package/dist/primitives/artifact-publisher.mjs.map +1 -0
  512. package/dist/runtime/docker/client.mjs +17 -4
  513. package/dist/runtime/docker/client.mjs.map +1 -1
  514. package/dist/runtime/docker/container.mjs +219 -132
  515. package/dist/runtime/docker/container.mjs.map +1 -1
  516. package/dist/runtime/docker/errors.mjs +0 -6
  517. package/dist/runtime/docker/errors.mjs.map +1 -1
  518. package/dist/runtime/docker/exec.mjs +21 -18
  519. package/dist/runtime/docker/exec.mjs.map +1 -1
  520. package/dist/runtime/docker/image.mjs +36 -13
  521. package/dist/runtime/docker/image.mjs.map +1 -1
  522. package/dist/runtime/docker/index.mjs +14 -0
  523. package/dist/runtime/docker/inspect-and-decode.mjs +51 -0
  524. package/dist/runtime/docker/inspect-and-decode.mjs.map +1 -0
  525. package/dist/runtime/docker/inventory.mjs +14 -11
  526. package/dist/runtime/docker/inventory.mjs.map +1 -1
  527. package/dist/runtime/docker/labels.mjs +38 -5
  528. package/dist/runtime/docker/labels.mjs.map +1 -1
  529. package/dist/runtime/docker/logs.d.mts +1 -1
  530. package/dist/runtime/docker/logs.mjs.map +1 -1
  531. package/dist/runtime/docker/network.mjs +83 -47
  532. package/dist/runtime/docker/network.mjs.map +1 -1
  533. package/dist/runtime/docker/render-run-args.mjs +82 -0
  534. package/dist/runtime/docker/render-run-args.mjs.map +1 -0
  535. package/dist/runtime/docker/service.d.mts +1 -1
  536. package/dist/runtime/docker/service.mjs +12 -7
  537. package/dist/runtime/docker/service.mjs.map +1 -1
  538. package/dist/runtime/docker/sweep.mjs +118 -43
  539. package/dist/runtime/docker/sweep.mjs.map +1 -1
  540. package/dist/runtime/docker/volume.mjs +2 -0
  541. package/dist/runtime/docker/volume.mjs.map +1 -1
  542. package/dist/runtime/docker/wrap.mjs +30 -1
  543. package/dist/runtime/docker/wrap.mjs.map +1 -1
  544. package/dist/substrate/cross-process.mjs +14 -8
  545. package/dist/substrate/cross-process.mjs.map +1 -1
  546. package/dist/substrate/event-time.mjs +33 -0
  547. package/dist/substrate/event-time.mjs.map +1 -0
  548. package/dist/substrate/events.d.mts +28 -8
  549. package/dist/substrate/identity.d.mts +2 -1
  550. package/dist/substrate/manifest.d.mts +68 -5
  551. package/dist/substrate/manifest.mjs +34 -5
  552. package/dist/substrate/manifest.mjs.map +1 -1
  553. package/dist/substrate/network.d.mts +3 -5
  554. package/dist/substrate/options.d.mts +0 -2
  555. package/dist/substrate/plugin.d.mts +13 -0
  556. package/dist/substrate/plugin.mjs +4 -2
  557. package/dist/substrate/plugin.mjs.map +1 -1
  558. package/dist/substrate/projection.d.mts +35 -3
  559. package/dist/substrate/runtime/artifact-publisher/index.mjs +19 -9
  560. package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -1
  561. package/dist/substrate/runtime/atomic-write.mjs +97 -32
  562. package/dist/substrate/runtime/atomic-write.mjs.map +1 -1
  563. package/dist/substrate/runtime/cache/index.mjs +3 -0
  564. package/dist/substrate/runtime/cache/schema.mjs +2 -2
  565. package/dist/substrate/runtime/cache/schema.mjs.map +1 -1
  566. package/dist/substrate/runtime/cache/service.mjs +9 -7
  567. package/dist/substrate/runtime/cache/service.mjs.map +1 -1
  568. package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -1
  569. package/dist/substrate/runtime/capability-sinks/index.mjs +3 -0
  570. package/dist/substrate/runtime/capability-sinks/layer.mjs +1 -1
  571. package/dist/substrate/runtime/capability-sinks/service.d.mts +61 -2
  572. package/dist/substrate/runtime/capability-sinks/service.mjs +21 -26
  573. package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -1
  574. package/dist/substrate/runtime/config-validation.d.mts +1 -13
  575. package/dist/substrate/runtime/config-validation.mjs +2 -91
  576. package/dist/substrate/runtime/config-validation.mjs.map +1 -1
  577. package/dist/substrate/runtime/container-runtime.d.mts +1 -0
  578. package/dist/substrate/runtime/container-runtime.mjs +2 -0
  579. package/dist/substrate/runtime/control-plane/domain.mjs +101 -0
  580. package/dist/substrate/runtime/control-plane/domain.mjs.map +1 -0
  581. package/dist/substrate/runtime/control-plane/service.mjs +7 -0
  582. package/dist/substrate/runtime/control-plane/service.mjs.map +1 -0
  583. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +46 -19
  584. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -1
  585. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +30 -12
  586. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -1
  587. package/dist/substrate/runtime/cross-process/command-channel/index.mjs +5 -0
  588. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +11 -2
  589. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -1
  590. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +1 -1
  591. package/dist/substrate/runtime/cross-process/index.mjs +11 -0
  592. package/dist/substrate/runtime/cross-process/live-clock.mjs +34 -0
  593. package/dist/substrate/runtime/cross-process/live-clock.mjs.map +1 -0
  594. package/dist/substrate/runtime/cross-process/liveness.mjs +52 -10
  595. package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -1
  596. package/dist/substrate/runtime/cross-process/lock.d.mts +1 -0
  597. package/dist/substrate/runtime/cross-process/lock.mjs +23 -0
  598. package/dist/substrate/runtime/cross-process/lock.mjs.map +1 -0
  599. package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs +64 -0
  600. package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs.map +1 -0
  601. package/dist/substrate/runtime/cross-process/roster.mjs +97 -83
  602. package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -1
  603. package/dist/substrate/runtime/cross-process/self-pid.mjs +8 -0
  604. package/dist/substrate/runtime/cross-process/self-pid.mjs.map +1 -0
  605. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +24 -28
  606. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -1
  607. package/dist/substrate/runtime/cross-process/stack-lock.mjs +41 -20
  608. package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -1
  609. package/dist/substrate/runtime/current-plugin.mjs +2 -2
  610. package/dist/substrate/runtime/current-plugin.mjs.map +1 -1
  611. package/dist/substrate/runtime/errors.mjs +12 -6
  612. package/dist/substrate/runtime/errors.mjs.map +1 -1
  613. package/dist/substrate/runtime/format-unknown-error.mjs +30 -0
  614. package/dist/substrate/runtime/format-unknown-error.mjs.map +1 -0
  615. package/dist/substrate/runtime/host-bind-mount-owner.mjs +10 -0
  616. package/dist/substrate/runtime/host-bind-mount-owner.mjs.map +1 -0
  617. package/dist/substrate/runtime/host-gateway.mjs +20 -0
  618. package/dist/substrate/runtime/host-gateway.mjs.map +1 -0
  619. package/dist/substrate/runtime/host-tree-tar/index.mjs +61 -50
  620. package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -1
  621. package/dist/substrate/runtime/http-probe.d.mts +1 -1
  622. package/dist/substrate/runtime/index.mjs +14 -0
  623. package/dist/substrate/runtime/lease-broker/index.d.mts +1 -1
  624. package/dist/substrate/runtime/lease-broker/index.mjs +2 -0
  625. package/dist/substrate/runtime/lease-broker/service.d.mts +1 -64
  626. package/dist/substrate/runtime/lease-broker/service.mjs +1 -1
  627. package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -1
  628. package/dist/substrate/runtime/lifecycle/dep-graph.mjs +22 -3
  629. package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -1
  630. package/dist/substrate/runtime/lifecycle/index.mjs +9 -0
  631. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -1
  632. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +20 -3
  633. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -1
  634. package/dist/substrate/runtime/lifecycle/selective-restart.mjs +1 -1
  635. package/dist/substrate/runtime/lifecycle/signals.mjs +5 -5
  636. package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -1
  637. package/dist/substrate/runtime/lifecycle/state-machine.mjs +1 -1
  638. package/dist/substrate/runtime/managed-container.d.mts +19 -1
  639. package/dist/substrate/runtime/managed-container.mjs +20 -1
  640. package/dist/substrate/runtime/managed-container.mjs.map +1 -1
  641. package/dist/substrate/runtime/manifest/index.mjs +3 -0
  642. package/dist/substrate/runtime/manifest/manifest.mjs +15 -11
  643. package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -1
  644. package/dist/substrate/runtime/mode-errors.mjs +20 -0
  645. package/dist/substrate/runtime/mode-errors.mjs.map +1 -0
  646. package/dist/substrate/runtime/observability/cascade-formatter.mjs +9 -13
  647. package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -1
  648. package/dist/substrate/runtime/observability/formatter-registry.mjs +19 -36
  649. package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -1
  650. package/dist/substrate/runtime/observability/ignore-with-log.d.mts +1 -0
  651. package/dist/substrate/runtime/observability/ignore-with-log.mjs +17 -0
  652. package/dist/substrate/runtime/observability/ignore-with-log.mjs.map +1 -0
  653. package/dist/substrate/runtime/observability/index.d.mts +1 -1
  654. package/dist/substrate/runtime/observability/index.mjs +13 -0
  655. package/dist/substrate/runtime/observability/log-store.d.mts +1 -0
  656. package/dist/substrate/runtime/observability/log-store.mjs +175 -0
  657. package/dist/substrate/runtime/observability/log-store.mjs.map +1 -0
  658. package/dist/substrate/runtime/observability/logger.d.mts +2 -1
  659. package/dist/substrate/runtime/observability/logger.mjs +5 -9
  660. package/dist/substrate/runtime/observability/logger.mjs.map +1 -1
  661. package/dist/substrate/runtime/observability/output-truncate.mjs +35 -0
  662. package/dist/substrate/runtime/observability/output-truncate.mjs.map +1 -0
  663. package/dist/substrate/runtime/observability/pretty-error.mjs +9 -12
  664. package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -1
  665. package/dist/substrate/runtime/observability/redaction.d.mts +2 -13
  666. package/dist/substrate/runtime/observability/redaction.mjs +8 -14
  667. package/dist/substrate/runtime/observability/redaction.mjs.map +1 -1
  668. package/dist/substrate/runtime/observability/span-store.d.mts +1 -0
  669. package/dist/substrate/runtime/observability/span-store.mjs +110 -0
  670. package/dist/substrate/runtime/observability/span-store.mjs.map +1 -0
  671. package/dist/substrate/runtime/observability/spans.mjs +14 -14
  672. package/dist/substrate/runtime/observability/spans.mjs.map +1 -1
  673. package/dist/substrate/runtime/observability/subprocess-capture.mjs +1 -1
  674. package/dist/substrate/runtime/passthrough-or-wrap.mjs +33 -0
  675. package/dist/substrate/runtime/passthrough-or-wrap.mjs.map +1 -0
  676. package/dist/substrate/runtime/paths.d.mts +1 -1
  677. package/dist/substrate/runtime/paths.mjs +4 -3
  678. package/dist/substrate/runtime/paths.mjs.map +1 -1
  679. package/dist/substrate/runtime/phase-preserving-produce.mjs +40 -0
  680. package/dist/substrate/runtime/phase-preserving-produce.mjs.map +1 -0
  681. package/dist/substrate/runtime/port-broker/index.mjs +3 -0
  682. package/dist/substrate/runtime/port-broker/service.mjs +170 -126
  683. package/dist/substrate/runtime/port-broker/service.mjs.map +1 -1
  684. package/dist/substrate/runtime/post-acquire-tasks.mjs +1 -1
  685. package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -1
  686. package/dist/substrate/runtime/probes.d.mts +7 -5
  687. package/dist/substrate/runtime/probes.mjs +3 -1
  688. package/dist/substrate/runtime/probes.mjs.map +1 -1
  689. package/dist/substrate/runtime/projection/index.mjs +4 -0
  690. package/dist/substrate/runtime/projection/operational-endpoints.mjs +1 -2
  691. package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -1
  692. package/dist/substrate/runtime/projection/persisted.mjs +33 -15
  693. package/dist/substrate/runtime/projection/persisted.mjs.map +1 -1
  694. package/dist/substrate/runtime/projection/state-ref.mjs +26 -2
  695. package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -1
  696. package/dist/substrate/runtime/projection/update.mjs +88 -24
  697. package/dist/substrate/runtime/projection/update.mjs.map +1 -1
  698. package/dist/substrate/runtime/random-suffix.mjs +11 -0
  699. package/dist/substrate/runtime/random-suffix.mjs.map +1 -0
  700. package/dist/substrate/runtime/retry-policy.d.mts +59 -1
  701. package/dist/substrate/runtime/retry-policy.mjs +66 -1
  702. package/dist/substrate/runtime/retry-policy.mjs.map +1 -1
  703. package/dist/substrate/runtime/routed-url.d.mts +1 -0
  704. package/dist/substrate/runtime/routed-url.mjs +79 -0
  705. package/dist/substrate/runtime/routed-url.mjs.map +1 -0
  706. package/dist/substrate/runtime/runtime-decode.d.mts +1 -1
  707. package/dist/substrate/runtime/runtime-decode.mjs.map +1 -1
  708. package/dist/substrate/runtime/scoped-http-server.mjs +2 -3
  709. package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -1
  710. package/dist/substrate/runtime/scoped-multimap/index.mjs +2 -0
  711. package/dist/substrate/runtime/scoped-multimap/service.mjs +52 -0
  712. package/dist/substrate/runtime/scoped-multimap/service.mjs.map +1 -0
  713. package/dist/substrate/runtime/scoped-ref-map/index.mjs +2 -0
  714. package/dist/substrate/runtime/scoped-ref-map/service.mjs +2 -2
  715. package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -1
  716. package/dist/substrate/runtime/stage-and-swap/index.mjs +72 -4
  717. package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -1
  718. package/dist/substrate/runtime/state-store/index.d.mts +1 -0
  719. package/dist/substrate/runtime/state-store/index.mjs +3 -0
  720. package/dist/substrate/runtime/state-store/schema.d.mts +1 -0
  721. package/dist/substrate/runtime/state-store/schema.mjs +19 -14
  722. package/dist/substrate/runtime/state-store/schema.mjs.map +1 -1
  723. package/dist/substrate/runtime/state-store/service.d.mts +1 -0
  724. package/dist/substrate/runtime/state-store/service.mjs +145 -0
  725. package/dist/substrate/runtime/state-store/service.mjs.map +1 -0
  726. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.d.mts +1 -0
  727. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs +33 -0
  728. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs.map +1 -0
  729. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +1 -1
  730. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -1
  731. package/dist/substrate/runtime/strategy-registry/index.mjs +4 -0
  732. package/dist/substrate/runtime/strategy-registry/service.mjs +19 -33
  733. package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -1
  734. package/dist/substrate/runtime/subnet-broker.mjs +60 -0
  735. package/dist/substrate/runtime/subnet-broker.mjs.map +1 -0
  736. package/dist/substrate/runtime/sui-execute/index.d.mts +21 -1
  737. package/dist/substrate/runtime/sui-execute/index.mjs +84 -20
  738. package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -1
  739. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.d.mts +1 -0
  740. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs +32 -0
  741. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs.map +1 -0
  742. package/dist/substrate/runtime/sui-ledger/object-ref.mjs +32 -0
  743. package/dist/substrate/runtime/sui-ledger/object-ref.mjs.map +1 -0
  744. package/dist/substrate/runtime/sui-move-build/index.mjs +93 -19
  745. package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -1
  746. package/dist/substrate/runtime/supervisor/acquire-node.mjs +181 -0
  747. package/dist/substrate/runtime/supervisor/acquire-node.mjs.map +1 -0
  748. package/dist/substrate/runtime/supervisor/background-tasks.mjs +144 -0
  749. package/dist/substrate/runtime/supervisor/background-tasks.mjs.map +1 -0
  750. package/dist/substrate/runtime/supervisor/command-loop.mjs +68 -0
  751. package/dist/substrate/runtime/supervisor/command-loop.mjs.map +1 -0
  752. package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs +151 -0
  753. package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs.map +1 -0
  754. package/dist/substrate/runtime/supervisor/errors.d.mts +1 -0
  755. package/dist/substrate/runtime/supervisor/errors.mjs +9 -0
  756. package/dist/substrate/runtime/supervisor/errors.mjs.map +1 -0
  757. package/dist/substrate/runtime/supervisor/index.d.mts +1 -0
  758. package/dist/substrate/runtime/supervisor/index.mjs +3 -0
  759. package/dist/substrate/runtime/supervisor/shutdown.mjs +51 -0
  760. package/dist/substrate/runtime/supervisor/shutdown.mjs.map +1 -0
  761. package/dist/substrate/runtime/supervisor/start-supervisor.d.mts +1 -0
  762. package/dist/substrate/runtime/supervisor/start-supervisor.mjs +250 -0
  763. package/dist/substrate/runtime/supervisor/start-supervisor.mjs.map +1 -0
  764. package/dist/substrate/runtime/supervisor/state.d.mts +1 -0
  765. package/dist/substrate/runtime/supervisor/state.mjs +22 -0
  766. package/dist/substrate/runtime/supervisor/state.mjs.map +1 -0
  767. package/dist/substrate/runtime/supervisor/teardown.mjs +57 -0
  768. package/dist/substrate/runtime/supervisor/teardown.mjs.map +1 -0
  769. package/dist/substrate/runtime/supervisor/types.d.mts +1 -0
  770. package/dist/substrate/runtime/supervisor/wiring.mjs +133 -0
  771. package/dist/substrate/runtime/supervisor/wiring.mjs.map +1 -0
  772. package/dist/substrate/runtime/typed-env.mjs +8 -0
  773. package/dist/substrate/runtime/typed-env.mjs.map +1 -0
  774. package/dist/substrate/state-store.d.mts +1 -0
  775. package/dist/substrate/versioned-doc-schema.mjs +17 -0
  776. package/dist/substrate/versioned-doc-schema.mjs.map +1 -0
  777. package/dist/substrate/versioned-doc-sync.mjs +94 -0
  778. package/dist/substrate/versioned-doc-sync.mjs.map +1 -0
  779. package/dist/surfaces/cli/command-tree.mjs.map +1 -1
  780. package/dist/surfaces/cli/commands/index.mjs +9 -0
  781. package/dist/surfaces/cli/commands/prune-picker-entry.mjs +13 -0
  782. package/dist/surfaces/cli/commands/prune-picker-entry.mjs.map +1 -0
  783. package/dist/surfaces/cli/commands/prune-picker.mjs +3 -2
  784. package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -1
  785. package/dist/surfaces/cli/commands/prune.mjs +34 -17
  786. package/dist/surfaces/cli/commands/prune.mjs.map +1 -1
  787. package/dist/surfaces/cli/commands/status.mjs +2 -2
  788. package/dist/surfaces/cli/commands/status.mjs.map +1 -1
  789. package/dist/surfaces/cli/commands/supervisor-presence.mjs +5 -3
  790. package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -1
  791. package/dist/surfaces/cli/commands/wipe.mjs +38 -4
  792. package/dist/surfaces/cli/commands/wipe.mjs.map +1 -1
  793. package/dist/surfaces/cli/errors.mjs +1 -1
  794. package/dist/surfaces/cli/errors.mjs.map +1 -1
  795. package/dist/surfaces/cli/flags.mjs +0 -1
  796. package/dist/surfaces/cli/flags.mjs.map +1 -1
  797. package/dist/surfaces/cli/index.mjs +98 -18
  798. package/dist/surfaces/cli/index.mjs.map +1 -1
  799. package/dist/surfaces/cli/output.mjs +1 -0
  800. package/dist/surfaces/cli/output.mjs.map +1 -1
  801. package/dist/surfaces/cli/sysexits.mjs +2 -1
  802. package/dist/surfaces/cli/sysexits.mjs.map +1 -1
  803. package/dist/surfaces/tui/app.mjs +25 -3
  804. package/dist/surfaces/tui/app.mjs.map +1 -1
  805. package/dist/surfaces/tui/display-derivation.mjs +23 -74
  806. package/dist/surfaces/tui/display-derivation.mjs.map +1 -1
  807. package/dist/surfaces/tui/event-log.mjs +35 -23
  808. package/dist/surfaces/tui/event-log.mjs.map +1 -1
  809. package/dist/surfaces/tui/input.mjs +5 -1
  810. package/dist/surfaces/tui/input.mjs.map +1 -1
  811. package/dist/surfaces/tui/plain-renderer.mjs +70 -34
  812. package/dist/surfaces/tui/plain-renderer.mjs.map +1 -1
  813. package/package.json +24 -4
  814. package/dist/contracts/liveness-classifier.d.mts +0 -19
  815. package/dist/contracts/network-resolver.d.mts +0 -15
  816. package/dist/contracts/network-resolver.mjs +0 -7
  817. package/dist/contracts/network-resolver.mjs.map +0 -1
  818. package/dist/orchestrators/codegen/extras.mjs +0 -16
  819. package/dist/orchestrators/codegen/extras.mjs.map +0 -1
  820. package/dist/plugins/deepbook/routable.mjs +0 -21
  821. package/dist/plugins/deepbook/routable.mjs.map +0 -1
  822. package/dist/plugins/faucet/service.d.mts +0 -20
  823. package/dist/plugins/faucet/strategies/sui-local.d.mts +0 -23
  824. package/dist/plugins/faucet/strategies/sui-local.mjs.map +0 -1
  825. package/dist/plugins/sui/seed-objects.d.mts +0 -18
  826. package/dist/plugins/sui/seed-objects.mjs +0 -25
  827. package/dist/plugins/sui/seed-objects.mjs.map +0 -1
  828. package/dist/runtime/built-in-plugin-layers.mjs.map +0 -1
  829. package/dist/substrate/runtime/context-helpers.mjs +0 -32
  830. package/dist/substrate/runtime/context-helpers.mjs.map +0 -1
  831. package/dist/substrate/runtime/run.mjs.map +0 -1
  832. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +0 -30
  833. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +0 -1
  834. package/dist/substrate/runtime/supervisor.d.mts +0 -1
  835. package/dist/substrate/runtime/supervisor.mjs +0 -831
  836. package/dist/substrate/runtime/supervisor.mjs.map +0 -1
  837. package/dist/surfaces/cli/commands/doctor-probes.mjs.map +0 -1
  838. /package/dist/{substrate/runtime/strategy-registry/faucet-capability-for.d.mts → plugins/faucet/http.d.mts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.mjs","names":["Logger"],"sources":["../../src/orchestrators/run.ts"],"sourcesContent":["// Default-stack Layer composition + supervise() entrypoint.\n//\n// Single seam consumed by both the CLI bin entry (`cli/main.ts`) and the\n// library-facing programmatic surface (`api/run-stack.ts`). Composes the\n// substrate Layer stack (L0) + the Docker `ContainerRuntime` adapter\n// (L1), yields the substrate services into a `Context.Context<never>`\n// pluginContext, builds the projection ref, and runs `supervise()`\n// inside a scope.\n//\n// The CLI augments the supervised body with cross-process command\n// channel forwarding; the library surface passes a no-op augmentation\n// and exposes the handle's events / state / awaitShutdown directly.\n//\n// Architecture: this is L3 (orchestrator-level). Layer composition that\n// assembles L0+L1 stacks belongs at L3/L4 — it can't live in `substrate/`\n// because it imports a concrete L1 adapter (Docker) by definition. See\n// ARCHITECTURE.md § \"Layer composition belongs at L3/L4, not L0\".\n\nimport { Context, Effect, Layer, Logger as EffectLogger, Scope, SubscriptionRef } from 'effect';\nimport * as NodeFileSystem from '@effect/platform-node/NodeFileSystem';\nimport * as NodePath from '@effect/platform-node/NodePath';\nimport * as NodeChildProcessSpawner from '@effect/platform-node/NodeChildProcessSpawner';\nimport { ChildProcessSpawner } from 'effect/unstable/process/ChildProcessSpawner';\n\nimport type { Identity } from '../substrate/identity.ts';\nimport { CacheService, layerCache } from '../substrate/runtime/cache/index.ts';\nimport { LeaseBrokerService, layerLeaseBroker } from '../substrate/runtime/lease-broker/index.ts';\nimport {\n\tArtifactPublisherService,\n\tlayerArtifactPublisher,\n} from '../substrate/runtime/artifact-publisher/index.ts';\nimport {\n\tIdentityContext,\n\tRuntimeRoot,\n\tStackPathsService,\n\tlayerIdentity,\n\tlayerRuntimeRoot,\n\tlayerStackPaths,\n} from '../substrate/runtime/paths.ts';\nimport { PortBrokerService, layerPortBroker } from '../substrate/runtime/port-broker/index.ts';\nimport {\n\tStrategyRegistryService,\n\tlayerStrategyRegistry,\n} from '../substrate/runtime/strategy-registry/index.ts';\nimport {\n\tContainerRuntimeService,\n\tDockerSpawner,\n\tlayerContainerRuntimeDocker,\n\tlayerDockerCycleInitial,\n\tlayerDockerHostDefault,\n} from '../runtime/docker/index.ts';\nimport { awaitAll } from '../substrate/runtime/lifecycle/index.ts';\nimport { makeProjectionRef } from '../substrate/runtime/projection/index.ts';\nimport { Logger, layerLogger } from '../substrate/runtime/observability/index.ts';\nimport {\n\tPostAcquireTasksService,\n\tlayerPostAcquireTasks,\n} from '../substrate/runtime/post-acquire-tasks.ts';\nimport {\n\tstartSupervisor,\n\ttype OrchestratorSinks,\n\ttype SupervisedStack,\n\ttype SupervisorCommandHandler,\n\ttype SupervisorHandle,\n\ttype SupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor/index.ts';\n\n/** Substrate Layer stack for a single supervised run. Composes every L0\n * service the supervisor yields from its R-channel, plus the L1 Docker\n * `ContainerRuntime`. Built-in plugin services are layered outside\n * substrate and added through `extendContext`. */\nexport const buildSubstrateLayers = (identity: Identity, runtimeRoot: string) => {\n\t// DockerSpawner adapts platform-node's ChildProcessSpawner tag onto\n\t// the docker subsystem's local DockerSpawner tag (same shape; the\n\t// indirection only lets tests inject a stub).\n\tconst layerDockerSpawnerFromNode: Layer.Layer<DockerSpawner, never, ChildProcessSpawner> =\n\t\tLayer.effect(\n\t\t\tDockerSpawner,\n\t\t\tEffect.gen(function* () {\n\t\t\t\treturn yield* ChildProcessSpawner;\n\t\t\t}),\n\t\t);\n\n\tconst platformBase = Layer.mergeAll(\n\t\tlayerIdentity(identity),\n\t\tlayerRuntimeRoot(runtimeRoot),\n\t\tNodePath.layer,\n\t\tNodeFileSystem.layer,\n\t\tlayerDockerHostDefault,\n\t\tlayerDockerCycleInitial,\n\t\tlayerStrategyRegistry,\n\t);\n\n\tconst childProcessSpawnerWired = NodeChildProcessSpawner.layer.pipe(\n\t\tLayer.provideMerge(platformBase),\n\t);\n\tconst withStackPaths = layerStackPaths.pipe(Layer.provideMerge(childProcessSpawnerWired));\n\tconst withCache = layerCache.pipe(Layer.provideMerge(withStackPaths));\n\tconst withArtifactPublisher = layerArtifactPublisher.pipe(Layer.provideMerge(withCache));\n\tconst withPortBroker = layerPortBroker.pipe(Layer.provideMerge(withArtifactPublisher));\n\tconst withLeaseBroker = layerLeaseBroker.pipe(Layer.provideMerge(withPortBroker));\n\tconst withSpawnerAdapter = layerDockerSpawnerFromNode.pipe(Layer.provideMerge(withLeaseBroker));\n\tconst withContainerRuntime = layerContainerRuntimeDocker.pipe(\n\t\tLayer.provideMerge(withSpawnerAdapter),\n\t);\n\tconst withPostAcquireTasks = layerPostAcquireTasks.pipe(Layer.provideMerge(withContainerRuntime));\n\treturn layerLogger.pipe(Layer.provideMerge(withPostAcquireTasks));\n};\n\n/** Build the opaque `Context.Context<never>` the supervisor hands to\n * every plugin's `acquire` body. Yields every substrate service the\n * Docker-backed substrate layer stack provides; downstream callers\n * may extend the context (e.g. layering a Logger or a\n * `CapabilitySinksService`) before passing it to `supervise()`. */\nconst buildPluginContext = (): Effect.Effect<\n\tContext.Context<never>,\n\tnever,\n\t| IdentityContext\n\t| RuntimeRoot\n\t| StackPathsService\n\t| CacheService\n\t| StrategyRegistryService\n\t| ContainerRuntimeService\n\t| ArtifactPublisherService\n\t| PortBrokerService\n\t| LeaseBrokerService\n\t| PostAcquireTasksService\n\t| Logger\n> =>\n\tEffect.gen(function* () {\n\t\tconst identityCtx = yield* IdentityContext;\n\t\tconst runtimeRootResolved = yield* RuntimeRoot;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst cache = yield* CacheService;\n\t\tconst registry = yield* StrategyRegistryService;\n\t\tconst containerRuntime = yield* ContainerRuntimeService;\n\t\tconst publisher = yield* ArtifactPublisherService;\n\t\tconst portBroker = yield* PortBrokerService;\n\t\tconst leaseBroker = yield* LeaseBrokerService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\tconst logger = yield* Logger;\n\n\t\treturn Context.empty().pipe(\n\t\t\tContext.add(IdentityContext, identityCtx),\n\t\t\tContext.add(RuntimeRoot, runtimeRootResolved),\n\t\t\tContext.add(StackPathsService, stackPaths),\n\t\t\tContext.add(CacheService, cache),\n\t\t\tContext.add(StrategyRegistryService, registry),\n\t\t\tContext.add(ContainerRuntimeService, containerRuntime),\n\t\t\tContext.add(ArtifactPublisherService, publisher),\n\t\t\tContext.add(PortBrokerService, portBroker),\n\t\t\tContext.add(LeaseBrokerService, leaseBroker),\n\t\t\tContext.add(PostAcquireTasksService, postAcquireTasks),\n\t\t\tContext.add(Logger, logger),\n\t\t) as Context.Context<never>;\n\t});\n\n/** Options accepted by the supervised-run entrypoint. `lifetime`\n * selects long-running supervision versus a one-shot acquire/codegen\n * cycle. The `beforeInitialAcquire` hook runs inside the supervised\n * scope before the first acquire starts; live renderers use it to\n * subscribe to startup projection changes. The `withinScope` hook\n * runs after the first acquire completes.\n *\n * Generic `R` widens the hook R-channel so callers can yield\n * substrate services (e.g. `StackPathsService`) that are in scope at\n * the supervisor-boot site. */\nexport interface SuperviseStackOptions<R = Scope.Scope, ExtendR = never, HookE = never> {\n\treadonly lifetime?: 'long-running' | 'one-shot';\n\treadonly beforeInitialAcquire?: (handle: SupervisorHandle) => Effect.Effect<void, HookE, R>;\n\treadonly withinScope?: (handle: SupervisorHandle) => Effect.Effect<void, HookE, R>;\n\treadonly commandHandler?: SupervisorCommandHandler;\n\treadonly orchestratorSinks?: OrchestratorSinks;\n\treadonly postAcquireHook?: SupervisorPostAcquireHook;\n\t/** Caller-supplied extension layered into `pluginContext` after the\n\t * default substrate context is built. Used by plugin-author Layer\n\t * composition (ARCHITECTURE.md § Plugin-author extension) and by\n\t * the CLI when it wants to inject a custom Logger / CapabilitySinks\n\t * override. */\n\treadonly extendContext?: (\n\t\tctx: Context.Context<never>,\n\t) => Effect.Effect<Context.Context<never>, never, ExtendR>;\n}\n\n/** Effect that boots the supervisor for `stack` and blocks on the\n * supervisor's shutdown latch. Returns the final `SubscribableState`\n * snapshot so callers (CLI, library handle) can inspect post-shutdown\n * state. */\nexport const superviseStackEffect = <R = Scope.Scope, ExtendR = never, HookE = never>(\n\tstack: SupervisedStack,\n\tidentity: Identity,\n\tstate: SubscriptionRef.SubscriptionRef<import('../substrate/projection.ts').SubscribableState>,\n\topts: SuperviseStackOptions<R, ExtendR, HookE> = {},\n) =>\n\tEffect.gen(function* () {\n\t\treturn yield* Effect.scoped(\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst baseContext = yield* buildPluginContext();\n\t\t\t\tconst pluginContext =\n\t\t\t\t\topts.extendContext === undefined ? baseContext : yield* opts.extendContext(baseContext);\n\n\t\t\t\tconst startup = yield* startSupervisor(\n\t\t\t\t\tstack,\n\t\t\t\t\tidentity,\n\t\t\t\t\tstate,\n\t\t\t\t\tpluginContext,\n\t\t\t\t\topts.orchestratorSinks ?? [],\n\t\t\t\t\topts.commandHandler,\n\t\t\t\t\topts.postAcquireHook,\n\t\t\t\t\t{ commandLoop: opts.lifetime !== 'one-shot' },\n\t\t\t\t);\n\t\t\t\tconst { handle } = startup;\n\t\t\t\tif (opts.beforeInitialAcquire !== undefined) {\n\t\t\t\t\tyield* opts.beforeInitialAcquire(handle);\n\t\t\t\t}\n\t\t\t\tif (opts.lifetime === 'one-shot') {\n\t\t\t\t\tyield* startup.runInitialAcquire;\n\t\t\t\t\tyield* awaitAll(startup.handle.registry, [...startup.handle.graph.nodes.keys()]);\n\t\t\t\t\tif (opts.withinScope !== undefined) {\n\t\t\t\t\t\tyield* opts.withinScope(handle);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst outcome = yield* Effect.raceFirst(\n\t\t\t\t\tstartup.runInitialAcquire.pipe(Effect.as('booted' as const)),\n\t\t\t\t\thandle.awaitShutdown.pipe(Effect.as('shutdown' as const)),\n\t\t\t\t);\n\t\t\t\tif (outcome === 'shutdown') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (opts.withinScope !== undefined) {\n\t\t\t\t\tyield* opts.withinScope(handle);\n\t\t\t\t}\n\t\t\t\tyield* handle.awaitShutdown;\n\t\t\t}),\n\t\t);\n\t});\n\n/** End-to-end run: builds the substrate Layer stack, provides it to\n * `superviseStackEffect`, applies a quiet Logger by default unless the\n * caller passes one in `opts.loggerLayer`. The returned Effect has\n * type `Effect<void, ..., never>` — all requirements are discharged\n * by the layer stack composed here.\n *\n * Callers that need to capture intermediate state (errors, terminal\n * snapshot, etc.) supply `opts.withinScope` and read off the\n * supervisor handle directly. */\nexport interface RunStackEffectOptions<\n\tR = Scope.Scope,\n\tExtendR = never,\n\tHookE = never,\n> extends SuperviseStackOptions<R, ExtendR, HookE> {\n\treadonly runtimeRoot: string;\n\treadonly loggerLayer?: Layer.Layer<never>;\n}\n\nexport const runStackEffect = <R = Scope.Scope, ExtendR = never, HookE = never>(\n\tstack: SupervisedStack,\n\tidentity: Identity,\n\topts: RunStackEffectOptions<R, ExtendR, HookE>,\n) => {\n\tconst substrate = buildSubstrateLayers(identity, opts.runtimeRoot);\n\tconst program = Effect.gen(function* () {\n\t\tconst state = yield* makeProjectionRef();\n\t\tyield* superviseStackEffect(stack, identity, state, opts);\n\t});\n\n\treturn program.pipe(\n\t\tEffect.provide(substrate),\n\t\tEffect.provide(opts.loggerLayer ?? EffectLogger.layer([])),\n\t);\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Effect, FileSystem, Layer, Scope } from "effect";
1
+ import { Context, Effect, FileSystem, Layer, Scope } from "effect";
2
2
  //#region src/orchestrators/runtime-composition.d.ts
3
3
  interface ProductionCodegenOptions {
4
4
  readonly appRoot?: string;
@@ -1,30 +1,69 @@
1
- import { StackPathsService } from "../substrate/runtime/paths.mjs";
2
1
  import { endpointKey } from "../substrate/brand.mjs";
2
+ import { StackPathsService } from "../substrate/runtime/paths.mjs";
3
3
  import { readResolvedSync } from "../substrate/runtime/lifecycle/plugin-registry.mjs";
4
+ import { SnapshotOrchestratorService, layerSnapshotOrchestrator } from "./snapshot/service.mjs";
5
+ import "../substrate/runtime/lifecycle/index.mjs";
6
+ import { operationalEndpointEventsFromResolvedValue } from "../substrate/runtime/projection/operational-endpoints.mjs";
4
7
  import { PostAcquireTasksService } from "../substrate/runtime/post-acquire-tasks.mjs";
5
- import { MoveCodegenService, MoveSummaryRunnerService, layerDockerMoveSummaryRunner, layerMystenMoveCodegen } from "./codegen/bindings.mjs";
8
+ import { MoveCodegenService, MoveSummaryRunnerService, layerMystenMoveCodegen } from "./codegen/bindings.mjs";
9
+ import { layerSuiMoveSummaryRunnerDocker } from "../plugins/sui/move-summary-runner.mjs";
6
10
  import { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from "./codegen/paths.mjs";
7
11
  import { CodegenOrchestratorService, layerCodegenOrchestrator } from "./codegen/service.mjs";
8
- import { makeExtrasCodegenable } from "./codegen/extras.mjs";
9
12
  import { layerTraefikContainerOpsDocker } from "./router/traefik-container.mjs";
10
13
  import { makeDefaultRouterProfile } from "./router/profile.mjs";
11
14
  import { layerEntrypointRegistry } from "./router/entrypoints.mjs";
12
15
  import { RouterService, layerDockerUpstreamResolver, layerRouterConfigLiteral, layerRouterService } from "./router/service.mjs";
16
+ import "./router/index.mjs";
13
17
  import { BUILT_IN_ENTRYPOINTS } from "../plugins/router-entrypoints.mjs";
14
- import { SnapshotOrchestratorService, layerSnapshotOrchestrator } from "./snapshot/service.mjs";
15
- import { resolveManifestExtras } from "../substrate/manifest.mjs";
18
+ import "./snapshot/index.mjs";
19
+ import { ManifestExtrasLookupError, resolveManifestExtras } from "../substrate/manifest.mjs";
16
20
  import { buildEnvelope, writeManifest } from "../substrate/runtime/manifest/manifest.mjs";
17
- import { Effect, FileSystem, Layer } from "effect";
21
+ import "../substrate/runtime/manifest/index.mjs";
22
+ import { Context, Effect, FileSystem, Layer, Ref } from "effect";
18
23
  import { isAbsolute, join, resolve } from "node:path";
19
24
  //#region src/orchestrators/runtime-composition.ts
25
+ var ManifestEndpointRegistryService = class extends Context.Service()("@devstack/orchestrators/ManifestEndpointRegistry") {};
26
+ const layerManifestEndpointRegistry = Layer.effect(ManifestEndpointRegistryService, Effect.gen(function* () {
27
+ const entriesRef = yield* Ref.make([]);
28
+ const seqRef = yield* Ref.make(0);
29
+ const register = (entry) => Effect.gen(function* () {
30
+ const seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);
31
+ yield* Ref.update(entriesRef, (entries) => [...entries, {
32
+ ...entry,
33
+ seq
34
+ }]);
35
+ yield* Effect.addFinalizer(() => Ref.update(entriesRef, (entries) => entries.filter((candidate) => candidate.seq !== seq)));
36
+ });
37
+ return ManifestEndpointRegistryService.of({
38
+ register,
39
+ entries: Ref.get(entriesRef).pipe(Effect.map((entries) => entries.map((entryWithSeq) => {
40
+ const { seq, ...entry } = entryWithSeq;
41
+ return entry;
42
+ })))
43
+ });
44
+ }));
20
45
  const productionRouterProfile = (options = {}) => makeDefaultRouterProfile(options);
21
46
  const productionCodegenOutputDir = (appRoot, outputDir) => {
22
47
  const target = outputDir ?? "src/generated";
23
48
  return isAbsolute(target) ? target : resolve(appRoot, target);
24
49
  };
50
+ /** Codegenable wrapping the resolved manifest-extras blob into a
51
+ * generated `extras.ts` for app-side consumption. Single-callsite
52
+ * helper — declared here to keep the orchestrator's view of the
53
+ * contribution self-contained. */
54
+ const makeExtrasCodegenable = (extras) => ({
55
+ kind: "codegenable",
56
+ emitterName: "app-extras",
57
+ outputPath: "extras.ts",
58
+ sensitive: true,
59
+ emit: (ctx) => Effect.sync(() => {
60
+ ctx.exportConst("extras", extras);
61
+ return ctx.done();
62
+ })
63
+ });
25
64
  const layerProductionOrchestrators = (router = {}) => {
26
65
  const profile = router.profile ?? productionRouterProfile();
27
- return Layer.mergeAll(layerSnapshotOrchestrator, layerRouterService.pipe(Layer.provideMerge(Layer.mergeAll(layerEntrypointRegistry(BUILT_IN_ENTRYPOINTS), layerTraefikContainerOpsDocker, layerDockerUpstreamResolver(profile), layerRouterConfigLiteral({
66
+ return Layer.mergeAll(layerSnapshotOrchestrator, layerManifestEndpointRegistry, layerRouterService.pipe(Layer.provideMerge(Layer.mergeAll(layerEntrypointRegistry(BUILT_IN_ENTRYPOINTS), layerTraefikContainerOpsDocker, layerDockerUpstreamResolver(profile), layerRouterConfigLiteral({
28
67
  disabled: router.disabled ?? false,
29
68
  profile,
30
69
  image: router.image ?? "traefik:v3.5",
@@ -32,40 +71,64 @@ const layerProductionOrchestrators = (router = {}) => {
32
71
  })))), layerCodegenOrchestrator, layerCodegenPaths.pipe(Layer.provideMerge(layerCodegenRoot({
33
72
  outputDir: productionCodegenOutputDir(router.codegen?.appRoot ?? process.cwd(), router.codegen?.outputDir),
34
73
  stackSubdir: router.codegen?.stackSubdir ?? null
35
- }))), layerDockerMoveSummaryRunner, layerMystenMoveCodegen);
74
+ }))), layerSuiMoveSummaryRunnerDocker, layerMystenMoveCodegen);
36
75
  };
37
76
  Effect.gen(function* () {
38
77
  yield* (yield* RouterService).boot().pipe(Effect.orDie);
39
78
  });
40
- const endpointEventFromRoutable = (pluginKey, endpoint, registeredAt = Date.now()) => ({
41
- tag: "endpoint.registered",
42
- endpoint: {
43
- endpointKey: endpointKey(`${pluginKey}:${endpoint.endpointName}`),
44
- name: endpoint.endpointName,
45
- url: endpoint.url,
46
- displayUrl: null,
47
- wireProtocol: endpoint.wireProtocol,
48
- registeredAt
49
- }
79
+ /** Project a `(pluginKey, EndpointUrl)` pair into the field-set both
80
+ * the engine event and the manifest entry stamp identically. Callers
81
+ * spread this and then add their output-specific fields (the engine
82
+ * event's branded `endpointKey` + `registeredAt`; the manifest
83
+ * entry's stringified `endpointKey` + `pluginKey`). */
84
+ const routableToEndpointFields = (pluginKey, endpoint) => ({
85
+ name: endpoint.endpointName,
86
+ url: endpoint.url,
87
+ displayUrl: null,
88
+ wireProtocol: endpoint.wireProtocol,
89
+ endpointKeyString: `${pluginKey}:${endpoint.endpointName}`
90
+ });
91
+ const endpointEventFromRoutable = (pluginKey, endpoint, registeredAt = Date.now()) => {
92
+ const { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);
93
+ return {
94
+ tag: "endpoint.registered",
95
+ endpoint: {
96
+ ...common,
97
+ endpointKey: endpointKey(endpointKeyString),
98
+ pluginKey,
99
+ registeredAt
100
+ }
101
+ };
102
+ };
103
+ const manifestEndpointEntryFromRoutable = (pluginKey, endpoint) => {
104
+ const { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);
105
+ return {
106
+ ...common,
107
+ endpointKey: endpointKeyString,
108
+ pluginKey: String(pluginKey)
109
+ };
110
+ };
111
+ const manifestEndpointEntryFromOperationalEndpoint = (endpoint) => ({
112
+ endpointKey: String(endpoint.endpointKey),
113
+ name: endpoint.name,
114
+ url: endpoint.url,
115
+ displayUrl: endpoint.displayUrl,
116
+ wireProtocol: endpoint.wireProtocol,
117
+ pluginKey: String(endpoint.pluginKey)
50
118
  });
51
119
  const orchestratorSink = (sink) => sink;
52
120
  const makeProjectionCapabilitySink = () => orchestratorSink({
53
121
  kind: "projection",
54
122
  accept: (decl, ctx) => Effect.gen(function* () {
55
- const event = decl.event.tag === "account.updated" ? {
56
- ...decl.event,
57
- account: {
58
- ...decl.event.account,
59
- rowKey: decl.event.account.rowKey ?? ctx.pluginKey
60
- }
61
- } : {
123
+ const payload = decl.event.payload;
124
+ const payloadWithRowKey = payload !== null && typeof payload === "object" && "rowKey" in payload && payload.rowKey === null ? {
125
+ ...payload,
126
+ rowKey: ctx.pluginKey
127
+ } : payload;
128
+ yield* ctx.publish({
62
129
  ...decl.event,
63
- package: {
64
- ...decl.event.package,
65
- rowKey: decl.event.package.rowKey ?? ctx.pluginKey
66
- }
67
- };
68
- yield* ctx.publish(event);
130
+ payload: payloadWithRowKey
131
+ });
69
132
  })
70
133
  });
71
134
  const makeStrategyContributorCapabilitySink = () => orchestratorSink({
@@ -90,20 +153,18 @@ const buildProductionOrchestratorSinks = (observers = {}) => Effect.gen(function
90
153
  const snapshot = yield* SnapshotOrchestratorService;
91
154
  const router = yield* RouterService;
92
155
  const codegen = yield* CodegenOrchestratorService;
156
+ const manifestEndpoints = yield* ManifestEndpointRegistryService;
93
157
  return [
94
158
  orchestratorSink({
95
159
  kind: "snapshotable",
96
160
  accept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl)
97
161
  }),
98
- orchestratorSink({
99
- kind: "liveness-classifier",
100
- accept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl)
101
- }),
102
162
  orchestratorSink({
103
163
  kind: "routable",
104
164
  accept: (decl, ctx) => router.boot().pipe(Effect.andThen(router.contributeRoute(decl)), Effect.flatMap((endpoint) => {
105
165
  const event = endpointEventFromRoutable(ctx.pluginKey, endpoint);
106
- return ctx.publish(event).pipe(Effect.andThen(observers.routable ? observers.routable(ctx.pluginKey, endpoint, event) : Effect.void));
166
+ const manifestEntry = manifestEndpointEntryFromRoutable(ctx.pluginKey, endpoint);
167
+ return manifestEndpoints.register(manifestEntry).pipe(Effect.andThen(ctx.publish(event)), Effect.andThen(observers.routable ? observers.routable(ctx.pluginKey, endpoint, event) : Effect.void));
107
168
  }))
108
169
  }),
109
170
  orchestratorSink({
@@ -119,13 +180,31 @@ const makeManifestExtrasContext = (ctx) => {
119
180
  for (const [key, node] of ctx.graph.nodes) resourceIdToKey.set(node.member.id, key);
120
181
  const lookup = (resourceId) => {
121
182
  const key = resourceIdToKey.get(resourceId);
122
- if (key === void 0) throw new Error(`manifest extras requested unknown resource '${resourceId}'`);
183
+ if (key === void 0) throw new ManifestExtrasLookupError({
184
+ kind: "unknown-resource",
185
+ resourceId
186
+ });
123
187
  const resolved = readResolvedSync(ctx.registry, key);
124
- if (resolved === void 0) throw new Error(`manifest extras requested unresolved resource '${resourceId}'`);
188
+ if (resolved === void 0) throw new ManifestExtrasLookupError({
189
+ kind: "unresolved-resource",
190
+ resourceId
191
+ });
125
192
  return resolved;
126
193
  };
127
194
  return { value: (resource) => lookup(resource.id) };
128
195
  };
196
+ const operationalManifestEndpointEntries = (ctx, routableEntries) => {
197
+ const routablePluginKeys = new Set(routableEntries.map((entry) => entry.pluginKey));
198
+ const registeredAt = Date.now();
199
+ const entries = [];
200
+ for (const [key] of ctx.graph.nodes) {
201
+ if (routablePluginKeys.has(String(key))) continue;
202
+ const resolved = readResolvedSync(ctx.registry, key);
203
+ if (resolved === void 0) continue;
204
+ for (const event of operationalEndpointEventsFromResolvedValue(key, resolved, registeredAt)) entries.push(manifestEndpointEntryFromOperationalEndpoint(event.endpoint));
205
+ }
206
+ return entries;
207
+ };
129
208
  const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* () {
130
209
  const codegen = yield* CodegenOrchestratorService;
131
210
  const paths = yield* CodegenPathsService;
@@ -134,8 +213,11 @@ const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* ()
134
213
  const fs = yield* FileSystem.FileSystem;
135
214
  const stackPaths = yield* StackPathsService;
136
215
  const postAcquireTasks = yield* PostAcquireTasksService;
216
+ const manifestEndpoints = yield* ManifestEndpointRegistryService;
137
217
  return (ctx) => Effect.gen(function* () {
138
218
  const extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));
219
+ const routableEndpoints = yield* manifestEndpoints.entries;
220
+ const endpoints = [...routableEndpoints, ...operationalManifestEndpointEntries(ctx, routableEndpoints)];
139
221
  yield* writeManifest(yield* buildEnvelope({
140
222
  identity: {
141
223
  app: ctx.identity.app,
@@ -143,7 +225,9 @@ const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* ()
143
225
  chain: ctx.identity.chain
144
226
  },
145
227
  contributions: [],
146
- extras
228
+ endpoints,
229
+ extras,
230
+ codegen: { generatedDir: paths.outputDir }
147
231
  }), join(stackPaths.stackRoot, "manifest.json")).pipe(Effect.provideService(FileSystem.FileSystem, fs));
148
232
  const result = yield* codegen.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] }).pipe(Effect.provideService(CodegenPathsService, paths), Effect.provideService(MoveSummaryRunnerService, summaryRunner), Effect.provideService(MoveCodegenService, moveCodegen), Effect.provideService(FileSystem.FileSystem, fs));
149
233
  yield* postAcquireTasks.runAll;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-composition.mjs","names":[],"sources":["../../src/orchestrators/runtime-composition.ts"],"sourcesContent":["// Shared production orchestrator composition.\n//\n// CLI, programmatic runStack, and the e2e boot harness all use this\n// module for capability delivery. Tests may swap service\n// implementations (Traefik ops, upstream resolver, codegen paths), but\n// the sink registrations and router boot step stay shared.\n\nimport { Effect, FileSystem, Layer, Scope } from 'effect';\nimport { isAbsolute, join, resolve } from 'node:path';\n\nimport {\n\tlayerDockerMoveSummaryRunner,\n\tlayerMystenMoveCodegen,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n} from './codegen/bindings.ts';\nimport { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from './codegen/paths.ts';\nimport {\n\tCodegenOrchestratorService,\n\tlayerCodegenOrchestrator,\n\ttype Codegenable,\n} from './codegen/service.ts';\nimport { makeExtrasCodegenable } from './codegen/extras.ts';\nimport {\n\tDEFAULT_TRAEFIK_IMAGE,\n\tlayerDockerUpstreamResolver,\n\tlayerEntrypointRegistry,\n\tlayerRouterConfigLiteral,\n\tlayerRouterService,\n\tlayerTraefikContainerOpsDocker,\n\tRouterService,\n\ttype EndpointUrl,\n\ttype ResolvedRoute,\n} from './router/index.ts';\nimport { BUILT_IN_ENTRYPOINTS } from '../plugins/router-entrypoints.ts';\nimport {\n\tmakeDefaultRouterProfile,\n\ttype DefaultRouterProfileOptions,\n\ttype RouterProfile,\n} from './router/profile.ts';\nimport { layerSnapshotOrchestrator, SnapshotOrchestratorService } from './snapshot/index.ts';\nimport type { LivenessClassifierDecl } from '../contracts/liveness-classifier.ts';\nimport type { ProjectionDecl } from '../contracts/projection.ts';\nimport type { RoutableDecl } from '../contracts/routable.ts';\nimport type { SnapshotableDecl } from '../contracts/snapshotable.ts';\nimport type { StrategyContributorDecl } from '../contracts/strategy-contributor.ts';\nimport { endpointKey, type PluginKey } from '../substrate/brand.ts';\nimport type { EngineEvent } from '../substrate/events.ts';\nimport {\n\tbuildEnvelope,\n\tCURRENT_MANIFEST_VERSION,\n\twriteManifest,\n} from '../substrate/runtime/manifest/index.ts';\nimport { readResolvedSync } from '../substrate/runtime/lifecycle/index.ts';\nimport { resolveManifestExtras, type ManifestExtrasInput } from '../substrate/manifest.ts';\nimport { StackPathsService } from '../substrate/runtime/paths.ts';\nimport { PostAcquireTasksService } from '../substrate/runtime/post-acquire-tasks.ts';\nimport type {\n\tCapabilitySink,\n\tContributionKind,\n\tHarvestContext,\n\tOrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\nimport type {\n\tSupervisorPostAcquireContext,\n\tSupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor.ts';\n\nexport interface ProductionCodegenOptions {\n\treadonly appRoot?: string;\n\treadonly outputDir?: string;\n\treadonly stackSubdir?: string | null;\n}\n\nexport interface ProductionRouterOptions {\n\treadonly codegen?: ProductionCodegenOptions;\n\treadonly disabled?: boolean;\n\treadonly image?: string;\n\treadonly profile?: RouterProfile;\n}\n\nexport interface ProductionPostAcquireOptions {\n\treadonly extras?: ManifestExtrasInput;\n}\n\nexport interface CapabilityDeliveryObservers {\n\treadonly routable?: (\n\t\tpluginKey: PluginKey,\n\t\tendpoint: EndpointUrl,\n\t\tevent: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly codegenable?: (\n\t\tpluginKey: PluginKey,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport const productionRouterProfile = (options: DefaultRouterProfileOptions = {}): RouterProfile =>\n\tmakeDefaultRouterProfile(options);\n\nconst productionCodegenOutputDir = (appRoot: string, outputDir: string | undefined): string => {\n\tconst target = outputDir ?? 'src/generated';\n\treturn isAbsolute(target) ? target : resolve(appRoot, target);\n};\n\nexport const layerProductionOrchestrators = (router: ProductionRouterOptions = {}) => {\n\tconst profile = router.profile ?? productionRouterProfile();\n\treturn Layer.mergeAll(\n\t\tlayerSnapshotOrchestrator,\n\t\tlayerRouterService.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tLayer.mergeAll(\n\t\t\t\t\tlayerEntrypointRegistry(BUILT_IN_ENTRYPOINTS),\n\t\t\t\t\tlayerTraefikContainerOpsDocker,\n\t\t\t\t\tlayerDockerUpstreamResolver(profile),\n\t\t\t\t\tlayerRouterConfigLiteral({\n\t\t\t\t\t\tdisabled: router.disabled ?? false,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\timage: router.image ?? DEFAULT_TRAEFIK_IMAGE,\n\t\t\t\t\t\trouteReadinessProbe: {\n\t\t\t\t\t\t\tenabled: router.disabled !== true,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\tlayerCodegenOrchestrator,\n\t\tlayerCodegenPaths.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tlayerCodegenRoot({\n\t\t\t\t\toutputDir: productionCodegenOutputDir(\n\t\t\t\t\t\trouter.codegen?.appRoot ?? process.cwd(),\n\t\t\t\t\t\trouter.codegen?.outputDir,\n\t\t\t\t\t),\n\t\t\t\t\tstackSubdir: router.codegen?.stackSubdir ?? null,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tlayerDockerMoveSummaryRunner,\n\t\tlayerMystenMoveCodegen,\n\t);\n};\n\nexport const bootRouterOrchestrator: Effect.Effect<void, never, RouterService> = Effect.gen(\n\tfunction* () {\n\t\tconst router = yield* RouterService;\n\t\tyield* router.boot().pipe(Effect.orDie);\n\t},\n);\n\nexport const endpointEventFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n\tregisteredAt = Date.now(),\n): Extract<EngineEvent, { readonly tag: 'endpoint.registered' }> => ({\n\ttag: 'endpoint.registered',\n\tendpoint: {\n\t\tendpointKey: endpointKey(`${pluginKey}:${endpoint.endpointName}`),\n\t\tname: endpoint.endpointName,\n\t\turl: endpoint.url,\n\t\tdisplayUrl: null,\n\t\twireProtocol: endpoint.wireProtocol,\n\t\tregisteredAt,\n\t},\n});\n\nconst orchestratorSink = <K extends ContributionKind, TDecl>(\n\tsink: CapabilitySink<K, TDecl>,\n): OrchestratorSinks[number] => sink as OrchestratorSinks[number];\n\nexport const makeProjectionCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'projection', ProjectionDecl>({\n\t\tkind: 'projection',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst event =\n\t\t\t\t\tdecl.event.tag === 'account.updated'\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\taccount: {\n\t\t\t\t\t\t\t\t\t...decl.event.account,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.account.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\tpackage: {\n\t\t\t\t\t\t\t\t\t...decl.event.package,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.package.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\tyield* ctx.publish(event);\n\t\t\t}),\n\t});\n\nexport const makeStrategyContributorCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'strategy-contributor', StrategyContributorDecl<string, unknown>>({\n\t\tkind: 'strategy-contributor',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* ctx.registerStrategy(decl);\n\t\t\t\tconst at = Date.now();\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\ttag: 'strategy.registered',\n\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\tautoMounted: decl.autoMounted,\n\t\t\t\t\tat,\n\t\t\t\t});\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tctx.publish({\n\t\t\t\t\t\ttag: 'strategy.unregistered',\n\t\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}),\n\t});\n\nexport const buildProductionOrchestratorSinks = (\n\tobservers: CapabilityDeliveryObservers = {},\n): Effect.Effect<\n\tOrchestratorSinks,\n\tnever,\n\tSnapshotOrchestratorService | RouterService | CodegenOrchestratorService\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\tconst router = yield* RouterService;\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\treturn [\n\t\t\torchestratorSink<'snapshotable', SnapshotableDecl>({\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'liveness-classifier', LivenessClassifierDecl>({\n\t\t\t\tkind: 'liveness-classifier',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'routable', RoutableDecl>({\n\t\t\t\tkind: 'routable',\n\t\t\t\taccept: (decl, ctx: HarvestContext) =>\n\t\t\t\t\trouter.boot().pipe(\n\t\t\t\t\t\tEffect.andThen(router.contributeRoute(decl)),\n\t\t\t\t\t\tEffect.flatMap((endpoint) => {\n\t\t\t\t\t\t\tconst event = endpointEventFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\treturn ctx\n\t\t\t\t\t\t\t\t.publish(event)\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\t\t\tobservers.routable\n\t\t\t\t\t\t\t\t\t\t\t? observers.routable(ctx.pluginKey, endpoint, event)\n\t\t\t\t\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t}),\n\t\t\torchestratorSink<'codegenable', Codegenable>({\n\t\t\t\tkind: 'codegenable',\n\t\t\t\taccept: (decl, ctx) =>\n\t\t\t\t\tcodegen\n\t\t\t\t\t\t.registerContribution(ctx.pluginKey, decl)\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\tEffect.flatMap(() =>\n\t\t\t\t\t\t\t\tobservers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t}),\n\t\t\tmakeProjectionCapabilitySink(),\n\t\t\tmakeStrategyContributorCapabilitySink(),\n\t\t];\n\t});\n\nconst makeManifestExtrasContext = (ctx: SupervisorPostAcquireContext) => {\n\tconst resourceIdToKey = new Map<string, PluginKey>();\n\tfor (const [key, node] of ctx.graph.nodes) {\n\t\tresourceIdToKey.set(node.member.id, key);\n\t}\n\tconst lookup = (resourceId: string): unknown => {\n\t\tconst key = resourceIdToKey.get(resourceId);\n\t\tif (key === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unknown resource '${resourceId}'`);\n\t\t}\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unresolved resource '${resourceId}'`);\n\t\t}\n\t\treturn resolved;\n\t};\n\treturn {\n\t\tvalue: (resource: { readonly id: string }) => lookup(resource.id),\n\t};\n};\n\nexport const buildProductionPostAcquireHook = (\n\toptions: ProductionPostAcquireOptions = {},\n): Effect.Effect<\n\tSupervisorPostAcquireHook,\n\tnever,\n\t| CodegenOrchestratorService\n\t| CodegenPathsService\n\t| MoveSummaryRunnerService\n\t| MoveCodegenService\n\t| FileSystem.FileSystem\n\t| StackPathsService\n\t| PostAcquireTasksService\n> =>\n\tEffect.gen(function* () {\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst paths = yield* CodegenPathsService;\n\t\tconst summaryRunner = yield* MoveSummaryRunnerService;\n\t\tconst moveCodegen = yield* MoveCodegenService;\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\treturn (ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));\n\t\t\t\tconst envelope = yield* buildEnvelope({\n\t\t\t\t\tidentity: {\n\t\t\t\t\t\tapp: ctx.identity.app,\n\t\t\t\t\t\tstack: ctx.identity.stack,\n\t\t\t\t\t\tchain: ctx.identity.chain,\n\t\t\t\t\t},\n\t\t\t\t\tcontributions: [],\n\t\t\t\t\textras,\n\t\t\t\t});\n\t\t\t\tconst manifestPath = join(stackPaths.stackRoot, 'manifest.json');\n\t\t\t\tyield* writeManifest(envelope, manifestPath).pipe(\n\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t);\n\t\t\t\tconst result = yield* codegen\n\t\t\t\t\t.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] })\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.provideService(CodegenPathsService, paths),\n\t\t\t\t\t\tEffect.provideService(MoveSummaryRunnerService, summaryRunner),\n\t\t\t\t\t\tEffect.provideService(MoveCodegenService, moveCodegen),\n\t\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t\t);\n\t\t\t\tyield* postAcquireTasks.runAll;\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'manifest.flushed' as const,\n\t\t\t\t\t\tmanifestVersion: CURRENT_MANIFEST_VERSION,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'codegen.emitted' as const,\n\t\t\t\t\t\tfiles: [\n\t\t\t\t\t\t\t...result.filesWritten,\n\t\t\t\t\t\t\t...result.filesChmod,\n\t\t\t\t\t\t\t...(result.bindings?.filesWritten ?? []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t});\n\t});\n\nexport type { EndpointUrl, ResolvedRoute };\n"],"mappings":"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"}
1
+ {"version":3,"file":"runtime-composition.mjs","names":[],"sources":["../../src/orchestrators/runtime-composition.ts"],"sourcesContent":["// Shared production orchestrator composition.\n//\n// CLI, programmatic runStack, and the e2e boot harness all use this\n// module for capability delivery. Tests may swap service\n// implementations (Traefik ops, upstream resolver, codegen paths), but\n// the sink registrations and router boot step stay shared.\n\nimport { Context, Effect, FileSystem, Layer, Ref, Scope } from 'effect';\nimport { isAbsolute, join, resolve } from 'node:path';\n\nimport {\n\tlayerMystenMoveCodegen,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n} from './codegen/bindings.ts';\nimport { layerSuiMoveSummaryRunnerDocker } from '../plugins/sui/move-summary-runner.ts';\nimport { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from './codegen/paths.ts';\nimport {\n\tCodegenOrchestratorService,\n\tlayerCodegenOrchestrator,\n\ttype Codegenable,\n} from './codegen/service.ts';\nimport type { CodegenableDecl } from '../contracts/codegenable.ts';\nimport {\n\tDEFAULT_TRAEFIK_IMAGE,\n\tlayerDockerUpstreamResolver,\n\tlayerEntrypointRegistry,\n\tlayerRouterConfigLiteral,\n\tlayerRouterService,\n\tlayerTraefikContainerOpsDocker,\n\tRouterService,\n\ttype EndpointUrl,\n\ttype ResolvedRoute,\n} from './router/index.ts';\nimport { BUILT_IN_ENTRYPOINTS } from '../plugins/router-entrypoints.ts';\nimport {\n\tmakeDefaultRouterProfile,\n\ttype DefaultRouterProfileOptions,\n\ttype RouterProfile,\n} from './router/profile.ts';\nimport { layerSnapshotOrchestrator, SnapshotOrchestratorService } from './snapshot/index.ts';\nimport type { ProjectionDecl } from '../contracts/projection.ts';\nimport type { RoutableDecl } from '../contracts/routable.ts';\nimport type { SnapshotableDecl } from '../contracts/snapshotable.ts';\nimport type { StrategyContributorDecl } from '../contracts/strategy-contributor.ts';\nimport { endpointKey, type PluginKey } from '../substrate/brand.ts';\nimport type { EngineEvent } from '../substrate/events.ts';\nimport {\n\tbuildEnvelope,\n\tCURRENT_MANIFEST_VERSION,\n\twriteManifest,\n} from '../substrate/runtime/manifest/index.ts';\nimport { readResolvedSync } from '../substrate/runtime/lifecycle/index.ts';\nimport { operationalEndpointEventsFromResolvedValue } from '../substrate/runtime/projection/operational-endpoints.ts';\nimport {\n\tManifestExtrasLookupError,\n\tresolveManifestExtras,\n\ttype EndpointEntry,\n\ttype ManifestExtras,\n\ttype ManifestExtrasInput,\n} from '../substrate/manifest.ts';\nimport { StackPathsService } from '../substrate/runtime/paths.ts';\nimport { PostAcquireTasksService } from '../substrate/runtime/post-acquire-tasks.ts';\nimport type {\n\tCapabilitySink,\n\tContributionKind,\n\tHarvestContext,\n\tOrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\nimport type {\n\tSupervisorPostAcquireContext,\n\tSupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor/index.ts';\n\nexport interface ProductionCodegenOptions {\n\treadonly appRoot?: string;\n\treadonly outputDir?: string;\n\treadonly stackSubdir?: string | null;\n}\n\nexport interface ProductionRouterOptions {\n\treadonly codegen?: ProductionCodegenOptions;\n\treadonly disabled?: boolean;\n\treadonly image?: string;\n\treadonly profile?: RouterProfile;\n}\n\nexport interface ProductionPostAcquireOptions {\n\treadonly extras?: ManifestExtrasInput;\n}\n\nexport interface ManifestEndpointRegistry {\n\treadonly register: (entry: EndpointEntry) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly entries: Effect.Effect<ReadonlyArray<EndpointEntry>>;\n}\n\nexport class ManifestEndpointRegistryService extends Context.Service<\n\tManifestEndpointRegistryService,\n\tManifestEndpointRegistry\n>()('@devstack/orchestrators/ManifestEndpointRegistry') {}\n\nexport const layerManifestEndpointRegistry: Layer.Layer<ManifestEndpointRegistryService> =\n\tLayer.effect(\n\t\tManifestEndpointRegistryService,\n\t\tEffect.gen(function* () {\n\t\t\tconst entriesRef = yield* Ref.make<ReadonlyArray<EndpointEntry & { readonly seq: number }>>(\n\t\t\t\t[],\n\t\t\t);\n\t\t\tconst seqRef = yield* Ref.make(0);\n\n\t\t\tconst register = (entry: EndpointEntry): Effect.Effect<void, never, Scope.Scope> =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);\n\t\t\t\t\tyield* Ref.update(entriesRef, (entries) => [...entries, { ...entry, seq }]);\n\t\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\t\tRef.update(entriesRef, (entries) =>\n\t\t\t\t\t\t\tentries.filter((candidate) => candidate.seq !== seq),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\treturn ManifestEndpointRegistryService.of({\n\t\t\t\tregister,\n\t\t\t\tentries: Ref.get(entriesRef).pipe(\n\t\t\t\t\tEffect.map((entries) =>\n\t\t\t\t\t\tentries.map((entryWithSeq) => {\n\t\t\t\t\t\t\tconst { seq, ...entry } = entryWithSeq;\n\t\t\t\t\t\t\tvoid seq;\n\t\t\t\t\t\t\treturn entry;\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t});\n\t\t}),\n\t);\n\nexport interface CapabilityDeliveryObservers {\n\treadonly routable?: (\n\t\tpluginKey: PluginKey,\n\t\tendpoint: EndpointUrl,\n\t\tevent: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly codegenable?: (\n\t\tpluginKey: PluginKey,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport const productionRouterProfile = (options: DefaultRouterProfileOptions = {}): RouterProfile =>\n\tmakeDefaultRouterProfile(options);\n\nconst productionCodegenOutputDir = (appRoot: string, outputDir: string | undefined): string => {\n\tconst target = outputDir ?? 'src/generated';\n\treturn isAbsolute(target) ? target : resolve(appRoot, target);\n};\n\n/** Codegenable wrapping the resolved manifest-extras blob into a\n * generated `extras.ts` for app-side consumption. Single-callsite\n * helper — declared here to keep the orchestrator's view of the\n * contribution self-contained. */\nconst makeExtrasCodegenable = (extras: ManifestExtras): CodegenableDecl<'app-extras'> => ({\n\tkind: 'codegenable',\n\temitterName: 'app-extras',\n\toutputPath: 'extras.ts',\n\tsensitive: true,\n\temit: (ctx) =>\n\t\tEffect.sync(() => {\n\t\t\tctx.exportConst('extras', extras);\n\t\t\treturn ctx.done();\n\t\t}),\n});\n\nexport const layerProductionOrchestrators = (router: ProductionRouterOptions = {}) => {\n\tconst profile = router.profile ?? productionRouterProfile();\n\treturn Layer.mergeAll(\n\t\tlayerSnapshotOrchestrator,\n\t\tlayerManifestEndpointRegistry,\n\t\tlayerRouterService.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tLayer.mergeAll(\n\t\t\t\t\tlayerEntrypointRegistry(BUILT_IN_ENTRYPOINTS),\n\t\t\t\t\tlayerTraefikContainerOpsDocker,\n\t\t\t\t\tlayerDockerUpstreamResolver(profile),\n\t\t\t\t\tlayerRouterConfigLiteral({\n\t\t\t\t\t\tdisabled: router.disabled ?? false,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\timage: router.image ?? DEFAULT_TRAEFIK_IMAGE,\n\t\t\t\t\t\trouteReadinessProbe: {\n\t\t\t\t\t\t\tenabled: router.disabled !== true,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\tlayerCodegenOrchestrator,\n\t\tlayerCodegenPaths.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tlayerCodegenRoot({\n\t\t\t\t\toutputDir: productionCodegenOutputDir(\n\t\t\t\t\t\trouter.codegen?.appRoot ?? process.cwd(),\n\t\t\t\t\t\trouter.codegen?.outputDir,\n\t\t\t\t\t),\n\t\t\t\t\tstackSubdir: router.codegen?.stackSubdir ?? null,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tlayerSuiMoveSummaryRunnerDocker,\n\t\tlayerMystenMoveCodegen,\n\t);\n};\n\nexport const bootRouterOrchestrator: Effect.Effect<void, never, RouterService> = Effect.gen(\n\tfunction* () {\n\t\tconst router = yield* RouterService;\n\t\tyield* router.boot().pipe(Effect.orDie);\n\t},\n);\n\n/** Project a `(pluginKey, EndpointUrl)` pair into the field-set both\n * the engine event and the manifest entry stamp identically. Callers\n * spread this and then add their output-specific fields (the engine\n * event's branded `endpointKey` + `registeredAt`; the manifest\n * entry's stringified `endpointKey` + `pluginKey`). */\nconst routableToEndpointFields = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n): {\n\treadonly name: string;\n\treadonly url: string;\n\treadonly displayUrl: null;\n\treadonly wireProtocol: EndpointUrl['wireProtocol'];\n\treadonly endpointKeyString: string;\n} => ({\n\tname: endpoint.endpointName,\n\turl: endpoint.url,\n\tdisplayUrl: null,\n\twireProtocol: endpoint.wireProtocol,\n\tendpointKeyString: `${pluginKey}:${endpoint.endpointName}`,\n});\n\nexport const endpointEventFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n\tregisteredAt = Date.now(),\n): Extract<EngineEvent, { readonly tag: 'endpoint.registered' }> => {\n\tconst { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);\n\treturn {\n\t\ttag: 'endpoint.registered',\n\t\tendpoint: {\n\t\t\t...common,\n\t\t\tendpointKey: endpointKey(endpointKeyString),\n\t\t\tpluginKey,\n\t\t\tregisteredAt,\n\t\t},\n\t};\n};\n\nexport const manifestEndpointEntryFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n): EndpointEntry => {\n\tconst { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);\n\treturn {\n\t\t...common,\n\t\tendpointKey: endpointKeyString,\n\t\tpluginKey: String(pluginKey),\n\t};\n};\n\nconst manifestEndpointEntryFromOperationalEndpoint = (\n\tendpoint: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>['endpoint'],\n): EndpointEntry => ({\n\tendpointKey: String(endpoint.endpointKey),\n\tname: endpoint.name,\n\turl: endpoint.url,\n\tdisplayUrl: endpoint.displayUrl,\n\twireProtocol: endpoint.wireProtocol,\n\tpluginKey: String(endpoint.pluginKey),\n});\n\nconst orchestratorSink = <K extends ContributionKind, TDecl>(\n\tsink: CapabilitySink<K, TDecl>,\n): OrchestratorSinks[number] => sink as OrchestratorSinks[number];\n\nexport const makeProjectionCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'projection', ProjectionDecl>({\n\t\tkind: 'projection',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\t// Stamp `rowKey` (when absent) so projection consumers can\n\t\t\t\t// attribute the row to the contributing plugin. The payload\n\t\t\t\t// stays opaque from the substrate's POV; we project just\n\t\t\t\t// enough to set the row-key field if the payload exposes it.\n\t\t\t\tconst payload = decl.event.payload;\n\t\t\t\tconst payloadWithRowKey =\n\t\t\t\t\tpayload !== null &&\n\t\t\t\t\ttypeof payload === 'object' &&\n\t\t\t\t\t'rowKey' in payload &&\n\t\t\t\t\t(payload as { rowKey: unknown }).rowKey === null\n\t\t\t\t\t\t? { ...payload, rowKey: ctx.pluginKey }\n\t\t\t\t\t\t: payload;\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\t...decl.event,\n\t\t\t\t\tpayload: payloadWithRowKey,\n\t\t\t\t});\n\t\t\t}),\n\t});\n\nexport const makeStrategyContributorCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'strategy-contributor', StrategyContributorDecl<string, unknown>>({\n\t\tkind: 'strategy-contributor',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* ctx.registerStrategy(decl);\n\t\t\t\tconst at = Date.now();\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\ttag: 'strategy.registered',\n\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\tautoMounted: decl.autoMounted,\n\t\t\t\t\tat,\n\t\t\t\t});\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tctx.publish({\n\t\t\t\t\t\ttag: 'strategy.unregistered',\n\t\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}),\n\t});\n\nexport const buildProductionOrchestratorSinks = (\n\tobservers: CapabilityDeliveryObservers = {},\n): Effect.Effect<\n\tOrchestratorSinks,\n\tnever,\n\t| SnapshotOrchestratorService\n\t| RouterService\n\t| CodegenOrchestratorService\n\t| ManifestEndpointRegistryService\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\tconst router = yield* RouterService;\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst manifestEndpoints = yield* ManifestEndpointRegistryService;\n\t\treturn [\n\t\t\torchestratorSink<'snapshotable', SnapshotableDecl>({\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'routable', RoutableDecl>({\n\t\t\t\tkind: 'routable',\n\t\t\t\taccept: (decl, ctx: HarvestContext) =>\n\t\t\t\t\trouter.boot().pipe(\n\t\t\t\t\t\tEffect.andThen(router.contributeRoute(decl)),\n\t\t\t\t\t\tEffect.flatMap((endpoint) => {\n\t\t\t\t\t\t\tconst event = endpointEventFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\tconst manifestEntry = manifestEndpointEntryFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\treturn manifestEndpoints\n\t\t\t\t\t\t\t\t.register(manifestEntry)\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\tEffect.andThen(ctx.publish(event)),\n\t\t\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\t\t\tobservers.routable\n\t\t\t\t\t\t\t\t\t\t\t? observers.routable(ctx.pluginKey, endpoint, event)\n\t\t\t\t\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t}),\n\t\t\torchestratorSink<'codegenable', Codegenable>({\n\t\t\t\tkind: 'codegenable',\n\t\t\t\taccept: (decl, ctx) =>\n\t\t\t\t\tcodegen\n\t\t\t\t\t\t.registerContribution(ctx.pluginKey, decl)\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\tEffect.flatMap(() =>\n\t\t\t\t\t\t\t\tobservers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t}),\n\t\t\tmakeProjectionCapabilitySink(),\n\t\t\tmakeStrategyContributorCapabilitySink(),\n\t\t];\n\t});\n\nconst makeManifestExtrasContext = (ctx: SupervisorPostAcquireContext) => {\n\tconst resourceIdToKey = new Map<string, PluginKey>();\n\tfor (const [key, node] of ctx.graph.nodes) {\n\t\tresourceIdToKey.set(node.member.id, key);\n\t}\n\t// `lookup` throws `ManifestExtrasLookupError` synchronously from\n\t// inside the user-supplied `extras` factory.\n\t// `resolveManifestExtras` invokes that factory under `Effect.try`\n\t// with a typed `catch` mapper, so the throw promotes to the typed\n\t// failure channel — callers `catchTag('ManifestExtrasLookupError',\n\t// ...)` rather than reading the die-cause. Non-tagged throws stay\n\t// defects, preserving the previous semantics for genuine\n\t// programmer errors inside the factory body.\n\tconst lookup = (resourceId: string): unknown => {\n\t\tconst key = resourceIdToKey.get(resourceId);\n\t\tif (key === undefined) {\n\t\t\tthrow new ManifestExtrasLookupError({\n\t\t\t\tkind: 'unknown-resource',\n\t\t\t\tresourceId,\n\t\t\t});\n\t\t}\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) {\n\t\t\tthrow new ManifestExtrasLookupError({\n\t\t\t\tkind: 'unresolved-resource',\n\t\t\t\tresourceId,\n\t\t\t});\n\t\t}\n\t\treturn resolved;\n\t};\n\treturn {\n\t\tvalue: (resource: { readonly id: string }) => lookup(resource.id),\n\t};\n};\n\nconst operationalManifestEndpointEntries = (\n\tctx: SupervisorPostAcquireContext,\n\troutableEntries: ReadonlyArray<EndpointEntry>,\n): ReadonlyArray<EndpointEntry> => {\n\tconst routablePluginKeys = new Set(routableEntries.map((entry) => entry.pluginKey));\n\tconst registeredAt = Date.now();\n\tconst entries: EndpointEntry[] = [];\n\tfor (const [key] of ctx.graph.nodes) {\n\t\tif (routablePluginKeys.has(String(key))) continue;\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) continue;\n\t\tfor (const event of operationalEndpointEventsFromResolvedValue(key, resolved, registeredAt)) {\n\t\t\tentries.push(manifestEndpointEntryFromOperationalEndpoint(event.endpoint));\n\t\t}\n\t}\n\treturn entries;\n};\n\nexport const buildProductionPostAcquireHook = (\n\toptions: ProductionPostAcquireOptions = {},\n): Effect.Effect<\n\tSupervisorPostAcquireHook,\n\tnever,\n\t| CodegenOrchestratorService\n\t| CodegenPathsService\n\t| MoveSummaryRunnerService\n\t| MoveCodegenService\n\t| FileSystem.FileSystem\n\t| StackPathsService\n\t| PostAcquireTasksService\n\t| ManifestEndpointRegistryService\n> =>\n\tEffect.gen(function* () {\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst paths = yield* CodegenPathsService;\n\t\tconst summaryRunner = yield* MoveSummaryRunnerService;\n\t\tconst moveCodegen = yield* MoveCodegenService;\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\tconst manifestEndpoints = yield* ManifestEndpointRegistryService;\n\t\treturn (ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));\n\t\t\t\tconst routableEndpoints = yield* manifestEndpoints.entries;\n\t\t\t\tconst endpoints = [\n\t\t\t\t\t...routableEndpoints,\n\t\t\t\t\t...operationalManifestEndpointEntries(ctx, routableEndpoints),\n\t\t\t\t];\n\t\t\t\tconst envelope = yield* buildEnvelope({\n\t\t\t\t\tidentity: {\n\t\t\t\t\t\tapp: ctx.identity.app,\n\t\t\t\t\t\tstack: ctx.identity.stack,\n\t\t\t\t\t\tchain: ctx.identity.chain,\n\t\t\t\t\t},\n\t\t\t\t\tcontributions: [],\n\t\t\t\t\tendpoints,\n\t\t\t\t\textras,\n\t\t\t\t\t// Record the EXACT dir codegen emits into for this stack so\n\t\t\t\t\t// the read-side `@generated` alias (the Vite plugin) points\n\t\t\t\t\t// where the files actually are — one decision, one source of\n\t\t\t\t\t// truth (notes/per-stack-codegen-design.md §\"Resolved: read\n\t\t\t\t\t// and write share one gate\"). `paths.outputDir` is already\n\t\t\t\t\t// the resolved, stack-subdir-applied absolute path the emit\n\t\t\t\t\t// pipeline writes to.\n\t\t\t\t\tcodegen: { generatedDir: paths.outputDir },\n\t\t\t\t});\n\t\t\t\tconst manifestPath = join(stackPaths.stackRoot, 'manifest.json');\n\t\t\t\tyield* writeManifest(envelope, manifestPath).pipe(\n\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t);\n\t\t\t\tconst result = yield* codegen\n\t\t\t\t\t.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] })\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.provideService(CodegenPathsService, paths),\n\t\t\t\t\t\tEffect.provideService(MoveSummaryRunnerService, summaryRunner),\n\t\t\t\t\t\tEffect.provideService(MoveCodegenService, moveCodegen),\n\t\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t\t);\n\t\t\t\tyield* postAcquireTasks.runAll;\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'manifest.flushed' as const,\n\t\t\t\t\t\tmanifestVersion: CURRENT_MANIFEST_VERSION,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'codegen.emitted' as const,\n\t\t\t\t\t\tfiles: [\n\t\t\t\t\t\t\t...result.filesWritten,\n\t\t\t\t\t\t\t...result.filesChmod,\n\t\t\t\t\t\t\t...(result.bindings?.filesWritten ?? []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t});\n\t});\n\nexport type { EndpointUrl, ResolvedRoute };\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import { Effect, FileSystem } from "effect";
@@ -0,0 +1,25 @@
1
+ import { SnapshotOrchestratorService } from "./service.mjs";
2
+ import { Effect } from "effect";
3
+ //#region src/orchestrators/snapshot/capture-command.ts
4
+ /** Capture a snapshot via the registered `SnapshotOrchestratorService`.
5
+ * Returns the orchestrator's typed `SnapshotMetadata` on success;
6
+ * fails with the orchestrator's tagged `SnapshotOrchestratorError`
7
+ * union (callers `catchTags` on the precise tags they care about).
8
+ *
9
+ * The required context — `SnapshotOrchestratorService` and the
10
+ * `FileSystem` service the orchestrator's `capture` call consumes —
11
+ * flows in through the ambient Effect Context (NOT closure args);
12
+ * identity and stack-paths come transitively from the orchestrator
13
+ * layer's own requirements.
14
+ */
15
+ const captureSnapshot = (args) => Effect.gen(function* () {
16
+ return yield* (yield* SnapshotOrchestratorService).capture({
17
+ id: args.snapshotId,
18
+ label: args.name,
19
+ onProgress: args.onProgress
20
+ });
21
+ });
22
+ //#endregion
23
+ export { captureSnapshot };
24
+
25
+ //# sourceMappingURL=capture-command.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-command.mjs","names":[],"sources":["../../../src/orchestrators/snapshot/capture-command.ts"],"sourcesContent":["// Shared `captureSnapshot` command primitive.\n//\n// This is the hoisted core of `EngineCommand` `snapshot.capture` —\n// the single Effect both publishers reach for:\n//\n// - The supervisor's command handler in `cli/wirings/up.ts`\n// consumes a queued `snapshot.capture` EngineCommand and forwards\n// its `{ snapshotId, name }` payload here (with `onProgress`\n// wired to `handlerCtx.publish` so progress lands on the engine\n// event stream).\n//\n// - The CLI's direct/offline `snapshot save` path in\n// `cli/wirings/snapshot.ts` calls this from inside its one-shot\n// `superviseStackEffect` scope (no supervisor alive).\n//\n// - A future web-dashboard command receiver lands here too — it\n// only needs the `SnapshotOrchestratorService` + `FileSystem` in\n// its layer stack, with no CLI wiring imported.\n//\n// The primitive's contract is intentionally narrow: it owns the\n// EngineCommand-payload → orchestrator-call shape and nothing else.\n// CLI-specific concerns (logger config, exit codes, ack/event\n// shaping, error narration) stay at the call sites — this file\n// MUST NOT bake them in.\n\nimport { Effect, FileSystem } from 'effect';\n\nimport type { SnapshotProgressReporter } from './capture.ts';\nimport type { SnapshotMetadata } from './descriptor.ts';\nimport {\n\tSnapshotOrchestratorService,\n\ttype SnapshotOrchestratorError,\n} from './service.ts';\n\n/** Inputs mirror the `snapshot.capture` EngineCommand payload\n * (`{ snapshotId?, name? }`) plus the optional progress reporter\n * the supervisor wires into its event-publish bridge. The offline\n * CLI path passes the same payload (from CLI flags) and omits\n * `onProgress` (no engine stream to publish to). */\nexport interface CaptureSnapshotArgs {\n\treadonly snapshotId?: string;\n\treadonly name?: string;\n\treadonly onProgress?: SnapshotProgressReporter;\n}\n\n/** Capture a snapshot via the registered `SnapshotOrchestratorService`.\n * Returns the orchestrator's typed `SnapshotMetadata` on success;\n * fails with the orchestrator's tagged `SnapshotOrchestratorError`\n * union (callers `catchTags` on the precise tags they care about).\n *\n * The required context — `SnapshotOrchestratorService` and the\n * `FileSystem` service the orchestrator's `capture` call consumes —\n * flows in through the ambient Effect Context (NOT closure args);\n * identity and stack-paths come transitively from the orchestrator\n * layer's own requirements.\n */\nexport const captureSnapshot = (\n\targs: CaptureSnapshotArgs,\n): Effect.Effect<\n\tSnapshotMetadata,\n\tSnapshotOrchestratorError,\n\tSnapshotOrchestratorService | FileSystem.FileSystem\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\treturn yield* snapshot.capture({\n\t\t\tid: args.snapshotId,\n\t\t\tlabel: args.name,\n\t\t\tonProgress: args.onProgress,\n\t\t});\n\t});\n"],"mappings":";;;;;;;;;;;;;;AAwDA,MAAa,mBACZ,SAMA,OAAO,IAAI,aAAa;AAEvB,QAAO,QAAO,OADU,6BACD,QAAQ;EAC9B,IAAI,KAAK;EACT,OAAO,KAAK;EACZ,YAAY,KAAK;EACjB,CAAC;EACD"}
@@ -1,8 +1,10 @@
1
1
  import { tarHostTree } from "../../substrate/runtime/host-tree-tar/index.mjs";
2
- import { SnapshotLayout, containerImagesBundlePath, contributionPath, isRestorableContainerImageName, isSafeSnapshotPathSegment } from "./descriptor.mjs";
2
+ import { DEPLOY_CACHE_NAMESPACES, SnapshotLayout, containerImagesBundlePath, contributionPath, isRestorableContainerImageName, isSafeSnapshotPathSegment } from "./descriptor.mjs";
3
+ import { makePhaseFailer } from "./phase-error.mjs";
4
+ import { CACHE_DIR_NAME } from "./wipe.mjs";
3
5
  import { readImageBundleTags, verifyImageBundleTags } from "./image-bundle-tags.mjs";
4
6
  import { writeArtifactIntegrity } from "./integrity.mjs";
5
- import { requireIdentity } from "./identity-guard.mjs";
7
+ import { mergeContributions, requireIdentity } from "./identity-guard.mjs";
6
8
  import { readSnapshotStateDocument, writeSnapshotStateDocument } from "./state-document.mjs";
7
9
  import { Effect, Exit, FileSystem, Schema, Stream } from "effect";
8
10
  //#region src/orchestrators/snapshot/capture.ts
@@ -28,12 +30,7 @@ var CapturePhaseError = class extends Schema.TaggedErrorClass()("SnapshotCapture
28
30
  detail: Schema.String,
29
31
  cause: Schema.optional(Schema.Defect)
30
32
  }) {};
31
- const failPhase = (phase, detail, plugin) => (cause) => Effect.fail(new CapturePhaseError({
32
- phase,
33
- plugin,
34
- detail,
35
- cause
36
- }));
33
+ const failPhase = makePhaseFailer(CapturePhaseError);
37
34
  const failImageBundleTagScan = (cause) => Effect.fail(new CapturePhaseError({
38
35
  phase: "save-images",
39
36
  detail: cause.detail,
@@ -188,15 +185,16 @@ const runCapture = (inputs) => Effect.gen(function* () {
188
185
  const report = (progress) => inputs.onProgress?.(progress) ?? Effect.void;
189
186
  return yield* Effect.scoped(Effect.gen(function* () {
190
187
  const capturedContainers = [];
191
- const paused = [];
188
+ const pauseIntended = [];
189
+ const pauseConfirmed = [];
192
190
  yield* Effect.addFinalizer(() => Effect.gen(function* () {
193
- if (paused.length > 0) yield* report({
191
+ if (pauseIntended.length > 0) yield* report({
194
192
  phase: "resuming",
195
- detail: `unpausing ${paused.length} container${paused.length === 1 ? "" : "s"}`,
196
- pausedContainers: paused.length,
197
- totalContainers: paused.length
193
+ detail: `unpausing ${pauseIntended.length} container${pauseIntended.length === 1 ? "" : "s"}`,
194
+ pausedContainers: pauseConfirmed.length,
195
+ totalContainers: pauseIntended.length
198
196
  });
199
- yield* Effect.forEach(paused, (handle) => inputs.runtime.unpause(handle).pipe(Effect.catch((cause) => Effect.logWarning(`unpause(${handle.name}) failed during snapshot capture: ${String(cause)}`))), { concurrency: "unbounded" });
197
+ yield* Effect.forEach(pauseIntended, (handle) => inputs.runtime.unpause(handle).pipe(Effect.catch((cause) => Effect.logWarning(`unpause(${handle.name}) failed during snapshot capture: ${String(cause)}`))), { concurrency: "unbounded" });
200
198
  }).pipe(Effect.asVoid));
201
199
  const plannedContainers = [];
202
200
  const committedRefs = [];
@@ -229,8 +227,9 @@ const runCapture = (inputs) => Effect.gen(function* () {
229
227
  for (const entry of plannedContainers) {
230
228
  const { handle, unpauseAfterCapture } = entry;
231
229
  if (unpauseAfterCapture) {
230
+ pauseIntended.push(handle);
232
231
  yield* inputs.runtime.pause(handle).pipe(Effect.catch(failPhase("pause", `pause failed for ${handle.name}`, entry.participant.plugin)));
233
- paused.push(handle);
232
+ pauseConfirmed.push(handle);
234
233
  }
235
234
  readyContainers.push({
236
235
  ...entry,
@@ -242,15 +241,15 @@ const runCapture = (inputs) => Effect.gen(function* () {
242
241
  }
243
242
  if (runningContainers.length > 0) yield* report({
244
243
  phase: "paused",
245
- detail: `stack paused for snapshot (${paused.length}/${runningContainers.length} containers)`,
246
- pausedContainers: paused.length,
244
+ detail: `stack paused for snapshot (${pauseConfirmed.length}/${runningContainers.length} containers)`,
245
+ pausedContainers: pauseConfirmed.length,
247
246
  totalContainers: runningContainers.length
248
247
  });
249
248
  const committedContainers = [];
250
249
  if (readyContainers.length > 0) yield* report({
251
250
  phase: "capturing-containers",
252
251
  detail: `committing ${readyContainers.length} container${readyContainers.length === 1 ? "" : "s"}`,
253
- pausedContainers: paused.length,
252
+ pausedContainers: pauseConfirmed.length,
254
253
  totalContainers: runningContainers.length
255
254
  });
256
255
  for (const { commitHandle, labels, participant } of readyContainers) {
@@ -263,22 +262,27 @@ const runCapture = (inputs) => Effect.gen(function* () {
263
262
  if (committedContainers.length > 0) yield* report({
264
263
  phase: "saving-images",
265
264
  detail: `saving ${committedContainers.length} committed image${committedContainers.length === 1 ? "" : "s"}`,
266
- pausedContainers: paused.length,
265
+ pausedContainers: pauseConfirmed.length,
267
266
  totalContainers: runningContainers.length
268
267
  });
269
268
  yield* saveCommittedImages(committedContainers, inputs.stagingDir, inputs.runtime);
270
- const subtrees = yield* resolveCapturedSubtrees(inputs.participants.flatMap((p) => p.decl.subtrees.map((relPath) => ({
269
+ const subtrees = yield* resolveCapturedSubtrees([...inputs.participants.flatMap((p) => p.decl.subtrees.map((relPath) => ({
271
270
  plugin: p.plugin,
272
271
  relPath,
273
272
  missingTolerance: p.decl.missingTolerance,
274
273
  secretMaterial: p.decl.secretMaterial ?? false
275
- }))), inputs.runtimeStackRoot);
274
+ }))), ...DEPLOY_CACHE_NAMESPACES.map((ns) => ({
275
+ plugin: "snapshot/deploy-cache",
276
+ relPath: `${CACHE_DIR_NAME}/${ns}`,
277
+ missingTolerance: "fine",
278
+ secretMaterial: false
279
+ }))], inputs.runtimeStackRoot);
276
280
  const hostTreeIncluded = subtrees.length > 0;
277
281
  if (hostTreeIncluded) {
278
282
  yield* report({
279
283
  phase: "capturing-host-tree",
280
284
  detail: `archiving ${subtrees.length} host subtree${subtrees.length === 1 ? "" : "s"}`,
281
- pausedContainers: paused.length,
285
+ pausedContainers: pauseConfirmed.length,
282
286
  totalContainers: runningContainers.length
283
287
  });
284
288
  yield* writeHostTreeTar(inputs.runtimeStackRoot, subtrees, `${inputs.stagingDir}/${SnapshotLayout.hostTreeTar}`);
@@ -287,7 +291,7 @@ const runCapture = (inputs) => Effect.gen(function* () {
287
291
  yield* report({
288
292
  phase: "saving-state",
289
293
  detail: "copying runtime state",
290
- pausedContainers: paused.length,
294
+ pausedContainers: pauseConfirmed.length,
291
295
  totalContainers: runningContainers.length
292
296
  });
293
297
  const stateDoc = yield* readSnapshotStateDocument(inputs.stateFilePath).pipe(Effect.catch(failPhase("read-state", `state.json failed schema validation`)));
@@ -296,16 +300,26 @@ const runCapture = (inputs) => Effect.gen(function* () {
296
300
  yield* report({
297
301
  phase: "saving-contributions",
298
302
  detail: `writing ${inputs.participants.length} contribution document${inputs.participants.length === 1 ? "" : "s"}`,
299
- pausedContainers: paused.length,
303
+ pausedContainers: pauseConfirmed.length,
300
304
  totalContainers: runningContainers.length
301
305
  });
302
306
  yield* fs.makeDirectory(`${inputs.stagingDir}/${SnapshotLayout.contributionsDir}`, { recursive: true }).pipe(Effect.catch(failPhase("write-contribution", `mkdir contributions dir failed`)));
303
- const identityMerged = {};
307
+ const identityContributions = [];
308
+ const stateByParticipant = /* @__PURE__ */ new Map();
304
309
  const participantKeys = [];
305
310
  for (const participant of inputs.participants) {
306
311
  const identity = yield* participant.captureIdentity;
307
- for (const [k, v] of Object.entries(identity)) identityMerged[k] = v;
312
+ identityContributions.push({
313
+ plugin: participant.plugin,
314
+ slice: identity
315
+ });
308
316
  const state = yield* participant.captureContribution;
317
+ stateByParticipant.set(participant.plugin, state);
318
+ }
319
+ const identityMerged = yield* mergeContributions(identityContributions);
320
+ for (const participant of inputs.participants) {
321
+ const identity = identityContributions.find((c) => c.plugin === participant.plugin)?.slice ?? {};
322
+ const state = stateByParticipant.get(participant.plugin);
309
323
  const doc = {
310
324
  version: 1,
311
325
  plugin: participant.plugin,
@@ -322,7 +336,7 @@ const runCapture = (inputs) => Effect.gen(function* () {
322
336
  yield* report({
323
337
  phase: "writing-metadata",
324
338
  detail: "finalizing snapshot artifact",
325
- pausedContainers: paused.length,
339
+ pausedContainers: pauseConfirmed.length,
326
340
  totalContainers: runningContainers.length
327
341
  });
328
342
  const meta = {
@@ -345,6 +359,6 @@ const runCapture = (inputs) => Effect.gen(function* () {
345
359
  }));
346
360
  }).pipe(Effect.withSpan("orchestrator.snapshot.capture"));
347
361
  //#endregion
348
- export { runCapture };
362
+ export { CapturePhaseError, runCapture };
349
363
 
350
364
  //# sourceMappingURL=capture.mjs.map