spawnfile 0.1.33 → 0.1.34

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 (585) hide show
  1. package/README.md +1 -1
  2. package/dist/auth/trainingAuth.d.ts +2 -5
  3. package/dist/cli/devCommands.d.ts +1 -1
  4. package/dist/cli/devCommands.js +0 -66
  5. package/dist/cli/runCli.d.ts +1 -4
  6. package/dist/cli/runCli.js +2 -2
  7. package/dist/cli/trainCommand.js +9 -15
  8. package/dist/cli/trainingBooted.d.ts +7 -0
  9. package/dist/cli/trainingBooted.js +41 -0
  10. package/dist/cli/trainingExecution.d.ts +4 -7
  11. package/dist/cli/trainingExecution.js +4 -32
  12. package/dist/compiler/containerArtifacts.js +0 -5
  13. package/dist/compiler/containerBackedMountRender.js +5 -1
  14. package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
  15. package/dist/compiler/containerDaimonBrokerRender.js +7 -88
  16. package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
  17. package/dist/compiler/containerDaimonGatewayRender.js +157 -0
  18. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
  19. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
  20. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
  21. package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
  22. package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
  23. package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
  24. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
  25. package/dist/compiler/containerDaimonUidEntrypointRender.js +26 -46
  26. package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
  27. package/dist/compiler/memoryArtifacts.js +0 -1
  28. package/dist/compiler/moltnetArtifacts.js +1 -17
  29. package/dist/compiler/moltnetClientConfig.js +1 -1
  30. package/dist/compiler/moltnetRuntimeConfig.js +0 -10
  31. package/dist/compiler/runProject.d.ts +1 -0
  32. package/dist/compiler/runProject.js +9 -3
  33. package/dist/compiler/runProjectAuth.js +2 -17
  34. package/dist/compiler/training/contract.d.ts +0 -2
  35. package/dist/compiler/training/contract.js +0 -2
  36. package/dist/compiler/training/execution.d.ts +1 -128
  37. package/dist/compiler/training/execution.js +7 -68
  38. package/dist/compiler/training/index.d.ts +0 -8
  39. package/dist/compiler/training/index.js +0 -7
  40. package/dist/compiler/training/output.d.ts +1 -0
  41. package/dist/compiler/training/output.js +1 -1
  42. package/dist/compiler/training/trial/boot.d.ts +53 -0
  43. package/dist/compiler/training/trial/boot.js +147 -0
  44. package/dist/compiler/training/trial/docker.d.ts +8 -0
  45. package/dist/compiler/training/trial/docker.js +22 -0
  46. package/dist/compiler/training/trial/gateway.d.ts +42 -0
  47. package/dist/compiler/training/trial/gateway.js +98 -0
  48. package/dist/compiler/training/trial/index.d.ts +4 -0
  49. package/dist/compiler/training/trial/index.js +4 -0
  50. package/dist/compiler/training/trial/launcher.d.ts +32 -0
  51. package/dist/compiler/training/trial/launcher.js +49 -0
  52. package/dist/compiler/training/trial/project.d.ts +11 -0
  53. package/dist/compiler/training/trial/project.js +31 -0
  54. package/dist/compiler/upReceipt.d.ts +2 -17
  55. package/dist/compiler/upReceipt.js +2 -17
  56. package/dist/deployment/artifactsExportPlan.js +2 -18
  57. package/dist/deployment/privateArtifactsExport.js +1 -1
  58. package/dist/dev/docker.d.ts +0 -5
  59. package/dist/dev/docker.js +0 -46
  60. package/dist/dev/index.d.ts +0 -1
  61. package/dist/dev/index.js +0 -1
  62. package/dist/dev/project.d.ts +0 -16
  63. package/dist/dev/project.js +1 -128
  64. package/dist/distribution/distributionReportSchema.js +1 -1
  65. package/dist/distribution/imageRuntimeAuth.js +3 -2
  66. package/dist/release/drainControl.d.ts +5 -19
  67. package/dist/release/drainControl.js +12 -67
  68. package/dist/report/types.d.ts +3 -6
  69. package/dist/runtime/common.d.ts +1 -1
  70. package/dist/runtime/common.js +1 -1
  71. package/dist/runtime/container.d.ts +2 -2
  72. package/dist/runtime/container.js +1 -39
  73. package/dist/runtime/daimon/config.js +6 -12
  74. package/dist/runtime/daimon/contractManifest.js +0 -1
  75. package/dist/runtime/daimon/contractManifestSchema.js +0 -1
  76. package/dist/runtime/daimon/control.d.ts +31 -0
  77. package/dist/runtime/daimon/control.js +83 -0
  78. package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
  79. package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
  80. package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
  81. package/dist/runtime/daimon/engines.js +0 -1
  82. package/dist/runtime/daimon/gateway.d.ts +62 -0
  83. package/dist/runtime/daimon/gateway.js +77 -0
  84. package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
  85. package/dist/runtime/daimon/grokWorkerContract.js +1 -13
  86. package/dist/runtime/daimon/index.d.ts +2 -0
  87. package/dist/runtime/daimon/index.js +2 -1
  88. package/dist/runtime/daimon/memory.js +1 -1
  89. package/dist/runtime/daimon/packageName.js +0 -1
  90. package/dist/runtime/daimon/runAuth.js +7 -4
  91. package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
  92. package/dist/runtime/daimon/runtimeIdentity.js +2 -0
  93. package/dist/runtime/daimon/subscriptionRealms.d.ts +9 -3
  94. package/dist/runtime/daimon/subscriptionRealms.js +22 -13
  95. package/dist/runtime/daimon/testHelpers.d.ts +2 -0
  96. package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
  97. package/dist/runtime/daimon/training/booted/adapter.d.ts +46 -0
  98. package/dist/runtime/daimon/training/booted/adapter.js +59 -0
  99. package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
  100. package/dist/runtime/daimon/training/booted/index.d.ts +2 -0
  101. package/dist/runtime/daimon/training/booted/index.js +2 -0
  102. package/dist/runtime/daimon/training/booted/index.js.map +1 -0
  103. package/dist/runtime/daimon/training/index.d.ts +5 -0
  104. package/dist/runtime/daimon/training/index.js +8 -4
  105. package/dist/runtime/daimon/training/index.js.map +1 -1
  106. package/dist/runtime/daimon/training/providers/codex-subscription/index.js.map +1 -0
  107. package/dist/runtime/daimon/training/providers/codex-subscription/protocol.js.map +1 -0
  108. package/dist/runtime/daimon/training/providers/codex-subscription/provider.js.map +1 -0
  109. package/dist/runtime/daimon/training/providers/codex-subscription/strict-schema.js.map +1 -0
  110. package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +1 -3
  111. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +5 -5
  112. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +1 -1
  113. package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +1 -2
  114. package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -1
  115. package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +1 -1
  116. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +5 -17
  117. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +18 -31
  118. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +1 -1
  119. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +1 -2
  120. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +1 -1
  121. package/dist/runtime/daimon/wakeMoments.js +0 -1
  122. package/dist/runtime/install.js +0 -21
  123. package/dist/runtime/registry.js +0 -2
  124. package/dist/runtime/trainingGraderProviders.js +1 -1
  125. package/dist/runtime/trainingProviders.d.ts +1 -2
  126. package/dist/runtime/trainingProviders.js +9 -19
  127. package/dist/runtime/trainingSubjects.d.ts +0 -121
  128. package/dist/runtime/trainingSubjects.js +2 -13
  129. package/dist/runtime/types.d.ts +1 -8
  130. package/dist/shared/errors.js +0 -1
  131. package/dist/status/lifecycleProbes.js +3 -6
  132. package/dist/status/moltnetWiringProbes.js +1 -17
  133. package/dist/training/subjects/index.d.ts +0 -1
  134. package/dist/training/subjects/index.js +0 -1
  135. package/dist/training/subjects/index.js.map +1 -1
  136. package/examples/README.md +0 -1
  137. package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
  138. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
  139. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
  140. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
  141. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
  142. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
  143. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
  144. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
  145. package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
  146. package/package.json +4 -13
  147. package/runtimes.yaml +5 -15
  148. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
  149. package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
  150. package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
  151. package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
  152. package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
  153. package/dist/compiler/training/broker/clockProbe.js +0 -27
  154. package/dist/compiler/training/broker/declaration.d.ts +0 -54
  155. package/dist/compiler/training/broker/declaration.js +0 -70
  156. package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
  157. package/dist/compiler/training/broker/entrypoint.js +0 -124
  158. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
  159. package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
  160. package/dist/compiler/training/broker/index.d.ts +0 -12
  161. package/dist/compiler/training/broker/index.js +0 -12
  162. package/dist/compiler/training/broker/main.d.ts +0 -2
  163. package/dist/compiler/training/broker/main.js +0 -14
  164. package/dist/compiler/training/broker/paths.d.ts +0 -236
  165. package/dist/compiler/training/broker/paths.js +0 -249
  166. package/dist/compiler/training/broker/processes.d.ts +0 -51
  167. package/dist/compiler/training/broker/processes.js +0 -102
  168. package/dist/compiler/training/broker/projection.d.ts +0 -61
  169. package/dist/compiler/training/broker/projection.js +0 -109
  170. package/dist/compiler/training/broker/provisioning.d.ts +0 -78
  171. package/dist/compiler/training/broker/provisioning.js +0 -231
  172. package/dist/compiler/training/broker/receipt.d.ts +0 -77
  173. package/dist/compiler/training/broker/receipt.js +0 -110
  174. package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
  175. package/dist/compiler/training/broker/recycleClient.js +0 -112
  176. package/dist/compiler/training/broker/registration.d.ts +0 -46
  177. package/dist/compiler/training/broker/registration.js +0 -113
  178. package/dist/compiler/training/broker/reset.d.ts +0 -9
  179. package/dist/compiler/training/broker/reset.js +0 -71
  180. package/dist/compiler/training/broker/rootScript.d.ts +0 -32
  181. package/dist/compiler/training/broker/rootScript.js +0 -33
  182. package/dist/compiler/training/broker/runtime.d.ts +0 -22
  183. package/dist/compiler/training/broker/runtime.js +0 -128
  184. package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
  185. package/dist/compiler/training/broker/seccompRoutes.js +0 -36
  186. package/dist/compiler/training/broker/supervisor.d.ts +0 -108
  187. package/dist/compiler/training/broker/supervisor.js +0 -172
  188. package/dist/compiler/training/broker/taskClock.d.ts +0 -5
  189. package/dist/compiler/training/broker/taskClock.js +0 -41
  190. package/dist/compiler/training/container/contract.d.ts +0 -54
  191. package/dist/compiler/training/container/contract.js +0 -52
  192. package/dist/compiler/training/container/evaluators.d.ts +0 -48
  193. package/dist/compiler/training/container/evaluators.js +0 -50
  194. package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
  195. package/dist/compiler/training/container/grokWriteback.js +0 -26
  196. package/dist/compiler/training/container/index.d.ts +0 -5
  197. package/dist/compiler/training/container/index.js +0 -3
  198. package/dist/compiler/training/container/launch.d.ts +0 -21
  199. package/dist/compiler/training/container/launch.js +0 -280
  200. package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
  201. package/dist/compiler/training/container/nativeSlots.js +0 -13
  202. package/dist/compiler/training/container/outputCopy.d.ts +0 -2
  203. package/dist/compiler/training/container/outputCopy.js +0 -72
  204. package/dist/compiler/training/container/outputVolume.d.ts +0 -28
  205. package/dist/compiler/training/container/outputVolume.js +0 -185
  206. package/dist/compiler/training/container/prepare.d.ts +0 -10
  207. package/dist/compiler/training/container/prepare.js +0 -125
  208. package/dist/compiler/training/container/process.d.ts +0 -14
  209. package/dist/compiler/training/container/process.js +0 -70
  210. package/dist/compiler/training/container/security.d.ts +0 -38
  211. package/dist/compiler/training/container/security.js +0 -68
  212. package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
  213. package/dist/compiler/training/container/subjectIsolation.js +0 -16
  214. package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
  215. package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
  216. package/dist/compiler/training/preparation/broker.d.ts +0 -30
  217. package/dist/compiler/training/preparation/broker.js +0 -68
  218. package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
  219. package/dist/compiler/training/preparation/contextModes.js +0 -38
  220. package/dist/compiler/training/preparation/contract.d.ts +0 -203
  221. package/dist/compiler/training/preparation/contract.js +0 -114
  222. package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
  223. package/dist/compiler/training/preparation/copyAssets.js +0 -8
  224. package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
  225. package/dist/compiler/training/preparation/daimonParent.js +0 -114
  226. package/dist/compiler/training/preparation/files.d.ts +0 -29
  227. package/dist/compiler/training/preparation/files.js +0 -146
  228. package/dist/compiler/training/preparation/image.d.ts +0 -28
  229. package/dist/compiler/training/preparation/image.js +0 -105
  230. package/dist/compiler/training/preparation/index.d.ts +0 -3
  231. package/dist/compiler/training/preparation/index.js +0 -2
  232. package/dist/compiler/training/preparation/inputs.d.ts +0 -24
  233. package/dist/compiler/training/preparation/inputs.js +0 -101
  234. package/dist/compiler/training/preparation/prepare.d.ts +0 -38
  235. package/dist/compiler/training/preparation/prepare.js +0 -224
  236. package/dist/compiler/training/preparation/scratch.d.ts +0 -8
  237. package/dist/compiler/training/preparation/scratch.js +0 -114
  238. package/dist/compiler/training/repair/compatibility.d.ts +0 -11
  239. package/dist/compiler/training/repair/compatibility.js +0 -45
  240. package/dist/compiler/training/repair/contract.d.ts +0 -832
  241. package/dist/compiler/training/repair/contract.js +0 -34
  242. package/dist/compiler/training/repair/index.d.ts +0 -3
  243. package/dist/compiler/training/repair/index.js +0 -3
  244. package/dist/compiler/training/repair/prepare.d.ts +0 -378
  245. package/dist/compiler/training/repair/prepare.js +0 -84
  246. package/dist/compiler/training/repair/witness.d.ts +0 -348
  247. package/dist/compiler/training/repair/witness.js +0 -62
  248. package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
  249. package/dist/compiler/training/subjectDeclaration.js +0 -54
  250. package/dist/compiler/training/subjectLease.d.ts +0 -115
  251. package/dist/compiler/training/subjectLease.js +0 -179
  252. package/dist/dev/activity.d.ts +0 -14
  253. package/dist/dev/activity.js +0 -48
  254. package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
  255. package/dist/runtime/codex-exec/training/adapter.js +0 -101
  256. package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
  257. package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
  258. package/dist/runtime/codex-exec/training/environment.js +0 -26
  259. package/dist/runtime/codex-exec/training/environment.js.map +0 -1
  260. package/dist/runtime/codex-exec/training/index.d.ts +0 -2
  261. package/dist/runtime/codex-exec/training/index.js +0 -3
  262. package/dist/runtime/codex-exec/training/index.js.map +0 -1
  263. package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
  264. package/dist/runtime/codex-exec/training/protocol.js +0 -102
  265. package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
  266. package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
  267. package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
  268. package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
  269. package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
  270. package/dist/runtime/daimon/contractManifest.js.map +0 -1
  271. package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
  272. package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
  273. package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
  274. package/dist/runtime/daimon/engines.js.map +0 -1
  275. package/dist/runtime/daimon/index.js.map +0 -1
  276. package/dist/runtime/daimon/packageName.js.map +0 -1
  277. package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
  278. package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
  279. package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
  280. package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
  281. package/dist/runtime/daimon/training/legacy/index.js +0 -3
  282. package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
  283. package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
  284. package/dist/runtime/daimon/training/legacy/public.js +0 -16
  285. package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
  286. package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
  287. package/dist/runtime/daimon/training/native/adapter.js +0 -252
  288. package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
  289. package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
  290. package/dist/runtime/daimon/training/native/admission.js +0 -52
  291. package/dist/runtime/daimon/training/native/admission.js.map +0 -1
  292. package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
  293. package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
  294. package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
  295. package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
  296. package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
  297. package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
  298. package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
  299. package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
  300. package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
  301. package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
  302. package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
  303. package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
  304. package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
  305. package/dist/runtime/daimon/training/native/child/grok.js +0 -47
  306. package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
  307. package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
  308. package/dist/runtime/daimon/training/native/child/index.js +0 -5
  309. package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
  310. package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
  311. package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
  312. package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
  313. package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
  314. package/dist/runtime/daimon/training/native/child/probe.js +0 -11
  315. package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
  316. package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
  317. package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
  318. package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
  319. package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
  320. package/dist/runtime/daimon/training/native/child/types.js +0 -2
  321. package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
  322. package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
  323. package/dist/runtime/daimon/training/native/container/docker.js +0 -105
  324. package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
  325. package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
  326. package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
  327. package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
  328. package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
  329. package/dist/runtime/daimon/training/native/container/index.js +0 -6
  330. package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
  331. package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
  332. package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
  333. package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
  334. package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
  335. package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
  336. package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
  337. package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
  338. package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
  339. package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
  340. package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
  341. package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
  342. package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
  343. package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
  344. package/dist/runtime/daimon/training/native/container/slot.js +0 -58
  345. package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
  346. package/dist/runtime/daimon/training/native/external.d.ts +0 -37
  347. package/dist/runtime/daimon/training/native/external.js +0 -75
  348. package/dist/runtime/daimon/training/native/external.js.map +0 -1
  349. package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
  350. package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
  351. package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
  352. package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
  353. package/dist/runtime/daimon/training/native/grants/index.js +0 -3
  354. package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
  355. package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
  356. package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
  357. package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
  358. package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
  359. package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
  360. package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
  361. package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
  362. package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
  363. package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
  364. package/dist/runtime/daimon/training/native/index.d.ts +0 -38
  365. package/dist/runtime/daimon/training/native/index.js +0 -27
  366. package/dist/runtime/daimon/training/native/index.js.map +0 -1
  367. package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
  368. package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
  369. package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
  370. package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
  371. package/dist/runtime/daimon/training/native/observations.js +0 -217
  372. package/dist/runtime/daimon/training/native/observations.js.map +0 -1
  373. package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
  374. package/dist/runtime/daimon/training/native/outcome.js +0 -37
  375. package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
  376. package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
  377. package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
  378. package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
  379. package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
  380. package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
  381. package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
  382. package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
  383. package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
  384. package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
  385. package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
  386. package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
  387. package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
  388. package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
  389. package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
  390. package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
  391. package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
  392. package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
  393. package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
  394. package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
  395. package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
  396. package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
  397. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
  398. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
  399. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
  400. package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
  401. package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
  402. package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
  403. package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
  404. package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
  405. package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
  406. package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
  407. package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
  408. package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
  409. package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
  410. package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
  411. package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
  412. package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
  413. package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
  414. package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
  415. package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
  416. package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
  417. package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
  418. package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
  419. package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
  420. package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
  421. package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
  422. package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
  423. package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
  424. package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
  425. package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
  426. package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
  427. package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
  428. package/dist/runtime/daimon/training/native/transcript.js +0 -239
  429. package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
  430. package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
  431. package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
  432. package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
  433. package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
  434. package/dist/runtime/daimon/training/native/transport/http.js +0 -81
  435. package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
  436. package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
  437. package/dist/runtime/daimon/training/native/transport/index.js +0 -3
  438. package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
  439. package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
  440. package/dist/runtime/daimon/training/native/transport/types.js +0 -2
  441. package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
  442. package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
  443. package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
  444. package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
  445. package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
  446. package/dist/runtime/daimon/training/native/worker/control.js +0 -266
  447. package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
  448. package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
  449. package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
  450. package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
  451. package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
  452. package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
  453. package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
  454. package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
  455. package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
  456. package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
  457. package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
  458. package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
  459. package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
  460. package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
  461. package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
  462. package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
  463. package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
  464. package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
  465. package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
  466. package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
  467. package/dist/runtime/daimon/training/native/worker/index.js +0 -8
  468. package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
  469. package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
  470. package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
  471. package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
  472. package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
  473. package/dist/runtime/daimon/training/native/worker/public.js +0 -22
  474. package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
  475. package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
  476. package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
  477. package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
  478. package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
  479. package/dist/runtime/daimon/training/native/worker/server.js +0 -102
  480. package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
  481. package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
  482. package/dist/runtime/daimon/training/native/worker/types.js +0 -2
  483. package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
  484. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
  485. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
  486. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
  487. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
  488. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
  489. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
  490. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
  491. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
  492. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
  493. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
  494. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
  495. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
  496. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
  497. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
  498. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
  499. package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
  500. package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
  501. package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
  502. package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
  503. package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
  504. package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
  505. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
  506. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
  507. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
  508. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
  509. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
  510. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
  511. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
  512. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
  513. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
  514. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
  515. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
  516. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
  517. package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
  518. package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
  519. package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
  520. package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
  521. package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
  522. package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
  523. package/dist/runtime/daimon/training/public.d.ts +0 -6
  524. package/dist/runtime/daimon/training/public.js +0 -5
  525. package/dist/runtime/daimon/training/public.js.map +0 -1
  526. package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
  527. package/dist/runtime/daimon/training/services/account-lease.js +0 -76
  528. package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
  529. package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
  530. package/dist/runtime/daimon/training/services/freshness.js +0 -19
  531. package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
  532. package/dist/runtime/daimon/training/services/index.d.ts +0 -4
  533. package/dist/runtime/daimon/training/services/index.js +0 -4
  534. package/dist/runtime/daimon/training/services/index.js.map +0 -1
  535. package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
  536. package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
  537. package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
  538. package/dist/runtime/daimon/wakeMoments.js.map +0 -1
  539. package/dist/runtime/pi/adapter.d.ts +0 -3
  540. package/dist/runtime/pi/adapter.js +0 -230
  541. package/dist/runtime/pi/appActivitySource.d.ts +0 -1
  542. package/dist/runtime/pi/appActivitySource.js +0 -199
  543. package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
  544. package/dist/runtime/pi/appAgentConfig.js +0 -264
  545. package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
  546. package/dist/runtime/pi/appCliEnginesSource.js +0 -183
  547. package/dist/runtime/pi/appCliSource.d.ts +0 -1
  548. package/dist/runtime/pi/appCliSource.js +0 -353
  549. package/dist/runtime/pi/appControlSource.d.ts +0 -1
  550. package/dist/runtime/pi/appControlSource.js +0 -390
  551. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
  552. package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
  553. package/dist/runtime/pi/appCoreSource.d.ts +0 -4
  554. package/dist/runtime/pi/appCoreSource.js +0 -244
  555. package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
  556. package/dist/runtime/pi/appPreludeSource.js +0 -192
  557. package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
  558. package/dist/runtime/pi/appScheduleSource.js +0 -84
  559. package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
  560. package/dist/runtime/pi/appScriptedEngine.js +0 -42
  561. package/dist/runtime/pi/appSource.d.ts +0 -4
  562. package/dist/runtime/pi/appSource.js +0 -12
  563. package/dist/runtime/pi/appTemplate.d.ts +0 -14
  564. package/dist/runtime/pi/appTemplate.js +0 -28
  565. package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
  566. package/dist/runtime/pi/appTemplateTypes.js +0 -18
  567. package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
  568. package/dist/runtime/pi/appWakeContextSource.js +0 -398
  569. package/dist/runtime/pi/containerTargets.d.ts +0 -4
  570. package/dist/runtime/pi/containerTargets.js +0 -63
  571. package/dist/runtime/pi/runAuth.d.ts +0 -2
  572. package/dist/runtime/pi/runAuth.js +0 -185
  573. package/dist/runtime/pi/testHelpers.d.ts +0 -2
  574. package/dist/shared/errors.js.map +0 -1
  575. package/dist/training/subjects/environment.d.ts +0 -2
  576. package/dist/training/subjects/environment.js +0 -14
  577. package/dist/training/subjects/environment.js.map +0 -1
  578. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.d.ts +0 -0
  579. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.js +0 -0
  580. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.d.ts +0 -0
  581. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.js +0 -0
  582. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.d.ts +0 -0
  583. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.js +0 -0
  584. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.d.ts +0 -0
  585. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.js +0 -0
