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
@@ -0,0 +1,161 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import { resolveDockerBaseArgs } from "../distribution/index.js";
3
+ import { writeJsonAtomic } from "./ledger.js";
4
+ import { DAIMON_CONTROL_TOKEN_ENV } from "./releaseTypes.js";
5
+ import { ReleaseError } from "./types.js";
6
+ export const RELEASE_DRAIN_MARKER_VERSION = "spawnfile.release-drain.v1";
7
+ /** Same precedence `up` applies: a process value overrides the env file. */
8
+ export const resolveControlToken = (request) => {
9
+ const fromProcess = process.env[DAIMON_CONTROL_TOKEN_ENV];
10
+ if (typeof fromProcess === "string" && fromProcess.length > 0)
11
+ return fromProcess;
12
+ const fromFile = request.envFileEnv[DAIMON_CONTROL_TOKEN_ENV];
13
+ return typeof fromFile === "string" && fromFile.length > 0 ? fromFile : null;
14
+ };
15
+ export const controlTargetFor = (request, containerRef, imageRef) => {
16
+ const token = resolveControlToken(request);
17
+ if (token === null) {
18
+ throw new ReleaseError("blocked", `${DAIMON_CONTROL_TOKEN_ENV} is not set in the env file or environment; a drained release needs the running deployment's control token`);
19
+ }
20
+ return {
21
+ containerRef,
22
+ dockerArgs: resolveDockerBaseArgs({ ...(request.dockerContext ? { dockerContext: request.dockerContext } : {}), ...(request.dockerHost ? { dockerHost: request.dockerHost } : {}) }),
23
+ dockerCommand: request.dockerCommand,
24
+ imageRef,
25
+ token
26
+ };
27
+ };
28
+ /**
29
+ * Written BEFORE the drain request and removed only once admission is open
30
+ * again, so a release killed in between (a unit timeout, a reboot) leaves
31
+ * evidence that the organization may still be refusing work. Every later run
32
+ * resumes it first, even when it has nothing to release.
33
+ */
34
+ const writeMarker = async (request, paths, unit) => {
35
+ const target = request.target;
36
+ if (target === undefined)
37
+ throw new ReleaseError("blocked", "the release has no pinned Docker target to record with its drain");
38
+ const marker = { container: unit.id, image: unit.imageId, since: new Date().toISOString(), target, version: RELEASE_DRAIN_MARKER_VERSION };
39
+ await writeJsonAtomic(paths.drainMarker, marker);
40
+ };
41
+ /** The same request, addressed at exactly this Docker daemon. */
42
+ export const requestForTarget = (request, target) => {
43
+ const { dockerContext: _context, dockerHost: _host, ...rest } = request;
44
+ if (target.kind === "host")
45
+ return { ...rest, dockerHost: target.value, target };
46
+ return { ...rest, dockerContext: target.kind === "context" ? target.name : target.context, target };
47
+ };
48
+ export const clearDrainMarker = async (paths) => {
49
+ await rm(paths.drainMarker, { force: true });
50
+ };
51
+ export const recoverInterruptedDrain = async (request, deps, paths) => {
52
+ let marker;
53
+ try {
54
+ marker = JSON.parse(await readFile(paths.drainMarker, "utf8"));
55
+ if (typeof marker.container !== "string" || typeof marker.target?.kind !== "string")
56
+ throw new Error("shape");
57
+ }
58
+ catch (error) {
59
+ if (error.code === "ENOENT")
60
+ return false;
61
+ throw new ReleaseError("resume-failed", `the drain marker ${paths.drainMarker} is unreadable; the organization may still be drained`);
62
+ }
63
+ // Recovery talks to the Docker daemon the drain went out through, whatever this run was invoked with,
64
+ // and refuses (keeping the marker) when that name now resolves to a different endpoint.
65
+ const target = requestForTarget(request, marker.target);
66
+ let unit;
67
+ try {
68
+ await deps.verifyTarget(target, marker.target);
69
+ unit = await deps.inspectUnit(target, marker.container);
70
+ }
71
+ catch (error) {
72
+ throw new ReleaseError("resume-failed", `an earlier release may have left the organization drained and its container cannot be inspected: ${error.message}`);
73
+ }
74
+ if (unit === null || !unit.running) {
75
+ // A drain lives in the runtime process: a container that is gone or stopped admits again when it next starts.
76
+ await clearDrainMarker(paths);
77
+ return true;
78
+ }
79
+ try {
80
+ await deps.requestResume(controlTargetFor(target, unit.id, unit.imageId));
81
+ }
82
+ catch (error) {
83
+ throw new ReleaseError("resume-failed", `an earlier release left the organization drained and resuming it failed: ${error.message}`);
84
+ }
85
+ await clearDrainMarker(paths);
86
+ request.log("release: resumed admission left drained by an interrupted release");
87
+ return true;
88
+ };
89
+ /**
90
+ * Admission pauses, queued wakes stay queued, running turns finish. On a
91
+ * timeout or interruption the release is abandoned and admission resumed:
92
+ * nothing in this module, or anything it calls, stops a turn.
93
+ */
94
+ export const drainForRelease = async (request, deps, paths, unit) => {
95
+ if (!request.drain) {
96
+ request.log("release: --no-drain: deploying without draining; in-flight turns will be killed");
97
+ return { drainMs: 0, kind: "skipped" };
98
+ }
99
+ if (unit === null || !unit.running) {
100
+ request.log("release: no running container, so no turn can be in flight; nothing to drain");
101
+ return { drainMs: 0, kind: "skipped" };
102
+ }
103
+ const target = controlTargetFor(request, unit.id, unit.imageId);
104
+ const started = Date.now();
105
+ await writeMarker(request, paths, unit);
106
+ try {
107
+ await deps.requestDrain(target);
108
+ request.log(`release: admission paused; waiting up to ${Math.round(request.drainTimeoutMs / 1000)}s for running turns to finish`);
109
+ const waited = await deps.waitForDrained(target, {
110
+ pollMs: request.drainPollMs,
111
+ ...(request.signal ? { signal: request.signal } : {}),
112
+ timeoutMs: request.drainTimeoutMs
113
+ });
114
+ if (waited.drained && !request.signal?.aborted) {
115
+ request.log(`release: drained after ${Math.round(waited.waitedMs / 1000)}s`);
116
+ return { drainMs: Date.now() - started, kind: "drained" };
117
+ }
118
+ await resumeOrThrow(request, deps, paths, target);
119
+ if (waited.drained || waited.reason === "interrupted")
120
+ throw new ReleaseError("interrupted", "the release was interrupted while waiting for running turns; admission resumed, nothing deployed");
121
+ return { drainMs: Date.now() - started, kind: "timeout" };
122
+ }
123
+ catch (error) {
124
+ if (error instanceof ReleaseError && (error.reason === "interrupted" || error.reason === "resume-failed"))
125
+ throw error;
126
+ await resumeOrThrow(request, deps, paths, target);
127
+ throw error instanceof ReleaseError ? error : new ReleaseError("drain-failed", error.message);
128
+ }
129
+ };
130
+ /** Resumes a container this release drained, keeping the marker if that fails. */
131
+ export const resumeDrained = async (request, deps, paths, unit) => resumeOrThrow(request, deps, paths, controlTargetFor(request, unit.id, unit.imageId));
132
+ const resumeOrThrow = async (request, deps, paths, target) => {
133
+ try {
134
+ await deps.requestResume(target);
135
+ }
136
+ catch (error) {
137
+ throw new ReleaseError("resume-failed", `admission could not be resumed after abandoning the release; the organization is refusing new work: ${error.message}`);
138
+ }
139
+ await clearDrainMarker(paths);
140
+ request.log("release: admission resumed");
141
+ };
142
+ /**
143
+ * After a failed deploy, whatever container now holds the name is either the
144
+ * restored previous one (restarted, so it admits) or the original, still
145
+ * drained because the deploy failed before touching it. Resume either way.
146
+ */
147
+ export const resumeAfterFailedDeploy = async (request, deps, paths, containerName) => {
148
+ let unit;
149
+ try {
150
+ unit = await deps.inspectUnit(request, containerName);
151
+ }
152
+ catch (error) {
153
+ // Not "absent": the marker stays, so the next run resumes it.
154
+ throw new ReleaseError("resume-failed", `the deploy failed and the container cannot be inspected to resume admission: ${error.message}`);
155
+ }
156
+ if (unit === null || !unit.running) {
157
+ await clearDrainMarker(paths);
158
+ return;
159
+ }
160
+ await resumeOrThrow(request, deps, paths, controlTargetFor(request, unit.id, unit.imageId));
161
+ };
@@ -0,0 +1,11 @@
1
+ export * from "./drainControl.js";
2
+ export * from "./drainPhase.js";
3
+ export * from "./ledger.js";
4
+ export * from "./notify.js";
5
+ export * from "./pending.js";
6
+ export * from "./postDeploy.js";
7
+ export * from "./releaseDefaults.js";
8
+ export * from "./releaseDocker.js";
9
+ export * from "./releaseTypes.js";
10
+ export * from "./runRelease.js";
11
+ export * from "./types.js";
@@ -0,0 +1,11 @@
1
+ export * from "./drainControl.js";
2
+ export * from "./drainPhase.js";
3
+ export * from "./ledger.js";
4
+ export * from "./notify.js";
5
+ export * from "./pending.js";
6
+ export * from "./postDeploy.js";
7
+ export * from "./releaseDefaults.js";
8
+ export * from "./releaseDocker.js";
9
+ export * from "./releaseTypes.js";
10
+ export * from "./runRelease.js";
11
+ export * from "./types.js";
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ import { type PidLockHooks } from "../deployment/index.js";
3
+ export declare const RELEASE_LEDGER_VERSION: "spawnfile.release-ledger.v1";
4
+ export declare const RELEASE_LOG_VERSION: "spawnfile.release-log.v1";
5
+ declare const timings: z.ZodObject<{
6
+ build_ms: z.ZodNullable<z.ZodNumber>;
7
+ compile_ms: z.ZodNumber;
8
+ deploy_ms: z.ZodNullable<z.ZodNumber>;
9
+ drain_ms: z.ZodNullable<z.ZodNumber>;
10
+ total_ms: z.ZodNumber;
11
+ }, z.core.$strict>;
12
+ /** What is running, as the last successful release recorded it. */
13
+ export declare const releaseLedgerSchema: z.ZodObject<{
14
+ compile_fingerprint: z.ZodString;
15
+ deployment: z.ZodString;
16
+ identity: z.ZodString;
17
+ image_id: z.ZodString;
18
+ image_tag: z.ZodString;
19
+ previous_image_tag: z.ZodNullable<z.ZodString>;
20
+ released_at: z.ZodString;
21
+ timings: z.ZodObject<{
22
+ build_ms: z.ZodNullable<z.ZodNumber>;
23
+ compile_ms: z.ZodNumber;
24
+ deploy_ms: z.ZodNullable<z.ZodNumber>;
25
+ drain_ms: z.ZodNullable<z.ZodNumber>;
26
+ total_ms: z.ZodNumber;
27
+ }, z.core.$strict>;
28
+ version: z.ZodLiteral<"spawnfile.release-ledger.v1">;
29
+ }, z.core.$strict>;
30
+ export type ReleaseLedger = z.infer<typeof releaseLedgerSchema>;
31
+ export interface ReleaseLogEntry {
32
+ at: string;
33
+ deployment: string;
34
+ identity: string | null;
35
+ image_tag?: string;
36
+ message?: string;
37
+ notified?: {
38
+ channel: "command" | "webhook" | "none";
39
+ delivered: boolean;
40
+ error?: string;
41
+ };
42
+ outcome: "deferred" | "failed" | "notified" | "released";
43
+ reason?: string;
44
+ timings?: z.infer<typeof timings>;
45
+ version: typeof RELEASE_LOG_VERSION;
46
+ }
47
+ export interface ReleasePaths {
48
+ directory: string;
49
+ drainMarker: string;
50
+ ledger: string;
51
+ lock: string;
52
+ log: string;
53
+ pending: string;
54
+ /** Present from just before a post-deploy command runs until the ledger records its success. */
55
+ postDeploy: string;
56
+ }
57
+ export declare const resolveReleasePaths: (deployment: string, root?: string) => ReleasePaths;
58
+ export declare const ensureReleaseDirectory: (paths: ReleasePaths) => Promise<void>;
59
+ /**
60
+ * A missing ledger means nothing has been released into this deployment yet,
61
+ * which is a full release. A ledger that exists and cannot be read means this
62
+ * command does not know what is running, and it must not deploy: it could not
63
+ * write the record the next run depends on either. Unreadable is a refusal,
64
+ * never an assumed-stale.
65
+ */
66
+ export declare const readReleaseLedger: (file: string) => Promise<ReleaseLedger | null>;
67
+ /** Anything but "definitely absent" counts as present: an unknown marker never reads as done. */
68
+ export declare const postDeployPending: (file: string) => Promise<boolean>;
69
+ /** Same-directory temp file + rename, so a reader sees the old record or the new one. */
70
+ export declare const writeJsonAtomic: (file: string, value: unknown) => Promise<void>;
71
+ export declare const writeReleaseLedger: (file: string, ledger: ReleaseLedger) => Promise<void>;
72
+ export declare const appendReleaseLog: (file: string, entry: Omit<ReleaseLogEntry, "version">) => Promise<void>;
73
+ /** One release per deployment at a time; see `acquirePidLock` for the guarantees and the residual. */
74
+ export declare const acquireReleaseLock: (paths: ReleasePaths, hooks?: PidLockHooks) => Promise<() => Promise<void>>;
75
+ export {};
@@ -0,0 +1,111 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { appendFile, chmod, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { z } from "zod";
5
+ import { resolveSpawnfileHome } from "../auth/index.js";
6
+ import { acquirePidLock, normalizeDeploymentName, PidLockBusyError } from "../deployment/index.js";
7
+ import { ReleaseError } from "./types.js";
8
+ export const RELEASE_LEDGER_VERSION = "spawnfile.release-ledger.v1";
9
+ export const RELEASE_LOG_VERSION = "spawnfile.release-log.v1";
10
+ const digest = z.string().regex(/^sha256:[a-f0-9]{64}$/u);
11
+ const timings = z.object({
12
+ build_ms: z.number().nonnegative().nullable(),
13
+ compile_ms: z.number().nonnegative(),
14
+ deploy_ms: z.number().nonnegative().nullable(),
15
+ drain_ms: z.number().nonnegative().nullable(),
16
+ total_ms: z.number().nonnegative()
17
+ }).strict();
18
+ /** What is running, as the last successful release recorded it. */
19
+ export const releaseLedgerSchema = z.object({
20
+ compile_fingerprint: z.string().min(1),
21
+ deployment: z.string().min(1),
22
+ identity: digest,
23
+ image_id: z.string().min(1),
24
+ image_tag: z.string().min(1),
25
+ previous_image_tag: z.string().min(1).nullable(),
26
+ released_at: z.string().min(1),
27
+ timings,
28
+ version: z.literal(RELEASE_LEDGER_VERSION)
29
+ }).strict();
30
+ export const resolveReleasePaths = (deployment, root) => {
31
+ const directory = path.join(root ?? path.join(resolveSpawnfileHome(), "releases"), normalizeDeploymentName(deployment));
32
+ return {
33
+ directory,
34
+ drainMarker: path.join(directory, "drain.json"),
35
+ ledger: path.join(directory, "ledger.json"),
36
+ lock: path.join(directory, ".lock"),
37
+ log: path.join(directory, "log.jsonl"),
38
+ pending: path.join(directory, "pending.json"),
39
+ postDeploy: path.join(directory, "post-deploy.json")
40
+ };
41
+ };
42
+ export const ensureReleaseDirectory = async (paths) => {
43
+ await mkdir(paths.directory, { mode: 0o700, recursive: true });
44
+ await chmod(paths.directory, 0o700);
45
+ };
46
+ /**
47
+ * A missing ledger means nothing has been released into this deployment yet,
48
+ * which is a full release. A ledger that exists and cannot be read means this
49
+ * command does not know what is running, and it must not deploy: it could not
50
+ * write the record the next run depends on either. Unreadable is a refusal,
51
+ * never an assumed-stale.
52
+ */
53
+ export const readReleaseLedger = async (file) => {
54
+ let source;
55
+ try {
56
+ source = await readFile(file, "utf8");
57
+ }
58
+ catch (error) {
59
+ if (error.code === "ENOENT")
60
+ return null;
61
+ throw new ReleaseError("blocked", `cannot read the release ledger ${file}: ${error.message}`);
62
+ }
63
+ try {
64
+ return releaseLedgerSchema.parse(JSON.parse(source));
65
+ }
66
+ catch {
67
+ throw new ReleaseError("blocked", `the release ledger ${file} is not a ${RELEASE_LEDGER_VERSION} record; refusing to release against a ledger this command cannot read`);
68
+ }
69
+ };
70
+ /** Anything but "definitely absent" counts as present: an unknown marker never reads as done. */
71
+ export const postDeployPending = async (file) => {
72
+ try {
73
+ await stat(file);
74
+ return true;
75
+ }
76
+ catch (error) {
77
+ return error.code !== "ENOENT";
78
+ }
79
+ };
80
+ /** Same-directory temp file + rename, so a reader sees the old record or the new one. */
81
+ export const writeJsonAtomic = async (file, value) => {
82
+ const scratch = path.join(path.dirname(file), `.${path.basename(file)}.${process.pid}.${randomUUID()}.tmp`);
83
+ try {
84
+ await writeFile(scratch, `${JSON.stringify(value, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
85
+ await rename(scratch, file);
86
+ }
87
+ catch (error) {
88
+ await rm(scratch, { force: true }).catch(() => undefined);
89
+ throw error;
90
+ }
91
+ };
92
+ export const writeReleaseLedger = async (file, ledger) => {
93
+ await writeJsonAtomic(file, releaseLedgerSchema.parse(ledger));
94
+ };
95
+ export const appendReleaseLog = async (file, entry) => {
96
+ await appendFile(file, `${JSON.stringify({ ...entry, version: RELEASE_LOG_VERSION })}\n`, { encoding: "utf8", mode: 0o600 });
97
+ };
98
+ /** One release per deployment at a time; see `acquirePidLock` for the guarantees and the residual. */
99
+ export const acquireReleaseLock = async (paths, hooks = {}) => {
100
+ try {
101
+ return await acquirePidLock(paths.lock, hooks);
102
+ }
103
+ catch (error) {
104
+ if (error instanceof PidLockBusyError) {
105
+ throw new ReleaseError("blocked", error.ownerPid === null
106
+ ? "another release of this deployment took the lock first"
107
+ : `another release of this deployment is running (pid ${error.ownerPid})`);
108
+ }
109
+ throw error;
110
+ }
111
+ };
@@ -0,0 +1,58 @@
1
+ import type { ReleaseFailureReason } from "./types.js";
2
+ export declare const RELEASE_NOTIFICATION_VERSION: "spawnfile.release-notification.v1";
3
+ export type NotifierConfig = {
4
+ kind: "command";
5
+ command: string;
6
+ } | {
7
+ kind: "none";
8
+ } | {
9
+ kind: "webhook";
10
+ urlEnv: string;
11
+ };
12
+ export interface ReleaseNotification {
13
+ at: string;
14
+ deployment: string;
15
+ host: string;
16
+ identity: string | null;
17
+ message: string;
18
+ reason: ReleaseFailureReason;
19
+ version: typeof RELEASE_NOTIFICATION_VERSION;
20
+ }
21
+ export interface NotifyResult {
22
+ channel: NotifierConfig["kind"];
23
+ delivered: boolean;
24
+ error?: string;
25
+ }
26
+ /**
27
+ * A notification says what broke, not where the box keeps things: anything
28
+ * path-shaped becomes `<path>` and the text is capped. The full detail stays
29
+ * in the release log on the host.
30
+ */
31
+ export declare const shortReason: (message: string) => string;
32
+ export declare const createNotification: (input: {
33
+ deployment: string;
34
+ identity: string | null;
35
+ message: string;
36
+ now?: Date;
37
+ reason: ReleaseFailureReason;
38
+ }) => ReleaseNotification;
39
+ /** Parses CLI declarations; at most one channel. */
40
+ export declare const resolveNotifierConfig: (options: {
41
+ notifyCommand?: string;
42
+ notifyWebhookEnv?: string;
43
+ }) => NotifierConfig;
44
+ export declare const resolveWebhookUrl: (env: NodeJS.ProcessEnv, name: string) => URL;
45
+ export interface NotifyDependencies {
46
+ attempts?: number;
47
+ env?: NodeJS.ProcessEnv;
48
+ fetchImpl?: typeof fetch;
49
+ runCommand?: (command: string, input: string, env: NodeJS.ProcessEnv, timeoutMs: number) => Promise<number | null>;
50
+ sleep?: (ms: number) => Promise<void>;
51
+ timeoutMs?: number;
52
+ }
53
+ /**
54
+ * Never throws: a notifier that crashed the release reporting the failure
55
+ * would be worse than none. The caller records the result in the release log,
56
+ * so an undelivered notification still leaves its text on disk.
57
+ */
58
+ export declare const sendNotification: (config: NotifierConfig, notification: ReleaseNotification, deps?: NotifyDependencies) => Promise<NotifyResult>;
@@ -0,0 +1,126 @@
1
+ import { spawn } from "node:child_process";
2
+ import { hostname } from "node:os";
3
+ import path from "node:path";
4
+ export const RELEASE_NOTIFICATION_VERSION = "spawnfile.release-notification.v1";
5
+ const MAX_MESSAGE_CHARS = 500;
6
+ const PATHLIKE = /(?:\/[A-Za-z0-9._@-]+){2,}\/?/gu;
7
+ /**
8
+ * A notification says what broke, not where the box keeps things: anything
9
+ * path-shaped becomes `<path>` and the text is capped. The full detail stays
10
+ * in the release log on the host.
11
+ */
12
+ export const shortReason = (message) => {
13
+ const scrubbed = message.replace(PATHLIKE, "<path>").replace(/\s+/gu, " ").trim();
14
+ return scrubbed.length > MAX_MESSAGE_CHARS ? `${scrubbed.slice(0, MAX_MESSAGE_CHARS - 1)}…` : scrubbed;
15
+ };
16
+ export const createNotification = (input) => ({
17
+ at: (input.now ?? new Date()).toISOString(),
18
+ deployment: input.deployment,
19
+ host: hostname(),
20
+ identity: input.identity,
21
+ message: shortReason(input.message),
22
+ reason: input.reason,
23
+ version: RELEASE_NOTIFICATION_VERSION
24
+ });
25
+ /** Parses CLI declarations; at most one channel. */
26
+ export const resolveNotifierConfig = (options) => {
27
+ if (options.notifyCommand !== undefined && options.notifyWebhookEnv !== undefined) {
28
+ throw new Error("declare one notifier: --notify-command or --notify-webhook-env, not both");
29
+ }
30
+ if (options.notifyCommand !== undefined) {
31
+ if (!path.isAbsolute(options.notifyCommand))
32
+ throw new Error("--notify-command must be an absolute path to an executable");
33
+ return { command: options.notifyCommand, kind: "command" };
34
+ }
35
+ if (options.notifyWebhookEnv !== undefined) {
36
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(options.notifyWebhookEnv))
37
+ throw new Error("--notify-webhook-env must name an environment variable");
38
+ return { kind: "webhook", urlEnv: options.notifyWebhookEnv };
39
+ }
40
+ return { kind: "none" };
41
+ };
42
+ const LOOPBACK = new Set(["127.0.0.1", "localhost", "[::1]"]);
43
+ export const resolveWebhookUrl = (env, name) => {
44
+ const raw = env[name];
45
+ if (!raw)
46
+ throw new Error(`${name} is not set, so the webhook notifier has no URL`);
47
+ let url;
48
+ try {
49
+ url = new URL(raw);
50
+ }
51
+ catch {
52
+ throw new Error(`${name} is not a URL`);
53
+ }
54
+ if (url.protocol !== "https:" && !(url.protocol === "http:" && LOOPBACK.has(url.hostname))) {
55
+ throw new Error(`${name} must be an https URL (plain http only for loopback)`);
56
+ }
57
+ return url;
58
+ };
59
+ const runNotifierCommand = (command, input, env, timeoutMs) => new Promise((resolve, reject) => {
60
+ const child = spawn(command, [], { env, stdio: ["pipe", "ignore", "ignore"] });
61
+ const timer = setTimeout(() => child.kill("SIGKILL"), timeoutMs);
62
+ child.once("error", (error) => { clearTimeout(timer); reject(error); });
63
+ child.once("close", (code) => { clearTimeout(timer); resolve(code); });
64
+ child.stdin.on("error", () => undefined);
65
+ child.stdin.end(input);
66
+ });
67
+ const notifyCommand = async (command, notification, deps) => {
68
+ const env = {
69
+ ...(deps.env ?? process.env),
70
+ SPAWNFILE_RELEASE_DEPLOYMENT: notification.deployment,
71
+ SPAWNFILE_RELEASE_IDENTITY: notification.identity ?? "",
72
+ SPAWNFILE_RELEASE_MESSAGE: notification.message,
73
+ SPAWNFILE_RELEASE_REASON: notification.reason
74
+ };
75
+ try {
76
+ const code = await (deps.runCommand ?? runNotifierCommand)(command, `${JSON.stringify(notification)}\n`, env, deps.timeoutMs ?? 60_000);
77
+ return code === 0 ? { channel: "command", delivered: true } : { channel: "command", delivered: false, error: `notifier exited ${code ?? "by signal"}` };
78
+ }
79
+ catch (error) {
80
+ return { channel: "command", delivered: false, error: `notifier could not run: ${error.message}` };
81
+ }
82
+ };
83
+ const notifyWebhook = async (urlEnv, notification, deps) => {
84
+ let url;
85
+ try {
86
+ url = resolveWebhookUrl(deps.env ?? process.env, urlEnv);
87
+ }
88
+ catch (error) {
89
+ return { channel: "webhook", delivered: false, error: error.message };
90
+ }
91
+ const attempts = deps.attempts ?? 3;
92
+ const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
93
+ const errors = [];
94
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
95
+ try {
96
+ const response = await (deps.fetchImpl ?? fetch)(url, {
97
+ body: JSON.stringify(notification),
98
+ headers: { "content-type": "application/json" },
99
+ method: "POST",
100
+ redirect: "error",
101
+ signal: AbortSignal.timeout(deps.timeoutMs ?? 15_000)
102
+ });
103
+ if (response.ok)
104
+ return { channel: "webhook", delivered: true };
105
+ errors.push(`HTTP ${response.status}`);
106
+ }
107
+ catch (error) {
108
+ errors.push(error.name === "TimeoutError" ? "timed out" : "request failed");
109
+ }
110
+ if (attempt < attempts)
111
+ await sleep(attempt * 2_000);
112
+ }
113
+ return { channel: "webhook", delivered: false, error: errors.join("; ") };
114
+ };
115
+ /**
116
+ * Never throws: a notifier that crashed the release reporting the failure
117
+ * would be worse than none. The caller records the result in the release log,
118
+ * so an undelivered notification still leaves its text on disk.
119
+ */
120
+ export const sendNotification = async (config, notification, deps = {}) => {
121
+ if (config.kind === "command")
122
+ return notifyCommand(config.command, notification, deps);
123
+ if (config.kind === "webhook")
124
+ return notifyWebhook(config.urlEnv, notification, deps);
125
+ return { channel: "none", delivered: false, error: "no notifier declared" };
126
+ };
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ export declare const RELEASE_PENDING_VERSION: "spawnfile.release-pending.v1";
3
+ declare const pendingSchema: z.ZodObject<{
4
+ identity: z.ZodString;
5
+ notified_at: z.ZodNullable<z.ZodString>;
6
+ since: z.ZodString;
7
+ version: z.ZodLiteral<"spawnfile.release-pending.v1">;
8
+ }, z.core.$strict>;
9
+ export type ReleasePending = z.infer<typeof pendingSchema>;
10
+ export interface DeferralDecision {
11
+ ageMs: number;
12
+ /** True exactly once per pending identity after the threshold, or whenever tracking is broken. */
13
+ notify: boolean;
14
+ pending: ReleasePending;
15
+ /** Set when the record that holds "waiting since" could not be read or written. */
16
+ trackingBroken: string | null;
17
+ }
18
+ /**
19
+ * A drain that times out is "not yet", not "broken": on a timer that runs
20
+ * hourly, notifying on every busy hour teaches whoever receives it to ignore
21
+ * the channel. It must not hide forever either, so the instant this identity
22
+ * first deferred is kept beside the ledger and a person hears about it once
23
+ * it has waited longer than `notifyAfterMs`.
24
+ *
25
+ * The record is the only thing that turns "forever" into one notification,
26
+ * so a record that cannot be read or written is itself notified immediately,
27
+ * never silently restarted.
28
+ */
29
+ export declare const recordDeferral: (file: string, identity: string, options: {
30
+ notifyAfterMs: number;
31
+ now?: Date;
32
+ }) => Promise<DeferralDecision>;
33
+ export declare const markDeferralNotified: (file: string, pending: ReleasePending, now?: Date) => Promise<void>;
34
+ export declare const clearDeferral: (file: string) => Promise<void>;
35
+ export {};
@@ -0,0 +1,60 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import { z } from "zod";
3
+ import { writeJsonAtomic } from "./ledger.js";
4
+ export const RELEASE_PENDING_VERSION = "spawnfile.release-pending.v1";
5
+ const pendingSchema = z.object({
6
+ identity: z.string().min(1),
7
+ notified_at: z.string().min(1).nullable(),
8
+ since: z.string().min(1),
9
+ version: z.literal(RELEASE_PENDING_VERSION)
10
+ }).strict();
11
+ /**
12
+ * A drain that times out is "not yet", not "broken": on a timer that runs
13
+ * hourly, notifying on every busy hour teaches whoever receives it to ignore
14
+ * the channel. It must not hide forever either, so the instant this identity
15
+ * first deferred is kept beside the ledger and a person hears about it once
16
+ * it has waited longer than `notifyAfterMs`.
17
+ *
18
+ * The record is the only thing that turns "forever" into one notification,
19
+ * so a record that cannot be read or written is itself notified immediately,
20
+ * never silently restarted.
21
+ */
22
+ export const recordDeferral = async (file, identity, options) => {
23
+ const now = options.now ?? new Date();
24
+ let previous = null;
25
+ let trackingBroken = null;
26
+ try {
27
+ previous = pendingSchema.parse(JSON.parse(await readFile(file, "utf8")));
28
+ }
29
+ catch (error) {
30
+ if (error.code !== "ENOENT") {
31
+ trackingBroken = `the pending-release record ${file} cannot be read`;
32
+ }
33
+ }
34
+ const pending = previous?.identity === identity
35
+ ? { ...previous }
36
+ : { identity, notified_at: null, since: now.toISOString(), version: RELEASE_PENDING_VERSION };
37
+ const since = Date.parse(pending.since);
38
+ const notifiedAt = pending.notified_at === null ? 0 : Date.parse(pending.notified_at);
39
+ if (!Number.isFinite(since) || !Number.isFinite(notifiedAt)) {
40
+ // A record that parses but holds no usable instant is as broken as one that does not parse.
41
+ trackingBroken = `the pending-release record ${file} holds an unreadable timestamp`;
42
+ }
43
+ const ageMs = Number.isFinite(since) ? Math.max(0, now.getTime() - since) : 0;
44
+ // `notified_at` is set only once a notification was actually delivered
45
+ // (markDeferralNotified), so a failed or crashed delivery is retried next run.
46
+ const escalate = ageMs >= options.notifyAfterMs && pending.notified_at === null;
47
+ try {
48
+ await writeJsonAtomic(file, pending);
49
+ }
50
+ catch {
51
+ trackingBroken = `the pending-release record ${file} could not be written`;
52
+ }
53
+ return { ageMs, notify: escalate || trackingBroken !== null, pending, trackingBroken };
54
+ };
55
+ export const markDeferralNotified = async (file, pending, now = new Date()) => {
56
+ await writeJsonAtomic(file, { ...pending, notified_at: now.toISOString() });
57
+ };
58
+ export const clearDeferral = async (file) => {
59
+ await rm(file, { force: true });
60
+ };