spawnfile 0.1.33 → 0.1.35

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 (606) hide show
  1. package/README.md +1 -1
  2. package/dist/audit/readAudit.d.ts +3 -3
  3. package/dist/auth/profileStore.d.ts +3 -1
  4. package/dist/auth/profileStore.js +31 -30
  5. package/dist/auth/trainingAuth.d.ts +2 -5
  6. package/dist/auth/types.d.ts +16 -0
  7. package/dist/cli/authCommands.d.ts +1 -1
  8. package/dist/cli/authCommands.js +21 -1
  9. package/dist/cli/devCommands.d.ts +1 -1
  10. package/dist/cli/devCommands.js +0 -66
  11. package/dist/cli/runCli.d.ts +3 -4
  12. package/dist/cli/runCli.js +4 -3
  13. package/dist/cli/trainCommand.js +9 -15
  14. package/dist/cli/trainingBooted.d.ts +9 -0
  15. package/dist/cli/trainingBooted.js +45 -0
  16. package/dist/cli/trainingExecution.d.ts +4 -7
  17. package/dist/cli/trainingExecution.js +4 -32
  18. package/dist/compiler/containerArtifacts.js +0 -5
  19. package/dist/compiler/containerBackedMountRender.js +5 -1
  20. package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
  21. package/dist/compiler/containerDaimonBrokerRender.js +19 -90
  22. package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
  23. package/dist/compiler/containerDaimonGatewayRender.js +161 -0
  24. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
  25. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
  26. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
  27. package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
  28. package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
  29. package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
  30. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
  31. package/dist/compiler/containerDaimonUidEntrypointRender.js +29 -47
  32. package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
  33. package/dist/compiler/memoryArtifacts.js +0 -1
  34. package/dist/compiler/moltnetArtifacts.js +1 -17
  35. package/dist/compiler/moltnetClientConfig.js +1 -1
  36. package/dist/compiler/moltnetRuntimeConfig.js +0 -10
  37. package/dist/compiler/runProject.d.ts +3 -0
  38. package/dist/compiler/runProject.js +12 -5
  39. package/dist/compiler/runProjectAuth.js +6 -18
  40. package/dist/compiler/training/contract.d.ts +0 -2
  41. package/dist/compiler/training/contract.js +0 -2
  42. package/dist/compiler/training/execution.d.ts +1 -128
  43. package/dist/compiler/training/execution.js +7 -68
  44. package/dist/compiler/training/index.d.ts +0 -8
  45. package/dist/compiler/training/index.js +0 -7
  46. package/dist/compiler/training/output.d.ts +1 -0
  47. package/dist/compiler/training/output.js +1 -1
  48. package/dist/compiler/training/rewind/contract.d.ts +6 -6
  49. package/dist/compiler/training/trial/boot.d.ts +72 -0
  50. package/dist/compiler/training/trial/boot.js +225 -0
  51. package/dist/compiler/training/trial/docker.d.ts +10 -0
  52. package/dist/compiler/training/trial/docker.js +22 -0
  53. package/dist/compiler/training/trial/gateway.d.ts +47 -0
  54. package/dist/compiler/training/trial/gateway.js +113 -0
  55. package/dist/compiler/training/trial/homeLogin.d.ts +31 -0
  56. package/dist/compiler/training/trial/homeLogin.js +69 -0
  57. package/dist/compiler/training/trial/index.d.ts +8 -0
  58. package/dist/compiler/training/trial/index.js +8 -0
  59. package/dist/compiler/training/trial/judge.d.ts +15 -0
  60. package/dist/compiler/training/trial/judge.js +42 -0
  61. package/dist/compiler/training/trial/launcher.d.ts +47 -0
  62. package/dist/compiler/training/trial/launcher.js +193 -0
  63. package/dist/compiler/training/trial/login.d.ts +35 -0
  64. package/dist/compiler/training/trial/login.js +85 -0
  65. package/dist/compiler/training/trial/project.d.ts +11 -0
  66. package/dist/compiler/training/trial/project.js +31 -0
  67. package/dist/compiler/training/trial/realmTurns.d.ts +20 -0
  68. package/dist/compiler/training/trial/realmTurns.js +69 -0
  69. package/dist/compiler/upReceipt.d.ts +2 -17
  70. package/dist/compiler/upReceipt.js +2 -17
  71. package/dist/deployment/artifactsExportPlan.js +2 -18
  72. package/dist/deployment/privateArtifactsExport.js +1 -1
  73. package/dist/dev/docker.d.ts +0 -5
  74. package/dist/dev/docker.js +0 -46
  75. package/dist/dev/index.d.ts +0 -1
  76. package/dist/dev/index.js +0 -1
  77. package/dist/dev/project.d.ts +0 -16
  78. package/dist/dev/project.js +1 -128
  79. package/dist/distribution/distributionReportSchema.js +1 -1
  80. package/dist/distribution/imageRuntimeAuth.js +3 -2
  81. package/dist/manifest/renderSpawnfile.js +2 -1
  82. package/dist/release/drainControl.d.ts +5 -19
  83. package/dist/release/drainControl.js +12 -67
  84. package/dist/report/types.d.ts +3 -6
  85. package/dist/runtime/common.d.ts +1 -1
  86. package/dist/runtime/common.js +1 -1
  87. package/dist/runtime/container.d.ts +2 -2
  88. package/dist/runtime/container.js +1 -39
  89. package/dist/runtime/daimon/config.js +8 -14
  90. package/dist/runtime/daimon/contractManifest.js +0 -1
  91. package/dist/runtime/daimon/contractManifestSchema.js +0 -1
  92. package/dist/runtime/daimon/control.d.ts +31 -0
  93. package/dist/runtime/daimon/control.js +83 -0
  94. package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
  95. package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
  96. package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
  97. package/dist/runtime/daimon/engines.js +0 -1
  98. package/dist/runtime/daimon/gateway.d.ts +62 -0
  99. package/dist/runtime/daimon/gateway.js +77 -0
  100. package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
  101. package/dist/runtime/daimon/grokWorkerContract.js +1 -13
  102. package/dist/runtime/daimon/index.d.ts +2 -0
  103. package/dist/runtime/daimon/index.js +2 -1
  104. package/dist/runtime/daimon/memory.js +1 -1
  105. package/dist/runtime/daimon/packageName.js +0 -1
  106. package/dist/runtime/daimon/runAuth.js +15 -4
  107. package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
  108. package/dist/runtime/daimon/runtimeIdentity.js +2 -0
  109. package/dist/runtime/daimon/subscriptionRealms.d.ts +27 -3
  110. package/dist/runtime/daimon/subscriptionRealms.js +35 -13
  111. package/dist/runtime/daimon/testHelpers.d.ts +2 -0
  112. package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
  113. package/dist/runtime/daimon/training/booted/adapter.d.ts +50 -0
  114. package/dist/runtime/daimon/training/booted/adapter.js +60 -0
  115. package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
  116. package/dist/runtime/daimon/training/booted/index.d.ts +4 -0
  117. package/dist/runtime/daimon/training/booted/index.js +3 -0
  118. package/dist/runtime/daimon/training/booted/index.js.map +1 -0
  119. package/dist/runtime/daimon/training/booted/judge.d.ts +39 -0
  120. package/dist/runtime/daimon/training/booted/judge.js +122 -0
  121. package/dist/runtime/daimon/training/booted/judge.js.map +1 -0
  122. package/dist/runtime/daimon/training/index.d.ts +5 -0
  123. package/dist/runtime/daimon/training/index.js +8 -4
  124. package/dist/runtime/daimon/training/index.js.map +1 -1
  125. package/dist/runtime/daimon/wakeMoments.js +0 -1
  126. package/dist/runtime/install.js +0 -21
  127. package/dist/runtime/registry.js +0 -2
  128. package/dist/runtime/trainingGraderProviders.js +10 -4
  129. package/dist/runtime/trainingProviders.d.ts +5 -3
  130. package/dist/runtime/trainingProviders.js +21 -24
  131. package/dist/runtime/trainingSubjects.d.ts +0 -121
  132. package/dist/runtime/trainingSubjects.js +2 -13
  133. package/dist/runtime/types.d.ts +1 -8
  134. package/dist/runtime/usageRequestLedger.d.ts +2 -0
  135. package/dist/runtime/usageRequestLedger.js +3 -1
  136. package/dist/shared/errors.js +0 -1
  137. package/dist/shared/trainingLegacy/trainingLegacyHashDomains.d.ts +1 -0
  138. package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js +1 -0
  139. package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js.map +1 -1
  140. package/dist/status/lifecycleProbes.js +3 -6
  141. package/dist/status/moltnetWiringProbes.js +1 -17
  142. package/dist/training/subjects/index.d.ts +0 -1
  143. package/dist/training/subjects/index.js +0 -1
  144. package/dist/training/subjects/index.js.map +1 -1
  145. package/examples/README.md +0 -1
  146. package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
  147. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
  148. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
  149. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
  150. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
  151. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
  152. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
  153. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
  154. package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
  155. package/package.json +4 -13
  156. package/runtimes.yaml +5 -15
  157. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
  158. package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
  159. package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
  160. package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
  161. package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
  162. package/dist/compiler/training/broker/clockProbe.js +0 -27
  163. package/dist/compiler/training/broker/declaration.d.ts +0 -54
  164. package/dist/compiler/training/broker/declaration.js +0 -70
  165. package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
  166. package/dist/compiler/training/broker/entrypoint.js +0 -124
  167. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
  168. package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
  169. package/dist/compiler/training/broker/index.d.ts +0 -12
  170. package/dist/compiler/training/broker/index.js +0 -12
  171. package/dist/compiler/training/broker/main.d.ts +0 -2
  172. package/dist/compiler/training/broker/main.js +0 -14
  173. package/dist/compiler/training/broker/paths.d.ts +0 -236
  174. package/dist/compiler/training/broker/paths.js +0 -249
  175. package/dist/compiler/training/broker/processes.d.ts +0 -51
  176. package/dist/compiler/training/broker/processes.js +0 -102
  177. package/dist/compiler/training/broker/projection.d.ts +0 -61
  178. package/dist/compiler/training/broker/projection.js +0 -109
  179. package/dist/compiler/training/broker/provisioning.d.ts +0 -78
  180. package/dist/compiler/training/broker/provisioning.js +0 -231
  181. package/dist/compiler/training/broker/receipt.d.ts +0 -77
  182. package/dist/compiler/training/broker/receipt.js +0 -110
  183. package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
  184. package/dist/compiler/training/broker/recycleClient.js +0 -112
  185. package/dist/compiler/training/broker/registration.d.ts +0 -46
  186. package/dist/compiler/training/broker/registration.js +0 -113
  187. package/dist/compiler/training/broker/reset.d.ts +0 -9
  188. package/dist/compiler/training/broker/reset.js +0 -71
  189. package/dist/compiler/training/broker/rootScript.d.ts +0 -32
  190. package/dist/compiler/training/broker/rootScript.js +0 -33
  191. package/dist/compiler/training/broker/runtime.d.ts +0 -22
  192. package/dist/compiler/training/broker/runtime.js +0 -128
  193. package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
  194. package/dist/compiler/training/broker/seccompRoutes.js +0 -36
  195. package/dist/compiler/training/broker/supervisor.d.ts +0 -108
  196. package/dist/compiler/training/broker/supervisor.js +0 -172
  197. package/dist/compiler/training/broker/taskClock.d.ts +0 -5
  198. package/dist/compiler/training/broker/taskClock.js +0 -41
  199. package/dist/compiler/training/container/contract.d.ts +0 -54
  200. package/dist/compiler/training/container/contract.js +0 -52
  201. package/dist/compiler/training/container/evaluators.d.ts +0 -48
  202. package/dist/compiler/training/container/evaluators.js +0 -50
  203. package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
  204. package/dist/compiler/training/container/grokWriteback.js +0 -26
  205. package/dist/compiler/training/container/index.d.ts +0 -5
  206. package/dist/compiler/training/container/index.js +0 -3
  207. package/dist/compiler/training/container/launch.d.ts +0 -21
  208. package/dist/compiler/training/container/launch.js +0 -280
  209. package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
  210. package/dist/compiler/training/container/nativeSlots.js +0 -13
  211. package/dist/compiler/training/container/outputCopy.d.ts +0 -2
  212. package/dist/compiler/training/container/outputCopy.js +0 -72
  213. package/dist/compiler/training/container/outputVolume.d.ts +0 -28
  214. package/dist/compiler/training/container/outputVolume.js +0 -185
  215. package/dist/compiler/training/container/prepare.d.ts +0 -10
  216. package/dist/compiler/training/container/prepare.js +0 -125
  217. package/dist/compiler/training/container/process.d.ts +0 -14
  218. package/dist/compiler/training/container/process.js +0 -70
  219. package/dist/compiler/training/container/security.d.ts +0 -38
  220. package/dist/compiler/training/container/security.js +0 -68
  221. package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
  222. package/dist/compiler/training/container/subjectIsolation.js +0 -16
  223. package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
  224. package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
  225. package/dist/compiler/training/preparation/broker.d.ts +0 -30
  226. package/dist/compiler/training/preparation/broker.js +0 -68
  227. package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
  228. package/dist/compiler/training/preparation/contextModes.js +0 -38
  229. package/dist/compiler/training/preparation/contract.d.ts +0 -203
  230. package/dist/compiler/training/preparation/contract.js +0 -114
  231. package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
  232. package/dist/compiler/training/preparation/copyAssets.js +0 -8
  233. package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
  234. package/dist/compiler/training/preparation/daimonParent.js +0 -114
  235. package/dist/compiler/training/preparation/files.d.ts +0 -29
  236. package/dist/compiler/training/preparation/files.js +0 -146
  237. package/dist/compiler/training/preparation/image.d.ts +0 -28
  238. package/dist/compiler/training/preparation/image.js +0 -105
  239. package/dist/compiler/training/preparation/index.d.ts +0 -3
  240. package/dist/compiler/training/preparation/index.js +0 -2
  241. package/dist/compiler/training/preparation/inputs.d.ts +0 -24
  242. package/dist/compiler/training/preparation/inputs.js +0 -101
  243. package/dist/compiler/training/preparation/prepare.d.ts +0 -38
  244. package/dist/compiler/training/preparation/prepare.js +0 -224
  245. package/dist/compiler/training/preparation/scratch.d.ts +0 -8
  246. package/dist/compiler/training/preparation/scratch.js +0 -114
  247. package/dist/compiler/training/repair/compatibility.d.ts +0 -11
  248. package/dist/compiler/training/repair/compatibility.js +0 -45
  249. package/dist/compiler/training/repair/contract.d.ts +0 -832
  250. package/dist/compiler/training/repair/contract.js +0 -34
  251. package/dist/compiler/training/repair/index.d.ts +0 -3
  252. package/dist/compiler/training/repair/index.js +0 -3
  253. package/dist/compiler/training/repair/prepare.d.ts +0 -378
  254. package/dist/compiler/training/repair/prepare.js +0 -84
  255. package/dist/compiler/training/repair/witness.d.ts +0 -348
  256. package/dist/compiler/training/repair/witness.js +0 -62
  257. package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
  258. package/dist/compiler/training/subjectDeclaration.js +0 -54
  259. package/dist/compiler/training/subjectLease.d.ts +0 -115
  260. package/dist/compiler/training/subjectLease.js +0 -179
  261. package/dist/dev/activity.d.ts +0 -14
  262. package/dist/dev/activity.js +0 -48
  263. package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
  264. package/dist/runtime/codex-exec/training/adapter.js +0 -101
  265. package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
  266. package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
  267. package/dist/runtime/codex-exec/training/environment.js +0 -26
  268. package/dist/runtime/codex-exec/training/environment.js.map +0 -1
  269. package/dist/runtime/codex-exec/training/index.d.ts +0 -2
  270. package/dist/runtime/codex-exec/training/index.js +0 -3
  271. package/dist/runtime/codex-exec/training/index.js.map +0 -1
  272. package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
  273. package/dist/runtime/codex-exec/training/protocol.js +0 -102
  274. package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
  275. package/dist/runtime/codex-exec/training/providers/codex-subscription/index.d.ts +0 -1
  276. package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js +0 -2
  277. package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
  278. package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.d.ts +0 -17
  279. package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js +0 -80
  280. package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
  281. package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.d.ts +0 -12
  282. package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js +0 -125
  283. package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
  284. package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.d.ts +0 -6
  285. package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js +0 -219
  286. package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
  287. package/dist/runtime/daimon/contractManifest.js.map +0 -1
  288. package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
  289. package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
  290. package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
  291. package/dist/runtime/daimon/engines.js.map +0 -1
  292. package/dist/runtime/daimon/index.js.map +0 -1
  293. package/dist/runtime/daimon/packageName.js.map +0 -1
  294. package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
  295. package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
  296. package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
  297. package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
  298. package/dist/runtime/daimon/training/legacy/index.js +0 -3
  299. package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
  300. package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
  301. package/dist/runtime/daimon/training/legacy/public.js +0 -16
  302. package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
  303. package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
  304. package/dist/runtime/daimon/training/native/adapter.js +0 -252
  305. package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
  306. package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
  307. package/dist/runtime/daimon/training/native/admission.js +0 -52
  308. package/dist/runtime/daimon/training/native/admission.js.map +0 -1
  309. package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
  310. package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
  311. package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
  312. package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
  313. package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
  314. package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
  315. package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
  316. package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
  317. package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
  318. package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
  319. package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
  320. package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
  321. package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
  322. package/dist/runtime/daimon/training/native/child/grok.js +0 -47
  323. package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
  324. package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
  325. package/dist/runtime/daimon/training/native/child/index.js +0 -5
  326. package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
  327. package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
  328. package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
  329. package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
  330. package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
  331. package/dist/runtime/daimon/training/native/child/probe.js +0 -11
  332. package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
  333. package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
  334. package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
  335. package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
  336. package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
  337. package/dist/runtime/daimon/training/native/child/types.js +0 -2
  338. package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
  339. package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
  340. package/dist/runtime/daimon/training/native/container/docker.js +0 -105
  341. package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
  342. package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
  343. package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
  344. package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
  345. package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
  346. package/dist/runtime/daimon/training/native/container/index.js +0 -6
  347. package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
  348. package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
  349. package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
  350. package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
  351. package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
  352. package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
  353. package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
  354. package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
  355. package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
  356. package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
  357. package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
  358. package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
  359. package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
  360. package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
  361. package/dist/runtime/daimon/training/native/container/slot.js +0 -58
  362. package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
  363. package/dist/runtime/daimon/training/native/external.d.ts +0 -37
  364. package/dist/runtime/daimon/training/native/external.js +0 -75
  365. package/dist/runtime/daimon/training/native/external.js.map +0 -1
  366. package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
  367. package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
  368. package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
  369. package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
  370. package/dist/runtime/daimon/training/native/grants/index.js +0 -3
  371. package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
  372. package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
  373. package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
  374. package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
  375. package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
  376. package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
  377. package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
  378. package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
  379. package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
  380. package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
  381. package/dist/runtime/daimon/training/native/index.d.ts +0 -38
  382. package/dist/runtime/daimon/training/native/index.js +0 -27
  383. package/dist/runtime/daimon/training/native/index.js.map +0 -1
  384. package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
  385. package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
  386. package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
  387. package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
  388. package/dist/runtime/daimon/training/native/observations.js +0 -217
  389. package/dist/runtime/daimon/training/native/observations.js.map +0 -1
  390. package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
  391. package/dist/runtime/daimon/training/native/outcome.js +0 -37
  392. package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
  393. package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
  394. package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
  395. package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
  396. package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
  397. package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
  398. package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
  399. package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
  400. package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
  401. package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
  402. package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
  403. package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
  404. package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
  405. package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
  406. package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
  407. package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
  408. package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
  409. package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
  410. package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
  411. package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
  412. package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
  413. package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
  414. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
  415. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
  416. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
  417. package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
  418. package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
  419. package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
  420. package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
  421. package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
  422. package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
  423. package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
  424. package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
  425. package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
  426. package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
  427. package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
  428. package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
  429. package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
  430. package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
  431. package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
  432. package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
  433. package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
  434. package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
  435. package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
  436. package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
  437. package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
  438. package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
  439. package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
  440. package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
  441. package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
  442. package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
  443. package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
  444. package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
  445. package/dist/runtime/daimon/training/native/transcript.js +0 -239
  446. package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
  447. package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
  448. package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
  449. package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
  450. package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
  451. package/dist/runtime/daimon/training/native/transport/http.js +0 -81
  452. package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
  453. package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
  454. package/dist/runtime/daimon/training/native/transport/index.js +0 -3
  455. package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
  456. package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
  457. package/dist/runtime/daimon/training/native/transport/types.js +0 -2
  458. package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
  459. package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
  460. package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
  461. package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
  462. package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
  463. package/dist/runtime/daimon/training/native/worker/control.js +0 -266
  464. package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
  465. package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
  466. package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
  467. package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
  468. package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
  469. package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
  470. package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
  471. package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
  472. package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
  473. package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
  474. package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
  475. package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
  476. package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
  477. package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
  478. package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
  479. package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
  480. package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
  481. package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
  482. package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
  483. package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
  484. package/dist/runtime/daimon/training/native/worker/index.js +0 -8
  485. package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
  486. package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
  487. package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
  488. package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
  489. package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
  490. package/dist/runtime/daimon/training/native/worker/public.js +0 -22
  491. package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
  492. package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
  493. package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
  494. package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
  495. package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
  496. package/dist/runtime/daimon/training/native/worker/server.js +0 -102
  497. package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
  498. package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
  499. package/dist/runtime/daimon/training/native/worker/types.js +0 -2
  500. package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
  501. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
  502. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
  503. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
  504. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
  505. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
  506. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
  507. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
  508. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
  509. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
  510. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
  511. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
  512. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
  513. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
  514. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
  515. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
  516. package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
  517. package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
  518. package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
  519. package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
  520. package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
  521. package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
  522. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
  523. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
  524. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
  525. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
  526. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
  527. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
  528. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
  529. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
  530. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
  531. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
  532. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
  533. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
  534. package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
  535. package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
  536. package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
  537. package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
  538. package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
  539. package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
  540. package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +0 -21
  541. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +0 -81
  542. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +0 -1
  543. package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +0 -4
  544. package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -5
  545. package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +0 -1
  546. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +0 -26
  547. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +0 -102
  548. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +0 -1
  549. package/dist/runtime/daimon/training/providers/grok-subscription/provider.d.ts +0 -9
  550. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +0 -38
  551. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +0 -1
  552. package/dist/runtime/daimon/training/public.d.ts +0 -6
  553. package/dist/runtime/daimon/training/public.js +0 -5
  554. package/dist/runtime/daimon/training/public.js.map +0 -1
  555. package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
  556. package/dist/runtime/daimon/training/services/account-lease.js +0 -76
  557. package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
  558. package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
  559. package/dist/runtime/daimon/training/services/freshness.js +0 -19
  560. package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
  561. package/dist/runtime/daimon/training/services/index.d.ts +0 -4
  562. package/dist/runtime/daimon/training/services/index.js +0 -4
  563. package/dist/runtime/daimon/training/services/index.js.map +0 -1
  564. package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
  565. package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
  566. package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
  567. package/dist/runtime/daimon/wakeMoments.js.map +0 -1
  568. package/dist/runtime/pi/adapter.d.ts +0 -3
  569. package/dist/runtime/pi/adapter.js +0 -230
  570. package/dist/runtime/pi/appActivitySource.d.ts +0 -1
  571. package/dist/runtime/pi/appActivitySource.js +0 -199
  572. package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
  573. package/dist/runtime/pi/appAgentConfig.js +0 -264
  574. package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
  575. package/dist/runtime/pi/appCliEnginesSource.js +0 -183
  576. package/dist/runtime/pi/appCliSource.d.ts +0 -1
  577. package/dist/runtime/pi/appCliSource.js +0 -353
  578. package/dist/runtime/pi/appControlSource.d.ts +0 -1
  579. package/dist/runtime/pi/appControlSource.js +0 -390
  580. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
  581. package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
  582. package/dist/runtime/pi/appCoreSource.d.ts +0 -4
  583. package/dist/runtime/pi/appCoreSource.js +0 -244
  584. package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
  585. package/dist/runtime/pi/appPreludeSource.js +0 -192
  586. package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
  587. package/dist/runtime/pi/appScheduleSource.js +0 -84
  588. package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
  589. package/dist/runtime/pi/appScriptedEngine.js +0 -42
  590. package/dist/runtime/pi/appSource.d.ts +0 -4
  591. package/dist/runtime/pi/appSource.js +0 -12
  592. package/dist/runtime/pi/appTemplate.d.ts +0 -14
  593. package/dist/runtime/pi/appTemplate.js +0 -28
  594. package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
  595. package/dist/runtime/pi/appTemplateTypes.js +0 -18
  596. package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
  597. package/dist/runtime/pi/appWakeContextSource.js +0 -398
  598. package/dist/runtime/pi/containerTargets.d.ts +0 -4
  599. package/dist/runtime/pi/containerTargets.js +0 -63
  600. package/dist/runtime/pi/runAuth.d.ts +0 -2
  601. package/dist/runtime/pi/runAuth.js +0 -185
  602. package/dist/runtime/pi/testHelpers.d.ts +0 -2
  603. package/dist/shared/errors.js.map +0 -1
  604. package/dist/training/subjects/environment.d.ts +0 -2
  605. package/dist/training/subjects/environment.js +0 -14
  606. package/dist/training/subjects/environment.js.map +0 -1
