@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,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure Docker CLI argv construction. Nothing in this file touches the filesystem or a process; every
|
|
3
|
+
* function here takes data and returns a `string[]` a caller passes straight to `spawn`/`execFile`
|
|
4
|
+
* with no shell (`exec.ts`), so nothing a descriptor or a probe produced is ever interpreted as a
|
|
5
|
+
* flag or a shell word.
|
|
6
|
+
*
|
|
7
|
+
* `assertSafeArgvValue` is the one guard every descriptor- or probe-derived value goes through
|
|
8
|
+
* before it becomes an argv token: no leading `-` (which Docker would read as a flag) and no NUL,
|
|
9
|
+
* `\n` or `\r` (which would smuggle a second argv-like word past a naive splitter, or corrupt a
|
|
10
|
+
* `-v`/`-l`/`-e` value that gets joined with `:`/`=`). This is a carry-forward from the task 2.1
|
|
11
|
+
* review: conf's `imageRepository` pattern (`schema.json#/definitions/imageRepository`) permits a
|
|
12
|
+
* leading `-`, so a descriptor field like `repository: "-foo/bar"` passes descriptor validation and
|
|
13
|
+
* must still be caught here, one layer closer to the actual `spawn` call. Every option in
|
|
14
|
+
* `buildCreateModelContainerArgv`/`buildRunOnceArgv` is placed before the image reference and any
|
|
15
|
+
* command words, so a positional value can never be mistaken for the start of a new flag either.
|
|
16
|
+
*
|
|
17
|
+
* `--host unix:///var/run/docker.sock` is prepended to every argv by `withSystemSocket`; `env.ts`
|
|
18
|
+
* separately strips `DOCKER_HOST`/`DOCKER_CONTEXT` and points `DOCKER_CONFIG` at an empty,
|
|
19
|
+
* core-owned directory, so between the two, no user Docker context is ever consulted (spec
|
|
20
|
+
* `tensorrt-llm-runtime`, "the model container is isolated"). `buildCreateModelContainerArgv`/
|
|
21
|
+
* `buildRunOnceArgv` also add `--pull=never` (review round 1, item 5 ruling): the only thing in this
|
|
22
|
+
* module that fetches image bytes is `pull.ts`'s `pullImage`, over the Engine API — `docker
|
|
23
|
+
* create`/`docker run` must never trigger an implicit pull of their own, which would otherwise use
|
|
24
|
+
* whatever registry auth `DOCKER_CONFIG`'s directory happens to hold.
|
|
25
|
+
*/
|
|
26
|
+
import path from 'node:path';
|
|
27
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
28
|
+
/**
|
|
29
|
+
* The one path to the Docker daemon's system socket, in its two textual forms `argv.ts` and
|
|
30
|
+
* `pull.ts` each need. `pull.ts` derives its `node:http` `socketPath` from `DOCKER_SOCKET_PATH`
|
|
31
|
+
* rather than declaring its own literal (review round 1, item 15), so there is exactly one socket
|
|
32
|
+
* path constant in this module.
|
|
33
|
+
*/
|
|
34
|
+
export const DOCKER_SOCKET_PATH = '/var/run/docker.sock';
|
|
35
|
+
/** Forced with every docker CLI call; no user Docker context (`DOCKER_HOST`/context/config) is ever used. */
|
|
36
|
+
export const DOCKER_SYSTEM_SOCKET = `unix://${DOCKER_SOCKET_PATH}`;
|
|
37
|
+
/** Docker socket paths (and their parent directories) that must never be used as a mount source — bind-mounting one of these into the container would hand it the socket even though no `-v` flag ever names it directly. */
|
|
38
|
+
const FORBIDDEN_MOUNT_SOURCES = new Set(['/var/run/docker.sock', '/run/docker.sock', '/var/run', '/run']);
|
|
39
|
+
/** Container-side mount targets. Fixed by this module; callers only choose the host-side source. */
|
|
40
|
+
export const CONTAINER_MODEL_PATH = '/atomic/model';
|
|
41
|
+
export const CONTAINER_ENGINE_CACHE_PATH = '/atomic/engine-cache';
|
|
42
|
+
export const CONTAINER_ENTRYPOINT_PATH = '/atomic/entrypoint.sh';
|
|
43
|
+
/** What runs the watchdog script (`#!/bin/sh`) inside the container. */
|
|
44
|
+
export const CONTAINER_ENTRYPOINT_SHELL = '/bin/sh';
|
|
45
|
+
export const CONTAINER_HEARTBEAT_PATH = '/atomic/heartbeat';
|
|
46
|
+
/**
|
|
47
|
+
* `--shm-size` for the model container. A named placeholder, not a measurement: the real value is
|
|
48
|
+
* measured against a live `trtllm-serve` load in live test 2.19. Bounded rather than left at
|
|
49
|
+
* Docker's 64 MB default, which a multi-worker CUDA server exhausts immediately, and rather than
|
|
50
|
+
* unbounded (`--shm-size` with no limit maps to host memory, defeating the point of a limit).
|
|
51
|
+
*/
|
|
52
|
+
export const MODEL_CONTAINER_SHM_SIZE = '2g';
|
|
53
|
+
/** The largest `--shm-size` this module will build, regardless of what a caller passes in `shmSize`. */
|
|
54
|
+
export const MODEL_CONTAINER_SHM_SIZE_CEILING_GB = 16;
|
|
55
|
+
const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/;
|
|
56
|
+
const NEWLINE_CHARS = /[\n\r]/;
|
|
57
|
+
/** An env or label key: `KEY=value`/`atomic.key=value` always starts with this, so the leading
|
|
58
|
+
* character can never be misread as a docker flag regardless of what the value contains. */
|
|
59
|
+
const IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_.-]*$/;
|
|
60
|
+
/** `nvidia-smi -L`'s two UUID spellings: `GPU-<uuid>` and, for a MIG slice, `MIG-<uuid>`. */
|
|
61
|
+
const GPU_UUID_PATTERN = /^(GPU|MIG)-[0-9A-Fa-f-]+$/;
|
|
62
|
+
/** An integer byte count with a Docker size suffix, e.g. `2g`, `512m`, `65536k`. */
|
|
63
|
+
const SHM_SIZE_PATTERN = /^([0-9]+)(k|m|g)$/;
|
|
64
|
+
const DESKTOP_LOOPBACK_HOST = '127.0.0.1';
|
|
65
|
+
function invalidArgument(what, value) {
|
|
66
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} is not safe to pass to docker.`, value);
|
|
67
|
+
}
|
|
68
|
+
/** A NUL byte or a `\n`/`\r`: anything that could smuggle a second argv-like word past a naive splitter. */
|
|
69
|
+
function hasControlChars(value) {
|
|
70
|
+
return value.includes('\u0000') || NEWLINE_CHARS.test(value);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Refuses an empty value, a leading `-` (would be read as a flag), or an embedded NUL/`\n`/`\r`.
|
|
74
|
+
* Every image reference, GPU id, mount source, label value, env value and command word passes
|
|
75
|
+
* through this before becoming an argv token.
|
|
76
|
+
*/
|
|
77
|
+
export function assertSafeArgvValue(value, what) {
|
|
78
|
+
if (value === '')
|
|
79
|
+
invalidArgument(what, value);
|
|
80
|
+
if (value.startsWith('-'))
|
|
81
|
+
invalidArgument(what, value);
|
|
82
|
+
if (hasControlChars(value))
|
|
83
|
+
invalidArgument(what, value);
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
/** Shared with `pull.ts`, which needs the repository and digest validated but not joined by `@`. */
|
|
87
|
+
export function assertDigest(value, what) {
|
|
88
|
+
if (!DIGEST_PATTERN.test(value)) {
|
|
89
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} is not a sha256 digest.`, value);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
function assertPort(value, what) {
|
|
94
|
+
if (!Number.isInteger(value) || value < 1 || value > 65535) {
|
|
95
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} is not a valid TCP port.`, String(value));
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
/** The model container's port may only ever be published on the literal desktop loopback address. */
|
|
100
|
+
function assertLoopbackHost(host) {
|
|
101
|
+
if (host !== DESKTOP_LOOPBACK_HOST) {
|
|
102
|
+
throw new AtomicCoreError('FORBIDDEN_HOST', `A model container may only publish its port on ${DESKTOP_LOOPBACK_HOST}.`, host);
|
|
103
|
+
}
|
|
104
|
+
return host;
|
|
105
|
+
}
|
|
106
|
+
/** Shared by env and label keys: both are the `KEY` half of a `KEY=value` argv token. */
|
|
107
|
+
function assertIdentifier(value, what) {
|
|
108
|
+
if (!IDENTIFIER_PATTERN.test(value)) {
|
|
109
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} is not a valid identifier.`, value);
|
|
110
|
+
}
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* An env *value* embedded in `-e KEY=value`: the key half is already validated as an identifier that
|
|
115
|
+
* cannot start with `-`, so the whole argv token can never be misread as a flag regardless of what
|
|
116
|
+
* the value contains — unlike a standalone value, this one only needs the control-character guard
|
|
117
|
+
* (review round 1, item 16: rejecting a leading `-` here wrongly refused an ordinary value like
|
|
118
|
+
* `TEMPERATURE=-0.5`). Empty is allowed: `FOO=` is a legitimate way to set an empty env var.
|
|
119
|
+
*/
|
|
120
|
+
function assertEnvValue(value, what) {
|
|
121
|
+
if (hasControlChars(value))
|
|
122
|
+
invalidArgument(what, value);
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
function assertGpuUuid(value) {
|
|
126
|
+
if (!GPU_UUID_PATTERN.test(value)) {
|
|
127
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'gpu id is not a GPU-<uuid>/MIG-<uuid> value.', value);
|
|
128
|
+
}
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
/** `--shm-size=<value>`: an integer with a `k`/`m`/`g` suffix, capped at `MODEL_CONTAINER_SHM_SIZE_CEILING_GB`. */
|
|
132
|
+
function assertShmSize(value) {
|
|
133
|
+
const match = SHM_SIZE_PATTERN.exec(value);
|
|
134
|
+
if (!match) {
|
|
135
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'shm size is not an integer with a k/m/g suffix.', value);
|
|
136
|
+
}
|
|
137
|
+
const [, digits, unit] = match;
|
|
138
|
+
const amount = Number(digits);
|
|
139
|
+
const gib = unit === 'g' ? amount : unit === 'm' ? amount / 1024 : amount / (1024 * 1024);
|
|
140
|
+
if (gib > MODEL_CONTAINER_SHM_SIZE_CEILING_GB) {
|
|
141
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `shm size must not exceed ${MODEL_CONTAINER_SHM_SIZE_CEILING_GB}g.`, value);
|
|
142
|
+
}
|
|
143
|
+
return value;
|
|
144
|
+
}
|
|
145
|
+
/** A uid or gid: a non-negative safe integer, so `--user` only ever carries `<digits>:<digits>`. */
|
|
146
|
+
function assertUserId(value, what) {
|
|
147
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
148
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} is not a non-negative integer id.`, String(value));
|
|
149
|
+
}
|
|
150
|
+
return String(value);
|
|
151
|
+
}
|
|
152
|
+
/** `--user <uid>:<gid>`, or nothing: the image's own user. */
|
|
153
|
+
function userFlags(user) {
|
|
154
|
+
if (user === undefined)
|
|
155
|
+
return [];
|
|
156
|
+
return ['--user', `${assertUserId(user.uid, 'container uid')}:${assertUserId(user.gid, 'container gid')}`];
|
|
157
|
+
}
|
|
158
|
+
/** Normalizes a POSIX (Docker-daemon-side) path: no trailing slash, `.`/`..` resolved, for exact/prefix comparison. */
|
|
159
|
+
function normalizeMountPath(value) {
|
|
160
|
+
const normalized = path.posix.normalize(value);
|
|
161
|
+
return normalized.length > 1 && normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* A mount source must be an absolute path (the Docker daemon's own view, never a relative path it
|
|
165
|
+
* would resolve against some unpredictable cwd), must not contain `:` (the character `-v`'s own
|
|
166
|
+
* `source:target:options` syntax splits on — a `:` inside the source would be read as the start of
|
|
167
|
+
* the target), and must not be the Docker socket file or a directory that contains it (review round
|
|
168
|
+
* 1, item 1): none of the four mounts this module builds names the socket directly, but a source
|
|
169
|
+
* that IS `/var/run` (or its ancestor) would still hand the container the socket as a side effect of
|
|
170
|
+
* mounting its parent.
|
|
171
|
+
*/
|
|
172
|
+
function assertMountSource(source, what) {
|
|
173
|
+
assertSafeArgvValue(source, what);
|
|
174
|
+
if (!source.startsWith('/')) {
|
|
175
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} must be an absolute path.`, source);
|
|
176
|
+
}
|
|
177
|
+
if (source.includes(':')) {
|
|
178
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} must not contain ':'.`, source);
|
|
179
|
+
}
|
|
180
|
+
if (FORBIDDEN_MOUNT_SOURCES.has(normalizeMountPath(source))) {
|
|
181
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `${what} must not be the Docker socket or a directory that contains it.`, source);
|
|
182
|
+
}
|
|
183
|
+
return source;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* SELinux's `:z` relabels a directory for every container that shares it — spec `tensorrt-llm-runtime`
|
|
187
|
+
* ("mounts work under SELinux") requires that this module never relabels anything outside its own
|
|
188
|
+
* data (design D15). `dataRoot` is the one directory this executor owns; every `:z`-relabeled source
|
|
189
|
+
* must be it, or under it.
|
|
190
|
+
*/
|
|
191
|
+
function assertWithinDataRoot(source, dataRoot, what) {
|
|
192
|
+
const normalizedRoot = normalizeMountPath(dataRoot);
|
|
193
|
+
const normalizedSource = normalizeMountPath(source);
|
|
194
|
+
const prefix = normalizedRoot === '/' ? '/' : `${normalizedRoot}/`;
|
|
195
|
+
if (normalizedSource !== normalizedRoot && !normalizedSource.startsWith(prefix)) {
|
|
196
|
+
// Says what to do (final review M-6): typically a models folder that is a symlink to another
|
|
197
|
+
// disk, which resolves outside the data folder — the only place this core relabels (design D15).
|
|
198
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `The ${what} is outside the data folder (${normalizedRoot}), and under SELinux this core only ` +
|
|
199
|
+
'relabels its own data folder for containers. A symlink to another disk resolves outside it: ' +
|
|
200
|
+
'move the model folder into the data folder, or bind-mount the other disk at that path ' +
|
|
201
|
+
'instead of linking it (mount --bind), so it resolves inside the data folder.', source);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** `repository@digest`, safe only once both halves — and the joined value itself — are validated. */
|
|
205
|
+
export function imageReference(image) {
|
|
206
|
+
const repository = assertSafeArgvValue(image.repository, 'image repository');
|
|
207
|
+
const digest = assertDigest(image.digest, 'image digest');
|
|
208
|
+
return assertSafeArgvValue(`${repository}@${digest}`, 'image reference');
|
|
209
|
+
}
|
|
210
|
+
/** Prepend the forced system-socket connection flag to any docker subcommand argv. */
|
|
211
|
+
export function withSystemSocket(args) {
|
|
212
|
+
return ['--host', DOCKER_SYSTEM_SOCKET, ...args];
|
|
213
|
+
}
|
|
214
|
+
export function buildInspectImageArgv(image) {
|
|
215
|
+
return withSystemSocket(['image', 'inspect', imageReference(image)]);
|
|
216
|
+
}
|
|
217
|
+
export function buildInspectContainerArgv(containerId) {
|
|
218
|
+
return withSystemSocket(['container', 'inspect', assertSafeArgvValue(containerId, 'container id')]);
|
|
219
|
+
}
|
|
220
|
+
export function buildStartArgv(containerId) {
|
|
221
|
+
return withSystemSocket(['start', assertSafeArgvValue(containerId, 'container id')]);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* `docker stop --time <timeoutSeconds> <id>`. The CLI call itself blocks until the daemon confirms
|
|
225
|
+
* the container exited (or force-kills it at the timeout and waits for that kill to land) — what a
|
|
226
|
+
* *caller* of this argv must not assume is that getting an answer at all is guaranteed; `operations.ts`
|
|
227
|
+
* turns "no answer" into `StopOutcome.confirmed: false` rather than treating a silent exec failure as
|
|
228
|
+
* a stop.
|
|
229
|
+
*/
|
|
230
|
+
export function buildStopArgv(containerId, timeoutSeconds) {
|
|
231
|
+
if (!Number.isInteger(timeoutSeconds) || timeoutSeconds < 0) {
|
|
232
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'stop timeout is not a non-negative integer number of seconds.', String(timeoutSeconds));
|
|
233
|
+
}
|
|
234
|
+
return withSystemSocket([
|
|
235
|
+
'stop',
|
|
236
|
+
'--time',
|
|
237
|
+
String(timeoutSeconds),
|
|
238
|
+
assertSafeArgvValue(containerId, 'container id'),
|
|
239
|
+
]);
|
|
240
|
+
}
|
|
241
|
+
export function buildRmArgv(containerId) {
|
|
242
|
+
return withSystemSocket(['rm', assertSafeArgvValue(containerId, 'container id')]);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* `docker ps --all --filter ancestor=<repo@digest>`: every container, running or stopped, created
|
|
246
|
+
* from this image (or an image built on it) — what removing an engine asks before deleting the
|
|
247
|
+
* image, so an image someone else's container still uses is left in place (task 2.6).
|
|
248
|
+
*/
|
|
249
|
+
export function buildListContainersByImageArgv(image) {
|
|
250
|
+
return withSystemSocket([
|
|
251
|
+
'ps',
|
|
252
|
+
'--all',
|
|
253
|
+
'--no-trunc',
|
|
254
|
+
'--filter',
|
|
255
|
+
`ancestor=${imageReference(image)}`,
|
|
256
|
+
'--format',
|
|
257
|
+
'{{.ID}}',
|
|
258
|
+
]);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* `docker image rm <repo@digest>`, never `--force`: only the digest reference this core pulled is
|
|
262
|
+
* removed, and Docker itself refuses while any container still uses the image. A tag the user added
|
|
263
|
+
* to the same image keeps the image in place (task 2.6).
|
|
264
|
+
*/
|
|
265
|
+
export function buildRemoveImageArgv(image) {
|
|
266
|
+
return withSystemSocket(['image', 'rm', imageReference(image)]);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* `--timestamps` prefixes every line with its RFC3339Nano time so `operations.ts`'s `containerLogs`
|
|
270
|
+
* can merge stdout and stderr back into one chronological log (review round 1, item 2). `'all'` is
|
|
271
|
+
* docker's own spelling for the whole log.
|
|
272
|
+
*/
|
|
273
|
+
export function buildLogsArgv(containerId, tailLines) {
|
|
274
|
+
if (tailLines !== 'all' && (!Number.isInteger(tailLines) || tailLines < 1)) {
|
|
275
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'log tail length is not a positive integer.', String(tailLines));
|
|
276
|
+
}
|
|
277
|
+
return withSystemSocket([
|
|
278
|
+
'logs',
|
|
279
|
+
'--timestamps',
|
|
280
|
+
'--tail',
|
|
281
|
+
String(tailLines),
|
|
282
|
+
assertSafeArgvValue(containerId, 'container id'),
|
|
283
|
+
]);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* `-v <source>:<target>:<mode>[,z]`; `:z` only when the caller says this Docker runs with SELinux
|
|
287
|
+
* (design D15), and only once `source` is confirmed to be inside `dataRoot` — the caller
|
|
288
|
+
* (`buildCreateModelContainerArgv`) has already refused to reach here with `selinux: true` and no
|
|
289
|
+
* `dataRoot`.
|
|
290
|
+
*/
|
|
291
|
+
function mountFlag(source, target, mode, selinux, dataRoot, what) {
|
|
292
|
+
assertMountSource(source, what);
|
|
293
|
+
if (selinux && dataRoot !== undefined)
|
|
294
|
+
assertWithinDataRoot(source, dataRoot, what);
|
|
295
|
+
const options = selinux ? `${mode},z` : mode;
|
|
296
|
+
return ['-v', `${source}:${target}:${options}`];
|
|
297
|
+
}
|
|
298
|
+
function labelFlags(labels) {
|
|
299
|
+
const flags = [];
|
|
300
|
+
for (const [key, value] of Object.entries(labels)) {
|
|
301
|
+
assertIdentifier(key, `label key ${key}`);
|
|
302
|
+
flags.push('-l', `atomic.${key}=${assertSafeArgvValue(value, `label ${key}`)}`);
|
|
303
|
+
}
|
|
304
|
+
return flags;
|
|
305
|
+
}
|
|
306
|
+
function envFlags(env) {
|
|
307
|
+
if (!env)
|
|
308
|
+
return [];
|
|
309
|
+
const flags = [];
|
|
310
|
+
for (const [key, value] of Object.entries(env)) {
|
|
311
|
+
assertIdentifier(key, `env key ${key}`);
|
|
312
|
+
flags.push('-e', `${key}=${assertEnvValue(value, `env ${key}`)}`);
|
|
313
|
+
}
|
|
314
|
+
return flags;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Command words run *after* the image reference: Docker itself never parses them as its own flags,
|
|
318
|
+
* it hands them straight to the container's entrypoint, so a leading `-` here is ordinary (e.g. a
|
|
319
|
+
* program's own `--port 8000` or `-L`) rather than a flag-injection risk. Only the control-character
|
|
320
|
+
* guard — which protects the argv boundary itself, not "did this look like a docker flag" — still
|
|
321
|
+
* applies.
|
|
322
|
+
*/
|
|
323
|
+
function commandWords(command) {
|
|
324
|
+
if (!command)
|
|
325
|
+
return [];
|
|
326
|
+
return command.map((word, i) => {
|
|
327
|
+
if (word === '' || hasControlChars(word))
|
|
328
|
+
invalidArgument(`command[${i}]`, word);
|
|
329
|
+
return word;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* The model container's `docker create` argv (spec `tensorrt-llm-runtime`, requirement "the model
|
|
334
|
+
* container is isolated"; SELinux per requirement "mounts work under SELinux", design D15). Security
|
|
335
|
+
* posture is not configurable by the spec: no docker socket mount, no `--privileged`, no
|
|
336
|
+
* `--ipc=host`, `--restart=no` always, `--pull=never` always (review round 1, item 5 ruling — only
|
|
337
|
+
* `pull.ts` fetches image bytes), and the port published only on `127.0.0.1`. Every option comes
|
|
338
|
+
* before the positional image reference and command, so nothing derived from a descriptor or a probe
|
|
339
|
+
* can land where Docker would read it as the start of a new flag. `spec.selinuxDataRoot` is required
|
|
340
|
+
* whenever `spec.selinux` is true — see `assertWithinDataRoot`. `spec.user` runs the engine as the
|
|
341
|
+
* core's own uid:gid rather than the image's root (final review I-1, ADR
|
|
342
|
+
* 2026-09-29-the-engine-container-runs-as-the-invoking-user).
|
|
343
|
+
*/
|
|
344
|
+
export function buildCreateModelContainerArgv(spec) {
|
|
345
|
+
const ref = imageReference(spec.image);
|
|
346
|
+
const gpuUuid = assertGpuUuid(spec.gpuUuid);
|
|
347
|
+
const host = assertLoopbackHost(spec.publication.host);
|
|
348
|
+
// 0: Docker picks a free port on the loopback of the machine it runs on (the WSL guest, design D7 of
|
|
349
|
+
// change `add-tensorrt-llm-windows`), read back afterwards with `docker port`.
|
|
350
|
+
const hostPort = spec.publication.host_port === 0 ? '' : assertPort(spec.publication.host_port, 'host port');
|
|
351
|
+
const containerPort = assertPort(spec.publication.container_port, 'container port');
|
|
352
|
+
const shmSize = assertShmSize(spec.shmSize ?? MODEL_CONTAINER_SHM_SIZE);
|
|
353
|
+
if (spec.selinux && spec.selinuxDataRoot === undefined) {
|
|
354
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'selinuxDataRoot is required to :z-relabel mounts under SELinux.', 'selinuxDataRoot');
|
|
355
|
+
}
|
|
356
|
+
const dataRoot = spec.selinux ? spec.selinuxDataRoot : undefined;
|
|
357
|
+
const args = [
|
|
358
|
+
'create',
|
|
359
|
+
'--restart=no',
|
|
360
|
+
'--pull=never',
|
|
361
|
+
`--shm-size=${shmSize}`,
|
|
362
|
+
...userFlags(spec.user),
|
|
363
|
+
'--gpus',
|
|
364
|
+
`device=${gpuUuid}`,
|
|
365
|
+
...mountFlag(spec.mounts.model.source, CONTAINER_MODEL_PATH, 'ro', spec.selinux, dataRoot, 'model mount source'),
|
|
366
|
+
...mountFlag(spec.mounts.engineCache.source, CONTAINER_ENGINE_CACHE_PATH, 'rw', spec.selinux, dataRoot, 'engine cache mount source'),
|
|
367
|
+
...mountFlag(spec.mounts.entrypoint.source, CONTAINER_ENTRYPOINT_PATH, 'ro', spec.selinux, dataRoot, 'entrypoint mount source'),
|
|
368
|
+
...mountFlag(spec.mounts.heartbeat.source, CONTAINER_HEARTBEAT_PATH, 'ro', spec.selinux, dataRoot, 'heartbeat mount source'),
|
|
369
|
+
// The watchdog script runs through its interpreter, not as an executable: on Windows it reaches
|
|
370
|
+
// the guest through `\\wsl.localhost` (9p), which keeps no Unix mode, and a direct entrypoint
|
|
371
|
+
// failed with `exec: "/atomic/entrypoint.sh": permission denied` (live acceptance). Read access is
|
|
372
|
+
// all `/bin/sh` needs, on every host.
|
|
373
|
+
'--entrypoint',
|
|
374
|
+
CONTAINER_ENTRYPOINT_SHELL,
|
|
375
|
+
'-p',
|
|
376
|
+
`${host}:${hostPort}:${containerPort}`,
|
|
377
|
+
...labelFlags(spec.labels),
|
|
378
|
+
...envFlags(spec.env),
|
|
379
|
+
ref,
|
|
380
|
+
CONTAINER_ENTRYPOINT_PATH,
|
|
381
|
+
...commandWords(spec.command),
|
|
382
|
+
];
|
|
383
|
+
return withSystemSocket(args);
|
|
384
|
+
}
|
|
385
|
+
/** `docker port <id> <port>/tcp`: where a running container's port was published. */
|
|
386
|
+
export function buildPortArgv(containerId, containerPort) {
|
|
387
|
+
return withSystemSocket([
|
|
388
|
+
'port',
|
|
389
|
+
assertSafeArgvValue(containerId, 'container id'),
|
|
390
|
+
`${assertPort(containerPort, 'container port')}/tcp`,
|
|
391
|
+
]);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* A one-shot `docker run --rm` probe (task 2.x's GPU check): no mounts, no port publication, no
|
|
395
|
+
* restart policy, `--pull=never` (same reasoning as `buildCreateModelContainerArgv`).
|
|
396
|
+
*/
|
|
397
|
+
export function buildRunOnceArgv(spec) {
|
|
398
|
+
const ref = imageReference(spec.image);
|
|
399
|
+
const args = ['run', '--rm', '--pull=never'];
|
|
400
|
+
if (spec.gpuUuid !== undefined) {
|
|
401
|
+
args.push('--gpus', `device=${assertGpuUuid(spec.gpuUuid)}`);
|
|
402
|
+
}
|
|
403
|
+
args.push(...envFlags(spec.env), ref, ...commandWords(spec.command));
|
|
404
|
+
return withSystemSocket(args);
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=argv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../../src/runtime/container/argv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** System locations of the docker CLI, in the order they are tried. Never a relative path. */
|
|
2
|
+
export declare const DOCKER_BINARY_CANDIDATES: readonly string[];
|
|
3
|
+
/** The first candidate that is an executable file, or null when this host has none of them. */
|
|
4
|
+
export declare function resolveDockerBinary(candidates?: readonly string[]): Promise<string | null>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the `docker` CLI lives, resolved once at core startup (task 2.12; task 2.8 review carry-
|
|
3
|
+
* forward). Every model-container command runs this absolute path rather than `docker` looked up on
|
|
4
|
+
* `PATH`: core's `PATH` is whatever the app or shell that started it had, and a directory earlier on
|
|
5
|
+
* it (a user's `~/bin`, a project's `node_modules/.bin`) could put a different program under that
|
|
6
|
+
* name, and core would hand it the model container's whole configuration. The distributions the
|
|
7
|
+
* install recipe supports all ship the CLI in one of the fixed system directories below.
|
|
8
|
+
*/
|
|
9
|
+
import { constants } from 'node:fs';
|
|
10
|
+
import { access, stat } from 'node:fs/promises';
|
|
11
|
+
/** System locations of the docker CLI, in the order they are tried. Never a relative path. */
|
|
12
|
+
export const DOCKER_BINARY_CANDIDATES = [
|
|
13
|
+
'/usr/bin/docker',
|
|
14
|
+
'/usr/local/bin/docker',
|
|
15
|
+
'/bin/docker',
|
|
16
|
+
];
|
|
17
|
+
async function isExecutableFile(path) {
|
|
18
|
+
try {
|
|
19
|
+
await access(path, constants.X_OK);
|
|
20
|
+
return (await stat(path)).isFile();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** The first candidate that is an executable file, or null when this host has none of them. */
|
|
27
|
+
export async function resolveDockerBinary(candidates = DOCKER_BINARY_CANDIDATES) {
|
|
28
|
+
for (const candidate of candidates) {
|
|
29
|
+
if (await isExecutableFile(candidate))
|
|
30
|
+
return candidate;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=docker-binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-binary.js","sourceRoot":"","sources":["../../../src/runtime/container/docker-binary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE/C,8FAA8F;AAC9F,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,iBAAiB;IACjB,uBAAuB;IACvB,aAAa;CACd,CAAA;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAClC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAAgC,wBAAwB;IAExD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,MAAM,gBAAgB,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IACzD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Removed outright: `--host` (`argv.ts`) already replaces what these two would otherwise select. */
|
|
2
|
+
export declare const STRIPPED_DOCKER_ENV_VARS: readonly ["DOCKER_HOST", "DOCKER_CONTEXT"];
|
|
3
|
+
export interface DockerChildEnvOptions {
|
|
4
|
+
/** An empty, core-owned directory the docker CLI reads as `$DOCKER_CONFIG`. Not created by this function — call `ensureDockerConfigDir` first. */
|
|
5
|
+
dockerConfigDir: string;
|
|
6
|
+
/** Defaults to `process.env`. Never mutated. */
|
|
7
|
+
base?: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
/** A copy of `options.base` (default `process.env`) with `DOCKER_HOST`/`DOCKER_CONTEXT` removed and `DOCKER_CONFIG` pointed at `options.dockerConfigDir`. */
|
|
10
|
+
export declare function dockerChildEnv(options: DockerChildEnvOptions): NodeJS.ProcessEnv;
|
|
11
|
+
/**
|
|
12
|
+
* Creates `dir` (and any missing parents) if it does not already exist, then atomically writes an
|
|
13
|
+
* empty `config.json` into it (write to `config.json.tmp`, then `rename` over `config.json`) — every
|
|
14
|
+
* call re-asserts emptiness, rather than trusting that nothing has written there since the last call.
|
|
15
|
+
* Idempotent: safe to call before every docker invocation.
|
|
16
|
+
*/
|
|
17
|
+
export declare function ensureDockerConfigDir(dir: string): Promise<void>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The child environment for a docker CLI call.
|
|
3
|
+
*
|
|
4
|
+
* Review round 1, item 5 (RULING): the first version of this file only *deleted* `DOCKER_CONFIG`
|
|
5
|
+
* from the child's environment, on the theory that an absent variable means "no config". It does
|
|
6
|
+
* not: with `DOCKER_CONFIG` unset, the docker CLI falls back to `$HOME/.docker/config.json` — the
|
|
7
|
+
* user's own config, which can carry a `credsStore` (a credential helper the CLI would invoke on the
|
|
8
|
+
* user's behalf) and `proxies` (`HttpProxy`/`HttpsProxy`/`NoProxy` settings the CLI injects as env
|
|
9
|
+
* vars into every container it creates). Deleting the variable does not isolate the call; it makes
|
|
10
|
+
* the call adopt whatever the user's own Docker identity happens to be. The fix is to *set*
|
|
11
|
+
* `DOCKER_CONFIG` to an empty directory this module owns (injectable — production wiring picks a
|
|
12
|
+
* real path under core's data root; tests point it at a temp directory), so the CLI reads that empty
|
|
13
|
+
* directory (no `config.json` inside → no creds, no injected proxies) instead of falling back.
|
|
14
|
+
* `ensureDockerConfigDir` creates it if missing; `--host` (`argv.ts`) separately forces the system
|
|
15
|
+
* socket, so between the two, no user Docker context is ever consulted.
|
|
16
|
+
*
|
|
17
|
+
* Review round 2, item 3 (controller ruling): an empty *directory* alone is not a guarantee of
|
|
18
|
+
* emptiness — something else could later write a `config.json` into it (another tool, a stray copy,
|
|
19
|
+
* a future bug elsewhere in this codebase), and the docker CLI would read whatever showed up.
|
|
20
|
+
* `ensureDockerConfigDir` now also atomically writes `config.json` containing `{}` into the
|
|
21
|
+
* directory on every call (write to a `.tmp` file, then `rename` over the real one — the same
|
|
22
|
+
* write-then-rename convention as `src/settings/store.ts`'s `persist`), so the directory's content is
|
|
23
|
+
* guaranteed, in code, not just by nothing having gotten there yet.
|
|
24
|
+
*/
|
|
25
|
+
import { mkdir, rename, writeFile } from 'node:fs/promises';
|
|
26
|
+
import { join } from 'node:path';
|
|
27
|
+
/** Removed outright: `--host` (`argv.ts`) already replaces what these two would otherwise select. */
|
|
28
|
+
export const STRIPPED_DOCKER_ENV_VARS = ['DOCKER_HOST', 'DOCKER_CONTEXT'];
|
|
29
|
+
/** A copy of `options.base` (default `process.env`) with `DOCKER_HOST`/`DOCKER_CONTEXT` removed and `DOCKER_CONFIG` pointed at `options.dockerConfigDir`. */
|
|
30
|
+
export function dockerChildEnv(options) {
|
|
31
|
+
const env = { ...(options.base ?? process.env) };
|
|
32
|
+
for (const key of STRIPPED_DOCKER_ENV_VARS)
|
|
33
|
+
delete env[key];
|
|
34
|
+
env['DOCKER_CONFIG'] = options.dockerConfigDir;
|
|
35
|
+
return env;
|
|
36
|
+
}
|
|
37
|
+
/** The docker CLI's config file, forced empty (review round 2, item 3): no `credsStore`, no `proxies`. */
|
|
38
|
+
const EMPTY_DOCKER_CONFIG_JSON = '{}\n';
|
|
39
|
+
/**
|
|
40
|
+
* Creates `dir` (and any missing parents) if it does not already exist, then atomically writes an
|
|
41
|
+
* empty `config.json` into it (write to `config.json.tmp`, then `rename` over `config.json`) — every
|
|
42
|
+
* call re-asserts emptiness, rather than trusting that nothing has written there since the last call.
|
|
43
|
+
* Idempotent: safe to call before every docker invocation.
|
|
44
|
+
*/
|
|
45
|
+
export async function ensureDockerConfigDir(dir) {
|
|
46
|
+
await mkdir(dir, { recursive: true });
|
|
47
|
+
const configPath = join(dir, 'config.json');
|
|
48
|
+
const tmpPath = `${configPath}.tmp`;
|
|
49
|
+
await writeFile(tmpPath, EMPTY_DOCKER_CONFIG_JSON, { encoding: 'utf8', mode: 0o600 });
|
|
50
|
+
await rename(tmpPath, configPath);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/runtime/container/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,qGAAqG;AACrG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAU,CAAA;AASlF,6JAA6J;AAC7J,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,GAAG,GAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;IACnE,KAAK,MAAM,GAAG,IAAI,wBAAwB;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3D,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAA;IAC9C,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,0GAA0G;AAC1G,MAAM,wBAAwB,GAAG,MAAM,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,GAAG,UAAU,MAAM,CAAA;IACnC,MAAM,SAAS,CAAC,OAAO,EAAE,wBAAwB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACrF,MAAM,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DockerCommandResult, DockerExec, DockerExecCallOptions } from './types.js';
|
|
2
|
+
export interface DockerCommandOptions {
|
|
3
|
+
/** How long one docker call may take before it counts as unanswered. Default 30 s; a per-call `timeoutMs` overrides it for just that call. */
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
/**
|
|
6
|
+
* Per stream (so stdout and stderr together hold up to twice this). Past it the whole lines within
|
|
7
|
+
* the first half and within the last half are kept and the middle is dropped; the command still
|
|
8
|
+
* counts as answered. Default 4 MiB.
|
|
9
|
+
*/
|
|
10
|
+
maxOutputBytes?: number;
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
/** An empty, core-owned directory the docker CLI reads as `$DOCKER_CONFIG` (review round 1, item 5 ruling). Created if missing before every call. */
|
|
13
|
+
dockerConfigDir: string;
|
|
14
|
+
}
|
|
15
|
+
/** `spawn(exe, args)` with no shell, a sanitized environment (`env.ts`), a deadline and a bounded buffer. */
|
|
16
|
+
export declare function runDockerCommand(exe: string, args: string[], options: DockerCommandOptions, callOptions?: DockerExecCallOptions): Promise<DockerCommandResult>;
|
|
17
|
+
export interface CreateDockerExecOptions extends DockerCommandOptions {
|
|
18
|
+
/** The docker executable to run. Defaults to `'docker'` on `PATH`; tests inject a fake binary. */
|
|
19
|
+
dockerPath?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The production `DockerExec`: real `docker`, the system socket already forced by `argv.ts`'s
|
|
23
|
+
* builders. `dockerConfigDir` is required — see `env.ts`'s doc comment for why this module never
|
|
24
|
+
* runs `docker` without one. The returned function accepts a per-call `DockerExecCallOptions`
|
|
25
|
+
* (review round 1, item 3): `stopContainer` uses it to extend the deadline past a long `--time`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createDockerExec(options: CreateDockerExecOptions): DockerExec;
|