spawnfile 0.1.13 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/README.md +50 -11
  2. package/dist/audit/auditCli.d.ts +19 -0
  3. package/dist/audit/auditCli.js +63 -0
  4. package/dist/audit/checks.d.ts +100 -0
  5. package/dist/audit/checks.js +279 -0
  6. package/dist/audit/checksShared.d.ts +74 -0
  7. package/dist/audit/checksShared.js +37 -0
  8. package/dist/audit/generateAudit.d.ts +19 -0
  9. package/dist/audit/generateAudit.js +122 -0
  10. package/dist/audit/index.d.ts +4 -0
  11. package/dist/audit/index.js +4 -0
  12. package/dist/audit/readAudit.d.ts +50 -0
  13. package/dist/audit/readAudit.js +59 -0
  14. package/dist/audit/types.d.ts +40 -0
  15. package/dist/audit/types.js +8 -0
  16. package/dist/auth/credentialEnvFile.d.ts +11 -0
  17. package/dist/auth/credentialEnvFile.js +60 -0
  18. package/dist/auth/credentialProvisioning.d.ts +15 -0
  19. package/dist/auth/credentialProvisioning.js +75 -0
  20. package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
  21. package/dist/auth/credentialProvisioningReceipt.js +70 -0
  22. package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
  23. package/dist/auth/credentialProvisioningRequest.js +169 -0
  24. package/dist/auth/credentialWorldBindings.d.ts +21 -0
  25. package/dist/auth/credentialWorldBindings.js +104 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.js +7 -0
  28. package/dist/auth/paths.d.ts +11 -0
  29. package/dist/auth/paths.js +21 -0
  30. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  31. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  32. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  33. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  34. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  36. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  37. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  38. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  39. package/dist/auth/targetSecretSourceGrant.js +99 -0
  40. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  42. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  43. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  44. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  46. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  48. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  50. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  51. package/dist/auth/targetSecretSourceResolver.js +137 -0
  52. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  53. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  54. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  55. package/dist/auth/targetSecretSourceRotate.js +121 -0
  56. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  58. package/dist/cli/artifactsCommands.d.ts +27 -0
  59. package/dist/cli/artifactsCommands.js +132 -0
  60. package/dist/cli/authCommands.d.ts +5 -0
  61. package/dist/cli/authCommands.js +221 -0
  62. package/dist/cli/compileBuildCommands.d.ts +3 -0
  63. package/dist/cli/compileBuildCommands.js +35 -0
  64. package/dist/cli/containerBundleCommand.d.ts +6 -0
  65. package/dist/cli/containerBundleCommand.js +116 -0
  66. package/dist/cli/downCommand.d.ts +25 -0
  67. package/dist/cli/downCommand.js +134 -0
  68. package/dist/cli/index.js +6 -3
  69. package/dist/cli/lifecycleCommands.d.ts +1 -1
  70. package/dist/cli/lifecycleCommands.js +11 -181
  71. package/dist/cli/lifecycleMachine.d.ts +19 -0
  72. package/dist/cli/lifecycleMachine.js +78 -0
  73. package/dist/cli/lifecyclePlan.d.ts +35 -0
  74. package/dist/cli/lifecyclePlan.js +240 -0
  75. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  76. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  77. package/dist/cli/runCli.d.ts +9 -2
  78. package/dist/cli/runCli.js +27 -71
  79. package/dist/cli/runPublishCommands.d.ts +3 -0
  80. package/dist/cli/runPublishCommands.js +70 -0
  81. package/dist/cli/statusCommand.d.ts +3 -33
  82. package/dist/cli/statusCommand.js +19 -249
  83. package/dist/cli/statusCommandLive.d.ts +20 -0
  84. package/dist/cli/statusCommandLive.js +188 -0
  85. package/dist/cli/statusCommandOptions.d.ts +40 -0
  86. package/dist/cli/statusCommandOptions.js +42 -0
  87. package/dist/cli/targetCliRoute.d.ts +2 -0
  88. package/dist/cli/targetCliRoute.js +30 -0
  89. package/dist/cli/targetCommands.d.ts +33 -0
  90. package/dist/cli/targetCommands.js +257 -0
  91. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  92. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  93. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  94. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  95. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  96. package/dist/cli/targetDefaultAuthorities.js +210 -0
  97. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  98. package/dist/cli/targetDefaultConfig.js +317 -0
  99. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  100. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  101. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  102. package/dist/cli/targetDefaultEnvelope.js +13 -0
  103. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  104. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  105. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  106. package/dist/cli/targetDefaultHandlers.js +72 -0
  107. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  108. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  109. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  110. package/dist/cli/targetDefaultWorldClock.js +14 -0
  111. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  112. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  113. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  114. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  115. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  116. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  117. package/dist/cli/targetLookupCli.d.ts +3 -0
  118. package/dist/cli/targetLookupCli.js +31 -0
  119. package/dist/cli/targetLookupCommands.d.ts +12 -0
  120. package/dist/cli/targetLookupCommands.js +69 -0
  121. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  122. package/dist/cli/targetOperationDispatch.js +21 -0
  123. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  124. package/dist/cli/targetReceiptOutput.js +21 -0
  125. package/dist/cli/targetRequestFile.d.ts +14 -0
  126. package/dist/cli/targetRequestFile.js +63 -0
  127. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  128. package/dist/cli/targetSecretSourceInput.js +121 -0
  129. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  130. package/dist/cli/targetWorldClockCommand.js +42 -0
  131. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  132. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  133. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  134. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  135. package/dist/cli/upCommand.d.ts +3 -0
  136. package/dist/cli/upCommand.js +133 -0
  137. package/dist/cli/upImageCommand.d.ts +11 -0
  138. package/dist/cli/upImageCommand.js +41 -0
  139. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  140. package/dist/cli/upLifecycleInvocation.js +48 -0
  141. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  142. package/dist/cli/upLifecycleRecovery.js +53 -0
  143. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  144. package/dist/compiler/agentNodeMerge.js +79 -0
  145. package/dist/compiler/agentSurfaces.js +11 -1
  146. package/dist/compiler/buildCompilePlan.js +17 -0
  147. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  148. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  149. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  150. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  151. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  152. package/dist/compiler/buildProject.d.ts +11 -0
  153. package/dist/compiler/buildProject.js +77 -2
  154. package/dist/compiler/compilePlanHelpers.js +2 -0
  155. package/dist/compiler/compileProject.d.ts +13 -0
  156. package/dist/compiler/compileProject.js +26 -74
  157. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  158. package/dist/compiler/compileProjectPolicy.js +21 -0
  159. package/dist/compiler/compileProjectReports.d.ts +9 -0
  160. package/dist/compiler/compileProjectReports.js +52 -0
  161. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  162. package/dist/compiler/containerArtifactSummaries.js +138 -0
  163. package/dist/compiler/containerArtifacts.d.ts +10 -0
  164. package/dist/compiler/containerArtifacts.js +126 -125
  165. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  166. package/dist/compiler/containerArtifactsPlans.js +31 -118
  167. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  168. package/dist/compiler/containerArtifactsRender.js +15 -12
  169. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  170. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  171. package/dist/compiler/containerConfigEnvRender.js +54 -0
  172. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  173. package/dist/compiler/containerEntrypointRender.js +56 -52
  174. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  175. package/dist/compiler/containerEntrypointShell.js +29 -0
  176. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  177. package/dist/compiler/containerPackageOverrides.js +63 -0
  178. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  179. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  180. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  181. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  182. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  183. package/dist/compiler/dockerBuildContext.js +159 -0
  184. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  185. package/dist/compiler/dockerBuildSkip.js +81 -0
  186. package/dist/compiler/index.d.ts +4 -0
  187. package/dist/compiler/index.js +4 -0
  188. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  189. package/dist/compiler/memoryArtifacts.js +134 -0
  190. package/dist/compiler/memoryResolution.d.ts +4 -0
  191. package/dist/compiler/memoryResolution.js +147 -0
  192. package/dist/compiler/modelEnv.d.ts +2 -0
  193. package/dist/compiler/modelEnv.js +6 -0
  194. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  195. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  196. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  197. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  198. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  199. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  200. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  201. package/dist/compiler/moltnetArtifacts.js +43 -97
  202. package/dist/compiler/moltnetBinaries.d.ts +21 -4
  203. package/dist/compiler/moltnetBinaries.js +134 -27
  204. package/dist/compiler/moltnetClientConfig.js +7 -2
  205. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  206. package/dist/compiler/moltnetConfigLowering.js +67 -5
  207. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  208. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  209. package/dist/compiler/moltnetNodeConfig.js +7 -2
  210. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  211. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  212. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  213. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  214. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  215. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  216. package/dist/compiler/moltnetResolution.js +72 -20
  217. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  218. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  219. package/dist/compiler/moltnetServerPlans.js +132 -0
  220. package/dist/compiler/organizationIdentity.d.ts +27 -0
  221. package/dist/compiler/organizationIdentity.js +297 -0
  222. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  223. package/dist/compiler/organizationReadyEvidence.js +261 -0
  224. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  225. package/dist/compiler/projectManifestGraph.js +24 -0
  226. package/dist/compiler/runProject.d.ts +4 -0
  227. package/dist/compiler/runProject.js +30 -21
  228. package/dist/compiler/runProjectAuth.d.ts +7 -1
  229. package/dist/compiler/runProjectAuth.js +87 -9
  230. package/dist/compiler/runProjectDocker.d.ts +7 -0
  231. package/dist/compiler/runProjectDocker.js +31 -8
  232. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  233. package/dist/compiler/runProjectLifecycle.js +40 -0
  234. package/dist/compiler/syncProjectAuth.js +4 -1
  235. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  236. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  237. package/dist/compiler/teamContextSupport.js +32 -40
  238. package/dist/compiler/teamContextTypes.d.ts +2 -0
  239. package/dist/compiler/types.d.ts +82 -1
  240. package/dist/compiler/upProject.d.ts +5 -0
  241. package/dist/compiler/upProject.js +256 -20
  242. package/dist/compiler/upReceipt.d.ts +36 -0
  243. package/dist/compiler/upReceipt.js +82 -0
  244. package/dist/compiler/updateProjectModels.js +42 -60
  245. package/dist/compiler/updateProjectRuntime.js +22 -35
  246. package/dist/compiler/updateProjectSurfaces.js +53 -47
  247. package/dist/compiler/worldBindings.d.ts +39 -0
  248. package/dist/compiler/worldBindings.js +247 -0
  249. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  250. package/dist/compiler/worldBindingsFile.js +162 -0
  251. package/dist/deployment/artifactsExport.d.ts +49 -0
  252. package/dist/deployment/artifactsExport.js +217 -0
  253. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  254. package/dist/deployment/artifactsExportDocker.js +91 -0
  255. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  256. package/dist/deployment/artifactsExportPlan.js +135 -0
  257. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  258. package/dist/deployment/artifactsExportTypes.js +52 -0
  259. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  260. package/dist/deployment/buildImageCacheStore.js +54 -0
  261. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  262. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  263. package/dist/deployment/dockerInspect.d.ts +9 -0
  264. package/dist/deployment/dockerInspect.js +24 -1
  265. package/dist/deployment/dockerLabels.d.ts +2 -0
  266. package/dist/deployment/dockerLabels.js +2 -0
  267. package/dist/deployment/dockerLogs.js +2 -10
  268. package/dist/deployment/dockerManager.d.ts +51 -0
  269. package/dist/deployment/dockerManager.js +118 -1
  270. package/dist/deployment/dockerProbeGateway.js +64 -5
  271. package/dist/deployment/dockerRecover.js +9 -1
  272. package/dist/deployment/dockerTeardown.d.ts +32 -0
  273. package/dist/deployment/dockerTeardown.js +61 -0
  274. package/dist/deployment/downDeployment.d.ts +34 -0
  275. package/dist/deployment/downDeployment.js +147 -0
  276. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  277. package/dist/deployment/downReceiptTypes.js +30 -0
  278. package/dist/deployment/index.d.ts +16 -0
  279. package/dist/deployment/index.js +17 -0
  280. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  281. package/dist/deployment/lifecycleCompletion.js +236 -0
  282. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  283. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  284. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  285. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  286. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  287. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  288. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  289. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  290. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  291. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  292. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  293. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  294. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  295. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  296. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  297. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  298. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  299. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  300. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  301. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  305. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  308. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  309. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  310. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  311. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  312. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  313. package/dist/deployment/organizationHandoffTypes.js +80 -0
  314. package/dist/deployment/organizationReady.d.ts +52 -0
  315. package/dist/deployment/organizationReady.js +200 -0
  316. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  317. package/dist/deployment/privateArtifactsExport.js +80 -0
  318. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  319. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  320. package/dist/deployment/record.d.ts +26 -1
  321. package/dist/deployment/record.js +49 -4
  322. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  323. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  324. package/dist/deployment/target.d.ts +1 -35
  325. package/dist/deployment/target.js +1 -96
  326. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  327. package/dist/deployment/upReceiptTypes.js +164 -0
  328. package/dist/dev/project.js +15 -9
  329. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  330. package/dist/distribution/buildDistributionReport.js +2 -1
  331. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  332. package/dist/distribution/distributionReportSchema.js +7 -2
  333. package/dist/distribution/index.d.ts +2 -2
  334. package/dist/distribution/index.js +1 -1
  335. package/dist/distribution/types.d.ts +7 -0
  336. package/dist/distribution/types.js +1 -0
  337. package/dist/filesystem/paths.js +10 -1
  338. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  339. package/dist/ledger/causalConformanceCli.js +41 -0
  340. package/dist/ledger/causeNamespace.d.ts +8 -0
  341. package/dist/ledger/causeNamespace.js +24 -0
  342. package/dist/ledger/conformance.d.ts +83 -0
  343. package/dist/ledger/conformance.js +259 -0
  344. package/dist/ledger/emitters.d.ts +76 -0
  345. package/dist/ledger/emitters.js +188 -0
  346. package/dist/ledger/index.d.ts +4 -0
  347. package/dist/ledger/index.js +4 -0
  348. package/dist/ledger/principal.d.ts +96 -0
  349. package/dist/ledger/principal.js +121 -0
  350. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  351. package/dist/manifest/externalParticipantSchemas.js +17 -0
  352. package/dist/manifest/index.d.ts +1 -0
  353. package/dist/manifest/index.js +1 -0
  354. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  355. package/dist/manifest/inlineAgentMember.js +9 -0
  356. package/dist/manifest/loadManifest.js +14 -8
  357. package/dist/manifest/mcpSchemas.d.ts +17 -0
  358. package/dist/manifest/mcpSchemas.js +41 -0
  359. package/dist/manifest/memorySchemas.d.ts +245 -0
  360. package/dist/manifest/memorySchemas.js +148 -0
  361. package/dist/manifest/renderSpawnfile.js +22 -131
  362. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  363. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  364. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  365. package/dist/manifest/schemas.d.ts +1868 -99
  366. package/dist/manifest/schemas.js +78 -32
  367. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  368. package/dist/manifest/surfaceSchemas.js +24 -1
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  370. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  372. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  373. package/dist/manifest/teamNetworkSchemas.js +3 -317
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  375. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  376. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  377. package/dist/ownership/siblingBuildFreshness.js +20 -0
  378. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  379. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  380. package/dist/report/types.d.ts +142 -0
  381. package/dist/runtime/common.d.ts +35 -0
  382. package/dist/runtime/common.js +55 -0
  383. package/dist/runtime/container.d.ts +28 -1
  384. package/dist/runtime/container.js +38 -5
  385. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  386. package/dist/runtime/containerPackageOverrides.js +33 -0
  387. package/dist/runtime/index.d.ts +2 -0
  388. package/dist/runtime/index.js +2 -0
  389. package/dist/runtime/mnemeMcp.d.ts +15 -0
  390. package/dist/runtime/mnemeMcp.js +109 -0
  391. package/dist/runtime/openclaw/adapter.js +15 -4
  392. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  393. package/dist/runtime/openclaw/mcp.js +69 -0
  394. package/dist/runtime/openclaw/runAuth.js +2 -2
  395. package/dist/runtime/openclaw/scaffold.js +1 -1
  396. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  397. package/dist/runtime/openclaw/schedules.js +74 -0
  398. package/dist/runtime/pi/adapter.d.ts +1 -1
  399. package/dist/runtime/pi/adapter.js +86 -53
  400. package/dist/runtime/pi/appActivitySource.js +114 -2
  401. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  402. package/dist/runtime/pi/appAgentConfig.js +264 -0
  403. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  404. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  405. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  406. package/dist/runtime/pi/appCliSource.js +353 -0
  407. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  408. package/dist/runtime/pi/appControlSource.js +390 -0
  409. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  410. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  411. package/dist/runtime/pi/appCoreSource.d.ts +4 -1
  412. package/dist/runtime/pi/appCoreSource.js +104 -214
  413. package/dist/runtime/pi/appPreludeSource.js +140 -52
  414. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  415. package/dist/runtime/pi/appScheduleSource.js +80 -0
  416. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  417. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  418. package/dist/runtime/pi/appSource.d.ts +4 -1
  419. package/dist/runtime/pi/appSource.js +6 -2
  420. package/dist/runtime/pi/appTemplate.d.ts +8 -22
  421. package/dist/runtime/pi/appTemplate.js +9 -126
  422. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  423. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  424. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  425. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  426. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  427. package/dist/runtime/pi/containerTargets.js +57 -0
  428. package/dist/runtime/pi/runAuth.js +126 -9
  429. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  430. package/dist/runtime/pi/testHelpers.js +40 -0
  431. package/dist/runtime/picoclaw/adapter.js +23 -27
  432. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  433. package/dist/runtime/picoclaw/mcp.js +43 -0
  434. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  435. package/dist/runtime/picoclaw/memory.js +17 -0
  436. package/dist/runtime/picoclaw/runAuth.js +1 -1
  437. package/dist/runtime/picoclaw/scaffold.js +1 -1
  438. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  439. package/dist/runtime/picoclaw/schedules.js +62 -3
  440. package/dist/runtime/scheduleUtils.d.ts +2 -0
  441. package/dist/runtime/scheduleUtils.js +15 -0
  442. package/dist/runtime/types.d.ts +25 -2
  443. package/dist/shared/errors.d.ts +1 -1
  444. package/dist/shared/errors.js +2 -2
  445. package/dist/shared/index.d.ts +1 -0
  446. package/dist/shared/index.js +1 -0
  447. package/dist/shared/redaction.d.ts +2 -0
  448. package/dist/shared/redaction.js +10 -0
  449. package/dist/status/buildStatus.d.ts +1 -0
  450. package/dist/status/buildStatus.js +2 -0
  451. package/dist/status/compileReport.d.ts +22 -0
  452. package/dist/status/compileReport.js +16 -2
  453. package/dist/status/compiledProbeCollection.d.ts +21 -0
  454. package/dist/status/compiledProbeCollection.js +27 -0
  455. package/dist/status/imageStatusReport.js +6 -0
  456. package/dist/status/index.d.ts +3 -0
  457. package/dist/status/index.js +3 -0
  458. package/dist/status/lifecycleProbes.d.ts +19 -0
  459. package/dist/status/lifecycleProbes.js +174 -0
  460. package/dist/status/moltnetProbes.d.ts +7 -8
  461. package/dist/status/moltnetProbes.js +27 -198
  462. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  463. package/dist/status/moltnetWiringProbes.js +178 -0
  464. package/dist/target/cleanupRun.d.ts +41 -0
  465. package/dist/target/cleanupRun.js +139 -0
  466. package/dist/target/cleanupRunDocker.d.ts +16 -0
  467. package/dist/target/cleanupRunDocker.js +66 -0
  468. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  469. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  470. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  471. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  472. package/dist/target/composedPreparation.d.ts +205 -0
  473. package/dist/target/composedPreparation.js +223 -0
  474. package/dist/target/containerBundle.d.ts +82 -0
  475. package/dist/target/containerBundle.js +243 -0
  476. package/dist/target/containerBundleArchive.d.ts +31 -0
  477. package/dist/target/containerBundleArchive.js +140 -0
  478. package/dist/target/containerBundleAuthority.d.ts +25 -0
  479. package/dist/target/containerBundleAuthority.js +65 -0
  480. package/dist/target/containerBundleContracts.d.ts +114 -0
  481. package/dist/target/containerBundleContracts.js +173 -0
  482. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  483. package/dist/target/containerBundleFilesystemStore.js +247 -0
  484. package/dist/target/containerBundlePolicy.d.ts +33 -0
  485. package/dist/target/containerBundlePolicy.js +64 -0
  486. package/dist/target/containerBundleStore.d.ts +127 -0
  487. package/dist/target/containerBundleStore.js +284 -0
  488. package/dist/target/contracts.d.ts +538 -0
  489. package/dist/target/contracts.js +373 -0
  490. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  491. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  492. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  493. package/dist/target/dockerArtifactInspection.js +125 -0
  494. package/dist/target/dockerArtifacts.d.ts +21 -0
  495. package/dist/target/dockerArtifacts.js +110 -0
  496. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  497. package/dist/target/dockerArtifactsProvider.js +449 -0
  498. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  499. package/dist/target/dockerCommandExecutor.js +200 -0
  500. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  501. package/dist/target/dockerCommandExecutorCore.js +273 -0
  502. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  503. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  504. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  505. package/dist/target/dockerContextSnapshot.js +158 -0
  506. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  507. package/dist/target/dockerEndpointFingerprint.js +9 -0
  508. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  509. package/dist/target/dockerPreparedArtifact.js +131 -0
  510. package/dist/target/dockerProjectionJson.d.ts +1 -0
  511. package/dist/target/dockerProjectionJson.js +80 -0
  512. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  513. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  514. package/dist/target/dockerResources.d.ts +26 -0
  515. package/dist/target/dockerResources.js +162 -0
  516. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  517. package/dist/target/dockerResourcesProvider.js +207 -0
  518. package/dist/target/dockerSecrets.d.ts +39 -0
  519. package/dist/target/dockerSecrets.js +249 -0
  520. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  521. package/dist/target/dockerSecretsAuthority.js +216 -0
  522. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  523. package/dist/target/dockerSecretsLifecycle.js +133 -0
  524. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  525. package/dist/target/dockerSecretsProvider.js +329 -0
  526. package/dist/target/dockerTarget.d.ts +52 -0
  527. package/dist/target/dockerTarget.js +48 -0
  528. package/dist/target/dockerTargetBinding.d.ts +14 -0
  529. package/dist/target/dockerTargetBinding.js +96 -0
  530. package/dist/target/dockerWorldClock.d.ts +17 -0
  531. package/dist/target/dockerWorldClock.js +111 -0
  532. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  533. package/dist/target/dockerWorldReadiness.js +119 -0
  534. package/dist/target/dockerWorldService.d.ts +23 -0
  535. package/dist/target/dockerWorldService.js +216 -0
  536. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  537. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  538. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  539. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  540. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  541. package/dist/target/dockerWorldServiceProvider.js +318 -0
  542. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  543. package/dist/target/dockerWorldServiceStore.js +367 -0
  544. package/dist/target/evidenceExport.d.ts +55 -0
  545. package/dist/target/evidenceExport.js +518 -0
  546. package/dist/target/evidenceExportArchive.d.ts +10 -0
  547. package/dist/target/evidenceExportArchive.js +302 -0
  548. package/dist/target/evidenceExportContract.d.ts +27 -0
  549. package/dist/target/evidenceExportContract.js +40 -0
  550. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  551. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  552. package/dist/target/evidenceExportProvider.d.ts +85 -0
  553. package/dist/target/evidenceExportProvider.js +187 -0
  554. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  555. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  556. package/dist/target/evidenceExportStore.d.ts +70 -0
  557. package/dist/target/evidenceExportStore.js +498 -0
  558. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  559. package/dist/target/evidenceExportStorePublication.js +395 -0
  560. package/dist/target/handles.d.ts +20 -0
  561. package/dist/target/handles.js +56 -0
  562. package/dist/target/index.d.ts +12 -0
  563. package/dist/target/index.js +11 -0
  564. package/dist/target/journal.d.ts +59 -0
  565. package/dist/target/journal.js +529 -0
  566. package/dist/target/journalFilesystem.d.ts +3 -0
  567. package/dist/target/journalFilesystem.js +111 -0
  568. package/dist/target/journalRoot.d.ts +4 -0
  569. package/dist/target/journalRoot.js +6 -0
  570. package/dist/target/organizationAttachment.d.ts +23 -0
  571. package/dist/target/organizationAttachment.js +263 -0
  572. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  573. package/dist/target/organizationAttachmentAuthority.js +161 -0
  574. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  575. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  576. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  577. package/dist/target/organizationAttachmentProvider.js +289 -0
  578. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  579. package/dist/target/organizationAttachmentStore.js +316 -0
  580. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  581. package/dist/target/publicArtifactSnapshot.js +150 -0
  582. package/dist/target/topologyActivation.d.ts +51 -0
  583. package/dist/target/topologyActivation.js +149 -0
  584. package/dist/target/topologyAttestation.d.ts +37 -0
  585. package/dist/target/topologyAttestation.js +300 -0
  586. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  587. package/dist/target/topologyAttestationErrors.js +1 -0
  588. package/dist/target/worldClock.d.ts +60 -0
  589. package/dist/target/worldClock.js +129 -0
  590. package/dist/target/worldReadiness.d.ts +103 -0
  591. package/dist/target/worldReadiness.js +153 -0
  592. package/moltnet-releases.json +20 -0
  593. package/package.json +27 -11
  594. package/runtimes.yaml +8 -23
  595. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  596. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  597. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  598. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -0,0 +1,6 @@