@@ -1,280 +0,0 @@
1
- import { getRegisteredRuntime } from '../../../runtime/registry.js';
2
- import { randomUUID } from "node:crypto";
3
- import { chmod, mkdtemp, readFile, realpath, stat, writeFile } from "node:fs/promises";
4
- import path from "node:path";
5
- import { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../../../shared/index.js";
6
- import { parseTrainingBrokerDeclaration } from "../broker/declaration.js";
7
- import { trainingSlotsDocument, TRAINING_SLOTS_FILE } from "../broker/paths.js";
8
- import { assertNotDesktopGrokAuth } from "../broker/entrypoint.js";
9
- import { TRAINING_BROKER_ENTRYPOINT, trainingBrokerMounts, trainingBrokerSecurityArgs, trainingBrokerTmpfsTargets, trainingRunRequestMount } from "./security.js";
10
- import { parseDetachedContainerInspect } from "../../runProjectDocker.js";
11
- import { mapTrainingExecution, trainingExecutionSchema, TRAINING_EXECUTION_FILE, TRAINING_EXECUTION_CAPABILITY_LABEL, TRAINING_EXECUTION_VERSION } from "../execution.js";
12
- import { verifyCanonicalPins } from "../preparation/inputs.js";
13
- import { removeTrainingPreparationScratch } from "../preparation/scratch.js";
14
- import { trainingImageSchema } from "./contract.js";
15
- import { prepareTrainingEvaluators } from "./evaluators.js";
16
- import { prepareTrainingContainer } from "./prepare.js";
17
- import { runTrainingDocker } from "./process.js";
18
- import { repairEnvelopeSchema } from "../repair/contract.js";
19
- import { hashJson } from "../preparation/files.js";
20
- import { parseTrainingMappedPreparation } from "../preparation/contract.js";
21
- import { persistTrainingGrokCredential } from "./grokWriteback.js";
22
- import { nativeTrainingSlotsDocument } from "./nativeSlots.js";
23
- import { createTrainingOutputVolume, trainingOutputVolumeEnabled } from "./outputVolume.js";
24
- import { prepareTrainingCodexAuthority } from '../../../auth/index.js';
25
- import { DAIMON_CODEX_SUBSCRIPTION_REALM } from '../../../runtime/daimon/contractManifest.js';
26
- // The image bakes /run/training/inputs as 0:2000 0750 for brokered worker isolation; the
27
- // non-brokered host-uid evaluator joins that group so it can still traverse its own inputs.
28
- export const TRAINING_INPUTS_GID = 2_000;
29
- const inspectFormat = "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}";
30
- export const launchTrainingContainer = async (options) => {
31
- if (options.signal?.aborted)
32
- return 130;
33
- const image = trainingImageSchema.parse(options.image);
34
- const volumeEnabled = trainingOutputVolumeEnabled();
35
- const uid = process.getuid?.(), gid = process.getgid?.();
36
- if (uid === undefined || gid === undefined || uid === 0)
37
- throw Error("Training requires an explicit non-root local user");
38
- const configBytes = await readFile(options.configPath, "utf8");
39
- if (Buffer.byteLength(configBytes) > 1024 * 1024)
40
- throw Error("Training launch config exceeds 1 MiB");
41
- const raw = JSON.parse(configBytes);
42
- const prepared = await prepareTrainingContainer(options.execution
43
- ? { ...raw, output: { ...raw.output, source: options.execution.output } } : raw, options.context, options.args, { createOutput: options.execution !== undefined && !options.args.includes("--resume") });
44
- const execution = options.execution ? mapTrainingExecution(options.execution, file => {
45
- const absolute = path.resolve(file);
46
- const binding = [...prepared.config.inputs, prepared.config.output].find(entry => absolute === entry.source || absolute.startsWith(entry.source + path.sep));
47
- if (!binding)
48
- throw Error(`Training execution path is not covered by a declared mount: ${file}`);
49
- return path.posix.join(binding.destination, path.relative(binding.source, absolute).split(path.sep).join("/"));
50
- }) : undefined;
51
- if (options.execution)
52
- await verifyCanonicalPins(prepared.config.inputs.map((input, index) => ({ ...input, id: String(index), digest: "" })), options.execution.datasetPins, prepared.config.inputs.map(input => input.source));
53
- // D2: the training Grok login is a dedicated one. Refuse the developer's desktop leaf before Docker ever sees it.
54
- if (prepared.config.broker) {
55
- assertNotDesktopGrokAuth(prepared.config.broker.bootstrap);
56
- const declaration = parseTrainingBrokerDeclaration(JSON.parse(await readFile(prepared.config.broker.declaration, "utf8")));
57
- if (declaration.slots !== prepared.config.slots)
58
- throw Error("Training launch and broker declaration slots differ");
59
- }
60
- if (options.preparationPath) {
61
- if (await realpath(options.preparationPath) !== options.preparationPath)
62
- throw Error("Preparation receipt path must be canonical");
63
- parseTrainingMappedPreparation(JSON.parse(await readFile(options.preparationPath, "utf8")));
64
- }
65
- if (options.repairPath) {
66
- if (await realpath(options.repairPath) !== options.repairPath)
67
- throw Error("Repair receipt path must be canonical");
68
- const raw = JSON.parse(await readFile(options.repairPath, "utf8"));
69
- const envelope = repairEnvelopeSchema.parse(raw);
70
- if (["native", "trials", "optimizer"].some(name => name in envelope.receipt.compatibility.components)) {
71
- throw Error("Repair receipt references external training components; re-prepare with Spawnfile before repairing measurements");
72
- }
73
- const registered = await getRegisteredRuntime(options.context.agent.runtime);
74
- if (!registered?.training?.adapterId || envelope.receipt.current.adapterId !== registered.training.adapterId) {
75
- throw Error("Repair receipt adapter is not registered for the selected runtime");
76
- }
77
- if (hashJson(raw.receipt) !== envelope.digest || envelope.receipt.current.imageId !== image ||
78
- !prepared.config.inputs.some(input => input.destination === envelope.receipt.parent.root))
79
- throw Error("Repair receipt launch identity mismatch");
80
- }
81
- const execute = options.process ?? runTrainingDocker;
82
- const controller = new AbortController(), deadline = Date.now() + options.timeoutMs;
83
- let interrupted = false, timedOut = false;
84
- const interrupt = () => { interrupted = true; controller.abort(); };
85
- const timer = setTimeout(() => { timedOut = true; controller.abort(); }, options.timeoutMs);
86
- options.signal?.addEventListener("abort", interrupt, { once: true });
87
- process.on("SIGINT", interrupt);
88
- process.on("SIGTERM", interrupt);
89
- if (options.signal?.aborted)
90
- interrupt();
91
- const prefix = ["--context", prepared.config.dockerContext];
92
- const call = async (args, cleanup = false, stream = false, cleanupTimeoutMs = 10_000) => {
93
- if (!cleanup && controller.signal.aborted)
94
- throw Error("Container operation cancelled");
95
- return execute([...prefix, ...args], {
96
- timeoutMs: cleanup ? cleanupTimeoutMs : Math.max(1, deadline - Date.now()),
97
- ...(cleanup ? {} : { signal: controller.signal }), ...(stream ? options.streams : {})
98
- });
99
- };
100
- const name = `spawnfile-training-${randomUUID()}`;
101
- const labels = { "com.spawnfile.training.owner": name };
102
- let privateRoot, containerId, creationAttempted = false, startAttempted = false;
103
- let expectedImage, lastLine = "", closureVerified = false;
104
- let outputVolume;
105
- try {
106
- const endpoint = await execute(["context", "inspect", prepared.config.dockerContext, "--format", "{{json .Endpoints.docker.Host}}"], { timeoutMs: 10_000, signal: controller.signal });
107
- if (endpoint.code !== 0 || !/^unix:\/\//u.test(JSON.parse(endpoint.stdout)))
108
- throw Error("Training requires an explicitly selected local Unix Docker context");
109
- const inspected = await call(["image", "inspect", image, "--format", "{{.Id}}"]);
110
- expectedImage = inspected.stdout.trim();
111
- if (inspected.code !== 0 || !/^sha256:[a-f0-9]{64}$/u.test(expectedImage) || (image.startsWith("sha256:") && image !== expectedImage))
112
- throw Error("Training image must be locally available with an immutable identity");
113
- if (execution) {
114
- const capability = await call(["image", "inspect", expectedImage, "--format", `{{json (index .Config.Labels "${TRAINING_EXECUTION_CAPABILITY_LABEL}")}}`]);
115
- if (capability.code !== 0 || capability.stdout.trim() !== JSON.stringify(TRAINING_EXECUTION_VERSION)) {
116
- throw Error(`Authored training requires an image implementing --spawnfile-execution ${TRAINING_EXECUTION_FILE} and labelled ${TRAINING_EXECUTION_CAPABILITY_LABEL}=${TRAINING_EXECUTION_VERSION}; legacy Training datasets are incompatible`);
117
- }
118
- }
119
- privateRoot = await realpath(await mkdtemp(path.join(path.dirname(prepared.config.output.source), ".spawnfile-training-container-")));
120
- await chmod(privateRoot, 0o700);
121
- const contextFile = path.join(privateRoot, "context.json");
122
- await writeFile(contextFile, JSON.stringify(prepared.context), { mode: 0o444, flag: "wx" });
123
- const executionFile = path.join(privateRoot, "execution.json");
124
- if (execution)
125
- await writeFile(executionFile, JSON.stringify(trainingExecutionSchema.parse(execution)), { mode: 0o444, flag: "wx" });
126
- const evaluators = await prepareTrainingEvaluators(privateRoot, prepared.config, prepared.args);
127
- if (volumeEnabled) {
128
- outputVolume = createTrainingOutputVolume({ name, image: expectedImage, host: prepared.config.output.source, scratch: privateRoot,
129
- uid, gid, runtimeUid: prepared.config.broker ? 2000 : uid, runtimeGid: prepared.config.broker ? 2000 : gid,
130
- authSources: [...prepared.config.auth, ...prepared.config.evaluatorSecrets ?? []].map(auth => auth.source),
131
- context: prepared.config.dockerContext, call: (args, cleanup) => call(args, cleanup, false, 120_000), stderr: options.streams.stderr });
132
- await outputVolume.seed();
133
- }
134
- const mounts = [...evaluators.mounts, ...prepared.config.inputs.map((entry) => `type=bind,src=${entry.source},dst=${entry.destination},readonly`),
135
- outputVolume?.mount ?? `type=bind,src=${prepared.config.output.source},dst=/run/training/output`,
136
- `type=bind,src=${contextFile},dst=/run/spawnfile-training/context.json,readonly`,
137
- ...execution ? [`type=bind,src=${executionFile},dst=${TRAINING_EXECUTION_FILE},readonly`] : [],
138
- ...options.preparationPath ? [`type=bind,src=${options.preparationPath},dst=/run/spawnfile-training/preparation.json,readonly`] : [],
139
- ...options.repairPath ? [`type=bind,src=${options.repairPath},dst=/run/spawnfile-training/repair.json,readonly`] : [],
140
- ...prepared.config.auth.map((entry) => `type=bind,src=${entry.source},dst=/run/spawnfile-training-auth/${entry.provider},readonly`)];
141
- const broker = prepared.config.broker;
142
- const codex = prepared.config.auth.find(entry => entry.provider === 'codex');
143
- if (codex && !broker) {
144
- const account = await prepareTrainingCodexAuthority(codex.source, prepared.config.dockerContext);
145
- mounts.push(`type=bind,src=${account},dst=${DAIMON_CODEX_SUBSCRIPTION_REALM.durableMountPath}`, `type=bind,src=${codex.source},dst=${DAIMON_CODEX_SUBSCRIPTION_REALM.bootstrapMountPath},readonly`);
146
- }
147
- if (broker) {
148
- mounts.push(trainingRunRequestMount(prepared.config.output.source, prepared.args));
149
- const slotsFile = path.join(privateRoot, "slots.json");
150
- await writeFile(slotsFile, `${JSON.stringify(trainingSlotsDocument(prepared.config.slots))}\n`, { mode: 0o444, flag: "wx" });
151
- mounts.push(`type=bind,src=${slotsFile},dst=${TRAINING_SLOTS_FILE},readonly`);
152
- }
153
- else {
154
- const slotsFile = path.join(privateRoot, "slots.json");
155
- await writeFile(slotsFile, `${JSON.stringify(nativeTrainingSlotsDocument(prepared.config.slots, uid))}\n`, { mode: 0o444, flag: "wx" });
156
- mounts.push(`type=bind,src=${slotsFile},dst=${TRAINING_SLOTS_FILE},readonly`);
157
- }
158
- // A brokered Grok slot runs the launcher, the broker and the model's own worker uid inside this container, so it
159
- // starts as root with the production Daimon capability set instead of the host user with no capabilities at all.
160
- const privilege = broker
161
- ? [...await trainingBrokerSecurityArgs(privateRoot), "--pids-limit", "2048",
162
- ...trainingBrokerTmpfsTargets(prepared.config.slots).flatMap((entry) => ["--tmpfs", `${entry.path}:rw,nosuid,nodev,size=${entry.size},mode=${entry.mode}`])]
163
- : ["--user", `${uid}:${gid}`, "--group-add", String(TRAINING_INPUTS_GID), "--cap-drop", "ALL", "--security-opt", "no-new-privileges",
164
- ...DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS, "--pids-limit", String(512 * prepared.config.slots),
165
- "--tmpfs", `/tmp:rw,nosuid,nodev,size=${prepared.config.slots}g,uid=${uid},gid=${gid},mode=1777`, "--tmpfs", `/work:rw,nosuid,nodev,size=${4 * prepared.config.slots}g,uid=${uid},gid=${gid},mode=700`,
166
- "--tmpfs", `/home/training:rw,nosuid,nodev,size=${prepared.config.slots}g,uid=${uid},gid=${gid},mode=700`];
167
- const args = ["create", "--name", name, "--label", `com.spawnfile.training.owner=${name}`,
168
- "--init", "--read-only", ...privilege,
169
- "--env", "HOME=/home/training", "--workdir", "/work", "--entrypoint", broker ? TRAINING_BROKER_ENTRYPOINT : "/opt/training/bin/train",
170
- ...(broker ? ["--env", "SPAWNFILE_TRAINING_MODEL_REQUEST_CAP=broker"] : []),
171
- ...evaluators.env.flatMap(value => ["--env", value]),
172
- ...[...mounts, ...(broker ? trainingBrokerMounts(broker) : [])].flatMap((mount) => ["--mount", mount]),
173
- ...(prepared.viewerPort === undefined ? [] : ["--publish", `127.0.0.1:${prepared.viewerPort}:${prepared.viewerPort}`]), expectedImage,
174
- "train", "--spawnfile-context", "/run/spawnfile-training/context.json",
175
- ...(execution ? ["--spawnfile-execution", TRAINING_EXECUTION_FILE] : []), ...prepared.args];
176
- creationAttempted = true;
177
- const created = await call(args);
178
- containerId = created.stdout.trim();
179
- if (created.code !== 0 || !/^[a-f0-9]{64}$/u.test(containerId)) {
180
- let diagnostic = created.stderr;
181
- for (const auth of [...prepared.config.auth, ...prepared.config.evaluatorSecrets ?? []])
182
- diagnostic = diagnostic.replaceAll(auth.source, "[auth source]");
183
- diagnostic = diagnostic.replace(/\p{Cc}/gu, " ").trim().slice(0, 2048);
184
- throw Error(`Docker did not return a valid training container identity${diagnostic ? `: ${diagnostic}` : ""}`);
185
- }
186
- const identity = await call(["inspect", "--format", inspectFormat, containerId]);
187
- if (identity.code !== 0 || parseDetachedContainerInspect(identity.stdout, containerId, labels, name).imageId !== expectedImage)
188
- throw Error("Training container identity mismatch");
189
- if (controller.signal.aborted)
190
- throw Error("Container operation cancelled");
191
- startAttempted = true;
192
- const result = await execute([...prefix, "start", "--attach", containerId], {
193
- timeoutMs: Math.max(1, deadline - Date.now()), signal: controller.signal,
194
- stdout: (line) => { if (line.trim())
195
- lastLine = line; options.streams.stdout(line); }, stderr: options.streams.stderr
196
- });
197
- const terminal = await call(["inspect", "--format", "{{json .State}}", containerId]);
198
- const state = JSON.parse(terminal.stdout);
199
- if (terminal.code !== 0 || state.Running !== false || !Number.isInteger(state.ExitCode) || result.code !== state.ExitCode)
200
- throw Error("Training container final state is unverified");
201
- await outputVolume?.export();
202
- if (state.ExitCode !== 0 && state.ExitCode !== 1)
203
- return state.ExitCode;
204
- const receipt = JSON.parse(lastLine);
205
- if (receipt.status !== "completed" || typeof receipt.index !== "string" || !receipt.index.startsWith("/run/training/output/") || path.posix.normalize(receipt.index) !== receipt.index)
206
- throw Error("Training exited without a valid final receipt");
207
- const artifact = path.join(prepared.config.output.source, receipt.index.slice("/run/training/output/".length));
208
- if (await realpath(artifact) !== artifact || !(await stat(artifact)).isFile())
209
- throw Error("Training completion artifact is missing or escapes output");
210
- return state.ExitCode;
211
- }
212
- catch (error) {
213
- if (interrupted)
214
- return 130;
215
- if (timedOut)
216
- throw Error("Container training exceeded command deadline");
217
- throw error;
218
- }
219
- finally {
220
- clearTimeout(timer);
221
- try {
222
- if (creationAttempted) {
223
- // A timed-out create may still have created our uniquely labelled container.
224
- const found = await call(["inspect", "--format", inspectFormat, name], true);
225
- if (found.code === 0) {
226
- const id = JSON.parse(found.stdout.split("\n")[0]);
227
- if (typeof id !== "string" || parseDetachedContainerInspect(found.stdout, id, labels, name).imageId !== expectedImage || (containerId && /^[a-f0-9]{64}$/u.test(containerId) && id !== containerId))
228
- throw Error("Refusing cleanup of unverified training container");
229
- try {
230
- if (startAttempted) {
231
- const current = await call(["inspect", "--format", "{{json .State}}", id], true);
232
- if (current.code !== 0)
233
- throw Error("Cannot verify training writer state");
234
- if (JSON.parse(current.stdout).Running === true) {
235
- const stopped = await call(["stop", "--time", "5", id], true);
236
- if (stopped.code !== 0)
237
- throw Error("Cannot stop training output writer");
238
- }
239
- }
240
- if (startAttempted && prepared.config.broker && privateRoot) {
241
- await persistTrainingGrokCredential(id, prepared.config.broker.bootstrap, privateRoot, call);
242
- }
243
- }
244
- finally {
245
- const removed = await call(["rm", "--force", id], true);
246
- const remaining = await call(["container", "ls", "--all", "--no-trunc", "--filter", `id=${id}`, "--format", "{{.ID}}"], true);
247
- if (removed.code !== 0 || remaining.code !== 0 || remaining.stdout.trim())
248
- throw Error("Training container cleanup is unverified");
249
- closureVerified = true;
250
- }
251
- }
252
- else {
253
- const remaining = await call(["container", "ls", "--all", "--filter", `name=^/${name}$`, "--format", "{{.ID}}"], true);
254
- if (remaining.code !== 0 || remaining.stdout.trim())
255
- throw Error("Training container closure is unknown");
256
- closureVerified = true;
257
- }
258
- }
259
- }
260
- finally {
261
- try {
262
- const closed = !creationAttempted || closureVerified;
263
- try {
264
- if (closed)
265
- await outputVolume?.export();
266
- }
267
- finally {
268
- await outputVolume?.dispose(closed);
269
- }
270
- }
271
- finally {
272
- options.signal?.removeEventListener("abort", interrupt);
273
- process.removeListener("SIGINT", interrupt);
274
- process.removeListener("SIGTERM", interrupt);
275
- if (privateRoot && (!creationAttempted || closureVerified) && (!outputVolume || outputVolume.safeToCleanup()))
276
- await removeTrainingPreparationScratch(privateRoot);
277
- }
278
- }
279
- }
280
- };
@@ -1,14 +0,0 @@
1
- /** Native trials keep fresh per-trial roots; only their port blocks are provisioned. */
2
- export declare const nativeTrainingSlotsDocument: (slots: number, workerUid: number) => {
3
- schema: "spawnfile.training-slots.v2";
4
- slots: {
5
- index: number;
6
- workerUid: number;
7
- isolation: "shared-uid";
8
- roots: {};
9
- ports: {
10
- base: number;
11
- count: number;
12
- };
13
- }[];
14
- };
@@ -1,13 +0,0 @@
1
- import { assertTrainingSlotCount, TRAINING_PORT_BASE, TRAINING_PORT_STRIDE } from "../broker/paths.js";
2
- /** Native trials keep fresh per-trial roots; only their port blocks are provisioned. */
3
- export const nativeTrainingSlotsDocument = (slots, workerUid) => {
4
- if (!Number.isInteger(workerUid) || workerUid <= 0 || workerUid > 4_294_967_294)
5
- throw Error("Native slots require a non-root worker uid");
6
- return {
7
- schema: "spawnfile.training-slots.v2",
8
- slots: Array.from({ length: assertTrainingSlotCount(slots) }, (_, index) => ({
9
- index, workerUid, isolation: "shared-uid", roots: {},
10
- ports: { base: TRAINING_PORT_BASE + index * TRAINING_PORT_STRIDE, count: TRAINING_PORT_STRIDE }
11
- }))
12
- };
13
- };
@@ -1,2 +0,0 @@
1
- /** Runs only in the verified Linux training image. No project code is imported. */
2
- export declare const trainingOutputCopyProgram: string;
@@ -1,72 +0,0 @@
1
- /** Runs only in the verified Linux training image. No project code is imported. */
2
- export const trainingOutputCopyProgram = String.raw `
3
- const fs = require('node:fs');
4
- const path = require('node:path');
5
- const [source, destination, owner, group] = process.argv.slice(1);
6
- const uid = Number(owner), gid = Number(group);
7
- const limits = { entries: 1_000_000, bytes: 64 * 1024 ** 3, depth: 64 };
8
- let entries = 0, bytes = 0;
9
- const links = new Map();
10
- const buffer = Buffer.alloc(1024 * 1024);
11
- // Linux fd-relative traversal keeps renamed directories and symlink swaps from
12
- // redirecting reads/writes outside the two mounts. The fallback permits local QA.
13
- const fdPath = (fd, file) => process.platform === 'linux' ? '/proc/self/fd/' + fd : file;
14
- const directory = fs.constants.O_RDONLY | fs.constants.O_DIRECTORY | fs.constants.O_NOFOLLOW;
15
- function copy(src, dst, depth) {
16
- if (++entries > limits.entries || depth > limits.depth) throw Error('Output tree exceeds entry/depth limit');
17
- const info = fs.lstatSync(src);
18
- if (info.isSymbolicLink()) {
19
- const target = fs.readlinkSync(src);
20
- bytes += Buffer.byteLength(target);
21
- if (bytes > limits.bytes) throw Error('Output exceeds 64 GiB');
22
- fs.symlinkSync(target, dst); fs.lchownSync(dst, uid, gid);
23
- fs.lutimesSync(dst, info.atime, info.mtime);
24
- return;
25
- }
26
- if (info.isDirectory()) {
27
- const input = fs.openSync(src, directory);
28
- let output;
29
- try {
30
- if (depth !== 0) fs.mkdirSync(dst, { mode: 0o700 });
31
- output = fs.openSync(dst, directory);
32
- fs.fchownSync(output, uid, gid);
33
- const from = fdPath(input, src), to = fdPath(output, dst);
34
- if (depth === 0 && fs.readdirSync(to).length) throw Error('Output copy destination must be empty');
35
- for (const name of fs.readdirSync(from)) copy(path.join(from, name), path.join(to, name), depth + 1);
36
- fs.fchownSync(output, uid, gid); fs.fchmodSync(output, info.mode & 0o7777);
37
- fs.futimesSync(output, info.atime, info.mtime); fs.fsyncSync(output);
38
- } finally { if (output !== undefined) fs.closeSync(output); fs.closeSync(input); }
39
- return;
40
- }
41
- if (!info.isFile()) throw Error('Output contains a special file');
42
- const input = fs.openSync(src, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
43
- let output;
44
- try {
45
- const opened = fs.fstatSync(input);
46
- if (!opened.isFile() || opened.dev !== info.dev || opened.ino !== info.ino) throw Error('Output changed during copy');
47
- const key = info.dev + ':' + info.ino;
48
- // Store a path rooted at the destination mount, not an fd that closes after recursion.
49
- const previous = links.get(key);
50
- if (previous) { fs.linkSync(previous, dst); return; }
51
- bytes += info.size;
52
- if (bytes > limits.bytes) throw Error('Output exceeds 64 GiB');
53
- output = fs.openSync(dst, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);
54
- fs.fchownSync(output, uid, gid);
55
- let position = 0;
56
- while (position < info.size) {
57
- const count = fs.readSync(input, buffer, 0, Math.min(buffer.length, info.size - position), position);
58
- if (!count) throw Error('Output truncated during copy');
59
- let written = 0;
60
- while (written < count) written += fs.writeSync(output, buffer, written, count - written);
61
- position += count;
62
- }
63
- const after = fs.fstatSync(input);
64
- if (after.size !== info.size || after.mtimeMs !== info.mtimeMs) throw Error('Output changed during copy');
65
- fs.fchownSync(output, uid, gid); fs.fchmodSync(output, info.mode & 0o7777);
66
- fs.futimesSync(output, info.atime, info.mtime); fs.fsyncSync(output);
67
- links.set(key, fs.realpathSync(dst));
68
- } finally { if (output !== undefined) fs.closeSync(output); fs.closeSync(input); }
69
- }
70
- copy(source, destination, 0);
71
- console.log('spawnfile-output-copy-complete');
72
- `;
@@ -1,28 +0,0 @@
1
- type DockerCall = (args: string[], cleanup?: boolean) => Promise<{
2
- code: number;
3
- stdout: string;
4
- stderr: string;
5
- }>;
6
- export declare const trainingOutputVolumeEnabled: () => boolean;
7
- /** One launch owns this volume; budgets and auth volumes are never touched. */
8
- export declare const createTrainingOutputVolume: (options: {
9
- name: string;
10
- image: string;
11
- host: string;
12
- scratch: string;
13
- uid: number;
14
- gid: number;
15
- runtimeUid: number;
16
- runtimeGid: number;
17
- context: string;
18
- authSources?: readonly string[];
19
- call: DockerCall;
20
- stderr(line: string): void;
21
- }) => {
22
- safeToCleanup: () => boolean;
23
- mount: string;
24
- seed(): Promise<void>;
25
- export(): Promise<void>;
26
- dispose(closureVerified: boolean): Promise<void>;
27
- };
28
- export {};
@@ -1,185 +0,0 @@
1
- import { constants, realpathSync } from "node:fs";
2
- import { lstat, mkdir, open, realpath, rename } from "node:fs/promises";
3
- import path from "node:path";
4
- import { parseDetachedContainerInspect } from "../../runProjectDocker.js";
5
- import { boundedRedactedText } from "../../../shared/redaction.js";
6
- import { trainingOutputCopyProgram } from "./outputCopy.js";
7
- const ownerLabel = "com.spawnfile.training.owner";
8
- const inspectFormat = "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}";
9
- const target = "/run/training/output";
10
- export const trainingOutputVolumeEnabled = () => {
11
- const setting = process.env.SPAWNFILE_TRAINING_OUTPUT_STORAGE;
12
- if (setting !== undefined && setting !== "volume" && setting !== "bind")
13
- throw Error("SPAWNFILE_TRAINING_OUTPUT_STORAGE must be volume or bind");
14
- return setting !== "bind";
15
- };
16
- /** One launch owns this volume; budgets and auth volumes are never touched. */
17
- export const createTrainingOutputVolume = (options) => {
18
- const { call } = options;
19
- const authPaths = new Set();
20
- for (const source of options.authSources ?? []) {
21
- authPaths.add(source);
22
- authPaths.add(path.resolve(source));
23
- try {
24
- authPaths.add(realpathSync(source));
25
- }
26
- catch { /* Retain lexical redaction if the leaf disappeared. */ }
27
- }
28
- for (const source of [...authPaths]) {
29
- // Docker Desktop can report either spelling of macOS's system symlink roots,
30
- // including the short spelling when the declared bind is already canonical.
31
- if (/^\/private\/(?:var|tmp|etc)\//u.test(source))
32
- authPaths.add(source.slice('/private'.length));
33
- if (/^\/(?:var|tmp|etc)\//u.test(source))
34
- authPaths.add(`/private${source}`);
35
- }
36
- const redactions = [...authPaths].filter(Boolean).sort((a, b) => b.length - a.length);
37
- const diagnostic = (text) => {
38
- for (const source of redactions)
39
- text = text.replaceAll(source, "[auth source]");
40
- return boundedRedactedText(text.replace(/\p{Cc}/gu, " "), 2048);
41
- };
42
- const volume = `${options.name}-output`;
43
- let attempted = false, seeded = false, exported = false, exportAttempted = false, helperClosed = true;
44
- const recovery = () => `Training output retained in Docker volume ${volume}. Recover with: docker --context ${options.context} run --rm --network none --read-only --mount type=volume,src=${volume},dst=/output,readonly --entrypoint /bin/tar ${options.image} -C /output -cpf - . > training-output-recovery.tar`;
45
- const owned = async () => {
46
- const result = await call(["volume", "inspect", volume, "--format", "{{json .}}"], true);
47
- if (result.code !== 0) {
48
- const listed = await call(["volume", "ls", "--filter", `name=^${volume}$`, "--format", "{{.Name}}"], true);
49
- if (listed.code === 0 && !listed.stdout.trim())
50
- return false;
51
- throw Error("Training output volume closure is unknown");
52
- }
53
- const info = JSON.parse(result.stdout);
54
- if (info.Name !== volume || info.Driver !== "local" || (info.Options && Object.keys(info.Options).length) || info.Labels?.[ownerLabel] !== options.name)
55
- throw Error("Refusing unverified training output volume");
56
- return true;
57
- };
58
- const transfer = async (direction) => {
59
- if (!await owned())
60
- throw Error("Training output volume is missing");
61
- const name = `${volume}-${direction}`;
62
- const labels = { [ownerLabel]: name };
63
- const hostStage = path.join(options.scratch, "output-export");
64
- if (direction === "export")
65
- await mkdir(hostStage, { mode: 0o700 });
66
- const mounts = direction === "seed"
67
- ? [`type=bind,src=${options.host},dst=/source,readonly`, `type=volume,src=${volume},dst=/destination,volume-nocopy`]
68
- : [`type=volume,src=${volume},dst=/source,readonly,volume-nocopy`, `type=bind,src=${hostStage},dst=/destination`];
69
- let creationAttempted = false, containerId;
70
- try {
71
- creationAttempted = true;
72
- helperClosed = false;
73
- const created = await call(["container", "create", "--name", name, "--label", `${ownerLabel}=${name}`,
74
- "--network", "none", "--read-only", "--user", "0:0", "--security-opt", "no-new-privileges",
75
- // Retain only Docker's default CHOWN, DAC_OVERRIDE, FOWNER and FSETID for copying
76
- // private runtime files and assigning the native/broker uid. No cap-add.
77
- ...["AUDIT_WRITE", "KILL", "MKNOD", "NET_BIND_SERVICE", "NET_RAW", "SETFCAP", "SETGID", "SETPCAP", "SETUID", "SYS_CHROOT"].flatMap(cap => ["--cap-drop", cap]),
78
- "--pids-limit", "32", "--memory", "256m", "--cpus", "1", "--workdir", "/",
79
- ...mounts.flatMap(mount => ["--mount", mount]), "--entrypoint", "node", options.image,
80
- "-e", trainingOutputCopyProgram, "/source", "/destination",
81
- String(direction === "seed" ? options.runtimeUid : options.uid), String(direction === "seed" ? options.runtimeGid : options.gid)], direction === "export");
82
- const id = created.stdout.trim();
83
- containerId = id;
84
- if (created.code !== 0 || !/^[a-f0-9]{64}$/u.test(id))
85
- throw Error(`Cannot create training output ${direction} helper${created.stderr ? `: ${diagnostic(created.stderr)}` : ""}`);
86
- const checked = await call(["container", "inspect", "--format", inspectFormat, name], true);
87
- if (checked.code !== 0 || parseDetachedContainerInspect(checked.stdout, id, labels, name).imageId !== options.image)
88
- throw Error("Training output helper identity mismatch");
89
- const result = await call(["container", "start", "--attach", id], direction === "export");
90
- const terminal = await call(["container", "inspect", "--format", "{{json .State}}", id], true);
91
- const state = JSON.parse(terminal.stdout);
92
- if (result.code !== 0 || result.stdout.trim() !== "spawnfile-output-copy-complete" || terminal.code !== 0 || state.Running !== false || state.ExitCode !== 0)
93
- throw Error(`Training output ${direction} failed (copy incomplete or exceeds limits): ${diagnostic(result.stderr)}`);
94
- }
95
- finally {
96
- if (creationAttempted) {
97
- const found = await call(["container", "inspect", "--format", inspectFormat, name], true);
98
- if (found.code === 0) {
99
- const id = JSON.parse(found.stdout.split("\n")[0]);
100
- if (typeof id !== "string" || parseDetachedContainerInspect(found.stdout, id, labels, name).imageId !== options.image || (containerId && /^[a-f0-9]{64}$/u.test(containerId) && id !== containerId))
101
- throw Error("Refusing cleanup of unverified training output helper");
102
- const removed = await call(["container", "rm", "--force", id], true);
103
- if (removed.code !== 0)
104
- throw Error("Cannot remove training output helper");
105
- }
106
- const remaining = await call(["container", "ls", "--all", "--filter", `name=^/${name}$`, "--format", "{{.ID}}"], true);
107
- if (remaining.code !== 0 || remaining.stdout.trim())
108
- throw Error("Training output helper closure is unknown");
109
- helperClosed = true;
110
- }
111
- }
112
- if (direction === "export") {
113
- if (await realpath(options.host) !== options.host || !(await lstat(options.host)).isDirectory())
114
- throw Error("Training host output changed before export");
115
- const backup = path.join(options.scratch, "output-before-export");
116
- await rename(options.host, backup);
117
- try {
118
- await rename(hostStage, options.host);
119
- }
120
- catch (error) {
121
- await rename(backup, options.host);
122
- throw error;
123
- }
124
- for (const directory of [options.scratch, path.dirname(options.host)]) {
125
- const handle = await open(directory, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
126
- try {
127
- await handle.sync();
128
- }
129
- finally {
130
- await handle.close();
131
- }
132
- }
133
- }
134
- };
135
- return {
136
- safeToCleanup: () => helperClosed && (!exportAttempted || exported),
137
- mount: `type=volume,src=${volume},dst=${target},volume-nocopy`,
138
- async seed() {
139
- attempted = true;
140
- const created = await call(["volume", "create", "--driver", "local", "--label", `${ownerLabel}=${options.name}`, volume]);
141
- if (created.code !== 0 || created.stdout.trim() !== volume || !await owned())
142
- throw Error("Cannot create owned training output volume");
143
- await transfer("seed");
144
- seeded = true;
145
- options.stderr(`Training output uses VM-local volume ${volume}; host checkpoints update at exit.`);
146
- },
147
- async export() {
148
- if (!seeded || exportAttempted)
149
- return;
150
- exportAttempted = true;
151
- try {
152
- await transfer("export");
153
- exported = true;
154
- }
155
- catch (error) {
156
- options.stderr(`Training output export failed: ${error instanceof Error ? error.message : "unknown failure"}. Scratch retained at ${options.scratch}. ${recovery()}`);
157
- throw Error(`Training output export failed. ${recovery()}`, { cause: error });
158
- }
159
- },
160
- async dispose(closureVerified) {
161
- if (!attempted)
162
- return;
163
- try {
164
- if (!await owned())
165
- return;
166
- if (!helperClosed)
167
- throw Error("Training output helper closure is unverified");
168
- if (!closureVerified) {
169
- options.stderr(recovery());
170
- return;
171
- }
172
- if (seeded && !exported)
173
- throw Error("Training output has not been exported");
174
- const removed = await call(["volume", "rm", volume], true);
175
- const remaining = await call(["volume", "ls", "--filter", `name=^${volume}$`, "--format", "{{.Name}}"], true);
176
- if (removed.code !== 0 || remaining.code !== 0 || remaining.stdout.trim())
177
- throw Error("Training output volume removal is unverified");
178
- }
179
- catch (error) {
180
- options.stderr(recovery());
181
- throw Error(recovery(), { cause: error });
182
- }
183
- }
184
- };
185
- };
@@ -1,10 +0,0 @@
1
- import { type TrainingContext } from "../contract.js";
2
- import { type TrainingContainerConfig } from "./contract.js";
3
- export declare const prepareTrainingContainer: (raw: unknown, context: TrainingContext, args: readonly string[], options?: {
4
- createOutput?: boolean;
5
- }) => Promise<{
6
- config: TrainingContainerConfig;
7
- context: TrainingContext;
8
- args: string[];
9
- viewerPort?: number;
10
- }>;