spawnfile 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/README.md +58 -12
  2. package/dist/audit/auditCli.d.ts +19 -0
  3. package/dist/audit/auditCli.js +63 -0
  4. package/dist/audit/checks.d.ts +100 -0
  5. package/dist/audit/checks.js +279 -0
  6. package/dist/audit/checksShared.d.ts +74 -0
  7. package/dist/audit/checksShared.js +37 -0
  8. package/dist/audit/generateAudit.d.ts +19 -0
  9. package/dist/audit/generateAudit.js +122 -0
  10. package/dist/audit/index.d.ts +4 -0
  11. package/dist/audit/index.js +4 -0
  12. package/dist/audit/readAudit.d.ts +50 -0
  13. package/dist/audit/readAudit.js +59 -0
  14. package/dist/audit/types.d.ts +40 -0
  15. package/dist/audit/types.js +8 -0
  16. package/dist/auth/credentialEnvFile.d.ts +11 -0
  17. package/dist/auth/credentialEnvFile.js +60 -0
  18. package/dist/auth/credentialProvisioning.d.ts +15 -0
  19. package/dist/auth/credentialProvisioning.js +75 -0
  20. package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
  21. package/dist/auth/credentialProvisioningReceipt.js +70 -0
  22. package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
  23. package/dist/auth/credentialProvisioningRequest.js +169 -0
  24. package/dist/auth/credentialWorldBindings.d.ts +21 -0
  25. package/dist/auth/credentialWorldBindings.js +104 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.js +7 -0
  28. package/dist/auth/paths.d.ts +11 -0
  29. package/dist/auth/paths.js +21 -0
  30. package/dist/auth/runtimeCredentials.js +18 -2
  31. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  32. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  33. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  34. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  36. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  37. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  38. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  39. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  40. package/dist/auth/targetSecretSourceGrant.js +99 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  42. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  43. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  44. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  46. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  48. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  50. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  51. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  52. package/dist/auth/targetSecretSourceResolver.js +137 -0
  53. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  54. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  55. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  56. package/dist/auth/targetSecretSourceRotate.js +121 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  58. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  59. package/dist/cli/artifactsCommands.d.ts +27 -0
  60. package/dist/cli/artifactsCommands.js +132 -0
  61. package/dist/cli/authCommands.d.ts +5 -0
  62. package/dist/cli/authCommands.js +221 -0
  63. package/dist/cli/compileBuildCommands.d.ts +3 -0
  64. package/dist/cli/compileBuildCommands.js +35 -0
  65. package/dist/cli/containerBundleCommand.d.ts +6 -0
  66. package/dist/cli/containerBundleCommand.js +116 -0
  67. package/dist/cli/devCommands.d.ts +3 -0
  68. package/dist/cli/devCommands.js +115 -0
  69. package/dist/cli/downCommand.d.ts +25 -0
  70. package/dist/cli/downCommand.js +134 -0
  71. package/dist/cli/index.js +6 -3
  72. package/dist/cli/lifecycleCommands.d.ts +1 -1
  73. package/dist/cli/lifecycleCommands.js +11 -179
  74. package/dist/cli/lifecycleMachine.d.ts +19 -0
  75. package/dist/cli/lifecycleMachine.js +78 -0
  76. package/dist/cli/lifecyclePlan.d.ts +35 -0
  77. package/dist/cli/lifecyclePlan.js +240 -0
  78. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  79. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  80. package/dist/cli/runCli.d.ts +15 -2
  81. package/dist/cli/runCli.js +31 -71
  82. package/dist/cli/runPublishCommands.d.ts +3 -0
  83. package/dist/cli/runPublishCommands.js +70 -0
  84. package/dist/cli/statusCommand.d.ts +3 -32
  85. package/dist/cli/statusCommand.js +37 -233
  86. package/dist/cli/statusCommandLive.d.ts +20 -0
  87. package/dist/cli/statusCommandLive.js +188 -0
  88. package/dist/cli/statusCommandOptions.d.ts +40 -0
  89. package/dist/cli/statusCommandOptions.js +42 -0
  90. package/dist/cli/targetCliRoute.d.ts +2 -0
  91. package/dist/cli/targetCliRoute.js +30 -0
  92. package/dist/cli/targetCommands.d.ts +33 -0
  93. package/dist/cli/targetCommands.js +257 -0
  94. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  95. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  96. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  97. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  98. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  99. package/dist/cli/targetDefaultAuthorities.js +210 -0
  100. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  101. package/dist/cli/targetDefaultConfig.js +317 -0
  102. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  103. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  104. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  105. package/dist/cli/targetDefaultEnvelope.js +13 -0
  106. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  107. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  108. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  109. package/dist/cli/targetDefaultHandlers.js +72 -0
  110. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  111. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  112. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  113. package/dist/cli/targetDefaultWorldClock.js +14 -0
  114. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  115. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  116. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  117. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  118. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  119. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  120. package/dist/cli/targetLookupCli.d.ts +3 -0
  121. package/dist/cli/targetLookupCli.js +31 -0
  122. package/dist/cli/targetLookupCommands.d.ts +12 -0
  123. package/dist/cli/targetLookupCommands.js +69 -0
  124. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  125. package/dist/cli/targetOperationDispatch.js +21 -0
  126. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  127. package/dist/cli/targetReceiptOutput.js +21 -0
  128. package/dist/cli/targetRequestFile.d.ts +14 -0
  129. package/dist/cli/targetRequestFile.js +63 -0
  130. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  131. package/dist/cli/targetSecretSourceInput.js +121 -0
  132. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  133. package/dist/cli/targetWorldClockCommand.js +42 -0
  134. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  135. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  136. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  137. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  138. package/dist/cli/upCommand.d.ts +3 -0
  139. package/dist/cli/upCommand.js +133 -0
  140. package/dist/cli/upImageCommand.d.ts +11 -0
  141. package/dist/cli/upImageCommand.js +41 -0
  142. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  143. package/dist/cli/upLifecycleInvocation.js +48 -0
  144. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  145. package/dist/cli/upLifecycleRecovery.js +53 -0
  146. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  147. package/dist/compiler/agentNodeMerge.js +79 -0
  148. package/dist/compiler/agentSurfaces.js +11 -1
  149. package/dist/compiler/buildCompilePlan.js +17 -0
  150. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  151. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  152. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  153. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  154. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  155. package/dist/compiler/buildProject.d.ts +20 -1
  156. package/dist/compiler/buildProject.js +121 -7
  157. package/dist/compiler/compilePlanHelpers.js +2 -0
  158. package/dist/compiler/compileProject.d.ts +15 -0
  159. package/dist/compiler/compileProject.js +29 -75
  160. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  161. package/dist/compiler/compileProjectPolicy.js +21 -0
  162. package/dist/compiler/compileProjectReports.d.ts +9 -0
  163. package/dist/compiler/compileProjectReports.js +52 -0
  164. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  165. package/dist/compiler/containerArtifactSummaries.js +138 -0
  166. package/dist/compiler/containerArtifacts.d.ts +10 -0
  167. package/dist/compiler/containerArtifacts.js +126 -125
  168. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  169. package/dist/compiler/containerArtifactsPlans.js +31 -118
  170. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  171. package/dist/compiler/containerArtifactsRender.js +40 -81
  172. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  173. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  174. package/dist/compiler/containerConfigEnvRender.js +54 -0
  175. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  176. package/dist/compiler/containerEntrypointRender.js +60 -53
  177. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  178. package/dist/compiler/containerEntrypointShell.js +29 -0
  179. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  180. package/dist/compiler/containerPackageOverrides.js +63 -0
  181. package/dist/compiler/containerPackageRender.d.ts +15 -0
  182. package/dist/compiler/containerPackageRender.js +63 -0
  183. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  184. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  185. package/dist/compiler/containerTargetResources.js +3 -1
  186. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  187. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  188. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  189. package/dist/compiler/dockerBuildContext.js +159 -0
  190. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  191. package/dist/compiler/dockerBuildSkip.js +81 -0
  192. package/dist/compiler/index.d.ts +4 -0
  193. package/dist/compiler/index.js +4 -0
  194. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  195. package/dist/compiler/memoryArtifacts.js +134 -0
  196. package/dist/compiler/memoryResolution.d.ts +4 -0
  197. package/dist/compiler/memoryResolution.js +147 -0
  198. package/dist/compiler/modelEnv.d.ts +2 -0
  199. package/dist/compiler/modelEnv.js +6 -0
  200. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  201. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  202. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  203. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  204. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  205. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  206. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  207. package/dist/compiler/moltnetArtifacts.js +56 -95
  208. package/dist/compiler/moltnetBinaries.d.ts +21 -1
  209. package/dist/compiler/moltnetBinaries.js +156 -28
  210. package/dist/compiler/moltnetClientConfig.js +18 -2
  211. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  212. package/dist/compiler/moltnetConfigLowering.js +67 -5
  213. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  214. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  215. package/dist/compiler/moltnetNodeConfig.js +7 -2
  216. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  217. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  218. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  219. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  220. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  221. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  222. package/dist/compiler/moltnetResolution.js +72 -20
  223. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  224. package/dist/compiler/moltnetRuntimeConfig.js +11 -0
  225. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  226. package/dist/compiler/moltnetServerPlans.js +132 -0
  227. package/dist/compiler/organizationIdentity.d.ts +27 -0
  228. package/dist/compiler/organizationIdentity.js +297 -0
  229. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  230. package/dist/compiler/organizationReadyEvidence.js +261 -0
  231. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  232. package/dist/compiler/projectManifestGraph.js +24 -0
  233. package/dist/compiler/runProject.d.ts +4 -0
  234. package/dist/compiler/runProject.js +37 -22
  235. package/dist/compiler/runProjectAuth.d.ts +7 -1
  236. package/dist/compiler/runProjectAuth.js +87 -9
  237. package/dist/compiler/runProjectDocker.d.ts +7 -0
  238. package/dist/compiler/runProjectDocker.js +187 -19
  239. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  240. package/dist/compiler/runProjectLifecycle.js +40 -0
  241. package/dist/compiler/syncProjectAuth.js +4 -1
  242. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  243. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  244. package/dist/compiler/teamContextSupport.js +32 -40
  245. package/dist/compiler/teamContextTypes.d.ts +2 -0
  246. package/dist/compiler/types.d.ts +82 -1
  247. package/dist/compiler/upProject.d.ts +5 -0
  248. package/dist/compiler/upProject.js +257 -20
  249. package/dist/compiler/upReceipt.d.ts +36 -0
  250. package/dist/compiler/upReceipt.js +82 -0
  251. package/dist/compiler/updateProjectModels.js +42 -60
  252. package/dist/compiler/updateProjectRuntime.js +22 -35
  253. package/dist/compiler/updateProjectSurfaces.js +53 -47
  254. package/dist/compiler/worldBindings.d.ts +39 -0
  255. package/dist/compiler/worldBindings.js +247 -0
  256. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  257. package/dist/compiler/worldBindingsFile.js +162 -0
  258. package/dist/deployment/artifactsExport.d.ts +49 -0
  259. package/dist/deployment/artifactsExport.js +217 -0
  260. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  261. package/dist/deployment/artifactsExportDocker.js +91 -0
  262. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  263. package/dist/deployment/artifactsExportPlan.js +135 -0
  264. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  265. package/dist/deployment/artifactsExportTypes.js +52 -0
  266. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  267. package/dist/deployment/buildImageCacheStore.js +54 -0
  268. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  269. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  270. package/dist/deployment/dockerInspect.d.ts +9 -0
  271. package/dist/deployment/dockerInspect.js +24 -1
  272. package/dist/deployment/dockerLabels.d.ts +2 -0
  273. package/dist/deployment/dockerLabels.js +2 -0
  274. package/dist/deployment/dockerLogs.js +2 -10
  275. package/dist/deployment/dockerManager.d.ts +51 -0
  276. package/dist/deployment/dockerManager.js +118 -1
  277. package/dist/deployment/dockerProbeGateway.js +64 -5
  278. package/dist/deployment/dockerRecover.d.ts +17 -0
  279. package/dist/deployment/dockerRecover.js +137 -0
  280. package/dist/deployment/dockerTeardown.d.ts +32 -0
  281. package/dist/deployment/dockerTeardown.js +61 -0
  282. package/dist/deployment/downDeployment.d.ts +34 -0
  283. package/dist/deployment/downDeployment.js +147 -0
  284. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  285. package/dist/deployment/downReceiptTypes.js +30 -0
  286. package/dist/deployment/index.d.ts +17 -0
  287. package/dist/deployment/index.js +18 -0
  288. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  289. package/dist/deployment/lifecycleCompletion.js +236 -0
  290. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  291. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  292. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  293. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  294. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  295. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  296. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  297. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  298. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  299. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  300. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  301. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  302. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  303. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  304. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  305. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  306. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  307. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  308. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  309. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  310. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  311. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  312. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  313. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  314. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  315. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  316. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  317. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  318. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  319. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  320. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  321. package/dist/deployment/organizationHandoffTypes.js +80 -0
  322. package/dist/deployment/organizationReady.d.ts +52 -0
  323. package/dist/deployment/organizationReady.js +200 -0
  324. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  325. package/dist/deployment/privateArtifactsExport.js +80 -0
  326. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  327. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  328. package/dist/deployment/record.d.ts +26 -1
  329. package/dist/deployment/record.js +49 -4
  330. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  331. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  332. package/dist/deployment/target.d.ts +1 -35
  333. package/dist/deployment/target.js +1 -96
  334. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  335. package/dist/deployment/upReceiptTypes.js +164 -0
  336. package/dist/dev/activity.d.ts +14 -0
  337. package/dist/dev/activity.js +48 -0
  338. package/dist/dev/docker.d.ts +16 -0
  339. package/dist/dev/docker.js +71 -0
  340. package/dist/dev/index.d.ts +2 -0
  341. package/dist/dev/index.js +2 -0
  342. package/dist/dev/project.d.ts +35 -0
  343. package/dist/dev/project.js +170 -0
  344. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  345. package/dist/distribution/buildDistributionReport.js +2 -1
  346. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  347. package/dist/distribution/distributionReportSchema.js +7 -2
  348. package/dist/distribution/index.d.ts +2 -2
  349. package/dist/distribution/index.js +1 -1
  350. package/dist/distribution/types.d.ts +7 -0
  351. package/dist/distribution/types.js +1 -0
  352. package/dist/filesystem/paths.js +10 -1
  353. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  354. package/dist/ledger/causalConformanceCli.js +41 -0
  355. package/dist/ledger/causeNamespace.d.ts +8 -0
  356. package/dist/ledger/causeNamespace.js +24 -0
  357. package/dist/ledger/conformance.d.ts +83 -0
  358. package/dist/ledger/conformance.js +259 -0
  359. package/dist/ledger/emitters.d.ts +76 -0
  360. package/dist/ledger/emitters.js +188 -0
  361. package/dist/ledger/index.d.ts +4 -0
  362. package/dist/ledger/index.js +4 -0
  363. package/dist/ledger/principal.d.ts +96 -0
  364. package/dist/ledger/principal.js +121 -0
  365. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  366. package/dist/manifest/externalParticipantSchemas.js +17 -0
  367. package/dist/manifest/index.d.ts +1 -0
  368. package/dist/manifest/index.js +1 -0
  369. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  370. package/dist/manifest/inlineAgentMember.js +9 -0
  371. package/dist/manifest/loadManifest.js +14 -8
  372. package/dist/manifest/mcpSchemas.d.ts +17 -0
  373. package/dist/manifest/mcpSchemas.js +41 -0
  374. package/dist/manifest/memorySchemas.d.ts +245 -0
  375. package/dist/manifest/memorySchemas.js +148 -0
  376. package/dist/manifest/renderSpawnfile.js +22 -131
  377. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  378. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  379. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  380. package/dist/manifest/schemas.d.ts +1868 -99
  381. package/dist/manifest/schemas.js +78 -32
  382. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  383. package/dist/manifest/surfaceSchemas.js +24 -1
  384. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  385. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  386. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  387. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  388. package/dist/manifest/teamNetworkSchemas.js +3 -317
  389. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  390. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  391. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  392. package/dist/ownership/siblingBuildFreshness.js +20 -0
  393. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  394. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  395. package/dist/report/types.d.ts +142 -0
  396. package/dist/runtime/common.d.ts +37 -0
  397. package/dist/runtime/common.js +56 -1
  398. package/dist/runtime/container.d.ts +29 -1
  399. package/dist/runtime/container.js +127 -11
  400. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  401. package/dist/runtime/containerPackageOverrides.js +33 -0
  402. package/dist/runtime/index.d.ts +2 -0
  403. package/dist/runtime/index.js +2 -0
  404. package/dist/runtime/install.d.ts +1 -1
  405. package/dist/runtime/install.js +43 -1
  406. package/dist/runtime/mnemeMcp.d.ts +15 -0
  407. package/dist/runtime/mnemeMcp.js +109 -0
  408. package/dist/runtime/openclaw/adapter.js +15 -4
  409. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  410. package/dist/runtime/openclaw/mcp.js +69 -0
  411. package/dist/runtime/openclaw/runAuth.js +2 -2
  412. package/dist/runtime/openclaw/scaffold.js +1 -1
  413. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  414. package/dist/runtime/openclaw/schedules.js +74 -0
  415. package/dist/runtime/pi/adapter.d.ts +4 -0
  416. package/dist/runtime/pi/adapter.js +231 -0
  417. package/dist/runtime/pi/appActivitySource.d.ts +1 -0
  418. package/dist/runtime/pi/appActivitySource.js +199 -0
  419. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  420. package/dist/runtime/pi/appAgentConfig.js +264 -0
  421. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  422. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  423. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  424. package/dist/runtime/pi/appCliSource.js +353 -0
  425. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  426. package/dist/runtime/pi/appControlSource.js +390 -0
  427. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  428. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  429. package/dist/runtime/pi/appCoreSource.d.ts +4 -0
  430. package/dist/runtime/pi/appCoreSource.js +244 -0
  431. package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
  432. package/dist/runtime/pi/appPreludeSource.js +191 -0
  433. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  434. package/dist/runtime/pi/appScheduleSource.js +80 -0
  435. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  436. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  437. package/dist/runtime/pi/appSource.d.ts +4 -0
  438. package/dist/runtime/pi/appSource.js +12 -0
  439. package/dist/runtime/pi/appTemplate.d.ts +14 -0
  440. package/dist/runtime/pi/appTemplate.js +27 -0
  441. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  442. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  443. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  444. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  445. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  446. package/dist/runtime/pi/containerTargets.js +57 -0
  447. package/dist/runtime/pi/runAuth.d.ts +2 -0
  448. package/dist/runtime/pi/runAuth.js +185 -0
  449. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  450. package/dist/runtime/pi/testHelpers.js +40 -0
  451. package/dist/runtime/picoclaw/adapter.js +23 -27
  452. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  453. package/dist/runtime/picoclaw/mcp.js +43 -0
  454. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  455. package/dist/runtime/picoclaw/memory.js +17 -0
  456. package/dist/runtime/picoclaw/runAuth.js +1 -1
  457. package/dist/runtime/picoclaw/scaffold.js +1 -1
  458. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  459. package/dist/runtime/picoclaw/schedules.js +62 -3
  460. package/dist/runtime/registry.js +3 -0
  461. package/dist/runtime/scheduleUtils.d.ts +2 -0
  462. package/dist/runtime/scheduleUtils.js +15 -0
  463. package/dist/runtime/types.d.ts +26 -2
  464. package/dist/shared/errors.d.ts +1 -1
  465. package/dist/shared/errors.js +2 -2
  466. package/dist/shared/index.d.ts +1 -0
  467. package/dist/shared/index.js +1 -0
  468. package/dist/shared/redaction.d.ts +2 -0
  469. package/dist/shared/redaction.js +10 -0
  470. package/dist/status/buildStatus.d.ts +1 -0
  471. package/dist/status/buildStatus.js +2 -0
  472. package/dist/status/compileReport.d.ts +22 -0
  473. package/dist/status/compileReport.js +16 -2
  474. package/dist/status/compiledProbeCollection.d.ts +21 -0
  475. package/dist/status/compiledProbeCollection.js +27 -0
  476. package/dist/status/deployments.js +5 -12
  477. package/dist/status/imageStatusReport.js +6 -0
  478. package/dist/status/index.d.ts +3 -0
  479. package/dist/status/index.js +3 -0
  480. package/dist/status/lifecycleProbes.d.ts +19 -0
  481. package/dist/status/lifecycleProbes.js +174 -0
  482. package/dist/status/moltnetProbes.d.ts +7 -8
  483. package/dist/status/moltnetProbes.js +27 -198
  484. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  485. package/dist/status/moltnetWiringProbes.js +178 -0
  486. package/dist/target/cleanupRun.d.ts +41 -0
  487. package/dist/target/cleanupRun.js +139 -0
  488. package/dist/target/cleanupRunDocker.d.ts +16 -0
  489. package/dist/target/cleanupRunDocker.js +66 -0
  490. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  491. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  492. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  493. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  494. package/dist/target/composedPreparation.d.ts +205 -0
  495. package/dist/target/composedPreparation.js +223 -0
  496. package/dist/target/containerBundle.d.ts +82 -0
  497. package/dist/target/containerBundle.js +243 -0
  498. package/dist/target/containerBundleArchive.d.ts +31 -0
  499. package/dist/target/containerBundleArchive.js +140 -0
  500. package/dist/target/containerBundleAuthority.d.ts +25 -0
  501. package/dist/target/containerBundleAuthority.js +65 -0
  502. package/dist/target/containerBundleContracts.d.ts +114 -0
  503. package/dist/target/containerBundleContracts.js +173 -0
  504. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  505. package/dist/target/containerBundleFilesystemStore.js +247 -0
  506. package/dist/target/containerBundlePolicy.d.ts +33 -0
  507. package/dist/target/containerBundlePolicy.js +64 -0
  508. package/dist/target/containerBundleStore.d.ts +127 -0
  509. package/dist/target/containerBundleStore.js +284 -0
  510. package/dist/target/contracts.d.ts +538 -0
  511. package/dist/target/contracts.js +373 -0
  512. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  513. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  514. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  515. package/dist/target/dockerArtifactInspection.js +125 -0
  516. package/dist/target/dockerArtifacts.d.ts +21 -0
  517. package/dist/target/dockerArtifacts.js +110 -0
  518. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  519. package/dist/target/dockerArtifactsProvider.js +449 -0
  520. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  521. package/dist/target/dockerCommandExecutor.js +200 -0
  522. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  523. package/dist/target/dockerCommandExecutorCore.js +273 -0
  524. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  525. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  526. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  527. package/dist/target/dockerContextSnapshot.js +158 -0
  528. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  529. package/dist/target/dockerEndpointFingerprint.js +9 -0
  530. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  531. package/dist/target/dockerPreparedArtifact.js +131 -0
  532. package/dist/target/dockerProjectionJson.d.ts +1 -0
  533. package/dist/target/dockerProjectionJson.js +80 -0
  534. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  535. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  536. package/dist/target/dockerResources.d.ts +26 -0
  537. package/dist/target/dockerResources.js +162 -0
  538. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  539. package/dist/target/dockerResourcesProvider.js +207 -0
  540. package/dist/target/dockerSecrets.d.ts +39 -0
  541. package/dist/target/dockerSecrets.js +249 -0
  542. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  543. package/dist/target/dockerSecretsAuthority.js +216 -0
  544. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  545. package/dist/target/dockerSecretsLifecycle.js +133 -0
  546. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  547. package/dist/target/dockerSecretsProvider.js +329 -0
  548. package/dist/target/dockerTarget.d.ts +52 -0
  549. package/dist/target/dockerTarget.js +48 -0
  550. package/dist/target/dockerTargetBinding.d.ts +14 -0
  551. package/dist/target/dockerTargetBinding.js +96 -0
  552. package/dist/target/dockerWorldClock.d.ts +17 -0
  553. package/dist/target/dockerWorldClock.js +111 -0
  554. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  555. package/dist/target/dockerWorldReadiness.js +119 -0
  556. package/dist/target/dockerWorldService.d.ts +23 -0
  557. package/dist/target/dockerWorldService.js +216 -0
  558. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  559. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  560. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  561. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  562. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  563. package/dist/target/dockerWorldServiceProvider.js +318 -0
  564. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  565. package/dist/target/dockerWorldServiceStore.js +367 -0
  566. package/dist/target/evidenceExport.d.ts +55 -0
  567. package/dist/target/evidenceExport.js +518 -0
  568. package/dist/target/evidenceExportArchive.d.ts +10 -0
  569. package/dist/target/evidenceExportArchive.js +302 -0
  570. package/dist/target/evidenceExportContract.d.ts +27 -0
  571. package/dist/target/evidenceExportContract.js +40 -0
  572. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  573. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  574. package/dist/target/evidenceExportProvider.d.ts +85 -0
  575. package/dist/target/evidenceExportProvider.js +187 -0
  576. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  577. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  578. package/dist/target/evidenceExportStore.d.ts +70 -0
  579. package/dist/target/evidenceExportStore.js +498 -0
  580. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  581. package/dist/target/evidenceExportStorePublication.js +395 -0
  582. package/dist/target/handles.d.ts +20 -0
  583. package/dist/target/handles.js +56 -0
  584. package/dist/target/index.d.ts +12 -0
  585. package/dist/target/index.js +11 -0
  586. package/dist/target/journal.d.ts +59 -0
  587. package/dist/target/journal.js +529 -0
  588. package/dist/target/journalFilesystem.d.ts +3 -0
  589. package/dist/target/journalFilesystem.js +111 -0
  590. package/dist/target/journalRoot.d.ts +4 -0
  591. package/dist/target/journalRoot.js +6 -0
  592. package/dist/target/organizationAttachment.d.ts +23 -0
  593. package/dist/target/organizationAttachment.js +263 -0
  594. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  595. package/dist/target/organizationAttachmentAuthority.js +161 -0
  596. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  597. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  598. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  599. package/dist/target/organizationAttachmentProvider.js +289 -0
  600. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  601. package/dist/target/organizationAttachmentStore.js +316 -0
  602. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  603. package/dist/target/publicArtifactSnapshot.js +150 -0
  604. package/dist/target/topologyActivation.d.ts +51 -0
  605. package/dist/target/topologyActivation.js +149 -0
  606. package/dist/target/topologyAttestation.d.ts +37 -0
  607. package/dist/target/topologyAttestation.js +300 -0
  608. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  609. package/dist/target/topologyAttestationErrors.js +1 -0
  610. package/dist/target/worldClock.d.ts +60 -0
  611. package/dist/target/worldClock.js +129 -0
  612. package/dist/target/worldReadiness.d.ts +103 -0
  613. package/dist/target/worldReadiness.js +153 -0
  614. package/moltnet-releases.json +20 -0
  615. package/package.json +29 -8
  616. package/runtimes.yaml +28 -27
  617. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  618. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  619. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  620. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -0,0 +1,158 @@
