spawnfile 0.1.13 → 0.1.17

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 (950) hide show
  1. package/README.md +61 -121
  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/importers.d.ts +10 -0
  27. package/dist/auth/importers.js +29 -4
  28. package/dist/auth/index.d.ts +9 -0
  29. package/dist/auth/index.js +8 -0
  30. package/dist/auth/paths.d.ts +12 -1
  31. package/dist/auth/paths.js +21 -0
  32. package/dist/auth/profileStore.js +9 -9
  33. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  34. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  35. package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
  36. package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
  37. package/dist/auth/targetSecretSourceFsPublish.d.ts +17 -0
  38. package/dist/auth/targetSecretSourceFsPublish.js +51 -0
  39. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +17 -0
  40. package/dist/auth/targetSecretSourceFsPublishImmutable.js +468 -0
  41. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  42. package/dist/auth/targetSecretSourceFsRead.js +189 -0
  43. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  44. package/dist/auth/targetSecretSourceGrant.js +99 -0
  45. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  46. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  47. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  48. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  49. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  50. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  51. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  52. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  53. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  54. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  55. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  56. package/dist/auth/targetSecretSourceResolver.js +137 -0
  57. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  58. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  59. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  60. package/dist/auth/targetSecretSourceRotate.js +121 -0
  61. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  62. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  63. package/dist/auth/trainingAuth.d.ts +21 -0
  64. package/dist/auth/trainingAuth.js +86 -0
  65. package/dist/auth/types.d.ts +1 -1
  66. package/dist/cli/artifactsCommands.d.ts +27 -0
  67. package/dist/cli/artifactsCommands.js +132 -0
  68. package/dist/cli/authCommands.d.ts +5 -0
  69. package/dist/cli/authCommands.js +230 -0
  70. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  71. package/dist/cli/canaryCutoverCommand.js +30 -0
  72. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  73. package/dist/cli/capabilitiesCommand.js +12 -0
  74. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  75. package/dist/cli/capabilitiesReceipt.js +56 -0
  76. package/dist/cli/compileBuildCommands.d.ts +3 -0
  77. package/dist/cli/compileBuildCommands.js +48 -0
  78. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  79. package/dist/cli/composedLifecycleContractSet.js +204 -0
  80. package/dist/cli/containerBundleCommand.d.ts +6 -0
  81. package/dist/cli/containerBundleCommand.js +116 -0
  82. package/dist/cli/devCommands.js +2 -0
  83. package/dist/cli/downCommand.d.ts +25 -0
  84. package/dist/cli/downCommand.js +145 -0
  85. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  86. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  87. package/dist/cli/index.js +15 -3
  88. package/dist/cli/lifecycleCommands.d.ts +1 -1
  89. package/dist/cli/lifecycleCommands.js +11 -181
  90. package/dist/cli/lifecycleMachine.d.ts +25 -0
  91. package/dist/cli/lifecycleMachine.js +78 -0
  92. package/dist/cli/lifecyclePlan.d.ts +35 -0
  93. package/dist/cli/lifecyclePlan.js +240 -0
  94. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  95. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  96. package/dist/cli/paideiaDelegation.d.ts +17 -0
  97. package/dist/cli/paideiaDelegation.js +210 -0
  98. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  99. package/dist/cli/paideiaSupervisor.js +48 -0
  100. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  101. package/dist/cli/productStateCloneCommand.js +34 -0
  102. package/dist/cli/runCli.d.ts +19 -2
  103. package/dist/cli/runCli.js +58 -74
  104. package/dist/cli/runPublishCommands.d.ts +3 -0
  105. package/dist/cli/runPublishCommands.js +70 -0
  106. package/dist/cli/statusCommand.d.ts +3 -33
  107. package/dist/cli/statusCommand.js +19 -249
  108. package/dist/cli/statusCommandLive.d.ts +20 -0
  109. package/dist/cli/statusCommandLive.js +188 -0
  110. package/dist/cli/statusCommandOptions.d.ts +40 -0
  111. package/dist/cli/statusCommandOptions.js +42 -0
  112. package/dist/cli/targetCliRoute.d.ts +2 -0
  113. package/dist/cli/targetCliRoute.js +30 -0
  114. package/dist/cli/targetCommands.d.ts +30 -0
  115. package/dist/cli/targetCommands.js +227 -0
  116. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  117. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  118. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  119. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  120. package/dist/cli/targetConfigResolver.d.ts +3 -0
  121. package/dist/cli/targetConfigResolver.js +111 -0
  122. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  123. package/dist/cli/targetConfigResolverCommand.js +43 -0
  124. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  125. package/dist/cli/targetConfigResolverContracts.js +30 -0
  126. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  127. package/dist/cli/targetConfigResolverDocker.js +47 -0
  128. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  129. package/dist/cli/targetConfigResolverValidation.js +94 -0
  130. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  131. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  132. package/dist/cli/targetDefaultAuthorities.d.ts +55 -0
  133. package/dist/cli/targetDefaultAuthorities.js +213 -0
  134. package/dist/cli/targetDefaultConfig.d.ts +75 -0
  135. package/dist/cli/targetDefaultConfig.js +334 -0
  136. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  137. package/dist/cli/targetDefaultConfigStdin.js +221 -0
  138. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  139. package/dist/cli/targetDefaultEnvelope.js +13 -0
  140. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  141. package/dist/cli/targetDefaultHandlerFactory.js +268 -0
  142. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  143. package/dist/cli/targetDefaultHandlers.js +72 -0
  144. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  145. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  146. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  147. package/dist/cli/targetDefaultWorldClock.js +14 -0
  148. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  149. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  150. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  151. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  152. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  153. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  154. package/dist/cli/targetLookupCli.d.ts +3 -0
  155. package/dist/cli/targetLookupCli.js +31 -0
  156. package/dist/cli/targetLookupCommands.d.ts +12 -0
  157. package/dist/cli/targetLookupCommands.js +69 -0
  158. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  159. package/dist/cli/targetOperationDispatch.js +21 -0
  160. package/dist/cli/targetProductionCommands.d.ts +5 -0
  161. package/dist/cli/targetProductionCommands.js +45 -0
  162. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  163. package/dist/cli/targetReceiptOutput.js +21 -0
  164. package/dist/cli/targetRequestFile.d.ts +14 -0
  165. package/dist/cli/targetRequestFile.js +63 -0
  166. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  167. package/dist/cli/targetSecretSourceInput.js +121 -0
  168. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  169. package/dist/cli/targetWorldClockCommand.js +42 -0
  170. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  171. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  172. package/dist/cli/trainCommand.d.ts +3 -0
  173. package/dist/cli/trainCommand.js +61 -0
  174. package/dist/cli/upCommand.d.ts +3 -0
  175. package/dist/cli/upCommand.js +162 -0
  176. package/dist/cli/upImageCommand.d.ts +11 -0
  177. package/dist/cli/upImageCommand.js +41 -0
  178. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  179. package/dist/cli/upLifecycleInvocation.js +48 -0
  180. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  181. package/dist/cli/upLifecycleRecovery.js +197 -0
  182. package/dist/cli/usageCommand.d.ts +40 -0
  183. package/dist/cli/usageCommand.js +284 -0
  184. package/dist/cli/usageCommandLive.d.ts +84 -0
  185. package/dist/cli/usageCommandLive.js +95 -0
  186. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  187. package/dist/cli/usageDeploymentSource.js +22 -0
  188. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  189. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  190. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  191. package/dist/compiler/agentNodeMerge.js +79 -0
  192. package/dist/compiler/agentSurfaces.js +11 -1
  193. package/dist/compiler/buildCompilePlan.js +17 -0
  194. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  195. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  196. package/dist/compiler/buildCompilePlanTeams.d.ts +2 -1
  197. package/dist/compiler/buildCompilePlanTeams.js +9 -1
  198. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  199. package/dist/compiler/buildProject.d.ts +11 -0
  200. package/dist/compiler/buildProject.js +77 -2
  201. package/dist/compiler/compilePlanHelpers.js +5 -0
  202. package/dist/compiler/compileProject.d.ts +15 -0
  203. package/dist/compiler/compileProject.js +31 -75
  204. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  205. package/dist/compiler/compileProjectPolicy.js +21 -0
  206. package/dist/compiler/compileProjectReports.d.ts +9 -0
  207. package/dist/compiler/compileProjectReports.js +52 -0
  208. package/dist/compiler/compileProjectSupport.js +9 -0
  209. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  210. package/dist/compiler/containerArtifactSummaries.js +138 -0
  211. package/dist/compiler/containerArtifacts.d.ts +12 -0
  212. package/dist/compiler/containerArtifacts.js +180 -127
  213. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  214. package/dist/compiler/containerArtifactsPlans.js +54 -124
  215. package/dist/compiler/containerArtifactsRender.d.ts +5 -2
  216. package/dist/compiler/containerArtifactsRender.js +106 -70
  217. package/dist/compiler/containerArtifactsTypes.d.ts +20 -0
  218. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  219. package/dist/compiler/containerBackedMountRender.js +101 -0
  220. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  221. package/dist/compiler/containerConfigEnvRender.js +54 -0
  222. package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
  223. package/dist/compiler/containerDaimonBrokerRender.js +191 -0
  224. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  225. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
  226. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
  227. package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
  228. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
  229. package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
  230. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  231. package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
  232. package/dist/compiler/containerEntrypointRender.d.ts +8 -0
  233. package/dist/compiler/containerEntrypointRender.js +82 -72
  234. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  235. package/dist/compiler/containerEntrypointShell.js +29 -0
  236. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  237. package/dist/compiler/containerPackageOverrides.js +63 -0
  238. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  239. package/dist/compiler/containerPersistentMounts.js +66 -0
  240. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  241. package/dist/compiler/containerReadinessPaths.js +1 -0
  242. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  243. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  244. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  245. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  246. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  247. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  248. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  249. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  250. package/dist/compiler/containerTargetResources.d.ts +22 -1
  251. package/dist/compiler/containerTargetResources.js +94 -2
  252. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  253. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  254. package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
  255. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  256. package/dist/compiler/daimonTelemetryArtifacts.js +56 -0
  257. package/dist/compiler/deploymentLineage.d.ts +40 -0
  258. package/dist/compiler/deploymentLineage.js +50 -0
  259. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  260. package/dist/compiler/dockerBuildContext.js +159 -0
  261. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  262. package/dist/compiler/dockerBuildSkip.js +81 -0
  263. package/dist/compiler/index.d.ts +7 -0
  264. package/dist/compiler/index.js +7 -0
  265. package/dist/compiler/initProject.d.ts +2 -0
  266. package/dist/compiler/initProject.js +39 -1
  267. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  268. package/dist/compiler/localMoltnetAuthority.js +177 -0
  269. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  270. package/dist/compiler/memoryArtifacts.js +210 -0
  271. package/dist/compiler/memoryResolution.d.ts +4 -0
  272. package/dist/compiler/memoryResolution.js +147 -0
  273. package/dist/compiler/modelEnv.d.ts +7 -0
  274. package/dist/compiler/modelEnv.js +13 -1
  275. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  276. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  277. package/dist/compiler/moltnetArtifactPaths.d.ts +31 -0
  278. package/dist/compiler/moltnetArtifactPaths.js +51 -0
  279. package/dist/compiler/moltnetArtifactTypes.d.ts +56 -0
  280. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  281. package/dist/compiler/moltnetArtifacts.d.ts +3 -41
  282. package/dist/compiler/moltnetArtifacts.js +87 -101
  283. package/dist/compiler/moltnetBinaries.d.ts +33 -4
  284. package/dist/compiler/moltnetBinaries.js +173 -26
  285. package/dist/compiler/moltnetClientConfig.js +7 -2
  286. package/dist/compiler/moltnetConfigLowering.d.ts +18 -1
  287. package/dist/compiler/moltnetConfigLowering.js +92 -6
  288. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  289. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  290. package/dist/compiler/moltnetNodeConfig.js +7 -2
  291. package/dist/compiler/moltnetReleaseAuthority.d.ts +40 -0
  292. package/dist/compiler/moltnetReleaseAuthority.js +102 -0
  293. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  294. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  295. package/dist/compiler/moltnetRepresentativeResolution.d.ts +2 -1
  296. package/dist/compiler/moltnetRepresentativeResolution.js +17 -3
  297. package/dist/compiler/moltnetResolution.js +67 -21
  298. package/dist/compiler/moltnetRoomMemberships.js +52 -9
  299. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  300. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  301. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  302. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  303. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  304. package/dist/compiler/moltnetServerPlans.js +151 -0
  305. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  306. package/dist/compiler/organizationExternalParticipants.js +176 -0
  307. package/dist/compiler/organizationIdentity.d.ts +21 -0
  308. package/dist/compiler/organizationIdentity.js +64 -0
  309. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  310. package/dist/compiler/organizationIdentityGraph.js +115 -0
  311. package/dist/compiler/organizationReadyEvidence.d.ts +57 -0
  312. package/dist/compiler/organizationReadyEvidence.js +281 -0
  313. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  314. package/dist/compiler/projectManifestGraph.js +24 -0
  315. package/dist/compiler/runProject.d.ts +8 -2
  316. package/dist/compiler/runProject.js +62 -27
  317. package/dist/compiler/runProjectAuth.d.ts +10 -2
  318. package/dist/compiler/runProjectAuth.js +105 -11
  319. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  320. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  321. package/dist/compiler/runProjectDocker.d.ts +11 -0
  322. package/dist/compiler/runProjectDocker.js +64 -16
  323. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  324. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  325. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  326. package/dist/compiler/runProjectDockerReservation.js +118 -0
  327. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  328. package/dist/compiler/runProjectLifecycle.js +40 -0
  329. package/dist/compiler/syncProjectAuth.js +4 -1
  330. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  331. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  332. package/dist/compiler/teamContextSupport.js +32 -40
  333. package/dist/compiler/teamContextTypes.d.ts +2 -0
  334. package/dist/compiler/training/broker/declaration.d.ts +45 -0
  335. package/dist/compiler/training/broker/declaration.js +55 -0
  336. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  337. package/dist/compiler/training/broker/entrypoint.js +111 -0
  338. package/dist/compiler/training/broker/index.d.ts +10 -0
  339. package/dist/compiler/training/broker/index.js +10 -0
  340. package/dist/compiler/training/broker/main.d.ts +2 -0
  341. package/dist/compiler/training/broker/main.js +14 -0
  342. package/dist/compiler/training/broker/paths.d.ts +196 -0
  343. package/dist/compiler/training/broker/paths.js +241 -0
  344. package/dist/compiler/training/broker/processes.d.ts +42 -0
  345. package/dist/compiler/training/broker/processes.js +99 -0
  346. package/dist/compiler/training/broker/projection.d.ts +51 -0
  347. package/dist/compiler/training/broker/projection.js +76 -0
  348. package/dist/compiler/training/broker/provisioning.d.ts +87 -0
  349. package/dist/compiler/training/broker/provisioning.js +213 -0
  350. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  351. package/dist/compiler/training/broker/receipt.js +110 -0
  352. package/dist/compiler/training/broker/registration.d.ts +41 -0
  353. package/dist/compiler/training/broker/registration.js +102 -0
  354. package/dist/compiler/training/broker/runtime.d.ts +25 -0
  355. package/dist/compiler/training/broker/runtime.js +173 -0
  356. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  357. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  358. package/dist/compiler/training/broker/supervisor.d.ts +109 -0
  359. package/dist/compiler/training/broker/supervisor.js +173 -0
  360. package/dist/compiler/training/container/contract.d.ts +31 -0
  361. package/dist/compiler/training/container/contract.js +33 -0
  362. package/dist/compiler/training/container/index.d.ts +4 -0
  363. package/dist/compiler/training/container/index.js +2 -0
  364. package/dist/compiler/training/container/launch.d.ts +18 -0
  365. package/dist/compiler/training/container/launch.js +173 -0
  366. package/dist/compiler/training/container/prepare.d.ts +8 -0
  367. package/dist/compiler/training/container/prepare.js +80 -0
  368. package/dist/compiler/training/container/process.d.ts +14 -0
  369. package/dist/compiler/training/container/process.js +70 -0
  370. package/dist/compiler/training/container/security.d.ts +36 -0
  371. package/dist/compiler/training/container/security.js +58 -0
  372. package/dist/compiler/training/context.d.ts +7 -0
  373. package/dist/compiler/training/context.js +93 -0
  374. package/dist/compiler/training/contract.d.ts +142 -0
  375. package/dist/compiler/training/contract.js +34 -0
  376. package/dist/compiler/training/index.d.ts +4 -0
  377. package/dist/compiler/training/index.js +3 -0
  378. package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
  379. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  380. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  381. package/dist/compiler/training/preparation/broker.js +43 -0
  382. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  383. package/dist/compiler/training/preparation/contextModes.js +38 -0
  384. package/dist/compiler/training/preparation/contract.d.ts +182 -0
  385. package/dist/compiler/training/preparation/contract.js +94 -0
  386. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  387. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  388. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  389. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  390. package/dist/compiler/training/preparation/files.d.ts +25 -0
  391. package/dist/compiler/training/preparation/files.js +85 -0
  392. package/dist/compiler/training/preparation/image.d.ts +28 -0
  393. package/dist/compiler/training/preparation/image.js +102 -0
  394. package/dist/compiler/training/preparation/index.d.ts +3 -0
  395. package/dist/compiler/training/preparation/index.js +2 -0
  396. package/dist/compiler/training/preparation/inputs.d.ts +23 -0
  397. package/dist/compiler/training/preparation/inputs.js +93 -0
  398. package/dist/compiler/training/preparation/prepare.d.ts +33 -0
  399. package/dist/compiler/training/preparation/prepare.js +186 -0
  400. package/dist/compiler/training/preparation/scratch.d.ts +19 -0
  401. package/dist/compiler/training/preparation/scratch.js +48 -0
  402. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  403. package/dist/compiler/training/repair/compatibility.js +34 -0
  404. package/dist/compiler/training/repair/contract.d.ts +506 -0
  405. package/dist/compiler/training/repair/contract.js +31 -0
  406. package/dist/compiler/training/repair/index.d.ts +3 -0
  407. package/dist/compiler/training/repair/index.js +3 -0
  408. package/dist/compiler/training/repair/prepare.d.ts +230 -0
  409. package/dist/compiler/training/repair/prepare.js +74 -0
  410. package/dist/compiler/training/repair/witness.d.ts +203 -0
  411. package/dist/compiler/training/repair/witness.js +42 -0
  412. package/dist/compiler/types.d.ts +84 -1
  413. package/dist/compiler/upProject.d.ts +31 -1
  414. package/dist/compiler/upProject.js +197 -22
  415. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  416. package/dist/compiler/upProjectHandoff.js +204 -0
  417. package/dist/compiler/upReceipt.d.ts +36 -0
  418. package/dist/compiler/upReceipt.js +127 -0
  419. package/dist/compiler/updateProjectModels.js +43 -60
  420. package/dist/compiler/updateProjectRuntime.js +22 -35
  421. package/dist/compiler/updateProjectSurfaces.js +53 -47
  422. package/dist/compiler/view/types.d.ts +1 -1
  423. package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
  424. package/dist/compiler/workspaceBundleArtifacts.js +106 -0
  425. package/dist/compiler/workspaceResources.d.ts +4 -1
  426. package/dist/compiler/workspaceResources.js +12 -7
  427. package/dist/compiler/worldBindings.d.ts +39 -0
  428. package/dist/compiler/worldBindings.js +247 -0
  429. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  430. package/dist/compiler/worldBindingsFile.js +162 -0
  431. package/dist/deployment/artifactsExport.d.ts +49 -0
  432. package/dist/deployment/artifactsExport.js +217 -0
  433. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  434. package/dist/deployment/artifactsExportDocker.js +91 -0
  435. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  436. package/dist/deployment/artifactsExportPlan.js +185 -0
  437. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  438. package/dist/deployment/artifactsExportTypes.js +52 -0
  439. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  440. package/dist/deployment/buildImageCacheStore.js +54 -0
  441. package/dist/deployment/canaryCutover.d.ts +42 -0
  442. package/dist/deployment/canaryCutover.js +140 -0
  443. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  444. package/dist/deployment/candidateDiagnostics.js +90 -0
  445. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  446. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  447. package/dist/deployment/dockerInspect.d.ts +9 -0
  448. package/dist/deployment/dockerInspect.js +24 -1
  449. package/dist/deployment/dockerLabels.d.ts +2 -0
  450. package/dist/deployment/dockerLabels.js +2 -0
  451. package/dist/deployment/dockerLogs.js +5 -10
  452. package/dist/deployment/dockerManager.d.ts +51 -0
  453. package/dist/deployment/dockerManager.js +124 -1
  454. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  455. package/dist/deployment/dockerProbeGateway.js +80 -6
  456. package/dist/deployment/dockerRecover.js +9 -1
  457. package/dist/deployment/dockerTeardown.d.ts +32 -0
  458. package/dist/deployment/dockerTeardown.js +61 -0
  459. package/dist/deployment/downDeployment.d.ts +39 -0
  460. package/dist/deployment/downDeployment.js +248 -0
  461. package/dist/deployment/downReceiptTypes.d.ts +36 -0
  462. package/dist/deployment/downReceiptTypes.js +45 -0
  463. package/dist/deployment/index.d.ts +20 -0
  464. package/dist/deployment/index.js +21 -0
  465. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  466. package/dist/deployment/lifecycleCompletion.js +236 -0
  467. package/dist/deployment/lifecycleCompletionContracts.d.ts +224 -0
  468. package/dist/deployment/lifecycleCompletionContracts.js +140 -0
  469. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  470. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  471. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  472. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  473. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  474. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  475. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  476. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  477. package/dist/deployment/lifecycleCompletionPaths.d.ts +12 -0
  478. package/dist/deployment/lifecycleCompletionPaths.js +19 -0
  479. package/dist/deployment/lifecycleCompletionPublication.d.ts +7 -0
  480. package/dist/deployment/lifecycleCompletionPublication.js +49 -0
  481. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  482. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  483. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  484. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  485. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  486. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  487. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  488. package/dist/deployment/lifecycleUpRecords.js +127 -0
  489. package/dist/deployment/native/AGENTS.md +11 -0
  490. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  491. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  492. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  493. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  494. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  495. package/dist/deployment/noReplaceActivation.js +50 -0
  496. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  497. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  498. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  499. package/dist/deployment/organizationHandoffAuthorityFsClient.js +187 -0
  500. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  501. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  502. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  503. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +431 -0
  504. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  505. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  506. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  507. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  508. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  509. package/dist/deployment/organizationHandoffAuthorityStore.js +355 -0
  510. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  511. package/dist/deployment/organizationHandoffAuthorityTypes.js +149 -0
  512. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  513. package/dist/deployment/organizationHandoffTypes.js +80 -0
  514. package/dist/deployment/organizationReady.d.ts +54 -0
  515. package/dist/deployment/organizationReady.js +232 -0
  516. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  517. package/dist/deployment/privateArtifactsExport.js +80 -0
  518. package/dist/deployment/productStateClone.d.ts +43 -0
  519. package/dist/deployment/productStateClone.js +319 -0
  520. package/dist/deployment/record.d.ts +26 -1
  521. package/dist/deployment/record.js +49 -4
  522. package/dist/deployment/target.d.ts +1 -35
  523. package/dist/deployment/target.js +1 -96
  524. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  525. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  526. package/dist/deployment/upReceiptTypes.d.ts +137 -0
  527. package/dist/deployment/upReceiptTypes.js +191 -0
  528. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  529. package/dist/deployment/workspaceResourceMigration.js +315 -0
  530. package/dist/dev/project.d.ts +7 -0
  531. package/dist/dev/project.js +24 -9
  532. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  533. package/dist/distribution/buildDistributionReport.js +2 -1
  534. package/dist/distribution/consumeImage.d.ts +2 -0
  535. package/dist/distribution/consumeImage.js +98 -73
  536. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  537. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  538. package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
  539. package/dist/distribution/consumeImageLifecycle.js +231 -0
  540. package/dist/distribution/consumeImageSupport.d.ts +12 -0
  541. package/dist/distribution/consumeImageSupport.js +15 -0
  542. package/dist/distribution/distributionReportSchema.d.ts +16 -1
  543. package/dist/distribution/distributionReportSchema.js +21 -3
  544. package/dist/distribution/dockerRunner.d.ts +6 -1
  545. package/dist/distribution/dockerRunner.js +31 -4
  546. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  547. package/dist/distribution/imageRuntimeAuth.js +70 -1
  548. package/dist/distribution/index.d.ts +3 -3
  549. package/dist/distribution/index.js +2 -2
  550. package/dist/distribution/preflight.js +5 -1
  551. package/dist/distribution/types.d.ts +21 -1
  552. package/dist/distribution/types.js +4 -0
  553. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  554. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  555. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  556. package/dist/evidenceExportHelper/index.d.ts +4 -0
  557. package/dist/evidenceExportHelper/index.js +4 -0
  558. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  559. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  560. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  561. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  562. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  563. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  564. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  565. package/dist/evidenceExportHelper/recipe.js +83 -0
  566. package/dist/filesystem/io.d.ts +2 -0
  567. package/dist/filesystem/io.js +16 -1
  568. package/dist/filesystem/paths.js +10 -1
  569. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  570. package/dist/ledger/causalConformanceCli.js +41 -0
  571. package/dist/ledger/causeNamespace.d.ts +8 -0
  572. package/dist/ledger/causeNamespace.js +24 -0
  573. package/dist/ledger/conformance.d.ts +83 -0
  574. package/dist/ledger/conformance.js +259 -0
  575. package/dist/ledger/emitters.d.ts +76 -0
  576. package/dist/ledger/emitters.js +188 -0
  577. package/dist/ledger/index.d.ts +4 -0
  578. package/dist/ledger/index.js +4 -0
  579. package/dist/ledger/principal.d.ts +96 -0
  580. package/dist/ledger/principal.js +121 -0
  581. package/dist/manifest/executionSchemas.d.ts +27 -0
  582. package/dist/manifest/executionSchemas.js +21 -2
  583. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  584. package/dist/manifest/externalParticipantSchemas.js +17 -0
  585. package/dist/manifest/index.d.ts +1 -0
  586. package/dist/manifest/index.js +1 -0
  587. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  588. package/dist/manifest/inlineAgentMember.js +9 -0
  589. package/dist/manifest/loadManifest.js +14 -8
  590. package/dist/manifest/mcpSchemas.d.ts +18 -0
  591. package/dist/manifest/mcpSchemas.js +44 -0
  592. package/dist/manifest/memorySchemas.d.ts +245 -0
  593. package/dist/manifest/memorySchemas.js +148 -0
  594. package/dist/manifest/renderSpawnfile.js +22 -131
  595. package/dist/manifest/renderSpawnfileNetworks.js +20 -2
  596. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  597. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  598. package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
  599. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  600. package/dist/manifest/scheduleSchemas.js +91 -5
  601. package/dist/manifest/schemas.d.ts +2034 -40
  602. package/dist/manifest/schemas.js +82 -33
  603. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  604. package/dist/manifest/surfaceSchemas.js +24 -1
  605. package/dist/manifest/teamNetworkAccessSchemas.d.ts +6 -2
  606. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  607. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  608. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  609. package/dist/manifest/teamNetworkSchemas.d.ts +25 -190
  610. package/dist/manifest/teamNetworkSchemas.js +21 -317
  611. package/dist/manifest/teamNetworkServerSchemas.d.ts +155 -0
  612. package/dist/manifest/teamNetworkServerSchemas.js +215 -0
  613. package/dist/manifest/workspaceSchemas.d.ts +16 -0
  614. package/dist/manifest/workspaceSchemas.js +11 -0
  615. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  616. package/dist/ownership/siblingBuildFreshness.js +20 -0
  617. package/dist/report/types.d.ts +173 -1
  618. package/dist/runtime/common.d.ts +63 -1
  619. package/dist/runtime/common.js +88 -3
  620. package/dist/runtime/container.d.ts +28 -1
  621. package/dist/runtime/container.js +78 -29
  622. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  623. package/dist/runtime/containerPackageOverrides.js +33 -0
  624. package/dist/runtime/daimon/adapter.d.ts +14 -0
  625. package/dist/runtime/daimon/adapter.js +243 -0
  626. package/dist/runtime/daimon/attention.d.ts +8 -0
  627. package/dist/runtime/daimon/attention.js +32 -0
  628. package/dist/runtime/daimon/config.d.ts +25 -0
  629. package/dist/runtime/daimon/config.js +272 -0
  630. package/dist/runtime/daimon/contractManifest.d.ts +295 -0
  631. package/dist/runtime/daimon/contractManifest.js +319 -0
  632. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  633. package/dist/runtime/daimon/grokModel.js +33 -0
  634. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
  635. package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
  636. package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
  637. package/dist/runtime/daimon/grokWorkerContract.js +48 -0
  638. package/dist/runtime/daimon/memory.d.ts +57 -0
  639. package/dist/runtime/daimon/memory.js +125 -0
  640. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  641. package/dist/runtime/daimon/runAuth.js +279 -0
  642. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  643. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  644. package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
  645. package/dist/runtime/daimon/scheduleAuthority.js +17 -0
  646. package/dist/runtime/index.d.ts +6 -0
  647. package/dist/runtime/index.js +6 -0
  648. package/dist/runtime/install.d.ts +3 -0
  649. package/dist/runtime/install.js +3 -0
  650. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  651. package/dist/runtime/localDaimonAuthority.js +77 -0
  652. package/dist/runtime/mnemeMcp.d.ts +28 -0
  653. package/dist/runtime/mnemeMcp.js +135 -0
  654. package/dist/runtime/openclaw/adapter.js +17 -6
  655. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  656. package/dist/runtime/openclaw/mcp.js +69 -0
  657. package/dist/runtime/openclaw/runAuth.js +2 -2
  658. package/dist/runtime/openclaw/scaffold.js +1 -1
  659. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  660. package/dist/runtime/openclaw/schedules.js +74 -0
  661. package/dist/runtime/pi/adapter.d.ts +1 -2
  662. package/dist/runtime/pi/adapter.js +87 -58
  663. package/dist/runtime/pi/appActivitySource.js +114 -2
  664. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  665. package/dist/runtime/pi/appAgentConfig.js +264 -0
  666. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  667. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  668. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  669. package/dist/runtime/pi/appCliSource.js +353 -0
  670. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  671. package/dist/runtime/pi/appControlSource.js +390 -0
  672. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  673. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  674. package/dist/runtime/pi/appCoreSource.d.ts +4 -1
  675. package/dist/runtime/pi/appCoreSource.js +104 -214
  676. package/dist/runtime/pi/appPreludeSource.js +140 -52
  677. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  678. package/dist/runtime/pi/appScheduleSource.js +84 -0
  679. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  680. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  681. package/dist/runtime/pi/appSource.d.ts +4 -1
  682. package/dist/runtime/pi/appSource.js +6 -2
  683. package/dist/runtime/pi/appTemplate.d.ts +8 -22
  684. package/dist/runtime/pi/appTemplate.js +9 -126
  685. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  686. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  687. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  688. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  689. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  690. package/dist/runtime/pi/containerTargets.js +57 -0
  691. package/dist/runtime/pi/runAuth.js +126 -9
  692. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  693. package/dist/runtime/pi/testHelpers.js +40 -0
  694. package/dist/runtime/picoclaw/adapter.js +25 -29
  695. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  696. package/dist/runtime/picoclaw/mcp.js +43 -0
  697. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  698. package/dist/runtime/picoclaw/memory.js +17 -0
  699. package/dist/runtime/picoclaw/runAuth.js +1 -1
  700. package/dist/runtime/picoclaw/scaffold.js +1 -1
  701. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  702. package/dist/runtime/picoclaw/schedules.js +62 -3
  703. package/dist/runtime/registry.d.ts +3 -0
  704. package/dist/runtime/registry.js +19 -2
  705. package/dist/runtime/scheduleUtils.d.ts +3 -0
  706. package/dist/runtime/scheduleUtils.js +19 -0
  707. package/dist/runtime/types.d.ts +50 -2
  708. package/dist/runtime/usageLedger.d.ts +158 -0
  709. package/dist/runtime/usageLedger.js +269 -0
  710. package/dist/runtime/usageLedgerRead.d.ts +48 -0
  711. package/dist/runtime/usageLedgerRead.js +102 -0
  712. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  713. package/dist/runtime/usageRequestLedger.js +72 -0
  714. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  715. package/dist/shared/daimonCodexDocker.js +120 -0
  716. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  717. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  718. package/dist/shared/errors.d.ts +1 -1
  719. package/dist/shared/errors.js +2 -2
  720. package/dist/shared/index.d.ts +3 -0
  721. package/dist/shared/index.js +3 -0
  722. package/dist/shared/redaction.d.ts +2 -0
  723. package/dist/shared/redaction.js +10 -0
  724. package/dist/shared/types.d.ts +1 -1
  725. package/dist/shared/volumeNames.d.ts +6 -0
  726. package/dist/shared/volumeNames.js +14 -0
  727. package/dist/status/buildStatus.d.ts +1 -0
  728. package/dist/status/buildStatus.js +2 -0
  729. package/dist/status/compileReport.d.ts +22 -0
  730. package/dist/status/compileReport.js +16 -2
  731. package/dist/status/compiledProbeCollection.d.ts +21 -0
  732. package/dist/status/compiledProbeCollection.js +27 -0
  733. package/dist/status/imageStatusReport.js +6 -0
  734. package/dist/status/index.d.ts +3 -0
  735. package/dist/status/index.js +3 -0
  736. package/dist/status/lifecycleProbes.d.ts +19 -0
  737. package/dist/status/lifecycleProbes.js +174 -0
  738. package/dist/status/moltnetProbes.d.ts +7 -8
  739. package/dist/status/moltnetProbes.js +27 -198
  740. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  741. package/dist/status/moltnetWiringProbes.js +178 -0
  742. package/dist/target/cleanupRun.d.ts +41 -0
  743. package/dist/target/cleanupRun.js +139 -0
  744. package/dist/target/cleanupRunDocker.d.ts +16 -0
  745. package/dist/target/cleanupRunDocker.js +66 -0
  746. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  747. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  748. package/dist/target/composedPreparation.d.ts +205 -0
  749. package/dist/target/composedPreparation.js +223 -0
  750. package/dist/target/containerBundle.d.ts +82 -0
  751. package/dist/target/containerBundle.js +243 -0
  752. package/dist/target/containerBundleArchive.d.ts +31 -0
  753. package/dist/target/containerBundleArchive.js +140 -0
  754. package/dist/target/containerBundleAuthority.d.ts +25 -0
  755. package/dist/target/containerBundleAuthority.js +65 -0
  756. package/dist/target/containerBundleContracts.d.ts +114 -0
  757. package/dist/target/containerBundleContracts.js +173 -0
  758. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  759. package/dist/target/containerBundleFilesystemStore.js +247 -0
  760. package/dist/target/containerBundlePolicy.d.ts +33 -0
  761. package/dist/target/containerBundlePolicy.js +64 -0
  762. package/dist/target/containerBundleStore.d.ts +127 -0
  763. package/dist/target/containerBundleStore.js +284 -0
  764. package/dist/target/contracts.d.ts +538 -0
  765. package/dist/target/contracts.js +373 -0
  766. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  767. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  768. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  769. package/dist/target/dockerArtifactInspection.js +125 -0
  770. package/dist/target/dockerArtifacts.d.ts +21 -0
  771. package/dist/target/dockerArtifacts.js +110 -0
  772. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  773. package/dist/target/dockerArtifactsProvider.js +476 -0
  774. package/dist/target/dockerBaseImage.d.ts +2 -0
  775. package/dist/target/dockerBaseImage.js +11 -0
  776. package/dist/target/dockerCommandExecutor.d.ts +38 -0
  777. package/dist/target/dockerCommandExecutor.js +251 -0
  778. package/dist/target/dockerCommandExecutorCore.d.ts +35 -0
  779. package/dist/target/dockerCommandExecutorCore.js +275 -0
  780. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  781. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  782. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  783. package/dist/target/dockerContextSnapshot.js +158 -0
  784. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  785. package/dist/target/dockerEndpointFingerprint.js +9 -0
  786. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  787. package/dist/target/dockerPreparedArtifact.js +131 -0
  788. package/dist/target/dockerProjectionJson.d.ts +1 -0
  789. package/dist/target/dockerProjectionJson.js +80 -0
  790. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  791. package/dist/target/dockerPublicArtifactSnapshot.js +83 -0
  792. package/dist/target/dockerResources.d.ts +26 -0
  793. package/dist/target/dockerResources.js +162 -0
  794. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  795. package/dist/target/dockerResourcesProvider.js +207 -0
  796. package/dist/target/dockerSecrets.d.ts +39 -0
  797. package/dist/target/dockerSecrets.js +249 -0
  798. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  799. package/dist/target/dockerSecretsAuthority.js +216 -0
  800. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  801. package/dist/target/dockerSecretsLifecycle.js +133 -0
  802. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  803. package/dist/target/dockerSecretsProvider.js +329 -0
  804. package/dist/target/dockerTarget.d.ts +53 -0
  805. package/dist/target/dockerTarget.js +48 -0
  806. package/dist/target/dockerTargetBinding.d.ts +13 -0
  807. package/dist/target/dockerTargetBinding.js +95 -0
  808. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  809. package/dist/target/dockerTargetExecFile.js +194 -0
  810. package/dist/target/dockerWorldClock.d.ts +17 -0
  811. package/dist/target/dockerWorldClock.js +111 -0
  812. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  813. package/dist/target/dockerWorldReadiness.js +119 -0
  814. package/dist/target/dockerWorldService.d.ts +23 -0
  815. package/dist/target/dockerWorldService.js +216 -0
  816. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  817. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  818. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  819. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  820. package/dist/target/dockerWorldServiceProvider.d.ts +64 -0
  821. package/dist/target/dockerWorldServiceProvider.js +330 -0
  822. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  823. package/dist/target/dockerWorldServiceStore.js +367 -0
  824. package/dist/target/evidenceExport.d.ts +57 -0
  825. package/dist/target/evidenceExport.js +527 -0
  826. package/dist/target/evidenceExportArchive.d.ts +10 -0
  827. package/dist/target/evidenceExportArchive.js +302 -0
  828. package/dist/target/evidenceExportContract.d.ts +27 -0
  829. package/dist/target/evidenceExportContract.js +40 -0
  830. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  831. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  832. package/dist/target/evidenceExportProvider.d.ts +87 -0
  833. package/dist/target/evidenceExportProvider.js +197 -0
  834. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  835. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  836. package/dist/target/evidenceExportStore.d.ts +70 -0
  837. package/dist/target/evidenceExportStore.js +498 -0
  838. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  839. package/dist/target/evidenceExportStorePublication.js +395 -0
  840. package/dist/target/handles.d.ts +20 -0
  841. package/dist/target/handles.js +56 -0
  842. package/dist/target/index.d.ts +12 -0
  843. package/dist/target/index.js +11 -0
  844. package/dist/target/journal.d.ts +59 -0
  845. package/dist/target/journal.js +529 -0
  846. package/dist/target/journalFilesystem.d.ts +3 -0
  847. package/dist/target/journalFilesystem.js +111 -0
  848. package/dist/target/journalRoot.d.ts +4 -0
  849. package/dist/target/journalRoot.js +6 -0
  850. package/dist/target/organizationAttachment.d.ts +23 -0
  851. package/dist/target/organizationAttachment.js +263 -0
  852. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  853. package/dist/target/organizationAttachmentAuthority.js +161 -0
  854. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  855. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  856. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  857. package/dist/target/organizationAttachmentProvider.js +289 -0
  858. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  859. package/dist/target/organizationAttachmentStore.js +316 -0
  860. package/dist/target/publicArtifactSnapshot.d.ts +72 -0
  861. package/dist/target/publicArtifactSnapshot.js +184 -0
  862. package/dist/target/topologyActivation.d.ts +51 -0
  863. package/dist/target/topologyActivation.js +149 -0
  864. package/dist/target/topologyAttestation.d.ts +37 -0
  865. package/dist/target/topologyAttestation.js +300 -0
  866. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  867. package/dist/target/topologyAttestationErrors.js +1 -0
  868. package/dist/target/worldClock.d.ts +60 -0
  869. package/dist/target/worldClock.js +129 -0
  870. package/dist/target/worldReadiness.d.ts +103 -0
  871. package/dist/target/worldReadiness.js +153 -0
  872. package/examples/README.md +45 -0
  873. package/examples/agent-with-subagents/AGENTS.md +3 -0
  874. package/examples/agent-with-subagents/Spawnfile +30 -0
  875. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  876. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  877. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  878. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  879. package/examples/daimon-org/Spawnfile +68 -0
  880. package/examples/daimon-org/TEAM.md +4 -0
  881. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  882. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  883. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  884. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  885. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  886. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  887. package/examples/daimon-public-host/AGENTS.md +3 -0
  888. package/examples/daimon-public-host/Spawnfile +21 -0
  889. package/examples/distribution-org/Spawnfile +43 -0
  890. package/examples/distribution-org/TEAM.md +4 -0
  891. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  892. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  893. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  894. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  895. package/examples/jungian-daimon-org/Spawnfile +41 -0
  896. package/examples/jungian-daimon-org/TEAM.md +21 -0
  897. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  898. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  899. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  900. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  901. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  902. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  903. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  904. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  905. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  906. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  907. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  908. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  909. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  910. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  911. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  912. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  913. package/examples/mixed-runtime-org/Spawnfile +71 -0
  914. package/examples/mixed-runtime-org/TEAM.md +8 -0
  915. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  916. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  917. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  918. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  919. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  920. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  921. package/examples/moltnet-team-chat/Spawnfile +43 -0
  922. package/examples/moltnet-team-chat/TEAM.md +5 -0
  923. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  924. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  925. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  926. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  927. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  928. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  929. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  930. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  931. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  932. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  933. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  934. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  935. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  936. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  937. package/examples/single-agent/AGENTS.md +3 -0
  938. package/examples/single-agent/HEARTBEAT.md +3 -0
  939. package/examples/single-agent/IDENTITY.md +3 -0
  940. package/examples/single-agent/MEMORY.md +3 -0
  941. package/examples/single-agent/SOUL.md +3 -0
  942. package/examples/single-agent/Spawnfile +41 -0
  943. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  944. package/moltnet-releases.json +21 -0
  945. package/package.json +57 -14
  946. package/runtimes.yaml +11 -23
  947. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  948. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  949. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  950. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -1,25 +1,60 @@
