spawnfile 0.1.13 → 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 (598) hide show
  1. package/README.md +50 -11
  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/targetSecretSourceAuthor.d.ts +18 -0
  31. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  32. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  33. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  34. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  36. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  37. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  38. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  39. package/dist/auth/targetSecretSourceGrant.js +99 -0
  40. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  42. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  43. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  44. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  46. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  48. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  50. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  51. package/dist/auth/targetSecretSourceResolver.js +137 -0
  52. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  53. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  54. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  55. package/dist/auth/targetSecretSourceRotate.js +121 -0
  56. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  58. package/dist/cli/artifactsCommands.d.ts +27 -0
  59. package/dist/cli/artifactsCommands.js +132 -0
  60. package/dist/cli/authCommands.d.ts +5 -0
  61. package/dist/cli/authCommands.js +221 -0
  62. package/dist/cli/compileBuildCommands.d.ts +3 -0
  63. package/dist/cli/compileBuildCommands.js +35 -0
  64. package/dist/cli/containerBundleCommand.d.ts +6 -0
  65. package/dist/cli/containerBundleCommand.js +116 -0
  66. package/dist/cli/downCommand.d.ts +25 -0
  67. package/dist/cli/downCommand.js +134 -0
  68. package/dist/cli/index.js +6 -3
  69. package/dist/cli/lifecycleCommands.d.ts +1 -1
  70. package/dist/cli/lifecycleCommands.js +11 -181
  71. package/dist/cli/lifecycleMachine.d.ts +19 -0
  72. package/dist/cli/lifecycleMachine.js +78 -0
  73. package/dist/cli/lifecyclePlan.d.ts +35 -0
  74. package/dist/cli/lifecyclePlan.js +240 -0
  75. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  76. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  77. package/dist/cli/runCli.d.ts +9 -2
  78. package/dist/cli/runCli.js +27 -71
  79. package/dist/cli/runPublishCommands.d.ts +3 -0
  80. package/dist/cli/runPublishCommands.js +70 -0
  81. package/dist/cli/statusCommand.d.ts +3 -33
  82. package/dist/cli/statusCommand.js +19 -249
  83. package/dist/cli/statusCommandLive.d.ts +20 -0
  84. package/dist/cli/statusCommandLive.js +188 -0
  85. package/dist/cli/statusCommandOptions.d.ts +40 -0
  86. package/dist/cli/statusCommandOptions.js +42 -0
  87. package/dist/cli/targetCliRoute.d.ts +2 -0
  88. package/dist/cli/targetCliRoute.js +30 -0
  89. package/dist/cli/targetCommands.d.ts +33 -0
  90. package/dist/cli/targetCommands.js +257 -0
  91. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  92. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  93. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  94. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  95. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  96. package/dist/cli/targetDefaultAuthorities.js +210 -0
  97. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  98. package/dist/cli/targetDefaultConfig.js +317 -0
  99. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  100. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  101. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  102. package/dist/cli/targetDefaultEnvelope.js +13 -0
  103. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  104. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  105. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  106. package/dist/cli/targetDefaultHandlers.js +72 -0
  107. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  108. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  109. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  110. package/dist/cli/targetDefaultWorldClock.js +14 -0
  111. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  112. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  113. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  114. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  115. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  116. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  117. package/dist/cli/targetLookupCli.d.ts +3 -0
  118. package/dist/cli/targetLookupCli.js +31 -0
  119. package/dist/cli/targetLookupCommands.d.ts +12 -0
  120. package/dist/cli/targetLookupCommands.js +69 -0
  121. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  122. package/dist/cli/targetOperationDispatch.js +21 -0
  123. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  124. package/dist/cli/targetReceiptOutput.js +21 -0
  125. package/dist/cli/targetRequestFile.d.ts +14 -0
  126. package/dist/cli/targetRequestFile.js +63 -0
  127. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  128. package/dist/cli/targetSecretSourceInput.js +121 -0
  129. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  130. package/dist/cli/targetWorldClockCommand.js +42 -0
  131. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  132. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  133. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  134. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  135. package/dist/cli/upCommand.d.ts +3 -0
  136. package/dist/cli/upCommand.js +133 -0
  137. package/dist/cli/upImageCommand.d.ts +11 -0
  138. package/dist/cli/upImageCommand.js +41 -0
  139. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  140. package/dist/cli/upLifecycleInvocation.js +48 -0
  141. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  142. package/dist/cli/upLifecycleRecovery.js +53 -0
  143. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  144. package/dist/compiler/agentNodeMerge.js +79 -0
  145. package/dist/compiler/agentSurfaces.js +11 -1
  146. package/dist/compiler/buildCompilePlan.js +17 -0
  147. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  148. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  149. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  150. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  151. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  152. package/dist/compiler/buildProject.d.ts +11 -0
  153. package/dist/compiler/buildProject.js +77 -2
  154. package/dist/compiler/compilePlanHelpers.js +2 -0
  155. package/dist/compiler/compileProject.d.ts +13 -0
  156. package/dist/compiler/compileProject.js +26 -74
  157. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  158. package/dist/compiler/compileProjectPolicy.js +21 -0
  159. package/dist/compiler/compileProjectReports.d.ts +9 -0
  160. package/dist/compiler/compileProjectReports.js +52 -0
  161. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  162. package/dist/compiler/containerArtifactSummaries.js +138 -0
  163. package/dist/compiler/containerArtifacts.d.ts +10 -0
  164. package/dist/compiler/containerArtifacts.js +126 -125
  165. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  166. package/dist/compiler/containerArtifactsPlans.js +31 -118
  167. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  168. package/dist/compiler/containerArtifactsRender.js +15 -12
  169. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  170. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  171. package/dist/compiler/containerConfigEnvRender.js +54 -0
  172. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  173. package/dist/compiler/containerEntrypointRender.js +56 -52
  174. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  175. package/dist/compiler/containerEntrypointShell.js +29 -0
  176. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  177. package/dist/compiler/containerPackageOverrides.js +63 -0
  178. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  179. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  180. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  181. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  182. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  183. package/dist/compiler/dockerBuildContext.js +159 -0
  184. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  185. package/dist/compiler/dockerBuildSkip.js +81 -0
  186. package/dist/compiler/index.d.ts +4 -0
  187. package/dist/compiler/index.js +4 -0
  188. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  189. package/dist/compiler/memoryArtifacts.js +134 -0
  190. package/dist/compiler/memoryResolution.d.ts +4 -0
  191. package/dist/compiler/memoryResolution.js +147 -0
  192. package/dist/compiler/modelEnv.d.ts +2 -0
  193. package/dist/compiler/modelEnv.js +6 -0
  194. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  195. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  196. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  197. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  198. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  199. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  200. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  201. package/dist/compiler/moltnetArtifacts.js +43 -97
  202. package/dist/compiler/moltnetBinaries.d.ts +21 -4
  203. package/dist/compiler/moltnetBinaries.js +134 -27
  204. package/dist/compiler/moltnetClientConfig.js +7 -2
  205. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  206. package/dist/compiler/moltnetConfigLowering.js +67 -5
  207. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  208. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  209. package/dist/compiler/moltnetNodeConfig.js +7 -2
  210. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  211. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  212. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  213. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  214. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  215. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  216. package/dist/compiler/moltnetResolution.js +72 -20
  217. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  218. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  219. package/dist/compiler/moltnetServerPlans.js +132 -0
  220. package/dist/compiler/organizationIdentity.d.ts +27 -0
  221. package/dist/compiler/organizationIdentity.js +297 -0
  222. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  223. package/dist/compiler/organizationReadyEvidence.js +261 -0
  224. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  225. package/dist/compiler/projectManifestGraph.js +24 -0
  226. package/dist/compiler/runProject.d.ts +4 -0
  227. package/dist/compiler/runProject.js +30 -21
  228. package/dist/compiler/runProjectAuth.d.ts +7 -1
  229. package/dist/compiler/runProjectAuth.js +87 -9
  230. package/dist/compiler/runProjectDocker.d.ts +7 -0
  231. package/dist/compiler/runProjectDocker.js +31 -8
  232. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  233. package/dist/compiler/runProjectLifecycle.js +40 -0
  234. package/dist/compiler/syncProjectAuth.js +4 -1
  235. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  236. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  237. package/dist/compiler/teamContextSupport.js +32 -40
  238. package/dist/compiler/teamContextTypes.d.ts +2 -0
  239. package/dist/compiler/types.d.ts +82 -1
  240. package/dist/compiler/upProject.d.ts +5 -0
  241. package/dist/compiler/upProject.js +256 -20
  242. package/dist/compiler/upReceipt.d.ts +36 -0
  243. package/dist/compiler/upReceipt.js +82 -0
  244. package/dist/compiler/updateProjectModels.js +42 -60
  245. package/dist/compiler/updateProjectRuntime.js +22 -35
  246. package/dist/compiler/updateProjectSurfaces.js +53 -47
  247. package/dist/compiler/worldBindings.d.ts +39 -0
  248. package/dist/compiler/worldBindings.js +247 -0
  249. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  250. package/dist/compiler/worldBindingsFile.js +162 -0
  251. package/dist/deployment/artifactsExport.d.ts +49 -0
  252. package/dist/deployment/artifactsExport.js +217 -0
  253. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  254. package/dist/deployment/artifactsExportDocker.js +91 -0
  255. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  256. package/dist/deployment/artifactsExportPlan.js +135 -0
  257. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  258. package/dist/deployment/artifactsExportTypes.js +52 -0
  259. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  260. package/dist/deployment/buildImageCacheStore.js +54 -0
  261. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  262. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  263. package/dist/deployment/dockerInspect.d.ts +9 -0
  264. package/dist/deployment/dockerInspect.js +24 -1
  265. package/dist/deployment/dockerLabels.d.ts +2 -0
  266. package/dist/deployment/dockerLabels.js +2 -0
  267. package/dist/deployment/dockerLogs.js +2 -10
  268. package/dist/deployment/dockerManager.d.ts +51 -0
  269. package/dist/deployment/dockerManager.js +118 -1
  270. package/dist/deployment/dockerProbeGateway.js +64 -5
  271. package/dist/deployment/dockerRecover.js +9 -1
  272. package/dist/deployment/dockerTeardown.d.ts +32 -0
  273. package/dist/deployment/dockerTeardown.js +61 -0
  274. package/dist/deployment/downDeployment.d.ts +34 -0
  275. package/dist/deployment/downDeployment.js +147 -0
  276. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  277. package/dist/deployment/downReceiptTypes.js +30 -0
  278. package/dist/deployment/index.d.ts +16 -0
  279. package/dist/deployment/index.js +17 -0
  280. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  281. package/dist/deployment/lifecycleCompletion.js +236 -0
  282. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  283. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  284. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  285. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  286. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  287. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  288. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  289. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  290. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  291. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  292. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  293. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  294. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  295. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  296. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  297. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  298. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  299. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  300. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  301. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  305. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  308. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  309. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  310. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  311. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  312. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  313. package/dist/deployment/organizationHandoffTypes.js +80 -0
  314. package/dist/deployment/organizationReady.d.ts +52 -0
  315. package/dist/deployment/organizationReady.js +200 -0
  316. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  317. package/dist/deployment/privateArtifactsExport.js +80 -0
  318. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  319. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  320. package/dist/deployment/record.d.ts +26 -1
  321. package/dist/deployment/record.js +49 -4
  322. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  323. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  324. package/dist/deployment/target.d.ts +1 -35
  325. package/dist/deployment/target.js +1 -96
  326. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  327. package/dist/deployment/upReceiptTypes.js +164 -0
  328. package/dist/dev/project.js +15 -9
  329. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  330. package/dist/distribution/buildDistributionReport.js +2 -1
  331. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  332. package/dist/distribution/distributionReportSchema.js +7 -2
  333. package/dist/distribution/index.d.ts +2 -2
  334. package/dist/distribution/index.js +1 -1
  335. package/dist/distribution/types.d.ts +7 -0
  336. package/dist/distribution/types.js +1 -0
  337. package/dist/filesystem/paths.js +10 -1
  338. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  339. package/dist/ledger/causalConformanceCli.js +41 -0
  340. package/dist/ledger/causeNamespace.d.ts +8 -0
  341. package/dist/ledger/causeNamespace.js +24 -0
  342. package/dist/ledger/conformance.d.ts +83 -0
  343. package/dist/ledger/conformance.js +259 -0
  344. package/dist/ledger/emitters.d.ts +76 -0
  345. package/dist/ledger/emitters.js +188 -0
  346. package/dist/ledger/index.d.ts +4 -0
  347. package/dist/ledger/index.js +4 -0
  348. package/dist/ledger/principal.d.ts +96 -0
  349. package/dist/ledger/principal.js +121 -0
  350. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  351. package/dist/manifest/externalParticipantSchemas.js +17 -0
  352. package/dist/manifest/index.d.ts +1 -0
  353. package/dist/manifest/index.js +1 -0
  354. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  355. package/dist/manifest/inlineAgentMember.js +9 -0
  356. package/dist/manifest/loadManifest.js +14 -8
  357. package/dist/manifest/mcpSchemas.d.ts +17 -0
  358. package/dist/manifest/mcpSchemas.js +41 -0
  359. package/dist/manifest/memorySchemas.d.ts +245 -0
  360. package/dist/manifest/memorySchemas.js +148 -0
  361. package/dist/manifest/renderSpawnfile.js +22 -131
  362. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  363. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  364. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  365. package/dist/manifest/schemas.d.ts +1868 -99
  366. package/dist/manifest/schemas.js +78 -32
  367. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  368. package/dist/manifest/surfaceSchemas.js +24 -1
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  370. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  372. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  373. package/dist/manifest/teamNetworkSchemas.js +3 -317
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  375. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  376. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  377. package/dist/ownership/siblingBuildFreshness.js +20 -0
  378. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  379. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  380. package/dist/report/types.d.ts +142 -0
  381. package/dist/runtime/common.d.ts +35 -0
  382. package/dist/runtime/common.js +55 -0
  383. package/dist/runtime/container.d.ts +28 -1
  384. package/dist/runtime/container.js +38 -5
  385. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  386. package/dist/runtime/containerPackageOverrides.js +33 -0
  387. package/dist/runtime/index.d.ts +2 -0
  388. package/dist/runtime/index.js +2 -0
  389. package/dist/runtime/mnemeMcp.d.ts +15 -0
  390. package/dist/runtime/mnemeMcp.js +109 -0
  391. package/dist/runtime/openclaw/adapter.js +15 -4
  392. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  393. package/dist/runtime/openclaw/mcp.js +69 -0
  394. package/dist/runtime/openclaw/runAuth.js +2 -2
  395. package/dist/runtime/openclaw/scaffold.js +1 -1
  396. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  397. package/dist/runtime/openclaw/schedules.js +74 -0
  398. package/dist/runtime/pi/adapter.d.ts +1 -1
  399. package/dist/runtime/pi/adapter.js +86 -53
  400. package/dist/runtime/pi/appActivitySource.js +114 -2
  401. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  402. package/dist/runtime/pi/appAgentConfig.js +264 -0
  403. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  404. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  405. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  406. package/dist/runtime/pi/appCliSource.js +353 -0
  407. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  408. package/dist/runtime/pi/appControlSource.js +390 -0
  409. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  410. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  411. package/dist/runtime/pi/appCoreSource.d.ts +4 -1
  412. package/dist/runtime/pi/appCoreSource.js +104 -214
  413. package/dist/runtime/pi/appPreludeSource.js +140 -52
  414. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  415. package/dist/runtime/pi/appScheduleSource.js +80 -0
  416. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  417. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  418. package/dist/runtime/pi/appSource.d.ts +4 -1
  419. package/dist/runtime/pi/appSource.js +6 -2
  420. package/dist/runtime/pi/appTemplate.d.ts +8 -22
  421. package/dist/runtime/pi/appTemplate.js +9 -126
  422. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  423. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  424. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  425. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  426. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  427. package/dist/runtime/pi/containerTargets.js +57 -0
  428. package/dist/runtime/pi/runAuth.js +126 -9
  429. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  430. package/dist/runtime/pi/testHelpers.js +40 -0
  431. package/dist/runtime/picoclaw/adapter.js +23 -27
  432. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  433. package/dist/runtime/picoclaw/mcp.js +43 -0
  434. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  435. package/dist/runtime/picoclaw/memory.js +17 -0
  436. package/dist/runtime/picoclaw/runAuth.js +1 -1
  437. package/dist/runtime/picoclaw/scaffold.js +1 -1
  438. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  439. package/dist/runtime/picoclaw/schedules.js +62 -3
  440. package/dist/runtime/scheduleUtils.d.ts +2 -0
  441. package/dist/runtime/scheduleUtils.js +15 -0
  442. package/dist/runtime/types.d.ts +25 -2
  443. package/dist/shared/errors.d.ts +1 -1
  444. package/dist/shared/errors.js +2 -2
  445. package/dist/shared/index.d.ts +1 -0
  446. package/dist/shared/index.js +1 -0
  447. package/dist/shared/redaction.d.ts +2 -0
  448. package/dist/shared/redaction.js +10 -0
  449. package/dist/status/buildStatus.d.ts +1 -0
  450. package/dist/status/buildStatus.js +2 -0
  451. package/dist/status/compileReport.d.ts +22 -0
  452. package/dist/status/compileReport.js +16 -2
  453. package/dist/status/compiledProbeCollection.d.ts +21 -0
  454. package/dist/status/compiledProbeCollection.js +27 -0
  455. package/dist/status/imageStatusReport.js +6 -0
  456. package/dist/status/index.d.ts +3 -0
  457. package/dist/status/index.js +3 -0
  458. package/dist/status/lifecycleProbes.d.ts +19 -0
  459. package/dist/status/lifecycleProbes.js +174 -0
  460. package/dist/status/moltnetProbes.d.ts +7 -8
  461. package/dist/status/moltnetProbes.js +27 -198
  462. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  463. package/dist/status/moltnetWiringProbes.js +178 -0
  464. package/dist/target/cleanupRun.d.ts +41 -0
  465. package/dist/target/cleanupRun.js +139 -0
  466. package/dist/target/cleanupRunDocker.d.ts +16 -0
  467. package/dist/target/cleanupRunDocker.js +66 -0
  468. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  469. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  470. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  471. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  472. package/dist/target/composedPreparation.d.ts +205 -0
  473. package/dist/target/composedPreparation.js +223 -0
  474. package/dist/target/containerBundle.d.ts +82 -0
  475. package/dist/target/containerBundle.js +243 -0
  476. package/dist/target/containerBundleArchive.d.ts +31 -0
  477. package/dist/target/containerBundleArchive.js +140 -0
  478. package/dist/target/containerBundleAuthority.d.ts +25 -0
  479. package/dist/target/containerBundleAuthority.js +65 -0
  480. package/dist/target/containerBundleContracts.d.ts +114 -0
  481. package/dist/target/containerBundleContracts.js +173 -0
  482. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  483. package/dist/target/containerBundleFilesystemStore.js +247 -0
  484. package/dist/target/containerBundlePolicy.d.ts +33 -0
  485. package/dist/target/containerBundlePolicy.js +64 -0
  486. package/dist/target/containerBundleStore.d.ts +127 -0
  487. package/dist/target/containerBundleStore.js +284 -0
  488. package/dist/target/contracts.d.ts +538 -0
  489. package/dist/target/contracts.js +373 -0
  490. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  491. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  492. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  493. package/dist/target/dockerArtifactInspection.js +125 -0
  494. package/dist/target/dockerArtifacts.d.ts +21 -0
  495. package/dist/target/dockerArtifacts.js +110 -0
  496. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  497. package/dist/target/dockerArtifactsProvider.js +449 -0
  498. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  499. package/dist/target/dockerCommandExecutor.js +200 -0
  500. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  501. package/dist/target/dockerCommandExecutorCore.js +273 -0
  502. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  503. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  504. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  505. package/dist/target/dockerContextSnapshot.js +158 -0
  506. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  507. package/dist/target/dockerEndpointFingerprint.js +9 -0
  508. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  509. package/dist/target/dockerPreparedArtifact.js +131 -0
  510. package/dist/target/dockerProjectionJson.d.ts +1 -0
  511. package/dist/target/dockerProjectionJson.js +80 -0
  512. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  513. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  514. package/dist/target/dockerResources.d.ts +26 -0
  515. package/dist/target/dockerResources.js +162 -0
  516. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  517. package/dist/target/dockerResourcesProvider.js +207 -0
  518. package/dist/target/dockerSecrets.d.ts +39 -0
  519. package/dist/target/dockerSecrets.js +249 -0
  520. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  521. package/dist/target/dockerSecretsAuthority.js +216 -0
  522. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  523. package/dist/target/dockerSecretsLifecycle.js +133 -0
  524. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  525. package/dist/target/dockerSecretsProvider.js +329 -0
  526. package/dist/target/dockerTarget.d.ts +52 -0
  527. package/dist/target/dockerTarget.js +48 -0
  528. package/dist/target/dockerTargetBinding.d.ts +14 -0
  529. package/dist/target/dockerTargetBinding.js +96 -0
  530. package/dist/target/dockerWorldClock.d.ts +17 -0
  531. package/dist/target/dockerWorldClock.js +111 -0
  532. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  533. package/dist/target/dockerWorldReadiness.js +119 -0
  534. package/dist/target/dockerWorldService.d.ts +23 -0
  535. package/dist/target/dockerWorldService.js +216 -0
  536. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  537. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  538. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  539. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  540. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  541. package/dist/target/dockerWorldServiceProvider.js +318 -0
  542. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  543. package/dist/target/dockerWorldServiceStore.js +367 -0
  544. package/dist/target/evidenceExport.d.ts +55 -0
  545. package/dist/target/evidenceExport.js +518 -0
  546. package/dist/target/evidenceExportArchive.d.ts +10 -0
  547. package/dist/target/evidenceExportArchive.js +302 -0
  548. package/dist/target/evidenceExportContract.d.ts +27 -0
  549. package/dist/target/evidenceExportContract.js +40 -0
  550. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  551. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  552. package/dist/target/evidenceExportProvider.d.ts +85 -0
  553. package/dist/target/evidenceExportProvider.js +187 -0
  554. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  555. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  556. package/dist/target/evidenceExportStore.d.ts +70 -0
  557. package/dist/target/evidenceExportStore.js +498 -0
  558. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  559. package/dist/target/evidenceExportStorePublication.js +395 -0
  560. package/dist/target/handles.d.ts +20 -0
  561. package/dist/target/handles.js +56 -0
  562. package/dist/target/index.d.ts +12 -0
  563. package/dist/target/index.js +11 -0
  564. package/dist/target/journal.d.ts +59 -0
  565. package/dist/target/journal.js +529 -0
  566. package/dist/target/journalFilesystem.d.ts +3 -0
  567. package/dist/target/journalFilesystem.js +111 -0
  568. package/dist/target/journalRoot.d.ts +4 -0
  569. package/dist/target/journalRoot.js +6 -0
  570. package/dist/target/organizationAttachment.d.ts +23 -0
  571. package/dist/target/organizationAttachment.js +263 -0
  572. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  573. package/dist/target/organizationAttachmentAuthority.js +161 -0
  574. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  575. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  576. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  577. package/dist/target/organizationAttachmentProvider.js +289 -0
  578. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  579. package/dist/target/organizationAttachmentStore.js +316 -0
  580. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  581. package/dist/target/publicArtifactSnapshot.js +150 -0
  582. package/dist/target/topologyActivation.d.ts +51 -0
  583. package/dist/target/topologyActivation.js +149 -0
  584. package/dist/target/topologyAttestation.d.ts +37 -0
  585. package/dist/target/topologyAttestation.js +300 -0
  586. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  587. package/dist/target/topologyAttestationErrors.js +1 -0
  588. package/dist/target/worldClock.d.ts +60 -0
  589. package/dist/target/worldClock.js +129 -0
  590. package/dist/target/worldReadiness.d.ts +103 -0
  591. package/dist/target/worldReadiness.js +153 -0
  592. package/moltnet-releases.json +20 -0
  593. package/package.json +27 -11
  594. package/runtimes.yaml +8 -23
  595. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  596. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  597. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  598. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -1,69 +1,10 @@
