@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
package/dist/cli/main.mjs CHANGED
@@ -1,149 +1,72 @@
1
1
  #!/usr/bin/env node
2
- import { StackPathsService } from "../substrate/runtime/paths.mjs";
3
- import { appName, chainId, stackName } from "../substrate/brand.mjs";
4
- import { claim, heartbeatFiber, release } from "../substrate/runtime/cross-process/roster.mjs";
5
- import { readStackEngine } from "../api/define-devstack.mjs";
6
- import { makeProjectionRef } from "../substrate/runtime/projection/state-ref.mjs";
7
- import { persistProjectionChanges, readProjectionSnapshot, writeProjectionSnapshot } from "../substrate/runtime/projection/persisted.mjs";
8
- import { buildSubstrateLayers, superviseStackEffect } from "../substrate/runtime/run.mjs";
9
- import { commandChannelPaths, makeCommandChannelPublisher, makeCommandChannelSubscriber } from "../substrate/runtime/cross-process/command-channel/channel.mjs";
10
- import { SnapshotOrchestratorService } from "../orchestrators/snapshot/service.mjs";
11
- import { buildProductionOrchestratorSinks, buildProductionPostAcquireHook, layerProductionOrchestrators } from "../orchestrators/runtime-composition.mjs";
12
- import { extendBuiltInPluginContext, layerBuiltInPluginRuntime } from "../runtime/built-in-plugin-layers.mjs";
13
- import { resolveAppName, resolveStackName } from "../api/inference-network.mjs";
2
+ import { readProjectionSnapshot } from "../substrate/runtime/projection/persisted.mjs";
3
+ import "../substrate/runtime/index.mjs";
4
+ import { DevstackNetworkParseError, resolveAppName, resolveNetworkSync, resolveStackName, resolveStateDir } from "../api/inference-network.mjs";
14
5
  import { ExitCode } from "../surfaces/cli/sysexits.mjs";
15
- import { CliConfigInvalidError, CliConfigNotFoundError, CliSupervisorLiveError } from "../surfaces/cli/errors.mjs";
16
- import { removeRouterDispatchFilesForStack } from "../orchestrators/router/cleanup.mjs";
17
- import { probeSupervisorPresence } from "../surfaces/cli/commands/supervisor-presence.mjs";
18
- import { defaultProbes } from "../surfaces/cli/commands/doctor-probes.mjs";
6
+ import { CliUsageError } from "../surfaces/cli/errors.mjs";
7
+ import { ENV_VARS } from "../surfaces/cli/flags.mjs";
8
+ import { emitFailure, nodeProcessIO } from "../surfaces/cli/output.mjs";
19
9
  import { dispatch } from "../surfaces/cli/index.mjs";
10
+ import { defaultProbes } from "./doctor-probes.mjs";
20
11
  import { nodeConfirmPrompt } from "../surfaces/cli/commands/confirm-node.mjs";
21
- import { makeTuiSurface } from "../surfaces/tui/index.mjs";
22
12
  import { makeSnapshotReader } from "./snapshot-reader.mjs";
23
- import { makeQueueCommandPublisher, resolveUpRendererMode } from "./up-lifecycle.mjs";
24
13
  import { makeDirectPruneDeps } from "./prune-direct.mjs";
25
- import { Cause, Effect, Exit, FileSystem, Layer, Logger, Queue, Stream, SubscriptionRef } from "effect";
26
- import { existsSync, realpathSync } from "node:fs";
27
- import { dirname, isAbsolute, resolve } from "node:path";
14
+ import { makeConfigLoader, resolveConfigPath } from "./wirings/config-loader.mjs";
15
+ import { runUpLive } from "./wirings/up.mjs";
16
+ import { runApplyLive } from "./wirings/apply.mjs";
17
+ import { runSnapshotCaptureLiveAware, runSnapshotDeleteDirect, runSnapshotRestoreDirect } from "./wirings/snapshot.mjs";
18
+ import { runWipeDirect, runWipePlanDirect } from "./wirings/wipe.mjs";
19
+ import { Effect } from "effect";
20
+ import { realpathSync } from "node:fs";
21
+ import { dirname, resolve } from "node:path";
28
22
  import { fileURLToPath, pathToFileURL } from "node:url";
29
23
  //#region src/cli/main.ts