1
+ import os from "node:os";
1
2
  import path from "node:path";
2
3
  import { randomBytes } from "node:crypto";
3
4
  import { parseEnvFile } from "../auth/index.js";
4
5
  import { fileExists, readUtf8File } from "../filesystem/index.js";
5
6
  import { SpawnfileError } from "../shared/index.js";
6
7
  import { getRuntimeAdapter } from "../runtime/index.js";
8
+ import { CLI_CREDENTIAL_SECRET_NAME, modelAuthMethodNeedsCliCredential } from "./modelEnv.js";
7
9
  const MODEL_AUTH_IMPORT_KINDS = {
8
10
  api_key: null,
9
11
  "claude-code": "claude-code",
10
12
  codex: "codex",
13
+ grok: null,
11
14
  none: null
12
15
  };
16
+ export const resolveHostCliCredential = async (containerReport) => {
17
+ const needsCredential = containerReport.runtime_instances.some((instance) => Object.values(instance.model_auth_methods).some(modelAuthMethodNeedsCliCredential));
18
+ if (!needsCredential) {
19
+ return null;
20
+ }
21
+ const codexHome = process.env.CODEX_HOME || path.join(os.homedir(), ".codex");
22
+ const sourcePath = path.join(codexHome, "auth.json");
23
+ if (!await fileExists(sourcePath)) {
24
+ throw new SpawnfileError("validation_error", `Missing ${CLI_CREDENTIAL_SECRET_NAME}; host CLI credential source does not exist: ${sourcePath}`);
25
+ }
26
+ let value;
27
+ try {
28
+ value = await readUtf8File(sourcePath);
29
+ }
30
+ catch (error) {
31
+ throw new SpawnfileError("validation_error", `Unable to read ${CLI_CREDENTIAL_SECRET_NAME} from host CLI credential source ${sourcePath}: ${error instanceof Error ? error.message : String(error)}`);
32
+ }
33
+ if (value.trim().length === 0) {
34
+ throw new SpawnfileError("validation_error", `Missing ${CLI_CREDENTIAL_SECRET_NAME}; host CLI credential source is empty: ${sourcePath}`);
35
+ }
36
+ try {
37
+ return { name: CLI_CREDENTIAL_SECRET_NAME, sourcePath, value: JSON.stringify(JSON.parse(value)) };
38
+ }
39
+ catch (error) {
40
+ throw new SpawnfileError("validation_error", `Unable to read ${CLI_CREDENTIAL_SECRET_NAME} from host CLI credential source ${sourcePath}: invalid JSON (${error instanceof Error ? error.message : String(error)})`);
41
+ }
42
+ };
13
43
  const addCoveredModelSecrets = (coveredModelSecrets, instanceId, secretNames) => {
14
44
  for (const secretName of secretNames) {
15
45
  coveredModelSecrets.add(`${instanceId}:${secretName}`);
16
46
  }
17
47
  };
