spawnfile 0.1.14 → 0.1.18

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 (873) 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 +46 -5
  5. package/dist/auth/index.d.ts +3 -0
  6. package/dist/auth/index.js +2 -0
  7. package/dist/auth/paths.d.ts +1 -1
  8. package/dist/auth/profileStore.js +13 -10
  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/trainingGrokWriteback.d.ts +4 -0
  19. package/dist/auth/trainingGrokWriteback.js +119 -0
  20. package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
  21. package/dist/auth/trainingGrokWritebackLock.js +56 -0
  22. package/dist/auth/types.d.ts +1 -1
  23. package/dist/cli/authCommands.d.ts +1 -1
  24. package/dist/cli/authCommands.js +18 -5
  25. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  26. package/dist/cli/canaryCutoverCommand.js +30 -0
  27. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  28. package/dist/cli/capabilitiesCommand.js +12 -0
  29. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  30. package/dist/cli/capabilitiesReceipt.js +56 -0
  31. package/dist/cli/compileBuildCommands.js +17 -0
  32. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  33. package/dist/cli/composedLifecycleContractSet.js +204 -0
  34. package/dist/cli/devCommands.js +6 -2
  35. package/dist/cli/downCommand.d.ts +2 -0
  36. package/dist/cli/downCommand.js +22 -8
  37. package/dist/cli/envFileOption.d.ts +18 -0
  38. package/dist/cli/envFileOption.js +20 -0
  39. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  40. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  41. package/dist/cli/index.js +12 -3
  42. package/dist/cli/lifecycleCommands.d.ts +1 -1
  43. package/dist/cli/lifecycleCommands.js +3 -1
  44. package/dist/cli/lifecycleMachine.d.ts +7 -1
  45. package/dist/cli/lifecycleMachine.js +2 -2
  46. package/dist/cli/lifecyclePlan.d.ts +1 -0
  47. package/dist/cli/lifecyclePlan.js +2 -0
  48. package/dist/cli/paideiaDelegation.d.ts +18 -0
  49. package/dist/cli/paideiaDelegation.js +211 -0
  50. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  51. package/dist/cli/paideiaSupervisor.js +48 -0
  52. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  53. package/dist/cli/productStateCloneCommand.js +34 -0
  54. package/dist/cli/recordCommands.d.ts +17 -0
  55. package/dist/cli/recordCommands.js +43 -0
  56. package/dist/cli/releaseCommand.d.ts +6 -0
  57. package/dist/cli/releaseCommand.js +91 -0
  58. package/dist/cli/runCli.d.ts +19 -3
  59. package/dist/cli/runCli.js +43 -10
  60. package/dist/cli/runPublishCommands.js +5 -3
  61. package/dist/cli/targetCommands.d.ts +4 -7
  62. package/dist/cli/targetCommands.js +16 -46
  63. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  64. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  65. package/dist/cli/targetConfigResolver.d.ts +3 -0
  66. package/dist/cli/targetConfigResolver.js +111 -0
  67. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  68. package/dist/cli/targetConfigResolverCommand.js +43 -0
  69. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  70. package/dist/cli/targetConfigResolverContracts.js +30 -0
  71. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  72. package/dist/cli/targetConfigResolverDocker.js +47 -0
  73. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  74. package/dist/cli/targetConfigResolverValidation.js +94 -0
  75. package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
  76. package/dist/cli/targetDefaultAuthorities.js +3 -0
  77. package/dist/cli/targetDefaultConfig.d.ts +7 -0
  78. package/dist/cli/targetDefaultConfig.js +22 -5
  79. package/dist/cli/targetDefaultConfigStdin.js +7 -1
  80. package/dist/cli/targetDefaultHandlerFactory.js +23 -2
  81. package/dist/cli/targetDefaultHandlers.d.ts +2 -2
  82. package/dist/cli/targetProductionCommands.d.ts +5 -0
  83. package/dist/cli/targetProductionCommands.js +45 -0
  84. package/dist/cli/trainCommand.d.ts +3 -0
  85. package/dist/cli/trainCommand.js +114 -0
  86. package/dist/cli/upCommand.js +40 -7
  87. package/dist/cli/upLifecycleRecovery.d.ts +2 -2
  88. package/dist/cli/upLifecycleRecovery.js +188 -44
  89. package/dist/cli/usageCommand.d.ts +40 -0
  90. package/dist/cli/usageCommand.js +284 -0
  91. package/dist/cli/usageCommandLive.d.ts +84 -0
  92. package/dist/cli/usageCommandLive.js +95 -0
  93. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  94. package/dist/cli/usageDeploymentSource.js +22 -0
  95. package/dist/cli/volumeCommands.d.ts +8 -0
  96. package/dist/cli/volumeCommands.js +53 -0
  97. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  98. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  99. package/dist/compiler/agentNodeMerge.js +3 -2
  100. package/dist/compiler/buildCompilePlan.js +4 -0
  101. package/dist/compiler/buildCompilePlanAgent.js +3 -1
  102. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
  103. package/dist/compiler/buildCompilePlanTeams.js +6 -1
  104. package/dist/compiler/buildCompilePlanTraversal.js +2 -0
  105. package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
  106. package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
  107. package/dist/compiler/buildProject.d.ts +10 -0
  108. package/dist/compiler/buildProject.js +14 -2
  109. package/dist/compiler/cleanCompileOutput.d.ts +2 -0
  110. package/dist/compiler/cleanCompileOutput.js +14 -0
  111. package/dist/compiler/compilePlanHelpers.js +5 -0
  112. package/dist/compiler/compileProject.d.ts +12 -0
  113. package/dist/compiler/compileProject.js +33 -3
  114. package/dist/compiler/compileProjectSupport.js +9 -0
  115. package/dist/compiler/containerArtifactSummaries.js +1 -0
  116. package/dist/compiler/containerArtifacts.d.ts +7 -5
  117. package/dist/compiler/containerArtifacts.js +77 -41
  118. package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
  119. package/dist/compiler/containerArtifactsPlans.js +31 -7
  120. package/dist/compiler/containerArtifactsRender.d.ts +2 -1
  121. package/dist/compiler/containerArtifactsRender.js +91 -58
  122. package/dist/compiler/containerArtifactsTypes.d.ts +15 -0
  123. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  124. package/dist/compiler/containerBackedMountRender.js +101 -0
  125. package/dist/compiler/containerDaimonBrokerRender.d.ts +114 -0
  126. package/dist/compiler/containerDaimonBrokerRender.js +194 -0
  127. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
  128. package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
  129. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  130. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +130 -0
  131. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +197 -0
  132. package/dist/compiler/containerDaimonGrokWorkerRender.js +281 -0
  133. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +25 -0
  134. package/dist/compiler/containerDaimonOwnershipGuardRender.js +204 -0
  135. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  136. package/dist/compiler/containerDaimonUidEntrypointRender.js +291 -0
  137. package/dist/compiler/containerEntrypointRender.d.ts +7 -0
  138. package/dist/compiler/containerEntrypointRender.js +28 -22
  139. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  140. package/dist/compiler/containerPersistentMounts.js +66 -0
  141. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  142. package/dist/compiler/containerReadinessPaths.js +1 -0
  143. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  144. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  145. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  146. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  147. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  148. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  149. package/dist/compiler/containerTargetResources.d.ts +32 -1
  150. package/dist/compiler/containerTargetResources.js +115 -15
  151. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  152. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  153. package/dist/compiler/containerWorkspaceResourceRender.js +52 -1
  154. package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
  155. package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
  156. package/dist/compiler/deploymentLineage.d.ts +40 -0
  157. package/dist/compiler/deploymentLineage.js +50 -0
  158. package/dist/compiler/index.d.ts +5 -0
  159. package/dist/compiler/index.js +5 -0
  160. package/dist/compiler/initProject.d.ts +2 -0
  161. package/dist/compiler/initProject.js +39 -1
  162. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  163. package/dist/compiler/localMoltnetAuthority.js +177 -0
  164. package/dist/compiler/mcpPlaceholders.d.ts +11 -0
  165. package/dist/compiler/mcpPlaceholders.js +58 -0
  166. package/dist/compiler/mcpServerInheritance.d.ts +18 -0
  167. package/dist/compiler/mcpServerInheritance.js +43 -0
  168. package/dist/compiler/memoryArtifacts.d.ts +1 -1
  169. package/dist/compiler/memoryArtifacts.js +108 -32
  170. package/dist/compiler/modelEnv.d.ts +5 -0
  171. package/dist/compiler/modelEnv.js +8 -2
  172. package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
  173. package/dist/compiler/moltnetArtifactPaths.js +17 -15
  174. package/dist/compiler/moltnetArtifactTypes.d.ts +11 -0
  175. package/dist/compiler/moltnetArtifacts.d.ts +1 -1
  176. package/dist/compiler/moltnetArtifacts.js +53 -12
  177. package/dist/compiler/moltnetBinaries.d.ts +16 -4
  178. package/dist/compiler/moltnetBinaries.js +46 -6
  179. package/dist/compiler/moltnetClientConfig.js +1 -1
  180. package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
  181. package/dist/compiler/moltnetConfigLowering.js +30 -6
  182. package/dist/compiler/moltnetNodeConfig.js +1 -1
  183. package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
  184. package/dist/compiler/moltnetReleaseAuthority.js +33 -4
  185. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
  186. package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
  187. package/dist/compiler/moltnetResolution.js +9 -15
  188. package/dist/compiler/moltnetRoomMemberships.js +20 -5
  189. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  190. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  191. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  192. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  193. package/dist/compiler/moltnetServerPlans.js +19 -0
  194. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  195. package/dist/compiler/organizationExternalParticipants.js +176 -0
  196. package/dist/compiler/organizationIdentity.d.ts +3 -9
  197. package/dist/compiler/organizationIdentity.js +37 -270
  198. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  199. package/dist/compiler/organizationIdentityGraph.js +115 -0
  200. package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
  201. package/dist/compiler/organizationReadyEvidence.js +23 -3
  202. package/dist/compiler/preflightCompilePlan.d.ts +9 -0
  203. package/dist/compiler/preflightCompilePlan.js +38 -0
  204. package/dist/compiler/recordingAgentFacts.d.ts +4 -0
  205. package/dist/compiler/recordingAgentFacts.js +35 -0
  206. package/dist/compiler/recordingCapability.d.ts +4 -0
  207. package/dist/compiler/recordingCapability.js +22 -0
  208. package/dist/compiler/recordingReport.d.ts +4 -0
  209. package/dist/compiler/recordingReport.js +18 -0
  210. package/dist/compiler/runProject.d.ts +6 -3
  211. package/dist/compiler/runProject.js +34 -6
  212. package/dist/compiler/runProjectAuth.d.ts +3 -1
  213. package/dist/compiler/runProjectAuth.js +19 -3
  214. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  215. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  216. package/dist/compiler/runProjectDocker.d.ts +8 -4
  217. package/dist/compiler/runProjectDocker.js +43 -18
  218. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  219. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  220. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  221. package/dist/compiler/runProjectDockerReservation.js +118 -0
  222. package/dist/compiler/runProjectLifecycle.js +1 -1
  223. package/dist/compiler/surfaces.d.ts +1 -2
  224. package/dist/compiler/surfaces.js +0 -1
  225. package/dist/compiler/syncProjectAuth.js +2 -1
  226. package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
  227. package/dist/compiler/training/broker/clockProbe.js +27 -0
  228. package/dist/compiler/training/broker/declaration.d.ts +47 -0
  229. package/dist/compiler/training/broker/declaration.js +57 -0
  230. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  231. package/dist/compiler/training/broker/entrypoint.js +126 -0
  232. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
  233. package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
  234. package/dist/compiler/training/broker/index.d.ts +11 -0
  235. package/dist/compiler/training/broker/index.js +11 -0
  236. package/dist/compiler/training/broker/main.d.ts +2 -0
  237. package/dist/compiler/training/broker/main.js +14 -0
  238. package/dist/compiler/training/broker/paths.d.ts +236 -0
  239. package/dist/compiler/training/broker/paths.js +249 -0
  240. package/dist/compiler/training/broker/processes.d.ts +51 -0
  241. package/dist/compiler/training/broker/processes.js +102 -0
  242. package/dist/compiler/training/broker/projection.d.ts +52 -0
  243. package/dist/compiler/training/broker/projection.js +88 -0
  244. package/dist/compiler/training/broker/provisioning.d.ts +78 -0
  245. package/dist/compiler/training/broker/provisioning.js +231 -0
  246. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  247. package/dist/compiler/training/broker/receipt.js +110 -0
  248. package/dist/compiler/training/broker/registration.d.ts +43 -0
  249. package/dist/compiler/training/broker/registration.js +110 -0
  250. package/dist/compiler/training/broker/reset.d.ts +9 -0
  251. package/dist/compiler/training/broker/reset.js +71 -0
  252. package/dist/compiler/training/broker/runtime.d.ts +22 -0
  253. package/dist/compiler/training/broker/runtime.js +127 -0
  254. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  255. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  256. package/dist/compiler/training/broker/supervisor.d.ts +108 -0
  257. package/dist/compiler/training/broker/supervisor.js +172 -0
  258. package/dist/compiler/training/broker/taskClock.d.ts +5 -0
  259. package/dist/compiler/training/broker/taskClock.js +41 -0
  260. package/dist/compiler/training/compiledAgent.d.ts +21 -0
  261. package/dist/compiler/training/compiledAgent.js +62 -0
  262. package/dist/compiler/training/container/contract.d.ts +54 -0
  263. package/dist/compiler/training/container/contract.js +51 -0
  264. package/dist/compiler/training/container/evaluators.d.ts +48 -0
  265. package/dist/compiler/training/container/evaluators.js +50 -0
  266. package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
  267. package/dist/compiler/training/container/grokWriteback.js +26 -0
  268. package/dist/compiler/training/container/index.d.ts +5 -0
  269. package/dist/compiler/training/container/index.js +3 -0
  270. package/dist/compiler/training/container/launch.d.ts +21 -0
  271. package/dist/compiler/training/container/launch.js +264 -0
  272. package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
  273. package/dist/compiler/training/container/nativeSlots.js +13 -0
  274. package/dist/compiler/training/container/outputCopy.d.ts +2 -0
  275. package/dist/compiler/training/container/outputCopy.js +72 -0
  276. package/dist/compiler/training/container/outputVolume.d.ts +27 -0
  277. package/dist/compiler/training/container/outputVolume.js +161 -0
  278. package/dist/compiler/training/container/prepare.d.ts +10 -0
  279. package/dist/compiler/training/container/prepare.js +125 -0
  280. package/dist/compiler/training/container/process.d.ts +14 -0
  281. package/dist/compiler/training/container/process.js +70 -0
  282. package/dist/compiler/training/container/security.d.ts +38 -0
  283. package/dist/compiler/training/container/security.js +68 -0
  284. package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
  285. package/dist/compiler/training/container/subjectIsolation.js +15 -0
  286. package/dist/compiler/training/context.d.ts +15 -0
  287. package/dist/compiler/training/context.js +93 -0
  288. package/dist/compiler/training/contract.d.ts +144 -0
  289. package/dist/compiler/training/contract.js +36 -0
  290. package/dist/compiler/training/execution.d.ts +417 -0
  291. package/dist/compiler/training/execution.js +160 -0
  292. package/dist/compiler/training/index.d.ts +12 -0
  293. package/dist/compiler/training/index.js +10 -0
  294. package/dist/compiler/training/moments.d.ts +80 -0
  295. package/dist/compiler/training/moments.js +118 -0
  296. package/dist/compiler/training/output.d.ts +2 -0
  297. package/dist/compiler/training/output.js +20 -0
  298. package/dist/compiler/training/plan/contract.d.ts +287 -0
  299. package/dist/compiler/training/plan/contract.js +49 -0
  300. package/dist/compiler/training/plan/index.d.ts +5 -0
  301. package/dist/compiler/training/plan/index.js +4 -0
  302. package/dist/compiler/training/plan/load.d.ts +9 -0
  303. package/dist/compiler/training/plan/load.js +153 -0
  304. package/dist/compiler/training/plan/references.d.ts +19 -0
  305. package/dist/compiler/training/plan/references.js +57 -0
  306. package/dist/compiler/training/plan/resolve.d.ts +4 -0
  307. package/dist/compiler/training/plan/resolve.js +73 -0
  308. package/dist/compiler/training/plan/targets.d.ts +11 -0
  309. package/dist/compiler/training/plan/targets.js +71 -0
  310. package/dist/compiler/training/plan/types.d.ts +36 -0
  311. package/dist/compiler/training/plan/types.js +1 -0
  312. package/dist/compiler/training/preparation/assets/Dockerfile +109 -0
  313. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  314. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  315. package/dist/compiler/training/preparation/broker.js +45 -0
  316. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  317. package/dist/compiler/training/preparation/contextModes.js +38 -0
  318. package/dist/compiler/training/preparation/contract.d.ts +207 -0
  319. package/dist/compiler/training/preparation/contract.js +113 -0
  320. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  321. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  322. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  323. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  324. package/dist/compiler/training/preparation/files.d.ts +29 -0
  325. package/dist/compiler/training/preparation/files.js +146 -0
  326. package/dist/compiler/training/preparation/image.d.ts +28 -0
  327. package/dist/compiler/training/preparation/image.js +107 -0
  328. package/dist/compiler/training/preparation/index.d.ts +3 -0
  329. package/dist/compiler/training/preparation/index.js +2 -0
  330. package/dist/compiler/training/preparation/inputs.d.ts +24 -0
  331. package/dist/compiler/training/preparation/inputs.js +101 -0
  332. package/dist/compiler/training/preparation/prepare.d.ts +38 -0
  333. package/dist/compiler/training/preparation/prepare.js +223 -0
  334. package/dist/compiler/training/preparation/scratch.d.ts +8 -0
  335. package/dist/compiler/training/preparation/scratch.js +114 -0
  336. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  337. package/dist/compiler/training/repair/compatibility.js +34 -0
  338. package/dist/compiler/training/repair/contract.d.ts +840 -0
  339. package/dist/compiler/training/repair/contract.js +33 -0
  340. package/dist/compiler/training/repair/index.d.ts +3 -0
  341. package/dist/compiler/training/repair/index.js +3 -0
  342. package/dist/compiler/training/repair/prepare.d.ts +382 -0
  343. package/dist/compiler/training/repair/prepare.js +78 -0
  344. package/dist/compiler/training/repair/witness.d.ts +352 -0
  345. package/dist/compiler/training/repair/witness.js +48 -0
  346. package/dist/compiler/training/resolution.d.ts +25 -0
  347. package/dist/compiler/training/resolution.js +69 -0
  348. package/dist/compiler/training/rewind/contract.d.ts +321 -0
  349. package/dist/compiler/training/rewind/contract.js +39 -0
  350. package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
  351. package/dist/compiler/training/rewind/deployedResource.js +19 -0
  352. package/dist/compiler/training/rewind/feed.d.ts +12 -0
  353. package/dist/compiler/training/rewind/feed.js +182 -0
  354. package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
  355. package/dist/compiler/training/rewind/feedContent.js +38 -0
  356. package/dist/compiler/training/rewind/git.d.ts +8 -0
  357. package/dist/compiler/training/rewind/git.js +159 -0
  358. package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
  359. package/dist/compiler/training/rewind/gitArchive.js +7 -0
  360. package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
  361. package/dist/compiler/training/rewind/gitHistory.js +55 -0
  362. package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
  363. package/dist/compiler/training/rewind/gitProcess.js +81 -0
  364. package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
  365. package/dist/compiler/training/rewind/gitTree.js +90 -0
  366. package/dist/compiler/training/rewind/history.d.ts +28 -0
  367. package/dist/compiler/training/rewind/history.js +239 -0
  368. package/dist/compiler/training/rewind/index.d.ts +18 -0
  369. package/dist/compiler/training/rewind/index.js +15 -0
  370. package/dist/compiler/training/rewind/inputs.d.ts +9 -0
  371. package/dist/compiler/training/rewind/inputs.js +67 -0
  372. package/dist/compiler/training/rewind/instant.d.ts +4 -0
  373. package/dist/compiler/training/rewind/instant.js +24 -0
  374. package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
  375. package/dist/compiler/training/rewind/leakCheck.js +56 -0
  376. package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
  377. package/dist/compiler/training/rewind/leakFeed.js +25 -0
  378. package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
  379. package/dist/compiler/training/rewind/leakFiles.js +106 -0
  380. package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
  381. package/dist/compiler/training/rewind/leakGit.js +78 -0
  382. package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
  383. package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
  384. package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
  385. package/dist/compiler/training/rewind/leakInputs.js +135 -0
  386. package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
  387. package/dist/compiler/training/rewind/leakLayout.js +17 -0
  388. package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
  389. package/dist/compiler/training/rewind/leakProvenance.js +88 -0
  390. package/dist/compiler/training/rewind/materialize.d.ts +136 -0
  391. package/dist/compiler/training/rewind/materialize.js +212 -0
  392. package/dist/compiler/training/rewind/memory.d.ts +10 -0
  393. package/dist/compiler/training/rewind/memory.js +84 -0
  394. package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
  395. package/dist/compiler/training/rewind/memorySchemas.js +50 -0
  396. package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
  397. package/dist/compiler/training/rewind/moltnet.js +54 -0
  398. package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
  399. package/dist/compiler/training/rewind/moltnetJson.js +180 -0
  400. package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
  401. package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
  402. package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
  403. package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
  404. package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
  405. package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
  406. package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
  407. package/dist/compiler/training/rewind/recordInput.js +49 -0
  408. package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
  409. package/dist/compiler/training/rewind/recordedBundle.js +58 -0
  410. package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
  411. package/dist/compiler/training/rewind/recordedCommit.js +10 -0
  412. package/dist/compiler/training/rewind/select.d.ts +18 -0
  413. package/dist/compiler/training/rewind/select.js +64 -0
  414. package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
  415. package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
  416. package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
  417. package/dist/compiler/training/rewind/taskClock.js +40 -0
  418. package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
  419. package/dist/compiler/training/rewind/timestamps.js +26 -0
  420. package/dist/compiler/training/rewind/types.d.ts +43 -0
  421. package/dist/compiler/training/rewind/types.js +1 -0
  422. package/dist/compiler/training/rewind/volumes.d.ts +12 -0
  423. package/dist/compiler/training/rewind/volumes.js +58 -0
  424. package/dist/compiler/training/selection.d.ts +7 -0
  425. package/dist/compiler/training/selection.js +15 -0
  426. package/dist/compiler/types.d.ts +7 -2
  427. package/dist/compiler/upProject.d.ts +27 -1
  428. package/dist/compiler/upProject.js +135 -180
  429. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  430. package/dist/compiler/upProjectHandoff.js +204 -0
  431. package/dist/compiler/upReceipt.js +49 -4
  432. package/dist/compiler/updateProjectModels.js +1 -0
  433. package/dist/compiler/view/types.d.ts +1 -1
  434. package/dist/compiler/workspaceBundleArtifacts.d.ts +18 -0
  435. package/dist/compiler/workspaceBundleArtifacts.js +155 -0
  436. package/dist/compiler/workspaceBundleCache.d.ts +23 -0
  437. package/dist/compiler/workspaceBundleCache.js +79 -0
  438. package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
  439. package/dist/compiler/workspaceBundleDependencies.js +122 -0
  440. package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
  441. package/dist/compiler/workspaceBundleFiles.js +251 -0
  442. package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
  443. package/dist/compiler/workspaceBundleGenerated.js +103 -0
  444. package/dist/compiler/workspaceBundleGit.d.ts +64 -0
  445. package/dist/compiler/workspaceBundleGit.js +154 -0
  446. package/dist/compiler/workspaceBundleKey.d.ts +34 -0
  447. package/dist/compiler/workspaceBundleKey.js +17 -0
  448. package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
  449. package/dist/compiler/workspaceBundleResolve.js +144 -0
  450. package/dist/compiler/workspaceBundleRun.d.ts +41 -0
  451. package/dist/compiler/workspaceBundleRun.js +79 -0
  452. package/dist/compiler/workspaceBundleTar.d.ts +47 -0
  453. package/dist/compiler/workspaceBundleTar.js +140 -0
  454. package/dist/compiler/workspaceBundleTree.d.ts +15 -0
  455. package/dist/compiler/workspaceBundleTree.js +58 -0
  456. package/dist/compiler/workspaceGitFetch.d.ts +41 -0
  457. package/dist/compiler/workspaceGitFetch.js +155 -0
  458. package/dist/compiler/workspaceGitPins.d.ts +33 -0
  459. package/dist/compiler/workspaceGitPins.js +127 -0
  460. package/dist/compiler/workspaceResources.d.ts +9 -2
  461. package/dist/compiler/workspaceResources.js +39 -7
  462. package/dist/deployment/activation.d.ts +3 -0
  463. package/dist/deployment/activation.js +12 -0
  464. package/dist/deployment/artifactsExportPlan.js +51 -1
  465. package/dist/deployment/canaryCutover.d.ts +42 -0
  466. package/dist/deployment/canaryCutover.js +140 -0
  467. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  468. package/dist/deployment/candidateDiagnostics.js +90 -0
  469. package/dist/deployment/candidateRecording.d.ts +8 -0
  470. package/dist/deployment/candidateRecording.js +22 -0
  471. package/dist/deployment/dockerLogs.js +4 -1
  472. package/dist/deployment/dockerManager.d.ts +5 -3
  473. package/dist/deployment/dockerManager.js +21 -5
  474. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  475. package/dist/deployment/dockerProbeGateway.js +17 -2
  476. package/dist/deployment/downDeployment.d.ts +7 -0
  477. package/dist/deployment/downDeployment.js +114 -9
  478. package/dist/deployment/downReceiptTypes.d.ts +17 -2
  479. package/dist/deployment/downReceiptTypes.js +17 -2
  480. package/dist/deployment/homeStore.d.ts +9 -1
  481. package/dist/deployment/homeStore.js +16 -53
  482. package/dist/deployment/index.d.ts +10 -0
  483. package/dist/deployment/index.js +10 -0
  484. package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
  485. package/dist/deployment/lifecycleCompletionContracts.js +34 -0
  486. package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
  487. package/dist/deployment/lifecycleCompletionPaths.js +3 -0
  488. package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
  489. package/dist/deployment/lifecycleCompletionPublication.js +18 -4
  490. package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
  491. package/dist/deployment/lifecycleCompletionStore.js +7 -7
  492. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  493. package/dist/deployment/lifecycleUpRecords.js +127 -0
  494. package/dist/deployment/native/AGENTS.md +11 -0
  495. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  496. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  497. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  498. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  499. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  500. package/dist/deployment/noReplaceActivation.js +50 -0
  501. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  502. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  503. package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
  504. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  505. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  506. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
  507. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  508. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  509. package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
  510. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
  511. package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
  512. package/dist/deployment/organizationReady.d.ts +2 -0
  513. package/dist/deployment/organizationReady.js +36 -4
  514. package/dist/deployment/pidLock.d.ts +25 -0
  515. package/dist/deployment/pidLock.js +81 -0
  516. package/dist/deployment/productStateClone.d.ts +43 -0
  517. package/dist/deployment/productStateClone.js +319 -0
  518. package/dist/deployment/record.d.ts +85 -1
  519. package/dist/deployment/record.js +11 -5
  520. package/dist/deployment/recordPublication.d.ts +15 -0
  521. package/dist/deployment/recordPublication.js +76 -0
  522. package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
  523. package/dist/deployment/recordedMemoryRetention.js +27 -0
  524. package/dist/deployment/resourceLog.d.ts +140 -0
  525. package/dist/deployment/resourceLog.js +78 -0
  526. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  527. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  528. package/dist/deployment/upReceiptTypes.d.ts +32 -6
  529. package/dist/deployment/upReceiptTypes.js +29 -2
  530. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  531. package/dist/deployment/workspaceResourceMigration.js +315 -0
  532. package/dist/dev/project.d.ts +7 -0
  533. package/dist/dev/project.js +9 -0
  534. package/dist/distribution/buildDistributionReport.d.ts +3 -0
  535. package/dist/distribution/buildDistributionReport.js +5 -0
  536. package/dist/distribution/consumeImage.d.ts +5 -0
  537. package/dist/distribution/consumeImage.js +115 -98
  538. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  539. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  540. package/dist/distribution/consumeImageLifecycle.d.ts +20 -0
  541. package/dist/distribution/consumeImageLifecycle.js +242 -0
  542. package/dist/distribution/consumeImageSupport.d.ts +19 -0
  543. package/dist/distribution/consumeImageSupport.js +40 -0
  544. package/dist/distribution/distributionReportSchema.d.ts +58 -1
  545. package/dist/distribution/distributionReportSchema.js +35 -2
  546. package/dist/distribution/dockerRunner.d.ts +6 -1
  547. package/dist/distribution/dockerRunner.js +31 -4
  548. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  549. package/dist/distribution/imageRuntimeAuth.js +70 -1
  550. package/dist/distribution/index.d.ts +1 -1
  551. package/dist/distribution/index.js +1 -1
  552. package/dist/distribution/preflight.js +5 -1
  553. package/dist/distribution/renderImageInterface.js +1 -1
  554. package/dist/distribution/types.d.ts +29 -1
  555. package/dist/distribution/types.js +3 -0
  556. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  557. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  558. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  559. package/dist/evidenceExportHelper/index.d.ts +4 -0
  560. package/dist/evidenceExportHelper/index.js +4 -0
  561. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  562. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  563. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  564. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  565. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  566. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  567. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  568. package/dist/evidenceExportHelper/recipe.js +83 -0
  569. package/dist/filesystem/durableWrite.d.ts +10 -0
  570. package/dist/filesystem/durableWrite.js +87 -0
  571. package/dist/filesystem/index.d.ts +2 -0
  572. package/dist/filesystem/index.js +2 -0
  573. package/dist/filesystem/io.d.ts +2 -0
  574. package/dist/filesystem/io.js +16 -1
  575. package/dist/filesystem/retainedJsonl.d.ts +23 -0
  576. package/dist/filesystem/retainedJsonl.js +123 -0
  577. package/dist/manifest/commandSchemas.d.ts +5 -0
  578. package/dist/manifest/commandSchemas.js +5 -0
  579. package/dist/manifest/executionSchemas.d.ts +47 -0
  580. package/dist/manifest/executionSchemas.js +31 -2
  581. package/dist/manifest/index.d.ts +2 -0
  582. package/dist/manifest/index.js +2 -0
  583. package/dist/manifest/loadManifest.js +3 -26
  584. package/dist/manifest/mcpSchemas.d.ts +62 -0
  585. package/dist/manifest/mcpSchemas.js +57 -8
  586. package/dist/manifest/memorySchemas.d.ts +1 -1
  587. package/dist/manifest/memorySchemas.js +1 -1
  588. package/dist/manifest/parseManifest.d.ts +7 -0
  589. package/dist/manifest/parseManifest.js +65 -0
  590. package/dist/manifest/renderSpawnfile.js +4 -1
  591. package/dist/manifest/renderSpawnfileNetworks.js +11 -0
  592. package/dist/manifest/renderSpawnfileWorkspace.js +10 -1
  593. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  594. package/dist/manifest/scheduleSchemas.js +91 -5
  595. package/dist/manifest/schemas.d.ts +1419 -120
  596. package/dist/manifest/schemas.js +19 -6
  597. package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
  598. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  599. package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
  600. package/dist/manifest/teamNetworkSchemas.d.ts +18 -4
  601. package/dist/manifest/teamNetworkSchemas.js +19 -1
  602. package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
  603. package/dist/manifest/teamNetworkServerSchemas.js +18 -2
  604. package/dist/manifest/trainingDataSchemas.d.ts +357 -0
  605. package/dist/manifest/trainingDataSchemas.js +31 -0
  606. package/dist/manifest/trainingSchemas.d.ts +49 -0
  607. package/dist/manifest/trainingSchemas.js +44 -0
  608. package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
  609. package/dist/manifest/volumeFeedSchemas.js +104 -0
  610. package/dist/manifest/workspaceSchemas.d.ts +194 -1
  611. package/dist/manifest/workspaceSchemas.js +117 -2
  612. package/dist/recording/compose.d.ts +3 -0
  613. package/dist/recording/compose.js +93 -0
  614. package/dist/recording/deployment.d.ts +15 -0
  615. package/dist/recording/deployment.js +38 -0
  616. package/dist/recording/history.d.ts +16 -0
  617. package/dist/recording/history.js +47 -0
  618. package/dist/recording/index.d.ts +9 -0
  619. package/dist/recording/index.js +9 -0
  620. package/dist/recording/moment.d.ts +61 -0
  621. package/dist/recording/moment.js +36 -0
  622. package/dist/recording/parse.d.ts +15 -0
  623. package/dist/recording/parse.js +74 -0
  624. package/dist/recording/read.d.ts +8 -0
  625. package/dist/recording/read.js +61 -0
  626. package/dist/recording/store.d.ts +10 -0
  627. package/dist/recording/store.js +94 -0
  628. package/dist/recording/sync.d.ts +24 -0
  629. package/dist/recording/sync.js +126 -0
  630. package/dist/recording/types.d.ts +45 -0
  631. package/dist/recording/types.js +2 -0
  632. package/dist/release/drainControl.d.ts +54 -0
  633. package/dist/release/drainControl.js +137 -0
  634. package/dist/release/drainPhase.d.ts +37 -0
  635. package/dist/release/drainPhase.js +161 -0
  636. package/dist/release/index.d.ts +11 -0
  637. package/dist/release/index.js +11 -0
  638. package/dist/release/ledger.d.ts +75 -0
  639. package/dist/release/ledger.js +111 -0
  640. package/dist/release/notify.d.ts +58 -0
  641. package/dist/release/notify.js +126 -0
  642. package/dist/release/pending.d.ts +35 -0
  643. package/dist/release/pending.js +60 -0
  644. package/dist/release/postDeploy.d.ts +32 -0
  645. package/dist/release/postDeploy.js +62 -0
  646. package/dist/release/releaseDefaults.d.ts +9 -0
  647. package/dist/release/releaseDefaults.js +115 -0
  648. package/dist/release/releaseDocker.d.ts +38 -0
  649. package/dist/release/releaseDocker.js +94 -0
  650. package/dist/release/releaseTypes.d.ts +94 -0
  651. package/dist/release/releaseTypes.js +1 -0
  652. package/dist/release/runRelease.d.ts +9 -0
  653. package/dist/release/runRelease.js +218 -0
  654. package/dist/release/swap.d.ts +23 -0
  655. package/dist/release/swap.js +55 -0
  656. package/dist/release/types.d.ts +50 -0
  657. package/dist/release/types.js +29 -0
  658. package/dist/report/index.d.ts +1 -0
  659. package/dist/report/index.js +1 -0
  660. package/dist/report/recording.d.ts +57 -0
  661. package/dist/report/recording.js +26 -0
  662. package/dist/report/types.d.ts +92 -4
  663. package/dist/runtime/common.d.ts +28 -1
  664. package/dist/runtime/common.js +33 -3
  665. package/dist/runtime/container.js +46 -35
  666. package/dist/runtime/daimon/adapter.d.ts +14 -0
  667. package/dist/runtime/daimon/adapter.js +254 -0
  668. package/dist/runtime/daimon/attention.d.ts +8 -0
  669. package/dist/runtime/daimon/attention.js +32 -0
  670. package/dist/runtime/daimon/config.d.ts +29 -0
  671. package/dist/runtime/daimon/config.js +321 -0
  672. package/dist/runtime/daimon/contract-manifest.json +1 -0
  673. package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
  674. package/dist/runtime/daimon/contractManifest.d.ts +346 -0
  675. package/dist/runtime/daimon/contractManifest.js +335 -0
  676. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  677. package/dist/runtime/daimon/grokModel.js +33 -0
  678. package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
  679. package/dist/runtime/daimon/grokTurnLimits.js +51 -0
  680. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +43 -0
  681. package/dist/runtime/daimon/grokWorkerConfigBytes.js +53 -0
  682. package/dist/runtime/daimon/grokWorkerContract.d.ts +27 -0
  683. package/dist/runtime/daimon/grokWorkerContract.js +60 -0
  684. package/dist/runtime/daimon/memory.d.ts +57 -0
  685. package/dist/runtime/daimon/memory.js +125 -0
  686. package/dist/runtime/daimon/recording.d.ts +19 -0
  687. package/dist/runtime/daimon/recording.js +50 -0
  688. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  689. package/dist/runtime/daimon/runAuth.js +279 -0
  690. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  691. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  692. package/dist/runtime/daimon/scheduleAuthority.d.ts +11 -0
  693. package/dist/runtime/daimon/scheduleAuthority.js +31 -0
  694. package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
  695. package/dist/runtime/daimon/wakeMoments.js +17 -0
  696. package/dist/runtime/daimonInstall.d.ts +3 -0
  697. package/dist/runtime/daimonInstall.js +25 -0
  698. package/dist/runtime/index.d.ts +5 -0
  699. package/dist/runtime/index.js +5 -0
  700. package/dist/runtime/install.d.ts +5 -0
  701. package/dist/runtime/install.js +4 -0
  702. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  703. package/dist/runtime/localDaimonAuthority.js +77 -0
  704. package/dist/runtime/mnemeMcp.d.ts +13 -0
  705. package/dist/runtime/mnemeMcp.js +26 -0
  706. package/dist/runtime/openclaw/adapter.js +5 -2
  707. package/dist/runtime/pi/adapter.d.ts +0 -1
  708. package/dist/runtime/pi/adapter.js +5 -6
  709. package/dist/runtime/pi/appCliSource.js +1 -1
  710. package/dist/runtime/pi/appScheduleSource.js +6 -2
  711. package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
  712. package/dist/runtime/pi/containerTargets.js +6 -0
  713. package/dist/runtime/picoclaw/adapter.js +5 -2
  714. package/dist/runtime/registry.d.ts +6 -0
  715. package/dist/runtime/registry.js +32 -3
  716. package/dist/runtime/scheduleUtils.d.ts +1 -0
  717. package/dist/runtime/scheduleUtils.js +5 -1
  718. package/dist/runtime/types.d.ts +40 -0
  719. package/dist/runtime/usageLedger.d.ts +158 -0
  720. package/dist/runtime/usageLedger.js +269 -0
  721. package/dist/runtime/usageLedgerRead.d.ts +54 -0
  722. package/dist/runtime/usageLedgerRead.js +102 -0
  723. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  724. package/dist/runtime/usageRequestLedger.js +72 -0
  725. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  726. package/dist/shared/daimonCodexDocker.js +120 -0
  727. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  728. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  729. package/dist/shared/index.d.ts +3 -0
  730. package/dist/shared/index.js +3 -0
  731. package/dist/shared/recording.d.ts +8 -0
  732. package/dist/shared/recording.js +25 -0
  733. package/dist/shared/types.d.ts +1 -1
  734. package/dist/shared/volumeNames.d.ts +6 -0
  735. package/dist/shared/volumeNames.js +14 -0
  736. package/dist/target/dockerArtifactsProvider.js +34 -7
  737. package/dist/target/dockerBaseImage.d.ts +2 -0
  738. package/dist/target/dockerBaseImage.js +11 -0
  739. package/dist/target/dockerCommandExecutor.d.ts +11 -0
  740. package/dist/target/dockerCommandExecutor.js +53 -2
  741. package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
  742. package/dist/target/dockerCommandExecutorCore.js +5 -3
  743. package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
  744. package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
  745. package/dist/target/dockerTarget.d.ts +1 -0
  746. package/dist/target/dockerTargetBinding.d.ts +1 -2
  747. package/dist/target/dockerTargetBinding.js +4 -4
  748. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  749. package/dist/target/dockerTargetExecFile.js +194 -0
  750. package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
  751. package/dist/target/dockerWorldServiceProvider.js +13 -1
  752. package/dist/target/evidenceExport.d.ts +3 -1
  753. package/dist/target/evidenceExport.js +12 -3
  754. package/dist/target/evidenceExportOperationsTestKit.js +3 -3
  755. package/dist/target/evidenceExportProvider.d.ts +2 -0
  756. package/dist/target/evidenceExportProvider.js +15 -5
  757. package/dist/target/publicArtifactSnapshot.d.ts +31 -0
  758. package/dist/target/publicArtifactSnapshot.js +37 -3
  759. package/dist/volume/feedLand.d.ts +31 -0
  760. package/dist/volume/feedLand.js +174 -0
  761. package/dist/volume/feedLandings.d.ts +45 -0
  762. package/dist/volume/feedLandings.js +111 -0
  763. package/dist/volume/feedLayout.d.ts +61 -0
  764. package/dist/volume/feedLayout.js +234 -0
  765. package/dist/volume/feedLock.d.ts +7 -0
  766. package/dist/volume/feedLock.js +131 -0
  767. package/dist/volume/feedManifest.d.ts +27 -0
  768. package/dist/volume/feedManifest.js +123 -0
  769. package/dist/volume/feedPrepare.d.ts +16 -0
  770. package/dist/volume/feedPrepare.js +228 -0
  771. package/dist/volume/feedProject.d.ts +39 -0
  772. package/dist/volume/feedProject.js +92 -0
  773. package/dist/volume/feedRecord.d.ts +55 -0
  774. package/dist/volume/feedRecord.js +148 -0
  775. package/dist/volume/feedRef.d.ts +43 -0
  776. package/dist/volume/feedRef.js +117 -0
  777. package/dist/volume/feedRefresh.d.ts +15 -0
  778. package/dist/volume/feedRefresh.js +187 -0
  779. package/dist/volume/feedSource.d.ts +66 -0
  780. package/dist/volume/feedSource.js +104 -0
  781. package/dist/volume/feedTarget.d.ts +70 -0
  782. package/dist/volume/feedTarget.js +9 -0
  783. package/dist/volume/feedTestKit.d.ts +11 -0
  784. package/dist/volume/feedTestKit.js +45 -0
  785. package/dist/volume/feedVerify.d.ts +18 -0
  786. package/dist/volume/feedVerify.js +104 -0
  787. package/dist/volume/index.d.ts +13 -0
  788. package/dist/volume/index.js +13 -0
  789. package/examples/README.md +45 -0
  790. package/examples/agent-with-subagents/AGENTS.md +3 -0
  791. package/examples/agent-with-subagents/Spawnfile +30 -0
  792. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  793. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  794. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  795. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  796. package/examples/daimon-org/Spawnfile +68 -0
  797. package/examples/daimon-org/TEAM.md +4 -0
  798. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  799. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  800. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  801. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  802. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  803. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  804. package/examples/daimon-public-host/AGENTS.md +3 -0
  805. package/examples/daimon-public-host/Spawnfile +21 -0
  806. package/examples/distribution-org/Spawnfile +43 -0
  807. package/examples/distribution-org/TEAM.md +4 -0
  808. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  809. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  810. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  811. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  812. package/examples/jungian-daimon-org/Spawnfile +41 -0
  813. package/examples/jungian-daimon-org/TEAM.md +21 -0
  814. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  815. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  816. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  817. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  818. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  819. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  820. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  821. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  822. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  823. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  824. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  825. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  826. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  827. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  828. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  829. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  830. package/examples/mixed-runtime-org/Spawnfile +71 -0
  831. package/examples/mixed-runtime-org/TEAM.md +8 -0
  832. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  833. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  834. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  835. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  836. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  837. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  838. package/examples/moltnet-team-chat/Spawnfile +43 -0
  839. package/examples/moltnet-team-chat/TEAM.md +5 -0
  840. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  841. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  842. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  843. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  844. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  845. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  846. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  847. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  848. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  849. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  850. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  851. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  852. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  853. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  854. package/examples/single-agent/AGENTS.md +3 -0
  855. package/examples/single-agent/HEARTBEAT.md +3 -0
  856. package/examples/single-agent/IDENTITY.md +3 -0
  857. package/examples/single-agent/MEMORY.md +3 -0
  858. package/examples/single-agent/SOUL.md +3 -0
  859. package/examples/single-agent/Spawnfile +41 -0
  860. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  861. package/moltnet-releases.json +5 -4
  862. package/package.json +36 -9
  863. package/runtimes.yaml +8 -3
  864. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
  865. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
  866. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
  867. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
  868. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
  869. package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
  870. package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
  871. package/dist/ownership/simfileRunOperatorInputs.js +0 -139
  872. package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
  873. package/dist/target/cleanupRunDocker.test-helper.js +0 -238
