@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,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running one already-built docker argv (`argv.ts`) against the real `docker` binary. No shell:
|
|
3
|
+
* `spawn` receives the executable and every argument as its own array element, so nothing a
|
|
4
|
+
* descriptor, a probe or a mount path contains is ever interpreted by a shell. Modeled on
|
|
5
|
+
* `src/hardware/probe.ts`'s `runTool` and `src/runtime/environment/host-exec.ts`'s `hostExec`: a
|
|
6
|
+
* command that could not answer (missing binary, spawn failure, past its deadline) resolves with
|
|
7
|
+
* `code: null` rather than rejecting, so a caller always gets one shape back.
|
|
8
|
+
*
|
|
9
|
+
* `options.dockerConfigDir` is required (review round 1, item 5 ruling): every call creates it if
|
|
10
|
+
* missing and points `DOCKER_CONFIG` at it, so the docker CLI never falls back to the user's own
|
|
11
|
+
* `~/.docker/config.json` — see `env.ts`'s doc comment for why that fallback matters.
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'node:child_process';
|
|
14
|
+
import { HeadAndTail } from '../shared/index.js';
|
|
15
|
+
import { dockerChildEnv, ensureDockerConfigDir } from './env.js';
|
|
16
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
17
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
|
|
18
|
+
/** `spawn(exe, args)` with no shell, a sanitized environment (`env.ts`), a deadline and a bounded buffer. */
|
|
19
|
+
export async function runDockerCommand(exe, args, options, callOptions = {}) {
|
|
20
|
+
const timeoutMs = callOptions.timeoutMs ?? options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
21
|
+
const limit = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
22
|
+
await ensureDockerConfigDir(options.dockerConfigDir);
|
|
23
|
+
const env = dockerChildEnv({ dockerConfigDir: options.dockerConfigDir, base: options.env ?? process.env });
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
let settled = false;
|
|
26
|
+
const stdout = new HeadAndTail(limit);
|
|
27
|
+
const stderr = new HeadAndTail(limit);
|
|
28
|
+
// Unset until spawn succeeds: a spawn that throws synchronously leaves nothing to kill.
|
|
29
|
+
let child;
|
|
30
|
+
const finish = (result) => {
|
|
31
|
+
if (settled)
|
|
32
|
+
return;
|
|
33
|
+
settled = true;
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
resolve(result);
|
|
36
|
+
};
|
|
37
|
+
// Armed before the spawn so a spawn that throws on the spot still has a real timer to clear.
|
|
38
|
+
const timer = setTimeout(() => {
|
|
39
|
+
child?.kill('SIGKILL');
|
|
40
|
+
finish({ code: null, stdout: '', stderr: `docker did not answer within ${timeoutMs} ms` });
|
|
41
|
+
}, timeoutMs);
|
|
42
|
+
timer.unref();
|
|
43
|
+
try {
|
|
44
|
+
child = spawn(exe, args, {
|
|
45
|
+
shell: false,
|
|
46
|
+
windowsHide: true,
|
|
47
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
+
env,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
// Some malformed calls throw synchronously; that is an unanswered command, not a crash.
|
|
53
|
+
finish({ code: null, stdout: '', stderr: error.message });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
child.stdout?.on('data', (chunk) => stdout.push(chunk));
|
|
57
|
+
child.stderr?.on('data', (chunk) => stderr.push(chunk));
|
|
58
|
+
// A binary that is not on the machine arrives here as ENOENT, not as an exit code.
|
|
59
|
+
child.on('error', (error) => finish({ code: null, stdout: '', stderr: error.message }));
|
|
60
|
+
child.on('close', (code) => {
|
|
61
|
+
finish({
|
|
62
|
+
code,
|
|
63
|
+
stdout: stdout.text(),
|
|
64
|
+
stderr: stderr.text(),
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The production `DockerExec`: real `docker`, the system socket already forced by `argv.ts`'s
|
|
71
|
+
* builders. `dockerConfigDir` is required — see `env.ts`'s doc comment for why this module never
|
|
72
|
+
* runs `docker` without one. The returned function accepts a per-call `DockerExecCallOptions`
|
|
73
|
+
* (review round 1, item 3): `stopContainer` uses it to extend the deadline past a long `--time`.
|
|
74
|
+
*/
|
|
75
|
+
export function createDockerExec(options) {
|
|
76
|
+
const dockerPath = options.dockerPath ?? 'docker';
|
|
77
|
+
return (args, callOptions) => runDockerCommand(dockerPath, args, options, callOptions);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/runtime/container/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { DataLayout } from '../../config/index.js';
|
|
2
|
+
/** One journalled container: identity enough to find it again and decide whether it is ours. */
|
|
3
|
+
export interface ExecutionRecord {
|
|
4
|
+
container_id: string;
|
|
5
|
+
engine_id: string;
|
|
6
|
+
image_digest: string;
|
|
7
|
+
scope: string;
|
|
8
|
+
/** The core instance (`InstanceLock.instanceId`) that created this container. */
|
|
9
|
+
instance_id: string;
|
|
10
|
+
created_at: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class ExecutionJournal {
|
|
13
|
+
private readonly dir;
|
|
14
|
+
private records;
|
|
15
|
+
/**
|
|
16
|
+
* Serializes every disk write behind this journal, so concurrent `add`/`remove` calls land on disk
|
|
17
|
+
* in the order they were *called*, never the order their own I/O happens to finish in — the same
|
|
18
|
+
* `flush` queue `process-journal.ts` chains its whole-array rewrites through. The in-memory map is
|
|
19
|
+
* always mutated synchronously before a write is enqueued, so `list()` is never behind the queue;
|
|
20
|
+
* only what ends up on disk depended on write-completion order before this queue existed.
|
|
21
|
+
*
|
|
22
|
+
* Always kept *settled-or-pending*, never rejected: `enqueue` neutralizes each task's own outcome
|
|
23
|
+
* before storing it back here, so one call's write failing (ENOSPC, EACCES, …) can never poison
|
|
24
|
+
* every later call on this journal — round 2 of the task 2.10 review, `execution-journal.ts:134-137`.
|
|
25
|
+
* A naive `this.queue = this.queue.then(task)` leaves a rejected `this.queue` behind a failed task;
|
|
26
|
+
* every later `.then(task)` chained onto a rejected promise skips `task` entirely and rejects with
|
|
27
|
+
* that *old* error instead, silently dropping every write queued after the first failure.
|
|
28
|
+
*/
|
|
29
|
+
private queue;
|
|
30
|
+
private constructor();
|
|
31
|
+
static open(layout: DataLayout): Promise<ExecutionJournal>;
|
|
32
|
+
list(): ExecutionRecord[];
|
|
33
|
+
/**
|
|
34
|
+
* A record must exist before the container can serve anything, so this write is awaited. If the
|
|
35
|
+
* write does not persist, the in-memory map is rolled back to what it held before this call (the
|
|
36
|
+
* previous record for this id, or none) rather than keeping the new value: `list()` promises what a
|
|
37
|
+
* reopen would see, and a reopen never sees a record whose write failed. A caller that gets a
|
|
38
|
+
* rejection here must treat the container as *not* journalled — retry, or stop and remove the
|
|
39
|
+
* container it just created — never assume it is safe because `add()` was called.
|
|
40
|
+
*/
|
|
41
|
+
add(record: ExecutionRecord): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Drop the record for a container that is gone, stopped, or adopted by reconcile. Idempotent. If
|
|
44
|
+
* the disk removal fails, the in-memory map is rolled back to still hold the record — the file is
|
|
45
|
+
* still on disk, so pretending it is gone would desynchronize `list()` from what a reopen finds.
|
|
46
|
+
*/
|
|
47
|
+
remove(containerId: string): Promise<void>;
|
|
48
|
+
private fileFor;
|
|
49
|
+
/**
|
|
50
|
+
* Chains one disk write onto whatever this journal already had queued, and returns a promise that
|
|
51
|
+
* rejects only with *this* task's own error — never a previous task's. `this.queue` itself is kept
|
|
52
|
+
* always non-rejecting (`.catch(() => {})`) so a failed task never blocks the tasks queued after it.
|
|
53
|
+
*/
|
|
54
|
+
private enqueue;
|
|
55
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<data>/atomic-core/managed-runtimes/executions` (task 2.10): the private record of the model
|
|
3
|
+
* containers *this core instance* created. It is never a way to discover containers on the host —
|
|
4
|
+
* `reconcile.ts` is the only reader, and it only ever acts on a container whose id is recorded here.
|
|
5
|
+
* Container labels (`ModelContainerLabels`, `types.ts`) stay discovery-only and play no part in this
|
|
6
|
+
* decision (spec `tensorrt-llm-runtime`, "Метки контейнера MUST NOT служить единственным основанием
|
|
7
|
+
* для остановки").
|
|
8
|
+
*
|
|
9
|
+
* One file per container, named by its id, so a crash mid-write can only ever corrupt that one
|
|
10
|
+
* record — the rest of the journal is unaffected. `process-journal.ts` gives the native-process
|
|
11
|
+
* journal the same guarantee through a whole-array rewrite instead; a container journal that rarely
|
|
12
|
+
* holds more than one record (spec `tensorrt-llm-runtime`, "Одна сессия tensorrt-llm одновременно")
|
|
13
|
+
* gets it more simply by splitting one record per file.
|
|
14
|
+
*/
|
|
15
|
+
import { randomUUID } from 'node:crypto';
|
|
16
|
+
import { mkdir, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
19
|
+
const SAFE_FILENAME = /^[A-Za-z0-9_.-]+$/;
|
|
20
|
+
function assertSafeContainerId(id) {
|
|
21
|
+
if (!SAFE_FILENAME.test(id)) {
|
|
22
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', `Not a safe container id for the execution journal: ${id}`);
|
|
23
|
+
}
|
|
24
|
+
return id;
|
|
25
|
+
}
|
|
26
|
+
function isExecutionRecord(value) {
|
|
27
|
+
if (!value || typeof value !== 'object')
|
|
28
|
+
return false;
|
|
29
|
+
const r = value;
|
|
30
|
+
return (typeof r['container_id'] === 'string' &&
|
|
31
|
+
typeof r['engine_id'] === 'string' &&
|
|
32
|
+
typeof r['image_digest'] === 'string' &&
|
|
33
|
+
typeof r['scope'] === 'string' &&
|
|
34
|
+
typeof r['instance_id'] === 'string' &&
|
|
35
|
+
typeof r['created_at'] === 'string');
|
|
36
|
+
}
|
|
37
|
+
async function readOne(path) {
|
|
38
|
+
const text = await readFile(path, 'utf8').catch(() => '');
|
|
39
|
+
if (!text.trim())
|
|
40
|
+
return undefined;
|
|
41
|
+
let raw;
|
|
42
|
+
try {
|
|
43
|
+
raw = JSON.parse(text);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined; // a torn write costs that one record, never the journal's correctness
|
|
47
|
+
}
|
|
48
|
+
return isExecutionRecord(raw) ? raw : undefined;
|
|
49
|
+
}
|
|
50
|
+
async function readAll(dir) {
|
|
51
|
+
const records = new Map();
|
|
52
|
+
const names = await readdir(dir).catch((e) => {
|
|
53
|
+
if (e.code === 'ENOENT')
|
|
54
|
+
return [];
|
|
55
|
+
throw e;
|
|
56
|
+
});
|
|
57
|
+
for (const name of names) {
|
|
58
|
+
if (!name.endsWith('.json'))
|
|
59
|
+
continue;
|
|
60
|
+
const record = await readOne(join(dir, name));
|
|
61
|
+
if (record)
|
|
62
|
+
records.set(record.container_id, record);
|
|
63
|
+
}
|
|
64
|
+
return records;
|
|
65
|
+
}
|
|
66
|
+
async function writeRecord(dir, path, record) {
|
|
67
|
+
await mkdir(dir, { recursive: true });
|
|
68
|
+
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
69
|
+
await writeFile(tmp, `${JSON.stringify(record, null, 2)}\n`);
|
|
70
|
+
await rename(tmp, path).catch(async (e) => {
|
|
71
|
+
await rm(tmp, { force: true }).catch(() => { });
|
|
72
|
+
throw e;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export class ExecutionJournal {
|
|
76
|
+
dir;
|
|
77
|
+
records = new Map();
|
|
78
|
+
/**
|
|
79
|
+
* Serializes every disk write behind this journal, so concurrent `add`/`remove` calls land on disk
|
|
80
|
+
* in the order they were *called*, never the order their own I/O happens to finish in — the same
|
|
81
|
+
* `flush` queue `process-journal.ts` chains its whole-array rewrites through. The in-memory map is
|
|
82
|
+
* always mutated synchronously before a write is enqueued, so `list()` is never behind the queue;
|
|
83
|
+
* only what ends up on disk depended on write-completion order before this queue existed.
|
|
84
|
+
*
|
|
85
|
+
* Always kept *settled-or-pending*, never rejected: `enqueue` neutralizes each task's own outcome
|
|
86
|
+
* before storing it back here, so one call's write failing (ENOSPC, EACCES, …) can never poison
|
|
87
|
+
* every later call on this journal — round 2 of the task 2.10 review, `execution-journal.ts:134-137`.
|
|
88
|
+
* A naive `this.queue = this.queue.then(task)` leaves a rejected `this.queue` behind a failed task;
|
|
89
|
+
* every later `.then(task)` chained onto a rejected promise skips `task` entirely and rejects with
|
|
90
|
+
* that *old* error instead, silently dropping every write queued after the first failure.
|
|
91
|
+
*/
|
|
92
|
+
queue = Promise.resolve();
|
|
93
|
+
constructor(dir) {
|
|
94
|
+
this.dir = dir;
|
|
95
|
+
}
|
|
96
|
+
static async open(layout) {
|
|
97
|
+
const journal = new ExecutionJournal(layout.managed.executionsDir);
|
|
98
|
+
journal.records = await readAll(journal.dir);
|
|
99
|
+
return journal;
|
|
100
|
+
}
|
|
101
|
+
list() {
|
|
102
|
+
return [...this.records.values()].map((r) => ({ ...r }));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A record must exist before the container can serve anything, so this write is awaited. If the
|
|
106
|
+
* write does not persist, the in-memory map is rolled back to what it held before this call (the
|
|
107
|
+
* previous record for this id, or none) rather than keeping the new value: `list()` promises what a
|
|
108
|
+
* reopen would see, and a reopen never sees a record whose write failed. A caller that gets a
|
|
109
|
+
* rejection here must treat the container as *not* journalled — retry, or stop and remove the
|
|
110
|
+
* container it just created — never assume it is safe because `add()` was called.
|
|
111
|
+
*/
|
|
112
|
+
async add(record) {
|
|
113
|
+
assertSafeContainerId(record.container_id);
|
|
114
|
+
const previous = this.records.get(record.container_id);
|
|
115
|
+
this.records.set(record.container_id, record);
|
|
116
|
+
const path = this.fileFor(record.container_id);
|
|
117
|
+
try {
|
|
118
|
+
await this.enqueue(() => writeRecord(this.dir, path, record));
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Only roll back if nothing else changed this id in the meantime (a concurrent call that
|
|
122
|
+
// mutated it after us owns the current value; rolling back over it would lose that mutation).
|
|
123
|
+
if (this.records.get(record.container_id) === record) {
|
|
124
|
+
if (previous)
|
|
125
|
+
this.records.set(record.container_id, previous);
|
|
126
|
+
else
|
|
127
|
+
this.records.delete(record.container_id);
|
|
128
|
+
}
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Drop the record for a container that is gone, stopped, or adopted by reconcile. Idempotent. If
|
|
134
|
+
* the disk removal fails, the in-memory map is rolled back to still hold the record — the file is
|
|
135
|
+
* still on disk, so pretending it is gone would desynchronize `list()` from what a reopen finds.
|
|
136
|
+
*/
|
|
137
|
+
async remove(containerId) {
|
|
138
|
+
if (!this.records.has(containerId))
|
|
139
|
+
return;
|
|
140
|
+
const previous = this.records.get(containerId);
|
|
141
|
+
this.records.delete(containerId);
|
|
142
|
+
const path = this.fileFor(containerId);
|
|
143
|
+
try {
|
|
144
|
+
await this.enqueue(() => rm(path, { force: true }));
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
// Only restore if nothing else has since claimed this id (e.g. a concurrent add()).
|
|
148
|
+
if (!this.records.has(containerId))
|
|
149
|
+
this.records.set(containerId, previous);
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
fileFor(containerId) {
|
|
154
|
+
return join(this.dir, `${assertSafeContainerId(containerId)}.json`);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Chains one disk write onto whatever this journal already had queued, and returns a promise that
|
|
158
|
+
* rejects only with *this* task's own error — never a previous task's. `this.queue` itself is kept
|
|
159
|
+
* always non-rejecting (`.catch(() => {})`) so a failed task never blocks the tasks queued after it.
|
|
160
|
+
*/
|
|
161
|
+
enqueue(task) {
|
|
162
|
+
const run = this.queue.catch(() => { }).then(task);
|
|
163
|
+
this.queue = run.catch(() => { });
|
|
164
|
+
return run;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=execution-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-journal.js","sourceRoot":"","sources":["../../../src/runtime/container/execution-journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Touches the heartbeat file the watchdog entrypoint (`watchdog.ts`) polls, on a fixed interval,
|
|
3
|
+
* for as long as the managed session lifecycle (task 2.12, which owns this ticker's lifecycle) keeps
|
|
4
|
+
* it running. This file being written from the host, and the watchdog inside the container reading
|
|
5
|
+
* its mtime, is the whole mechanism the "Watchdog гарантирует освобождение GPU" requirement relies
|
|
6
|
+
* on to notice a dead core: no update within the stale limit means the core stopped ticking,
|
|
7
|
+
* whatever the reason (crash, kill, a slept host).
|
|
8
|
+
*
|
|
9
|
+
* Timer, filesystem and clock are all injected so tests run instantly under fake timers. `onError`
|
|
10
|
+
* is required, not optional: a write failure here is a silent gap in the one signal the watchdog
|
|
11
|
+
* trusts, and swallowing it by default is exactly the kind of thing that only gets noticed once the
|
|
12
|
+
* GPU is stuck — the caller must say what happens to it, even if that is just logging. A failed
|
|
13
|
+
* write never throws out of a tick either way; it is retried on the next tick, not treated as fatal
|
|
14
|
+
* to the ticker itself. A dead engine is the watchdog's problem to notice via the *absence* of
|
|
15
|
+
* heartbeats, not this ticker's problem to detect directly.
|
|
16
|
+
*
|
|
17
|
+
* `ready` always settles: it resolves on the first successful write, or rejects if `stop()` is
|
|
18
|
+
* called before that ever happens (findings-2.9-r2 item 5 — a ticker whose writes keep failing, or
|
|
19
|
+
* that is stopped before its first attempt lands, used to leave a caller `await`ing `ready` hanging
|
|
20
|
+
* forever). It can still take arbitrarily long to settle if the ticker is neither stopped nor ever
|
|
21
|
+
* manages a successful write, so a caller awaiting it should race it against its own timeout rather
|
|
22
|
+
* than await it unconditionally.
|
|
23
|
+
*/
|
|
24
|
+
/** The slice of `node:fs/promises` the ticker needs; tests pass an in-memory fake. */
|
|
25
|
+
export interface HeartbeatFs {
|
|
26
|
+
writeFile(path: string, data: string): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export interface HeartbeatTickerOptions {
|
|
29
|
+
/** Path to the heartbeat file. The lifecycle owns its location; this module never derives one. */
|
|
30
|
+
path: string;
|
|
31
|
+
/** Defaults to `DEFAULT_HEARTBEAT_INTERVAL_SECS` (see watchdog.ts for why it is a placeholder). */
|
|
32
|
+
intervalMs?: number;
|
|
33
|
+
fs?: HeartbeatFs;
|
|
34
|
+
/** Clock used for the heartbeat's own content (an epoch-millis string); defaults to `Date.now`. */
|
|
35
|
+
now?: () => number;
|
|
36
|
+
setIntervalFn?: (handler: () => void, ms: number) => ReturnType<typeof setInterval>;
|
|
37
|
+
clearIntervalFn?: (handle: ReturnType<typeof setInterval>) => void;
|
|
38
|
+
/** Called instead of throwing when a tick's write fails; the ticker keeps running either way. */
|
|
39
|
+
onError: (error: unknown) => void;
|
|
40
|
+
}
|
|
41
|
+
export interface HeartbeatTicker {
|
|
42
|
+
/** Resolves on the first successful write; rejects if `stop()` is called before that happens. */
|
|
43
|
+
ready: Promise<void>;
|
|
44
|
+
stop(): void;
|
|
45
|
+
}
|
|
46
|
+
/** Starts ticking immediately (the first write is issued before this returns) and every `intervalMs` after. */
|
|
47
|
+
export declare function startHeartbeatTicker(options: HeartbeatTickerOptions): HeartbeatTicker;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Touches the heartbeat file the watchdog entrypoint (`watchdog.ts`) polls, on a fixed interval,
|
|
3
|
+
* for as long as the managed session lifecycle (task 2.12, which owns this ticker's lifecycle) keeps
|
|
4
|
+
* it running. This file being written from the host, and the watchdog inside the container reading
|
|
5
|
+
* its mtime, is the whole mechanism the "Watchdog гарантирует освобождение GPU" requirement relies
|
|
6
|
+
* on to notice a dead core: no update within the stale limit means the core stopped ticking,
|
|
7
|
+
* whatever the reason (crash, kill, a slept host).
|
|
8
|
+
*
|
|
9
|
+
* Timer, filesystem and clock are all injected so tests run instantly under fake timers. `onError`
|
|
10
|
+
* is required, not optional: a write failure here is a silent gap in the one signal the watchdog
|
|
11
|
+
* trusts, and swallowing it by default is exactly the kind of thing that only gets noticed once the
|
|
12
|
+
* GPU is stuck — the caller must say what happens to it, even if that is just logging. A failed
|
|
13
|
+
* write never throws out of a tick either way; it is retried on the next tick, not treated as fatal
|
|
14
|
+
* to the ticker itself. A dead engine is the watchdog's problem to notice via the *absence* of
|
|
15
|
+
* heartbeats, not this ticker's problem to detect directly.
|
|
16
|
+
*
|
|
17
|
+
* `ready` always settles: it resolves on the first successful write, or rejects if `stop()` is
|
|
18
|
+
* called before that ever happens (findings-2.9-r2 item 5 — a ticker whose writes keep failing, or
|
|
19
|
+
* that is stopped before its first attempt lands, used to leave a caller `await`ing `ready` hanging
|
|
20
|
+
* forever). It can still take arbitrarily long to settle if the ticker is neither stopped nor ever
|
|
21
|
+
* manages a successful write, so a caller awaiting it should race it against its own timeout rather
|
|
22
|
+
* than await it unconditionally.
|
|
23
|
+
*/
|
|
24
|
+
import { writeFile } from 'node:fs/promises';
|
|
25
|
+
import { DEFAULT_HEARTBEAT_INTERVAL_SECS } from './watchdog.js';
|
|
26
|
+
const NODE_FS = { writeFile };
|
|
27
|
+
/** Starts ticking immediately (the first write is issued before this returns) and every `intervalMs` after. */
|
|
28
|
+
export function startHeartbeatTicker(options) {
|
|
29
|
+
const fs = options.fs ?? NODE_FS;
|
|
30
|
+
const now = options.now ?? Date.now;
|
|
31
|
+
const intervalMs = options.intervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_SECS * 1000;
|
|
32
|
+
const setIntervalFn = options.setIntervalFn ?? setInterval;
|
|
33
|
+
const clearIntervalFn = options.clearIntervalFn ?? clearInterval;
|
|
34
|
+
let inFlight = false;
|
|
35
|
+
let readySettled = false;
|
|
36
|
+
let resolveReady;
|
|
37
|
+
let rejectReady;
|
|
38
|
+
const ready = new Promise((resolve, reject) => {
|
|
39
|
+
resolveReady = resolve;
|
|
40
|
+
rejectReady = reject;
|
|
41
|
+
});
|
|
42
|
+
// A caller that never touches `ready` (most callers just want the ticker running) must not turn a
|
|
43
|
+
// stop-before-success into an unhandled rejection; a caller that does await/catch it separately
|
|
44
|
+
// still observes the same rejection, since a promise can have more than one listener.
|
|
45
|
+
ready.catch(() => { });
|
|
46
|
+
// A tick that fires while the previous write is still pending is skipped outright rather than
|
|
47
|
+
// queued: the ticker's only job is to keep the mtime moving, and a queue of stale writes racing
|
|
48
|
+
// a slow filesystem would just reorder themselves for no benefit, or pile up behind it.
|
|
49
|
+
const tick = () => {
|
|
50
|
+
if (inFlight)
|
|
51
|
+
return;
|
|
52
|
+
inFlight = true;
|
|
53
|
+
fs.writeFile(options.path, String(now()))
|
|
54
|
+
.then(() => {
|
|
55
|
+
if (!readySettled) {
|
|
56
|
+
readySettled = true;
|
|
57
|
+
resolveReady();
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
.catch((error) => options.onError(error))
|
|
61
|
+
.finally(() => {
|
|
62
|
+
inFlight = false;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
tick();
|
|
66
|
+
const handle = setIntervalFn(tick, intervalMs);
|
|
67
|
+
return {
|
|
68
|
+
ready,
|
|
69
|
+
stop() {
|
|
70
|
+
clearIntervalFn(handle);
|
|
71
|
+
if (!readySettled) {
|
|
72
|
+
readySettled = true;
|
|
73
|
+
rejectReady(new Error('Heartbeat ticker stopped before its first write succeeded.'));
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../../src/runtime/container/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAO/D,MAAM,OAAO,GAAgB,EAAE,SAAS,EAAE,CAAA;AAsB1C,+GAA+G;AAC/G,MAAM,UAAU,oBAAoB,CAAC,OAA+B;IAClE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAA;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,+BAA+B,GAAG,IAAI,CAAA;IAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,WAAW,CAAA;IAC1D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,aAAa,CAAA;IAEhE,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,IAAI,YAAyB,CAAA;IAC7B,IAAI,WAAsC,CAAA;IAC1C,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,YAAY,GAAG,OAAO,CAAA;QACtB,WAAW,GAAG,MAAM,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,kGAAkG;IAClG,gGAAgG;IAChG,sFAAsF;IACtF,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAErB,8FAA8F;IAC9F,gGAAgG;IAChG,wFAAwF;IACxF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,GAAG,IAAI,CAAA;QACf,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;aACtC,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAA;gBACnB,YAAY,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACjD,OAAO,CAAC,GAAG,EAAE;YACZ,QAAQ,GAAG,KAAK,CAAA;QAClB,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;IAED,IAAI,EAAE,CAAA;IACN,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAE9C,OAAO;QACL,KAAK;QACL,IAAI;YACF,eAAe,CAAC,MAAM,CAAC,CAAA;YACvB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAA;gBACnB,WAAW,CAAC,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAA;YACtF,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Docker executor (task 2.8, openspec change `add-tensorrt-llm-linux`): pulls, inspects,
|
|
3
|
+
* creates, starts, stops, removes and reads the logs of a model container, and runs one-shot GPU
|
|
4
|
+
* probes. `argv.ts` is pure argv construction; `exec.ts` and `operations.ts` are the injectable I/O
|
|
5
|
+
* that runs it; `pull.ts` talks to the Docker Engine API directly for byte-level pull progress. No
|
|
6
|
+
* shell is ever used, and everything a descriptor or a probe contributed is validated before it
|
|
7
|
+
* becomes an argv token or a URL query value (`argv.ts`'s `assertSafeArgvValue`).
|
|
8
|
+
*
|
|
9
|
+
* `wiring.ts` (task 2.12) is what core startup calls on Linux: it resolves the docker CLI to an
|
|
10
|
+
* absolute system path (`docker-binary.ts`), builds the one executor, and reconciles the journal.
|
|
11
|
+
*
|
|
12
|
+
* `execution-journal.ts` (task 2.10) is the private record of the containers this core instance
|
|
13
|
+
* created; `reconcile.ts` uses it and `operations.ts` to stop and remove what a previous instance
|
|
14
|
+
* left running, and never touches a container that is not in the journal.
|
|
15
|
+
*
|
|
16
|
+
* Public API of this module is exported from this file only.
|
|
17
|
+
*/
|
|
18
|
+
export * from './types.js';
|
|
19
|
+
export * from './argv.js';
|
|
20
|
+
export * from './env.js';
|
|
21
|
+
export * from './exec.js';
|
|
22
|
+
export * from './operations.js';
|
|
23
|
+
export * from './pull.js';
|
|
24
|
+
export * from './execution-journal.js';
|
|
25
|
+
export * from './reconcile.js';
|
|
26
|
+
export * from './watchdog.js';
|
|
27
|
+
export * from './heartbeat.js';
|
|
28
|
+
export * from './docker-binary.js';
|
|
29
|
+
export * from './wiring.js';
|
|
30
|
+
export * from './wsl-exec.js';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Docker executor (task 2.8, openspec change `add-tensorrt-llm-linux`): pulls, inspects,
|
|
3
|
+
* creates, starts, stops, removes and reads the logs of a model container, and runs one-shot GPU
|
|
4
|
+
* probes. `argv.ts` is pure argv construction; `exec.ts` and `operations.ts` are the injectable I/O
|
|
5
|
+
* that runs it; `pull.ts` talks to the Docker Engine API directly for byte-level pull progress. No
|
|
6
|
+
* shell is ever used, and everything a descriptor or a probe contributed is validated before it
|
|
7
|
+
* becomes an argv token or a URL query value (`argv.ts`'s `assertSafeArgvValue`).
|
|
8
|
+
*
|
|
9
|
+
* `wiring.ts` (task 2.12) is what core startup calls on Linux: it resolves the docker CLI to an
|
|
10
|
+
* absolute system path (`docker-binary.ts`), builds the one executor, and reconciles the journal.
|
|
11
|
+
*
|
|
12
|
+
* `execution-journal.ts` (task 2.10) is the private record of the containers this core instance
|
|
13
|
+
* created; `reconcile.ts` uses it and `operations.ts` to stop and remove what a previous instance
|
|
14
|
+
* left running, and never touches a container that is not in the journal.
|
|
15
|
+
*
|
|
16
|
+
* Public API of this module is exported from this file only.
|
|
17
|
+
*/
|
|
18
|
+
export * from './types.js';
|
|
19
|
+
export * from './argv.js';
|
|
20
|
+
export * from './env.js';
|
|
21
|
+
export * from './exec.js';
|
|
22
|
+
export * from './operations.js';
|
|
23
|
+
export * from './pull.js';
|
|
24
|
+
export * from './execution-journal.js';
|
|
25
|
+
export * from './reconcile.js';
|
|
26
|
+
export * from './watchdog.js';
|
|
27
|
+
export * from './heartbeat.js';
|
|
28
|
+
export * from './docker-binary.js';
|
|
29
|
+
export * from './wiring.js';
|
|
30
|
+
export * from './wsl-exec.js';
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/container/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DockerCommandResult, DockerExec, ImageRef, ModelContainerCreateSpec, OneShotRunSpec, Realpath, StopOutcome } from './types.js';
|
|
2
|
+
/** `docker image/container inspect`'s answer: `value` is the first (only) element of docker's JSON array. */
|
|
3
|
+
export interface InspectResult {
|
|
4
|
+
found: boolean;
|
|
5
|
+
value: unknown;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The host port Docker published `containerPort` on, for a container created with a Docker-chosen
|
|
9
|
+
* port (`host_port: 0`). Only a `127.0.0.1` publication is accepted, whatever Docker answers.
|
|
10
|
+
*/
|
|
11
|
+
export declare function publishedHostPort(exec: DockerExec, containerId: string, containerPort: number): Promise<number>;
|
|
12
|
+
export declare function inspectImage(exec: DockerExec, image: ImageRef): Promise<InspectResult>;
|
|
13
|
+
export declare function inspectContainer(exec: DockerExec, containerId: string): Promise<InspectResult>;
|
|
14
|
+
export interface CreateContainerDeps {
|
|
15
|
+
/** Defaults to `node:fs/promises`'s `realpath`; tests inject a fake or a real symlinked tmpdir. */
|
|
16
|
+
realpath?: Realpath;
|
|
17
|
+
}
|
|
18
|
+
/** Creates (but does not start) the model container; returns the id docker printed to stdout. */
|
|
19
|
+
export declare function createContainer(exec: DockerExec, spec: ModelContainerCreateSpec, deps?: CreateContainerDeps): Promise<{
|
|
20
|
+
containerId: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function startContainer(exec: DockerExec, containerId: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Stops the container and waits for Docker to confirm it exited (or was already absent) — never
|
|
25
|
+
* treats "our own exec call did not get an answer" as a stop (spec `tensorrt-llm-runtime`,
|
|
26
|
+
* requirement "unloading waits for a confirmed stop"). `confirmed: false` is what a caller maps to
|
|
27
|
+
* `MANAGED_STOP_UNCONFIRMED` and a held GPU reservation.
|
|
28
|
+
*/
|
|
29
|
+
export declare function stopContainer(exec: DockerExec, containerId: string, timeoutSeconds: number): Promise<StopOutcome>;
|
|
30
|
+
/** Idempotent: a container already removed (or never created) is success, not an error. */
|
|
31
|
+
export declare function removeContainer(exec: DockerExec, containerId: string): Promise<void>;
|
|
32
|
+
/** Ids of every container, running or stopped, created from `image`. Fails when docker cannot answer. */
|
|
33
|
+
export declare function containersUsingImage(exec: DockerExec, image: ImageRef): Promise<string[]>;
|
|
34
|
+
/** Removes the digest reference; an image already gone is `absent`, anything else docker refuses throws. */
|
|
35
|
+
export declare function removeImage(exec: DockerExec, image: ImageRef): Promise<'removed' | 'absent'>;
|
|
36
|
+
/** The last `tailLines` lines (or, with `'all'`, every line) of the container's combined,
|
|
37
|
+
* chronologically merged stdout+stderr log. The exec's own per-stream output cap still bounds it. */
|
|
38
|
+
export declare function containerLogs(exec: DockerExec, containerId: string, tailLines: number | 'all'): Promise<string>;
|
|
39
|
+
/** A one-shot `docker run --rm` probe (task 2.x's GPU check): the raw result, never thrown — the caller classifies it. */
|
|
40
|
+
export declare function runOnce(exec: DockerExec, spec: OneShotRunSpec): Promise<DockerCommandResult>;
|