18
- export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport, authProfile, env, tempRoot) => {
19
- if (!authProfile) {
20
- return { coveredModelSecrets: new Set(), mountArgs: [] };
21
- }
48
+ export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport, authProfile, env, tempRoot, containerCredentialUid) => {
49
+ // No early return when `authProfile` is null: an adapter's
50
+ // `prepareRuntimeAuth` may still have host-credential staging to do that
51
+ // does not depend on an imported Spawnfile auth profile (e.g. the Pi
52
+ // adapter mounting the host's `~/.grok`/`~/.codex`/antigravity CLI homes
53
+ // for a real-engine org — see `src/runtime/pi/runAuth.ts`). Each adapter is
54
+ // responsible for treating a `null` `authProfile` as "no profile-derived
55
+ // imports available" rather than failing.
22
56
  const coveredModelSecrets = new Set();
57
+ let launchIdentity;
23
58
  const mountArgs = [];
24
59
  for (const instance of containerReport.runtime_instances) {
25
60
  const adapter = getRuntimeAdapter(instance.runtime);
@@ -28,17 +63,28 @@ export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport,
28
63
  }
29
64
  const prepared = await adapter.prepareRuntimeAuth({
30
65
  authProfile,
66
+ ...(containerCredentialUid === undefined ? {} : { containerCredentialUid }),
31
67
  env,
32
68
  instance,
33
69
  outputDirectory,
34
70
  tempRoot
35
71
  });
36
72
  addCoveredModelSecrets(coveredModelSecrets, instance.id, prepared.coveredModelSecrets);
73
+ if (prepared.launchIdentity) {
74
+ if (launchIdentity && launchIdentity.uid !== prepared.launchIdentity.uid) {
75
+ throw new SpawnfileError("validation_error", "Opaque runtime credentials resolve conflicting launch UIDs");
76
+ }
77
+ launchIdentity = prepared.launchIdentity;
78
+ }
37
79
  mountArgs.push(...prepared.mountArgs);
38
80
  }
