spawnfile 0.1.14 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/README.md +60 -159
  2. package/dist/audit/checksShared.d.ts +1 -1
  3. package/dist/auth/importers.d.ts +10 -0
  4. package/dist/auth/importers.js +29 -4
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.js +1 -0
  7. package/dist/auth/paths.d.ts +1 -1
  8. package/dist/auth/profileStore.js +9 -9
  9. package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
  10. package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
  11. package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
  12. package/dist/auth/targetSecretSourceFsPublish.js +3 -1
  13. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
  14. package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
  15. package/dist/auth/targetSecretSourceFsRead.js +5 -14
  16. package/dist/auth/trainingAuth.d.ts +21 -0
  17. package/dist/auth/trainingAuth.js +86 -0
  18. package/dist/auth/types.d.ts +1 -1
  19. package/dist/cli/authCommands.d.ts +1 -1
  20. package/dist/cli/authCommands.js +9 -0
  21. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  22. package/dist/cli/canaryCutoverCommand.js +30 -0
  23. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  24. package/dist/cli/capabilitiesCommand.js +12 -0
  25. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  26. package/dist/cli/capabilitiesReceipt.js +56 -0
  27. package/dist/cli/compileBuildCommands.js +13 -0
  28. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  29. package/dist/cli/composedLifecycleContractSet.js +204 -0
  30. package/dist/cli/devCommands.js +2 -0
  31. package/dist/cli/downCommand.js +19 -8
  32. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  33. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  34. package/dist/cli/index.js +12 -3
  35. package/dist/cli/lifecycleMachine.d.ts +7 -1
  36. package/dist/cli/lifecycleMachine.js +2 -2
  37. package/dist/cli/paideiaDelegation.d.ts +17 -0
  38. package/dist/cli/paideiaDelegation.js +210 -0
  39. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  40. package/dist/cli/paideiaSupervisor.js +48 -0
  41. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  42. package/dist/cli/productStateCloneCommand.js +34 -0
  43. package/dist/cli/runCli.d.ts +13 -3
  44. package/dist/cli/runCli.js +37 -9
  45. package/dist/cli/targetCommands.d.ts +4 -7
  46. package/dist/cli/targetCommands.js +16 -46
  47. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  48. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  49. package/dist/cli/targetConfigResolver.d.ts +3 -0
  50. package/dist/cli/targetConfigResolver.js +111 -0
  51. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  52. package/dist/cli/targetConfigResolverCommand.js +43 -0
  53. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  54. package/dist/cli/targetConfigResolverContracts.js +30 -0
  55. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  56. package/dist/cli/targetConfigResolverDocker.js +47 -0
  57. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  58. package/dist/cli/targetConfigResolverValidation.js +94 -0
  59. package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
  60. package/dist/cli/targetDefaultAuthorities.js +3 -0
  61. package/dist/cli/targetDefaultConfig.d.ts +7 -0
  62. package/dist/cli/targetDefaultConfig.js +22 -5
  63. package/dist/cli/targetDefaultConfigStdin.js +7 -1
  64. package/dist/cli/targetDefaultHandlerFactory.js +23 -2
  65. package/dist/cli/targetDefaultHandlers.d.ts +2 -2
  66. package/dist/cli/targetProductionCommands.d.ts +5 -0
  67. package/dist/cli/targetProductionCommands.js +45 -0
  68. package/dist/cli/trainCommand.d.ts +3 -0
  69. package/dist/cli/trainCommand.js +61 -0
  70. package/dist/cli/upCommand.js +35 -6
  71. package/dist/cli/upLifecycleRecovery.d.ts +2 -2
  72. package/dist/cli/upLifecycleRecovery.js +188 -44
  73. package/dist/cli/usageCommand.d.ts +40 -0
  74. package/dist/cli/usageCommand.js +284 -0
  75. package/dist/cli/usageCommandLive.d.ts +84 -0
  76. package/dist/cli/usageCommandLive.js +95 -0
  77. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  78. package/dist/cli/usageDeploymentSource.js +22 -0
  79. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  80. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  81. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
  82. package/dist/compiler/buildCompilePlanTeams.js +6 -1
  83. package/dist/compiler/compilePlanHelpers.js +3 -0
  84. package/dist/compiler/compileProject.d.ts +2 -0
  85. package/dist/compiler/compileProject.js +5 -1
  86. package/dist/compiler/compileProjectSupport.js +9 -0
  87. package/dist/compiler/containerArtifacts.d.ts +3 -1
  88. package/dist/compiler/containerArtifacts.js +92 -40
  89. package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
  90. package/dist/compiler/containerArtifactsPlans.js +24 -7
  91. package/dist/compiler/containerArtifactsRender.d.ts +2 -1
  92. package/dist/compiler/containerArtifactsRender.js +91 -58
  93. package/dist/compiler/containerArtifactsTypes.d.ts +8 -0
  94. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  95. package/dist/compiler/containerBackedMountRender.js +101 -0
  96. package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
  97. package/dist/compiler/containerDaimonBrokerRender.js +191 -0
  98. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  99. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
  100. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
  101. package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
  102. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
  103. package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
  104. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  105. package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
  106. package/dist/compiler/containerEntrypointRender.d.ts +7 -0
  107. package/dist/compiler/containerEntrypointRender.js +28 -22
  108. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  109. package/dist/compiler/containerPersistentMounts.js +66 -0
  110. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  111. package/dist/compiler/containerReadinessPaths.js +1 -0
  112. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  113. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  114. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  115. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  116. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  117. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  118. package/dist/compiler/containerTargetResources.d.ts +22 -1
  119. package/dist/compiler/containerTargetResources.js +94 -2
  120. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  121. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  122. package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
  123. package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
  124. package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
  125. package/dist/compiler/deploymentLineage.d.ts +40 -0
  126. package/dist/compiler/deploymentLineage.js +50 -0
  127. package/dist/compiler/index.d.ts +3 -0
  128. package/dist/compiler/index.js +3 -0
  129. package/dist/compiler/initProject.d.ts +2 -0
  130. package/dist/compiler/initProject.js +39 -1
  131. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  132. package/dist/compiler/localMoltnetAuthority.js +177 -0
  133. package/dist/compiler/memoryArtifacts.d.ts +1 -1
  134. package/dist/compiler/memoryArtifacts.js +108 -32
  135. package/dist/compiler/modelEnv.d.ts +5 -0
  136. package/dist/compiler/modelEnv.js +8 -2
  137. package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
  138. package/dist/compiler/moltnetArtifactPaths.js +17 -15
  139. package/dist/compiler/moltnetArtifactTypes.d.ts +10 -0
  140. package/dist/compiler/moltnetArtifacts.d.ts +1 -1
  141. package/dist/compiler/moltnetArtifacts.js +52 -12
  142. package/dist/compiler/moltnetBinaries.d.ts +16 -4
  143. package/dist/compiler/moltnetBinaries.js +46 -6
  144. package/dist/compiler/moltnetClientConfig.js +1 -1
  145. package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
  146. package/dist/compiler/moltnetConfigLowering.js +30 -6
  147. package/dist/compiler/moltnetNodeConfig.js +1 -1
  148. package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
  149. package/dist/compiler/moltnetReleaseAuthority.js +33 -4
  150. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
  151. package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
  152. package/dist/compiler/moltnetResolution.js +9 -15
  153. package/dist/compiler/moltnetRoomMemberships.js +20 -5
  154. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  155. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  156. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  157. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  158. package/dist/compiler/moltnetServerPlans.js +19 -0
  159. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  160. package/dist/compiler/organizationExternalParticipants.js +176 -0
  161. package/dist/compiler/organizationIdentity.d.ts +3 -9
  162. package/dist/compiler/organizationIdentity.js +37 -270
  163. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  164. package/dist/compiler/organizationIdentityGraph.js +115 -0
  165. package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
  166. package/dist/compiler/organizationReadyEvidence.js +23 -3
  167. package/dist/compiler/runProject.d.ts +4 -2
  168. package/dist/compiler/runProject.js +32 -6
  169. package/dist/compiler/runProjectAuth.d.ts +3 -1
  170. package/dist/compiler/runProjectAuth.js +19 -3
  171. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  172. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  173. package/dist/compiler/runProjectDocker.d.ts +8 -4
  174. package/dist/compiler/runProjectDocker.js +43 -18
  175. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  176. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  177. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  178. package/dist/compiler/runProjectDockerReservation.js +118 -0
  179. package/dist/compiler/runProjectLifecycle.js +1 -1
  180. package/dist/compiler/training/broker/declaration.d.ts +45 -0
  181. package/dist/compiler/training/broker/declaration.js +55 -0
  182. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  183. package/dist/compiler/training/broker/entrypoint.js +111 -0
  184. package/dist/compiler/training/broker/index.d.ts +10 -0
  185. package/dist/compiler/training/broker/index.js +10 -0
  186. package/dist/compiler/training/broker/main.d.ts +2 -0
  187. package/dist/compiler/training/broker/main.js +14 -0
  188. package/dist/compiler/training/broker/paths.d.ts +196 -0
  189. package/dist/compiler/training/broker/paths.js +241 -0
  190. package/dist/compiler/training/broker/processes.d.ts +42 -0
  191. package/dist/compiler/training/broker/processes.js +99 -0
  192. package/dist/compiler/training/broker/projection.d.ts +51 -0
  193. package/dist/compiler/training/broker/projection.js +76 -0
  194. package/dist/compiler/training/broker/provisioning.d.ts +87 -0
  195. package/dist/compiler/training/broker/provisioning.js +213 -0
  196. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  197. package/dist/compiler/training/broker/receipt.js +110 -0
  198. package/dist/compiler/training/broker/registration.d.ts +41 -0
  199. package/dist/compiler/training/broker/registration.js +102 -0
  200. package/dist/compiler/training/broker/runtime.d.ts +25 -0
  201. package/dist/compiler/training/broker/runtime.js +173 -0
  202. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  203. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  204. package/dist/compiler/training/broker/supervisor.d.ts +109 -0
  205. package/dist/compiler/training/broker/supervisor.js +173 -0
  206. package/dist/compiler/training/container/contract.d.ts +31 -0
  207. package/dist/compiler/training/container/contract.js +33 -0
  208. package/dist/compiler/training/container/index.d.ts +4 -0
  209. package/dist/compiler/training/container/index.js +2 -0
  210. package/dist/compiler/training/container/launch.d.ts +18 -0
  211. package/dist/compiler/training/container/launch.js +173 -0
  212. package/dist/compiler/training/container/prepare.d.ts +8 -0
  213. package/dist/compiler/training/container/prepare.js +80 -0
  214. package/dist/compiler/training/container/process.d.ts +14 -0
  215. package/dist/compiler/training/container/process.js +70 -0
  216. package/dist/compiler/training/container/security.d.ts +36 -0
  217. package/dist/compiler/training/container/security.js +58 -0
  218. package/dist/compiler/training/context.d.ts +7 -0
  219. package/dist/compiler/training/context.js +93 -0
  220. package/dist/compiler/training/contract.d.ts +142 -0
  221. package/dist/compiler/training/contract.js +34 -0
  222. package/dist/compiler/training/index.d.ts +4 -0
  223. package/dist/compiler/training/index.js +3 -0
  224. package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
  225. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  226. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  227. package/dist/compiler/training/preparation/broker.js +43 -0
  228. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  229. package/dist/compiler/training/preparation/contextModes.js +38 -0
  230. package/dist/compiler/training/preparation/contract.d.ts +182 -0
  231. package/dist/compiler/training/preparation/contract.js +94 -0
  232. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  233. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  234. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  235. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  236. package/dist/compiler/training/preparation/files.d.ts +25 -0
  237. package/dist/compiler/training/preparation/files.js +85 -0
  238. package/dist/compiler/training/preparation/image.d.ts +28 -0
  239. package/dist/compiler/training/preparation/image.js +102 -0
  240. package/dist/compiler/training/preparation/index.d.ts +3 -0
  241. package/dist/compiler/training/preparation/index.js +2 -0
  242. package/dist/compiler/training/preparation/inputs.d.ts +23 -0
  243. package/dist/compiler/training/preparation/inputs.js +93 -0
  244. package/dist/compiler/training/preparation/prepare.d.ts +33 -0
  245. package/dist/compiler/training/preparation/prepare.js +186 -0
  246. package/dist/compiler/training/preparation/scratch.d.ts +19 -0
  247. package/dist/compiler/training/preparation/scratch.js +48 -0
  248. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  249. package/dist/compiler/training/repair/compatibility.js +34 -0
  250. package/dist/compiler/training/repair/contract.d.ts +506 -0
  251. package/dist/compiler/training/repair/contract.js +31 -0
  252. package/dist/compiler/training/repair/index.d.ts +3 -0
  253. package/dist/compiler/training/repair/index.js +3 -0
  254. package/dist/compiler/training/repair/prepare.d.ts +230 -0
  255. package/dist/compiler/training/repair/prepare.js +74 -0
  256. package/dist/compiler/training/repair/witness.d.ts +203 -0
  257. package/dist/compiler/training/repair/witness.js +42 -0
  258. package/dist/compiler/types.d.ts +2 -0
  259. package/dist/compiler/upProject.d.ts +26 -1
  260. package/dist/compiler/upProject.js +117 -178
  261. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  262. package/dist/compiler/upProjectHandoff.js +204 -0
  263. package/dist/compiler/upReceipt.js +49 -4
  264. package/dist/compiler/updateProjectModels.js +1 -0
  265. package/dist/compiler/view/types.d.ts +1 -1
  266. package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
  267. package/dist/compiler/workspaceBundleArtifacts.js +106 -0
  268. package/dist/compiler/workspaceResources.d.ts +4 -1
  269. package/dist/compiler/workspaceResources.js +12 -7
  270. package/dist/deployment/artifactsExportPlan.js +51 -1
  271. package/dist/deployment/canaryCutover.d.ts +42 -0
  272. package/dist/deployment/canaryCutover.js +140 -0
  273. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  274. package/dist/deployment/candidateDiagnostics.js +90 -0
  275. package/dist/deployment/dockerLogs.js +4 -1
  276. package/dist/deployment/dockerManager.js +9 -3
  277. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  278. package/dist/deployment/dockerProbeGateway.js +17 -2
  279. package/dist/deployment/downDeployment.d.ts +5 -0
  280. package/dist/deployment/downDeployment.js +109 -8
  281. package/dist/deployment/downReceiptTypes.d.ts +17 -2
  282. package/dist/deployment/downReceiptTypes.js +17 -2
  283. package/dist/deployment/index.d.ts +4 -0
  284. package/dist/deployment/index.js +4 -0
  285. package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
  286. package/dist/deployment/lifecycleCompletionContracts.js +34 -0
  287. package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
  288. package/dist/deployment/lifecycleCompletionPaths.js +3 -0
  289. package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
  290. package/dist/deployment/lifecycleCompletionPublication.js +18 -4
  291. package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
  292. package/dist/deployment/lifecycleCompletionStore.js +7 -7
  293. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  294. package/dist/deployment/lifecycleUpRecords.js +127 -0
  295. package/dist/deployment/native/AGENTS.md +11 -0
  296. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  297. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  298. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  299. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  300. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  301. package/dist/deployment/noReplaceActivation.js +50 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
  305. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
  308. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  309. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  310. package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
  311. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
  312. package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
  313. package/dist/deployment/organizationReady.d.ts +2 -0
  314. package/dist/deployment/organizationReady.js +36 -4
  315. package/dist/deployment/productStateClone.d.ts +43 -0
  316. package/dist/deployment/productStateClone.js +319 -0
  317. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  318. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  319. package/dist/deployment/upReceiptTypes.d.ts +32 -6
  320. package/dist/deployment/upReceiptTypes.js +29 -2
  321. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  322. package/dist/deployment/workspaceResourceMigration.js +315 -0
  323. package/dist/dev/project.d.ts +7 -0
  324. package/dist/dev/project.js +9 -0
  325. package/dist/distribution/consumeImage.d.ts +2 -0
  326. package/dist/distribution/consumeImage.js +98 -73
  327. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  328. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  329. package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
  330. package/dist/distribution/consumeImageLifecycle.js +231 -0
  331. package/dist/distribution/consumeImageSupport.d.ts +12 -0
  332. package/dist/distribution/consumeImageSupport.js +15 -0
  333. package/dist/distribution/distributionReportSchema.d.ts +11 -1
  334. package/dist/distribution/distributionReportSchema.js +15 -2
  335. package/dist/distribution/dockerRunner.d.ts +6 -1
  336. package/dist/distribution/dockerRunner.js +31 -4
  337. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  338. package/dist/distribution/imageRuntimeAuth.js +70 -1
  339. package/dist/distribution/index.d.ts +1 -1
  340. package/dist/distribution/index.js +1 -1
  341. package/dist/distribution/preflight.js +5 -1
  342. package/dist/distribution/types.d.ts +14 -1
  343. package/dist/distribution/types.js +3 -0
  344. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  345. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  346. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  347. package/dist/evidenceExportHelper/index.d.ts +4 -0
  348. package/dist/evidenceExportHelper/index.js +4 -0
  349. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  350. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  351. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  352. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  353. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  354. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  355. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  356. package/dist/evidenceExportHelper/recipe.js +83 -0
  357. package/dist/filesystem/io.d.ts +2 -0
  358. package/dist/filesystem/io.js +16 -1
  359. package/dist/manifest/executionSchemas.d.ts +27 -0
  360. package/dist/manifest/executionSchemas.js +21 -2
  361. package/dist/manifest/mcpSchemas.d.ts +1 -0
  362. package/dist/manifest/mcpSchemas.js +3 -0
  363. package/dist/manifest/renderSpawnfileNetworks.js +11 -0
  364. package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
  365. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  366. package/dist/manifest/scheduleSchemas.js +91 -5
  367. package/dist/manifest/schemas.d.ts +237 -12
  368. package/dist/manifest/schemas.js +5 -2
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
  370. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
  372. package/dist/manifest/teamNetworkSchemas.d.ts +17 -3
  373. package/dist/manifest/teamNetworkSchemas.js +19 -1
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
  375. package/dist/manifest/teamNetworkServerSchemas.js +18 -2
  376. package/dist/manifest/workspaceSchemas.d.ts +16 -0
  377. package/dist/manifest/workspaceSchemas.js +11 -0
  378. package/dist/report/types.d.ts +34 -4
  379. package/dist/runtime/common.d.ts +28 -1
  380. package/dist/runtime/common.js +33 -3
  381. package/dist/runtime/container.js +49 -33
  382. package/dist/runtime/daimon/adapter.d.ts +14 -0
  383. package/dist/runtime/daimon/adapter.js +243 -0
  384. package/dist/runtime/daimon/attention.d.ts +8 -0
  385. package/dist/runtime/daimon/attention.js +32 -0
  386. package/dist/runtime/daimon/config.d.ts +25 -0
  387. package/dist/runtime/daimon/config.js +272 -0
  388. package/dist/runtime/daimon/contractManifest.d.ts +295 -0
  389. package/dist/runtime/daimon/contractManifest.js +319 -0
  390. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  391. package/dist/runtime/daimon/grokModel.js +33 -0
  392. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
  393. package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
  394. package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
  395. package/dist/runtime/daimon/grokWorkerContract.js +48 -0
  396. package/dist/runtime/daimon/memory.d.ts +57 -0
  397. package/dist/runtime/daimon/memory.js +125 -0
  398. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  399. package/dist/runtime/daimon/runAuth.js +279 -0
  400. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  401. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  402. package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
  403. package/dist/runtime/daimon/scheduleAuthority.js +17 -0
  404. package/dist/runtime/index.d.ts +4 -0
  405. package/dist/runtime/index.js +4 -0
  406. package/dist/runtime/install.d.ts +3 -0
  407. package/dist/runtime/install.js +3 -0
  408. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  409. package/dist/runtime/localDaimonAuthority.js +77 -0
  410. package/dist/runtime/mnemeMcp.d.ts +13 -0
  411. package/dist/runtime/mnemeMcp.js +26 -0
  412. package/dist/runtime/openclaw/adapter.js +2 -2
  413. package/dist/runtime/pi/adapter.d.ts +0 -1
  414. package/dist/runtime/pi/adapter.js +2 -6
  415. package/dist/runtime/pi/appCliSource.js +1 -1
  416. package/dist/runtime/pi/appScheduleSource.js +6 -2
  417. package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
  418. package/dist/runtime/picoclaw/adapter.js +2 -2
  419. package/dist/runtime/registry.d.ts +3 -0
  420. package/dist/runtime/registry.js +19 -2
  421. package/dist/runtime/scheduleUtils.d.ts +1 -0
  422. package/dist/runtime/scheduleUtils.js +5 -1
  423. package/dist/runtime/types.d.ts +25 -0
  424. package/dist/runtime/usageLedger.d.ts +158 -0
  425. package/dist/runtime/usageLedger.js +269 -0
  426. package/dist/runtime/usageLedgerRead.d.ts +48 -0
  427. package/dist/runtime/usageLedgerRead.js +102 -0
  428. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  429. package/dist/runtime/usageRequestLedger.js +72 -0
  430. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  431. package/dist/shared/daimonCodexDocker.js +120 -0
  432. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  433. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  434. package/dist/shared/index.d.ts +2 -0
  435. package/dist/shared/index.js +2 -0
  436. package/dist/shared/types.d.ts +1 -1
  437. package/dist/shared/volumeNames.d.ts +6 -0
  438. package/dist/shared/volumeNames.js +14 -0
  439. package/dist/target/dockerArtifactsProvider.js +34 -7
  440. package/dist/target/dockerBaseImage.d.ts +2 -0
  441. package/dist/target/dockerBaseImage.js +11 -0
  442. package/dist/target/dockerCommandExecutor.d.ts +11 -0
  443. package/dist/target/dockerCommandExecutor.js +53 -2
  444. package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
  445. package/dist/target/dockerCommandExecutorCore.js +4 -2
  446. package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
  447. package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
  448. package/dist/target/dockerTarget.d.ts +1 -0
  449. package/dist/target/dockerTargetBinding.d.ts +1 -2
  450. package/dist/target/dockerTargetBinding.js +2 -3
  451. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  452. package/dist/target/dockerTargetExecFile.js +194 -0
  453. package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
  454. package/dist/target/dockerWorldServiceProvider.js +13 -1
  455. package/dist/target/evidenceExport.d.ts +3 -1
  456. package/dist/target/evidenceExport.js +12 -3
  457. package/dist/target/evidenceExportOperationsTestKit.js +3 -3
  458. package/dist/target/evidenceExportProvider.d.ts +2 -0
  459. package/dist/target/evidenceExportProvider.js +15 -5
  460. package/dist/target/publicArtifactSnapshot.d.ts +31 -0
  461. package/dist/target/publicArtifactSnapshot.js +37 -3
  462. package/examples/README.md +45 -0
  463. package/examples/agent-with-subagents/AGENTS.md +3 -0
  464. package/examples/agent-with-subagents/Spawnfile +30 -0
  465. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  466. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  467. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  468. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  469. package/examples/daimon-org/Spawnfile +68 -0
  470. package/examples/daimon-org/TEAM.md +4 -0
  471. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  472. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  473. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  474. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  475. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  476. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  477. package/examples/daimon-public-host/AGENTS.md +3 -0
  478. package/examples/daimon-public-host/Spawnfile +21 -0
  479. package/examples/distribution-org/Spawnfile +43 -0
  480. package/examples/distribution-org/TEAM.md +4 -0
  481. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  482. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  483. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  484. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  485. package/examples/jungian-daimon-org/Spawnfile +41 -0
  486. package/examples/jungian-daimon-org/TEAM.md +21 -0
  487. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  488. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  489. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  490. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  491. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  492. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  493. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  494. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  495. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  496. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  497. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  498. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  499. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  500. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  501. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  502. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  503. package/examples/mixed-runtime-org/Spawnfile +71 -0
  504. package/examples/mixed-runtime-org/TEAM.md +8 -0
  505. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  506. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  507. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  508. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  509. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  510. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  511. package/examples/moltnet-team-chat/Spawnfile +43 -0
  512. package/examples/moltnet-team-chat/TEAM.md +5 -0
  513. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  514. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  515. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  516. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  517. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  518. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  519. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  520. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  521. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  522. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  523. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  524. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  525. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  526. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  527. package/examples/single-agent/AGENTS.md +3 -0
  528. package/examples/single-agent/HEARTBEAT.md +3 -0
  529. package/examples/single-agent/IDENTITY.md +3 -0
  530. package/examples/single-agent/MEMORY.md +3 -0
  531. package/examples/single-agent/SOUL.md +3 -0
  532. package/examples/single-agent/Spawnfile +41 -0
  533. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  534. package/moltnet-releases.json +5 -4
  535. package/package.json +36 -9
  536. package/runtimes.yaml +5 -2
  537. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
  538. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
  539. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
  540. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
  541. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
  542. package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
  543. package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
  544. package/dist/ownership/simfileRunOperatorInputs.js +0 -139
  545. package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
  546. package/dist/target/cleanupRunDocker.test-helper.js +0 -238
