@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,46 @@
|
|
|
1
|
+
/** The app's error-reporting consent, anonymous user and hardware tags (`set_telemetry_*` in the app). */
|
|
2
|
+
import { AtomicCoreError } from '../../../contracts/index.js';
|
|
3
|
+
import { readJsonBody, sendError, sendJson } from '../../http.js';
|
|
4
|
+
/** What a core whose host turned reporting off (`telemetry: false`) says, whatever it is asked. */
|
|
5
|
+
const NOT_REPORTING = {
|
|
6
|
+
enabled: false,
|
|
7
|
+
reporting: false,
|
|
8
|
+
has_user: false,
|
|
9
|
+
tags: {},
|
|
10
|
+
source: 'host',
|
|
11
|
+
host: 'library',
|
|
12
|
+
};
|
|
13
|
+
/** The body of `PUT /telemetry`, or a message saying what is wrong with it. */
|
|
14
|
+
export function parseTelemetryUpdate(body) {
|
|
15
|
+
if (!body || typeof body !== 'object' || Array.isArray(body))
|
|
16
|
+
return 'telemetry needs a JSON object';
|
|
17
|
+
const { enabled, user_id: userId, tags } = body;
|
|
18
|
+
if (enabled !== undefined && typeof enabled !== 'boolean')
|
|
19
|
+
return '"enabled" must be true or false';
|
|
20
|
+
if (userId !== undefined && userId !== null && typeof userId !== 'string')
|
|
21
|
+
return '"user_id" must be a string or null';
|
|
22
|
+
if (tags !== undefined &&
|
|
23
|
+
(!tags ||
|
|
24
|
+
typeof tags !== 'object' ||
|
|
25
|
+
Array.isArray(tags) ||
|
|
26
|
+
Object.values(tags).some((value) => typeof value !== 'string')))
|
|
27
|
+
return '"tags" must map names to strings';
|
|
28
|
+
return {
|
|
29
|
+
...(enabled !== undefined ? { enabled } : {}),
|
|
30
|
+
...(userId !== undefined ? { user_id: userId } : {}),
|
|
31
|
+
...(tags !== undefined ? { tags: tags } : {}),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function registerTelemetryRoutes(router, deps, ctx) {
|
|
35
|
+
const { p } = ctx;
|
|
36
|
+
const state = () => deps.telemetry?.state() ?? NOT_REPORTING;
|
|
37
|
+
router.get(p('/telemetry'), (_req, res) => sendJson(res, 200, state()));
|
|
38
|
+
router.put(p('/telemetry'), async (req, res) => {
|
|
39
|
+
const update = parseTelemetryUpdate(await readJsonBody(req));
|
|
40
|
+
if (typeof update === 'string')
|
|
41
|
+
return sendError(res, new AtomicCoreError('INVALID_ARGUMENT', update));
|
|
42
|
+
deps.telemetry?.update(update);
|
|
43
|
+
sendJson(res, 200, state());
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../../src/server/control/routes/telemetry.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAE1G,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAIjE,mGAAmG;AACnG,MAAM,aAAa,GAAmB;IACpC,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,+BAA+B,CAAA;IACpG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAA+B,CAAA;IAC1E,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,OAAO,iCAAiC,CAAA;IACnG,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QACvE,OAAO,oCAAoC,CAAA;IAC7C,IACE,IAAI,KAAK,SAAS;QAClB,CAAC,CAAC,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;YACxB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;QAEjE,OAAO,kCAAkC,CAAA;IAC3C,OAAO;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAA8B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,IAAuB,EACvB,GAAwB;IAExB,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAA;IACjB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,aAAa,CAAA;IAE5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAEvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5D,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;QACtG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The control listener: binds loopback, gates every request (loopback peer, loopback `Host`, control
|
|
3
|
+
* token), dispatches through the router, and fans core events out to attached SSE clients.
|
|
4
|
+
*/
|
|
5
|
+
import type { ServerResponse } from 'node:http';
|
|
6
|
+
import type { ControlServerDeps } from './types.js';
|
|
7
|
+
export declare class ControlServer {
|
|
8
|
+
private readonly server;
|
|
9
|
+
private readonly deps;
|
|
10
|
+
readonly host: string;
|
|
11
|
+
readonly port: number;
|
|
12
|
+
private readonly detachEmitter;
|
|
13
|
+
private readonly sseClients;
|
|
14
|
+
private heartbeat;
|
|
15
|
+
private constructor();
|
|
16
|
+
get url(): string;
|
|
17
|
+
static start(deps: ControlServerDeps, options?: {
|
|
18
|
+
host?: string;
|
|
19
|
+
port?: number;
|
|
20
|
+
}): Promise<ControlServer>;
|
|
21
|
+
private broadcast;
|
|
22
|
+
private ping;
|
|
23
|
+
/** Registered by the events route; kept private to the module through the holder. */
|
|
24
|
+
attachSse(res: ServerResponse): void;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The control listener: binds loopback, gates every request (loopback peer, loopback `Host`, control
|
|
3
|
+
* token), dispatches through the router, and fans core events out to attached SSE clients.
|
|
4
|
+
*/
|
|
5
|
+
import { createServer } from 'node:http';
|
|
6
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
7
|
+
import { bearerToken, controlTokenMatches } from '../../lock/index.js';
|
|
8
|
+
import { captureReport, internalErrorReport } from '../../telemetry/index.js';
|
|
9
|
+
import { hostHeaderIsLoopback, isLoopbackAddress, pathOf, sendError, statusForCode, toCoreError, } from '../http.js';
|
|
10
|
+
import { buildRouter } from './router.js';
|
|
11
|
+
import { sseFrame } from './routes/lifecycle.js';
|
|
12
|
+
import { SSE_HEARTBEAT_MS } from './types.js';
|
|
13
|
+
export class ControlServer {
|
|
14
|
+
server;
|
|
15
|
+
deps;
|
|
16
|
+
host;
|
|
17
|
+
port;
|
|
18
|
+
detachEmitter;
|
|
19
|
+
sseClients = new Set();
|
|
20
|
+
heartbeat;
|
|
21
|
+
constructor(server, deps, host, port, detachEmitter) {
|
|
22
|
+
this.server = server;
|
|
23
|
+
this.deps = deps;
|
|
24
|
+
this.host = host;
|
|
25
|
+
this.port = port;
|
|
26
|
+
this.detachEmitter = detachEmitter;
|
|
27
|
+
}
|
|
28
|
+
get url() {
|
|
29
|
+
return `http://${this.host}:${this.port}`;
|
|
30
|
+
}
|
|
31
|
+
static async start(deps, options = {}) {
|
|
32
|
+
const host = options.host ?? '127.0.0.1';
|
|
33
|
+
// The events route needs the instance that is being constructed, so it reads it through a holder.
|
|
34
|
+
const holder = {};
|
|
35
|
+
const router = buildRouter(deps, () => holder.instance);
|
|
36
|
+
const server = createServer((req, res) => {
|
|
37
|
+
void handle(req, res, router, deps).catch((e) => sendError(res, e));
|
|
38
|
+
});
|
|
39
|
+
// A control connection must never keep the process alive on its own; shutdown is explicit.
|
|
40
|
+
server.on('connection', (socket) => socket.unref?.());
|
|
41
|
+
await new Promise((resolve, reject) => {
|
|
42
|
+
server.once('error', reject);
|
|
43
|
+
server.listen(options.port ?? 0, host, () => {
|
|
44
|
+
server.off('error', reject);
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
const address = server.address();
|
|
49
|
+
const port = typeof address === 'object' && address ? address.port : 0;
|
|
50
|
+
const detach = deps.emitter.onAny((record) => holder.instance?.broadcast(record));
|
|
51
|
+
const instance = new ControlServer(server, deps, host, port, detach);
|
|
52
|
+
holder.instance = instance;
|
|
53
|
+
instance.heartbeat = setInterval(() => instance.ping(), SSE_HEARTBEAT_MS);
|
|
54
|
+
instance.heartbeat.unref?.();
|
|
55
|
+
return instance;
|
|
56
|
+
}
|
|
57
|
+
broadcast(record) {
|
|
58
|
+
const frame = sseFrame(this.deps.emitter.cursor(record.seq), record.name, record.payload);
|
|
59
|
+
for (const res of this.sseClients)
|
|
60
|
+
res.write(frame);
|
|
61
|
+
}
|
|
62
|
+
ping() {
|
|
63
|
+
for (const res of this.sseClients)
|
|
64
|
+
res.write(': ping\n\n');
|
|
65
|
+
}
|
|
66
|
+
/** Registered by the events route; kept private to the module through the holder. */
|
|
67
|
+
attachSse(res) {
|
|
68
|
+
this.sseClients.add(res);
|
|
69
|
+
res.on('close', () => this.sseClients.delete(res));
|
|
70
|
+
}
|
|
71
|
+
async close() {
|
|
72
|
+
if (this.heartbeat)
|
|
73
|
+
clearInterval(this.heartbeat);
|
|
74
|
+
this.detachEmitter();
|
|
75
|
+
for (const res of this.sseClients)
|
|
76
|
+
res.end();
|
|
77
|
+
this.sseClients.clear();
|
|
78
|
+
this.server.closeAllConnections?.();
|
|
79
|
+
await new Promise((resolve) => this.server.close(() => resolve()));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function handle(req, res, router, deps) {
|
|
83
|
+
if (!isLoopbackAddress(req.socket.remoteAddress)) {
|
|
84
|
+
return sendError(res, new AtomicCoreError('FORBIDDEN_HOST', 'The control API answers only on loopback.', req.socket.remoteAddress ?? ''));
|
|
85
|
+
}
|
|
86
|
+
if (!hostHeaderIsLoopback(req.headers.host)) {
|
|
87
|
+
return sendError(res, new AtomicCoreError('FORBIDDEN_HOST', 'Unexpected Host header on the control API.', req.headers.host ?? ''));
|
|
88
|
+
}
|
|
89
|
+
if (!controlTokenMatches(bearerToken(req.headers.authorization), deps.token)) {
|
|
90
|
+
return sendError(res, new AtomicCoreError('UNAUTHORIZED', 'A valid control token is required.'));
|
|
91
|
+
}
|
|
92
|
+
const path = pathOf(req);
|
|
93
|
+
const found = router.find(req.method ?? 'GET', path);
|
|
94
|
+
if (!found) {
|
|
95
|
+
return sendError(res, new AtomicCoreError('INVALID_ARGUMENT', `No such control route: ${path}`), 404);
|
|
96
|
+
}
|
|
97
|
+
if ('methodMismatch' in found) {
|
|
98
|
+
return sendError(res, new AtomicCoreError('INVALID_ARGUMENT', `${req.method} is not allowed on ${path}`), 405);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
await found.route.handler(req, res, found.match);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
// Reported here, where the route's pattern is known; the path itself may name a model or a file.
|
|
105
|
+
const status = statusForCode(toCoreError(error).code);
|
|
106
|
+
const route = `${found.route.method} ${found.route.pattern}`;
|
|
107
|
+
captureReport(deps.telemetry, internalErrorReport({ source: 'control_route', error, status, route }));
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/control/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The control API's dependency surface: what the owner injects into the control server, and the
|
|
3
|
+
* snapshot shape it answers with. Types and shared constants only.
|
|
4
|
+
*/
|
|
5
|
+
import type { CloudProviderInput, CloudProviderView, SubscriptionModel } from '../../cloud/index.js';
|
|
6
|
+
import type { ChatGptStatus } from '../../credentials/index.js';
|
|
7
|
+
import type { DeviceInfo, DiffusionBackendInstallRecord, DiffusionCancelResult, DiffusionConfig, DiffusionModelFile, DiffusionStatus, FinalizeBackendInstallArgs, GalleryFlags, GalleryImageItem, GalleryListOptions, GalleryPage, ImageCapabilities, ImageGenerateRequest, ImageJob, LoadDiffusionModelRequest, LoadedDiffusionModel, VideoCapabilities, VideoGalleryPage, VideoGenerateRequest, VideoJob, GalleryVideoItem, LocalApiServerState, LocalProviderId, RemoteAccessStatus, SessionInfo, UnloadResult } from '../../contracts/index.js';
|
|
8
|
+
import type { CoreEmitter } from '../../events/index.js';
|
|
9
|
+
import type { CtxIncreaseResult } from '../../runtime/llamacpp/runtime.js';
|
|
10
|
+
import type { GgufValidation, ModelCapabilities } from '../../models/index.js';
|
|
11
|
+
import type { EmbeddingResponse } from '../../models/index.js';
|
|
12
|
+
import type { ProxyConfig } from '../../downloads/index.js';
|
|
13
|
+
import type { HardwareOverrideStore } from '../../hardware/index.js';
|
|
14
|
+
import type { TelemetryControl } from '../../telemetry/index.js';
|
|
15
|
+
import type { InstallBackendResult, InstalledBackendPack, OptimalBackendCacheRecord } from '../../backend/index.js';
|
|
16
|
+
import type { OptimalState, OptimalUpdate } from '../../backend/index.js';
|
|
17
|
+
import type { ImportOptions, ImportResult, MigrationRecord, ProviderValues, UpdateResult } from '../../settings/index.js';
|
|
18
|
+
import type { ClientRegistry } from '../clients.js';
|
|
19
|
+
import type { ControlServer } from './server.js';
|
|
20
|
+
export declare const SSE_HEARTBEAT_MS = 15000;
|
|
21
|
+
export interface SessionSummary extends SessionInfo {
|
|
22
|
+
provider: LocalProviderId;
|
|
23
|
+
}
|
|
24
|
+
export interface PublicServerControl {
|
|
25
|
+
status: () => LocalApiServerState;
|
|
26
|
+
start: (options: {
|
|
27
|
+
host?: string;
|
|
28
|
+
port?: number;
|
|
29
|
+
prefix?: string;
|
|
30
|
+
apiKey?: string;
|
|
31
|
+
trustedHosts?: string[];
|
|
32
|
+
proxyTimeoutSecs?: number;
|
|
33
|
+
writeStateFile?: boolean;
|
|
34
|
+
fallbackPort?: boolean;
|
|
35
|
+
}) => Promise<LocalApiServerState>;
|
|
36
|
+
stop: () => Promise<LocalApiServerState>;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the app's API screen is watching the public server. Previews of prompts and replies are
|
|
39
|
+
* collected only while it is (ATO-113). Survives a server restart, like the app's own inspector.
|
|
40
|
+
*/
|
|
41
|
+
setInspecting: (enabled: boolean) => void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The settings surface the control API exposes. Narrower than `SettingsStore` on purpose: the app
|
|
45
|
+
* reads a provider's values, patches them with a revision, and migrates its own copy across — it has
|
|
46
|
+
* no business writing the migration bookkeeping directly.
|
|
47
|
+
*/
|
|
48
|
+
export interface SettingsControl {
|
|
49
|
+
get: (provider: LocalProviderId) => ProviderValues;
|
|
50
|
+
revision: () => number;
|
|
51
|
+
migration: (scope: string) => MigrationRecord | null;
|
|
52
|
+
update: (provider: LocalProviderId, patch: ProviderValues, options: {
|
|
53
|
+
expectedRevision?: number;
|
|
54
|
+
}) => Promise<UpdateResult>;
|
|
55
|
+
importProvider: (provider: LocalProviderId, values: ProviderValues, options: ImportOptions) => Promise<ImportResult>;
|
|
56
|
+
acknowledge: (scope: string, revision: number) => Promise<UpdateResult>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The backend surface the app drives. Narrow on purpose: the updater screen installs, removes and
|
|
60
|
+
* lists, and everything else it shows it computes from those three answers.
|
|
61
|
+
*/
|
|
62
|
+
export interface BackendControl {
|
|
63
|
+
list: (provider: string, currentVersionBackend?: string) => Promise<InstalledBackendPack[]>;
|
|
64
|
+
install: (provider: string, version: string, backend: string, options: {
|
|
65
|
+
taskId: string;
|
|
66
|
+
force?: boolean;
|
|
67
|
+
proxy?: ProxyConfig | null;
|
|
68
|
+
assetName?: string;
|
|
69
|
+
}) => Promise<InstallBackendResult>;
|
|
70
|
+
remove: (provider: string, version: string, backend: string) => Promise<boolean>;
|
|
71
|
+
cancel: (taskId: string) => boolean;
|
|
72
|
+
getOptimal: (provider: string) => Promise<OptimalState>;
|
|
73
|
+
setOptimal: (provider: string, record: OptimalBackendCacheRecord | null, expectedRevision: number) => Promise<OptimalUpdate>;
|
|
74
|
+
optimalSnapshot: () => Record<string, OptimalState>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The questions the app asks about models it has not loaded. Each answers rather than throws: the
|
|
78
|
+
* caller is usually deciding what to show in a list, and one unreadable file must not empty it.
|
|
79
|
+
*/
|
|
80
|
+
export interface ModelControl {
|
|
81
|
+
capabilities: (provider: string, modelId: string) => Promise<ModelCapabilities>;
|
|
82
|
+
validateGguf: (path: string) => Promise<GgufValidation>;
|
|
83
|
+
/** Devices the installed backend reports, which needs a backend to ask. */
|
|
84
|
+
devices: (provider: string) => Promise<DeviceInfo[]>;
|
|
85
|
+
embed: (provider: string, modelId: string, input: string[], ubatchSize: number) => Promise<EmbeddingResponse>;
|
|
86
|
+
}
|
|
87
|
+
/** Room left for a download. Answers for the data folder only; `null` when the platform cannot say. */
|
|
88
|
+
export interface DiskControl {
|
|
89
|
+
available: (path: unknown) => Promise<number | null>;
|
|
90
|
+
}
|
|
91
|
+
/** Reaching the public listener from outside this machine (stage 7c–7d). */
|
|
92
|
+
export interface RemoteAccessControl {
|
|
93
|
+
/** IPv4 literals a device on the network can dial, default-route address first. Display only. */
|
|
94
|
+
lanAddresses: () => Promise<string[]>;
|
|
95
|
+
status: () => RemoteAccessStatus;
|
|
96
|
+
/** Answers `starting` at once; throws a `REMOTE_ACCESS_*` refusal with the app's reason in `details`. */
|
|
97
|
+
start: () => RemoteAccessStatus;
|
|
98
|
+
/** Answers once the tunnel's process is gone. */
|
|
99
|
+
stop: () => Promise<RemoteAccessStatus>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Image generation (stage 7h): the app's twenty `DiffusionService` operations, one route each. The
|
|
103
|
+
* routes parse and validate the bodies; what arrives here is already typed.
|
|
104
|
+
*/
|
|
105
|
+
export interface DiffusionControl {
|
|
106
|
+
configure: (config: DiffusionConfig) => Promise<DiffusionStatus>;
|
|
107
|
+
getStatus: () => Promise<DiffusionStatus>;
|
|
108
|
+
setOutputDir: (path: string) => Promise<DiffusionStatus>;
|
|
109
|
+
finalizeBackendInstall: (args: FinalizeBackendInstallArgs) => Promise<DiffusionBackendInstallRecord>;
|
|
110
|
+
listInstalledBackends: () => Promise<DiffusionBackendInstallRecord[]>;
|
|
111
|
+
removeBackend: (dir: string) => Promise<void>;
|
|
112
|
+
listModelFiles: () => Promise<DiffusionModelFile[]>;
|
|
113
|
+
deleteModelFile: (path: string) => Promise<void>;
|
|
114
|
+
/** Answers once the server serves the model, which can take minutes. */
|
|
115
|
+
loadModel: (request: LoadDiffusionModelRequest) => Promise<LoadedDiffusionModel>;
|
|
116
|
+
unloadModel: () => Promise<void>;
|
|
117
|
+
getCapabilities: () => ImageCapabilities;
|
|
118
|
+
touchIdle: () => void;
|
|
119
|
+
generate: (request: ImageGenerateRequest) => Promise<{
|
|
120
|
+
jobId: string;
|
|
121
|
+
}>;
|
|
122
|
+
getJob: (jobId: string) => ImageJob | null;
|
|
123
|
+
cancelJob: (jobId: string) => Promise<DiffusionCancelResult>;
|
|
124
|
+
listGallery: (options: GalleryListOptions) => Promise<GalleryPage>;
|
|
125
|
+
getGalleryItem: (id: string) => Promise<GalleryImageItem | null>;
|
|
126
|
+
deleteGalleryItems: (ids: string[]) => Promise<void>;
|
|
127
|
+
setGalleryFlags: (id: string, flags: GalleryFlags) => Promise<GalleryImageItem>;
|
|
128
|
+
exportGalleryItem: (id: string, targetPath: string) => Promise<void>;
|
|
129
|
+
getVideoCapabilities: () => VideoCapabilities;
|
|
130
|
+
generateVideo: (request: VideoGenerateRequest) => Promise<{
|
|
131
|
+
jobId: string;
|
|
132
|
+
}>;
|
|
133
|
+
getVideoJob: (jobId: string) => VideoJob | null;
|
|
134
|
+
cancelVideoJob: (jobId: string) => Promise<DiffusionCancelResult>;
|
|
135
|
+
listVideoGallery: (options: GalleryListOptions) => Promise<VideoGalleryPage>;
|
|
136
|
+
getVideoGalleryItem: (id: string) => Promise<GalleryVideoItem | null>;
|
|
137
|
+
deleteVideoGalleryItems: (ids: string[]) => Promise<void>;
|
|
138
|
+
setVideoGalleryFlags: (id: string, flags: GalleryFlags) => Promise<GalleryVideoItem>;
|
|
139
|
+
exportVideoGalleryItem: (id: string, targetPath: string) => Promise<void>;
|
|
140
|
+
/** The poster the app rendered from the clip's first frame; the bare base64 of a PNG. */
|
|
141
|
+
setVideoPoster: (id: string, pngBase64: string) => Promise<GalleryVideoItem>;
|
|
142
|
+
}
|
|
143
|
+
/** Engines another process owns, registered so the public server can route to them (stage 4d). */
|
|
144
|
+
export interface ExternalSessionControl {
|
|
145
|
+
publish: (owner: string, generation: number, sessions: unknown) => {
|
|
146
|
+
generation: number;
|
|
147
|
+
sessions: number;
|
|
148
|
+
};
|
|
149
|
+
heartbeat: (owner: string, generation: number) => {
|
|
150
|
+
alive: boolean;
|
|
151
|
+
};
|
|
152
|
+
unregister: (owner: string, generation?: number) => boolean;
|
|
153
|
+
list: () => unknown[];
|
|
154
|
+
answerCtx: (owner: string, requestId: string, outcome: unknown) => boolean;
|
|
155
|
+
}
|
|
156
|
+
/** Cloud providers the public server routes to (PLAN.md §4, stage 4c). Keys are never read back. */
|
|
157
|
+
export interface CloudControl {
|
|
158
|
+
list: () => CloudProviderView[];
|
|
159
|
+
upsert: (input: CloudProviderInput) => Promise<CloudProviderView>;
|
|
160
|
+
remove: (provider: string) => Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
/** The ChatGPT subscription session. Nothing here ever returns a token. */
|
|
163
|
+
export interface ChatGptControl {
|
|
164
|
+
status: () => Promise<ChatGptStatus>;
|
|
165
|
+
reload?: () => Promise<ChatGptStatus>;
|
|
166
|
+
startLogin: () => Promise<{
|
|
167
|
+
authorize_url: string;
|
|
168
|
+
}>;
|
|
169
|
+
waitLogin: () => Promise<ChatGptStatus>;
|
|
170
|
+
cancelLogin: () => void;
|
|
171
|
+
logout: () => Promise<ChatGptStatus>;
|
|
172
|
+
models: () => Promise<SubscriptionModel[]>;
|
|
173
|
+
}
|
|
174
|
+
export interface ControlServerDeps {
|
|
175
|
+
token: string;
|
|
176
|
+
instanceId: string;
|
|
177
|
+
version: string;
|
|
178
|
+
ownerScope?: 'app' | 'cli';
|
|
179
|
+
dataFolder: string;
|
|
180
|
+
emitter: CoreEmitter;
|
|
181
|
+
clients: ClientRegistry;
|
|
182
|
+
sessions: () => SessionSummary[];
|
|
183
|
+
loadModel: (provider: string, modelId: string, body: Record<string, unknown>) => Promise<SessionInfo | {
|
|
184
|
+
session: SessionInfo;
|
|
185
|
+
created: boolean;
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* Cancel a load that has not answered yet. Answers rather than throws when there is nothing to
|
|
189
|
+
* cancel: the app retries while its load request is still travelling, and unloads once it lands.
|
|
190
|
+
*/
|
|
191
|
+
cancelModelLoad: (provider: string, modelId: string) => boolean;
|
|
192
|
+
unloadModel: (provider: string, modelId: string) => Promise<UnloadResult>;
|
|
193
|
+
/**
|
|
194
|
+
* Reload a model one context step larger because a request overflowed. Answers rather than
|
|
195
|
+
* throws when it declines: "the ladder is at its top" is an outcome the caller acts on, not an
|
|
196
|
+
* error, and the proxy has to tell it apart from a failed reload.
|
|
197
|
+
*/
|
|
198
|
+
increaseCtx: (provider: string, modelId: string, reason?: string) => Promise<CtxIncreaseResult>;
|
|
199
|
+
/**
|
|
200
|
+
* Restart a model at the context it already has, because its engine is poisoned (a compute
|
|
201
|
+
* failure). The app's extension asks for this when the core owns the runtime but the app's own
|
|
202
|
+
* proxy saw the failure.
|
|
203
|
+
*/
|
|
204
|
+
recreateSession: (provider: string, modelId: string) => Promise<{
|
|
205
|
+
ok: boolean;
|
|
206
|
+
reason?: string;
|
|
207
|
+
}>;
|
|
208
|
+
publicServer: PublicServerControl;
|
|
209
|
+
/** The settings store, for the routes that read and migrate provider settings (PLAN.md §3.4). */
|
|
210
|
+
settings: SettingsControl;
|
|
211
|
+
/** Hardware facts the app injects, which outrank the core's own probe (PLAN.md §2 decision 10). */
|
|
212
|
+
hardware: HardwareOverrideStore;
|
|
213
|
+
/** Installing and removing llama.cpp backends (PLAN.md §4, stage 3c). */
|
|
214
|
+
backends: BackendControl;
|
|
215
|
+
/** Free space inside the data folder, which the app asks before a download (stage 7b). */
|
|
216
|
+
disk: DiskControl;
|
|
217
|
+
remoteAccess: RemoteAccessControl;
|
|
218
|
+
diffusion: DiffusionControl;
|
|
219
|
+
/** What a model is and can do, without loading it (PLAN.md §4, stage 3d). */
|
|
220
|
+
models: ModelControl;
|
|
221
|
+
/**
|
|
222
|
+
* Whether Apple's on-device model can run here: the server's own `--check` token (`available`,
|
|
223
|
+
* `notEligible`, `appleIntelligenceNotEnabled`, `modelNotReady`, `unavailable`, `binaryNotFound`).
|
|
224
|
+
* Answers `unavailable` on a platform without the runtime.
|
|
225
|
+
*/
|
|
226
|
+
foundationModelsAvailability?: (force: boolean) => Promise<string>;
|
|
227
|
+
cloud: CloudControl;
|
|
228
|
+
chatgpt: ChatGptControl;
|
|
229
|
+
externalSessions: ExternalSessionControl;
|
|
230
|
+
/** Stop the whole core. The server has already answered by the time this runs. */
|
|
231
|
+
shutdown: (options: {
|
|
232
|
+
force: boolean;
|
|
233
|
+
requestedBy?: string | undefined;
|
|
234
|
+
}) => Promise<void>;
|
|
235
|
+
/**
|
|
236
|
+
* Error reporting: where a route that failed on our side is reported, and the app's consent,
|
|
237
|
+
* user and tags behind `/telemetry`. Absent in a CLI owner, which reports nothing.
|
|
238
|
+
*/
|
|
239
|
+
telemetry?: TelemetryControl;
|
|
240
|
+
startedAt?: number;
|
|
241
|
+
now?: () => number;
|
|
242
|
+
}
|
|
243
|
+
export interface ControlSnapshot {
|
|
244
|
+
instance_id: string;
|
|
245
|
+
owner_scope?: 'app' | 'cli' | undefined;
|
|
246
|
+
protocol: number;
|
|
247
|
+
version: string;
|
|
248
|
+
pid: number;
|
|
249
|
+
data_folder: string;
|
|
250
|
+
started_at: number;
|
|
251
|
+
uptime_ms: number;
|
|
252
|
+
cursor: string;
|
|
253
|
+
sessions: SessionSummary[];
|
|
254
|
+
server: LocalApiServerState;
|
|
255
|
+
clients: ReturnType<ClientRegistry['list']>;
|
|
256
|
+
downloads: unknown[];
|
|
257
|
+
optimal_backends: Record<string, OptimalState>;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* What every route family shares, built once per router: the prefixed path helper, the clock the
|
|
261
|
+
* uptime is measured with, the snapshot builder, and the server instance the events route attaches to.
|
|
262
|
+
* Internal to this module; not re-exported.
|
|
263
|
+
*/
|
|
264
|
+
export interface ControlRouteContext {
|
|
265
|
+
p: (suffix: string) => string;
|
|
266
|
+
now: () => number;
|
|
267
|
+
startedAt: number;
|
|
268
|
+
snapshot: () => ControlSnapshot;
|
|
269
|
+
/** The server being constructed; `undefined` until `ControlServer.start` has built it. */
|
|
270
|
+
self: () => ControlServer | undefined;
|
|
271
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/control/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuDH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 type { IncomingMessage, ServerResponse } from 'node:http';
|
|
10
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
11
|
+
import type { ErrorCode } from '../contracts/index.js';
|
|
12
|
+
export declare const MAX_JSON_BODY_BYTES: number;
|
|
13
|
+
export interface RouteMatch {
|
|
14
|
+
params: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export type Handler = (req: IncomingMessage, res: ServerResponse, match: RouteMatch) => void | Promise<void>;
|
|
17
|
+
export interface Route {
|
|
18
|
+
method: string;
|
|
19
|
+
/** `/atomic/v1/models/:provider/*rest/load` — `:name` matches one segment, `*name` the rest. */
|
|
20
|
+
pattern: string;
|
|
21
|
+
handler: Handler;
|
|
22
|
+
}
|
|
23
|
+
export declare class Router {
|
|
24
|
+
private readonly routes;
|
|
25
|
+
add(method: string, pattern: string, handler: Handler): this;
|
|
26
|
+
get(pattern: string, handler: Handler): this;
|
|
27
|
+
post(pattern: string, handler: Handler): this;
|
|
28
|
+
put(pattern: string, handler: Handler): this;
|
|
29
|
+
patch(pattern: string, handler: Handler): this;
|
|
30
|
+
delete(pattern: string, handler: Handler): this;
|
|
31
|
+
/** The matching route, or `undefined`; `methodMismatch` distinguishes 404 from 405. */
|
|
32
|
+
find(method: string, path: string): {
|
|
33
|
+
route: Route;
|
|
34
|
+
match: RouteMatch;
|
|
35
|
+
} | {
|
|
36
|
+
methodMismatch: true;
|
|
37
|
+
} | undefined;
|
|
38
|
+
}
|
|
39
|
+
export declare function sendJson(res: ServerResponse, status: number, body: unknown): void;
|
|
40
|
+
/** HTTP status for a core error code. Anything unmapped is a 500: an unknown failure is not the caller's fault. */
|
|
41
|
+
export declare function statusForCode(code: ErrorCode): number;
|
|
42
|
+
export declare function toCoreError(error: unknown): AtomicCoreError;
|
|
43
|
+
export declare function sendError(res: ServerResponse, error: unknown, status?: number): void;
|
|
44
|
+
/**
|
|
45
|
+
* Past the limit the rest of the body is read and discarded, up to this many times the limit, before
|
|
46
|
+
* the refusal is written: Bun's `node:http` (1.3.10) delivers an answer written while the request
|
|
47
|
+
* body is still arriving as an empty 200, Node delivers the refusal either way (ADR
|
|
48
|
+
* 2026-09-22-detect-a-client-that-hangs-up-before-the-answer-under-bun). Beyond the ceiling the
|
|
49
|
+
* connection is dropped instead of read on.
|
|
50
|
+
*/
|
|
51
|
+
export declare const OVERSIZE_DRAIN_FACTOR = 8;
|
|
52
|
+
export declare function readJsonBody<T = unknown>(req: IncomingMessage, limit?: number): Promise<T>;
|
|
53
|
+
/** Peer address check: the control listener answers only to processes on this machine. */
|
|
54
|
+
export declare function isLoopbackAddress(address: string | undefined | null): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Host-header check, which is what stops a browser page from posting to the control port through
|
|
57
|
+
* DNS rebinding: the name must itself be loopback, not merely resolve to it today.
|
|
58
|
+
*/
|
|
59
|
+
export declare function hostHeaderIsLoopback(host: string | undefined | null): boolean;
|
|
60
|
+
/** `?name=value` for a request path. */
|
|
61
|
+
export declare function queryOf(req: IncomingMessage): URLSearchParams;
|
|
62
|
+
export declare function pathOf(req: IncomingMessage): string;
|