1
+ import { z } from "zod";
2
+ export declare const LIFECYCLE_INVOCATION_VERSION: "spawnfile.lifecycle-invocation.v1";
3
+ export declare const LIFECYCLE_COMPLETION_VERSION: "spawnfile.lifecycle-completion.v1";
4
+ export declare const LIFECYCLE_LOOKUP_VERSION: "spawnfile.lifecycle-lookup.v1";
5
+ export declare const LIFECYCLE_OWNER_VERSION: "spawnfile.lifecycle-owner.v1";
6
+ export declare const LIFECYCLE_ADMISSION_VERSION: "spawnfile.lifecycle-admission.v1";
7
+ export declare const LIFECYCLE_AMBIGUOUS_VERSION: "spawnfile.lifecycle-ambiguous.v1";
8
+ export declare const LIFECYCLE_TERMINAL_VERSION: "spawnfile.lifecycle-terminal.v1";
9
+ export declare const LIFECYCLE_RECORD_MAX_BYTES = 1000000;
10
+ export declare const lifecycleIdSchema: z.ZodString;
11
+ export declare const lifecycleInvocationSchema: z.ZodObject<{
12
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
13
+ id: z.ZodString;
14
+ operation: z.ZodEnum<{
15
+ down: "down";
16
+ up: "up";
17
+ artifacts_export: "artifacts_export";
18
+ }>;
19
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
20
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
21
+ }, z.core.$strict>;
22
+ export type LifecycleInvocation = z.infer<typeof lifecycleInvocationSchema>;
23
+ export declare const lifecycleOwnerSchema: z.ZodObject<{
24
+ epoch: z.ZodString;
25
+ lease_expires_at: z.ZodNumber;
26
+ pid: z.ZodNumber;
27
+ version: z.ZodLiteral<"spawnfile.lifecycle-owner.v1">;
28
+ }, z.core.$strict>;
29
+ export type LifecycleOwner = z.infer<typeof lifecycleOwnerSchema>;
30
+ export declare const LIFECYCLE_HEARTBEAT_VERSION: "spawnfile.lifecycle-heartbeat.v1";
31
+ export declare const lifecycleHeartbeatSchema: z.ZodObject<{
32
+ epoch: z.ZodString;
33
+ lease_expires_at: z.ZodNumber;
34
+ version: z.ZodLiteral<"spawnfile.lifecycle-heartbeat.v1">;
35
+ }, z.core.$strict>;
36
+ export type LifecycleHeartbeat = z.infer<typeof lifecycleHeartbeatSchema>;
37
+ export interface LifecycleOwnerCapability {
38
+ epoch: string;
39
+ role: "initial" | "recovery";
40
+ }
41
+ export type LifecycleClaim = {
42
+ capability: LifecycleOwnerCapability;
43
+ status: "owner";
44
+ } | {
45
+ status: "pending" | "replay";
46
+ };
47
+ export declare const lifecycleAdmissionSchema: z.ZodObject<{
48
+ invocation: z.ZodObject<{
49
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
50
+ id: z.ZodString;
51
+ operation: z.ZodEnum<{
52
+ down: "down";
53
+ up: "up";
54
+ artifacts_export: "artifacts_export";
55
+ }>;
56
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
57
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
58
+ }, z.core.$strict>;
59
+ owner: z.ZodObject<{
60
+ epoch: z.ZodString;
61
+ lease_expires_at: z.ZodNumber;
62
+ pid: z.ZodNumber;
63
+ version: z.ZodLiteral<"spawnfile.lifecycle-owner.v1">;
64
+ }, z.core.$strict>;
65
+ version: z.ZodLiteral<"spawnfile.lifecycle-admission.v1">;
66
+ }, z.core.$strict>;
67
+ export type LifecycleAdmission = z.infer<typeof lifecycleAdmissionSchema>;
68
+ export declare const lifecycleAmbiguousReasonSchema: z.ZodEnum<{
69
+ reconciliation_ambiguous: "reconciliation_ambiguous";
70
+ recovery_owner_died: "recovery_owner_died";
71
+ }>;
72
+ export type LifecycleAmbiguousReason = z.infer<typeof lifecycleAmbiguousReasonSchema>;
73
+ export declare const lifecycleAmbiguousSchema: z.ZodObject<{
74
+ invocation_digest: z.ZodString;
75
+ reason_code: z.ZodEnum<{
76
+ reconciliation_ambiguous: "reconciliation_ambiguous";
77
+ recovery_owner_died: "recovery_owner_died";
78
+ }>;
79
+ version: z.ZodLiteral<"spawnfile.lifecycle-ambiguous.v1">;
80
+ }, z.core.$strict>;
81
+ export declare const lifecycleCompletionSchema: z.ZodObject<{
82
+ invocation: z.ZodObject<{
83
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
84
+ id: z.ZodString;
85
+ operation: z.ZodEnum<{
86
+ down: "down";
87
+ up: "up";
88
+ artifacts_export: "artifacts_export";
89
+ }>;
90
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
91
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
92
+ }, z.core.$strict>;
93
+ outcome_bytes: z.ZodString;
94
+ version: z.ZodLiteral<"spawnfile.lifecycle-completion.v1">;
95
+ }, z.core.$strict>;
96
+ export type LifecycleCompletion = z.infer<typeof lifecycleCompletionSchema>;
97
+ export declare const lifecycleTerminalSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
98
+ completion: z.ZodObject<{
99
+ invocation: z.ZodObject<{
100
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
101
+ id: z.ZodString;
102
+ operation: z.ZodEnum<{
103
+ down: "down";
104
+ up: "up";
105
+ artifacts_export: "artifacts_export";
106
+ }>;
107
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
108
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
109
+ }, z.core.$strict>;
110
+ outcome_bytes: z.ZodString;
111
+ version: z.ZodLiteral<"spawnfile.lifecycle-completion.v1">;
112
+ }, z.core.$strict>;
113
+ status: z.ZodLiteral<"completed">;
114
+ version: z.ZodLiteral<"spawnfile.lifecycle-terminal.v1">;
115
+ }, z.core.$strict>, z.ZodObject<{
116
+ ambiguous: z.ZodObject<{
117
+ invocation_digest: z.ZodString;
118
+ reason_code: z.ZodEnum<{
119
+ reconciliation_ambiguous: "reconciliation_ambiguous";
120
+ recovery_owner_died: "recovery_owner_died";
121
+ }>;
122
+ version: z.ZodLiteral<"spawnfile.lifecycle-ambiguous.v1">;
123
+ }, z.core.$strict>;
124
+ status: z.ZodLiteral<"ambiguous">;
125
+ version: z.ZodLiteral<"spawnfile.lifecycle-terminal.v1">;
126
+ }, z.core.$strict>], "status">;
127
+ export type LifecycleTerminal = z.infer<typeof lifecycleTerminalSchema>;
128
+ export declare const lifecycleExportOutcomeSchema: z.ZodObject<{
129
+ deployment: z.ZodString;
130
+ failed_files: z.ZodArray<z.ZodString>;
131
+ index: z.ZodUnknown;
132
+ index_path: z.ZodString;
133
+ missing_optional_files: z.ZodArray<z.ZodString>;
134
+ }, z.core.$strict>;
135
+ export type LifecycleLookup = {
136
+ invocation_id: string;
137
+ status: "not_applied";
138
+ version: typeof LIFECYCLE_LOOKUP_VERSION;
139
+ } | {
140
+ invocation_digest: string;
141
+ operation: LifecycleInvocation["operation"];
142
+ outcome_bytes: string;
143
+ status: "completed";
144
+ version: typeof LIFECYCLE_LOOKUP_VERSION;
145
+ } | {
146
+ invocation_digest: string;
147
+ operation: LifecycleInvocation["operation"];
148
+ status: "pending";
149
+ version: typeof LIFECYCLE_LOOKUP_VERSION;
150
+ } | {
151
+ invocation_digest: string;
152
+ operation: LifecycleInvocation["operation"];
153
+ reason_code: LifecycleAmbiguousReason;
154
+ status: "ambiguous";
155
+ version: typeof LIFECYCLE_LOOKUP_VERSION;
156
+ };
157
+ export declare const canonicalLifecycleJson: (value: unknown) => string;
158
+ export declare const lifecycleDigest: (value: unknown) => string;
@@ -0,0 +1,106 @@
1
+ import { createHash } from "node:crypto";
2
+ import { z } from "zod";
3
+ export const LIFECYCLE_INVOCATION_VERSION = "spawnfile.lifecycle-invocation.v1";
4
+ export const LIFECYCLE_COMPLETION_VERSION = "spawnfile.lifecycle-completion.v1";
5
+ export const LIFECYCLE_LOOKUP_VERSION = "spawnfile.lifecycle-lookup.v1";
6
+ export const LIFECYCLE_OWNER_VERSION = "spawnfile.lifecycle-owner.v1";
7
+ export const LIFECYCLE_ADMISSION_VERSION = "spawnfile.lifecycle-admission.v1";
8
+ export const LIFECYCLE_AMBIGUOUS_VERSION = "spawnfile.lifecycle-ambiguous.v1";
9
+ export const LIFECYCLE_TERMINAL_VERSION = "spawnfile.lifecycle-terminal.v1";
10
+ export const LIFECYCLE_RECORD_MAX_BYTES = 1_000_000;
11
+ export const lifecycleIdSchema = z
12
+ .string()
13
+ .regex(/^lci_[a-z0-9][a-z0-9_-]{15,127}$/u);
14
+ const scalar = z.union([
15
+ z.string().max(512),
16
+ z.boolean(),
17
+ z.number().finite(),
18
+ z.null(),
19
+ ]);
20
+ const binding = z
21
+ .record(z.string().min(1).max(64), scalar)
22
+ .refine((value) => Object.keys(value).length <= 32);
23
+ export const lifecycleInvocationSchema = z
24
+ .object({
25
+ correlation: binding,
26
+ id: lifecycleIdSchema,
27
+ operation: z.enum(["up", "artifacts_export", "down"]),
28
+ request_policy: binding,
29
+ version: z.literal(LIFECYCLE_INVOCATION_VERSION),
30
+ })
31
+ .strict();
32
+ export const lifecycleOwnerSchema = z
33
+ .object({
34
+ epoch: z.string().uuid(),
35
+ lease_expires_at: z.number().int().positive(),
36
+ pid: z.number().int().positive(),
37
+ version: z.literal(LIFECYCLE_OWNER_VERSION),
38
+ })
39
+ .strict();
40
+ export const LIFECYCLE_HEARTBEAT_VERSION = "spawnfile.lifecycle-heartbeat.v1";
41
+ export const lifecycleHeartbeatSchema = z
42
+ .object({
43
+ epoch: z.string().uuid(),
44
+ lease_expires_at: z.number().int().positive(),
45
+ version: z.literal(LIFECYCLE_HEARTBEAT_VERSION),
46
+ })
47
+ .strict();
48
+ export const lifecycleAdmissionSchema = z
49
+ .object({
50
+ invocation: lifecycleInvocationSchema,
51
+ owner: lifecycleOwnerSchema,
52
+ version: z.literal(LIFECYCLE_ADMISSION_VERSION),
53
+ })
54
+ .strict();
55
+ export const lifecycleAmbiguousReasonSchema = z.enum([
56
+ "reconciliation_ambiguous",
57
+ "recovery_owner_died",
58
+ ]);
59
+ export const lifecycleAmbiguousSchema = z
60
+ .object({
61
+ invocation_digest: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
62
+ reason_code: lifecycleAmbiguousReasonSchema,
63
+ version: z.literal(LIFECYCLE_AMBIGUOUS_VERSION),
64
+ })
65
+ .strict();
66
+ export const lifecycleCompletionSchema = z
67
+ .object({
68
+ invocation: lifecycleInvocationSchema,
69
+ outcome_bytes: z.string().min(1).max(LIFECYCLE_RECORD_MAX_BYTES),
70
+ version: z.literal(LIFECYCLE_COMPLETION_VERSION),
71
+ })
72
+ .strict();
73
+ export const lifecycleTerminalSchema = z.discriminatedUnion("status", [
74
+ z
75
+ .object({
76
+ completion: lifecycleCompletionSchema,
77
+ status: z.literal("completed"),
78
+ version: z.literal(LIFECYCLE_TERMINAL_VERSION),
79
+ })
80
+ .strict(),
81
+ z
82
+ .object({
83
+ ambiguous: lifecycleAmbiguousSchema,
84
+ status: z.literal("ambiguous"),
85
+ version: z.literal(LIFECYCLE_TERMINAL_VERSION),
86
+ })
87
+ .strict(),
88
+ ]);
89
+ export const lifecycleExportOutcomeSchema = z
90
+ .object({
91
+ deployment: z.string().min(1).max(128),
92
+ failed_files: z.array(z.string().min(1).max(512)).max(10_000),
93
+ index: z.unknown(),
94
+ index_path: z.string().min(1).max(4096),
95
+ missing_optional_files: z.array(z.string().min(1).max(512)).max(10_000),
96
+ })
97
+ .strict();
98
+ export const canonicalLifecycleJson = (value) => value === null || typeof value !== "object"
99
+ ? JSON.stringify(value)
100
+ : Array.isArray(value)
101
+ ? `[${value.map(canonicalLifecycleJson).join(",")}]`
102
+ : `{${Object.keys(value)
103
+ .sort()
104
+ .map((key) => `${JSON.stringify(key)}:${canonicalLifecycleJson(value[key])}`)
105
+ .join(",")}}`;
106
+ export const lifecycleDigest = (value) => `sha256:${createHash("sha256").update(canonicalLifecycleJson(value)).digest("hex")}`;
@@ -0,0 +1,2 @@
1
+ import { type LifecycleHeartbeat } from "./lifecycleCompletionContracts.js";
2
+ export declare const writeLifecycleHeartbeat: (directory: string, file: string, epoch: string, syncDirectory: (directory: string) => Promise<void>) => Promise<LifecycleHeartbeat>;
@@ -0,0 +1,50 @@
1
+ import { constants } from "node:fs";
2
+ import { lstat, open, rename, unlink } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { SpawnfileError } from "../shared/index.js";
6
+ import { canonicalLifecycleJson, lifecycleHeartbeatSchema, LIFECYCLE_HEARTBEAT_VERSION, } from "./lifecycleCompletionContracts.js";
7
+ import { LIFECYCLE_LEASE_MS } from "./lifecycleCompletionOwner.js";
8
+ const refuse = (message) => {
9
+ throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
10
+ };
11
+ export const writeLifecycleHeartbeat = async (directory, file, epoch, syncDirectory) => {
12
+ const heartbeat = lifecycleHeartbeatSchema.parse({
13
+ epoch,
14
+ lease_expires_at: Date.now() + LIFECYCLE_LEASE_MS,
15
+ version: LIFECYCLE_HEARTBEAT_VERSION,
16
+ });
17
+ const final = path.join(directory, file);
18
+ const prior = await lstat(final).catch((error) => {
19
+ if (error.code !== "ENOENT")
20
+ refuse("unsafe heartbeat");
21
+ return null;
22
+ });
23
+ if (prior &&
24
+ (!prior.isFile() ||
25
+ prior.isSymbolicLink() ||
26
+ prior.nlink !== 1 ||
27
+ prior.uid !== (process.getuid?.() ?? -1) ||
28
+ (prior.mode & 0o777) !== 0o600))
29
+ refuse("unsafe heartbeat");
30
+ const temp = path.join(directory, `.${file}.${process.pid}.${randomUUID()}.tmp`);
31
+ const handle = await open(temp, constants.O_CREAT |
32
+ constants.O_EXCL |
33
+ constants.O_WRONLY |
34
+ constants.O_NOFOLLOW, 0o600);
35
+ try {
36
+ await handle.writeFile(`${canonicalLifecycleJson(heartbeat)}\n`, "utf8");
37
+ await handle.sync();
38
+ }
39
+ finally {
40
+ await handle.close();
41
+ }
42
+ try {
43
+ await rename(temp, final);
44
+ await syncDirectory(directory);
45
+ }
46
+ finally {
47
+ await unlink(temp).catch(() => undefined);
48
+ }
49
+ return heartbeat;
50
+ };
@@ -0,0 +1,18 @@
1
+ import { type LifecycleLookup } from "./lifecycleCompletionContracts.js";
2
+ interface LookupStorage {
3
+ admissionPath: (id: string) => string;
4
+ completionPath: (id: string) => string;
5
+ existingRoot: () => Promise<string | null>;
6
+ read: (file: string) => Promise<string | null>;
7
+ heartbeatPath: (id: string) => string;
8
+ recoveryPath: (id: string) => string;
9
+ }
10
+ export declare const findLifecycleInvocationRecord: (id: string, storage: Pick<LookupStorage, "admissionPath" | "existingRoot" | "read">) => Promise<{
11
+ correlation: Record<string, string | number | boolean | null>;
12
+ id: string;
13
+ operation: "down" | "up" | "artifacts_export";
14
+ request_policy: Record<string, string | number | boolean | null>;
15
+ version: "spawnfile.lifecycle-invocation.v1";
16
+ } | null>;
17
+ export declare const lookupLifecycleCompletionRecord: (id: string, storage: LookupStorage) => Promise<LifecycleLookup>;
18
+ export {};
@@ -0,0 +1,88 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { canonicalLifecycleJson, lifecycleDigest, lifecycleIdSchema, LIFECYCLE_LOOKUP_VERSION, } from "./lifecycleCompletionContracts.js";
3
+ import { lifecycleOwnerIsAlive } from "./lifecycleCompletionOwner.js";
4
+ import { parseLifecycleAdmission, parseLifecycleHeartbeat, parseLifecycleTerminal, } from "./lifecycleCompletionParsing.js";
5
+ export const findLifecycleInvocationRecord = async (id, storage) => {
6
+ const parsed = lifecycleIdSchema.safeParse(id);
7
+ if (!parsed.success)
8
+ refuse("invalid invocation id");
9
+ if ((await storage.existingRoot()) === null)
10
+ return null;
11
+ const text = await storage.read(storage.admissionPath(parsed.data));
12
+ return text === null ? null : parseLifecycleAdmission(text).invocation;
13
+ };
14
+ const refuse = (message) => {
15
+ throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
16
+ };
17
+ export const lookupLifecycleCompletionRecord = async (id, storage) => {
18
+ const parsed = lifecycleIdSchema.safeParse(id);
19
+ if (!parsed.success)
20
+ refuse("invalid invocation id");
21
+ const value = parsed.data;
22
+ if ((await storage.existingRoot()) === null)
23
+ return {
24
+ invocation_id: value,
25
+ status: "not_applied",
26
+ version: LIFECYCLE_LOOKUP_VERSION,
27
+ };
28
+ const admissionText = await storage.read(storage.admissionPath(value));
29
+ const completionText = await storage.read(storage.completionPath(value));
30
+ const recoveryText = await storage.read(storage.recoveryPath(value));
31
+ const heartbeatText = await storage.read(storage.heartbeatPath(value));
32
+ if (admissionText === null &&
33
+ (completionText !== null || recoveryText !== null))
34
+ refuse("completion without admission");
35
+ if (admissionText === null)
36
+ return {
37
+ invocation_id: value,
38
+ status: "not_applied",
39
+ version: LIFECYCLE_LOOKUP_VERSION,
40
+ };
41
+ const admission = parseLifecycleAdmission(admissionText);
42
+ if (completionText !== null) {
43
+ const terminal = parseLifecycleTerminal(completionText);
44
+ if (terminal.status === "completed") {
45
+ if (canonicalLifecycleJson(terminal.completion.invocation) !==
46
+ canonicalLifecycleJson(admission.invocation))
47
+ refuse("completion admission drift");
48
+ return {
49
+ invocation_digest: lifecycleDigest(terminal.completion.invocation),
50
+ operation: terminal.completion.invocation.operation,
51
+ outcome_bytes: terminal.completion.outcome_bytes,
52
+ status: "completed",
53
+ version: LIFECYCLE_LOOKUP_VERSION,
54
+ };
55
+ }
56
+ const ambiguous = terminal.ambiguous;
57
+ if (ambiguous.invocation_digest !== lifecycleDigest(admission.invocation))
58
+ refuse("corrupt ambiguous record");
59
+ return {
60
+ invocation_digest: ambiguous.invocation_digest,
61
+ operation: admission.invocation.operation,
62
+ reason_code: ambiguous.reason_code,
63
+ status: "ambiguous",
64
+ version: LIFECYCLE_LOOKUP_VERSION,
65
+ };
66
+ }
67
+ if (recoveryText !== null) {
68
+ const recovery = parseLifecycleAdmission(recoveryText);
69
+ if (canonicalLifecycleJson(recovery.invocation) !==
70
+ canonicalLifecycleJson(admission.invocation))
71
+ refuse("invocation id drift");
72
+ if (!lifecycleOwnerIsAlive(recovery.owner, heartbeatText ? parseLifecycleHeartbeat(heartbeatText) : null)) {
73
+ return {
74
+ invocation_digest: lifecycleDigest(admission.invocation),
75
+ operation: admission.invocation.operation,
76
+ reason_code: "recovery_owner_died",
77
+ status: "ambiguous",
78
+ version: LIFECYCLE_LOOKUP_VERSION,
79
+ };
80
+ }
81
+ }
82
+ return {
83
+ invocation_digest: lifecycleDigest(admission.invocation),
84
+ operation: admission.invocation.operation,
85
+ status: "pending",
86
+ version: LIFECYCLE_LOOKUP_VERSION,
87
+ };
88
+ };
@@ -0,0 +1,8 @@
1
+ import { type LifecycleAdmission, type LifecycleInvocation, type LifecycleOwnerCapability } from "./lifecycleCompletionContracts.js";
2
+ export declare const LIFECYCLE_LEASE_MS = 30000;
3
+ export declare const createLifecycleAdmission: (invocation: LifecycleInvocation) => LifecycleAdmission;
4
+ export declare const lifecycleOwnerIsAlive: (owner: LifecycleAdmission["owner"], heartbeat?: {
5
+ epoch: string;
6
+ lease_expires_at: number;
7
+ } | null) => boolean;
8
+ export declare const assertLifecycleOwnerCapability: (invocation: LifecycleInvocation, admitted: LifecycleAdmission, recovered: LifecycleAdmission | null, capability: LifecycleOwnerCapability) => void;
@@ -0,0 +1,31 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { LIFECYCLE_ADMISSION_VERSION, LIFECYCLE_OWNER_VERSION, canonicalLifecycleJson, } from "./lifecycleCompletionContracts.js";
3
+ import { SpawnfileError } from "../shared/index.js";
4
+ export const LIFECYCLE_LEASE_MS = 30_000;
5
+ export const createLifecycleAdmission = (invocation) => ({
6
+ invocation,
7
+ owner: {
8
+ epoch: randomUUID(),
9
+ lease_expires_at: Date.now() + LIFECYCLE_LEASE_MS,
10
+ pid: process.pid,
11
+ version: LIFECYCLE_OWNER_VERSION,
12
+ },
13
+ version: LIFECYCLE_ADMISSION_VERSION,
14
+ });
15
+ export const lifecycleOwnerIsAlive = (owner, heartbeat) => {
16
+ const expiry = heartbeat?.epoch === owner.epoch
17
+ ? heartbeat.lease_expires_at
18
+ : owner.lease_expires_at;
19
+ return expiry > Date.now();
20
+ };
21
+ export const assertLifecycleOwnerCapability = (invocation, admitted, recovered, capability) => {
22
+ if (recovered &&
23
+ canonicalLifecycleJson(recovered.invocation) !==
24
+ canonicalLifecycleJson(invocation))
25
+ throw new SpawnfileError("runtime_error", "Lifecycle invocation id drift");
26
+ const active = recovered
27
+ ? { epoch: recovered.owner.epoch, role: "recovery" }
28
+ : { epoch: admitted.owner.epoch, role: "initial" };
29
+ if (capability?.epoch !== active.epoch || capability?.role !== active.role)
30
+ throw new SpawnfileError("runtime_error", "Lifecycle completion store refused: invalid owner capability");
31
+ };
@@ -0,0 +1,12 @@
1
+ import { type LifecycleCompletion, type LifecycleAdmission, type LifecycleAmbiguousReason, type LifecycleTerminal, type LifecycleInvocation, type LifecycleHeartbeat } from "./lifecycleCompletionContracts.js";
2
+ export declare const parseLifecycleInvocation: (raw: unknown) => LifecycleInvocation;
3
+ export declare const parseLifecycleHeartbeat: (text: string) => LifecycleHeartbeat;
4
+ export declare const parseLifecycleAdmission: (text: string) => LifecycleAdmission;
5
+ export declare const parseLifecycleCompletion: (text: string) => LifecycleCompletion;
6
+ export declare const parseLifecycleAmbiguous: (text: string) => {
7
+ invocation_digest: string;
8
+ reason_code: LifecycleAmbiguousReason;
9
+ version: "spawnfile.lifecycle-ambiguous.v1";
10
+ };
11
+ export declare const parseLifecycleTerminal: (text: string) => LifecycleTerminal;
12
+ export declare const parseLifecycleCompletedTerminal: (text: string) => LifecycleCompletion;
@@ -0,0 +1,108 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { parseExportIndex } from "./artifactsExportTypes.js";
3
+ import { parseDownReceipt } from "./downReceiptTypes.js";
4
+ import { canonicalLifecycleJson, lifecycleAdmissionSchema, lifecycleAmbiguousSchema, lifecycleCompletionSchema, lifecycleExportOutcomeSchema, lifecycleHeartbeatSchema, lifecycleInvocationSchema, lifecycleTerminalSchema, } from "./lifecycleCompletionContracts.js";
5
+ import { parseUpReceipt } from "./upReceiptTypes.js";
6
+ const refuse = (message) => {
7
+ throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
8
+ };
9
+ export const parseLifecycleInvocation = (raw) => {
10
+ const parsed = lifecycleInvocationSchema.safeParse(raw);
11
+ if (!parsed.success)
12
+ refuse("invalid invocation contract");
13
+ return parsed.data;
14
+ };
15
+ export const parseLifecycleHeartbeat = (text) => {
16
+ let raw;
17
+ try {
18
+ raw = JSON.parse(text);
19
+ }
20
+ catch {
21
+ refuse("corrupt heartbeat");
22
+ }
23
+ const parsed = lifecycleHeartbeatSchema.safeParse(raw);
24
+ if (!parsed.success || `${canonicalLifecycleJson(parsed.data)}\n` !== text)
25
+ refuse("corrupt heartbeat");
26
+ return parsed.data;
27
+ };
28
+ export const parseLifecycleAdmission = (text) => {
29
+ let raw;
30
+ try {
31
+ raw = JSON.parse(text);
32
+ }
33
+ catch {
34
+ refuse("corrupt admission");
35
+ }
36
+ const parsed = lifecycleAdmissionSchema.safeParse(raw);
37
+ if (!parsed.success || `${canonicalLifecycleJson(parsed.data)}\n` !== text)
38
+ refuse("noncanonical admission");
39
+ return parsed.data;
40
+ };
41
+ export const parseLifecycleCompletion = (text) => {
42
+ let raw;
43
+ try {
44
+ raw = JSON.parse(text);
45
+ }
46
+ catch {
47
+ refuse("corrupt completion");
48
+ }
49
+ const parsed = lifecycleCompletionSchema.safeParse(raw);
50
+ if (!parsed.success || `${canonicalLifecycleJson(parsed.data)}\n` !== text)
51
+ refuse("corrupt completion");
52
+ const value = parsed.data;
53
+ let outcome;
54
+ try {
55
+ outcome = JSON.parse(value.outcome_bytes);
56
+ }
57
+ catch {
58
+ refuse("corrupt outcome");
59
+ }
60
+ if (JSON.stringify(outcome, null, 2) !== value.outcome_bytes)
61
+ refuse("noncanonical outcome");
62
+ try {
63
+ if (value.invocation.operation === "up")
64
+ parseUpReceipt(outcome);
65
+ else if (value.invocation.operation === "down")
66
+ parseDownReceipt(outcome);
67
+ else
68
+ parseExportIndex(lifecycleExportOutcomeSchema.parse(outcome).index);
69
+ }
70
+ catch {
71
+ refuse("outcome operation mismatch");
72
+ }
73
+ return value;
74
+ };
75
+ export const parseLifecycleAmbiguous = (text) => {
76
+ let raw;
77
+ try {
78
+ raw = JSON.parse(text);
79
+ }
80
+ catch {
81
+ refuse("corrupt ambiguous record");
82
+ }
83
+ const parsed = lifecycleAmbiguousSchema.safeParse(raw);
84
+ if (!parsed.success || `${canonicalLifecycleJson(parsed.data)}\n` !== text)
85
+ refuse("corrupt ambiguous record");
86
+ return parsed.data;
87
+ };
88
+ export const parseLifecycleTerminal = (text) => {
89
+ let raw;
90
+ try {
91
+ raw = JSON.parse(text);
92
+ }
93
+ catch {
94
+ refuse("corrupt terminal record");
95
+ }
96
+ const parsed = lifecycleTerminalSchema.safeParse(raw);
97
+ if (!parsed.success || `${canonicalLifecycleJson(parsed.data)}\n` !== text)
98
+ refuse("corrupt terminal record");
99
+ if (parsed.data.status === "completed")
100
+ parseLifecycleCompletion(`${canonicalLifecycleJson(parsed.data.completion)}\n`);
101
+ return parsed.data;
102
+ };
103
+ export const parseLifecycleCompletedTerminal = (text) => {
104
+ const terminal = parseLifecycleTerminal(text);
105
+ if (terminal.status !== "completed")
106
+ refuse("ambiguous terminal");
107
+ return terminal.completion;
108
+ };
@@ -0,0 +1,9 @@
1
+ export declare const failLifecycleStore: (message: string) => never;
2
+ export declare const resolveLifecycleCompletionDirectory: () => string;
3
+ export declare const lifecycleRecordName: (id: string, kind: "admission" | "completion" | "evidence" | "plan" | "recovery") => string;
4
+ export declare const resolveLifecycleCompletionPath: (id: string) => string;
5
+ export declare const admissionPath: (id: string) => string;
6
+ export declare const planPath: (id: string) => string;
7
+ export declare const recoveryPath: (id: string) => string;
8
+ export declare const evidencePath: (id: string) => string;
9
+ export declare const heartbeatPath: (id: string) => string;
@@ -0,0 +1,16 @@
1
+ import path from "node:path";
2
+ import { resolveSpawnfileHome } from "../auth/index.js";
3
+ import { SpawnfileError } from "../shared/index.js";
4
+ import { lifecycleIdSchema } from "./lifecycleCompletionContracts.js";
5
+ export const failLifecycleStore = (message) => {
6
+ throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
7
+ };
8
+ export const resolveLifecycleCompletionDirectory = () => path.join(resolveSpawnfileHome(), "lifecycle-completions");
9
+ export const lifecycleRecordName = (id, kind) => `${lifecycleIdSchema.parse(id)}.${kind}`;
10
+ const lifecyclePath = (id, kind) => path.join(resolveLifecycleCompletionDirectory(), lifecycleRecordName(id, kind));
11
+ export const resolveLifecycleCompletionPath = (id) => lifecyclePath(id, "completion");
12
+ export const admissionPath = (id) => lifecyclePath(id, "admission");
13
+ export const planPath = (id) => lifecyclePath(id, "plan");
14
+ export const recoveryPath = (id) => lifecyclePath(id, "recovery");
15
+ export const evidencePath = (id) => lifecyclePath(id, "evidence");
16
+ export const heartbeatPath = (id) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.heartbeat`);
@@ -0,0 +1,5 @@
1
+ type RecordReader = (file: string, links?: readonly number[]) => Promise<string | null>;
2
+ export declare const settleLifecyclePublication: (file: string) => Promise<void>;
3
+ export declare const readSettledLifecycleRecord: (file: string, read: RecordReader) => Promise<string | null>;
4
+ export declare const matchesSettledLifecyclePublication: (file: string, expected: string, read: RecordReader) => Promise<boolean>;
5
+ export {};
@@ -0,0 +1,35 @@
1
+ import { lstat } from "node:fs/promises";
2
+ import { SpawnfileError } from "../shared/index.js";
3
+ const refuse = (message) => {
4
+ throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
5
+ };
6
+ export const settleLifecyclePublication = async (file) => {
7
+ for (let attempt = 0; attempt < 16; attempt += 1) {
8
+ const info = await lstat(file).catch(() => refuse("publication changed"));
9
+ if (info.nlink === 1)
10
+ return;
11
+ await new Promise((resolve) => setImmediate(resolve));
12
+ }
13
+ refuse("publication did not settle");
14
+ };
15
+ export const readSettledLifecycleRecord = async (file, read) => {
16
+ const text = await read(file, [1, 2]);
17
+ if (text === null)
18
+ return null;
19
+ const info = await lstat(file).catch(() => refuse("publication changed"));
20
+ if (info.nlink === 2) {
21
+ await settleLifecyclePublication(file);
22
+ return read(file);
23
+ }
24
+ if (info.nlink !== 1)
25
+ refuse("unsafe record");
26
+ return text;
27
+ };
28
+ export const matchesSettledLifecyclePublication = async (file, expected, read) => {
29
+ const prior = await readSettledLifecycleRecord(file, read);
30
+ if (prior === null)
31
+ return false;
32
+ if (prior !== expected)
33
+ refuse("divergent immutable record");
34
+ return true;
35
+ };