@mysten-incubation/devstack 0.0.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 (833) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +94 -0
  3. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  4. package/dist/api/define-capabilities.d.mts +25 -0
  5. package/dist/api/define-capabilities.mjs +19 -0
  6. package/dist/api/define-capabilities.mjs.map +1 -0
  7. package/dist/api/define-devstack-with.d.mts +41 -0
  8. package/dist/api/define-devstack-with.mjs +24 -0
  9. package/dist/api/define-devstack-with.mjs.map +1 -0
  10. package/dist/api/define-devstack.d.mts +62 -0
  11. package/dist/api/define-devstack.mjs +108 -0
  12. package/dist/api/define-devstack.mjs.map +1 -0
  13. package/dist/api/define-plugin.d.mts +1 -0
  14. package/dist/api/inference-network.mjs +122 -0
  15. package/dist/api/inference-network.mjs.map +1 -0
  16. package/dist/api/mode-narrowed-factory.d.mts +26 -0
  17. package/dist/api/mode-narrowed-factory.mjs +8 -0
  18. package/dist/api/mode-narrowed-factory.mjs.map +1 -0
  19. package/dist/api/plugin-errors.mjs +10 -0
  20. package/dist/api/plugin-errors.mjs.map +1 -0
  21. package/dist/api/run-stack.d.mts +82 -0
  22. package/dist/api/run-stack.mjs +127 -0
  23. package/dist/api/run-stack.mjs.map +1 -0
  24. package/dist/build-integrations/playwright/config.d.mts +92 -0
  25. package/dist/build-integrations/playwright/config.mjs +71 -0
  26. package/dist/build-integrations/playwright/config.mjs.map +1 -0
  27. package/dist/build-integrations/playwright/errors.d.mts +82 -0
  28. package/dist/build-integrations/playwright/errors.mjs +43 -0
  29. package/dist/build-integrations/playwright/errors.mjs.map +1 -0
  30. package/dist/build-integrations/playwright/global-setup.d.mts +64 -0
  31. package/dist/build-integrations/playwright/global-setup.mjs +44 -0
  32. package/dist/build-integrations/playwright/global-setup.mjs.map +1 -0
  33. package/dist/build-integrations/playwright/index.d.mts +6 -0
  34. package/dist/build-integrations/playwright/index.mjs +6 -0
  35. package/dist/build-integrations/playwright/stack-context.d.mts +95 -0
  36. package/dist/build-integrations/playwright/stack-context.mjs +277 -0
  37. package/dist/build-integrations/playwright/stack-context.mjs.map +1 -0
  38. package/dist/build-integrations/playwright/wallet-context.d.mts +87 -0
  39. package/dist/build-integrations/playwright/wallet-context.mjs +148 -0
  40. package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -0
  41. package/dist/build-integrations/runtime/cold-start-url.d.mts +67 -0
  42. package/dist/build-integrations/runtime/cold-start-url.mjs +56 -0
  43. package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -0
  44. package/dist/build-integrations/runtime/dapp-kit-slot.mjs +10 -0
  45. package/dist/build-integrations/runtime/dapp-kit-slot.mjs.map +1 -0
  46. package/dist/build-integrations/runtime/discover.d.mts +78 -0
  47. package/dist/build-integrations/runtime/discover.mjs +124 -0
  48. package/dist/build-integrations/runtime/discover.mjs.map +1 -0
  49. package/dist/build-integrations/runtime/endpoint-registry.d.mts +26 -0
  50. package/dist/build-integrations/runtime/endpoint-registry.mjs +41 -0
  51. package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -0
  52. package/dist/build-integrations/runtime/errors.d.mts +64 -0
  53. package/dist/build-integrations/runtime/errors.mjs +51 -0
  54. package/dist/build-integrations/runtime/errors.mjs.map +1 -0
  55. package/dist/build-integrations/runtime/index.d.mts +7 -0
  56. package/dist/build-integrations/runtime/index.mjs +6 -0
  57. package/dist/build-integrations/runtime/read-stack-context.d.mts +38 -0
  58. package/dist/build-integrations/runtime/read-stack-context.mjs +130 -0
  59. package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -0
  60. package/dist/build-integrations/runtime/stack-context.d.mts +53 -0
  61. package/dist/build-integrations/vitest/config.d.mts +62 -0
  62. package/dist/build-integrations/vitest/config.mjs +80 -0
  63. package/dist/build-integrations/vitest/config.mjs.map +1 -0
  64. package/dist/build-integrations/vitest/env.d.mts +48 -0
  65. package/dist/build-integrations/vitest/env.mjs +50 -0
  66. package/dist/build-integrations/vitest/env.mjs.map +1 -0
  67. package/dist/build-integrations/vitest/errors.d.mts +44 -0
  68. package/dist/build-integrations/vitest/errors.mjs +18 -0
  69. package/dist/build-integrations/vitest/errors.mjs.map +1 -0
  70. package/dist/build-integrations/vitest/index.d.mts +6 -0
  71. package/dist/build-integrations/vitest/index.mjs +6 -0
  72. package/dist/build-integrations/vitest/setup.d.mts +53 -0
  73. package/dist/build-integrations/vitest/setup.mjs +56 -0
  74. package/dist/build-integrations/vitest/setup.mjs.map +1 -0
  75. package/dist/build-integrations/vitest/stack-context.d.mts +58 -0
  76. package/dist/build-integrations/vitest/stack-context.mjs +67 -0
  77. package/dist/build-integrations/vitest/stack-context.mjs.map +1 -0
  78. package/dist/cli/main.d.mts +5 -0
  79. package/dist/cli/main.mjs +586 -0
  80. package/dist/cli/main.mjs.map +1 -0
  81. package/dist/cli/prune-direct.mjs +216 -0
  82. package/dist/cli/prune-direct.mjs.map +1 -0
  83. package/dist/cli/snapshot-reader.mjs +73 -0
  84. package/dist/cli/snapshot-reader.mjs.map +1 -0
  85. package/dist/cli/up-lifecycle.mjs +28 -0
  86. package/dist/cli/up-lifecycle.mjs.map +1 -0
  87. package/dist/contracts/capability-decl.d.mts +42 -0
  88. package/dist/contracts/chain-probe.d.mts +26 -0
  89. package/dist/contracts/chain-probe.mjs +8 -0
  90. package/dist/contracts/chain-probe.mjs.map +1 -0
  91. package/dist/contracts/codegenable.d.mts +43 -0
  92. package/dist/contracts/container-runtime.d.mts +245 -0
  93. package/dist/contracts/liveness-classifier.d.mts +19 -0
  94. package/dist/contracts/network-resolver.d.mts +15 -0
  95. package/dist/contracts/network-resolver.mjs +7 -0
  96. package/dist/contracts/network-resolver.mjs.map +1 -0
  97. package/dist/contracts/projection.d.mts +15 -0
  98. package/dist/contracts/routable.d.mts +53 -0
  99. package/dist/contracts/snapshotable.d.mts +39 -0
  100. package/dist/contracts/strategy-contributor.d.mts +26 -0
  101. package/dist/index.d.mts +89 -0
  102. package/dist/index.mjs +37 -0
  103. package/dist/orchestrators/codegen/bindings.d.mts +2 -0
  104. package/dist/orchestrators/codegen/bindings.mjs +340 -0
  105. package/dist/orchestrators/codegen/bindings.mjs.map +1 -0
  106. package/dist/orchestrators/codegen/emit.mjs +56 -0
  107. package/dist/orchestrators/codegen/emit.mjs.map +1 -0
  108. package/dist/orchestrators/codegen/errors.d.mts +1 -0
  109. package/dist/orchestrators/codegen/errors.mjs +66 -0
  110. package/dist/orchestrators/codegen/errors.mjs.map +1 -0
  111. package/dist/orchestrators/codegen/extras.mjs +16 -0
  112. package/dist/orchestrators/codegen/extras.mjs.map +1 -0
  113. package/dist/orchestrators/codegen/format.mjs +109 -0
  114. package/dist/orchestrators/codegen/format.mjs.map +1 -0
  115. package/dist/orchestrators/codegen/gitignore.mjs +67 -0
  116. package/dist/orchestrators/codegen/gitignore.mjs.map +1 -0
  117. package/dist/orchestrators/codegen/paths.d.mts +1 -0
  118. package/dist/orchestrators/codegen/paths.mjs +33 -0
  119. package/dist/orchestrators/codegen/paths.mjs.map +1 -0
  120. package/dist/orchestrators/codegen/permissions.mjs +6 -0
  121. package/dist/orchestrators/codegen/permissions.mjs.map +1 -0
  122. package/dist/orchestrators/codegen/service.d.mts +1 -0
  123. package/dist/orchestrators/codegen/service.mjs +276 -0
  124. package/dist/orchestrators/codegen/service.mjs.map +1 -0
  125. package/dist/orchestrators/router/cleanup.mjs +58 -0
  126. package/dist/orchestrators/router/cleanup.mjs.map +1 -0
  127. package/dist/orchestrators/router/cors.mjs +31 -0
  128. package/dist/orchestrators/router/cors.mjs.map +1 -0
  129. package/dist/orchestrators/router/entrypoints.d.mts +1 -0
  130. package/dist/orchestrators/router/entrypoints.mjs +80 -0
  131. package/dist/orchestrators/router/entrypoints.mjs.map +1 -0
  132. package/dist/orchestrators/router/errors.d.mts +1 -0
  133. package/dist/orchestrators/router/errors.mjs +103 -0
  134. package/dist/orchestrators/router/errors.mjs.map +1 -0
  135. package/dist/orchestrators/router/file-provider.d.mts +1 -0
  136. package/dist/orchestrators/router/file-provider.mjs +320 -0
  137. package/dist/orchestrators/router/file-provider.mjs.map +1 -0
  138. package/dist/orchestrators/router/hostname.d.mts +1 -0
  139. package/dist/orchestrators/router/hostname.mjs +107 -0
  140. package/dist/orchestrators/router/hostname.mjs.map +1 -0
  141. package/dist/orchestrators/router/index.d.mts +1 -0
  142. package/dist/orchestrators/router/profile.d.mts +1 -0
  143. package/dist/orchestrators/router/profile.mjs +109 -0
  144. package/dist/orchestrators/router/profile.mjs.map +1 -0
  145. package/dist/orchestrators/router/service.d.mts +3 -0
  146. package/dist/orchestrators/router/service.mjs +421 -0
  147. package/dist/orchestrators/router/service.mjs.map +1 -0
  148. package/dist/orchestrators/router/traefik-container.d.mts +1 -0
  149. package/dist/orchestrators/router/traefik-container.mjs +229 -0
  150. package/dist/orchestrators/router/traefik-container.mjs.map +1 -0
  151. package/dist/orchestrators/runtime-composition.d.mts +10 -0
  152. package/dist/orchestrators/runtime-composition.mjs +168 -0
  153. package/dist/orchestrators/runtime-composition.mjs.map +1 -0
  154. package/dist/orchestrators/snapshot/capture.d.mts +1 -0
  155. package/dist/orchestrators/snapshot/capture.mjs +350 -0
  156. package/dist/orchestrators/snapshot/capture.mjs.map +1 -0
  157. package/dist/orchestrators/snapshot/descriptor.d.mts +1 -0
  158. package/dist/orchestrators/snapshot/descriptor.mjs +109 -0
  159. package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -0
  160. package/dist/orchestrators/snapshot/identity-guard.d.mts +1 -0
  161. package/dist/orchestrators/snapshot/identity-guard.mjs +132 -0
  162. package/dist/orchestrators/snapshot/identity-guard.mjs.map +1 -0
  163. package/dist/orchestrators/snapshot/image-bundle-tags.mjs +207 -0
  164. package/dist/orchestrators/snapshot/image-bundle-tags.mjs.map +1 -0
  165. package/dist/orchestrators/snapshot/index.d.mts +1 -0
  166. package/dist/orchestrators/snapshot/integrity.d.mts +1 -0
  167. package/dist/orchestrators/snapshot/integrity.mjs +74 -0
  168. package/dist/orchestrators/snapshot/integrity.mjs.map +1 -0
  169. package/dist/orchestrators/snapshot/prune.d.mts +1 -0
  170. package/dist/orchestrators/snapshot/prune.mjs +110 -0
  171. package/dist/orchestrators/snapshot/prune.mjs.map +1 -0
  172. package/dist/orchestrators/snapshot/restore.d.mts +1 -0
  173. package/dist/orchestrators/snapshot/restore.mjs +404 -0
  174. package/dist/orchestrators/snapshot/restore.mjs.map +1 -0
  175. package/dist/orchestrators/snapshot/service.d.mts +1 -0
  176. package/dist/orchestrators/snapshot/service.mjs +296 -0
  177. package/dist/orchestrators/snapshot/service.mjs.map +1 -0
  178. package/dist/orchestrators/snapshot/state-document.mjs +18 -0
  179. package/dist/orchestrators/snapshot/state-document.mjs.map +1 -0
  180. package/dist/orchestrators/snapshot/wipe.d.mts +1 -0
  181. package/dist/orchestrators/snapshot/wipe.mjs +59 -0
  182. package/dist/orchestrators/snapshot/wipe.mjs.map +1 -0
  183. package/dist/plugins/account/codegen.d.mts +12 -0
  184. package/dist/plugins/account/codegen.mjs +22 -0
  185. package/dist/plugins/account/codegen.mjs.map +1 -0
  186. package/dist/plugins/account/errors.d.mts +44 -0
  187. package/dist/plugins/account/errors.mjs +16 -0
  188. package/dist/plugins/account/errors.mjs.map +1 -0
  189. package/dist/plugins/account/funding.d.mts +94 -0
  190. package/dist/plugins/account/funding.mjs +199 -0
  191. package/dist/plugins/account/funding.mjs.map +1 -0
  192. package/dist/plugins/account/index.d.mts +54 -0
  193. package/dist/plugins/account/index.mjs +151 -0
  194. package/dist/plugins/account/index.mjs.map +1 -0
  195. package/dist/plugins/account/keypair.d.mts +32 -0
  196. package/dist/plugins/account/keypair.mjs +99 -0
  197. package/dist/plugins/account/keypair.mjs.map +1 -0
  198. package/dist/plugins/account/lease.mjs +21 -0
  199. package/dist/plugins/account/lease.mjs.map +1 -0
  200. package/dist/plugins/account/registry.d.mts +33 -0
  201. package/dist/plugins/account/registry.mjs +36 -0
  202. package/dist/plugins/account/registry.mjs.map +1 -0
  203. package/dist/plugins/account/service.d.mts +104 -0
  204. package/dist/plugins/account/service.mjs +405 -0
  205. package/dist/plugins/account/service.mjs.map +1 -0
  206. package/dist/plugins/account/snapshot.mjs +33 -0
  207. package/dist/plugins/account/snapshot.mjs.map +1 -0
  208. package/dist/plugins/account/variants/env.mjs +24 -0
  209. package/dist/plugins/account/variants/env.mjs.map +1 -0
  210. package/dist/plugins/account/variants/ephemeral.mjs +72 -0
  211. package/dist/plugins/account/variants/ephemeral.mjs.map +1 -0
  212. package/dist/plugins/account/variants/impersonate.d.mts +16 -0
  213. package/dist/plugins/account/variants/impersonate.mjs +48 -0
  214. package/dist/plugins/account/variants/impersonate.mjs.map +1 -0
  215. package/dist/plugins/account/variants/inline.mjs +13 -0
  216. package/dist/plugins/account/variants/inline.mjs.map +1 -0
  217. package/dist/plugins/account/variants/keystore.mjs +93 -0
  218. package/dist/plugins/account/variants/keystore.mjs.map +1 -0
  219. package/dist/plugins/account/variants/signer.mjs +31 -0
  220. package/dist/plugins/account/variants/signer.mjs.map +1 -0
  221. package/dist/plugins/action/build-context.d.mts +41 -0
  222. package/dist/plugins/action/discriminator.d.mts +20 -0
  223. package/dist/plugins/action/discriminator.mjs +13 -0
  224. package/dist/plugins/action/discriminator.mjs.map +1 -0
  225. package/dist/plugins/action/errors.d.mts +31 -0
  226. package/dist/plugins/action/errors.mjs +13 -0
  227. package/dist/plugins/action/errors.mjs.map +1 -0
  228. package/dist/plugins/action/execute.d.mts +2 -0
  229. package/dist/plugins/action/execute.mjs +145 -0
  230. package/dist/plugins/action/execute.mjs.map +1 -0
  231. package/dist/plugins/action/index.d.mts +56 -0
  232. package/dist/plugins/action/index.mjs +82 -0
  233. package/dist/plugins/action/index.mjs.map +1 -0
  234. package/dist/plugins/action/service.d.mts +26 -0
  235. package/dist/plugins/action/service.mjs +84 -0
  236. package/dist/plugins/action/service.mjs.map +1 -0
  237. package/dist/plugins/coin/address-resolution.d.mts +34 -0
  238. package/dist/plugins/coin/address-resolution.mjs +80 -0
  239. package/dist/plugins/coin/address-resolution.mjs.map +1 -0
  240. package/dist/plugins/coin/codegen.d.mts +16 -0
  241. package/dist/plugins/coin/codegen.mjs +21 -0
  242. package/dist/plugins/coin/codegen.mjs.map +1 -0
  243. package/dist/plugins/coin/discovery.d.mts +26 -0
  244. package/dist/plugins/coin/discovery.mjs +112 -0
  245. package/dist/plugins/coin/discovery.mjs.map +1 -0
  246. package/dist/plugins/coin/errors.d.mts +48 -0
  247. package/dist/plugins/coin/errors.mjs +13 -0
  248. package/dist/plugins/coin/errors.mjs.map +1 -0
  249. package/dist/plugins/coin/index.d.mts +95 -0
  250. package/dist/plugins/coin/index.mjs +172 -0
  251. package/dist/plugins/coin/index.mjs.map +1 -0
  252. package/dist/plugins/coin/metadata.d.mts +15 -0
  253. package/dist/plugins/coin/metadata.mjs +99 -0
  254. package/dist/plugins/coin/metadata.mjs.map +1 -0
  255. package/dist/plugins/coin/mint.d.mts +34 -0
  256. package/dist/plugins/coin/mint.mjs +164 -0
  257. package/dist/plugins/coin/mint.mjs.map +1 -0
  258. package/dist/plugins/coin/registry.d.mts +1 -0
  259. package/dist/plugins/coin/registry.mjs +37 -0
  260. package/dist/plugins/coin/registry.mjs.map +1 -0
  261. package/dist/plugins/coin/service.d.mts +47 -0
  262. package/dist/plugins/coin/service.mjs +51 -0
  263. package/dist/plugins/coin/service.mjs.map +1 -0
  264. package/dist/plugins/coin/snapshot.mjs +19 -0
  265. package/dist/plugins/coin/snapshot.mjs.map +1 -0
  266. package/dist/plugins/coin/type-strings.mjs +49 -0
  267. package/dist/plugins/coin/type-strings.mjs.map +1 -0
  268. package/dist/plugins/deepbook/codegen.d.mts +39 -0
  269. package/dist/plugins/deepbook/codegen.mjs +15 -0
  270. package/dist/plugins/deepbook/codegen.mjs.map +1 -0
  271. package/dist/plugins/deepbook/deploy.mjs +437 -0
  272. package/dist/plugins/deepbook/deploy.mjs.map +1 -0
  273. package/dist/plugins/deepbook/errors.d.mts +29 -0
  274. package/dist/plugins/deepbook/errors.mjs +26 -0
  275. package/dist/plugins/deepbook/errors.mjs.map +1 -0
  276. package/dist/plugins/deepbook/faucet-strategy.d.mts +8 -0
  277. package/dist/plugins/deepbook/faucet-strategy.mjs +81 -0
  278. package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -0
  279. package/dist/plugins/deepbook/index.d.mts +171 -0
  280. package/dist/plugins/deepbook/index.mjs +359 -0
  281. package/dist/plugins/deepbook/index.mjs.map +1 -0
  282. package/dist/plugins/deepbook/plugin-key.mjs +7 -0
  283. package/dist/plugins/deepbook/plugin-key.mjs.map +1 -0
  284. package/dist/plugins/deepbook/pyth/index.mjs +226 -0
  285. package/dist/plugins/deepbook/pyth/index.mjs.map +1 -0
  286. package/dist/plugins/deepbook/routable.mjs +21 -0
  287. package/dist/plugins/deepbook/routable.mjs.map +1 -0
  288. package/dist/plugins/deepbook/snapshot.mjs +49 -0
  289. package/dist/plugins/deepbook/snapshot.mjs.map +1 -0
  290. package/dist/plugins/deepbook/types.d.mts +125 -0
  291. package/dist/plugins/deepbook/types.mjs +12 -0
  292. package/dist/plugins/deepbook/types.mjs.map +1 -0
  293. package/dist/plugins/faucet/dispatcher.d.mts +9 -0
  294. package/dist/plugins/faucet/dispatcher.mjs +13 -0
  295. package/dist/plugins/faucet/dispatcher.mjs.map +1 -0
  296. package/dist/plugins/faucet/errors.d.mts +86 -0
  297. package/dist/plugins/faucet/errors.mjs +19 -0
  298. package/dist/plugins/faucet/errors.mjs.map +1 -0
  299. package/dist/plugins/faucet/http.mjs +127 -0
  300. package/dist/plugins/faucet/http.mjs.map +1 -0
  301. package/dist/plugins/faucet/index.d.mts +43 -0
  302. package/dist/plugins/faucet/index.mjs +42 -0
  303. package/dist/plugins/faucet/index.mjs.map +1 -0
  304. package/dist/plugins/faucet/service.d.mts +20 -0
  305. package/dist/plugins/faucet/strategies/sui-local.d.mts +23 -0
  306. package/dist/plugins/faucet/strategies/sui-local.mjs +29 -0
  307. package/dist/plugins/faucet/strategies/sui-local.mjs.map +1 -0
  308. package/dist/plugins/host-service/errors.d.mts +27 -0
  309. package/dist/plugins/host-service/errors.mjs +14 -0
  310. package/dist/plugins/host-service/errors.mjs.map +1 -0
  311. package/dist/plugins/host-service/index.d.mts +10 -0
  312. package/dist/plugins/host-service/index.mjs +48 -0
  313. package/dist/plugins/host-service/index.mjs.map +1 -0
  314. package/dist/plugins/host-service/routable.mjs +24 -0
  315. package/dist/plugins/host-service/routable.mjs.map +1 -0
  316. package/dist/plugins/host-service/service.d.mts +49 -0
  317. package/dist/plugins/host-service/service.mjs +375 -0
  318. package/dist/plugins/host-service/service.mjs.map +1 -0
  319. package/dist/plugins/package/build.d.mts +1 -0
  320. package/dist/plugins/package/build.mjs +24 -0
  321. package/dist/plugins/package/build.mjs.map +1 -0
  322. package/dist/plugins/package/codegen.d.mts +19 -0
  323. package/dist/plugins/package/codegen.mjs +41 -0
  324. package/dist/plugins/package/codegen.mjs.map +1 -0
  325. package/dist/plugins/package/dep-resolution.mjs +10 -0
  326. package/dist/plugins/package/dep-resolution.mjs.map +1 -0
  327. package/dist/plugins/package/errors.d.mts +34 -0
  328. package/dist/plugins/package/errors.mjs +13 -0
  329. package/dist/plugins/package/errors.mjs.map +1 -0
  330. package/dist/plugins/package/index.d.mts +109 -0
  331. package/dist/plugins/package/index.mjs +207 -0
  332. package/dist/plugins/package/index.mjs.map +1 -0
  333. package/dist/plugins/package/mode-known.mjs +41 -0
  334. package/dist/plugins/package/mode-known.mjs.map +1 -0
  335. package/dist/plugins/package/mode-local.d.mts +1 -0
  336. package/dist/plugins/package/mode-local.mjs +183 -0
  337. package/dist/plugins/package/mode-local.mjs.map +1 -0
  338. package/dist/plugins/package/publish-executor.mjs +202 -0
  339. package/dist/plugins/package/publish-executor.mjs.map +1 -0
  340. package/dist/plugins/package/publish-output.d.mts +28 -0
  341. package/dist/plugins/package/publish-output.mjs +45 -0
  342. package/dist/plugins/package/publish-output.mjs.map +1 -0
  343. package/dist/plugins/package/registry.d.mts +25 -0
  344. package/dist/plugins/package/registry.mjs +30 -0
  345. package/dist/plugins/package/registry.mjs.map +1 -0
  346. package/dist/plugins/package/service.mjs +20 -0
  347. package/dist/plugins/package/service.mjs.map +1 -0
  348. package/dist/plugins/package/snapshot.mjs +25 -0
  349. package/dist/plugins/package/snapshot.mjs.map +1 -0
  350. package/dist/plugins/postgres/codegen.mjs +42 -0
  351. package/dist/plugins/postgres/codegen.mjs.map +1 -0
  352. package/dist/plugins/postgres/connection.d.mts +33 -0
  353. package/dist/plugins/postgres/connection.mjs +19 -0
  354. package/dist/plugins/postgres/connection.mjs.map +1 -0
  355. package/dist/plugins/postgres/db-ensure.mjs +100 -0
  356. package/dist/plugins/postgres/db-ensure.mjs.map +1 -0
  357. package/dist/plugins/postgres/errors.d.mts +55 -0
  358. package/dist/plugins/postgres/errors.mjs +29 -0
  359. package/dist/plugins/postgres/errors.mjs.map +1 -0
  360. package/dist/plugins/postgres/index.d.mts +37 -0
  361. package/dist/plugins/postgres/index.mjs +75 -0
  362. package/dist/plugins/postgres/index.mjs.map +1 -0
  363. package/dist/plugins/postgres/routable.mjs +33 -0
  364. package/dist/plugins/postgres/routable.mjs.map +1 -0
  365. package/dist/plugins/postgres/service.d.mts +50 -0
  366. package/dist/plugins/postgres/service.mjs +145 -0
  367. package/dist/plugins/postgres/service.mjs.map +1 -0
  368. package/dist/plugins/postgres/snapshot.d.mts +1 -0
  369. package/dist/plugins/postgres/snapshot.mjs +32 -0
  370. package/dist/plugins/postgres/snapshot.mjs.map +1 -0
  371. package/dist/plugins/router-entrypoints.mjs +21 -0
  372. package/dist/plugins/router-entrypoints.mjs.map +1 -0
  373. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +59 -0
  374. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -0
  375. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +132 -0
  376. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -0
  377. package/dist/plugins/seal/codegen.d.mts +19 -0
  378. package/dist/plugins/seal/codegen.mjs +16 -0
  379. package/dist/plugins/seal/codegen.mjs.map +1 -0
  380. package/dist/plugins/seal/config-render.mjs +82 -0
  381. package/dist/plugins/seal/config-render.mjs.map +1 -0
  382. package/dist/plugins/seal/deploy.mjs +198 -0
  383. package/dist/plugins/seal/deploy.mjs.map +1 -0
  384. package/dist/plugins/seal/errors.d.mts +52 -0
  385. package/dist/plugins/seal/errors.mjs +19 -0
  386. package/dist/plugins/seal/errors.mjs.map +1 -0
  387. package/dist/plugins/seal/index.d.mts +161 -0
  388. package/dist/plugins/seal/index.mjs +235 -0
  389. package/dist/plugins/seal/index.mjs.map +1 -0
  390. package/dist/plugins/seal/key-manager.d.mts +22 -0
  391. package/dist/plugins/seal/key-manager.mjs +22 -0
  392. package/dist/plugins/seal/key-manager.mjs.map +1 -0
  393. package/dist/plugins/seal/key-server.mjs +175 -0
  394. package/dist/plugins/seal/key-server.mjs.map +1 -0
  395. package/dist/plugins/seal/keygen.mjs +96 -0
  396. package/dist/plugins/seal/keygen.mjs.map +1 -0
  397. package/dist/plugins/seal/mode/fork-known.d.mts +8 -0
  398. package/dist/plugins/seal/mode/fork-known.mjs +23 -0
  399. package/dist/plugins/seal/mode/fork-known.mjs.map +1 -0
  400. package/dist/plugins/seal/mode/live.d.mts +18 -0
  401. package/dist/plugins/seal/mode/live.mjs +64 -0
  402. package/dist/plugins/seal/mode/live.mjs.map +1 -0
  403. package/dist/plugins/seal/mode/local-keygen.mjs +180 -0
  404. package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -0
  405. package/dist/plugins/seal/plugin-key.mjs +7 -0
  406. package/dist/plugins/seal/plugin-key.mjs.map +1 -0
  407. package/dist/plugins/seal/registry-publish.d.mts +43 -0
  408. package/dist/plugins/seal/registry-publish.mjs +9 -0
  409. package/dist/plugins/seal/registry-publish.mjs.map +1 -0
  410. package/dist/plugins/seal/routable.mjs +57 -0
  411. package/dist/plugins/seal/routable.mjs.map +1 -0
  412. package/dist/plugins/seal/service.mjs +17 -0
  413. package/dist/plugins/seal/service.mjs.map +1 -0
  414. package/dist/plugins/seal/snapshot.mjs +51 -0
  415. package/dist/plugins/seal/snapshot.mjs.map +1 -0
  416. package/dist/plugins/sui/auto-tick.mjs +45 -0
  417. package/dist/plugins/sui/auto-tick.mjs.map +1 -0
  418. package/dist/plugins/sui/chain-build-container.d.mts +1 -0
  419. package/dist/plugins/sui/chain-probe.d.mts +85 -0
  420. package/dist/plugins/sui/chain-probe.mjs +104 -0
  421. package/dist/plugins/sui/chain-probe.mjs.map +1 -0
  422. package/dist/plugins/sui/codegen.d.mts +14 -0
  423. package/dist/plugins/sui/codegen.mjs +26 -0
  424. package/dist/plugins/sui/codegen.mjs.map +1 -0
  425. package/dist/plugins/sui/errors.d.mts +74 -0
  426. package/dist/plugins/sui/errors.mjs +28 -0
  427. package/dist/plugins/sui/errors.mjs.map +1 -0
  428. package/dist/plugins/sui/fork-orchestration.mjs +24 -0
  429. package/dist/plugins/sui/fork-orchestration.mjs.map +1 -0
  430. package/dist/plugins/sui/fork-transaction.mjs +96 -0
  431. package/dist/plugins/sui/fork-transaction.mjs.map +1 -0
  432. package/dist/plugins/sui/index.d.mts +318 -0
  433. package/dist/plugins/sui/index.mjs +182 -0
  434. package/dist/plugins/sui/index.mjs.map +1 -0
  435. package/dist/plugins/sui/mode/external.mjs +60 -0
  436. package/dist/plugins/sui/mode/external.mjs.map +1 -0
  437. package/dist/plugins/sui/mode/fork.mjs +283 -0
  438. package/dist/plugins/sui/mode/fork.mjs.map +1 -0
  439. package/dist/plugins/sui/mode/live.mjs +103 -0
  440. package/dist/plugins/sui/mode/live.mjs.map +1 -0
  441. package/dist/plugins/sui/mode/local.mjs +293 -0
  442. package/dist/plugins/sui/mode/local.mjs.map +1 -0
  443. package/dist/plugins/sui/mode/shared-boot.mjs +254 -0
  444. package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -0
  445. package/dist/plugins/sui/mode/shared.d.mts +103 -0
  446. package/dist/plugins/sui/mode/shared.mjs +12 -0
  447. package/dist/plugins/sui/mode/shared.mjs.map +1 -0
  448. package/dist/plugins/sui/mode/spec.d.mts +94 -0
  449. package/dist/plugins/sui/network-resolver.d.mts +23 -0
  450. package/dist/plugins/sui/routable.mjs +88 -0
  451. package/dist/plugins/sui/routable.mjs.map +1 -0
  452. package/dist/plugins/sui/seed-objects.d.mts +18 -0
  453. package/dist/plugins/sui/seed-objects.mjs +25 -0
  454. package/dist/plugins/sui/seed-objects.mjs.map +1 -0
  455. package/dist/plugins/sui/service.mjs +38 -0
  456. package/dist/plugins/sui/service.mjs.map +1 -0
  457. package/dist/plugins/sui/snapshot.mjs +53 -0
  458. package/dist/plugins/sui/snapshot.mjs.map +1 -0
  459. package/dist/plugins/wallet/codegen.d.mts +33 -0
  460. package/dist/plugins/wallet/codegen.mjs +34 -0
  461. package/dist/plugins/wallet/codegen.mjs.map +1 -0
  462. package/dist/plugins/wallet/errors.d.mts +66 -0
  463. package/dist/plugins/wallet/errors.mjs +16 -0
  464. package/dist/plugins/wallet/errors.mjs.map +1 -0
  465. package/dist/plugins/wallet/index.d.mts +63 -0
  466. package/dist/plugins/wallet/index.mjs +126 -0
  467. package/dist/plugins/wallet/index.mjs.map +1 -0
  468. package/dist/plugins/wallet/origin-policy.d.mts +1 -0
  469. package/dist/plugins/wallet/origin-policy.mjs +65 -0
  470. package/dist/plugins/wallet/origin-policy.mjs.map +1 -0
  471. package/dist/plugins/wallet/pairing.d.mts +11 -0
  472. package/dist/plugins/wallet/pairing.mjs +125 -0
  473. package/dist/plugins/wallet/pairing.mjs.map +1 -0
  474. package/dist/plugins/wallet/protocol.d.mts +1 -0
  475. package/dist/plugins/wallet/protocol.mjs +96 -0
  476. package/dist/plugins/wallet/protocol.mjs.map +1 -0
  477. package/dist/plugins/wallet/routable.mjs +32 -0
  478. package/dist/plugins/wallet/routable.mjs.map +1 -0
  479. package/dist/plugins/wallet/server.d.mts +12 -0
  480. package/dist/plugins/wallet/server.mjs +317 -0
  481. package/dist/plugins/wallet/server.mjs.map +1 -0
  482. package/dist/plugins/wallet/service.d.mts +68 -0
  483. package/dist/plugins/wallet/service.mjs +97 -0
  484. package/dist/plugins/wallet/service.mjs.map +1 -0
  485. package/dist/plugins/wallet/snapshot.d.mts +1 -0
  486. package/dist/plugins/wallet/snapshot.mjs +14 -0
  487. package/dist/plugins/wallet/snapshot.mjs.map +1 -0
  488. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +42 -0
  489. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -0
  490. package/dist/plugins/walrus/codegen.d.mts +38 -0
  491. package/dist/plugins/walrus/codegen.mjs +34 -0
  492. package/dist/plugins/walrus/codegen.mjs.map +1 -0
  493. package/dist/plugins/walrus/deploy-paths.mjs +14 -0
  494. package/dist/plugins/walrus/deploy-paths.mjs.map +1 -0
  495. package/dist/plugins/walrus/deploy.d.mts +1 -0
  496. package/dist/plugins/walrus/deploy.mjs +224 -0
  497. package/dist/plugins/walrus/deploy.mjs.map +1 -0
  498. package/dist/plugins/walrus/errors.d.mts +38 -0
  499. package/dist/plugins/walrus/errors.mjs +26 -0
  500. package/dist/plugins/walrus/errors.mjs.map +1 -0
  501. package/dist/plugins/walrus/faucet-strategy.d.mts +12 -0
  502. package/dist/plugins/walrus/faucet-strategy.mjs +62 -0
  503. package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -0
  504. package/dist/plugins/walrus/index.d.mts +177 -0
  505. package/dist/plugins/walrus/index.mjs +284 -0
  506. package/dist/plugins/walrus/index.mjs.map +1 -0
  507. package/dist/plugins/walrus/mode/known-deploy.d.mts +25 -0
  508. package/dist/plugins/walrus/mode/known-deploy.mjs +71 -0
  509. package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -0
  510. package/dist/plugins/walrus/mode/local-cluster.d.mts +34 -0
  511. package/dist/plugins/walrus/mode/local-cluster.mjs +153 -0
  512. package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -0
  513. package/dist/plugins/walrus/plugin-key.mjs +7 -0
  514. package/dist/plugins/walrus/plugin-key.mjs.map +1 -0
  515. package/dist/plugins/walrus/registry-publish.d.mts +24 -0
  516. package/dist/plugins/walrus/registry-publish.mjs +7 -0
  517. package/dist/plugins/walrus/registry-publish.mjs.map +1 -0
  518. package/dist/plugins/walrus/routable.mjs +99 -0
  519. package/dist/plugins/walrus/routable.mjs.map +1 -0
  520. package/dist/plugins/walrus/service.mjs +20 -0
  521. package/dist/plugins/walrus/service.mjs.map +1 -0
  522. package/dist/plugins/walrus/snapshot.mjs +53 -0
  523. package/dist/plugins/walrus/snapshot.mjs.map +1 -0
  524. package/dist/plugins/walrus/storage-nodes.d.mts +15 -0
  525. package/dist/plugins/walrus/storage-nodes.mjs +154 -0
  526. package/dist/plugins/walrus/storage-nodes.mjs.map +1 -0
  527. package/dist/plugins/walrus/wal-swap.d.mts +2 -0
  528. package/dist/plugins/walrus/wal-swap.mjs +58 -0
  529. package/dist/plugins/walrus/wal-swap.mjs.map +1 -0
  530. package/dist/primitives/artifact-publisher.d.mts +12 -0
  531. package/dist/primitives/cache.d.mts +1 -0
  532. package/dist/runtime/built-in-plugin-layers.mjs +49 -0
  533. package/dist/runtime/built-in-plugin-layers.mjs.map +1 -0
  534. package/dist/runtime/docker/client.d.mts +2 -0
  535. package/dist/runtime/docker/client.mjs +54 -0
  536. package/dist/runtime/docker/client.mjs.map +1 -0
  537. package/dist/runtime/docker/container.d.mts +1 -0
  538. package/dist/runtime/docker/container.mjs +562 -0
  539. package/dist/runtime/docker/container.mjs.map +1 -0
  540. package/dist/runtime/docker/errors.d.mts +1 -0
  541. package/dist/runtime/docker/errors.mjs +187 -0
  542. package/dist/runtime/docker/errors.mjs.map +1 -0
  543. package/dist/runtime/docker/exec.d.mts +1 -0
  544. package/dist/runtime/docker/exec.mjs +63 -0
  545. package/dist/runtime/docker/exec.mjs.map +1 -0
  546. package/dist/runtime/docker/image.d.mts +1 -0
  547. package/dist/runtime/docker/image.mjs +278 -0
  548. package/dist/runtime/docker/image.mjs.map +1 -0
  549. package/dist/runtime/docker/index.d.mts +1 -0
  550. package/dist/runtime/docker/inventory.d.mts +1 -0
  551. package/dist/runtime/docker/inventory.mjs +167 -0
  552. package/dist/runtime/docker/inventory.mjs.map +1 -0
  553. package/dist/runtime/docker/labels.d.mts +1 -0
  554. package/dist/runtime/docker/labels.mjs +97 -0
  555. package/dist/runtime/docker/labels.mjs.map +1 -0
  556. package/dist/runtime/docker/logs.d.mts +1 -0
  557. package/dist/runtime/docker/logs.mjs +34 -0
  558. package/dist/runtime/docker/logs.mjs.map +1 -0
  559. package/dist/runtime/docker/network.d.mts +1 -0
  560. package/dist/runtime/docker/network.mjs +168 -0
  561. package/dist/runtime/docker/network.mjs.map +1 -0
  562. package/dist/runtime/docker/service.d.mts +9 -0
  563. package/dist/runtime/docker/service.mjs +266 -0
  564. package/dist/runtime/docker/service.mjs.map +1 -0
  565. package/dist/runtime/docker/sweep.d.mts +1 -0
  566. package/dist/runtime/docker/sweep.mjs +220 -0
  567. package/dist/runtime/docker/sweep.mjs.map +1 -0
  568. package/dist/runtime/docker/volume.d.mts +1 -0
  569. package/dist/runtime/docker/volume.mjs +24 -0
  570. package/dist/runtime/docker/volume.mjs.map +1 -0
  571. package/dist/runtime/docker/wrap.d.mts +1 -0
  572. package/dist/runtime/docker/wrap.mjs +131 -0
  573. package/dist/runtime/docker/wrap.mjs.map +1 -0
  574. package/dist/substrate/brand.d.mts +24 -0
  575. package/dist/substrate/brand.mjs +14 -0
  576. package/dist/substrate/brand.mjs.map +1 -0
  577. package/dist/substrate/cross-process.d.mts +1 -0
  578. package/dist/substrate/cross-process.mjs +28 -0
  579. package/dist/substrate/cross-process.mjs.map +1 -0
  580. package/dist/substrate/events.d.mts +117 -0
  581. package/dist/substrate/identity.d.mts +13 -0
  582. package/dist/substrate/lifecycle.d.mts +12 -0
  583. package/dist/substrate/manifest.d.mts +39 -0
  584. package/dist/substrate/manifest.mjs +33 -0
  585. package/dist/substrate/manifest.mjs.map +1 -0
  586. package/dist/substrate/network.d.mts +34 -0
  587. package/dist/substrate/options.d.mts +23 -0
  588. package/dist/substrate/plugin.d.mts +101 -0
  589. package/dist/substrate/plugin.mjs +61 -0
  590. package/dist/substrate/plugin.mjs.map +1 -0
  591. package/dist/substrate/projection.d.mts +100 -0
  592. package/dist/substrate/runtime/artifact-publisher/index.mjs +76 -0
  593. package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -0
  594. package/dist/substrate/runtime/atomic-write.mjs +106 -0
  595. package/dist/substrate/runtime/atomic-write.mjs.map +1 -0
  596. package/dist/substrate/runtime/cache/index.d.mts +1 -0
  597. package/dist/substrate/runtime/cache/schema.d.mts +1 -0
  598. package/dist/substrate/runtime/cache/schema.mjs +22 -0
  599. package/dist/substrate/runtime/cache/schema.mjs.map +1 -0
  600. package/dist/substrate/runtime/cache/service.d.mts +1 -0
  601. package/dist/substrate/runtime/cache/service.mjs +89 -0
  602. package/dist/substrate/runtime/cache/service.mjs.map +1 -0
  603. package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -0
  604. package/dist/substrate/runtime/capability-sinks/layer.d.mts +1 -0
  605. package/dist/substrate/runtime/capability-sinks/layer.mjs +31 -0
  606. package/dist/substrate/runtime/capability-sinks/layer.mjs.map +1 -0
  607. package/dist/substrate/runtime/capability-sinks/service.d.mts +36 -0
  608. package/dist/substrate/runtime/capability-sinks/service.mjs +74 -0
  609. package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -0
  610. package/dist/substrate/runtime/config-validation.d.mts +38 -0
  611. package/dist/substrate/runtime/config-validation.mjs +137 -0
  612. package/dist/substrate/runtime/config-validation.mjs.map +1 -0
  613. package/dist/substrate/runtime/context-helpers.mjs +32 -0
  614. package/dist/substrate/runtime/context-helpers.mjs.map +1 -0
  615. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +128 -0
  616. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -0
  617. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +136 -0
  618. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -0
  619. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +49 -0
  620. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -0
  621. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +9 -0
  622. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs.map +1 -0
  623. package/dist/substrate/runtime/cross-process/liveness.mjs +119 -0
  624. package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -0
  625. package/dist/substrate/runtime/cross-process/roster.mjs +275 -0
  626. package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -0
  627. package/dist/substrate/runtime/cross-process/snapshot-reservation.d.mts +1 -0
  628. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +117 -0
  629. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -0
  630. package/dist/substrate/runtime/cross-process/stack-lock.d.mts +1 -0
  631. package/dist/substrate/runtime/cross-process/stack-lock.mjs +142 -0
  632. package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -0
  633. package/dist/substrate/runtime/current-plugin.mjs +15 -0
  634. package/dist/substrate/runtime/current-plugin.mjs.map +1 -0
  635. package/dist/substrate/runtime/errors.d.mts +1 -0
  636. package/dist/substrate/runtime/errors.mjs +76 -0
  637. package/dist/substrate/runtime/errors.mjs.map +1 -0
  638. package/dist/substrate/runtime/host-tree-tar/index.mjs +364 -0
  639. package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -0
  640. package/dist/substrate/runtime/http-probe.d.mts +35 -0
  641. package/dist/substrate/runtime/http-probe.mjs +65 -0
  642. package/dist/substrate/runtime/http-probe.mjs.map +1 -0
  643. package/dist/substrate/runtime/lease-broker/index.d.mts +1 -0
  644. package/dist/substrate/runtime/lease-broker/service.d.mts +64 -0
  645. package/dist/substrate/runtime/lease-broker/service.mjs +155 -0
  646. package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -0
  647. package/dist/substrate/runtime/lifecycle/dep-graph.d.mts +1 -0
  648. package/dist/substrate/runtime/lifecycle/dep-graph.mjs +138 -0
  649. package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -0
  650. package/dist/substrate/runtime/lifecycle/index.d.mts +1 -0
  651. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs +31 -0
  652. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -0
  653. package/dist/substrate/runtime/lifecycle/plugin-registry.d.mts +1 -0
  654. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +133 -0
  655. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -0
  656. package/dist/substrate/runtime/lifecycle/ready-gate.d.mts +1 -0
  657. package/dist/substrate/runtime/lifecycle/ready-gate.mjs +34 -0
  658. package/dist/substrate/runtime/lifecycle/ready-gate.mjs.map +1 -0
  659. package/dist/substrate/runtime/lifecycle/selective-restart.d.mts +1 -0
  660. package/dist/substrate/runtime/lifecycle/selective-restart.mjs +43 -0
  661. package/dist/substrate/runtime/lifecycle/selective-restart.mjs.map +1 -0
  662. package/dist/substrate/runtime/lifecycle/signals.d.mts +1 -0
  663. package/dist/substrate/runtime/lifecycle/signals.mjs +64 -0
  664. package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -0
  665. package/dist/substrate/runtime/lifecycle/state-machine.d.mts +1 -0
  666. package/dist/substrate/runtime/lifecycle/state-machine.mjs +38 -0
  667. package/dist/substrate/runtime/lifecycle/state-machine.mjs.map +1 -0
  668. package/dist/substrate/runtime/lifecycle/watch-attribution.d.mts +1 -0
  669. package/dist/substrate/runtime/lifecycle/watch-attribution.mjs +27 -0
  670. package/dist/substrate/runtime/lifecycle/watch-attribution.mjs.map +1 -0
  671. package/dist/substrate/runtime/managed-container.d.mts +30 -0
  672. package/dist/substrate/runtime/managed-container.mjs +32 -0
  673. package/dist/substrate/runtime/managed-container.mjs.map +1 -0
  674. package/dist/substrate/runtime/manifest/manifest.mjs +73 -0
  675. package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -0
  676. package/dist/substrate/runtime/mode-errors.d.mts +36 -0
  677. package/dist/substrate/runtime/observability/cascade-formatter.d.mts +1 -0
  678. package/dist/substrate/runtime/observability/cascade-formatter.mjs +135 -0
  679. package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -0
  680. package/dist/substrate/runtime/observability/formatter-registry.d.mts +1 -0
  681. package/dist/substrate/runtime/observability/formatter-registry.mjs +65 -0
  682. package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -0
  683. package/dist/substrate/runtime/observability/index.d.mts +3 -0
  684. package/dist/substrate/runtime/observability/logger.d.mts +58 -0
  685. package/dist/substrate/runtime/observability/logger.mjs +89 -0
  686. package/dist/substrate/runtime/observability/logger.mjs.map +1 -0
  687. package/dist/substrate/runtime/observability/pretty-error.d.mts +1 -0
  688. package/dist/substrate/runtime/observability/pretty-error.mjs +119 -0
  689. package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -0
  690. package/dist/substrate/runtime/observability/process-lines.d.mts +31 -0
  691. package/dist/substrate/runtime/observability/process-lines.mjs +40 -0
  692. package/dist/substrate/runtime/observability/process-lines.mjs.map +1 -0
  693. package/dist/substrate/runtime/observability/redaction.d.mts +28 -0
  694. package/dist/substrate/runtime/observability/redaction.mjs +45 -0
  695. package/dist/substrate/runtime/observability/redaction.mjs.map +1 -0
  696. package/dist/substrate/runtime/observability/spans.d.mts +1 -0
  697. package/dist/substrate/runtime/observability/spans.mjs +87 -0
  698. package/dist/substrate/runtime/observability/spans.mjs.map +1 -0
  699. package/dist/substrate/runtime/observability/subprocess-capture.d.mts +2 -0
  700. package/dist/substrate/runtime/observability/subprocess-capture.mjs +82 -0
  701. package/dist/substrate/runtime/observability/subprocess-capture.mjs.map +1 -0
  702. package/dist/substrate/runtime/paths.d.mts +17 -0
  703. package/dist/substrate/runtime/paths.mjs +61 -0
  704. package/dist/substrate/runtime/paths.mjs.map +1 -0
  705. package/dist/substrate/runtime/port-broker/index.d.mts +1 -0
  706. package/dist/substrate/runtime/port-broker/service.d.mts +1 -0
  707. package/dist/substrate/runtime/port-broker/service.mjs +319 -0
  708. package/dist/substrate/runtime/port-broker/service.mjs.map +1 -0
  709. package/dist/substrate/runtime/post-acquire-tasks.d.mts +1 -0
  710. package/dist/substrate/runtime/post-acquire-tasks.mjs +34 -0
  711. package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -0
  712. package/dist/substrate/runtime/probes.d.mts +51 -0
  713. package/dist/substrate/runtime/probes.mjs +84 -0
  714. package/dist/substrate/runtime/probes.mjs.map +1 -0
  715. package/dist/substrate/runtime/process-supervisor.d.mts +57 -0
  716. package/dist/substrate/runtime/process-supervisor.mjs +73 -0
  717. package/dist/substrate/runtime/process-supervisor.mjs.map +1 -0
  718. package/dist/substrate/runtime/projection/operational-endpoints.mjs +44 -0
  719. package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -0
  720. package/dist/substrate/runtime/projection/persisted.mjs +195 -0
  721. package/dist/substrate/runtime/projection/persisted.mjs.map +1 -0
  722. package/dist/substrate/runtime/projection/state-ref.mjs +48 -0
  723. package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -0
  724. package/dist/substrate/runtime/projection/update.mjs +200 -0
  725. package/dist/substrate/runtime/projection/update.mjs.map +1 -0
  726. package/dist/substrate/runtime/retry-policy.d.mts +18 -0
  727. package/dist/substrate/runtime/retry-policy.mjs +16 -0
  728. package/dist/substrate/runtime/retry-policy.mjs.map +1 -0
  729. package/dist/substrate/runtime/run.mjs +86 -0
  730. package/dist/substrate/runtime/run.mjs.map +1 -0
  731. package/dist/substrate/runtime/runtime-decode.d.mts +32 -0
  732. package/dist/substrate/runtime/runtime-decode.mjs +53 -0
  733. package/dist/substrate/runtime/runtime-decode.mjs.map +1 -0
  734. package/dist/substrate/runtime/scoped-http-server.mjs +36 -0
  735. package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -0
  736. package/dist/substrate/runtime/scoped-ref-map/service.mjs +83 -0
  737. package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -0
  738. package/dist/substrate/runtime/stage-and-swap/index.d.mts +1 -0
  739. package/dist/substrate/runtime/stage-and-swap/index.mjs +131 -0
  740. package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -0
  741. package/dist/substrate/runtime/state-store/schema.mjs +36 -0
  742. package/dist/substrate/runtime/state-store/schema.mjs.map +1 -0
  743. package/dist/substrate/runtime/strategy-registry/chain-probe-for.d.mts +1 -0
  744. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +22 -0
  745. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -0
  746. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.d.mts +1 -0
  747. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +30 -0
  748. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +1 -0
  749. package/dist/substrate/runtime/strategy-registry/index.d.mts +1 -0
  750. package/dist/substrate/runtime/strategy-registry/service.d.mts +1 -0
  751. package/dist/substrate/runtime/strategy-registry/service.mjs +67 -0
  752. package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -0
  753. package/dist/substrate/runtime/sui-execute/index.d.mts +11 -0
  754. package/dist/substrate/runtime/sui-execute/index.mjs +144 -0
  755. package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -0
  756. package/dist/substrate/runtime/sui-move-build/index.d.mts +1 -0
  757. package/dist/substrate/runtime/sui-move-build/index.mjs +283 -0
  758. package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -0
  759. package/dist/substrate/runtime/supervisor.d.mts +1 -0
  760. package/dist/substrate/runtime/supervisor.mjs +831 -0
  761. package/dist/substrate/runtime/supervisor.mjs.map +1 -0
  762. package/dist/surfaces/cli/command-tree.mjs +276 -0
  763. package/dist/surfaces/cli/command-tree.mjs.map +1 -0
  764. package/dist/surfaces/cli/commands/config.mjs +31 -0
  765. package/dist/surfaces/cli/commands/config.mjs.map +1 -0
  766. package/dist/surfaces/cli/commands/confirm-node.mjs +26 -0
  767. package/dist/surfaces/cli/commands/confirm-node.mjs.map +1 -0
  768. package/dist/surfaces/cli/commands/confirm.mjs +26 -0
  769. package/dist/surfaces/cli/commands/confirm.mjs.map +1 -0
  770. package/dist/surfaces/cli/commands/doctor-probes.mjs +452 -0
  771. package/dist/surfaces/cli/commands/doctor-probes.mjs.map +1 -0
  772. package/dist/surfaces/cli/commands/doctor.mjs +38 -0
  773. package/dist/surfaces/cli/commands/doctor.mjs.map +1 -0
  774. package/dist/surfaces/cli/commands/prune-picker.mjs +347 -0
  775. package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -0
  776. package/dist/surfaces/cli/commands/prune.mjs +178 -0
  777. package/dist/surfaces/cli/commands/prune.mjs.map +1 -0
  778. package/dist/surfaces/cli/commands/snapshot.mjs +141 -0
  779. package/dist/surfaces/cli/commands/snapshot.mjs.map +1 -0
  780. package/dist/surfaces/cli/commands/status.mjs +95 -0
  781. package/dist/surfaces/cli/commands/status.mjs.map +1 -0
  782. package/dist/surfaces/cli/commands/supervisor-presence.mjs +33 -0
  783. package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -0
  784. package/dist/surfaces/cli/commands/wipe.mjs +28 -0
  785. package/dist/surfaces/cli/commands/wipe.mjs.map +1 -0
  786. package/dist/surfaces/cli/envelope.mjs +43 -0
  787. package/dist/surfaces/cli/envelope.mjs.map +1 -0
  788. package/dist/surfaces/cli/errors.mjs +110 -0
  789. package/dist/surfaces/cli/errors.mjs.map +1 -0
  790. package/dist/surfaces/cli/flags.mjs +56 -0
  791. package/dist/surfaces/cli/flags.mjs.map +1 -0
  792. package/dist/surfaces/cli/index.mjs +418 -0
  793. package/dist/surfaces/cli/index.mjs.map +1 -0
  794. package/dist/surfaces/cli/output.mjs +115 -0
  795. package/dist/surfaces/cli/output.mjs.map +1 -0
  796. package/dist/surfaces/cli/sysexits.mjs +139 -0
  797. package/dist/surfaces/cli/sysexits.mjs.map +1 -0
  798. package/dist/surfaces/tui/app.mjs +104 -0
  799. package/dist/surfaces/tui/app.mjs.map +1 -0
  800. package/dist/surfaces/tui/dashboard.mjs +261 -0
  801. package/dist/surfaces/tui/dashboard.mjs.map +1 -0
  802. package/dist/surfaces/tui/display-derivation.mjs +395 -0
  803. package/dist/surfaces/tui/display-derivation.mjs.map +1 -0
  804. package/dist/surfaces/tui/errors.mjs +11 -0
  805. package/dist/surfaces/tui/errors.mjs.map +1 -0
  806. package/dist/surfaces/tui/event-log.mjs +155 -0
  807. package/dist/surfaces/tui/event-log.mjs.map +1 -0
  808. package/dist/surfaces/tui/heartbeat.mjs +33 -0
  809. package/dist/surfaces/tui/heartbeat.mjs.map +1 -0
  810. package/dist/surfaces/tui/index.mjs +50 -0
  811. package/dist/surfaces/tui/index.mjs.map +1 -0
  812. package/dist/surfaces/tui/input.mjs +104 -0
  813. package/dist/surfaces/tui/input.mjs.map +1 -0
  814. package/dist/surfaces/tui/mode-detect.mjs +32 -0
  815. package/dist/surfaces/tui/mode-detect.mjs.map +1 -0
  816. package/dist/surfaces/tui/mount-ink.mjs +31 -0
  817. package/dist/surfaces/tui/mount-ink.mjs.map +1 -0
  818. package/dist/surfaces/tui/plain-renderer.mjs +170 -0
  819. package/dist/surfaces/tui/plain-renderer.mjs.map +1 -0
  820. package/dist/surfaces/tui/resource-table.mjs +507 -0
  821. package/dist/surfaces/tui/resource-table.mjs.map +1 -0
  822. package/images/_shared/signal-forward.sh +77 -0
  823. package/images/postgres/Dockerfile +32 -0
  824. package/images/seal/Dockerfile +68 -0
  825. package/images/seal/entrypoint.sh +65 -0
  826. package/images/sui/Dockerfile +73 -0
  827. package/images/sui/entrypoint.sh +244 -0
  828. package/images/sui-fork/Dockerfile +53 -0
  829. package/images/sui-fork/entrypoint.sh +51 -0
  830. package/images/walrus/Dockerfile +122 -0
  831. package/images/walrus/deploy-walrus.sh +305 -0
  832. package/images/walrus/run-walrus.sh +53 -0
  833. package/package.json +94 -0
