@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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `cloudflared` child process: how it is launched, what is watched while it runs, and how it
|
|
3
|
+
* is ended. The arguments and the reading of its output are pure and live next door.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately not `spawnManaged`: that keeps every line a process ever wrote (a tunnel runs for
|
|
6
|
+
* days) and waits without bound for an exit, while a tunnel needs an answer to "could its exit be
|
|
7
|
+
* confirmed?" — a public URL that may still be served is a state of its own (`stop_failed`).
|
|
8
|
+
*
|
|
9
|
+
* PRIVACY: the output names the public URL. It is parsed and dropped, never logged or kept.
|
|
10
|
+
*
|
|
11
|
+
* Ported from: src-tauri/src/core/server/remote_access/process.rs (image-generation line, `767ff6350`).
|
|
12
|
+
*/
|
|
13
|
+
export interface TunnelTimings {
|
|
14
|
+
/** For the URL to be minted *and* an edge connection registered. */
|
|
15
|
+
readyMs: number;
|
|
16
|
+
/** For the public URL to answer as this server, all probe phases together. */
|
|
17
|
+
probeTotalMs: number;
|
|
18
|
+
/** After SIGTERM, before the kill (unix). */
|
|
19
|
+
termGraceMs: number;
|
|
20
|
+
/** After the kill, for the exit to be confirmed. */
|
|
21
|
+
killGraceMs: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const DEFAULT_TUNNEL_TIMINGS: TunnelTimings;
|
|
24
|
+
/** How waiting for a fresh tunnel to become usable ended. */
|
|
25
|
+
export type Ready =
|
|
26
|
+
/** Minted and registered. */
|
|
27
|
+
{
|
|
28
|
+
kind: 'url';
|
|
29
|
+
url: string;
|
|
30
|
+
}
|
|
31
|
+
/** The process ended first. */
|
|
32
|
+
| {
|
|
33
|
+
kind: 'exited';
|
|
34
|
+
sawUrl: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Still running, but not registered within the limit. */
|
|
37
|
+
| {
|
|
38
|
+
kind: 'timed-out';
|
|
39
|
+
sawUrl: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** It never ran at all (missing, not executable). */
|
|
42
|
+
| {
|
|
43
|
+
kind: 'spawn-failed';
|
|
44
|
+
};
|
|
45
|
+
/** One running tunnel process, as the manager sees it; scripted in the manager's tests. */
|
|
46
|
+
export interface TunnelProcess {
|
|
47
|
+
readonly pid: number | undefined;
|
|
48
|
+
/** The program that was started, for the crash-recovery journal. */
|
|
49
|
+
readonly exe: string;
|
|
50
|
+
waitReady(limitMs: number): Promise<Ready>;
|
|
51
|
+
/** Resolves when the process has exited. */
|
|
52
|
+
waitExit(): Promise<void>;
|
|
53
|
+
/** Ends the process. `false` means its exit could not be confirmed. */
|
|
54
|
+
terminate(timings: Pick<TunnelTimings, 'termGraceMs' | 'killGraceMs'>): Promise<boolean>;
|
|
55
|
+
/** Signals only, for a shutdown that cannot wait. */
|
|
56
|
+
killNow(): void;
|
|
57
|
+
}
|
|
58
|
+
/** Launches a tunnel for `origin`, optionally forcing a transport. `undefined`: there is no binary. */
|
|
59
|
+
export type TunnelSpawner = (origin: string, protocol?: string) => TunnelProcess | undefined | Promise<TunnelProcess | undefined>;
|
|
60
|
+
/** A fully described child process, separate from launching it so tests can run another program. */
|
|
61
|
+
export interface TunnelCommand {
|
|
62
|
+
program: string;
|
|
63
|
+
args: string[];
|
|
64
|
+
env: Record<string, string>;
|
|
65
|
+
}
|
|
66
|
+
export declare function spawnTunnel(command: TunnelCommand, platform?: NodeJS.Platform): TunnelProcess;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `cloudflared` child process: how it is launched, what is watched while it runs, and how it
|
|
3
|
+
* is ended. The arguments and the reading of its output are pure and live next door.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately not `spawnManaged`: that keeps every line a process ever wrote (a tunnel runs for
|
|
6
|
+
* days) and waits without bound for an exit, while a tunnel needs an answer to "could its exit be
|
|
7
|
+
* confirmed?" — a public URL that may still be served is a state of its own (`stop_failed`).
|
|
8
|
+
*
|
|
9
|
+
* PRIVACY: the output names the public URL. It is parsed and dropped, never logged or kept.
|
|
10
|
+
*
|
|
11
|
+
* Ported from: src-tauri/src/core/server/remote_access/process.rs (image-generation line, `767ff6350`).
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'node:child_process';
|
|
14
|
+
import { OutputParser, readyUrl } from './cloudflared-output.js';
|
|
15
|
+
export const DEFAULT_TUNNEL_TIMINGS = {
|
|
16
|
+
readyMs: 15_000,
|
|
17
|
+
probeTotalMs: 45_000,
|
|
18
|
+
termGraceMs: 5_000,
|
|
19
|
+
killGraceMs: 5_000,
|
|
20
|
+
};
|
|
21
|
+
/** A line longer than this is fed as it stands; cloudflared never prints one, a hostile stand-in might. */
|
|
22
|
+
const MAX_LINE_BYTES = 64 * 1024;
|
|
23
|
+
export function spawnTunnel(command, platform = process.platform) {
|
|
24
|
+
const child = spawn(command.program, command.args, {
|
|
25
|
+
env: command.env,
|
|
26
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
27
|
+
windowsHide: true,
|
|
28
|
+
});
|
|
29
|
+
return new ChildTunnel(child, platform, command.program);
|
|
30
|
+
}
|
|
31
|
+
class ChildTunnel {
|
|
32
|
+
child;
|
|
33
|
+
platform;
|
|
34
|
+
exe;
|
|
35
|
+
parser = new OutputParser();
|
|
36
|
+
watchers = new Set();
|
|
37
|
+
exited;
|
|
38
|
+
spawnFailed = false;
|
|
39
|
+
gone = false;
|
|
40
|
+
constructor(child, platform, exe) {
|
|
41
|
+
this.child = child;
|
|
42
|
+
this.platform = platform;
|
|
43
|
+
this.exe = exe;
|
|
44
|
+
this.exited = new Promise((resolve) => {
|
|
45
|
+
const settle = () => {
|
|
46
|
+
this.gone = true;
|
|
47
|
+
this.notify();
|
|
48
|
+
resolve();
|
|
49
|
+
};
|
|
50
|
+
// Only the process decides that it has exited, never a closed pipe: on Windows a grandchild
|
|
51
|
+
// can hold a pipe open, and the reverse is possible too.
|
|
52
|
+
child.once('exit', settle);
|
|
53
|
+
child.once('error', () => {
|
|
54
|
+
this.spawnFailed = child.pid === undefined;
|
|
55
|
+
settle();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
// cloudflared logs to stderr; stdout is read too so neither pipe can fill up and stall it.
|
|
59
|
+
this.drain(child.stdout);
|
|
60
|
+
this.drain(child.stderr);
|
|
61
|
+
}
|
|
62
|
+
get pid() {
|
|
63
|
+
return this.child.pid;
|
|
64
|
+
}
|
|
65
|
+
drain(pipe) {
|
|
66
|
+
if (!pipe)
|
|
67
|
+
return;
|
|
68
|
+
let pending = '';
|
|
69
|
+
pipe.setEncoding('utf8');
|
|
70
|
+
// Keep draining after the URL is known: a full pipe blocks the child.
|
|
71
|
+
pipe.on('data', (chunk) => {
|
|
72
|
+
pending += chunk;
|
|
73
|
+
const lines = pending.split(/\r?\n/);
|
|
74
|
+
pending = lines.pop() ?? '';
|
|
75
|
+
if (pending.length > MAX_LINE_BYTES) {
|
|
76
|
+
lines.push(pending);
|
|
77
|
+
pending = '';
|
|
78
|
+
}
|
|
79
|
+
let changed = false;
|
|
80
|
+
for (const line of lines)
|
|
81
|
+
changed = this.parser.feedLine(line) || changed;
|
|
82
|
+
if (changed)
|
|
83
|
+
this.notify();
|
|
84
|
+
});
|
|
85
|
+
pipe.on('error', () => { });
|
|
86
|
+
}
|
|
87
|
+
notify() {
|
|
88
|
+
for (const watcher of [...this.watchers])
|
|
89
|
+
watcher();
|
|
90
|
+
}
|
|
91
|
+
waitReady(limitMs) {
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const check = (timedOut = false) => {
|
|
94
|
+
const parsed = this.parser.snapshot();
|
|
95
|
+
const url = readyUrl(parsed);
|
|
96
|
+
const sawUrl = parsed.url !== undefined;
|
|
97
|
+
const outcome = url !== undefined
|
|
98
|
+
? { kind: 'url', url }
|
|
99
|
+
: this.gone
|
|
100
|
+
? this.spawnFailed
|
|
101
|
+
? { kind: 'spawn-failed' }
|
|
102
|
+
: { kind: 'exited', sawUrl }
|
|
103
|
+
: timedOut
|
|
104
|
+
? { kind: 'timed-out', sawUrl }
|
|
105
|
+
: undefined;
|
|
106
|
+
if (!outcome)
|
|
107
|
+
return false;
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
this.watchers.delete(watcher);
|
|
110
|
+
resolve(outcome);
|
|
111
|
+
return true;
|
|
112
|
+
};
|
|
113
|
+
const watcher = () => void check();
|
|
114
|
+
const timer = setTimeout(() => void check(true), limitMs);
|
|
115
|
+
timer.unref?.();
|
|
116
|
+
this.watchers.add(watcher);
|
|
117
|
+
check();
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
waitExit() {
|
|
121
|
+
return this.exited;
|
|
122
|
+
}
|
|
123
|
+
exitedWithin(ms) {
|
|
124
|
+
if (this.gone)
|
|
125
|
+
return Promise.resolve(true);
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
const timer = setTimeout(() => resolve(false), ms);
|
|
128
|
+
timer.unref?.();
|
|
129
|
+
void this.exited.then(() => {
|
|
130
|
+
clearTimeout(timer);
|
|
131
|
+
resolve(true);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
async terminate(timings) {
|
|
136
|
+
if (this.gone)
|
|
137
|
+
return true;
|
|
138
|
+
// Windows has no graceful signal for a console-less child; go straight to TerminateProcess.
|
|
139
|
+
if (this.platform !== 'win32') {
|
|
140
|
+
this.signal('SIGTERM');
|
|
141
|
+
if (await this.exitedWithin(timings.termGraceMs))
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
this.signal('SIGKILL');
|
|
145
|
+
return this.exitedWithin(timings.killGraceMs);
|
|
146
|
+
}
|
|
147
|
+
killNow() {
|
|
148
|
+
if (!this.gone)
|
|
149
|
+
this.signal('SIGKILL');
|
|
150
|
+
}
|
|
151
|
+
signal(signal) {
|
|
152
|
+
try {
|
|
153
|
+
this.child.kill(signal);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Already gone, or never started.
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/remote-access/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The production spawner: find the binary, make sure the user's own cloudflared configuration cannot
|
|
3
|
+
* steer the quick tunnel, and start it.
|
|
4
|
+
*/
|
|
5
|
+
import type { TunnelCommand, TunnelProcess, TunnelSpawner } from './process.js';
|
|
6
|
+
export interface CloudflaredSpawnerOptions {
|
|
7
|
+
/** `--cloudflared-bin`. */
|
|
8
|
+
explicit?: string | undefined;
|
|
9
|
+
env: NodeJS.ProcessEnv;
|
|
10
|
+
resourcesDir?: string | undefined;
|
|
11
|
+
platform: NodeJS.Platform;
|
|
12
|
+
/** Where the empty `--config` document lives on Windows, which has no `/dev/null`. */
|
|
13
|
+
emptyConfigPath: string;
|
|
14
|
+
exists?: (path: string) => boolean;
|
|
15
|
+
log?: (message: string) => void;
|
|
16
|
+
/** Test seam: run something else in place of the resolved command. */
|
|
17
|
+
launch?: (command: TunnelCommand, platform: NodeJS.Platform) => TunnelProcess;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* An empty configuration document for `--config`, so cloudflared does not read
|
|
21
|
+
* `~/.cloudflared/config.yml`. Best effort on Windows: without it the tunnel still works for
|
|
22
|
+
* everybody who has no configuration file of their own.
|
|
23
|
+
*/
|
|
24
|
+
export declare function emptyConfigFor(platform: NodeJS.Platform, windowsPath: string): Promise<string | undefined>;
|
|
25
|
+
export declare function cloudflaredSpawner(options: CloudflaredSpawnerOptions): TunnelSpawner;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The production spawner: find the binary, make sure the user's own cloudflared configuration cannot
|
|
3
|
+
* steer the quick tunnel, and start it.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { dirname } from 'node:path';
|
|
8
|
+
import { cloudflaredArgs, resolveCloudflaredBinary, scrubTunnelEnv } from './cloudflared-args.js';
|
|
9
|
+
import { spawnTunnel } from './process.js';
|
|
10
|
+
/**
|
|
11
|
+
* An empty configuration document for `--config`, so cloudflared does not read
|
|
12
|
+
* `~/.cloudflared/config.yml`. Best effort on Windows: without it the tunnel still works for
|
|
13
|
+
* everybody who has no configuration file of their own.
|
|
14
|
+
*/
|
|
15
|
+
export async function emptyConfigFor(platform, windowsPath) {
|
|
16
|
+
if (platform !== 'win32')
|
|
17
|
+
return '/dev/null';
|
|
18
|
+
try {
|
|
19
|
+
await mkdir(dirname(windowsPath), { recursive: true });
|
|
20
|
+
await writeFile(windowsPath, '');
|
|
21
|
+
return windowsPath;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function cloudflaredSpawner(options) {
|
|
28
|
+
return async (origin, protocol) => {
|
|
29
|
+
const program = resolveCloudflaredBinary({
|
|
30
|
+
explicit: options.explicit,
|
|
31
|
+
env: options.env,
|
|
32
|
+
resourcesDir: options.resourcesDir,
|
|
33
|
+
platform: options.platform,
|
|
34
|
+
exists: options.exists ?? existsSync,
|
|
35
|
+
});
|
|
36
|
+
if (program === undefined) {
|
|
37
|
+
options.log?.('remote access: no cloudflared binary was found for this installation');
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const emptyConfig = await emptyConfigFor(options.platform, options.emptyConfigPath);
|
|
41
|
+
const command = {
|
|
42
|
+
program,
|
|
43
|
+
args: cloudflaredArgs(origin, protocol, emptyConfig),
|
|
44
|
+
env: scrubTunnelEnv(options.env),
|
|
45
|
+
};
|
|
46
|
+
return (options.launch ?? spawnTunnel)(command, options.platform);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=spawner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../src/remote-access/spawner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAiB1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAyB,EACzB,WAAmB;IAEnB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,WAAW,CAAA;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAChC,OAAO,WAAW,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;SACrC,CAAC,CAAA;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,sEAAsE,CAAC,CAAA;YACrF,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;QACnF,MAAM,OAAO,GAAkB;YAC7B,OAAO;YACP,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC;YACpD,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;SACjC,CAAA;QACD,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnE,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the tunnel's state machine knows, and what the frontend is told about it. Pure.
|
|
3
|
+
*
|
|
4
|
+
* Ported from: src-tauri/src/core/server/remote_access/mod.rs (`Phase`, `derive_status`) on the
|
|
5
|
+
* image-generation line (`767ff6350`).
|
|
6
|
+
*/
|
|
7
|
+
import type { RemoteAccessFailure, RemoteAccessStatus } from '../contracts/index.js';
|
|
8
|
+
export type Phase = {
|
|
9
|
+
kind: 'off';
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'starting';
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'online';
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'stopping';
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'failed';
|
|
18
|
+
error: RemoteAccessFailure;
|
|
19
|
+
};
|
|
20
|
+
export declare const OFF: Phase;
|
|
21
|
+
export declare const failed: (error: RemoteAccessFailure) => Phase;
|
|
22
|
+
export interface TunnelSnapshot {
|
|
23
|
+
phase: Phase;
|
|
24
|
+
url: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
/** The running public server as the tunnel needs it; `undefined` while it is stopped. */
|
|
27
|
+
export interface ServerEndpoint {
|
|
28
|
+
/** Where cloudflared dials: the bound port, and a host that actually listens (see `dialOrigin`). */
|
|
29
|
+
origin: string;
|
|
30
|
+
hasApiKey: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function deriveStatus(snapshot: TunnelSnapshot, server: ServerEndpoint | undefined): RemoteAccessStatus;
|
|
33
|
+
/**
|
|
34
|
+
* The origin a local client dials to reach a listener bound to `host`. A wildcard bind listens on
|
|
35
|
+
* loopback too; a server bound to one specific address does not listen on loopback at all.
|
|
36
|
+
*/
|
|
37
|
+
export declare function dialOrigin(host: string, port: number): string;
|
|
38
|
+
/** The host of a tunnel URL, or `undefined` for something that is not one. */
|
|
39
|
+
export declare function hostOf(url: string): string | undefined;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the tunnel's state machine knows, and what the frontend is told about it. Pure.
|
|
3
|
+
*
|
|
4
|
+
* Ported from: src-tauri/src/core/server/remote_access/mod.rs (`Phase`, `derive_status`) on the
|
|
5
|
+
* image-generation line (`767ff6350`).
|
|
6
|
+
*/
|
|
7
|
+
export const OFF = { kind: 'off' };
|
|
8
|
+
export const failed = (error) => ({ kind: 'failed', error });
|
|
9
|
+
export function deriveStatus(snapshot, server) {
|
|
10
|
+
const phase = snapshot.phase;
|
|
11
|
+
const state = phase.kind === 'failed' ? 'error' : phase.kind;
|
|
12
|
+
const error = phase.kind === 'failed' ? phase.error : null;
|
|
13
|
+
const blockReason = server === undefined ? 'server_stopped' : null;
|
|
14
|
+
// A process that may still be alive must be dealt with before another one is started next to it.
|
|
15
|
+
const stopFailed = error === 'stop_failed';
|
|
16
|
+
const idle = state === 'off' || state === 'error';
|
|
17
|
+
return {
|
|
18
|
+
state,
|
|
19
|
+
url: state === 'online' ? (snapshot.url ?? null) : null,
|
|
20
|
+
error,
|
|
21
|
+
blockReason,
|
|
22
|
+
canStart: blockReason === null && idle && !stopFailed,
|
|
23
|
+
canStop: state === 'starting' || state === 'online' || stopFailed,
|
|
24
|
+
serverHasApiKey: server?.hasApiKey === true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The origin a local client dials to reach a listener bound to `host`. A wildcard bind listens on
|
|
29
|
+
* loopback too; a server bound to one specific address does not listen on loopback at all.
|
|
30
|
+
*/
|
|
31
|
+
export function dialOrigin(host, port) {
|
|
32
|
+
const bare = host.trim().replace(/^\[|\]$/g, '');
|
|
33
|
+
if (bare === '' || bare === '0.0.0.0')
|
|
34
|
+
return `http://127.0.0.1:${port}`;
|
|
35
|
+
if (bare === '::' || bare === '0:0:0:0:0:0:0:0')
|
|
36
|
+
return `http://[::1]:${port}`;
|
|
37
|
+
return bare.includes(':') ? `http://[${bare}]:${port}` : `http://${bare}:${port}`;
|
|
38
|
+
}
|
|
39
|
+
/** The host of a tunnel URL, or `undefined` for something that is not one. */
|
|
40
|
+
export function hostOf(url) {
|
|
41
|
+
try {
|
|
42
|
+
const host = new URL(url).hostname;
|
|
43
|
+
return host === '' ? undefined : host;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/remote-access/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,CAAC,MAAM,GAAG,GAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAA0B,EAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AAcxF,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,MAAkC;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1D,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAA;IAClE,iGAAiG;IACjG,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa,CAAA;IAC1C,MAAM,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,CAAA;IACjD,OAAO;QACL,KAAK;QACL,GAAG,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QACvD,KAAK;QACL,WAAW;QACX,QAAQ,EAAE,WAAW,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU;QACrD,OAAO,EAAE,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,IAAI,UAAU;QACjE,eAAe,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI;KAC5C,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAChD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,oBAAoB,IAAI,EAAE,CAAA;IACxE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,gBAAgB,IAAI,EAAE,CAAA;IAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAA;AACnF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;QAClC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything the tunnel manager needs from the outside, put together in one place so the owner's
|
|
3
|
+
* wiring stays a single call: how `cloudflared` is found and started, how a URL is proven, and where
|
|
4
|
+
* the crash-recovery record goes.
|
|
5
|
+
*/
|
|
6
|
+
import type { RemoteAccessManagerDeps } from './manager.js';
|
|
7
|
+
import type { EdgeAddress, Prober } from './probe.js';
|
|
8
|
+
import type { TunnelSpawner, TunnelTimings } from './process.js';
|
|
9
|
+
/**
|
|
10
|
+
* Test hooks only, like the ChatGPT endpoints': stand in for Cloudflare's edge and trust its
|
|
11
|
+
* certificate. Production never sets them.
|
|
12
|
+
*/
|
|
13
|
+
export declare const REMOTE_ACCESS_EDGE_ENV = "ATOMIC_REMOTE_ACCESS_EDGE";
|
|
14
|
+
export declare const REMOTE_ACCESS_CA_ENV = "ATOMIC_REMOTE_ACCESS_CA";
|
|
15
|
+
export interface RemoteAccessWiring {
|
|
16
|
+
/** Test seams: a scripted process, a scripted probe, short timings. */
|
|
17
|
+
overrides?: {
|
|
18
|
+
spawner?: TunnelSpawner;
|
|
19
|
+
prober?: Prober;
|
|
20
|
+
timings?: Partial<TunnelTimings>;
|
|
21
|
+
} | undefined;
|
|
22
|
+
/** `--cloudflared-bin`. */
|
|
23
|
+
cloudflaredPath?: string | undefined;
|
|
24
|
+
resourcesDir?: string | undefined;
|
|
25
|
+
env: NodeJS.ProcessEnv;
|
|
26
|
+
platform: NodeJS.Platform;
|
|
27
|
+
journalPath: string;
|
|
28
|
+
emptyConfigPath: string;
|
|
29
|
+
instanceId: string;
|
|
30
|
+
warn: (message: string) => void;
|
|
31
|
+
}
|
|
32
|
+
/** `host:port` of a stand-in for Cloudflare's edge; `undefined` for anything else. */
|
|
33
|
+
export declare function parseEdgeAddress(value: string | undefined): EdgeAddress | undefined;
|
|
34
|
+
export declare function wireRemoteAccess(wiring: RemoteAccessWiring): Promise<Pick<RemoteAccessManagerDeps, 'spawner' | 'prober' | 'timings' | 'journal'>>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything the tunnel manager needs from the outside, put together in one place so the owner's
|
|
3
|
+
* wiring stays a single call: how `cloudflared` is found and started, how a URL is proven, and where
|
|
4
|
+
* the crash-recovery record goes.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
import { TunnelJournal } from './journal.js';
|
|
8
|
+
import { PublicProber } from './probe.js';
|
|
9
|
+
import { cloudflaredSpawner } from './spawner.js';
|
|
10
|
+
/**
|
|
11
|
+
* Test hooks only, like the ChatGPT endpoints': stand in for Cloudflare's edge and trust its
|
|
12
|
+
* certificate. Production never sets them.
|
|
13
|
+
*/
|
|
14
|
+
export const REMOTE_ACCESS_EDGE_ENV = 'ATOMIC_REMOTE_ACCESS_EDGE';
|
|
15
|
+
export const REMOTE_ACCESS_CA_ENV = 'ATOMIC_REMOTE_ACCESS_CA';
|
|
16
|
+
/** `host:port` of a stand-in for Cloudflare's edge; `undefined` for anything else. */
|
|
17
|
+
export function parseEdgeAddress(value) {
|
|
18
|
+
const match = /^(.+):(\d+)$/.exec(value?.trim() ?? '');
|
|
19
|
+
if (!match)
|
|
20
|
+
return undefined;
|
|
21
|
+
return { host: match[1].replace(/^\[|\]$/g, ''), port: Number(match[2]) };
|
|
22
|
+
}
|
|
23
|
+
export async function wireRemoteAccess(wiring) {
|
|
24
|
+
const edge = parseEdgeAddress(wiring.env[REMOTE_ACCESS_EDGE_ENV]);
|
|
25
|
+
const caPath = wiring.env[REMOTE_ACCESS_CA_ENV];
|
|
26
|
+
const prober = wiring.overrides?.prober ??
|
|
27
|
+
new PublicProber({
|
|
28
|
+
...(edge ? { edgeAddresses: async () => [edge] } : {}),
|
|
29
|
+
...(caPath ? { ca: await readFile(caPath) } : {}),
|
|
30
|
+
});
|
|
31
|
+
const spawner = wiring.overrides?.spawner ??
|
|
32
|
+
cloudflaredSpawner({
|
|
33
|
+
explicit: wiring.cloudflaredPath,
|
|
34
|
+
env: wiring.env,
|
|
35
|
+
resourcesDir: wiring.resourcesDir,
|
|
36
|
+
platform: wiring.platform,
|
|
37
|
+
emptyConfigPath: wiring.emptyConfigPath,
|
|
38
|
+
log: wiring.warn,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
spawner,
|
|
42
|
+
prober,
|
|
43
|
+
...(wiring.overrides?.timings ? { timings: wiring.overrides.timings } : {}),
|
|
44
|
+
journal: new TunnelJournal(wiring.journalPath, wiring.instanceId, { log: wiring.warn }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/remote-access/wiring.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAA;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAA;AAgB7D,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,OAAO,EAAE,IAAI,EAAG,KAAK,CAAC,CAAC,CAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA0B;IAE1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAC/C,MAAM,MAAM,GACV,MAAM,CAAC,SAAS,EAAE,MAAM;QACxB,IAAI,YAAY,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAA;IACJ,MAAM,OAAO,GACX,MAAM,CAAC,SAAS,EAAE,OAAO;QACzB,kBAAkB,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC,eAAe;YAChC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,GAAG,EAAE,MAAM,CAAC,IAAI;SACjB,CAAC,CAAA;IACJ,OAAO;QACL,OAAO;QACP,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;KACxF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model id → backend resolution (PLAN.md §3.2).
|
|
3
|
+
*
|
|
4
|
+
* Ported from: server/proxy.rs (provider lookup), core/sessions/resolver.rs.
|
|
5
|
+
* See PLAN.md §3.2. Public API of this module is exported from this file only.
|
|
6
|
+
*/
|
|
7
|
+
export * from './resolve.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which backend serves a model (PLAN.md §3.2).
|
|
3
|
+
*
|
|
4
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (the provider lookup shared by `/chat/completions`,
|
|
5
|
+
* `/messages` and `/responses`) and `core/sessions/resolver.rs`.
|
|
6
|
+
* See PLAN.md §3.2. Public API of this module is exported from this file only.
|
|
7
|
+
*/
|
|
8
|
+
/** A cloud provider the app registered: where to send its models and with which credentials. */
|
|
9
|
+
export interface RemoteProvider {
|
|
10
|
+
/** Registry key, e.g. `openai`, `openrouter`. */
|
|
11
|
+
provider: string;
|
|
12
|
+
apiKey?: string | null;
|
|
13
|
+
baseUrl?: string | null;
|
|
14
|
+
customHeaders: Array<{
|
|
15
|
+
header: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}>;
|
|
18
|
+
/** Model ids the user has enabled for this provider. */
|
|
19
|
+
models: string[];
|
|
20
|
+
}
|
|
21
|
+
export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx';
|
|
22
|
+
/**
|
|
23
|
+
* The order local providers are searched in when a request names only a model. The same model id
|
|
24
|
+
* loaded under two engines resolves to the first; changing the order would silently move traffic.
|
|
25
|
+
*/
|
|
26
|
+
export declare const LOCAL_SEARCH_ORDER: readonly LocalProvider[];
|
|
27
|
+
/**
|
|
28
|
+
* The remote provider that owns `modelId`, if any. Remote wins over local — a model id the user
|
|
29
|
+
* enabled for a cloud provider is never served by a local session of the same name.
|
|
30
|
+
*
|
|
31
|
+
* Three rules, in order, exactly as the proxy applies them:
|
|
32
|
+
* 1. a provider that lists the model id;
|
|
33
|
+
* 2. the text before the first `/` names a registered provider (`openrouter/anthropic/claude`);
|
|
34
|
+
* 3. the whole id is a provider key.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveRemoteProvider(modelId: string, providers: ReadonlyMap<string, RemoteProvider>): RemoteProvider | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* The proxy's model-id comparison: `.` and `_` are the same character, because clients and
|
|
39
|
+
* filesystems substitute one for the other (`Qwen3_5-9B` is `Qwen3.5-9B`). Nothing else is folded.
|
|
40
|
+
*/
|
|
41
|
+
export declare function modelIdsMatch(a: string, b: string): boolean;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which backend serves a model (PLAN.md §3.2).
|
|
3
|
+
*
|
|
4
|
+
* Ported from: src-tauri/src/core/server/proxy.rs (the provider lookup shared by `/chat/completions`,
|
|
5
|
+
* `/messages` and `/responses`) and `core/sessions/resolver.rs`.
|
|
6
|
+
* See PLAN.md §3.2. Public API of this module is exported from this file only.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The order local providers are searched in when a request names only a model. The same model id
|
|
10
|
+
* loaded under two engines resolves to the first; changing the order would silently move traffic.
|
|
11
|
+
*/
|
|
12
|
+
export const LOCAL_SEARCH_ORDER = ['llamacpp', 'llamacpp-upstream', 'mlx'];
|
|
13
|
+
/**
|
|
14
|
+
* The remote provider that owns `modelId`, if any. Remote wins over local — a model id the user
|
|
15
|
+
* enabled for a cloud provider is never served by a local session of the same name.
|
|
16
|
+
*
|
|
17
|
+
* Three rules, in order, exactly as the proxy applies them:
|
|
18
|
+
* 1. a provider that lists the model id;
|
|
19
|
+
* 2. the text before the first `/` names a registered provider (`openrouter/anthropic/claude`);
|
|
20
|
+
* 3. the whole id is a provider key.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveRemoteProvider(modelId, providers) {
|
|
23
|
+
for (const config of providers.values()) {
|
|
24
|
+
if (config.models.includes(modelId))
|
|
25
|
+
return config;
|
|
26
|
+
}
|
|
27
|
+
const slash = modelId.indexOf('/');
|
|
28
|
+
if (slash >= 0) {
|
|
29
|
+
const byPrefix = providers.get(modelId.slice(0, slash));
|
|
30
|
+
if (byPrefix)
|
|
31
|
+
return byPrefix;
|
|
32
|
+
}
|
|
33
|
+
return providers.get(modelId);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The proxy's model-id comparison: `.` and `_` are the same character, because clients and
|
|
37
|
+
* filesystems substitute one for the other (`Qwen3_5-9B` is `Qwen3.5-9B`). Nothing else is folded.
|
|
38
|
+
*/
|
|
39
|
+
export function modelIdsMatch(a, b) {
|
|
40
|
+
if (a.length !== b.length)
|
|
41
|
+
return false;
|
|
42
|
+
for (let i = 0; i < a.length; i++) {
|
|
43
|
+
const x = a[i];
|
|
44
|
+
const y = b[i];
|
|
45
|
+
if (x === y)
|
|
46
|
+
continue;
|
|
47
|
+
if ((x === '.' && y === '_') || (x === '_' && y === '.'))
|
|
48
|
+
continue;
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/router/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6B,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAA;AAEpG;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,SAA8C;IAE9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAA;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,KAAK,CAAC;YAAE,SAAQ;QACrB,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,SAAQ;QAClE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a Foundation Models server that did not start is explained.
|
|
3
|
+
*
|
|
4
|
+
* Ported from: tauri-plugin-foundation-models/src/error.rs (`FoundationModelsError::from_stderr`)
|
|
5
|
+
* and the startup branches of commands.rs (`load_foundation_models_server`).
|
|
6
|
+
* Contract: test/fixtures/app/foundation-models-errors.
|
|
7
|
+
*
|
|
8
|
+
* One deliberate difference. The Swift server says "Foundation model is downloading or not yet
|
|
9
|
+
* ready" when the on-device model is still being fetched, and the Rust classifier only looked for
|
|
10
|
+
* "model not ready" — so the one case with a clear remedy ("wait and try again") reached the user
|
|
11
|
+
* as an unexpected error. "not yet ready" is recognised here as the same condition.
|
|
12
|
+
*/
|
|
13
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
14
|
+
import type { ExitInfo } from '../llamacpp/errors.js';
|
|
15
|
+
/** Written on stdout once the HTTP server is up (FoundationModelsServerCommand.swift). */
|
|
16
|
+
export declare const FOUNDATION_MODELS_READY_MARKERS: readonly ["server is listening on", "http server listening"];
|
|
17
|
+
/** The prefix of the line the server writes before exiting when the model is unavailable. */
|
|
18
|
+
export declare const FOUNDATION_MODELS_ERROR_PREFIX = "[foundation-models] ERROR:";
|
|
19
|
+
export declare function classifyFoundationModelsStderr(stderr: string): AtomicCoreError;
|
|
20
|
+
/** The reason line, when the server wrote one (the match is case-sensitive, as in the plugin). */
|
|
21
|
+
export declare function foundationModelsErrorLine(text: string): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* An exit before readiness. The server writes its reason and then exits 1; the plugin raced the two
|
|
24
|
+
* and either error could win. Here the reason, when there is one, always wins.
|
|
25
|
+
*/
|
|
26
|
+
export declare function classifyFoundationModelsExit(exit: ExitInfo, stderr: string): AtomicCoreError;
|
|
27
|
+
export declare function foundationModelsTimeout(timeoutSecs: number): AtomicCoreError;
|
|
28
|
+
export declare function foundationModelsBinaryMissing(path: string): AtomicCoreError;
|