39
- return { coveredModelSecrets, mountArgs };
81
+ return {
82
+ coveredModelSecrets,
83
+ ...(launchIdentity ? { launchIdentity } : {}),
84
+ mountArgs
85
+ };
40
86
  };
41
- export const assertDeclaredModelAuthSatisfied = (containerReport, authProfile) => {
87
+ export const assertDeclaredModelAuthSatisfied = (containerReport, authProfile, cliCredentialProvided = false) => {
42
88
  const requiredImportKinds = new Set();
43
89
  for (const instance of containerReport.runtime_instances) {
44
90
  for (const method of Object.values(instance.model_auth_methods)) {
@@ -51,9 +97,15 @@ export const assertDeclaredModelAuthSatisfied = (containerReport, authProfile) =
51
97
  if (requiredImportKinds.size === 0) {
52
98
  return;
53
99
  }
54
- if (!authProfile) {
100
+ if (!authProfile && !cliCredentialProvided) {
55
101
  throw new SpawnfileError("validation_error", `Auth profile is required for declared model auth methods: ${[...requiredImportKinds].sort().join(", ")}`);
56
102
  }
103
+ if (cliCredentialProvided) {
104
+ return;
105
+ }
106
+ if (!authProfile) {
107
+ return;
108
+ }
57
109
  const missingImportKinds = [...requiredImportKinds]
58
110
  .filter((kind) => !authProfile.imports[kind])
59
111
  .sort();
@@ -62,10 +114,16 @@ export const assertDeclaredModelAuthSatisfied = (containerReport, authProfile) =
62
114
  }
63
115
  };
64
116
  const getImportMountTargetName = (kind) => kind === "claude-code" ? ".claude" : ".codex";
65
- const createGeneratedRuntimeSecret = (secretName) => {
117
+ const createGeneratedRuntimeSecret = (secretName, generatedMoltnetSecrets) => {
66
118
  if (secretName === "OPENCLAW_GATEWAY_TOKEN" || secretName === "OPENCLAW_HOOKS_TOKEN") {
67
119
  return randomBytes(24).toString("hex");
68
120
  }
121
+ if (generatedMoltnetSecrets.has(secretName)) {
122
+ return randomBytes(32).toString("base64url");
123
+ }
124
+ if (secretName === "SPAWNFILE_DAIMON_CONTROL_TOKEN") {
125
+ return randomBytes(32).toString("base64url");
126
+ }
69
127
  return null;
70
128
  };
71
129
  const hasEnvValue = (env, name) => typeof env[name] === "string" && env[name].length > 0;
@@ -93,17 +151,23 @@ export const resolveRunEnvironment = (containerReport, authProfile, envFileEnv =
93
151
  ...(authProfile?.env ?? {}),
94
152
  ...envFileEnv
95
153
  };
154
+ const generatedMoltnetSecrets = new Set((containerReport.moltnet?.server_plans ?? [])
155
+ .filter((server) => server.mode === "managed" && server.auth_mode === "bearer")
156
+ .flatMap((server) => (server.auth_tokens ?? []).map((token) => token.secret)));
96
157
  for (const name of new Set([...Object.keys(env), ...containerReport.secrets_required])) {
97
158
  const processValue = process.env[name];
98
159
  if (typeof processValue === "string" && processValue.length > 0) {
99
160
  env[name] = processValue;
100
161
  }
101
162
  }
102
- for (const name of containerReport.runtime_secrets_required) {
163
+ for (const name of new Set([
164
+ ...containerReport.runtime_secrets_required,
165
+ ...generatedMoltnetSecrets
166
+ ])) {
103
167
  if (hasEnvValue(env, name)) {
104
168
  continue;
105
169
  }
106
- const generatedValue = createGeneratedRuntimeSecret(name);
170
+ const generatedValue = createGeneratedRuntimeSecret(name, generatedMoltnetSecrets);
107
171
  if (generatedValue) {
108
172
  env[name] = generatedValue;
109
173
  }
@@ -121,6 +185,27 @@ export const assertRunEnvironmentSatisfied = (containerReport, env, coveredModel
121
185
  throw new SpawnfileError("validation_error", `Missing required runtime env: ${missing.sort().join(", ")}`);
122
186
  }
123
187
  };
188
+ export const assertMoltnetCredentialValuesDistinct = (containerReport, env) => {
189
+ for (const server of containerReport.moltnet?.server_plans ?? []) {
190
+ if (server.mode !== "managed" || server.auth_mode !== "bearer") {
191
+ continue;
192
+ }
193
+ const secretNames = (server.auth_tokens ?? []).map((token) => token.secret);
194
+ const normalizedValues = secretNames.map((name) => {
195
+ const value = env[name];
196
+ if (typeof value !== "string" || value.trim().length === 0) {
197
+ return null;
198
+ }
199
+ if (value !== value.trim()) {
200
+ throw new SpawnfileError("validation_error", `Moltnet credential ${name} must not contain leading or trailing whitespace`);
201
+ }
202
+ return value;
203
+ }).filter((value) => value !== null);
204
+ if (new Set(normalizedValues).size !== normalizedValues.length) {
205
+ throw new SpawnfileError("validation_error", `Moltnet network ${server.network_id} requires distinct credential values`);
206
+ }
207
+ }
208
+ };
124
209
  export const renderDockerEnvFile = (env) => `${Object.entries(env)
125
210
  .sort(([left], [right]) => left.localeCompare(right))
126
211
  .map(([name, value]) => `${name}=${value}`)
@@ -142,6 +227,15 @@ export const resolveAuthMountArgs = async (containerReport, authProfile) => {
142
227
  return [];
143
228
  }
144
229
  const args = [];
230
+ // Pi owns its model and CLI-engine auth projection in preparePiRuntimeAuth.
231
+ // Mounting the generic imported home onto the same destination would create
232
+ // duplicate Docker mount points and bypass the adapter's minimal-file staging.
233
+ const piRuntimeHomes = new Set(containerReport.runtime_instances
234
+ .filter((instance) => instance.runtime === "pi")
235
+ .map((instance) => instance.home_path)
236
+ .filter((homePath) => homePath !== null));
237
+ const genericRuntimeHomes = containerReport.runtime_homes
238
+ .filter((runtimeHome) => !piRuntimeHomes.has(runtimeHome));
145
239
  for (const [kind, entry] of Object.entries(authProfile.imports)) {
146
240
  if (!entry) {
147
241
  continue;
@@ -149,7 +243,7 @@ export const resolveAuthMountArgs = async (containerReport, authProfile) => {
149
243
  if (!(await fileExists(entry.path))) {
150
244
  throw new SpawnfileError("validation_error", `Imported auth path for ${kind} does not exist: ${entry.path}`);
151
245
  }
152
- for (const runtimeHome of containerReport.runtime_homes) {
246
+ for (const runtimeHome of genericRuntimeHomes) {
153
247
  args.push("-v", `${entry.path}:${path.posix.join(runtimeHome, getImportMountTargetName(kind))}`);
154
248
  }
155
249
  }
@@ -0,0 +1,3 @@
1
+ import type { CompileProjectResult } from "./compileProject.js";
2
+ export { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../shared/index.js";
3
+ export declare const resolveDaimonCodexNativeSandboxDockerSecurityOptions: (compileResult: CompileProjectResult) => Promise<string[]>;
@@ -0,0 +1,36 @@
1
+ import path from "node:path";
2
+ import { readUtf8File } from "../filesystem/index.js";
3
+ import { daimonEngineDockerSecurityArgsForConfigs, materializeDaimonGrokSeccompProfile, SpawnfileError } from "../shared/index.js";
4
+ export { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../shared/index.js";
5
+ const assertContainedPath = (root, candidate) => {
6
+ const normalizedRoot = path.resolve(root);
7
+ const normalizedCandidate = path.resolve(candidate);
8
+ const relative = path.relative(normalizedRoot, normalizedCandidate);
9
+ if (relative === "" || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
10
+ throw new SpawnfileError("validation_error", "Daimon generated config path escapes the compiled container rootfs");
11
+ }
12
+ return normalizedCandidate;
13
+ };
14
+ const configPathInOutput = (outputDirectory, instance) => {
15
+ if (!instance.config_path.startsWith("/")) {
16
+ throw new SpawnfileError("validation_error", "Daimon runtime instance has a non-absolute generated config path");
17
+ }
18
+ const rootfs = path.join(outputDirectory, "container", "rootfs");
19
+ return assertContainedPath(rootfs, path.join(rootfs, `.${instance.config_path}`));
20
+ };
21
+ export const resolveDaimonCodexNativeSandboxDockerSecurityOptions = async (compileResult) => {
22
+ const instances = compileResult.report.container?.runtime_instances
23
+ .filter((instance) => instance.runtime === "daimon") ?? [];
24
+ const sources = [];
25
+ for (const instance of instances) {
26
+ try {
27
+ sources.push(await readUtf8File(configPathInOutput(compileResult.outputDirectory, instance)));
28
+ }
29
+ catch (error) {
30
+ if (error instanceof SpawnfileError)
31
+ throw error;
32
+ throw new SpawnfileError("validation_error", "Could not read Daimon's generated organization config before Docker launch");
33
+ }
34
+ }
35
+ return daimonEngineDockerSecurityArgsForConfigs(sources, () => materializeDaimonGrokSeccompProfile(path.join(compileResult.outputDirectory, "container", "security")));
36
+ };
@@ -5,15 +5,26 @@ export interface DockerRunInvocation {
5
5
  cwd: string;
6
6
  detach: boolean;
7
7
  deploymentName?: string | null;
8
+ deploymentLabels?: Readonly<Record<string, string>>;
8
9
  dockerContext?: string | null;
9
10
  dockerHost?: string | null;
10
11
  envFilePath: string;
12
+ /** Host-stable credential realms that must have at most one live deployment. */
13
+ exclusiveReattachVolumes?: readonly string[];
11
14
  imageTag: string;
15
+ onDetachedStarted?: (result: DockerRunResult) => Promise<void>;
16
+ /** Ephemeral guard; never serialized into reports, records, or labels. */
17
+ opaqueDaimonCredentials?: boolean;
12
18
  supportDirectory: string;
13
19
  }
14
20
  export interface DockerRunResult {
15
21
  containerId?: string;
22
+ containerName?: string;
23
+ deploymentLabels?: Readonly<Record<string, string>>;
16
24
  imageId?: string;
17
25
  }
18
26
  export type DockerRunRunner = (invocation: DockerRunInvocation) => Promise<DockerRunResult | void>;
27
+ export declare const createDetachedContainerInspectArgs: (invocation: DockerRunInvocation, containerId: string) => string[];
28
+ export declare const parseDetachedContainerInspect: (stdout: string, expectedContainerId: string, expectedLabels?: Readonly<Record<string, string>>, expectedContainerName?: string | null) => DockerRunResult;
29
+ export declare const inspectDetachedContainer: (invocation: DockerRunInvocation, containerId: string) => Promise<DockerRunResult>;
19
30
  export declare const runDockerContainer: DockerRunRunner;
@@ -2,6 +2,8 @@ import { execFile as execFileCallback, spawn } from "node:child_process";
2
2
  import path from "node:path";
3
3
  import { promisify } from "node:util";
4
4
  import { SpawnfileError } from "../shared/index.js";
5
+ import { assertOpaqueDaimonCredentialsHaveNoUserNamespace, pinOpaqueDaimonDockerEndpoint } from "./runProjectDockerDaimonGuards.js";
6
+ import { withExclusiveVolumeReservations } from "./runProjectDockerReservation.js";
5
7
  const execFile = promisify(execFileCallback);
6
8
  const parseDockerContextHost = (stdout) => {
7
9
  const trimmed = stdout.trim();
@@ -132,25 +134,49 @@ const prepareRemoteBindMounts = async (invocation) => {
132
134
  }
133
135
  };
134
136
  };
135
- const inspectImageArgs = (invocation, containerId) => {
137
+ export const createDetachedContainerInspectArgs = (invocation, containerId) => {
136
138
  const base = invocation.dockerContext
137
139
  ? ["--context", invocation.dockerContext, "inspect"]
138
140
  : invocation.dockerHost
139
141
  ? ["--host", invocation.dockerHost, "inspect"]
140
142
  : ["inspect"];
141
- return [...base, "--format", "{{.Image}}", containerId];
143
+ return [...base, "--format", "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}", containerId];
142
144
  };
143
- const inspectDetachedImageId = async (invocation, containerId) => {
145
+ export const parseDetachedContainerInspect = (stdout, expectedContainerId, expectedLabels, expectedContainerName) => {
146
+ const [idRaw, nameRaw, imageRaw, labelsRaw, ...extra] = stdout.trim().split("\n");
147
+ if (!idRaw || !nameRaw || !imageRaw || !labelsRaw || extra.length > 0)
148
+ throw new Error("unexpected inspect response");
149
+ const actualId = JSON.parse(idRaw);
150
+ const actualName = JSON.parse(nameRaw);
151
+ const imageId = JSON.parse(imageRaw);
152
+ const labels = JSON.parse(labelsRaw);
153
+ if (typeof actualId !== "string" || actualId !== expectedContainerId || !/^[a-f0-9]{64}$/u.test(actualId)
154
+ || typeof actualName !== "string" || actualName !== `/${expectedContainerName ?? ""}`
155
+ || typeof imageId !== "string" || !/^sha256:[a-f0-9]{64}$/u.test(imageId))
156
+ throw new Error("malformed detached container metadata");
157
+ if (!expectedLabels)
158
+ return { containerId: actualId, containerName: actualName.slice(1), imageId };
159
+ if (!labels || typeof labels !== "object" || Array.isArray(labels))
160
+ throw new Error("missing detached deployment labels");
161
+ const actual = Object.fromEntries(Object.keys(expectedLabels).sort().map((key) => {
162
+ const value = labels[key];
163
+ if (typeof value !== "string" || value !== expectedLabels[key])
164
+ throw new Error("detached deployment label drift");
165
+ return [key, value];
166
+ }));
167
+ return { containerId: actualId, containerName: actualName.slice(1), imageId, deploymentLabels: actual };
168
+ };
169
+ export const inspectDetachedContainer = async (invocation, containerId) => {
144
170
  try {
145
- const { stdout } = await execFile(invocation.command, inspectImageArgs(invocation, containerId), {
171
+ const { stdout } = await execFile(invocation.command, createDetachedContainerInspectArgs(invocation, containerId), {
146
172
  cwd: invocation.cwd,
147
173
  timeout: 10_000
148
174
  });
149
- return stdout.trim() || undefined;
175
+ return parseDetachedContainerInspect(stdout, containerId, invocation.deploymentLabels, invocation.containerName);
150
176
  }
151
177
  catch (error) {
152
178
  const message = error instanceof Error ? error.message : String(error);
153
- throw new SpawnfileError("runtime_error", `Unable to inspect detached container ${containerId} image id: ${message}`);
179
+ throw new SpawnfileError("runtime_error", `Unable to inspect detached container ${containerId}: ${message}`);
154
180
  }
155
181
  };
156
182
  const runPreparedDockerContainer = (prepared) => new Promise((resolve, reject) => {
@@ -181,8 +207,12 @@ const runPreparedDockerContainer = (prepared) => new Promise((resolve, reject) =
181
207
  settle(() => resolve(undefined));
182
208
  return;
183
209
  }
184
- inspectDetachedImageId(prepared.invocation, containerId)
185
- .then((imageId) => resolve({ containerId, ...(imageId ? { imageId } : {}) }))
210
+ Promise.resolve(inspectDetachedContainer(prepared.invocation, containerId))
211
+ .then(async (result) => {
212
+ await prepared.invocation.onDetachedStarted?.(result);
213
+ return result;
214
+ })
215
+ .then(resolve)
186
216
  .catch(reject);
187
217
  return;
188
218
  }
@@ -191,12 +221,30 @@ const runPreparedDockerContainer = (prepared) => new Promise((resolve, reject) =
191
221
  : `Docker run for ${prepared.invocation.imageTag} failed with exit code ${code ?? "unknown"}`));
192
222
  });
193
223
  });
194
- export const runDockerContainer = (invocation) => {
195
- if (!invocation.dockerContext || collectBindMountSources(invocation.args).length === 0) {
196
- return runPreparedDockerContainer({
197
- cleanup: async () => undefined,
198
- invocation
199
- });
200
- }
201
- return prepareRemoteBindMounts(invocation).then(runPreparedDockerContainer);
224
+ const runDockerContainerPrepared = async (invocation) => {
225
+ const run = async () => {
226
+ if (!invocation.dockerContext || collectBindMountSources(invocation.args).length === 0) {
227
+ if (invocation.opaqueDaimonCredentials && !invocation.dockerEndpointPinned) {
228
+ await assertOpaqueDaimonCredentialsHaveNoUserNamespace(invocation);
229
+ return await runPreparedDockerContainer({
230
+ cleanup: async () => undefined,
231
+ invocation
232
+ });
233
+ }
234
+ return await runPreparedDockerContainer({
235
+ cleanup: async () => undefined,
236
+ invocation
237
+ });
238
+ }
239
+ return await runPreparedDockerContainer(await prepareRemoteBindMounts(invocation));
240
+ };
241
+ return withExclusiveVolumeReservations(invocation, run);
202
242
  };
243
+ export const runDockerContainer = (invocation) => invocation.opaqueDaimonCredentials
244
+ ? pinOpaqueDaimonDockerEndpoint(invocation)
245
+ .then(async (pinned) => {
246
+ await assertOpaqueDaimonCredentialsHaveNoUserNamespace(pinned);
247
+ return pinned;
248
+ })
249
+ .then((pinned) => runDockerContainerPrepared({ ...pinned, dockerEndpointPinned: true }))
250
+ : runDockerContainerPrepared(invocation);
@@ -0,0 +1,15 @@
1
+ export interface DaimonDockerGuardInvocation {
2
+ args: string[];
3
+ command: string;
4
+ cwd: string;
5
+ dockerContext?: string | null;
6
+ dockerHost?: string | null;
7
+ opaqueDaimonCredentials?: boolean;
8
+ }
9
+ /**
10
+ * Resolves a possibly mutable Docker context once, validates that endpoint,
11
+ * then makes every remaining Docker operation use the immutable endpoint.
12
+ */
13
+ export declare const pinOpaqueDaimonDockerEndpoint: <T extends DaimonDockerGuardInvocation>(invocation: T) => Promise<T>;
14
+ export declare const assertOpaqueDaimonCredentialsUseLocalDaemon: (invocation: DaimonDockerGuardInvocation) => Promise<void>;
15
+ export declare const assertOpaqueDaimonCredentialsHaveNoUserNamespace: (invocation: DaimonDockerGuardInvocation) => Promise<void>;
@@ -0,0 +1,122 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { SpawnfileError } from "../shared/index.js";
4
+ const execFile = promisify(execFileCallback);
5
+ const parseDockerContextHost = (stdout) => {
6
+ const trimmed = stdout.trim();
7
+ if (!trimmed)
8
+ return null;
9
+ try {
10
+ const parsed = JSON.parse(trimmed);
11
+ return typeof parsed === "string" ? parsed : null;
12
+ }
13
+ catch {
14
+ return trimmed;
15
+ }
16
+ };
17
+ const resolveDockerContextHost = async (invocation, context) => {
18
+ const { stdout } = await execFile(invocation.command, [
19
+ "context", "inspect", context, "--format", "{{json .Endpoints.docker.Host}}"
20
+ ], { cwd: invocation.cwd, timeout: 10_000 });
21
+ return parseDockerContextHost(stdout);
22
+ };
23
+ const resolveActiveDockerContext = async (invocation) => {
24
+ const { stdout } = await execFile(invocation.command, ["context", "show"], {
25
+ cwd: invocation.cwd,
26
+ timeout: 10_000
27
+ });
28
+ const context = stdout.trim();
29
+ if (!context || /\s/u.test(context)) {
30
+ throw new SpawnfileError("validation_error", "Unable to attest the active Docker context for opaque Daimon credentials");
31
+ }
32
+ return context;
33
+ };
34
+ const resolveDockerDaemonEndpoint = async (invocation) => {
35
+ if (invocation.dockerContext)
36
+ return resolveDockerContextHost(invocation, invocation.dockerContext);
37
+ if (invocation.dockerHost)
38
+ return invocation.dockerHost;
39
+ const ambientContext = process.env.DOCKER_CONTEXT?.trim();
40
+ if (ambientContext)
41
+ return resolveDockerContextHost(invocation, ambientContext);
42
+ const ambientHost = process.env.DOCKER_HOST?.trim();
43
+ if (ambientHost)
44
+ return ambientHost;
45
+ return resolveDockerContextHost(invocation, await resolveActiveDockerContext(invocation));
46
+ };
47
+ const isLocalDockerEndpoint = (host) => {
48
+ if (host.startsWith("/"))
49
+ return true;
50
+ if (host.startsWith("unix://")) {
51
+ try {
52
+ const endpoint = new URL(host);
53
+ return endpoint.host === "" && endpoint.pathname.startsWith("/");
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ return host.startsWith("npipe:////./pipe/") || host.startsWith("npipe://./pipe/");
60
+ };
61
+ const explicitLocalEndpoint = (endpoint) => endpoint.startsWith("/") ? `unix://${endpoint}` : endpoint;
62
+ const withPinnedDockerEndpoint = (invocation, endpoint) => {
63
+ const run = invocation.args.indexOf("run");
64
+ if (run < 0) {
65
+ throw new SpawnfileError("validation_error", "Unable to pin Docker daemon endpoint for opaque Daimon credentials");
66
+ }
67
+ return {
68
+ ...invocation,
69
+ args: ["--host", endpoint, ...invocation.args.slice(run)],
70
+ dockerContext: null,
71
+ dockerHost: endpoint
72
+ };
73
+ };
74
+ /**
75
+ * Resolves a possibly mutable Docker context once, validates that endpoint,
76
+ * then makes every remaining Docker operation use the immutable endpoint.
77
+ */
78
+ export const pinOpaqueDaimonDockerEndpoint = async (invocation) => {
79
+ if (!invocation.opaqueDaimonCredentials)
80
+ return invocation;
81
+ let resolved;
82
+ try {
83
+ resolved = await resolveDockerDaemonEndpoint(invocation);
84
+ }
85
+ catch (error) {
86
+ if (error instanceof SpawnfileError)
87
+ throw error;
88
+ throw new SpawnfileError("validation_error", "Unable to attest the Docker daemon locality for opaque Daimon credentials");
89
+ }
90
+ if (!resolved || !isLocalDockerEndpoint(resolved)) {
91
+ throw new SpawnfileError("validation_error", "Opaque Daimon credentials require a local Docker daemon; remote and SSH daemons are unsupported");
92
+ }
93
+ return withPinnedDockerEndpoint(invocation, explicitLocalEndpoint(resolved));
94
+ };
95
+ export const assertOpaqueDaimonCredentialsUseLocalDaemon = async (invocation) => {
96
+ await pinOpaqueDaimonDockerEndpoint(invocation);
97
+ };
98
+ export const assertOpaqueDaimonCredentialsHaveNoUserNamespace = async (invocation) => {
99
+ if (!invocation.opaqueDaimonCredentials)
100
+ return;
101
+ if (invocation.dockerContext || !invocation.dockerHost) {
102
+ throw new SpawnfileError("validation_error", "Opaque Daimon credentials require a pinned Docker daemon endpoint before Docker info");
103
+ }
104
+ const args = [
105
+ "--host", invocation.dockerHost,
106
+ "info", "--format", "{{json .SecurityOptions}}"
107
+ ];
108
+ let securityOptions;
109
+ try {
110
+ const { stdout } = await execFile(invocation.command, args, {
111
+ cwd: invocation.cwd,
112
+ timeout: 10_000
113
+ });
114
+ securityOptions = JSON.parse(stdout.trim());
115
+ }
116
+ catch {
117
+ throw new SpawnfileError("validation_error", "Unable to verify that the Docker daemon has no user namespace remapping for opaque Daimon credentials");
118
+ }
119
+ if (!Array.isArray(securityOptions) || securityOptions.some((value) => typeof value !== "string" || /userns|rootless/iu.test(value))) {
120
+ throw new SpawnfileError("validation_error", "Opaque Daimon credentials require a Docker daemon without user namespace remapping");
121
+ }
122
+ };
@@ -0,0 +1,3 @@
1
+ import type { DockerRunInvocation, DockerRunResult } from "./runProjectDocker.js";
2
+ /** Holds daemon-side atomic volume reservations through verified startup. */
3
+ export declare const withExclusiveVolumeReservations: (invocation: DockerRunInvocation, operation: () => Promise<DockerRunResult | void>) => Promise<DockerRunResult | void>;
@@ -0,0 +1,118 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { execFile as execFileCallback } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+ import { SpawnfileError } from "../shared/index.js";
5
+ const execFile = promisify(execFileCallback);
6
+ const dockerId = /^[a-f0-9]{64}$/u;
7
+ const versionLabel = "com.spawnfile.exclusive-volume-reservation";
8
+ const ownerLabel = "com.spawnfile.exclusive-volume-owner";
9
+ const volumeLabel = "com.spawnfile.exclusive-volume-digest";
10
+ const endpointArgs = (invocation) => invocation.dockerContext
11
+ ? ["--context", invocation.dockerContext]
12
+ : invocation.dockerHost ? ["--host", invocation.dockerHost] : [];
13
+ const execute = async (invocation, args) => {
14
+ const { stdout } = await execFile(invocation.command, [...endpointArgs(invocation), ...args], {
15
+ cwd: invocation.cwd,
16
+ timeout: 10_000
17
+ });
18
+ return stdout;
19
+ };
20
+ const reservationName = (digest) => `spawnfile-volume-reservation-${digest.slice("sha256:".length, "sha256:".length + 24)}`;
21
+ const verifyReservation = async (invocation, reservation) => {
22
+ try {
23
+ const [idRaw, labelsRaw, ...extra] = (await execute(invocation, [
24
+ "container", "inspect", "--format", "{{json .Id}}\n{{json .Config.Labels}}", reservation.id
25
+ ])).trim().split("\n");
26
+ if (!idRaw || !labelsRaw || extra.length > 0)
27
+ throw new Error("shape");
28
+ const id = JSON.parse(idRaw);
29
+ const labels = JSON.parse(labelsRaw);
30
+ if (id !== reservation.id || !labels || typeof labels !== "object" || Array.isArray(labels))
31
+ throw new Error("identity");
32
+ const values = labels;
33
+ if (values[versionLabel] !== "v1" || values[ownerLabel] !== reservation.owner
34
+ || values[volumeLabel] !== reservation.volumeDigest)
35
+ throw new Error("authority");
36
+ }
37
+ catch {
38
+ throw new SpawnfileError("runtime_error", "Exclusive persistent mount reservation identity is unavailable");
39
+ }
40
+ };
41
+ const release = async (invocation, reservations) => {
42
+ let failed = false;
43
+ for (const reservation of [...reservations].reverse()) {
44
+ try {
45
+ await verifyReservation(invocation, reservation);
46
+ await execute(invocation, ["container", "rm", reservation.id]);
47
+ }
48
+ catch {
49
+ failed = true;
50
+ }
51
+ }
52
+ if (failed)
53
+ throw new SpawnfileError("runtime_error", "Unable to release exclusive persistent mount reservation");
54
+ };
55
+ const assertAvailable = async (invocation) => {
56
+ for (const volume of invocation.exclusiveReattachVolumes ?? []) {
57
+ let stdout;
58
+ try {
59
+ stdout = await execute(invocation, [
60
+ "ps", "--filter", `volume=${volume}`, "--format", "{{.Names}}"
61
+ ]);
62
+ }
63
+ catch {
64
+ throw new SpawnfileError("runtime_error", "Unable to verify exclusive persistent mount occupancy");
65
+ }
66
+ const occupants = stdout.split("\n").map((name) => name.trim()).filter(Boolean);
67
+ if (occupants.some((name) => name !== invocation.containerName)) {
68
+ throw new SpawnfileError("runtime_error", "Exclusive persistent mount is attached to another running deployment; stop it before reattaching this lineage");
69
+ }
70
+ }
71
+ };
72
+ const acquire = async (invocation) => {
73
+ const reservations = [];
74
+ const volumes = [...new Set(invocation.exclusiveReattachVolumes ?? [])].sort();
75
+ try {
76
+ for (const volume of volumes) {
77
+ const volumeDigest = `sha256:${createHash("sha256").update(volume).digest("hex")}`;
78
+ const owner = randomUUID();
79
+ let id;
80
+ try {
81
+ id = (await execute(invocation, [
82
+ "container", "create", "--name", reservationName(volumeDigest),
83
+ "--label", `${versionLabel}=v1`,
84
+ "--label", `${ownerLabel}=${owner}`,
85
+ "--label", `${volumeLabel}=${volumeDigest}`,
86
+ invocation.imageTag
87
+ ])).trim();
88
+ }
89
+ catch {
90
+ throw new SpawnfileError("runtime_error", "Exclusive persistent mount reservation is already held");
91
+ }
92
+ if (!dockerId.test(id))
93
+ throw new SpawnfileError("runtime_error", "Exclusive persistent mount reservation returned invalid identity");
94
+ const reservation = { id, owner, volumeDigest };
95
+ reservations.push(reservation);
96
+ await verifyReservation(invocation, reservation);
97
+ }
98
+ await assertAvailable(invocation);
99
+ return reservations;
100
+ }
101
+ catch (error) {
102
+ if (reservations.length > 0)
103
+ await release(invocation, reservations);
104
+ throw error;
105
+ }
106
+ };
107
+ /** Holds daemon-side atomic volume reservations through verified startup. */
108
+ export const withExclusiveVolumeReservations = async (invocation, operation) => {
109
+ if ((invocation.exclusiveReattachVolumes?.length ?? 0) === 0)
110
+ return operation();
111
+ const reservations = await acquire(invocation);
112
+ try {
113
+ return await operation();
114
+ }
115
+ finally {
116
+ await release(invocation, reservations);
117
+ }
118
+ };