spawnfile 0.1.12 → 0.1.14

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 (620) hide show
  1. package/README.md +58 -12
  2. package/dist/audit/auditCli.d.ts +19 -0
  3. package/dist/audit/auditCli.js +63 -0
  4. package/dist/audit/checks.d.ts +100 -0
  5. package/dist/audit/checks.js +279 -0
  6. package/dist/audit/checksShared.d.ts +74 -0
  7. package/dist/audit/checksShared.js +37 -0
  8. package/dist/audit/generateAudit.d.ts +19 -0
  9. package/dist/audit/generateAudit.js +122 -0
  10. package/dist/audit/index.d.ts +4 -0
  11. package/dist/audit/index.js +4 -0
  12. package/dist/audit/readAudit.d.ts +50 -0
  13. package/dist/audit/readAudit.js +59 -0
  14. package/dist/audit/types.d.ts +40 -0
  15. package/dist/audit/types.js +8 -0
  16. package/dist/auth/credentialEnvFile.d.ts +11 -0
  17. package/dist/auth/credentialEnvFile.js +60 -0
  18. package/dist/auth/credentialProvisioning.d.ts +15 -0
  19. package/dist/auth/credentialProvisioning.js +75 -0
  20. package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
  21. package/dist/auth/credentialProvisioningReceipt.js +70 -0
  22. package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
  23. package/dist/auth/credentialProvisioningRequest.js +169 -0
  24. package/dist/auth/credentialWorldBindings.d.ts +21 -0
  25. package/dist/auth/credentialWorldBindings.js +104 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.js +7 -0
  28. package/dist/auth/paths.d.ts +11 -0
  29. package/dist/auth/paths.js +21 -0
  30. package/dist/auth/runtimeCredentials.js +18 -2
  31. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  32. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  33. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  34. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  36. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  37. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  38. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  39. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  40. package/dist/auth/targetSecretSourceGrant.js +99 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  42. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  43. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  44. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  46. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  48. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  50. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  51. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  52. package/dist/auth/targetSecretSourceResolver.js +137 -0
  53. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  54. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  55. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  56. package/dist/auth/targetSecretSourceRotate.js +121 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  58. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  59. package/dist/cli/artifactsCommands.d.ts +27 -0
  60. package/dist/cli/artifactsCommands.js +132 -0
  61. package/dist/cli/authCommands.d.ts +5 -0
  62. package/dist/cli/authCommands.js +221 -0
  63. package/dist/cli/compileBuildCommands.d.ts +3 -0
  64. package/dist/cli/compileBuildCommands.js +35 -0
  65. package/dist/cli/containerBundleCommand.d.ts +6 -0
  66. package/dist/cli/containerBundleCommand.js +116 -0
  67. package/dist/cli/devCommands.d.ts +3 -0
  68. package/dist/cli/devCommands.js +115 -0
  69. package/dist/cli/downCommand.d.ts +25 -0
  70. package/dist/cli/downCommand.js +134 -0
  71. package/dist/cli/index.js +6 -3
  72. package/dist/cli/lifecycleCommands.d.ts +1 -1
  73. package/dist/cli/lifecycleCommands.js +11 -179
  74. package/dist/cli/lifecycleMachine.d.ts +19 -0
  75. package/dist/cli/lifecycleMachine.js +78 -0
  76. package/dist/cli/lifecyclePlan.d.ts +35 -0
  77. package/dist/cli/lifecyclePlan.js +240 -0
  78. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  79. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  80. package/dist/cli/runCli.d.ts +15 -2
  81. package/dist/cli/runCli.js +31 -71
  82. package/dist/cli/runPublishCommands.d.ts +3 -0
  83. package/dist/cli/runPublishCommands.js +70 -0
  84. package/dist/cli/statusCommand.d.ts +3 -32
  85. package/dist/cli/statusCommand.js +37 -233
  86. package/dist/cli/statusCommandLive.d.ts +20 -0
  87. package/dist/cli/statusCommandLive.js +188 -0
  88. package/dist/cli/statusCommandOptions.d.ts +40 -0
  89. package/dist/cli/statusCommandOptions.js +42 -0
  90. package/dist/cli/targetCliRoute.d.ts +2 -0
  91. package/dist/cli/targetCliRoute.js +30 -0
  92. package/dist/cli/targetCommands.d.ts +33 -0
  93. package/dist/cli/targetCommands.js +257 -0
  94. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  95. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  96. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  97. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  98. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  99. package/dist/cli/targetDefaultAuthorities.js +210 -0
  100. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  101. package/dist/cli/targetDefaultConfig.js +317 -0
  102. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  103. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  104. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  105. package/dist/cli/targetDefaultEnvelope.js +13 -0
  106. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  107. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  108. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  109. package/dist/cli/targetDefaultHandlers.js +72 -0
  110. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  111. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  112. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  113. package/dist/cli/targetDefaultWorldClock.js +14 -0
  114. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  115. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  116. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  117. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  118. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  119. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  120. package/dist/cli/targetLookupCli.d.ts +3 -0
  121. package/dist/cli/targetLookupCli.js +31 -0
  122. package/dist/cli/targetLookupCommands.d.ts +12 -0
  123. package/dist/cli/targetLookupCommands.js +69 -0
  124. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  125. package/dist/cli/targetOperationDispatch.js +21 -0
  126. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  127. package/dist/cli/targetReceiptOutput.js +21 -0
  128. package/dist/cli/targetRequestFile.d.ts +14 -0
  129. package/dist/cli/targetRequestFile.js +63 -0
  130. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  131. package/dist/cli/targetSecretSourceInput.js +121 -0
  132. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  133. package/dist/cli/targetWorldClockCommand.js +42 -0
  134. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  135. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  136. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  137. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  138. package/dist/cli/upCommand.d.ts +3 -0
  139. package/dist/cli/upCommand.js +133 -0
  140. package/dist/cli/upImageCommand.d.ts +11 -0
  141. package/dist/cli/upImageCommand.js +41 -0
  142. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  143. package/dist/cli/upLifecycleInvocation.js +48 -0
  144. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  145. package/dist/cli/upLifecycleRecovery.js +53 -0
  146. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  147. package/dist/compiler/agentNodeMerge.js +79 -0
  148. package/dist/compiler/agentSurfaces.js +11 -1
  149. package/dist/compiler/buildCompilePlan.js +17 -0
  150. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  151. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  152. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  153. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  154. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  155. package/dist/compiler/buildProject.d.ts +20 -1
  156. package/dist/compiler/buildProject.js +121 -7
  157. package/dist/compiler/compilePlanHelpers.js +2 -0
  158. package/dist/compiler/compileProject.d.ts +15 -0
  159. package/dist/compiler/compileProject.js +29 -75
  160. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  161. package/dist/compiler/compileProjectPolicy.js +21 -0
  162. package/dist/compiler/compileProjectReports.d.ts +9 -0
  163. package/dist/compiler/compileProjectReports.js +52 -0
  164. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  165. package/dist/compiler/containerArtifactSummaries.js +138 -0
  166. package/dist/compiler/containerArtifacts.d.ts +10 -0
  167. package/dist/compiler/containerArtifacts.js +126 -125
  168. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  169. package/dist/compiler/containerArtifactsPlans.js +31 -118
  170. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  171. package/dist/compiler/containerArtifactsRender.js +40 -81
  172. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  173. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  174. package/dist/compiler/containerConfigEnvRender.js +54 -0
  175. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  176. package/dist/compiler/containerEntrypointRender.js +60 -53
  177. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  178. package/dist/compiler/containerEntrypointShell.js +29 -0
  179. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  180. package/dist/compiler/containerPackageOverrides.js +63 -0
  181. package/dist/compiler/containerPackageRender.d.ts +15 -0
  182. package/dist/compiler/containerPackageRender.js +63 -0
  183. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  184. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  185. package/dist/compiler/containerTargetResources.js +3 -1
  186. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  187. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  188. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  189. package/dist/compiler/dockerBuildContext.js +159 -0
  190. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  191. package/dist/compiler/dockerBuildSkip.js +81 -0
  192. package/dist/compiler/index.d.ts +4 -0
  193. package/dist/compiler/index.js +4 -0
  194. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  195. package/dist/compiler/memoryArtifacts.js +134 -0
  196. package/dist/compiler/memoryResolution.d.ts +4 -0
  197. package/dist/compiler/memoryResolution.js +147 -0
  198. package/dist/compiler/modelEnv.d.ts +2 -0
  199. package/dist/compiler/modelEnv.js +6 -0
  200. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  201. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  202. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  203. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  204. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  205. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  206. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  207. package/dist/compiler/moltnetArtifacts.js +56 -95
  208. package/dist/compiler/moltnetBinaries.d.ts +21 -1
  209. package/dist/compiler/moltnetBinaries.js +156 -28
  210. package/dist/compiler/moltnetClientConfig.js +18 -2
  211. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  212. package/dist/compiler/moltnetConfigLowering.js +67 -5
  213. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  214. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  215. package/dist/compiler/moltnetNodeConfig.js +7 -2
  216. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  217. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  218. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  219. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  220. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  221. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  222. package/dist/compiler/moltnetResolution.js +72 -20
  223. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  224. package/dist/compiler/moltnetRuntimeConfig.js +11 -0
  225. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  226. package/dist/compiler/moltnetServerPlans.js +132 -0
  227. package/dist/compiler/organizationIdentity.d.ts +27 -0
  228. package/dist/compiler/organizationIdentity.js +297 -0
  229. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  230. package/dist/compiler/organizationReadyEvidence.js +261 -0
  231. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  232. package/dist/compiler/projectManifestGraph.js +24 -0
  233. package/dist/compiler/runProject.d.ts +4 -0
  234. package/dist/compiler/runProject.js +37 -22
  235. package/dist/compiler/runProjectAuth.d.ts +7 -1
  236. package/dist/compiler/runProjectAuth.js +87 -9
  237. package/dist/compiler/runProjectDocker.d.ts +7 -0
  238. package/dist/compiler/runProjectDocker.js +187 -19
  239. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  240. package/dist/compiler/runProjectLifecycle.js +40 -0
  241. package/dist/compiler/syncProjectAuth.js +4 -1
  242. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  243. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  244. package/dist/compiler/teamContextSupport.js +32 -40
  245. package/dist/compiler/teamContextTypes.d.ts +2 -0
  246. package/dist/compiler/types.d.ts +82 -1
  247. package/dist/compiler/upProject.d.ts +5 -0
  248. package/dist/compiler/upProject.js +257 -20
  249. package/dist/compiler/upReceipt.d.ts +36 -0
  250. package/dist/compiler/upReceipt.js +82 -0
  251. package/dist/compiler/updateProjectModels.js +42 -60
  252. package/dist/compiler/updateProjectRuntime.js +22 -35
  253. package/dist/compiler/updateProjectSurfaces.js +53 -47
  254. package/dist/compiler/worldBindings.d.ts +39 -0
  255. package/dist/compiler/worldBindings.js +247 -0
  256. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  257. package/dist/compiler/worldBindingsFile.js +162 -0
  258. package/dist/deployment/artifactsExport.d.ts +49 -0
  259. package/dist/deployment/artifactsExport.js +217 -0
  260. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  261. package/dist/deployment/artifactsExportDocker.js +91 -0
  262. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  263. package/dist/deployment/artifactsExportPlan.js +135 -0
  264. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  265. package/dist/deployment/artifactsExportTypes.js +52 -0
  266. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  267. package/dist/deployment/buildImageCacheStore.js +54 -0
  268. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  269. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  270. package/dist/deployment/dockerInspect.d.ts +9 -0
  271. package/dist/deployment/dockerInspect.js +24 -1
  272. package/dist/deployment/dockerLabels.d.ts +2 -0
  273. package/dist/deployment/dockerLabels.js +2 -0
  274. package/dist/deployment/dockerLogs.js +2 -10
  275. package/dist/deployment/dockerManager.d.ts +51 -0
  276. package/dist/deployment/dockerManager.js +118 -1
  277. package/dist/deployment/dockerProbeGateway.js +64 -5
  278. package/dist/deployment/dockerRecover.d.ts +17 -0
  279. package/dist/deployment/dockerRecover.js +137 -0
  280. package/dist/deployment/dockerTeardown.d.ts +32 -0
  281. package/dist/deployment/dockerTeardown.js +61 -0
  282. package/dist/deployment/downDeployment.d.ts +34 -0
  283. package/dist/deployment/downDeployment.js +147 -0
  284. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  285. package/dist/deployment/downReceiptTypes.js +30 -0
  286. package/dist/deployment/index.d.ts +17 -0
  287. package/dist/deployment/index.js +18 -0
  288. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  289. package/dist/deployment/lifecycleCompletion.js +236 -0
  290. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  291. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  292. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  293. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  294. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  295. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  296. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  297. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  298. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  299. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  300. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  301. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  302. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  303. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  304. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  305. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  306. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  307. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  308. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  309. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  310. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  311. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  312. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  313. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  314. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  315. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  316. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  317. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  318. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  319. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  320. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  321. package/dist/deployment/organizationHandoffTypes.js +80 -0
  322. package/dist/deployment/organizationReady.d.ts +52 -0
  323. package/dist/deployment/organizationReady.js +200 -0
  324. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  325. package/dist/deployment/privateArtifactsExport.js +80 -0
  326. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  327. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  328. package/dist/deployment/record.d.ts +26 -1
  329. package/dist/deployment/record.js +49 -4
  330. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  331. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  332. package/dist/deployment/target.d.ts +1 -35
  333. package/dist/deployment/target.js +1 -96
  334. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  335. package/dist/deployment/upReceiptTypes.js +164 -0
  336. package/dist/dev/activity.d.ts +14 -0
  337. package/dist/dev/activity.js +48 -0
  338. package/dist/dev/docker.d.ts +16 -0
  339. package/dist/dev/docker.js +71 -0
  340. package/dist/dev/index.d.ts +2 -0
  341. package/dist/dev/index.js +2 -0
  342. package/dist/dev/project.d.ts +35 -0
  343. package/dist/dev/project.js +170 -0
  344. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  345. package/dist/distribution/buildDistributionReport.js +2 -1
  346. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  347. package/dist/distribution/distributionReportSchema.js +7 -2
  348. package/dist/distribution/index.d.ts +2 -2
  349. package/dist/distribution/index.js +1 -1
  350. package/dist/distribution/types.d.ts +7 -0
  351. package/dist/distribution/types.js +1 -0
  352. package/dist/filesystem/paths.js +10 -1
  353. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  354. package/dist/ledger/causalConformanceCli.js +41 -0
  355. package/dist/ledger/causeNamespace.d.ts +8 -0
  356. package/dist/ledger/causeNamespace.js +24 -0
  357. package/dist/ledger/conformance.d.ts +83 -0
  358. package/dist/ledger/conformance.js +259 -0
  359. package/dist/ledger/emitters.d.ts +76 -0
  360. package/dist/ledger/emitters.js +188 -0
  361. package/dist/ledger/index.d.ts +4 -0
  362. package/dist/ledger/index.js +4 -0
  363. package/dist/ledger/principal.d.ts +96 -0
  364. package/dist/ledger/principal.js +121 -0
  365. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  366. package/dist/manifest/externalParticipantSchemas.js +17 -0
  367. package/dist/manifest/index.d.ts +1 -0
  368. package/dist/manifest/index.js +1 -0
  369. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  370. package/dist/manifest/inlineAgentMember.js +9 -0
  371. package/dist/manifest/loadManifest.js +14 -8
  372. package/dist/manifest/mcpSchemas.d.ts +17 -0
  373. package/dist/manifest/mcpSchemas.js +41 -0
  374. package/dist/manifest/memorySchemas.d.ts +245 -0
  375. package/dist/manifest/memorySchemas.js +148 -0
  376. package/dist/manifest/renderSpawnfile.js +22 -131
  377. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  378. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  379. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  380. package/dist/manifest/schemas.d.ts +1868 -99
  381. package/dist/manifest/schemas.js +78 -32
  382. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  383. package/dist/manifest/surfaceSchemas.js +24 -1
  384. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  385. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  386. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  387. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  388. package/dist/manifest/teamNetworkSchemas.js +3 -317
  389. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  390. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  391. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  392. package/dist/ownership/siblingBuildFreshness.js +20 -0
  393. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  394. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  395. package/dist/report/types.d.ts +142 -0
  396. package/dist/runtime/common.d.ts +37 -0
  397. package/dist/runtime/common.js +56 -1
  398. package/dist/runtime/container.d.ts +29 -1
  399. package/dist/runtime/container.js +127 -11
  400. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  401. package/dist/runtime/containerPackageOverrides.js +33 -0
  402. package/dist/runtime/index.d.ts +2 -0
  403. package/dist/runtime/index.js +2 -0
  404. package/dist/runtime/install.d.ts +1 -1
  405. package/dist/runtime/install.js +43 -1
  406. package/dist/runtime/mnemeMcp.d.ts +15 -0
  407. package/dist/runtime/mnemeMcp.js +109 -0
  408. package/dist/runtime/openclaw/adapter.js +15 -4
  409. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  410. package/dist/runtime/openclaw/mcp.js +69 -0
  411. package/dist/runtime/openclaw/runAuth.js +2 -2
  412. package/dist/runtime/openclaw/scaffold.js +1 -1
  413. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  414. package/dist/runtime/openclaw/schedules.js +74 -0
  415. package/dist/runtime/pi/adapter.d.ts +4 -0
  416. package/dist/runtime/pi/adapter.js +231 -0
  417. package/dist/runtime/pi/appActivitySource.d.ts +1 -0
  418. package/dist/runtime/pi/appActivitySource.js +199 -0
  419. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  420. package/dist/runtime/pi/appAgentConfig.js +264 -0
  421. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  422. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  423. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  424. package/dist/runtime/pi/appCliSource.js +353 -0
  425. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  426. package/dist/runtime/pi/appControlSource.js +390 -0
  427. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  428. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  429. package/dist/runtime/pi/appCoreSource.d.ts +4 -0
  430. package/dist/runtime/pi/appCoreSource.js +244 -0
  431. package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
  432. package/dist/runtime/pi/appPreludeSource.js +191 -0
  433. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  434. package/dist/runtime/pi/appScheduleSource.js +80 -0
  435. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  436. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  437. package/dist/runtime/pi/appSource.d.ts +4 -0
  438. package/dist/runtime/pi/appSource.js +12 -0
  439. package/dist/runtime/pi/appTemplate.d.ts +14 -0
  440. package/dist/runtime/pi/appTemplate.js +27 -0
  441. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  442. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  443. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  444. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  445. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  446. package/dist/runtime/pi/containerTargets.js +57 -0
  447. package/dist/runtime/pi/runAuth.d.ts +2 -0
  448. package/dist/runtime/pi/runAuth.js +185 -0
  449. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  450. package/dist/runtime/pi/testHelpers.js +40 -0
  451. package/dist/runtime/picoclaw/adapter.js +23 -27
  452. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  453. package/dist/runtime/picoclaw/mcp.js +43 -0
  454. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  455. package/dist/runtime/picoclaw/memory.js +17 -0
  456. package/dist/runtime/picoclaw/runAuth.js +1 -1
  457. package/dist/runtime/picoclaw/scaffold.js +1 -1
  458. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  459. package/dist/runtime/picoclaw/schedules.js +62 -3
  460. package/dist/runtime/registry.js +3 -0
  461. package/dist/runtime/scheduleUtils.d.ts +2 -0
  462. package/dist/runtime/scheduleUtils.js +15 -0
  463. package/dist/runtime/types.d.ts +26 -2
  464. package/dist/shared/errors.d.ts +1 -1
  465. package/dist/shared/errors.js +2 -2
  466. package/dist/shared/index.d.ts +1 -0
  467. package/dist/shared/index.js +1 -0
  468. package/dist/shared/redaction.d.ts +2 -0
  469. package/dist/shared/redaction.js +10 -0
  470. package/dist/status/buildStatus.d.ts +1 -0
  471. package/dist/status/buildStatus.js +2 -0
  472. package/dist/status/compileReport.d.ts +22 -0
  473. package/dist/status/compileReport.js +16 -2
  474. package/dist/status/compiledProbeCollection.d.ts +21 -0
  475. package/dist/status/compiledProbeCollection.js +27 -0
  476. package/dist/status/deployments.js +5 -12
  477. package/dist/status/imageStatusReport.js +6 -0
  478. package/dist/status/index.d.ts +3 -0
  479. package/dist/status/index.js +3 -0
  480. package/dist/status/lifecycleProbes.d.ts +19 -0
  481. package/dist/status/lifecycleProbes.js +174 -0
  482. package/dist/status/moltnetProbes.d.ts +7 -8
  483. package/dist/status/moltnetProbes.js +27 -198
  484. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  485. package/dist/status/moltnetWiringProbes.js +178 -0
  486. package/dist/target/cleanupRun.d.ts +41 -0
  487. package/dist/target/cleanupRun.js +139 -0
  488. package/dist/target/cleanupRunDocker.d.ts +16 -0
  489. package/dist/target/cleanupRunDocker.js +66 -0
  490. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  491. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  492. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  493. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  494. package/dist/target/composedPreparation.d.ts +205 -0
  495. package/dist/target/composedPreparation.js +223 -0
  496. package/dist/target/containerBundle.d.ts +82 -0
  497. package/dist/target/containerBundle.js +243 -0
  498. package/dist/target/containerBundleArchive.d.ts +31 -0
  499. package/dist/target/containerBundleArchive.js +140 -0
  500. package/dist/target/containerBundleAuthority.d.ts +25 -0
  501. package/dist/target/containerBundleAuthority.js +65 -0
  502. package/dist/target/containerBundleContracts.d.ts +114 -0
  503. package/dist/target/containerBundleContracts.js +173 -0
  504. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  505. package/dist/target/containerBundleFilesystemStore.js +247 -0
  506. package/dist/target/containerBundlePolicy.d.ts +33 -0
  507. package/dist/target/containerBundlePolicy.js +64 -0
  508. package/dist/target/containerBundleStore.d.ts +127 -0
  509. package/dist/target/containerBundleStore.js +284 -0
  510. package/dist/target/contracts.d.ts +538 -0
  511. package/dist/target/contracts.js +373 -0
  512. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  513. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  514. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  515. package/dist/target/dockerArtifactInspection.js +125 -0
  516. package/dist/target/dockerArtifacts.d.ts +21 -0
  517. package/dist/target/dockerArtifacts.js +110 -0
  518. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  519. package/dist/target/dockerArtifactsProvider.js +449 -0
  520. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  521. package/dist/target/dockerCommandExecutor.js +200 -0
  522. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  523. package/dist/target/dockerCommandExecutorCore.js +273 -0
  524. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  525. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  526. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  527. package/dist/target/dockerContextSnapshot.js +158 -0
  528. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  529. package/dist/target/dockerEndpointFingerprint.js +9 -0
  530. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  531. package/dist/target/dockerPreparedArtifact.js +131 -0
  532. package/dist/target/dockerProjectionJson.d.ts +1 -0
  533. package/dist/target/dockerProjectionJson.js +80 -0
  534. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  535. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  536. package/dist/target/dockerResources.d.ts +26 -0
  537. package/dist/target/dockerResources.js +162 -0
  538. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  539. package/dist/target/dockerResourcesProvider.js +207 -0
  540. package/dist/target/dockerSecrets.d.ts +39 -0
  541. package/dist/target/dockerSecrets.js +249 -0
  542. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  543. package/dist/target/dockerSecretsAuthority.js +216 -0
  544. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  545. package/dist/target/dockerSecretsLifecycle.js +133 -0
  546. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  547. package/dist/target/dockerSecretsProvider.js +329 -0
  548. package/dist/target/dockerTarget.d.ts +52 -0
  549. package/dist/target/dockerTarget.js +48 -0
  550. package/dist/target/dockerTargetBinding.d.ts +14 -0
  551. package/dist/target/dockerTargetBinding.js +96 -0
  552. package/dist/target/dockerWorldClock.d.ts +17 -0
  553. package/dist/target/dockerWorldClock.js +111 -0
  554. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  555. package/dist/target/dockerWorldReadiness.js +119 -0
  556. package/dist/target/dockerWorldService.d.ts +23 -0
  557. package/dist/target/dockerWorldService.js +216 -0
  558. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  559. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  560. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  561. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  562. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  563. package/dist/target/dockerWorldServiceProvider.js +318 -0
  564. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  565. package/dist/target/dockerWorldServiceStore.js +367 -0
  566. package/dist/target/evidenceExport.d.ts +55 -0
  567. package/dist/target/evidenceExport.js +518 -0
  568. package/dist/target/evidenceExportArchive.d.ts +10 -0
  569. package/dist/target/evidenceExportArchive.js +302 -0
  570. package/dist/target/evidenceExportContract.d.ts +27 -0
  571. package/dist/target/evidenceExportContract.js +40 -0
  572. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  573. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  574. package/dist/target/evidenceExportProvider.d.ts +85 -0
  575. package/dist/target/evidenceExportProvider.js +187 -0
  576. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  577. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  578. package/dist/target/evidenceExportStore.d.ts +70 -0
  579. package/dist/target/evidenceExportStore.js +498 -0
  580. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  581. package/dist/target/evidenceExportStorePublication.js +395 -0
  582. package/dist/target/handles.d.ts +20 -0
  583. package/dist/target/handles.js +56 -0
  584. package/dist/target/index.d.ts +12 -0
  585. package/dist/target/index.js +11 -0
  586. package/dist/target/journal.d.ts +59 -0
  587. package/dist/target/journal.js +529 -0
  588. package/dist/target/journalFilesystem.d.ts +3 -0
  589. package/dist/target/journalFilesystem.js +111 -0
  590. package/dist/target/journalRoot.d.ts +4 -0
  591. package/dist/target/journalRoot.js +6 -0
  592. package/dist/target/organizationAttachment.d.ts +23 -0
  593. package/dist/target/organizationAttachment.js +263 -0
  594. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  595. package/dist/target/organizationAttachmentAuthority.js +161 -0
  596. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  597. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  598. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  599. package/dist/target/organizationAttachmentProvider.js +289 -0
  600. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  601. package/dist/target/organizationAttachmentStore.js +316 -0
  602. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  603. package/dist/target/publicArtifactSnapshot.js +150 -0
  604. package/dist/target/topologyActivation.d.ts +51 -0
  605. package/dist/target/topologyActivation.js +149 -0
  606. package/dist/target/topologyAttestation.d.ts +37 -0
  607. package/dist/target/topologyAttestation.js +300 -0
  608. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  609. package/dist/target/topologyAttestationErrors.js +1 -0
  610. package/dist/target/worldClock.d.ts +60 -0
  611. package/dist/target/worldClock.js +129 -0
  612. package/dist/target/worldReadiness.d.ts +103 -0
  613. package/dist/target/worldReadiness.js +153 -0
  614. package/moltnet-releases.json +20 -0
  615. package/package.json +29 -8
  616. package/runtimes.yaml +28 -27
  617. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  618. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  619. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  620. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -1,19 +1,16 @@