30
- const DEFAULT_CONFIG_PATH = "./devstack.config.ts";
31
- const LIVE_APPLY_ACK_TIMEOUT_MILLIS = 600 * 1e3;
32
- const stackRootFor = (runtimeRoot, stack) => resolve(runtimeRoot, "stacks", stack);
33
- const rosterPathsFor = (stackRoot) => ({
34
- stackLockFile: resolve(stackRoot, "stack.lock"),
35
- rosterFile: resolve(stackRoot, "roster.json")
36
- });
37
- const ENGINE_COMMAND_TAGS = new Set([
38
- "stack.start",
39
- "stack.stop",
40
- "stack.restart",
41
- "apply.requested",
42
- "codegen.requested",
43
- "snapshot.capture",
44
- "snapshot.restore",
45
- "snapshot.list",
46
- "snapshot.delete",
47
- "wipe.requested",
48
- "prune.requested",
49
- "advance-clock.requested",
50
- "shutdown.requested",
51
- "shutdown.hardKillRequested",
52
- "selective-restart.requested"
53
- ]);
54
- const hasString = (value, key) => typeof value[key] === "string";
55
- const isEngineCommand = (value) => {
56
- if (typeof value !== "object" || value === null) return false;
57
- const record = value;
58
- if (typeof record.tag !== "string" || !ENGINE_COMMAND_TAGS.has(record.tag)) return false;
59
- switch (record.tag) {
60
- case "snapshot.restore":
61
- case "snapshot.delete": return hasString(record, "snapshotId");
62
- case "advance-clock.requested": return typeof record.toMillis === "number";
63
- case "shutdown.hardKillRequested": return (record.signal === "SIGINT" || record.signal === "SIGTERM") && typeof record.exitCode === "number" && typeof record.at === "number";
64
- case "selective-restart.requested": return hasString(record, "pluginKey");
65
- case "apply.requested": return record.pluginKey === void 0 || typeof record.pluginKey === "string";
66
- case "snapshot.capture": return (record.snapshotId === void 0 || typeof record.snapshotId === "string") && (record.name === void 0 || typeof record.name === "string");
67
- default: return true;
68
- }
69
- };
70
- const findCliSupervisorLiveError = (cause) => {
71
- for (const reason of cause.reasons) {
72
- if (!Cause.isFailReason(reason)) continue;
73
- const error = reason.error;
74
- if (error instanceof CliSupervisorLiveError) return error;
75
- if (typeof error === "object" && error !== null && error._tag === "CliSupervisorLiveError") return error;
76
- }
77
- return null;
78
- };
79
- const resolveConfigPath = (configPath) => {
80
- const target = configPath ?? DEFAULT_CONFIG_PATH;
81
- const explicit = isAbsolute(target) ? target : resolve(process.cwd(), target);
82
- if (existsSync(explicit)) return explicit;
83
- if (configPath !== void 0 && configPath !== DEFAULT_CONFIG_PATH) return null;
84
- let dir = process.cwd();
85
- for (;;) {
86
- const candidate = resolve(dir, "devstack.config.ts");
87
- if (existsSync(candidate)) return candidate;
88
- const parent = resolve(dir, "..");
89
- if (parent === dir) return null;
90
- dir = parent;
91
- }
92
- };
93
- const validateStackModule = (resolvedConfigPath, mod) => {
94
- const def = mod.default;
95
- if (def === null || typeof def !== "object" || def._tag !== "Stack") throw new CliConfigInvalidError({ message: `config at ${resolvedConfigPath} does not default-export a Stack value (got _tag=${String(def?._tag)})` });
96
- let stack;
97
- try {
98
- stack = readStackEngine(def);
99
- } catch (cause) {
100
- throw new CliConfigInvalidError({ message: `config at ${resolvedConfigPath} default-exported an invalid Stack handle: ${cause instanceof Error ? cause.message : String(cause)}` });
101
- }
102
- return {
103
- stack,
104
- resolvedConfigPath
105
- };
106
- };
107
- const makeConfigLoader = () => ({ load: (configPath) => Effect.gen(function* () {
108
- const abs = resolveConfigPath(configPath);
109
- if (abs === null) {
110
- const attempted = configPath !== void 0 ? resolve(process.cwd(), configPath) : resolve(process.cwd(), DEFAULT_CONFIG_PATH);
111
- return yield* Effect.fail(new CliConfigNotFoundError({
112
- message: `devstack config not found at ${attempted}`,
113
- searchedPaths: [attempted]
114
- }));
115
- }
116
- const url = pathToFileURL(abs).href;
117
- const mod = yield* Effect.tryPromise({
118
- try: () => import(url),
119
- catch: (cause) => new CliConfigInvalidError({
120
- message: `failed to import ${abs}: ${cause instanceof Error ? cause.message : String(cause)}`,
121
- cause
122
- })
123
- });
124
- return yield* Effect.try({
125
- try: () => validateStackModule(abs, mod),
126
- catch: (cause) => cause instanceof CliConfigInvalidError ? cause : new CliConfigInvalidError({
127
- message: `invalid config at ${abs}`,
128
- cause
129
- })
130
- });
131
- }) });
132
24
  /** Resolve identity from flags + env. App and stack fall through the
133
- * shared cwd/package metadata resolver before their defaults. */
25
+ * shared cwd/package metadata resolver before their defaults.
26
+ *
27
+ * State-dir precedence ladder:
28
+ * `--state-dir` flag (`stateDir`) > `config.options.stateDir`
29
+ * (`configStateDir`) > `$DEVSTACK_STATE_DIR` > `<cwd>/.devstack`.
30
+ * The flag maps to `resolveStateDir`'s top `runtimeRoot` rung and the
31
+ * config value to its `stateDir` rung so the flag always wins over a
32
+ * config-declared `defineDevstack({ stateDir })`.
33
+ *
34
+ * Stack-name precedence ladder (the SAME flag-beats-config shape as
35
+ * state-dir, so the two are consistent and reviewable side-by-side):
36
+ * `--stack` flag / `$DEVSTACK_STACK` (`params.stack`)
37
+ * > config's `defineDevstack({ stackName })`
38
+ * > cwd/package inference (default `'main'`).
39
+ * Config-vs-explicit resolution can't happen here (the config isn't
40
+ * loaded yet for the no-config verbs), so we record the explicit value
41
+ * on `ResolvedIdentity.explicitStack` and let the verb wirings apply
42
+ * `config.stackName` ONLY when no explicit stack was given — see
43
+ * `effectiveStackName` in `cli/wirings/identity.ts`. `params.stack` is
44
+ * exactly the explicit `--stack`-or-`$DEVSTACK_STACK` value (the argv
45
+ * pre-parser seeds it from env, then lets the flag overwrite it), and
46
+ * is `undefined` when neither was provided. */
134
47
  const resolveIdentity = (params) => {
135
48
  const cwd = params.cwd ?? process.cwd();
136
49
  const app = resolveAppName({
137
50
  explicit: params.app,
138
51
  cwd
139
52
  });
140
- const runtimeRoot = resolve(params.stateDir ?? process.env.DEVSTACK_STATE_DIR ?? resolve(process.env.HOME ?? process.cwd(), ".devstack"));
53
+ const runtimeRoot = resolveStateDir({
54
+ runtimeRoot: params.stateDir,
55
+ stateDir: params.configStateDir,
56
+ env: process.env.DEVSTACK_STATE_DIR,
57
+ cwd
58
+ });
141
59
  const stacksRoot = resolve(runtimeRoot, "stacks");
60
+ const explicitStack = params.stack !== void 0 && params.stack.length > 0 ? params.stack : void 0;
142
61
  const stack = resolveStackName({
143
62
  explicit: params.stack,
144
63
  cwd
145
64
  });
146
- const network = params.network ?? process.env.DEVSTACK_NETWORK ?? "sui:local";
65
+ const network = resolveNetworkSync({
66
+ explicit: params.network,
67
+ env: process.env.DEVSTACK_NETWORK,
68
+ explicitSource: "--network"
69
+ }).raw;
147
70
  const stackRoot = resolve(stacksRoot, stack);
148
71
  return {
149
72
  app,
@@ -152,377 +75,68 @@ const resolveIdentity = (params) => {
152
75
  runtimeRoot,
153
76
  stacksRoot,
154
77
  stackRoot,
155
- rosterFile: resolve(stackRoot, "roster.json")
78
+ rosterFile: resolve(stackRoot, "roster.json"),
79
+ explicitStack
156
80
  };
157
81
  };
158
- const projectionStatusReader = (identity) => ({ readState: (_app, _stack) => Effect.sync(() => readProjectionSnapshot(identity.stackRoot)) });
159
- const commandResultFromProcess = () => ({ exitCode: typeof process.exitCode === "number" ? process.exitCode : 0 });
82
+ const projectionStatusReader = (identity) => ({ readState: () => Effect.sync(() => readProjectionSnapshot(identity.stackRoot)) });
160
83
  const buildDirectDeps = (identity) => {
161
- const loader = makeConfigLoader();
162
84
  return {
163
85
  up: { run: (flags) => runUpLive(flags.configPath, identity, {
164
86
  renderer: flags.renderer,
165
87
  stdoutIsTty: Boolean(process.stdout.isTTY)
166
- }).pipe(Effect.map(() => commandResultFromProcess())) },
167
- apply: { run: (flags) => runApplyLive(flags.configPath, identity).pipe(Effect.map(() => commandResultFromProcess())) },
88
+ }) },
89
+ apply: { run: (flags) => runApplyLive(flags.configPath, identity) },
168
90
  status: { reader: projectionStatusReader(identity) },
