@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.
- package/README.md +22 -0
- package/dist/app-daemon.js +20 -67
- package/dist/app-daemon.js.map +1 -1
- package/dist/backend/advisor/advisor.d.ts +132 -0
- package/dist/backend/advisor/advisor.js +537 -0
- package/dist/backend/advisor/advisor.js.map +1 -0
- package/dist/backend/advisor/index.d.ts +6 -0
- package/dist/backend/advisor/index.js +7 -0
- package/dist/backend/advisor/index.js.map +1 -0
- package/dist/backend/advisor/policy.d.ts +81 -0
- package/dist/backend/advisor/policy.js +154 -0
- package/dist/backend/advisor/policy.js.map +1 -0
- package/dist/backend/catalog/archive.d.ts +21 -7
- package/dist/backend/catalog/archive.js +57 -17
- package/dist/backend/catalog/archive.js.map +1 -1
- package/dist/backend/catalog/bundled-manifest-baseline.js +42 -26
- package/dist/backend/catalog/bundled-manifest-baseline.js.map +1 -1
- package/dist/backend/catalog/cuda-family.d.ts +12 -2
- package/dist/backend/catalog/cuda-family.js +30 -7
- package/dist/backend/catalog/cuda-family.js.map +1 -1
- package/dist/backend/catalog/index.d.ts +5 -0
- package/dist/backend/catalog/index.js +5 -0
- package/dist/backend/catalog/index.js.map +1 -1
- package/dist/backend/catalog/manifest.d.ts +5 -3
- package/dist/backend/catalog/manifest.js +12 -9
- package/dist/backend/catalog/manifest.js.map +1 -1
- package/dist/backend/catalog/migrate.d.ts +8 -6
- package/dist/backend/catalog/migrate.js +26 -15
- package/dist/backend/catalog/migrate.js.map +1 -1
- package/dist/backend/catalog/prism-catalog.d.ts +42 -0
- package/dist/backend/catalog/prism-catalog.js +101 -0
- package/dist/backend/catalog/prism-catalog.js.map +1 -0
- package/dist/backend/catalog/prism-manifest-baseline.d.ts +2 -0
- package/dist/backend/catalog/prism-manifest-baseline.js +11 -0
- package/dist/backend/catalog/prism-manifest-baseline.js.map +1 -0
- package/dist/backend/catalog/prism-manifest-baseline.json +134 -0
- package/dist/backend/catalog/prism-manifest.d.ts +90 -0
- package/dist/backend/catalog/prism-manifest.js +171 -0
- package/dist/backend/catalog/prism-manifest.js.map +1 -0
- package/dist/backend/catalog/turboquant-catalog.d.ts +60 -0
- package/dist/backend/catalog/turboquant-catalog.js +162 -0
- package/dist/backend/catalog/turboquant-catalog.js.map +1 -0
- package/dist/backend/catalog/turboquant-index.d.ts +104 -0
- package/dist/backend/catalog/turboquant-index.js +260 -0
- package/dist/backend/catalog/turboquant-index.js.map +1 -0
- package/dist/backend/index.d.ts +1 -0
- package/dist/backend/index.js +1 -0
- package/dist/backend/index.js.map +1 -1
- package/dist/backend/install/runtime-backend.d.ts +6 -6
- package/dist/backend/install/runtime-backend.js +23 -20
- package/dist/backend/install/runtime-backend.js.map +1 -1
- package/dist/backend/install/service.d.ts +106 -5
- package/dist/backend/install/service.js +247 -21
- package/dist/backend/install/service.js.map +1 -1
- package/dist/backend/installed/bundled.d.ts +19 -0
- package/dist/backend/installed/bundled.js +45 -0
- package/dist/backend/installed/bundled.js.map +1 -0
- package/dist/backend/installed/index.d.ts +1 -0
- package/dist/backend/installed/index.js +1 -0
- package/dist/backend/installed/index.js.map +1 -1
- package/dist/backend/installed/installed.js +3 -0
- package/dist/backend/installed/installed.js.map +1 -1
- package/dist/backend/optimal/optimal-cache.d.ts +27 -8
- package/dist/backend/optimal/optimal-cache.js +38 -19
- package/dist/backend/optimal/optimal-cache.js.map +1 -1
- package/dist/backend/optimal/optimal-store.js +1 -1
- package/dist/backend/optimal/optimal-store.js.map +1 -1
- package/dist/backend/select/categories.d.ts +2 -1
- package/dist/backend/select/categories.js +8 -1
- package/dist/backend/select/categories.js.map +1 -1
- package/dist/backend/select/features.d.ts +13 -5
- package/dist/backend/select/features.js +36 -6
- package/dist/backend/select/features.js.map +1 -1
- package/dist/backend/select/index.d.ts +2 -0
- package/dist/backend/select/index.js +2 -0
- package/dist/backend/select/index.js.map +1 -1
- package/dist/backend/select/prism.d.ts +54 -0
- package/dist/backend/select/prism.js +212 -0
- package/dist/backend/select/prism.js.map +1 -0
- package/dist/backend/select/recovery.d.ts +4 -2
- package/dist/backend/select/recovery.js +17 -5
- package/dist/backend/select/recovery.js.map +1 -1
- package/dist/backend/select/tiers.d.ts +20 -11
- package/dist/backend/select/tiers.js +49 -11
- package/dist/backend/select/tiers.js.map +1 -1
- package/dist/backend/select/turboquant-tiers.d.ts +45 -0
- package/dist/backend/select/turboquant-tiers.js +114 -0
- package/dist/backend/select/turboquant-tiers.js.map +1 -0
- package/dist/backend/types.d.ts +6 -69
- package/dist/cli/commands/backends.d.ts +10 -0
- package/dist/cli/commands/backends.js +142 -0
- package/dist/cli/commands/backends.js.map +1 -0
- package/dist/cli/commands/hardware.d.ts +13 -0
- package/dist/cli/commands/hardware.js +71 -0
- package/dist/cli/commands/hardware.js.map +1 -0
- package/dist/cli/commands/host-step.d.ts +28 -0
- package/dist/cli/commands/host-step.js +67 -0
- package/dist/cli/commands/host-step.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -1
- package/dist/cli/commands/index.js +4 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/serve.js +4 -4
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/shared.d.ts +6 -1
- package/dist/cli/commands/shared.js +7 -0
- package/dist/cli/commands/shared.js.map +1 -1
- package/dist/cli/io.d.ts +11 -0
- package/dist/cli/io.js +28 -3
- package/dist/cli/io.js.map +1 -1
- package/dist/cli/launch.js +2 -2
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +11 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/client/control-client.d.ts +128 -7
- package/dist/client/control-client.js +211 -12
- package/dist/client/control-client.js.map +1 -1
- package/dist/cloud/registry.js +9 -1
- package/dist/cloud/registry.js.map +1 -1
- package/dist/config/paths.d.ts +137 -0
- package/dist/config/paths.js +163 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/contracts/backend-advisor.d.ts +225 -0
- package/dist/contracts/backend-advisor.js +14 -0
- package/dist/contracts/backend-advisor.js.map +1 -0
- package/dist/contracts/control-api.d.ts +7 -1
- package/dist/contracts/control-api.js +7 -1
- package/dist/contracts/control-api.js.map +1 -1
- package/dist/contracts/decision.d.ts +394 -0
- package/dist/contracts/decision.js +69 -0
- package/dist/contracts/decision.js.map +1 -0
- package/dist/contracts/diffusion.d.ts +62 -9
- package/dist/contracts/embedding.d.ts +103 -0
- package/dist/contracts/embedding.js +24 -0
- package/dist/contracts/embedding.js.map +1 -0
- package/dist/contracts/engine-builds.d.ts +108 -0
- package/dist/contracts/engine-builds.js +11 -0
- package/dist/contracts/engine-builds.js.map +1 -0
- package/dist/contracts/engines.d.ts +157 -0
- package/dist/contracts/engines.js +50 -0
- package/dist/contracts/engines.js.map +1 -0
- package/dist/contracts/environment.d.ts +774 -0
- package/dist/contracts/environment.js +116 -0
- package/dist/contracts/environment.js.map +1 -0
- package/dist/contracts/errors.d.ts +43 -2
- package/dist/contracts/errors.js +41 -0
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/events.d.ts +82 -4
- package/dist/contracts/hardware.d.ts +79 -6
- package/dist/contracts/hardware.js +9 -5
- package/dist/contracts/hardware.js.map +1 -1
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/model-compatibility.d.ts +97 -0
- package/dist/contracts/model-compatibility.js +6 -0
- package/dist/contracts/model-compatibility.js.map +1 -0
- package/dist/contracts/model-setup.d.ts +115 -0
- package/dist/contracts/model-setup.js +33 -0
- package/dist/contracts/model-setup.js.map +1 -0
- package/dist/contracts/model-yml.d.ts +14 -0
- package/dist/contracts/model-yml.js +1 -0
- package/dist/contracts/model-yml.js.map +1 -1
- package/dist/contracts/session.d.ts +45 -2
- package/dist/contracts/session.js +14 -1
- package/dist/contracts/session.js.map +1 -1
- package/dist/contracts/settings.d.ts +44 -1
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/atomic-core.d.ts +44 -5
- package/dist/core/atomic-core.js +24 -0
- package/dist/core/atomic-core.js.map +1 -1
- package/dist/core/create.js +517 -23
- package/dist/core/create.js.map +1 -1
- package/dist/core/gpu/index.d.ts +6 -0
- package/dist/core/gpu/index.js +7 -0
- package/dist/core/gpu/index.js.map +1 -0
- package/dist/core/gpu/policy.d.ts +68 -0
- package/dist/core/gpu/policy.js +99 -0
- package/dist/core/gpu/policy.js.map +1 -0
- package/dist/core/gpu/residency.d.ts +44 -0
- package/dist/core/gpu/residency.js +101 -0
- package/dist/core/gpu/residency.js.map +1 -0
- package/dist/core/gpu-residency.d.ts +39 -0
- package/dist/core/gpu-residency.js +32 -0
- package/dist/core/gpu-residency.js.map +1 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/managed-engines.d.ts +207 -0
- package/dist/core/managed-engines.js +579 -0
- package/dist/core/managed-engines.js.map +1 -0
- package/dist/core/managed-environment.d.ts +72 -0
- package/dist/core/managed-environment.js +218 -0
- package/dist/core/managed-environment.js.map +1 -0
- package/dist/core/model-setup/index.d.ts +4 -0
- package/dist/core/model-setup/index.js +5 -0
- package/dist/core/model-setup/index.js.map +1 -0
- package/dist/core/model-setup/plan.d.ts +56 -0
- package/dist/core/model-setup/plan.js +158 -0
- package/dist/core/model-setup/plan.js.map +1 -0
- package/dist/core/model-setup/service.d.ts +92 -0
- package/dist/core/model-setup/service.js +329 -0
- package/dist/core/model-setup/service.js.map +1 -0
- package/dist/core/model-setup/store.d.ts +29 -0
- package/dist/core/model-setup/store.js +116 -0
- package/dist/core/model-setup/store.js.map +1 -0
- package/dist/core/model-setup/wiring.d.ts +59 -0
- package/dist/core/model-setup/wiring.js +132 -0
- package/dist/core/model-setup/wiring.js.map +1 -0
- package/dist/core/prism.d.ts +36 -0
- package/dist/core/prism.js +42 -0
- package/dist/core/prism.js.map +1 -0
- package/dist/core/public-server.d.ts +7 -0
- package/dist/core/public-server.js +2 -0
- package/dist/core/public-server.js.map +1 -1
- package/dist/core/sessions.d.ts +6 -1
- package/dist/core/sessions.js +18 -14
- package/dist/core/sessions.js.map +1 -1
- package/dist/core/types.d.ts +27 -1
- package/dist/core/types.js.map +1 -1
- package/dist/decision/args.d.ts +110 -0
- package/dist/decision/args.js +126 -0
- package/dist/decision/args.js.map +1 -0
- package/dist/decision/backoff.d.ts +25 -0
- package/dist/decision/backoff.js +33 -0
- package/dist/decision/backoff.js.map +1 -0
- package/dist/decision/engine-candidates.d.ts +52 -0
- package/dist/decision/engine-candidates.js +138 -0
- package/dist/decision/engine-candidates.js.map +1 -0
- package/dist/decision/engine-fallback.d.ts +41 -0
- package/dist/decision/engine-fallback.js +57 -0
- package/dist/decision/engine-fallback.js.map +1 -0
- package/dist/decision/engine-version.d.ts +27 -0
- package/dist/decision/engine-version.js +54 -0
- package/dist/decision/engine-version.js.map +1 -0
- package/dist/decision/engine.d.ts +114 -0
- package/dist/decision/engine.js +253 -0
- package/dist/decision/engine.js.map +1 -0
- package/dist/decision/http.d.ts +36 -0
- package/dist/decision/http.js +73 -0
- package/dist/decision/http.js.map +1 -0
- package/dist/decision/index.d.ts +20 -0
- package/dist/decision/index.js +21 -0
- package/dist/decision/index.js.map +1 -0
- package/dist/decision/model-facts.d.ts +32 -0
- package/dist/decision/model-facts.js +40 -0
- package/dist/decision/model-facts.js.map +1 -0
- package/dist/decision/outcome.d.ts +35 -0
- package/dist/decision/outcome.js +105 -0
- package/dist/decision/outcome.js.map +1 -0
- package/dist/decision/process.d.ts +67 -0
- package/dist/decision/process.js +133 -0
- package/dist/decision/process.js.map +1 -0
- package/dist/decision/readiness.d.ts +74 -0
- package/dist/decision/readiness.js +165 -0
- package/dist/decision/readiness.js.map +1 -0
- package/dist/decision/request.d.ts +11 -0
- package/dist/decision/request.js +56 -0
- package/dist/decision/request.js.map +1 -0
- package/dist/decision/service.d.ts +202 -0
- package/dist/decision/service.js +711 -0
- package/dist/decision/service.js.map +1 -0
- package/dist/decision/upstream-version.d.ts +23 -0
- package/dist/decision/upstream-version.js +34 -0
- package/dist/decision/upstream-version.js.map +1 -0
- package/dist/decision/wiring.d.ts +67 -0
- package/dist/decision/wiring.js +101 -0
- package/dist/decision/wiring.js.map +1 -0
- package/dist/diffusion/args.d.ts +4 -2
- package/dist/diffusion/args.js +10 -3
- package/dist/diffusion/args.js.map +1 -1
- package/dist/diffusion/image-job.js +1 -1
- package/dist/diffusion/image-job.js.map +1 -1
- package/dist/diffusion/install.d.ts +35 -11
- package/dist/diffusion/install.js +74 -49
- package/dist/diffusion/install.js.map +1 -1
- package/dist/diffusion/job-kind.d.ts +33 -7
- package/dist/diffusion/jobs.d.ts +6 -1
- package/dist/diffusion/jobs.js +60 -18
- package/dist/diffusion/jobs.js.map +1 -1
- package/dist/diffusion/parse.d.ts +1 -2
- package/dist/diffusion/parse.js +1 -13
- package/dist/diffusion/parse.js.map +1 -1
- package/dist/diffusion/progress.js +3 -0
- package/dist/diffusion/progress.js.map +1 -1
- package/dist/diffusion/server-process.d.ts +6 -0
- package/dist/diffusion/server-process.js +3 -2
- package/dist/diffusion/server-process.js.map +1 -1
- package/dist/diffusion/service.d.ts +52 -6
- package/dist/diffusion/service.js +215 -40
- package/dist/diffusion/service.js.map +1 -1
- package/dist/diffusion/session.d.ts +27 -3
- package/dist/diffusion/session.js +108 -17
- package/dist/diffusion/session.js.map +1 -1
- package/dist/diffusion/state.d.ts +19 -1
- package/dist/diffusion/state.js +10 -0
- package/dist/diffusion/state.js.map +1 -1
- package/dist/diffusion/tracker.d.ts +15 -1
- package/dist/diffusion/tracker.js +32 -6
- package/dist/diffusion/tracker.js.map +1 -1
- package/dist/diffusion/types.d.ts +7 -0
- package/dist/diffusion/types.js +11 -0
- package/dist/diffusion/types.js.map +1 -1
- package/dist/diffusion/video-estimate.d.ts +214 -0
- package/dist/diffusion/video-estimate.js +402 -0
- package/dist/diffusion/video-estimate.js.map +1 -0
- package/dist/diffusion/video-eta.d.ts +90 -0
- package/dist/diffusion/video-eta.js +248 -0
- package/dist/diffusion/video-eta.js.map +1 -0
- package/dist/diffusion/video-history.d.ts +45 -0
- package/dist/diffusion/video-history.js +121 -0
- package/dist/diffusion/video-history.js.map +1 -0
- package/dist/diffusion/video-job.d.ts +13 -5
- package/dist/diffusion/video-job.js +42 -15
- package/dist/diffusion/video-job.js.map +1 -1
- package/dist/diffusion/video-recipe.js +3 -0
- package/dist/diffusion/video-recipe.js.map +1 -1
- package/dist/diffusion/video-tiling.d.ts +54 -0
- package/dist/diffusion/video-tiling.js +70 -0
- package/dist/diffusion/video-tiling.js.map +1 -0
- package/dist/diffusion/wiring.d.ts +14 -1
- package/dist/diffusion/wiring.js +7 -0
- package/dist/diffusion/wiring.js.map +1 -1
- package/dist/downloads/protocol.d.ts +3 -8
- package/dist/downloads/protocol.js.map +1 -1
- package/dist/embedding/args.d.ts +39 -0
- package/dist/embedding/args.js +46 -0
- package/dist/embedding/args.js.map +1 -0
- package/dist/embedding/engine.d.ts +50 -0
- package/dist/embedding/engine.js +100 -0
- package/dist/embedding/engine.js.map +1 -0
- package/dist/embedding/ffmpeg.d.ts +18 -0
- package/dist/embedding/ffmpeg.js +63 -0
- package/dist/embedding/ffmpeg.js.map +1 -0
- package/dist/embedding/index.d.ts +16 -0
- package/dist/embedding/index.js +17 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/model-facts.d.ts +51 -0
- package/dist/embedding/model-facts.js +84 -0
- package/dist/embedding/model-facts.js.map +1 -0
- package/dist/embedding/process.d.ts +66 -0
- package/dist/embedding/process.js +131 -0
- package/dist/embedding/process.js.map +1 -0
- package/dist/embedding/readiness.d.ts +56 -0
- package/dist/embedding/readiness.js +114 -0
- package/dist/embedding/readiness.js.map +1 -0
- package/dist/embedding/request.d.ts +43 -0
- package/dist/embedding/request.js +285 -0
- package/dist/embedding/request.js.map +1 -0
- package/dist/embedding/service.d.ts +152 -0
- package/dist/embedding/service.js +602 -0
- package/dist/embedding/service.js.map +1 -0
- package/dist/embedding/wiring.d.ts +51 -0
- package/dist/embedding/wiring.js +79 -0
- package/dist/embedding/wiring.js.map +1 -0
- package/dist/engine-builds/builds.d.ts +54 -0
- package/dist/engine-builds/builds.js +151 -0
- package/dist/engine-builds/builds.js.map +1 -0
- package/dist/engine-builds/index.d.ts +10 -0
- package/dist/engine-builds/index.js +11 -0
- package/dist/engine-builds/index.js.map +1 -0
- package/dist/engine-builds/install.d.ts +42 -0
- package/dist/engine-builds/install.js +100 -0
- package/dist/engine-builds/install.js.map +1 -0
- package/dist/engine-builds/manifest.d.ts +121 -0
- package/dist/engine-builds/manifest.js +254 -0
- package/dist/engine-builds/manifest.js.map +1 -0
- package/dist/engine-builds/order.d.ts +24 -0
- package/dist/engine-builds/order.js +44 -0
- package/dist/engine-builds/order.js.map +1 -0
- package/dist/engine-builds/select.d.ts +123 -0
- package/dist/engine-builds/select.js +223 -0
- package/dist/engine-builds/select.js.map +1 -0
- package/dist/engine-builds/service.d.ts +123 -0
- package/dist/engine-builds/service.js +392 -0
- package/dist/engine-builds/service.js.map +1 -0
- package/dist/engines/descriptor-order.d.ts +28 -0
- package/dist/engines/descriptor-order.js +60 -0
- package/dist/engines/descriptor-order.js.map +1 -0
- package/dist/engines/engine-build.d.ts +23 -0
- package/dist/engines/engine-build.js +58 -0
- package/dist/engines/engine-build.js.map +1 -0
- package/dist/engines/index.d.ts +10 -0
- package/dist/engines/index.js +11 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/llamacpp.d.ts +71 -0
- package/dist/engines/llamacpp.js +176 -0
- package/dist/engines/llamacpp.js.map +1 -0
- package/dist/engines/managed.d.ts +49 -0
- package/dist/engines/managed.js +88 -0
- package/dist/engines/managed.js.map +1 -0
- package/dist/engines/service.d.ts +46 -0
- package/dist/engines/service.js +61 -0
- package/dist/engines/service.js.map +1 -0
- package/dist/engines/versions.d.ts +65 -0
- package/dist/engines/versions.js +259 -0
- package/dist/engines/versions.js.map +1 -0
- package/dist/hardware/cpu-flags.d.ts +44 -0
- package/dist/hardware/cpu-flags.js +206 -0
- package/dist/hardware/cpu-flags.js.map +1 -0
- package/dist/hardware/drm-sysfs.d.ts +51 -0
- package/dist/hardware/drm-sysfs.js +67 -0
- package/dist/hardware/drm-sysfs.js.map +1 -0
- package/dist/hardware/facts.d.ts +42 -0
- package/dist/hardware/facts.js +92 -0
- package/dist/hardware/facts.js.map +1 -0
- package/dist/hardware/index.d.ts +19 -3
- package/dist/hardware/index.js +19 -3
- package/dist/hardware/index.js.map +1 -1
- package/dist/hardware/merge.d.ts +55 -0
- package/dist/hardware/merge.js +141 -0
- package/dist/hardware/merge.js.map +1 -0
- package/dist/hardware/nvidia-smi.d.ts +43 -0
- package/dist/hardware/nvidia-smi.js +118 -0
- package/dist/hardware/nvidia-smi.js.map +1 -0
- package/dist/hardware/probe-common.d.ts +72 -0
- package/dist/hardware/probe-common.js +106 -0
- package/dist/hardware/probe-common.js.map +1 -0
- package/dist/hardware/probe-darwin.d.ts +20 -0
- package/dist/hardware/probe-darwin.js +76 -0
- package/dist/hardware/probe-darwin.js.map +1 -0
- package/dist/hardware/probe-linux.d.ts +9 -0
- package/dist/hardware/probe-linux.js +133 -0
- package/dist/hardware/probe-linux.js.map +1 -0
- package/dist/hardware/probe-windows.d.ts +7 -0
- package/dist/hardware/probe-windows.js +50 -0
- package/dist/hardware/probe-windows.js.map +1 -0
- package/dist/hardware/probe.d.ts +16 -0
- package/dist/hardware/probe.js +65 -0
- package/dist/hardware/probe.js.map +1 -0
- package/dist/hardware/service.d.ts +60 -0
- package/dist/hardware/service.js +114 -0
- package/dist/hardware/service.js.map +1 -0
- package/dist/hardware/vulkan.d.ts +47 -0
- package/dist/hardware/vulkan.js +148 -0
- package/dist/hardware/vulkan.js.map +1 -0
- package/dist/hardware/windows-video.d.ts +97 -0
- package/dist/hardware/windows-video.js +214 -0
- package/dist/hardware/windows-video.js.map +1 -0
- package/dist/host/app-daemon.d.ts +47 -0
- package/dist/host/app-daemon.js +146 -0
- package/dist/host/app-daemon.js.map +1 -0
- package/dist/host/index.d.ts +5 -3
- package/dist/host/index.js +5 -3
- package/dist/host/index.js.map +1 -1
- package/dist/host/log-file.d.ts +74 -0
- package/dist/host/log-file.js +214 -0
- package/dist/host/log-file.js.map +1 -0
- package/dist/host/recipes/enable-wsl.d.ts +63 -0
- package/dist/host/recipes/enable-wsl.js +73 -0
- package/dist/host/recipes/enable-wsl.js.map +1 -0
- package/dist/host/recipes/executor-io-windows.d.ts +69 -0
- package/dist/host/recipes/executor-io-windows.js +235 -0
- package/dist/host/recipes/executor-io-windows.js.map +1 -0
- package/dist/host/recipes/executor-io.d.ts +80 -0
- package/dist/host/recipes/executor-io.js +211 -0
- package/dist/host/recipes/executor-io.js.map +1 -0
- package/dist/host/recipes/executor.d.ts +81 -0
- package/dist/host/recipes/executor.js +678 -0
- package/dist/host/recipes/executor.js.map +1 -0
- package/dist/host/recipes/guest-executor.d.ts +29 -0
- package/dist/host/recipes/guest-executor.js +76 -0
- package/dist/host/recipes/guest-executor.js.map +1 -0
- package/dist/host/recipes/index.d.ts +16 -0
- package/dist/host/recipes/index.js +17 -0
- package/dist/host/recipes/index.js.map +1 -0
- package/dist/host/recipes/install-container-runtime.d.ts +389 -0
- package/dist/host/recipes/install-container-runtime.js +796 -0
- package/dist/host/recipes/install-container-runtime.js.map +1 -0
- package/dist/host/recipes/openpgp.d.ts +23 -0
- package/dist/host/recipes/openpgp.js +153 -0
- package/dist/host/recipes/openpgp.js.map +1 -0
- package/dist/host/recipes/request-file.d.ts +96 -0
- package/dist/host/recipes/request-file.js +103 -0
- package/dist/host/recipes/request-file.js.map +1 -0
- package/dist/lock/process-journal.d.ts +5 -2
- package/dist/lock/process-journal.js.map +1 -1
- package/dist/models/capabilities.d.ts +7 -0
- package/dist/models/capabilities.js +17 -1
- package/dist/models/capabilities.js.map +1 -1
- package/dist/models/compatibility/index.d.ts +10 -0
- package/dist/models/compatibility/index.js +11 -0
- package/dist/models/compatibility/index.js.map +1 -0
- package/dist/models/compatibility/inspect.d.ts +19 -0
- package/dist/models/compatibility/inspect.js +59 -0
- package/dist/models/compatibility/inspect.js.map +1 -0
- package/dist/models/compatibility/resolve.d.ts +59 -0
- package/dist/models/compatibility/resolve.js +219 -0
- package/dist/models/compatibility/resolve.js.map +1 -0
- package/dist/models/compatibility/rules-baseline.d.ts +2 -0
- package/dist/models/compatibility/rules-baseline.js +10 -0
- package/dist/models/compatibility/rules-baseline.js.map +1 -0
- package/dist/models/compatibility/rules-baseline.json +292 -0
- package/dist/models/compatibility/rules-service.d.ts +36 -0
- package/dist/models/compatibility/rules-service.js +109 -0
- package/dist/models/compatibility/rules-service.js.map +1 -0
- package/dist/models/compatibility/rules.d.ts +81 -0
- package/dist/models/compatibility/rules.js +164 -0
- package/dist/models/compatibility/rules.js.map +1 -0
- package/dist/models/compatibility/service.d.ts +59 -0
- package/dist/models/compatibility/service.js +137 -0
- package/dist/models/compatibility/service.js.map +1 -0
- package/dist/models/decision-checkpoint.d.ts +22 -0
- package/dist/models/decision-checkpoint.js +33 -0
- package/dist/models/decision-checkpoint.js.map +1 -0
- package/dist/models/gguf/classify.d.ts +27 -1
- package/dist/models/gguf/classify.js +78 -2
- package/dist/models/gguf/classify.js.map +1 -1
- package/dist/models/gguf/index.d.ts +1 -0
- package/dist/models/gguf/index.js +1 -0
- package/dist/models/gguf/index.js.map +1 -1
- package/dist/models/gguf/tensors.d.ts +56 -0
- package/dist/models/gguf/tensors.js +236 -0
- package/dist/models/gguf/tensors.js.map +1 -0
- package/dist/models/index.d.ts +2 -0
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -1
- package/dist/router/resolve.d.ts +7 -1
- package/dist/router/resolve.js +14 -1
- package/dist/router/resolve.js.map +1 -1
- package/dist/runtime/container/argv.d.ts +88 -0
- package/dist/runtime/container/argv.js +406 -0
- package/dist/runtime/container/argv.js.map +1 -0
- package/dist/runtime/container/docker-binary.d.ts +4 -0
- package/dist/runtime/container/docker-binary.js +34 -0
- package/dist/runtime/container/docker-binary.js.map +1 -0
- package/dist/runtime/container/env.d.ts +17 -0
- package/dist/runtime/container/env.js +52 -0
- package/dist/runtime/container/env.js.map +1 -0
- package/dist/runtime/container/exec.d.ts +27 -0
- package/dist/runtime/container/exec.js +79 -0
- package/dist/runtime/container/exec.js.map +1 -0
- package/dist/runtime/container/execution-journal.d.ts +55 -0
- package/dist/runtime/container/execution-journal.js +167 -0
- package/dist/runtime/container/execution-journal.js.map +1 -0
- package/dist/runtime/container/heartbeat.d.ts +47 -0
- package/dist/runtime/container/heartbeat.js +78 -0
- package/dist/runtime/container/heartbeat.js.map +1 -0
- package/dist/runtime/container/index.d.ts +30 -0
- package/dist/runtime/container/index.js +31 -0
- package/dist/runtime/container/index.js.map +1 -0
- package/dist/runtime/container/operations.d.ts +40 -0
- package/dist/runtime/container/operations.js +233 -0
- package/dist/runtime/container/operations.js.map +1 -0
- package/dist/runtime/container/pull.d.ts +48 -0
- package/dist/runtime/container/pull.js +280 -0
- package/dist/runtime/container/pull.js.map +1 -0
- package/dist/runtime/container/reconcile.d.ts +34 -0
- package/dist/runtime/container/reconcile.js +79 -0
- package/dist/runtime/container/reconcile.js.map +1 -0
- package/dist/runtime/container/types.d.ts +124 -0
- package/dist/runtime/container/types.js +2 -0
- package/dist/runtime/container/types.js.map +1 -0
- package/dist/runtime/container/watchdog.d.ts +114 -0
- package/dist/runtime/container/watchdog.js +418 -0
- package/dist/runtime/container/watchdog.js.map +1 -0
- package/dist/runtime/container/wiring.d.ts +78 -0
- package/dist/runtime/container/wiring.js +92 -0
- package/dist/runtime/container/wiring.js.map +1 -0
- package/dist/runtime/container/wsl-exec.d.ts +13 -0
- package/dist/runtime/container/wsl-exec.js +18 -0
- package/dist/runtime/container/wsl-exec.js.map +1 -0
- package/dist/runtime/environment/cached-document.d.ts +128 -0
- package/dist/runtime/environment/cached-document.js +218 -0
- package/dist/runtime/environment/cached-document.js.map +1 -0
- package/dist/runtime/environment/canonical-json.d.ts +78 -0
- package/dist/runtime/environment/canonical-json.js +86 -0
- package/dist/runtime/environment/canonical-json.js.map +1 -0
- package/dist/runtime/environment/descriptor-provider.d.ts +121 -0
- package/dist/runtime/environment/descriptor-provider.js +159 -0
- package/dist/runtime/environment/descriptor-provider.js.map +1 -0
- package/dist/runtime/environment/descriptor.d.ts +35 -0
- package/dist/runtime/environment/descriptor.js +239 -0
- package/dist/runtime/environment/descriptor.js.map +1 -0
- package/dist/runtime/environment/diagnostics.d.ts +50 -0
- package/dist/runtime/environment/diagnostics.js +114 -0
- package/dist/runtime/environment/diagnostics.js.map +1 -0
- package/dist/runtime/environment/document-fields.d.ts +39 -0
- package/dist/runtime/environment/document-fields.js +96 -0
- package/dist/runtime/environment/document-fields.js.map +1 -0
- package/dist/runtime/environment/environment-manifest-provider.d.ts +65 -0
- package/dist/runtime/environment/environment-manifest-provider.js +89 -0
- package/dist/runtime/environment/environment-manifest-provider.js.map +1 -0
- package/dist/runtime/environment/environment-manifest.d.ts +35 -0
- package/dist/runtime/environment/environment-manifest.js +131 -0
- package/dist/runtime/environment/environment-manifest.js.map +1 -0
- package/dist/runtime/environment/guest-host.d.ts +43 -0
- package/dist/runtime/environment/guest-host.js +88 -0
- package/dist/runtime/environment/guest-host.js.map +1 -0
- package/dist/runtime/environment/host-exec.d.ts +38 -0
- package/dist/runtime/environment/host-exec.js +145 -0
- package/dist/runtime/environment/host-exec.js.map +1 -0
- package/dist/runtime/environment/host-step-failure.d.ts +33 -0
- package/dist/runtime/environment/host-step-failure.js +34 -0
- package/dist/runtime/environment/host-step-failure.js.map +1 -0
- package/dist/runtime/environment/index.d.ts +56 -0
- package/dist/runtime/environment/index.js +57 -0
- package/dist/runtime/environment/index.js.map +1 -0
- package/dist/runtime/environment/installations.d.ts +25 -0
- package/dist/runtime/environment/installations.js +70 -0
- package/dist/runtime/environment/installations.js.map +1 -0
- package/dist/runtime/environment/inventory.d.ts +42 -0
- package/dist/runtime/environment/inventory.js +57 -0
- package/dist/runtime/environment/inventory.js.map +1 -0
- package/dist/runtime/environment/linux-blockers.d.ts +130 -0
- package/dist/runtime/environment/linux-blockers.js +251 -0
- package/dist/runtime/environment/linux-blockers.js.map +1 -0
- package/dist/runtime/environment/linux-docker-facts.d.ts +200 -0
- package/dist/runtime/environment/linux-docker-facts.js +342 -0
- package/dist/runtime/environment/linux-docker-facts.js.map +1 -0
- package/dist/runtime/environment/linux-docker-network.d.ts +80 -0
- package/dist/runtime/environment/linux-docker-network.js +195 -0
- package/dist/runtime/environment/linux-docker-network.js.map +1 -0
- package/dist/runtime/environment/linux-host.d.ts +22 -0
- package/dist/runtime/environment/linux-host.js +98 -0
- package/dist/runtime/environment/linux-host.js.map +1 -0
- package/dist/runtime/environment/linux-plan.d.ts +126 -0
- package/dist/runtime/environment/linux-plan.js +392 -0
- package/dist/runtime/environment/linux-plan.js.map +1 -0
- package/dist/runtime/environment/linux-probe.d.ts +245 -0
- package/dist/runtime/environment/linux-probe.js +315 -0
- package/dist/runtime/environment/linux-probe.js.map +1 -0
- package/dist/runtime/environment/linux-provisioner.d.ts +102 -0
- package/dist/runtime/environment/linux-provisioner.js +734 -0
- package/dist/runtime/environment/linux-provisioner.js.map +1 -0
- package/dist/runtime/environment/provisioner-descriptors.d.ts +17 -0
- package/dist/runtime/environment/provisioner-descriptors.js +62 -0
- package/dist/runtime/environment/provisioner-descriptors.js.map +1 -0
- package/dist/runtime/environment/recovery.d.ts +74 -0
- package/dist/runtime/environment/recovery.js +121 -0
- package/dist/runtime/environment/recovery.js.map +1 -0
- package/dist/runtime/environment/rootfs-download.d.ts +2 -0
- package/dist/runtime/environment/rootfs-download.js +47 -0
- package/dist/runtime/environment/rootfs-download.js.map +1 -0
- package/dist/runtime/environment/service.d.ts +280 -0
- package/dist/runtime/environment/service.js +776 -0
- package/dist/runtime/environment/service.js.map +1 -0
- package/dist/runtime/environment/state.d.ts +163 -0
- package/dist/runtime/environment/state.js +479 -0
- package/dist/runtime/environment/state.js.map +1 -0
- package/dist/runtime/environment/store-models.d.ts +19 -0
- package/dist/runtime/environment/store-models.js +30 -0
- package/dist/runtime/environment/store-models.js.map +1 -0
- package/dist/runtime/environment/store.d.ts +210 -0
- package/dist/runtime/environment/store.js +438 -0
- package/dist/runtime/environment/store.js.map +1 -0
- package/dist/runtime/environment/windows-environment-record.d.ts +48 -0
- package/dist/runtime/environment/windows-environment-record.js +89 -0
- package/dist/runtime/environment/windows-environment-record.js.map +1 -0
- package/dist/runtime/environment/windows-forwarding.d.ts +27 -0
- package/dist/runtime/environment/windows-forwarding.js +84 -0
- package/dist/runtime/environment/windows-forwarding.js.map +1 -0
- package/dist/runtime/environment/windows-guest-setup.d.ts +48 -0
- package/dist/runtime/environment/windows-guest-setup.js +157 -0
- package/dist/runtime/environment/windows-guest-setup.js.map +1 -0
- package/dist/runtime/environment/windows-host.d.ts +46 -0
- package/dist/runtime/environment/windows-host.js +163 -0
- package/dist/runtime/environment/windows-host.js.map +1 -0
- package/dist/runtime/environment/windows-plan.d.ts +78 -0
- package/dist/runtime/environment/windows-plan.js +216 -0
- package/dist/runtime/environment/windows-plan.js.map +1 -0
- package/dist/runtime/environment/windows-probe.d.ts +135 -0
- package/dist/runtime/environment/windows-probe.js +261 -0
- package/dist/runtime/environment/windows-probe.js.map +1 -0
- package/dist/runtime/environment/windows-provisioner.d.ts +113 -0
- package/dist/runtime/environment/windows-provisioner.js +782 -0
- package/dist/runtime/environment/windows-provisioner.js.map +1 -0
- package/dist/runtime/environment/wiring.d.ts +117 -0
- package/dist/runtime/environment/wiring.js +354 -0
- package/dist/runtime/environment/wiring.js.map +1 -0
- package/dist/runtime/foundation-models/runtime.d.ts +8 -0
- package/dist/runtime/foundation-models/runtime.js +5 -2
- package/dist/runtime/foundation-models/runtime.js.map +1 -1
- package/dist/runtime/llamacpp/args.d.ts +10 -1
- package/dist/runtime/llamacpp/args.js +43 -7
- package/dist/runtime/llamacpp/args.js.map +1 -1
- package/dist/runtime/llamacpp/fit-margin.d.ts +46 -0
- package/dist/runtime/llamacpp/fit-margin.js +47 -0
- package/dist/runtime/llamacpp/fit-margin.js.map +1 -0
- package/dist/runtime/llamacpp/index.d.ts +1 -0
- package/dist/runtime/llamacpp/index.js +1 -0
- package/dist/runtime/llamacpp/index.js.map +1 -1
- package/dist/runtime/llamacpp/load-plan.d.ts +23 -1
- package/dist/runtime/llamacpp/load-plan.js +82 -1
- package/dist/runtime/llamacpp/load-plan.js.map +1 -1
- package/dist/runtime/llamacpp/policy.d.ts +16 -0
- package/dist/runtime/llamacpp/policy.js +20 -0
- package/dist/runtime/llamacpp/policy.js.map +1 -1
- package/dist/runtime/llamacpp/probe.d.ts +21 -1
- package/dist/runtime/llamacpp/probe.js +32 -6
- package/dist/runtime/llamacpp/probe.js.map +1 -1
- package/dist/runtime/llamacpp/runtime.d.ts +56 -1
- package/dist/runtime/llamacpp/runtime.js +142 -15
- package/dist/runtime/llamacpp/runtime.js.map +1 -1
- package/dist/runtime/managed-engines/index.d.ts +8 -0
- package/dist/runtime/managed-engines/index.js +9 -0
- package/dist/runtime/managed-engines/index.js.map +1 -0
- package/dist/runtime/managed-engines/runtime.d.ts +140 -0
- package/dist/runtime/managed-engines/runtime.js +402 -0
- package/dist/runtime/managed-engines/runtime.js.map +1 -0
- package/dist/runtime/managed-engines/spec.d.ts +70 -0
- package/dist/runtime/managed-engines/spec.js +39 -0
- package/dist/runtime/managed-engines/spec.js.map +1 -0
- package/dist/runtime/managed-models/check.d.ts +50 -0
- package/dist/runtime/managed-models/check.js +157 -0
- package/dist/runtime/managed-models/check.js.map +1 -0
- package/dist/runtime/managed-models/compatibility.d.ts +256 -0
- package/dist/runtime/managed-models/compatibility.js +594 -0
- package/dist/runtime/managed-models/compatibility.js.map +1 -0
- package/dist/runtime/managed-models/delete.d.ts +15 -0
- package/dist/runtime/managed-models/delete.js +60 -0
- package/dist/runtime/managed-models/delete.js.map +1 -0
- package/dist/runtime/managed-models/guest-files.d.ts +8 -0
- package/dist/runtime/managed-models/guest-files.js +49 -0
- package/dist/runtime/managed-models/guest-files.js.map +1 -0
- package/dist/runtime/managed-models/index.d.ts +17 -0
- package/dist/runtime/managed-models/index.js +18 -0
- package/dist/runtime/managed-models/index.js.map +1 -0
- package/dist/runtime/managed-models/location.d.ts +22 -0
- package/dist/runtime/managed-models/location.js +53 -0
- package/dist/runtime/managed-models/location.js.map +1 -0
- package/dist/runtime/managed-models/migrate.d.ts +30 -0
- package/dist/runtime/managed-models/migrate.js +119 -0
- package/dist/runtime/managed-models/migrate.js.map +1 -0
- package/dist/runtime/managed-models/model-dir.d.ts +36 -0
- package/dist/runtime/managed-models/model-dir.js +136 -0
- package/dist/runtime/managed-models/model-dir.js.map +1 -0
- package/dist/runtime/managed-models/quant-format.d.ts +71 -0
- package/dist/runtime/managed-models/quant-format.js +299 -0
- package/dist/runtime/managed-models/quant-format.js.map +1 -0
- package/dist/runtime/managed-models/registry.d.ts +26 -0
- package/dist/runtime/managed-models/registry.js +66 -0
- package/dist/runtime/managed-models/registry.js.map +1 -0
- package/dist/runtime/managed-text/adapter.d.ts +266 -0
- package/dist/runtime/managed-text/adapter.js +96 -0
- package/dist/runtime/managed-text/adapter.js.map +1 -0
- package/dist/runtime/managed-text/backend-target.d.ts +3 -0
- package/dist/runtime/managed-text/backend-target.js +52 -0
- package/dist/runtime/managed-text/backend-target.js.map +1 -0
- package/dist/runtime/managed-text/deployment.d.ts +14 -0
- package/dist/runtime/managed-text/deployment.js +32 -0
- package/dist/runtime/managed-text/deployment.js.map +1 -0
- package/dist/runtime/managed-text/engine-cache.d.ts +15 -0
- package/dist/runtime/managed-text/engine-cache.js +64 -0
- package/dist/runtime/managed-text/engine-cache.js.map +1 -0
- package/dist/runtime/managed-text/gateway.d.ts +158 -0
- package/dist/runtime/managed-text/gateway.js +535 -0
- package/dist/runtime/managed-text/gateway.js.map +1 -0
- package/dist/runtime/managed-text/generation-defaults.d.ts +23 -0
- package/dist/runtime/managed-text/generation-defaults.js +51 -0
- package/dist/runtime/managed-text/generation-defaults.js.map +1 -0
- package/dist/runtime/managed-text/index.d.ts +26 -0
- package/dist/runtime/managed-text/index.js +27 -0
- package/dist/runtime/managed-text/index.js.map +1 -0
- package/dist/runtime/managed-text/lifecycle.d.ts +276 -0
- package/dist/runtime/managed-text/lifecycle.js +859 -0
- package/dist/runtime/managed-text/lifecycle.js.map +1 -0
- package/dist/runtime/managed-text/load-policy.d.ts +47 -0
- package/dist/runtime/managed-text/load-policy.js +111 -0
- package/dist/runtime/managed-text/load-policy.js.map +1 -0
- package/dist/runtime/managed-text/mount-source.d.ts +14 -0
- package/dist/runtime/managed-text/mount-source.js +18 -0
- package/dist/runtime/managed-text/mount-source.js.map +1 -0
- package/dist/runtime/managed-text/readiness.d.ts +13 -0
- package/dist/runtime/managed-text/readiness.js +24 -0
- package/dist/runtime/managed-text/readiness.js.map +1 -0
- package/dist/runtime/managed-text/request-rules.d.ts +18 -0
- package/dist/runtime/managed-text/request-rules.js +62 -0
- package/dist/runtime/managed-text/request-rules.js.map +1 -0
- package/dist/runtime/managed-text/types.d.ts +88 -0
- package/dist/runtime/managed-text/types.js +12 -0
- package/dist/runtime/managed-text/types.js.map +1 -0
- package/dist/runtime/managed-text/wsl-deployment.d.ts +24 -0
- package/dist/runtime/managed-text/wsl-deployment.js +70 -0
- package/dist/runtime/managed-text/wsl-deployment.js.map +1 -0
- package/dist/runtime/mlx/errors.d.ts +6 -1
- package/dist/runtime/mlx/errors.js +7 -2
- package/dist/runtime/mlx/errors.js.map +1 -1
- package/dist/runtime/mlx/runtime.d.ts +36 -1
- package/dist/runtime/mlx/runtime.js +85 -4
- package/dist/runtime/mlx/runtime.js.map +1 -1
- package/dist/runtime/shared/backend-output.d.ts +23 -0
- package/dist/runtime/shared/backend-output.js +32 -0
- package/dist/runtime/shared/backend-output.js.map +1 -0
- package/dist/runtime/shared/bounded-output.d.ts +24 -0
- package/dist/runtime/shared/bounded-output.js +63 -0
- package/dist/runtime/shared/bounded-output.js.map +1 -0
- package/dist/runtime/shared/external-sessions.js +9 -1
- package/dist/runtime/shared/external-sessions.js.map +1 -1
- package/dist/runtime/shared/gpu-occupancy.d.ts +60 -0
- package/dist/runtime/shared/gpu-occupancy.js +10 -0
- package/dist/runtime/shared/gpu-occupancy.js.map +1 -0
- package/dist/runtime/shared/index.d.ts +4 -0
- package/dist/runtime/shared/index.js +4 -0
- package/dist/runtime/shared/index.js.map +1 -1
- package/dist/runtime/shared/local-runtime.d.ts +35 -0
- package/dist/runtime/shared/ports.d.ts +6 -0
- package/dist/runtime/shared/ports.js +12 -1
- package/dist/runtime/shared/ports.js.map +1 -1
- package/dist/runtime/shared/process.d.ts +11 -0
- package/dist/runtime/shared/process.js +20 -0
- package/dist/runtime/shared/process.js.map +1 -1
- package/dist/runtime/shared/redact-args.d.ts +7 -0
- package/dist/runtime/shared/redact-args.js +26 -0
- package/dist/runtime/shared/redact-args.js.map +1 -0
- package/dist/runtime/shared/sidecar.d.ts +15 -0
- package/dist/runtime/shared/sidecar.js +43 -8
- package/dist/runtime/shared/sidecar.js.map +1 -1
- package/dist/runtime/tensorrt-llm/adapter.d.ts +250 -0
- package/dist/runtime/tensorrt-llm/adapter.js +1011 -0
- package/dist/runtime/tensorrt-llm/adapter.js.map +1 -0
- package/dist/runtime/tensorrt-llm/check.d.ts +12 -0
- package/dist/runtime/tensorrt-llm/check.js +21 -0
- package/dist/runtime/tensorrt-llm/check.js.map +1 -0
- package/dist/runtime/tensorrt-llm/compatibility.d.ts +100 -0
- package/dist/runtime/tensorrt-llm/compatibility.js +181 -0
- package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -0
- package/dist/runtime/tensorrt-llm/engine.d.ts +3 -0
- package/dist/runtime/tensorrt-llm/engine.js +24 -0
- package/dist/runtime/tensorrt-llm/engine.js.map +1 -0
- package/dist/runtime/tensorrt-llm/host-facts.d.ts +55 -0
- package/dist/runtime/tensorrt-llm/host-facts.js +87 -0
- package/dist/runtime/tensorrt-llm/host-facts.js.map +1 -0
- package/dist/runtime/tensorrt-llm/index.d.ts +30 -0
- package/dist/runtime/tensorrt-llm/index.js +31 -0
- package/dist/runtime/tensorrt-llm/index.js.map +1 -0
- package/dist/runtime/tensorrt-llm/installation.d.ts +23 -0
- package/dist/runtime/tensorrt-llm/installation.js +53 -0
- package/dist/runtime/tensorrt-llm/installation.js.map +1 -0
- package/dist/runtime/tensorrt-llm/kv-cache.d.ts +25 -0
- package/dist/runtime/tensorrt-llm/kv-cache.js +28 -0
- package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -0
- package/dist/runtime/tensorrt-llm/prelaunch.d.ts +20 -0
- package/dist/runtime/tensorrt-llm/prelaunch.js +168 -0
- package/dist/runtime/tensorrt-llm/prelaunch.js.map +1 -0
- package/dist/runtime/tensorrt-llm/route-policy.d.ts +19 -0
- package/dist/runtime/tensorrt-llm/route-policy.js +17 -0
- package/dist/runtime/tensorrt-llm/route-policy.js.map +1 -0
- package/dist/runtime/tensorrt-llm/settings.d.ts +7 -0
- package/dist/runtime/tensorrt-llm/settings.js +48 -0
- package/dist/runtime/tensorrt-llm/settings.js.map +1 -0
- package/dist/runtime/vllm/adapter.d.ts +46 -0
- package/dist/runtime/vllm/adapter.js +425 -0
- package/dist/runtime/vllm/adapter.js.map +1 -0
- package/dist/runtime/vllm/engine.d.ts +16 -0
- package/dist/runtime/vllm/engine.js +37 -0
- package/dist/runtime/vllm/engine.js.map +1 -0
- package/dist/runtime/vllm/index.d.ts +11 -0
- package/dist/runtime/vllm/index.js +12 -0
- package/dist/runtime/vllm/index.js.map +1 -0
- package/dist/runtime/vllm/memory.d.ts +69 -0
- package/dist/runtime/vllm/memory.js +123 -0
- package/dist/runtime/vllm/memory.js.map +1 -0
- package/dist/runtime/vllm/settings.d.ts +52 -0
- package/dist/runtime/vllm/settings.js +151 -0
- package/dist/runtime/vllm/settings.js.map +1 -0
- package/dist/runtime/wsl/guest-paths.d.ts +33 -0
- package/dist/runtime/wsl/guest-paths.js +83 -0
- package/dist/runtime/wsl/guest-paths.js.map +1 -0
- package/dist/runtime/wsl/guest-scope.d.ts +14 -0
- package/dist/runtime/wsl/guest-scope.js +98 -0
- package/dist/runtime/wsl/guest-scope.js.map +1 -0
- package/dist/runtime/wsl/index.d.ts +12 -0
- package/dist/runtime/wsl/index.js +13 -0
- package/dist/runtime/wsl/index.js.map +1 -0
- package/dist/runtime/wsl/keeper.d.ts +29 -0
- package/dist/runtime/wsl/keeper.js +48 -0
- package/dist/runtime/wsl/keeper.js.map +1 -0
- package/dist/runtime/wsl/transport.d.ts +106 -0
- package/dist/runtime/wsl/transport.js +181 -0
- package/dist/runtime/wsl/transport.js.map +1 -0
- package/dist/server/control/index.d.ts +1 -1
- package/dist/server/control/router.js +15 -0
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/routes/backends.js +26 -0
- package/dist/server/control/routes/backends.js.map +1 -1
- package/dist/server/control/routes/decision.d.ts +10 -0
- package/dist/server/control/routes/decision.js +43 -0
- package/dist/server/control/routes/decision.js.map +1 -0
- package/dist/server/control/routes/diffusion-video.js +4 -0
- package/dist/server/control/routes/diffusion-video.js.map +1 -1
- package/dist/server/control/routes/diffusion.d.ts +1 -1
- package/dist/server/control/routes/diffusion.js +4 -9
- package/dist/server/control/routes/diffusion.js.map +1 -1
- package/dist/server/control/routes/embedding.d.ts +9 -0
- package/dist/server/control/routes/embedding.js +43 -0
- package/dist/server/control/routes/embedding.js.map +1 -0
- package/dist/server/control/routes/engine-builds.d.ts +14 -0
- package/dist/server/control/routes/engine-builds.js +82 -0
- package/dist/server/control/routes/engine-builds.js.map +1 -0
- package/dist/server/control/routes/engines.d.ts +17 -0
- package/dist/server/control/routes/engines.js +152 -0
- package/dist/server/control/routes/engines.js.map +1 -0
- package/dist/server/control/routes/environments.d.ts +16 -0
- package/dist/server/control/routes/environments.js +207 -0
- package/dist/server/control/routes/environments.js.map +1 -0
- package/dist/server/control/routes/hardware.d.ts +1 -1
- package/dist/server/control/routes/hardware.js +11 -6
- package/dist/server/control/routes/hardware.js.map +1 -1
- package/dist/server/control/routes/model-setups.d.ts +11 -0
- package/dist/server/control/routes/model-setups.js +55 -0
- package/dist/server/control/routes/model-setups.js.map +1 -0
- package/dist/server/control/routes/models.d.ts +3 -2
- package/dist/server/control/routes/models.js +45 -2
- package/dist/server/control/routes/models.js.map +1 -1
- package/dist/server/control/types.d.ts +167 -9
- package/dist/server/control/types.js.map +1 -1
- package/dist/server/http.d.ts +9 -1
- package/dist/server/http.js +51 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/public/decision-preview.d.ts +17 -0
- package/dist/server/public/decision-preview.js +119 -0
- package/dist/server/public/decision-preview.js.map +1 -0
- package/dist/server/public/decision.d.ts +32 -0
- package/dist/server/public/decision.js +135 -0
- package/dist/server/public/decision.js.map +1 -0
- package/dist/server/public/embedding.d.ts +31 -0
- package/dist/server/public/embedding.js +126 -0
- package/dist/server/public/embedding.js.map +1 -0
- package/dist/server/public/errors.d.ts +2 -1
- package/dist/server/public/errors.js +5 -2
- package/dist/server/public/errors.js.map +1 -1
- package/dist/server/public/forward.js +75 -3
- package/dist/server/public/forward.js.map +1 -1
- package/dist/server/public/gates.d.ts +13 -0
- package/dist/server/public/gates.js +37 -14
- package/dist/server/public/gates.js.map +1 -1
- package/dist/server/public/index.d.ts +5 -2
- package/dist/server/public/index.js +14 -1
- package/dist/server/public/index.js.map +1 -1
- package/dist/server/public/listing.d.ts +13 -2
- package/dist/server/public/listing.js +33 -9
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/policy.d.ts +9 -0
- package/dist/server/public/policy.js +68 -0
- package/dist/server/public/policy.js.map +1 -0
- package/dist/server/public/responses.js +10 -0
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/trace.d.ts +2 -2
- package/dist/server/public/trace.js +6 -2
- package/dist/server/public/trace.js.map +1 -1
- package/dist/server/public/types.d.ts +84 -1
- package/dist/settings/decision.d.ts +15 -0
- package/dist/settings/decision.js +88 -0
- package/dist/settings/decision.js.map +1 -0
- package/dist/settings/embedding.d.ts +12 -0
- package/dist/settings/embedding.js +82 -0
- package/dist/settings/embedding.js.map +1 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/schema/atomic-prism.json +433 -0
- package/dist/settings/schema/tensorrt-llm.json +253 -0
- package/dist/settings/schema/vllm.json +273 -0
- package/dist/settings/schema.js +58 -0
- package/dist/settings/schema.js.map +1 -1
- package/dist/settings/store.d.ts +13 -2
- package/dist/settings/store.js +44 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +1 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/result.d.ts +19 -0
- package/dist/util/result.js +15 -0
- package/dist/util/result.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/settings/schema/atomic-prism.json +433 -0
- package/src/settings/schema/tensorrt-llm.json +253 -0
- package/src/settings/schema/vllm.json +273 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The docker operations the core needs to run a model container: pull-adjacent inspection, create,
|
|
3
|
+
* start, a confirmed stop, rm, a log tail, and a one-shot `run` probe. Each one builds its argv
|
|
4
|
+
* through `argv.ts` and runs it through an injected `DockerExec` (`exec.ts`'s `createDockerExec` in
|
|
5
|
+
* production, a fake in tests) — this file never spawns anything itself.
|
|
6
|
+
*
|
|
7
|
+
* `docker ... inspect` and `docker rm` both treat "the thing is already gone" as a normal outcome,
|
|
8
|
+
* not a failure: an inspect reports `found: false` and an `rm` of an already-removed container
|
|
9
|
+
* resolves. Every other non-zero exit becomes `AtomicCoreError('IO_ERROR', ...)` with docker's own
|
|
10
|
+
* stderr as the detail.
|
|
11
|
+
*
|
|
12
|
+
* `createContainer` is also where symlinks get resolved (review round 2, item 2): it is the one
|
|
13
|
+
* function in this module that does filesystem I/O of its own, `realpath`-ing every mount source and
|
|
14
|
+
* `selinuxDataRoot` before handing them to `argv.ts`'s pure (and therefore symlink-blind) checks.
|
|
15
|
+
*/
|
|
16
|
+
import { realpath as fsRealpath } from 'node:fs/promises';
|
|
17
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
18
|
+
import { buildCreateModelContainerArgv, buildInspectContainerArgv, buildInspectImageArgv, buildListContainersByImageArgv, buildLogsArgv, buildPortArgv, buildRemoveImageArgv, buildRmArgv, buildRunOnceArgv, buildStartArgv, buildStopArgv, } from './argv.js';
|
|
19
|
+
const ABSENT_PATTERN = /no such (image|container)/i;
|
|
20
|
+
function ioError(operation, result) {
|
|
21
|
+
throw new AtomicCoreError('IO_ERROR', `docker ${operation} failed.`, result.stderr || result.stdout);
|
|
22
|
+
}
|
|
23
|
+
async function inspect(exec, argv, operation) {
|
|
24
|
+
const result = await exec(argv);
|
|
25
|
+
if (result.code === 0) {
|
|
26
|
+
let parsed;
|
|
27
|
+
try {
|
|
28
|
+
parsed = JSON.parse(result.stdout || '[]');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// A 0 exit with unparseable stdout is not "the thing is absent" — it is docker (or a fake in
|
|
32
|
+
// tests) answering in a shape this module does not understand; surface it as our own error
|
|
33
|
+
// rather than letting a raw SyntaxError escape (review round 1, item 12).
|
|
34
|
+
throw new AtomicCoreError('IO_ERROR', `docker ${operation} produced output that is not valid JSON.`, `${error.message}\n${result.stdout}`);
|
|
35
|
+
}
|
|
36
|
+
return { found: parsed.length > 0, value: parsed[0] ?? null };
|
|
37
|
+
}
|
|
38
|
+
if (ABSENT_PATTERN.test(result.stderr))
|
|
39
|
+
return { found: false, value: null };
|
|
40
|
+
ioError(operation, result);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The host port Docker published `containerPort` on, for a container created with a Docker-chosen
|
|
44
|
+
* port (`host_port: 0`). Only a `127.0.0.1` publication is accepted, whatever Docker answers.
|
|
45
|
+
*/
|
|
46
|
+
export async function publishedHostPort(exec, containerId, containerPort) {
|
|
47
|
+
const result = await exec(buildPortArgv(containerId, containerPort));
|
|
48
|
+
if (result.code !== 0)
|
|
49
|
+
ioError('port', result);
|
|
50
|
+
const line = result.stdout
|
|
51
|
+
.split('\n')
|
|
52
|
+
.map((entry) => entry.trim())
|
|
53
|
+
.find((entry) => entry !== '') ?? '';
|
|
54
|
+
const match = /^(.+):(\d+)$/.exec(line);
|
|
55
|
+
if (match === null) {
|
|
56
|
+
throw new AtomicCoreError('IO_ERROR', 'docker port did not name a published port.', line);
|
|
57
|
+
}
|
|
58
|
+
if (match[1] !== '127.0.0.1') {
|
|
59
|
+
throw new AtomicCoreError('FORBIDDEN_HOST', 'The container port was published on something other than 127.0.0.1.', line);
|
|
60
|
+
}
|
|
61
|
+
return Number(match[2]);
|
|
62
|
+
}
|
|
63
|
+
export function inspectImage(exec, image) {
|
|
64
|
+
return inspect(exec, buildInspectImageArgv(image), 'image inspect');
|
|
65
|
+
}
|
|
66
|
+
export function inspectContainer(exec, containerId) {
|
|
67
|
+
return inspect(exec, buildInspectContainerArgv(containerId), 'container inspect');
|
|
68
|
+
}
|
|
69
|
+
async function resolveOrThrow(realpath, path, what) {
|
|
70
|
+
try {
|
|
71
|
+
return await realpath(path);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new AtomicCoreError('IO_ERROR', `${what} could not be resolved to a real path.`, `${path}: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolves every mount source and `selinuxDataRoot` to their canonical, symlink-free real path
|
|
79
|
+
* before argv is built (review round 2, item 2, controller ruling). `argv.ts`'s
|
|
80
|
+
* `assertMountSource`/`assertWithinDataRoot` are pure lexical string checks — a mount source that is
|
|
81
|
+
* a symlink *inside* an allowed SELinux data root but that points *outside* it would pass those
|
|
82
|
+
* checks unresolved, while Docker's actual bind mount (and its `:z` relabel) act on the resolved
|
|
83
|
+
* target, not the symlink's own path. Running every source through `realpath` here, before it ever
|
|
84
|
+
* reaches the pure argv layer, means the checks there always see what Docker will actually mount.
|
|
85
|
+
*/
|
|
86
|
+
async function canonicalizeCreateSpec(spec, realpath) {
|
|
87
|
+
const [model, engineCache, entrypoint, heartbeat, selinuxDataRoot] = await Promise.all([
|
|
88
|
+
resolveOrThrow(realpath, spec.mounts.model.source, 'model mount source'),
|
|
89
|
+
resolveOrThrow(realpath, spec.mounts.engineCache.source, 'engine cache mount source'),
|
|
90
|
+
resolveOrThrow(realpath, spec.mounts.entrypoint.source, 'entrypoint mount source'),
|
|
91
|
+
resolveOrThrow(realpath, spec.mounts.heartbeat.source, 'heartbeat mount source'),
|
|
92
|
+
spec.selinuxDataRoot === undefined
|
|
93
|
+
? Promise.resolve(undefined)
|
|
94
|
+
: resolveOrThrow(realpath, spec.selinuxDataRoot, 'selinuxDataRoot'),
|
|
95
|
+
]);
|
|
96
|
+
return {
|
|
97
|
+
...spec,
|
|
98
|
+
mounts: {
|
|
99
|
+
model: { source: model },
|
|
100
|
+
engineCache: { source: engineCache },
|
|
101
|
+
entrypoint: { source: entrypoint },
|
|
102
|
+
heartbeat: { source: heartbeat },
|
|
103
|
+
},
|
|
104
|
+
// `exactOptionalPropertyTypes`: only set the key at all when there is a value, rather than
|
|
105
|
+
// assigning `selinuxDataRoot: undefined` (a real, if empty, distinct state under that setting).
|
|
106
|
+
...(selinuxDataRoot === undefined ? {} : { selinuxDataRoot }),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Creates (but does not start) the model container; returns the id docker printed to stdout. */
|
|
110
|
+
export async function createContainer(exec, spec, deps = {}) {
|
|
111
|
+
const realpath = deps.realpath ?? fsRealpath;
|
|
112
|
+
const canonicalSpec = await canonicalizeCreateSpec(spec, realpath);
|
|
113
|
+
const result = await exec(buildCreateModelContainerArgv(canonicalSpec));
|
|
114
|
+
if (result.code !== 0)
|
|
115
|
+
ioError('create', result);
|
|
116
|
+
const containerId = result.stdout.trim().split('\n').pop()?.trim() ?? '';
|
|
117
|
+
if (containerId === '') {
|
|
118
|
+
throw new AtomicCoreError('IO_ERROR', 'docker create produced no container id.', result.stdout);
|
|
119
|
+
}
|
|
120
|
+
return { containerId };
|
|
121
|
+
}
|
|
122
|
+
export async function startContainer(exec, containerId) {
|
|
123
|
+
const result = await exec(buildStartArgv(containerId));
|
|
124
|
+
if (result.code !== 0)
|
|
125
|
+
ioError('start', result);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Extra time given to the *exec call itself* beyond `docker stop`'s own `--time <timeoutSeconds>`
|
|
129
|
+
* (review round 1, item 3). `exec.ts`'s default exec deadline is 30 s; without this, any
|
|
130
|
+
* `timeoutSeconds` beyond ~30 would have our own exec call killed and reported unconfirmed before
|
|
131
|
+
* Docker's own `--time` even elapsed, which is not "unconfirmed" — it is this module cutting the
|
|
132
|
+
* call short before Docker had a chance to answer.
|
|
133
|
+
*/
|
|
134
|
+
const STOP_EXEC_MARGIN_MS = 5_000;
|
|
135
|
+
/**
|
|
136
|
+
* Stops the container and waits for Docker to confirm it exited (or was already absent) — never
|
|
137
|
+
* treats "our own exec call did not get an answer" as a stop (spec `tensorrt-llm-runtime`,
|
|
138
|
+
* requirement "unloading waits for a confirmed stop"). `confirmed: false` is what a caller maps to
|
|
139
|
+
* `MANAGED_STOP_UNCONFIRMED` and a held GPU reservation.
|
|
140
|
+
*/
|
|
141
|
+
export async function stopContainer(exec, containerId, timeoutSeconds) {
|
|
142
|
+
// Built outside the try: an INVALID_ARGUMENT from a bad timeout is a programming error this
|
|
143
|
+
// caller should see directly, not a report that the stop went unconfirmed (review round 1, item 9).
|
|
144
|
+
const argv = buildStopArgv(containerId, timeoutSeconds);
|
|
145
|
+
let result;
|
|
146
|
+
try {
|
|
147
|
+
result = await exec(argv, { timeoutMs: timeoutSeconds * 1000 + STOP_EXEC_MARGIN_MS });
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return { confirmed: false, reason: error.message };
|
|
151
|
+
}
|
|
152
|
+
if (result.code === 0)
|
|
153
|
+
return { confirmed: true, status: 'exited' };
|
|
154
|
+
if (ABSENT_PATTERN.test(result.stderr))
|
|
155
|
+
return { confirmed: true, status: 'absent' };
|
|
156
|
+
return {
|
|
157
|
+
confirmed: false,
|
|
158
|
+
reason: result.stderr || result.stdout || `docker stop exited with code ${String(result.code)}`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/** Idempotent: a container already removed (or never created) is success, not an error. */
|
|
162
|
+
export async function removeContainer(exec, containerId) {
|
|
163
|
+
const result = await exec(buildRmArgv(containerId));
|
|
164
|
+
if (result.code === 0)
|
|
165
|
+
return;
|
|
166
|
+
if (ABSENT_PATTERN.test(result.stderr))
|
|
167
|
+
return;
|
|
168
|
+
ioError('rm', result);
|
|
169
|
+
}
|
|
170
|
+
/** Ids of every container, running or stopped, created from `image`. Fails when docker cannot answer. */
|
|
171
|
+
export async function containersUsingImage(exec, image) {
|
|
172
|
+
const result = await exec(buildListContainersByImageArgv(image));
|
|
173
|
+
if (result.code !== 0)
|
|
174
|
+
ioError('ps', result);
|
|
175
|
+
return result.stdout
|
|
176
|
+
.split('\n')
|
|
177
|
+
.map((line) => line.trim())
|
|
178
|
+
.filter((line) => line !== '');
|
|
179
|
+
}
|
|
180
|
+
/** Removes the digest reference; an image already gone is `absent`, anything else docker refuses throws. */
|
|
181
|
+
export async function removeImage(exec, image) {
|
|
182
|
+
const result = await exec(buildRemoveImageArgv(image));
|
|
183
|
+
if (result.code === 0)
|
|
184
|
+
return 'removed';
|
|
185
|
+
if (ABSENT_PATTERN.test(result.stderr))
|
|
186
|
+
return 'absent';
|
|
187
|
+
ioError('image rm', result);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Docker writes a container's stdout and stderr to two separate file descriptors; `buildLogsArgv`
|
|
191
|
+
* asks for `--timestamps` on both so they can be merged back into one chronologically ordered log
|
|
192
|
+
* (review round 1, item 2 — the lifecycle needs a combined tail to classify an OOM exit, which
|
|
193
|
+
* `trtllm-serve` can report on either stream). Each line is expected to start with Docker's
|
|
194
|
+
* RFC3339Nano timestamp followed by a space; timestamps in that spelling sort correctly as plain
|
|
195
|
+
* strings, so this is a stable two-way merge, not a `Date` parse. A line with no recognizable
|
|
196
|
+
* timestamp (should not happen with `--timestamps`, but this must not crash on one) sorts using its
|
|
197
|
+
* own text, which only affects placement relative to other such lines.
|
|
198
|
+
*/
|
|
199
|
+
function timestampOf(line) {
|
|
200
|
+
const spaceIndex = line.indexOf(' ');
|
|
201
|
+
return spaceIndex === -1 ? line : line.slice(0, spaceIndex);
|
|
202
|
+
}
|
|
203
|
+
function mergeTimestampedLogs(stdout, stderr) {
|
|
204
|
+
const stdoutLines = stdout.split('\n').filter((line) => line !== '');
|
|
205
|
+
const stderrLines = stderr.split('\n').filter((line) => line !== '');
|
|
206
|
+
const merged = [];
|
|
207
|
+
let i = 0;
|
|
208
|
+
let j = 0;
|
|
209
|
+
while (i < stdoutLines.length && j < stderrLines.length) {
|
|
210
|
+
if (timestampOf(stdoutLines[i]) <= timestampOf(stderrLines[j]))
|
|
211
|
+
merged.push(stdoutLines[i++]);
|
|
212
|
+
else
|
|
213
|
+
merged.push(stderrLines[j++]);
|
|
214
|
+
}
|
|
215
|
+
while (i < stdoutLines.length)
|
|
216
|
+
merged.push(stdoutLines[i++]);
|
|
217
|
+
while (j < stderrLines.length)
|
|
218
|
+
merged.push(stderrLines[j++]);
|
|
219
|
+
return merged.length === 0 ? '' : merged.join('\n') + '\n';
|
|
220
|
+
}
|
|
221
|
+
/** The last `tailLines` lines (or, with `'all'`, every line) of the container's combined,
|
|
222
|
+
* chronologically merged stdout+stderr log. The exec's own per-stream output cap still bounds it. */
|
|
223
|
+
export async function containerLogs(exec, containerId, tailLines) {
|
|
224
|
+
const result = await exec(buildLogsArgv(containerId, tailLines));
|
|
225
|
+
if (result.code !== 0)
|
|
226
|
+
ioError('logs', result);
|
|
227
|
+
return mergeTimestampedLogs(result.stdout, result.stderr);
|
|
228
|
+
}
|
|
229
|
+
/** A one-shot `docker run --rm` probe (task 2.x's GPU check): the raw result, never thrown — the caller classifies it. */
|
|
230
|
+
export function runOnce(exec, spec) {
|
|
231
|
+
return exec(buildRunOnceArgv(spec));
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../../src/runtime/container/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EACrB,8BAA8B,EAC9B,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,WAAW,CAAA;AAiBlB,MAAM,cAAc,GAAG,4BAA4B,CAAA;AAEnD,SAAS,OAAO,CAAC,SAAiB,EAAE,MAA2B;IAC7D,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,UAAU,SAAS,UAAU,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;AACtG,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAgB,EAAE,IAAc,EAAE,SAAiB;IACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,MAAiB,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAc,CAAA;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6FAA6F;YAC7F,2FAA2F;YAC3F,0EAA0E;YAC1E,MAAM,IAAI,eAAe,CACvB,UAAU,EACV,UAAU,SAAS,0CAA0C,EAC7D,GAAI,KAAe,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,CAChD,CAAA;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IAC/D,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC5E,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAgB,EAChB,WAAmB,EACnB,aAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;IACpE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,IAAI,GACR,MAAM,CAAC,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,4CAA4C,EAAE,IAAI,CAAC,CAAA;IAC3F,CAAC;IACD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,qEAAqE,EACrE,IAAI,CACL,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,KAAe;IAC5D,OAAO,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,WAAmB;IACpE,OAAO,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAA;AACnF,CAAC;AAOD,KAAK,UAAU,cAAc,CAAC,QAAkB,EAAE,IAAY,EAAE,IAAY;IAC1E,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CACvB,UAAU,EACV,GAAG,IAAI,wCAAwC,EAC/C,GAAG,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CACvC,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,sBAAsB,CACnC,IAA8B,EAC9B,QAAkB;IAElB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrF,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACxE,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC;QACrF,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,yBAAyB,CAAC;QAClF,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAChF,IAAI,CAAC,eAAe,KAAK,SAAS;YAChC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC;KACtE,CAAC,CAAA;IACF,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YACxB,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;YACpC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YAClC,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SACjC;QACD,2FAA2F;QAC3F,gGAAgG;QAChG,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9D,CAAA;AACH,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAgB,EAChB,IAA8B,EAC9B,OAA4B,EAAE;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAA;IAC5C,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC,CAAA;IACvE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACxE,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,yCAAyC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAgB,EAAE,WAAmB;IACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAgB,EAChB,WAAmB,EACnB,cAAsB;IAEtB,4FAA4F;IAC5F,oGAAoG;IACpG,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IACvD,IAAI,MAA2B,CAAA;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI,GAAG,mBAAmB,EAAE,CAAC,CAAA;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAG,KAAe,CAAC,OAAO,EAAE,CAAA;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACnE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACpF,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,gCAAgC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;KAChG,CAAA;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB,EAAE,WAAmB;IACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAA;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAM;IAC7B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAM;IAC9C,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAgB,EAAE,KAAe;IAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IAChE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC5C,OAAO,MAAM,CAAC,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,KAAe;IACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAA;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACvC,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAA;IACvD,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,MAAc;IAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;IACpE,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QACxD,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAE,CAAC,CAAA;;YAC3F,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAE,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAE,CAAC,CAAA;IAC7D,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAC5D,CAAC;AAED;sGACsG;AACtG,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAgB,EAChB,WAAmB,EACnB,SAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAA;IAChE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,OAAO,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC3D,CAAC;AAED,0HAA0H;AAC1H,MAAM,UAAU,OAAO,CAAC,IAAgB,EAAE,IAAoB;IAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { DockerExec, ImageRef, PullProgressCallback } from './types.js';
|
|
2
|
+
export interface PullImageOptions {
|
|
3
|
+
/** Default derived from `argv.ts`'s `DOCKER_SOCKET_PATH` (review round 1, item 15 — one socket path constant); tests point this at a fake Engine API. */
|
|
4
|
+
socketPath?: string;
|
|
5
|
+
onProgress?: PullProgressCallback;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
/**
|
|
8
|
+
* A known total byte size (e.g. the descriptor's `download_bytes`) used instead of the stream's
|
|
9
|
+
* own running total whenever it is larger. The stream's total only sums layers that have already
|
|
10
|
+
* reported at least one `Downloading` line, so early in a pull it always undercounts (review round
|
|
11
|
+
* 1, item 4).
|
|
12
|
+
*/
|
|
13
|
+
knownTotalBytes?: number;
|
|
14
|
+
/**
|
|
15
|
+
* After a successful pull, confirm `image` is actually present locally via `operations.ts`'s
|
|
16
|
+
* `inspectImage` (review round 1, item 10). Optional: a caller that only has the Engine API socket
|
|
17
|
+
* and no `DockerExec` yet (as every test in this file does) can omit it and skip verification.
|
|
18
|
+
*/
|
|
19
|
+
verify?: DockerExec;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Pulls `image.repository@image.digest`. Resolves once the daemon's response stream ends without an
|
|
23
|
+
* `error` line (and, if `options.verify` is given, once `inspectImage` confirms the image is present
|
|
24
|
+
* locally); rejects with `AtomicCoreError('IO_ERROR', ...)` for a non-200 response, an `error` line,
|
|
25
|
+
* a stream failure, an unreachable socket, or a failed post-pull verification.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pullImage(image: ImageRef, options?: PullImageOptions): Promise<void>;
|
|
28
|
+
/** Runs one argv somewhere the Engine API socket is (a WSL guest), streaming its stdout as it comes. */
|
|
29
|
+
export type EngineApiCommand = (argv: string[], call: {
|
|
30
|
+
onStdout: (text: string) => void;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
timeoutMs?: number;
|
|
33
|
+
}) => Promise<{
|
|
34
|
+
code: number | null;
|
|
35
|
+
stdout: string;
|
|
36
|
+
stderr: string;
|
|
37
|
+
}>;
|
|
38
|
+
export interface PullImageWithCurlOptions extends Omit<PullImageOptions, 'socketPath'> {
|
|
39
|
+
run: EngineApiCommand;
|
|
40
|
+
/** How long the whole pull may take; generous by default, an engine image is tens of gigabytes. */
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* `pullImage` from inside a WSL guest: `curl --unix-socket /var/run/docker.sock -X POST
|
|
45
|
+
* http://localhost/images/create?…` streams the same NDJSON, which the same tracker reads. `--fail-with-body`
|
|
46
|
+
* turns a non-200 answer into a nonzero exit with the daemon's message on stdout.
|
|
47
|
+
*/
|
|
48
|
+
export declare function pullImageWithCurl(image: ImageRef, options: PullImageWithCurlOptions): Promise<void>;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pulling the model image by digest, over the Docker Engine API rather than `docker pull` (task 2.8
|
|
3
|
+
* controller ruling). The `docker` CLI prints no byte progress at all unless attached to a TTY —
|
|
4
|
+
* `distribution/pull.go`'s progress writer special-cases an interactive terminal, and this core
|
|
5
|
+
* never runs one — but spec `tensorrt-llm-runtime` needs byte progress for an image tens of
|
|
6
|
+
* gigabytes large. `POST /images/create?fromImage=<repo>&tag=<digest>` streams one JSON object per
|
|
7
|
+
* line, one per layer per progress tick; this aggregates every layer's `progressDetail.current`/
|
|
8
|
+
* `.total` into a single running total and reports it after each update. See
|
|
9
|
+
* `docs/decisions/2026-09-28-pull-the-model-image-over-the-docker-engine-api.md`.
|
|
10
|
+
*
|
|
11
|
+
* On Windows the Engine API is inside Atomic Chat's WSL distribution, and its socket never leaves it
|
|
12
|
+
* (change `add-tensorrt-llm-windows`, design D4): `pullImageWithCurl` asks the same endpoint from
|
|
13
|
+
* inside the guest — `curl --unix-socket` as one argv through the WSL transport, its stdout streamed
|
|
14
|
+
* back — and reads the stream with the same tracker, so progress and failures mean the same thing.
|
|
15
|
+
*
|
|
16
|
+
* This talks to the Engine API directly over its unix socket (`node:http`'s `socketPath`, injectable
|
|
17
|
+
* for tests) rather than through `exec.ts`'s `DockerExec` — there is no docker CLI subcommand that
|
|
18
|
+
* streams byte counts, so there is no argv to build for this one operation. The default socket path
|
|
19
|
+
* is `argv.ts`'s `DOCKER_SOCKET_PATH`, not a separate literal (review round 1, item 15).
|
|
20
|
+
*/
|
|
21
|
+
import http from 'node:http';
|
|
22
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
23
|
+
import { DOCKER_SOCKET_PATH, assertDigest, assertSafeArgvValue } from './argv.js';
|
|
24
|
+
import { inspectImage } from './operations.js';
|
|
25
|
+
function ioError(message, details) {
|
|
26
|
+
return new AtomicCoreError('IO_ERROR', message, details);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pulls `image.repository@image.digest`. Resolves once the daemon's response stream ends without an
|
|
30
|
+
* `error` line (and, if `options.verify` is given, once `inspectImage` confirms the image is present
|
|
31
|
+
* locally); rejects with `AtomicCoreError('IO_ERROR', ...)` for a non-200 response, an `error` line,
|
|
32
|
+
* a stream failure, an unreachable socket, or a failed post-pull verification.
|
|
33
|
+
*/
|
|
34
|
+
export async function pullImage(image, options = {}) {
|
|
35
|
+
// An `async` function: a validation failure below becomes a rejected promise, never a synchronous
|
|
36
|
+
// throw, so every caller can treat `pullImage` uniformly as `.catch`/`await`-able I/O.
|
|
37
|
+
const repository = assertSafeArgvValue(image.repository, 'image repository');
|
|
38
|
+
const digest = assertDigest(image.digest, 'image digest');
|
|
39
|
+
const socketPath = options.socketPath ?? DOCKER_SOCKET_PATH;
|
|
40
|
+
const path = `/images/create?fromImage=${encodeURIComponent(repository)}&tag=${encodeURIComponent(digest)}`;
|
|
41
|
+
await streamPull(path, socketPath, options);
|
|
42
|
+
if (options.verify) {
|
|
43
|
+
const { found } = await inspectImage(options.verify, image);
|
|
44
|
+
if (!found) {
|
|
45
|
+
throw ioError('Docker image pull completed but the image is not present locally.', `${repository}@${digest}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Aggregates byte progress across layers. Only a `status: 'Downloading'` line counts: the same layer
|
|
51
|
+
* `id` is reused for `Extracting` (and other phases) with its *own*, unrelated `progressDetail`, so
|
|
52
|
+
* folding every phase into one sum makes the total regress as a layer moves from "fully downloaded"
|
|
53
|
+
* to "partway extracted" (review round 1, item 4 — the non-monotonic bug). Each layer's contribution
|
|
54
|
+
* is the running *max* ever reported for it (defensive: a real `Downloading` sequence is already
|
|
55
|
+
* monotonic, but this does not trust that), clamped to that layer's own total.
|
|
56
|
+
*/
|
|
57
|
+
class PullProgressTracker {
|
|
58
|
+
knownTotalBytes;
|
|
59
|
+
layers = new Map();
|
|
60
|
+
constructor(knownTotalBytes) {
|
|
61
|
+
this.knownTotalBytes = knownTotalBytes;
|
|
62
|
+
}
|
|
63
|
+
/** Returns the new aggregate to report, or `undefined` if this line contributes nothing. */
|
|
64
|
+
observe(parsed) {
|
|
65
|
+
if (parsed.status !== 'Downloading')
|
|
66
|
+
return undefined;
|
|
67
|
+
if (!parsed.id || !parsed.progressDetail || typeof parsed.progressDetail.current !== 'number')
|
|
68
|
+
return undefined;
|
|
69
|
+
const rawCurrent = parsed.progressDetail.current;
|
|
70
|
+
const reportedTotal = parsed.progressDetail.total ?? 0;
|
|
71
|
+
// A layer's own total must never be smaller than its own current: when Docker reports no size (or
|
|
72
|
+
// a 0 size) for this layer, treat its total as "however much has been downloaded so far" instead
|
|
73
|
+
// of letting an unclamped current outrun a phantom total (review round 2, item 1 — the earlier
|
|
74
|
+
// `total > 0 ? clamp : don't` left current > total whenever a line had no/zero total).
|
|
75
|
+
const total = Math.max(reportedTotal, rawCurrent);
|
|
76
|
+
const current = Math.min(rawCurrent, total);
|
|
77
|
+
const existing = this.layers.get(parsed.id);
|
|
78
|
+
this.layers.set(parsed.id, {
|
|
79
|
+
current: existing ? Math.max(existing.current, current) : current,
|
|
80
|
+
total: existing ? Math.max(existing.total, total) : total,
|
|
81
|
+
});
|
|
82
|
+
return this.aggregate();
|
|
83
|
+
}
|
|
84
|
+
aggregate() {
|
|
85
|
+
let current = 0;
|
|
86
|
+
let streamTotal = 0;
|
|
87
|
+
for (const layer of this.layers.values()) {
|
|
88
|
+
current += layer.current;
|
|
89
|
+
streamTotal += layer.total;
|
|
90
|
+
}
|
|
91
|
+
const total = this.knownTotalBytes !== undefined ? Math.max(streamTotal, this.knownTotalBytes) : streamTotal;
|
|
92
|
+
// Unconditional (review round 2, item 1): with the per-layer invariant above, `current` can never
|
|
93
|
+
// actually exceed `total` here, but this clamp is the property itself, stated directly, rather
|
|
94
|
+
// than something that merely follows from the per-layer bookkeeping being correct.
|
|
95
|
+
return { current: Math.min(current, total), total };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const CURL_PULL_TIMEOUT_MS = 12 * 60 * 60_000;
|
|
99
|
+
/**
|
|
100
|
+
* `pullImage` from inside a WSL guest: `curl --unix-socket /var/run/docker.sock -X POST
|
|
101
|
+
* http://localhost/images/create?…` streams the same NDJSON, which the same tracker reads. `--fail-with-body`
|
|
102
|
+
* turns a non-200 answer into a nonzero exit with the daemon's message on stdout.
|
|
103
|
+
*/
|
|
104
|
+
export async function pullImageWithCurl(image, options) {
|
|
105
|
+
const repository = assertSafeArgvValue(image.repository, 'image repository');
|
|
106
|
+
const digest = assertDigest(image.digest, 'image digest');
|
|
107
|
+
const cancelled = () => options.signal?.aborted === true;
|
|
108
|
+
if (cancelled())
|
|
109
|
+
throw new AtomicCoreError('MODEL_LOAD_CANCELLED', 'Image pull was cancelled.');
|
|
110
|
+
const path = `/images/create?fromImage=${encodeURIComponent(repository)}&tag=${encodeURIComponent(digest)}`;
|
|
111
|
+
const tracker = new PullProgressTracker(options.knownTotalBytes);
|
|
112
|
+
let buffer = '';
|
|
113
|
+
let failure = null;
|
|
114
|
+
const handleLine = (line) => {
|
|
115
|
+
if (failure !== null || line.trim() === '')
|
|
116
|
+
return;
|
|
117
|
+
let parsed;
|
|
118
|
+
try {
|
|
119
|
+
parsed = JSON.parse(line);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return; // a partial/non-JSON line; one bad line should not fail the whole pull
|
|
123
|
+
}
|
|
124
|
+
if (parsed.error) {
|
|
125
|
+
failure = ioError('Docker image pull failed.', parsed.errorDetail?.message ?? parsed.error);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const progress = tracker.observe(parsed);
|
|
129
|
+
if (progress && options.onProgress) {
|
|
130
|
+
try {
|
|
131
|
+
options.onProgress(progress);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// A misbehaving progress callback must not abort the pull (review round 1, item 11).
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const answer = await options.run([
|
|
139
|
+
'curl',
|
|
140
|
+
'--silent',
|
|
141
|
+
'--show-error',
|
|
142
|
+
'--no-buffer',
|
|
143
|
+
'--fail-with-body',
|
|
144
|
+
'--unix-socket',
|
|
145
|
+
DOCKER_SOCKET_PATH,
|
|
146
|
+
'-X',
|
|
147
|
+
'POST',
|
|
148
|
+
`http://localhost${path}`,
|
|
149
|
+
], {
|
|
150
|
+
onStdout: (text) => {
|
|
151
|
+
buffer += text;
|
|
152
|
+
let newline;
|
|
153
|
+
while ((newline = buffer.indexOf('\n')) >= 0) {
|
|
154
|
+
handleLine(buffer.slice(0, newline));
|
|
155
|
+
buffer = buffer.slice(newline + 1);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
timeoutMs: options.timeoutMs ?? CURL_PULL_TIMEOUT_MS,
|
|
159
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
160
|
+
});
|
|
161
|
+
if (buffer.trim() !== '')
|
|
162
|
+
handleLine(buffer);
|
|
163
|
+
if (cancelled())
|
|
164
|
+
throw new AtomicCoreError('MODEL_LOAD_CANCELLED', 'Image pull was cancelled.');
|
|
165
|
+
if (failure !== null)
|
|
166
|
+
throw failure;
|
|
167
|
+
if (answer.code !== 0) {
|
|
168
|
+
throw ioError(answer.code === null
|
|
169
|
+
? 'Could not reach the Docker daemon.'
|
|
170
|
+
: `Docker image pull failed (curl exited ${answer.code}).`, `${answer.stderr.trim()}\n${answer.stdout.trim().slice(-2000)}`.trim());
|
|
171
|
+
}
|
|
172
|
+
if (options.verify) {
|
|
173
|
+
const { found } = await inspectImage(options.verify, image);
|
|
174
|
+
if (!found) {
|
|
175
|
+
throw ioError('Docker image pull completed but the image is not present locally.', `${repository}@${digest}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function streamPull(path, socketPath, options) {
|
|
180
|
+
return new Promise((resolve, reject) => {
|
|
181
|
+
const tracker = new PullProgressTracker(options.knownTotalBytes);
|
|
182
|
+
let buffer = '';
|
|
183
|
+
let settled = false;
|
|
184
|
+
const finish = (outcome) => {
|
|
185
|
+
if (settled)
|
|
186
|
+
return;
|
|
187
|
+
settled = true;
|
|
188
|
+
if (options.signal)
|
|
189
|
+
options.signal.removeEventListener('abort', onAbort);
|
|
190
|
+
if (outcome.ok)
|
|
191
|
+
resolve();
|
|
192
|
+
else
|
|
193
|
+
reject(outcome.error);
|
|
194
|
+
};
|
|
195
|
+
const reportProgress = (progress) => {
|
|
196
|
+
if (!options.onProgress)
|
|
197
|
+
return;
|
|
198
|
+
try {
|
|
199
|
+
options.onProgress(progress);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// A caller's progress callback misbehaving must not abort a multi-gigabyte pull that is
|
|
203
|
+
// otherwise proceeding fine (review round 1, item 11).
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const handleLine = (line, req) => {
|
|
207
|
+
if (line.trim() === '')
|
|
208
|
+
return;
|
|
209
|
+
let parsed;
|
|
210
|
+
try {
|
|
211
|
+
parsed = JSON.parse(line);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return; // a partial/non-JSON line; one bad line should not fail the whole pull
|
|
215
|
+
}
|
|
216
|
+
if (parsed.error) {
|
|
217
|
+
finish({
|
|
218
|
+
ok: false,
|
|
219
|
+
error: ioError('Docker image pull failed.', parsed.errorDetail?.message ?? parsed.error),
|
|
220
|
+
});
|
|
221
|
+
req.destroy();
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const progress = tracker.observe(parsed);
|
|
225
|
+
if (progress)
|
|
226
|
+
reportProgress(progress);
|
|
227
|
+
};
|
|
228
|
+
const req = http.request({ socketPath, path, method: 'POST' }, (res) => {
|
|
229
|
+
if (res.statusCode !== 200) {
|
|
230
|
+
let body = '';
|
|
231
|
+
res.setEncoding('utf8');
|
|
232
|
+
res.on('data', (chunk) => {
|
|
233
|
+
body += chunk;
|
|
234
|
+
});
|
|
235
|
+
res.on('end', () => {
|
|
236
|
+
finish({
|
|
237
|
+
ok: false,
|
|
238
|
+
error: ioError(`Docker image pull failed with status ${res.statusCode}.`, body),
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
res.setEncoding('utf8');
|
|
244
|
+
res.on('data', (chunk) => {
|
|
245
|
+
buffer += chunk;
|
|
246
|
+
let newlineIndex;
|
|
247
|
+
while ((newlineIndex = buffer.indexOf('\n')) >= 0) {
|
|
248
|
+
const line = buffer.slice(0, newlineIndex);
|
|
249
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
250
|
+
handleLine(line, req);
|
|
251
|
+
if (settled)
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
res.on('end', () => {
|
|
256
|
+
// The stream can end with a final line that never got a trailing `\n` (review round 1, item
|
|
257
|
+
// 10): flush whatever is left in `buffer` before declaring the pull done.
|
|
258
|
+
if (!settled && buffer.trim() !== '')
|
|
259
|
+
handleLine(buffer, req);
|
|
260
|
+
buffer = '';
|
|
261
|
+
finish({ ok: true });
|
|
262
|
+
});
|
|
263
|
+
res.on('error', (error) => finish({ ok: false, error: ioError('Docker image pull stream failed.', error.message) }));
|
|
264
|
+
});
|
|
265
|
+
req.on('error', (error) => finish({ ok: false, error: ioError('Could not reach the Docker daemon.', error.message) }));
|
|
266
|
+
const onAbort = () => {
|
|
267
|
+
req.destroy();
|
|
268
|
+
finish({ ok: false, error: new AtomicCoreError('MODEL_LOAD_CANCELLED', 'Image pull was cancelled.') });
|
|
269
|
+
};
|
|
270
|
+
if (options.signal) {
|
|
271
|
+
if (options.signal.aborted) {
|
|
272
|
+
onAbort();
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
options.signal.addEventListener('abort', onAbort, { once: true });
|
|
276
|
+
}
|
|
277
|
+
req.end();
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/runtime/container/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ExecutionJournal, ExecutionRecord } from './execution-journal.js';
|
|
2
|
+
import type { DockerExec } from './types.js';
|
|
3
|
+
/** Structurally compatible with `core/types.ts`'s `CoreLogger`; kept local so this module never imports `core/`. */
|
|
4
|
+
export type ReconcileLogger = (level: 'info' | 'warn' | 'error', message: string) => void;
|
|
5
|
+
/** `docker stop --time` for a reconciled orphan: generous, since nothing is waiting on this container. */
|
|
6
|
+
export declare const RECONCILE_STOP_TIMEOUT_SECONDS = 10;
|
|
7
|
+
export interface ExecutionReconcileResult {
|
|
8
|
+
/** Found (running or already exited) and successfully stopped, removed, and dropped from the journal. */
|
|
9
|
+
stopped: ExecutionRecord[];
|
|
10
|
+
/** Already gone by the time reconcile looked: the record was dropped, nothing to stop or remove. */
|
|
11
|
+
absent: ExecutionRecord[];
|
|
12
|
+
/** The stop could not be confirmed: the record — and the container — are left alone, and reported. */
|
|
13
|
+
unconfirmed: ExecutionRecord[];
|
|
14
|
+
/**
|
|
15
|
+
* `inspectContainer`, `stopContainer` or `removeContainer` threw for this record (an `IO_ERROR` the
|
|
16
|
+
* executor could not classify as "absent" or "unconfirmed"): the record — and the container — are
|
|
17
|
+
* left alone, exactly like `unconfirmed`, so one bad record can never stop reconcile from reaching
|
|
18
|
+
* the rest of the journal.
|
|
19
|
+
*/
|
|
20
|
+
failed: ExecutionRecord[];
|
|
21
|
+
/**
|
|
22
|
+
* Never looked at because `signal` aborted first (core startup's time budget ran out, task 2.12
|
|
23
|
+
* review round 1): the record — and the container — are left for the next startup.
|
|
24
|
+
*/
|
|
25
|
+
skipped: ExecutionRecord[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Reconciles every record in `journal` that does not belong to `currentInstanceId` against the host
|
|
29
|
+
* through `exec`. Safe to call with an empty journal (a no-op) or before the journal's directory
|
|
30
|
+
* exists (`ExecutionJournal.open` already handles that).
|
|
31
|
+
*/
|
|
32
|
+
export declare function reconcileExecutions(journal: ExecutionJournal, currentInstanceId: string, exec: DockerExec, log: ReconcileLogger, stopTimeoutSeconds?: number,
|
|
33
|
+
/** Checked before each record: once aborted, the rest are reported as `skipped` and left alone. */
|
|
34
|
+
signal?: AbortSignal): Promise<ExecutionReconcileResult>;
|