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,128 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { randomUUID } from "node:crypto";
3
- import { appendFileSync } from "node:fs";
4
- import { chmod, chown, mkdir, readFile, rename, writeFile } from "node:fs/promises";
5
- import path from "node:path";
6
- import { promisify } from "node:util";
7
- import { SpawnfileError } from "../../../shared/index.js";
8
- import { MOUNT_AWARE_CLEAR_HELPER } from "../../containerDaimonBrokerRender.js";
9
- import { probeTrainingSiblingClock } from "./clockProbe.js";
10
- import { renderTrainingTaskClockAssertions } from "./taskClock.js";
11
- import { renderTrainingSlotProvisioning } from "./provisioning.js";
12
- import { runTrainingRootScript } from "./rootScript.js";
13
- import { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveTrainingCanaries } from "./receipt.js";
14
- import { DAIMON_ORGANIZATION_UID, TRAINING_HOST_BIND_DENY_PATHS, TRAINING_SEALED_DENY_PATHS, trainingSlotPaths, trainingWipeTargets, trainingClearTargets, TRAINING_SUPERVISOR_LOG } from "./paths.js";
15
- const run = promisify(execFile);
16
- const quote = (value) => `'${value.replace(/'/gu, `'"'"'`)}'`;
17
- export const createTrainingSlotRuntime = (options) => {
18
- const shell = options.shell ?? "/bin/bash";
19
- const logPath = options.logPath ?? TRAINING_SUPERVISOR_LOG;
20
- const p = trainingSlotPaths(options.registration.slot);
21
- const script = renderTrainingSlotProvisioning(options.registration).join("\n");
22
- const log = (line) => {
23
- const entry = `${new Date().toISOString()} ${line}\n`;
24
- process.stderr.write(`[slot-supervisor] ${entry}`);
25
- try {
26
- appendFileSync(logPath, entry, { mode: 0o640 });
27
- }
28
- catch { /* the log is diagnostics, never the gate */ }
29
- };
30
- const siblingClocks = Array.from({ length: options.declaration.slots }, (_, slot) => trainingSlotPaths(slot))
31
- .filter(peer => peer.slot !== p.slot).map(peer => peer.clockDirectory);
32
- const probe = (target, depth) => siblingClocks.includes(target)
33
- ? probeTrainingSiblingClock(p.slot, target)
34
- : probeTrainingWorker(options.registration.uid, target, depth);
35
- return {
36
- log,
37
- reset: signal => options.reset(p.slot, signal),
38
- wipe: async () => {
39
- // Root holds `CAP_CHOWN` and `CAP_DAC_READ_SEARCH` but not `CAP_DAC_OVERRIDE`, so it cannot delete
40
- // inside a directory it handed to the worker or the broker. Reclaim each tree first, then remove it.
41
- const script = renderTrainingSlotWipe(p.slot).join("\n");
42
- await runTrainingRootScript(script, { shell, maxBuffer: 1024 * 1024 }).catch((error) => {
43
- const detail = error;
44
- throw new SpawnfileError("runtime_error", `Training slot wipe failed: ${(detail.stderr ?? "").slice(-1024).trim() || "no diagnostic"}`);
45
- });
46
- },
47
- provision: async () => {
48
- const result = await runTrainingRootScript(script, { shell, maxBuffer: 8 * 1024 * 1024 }).catch((error) => {
49
- const detail = error;
50
- throw new SpawnfileError("runtime_error", `Training slot provisioning failed: ${(detail.stderr ?? detail.stdout ?? "").slice(-2048).trim()}`);
51
- });
52
- if (result.stdout.trim())
53
- log(`provisioning: ${result.stdout.trim().slice(-2048)}`);
54
- },
55
- canaries: async () => {
56
- await runTrainingRootScript(renderTrainingTaskClockAssertions(options.registration).join("\n"), { shell });
57
- return resolveTrainingCanaries({
58
- denyPaths: options.registration.denyPaths, probe, log, hostBindPaths: TRAINING_HOST_BIND_DENY_PATHS,
59
- sealedPaths: TRAINING_SEALED_DENY_PATHS,
60
- mountinfo: await readFile(`${options.procRoot ?? "/proc"}/self/mountinfo`, "utf8"),
61
- unenforcedBindPolicy: options.declaration.unenforcedBindPolicy
62
- });
63
- },
64
- nextGeneration: async () => {
65
- const previous = await readFile(p.generationFile, "utf8").catch(() => "");
66
- const parsed = Number.parseInt(JSON.parse(previous || "{}").generation ?? "0", 10);
67
- // Seeded from the wall clock so a container restart cannot hand out a generation an evaluator already accepted.
68
- const generation = Math.max(Number.isSafeInteger(parsed) && parsed > 0 ? parsed + 1 : 1, Math.floor(Date.now() / 1000));
69
- await writeFile(p.generationFile, `${JSON.stringify({ generation })}\n`, { mode: 0o600 });
70
- return generation;
71
- },
72
- publishReceipt: async ({ generation, nonce, canaries }) => {
73
- const receipt = buildTrainingSlotReceipt({
74
- slot: options.registration.slot, workerUid: options.registration.uid, generation, nonce,
75
- projectionSha256: options.projectionSha256, sandboxProfileSha256: options.registration.profileSha256,
76
- seccompProfileSha256: options.declaration.seccompProfileSha256,
77
- grokExecutableSha256: readGrokExecutableSha256(), canaries, createdAt: new Date()
78
- });
79
- const temporary = `${p.preflightReceipt}.${randomUUID()}.tmp`;
80
- await mkdir(path.dirname(p.preflightReceipt), { recursive: true });
81
- await writeFile(temporary, `${JSON.stringify(receipt)}\n`, { mode: 0o600, flag: "wx" });
82
- await chown(temporary, 0, DAIMON_ORGANIZATION_UID);
83
- await chmod(temporary, 0o640);
84
- await rename(temporary, p.preflightReceipt);
85
- return p.preflightReceipt;
86
- }
87
- };
88
- };
89
- /** Never remove or change the ownership/mode of a worker home or tmp: siblings attest those inodes. */
90
- export const renderTrainingSlotWipe = (slot) => {
91
- const p = trainingSlotPaths(slot);
92
- const worker = `setpriv --clear-groups --reuid=${p.workerUid} --regid=${p.workerUid} --inh-caps=-all --ambient-caps=-all --bounding-set=-all --`;
93
- return [
94
- ...MOUNT_AWARE_CLEAR_HELPER,
95
- // Attested roots must still be canonical before any recursive mutation.
96
- ...[p.workerHome, p.privateTmp, ...trainingWipeTargets(slot), ...trainingClearTargets(slot)].map(target => `if [ -e ${quote(target)} ] || [ -L ${quote(target)} ]; then if [ -L ${quote(target)} ] || [ "$(realpath ${quote(target)})" != ${quote(target)} ]; then echo "noncanonical slot wipe target" >&2; exit 1; fi; fi`),
97
- 'reclaim() { parent=$(dirname "$1"); chown 0:0 "$parent"; chmod u+rwx "$parent"; if [ -e "$1" ]; then chown -R 0:0 "$1"; chmod -R u+rwX "$1"; fi; }',
98
- ...trainingWipeTargets(slot).map(target => `reclaim ${quote(target)}; spawnfile_remove_tree ${quote(target)}`),
99
- ...trainingClearTargets(slot).map(target => `reclaim ${quote(target)}; spawnfile_clear_tree ${quote(target)}`),
100
- // Reclaim descendants only, then unlink as the worker, who owns the stable parent. No sibling inode changes.
101
- `for worker_entry in ${quote(p.workerHome)}/* ${quote(p.workerHome)}/.[!.]* ${quote(p.workerHome)}/..?*; do`,
102
- ' if [ ! -e "$worker_entry" ] && [ ! -L "$worker_entry" ]; then continue; fi',
103
- ` if [ "$worker_entry" = ${quote(p.privateTmp)} ]; then continue; fi`,
104
- ' if spawnfile_holds_mount "$worker_entry"; then echo "worker home contains a mount" >&2; exit 1; fi',
105
- ` chown -hR ${p.workerUid}:${p.workerUid} "$worker_entry"`,
106
- ` ${worker} /bin/sh -ceu 'if [ ! -L "$1" ]; then chmod -R u+rwX "$1"; fi; rm -rf "$1"' sh "$worker_entry"`,
107
- 'done',
108
- `for worker_entry in ${quote(p.privateTmp)}/* ${quote(p.privateTmp)}/.[!.]* ${quote(p.privateTmp)}/..?*; do`,
109
- ' if [ ! -e "$worker_entry" ] && [ ! -L "$worker_entry" ]; then continue; fi',
110
- ' if spawnfile_holds_mount "$worker_entry"; then echo "worker tmp contains a mount" >&2; exit 1; fi',
111
- ` chown -hR ${p.workerUid}:${p.workerUid} "$worker_entry"`,
112
- ` ${worker} /bin/sh -ceu 'if [ ! -L "$1" ]; then chmod -R u+rwX "$1"; fi; rm -rf "$1"' sh "$worker_entry"`,
113
- 'done'
114
- ];
115
- };
116
- /** A failed privilege drop is not evidence of denial; require a positive worker verdict. */
117
- export const probeTrainingWorker = async (uid, target, depth, execute = run) => {
118
- const q = quote(target);
119
- const reachable = depth === "enter" ? `test -r ${q} || test -x ${q} || ls -1 ${q} >/dev/null 2>&1` : `test -r ${q}`;
120
- const result = await execute("setpriv", ["--clear-groups", `--reuid=${uid}`, `--regid=${uid}`,
121
- "--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", "/bin/sh", "-c",
122
- `if ${reachable}; then echo reachable; else echo denied; fi`], { timeout: 10_000 });
123
- if (result.stdout.trim() === "denied")
124
- return true;
125
- if (result.stdout.trim() === "reachable")
126
- return false;
127
- throw new SpawnfileError("runtime_error", "Training worker canary returned no verified verdict");
128
- };
@@ -1,31 +0,0 @@
1
- /**
2
- * The syscalls a worker-uid namespace escape needs before it can even be
3
- * attempted: a new user namespace, a new mount namespace, and the mount and
4
- * unmount calls inside them.
5
- *
6
- * `clone`/`clone3` are deliberately absent. The pinned profile allows them only
7
- * under an argument filter, so a static "is it allowed" question has no honest
8
- * yes/no answer for them, and `unshare` already gates the route.
9
- */
10
- export declare const TRAINING_NAMESPACE_ROUTE_SYSCALLS: readonly ["unshare", "mount", "umount2", "setns"];
11
- /**
12
- * Whether the pinned seccomp profile lets the worker uid attempt a namespace
13
- * escape at all — an **unconditional** `SCMP_ACT_ALLOW`, with no
14
- * `includes.caps` (the container drops `CAP_SYS_ADMIN`) and no argument filter.
15
- *
16
- * This exists to keep one specific lie out of the slot receipt. When a probe
17
- * route cannot run, the honest record is *which layer refused it*: a syscall
18
- * the profile filters is a stronger denial than DAC and must be named as
19
- * `seccomp`, while the same syscall refused by a profile that allows it came
20
- * from the kernel or an LSM and must be named `kernel`. Merging the two into
21
- * "denied" would let a filtered-syscall run read as though DAC had held.
22
- */
23
- export declare const pinnedProfileAllowsNamespaceRoutes: (bytes?: string) => boolean;
24
- /**
25
- * What to blame when the worker uid cannot open the namespace a route needs.
26
- *
27
- * Derived, never guessed: seccomp and a DAC/LSM refusal both surface as
28
- * `EPERM`, so errno cannot tell them apart. The pinned profile can — Spawnfile
29
- * ships its bytes and the declaration binds their digest.
30
- */
31
- export declare const trainingNamespaceDenialMechanism: (bytes?: string) => "seccomp" | "kernel";
@@ -1,36 +0,0 @@
1
- import { DAIMON_GROK_SECCOMP_PROFILE_BYTES } from "../../../shared/daimonGrokSeccompProfile.js";
2
- /**
3
- * The syscalls a worker-uid namespace escape needs before it can even be
4
- * attempted: a new user namespace, a new mount namespace, and the mount and
5
- * unmount calls inside them.
6
- *
7
- * `clone`/`clone3` are deliberately absent. The pinned profile allows them only
8
- * under an argument filter, so a static "is it allowed" question has no honest
9
- * yes/no answer for them, and `unshare` already gates the route.
10
- */
11
- export const TRAINING_NAMESPACE_ROUTE_SYSCALLS = ["unshare", "mount", "umount2", "setns"];
12
- /**
13
- * Whether the pinned seccomp profile lets the worker uid attempt a namespace
14
- * escape at all — an **unconditional** `SCMP_ACT_ALLOW`, with no
15
- * `includes.caps` (the container drops `CAP_SYS_ADMIN`) and no argument filter.
16
- *
17
- * This exists to keep one specific lie out of the slot receipt. When a probe
18
- * route cannot run, the honest record is *which layer refused it*: a syscall
19
- * the profile filters is a stronger denial than DAC and must be named as
20
- * `seccomp`, while the same syscall refused by a profile that allows it came
21
- * from the kernel or an LSM and must be named `kernel`. Merging the two into
22
- * "denied" would let a filtered-syscall run read as though DAC had held.
23
- */
24
- export const pinnedProfileAllowsNamespaceRoutes = (bytes = DAIMON_GROK_SECCOMP_PROFILE_BYTES) => {
25
- const profile = JSON.parse(bytes);
26
- return TRAINING_NAMESPACE_ROUTE_SYSCALLS.every((syscall) => (profile.syscalls ?? []).some((rule) => (rule.names ?? []).includes(syscall) && rule.action === "SCMP_ACT_ALLOW"
27
- && (rule.includes?.caps ?? []).length === 0 && (rule.args ?? []).length === 0));
28
- };
29
- /**
30
- * What to blame when the worker uid cannot open the namespace a route needs.
31
- *
32
- * Derived, never guessed: seccomp and a DAC/LSM refusal both surface as
33
- * `EPERM`, so errno cannot tell them apart. The pinned profile can — Spawnfile
34
- * ships its bytes and the declaration binds their digest.
35
- */
36
- export const trainingNamespaceDenialMechanism = (bytes) => pinnedProfileAllowsNamespaceRoutes(bytes) ? "kernel" : "seccomp";
@@ -1,108 +0,0 @@
1
- export declare const TRAINING_SUPERVISOR_PROTOCOL: "spawnfile.training-slot-supervisor.v2";
2
- export declare const TRAINING_SUPERVISOR_MAX_REQUEST_BYTES = 4096;
3
- /**
4
- * Everything the recycle verb does to the running slot. It is an interface so
5
- * the state machine below can be tested without Docker, a broker, or root:
6
- * the order of these calls *is* the contract, and getting it wrong (wiping
7
- * before draining, writing a receipt before the canaries) is exactly the class
8
- * of bug a live check finds far too late.
9
- */
10
- export interface TrainingSlotRuntime {
11
- /** Broker refuses active turns and live workers, then resets only this slot clock/turn store. */
12
- reset(signal: AbortSignal): Promise<void>;
13
- /** Clears this slot while preserving the worker-home/tmp identities attested by sibling turns. */
14
- wipe(): Promise<void>;
15
- /** Reuses the audited worker provisioning; shared broker files are untouched. */
16
- provision(): Promise<void>;
17
- /** Worker-uid denial canaries over every deny path; throws when one is still reachable. */
18
- canaries(): Promise<{
19
- path: string;
20
- method: "sandboxed-read";
21
- result: "denied";
22
- }[]>;
23
- /** Writes the slot preflight receipt v2 atomically, readable by the organization uid. */
24
- publishReceipt(input: {
25
- generation: number;
26
- nonce: string;
27
- canaries: readonly {
28
- path: string;
29
- method: "sandboxed-read";
30
- result: "denied";
31
- }[];
32
- }): Promise<string>;
33
- /** Monotonic per-slot generation; strictly greater than every generation this slot has ever published. */
34
- nextGeneration(): Promise<number>;
35
- log(line: string): void;
36
- }
37
- /**
38
- * Bringing a slot up, receipt included — the only way this container starts one.
39
- *
40
- * `provision → start` alone was the whole start-up path, and `canaries` and
41
- * `publishReceipt` were reachable only from `recycle`. The first trial of every
42
- * run therefore executed with no worker-uid denial evidence at all, and a
43
- * refusal that should have cost nothing surfaced only after that trial's spend.
44
- * Trial 1 is exactly the trial whose sealed datasets have never been probed, so
45
- * it is the one that most needs the evidence.
46
- *
47
- * The receipt this publishes carries generation 1..N and a nonce of the
48
- * container's own, so an evaluator that reads `preflight.json` before its first
49
- * wake sees the same `noopolis.daimon.grok-slot-preflight.v2` shape a recycle
50
- * publishes, from the same canaries.
51
- */
52
- export declare const startTrainingSlot: (runtime: TrainingSlotRuntime, nonce: string) => Promise<{
53
- generation: number;
54
- receipt: string;
55
- canaries: number;
56
- }>;
57
- export interface TrainingSlotSupervisorOptions {
58
- runtimes: readonly TrainingSlotRuntime[];
59
- /** Only this uid may recycle. Training, DSPy and the judges all run as it; every worker uid is refused. */
60
- organizationUid?: number;
61
- drainTimeoutMs?: number;
62
- now?: () => number;
63
- }
64
- export interface TrainingRecycleResult {
65
- ok: true;
66
- verb: "recycle";
67
- slot: number;
68
- generation: number;
69
- nonce: string;
70
- receipt: string;
71
- durationMs: number;
72
- }
73
- /**
74
- * The single-verb root slot supervisor.
75
- *
76
- * One verb, slot and nonce, no path or command ever supplied by the caller: the
77
- * whole point of D4 is that recycling replays the container's own audited
78
- * provisioning rather than exposing a root file-system API to the evaluator.
79
- * Recycles of the same slot are serialized — a second caller waits rather than interleaving a
80
- * wipe with a provision.
81
- */
82
- export declare const createTrainingSlotSupervisor: (options: TrainingSlotSupervisorOptions) => {
83
- /** Serialized: a recycle already in flight completes before the next one starts. */
84
- recycle: (slot: number, nonce: string, peerUid: number) => Promise<TrainingRecycleResult>;
85
- };
86
- export type TrainingSlotSupervisor = ReturnType<typeof createTrainingSlotSupervisor>;
87
- /**
88
- * Re-establishes, and re-checks on every connection, the only uid gate this
89
- * socket has.
90
- *
91
- * The scope asked for `SO_PEERCRED`. Node exposes no ancillary-data or
92
- * peer-credential API on a unix socket and no native addon ships in this
93
- * image, so the gate is the socket node itself, which the kernel enforces on
94
- * `connect()` exactly as it does on `open()`: the node is
95
- * `root:<organization gid> 0660` inside a root-owned `0711` directory on
96
- * tmpfs, where modes *are* enforced. Only uid 2000 (and root) can connect;
97
- * uid 2200 gets `EACCES` before a byte is written. A `0600` root-owned socket
98
- * — the literal reading of the scope — would deny the one caller it exists
99
- * for, so this is the same restriction stated in the only mechanism available.
100
- * The directory holds no write permission for anyone but root, so the node
101
- * cannot be replaced by a laxer one.
102
- */
103
- export declare const assertTrainingSupervisorSocketIdentity: (socketPath: string, organizationGid: number) => void;
104
- /**
105
- * Line-delimited JSON over a unix socket. Every request is bounded,
106
- * single-line, and must name the protocol, the one verb and nothing else.
107
- */
108
- export declare const serveTrainingSlotSupervisor: (supervisor: TrainingSlotSupervisor, socketPath: string, log: (line: string) => void, organizationUid?: number) => import("net").Server;
@@ -1,172 +0,0 @@
1
- import { chmodSync, chownSync, lstatSync, rmSync } from "node:fs";
2
- import { createServer } from "node:net";
3
- import path from "node:path";
4
- import { SpawnfileError } from "../../../shared/index.js";
5
- import { DAIMON_ORGANIZATION_UID } from "./paths.js";
6
- export const TRAINING_SUPERVISOR_PROTOCOL = "spawnfile.training-slot-supervisor.v2";
7
- export const TRAINING_SUPERVISOR_MAX_REQUEST_BYTES = 4_096;
8
- const NONCE = /^[a-f0-9]{64}$/u;
9
- /**
10
- * Bringing a slot up, receipt included — the only way this container starts one.
11
- *
12
- * `provision → start` alone was the whole start-up path, and `canaries` and
13
- * `publishReceipt` were reachable only from `recycle`. The first trial of every
14
- * run therefore executed with no worker-uid denial evidence at all, and a
15
- * refusal that should have cost nothing surfaced only after that trial's spend.
16
- * Trial 1 is exactly the trial whose sealed datasets have never been probed, so
17
- * it is the one that most needs the evidence.
18
- *
19
- * The receipt this publishes carries generation 1..N and a nonce of the
20
- * container's own, so an evaluator that reads `preflight.json` before its first
21
- * wake sees the same `noopolis.daimon.grok-slot-preflight.v2` shape a recycle
22
- * publishes, from the same canaries.
23
- */
24
- export const startTrainingSlot = async (runtime, nonce) => {
25
- const canaries = await runtime.canaries();
26
- const generation = await runtime.nextGeneration();
27
- const receipt = await runtime.publishReceipt({ generation, nonce, canaries });
28
- runtime.log(`slot start generation=${generation} canaries=${canaries.length} receipt=${receipt}`);
29
- return { generation, receipt, canaries: canaries.length };
30
- };
31
- /**
32
- * The single-verb root slot supervisor.
33
- *
34
- * One verb, slot and nonce, no path or command ever supplied by the caller: the
35
- * whole point of D4 is that recycling replays the container's own audited
36
- * provisioning rather than exposing a root file-system API to the evaluator.
37
- * Recycles of the same slot are serialized — a second caller waits rather than interleaving a
38
- * wipe with a provision.
39
- */
40
- export const createTrainingSlotSupervisor = (options) => {
41
- const organizationUid = options.organizationUid ?? DAIMON_ORGANIZATION_UID;
42
- const drainTimeoutMs = options.drainTimeoutMs ?? 120_000;
43
- const now = options.now ?? Date.now;
44
- const queues = new Map();
45
- const recycle = async (slot, nonce, peerUid) => {
46
- if (peerUid !== organizationUid)
47
- throw new SpawnfileError("validation_error", `Grok slot recycle refused for uid ${peerUid}`);
48
- if (!NONCE.test(nonce))
49
- throw new SpawnfileError("validation_error", "Grok slot recycle requires a 32-byte hex nonce");
50
- if (!Number.isInteger(slot) || slot < 0 || slot >= options.runtimes.length)
51
- throw new SpawnfileError("validation_error", "Grok slot recycle requires a declared slot index");
52
- const runtime = options.runtimes[slot];
53
- const started = now();
54
- const controller = new AbortController();
55
- const timer = setTimeout(() => controller.abort(), drainTimeoutMs);
56
- try {
57
- await runtime.reset(controller.signal);
58
- }
59
- finally {
60
- clearTimeout(timer);
61
- }
62
- await runtime.wipe();
63
- await runtime.provision();
64
- const canaries = await runtime.canaries();
65
- const generation = await runtime.nextGeneration();
66
- const receipt = await runtime.publishReceipt({ generation, nonce, canaries });
67
- const durationMs = now() - started;
68
- runtime.log(`recycle generation=${generation} canaries=${canaries.length} durationMs=${durationMs}`);
69
- return { ok: true, verb: "recycle", slot, generation, nonce, receipt, durationMs };
70
- };
71
- return {
72
- /** Serialized: a recycle already in flight completes before the next one starts. */
73
- recycle: (slot, nonce, peerUid) => {
74
- const next = (queues.get(slot) ?? Promise.resolve()).then(() => recycle(slot, nonce, peerUid));
75
- queues.set(slot, next.catch(() => undefined));
76
- return next;
77
- }
78
- };
79
- };
80
- const failure = (message) => `${JSON.stringify({ v: TRAINING_SUPERVISOR_PROTOCOL, ok: false, error: message })}\n`;
81
- /**
82
- * Re-establishes, and re-checks on every connection, the only uid gate this
83
- * socket has.
84
- *
85
- * The scope asked for `SO_PEERCRED`. Node exposes no ancillary-data or
86
- * peer-credential API on a unix socket and no native addon ships in this
87
- * image, so the gate is the socket node itself, which the kernel enforces on
88
- * `connect()` exactly as it does on `open()`: the node is
89
- * `root:<organization gid> 0660` inside a root-owned `0711` directory on
90
- * tmpfs, where modes *are* enforced. Only uid 2000 (and root) can connect;
91
- * uid 2200 gets `EACCES` before a byte is written. A `0600` root-owned socket
92
- * — the literal reading of the scope — would deny the one caller it exists
93
- * for, so this is the same restriction stated in the only mechanism available.
94
- * The directory holds no write permission for anyone but root, so the node
95
- * cannot be replaced by a laxer one.
96
- */
97
- export const assertTrainingSupervisorSocketIdentity = (socketPath, organizationGid) => {
98
- const directory = lstatSync(path.posix.dirname(socketPath));
99
- if (!directory.isDirectory() || directory.uid !== 0 || directory.gid !== 0 || (directory.mode & 0o777) !== 0o711) {
100
- throw new SpawnfileError("runtime_error", "The slot supervisor socket directory must be root-owned 0711");
101
- }
102
- const node = lstatSync(socketPath);
103
- if (!node.isSocket() || node.uid !== 0 || node.gid !== organizationGid || (node.mode & 0o777) !== 0o660) {
104
- throw new SpawnfileError("runtime_error", "The slot supervisor socket must be root-owned, organization-group 0660");
105
- }
106
- };
107
- /**
108
- * Line-delimited JSON over a unix socket. Every request is bounded,
109
- * single-line, and must name the protocol, the one verb and nothing else.
110
- */
111
- export const serveTrainingSlotSupervisor = (supervisor, socketPath, log, organizationUid = DAIMON_ORGANIZATION_UID) => {
112
- const server = createServer((socket) => {
113
- let peerUid;
114
- try {
115
- assertTrainingSupervisorSocketIdentity(socketPath, organizationUid);
116
- peerUid = organizationUid;
117
- }
118
- catch (error) {
119
- log(`refusing a connection on an unverified supervisor socket: ${error instanceof Error ? error.message : "unknown"}`);
120
- }
121
- let buffer = "", settled = false;
122
- socket.setTimeout(600_000, () => socket.destroy());
123
- const answer = (line) => { settled = true; socket.end(line); };
124
- socket.on("data", (chunk) => {
125
- if (settled)
126
- return;
127
- buffer += chunk.toString("utf8");
128
- if (Buffer.byteLength(buffer) > TRAINING_SUPERVISOR_MAX_REQUEST_BYTES) {
129
- answer(failure("request too large"));
130
- return;
131
- }
132
- const newline = buffer.indexOf("\n");
133
- if (newline < 0)
134
- return;
135
- const line = buffer.slice(0, newline);
136
- let request;
137
- try {
138
- request = JSON.parse(line);
139
- }
140
- catch {
141
- answer(failure("request is not JSON"));
142
- return;
143
- }
144
- if (!request || typeof request !== "object" || Array.isArray(request) || request.v !== TRAINING_SUPERVISOR_PROTOCOL || request.verb !== "recycle" || typeof request.nonce !== "string"
145
- || typeof request.slot !== "number" || Object.keys(request).length !== 4) {
146
- answer(failure("unsupported request"));
147
- return;
148
- }
149
- if (peerUid === undefined) {
150
- answer(failure("peer identity is unavailable"));
151
- return;
152
- }
153
- supervisor.recycle(request.slot, request.nonce, peerUid)
154
- .then((result) => answer(`${JSON.stringify({ v: TRAINING_SUPERVISOR_PROTOCOL, ...result })}\n`))
155
- .catch((error) => {
156
- const message = error instanceof Error ? error.message : "recycle failed";
157
- log(`recycle failed: ${message}`);
158
- answer(failure(message));
159
- });
160
- });
161
- socket.on("error", () => socket.destroy());
162
- });
163
- rmSync(socketPath, { force: true });
164
- server.listen(socketPath, () => {
165
- chownSync(socketPath, 0, 0);
166
- chmodSync(socketPath, 0o660);
167
- chownSync(socketPath, 0, organizationUid);
168
- assertTrainingSupervisorSocketIdentity(socketPath, organizationUid);
169
- log(`slot supervisor listening on ${socketPath}`);
170
- });
171
- return server;
172
- };
@@ -1,5 +0,0 @@
1
- import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
2
- /** Reclaim only the clock subtree before the shared program clears the control root at startup. */
3
- export declare const renderTrainingTaskClockReset: () => string[];
4
- /** Before a receipt, bind the actual installed bytes and worker access to the clocked projection. */
5
- export declare const renderTrainingTaskClockAssertions: (registration: DaimonGrokRegistration) => string[];
@@ -1,41 +0,0 @@
1
- import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
2
- import { SpawnfileError } from "../../../shared/index.js";
3
- import { resolveDaimonGrokClockedWorkerConfig } from "../../../runtime/daimon/grokWorkerContract.js";
4
- const clock = DAIMON_GROK_ENGINE_BROKER.worker.taskClock;
5
- const quote = (value) => `'${value.replace(/'/gu, `'"'"'`)}'`;
6
- /** Reclaim only the clock subtree before the shared program clears the control root at startup. */
7
- export const renderTrainingTaskClockReset = () => [
8
- `test ! -L ${quote(clock.rootDirectoryPath)}`,
9
- `if [ -d ${quote(clock.rootDirectoryPath)} ]; then chown -R 0:0 ${quote(clock.rootDirectoryPath)}; chmod -R u+rwX ${quote(clock.rootDirectoryPath)}; fi`
10
- ];
11
- /** Before a receipt, bind the actual installed bytes and worker access to the clocked projection. */
12
- export const renderTrainingTaskClockAssertions = (registration) => {
13
- const pin = resolveDaimonGrokClockedWorkerConfig(registration.model, registration.reasoningEffort, registration.slot).sha256;
14
- const directoryPath = clock.slotDirectoryPattern.replace("{slot}", String(registration.slot));
15
- const timestampFilePath = clock.slotFilePattern.replace("{slot}", String(registration.slot));
16
- if (registration.configVariant !== "clocked" || registration.configSha256 !== pin) {
17
- throw new SpawnfileError("runtime_error", "Training slot requires the pinned clocked worker config");
18
- }
19
- const worker = [
20
- `test -r ${quote(timestampFilePath)}`, `test ! -w ${quote(timestampFilePath)}`,
21
- `test -x ${quote(directoryPath)}`, `test ! -w ${quote(directoryPath)}`,
22
- `test -r ${quote(clock.preloadPath)}`
23
- ].join(" && ");
24
- return [
25
- `test ! -L ${quote(directoryPath)} && test -d ${quote(directoryPath)}`,
26
- `test ! -L ${quote(timestampFilePath)} && test -f ${quote(timestampFilePath)}`,
27
- `test "$(stat -c '%u:%g %a' ${quote(directoryPath)})" = "${clock.ownerUid}:${clock.ownerUid} ${clock.directoryMode.toString(8)}"`,
28
- `test "$(stat -c '%u:%g %a %h' ${quote(timestampFilePath)})" = "${clock.ownerUid}:${clock.ownerUid} ${clock.fileMode.toString(8)} 1"`,
29
- `test "$(sha256sum ${quote(`${registration.grokHome}/config.toml`)} | cut -d ' ' -f1)" = ${quote(pin)}`,
30
- // The read-only image bakes both the fixed symlink and the distro target. Refuse writable or
31
- // non-root-owned ancestors/targets; a missing library must never masquerade as a working clock.
32
- "node <<'SPAWNFILE_TASK_CLOCK_LIBRARY'",
33
- "const fs = require('node:fs'), path = require('node:path');",
34
- `const preload = ${JSON.stringify(clock.preloadPath)};`,
35
- "const link = fs.lstatSync(preload); if (!link.isSymbolicLink() || link.uid !== 0 || link.gid !== 0) throw new Error('unsafe task clock preload link');",
36
- "const library = fs.realpathSync(preload); if (!/^\\/usr\\/lib\\/(x86_64|aarch64)-linux-gnu\\/faketime\\/libfaketime\\.so\\.1$/.test(library) || !fs.statSync(library).isFile()) throw new Error('unexpected task clock library');",
37
- "for (const root of [path.dirname(preload), library]) { for (let at = root;; at = path.dirname(at)) { const info = fs.lstatSync(at); if (info.isSymbolicLink() || info.uid !== 0 || info.gid !== 0 || (info.mode & 0o022)) throw new Error(`unsafe task clock library path: ${at}`); if (at === '/') break; } }",
38
- "SPAWNFILE_TASK_CLOCK_LIBRARY",
39
- `setpriv --clear-groups --reuid ${registration.uid} --regid ${registration.uid} --inh-caps=-all --ambient-caps=-all --bounding-set=-all -- /bin/sh -ceu ${quote(worker)}`
40
- ];
41
- };
@@ -1,54 +0,0 @@
1
- import { z } from "zod";
2
- /** Fixed libfaketime symlink installed and mode-verified by the training image. */
3
- export declare const TRAINING_FAKETIME_LIBRARY_PATH: "/usr/local/lib/daimon/libfaketime.so.1";
4
- export declare const trainingImageSchema: z.ZodString;
5
- export declare const trainingContainerConfigSchema: z.ZodObject<{
6
- version: z.ZodEnum<{
7
- "spawnfile.training-container.v1": "spawnfile.training-container.v1";
8
- "spawnfile.training-container.v3": "spawnfile.training-container.v3";
9
- "spawnfile.training-container.v4": "spawnfile.training-container.v4";
10
- }>;
11
- slots: z.ZodDefault<z.ZodNumber>;
12
- dockerContext: z.ZodString;
13
- inputs: z.ZodArray<z.ZodObject<{
14
- source: z.ZodString;
15
- destination: z.ZodString;
16
- }, z.core.$strict>>;
17
- output: z.ZodObject<{
18
- source: z.ZodString;
19
- destination: z.ZodLiteral<"/run/training/output">;
20
- }, z.core.$strict>;
21
- auth: z.ZodArray<z.ZodObject<{
22
- source: z.ZodString;
23
- provider: z.ZodEnum<{
24
- codex: "codex";
25
- claude: "claude";
26
- }>;
27
- }, z.core.$strict>>;
28
- evaluatorRoutes: z.ZodOptional<z.ZodArray<z.ZodObject<{
29
- purpose: z.ZodEnum<{
30
- decisions: "decisions";
31
- extraction: "extraction";
32
- proposals: "proposals";
33
- }>;
34
- provider: z.ZodEnum<{
35
- "codex-subscription": "codex-subscription";
36
- typesafe: "typesafe";
37
- }>;
38
- model: z.ZodString;
39
- maxRequests: z.ZodNumber;
40
- maxSpendUsd: z.ZodOptional<z.ZodNumber>;
41
- }, z.core.$strict>>>;
42
- evaluatorSecrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
43
- provider: z.ZodLiteral<"typesafe">;
44
- source: z.ZodString;
45
- }, z.core.$strict>>>;
46
- subjectIsolation: z.ZodOptional<z.ZodLiteral<"codex-native-sandbox">>;
47
- broker: z.ZodOptional<z.ZodObject<{
48
- engine: z.ZodLiteral<"grok">;
49
- realmVolume: z.ZodString;
50
- bootstrap: z.ZodString;
51
- declaration: z.ZodString;
52
- }, z.core.$strict>>;
53
- }, z.core.$strict>;
54
- export type TrainingContainerConfig = z.infer<typeof trainingContainerConfigSchema>;
@@ -1,52 +0,0 @@
1
- import { DAIMON_BROKER_ENGINE_ID } from "../../../runtime/daimon/index.js";
2
- import path from "node:path";
3
- import { z } from "zod";
4
- import { trainingEvaluatorRoutesSchema, trainingEvaluatorSecretsSchema } from "./evaluators.js";
5
- /** Fixed libfaketime symlink installed and mode-verified by the training image. */
6
- export const TRAINING_FAKETIME_LIBRARY_PATH = "/usr/local/lib/daimon/libfaketime.so.1";
7
- const hostPath = z.string().min(1).refine((value) => path.isAbsolute(value) && !/[,\r\n\0]/u.test(value), "Expected an absolute bind path");
8
- const inputPath = z.string().regex(/^\/run\/training\/inputs\/[A-Za-z0-9._/-]+$/u).refine((value) => path.posix.normalize(value) === value && !value.endsWith("/"));
9
- export const trainingImageSchema = z.string().regex(/^(?:sha256:[a-f0-9]{64}|[A-Za-z0-9][A-Za-z0-9._:/-]*@sha256:[a-f0-9]{64})$/u);
10
- const brokerLaunchSchema = z.object({
11
- engine: z.literal(DAIMON_BROKER_ENGINE_ID),
12
- /** The named Docker volume holding the training Grok realm: `auth.json` and the broker credential journal, nothing else. */
13
- realmVolume: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u),
14
- /** Host leaf of the dedicated training Grok login. Never the desktop `~/.grok/auth.json`. */
15
- bootstrap: hostPath,
16
- /** `spawnfile.training-broker.v2`, written beside the launch config and bound read-only into the container. */
17
- declaration: hostPath
18
- }).strict();
19
- export const trainingContainerConfigSchema = z.object({
20
- version: z.enum(["spawnfile.training-container.v1", "spawnfile.training-container.v3", "spawnfile.training-container.v4"]),
21
- slots: z.number().int().min(1).max(8).default(4),
22
- dockerContext: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u),
23
- inputs: z.array(z.object({ source: hostPath, destination: inputPath }).strict()).min(1).max(64),
24
- output: z.object({ source: hostPath, destination: z.literal("/run/training/output") }).strict(),
25
- auth: z.array(z.object({ source: hostPath, provider: z.enum(["codex", "claude"]) }).strict()).max(2),
26
- evaluatorRoutes: trainingEvaluatorRoutesSchema.optional(),
27
- evaluatorSecrets: trainingEvaluatorSecretsSchema(hostPath).optional(),
28
- subjectIsolation: z.literal("codex-native-sandbox").optional(),
29
- /** Present only on `spawnfile.training-container.v4`: the brokered Grok slot this container runs as root. */
30
- broker: brokerLaunchSchema.optional()
31
- }).strict().superRefine((value, context) => {
32
- if (value.evaluatorSecrets && !value.broker && !value.subjectIsolation)
33
- context.addIssue({ code: "custom", message: "Evaluator secrets require brokered v4 isolation or explicit codex-native-sandbox subject isolation" });
34
- if (value.subjectIsolation && value.version !== "spawnfile.training-container.v1")
35
- context.addIssue({ code: "custom", message: "Codex native subject isolation requires a non-brokered v1 launch" });
36
- if (value.subjectIsolation && !value.evaluatorRoutes?.some(route => route.provider === "typesafe"))
37
- context.addIssue({ code: "custom", message: "Codex native subject isolation requires a TypeSafe evaluator route" });
38
- if (value.evaluatorSecrets && !value.evaluatorRoutes?.some(route => route.provider === "typesafe")) {
39
- context.addIssue({ code: "custom", message: "TypeSafe secret requires a declared evaluator route" });
40
- }
41
- if (value.version === "spawnfile.training-container.v3")
42
- context.addIssue({ code: "custom", message: "Training-container v3 is unsupported; migrate to v4 with slots: 1" });
43
- const destinations = value.inputs.map((entry) => entry.destination);
44
- if (destinations.some((entry, index) => destinations.some((other, otherIndex) => otherIndex !== index && (entry === other || entry.startsWith(`${other}/`))))) {
45
- context.addIssue({ code: "custom", message: "Input destinations must not overlap" });
46
- }
47
- if (new Set(value.auth.map((entry) => entry.provider)).size !== value.auth.length)
48
- context.addIssue({ code: "custom", message: "Duplicate auth provider" });
49
- if ((value.version === "spawnfile.training-container.v4") !== (value.broker !== undefined)) {
50
- context.addIssue({ code: "custom", message: "Only spawnfile.training-container.v4 declares broker slots; migrate v3 by setting version to v4 and slots to 1" });
51
- }
52
- });