@@ -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
- }>;
@@ -1,125 +0,0 @@
1
- import { lstat, mkdir, realpath } from "node:fs/promises";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { trainingContextSchema } from "../contract.js";
5
- import { trainingContainerConfigSchema } from "./contract.js";
6
- import { allocateTrainingOutputParent } from "../execution.js";
7
- import { assertTrainingSubjectIsolation } from "./subjectIsolation.js";
8
- const inside = (root, value) => value === root || value.startsWith(`${root}/`);
9
- export const prepareTrainingContainer = async (raw, context, args, options = {}) => {
10
- const config = trainingContainerConfigSchema.parse(raw);
11
- await assertTrainingSubjectIsolation(config, context);
12
- const entries = [...config.inputs, config.output];
13
- const protectedLeaves = [...config.auth, ...config.evaluatorSecrets ?? []];
14
- const home = path.resolve(os.homedir());
15
- const globalConfigRoots = [".codex", ".claude", ".grok", ".ssh", ".config"].map((name) => path.join(home, name));
16
- let missingOutput = false;
17
- for (const entry of [...entries, ...protectedLeaves]) {
18
- let canonical;
19
- try {
20
- canonical = await realpath(entry.source);
21
- }
22
- catch (error) {
23
- if (entry !== config.output || !options.createOutput || error.code !== "ENOENT")
24
- throw error;
25
- canonical = path.resolve(entry.source);
26
- missingOutput = true;
27
- }
28
- if (canonical !== entry.source)
29
- throw Error("Training bind sources must be canonical, without symlink aliases");
30
- if (entry !== config.output || !missingOutput) {
31
- const stat = await lstat(canonical);
32
- if (stat.isSymbolicLink() || (!stat.isFile() && !stat.isDirectory()))
33
- throw Error("Training binds require regular files or directories");
34
- if (config.evaluatorSecrets?.includes(entry) && stat.nlink !== 1)
35
- throw Error("Evaluator secrets must not have hardlink aliases");
36
- if (protectedLeaves.includes(entry) && !stat.isFile())
37
- throw Error("Auth must be a single regular leaf file");
38
- }
39
- if (entries.includes(entry)) {
40
- if (["/", "/etc", "/var", "/run", "/tmp", "/opt", "/usr", "/Users", "/home", home].includes(canonical) || globalConfigRoots.some((root) => inside(root, canonical)))
41
- throw Error("Host homes, configuration and system roots cannot be training inputs");
42
- if (protectedLeaves.some((auth) => inside(canonical, auth.source)))
43
- throw Error("Auth must not be exposed through input or output mounts");
44
- }
45
- }
46
- if (config.inputs.some((entry, index) => config.inputs.some((other, otherIndex) => index !== otherIndex && inside(entry.source, other.source))))
47
- throw Error("Training input source roots must not overlap");
48
- if (!missingOutput && !(await lstat(config.output.source)).isDirectory())
49
- throw Error("Training output must be an existing directory");
50
- if (config.inputs.some((entry) => inside(entry.source, config.output.source) || inside(config.output.source, entry.source)))
51
- throw Error("Training output and inputs must not overlap");
52
- const map = (value) => {
53
- const absolute = path.resolve(value);
54
- const entry = entries.find((item) => inside(item.source, absolute));
55
- if (!entry)
56
- throw Error(`Training path is not covered by a declared mount: ${value}`);
57
- return path.posix.join(entry.destination, path.relative(entry.source, absolute).split(path.sep).join("/"));
58
- };
59
- const source = (entry) => ({ ...entry, sourcePath: map(entry.sourcePath) });
60
- const mapped = trainingContextSchema.parse({ ...context,
61
- project: { ...context.project, root: map(context.project.root), manifest: map(context.project.manifest) },
62
- agent: { ...context.agent, source: map(context.agent.source) },
63
- sources: context.sources.map(source), documents: context.documents.map(source), skills: context.skills.map(source)
64
- });
65
- const mappedArgs = [...args];
66
- let viewerPort;
67
- for (let index = 0; index < mappedArgs.length; index++) {
68
- const flag = mappedArgs[index];
69
- if (["--train", "--validation", "--test", "--out", "--cost-config"].includes(flag)) {
70
- const value = mappedArgs[++index];
71
- if (!value)
72
- throw Error(`Missing ${flag} path`);
73
- mappedArgs[index] = map(value);
74
- if (flag === "--out" && !inside("/run/training/output", mappedArgs[index]))
75
- throw Error("Training --out must use the writable output mount");
76
- }
77
- else if (flag === "--resource") {
78
- const value = mappedArgs[++index] ?? "", equals = value.indexOf("=");
79
- if (equals < 1)
80
- throw Error("Expected resource=id path mapping");
81
- mappedArgs[index] = `${value.slice(0, equals)}=${map(value.slice(equals + 1))}`;
82
- }
83
- else if (flag === "--bridge-command") {
84
- const value = mappedArgs[++index] ?? "";
85
- if (!/^\/opt\/training\/[A-Za-z0-9._/-]+$/u.test(value) || path.posix.normalize(value) !== value)
86
- throw Error("Bridge must be an installed executable under /opt/training");
87
- }
88
- else if (flag === "--view") {
89
- const value = mappedArgs[++index] ?? "";
90
- const port = Number(value);
91
- if (viewerPort !== undefined || !/^\d+$/u.test(value) || !Number.isSafeInteger(port) || port < 1 || port > 65535)
92
- throw Error("Container --view requires one explicit port from 1 to 65535");
93
- viewerPort = port;
94
- mappedArgs[index] = String(port);
95
- }
96
- }
97
- {
98
- const flags = mappedArgs.filter(arg => arg === "--concurrency" || arg.startsWith("--concurrency="));
99
- if (flags.length > 1)
100
- throw Error("Training accepts one --concurrency value");
101
- const flag = flags[0];
102
- if (flag !== undefined) {
103
- const value = flag === "--concurrency" ? mappedArgs[mappedArgs.indexOf(flag) + 1] : flag.slice("--concurrency=".length);
104
- if (!value || !/^[1-8]$/u.test(value) || Number(value) > config.slots) {
105
- throw Error("Training concurrency must fit the provisioned slots");
106
- }
107
- if (flag !== "--concurrency")
108
- mappedArgs.splice(mappedArgs.indexOf(flag), 1, "--concurrency", value);
109
- }
110
- }
111
- if (missingOutput) {
112
- await allocateTrainingOutputParent(config.output.source);
113
- try {
114
- await mkdir(config.output.source, { mode: 0o700 });
115
- }
116
- catch (error) {
117
- if (error.code !== "EEXIST")
118
- throw error;
119
- }
120
- if (await realpath(config.output.source) !== config.output.source || !(await lstat(config.output.source)).isDirectory()) {
121
- throw Error("Training output must be a canonical directory");
122
- }
123
- }
124
- return { config, context: mapped, args: mappedArgs, ...(viewerPort === undefined ? {} : { viewerPort }) };
125
- };
@@ -1,14 +0,0 @@
1
- export interface TrainingDockerProcess {
2
- (args: readonly string[], options: {
3
- timeoutMs: number;
4
- signal?: AbortSignal;
5
- stdout?: (line: string) => void;
6
- stderr?: (line: string) => void;
7
- }): Promise<{
8
- code: number;
9
- stdout: string;
10
- stderr: string;
11
- }>;
12
- }
13
- /** Docker client only; no model executable runs on the host. */
14
- export declare const runTrainingDocker: TrainingDockerProcess;
@@ -1,70 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- /** Docker client only; no model executable runs on the host. */
3
- export const runTrainingDocker = (args, options) => new Promise((resolve, reject) => {
4
- if (options.signal?.aborted) {
5
- reject(Error("Training Docker operation cancelled"));
6
- return;
7
- }
8
- const child = spawn("docker", [...args], { shell: false, stdio: ["ignore", "pipe", "pipe"] });
9
- let stdout = "", stderr = "", failure;
10
- let forceClose;
11
- let settled = false;
12
- const pending = { stdout: "", stderr: "" };
13
- const stop = (message) => {
14
- failure ??= Error(message);
15
- child.kill("SIGKILL");
16
- forceClose ??= setTimeout(() => {
17
- // Releasing a stuck client lets the owner independently stop/verify the container.
18
- child.stdout.destroy();
19
- child.stderr.destroy();
20
- finish(null);
21
- }, 1000);
22
- };
23
- const abort = () => stop("Training Docker operation cancelled");
24
- const timer = setTimeout(() => stop("Training Docker operation exceeded deadline"), options.timeoutMs);
25
- options.signal?.addEventListener("abort", abort, { once: true });
26
- if (options.signal?.aborted)
27
- abort();
28
- const consume = (channel, chunk) => {
29
- pending[channel] += chunk;
30
- if (Buffer.byteLength(pending[channel]) > 1024 * 1024) {
31
- stop("Docker output exceeded bounded line size");
32
- return;
33
- }
34
- const lines = pending[channel].split("\n");
35
- pending[channel] = lines.pop();
36
- for (const line of lines) {
37
- options[channel]?.(line);
38
- if (channel === "stdout")
39
- stdout = options.stdout ? line : stdout + line + "\n";
40
- else
41
- stderr = options.stderr ? line : stderr + line + "\n";
42
- if (stdout.length + stderr.length > 2 * 1024 * 1024)
43
- stop("Docker output exceeded bounded capture size");
44
- }
45
- };
46
- child.stdout.setEncoding("utf8").on("data", (chunk) => consume("stdout", chunk));
47
- child.stderr.setEncoding("utf8").on("data", (chunk) => consume("stderr", chunk));
48
- child.once("error", (error) => { failure = error; });
49
- const finish = (code) => {
50
- if (settled)
51
- return;
52
- settled = true;
53
- clearTimeout(forceClose);
54
- clearTimeout(timer);
55
- options.signal?.removeEventListener("abort", abort);
56
- for (const channel of ["stdout", "stderr"])
57
- if (pending[channel]) {
58
- options[channel]?.(pending[channel]);
59
- if (channel === "stdout")
60
- stdout = options.stdout ? pending[channel] : stdout + pending[channel];
61
- else
62
- stderr = options.stderr ? pending[channel] : stderr + pending[channel];
63
- }
64
- if (failure)
65
- reject(failure);
66
- else
67
- resolve({ code: code ?? 1, stdout, stderr });
68
- };
69
- child.once("close", finish);
70
- });
@@ -1,38 +0,0 @@
1
- export declare const TRAINING_BROKER_ENTRYPOINT = "/opt/training/bin/train-broker";
2
- /** Same output directory is the same resumable run; different outputs never share a counter. */
3
- export declare const trainingRunRequestMount: (outputSource: string, args: readonly string[]) => string;
4
- /**
5
- * Disposable state of a broker-capable training container, all on tmpfs.
6
- *
7
- * The image root stays read-only and nothing here is a host bind, so a trial's
8
- * worker home, workspace, turn store, wake-acceptance store and ledgers are
9
- * on a filesystem that enforces unix ownership — which is what lets the slot
10
- * supervisor's worker-uid canaries mean anything (P0 §5: a host bind under
11
- * Docker Desktop or Colima silently ignores `chown`). The Grok realm is the
12
- * credential mount. The run request counter has its own persistent named volume.
13
- */
14
- export declare const trainingBrokerTmpfsTargets: (slots?: number) => readonly {
15
- path: string;
16
- size: string;
17
- mode: string;
18
- }[];
19
- /**
20
- * `docker create` arguments for the broker-capable training container.
21
- *
22
- * It starts as root with the *production* Daimon capability set rather than
23
- * the v1 path's `--cap-drop ALL` as the host user: the root entrypoint has to
24
- * provision uid-owned directories (`CAP_CHOWN`), let the native launcher
25
- * `setuid` to a worker (`CAP_SETUID`/`SETGID`), drop bounding sets
26
- * (`CAP_SETPCAP`), supervise dropped children (`CAP_KILL`) and read the
27
- * attested layout it does not own (`CAP_DAC_READ_SEARCH`). `CAP_FOWNER` is
28
- * deliberately absent, which is why every provisioning chmod reclaims the
29
- * inode first. Grok 1.0.34 runs every sandbox profile inside bubblewrap, so
30
- * the container also needs the pinned default-plus-userns seccomp profile and
31
- * AppArmor unconfined — the narrowest combination P0 found.
32
- */
33
- export declare const trainingBrokerSecurityArgs: (seccompProfileDirectory: string) => Promise<string[]>;
34
- export declare const trainingBrokerMounts: (broker: {
35
- realmVolume: string;
36
- bootstrap: string;
37
- declaration: string;
38
- }) => string[];
@@ -1,68 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, materializeDaimonGrokSeccompProfile } from "../../../shared/index.js";
3
- import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
4
- import { DAIMON_GROK_TURN_USAGE_LEDGER } from "../../../runtime/daimon/contractManifest.js";
5
- import { DAIMON_WAKE_FUSE_DIRECTORY } from "../../../runtime/daimon/config.js";
6
- import { TRAINING_BROKER_TMPDIR, TRAINING_GRANT_HOME_ROOT, TRAINING_INFERENCE_DIRECTORY, TRAINING_ROOT, trainingSlotDescriptors, TRAINING_TURN_STORE_ROOT, TRAINING_RUN_REQUEST_STORE, TRAINING_SUPERVISOR_DIRECTORY, TRAINING_WORKER_ROOT } from "../broker/paths.js";
7
- export const TRAINING_BROKER_ENTRYPOINT = "/opt/training/bin/train-broker";
8
- /** Same output directory is the same resumable run; different outputs never share a counter. */
9
- export const trainingRunRequestMount = (outputSource, args) => {
10
- const index = args.indexOf("--out"), output = args[index + 1];
11
- if (index < 0 || !output || args.lastIndexOf("--out") !== index)
12
- throw Error("Brokered training requires one --out directory");
13
- const identity = createHash("sha256").update(JSON.stringify([outputSource, output])).digest("hex");
14
- return `type=volume,src=spawnfile-training-budget-${identity},dst=${TRAINING_RUN_REQUEST_STORE}`;
15
- };
16
- /**
17
- * Disposable state of a broker-capable training container, all on tmpfs.
18
- *
19
- * The image root stays read-only and nothing here is a host bind, so a trial's
20
- * worker home, workspace, turn store, wake-acceptance store and ledgers are
21
- * on a filesystem that enforces unix ownership — which is what lets the slot
22
- * supervisor's worker-uid canaries mean anything (P0 §5: a host bind under
23
- * Docker Desktop or Colima silently ignores `chown`). The Grok realm is the
24
- * credential mount. The run request counter has its own persistent named volume.
25
- */
26
- export const trainingBrokerTmpfsTargets = (slots = 4) => [
27
- { path: "/tmp", size: "1g", mode: "1777" },
28
- { path: "/var/tmp", size: "256m", mode: "1777" },
29
- { path: "/work", size: "4g", mode: "0755" },
30
- { path: "/home/training", size: "1g", mode: "0755" },
31
- { path: TRAINING_ROOT, size: "64m", mode: "0755" },
32
- ...trainingSlotDescriptors(slots).map(p => ({ path: p.root, size: "4g", mode: "0711" })),
33
- { path: TRAINING_TURN_STORE_ROOT, size: "256m", mode: "0700" },
34
- { path: TRAINING_GRANT_HOME_ROOT, size: "64m", mode: "0755" },
35
- { path: TRAINING_INFERENCE_DIRECTORY, size: "64m", mode: "0755" },
36
- { path: TRAINING_SUPERVISOR_DIRECTORY, size: "16m", mode: "0755" },
37
- { path: TRAINING_WORKER_ROOT, size: "1g", mode: "0755" },
38
- { path: "/etc/daimon-engine-broker", size: "16m", mode: "0755" },
39
- { path: "/run/daimon-engine-broker", size: "64m", mode: "0755" },
40
- { path: TRAINING_BROKER_TMPDIR, size: "64m", mode: "0755" },
41
- { path: DAIMON_GROK_TURN_USAGE_LEDGER.directoryPath, size: "64m", mode: "0755" },
42
- { path: DAIMON_WAKE_FUSE_DIRECTORY, size: "16m", mode: "0755" }
43
- ];
44
- /**
45
- * `docker create` arguments for the broker-capable training container.
46
- *
47
- * It starts as root with the *production* Daimon capability set rather than
48
- * the v1 path's `--cap-drop ALL` as the host user: the root entrypoint has to
49
- * provision uid-owned directories (`CAP_CHOWN`), let the native launcher
50
- * `setuid` to a worker (`CAP_SETUID`/`SETGID`), drop bounding sets
51
- * (`CAP_SETPCAP`), supervise dropped children (`CAP_KILL`) and read the
52
- * attested layout it does not own (`CAP_DAC_READ_SEARCH`). `CAP_FOWNER` is
53
- * deliberately absent, which is why every provisioning chmod reclaims the
54
- * inode first. Grok 1.0.34 runs every sandbox profile inside bubblewrap, so
55
- * the container also needs the pinned default-plus-userns seccomp profile and
56
- * AppArmor unconfined — the narrowest combination P0 found.
57
- */
58
- export const trainingBrokerSecurityArgs = async (seccompProfileDirectory) => [
59
- "--user", "0:0",
60
- ...DAIMON_DOCKER_RUNTIME_SECURITY_ARGS,
61
- `--security-opt=seccomp=${await materializeDaimonGrokSeccompProfile(seccompProfileDirectory)}`,
62
- "--security-opt=apparmor=unconfined"
63
- ];
64
- export const trainingBrokerMounts = (broker) => [
65
- `type=volume,src=${broker.realmVolume},dst=${DAIMON_GROK_ENGINE_BROKER.credentialHomePath}`,
66
- `type=bind,src=${broker.bootstrap},dst=/var/lib/spawnfile/daimon/grok-bootstrap-auth,readonly`,
67
- `type=bind,src=${broker.declaration},dst=${TRAINING_ROOT}/training-broker.json,readonly`
68
- ];
@@ -1,5 +0,0 @@
1
- import { type TrainingContext } from "../contract.js";
2
- /** Resolve host-side subject policy; the public v1 context carries no sandbox authority. */
3
- export declare const assertTrainingSubjectIsolation: (config: {
4
- subjectIsolation?: "codex-native-sandbox";
5
- }, context: TrainingContext) => Promise<void>;
@@ -1,16 +0,0 @@
1
- import { getDaimonEngineDescriptor } from "../../../runtime/daimon/index.js";
2
- import { resolveDaimonEngine } from "../../../runtime/daimon/config.js";
3
- import { resolveTrainingContextGraph } from "../context.js";
4
- import { trainingContextSchema } from "../contract.js";
5
- /** Resolve host-side subject policy; the public v1 context carries no sandbox authority. */
6
- export const assertTrainingSubjectIsolation = async (config, context) => {
7
- if (config.subjectIsolation !== "codex-native-sandbox")
8
- return;
9
- const parsed = trainingContextSchema.parse(context);
10
- const { selected } = await resolveTrainingContextGraph(parsed.project.manifest, parsed.agent.id);
11
- const agent = selected.value;
12
- if (agent.runtime.name !== "daimon" || getDaimonEngineDescriptor(resolveDaimonEngine(agent))?.training.subject.isolation !== "native-sandbox" ||
13
- agent.runtime.options.codex_policy !== "workspace-no-network" || agent.execution?.sandbox?.mode !== "workspace") {
14
- throw Error("codex-native-sandbox subject isolation requires the selected training agent to use runtime daimon, engine codex, and strict codex_policy: workspace-no-network (execution.sandbox.mode: workspace)");
15
- }
16
- };
@@ -1,100 +0,0 @@
1
- ARG NATIVE_IMAGE
2
- ARG PYTHON_IMAGE
3
- FROM ${PYTHON_IMAGE} AS python
4
- FROM ${NATIVE_IMAGE} AS training
5
-
6
- # Both parents must use the same architecture and Debian release.
7
- COPY --from=python /usr/local /opt/python
8
- COPY --from=python /usr/lib/*-linux-gnu/libsqlite3.so.0* /opt/python/lib/
9
- # The bridge intentionally clears ambient environment variables. Register native
10
- # libraries in the image so Python extensions also load in that clean process.
11
- RUN echo /opt/python/lib > /etc/ld.so.conf.d/training-python.conf && ldconfig
12
-
13
- # Bookworm's distro library, shared by broker shell tools and direct clocked
14
- # Daimon children. Resolve the multiarch path at build time; never preload the image.
15
- RUN . /etc/os-release && test "$VERSION_CODENAME" = bookworm \
16
- && apt-get update && apt-get install --yes --no-install-recommends libfaketime=0.9.10-2.1 \
17
- && library="$(dpkg-query -L libfaketime | sed -n '\|/faketime/libfaketime\.so\.1$|p')" \
18
- && test -f "$library" \
19
- && install -d -o root -g root -m 0755 /usr/local/lib/daimon \
20
- && ln -s "$library" /usr/local/lib/daimon/libfaketime.so.1 \
21
- && chown -h root:root /usr/local/lib/daimon/libfaketime.so.1 \
22
- && rm -rf /var/lib/apt/lists/*
23
-
24
- # The broker-capable container runs on a read-only root, so the fixed Daimon
25
- # identities are baked here instead of being created by the entrypoint the way
26
- # the production organization image creates them. It depends on nothing from the
27
- # build context, so it sits first: it is the least frequently changing layer.
28
- RUN for fixed_uid in 2000 2100 2200 2201 2202 2203 2204 2205 2206 2207; do \
29
- groupadd -K GID_MIN=1 --gid "$fixed_uid" "daimon-$fixed_uid" \
30
- && useradd -K UID_MIN=1 --no-create-home --no-log-init --uid "$fixed_uid" --gid "$fixed_uid" \
31
- --home-dir /nonexistent --shell /usr/sbin/nologin "daimon-$fixed_uid"; \
32
- done
33
-
34
- # The sealed train and test datasets are bind-mounted UNDER /run/training/inputs, so this directory is
35
- # the ancestor every read of them must traverse, and it is the only inode in that chain the image owns.
36
- # Root-owned with no world bits, on the read-only root: uid 2200 is in neither the owner nor the group
37
- # class, so it loses search permission; a `unshare --map-root-user` namespace maps only uid 2200, so
38
- # CAP_DAC_OVERRIDE there cannot override an inode owned by real uid 0; and a fresh bind of the parent
39
- # re-exposes this same directory rather than the bytes under it. Nothing at runtime can widen it,
40
- # because the container root is read-only — the slot provisioning asserts the mode and refuses otherwise.
41
- RUN mkdir -p /run/training/inputs /run/training/output /run/training/slots \
42
- && chown 0:0 /run/training /run/training/output && chmod 0755 /run/training /run/training/output \
43
- && chown 0:2000 /run/training/inputs && chmod 0750 /run/training/inputs
44
-
45
- # Layers run from least to most frequently changing: locked dependencies, the
46
- # DSPy venv, bridge source, pinned executables, then distributions. Staged context
47
- # modes are already `a+rX`-closed (train/train-broker 0555), so late COPY layers need no RUN.
48
- COPY claude/package.json claude/package-lock.json /opt/training/claude/
49
- RUN cd /opt/training/claude && npm ci --omit=dev
50
-
51
- WORKDIR /opt/training/spawnfile
52
- COPY spawnfile/package.json spawnfile/package-lock.json ./
53
- RUN npm ci --omit=dev --ignore-scripts
54
-
55
- WORKDIR /opt/training/compiler
56
- COPY compiler/package.json compiler/package-lock.json ./
57
- RUN npm ci --omit=dev --ignore-scripts
58
-
59
- COPY spawnfile/dist/training/dspy/requirements.lock /opt/training/spawnfile/dist/training/dspy/requirements.lock
60
- RUN /opt/python/bin/python3 -m venv /opt/training/spawnfile/dist/training/dspy/.venv \
61
- && /opt/training/spawnfile/dist/training/dspy/.venv/bin/pip install --no-cache-dir -r /opt/training/spawnfile/dist/training/dspy/requirements.lock \
62
- && /opt/training/spawnfile/dist/training/dspy/.venv/bin/pip install --no-cache-dir setuptools==80.9.0
63
-
64
- # Exactly `chmod -R a+rX /opt/training`, but only entries that need a change are
65
- # touched, so unchanged lower-layer files are never copied up into a new layer.
66
- # This layer also puts the native parent's own pinned Grok and engine broker at the two fixed paths
67
- # `GROK_ENGINE_BROKER` names, exactly as a generated organization image does (`src/runtime/container.ts`).
68
- # No second build is introduced: both are installed from the parent's runtime install, and the slot
69
- # provisioning and the slot supervisor both refuse an executable that is not a manifest-pinned one.
70
- RUN find /opt/training \( \( -type d ! -perm -0555 \) -o \( ! -type d ! -type l \( ! -perm -0444 -o \( \( -perm -0100 -o -perm -0010 -o -perm -0001 \) ! -perm -0111 \) \) \) \) -exec chmod a+rX {} + \
71
- && mkdir -m 0755 /opt/training/bin /opt/training/integration \
72
- && mkdir -p /opt/daimon/bin \
73
- && install -o root -g root -m 0555 /opt/spawnfile/runtime-installs/daimon/bin/grok /usr/local/bin/grok \
74
- && install -o root -g root -m 0555 /opt/spawnfile/runtime-installs/daimon/bin/daimon-engine-broker /opt/daimon/bin/daimon-engine-broker \
75
- && ln -s /opt/training/claude/node_modules/.bin/claude /opt/training/bin/claude \
76
- && ln -s /opt/training/spawnfile/dist/cli/index.js /opt/training/bin/spawnfile \
77
- && mkdir -p /opt/training/integration/node_modules/@noopolis \
78
- && ln -s /opt/training/spawnfile /opt/training/integration/node_modules/spawnfile \
79
- && ln -s /opt/spawnfile/runtime-installs/daimon/node_modules/@noopolis/daimon /opt/training/integration/node_modules/@noopolis/daimon \
80
- && mkdir -p /opt/training/spawnfile/node_modules/@noopolis \
81
- && ln -s /opt/spawnfile/runtime-installs/daimon/node_modules/@noopolis/daimon /opt/training/spawnfile/node_modules/@noopolis/daimon
82
-
83
- COPY spawnfile/dist/training/dspy /opt/training/spawnfile/dist/training/dspy
84
- RUN /opt/training/spawnfile/dist/training/dspy/.venv/bin/pip install --no-deps --no-build-isolation -e /opt/training/spawnfile/dist/training/dspy \
85
- && find /opt/training/spawnfile/dist/training/dspy \( \( -type d ! -perm -0555 \) -o \( ! -type d ! -type l \( ! -perm -0444 -o \( \( -perm -0100 -o -perm -0010 -o -perm -0001 \) ! -perm -0111 \) \) \) \) -exec chmod a+rX {} +
86
-
87
- # No Grok binary: `spawnfile.training-container.v3` runs the native parent's pinned
88
- # /usr/local/bin/grok through the broker, so a second copy could only be an unattested build.
89
- COPY train /opt/training/bin/train
90
- COPY train-broker /opt/training/bin/train-broker
91
- COPY compiler/runtimes.yaml compiler/moltnet-releases.json /opt/training/compiler/
92
- COPY spawnfile/runtimes.yaml spawnfile/moltnet-releases.json /opt/training/spawnfile/
93
- COPY compiler/dist /opt/training/compiler/dist
94
- COPY integration /opt/training/integration
95
- COPY bootstrap /opt/training/bootstrap
96
- COPY spawnfile/dist /opt/training/spawnfile/dist
97
- ENV PATH=/opt/training/bin:/opt/training/spawnfile/dist/training/dspy/.venv/bin:/opt/spawnfile/runtime-installs/daimon/bin:/usr/local/bin:/usr/bin:/bin
98
- ENV HOME=/home/training
99
- WORKDIR /work
100
- ENTRYPOINT ["/opt/training/bin/train"]