@@ -0,0 +1,109 @@
1
+ import { CodegenRenderError } from "./errors.mjs";
2
+ //#region src/orchestrators/codegen/format.ts
3
+ const GENERATED_HEADER = [
4
+ "// THIS FILE IS AUTO-GENERATED BY @mysten/devstack.",
5
+ "// Do not edit by hand — your changes will be overwritten on the next",
6
+ "// `devstack up` cycle. Apps consume codegen output; codegen output never",
7
+ "// imports from devstack."
8
+ ].join("\n");
9
+ const SENSITIVE_HEADER = [
10
+ "// !!! DO NOT COMMIT THIS FILE !!!",
11
+ "// This file carries sensitive material (wallet pair token, database",
12
+ "// credentials, or user extras). The output directory ships a .gitignore",
13
+ "// covering it; this banner is a belt-and-braces reminder."
14
+ ].join("\n");
15
+ /** Render an emitted file to a TS source string. Throws a tagged
16
+ * error class when the value is unserialisable. */
17
+ const renderFile = (input) => {
18
+ const lines = [];
19
+ lines.push(GENERATED_HEADER);
20
+ if (input.sensitive) {
21
+ lines.push("");
22
+ lines.push(SENSITIVE_HEADER);
23
+ }
24
+ lines.push("");
25
+ if (input.imports && input.imports.length > 0) {
26
+ for (const imp of input.imports) {
27
+ if (isForbiddenGeneratedImport(imp)) return new CodegenRenderError({
28
+ emitterName: input.emitterName,
29
+ outputPath: input.outputPath,
30
+ detail: `generated files must not import devstack source: ${imp}`
31
+ });
32
+ lines.push(imp);
33
+ }
34
+ lines.push("");
35
+ }
36
+ const keys = Object.keys(input.exports).sort();
37
+ for (const key of keys) {
38
+ const value = input.exports[key];
39
+ const rendered = tryRender(value, /* @__PURE__ */ new Set());
40
+ if (rendered instanceof Error) return new CodegenRenderError({
41
+ emitterName: input.emitterName,
42
+ outputPath: input.outputPath,
43
+ detail: `export '${key}': ${rendered.message}`
44
+ });
45
+ if (!isIdentifier(key)) return new CodegenRenderError({
46
+ emitterName: input.emitterName,
47
+ outputPath: input.outputPath,
48
+ detail: `export key '${key}' is not a valid TS identifier`
49
+ });
50
+ lines.push(`export const ${key} = ${rendered} as const;`);
51
+ lines.push("");
52
+ }
53
+ while (lines.length > 1 && lines[lines.length - 1] === "" && lines[lines.length - 2] === "") lines.pop();
54
+ return lines.join("\n") + (lines[lines.length - 1] === "" ? "" : "\n");
55
+ };
56
+ const INDENT = " ";
57
+ const tryRender = (value, seen, depth = 1) => {
58
+ if (value === null) return "null";
59
+ if (value === void 0) return /* @__PURE__ */ new Error("undefined is not serialisable — emit null instead");
60
+ const t = typeof value;
61
+ if (t === "string") return JSON.stringify(value);
62
+ if (t === "number") {
63
+ if (!Number.isFinite(value)) return /* @__PURE__ */ new Error("non-finite number");
64
+ return String(value);
65
+ }
66
+ if (t === "boolean") return String(value);
67
+ if (t === "bigint") return JSON.stringify(value.toString());
68
+ if (t === "function" || t === "symbol") return /* @__PURE__ */ new Error(`${t} is not serialisable`);
69
+ if (Array.isArray(value)) {
70
+ if (seen.has(value)) return /* @__PURE__ */ new Error("circular reference");
71
+ seen.add(value);
72
+ if (value.length === 0) return "[]";
73
+ const inner = [];
74
+ for (const item of value) {
75
+ const r = tryRender(item, seen, depth + 1);
76
+ if (r instanceof Error) return r;
77
+ inner.push(INDENT.repeat(depth) + r);
78
+ }
79
+ seen.delete(value);
80
+ return `[\n${inner.join(",\n")},\n${INDENT.repeat(depth - 1)}]`;
81
+ }
82
+ if (t === "object") {
83
+ const obj = value;
84
+ if (seen.has(obj)) return /* @__PURE__ */ new Error("circular reference");
85
+ seen.add(obj);
86
+ const keys = Object.keys(obj).sort();
87
+ if (keys.length === 0) return "{}";
88
+ const lines = [];
89
+ for (const k of keys) {
90
+ const v = obj[k];
91
+ if (v === void 0) continue;
92
+ const r = tryRender(v, seen, depth + 1);
93
+ if (r instanceof Error) return r;
94
+ const keyText = isIdentifier(k) ? k : JSON.stringify(k);
95
+ lines.push(`${INDENT.repeat(depth)}${keyText}: ${r}`);
96
+ }
97
+ seen.delete(obj);
98
+ if (lines.length === 0) return "{}";
99
+ return `{\n${lines.join(",\n")},\n${INDENT.repeat(depth - 1)}}`;
100
+ }
101
+ return /* @__PURE__ */ new Error(`unsupported value type ${t}`);
102
+ };
103
+ const IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
104
+ const isIdentifier = (s) => IDENT_RE.test(s);
105
+ const isForbiddenGeneratedImport = (line) => /\bfrom\s+["']@mysten-incubation\/devstack(?:-rewrite)?(?:\/|["'])/.test(line) || /\bimport\s*\(\s*["']@mysten-incubation\/devstack(?:-rewrite)?(?:\/|["'])/.test(line) || /\bfrom\s+["'][./][^"']*\/src\//.test(line) || /\bimport\s*\(\s*["'][./][^"']*\/src\//.test(line);
106
+ //#endregion
107
+ export { renderFile };
108
+
109
+ //# sourceMappingURL=format.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.mjs","names":[],"sources":["../../../src/orchestrators/codegen/format.ts"],"sourcesContent":["// TypeScript source rendering for codegen-emitted files.\n//\n// Distilled-doc § \"Hand-rolled TS-object-literal rendering ... drifts\n// subtly between emitters; a small shared renderer would absorb the\n// variation and own the bigint policy in one place.\" This module IS\n// that shared renderer.\n//\n// Output shape (one emitted file):\n//\n// <generated-header>\n// <do-not-commit-banner if sensitive>\n// <imports?>\n// <one `export const <name> = <literal> as const;` per export>\n// <trailing newline>\n//\n// The renderer:\n// - sorts object keys (deterministic re-emit, distilled-doc\n// invariant \"Deterministic re-emit\"),\n// - quotes identifier-unsafe keys with double-quoted strings,\n// - serialises bigints as quoted decimal strings for\n// `BigInt(<string>)` consumers,\n// - refuses functions / symbols / undefined / circular refs with a\n// typed render error,\n// - emits arrays and records as readonly literal forms.\n//\n// The renderer does NOT format with prettier; it aims for\n// prettier-compatible spacing (two-space indent, trailing commas,\n// double-quoted strings, semicolons) so a prettier-on-write user\n// hook is a no-op on emitted bytes — that's load-bearing for the\n// \"no mtime touch on identical content\" idempotency invariant.\n\nimport { CodegenRenderError } from './errors.ts';\n\n// -----------------------------------------------------------------------------\n// Headers\n// -----------------------------------------------------------------------------\n\nconst GENERATED_HEADER = [\n\t'// THIS FILE IS AUTO-GENERATED BY @mysten/devstack.',\n\t'// Do not edit by hand — your changes will be overwritten on the next',\n\t'// `devstack up` cycle. Apps consume codegen output; codegen output never',\n\t'// imports from devstack.',\n].join('\\n');\n\nconst SENSITIVE_HEADER = [\n\t'// !!! DO NOT COMMIT THIS FILE !!!',\n\t'// This file carries sensitive material (wallet pair token, database',\n\t'// credentials, or user extras). The output directory ships a .gitignore',\n\t'// covering it; this banner is a belt-and-braces reminder.',\n].join('\\n');\n\n// -----------------------------------------------------------------------------\n// Public render entry\n// -----------------------------------------------------------------------------\n\nexport interface RenderInput {\n\treadonly emitterName: string;\n\treadonly outputPath: string;\n\treadonly sensitive: boolean;\n\t/** The declarations written by `Codegenable.emit(ctx)`. Each entry\n\t * becomes one `export const <key> = <literal> as const;`. */\n\treadonly exports: { readonly [key: string]: unknown };\n\t/** Optional import lines the emitter wants prepended (e.g. a\n\t * type import from `@mysten/dapp-kit` for the wallet config).\n\t * Each entry is a raw import statement string. */\n\treadonly imports?: ReadonlyArray<string>;\n}\n\n/** Render an emitted file to a TS source string. Throws a tagged\n * error class when the value is unserialisable. */\nexport const renderFile = (input: RenderInput): string | CodegenRenderError => {\n\tconst lines: Array<string> = [];\n\tlines.push(GENERATED_HEADER);\n\tif (input.sensitive) {\n\t\tlines.push('');\n\t\tlines.push(SENSITIVE_HEADER);\n\t}\n\tlines.push('');\n\tif (input.imports && input.imports.length > 0) {\n\t\tfor (const imp of input.imports) {\n\t\t\tif (isForbiddenGeneratedImport(imp)) {\n\t\t\t\treturn new CodegenRenderError({\n\t\t\t\t\temitterName: input.emitterName,\n\t\t\t\t\toutputPath: input.outputPath,\n\t\t\t\t\tdetail: `generated files must not import devstack source: ${imp}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlines.push(imp);\n\t\t}\n\t\tlines.push('');\n\t}\n\t// Stable export order: keys lexicographically sorted.\n\tconst keys = Object.keys(input.exports).sort();\n\tfor (const key of keys) {\n\t\tconst value = input.exports[key];\n\t\tconst rendered = tryRender(value, new Set());\n\t\tif (rendered instanceof Error) {\n\t\t\treturn new CodegenRenderError({\n\t\t\t\temitterName: input.emitterName,\n\t\t\t\toutputPath: input.outputPath,\n\t\t\t\tdetail: `export '${key}': ${rendered.message}`,\n\t\t\t});\n\t\t}\n\t\tif (!isIdentifier(key)) {\n\t\t\treturn new CodegenRenderError({\n\t\t\t\temitterName: input.emitterName,\n\t\t\t\toutputPath: input.outputPath,\n\t\t\t\tdetail: `export key '${key}' is not a valid TS identifier`,\n\t\t\t});\n\t\t}\n\t\tlines.push(`export const ${key} = ${rendered} as const;`);\n\t\tlines.push('');\n\t}\n\t// Single trailing newline; never two.\n\twhile (lines.length > 1 && lines[lines.length - 1] === '' && lines[lines.length - 2] === '') {\n\t\tlines.pop();\n\t}\n\treturn lines.join('\\n') + (lines[lines.length - 1] === '' ? '' : '\\n');\n};\n\n// -----------------------------------------------------------------------------\n// Value rendering\n// -----------------------------------------------------------------------------\n\nconst INDENT = '\\t';\n\nconst tryRender = (value: unknown, seen: Set<object>, depth = 1): string | Error => {\n\tif (value === null) return 'null';\n\tif (value === undefined) {\n\t\treturn new Error('undefined is not serialisable — emit null instead');\n\t}\n\tconst t = typeof value;\n\tif (t === 'string') return JSON.stringify(value);\n\tif (t === 'number') {\n\t\tif (!Number.isFinite(value as number)) {\n\t\t\treturn new Error('non-finite number');\n\t\t}\n\t\treturn String(value);\n\t}\n\tif (t === 'boolean') return String(value);\n\tif (t === 'bigint') {\n\t\treturn JSON.stringify(value.toString());\n\t}\n\tif (t === 'function' || t === 'symbol') {\n\t\treturn new Error(`${t} is not serialisable`);\n\t}\n\tif (Array.isArray(value)) {\n\t\tif (seen.has(value)) return new Error('circular reference');\n\t\tseen.add(value);\n\t\tif (value.length === 0) return '[]';\n\t\tconst inner: Array<string> = [];\n\t\tfor (const item of value) {\n\t\t\tconst r = tryRender(item, seen, depth + 1);\n\t\t\tif (r instanceof Error) return r;\n\t\t\tinner.push(INDENT.repeat(depth) + r);\n\t\t}\n\t\tseen.delete(value);\n\t\treturn `[\\n${inner.join(',\\n')},\\n${INDENT.repeat(depth - 1)}]`;\n\t}\n\tif (t === 'object') {\n\t\tconst obj = value as Record<string, unknown>;\n\t\tif (seen.has(obj)) return new Error('circular reference');\n\t\tseen.add(obj);\n\t\tconst keys = Object.keys(obj).sort();\n\t\tif (keys.length === 0) return '{}';\n\t\tconst lines: Array<string> = [];\n\t\tfor (const k of keys) {\n\t\t\tconst v = obj[k];\n\t\t\tif (v === undefined) continue; // drop undefined props (distilled-doc skip-emit-explicit)\n\t\t\tconst r = tryRender(v, seen, depth + 1);\n\t\t\tif (r instanceof Error) return r;\n\t\t\tconst keyText = isIdentifier(k) ? k : JSON.stringify(k);\n\t\t\tlines.push(`${INDENT.repeat(depth)}${keyText}: ${r}`);\n\t\t}\n\t\tseen.delete(obj);\n\t\tif (lines.length === 0) return '{}';\n\t\treturn `{\\n${lines.join(',\\n')},\\n${INDENT.repeat(depth - 1)}}`;\n\t}\n\treturn new Error(`unsupported value type ${t}`);\n};\n\nconst IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst isIdentifier = (s: string): boolean => IDENT_RE.test(s);\n\nconst isForbiddenGeneratedImport = (line: string): boolean =>\n\t/\\bfrom\\s+[\"']@mysten-incubation\\/devstack(?:-rewrite)?(?:\\/|[\"'])/.test(line) ||\n\t/\\bimport\\s*\\(\\s*[\"']@mysten-incubation\\/devstack(?:-rewrite)?(?:\\/|[\"'])/.test(line) ||\n\t/\\bfrom\\s+[\"'][./][^\"']*\\/src\\//.test(line) ||\n\t/\\bimport\\s*\\(\\s*[\"'][./][^\"']*\\/src\\//.test(line);\n"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { CodegenWriteFailed } from "./errors.mjs";
2
+ import { emitOne } from "./emit.mjs";
3
+ import { Effect, FileSystem } from "effect";
4
+ //#region src/orchestrators/codegen/gitignore.ts
5
+ const USER_BLOCK_START = "# user: customisations below preserved across re-emits";
6
+ const USER_BLOCK_END = "# /user: do not edit below this line";
7
+ const DEFAULT_USER_BLOCK = `${USER_BLOCK_START}\n${USER_BLOCK_END}`;
8
+ const HEADER = [
9
+ "# THIS FILE IS AUTO-GENERATED BY @mysten/devstack.",
10
+ "# The codegen output directory is engine-managed; the whole tree is",
11
+ "# ignored from git by default. Sensitive files have an explicit mention",
12
+ "# below for documentation. Add user customisations inside the `# user:`",
13
+ "# block; the rest is rewritten on every emit cycle."
14
+ ].join("\n");
15
+ /**
16
+ * Compose the gitignore content, preserving any user customisations
17
+ * between the `# user:` markers in any existing file at `path`.
18
+ */
19
+ const composeGitignore = (existing, input) => {
20
+ const userBlock = existing !== null ? extractUserBlock(existing) : null;
21
+ const sortedSensitive = [...input.sensitivePaths].sort();
22
+ const lines = [];
23
+ lines.push(HEADER);
24
+ lines.push("");
25
+ lines.push("# default policy: ignore the whole output directory.");
26
+ lines.push("*");
27
+ lines.push("# but keep this .gitignore tracked so cloners get the policy.");
28
+ lines.push("!.gitignore");
29
+ if (sortedSensitive.length > 0) {
30
+ lines.push("");
31
+ lines.push("# sensitive files — never commit even if you override the `*` above.");
32
+ for (const p of sortedSensitive) lines.push(p);
33
+ }
34
+ lines.push("");
35
+ lines.push(userBlock !== null ? userBlock : DEFAULT_USER_BLOCK);
36
+ return lines.join("\n") + "\n";
37
+ };
38
+ /**
39
+ * Write the gitignore. Idempotent via `emitOne`'s no-touch path.
40
+ */
41
+ const writeGitignore = (input) => Effect.gen(function* () {
42
+ const content = composeGitignore(yield* (yield* FileSystem.FileSystem).readFileString(input.path).pipe(Effect.match({
43
+ onSuccess: (text) => text,
44
+ onFailure: () => null
45
+ })), input);
46
+ yield* emitOne({
47
+ path: input.path,
48
+ content,
49
+ mode: 420
50
+ }).pipe(Effect.mapError((e) => new CodegenWriteFailed({
51
+ outputPath: input.path,
52
+ stage: "gitignore",
53
+ cause: e
54
+ })));
55
+ }).pipe(Effect.withSpan("codegen.writeGitignore", { attributes: { "codegen.path": input.path } }));
56
+ const extractUserBlock = (text) => {
57
+ const startIdx = text.indexOf(USER_BLOCK_START);
58
+ const endIdx = text.indexOf(USER_BLOCK_END);
59
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) return null;
60
+ const endLineEnd = text.indexOf("\n", endIdx);
61
+ const stop = endLineEnd === -1 ? text.length : endLineEnd;
62
+ return text.slice(startIdx, stop);
63
+ };
64
+ //#endregion
65
+ export { writeGitignore };
66
+
67
+ //# sourceMappingURL=gitignore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.mjs","names":[],"sources":["../../../src/orchestrators/codegen/gitignore.ts"],"sourcesContent":["// .gitignore emission for the codegen output directory.\n//\n// Distilled-doc §\"Boundary helpers\": \"A `.gitignore` inside the\n// output directory, covering sensitive emitted files by default and\n// preserving user customizations.\" Two design points:\n//\n// 1. The entire output directory is engine-managed and the\n// pragmatic default is \"ignore everything emitted here\". The\n// `*` line lives at the top of the file with a comment\n// explaining the policy.\n// 2. Sensitive files get an explicit second mention so the\n// `.gitignore` reads as documentation in addition to enforcing\n// the policy.\n// 3. User customisations land in a tracked `# user:` block — any\n// content the user adds between the `# user:` and `# /user:`\n// markers is preserved verbatim across re-emits.\n//\n// The `.gitignore` is emitted with the same per-file atomic writer as\n// the rest of the codegen tree.\n\nimport { Effect, FileSystem } from 'effect';\n\nimport { emitOne } from './emit.ts';\nimport { CodegenWriteFailed } from './errors.ts';\nimport { NON_SENSITIVE_FILE_MODE } from './permissions.ts';\n\nconst USER_BLOCK_START = '# user: customisations below preserved across re-emits';\nconst USER_BLOCK_END = '# /user: do not edit below this line';\n\nconst DEFAULT_USER_BLOCK = `${USER_BLOCK_START}\\n${USER_BLOCK_END}`;\n\nconst HEADER = [\n\t'# THIS FILE IS AUTO-GENERATED BY @mysten/devstack.',\n\t'# The codegen output directory is engine-managed; the whole tree is',\n\t'# ignored from git by default. Sensitive files have an explicit mention',\n\t'# below for documentation. Add user customisations inside the `# user:`',\n\t'# block; the rest is rewritten on every emit cycle.',\n].join('\\n');\n\nexport interface GitignoreInput {\n\treadonly path: string;\n\t/** Relative paths inside the output dir that are sensitive — get\n\t * an explicit gitignore line. Sorted lexicographically. */\n\treadonly sensitivePaths: ReadonlyArray<string>;\n}\n\n/**\n * Compose the gitignore content, preserving any user customisations\n * between the `# user:` markers in any existing file at `path`.\n */\nexport const composeGitignore = (existing: string | null, input: GitignoreInput): string => {\n\tconst userBlock = existing !== null ? extractUserBlock(existing) : null;\n\tconst sortedSensitive = [...input.sensitivePaths].sort();\n\tconst lines: Array<string> = [];\n\tlines.push(HEADER);\n\tlines.push('');\n\tlines.push('# default policy: ignore the whole output directory.');\n\tlines.push('*');\n\tlines.push('# but keep this .gitignore tracked so cloners get the policy.');\n\tlines.push('!.gitignore');\n\tif (sortedSensitive.length > 0) {\n\t\tlines.push('');\n\t\tlines.push('# sensitive files — never commit even if you override the `*` above.');\n\t\tfor (const p of sortedSensitive) lines.push(p);\n\t}\n\tlines.push('');\n\tlines.push(userBlock !== null ? userBlock : DEFAULT_USER_BLOCK);\n\treturn lines.join('\\n') + '\\n';\n};\n\n/**\n * Write the gitignore. Idempotent via `emitOne`'s no-touch path.\n */\nexport const writeGitignore = (\n\tinput: GitignoreInput,\n): Effect.Effect<void, CodegenWriteFailed, FileSystem.FileSystem> =>\n\tEffect.gen(function* () {\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst existing = yield* fs.readFileString(input.path).pipe(\n\t\t\tEffect.match({\n\t\t\t\tonSuccess: (text) => text,\n\t\t\t\tonFailure: () => null,\n\t\t\t}),\n\t\t);\n\t\tconst content = composeGitignore(existing, input);\n\t\tyield* emitOne({\n\t\t\tpath: input.path,\n\t\t\tcontent,\n\t\t\tmode: NON_SENSITIVE_FILE_MODE,\n\t\t}).pipe(\n\t\t\tEffect.mapError(\n\t\t\t\t(e) =>\n\t\t\t\t\tnew CodegenWriteFailed({\n\t\t\t\t\t\toutputPath: input.path,\n\t\t\t\t\t\tstage: 'gitignore',\n\t\t\t\t\t\tcause: e,\n\t\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}).pipe(\n\t\tEffect.withSpan('codegen.writeGitignore', {\n\t\t\tattributes: { 'codegen.path': input.path },\n\t\t}),\n\t);\n\nconst extractUserBlock = (text: string): string | null => {\n\tconst startIdx = text.indexOf(USER_BLOCK_START);\n\tconst endIdx = text.indexOf(USER_BLOCK_END);\n\tif (startIdx === -1 || endIdx === -1 || endIdx < startIdx) return null;\n\t// Include both markers in the returned block.\n\tconst endLineEnd = text.indexOf('\\n', endIdx);\n\tconst stop = endLineEnd === -1 ? text.length : endLineEnd;\n\treturn text.slice(startIdx, stop);\n};\n"],"mappings":";;;;AA0BA,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AAEvB,MAAM,qBAAqB,GAAG,iBAAiB,IAAI;AAEnD,MAAM,SAAS;CACd;CACA;CACA;CACA;CACA;CACA,CAAC,KAAK,KAAK;;;;;AAaZ,MAAa,oBAAoB,UAAyB,UAAkC;CAC3F,MAAM,YAAY,aAAa,OAAO,iBAAiB,SAAS,GAAG;CACnE,MAAM,kBAAkB,CAAC,GAAG,MAAM,eAAe,CAAC,MAAM;CACxD,MAAM,QAAuB,EAAE;AAC/B,OAAM,KAAK,OAAO;AAClB,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,uDAAuD;AAClE,OAAM,KAAK,IAAI;AACf,OAAM,KAAK,gEAAgE;AAC3E,OAAM,KAAK,cAAc;AACzB,KAAI,gBAAgB,SAAS,GAAG;AAC/B,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,uEAAuE;AAClF,OAAK,MAAM,KAAK,gBAAiB,OAAM,KAAK,EAAE;;AAE/C,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,cAAc,OAAO,YAAY,mBAAmB;AAC/D,QAAO,MAAM,KAAK,KAAK,GAAG;;;;;AAM3B,MAAa,kBACZ,UAEA,OAAO,IAAI,aAAa;CAQvB,MAAM,UAAU,iBAAiB,QANT,OADN,WAAW,YACF,eAAe,MAAM,KAAK,CAAC,KACrD,OAAO,MAAM;EACZ,YAAY,SAAS;EACrB,iBAAiB;EACjB,CAAC,CACF,EAC0C,MAAM;AACjD,QAAO,QAAQ;EACd,MAAM,MAAM;EACZ;EACA,MAAA;EACA,CAAC,CAAC,KACF,OAAO,UACL,MACA,IAAI,mBAAmB;EACtB,YAAY,MAAM;EAClB,OAAO;EACP,OAAO;EACP,CAAC,CACH,CACD;EACA,CAAC,KACF,OAAO,SAAS,0BAA0B,EACzC,YAAY,EAAE,gBAAgB,MAAM,MAAM,EAC1C,CAAC,CACF;AAEF,MAAM,oBAAoB,SAAgC;CACzD,MAAM,WAAW,KAAK,QAAQ,iBAAiB;CAC/C,MAAM,SAAS,KAAK,QAAQ,eAAe;AAC3C,KAAI,aAAa,MAAM,WAAW,MAAM,SAAS,SAAU,QAAO;CAElE,MAAM,aAAa,KAAK,QAAQ,MAAM,OAAO;CAC7C,MAAM,OAAO,eAAe,KAAK,KAAK,SAAS;AAC/C,QAAO,KAAK,MAAM,UAAU,KAAK"}
@@ -0,0 +1 @@
1
+ import { Context, Layer, Path } from "effect";
@@ -0,0 +1,33 @@
1
+ import { Context, Effect, Layer, Path } from "effect";
2
+ //#region src/orchestrators/codegen/paths.ts
3
+ var CodegenRoot = class extends Context.Service()("@devstack-rewrite/orchestrator/CodegenRoot") {};
4
+ /** Build a `CodegenRoot` layer pinned to a literal path. */
5
+ const layerCodegenRoot = (root) => Layer.succeed(CodegenRoot)(root);
6
+ var CodegenPathsService = class extends Context.Service()("@devstack-rewrite/orchestrator/CodegenPaths") {};
7
+ /**
8
+ * Materialize the resolver from `CodegenRoot` + Effect's `Path`
9
+ * service. Stack subdir, if present, is appended:
10
+ * `<outputDir>` or `<outputDir>/<stackSubdir>`.
11
+ */
12
+ const layerCodegenPaths = Layer.effect(CodegenPathsService, Effect.gen(function* () {
13
+ const root = yield* CodegenRoot;
14
+ const path = yield* Path.Path;
15
+ const outputDir = root.stackSubdir ? path.join(root.outputDir, root.stackSubdir) : root.outputDir;
16
+ const bindingsDir = path.join(outputDir, "bindings");
17
+ const resolve = (outputPath) => {
18
+ if (outputPath.includes("..") || outputPath.startsWith("/")) throw new Error(`codegen.outputPath must be a relative path without '..'; got '${outputPath}'`);
19
+ return path.join(outputDir, outputPath);
20
+ };
21
+ const resolveBindingsPackage = (packageName) => path.join(bindingsDir, packageName);
22
+ return CodegenPathsService.of({
23
+ outputDir,
24
+ gitignoreFile: path.join(outputDir, ".gitignore"),
25
+ bindingsDir,
26
+ resolve,
27
+ resolveBindingsPackage
28
+ });
29
+ }));
30
+ //#endregion
31
+ export { CodegenPathsService, layerCodegenPaths, layerCodegenRoot };
32
+
33
+ //# sourceMappingURL=paths.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.mjs","names":[],"sources":["../../../src/orchestrators/codegen/paths.ts"],"sourcesContent":["// Codegen output-path layout.\n//\n// Distilled-doc § \"All outputs land under a single user-chosen\n// directory (default `./src/generated/`)\" + §\"Stable output paths\".\n// One file owns the layout so emitters never assemble paths by hand.\n//\n// Default root is `<appRoot>/src/generated/`. Tests and parallel\n// stacks pin a per-test root; the substrate's `RuntimeRoot` is for\n// engine-private state (~/.devstack/...), NOT for codegen output.\n// Codegen output lives in the USER's source tree.\n\nimport { Context, Effect, Layer, Path } from 'effect';\n\n/**\n * Codegen output root — the directory codegen owns and overwrites.\n * Pinned at boot time from the user's `defineDevstack` options\n * (default `./src/generated/` resolved against the app's cwd).\n *\n * Held as a service so emitters can yield it without a function\n * argument; mirrors the substrate's `RuntimeRoot` pattern.\n */\nexport interface CodegenRootShape {\n\t/** Absolute path to the output directory. The orchestrator\n\t * manages it; the user never writes here. */\n\treadonly outputDir: string;\n\t/** Optional per-stack subdirectory under `outputDir`. When set,\n\t * parallel stacks emit into sibling directories under the same\n\t * output root (distilled-doc §\"per-stack subdirectory\"). */\n\treadonly stackSubdir: string | null;\n}\n\nexport class CodegenRoot extends Context.Service<CodegenRoot, CodegenRootShape>()(\n\t'@devstack-rewrite/orchestrator/CodegenRoot',\n) {}\n\n/** Build a `CodegenRoot` layer pinned to a literal path. */\nexport const layerCodegenRoot = (root: CodegenRootShape): Layer.Layer<CodegenRoot> =>\n\tLayer.succeed(CodegenRoot)(root);\n\n/** Closed bundle the resolver returns. Mirrors substrate `StackPaths`. */\nexport interface CodegenPaths {\n\t/** The directory the orchestrator emits into (after applying\n\t * per-stack subdirectory if configured). The watcher MUST\n\t * exclude this directory. */\n\treadonly outputDir: string;\n\t/** Path to the `.gitignore` inside `outputDir`. Written every\n\t * emit (the dir is gitignored). */\n\treadonly gitignoreFile: string;\n\t/** Subtree where Move-to-TS bindings land. */\n\treadonly bindingsDir: string;\n\t/** Helper: resolve an emitter's `outputPath` (e.g. `sui/network.ts`)\n\t * against the output root. */\n\treadonly resolve: (outputPath: string) => string;\n\t/** Helper: resolve a per-package bindings subtree path. */\n\treadonly resolveBindingsPackage: (packageName: string) => string;\n}\n\nexport class CodegenPathsService extends Context.Service<CodegenPathsService, CodegenPaths>()(\n\t'@devstack-rewrite/orchestrator/CodegenPaths',\n) {}\n\n/**\n * Materialize the resolver from `CodegenRoot` + Effect's `Path`\n * service. Stack subdir, if present, is appended:\n * `<outputDir>` or `<outputDir>/<stackSubdir>`.\n */\nexport const layerCodegenPaths: Layer.Layer<CodegenPathsService, never, CodegenRoot | Path.Path> =\n\tLayer.effect(\n\t\tCodegenPathsService,\n\t\tEffect.gen(function* () {\n\t\t\tconst root = yield* CodegenRoot;\n\t\t\tconst path = yield* Path.Path;\n\t\t\tconst outputDir = root.stackSubdir\n\t\t\t\t? path.join(root.outputDir, root.stackSubdir)\n\t\t\t\t: root.outputDir;\n\t\t\tconst bindingsDir = path.join(outputDir, 'bindings');\n\t\t\tconst resolve = (outputPath: string): string => {\n\t\t\t\t// Defense-in-depth: refuse `..` traversal so an emitter\n\t\t\t\t// can't write outside its declared output dir. The\n\t\t\t\t// declared `CodegenableDecl.outputPath` is plugin-authored\n\t\t\t\t// and trusted but the check costs nothing.\n\t\t\t\tif (outputPath.includes('..') || outputPath.startsWith('/')) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`codegen.outputPath must be a relative path without '..'; got '${outputPath}'`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn path.join(outputDir, outputPath);\n\t\t\t};\n\t\t\tconst resolveBindingsPackage = (packageName: string): string =>\n\t\t\t\tpath.join(bindingsDir, packageName);\n\t\t\treturn CodegenPathsService.of({\n\t\t\t\toutputDir,\n\t\t\t\tgitignoreFile: path.join(outputDir, '.gitignore'),\n\t\t\t\tbindingsDir,\n\t\t\t\tresolve,\n\t\t\t\tresolveBindingsPackage,\n\t\t\t});\n\t\t}),\n\t);\n"],"mappings":";;AA+BA,IAAa,cAAb,cAAiC,QAAQ,SAAwC,CAChF,6CACA,CAAC;;AAGF,MAAa,oBAAoB,SAChC,MAAM,QAAQ,YAAY,CAAC,KAAK;AAoBjC,IAAa,sBAAb,cAAyC,QAAQ,SAA4C,CAC5F,8CACA,CAAC;;;;;;AAOF,MAAa,oBACZ,MAAM,OACL,qBACA,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,OAAO;CACpB,MAAM,OAAO,OAAO,KAAK;CACzB,MAAM,YAAY,KAAK,cACpB,KAAK,KAAK,KAAK,WAAW,KAAK,YAAY,GAC3C,KAAK;CACR,MAAM,cAAc,KAAK,KAAK,WAAW,WAAW;CACpD,MAAM,WAAW,eAA+B;AAK/C,MAAI,WAAW,SAAS,KAAK,IAAI,WAAW,WAAW,IAAI,CAC1D,OAAM,IAAI,MACT,iEAAiE,WAAW,GAC5E;AAEF,SAAO,KAAK,KAAK,WAAW,WAAW;;CAExC,MAAM,0BAA0B,gBAC/B,KAAK,KAAK,aAAa,YAAY;AACpC,QAAO,oBAAoB,GAAG;EAC7B;EACA,eAAe,KAAK,KAAK,WAAW,aAAa;EACjD;EACA;EACA;EACA,CAAC;EACD,CACF"}
@@ -0,0 +1,6 @@
1
+ /** File mode for one codegen contribution. */
2
+ const modeFor = (decl) => decl.sensitive === true ? 384 : 420;
3
+ //#endregion
4
+ export { modeFor };
5
+
6
+ //# sourceMappingURL=permissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.mjs","names":[],"sources":["../../../src/orchestrators/codegen/permissions.ts"],"sourcesContent":["// Permission policy for codegen-emitted files.\n//\n// Distilled-doc § \"Sensitive emitted files have restrictive\n// filesystem permissions, re-applied on every emit (not just on\n// create) to recover from manual chmods\". The orchestrator hands the\n// emit/swap layer the mode it should apply.\n//\n// Two-axis policy:\n// - `sensitive: true` → 0o600 (rw user only).\n// - `sensitive: false` → 0o644 (rw user, r world).\n// The parent directory the emit lives in inherits the strictest\n// sensitivity of any file inside it — 0o700 when any file is\n// sensitive, 0o755 otherwise. The orchestrator applies parent mode\n// at swap time, separate from per-file modes.\n\nimport type { CodegenableDecl } from '../../contracts/codegenable.ts';\n\nexport const SENSITIVE_FILE_MODE = 0o600;\nexport const NON_SENSITIVE_FILE_MODE = 0o644;\nexport const SENSITIVE_DIR_MODE = 0o700;\nexport const NON_SENSITIVE_DIR_MODE = 0o755;\n\n/** File mode for one codegen contribution. */\nexport const modeFor = (decl: Pick<CodegenableDecl, 'sensitive'>): number =>\n\tdecl.sensitive === true ? SENSITIVE_FILE_MODE : NON_SENSITIVE_FILE_MODE;\n\n/** Parent-directory mode given a set of contributions inside it. */\nexport const dirModeFor = (decls: ReadonlyArray<Pick<CodegenableDecl, 'sensitive'>>): number =>\n\tdecls.some((d) => d.sensitive === true) ? SENSITIVE_DIR_MODE : NON_SENSITIVE_DIR_MODE;\n\n/** True if ANY contribution in the set is sensitive — gates the\n * `.gitignore` \"cover by default\" rule and the parent-mode policy. */\nexport const anySensitive = (decls: ReadonlyArray<Pick<CodegenableDecl, 'sensitive'>>): boolean =>\n\tdecls.some((d) => d.sensitive === true);\n"],"mappings":";AAuBA,MAAa,WAAW,SACvB,KAAK,cAAc,OAAA,MAAA"}
@@ -0,0 +1 @@
1
+ import { Context, Effect, FileSystem, Layer, Scope } from "effect";
@@ -0,0 +1,276 @@
1
+ import { CodegenEmitFailed, CodegenEmitterCollision, CodegenPathConflict } from "./errors.mjs";
2
+ import { emitOne } from "./emit.mjs";
3
+ import { modeFor } from "./permissions.mjs";
4
+ import { emitBindings } from "./bindings.mjs";
5
+ import { CodegenPathsService } from "./paths.mjs";
6
+ import { renderFile } from "./format.mjs";
7
+ import { writeGitignore } from "./gitignore.mjs";
8
+ import { Context, Effect, Layer, Order, Ref } from "effect";
9
+ //#region src/orchestrators/codegen/service.ts
10
+ const runEmitCycle = (input) => Effect.gen(function* () {
11
+ const paths = yield* CodegenPathsService;
12
+ const fileEmitters = [];
13
+ for (const decl of input.contributions) fileEmitters.push(decl);
14
+ yield* validateUniqueness(fileEmitters);
15
+ yield* validateAggregatePathAvailability(fileEmitters);
16
+ const filesWritten = [];
17
+ const filesUnchanged = [];
18
+ const filesChmod = [];
19
+ const aggregates = emptyAggregateBuckets();
20
+ const packageContribs = [];
21
+ const sortedDecls = [...fileEmitters].sort(Order.mapInput(Order.String, (d) => d.outputPath));
22
+ for (const decl of sortedDecls) {
23
+ const emission = yield* runEmitter(decl);
24
+ const exported = emission.exports;
25
+ collectAggregateExport(aggregates, decl, exported);
26
+ if (decl.emitterName === "package") {
27
+ const bindings = exported["packageBindings"];
28
+ if (isPackageBindings(bindings)) packageContribs.push(bindings);
29
+ }
30
+ const rendered = renderFile({
31
+ emitterName: decl.emitterName,
32
+ outputPath: decl.outputPath,
33
+ sensitive: decl.sensitive === true,
34
+ exports: exported,
35
+ imports: emission.imports
36
+ });
37
+ if (rendered instanceof Error) return yield* Effect.fail(rendered);
38
+ const abs = paths.resolve(decl.outputPath);
39
+ switch ((yield* emitOne({
40
+ path: abs,
41
+ content: rendered,
42
+ mode: modeFor(decl)
43
+ })).outcome) {
44
+ case "wrote":
45
+ filesWritten.push(abs);
46
+ break;
47
+ case "unchanged":
48
+ filesUnchanged.push(abs);
49
+ break;
50
+ case "chmod-only":
51
+ filesChmod.push(abs);
52
+ break;
53
+ }
54
+ }
55
+ for (const aggregate of buildAggregateFiles(aggregates)) {
56
+ const rendered = renderFile({
57
+ emitterName: aggregate.emitterName,
58
+ outputPath: aggregate.outputPath,
59
+ sensitive: false,
60
+ exports: aggregate.exports
61
+ });
62
+ if (rendered instanceof Error) return yield* Effect.fail(rendered);
63
+ const abs = paths.resolve(aggregate.outputPath);
64
+ switch ((yield* emitOne({
65
+ path: abs,
66
+ content: rendered,
67
+ mode: 420
68
+ })).outcome) {
69
+ case "wrote":
70
+ filesWritten.push(abs);
71
+ break;
72
+ case "unchanged":
73
+ filesUnchanged.push(abs);
74
+ break;
75
+ case "chmod-only":
76
+ filesChmod.push(abs);
77
+ break;
78
+ }
79
+ }
80
+ let bindings = null;
81
+ if (packageContribs.length > 0) bindings = yield* emitBindings({
82
+ bindingsDir: paths.bindingsDir,
83
+ packages: packageContribs,
84
+ importExtension: input.bindingsImportExtension
85
+ });
86
+ else yield* Effect.logInfo("codegen: no package contributions; skipping Move-to-TS bindings step.");
87
+ const sensitivePaths = fileEmitters.filter((d) => d.sensitive === true).map((d) => d.outputPath);
88
+ yield* writeGitignore({
89
+ path: paths.gitignoreFile,
90
+ sensitivePaths
91
+ });
92
+ return {
93
+ filesWritten,
94
+ filesUnchanged,
95
+ filesChmod,
96
+ bindings
97
+ };
98
+ }).pipe(Effect.withSpan("codegen.runEmitCycle", { attributes: { "codegen.contributions": input.contributions.length } }));
99
+ const runEmitter = (decl) => Effect.gen(function* () {
100
+ const exports = {};
101
+ const imports = [];
102
+ const done = { _tag: "CodegenEmitDone" };
103
+ yield* decl.emit({
104
+ exportConst: (name, value) => {
105
+ exports[name] = value;
106
+ },
107
+ importStatement: (statement) => {
108
+ imports.push(statement);
109
+ },
110
+ done: () => done
111
+ }).pipe(Effect.mapError((cause) => new CodegenEmitFailed({
112
+ emitterName: decl.emitterName,
113
+ outputPath: decl.outputPath,
114
+ cause
115
+ })));
116
+ return {
117
+ exports,
118
+ imports
119
+ };
120
+ });
121
+ /**
122
+ * Uniqueness check: emitter name (literal) must be unique EXCEPT
123
+ * for the `package` emitter, which legitimately appears once per
124
+ * Package contribution. Output paths must be unique across ALL
125
+ * emitters (including each `package`-emitted pointer file).
126
+ */
127
+ const validateUniqueness = (decls) => Effect.gen(function* () {
128
+ const byPath = /* @__PURE__ */ new Map();
129
+ const byName = /* @__PURE__ */ new Map();
130
+ for (const d of decls) {
131
+ const ps = byPath.get(d.outputPath) ?? [];
132
+ ps.push(d.emitterName);
133
+ byPath.set(d.outputPath, ps);
134
+ if (d.emitterName === "package") continue;
135
+ const ns = byName.get(d.emitterName) ?? [];
136
+ ns.push(d.outputPath);
137
+ byName.set(d.emitterName, ns);
138
+ }
139
+ for (const [path, emitters] of byPath) if (emitters.length > 1) return yield* Effect.fail(new CodegenPathConflict({
140
+ outputPath: path,
141
+ emitters
142
+ }));
143
+ for (const [name, outputPaths] of byName) if (outputPaths.length > 1) return yield* Effect.fail(new CodegenEmitterCollision({
144
+ emitterName: name,
145
+ outputPaths
146
+ }));
147
+ });
148
+ const AGGREGATE_OUTPUTS = {
149
+ accounts: "accounts.ts",
150
+ coins: "coins.ts",
151
+ packages: "packages.ts",
152
+ services: "services.ts"
153
+ };
154
+ const aggregatePathFor = (decl) => {
155
+ if (decl.emitterName.startsWith("account/")) return AGGREGATE_OUTPUTS.accounts;
156
+ if (decl.emitterName.startsWith("coin/")) return AGGREGATE_OUTPUTS.coins;
157
+ if (decl.emitterName === "package") return AGGREGATE_OUTPUTS.packages;
158
+ if (decl.emitterName === "sui-network") return AGGREGATE_OUTPUTS.services;
159
+ return null;
160
+ };
161
+ const validateAggregatePathAvailability = (decls) => Effect.gen(function* () {
162
+ const aggregatePaths = /* @__PURE__ */ new Set();
163
+ for (const decl of decls) {
164
+ const path = aggregatePathFor(decl);
165
+ if (path !== null) aggregatePaths.add(path);
166
+ }
167
+ for (const path of aggregatePaths) {
168
+ const colliding = decls.filter((decl) => decl.outputPath === path);
169
+ if (colliding.length > 0) return yield* Effect.fail(new CodegenPathConflict({
170
+ outputPath: path,
171
+ emitters: [...colliding.map((decl) => decl.emitterName), `aggregate/${path}`]
172
+ }));
173
+ }
174
+ });
175
+ const emptyAggregateBuckets = () => ({
176
+ accounts: {},
177
+ coins: {},
178
+ packages: {},
179
+ services: {}
180
+ });
181
+ const collectAggregateExport = (buckets, decl, exported) => {
182
+ if (decl.emitterName.startsWith("account/")) {
183
+ Object.assign(buckets.accounts, exported);
184
+ return;
185
+ }
186
+ if (decl.emitterName.startsWith("coin/")) {
187
+ Object.assign(buckets.coins, exported);
188
+ return;
189
+ }
190
+ if (decl.emitterName === "package") {
191
+ const bindings = exported["packageBindings"];
192
+ if (isPackageBindings(bindings)) buckets.packages[bindings.name] = bindings;
193
+ return;
194
+ }
195
+ if (decl.emitterName === "sui-network") {
196
+ const network = exported["suiNetwork"];
197
+ if (isRecord(network)) {
198
+ const rpcUrl = stringField(network, "rpcUrl");
199
+ const faucetUrl = stringField(network, "faucetUrl");
200
+ const graphqlUrl = stringField(network, "graphqlUrl");
201
+ buckets.services["sui"] = {
202
+ rpc: { url: rpcUrl ?? "" },
203
+ faucet: faucetUrl === null ? null : { url: faucetUrl },
204
+ graphql: graphqlUrl === null ? null : { url: graphqlUrl }
205
+ };
206
+ }
207
+ }
208
+ };
209
+ const buildAggregateFiles = (buckets) => {
210
+ const files = [];
211
+ if (Object.keys(buckets.accounts).length > 0) files.push({
212
+ emitterName: "aggregate/accounts",
213
+ outputPath: AGGREGATE_OUTPUTS.accounts,
214
+ exports: { accounts: buckets.accounts }
215
+ });
216
+ if (Object.keys(buckets.coins).length > 0) files.push({
217
+ emitterName: "aggregate/coins",
218
+ outputPath: AGGREGATE_OUTPUTS.coins,
219
+ exports: { coins: buckets.coins }
220
+ });
221
+ if (Object.keys(buckets.packages).length > 0) files.push({
222
+ emitterName: "aggregate/packages",
223
+ outputPath: AGGREGATE_OUTPUTS.packages,
224
+ exports: { packages: buckets.packages }
225
+ });
226
+ if (Object.keys(buckets.services).length > 0) files.push({
227
+ emitterName: "aggregate/services",
228
+ outputPath: AGGREGATE_OUTPUTS.services,
229
+ exports: { services: buckets.services }
230
+ });
231
+ return files;
232
+ };
233
+ const isPackageBindings = (v) => typeof v === "object" && v !== null && "name" in v && "packageId" in v && "mvrPlaceholder" in v && "sourcePath" in v;
234
+ const isRecord = (v) => typeof v === "object" && v !== null;
235
+ const stringField = (record, key) => {
236
+ const value = record[key];
237
+ return typeof value === "string" && value.length > 0 ? value : null;
238
+ };
239
+ var CodegenOrchestratorService = class extends Context.Service()("@devstack-rewrite/orchestrators/Codegen") {};
240
+ /** Layer-wired codegen orchestrator. No upstream requirements at boot
241
+ * time — the per-cycle effect carries the `FileSystem` + Move-codegen
242
+ * service requirements through to the caller. */
243
+ const layerCodegenOrchestrator = Layer.effect(CodegenOrchestratorService, Effect.gen(function* () {
244
+ const contributionsRef = yield* Ref.make([]);
245
+ const seqRef = yield* Ref.make(0);
246
+ const registerContribution = (pluginKey, decl) => Effect.gen(function* () {
247
+ const seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);
248
+ const entry = {
249
+ pluginKey,
250
+ decl,
251
+ seq
252
+ };
253
+ yield* Ref.update(contributionsRef, (xs) => [...xs, entry]);
254
+ yield* Effect.addFinalizer(() => Ref.update(contributionsRef, (xs) => xs.filter((e) => e.seq !== seq)));
255
+ yield* Effect.annotateCurrentSpan({
256
+ "codegen.contribution.plugin": pluginKey,
257
+ "codegen.contribution.emitter": decl.emitterName,
258
+ "codegen.contribution.outputPath": decl.outputPath
259
+ });
260
+ }).pipe(Effect.withSpan("orchestrator.codegen.registerContribution"));
261
+ const runCycle = (args) => Effect.gen(function* () {
262
+ const registered = (yield* Ref.get(contributionsRef)).map((e) => e.decl);
263
+ return yield* runEmitCycle({
264
+ contributions: args?.extraContributions ? [...registered, ...args.extraContributions] : registered,
265
+ bindingsImportExtension: args?.bindingsImportExtension
266
+ });
267
+ }).pipe(Effect.withSpan("orchestrator.codegen.runCycle"));
268
+ return CodegenOrchestratorService.of({
269
+ registerContribution,
270
+ runCycle
271
+ });
272
+ }));
273
+ //#endregion
274
+ export { CodegenOrchestratorService, layerCodegenOrchestrator };
275
+
276
+ //# sourceMappingURL=service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.mjs","names":[],"sources":["../../../src/orchestrators/codegen/service.ts"],"sourcesContent":["// Codegen orchestrator — main service.\n//\n// Architecture §6 (Codegenable):\n// \"Codegen is a surface (L4) that walks the plugin-emitted\n// `Codegenable` capability decls.\"\n//\n// Hard boundary (distilled-doc §\"Hard boundary\"):\n// \"Apps consume codegen output, NOT devstack.\" Every runtime value\n// the app needs flows through codegen-emitted TS files. The\n// orchestrator owns the only legitimate channel from stack state\n// to app code.\n//\n// Lifecycle (distilled-doc §\"Lifecycle states\"):\n// - at-up: per supervisor cycle, run all emitters serially,\n// with per-file atomic/idempotent writes.\n// - on-change: re-run as part of the new cycle when the\n// supervisor restarts.\n// - on-demand: same emit pipeline for snapshot resume.\n// - idempotency: per-file no-touch on unchanged content.\n//\n// Pipeline (one cycle):\n// 1. Collect `Codegenable` contributions from the active stack\n// members (the supervisor walks `member.capabilities`).\n// 2. Validate uniqueness: emitter name (literal) is globally\n// unique; output path is globally unique.\n// 3. Run each emitter serially (distilled-doc § \"Serial within a\n// cycle\"). Each emit writes exports through a per-file context.\n// 4. Render each collected file emission to a TS source string.\n// 5. Emit each file with an atomic write + per-file no-touch\n// idempotency.\n// 6. Run the Move-bindings emitter against the collected\n// `package`-emitted contributions.\n// 7. Write the `.gitignore`.\n//\n// What this module does NOT do:\n// - Construct plugin-level resolved blobs (plugins pass them at\n// factory-build time).\n// - Decode the manifest envelope (see `manifest-bridge.ts`).\n// - Watch files (see `watcher.ts`).\n// - Walk the user's Move-source mtimes (see `bindings.ts`).\n\nimport { Context, Effect, FileSystem, Layer, Order, Ref, Scope } from 'effect';\n\nimport type {\n\tCodegenableDecl,\n\tCodegenEmitDone,\n\tCodegenEmitContext,\n} from '../../contracts/codegenable.ts';\n\nimport {\n\temitBindings,\n\ttype EmitBindingsResult,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n\ttype PackageBindings,\n} from './bindings.ts';\nimport { emitOne } from './emit.ts';\nimport {\n\tCodegenEmitFailed,\n\tCodegenEmitterCollision,\n\tCodegenPathConflict,\n\ttype CodegenError,\n} from './errors.ts';\nimport { renderFile } from './format.ts';\nimport { writeGitignore } from './gitignore.ts';\nimport { CodegenPathsService } from './paths.ts';\nimport { modeFor } from './permissions.ts';\n\n// -----------------------------------------------------------------------------\n// Public types\n// -----------------------------------------------------------------------------\n\n/** A type alias the orchestrator uses internally to avoid restating\n * the wide-erased `CodegenableDecl` generic in every signature. */\nexport type Codegenable = CodegenableDecl<string>;\n\nexport interface RunEmitCycleInput {\n\t/** All Codegenable contributions, as collected from the active\n\t * stack members' `capabilities` tuples. The orchestrator does\n\t * not look at plugins — only at the decl set. */\n\treadonly contributions: ReadonlyArray<Codegenable>;\n\t/** Optional: import-extension for bindings emission. Default `.ts`. */\n\treadonly bindingsImportExtension?: '.ts' | '.js' | '';\n}\n\nexport interface RunEmitCycleResult {\n\treadonly filesWritten: ReadonlyArray<string>;\n\treadonly filesUnchanged: ReadonlyArray<string>;\n\treadonly filesChmod: ReadonlyArray<string>;\n\treadonly bindings: EmitBindingsResult | null;\n}\n\n// -----------------------------------------------------------------------------\n// Main entry — one cycle of the codegen pipeline\n// -----------------------------------------------------------------------------\n\nexport const runEmitCycle = (\n\tinput: RunEmitCycleInput,\n): Effect.Effect<\n\tRunEmitCycleResult,\n\tCodegenError,\n\tFileSystem.FileSystem | CodegenPathsService | MoveSummaryRunnerService | MoveCodegenService\n> =>\n\tEffect.gen(function* () {\n\t\tconst paths = yield* CodegenPathsService;\n\n\t\t// 1. All contributions go through the generic file emit path.\n\t\t// Package outputs are collected for the bindings emitter\n\t\t// from the same single evaluated result used to render the\n\t\t// package pointer file.\n\t\tconst fileEmitters: Array<Codegenable> = [];\n\t\tfor (const decl of input.contributions) {\n\t\t\tfileEmitters.push(decl);\n\t\t}\n\n\t\t// 2. Validate uniqueness — both `emitterName` and `outputPath`.\n\t\t// Detected BEFORE write so the user-visible tree is\n\t\t// never half-written. `package` is the one exception:\n\t\t// multiple instances (one per Package) share the same\n\t\t// `emitterName` literal by design.\n\t\tyield* validateUniqueness(fileEmitters);\n\t\tyield* validateAggregatePathAvailability(fileEmitters);\n\n\t\t// 3-5. Run + render + emit each non-bindings contribution.\n\t\tconst filesWritten: Array<string> = [];\n\t\tconst filesUnchanged: Array<string> = [];\n\t\tconst filesChmod: Array<string> = [];\n\t\tconst aggregates = emptyAggregateBuckets();\n\t\tconst packageContribs: Array<PackageBindings> = [];\n\t\tconst sortedDecls = [...fileEmitters].sort(\n\t\t\tOrder.mapInput(Order.String, (d: Codegenable) => d.outputPath),\n\t\t);\n\t\tfor (const decl of sortedDecls) {\n\t\t\tconst emission = yield* runEmitter(decl);\n\t\t\tconst exported = emission.exports;\n\t\t\tcollectAggregateExport(aggregates, decl, exported);\n\t\t\tif (decl.emitterName === 'package') {\n\t\t\t\tconst bindings = exported['packageBindings'];\n\t\t\t\tif (isPackageBindings(bindings)) {\n\t\t\t\t\tpackageContribs.push(bindings);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst rendered = renderFile({\n\t\t\t\temitterName: decl.emitterName,\n\t\t\t\toutputPath: decl.outputPath,\n\t\t\t\tsensitive: decl.sensitive === true,\n\t\t\t\texports: exported,\n\t\t\t\timports: emission.imports,\n\t\t\t});\n\t\t\tif (rendered instanceof Error) {\n\t\t\t\t// `renderFile` returns either a string or a\n\t\t\t\t// `CodegenRenderError` (extends Error). Yield the\n\t\t\t\t// tagged form.\n\t\t\t\treturn yield* Effect.fail(rendered as CodegenError);\n\t\t\t}\n\t\t\tconst abs = paths.resolve(decl.outputPath);\n\t\t\tconst outcome = yield* emitOne({\n\t\t\t\tpath: abs,\n\t\t\t\tcontent: rendered,\n\t\t\t\tmode: modeFor(decl),\n\t\t\t});\n\t\t\tswitch (outcome.outcome) {\n\t\t\t\tcase 'wrote':\n\t\t\t\t\tfilesWritten.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'unchanged':\n\t\t\t\t\tfilesUnchanged.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'chmod-only':\n\t\t\t\t\tfilesChmod.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (const aggregate of buildAggregateFiles(aggregates)) {\n\t\t\tconst rendered = renderFile({\n\t\t\t\temitterName: aggregate.emitterName,\n\t\t\t\toutputPath: aggregate.outputPath,\n\t\t\t\tsensitive: false,\n\t\t\t\texports: aggregate.exports,\n\t\t\t});\n\t\t\tif (rendered instanceof Error) {\n\t\t\t\treturn yield* Effect.fail(rendered as CodegenError);\n\t\t\t}\n\t\t\tconst abs = paths.resolve(aggregate.outputPath);\n\t\t\tconst outcome = yield* emitOne({\n\t\t\t\tpath: abs,\n\t\t\t\tcontent: rendered,\n\t\t\t\tmode: 0o644,\n\t\t\t});\n\t\t\tswitch (outcome.outcome) {\n\t\t\t\tcase 'wrote':\n\t\t\t\t\tfilesWritten.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'unchanged':\n\t\t\t\t\tfilesUnchanged.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'chmod-only':\n\t\t\t\t\tfilesChmod.push(abs);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 6. Bindings emitter. Skipped when there are no local\n\t\t// packages (distilled-doc § \"Skip-emit is explicit and\n\t\t// logged\").\n\t\tlet bindings: EmitBindingsResult | null = null;\n\t\tif (packageContribs.length > 0) {\n\t\t\tbindings = yield* emitBindings({\n\t\t\t\tbindingsDir: paths.bindingsDir,\n\t\t\t\tpackages: packageContribs,\n\t\t\t\timportExtension: input.bindingsImportExtension,\n\t\t\t});\n\t\t} else {\n\t\t\tyield* Effect.logInfo(\n\t\t\t\t'codegen: no package contributions; skipping Move-to-TS bindings step.',\n\t\t\t);\n\t\t}\n\n\t\t// 7. Gitignore. Sensitive paths get an explicit mention.\n\t\tconst sensitivePaths = fileEmitters\n\t\t\t.filter((d) => d.sensitive === true)\n\t\t\t.map((d) => d.outputPath);\n\t\tyield* writeGitignore({\n\t\t\tpath: paths.gitignoreFile,\n\t\t\tsensitivePaths,\n\t\t});\n\n\t\treturn {\n\t\t\tfilesWritten,\n\t\t\tfilesUnchanged,\n\t\t\tfilesChmod,\n\t\t\tbindings,\n\t\t};\n\t}).pipe(\n\t\tEffect.withSpan('codegen.runEmitCycle', {\n\t\t\tattributes: {\n\t\t\t\t'codegen.contributions': input.contributions.length,\n\t\t\t},\n\t\t}),\n\t);\n\n// -----------------------------------------------------------------------------\n// Internals\n// -----------------------------------------------------------------------------\n\ninterface CodegenEmission {\n\treadonly exports: { readonly [key: string]: unknown };\n\treadonly imports: ReadonlyArray<string>;\n}\n\nconst runEmitter = (decl: Codegenable): Effect.Effect<CodegenEmission, CodegenEmitFailed> =>\n\tEffect.gen(function* () {\n\t\tconst exports: Record<string, unknown> = {};\n\t\tconst imports: Array<string> = [];\n\t\tconst done: CodegenEmitDone = { _tag: 'CodegenEmitDone' };\n\t\tconst ctx: CodegenEmitContext = {\n\t\t\texportConst: (name, value) => {\n\t\t\t\texports[name] = value;\n\t\t\t},\n\t\t\timportStatement: (statement) => {\n\t\t\t\timports.push(statement);\n\t\t\t},\n\t\t\tdone: () => done,\n\t\t};\n\t\tyield* decl.emit(ctx).pipe(\n\t\t\tEffect.mapError(\n\t\t\t\t(cause) =>\n\t\t\t\t\tnew CodegenEmitFailed({\n\t\t\t\t\t\temitterName: decl.emitterName,\n\t\t\t\t\t\toutputPath: decl.outputPath,\n\t\t\t\t\t\tcause,\n\t\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t\treturn { exports, imports };\n\t});\n\n/**\n * Uniqueness check: emitter name (literal) must be unique EXCEPT\n * for the `package` emitter, which legitimately appears once per\n * Package contribution. Output paths must be unique across ALL\n * emitters (including each `package`-emitted pointer file).\n */\nconst validateUniqueness = (\n\tdecls: ReadonlyArray<Codegenable>,\n): Effect.Effect<void, CodegenPathConflict | CodegenEmitterCollision> =>\n\tEffect.gen(function* () {\n\t\tconst byPath = new Map<string, Array<string>>();\n\t\tconst byName = new Map<string, Array<string>>();\n\t\tfor (const d of decls) {\n\t\t\tconst ps = byPath.get(d.outputPath) ?? [];\n\t\t\tps.push(d.emitterName);\n\t\t\tbyPath.set(d.outputPath, ps);\n\t\t\t// `package` is allowed to repeat — it's per-Package by design.\n\t\t\tif (d.emitterName === 'package') continue;\n\t\t\tconst ns = byName.get(d.emitterName) ?? [];\n\t\t\tns.push(d.outputPath);\n\t\t\tbyName.set(d.emitterName, ns);\n\t\t}\n\t\tfor (const [path, emitters] of byPath) {\n\t\t\tif (emitters.length > 1) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew CodegenPathConflict({\n\t\t\t\t\t\toutputPath: path,\n\t\t\t\t\t\temitters,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tfor (const [name, outputPaths] of byName) {\n\t\t\tif (outputPaths.length > 1) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew CodegenEmitterCollision({\n\t\t\t\t\t\temitterName: name,\n\t\t\t\t\t\toutputPaths,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\nconst AGGREGATE_OUTPUTS = {\n\taccounts: 'accounts.ts',\n\tcoins: 'coins.ts',\n\tpackages: 'packages.ts',\n\tservices: 'services.ts',\n} as const;\n\nconst aggregatePathFor = (decl: Codegenable): string | null => {\n\tif (decl.emitterName.startsWith('account/')) return AGGREGATE_OUTPUTS.accounts;\n\tif (decl.emitterName.startsWith('coin/')) return AGGREGATE_OUTPUTS.coins;\n\tif (decl.emitterName === 'package') return AGGREGATE_OUTPUTS.packages;\n\tif (decl.emitterName === 'sui-network') return AGGREGATE_OUTPUTS.services;\n\treturn null;\n};\n\nconst validateAggregatePathAvailability = (\n\tdecls: ReadonlyArray<Codegenable>,\n): Effect.Effect<void, CodegenPathConflict> =>\n\tEffect.gen(function* () {\n\t\tconst aggregatePaths = new Set<string>();\n\t\tfor (const decl of decls) {\n\t\t\tconst path = aggregatePathFor(decl);\n\t\t\tif (path !== null) aggregatePaths.add(path);\n\t\t}\n\t\tfor (const path of aggregatePaths) {\n\t\t\tconst colliding = decls.filter((decl) => decl.outputPath === path);\n\t\t\tif (colliding.length > 0) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew CodegenPathConflict({\n\t\t\t\t\t\toutputPath: path,\n\t\t\t\t\t\temitters: [...colliding.map((decl) => decl.emitterName), `aggregate/${path}`],\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\ninterface AggregateBuckets {\n\treadonly accounts: Record<string, unknown>;\n\treadonly coins: Record<string, unknown>;\n\treadonly packages: Record<string, unknown>;\n\treadonly services: Record<string, unknown>;\n}\n\nconst emptyAggregateBuckets = (): AggregateBuckets => ({\n\taccounts: {},\n\tcoins: {},\n\tpackages: {},\n\tservices: {},\n});\n\nconst collectAggregateExport = (\n\tbuckets: AggregateBuckets,\n\tdecl: Codegenable,\n\texported: { readonly [key: string]: unknown },\n): void => {\n\tif (decl.emitterName.startsWith('account/')) {\n\t\tObject.assign(buckets.accounts, exported);\n\t\treturn;\n\t}\n\tif (decl.emitterName.startsWith('coin/')) {\n\t\tObject.assign(buckets.coins, exported);\n\t\treturn;\n\t}\n\tif (decl.emitterName === 'package') {\n\t\tconst bindings = exported['packageBindings'];\n\t\tif (isPackageBindings(bindings)) {\n\t\t\tbuckets.packages[bindings.name] = bindings;\n\t\t}\n\t\treturn;\n\t}\n\tif (decl.emitterName === 'sui-network') {\n\t\tconst network = exported['suiNetwork'];\n\t\tif (isRecord(network)) {\n\t\t\tconst rpcUrl = stringField(network, 'rpcUrl');\n\t\t\tconst faucetUrl = stringField(network, 'faucetUrl');\n\t\t\tconst graphqlUrl = stringField(network, 'graphqlUrl');\n\t\t\tbuckets.services['sui'] = {\n\t\t\t\trpc: { url: rpcUrl ?? '' },\n\t\t\t\tfaucet: faucetUrl === null ? null : { url: faucetUrl },\n\t\t\t\tgraphql: graphqlUrl === null ? null : { url: graphqlUrl },\n\t\t\t};\n\t\t}\n\t}\n};\n\ninterface AggregateFile {\n\treadonly emitterName: string;\n\treadonly outputPath: string;\n\treadonly exports: { readonly [key: string]: unknown };\n}\n\nconst buildAggregateFiles = (buckets: AggregateBuckets): ReadonlyArray<AggregateFile> => {\n\tconst files: Array<AggregateFile> = [];\n\tif (Object.keys(buckets.accounts).length > 0) {\n\t\tfiles.push({\n\t\t\temitterName: 'aggregate/accounts',\n\t\t\toutputPath: AGGREGATE_OUTPUTS.accounts,\n\t\t\texports: { accounts: buckets.accounts },\n\t\t});\n\t}\n\tif (Object.keys(buckets.coins).length > 0) {\n\t\tfiles.push({\n\t\t\temitterName: 'aggregate/coins',\n\t\t\toutputPath: AGGREGATE_OUTPUTS.coins,\n\t\t\texports: { coins: buckets.coins },\n\t\t});\n\t}\n\tif (Object.keys(buckets.packages).length > 0) {\n\t\tfiles.push({\n\t\t\temitterName: 'aggregate/packages',\n\t\t\toutputPath: AGGREGATE_OUTPUTS.packages,\n\t\t\texports: { packages: buckets.packages },\n\t\t});\n\t}\n\tif (Object.keys(buckets.services).length > 0) {\n\t\tfiles.push({\n\t\t\temitterName: 'aggregate/services',\n\t\t\toutputPath: AGGREGATE_OUTPUTS.services,\n\t\t\texports: { services: buckets.services },\n\t\t});\n\t}\n\treturn files;\n};\n\nconst isPackageBindings = (v: unknown): v is PackageBindings =>\n\ttypeof v === 'object' &&\n\tv !== null &&\n\t'name' in v &&\n\t'packageId' in v &&\n\t'mvrPlaceholder' in v &&\n\t'sourcePath' in v;\n\nconst isRecord = (v: unknown): v is Readonly<Record<string, unknown>> =>\n\ttypeof v === 'object' && v !== null;\n\nconst stringField = (record: Readonly<Record<string, unknown>>, key: string): string | null => {\n\tconst value = record[key];\n\treturn typeof value === 'string' && value.length > 0 ? value : null;\n};\n\n// -----------------------------------------------------------------------------\n// Service surface — registration API + emit-cycle trigger\n// -----------------------------------------------------------------------------\n\n/**\n * The codegen orchestrator's Context-bound service. The substrate's\n * supervisor calls `registerContribution(pluginKey, decl)` once per\n * `CodegenableDecl` on each plugin's `capabilities` tuple, scope-bound\n * to that plugin's acquire scope. `runCycle()` walks the registered\n * set and runs one full emit pipeline.\n */\nexport interface CodegenOrchestrator {\n\t/** Register a `CodegenableDecl` from a plugin. Scope-bound — when\n\t * the caller's scope (the plugin's acquire scope) closes, the\n\t * registration is reaped. */\n\treadonly registerContribution: (\n\t\tpluginKey: string,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\n\t/** Run one emit cycle against the currently-registered set.\n\t * `extraContributions` are merged into the active set (callers\n\t * that have a one-off decl not tied to a plugin scope).\n\t * `bindingsImportExtension` mirrors `runEmitCycle`. */\n\treadonly runCycle: (args?: {\n\t\treadonly extraContributions?: ReadonlyArray<Codegenable>;\n\t\treadonly bindingsImportExtension?: '.ts' | '.js' | '';\n\t}) => Effect.Effect<\n\t\tRunEmitCycleResult,\n\t\tCodegenError,\n\t\tFileSystem.FileSystem | CodegenPathsService | MoveSummaryRunnerService | MoveCodegenService\n\t>;\n}\n\nexport class CodegenOrchestratorService extends Context.Service<\n\tCodegenOrchestratorService,\n\tCodegenOrchestrator\n>()('@devstack-rewrite/orchestrators/Codegen') {}\n\ninterface RegisteredCodegenEntry {\n\treadonly pluginKey: string;\n\treadonly decl: Codegenable;\n\treadonly seq: number;\n}\n\n/** Layer-wired codegen orchestrator. No upstream requirements at boot\n * time — the per-cycle effect carries the `FileSystem` + Move-codegen\n * service requirements through to the caller. */\nexport const layerCodegenOrchestrator: Layer.Layer<CodegenOrchestratorService> = Layer.effect(\n\tCodegenOrchestratorService,\n\tEffect.gen(function* () {\n\t\tconst contributionsRef = yield* Ref.make<ReadonlyArray<RegisteredCodegenEntry>>([]);\n\t\tconst seqRef = yield* Ref.make(0);\n\n\t\tconst registerContribution: CodegenOrchestrator['registerContribution'] = (pluginKey, decl) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);\n\t\t\t\tconst entry: RegisteredCodegenEntry = { pluginKey, decl, seq };\n\t\t\t\tyield* Ref.update(contributionsRef, (xs) => [...xs, entry]);\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tRef.update(contributionsRef, (xs) => xs.filter((e) => e.seq !== seq)),\n\t\t\t\t);\n\t\t\t\tyield* Effect.annotateCurrentSpan({\n\t\t\t\t\t'codegen.contribution.plugin': pluginKey,\n\t\t\t\t\t'codegen.contribution.emitter': decl.emitterName,\n\t\t\t\t\t'codegen.contribution.outputPath': decl.outputPath,\n\t\t\t\t});\n\t\t\t}).pipe(Effect.withSpan('orchestrator.codegen.registerContribution')) as Effect.Effect<\n\t\t\t\tvoid,\n\t\t\t\tnever,\n\t\t\t\tScope.Scope\n\t\t\t>;\n\n\t\tconst runCycle: CodegenOrchestrator['runCycle'] = (args) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst registered = (yield* Ref.get(contributionsRef)).map((e) => e.decl);\n\t\t\t\tconst merged: ReadonlyArray<Codegenable> = args?.extraContributions\n\t\t\t\t\t? [...registered, ...args.extraContributions]\n\t\t\t\t\t: registered;\n\t\t\t\treturn yield* runEmitCycle({\n\t\t\t\t\tcontributions: merged,\n\t\t\t\t\tbindingsImportExtension: args?.bindingsImportExtension,\n\t\t\t\t});\n\t\t\t}).pipe(Effect.withSpan('orchestrator.codegen.runCycle'));\n\n\t\treturn CodegenOrchestratorService.of({\n\t\t\tregisterContribution,\n\t\t\trunCycle,\n\t\t});\n\t}),\n);\n"],"mappings":"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"}