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
@@ -0,0 +1,176 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { assertOrganizationSegment, compareOrganizationIds, exactOrganizationStrings, organizationAgentPaths, organizationIdentityFail, requiredOrganizationIdentity, rootOrganizationTeam, } from "./organizationIdentityGraph.js";
3
+ const actorTokenFor = (server, tokenId, memberId, observePolicy = "forbid") => {
4
+ const token = server.auth.tokens?.filter((entry) => entry.id === tokenId);
5
+ if (token?.length !== 1) {
6
+ organizationIdentityFail(`Moltnet actor token ${tokenId} must exist exactly once`);
7
+ }
8
+ const selected = requiredOrganizationIdentity(token?.[0], `Moltnet actor token ${tokenId} must exist exactly once`);
9
+ const validScopes = (observePolicy !== "require" && exactOrganizationStrings(selected.scopes, ["attach", "write"])) || (observePolicy !== "forbid"
10
+ && exactOrganizationStrings(selected.scopes, ["attach", "observe", "write"]));
11
+ if (!validScopes || !exactOrganizationStrings(selected.agents, [memberId])) {
12
+ organizationIdentityFail(`Moltnet actor token ${tokenId} has invalid scopes or agents for ${memberId}`);
13
+ }
14
+ return selected;
15
+ };
16
+ const isPairingAuthToken = (server, token) => token.agents === undefined
17
+ && exactOrganizationStrings(token.scopes, ["pair"])
18
+ && (server.pairings ?? []).filter((pairing) => pairing.id === token.id && pairing.token_secret === token.secret).length === 1;
19
+ const isObserveOnlyConsoleToken = (token) => token.agents === undefined && exactOrganizationStrings(token.scopes, ["observe"]);
20
+ const validateB31Networks = (plan) => {
21
+ const root = requiredOrganizationIdentity(rootOrganizationTeam(plan), "B31 root team is missing");
22
+ const services = requiredOrganizationIdentity(root.externalParticipants, "B31 participants are missing");
23
+ const networkIds = new Set(services.flatMap((service) => service.surfaces.moltnet.map((attachment) => attachment.network)));
24
+ for (const network of root.networks ?? []) {
25
+ if (!networkIds.has(network.id))
26
+ continue;
27
+ assertOrganizationSegment(network.id, "B31 network id");
28
+ if (network.server?.mode !== "managed" || network.server.auth.mode !== "bearer"
29
+ || network.server.direct_messages !== true) {
30
+ organizationIdentityFail(`B31 network ${network.id} requires managed bearer direct_messages`);
31
+ }
32
+ const server = requiredOrganizationIdentity(network.server, `B31 network ${network.id} requires a managed server`);
33
+ if (JSON.stringify(server.auth.client) !== JSON.stringify({ token_id: "operator" })) {
34
+ organizationIdentityFail(`B31 network ${network.id} requires auth.client token_id operator`);
35
+ }
36
+ const tokens = server.auth.tokens ?? [];
37
+ const operator = tokens.find((token) => token.id === "operator");
38
+ if (tokens.filter((token) => token.id === "operator").length !== 1 || !operator
39
+ || operator.agents !== undefined
40
+ || !exactOrganizationStrings(operator.scopes, ["admin", "observe", "write"])) {
41
+ organizationIdentityFail(`B31 network ${network.id} has invalid operator token`);
42
+ }
43
+ const resolvedOperator = requiredOrganizationIdentity(operator, `B31 network ${network.id} has invalid operator token`);
44
+ const usedTokenIds = new Set();
45
+ const usedEnvNames = new Set();
46
+ for (const token of tokens) {
47
+ assertOrganizationSegment(token.id, "Moltnet token id");
48
+ if (!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(token.secret)) {
49
+ organizationIdentityFail(`invalid Moltnet token env name ${token.secret}`);
50
+ }
51
+ if (usedTokenIds.has(token.id) || usedEnvNames.has(token.secret)) {
52
+ organizationIdentityFail(`duplicate Moltnet token identity ${token.id}`);
53
+ }
54
+ usedTokenIds.add(token.id);
55
+ usedEnvNames.add(token.secret);
56
+ if (token.id !== "operator" && token.secret === resolvedOperator.secret) {
57
+ organizationIdentityFail("operator and actor token env identities must differ");
58
+ }
59
+ }
60
+ }
61
+ return networkIds;
62
+ };
63
+ export const validateB31MoltnetAuth = (plan) => {
64
+ const root = rootOrganizationTeam(plan);
65
+ if (!root?.externalParticipants?.length)
66
+ return;
67
+ const identity = requiredOrganizationIdentity(plan.organizationIdentity, "B31 organization identity is missing");
68
+ const paths = organizationAgentPaths(plan);
69
+ const networkIds = validateB31Networks(plan);
70
+ const selectedByNetwork = new Map();
71
+ const selectedActorKeys = new Set();
72
+ for (const member of identity.agentMembers) {
73
+ const source = [...paths.entries()].find(([, path]) => path.join(".") === member.memberId)?.[0];
74
+ const node = plan.nodes.find((entry) => entry.kind === "agent"
75
+ && entry.value.source === source);
76
+ const attachments = node?.value?.surfaces?.moltnet ?? [];
77
+ for (const attachment of attachments.filter((entry) => networkIds.has(entry.network))) {
78
+ const network = root.networks?.find((entry) => entry.id === attachment.network);
79
+ const selectedTokenId = requiredOrganizationIdentity(attachment.auth?.tokenId, `B31 agent ${member.memberId} must select auth.token_id`);
80
+ const actorKey = `${attachment.network}\u0000${member.memberId}`;
81
+ if (selectedActorKeys.has(actorKey)) {
82
+ organizationIdentityFail(`B31 actor ${member.memberId} selects more than one token on ${attachment.network}`);
83
+ }
84
+ selectedActorKeys.add(actorKey);
85
+ if (network?.server?.mode === "managed") {
86
+ const token = actorTokenFor(network.server, selectedTokenId, member.memberId, node?.runtimeName === "daimon" ? "require" : "forbid");
87
+ const selected = selectedByNetwork.get(attachment.network) ?? new Map();
88
+ const previous = selected.get(selectedTokenId);
89
+ if (previous) {
90
+ organizationIdentityFail(`Moltnet actor token ${selectedTokenId} is shared by ${previous} and ${member.memberId}`);
91
+ }
92
+ selected.set(selectedTokenId, member.memberId);
93
+ selectedByNetwork.set(attachment.network, selected);
94
+ if (token.id === "operator") {
95
+ organizationIdentityFail(`B31 actor ${member.memberId} must not use operator token`);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ for (const service of root.externalParticipants) {
101
+ for (const attachment of service.surfaces.moltnet) {
102
+ const network = root.networks?.find((entry) => entry.id === attachment.network);
103
+ if (network?.server?.mode !== "managed")
104
+ continue;
105
+ const token = actorTokenFor(network.server, attachment.auth.token_id, service.id, "allow");
106
+ if (token.id === "operator") {
107
+ organizationIdentityFail(`B31 external participant ${service.id} must not use operator token`);
108
+ }
109
+ const selected = selectedByNetwork.get(attachment.network) ?? new Map();
110
+ const previous = selected.get(token.id);
111
+ if (previous)
112
+ organizationIdentityFail(`Moltnet actor token ${token.id} is shared by ${previous} and ${service.id}`);
113
+ selected.set(token.id, service.id);
114
+ selectedByNetwork.set(attachment.network, selected);
115
+ }
116
+ }
117
+ for (const network of root.networks ?? []) {
118
+ const selected = selectedByNetwork.get(network.id);
119
+ if (network.server?.mode !== "managed" || !selected)
120
+ continue;
121
+ for (const token of network.server.auth.tokens ?? []) {
122
+ if (token.id !== "operator" && !selected.has(token.id)
123
+ && !isPairingAuthToken(network.server, token)
124
+ && !isObserveOnlyConsoleToken(token)) {
125
+ organizationIdentityFail(`Moltnet actor token ${token.id} is not selected by exactly one actor`);
126
+ }
127
+ }
128
+ }
129
+ };
130
+ export const resolveMoltnetExternalParticipantIntents = (plan) => {
131
+ const identity = plan.organizationIdentity;
132
+ const root = rootOrganizationTeam(plan);
133
+ if (!identity || !root?.externalParticipants?.length)
134
+ return [];
135
+ const paths = organizationAgentPaths(plan);
136
+ const agents = new Map(identity.agentMembers.map((member) => [member.memberId, member]));
137
+ const networkIds = new Set((root.networks ?? []).map((network) => network.id));
138
+ const result = [];
139
+ for (const service of root.externalParticipants) {
140
+ const participant = identity.externalParticipants.find((entry) => entry.memberId === service.id);
141
+ if (!participant) {
142
+ throw new SpawnfileError("validation_error", `missing external participant identity: ${service.id}`);
143
+ }
144
+ for (const attachment of service.surfaces.moltnet) {
145
+ if (!networkIds.has(attachment.network)) {
146
+ organizationIdentityFail(`external participant ${service.id} references unknown network ${attachment.network}`);
147
+ }
148
+ const peers = [];
149
+ for (const [memberId, agent] of agents) {
150
+ const node = plan.nodes.find((entry) => entry.kind === "agent"
151
+ && paths.get(entry.value.source)?.join(".") === memberId);
152
+ const authored = node?.value?.surfaces?.moltnet ?? [];
153
+ const eligible = authored.filter((entry) => entry.network === attachment.network && entry.dms?.enabled === true);
154
+ if (eligible.length > 1) {
155
+ organizationIdentityFail(`duplicate eligible Moltnet peer for ${service.id}/${attachment.network}`);
156
+ }
157
+ if (eligible.length === 1)
158
+ peers.push(agent.memberId);
159
+ }
160
+ if (new Set(peers).size !== peers.length) {
161
+ organizationIdentityFail(`duplicate eligible Moltnet peer for ${service.id}/${attachment.network}`);
162
+ }
163
+ if (peers.length === 0) {
164
+ organizationIdentityFail(`external participant ${service.id}/${attachment.network} has no eligible direct-message peers`);
165
+ }
166
+ peers.sort(compareOrganizationIds);
167
+ const network = root.networks?.find((entry) => entry.id === attachment.network);
168
+ const token = network?.server?.mode === "managed"
169
+ ? actorTokenFor(network.server, attachment.auth.token_id, service.id, "allow")
170
+ : undefined;
171
+ result.push({ participant, networkId: attachment.network, tokenId: attachment.auth.token_id,
172
+ tokenEnv: token?.secret ?? "", directMessagePeers: peers });
173
+ }
174
+ }
175
+ return result;
176
+ };
@@ -1,10 +1,6 @@
1
- import type { CompilePlan, MoltnetExternalParticipantIntent } from "./types.js";
2
- export declare const ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}$";
3
- export declare const ORGANIZATION_MEMBER_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}(\\.[a-z][a-z0-9-]{0,62}){0,7}$";
4
- export declare const MAX_ORGANIZATION_MEMBER_DEPTH = 8;
5
- export declare const MAX_ORGANIZATION_MEMBER_ID_BYTES = 255;
6
- export declare const MAX_ORGANIZATION_AGENT_MEMBERS = 128;
7
- export declare const MAX_EXTERNAL_PARTICIPANTS = 32;
1
+ import type { CompilePlan } from "./types.js";
2
+ export { MAX_EXTERNAL_PARTICIPANTS, MAX_ORGANIZATION_AGENT_MEMBERS, MAX_ORGANIZATION_MEMBER_DEPTH, MAX_ORGANIZATION_MEMBER_ID_BYTES, ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE, ORGANIZATION_MEMBER_ID_PATTERN_SOURCE, } from "./organizationIdentityGraph.js";
3
+ export { resolveMoltnetExternalParticipantIntents, validateB31MoltnetAuth, } from "./organizationExternalParticipants.js";
8
4
  export interface ResolvedOrganizationAgentMember {
9
5
  readonly authoredMemberKey: string;
10
6
  readonly kind: "agent";
@@ -23,5 +19,3 @@ export interface ResolvedOrganizationIdentity {
23
19
  }
24
20
  export declare const resolveCanonicalAgentMemberId: (plan: CompilePlan, agentSource: string) => string | undefined;
25
21
  export declare const resolveOrganizationIdentity: (plan: CompilePlan) => ResolvedOrganizationIdentity | undefined;
26
- export declare const validateB31MoltnetAuth: (plan: CompilePlan) => void;
27
- export declare const resolveMoltnetExternalParticipantIntents: (plan: CompilePlan) => MoltnetExternalParticipantIntent[];
@@ -1,297 +1,64 @@
1
- import { SpawnfileError } from "../shared/index.js";
2
- export const ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}$";
3
- export const ORGANIZATION_MEMBER_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}(\\.[a-z][a-z0-9-]{0,62}){0,7}$";
4
- export const MAX_ORGANIZATION_MEMBER_DEPTH = 8;
5
- export const MAX_ORGANIZATION_MEMBER_ID_BYTES = 255;
6
- export const MAX_ORGANIZATION_AGENT_MEMBERS = 128;
7
- export const MAX_EXTERNAL_PARTICIPANTS = 32;
8
- const segment = new RegExp(ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE, "u");
1
+ import { assertOrganizationSegment, compareOrganizationIds, freezeOrganizationIdentity, MAX_EXTERNAL_PARTICIPANTS, MAX_ORGANIZATION_AGENT_MEMBERS, MAX_ORGANIZATION_MEMBER_DEPTH, MAX_ORGANIZATION_MEMBER_ID_BYTES, ORGANIZATION_MEMBER_ID_PATTERN_SOURCE, organizationAgentPaths, organizationIdentityFail, rootOrganizationTeam, } from "./organizationIdentityGraph.js";
2
+ export { MAX_EXTERNAL_PARTICIPANTS, MAX_ORGANIZATION_AGENT_MEMBERS, MAX_ORGANIZATION_MEMBER_DEPTH, MAX_ORGANIZATION_MEMBER_ID_BYTES, ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE, ORGANIZATION_MEMBER_ID_PATTERN_SOURCE, } from "./organizationIdentityGraph.js";
3
+ export { resolveMoltnetExternalParticipantIntents, validateB31MoltnetAuth, } from "./organizationExternalParticipants.js";
9
4
  const memberIdPattern = new RegExp(ORGANIZATION_MEMBER_ID_PATTERN_SOURCE, "u");
10
- const fail = (message) => { throw new SpawnfileError("validation_error", message); };
11
- const required = (value, message) => value == null ? fail(message) : value;
12
- const assertSegment = (value, label) => {
13
- if (!segment.test(value))
14
- fail(`${label} must match ${ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE}`);
15
- };
16
- const freeze = (value) => {
17
- if (value && typeof value === "object") {
18
- Object.freeze(value);
19
- for (const child of Object.values(value))
20
- freeze(child);
21
- }
22
- return value;
23
- };
24
- const byAscii = (left, right) => left < right ? -1 : left > right ? 1 : 0;
25
- const exact = (actual, expected) => actual?.length === expected.length && actual.every((value, index) => value === expected[index]);
26
- const teamNodes = (plan) => new Map(plan.nodes.filter((node) => node.kind === "team").map((node) => [node.value.source, node.value]));
27
- const rootTeam = (plan) => {
28
- const node = plan.nodes.find((entry) => entry.id === plan.root || entry.value.source === plan.root);
29
- return node?.value.kind === "team" ? node.value : undefined;
30
- };
31
- const pathsToAgents = (plan) => {
32
- const teams = teamNodes(plan);
33
- const edges = plan.edges.filter((edge) => edge.kind === "team_member");
34
- const paths = new Map();
35
- const teamPaths = new Map();
36
- const visitedNodeIds = new Set();
37
- const walk = (source, prefix, seen) => {
38
- if (seen.has(source))
39
- fail(`organization member graph cycle at ${source}`);
40
- const team = teams.get(source);
41
- if (!team)
42
- return;
43
- const priorTeamPath = teamPaths.get(source);
44
- if (priorTeamPath)
45
- fail(`team is reached through multiple organization paths: ${source}`);
46
- teamPaths.set(source, prefix);
47
- const node = plan.nodes.find((entry) => entry.value.source === source);
48
- if (!node || node.kind !== "team")
49
- return fail(`organization graph references missing team ${source}`);
50
- const resolvedNode = node;
51
- visitedNodeIds.add(resolvedNode.id);
52
- const outgoing = edges
53
- .filter((entry) => entry.from === resolvedNode.id)
54
- .sort((left, right) => byAscii(left.label, right.label));
55
- const memberSlots = new Set(team.members.map((member) => member.id));
56
- if (memberSlots.size !== team.members.length || outgoing.length !== team.members.length) {
57
- fail(`organization graph cardinality mismatch for team ${team.name}`);
58
- }
59
- const localSlots = new Set();
60
- for (const edge of outgoing) {
61
- if (localSlots.has(edge.label))
62
- fail(`duplicate organization member slot: ${edge.label}`);
63
- localSlots.add(edge.label);
64
- assertSegment(edge.label, "organization member slot");
65
- const next = [...prefix, edge.label];
66
- if (next.length > MAX_ORGANIZATION_MEMBER_DEPTH)
67
- fail("organization member depth exceeds 8");
68
- const child = plan.nodes.find((node) => node.id === edge.to);
69
- if (!child)
70
- throw new SpawnfileError("validation_error", `organization graph references missing node ${edge.to}`);
71
- const resolvedChild = child;
72
- const member = team.members.find((entry) => entry.id === edge.label);
73
- if (!member || member.kind !== resolvedChild.kind || member.nodeSource !== resolvedChild.value.source) {
74
- fail(`organization graph member edge mismatch: ${edge.label}`);
75
- }
76
- if (resolvedChild.kind === "agent") {
77
- const previous = paths.get(resolvedChild.value.source);
78
- if (previous)
79
- fail(`agent source is reached through multiple organization paths: ${resolvedChild.value.source}`);
80
- paths.set(resolvedChild.value.source, next);
81
- visitedNodeIds.add(resolvedChild.id);
82
- }
83
- else
84
- walk(resolvedChild.value.source, next, new Set([...seen, source]));
85
- }
86
- };
87
- walk(plan.root, [], new Set());
88
- const rootNode = plan.nodes.find((node) => node.value.source === plan.root);
89
- const organizationNodeIds = new Set(rootNode ? [rootNode.id] : []);
90
- for (const edge of edges) {
91
- organizationNodeIds.add(edge.from);
92
- organizationNodeIds.add(edge.to);
93
- }
94
- const extra = plan.nodes.find((node) => organizationNodeIds.has(node.id) && !visitedNodeIds.has(node.id));
95
- if (extra)
96
- fail(`unreachable organization graph node: ${extra.id}`);
97
- return paths;
98
- };
99
5
  export const resolveCanonicalAgentMemberId = (plan, agentSource) => {
100
- const identity = plan.organizationIdentity;
101
- if (!identity)
6
+ if (!plan.organizationIdentity)
102
7
  return undefined;
103
- const path = pathsToAgents(plan).get(agentSource);
104
- return path?.join(".");
8
+ return organizationAgentPaths(plan).get(agentSource)?.join(".");
105
9
  };
106
10
  export const resolveOrganizationIdentity = (plan) => {
107
- const root = rootTeam(plan);
108
- const declaredTeams = plan.nodes.filter((node) => node.kind === "team" && node.value.externalParticipants !== undefined);
11
+ const root = rootOrganizationTeam(plan);
12
+ const declaredTeams = plan.nodes.filter((node) => node.kind === "team"
13
+ && (node.value.externalParticipants?.length ?? 0) > 0);
109
14
  if (declaredTeams.some((node) => node.value.source !== root?.source)) {
110
- fail("external_participants may only be declared on the root team");
15
+ organizationIdentityFail("external_participants may only be declared on the root team");
111
16
  }
112
- if (!root?.externalParticipants)
17
+ if (!root)
113
18
  return undefined;
114
- const paths = pathsToAgents(plan);
19
+ const paths = organizationAgentPaths(plan);
115
20
  const agents = [];
116
21
  const agentIds = new Set();
117
22
  for (const node of plan.nodes.filter((entry) => entry.kind === "agent")) {
118
23
  const path = paths.get(node.value.source);
119
24
  if (!path)
120
25
  continue;
121
- if (path.length > MAX_ORGANIZATION_MEMBER_DEPTH)
122
- fail("organization member depth exceeds 8");
123
- path.forEach((part) => assertSegment(part, "organization member slot"));
26
+ if (path.length > MAX_ORGANIZATION_MEMBER_DEPTH) {
27
+ organizationIdentityFail("organization member depth exceeds 8");
28
+ }
29
+ path.forEach((part) => assertOrganizationSegment(part, "organization member slot"));
124
30
  const memberId = path.join(".");
125
- if (!memberIdPattern.test(memberId) || Buffer.byteLength(memberId, "ascii") > MAX_ORGANIZATION_MEMBER_ID_BYTES)
126
- fail(`invalid organization member id: ${memberId}`);
31
+ if (!memberIdPattern.test(memberId)
32
+ || Buffer.byteLength(memberId, "ascii") > MAX_ORGANIZATION_MEMBER_ID_BYTES) {
33
+ organizationIdentityFail(`invalid organization member id: ${memberId}`);
34
+ }
127
35
  if (agentIds.has(memberId))
128
- fail(`duplicate organization member id: ${memberId}`);
36
+ organizationIdentityFail(`duplicate organization member id: ${memberId}`);
129
37
  agentIds.add(memberId);
130
38
  agents.push({ authoredMemberKey: path.at(-1), kind: "agent", memberId, principalId: `agent:${memberId}` });
131
39
  }
132
- if (agents.length > MAX_ORGANIZATION_AGENT_MEMBERS)
133
- fail("organization has too many agent members");
40
+ if (agents.length > MAX_ORGANIZATION_AGENT_MEMBERS) {
41
+ organizationIdentityFail("organization has too many agent members");
42
+ }
134
43
  const seen = new Set();
135
- const externalParticipants = root.externalParticipants.map((service) => {
136
- assertSegment(service.id, "external participant id");
44
+ const externalParticipants = (root.externalParticipants ?? []).map((service) => {
45
+ assertOrganizationSegment(service.id, "external participant id");
137
46
  if (seen.has(service.id))
138
- fail(`organization member collision: ${service.id}`);
47
+ organizationIdentityFail(`organization member collision: ${service.id}`);
139
48
  seen.add(service.id);
140
- return { authoredParticipantKey: service.id, kind: "service", memberId: service.id, principalId: `system:${service.id}` };
49
+ return { authoredParticipantKey: service.id, kind: "service",
50
+ memberId: service.id, principalId: `system:${service.id}` };
141
51
  });
142
- for (const agent of agents)
52
+ for (const agent of agents) {
143
53
  if (seen.has(agent.memberId))
144
- fail(`organization member collision: ${agent.memberId}`);
145
- if (externalParticipants.length > MAX_EXTERNAL_PARTICIPANTS)
146
- fail("too many external participants");
147
- const result = { agentMembers: agents.sort((a, b) => byAscii(a.memberId, b.memberId)), externalParticipants: externalParticipants.sort((a, b) => byAscii(a.memberId, b.memberId)) };
148
- return freeze(structuredClone(result));
149
- };
150
- const actorTokenFor = (server, tokenId, memberId, allowObserve = false) => {
151
- const token = server.auth.tokens?.filter((entry) => entry.id === tokenId);
152
- if (token?.length !== 1)
153
- fail(`Moltnet actor token ${tokenId} must exist exactly once`);
154
- const selected = required(token?.[0], `Moltnet actor token ${tokenId} must exist exactly once`);
155
- const validScopes = exact(selected.scopes, ["attach", "write"])
156
- || allowObserve && exact(selected.scopes, ["attach", "observe", "write"]);
157
- if (!validScopes || !exact(selected.agents, [memberId])) {
158
- fail(`Moltnet actor token ${tokenId} has invalid scopes or agents for ${memberId}`);
54
+ organizationIdentityFail(`organization member collision: ${agent.memberId}`);
159
55
  }
160
- return selected;
161
- };
162
- export const validateB31MoltnetAuth = (plan) => {
163
- const root = rootTeam(plan);
164
- if (!root?.externalParticipants)
165
- return;
166
- const identity = plan.organizationIdentity;
167
- const resolvedIdentity = required(identity, "B31 organization identity is missing");
168
- const paths = pathsToAgents(plan);
169
- const agentBySource = new Map(resolvedIdentity.agentMembers.map((member) => {
170
- const source = [...paths.entries()].find(([, path]) => path.join(".") === member.memberId)?.[0];
171
- return [source, member];
172
- }));
173
- const networkIds = new Set(root.externalParticipants.flatMap((service) => service.surfaces.moltnet.map((attachment) => attachment.network)));
174
- for (const network of root.networks ?? []) {
175
- if (!root.externalParticipants.some((service) => service.surfaces.moltnet.some((attachment) => attachment.network === network.id)))
176
- continue;
177
- assertSegment(network.id, "B31 network id");
178
- if (network.server?.mode !== "managed" || network.server.auth.mode !== "bearer" || network.server.direct_messages !== true) {
179
- fail(`B31 network ${network.id} requires managed bearer direct_messages`);
180
- }
181
- const server = network.server;
182
- const managedServer = required(server, `B31 network ${network.id} requires a managed server`);
183
- if (JSON.stringify(managedServer.auth.client) !== JSON.stringify({ token_id: "operator" })) {
184
- fail(`B31 network ${network.id} requires auth.client token_id operator`);
185
- }
186
- const tokens = managedServer.auth.tokens ?? [];
187
- const operator = tokens.find((token) => token.id === "operator");
188
- if (tokens.filter((token) => token.id === "operator").length !== 1 || !operator || operator.agents !== undefined || !exact(operator.scopes, ["admin", "observe", "write"])) {
189
- fail(`B31 network ${network.id} has invalid operator token`);
190
- }
191
- const operatorSecret = operator?.secret;
192
- const usedTokenIds = new Set();
193
- const usedEnvNames = new Set();
194
- for (const token of tokens) {
195
- assertSegment(token.id, "Moltnet token id");
196
- if (!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(token.secret))
197
- fail(`invalid Moltnet token env name ${token.secret}`);
198
- if (usedTokenIds.has(token.id) || usedEnvNames.has(token.secret))
199
- fail(`duplicate Moltnet token identity ${token.id}`);
200
- usedTokenIds.add(token.id);
201
- usedEnvNames.add(token.secret);
202
- if (token.id !== "operator" && token.secret === operatorSecret)
203
- fail("operator and actor token env identities must differ");
204
- }
205
- }
206
- const selectedByNetwork = new Map();
207
- const selectedActorKeys = new Set();
208
- for (const member of resolvedIdentity.agentMembers) {
209
- const source = [...agentBySource.entries()].find(([, value]) => value.memberId === member.memberId)?.[0];
210
- const node = plan.nodes.find((entry) => entry.kind === "agent" && entry.value.source === source);
211
- const attachments = node?.value?.surfaces?.moltnet ?? [];
212
- for (const attachment of attachments.filter((entry) => networkIds.has(entry.network))) {
213
- const network = root.networks?.find((entry) => entry.id === attachment.network);
214
- const selectedTokenId = required(attachment.auth?.tokenId, `B31 agent ${member.memberId} must select auth.token_id`);
215
- const actorKey = `${attachment.network}\u0000${member.memberId}`;
216
- if (selectedActorKeys.has(actorKey))
217
- fail(`B31 actor ${member.memberId} selects more than one token on ${attachment.network}`);
218
- selectedActorKeys.add(actorKey);
219
- if (network?.server?.mode === "managed") {
220
- const token = actorTokenFor(network.server, selectedTokenId, member.memberId);
221
- const selected = selectedByNetwork.get(attachment.network) ?? new Map();
222
- const previous = selected.get(selectedTokenId);
223
- if (previous)
224
- fail(`Moltnet actor token ${selectedTokenId} is shared by ${previous} and ${member.memberId}`);
225
- selected.set(selectedTokenId, member.memberId);
226
- selectedByNetwork.set(attachment.network, selected);
227
- if (token.id === "operator")
228
- fail(`B31 actor ${member.memberId} must not use operator token`);
229
- }
230
- }
231
- }
232
- for (const service of root.externalParticipants) {
233
- for (const attachment of service.surfaces.moltnet) {
234
- const network = root.networks?.find((entry) => entry.id === attachment.network);
235
- if (network?.server?.mode !== "managed")
236
- continue;
237
- const token = actorTokenFor(network.server, attachment.auth.token_id, service.id, true);
238
- if (token.id === "operator")
239
- fail(`B31 external participant ${service.id} must not use operator token`);
240
- const selected = selectedByNetwork.get(attachment.network) ?? new Map();
241
- const previous = selected.get(token.id);
242
- if (previous)
243
- fail(`Moltnet actor token ${token.id} is shared by ${previous} and ${service.id}`);
244
- selected.set(token.id, service.id);
245
- selectedByNetwork.set(attachment.network, selected);
246
- }
247
- }
248
- for (const network of root.networks ?? []) {
249
- const selected = selectedByNetwork.get(network.id);
250
- if (network.server?.mode === "managed" && selected) {
251
- for (const token of network.server.auth.tokens ?? []) {
252
- if (token.id !== "operator" && !selected.has(token.id)) {
253
- fail(`Moltnet actor token ${token.id} is not selected by exactly one actor`);
254
- }
255
- }
256
- }
56
+ if (externalParticipants.length > MAX_EXTERNAL_PARTICIPANTS) {
57
+ organizationIdentityFail("too many external participants");
257
58
  }
258
- };
259
- export const resolveMoltnetExternalParticipantIntents = (plan) => {
260
- const identity = plan.organizationIdentity;
261
- const root = rootTeam(plan);
262
- if (!identity || !root?.externalParticipants)
263
- return [];
264
- const paths = pathsToAgents(plan);
265
- const agents = new Map(identity.agentMembers.map((member) => [member.memberId, member]));
266
- const networkIds = new Set((root.networks ?? []).map((network) => network.id));
267
- const result = [];
268
- for (const service of root.externalParticipants) {
269
- const participant = identity.externalParticipants.find((entry) => entry.memberId === service.id);
270
- if (!participant)
271
- throw new SpawnfileError("validation_error", `missing external participant identity: ${service.id}`);
272
- const resolvedParticipant = participant;
273
- for (const attachment of service.surfaces.moltnet) {
274
- if (!networkIds.has(attachment.network))
275
- fail(`external participant ${service.id} references unknown network ${attachment.network}`);
276
- const peers = [];
277
- for (const [memberId, agent] of agents) {
278
- const node = plan.nodes.find((entry) => entry.kind === "agent" && paths.get(entry.value.source)?.join(".") === memberId);
279
- const authored = node?.value?.surfaces?.moltnet ?? [];
280
- const eligible = authored.filter((entry) => entry.network === attachment.network && entry.dms?.enabled === true);
281
- if (eligible.length > 1)
282
- fail(`duplicate eligible Moltnet peer for ${service.id}/${attachment.network}`);
283
- if (eligible.length === 1)
284
- peers.push(agent.memberId);
285
- }
286
- if (new Set(peers).size !== peers.length)
287
- fail(`duplicate eligible Moltnet peer for ${service.id}/${attachment.network}`);
288
- if (peers.length === 0)
289
- fail(`external participant ${service.id}/${attachment.network} has no eligible direct-message peers`);
290
- peers.sort(byAscii);
291
- const network = root.networks?.find((entry) => entry.id === attachment.network);
292
- const token = network?.server?.mode === "managed" ? actorTokenFor(network.server, attachment.auth.token_id, service.id, true) : undefined;
293
- result.push({ participant: resolvedParticipant, networkId: attachment.network, tokenId: attachment.auth.token_id, tokenEnv: token?.secret ?? "", directMessagePeers: peers });
294
- }
295
- }
296
- return result;
59
+ const result = {
60
+ agentMembers: agents.sort((a, b) => compareOrganizationIds(a.memberId, b.memberId)),
61
+ externalParticipants: externalParticipants.sort((a, b) => compareOrganizationIds(a.memberId, b.memberId)),
62
+ };
63
+ return freezeOrganizationIdentity(structuredClone(result));
297
64
  };
@@ -0,0 +1,15 @@
1
+ import type { CompilePlan, ResolvedTeamNode } from "./types.js";
2
+ export declare const ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}$";
3
+ export declare const ORGANIZATION_MEMBER_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}(\\.[a-z][a-z0-9-]{0,62}){0,7}$";
4
+ export declare const MAX_ORGANIZATION_MEMBER_DEPTH = 8;
5
+ export declare const MAX_ORGANIZATION_MEMBER_ID_BYTES = 255;
6
+ export declare const MAX_ORGANIZATION_AGENT_MEMBERS = 128;
7
+ export declare const MAX_EXTERNAL_PARTICIPANTS = 32;
8
+ export declare const organizationIdentityFail: (message: string) => never;
9
+ export declare const requiredOrganizationIdentity: <T>(value: T, message: string) => NonNullable<T>;
10
+ export declare const assertOrganizationSegment: (value: string, label: string) => void;
11
+ export declare const freezeOrganizationIdentity: <T>(value: T) => T;
12
+ export declare const compareOrganizationIds: (left: string, right: string) => number;
13
+ export declare const exactOrganizationStrings: (actual: readonly string[] | undefined, expected: readonly string[]) => boolean;
14
+ export declare const rootOrganizationTeam: (plan: CompilePlan) => ResolvedTeamNode | undefined;
15
+ export declare const organizationAgentPaths: (plan: CompilePlan) => Map<string, string[]>;