@atomic-chat/core 0.5.1
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 +46 -0
- package/dist/app-daemon.d.ts +2 -0
- package/dist/app-daemon.js +72 -0
- package/dist/app-daemon.js.map +1 -0
- package/dist/backend/catalog/archive.d.ts +70 -0
- package/dist/backend/catalog/archive.js +138 -0
- package/dist/backend/catalog/archive.js.map +1 -0
- package/dist/backend/catalog/bundled-manifest-baseline.d.ts +2 -0
- package/dist/backend/catalog/bundled-manifest-baseline.js +49 -0
- package/dist/backend/catalog/bundled-manifest-baseline.js.map +1 -0
- package/dist/backend/catalog/cuda-family.d.ts +54 -0
- package/dist/backend/catalog/cuda-family.js +93 -0
- package/dist/backend/catalog/cuda-family.js.map +1 -0
- package/dist/backend/catalog/index.d.ts +6 -0
- package/dist/backend/catalog/index.js +7 -0
- package/dist/backend/catalog/index.js.map +1 -0
- package/dist/backend/catalog/manifest.d.ts +102 -0
- package/dist/backend/catalog/manifest.js +233 -0
- package/dist/backend/catalog/manifest.js.map +1 -0
- package/dist/backend/catalog/migrate.d.ts +40 -0
- package/dist/backend/catalog/migrate.js +135 -0
- package/dist/backend/catalog/migrate.js.map +1 -0
- package/dist/backend/index.d.ts +18 -0
- package/dist/backend/index.js +19 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/install/index.d.ts +3 -0
- package/dist/backend/install/index.js +4 -0
- package/dist/backend/install/index.js.map +1 -0
- package/dist/backend/install/runtime-backend.d.ts +22 -0
- package/dist/backend/install/runtime-backend.js +95 -0
- package/dist/backend/install/runtime-backend.js.map +1 -0
- package/dist/backend/install/service.d.ts +119 -0
- package/dist/backend/install/service.js +218 -0
- package/dist/backend/install/service.js.map +1 -0
- package/dist/backend/installed/index.d.ts +3 -0
- package/dist/backend/installed/index.js +4 -0
- package/dist/backend/installed/index.js.map +1 -0
- package/dist/backend/installed/installed.d.ts +93 -0
- package/dist/backend/installed/installed.js +209 -0
- package/dist/backend/installed/installed.js.map +1 -0
- package/dist/backend/installed/scan.d.ts +39 -0
- package/dist/backend/installed/scan.js +105 -0
- package/dist/backend/installed/scan.js.map +1 -0
- package/dist/backend/optimal/index.d.ts +3 -0
- package/dist/backend/optimal/index.js +4 -0
- package/dist/backend/optimal/index.js.map +1 -0
- package/dist/backend/optimal/optimal-cache.d.ts +90 -0
- package/dist/backend/optimal/optimal-cache.js +198 -0
- package/dist/backend/optimal/optimal-cache.js.map +1 -0
- package/dist/backend/optimal/optimal-store.d.ts +24 -0
- package/dist/backend/optimal/optimal-store.js +103 -0
- package/dist/backend/optimal/optimal-store.js.map +1 -0
- package/dist/backend/select/amd-rocm-pci-ids.d.ts +3 -0
- package/dist/backend/select/amd-rocm-pci-ids.js +57 -0
- package/dist/backend/select/amd-rocm-pci-ids.js.map +1 -0
- package/dist/backend/select/categories.d.ts +49 -0
- package/dist/backend/select/categories.js +178 -0
- package/dist/backend/select/categories.js.map +1 -0
- package/dist/backend/select/features.d.ts +81 -0
- package/dist/backend/select/features.js +221 -0
- package/dist/backend/select/features.js.map +1 -0
- package/dist/backend/select/index.d.ts +9 -0
- package/dist/backend/select/index.js +10 -0
- package/dist/backend/select/index.js.map +1 -0
- package/dist/backend/select/recovery.d.ts +51 -0
- package/dist/backend/select/recovery.js +108 -0
- package/dist/backend/select/recovery.js.map +1 -0
- package/dist/backend/select/tiers.d.ts +76 -0
- package/dist/backend/select/tiers.js +179 -0
- package/dist/backend/select/tiers.js.map +1 -0
- package/dist/backend/turboquant.d.ts +134 -0
- package/dist/backend/turboquant.js +587 -0
- package/dist/backend/turboquant.js.map +1 -0
- package/dist/backend/types.d.ts +139 -0
- package/dist/backend/types.js +13 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/backend/version.d.ts +59 -0
- package/dist/backend/version.js +168 -0
- package/dist/backend/version.js.map +1 -0
- package/dist/cli/bin.d.ts +2 -0
- package/dist/cli/bin.js +10 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/cloud.d.ts +13 -0
- package/dist/cli/cloud.js +146 -0
- package/dist/cli/cloud.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +4 -0
- package/dist/cli/commands/daemon.js +88 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/index.d.ts +16 -0
- package/dist/cli/commands/index.js +17 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/models.d.ts +4 -0
- package/dist/cli/commands/models.js +52 -0
- package/dist/cli/commands/models.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +16 -0
- package/dist/cli/commands/serve.js +263 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/server.d.ts +4 -0
- package/dist/cli/commands/server.js +126 -0
- package/dist/cli/commands/server.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +10 -0
- package/dist/cli/commands/shared.js +34 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/shutdown.d.ts +4 -0
- package/dist/cli/commands/shutdown.js +32 -0
- package/dist/cli/commands/shutdown.js.map +1 -0
- package/dist/cli/commands/telemetry.d.ts +8 -0
- package/dist/cli/commands/telemetry.js +50 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +46 -0
- package/dist/cli/io.js +101 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/launch.d.ts +50 -0
- package/dist/cli/launch.js +327 -0
- package/dist/cli/launch.js.map +1 -0
- package/dist/cli/main.d.ts +10 -0
- package/dist/cli/main.js +109 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/owner.d.ts +39 -0
- package/dist/cli/owner.js +179 -0
- package/dist/cli/owner.js.map +1 -0
- package/dist/client/control-client.d.ts +213 -0
- package/dist/client/control-client.js +368 -0
- package/dist/client/control-client.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/cloud/chatgpt.d.ts +63 -0
- package/dist/cloud/chatgpt.js +233 -0
- package/dist/cloud/chatgpt.js.map +1 -0
- package/dist/cloud/index.d.ts +8 -0
- package/dist/cloud/index.js +9 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/registry.d.ts +51 -0
- package/dist/cloud/registry.js +148 -0
- package/dist/cloud/registry.js.map +1 -0
- package/dist/config/data-folder.d.ts +57 -0
- package/dist/config/data-folder.js +150 -0
- package/dist/config/data-folder.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/paths.d.ts +98 -0
- package/dist/config/paths.js +109 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/contracts/control-api.d.ts +61 -0
- package/dist/contracts/control-api.js +7 -0
- package/dist/contracts/control-api.js.map +1 -0
- package/dist/contracts/diffusion.d.ts +477 -0
- package/dist/contracts/diffusion.js +10 -0
- package/dist/contracts/diffusion.js.map +1 -0
- package/dist/contracts/errors.d.ts +61 -0
- package/dist/contracts/errors.js +70 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/contracts/events.d.ts +270 -0
- package/dist/contracts/events.js +7 -0
- package/dist/contracts/events.js.map +1 -0
- package/dist/contracts/hardware.d.ts +53 -0
- package/dist/contracts/hardware.js +12 -0
- package/dist/contracts/hardware.js.map +1 -0
- package/dist/contracts/index.d.ts +12 -0
- package/dist/contracts/index.js +13 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/model-yml.d.ts +28 -0
- package/dist/contracts/model-yml.js +23 -0
- package/dist/contracts/model-yml.js.map +1 -0
- package/dist/contracts/remote-access.d.ts +43 -0
- package/dist/contracts/remote-access.js +12 -0
- package/dist/contracts/remote-access.js.map +1 -0
- package/dist/contracts/session.d.ts +39 -0
- package/dist/contracts/session.js +7 -0
- package/dist/contracts/session.js.map +1 -0
- package/dist/contracts/settings.d.ts +106 -0
- package/dist/contracts/settings.js +17 -0
- package/dist/contracts/settings.js.map +1 -0
- package/dist/core/atomic-core.d.ts +149 -0
- package/dist/core/atomic-core.js +289 -0
- package/dist/core/atomic-core.js.map +1 -0
- package/dist/core/create.d.ts +12 -0
- package/dist/core/create.js +393 -0
- package/dist/core/create.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/public-server.d.ts +76 -0
- package/dist/core/public-server.js +143 -0
- package/dist/core/public-server.js.map +1 -0
- package/dist/core/reap-orphans.d.ts +7 -0
- package/dist/core/reap-orphans.js +40 -0
- package/dist/core/reap-orphans.js.map +1 -0
- package/dist/core/sessions.d.ts +60 -0
- package/dist/core/sessions.js +180 -0
- package/dist/core/sessions.js.map +1 -0
- package/dist/core/types.d.ts +61 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/credentials/api-keys.d.ts +41 -0
- package/dist/credentials/api-keys.js +156 -0
- package/dist/credentials/api-keys.js.map +1 -0
- package/dist/credentials/chatgpt-auth.d.ts +73 -0
- package/dist/credentials/chatgpt-auth.js +167 -0
- package/dist/credentials/chatgpt-auth.js.map +1 -0
- package/dist/credentials/chatgpt-oauth.d.ts +97 -0
- package/dist/credentials/chatgpt-oauth.js +329 -0
- package/dist/credentials/chatgpt-oauth.js.map +1 -0
- package/dist/credentials/chatgpt-store.d.ts +33 -0
- package/dist/credentials/chatgpt-store.js +110 -0
- package/dist/credentials/chatgpt-store.js.map +1 -0
- package/dist/credentials/index.d.ts +11 -0
- package/dist/credentials/index.js +12 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/diffusion/args.d.ts +102 -0
- package/dist/diffusion/args.js +291 -0
- package/dist/diffusion/args.js.map +1 -0
- package/dist/diffusion/compat.d.ts +20 -0
- package/dist/diffusion/compat.js +58 -0
- package/dist/diffusion/compat.js.map +1 -0
- package/dist/diffusion/containment.d.ts +15 -0
- package/dist/diffusion/containment.js +32 -0
- package/dist/diffusion/containment.js.map +1 -0
- package/dist/diffusion/errors.d.ts +28 -0
- package/dist/diffusion/errors.js +63 -0
- package/dist/diffusion/errors.js.map +1 -0
- package/dist/diffusion/gallery.d.ts +76 -0
- package/dist/diffusion/gallery.js +307 -0
- package/dist/diffusion/gallery.js.map +1 -0
- package/dist/diffusion/http.d.ts +16 -0
- package/dist/diffusion/http.js +41 -0
- package/dist/diffusion/http.js.map +1 -0
- package/dist/diffusion/idle.d.ts +23 -0
- package/dist/diffusion/idle.js +45 -0
- package/dist/diffusion/idle.js.map +1 -0
- package/dist/diffusion/image-job.d.ts +25 -0
- package/dist/diffusion/image-job.js +176 -0
- package/dist/diffusion/image-job.js.map +1 -0
- package/dist/diffusion/index.d.ts +35 -0
- package/dist/diffusion/index.js +36 -0
- package/dist/diffusion/index.js.map +1 -0
- package/dist/diffusion/install.d.ts +61 -0
- package/dist/diffusion/install.js +287 -0
- package/dist/diffusion/install.js.map +1 -0
- package/dist/diffusion/job-kind.d.ts +74 -0
- package/dist/diffusion/job-kind.js +7 -0
- package/dist/diffusion/job-kind.js.map +1 -0
- package/dist/diffusion/jobs.d.ts +90 -0
- package/dist/diffusion/jobs.js +433 -0
- package/dist/diffusion/jobs.js.map +1 -0
- package/dist/diffusion/mutex.d.ts +16 -0
- package/dist/diffusion/mutex.js +46 -0
- package/dist/diffusion/mutex.js.map +1 -0
- package/dist/diffusion/parse.d.ts +19 -0
- package/dist/diffusion/parse.js +274 -0
- package/dist/diffusion/parse.js.map +1 -0
- package/dist/diffusion/png.d.ts +77 -0
- package/dist/diffusion/png.js +335 -0
- package/dist/diffusion/png.js.map +1 -0
- package/dist/diffusion/progress.d.ts +74 -0
- package/dist/diffusion/progress.js +223 -0
- package/dist/diffusion/progress.js.map +1 -0
- package/dist/diffusion/recipe.d.ts +26 -0
- package/dist/diffusion/recipe.js +206 -0
- package/dist/diffusion/recipe.js.map +1 -0
- package/dist/diffusion/server-process.d.ts +59 -0
- package/dist/diffusion/server-process.js +235 -0
- package/dist/diffusion/server-process.js.map +1 -0
- package/dist/diffusion/service.d.ts +107 -0
- package/dist/diffusion/service.js +431 -0
- package/dist/diffusion/service.js.map +1 -0
- package/dist/diffusion/session.d.ts +58 -0
- package/dist/diffusion/session.js +226 -0
- package/dist/diffusion/session.js.map +1 -0
- package/dist/diffusion/state.d.ts +90 -0
- package/dist/diffusion/state.js +122 -0
- package/dist/diffusion/state.js.map +1 -0
- package/dist/diffusion/tracker.d.ts +46 -0
- package/dist/diffusion/tracker.js +153 -0
- package/dist/diffusion/tracker.js.map +1 -0
- package/dist/diffusion/types.d.ts +62 -0
- package/dist/diffusion/types.js +10 -0
- package/dist/diffusion/types.js.map +1 -0
- package/dist/diffusion/validate.d.ts +36 -0
- package/dist/diffusion/validate.js +166 -0
- package/dist/diffusion/validate.js.map +1 -0
- package/dist/diffusion/video-gallery.d.ts +56 -0
- package/dist/diffusion/video-gallery.js +252 -0
- package/dist/diffusion/video-gallery.js.map +1 -0
- package/dist/diffusion/video-job.d.ts +33 -0
- package/dist/diffusion/video-job.js +150 -0
- package/dist/diffusion/video-job.js.map +1 -0
- package/dist/diffusion/video-recipe.d.ts +12 -0
- package/dist/diffusion/video-recipe.js +141 -0
- package/dist/diffusion/video-recipe.js.map +1 -0
- package/dist/diffusion/wiring.d.ts +24 -0
- package/dist/diffusion/wiring.js +38 -0
- package/dist/diffusion/wiring.js.map +1 -0
- package/dist/diffusion/workflow.d.ts +33 -0
- package/dist/diffusion/workflow.js +78 -0
- package/dist/diffusion/workflow.js.map +1 -0
- package/dist/downloads/archive.d.ts +15 -0
- package/dist/downloads/archive.js +121 -0
- package/dist/downloads/archive.js.map +1 -0
- package/dist/downloads/disk-space.d.ts +18 -0
- package/dist/downloads/disk-space.js +32 -0
- package/dist/downloads/disk-space.js.map +1 -0
- package/dist/downloads/disk.d.ts +38 -0
- package/dist/downloads/disk.js +88 -0
- package/dist/downloads/disk.js.map +1 -0
- package/dist/downloads/downloader.d.ts +75 -0
- package/dist/downloads/downloader.js +479 -0
- package/dist/downloads/downloader.js.map +1 -0
- package/dist/downloads/index.d.ts +14 -0
- package/dist/downloads/index.js +15 -0
- package/dist/downloads/index.js.map +1 -0
- package/dist/downloads/protocol.d.ts +52 -0
- package/dist/downloads/protocol.js +153 -0
- package/dist/downloads/protocol.js.map +1 -0
- package/dist/downloads/proxy-fetch.d.ts +45 -0
- package/dist/downloads/proxy-fetch.js +571 -0
- package/dist/downloads/proxy-fetch.js.map +1 -0
- package/dist/downloads/verify.d.ts +22 -0
- package/dist/downloads/verify.js +74 -0
- package/dist/downloads/verify.js.map +1 -0
- package/dist/events/emitter.d.ts +44 -0
- package/dist/events/emitter.js +104 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +5 -0
- package/dist/events/index.js +6 -0
- package/dist/events/index.js.map +1 -0
- package/dist/hardware/index.d.ts +7 -0
- package/dist/hardware/index.js +8 -0
- package/dist/hardware/index.js.map +1 -0
- package/dist/hardware/override.d.ts +46 -0
- package/dist/hardware/override.js +81 -0
- package/dist/hardware/override.js.map +1 -0
- package/dist/host/index.d.ts +15 -0
- package/dist/host/index.js +16 -0
- package/dist/host/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/catalog.d.ts +67 -0
- package/dist/integrations/catalog.js +385 -0
- package/dist/integrations/catalog.js.map +1 -0
- package/dist/integrations/config-io.d.ts +86 -0
- package/dist/integrations/config-io.js +229 -0
- package/dist/integrations/config-io.js.map +1 -0
- package/dist/integrations/configure/atomic-agent.d.ts +33 -0
- package/dist/integrations/configure/atomic-agent.js +127 -0
- package/dist/integrations/configure/atomic-agent.js.map +1 -0
- package/dist/integrations/configure/claude-code.d.ts +16 -0
- package/dist/integrations/configure/claude-code.js +45 -0
- package/dist/integrations/configure/claude-code.js.map +1 -0
- package/dist/integrations/configure/cline.d.ts +28 -0
- package/dist/integrations/configure/cline.js +70 -0
- package/dist/integrations/configure/cline.js.map +1 -0
- package/dist/integrations/configure/codex.d.ts +17 -0
- package/dist/integrations/configure/codex.js +43 -0
- package/dist/integrations/configure/codex.js.map +1 -0
- package/dist/integrations/configure/copilot.d.ts +10 -0
- package/dist/integrations/configure/copilot.js +14 -0
- package/dist/integrations/configure/copilot.js.map +1 -0
- package/dist/integrations/configure/droid.d.ts +12 -0
- package/dist/integrations/configure/droid.js +47 -0
- package/dist/integrations/configure/droid.js.map +1 -0
- package/dist/integrations/configure/dsh.d.ts +34 -0
- package/dist/integrations/configure/dsh.js +146 -0
- package/dist/integrations/configure/dsh.js.map +1 -0
- package/dist/integrations/configure/env-agent.d.ts +26 -0
- package/dist/integrations/configure/env-agent.js +41 -0
- package/dist/integrations/configure/env-agent.js.map +1 -0
- package/dist/integrations/configure/goose.d.ts +12 -0
- package/dist/integrations/configure/goose.js +16 -0
- package/dist/integrations/configure/goose.js.map +1 -0
- package/dist/integrations/configure/hermes.d.ts +41 -0
- package/dist/integrations/configure/hermes.js +247 -0
- package/dist/integrations/configure/hermes.js.map +1 -0
- package/dist/integrations/configure/index.d.ts +25 -0
- package/dist/integrations/configure/index.js +26 -0
- package/dist/integrations/configure/index.js.map +1 -0
- package/dist/integrations/configure/json-tree.d.ts +16 -0
- package/dist/integrations/configure/json-tree.js +19 -0
- package/dist/integrations/configure/json-tree.js.map +1 -0
- package/dist/integrations/configure/kilo.d.ts +9 -0
- package/dist/integrations/configure/kilo.js +19 -0
- package/dist/integrations/configure/kilo.js.map +1 -0
- package/dist/integrations/configure/mimo.d.ts +9 -0
- package/dist/integrations/configure/mimo.js +19 -0
- package/dist/integrations/configure/mimo.js.map +1 -0
- package/dist/integrations/configure/muse.d.ts +9 -0
- package/dist/integrations/configure/muse.js +13 -0
- package/dist/integrations/configure/muse.js.map +1 -0
- package/dist/integrations/configure/openclaude.d.ts +13 -0
- package/dist/integrations/configure/openclaude.js +56 -0
- package/dist/integrations/configure/openclaude.js.map +1 -0
- package/dist/integrations/configure/openclaw.d.ts +24 -0
- package/dist/integrations/configure/openclaw.js +99 -0
- package/dist/integrations/configure/openclaw.js.map +1 -0
- package/dist/integrations/configure/opencode-style.d.ts +25 -0
- package/dist/integrations/configure/opencode-style.js +43 -0
- package/dist/integrations/configure/opencode-style.js.map +1 -0
- package/dist/integrations/configure/opencode.d.ts +9 -0
- package/dist/integrations/configure/opencode.js +19 -0
- package/dist/integrations/configure/opencode.js.map +1 -0
- package/dist/integrations/configure/openhands.d.ts +8 -0
- package/dist/integrations/configure/openhands.js +12 -0
- package/dist/integrations/configure/openhands.js.map +1 -0
- package/dist/integrations/configure/pi.d.ts +14 -0
- package/dist/integrations/configure/pi.js +49 -0
- package/dist/integrations/configure/pi.js.map +1 -0
- package/dist/integrations/configure/poolside.d.ts +8 -0
- package/dist/integrations/configure/poolside.js +12 -0
- package/dist/integrations/configure/poolside.js.map +1 -0
- package/dist/integrations/configure/registry.d.ts +41 -0
- package/dist/integrations/configure/registry.js +50 -0
- package/dist/integrations/configure/registry.js.map +1 -0
- package/dist/integrations/configure/zcode.d.ts +59 -0
- package/dist/integrations/configure/zcode.js +260 -0
- package/dist/integrations/configure/zcode.js.map +1 -0
- package/dist/integrations/configure/zed.d.ts +16 -0
- package/dist/integrations/configure/zed.js +61 -0
- package/dist/integrations/configure/zed.js.map +1 -0
- package/dist/integrations/detect.d.ts +29 -0
- package/dist/integrations/detect.js +43 -0
- package/dist/integrations/detect.js.map +1 -0
- package/dist/integrations/index.d.ts +9 -0
- package/dist/integrations/index.js +10 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/lock/control-token.d.ts +19 -0
- package/dist/lock/control-token.js +58 -0
- package/dist/lock/control-token.js.map +1 -0
- package/dist/lock/index.d.ts +10 -0
- package/dist/lock/index.js +11 -0
- package/dist/lock/index.js.map +1 -0
- package/dist/lock/instance-lock.d.ts +93 -0
- package/dist/lock/instance-lock.js +244 -0
- package/dist/lock/instance-lock.js.map +1 -0
- package/dist/lock/legacy-guard.d.ts +46 -0
- package/dist/lock/legacy-guard.js +87 -0
- package/dist/lock/legacy-guard.js.map +1 -0
- package/dist/lock/model-claim.d.ts +20 -0
- package/dist/lock/model-claim.js +84 -0
- package/dist/lock/model-claim.js.map +1 -0
- package/dist/lock/process-identity.d.ts +48 -0
- package/dist/lock/process-identity.js +180 -0
- package/dist/lock/process-identity.js.map +1 -0
- package/dist/lock/process-journal.d.ts +56 -0
- package/dist/lock/process-journal.js +113 -0
- package/dist/lock/process-journal.js.map +1 -0
- package/dist/models/capabilities.d.ts +73 -0
- package/dist/models/capabilities.js +123 -0
- package/dist/models/capabilities.js.map +1 -0
- package/dist/models/embed.d.ts +30 -0
- package/dist/models/embed.js +83 -0
- package/dist/models/embed.js.map +1 -0
- package/dist/models/gguf/classify.d.ts +29 -0
- package/dist/models/gguf/classify.js +89 -0
- package/dist/models/gguf/classify.js.map +1 -0
- package/dist/models/gguf/index.d.ts +5 -0
- package/dist/models/gguf/index.js +6 -0
- package/dist/models/gguf/index.js.map +1 -0
- package/dist/models/gguf/kv-cache.d.ts +27 -0
- package/dist/models/gguf/kv-cache.js +101 -0
- package/dist/models/gguf/kv-cache.js.map +1 -0
- package/dist/models/gguf/read-file.d.ts +11 -0
- package/dist/models/gguf/read-file.js +21 -0
- package/dist/models/gguf/read-file.js.map +1 -0
- package/dist/models/gguf/reader.d.ts +40 -0
- package/dist/models/gguf/reader.js +271 -0
- package/dist/models/gguf/reader.js.map +1 -0
- package/dist/models/gguf/support.d.ts +47 -0
- package/dist/models/gguf/support.js +48 -0
- package/dist/models/gguf/support.js.map +1 -0
- package/dist/models/hf.d.ts +35 -0
- package/dist/models/hf.js +140 -0
- package/dist/models/hf.js.map +1 -0
- package/dist/models/index.d.ts +14 -0
- package/dist/models/index.js +15 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/model-yml.d.ts +22 -0
- package/dist/models/model-yml.js +63 -0
- package/dist/models/model-yml.js.map +1 -0
- package/dist/models/registry.d.ts +51 -0
- package/dist/models/registry.js +102 -0
- package/dist/models/registry.js.map +1 -0
- package/dist/models/shards.d.ts +20 -0
- package/dist/models/shards.js +46 -0
- package/dist/models/shards.js.map +1 -0
- package/dist/remote-access/cloudflared-args.d.ts +41 -0
- package/dist/remote-access/cloudflared-args.js +59 -0
- package/dist/remote-access/cloudflared-args.js.map +1 -0
- package/dist/remote-access/cloudflared-output.d.ts +26 -0
- package/dist/remote-access/cloudflared-output.js +51 -0
- package/dist/remote-access/cloudflared-output.js.map +1 -0
- package/dist/remote-access/index.d.ts +16 -0
- package/dist/remote-access/index.js +17 -0
- package/dist/remote-access/index.js.map +1 -0
- package/dist/remote-access/journal.d.ts +63 -0
- package/dist/remote-access/journal.js +140 -0
- package/dist/remote-access/journal.js.map +1 -0
- package/dist/remote-access/lan-probe.d.ts +28 -0
- package/dist/remote-access/lan-probe.js +63 -0
- package/dist/remote-access/lan-probe.js.map +1 -0
- package/dist/remote-access/lan.d.ts +31 -0
- package/dist/remote-access/lan.js +90 -0
- package/dist/remote-access/lan.js.map +1 -0
- package/dist/remote-access/manager.d.ts +111 -0
- package/dist/remote-access/manager.js +316 -0
- package/dist/remote-access/manager.js.map +1 -0
- package/dist/remote-access/probe.d.ts +92 -0
- package/dist/remote-access/probe.js +186 -0
- package/dist/remote-access/probe.js.map +1 -0
- package/dist/remote-access/process.d.ts +66 -0
- package/dist/remote-access/process.js +160 -0
- package/dist/remote-access/process.js.map +1 -0
- package/dist/remote-access/spawner.d.ts +25 -0
- package/dist/remote-access/spawner.js +49 -0
- package/dist/remote-access/spawner.js.map +1 -0
- package/dist/remote-access/status.d.ts +39 -0
- package/dist/remote-access/status.js +49 -0
- package/dist/remote-access/status.js.map +1 -0
- package/dist/remote-access/wiring.d.ts +34 -0
- package/dist/remote-access/wiring.js +47 -0
- package/dist/remote-access/wiring.js.map +1 -0
- package/dist/router/index.d.ts +7 -0
- package/dist/router/index.js +8 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/resolve.d.ts +41 -0
- package/dist/router/resolve.js +53 -0
- package/dist/router/resolve.js.map +1 -0
- package/dist/runtime/foundation-models/errors.d.ts +28 -0
- package/dist/runtime/foundation-models/errors.js +48 -0
- package/dist/runtime/foundation-models/errors.js.map +1 -0
- package/dist/runtime/foundation-models/index.d.ts +8 -0
- package/dist/runtime/foundation-models/index.js +9 -0
- package/dist/runtime/foundation-models/index.js.map +1 -0
- package/dist/runtime/foundation-models/runtime.d.ts +73 -0
- package/dist/runtime/foundation-models/runtime.js +186 -0
- package/dist/runtime/foundation-models/runtime.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/llamacpp/args.d.ts +90 -0
- package/dist/runtime/llamacpp/args.js +379 -0
- package/dist/runtime/llamacpp/args.js.map +1 -0
- package/dist/runtime/llamacpp/ctx-ladder.d.ts +16 -0
- package/dist/runtime/llamacpp/ctx-ladder.js +28 -0
- package/dist/runtime/llamacpp/ctx-ladder.js.map +1 -0
- package/dist/runtime/llamacpp/devices.d.ts +26 -0
- package/dist/runtime/llamacpp/devices.js +86 -0
- package/dist/runtime/llamacpp/devices.js.map +1 -0
- package/dist/runtime/llamacpp/errors.d.ts +34 -0
- package/dist/runtime/llamacpp/errors.js +137 -0
- package/dist/runtime/llamacpp/errors.js.map +1 -0
- package/dist/runtime/llamacpp/index.d.ts +14 -0
- package/dist/runtime/llamacpp/index.js +15 -0
- package/dist/runtime/llamacpp/index.js.map +1 -0
- package/dist/runtime/llamacpp/load-plan.d.ts +113 -0
- package/dist/runtime/llamacpp/load-plan.js +259 -0
- package/dist/runtime/llamacpp/load-plan.js.map +1 -0
- package/dist/runtime/llamacpp/policy.d.ts +70 -0
- package/dist/runtime/llamacpp/policy.js +191 -0
- package/dist/runtime/llamacpp/policy.js.map +1 -0
- package/dist/runtime/llamacpp/probe.d.ts +13 -0
- package/dist/runtime/llamacpp/probe.js +35 -0
- package/dist/runtime/llamacpp/probe.js.map +1 -0
- package/dist/runtime/llamacpp/runtime-device.d.ts +33 -0
- package/dist/runtime/llamacpp/runtime-device.js +169 -0
- package/dist/runtime/llamacpp/runtime-device.js.map +1 -0
- package/dist/runtime/llamacpp/runtime.d.ts +151 -0
- package/dist/runtime/llamacpp/runtime.js +535 -0
- package/dist/runtime/llamacpp/runtime.js.map +1 -0
- package/dist/runtime/mlx/args.d.ts +10 -0
- package/dist/runtime/mlx/args.js +44 -0
- package/dist/runtime/mlx/args.js.map +1 -0
- package/dist/runtime/mlx/config.d.ts +71 -0
- package/dist/runtime/mlx/config.js +91 -0
- package/dist/runtime/mlx/config.js.map +1 -0
- package/dist/runtime/mlx/errors.d.ts +21 -0
- package/dist/runtime/mlx/errors.js +73 -0
- package/dist/runtime/mlx/errors.js.map +1 -0
- package/dist/runtime/mlx/index.d.ts +12 -0
- package/dist/runtime/mlx/index.js +13 -0
- package/dist/runtime/mlx/index.js.map +1 -0
- package/dist/runtime/mlx/model-files.d.ts +29 -0
- package/dist/runtime/mlx/model-files.js +82 -0
- package/dist/runtime/mlx/model-files.js.map +1 -0
- package/dist/runtime/mlx/runtime.d.ts +77 -0
- package/dist/runtime/mlx/runtime.js +223 -0
- package/dist/runtime/mlx/runtime.js.map +1 -0
- package/dist/runtime/mlx/shard-repair.d.ts +25 -0
- package/dist/runtime/mlx/shard-repair.js +44 -0
- package/dist/runtime/mlx/shard-repair.js.map +1 -0
- package/dist/runtime/shared/env.d.ts +49 -0
- package/dist/runtime/shared/env.js +155 -0
- package/dist/runtime/shared/env.js.map +1 -0
- package/dist/runtime/shared/external-sessions.d.ts +67 -0
- package/dist/runtime/shared/external-sessions.js +155 -0
- package/dist/runtime/shared/external-sessions.js.map +1 -0
- package/dist/runtime/shared/index.d.ts +17 -0
- package/dist/runtime/shared/index.js +18 -0
- package/dist/runtime/shared/index.js.map +1 -0
- package/dist/runtime/shared/load-cancel.d.ts +45 -0
- package/dist/runtime/shared/load-cancel.js +95 -0
- package/dist/runtime/shared/load-cancel.js.map +1 -0
- package/dist/runtime/shared/local-runtime.d.ts +68 -0
- package/dist/runtime/shared/local-runtime.js +12 -0
- package/dist/runtime/shared/local-runtime.js.map +1 -0
- package/dist/runtime/shared/log-stream.d.ts +4 -0
- package/dist/runtime/shared/log-stream.js +28 -0
- package/dist/runtime/shared/log-stream.js.map +1 -0
- package/dist/runtime/shared/paths.d.ts +21 -0
- package/dist/runtime/shared/paths.js +63 -0
- package/dist/runtime/shared/paths.js.map +1 -0
- package/dist/runtime/shared/ports.d.ts +26 -0
- package/dist/runtime/shared/ports.js +45 -0
- package/dist/runtime/shared/ports.js.map +1 -0
- package/dist/runtime/shared/process.d.ts +95 -0
- package/dist/runtime/shared/process.js +224 -0
- package/dist/runtime/shared/process.js.map +1 -0
- package/dist/runtime/shared/sidecar.d.ts +86 -0
- package/dist/runtime/shared/sidecar.js +214 -0
- package/dist/runtime/shared/sidecar.js.map +1 -0
- package/dist/server/clients.d.ts +40 -0
- package/dist/server/clients.js +74 -0
- package/dist/server/clients.js.map +1 -0
- package/dist/server/control/index.d.ts +12 -0
- package/dist/server/control/index.js +12 -0
- package/dist/server/control/index.js.map +1 -0
- package/dist/server/control/router.d.ts +9 -0
- package/dist/server/control/router.js +61 -0
- package/dist/server/control/router.js.map +1 -0
- package/dist/server/control/routes/backends.d.ts +4 -0
- package/dist/server/control/routes/backends.js +47 -0
- package/dist/server/control/routes/backends.js.map +1 -0
- package/dist/server/control/routes/clients.d.ts +4 -0
- package/dist/server/control/routes/clients.js +30 -0
- package/dist/server/control/routes/clients.js.map +1 -0
- package/dist/server/control/routes/cloud.d.ts +4 -0
- package/dist/server/control/routes/cloud.js +32 -0
- package/dist/server/control/routes/cloud.js.map +1 -0
- package/dist/server/control/routes/diffusion-video.d.ts +10 -0
- package/dist/server/control/routes/diffusion-video.js +33 -0
- package/dist/server/control/routes/diffusion-video.js.map +1 -0
- package/dist/server/control/routes/diffusion.d.ts +15 -0
- package/dist/server/control/routes/diffusion.js +71 -0
- package/dist/server/control/routes/diffusion.js.map +1 -0
- package/dist/server/control/routes/disk.d.ts +4 -0
- package/dist/server/control/routes/disk.js +11 -0
- package/dist/server/control/routes/disk.js.map +1 -0
- package/dist/server/control/routes/external-sessions.d.ts +4 -0
- package/dist/server/control/routes/external-sessions.js +27 -0
- package/dist/server/control/routes/external-sessions.js.map +1 -0
- package/dist/server/control/routes/hardware.d.ts +4 -0
- package/dist/server/control/routes/hardware.js +14 -0
- package/dist/server/control/routes/hardware.js.map +1 -0
- package/dist/server/control/routes/lifecycle.d.ts +12 -0
- package/dist/server/control/routes/lifecycle.js +67 -0
- package/dist/server/control/routes/lifecycle.js.map +1 -0
- package/dist/server/control/routes/models.d.ts +7 -0
- package/dist/server/control/routes/models.js +59 -0
- package/dist/server/control/routes/models.js.map +1 -0
- package/dist/server/control/routes/public-server.d.ts +4 -0
- package/dist/server/control/routes/public-server.js +30 -0
- package/dist/server/control/routes/public-server.js.map +1 -0
- package/dist/server/control/routes/remote-access.d.ts +7 -0
- package/dist/server/control/routes/remote-access.js +16 -0
- package/dist/server/control/routes/remote-access.js.map +1 -0
- package/dist/server/control/routes/settings.d.ts +4 -0
- package/dist/server/control/routes/settings.js +58 -0
- package/dist/server/control/routes/settings.js.map +1 -0
- package/dist/server/control/routes/telemetry.d.ts +7 -0
- package/dist/server/control/routes/telemetry.js +46 -0
- package/dist/server/control/routes/telemetry.js.map +1 -0
- package/dist/server/control/server.d.ts +26 -0
- package/dist/server/control/server.js +111 -0
- package/dist/server/control/server.js.map +1 -0
- package/dist/server/control/types.d.ts +271 -0
- package/dist/server/control/types.js +6 -0
- package/dist/server/control/types.js.map +1 -0
- package/dist/server/http.d.ts +62 -0
- package/dist/server/http.js +220 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/public/ctx.d.ts +23 -0
- package/dist/server/public/ctx.js +42 -0
- package/dist/server/public/ctx.js.map +1 -0
- package/dist/server/public/dynamic-hosts.d.ts +40 -0
- package/dist/server/public/dynamic-hosts.js +117 -0
- package/dist/server/public/dynamic-hosts.js.map +1 -0
- package/dist/server/public/errors.d.ts +36 -0
- package/dist/server/public/errors.js +120 -0
- package/dist/server/public/errors.js.map +1 -0
- package/dist/server/public/exchange.d.ts +42 -0
- package/dist/server/public/exchange.js +85 -0
- package/dist/server/public/exchange.js.map +1 -0
- package/dist/server/public/forward.d.ts +53 -0
- package/dist/server/public/forward.js +448 -0
- package/dist/server/public/forward.js.map +1 -0
- package/dist/server/public/gates.d.ts +49 -0
- package/dist/server/public/gates.js +181 -0
- package/dist/server/public/gates.js.map +1 -0
- package/dist/server/public/images-params.d.ts +50 -0
- package/dist/server/public/images-params.js +162 -0
- package/dist/server/public/images-params.js.map +1 -0
- package/dist/server/public/images.d.ts +12 -0
- package/dist/server/public/images.js +96 -0
- package/dist/server/public/images.js.map +1 -0
- package/dist/server/public/index.d.ts +58 -0
- package/dist/server/public/index.js +253 -0
- package/dist/server/public/index.js.map +1 -0
- package/dist/server/public/listing.d.ts +27 -0
- package/dist/server/public/listing.js +116 -0
- package/dist/server/public/listing.js.map +1 -0
- package/dist/server/public/responses.d.ts +11 -0
- package/dist/server/public/responses.js +158 -0
- package/dist/server/public/responses.js.map +1 -0
- package/dist/server/public/sse.d.ts +33 -0
- package/dist/server/public/sse.js +48 -0
- package/dist/server/public/sse.js.map +1 -0
- package/dist/server/public/static-assets.generated.d.ts +3 -0
- package/dist/server/public/static-assets.generated.js +6 -0
- package/dist/server/public/static-assets.generated.js.map +1 -0
- package/dist/server/public/static.d.ts +13 -0
- package/dist/server/public/static.js +75 -0
- package/dist/server/public/static.js.map +1 -0
- package/dist/server/public/subscription.d.ts +14 -0
- package/dist/server/public/subscription.js +56 -0
- package/dist/server/public/subscription.js.map +1 -0
- package/dist/server/public/telemetry.d.ts +65 -0
- package/dist/server/public/telemetry.js +284 -0
- package/dist/server/public/telemetry.js.map +1 -0
- package/dist/server/public/trace.d.ts +66 -0
- package/dist/server/public/trace.js +223 -0
- package/dist/server/public/trace.js.map +1 -0
- package/dist/server/public/types.d.ts +131 -0
- package/dist/server/public/types.js +9 -0
- package/dist/server/public/types.js.map +1 -0
- package/dist/server/public/videos-params.d.ts +95 -0
- package/dist/server/public/videos-params.js +220 -0
- package/dist/server/public/videos-params.js.map +1 -0
- package/dist/server/public/videos.d.ts +16 -0
- package/dist/server/public/videos.js +188 -0
- package/dist/server/public/videos.js.map +1 -0
- package/dist/server/public/wire.d.ts +53 -0
- package/dist/server/public/wire.js +174 -0
- package/dist/server/public/wire.js.map +1 -0
- package/dist/server/shims/anthropic.d.ts +52 -0
- package/dist/server/shims/anthropic.js +519 -0
- package/dist/server/shims/anthropic.js.map +1 -0
- package/dist/server/shims/chat-to-responses.d.ts +113 -0
- package/dist/server/shims/chat-to-responses.js +557 -0
- package/dist/server/shims/chat-to-responses.js.map +1 -0
- package/dist/server/shims/index.d.ts +8 -0
- package/dist/server/shims/index.js +9 -0
- package/dist/server/shims/index.js.map +1 -0
- package/dist/server/shims/json.d.ts +10 -0
- package/dist/server/shims/json.js +78 -0
- package/dist/server/shims/json.js.map +1 -0
- package/dist/server/shims/responses.d.ts +79 -0
- package/dist/server/shims/responses.js +543 -0
- package/dist/server/shims/responses.js.map +1 -0
- package/dist/server/state-file.d.ts +44 -0
- package/dist/server/state-file.js +107 -0
- package/dist/server/state-file.js.map +1 -0
- package/dist/settings/import.d.ts +61 -0
- package/dist/settings/import.js +104 -0
- package/dist/settings/import.js.map +1 -0
- package/dist/settings/index.d.ts +11 -0
- package/dist/settings/index.js +12 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/schema/foundation-models.json +1 -0
- package/dist/settings/schema/llamacpp-upstream.json +489 -0
- package/dist/settings/schema/llamacpp.json +475 -0
- package/dist/settings/schema/mlx.json +136 -0
- package/dist/settings/schema.d.ts +35 -0
- package/dist/settings/schema.js +196 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/settings/store.d.ts +168 -0
- package/dist/settings/store.js +350 -0
- package/dist/settings/store.js.map +1 -0
- package/dist/speculative/chat-template-overrides.d.ts +35 -0
- package/dist/speculative/chat-template-overrides.js +142 -0
- package/dist/speculative/chat-template-overrides.js.map +1 -0
- package/dist/speculative/dflash-registry.d.ts +50 -0
- package/dist/speculative/dflash-registry.js +258 -0
- package/dist/speculative/dflash-registry.js.map +1 -0
- package/dist/speculative/gemma-mtp-registry.d.ts +48 -0
- package/dist/speculative/gemma-mtp-registry.js +79 -0
- package/dist/speculative/gemma-mtp-registry.js.map +1 -0
- package/dist/speculative/index.d.ts +18 -0
- package/dist/speculative/index.js +19 -0
- package/dist/speculative/index.js.map +1 -0
- package/dist/speculative/mlx-dflash-registry.d.ts +39 -0
- package/dist/speculative/mlx-dflash-registry.js +230 -0
- package/dist/speculative/mlx-dflash-registry.js.map +1 -0
- package/dist/speculative/mlx-eagle3-registry.d.ts +24 -0
- package/dist/speculative/mlx-eagle3-registry.js +81 -0
- package/dist/speculative/mlx-eagle3-registry.js.map +1 -0
- package/dist/speculative/mlx-mtp-registry.d.ts +31 -0
- package/dist/speculative/mlx-mtp-registry.js +139 -0
- package/dist/speculative/mlx-mtp-registry.js.map +1 -0
- package/dist/speculative/transcription-registry.d.ts +72 -0
- package/dist/speculative/transcription-registry.js +94 -0
- package/dist/speculative/transcription-registry.js.map +1 -0
- package/dist/telemetry/config.d.ts +38 -0
- package/dist/telemetry/config.js +44 -0
- package/dist/telemetry/config.js.map +1 -0
- package/dist/telemetry/consent.d.ts +21 -0
- package/dist/telemetry/consent.js +35 -0
- package/dist/telemetry/consent.js.map +1 -0
- package/dist/telemetry/core-reporter.d.ts +47 -0
- package/dist/telemetry/core-reporter.js +72 -0
- package/dist/telemetry/core-reporter.js.map +1 -0
- package/dist/telemetry/daemon.d.ts +40 -0
- package/dist/telemetry/daemon.js +67 -0
- package/dist/telemetry/daemon.js.map +1 -0
- package/dist/telemetry/dsn.d.ts +15 -0
- package/dist/telemetry/dsn.js +32 -0
- package/dist/telemetry/dsn.js.map +1 -0
- package/dist/telemetry/envelope.d.ts +97 -0
- package/dist/telemetry/envelope.js +95 -0
- package/dist/telemetry/envelope.js.map +1 -0
- package/dist/telemetry/index.d.ts +18 -0
- package/dist/telemetry/index.js +19 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/policy.d.ts +39 -0
- package/dist/telemetry/policy.js +142 -0
- package/dist/telemetry/policy.js.map +1 -0
- package/dist/telemetry/reporter.d.ts +80 -0
- package/dist/telemetry/reporter.js +0 -0
- package/dist/telemetry/reporter.js.map +1 -0
- package/dist/telemetry/reports.d.ts +68 -0
- package/dist/telemetry/reports.js +212 -0
- package/dist/telemetry/reports.js.map +1 -0
- package/dist/telemetry/scrub.d.ts +19 -0
- package/dist/telemetry/scrub.js +75 -0
- package/dist/telemetry/scrub.js.map +1 -0
- package/dist/telemetry/stack.d.ts +21 -0
- package/dist/telemetry/stack.js +68 -0
- package/dist/telemetry/stack.js.map +1 -0
- package/dist/telemetry/store.d.ts +17 -0
- package/dist/telemetry/store.js +51 -0
- package/dist/telemetry/store.js.map +1 -0
- package/dist/telemetry/subscribe.d.ts +13 -0
- package/dist/telemetry/subscribe.js +19 -0
- package/dist/telemetry/subscribe.js.map +1 -0
- package/dist/telemetry/types.d.ts +40 -0
- package/dist/telemetry/types.js +2 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/util/index.d.ts +5 -0
- package/dist/util/index.js +6 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/rust-number.d.ts +27 -0
- package/dist/util/rust-number.js +101 -0
- package/dist/util/rust-number.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +86 -0
- package/src/settings/schema/foundation-models.json +1 -0
- package/src/settings/schema/llamacpp-upstream.json +489 -0
- package/src/settings/schema/llamacpp.json +475 -0
- package/src/settings/schema/mlx.json +136 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The little bit of HTTP the core needs: a path router, JSON body reading with a cap, the shared
|
|
3
|
+
* error envelope `{error:{code,message,details?}}` that the app already parses, and the loopback
|
|
4
|
+
* checks the control listener relies on (PLAN.md §3.6).
|
|
5
|
+
*
|
|
6
|
+
* Deliberately not a framework: the control surface is a dozen routes, and a dependency here would
|
|
7
|
+
* have to be audited for the signed binary.
|
|
8
|
+
*/
|
|
9
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
10
|
+
export const MAX_JSON_BODY_BYTES = 8 * 1024 * 1024;
|
|
11
|
+
export class Router {
|
|
12
|
+
routes = [];
|
|
13
|
+
add(method, pattern, handler) {
|
|
14
|
+
this.routes.push({ method, pattern, handler, segments: splitPath(pattern) });
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
get(pattern, handler) {
|
|
18
|
+
return this.add('GET', pattern, handler);
|
|
19
|
+
}
|
|
20
|
+
post(pattern, handler) {
|
|
21
|
+
return this.add('POST', pattern, handler);
|
|
22
|
+
}
|
|
23
|
+
put(pattern, handler) {
|
|
24
|
+
return this.add('PUT', pattern, handler);
|
|
25
|
+
}
|
|
26
|
+
patch(pattern, handler) {
|
|
27
|
+
return this.add('PATCH', pattern, handler);
|
|
28
|
+
}
|
|
29
|
+
delete(pattern, handler) {
|
|
30
|
+
return this.add('DELETE', pattern, handler);
|
|
31
|
+
}
|
|
32
|
+
/** The matching route, or `undefined`; `methodMismatch` distinguishes 404 from 405. */
|
|
33
|
+
find(method, path) {
|
|
34
|
+
const segments = splitPath(path);
|
|
35
|
+
let methodMismatch = false;
|
|
36
|
+
for (const route of this.routes) {
|
|
37
|
+
const params = matchSegments(route.segments, segments);
|
|
38
|
+
if (!params)
|
|
39
|
+
continue;
|
|
40
|
+
if (route.method !== method) {
|
|
41
|
+
methodMismatch = true;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
return { route, match: { params } };
|
|
45
|
+
}
|
|
46
|
+
return methodMismatch ? { methodMismatch: true } : undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function splitPath(path) {
|
|
50
|
+
return path.split('/').filter((s) => s.length > 0);
|
|
51
|
+
}
|
|
52
|
+
function matchSegments(pattern, actual) {
|
|
53
|
+
const params = {};
|
|
54
|
+
let p = 0;
|
|
55
|
+
let a = 0;
|
|
56
|
+
while (p < pattern.length) {
|
|
57
|
+
const seg = pattern[p];
|
|
58
|
+
if (seg.startsWith('*')) {
|
|
59
|
+
// Greedy rest-parameter, leaving room for the fixed segments that follow it.
|
|
60
|
+
const remainingFixed = pattern.length - p - 1;
|
|
61
|
+
const take = actual.length - a - remainingFixed;
|
|
62
|
+
if (take < 1)
|
|
63
|
+
return undefined;
|
|
64
|
+
params[seg.slice(1)] = actual.slice(a, a + take).join('/');
|
|
65
|
+
a += take;
|
|
66
|
+
p++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (a >= actual.length)
|
|
70
|
+
return undefined;
|
|
71
|
+
const value = actual[a];
|
|
72
|
+
if (seg.startsWith(':'))
|
|
73
|
+
params[seg.slice(1)] = decodeURIComponent(value);
|
|
74
|
+
else if (seg !== value)
|
|
75
|
+
return undefined;
|
|
76
|
+
p++;
|
|
77
|
+
a++;
|
|
78
|
+
}
|
|
79
|
+
return a === actual.length ? params : undefined;
|
|
80
|
+
}
|
|
81
|
+
export function sendJson(res, status, body) {
|
|
82
|
+
const payload = JSON.stringify(body);
|
|
83
|
+
res.writeHead(status, {
|
|
84
|
+
'content-type': 'application/json; charset=utf-8',
|
|
85
|
+
'content-length': Buffer.byteLength(payload),
|
|
86
|
+
'cache-control': 'no-store',
|
|
87
|
+
});
|
|
88
|
+
res.end(payload);
|
|
89
|
+
}
|
|
90
|
+
/** HTTP status for a core error code. Anything unmapped is a 500: an unknown failure is not the caller's fault. */
|
|
91
|
+
export function statusForCode(code) {
|
|
92
|
+
switch (code) {
|
|
93
|
+
case 'UNAUTHORIZED':
|
|
94
|
+
case 'AUTH_REQUIRED':
|
|
95
|
+
return 401;
|
|
96
|
+
case 'FORBIDDEN_HOST':
|
|
97
|
+
return 403;
|
|
98
|
+
case 'MODEL_NOT_FOUND':
|
|
99
|
+
case 'MODEL_FILE_NOT_FOUND':
|
|
100
|
+
case 'PROVIDER_NOT_FOUND':
|
|
101
|
+
case 'MODEL_NOT_LOADED':
|
|
102
|
+
case 'NO_MODEL_LOADED':
|
|
103
|
+
case 'JOB_NOT_FOUND':
|
|
104
|
+
case 'ENGINE_MISSING':
|
|
105
|
+
case 'MODEL_MISSING':
|
|
106
|
+
case 'SIDE_FILE_MISSING':
|
|
107
|
+
return 404;
|
|
108
|
+
case 'CORE_ALREADY_RUNNING':
|
|
109
|
+
case 'AUTH_CANCELLED':
|
|
110
|
+
case 'MODEL_LOAD_CANCELLED':
|
|
111
|
+
case 'REMOTE_ACCESS_SERVER_STOPPED':
|
|
112
|
+
case 'REMOTE_ACCESS_OPERATION_IN_PROGRESS':
|
|
113
|
+
case 'REMOTE_ACCESS_STOP_FAILED':
|
|
114
|
+
case 'JOB_BUSY':
|
|
115
|
+
case 'BACKEND_IN_USE':
|
|
116
|
+
case 'NOT_CONFIGURED':
|
|
117
|
+
case 'CANCELLED':
|
|
118
|
+
case 'ENGINE_UPDATE_REQUIRED':
|
|
119
|
+
return 409;
|
|
120
|
+
case 'QUEUE_FULL':
|
|
121
|
+
return 429;
|
|
122
|
+
case 'DISK_FULL':
|
|
123
|
+
return 507;
|
|
124
|
+
case 'AUTH_FAILED':
|
|
125
|
+
case 'UPSTREAM_ERROR':
|
|
126
|
+
return 502;
|
|
127
|
+
case 'INVALID_ARGUMENT':
|
|
128
|
+
case 'INVALID_REQUEST':
|
|
129
|
+
case 'INVALID_DIMENSIONS':
|
|
130
|
+
case 'UNSUPPORTED_WORKFLOW':
|
|
131
|
+
case 'UNSUPPORTED_BACKEND':
|
|
132
|
+
case 'MODEL_INCOMPATIBLE':
|
|
133
|
+
return 400;
|
|
134
|
+
case 'CORE_NOT_RUNNING':
|
|
135
|
+
case 'FOUNDATION_MODELS_UNAVAILABLE':
|
|
136
|
+
return 503;
|
|
137
|
+
case 'MODEL_LOAD_TIMED_OUT':
|
|
138
|
+
case 'SERVER_START_TIMED_OUT':
|
|
139
|
+
return 504;
|
|
140
|
+
default:
|
|
141
|
+
return 500;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function toCoreError(error) {
|
|
145
|
+
if (error instanceof AtomicCoreError)
|
|
146
|
+
return error;
|
|
147
|
+
const e = error;
|
|
148
|
+
const code = typeof e?.code === 'string' ? e.code : 'INTERNAL_ERROR';
|
|
149
|
+
return new AtomicCoreError(code, typeof e?.message === 'string' ? e.message : String(error));
|
|
150
|
+
}
|
|
151
|
+
export function sendError(res, error, status) {
|
|
152
|
+
const coreError = toCoreError(error);
|
|
153
|
+
sendJson(res, status ?? statusForCode(coreError.code), { error: coreError.toJSON() });
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Past the limit the rest of the body is read and discarded, up to this many times the limit, before
|
|
157
|
+
* the refusal is written: Bun's `node:http` (1.3.10) delivers an answer written while the request
|
|
158
|
+
* body is still arriving as an empty 200, Node delivers the refusal either way (ADR
|
|
159
|
+
* 2026-09-22-detect-a-client-that-hangs-up-before-the-answer-under-bun). Beyond the ceiling the
|
|
160
|
+
* connection is dropped instead of read on.
|
|
161
|
+
*/
|
|
162
|
+
export const OVERSIZE_DRAIN_FACTOR = 8;
|
|
163
|
+
export async function readJsonBody(req, limit = MAX_JSON_BODY_BYTES) {
|
|
164
|
+
const chunks = [];
|
|
165
|
+
let size = 0;
|
|
166
|
+
for await (const chunk of req) {
|
|
167
|
+
const buf = chunk;
|
|
168
|
+
size += buf.length;
|
|
169
|
+
if (size > limit) {
|
|
170
|
+
if (size > limit * OVERSIZE_DRAIN_FACTOR) {
|
|
171
|
+
req.destroy();
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
chunks.length = 0;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
chunks.push(buf);
|
|
178
|
+
}
|
|
179
|
+
if (size > limit)
|
|
180
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'Request body is too large.', `> ${limit} bytes`);
|
|
181
|
+
if (size === 0)
|
|
182
|
+
return {};
|
|
183
|
+
try {
|
|
184
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
throw new AtomicCoreError('INVALID_ARGUMENT', 'Request body is not valid JSON.', e.message);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const LOOPBACK_HOSTNAMES = new Set(['localhost', '127.0.0.1', '::1', '0:0:0:0:0:0:0:1']);
|
|
191
|
+
/** Peer address check: the control listener answers only to processes on this machine. */
|
|
192
|
+
export function isLoopbackAddress(address) {
|
|
193
|
+
if (!address)
|
|
194
|
+
return false;
|
|
195
|
+
const clean = address.startsWith('::ffff:') ? address.slice('::ffff:'.length) : address;
|
|
196
|
+
return clean === '127.0.0.1' || clean.startsWith('127.') || clean === '::1' || clean === '0:0:0:0:0:0:0:1';
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Host-header check, which is what stops a browser page from posting to the control port through
|
|
200
|
+
* DNS rebinding: the name must itself be loopback, not merely resolve to it today.
|
|
201
|
+
*/
|
|
202
|
+
export function hostHeaderIsLoopback(host) {
|
|
203
|
+
if (!host)
|
|
204
|
+
return false;
|
|
205
|
+
const value = host.trim().toLowerCase();
|
|
206
|
+
const hostname = value.startsWith('[') ? value.slice(1, value.indexOf(']')) : (value.split(':')[0] ?? '');
|
|
207
|
+
return LOOPBACK_HOSTNAMES.has(hostname);
|
|
208
|
+
}
|
|
209
|
+
/** `?name=value` for a request path. */
|
|
210
|
+
export function queryOf(req) {
|
|
211
|
+
const raw = req.url ?? '/';
|
|
212
|
+
const q = raw.indexOf('?');
|
|
213
|
+
return new URLSearchParams(q >= 0 ? raw.slice(q + 1) : '');
|
|
214
|
+
}
|
|
215
|
+
export function pathOf(req) {
|
|
216
|
+
const raw = req.url ?? '/';
|
|
217
|
+
const q = raw.indexOf('?');
|
|
218
|
+
return q >= 0 ? raw.slice(0, q) : raw;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two listeners: the loopback-only control API (`/atomic/v1`) and the optional public
|
|
3
|
+
* OpenAI-compatible API (`/v1`), plus the client registry they share. PLAN.md §3.6.
|
|
4
|
+
*/
|
|
5
|
+
export * from './http.js';
|
|
6
|
+
export * from './clients.js';
|
|
7
|
+
export * from './control/index.js';
|
|
8
|
+
export * from './public/index.js';
|
|
9
|
+
export * from './state-file.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two listeners: the loopback-only control API (`/atomic/v1`) and the optional public
|
|
3
|
+
* OpenAI-compatible API (`/v1`), plus the client registry they share. PLAN.md §3.6.
|
|
4
|
+
*/
|
|
5
|
+
export * from './http.js';
|
|
6
|
+
export * from './clients.js';
|
|
7
|
+
export * from './control/index.js';
|
|
8
|
+
export * from './public/index.js';
|
|
9
|
+
export * from './state-file.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Growing a local model's context when a request overflows it, then finding where the reloaded
|
|
3
|
+
* model now listens.
|
|
4
|
+
*
|
|
5
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (`maybe_auto_increase_and_retry`),
|
|
6
|
+
* src-tauri/src/core/server/context_expansion.rs (`request_context_increase` leader/follower slots).
|
|
7
|
+
*
|
|
8
|
+
* Concurrent overflows of the same model share one reload: the first caller leads, the rest wait for
|
|
9
|
+
* its outcome. Without that, N parallel requests would each reload the model and ratchet the context
|
|
10
|
+
* N steps at once.
|
|
11
|
+
*/
|
|
12
|
+
import type { LocalProvider } from '../../router/index.js';
|
|
13
|
+
import type { PublicServerDeps } from './types.js';
|
|
14
|
+
export type CtxTrigger = 'error' | 'finish_length' | 'compute_error_recovery';
|
|
15
|
+
/**
|
|
16
|
+
* Ask for a larger context; on success, the session's new port and key, resolved afresh because
|
|
17
|
+
* the model is now a different process. Embedding sessions are never grown: their inputs are
|
|
18
|
+
* batched to a fixed size and have no overflow to fix.
|
|
19
|
+
*/
|
|
20
|
+
export declare function autoIncreaseCtx(deps: PublicServerDeps, provider: LocalProvider, modelId: string, trigger: CtxTrigger): Promise<{
|
|
21
|
+
port: number;
|
|
22
|
+
apiKey: string;
|
|
23
|
+
} | undefined>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Growing a local model's context when a request overflows it, then finding where the reloaded
|
|
3
|
+
* model now listens.
|
|
4
|
+
*
|
|
5
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (`maybe_auto_increase_and_retry`),
|
|
6
|
+
* src-tauri/src/core/server/context_expansion.rs (`request_context_increase` leader/follower slots).
|
|
7
|
+
*
|
|
8
|
+
* Concurrent overflows of the same model share one reload: the first caller leads, the rest wait for
|
|
9
|
+
* its outcome. Without that, N parallel requests would each reload the model and ratchet the context
|
|
10
|
+
* N steps at once.
|
|
11
|
+
*/
|
|
12
|
+
const inFlight = new WeakMap();
|
|
13
|
+
function requestIncrease(deps, provider, modelId, trigger) {
|
|
14
|
+
let pending = inFlight.get(deps);
|
|
15
|
+
if (!pending)
|
|
16
|
+
inFlight.set(deps, (pending = new Map()));
|
|
17
|
+
const key = `${provider}:${modelId}`;
|
|
18
|
+
const existing = pending.get(key);
|
|
19
|
+
if (existing)
|
|
20
|
+
return existing;
|
|
21
|
+
const leader = deps
|
|
22
|
+
.increaseCtx(provider, modelId, trigger)
|
|
23
|
+
.catch((e) => ({ ok: false, reason: e.message }))
|
|
24
|
+
.finally(() => pending.delete(key));
|
|
25
|
+
pending.set(key, leader);
|
|
26
|
+
return leader;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ask for a larger context; on success, the session's new port and key, resolved afresh because
|
|
30
|
+
* the model is now a different process. Embedding sessions are never grown: their inputs are
|
|
31
|
+
* batched to a fixed size and have no overflow to fix.
|
|
32
|
+
*/
|
|
33
|
+
export async function autoIncreaseCtx(deps, provider, modelId, trigger) {
|
|
34
|
+
if (deps.findLocal(provider, modelId)?.isEmbedding)
|
|
35
|
+
return undefined;
|
|
36
|
+
const outcome = await requestIncrease(deps, provider, modelId, trigger);
|
|
37
|
+
if (!outcome.ok)
|
|
38
|
+
return undefined;
|
|
39
|
+
const session = deps.findLocal(provider, modelId);
|
|
40
|
+
return session ? { port: session.port, apiKey: session.apiKey } : undefined;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../../src/server/public/ctx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA8D,CAAA;AAE1F,SAAS,eAAe,CACtB,IAAsB,EACtB,QAAuB,EACvB,OAAe,EACf,OAAmB;IAEnB,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,CAAC,OAAO;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI;SAChB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;SACvC,KAAK,CAAC,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;SACxF,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACxB,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAsB,EACtB,QAAuB,EACvB,OAAe,EACf,OAAmB;IAEnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW;QAAE,OAAO,SAAS,CAAA;IACpE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACvE,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,SAAS,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosts the Local API Server trusts without the user typing them into Trusted Hosts.
|
|
3
|
+
*
|
|
4
|
+
* `isValidHost` rejects any `Host` header that is not loopback or listed in the configured trusted
|
|
5
|
+
* hosts. That is the DNS-rebinding guard, and it stays byte for byte as it was. Two callers, though,
|
|
6
|
+
* arrive with a `Host` nobody could have typed in advance:
|
|
7
|
+
*
|
|
8
|
+
* - a Cloudflare quick tunnel, whose `<words>.trycloudflare.com` name is only known once
|
|
9
|
+
* `cloudflared` has printed it, and is new on every start;
|
|
10
|
+
* - a LAN client dialling this machine's own address, which changes with the network (sleep/wake,
|
|
11
|
+
* Wi-Fi switch, DHCP lease).
|
|
12
|
+
*
|
|
13
|
+
* Neither weakens the guard. A rebinding attack puts the *attacker's* domain in `Host`; it cannot
|
|
14
|
+
* make the header equal the tunnel's real public name or the literal address of the socket the
|
|
15
|
+
* request arrived on.
|
|
16
|
+
*
|
|
17
|
+
* Ported from: src-tauri/src/core/server/dynamic_hosts.rs (image-generation line, `767ff6350`).
|
|
18
|
+
* ADR 2026-09-17-trust-the-tunnel-name-and-the-accepted-socket-address-per-request.
|
|
19
|
+
*/
|
|
20
|
+
export declare class DynamicTrustedHosts {
|
|
21
|
+
private tunnel;
|
|
22
|
+
/**
|
|
23
|
+
* Trust `host` (a bare hostname, no scheme, port or path) until cleared. Anything else clears it:
|
|
24
|
+
* a blank value must not trust the empty string, and `*` must never reach `isValidHost`, where it
|
|
25
|
+
* allows every host.
|
|
26
|
+
*/
|
|
27
|
+
setTunnelHost(host: string): void;
|
|
28
|
+
clearTunnelHost(): void;
|
|
29
|
+
tunnelHost(): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* The extra trusted-hosts group for one request.
|
|
32
|
+
*
|
|
33
|
+
* `localAddress` is the local address of the accepted socket. It is trusted only when it says
|
|
34
|
+
* something a loopback bind could not: an unspecified or loopback address adds nothing
|
|
35
|
+
* (`isValidHost` already allows loopback), so a server bound to `127.0.0.1` gains no new names.
|
|
36
|
+
*/
|
|
37
|
+
groupFor(localAddress?: string | null): string[];
|
|
38
|
+
}
|
|
39
|
+
/** The `Host`-header spelling of a socket's local address, or `undefined` when it adds nothing. */
|
|
40
|
+
export declare function socketAddressLiteral(localAddress?: string | null): string | undefined;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosts the Local API Server trusts without the user typing them into Trusted Hosts.
|
|
3
|
+
*
|
|
4
|
+
* `isValidHost` rejects any `Host` header that is not loopback or listed in the configured trusted
|
|
5
|
+
* hosts. That is the DNS-rebinding guard, and it stays byte for byte as it was. Two callers, though,
|
|
6
|
+
* arrive with a `Host` nobody could have typed in advance:
|
|
7
|
+
*
|
|
8
|
+
* - a Cloudflare quick tunnel, whose `<words>.trycloudflare.com` name is only known once
|
|
9
|
+
* `cloudflared` has printed it, and is new on every start;
|
|
10
|
+
* - a LAN client dialling this machine's own address, which changes with the network (sleep/wake,
|
|
11
|
+
* Wi-Fi switch, DHCP lease).
|
|
12
|
+
*
|
|
13
|
+
* Neither weakens the guard. A rebinding attack puts the *attacker's* domain in `Host`; it cannot
|
|
14
|
+
* make the header equal the tunnel's real public name or the literal address of the socket the
|
|
15
|
+
* request arrived on.
|
|
16
|
+
*
|
|
17
|
+
* Ported from: src-tauri/src/core/server/dynamic_hosts.rs (image-generation line, `767ff6350`).
|
|
18
|
+
* ADR 2026-09-17-trust-the-tunnel-name-and-the-accepted-socket-address-per-request.
|
|
19
|
+
*/
|
|
20
|
+
import { isIPv4, isIPv6 } from 'node:net';
|
|
21
|
+
/** One or more dot-separated DNS labels: nothing that `isValidHost` would read as a wildcard. */
|
|
22
|
+
const BARE_HOSTNAME = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/;
|
|
23
|
+
export class DynamicTrustedHosts {
|
|
24
|
+
tunnel;
|
|
25
|
+
/**
|
|
26
|
+
* Trust `host` (a bare hostname, no scheme, port or path) until cleared. Anything else clears it:
|
|
27
|
+
* a blank value must not trust the empty string, and `*` must never reach `isValidHost`, where it
|
|
28
|
+
* allows every host.
|
|
29
|
+
*/
|
|
30
|
+
setTunnelHost(host) {
|
|
31
|
+
const value = host.trim().replace(/\.+$/, '').toLowerCase();
|
|
32
|
+
this.tunnel = BARE_HOSTNAME.test(value) ? value : undefined;
|
|
33
|
+
}
|
|
34
|
+
clearTunnelHost() {
|
|
35
|
+
this.tunnel = undefined;
|
|
36
|
+
}
|
|
37
|
+
tunnelHost() {
|
|
38
|
+
return this.tunnel;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The extra trusted-hosts group for one request.
|
|
42
|
+
*
|
|
43
|
+
* `localAddress` is the local address of the accepted socket. It is trusted only when it says
|
|
44
|
+
* something a loopback bind could not: an unspecified or loopback address adds nothing
|
|
45
|
+
* (`isValidHost` already allows loopback), so a server bound to `127.0.0.1` gains no new names.
|
|
46
|
+
*/
|
|
47
|
+
groupFor(localAddress) {
|
|
48
|
+
const group = [];
|
|
49
|
+
if (this.tunnel !== undefined)
|
|
50
|
+
group.push(this.tunnel);
|
|
51
|
+
const literal = socketAddressLiteral(localAddress);
|
|
52
|
+
if (literal !== undefined)
|
|
53
|
+
group.push(literal);
|
|
54
|
+
return group;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** The `Host`-header spelling of a socket's local address, or `undefined` when it adds nothing. */
|
|
58
|
+
export function socketAddressLiteral(localAddress) {
|
|
59
|
+
if (!localAddress)
|
|
60
|
+
return undefined;
|
|
61
|
+
// A link-local address arrives with its zone (`fe80::1%en0`); a `Host` header never carries one.
|
|
62
|
+
const address = unmapIpv4(localAddress.split('%')[0] ?? '');
|
|
63
|
+
if (isIPv4(address)) {
|
|
64
|
+
if (address === '0.0.0.0' || address.startsWith('127.'))
|
|
65
|
+
return undefined;
|
|
66
|
+
return address;
|
|
67
|
+
}
|
|
68
|
+
if (isIPv6(address)) {
|
|
69
|
+
const lower = address.toLowerCase();
|
|
70
|
+
if (isIpv6Unspecified(lower) || isIpv6Loopback(lower))
|
|
71
|
+
return undefined;
|
|
72
|
+
// `isValidHost` strips the port of a bracketed literal only when the trusted entry is bracketed too.
|
|
73
|
+
return `[${lower}]`;
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A dual-stack listener reports IPv4 peers as `::ffff:a.b.c.d` (or, from some stacks, in the hex
|
|
79
|
+
* form `::ffff:c0a8:105`), but the client wrote plain `a.b.c.d` in its `Host` header.
|
|
80
|
+
*/
|
|
81
|
+
function unmapIpv4(address) {
|
|
82
|
+
const lower = address.toLowerCase();
|
|
83
|
+
if (!lower.startsWith('::ffff:'))
|
|
84
|
+
return address;
|
|
85
|
+
const rest = lower.slice('::ffff:'.length);
|
|
86
|
+
if (isIPv4(rest))
|
|
87
|
+
return rest;
|
|
88
|
+
const hex = /^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(rest);
|
|
89
|
+
if (!hex)
|
|
90
|
+
return address;
|
|
91
|
+
const high = parseInt(hex[1], 16);
|
|
92
|
+
const low = parseInt(hex[2], 16);
|
|
93
|
+
return `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
|
|
94
|
+
}
|
|
95
|
+
/** The eight groups of an IPv6 literal, or `undefined` for a form this does not need to understand. */
|
|
96
|
+
function ipv6Groups(address) {
|
|
97
|
+
if (address.includes('.'))
|
|
98
|
+
return undefined;
|
|
99
|
+
const [head, tail, ...extra] = address.split('::');
|
|
100
|
+
if (head === undefined || extra.length > 0)
|
|
101
|
+
return undefined;
|
|
102
|
+
const parse = (part) => (part === '' ? [] : part.split(':').map((group) => parseInt(group, 16)));
|
|
103
|
+
const leading = parse(head);
|
|
104
|
+
if (tail === undefined)
|
|
105
|
+
return leading.length === 8 ? leading : undefined;
|
|
106
|
+
const trailing = parse(tail);
|
|
107
|
+
const zeros = 8 - leading.length - trailing.length;
|
|
108
|
+
return zeros < 0 ? undefined : [...leading, ...new Array(zeros).fill(0), ...trailing];
|
|
109
|
+
}
|
|
110
|
+
function isIpv6Unspecified(address) {
|
|
111
|
+
return ipv6Groups(address)?.every((group) => group === 0) === true;
|
|
112
|
+
}
|
|
113
|
+
function isIpv6Loopback(address) {
|
|
114
|
+
const groups = ipv6Groups(address);
|
|
115
|
+
return groups !== undefined && groups.slice(0, 7).every((group) => group === 0) && groups[7] === 1;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=dynamic-hosts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-hosts.js","sourceRoot":"","sources":["../../../src/server/public/dynamic-hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading upstream failures: is this a context overflow, a poisoned compute backend, an OOM — and
|
|
3
|
+
* what the client is told in each case.
|
|
4
|
+
*
|
|
5
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (`is_compute_backend_error`,
|
|
6
|
+
* `compute_error_envelope`, `structure_backend_error_body`, `is_context_overflow_finish_length_json`,
|
|
7
|
+
* `body_indicates_oom`), src-tauri/src/core/server/context_expansion.rs (`is_context_limit_error`).
|
|
8
|
+
*
|
|
9
|
+
* The wording of every message is part of the contract: the app's UI and external agents match on
|
|
10
|
+
* it to decide whether to offer a larger context or a smaller model.
|
|
11
|
+
*/
|
|
12
|
+
import type { JsonValue } from '../shims/index.js';
|
|
13
|
+
/** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
|
|
14
|
+
export declare function isContextLimitError(status: number, body: string): boolean;
|
|
15
|
+
export declare function bodyIndicatesOom(body: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* A fatal compute failure that leaves the ggml backend unusable until it is recreated (a Metal OOM
|
|
18
|
+
* during prompt processing answers 500 "Compute error" and every later request fails the same way).
|
|
19
|
+
*/
|
|
20
|
+
export declare function isComputeBackendError(status: number, body: string): boolean;
|
|
21
|
+
export declare function structuredErrorJson(message: string, type: string, code: string): string;
|
|
22
|
+
export declare function computeErrorEnvelope(oom: boolean): string;
|
|
23
|
+
/**
|
|
24
|
+
* A local engine's error as the client receives it: an existing `{"error": {...}}` envelope passes
|
|
25
|
+
* unchanged, anything else (plain stderr text, mlx-vlm's `{"detail": ...}`) is wrapped with a typed
|
|
26
|
+
* `code`, keeping the original text as the message so the overflow and OOM matchers still see it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function structureBackendErrorBody(body: string, oom: boolean, ctxOverflow: boolean): string;
|
|
29
|
+
export declare function clientMaxTokens(requestBody: Buffer): number | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* A 200 whose `finish_reason` is `length` because the context window ran out rather than because
|
|
32
|
+
* the client capped the output. With no client cap, `length` can only mean the window. With a cap,
|
|
33
|
+
* only a stop clearly short of it counts; an unknown token count is taken as client-driven, so a
|
|
34
|
+
* `max_tokens: 16` health check never grows the context.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isContextOverflowFinishLength(response: JsonValue, requestBody: Buffer): boolean;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading upstream failures: is this a context overflow, a poisoned compute backend, an OOM — and
|
|
3
|
+
* what the client is told in each case.
|
|
4
|
+
*
|
|
5
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (`is_compute_backend_error`,
|
|
6
|
+
* `compute_error_envelope`, `structure_backend_error_body`, `is_context_overflow_finish_length_json`,
|
|
7
|
+
* `body_indicates_oom`), src-tauri/src/core/server/context_expansion.rs (`is_context_limit_error`).
|
|
8
|
+
*
|
|
9
|
+
* The wording of every message is part of the contract: the app's UI and external agents match on
|
|
10
|
+
* it to decide whether to offer a larger context or a smaller model.
|
|
11
|
+
*/
|
|
12
|
+
import { isJsonObject, serdeToString } from '../shims/index.js';
|
|
13
|
+
/** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
|
|
14
|
+
export function isContextLimitError(status, body) {
|
|
15
|
+
if (![400, 413, 500, 503].includes(status))
|
|
16
|
+
return false;
|
|
17
|
+
const b = body.toLowerCase();
|
|
18
|
+
if (b.includes('the request exceeds the available context size'))
|
|
19
|
+
return true;
|
|
20
|
+
if (b.includes('max_kv_size') || b.includes('max-kv-size') || b.includes('max kv size'))
|
|
21
|
+
return true;
|
|
22
|
+
if (b.includes('kv cache') && (b.includes('exceed') || b.includes('overflow') || b.includes('too')))
|
|
23
|
+
return true;
|
|
24
|
+
return (b.includes('context') &&
|
|
25
|
+
['size', 'length', 'limit', 'exceed', 'overflow', 'too long', 'too large'].some((w) => b.includes(w)));
|
|
26
|
+
}
|
|
27
|
+
export function bodyIndicatesOom(body) {
|
|
28
|
+
const b = body.toLowerCase();
|
|
29
|
+
return [
|
|
30
|
+
'out of memory',
|
|
31
|
+
'outofmemory',
|
|
32
|
+
'cuda_error_out_of_memory',
|
|
33
|
+
'failed to allocate',
|
|
34
|
+
'insufficient memory',
|
|
35
|
+
'erroroutofdevicememory',
|
|
36
|
+
].some((p) => b.includes(p));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A fatal compute failure that leaves the ggml backend unusable until it is recreated (a Metal OOM
|
|
40
|
+
* during prompt processing answers 500 "Compute error" and every later request fails the same way).
|
|
41
|
+
*/
|
|
42
|
+
export function isComputeBackendError(status, body) {
|
|
43
|
+
if (status !== 500)
|
|
44
|
+
return false;
|
|
45
|
+
const b = body.toLowerCase();
|
|
46
|
+
return [
|
|
47
|
+
'compute error',
|
|
48
|
+
'failed to decode',
|
|
49
|
+
'failed to compute graph',
|
|
50
|
+
'backend is in error state',
|
|
51
|
+
'ggml_backend_sched_graph_compute',
|
|
52
|
+
].some((p) => b.includes(p));
|
|
53
|
+
}
|
|
54
|
+
export function structuredErrorJson(message, type, code) {
|
|
55
|
+
return serdeToString({ error: { message, type, code } });
|
|
56
|
+
}
|
|
57
|
+
export function computeErrorEnvelope(oom) {
|
|
58
|
+
const message = oom
|
|
59
|
+
? 'The model ran out of memory while processing this request. Try a smaller or lighter model, reduce the context size, or remove attached images. On Apple Silicon, memory is shared with the system, so closing other memory-heavy apps can free up headroom.'
|
|
60
|
+
: 'The model failed during computation — most often because it ran out of memory. Try a smaller or lighter model, reduce the context size, or remove attached images. On Apple Silicon, memory is shared with the system, so closing other memory-heavy apps can free up headroom.';
|
|
61
|
+
return structuredErrorJson(message, 'server_error', 'insufficient_memory');
|
|
62
|
+
}
|
|
63
|
+
function parseJson(text) {
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(text);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function isStructuredErrorBody(body) {
|
|
72
|
+
const parsed = parseJson(body);
|
|
73
|
+
return isJsonObject(parsed) && isJsonObject(parsed['error']);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A local engine's error as the client receives it: an existing `{"error": {...}}` envelope passes
|
|
77
|
+
* unchanged, anything else (plain stderr text, mlx-vlm's `{"detail": ...}`) is wrapped with a typed
|
|
78
|
+
* `code`, keeping the original text as the message so the overflow and OOM matchers still see it.
|
|
79
|
+
*/
|
|
80
|
+
export function structureBackendErrorBody(body, oom, ctxOverflow) {
|
|
81
|
+
if (isStructuredErrorBody(body))
|
|
82
|
+
return body;
|
|
83
|
+
const code = ctxOverflow ? 'context_length_exceeded' : oom ? 'insufficient_memory' : 'server_error';
|
|
84
|
+
const type = ctxOverflow ? 'invalid_request_error' : 'server_error';
|
|
85
|
+
return structuredErrorJson(body, type, code);
|
|
86
|
+
}
|
|
87
|
+
/** serde_json `as_u64`: non-negative integers only. */
|
|
88
|
+
function asU64(value) {
|
|
89
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : undefined;
|
|
90
|
+
}
|
|
91
|
+
export function clientMaxTokens(requestBody) {
|
|
92
|
+
const json = parseJson(requestBody.toString('utf8'));
|
|
93
|
+
if (!isJsonObject(json))
|
|
94
|
+
return undefined;
|
|
95
|
+
for (const key of ['max_tokens', 'max_completion_tokens']) {
|
|
96
|
+
const v = asU64(json[key]);
|
|
97
|
+
if (v !== undefined && v > 0)
|
|
98
|
+
return v;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A 200 whose `finish_reason` is `length` because the context window ran out rather than because
|
|
104
|
+
* the client capped the output. With no client cap, `length` can only mean the window. With a cap,
|
|
105
|
+
* only a stop clearly short of it counts; an unknown token count is taken as client-driven, so a
|
|
106
|
+
* `max_tokens: 16` health check never grows the context.
|
|
107
|
+
*/
|
|
108
|
+
export function isContextOverflowFinishLength(response, requestBody) {
|
|
109
|
+
const choices = isJsonObject(response) ? response['choices'] : undefined;
|
|
110
|
+
const hasLength = Array.isArray(choices) && choices.some((c) => isJsonObject(c) && c['finish_reason'] === 'length');
|
|
111
|
+
if (!hasLength)
|
|
112
|
+
return false;
|
|
113
|
+
const cap = clientMaxTokens(requestBody);
|
|
114
|
+
if (cap === undefined)
|
|
115
|
+
return true;
|
|
116
|
+
const usage = isJsonObject(response) ? response['usage'] : undefined;
|
|
117
|
+
const done = asU64(isJsonObject(usage) ? usage['completion_tokens'] : undefined);
|
|
118
|
+
return done !== undefined && done + 1 < cap;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=errors.js.map
|