@@ -5,6 +5,9 @@ import { createWorkspaceResourceCommands, createWorkspaceResourceShellFunctions
5
5
  import { createConfigEnvMaterializationFunction, createConfigEnvWrites } from "./containerConfigEnvRender.js";
6
6
  import { CLI_CREDENTIAL_SECRET_NAME, modelAuthMethodNeedsCliCredential } from "./modelEnv.js";
7
7
  import { createCliCredentialMaterialization, createRecipeEnvAssignments, mergeRecipeEnv, shellQuote } from "./containerEntrypointShell.js";
8
+ import { MOLTNET_READINESS_DIRECTORY } from "./containerReadinessPaths.js";
9
+ import { createRuntimeReadinessWait } from "./containerRuntimeReadinessRender.js";
10
+ import { createBackedMountGuard } from "./containerBackedMountRender.js";
8
11
  const MOLTNET_SERVER_DATA_DIRECTORY = "/var/lib/spawnfile/moltnet/servers";
9
12
  // moltnet reads this path from MOLTNET_CAUSAL_EVENTS_PATH
10
13
  // (internal/app/config_load.go's mergeEnvConfig) and, when set, stamps
@@ -59,28 +62,13 @@ const resolveStartCommand = (plan) => plan.meta.startCommand
59
62
  .map((token) => token
60
63
  .replaceAll("<config-path>", plan.instancePaths.configPath)
61
64
  .replaceAll("<home-path>", plan.instancePaths.homePath ?? "")
65
+ .replaceAll("<instance-root>", plan.instancePaths.instanceRoot ?? "")
62
66
  .replaceAll("<runtime-root>", plan.runtimeRoot)
63
67
  .replaceAll("<workspace-path>", plan.instancePaths.workspacePath)
64
68
  .replaceAll("<port>", plan.port ? String(plan.port) : ""))
65
69
  .filter((token) => token.length > 0);
66
- const createRuntimeReadinessWait = (plan) => {
67
- if (!["openclaw", "pi"].includes(plan.runtimeName) || !plan.port) {
68
- return [];
69
- }
70
- return [
71
- "attempts=0",
72
- `until curl -sf ${shellQuote(`http://127.0.0.1:${plan.port}/healthz`)} >/dev/null; do`,
73
- " attempts=$((attempts + 1))",
74
- ' if [ "$attempts" -ge 180 ]; then',
75
- ` echo ${shellQuote(`Timed out waiting for ${plan.runtimeName} on port ${plan.port}`)} >&2`,
76
- " exit 1",
77
- " fi",
78
- " sleep 1",
79
- "done",
80
- ""
81
- ];
82
- };
83
70
  export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) => {
71
+ const usesDaimonRuntime = runtimePlans.some((plan) => plan.runtimeName === "daimon");
84
72
  const cliCredentialMaterialization = createCliCredentialMaterialization(runtimePlans);
85
73
  const renderedRequiredSecrets = [
86
74
  ...new Set([
@@ -91,7 +79,19 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
91
79
  const lines = [
92
80
  "#!/usr/bin/env bash",
93
81
  "set -euo pipefail",
82
+ ...(usesDaimonRuntime ? [
83
+ 'if [ "$#" -ne 3 ] || [ "$1" != "--spawnfile-runtime-identity" ]; then echo "Missing trusted Daimon runtime identity" >&2; exit 1; fi',
84
+ 'volume_bootstrap_uid="$2"',
85
+ 'volume_bootstrap_gid="$3"',
86
+ 'if ! [[ "$volume_bootstrap_uid" =~ ^[1-9][0-9]{0,9}$ ]] || [ "$volume_bootstrap_uid" -gt 2147483647 ]; then echo "Invalid trusted Daimon runtime UID" >&2; exit 1; fi',
87
+ 'if ! [[ "$volume_bootstrap_gid" =~ ^[1-9][0-9]{0,9}$ ]] || [ "$volume_bootstrap_gid" -gt 2147483647 ]; then echo "Invalid trusted Daimon runtime GID" >&2; exit 1; fi',
88
+ "shift 3"
89
+ ] : [
90
+ "volume_bootstrap_uid=1001",
91
+ "volume_bootstrap_gid=1001"
92
+ ]),
94
93
  "",
94
+ ...createBackedMountGuard(options.persistentMounts ?? []),
95
95
  "require_env() {",
96
96
  ' local name=\"$1\"',
97
97
  ' if [ -z \"${!name:-}\" ]; then',
@@ -143,6 +143,11 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
143
143
  return `${lines.join("\n").trimEnd()}\n`;
144
144
  }
145
145
  lines.push("PIDS=()", "", "terminate_children() {", ' for pid in "${PIDS[@]:-}"; do', ' kill "$pid" 2>/dev/null || true', " done", "}", "", "trap terminate_children INT TERM EXIT", "");
146
+ for (const receiptDirectory of [...new Set(moltnetNodePlans.flatMap((plan) => plan.receiptStorePath ? [path.posix.dirname(plan.receiptStorePath)] : []))].sort()) {
147
+ lines.push(`install -d -m 700 ${shellQuote(receiptDirectory)}`);
148
+ }
149
+ if (moltnetNodePlans.some((plan) => plan.receiptStorePath))
150
+ lines.push("");
146
151
  const recipeEnvAssignments = createRecipeEnvAssignments(mergeRecipeEnv(runtimePlans));
147
152
  const recipeEnvPrefix = recipeEnvAssignments.length > 0 ? `${recipeEnvAssignments.join(" ")} ` : "";
148
153
  const managedMoltnetServerPlans = moltnetServerPlans.filter((serverPlan) => serverPlan.mode === "managed");
@@ -159,9 +164,9 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
159
164
  serverLines.push(`apply_json_env_value ${shellQuote(serverPlan.configPath)} ${shellQuote(patch.envName)} ${shellQuote(patch.jsonPath)}`);
160
165
  }
161
166
  const causalEventsPath = moltnetCausalEventsPath(serverPlan.configPath);
162
- serverLines.push(...createMoltnetStorePrepareCommands(serverPlan), `MOLTNET_CONFIG=${shellQuote(serverPlan.configPath)} MOLTNET_CAUSAL_EVENTS_PATH=${shellQuote(causalEventsPath)} ${recipeEnvPrefix}/usr/local/bin/moltnet &`, 'PIDS+=("$!")');
167
+ serverLines.push(...createMoltnetStorePrepareCommands(serverPlan), `MOLTNET_CONFIG=${shellQuote(serverPlan.configPath)} MOLTNET_CAUSAL_EVENTS_PATH=${shellQuote(causalEventsPath)} ${recipeEnvPrefix}/usr/local/bin/moltnet start --config ${shellQuote(serverPlan.configPath)} &`, 'moltnet_server_pid="$!"', 'PIDS+=("$moltnet_server_pid")');
163
168
  if (serverPlan.port) {
164
- serverLines.push(`until curl -sf ${shellQuote(`http://127.0.0.1:${serverPlan.port}/healthz`)} >/dev/null; do sleep 1; done`);
169
+ serverLines.push(`until curl -sf ${shellQuote(`http://127.0.0.1:${serverPlan.port}/healthz`)} >/dev/null; do if ! kill -0 "$moltnet_server_pid" 2>/dev/null; then wait "$moltnet_server_pid" || true; echo ${shellQuote(`Moltnet exited before readiness on port ${serverPlan.port}`)} >&2; exit 1; fi; sleep 1; done`);
165
170
  }
166
171
  const externalParticipants = moltnetExternalParticipants.filter((artifact) => artifact.network.id === serverPlan.networkId);
167
172
  if (externalParticipants.length > 0) {
@@ -189,14 +194,15 @@ export const renderEntrypoint = (runtimePlans, requiredSecrets, options = {}) =>
189
194
  for (const plan of runtimePlans) {
190
195
  const commandTokens = resolveStartCommand(plan);
191
196
  const envAssignments = createEnvironmentAssignments(plan);
192
- lines.push(`mkdir -p ${shellQuote(plan.instancePaths.workspacePath)}`, ...createWorkspaceResourceCommands(plan), `require_file ${shellQuote(plan.instancePaths.configPath)}`, ...createEnvFileWrites(plan), ...createConfigEnvWrites(plan), `${envAssignments.join(" ")} ${commandTokens.map(shellQuote).join(" ")} &`, 'PIDS+=("$!")', "", ...createRuntimeReadinessWait(plan));
197
+ lines.push(`mkdir -p ${shellQuote(plan.instancePaths.workspacePath)}`, ...createWorkspaceResourceCommands(plan), `require_file ${shellQuote(plan.instancePaths.configPath)}`, ...createEnvFileWrites(plan), ...createConfigEnvWrites(plan), `${envAssignments.join(" ")} ${commandTokens.map(shellQuote).join(" ")} &`, 'runtime_pid="$!"', 'PIDS+=("$runtime_pid")', "", ...createRuntimeReadinessWait(plan, "runtime_pid"));
193
198
  }
194
199
  for (const nodePlan of moltnetNodePlans) {
195
200
  const urlEnv = networkUrlEnvName(nodePlan.networkId);
201
+ const receiptPath = `${MOLTNET_READINESS_DIRECTORY}/${nodePlan.networkId}-${nodePlan.memberId}.json`;
196
202
  lines.push(
197
203
  // Rebind the bridge endpoint when an external network URL is provided.
198
- `if [ -n "\${${urlEnv}:-}" ]; then`, ` apply_json_env_value ${shellQuote(nodePlan.configPath)} ${shellQuote(urlEnv)} ${shellQuote("moltnet.base_url")}`, "fi", `${recipeEnvPrefix}/usr/local/bin/moltnet node ${shellQuote(nodePlan.configPath)} &`, 'PIDS+=("$!")', "");
204
+ `if [ -n "\${${urlEnv}:-}" ]; then`, ` apply_json_env_value ${shellQuote(nodePlan.configPath)} ${shellQuote(urlEnv)} ${shellQuote("moltnet.base_url")}`, "fi", `install -d -m 700 ${shellQuote(path.posix.dirname(receiptPath))}`, `rm -f ${shellQuote(receiptPath)}`, `MOLTNET_NODE_READINESS_RECEIPT=${shellQuote(receiptPath)} ${recipeEnvPrefix}/usr/local/bin/moltnet node ${shellQuote(nodePlan.configPath)} &`, 'PIDS+=("$!")', "");
199
205
  }
200
- lines.push('if [ "${#PIDS[@]}" -eq 0 ]; then', ' echo "No runtime targets were generated for this compile output" >&2', " exit 1", "fi", "", "status=0", 'for pid in "${PIDS[@]}"; do', ' if ! wait "$pid"; then', " status=1", " fi", "done", "", 'exit "$status"');
206
+ lines.push('if [ "${#PIDS[@]}" -eq 0 ]; then', ' echo "No runtime targets were generated for this compile output" >&2', " exit 1", "fi", "", "# Every child is critical. Exit on the first child termination so Docker", "# can restart the complete, mutually consistent organization unit.", "set +e", 'wait -n "${PIDS[@]}"', "status=$?", "set -e", "terminate_children", 'for pid in "${PIDS[@]}"; do wait "$pid" 2>/dev/null || true; done', 'if [ "$status" -eq 0 ]; then status=1; fi', 'exit "$status"');
201
207
  return `${lines.join("\n").trimEnd()}\n`;
202
208
  };
@@ -0,0 +1,30 @@
1
+ import type { ContainerPersistentMountReport } from "../report/types.js";
2
+ /**
3
+ * Merges every durable-mount source into one report list.
4
+ *
5
+ * Sources are independent (memory banks, workspace `kind: volume` resources,
6
+ * Daimon telemetry, runtime-declared mounts, Moltnet stores and token
7
+ * directories) and may legitimately name the same mount twice; two sources
8
+ * describing one id DIFFERENTLY is a compile error, as is two ids claiming one
9
+ * host volume name.
10
+ */
11
+ export declare const mergePersistentMounts: (candidates: readonly ContainerPersistentMountReport[]) => ContainerPersistentMountReport[];
12
+ /**
13
+ * Durable mount names come from four independent sources — memory banks
14
+ * (`memoryArtifacts.ts`), workspace `kind: volume` resources
15
+ * (`containerTargetResources.ts`), Moltnet stores and token directories
16
+ * (`moltnetArtifacts.ts`), and runtime-declared mounts (`runtimePlans`) —
17
+ * and each source only ever checked itself.
18
+ *
19
+ * Author-declared names cross those boundaries. A resource with
20
+ * `name: X` and a managed Moltnet store with `persistence.name: X` used to
21
+ * compile to two mounts at two different paths carrying one `volume_name`, so
22
+ * `spawnfile run` mounted a single host volume at both. A sqlite store and a
23
+ * team's edition state then shared one directory, where their bootstrap-marker
24
+ * and replacement-sentinel protocols contradict each other.
25
+ *
26
+ * There is no safe interpretation of that declaration, so it fails at compile
27
+ * naming both sides. (Two mounts legitimately SHARE a name only when they are
28
+ * the same mount, which the id-keyed merge upstream has already collapsed.)
29
+ */
30
+ export declare const assertPersistentMountVolumeNamesAreUnique: (mounts: readonly ContainerPersistentMountReport[]) => void;
@@ -0,0 +1,66 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ /**
3
+ * Merges every durable-mount source into one report list.
4
+ *
5
+ * Sources are independent (memory banks, workspace `kind: volume` resources,
6
+ * Daimon telemetry, runtime-declared mounts, Moltnet stores and token
7
+ * directories) and may legitimately name the same mount twice; two sources
8
+ * describing one id DIFFERENTLY is a compile error, as is two ids claiming one
9
+ * host volume name.
10
+ */
11
+ export const mergePersistentMounts = (candidates) => {
12
+ const byId = new Map();
13
+ const merged = [...candidates]
14
+ .sort((left, right) => left.id.localeCompare(right.id))
15
+ .filter((mount) => {
16
+ const existing = byId.get(mount.id);
17
+ if (!existing) {
18
+ byId.set(mount.id, mount);
19
+ return true;
20
+ }
21
+ if (existing.mount_path !== mount.mount_path ||
22
+ existing.volume_name !== mount.volume_name ||
23
+ existing.reason !== mount.reason ||
24
+ existing.lifecycle !== mount.lifecycle) {
25
+ throw new SpawnfileError("validation_error", `Container persistent mount ${mount.id} resolves to conflicting targets`);
26
+ }
27
+ // Deliberately kept, not deduplicated: two sources describing one mount
28
+ // identically was already reported twice before this merge was extracted,
29
+ // and silently changing that is not this fix's business.
30
+ return true;
31
+ });
32
+ assertPersistentMountVolumeNamesAreUnique(merged);
33
+ return merged;
34
+ };
35
+ /**
36
+ * Durable mount names come from four independent sources — memory banks
37
+ * (`memoryArtifacts.ts`), workspace `kind: volume` resources
38
+ * (`containerTargetResources.ts`), Moltnet stores and token directories
39
+ * (`moltnetArtifacts.ts`), and runtime-declared mounts (`runtimePlans`) —
40
+ * and each source only ever checked itself.
41
+ *
42
+ * Author-declared names cross those boundaries. A resource with
43
+ * `name: X` and a managed Moltnet store with `persistence.name: X` used to
44
+ * compile to two mounts at two different paths carrying one `volume_name`, so
45
+ * `spawnfile run` mounted a single host volume at both. A sqlite store and a
46
+ * team's edition state then shared one directory, where their bootstrap-marker
47
+ * and replacement-sentinel protocols contradict each other.
48
+ *
49
+ * There is no safe interpretation of that declaration, so it fails at compile
50
+ * naming both sides. (Two mounts legitimately SHARE a name only when they are
51
+ * the same mount, which the id-keyed merge upstream has already collapsed.)
52
+ */
53
+ export const assertPersistentMountVolumeNamesAreUnique = (mounts) => {
54
+ const byVolumeName = new Map();
55
+ for (const mount of mounts) {
56
+ const existing = byVolumeName.get(mount.volume_name);
57
+ if (existing && existing.mount_path !== mount.mount_path) {
58
+ throw new SpawnfileError("validation_error", `Durable volume name "${mount.volume_name}" is claimed by two different mounts: `
59
+ + `${existing.id} (${existing.reason}) at ${existing.mount_path}, and `
60
+ + `${mount.id} (${mount.reason}) at ${mount.mount_path}. `
61
+ + "One host volume cannot back two container paths; give each declaration its own name.");
62
+ }
63
+ if (!existing)
64
+ byVolumeName.set(mount.volume_name, mount);
65
+ }
66
+ };
@@ -0,0 +1 @@
1
+ export declare const MOLTNET_READINESS_DIRECTORY = "/run/spawnfile/moltnet-readiness";
@@ -0,0 +1 @@
1
+ export const MOLTNET_READINESS_DIRECTORY = "/run/spawnfile/moltnet-readiness";
@@ -0,0 +1,2 @@
1
+ export declare const RUNTIME_LINK_MATERIALIZER_PATH = "/opt/spawnfile/materialize-runtime-links.cjs";
2
+ export declare const renderRuntimeLinkMaterializer: () => string;
@@ -0,0 +1,12 @@
1
+ export const RUNTIME_LINK_MATERIALIZER_PATH = "/opt/spawnfile/materialize-runtime-links.cjs";
2
+ export const renderRuntimeLinkMaterializer = () => `"use strict";
3
+ const fs=require("node:fs"),path=require("node:path"),root=path.resolve(process.argv[2]||"");
4
+ if(!root.startsWith("/opt/spawnfile/runtime-installs/"))throw Error("unsafe root");
5
+ const rootInfo=fs.lstatSync(root),links=[];
6
+ if(!rootInfo.isDirectory()||rootInfo.isSymbolicLink()||rootInfo.uid||rootInfo.gid)throw Error("unsafe root identity");
7
+ const walk=d=>{for(const n of fs.readdirSync(d).sort()){const p=path.join(d,n),s=fs.lstatSync(p);if(s.isSymbolicLink())links.push(p);else if(s.isDirectory())walk(p);else if(!s.isFile())throw Error("unsupported entry");}};
8
+ const inside=p=>p.startsWith(root+path.sep);
9
+ const resolve=p=>{let hops=0;for(;;){const rel=path.relative(root,p);if(!rel||rel.startsWith("..")||path.isAbsolute(rel))throw Error("link escape");const parts=rel.split(path.sep);let q=root,again=false;for(let i=0;i<parts.length;i++){q=path.join(q,parts[i]);const s=fs.lstatSync(q);if(!s.isSymbolicLink())continue;if(++hops>16||s.uid||s.gid)throw Error("unsafe link chain");const l=fs.readlinkSync(q);if(path.isAbsolute(l))throw Error("absolute link");p=path.resolve(path.dirname(q),l,...parts.slice(i+1));if(!inside(p))throw Error("link escape");again=true;break;}if(!again)return p;}};
10
+ walk(root);
11
+ for(const link of links){const s=fs.lstatSync(link);if(!s.isSymbolicLink()||s.uid||s.gid)throw Error("link changed");const target=resolve(link),t=fs.lstatSync(target);if(!t.isFile()||t.isSymbolicLink()||t.uid||t.gid||t.dev!==rootInfo.dev||t.nlink<1)throw Error("unsafe target");const b=fs.readFileSync(target);if(b.length>67108864)throw Error("target too large");const tmp=link+".spawnfile-materialize",fd=fs.openSync(tmp,fs.constants.O_CREAT|fs.constants.O_EXCL|fs.constants.O_WRONLY|fs.constants.O_NOFOLLOW,t.mode&0o111?0o555:0o444);try{fs.writeFileSync(fd,b);fs.fsyncSync(fd);}finally{fs.closeSync(fd);}fs.renameSync(tmp,link);}
12
+ `;
@@ -0,0 +1,7 @@
1
+ import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
2
+ /**
3
+ * Blocks until a runtime with an HTTP port answers /healthz, failing fast if
4
+ * the child dies first. Split out of containerEntrypointRender.ts to keep that
5
+ * module under the repository's 400-line ceiling.
6
+ */
7
+ export declare const createRuntimeReadinessWait: (plan: RuntimeTargetPlan, pidVariable: string) => string[];
@@ -0,0 +1,40 @@
1
+ import { shellQuote } from "./containerEntrypointShell.js";
2
+ /**
3
+ * Blocks until a runtime with an HTTP port answers /healthz, failing fast if
4
+ * the child dies first. Split out of containerEntrypointRender.ts to keep that
5
+ * module under the repository's 400-line ceiling.
6
+ */
7
+ export const createRuntimeReadinessWait = (plan, pidVariable) => {
8
+ if (!plan.port)
9
+ return [];
10
+ if (plan.runtimeName === "daimon") {
11
+ return [
12
+ "attempts=0",
13
+ `until curl -sf ${shellQuote(`http://127.0.0.1:${plan.port}/healthz`)} >/dev/null; do`,
14
+ ` if ! kill -0 "$${pidVariable}" 2>/dev/null; then wait "$${pidVariable}" || true; echo ${shellQuote(`Daimon exited before readiness on port ${plan.port}`)} >&2; exit 1; fi`,
15
+ " attempts=$((attempts + 1))",
16
+ ' if [ "$attempts" -ge 180 ]; then',
17
+ ` echo ${shellQuote(`Timed out waiting for daimon on port ${plan.port}`)} >&2`,
18
+ " exit 1",
19
+ " fi",
20
+ " sleep 1",
21
+ "done",
22
+ ""
23
+ ];
24
+ }
25
+ if (!["openclaw", "pi"].includes(plan.runtimeName))
26
+ return [];
27
+ return [
28
+ "attempts=0",
29
+ `until curl -sf ${shellQuote(`http://127.0.0.1:${plan.port}/healthz`)} >/dev/null; do`,
30
+ ` if ! kill -0 "$${pidVariable}" 2>/dev/null; then wait "$${pidVariable}" || true; echo ${shellQuote(`${plan.runtimeName} exited before readiness on port ${plan.port}`)} >&2; exit 1; fi`,
31
+ " attempts=$((attempts + 1))",
32
+ ' if [ "$attempts" -ge 180 ]; then',
33
+ ` echo ${shellQuote(`Timed out waiting for ${plan.runtimeName} on port ${plan.port}`)} >&2`,
34
+ " exit 1",
35
+ " fi",
36
+ " sleep 1",
37
+ "done",
38
+ ""
39
+ ];
40
+ };
@@ -0,0 +1,4 @@
1
+ import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
2
+ import type { EntrypointOptions } from "./containerEntrypointRender.js";
3
+ export { VOLUME_BOOTSTRAP_MARKER, VOLUME_BOOTSTRAP_MARKER_CONTENT } from "./containerVolumeBootstrap.js";
4
+ export declare const createStateOwnershipCommand: (runtimePlans: RuntimeTargetPlan[], persistentMountPaths?: string[], moltnet?: EntrypointOptions["moltnet"]) => string;
@@ -0,0 +1,75 @@
1
+ import path from "node:path";
2
+ import { SpawnfileError } from "../shared/index.js";
3
+ import { DAIMON_RUNTIME_UID, resolveDaimonUidEntrypointStateRoots } from "./containerDaimonUidEntrypointRender.js";
4
+ import { VOLUME_BOOTSTRAP_MARKER, VOLUME_BOOTSTRAP_MARKER_CONTENT } from "./containerVolumeBootstrap.js";
5
+ export { VOLUME_BOOTSTRAP_MARKER, VOLUME_BOOTSTRAP_MARKER_CONTENT } from "./containerVolumeBootstrap.js";
6
+ const SPAWNFILE_STATE_ROOT = "/var/lib/spawnfile";
7
+ const MOLTNET_STATE_ROOT = `${SPAWNFILE_STATE_ROOT}/moltnet`;
8
+ const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
9
+ const privateDirectoriesThrough = (target) => {
10
+ const relative = path.posix.relative(SPAWNFILE_STATE_ROOT, target);
11
+ if (relative.startsWith("../") || path.posix.isAbsolute(relative)) {
12
+ throw new SpawnfileError("compile_error", `Generated Moltnet state path escapes ${SPAWNFILE_STATE_ROOT}: ${target}`);
13
+ }
14
+ const segments = relative === "" ? [] : relative.split("/");
15
+ return [
16
+ SPAWNFILE_STATE_ROOT,
17
+ ...segments.map((_, index) => path.posix.join(SPAWNFILE_STATE_ROOT, ...segments.slice(0, index + 1)))
18
+ ];
19
+ };
20
+ const createMoltnetPrivacyCommands = (runtimePlans, persistentMountPaths, moltnet) => {
21
+ if (!runtimePlans.some((plan) => plan.runtimeName === "daimon") || !moltnet)
22
+ return [];
23
+ const configPaths = [
24
+ ...moltnet.serverPlans.flatMap((plan) => plan.mode === "managed" && plan.configPath ? [plan.configPath] : []),
25
+ ...moltnet.nodePlans.map((plan) => plan.configPath)
26
+ ].sort();
27
+ const receiptDirectories = moltnet.nodePlans.flatMap((plan) => plan.receiptStorePath ? [path.posix.dirname(plan.receiptStorePath)] : []);
28
+ if (configPaths.length === 0)
29
+ return [];
30
+ if (configPaths.some((configPath) => !configPath.startsWith(`${MOLTNET_STATE_ROOT}/`))) {
31
+ throw new SpawnfileError("compile_error", "Generated Moltnet config paths must stay beneath the private Moltnet state root");
32
+ }
33
+ const moltnetMountPaths = persistentMountPaths
34
+ .filter((mountPath) => mountPath.startsWith(`${MOLTNET_STATE_ROOT}/`));
35
+ const privateDirectories = [
36
+ ...new Set([
37
+ ...configPaths.flatMap((configPath) => privateDirectoriesThrough(path.posix.dirname(configPath))),
38
+ ...receiptDirectories.flatMap(privateDirectoriesThrough),
39
+ ...moltnetMountPaths.flatMap(privateDirectoriesThrough)
40
+ ])
41
+ ].filter((directory) => directory !== SPAWNFILE_STATE_ROOT).sort();
42
+ const ownership = `${DAIMON_RUNTIME_UID}:${DAIMON_RUNTIME_UID}`;
43
+ return [
44
+ `install -d -o ${DAIMON_RUNTIME_UID} -g ${DAIMON_RUNTIME_UID} -m 700 ${privateDirectories.map(shellQuote).join(" ")}`,
45
+ `chown root:root ${configPaths.map(shellQuote).join(" ")}`,
46
+ `chmod 600 ${configPaths.map(shellQuote).join(" ")}`,
47
+ `chown ${ownership} ${configPaths.map(shellQuote).join(" ")}`
48
+ ];
49
+ };
50
+ export const createStateOwnershipCommand = (runtimePlans, persistentMountPaths = [], moltnet) => {
51
+ const mountPaths = [...new Set(persistentMountPaths)].sort();
52
+ const wrapperStateRoots = runtimePlans.some((plan) => plan.runtimeName === "daimon")
53
+ ? resolveDaimonUidEntrypointStateRoots(runtimePlans)
54
+ : [];
55
+ const mkdirPaths = [...new Set([SPAWNFILE_STATE_ROOT, ...mountPaths])].sort();
56
+ const markerCommands = mountPaths.map((mountPath) => `printf '%s\\n' ${shellQuote(VOLUME_BOOTSTRAP_MARKER_CONTENT)} > ${shellQuote(path.posix.join(mountPath, VOLUME_BOOTSTRAP_MARKER))} && chmod 600 ${shellQuote(path.posix.join(mountPath, VOLUME_BOOTSTRAP_MARKER))}`);
57
+ const chownPaths = [
58
+ ...new Set([
59
+ ...(runtimePlans.some((plan) => plan.runtimeName === "daimon") ? [] : [SPAWNFILE_STATE_ROOT]),
60
+ ...mountPaths.filter((mountPath) => !mountPath.startsWith(`${SPAWNFILE_STATE_ROOT}/`))
61
+ ])
62
+ ].sort();
63
+ return [
64
+ `mkdir -p ${mkdirPaths.map(shellQuote).join(" ")}`,
65
+ ...markerCommands,
66
+ ...(chownPaths.length > 0
67
+ ? [`chown -R spawnfile:spawnfile ${chownPaths.map(shellQuote).join(" ")}`]
68
+ : []),
69
+ ...(runtimePlans.some((plan) => plan.runtimeName === "daimon")
70
+ ? [`chown root:root ${shellQuote(SPAWNFILE_STATE_ROOT)} && chmod 711 ${shellQuote(SPAWNFILE_STATE_ROOT)}`]
71
+ : []),
72
+ ...wrapperStateRoots.map((stateRoot) => `install -d -o root -g root -m 700 ${shellQuote(stateRoot)}`),
73
+ ...createMoltnetPrivacyCommands(runtimePlans, mountPaths, moltnet)
74
+ ].join(" && ");
75
+ };
@@ -1,4 +1,35 @@
1
1
  import type { ContainerTarget, ContainerTargetInput, RuntimeContainerMeta } from "../runtime/index.js";
2
2
  import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
3
3
  import { type WorkspaceResourcePlan } from "./workspaceResources.js";
4
- export declare const resolveTargetResources: (target: ContainerTarget, inputs: ContainerTargetInput[], instancePaths: RuntimeTargetPlan["instancePaths"], meta: RuntimeContainerMeta) => WorkspaceResourcePlan[];
4
+ export interface ResolvedTargetResourcePlan extends WorkspaceResourcePlan {
5
+ canonicalBackingPath: string;
6
+ ownerId: string;
7
+ persistentMountId?: string;
8
+ replacementSentinel?: string;
9
+ resolvedIdentity: string;
10
+ volumeName?: string;
11
+ }
12
+ export interface WorkspaceResourcePersistentMount {
13
+ /** The author's `name`, when declared on the resource. */
14
+ declared_volume_name?: string;
15
+ id: string;
16
+ lifecycle: "exclusive-reattach";
17
+ mount_path: string;
18
+ reason: string;
19
+ volume_name: string;
20
+ }
21
+ export declare const resolveWorkspaceResourceVolumes: (runtimePlans: readonly RuntimeTargetPlan[]) => {
22
+ resources: ResolvedTargetResourcePlan[];
23
+ mounts: WorkspaceResourcePersistentMount[];
24
+ };
25
+ /**
26
+ * One source agent's workspace path inside its runtime target, still in the
27
+ * target's placeholder vocabulary (`<instance-root>`, `<workspace-path>`),
28
+ * which container rendering substitutes once the target's instance paths are
29
+ * known. Mount link paths and MCP `${workspace}` both resolve through here.
30
+ */
31
+ export declare const expandSourceWorkspacePathTemplate: (meta: RuntimeContainerMeta, source: {
32
+ agentName: string;
33
+ slug: string;
34
+ }) => string;
35
+ export declare const resolveTargetResources: (target: ContainerTarget, inputs: ContainerTargetInput[], instancePaths: RuntimeTargetPlan["instancePaths"], meta: RuntimeContainerMeta, planRoot: string, deploymentLineage?: string) => ResolvedTargetResourcePlan[];
@@ -1,30 +1,79 @@
1
1
  import path from "node:path";
2
+ import { createHash } from "node:crypto";
2
3
  import { SpawnfileError } from "../shared/index.js";
3
- import { mergeWorkspaceResourcePlans } from "./workspaceResources.js";
4
+ import { createExclusiveReattachVolumeName } from "../shared/index.js";
5
+ import { mergeWorkspaceResourcePlans, workspaceResourceTargetId } from "./workspaceResources.js";
4
6
  const CONFIG_FILE_PLACEHOLDER = "<config-file>";
5
7
  const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
6
8
  const SOURCE_AGENT_PLACEHOLDER = "<agent-name>";
7
9
  const SOURCE_SLUG_PLACEHOLDER = "<source-slug>";
8
- const replaceSourceWorkspacePathTemplate = (template, input, instancePaths, meta) => {
9
- const agentName = input.value.kind === "agent" ? input.value.name : input.slug;
10
+ const WORKSPACE_PATH_PLACEHOLDER = "<workspace-path>";
11
+ const digest = (value) => createHash("sha256").update(value).digest("hex");
12
+ export const resolveWorkspaceResourceVolumes = (runtimePlans) => {
13
+ const resources = runtimePlans.flatMap((runtimePlan) => (runtimePlan.resources ?? []));
14
+ const byBackingPath = new Map();
15
+ const backingPathByVolumeName = new Map();
16
+ for (const resource of resources.filter((candidate) => candidate.kind === "volume")) {
17
+ const existing = byBackingPath.get(resource.canonicalBackingPath);
18
+ // Two DIFFERENT declared resources landing on one backing path is always a
19
+ // mistake: the path segment derives from an explicit `name` when one is
20
+ // given, so `id: a`/`id: b` both declaring `name: X` in one scope used to
21
+ // collapse into a single directory and volume, silently, with both
22
+ // workspace symlinks pointing at it. The same id across runtime plans is
23
+ // the legitimate `sharing: team` case and still merges.
24
+ if (existing && existing.id !== resource.id) {
25
+ throw new SpawnfileError("validation_error", `Workspace resources ${existing.id} and ${resource.id} resolve to the same backing volume ${resource.canonicalBackingPath}; a declared volume name must be unique within its scope`);
26
+ }
27
+ if (existing && (existing.mode !== resource.mode || existing.sharing !== resource.sharing || existing.volumeName !== resource.volumeName || (resource.sharing === "per_agent" && existing.ownerId !== resource.ownerId))) {
28
+ throw new SpawnfileError("validation_error", `Workspace volume ${resource.canonicalBackingPath} has incompatible mode, sharing, or owner declarations`);
29
+ }
30
+ const conflictingPath = backingPathByVolumeName.get(resource.volumeName);
31
+ if (conflictingPath && conflictingPath !== resource.canonicalBackingPath)
32
+ throw new SpawnfileError("validation_error", "Workspace volume name collision");
33
+ byBackingPath.set(resource.canonicalBackingPath, resource);
34
+ backingPathByVolumeName.set(resource.volumeName, resource.canonicalBackingPath);
35
+ }
36
+ // Workspace `kind: volume` resources are durable product state: an author
37
+ // declares one precisely so it outlives the container. They are therefore
38
+ // `exclusive-reattach` — deployment-stable name, reattached rather than
39
+ // recreated, one live holder at a time.
40
+ return { resources, mounts: [...byBackingPath.values()].map((resource) => ({
41
+ ...(resource.name?.trim() ? { declared_volume_name: resource.name.trim() } : {}),
42
+ id: resource.persistentMountId, lifecycle: "exclusive-reattach",
43
+ mount_path: resource.canonicalBackingPath,
44
+ reason: `Workspace ${resource.sharing} resource ${resource.id}`, volume_name: resource.volumeName
45
+ })) };
46
+ };
47
+ /**
48
+ * One source agent's workspace path inside its runtime target, still in the
49
+ * target's placeholder vocabulary (`<instance-root>`, `<workspace-path>`),
50
+ * which container rendering substitutes once the target's instance paths are
51
+ * known. Mount link paths and MCP `${workspace}` both resolve through here.
52
+ */
53
+ export const expandSourceWorkspacePathTemplate = (meta, source) => meta.instancePaths.sourceWorkspacePathTemplate
54
+ ? meta.instancePaths.sourceWorkspacePathTemplate
55
+ .replaceAll(CONFIG_FILE_PLACEHOLDER, meta.configFileName)
56
+ .replaceAll(SOURCE_AGENT_PLACEHOLDER, source.agentName)
57
+ .replaceAll(SOURCE_SLUG_PLACEHOLDER, source.slug)
58
+ : WORKSPACE_PATH_PLACEHOLDER;
59
+ const resolveSourceWorkspacePath = (input, instancePaths, meta) => {
10
60
  const instanceRoot = instancePaths.instanceRoot ?? path.posix.dirname(instancePaths.workspacePath);
11
- return template
61
+ return expandSourceWorkspacePathTemplate(meta, {
62
+ agentName: input.value.kind === "agent" ? input.value.name : input.slug,
63
+ slug: input.slug
64
+ })
12
65
  .replaceAll(INSTANCE_ROOT_PLACEHOLDER, instanceRoot)
13
- .replaceAll(CONFIG_FILE_PLACEHOLDER, meta.configFileName)
14
- .replaceAll(SOURCE_AGENT_PLACEHOLDER, agentName)
15
- .replaceAll(SOURCE_SLUG_PLACEHOLDER, input.slug);
66
+ .replaceAll(WORKSPACE_PATH_PLACEHOLDER, instancePaths.workspacePath);
16
67
  };
17
- const resolveSourceWorkspacePath = (input, instancePaths, meta) => meta.instancePaths.sourceWorkspacePathTemplate
18
- ? replaceSourceWorkspacePathTemplate(meta.instancePaths.sourceWorkspacePathTemplate, input, instancePaths, meta)
19
- : instancePaths.workspacePath;
20
- const sourceTargetId = (target, input, isMergedTarget) => isMergedTarget ? `${target.id}:${input.id}` : target.id;
21
68
  const pathsOverlap = (left, right) => left === right || left.startsWith(`${right}/`) || right.startsWith(`${left}/`);
22
69
  const dedupeAndAssertResourcePlans = (target, resources) => {
23
70
  const byLinkPath = new Map();
71
+ const volumesByBackingPath = new Map();
72
+ const backingPathByVolumeName = new Map();
24
73
  for (const resource of resources) {
25
74
  const existing = byLinkPath.get(resource.linkPath);
26
75
  if (existing) {
27
- if (existing.backingPath !== resource.backingPath || existing.id !== resource.id) {
76
+ if (existing.resolvedIdentity !== resource.resolvedIdentity) {
28
77
  throw new SpawnfileError("validation_error", `Container target ${target.id} declares conflicting workspace resources at ${resource.linkPath}`);
29
78
  }
30
79
  continue;
@@ -34,22 +83,73 @@ const dedupeAndAssertResourcePlans = (target, resources) => {
34
83
  throw new SpawnfileError("validation_error", `Container target ${target.id} declares overlapping workspace resource links ${overlapping.linkPath} and ${resource.linkPath}`);
35
84
  }
36
85
  byLinkPath.set(resource.linkPath, resource);
86
+ if (resource.kind !== "volume")
87
+ continue;
88
+ const existingVolume = volumesByBackingPath.get(resource.canonicalBackingPath);
89
+ if (existingVolume && existingVolume.id !== resource.id) {
90
+ throw new SpawnfileError("validation_error", `Container target ${target.id} declares workspace resources ${existingVolume.id} and ${resource.id} that resolve to the same backing volume ${resource.canonicalBackingPath}; a declared volume name must be unique within its scope`);
91
+ }
92
+ if (existingVolume) {
93
+ const incompatible = existingVolume.mode !== resource.mode ||
94
+ existingVolume.sharing !== resource.sharing ||
95
+ existingVolume.volumeName !== resource.volumeName ||
96
+ (resource.sharing === "per_agent" && existingVolume.ownerId !== resource.ownerId);
97
+ if (incompatible) {
98
+ throw new SpawnfileError("validation_error", `Container target ${target.id} declares incompatible workspace volume owners or modes at ${resource.canonicalBackingPath}`);
99
+ }
100
+ }
101
+ else {
102
+ volumesByBackingPath.set(resource.canonicalBackingPath, resource);
103
+ }
104
+ const conflictingBackingPath = backingPathByVolumeName.get(resource.volumeName);
105
+ if (conflictingBackingPath && conflictingBackingPath !== resource.canonicalBackingPath) {
106
+ throw new SpawnfileError("validation_error", `Container target ${target.id} workspace volume identity collision`);
107
+ }
108
+ backingPathByVolumeName.set(resource.volumeName, resource.canonicalBackingPath);
37
109
  }
38
110
  return [...byLinkPath.values()].sort((left, right) => left.linkPath.localeCompare(right.linkPath) || left.id.localeCompare(right.id));
39
111
  };
40
- export const resolveTargetResources = (target, inputs, instancePaths, meta) => {
112
+ export const resolveTargetResources = (target, inputs, instancePaths, meta, planRoot, deploymentLineage = "compile") => {
41
113
  const sourceIds = new Set(target.sourceIds ?? []);
42
114
  if (sourceIds.size === 0) {
43
115
  return [];
44
116
  }
45
- const isMergedTarget = sourceIds.size > 1;
46
117
  const resources = inputs.flatMap((input) => {
47
118
  if (!sourceIds.has(input.id) || input.value.kind !== "agent") {
48
119
  return [];
49
120
  }
50
121
  return mergeWorkspaceResourcePlans(input.value.workspaceResources ?? [], `${target.id}/${input.id}`, {
51
- targetId: sourceTargetId(target, input, isMergedTarget),
122
+ targetId: workspaceResourceTargetId(target.id, input.id, sourceIds.size),
52
123
  workspacePath: resolveSourceWorkspacePath(input, instancePaths, meta)
124
+ }).map((resource) => {
125
+ const canonicalBackingPath = path.posix.normalize(resource.backingPath);
126
+ const ownerId = resource.sharing === "per_agent" ? input.id : canonicalBackingPath;
127
+ const resolvedIdentity = `sha256:${digest(JSON.stringify({
128
+ backingPath: canonicalBackingPath,
129
+ kind: resource.kind,
130
+ mode: resource.mode,
131
+ ownerId,
132
+ ...(resource.kind === "bundle" ? { archivePath: resource.archivePath, sha256: resource.sha256 } : {}),
133
+ sharing: resource.sharing
134
+ }))}`;
135
+ if (resource.kind !== "volume")
136
+ return { ...resource, backingPath: canonicalBackingPath, canonicalBackingPath, ownerId, resolvedIdentity };
137
+ const pathDigest = digest(canonicalBackingPath);
138
+ return {
139
+ ...resource,
140
+ backingPath: canonicalBackingPath,
141
+ canonicalBackingPath,
142
+ ownerId,
143
+ persistentMountId: `workspace-resource-${pathDigest.slice(0, 24)}`,
144
+ replacementSentinel: path.posix.join(canonicalBackingPath, ".spawnfile-resource-identity"),
145
+ resolvedIdentity,
146
+ // Author-declared `name` verbatim (an operator can pre-create or
147
+ // migrate the host volume under exactly that name); otherwise a
148
+ // deployment-stable derived name. Never run-scoped: a fresh
149
+ // NOOPOLIS_RUN_ID must not strand the previous run's state.
150
+ volumeName: resource.name?.trim()
151
+ || createExclusiveReattachVolumeName(`${planRoot}\0${deploymentLineage}`, `workspace-resource-${pathDigest.slice(0, 24)}`)
152
+ };
53
153
  });
54
154
  });
55
155
  return dedupeAndAssertResourcePlans(target, resources);
@@ -0,0 +1,3 @@
1
+ export declare const VOLUME_BOOTSTRAP_MARKER = ".spawnfile-volume-init";
2
+ export declare const VOLUME_BOOTSTRAP_CLAIM = ".spawnfile-volume-init.claim";
3
+ export declare const VOLUME_BOOTSTRAP_MARKER_CONTENT = "spawnfile.volume-bootstrap.v1";
@@ -0,0 +1,3 @@
1
+ export const VOLUME_BOOTSTRAP_MARKER = ".spawnfile-volume-init";
2
+ export const VOLUME_BOOTSTRAP_CLAIM = `${VOLUME_BOOTSTRAP_MARKER}.claim`;
3
+ export const VOLUME_BOOTSTRAP_MARKER_CONTENT = "spawnfile.volume-bootstrap.v1";