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,243 @@
1
+ import { SpawnfileError } from "../../shared/index.js";
2
+ import { CLI_ENGINE_SKILL_BASE_DIRECTORIES, createAgentCapabilities, createDiagnostic, createDocumentFiles, createSkillFiles } from "../common.js";
3
+ import { parseEveryScheduleMs } from "../scheduleUtils.js";
4
+ import { createDaimonContainerTargets, daimonMemoryCapabilityFor, daimonMemorySelectionWarning, daimonMemoryVectorRecallWarning, DAIMON_CONFIG_FILE, DAIMON_CONTROL_PORT, DAIMON_ENGINES, resolveDaimonEngine } from "./config.js";
5
+ import { resolveDaimonGrokModel } from "./grokModel.js";
6
+ import { prepareDaimonRuntimeAuth } from "./runAuth.js";
7
+ import { hasDaimonScheduleAuthority } from "./scheduleAuthority.js";
8
+ import { resolveDaimonAttention } from "./attention.js";
9
+ const assertDaimonSurfaces = (surfaces) => {
10
+ if (!surfaces)
11
+ return;
12
+ const enabled = Object.entries(surfaces)
13
+ .filter(([name]) => name !== "moltnet")
14
+ .filter(([, value]) => Array.isArray(value) ? value.length > 0 : value !== undefined)
15
+ .map(([name]) => name);
16
+ if (enabled.length > 0) {
17
+ throw new SpawnfileError("validation_error", `Daimon organization runtime v1 only lowers Moltnet agent surfaces; remove: ${enabled.sort().join(", ")}`);
18
+ }
19
+ };
20
+ const assertDaimonModel = (target) => {
21
+ if (target.provider === "openai" && target.auth.method === "codex" && !target.endpoint && !target.reasoningEffort)
22
+ return;
23
+ if (target.provider === "xai" && target.auth.method === "grok" && !target.endpoint)
24
+ return;
25
+ throw new SpawnfileError("validation_error", "Daimon organization runtime v1 accepts only the optional OpenAI Codex subscription intent or a brokered xAI Grok declaration; AGY engine auth stays Daimon-owned");
26
+ };
27
+ /**
28
+ * The compile-time warning for an agent that asked to be confined to its
29
+ * workspace on a runtime that does not confine anything.
30
+ *
31
+ * `restrict_to_workspace` is accepted by `validateRuntimeOptions` below (it is
32
+ * on the allowlist beside `engine`) and is then read by nothing under
33
+ * `src/runtime/daimon/`: the `noopolis.daimon.organization-runtime.v1` contract
34
+ * this adapter lowers into carries no workspace-confinement field, so the
35
+ * declaration reaches no runtime behavior at all. PicoClaw consumes an
36
+ * identically named option and really does lower it
37
+ * (`../picoclaw/adapter.ts`), which is exactly what makes the option look
38
+ * wired here.
39
+ *
40
+ * This warns rather than implementing confinement, because real workspace
41
+ * restriction for Daimon is a sandbox-profile change in daimon itself plus a
42
+ * widening of the digest-pinned organization runtime contract. It warns rather
43
+ * than rejecting, because an existing project that already declares the option
44
+ * must keep compiling. And it does not stay silent, because a security option
45
+ * that is accepted and ignored is a worse failure than one that is refused.
46
+ *
47
+ * Declaring `restrict_to_workspace: false` asks for nothing, so it says
48
+ * nothing.
49
+ */
50
+ const daimonWorkspaceRestrictionWarning = (node) => {
51
+ const declared = node.runtime.options.restrict_to_workspace;
52
+ if (declared === undefined || declared === false)
53
+ return undefined;
54
+ return `Daimon organization runtime v1 does not enforce restrict_to_workspace: agent ${node.name} declares `
55
+ + "it, but no Daimon lowering reads the option and the organization runtime contract carries no workspace "
56
+ + "confinement field, so this agent's engine can reach the whole container filesystem. Move the agent to the "
57
+ + "picoclaw runtime, which lowers restrict_to_workspace into its agent defaults, or drop the option and treat "
58
+ + "the container boundary as this agent's only isolation.";
59
+ };
60
+ /**
61
+ * Workspace skill roots per Daimon engine.
62
+ *
63
+ * Codex and AGY keep both CLI-engine roots. A brokered Grok worker loads no
64
+ * workspace skill at all: Grok 1.0.34 discovers `.agents/skills` (never
65
+ * `.codex/skills`) only in a trusted folder, and Daimon keeps the workspace
66
+ * untrusted (root-owned empty `trusted_folders.toml`) and replaces the system
67
+ * prompt, whose fixed text references no skill. Emitting either root would ship
68
+ * files nothing reads, so none are emitted and the declaration is reported.
69
+ */
70
+ export const daimonSkillBaseDirectories = (node) => resolveDaimonEngine(node) === "grok" ? [] : CLI_ENGINE_SKILL_BASE_DIRECTORIES;
71
+ const daimonGrokSkillWarning = (node) => {
72
+ if (resolveDaimonEngine(node) !== "grok" || node.skills.length === 0)
73
+ return undefined;
74
+ return `Daimon Grok agent ${node.name} declares workspace skills (${node.skills.map((skill) => skill.name).sort().join(", ")}) `
75
+ + "that its brokered worker never loads: Grok discovers project skills only in a trusted workspace, and Daimon keeps the "
76
+ + "workspace untrusted and supplies instructions through the prompt. No skill files are emitted; move the guidance into the agent's docs.";
77
+ };
78
+ const daimonCodexPolicyError = (node) => {
79
+ if (node.runtime.options.codex_policy === undefined)
80
+ return undefined;
81
+ if (node.runtime.options.codex_policy !== "workspace-no-network") {
82
+ return "Daimon runtime option codex_policy must be workspace-no-network";
83
+ }
84
+ if (resolveDaimonEngine(node) !== "codex") {
85
+ return "Daimon runtime option codex_policy=workspace-no-network is only supported for Codex agents";
86
+ }
87
+ if (node.execution?.sandbox?.mode !== "workspace") {
88
+ return "Daimon runtime option codex_policy=workspace-no-network requires execution.sandbox.mode: workspace";
89
+ }
90
+ return undefined;
91
+ };
92
+ /**
93
+ * AGY is no longer excluded here.
94
+ *
95
+ * It used to be: an AGY agent that declared an MCP server or a Moltnet surface
96
+ * was rejected outright, because Daimon pinned AGY to `toolAccess: "none"`.
97
+ * Daimon now mounts AGY on the same per-wake MCP endpoint Codex and Grok get
98
+ * (`daimon/src/pi/cliMcpRegistration.ts`), so an AGY agent can take part in an
99
+ * organization, and the declaration this compiler lowers is one the runtime
100
+ * actually honours. The remaining validations are engine-independent and stay.
101
+ */
102
+ const unsupportedAgentFeatures = (node) => {
103
+ for (const server of node.mcpServers) {
104
+ if (!server.tools?.length)
105
+ throw new SpawnfileError("validation_error", `Daimon MCP server ${server.name} requires an explicit tools allowlist`);
106
+ if (server.transport === "stdio" && !server.command?.startsWith("/"))
107
+ throw new SpawnfileError("validation_error", `Daimon stdio MCP server ${server.name} requires an absolute command`);
108
+ }
109
+ const engine = resolveDaimonEngine(node);
110
+ if (engine === "agy" && node.execution?.model) {
111
+ throw new SpawnfileError("validation_error", "Daimon AGY agents must omit Spawnfile execution.model; their subscription auth and model selection are Daimon-owned");
112
+ }
113
+ if (engine === "codex" && node.execution?.model?.primary.auth?.method === "grok") {
114
+ throw new SpawnfileError("validation_error", `Daimon Codex agent ${node.name} cannot declare Grok model auth`);
115
+ }
116
+ if (engine === "grok")
117
+ resolveDaimonGrokModel(node);
118
+ };
119
+ const scheduleCapabilityFor = async (node) => {
120
+ if (!node.schedule)
121
+ return {};
122
+ let authoritative = false;
123
+ try {
124
+ authoritative = await hasDaimonScheduleAuthority();
125
+ }
126
+ catch { /* The lowering gate reports invalid receipt details. */ }
127
+ if (!authoritative) {
128
+ return {
129
+ message: "Daimon v2 schedule state: degraded; the selected image receipt does not attest v2, so no schedule lowering is emitted",
130
+ outcome: "degraded"
131
+ };
132
+ }
133
+ if (node.schedule.kind === "disabled") {
134
+ return {
135
+ message: "Daimon v2 schedule state: disabled; normalized=disabled; persistence=none; timer=stopped",
136
+ outcome: "supported"
137
+ };
138
+ }
139
+ const normalized = node.schedule.kind === "every"
140
+ ? `every/${parseEveryScheduleMs(node.schedule.every)}ms`
141
+ : `cron/${node.schedule.cron.trim().replace(/\s+/gu, " ")}; zone=${node.schedule.timezone ?? "UTC"}`;
142
+ return {
143
+ message: `Daimon v2 schedule state: supported; normalized=${normalized}; persistence=sha256(agent+schedule) in durable acceptance root; timer=runtime-managed`,
144
+ outcome: "supported"
145
+ };
146
+ };
147
+ export const daimonAdapter = {
148
+ assertSupportedModelTarget: assertDaimonModel,
149
+ assertSupportedSurfaces: assertDaimonSurfaces,
150
+ container: {
151
+ configFileName: DAIMON_CONFIG_FILE,
152
+ configPathEnv: "SPAWNFILE_DAIMON_CONFIG",
153
+ env: [{
154
+ description: "Bearer token for the Daimon organization control API",
155
+ generated: true,
156
+ name: "SPAWNFILE_DAIMON_CONTROL_TOKEN",
157
+ required: true
158
+ }],
159
+ instancePaths: {
160
+ configPathTemplate: "<instance-root>/daimon/<config-file>",
161
+ sourceWorkspacePathTemplate: "<instance-root>/workspace/agents/<source-slug>",
162
+ workspacePathTemplate: "<instance-root>/workspace"
163
+ },
164
+ port: DAIMON_CONTROL_PORT,
165
+ portEnv: "SPAWNFILE_DAIMON_CONTROL_PORT",
166
+ standaloneBaseImage: "node:24-bookworm-slim",
167
+ startCommand: ["bash", "<runtime-root>/daimon-start.sh"],
168
+ systemDeps: [
169
+ "bash",
170
+ "bubblewrap",
171
+ "ca-certificates",
172
+ "curl",
173
+ "dbus-daemon",
174
+ "gnome-keyring",
175
+ "util-linux"
176
+ ]
177
+ },
178
+ async compileAgent(node) {
179
+ unsupportedAgentFeatures(node);
180
+ const scheduleCapability = await scheduleCapabilityFor(node);
181
+ const memorySelectionWarning = daimonMemorySelectionWarning(node);
182
+ const memoryVectorWarning = daimonMemoryVectorRecallWarning(node);
183
+ const workspaceRestrictionWarning = daimonWorkspaceRestrictionWarning(node);
184
+ const codexPolicyError = daimonCodexPolicyError(node);
185
+ const grokSkillWarning = daimonGrokSkillWarning(node);
186
+ return {
187
+ capabilities: createAgentCapabilities(node, {
188
+ mcpOutcome: "supported",
189
+ moltnetMessage: "Daimon exposes one scoped authenticated send tool during real cognition turns",
190
+ moltnetOutcome: "supported",
191
+ ...daimonMemoryCapabilityFor(node),
192
+ scheduleMessage: scheduleCapability.message,
193
+ scheduleOutcome: scheduleCapability.outcome
194
+ }),
195
+ diagnostics: [
196
+ ...(node.execution?.sandbox
197
+ ? [createDiagnostic("warn", "Daimon runtime isolation is enforced by the selected runtime image")]
198
+ : []),
199
+ ...(memorySelectionWarning ? [createDiagnostic("warn", memorySelectionWarning)] : []),
200
+ ...(memoryVectorWarning ? [createDiagnostic("warn", memoryVectorWarning)] : []),
201
+ ...(workspaceRestrictionWarning ? [createDiagnostic("warn", workspaceRestrictionWarning)] : []),
202
+ ...(grokSkillWarning ? [createDiagnostic("warn", grokSkillWarning)] : []),
203
+ ...(codexPolicyError ? [createDiagnostic("error", codexPolicyError)] : [])
204
+ ],
205
+ files: [
206
+ ...createDocumentFiles("workspace", node.docs),
207
+ ...createSkillFiles(daimonSkillBaseDirectories(node), node.skills)
208
+ ]
209
+ };
210
+ },
211
+ createContainerTargets: createDaimonContainerTargets,
212
+ name: "daimon",
213
+ prepareRuntimeAuth: prepareDaimonRuntimeAuth,
214
+ systemInstructionSurface: {
215
+ placement: "append_pointer",
216
+ resolvePath() {
217
+ return "workspace/AGENTS.md";
218
+ }
219
+ },
220
+ validateRuntimeOptions(options) {
221
+ const diagnostics = [];
222
+ if (options.engine !== undefined &&
223
+ (typeof options.engine !== "string" || !DAIMON_ENGINES.includes(options.engine))) {
224
+ diagnostics.push(createDiagnostic("error", `Daimon runtime option engine must be one of ${DAIMON_ENGINES.join(", ")}`));
225
+ }
226
+ for (const key of Object.keys(options).filter((key) => !["engine", "restrict_to_workspace", "codex_policy", "attention"].includes(key))) {
227
+ diagnostics.push(createDiagnostic("error", `Daimon runtime option ${key} is not part of organization runtime v1`));
228
+ }
229
+ if (options.codex_policy !== undefined && options.codex_policy !== "workspace-no-network") {
230
+ diagnostics.push(createDiagnostic("error", "Daimon runtime option codex_policy must be workspace-no-network"));
231
+ }
232
+ if (options.codex_policy === "workspace-no-network" && options.engine !== undefined && options.engine !== "codex") {
233
+ diagnostics.push(createDiagnostic("error", "Daimon runtime option codex_policy=workspace-no-network is only supported for Codex agents"));
234
+ }
235
+ try {
236
+ resolveDaimonAttention(options.attention);
237
+ }
238
+ catch (error) {
239
+ diagnostics.push(createDiagnostic("error", error instanceof Error ? error.message : "Daimon attention is invalid"));
240
+ }
241
+ return diagnostics;
242
+ }
243
+ };
@@ -0,0 +1,8 @@
1
+ export type DaimonAttention = Readonly<{
2
+ maxBatchMessages: number;
3
+ maxBatchBytes: number;
4
+ maxExecutions?: number;
5
+ maxTokens?: number;
6
+ }>;
7
+ export declare const resolveDaimonAttention: (value: unknown) => DaimonAttention | undefined;
8
+ export declare const assertDaimonAttentionAuthority: () => Promise<void>;
@@ -0,0 +1,32 @@
1
+ import { SpawnfileError } from "../../shared/index.js";
2
+ import { hasDaimonScheduleAuthority } from "./scheduleAuthority.js";
3
+ const fields = {
4
+ max_batch_messages: { target: "maxBatchMessages", minimum: 1, maximum: 32 },
5
+ max_batch_bytes: { target: "maxBatchBytes", minimum: 1024, maximum: 12000 },
6
+ max_executions: { target: "maxExecutions", minimum: 1, maximum: Number.MAX_SAFE_INTEGER },
7
+ max_tokens: { target: "maxTokens", minimum: 1, maximum: Number.MAX_SAFE_INTEGER }
8
+ };
9
+ export const resolveDaimonAttention = (value) => {
10
+ if (value === undefined)
11
+ return undefined;
12
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
13
+ throw new SpawnfileError("validation_error", "Daimon runtime option attention must be an object");
14
+ }
15
+ const result = { maxBatchMessages: 8, maxBatchBytes: 12000 };
16
+ for (const [key, limit] of Object.entries(value)) {
17
+ if (!Object.hasOwn(fields, key)) {
18
+ throw new SpawnfileError("validation_error", `Daimon runtime option attention.${key} is unsupported`);
19
+ }
20
+ const field = fields[key];
21
+ if (typeof limit !== "number" || !Number.isSafeInteger(limit) || limit < field.minimum || limit > field.maximum) {
22
+ throw new SpawnfileError("validation_error", `Daimon runtime option attention.${key} must be an integer from ${field.minimum} to ${field.maximum}`);
23
+ }
24
+ result[field.target] = limit;
25
+ }
26
+ return result;
27
+ };
28
+ export const assertDaimonAttentionAuthority = async () => {
29
+ if (!await hasDaimonScheduleAuthority()) {
30
+ throw new SpawnfileError("runtime_error", "Daimon attention is disabled: the selected image capability receipt does not attest its runtime contract");
31
+ }
32
+ };
@@ -0,0 +1,25 @@
1
+ import type { ResolvedAgentNode } from "../../compiler/types.js";
2
+ import type { ContainerTarget, ContainerTargetInput } from "../types.js";
3
+ import { DAIMON_INSTANCE_STATE_ROOT, daimonMemoryCapabilityFor, daimonMemorySelectionWarning, daimonMemoryVectorRecallWarning, resolveDaimonAgentMemory } from "./memory.js";
4
+ export declare const DAIMON_CODEX_WORKSPACE_NO_NETWORK_POLICY: {
5
+ readonly mode: "workspace-write";
6
+ readonly networkAccess: false;
7
+ readonly webSearch: "disabled";
8
+ };
9
+ export { DAIMON_INSTANCE_STATE_ROOT, daimonMemoryCapabilityFor, daimonMemorySelectionWarning, daimonMemoryVectorRecallWarning, resolveDaimonAgentMemory };
10
+ export declare const DAIMON_CONFIG_FILE = "daimon-organization-runtime.json";
11
+ export declare const DAIMON_CONTROL_PORT = 19700;
12
+ export declare const DAIMON_MAX_AGENTS = 32;
13
+ export declare const DAIMON_ORGANIZATION_TARGET_ID = "daimon-organization";
14
+ export declare const DAIMON_RUNTIME_ACCEPTANCE_STORE_DIRECTORY = "state/wake-acceptance";
15
+ export declare const DAIMON_RUNTIME_ACCEPTANCE_STORE_ENV = "DAIMON_RUNTIME_ACCEPTANCE_STORE";
16
+ export declare const DAIMON_RUNTIME_ACCEPTANCE_STORE_MOUNT_ID = "daimon-organization-acceptance-store";
17
+ export declare const DAIMON_RUNTIME_READINESS_RECEIPT_ENV = "DAIMON_RUNTIME_READINESS_RECEIPT";
18
+ export declare const DAIMON_WAKE_FUSE_DIRECTORY = "/var/lib/spawnfile/daimon/wake-fuse";
19
+ export declare const DAIMON_WAKE_FUSE_DIRECTORY_ENV = "DAIMON_WAKE_FUSE_DIRECTORY";
20
+ export declare const DAIMON_WAKE_FUSE_MOUNT_ID = "daimon-wake-fuse";
21
+ export declare const DAIMON_RUNTIME_HOMES_DIRECTORY = "runtime-homes";
22
+ export declare const DAIMON_ENGINES: readonly ["agy", "codex", "grok"];
23
+ type DaimonEngine = typeof DAIMON_ENGINES[number];
24
+ export declare const resolveDaimonEngine: (node: ResolvedAgentNode) => DaimonEngine;
25
+ export declare const createDaimonContainerTargets: (inputs: ContainerTargetInput[]) => Promise<ContainerTarget[]>;
@@ -0,0 +1,272 @@
1
+ import path from "node:path";
2
+ import { parseEveryScheduleMs } from "../scheduleUtils.js";
3
+ import { SpawnfileError } from "../../shared/index.js";
4
+ import { DAIMON_AGY_SUBSCRIPTION_REALM, DAIMON_ENGINE_CREDENTIALS, DAIMON_GROK_SUBSCRIPTION_REALM, DAIMON_GROK_TURN_USAGE_LEDGER } from "./contractManifest.js";
5
+ import { DAIMON_INSTANCE_STATE_ROOT, daimonMemoryCapabilityFor, daimonMemorySelectionWarning, daimonMemoryVectorRecallWarning, resolveDaimonAgentMemory } from "./memory.js";
6
+ import { assertDaimonScheduleAuthority } from "./scheduleAuthority.js";
7
+ import { assertDaimonAttentionAuthority, resolveDaimonAttention } from "./attention.js";
8
+ import { resolveDaimonGrokModel } from "./grokModel.js";
9
+ export const DAIMON_CODEX_WORKSPACE_NO_NETWORK_POLICY = { mode: "workspace-write", networkAccess: false, webSearch: "disabled" };
10
+ // Re-exported so every existing importer of these names keeps working; the
11
+ // definitions themselves now live in `./memory.js`.
12
+ export { DAIMON_INSTANCE_STATE_ROOT, daimonMemoryCapabilityFor, daimonMemorySelectionWarning, daimonMemoryVectorRecallWarning, resolveDaimonAgentMemory };
13
+ export const DAIMON_CONFIG_FILE = "daimon-organization-runtime.json";
14
+ export const DAIMON_CONTROL_PORT = 19700;
15
+ export const DAIMON_MAX_AGENTS = 32;
16
+ export const DAIMON_ORGANIZATION_TARGET_ID = "daimon-organization";
17
+ export const DAIMON_RUNTIME_ACCEPTANCE_STORE_DIRECTORY = "state/wake-acceptance";
18
+ export const DAIMON_RUNTIME_ACCEPTANCE_STORE_ENV = "DAIMON_RUNTIME_ACCEPTANCE_STORE";
19
+ export const DAIMON_RUNTIME_ACCEPTANCE_STORE_MOUNT_ID = "daimon-organization-acceptance-store";
20
+ export const DAIMON_RUNTIME_READINESS_RECEIPT_ENV = "DAIMON_RUNTIME_READINESS_RECEIPT";
21
+ export const DAIMON_WAKE_FUSE_DIRECTORY = "/var/lib/spawnfile/daimon/wake-fuse";
22
+ export const DAIMON_WAKE_FUSE_DIRECTORY_ENV = "DAIMON_WAKE_FUSE_DIRECTORY";
23
+ export const DAIMON_WAKE_FUSE_MOUNT_ID = "daimon-wake-fuse";
24
+ export const DAIMON_RUNTIME_HOMES_DIRECTORY = "runtime-homes";
25
+ const DAIMON_MAX_CONFIG_BYTES = 1_048_576;
26
+ const DAIMON_MAX_INSTRUCTION_BYTES = 16_384;
27
+ const DAIMON_MAX_INSTRUCTION_CODEPOINTS = 16_384;
28
+ export const DAIMON_ENGINES = ["agy", "codex", "grok"];
29
+ const normalizeSchedule = (node) => {
30
+ const schedule = node.schedule;
31
+ if (!schedule || schedule.kind === "disabled")
32
+ return schedule ? { kind: "disabled" } : undefined;
33
+ if (schedule.kind === "every") {
34
+ const interval_ms = parseEveryScheduleMs(schedule.every);
35
+ if (interval_ms === null)
36
+ throw new SpawnfileError("validation_error", `invalid every schedule for ${node.name}`);
37
+ return {
38
+ kind: "every", interval_ms, prompt: schedule.prompt ?? "Scheduled work",
39
+ ...(schedule.jitter_seconds === undefined ? {} : { jitter_seconds: schedule.jitter_seconds })
40
+ };
41
+ }
42
+ return {
43
+ cron: schedule.cron.trim().replace(/\s+/gu, " "),
44
+ kind: "cron",
45
+ prompt: schedule.prompt ?? "Scheduled work",
46
+ timezone: schedule.timezone ?? "UTC",
47
+ ...(schedule.jitter_seconds === undefined ? {} : { jitter_seconds: schedule.jitter_seconds })
48
+ };
49
+ };
50
+ const formatInstructions = (node) => node.docs.map((document) => `# ${document.role}\n\n${document.content}`).join("\n\n").trim() ||
51
+ `You are ${node.name}. Follow the workspace instructions.`;
52
+ const assertPublicInstructionBounds = (agentId, instructions) => {
53
+ if (Buffer.byteLength(instructions, "utf8") > DAIMON_MAX_INSTRUCTION_BYTES ||
54
+ [...instructions].length > DAIMON_MAX_INSTRUCTION_CODEPOINTS) {
55
+ throw new SpawnfileError("validation_error", `Daimon organization runtime v1 instructions for ${agentId} exceed Daimon's public config limit`);
56
+ }
57
+ };
58
+ export const resolveDaimonEngine = (node) => {
59
+ const engine = node.runtime.options.engine ?? "codex";
60
+ if (typeof engine === "string" && DAIMON_ENGINES.includes(engine)) {
61
+ return engine;
62
+ }
63
+ throw new SpawnfileError("validation_error", `Daimon runtime option engine must be one of ${DAIMON_ENGINES.join(", ")}`);
64
+ };
65
+ const resolveDaimonEngineConfig = (node) => {
66
+ const kind = resolveDaimonEngine(node);
67
+ if (kind === "grok") {
68
+ const declared = resolveDaimonGrokModel(node);
69
+ return { kind, model: declared.model, reasoningEffort: declared.reasoningEffort };
70
+ }
71
+ const model = kind === "codex" ? node.execution?.model?.primary?.name : undefined;
72
+ const codexSandbox = kind === "codex" && node.runtime.options.codex_policy === "workspace-no-network"
73
+ ? DAIMON_CODEX_WORKSPACE_NO_NETWORK_POLICY
74
+ : undefined;
75
+ return {
76
+ kind,
77
+ ...(model === undefined ? {} : { model }),
78
+ ...(codexSandbox === undefined ? {} : { codexSandbox })
79
+ };
80
+ };
81
+ const moveWorkspaceFile = (file, slug) => file.path.startsWith("workspace/")
82
+ ? { ...file, path: path.posix.join("workspace", "agents", slug, file.path.slice("workspace/".length)) }
83
+ : file;
84
+ const renderStartScript = (agents) => {
85
+ const acceptanceStorePath = `<instance-root>/${DAIMON_RUNTIME_ACCEPTANCE_STORE_DIRECTORY}`;
86
+ const readinessReceiptPath = `${acceptanceStorePath}/runtime-readiness.json`;
87
+ const setup = agents.flatMap((agent) => {
88
+ const credential = agent.engine.kind === "codex"
89
+ ? DAIMON_ENGINE_CREDENTIALS.codex
90
+ : undefined;
91
+ const inbound = path.posix.join(agent.runtimeHomePath, ".daimon-inbound");
92
+ return [
93
+ // The workspace mode is owned by the uid entrypoint, which grants a grok worker
94
+ // group access. Forcing 0700 here would lock that worker out of its own workspace,
95
+ // so create it only when absent and never restate the mode of an existing directory.
96
+ `[ -d ${JSON.stringify(agent.workspacePath)} ] || install -d -m 700 ${JSON.stringify(agent.workspacePath)}`,
97
+ // A Grok agent's runtime home is traversable by its worker's group (the
98
+ // broker provisioning grants `0710` so the worker can read its setgid
99
+ // `tool-output/` spills); restating 0700 here would revoke that.
100
+ agent.engine.kind === "grok"
101
+ ? `[ -d ${JSON.stringify(agent.runtimeHomePath)} ] || install -d -m 700 ${JSON.stringify(agent.runtimeHomePath)}`
102
+ : `install -d -m 700 ${[
103
+ agent.runtimeHomePath,
104
+ ...(credential === undefined ? [] : [inbound])
105
+ ].map((entry) => JSON.stringify(entry)).join(" ")}`,
106
+ ...(credential === undefined ? [] : [
107
+ `if [ -e ${JSON.stringify(path.posix.join(agent.runtimeHomePath, credential.sourceRelativePath))} ]; then test "$(stat -c %a ${JSON.stringify(path.posix.join(agent.runtimeHomePath, credential.sourceRelativePath))})" = 600; fi`
108
+ ])
109
+ ];
110
+ });
111
+ return [
112
+ "#!/usr/bin/env bash",
113
+ "set -euo pipefail",
114
+ `install -d -m 700 ${JSON.stringify(acceptanceStorePath)}`,
115
+ `export ${DAIMON_RUNTIME_ACCEPTANCE_STORE_ENV}=${JSON.stringify(acceptanceStorePath)}`,
116
+ `rm -f ${JSON.stringify(readinessReceiptPath)}`,
117
+ `export ${DAIMON_RUNTIME_READINESS_RECEIPT_ENV}=${JSON.stringify(readinessReceiptPath)}`,
118
+ ...setup,
119
+ 'if [ "$#" -gt 0 ]; then exec daimon-runtime "$@"; fi',
120
+ "exec daimon-runtime run --config <config-path>"
121
+ ].join("\n") + "\n";
122
+ };
123
+ export const createDaimonContainerTargets = async (inputs) => {
124
+ const agents = inputs.filter((input) => input.kind === "agent" && input.value.kind === "agent");
125
+ if (agents.length === 0)
126
+ return [];
127
+ if (agents.length > DAIMON_MAX_AGENTS) {
128
+ throw new SpawnfileError("validation_error", `Daimon organization runtime v1 supports at most 32 agents; found ${agents.length}. Split the organization across explicit runtime boundaries.`);
129
+ }
130
+ const hasSchedules = agents.some((input) => input.value.schedule !== undefined);
131
+ const attentionById = new Map(agents.map((input) => [input.id, resolveDaimonAttention(input.value.runtime.options.attention)]));
132
+ const hasAttention = [...attentionById.values()].some((attention) => attention !== undefined);
133
+ if (hasAttention)
134
+ await assertDaimonAttentionAuthority();
135
+ if (hasSchedules)
136
+ await assertDaimonScheduleAuthority();
137
+ const configAgents = agents
138
+ .map((input) => {
139
+ const memory = resolveDaimonAgentMemory(input.value);
140
+ return {
141
+ engine: resolveDaimonEngineConfig(input.value),
142
+ id: input.id,
143
+ instructions: formatInstructions(input.value),
144
+ name: input.value.name,
145
+ ...(input.value.mcpServers.length === 0 ? {} : { mcp: input.value.mcpServers.map((server) => ({
146
+ name: server.name, transport: server.transport, args: server.args ?? [], env: server.env ?? {}, tools: server.tools,
147
+ ...(server.command ? { command: server.command } : {}), ...(server.url ? { url: server.url } : {}),
148
+ ...(server.auth?.mode === "bearer" ? { authSecretEnv: server.auth.secret } : {})
149
+ })) }),
150
+ ...(memory ? { memory } : {}),
151
+ ...(attentionById.get(input.id) === undefined ? {} : { attention: attentionById.get(input.id) }),
152
+ ...(input.value.surfaces?.moltnet?.length ? { moltnet: {
153
+ cliPath: "/usr/local/bin/moltnet",
154
+ configPath: `<workspace-path>/agents/${input.slug}/.moltnet/config.json`,
155
+ networks: input.value.surfaces.moltnet.map((attachment) => ({ id: attachment.network, rooms: Object.keys(attachment.rooms ?? {}).sort(), dms: attachment.dms?.enabled === true }))
156
+ } } : {}),
157
+ runtimeHomePath: `<instance-root>/${DAIMON_RUNTIME_HOMES_DIRECTORY}/${input.slug}`,
158
+ workspacePath: `<workspace-path>/agents/${input.slug}`,
159
+ ...(hasSchedules || hasAttention ? { schedule: normalizeSchedule(input.value) ?? { kind: "disabled" } } : {})
160
+ };
161
+ })
162
+ .sort((left, right) => left.id.localeCompare(right.id));
163
+ const engineByNodeId = Object.fromEntries(configAgents.map((agent) => [agent.id, agent.engine.kind]));
164
+ const grokModelByNodeId = Object.fromEntries(configAgents
165
+ .filter((agent) => agent.engine.kind === "grok" && agent.engine.model !== undefined && agent.engine.reasoningEffort !== undefined)
166
+ .map((agent) => [agent.id, { model: agent.engine.model, reasoningEffort: agent.engine.reasoningEffort }]));
167
+ const hasAgy = configAgents.some((agent) => agent.engine.kind === "agy");
168
+ const hasGrok = configAgents.some((agent) => agent.engine.kind === "grok");
169
+ const agyRuntimeHomeMounts = configAgents
170
+ .filter((agent) => agent.engine.kind === "agy")
171
+ .map((agent) => ({
172
+ id: `daimon-agy-runtime-home-${path.posix.basename(agent.runtimeHomePath)}`,
173
+ mountPath: agent.runtimeHomePath,
174
+ reason: `Daimon AGY subscription runtime home for ${agent.id}`
175
+ }));
176
+ const portableEngineHomeMounts = configAgents
177
+ .filter((agent) => agent.engine.kind !== "agy")
178
+ .map((agent) => {
179
+ const destinationRelativePath = agent.engine.kind === "grok"
180
+ ? DAIMON_GROK_SUBSCRIPTION_REALM.agentCredentialRelativePath
181
+ : DAIMON_ENGINE_CREDENTIALS.codex.destinationRelativePath;
182
+ return {
183
+ id: `daimon-engine-home-${agent.engine.kind}-${path.posix.basename(agent.runtimeHomePath)}`,
184
+ mountPath: path.posix.join(agent.runtimeHomePath, path.posix.dirname(destinationRelativePath)),
185
+ reason: `Daimon ${agent.engine.kind} subscription credential home for ${agent.id}`
186
+ };
187
+ });
188
+ const toolStateMounts = configAgents.map((agent) => ({ id: `daimon-tool-state-${path.posix.basename(agent.runtimeHomePath)}`, mountPath: path.posix.join(agent.runtimeHomePath, "tool-state"), reason: `Daimon durable cognition tool receipts for ${agent.id}` }));
189
+ for (const agent of configAgents)
190
+ assertPublicInstructionBounds(agent.id, agent.instructions);
191
+ const config = {
192
+ agents: configAgents,
193
+ host: {
194
+ bindHost: "127.0.0.1",
195
+ controlTokenEnv: "SPAWNFILE_DAIMON_CONTROL_TOKEN",
196
+ port: DAIMON_CONTROL_PORT
197
+ },
198
+ version: hasSchedules || hasAttention
199
+ ? "noopolis.daimon.organization-runtime.v2"
200
+ : "noopolis.daimon.organization-runtime.v1"
201
+ };
202
+ const serializedConfig = `${JSON.stringify(config, null, 2)}\n`;
203
+ if (Buffer.byteLength(serializedConfig, "utf8") > DAIMON_MAX_CONFIG_BYTES) {
204
+ throw new SpawnfileError("validation_error", "Daimon organization runtime v1 config exceeds Daimon's public config limit");
205
+ }
206
+ return [{
207
+ engineByNodeId,
208
+ ...(hasGrok ? { grokModelByNodeId } : {}),
209
+ files: [
210
+ ...agents.flatMap((input) => input.emittedFiles.map((file) => moveWorkspaceFile(file, input.slug))),
211
+ { content: serializedConfig, path: DAIMON_CONFIG_FILE },
212
+ {
213
+ content: renderStartScript(configAgents),
214
+ mode: 0o755,
215
+ path: "runtime/daimon-start.sh"
216
+ }
217
+ ],
218
+ id: DAIMON_ORGANIZATION_TARGET_ID,
219
+ ...(hasAgy || hasGrok ? {
220
+ opaqueMountTargets: [
221
+ ...(hasAgy ? [DAIMON_AGY_SUBSCRIPTION_REALM.unlockMountPath] : []),
222
+ ...(hasGrok ? [DAIMON_GROK_SUBSCRIPTION_REALM.bootstrapMountPath] : [])
223
+ ],
224
+ } : {}),
225
+ persistentMounts: [...portableEngineHomeMounts, ...toolStateMounts, {
226
+ id: DAIMON_RUNTIME_ACCEPTANCE_STORE_MOUNT_ID,
227
+ mountPath: `<instance-root>/${DAIMON_RUNTIME_ACCEPTANCE_STORE_DIRECTORY}`,
228
+ reason: "Daimon organization durable wake acceptance store"
229
+ }, {
230
+ id: DAIMON_WAKE_FUSE_MOUNT_ID,
231
+ lifecycle: "exclusive-reattach",
232
+ mountPath: DAIMON_WAKE_FUSE_DIRECTORY,
233
+ reason: "Daimon durable wake-fuse admission ledger"
234
+ }, ...(hasGrok ? [{
235
+ id: "daimon-grok-subscription-realm",
236
+ lifecycle: "exclusive-reattach",
237
+ mountPath: DAIMON_GROK_SUBSCRIPTION_REALM.durableMountPath,
238
+ reason: "Daimon host Grok subscription credential realm"
239
+ }] : []), {
240
+ // Non-run-scoped for the same reason as the durable memory mounts (see
241
+ // durableMemoryVolumeName in src/compiler/memoryArtifacts.ts): a
242
+ // run-scoped volume means every `spawnfile up` starts a new empty
243
+ // ledger and cross-deployment usage accounting is impossible. The
244
+ // exclusive reservation this lifecycle carries is a requirement, not a
245
+ // cost.
246
+ // The mount id is deliberately unchanged now that AGY and Codex write
247
+ // here too, not just the broker: it is the volume's identity, and
248
+ // renaming it would orphan every existing deployment's accumulated
249
+ // ledger. Unconditional (not gated on hasGrok/hasAgy) because Daimon's
250
+ // wake fuse now refuses to arm at all if this directory or the ledger
251
+ // file inside it is missing or unreadable (`wakeFuse.ts`,
252
+ // `ensureUsageLedgerReadable`), and Codex also writes here
253
+ // (`engineDispatcher.ts`'s `onTurnUsage`) even in a codex-only
254
+ // organization with no Grok or AGY agent at all.
255
+ id: "daimon-grok-usage-ledger",
256
+ lifecycle: "exclusive-reattach",
257
+ mountPath: DAIMON_GROK_TURN_USAGE_LEDGER.directoryPath,
258
+ reason: "Daimon per-turn engine usage ledger"
259
+ }, ...(hasAgy ? [{
260
+ id: "daimon-agy-subscription-realm",
261
+ // The AGY subscription credential is an OS-keyring entry created by an
262
+ // interactive browser OAuth that has no headless equivalent; it lives
263
+ // in this volume. Without this lifecycle the volume name folds in the
264
+ // run id, so every `spawnfile up` would hand the container an empty
265
+ // keyring and the operator would have to re-enrol by hand.
266
+ lifecycle: "exclusive-reattach",
267
+ mountPath: DAIMON_AGY_SUBSCRIPTION_REALM.durableMountPath,
268
+ reason: "Daimon host AGY subscription realm"
269
+ }, ...agyRuntimeHomeMounts] : [])],
270
+ sourceIds: agents.map((agent) => agent.id).sort()
271
+ }];
272
+ };