1
- import path from "node:path";
2
1
  import { createRuntimeInstallRecipe, getRuntimeAdapter } from "../runtime/index.js";
3
- import { SpawnfileError } from "../shared/index.js";
4
2
  import { listAgentSurfaceSecretNames } from "./agentSurfaces.js";
5
- import { listExecutionModelSecretNames, resolveExecutionModelAuthMethods } from "./modelEnv.js";
6
3
  import { resolveTargetResources } from "./containerTargetResources.js";
7
- const CONFIG_FILE_PLACEHOLDER = "<config-file>";
8
- const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
9
- const createDefaultTargets = (inputs) => inputs.map((input) => ({
10
- files: input.emittedFiles,
11
- id: `${input.kind}-${input.slug}`,
12
- sourceIds: [input.id]
13
- }));
14
- const resolveTargetEnvFiles = (configPath, target) => (target.envFiles ?? []).map((binding) => ({
15
- envName: binding.envName,
16
- filePath: path.posix.join(path.posix.dirname(configPath), binding.relativePath)
17
- }));
18
- const resolveTargetConfigEnvBindings = (meta, target) => [...(meta.configEnvBindings ?? []), ...(target.configEnvBindings ?? [])];
19
- const assertTargetHasConfig = (runtimeName, targetId, meta, files) => {
20
- if (!files.some((file) => file.path === meta.configFileName)) {
21
- throw new SpawnfileError("runtime_error", `Container target ${targetId} for ${runtimeName} is missing ${meta.configFileName}`);
22
- }
23
- };
24
- const createPackageIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}\u0000${pkg.version ?? ""}\u0000${pkg.scope ?? ""}`;
25
- const createPackageConflictIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}`;
26
- const createPackageLabel = (pkg) => `${pkg.manager} package ${pkg.name}`;
27
- const resolveTargetPackages = (target, inputs) => {
28
- const sourceIds = new Set(target.sourceIds ?? []);
29
- if (sourceIds.size === 0) {
30
- return [];
31
- }
32
- const byIdentity = new Map();
33
- for (const input of inputs) {
34
- if (!sourceIds.has(input.id) || input.value.kind !== "agent") {
35
- continue;
36
- }
37
- const candidatePackages = input.value.packages ?? [];
38
- for (const currentPackage of candidatePackages) {
39
- const conflictIdentity = createPackageConflictIdentity(currentPackage);
40
- const existingPackage = byIdentity.get(conflictIdentity);
41
- if (!existingPackage) {
42
- byIdentity.set(conflictIdentity, currentPackage);
43
- continue;
44
- }
45
- if (createPackageIdentity(existingPackage) !== createPackageIdentity(currentPackage)) {
46
- throw new SpawnfileError("validation_error", `Container target ${target.id} declares conflicting package definitions for ${createPackageLabel(currentPackage)}`);
47
- }
48
- }
49
- }
50
- return [...byIdentity.values()].sort((left, right) => createPackageIdentity(left).localeCompare(createPackageIdentity(right)));
51
- };
52
- const replaceContainerPathTemplate = (template, instanceRoot, configFileName) => template
53
- .replaceAll(INSTANCE_ROOT_PLACEHOLDER, instanceRoot)
54
- .replaceAll(CONFIG_FILE_PLACEHOLDER, configFileName);
55
- const resolveInstancePaths = (runtimeName, targetId, meta) => {
56
- const instanceRoot = `/var/lib/spawnfile/instances/${runtimeName}/${targetId}`;
57
- return {
58
- configPath: replaceContainerPathTemplate(meta.instancePaths.configPathTemplate, instanceRoot, meta.configFileName),
59
- homePath: meta.instancePaths.homePathTemplate
60
- ? replaceContainerPathTemplate(meta.instancePaths.homePathTemplate, instanceRoot, meta.configFileName)
61
- : undefined,
62
- instanceRoot,
63
- workspacePath: replaceContainerPathTemplate(meta.instancePaths.workspacePathTemplate, instanceRoot, meta.configFileName)
64
- };
65
- };
66
- export const createEnvVariableMap = (compiledNodes, runtimePlans) => {
4
+ import { assertTargetHasConfig, createDefaultTargets, resolveInstancePaths, resolveTargetConfigEnvBindings, resolveTargetEnvFiles, resolveTargetExposure, resolveTargetModelAuthMethods, resolveTargetModelSecrets, resolveTargetPackages } from "./containerTargetPlanResolution.js";
5
+ import { listExecutionModelSecretNames } from "./modelEnv.js";
6
+ import { findWorldBindingForNode } from "./worldBindings.js";
7
+ export const createEnvVariableMap = (compiledNodes, runtimePlans, moltnet) => {
67
8
  const variables = new Map();
68
9
  const register = (name, required, description, category, generated = false) => {
69
10
  const current = variables.get(name);
@@ -89,9 +30,8 @@ export const createEnvVariableMap = (compiledNodes, runtimePlans) => {
89
30
  };
90
31
  for (const node of compiledNodes) {
91
32
  if (node.value.kind === "agent") {
92
- for (const secret of node.value.secrets) {
33
+ for (const secret of node.value.secrets)
93
34
  registerSecret(secret);
94
- }
95
35
  for (const secretName of listExecutionModelSecretNames(node.value.execution)) {
96
36
  register(secretName, true, `Model provider auth for ${secretName}`, "model");
97
37
  }
@@ -100,9 +40,8 @@ export const createEnvVariableMap = (compiledNodes, runtimePlans) => {
100
40
  }
101
41
  continue;
102
42
  }
103
- for (const secret of node.value.shared.secrets) {
43
+ for (const secret of node.value.shared.secrets)
104
44
  registerSecret(secret);
105
- }
106
45
  }
107
46
  for (const runtimePlan of runtimePlans) {
108
47
  for (const variable of runtimePlan.meta.env ?? []) {
@@ -112,52 +51,14 @@ export const createEnvVariableMap = (compiledNodes, runtimePlans) => {
112
51
  register(binding.envName, true, `Injected into ${runtimePlan.runtimeName} runtime config`, "runtime", binding.generated ?? false);
113
52
  }
114
53
  }
115
- return variables;
116
- };
117
- const resolveTargetModelSecrets = (target, inputs) => {
118
- const sourceIds = new Set(target.sourceIds ?? []);
119
- if (sourceIds.size === 0) {
120
- return [];
121
- }
122
- const secretNames = new Set();
123
- for (const input of inputs) {
124
- if (!sourceIds.has(input.id) || input.value.kind !== "agent") {
125
- continue;
126
- }
127
- for (const secretName of listExecutionModelSecretNames(input.value.execution)) {
128
- secretNames.add(secretName);
129
- }
130
- }
131
- return [...secretNames].sort();
132
- };
133
- const resolveTargetModelAuthMethods = (target, inputs) => {
134
- const sourceIds = new Set(target.sourceIds ?? []);
135
- if (sourceIds.size === 0) {
136
- return {};
137
- }
138
- const methods = new Map();
139
- for (const input of inputs) {
140
- if (!sourceIds.has(input.id) || input.value.kind !== "agent") {
141
- continue;
142
- }
143
- for (const [provider, method] of Object.entries(resolveExecutionModelAuthMethods(input.value.execution))) {
144
- const existingMethod = methods.get(provider);
145
- if (existingMethod && existingMethod !== method) {
146
- throw new SpawnfileError("validation_error", `Container target ${target.id} declares conflicting auth methods for provider ${provider}`);
147
- }
148
- methods.set(provider, method);
54
+ for (const serverPlan of moltnet?.serverPlans ?? []) {
55
+ for (const patch of serverPlan.secretPatches) {
56
+ register(patch.envName, true, `Managed Moltnet secret for ${serverPlan.networkId}`, "surface");
149
57
  }
150
58
  }
151
- return Object.fromEntries([...methods.entries()].sort(([left], [right]) => left.localeCompare(right)));
152
- };
153
- const resolveTargetExposure = (target, inputs) => {
154
- const sourceIds = new Set(target.sourceIds ?? []);
155
- if (sourceIds.size === 0) {
156
- return false;
157
- }
158
- return inputs.some((input) => sourceIds.has(input.id) && input.value.kind === "agent" && input.value.expose === true);
59
+ return variables;
159
60
  };
160
- export const createRuntimeTargetPlans = async (plan, compiledNodes) => {
61
+ export const createRuntimeTargetPlans = async (plan, compiledNodes, worldBindings) => {
161
62
  const runtimeNames = Object.keys(plan.runtimes).sort();
162
63
  const runtimePlans = [];
163
64
  for (const runtimeName of runtimeNames) {
@@ -165,13 +66,20 @@ export const createRuntimeTargetPlans = async (plan, compiledNodes) => {
165
66
  const recipe = await createRuntimeInstallRecipe(runtimeName);
166
67
  const targetInputs = compiledNodes
167
68
  .filter((node) => node.runtimeName === runtimeName && node.emittedFiles.length > 0)
168
- .map((node) => ({
169
- emittedFiles: node.emittedFiles,
170
- id: node.id ?? `${node.kind}:${node.slug}`,
171
- kind: node.kind,
172
- slug: node.slug,
173
- value: node.value
174
- }));
69
+ .map((node) => {
70
+ const id = node.id ?? `${node.kind}:${node.slug}`;
71
+ const worldBinding = node.kind === "agent"
72
+ ? findWorldBindingForNode(worldBindings, id)
73
+ : undefined;
74
+ return {
75
+ emittedFiles: node.emittedFiles,
76
+ id,
77
+ kind: node.kind,
78
+ slug: node.slug,
79
+ value: node.value,
80
+ ...(worldBinding ? { worldBinding } : {})
81
+ };
82
+ });
175
83
  const targets = (await adapter.createContainerTargets?.(targetInputs)) ??
176
84
  createDefaultTargets(targetInputs);
177
85
  targets.forEach((target, index) => {
@@ -180,6 +88,7 @@ export const createRuntimeTargetPlans = async (plan, compiledNodes) => {
180
88
  const portStride = adapter.container.portStride ?? 1;
181
89
  runtimePlans.push({
182
90
  configEnvBindings: resolveTargetConfigEnvBindings(adapter.container, target) ?? [],
91
+ ...(target.engineByNodeId ? { engineByNodeId: target.engineByNodeId } : {}),
183
92
  envFiles: resolveTargetEnvFiles(instancePaths.configPath, target),
184
93
  packages: resolveTargetPackages(target, targetInputs),
185
94
  id: target.id,
@@ -191,12 +100,16 @@ export const createRuntimeTargetPlans = async (plan, compiledNodes) => {
191
100
  publishedPort: resolveTargetExposure(target, targetInputs) && adapter.container.port
192
101
  ? adapter.container.port + (index * portStride)
193
102
  : undefined,
103
+ recipeEnv: recipe.env,
194
104
  resources: resolveTargetResources(target, targetInputs, instancePaths, adapter.container),
195
105
  runtimeName,
196
106
  runtimeRoot: recipe.runtimeRoot,
197
107
  sourceIds: [...(target.sourceIds ?? [])].sort(),
198
108
  targetConfigEnvBindings: target.configEnvBindings,
199
- targetFiles: target.files
109
+ targetFiles: target.files,
110
+ ...(target.worldTokenEnvNames
111
+ ? { worldTokenEnvNames: target.worldTokenEnvNames }
112
+ : {})
200
113
  });
201
114
  });
202
115
  }
@@ -1,4 +1,4 @@
1
- import type { EmittedFile } from "../runtime/index.js";
1
+ import type { EmittedFile, RuntimeContainerPackageOverrides } from "../runtime/index.js";
2
2
  import type { ContainerEnvVariable, RuntimeTargetPlan } from "./containerArtifactsTypes.js";
3
3
  import type { EntrypointOptions } from "./containerEntrypointRender.js";
4
4
  export { renderEntrypoint } from "./containerEntrypointRender.js";
@@ -7,8 +7,10 @@ export declare const renderEnvExample: (variables: ContainerEnvVariable[]) => st
7
7
  export interface DockerfileDistributionOptions {
8
8
  labels: Record<string, string>;
9
9
  reportOutputFile: string;
10
+ worldBindingsOutputFile?: string;
10
11
  }
11
12
  export declare const renderDockerfile: (runtimePlans: RuntimeTargetPlan[], options?: EntrypointOptions & {
12
13
  distribution?: DockerfileDistributionOptions;
14
+ runtimePackageOverrides?: RuntimeContainerPackageOverrides;
13
15
  }) => Promise<string>;
14
16
  export declare const createRootfsFiles: (runtimePlans: RuntimeTargetPlan[]) => EmittedFile[];
@@ -1,5 +1,5 @@
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";
@@ -7,8 +7,6 @@ import { MOLTNET_BIN_DIRECTORY, MOLTNET_BINARY_NAMES } from "./moltnetBinaries.j
7
7
  import { collectPackagesByManager, createAptPackageInstallItem, createNpmPackageInstallCommand, createNpmPackageInstallItem, createPackageInstallCommand, createPipxPackageInstallCommand, createPipxPackageInstallItem, getNpmInstallItemName } from "./containerPackageRender.js";
8
8
  const CONTAINER_ROOTFS_ROOT = "container/rootfs";
9
9
  const GATEWAY_PORT_PLACEHOLDER = "<gateway-port>";
10
- const MOLTNET_INSTALL_SCRIPT_URL = "https://moltnet.dev/install.sh";
11
- const MOLTNET_RELEASE_METADATA_URL = "https://api.github.com/repos/noopolis/moltnet/releases/latest";
12
10
  const WORKSPACE_PLACEHOLDER = "<workspace-path>";
13
11
  const RUNTIME_ROOT_PLACEHOLDER = "<runtime-root>";
14
12
  const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
@@ -72,19 +70,22 @@ export const renderEnvExample = (variables) => {
72
70
  return `${lines.join("\n").trimEnd()}\n`;
73
71
  };
74
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
+ }
75
76
  const runtimeNames = [...new Set(runtimePlans.map((plan) => plan.runtimeName))];
76
- const runtimeRecipes = await Promise.all(runtimeNames.map((runtimeName) => createRuntimeInstallRecipe(runtimeName)));
77
+ const runtimeRecipes = await Promise.all(runtimeNames.map((runtimeName) => createRuntimeInstallRecipe(runtimeName, { packageOverrides: options.runtimePackageOverrides })));
77
78
  const recipeByRuntimeName = new Map(runtimeRecipes.map((recipe) => [recipe.runtimeName, recipe]));
78
79
  const baseImage = selectBaseImage(runtimePlans, runtimeRecipes);
79
- const needsJsonEnvWriter = runtimePlans.some((plan) => (plan.configEnvBindings?.length ?? 0) > 0);
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);
80
84
  const needsGit = runtimePlans.some((plan) => (plan.resources ?? []).some((resource) => resource.kind === "git"));
81
85
  const systemDeps = [
82
86
  ...new Set([
83
87
  ...runtimePlans.flatMap((plan) => recipeByRuntimeName.get(plan.runtimeName)?.baseImage ? [] : plan.meta.systemDeps),
84
88
  ...(needsGit ? ["git"] : []),
85
- ...(options.hasMoltnet && !options.hasStagedMoltnetBinaries
86
- ? ["ca-certificates", "curl", "tar"]
87
- : []),
88
89
  ...(needsJsonEnvWriter ? ["python3"] : [])
89
90
  ])
90
91
  ].sort();
@@ -123,9 +124,6 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
123
124
  if (options.hasMoltnet && options.hasStagedMoltnetBinaries) {
124
125
  lines.push(`COPY ${MOLTNET_BIN_DIRECTORY}/ /usr/local/bin/`, `RUN chmod +x ${MOLTNET_BINARY_NAMES.map((binaryName) => `/usr/local/bin/${binaryName}`).join(" ")}`, "");
125
126
  }
126
- else if (options.hasMoltnet) {
127
- 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`)}`, "");
128
- }
129
127
  for (const recipe of runtimeRecipes) {
130
128
  for (const copyCommand of recipe.copyCommands) {
131
129
  lines.push(copyCommand);
@@ -144,7 +142,12 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
144
142
  lines.push(`RUN ${command}`);
145
143
  }
146
144
  if (options.distribution) {
147
- 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)
148
151
  .sort(([left], [right]) => left.localeCompare(right))
149
152
  .map(([name, value]) => `LABEL ${name}=${shellQuote(value)}`));
150
153
  }
@@ -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") {
@@ -67,6 +81,13 @@ const createRuntimeReadinessWait = (plan) => {
67
81
  ];
68
82
  };
69
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
+ ];
70
91
  const lines = [
71
92
  "#!/usr/bin/env bash",
72
93
  "set -euo pipefail",
@@ -97,61 +118,21 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
97
118
  ' printf %s \"${!name:-}\" > \"$target\"',
98
119
  "}",
99
120
  "",
100
- "apply_json_env_value() {",
101
- ' local target=\"$1\"',
102
- ' local name=\"$2\"',
103
- ' local json_path=\"$3\"',
104
- ' if [ -z \"${!name:-}\" ]; then',
105
- " return",
106
- " fi",
107
- " python3 - \"$target\" \"$name\" \"$json_path\" <<'PY'",
108
- "import json",
109
- "import os",
110
- "import sys",
111
- "",
112
- "target_path = sys.argv[1]",
113
- "env_name = sys.argv[2]",
114
- "json_path = sys.argv[3].split('.')",
115
- "value = os.environ.get(env_name)",
116
- "if value is None:",
117
- " raise SystemExit(0)",
118
- "",
119
- "with open(target_path, encoding='utf-8') as handle:",
120
- " data = json.load(handle)",
121
- "",
122
- "cursor = data",
123
- "for part in json_path[:-1]:",
124
- " if isinstance(cursor, list):",
125
- " cursor = cursor[int(part)]",
126
- " continue",
127
- " child = cursor.get(part)",
128
- " if not isinstance(child, (dict, list)):",
129
- " child = {}",
130
- " cursor[part] = child",
131
- " cursor = child",
132
- "",
133
- "if isinstance(cursor, list):",
134
- " cursor[int(json_path[-1])] = value",
135
- "else:",
136
- " cursor[json_path[-1]] = value",
137
- "",
138
- "with open(target_path, 'w', encoding='utf-8') as handle:",
139
- " json.dump(data, handle, indent=2)",
140
- " handle.write('\\n')",
141
- "PY",
142
- "}",
121
+ ...createConfigEnvMaterializationFunction(),
143
122
  "",
144
123
  ...createWorkspaceResourceShellFunctions()
145
124
  ];
146
125
  lines.push('if [ -n "${OPENCLAW_GATEWAY_TOKEN:-}" ] && [ -z "${OPENCLAW_HOOKS_TOKEN:-}" ]; then', ' export OPENCLAW_HOOKS_TOKEN="hooks-${OPENCLAW_GATEWAY_TOKEN}"', "fi", "");
147
- for (const secretName of requiredSecrets) {
126
+ for (const secretName of renderedRequiredSecrets) {
148
127
  lines.push(`require_env ${shellQuote(secretName)}`);
149
128
  }
150
- if (requiredSecrets.length > 0) {
129
+ if (renderedRequiredSecrets.length > 0) {
151
130
  lines.push("");
152
131
  }
132
+ lines.push(...cliCredentialMaterialization);
153
133
  const moltnetServerPlans = options.moltnet?.serverPlans ?? [];
154
134
  const moltnetNodePlans = options.moltnet?.nodePlans ?? [];
135
+ const moltnetExternalParticipants = options.moltnet?.externalParticipantArtifacts ?? [];
155
136
  if (runtimePlans.length === 1 &&
156
137
  moltnetServerPlans.length === 0 &&
157
138
  moltnetNodePlans.length === 0) {
@@ -162,6 +143,8 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
162
143
  return `${lines.join("\n").trimEnd()}\n`;
163
144
  }
164
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(" ")} ` : "";
165
148
  const managedMoltnetServerPlans = moltnetServerPlans.filter((serverPlan) => serverPlan.mode === "managed");
166
149
  if (managedMoltnetServerPlans.length > 0) {
167
150
  lines.push(`mkdir -p ${shellQuote(MOLTNET_SERVER_DATA_DIRECTORY)}`, "");
@@ -175,10 +158,31 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
175
158
  for (const patch of serverPlan.secretPatches) {
176
159
  serverLines.push(`apply_json_env_value ${shellQuote(serverPlan.configPath)} ${shellQuote(patch.envName)} ${shellQuote(patch.jsonPath)}`);
177
160
  }
178
- 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+=("$!")');
179
163
  if (serverPlan.port) {
180
164
  serverLines.push(`until curl -sf ${shellQuote(`http://127.0.0.1:${serverPlan.port}/healthz`)} >/dev/null; do sleep 1; done`);
181
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
+ }
182
186
  // Suppress the in-image managed server when an external endpoint is bound.
183
187
  lines.push(`if [ -z "\${${urlEnv}:-}" ]; then`, ...serverLines.map((line) => ` ${line}`), "fi", "");
184
188
  }
@@ -191,7 +195,7 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
191
195
  const urlEnv = networkUrlEnvName(nodePlan.networkId);
192
196
  lines.push(
193
197
  // Rebind the bridge endpoint when an external network URL is provided.
194
- `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+=("$!")', "");
195
199
  }
196
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"');
197
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>;