@atomic-chat/core 0.5.1 → 0.13.2

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 (970) hide show
  1. package/README.md +22 -0
  2. package/dist/app-daemon.js +20 -67
  3. package/dist/app-daemon.js.map +1 -1
  4. package/dist/backend/advisor/advisor.d.ts +132 -0
  5. package/dist/backend/advisor/advisor.js +537 -0
  6. package/dist/backend/advisor/advisor.js.map +1 -0
  7. package/dist/backend/advisor/index.d.ts +6 -0
  8. package/dist/backend/advisor/index.js +7 -0
  9. package/dist/backend/advisor/index.js.map +1 -0
  10. package/dist/backend/advisor/policy.d.ts +81 -0
  11. package/dist/backend/advisor/policy.js +154 -0
  12. package/dist/backend/advisor/policy.js.map +1 -0
  13. package/dist/backend/catalog/archive.d.ts +21 -7
  14. package/dist/backend/catalog/archive.js +57 -17
  15. package/dist/backend/catalog/archive.js.map +1 -1
  16. package/dist/backend/catalog/bundled-manifest-baseline.js +42 -26
  17. package/dist/backend/catalog/bundled-manifest-baseline.js.map +1 -1
  18. package/dist/backend/catalog/cuda-family.d.ts +12 -2
  19. package/dist/backend/catalog/cuda-family.js +30 -7
  20. package/dist/backend/catalog/cuda-family.js.map +1 -1
  21. package/dist/backend/catalog/index.d.ts +5 -0
  22. package/dist/backend/catalog/index.js +5 -0
  23. package/dist/backend/catalog/index.js.map +1 -1
  24. package/dist/backend/catalog/manifest.d.ts +5 -3
  25. package/dist/backend/catalog/manifest.js +12 -9
  26. package/dist/backend/catalog/manifest.js.map +1 -1
  27. package/dist/backend/catalog/migrate.d.ts +8 -6
  28. package/dist/backend/catalog/migrate.js +26 -15
  29. package/dist/backend/catalog/migrate.js.map +1 -1
  30. package/dist/backend/catalog/prism-catalog.d.ts +42 -0
  31. package/dist/backend/catalog/prism-catalog.js +101 -0
  32. package/dist/backend/catalog/prism-catalog.js.map +1 -0
  33. package/dist/backend/catalog/prism-manifest-baseline.d.ts +2 -0
  34. package/dist/backend/catalog/prism-manifest-baseline.js +11 -0
  35. package/dist/backend/catalog/prism-manifest-baseline.js.map +1 -0
  36. package/dist/backend/catalog/prism-manifest-baseline.json +134 -0
  37. package/dist/backend/catalog/prism-manifest.d.ts +90 -0
  38. package/dist/backend/catalog/prism-manifest.js +171 -0
  39. package/dist/backend/catalog/prism-manifest.js.map +1 -0
  40. package/dist/backend/catalog/turboquant-catalog.d.ts +60 -0
  41. package/dist/backend/catalog/turboquant-catalog.js +162 -0
  42. package/dist/backend/catalog/turboquant-catalog.js.map +1 -0
  43. package/dist/backend/catalog/turboquant-index.d.ts +104 -0
  44. package/dist/backend/catalog/turboquant-index.js +260 -0
  45. package/dist/backend/catalog/turboquant-index.js.map +1 -0
  46. package/dist/backend/index.d.ts +1 -0
  47. package/dist/backend/index.js +1 -0
  48. package/dist/backend/index.js.map +1 -1
  49. package/dist/backend/install/runtime-backend.d.ts +6 -6
  50. package/dist/backend/install/runtime-backend.js +23 -20
  51. package/dist/backend/install/runtime-backend.js.map +1 -1
  52. package/dist/backend/install/service.d.ts +106 -5
  53. package/dist/backend/install/service.js +247 -21
  54. package/dist/backend/install/service.js.map +1 -1
  55. package/dist/backend/installed/bundled.d.ts +19 -0
  56. package/dist/backend/installed/bundled.js +45 -0
  57. package/dist/backend/installed/bundled.js.map +1 -0
  58. package/dist/backend/installed/index.d.ts +1 -0
  59. package/dist/backend/installed/index.js +1 -0
  60. package/dist/backend/installed/index.js.map +1 -1
  61. package/dist/backend/installed/installed.js +3 -0
  62. package/dist/backend/installed/installed.js.map +1 -1
  63. package/dist/backend/optimal/optimal-cache.d.ts +27 -8
  64. package/dist/backend/optimal/optimal-cache.js +38 -19
  65. package/dist/backend/optimal/optimal-cache.js.map +1 -1
  66. package/dist/backend/optimal/optimal-store.js +1 -1
  67. package/dist/backend/optimal/optimal-store.js.map +1 -1
  68. package/dist/backend/select/categories.d.ts +2 -1
  69. package/dist/backend/select/categories.js +8 -1
  70. package/dist/backend/select/categories.js.map +1 -1
  71. package/dist/backend/select/features.d.ts +13 -5
  72. package/dist/backend/select/features.js +36 -6
  73. package/dist/backend/select/features.js.map +1 -1
  74. package/dist/backend/select/index.d.ts +2 -0
  75. package/dist/backend/select/index.js +2 -0
  76. package/dist/backend/select/index.js.map +1 -1
  77. package/dist/backend/select/prism.d.ts +54 -0
  78. package/dist/backend/select/prism.js +212 -0
  79. package/dist/backend/select/prism.js.map +1 -0
  80. package/dist/backend/select/recovery.d.ts +4 -2
  81. package/dist/backend/select/recovery.js +17 -5
  82. package/dist/backend/select/recovery.js.map +1 -1
  83. package/dist/backend/select/tiers.d.ts +20 -11
  84. package/dist/backend/select/tiers.js +49 -11
  85. package/dist/backend/select/tiers.js.map +1 -1
  86. package/dist/backend/select/turboquant-tiers.d.ts +45 -0
  87. package/dist/backend/select/turboquant-tiers.js +114 -0
  88. package/dist/backend/select/turboquant-tiers.js.map +1 -0
  89. package/dist/backend/types.d.ts +6 -69
  90. package/dist/cli/commands/backends.d.ts +10 -0
  91. package/dist/cli/commands/backends.js +142 -0
  92. package/dist/cli/commands/backends.js.map +1 -0
  93. package/dist/cli/commands/hardware.d.ts +13 -0
  94. package/dist/cli/commands/hardware.js +71 -0
  95. package/dist/cli/commands/hardware.js.map +1 -0
  96. package/dist/cli/commands/host-step.d.ts +28 -0
  97. package/dist/cli/commands/host-step.js +67 -0
  98. package/dist/cli/commands/host-step.js.map +1 -0
  99. package/dist/cli/commands/index.d.ts +4 -1
  100. package/dist/cli/commands/index.js +4 -1
  101. package/dist/cli/commands/index.js.map +1 -1
  102. package/dist/cli/commands/serve.js +4 -4
  103. package/dist/cli/commands/serve.js.map +1 -1
  104. package/dist/cli/commands/shared.d.ts +6 -1
  105. package/dist/cli/commands/shared.js +7 -0
  106. package/dist/cli/commands/shared.js.map +1 -1
  107. package/dist/cli/io.d.ts +11 -0
  108. package/dist/cli/io.js +28 -3
  109. package/dist/cli/io.js.map +1 -1
  110. package/dist/cli/launch.js +2 -2
  111. package/dist/cli/launch.js.map +1 -1
  112. package/dist/cli/main.d.ts +1 -1
  113. package/dist/cli/main.js +11 -1
  114. package/dist/cli/main.js.map +1 -1
  115. package/dist/client/control-client.d.ts +128 -7
  116. package/dist/client/control-client.js +211 -12
  117. package/dist/client/control-client.js.map +1 -1
  118. package/dist/cloud/registry.js +9 -1
  119. package/dist/cloud/registry.js.map +1 -1
  120. package/dist/config/paths.d.ts +137 -0
  121. package/dist/config/paths.js +163 -0
  122. package/dist/config/paths.js.map +1 -1
  123. package/dist/contracts/backend-advisor.d.ts +225 -0
  124. package/dist/contracts/backend-advisor.js +14 -0
  125. package/dist/contracts/backend-advisor.js.map +1 -0
  126. package/dist/contracts/control-api.d.ts +7 -1
  127. package/dist/contracts/control-api.js +7 -1
  128. package/dist/contracts/control-api.js.map +1 -1
  129. package/dist/contracts/decision.d.ts +394 -0
  130. package/dist/contracts/decision.js +69 -0
  131. package/dist/contracts/decision.js.map +1 -0
  132. package/dist/contracts/diffusion.d.ts +62 -9
  133. package/dist/contracts/embedding.d.ts +103 -0
  134. package/dist/contracts/embedding.js +24 -0
  135. package/dist/contracts/embedding.js.map +1 -0
  136. package/dist/contracts/engine-builds.d.ts +108 -0
  137. package/dist/contracts/engine-builds.js +11 -0
  138. package/dist/contracts/engine-builds.js.map +1 -0
  139. package/dist/contracts/engines.d.ts +157 -0
  140. package/dist/contracts/engines.js +50 -0
  141. package/dist/contracts/engines.js.map +1 -0
  142. package/dist/contracts/environment.d.ts +774 -0
  143. package/dist/contracts/environment.js +116 -0
  144. package/dist/contracts/environment.js.map +1 -0
  145. package/dist/contracts/errors.d.ts +43 -2
  146. package/dist/contracts/errors.js +41 -0
  147. package/dist/contracts/errors.js.map +1 -1
  148. package/dist/contracts/events.d.ts +82 -4
  149. package/dist/contracts/hardware.d.ts +79 -6
  150. package/dist/contracts/hardware.js +9 -5
  151. package/dist/contracts/hardware.js.map +1 -1
  152. package/dist/contracts/index.d.ts +8 -0
  153. package/dist/contracts/index.js +8 -0
  154. package/dist/contracts/index.js.map +1 -1
  155. package/dist/contracts/model-compatibility.d.ts +97 -0
  156. package/dist/contracts/model-compatibility.js +6 -0
  157. package/dist/contracts/model-compatibility.js.map +1 -0
  158. package/dist/contracts/model-setup.d.ts +115 -0
  159. package/dist/contracts/model-setup.js +33 -0
  160. package/dist/contracts/model-setup.js.map +1 -0
  161. package/dist/contracts/model-yml.d.ts +14 -0
  162. package/dist/contracts/model-yml.js +1 -0
  163. package/dist/contracts/model-yml.js.map +1 -1
  164. package/dist/contracts/session.d.ts +45 -2
  165. package/dist/contracts/session.js +14 -1
  166. package/dist/contracts/session.js.map +1 -1
  167. package/dist/contracts/settings.d.ts +44 -1
  168. package/dist/contracts/settings.js.map +1 -1
  169. package/dist/core/atomic-core.d.ts +44 -5
  170. package/dist/core/atomic-core.js +24 -0
  171. package/dist/core/atomic-core.js.map +1 -1
  172. package/dist/core/create.js +517 -23
  173. package/dist/core/create.js.map +1 -1
  174. package/dist/core/gpu/index.d.ts +6 -0
  175. package/dist/core/gpu/index.js +7 -0
  176. package/dist/core/gpu/index.js.map +1 -0
  177. package/dist/core/gpu/policy.d.ts +68 -0
  178. package/dist/core/gpu/policy.js +99 -0
  179. package/dist/core/gpu/policy.js.map +1 -0
  180. package/dist/core/gpu/residency.d.ts +44 -0
  181. package/dist/core/gpu/residency.js +101 -0
  182. package/dist/core/gpu/residency.js.map +1 -0
  183. package/dist/core/gpu-residency.d.ts +39 -0
  184. package/dist/core/gpu-residency.js +32 -0
  185. package/dist/core/gpu-residency.js.map +1 -0
  186. package/dist/core/index.d.ts +1 -1
  187. package/dist/core/managed-engines.d.ts +207 -0
  188. package/dist/core/managed-engines.js +579 -0
  189. package/dist/core/managed-engines.js.map +1 -0
  190. package/dist/core/managed-environment.d.ts +72 -0
  191. package/dist/core/managed-environment.js +218 -0
  192. package/dist/core/managed-environment.js.map +1 -0
  193. package/dist/core/model-setup/index.d.ts +4 -0
  194. package/dist/core/model-setup/index.js +5 -0
  195. package/dist/core/model-setup/index.js.map +1 -0
  196. package/dist/core/model-setup/plan.d.ts +56 -0
  197. package/dist/core/model-setup/plan.js +158 -0
  198. package/dist/core/model-setup/plan.js.map +1 -0
  199. package/dist/core/model-setup/service.d.ts +92 -0
  200. package/dist/core/model-setup/service.js +329 -0
  201. package/dist/core/model-setup/service.js.map +1 -0
  202. package/dist/core/model-setup/store.d.ts +29 -0
  203. package/dist/core/model-setup/store.js +116 -0
  204. package/dist/core/model-setup/store.js.map +1 -0
  205. package/dist/core/model-setup/wiring.d.ts +59 -0
  206. package/dist/core/model-setup/wiring.js +132 -0
  207. package/dist/core/model-setup/wiring.js.map +1 -0
  208. package/dist/core/prism.d.ts +36 -0
  209. package/dist/core/prism.js +42 -0
  210. package/dist/core/prism.js.map +1 -0
  211. package/dist/core/public-server.d.ts +7 -0
  212. package/dist/core/public-server.js +2 -0
  213. package/dist/core/public-server.js.map +1 -1
  214. package/dist/core/sessions.d.ts +6 -1
  215. package/dist/core/sessions.js +18 -14
  216. package/dist/core/sessions.js.map +1 -1
  217. package/dist/core/types.d.ts +27 -1
  218. package/dist/core/types.js.map +1 -1
  219. package/dist/decision/args.d.ts +110 -0
  220. package/dist/decision/args.js +126 -0
  221. package/dist/decision/args.js.map +1 -0
  222. package/dist/decision/backoff.d.ts +25 -0
  223. package/dist/decision/backoff.js +33 -0
  224. package/dist/decision/backoff.js.map +1 -0
  225. package/dist/decision/engine-candidates.d.ts +52 -0
  226. package/dist/decision/engine-candidates.js +138 -0
  227. package/dist/decision/engine-candidates.js.map +1 -0
  228. package/dist/decision/engine-fallback.d.ts +41 -0
  229. package/dist/decision/engine-fallback.js +57 -0
  230. package/dist/decision/engine-fallback.js.map +1 -0
  231. package/dist/decision/engine-version.d.ts +27 -0
  232. package/dist/decision/engine-version.js +54 -0
  233. package/dist/decision/engine-version.js.map +1 -0
  234. package/dist/decision/engine.d.ts +114 -0
  235. package/dist/decision/engine.js +253 -0
  236. package/dist/decision/engine.js.map +1 -0
  237. package/dist/decision/http.d.ts +36 -0
  238. package/dist/decision/http.js +73 -0
  239. package/dist/decision/http.js.map +1 -0
  240. package/dist/decision/index.d.ts +20 -0
  241. package/dist/decision/index.js +21 -0
  242. package/dist/decision/index.js.map +1 -0
  243. package/dist/decision/model-facts.d.ts +32 -0
  244. package/dist/decision/model-facts.js +40 -0
  245. package/dist/decision/model-facts.js.map +1 -0
  246. package/dist/decision/outcome.d.ts +35 -0
  247. package/dist/decision/outcome.js +105 -0
  248. package/dist/decision/outcome.js.map +1 -0
  249. package/dist/decision/process.d.ts +67 -0
  250. package/dist/decision/process.js +133 -0
  251. package/dist/decision/process.js.map +1 -0
  252. package/dist/decision/readiness.d.ts +74 -0
  253. package/dist/decision/readiness.js +165 -0
  254. package/dist/decision/readiness.js.map +1 -0
  255. package/dist/decision/request.d.ts +11 -0
  256. package/dist/decision/request.js +56 -0
  257. package/dist/decision/request.js.map +1 -0
  258. package/dist/decision/service.d.ts +202 -0
  259. package/dist/decision/service.js +711 -0
  260. package/dist/decision/service.js.map +1 -0
  261. package/dist/decision/upstream-version.d.ts +23 -0
  262. package/dist/decision/upstream-version.js +34 -0
  263. package/dist/decision/upstream-version.js.map +1 -0
  264. package/dist/decision/wiring.d.ts +67 -0
  265. package/dist/decision/wiring.js +101 -0
  266. package/dist/decision/wiring.js.map +1 -0
  267. package/dist/diffusion/args.d.ts +4 -2
  268. package/dist/diffusion/args.js +10 -3
  269. package/dist/diffusion/args.js.map +1 -1
  270. package/dist/diffusion/image-job.js +1 -1
  271. package/dist/diffusion/image-job.js.map +1 -1
  272. package/dist/diffusion/install.d.ts +35 -11
  273. package/dist/diffusion/install.js +74 -49
  274. package/dist/diffusion/install.js.map +1 -1
  275. package/dist/diffusion/job-kind.d.ts +33 -7
  276. package/dist/diffusion/jobs.d.ts +6 -1
  277. package/dist/diffusion/jobs.js +60 -18
  278. package/dist/diffusion/jobs.js.map +1 -1
  279. package/dist/diffusion/parse.d.ts +1 -2
  280. package/dist/diffusion/parse.js +1 -13
  281. package/dist/diffusion/parse.js.map +1 -1
  282. package/dist/diffusion/progress.js +3 -0
  283. package/dist/diffusion/progress.js.map +1 -1
  284. package/dist/diffusion/server-process.d.ts +6 -0
  285. package/dist/diffusion/server-process.js +3 -2
  286. package/dist/diffusion/server-process.js.map +1 -1
  287. package/dist/diffusion/service.d.ts +52 -6
  288. package/dist/diffusion/service.js +215 -40
  289. package/dist/diffusion/service.js.map +1 -1
  290. package/dist/diffusion/session.d.ts +27 -3
  291. package/dist/diffusion/session.js +108 -17
  292. package/dist/diffusion/session.js.map +1 -1
  293. package/dist/diffusion/state.d.ts +19 -1
  294. package/dist/diffusion/state.js +10 -0
  295. package/dist/diffusion/state.js.map +1 -1
  296. package/dist/diffusion/tracker.d.ts +15 -1
  297. package/dist/diffusion/tracker.js +32 -6
  298. package/dist/diffusion/tracker.js.map +1 -1
  299. package/dist/diffusion/types.d.ts +7 -0
  300. package/dist/diffusion/types.js +11 -0
  301. package/dist/diffusion/types.js.map +1 -1
  302. package/dist/diffusion/video-estimate.d.ts +214 -0
  303. package/dist/diffusion/video-estimate.js +402 -0
  304. package/dist/diffusion/video-estimate.js.map +1 -0
  305. package/dist/diffusion/video-eta.d.ts +90 -0
  306. package/dist/diffusion/video-eta.js +248 -0
  307. package/dist/diffusion/video-eta.js.map +1 -0
  308. package/dist/diffusion/video-history.d.ts +45 -0
  309. package/dist/diffusion/video-history.js +121 -0
  310. package/dist/diffusion/video-history.js.map +1 -0
  311. package/dist/diffusion/video-job.d.ts +13 -5
  312. package/dist/diffusion/video-job.js +42 -15
  313. package/dist/diffusion/video-job.js.map +1 -1
  314. package/dist/diffusion/video-recipe.js +3 -0
  315. package/dist/diffusion/video-recipe.js.map +1 -1
  316. package/dist/diffusion/video-tiling.d.ts +54 -0
  317. package/dist/diffusion/video-tiling.js +70 -0
  318. package/dist/diffusion/video-tiling.js.map +1 -0
  319. package/dist/diffusion/wiring.d.ts +14 -1
  320. package/dist/diffusion/wiring.js +7 -0
  321. package/dist/diffusion/wiring.js.map +1 -1
  322. package/dist/downloads/protocol.d.ts +3 -8
  323. package/dist/downloads/protocol.js.map +1 -1
  324. package/dist/embedding/args.d.ts +39 -0
  325. package/dist/embedding/args.js +46 -0
  326. package/dist/embedding/args.js.map +1 -0
  327. package/dist/embedding/engine.d.ts +50 -0
  328. package/dist/embedding/engine.js +100 -0
  329. package/dist/embedding/engine.js.map +1 -0
  330. package/dist/embedding/ffmpeg.d.ts +18 -0
  331. package/dist/embedding/ffmpeg.js +63 -0
  332. package/dist/embedding/ffmpeg.js.map +1 -0
  333. package/dist/embedding/index.d.ts +16 -0
  334. package/dist/embedding/index.js +17 -0
  335. package/dist/embedding/index.js.map +1 -0
  336. package/dist/embedding/model-facts.d.ts +51 -0
  337. package/dist/embedding/model-facts.js +84 -0
  338. package/dist/embedding/model-facts.js.map +1 -0
  339. package/dist/embedding/process.d.ts +66 -0
  340. package/dist/embedding/process.js +131 -0
  341. package/dist/embedding/process.js.map +1 -0
  342. package/dist/embedding/readiness.d.ts +56 -0
  343. package/dist/embedding/readiness.js +114 -0
  344. package/dist/embedding/readiness.js.map +1 -0
  345. package/dist/embedding/request.d.ts +43 -0
  346. package/dist/embedding/request.js +285 -0
  347. package/dist/embedding/request.js.map +1 -0
  348. package/dist/embedding/service.d.ts +152 -0
  349. package/dist/embedding/service.js +602 -0
  350. package/dist/embedding/service.js.map +1 -0
  351. package/dist/embedding/wiring.d.ts +51 -0
  352. package/dist/embedding/wiring.js +79 -0
  353. package/dist/embedding/wiring.js.map +1 -0
  354. package/dist/engine-builds/builds.d.ts +54 -0
  355. package/dist/engine-builds/builds.js +151 -0
  356. package/dist/engine-builds/builds.js.map +1 -0
  357. package/dist/engine-builds/index.d.ts +10 -0
  358. package/dist/engine-builds/index.js +11 -0
  359. package/dist/engine-builds/index.js.map +1 -0
  360. package/dist/engine-builds/install.d.ts +42 -0
  361. package/dist/engine-builds/install.js +100 -0
  362. package/dist/engine-builds/install.js.map +1 -0
  363. package/dist/engine-builds/manifest.d.ts +121 -0
  364. package/dist/engine-builds/manifest.js +254 -0
  365. package/dist/engine-builds/manifest.js.map +1 -0
  366. package/dist/engine-builds/order.d.ts +24 -0
  367. package/dist/engine-builds/order.js +44 -0
  368. package/dist/engine-builds/order.js.map +1 -0
  369. package/dist/engine-builds/select.d.ts +123 -0
  370. package/dist/engine-builds/select.js +223 -0
  371. package/dist/engine-builds/select.js.map +1 -0
  372. package/dist/engine-builds/service.d.ts +123 -0
  373. package/dist/engine-builds/service.js +392 -0
  374. package/dist/engine-builds/service.js.map +1 -0
  375. package/dist/engines/descriptor-order.d.ts +28 -0
  376. package/dist/engines/descriptor-order.js +60 -0
  377. package/dist/engines/descriptor-order.js.map +1 -0
  378. package/dist/engines/engine-build.d.ts +23 -0
  379. package/dist/engines/engine-build.js +58 -0
  380. package/dist/engines/engine-build.js.map +1 -0
  381. package/dist/engines/index.d.ts +10 -0
  382. package/dist/engines/index.js +11 -0
  383. package/dist/engines/index.js.map +1 -0
  384. package/dist/engines/llamacpp.d.ts +71 -0
  385. package/dist/engines/llamacpp.js +176 -0
  386. package/dist/engines/llamacpp.js.map +1 -0
  387. package/dist/engines/managed.d.ts +49 -0
  388. package/dist/engines/managed.js +88 -0
  389. package/dist/engines/managed.js.map +1 -0
  390. package/dist/engines/service.d.ts +46 -0
  391. package/dist/engines/service.js +61 -0
  392. package/dist/engines/service.js.map +1 -0
  393. package/dist/engines/versions.d.ts +65 -0
  394. package/dist/engines/versions.js +259 -0
  395. package/dist/engines/versions.js.map +1 -0
  396. package/dist/hardware/cpu-flags.d.ts +44 -0
  397. package/dist/hardware/cpu-flags.js +206 -0
  398. package/dist/hardware/cpu-flags.js.map +1 -0
  399. package/dist/hardware/drm-sysfs.d.ts +51 -0
  400. package/dist/hardware/drm-sysfs.js +67 -0
  401. package/dist/hardware/drm-sysfs.js.map +1 -0
  402. package/dist/hardware/facts.d.ts +42 -0
  403. package/dist/hardware/facts.js +92 -0
  404. package/dist/hardware/facts.js.map +1 -0
  405. package/dist/hardware/index.d.ts +19 -3
  406. package/dist/hardware/index.js +19 -3
  407. package/dist/hardware/index.js.map +1 -1
  408. package/dist/hardware/merge.d.ts +55 -0
  409. package/dist/hardware/merge.js +141 -0
  410. package/dist/hardware/merge.js.map +1 -0
  411. package/dist/hardware/nvidia-smi.d.ts +43 -0
  412. package/dist/hardware/nvidia-smi.js +118 -0
  413. package/dist/hardware/nvidia-smi.js.map +1 -0
  414. package/dist/hardware/probe-common.d.ts +72 -0
  415. package/dist/hardware/probe-common.js +106 -0
  416. package/dist/hardware/probe-common.js.map +1 -0
  417. package/dist/hardware/probe-darwin.d.ts +20 -0
  418. package/dist/hardware/probe-darwin.js +76 -0
  419. package/dist/hardware/probe-darwin.js.map +1 -0
  420. package/dist/hardware/probe-linux.d.ts +9 -0
  421. package/dist/hardware/probe-linux.js +133 -0
  422. package/dist/hardware/probe-linux.js.map +1 -0
  423. package/dist/hardware/probe-windows.d.ts +7 -0
  424. package/dist/hardware/probe-windows.js +50 -0
  425. package/dist/hardware/probe-windows.js.map +1 -0
  426. package/dist/hardware/probe.d.ts +16 -0
  427. package/dist/hardware/probe.js +65 -0
  428. package/dist/hardware/probe.js.map +1 -0
  429. package/dist/hardware/service.d.ts +60 -0
  430. package/dist/hardware/service.js +114 -0
  431. package/dist/hardware/service.js.map +1 -0
  432. package/dist/hardware/vulkan.d.ts +47 -0
  433. package/dist/hardware/vulkan.js +148 -0
  434. package/dist/hardware/vulkan.js.map +1 -0
  435. package/dist/hardware/windows-video.d.ts +97 -0
  436. package/dist/hardware/windows-video.js +214 -0
  437. package/dist/hardware/windows-video.js.map +1 -0
  438. package/dist/host/app-daemon.d.ts +47 -0
  439. package/dist/host/app-daemon.js +146 -0
  440. package/dist/host/app-daemon.js.map +1 -0
  441. package/dist/host/index.d.ts +5 -3
  442. package/dist/host/index.js +5 -3
  443. package/dist/host/index.js.map +1 -1
  444. package/dist/host/log-file.d.ts +74 -0
  445. package/dist/host/log-file.js +214 -0
  446. package/dist/host/log-file.js.map +1 -0
  447. package/dist/host/recipes/enable-wsl.d.ts +63 -0
  448. package/dist/host/recipes/enable-wsl.js +73 -0
  449. package/dist/host/recipes/enable-wsl.js.map +1 -0
  450. package/dist/host/recipes/executor-io-windows.d.ts +69 -0
  451. package/dist/host/recipes/executor-io-windows.js +235 -0
  452. package/dist/host/recipes/executor-io-windows.js.map +1 -0
  453. package/dist/host/recipes/executor-io.d.ts +80 -0
  454. package/dist/host/recipes/executor-io.js +211 -0
  455. package/dist/host/recipes/executor-io.js.map +1 -0
  456. package/dist/host/recipes/executor.d.ts +81 -0
  457. package/dist/host/recipes/executor.js +678 -0
  458. package/dist/host/recipes/executor.js.map +1 -0
  459. package/dist/host/recipes/guest-executor.d.ts +29 -0
  460. package/dist/host/recipes/guest-executor.js +76 -0
  461. package/dist/host/recipes/guest-executor.js.map +1 -0
  462. package/dist/host/recipes/index.d.ts +16 -0
  463. package/dist/host/recipes/index.js +17 -0
  464. package/dist/host/recipes/index.js.map +1 -0
  465. package/dist/host/recipes/install-container-runtime.d.ts +389 -0
  466. package/dist/host/recipes/install-container-runtime.js +796 -0
  467. package/dist/host/recipes/install-container-runtime.js.map +1 -0
  468. package/dist/host/recipes/openpgp.d.ts +23 -0
  469. package/dist/host/recipes/openpgp.js +153 -0
  470. package/dist/host/recipes/openpgp.js.map +1 -0
  471. package/dist/host/recipes/request-file.d.ts +96 -0
  472. package/dist/host/recipes/request-file.js +103 -0
  473. package/dist/host/recipes/request-file.js.map +1 -0
  474. package/dist/lock/process-journal.d.ts +5 -2
  475. package/dist/lock/process-journal.js.map +1 -1
  476. package/dist/models/capabilities.d.ts +7 -0
  477. package/dist/models/capabilities.js +17 -1
  478. package/dist/models/capabilities.js.map +1 -1
  479. package/dist/models/compatibility/index.d.ts +10 -0
  480. package/dist/models/compatibility/index.js +11 -0
  481. package/dist/models/compatibility/index.js.map +1 -0
  482. package/dist/models/compatibility/inspect.d.ts +19 -0
  483. package/dist/models/compatibility/inspect.js +59 -0
  484. package/dist/models/compatibility/inspect.js.map +1 -0
  485. package/dist/models/compatibility/resolve.d.ts +59 -0
  486. package/dist/models/compatibility/resolve.js +219 -0
  487. package/dist/models/compatibility/resolve.js.map +1 -0
  488. package/dist/models/compatibility/rules-baseline.d.ts +2 -0
  489. package/dist/models/compatibility/rules-baseline.js +10 -0
  490. package/dist/models/compatibility/rules-baseline.js.map +1 -0
  491. package/dist/models/compatibility/rules-baseline.json +292 -0
  492. package/dist/models/compatibility/rules-service.d.ts +36 -0
  493. package/dist/models/compatibility/rules-service.js +109 -0
  494. package/dist/models/compatibility/rules-service.js.map +1 -0
  495. package/dist/models/compatibility/rules.d.ts +81 -0
  496. package/dist/models/compatibility/rules.js +164 -0
  497. package/dist/models/compatibility/rules.js.map +1 -0
  498. package/dist/models/compatibility/service.d.ts +59 -0
  499. package/dist/models/compatibility/service.js +137 -0
  500. package/dist/models/compatibility/service.js.map +1 -0
  501. package/dist/models/decision-checkpoint.d.ts +22 -0
  502. package/dist/models/decision-checkpoint.js +33 -0
  503. package/dist/models/decision-checkpoint.js.map +1 -0
  504. package/dist/models/gguf/classify.d.ts +27 -1
  505. package/dist/models/gguf/classify.js +78 -2
  506. package/dist/models/gguf/classify.js.map +1 -1
  507. package/dist/models/gguf/index.d.ts +1 -0
  508. package/dist/models/gguf/index.js +1 -0
  509. package/dist/models/gguf/index.js.map +1 -1
  510. package/dist/models/gguf/tensors.d.ts +56 -0
  511. package/dist/models/gguf/tensors.js +236 -0
  512. package/dist/models/gguf/tensors.js.map +1 -0
  513. package/dist/models/index.d.ts +2 -0
  514. package/dist/models/index.js +2 -0
  515. package/dist/models/index.js.map +1 -1
  516. package/dist/router/resolve.d.ts +7 -1
  517. package/dist/router/resolve.js +14 -1
  518. package/dist/router/resolve.js.map +1 -1
  519. package/dist/runtime/container/argv.d.ts +88 -0
  520. package/dist/runtime/container/argv.js +406 -0
  521. package/dist/runtime/container/argv.js.map +1 -0
  522. package/dist/runtime/container/docker-binary.d.ts +4 -0
  523. package/dist/runtime/container/docker-binary.js +34 -0
  524. package/dist/runtime/container/docker-binary.js.map +1 -0
  525. package/dist/runtime/container/env.d.ts +17 -0
  526. package/dist/runtime/container/env.js +52 -0
  527. package/dist/runtime/container/env.js.map +1 -0
  528. package/dist/runtime/container/exec.d.ts +27 -0
  529. package/dist/runtime/container/exec.js +79 -0
  530. package/dist/runtime/container/exec.js.map +1 -0
  531. package/dist/runtime/container/execution-journal.d.ts +55 -0
  532. package/dist/runtime/container/execution-journal.js +167 -0
  533. package/dist/runtime/container/execution-journal.js.map +1 -0
  534. package/dist/runtime/container/heartbeat.d.ts +47 -0
  535. package/dist/runtime/container/heartbeat.js +78 -0
  536. package/dist/runtime/container/heartbeat.js.map +1 -0
  537. package/dist/runtime/container/index.d.ts +30 -0
  538. package/dist/runtime/container/index.js +31 -0
  539. package/dist/runtime/container/index.js.map +1 -0
  540. package/dist/runtime/container/operations.d.ts +40 -0
  541. package/dist/runtime/container/operations.js +233 -0
  542. package/dist/runtime/container/operations.js.map +1 -0
  543. package/dist/runtime/container/pull.d.ts +48 -0
  544. package/dist/runtime/container/pull.js +280 -0
  545. package/dist/runtime/container/pull.js.map +1 -0
  546. package/dist/runtime/container/reconcile.d.ts +34 -0
  547. package/dist/runtime/container/reconcile.js +79 -0
  548. package/dist/runtime/container/reconcile.js.map +1 -0
  549. package/dist/runtime/container/types.d.ts +124 -0
  550. package/dist/runtime/container/types.js +2 -0
  551. package/dist/runtime/container/types.js.map +1 -0
  552. package/dist/runtime/container/watchdog.d.ts +114 -0
  553. package/dist/runtime/container/watchdog.js +418 -0
  554. package/dist/runtime/container/watchdog.js.map +1 -0
  555. package/dist/runtime/container/wiring.d.ts +78 -0
  556. package/dist/runtime/container/wiring.js +92 -0
  557. package/dist/runtime/container/wiring.js.map +1 -0
  558. package/dist/runtime/container/wsl-exec.d.ts +13 -0
  559. package/dist/runtime/container/wsl-exec.js +18 -0
  560. package/dist/runtime/container/wsl-exec.js.map +1 -0
  561. package/dist/runtime/environment/cached-document.d.ts +128 -0
  562. package/dist/runtime/environment/cached-document.js +218 -0
  563. package/dist/runtime/environment/cached-document.js.map +1 -0
  564. package/dist/runtime/environment/canonical-json.d.ts +78 -0
  565. package/dist/runtime/environment/canonical-json.js +86 -0
  566. package/dist/runtime/environment/canonical-json.js.map +1 -0
  567. package/dist/runtime/environment/descriptor-provider.d.ts +121 -0
  568. package/dist/runtime/environment/descriptor-provider.js +159 -0
  569. package/dist/runtime/environment/descriptor-provider.js.map +1 -0
  570. package/dist/runtime/environment/descriptor.d.ts +35 -0
  571. package/dist/runtime/environment/descriptor.js +239 -0
  572. package/dist/runtime/environment/descriptor.js.map +1 -0
  573. package/dist/runtime/environment/diagnostics.d.ts +50 -0
  574. package/dist/runtime/environment/diagnostics.js +114 -0
  575. package/dist/runtime/environment/diagnostics.js.map +1 -0
  576. package/dist/runtime/environment/document-fields.d.ts +39 -0
  577. package/dist/runtime/environment/document-fields.js +96 -0
  578. package/dist/runtime/environment/document-fields.js.map +1 -0
  579. package/dist/runtime/environment/environment-manifest-provider.d.ts +65 -0
  580. package/dist/runtime/environment/environment-manifest-provider.js +89 -0
  581. package/dist/runtime/environment/environment-manifest-provider.js.map +1 -0
  582. package/dist/runtime/environment/environment-manifest.d.ts +35 -0
  583. package/dist/runtime/environment/environment-manifest.js +131 -0
  584. package/dist/runtime/environment/environment-manifest.js.map +1 -0
  585. package/dist/runtime/environment/guest-host.d.ts +43 -0
  586. package/dist/runtime/environment/guest-host.js +88 -0
  587. package/dist/runtime/environment/guest-host.js.map +1 -0
  588. package/dist/runtime/environment/host-exec.d.ts +38 -0
  589. package/dist/runtime/environment/host-exec.js +145 -0
  590. package/dist/runtime/environment/host-exec.js.map +1 -0
  591. package/dist/runtime/environment/host-step-failure.d.ts +33 -0
  592. package/dist/runtime/environment/host-step-failure.js +34 -0
  593. package/dist/runtime/environment/host-step-failure.js.map +1 -0
  594. package/dist/runtime/environment/index.d.ts +56 -0
  595. package/dist/runtime/environment/index.js +57 -0
  596. package/dist/runtime/environment/index.js.map +1 -0
  597. package/dist/runtime/environment/installations.d.ts +25 -0
  598. package/dist/runtime/environment/installations.js +70 -0
  599. package/dist/runtime/environment/installations.js.map +1 -0
  600. package/dist/runtime/environment/inventory.d.ts +42 -0
  601. package/dist/runtime/environment/inventory.js +57 -0
  602. package/dist/runtime/environment/inventory.js.map +1 -0
  603. package/dist/runtime/environment/linux-blockers.d.ts +130 -0
  604. package/dist/runtime/environment/linux-blockers.js +251 -0
  605. package/dist/runtime/environment/linux-blockers.js.map +1 -0
  606. package/dist/runtime/environment/linux-docker-facts.d.ts +200 -0
  607. package/dist/runtime/environment/linux-docker-facts.js +342 -0
  608. package/dist/runtime/environment/linux-docker-facts.js.map +1 -0
  609. package/dist/runtime/environment/linux-docker-network.d.ts +80 -0
  610. package/dist/runtime/environment/linux-docker-network.js +195 -0
  611. package/dist/runtime/environment/linux-docker-network.js.map +1 -0
  612. package/dist/runtime/environment/linux-host.d.ts +22 -0
  613. package/dist/runtime/environment/linux-host.js +98 -0
  614. package/dist/runtime/environment/linux-host.js.map +1 -0
  615. package/dist/runtime/environment/linux-plan.d.ts +126 -0
  616. package/dist/runtime/environment/linux-plan.js +392 -0
  617. package/dist/runtime/environment/linux-plan.js.map +1 -0
  618. package/dist/runtime/environment/linux-probe.d.ts +245 -0
  619. package/dist/runtime/environment/linux-probe.js +315 -0
  620. package/dist/runtime/environment/linux-probe.js.map +1 -0
  621. package/dist/runtime/environment/linux-provisioner.d.ts +102 -0
  622. package/dist/runtime/environment/linux-provisioner.js +734 -0
  623. package/dist/runtime/environment/linux-provisioner.js.map +1 -0
  624. package/dist/runtime/environment/provisioner-descriptors.d.ts +17 -0
  625. package/dist/runtime/environment/provisioner-descriptors.js +62 -0
  626. package/dist/runtime/environment/provisioner-descriptors.js.map +1 -0
  627. package/dist/runtime/environment/recovery.d.ts +74 -0
  628. package/dist/runtime/environment/recovery.js +121 -0
  629. package/dist/runtime/environment/recovery.js.map +1 -0
  630. package/dist/runtime/environment/rootfs-download.d.ts +2 -0
  631. package/dist/runtime/environment/rootfs-download.js +47 -0
  632. package/dist/runtime/environment/rootfs-download.js.map +1 -0
  633. package/dist/runtime/environment/service.d.ts +280 -0
  634. package/dist/runtime/environment/service.js +776 -0
  635. package/dist/runtime/environment/service.js.map +1 -0
  636. package/dist/runtime/environment/state.d.ts +163 -0
  637. package/dist/runtime/environment/state.js +479 -0
  638. package/dist/runtime/environment/state.js.map +1 -0
  639. package/dist/runtime/environment/store-models.d.ts +19 -0
  640. package/dist/runtime/environment/store-models.js +30 -0
  641. package/dist/runtime/environment/store-models.js.map +1 -0
  642. package/dist/runtime/environment/store.d.ts +210 -0
  643. package/dist/runtime/environment/store.js +438 -0
  644. package/dist/runtime/environment/store.js.map +1 -0
  645. package/dist/runtime/environment/windows-environment-record.d.ts +48 -0
  646. package/dist/runtime/environment/windows-environment-record.js +89 -0
  647. package/dist/runtime/environment/windows-environment-record.js.map +1 -0
  648. package/dist/runtime/environment/windows-forwarding.d.ts +27 -0
  649. package/dist/runtime/environment/windows-forwarding.js +84 -0
  650. package/dist/runtime/environment/windows-forwarding.js.map +1 -0
  651. package/dist/runtime/environment/windows-guest-setup.d.ts +48 -0
  652. package/dist/runtime/environment/windows-guest-setup.js +157 -0
  653. package/dist/runtime/environment/windows-guest-setup.js.map +1 -0
  654. package/dist/runtime/environment/windows-host.d.ts +46 -0
  655. package/dist/runtime/environment/windows-host.js +163 -0
  656. package/dist/runtime/environment/windows-host.js.map +1 -0
  657. package/dist/runtime/environment/windows-plan.d.ts +78 -0
  658. package/dist/runtime/environment/windows-plan.js +216 -0
  659. package/dist/runtime/environment/windows-plan.js.map +1 -0
  660. package/dist/runtime/environment/windows-probe.d.ts +135 -0
  661. package/dist/runtime/environment/windows-probe.js +261 -0
  662. package/dist/runtime/environment/windows-probe.js.map +1 -0
  663. package/dist/runtime/environment/windows-provisioner.d.ts +113 -0
  664. package/dist/runtime/environment/windows-provisioner.js +782 -0
  665. package/dist/runtime/environment/windows-provisioner.js.map +1 -0
  666. package/dist/runtime/environment/wiring.d.ts +117 -0
  667. package/dist/runtime/environment/wiring.js +354 -0
  668. package/dist/runtime/environment/wiring.js.map +1 -0
  669. package/dist/runtime/foundation-models/runtime.d.ts +8 -0
  670. package/dist/runtime/foundation-models/runtime.js +5 -2
  671. package/dist/runtime/foundation-models/runtime.js.map +1 -1
  672. package/dist/runtime/llamacpp/args.d.ts +10 -1
  673. package/dist/runtime/llamacpp/args.js +43 -7
  674. package/dist/runtime/llamacpp/args.js.map +1 -1
  675. package/dist/runtime/llamacpp/fit-margin.d.ts +46 -0
  676. package/dist/runtime/llamacpp/fit-margin.js +47 -0
  677. package/dist/runtime/llamacpp/fit-margin.js.map +1 -0
  678. package/dist/runtime/llamacpp/index.d.ts +1 -0
  679. package/dist/runtime/llamacpp/index.js +1 -0
  680. package/dist/runtime/llamacpp/index.js.map +1 -1
  681. package/dist/runtime/llamacpp/load-plan.d.ts +23 -1
  682. package/dist/runtime/llamacpp/load-plan.js +82 -1
  683. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  684. package/dist/runtime/llamacpp/policy.d.ts +16 -0
  685. package/dist/runtime/llamacpp/policy.js +20 -0
  686. package/dist/runtime/llamacpp/policy.js.map +1 -1
  687. package/dist/runtime/llamacpp/probe.d.ts +21 -1
  688. package/dist/runtime/llamacpp/probe.js +32 -6
  689. package/dist/runtime/llamacpp/probe.js.map +1 -1
  690. package/dist/runtime/llamacpp/runtime.d.ts +56 -1
  691. package/dist/runtime/llamacpp/runtime.js +142 -15
  692. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  693. package/dist/runtime/managed-engines/index.d.ts +8 -0
  694. package/dist/runtime/managed-engines/index.js +9 -0
  695. package/dist/runtime/managed-engines/index.js.map +1 -0
  696. package/dist/runtime/managed-engines/runtime.d.ts +140 -0
  697. package/dist/runtime/managed-engines/runtime.js +402 -0
  698. package/dist/runtime/managed-engines/runtime.js.map +1 -0
  699. package/dist/runtime/managed-engines/spec.d.ts +70 -0
  700. package/dist/runtime/managed-engines/spec.js +39 -0
  701. package/dist/runtime/managed-engines/spec.js.map +1 -0
  702. package/dist/runtime/managed-models/check.d.ts +50 -0
  703. package/dist/runtime/managed-models/check.js +157 -0
  704. package/dist/runtime/managed-models/check.js.map +1 -0
  705. package/dist/runtime/managed-models/compatibility.d.ts +256 -0
  706. package/dist/runtime/managed-models/compatibility.js +594 -0
  707. package/dist/runtime/managed-models/compatibility.js.map +1 -0
  708. package/dist/runtime/managed-models/delete.d.ts +15 -0
  709. package/dist/runtime/managed-models/delete.js +60 -0
  710. package/dist/runtime/managed-models/delete.js.map +1 -0
  711. package/dist/runtime/managed-models/guest-files.d.ts +8 -0
  712. package/dist/runtime/managed-models/guest-files.js +49 -0
  713. package/dist/runtime/managed-models/guest-files.js.map +1 -0
  714. package/dist/runtime/managed-models/index.d.ts +17 -0
  715. package/dist/runtime/managed-models/index.js +18 -0
  716. package/dist/runtime/managed-models/index.js.map +1 -0
  717. package/dist/runtime/managed-models/location.d.ts +22 -0
  718. package/dist/runtime/managed-models/location.js +53 -0
  719. package/dist/runtime/managed-models/location.js.map +1 -0
  720. package/dist/runtime/managed-models/migrate.d.ts +30 -0
  721. package/dist/runtime/managed-models/migrate.js +119 -0
  722. package/dist/runtime/managed-models/migrate.js.map +1 -0
  723. package/dist/runtime/managed-models/model-dir.d.ts +36 -0
  724. package/dist/runtime/managed-models/model-dir.js +136 -0
  725. package/dist/runtime/managed-models/model-dir.js.map +1 -0
  726. package/dist/runtime/managed-models/quant-format.d.ts +71 -0
  727. package/dist/runtime/managed-models/quant-format.js +299 -0
  728. package/dist/runtime/managed-models/quant-format.js.map +1 -0
  729. package/dist/runtime/managed-models/registry.d.ts +26 -0
  730. package/dist/runtime/managed-models/registry.js +66 -0
  731. package/dist/runtime/managed-models/registry.js.map +1 -0
  732. package/dist/runtime/managed-text/adapter.d.ts +266 -0
  733. package/dist/runtime/managed-text/adapter.js +96 -0
  734. package/dist/runtime/managed-text/adapter.js.map +1 -0
  735. package/dist/runtime/managed-text/backend-target.d.ts +3 -0
  736. package/dist/runtime/managed-text/backend-target.js +52 -0
  737. package/dist/runtime/managed-text/backend-target.js.map +1 -0
  738. package/dist/runtime/managed-text/deployment.d.ts +14 -0
  739. package/dist/runtime/managed-text/deployment.js +32 -0
  740. package/dist/runtime/managed-text/deployment.js.map +1 -0
  741. package/dist/runtime/managed-text/engine-cache.d.ts +15 -0
  742. package/dist/runtime/managed-text/engine-cache.js +64 -0
  743. package/dist/runtime/managed-text/engine-cache.js.map +1 -0
  744. package/dist/runtime/managed-text/gateway.d.ts +158 -0
  745. package/dist/runtime/managed-text/gateway.js +535 -0
  746. package/dist/runtime/managed-text/gateway.js.map +1 -0
  747. package/dist/runtime/managed-text/generation-defaults.d.ts +23 -0
  748. package/dist/runtime/managed-text/generation-defaults.js +51 -0
  749. package/dist/runtime/managed-text/generation-defaults.js.map +1 -0
  750. package/dist/runtime/managed-text/index.d.ts +26 -0
  751. package/dist/runtime/managed-text/index.js +27 -0
  752. package/dist/runtime/managed-text/index.js.map +1 -0
  753. package/dist/runtime/managed-text/lifecycle.d.ts +276 -0
  754. package/dist/runtime/managed-text/lifecycle.js +859 -0
  755. package/dist/runtime/managed-text/lifecycle.js.map +1 -0
  756. package/dist/runtime/managed-text/load-policy.d.ts +47 -0
  757. package/dist/runtime/managed-text/load-policy.js +111 -0
  758. package/dist/runtime/managed-text/load-policy.js.map +1 -0
  759. package/dist/runtime/managed-text/mount-source.d.ts +14 -0
  760. package/dist/runtime/managed-text/mount-source.js +18 -0
  761. package/dist/runtime/managed-text/mount-source.js.map +1 -0
  762. package/dist/runtime/managed-text/readiness.d.ts +13 -0
  763. package/dist/runtime/managed-text/readiness.js +24 -0
  764. package/dist/runtime/managed-text/readiness.js.map +1 -0
  765. package/dist/runtime/managed-text/request-rules.d.ts +18 -0
  766. package/dist/runtime/managed-text/request-rules.js +62 -0
  767. package/dist/runtime/managed-text/request-rules.js.map +1 -0
  768. package/dist/runtime/managed-text/types.d.ts +88 -0
  769. package/dist/runtime/managed-text/types.js +12 -0
  770. package/dist/runtime/managed-text/types.js.map +1 -0
  771. package/dist/runtime/managed-text/wsl-deployment.d.ts +24 -0
  772. package/dist/runtime/managed-text/wsl-deployment.js +70 -0
  773. package/dist/runtime/managed-text/wsl-deployment.js.map +1 -0
  774. package/dist/runtime/mlx/errors.d.ts +6 -1
  775. package/dist/runtime/mlx/errors.js +7 -2
  776. package/dist/runtime/mlx/errors.js.map +1 -1
  777. package/dist/runtime/mlx/runtime.d.ts +36 -1
  778. package/dist/runtime/mlx/runtime.js +85 -4
  779. package/dist/runtime/mlx/runtime.js.map +1 -1
  780. package/dist/runtime/shared/backend-output.d.ts +23 -0
  781. package/dist/runtime/shared/backend-output.js +32 -0
  782. package/dist/runtime/shared/backend-output.js.map +1 -0
  783. package/dist/runtime/shared/bounded-output.d.ts +24 -0
  784. package/dist/runtime/shared/bounded-output.js +63 -0
  785. package/dist/runtime/shared/bounded-output.js.map +1 -0
  786. package/dist/runtime/shared/external-sessions.js +9 -1
  787. package/dist/runtime/shared/external-sessions.js.map +1 -1
  788. package/dist/runtime/shared/gpu-occupancy.d.ts +60 -0
  789. package/dist/runtime/shared/gpu-occupancy.js +10 -0
  790. package/dist/runtime/shared/gpu-occupancy.js.map +1 -0
  791. package/dist/runtime/shared/index.d.ts +4 -0
  792. package/dist/runtime/shared/index.js +4 -0
  793. package/dist/runtime/shared/index.js.map +1 -1
  794. package/dist/runtime/shared/local-runtime.d.ts +35 -0
  795. package/dist/runtime/shared/ports.d.ts +6 -0
  796. package/dist/runtime/shared/ports.js +12 -1
  797. package/dist/runtime/shared/ports.js.map +1 -1
  798. package/dist/runtime/shared/process.d.ts +11 -0
  799. package/dist/runtime/shared/process.js +20 -0
  800. package/dist/runtime/shared/process.js.map +1 -1
  801. package/dist/runtime/shared/redact-args.d.ts +7 -0
  802. package/dist/runtime/shared/redact-args.js +26 -0
  803. package/dist/runtime/shared/redact-args.js.map +1 -0
  804. package/dist/runtime/shared/sidecar.d.ts +15 -0
  805. package/dist/runtime/shared/sidecar.js +43 -8
  806. package/dist/runtime/shared/sidecar.js.map +1 -1
  807. package/dist/runtime/tensorrt-llm/adapter.d.ts +250 -0
  808. package/dist/runtime/tensorrt-llm/adapter.js +1011 -0
  809. package/dist/runtime/tensorrt-llm/adapter.js.map +1 -0
  810. package/dist/runtime/tensorrt-llm/check.d.ts +12 -0
  811. package/dist/runtime/tensorrt-llm/check.js +21 -0
  812. package/dist/runtime/tensorrt-llm/check.js.map +1 -0
  813. package/dist/runtime/tensorrt-llm/compatibility.d.ts +100 -0
  814. package/dist/runtime/tensorrt-llm/compatibility.js +181 -0
  815. package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -0
  816. package/dist/runtime/tensorrt-llm/engine.d.ts +3 -0
  817. package/dist/runtime/tensorrt-llm/engine.js +24 -0
  818. package/dist/runtime/tensorrt-llm/engine.js.map +1 -0
  819. package/dist/runtime/tensorrt-llm/host-facts.d.ts +55 -0
  820. package/dist/runtime/tensorrt-llm/host-facts.js +87 -0
  821. package/dist/runtime/tensorrt-llm/host-facts.js.map +1 -0
  822. package/dist/runtime/tensorrt-llm/index.d.ts +30 -0
  823. package/dist/runtime/tensorrt-llm/index.js +31 -0
  824. package/dist/runtime/tensorrt-llm/index.js.map +1 -0
  825. package/dist/runtime/tensorrt-llm/installation.d.ts +23 -0
  826. package/dist/runtime/tensorrt-llm/installation.js +53 -0
  827. package/dist/runtime/tensorrt-llm/installation.js.map +1 -0
  828. package/dist/runtime/tensorrt-llm/kv-cache.d.ts +25 -0
  829. package/dist/runtime/tensorrt-llm/kv-cache.js +28 -0
  830. package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -0
  831. package/dist/runtime/tensorrt-llm/prelaunch.d.ts +20 -0
  832. package/dist/runtime/tensorrt-llm/prelaunch.js +168 -0
  833. package/dist/runtime/tensorrt-llm/prelaunch.js.map +1 -0
  834. package/dist/runtime/tensorrt-llm/route-policy.d.ts +19 -0
  835. package/dist/runtime/tensorrt-llm/route-policy.js +17 -0
  836. package/dist/runtime/tensorrt-llm/route-policy.js.map +1 -0
  837. package/dist/runtime/tensorrt-llm/settings.d.ts +7 -0
  838. package/dist/runtime/tensorrt-llm/settings.js +48 -0
  839. package/dist/runtime/tensorrt-llm/settings.js.map +1 -0
  840. package/dist/runtime/vllm/adapter.d.ts +46 -0
  841. package/dist/runtime/vllm/adapter.js +425 -0
  842. package/dist/runtime/vllm/adapter.js.map +1 -0
  843. package/dist/runtime/vllm/engine.d.ts +16 -0
  844. package/dist/runtime/vllm/engine.js +37 -0
  845. package/dist/runtime/vllm/engine.js.map +1 -0
  846. package/dist/runtime/vllm/index.d.ts +11 -0
  847. package/dist/runtime/vllm/index.js +12 -0
  848. package/dist/runtime/vllm/index.js.map +1 -0
  849. package/dist/runtime/vllm/memory.d.ts +69 -0
  850. package/dist/runtime/vllm/memory.js +123 -0
  851. package/dist/runtime/vllm/memory.js.map +1 -0
  852. package/dist/runtime/vllm/settings.d.ts +52 -0
  853. package/dist/runtime/vllm/settings.js +151 -0
  854. package/dist/runtime/vllm/settings.js.map +1 -0
  855. package/dist/runtime/wsl/guest-paths.d.ts +33 -0
  856. package/dist/runtime/wsl/guest-paths.js +83 -0
  857. package/dist/runtime/wsl/guest-paths.js.map +1 -0
  858. package/dist/runtime/wsl/guest-scope.d.ts +14 -0
  859. package/dist/runtime/wsl/guest-scope.js +98 -0
  860. package/dist/runtime/wsl/guest-scope.js.map +1 -0
  861. package/dist/runtime/wsl/index.d.ts +12 -0
  862. package/dist/runtime/wsl/index.js +13 -0
  863. package/dist/runtime/wsl/index.js.map +1 -0
  864. package/dist/runtime/wsl/keeper.d.ts +29 -0
  865. package/dist/runtime/wsl/keeper.js +48 -0
  866. package/dist/runtime/wsl/keeper.js.map +1 -0
  867. package/dist/runtime/wsl/transport.d.ts +106 -0
  868. package/dist/runtime/wsl/transport.js +181 -0
  869. package/dist/runtime/wsl/transport.js.map +1 -0
  870. package/dist/server/control/index.d.ts +1 -1
  871. package/dist/server/control/router.js +15 -0
  872. package/dist/server/control/router.js.map +1 -1
  873. package/dist/server/control/routes/backends.js +26 -0
  874. package/dist/server/control/routes/backends.js.map +1 -1
  875. package/dist/server/control/routes/decision.d.ts +10 -0
  876. package/dist/server/control/routes/decision.js +43 -0
  877. package/dist/server/control/routes/decision.js.map +1 -0
  878. package/dist/server/control/routes/diffusion-video.js +4 -0
  879. package/dist/server/control/routes/diffusion-video.js.map +1 -1
  880. package/dist/server/control/routes/diffusion.d.ts +1 -1
  881. package/dist/server/control/routes/diffusion.js +4 -9
  882. package/dist/server/control/routes/diffusion.js.map +1 -1
  883. package/dist/server/control/routes/embedding.d.ts +9 -0
  884. package/dist/server/control/routes/embedding.js +43 -0
  885. package/dist/server/control/routes/embedding.js.map +1 -0
  886. package/dist/server/control/routes/engine-builds.d.ts +14 -0
  887. package/dist/server/control/routes/engine-builds.js +82 -0
  888. package/dist/server/control/routes/engine-builds.js.map +1 -0
  889. package/dist/server/control/routes/engines.d.ts +17 -0
  890. package/dist/server/control/routes/engines.js +152 -0
  891. package/dist/server/control/routes/engines.js.map +1 -0
  892. package/dist/server/control/routes/environments.d.ts +16 -0
  893. package/dist/server/control/routes/environments.js +207 -0
  894. package/dist/server/control/routes/environments.js.map +1 -0
  895. package/dist/server/control/routes/hardware.d.ts +1 -1
  896. package/dist/server/control/routes/hardware.js +11 -6
  897. package/dist/server/control/routes/hardware.js.map +1 -1
  898. package/dist/server/control/routes/model-setups.d.ts +11 -0
  899. package/dist/server/control/routes/model-setups.js +55 -0
  900. package/dist/server/control/routes/model-setups.js.map +1 -0
  901. package/dist/server/control/routes/models.d.ts +3 -2
  902. package/dist/server/control/routes/models.js +45 -2
  903. package/dist/server/control/routes/models.js.map +1 -1
  904. package/dist/server/control/types.d.ts +167 -9
  905. package/dist/server/control/types.js.map +1 -1
  906. package/dist/server/http.d.ts +9 -1
  907. package/dist/server/http.js +51 -1
  908. package/dist/server/http.js.map +1 -1
  909. package/dist/server/public/decision-preview.d.ts +17 -0
  910. package/dist/server/public/decision-preview.js +119 -0
  911. package/dist/server/public/decision-preview.js.map +1 -0
  912. package/dist/server/public/decision.d.ts +32 -0
  913. package/dist/server/public/decision.js +135 -0
  914. package/dist/server/public/decision.js.map +1 -0
  915. package/dist/server/public/embedding.d.ts +31 -0
  916. package/dist/server/public/embedding.js +126 -0
  917. package/dist/server/public/embedding.js.map +1 -0
  918. package/dist/server/public/errors.d.ts +2 -1
  919. package/dist/server/public/errors.js +5 -2
  920. package/dist/server/public/errors.js.map +1 -1
  921. package/dist/server/public/forward.js +75 -3
  922. package/dist/server/public/forward.js.map +1 -1
  923. package/dist/server/public/gates.d.ts +13 -0
  924. package/dist/server/public/gates.js +37 -14
  925. package/dist/server/public/gates.js.map +1 -1
  926. package/dist/server/public/index.d.ts +5 -2
  927. package/dist/server/public/index.js +14 -1
  928. package/dist/server/public/index.js.map +1 -1
  929. package/dist/server/public/listing.d.ts +13 -2
  930. package/dist/server/public/listing.js +33 -9
  931. package/dist/server/public/listing.js.map +1 -1
  932. package/dist/server/public/policy.d.ts +9 -0
  933. package/dist/server/public/policy.js +68 -0
  934. package/dist/server/public/policy.js.map +1 -0
  935. package/dist/server/public/responses.js +10 -0
  936. package/dist/server/public/responses.js.map +1 -1
  937. package/dist/server/public/trace.d.ts +2 -2
  938. package/dist/server/public/trace.js +6 -2
  939. package/dist/server/public/trace.js.map +1 -1
  940. package/dist/server/public/types.d.ts +84 -1
  941. package/dist/settings/decision.d.ts +15 -0
  942. package/dist/settings/decision.js +88 -0
  943. package/dist/settings/decision.js.map +1 -0
  944. package/dist/settings/embedding.d.ts +12 -0
  945. package/dist/settings/embedding.js +82 -0
  946. package/dist/settings/embedding.js.map +1 -0
  947. package/dist/settings/index.d.ts +2 -0
  948. package/dist/settings/index.js +2 -0
  949. package/dist/settings/index.js.map +1 -1
  950. package/dist/settings/schema/atomic-prism.json +433 -0
  951. package/dist/settings/schema/tensorrt-llm.json +253 -0
  952. package/dist/settings/schema/vllm.json +273 -0
  953. package/dist/settings/schema.js +58 -0
  954. package/dist/settings/schema.js.map +1 -1
  955. package/dist/settings/store.d.ts +13 -2
  956. package/dist/settings/store.js +44 -0
  957. package/dist/settings/store.js.map +1 -1
  958. package/dist/util/index.d.ts +1 -0
  959. package/dist/util/index.js +1 -0
  960. package/dist/util/index.js.map +1 -1
  961. package/dist/util/result.d.ts +19 -0
  962. package/dist/util/result.js +15 -0
  963. package/dist/util/result.js.map +1 -0
  964. package/dist/version.d.ts +1 -1
  965. package/dist/version.js +1 -1
  966. package/dist/version.js.map +1 -1
  967. package/package.json +1 -1
  968. package/src/settings/schema/atomic-prism.json +433 -0
  969. package/src/settings/schema/tensorrt-llm.json +253 -0
  970. package/src/settings/schema/vllm.json +273 -0