1
1
  import path from "node:path";
2
- import { DISTRIBUTION_REPORT_IMAGE_PATH } from "../distribution/index.js";
2
+ import { DISTRIBUTION_REPORT_IMAGE_PATH, WORLD_BINDINGS_IMAGE_PATH } from "../distribution/index.js";
3
3
  import { createRuntimeInstallRecipe } from "../runtime/index.js";
4
4
  import { SpawnfileError } from "../shared/index.js";
5
5
  export { renderEntrypoint } from "./containerEntrypointRender.js";
6
6
  import { MOLTNET_BIN_DIRECTORY, MOLTNET_BINARY_NAMES } from "./moltnetBinaries.js";
7
+ import { collectPackagesByManager, createAptPackageInstallItem, createNpmPackageInstallCommand, createNpmPackageInstallItem, createPackageInstallCommand, createPipxPackageInstallCommand, createPipxPackageInstallItem, getNpmInstallItemName } from "./containerPackageRender.js";
7
8
  const CONTAINER_ROOTFS_ROOT = "container/rootfs";
8
9
  const GATEWAY_PORT_PLACEHOLDER = "<gateway-port>";
9
- const MOLTNET_INSTALL_SCRIPT_URL = "https://moltnet.dev/install.sh";
10
- const MOLTNET_RELEASE_METADATA_URL = "https://api.github.com/repos/noopolis/moltnet/releases/latest";
11
10
  const WORKSPACE_PLACEHOLDER = "<workspace-path>";
