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
@@ -0,0 +1,319 @@
1
+ import { constants } from "node:fs";
2
+ import { chmod, copyFile, link, mkdir, open, readFile, readdir, rename, rm, stat } from "node:fs/promises";
3
+ import { createHash } from "node:crypto";
4
+ import { execFile as execFileCallback } from "node:child_process";
5
+ import { promisify } from "node:util";
6
+ import path from "node:path";
7
+ import { z } from "zod";
8
+ import { SpawnfileError } from "../shared/index.js";
9
+ const digest = z.string().regex(/^sha256:[a-f0-9]{64}$/u);
10
+ const relative = z.string().min(1).max(255).refine((value) => !path.isAbsolute(value) && !value.split(/[\\/]/u).includes(".."));
11
+ const proofSchema = z.object({ version: z.literal("spawnfile.product-state-quiescence.v1"), state: z.literal("quiesced"), source_run_id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u), files: z.array(z.object({ path: relative, sha256: digest }).strict()).min(1).max(4096) }).strict();
12
+ const forbidden = /(?:^|[._/-])(?:auth|credential|token|secret|session|wake)(?:[._/-]|$)|\.(?:db|sqlite|sqlite3)(?:-|$)/iu;
13
+ const execFile = promisify(execFileCallback);
14
+ const authoritySchema = z.object({ version: z.literal("spawnfile.product-state-source-authority.v1"), source_run_id: z.string(), container_id: z.string().regex(/^[a-f0-9]{64}$/u), image_id: z.string().regex(/^sha256:[a-f0-9]{64}$/u), started_at: z.string().min(1), was_paused: z.boolean(), source: z.string().min(1), mount_path: z.string().min(1), volume_name: z.string().min(1), candidate_volume_name: z.string().min(1), candidate_resource_identity: digest }).strict();
15
+ const defaultDockerExec = async (command, args) => await execFile(command, args, { encoding: "utf8", maxBuffer: 1_048_576, timeout: 10_000 });
16
+ const inspectContainer = async (docker, command, container) => { const value = JSON.parse((await docker(command, ["inspect", container])).stdout); if (!Array.isArray(value) || value.length !== 1 || typeof value[0] !== "object")
17
+ throw new SpawnfileError("validation_error", "Managed source container inspection failed"); return value[0]; };
18
+ const restoreRunningState = async (docker, command, authority) => {
19
+ await docker(command, ["unpause", authority.container_id]);
20
+ const restored = await inspectContainer(docker, command, authority.container_id);
21
+ if (restored.Id !== authority.container_id || restored.Image !== authority.image_id || restored.State?.StartedAt !== authority.started_at || restored.State?.Running !== true || restored.State?.Paused !== false)
22
+ throw new SpawnfileError("validation_error", "Managed source state restoration could not be proven");
23
+ };
24
+ export const issueProductStateSourceAuthority = async (input, docker = defaultDockerExec) => {
25
+ const inspected = await inspectContainer(docker, input.dockerCommand, input.container), labels = inspected.Config?.Labels, state = inspected.State;
26
+ const mounts = Array.isArray(inspected.Mounts) ? inspected.Mounts.filter((mount) => mount.Type === "volume" && mount.Destination === input.mountPath && mount.RW === true) : [];
27
+ if (inspected.Id?.length !== 64 || !/^sha256:[a-f0-9]{64}$/u.test(inspected.Image) || labels?.["com.spawnfile.run_id"] !== input.sourceRunId || state?.Running !== true || typeof state.StartedAt !== "string" || mounts.length !== 1 || typeof mounts[0].Source !== "string" || typeof mounts[0].Name !== "string")
28
+ throw new SpawnfileError("validation_error", "Source run does not own one exact managed writable state root");
29
+ const volume = JSON.parse((await docker(input.dockerCommand, ["volume", "inspect", input.candidateVolumeName])).stdout);
30
+ if (!Array.isArray(volume) || volume.length !== 1 || typeof volume[0]?.Mountpoint !== "string")
31
+ throw new SpawnfileError("validation_error", "Candidate volume is unavailable");
32
+ return authoritySchema.parse({ version: "spawnfile.product-state-source-authority.v1", source_run_id: input.sourceRunId, container_id: inspected.Id, image_id: inspected.Image, started_at: state.StartedAt, was_paused: state.Paused === true, source: mounts[0].Source, mount_path: input.mountPath, volume_name: mounts[0].Name, candidate_volume_name: input.candidateVolumeName, candidate_resource_identity: input.candidateResourceIdentity });
33
+ };
34
+ const hashFile = async (file) => {
35
+ const handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
36
+ try {
37
+ const info = await handle.stat();
38
+ if (!info.isFile() || info.size > 67_108_864)
39
+ throw new SpawnfileError("validation_error", "Product state file is unsafe or oversized");
40
+ return `sha256:${createHash("sha256").update(await handle.readFile()).digest("hex")}`;
41
+ }
42
+ finally {
43
+ await handle.close();
44
+ }
45
+ };
46
+ const syncDirectory = async (directory) => { const handle = await open(directory, constants.O_RDONLY); try {
47
+ await handle.sync();
48
+ }
49
+ finally {
50
+ await handle.close();
51
+ } };
52
+ const syncTreeDirectories = async (directory) => { for (const entry of await readdir(directory, { withFileTypes: true }))
53
+ if (entry.isDirectory())
54
+ await syncTreeDirectories(path.join(directory, entry.name)); await syncDirectory(directory); };
55
+ const wholeSourceManifest = async (root) => {
56
+ const result = new Map();
57
+ const visit = async (directory, prefix) => {
58
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
59
+ const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
60
+ if ([".spawnfile-product-state-write-fence", ".spawnfile-product-state-preseed-journal", ".spawnfile-resource-identity"].includes(relativePath))
61
+ continue;
62
+ const absolutePath = path.join(directory, entry.name);
63
+ if (entry.isDirectory()) {
64
+ await visit(absolutePath, relativePath);
65
+ continue;
66
+ }
67
+ if (!entry.isFile() || result.size >= 4096)
68
+ throw new SpawnfileError("validation_error", "Product-state source contains an unsafe or excessive entry");
69
+ result.set(relativePath, await hashFile(absolutePath));
70
+ }
71
+ };
72
+ await visit(root, "");
73
+ return result;
74
+ };
75
+ const verifyWholeSourceManifest = async (root, proof) => {
76
+ const actual = await wholeSourceManifest(root), expected = new Map(proof.files.map((entry) => [entry.path, entry.sha256]));
77
+ if (actual.size !== expected.size || [...actual].some(([name, checksum]) => expected.get(name) !== checksum))
78
+ throw new SpawnfileError("validation_error", "Whole product-state source manifest drifted or is incomplete");
79
+ };
80
+ export const createProductStateProof = async (source, sourceRunId) => {
81
+ const manifest = await wholeSourceManifest(source);
82
+ const files = [...manifest].sort(([left], [right]) => left.localeCompare(right)).map(([filePath, sha256]) => { if (forbidden.test(filePath))
83
+ throw new SpawnfileError("validation_error", "Product-state source includes prohibited state"); return { path: filePath, sha256 }; });
84
+ return proofSchema.parse({ version: "spawnfile.product-state-quiescence.v1", state: "quiesced", source_run_id: sourceRunId, files });
85
+ };
86
+ export const issueProductStateSourceSnapshot = async (input, docker = defaultDockerExec) => {
87
+ const authority = authoritySchema.parse(await issueProductStateSourceAuthority(input, docker));
88
+ let pausedByUs = false;
89
+ try {
90
+ if (!authority.was_paused) {
91
+ await docker(input.dockerCommand, ["pause", authority.container_id]);
92
+ pausedByUs = true;
93
+ }
94
+ const frozen = await inspectContainer(docker, input.dockerCommand, authority.container_id);
95
+ if (frozen.Id !== authority.container_id || frozen.Image !== authority.image_id || frozen.State?.StartedAt !== authority.started_at || frozen.State?.Paused !== true)
96
+ throw new SpawnfileError("validation_error", "Source changed before authoritative snapshot");
97
+ return { authority, proof: await createProductStateProof(authority.source, authority.source_run_id) };
98
+ }
99
+ finally {
100
+ if (pausedByUs)
101
+ await restoreRunningState(docker, input.dockerCommand, authority);
102
+ }
103
+ };
104
+ export const cloneQuiescedProductState = async (input) => {
105
+ const proof = proofSchema.parse(input.proof);
106
+ if (proof.source_run_id === input.candidateRunId)
107
+ throw new SpawnfileError("validation_error", "Candidate state namespace must differ from source");
108
+ const destinationExists = await stat(input.destination).then((info) => { if (!info.isDirectory())
109
+ throw new SpawnfileError("validation_error", "Candidate state destination is not a directory"); return true; }, (error) => error.code === "ENOENT" ? false : Promise.reject(error));
110
+ const journalPath = path.join(input.destination, ".spawnfile-product-state-preseed-journal");
111
+ if (destinationExists && await stat(journalPath).then(() => true, () => false)) {
112
+ const journal = z.object({ version: z.literal("spawnfile.product-state-preseed-journal.v1"), candidate_run_id: z.string(), entries: z.array(relative), staging: relative }).strict().parse(JSON.parse(await readFile(journalPath, "utf8")));
113
+ if (journal.candidate_run_id !== input.candidateRunId)
114
+ throw new SpawnfileError("validation_error", "Candidate preseed journal belongs to another run");
115
+ const identityPath = path.join(input.destination, ".spawnfile-resource-identity"), activated = input.activationIdentity && await readFile(identityPath, "utf8").then((value) => value === `${input.activationIdentity}\n`, () => false);
116
+ if (activated) {
117
+ await verifyWholeSourceManifest(input.destination, proof);
118
+ await rm(journalPath);
119
+ await syncDirectory(input.destination);
120
+ return { files: proof.files.length, source_run_id: proof.source_run_id, candidate_run_id: input.candidateRunId };
121
+ }
122
+ for (const entry of [...journal.entries, journal.staging])
123
+ await rm(path.join(input.destination, entry), { recursive: true, force: true });
124
+ await rm(journalPath);
125
+ await syncDirectory(input.destination);
126
+ }
127
+ if (destinationExists && (await readdir(input.destination)).length !== 0)
128
+ throw new SpawnfileError("validation_error", "Candidate state destination is not empty");
129
+ const names = new Set();
130
+ for (const entry of proof.files) {
131
+ if (forbidden.test(entry.path) || names.has(entry.path))
132
+ throw new SpawnfileError("validation_error", "Product-state classification contains a prohibited or duplicate path");
133
+ names.add(entry.path);
134
+ if (await hashFile(path.join(input.source, entry.path)) !== entry.sha256)
135
+ throw new SpawnfileError("validation_error", "Quiesced product-state checksum mismatch");
136
+ }
137
+ const temporary = destinationExists ? path.join(input.destination, `.spawnfile-preseed-${process.pid}`) : `${input.destination}.candidate-${process.pid}`;
138
+ await mkdir(temporary, { recursive: false, mode: 0o700 });
139
+ const activated = [];
140
+ try {
141
+ for (const entry of proof.files) {
142
+ const target = path.join(temporary, entry.path);
143
+ await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
144
+ await copyFile(path.join(input.source, entry.path), target, constants.COPYFILE_EXCL);
145
+ const copied = await open(target, constants.O_RDONLY);
146
+ try {
147
+ await copied.sync();
148
+ }
149
+ finally {
150
+ await copied.close();
151
+ }
152
+ if (await hashFile(target) !== entry.sha256 || await hashFile(path.join(input.source, entry.path)) !== entry.sha256)
153
+ throw new SpawnfileError("validation_error", "Product state changed during clone");
154
+ }
155
+ await syncTreeDirectories(temporary);
156
+ if (destinationExists) {
157
+ const entries = await readdir(temporary), journal = await open(journalPath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
158
+ try {
159
+ await journal.writeFile(`${JSON.stringify({ version: "spawnfile.product-state-preseed-journal.v1", candidate_run_id: input.candidateRunId, entries, staging: path.basename(temporary) })}\n`);
160
+ await journal.sync();
161
+ }
162
+ finally {
163
+ await journal.close();
164
+ }
165
+ await syncDirectory(input.destination);
166
+ for (const entry of entries) {
167
+ await rename(path.join(temporary, entry), path.join(input.destination, entry));
168
+ activated.push(path.join(input.destination, entry));
169
+ await syncDirectory(input.destination);
170
+ }
171
+ await rm(temporary, { recursive: true });
172
+ await syncDirectory(input.destination);
173
+ await verifyWholeSourceManifest(input.destination, proof);
174
+ if (input.activationIdentity) {
175
+ const identity = await open(path.join(input.destination, ".spawnfile-resource-identity"), constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
176
+ try {
177
+ await identity.writeFile(`${input.activationIdentity}\n`);
178
+ await identity.sync();
179
+ }
180
+ finally {
181
+ await identity.close();
182
+ }
183
+ await syncDirectory(input.destination);
184
+ }
185
+ await rm(journalPath);
186
+ await syncDirectory(input.destination);
187
+ }
188
+ else {
189
+ await rename(temporary, input.destination);
190
+ await syncDirectory(path.dirname(input.destination));
191
+ }
192
+ }
193
+ catch (error) {
194
+ if (input.activationIdentity) {
195
+ await rm(path.join(input.destination, ".spawnfile-resource-identity"), { force: true });
196
+ if (destinationExists)
197
+ await syncDirectory(input.destination);
198
+ }
199
+ for (const entry of activated.reverse()) {
200
+ await rm(entry, { recursive: true, force: true });
201
+ if (destinationExists)
202
+ await syncDirectory(input.destination);
203
+ }
204
+ await rm(temporary, { recursive: true, force: true });
205
+ await syncDirectory(destinationExists ? input.destination : path.dirname(input.destination));
206
+ await rm(journalPath, { force: true });
207
+ if (destinationExists)
208
+ await syncDirectory(input.destination);
209
+ throw error;
210
+ }
211
+ return { files: proof.files.length, source_run_id: proof.source_run_id, candidate_run_id: input.candidateRunId };
212
+ };
213
+ export const runProductStateCloneWorkflow = async (input, docker = defaultDockerExec) => {
214
+ const authority = authoritySchema.parse(JSON.parse(await readFile(input.authorityReceiptPath, "utf8")));
215
+ const candidateVolume = JSON.parse((await docker(input.dockerCommand, ["volume", "inspect", authority.candidate_volume_name])).stdout);
216
+ if (!Array.isArray(candidateVolume) || candidateVolume.length !== 1 || candidateVolume[0]?.Mountpoint !== path.resolve(input.destination))
217
+ throw new SpawnfileError("validation_error", "Clone destination is not the attested candidate volume");
218
+ const current = await inspectContainer(docker, input.dockerCommand, authority.container_id), currentMounts = Array.isArray(current.Mounts) ? current.Mounts : [];
219
+ if (current.Id !== authority.container_id || current.Image !== authority.image_id || current.State?.StartedAt !== authority.started_at || current.Config?.Labels?.["com.spawnfile.run_id"] !== authority.source_run_id || current.State?.Running !== true || current.State?.Paused !== authority.was_paused || !currentMounts.some((mount) => mount.Type === "volume" && mount.Name === authority.volume_name && mount.Source === authority.source && mount.Destination === authority.mount_path && mount.RW === true))
220
+ throw new SpawnfileError("validation_error", "Source run authority is stale or rebound");
221
+ const proofBytes = await readFile(input.proofPath);
222
+ if (proofBytes.length > 1_048_576)
223
+ throw new SpawnfileError("validation_error", "Product-state proof is oversized");
224
+ const proof = proofSchema.parse(JSON.parse(proofBytes.toString("utf8")));
225
+ if (proof.source_run_id !== authority.source_run_id)
226
+ throw new SpawnfileError("validation_error", "Proof source run does not match managed authority");
227
+ const fencePath = path.join(authority.source, ".spawnfile-product-state-write-fence");
228
+ const fence = await open(fencePath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o400);
229
+ const modes = [];
230
+ let pausedByUs = false;
231
+ try {
232
+ await fence.writeFile(`${proof.source_run_id}\n`);
233
+ await fence.sync();
234
+ if (!authority.was_paused) {
235
+ await docker(input.dockerCommand, ["pause", authority.container_id]);
236
+ pausedByUs = true;
237
+ }
238
+ const frozen = await inspectContainer(docker, input.dockerCommand, authority.container_id);
239
+ if (frozen.State?.Paused !== true || frozen.State?.StartedAt !== authority.started_at || frozen.Id !== authority.container_id)
240
+ throw new SpawnfileError("validation_error", "Managed source cgroup did not freeze exactly");
241
+ await verifyWholeSourceManifest(authority.source, proof);
242
+ for (const entry of proof.files) {
243
+ if (forbidden.test(entry.path))
244
+ throw new SpawnfileError("validation_error", "Product-state classification contains a prohibited path");
245
+ const file = path.join(authority.source, entry.path), info = await stat(file);
246
+ modes.push({ file, mode: info.mode & 0o777 });
247
+ await chmod(file, info.mode & ~0o222);
248
+ }
249
+ const cloned = await cloneQuiescedProductState({ source: authority.source, destination: input.destination, proof, candidateRunId: input.candidateRunId, activationIdentity: authority.candidate_resource_identity });
250
+ await verifyWholeSourceManifest(authority.source, proof);
251
+ await verifyWholeSourceManifest(input.destination, proof);
252
+ const receipt = { version: "spawnfile.product-state-clone-receipt.v1", ...cloned, proof_sha256: `sha256:${createHash("sha256").update(proofBytes).digest("hex")}`, destination: path.resolve(input.destination), candidate_volume_name: authority.candidate_volume_name, source_container_id: authority.container_id };
253
+ const temporaryReceipt = `${input.receiptPath}.tmp-${process.pid}`;
254
+ await mkdir(path.dirname(input.receiptPath), { recursive: true, mode: 0o700 });
255
+ let published = false;
256
+ try {
257
+ const receiptFile = await open(temporaryReceipt, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
258
+ try {
259
+ await receiptFile.writeFile(`${JSON.stringify(receipt)}\n`);
260
+ await receiptFile.sync();
261
+ }
262
+ finally {
263
+ await receiptFile.close();
264
+ }
265
+ await link(temporaryReceipt, input.receiptPath);
266
+ published = true;
267
+ const receiptDirectory = await open(path.dirname(input.receiptPath), constants.O_RDONLY);
268
+ try {
269
+ await receiptDirectory.sync();
270
+ }
271
+ finally {
272
+ await receiptDirectory.close();
273
+ }
274
+ await rm(temporaryReceipt);
275
+ await syncDirectory(path.dirname(input.receiptPath));
276
+ }
277
+ catch (error) {
278
+ await rm(temporaryReceipt, { force: true });
279
+ await syncDirectory(path.dirname(input.receiptPath));
280
+ if (published) {
281
+ await rm(input.receiptPath, { force: true });
282
+ await syncDirectory(path.dirname(input.receiptPath));
283
+ }
284
+ for (const entry of await readdir(input.destination)) {
285
+ await rm(path.join(input.destination, entry), { recursive: true, force: true });
286
+ await syncDirectory(input.destination);
287
+ }
288
+ throw error;
289
+ }
290
+ return receipt;
291
+ }
292
+ finally {
293
+ let restorationError;
294
+ for (const item of modes.reverse())
295
+ try {
296
+ await chmod(item.file, item.mode);
297
+ }
298
+ catch (error) {
299
+ restorationError ??= error;
300
+ }
301
+ try {
302
+ await fence.close();
303
+ await rm(fencePath, { force: true });
304
+ await syncDirectory(authority.source);
305
+ }
306
+ catch (error) {
307
+ restorationError ??= error;
308
+ }
309
+ try {
310
+ if (pausedByUs)
311
+ await restoreRunningState(docker, input.dockerCommand, authority);
312
+ }
313
+ catch (error) {
314
+ restorationError ??= error;
315
+ }
316
+ if (restorationError)
317
+ throw new SpawnfileError("validation_error", "Product-state source restoration failed", { cause: restorationError });
318
+ }
319
+ };
@@ -1,4 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { type OrganizationHandoff } from "./organizationHandoffTypes.js";
3
+ import { type OpaqueTargetHandle } from "../target/index.js";
4
+ import { type OrganizationReadiness } from "./organizationReady.js";
2
5
  declare const recordSourceSchema: z.ZodUnion<readonly [z.ZodObject<{
3
6
  kind: z.ZodLiteral<"project">;
4
7
  root: z.ZodString;
@@ -15,7 +18,10 @@ export declare const deploymentRecordSchema: z.ZodObject<{
15
18
  env_file: z.ZodOptional<z.ZodString>;
16
19
  manager: z.ZodString;
17
20
  name: z.ZodString;
21
+ organization_handoff: z.ZodOptional<z.ZodUnknown>;
22
+ organization_handoff_handle: z.ZodOptional<z.ZodString>;
18
23
  output_directory: z.ZodNullable<z.ZodString>;
24
+ run_id: z.ZodOptional<z.ZodString>;
19
25
  source: z.ZodUnion<readonly [z.ZodObject<{
20
26
  kind: z.ZodLiteral<"project">;
21
27
  root: z.ZodString;
@@ -63,8 +69,27 @@ export declare const deploymentRecordSchema: z.ZodObject<{
63
69
  }, z.core.$strict>]>>;
64
70
  }, z.core.$strict>>;
65
71
  version: z.ZodLiteral<"spawnfile.deployment.v2">;
72
+ export_index: z.ZodOptional<z.ZodObject<{
73
+ exported_at: z.ZodString;
74
+ path: z.ZodString;
75
+ run_id: z.ZodString;
76
+ }, z.core.$strict>>;
77
+ organization_ready: z.ZodOptional<z.ZodPreprocess<z.ZodObject<{
78
+ code: z.ZodUnion<readonly [z.ZodLiteral<"organization_ready">, z.ZodLiteral<"external_moltnet">, z.ZodLiteral<"compiled_evidence_missing">, z.ZodLiteral<"unit_unavailable">, z.ZodLiteral<"unit_restarted">, z.ZodLiteral<"probe_unavailable">, z.ZodLiteral<"identity_mismatch">, z.ZodLiteral<"topology_mismatch">, z.ZodLiteral<"probe_timeout">, z.ZodLiteral<"probe_cancelled">]>;
79
+ compile_fingerprint: z.ZodString;
80
+ run_id: z.ZodNullable<z.ZodString>;
81
+ state: z.ZodUnion<readonly [z.ZodLiteral<"ready">, z.ZodLiteral<"pending">, z.ZodLiteral<"failed">, z.ZodLiteral<"cancelled">]>;
82
+ unit_id: z.ZodString;
83
+ version: z.ZodLiteral<"spawnfile.organization-ready.v1">;
84
+ world_binding_digest: z.ZodNullable<z.ZodString>;
85
+ reason: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strict>>>;
66
87
  }, z.core.$strict>;
67
- export type DeploymentRecord = z.infer<typeof deploymentRecordSchema>;
88
+ export type DeploymentRecord = Omit<z.infer<typeof deploymentRecordSchema>, "organization_handoff" | "organization_handoff_handle" | "organization_ready"> & {
89
+ organization_handoff?: OrganizationHandoff;
90
+ organization_handoff_handle?: OpaqueTargetHandle;
91
+ organization_ready?: OrganizationReadiness;
92
+ };
68
93
  export declare const parseDeploymentRecord: (source: unknown, sourceLabel?: string) => DeploymentRecord;
69
94
  export declare const readDeploymentRecord: (recordPath: string) => Promise<DeploymentRecord>;
70
95
  export declare const readDeploymentRecordFromOutput: (outputDirectory: string, deploymentName: string) => Promise<DeploymentRecord>;
@@ -3,7 +3,10 @@ import { readdir, rename, writeFile } from "node:fs/promises";
3
3
  import { z } from "zod";
4
4
  import { ensureDirectory, readUtf8File } from "../filesystem/index.js";
5
5
  import { SpawnfileError } from "../shared/index.js";
6
+ import { parseOrganizationHandoff } from "./organizationHandoffTypes.js";
7
+ import { parseOpaqueTargetHandle } from "../target/index.js";
6
8
  import { normalizeDeploymentName, resolveDeploymentRecordPath, resolveDeploymentRecordsDirectory } from "./names.js";
9
+ import { parseOrganizationReadiness, organizationReadinessSchema } from "./organizationReady.js";
7
10
  const contextTargetSchema = z.object({
8
11
  endpoint_fingerprint: z.string().regex(/^sha256:[a-f0-9]{32}$/),
9
12
  kind: z.literal("context"),
@@ -82,12 +85,40 @@ export const deploymentRecordSchema = z.object({
82
85
  env_file: z.string().min(1).optional(),
83
86
  manager: z.string().min(1),
84
87
  name: z.string().min(1),
88
+ organization_handoff: z.unknown().optional(),
89
+ organization_handoff_handle: z.string().optional(),
85
90
  output_directory: z.string().min(1).nullable(),
91
+ // Optional: the NOOPOLIS_RUN_ID stamped on every authority container's
92
+ // causal events for this deployment's run (see specs/CAUSAL.md and
93
+ // src/runtime/common.ts). Populated only when the compiling process had a
94
+ // run id set (every `spawnfile run`/`up --detach` invocation via
95
+ // ensureNoopolisRunId()); absent for image-consume/recovered records that
96
+ // have no reliable run-time id to source. This is what lets
97
+ // `spawnfile artifacts export --run-id <id>` find the deployment whose
98
+ // containers/volumes were compiled under that run.
99
+ run_id: z.string().min(1).optional(),
86
100
  source: recordSourceSchema,
87
101
  target: targetSchema,
88
102
  units: z.array(unitSchema).min(1),
89
- version: z.literal("spawnfile.deployment.v2")
90
- }).strict();
103
+ version: z.literal("spawnfile.deployment.v2"),
104
+ // Optional: stamped by `spawnfile artifacts export` (artifactsExport.ts) once it has
105
+ // successfully written `spawnfile.export-index.v1` for this deployment's run. This is
106
+ // the record-driven marker `spawnfile down` (downDeployment.ts) reads to enforce the
107
+ // export-before-teardown invariant (Decision 21) without needing to be told, out of
108
+ // band, where a prior export went: down resolves the SAME deployment record export
109
+ // already writes back to, so the two commands share one source of truth. Absent means
110
+ // "never exported" — not "exported to an unknown location".
111
+ export_index: z.object({
112
+ exported_at: z.string().min(1),
113
+ path: z.string().min(1),
114
+ run_id: z.string().min(1)
115
+ }).strict().optional(),
116
+ organization_ready: organizationReadinessSchema.optional()
117
+ }).strict().superRefine((value, context) => {
118
+ if (value.organization_handoff_handle !== undefined && value.organization_handoff === undefined) {
119
+ context.addIssue({ code: z.ZodIssueCode.custom, path: ["organization_handoff_handle"], message: "organization handoff handle requires organization handoff" });
120
+ }
121
+ });
91
122
  const upgradeV1Record = (record) => ({
92
123
  auth_profile: record.auth_profile,
93
124
  compile_fingerprint: record.compile_fingerprint,
@@ -104,7 +135,14 @@ const upgradeV1Record = (record) => ({
104
135
  const hasVersion = (source, version) => typeof source === "object"
105
136
  && source !== null
106
137
  && source.version === version;
138
+ const readOrganizationReadiness = (source) => {
139
+ if (typeof source !== "object" || source === null || !Object.hasOwn(source, "organization_ready")) {
140
+ return undefined;
141
+ }
142
+ return parseOrganizationReadiness(source.organization_ready);
143
+ };
107
144
  export const parseDeploymentRecord = (source, sourceLabel = "deployment record") => {
145
+ const organizationReadiness = readOrganizationReadiness(source);
108
146
  let record;
109
147
  if (hasVersion(source, "spawnfile.deployment.v1")) {
110
148
  const parsed = deploymentRecordV1Schema.safeParse(source);
@@ -118,13 +156,20 @@ export const parseDeploymentRecord = (source, sourceLabel = "deployment record")
118
156
  if (!parsed.success) {
119
157
  throw new SpawnfileError("validation_error", `Invalid ${sourceLabel}: ${z.prettifyError(parsed.error)}`);
120
158
  }
121
- record = parsed.data;
159
+ const { organization_handoff: organizationHandoff, organization_handoff_handle: organizationHandoffHandle, organization_ready: _organizationReady, ...recordWithoutMetadata } = parsed.data;
160
+ record = {
161
+ ...recordWithoutMetadata,
162
+ ...(organizationHandoff === undefined
163
+ ? {}
164
+ : { organization_handoff: parseOrganizationHandoff(organizationHandoff) }),
165
+ ...(organizationHandoffHandle === undefined ? {} : { organization_handoff_handle: parseOpaqueTargetHandle(organizationHandoffHandle) })
166
+ };
122
167
  }
123
168
  const normalizedName = normalizeDeploymentName(record.name);
124
169
  if (normalizedName !== record.name) {
125
170
  throw new SpawnfileError("validation_error", `Invalid ${sourceLabel}: deployment name must be normalized`);
126
171
  }
127
- return record;
172
+ return organizationReadiness ? { ...record, organization_ready: organizationReadiness } : record;
128
173
  };
129
174
  export const readDeploymentRecord = async (recordPath) => {
130
175
  let parsed;
@@ -1,35 +1 @@
1
- export type DockerDeploymentTarget = {
2
- endpoint_fingerprint: string;
3
- kind: "context";
4
- name: string;
5
- } | {
6
- endpoint_fingerprint: string;
7
- kind: "docker-context";
8
- context: string;
9
- } | {
10
- kind: "host";
11
- value: string;
12
- };
13
- export type DockerTargetExecFile = (file: string, args: string[], options: {
14
- timeout: number;
15
- }) => Promise<{
16
- stderr: string;
17
- stdout: string;
18
- }>;
19
- export interface ResolveDockerDeploymentTargetOptions {
20
- context?: string | null;
21
- dockerCommand?: string;
22
- dockerHost?: string | null;
23
- execFile?: DockerTargetExecFile;
24
- timeoutMs?: number;
25
- }
26
- export declare const createEndpointFingerprint: (endpoint: string) => string;
27
- export declare const createDockerDeploymentTarget: (input: {
28
- context?: string;
29
- endpoint?: string;
30
- host?: string;
31
- }) => DockerDeploymentTarget;
32
- export declare const dockerContextNameForTarget: (target: DockerDeploymentTarget) => string | null;
33
- export declare const dockerHostValueForTarget: (target: DockerDeploymentTarget) => string | null;
34
- export declare const resolveDockerDeploymentTarget: (input?: ResolveDockerDeploymentTargetOptions) => Promise<DockerDeploymentTarget>;
35
- export declare const verifyDockerDeploymentTarget: (target: DockerDeploymentTarget, options?: Omit<ResolveDockerDeploymentTargetOptions, "context" | "dockerHost">) => Promise<string | null>;
1
+ export * from "../target/dockerTarget.js";
@@ -1,96 +1 @@
1
- import { createHash } 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
- export const createEndpointFingerprint = (endpoint) => {
7
- const normalized = endpoint.trim();
8
- if (normalized.length === 0) {
9
- throw new SpawnfileError("validation_error", "Deployment target endpoint must not be empty");
10
- }
11
- return `sha256:${createHash("sha256").update(normalized).digest("hex").slice(0, 32)}`;
12
- };
13
- const parseDockerEndpoint = (stdout) => {
14
- const trimmed = stdout.trim();
15
- if (trimmed.length === 0) {
16
- throw new SpawnfileError("runtime_error", "Docker context endpoint was empty");
17
- }
18
- try {
19
- const parsed = JSON.parse(trimmed);
20
- if (typeof parsed === "string" && parsed.trim().length > 0) {
21
- return parsed.trim();
22
- }
23
- }
24
- catch {
25
- // Docker/podman variants may return a plain string instead of JSON.
26
- }
27
- return trimmed;
28
- };
29
- const resolveDockerContextEndpoint = async (context, options) => {
30
- try {
31
- const { stdout } = await options.execFile(options.dockerCommand, ["context", "inspect", context, "--format", "{{json .Endpoints.docker.Host}}"], { timeout: options.timeoutMs });
32
- return parseDockerEndpoint(stdout);
33
- }
34
- catch (error) {
35
- const reason = error instanceof Error ? error.message : String(error);
36
- throw new SpawnfileError("runtime_error", `Unable to resolve Docker context "${context}": ${reason}`);
37
- }
38
- };
39
- export const createDockerDeploymentTarget = (input) => {
40
- const host = input.host?.trim();
41
- if (host) {
42
- return {
43
- kind: "host",
44
- value: host
45
- };
46
- }
47
- const context = input.context?.trim();
48
- const endpoint = input.endpoint?.trim();
49
- if (!context || !endpoint) {
50
- throw new SpawnfileError("validation_error", "Docker context deployment targets require both context and endpoint");
51
- }
52
- return {
53
- name: context,
54
- endpoint_fingerprint: createEndpointFingerprint(endpoint),
55
- kind: "context"
56
- };
57
- };
58
- export const dockerContextNameForTarget = (target) => target.kind === "context"
59
- ? target.name
60
- : target.kind === "docker-context"
61
- ? target.context
62
- : null;
63
- export const dockerHostValueForTarget = (target) => target.kind === "host" ? target.value : null;
64
- export const resolveDockerDeploymentTarget = async (input = {}) => {
65
- const explicitContext = input.context?.trim();
66
- const host = explicitContext ? undefined : input.dockerHost?.trim() ?? process.env.DOCKER_HOST?.trim();
67
- if (host) {
68
- return createDockerDeploymentTarget({ host });
69
- }
70
- const resolvedOptions = {
71
- dockerCommand: input.dockerCommand ?? "docker",
72
- execFile: input.execFile ?? execFile,
73
- timeoutMs: input.timeoutMs ?? 10_000
74
- };
75
- const context = explicitContext || "default";
76
- const endpoint = await resolveDockerContextEndpoint(context, resolvedOptions);
77
- return createDockerDeploymentTarget({ context, endpoint });
78
- };
79
- export const verifyDockerDeploymentTarget = async (target, options = {}) => {
80
- if (target.kind === "host") {
81
- return null;
82
- }
83
- const context = dockerContextNameForTarget(target);
84
- if (!context) {
85
- return null;
86
- }
87
- const current = await resolveDockerDeploymentTarget({
88
- ...options,
89
- context
90
- });
91
- const currentFingerprint = current.kind === "host" ? null : current.endpoint_fingerprint;
92
- if (currentFingerprint !== target.endpoint_fingerprint) {
93
- throw new SpawnfileError("runtime_error", `Docker context "${context}" endpoint changed since deployment`);
94
- }
95
- return context;
96
- };
1
+ export * from "../target/dockerTarget.js";
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Ephemeral grants issued only by the durable up reconciler. They are kept
3
+ * process-local: a restart reconstructs them by re-reading and re-verifying
4
+ * the lifecycle records, never by trusting caller-supplied recovery data.
5
+ */
6
+ export interface NoDockerMutationRecovery {
7
+ readonly kind: "no_docker_mutation";
8
+ }
9
+ export interface DeploymentRecordRecovery {
10
+ readonly kind: "deployment_record";
11
+ }
12
+ export interface DetachedContainerRecovery {
13
+ readonly containerId: string;
14
+ readonly containerName: string;
15
+ readonly deploymentLabels: Readonly<Record<string, string>>;
16
+ readonly imageId: string;
17
+ readonly kind: "detached_container";
18
+ }
19
+ export type UpLifecycleRecovery = NoDockerMutationRecovery | DeploymentRecordRecovery | DetachedContainerRecovery;
20
+ export declare const noDockerMutationRecovery: () => NoDockerMutationRecovery;
21
+ export declare const deploymentRecordRecovery: () => DeploymentRecordRecovery;
22
+ export declare const detachedContainerRecovery: (value: Omit<DetachedContainerRecovery, "kind">) => DetachedContainerRecovery;
23
+ export declare const isTrustedUpLifecycleRecovery: (value: unknown) => value is UpLifecycleRecovery;
@@ -0,0 +1,12 @@
1
+ const grants = new WeakSet();
2
+ const grant = (value) => {
3
+ const result = Object.freeze(value);
4
+ grants.add(result);
5
+ return result;
6
+ };
7
+ export const noDockerMutationRecovery = () => grant({ kind: "no_docker_mutation" });
8
+ export const deploymentRecordRecovery = () => grant({ kind: "deployment_record" });
9
+ export const detachedContainerRecovery = (value) => grant({ ...value, kind: "detached_container" });
10
+ export const isTrustedUpLifecycleRecovery = (value) => value !== null
11
+ && typeof value === "object"
12
+ && grants.has(value);