@@ -0,0 +1,782 @@
1
+ /**
2
+ * The Windows host recipe behind `EnvironmentService` (change `add-tensorrt-llm-windows`; spec
3
+ * `wsl-runtime-environment`): what a setup and a removal of a managed engine do on Windows, where the
4
+ * engine runs in a WSL distribution Atomic Chat imports and owns — one method per effect the reducer
5
+ * (`state.ts`) can ask for, like the Linux provisioner, over the same descriptor, installations and
6
+ * operation machinery.
7
+ *
8
+ * - **probe** reads Windows (`probeWindowsHost`), Atomic Chat's own environment record, and — when its
9
+ * distribution is registered — the guest as a Linux host (`guest-host.ts`, design D1), and judges
10
+ * them (`assessWindowsHost`) against the descriptor and the Windows environment manifest. An
11
+ * environment that exists keeps the manifest it was imported by (spec "Окружение Windows закрепляет
12
+ * свой манифест"); a new one is judged by the newest.
13
+ *
14
+ * Nothing here runs `wsl.exe` from an elevated process: the core is the user's own, and a core started
15
+ * elevated is blocked before anything is imported (`elevated-process`).
16
+ */
17
+ import { randomUUID } from 'node:crypto';
18
+ import { join } from 'node:path';
19
+ import { AtomicCoreError } from '../../contracts/index.js';
20
+ import { containersUsingImage, inspectImage, pullImageWithCurl, removeContainer, removeImage, runOnce, stopContainer, } from '../container/index.js';
21
+ import { GUEST_SCOPES_ROOT } from '../wsl/index.js';
22
+ import { canonicalDigest } from './canonical-json.js';
23
+ import { GUEST_DOCKER, GUEST_ROOT, guestLinuxHost, probeGuestExtras } from './guest-host.js';
24
+ import { imageMatchesDigest, NOTHING_LOADED, ownedImageId, pickGpu, } from './linux-provisioner.js';
25
+ import { probeLinux } from './linux-probe.js';
26
+ import { descriptorForProbe, pinnedDescriptor } from './provisioner-descriptors.js';
27
+ import { otherEngines } from './store-models.js';
28
+ import { ATOMIC_CHAT_DISTRIBUTION, distributionDirectory, distributionDisk, } from './windows-host.js';
29
+ import { checkLocalhostForwarding } from './windows-forwarding.js';
30
+ import { importDistribution, restoreDefaultDistribution, setupGuest } from './windows-guest-setup.js';
31
+ import { assessWindowsHost } from './windows-plan.js';
32
+ import { normalizeWindowsArchitecture, parseRebootPending, parseWslDistributions, probeWindowsHost, REBOOT_PENDING_KEY, } from './windows-probe.js';
33
+ const ZERO_DIGEST = `sha256:${'0'.repeat(64)}`;
34
+ /** Checkpoints at which part or all of the engine image is already in the guest's layer store. */
35
+ const PULL_PHASES = ['pulling-image', 'verifying', 'activating'];
36
+ /**
37
+ * The image platform of Atomic Chat's distribution: the machine's own architecture, which is also the
38
+ * architecture of the rootfs its manifest imports (`windows.json` x86_64, `windows-arm64.json`
39
+ * aarch64). An x86_64 constant here pulled the amd64 GPU-check image onto Windows on Arm, where its
40
+ * `nvidia-smi` cannot run (NVIDIA RTX Spark N1X, 2026-10-06). Another architecture never gets this
41
+ * far: the plan blocks it as `unsupported-architecture`.
42
+ */
43
+ export function windowsGuestPlatform(machine) {
44
+ return normalizeWindowsArchitecture(machine) === 'aarch64' ? 'linux/arm64' : 'linux/amd64';
45
+ }
46
+ const STOP_TIMEOUT_SECONDS = 10;
47
+ /** The unsupported verdicts: what hides the provider rather than blocking a plan. */
48
+ const METADATA_REASONS = ['environment-manifest-unavailable'];
49
+ /** A `WindowsBlocker` on the wire, the same shape a Linux blocker takes (`toManagedBlocker`). */
50
+ export function toWindowsManagedBlocker(entry) {
51
+ return {
52
+ code: METADATA_REASONS.includes(entry.reason)
53
+ ? 'MANAGED_METADATA_INVALID'
54
+ : 'MANAGED_PREREQUISITE_BLOCKED',
55
+ message: entry.message,
56
+ details: entry.reason,
57
+ reason: entry.reason,
58
+ ...(entry.params === undefined ? {} : { params: entry.params }),
59
+ ...(entry.commands === undefined ? {} : { commands: entry.commands }),
60
+ };
61
+ }
62
+ export function createWindowsProvisioner(deps) {
63
+ const newId = deps.newId ?? randomUUID;
64
+ const now = deps.now ?? (() => new Date());
65
+ const wsl = deps.host.probeDeps.wsl;
66
+ const guestPlatform = windowsGuestPlatform(deps.host.probeDeps.machine());
67
+ /** The guest's docker CLI, as root, by its absolute path, over the transport (design D3). */
68
+ const guestDocker = (transport) => (args, call) => transport.exec([GUEST_DOCKER, ...args], {
69
+ user: GUEST_ROOT,
70
+ ...(call?.timeoutMs === undefined ? {} : { timeoutMs: call.timeoutMs }),
71
+ });
72
+ /** Read Windows, the record, and the guest when ours is there and can start. Changes nothing. */
73
+ const look = async () => {
74
+ const [facts, record] = await Promise.all([probeWindowsHost(deps.host.probeDeps), deps.records.read()]);
75
+ const name = record?.distribution.name ?? ATOMIC_CHAT_DISTRIBUTION;
76
+ const path = record?.distribution.path ?? distributionDirectory(deps.host.localAppData, name);
77
+ const registered = facts.distributions.find((entry) => entry.name === name) ?? null;
78
+ const owned = record === null ? null : registered;
79
+ const foreign = record === null && registered !== null;
80
+ let guest = null;
81
+ if (owned !== null && owned.version === 2 && facts.wsl.ready === true) {
82
+ const transport = wsl.distribution(owned.name);
83
+ const host = guestLinuxHost(transport);
84
+ const [linux, extras] = await Promise.all([
85
+ probeLinux(host.probeDeps, host.options()),
86
+ probeGuestExtras(transport),
87
+ ]);
88
+ guest = { facts: linux, extras };
89
+ }
90
+ return { facts, record, owned, foreign, distribution: { name, path }, guest };
91
+ };
92
+ /**
93
+ * The manifest a probe judges by. An existing environment keeps the one it was imported by, from
94
+ * the cache — or, when the cache lost it, conf's only if it still serves that very id. Before an
95
+ * import: the consented one once work began, otherwise the newest.
96
+ */
97
+ const manifestFor = async (record, environment) => {
98
+ const pinnedId = environment?.manifest_id ?? record.machine.consented?.environment_manifest_id ?? null;
99
+ if (environment !== null || record.machine.consented != null) {
100
+ if (pinnedId === null)
101
+ return null;
102
+ const pinned = await deps.environmentManifests.pinned(pinnedId);
103
+ if (pinned.kind === 'available')
104
+ return pinned.manifest;
105
+ const again = await deps.environmentManifests.latest();
106
+ return again.kind === 'available' && again.manifest.manifest_id === pinnedId ? again.manifest : null;
107
+ }
108
+ const latest = await deps.environmentManifests.latest();
109
+ return latest.kind === 'available' ? latest.manifest : null;
110
+ };
111
+ const imagePresent = async (transport, image) => {
112
+ const inspected = await inspectImage(guestDocker(transport), image).catch(() => null);
113
+ return inspected !== null && inspected.found && imageMatchesDigest(inspected.value, image);
114
+ };
115
+ const blockedPlan = (record, availability, blockers) => ({
116
+ plan_digest: canonicalDigest({ blocked: blockers.map((entry) => entry.reason ?? entry.code) }),
117
+ environment_id: deps.environmentId,
118
+ target: record.machine.operation.target,
119
+ availability,
120
+ recipe_id: 'none',
121
+ recipe_digest: ZERO_DIGEST,
122
+ descriptor_id: null,
123
+ environment_manifest_id: null,
124
+ image_digest: null,
125
+ adopts_existing_engine: false,
126
+ system_changes: [],
127
+ download_bytes: null,
128
+ required_disk_bytes: null,
129
+ docker_root_dir: null,
130
+ free_disk_bytes: null,
131
+ requires_elevation: false,
132
+ may_require_relogin: false,
133
+ may_require_reboot: false,
134
+ blockers,
135
+ warnings: [],
136
+ });
137
+ const setupProbe = async (record) => {
138
+ const resolved = await descriptorForProbe(deps.descriptors, record);
139
+ if ('blocker' in resolved) {
140
+ const plan = blockedPlan(record, 'unsupported', [resolved.blocker]);
141
+ deps.onAssessment?.({ availability: 'unsupported', gpus: [], blockers: plan.blockers, selinux: null });
142
+ return { plan, host_step: null };
143
+ }
144
+ const descriptor = resolved.descriptor;
145
+ const target = record.machine.operation.target;
146
+ const seen = await look();
147
+ const manifest = await manifestFor(record, seen.record);
148
+ const image = descriptor.image[guestPlatform];
149
+ const transport = seen.owned === null ? null : wsl.distribution(seen.owned.name);
150
+ const existing = target.kind === 'runtime' ? await deps.installations.read(target.installation_id) : null;
151
+ const present = target.kind === 'runtime' && transport !== null && seen.guest?.facts.docker.daemon_reachable === true
152
+ ? await imagePresent(transport, image)
153
+ : false;
154
+ const readyInstallation = existing !== null &&
155
+ existing.installation.status === 'ready' &&
156
+ existing.installation.active_descriptor_id === descriptor.descriptor_id;
157
+ const pullStarted = PULL_PHASES.includes(record.machine.checkpoint ?? 'checking');
158
+ const stillNeeded = target.kind !== 'runtime' || present || pullStarted || readyInstallation
159
+ ? null
160
+ : descriptor.required_disk_bytes;
161
+ const volumeFree = await deps.host.freeDiskBytes(seen.distribution.path).catch(() => null);
162
+ const assessment = assessWindowsHost({
163
+ facts: seen.facts,
164
+ manifest,
165
+ owned: seen.owned,
166
+ foreign: seen.foreign,
167
+ distribution: seen.distribution,
168
+ volumeFreeBytes: volumeFree,
169
+ guest: seen.guest,
170
+ guestRecipeId: manifest?.guest_recipe_id ?? deps.guestRecipe.recipe_id,
171
+ minimumDriverVersion: descriptor.minimum_driver_version,
172
+ minimumComputeCapability: descriptor.minimum_compute_capability,
173
+ requiredDiskBytes: stillNeeded,
174
+ });
175
+ const blockers = assessment.blockers.map(toWindowsManagedBlocker);
176
+ if (target.kind === 'runtime' && target.engine_id !== descriptor.engine_id) {
177
+ blockers.push({
178
+ code: 'MANAGED_METADATA_INVALID',
179
+ message: `The descriptor ${descriptor.descriptor_id} is for ${descriptor.engine_id}, not ${target.engine_id}.`,
180
+ reason: 'engine-mismatch',
181
+ });
182
+ }
183
+ if (existing !== null && existing.installation.active_descriptor_id !== descriptor.descriptor_id) {
184
+ blockers.push({
185
+ code: 'MANAGED_OPERATION_CONFLICT',
186
+ message: `This engine is already installed from ${String(existing.installation.active_descriptor_id)}; remove it before setting up ${descriptor.descriptor_id}.`,
187
+ reason: 'installed-with-other-descriptor',
188
+ });
189
+ }
190
+ const availability = assessment.availability === 'unsupported'
191
+ ? 'unsupported'
192
+ : blockers.length > 0
193
+ ? 'prerequisite-blocked'
194
+ : readyInstallation && assessment.adopts_existing_engine
195
+ ? 'supported'
196
+ : 'setup-required';
197
+ const systemChanges = blockers.length > 0 ? [] : assessment.system_changes;
198
+ const requiresElevation = blockers.length === 0 && assessment.enable_wsl;
199
+ const manifestId = manifest?.manifest_id ?? null;
200
+ const plan = {
201
+ plan_digest: canonicalDigest({
202
+ platform: 'windows',
203
+ target,
204
+ recipe_id: deps.guestRecipe.recipe_id,
205
+ recipe_digest: deps.guestRecipe.recipe_digest,
206
+ adopts_existing_engine: assessment.adopts_existing_engine,
207
+ system_changes: systemChanges,
208
+ requires_elevation: requiresElevation,
209
+ may_require_reboot: requiresElevation,
210
+ enable_wsl: requiresElevation ? deps.enableWsl.recipe_digest : null,
211
+ descriptor: { descriptor_id: descriptor.descriptor_id, image_digest: image.digest },
212
+ environment_manifest_id: manifestId,
213
+ host: {
214
+ gpu_ids: seen.facts.gpus.map((gpu) => gpu.gpu_id).sort(),
215
+ disk_sufficient: assessment.disk_sufficient,
216
+ distribution: seen.distribution.name,
217
+ },
218
+ blockers: blockers.map((entry) => entry.reason ?? entry.code),
219
+ }),
220
+ environment_id: deps.environmentId,
221
+ target,
222
+ availability,
223
+ recipe_id: deps.guestRecipe.recipe_id,
224
+ recipe_digest: deps.guestRecipe.recipe_digest,
225
+ descriptor_id: descriptor.descriptor_id,
226
+ environment_manifest_id: manifestId,
227
+ image_digest: target.kind === 'runtime' ? image.digest : null,
228
+ adopts_existing_engine: assessment.adopts_existing_engine,
229
+ system_changes: systemChanges,
230
+ download_bytes: descriptor.download_bytes,
231
+ required_disk_bytes: descriptor.required_disk_bytes,
232
+ // The distribution's own directory and the space its disk can still take (ruling core 2.1).
233
+ docker_root_dir: assessment.free_disk_bytes === null ? null : seen.distribution.path,
234
+ free_disk_bytes: assessment.free_disk_bytes,
235
+ requires_elevation: requiresElevation,
236
+ may_require_relogin: false,
237
+ may_require_reboot: requiresElevation,
238
+ blockers,
239
+ warnings: [],
240
+ };
241
+ deps.onAssessment?.({
242
+ availability,
243
+ gpus: seen.facts.gpus,
244
+ blockers,
245
+ selinux: seen.guest?.facts.docker.daemon_reachable === true ? seen.guest.facts.docker.selinux : null,
246
+ distribution: seen.owned === null
247
+ ? null
248
+ : {
249
+ name: seen.owned.name,
250
+ path: seen.distribution.path,
251
+ size_bytes: await deps.host
252
+ .fileSize(distributionDisk(seen.distribution.path))
253
+ .catch(() => null),
254
+ },
255
+ memory_bytes: seen.guest?.extras.memory_bytes ?? null,
256
+ });
257
+ // The one elevated step, with nothing in it a client could choose (design D2).
258
+ const hostStep = requiresElevation
259
+ ? {
260
+ step_id: `host-step-${newId()}`,
261
+ action: 'windows.enable-wsl',
262
+ recipe_id: deps.enableWsl.recipe_id,
263
+ recipe_digest: deps.enableWsl.recipe_digest,
264
+ parameters_digest: deps.enableWsl.parameters_digest,
265
+ parameters: {},
266
+ nonce: newId(),
267
+ // Stamped with the real revision when the step is issued (`state.ts`, `afterConsent`).
268
+ expected_operation_revision: 0,
269
+ }
270
+ : null;
271
+ return { plan, host_step: hostStep, image_present: present };
272
+ };
273
+ /**
274
+ * WSL answers `--version` and `--status`, and Windows is not waiting for a restart: the elevated
275
+ * step's work is in effect. `--status` exits 0 right after the install even though a WSL 2 VM cannot
276
+ * start until the restart, so the CBS restart flag decides that part.
277
+ */
278
+ const wslReady = async () => {
279
+ if ((await wsl.command(['--version'], { timeoutMs: 30_000 })).code !== 0)
280
+ return false;
281
+ if ((await wsl.command(['--status'], { timeoutMs: 30_000 })).code !== 0)
282
+ return false;
283
+ const system32 = `${deps.host.probeDeps.systemRoot.replace(/[\\/]+$/, '')}\\System32`;
284
+ const pending = parseRebootPending(await deps.host.probeDeps.exec(`${system32}\\reg.exe`, ['query', REBOOT_PENDING_KEY]));
285
+ return pending !== true;
286
+ };
287
+ const blocked = (message, reason) => new AtomicCoreError('MANAGED_PREREQUISITE_BLOCKED', message, reason);
288
+ const sleep = deps.sleep ??
289
+ ((ms, signal) => new Promise((resolve) => {
290
+ const timer = setTimeout(resolve, ms);
291
+ signal.addEventListener('abort', () => {
292
+ clearTimeout(timer);
293
+ resolve();
294
+ });
295
+ }));
296
+ /** The manifest the import uses: exactly the consented one, from the cache. */
297
+ const consentedManifest = async (record) => {
298
+ const id = record.machine.consented?.environment_manifest_id ??
299
+ record.requirement_plan?.environment_manifest_id ??
300
+ null;
301
+ if (id === null) {
302
+ throw new AtomicCoreError('MANAGED_METADATA_INVALID', 'This operation has no approved Windows environment manifest.');
303
+ }
304
+ const pinned = await deps.environmentManifests.pinned(id);
305
+ if (pinned.kind !== 'available')
306
+ throw new AtomicCoreError('MANAGED_METADATA_INVALID', pinned.error.message, id);
307
+ return pinned.manifest;
308
+ };
309
+ /**
310
+ * Import Atomic Chat's own distribution (D9): the rootfs downloaded and checked against the manifest's
311
+ * sha256 before it is used, the record written before `wsl --import` — so a core that dies mid-import
312
+ * still knows the name is ours — the download deleted afterwards, the user's default put back.
313
+ */
314
+ const importOwn = async (record, seen, signal) => {
315
+ const manifest = await consentedManifest(record);
316
+ const { name, path } = seen.distribution;
317
+ const previousDefault = seen.facts.distributions.find((entry) => entry.is_default)?.name ?? null;
318
+ const rootfs = join(deps.host.localAppData, 'AtomicChat', 'wsl', 'downloads', `${manifest.rootfs.sha256}.wsl`);
319
+ await deps.downloadRootfs(manifest.rootfs, rootfs, signal);
320
+ const environment = {
321
+ schema_version: 1,
322
+ executor: 'wsl-docker',
323
+ distribution: { name, path },
324
+ manifest_id: manifest.manifest_id,
325
+ imported_at: now().toISOString(),
326
+ marker: newId(),
327
+ };
328
+ await deps.records.write(environment);
329
+ try {
330
+ await importDistribution(wsl, { name, path, rootfs }, signal);
331
+ }
332
+ finally {
333
+ await deps.removeFile(rootfs).catch(() => undefined);
334
+ }
335
+ await restoreDefaultDistribution(wsl, previousDefault, signal);
336
+ return environment;
337
+ };
338
+ /** Docker and the toolkit in the guest by the Linux recipe, as guest root, when the guest still needs them. */
339
+ const provisionGuest = async (transport, manifest, descriptor, signal) => {
340
+ const seen = await look();
341
+ const assessment = assessWindowsHost({
342
+ facts: seen.facts,
343
+ manifest,
344
+ owned: seen.owned,
345
+ foreign: false,
346
+ distribution: seen.distribution,
347
+ volumeFreeBytes: null,
348
+ guest: seen.guest,
349
+ guestRecipeId: deps.guestRecipe.recipe_id,
350
+ minimumDriverVersion: descriptor.minimum_driver_version,
351
+ minimumComputeCapability: descriptor.minimum_compute_capability,
352
+ requiredDiskBytes: null,
353
+ });
354
+ if (assessment.blockers.length > 0) {
355
+ const first = assessment.blockers[0];
356
+ throw blocked(assessment.blockers.map((entry) => entry.message).join(' '), first.reason);
357
+ }
358
+ const plan = assessment.guest_plan;
359
+ if (plan === null)
360
+ return;
361
+ const distribution = seen.guest?.facts.distribution;
362
+ if (distribution === null || distribution === undefined || distribution.family !== 'apt') {
363
+ throw blocked('The Atomic Chat distribution is not the Ubuntu it was imported as.', 'distribution-not-in-recipe');
364
+ }
365
+ const parameters = deps.guestRecipe.parameters(plan, {
366
+ user: GUEST_ROOT,
367
+ // The plan let only a guest of the machine's own architecture this far.
368
+ arch: seen.facts.architecture === 'aarch64' ? 'aarch64' : 'x86_64',
369
+ family: 'apt',
370
+ distro_id: distribution.id,
371
+ version_id: distribution.version_id,
372
+ });
373
+ const ran = await deps.runGuestRecipe(transport, {
374
+ recipe_id: deps.guestRecipe.recipe_id,
375
+ recipe_digest: deps.guestRecipe.recipe_digest,
376
+ parameters,
377
+ parameters_digest: deps.guestRecipe.parametersDigest(parameters),
378
+ }, signal);
379
+ if (ran.outcome !== 'completed') {
380
+ throw blocked(`Installing Docker and the NVIDIA Container Toolkit in the distribution failed: ${ran.log_tail}`, 'guest-recipe-failed');
381
+ }
382
+ };
383
+ /** The GPU-check image through the guest's Engine API, then `nvidia-smi` in it on the chosen card (design D6). */
384
+ const checkGpu = async (transport, descriptor, seen, signal, own) => {
385
+ const gpu = pickGpu(seen.facts.gpus, descriptor.minimum_compute_capability);
386
+ if (gpu === null) {
387
+ throw blocked(`No GPU with compute capability ${descriptor.minimum_compute_capability} or newer was found.`, 'compute-capability-too-low');
388
+ }
389
+ const docker = guestDocker(transport);
390
+ const probeImage = descriptor.probe_image[guestPlatform];
391
+ // Only a GPU-check image this setup pulls itself is its to remove later (as on Linux).
392
+ const inspected = await inspectImage(docker, probeImage).catch(() => null);
393
+ if (inspected !== null && !inspected.found)
394
+ await own([ownedImageId(probeImage)]);
395
+ await pullImageWithCurl(probeImage, {
396
+ run: (argv, call) => transport.exec(argv, { user: GUEST_ROOT, ...call }),
397
+ signal,
398
+ verify: docker,
399
+ });
400
+ const result = await runOnce(docker, {
401
+ image: probeImage,
402
+ gpuUuid: gpu.gpu_id,
403
+ command: ['nvidia-smi', '--query-gpu=uuid', '--format=csv,noheader'],
404
+ });
405
+ if (result.code !== 0 || !result.stdout.includes(gpu.gpu_id)) {
406
+ throw new AtomicCoreError('MANAGED_PREREQUISITE_BLOCKED', `The GPU ${gpu.name} is not visible inside a container in the Atomic Chat distribution: the NVIDIA Container Toolkit did not pass it through. The engine image was not downloaded.`, [
407
+ `gpu=${gpu.gpu_id}`,
408
+ `exit=${String(result.code)}`,
409
+ `stdout=${result.stdout.trim().slice(-1000)}`,
410
+ `stderr=${result.stderr.trim().slice(-1000)}`,
411
+ ].join('\n'));
412
+ }
413
+ };
414
+ /** Atomic Chat's own distribution, as its record names it; no record is no environment. */
415
+ const ownTransport = async () => {
416
+ const environment = await deps.records.read();
417
+ if (environment === null) {
418
+ throw blocked('The Atomic Chat distribution is not set up on this computer.', 'no-distribution');
419
+ }
420
+ return wsl.distribution(environment.distribution.name);
421
+ };
422
+ const unload = deps.unloadEngineSessions ?? NOTHING_LOADED;
423
+ /** Runs one step of an operation with the distribution held, and lets go whatever happens. */
424
+ const held = async (what, step) => {
425
+ const lease = deps.keeper?.acquire(what);
426
+ try {
427
+ return await step();
428
+ }
429
+ finally {
430
+ lease?.release();
431
+ }
432
+ };
433
+ /** Engines installed in this environment: what an environment removal must refuse while any is. */
434
+ const installedEngines = async () => [...new Set((await deps.installations.list()).map((entry) => entry.installation.engine_id))].sort();
435
+ /** Every model in the distribution, of every scope (app and CLI share it), with its size in the guest. */
436
+ const guestModels = async (transport) => {
437
+ const found = await transport.exec(['find', GUEST_SCOPES_ROOT, '-name', 'model.yml', '-printf', '%h\n'], {
438
+ user: GUEST_ROOT,
439
+ timeoutMs: 120_000,
440
+ });
441
+ const dirs = found.stdout
442
+ .split('\n')
443
+ .map((line) => line.trim())
444
+ .filter((line) => /\/models\/[^/]+\/.+/.test(line))
445
+ .sort();
446
+ if (dirs.length === 0)
447
+ return { ids: [], bytes: 0 };
448
+ const du = await transport.exec(['du', '-s', '-b', '--', ...dirs], {
449
+ user: GUEST_ROOT,
450
+ timeoutMs: 30 * 60_000,
451
+ });
452
+ const sizes = du.stdout
453
+ .split('\n')
454
+ .map((line) => /^(\d+)\t/.exec(line))
455
+ .filter((match) => match !== null)
456
+ .map((match) => Number(match[1]));
457
+ const ids = dirs.map((dir) => /\/models\/[^/]+\/(.+)$/.exec(dir)[1]);
458
+ return { ids, bytes: sizes.length === dirs.length ? sizes.reduce((sum, value) => sum + value, 0) : null };
459
+ };
460
+ /**
461
+ * The plan of an environment removal (design D12; spec "Окружение Windows удаляется целиком и только
462
+ * с согласием"): refused while an engine is installed; otherwise what goes — the distribution with
463
+ * its disk image and its size, and every model in it with their total — never another distribution.
464
+ */
465
+ const environmentRemovalProbe = async (record) => {
466
+ const target = record.machine.operation.target;
467
+ const engines = await installedEngines();
468
+ if (engines.length > 0) {
469
+ return {
470
+ plan: blockedPlan(record, 'prerequisite-blocked', [
471
+ {
472
+ code: 'MANAGED_PREREQUISITE_BLOCKED',
473
+ message: `Remove ${engines.join(', ')} first: the environment is removed only once no engine is installed in it.`,
474
+ details: 'engines-installed',
475
+ reason: 'engines-installed',
476
+ params: { engines: engines.join(',') },
477
+ },
478
+ ]),
479
+ host_step: null,
480
+ };
481
+ }
482
+ const environment = await deps.records.read();
483
+ const changes = [];
484
+ if (environment !== null) {
485
+ const transport = wsl.distribution(environment.distribution.name);
486
+ const models = await guestModels(transport);
487
+ const size = await deps.host.fileSize(distributionDisk(environment.distribution.path)).catch(() => null);
488
+ if (models.ids.length > 0) {
489
+ changes.push({
490
+ code: 'delete-models',
491
+ text: `Delete the ${models.ids.length} model(s) in it${models.bytes === null ? '' : ` (${models.bytes} bytes)`}: ${models.ids.join(', ')}.`,
492
+ params: { models: models.ids.join(','), bytes: models.bytes === null ? '' : String(models.bytes) },
493
+ });
494
+ }
495
+ changes.unshift({
496
+ code: 'unregister-distribution',
497
+ text: `Remove Atomic Chat’s WSL distribution "${environment.distribution.name}" (wsl --unregister) and everything in it, freeing its disk image in ${environment.distribution.path}. Your other distributions are not touched.`,
498
+ params: {
499
+ name: environment.distribution.name,
500
+ path: environment.distribution.path,
501
+ size_bytes: size === null ? '' : String(size),
502
+ },
503
+ });
504
+ }
505
+ const plan = {
506
+ plan_digest: canonicalDigest({ kind: 'remove', platform: 'windows', target, system_changes: changes }),
507
+ environment_id: deps.environmentId,
508
+ target,
509
+ availability: environment === null ? 'setup-required' : 'supported',
510
+ recipe_id: 'none',
511
+ recipe_digest: ZERO_DIGEST,
512
+ descriptor_id: null,
513
+ environment_manifest_id: null,
514
+ image_digest: null,
515
+ adopts_existing_engine: true,
516
+ system_changes: changes,
517
+ download_bytes: null,
518
+ required_disk_bytes: null,
519
+ docker_root_dir: null,
520
+ free_disk_bytes: null,
521
+ requires_elevation: false,
522
+ may_require_relogin: false,
523
+ may_require_reboot: false,
524
+ blockers: [],
525
+ warnings: [],
526
+ };
527
+ return { plan, host_step: null };
528
+ };
529
+ /** `wsl --unregister` of exactly the recorded distribution, then the record; refused while an engine is installed. */
530
+ const removeEnvironment = async () => {
531
+ const engines = await installedEngines();
532
+ if (engines.length > 0) {
533
+ throw blocked(`Remove ${engines.join(', ')} first: the environment is removed only once no engine is installed in it.`, 'engines-installed');
534
+ }
535
+ const environment = await deps.records.read();
536
+ if (environment === null)
537
+ return;
538
+ const name = environment.distribution.name;
539
+ const registered = parseWslDistributions(await wsl.command(['--list', '--verbose'])).some((entry) => entry.name === name);
540
+ if (registered) {
541
+ const unregistered = await wsl.command(['--unregister', name], { timeoutMs: 10 * 60_000 });
542
+ if (unregistered.code !== 0) {
543
+ throw new AtomicCoreError('IO_ERROR', `WSL could not remove the distribution "${name}".`, `${unregistered.stdout.trim()} ${unregistered.stderr.trim()}`.trim());
544
+ }
545
+ }
546
+ await deps.records.remove();
547
+ };
548
+ const inventory = {
549
+ async inspect(effect, record) {
550
+ if (record.request.kind === 'remove')
551
+ return { kind: 'absent' };
552
+ try {
553
+ if (effect.kind === 'pull-image' || effect.kind === 'verify') {
554
+ const descriptor = await pinnedDescriptor(deps.descriptors, record);
555
+ return (await imagePresent(await ownTransport(), descriptor.image[guestPlatform]))
556
+ ? { kind: 'completed', owned_resource_ids: [] }
557
+ : { kind: 'absent' };
558
+ }
559
+ if (effect.kind === 'activate') {
560
+ const target = record.machine.operation.target;
561
+ const existing = target.kind === 'runtime' ? await deps.installations.read(target.installation_id) : null;
562
+ const planned = record.machine.consented?.descriptor_id ?? record.requirement_plan?.descriptor_id ?? null;
563
+ return existing !== null &&
564
+ existing.installation.active_descriptor_id === planned &&
565
+ existing.installation.status === 'ready'
566
+ ? { kind: 'completed', owned_resource_ids: [] }
567
+ : { kind: 'absent' };
568
+ }
569
+ }
570
+ catch {
571
+ // Nothing this core can check: the effect runs again, and fails there with its own reason.
572
+ }
573
+ return { kind: 'absent' };
574
+ },
575
+ needsRelogin: async () => false,
576
+ // Asked at every core start (`recovery.ts`): an operation waiting on a restart keeps waiting until
577
+ // WSL can start; then the probe that follows continues it under the consent it already has.
578
+ needsReboot: async (record) => record.machine.operation.phase === 'reboot-required' && !(await wslReady().catch(() => false)),
579
+ verifyCompletedSteps: async (record) => {
580
+ const steps = record.machine.operation.completed_step_ids;
581
+ if (steps.length === 0)
582
+ return [];
583
+ return (await wslReady().catch(() => false)) ? steps : [];
584
+ },
585
+ currentPlanDigest: async (record) => (await setupProbe(record).catch(() => null))?.plan.plan_digest ?? null,
586
+ };
587
+ return {
588
+ probe: (record) => record.request.kind === 'remove' && record.machine.operation.target.kind === 'environment'
589
+ ? environmentRemovalProbe(record)
590
+ : setupProbe(record),
591
+ async verifyHostStep(record) {
592
+ // The receipt is an assertion; the machine is the evidence (task 2.6's rule, on Windows too).
593
+ const answer = await setupProbe(record);
594
+ const { blockers } = answer.plan;
595
+ if (blockers.length > 0) {
596
+ return {
597
+ prerequisites_met: false,
598
+ needs_relogin: false,
599
+ error: {
600
+ code: blockers[0].code,
601
+ message: `WSL was reported as enabled, but the machine says: ${blockers.map((entry) => entry.message).join(' ')}`,
602
+ details: blockers.map((entry) => entry.reason ?? entry.code).join(','),
603
+ },
604
+ };
605
+ }
606
+ if (answer.host_step !== null) {
607
+ const missing = {
608
+ code: 'MANAGED_PREREQUISITE_BLOCKED',
609
+ message: 'WSL was reported as enabled, but it does not start yet; Windows may need a restart.',
610
+ details: 'enable-wsl',
611
+ };
612
+ return { prerequisites_met: false, needs_relogin: false, error: missing };
613
+ }
614
+ return { prerequisites_met: true, needs_relogin: false, error: null };
615
+ },
616
+ async prepare(record, signal, own) {
617
+ return held('preparing the environment', async () => {
618
+ const descriptor = await pinnedDescriptor(deps.descriptors, record);
619
+ const seen = await look();
620
+ if (seen.foreign) {
621
+ throw blocked(`A WSL distribution named "${seen.distribution.name}" exists that Atomic Chat did not create; it is not used or changed.`, 'foreign-distribution');
622
+ }
623
+ if (seen.facts.wsl.installed !== true || seen.facts.wsl.ready !== true) {
624
+ throw blocked('WSL is not ready on this computer yet.', 'wsl-not-ready');
625
+ }
626
+ const environment = seen.owned === null
627
+ ? await importOwn(record, seen, signal)
628
+ : seen.record;
629
+ const transport = wsl.distribution(environment.distribution.name);
630
+ await setupGuest({ wsl, sleep }, transport, environment.marker, signal);
631
+ const manifest = await deps.environmentManifests.pinned(environment.manifest_id);
632
+ await provisionGuest(transport, manifest.kind === 'available' ? manifest.manifest : null, descriptor, signal);
633
+ await checkGpu(transport, descriptor, seen, signal, own);
634
+ });
635
+ },
636
+ async pull(record, onProgress, signal) {
637
+ return held('pulling the engine image', async () => {
638
+ const descriptor = await pinnedDescriptor(deps.descriptors, record);
639
+ const image = descriptor.image[guestPlatform];
640
+ const transport = await ownTransport();
641
+ const label = 'Downloading the engine image';
642
+ onProgress({ label, completed: 0, total: descriptor.download_bytes, unit: 'bytes' });
643
+ // Inside the guest, through its own socket: the Engine API never leaves the distribution (D4).
644
+ await pullImageWithCurl(image, {
645
+ run: (argv, call) => transport.exec(argv, { user: GUEST_ROOT, ...call }),
646
+ signal,
647
+ knownTotalBytes: descriptor.download_bytes,
648
+ verify: guestDocker(transport),
649
+ onProgress: (progress) => onProgress({ label, completed: progress.current, total: progress.total, unit: 'bytes' }),
650
+ });
651
+ });
652
+ },
653
+ async verify(record, signal) {
654
+ return held('verifying the installation', async () => {
655
+ const target = record.machine.operation.target;
656
+ if (target.kind === 'environment') {
657
+ const seen = await look();
658
+ const docker = seen.guest?.facts.docker;
659
+ if (docker === undefined || !docker.daemon_reachable || !docker.gpu_runtime) {
660
+ throw blocked('Docker in the Atomic Chat distribution does not answer with a GPU runtime.', 'docker-unreachable');
661
+ }
662
+ return;
663
+ }
664
+ const descriptor = await pinnedDescriptor(deps.descriptors, record);
665
+ const image = descriptor.image[guestPlatform];
666
+ const transport = await ownTransport();
667
+ if (!(await imagePresent(transport, image))) {
668
+ throw new AtomicCoreError('MANAGED_IDENTITY_MISMATCH', 'The engine image in the Atomic Chat distribution does not carry the digest the descriptor pins.', `${image.repository}@${image.digest}`);
669
+ }
670
+ // Windows must reach what the guest publishes on its loopback (design D7): checked here, before
671
+ // the installation is called ready, and again at every load.
672
+ const facts = await probeWindowsHost(deps.host.probeDeps);
673
+ await checkLocalhostForwarding({
674
+ transport,
675
+ fetch: deps.fetch ?? fetch,
676
+ sleep,
677
+ wslconfig: facts.wslconfig,
678
+ signal,
679
+ });
680
+ });
681
+ },
682
+ unloadResident: async () => undefined,
683
+ async activate(record) {
684
+ const target = record.machine.operation.target;
685
+ if (target.kind !== 'runtime')
686
+ return;
687
+ const descriptor = await pinnedDescriptor(deps.descriptors, record);
688
+ const probeImage = descriptor.probe_image[guestPlatform];
689
+ const previous = await deps.installations.read(target.installation_id);
690
+ const ownsProbe = record.owned_resource_ids.includes(ownedImageId(probeImage)) ||
691
+ previous?.probe_image?.digest === probeImage.digest;
692
+ const installation = {
693
+ schema_version: 1,
694
+ installation: {
695
+ installation_id: target.installation_id,
696
+ engine_id: target.engine_id,
697
+ environment_id: record.machine.operation.environment_id,
698
+ active_descriptor_id: descriptor.descriptor_id,
699
+ candidate_descriptor_id: null,
700
+ availability: 'supported',
701
+ status: 'ready',
702
+ },
703
+ image: descriptor.image[guestPlatform],
704
+ ...(ownsProbe ? { probe_image: probeImage } : {}),
705
+ platform: guestPlatform,
706
+ installed_at: now().toISOString(),
707
+ };
708
+ await deps.installations.write(installation);
709
+ },
710
+ async remove(record) {
711
+ const target = record.machine.operation.target;
712
+ if (target.kind !== 'runtime') {
713
+ await removeEnvironment();
714
+ // The snapshot names the distribution until something probes again, and the app would offer
715
+ // to remove it a second time (live acceptance): say at once that it is gone.
716
+ const facts = await probeWindowsHost(deps.host.probeDeps).catch(() => null);
717
+ deps.onAssessment?.({
718
+ availability: 'setup-required',
719
+ gpus: facts?.gpus ?? [],
720
+ blockers: [],
721
+ selinux: null,
722
+ distribution: null,
723
+ memory_bytes: null,
724
+ });
725
+ return;
726
+ }
727
+ const existing = await deps.installations.read(target.installation_id);
728
+ // As on Linux: a loaded model first, its container confirmed stopped; loads held off till the end.
729
+ const hold = await unload(target.engine_id);
730
+ const lease = deps.keeper?.acquire('removing an engine');
731
+ try {
732
+ const environment = await deps.records.read();
733
+ if (environment !== null) {
734
+ const docker = guestDocker(wsl.distribution(environment.distribution.name));
735
+ for (const container of deps.journal
736
+ .list()
737
+ .filter((entry) => entry.engine_id === target.engine_id)) {
738
+ const stopped = await stopContainer(docker, container.container_id, STOP_TIMEOUT_SECONDS);
739
+ if (!stopped.confirmed) {
740
+ throw new AtomicCoreError('MANAGED_STOP_UNCONFIRMED', 'A container of this engine could not be confirmed stopped, so nothing was removed.', `${container.container_id}: ${stopped.reason}`);
741
+ }
742
+ await removeContainer(docker, container.container_id);
743
+ await deps.journal.remove(container.container_id);
744
+ }
745
+ if (existing !== null) {
746
+ if (existing.installation.status !== 'removing') {
747
+ await deps.installations.write({
748
+ ...existing,
749
+ installation: { ...existing.installation, status: 'removing' },
750
+ });
751
+ }
752
+ if ((await containersUsingImage(docker, existing.image)).length === 0)
753
+ await removeImage(docker, existing.image);
754
+ const probe = existing.probe_image;
755
+ if (probe !== undefined) {
756
+ const others = (await deps.installations.list()).filter((entry) => entry.installation.installation_id !== target.installation_id &&
757
+ entry.probe_image?.digest === probe.digest);
758
+ if (others.length === 0 && (await containersUsingImage(docker, probe)).length === 0) {
759
+ await removeImage(docker, probe);
760
+ }
761
+ }
762
+ }
763
+ }
764
+ const descriptorId = existing?.installation.active_descriptor_id ?? null;
765
+ if (descriptorId !== null)
766
+ await deps.removeEngineCaches(descriptorId);
767
+ if (record.request.retain_models === false &&
768
+ (await otherEngines(deps.installations, target)).length === 0) {
769
+ await deps.removeStoreModels();
770
+ }
771
+ await deps.installations.remove(target.installation_id);
772
+ }
773
+ finally {
774
+ lease?.release();
775
+ hold.release?.();
776
+ }
777
+ },
778
+ cleanup: async () => undefined,
779
+ inventory,
780
+ };
781
+ }
782
+ //# sourceMappingURL=windows-provisioner.js.map