@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,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The lifecycle of the public `/v1` listener owned by `AtomicCore`: start, stop and state, the option
|
|
3
|
+
* normalization that makes an identical start idempotent, and the published state files.
|
|
4
|
+
*
|
|
5
|
+
* It is a separate, optional listener whose stop must never take control down with it.
|
|
6
|
+
*
|
|
7
|
+
* It also keeps the remote-access tunnel honest about it: a public URL must never point at a port
|
|
8
|
+
* that has stopped, or at whatever binds that port next. So a stop ends the tunnel *first*, a
|
|
9
|
+
* genuine start ends any tunnel that survived (it pointed at the previous port), and a repeated
|
|
10
|
+
* start that changes nothing leaves the tunnel alone.
|
|
11
|
+
*/
|
|
12
|
+
import { writeFile } from 'node:fs/promises';
|
|
13
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
14
|
+
import { DEFAULT_PROXY_TIMEOUT_SECS, DEFAULT_PUBLIC_HOST, DEFAULT_PUBLIC_PORT, DEFAULT_PUBLIC_PREFIX, PublicServer, markServerRunning, markServerStopped, normalizePrefix, stoppedState, } from '../server/index.js';
|
|
15
|
+
import { dialOrigin } from '../remote-access/index.js';
|
|
16
|
+
/** Owns the public listener and serializes its start/stop transitions. */
|
|
17
|
+
export class PublicServerLifecycle {
|
|
18
|
+
deps;
|
|
19
|
+
publicServer;
|
|
20
|
+
lastPublicState = stoppedState();
|
|
21
|
+
publicConfig;
|
|
22
|
+
publicTransition = Promise.resolve();
|
|
23
|
+
stopping = false;
|
|
24
|
+
constructor(deps) {
|
|
25
|
+
this.deps = deps;
|
|
26
|
+
}
|
|
27
|
+
state() {
|
|
28
|
+
return this.publicServer ? this.publicServer.state() : { ...this.lastPublicState };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Where a tunnel would point: the *bound* port (a fallback can change it) and a host that really
|
|
32
|
+
* listens. `undefined` while there is no listener — and already while one is stopping, so nothing
|
|
33
|
+
* new is pointed at a port that is about to go.
|
|
34
|
+
*/
|
|
35
|
+
endpoint() {
|
|
36
|
+
if (!this.publicServer || !this.publicConfig || this.stopping)
|
|
37
|
+
return undefined;
|
|
38
|
+
return {
|
|
39
|
+
origin: dialOrigin(this.publicServer.host, this.publicServer.port),
|
|
40
|
+
hasApiKey: this.publicConfig.apiKey !== '',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Start the public listener; an identical start is idempotent, an incompatible one is a conflict. */
|
|
44
|
+
start(options) {
|
|
45
|
+
return this.withPublicTransition(async () => {
|
|
46
|
+
this.deps.assertRunning();
|
|
47
|
+
const requested = normalizePublicOptions(options);
|
|
48
|
+
if (this.publicServer && this.publicConfig) {
|
|
49
|
+
if (publicOptionsCompatible(this.publicConfig, requested, options.port))
|
|
50
|
+
return this.publicServer.state();
|
|
51
|
+
throw new AtomicCoreError('CORE_ALREADY_RUNNING', 'The public API server is already running with a different configuration.', `${this.publicServer.host}:${this.publicServer.port}${this.publicServer.prefix}`);
|
|
52
|
+
}
|
|
53
|
+
const server = await PublicServer.start(this.deps.serverDeps(), options).catch((e) => {
|
|
54
|
+
const error = e;
|
|
55
|
+
this.deps.events.emit('server:bind-failed', { port: options.port ?? 0, error: error.message });
|
|
56
|
+
throw error;
|
|
57
|
+
});
|
|
58
|
+
// A tunnel that survived until here pointed at the previous listener's port.
|
|
59
|
+
await this.deps.remoteAccess?.stop().catch(() => { });
|
|
60
|
+
this.publicServer = server;
|
|
61
|
+
this.publicConfig = { ...requested, port: server.port, requestedPort: requested.port };
|
|
62
|
+
this.lastPublicState = server.state();
|
|
63
|
+
await this.publishServerState(server.state());
|
|
64
|
+
if (requested.writeStateFile) {
|
|
65
|
+
await markServerRunning(this.deps.layout.serverStateFile, {
|
|
66
|
+
host: server.host,
|
|
67
|
+
port: server.port,
|
|
68
|
+
prefix: server.prefix,
|
|
69
|
+
requiresApiKey: requested.apiKey !== '',
|
|
70
|
+
}, (message) => this.deps.log('warn', message));
|
|
71
|
+
}
|
|
72
|
+
this.deps.events.emit('server:started', { host: server.host, port: server.port });
|
|
73
|
+
this.deps.log('info', `public API on ${server.url}`);
|
|
74
|
+
this.deps.remoteAccess?.announce();
|
|
75
|
+
return server.state();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** Stop the listener after any transition in flight; a stopped listener reports its last state. */
|
|
79
|
+
stop() {
|
|
80
|
+
return this.withPublicTransition(() => this.stopPublicServerNow());
|
|
81
|
+
}
|
|
82
|
+
async stopPublicServerNow() {
|
|
83
|
+
if (!this.publicServer)
|
|
84
|
+
return this.state();
|
|
85
|
+
const wroteStateFile = this.publicConfig?.writeStateFile === true;
|
|
86
|
+
// The tunnel first: otherwise its public URL points at a dead port, or at whatever binds it next.
|
|
87
|
+
this.stopping = true;
|
|
88
|
+
try {
|
|
89
|
+
await this.deps.remoteAccess?.stop().catch(() => { });
|
|
90
|
+
this.lastPublicState = stoppedState(this.publicServer.state());
|
|
91
|
+
await this.publicServer.close();
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
this.stopping = false;
|
|
95
|
+
}
|
|
96
|
+
this.publicServer = undefined;
|
|
97
|
+
this.publicConfig = undefined;
|
|
98
|
+
await this.publishServerState(this.lastPublicState);
|
|
99
|
+
if (wroteStateFile)
|
|
100
|
+
await markServerStopped(this.deps.layout.serverStateFile, (message) => this.deps.log('warn', message));
|
|
101
|
+
this.deps.events.emit('server:stopped', {});
|
|
102
|
+
this.deps.remoteAccess?.announce();
|
|
103
|
+
return { ...this.lastPublicState };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Publish where the public API is, for clients that have no control token — `server status` and
|
|
107
|
+
* the app. This is the core's own copy; the app's `<data>/local-api-server.json` is written only
|
|
108
|
+
* when the app handed the server over (`writeStateFile`), so there is always one writer of it.
|
|
109
|
+
*/
|
|
110
|
+
async publishServerState(state) {
|
|
111
|
+
await writeFile(this.deps.layout.core.publicServerState, `${JSON.stringify(state, null, 2)}\n`).catch((e) => this.deps.log('warn', `could not publish the public server state: ${e.message}`));
|
|
112
|
+
}
|
|
113
|
+
withPublicTransition(operation) {
|
|
114
|
+
const result = this.publicTransition.then(operation, operation);
|
|
115
|
+
this.publicTransition = result.then(() => { }, () => { });
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function normalizePublicOptions(options) {
|
|
120
|
+
return {
|
|
121
|
+
host: options.host ?? DEFAULT_PUBLIC_HOST,
|
|
122
|
+
port: options.port ?? DEFAULT_PUBLIC_PORT,
|
|
123
|
+
prefix: normalizePrefix(options.prefix ?? DEFAULT_PUBLIC_PREFIX),
|
|
124
|
+
apiKey: options.apiKey ?? '',
|
|
125
|
+
trustedHosts: [...(options.trustedHosts ?? [])].sort(),
|
|
126
|
+
proxyTimeoutSecs: options.proxyTimeoutSecs ?? DEFAULT_PROXY_TIMEOUT_SECS,
|
|
127
|
+
writeStateFile: options.writeStateFile ?? false,
|
|
128
|
+
fallbackPort: options.fallbackPort ?? false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function publicOptionsCompatible(current, requested, requestedPort) {
|
|
132
|
+
// A server that fell back to a free port still answers a repeat of the request that put it there.
|
|
133
|
+
const portMatches = requestedPort === 0 || current.port === requested.port || current.requestedPort === requested.port;
|
|
134
|
+
return (portMatches &&
|
|
135
|
+
current.host === requested.host &&
|
|
136
|
+
current.prefix === requested.prefix &&
|
|
137
|
+
current.apiKey === requested.apiKey &&
|
|
138
|
+
current.proxyTimeoutSecs === requested.proxyTimeoutSecs &&
|
|
139
|
+
current.writeStateFile === requested.writeStateFile &&
|
|
140
|
+
current.trustedHosts.length === requested.trustedHosts.length &&
|
|
141
|
+
current.trustedHosts.every((host, index) => host === requested.trustedHosts[index]));
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=public-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-server.js","sourceRoot":"","sources":["../../src/core/public-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAIvD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA8CtD,0EAA0E;AAC1E,MAAM,OAAO,qBAAqB;IAOH;IANrB,YAAY,CAA0B;IACtC,eAAe,GAAwB,YAAY,EAAE,CAAA;IACrD,YAAY,CAA2C;IACvD,gBAAgB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IACnD,QAAQ,GAAG,KAAK,CAAA;IAExB,YAA6B,IAA+B;QAA/B,SAAI,GAAJ,IAAI,CAA2B;IAAG,CAAC;IAEhE,KAAK;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;IACpF,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/E,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAClE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,EAAE;SAC3C,CAAA;IACH,CAAC;IAED,sGAAsG;IACtG,KAAK,CAAC,OAAiC;QACrC,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;YACzB,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;YACjD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3C,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;oBACrE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;gBAClC,MAAM,IAAI,eAAe,CACvB,sBAAsB,EACtB,0EAA0E,EAC1E,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CACjF,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBAC5F,MAAM,KAAK,GAAG,CAAoB,CAAA;gBAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC9F,MAAM,KAAK,CAAA;YACb,CAAC,CAAC,CAAA;YACF,6EAA6E;YAC7E,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;YAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,CAAA;YACtF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;YACrC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YAC7C,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;gBAC7B,MAAM,iBAAiB,CACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAChC;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,cAAc,EAAE,SAAS,CAAC,MAAM,KAAK,EAAE;iBACxC,EACD,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5C,CAAA;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;YACpD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAA;YAClC,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,mGAAmG;IACnG,IAAI;QACF,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACpE,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,KAAK,IAAI,CAAA;QACjE,kGAAkG;QAClG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;YAC9D,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACnD,IAAI,cAAc;YAChB,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QACxG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAA;QAClC,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,KAA0B;QACzD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CACnG,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,8CAA8C,CAAC,CAAC,OAAO,EAAE,CAAC,CAC/F,CAAA;IACH,CAAC;IAEO,oBAAoB,CAAI,SAA2B;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CACjC,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,sBAAsB,CAAC,OAAiC;IAC/D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,mBAAmB;QACzC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,mBAAmB;QACzC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC;QAChE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,YAAY,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;QACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,0BAA0B;QACxE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;QAC/C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;KAC5C,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAsC,EACtC,SAAwC,EACxC,aAAiC;IAEjC,kGAAkG;IAClG,MAAM,WAAW,GACf,aAAa,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,CAAA;IACpG,OAAO,CACL,WAAW;QACX,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;QAC/B,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACnC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACnC,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,gBAAgB;QACvD,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc;QACnD,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,YAAY,CAAC,MAAM;QAC7D,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACpF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProcessJournal } from '../lock/index.js';
|
|
2
|
+
import type { CoreLogger } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Terminate backend processes a previous owner left running. Only processes whose recorded start
|
|
5
|
+
* identity still matches are touched; anything unprovable is left alone and logged.
|
|
6
|
+
*/
|
|
7
|
+
export declare function reapOrphans(journal: ProcessJournal, instanceId: string, log: CoreLogger): Promise<void>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isProcessAlive, verifyProcessIdentity } from '../lock/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Terminate backend processes a previous owner left running. Only processes whose recorded start
|
|
4
|
+
* identity still matches are touched; anything unprovable is left alone and logged.
|
|
5
|
+
*/
|
|
6
|
+
export async function reapOrphans(journal, instanceId, log) {
|
|
7
|
+
const scan = await journal.scanOrphans(instanceId, new Set());
|
|
8
|
+
for (const record of scan.confirmed) {
|
|
9
|
+
log('warn', `stopping orphaned backend pid ${record.pid} (${record.model_id}) from a previous core`);
|
|
10
|
+
await terminate(record);
|
|
11
|
+
}
|
|
12
|
+
await journal.forget([...scan.confirmed, ...scan.gone]);
|
|
13
|
+
for (const skipped of scan.skipped) {
|
|
14
|
+
if (skipped.reason === 'identity-unproven')
|
|
15
|
+
log('warn', `leaving pid ${skipped.record.pid} alone: cannot prove it is still our backend`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function terminate(record) {
|
|
19
|
+
const verdict = await verifyProcessIdentity(record.pid, record.process_start_id);
|
|
20
|
+
if (verdict !== 'match')
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
process.kill(record.pid, 'SIGTERM');
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const deadline = Date.now() + 5000;
|
|
29
|
+
while (isProcessAlive(record.pid) && Date.now() < deadline)
|
|
30
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
31
|
+
if (isProcessAlive(record.pid)) {
|
|
32
|
+
try {
|
|
33
|
+
process.kill(record.pid, 'SIGKILL');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
/* already gone */
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=reap-orphans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reap-orphans.js","sourceRoot":"","sources":["../../src/core/reap-orphans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAIxE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,UAAkB,EAClB,GAAe;IAEf,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;IAC7D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,EAAE,iCAAiC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,wBAAwB,CAAC,CAAA;QACpG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACvD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB;YACxC,GAAG,CAAC,MAAM,EAAE,eAAe,OAAO,CAAC,MAAM,CAAC,GAAG,8CAA8C,CAAC,CAAA;IAChG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAA0B;IACjD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAChF,IAAI,OAAO,KAAK,OAAO;QAAE,OAAM;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;IAClC,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;QAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACvG,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local model sessions as `AtomicCore` owns them: the cross-process model claim taken before a load,
|
|
3
|
+
* per-model serialization of load/unload, cancelling a load that has not answered yet, and how the
|
|
4
|
+
* public server finds a session — one this core runs or one the desktop app registered as external.
|
|
5
|
+
*/
|
|
6
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
7
|
+
import type { LocalProviderId, SessionInfo, UnloadResult } from '../contracts/index.js';
|
|
8
|
+
import type { DataLayout } from '../config/index.js';
|
|
9
|
+
import type { CtxIncreaseResult, ExternalSessions, LocalRuntime, RecreateResult } from '../runtime/index.js';
|
|
10
|
+
import type { CtxIncreaseOutcome, LocalTarget, SessionSummary } from '../server/index.js';
|
|
11
|
+
import type { LocalProvider } from '../router/index.js';
|
|
12
|
+
import type { CoreLoadOptions } from './types.js';
|
|
13
|
+
export interface LocalSessionsDeps {
|
|
14
|
+
layout: DataLayout;
|
|
15
|
+
instanceId: string;
|
|
16
|
+
runtimes: Map<LocalProviderId, LocalRuntime>;
|
|
17
|
+
externalSessions: ExternalSessions;
|
|
18
|
+
/** The runtime for a provider; throws `PROVIDER_NOT_FOUND` for one this core does not offer. */
|
|
19
|
+
runtime: (provider: LocalProviderId) => LocalRuntime;
|
|
20
|
+
/** Throws once the owning core is stopping; checked again inside the serialized transition. */
|
|
21
|
+
assertRunning: () => void;
|
|
22
|
+
increaseCtx: (provider: LocalProviderId, modelId: string, reason?: string) => Promise<CtxIncreaseResult>;
|
|
23
|
+
recreateSession: (provider: LocalProviderId, modelId: string) => Promise<RecreateResult>;
|
|
24
|
+
}
|
|
25
|
+
/** Model claims and per-model transitions for the sessions this core loads. */
|
|
26
|
+
export declare class LocalSessions {
|
|
27
|
+
private readonly deps;
|
|
28
|
+
private readonly modelClaims;
|
|
29
|
+
private readonly claimingModels;
|
|
30
|
+
private readonly modelTransitions;
|
|
31
|
+
/** One entry per model for every acquire still pending, so a cancel reaches the one that is loading. */
|
|
32
|
+
private readonly loadCancels;
|
|
33
|
+
constructor(deps: LocalSessionsDeps);
|
|
34
|
+
/** Load or attach without making an attaching client accidentally own the shared session. */
|
|
35
|
+
acquire(provider: LocalProviderId, modelId: string, options: CoreLoadOptions): Promise<{
|
|
36
|
+
session: SessionInfo;
|
|
37
|
+
created: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Cancel the load in flight for a model. Deliberately outside `withModelTransition`: queued there
|
|
41
|
+
* it would wait for the very load it is meant to stop. `false` means nothing is pending — the load
|
|
42
|
+
* has not reached the core yet or has already answered, and the caller unloads instead.
|
|
43
|
+
*/
|
|
44
|
+
cancelLoad(provider: LocalProviderId, modelId: string): boolean;
|
|
45
|
+
private acquireNow;
|
|
46
|
+
unload(provider: LocalProviderId, modelId: string): Promise<UnloadResult>;
|
|
47
|
+
/** Wait for every model transition in flight, then release every claim this core still holds. */
|
|
48
|
+
releaseAll(): Promise<void>;
|
|
49
|
+
localTarget(provider: LocalProvider, modelId: string): LocalTarget | undefined;
|
|
50
|
+
/** Every session the public server can route to, owned here or registered as external. */
|
|
51
|
+
listLocalTargets(): LocalTarget[];
|
|
52
|
+
/**
|
|
53
|
+
* What the public server asks of a runtime when a request fails for lack of context or on a
|
|
54
|
+
* poisoned engine. Recovery reloads at the same context; everything else grows it one step.
|
|
55
|
+
*/
|
|
56
|
+
serverCtxRequest(provider: LocalProvider, modelId: string, trigger: string): Promise<CtxIncreaseOutcome>;
|
|
57
|
+
private withModelTransition;
|
|
58
|
+
}
|
|
59
|
+
export declare function sessionsOf(runtimes: Map<LocalProviderId, LocalRuntime>): SessionSummary[];
|
|
60
|
+
export declare function unknownProvider(provider: string, available: Iterable<string>): AtomicCoreError;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local model sessions as `AtomicCore` owns them: the cross-process model claim taken before a load,
|
|
3
|
+
* per-model serialization of load/unload, cancelling a load that has not answered yet, and how the
|
|
4
|
+
* public server finds a session — one this core runs or one the desktop app registered as external.
|
|
5
|
+
*/
|
|
6
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
7
|
+
import { assertNotLoadedByLegacy, acquireModelClaim } from '../lock/index.js';
|
|
8
|
+
import { LoadCancelRegistry, loadCancelledError, throwIfLoadCancelled } from '../runtime/index.js';
|
|
9
|
+
import { LOCAL_SEARCH_ORDER, modelIdsMatch } from '../router/index.js';
|
|
10
|
+
/** Model claims and per-model transitions for the sessions this core loads. */
|
|
11
|
+
export class LocalSessions {
|
|
12
|
+
deps;
|
|
13
|
+
modelClaims = new Map();
|
|
14
|
+
claimingModels = new Map();
|
|
15
|
+
modelTransitions = new Map();
|
|
16
|
+
/** One entry per model for every acquire still pending, so a cancel reaches the one that is loading. */
|
|
17
|
+
loadCancels = new LoadCancelRegistry();
|
|
18
|
+
constructor(deps) {
|
|
19
|
+
this.deps = deps;
|
|
20
|
+
}
|
|
21
|
+
/** Load or attach without making an attaching client accidentally own the shared session. */
|
|
22
|
+
acquire(provider, modelId, options) {
|
|
23
|
+
const key = `${provider}\0${modelId}`;
|
|
24
|
+
// Registered before the transition queue, not inside it: an acquire waiting its turn behind
|
|
25
|
+
// another one of the same model has to be reachable by a cancel as well.
|
|
26
|
+
const cancel = this.loadCancels.register(key);
|
|
27
|
+
return this.withModelTransition(key, () => this.acquireNow(provider, modelId, options, cancel)).finally(() => cancel.release());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Cancel the load in flight for a model. Deliberately outside `withModelTransition`: queued there
|
|
31
|
+
* it would wait for the very load it is meant to stop. `false` means nothing is pending — the load
|
|
32
|
+
* has not reached the core yet or has already answered, and the caller unloads instead.
|
|
33
|
+
*/
|
|
34
|
+
cancelLoad(provider, modelId) {
|
|
35
|
+
this.deps.runtime(provider);
|
|
36
|
+
return this.loadCancels.cancel(`${provider}\0${modelId}`);
|
|
37
|
+
}
|
|
38
|
+
async acquireNow(provider, modelId, options, cancel) {
|
|
39
|
+
this.deps.assertRunning();
|
|
40
|
+
throwIfLoadCancelled(cancel.signal);
|
|
41
|
+
// The desktop app can still own this data folder until it becomes a core client. A second copy
|
|
42
|
+
// of a model it already holds would double the VRAM and race for the GPU, so refuse before
|
|
43
|
+
// anything is spawned, and say where the app is already serving it.
|
|
44
|
+
const runtime = this.deps.runtime(provider);
|
|
45
|
+
const key = `${provider}\0${modelId}`;
|
|
46
|
+
let claim = this.modelClaims.get(key);
|
|
47
|
+
if (!claim) {
|
|
48
|
+
let pending = this.claimingModels.get(key);
|
|
49
|
+
if (!pending) {
|
|
50
|
+
pending = acquireModelClaim(this.deps.layout, provider, modelId, this.deps.instanceId);
|
|
51
|
+
this.claimingModels.set(key, pending);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
claim = await pending;
|
|
55
|
+
this.modelClaims.set(key, claim);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
if (this.claimingModels.get(key) === pending)
|
|
59
|
+
this.claimingModels.delete(key);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const created = !runtime.findSession(modelId) && !runtime.isLoading(modelId);
|
|
63
|
+
try {
|
|
64
|
+
throwIfLoadCancelled(cancel.signal);
|
|
65
|
+
await assertNotLoadedByLegacy(this.deps.layout, modelId);
|
|
66
|
+
// `options` came off the wire; the signal is the core's own and overrides whatever it carried.
|
|
67
|
+
const session = await runtime.load(modelId, { ...options, signal: cancel.signal });
|
|
68
|
+
await claim.update('ready');
|
|
69
|
+
if (created && cancel.signal.aborted) {
|
|
70
|
+
// A cancel that raced readiness still wins while the answer is undecided. Unload through the
|
|
71
|
+
// runtime: `this.unload` would queue behind this very transition.
|
|
72
|
+
await runtime.unload(modelId);
|
|
73
|
+
throw loadCancelledError();
|
|
74
|
+
}
|
|
75
|
+
// The answer is decided: from here a cancel finds nothing pending and the caller unloads.
|
|
76
|
+
cancel.release();
|
|
77
|
+
return { session, created };
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
// Never release the claim over a live process: a joined reload, or an unload that failed.
|
|
81
|
+
if (created && !runtime.findSession(modelId)) {
|
|
82
|
+
await claim.release().catch(() => { });
|
|
83
|
+
this.modelClaims.delete(key);
|
|
84
|
+
}
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
unload(provider, modelId) {
|
|
89
|
+
const key = `${provider}\0${modelId}`;
|
|
90
|
+
return this.withModelTransition(key, async () => {
|
|
91
|
+
this.deps.assertRunning();
|
|
92
|
+
const result = await this.deps.runtime(provider).unload(modelId);
|
|
93
|
+
if (result.success) {
|
|
94
|
+
await this.modelClaims
|
|
95
|
+
.get(key)
|
|
96
|
+
?.release()
|
|
97
|
+
.catch(() => { });
|
|
98
|
+
this.modelClaims.delete(key);
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/** Wait for every model transition in flight, then release every claim this core still holds. */
|
|
104
|
+
async releaseAll() {
|
|
105
|
+
await Promise.all([...this.modelTransitions.values()]);
|
|
106
|
+
await Promise.all([...this.modelClaims.values()].map((claim) => claim.release().catch(() => { })));
|
|
107
|
+
this.modelClaims.clear();
|
|
108
|
+
}
|
|
109
|
+
localTarget(provider, modelId) {
|
|
110
|
+
const session = this.deps.runtimes
|
|
111
|
+
.get(provider)
|
|
112
|
+
?.list()
|
|
113
|
+
.find((s) => modelIdsMatch(s.model_id, modelId)) ??
|
|
114
|
+
this.deps.externalSessions.find(provider, (id) => modelIdsMatch(id, modelId));
|
|
115
|
+
return session ? toLocalTarget(provider, session) : undefined;
|
|
116
|
+
}
|
|
117
|
+
/** Every session the public server can route to, owned here or registered as external. */
|
|
118
|
+
listLocalTargets() {
|
|
119
|
+
return LOCAL_SEARCH_ORDER.flatMap((provider) => [
|
|
120
|
+
...(this.deps.runtimes.get(provider)?.list() ?? []).map((s) => toLocalTarget(provider, s)),
|
|
121
|
+
...this.deps.externalSessions
|
|
122
|
+
.list()
|
|
123
|
+
.filter((s) => s.provider === provider)
|
|
124
|
+
.map((s) => toLocalTarget(provider, s)),
|
|
125
|
+
]);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* What the public server asks of a runtime when a request fails for lack of context or on a
|
|
129
|
+
* poisoned engine. Recovery reloads at the same context; everything else grows it one step.
|
|
130
|
+
*/
|
|
131
|
+
async serverCtxRequest(provider, modelId, trigger) {
|
|
132
|
+
// A session another process owns is grown by that process; the core only asks.
|
|
133
|
+
const ownedHere = this.deps.runtimes
|
|
134
|
+
.get(provider)
|
|
135
|
+
?.list()
|
|
136
|
+
.some((s) => modelIdsMatch(s.model_id, modelId));
|
|
137
|
+
const external = ownedHere
|
|
138
|
+
? undefined
|
|
139
|
+
: this.deps.externalSessions.find(provider, (id) => modelIdsMatch(id, modelId));
|
|
140
|
+
if (external)
|
|
141
|
+
return this.deps.externalSessions.requestCtxIncrease(external.owner, provider, external.model_id, trigger);
|
|
142
|
+
if (trigger === 'compute_error_recovery') {
|
|
143
|
+
const result = await this.deps.recreateSession(provider, modelId);
|
|
144
|
+
return result.ok ? { ok: true } : { ok: false, reason: result.reason };
|
|
145
|
+
}
|
|
146
|
+
const result = await this.deps.increaseCtx(provider, modelId, trigger);
|
|
147
|
+
return result.ok ? { ok: true, new_ctx_len: result.new_ctx_len } : { ok: false, reason: result.reason };
|
|
148
|
+
}
|
|
149
|
+
withModelTransition(key, operation) {
|
|
150
|
+
const previous = this.modelTransitions.get(key) ?? Promise.resolve();
|
|
151
|
+
const result = previous.then(operation);
|
|
152
|
+
const settled = result.then(() => { }, () => { });
|
|
153
|
+
this.modelTransitions.set(key, settled);
|
|
154
|
+
void settled.then(() => {
|
|
155
|
+
if (this.modelTransitions.get(key) === settled)
|
|
156
|
+
this.modelTransitions.delete(key);
|
|
157
|
+
});
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function toLocalTarget(provider, session) {
|
|
162
|
+
return {
|
|
163
|
+
provider,
|
|
164
|
+
modelId: session.model_id,
|
|
165
|
+
port: session.port,
|
|
166
|
+
apiKey: session.api_key,
|
|
167
|
+
isEmbedding: session.is_embedding,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export function sessionsOf(runtimes) {
|
|
171
|
+
const out = [];
|
|
172
|
+
for (const [provider, runtime] of runtimes)
|
|
173
|
+
for (const info of runtime.list())
|
|
174
|
+
out.push({ ...info, provider });
|
|
175
|
+
return out;
|
|
176
|
+
}
|
|
177
|
+
export function unknownProvider(provider, available) {
|
|
178
|
+
return new AtomicCoreError('PROVIDER_NOT_FOUND', `Unknown provider "${provider}".`, `available: ${[...available].join(', ')}`);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/core/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { LocalProviderId } from '../contracts/index.js';
|
|
2
|
+
import type { LoadOptions } from '../runtime/llamacpp/index.js';
|
|
3
|
+
import type { LocalLoadOptions } from '../runtime/index.js';
|
|
4
|
+
import type { WireDiffusionOptions } from '../diffusion/index.js';
|
|
5
|
+
import type { Prober, TunnelSpawner, TunnelTimings } from '../remote-access/index.js';
|
|
6
|
+
import type { TelemetryControl } from '../telemetry/index.js';
|
|
7
|
+
export type CoreLogger = (level: 'info' | 'warn' | 'error', message: string) => void;
|
|
8
|
+
export interface AtomicCoreOptions {
|
|
9
|
+
ownerScope?: 'app' | 'cli';
|
|
10
|
+
/** Explicit data folder; otherwise resolved like the app does (PLAN.md §8.2 "Data folder"). */
|
|
11
|
+
dataFolder?: string;
|
|
12
|
+
/** Where the app's bundled sidecar binaries live (`resources/bin`); needed for MLX and Foundation Models. */
|
|
13
|
+
resourcesDir?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The `cloudflared` binary for remote access (`--cloudflared-bin`). The app bundles it next to its
|
|
16
|
+
* own executable and says where; without it `ATOMIC_CLOUDFLARED_BIN` and the resources folder are
|
|
17
|
+
* tried, and with none of them remote access reports `cloudflared_unavailable`.
|
|
18
|
+
*/
|
|
19
|
+
cloudflaredPath?: string;
|
|
20
|
+
/** Test seams for the remote-access tunnel: a scripted process, a scripted probe, short timings. */
|
|
21
|
+
remoteAccess?: {
|
|
22
|
+
spawner?: TunnelSpawner;
|
|
23
|
+
prober?: Prober;
|
|
24
|
+
timings?: Partial<TunnelTimings>;
|
|
25
|
+
};
|
|
26
|
+
/** Test seams of the image-generation service (a fake engine, short timings). */
|
|
27
|
+
diffusion?: WireDiffusionOptions['overrides'];
|
|
28
|
+
/** The platform runtimes are offered for (macOS-only engines are not registered elsewhere). Test seam. */
|
|
29
|
+
platform?: NodeJS.Platform;
|
|
30
|
+
fetch?: typeof fetch;
|
|
31
|
+
env?: NodeJS.ProcessEnv;
|
|
32
|
+
/** 'owner' takes the instance lock; 'auto' is the same today — attaching is the CLI's job. */
|
|
33
|
+
role?: 'owner' | 'auto';
|
|
34
|
+
controlHost?: string;
|
|
35
|
+
/** 0 (the default) picks a free port and publishes it in the lock. */
|
|
36
|
+
controlPort?: number;
|
|
37
|
+
logger?: CoreLogger;
|
|
38
|
+
/**
|
|
39
|
+
* Where failures worth an issue go, and what `/atomic/v1/telemetry` drives. A host that owns its
|
|
40
|
+
* process (the app's daemon, the CLI) builds one with `createCoreReporter` so start-up failures are
|
|
41
|
+
* reported too; otherwise the core builds its own from `telemetry`.
|
|
42
|
+
*/
|
|
43
|
+
errorReporter?: TelemetryControl;
|
|
44
|
+
/**
|
|
45
|
+
* Error reporting when no `errorReporter` is given: the core reports to its own Sentry project by
|
|
46
|
+
* itself, as `library` unless a `host` name is given. `enabled` is the host's consent; `false`
|
|
47
|
+
* turns reporting off for this core altogether. See docs/decisions/*-the-core-owns-its-error-reporting.md.
|
|
48
|
+
*/
|
|
49
|
+
telemetry?: false | {
|
|
50
|
+
host?: string;
|
|
51
|
+
hostVersion?: string;
|
|
52
|
+
enabled?: boolean;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export declare const LOCAL_PROVIDER: LocalProviderId;
|
|
56
|
+
/**
|
|
57
|
+
* Load options as the control API carries them: the shared ones plus llama.cpp's explicit paths.
|
|
58
|
+
* Without `signal`: a load is cancelled through `AtomicCore.cancelLoad`, and the control route casts
|
|
59
|
+
* a JSON body straight into these options, so a `signal` key arriving there must never be trusted.
|
|
60
|
+
*/
|
|
61
|
+
export type CoreLoadOptions = Omit<LocalLoadOptions, 'signal'> & Omit<LoadOptions, 'overrides' | 'signal'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAiDA,MAAM,CAAC,MAAM,cAAc,GAAoB,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<data>/atomic-core/credentials.json`: cloud provider API keys, kept out of `settings.json` so the
|
|
3
|
+
* settings file can be read, diffed and shown without exposing a secret (PLAN.md §3.4).
|
|
4
|
+
*
|
|
5
|
+
* `{version: 1, providers: {<id>: {api_key, updated_at, bound_to?}}}`, owner-readable only (0600 on Unix; on
|
|
6
|
+
* Windows the file inherits the per-user ACL of the data folder). Written through `.tmp` + rename,
|
|
7
|
+
* with the mode set when the temporary file is created, so the key is never on disk under a wider
|
|
8
|
+
* mode even for an instant.
|
|
9
|
+
*/
|
|
10
|
+
export declare const CREDENTIALS_VERSION = 1;
|
|
11
|
+
export interface ApiKeyRecord {
|
|
12
|
+
api_key: string;
|
|
13
|
+
updated_at: string;
|
|
14
|
+
/** Hash of the non-secret provider configuration this key may be sent to. */
|
|
15
|
+
bound_to?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ApiKeyStore {
|
|
18
|
+
readonly path: string;
|
|
19
|
+
private readonly now;
|
|
20
|
+
private doc;
|
|
21
|
+
private chain;
|
|
22
|
+
private constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Read the file, or start empty when it is absent. A file that cannot be parsed is refused rather
|
|
25
|
+
* than silently replaced: overwriting it would throw away every key the user entered.
|
|
26
|
+
*/
|
|
27
|
+
static open(path: string, options?: {
|
|
28
|
+
now?: () => number;
|
|
29
|
+
}): Promise<ApiKeyStore>;
|
|
30
|
+
get(provider: string): string | undefined;
|
|
31
|
+
has(provider: string): boolean;
|
|
32
|
+
record(provider: string): ApiKeyRecord | undefined;
|
|
33
|
+
/** Store a key; an empty or absent key removes the entry, the way the app's registration clears one. */
|
|
34
|
+
set(provider: string, apiKey: string | null | undefined): Promise<void>;
|
|
35
|
+
remove(provider: string): Promise<void>;
|
|
36
|
+
/** Persist a key and its destination binding as one credentials-file update. */
|
|
37
|
+
setBound(provider: string, apiKey: string | null | undefined, binding: string): Promise<void>;
|
|
38
|
+
/** Restore the exact previous record after a failed settings write. */
|
|
39
|
+
restore(provider: string, record: ApiKeyRecord | undefined): Promise<void>;
|
|
40
|
+
private mutate;
|
|
41
|
+
}
|