169
- snapshot: makeDirectSnapshotDeps(identity),
91
+ snapshot: {
92
+ reader: makeSnapshotReader(identity),
93
+ capture: (args) => runSnapshotCaptureLiveAware(identity, args),
94
+ restore: (snapshotId) => runSnapshotRestoreDirect(identity, snapshotId),
95
+ delete: (snapshotId) => runSnapshotDeleteDirect(identity, snapshotId),
96
+ confirm: nodeConfirmPrompt
97
+ },
170
98
  prune: makeDirectPruneDeps({ runtimeRoot: identity.runtimeRoot }),
171
99
  doctor: { probes: defaultProbes({
172
100
  stateDir: identity.runtimeRoot,
173
101
  appRoot: identity.stacksRoot
174
102
  }) },
175
- config: { loader },
103
+ config: { loader: makeConfigLoader() },
176
104
  wipe: {
177
105
  wipe: () => runWipeDirect(identity),
106
+ plan: () => runWipePlanDirect(identity),
178
107
  confirm: nodeConfirmPrompt
179
108
  }
180
109
  };
181
110
  };
182
- const makeSnapshotCommandHandler = (params) => {
183
- const provideFileSystem = (effect) => effect.pipe(Effect.provideService(FileSystem.FileSystem, params.fs));
184
- return (cmd, handlerCtx) => {
185
- switch (cmd.tag) {
186
- case "snapshot.capture": return provideFileSystem(params.snapshot.capture({
187
- id: cmd.snapshotId,
188
- label: cmd.name,
189
- onProgress: (progress) => handlerCtx.publish({
190
- tag: "snapshot.captureProgress",
191
- ...cmd.snapshotId === void 0 ? {} : { snapshotId: cmd.snapshotId },
192
- ...cmd.name === void 0 ? {} : { name: cmd.name },
193
- phase: progress.phase,
194
- ...progress.detail === void 0 ? {} : { detail: progress.detail },
195
- ...progress.pausedContainers === void 0 ? {} : { pausedContainers: progress.pausedContainers },
196
- ...progress.totalContainers === void 0 ? {} : { totalContainers: progress.totalContainers },
197
- at: Date.now()
198
- })
199
- })).pipe(Effect.map((meta) => [{
200
- tag: "snapshot.captured",
201
- snapshotId: meta.id,
202
- ...meta.label === null ? {} : { name: meta.label },
203
- at: Date.now()
204
- }]));
205
- case "snapshot.restore": return provideFileSystem(params.snapshot.restore({ id: cmd.snapshotId })).pipe(Effect.map((meta) => [{
206
- tag: "snapshot.restored",
207
- snapshotId: meta.id,
208
- at: Date.now()
209
- }]));
210
- case "snapshot.list": return provideFileSystem(params.snapshot.list).pipe(Effect.as([]));
211
- case "snapshot.delete": return provideFileSystem(params.snapshot.delete(cmd.snapshotId)).pipe(Effect.as([]));
212
- case "wipe.requested": return provideFileSystem(params.snapshot.wipe({})).pipe(Effect.as([]));
213
- case "prune.requested": return provideFileSystem(params.snapshot.prune({})).pipe(Effect.as([]));
214
- default: return Effect.succeed([]);
215
- }
216
- };
217
- };
218
- const installLiveSupervisorRoster = (params) => Effect.gen(function* () {
219
- const paths = rosterPathsFor(params.stackRoot);
220
- if (!(yield* claim(paths)).soleHolder) {
221
- yield* release(paths).pipe(Effect.catch(() => Effect.void));
222
- return yield* Effect.fail(new CliSupervisorLiveError({
223
- app: params.app,
224
- stack: params.stack,
225
- hint: "use `devstack apply` from another shell, or choose a different --stack name"
226
- }));
227
- }
228
- yield* Effect.addFinalizer(() => release(paths).pipe(Effect.catch(() => Effect.void)));
229
- yield* Effect.forkScoped(heartbeatFiber(paths));
230
- });
231
- const installCommandChannelBridge = (params) => Effect.gen(function* () {
232
- const subscriber = yield* makeCommandChannelSubscriber(commandChannelPaths(params.stackRoot), { fromOffset: "current" });
233
- yield* Effect.forkScoped(subscriber.commands.pipe(Stream.runForEach((record) => Effect.gen(function* () {
234
- if (!isEngineCommand(record.command)) {
235
- yield* subscriber.fail(record.id, "invalid command", "command payload did not match EngineCommand").pipe(Effect.catch(() => Effect.void));
236
- return;
237
- }
238
- yield* params.handle.runCommand(record.command).pipe(Effect.andThen(subscriber.ack(record.id)), Effect.catchCause((cause) => subscriber.fail(record.id, "command failed", Cause.pretty(cause)).pipe(Effect.catch(() => Effect.void))));
239
- })), Effect.catchCause((cause) => Effect.sync(() => {
240
- process.stderr.write(`command channel failed: ${Cause.pretty(cause)}\n`);
241
- }))));
242
- return { publishEvent: (event) => subscriber.publishEvent(event).pipe(Effect.catch(() => Effect.void)) };
243
- });
244
- /**
245
- * Run `devstack up`. Wires the substrate Layer stack, supervisor,
246
- * attached renderer, and in-process TUI command queue. The Effect runs
247
- * as the outer Node fiber so SIGINT reaches scope finalizers.
248
- */
249
- const runUpLive = (configPath, identity, options) => {
250
- const loader = makeConfigLoader();
251
- return Effect.gen(function* () {
252
- const loaded = yield* loader.load(configPath).pipe(Effect.catch((err) => Effect.sync(() => {
253
- process.stderr.write(`error: ${err.message}\n`);
254
- process.exitCode = err._tag === "CliConfigNotFoundError" ? 66 : 78;
255
- return null;
256
- })));
257
- if (loaded === null) return;
258
- const stack = loaded.stack;
259
- const identityValue = {
260
- app: appName(identity.app),
261
- stack: stackName(stack.options.stackName ?? identity.stack),
262
- chain: chainId(identity.network)
263
- };
264
- const appRoot = dirname(loaded.resolvedConfigPath);
265
- const rendererMode = resolveUpRendererMode({
266
- cliRenderer: options.renderer,
267
- stackRenderer: stack.options.renderer,
268
- stdoutIsTty: options.stdoutIsTty
269
- });
270
- const substrateLayers = layerProductionOrchestrators({ codegen: {
271
- appRoot,
272
- outputDir: stack.options.codegen?.outputDir,
273
- stackSubdir: stack.options.codegen?.stackSubdir ?? null
274
- } }).pipe(Layer.provideMerge(buildSubstrateLayers(identityValue, identity.runtimeRoot)));
275
- yield* Effect.gen(function* () {
276
- const state = yield* makeProjectionRef();
277
- const snapshotCommandHandler = makeSnapshotCommandHandler({
278
- snapshot: yield* SnapshotOrchestratorService,
279
- fs: yield* FileSystem.FileSystem
280
- });
281
- const orchestratorSinks = yield* buildProductionOrchestratorSinks();
282
- const postAcquireHook = yield* buildProductionPostAcquireHook({ extras: stack.options.extras });
283
- yield* superviseStackEffect({
284
- _tag: "Stack",
285
- members: stack.members,
286
- options: stack.options
287
- }, identityValue, state, {
288
- orchestratorSinks,
289
- commandHandler: snapshotCommandHandler,
290
- postAcquireHook,
291
- extendContext: extendBuiltInPluginContext,
292
- beforeInitialAcquire: (handle) => Effect.gen(function* () {
293
- const stackPaths = yield* StackPathsService;
294
- const commandChannel = yield* installCommandChannelBridge({
295
- stackRoot: stackPaths.stackRoot,
296
- handle
297
- });
298
- yield* installLiveSupervisorRoster({
299
- stackRoot: stackPaths.stackRoot,
300
- app: String(identityValue.app),
301
- stack: String(identityValue.stack)
302
- });
303
- const rendererEvents = yield* Queue.unbounded();
304
- const renderer = makeTuiSurface({
305
- mode: rendererMode,
306
- publishCommand: makeQueueCommandPublisher(handle.commands)
307
- });
308
- yield* Effect.addFinalizer(() => renderer.flush.pipe(Effect.catch(() => Effect.void)));
309
- yield* Effect.forkScoped(renderer.mount(handle.state, Stream.fromQueue(rendererEvents)).pipe(Effect.catch((cause) => Effect.sync(() => {
310
- process.stderr.write(`renderer failed: ${cause.detail ?? String(cause)}\n`);
311
- }))));
312
- yield* Effect.forkScoped(persistProjectionChanges(stackPaths.stackRoot, handle.state));
313
- yield* Effect.forkScoped(Stream.fromQueue(handle.events).pipe(Stream.runForEach((event) => Effect.gen(function* () {
314
- yield* Queue.offer(rendererEvents, event);
315
- yield* commandChannel.publishEvent(event);
316
- }))));
317
- })
318
- }).pipe(Effect.provide(layerBuiltInPluginRuntime(orchestratorSinks)));
319
- }).pipe(Effect.provide(substrateLayers), Effect.provide(Logger.layer([])), Effect.matchCauseEffect({
320
- onFailure: (cause) => Effect.sync(() => {
321
- const live = findCliSupervisorLiveError(cause);
322
- if (live !== null) {
323
- process.stderr.write(`error: supervisor live for ${live.app}/${live.stack}\n`);
324
- if (live.hint !== void 0) process.stderr.write(`hint: ${live.hint}\n`);
325
- process.exitCode = ExitCode.SUPERVISOR_LIVE;
326
- return;
327
- }
328
- process.stderr.write(`\nerror: stack failed\n${Cause.pretty(cause)}\n`);
329
- process.exitCode = 1;
330
- }),
331
- onSuccess: () => Effect.sync(() => {
332
- process.exitCode ??= 0;
333
- })
334
- }));
335
- });
336
- };
337
- const runApplyAgainstLiveSupervisor = (identity, identityValue) => Effect.gen(function* () {
338
- const stackRoot = stackRootFor(identity.runtimeRoot, String(identityValue.stack));
339
- if (!(yield* probeSupervisorPresence(resolve(stackRoot, "roster.json")).pipe(Effect.catch(() => Effect.succeed({
340
- live: false,
341
- pid: null,
342
- hostname: null
343
- })))).live) return false;
344
- const exit = yield* Effect.exit(Effect.gen(function* () {
345
- const publisher = yield* makeCommandChannelPublisher(commandChannelPaths(stackRoot));
346
- const published = yield* publisher.publish({ tag: "apply.requested" });
347
- const reply = yield* publisher.awaitCompletion(published.id, { timeoutMillis: LIVE_APPLY_ACK_TIMEOUT_MILLIS });
348
- if (!reply.ok) return yield* Effect.fail(reply.message);
349
- }));
350
- if (Exit.isFailure(exit)) {
351
- process.stderr.write(`\nerror: live stack apply failed\n${Cause.pretty(exit.cause)}\n`);
352
- process.exitCode = 1;
353
- return true;
354
- }
355
- process.exitCode ??= 0;
356
- return true;
357
- });
358
- const runApplyLive = (configPath, identity) => {
359
- const loader = makeConfigLoader();
360
- return Effect.gen(function* () {
361
- const loaded = yield* loader.load(configPath).pipe(Effect.matchEffect({
362
- onFailure: (err) => Effect.gen(function* () {
363
- process.stderr.write(`error: ${err.message}\n`);
364
- process.exitCode = err._tag === "CliConfigNotFoundError" ? 66 : 78;
365
- return yield* Effect.fail("config-load-failed");
366
- }),
367
- onSuccess: (v) => Effect.succeed(v)
368
- }));
369
- const stack = loaded.stack;
370
- const identityValue = {
371
- app: appName(identity.app),
372
- stack: stackName(stack.options.stackName ?? identity.stack),
373
- chain: chainId(identity.network)
374
- };
375
- if (yield* runApplyAgainstLiveSupervisor(identity, identityValue)) return;
376
- const substrateLayers = layerProductionOrchestrators({ codegen: {
377
- appRoot: dirname(loaded.resolvedConfigPath),
378
- outputDir: stack.options.codegen?.outputDir,
379
- stackSubdir: stack.options.codegen?.stackSubdir ?? null
380
- } }).pipe(Layer.provideMerge(buildSubstrateLayers(identityValue, identity.runtimeRoot)));
381
- yield* Effect.gen(function* () {
382
- const state = yield* makeProjectionRef();
383
- const orchestratorSinks = yield* buildProductionOrchestratorSinks();
384
- const postAcquireHook = yield* buildProductionPostAcquireHook({ extras: stack.options.extras });
385
- yield* superviseStackEffect({
386
- _tag: "Stack",
387
- members: stack.members,
388
- options: stack.options
389
- }, identityValue, state, {
390
- orchestratorSinks,
391
- postAcquireHook,
392
- lifetime: "one-shot",
393
- extendContext: extendBuiltInPluginContext
394
- }).pipe(Effect.provide(layerBuiltInPluginRuntime(orchestratorSinks)));
395
- yield* writeProjectionSnapshot((yield* StackPathsService).stackRoot, yield* SubscriptionRef.get(state));
396
- }).pipe(Effect.provide(substrateLayers), Effect.provide(Logger.layer([Logger.consolePretty()])), Effect.matchCauseEffect({
397
- onFailure: (cause) => Effect.sync(() => {
398
- process.stderr.write(`\nerror: stack apply failed\n${Cause.pretty(cause)}\n`);
399
- process.exitCode = 1;
400
- }),
401
- onSuccess: () => Effect.sync(() => {
402
- process.exitCode ??= 0;
403
- })
404
- }));
405
- }).pipe(Effect.catch(() => Effect.void));
406
- };
407
- const snapshotIdentityParticipants = (meta) => Object.entries(meta.identity).map(([plugin, value]) => ({
408
- plugin,
409
- liveIdentity: Effect.succeed({ [plugin]: value })
410
- }));
411
- const identityValueFor = (identity, stack) => ({
412
- app: appName(identity.app),
413
- stack: stackName(stack?.options.stackName ?? identity.stack),
414
- chain: chainId(identity.network)
415
- });
416
- const directSnapshotLayers = (identity) => layerProductionOrchestrators().pipe(Layer.provideMerge(buildSubstrateLayers(identityValueFor(identity), identity.runtimeRoot)));
417
- const provideFileSystem = (fs, effect) => effect.pipe(Effect.provideService(FileSystem.FileSystem, fs));
418
- const ensureNoLiveSupervisor = (identity, hint) => Effect.gen(function* () {
419
- if ((yield* probeSupervisorPresence(identity.rosterFile).pipe(Effect.catch(() => Effect.succeed({
420
- live: false,
421
- pid: null,
422
- hostname: null
423
- })))).live) return yield* Effect.fail(new CliSupervisorLiveError({
424
- app: identity.app,
425
- stack: identity.stack,
426
- hint
427
- }));
428
- });
429
- const runSnapshotRestoreDirect = (identity, snapshotId) => {
430
- const restored = Effect.gen(function* () {
431
- const snapshot = yield* SnapshotOrchestratorService;
432
- const fs = yield* FileSystem.FileSystem;
433
- const meta = (yield* provideFileSystem(fs, snapshot.list)).find((entry) => entry.id === snapshotId)?.metadata ?? null;
434
- const participants = meta === null ? [] : snapshotIdentityParticipants(meta);
435
- yield* provideFileSystem(fs, snapshot.restore({
436
- id: snapshotId,
437
- participants
438
- }));
439
- }).pipe(Effect.provide(directSnapshotLayers(identity)), Effect.provide(Logger.layer([Logger.consolePretty()])));
440
- return ensureNoLiveSupervisor(identity, "shut down the attached `devstack up` session before restoring a snapshot").pipe(Effect.andThen(restored));
441
- };
442
- const runSnapshotDeleteDirect = (identity, snapshotId) => {
443
- return Effect.gen(function* () {
444
- const snapshot = yield* SnapshotOrchestratorService;
445
- yield* provideFileSystem(yield* FileSystem.FileSystem, snapshot.delete(snapshotId));
446
- }).pipe(Effect.provide(directSnapshotLayers(identity)), Effect.provide(Logger.layer([Logger.consolePretty()])));
447
- };
448
- const runSnapshotCaptureDirect = (identity, args) => {
449
- const loader = makeConfigLoader();
450
- return Effect.gen(function* () {
451
- const loaded = yield* loader.load(args.configPath);
452
- const stack = loaded.stack;
453
- const identityValue = identityValueFor(identity, stack);
454
- const substrateLayers = layerProductionOrchestrators({ codegen: {
455
- appRoot: dirname(loaded.resolvedConfigPath),
456
- outputDir: stack.options.codegen?.outputDir,
457
- stackSubdir: stack.options.codegen?.stackSubdir ?? null
458
- } }).pipe(Layer.provideMerge(buildSubstrateLayers(identityValue, identity.runtimeRoot)));
459
- return yield* Effect.gen(function* () {
460
- const state = yield* makeProjectionRef();
461
- const snapshot = yield* SnapshotOrchestratorService;
462
- const fs = yield* FileSystem.FileSystem;
463
- const orchestratorSinks = yield* buildProductionOrchestratorSinks();
464
- const postAcquireHook = yield* buildProductionPostAcquireHook({ extras: stack.options.extras });
465
- let captureExit = Exit.succeed(void 0);
466
- const capturedMeta = { current: null };
467
- yield* superviseStackEffect({
468
- _tag: "Stack",
469
- members: stack.members,
470
- options: stack.options
471
- }, identityValue, state, {
472
- orchestratorSinks,
473
- postAcquireHook,
474
- lifetime: "one-shot",
475
- extendContext: extendBuiltInPluginContext,
476
- withinScope: () => provideFileSystem(fs, snapshot.capture({
477
- id: args.snapshotId,
478
- label: args.name
479
- })).pipe(Effect.tap((meta) => Effect.sync(() => {
480
- capturedMeta.current = meta;
481
- })), Effect.asVoid, Effect.exit, Effect.tap((exit) => Effect.sync(() => {
482
- captureExit = exit;
483
- })), Effect.asVoid)
484
- }).pipe(Effect.provide(layerBuiltInPluginRuntime(orchestratorSinks)));
485
- if (Exit.isFailure(captureExit)) yield* Effect.failCause(captureExit.cause);
486
- if (capturedMeta.current === null) return yield* Effect.die("snapshot capture completed without metadata");
487
- const meta = capturedMeta.current;
488
- yield* writeProjectionSnapshot((yield* StackPathsService).stackRoot, yield* SubscriptionRef.get(state));
489
- return {
490
- snapshotId: meta.id,
491
- name: meta.label ?? meta.id
492
- };
493
- }).pipe(Effect.provide(substrateLayers), Effect.provide(Logger.layer([Logger.consolePretty()])));
494
- });
495
- };
496
- const makeDirectSnapshotDeps = (identity) => ({
497
- reader: makeSnapshotReader(identity),
498
- capture: (args) => runSnapshotCaptureDirect(identity, args),
499
- restore: (snapshotId) => runSnapshotRestoreDirect(identity, snapshotId),
500
- delete: (snapshotId) => runSnapshotDeleteDirect(identity, snapshotId),
501
- confirm: nodeConfirmPrompt
502
- });
503
- const runWipeDirect = (identity) => Effect.gen(function* () {
504
- yield* ensureNoLiveSupervisor(identity, "shut down the attached `devstack up` session first");
505
- return yield* Effect.gen(function* () {
506
- const snapshot = yield* SnapshotOrchestratorService;
507
- yield* provideFileSystem(yield* FileSystem.FileSystem, snapshot.wipe({}));
508
- yield* removeRouterDispatchFilesForStack({
509
- runtimeRoot: identity.runtimeRoot,
510
- app: identity.app,
511
- stack: identity.stack
512
- });
513
- }).pipe(Effect.provide(directSnapshotLayers(identity)), Effect.provide(Logger.layer([Logger.consolePretty()])));
514
- });
111
+ /** @internal Exported for tests. Resolves identity flag inputs from a
112
+ * `--app <x>` / `--stack <x>` / `--network <x>` / `--state-dir <x>` /
113
+ * `--config <x>` argv, falling back to `DEVSTACK_*` env vars. Throws
114
+ * on a missing or flag-shaped value so a typo doesn't silently demote
115
+ * a downstream flag, and on a duplicate flag (`--app a --app b`) so
116
+ * the pre-parser does not silently last-write-wins a value that
117
+ * Stricli will later reject outright. */
515
118
  const identityInputsFromArgv = (argv, env) => {
516
119
  let app = env.DEVSTACK_APP;
517
120
  let stack = env.DEVSTACK_STACK;
518
121
  let network = env.DEVSTACK_NETWORK;
519
- let stateDir = env.DEVSTACK_STATE_DIR;
122
+ let stateDir;
520
123
  let configPath = env.DEVSTACK_CONFIG;
124
+ const seenArgvFlags = /* @__PURE__ */ new Set();
521
125
  for (let i = 0; i < argv.length; i += 1) {
522
126
  const token = argv[i];
523
127
  const readValue = (name) => {
524
- if (token.startsWith(`--${name}=`)) return token.slice(name.length + 3);
525
- if (token === `--${name}`) return argv[i + 1];
128
+ let value;
129
+ if (token.startsWith(`--${name}=`)) value = token.slice(name.length + 3);
130
+ else if (token === `--${name}`) {
131
+ const next = argv[i + 1];
132
+ if (next === void 0) throw new CliUsageError({ message: `flag --${name} requires a value` });
133
+ if (next.startsWith("--")) throw new CliUsageError({ message: `flag --${name} requires a value; got "${next}" which looks like a flag` });
134
+ value = next;
135
+ }
136
+ if (value === void 0) return void 0;
137
+ if (seenArgvFlags.has(name)) throw new CliUsageError({ message: `flag --${name} given more than once` });
138
+ seenArgvFlags.add(name);
139
+ return value;
526
140
  };
527
141
  app = readValue("app") ?? app;
528
142
  stack = readValue("stack") ?? stack;
@@ -542,17 +156,89 @@ const identityCwdFromConfig = (configPath) => {
542
156
  const resolved = resolveConfigPath(configPath);
543
157
  return resolved === null ? process.cwd() : dirname(resolved);
544
158
  };
159
+ /** Whether the resolved argv is a purely-informational invocation that
160
+ * never consumes `identity.runtimeRoot` (the only value the config
161
+ * pre-load feeds). For these we SKIP `configStateDirBestEffort` so we
162
+ * don't dynamic-import (and run the top-level side effects of) the
163
+ * user's `devstack.config.ts` — plus walk parent dirs — for commands
164
+ * the file header itself says must stay cheap:
165
+ *
166
+ * - empty argv → Stricli prints root help
167
+ * - `--help`/`-h` or `--version`/`-v` anywhere → Stricli short-circuits
168
+ * - first token `schema` → emits the static CLI schema (no state dir)
169
+ *
170
+ * An unknown verb also never reaches a state-dir consumer (Stricli
171
+ * fails the parse), but we keep pre-loading on the general path: the
172
+ * pre-parser already accepted the identity flags, and gating on a
173
+ * closed verb set here would duplicate the dispatcher's route table.
174
+ * The two flagged-as-wasteful informational paths (help/version/schema)
175
+ * are the ones with a registered short-circuit, so skipping exactly
176
+ * those removes the eager-import surprise without re-deriving routes. */
177
+ const argvSkipsConfigPreload = (argv) => {
178
+ if (argv.length === 0) return true;
179
+ for (const token of argv) if (token === "--help" || token === "-h" || token === "--version" || token === "-v") return true;
180
+ return argv.find((token) => !token.startsWith("-")) === "schema";
181
+ };
182
+ /** Best-effort read of `config.options.stateDir` (the value a program
183
+ * sets via `defineDevstack({ stateDir })`) for the state-dir precedence
184
+ * ladder in `resolveIdentity`. Swallows EVERY config-loader failure
185
+ * (not-found AND evaluation errors) and returns `undefined`:
186
+ *
187
+ * - No-config verbs (`prune`, `wipe`) MUST keep resolving identity
188
+ * without a config, so a missing config silently falls through to
189
+ * the flag > env > cwd ladder.
190
+ * - A genuinely malformed config is NOT surfaced here — the verbs that
191
+ * actually consume config (`up` / `apply` via `makeConfigLoader`)
192
+ * re-load it and surface the typed `CliConfig*` error through the
193
+ * normal envelope path, so behavior for those verbs is unchanged.
194
+ *
195
+ * This is one redundant config evaluation for `up` / `apply` (the verb
196
+ * wiring re-loads via its own loader); threading the loaded value into
197
+ * the verb dispatch would require touching the off-limits `wirings/up.ts`
198
+ * signature, so the duplicate import is accepted deliberately. */
199
+ const configStateDirBestEffort = async (configPath) => {
200
+ const loaded = await Effect.runPromise(makeConfigLoader().load(configPath).pipe(Effect.option));
201
+ if (loaded._tag === "None") return void 0;
202
+ const stateDir = loaded.value.stack.options?.stateDir;
203
+ return stateDir !== void 0 && stateDir.length > 0 ? stateDir : void 0;
204
+ };
545
205
  const runCli = async (argv = process.argv.slice(2)) => {
546
206
  const stdinIsTty = Boolean(process.stdin.isTTY);
547
207
  const env = { ...process.env };
548
- const identityInputs = identityInputsFromArgv(argv, env);
549
- const identity = resolveIdentity({
550
- app: identityInputs.app,
551
- stack: identityInputs.stack,
552
- network: identityInputs.network,
553
- stateDir: identityInputs.stateDir,
554
- cwd: identityCwdFromConfig(identityInputs.configPath)
555
- });
208
+ let identityInputs;
209
+ try {
210
+ identityInputs = identityInputsFromArgv(argv, env);
211
+ } catch (cause) {
212
+ const error = cause instanceof CliUsageError ? cause : new CliUsageError({ message: cause instanceof Error ? cause.message : String(cause) });
213
+ const jsonMode = env[ENV_VARS.JSON] === "1" || argv.includes("--json");
214
+ await Effect.runPromise(emitFailure(nodeProcessIO, jsonMode ? "json" : "human", {
215
+ command: "(parse-argv)",
216
+ elapsedMs: 0,
217
+ error
218
+ }));
219
+ return;
220
+ }
221
+ const configStateDir = argvSkipsConfigPreload(argv) ? void 0 : await configStateDirBestEffort(identityInputs.configPath);
222
+ let identity;
223
+ try {
224
+ identity = resolveIdentity({
225
+ app: identityInputs.app,
226
+ stack: identityInputs.stack,
227
+ network: identityInputs.network,
228
+ stateDir: identityInputs.stateDir,
229
+ configStateDir,
230
+ cwd: identityCwdFromConfig(identityInputs.configPath)
231
+ });
232
+ } catch (cause) {
233
+ const error = cause instanceof DevstackNetworkParseError ? new CliUsageError({ message: cause.message }) : cause instanceof CliUsageError ? cause : new CliUsageError({ message: cause instanceof Error ? cause.message : String(cause) });
234
+ const jsonMode = env[ENV_VARS.JSON] === "1" || argv.includes("--json");
235
+ await Effect.runPromise(emitFailure(nodeProcessIO, jsonMode ? "json" : "human", {
236
+ command: "(resolve-identity)",
237
+ elapsedMs: 0,
238
+ error
239
+ }));
240
+ return;
241
+ }
556
242
  const deps = buildDirectDeps(identity);
557
243
  await Effect.runPromise(dispatch(deps, {
558
244
  argv,
@@ -576,11 +262,9 @@ const isMainEntrypoint = () => {
576
262
  };
577
263
  if (isMainEntrypoint()) runCli().catch((err) => {
578
264
  process.stderr.write(`error: ${err instanceof Error ? err.message : String(err)}\n`);
579
- process.exitCode = 1;
580
- }).then(() => {
581
- process.exit(process.exitCode ?? 0);
265
+ process.exitCode = ExitCode.GENERIC;
582
266
  });
583
267
  //#endregion
584
- export { runCli };
268
+ export { identityInputsFromArgv, runCli };
585
269
 
586
270
  //# sourceMappingURL=main.mjs.map