11
+ const RUNTIME_ROOT_PLACEHOLDER = "<runtime-root>";
12
12
  const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
13
13
  const extractNodeMajorVersion = (image) => Number(image.match(/^node:(\d+)/)?.[1] ?? "0");
14
- const createPackageInstallCommand = (packages) => `RUN apt-get update && apt-get install -y --no-install-recommends ${packages.join(" ")} && rm -rf /var/lib/apt/lists/*`;
15
- const createNpmPackageInstallCommand = (packages) => `RUN npm install -g --omit=dev --no-fund --no-audit ${packages.join(" ")}`;
16
- const createPipxPackageInstallCommand = (packages) => `RUN PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install ${packages.join(" ")}`;
17
14
  const createStateOwnershipCommand = (persistentMountPaths = []) => {
18
15
  const mountPaths = [...new Set(persistentMountPaths)].sort();
19
16
  const mkdirPaths = [...new Set(["/var/lib/spawnfile", ...mountPaths])].sort();
@@ -21,7 +18,6 @@ const createStateOwnershipCommand = (persistentMountPaths = []) => {
21
18
  const chownPaths = [
22
19
  ...new Set([
23
20
  "/var/lib/spawnfile",
24
- "/opt/spawnfile",
25
21
  ...mountPaths.filter((mountPath) => !mountPath.startsWith("/var/lib/spawnfile/"))
26
22
  ])
27
23
  ].sort();
@@ -31,70 +27,13 @@ const createStateOwnershipCommand = (persistentMountPaths = []) => {
31
27
  `chown -R spawnfile:spawnfile ${chownPaths.map(shellQuote).join(" ")}`
32
28
  ].join(" && ");
33
29
  };
34
- const dedupePackages = (packages) => {
35
- const seen = new Map();
36
- for (const currentPackage of packages) {
37
- seen.set(`${currentPackage.manager}\u0000${currentPackage.name}\u0000${currentPackage.version ?? ""}\u0000${currentPackage.scope ?? ""}`, currentPackage);
38
- }
39
- return [...seen.values()].sort((left, right) => `${left.manager}\u0000${left.name}\u0000${left.version ?? ""}\u0000${left.scope ?? ""}`.localeCompare(`${right.manager}\u0000${right.name}\u0000${right.version ?? ""}\u0000${right.scope ?? ""}`));
40
- };
41
- const createPackageIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}\u0000${pkg.version ?? ""}\u0000${pkg.scope ?? ""}`;
42
- const createPackageConflictIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}`;
43
- const assertImagePackageCompatibility = (packages) => {
44
- const byName = new Map();
45
- for (const currentPackage of packages) {
46
- const conflictIdentity = createPackageConflictIdentity(currentPackage);
47
- const existingPackage = byName.get(conflictIdentity);
48
- if (!existingPackage) {
49
- byName.set(conflictIdentity, currentPackage);
50
- continue;
51
- }
52
- if (createPackageIdentity(existingPackage) !== createPackageIdentity(currentPackage)) {
53
- throw new SpawnfileError("validation_error", `Generated container declares conflicting package definitions for ${currentPackage.manager} package ${currentPackage.name}`);
54
- }
55
- }
56
- };
57
- const createAptPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}=${pkg.version}` : pkg.name;
58
- const createNpmPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}@${pkg.version}` : pkg.name;
59
- const createPipxPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}==${pkg.version}` : pkg.name;
60
- const getNpmInstallItemName = (item) => {
61
- if (!item.startsWith("@")) {
62
- const versionMarker = item.indexOf("@");
63
- return versionMarker === -1 ? item : item.slice(0, versionMarker);
64
- }
65
- const slashIndex = item.indexOf("/");
66
- if (slashIndex === -1) {
67
- return item;
68
- }
69
- const versionMarker = item.indexOf("@", slashIndex);
70
- return versionMarker === -1 ? item : item.slice(0, versionMarker);
71
- };
72
- const collectPackagesByManager = (runtimePlans) => {
73
- const packagesByManager = {
74
- apt: [],
75
- npm: [],
76
- pipx: []
77
- };
78
- const imagePackages = runtimePlans.flatMap((plan) => plan.packages ?? []);
79
- assertImagePackageCompatibility(imagePackages);
80
- const resolvedPackages = dedupePackages(imagePackages);
81
- for (const packageConfig of resolvedPackages) {
82
- if (packageConfig.manager === "apt") {
83
- packagesByManager.apt.push(packageConfig);
84
- continue;
85
- }
86
- if (packageConfig.manager === "npm") {
87
- packagesByManager.npm.push(packageConfig);
88
- continue;
89
- }
90
- if (packageConfig.manager === "pipx") {
91
- packagesByManager.pipx.push(packageConfig);
92
- continue;
93
- }
30
+ const selectBaseImage = (runtimePlans, runtimeRecipes) => {
31
+ const recipeBaseImages = [
32
+ ...new Set(runtimeRecipes.flatMap((recipe) => recipe.baseImage ? [recipe.baseImage] : []))
33
+ ];
34
+ if (recipeBaseImages.length === 1 && runtimePlans.length === runtimeRecipes.length) {
35
+ return recipeBaseImages[0];
94
36
  }
95
- return packagesByManager;
96
- };
97
- const selectBaseImage = (runtimePlans) => {
98
37
  const firstRuntimeMeta = runtimePlans[0]?.meta;
99
38
  if (runtimePlans.length <= 1) {
100
39
  return firstRuntimeMeta?.standaloneBaseImage ?? "debian:bookworm-slim";
@@ -131,18 +70,22 @@ export const renderEnvExample = (variables) => {
131
70
  return `${lines.join("\n").trimEnd()}\n`;
132
71
  };
133
72
  export const renderDockerfile = async (runtimePlans, options = {}) => {
73
+ if (options.hasMoltnet && !options.hasStagedMoltnetBinaries) {
74
+ throw new SpawnfileError("compile_error", "Moltnet must be supplied as a pinned, digest-verified, pi-bridge-stamped release; unpinned latest installation is disabled");
75
+ }
134
76
  const runtimeNames = [...new Set(runtimePlans.map((plan) => plan.runtimeName))];
135
- const runtimeRecipes = await Promise.all(runtimeNames.map((runtimeName) => createRuntimeInstallRecipe(runtimeName)));
136
- const baseImage = selectBaseImage(runtimePlans);
137
- const needsJsonEnvWriter = runtimePlans.some((plan) => (plan.configEnvBindings?.length ?? 0) > 0);
77
+ const runtimeRecipes = await Promise.all(runtimeNames.map((runtimeName) => createRuntimeInstallRecipe(runtimeName, { packageOverrides: options.runtimePackageOverrides })));
78
+ const recipeByRuntimeName = new Map(runtimeRecipes.map((recipe) => [recipe.runtimeName, recipe]));
79
+ const baseImage = selectBaseImage(runtimePlans, runtimeRecipes);
80
+ const needsJsonEnvWriter = runtimePlans.some((plan) => (plan.configEnvBindings?.length ?? 0) > 0) || (options.moltnet?.nodePlans.length ?? 0) > 0
81
+ || (options.moltnet?.serverPlans ?? []).some((plan) => plan.mode === "managed"
82
+ && plan.configPath !== null
83
+ && plan.secretPatches.length > 0);
138
84
  const needsGit = runtimePlans.some((plan) => (plan.resources ?? []).some((resource) => resource.kind === "git"));
139
85
  const systemDeps = [
140
86
  ...new Set([
141
- ...runtimePlans.flatMap((plan) => plan.meta.systemDeps),
87
+ ...runtimePlans.flatMap((plan) => recipeByRuntimeName.get(plan.runtimeName)?.baseImage ? [] : plan.meta.systemDeps),
142
88
  ...(needsGit ? ["git"] : []),
143
- ...(options.hasMoltnet && !options.hasStagedMoltnetBinaries
144
- ? ["ca-certificates", "curl", "tar"]
145
- : []),
146
89
  ...(needsJsonEnvWriter ? ["python3"] : [])
147
90
  ])
148
91
  ].sort();
@@ -181,9 +124,6 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
181
124
  if (options.hasMoltnet && options.hasStagedMoltnetBinaries) {
182
125
  lines.push(`COPY ${MOLTNET_BIN_DIRECTORY}/ /usr/local/bin/`, `RUN chmod +x ${MOLTNET_BINARY_NAMES.map((binaryName) => `/usr/local/bin/${binaryName}`).join(" ")}`, "");
183
126
  }
184
- else if (options.hasMoltnet) {
185
- lines.push(`ADD ${MOLTNET_RELEASE_METADATA_URL} /tmp/spawnfile-moltnet-release.json`, `RUN MOLTNET_RELEASE="$${"("}sed -n 's/.*\\"tag_name\\": *\\"\\([^\\"]*\\)\\".*/\\1/p' /tmp/spawnfile-moltnet-release.json | head -n 1${")"}" && echo "Installing Moltnet $${"{MOLTNET_RELEASE:-latest}"}" && MOLTNET_INSTALL_DIR=/usr/local/bin sh -c ${shellQuote(`curl -fsSL ${MOLTNET_INSTALL_SCRIPT_URL} | sh`)}`, "");
186
- }
187
127
  for (const recipe of runtimeRecipes) {
188
128
  for (const copyCommand of recipe.copyCommands) {
189
129
  lines.push(copyCommand);
@@ -195,8 +135,19 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
195
135
  }
196
136
  lines.push('RUN if ! id -u spawnfile >/dev/null 2>&1; then useradd --create-home --home-dir /home/spawnfile --shell /bin/bash spawnfile; fi', "");
197
137
  lines.push("COPY container/rootfs/ /", "COPY .env.example /opt/spawnfile/.env.example", 'COPY entrypoint.sh /opt/spawnfile/entrypoint.sh', "RUN chmod +x /opt/spawnfile/entrypoint.sh");
138
+ const postRootfsCommands = [
139
+ ...new Set(runtimePlans.flatMap((plan) => plan.meta.postRootfsCommands ?? []))
140
+ ];
141
+ for (const command of postRootfsCommands) {
142
+ lines.push(`RUN ${command}`);
143
+ }
198
144
  if (options.distribution) {
199
- lines.push("", `COPY ${options.distribution.reportOutputFile} ${DISTRIBUTION_REPORT_IMAGE_PATH}`, ...Object.entries(options.distribution.labels)
145
+ lines.push("", `COPY ${options.distribution.reportOutputFile} ${DISTRIBUTION_REPORT_IMAGE_PATH}`, ...(options.distribution.worldBindingsOutputFile
146
+ ? [
147
+ `COPY ${options.distribution.worldBindingsOutputFile} ${WORLD_BINDINGS_IMAGE_PATH}`,
148
+ `RUN chmod 600 ${WORLD_BINDINGS_IMAGE_PATH} && chown spawnfile:spawnfile ${WORLD_BINDINGS_IMAGE_PATH}`
149
+ ]
150
+ : []), ...Object.entries(options.distribution.labels)
200
151
  .sort(([left], [right]) => left.localeCompare(right))
201
152
  .map(([name, value]) => `LABEL ${name}=${shellQuote(value)}`));
202
153
  }
@@ -213,11 +164,19 @@ export const createRootfsFiles = (runtimePlans) => runtimePlans.flatMap((plan) =
213
164
  return {
214
165
  content: file.content
215
166
  .replaceAll(WORKSPACE_PLACEHOLDER, plan.instancePaths.workspacePath)
167
+ .replaceAll(RUNTIME_ROOT_PLACEHOLDER, plan.runtimeRoot)
216
168
  .replaceAll(`"${GATEWAY_PORT_PLACEHOLDER}"`, plan.port ? String(plan.port) : "0")
217
169
  .replaceAll(GATEWAY_PORT_PLACEHOLDER, plan.port ? String(plan.port) : ""),
218
170
  path: `${CONTAINER_ROOTFS_ROOT}${plan.instancePaths.configPath}`
219
171
  };
220
172
  }
173
+ if (file.path.startsWith("runtime/")) {
174
+ const relativeRuntimePath = file.path.slice("runtime/".length);
175
+ return {
176
+ content: file.content,
177
+ path: `${CONTAINER_ROOTFS_ROOT}${path.posix.join(plan.runtimeRoot, relativeRuntimePath)}`
178
+ };
179
+ }
221
180
  if (file.path.startsWith("workspace/")) {
222
181
  const relativeWorkspacePath = file.path.slice("workspace/".length);
223
182
  return {
@@ -14,6 +14,9 @@ export interface ContainerEnvVariable {
14
14
  }
15
15
  export interface RuntimeTargetPlan {
16
16
  configEnvBindings?: RuntimeContainerConfigEnvBinding[];
17
+ /** Passthrough of `ContainerTarget.engineByNodeId` (see `runtime/types.ts`), for
18
+ * `containerArtifacts.ts` to stamp onto `ContainerRuntimeInstanceReport.engine_by_node_id`. */
19
+ engineByNodeId?: Record<string, string>;
17
20
  packages?: ResolvedPackage[];
18
21
  envFiles: Array<{
19
22
  envName: string;
@@ -31,12 +34,21 @@ export interface RuntimeTargetPlan {
31
34
  modelSecretsRequired: string[];
32
35
  port?: number;
33
36
  publishedPort?: number;
37
+ /**
38
+ * Per-run container environment carried by this target's
39
+ * RuntimeInstallRecipe (see src/runtime/container.ts). Sourced only from
40
+ * the host/compile process environment (e.g. NOOPOLIS_RUN_ID), never
41
+ * model output. Rendered into the container RUN-time env surface
42
+ * (entrypoint exec env), never baked into the Dockerfile build layer.
43
+ */
44
+ recipeEnv?: Record<string, string>;
34
45
  resources?: WorkspaceResourcePlan[];
35
46
  runtimeName: string;
36
47
  runtimeRoot: string;
37
48
  sourceIds?: string[];
38
49
  targetConfigEnvBindings?: RuntimeContainerConfigEnvBinding[];
39
50
  targetFiles: EmittedFile[];
51
+ worldTokenEnvNames?: string[];
40
52
  }
41
53
  export interface CompiledNodeArtifact {
42
54
  emittedFiles: EmittedFile[];
@@ -0,0 +1,3 @@
1
+ import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
2
+ export declare const createConfigEnvWrites: (plan: RuntimeTargetPlan) => string[];
3
+ export declare const createConfigEnvMaterializationFunction: () => string[];
@@ -0,0 +1,54 @@
1
+ const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
2
+ export const createConfigEnvWrites = (plan) => (plan.configEnvBindings ?? []).map((binding) => `apply_json_env_value ${shellQuote(plan.instancePaths.configPath)} ${shellQuote(binding.envName)} ${shellQuote(typeof binding.jsonPath === "string" ? binding.jsonPath : JSON.stringify(binding.jsonPath))}${binding.transform ? ` ${shellQuote(binding.transform)}` : ""}`);
3
+ export const createConfigEnvMaterializationFunction = () => [
4
+ "apply_json_env_value() {",
5
+ ' local target="$1"',
6
+ ' local name="$2"',
7
+ ' local json_path="$3"',
8
+ ' local transform="${4:-}"',
9
+ ' if [ -z "${!name:-}" ]; then',
10
+ " return",
11
+ " fi",
12
+ ' python3 - "$target" "$name" "$json_path" "$transform" <<\'PY\'',
13
+ "import json",
14
+ "import os",
15
+ "import sys",
16
+ "",
17
+ "target_path = sys.argv[1]",
18
+ "env_name = sys.argv[2]",
19
+ "json_path_arg = sys.argv[3]",
20
+ "json_path = json.loads(json_path_arg) if json_path_arg.startswith('[') else json_path_arg.split('.')",
21
+ "transform = sys.argv[4] if len(sys.argv) > 4 else ''",
22
+ "value = os.environ.get(env_name)",
23
+ "if value is None:",
24
+ " raise SystemExit(0)",
25
+ "if transform == 'bearer':",
26
+ " value = f'Bearer {value}'",
27
+ "elif transform:",
28
+ " raise SystemExit(f'Unsupported config env transform: {transform}')",
29
+ "",
30
+ "with open(target_path, encoding='utf-8') as handle:",
31
+ " data = json.load(handle)",
32
+ "",
33
+ "cursor = data",
34
+ "for part in json_path[:-1]:",
35
+ " if isinstance(cursor, list):",
36
+ " cursor = cursor[int(part)]",
37
+ " continue",
38
+ " child = cursor.get(part)",
39
+ " if not isinstance(child, (dict, list)):",
40
+ " child = {}",
41
+ " cursor[part] = child",
42
+ " cursor = child",
43
+ "",
44
+ "if isinstance(cursor, list):",
45
+ " cursor[int(json_path[-1])] = value",
46
+ "else:",
47
+ " cursor[json_path[-1]] = value",
48
+ "",
49
+ "with open(target_path, 'w', encoding='utf-8') as handle:",
50
+ " json.dump(data, handle, indent=2)",
51
+ " handle.write('\\n')",
52
+ "PY",
53
+ "}",
54
+ ];
@@ -4,6 +4,7 @@ export interface EntrypointOptions {
4
4
  hasMoltnet?: boolean;
5
5
  hasStagedMoltnetBinaries?: boolean;
6
6
  moltnet?: {
7
+ externalParticipantArtifacts?: NonNullable<MoltnetArtifacts["externalParticipantArtifacts"]>;
7
8
  nodePlans: MoltnetArtifacts["nodePlans"];
8
9
  serverPlans: MoltnetArtifacts["serverPlans"];
9
10
  };
@@ -1,17 +1,31 @@
1
1
  import path from "node:path";
2
- import { resolveMoltnetStorePath } from "./moltnetConfigLowering.js";
2
+ import { createMoltnetCausalEventsPath, resolveMoltnetStorePath } from "./moltnetConfigLowering.js";
3
3
  import { networkUrlEnvName } from "./networkBinding.js";
4
4
  import { createWorkspaceResourceCommands, createWorkspaceResourceShellFunctions } from "./containerWorkspaceResourceRender.js";
5
+ import { createConfigEnvMaterializationFunction, createConfigEnvWrites } from "./containerConfigEnvRender.js";
6
+ import { CLI_CREDENTIAL_SECRET_NAME, modelAuthMethodNeedsCliCredential } from "./modelEnv.js";
7
+ import { createCliCredentialMaterialization, createRecipeEnvAssignments, mergeRecipeEnv, shellQuote } from "./containerEntrypointShell.js";
5
8
  const MOLTNET_SERVER_DATA_DIRECTORY = "/var/lib/spawnfile/moltnet/servers";
6
- const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
9
+ // moltnet reads this path from MOLTNET_CAUSAL_EVENTS_PATH
10
+ // (internal/app/config_load.go's mergeEnvConfig) and, when set, stamps
11
+ // every message.accepted/message.denied causal event there via
12
+ // internal/observability/causal.go's CausalWriter (nil/no-op otherwise).
13
+ // Always set, independent of the network's own store.kind (a memory-store
14
+ // network — e.g. office-sim's fixture — still gets a causal log). Points
15
+ // into a dedicated `causal/` subdirectory of the server's data directory
16
+ // (see createMoltnetCausalDirectory/createMoltnetCausalEventsPath) that
17
+ // moltnetArtifacts.ts registers as its own persistent mount, so it survives
18
+ // container teardown/restart via a host-backed named docker volume instead
19
+ // of only being recoverable through a live-container `docker cp` (the
20
+ // previous e2e-capture-only precedent).
21
+ const moltnetCausalEventsPath = createMoltnetCausalEventsPath;
7
22
  const createEnvironmentAssignments = (plan) => {
8
23
  const envAssignments = [];
9
24
  if (plan.instancePaths.homePath) {
10
25
  envAssignments.push(`HOME=${shellQuote(plan.instancePaths.homePath)}`);
11
26
  }
12
27
  if (plan.instancePaths.homePath &&
13
- plan.runtimeName === "picoclaw" &&
14
- plan.modelAuthMethods.openai === "codex") {
28
+ Object.values(plan.modelAuthMethods).some(modelAuthMethodNeedsCliCredential)) {
15
29
  envAssignments.push(`CODEX_HOME=${shellQuote(path.posix.join(plan.instancePaths.homePath, ".codex"))}`);
16
30
  }
17
31
  if (plan.meta.homeEnv && plan.instancePaths.homePath) {
@@ -26,10 +40,10 @@ const createEnvironmentAssignments = (plan) => {
26
40
  for (const [name, value] of Object.entries(plan.meta.staticEnv ?? {}).sort(([left], [right]) => left.localeCompare(right))) {
27
41
  envAssignments.push(`${name}=${shellQuote(value)}`);
28
42
  }
43
+ envAssignments.push(...createRecipeEnvAssignments(plan.recipeEnv));
29
44
  return envAssignments;
30
45
  };
31
46
  const createEnvFileWrites = (plan) => plan.envFiles.map((binding) => `write_env_file ${shellQuote(binding.envName)} ${shellQuote(binding.filePath)}`);
32
- const createConfigEnvWrites = (plan) => (plan.configEnvBindings ?? []).map((binding) => `apply_json_env_value ${shellQuote(plan.instancePaths.configPath)} ${shellQuote(binding.envName)} ${shellQuote(binding.jsonPath)}`);
33
47
  const createMoltnetStorePrepareCommands = (serverPlan) => {
34
48
  const server = serverPlan.server;
35
49
  if (server.mode !== "managed" || server.store.kind === "memory" || server.store.kind === "postgres") {
@@ -43,11 +57,14 @@ const createMoltnetStorePrepareCommands = (serverPlan) => {
43
57
  };
44
58
  const resolveStartCommand = (plan) => plan.meta.startCommand
45
59
  .map((token) => token
60
+ .replaceAll("<config-path>", plan.instancePaths.configPath)
61
+ .replaceAll("<home-path>", plan.instancePaths.homePath ?? "")
46
62
  .replaceAll("<runtime-root>", plan.runtimeRoot)
63
+ .replaceAll("<workspace-path>", plan.instancePaths.workspacePath)
47
64
  .replaceAll("<port>", plan.port ? String(plan.port) : ""))
48
65
  .filter((token) => token.length > 0);
49
66
  const createRuntimeReadinessWait = (plan) => {
50
- if (plan.runtimeName !== "openclaw" || !plan.port) {
67
+ if (!["openclaw", "pi"].includes(plan.runtimeName) || !plan.port) {
51
68
  return [];
52
69
  }
53
70
  return [
@@ -64,6 +81,13 @@ const createRuntimeReadinessWait = (plan) => {
64
81
  ];
65
82
  };
66
83
  export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) => {
84
+ const cliCredentialMaterialization = createCliCredentialMaterialization(runtimePlans);
85
+ const renderedRequiredSecrets = [
86
+ ...new Set([
87
+ ...requiredSecrets,
88
+ ...(cliCredentialMaterialization.length > 0 ? [CLI_CREDENTIAL_SECRET_NAME] : [])
89
+ ])
90
+ ];
67
91
  const lines = [
68
92
  "#!/usr/bin/env bash",
69
93
  "set -euo pipefail",
@@ -94,61 +118,21 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
94
118
  ' printf %s \"${!name:-}\" > \"$target\"',
95
119
  "}",
96
120
  "",
97
- "apply_json_env_value() {",
98
- ' local target=\"$1\"',
99
- ' local name=\"$2\"',
100
- ' local json_path=\"$3\"',
101
- ' if [ -z \"${!name:-}\" ]; then',
102
- " return",
103
- " fi",
104
- " python3 - \"$target\" \"$name\" \"$json_path\" <<'PY'",
105
- "import json",
106
- "import os",
107
- "import sys",
108
- "",
109
- "target_path = sys.argv[1]",
110
- "env_name = sys.argv[2]",
111
- "json_path = sys.argv[3].split('.')",
112
- "value = os.environ.get(env_name)",
113
- "if value is None:",
114
- " raise SystemExit(0)",
115
- "",
116
- "with open(target_path, encoding='utf-8') as handle:",
117
- " data = json.load(handle)",
118
- "",
119
- "cursor = data",
120
- "for part in json_path[:-1]:",
121
- " if isinstance(cursor, list):",
122
- " cursor = cursor[int(part)]",
123
- " continue",
124
- " child = cursor.get(part)",
125
- " if not isinstance(child, (dict, list)):",
126
- " child = {}",
127
- " cursor[part] = child",
128
- " cursor = child",
129
- "",
130
- "if isinstance(cursor, list):",
131
- " cursor[int(json_path[-1])] = value",
132
- "else:",
133
- " cursor[json_path[-1]] = value",
134
- "",
135
- "with open(target_path, 'w', encoding='utf-8') as handle:",
136
- " json.dump(data, handle, indent=2)",
137
- " handle.write('\\n')",
138
- "PY",
139
- "}",
121
+ ...createConfigEnvMaterializationFunction(),
140
122
  "",
141
123
  ...createWorkspaceResourceShellFunctions()
142
124
  ];
143
125
  lines.push('if [ -n "${OPENCLAW_GATEWAY_TOKEN:-}" ] && [ -z "${OPENCLAW_HOOKS_TOKEN:-}" ]; then', ' export OPENCLAW_HOOKS_TOKEN="hooks-${OPENCLAW_GATEWAY_TOKEN}"', "fi", "");
144
- for (const secretName of requiredSecrets) {
126
+ for (const secretName of renderedRequiredSecrets) {
145
127
  lines.push(`require_env ${shellQuote(secretName)}`);
146
128
  }
147
- if (requiredSecrets.length > 0) {
129
+ if (renderedRequiredSecrets.length > 0) {
148
130
  lines.push("");
149
131
  }
132
+ lines.push(...cliCredentialMaterialization);
150
133
  const moltnetServerPlans = options.moltnet?.serverPlans ?? [];
151
134
  const moltnetNodePlans = options.moltnet?.nodePlans ?? [];
135
+ const moltnetExternalParticipants = options.moltnet?.externalParticipantArtifacts ?? [];
152
136
  if (runtimePlans.length === 1 &&
153
137
  moltnetServerPlans.length === 0 &&
154
138
  moltnetNodePlans.length === 0) {
@@ -159,6 +143,8 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
159
143
  return `${lines.join("\n").trimEnd()}\n`;
160
144
  }
161
145
  lines.push("PIDS=()", "", "terminate_children() {", ' for pid in "${PIDS[@]:-}"; do', ' kill "$pid" 2>/dev/null || true', " done", "}", "", "trap terminate_children INT TERM EXIT", "");
146
+ const recipeEnvAssignments = createRecipeEnvAssignments(mergeRecipeEnv(runtimePlans));
147
+ const recipeEnvPrefix = recipeEnvAssignments.length > 0 ? `${recipeEnvAssignments.join(" ")} ` : "";
162
148
  const managedMoltnetServerPlans = moltnetServerPlans.filter((serverPlan) => serverPlan.mode === "managed");
163
149
  if (managedMoltnetServerPlans.length > 0) {
164
150
  lines.push(`mkdir -p ${shellQuote(MOLTNET_SERVER_DATA_DIRECTORY)}`, "");
@@ -172,10 +158,31 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
172
158
  for (const patch of serverPlan.secretPatches) {
173
159
  serverLines.push(`apply_json_env_value ${shellQuote(serverPlan.configPath)} ${shellQuote(patch.envName)} ${shellQuote(patch.jsonPath)}`);
174
160
  }
175
- serverLines.push(...createMoltnetStorePrepareCommands(serverPlan), `MOLTNET_CONFIG=${shellQuote(serverPlan.configPath)} /usr/local/bin/moltnet &`, 'PIDS+=("$!")');
161
+ const causalEventsPath = moltnetCausalEventsPath(serverPlan.configPath);
162
+ serverLines.push(...createMoltnetStorePrepareCommands(serverPlan), `MOLTNET_CONFIG=${shellQuote(serverPlan.configPath)} MOLTNET_CAUSAL_EVENTS_PATH=${shellQuote(causalEventsPath)} ${recipeEnvPrefix}/usr/local/bin/moltnet &`, 'PIDS+=("$!")');
176
163
  if (serverPlan.port) {
177
164
  serverLines.push(`until curl -sf ${shellQuote(`http://127.0.0.1:${serverPlan.port}/healthz`)} >/dev/null; do sleep 1; done`);
178
165
  }
166
+ const externalParticipants = moltnetExternalParticipants.filter((artifact) => artifact.network.id === serverPlan.networkId);
167
+ if (externalParticipants.length > 0) {
168
+ const clientTokenId = serverPlan.server.auth.client?.token_id;
169
+ const clientToken = serverPlan.server.auth.tokens?.find((token) => token.id === clientTokenId);
170
+ if (!serverPlan.port || !clientToken?.secret) {
171
+ throw new Error(`Managed Moltnet external participant topology for ${serverPlan.networkId} requires an operator token and port`);
172
+ }
173
+ for (const artifact of externalParticipants) {
174
+ for (const directMessage of artifact.direct_messages) {
175
+ serverLines.push([
176
+ "/usr/local/bin/moltnet admin dm ensure",
177
+ `--sender ${shellQuote(artifact.participant.member_id)}`,
178
+ ...directMessage.members.map((member) => `--member ${shellQuote(member)}`),
179
+ `--base-url ${shellQuote(`http://127.0.0.1:${serverPlan.port}`)}`,
180
+ `--token-env ${shellQuote(clientToken.secret)}`,
181
+ ">/dev/null"
182
+ ].join(" "));
183
+ }
184
+ }
185
+ }
179
186
  // Suppress the in-image managed server when an external endpoint is bound.
180
187
  lines.push(`if [ -z "\${${urlEnv}:-}" ]; then`, ...serverLines.map((line) => ` ${line}`), "fi", "");
181
188
  }
@@ -188,7 +195,7 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
188
195
  const urlEnv = networkUrlEnvName(nodePlan.networkId);
189
196
  lines.push(
190
197
  // Rebind the bridge endpoint when an external network URL is provided.
191
- `if [ -n "\${${urlEnv}:-}" ]; then`, ` apply_json_env_value ${shellQuote(nodePlan.configPath)} ${shellQuote(urlEnv)} ${shellQuote("moltnet.base_url")}`, "fi", `/usr/local/bin/moltnet node ${shellQuote(nodePlan.configPath)} &`, 'PIDS+=("$!")', "");
198
+ `if [ -n "\${${urlEnv}:-}" ]; then`, ` apply_json_env_value ${shellQuote(nodePlan.configPath)} ${shellQuote(urlEnv)} ${shellQuote("moltnet.base_url")}`, "fi", `${recipeEnvPrefix}/usr/local/bin/moltnet node ${shellQuote(nodePlan.configPath)} &`, 'PIDS+=("$!")', "");
192
199
  }
193
200
  lines.push('if [ "${#PIDS[@]}" -eq 0 ]; then', ' echo "No runtime targets were generated for this compile output" >&2', " exit 1", "fi", "", "status=0", 'for pid in "${PIDS[@]}"; do', ' if ! wait "$pid"; then', " status=1", " fi", "done", "", 'exit "$status"');
194
201
  return `${lines.join("\n").trimEnd()}\n`;
@@ -0,0 +1,5 @@
1
+ import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
2
+ export declare const shellQuote: (value: string) => string;
3
+ export declare const createRecipeEnvAssignments: (recipeEnv: Record<string, string> | undefined) => string[];
4
+ export declare const mergeRecipeEnv: (runtimePlans: RuntimeTargetPlan[]) => Record<string, string>;
5
+ export declare const createCliCredentialMaterialization: (runtimePlans: RuntimeTargetPlan[]) => string[];
@@ -0,0 +1,29 @@
1
+ import path from "node:path";
2
+ import { CLI_CREDENTIAL_SECRET_NAME, modelAuthMethodNeedsCliCredential } from "./modelEnv.js";
3
+ export const shellQuote = (value) => `'${value.replace(/'/g, `'"'"'`)}'`;
4
+ export const createRecipeEnvAssignments = (recipeEnv) => Object.entries(recipeEnv ?? {})
5
+ .sort(([left], [right]) => left.localeCompare(right))
6
+ .map(([name, value]) => `${name}=${shellQuote(value)}`);
7
+ export const mergeRecipeEnv = (runtimePlans) => runtimePlans.reduce((merged, plan) => ({ ...merged, ...(plan.recipeEnv ?? {}) }), {});
8
+ export const createCliCredentialMaterialization = (runtimePlans) => {
9
+ const homePaths = [...new Set(runtimePlans
10
+ .filter((plan) => plan.instancePaths.homePath &&
11
+ Object.values(plan.modelAuthMethods).some(modelAuthMethodNeedsCliCredential))
12
+ .map((plan) => path.posix.join(plan.instancePaths.homePath, ".codex")))];
13
+ if (homePaths.length === 0)
14
+ return [];
15
+ return [
16
+ "# SPAWNFILE_CLI_AUTH_JSON persists in Config.Env for the container's lifetime.",
17
+ "# unset removes it from runtime processes' environments but cannot remove it from the container definition.",
18
+ "# Anyone with docker access on the host can read it, and every docker exec inherits it.",
19
+ "# This is accepted because the target host is single-user and the container is destroyed each run;",
20
+ "# a non-env delivery route is the fix if this ever runs anywhere shared.",
21
+ ...homePaths.flatMap((homePath) => [
22
+ `mkdir -m 700 -p ${shellQuote(homePath)}`,
23
+ `printf %s "\${${CLI_CREDENTIAL_SECRET_NAME}}" > ${shellQuote(path.posix.join(homePath, "auth.json"))}`,
24
+ `chmod 600 ${shellQuote(path.posix.join(homePath, "auth.json"))}`
25
+ ]),
26
+ `unset ${CLI_CREDENTIAL_SECRET_NAME}`,
27
+ ""
28
+ ];
29
+ };
@@ -0,0 +1,27 @@
1
+ import type { RuntimeContainerPackageOverrides } from "../runtime/index.js";
2
+ /**
3
+ * Compile-time-only request map: runtime install npm package name (e.g.
4
+ * "@noopolis/daimon") to the absolute local package directory that should
5
+ * be packed and installed into the generated container instead of the
6
+ * pinned registry version. Only opt-in local/E2E compiles set this (see
7
+ * src/e2e/AGENTS.md); a standard compile passes no overrides and the
8
+ * generated Dockerfile install line is byte-identical to before this
9
+ * mechanism existed.
10
+ */
11
+ export type RuntimePackageOverrideRequest = Record<string, string>;
12
+ /**
13
+ * Packs each overridden runtime install package's local directory into the
14
+ * generated container's build context (`<outputDirectory>/container/vendor`)
15
+ * via `npm pack`, so `renderDockerfile` (containerArtifactsRender.ts) can
16
+ * COPY the tarball into the image and `createRuntimeInstallRecipe`
17
+ * (src/runtime/container.ts) can install from it instead of the registry.
18
+ * Mirrors how `stageMoltnetBinaries` (moltnetBinaries.ts) stages binaries
19
+ * directly onto disk outside the EmittedFile pipeline — a `.tgz` cannot
20
+ * round-trip through EmittedFile's string `content`.
21
+ *
22
+ * The caller is responsible for ensuring each override's `dist` is already
23
+ * built (see `assertRuntimePackageOverrideDistsBuilt` in
24
+ * src/e2e/runtimePackageOverrides.ts) — this function only packs, it never
25
+ * builds.
26
+ */
27
+ export declare const stageRuntimePackageOverrides: (outputDirectory: string, overrides: RuntimePackageOverrideRequest | undefined) => Promise<RuntimeContainerPackageOverrides | undefined>;
@@ -0,0 +1,63 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import path from "node:path";
3
+ import { promisify } from "node:util";
4
+ import { ensureDirectory } from "../filesystem/index.js";
5
+ import { VENDOR_BUILD_CONTEXT_DIR } from "../runtime/index.js";
6
+ import { SpawnfileError } from "../shared/index.js";
7
+ const execFile = promisify(execFileCallback);
8
+ const packOverride = async (packageName, packageDirectory, vendorDirectory) => {
9
+ try {
10
+ const { stdout } = await execFile("npm", [
11
+ "pack",
12
+ "--json",
13
+ // Every caller (assertRuntimePackageOverrideDistsBuilt in
14
+ // src/e2e/runtimePackageOverrides.ts) already asserts the
15
+ // override directory's dist is built before packing, so a `prepack`
16
+ // lifecycle script here would only redundantly rebuild it — and, since
17
+ // several packages' own `prepack` runs `rm -rf dist && tsc`, doing so
18
+ // is actively unsafe when two compiles pack the same shared source
19
+ // directory concurrently (one's `rm -rf` can race another's dist read).
20
+ "--ignore-scripts",
21
+ "--pack-destination",
22
+ vendorDirectory,
23
+ packageDirectory
24
+ ]);
25
+ const entries = JSON.parse(stdout);
26
+ const filename = entries[0]?.filename;
27
+ if (!filename) {
28
+ throw new Error("npm pack did not report a packed filename");
29
+ }
30
+ return { filename };
31
+ }
32
+ catch (error) {
33
+ const reason = error instanceof Error ? error.message : String(error);
34
+ throw new SpawnfileError("compile_error", `Unable to pack local override for ${packageName} from ${packageDirectory}: ${reason}`);
35
+ }
36
+ };
37
+ /**
38
+ * Packs each overridden runtime install package's local directory into the
39
+ * generated container's build context (`<outputDirectory>/container/vendor`)
40
+ * via `npm pack`, so `renderDockerfile` (containerArtifactsRender.ts) can
41
+ * COPY the tarball into the image and `createRuntimeInstallRecipe`
42
+ * (src/runtime/container.ts) can install from it instead of the registry.
43
+ * Mirrors how `stageMoltnetBinaries` (moltnetBinaries.ts) stages binaries
44
+ * directly onto disk outside the EmittedFile pipeline — a `.tgz` cannot
45
+ * round-trip through EmittedFile's string `content`.
46
+ *
47
+ * The caller is responsible for ensuring each override's `dist` is already
48
+ * built (see `assertRuntimePackageOverrideDistsBuilt` in
49
+ * src/e2e/runtimePackageOverrides.ts) — this function only packs, it never
50
+ * builds.
51
+ */
52
+ export const stageRuntimePackageOverrides = async (outputDirectory, overrides) => {
53
+ if (!overrides || Object.keys(overrides).length === 0) {
54
+ return undefined;
55
+ }
56
+ const vendorDirectory = path.join(outputDirectory, VENDOR_BUILD_CONTEXT_DIR);
57
+ await ensureDirectory(vendorDirectory);
58
+ const resolved = {};
59
+ for (const [packageName, packageDirectory] of Object.entries(overrides)) {
60
+ resolved[packageName] = await packOverride(packageName, packageDirectory, vendorDirectory);
61
+ }
62
+ return resolved;
63
+ };
@@ -0,0 +1,15 @@
1
+ import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
2
+ import type { ResolvedPackage } from "./types.js";
3
+ export interface PackagesByManager {
4
+ apt: ResolvedPackage[];
5
+ npm: ResolvedPackage[];
6
+ pipx: ResolvedPackage[];
7
+ }
8
+ export declare const createPackageInstallCommand: (packages: string[]) => string;
9
+ export declare const createNpmPackageInstallCommand: (packages: string[]) => string;
10
+ export declare const createPipxPackageInstallCommand: (packages: string[]) => string;
11
+ export declare const createAptPackageInstallItem: (pkg: ResolvedPackage) => string;
12
+ export declare const createNpmPackageInstallItem: (pkg: ResolvedPackage) => string;
13
+ export declare const createPipxPackageInstallItem: (pkg: ResolvedPackage) => string;
14
+ export declare const getNpmInstallItemName: (item: string) => string;
15
+ export declare const collectPackagesByManager: (runtimePlans: RuntimeTargetPlan[]) => PackagesByManager;