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,80 @@
1
+ const fail = () => { throw new Error("Invalid Docker projection JSON"); };
2
+ const skipWhitespace = (source, index) => {
3
+ while (index < source.length && /[\t\n\r ]/u.test(source[index]))
4
+ index += 1;
5
+ return index;
6
+ };
7
+ const stringEnd = (source, start) => {
8
+ let index = start + 1;
9
+ while (index < source.length) {
10
+ if (source[index] === "\\") {
11
+ index += 2;
12
+ continue;
13
+ }
14
+ if (source[index] === "\"")
15
+ return index + 1;
16
+ index += 1;
17
+ }
18
+ return fail();
19
+ };
20
+ const duplicateFreeValue = (source, start) => {
21
+ let index = skipWhitespace(source, start);
22
+ const token = source[index];
23
+ if (token === "\"")
24
+ return stringEnd(source, index);
25
+ if (token === "{") {
26
+ index = skipWhitespace(source, index + 1);
27
+ const keys = new Set();
28
+ if (source[index] === "}")
29
+ return index + 1;
30
+ while (true) {
31
+ if (source[index] !== "\"")
32
+ return fail();
33
+ const end = stringEnd(source, index);
34
+ const key = JSON.parse(source.slice(index, end));
35
+ if (keys.has(key))
36
+ return fail();
37
+ keys.add(key);
38
+ index = skipWhitespace(source, end);
39
+ if (source[index] !== ":")
40
+ return fail();
41
+ index = duplicateFreeValue(source, index + 1);
42
+ index = skipWhitespace(source, index);
43
+ if (source[index] === "}")
44
+ return index + 1;
45
+ if (source[index] !== ",")
46
+ return fail();
47
+ index = skipWhitespace(source, index + 1);
48
+ }
49
+ }
50
+ if (token === "[") {
51
+ index = skipWhitespace(source, index + 1);
52
+ if (source[index] === "]")
53
+ return index + 1;
54
+ while (true) {
55
+ index = duplicateFreeValue(source, index);
56
+ index = skipWhitespace(source, index);
57
+ if (source[index] === "]")
58
+ return index + 1;
59
+ if (source[index] !== ",")
60
+ return fail();
61
+ index = skipWhitespace(source, index + 1);
62
+ }
63
+ }
64
+ while (index < source.length && !/[\t\n\r ,}\]]/u.test(source[index]))
65
+ index += 1;
66
+ if (index === start)
67
+ return fail();
68
+ return index;
69
+ };
70
+ export const parseDuplicateFreeDockerProjection = (source) => {
71
+ try {
72
+ const end = duplicateFreeValue(source, 0);
73
+ if (skipWhitespace(source, end) !== source.length)
74
+ return null;
75
+ return JSON.parse(source);
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ };
@@ -0,0 +1,17 @@
1
+ import type { DockerTargetExecutors } from "./dockerCommandExecutor.js";
2
+ import { type TargetPublicArtifactSnapshot } from "./publicArtifactSnapshot.js";
3
+ import { type DockerWorldServiceExecutor } from "./dockerWorldServiceProvider.js";
4
+ import type { WorldServiceAuthorityStore } from "./dockerWorldServiceStore.js";
5
+ export declare const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_ERROR = "Target public artifact snapshot failed";
6
+ export interface DockerPublicArtifactSnapshotOptions {
7
+ readonly authorityStore: WorldServiceAuthorityStore;
8
+ readonly context: string;
9
+ readonly contentExecutor: DockerTargetExecutors["publicArtifact"];
10
+ readonly executor: DockerWorldServiceExecutor;
11
+ readonly signal?: AbortSignal;
12
+ readonly timeoutMs: number;
13
+ }
14
+ export interface PublicArtifactSnapshotReader {
15
+ snapshot(raw: unknown): Promise<TargetPublicArtifactSnapshot>;
16
+ }
17
+ export declare const createDockerPublicArtifactSnapshotReader: (options: DockerPublicArtifactSnapshotOptions) => PublicArtifactSnapshotReader;
@@ -0,0 +1,99 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { createTargetPublicArtifactSnapshot, parseTargetPublicArtifactSnapshotRequest } from "./publicArtifactSnapshot.js";
3
+ import { inspectDockerWorldService, sameWorldServiceValue, worldServiceSpecForBinding } from "./dockerWorldServiceLifecycle.js";
4
+ export const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_ERROR = "Target public artifact snapshot failed";
5
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
6
+ const fail = () => {
7
+ throw new SpawnfileError("runtime_error", TARGET_PUBLIC_ARTIFACT_SNAPSHOT_ERROR);
8
+ };
9
+ const validOptions = (raw) => {
10
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)
11
+ || typeof raw.context !== "string" || !CONTEXT_PATTERN.test(raw.context)
12
+ || typeof raw.contentExecutor !== "function"
13
+ || typeof raw.executor !== "function"
14
+ || !raw.authorityStore || typeof raw.authorityStore.loadService !== "function"
15
+ || !Number.isSafeInteger(raw.timeoutMs) || raw.timeoutMs < 1
16
+ || raw.timeoutMs > 120_000
17
+ || raw.signal !== undefined && !(raw.signal instanceof AbortSignal))
18
+ return fail();
19
+ return raw;
20
+ };
21
+ const exactBinding = async (request, options) => {
22
+ const binding = await options.authorityStore.loadService(request.world_service_handle);
23
+ const authorization = binding.resolution.authorization;
24
+ if (binding.world_service_handle !== request.world_service_handle
25
+ || authorization.run_id !== request.run_id
26
+ || authorization.descriptor_digest !== request.descriptor_digest
27
+ || !sameWorldServiceValue(authorization.selected_target, request.selected_target))
28
+ return fail();
29
+ return binding;
30
+ };
31
+ const readPublicArtifact = async (containerId, request, options) => {
32
+ try {
33
+ const resolved = await options.contentExecutor("docker", [
34
+ "--context", options.context,
35
+ "container", "exec",
36
+ containerId,
37
+ "/usr/bin/readlink",
38
+ "-e",
39
+ request.artifact.path
40
+ ], {
41
+ signal: options.signal,
42
+ timeout: options.timeoutMs
43
+ });
44
+ if (!resolved || !(resolved.bytes instanceof Uint8Array))
45
+ return fail();
46
+ const resolvedPath = new TextDecoder("utf-8", { fatal: true })
47
+ .decode(resolved.bytes);
48
+ // Reject the final file and every parent alias. The world may publish only
49
+ // the exact regular path that its descriptor declared, never a symlink
50
+ // into private evidence, credentials, or another runtime surface.
51
+ if (resolvedPath !== `${request.artifact.path}\n`)
52
+ return fail();
53
+ const result = await options.contentExecutor("docker", [
54
+ "--context", options.context,
55
+ "container", "exec",
56
+ containerId,
57
+ "/bin/cat",
58
+ request.artifact.path
59
+ ], {
60
+ signal: options.signal,
61
+ timeout: options.timeoutMs
62
+ });
63
+ if (!result || !(result.bytes instanceof Uint8Array)
64
+ || result.bytes.byteLength > request.artifact.max_bytes)
65
+ return fail();
66
+ return Uint8Array.from(result.bytes);
67
+ }
68
+ catch {
69
+ return fail();
70
+ }
71
+ };
72
+ class DockerPublicArtifactSnapshotReader {
73
+ #options;
74
+ constructor(options) {
75
+ this.#options = validOptions(options);
76
+ }
77
+ async snapshot(raw) {
78
+ let request;
79
+ try {
80
+ request = parseTargetPublicArtifactSnapshotRequest(raw);
81
+ }
82
+ catch {
83
+ return fail();
84
+ }
85
+ const binding = await exactBinding(request, this.#options).catch(fail);
86
+ const spec = worldServiceSpecForBinding(binding);
87
+ const before = await inspectDockerWorldService(binding.container_id, spec, this.#options).catch(fail);
88
+ if (!before || before.containerId !== binding.container_id
89
+ || before.status !== "running")
90
+ return fail();
91
+ const content = await readPublicArtifact(binding.container_id, request, this.#options);
92
+ const after = await inspectDockerWorldService(binding.container_id, spec, this.#options).catch(fail);
93
+ if (!after || after.containerId !== before.containerId
94
+ || after.status !== "running")
95
+ return fail();
96
+ return createTargetPublicArtifactSnapshot({ content, request });
97
+ }
98
+ }
99
+ export const createDockerPublicArtifactSnapshotReader = (options) => new DockerPublicArtifactSnapshotReader(options);
@@ -0,0 +1,26 @@
1
+ import { type TargetResourceReceipt } from "./contracts.js";
2
+ import { type TargetJournalStore } from "./journal.js";
3
+ import { type DockerResourceExecutor, type DockerResourceSpec } from "./dockerResourcesProvider.js";
4
+ export interface DockerResourceOperationsOptions {
5
+ readonly context: unknown;
6
+ readonly executor: DockerResourceExecutor;
7
+ readonly journal: TargetJournalStore;
8
+ readonly signal?: AbortSignal;
9
+ readonly timeoutMs?: unknown;
10
+ }
11
+ export interface DockerResourceOperations {
12
+ execute(raw: unknown): Promise<{
13
+ readonly receipt: TargetResourceReceipt;
14
+ readonly receiptBytes: string;
15
+ }>;
16
+ }
17
+ export interface DockerResourceCleanupOptions {
18
+ readonly context: string;
19
+ readonly executor: DockerResourceExecutor;
20
+ readonly signal?: AbortSignal;
21
+ readonly timeoutMs: number;
22
+ }
23
+ export declare const proveExactDockerResourcePresent: (spec: DockerResourceSpec, options: DockerResourceCleanupOptions) => Promise<void>;
24
+ export declare const removeExactDockerResource: (spec: DockerResourceSpec, options: DockerResourceCleanupOptions) => Promise<void>;
25
+ export declare const createDockerResourceOperations: (options: DockerResourceOperationsOptions) => DockerResourceOperations;
26
+ export declare const createDockerResources: (options: DockerResourceOperationsOptions) => DockerResourceOperations;
@@ -0,0 +1,162 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { parseTargetResourceRequest } from "./contracts.js";
3
+ import { selectTarget } from "./dockerTarget.js";
4
+ import { createTargetReceiptDigest } from "./handles.js";
5
+ import { DOCKER_RESOURCE_ERROR, DockerResourceProviderError, createDockerResourceSpec, executeDockerResource, isCanonicalDockerResourceSpec, isExpectedDockerResource } from "./dockerResourcesProvider.js";
6
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
7
+ const fail = () => { throw new SpawnfileError("runtime_error", DOCKER_RESOURCE_ERROR); };
8
+ const validOptions = (raw) => {
9
+ if (typeof raw.context !== "string" || !CONTEXT_PATTERN.test(raw.context)
10
+ || typeof raw.executor !== "function" || !raw.journal
11
+ || typeof raw.timeoutMs !== "undefined" && (typeof raw.timeoutMs !== "number" || !Number.isSafeInteger(raw.timeoutMs) || raw.timeoutMs < 1 || raw.timeoutMs > 120_000))
12
+ fail();
13
+ return { context: raw.context, executor: raw.executor, journal: raw.journal, signal: raw.signal, timeoutMs: (raw.timeoutMs ?? 10_000) };
14
+ };
15
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
16
+ const parseResourceRequest = (raw) => {
17
+ const request = parseTargetResourceRequest(raw);
18
+ if (request.operation !== "create_data_network" && request.operation !== "create_evidence_volume")
19
+ fail();
20
+ return request;
21
+ };
22
+ const selectedContextMatches = async (request, options) => {
23
+ const selected = await selectTarget({
24
+ context: options.context, dockerCommand: "docker",
25
+ execFile: async (_file, args, commandOptions) => executeDockerResource({ args, executor: options.executor, signal: commandOptions.signal, timeoutMs: commandOptions.timeout }),
26
+ signal: options.signal, timeoutMs: options.timeoutMs
27
+ });
28
+ if (!same({ fingerprint: selected.fingerprint, handle: selected.handle }, request.selected_target))
29
+ fail();
30
+ };
31
+ const receiptFor = async (input) => {
32
+ const revision = (await input.journal.read()).revision + 1;
33
+ const labels = Object.entries(createDockerResourceSpec({
34
+ kind: input.kind, operationHandle: input.claim.operationHandle,
35
+ requestDigest: input.claim.requestDigest, runId: input.request.run_id, selectedTargetHandle: input.request.selected_target.handle
36
+ }).labels).map(([key, value]) => ({ key, value }));
37
+ const raw = {
38
+ cleanup_state: "not_requested", descriptor_digest: input.request.descriptor_digest, export_state: "not_requested",
39
+ labels, operation: input.request.operation, operation_handle: input.claim.operationHandle,
40
+ receipt_digest: `sha256:${"0".repeat(64)}`, request_digest: input.claim.requestDigest,
41
+ result_handle: input.resultHandle, resulting_revision: revision, run_id: input.request.run_id,
42
+ selected_target: input.request.selected_target, version: "spawnfile.target-resource.receipt.v1"
43
+ };
44
+ return { ...raw, receipt_digest: createTargetReceiptDigest(raw) };
45
+ };
46
+ const inspect = async (spec, options) => {
47
+ try {
48
+ const result = await executeDockerResource({ args: ["--context", options.context, spec.kind === "data_network" ? "network" : "volume", "inspect", "--format", spec.inspectionFormat, spec.name], executor: options.executor, signal: options.signal, timeoutMs: options.timeoutMs });
49
+ if (!isExpectedDockerResource(result.stdout, spec))
50
+ fail();
51
+ return "present";
52
+ }
53
+ catch (error) {
54
+ if (error instanceof DockerResourceProviderError && error.kind === "not_found")
55
+ return "absent";
56
+ throw error;
57
+ }
58
+ };
59
+ const validateCleanupAuthority = (spec, options) => {
60
+ if (!isCanonicalDockerResourceSpec(spec)
61
+ || !options || typeof options.context !== "string" || !CONTEXT_PATTERN.test(options.context)
62
+ || typeof options.executor !== "function" || !Number.isSafeInteger(options.timeoutMs)
63
+ || options.timeoutMs < 1 || options.timeoutMs > 120_000)
64
+ return fail();
65
+ };
66
+ export const proveExactDockerResourcePresent = async (spec, options) => {
67
+ try {
68
+ validateCleanupAuthority(spec, options);
69
+ if (await inspect(spec, options) !== "present")
70
+ return fail();
71
+ }
72
+ catch {
73
+ return fail();
74
+ }
75
+ };
76
+ export const removeExactDockerResource = async (spec, options) => {
77
+ try {
78
+ validateCleanupAuthority(spec, options);
79
+ if (await inspect(spec, options) === "absent")
80
+ return;
81
+ let removalError;
82
+ let removalResult;
83
+ try {
84
+ removalResult = await executeDockerResource({
85
+ args: ["--context", options.context,
86
+ spec.kind === "data_network" ? "network" : "volume", "rm", spec.name],
87
+ executor: options.executor,
88
+ signal: options.signal,
89
+ timeoutMs: options.timeoutMs
90
+ });
91
+ }
92
+ catch (error) {
93
+ removalError = error;
94
+ }
95
+ if (removalResult
96
+ && (removalResult.stderr !== "" || removalResult.stdout !== `${spec.name}\n`))
97
+ return fail();
98
+ if (await inspect(spec, options) !== "absent") {
99
+ if (removalError)
100
+ throw removalError;
101
+ return fail();
102
+ }
103
+ }
104
+ catch {
105
+ return fail();
106
+ }
107
+ };
108
+ const create = async (spec, options) => {
109
+ try {
110
+ await executeDockerResource({ args: ["--context", options.context, ...spec.args], executor: options.executor, signal: options.signal, timeoutMs: options.timeoutMs });
111
+ }
112
+ catch (error) {
113
+ if (!(error instanceof DockerResourceProviderError) || error.kind !== "collision")
114
+ throw error;
115
+ if (await inspect(spec, options) !== "present")
116
+ fail();
117
+ }
118
+ };
119
+ class DockerResourceOperationsImpl {
120
+ #options;
121
+ #live = new Map();
122
+ constructor(options) { this.#options = options; }
123
+ execute(raw) {
124
+ let request;
125
+ try {
126
+ request = parseResourceRequest(raw);
127
+ }
128
+ catch {
129
+ return Promise.reject(new SpawnfileError("runtime_error", DOCKER_RESOURCE_ERROR));
130
+ }
131
+ const active = this.#live.get(request.idempotency_key);
132
+ if (active)
133
+ return same(active.request, request) ? active.promise : Promise.reject(new SpawnfileError("runtime_error", DOCKER_RESOURCE_ERROR));
134
+ let resolve;
135
+ let reject;
136
+ const promise = new Promise((accept, refuse) => { resolve = accept; reject = refuse; });
137
+ this.#live.set(request.idempotency_key, { request, promise });
138
+ void this.executeOwner(request).then(resolve, reject).finally(() => { if (this.#live.get(request.idempotency_key)?.promise === promise)
139
+ this.#live.delete(request.idempotency_key); });
140
+ return promise;
141
+ }
142
+ async executeOwner(request) {
143
+ try {
144
+ const kind = request.operation === "create_data_network" ? "data_network" : "evidence_volume";
145
+ const reservation = await this.#options.journal.reserve(request);
146
+ if (reservation.kind === "replay")
147
+ return { receipt: reservation.receipt, receiptBytes: reservation.receiptBytes };
148
+ await selectedContextMatches(request, this.#options);
149
+ const spec = createDockerResourceSpec({ kind, operationHandle: reservation.claim.operationHandle, requestDigest: reservation.claim.requestDigest, runId: request.run_id, selectedTargetHandle: request.selected_target.handle });
150
+ const pendingState = reservation.kind === "pending" ? await inspect(spec, this.#options) : undefined;
151
+ if (reservation.kind === "owner" || pendingState === "absent")
152
+ await create(spec, this.#options);
153
+ const receipt = await receiptFor({ claim: reservation.claim, kind, request, resultHandle: spec.resultHandle, journal: this.#options.journal });
154
+ return await this.#options.journal.complete(reservation.claim, receipt);
155
+ }
156
+ catch {
157
+ return fail();
158
+ }
159
+ }
160
+ }
161
+ export const createDockerResourceOperations = (options) => new DockerResourceOperationsImpl(validOptions(options));
162
+ export const createDockerResources = createDockerResourceOperations;
@@ -0,0 +1,44 @@
1
+ import { type OpaqueTargetHandle } from "./contracts.js";
2
+ export declare const DOCKER_RESOURCE_ERROR = "Docker resource mutation failed";
3
+ export type DockerResourceKind = "data_network" | "evidence_volume";
4
+ export type DockerResourceFailureKind = "collision" | "not_found";
5
+ export interface DockerResourceExecutor {
6
+ (file: string, args: string[], options: {
7
+ signal?: AbortSignal;
8
+ timeout: number;
9
+ }): Promise<{
10
+ stderr: string;
11
+ stdout: string;
12
+ }>;
13
+ }
14
+ /** A safe error classification supplied by the injected provider bridge. */
15
+ export declare class DockerResourceProviderError extends Error {
16
+ readonly kind: DockerResourceFailureKind;
17
+ constructor(kind: DockerResourceFailureKind);
18
+ }
19
+ export interface DockerResourceSpec {
20
+ readonly args: string[];
21
+ readonly inspectionFormat: string;
22
+ readonly kind: DockerResourceKind;
23
+ readonly labels: Readonly<Record<string, string>>;
24
+ readonly name: string;
25
+ readonly resultHandle: OpaqueTargetHandle;
26
+ }
27
+ export declare const isCanonicalDockerResourceSpec: (raw: unknown) => raw is DockerResourceSpec;
28
+ export declare const createDockerResourceSpec: (input: {
29
+ kind: DockerResourceKind;
30
+ operationHandle: OpaqueTargetHandle;
31
+ requestDigest: string;
32
+ runId: string;
33
+ selectedTargetHandle: OpaqueTargetHandle;
34
+ }) => DockerResourceSpec;
35
+ export declare const executeDockerResource: (input: {
36
+ args: string[];
37
+ executor: DockerResourceExecutor;
38
+ signal?: AbortSignal;
39
+ timeoutMs: number;
40
+ }) => Promise<{
41
+ stderr: string;
42
+ stdout: string;
43
+ }>;
44
+ export declare const isExpectedDockerResource: (stdout: string, spec: DockerResourceSpec) => boolean;
@@ -0,0 +1,207 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { createHash } from "node:crypto";
3
+ import { assertOrdinaryJsonGraph, parseOpaqueTargetHandle } from "./contracts.js";
4
+ export const DOCKER_RESOURCE_ERROR = "Docker resource mutation failed";
5
+ const MAX_OUTPUT_BYTES = 32_768;
6
+ const MAX_NAME_LENGTH = 63;
7
+ /** A safe error classification supplied by the injected provider bridge. */
8
+ export class DockerResourceProviderError extends Error {
9
+ kind;
10
+ constructor(kind) { super(DOCKER_RESOURCE_ERROR); this.kind = kind; }
11
+ }
12
+ export const isCanonicalDockerResourceSpec = (raw) => {
13
+ try {
14
+ assertOrdinaryJsonGraph(raw);
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)
20
+ || Object.getPrototypeOf(raw) !== Object.prototype)
21
+ return false;
22
+ const value = raw;
23
+ if (Object.keys(value).sort().join("\0")
24
+ !== "args\0inspectionFormat\0kind\0labels\0name\0resultHandle"
25
+ || value.kind !== "data_network" && value.kind !== "evidence_volume"
26
+ || typeof value.name !== "string"
27
+ || !(value.kind === "data_network" ? /^spfn_[a-f0-9]{58}$/u : /^spfv_[a-f0-9]{58}$/u)
28
+ .test(value.name)
29
+ || !value.labels || typeof value.labels !== "object" || Array.isArray(value.labels)
30
+ || Object.getPrototypeOf(value.labels) !== Object.prototype)
31
+ return false;
32
+ const labels = value.labels;
33
+ const labelKeys = [
34
+ "spawnfile_resource_v1_kind", "spawnfile_resource_v1_operation",
35
+ "spawnfile_resource_v1_run", "spawnfile_resource_v1_target",
36
+ "spawnfile_resource_v1_version"
37
+ ];
38
+ if (Object.keys(labels).sort().join("\0") !== [...labelKeys].sort().join("\0")
39
+ || labels.spawnfile_resource_v1_kind !== value.kind
40
+ || typeof labels.spawnfile_resource_v1_operation !== "string"
41
+ || !/^o[a-f0-9]{63}$/u.test(labels.spawnfile_resource_v1_operation)
42
+ || typeof labels.spawnfile_resource_v1_run !== "string"
43
+ || !/^r[a-f0-9]{63}$/u.test(labels.spawnfile_resource_v1_run)
44
+ || typeof labels.spawnfile_resource_v1_target !== "string"
45
+ || !/^t[a-f0-9]{63}$/u.test(labels.spawnfile_resource_v1_target)
46
+ || labels.spawnfile_resource_v1_version !== "v1")
47
+ return false;
48
+ const inspectionFormat = value.kind === "data_network"
49
+ ? "[{\"Name\":{{json .Name}},\"Labels\":{{json .Labels}},\"Internal\":{{json .Internal}}}]"
50
+ : "[{\"Name\":{{json .Name}},\"Labels\":{{json .Labels}}}]";
51
+ const labelArgs = labelKeys.flatMap((key) => ["--label", `${key}=${String(labels[key])}`]);
52
+ const args = value.kind === "data_network"
53
+ ? ["network", "create", "--internal", ...labelArgs, value.name]
54
+ : ["volume", "create", ...labelArgs, value.name];
55
+ try {
56
+ return value.inspectionFormat === inspectionFormat
57
+ && JSON.stringify(value.args) === JSON.stringify(args)
58
+ && parseOpaqueTargetHandle(value.resultHandle) === value.resultHandle;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ };
64
+ const digest = (domain, value) => createHash("sha256")
65
+ .update(`spawnfile.target-resource.${domain}.v1\0`, "utf8").update(value, "utf8").digest("hex");
66
+ const labelValue = (prefix, value) => `${prefix}${digest("docker-resource-label", value).slice(0, 63)}`;
67
+ export const createDockerResourceSpec = (input) => {
68
+ const authority = `${input.kind}\0${input.operationHandle}\0${input.requestDigest}`;
69
+ const namePrefix = input.kind === "data_network" ? "spfn_" : "spfv_";
70
+ const name = `${namePrefix}${digest("docker-resource-name", authority).slice(0, MAX_NAME_LENGTH - namePrefix.length)}`;
71
+ const resultHandle = parseOpaqueTargetHandle(`opaque_${digest("docker-resource-result", authority)}`);
72
+ const labels = Object.freeze({
73
+ spawnfile_resource_v1_kind: input.kind,
74
+ spawnfile_resource_v1_operation: labelValue("o", `${input.operationHandle}\0${input.requestDigest}`),
75
+ spawnfile_resource_v1_run: labelValue("r", input.runId),
76
+ spawnfile_resource_v1_target: labelValue("t", input.selectedTargetHandle),
77
+ spawnfile_resource_v1_version: "v1"
78
+ });
79
+ const labelArgs = Object.entries(labels).flatMap(([key, value]) => ["--label", `${key}=${value}`]);
80
+ const create = input.kind === "data_network"
81
+ ? ["network", "create", "--internal", ...labelArgs, name]
82
+ : ["volume", "create", ...labelArgs, name];
83
+ const inspectionFormat = input.kind === "data_network"
84
+ ? "[{\"Name\":{{json .Name}},\"Labels\":{{json .Labels}},\"Internal\":{{json .Internal}}}]"
85
+ : "[{\"Name\":{{json .Name}},\"Labels\":{{json .Labels}}}]";
86
+ return { args: create, inspectionFormat, kind: input.kind, labels, name, resultHandle };
87
+ };
88
+ const isUtf8 = (value) => Buffer.from(value, "utf8").toString("utf8") === value;
89
+ const boundedText = (value) => typeof value === "string" && isUtf8(value) && Buffer.byteLength(value, "utf8") <= MAX_OUTPUT_BYTES;
90
+ export const executeDockerResource = async (input) => {
91
+ try {
92
+ const result = await input.executor("docker", input.args, { signal: input.signal, timeout: input.timeoutMs });
93
+ if (!result || !boundedText(result.stdout) || !boundedText(result.stderr))
94
+ throw new Error();
95
+ return result;
96
+ }
97
+ catch (error) {
98
+ if (error instanceof DockerResourceProviderError)
99
+ throw error;
100
+ throw new Error(DOCKER_RESOURCE_ERROR);
101
+ }
102
+ };
103
+ const skipWhitespace = (source, index) => {
104
+ while (index < source.length && /[\t\n\r ]/u.test(source[index]))
105
+ index += 1;
106
+ return index;
107
+ };
108
+ const stringEnd = (source, start) => {
109
+ let index = start + 1;
110
+ while (index < source.length) {
111
+ if (source[index] === "\\") {
112
+ index += 2;
113
+ continue;
114
+ }
115
+ if (source[index] === "\"")
116
+ return index + 1;
117
+ index += 1;
118
+ }
119
+ throw new Error();
120
+ };
121
+ const duplicateFreeValue = (source, start) => {
122
+ let index = skipWhitespace(source, start);
123
+ const token = source[index];
124
+ if (token === "\"")
125
+ return stringEnd(source, index);
126
+ if (token === "{") {
127
+ index = skipWhitespace(source, index + 1);
128
+ const keys = new Set();
129
+ if (source[index] === "}")
130
+ return index + 1;
131
+ while (true) {
132
+ if (source[index] !== "\"")
133
+ throw new Error();
134
+ const end = stringEnd(source, index);
135
+ const key = JSON.parse(source.slice(index, end));
136
+ if (keys.has(key))
137
+ throw new Error();
138
+ keys.add(key);
139
+ index = skipWhitespace(source, end);
140
+ if (source[index] !== ":")
141
+ throw new Error();
142
+ index = duplicateFreeValue(source, index + 1);
143
+ index = skipWhitespace(source, index);
144
+ if (source[index] === "}")
145
+ return index + 1;
146
+ if (source[index] !== ",")
147
+ throw new Error();
148
+ index = skipWhitespace(source, index + 1);
149
+ }
150
+ }
151
+ if (token === "[") {
152
+ index = skipWhitespace(source, index + 1);
153
+ if (source[index] === "]")
154
+ return index + 1;
155
+ while (true) {
156
+ index = duplicateFreeValue(source, index);
157
+ index = skipWhitespace(source, index);
158
+ if (source[index] === "]")
159
+ return index + 1;
160
+ if (source[index] !== ",")
161
+ throw new Error();
162
+ index = skipWhitespace(source, index + 1);
163
+ }
164
+ }
165
+ while (index < source.length && !/[\t\n\r ,}\]]/u.test(source[index]))
166
+ index += 1;
167
+ if (index === start)
168
+ throw new Error();
169
+ return index;
170
+ };
171
+ const parseInspection = (stdout) => {
172
+ if (!boundedText(stdout))
173
+ throw new Error();
174
+ const end = duplicateFreeValue(stdout, 0);
175
+ if (skipWhitespace(stdout, end) !== stdout.length)
176
+ throw new Error();
177
+ const parsed = JSON.parse(stdout);
178
+ assertOrdinaryJsonGraph(parsed);
179
+ return parsed;
180
+ };
181
+ const exactLabels = (actual, expected) => {
182
+ if (!actual || typeof actual !== "object" || Array.isArray(actual) || Object.getPrototypeOf(actual) !== Object.prototype)
183
+ return false;
184
+ const record = actual;
185
+ const actualKeys = Object.keys(record).sort();
186
+ const expectedKeys = Object.keys(expected).sort();
187
+ return actualKeys.length === expectedKeys.length && actualKeys.every((key, index) => key === expectedKeys[index] && record[key] === expected[key]);
188
+ };
189
+ export const isExpectedDockerResource = (stdout, spec) => {
190
+ try {
191
+ const parsed = parseInspection(stdout);
192
+ if (!Array.isArray(parsed) || parsed.length !== 1)
193
+ return false;
194
+ const resource = parsed[0];
195
+ if (!resource || typeof resource !== "object" || Array.isArray(resource) || Object.getPrototypeOf(resource) !== Object.prototype)
196
+ return false;
197
+ const record = resource;
198
+ const keys = Object.keys(record).sort();
199
+ const expectedKeys = spec.kind === "data_network" ? ["Internal", "Labels", "Name"] : ["Labels", "Name"];
200
+ return keys.length === expectedKeys.length && keys.every((key, index) => key === expectedKeys[index])
201
+ && record.Name === spec.name && exactLabels(record.Labels, spec.labels)
202
+ && (spec.kind !== "data_network" || record.Internal === true);
203
+ }
204
+ catch {
205
+ return false;
206
+ }
207
+ };