@@ -24,7 +24,7 @@ const createAttachmentConfig = (node, artifacts, attachment, agentSlug) => {
24
24
  throw new SpawnfileError("compile_error", `Moltnet client config requires a resolved member id for ${node.name}`);
25
25
  }
26
26
  const serverPlan = findServerPlan(artifacts, attachment);
27
- const auth = resolveMoltnetClientAuth(serverPlan.server, attachment.network, attachment.memberId, agentSlug, attachment.auth?.tokenId);
27
+ const auth = resolveMoltnetClientAuth(serverPlan.server, attachment.network, attachment.memberId, agentSlug, attachment.auth?.tokenId, node.runtime.name);
28
28
  return {
29
29
  agent_name: node.name,
30
30
  auth: {
@@ -13,6 +13,7 @@ export interface MoltnetClientAuthPlan {
13
13
  tokenPath?: string;
14
14
  }
15
15
  export interface MoltnetNativeRoomConfig {
16
+ federation?: "all" | "none" | string[];
16
17
  id: string;
17
18
  members: string[];
18
19
  name?: string;
@@ -33,6 +34,7 @@ type ManagedMoltnetStore = Extract<TeamNetworkServer, {
33
34
  export declare const createMoltnetOpenTokenDirectory: (agentSlug: string) => string;
34
35
  export declare const createMoltnetOpenTokenPath: (networkId: string, memberId: string, agentSlug?: string) => string;
35
36
  export declare const createMoltnetNetworkStateDirectory: (networkId: string) => string;
37
+ export declare const createMoltnetDaimonReceiptStorePath: (networkId: string, memberId: string) => string;
36
38
  export declare const createDefaultMoltnetStorePath: (networkId: string, kind: "json" | "sqlite", mountPath?: string) => string;
37
39
  export declare const resolveMoltnetStorePath: (networkId: string, store: ManagedMoltnetStore) => string | null;
38
40
  export declare const resolveMoltnetStorePersistenceMountPath: (networkId: string, store: ManagedMoltnetStore) => string | null;
@@ -55,7 +57,7 @@ export declare const renderMoltnetListenAddr: (server: Extract<TeamNetworkServer
55
57
  mode: "managed";
56
58
  }>) => string;
57
59
  export declare const resolveMoltnetBaseUrl: (server: TeamNetworkServer) => string;
58
- export declare const resolveMoltnetClientAuth: (server: TeamNetworkServer, networkId: string, memberId: string, agentSlug?: string, attachmentTokenId?: string) => MoltnetClientAuthPlan;
60
+ export declare const resolveMoltnetClientAuth: (server: TeamNetworkServer, networkId: string, memberId: string, agentSlug?: string, attachmentTokenId?: string, runtimeName?: string) => MoltnetClientAuthPlan;
59
61
  export declare const createMoltnetNativeServerConfig: ({ networkId, networkName, rooms, server }: MoltnetNativeServerConfigInput) => {
60
62
  config: Record<string, unknown>;
61
63
  secretPatches: MoltnetSecretPatch[];
@@ -5,6 +5,14 @@ const normalizePosixPath = (value) => value.replace(/\/+/g, "/").replace(/\/+$/u
5
5
  export const createMoltnetOpenTokenDirectory = (agentSlug) => `/var/lib/spawnfile/agents/${pathSafeSegment(agentSlug)}/state/moltnet`;
6
6
  export const createMoltnetOpenTokenPath = (networkId, memberId, agentSlug = memberId) => `${createMoltnetOpenTokenDirectory(agentSlug)}/${pathSafeSegment(networkId)}-${pathSafeSegment(memberId)}.token`;
7
7
  export const createMoltnetNetworkStateDirectory = (networkId) => `/var/lib/spawnfile/moltnet/networks/${pathSafeSegment(networkId)}`;
8
+ export const createMoltnetDaimonReceiptStorePath = (networkId, memberId) => {
9
+ const network = pathSafeSegment(networkId);
10
+ const member = pathSafeSegment(memberId);
11
+ if (network !== networkId || member !== memberId || !/^[A-Za-z0-9][A-Za-z0-9_.-]{0,254}$/u.test(memberId)) {
12
+ throw new SpawnfileError("validation_error", "invalid Daimon receipt-store path segment");
13
+ }
14
+ return `${createMoltnetNetworkStateDirectory(networkId)}/daimon-receipts/${member}.json`;
15
+ };
8
16
  export const createDefaultMoltnetStorePath = (networkId, kind, mountPath) => {
9
17
  const directory = mountPath
10
18
  ? normalizePosixPath(mountPath)
@@ -64,7 +72,7 @@ export const resolveMoltnetBaseUrl = (server) => {
64
72
  : bind;
65
73
  return `http://${host}:${server.listen.port}`;
66
74
  };
67
- export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug, attachmentTokenId) => {
75
+ export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug, attachmentTokenId, runtimeName) => {
68
76
  if (server.auth.mode === "none") {
69
77
  if (attachmentTokenId !== undefined) {
70
78
  throw new SpawnfileError("validation_error", `Moltnet attachment ${networkId}/${memberId} cannot select token ${attachmentTokenId} when auth.mode is none`);
@@ -83,10 +91,12 @@ export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug,
83
91
  if (tokens.length !== 1) {
84
92
  throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token id must exist exactly once`);
85
93
  }
86
- if (token.scopes.length !== 2
87
- || token.scopes[0] !== "attach"
88
- || token.scopes[1] !== "write") {
89
- throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token must include attach and write scopes exactly`);
94
+ const requiredScopes = runtimeName === "daimon"
95
+ ? ["attach", "observe", "write"]
96
+ : ["attach", "write"];
97
+ if (token.scopes.length !== requiredScopes.length
98
+ || token.scopes.some((scope, index) => scope !== requiredScopes[index])) {
99
+ throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token must include ${requiredScopes.join(", ")} scopes exactly`);
90
100
  }
91
101
  if (token.agents?.length !== 1 || token.agents[0] !== memberId) {
92
102
  throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token must declare exactly agents: [${memberId}]`);
@@ -174,11 +184,20 @@ export const createMoltnetNativeServerConfig = ({ networkId, networkName, rooms,
174
184
  envName: pairing.token_secret,
175
185
  jsonPath: `pairings.${index}.token`
176
186
  });
187
+ if (pairing.relay) {
188
+ secretPatches.push({
189
+ envName: pairing.relay.token_secret,
190
+ jsonPath: `pairings.${index}.relay.token`
191
+ });
192
+ }
177
193
  return {
178
194
  id: pairing.id,
179
195
  remote_network_id: pairing.remote_network_id,
180
196
  remote_network_name: pairing.remote_network_name,
181
- remote_base_url: pairing.remote_base_url,
197
+ ...(pairing.remote_base_url ? { remote_base_url: pairing.remote_base_url } : {}),
198
+ ...(pairing.relay
199
+ ? { relay: { room: pairing.relay.room, token: "", url: pairing.relay.url } }
200
+ : {}),
182
201
  token: ""
183
202
  };
184
203
  });
@@ -214,6 +233,11 @@ export const createMoltnetNativeServerConfig = ({ networkId, networkName, rooms,
214
233
  },
215
234
  storage: storageConfigFor(networkId, server.store),
216
235
  rooms: rooms.map((room) => ({
236
+ ...(room.federation !== undefined
237
+ ? { federation: room.federation }
238
+ : pairings.length > 0
239
+ ? { federation: "none" }
240
+ : {}),
217
241
  id: room.id,
218
242
  ...(room.name ? { name: room.name } : {}),
219
243
  ...(room.visibility ? { visibility: room.visibility } : {}),
@@ -1,7 +1,7 @@
1
1
  import { resolveMoltnetClientAuth } from "./moltnetConfigLowering.js";
2
2
  import { resolveRuntimeConfig } from "./moltnetRuntimeConfig.js";
3
3
  export const createMoltnetNodeConfigContent = ({ agentNode, attachment, networkServer, nodeSlug, plan, serverPlan }) => {
4
- const clientAuth = resolveMoltnetClientAuth(networkServer, attachment.network, attachment.memberId, nodeSlug, attachment.auth?.tokenId);
4
+ const clientAuth = resolveMoltnetClientAuth(networkServer, attachment.network, attachment.memberId, nodeSlug, attachment.auth?.tokenId, agentNode.runtime.name);
5
5
  const usesPerAttachmentOpenToken = clientAuth.mode === "open" &&
6
6
  clientAuth.staticToken !== true &&
7
7
  Boolean(clientAuth.tokenEnv || clientAuth.tokenPath);
@@ -1,5 +1,28 @@
1
1
  export declare const MOLTNET_RELEASE_AUTHORITY_VERSION: "spawnfile.moltnet-release-authority.v1";
2
2
  export type MoltnetTargetArchitecture = "amd64" | "arm64";
3
+ /**
4
+ * The bridge capabilities a Moltnet build can advertise.
5
+ *
6
+ * CANONICAL ORDERING: `daimon-bridge` before `pi-bridge`. Several places
7
+ * compare this list by exact equality (`upReceipt.ts`, `localMoltnetAuthority.ts`)
8
+ * rather than as a set, so a differently ordered but equivalent list is
9
+ * rejected as a different release. The local builder
10
+ * (`scripts/build-local-moltnet.ts`) already writes this order; every producer
11
+ * must match it, and `moltnetReleaseAuthority.test.ts` asserts it.
12
+ *
13
+ * This is a UNION, never a replacement: an older pi-only release must keep
14
+ * pinning cleanly after a dual-capability one is published.
15
+ */
16
+ export declare const MOLTNET_PI_ONLY_CAPABILITIES: readonly ["pi-bridge"];
17
+ export declare const MOLTNET_DUAL_BRIDGE_CAPABILITIES: readonly ["daimon-bridge", "pi-bridge"];
18
+ export type MoltnetBridgeCapabilities = typeof MOLTNET_PI_ONLY_CAPABILITIES | typeof MOLTNET_DUAL_BRIDGE_CAPABILITIES;
19
+ /**
20
+ * The single runtime check for an advertised capability list. Every producer
21
+ * and parser funnels through this so the type and the runtime check can never
22
+ * drift apart — widening one without the other is precisely how a release
23
+ * becomes typecheck-green and runtime-rejected.
24
+ */
25
+ export declare const parseMoltnetBridgeCapabilities: (value: unknown) => MoltnetBridgeCapabilities | null;
3
26
  export interface TrustedMoltnetReleaseAsset {
4
27
  readonly architecture: MoltnetTargetArchitecture;
5
28
  readonly asset: string;
@@ -9,7 +32,7 @@ export interface TrustedMoltnetReleaseAuthority {
9
32
  readonly version: typeof MOLTNET_RELEASE_AUTHORITY_VERSION;
10
33
  readonly release_version: string;
11
34
  readonly source_revision: string;
12
- readonly capabilities: readonly ["pi-bridge"];
35
+ readonly capabilities: MoltnetBridgeCapabilities;
13
36
  readonly assets: readonly TrustedMoltnetReleaseAsset[];
14
37
  }
15
38
  export declare const parseTrustedMoltnetReleaseAuthority: (raw: unknown) => TrustedMoltnetReleaseAuthority;
@@ -1,6 +1,37 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
  import { SpawnfileError } from "../shared/index.js";
3
3
  export const MOLTNET_RELEASE_AUTHORITY_VERSION = "spawnfile.moltnet-release-authority.v1";
4
+ /**
5
+ * The bridge capabilities a Moltnet build can advertise.
6
+ *
7
+ * CANONICAL ORDERING: `daimon-bridge` before `pi-bridge`. Several places
8
+ * compare this list by exact equality (`upReceipt.ts`, `localMoltnetAuthority.ts`)
9
+ * rather than as a set, so a differently ordered but equivalent list is
10
+ * rejected as a different release. The local builder
11
+ * (`scripts/build-local-moltnet.ts`) already writes this order; every producer
12
+ * must match it, and `moltnetReleaseAuthority.test.ts` asserts it.
13
+ *
14
+ * This is a UNION, never a replacement: an older pi-only release must keep
15
+ * pinning cleanly after a dual-capability one is published.
16
+ */
17
+ export const MOLTNET_PI_ONLY_CAPABILITIES = ["pi-bridge"];
18
+ export const MOLTNET_DUAL_BRIDGE_CAPABILITIES = ["daimon-bridge", "pi-bridge"];
19
+ /**
20
+ * The single runtime check for an advertised capability list. Every producer
21
+ * and parser funnels through this so the type and the runtime check can never
22
+ * drift apart — widening one without the other is precisely how a release
23
+ * becomes typecheck-green and runtime-rejected.
24
+ */
25
+ export const parseMoltnetBridgeCapabilities = (value) => {
26
+ if (!Array.isArray(value))
27
+ return null;
28
+ const joined = value.join("\0");
29
+ if (joined === MOLTNET_PI_ONLY_CAPABILITIES.join("\0"))
30
+ return MOLTNET_PI_ONLY_CAPABILITIES;
31
+ if (joined === MOLTNET_DUAL_BRIDGE_CAPABILITIES.join("\0"))
32
+ return MOLTNET_DUAL_BRIDGE_CAPABILITIES;
33
+ return null;
34
+ };
4
35
  const SHA256 = /^sha256:[a-f0-9]{64}$/u;
5
36
  const REVISION = /^[a-f0-9]{40}$/u;
6
37
  const VERSION = /^v?\d+\.\d+\.\d+(?:-\d+-g[a-f0-9]{7,40})?$/u;
@@ -20,9 +51,7 @@ export const parseTrustedMoltnetReleaseAuthority = (raw) => {
20
51
  || !VERSION.test(value.release_version)
21
52
  || typeof value.source_revision !== "string"
22
53
  || !REVISION.test(value.source_revision)
23
- || !Array.isArray(value.capabilities)
24
- || value.capabilities.length !== 1
25
- || value.capabilities[0] !== "pi-bridge"
54
+ || parseMoltnetBridgeCapabilities(value.capabilities) === null
26
55
  || !Array.isArray(value.assets)
27
56
  || value.assets.length !== 2)
28
57
  return fail();
@@ -52,7 +81,7 @@ export const parseTrustedMoltnetReleaseAuthority = (raw) => {
52
81
  version: MOLTNET_RELEASE_AUTHORITY_VERSION,
53
82
  release_version: value.release_version,
54
83
  source_revision: value.source_revision,
55
- capabilities: Object.freeze(["pi-bridge"]),
84
+ capabilities: parseMoltnetBridgeCapabilities(value.capabilities),
56
85
  assets: Object.freeze(assets)
57
86
  });
58
87
  };
@@ -14,4 +14,4 @@ export interface TeamRepresentativeResolution {
14
14
  sourceTeamSource: string;
15
15
  }
16
16
  export declare const resolveTeamRepresentatives: (plan: CompilePlan, teamNode: ResolvedTeamNode, seen?: string[]) => TeamRepresentativeResolution[];
17
- export declare const resolveMoltnetAttachments: (attachments: ResolvedMoltnetAttachment[] | undefined, context: MoltnetTeamContext | undefined, nodeName: string) => ResolvedMoltnetAttachment[] | undefined;
17
+ export declare const resolveMoltnetAttachments: (attachments: ResolvedMoltnetAttachment[] | undefined, context: MoltnetTeamContext | undefined, nodeName: string, runtimeName?: string) => ResolvedMoltnetAttachment[] | undefined;
@@ -71,7 +71,7 @@ export const resolveTeamRepresentatives = (plan, teamNode, seen = []) => {
71
71
  }
72
72
  return representatives;
73
73
  };
74
- export const resolveMoltnetAttachments = (attachments, context, nodeName) => {
74
+ export const resolveMoltnetAttachments = (attachments, context, nodeName, runtimeName) => {
75
75
  if (!attachments || attachments.length === 0) {
76
76
  return undefined;
77
77
  }
@@ -84,7 +84,7 @@ export const resolveMoltnetAttachments = (attachments, context, nodeName) => {
84
84
  throw new SpawnfileError("validation_error", `Agent ${nodeName} references unknown Moltnet network ${attachment.network} on team ${context.teamName}`);
85
85
  }
86
86
  if (network.server) {
87
- resolveMoltnetClientAuth(network.server, network.id, context.memberId, undefined, attachment.auth?.tokenId);
87
+ resolveMoltnetClientAuth(network.server, network.id, context.memberId, undefined, attachment.auth?.tokenId, runtimeName);
88
88
  }
89
89
  for (const roomId of Object.keys(attachment.rooms ?? {})) {
90
90
  const room = network.rooms.find((entry) => entry.id === roomId);
@@ -26,15 +26,9 @@ const validateGlobalMemberIds = (plan) => {
26
26
  context
27
27
  ]));
28
28
  for (const context of uniqueContexts.values()) {
29
- let memberId = context.memberId;
30
- if (plan.organizationIdentity) {
31
- const canonicalMemberId = resolveCanonicalAgentMemberId(plan, context.agentSource);
32
- const matches = plan.organizationIdentity.agentMembers.filter((member) => member.memberId === canonicalMemberId);
33
- if (!canonicalMemberId || matches.length !== 1) {
34
- throw new SpawnfileError("validation_error", `Unable to resolve exactly one canonical Moltnet member id for ${context.agentSource}`);
35
- }
36
- memberId = canonicalMemberId;
37
- }
29
+ const memberId = (plan.organizationIdentity?.externalParticipants.length ?? 0) > 0
30
+ ? resolveCanonicalAgentMemberId(plan, context.agentSource) ?? context.memberId
31
+ : context.memberId;
38
32
  const previous = seen.get(memberId);
39
33
  const label = `${context.teamName} (${context.teamSource}) member ${context.memberId}`;
40
34
  if (previous &&
@@ -181,9 +175,7 @@ export const resolvePlanMoltnetAttachments = (plan) => {
181
175
  for (const synthesized of synthesizedAttachments) {
182
176
  const { agentSource, attachment, directTeamSource } = synthesized;
183
177
  const representativeContext = (plan.memberships ?? []).find((context) => context.agentSource === agentSource &&
184
- (plan.organizationIdentity
185
- ? context.teamSource === directTeamSource
186
- : context.memberId === attachment.memberId));
178
+ context.teamSource === directTeamSource);
187
179
  if (!representativeContext) {
188
180
  throw new SpawnfileError("validation_error", `Unable to find direct member context for synthesized Moltnet member ${attachment.memberId ?? "unknown"}`);
189
181
  }
@@ -207,14 +199,16 @@ export const resolvePlanMoltnetAttachments = (plan) => {
207
199
  continue;
208
200
  }
209
201
  const teamNode = findTeamBySource(plan, context.teamSource);
210
- const canonicalMemberId = resolveCanonicalAgentMemberId(plan, context.agentSource) ?? context.memberId;
202
+ const resolvedMemberId = (plan.organizationIdentity?.externalParticipants.length ?? 0) > 0
203
+ ? resolveCanonicalAgentMemberId(plan, context.agentSource) ?? context.memberId
204
+ : context.memberId;
211
205
  const resolved = resolveMoltnetAttachments(declaredAttachments, {
212
206
  memberId: context.memberId,
213
207
  networks: teamNode.networks ?? [],
214
- resolvedMemberId: canonicalMemberId,
208
+ resolvedMemberId,
215
209
  teamName: context.teamName,
216
210
  teamSource: context.teamSource
217
- }, agentNode.name);
211
+ }, agentNode.name, agentNode.runtime.name);
218
212
  resolvedAttachments.push(...(resolved ?? []));
219
213
  }
220
214
  resolvedAttachments.push(...(synthesizedByAgent.get(agentNode.source) ?? []));
@@ -1,6 +1,7 @@
1
1
  import { SpawnfileError } from "../shared/index.js";
2
2
  import { resolveTeamRepresentatives } from "./moltnetRepresentativeResolution.js";
3
3
  import { resolveCanonicalAgentMemberId } from "./organizationIdentity.js";
4
+ import { isDeclaredPairedRemoteRoomMember } from "../manifest/index.js";
4
5
  import { isAttachedExternalRoomMember } from "./buildCompilePlanTeams.js";
5
6
  const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
6
7
  const findAgentBySource = (plan, source) => {
@@ -23,13 +24,15 @@ const clonePolicy = (policy) => ({
23
24
  const defaultNestedRepresentativePolicy = () => ({
24
25
  wake: "mentions"
25
26
  });
27
+ // Ordinary Moltnet uses direct member slots. B31's externally authorized
28
+ // organization uses its canonical nested principal identifiers instead.
26
29
  const resolveConcreteMemberId = (plan, agentSource, authoredMemberId) => {
27
- if (!plan.organizationIdentity)
30
+ if ((plan.organizationIdentity?.externalParticipants.length ?? 0) === 0) {
28
31
  return authoredMemberId;
32
+ }
29
33
  const canonicalMemberId = resolveCanonicalAgentMemberId(plan, agentSource);
30
- if (!canonicalMemberId ||
31
- plan.organizationIdentity.agentMembers.filter((member) => member.memberId === canonicalMemberId).length !== 1) {
32
- throw new SpawnfileError("validation_error", `Unable to resolve exactly one canonical Moltnet member id for ${agentSource}`);
34
+ if (!canonicalMemberId) {
35
+ throw new SpawnfileError("validation_error", `Unable to resolve canonical Moltnet member id for ${agentSource}`);
33
36
  }
34
37
  return canonicalMemberId;
35
38
  };
@@ -62,7 +65,11 @@ const compareRoomMemberships = (left, right) => [
62
65
  left.agentSource.localeCompare(right.agentSource)
63
66
  ].find((result) => result !== 0) ?? 0;
64
67
  export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room, memberships = plan.moltnetRoomMemberships) => {
68
+ const network = teamNode.networks?.find((candidate) => candidate.id === networkId);
65
69
  const externalMembers = room.members.filter((memberId) => isAttachedExternalRoomMember(teamNode, networkId, memberId));
70
+ const remoteMembers = network
71
+ ? room.members.filter((memberId) => isDeclaredPairedRemoteRoomMember(network, room, memberId))
72
+ : [];
66
73
  if (memberships) {
67
74
  return [
68
75
  ...new Set([
@@ -71,7 +78,8 @@ export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room
71
78
  && membership.networkId === networkId
72
79
  && membership.roomId === room.id)
73
80
  .map((membership) => membership.concreteMemberId),
74
- ...externalMembers
81
+ ...externalMembers,
82
+ ...remoteMembers
75
83
  ])
76
84
  ].sort();
77
85
  }
@@ -83,6 +91,10 @@ export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room
83
91
  concreteMembers.push(declaredSlot);
84
92
  continue;
85
93
  }
94
+ if (network && isDeclaredPairedRemoteRoomMember(network, room, declaredSlot)) {
95
+ concreteMembers.push(declaredSlot);
96
+ continue;
97
+ }
86
98
  throw new SpawnfileError("validation_error", `Team ${teamNode.name} Moltnet room ${room.id} references unknown member ${declaredSlot}`);
87
99
  }
88
100
  if (member.kind === "agent") {
@@ -113,6 +125,9 @@ export const resolveMoltnetRoomMemberships = (plan) => {
113
125
  if (isAttachedExternalRoomMember(teamNode, network.id, declaredSlot)) {
114
126
  continue;
115
127
  }
128
+ if (isDeclaredPairedRemoteRoomMember(network, room, declaredSlot)) {
129
+ continue;
130
+ }
116
131
  throw new SpawnfileError("validation_error", `Team ${teamNode.name} Moltnet room ${room.id} references unknown member ${declaredSlot}`);
117
132
  }
118
133
  if (declaredMember.kind === "agent") {
@@ -1,4 +1,4 @@
1
1
  import type { TeamNetworkServer } from "../manifest/index.js";
2
2
  export declare const assertCompatibleMoltnetNetworkName: (networkId: string, existing: string | undefined, next: string | undefined) => void;
3
3
  export declare const assertCompatibleMoltnetServer: (networkId: string, existing: TeamNetworkServer, next: TeamNetworkServer) => void;
4
- export declare const assertCompatibleMoltnetRoomPolicy: (networkId: string, roomId: string, field: "visibility" | "write_policy", existing: string | undefined, next: string | undefined) => void;
4
+ export declare const assertCompatibleMoltnetRoomPolicy: (networkId: string, roomId: string, field: "federation" | "visibility" | "write_policy", existing: string | string[] | undefined, next: string | string[] | undefined) => void;
@@ -22,7 +22,9 @@ export const assertCompatibleMoltnetServer = (networkId, existing, next) => {
22
22
  }
23
23
  };
24
24
  export const assertCompatibleMoltnetRoomPolicy = (networkId, roomId, field, existing, next) => {
25
- if (existing !== undefined && next !== undefined && existing !== next) {
25
+ if (existing !== undefined
26
+ && next !== undefined
27
+ && stableStringify(existing) !== stableStringify(next)) {
26
28
  throw new SpawnfileError("validation_error", `Duplicate Moltnet network ${networkId} room ${roomId} declares conflicting ${field}: ${existing} vs ${next}`);
27
29
  }
28
30
  };
@@ -1,2 +1,2 @@
1
1
  import type { CompilePlan, ResolvedAgentNode } from "./types.js";
2
- export declare const resolveRuntimeConfig: (plan: CompilePlan, agentNode: ResolvedAgentNode, nodeSlug: string, _networkId: string, _agentId: string) => Record<string, string>;
2
+ export declare const resolveRuntimeConfig: (plan: CompilePlan, agentNode: ResolvedAgentNode, nodeSlug: string, networkId: string, moltnetAgentId: string) => Record<string, string>;
@@ -1,5 +1,6 @@
1
1
  import { getRuntimeAdapter } from "../runtime/index.js";
2
2
  import { SpawnfileError } from "../shared/index.js";
3
+ import { createMoltnetDaimonReceiptStorePath } from "./moltnetConfigLowering.js";
3
4
  const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
4
5
  const CONFIG_FILE_PLACEHOLDER = "<config-file>";
5
6
  const resolveSequentialRuntimePort = (plan, runtimeName, slug) => {
@@ -28,7 +29,14 @@ const resolveRuntimeInstancePaths = (runtimeName, slug) => {
28
29
  : undefined
29
30
  };
30
31
  };
31
- export const resolveRuntimeConfig = (plan, agentNode, nodeSlug, _networkId, _agentId) => {
32
+ const resolveDaimonAgentId = (plan, agentNode) => {
33
+ const compiled = plan.nodes.find((node) => node.kind === "agent" && node.value.source === agentNode.source);
34
+ if (!compiled) {
35
+ throw new SpawnfileError("compile_error", `Unable to resolve Daimon runtime agent identity for ${agentNode.name}`);
36
+ }
37
+ return compiled.id;
38
+ };
39
+ export const resolveRuntimeConfig = (plan, agentNode, nodeSlug, networkId, moltnetAgentId) => {
32
40
  switch (agentNode.runtime.name) {
33
41
  case "openclaw": {
34
42
  const port = resolveSequentialRuntimePort(plan, "openclaw", nodeSlug);
@@ -51,7 +59,19 @@ export const resolveRuntimeConfig = (plan, agentNode, nodeSlug, _networkId, _age
51
59
  kind: "picoclaw"
52
60
  };
53
61
  }
54
- case "daimon":
62
+ case "daimon": {
63
+ const port = getRuntimeAdapter("daimon").container.port;
64
+ if (!port) {
65
+ throw new SpawnfileError("compile_error", `Unable to resolve Daimon control port for Moltnet agent ${agentNode.name}`);
66
+ }
67
+ return {
68
+ agent_id: resolveDaimonAgentId(plan, agentNode),
69
+ control_url: `http://127.0.0.1:${port}`,
70
+ kind: "daimon",
71
+ receipt_store_path: createMoltnetDaimonReceiptStorePath(networkId, moltnetAgentId),
72
+ token_env: "SPAWNFILE_DAIMON_CONTROL_TOKEN"
73
+ };
74
+ }
55
75
  case "pi": {
56
76
  const port = getRuntimeAdapter(agentNode.runtime.name).container.port;
57
77
  if (!port) {
@@ -71,6 +71,7 @@ const mergeRooms = (plan, serverPlan, declaration) => {
71
71
  const existingRoom = serverPlan.rooms.find((entry) => entry.id === room.id);
72
72
  if (!existingRoom) {
73
73
  serverPlan.rooms.push({
74
+ ...(room.federation ? { federation: room.federation } : {}),
74
75
  id: room.id,
75
76
  members: concreteMembers,
76
77
  ...(room.name ? { name: room.name } : {}),
@@ -82,8 +83,10 @@ const mergeRooms = (plan, serverPlan, declaration) => {
82
83
  existingRoom.members = [
83
84
  ...new Set([...existingRoom.members, ...concreteMembers])
84
85
  ].sort();
86
+ assertCompatibleMoltnetRoomPolicy(network.id, room.id, "federation", existingRoom.federation, room.federation);
85
87
  assertCompatibleMoltnetRoomPolicy(network.id, room.id, "visibility", existingRoom.visibility, room.visibility);
86
88
  assertCompatibleMoltnetRoomPolicy(network.id, room.id, "write_policy", existingRoom.write_policy, room.write_policy);
89
+ existingRoom.federation ??= room.federation;
87
90
  existingRoom.visibility ??= room.visibility;
88
91
  existingRoom.write_policy ??= room.write_policy;
89
92
  }
@@ -128,5 +131,21 @@ export const resolveMoltnetServerPlans = (plan, teamNodes) => {
128
131
  if (count > 1)
129
132
  serverPlans.get(networkId)?.rooms.sort((left, right) => left.id.localeCompare(right.id));
130
133
  }
134
+ for (const serverPlan of serverPlans.values()) {
135
+ const pairingIds = new Set(serverPlan.server.mode === "managed"
136
+ ? (serverPlan.server.pairings ?? []).map((pairing) => pairing.id)
137
+ : []);
138
+ for (const room of serverPlan.rooms) {
139
+ if (serverPlan.server.mode === "external" && room.federation !== undefined) {
140
+ throw new SpawnfileError("validation_error", `External Moltnet network ${serverPlan.networkId} room ${room.id} cannot declare federation`);
141
+ }
142
+ if (!Array.isArray(room.federation))
143
+ continue;
144
+ const unknownPairing = room.federation.find((pairingId) => !pairingIds.has(pairingId));
145
+ if (unknownPairing) {
146
+ throw new SpawnfileError("validation_error", `Moltnet network ${serverPlan.networkId} room ${room.id} federation references unknown pairing ${unknownPairing}`);
147
+ }
148
+ }
149
+ }
131
150
  return serverPlans;
132
151
  };
@@ -0,0 +1,3 @@
1
+ import type { CompilePlan, MoltnetExternalParticipantIntent } from "./types.js";
2
+ export declare const validateB31MoltnetAuth: (plan: CompilePlan) => void;
3
+ export declare const resolveMoltnetExternalParticipantIntents: (plan: CompilePlan) => MoltnetExternalParticipantIntent[];