1
+ export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
2
+ export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
3
+ export type LifecycleStoreTestHookPoint = "before_missing_return" | "before_record_open" | "before_publish_link" | "before_publish_temp_open" | "before_publish_unlink";
4
+ export declare const setLifecycleStoreTestHook: (hook: ((point: LifecycleStoreTestHookPoint) => Promise<void> | void) | null) => void;
5
+ export declare const readLifecycleRecord: (file: string, links?: readonly number[]) => Promise<string | null>;
6
+ export declare const publishLifecycleRecord: (directory: string, file: string, content: string, existing?: "ignore" | "match") => Promise<boolean>;
@@ -0,0 +1,151 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { link, lstat, open, unlink } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { LIFECYCLE_RECORD_MAX_BYTES } from "./lifecycleCompletionContracts.js";
6
+ import { failLifecycleStore, resolveLifecycleCompletionDirectory } from "./lifecycleCompletionPaths.js";
7
+ import { openLifecycleAuthorityRoot, requireLifecycleRootAuthority, revalidateHeldLifecycleRoot, revalidateLifecycleRootAuthority, syncLifecycleDirectory, validateLifecycleRoot } from "./lifecycleCompletionRoot.js";
8
+ import { matchesSettledLifecyclePublication, readSettledLifecycleRecord } from "./lifecycleCompletionPublication.js";
9
+ export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
10
+ export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
11
+ const OWNER = process.getuid?.() ?? -1;
12
+ let testHook = null;
13
+ export const setLifecycleStoreTestHook = (hook) => {
14
+ testHook = hook;
15
+ };
16
+ const runTestHook = async (point) => {
17
+ await testHook?.(point);
18
+ };
19
+ const canonicalRecordPath = (file, authority) => {
20
+ const directory = path.dirname(path.resolve(file));
21
+ const configuredRoot = resolveLifecycleCompletionDirectory();
22
+ if (directory !== authority.root && directory !== configuredRoot) {
23
+ failLifecycleStore("unsafe record");
24
+ }
25
+ const base = path.basename(file);
26
+ if (base.includes(path.sep) || base === "." || base === "..") {
27
+ failLifecycleStore("unsafe record");
28
+ }
29
+ return path.join(authority.root, base);
30
+ };
31
+ export const readLifecycleRecord = async (file, links = [1]) => {
32
+ const authority = await validateLifecycleRoot(false);
33
+ if (!authority)
34
+ return null;
35
+ await revalidateLifecycleRootAuthority(authority);
36
+ const exactFile = canonicalRecordPath(file, authority);
37
+ let before;
38
+ try {
39
+ before = await lstat(exactFile);
40
+ }
41
+ catch (error) {
42
+ if (error.code === "ENOENT") {
43
+ await runTestHook("before_missing_return");
44
+ await revalidateLifecycleRootAuthority(authority);
45
+ return null;
46
+ }
47
+ failLifecycleStore("unsafe record");
48
+ }
49
+ if (!before.isFile() || before.isSymbolicLink() || before.uid !== OWNER ||
50
+ before.size > LIFECYCLE_RECORD_MAX_BYTES || (before.mode & 0o777) !== 0o600 ||
51
+ !links.includes(before.nlink)) {
52
+ failLifecycleStore("unsafe record");
53
+ }
54
+ await runTestHook("before_record_open");
55
+ await revalidateLifecycleRootAuthority(authority);
56
+ const handle = await open(exactFile, constants.O_RDONLY | constants.O_NOFOLLOW)
57
+ .catch(() => failLifecycleStore("unsafe record"));
58
+ try {
59
+ const info = await handle.stat();
60
+ if (!info.isFile() || info.uid !== OWNER || info.size > LIFECYCLE_RECORD_MAX_BYTES ||
61
+ (info.mode & 0o777) !== 0o600 || !links.includes(info.nlink)) {
62
+ failLifecycleStore("unsafe record");
63
+ }
64
+ if (before.dev !== info.dev || before.ino !== info.ino)
65
+ failLifecycleStore("record changed");
66
+ const content = await handle.readFile({ encoding: "utf8" });
67
+ const after = await lstat(exactFile).catch(() => failLifecycleStore("record changed"));
68
+ if (after.dev !== info.dev || after.ino !== info.ino)
69
+ failLifecycleStore("record changed");
70
+ await revalidateLifecycleRootAuthority(authority);
71
+ return content;
72
+ }
73
+ finally {
74
+ await handle.close().catch(() => undefined);
75
+ }
76
+ };
77
+ export const publishLifecycleRecord = async (directory, file, content, existing = "match") => {
78
+ const authority = await requireLifecycleRootAuthority();
79
+ if (path.resolve(directory) !== authority.root)
80
+ failLifecycleStore("unsafe root");
81
+ const rootHandle = await openLifecycleAuthorityRoot(authority);
82
+ try {
83
+ if (Buffer.byteLength(content) > LIFECYCLE_RECORD_MAX_BYTES) {
84
+ failLifecycleStore("oversize record");
85
+ }
86
+ const final = path.join(authority.root, file);
87
+ if (existing === "match") {
88
+ if (await matchesSettledLifecyclePublication(final, content, readLifecycleRecord))
89
+ return false;
90
+ }
91
+ else if ((await readSettledLifecycleRecord(final, readLifecycleRecord)) !== null) {
92
+ return false;
93
+ }
94
+ const temp = path.join(authority.root, `.${file}.${process.pid}.${randomUUID()}.tmp`);
95
+ let handle;
96
+ let linked = false;
97
+ try {
98
+ await runTestHook("before_publish_temp_open");
99
+ await revalidateHeldLifecycleRoot(authority, rootHandle);
100
+ handle = await open(temp, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
101
+ await handle.chmod(0o600);
102
+ await handle.writeFile(content, "utf8");
103
+ await handle.sync();
104
+ await handle.close();
105
+ handle = undefined;
106
+ try {
107
+ await runTestHook("before_publish_link");
108
+ await revalidateHeldLifecycleRoot(authority, rootHandle);
109
+ await link(temp, final);
110
+ linked = true;
111
+ await syncLifecycleDirectory(authority.root);
112
+ }
113
+ catch (error) {
114
+ if (error.code !== "EEXIST") {
115
+ failLifecycleStore("publication failed");
116
+ }
117
+ }
118
+ }
119
+ finally {
120
+ if (handle)
121
+ await handle.close().catch(() => undefined);
122
+ await runTestHook("before_publish_unlink");
123
+ await revalidateHeldLifecycleRoot(authority, rootHandle);
124
+ await unlink(temp).catch((error) => {
125
+ if (error.code !== "ENOENT")
126
+ failLifecycleStore("publication cleanup failed");
127
+ });
128
+ await syncLifecycleDirectory(authority.root);
129
+ }
130
+ if (!linked && existing === "ignore") {
131
+ if ((await readSettledLifecycleRecord(final, readLifecycleRecord)) === null) {
132
+ failLifecycleStore("publication changed");
133
+ }
134
+ return false;
135
+ }
136
+ for (let attempt = 0; attempt < 16; attempt += 1) {
137
+ const exact = await readLifecycleRecord(final, [1, 2]);
138
+ if (exact !== content)
139
+ failLifecycleStore("publication changed");
140
+ if ((await lstat(final).catch(() => null))?.nlink === 1) {
141
+ await revalidateHeldLifecycleRoot(authority, rootHandle);
142
+ return linked;
143
+ }
144
+ await new Promise((resolve) => setImmediate(resolve));
145
+ }
146
+ return failLifecycleStore("publication did not settle");
147
+ }
148
+ finally {
149
+ await rootHandle.close().catch(() => undefined);
150
+ }
151
+ };
@@ -0,0 +1,17 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export interface OrganizationHandoffAuthorityFsClientOptions {
3
+ readonly cwd: string;
4
+ readonly dev: number;
5
+ readonly ino: number;
6
+ readonly parentPid?: number;
7
+ readonly uid?: number;
8
+ readonly workerPath?: string;
9
+ readonly testOnChildStarted?: (child: ChildProcess) => void;
10
+ }
11
+ export interface OrganizationHandoffAuthorityFsClient {
12
+ create(name: string, content: string): Promise<boolean>;
13
+ dispose(): Promise<void>;
14
+ read(name: string): Promise<string | null>;
15
+ write(name: string, content: string): Promise<void>;
16
+ }
17
+ export declare const initializeOrganizationHandoffAuthorityFsClient: (options: OrganizationHandoffAuthorityFsClientOptions) => Promise<OrganizationHandoffAuthorityFsClient>;
@@ -0,0 +1,132 @@
1
+ import { fork } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { fileURLToPath } from "node:url";
4
+ const VERSION = "spawnfile.organization-handoff-fs-worker.v1";
5
+ const MAX_BYTES = 32_768;
6
+ const fail = () => { throw new Error("Organization handoff authority failed"); };
7
+ const bytes = (value) => Buffer.byteLength(value, "utf8");
8
+ const name = (value) => typeof value === "string" && /^(?:[a-f0-9]{128}|[a-f0-9]{142})\.json$/u.test(value) ? value : fail();
9
+ class Client {
10
+ #child;
11
+ #closed = false;
12
+ #next = 1;
13
+ #exited;
14
+ #pending = new Map();
15
+ constructor(child) {
16
+ this.#child = child;
17
+ let settleExit;
18
+ this.#exited = new Promise((resolve) => { settleExit = resolve; });
19
+ const settle = () => { this.rejectPending(); settleExit(); };
20
+ child.on("message", (raw) => this.message(raw));
21
+ child.on("error", () => this.rejectPending());
22
+ child.on("disconnect", () => this.rejectPending());
23
+ child.once("exit", settle);
24
+ if (child.exitCode !== null || child.signalCode !== null)
25
+ settle();
26
+ // `fork(..., { silent: true })` creates pipes. Consume them so a failing
27
+ // helper cannot block on a full pipe or accumulate stream listeners.
28
+ child.stdout?.resume();
29
+ child.stderr?.resume();
30
+ }
31
+ terminal() { return this.#child.exitCode !== null || this.#child.signalCode !== null; }
32
+ rejectPending() { for (const pending of this.#pending.values())
33
+ pending.reject(); this.#pending.clear(); }
34
+ message(raw) {
35
+ if (!raw || typeof raw !== "object")
36
+ return;
37
+ const value = raw;
38
+ if (value.version !== VERSION)
39
+ return;
40
+ if (value.ready === true)
41
+ return;
42
+ if (!Number.isSafeInteger(value.id) || typeof value.ok !== "boolean")
43
+ return;
44
+ const pending = this.#pending.get(value.id);
45
+ if (!pending)
46
+ return;
47
+ this.#pending.delete(value.id);
48
+ if (value.ok !== true || value.content !== undefined && typeof value.content !== "string"
49
+ || value.created !== undefined && typeof value.created !== "boolean")
50
+ pending.reject();
51
+ else
52
+ pending.resolve(value);
53
+ }
54
+ request(op, file, content) {
55
+ if (this.#closed || content !== undefined && bytes(content) > MAX_BYTES)
56
+ return Promise.reject(new Error("Organization handoff authority failed"));
57
+ const id = this.#next++;
58
+ const packet = { version: VERSION, id, op, name: name(file), ...(content === undefined ? {} : { content }) };
59
+ if (bytes(JSON.stringify(packet)) > MAX_BYTES)
60
+ return Promise.reject(new Error("Organization handoff authority failed"));
61
+ return new Promise((resolve, reject) => { const timer = setTimeout(() => { this.#pending.delete(id); reject(new Error("Organization handoff authority failed")); }, 3_000); this.#pending.set(id, { resolve: (value) => { clearTimeout(timer); resolve(value); }, reject: () => { clearTimeout(timer); reject(new Error("Organization handoff authority failed")); } }); if (!this.#child.send(packet)) {
62
+ clearTimeout(timer);
63
+ this.#pending.delete(id);
64
+ reject(new Error("Organization handoff authority failed"));
65
+ } });
66
+ }
67
+ async create(file, content) {
68
+ const result = await this.request("create", file, content);
69
+ return result.created === true;
70
+ }
71
+ async read(file) { return (await this.request("read", file)).content ?? null; }
72
+ async write(file, content) { await this.request("write", file, content); }
73
+ async dispose() {
74
+ if (this.#closed)
75
+ return;
76
+ this.#closed = true;
77
+ this.rejectPending();
78
+ if (!this.terminal()) {
79
+ if (this.#child.connected) {
80
+ try {
81
+ this.#child.disconnect();
82
+ }
83
+ catch { /* already disconnected */ }
84
+ }
85
+ this.#child.kill();
86
+ }
87
+ let clear;
88
+ const graceful = await Promise.race([this.#exited.then(() => true), new Promise((resolve) => {
89
+ const timer = setTimeout(() => resolve(false), 1_000);
90
+ clear = () => clearTimeout(timer);
91
+ })]);
92
+ clear?.();
93
+ if (!graceful && !this.terminal())
94
+ this.#child.kill("SIGKILL");
95
+ await this.#exited;
96
+ this.#child.stdout?.destroy();
97
+ this.#child.stderr?.destroy();
98
+ }
99
+ }
100
+ export const initializeOrganizationHandoffAuthorityFsClient = async (options) => {
101
+ const source = import.meta.url.endsWith(".ts");
102
+ const workerPath = options.workerPath ?? fileURLToPath(new URL(source ? "./organizationHandoffAuthorityFsWorker.ts" : "./organizationHandoffAuthorityFsWorker.js", import.meta.url));
103
+ const tsWorker = workerPath.endsWith(".ts");
104
+ // The helper's cwd is the protected state directory, which is intentionally
105
+ // outside the repository. Resolve the source loader before changing cwd so
106
+ // source-mode tests do not depend on module lookup from that directory.
107
+ const tsxLoader = tsWorker ? createRequire(import.meta.url).resolve("tsx") : undefined;
108
+ const child = fork(workerPath, [], { cwd: options.cwd, env: { SPAWNFILE_AUTHORITY_FS_ANCHOR: JSON.stringify({ dev: options.dev, ino: options.ino, uid: options.uid, parent_pid: options.parentPid ?? process.pid }) }, silent: true, ...(tsxLoader === undefined ? {} : { execArgv: ["--import", tsxLoader] }) });
109
+ const client = new Client(child);
110
+ options.testOnChildStarted?.(child);
111
+ try {
112
+ await new Promise((resolve, reject) => {
113
+ let timer;
114
+ const message = (raw) => { if (typeof raw === "object" && raw !== null && raw.ready === true)
115
+ doneResolve(); };
116
+ const exited = () => doneReject();
117
+ const errored = () => doneReject();
118
+ const clean = () => { clearTimeout(timer); child.off("message", message); child.off("exit", exited); child.off("error", errored); };
119
+ function doneResolve() { clean(); resolve(); }
120
+ function doneReject() { clean(); reject(new Error("Organization handoff authority failed")); }
121
+ timer = setTimeout(doneReject, 3_000);
122
+ child.on("message", message);
123
+ child.once("exit", exited);
124
+ child.once("error", errored);
125
+ });
126
+ return client;
127
+ }
128
+ catch {
129
+ await client.dispose();
130
+ return fail();
131
+ }
132
+ };
@@ -0,0 +1,285 @@
1
+ import { constants } from "node:fs";
2
+ import { link, lstat, open, unlink } from "node:fs/promises";
3
+ const VERSION = "spawnfile.organization-handoff-fs-worker.v1";
4
+ const MAX_BYTES = 32_768;
5
+ // Store keys encode either a 64-character pending key or a 71-character
6
+ // `opaque_` handoff handle. No other leaf namespace is reachable.
7
+ const NAME = /^(?:[a-f0-9]{128}|[a-f0-9]{142})\.json$/u;
8
+ const owner = typeof process.getuid === "function" ? process.getuid() : undefined;
9
+ const fail = () => { throw new Error("Organization handoff authority failed"); };
10
+ const bytes = (value) => Buffer.byteLength(value, "utf8");
11
+ const waitForPublisher = async () => new Promise((resolve) => setTimeout(resolve, 2));
12
+ const validName = (value) => typeof value === "string" && NAME.test(value) ? value : fail();
13
+ const validRequest = (raw) => {
14
+ if (!raw || typeof raw !== "object" || Array.isArray(raw) || Object.getPrototypeOf(raw) !== Object.prototype)
15
+ return fail();
16
+ const value = raw;
17
+ if (value.version !== VERSION || !Number.isSafeInteger(value.id) || typeof value.op !== "string" || (value.op !== "read" && value.op !== "write" && value.op !== "create"))
18
+ return fail();
19
+ const content = value.content;
20
+ const keys = Object.keys(value).sort();
21
+ const expected = value.op === "read" ? ["id", "name", "op", "version"] : ["content", "id", "name", "op", "version"];
22
+ if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index]))
23
+ return fail();
24
+ if (content !== undefined && (typeof content !== "string" || bytes(content) > MAX_BYTES))
25
+ return fail();
26
+ return { version: VERSION, id: value.id, op: value.op, name: validName(value.name), ...(content === undefined ? {} : { content }) };
27
+ };
28
+ const send = (value) => {
29
+ const serialized = JSON.stringify(value);
30
+ if (bytes(serialized) > MAX_BYTES || typeof process.send !== "function")
31
+ process.exit(1);
32
+ process.send(JSON.parse(serialized));
33
+ };
34
+ const statFile = async (name) => {
35
+ const stat = await lstat(name).catch((error) => error.code === "ENOENT" ? null : fail());
36
+ if (stat === null)
37
+ return null;
38
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink > 2 || stat.size > MAX_BYTES || (stat.mode & 0o077) !== 0
39
+ || owner !== undefined && stat.uid !== owner)
40
+ return fail();
41
+ return stat;
42
+ };
43
+ const read = async (name) => {
44
+ let before = await statFile(name);
45
+ if (before === null)
46
+ return null;
47
+ if (before.nlink === 2) {
48
+ const aliases = [
49
+ `${name}.pending`, `${name}.recovery`,
50
+ ...(name.endsWith(".pending") ? [name.slice(0, -".pending".length)] : []),
51
+ ...(name.endsWith(".recovery") ? [name.slice(0, -".recovery".length)] : [])
52
+ ];
53
+ let match;
54
+ for (const alias of aliases) {
55
+ const stat = await lstat(alias).catch((error) => error.code === "ENOENT" ? null : fail());
56
+ if (stat && stat.isFile() && !stat.isSymbolicLink() && stat.nlink === 2 && stat.dev === before.dev && stat.ino === before.ino) {
57
+ if (match)
58
+ return fail();
59
+ match = alias;
60
+ }
61
+ }
62
+ if (!match) {
63
+ // The counterpart can be unlinked between the two lstat calls by the
64
+ // helper that won this link election. Re-read only if that left this
65
+ // same checked file with its ordinary single link.
66
+ const current = await statFile(name);
67
+ if (current === null)
68
+ return null;
69
+ if (current.nlink !== 1)
70
+ return fail();
71
+ before = current;
72
+ }
73
+ // Reading the canonical record completes a crashed publisher. An
74
+ // intermediate-name reader may be racing that publisher, so it merely
75
+ // observes the linked content and lets its normal publish path converge.
76
+ if (match && !name.endsWith(".pending") && !name.endsWith(".recovery")) {
77
+ await unlink(match).catch((error) => { if (error.code !== "ENOENT")
78
+ fail(); });
79
+ await sync();
80
+ before = await statFile(name);
81
+ if (before === null)
82
+ return fail();
83
+ }
84
+ }
85
+ const handle = await open(name, constants.O_RDONLY | constants.O_NOFOLLOW).catch((error) => error.code === "ENOENT" ? null : fail());
86
+ if (handle === null)
87
+ return null;
88
+ try {
89
+ const stat = await handle.stat();
90
+ // A simultaneous helper may complete the observed link publication while
91
+ // this descriptor is open, reducing nlink from two to one. That is the
92
+ // sole permitted link-count transition; inode, device, size, and all
93
+ // increases remain fail-closed.
94
+ if (!stat.isFile() || stat.nlink < 1 || stat.nlink > before.nlink || stat.dev !== before.dev || stat.ino !== before.ino || stat.size !== before.size)
95
+ return fail();
96
+ return await handle.readFile({ encoding: "utf8" });
97
+ }
98
+ catch {
99
+ return fail();
100
+ }
101
+ finally {
102
+ await handle.close().catch(() => undefined);
103
+ }
104
+ };
105
+ const sync = async () => { const handle = await open(".", constants.O_RDONLY | constants.O_DIRECTORY).catch(fail); try {
106
+ await handle.sync();
107
+ }
108
+ finally {
109
+ await handle.close().catch(() => undefined);
110
+ } };
111
+ const expectedElectionState = async (name) => {
112
+ let stat = await statFile(name);
113
+ if (stat === null)
114
+ return null;
115
+ if (stat.nlink === 1)
116
+ return true;
117
+ const aliases = [
118
+ `${name}.pending`, `${name}.recovery`,
119
+ ...(name.endsWith(".pending") ? [name.slice(0, -".pending".length)] : []),
120
+ ...(name.endsWith(".recovery") ? [name.slice(0, -".recovery".length)] : [])
121
+ ];
122
+ for (const alias of aliases) {
123
+ const counterpart = await lstat(alias).catch((error) => error.code === "ENOENT" ? null : fail());
124
+ if (counterpart?.isFile() && !counterpart.isSymbolicLink() && counterpart.nlink === 2 && counterpart.dev === stat.dev && counterpart.ino === stat.ino)
125
+ return true;
126
+ }
127
+ // The counterpart may have disappeared just before this check. Accept only
128
+ // the resulting ordinary single-link state, never an unknown hard link.
129
+ stat = await statFile(name);
130
+ return stat?.nlink === 1;
131
+ };
132
+ const readDuringPublication = async (name, attempt = 0) => {
133
+ try {
134
+ return await read(name);
135
+ }
136
+ catch {
137
+ // Re-validate the leaf before retrying. This permits only a checked,
138
+ // ordinary one/two-link publication race; symlinks, mode/owner drift,
139
+ // extra links, and other malformed states still fail immediately.
140
+ const election = await expectedElectionState(name);
141
+ if (election === null)
142
+ return null;
143
+ if (attempt >= 32 || election !== true)
144
+ return fail();
145
+ await waitForPublisher();
146
+ return readDuringPublication(name, attempt + 1);
147
+ }
148
+ };
149
+ const write = async (name, content, attempt = 0) => {
150
+ if (attempt > 32)
151
+ return fail();
152
+ const joinOrRetry = async () => {
153
+ const published = await readDuringPublication(name);
154
+ if (published !== null) {
155
+ if (published !== content)
156
+ return fail();
157
+ return false;
158
+ }
159
+ await waitForPublisher();
160
+ return write(name, content, attempt + 1);
161
+ };
162
+ const existing = await readDuringPublication(name);
163
+ if (existing !== null) {
164
+ if (existing !== content)
165
+ fail();
166
+ return false;
167
+ }
168
+ const pending = `${name}.pending`;
169
+ const recovery = `${name}.recovery`;
170
+ const incomplete = await readDuringPublication(pending);
171
+ if (incomplete !== null && incomplete !== content && !content.startsWith(incomplete))
172
+ return fail();
173
+ if (incomplete !== null && incomplete !== content) {
174
+ const recovered = await readDuringPublication(recovery);
175
+ if (recovered !== null && recovered !== content)
176
+ return fail();
177
+ if (recovered === null) {
178
+ const handle = await open(recovery, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600).catch((error) => error.code === "EEXIST" ? null : fail());
179
+ if (handle === null) {
180
+ await waitForPublisher();
181
+ return write(name, content, attempt + 1);
182
+ }
183
+ try {
184
+ await handle.writeFile(content, "utf8");
185
+ await handle.sync();
186
+ }
187
+ finally {
188
+ await handle.close().catch(() => undefined);
189
+ }
190
+ const staged = await readDuringPublication(recovery);
191
+ if (staged === null && await readDuringPublication(name) === content)
192
+ return false;
193
+ if (staged !== content)
194
+ return fail();
195
+ await sync();
196
+ }
197
+ const recoveredLinked = await link(recovery, name).then(() => true).catch((error) => {
198
+ if (error.code === "EEXIST")
199
+ return false;
200
+ if (error.code === "ENOENT")
201
+ return null;
202
+ return fail();
203
+ });
204
+ if (recoveredLinked !== true)
205
+ return joinOrRetry();
206
+ await sync();
207
+ await unlink(recovery).catch((error) => { if (error.code !== "ENOENT")
208
+ fail(); });
209
+ await sync();
210
+ if (await readDuringPublication(name) !== content)
211
+ fail();
212
+ return true;
213
+ }
214
+ if (incomplete === null) {
215
+ const handle = await open(pending, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600).catch((error) => error.code === "EEXIST" ? null : fail());
216
+ if (handle === null) {
217
+ await waitForPublisher();
218
+ return write(name, content, attempt + 1);
219
+ }
220
+ try {
221
+ await handle.writeFile(content, "utf8");
222
+ await handle.sync();
223
+ }
224
+ finally {
225
+ await handle.close().catch(() => undefined);
226
+ }
227
+ const staged = await readDuringPublication(pending);
228
+ if (staged === null && await readDuringPublication(name) === content)
229
+ return false;
230
+ if (staged !== content)
231
+ return fail();
232
+ await sync();
233
+ }
234
+ const linked = await link(pending, name).then(() => true).catch((error) => {
235
+ if (error.code === "EEXIST")
236
+ return false;
237
+ if (error.code === "ENOENT")
238
+ return null;
239
+ return fail();
240
+ });
241
+ if (linked !== true)
242
+ return joinOrRetry();
243
+ await sync();
244
+ await unlink(pending).catch((error) => { if (error.code !== "ENOENT")
245
+ fail(); });
246
+ await sync();
247
+ if (await readDuringPublication(name) !== content)
248
+ fail();
249
+ return true;
250
+ };
251
+ let anchor;
252
+ let queue = Promise.resolve();
253
+ const start = async () => {
254
+ const raw = process.env.SPAWNFILE_AUTHORITY_FS_ANCHOR;
255
+ if (!raw)
256
+ return fail();
257
+ const expected = JSON.parse(raw);
258
+ const stat = await lstat(".");
259
+ if (!stat.isDirectory() || stat.isSymbolicLink() || stat.dev !== expected.dev || stat.ino !== expected.ino
260
+ || (stat.mode & 0o077) !== 0 || owner !== undefined && stat.uid !== expected.uid
261
+ || !Number.isSafeInteger(expected.parent_pid) || expected.parent_pid < 1 || process.ppid !== expected.parent_pid)
262
+ return fail();
263
+ anchor = expected;
264
+ send({ version: VERSION, ready: true });
265
+ };
266
+ process.on("message", (raw) => {
267
+ queue = queue.then(async () => {
268
+ const request = validRequest(raw);
269
+ if (!anchor)
270
+ return fail();
271
+ const stat = await lstat(".");
272
+ if (stat.dev !== anchor.dev || stat.ino !== anchor.ino || (stat.mode & 0o077) !== 0)
273
+ return fail();
274
+ const result = request.op === "read"
275
+ ? { content: await read(request.name) }
276
+ : { created: request.content === undefined ? fail() : await write(request.name, request.content) };
277
+ send({ version: VERSION, id: request.id, ok: true, ...(result.content === null ? {} : { content: result.content }), ...(request.op === "create" ? { created: result.created } : {}) });
278
+ }).catch(() => send({ version: VERSION, id: typeof raw === "object" && raw !== null && Number.isSafeInteger(raw.id) ? raw.id : 0, ok: false }));
279
+ });
280
+ process.on("disconnect", () => process.exit(0));
281
+ // IPC disconnect covers a cooperative parent shutdown. ppid surveillance also
282
+ // covers abrupt parent death, where an orphan might otherwise retain its cwd.
283
+ setInterval(() => { if (!anchor || process.ppid !== anchor.parent_pid)
284
+ process.exit(0); }, 100).unref();
285
+ void start().catch(() => process.exit(1));
@@ -0,0 +1,26 @@
1
+ import { fork } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { lstat } from "node:fs/promises";
4
+ import { fileURLToPath } from "node:url";
5
+ const directory = process.argv[2];
6
+ if (typeof directory !== "string")
7
+ process.exit(1);
8
+ const stat = await lstat(directory).catch(() => undefined);
9
+ if (!stat?.isDirectory())
10
+ process.exit(1);
11
+ const worker = fork(fileURLToPath(new URL("./organizationHandoffAuthorityFsWorker.ts", import.meta.url)), [], {
12
+ cwd: directory,
13
+ env: { SPAWNFILE_AUTHORITY_FS_ANCHOR: JSON.stringify({ dev: stat.dev, ino: stat.ino, uid: typeof process.getuid === "function" ? process.getuid() : undefined, parent_pid: process.pid }) },
14
+ execArgv: ["--import", createRequire(import.meta.url).resolve("tsx")],
15
+ silent: true
16
+ });
17
+ worker.stdout?.resume();
18
+ worker.stderr?.resume();
19
+ worker.once("message", (message) => {
20
+ if (message?.ready !== true || typeof process.send !== "function")
21
+ process.exit(1);
22
+ process.send({ worker_pid: worker.pid });
23
+ });
24
+ // Keep the fixture parent alive until the test kills it; the worker must then
25
+ // notice its changed ppid and exit on its own.
26
+ setInterval(() => undefined, 1_000);
@@ -0,0 +1,41 @@
1
+ import { createOrganizationHandoffCapabilityPending, type OrganizationHandoffCapabilityFinalized, type OrganizationHandoffCapabilityPending, type OrganizationHandoffDockerObservation } from "./organizationHandoffAuthorityTypes.js";
2
+ import { type OrganizationHandoffAuthorityFsClient, type OrganizationHandoffAuthorityFsClientOptions } from "./organizationHandoffAuthorityFsClient.js";
3
+ export declare const resolveOrganizationHandoffAuthorityRoot: () => string;
4
+ export interface OrganizationHandoffAuthorityStore {
5
+ begin(input: Parameters<typeof createOrganizationHandoffCapabilityPending>[0]): Promise<{
6
+ readonly created: boolean;
7
+ readonly pending: OrganizationHandoffCapabilityPending;
8
+ }>;
9
+ close(input: {
10
+ readonly expectedHandoff: unknown;
11
+ readonly organizationHandoffHandle: unknown;
12
+ }): Promise<void>;
13
+ dispose(): Promise<void>;
14
+ finalize(pendingKey: unknown, container: {
15
+ readonly containerId: unknown;
16
+ readonly deploymentLabels: unknown;
17
+ }): Promise<OrganizationHandoffCapabilityFinalized>;
18
+ observeDockerMutation(pendingKey: unknown, container: {
19
+ readonly containerId: unknown;
20
+ readonly deploymentLabels: unknown;
21
+ readonly imageId: unknown;
22
+ }): Promise<OrganizationHandoffDockerObservation>;
23
+ readDockerMutation(pendingKey: unknown): Promise<OrganizationHandoffDockerObservation | null>;
24
+ reserve(input: Parameters<typeof createOrganizationHandoffCapabilityPending>[0]): Promise<OrganizationHandoffCapabilityPending>;
25
+ resolver: {
26
+ resolve(input: {
27
+ authorization: unknown;
28
+ signal?: AbortSignal;
29
+ }): Promise<unknown>;
30
+ };
31
+ }
32
+ export interface OrganizationHandoffAuthorityStoreTestHooks {
33
+ beforeLeafOperation?(kind: "close" | "finalize" | "reserve" | "resolve"): Promise<void>;
34
+ duringLeafOperation?(kind: "reserve", operation: () => Promise<void>): Promise<void>;
35
+ }
36
+ export interface OrganizationHandoffAuthorityStoreInitializeOptions {
37
+ readonly testHooks?: OrganizationHandoffAuthorityStoreTestHooks;
38
+ readonly testInitializeFsClient?: (options: OrganizationHandoffAuthorityFsClientOptions) => Promise<OrganizationHandoffAuthorityFsClient>;
39
+ readonly workerPath?: string;
40
+ }
41
+ export declare const initializeOrganizationHandoffAuthorityStore: (options?: OrganizationHandoffAuthorityStoreInitializeOptions) => Promise<OrganizationHandoffAuthorityStore>;