anypick 1.0.0
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/LICENSE +21 -0
- package/README.md +589 -0
- package/dist/adapters.d.ts +4 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +2 -0
- package/dist/catalog/model-fetch.d.ts +34 -0
- package/dist/catalog/model-fetch.d.ts.map +1 -0
- package/dist/catalog/model-fetch.js +99 -0
- package/dist/catalog/model-fetch.js.map +1 -0
- package/dist/catalog/providers.d.ts +42 -0
- package/dist/catalog/providers.d.ts.map +1 -0
- package/dist/catalog/providers.js +424 -0
- package/dist/catalog/providers.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +3 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +78 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/commands.d.ts +29 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +1043 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/completion.d.ts +6 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +202 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/errors.d.ts +20 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +47 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/format.d.ts +6 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.js +75 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/help.d.ts +6 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +66 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/interactive-accounts.d.ts +3 -0
- package/dist/cli/interactive-accounts.d.ts.map +1 -0
- package/dist/cli/interactive-accounts.js +86 -0
- package/dist/cli/interactive-accounts.js.map +1 -0
- package/dist/cli/interactive-maintenance.d.ts +4 -0
- package/dist/cli/interactive-maintenance.d.ts.map +1 -0
- package/dist/cli/interactive-maintenance.js +30 -0
- package/dist/cli/interactive-maintenance.js.map +1 -0
- package/dist/cli/interactive.d.ts +14 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +242 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/launch-client.d.ts +18 -0
- package/dist/cli/launch-client.d.ts.map +1 -0
- package/dist/cli/launch-client.js +117 -0
- package/dist/cli/launch-client.js.map +1 -0
- package/dist/cli/launcher-model.d.ts +64 -0
- package/dist/cli/launcher-model.d.ts.map +1 -0
- package/dist/cli/launcher-model.js +200 -0
- package/dist/cli/launcher-model.js.map +1 -0
- package/dist/cli/launcher-render.d.ts +22 -0
- package/dist/cli/launcher-render.d.ts.map +1 -0
- package/dist/cli/launcher-render.js +113 -0
- package/dist/cli/launcher-render.js.map +1 -0
- package/dist/cli/launcher.d.ts +27 -0
- package/dist/cli/launcher.d.ts.map +1 -0
- package/dist/cli/launcher.js +93 -0
- package/dist/cli/launcher.js.map +1 -0
- package/dist/cli/local-health.d.ts +17 -0
- package/dist/cli/local-health.d.ts.map +1 -0
- package/dist/cli/local-health.js +31 -0
- package/dist/cli/local-health.js.map +1 -0
- package/dist/cli/plugin-commands.d.ts +4 -0
- package/dist/cli/plugin-commands.d.ts.map +1 -0
- package/dist/cli/plugin-commands.js +160 -0
- package/dist/cli/plugin-commands.js.map +1 -0
- package/dist/cli/primary.d.ts +18 -0
- package/dist/cli/primary.d.ts.map +1 -0
- package/dist/cli/primary.js +593 -0
- package/dist/cli/primary.js.map +1 -0
- package/dist/cli/render-util.d.ts +24 -0
- package/dist/cli/render-util.d.ts.map +1 -0
- package/dist/cli/render-util.js +58 -0
- package/dist/cli/render-util.js.map +1 -0
- package/dist/cli/ux.d.ts +43 -0
- package/dist/cli/ux.d.ts.map +1 -0
- package/dist/cli/ux.js +114 -0
- package/dist/cli/ux.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/claude-client-apply.d.ts +8 -0
- package/dist/clients/claude-client-apply.d.ts.map +1 -0
- package/dist/clients/claude-client-apply.js +108 -0
- package/dist/clients/claude-client-apply.js.map +1 -0
- package/dist/clients/claude-code.d.ts +5 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +189 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/claude-settings-guard.d.ts +18 -0
- package/dist/clients/claude-settings-guard.d.ts.map +1 -0
- package/dist/clients/codex-desktop-catalog.d.ts +67 -0
- package/dist/clients/codex-desktop-catalog.d.ts.map +1 -0
- package/dist/clients/codex-desktop-catalog.js +212 -0
- package/dist/clients/codex-desktop-catalog.js.map +1 -0
- package/dist/clients/codex.d.ts +181 -0
- package/dist/clients/codex.d.ts.map +1 -0
- package/dist/clients/codex.js +783 -0
- package/dist/clients/codex.js.map +1 -0
- package/dist/clients/env-files.d.ts +14 -0
- package/dist/clients/env-files.d.ts.map +1 -0
- package/dist/clients/env-files.js +50 -0
- package/dist/clients/env-files.js.map +1 -0
- package/dist/clients/gemini-client-utils.d.ts +4 -0
- package/dist/clients/gemini-client-utils.d.ts.map +1 -0
- package/dist/clients/gemini-client-utils.js +33 -0
- package/dist/clients/gemini-client-utils.js.map +1 -0
- package/dist/clients/gemini.d.ts +16 -0
- package/dist/clients/gemini.d.ts.map +1 -0
- package/dist/clients/gemini.js +233 -0
- package/dist/clients/gemini.js.map +1 -0
- package/dist/clients/index.d.ts +14 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +18 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/isolation.d.ts +28 -0
- package/dist/clients/isolation.d.ts.map +1 -0
- package/dist/clients/isolation.js +131 -0
- package/dist/clients/isolation.js.map +1 -0
- package/dist/clients/kiro.d.ts +10 -0
- package/dist/clients/kiro.d.ts.map +1 -0
- package/dist/clients/kiro.js +168 -0
- package/dist/clients/kiro.js.map +1 -0
- package/dist/clients/model-roles.d.ts +58 -0
- package/dist/clients/model-roles.d.ts.map +1 -0
- package/dist/clients/model-roles.js +139 -0
- package/dist/clients/model-roles.js.map +1 -0
- package/dist/clients/registry.d.ts +7 -0
- package/dist/clients/registry.d.ts.map +1 -0
- package/dist/clients/registry.js +16 -0
- package/dist/clients/registry.js.map +1 -0
- package/dist/clients/resolve.d.ts +27 -0
- package/dist/clients/resolve.d.ts.map +1 -0
- package/dist/clients/resolve.js +49 -0
- package/dist/clients/resolve.js.map +1 -0
- package/dist/core/account-codec.d.ts +32 -0
- package/dist/core/account-codec.d.ts.map +1 -0
- package/dist/core/account-codec.js +134 -0
- package/dist/core/account-codec.js.map +1 -0
- package/dist/core/account-transfer.d.ts +20 -0
- package/dist/core/account-transfer.d.ts.map +1 -0
- package/dist/core/account-transfer.js +136 -0
- package/dist/core/account-transfer.js.map +1 -0
- package/dist/core/activation-executor.d.ts +72 -0
- package/dist/core/activation-executor.d.ts.map +1 -0
- package/dist/core/activation-executor.js +690 -0
- package/dist/core/activation-executor.js.map +1 -0
- package/dist/core/activation-models.d.ts +6 -0
- package/dist/core/activation-models.d.ts.map +1 -0
- package/dist/core/activation-models.js +33 -0
- package/dist/core/activation-models.js.map +1 -0
- package/dist/core/activation-planner.d.ts +38 -0
- package/dist/core/activation-planner.d.ts.map +1 -0
- package/dist/core/activation-planner.js +248 -0
- package/dist/core/activation-planner.js.map +1 -0
- package/dist/core/activation-protocol.d.ts +3 -0
- package/dist/core/activation-protocol.d.ts.map +1 -0
- package/dist/core/activation-protocol.js +9 -0
- package/dist/core/activation-protocol.js.map +1 -0
- package/dist/core/activation-transport.d.ts +15 -0
- package/dist/core/activation-transport.d.ts.map +1 -0
- package/dist/core/activation-transport.js +23 -0
- package/dist/core/activation-transport.js.map +1 -0
- package/dist/core/app.d.ts +149 -0
- package/dist/core/app.d.ts.map +1 -0
- package/dist/core/app.js +372 -0
- package/dist/core/app.js.map +1 -0
- package/dist/core/binding-service.d.ts +93 -0
- package/dist/core/binding-service.d.ts.map +1 -0
- package/dist/core/binding-service.js +281 -0
- package/dist/core/binding-service.js.map +1 -0
- package/dist/core/binding-store.d.ts +23 -0
- package/dist/core/binding-store.d.ts.map +1 -0
- package/dist/core/binding-store.js +154 -0
- package/dist/core/binding-store.js.map +1 -0
- package/dist/core/brand.d.ts +18 -0
- package/dist/core/brand.d.ts.map +1 -0
- package/dist/core/brand.js +22 -0
- package/dist/core/brand.js.map +1 -0
- package/dist/core/capabilities.d.ts +30 -0
- package/dist/core/capabilities.d.ts.map +1 -0
- package/dist/core/capabilities.js +27 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/client-state-store.d.ts +17 -0
- package/dist/core/client-state-store.d.ts.map +1 -0
- package/dist/core/client-state-store.js +47 -0
- package/dist/core/client-state-store.js.map +1 -0
- package/dist/core/codec/account.d.ts +52 -0
- package/dist/core/codec/account.d.ts.map +1 -0
- package/dist/core/codec/account.js +69 -0
- package/dist/core/codec/account.js.map +1 -0
- package/dist/core/codec/bindings.d.ts +38 -0
- package/dist/core/codec/bindings.d.ts.map +1 -0
- package/dist/core/codec/bindings.js +79 -0
- package/dist/core/codec/bindings.js.map +1 -0
- package/dist/core/codec/operations.d.ts +36 -0
- package/dist/core/codec/operations.d.ts.map +1 -0
- package/dist/core/codec/operations.js +82 -0
- package/dist/core/codec/operations.js.map +1 -0
- package/dist/core/codec/primitives.d.ts +59 -0
- package/dist/core/codec/primitives.d.ts.map +1 -0
- package/dist/core/codec/primitives.js +123 -0
- package/dist/core/codec/primitives.js.map +1 -0
- package/dist/core/codec/proxy-hub.d.ts +43 -0
- package/dist/core/codec/proxy-hub.d.ts.map +1 -0
- package/dist/core/codec/proxy-hub.js +69 -0
- package/dist/core/codec/proxy-hub.js.map +1 -0
- package/dist/core/codec/runtime.d.ts +41 -0
- package/dist/core/codec/runtime.d.ts.map +1 -0
- package/dist/core/codec/runtime.js +66 -0
- package/dist/core/codec/runtime.js.map +1 -0
- package/dist/core/codec.d.ts +43 -0
- package/dist/core/codec.d.ts.map +1 -0
- package/dist/core/codec.js +69 -0
- package/dist/core/codec.js.map +1 -0
- package/dist/core/codex-live-config.d.ts +92 -0
- package/dist/core/codex-live-config.d.ts.map +1 -0
- package/dist/core/codex-live-config.js +263 -0
- package/dist/core/codex-live-config.js.map +1 -0
- package/dist/core/config-service.d.ts +35 -0
- package/dist/core/config-service.d.ts.map +1 -0
- package/dist/core/config-service.js +87 -0
- package/dist/core/config-service.js.map +1 -0
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +45 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/db-schema.d.ts +30 -0
- package/dist/core/db-schema.d.ts.map +1 -0
- package/dist/core/db-schema.js +278 -0
- package/dist/core/db-schema.js.map +1 -0
- package/dist/core/db.d.ts +72 -0
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +192 -0
- package/dist/core/db.js.map +1 -0
- package/dist/core/doctor-fixes.d.ts +3 -0
- package/dist/core/doctor-fixes.d.ts.map +1 -0
- package/dist/core/doctor-fixes.js +102 -0
- package/dist/core/doctor-fixes.js.map +1 -0
- package/dist/core/doctor-format.d.ts +10 -0
- package/dist/core/doctor-format.d.ts.map +1 -0
- package/dist/core/doctor-format.js +45 -0
- package/dist/core/doctor-format.js.map +1 -0
- package/dist/core/doctor-report.d.ts +3 -0
- package/dist/core/doctor-report.d.ts.map +1 -0
- package/dist/core/doctor-report.js +174 -0
- package/dist/core/doctor-report.js.map +1 -0
- package/dist/core/doctor-scan.d.ts +7 -0
- package/dist/core/doctor-scan.d.ts.map +1 -0
- package/dist/core/doctor-scan.js +139 -0
- package/dist/core/doctor-scan.js.map +1 -0
- package/dist/core/doctor-types.d.ts +89 -0
- package/dist/core/doctor-types.d.ts.map +1 -0
- package/dist/core/doctor-types.js +14 -0
- package/dist/core/doctor-types.js.map +1 -0
- package/dist/core/doctor-utils.d.ts +3 -0
- package/dist/core/doctor-utils.d.ts.map +1 -0
- package/dist/core/doctor-utils.js +36 -0
- package/dist/core/doctor-utils.js.map +1 -0
- package/dist/core/doctor.d.ts +14 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +127 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/events.d.ts +58 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +88 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/journal.d.ts +23 -0
- package/dist/core/journal.d.ts.map +1 -0
- package/dist/core/journal.js +93 -0
- package/dist/core/journal.js.map +1 -0
- package/dist/core/lease-store.d.ts +22 -0
- package/dist/core/lease-store.d.ts.map +1 -0
- package/dist/core/lease-store.js +81 -0
- package/dist/core/lease-store.js.map +1 -0
- package/dist/core/migrate-bindings.d.ts +10 -0
- package/dist/core/migrate-bindings.d.ts.map +1 -0
- package/dist/core/migrate-bindings.js +98 -0
- package/dist/core/migrate-bindings.js.map +1 -0
- package/dist/core/migrate-fs.d.ts +11 -0
- package/dist/core/migrate-fs.d.ts.map +1 -0
- package/dist/core/migrate-fs.js +184 -0
- package/dist/core/migrate-fs.js.map +1 -0
- package/dist/core/model-cache-store.d.ts +27 -0
- package/dist/core/model-cache-store.d.ts.map +1 -0
- package/dist/core/model-cache-store.js +50 -0
- package/dist/core/model-cache-store.js.map +1 -0
- package/dist/core/model-discovery.d.ts +66 -0
- package/dist/core/model-discovery.d.ts.map +1 -0
- package/dist/core/model-discovery.js +127 -0
- package/dist/core/model-discovery.js.map +1 -0
- package/dist/core/model-policy.d.ts +40 -0
- package/dist/core/model-policy.d.ts.map +1 -0
- package/dist/core/model-policy.js +77 -0
- package/dist/core/model-policy.js.map +1 -0
- package/dist/core/model-roles.d.ts +9 -0
- package/dist/core/model-roles.d.ts.map +1 -0
- package/dist/core/model-roles.js +20 -0
- package/dist/core/model-roles.js.map +1 -0
- package/dist/core/mutation-lock.d.ts +31 -0
- package/dist/core/mutation-lock.d.ts.map +1 -0
- package/dist/core/mutation-lock.js +69 -0
- package/dist/core/mutation-lock.js.map +1 -0
- package/dist/core/paths.d.ts +49 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +110 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +40 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +184 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-service.d.ts +32 -0
- package/dist/core/plugin-service.d.ts.map +1 -0
- package/dist/core/plugin-service.js +110 -0
- package/dist/core/plugin-service.js.map +1 -0
- package/dist/core/plugin-store.d.ts +18 -0
- package/dist/core/plugin-store.d.ts.map +1 -0
- package/dist/core/plugin-store.js +50 -0
- package/dist/core/plugin-store.js.map +1 -0
- package/dist/core/pool-store.d.ts +44 -0
- package/dist/core/pool-store.d.ts.map +1 -0
- package/dist/core/pool-store.js +198 -0
- package/dist/core/pool-store.js.map +1 -0
- package/dist/core/preset-store.d.ts +29 -0
- package/dist/core/preset-store.d.ts.map +1 -0
- package/dist/core/preset-store.js +105 -0
- package/dist/core/preset-store.js.map +1 -0
- package/dist/core/profile-service.d.ts +50 -0
- package/dist/core/profile-service.d.ts.map +1 -0
- package/dist/core/profile-service.js +149 -0
- package/dist/core/profile-service.js.map +1 -0
- package/dist/core/profile-store.d.ts +20 -0
- package/dist/core/profile-store.d.ts.map +1 -0
- package/dist/core/profile-store.js +92 -0
- package/dist/core/profile-store.js.map +1 -0
- package/dist/core/profile-synth.d.ts +24 -0
- package/dist/core/profile-synth.d.ts.map +1 -0
- package/dist/core/profile-synth.js +30 -0
- package/dist/core/profile-synth.js.map +1 -0
- package/dist/core/project-root.d.ts +7 -0
- package/dist/core/project-root.d.ts.map +1 -0
- package/dist/core/project-root.js +23 -0
- package/dist/core/project-root.js.map +1 -0
- package/dist/core/proxy-hub-cli.d.ts +3 -0
- package/dist/core/proxy-hub-cli.d.ts.map +1 -0
- package/dist/core/proxy-hub-cli.js +80 -0
- package/dist/core/proxy-hub-cli.js.map +1 -0
- package/dist/core/proxy-hub-routes.d.ts +22 -0
- package/dist/core/proxy-hub-routes.d.ts.map +1 -0
- package/dist/core/proxy-hub-routes.js +92 -0
- package/dist/core/proxy-hub-routes.js.map +1 -0
- package/dist/core/proxy-hub-server.d.ts +59 -0
- package/dist/core/proxy-hub-server.d.ts.map +1 -0
- package/dist/core/proxy-hub-server.js +409 -0
- package/dist/core/proxy-hub-server.js.map +1 -0
- package/dist/core/proxy-hub-service.d.ts +97 -0
- package/dist/core/proxy-hub-service.d.ts.map +1 -0
- package/dist/core/proxy-hub-service.js +553 -0
- package/dist/core/proxy-hub-service.js.map +1 -0
- package/dist/core/proxy-hub-store.d.ts +28 -0
- package/dist/core/proxy-hub-store.d.ts.map +1 -0
- package/dist/core/proxy-hub-store.js +152 -0
- package/dist/core/proxy-hub-store.js.map +1 -0
- package/dist/core/proxy-lifecycle.d.ts +26 -0
- package/dist/core/proxy-lifecycle.d.ts.map +1 -0
- package/dist/core/proxy-lifecycle.js +33 -0
- package/dist/core/proxy-lifecycle.js.map +1 -0
- package/dist/core/proxy-ports.d.ts +50 -0
- package/dist/core/proxy-ports.d.ts.map +1 -0
- package/dist/core/proxy-ports.js +86 -0
- package/dist/core/proxy-ports.js.map +1 -0
- package/dist/core/proxy-service.d.ts +184 -0
- package/dist/core/proxy-service.d.ts.map +1 -0
- package/dist/core/proxy-service.js +860 -0
- package/dist/core/proxy-service.js.map +1 -0
- package/dist/core/quota-guard-policy.d.ts +8 -0
- package/dist/core/quota-guard-policy.d.ts.map +1 -0
- package/dist/core/quota-guard-policy.js +21 -0
- package/dist/core/quota-guard-policy.js.map +1 -0
- package/dist/core/realign-proxy-clients.d.ts +19 -0
- package/dist/core/realign-proxy-clients.d.ts.map +1 -0
- package/dist/core/realign-proxy-clients.js +40 -0
- package/dist/core/realign-proxy-clients.js.map +1 -0
- package/dist/core/refs.d.ts +84 -0
- package/dist/core/refs.d.ts.map +1 -0
- package/dist/core/refs.js +250 -0
- package/dist/core/refs.js.map +1 -0
- package/dist/core/registry.d.ts +46 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +70 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/resolve-source.d.ts +54 -0
- package/dist/core/resolve-source.d.ts.map +1 -0
- package/dist/core/resolve-source.js +148 -0
- package/dist/core/resolve-source.js.map +1 -0
- package/dist/core/runtime-service.d.ts +158 -0
- package/dist/core/runtime-service.d.ts.map +1 -0
- package/dist/core/runtime-service.js +422 -0
- package/dist/core/runtime-service.js.map +1 -0
- package/dist/core/service.d.ts +200 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +643 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/store-snapshot.d.ts +10 -0
- package/dist/core/store-snapshot.d.ts.map +1 -0
- package/dist/core/store-snapshot.js +79 -0
- package/dist/core/store-snapshot.js.map +1 -0
- package/dist/core/store.d.ts +68 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +159 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/tray-runtime.d.ts +15 -0
- package/dist/core/tray-runtime.d.ts.map +1 -0
- package/dist/core/tray-runtime.js +33 -0
- package/dist/core/tray-runtime.js.map +1 -0
- package/dist/core/tray-settings-service.d.ts +7 -0
- package/dist/core/tray-settings-service.d.ts.map +1 -0
- package/dist/core/tray-settings-service.js +24 -0
- package/dist/core/tray-settings-service.js.map +1 -0
- package/dist/core/update.d.ts +26 -0
- package/dist/core/update.d.ts.map +1 -0
- package/dist/core/update.js +128 -0
- package/dist/core/update.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/network/egress/allowlist.d.ts +2 -0
- package/dist/network/egress/allowlist.d.ts.map +1 -0
- package/dist/network/egress/allowlist.js +14 -0
- package/dist/network/egress/allowlist.js.map +1 -0
- package/dist/network/egress/direct.d.ts +17 -0
- package/dist/network/egress/direct.d.ts.map +1 -0
- package/dist/network/egress/direct.js +28 -0
- package/dist/network/egress/direct.js.map +1 -0
- package/dist/network/egress/errors.d.ts +4 -0
- package/dist/network/egress/errors.d.ts.map +1 -0
- package/dist/network/egress/errors.js +8 -0
- package/dist/network/egress/errors.js.map +1 -0
- package/dist/network/egress/index.d.ts +6 -0
- package/dist/network/egress/index.d.ts.map +1 -0
- package/dist/network/egress/index.js +11 -0
- package/dist/network/egress/index.js.map +1 -0
- package/dist/network/egress/types.d.ts +16 -0
- package/dist/network/egress/types.d.ts.map +1 -0
- package/dist/presentation/client-name.d.ts +14 -0
- package/dist/presentation/client-name.d.ts.map +1 -0
- package/dist/presentation/client-name.js +22 -0
- package/dist/presentation/client-name.js.map +1 -0
- package/dist/presentation/layout.d.ts +7 -0
- package/dist/presentation/layout.d.ts.map +1 -0
- package/dist/presentation/layout.js +10 -0
- package/dist/presentation/layout.js.map +1 -0
- package/dist/providers/auth-fingerprint.d.ts +56 -0
- package/dist/providers/auth-fingerprint.d.ts.map +1 -0
- package/dist/providers/auth-fingerprint.js +163 -0
- package/dist/providers/auth-fingerprint.js.map +1 -0
- package/dist/providers/claude.d.ts +43 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +191 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex-identity.d.ts +13 -0
- package/dist/providers/codex-identity.d.ts.map +1 -0
- package/dist/providers/codex-identity.js +69 -0
- package/dist/providers/codex-identity.js.map +1 -0
- package/dist/providers/codex-refresh.d.ts +30 -0
- package/dist/providers/codex-refresh.d.ts.map +1 -0
- package/dist/providers/codex-refresh.js +64 -0
- package/dist/providers/codex-refresh.js.map +1 -0
- package/dist/providers/codex-usage.d.ts +3 -0
- package/dist/providers/codex-usage.d.ts.map +1 -0
- package/dist/providers/codex-usage.js +42 -0
- package/dist/providers/codex-usage.js.map +1 -0
- package/dist/providers/codex.d.ts +61 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +212 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/gemini-antigravity-oauth.d.ts +83 -0
- package/dist/providers/gemini-antigravity-oauth.d.ts.map +1 -0
- package/dist/providers/gemini-antigravity-oauth.js +343 -0
- package/dist/providers/gemini-antigravity-oauth.js.map +1 -0
- package/dist/providers/gemini-antigravity-state.d.ts +35 -0
- package/dist/providers/gemini-antigravity-state.d.ts.map +1 -0
- package/dist/providers/gemini-antigravity-state.js +433 -0
- package/dist/providers/gemini-antigravity-state.js.map +1 -0
- package/dist/providers/gemini-env.d.ts +8 -0
- package/dist/providers/gemini-env.d.ts.map +1 -0
- package/dist/providers/gemini-env.js +78 -0
- package/dist/providers/gemini-env.js.map +1 -0
- package/dist/providers/gemini-identity.d.ts +2 -0
- package/dist/providers/gemini-identity.d.ts.map +1 -0
- package/dist/providers/gemini-identity.js +14 -0
- package/dist/providers/gemini-identity.js.map +1 -0
- package/dist/providers/gemini-proxy/main.d.ts +3 -0
- package/dist/providers/gemini-proxy/main.d.ts.map +1 -0
- package/dist/providers/gemini-proxy/main.js +176 -0
- package/dist/providers/gemini-proxy/main.js.map +1 -0
- package/dist/providers/gemini-proxy/server.d.ts +57 -0
- package/dist/providers/gemini-proxy/server.d.ts.map +1 -0
- package/dist/providers/gemini-proxy/server.js +1240 -0
- package/dist/providers/gemini-proxy/server.js.map +1 -0
- package/dist/providers/gemini-proxy-entry.d.ts +2 -0
- package/dist/providers/gemini-proxy-entry.d.ts.map +1 -0
- package/dist/providers/gemini-proxy-entry.js +16 -0
- package/dist/providers/gemini-proxy-entry.js.map +1 -0
- package/dist/providers/gemini-proxy-lifecycle.d.ts +11 -0
- package/dist/providers/gemini-proxy-lifecycle.d.ts.map +1 -0
- package/dist/providers/gemini-proxy-lifecycle.js +131 -0
- package/dist/providers/gemini-proxy-lifecycle.js.map +1 -0
- package/dist/providers/gemini.d.ts +137 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +471 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/grok-proxy/auth.d.ts +27 -0
- package/dist/providers/grok-proxy/auth.d.ts.map +1 -0
- package/dist/providers/grok-proxy/auth.js +123 -0
- package/dist/providers/grok-proxy/auth.js.map +1 -0
- package/dist/providers/grok-proxy/main.d.ts +3 -0
- package/dist/providers/grok-proxy/main.d.ts.map +1 -0
- package/dist/providers/grok-proxy/main.js +111 -0
- package/dist/providers/grok-proxy/main.js.map +1 -0
- package/dist/providers/grok-proxy/server.d.ts +46 -0
- package/dist/providers/grok-proxy/server.d.ts.map +1 -0
- package/dist/providers/grok-proxy/server.js +595 -0
- package/dist/providers/grok-proxy/server.js.map +1 -0
- package/dist/providers/grok.d.ts +38 -0
- package/dist/providers/grok.d.ts.map +1 -0
- package/dist/providers/grok.js +250 -0
- package/dist/providers/grok.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +23 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/kiro-secret-store.d.ts +39 -0
- package/dist/providers/kiro-secret-store.d.ts.map +1 -0
- package/dist/providers/kiro-secret-store.js +168 -0
- package/dist/providers/kiro-secret-store.js.map +1 -0
- package/dist/providers/kiro.d.ts +50 -0
- package/dist/providers/kiro.d.ts.map +1 -0
- package/dist/providers/kiro.js +373 -0
- package/dist/providers/kiro.js.map +1 -0
- package/dist/providers/model-policy.d.ts +15 -0
- package/dist/providers/model-policy.d.ts.map +1 -0
- package/dist/providers/model-policy.js +26 -0
- package/dist/providers/model-policy.js.map +1 -0
- package/dist/providers/opencode-auth.d.ts +67 -0
- package/dist/providers/opencode-auth.d.ts.map +1 -0
- package/dist/providers/opencode-auth.js +146 -0
- package/dist/providers/opencode-auth.js.map +1 -0
- package/dist/providers/opencode-cli-entry.d.ts +36 -0
- package/dist/providers/opencode-cli-entry.d.ts.map +1 -0
- package/dist/providers/opencode-cli-entry.js +90 -0
- package/dist/providers/opencode-cli-entry.js.map +1 -0
- package/dist/providers/opencode-proxy/abort.d.ts +8 -0
- package/dist/providers/opencode-proxy/abort.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/abort.js +42 -0
- package/dist/providers/opencode-proxy/abort.js.map +1 -0
- package/dist/providers/opencode-proxy/anthropic-handler.d.ts +4 -0
- package/dist/providers/opencode-proxy/anthropic-handler.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/anthropic-handler.js +108 -0
- package/dist/providers/opencode-proxy/anthropic-handler.js.map +1 -0
- package/dist/providers/opencode-proxy/auth.d.ts +38 -0
- package/dist/providers/opencode-proxy/auth.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/auth.js +128 -0
- package/dist/providers/opencode-proxy/auth.js.map +1 -0
- package/dist/providers/opencode-proxy/body.d.ts +9 -0
- package/dist/providers/opencode-proxy/body.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/body.js +69 -0
- package/dist/providers/opencode-proxy/body.js.map +1 -0
- package/dist/providers/opencode-proxy/catalog-handlers.d.ts +7 -0
- package/dist/providers/opencode-proxy/catalog-handlers.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/catalog-handlers.js +132 -0
- package/dist/providers/opencode-proxy/catalog-handlers.js.map +1 -0
- package/dist/providers/opencode-proxy/catalog.d.ts +41 -0
- package/dist/providers/opencode-proxy/catalog.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/catalog.js +146 -0
- package/dist/providers/opencode-proxy/catalog.js.map +1 -0
- package/dist/providers/opencode-proxy/cli.d.ts +2 -0
- package/dist/providers/opencode-proxy/cli.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/cli.js +162 -0
- package/dist/providers/opencode-proxy/cli.js.map +1 -0
- package/dist/providers/opencode-proxy/constants.d.ts +13 -0
- package/dist/providers/opencode-proxy/constants.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/constants.js +15 -0
- package/dist/providers/opencode-proxy/constants.js.map +1 -0
- package/dist/providers/opencode-proxy/context-budget.d.ts +31 -0
- package/dist/providers/opencode-proxy/context-budget.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/context-budget.js +165 -0
- package/dist/providers/opencode-proxy/context-budget.js.map +1 -0
- package/dist/providers/opencode-proxy/errors.d.ts +5 -0
- package/dist/providers/opencode-proxy/errors.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/errors.js +45 -0
- package/dist/providers/opencode-proxy/errors.js.map +1 -0
- package/dist/providers/opencode-proxy/forwarders.d.ts +7 -0
- package/dist/providers/opencode-proxy/forwarders.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/forwarders.js +214 -0
- package/dist/providers/opencode-proxy/forwarders.js.map +1 -0
- package/dist/providers/opencode-proxy/http.d.ts +11 -0
- package/dist/providers/opencode-proxy/http.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/http.js +97 -0
- package/dist/providers/opencode-proxy/http.js.map +1 -0
- package/dist/providers/opencode-proxy/models.d.ts +42 -0
- package/dist/providers/opencode-proxy/models.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/models.js +148 -0
- package/dist/providers/opencode-proxy/models.js.map +1 -0
- package/dist/providers/opencode-proxy/openai-handler.d.ts +5 -0
- package/dist/providers/opencode-proxy/openai-handler.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/openai-handler.js +115 -0
- package/dist/providers/opencode-proxy/openai-handler.js.map +1 -0
- package/dist/providers/opencode-proxy/router.d.ts +4 -0
- package/dist/providers/opencode-proxy/router.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/router.js +65 -0
- package/dist/providers/opencode-proxy/router.js.map +1 -0
- package/dist/providers/opencode-proxy/runtime.d.ts +23 -0
- package/dist/providers/opencode-proxy/runtime.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/runtime.js +158 -0
- package/dist/providers/opencode-proxy/runtime.js.map +1 -0
- package/dist/providers/opencode-proxy/server.d.ts +13 -0
- package/dist/providers/opencode-proxy/server.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/server.js +52 -0
- package/dist/providers/opencode-proxy/server.js.map +1 -0
- package/dist/providers/opencode-proxy/stream.d.ts +4 -0
- package/dist/providers/opencode-proxy/stream.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/stream.js +71 -0
- package/dist/providers/opencode-proxy/stream.js.map +1 -0
- package/dist/providers/opencode-proxy/translate-stream.d.ts +3 -0
- package/dist/providers/opencode-proxy/translate-stream.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/translate-stream.js +205 -0
- package/dist/providers/opencode-proxy/translate-stream.js.map +1 -0
- package/dist/providers/opencode-proxy/translate.d.ts +11 -0
- package/dist/providers/opencode-proxy/translate.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/translate.js +250 -0
- package/dist/providers/opencode-proxy/translate.js.map +1 -0
- package/dist/providers/opencode-proxy/types.d.ts +110 -0
- package/dist/providers/opencode-proxy/types.d.ts.map +1 -0
- package/dist/providers/opencode-proxy/types.js +38 -0
- package/dist/providers/opencode-proxy/types.js.map +1 -0
- package/dist/providers/opencode-proxy-lifecycle.d.ts +11 -0
- package/dist/providers/opencode-proxy-lifecycle.d.ts.map +1 -0
- package/dist/providers/opencode-proxy-lifecycle.js +144 -0
- package/dist/providers/opencode-proxy-lifecycle.js.map +1 -0
- package/dist/providers/opencode.d.ts +40 -0
- package/dist/providers/opencode.d.ts.map +1 -0
- package/dist/providers/opencode.js +190 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/protocol/anthropic-convert.d.ts +12 -0
- package/dist/providers/protocol/anthropic-convert.d.ts.map +1 -0
- package/dist/providers/protocol/anthropic-convert.js +113 -0
- package/dist/providers/protocol/anthropic-convert.js.map +1 -0
- package/dist/providers/protocol/anthropic-helpers.d.ts +13 -0
- package/dist/providers/protocol/anthropic-helpers.d.ts.map +1 -0
- package/dist/providers/protocol/anthropic-helpers.js +179 -0
- package/dist/providers/protocol/anthropic-helpers.js.map +1 -0
- package/dist/providers/protocol/anthropic-stream-reader.d.ts +13 -0
- package/dist/providers/protocol/anthropic-stream-reader.d.ts.map +1 -0
- package/dist/providers/protocol/anthropic-stream-reader.js +46 -0
- package/dist/providers/protocol/anthropic-stream-reader.js.map +1 -0
- package/dist/providers/protocol/anthropic-stream.d.ts +7 -0
- package/dist/providers/protocol/anthropic-stream.d.ts.map +1 -0
- package/dist/providers/protocol/anthropic-stream.js +318 -0
- package/dist/providers/protocol/anthropic-stream.js.map +1 -0
- package/dist/providers/protocol/anthropic-types.d.ts +240 -0
- package/dist/providers/protocol/anthropic-types.d.ts.map +1 -0
- package/dist/providers/protocol/anthropic.d.ts +20 -0
- package/dist/providers/protocol/anthropic.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-anthropic.d.ts +15 -0
- package/dist/providers/protocol/gemini/translate-anthropic.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-anthropic.js +84 -0
- package/dist/providers/protocol/gemini/translate-anthropic.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-chat.d.ts +5 -0
- package/dist/providers/protocol/gemini/translate-chat.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-chat.js +142 -0
- package/dist/providers/protocol/gemini/translate-chat.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-models.d.ts +40 -0
- package/dist/providers/protocol/gemini/translate-models.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-models.js +186 -0
- package/dist/providers/protocol/gemini/translate-models.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-responses.d.ts +6 -0
- package/dist/providers/protocol/gemini/translate-responses.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-responses.js +187 -0
- package/dist/providers/protocol/gemini/translate-responses.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-schema.d.ts +9 -0
- package/dist/providers/protocol/gemini/translate-schema.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-schema.js +48 -0
- package/dist/providers/protocol/gemini/translate-schema.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-shared.d.ts +8 -0
- package/dist/providers/protocol/gemini/translate-shared.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-shared.js +47 -0
- package/dist/providers/protocol/gemini/translate-shared.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-thinking.d.ts +7 -0
- package/dist/providers/protocol/gemini/translate-thinking.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate-thinking.js +65 -0
- package/dist/providers/protocol/gemini/translate-thinking.js.map +1 -0
- package/dist/providers/protocol/gemini/translate-types.d.ts +133 -0
- package/dist/providers/protocol/gemini/translate-types.d.ts.map +1 -0
- package/dist/providers/protocol/gemini/translate.d.ts +7 -0
- package/dist/providers/protocol/gemini/translate.d.ts.map +1 -0
- package/dist/providers/protocol/json-schema.d.ts +52 -0
- package/dist/providers/protocol/json-schema.d.ts.map +1 -0
- package/dist/providers/protocol/json-schema.js +189 -0
- package/dist/providers/protocol/json-schema.js.map +1 -0
- package/dist/providers/protocol/token-estimate.d.ts +15 -0
- package/dist/providers/protocol/token-estimate.d.ts.map +1 -0
- package/dist/providers/protocol/token-estimate.js +34 -0
- package/dist/providers/protocol/token-estimate.js.map +1 -0
- package/dist/providers/proxy-hub-backend.d.ts +4 -0
- package/dist/providers/proxy-hub-backend.d.ts.map +1 -0
- package/dist/providers/proxy-hub-backend.js +11 -0
- package/dist/providers/proxy-hub-backend.js.map +1 -0
- package/dist/providers/proxy-process.d.ts +35 -0
- package/dist/providers/proxy-process.d.ts.map +1 -0
- package/dist/providers/proxy-process.js +119 -0
- package/dist/providers/proxy-process.js.map +1 -0
- package/dist/providers/proxy-shared.d.ts +43 -0
- package/dist/providers/proxy-shared.d.ts.map +1 -0
- package/dist/providers/proxy-shared.js +128 -0
- package/dist/providers/proxy-shared.js.map +1 -0
- package/dist/providers/quota-guard.d.ts +49 -0
- package/dist/providers/quota-guard.d.ts.map +1 -0
- package/dist/providers/quota-guard.js +107 -0
- package/dist/providers/quota-guard.js.map +1 -0
- package/dist/providers/reasoning.d.ts +27 -0
- package/dist/providers/reasoning.d.ts.map +1 -0
- package/dist/providers/reasoning.js +61 -0
- package/dist/providers/reasoning.js.map +1 -0
- package/dist/providers/upstream-policy.d.ts +33 -0
- package/dist/providers/upstream-policy.d.ts.map +1 -0
- package/dist/providers/upstream-policy.js +97 -0
- package/dist/providers/upstream-policy.js.map +1 -0
- package/dist/public-types.d.ts +3 -0
- package/dist/public-types.d.ts.map +1 -0
- package/dist/public.d.ts +19 -0
- package/dist/public.d.ts.map +1 -0
- package/dist/public.js +16 -0
- package/dist/public.js.map +1 -0
- package/dist/sources/account-adapters.d.ts +64 -0
- package/dist/sources/account-adapters.d.ts.map +1 -0
- package/dist/sources/account-adapters.js +205 -0
- package/dist/sources/account-adapters.js.map +1 -0
- package/dist/sources/gateway-adapters.d.ts +26 -0
- package/dist/sources/gateway-adapters.d.ts.map +1 -0
- package/dist/sources/gateway-adapters.js +43 -0
- package/dist/sources/gateway-adapters.js.map +1 -0
- package/dist/sources/kiro-proxy-bin.d.ts +41 -0
- package/dist/sources/kiro-proxy-bin.d.ts.map +1 -0
- package/dist/sources/kiro-proxy-bin.js +140 -0
- package/dist/sources/kiro-proxy-bin.js.map +1 -0
- package/dist/sources/proxy-hub-adapters.d.ts +7 -0
- package/dist/sources/proxy-hub-adapters.d.ts.map +1 -0
- package/dist/sources/proxy-hub-adapters.js +26 -0
- package/dist/sources/proxy-hub-adapters.js.map +1 -0
- package/dist/testing.d.ts +9 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +6 -0
- package/dist/tray/AnyPickTray.swift +3 -0
- package/dist/tray/activity.d.ts +18 -0
- package/dist/tray/activity.d.ts.map +1 -0
- package/dist/tray/activity.js +51 -0
- package/dist/tray/activity.js.map +1 -0
- package/dist/tray/app-icons/icon-1024.png +0 -0
- package/dist/tray/app-icons/icon-128.png +0 -0
- package/dist/tray/app-icons/icon-16.png +0 -0
- package/dist/tray/app-icons/icon-256.png +0 -0
- package/dist/tray/app-icons/icon-32.png +0 -0
- package/dist/tray/app-icons/icon-512.png +0 -0
- package/dist/tray/app-icons/icon-64.png +0 -0
- package/dist/tray/icons/claude.svg +1 -0
- package/dist/tray/icons/googlegemini.svg +1 -0
- package/dist/tray/icons/grok.svg +1 -0
- package/dist/tray/icons/kiro.svg +1 -0
- package/dist/tray/icons/openai.svg +1 -0
- package/dist/tray/icons/opencode.svg +1 -0
- package/dist/tray/icons/openrouter.svg +1 -0
- package/dist/tray/model-role-actions.d.ts +15 -0
- package/dist/tray/model-role-actions.d.ts.map +1 -0
- package/dist/tray/model-role-actions.js +41 -0
- package/dist/tray/model-role-actions.js.map +1 -0
- package/dist/tray/native/AccountsPanel.swift +434 -0
- package/dist/tray/native/AppEntry.swift +229 -0
- package/dist/tray/native/MainWindow.swift +300 -0
- package/dist/tray/native/ManageFormChrome.swift +332 -0
- package/dist/tray/native/ManageForms.swift +472 -0
- package/dist/tray/native/ManagePanel.swift +356 -0
- package/dist/tray/native/Models.swift +259 -0
- package/dist/tray/native/ModelsEditor.swift +390 -0
- package/dist/tray/native/ModelsOverview.swift +76 -0
- package/dist/tray/native/ModelsPickers.swift +273 -0
- package/dist/tray/native/ModelsRoutePickers.swift +718 -0
- package/dist/tray/native/MonitorPanel.swift +375 -0
- package/dist/tray/native/ProxyPanel.swift +326 -0
- package/dist/tray/native/QuickActivityRow.swift +40 -0
- package/dist/tray/native/QuickNav.swift +62 -0
- package/dist/tray/native/QuickPanel.swift +447 -0
- package/dist/tray/native/QuickRouteRow.swift +189 -0
- package/dist/tray/native/QuickServiceRows.swift +292 -0
- package/dist/tray/native/RoutingIssues.swift +293 -0
- package/dist/tray/native/SettingsPanel.swift +225 -0
- package/dist/tray/native/SharedUI.swift +681 -0
- package/dist/tray/native/Store.swift +540 -0
- package/dist/tray/native/Theme.swift +139 -0
- package/dist/tray/native/TrayChrome.swift +657 -0
- package/dist/tray/native/TrayControls.swift +475 -0
- package/dist/tray/native/TrayPreferences.swift +46 -0
- package/dist/tray/native/sources.txt +26 -0
- package/dist/tray/native-sources.d.ts +8 -0
- package/dist/tray/native-sources.d.ts.map +1 -0
- package/dist/tray/native-sources.js +19 -0
- package/dist/tray/native-sources.js.map +1 -0
- package/dist/tray/protocol.d.ts +79 -0
- package/dist/tray/protocol.d.ts.map +1 -0
- package/dist/tray/protocol.js +145 -0
- package/dist/tray/protocol.js.map +1 -0
- package/dist/tray/settings.d.ts +15 -0
- package/dist/tray/settings.d.ts.map +1 -0
- package/dist/tray/settings.js +72 -0
- package/dist/tray/settings.js.map +1 -0
- package/dist/tray/snapshot-client-routes.d.ts +11 -0
- package/dist/tray/snapshot-client-routes.d.ts.map +1 -0
- package/dist/tray/snapshot-client-routes.js +305 -0
- package/dist/tray/snapshot-client-routes.js.map +1 -0
- package/dist/tray/snapshot-helpers.d.ts +20 -0
- package/dist/tray/snapshot-helpers.d.ts.map +1 -0
- package/dist/tray/snapshot-helpers.js +74 -0
- package/dist/tray/snapshot-helpers.js.map +1 -0
- package/dist/tray/snapshot-hub.d.ts +7 -0
- package/dist/tray/snapshot-hub.d.ts.map +1 -0
- package/dist/tray/snapshot-hub.js +93 -0
- package/dist/tray/snapshot-hub.js.map +1 -0
- package/dist/tray/snapshot-resources.d.ts +19 -0
- package/dist/tray/snapshot-resources.d.ts.map +1 -0
- package/dist/tray/snapshot-resources.js +216 -0
- package/dist/tray/snapshot-resources.js.map +1 -0
- package/dist/tray/snapshot-types.d.ts +229 -0
- package/dist/tray/snapshot-types.d.ts.map +1 -0
- package/dist/tray/snapshot-usage.d.ts +9 -0
- package/dist/tray/snapshot-usage.d.ts.map +1 -0
- package/dist/tray/snapshot-usage.js +35 -0
- package/dist/tray/snapshot-usage.js.map +1 -0
- package/dist/tray/snapshot.d.ts +7 -0
- package/dist/tray/snapshot.d.ts.map +1 -0
- package/dist/tray/snapshot.js +48 -0
- package/dist/tray/snapshot.js.map +1 -0
- package/dist/tray/supervisor-actions.d.ts +19 -0
- package/dist/tray/supervisor-actions.d.ts.map +1 -0
- package/dist/tray/supervisor-actions.js +224 -0
- package/dist/tray/supervisor-actions.js.map +1 -0
- package/dist/tray/supervisor-activity.d.ts +5 -0
- package/dist/tray/supervisor-activity.d.ts.map +1 -0
- package/dist/tray/supervisor-activity.js +19 -0
- package/dist/tray/supervisor-activity.js.map +1 -0
- package/dist/tray/supervisor-errors.d.ts +9 -0
- package/dist/tray/supervisor-errors.d.ts.map +1 -0
- package/dist/tray/supervisor-errors.js +91 -0
- package/dist/tray/supervisor-errors.js.map +1 -0
- package/dist/tray/supervisor-logs.d.ts +6 -0
- package/dist/tray/supervisor-logs.d.ts.map +1 -0
- package/dist/tray/supervisor-logs.js +52 -0
- package/dist/tray/supervisor-logs.js.map +1 -0
- package/dist/tray/supervisor-mutations.d.ts +14 -0
- package/dist/tray/supervisor-mutations.d.ts.map +1 -0
- package/dist/tray/supervisor-mutations.js +218 -0
- package/dist/tray/supervisor-mutations.js.map +1 -0
- package/dist/tray/supervisor-native.d.ts +22 -0
- package/dist/tray/supervisor-native.d.ts.map +1 -0
- package/dist/tray/supervisor-native.js +227 -0
- package/dist/tray/supervisor-native.js.map +1 -0
- package/dist/tray/supervisor-proxies.d.ts +6 -0
- package/dist/tray/supervisor-proxies.d.ts.map +1 -0
- package/dist/tray/supervisor-proxies.js +37 -0
- package/dist/tray/supervisor-proxies.js.map +1 -0
- package/dist/tray/supervisor-tauri.d.ts +13 -0
- package/dist/tray/supervisor-tauri.d.ts.map +1 -0
- package/dist/tray/supervisor-tauri.js +36 -0
- package/dist/tray/supervisor-tauri.js.map +1 -0
- package/dist/tray/supervisor.d.ts +17 -0
- package/dist/tray/supervisor.d.ts.map +1 -0
- package/dist/tray/supervisor.js +372 -0
- package/dist/tray/supervisor.js.map +1 -0
- package/dist/tray/terminal-launcher.d.ts +12 -0
- package/dist/tray/terminal-launcher.d.ts.map +1 -0
- package/dist/tray/terminal-launcher.js +130 -0
- package/dist/tray/terminal-launcher.js.map +1 -0
- package/dist/tui/actions/ensure-proxy-up.d.ts +15 -0
- package/dist/tui/actions/ensure-proxy-up.d.ts.map +1 -0
- package/dist/tui/actions/ensure-proxy-up.js +41 -0
- package/dist/tui/actions/ensure-proxy-up.js.map +1 -0
- package/dist/tui/actions/use-account-actions.d.ts +35 -0
- package/dist/tui/actions/use-account-actions.d.ts.map +1 -0
- package/dist/tui/actions/use-account-actions.js +527 -0
- package/dist/tui/actions/use-account-actions.js.map +1 -0
- package/dist/tui/actions/use-app-bindings.d.ts +83 -0
- package/dist/tui/actions/use-app-bindings.d.ts.map +1 -0
- package/dist/tui/actions/use-app-bindings.js +472 -0
- package/dist/tui/actions/use-app-bindings.js.map +1 -0
- package/dist/tui/actions/use-gateway-actions.d.ts +45 -0
- package/dist/tui/actions/use-gateway-actions.d.ts.map +1 -0
- package/dist/tui/actions/use-gateway-actions.js +370 -0
- package/dist/tui/actions/use-gateway-actions.js.map +1 -0
- package/dist/tui/actions/use-home-filter.d.ts +24 -0
- package/dist/tui/actions/use-home-filter.d.ts.map +1 -0
- package/dist/tui/actions/use-home-filter.js +48 -0
- package/dist/tui/actions/use-home-filter.js.map +1 -0
- package/dist/tui/actions/use-model-role-editor.d.ts +44 -0
- package/dist/tui/actions/use-model-role-editor.d.ts.map +1 -0
- package/dist/tui/actions/use-model-role-editor.js +68 -0
- package/dist/tui/actions/use-model-role-editor.js.map +1 -0
- package/dist/tui/actions/use-provider-filter.d.ts +10 -0
- package/dist/tui/actions/use-provider-filter.d.ts.map +1 -0
- package/dist/tui/actions/use-provider-filter.js +22 -0
- package/dist/tui/actions/use-provider-filter.js.map +1 -0
- package/dist/tui/actions/use-proxy-actions.d.ts +31 -0
- package/dist/tui/actions/use-proxy-actions.d.ts.map +1 -0
- package/dist/tui/actions/use-proxy-actions.js +474 -0
- package/dist/tui/actions/use-proxy-actions.js.map +1 -0
- package/dist/tui/actions/use-text-input-submit.d.ts +16 -0
- package/dist/tui/actions/use-text-input-submit.d.ts.map +1 -0
- package/dist/tui/actions/use-text-input-submit.js +96 -0
- package/dist/tui/actions/use-text-input-submit.js.map +1 -0
- package/dist/tui/actions/use-tray-runtime-actions.d.ts +18 -0
- package/dist/tui/actions/use-tray-runtime-actions.d.ts.map +1 -0
- package/dist/tui/actions/use-tray-runtime-actions.js +78 -0
- package/dist/tui/actions/use-tray-runtime-actions.js.map +1 -0
- package/dist/tui/app-ui-helpers.d.ts +14 -0
- package/dist/tui/app-ui-helpers.d.ts.map +1 -0
- package/dist/tui/app-ui-helpers.js +48 -0
- package/dist/tui/app-ui-helpers.js.map +1 -0
- package/dist/tui/app-ui.d.ts +19 -0
- package/dist/tui/app-ui.d.ts.map +1 -0
- package/dist/tui/app-ui.js +98 -0
- package/dist/tui/app-ui.js.map +1 -0
- package/dist/tui/components/chrome/header.d.ts +39 -0
- package/dist/tui/components/chrome/header.d.ts.map +1 -0
- package/dist/tui/components/chrome/header.js +161 -0
- package/dist/tui/components/chrome/header.js.map +1 -0
- package/dist/tui/components/chrome/inputs.d.ts +34 -0
- package/dist/tui/components/chrome/inputs.d.ts.map +1 -0
- package/dist/tui/components/chrome/inputs.js +82 -0
- package/dist/tui/components/chrome/inputs.js.map +1 -0
- package/dist/tui/components/chrome/layout.d.ts +61 -0
- package/dist/tui/components/chrome/layout.d.ts.map +1 -0
- package/dist/tui/components/chrome/layout.js +119 -0
- package/dist/tui/components/chrome/layout.js.map +1 -0
- package/dist/tui/components/chrome/legacy.d.ts +84 -0
- package/dist/tui/components/chrome/legacy.d.ts.map +1 -0
- package/dist/tui/components/chrome/legacy.js +6 -0
- package/dist/tui/components/chrome/rows.d.ts +89 -0
- package/dist/tui/components/chrome/rows.d.ts.map +1 -0
- package/dist/tui/components/chrome/rows.js +151 -0
- package/dist/tui/components/chrome/rows.js.map +1 -0
- package/dist/tui/components/chrome/status.d.ts +50 -0
- package/dist/tui/components/chrome/status.d.ts.map +1 -0
- package/dist/tui/components/chrome/status.js +157 -0
- package/dist/tui/components/chrome/status.js.map +1 -0
- package/dist/tui/components/chrome.d.ts +7 -0
- package/dist/tui/components/chrome.d.ts.map +1 -0
- package/dist/tui/components/chrome.js +7 -0
- package/dist/tui/components.d.ts +26 -0
- package/dist/tui/components.d.ts.map +1 -0
- package/dist/tui/components.js +182 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/model/anypick.d.ts +106 -0
- package/dist/tui/model/anypick.d.ts.map +1 -0
- package/dist/tui/model/anypick.js +116 -0
- package/dist/tui/model/anypick.js.map +1 -0
- package/dist/tui/model/bindings.d.ts +39 -0
- package/dist/tui/model/bindings.d.ts.map +1 -0
- package/dist/tui/model/bindings.js +102 -0
- package/dist/tui/model/bindings.js.map +1 -0
- package/dist/tui/model/detail.d.ts +6 -0
- package/dist/tui/model/detail.d.ts.map +1 -0
- package/dist/tui/model/detail.js +85 -0
- package/dist/tui/model/detail.js.map +1 -0
- package/dist/tui/model/gateway.d.ts +46 -0
- package/dist/tui/model/gateway.d.ts.map +1 -0
- package/dist/tui/model/gateway.js +134 -0
- package/dist/tui/model/gateway.js.map +1 -0
- package/dist/tui/model/home-format.d.ts +52 -0
- package/dist/tui/model/home-format.d.ts.map +1 -0
- package/dist/tui/model/home-format.js +64 -0
- package/dist/tui/model/home-format.js.map +1 -0
- package/dist/tui/model/home-load.d.ts +8 -0
- package/dist/tui/model/home-load.d.ts.map +1 -0
- package/dist/tui/model/home-load.js +244 -0
- package/dist/tui/model/home-load.js.map +1 -0
- package/dist/tui/model/identity.d.ts +53 -0
- package/dist/tui/model/identity.d.ts.map +1 -0
- package/dist/tui/model/identity.js +176 -0
- package/dist/tui/model/identity.js.map +1 -0
- package/dist/tui/model/line-editor.d.ts +99 -0
- package/dist/tui/model/line-editor.d.ts.map +1 -0
- package/dist/tui/model/line-editor.js +186 -0
- package/dist/tui/model/line-editor.js.map +1 -0
- package/dist/tui/model/names.d.ts +28 -0
- package/dist/tui/model/names.d.ts.map +1 -0
- package/dist/tui/model/names.js +42 -0
- package/dist/tui/model/names.js.map +1 -0
- package/dist/tui/model/pool.d.ts +11 -0
- package/dist/tui/model/pool.d.ts.map +1 -0
- package/dist/tui/model/pool.js +115 -0
- package/dist/tui/model/pool.js.map +1 -0
- package/dist/tui/model/provider-filter.d.ts +14 -0
- package/dist/tui/model/provider-filter.d.ts.map +1 -0
- package/dist/tui/model/provider-filter.js +46 -0
- package/dist/tui/model/provider-filter.js.map +1 -0
- package/dist/tui/model/proxy-hub.d.ts +23 -0
- package/dist/tui/model/proxy-hub.d.ts.map +1 -0
- package/dist/tui/model/proxy-hub.js +69 -0
- package/dist/tui/model/proxy-hub.js.map +1 -0
- package/dist/tui/model/proxy-labels.d.ts +5 -0
- package/dist/tui/model/proxy-labels.d.ts.map +1 -0
- package/dist/tui/model/proxy-labels.js +18 -0
- package/dist/tui/model/proxy-labels.js.map +1 -0
- package/dist/tui/model/proxy.d.ts +15 -0
- package/dist/tui/model/proxy.d.ts.map +1 -0
- package/dist/tui/model/proxy.js +214 -0
- package/dist/tui/model/proxy.js.map +1 -0
- package/dist/tui/model/root.d.ts +20 -0
- package/dist/tui/model/root.d.ts.map +1 -0
- package/dist/tui/model/root.js +126 -0
- package/dist/tui/model/root.js.map +1 -0
- package/dist/tui/model/route-builder.d.ts +25 -0
- package/dist/tui/model/route-builder.d.ts.map +1 -0
- package/dist/tui/model/route-builder.js +199 -0
- package/dist/tui/model/route-builder.js.map +1 -0
- package/dist/tui/model/screen.d.ts +260 -0
- package/dist/tui/model/screen.d.ts.map +1 -0
- package/dist/tui/model/types.d.ts +179 -0
- package/dist/tui/model/types.d.ts.map +1 -0
- package/dist/tui/model.d.ts +18 -0
- package/dist/tui/model.d.ts.map +1 -0
- package/dist/tui/model.js +17 -0
- package/dist/tui/proxy-models-fetch.d.ts +34 -0
- package/dist/tui/proxy-models-fetch.d.ts.map +1 -0
- package/dist/tui/proxy-models-fetch.js +87 -0
- package/dist/tui/proxy-models-fetch.js.map +1 -0
- package/dist/tui/routes/account.d.ts +4 -0
- package/dist/tui/routes/account.d.ts.map +1 -0
- package/dist/tui/routes/account.js +327 -0
- package/dist/tui/routes/account.js.map +1 -0
- package/dist/tui/routes/apps.d.ts +3 -0
- package/dist/tui/routes/apps.d.ts.map +1 -0
- package/dist/tui/routes/apps.js +296 -0
- package/dist/tui/routes/apps.js.map +1 -0
- package/dist/tui/routes/common.d.ts +4 -0
- package/dist/tui/routes/common.d.ts.map +1 -0
- package/dist/tui/routes/common.js +117 -0
- package/dist/tui/routes/common.js.map +1 -0
- package/dist/tui/routes/context.d.ts +43 -0
- package/dist/tui/routes/context.d.ts.map +1 -0
- package/dist/tui/routes/gateway.d.ts +3 -0
- package/dist/tui/routes/gateway.d.ts.map +1 -0
- package/dist/tui/routes/gateway.js +199 -0
- package/dist/tui/routes/gateway.js.map +1 -0
- package/dist/tui/routes/proxy.d.ts +3 -0
- package/dist/tui/routes/proxy.d.ts.map +1 -0
- package/dist/tui/routes/proxy.js +234 -0
- package/dist/tui/routes/proxy.js.map +1 -0
- package/dist/tui/screens/account-detail.d.ts +14 -0
- package/dist/tui/screens/account-detail.d.ts.map +1 -0
- package/dist/tui/screens/account-detail.js +98 -0
- package/dist/tui/screens/account-detail.js.map +1 -0
- package/dist/tui/screens/accounts-home.d.ts +42 -0
- package/dist/tui/screens/accounts-home.d.ts.map +1 -0
- package/dist/tui/screens/accounts-home.js +321 -0
- package/dist/tui/screens/accounts-home.js.map +1 -0
- package/dist/tui/screens/add-account.d.ts +70 -0
- package/dist/tui/screens/add-account.d.ts.map +1 -0
- package/dist/tui/screens/add-account.js +323 -0
- package/dist/tui/screens/add-account.js.map +1 -0
- package/dist/tui/screens/anypick-home.d.ts +39 -0
- package/dist/tui/screens/anypick-home.d.ts.map +1 -0
- package/dist/tui/screens/anypick-home.js +253 -0
- package/dist/tui/screens/anypick-home.js.map +1 -0
- package/dist/tui/screens/anypick-preview.d.ts +13 -0
- package/dist/tui/screens/anypick-preview.d.ts.map +1 -0
- package/dist/tui/screens/anypick-preview.js +49 -0
- package/dist/tui/screens/anypick-preview.js.map +1 -0
- package/dist/tui/screens/app-route-preview.d.ts +14 -0
- package/dist/tui/screens/app-route-preview.d.ts.map +1 -0
- package/dist/tui/screens/app-route-preview.js +35 -0
- package/dist/tui/screens/app-route-preview.js.map +1 -0
- package/dist/tui/screens/app-route-source.d.ts +15 -0
- package/dist/tui/screens/app-route-source.d.ts.map +1 -0
- package/dist/tui/screens/app-route-source.js +97 -0
- package/dist/tui/screens/app-route-source.js.map +1 -0
- package/dist/tui/screens/apps-home.d.ts +22 -0
- package/dist/tui/screens/apps-home.d.ts.map +1 -0
- package/dist/tui/screens/apps-home.js +111 -0
- package/dist/tui/screens/apps-home.js.map +1 -0
- package/dist/tui/screens/confirm.d.ts +19 -0
- package/dist/tui/screens/confirm.d.ts.map +1 -0
- package/dist/tui/screens/confirm.js +42 -0
- package/dist/tui/screens/confirm.js.map +1 -0
- package/dist/tui/screens/credential-form.d.ts +30 -0
- package/dist/tui/screens/credential-form.d.ts.map +1 -0
- package/dist/tui/screens/credential-form.js +241 -0
- package/dist/tui/screens/credential-form.js.map +1 -0
- package/dist/tui/screens/gateway-connection-form.d.ts +16 -0
- package/dist/tui/screens/gateway-connection-form.d.ts.map +1 -0
- package/dist/tui/screens/gateway-connection-form.js +127 -0
- package/dist/tui/screens/gateway-connection-form.js.map +1 -0
- package/dist/tui/screens/gateway-pick-provider.d.ts +19 -0
- package/dist/tui/screens/gateway-pick-provider.d.ts.map +1 -0
- package/dist/tui/screens/gateway-pick-provider.js +62 -0
- package/dist/tui/screens/gateway-pick-provider.js.map +1 -0
- package/dist/tui/screens/gateways-home.d.ts +38 -0
- package/dist/tui/screens/gateways-home.d.ts.map +1 -0
- package/dist/tui/screens/gateways-home.js +247 -0
- package/dist/tui/screens/gateways-home.js.map +1 -0
- package/dist/tui/screens/health.d.ts +16 -0
- package/dist/tui/screens/health.d.ts.map +1 -0
- package/dist/tui/screens/health.js +109 -0
- package/dist/tui/screens/health.js.map +1 -0
- package/dist/tui/screens/help.d.ts +10 -0
- package/dist/tui/screens/help.d.ts.map +1 -0
- package/dist/tui/screens/help.js +213 -0
- package/dist/tui/screens/help.js.map +1 -0
- package/dist/tui/screens/manage-apps.d.ts +29 -0
- package/dist/tui/screens/manage-apps.d.ts.map +1 -0
- package/dist/tui/screens/manage-apps.js +165 -0
- package/dist/tui/screens/manage-apps.js.map +1 -0
- package/dist/tui/screens/proxy-board-helpers.d.ts +9 -0
- package/dist/tui/screens/proxy-board-helpers.d.ts.map +1 -0
- package/dist/tui/screens/proxy-board-helpers.js +70 -0
- package/dist/tui/screens/proxy-board-helpers.js.map +1 -0
- package/dist/tui/screens/proxy-board.d.ts +43 -0
- package/dist/tui/screens/proxy-board.d.ts.map +1 -0
- package/dist/tui/screens/proxy-board.js +351 -0
- package/dist/tui/screens/proxy-board.js.map +1 -0
- package/dist/tui/screens/proxy-hub.d.ts +21 -0
- package/dist/tui/screens/proxy-hub.d.ts.map +1 -0
- package/dist/tui/screens/proxy-hub.js +150 -0
- package/dist/tui/screens/proxy-hub.js.map +1 -0
- package/dist/tui/screens/proxy-models-utils.d.ts +13 -0
- package/dist/tui/screens/proxy-models-utils.d.ts.map +1 -0
- package/dist/tui/screens/proxy-models-utils.js +53 -0
- package/dist/tui/screens/proxy-models-utils.js.map +1 -0
- package/dist/tui/screens/proxy-models.d.ts +65 -0
- package/dist/tui/screens/proxy-models.d.ts.map +1 -0
- package/dist/tui/screens/proxy-models.js +252 -0
- package/dist/tui/screens/proxy-models.js.map +1 -0
- package/dist/tui/screens/proxy.d.ts +26 -0
- package/dist/tui/screens/proxy.d.ts.map +1 -0
- package/dist/tui/screens/text-input.d.ts +18 -0
- package/dist/tui/screens/text-input.d.ts.map +1 -0
- package/dist/tui/screens/text-input.js +67 -0
- package/dist/tui/screens/text-input.js.map +1 -0
- package/dist/tui/screens/tray-runtime.d.ts +19 -0
- package/dist/tui/screens/tray-runtime.d.ts.map +1 -0
- package/dist/tui/screens/tray-runtime.js +108 -0
- package/dist/tui/screens/tray-runtime.js.map +1 -0
- package/dist/tui/use-tui-nav.d.ts +40 -0
- package/dist/tui/use-tui-nav.d.ts.map +1 -0
- package/dist/tui/use-tui-nav.js +256 -0
- package/dist/tui/use-tui-nav.js.map +1 -0
- package/dist/tui/use-tui-shell.d.ts +46 -0
- package/dist/tui/use-tui-shell.d.ts.map +1 -0
- package/dist/tui/use-tui-shell.js +95 -0
- package/dist/tui/use-tui-shell.js.map +1 -0
- package/dist/types/account.d.ts +410 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +7 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/bindings.d.ts +300 -0
- package/dist/types/bindings.d.ts.map +1 -0
- package/dist/types/catalog.d.ts +165 -0
- package/dist/types/catalog.d.ts.map +1 -0
- package/dist/types/clients.d.ts +174 -0
- package/dist/types/clients.d.ts.map +1 -0
- package/dist/types/clients.js +11 -0
- package/dist/types/clients.js.map +1 -0
- package/dist/types/plugins.d.ts +89 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +14 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/proxy-hub.d.ts +109 -0
- package/dist/types/proxy-hub.d.ts.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils/errors.d.ts +61 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +119 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/fs.d.ts +39 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +126 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/lock.d.ts +33 -0
- package/dist/utils/lock.d.ts.map +1 -0
- package/dist/utils/lock.js +95 -0
- package/dist/utils/lock.js.map +1 -0
- package/dist/utils/log.d.ts +10 -0
- package/dist/utils/log.d.ts.map +1 -0
- package/dist/utils/log.js +21 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/network.d.ts +3 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +13 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/process/binary.d.ts +14 -0
- package/dist/utils/process/binary.d.ts.map +1 -0
- package/dist/utils/process/binary.js +29 -0
- package/dist/utils/process/binary.js.map +1 -0
- package/dist/utils/process/follow.d.ts +2 -0
- package/dist/utils/process/follow.d.ts.map +1 -0
- package/dist/utils/process/follow.js +90 -0
- package/dist/utils/process/follow.js.map +1 -0
- package/dist/utils/process/health.d.ts +43 -0
- package/dist/utils/process/health.d.ts.map +1 -0
- package/dist/utils/process/health.js +132 -0
- package/dist/utils/process/health.js.map +1 -0
- package/dist/utils/process/pid.d.ts +95 -0
- package/dist/utils/process/pid.d.ts.map +1 -0
- package/dist/utils/process/pid.js +243 -0
- package/dist/utils/process/pid.js.map +1 -0
- package/dist/utils/process.d.ts +5 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +5 -0
- package/dist/utils/slug.d.ts +18 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +42 -0
- package/dist/utils/slug.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ApiStyle, ApplyContext, ModelMap, RuntimeProfile } from '../types.js';
|
|
2
|
+
import { type CatalogRegistry } from '../catalog/providers.js';
|
|
3
|
+
export interface ResolvedRuntime {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
endpoint: string;
|
|
6
|
+
apiStyle: ApiStyle;
|
|
7
|
+
defaultModel?: string;
|
|
8
|
+
models: ModelMap;
|
|
9
|
+
headers: Record<string, string>;
|
|
10
|
+
/** Models from the profile (optionally expanded via models map). */
|
|
11
|
+
roles: {
|
|
12
|
+
default?: string;
|
|
13
|
+
sonnet?: string;
|
|
14
|
+
opus?: string;
|
|
15
|
+
haiku?: string;
|
|
16
|
+
};
|
|
17
|
+
overlay: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve profile → concrete runtime values for a client.
|
|
21
|
+
*
|
|
22
|
+
* Models live on the profile (set at create/edit). Switching a profile
|
|
23
|
+
* just reuses those fields — no per-client ceremony.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveRuntime(profile: RuntimeProfile, clientId: string, catalog?: CatalogRegistry, proxyEndpoint?: string): ResolvedRuntime;
|
|
26
|
+
export declare function resolveFromContext(ctx: ApplyContext, catalog?: CatalogRegistry): ResolvedRuntime;
|
|
27
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/clients/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAmB,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClG,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oEAAoE;IACpE,KAAK,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AASD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAiC,EAC1C,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CA2DjB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,eAAe,CAEhG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { catalogRegistry } from "../catalog/providers.js";
|
|
2
|
+
//#region src/clients/resolve.ts
|
|
3
|
+
function expandModel(value, models) {
|
|
4
|
+
if (!value) return;
|
|
5
|
+
return models[value] ?? value;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolve profile → concrete runtime values for a client.
|
|
9
|
+
*
|
|
10
|
+
* Models live on the profile (set at create/edit). Switching a profile
|
|
11
|
+
* just reuses those fields — no per-client ceremony.
|
|
12
|
+
*/
|
|
13
|
+
function resolveRuntime(profile, clientId, catalog = catalogRegistry, proxyEndpoint) {
|
|
14
|
+
let provider;
|
|
15
|
+
if (catalog.has(profile.meta.provider)) provider = catalog.get(profile.meta.provider);
|
|
16
|
+
const overlay = profile.meta.clientOverrides?.[clientId] ?? {};
|
|
17
|
+
const models = { ...profile.meta.models };
|
|
18
|
+
const headers = { ...profile.secrets.headers };
|
|
19
|
+
const apiKey = (typeof overlay.apiKey === "string" ? overlay.apiKey : void 0) ?? (typeof profile.secrets.apiKey === "string" ? profile.secrets.apiKey : "") ?? "";
|
|
20
|
+
const endpoint = proxyEndpoint ?? (typeof overlay.endpoint === "string" ? overlay.endpoint : void 0) ?? profile.meta.endpoint ?? provider?.defaultEndpoint ?? "";
|
|
21
|
+
const apiStyle = overlay.apiStyle ?? provider?.apiStyle ?? "openai";
|
|
22
|
+
const defaultAlias = (typeof overlay.defaultModel === "string" ? overlay.defaultModel : void 0) ?? profile.meta.defaultModel;
|
|
23
|
+
const sonnetAlias = (typeof overlay.sonnetModel === "string" ? overlay.sonnetModel : void 0) ?? profile.meta.sonnetModel;
|
|
24
|
+
const opusAlias = (typeof overlay.opusModel === "string" ? overlay.opusModel : void 0) ?? profile.meta.opusModel;
|
|
25
|
+
const haikuAlias = (typeof overlay.haikuModel === "string" ? overlay.haikuModel : void 0) ?? profile.meta.haikuModel;
|
|
26
|
+
const roles = {
|
|
27
|
+
default: expandModel(defaultAlias, models),
|
|
28
|
+
sonnet: expandModel(sonnetAlias, models),
|
|
29
|
+
opus: expandModel(opusAlias, models),
|
|
30
|
+
haiku: expandModel(haikuAlias, models)
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
apiKey,
|
|
34
|
+
endpoint,
|
|
35
|
+
apiStyle,
|
|
36
|
+
defaultModel: roles.default,
|
|
37
|
+
models,
|
|
38
|
+
headers,
|
|
39
|
+
roles,
|
|
40
|
+
overlay
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function resolveFromContext(ctx, catalog) {
|
|
44
|
+
return resolveRuntime(ctx.profile, ctx.clientId, catalog, ctx.proxyEndpoint);
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { resolveFromContext, resolveRuntime };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","names":[],"sources":["../../src/clients/resolve.ts"],"sourcesContent":["import type { ApiStyle, ApplyContext, CatalogProvider, ModelMap, RuntimeProfile } from '../types';\nimport { catalogRegistry, type CatalogRegistry } from '../catalog/providers';\n\nexport interface ResolvedRuntime {\n apiKey: string;\n endpoint: string;\n apiStyle: ApiStyle;\n defaultModel?: string;\n models: ModelMap;\n headers: Record<string, string>;\n /** Models from the profile (optionally expanded via models map). */\n roles: {\n default?: string;\n sonnet?: string;\n opus?: string;\n haiku?: string;\n };\n overlay: Record<string, unknown>;\n}\n\nfunction expandModel(value: string | undefined, models: ModelMap): string | undefined {\n if (!value) {\n return undefined;\n }\n return models[value] ?? value;\n}\n\n/**\n * Resolve profile → concrete runtime values for a client.\n *\n * Models live on the profile (set at create/edit). Switching a profile\n * just reuses those fields — no per-client ceremony.\n */\nexport function resolveRuntime(\n profile: RuntimeProfile,\n clientId: string,\n catalog: CatalogRegistry = catalogRegistry,\n proxyEndpoint?: string,\n): ResolvedRuntime {\n let provider: CatalogProvider | undefined;\n if (catalog.has(profile.meta.provider)) {\n provider = catalog.get(profile.meta.provider);\n }\n\n const overlay = profile.meta.clientOverrides?.[clientId] ?? {};\n const models = { ...profile.meta.models };\n const headers = { ...profile.secrets.headers };\n\n const apiKey =\n (typeof overlay.apiKey === 'string' ? overlay.apiKey : undefined) ??\n (typeof profile.secrets.apiKey === 'string' ? profile.secrets.apiKey : '') ??\n '';\n\n const endpoint =\n proxyEndpoint ??\n (typeof overlay.endpoint === 'string' ? overlay.endpoint : undefined) ??\n profile.meta.endpoint ??\n provider?.defaultEndpoint ??\n '';\n\n const apiStyle: ApiStyle =\n (overlay.apiStyle as ApiStyle | undefined) ?? provider?.apiStyle ?? 'openai';\n\n // Profile fields first; advanced clientOverrides can still override.\n const defaultAlias =\n (typeof overlay.defaultModel === 'string' ? overlay.defaultModel : undefined) ??\n profile.meta.defaultModel;\n\n const sonnetAlias =\n (typeof overlay.sonnetModel === 'string' ? overlay.sonnetModel : undefined) ??\n profile.meta.sonnetModel;\n\n const opusAlias =\n (typeof overlay.opusModel === 'string' ? overlay.opusModel : undefined) ??\n profile.meta.opusModel;\n\n const haikuAlias =\n (typeof overlay.haikuModel === 'string' ? overlay.haikuModel : undefined) ??\n profile.meta.haikuModel;\n\n const roles = {\n default: expandModel(defaultAlias, models),\n sonnet: expandModel(sonnetAlias, models),\n opus: expandModel(opusAlias, models),\n haiku: expandModel(haikuAlias, models),\n };\n\n return {\n apiKey,\n endpoint,\n apiStyle,\n defaultModel: roles.default,\n models,\n headers,\n roles,\n overlay,\n };\n}\n\nexport function resolveFromContext(ctx: ApplyContext, catalog?: CatalogRegistry): ResolvedRuntime {\n return resolveRuntime(ctx.profile, ctx.clientId, catalog, ctx.proxyEndpoint);\n}\n"],"mappings":";;AAoBA,SAAS,YAAY,OAA2B,QAAsC;CACpF,IAAI,CAAC,OACH;CAEF,OAAO,OAAO,UAAU;AAC1B;;;;;;;AAQA,SAAgB,eACd,SACA,UACA,UAA2B,iBAC3B,eACiB;CACjB,IAAI;CACJ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,GACnC,WAAW,QAAQ,IAAI,QAAQ,KAAK,QAAQ;CAG9C,MAAM,UAAU,QAAQ,KAAK,kBAAkB,aAAa,CAAC;CAC7D,MAAM,SAAS,EAAE,GAAG,QAAQ,KAAK,OAAO;CACxC,MAAM,UAAU,EAAE,GAAG,QAAQ,QAAQ,QAAQ;CAE7C,MAAM,UACH,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,KAAA,OACtD,OAAO,QAAQ,QAAQ,WAAW,WAAW,QAAQ,QAAQ,SAAS,OACvE;CAEF,MAAM,WACJ,kBACC,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,KAAA,MAC3D,QAAQ,KAAK,YACb,UAAU,mBACV;CAEF,MAAM,WACH,QAAQ,YAAqC,UAAU,YAAY;CAGtE,MAAM,gBACH,OAAO,QAAQ,iBAAiB,WAAW,QAAQ,eAAe,KAAA,MACnE,QAAQ,KAAK;CAEf,MAAM,eACH,OAAO,QAAQ,gBAAgB,WAAW,QAAQ,cAAc,KAAA,MACjE,QAAQ,KAAK;CAEf,MAAM,aACH,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY,KAAA,MAC7D,QAAQ,KAAK;CAEf,MAAM,cACH,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa,KAAA,MAC/D,QAAQ,KAAK;CAEf,MAAM,QAAQ;EACZ,SAAS,YAAY,cAAc,MAAM;EACzC,QAAQ,YAAY,aAAa,MAAM;EACvC,MAAM,YAAY,WAAW,MAAM;EACnC,OAAO,YAAY,YAAY,MAAM;CACvC;CAEA,OAAO;EACL;EACA;EACA;EACA,cAAc,MAAM;EACpB;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,mBAAmB,KAAmB,SAA4C;CAChG,OAAO,eAAe,IAAI,SAAS,IAAI,UAAU,SAAS,IAAI,aAAa;AAC7E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AccountMeta, AccountProxyConfig } from '../types.js';
|
|
2
|
+
export declare const ACCOUNT_ENVELOPE_VERSION: 1;
|
|
3
|
+
export declare const ACCOUNT_ENVELOPE_KIND: 'anypick-account';
|
|
4
|
+
/** Reject obviously abusive envelopes without streaming unbounded memory. */
|
|
5
|
+
export declare const MAX_IMPORT_FILES = 4096;
|
|
6
|
+
export declare const MAX_IMPORT_FILE_BYTES: number;
|
|
7
|
+
export declare const MAX_IMPORT_TOTAL_BYTES: number;
|
|
8
|
+
/** The encoded envelope is larger than the decoded file budget. */
|
|
9
|
+
export declare const MAX_IMPORT_ENVELOPE_BYTES: number;
|
|
10
|
+
export declare const MAX_ACCOUNT_NAME_LEN = 128;
|
|
11
|
+
export declare const MAX_FIELD_LEN = 4096;
|
|
12
|
+
export interface DecodedAccountEnvelope {
|
|
13
|
+
version: 1;
|
|
14
|
+
kind: 'anypick-account';
|
|
15
|
+
meta: AccountMeta;
|
|
16
|
+
proxy: AccountProxyConfig | null;
|
|
17
|
+
/** Relative key → base64 content. Keys are validated, never trusted raw. */
|
|
18
|
+
files: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/** Decode + validate the raw import payload under the untrusted-boundary rule. */
|
|
21
|
+
export declare function decodeAccountEnvelope(raw: unknown, expectedProviderId: string): DecodedAccountEnvelope;
|
|
22
|
+
/**
|
|
23
|
+
* Validate a single import file key purely (no staging root needed). Rejects
|
|
24
|
+
* empty keys, NUL bytes, absolute POSIX/Windows paths, mixed separators, and
|
|
25
|
+
* any normalized escape ('..' segments / leading-traversal). Throws a
|
|
26
|
+
* `AnyPickError` on violation. Called from the codec (before any mutation) and
|
|
27
|
+
* from `stagedFilePath` (defense-in-depth at write time).
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateImportFileKey(key: string): void;
|
|
30
|
+
/** Resolve a validated relative file key to an absolute staging path. Never throws on traversal. */
|
|
31
|
+
export declare function stagedFilePath(stagingRoot: string, relKey: string): string;
|
|
32
|
+
//# sourceMappingURL=account-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-codec.d.ts","sourceRoot":"","sources":["../../src/core/account-codec.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEhE,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AACnD,eAAO,MAAM,qBAAqB,EAAG,iBAA0B,CAAC;AAEhE,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AACtD,eAAO,MAAM,sBAAsB,QAAoB,CAAC;AACxD,mEAAmE;AACnE,eAAO,MAAM,yBAAyB,QAAoB,CAAC;AAC3D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,kBAAkB,EAAE,MAAM,GACzB,sBAAsB,CAiCxB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA2BvD;AAED,oGAAoG;AACpG,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU1E"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { anypickError } from "../utils/errors.js";
|
|
2
|
+
import { isAbsolute, normalize, relative, resolve, sep } from "node:path";
|
|
3
|
+
var ACCOUNT_ENVELOPE_KIND = "anypick-account";
|
|
4
|
+
/** Reject obviously abusive envelopes without streaming unbounded memory. */
|
|
5
|
+
var MAX_IMPORT_FILES = 4096;
|
|
6
|
+
var MAX_IMPORT_FILE_BYTES = 16 * 1024 * 1024;
|
|
7
|
+
var MAX_IMPORT_TOTAL_BYTES = 128 * 1024 * 1024;
|
|
8
|
+
/** The encoded envelope is larger than the decoded file budget. */
|
|
9
|
+
var MAX_IMPORT_ENVELOPE_BYTES = 192 * 1024 * 1024;
|
|
10
|
+
var MAX_FIELD_LEN = 4096;
|
|
11
|
+
/** Decode + validate the raw import payload under the untrusted-boundary rule. */
|
|
12
|
+
function decodeAccountEnvelope(raw, expectedProviderId) {
|
|
13
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw error("Import payload is not a JSON object.", "IMPORT_FORMAT");
|
|
14
|
+
const obj = raw;
|
|
15
|
+
if (obj.kind !== "anypick-account") throw error("Unrecognized export format (kind mismatch).", "IMPORT_FORMAT");
|
|
16
|
+
if (obj.version !== 1) throw error(`Unsupported export version: ${JSON.stringify(obj.version)}.`, "IMPORT_FORMAT");
|
|
17
|
+
if (typeof obj.meta !== "object" || obj.meta === null || Array.isArray(obj.meta)) throw error("Import envelope is missing a meta object.", "IMPORT_FORMAT");
|
|
18
|
+
const meta = decodeMeta(obj.meta);
|
|
19
|
+
if (meta.provider !== expectedProviderId) throw error(`Import envelope provider "${meta.provider}" does not match the requested provider "${expectedProviderId}".`, "IMPORT_FORMAT", { exitCode: void 0 });
|
|
20
|
+
const proxy = obj.proxy === void 0 ? null : decodeProxy(obj.proxy);
|
|
21
|
+
if (typeof obj.files !== "object" || obj.files === null || Array.isArray(obj.files)) throw error("Import envelope is missing a files map.", "IMPORT_FORMAT");
|
|
22
|
+
return {
|
|
23
|
+
version: 1,
|
|
24
|
+
kind: ACCOUNT_ENVELOPE_KIND,
|
|
25
|
+
meta,
|
|
26
|
+
proxy,
|
|
27
|
+
files: decodeFiles(obj.files)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validate a single import file key purely (no staging root needed). Rejects
|
|
32
|
+
* empty keys, NUL bytes, absolute POSIX/Windows paths, mixed separators, and
|
|
33
|
+
* any normalized escape ('..' segments / leading-traversal). Throws a
|
|
34
|
+
* `AnyPickError` on violation. Called from the codec (before any mutation) and
|
|
35
|
+
* from `stagedFilePath` (defense-in-depth at write time).
|
|
36
|
+
*/
|
|
37
|
+
function validateImportFileKey(key) {
|
|
38
|
+
if (!key || key.includes("\0")) throw error(`Invalid import file path: ${JSON.stringify(key)}.`, "IMPORT_FORMAT");
|
|
39
|
+
if (isAbsolute(key)) throw error(`Import file path must be relative: ${key}.`, "IMPORT_FORMAT");
|
|
40
|
+
if (/^[A-Za-z]:[\\/]/.test(key) || key.startsWith("\\\\")) throw error(`Import file path must be relative: ${key}.`, "IMPORT_FORMAT");
|
|
41
|
+
if (key.includes("\\") && key.includes("/")) throw error(`Import file path mixes path separators: ${key}.`, "IMPORT_FORMAT");
|
|
42
|
+
const normalized = normalize(key.split("\\").join("/"));
|
|
43
|
+
if (normalized === "." || normalized === ".." || normalized.startsWith(`..${sep}`) || normalized.includes(`${sep}..${sep}`) || normalized.endsWith(`${sep}..`)) throw error(`Import file path escapes the staging root: ${key}.`, "IMPORT_FORMAT");
|
|
44
|
+
}
|
|
45
|
+
/** Resolve a validated relative file key to an absolute staging path. Never throws on traversal. */
|
|
46
|
+
function stagedFilePath(stagingRoot, relKey) {
|
|
47
|
+
validateImportFileKey(relKey);
|
|
48
|
+
const abs = resolve(stagingRoot, normalize(relKey.split("\\").join("/")));
|
|
49
|
+
const back = relative(resolve(stagingRoot), abs);
|
|
50
|
+
if (back.startsWith("..") || isAbsolute(back)) throw error(`Import file path escapes the staging root: ${relKey}.`, "IMPORT_FORMAT");
|
|
51
|
+
return abs;
|
|
52
|
+
}
|
|
53
|
+
function decodeMeta(value) {
|
|
54
|
+
if (typeof value !== "object" || value === null) throw error("Account meta is not an object.", "IMPORT_FORMAT");
|
|
55
|
+
const m = value;
|
|
56
|
+
const name = safeText(m.name, 128, "name") ?? "";
|
|
57
|
+
if (!name || name.length > 128) throw error("Account meta name is missing or too long.", "IMPORT_FORMAT");
|
|
58
|
+
const provider = safeText(m.provider, 4096, "provider") ?? "";
|
|
59
|
+
if (!provider) throw error("Account meta provider is missing.", "IMPORT_FORMAT");
|
|
60
|
+
const stringOrUndefined = (v, field) => safeText(v, MAX_FIELD_LEN, field);
|
|
61
|
+
const createdAt = safeText(m.createdAt, MAX_FIELD_LEN, "createdAt");
|
|
62
|
+
const updatedAt = safeText(m.updatedAt, MAX_FIELD_LEN, "updatedAt");
|
|
63
|
+
return {
|
|
64
|
+
name,
|
|
65
|
+
provider,
|
|
66
|
+
createdAt: createdAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
67
|
+
updatedAt: updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
68
|
+
label: stringOrUndefined(m.label, "label"),
|
|
69
|
+
identity: stringOrUndefined(m.identity, "identity"),
|
|
70
|
+
notes: stringOrUndefined(m.notes, "notes"),
|
|
71
|
+
credentialKind: m.credentialKind === "proxy-only" ? "proxy-only" : void 0
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Reject terminal control/bidi characters in imported display metadata. */
|
|
75
|
+
function safeText(value, maxLength, field) {
|
|
76
|
+
if (typeof value !== "string") return;
|
|
77
|
+
if (value.length > maxLength) return;
|
|
78
|
+
if (/[\p{Cc}\p{Cf}]/u.test(value)) throw error(`Import meta field "${field}" contains terminal control characters.`, "IMPORT_FORMAT");
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
function decodeProxy(value) {
|
|
82
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw error("Account proxy config is not an object.", "IMPORT_FORMAT");
|
|
83
|
+
const p = value;
|
|
84
|
+
const port = typeof p.port === "number" && Number.isInteger(p.port) && p.port >= 0 && p.port <= 65535 ? p.port : void 0;
|
|
85
|
+
const host = safeText(p.host, MAX_FIELD_LEN, "proxy.host");
|
|
86
|
+
return {
|
|
87
|
+
enabled: false,
|
|
88
|
+
...port !== void 0 ? { port } : {},
|
|
89
|
+
...host !== void 0 ? { host } : {}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function decodeFiles(value) {
|
|
93
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw error("Import envelope is missing a files map.", "IMPORT_FORMAT");
|
|
94
|
+
const entries = Object.entries(value);
|
|
95
|
+
if (entries.length === 0) throw error("Import envelope contains no files.", "IMPORT_FORMAT");
|
|
96
|
+
if (entries.length > 4096) throw limit(`Import contains ${entries.length} files (max ${MAX_IMPORT_FILES}).`);
|
|
97
|
+
const out = {};
|
|
98
|
+
const seen = /* @__PURE__ */ new Set();
|
|
99
|
+
let total = 0;
|
|
100
|
+
for (const [key, content] of entries) {
|
|
101
|
+
if (typeof key !== "string" || !key) throw error("Import file map contains an invalid key.", "IMPORT_FORMAT");
|
|
102
|
+
validateImportFileKey(key);
|
|
103
|
+
if (typeof content !== "string") throw error(`Import file "${key}" content is not a base64 string.`, "IMPORT_FORMAT");
|
|
104
|
+
if (!/^[A-Za-z0-9+/=]+$/.test(content)) throw error(`Import file "${key}" is not valid base64.`, "IMPORT_FORMAT");
|
|
105
|
+
let decoded;
|
|
106
|
+
try {
|
|
107
|
+
decoded = Buffer.from(content, "base64");
|
|
108
|
+
} catch {
|
|
109
|
+
throw error(`Import file "${key}" failed to decode as base64.`, "IMPORT_FORMAT");
|
|
110
|
+
}
|
|
111
|
+
if (decoded.byteLength > 16777216) throw limit(`Import file "${key}" exceeds ${MAX_IMPORT_FILE_BYTES} bytes.`);
|
|
112
|
+
total += decoded.byteLength;
|
|
113
|
+
if (total > 134217728) throw limit(`Import total payload exceeds ${MAX_IMPORT_TOTAL_BYTES} bytes.`);
|
|
114
|
+
const normalized = normalize(key.split("\\").join("/"));
|
|
115
|
+
if (seen.has(normalized)) throw error(`Import contains a duplicate file path: ${key}.`, "IMPORT_FORMAT");
|
|
116
|
+
if ([...seen].some((existing) => normalized.startsWith(`${existing}/`) || existing.startsWith(`${normalized}/`))) throw error(`Import file path collides with another entry: ${key}.`, "IMPORT_FORMAT");
|
|
117
|
+
seen.add(normalized);
|
|
118
|
+
out[key] = content;
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
function error(message, code, opts = {}) {
|
|
123
|
+
return anypickError(message, code, {
|
|
124
|
+
exitCode: opts.exitCode ?? (code === "IMPORT_LIMIT" ? 9 : 8),
|
|
125
|
+
mutated: false
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function limit(message) {
|
|
129
|
+
return error(message, "IMPORT_LIMIT");
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
export { ACCOUNT_ENVELOPE_KIND, MAX_FIELD_LEN, MAX_IMPORT_ENVELOPE_BYTES, MAX_IMPORT_FILES, MAX_IMPORT_FILE_BYTES, MAX_IMPORT_TOTAL_BYTES, decodeAccountEnvelope, stagedFilePath, validateImportFileKey };
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=account-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-codec.js","names":[],"sources":["../../src/core/account-codec.ts"],"sourcesContent":["/**\n * Versioned decoder for the account import/export envelope (SEC-01).\n *\n * Imports arrive as untrusted bytes. Per fixed decision #1 (\"external data is\n * untrusted\"), the envelope is decoded from `unknown` by a versioned codec\n * that validates the *entire* payload — shape, provider ownership, every\n * file-map key (path traversal / absolute / separators / NULs / duplicates /\n * file-vs-dir collisions / symlink), base64, file-count, per-file size, and\n * total decoded size — before any caller mutates state.\n *\n * Decoding is pure and never performs I/O. The caller stages the decoded\n * files into an owner-only temp dir using `stagedFilePath` so that a single\n * bad key cannot write outside the staging root.\n */\nimport { isAbsolute, normalize, relative, resolve, sep } from 'node:path';\nimport { anypickError, type ExitCodeValue, type AnyPickError } from '../utils/errors';\nimport type { AccountMeta, AccountProxyConfig } from '../types';\n\nexport const ACCOUNT_ENVELOPE_VERSION = 1 as const;\nexport const ACCOUNT_ENVELOPE_KIND = 'anypick-account' as const;\n\n/** Reject obviously abusive envelopes without streaming unbounded memory. */\nexport const MAX_IMPORT_FILES = 4096;\nexport const MAX_IMPORT_FILE_BYTES = 16 * 1024 * 1024; // 16 MiB per file\nexport const MAX_IMPORT_TOTAL_BYTES = 128 * 1024 * 1024; // 128 MiB total\n/** The encoded envelope is larger than the decoded file budget. */\nexport const MAX_IMPORT_ENVELOPE_BYTES = 192 * 1024 * 1024;\nexport const MAX_ACCOUNT_NAME_LEN = 128;\nexport const MAX_FIELD_LEN = 4096;\n\nexport interface DecodedAccountEnvelope {\n version: 1;\n kind: 'anypick-account';\n meta: AccountMeta;\n proxy: AccountProxyConfig | null;\n /** Relative key → base64 content. Keys are validated, never trusted raw. */\n files: Record<string, string>;\n}\n\n/** Decode + validate the raw import payload under the untrusted-boundary rule. */\nexport function decodeAccountEnvelope(\n raw: unknown,\n expectedProviderId: string,\n): DecodedAccountEnvelope {\n if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {\n throw error('Import payload is not a JSON object.', 'IMPORT_FORMAT');\n }\n const obj = raw as Record<string, unknown>;\n\n if (obj.kind !== ACCOUNT_ENVELOPE_KIND) {\n throw error('Unrecognized export format (kind mismatch).', 'IMPORT_FORMAT');\n }\n if (obj.version !== ACCOUNT_ENVELOPE_VERSION) {\n throw error(`Unsupported export version: ${JSON.stringify(obj.version)}.`, 'IMPORT_FORMAT');\n }\n if (typeof obj.meta !== 'object' || obj.meta === null || Array.isArray(obj.meta)) {\n throw error('Import envelope is missing a meta object.', 'IMPORT_FORMAT');\n }\n\n const meta = decodeMeta(obj.meta);\n if (meta.provider !== expectedProviderId) {\n throw error(\n `Import envelope provider \"${meta.provider}\" does not match the requested provider \"${expectedProviderId}\".`,\n 'IMPORT_FORMAT',\n { exitCode: undefined },\n );\n }\n\n const proxy = obj.proxy === undefined ? null : decodeProxy(obj.proxy);\n\n if (typeof obj.files !== 'object' || obj.files === null || Array.isArray(obj.files)) {\n throw error('Import envelope is missing a files map.', 'IMPORT_FORMAT');\n }\n const files = decodeFiles(obj.files);\n\n return { version: 1, kind: ACCOUNT_ENVELOPE_KIND, meta, proxy, files };\n}\n\n/**\n * Validate a single import file key purely (no staging root needed). Rejects\n * empty keys, NUL bytes, absolute POSIX/Windows paths, mixed separators, and\n * any normalized escape ('..' segments / leading-traversal). Throws a\n * `AnyPickError` on violation. Called from the codec (before any mutation) and\n * from `stagedFilePath` (defense-in-depth at write time).\n */\nexport function validateImportFileKey(key: string): void {\n if (!key || key.includes('\\0')) {\n throw error(`Invalid import file path: ${JSON.stringify(key)}.`, 'IMPORT_FORMAT');\n }\n if (isAbsolute(key)) {\n throw error(`Import file path must be relative: ${key}.`, 'IMPORT_FORMAT');\n }\n // Reject Windows-style absolute paths (drive letters / UNC) on every host,\n // since `path.isAbsolute` only recognizes the *current* platform's form.\n if (/^[A-Za-z]:[\\\\/]/.test(key) || key.startsWith('\\\\\\\\')) {\n throw error(`Import file path must be relative: ${key}.`, 'IMPORT_FORMAT');\n }\n // Mixed separators (e.g. \"a/b\\\\c\") after normalization can mask escapes.\n if (key.includes('\\\\') && key.includes('/')) {\n throw error(`Import file path mixes path separators: ${key}.`, 'IMPORT_FORMAT');\n }\n // Normalize across POSIX and Windows separators before the traversal check.\n const normalized = normalize(key.split('\\\\').join('/'));\n if (\n normalized === '.' ||\n normalized === '..' ||\n normalized.startsWith(`..${sep}`) ||\n normalized.includes(`${sep}..${sep}`) ||\n normalized.endsWith(`${sep}..`)\n ) {\n throw error(`Import file path escapes the staging root: ${key}.`, 'IMPORT_FORMAT');\n }\n}\n\n/** Resolve a validated relative file key to an absolute staging path. Never throws on traversal. */\nexport function stagedFilePath(stagingRoot: string, relKey: string): string {\n // Re-run the pure key check so a bad key can never write outside staging.\n validateImportFileKey(relKey);\n const normalized = normalize(relKey.split('\\\\').join('/'));\n const abs = resolve(stagingRoot, normalized);\n const back = relative(resolve(stagingRoot), abs);\n if (back.startsWith('..') || isAbsolute(back)) {\n throw error(`Import file path escapes the staging root: ${relKey}.`, 'IMPORT_FORMAT');\n }\n return abs;\n}\n\nfunction decodeMeta(value: unknown): AccountMeta {\n if (typeof value !== 'object' || value === null) {\n throw error('Account meta is not an object.', 'IMPORT_FORMAT');\n }\n const m = value as Record<string, unknown>;\n const name = safeText(m.name, MAX_ACCOUNT_NAME_LEN, 'name') ?? '';\n if (!name || name.length > MAX_ACCOUNT_NAME_LEN) {\n throw error('Account meta name is missing or too long.', 'IMPORT_FORMAT');\n }\n const provider = safeText(m.provider, MAX_FIELD_LEN, 'provider') ?? '';\n if (!provider) {\n throw error('Account meta provider is missing.', 'IMPORT_FORMAT');\n }\n const stringOrUndefined = (v: unknown, field: string): string | undefined =>\n safeText(v, MAX_FIELD_LEN, field);\n const createdAt = safeText(m.createdAt, MAX_FIELD_LEN, 'createdAt');\n const updatedAt = safeText(m.updatedAt, MAX_FIELD_LEN, 'updatedAt');\n return {\n name,\n provider,\n createdAt: createdAt ?? new Date().toISOString(),\n updatedAt: updatedAt ?? new Date().toISOString(),\n label: stringOrUndefined(m.label, 'label'),\n identity: stringOrUndefined(m.identity, 'identity'),\n notes: stringOrUndefined(m.notes, 'notes'),\n // Losing this on import would turn a user-supplied credential back into a\n // native one, and activating it would then prune the machine's real login.\n credentialKind: m.credentialKind === 'proxy-only' ? 'proxy-only' : undefined,\n };\n}\n\n/** Reject terminal control/bidi characters in imported display metadata. */\nfunction safeText(value: unknown, maxLength: number, field: string): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n if (value.length > maxLength) {\n return undefined;\n }\n // C0/DEL includes newline, tabs, and ESC/OSC introducers. Bidi overrides\n // can make a harmless-looking identity render as a different command/name.\n if (/[\\p{Cc}\\p{Cf}]/u.test(value)) {\n throw error(\n `Import meta field \"${field}\" contains terminal control characters.`,\n 'IMPORT_FORMAT',\n );\n }\n return value;\n}\n\nfunction decodeProxy(value: unknown): AccountProxyConfig {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw error('Account proxy config is not an object.', 'IMPORT_FORMAT');\n }\n const p = value as Record<string, unknown>;\n // An imported envelope is untrusted. Do not carry activation state or\n // provider-specific options across this boundary: options can contain\n // upstream URLs, auth paths, or other values later passed to a spawned\n // proxy. The user must explicitly enable/configure a proxy locally.\n const port =\n typeof p.port === 'number' && Number.isInteger(p.port) && p.port >= 0 && p.port <= 65535\n ? p.port\n : undefined;\n const host = safeText(p.host, MAX_FIELD_LEN, 'proxy.host');\n return {\n enabled: false,\n ...(port !== undefined ? { port } : {}),\n ...(host !== undefined ? { host } : {}),\n };\n}\n\nfunction decodeFiles(value: unknown): Record<string, string> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw error('Import envelope is missing a files map.', 'IMPORT_FORMAT');\n }\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n throw error('Import envelope contains no files.', 'IMPORT_FORMAT');\n }\n if (entries.length > MAX_IMPORT_FILES) {\n throw limit(`Import contains ${entries.length} files (max ${MAX_IMPORT_FILES}).`);\n }\n\n const out: Record<string, string> = {};\n const seen = new Set<string>();\n let total = 0;\n\n for (const [key, content] of entries) {\n if (typeof key !== 'string' || !key) {\n throw error('Import file map contains an invalid key.', 'IMPORT_FORMAT');\n }\n // Pure path check (no staging root yet): reject empty / NUL / absolute /\n // mixed-separator / traversal keys before any state is touched.\n validateImportFileKey(key);\n if (typeof content !== 'string') {\n throw error(`Import file \"${key}\" content is not a base64 string.`, 'IMPORT_FORMAT');\n }\n // Reject non-base64 early (the decode below would otherwise accept garbage).\n if (!/^[A-Za-z0-9+/=]+$/.test(content)) {\n throw error(`Import file \"${key}\" is not valid base64.`, 'IMPORT_FORMAT');\n }\n let decoded: Buffer;\n try {\n decoded = Buffer.from(content, 'base64');\n } catch {\n throw error(`Import file \"${key}\" failed to decode as base64.`, 'IMPORT_FORMAT');\n }\n if (decoded.byteLength > MAX_IMPORT_FILE_BYTES) {\n throw limit(`Import file \"${key}\" exceeds ${MAX_IMPORT_FILE_BYTES} bytes.`);\n }\n total += decoded.byteLength;\n if (total > MAX_IMPORT_TOTAL_BYTES) {\n throw limit(`Import total payload exceeds ${MAX_IMPORT_TOTAL_BYTES} bytes.`);\n }\n\n // Validate the key as a staging path now (cheap, before any write).\n const normalized = normalize(key.split('\\\\').join('/'));\n if (seen.has(normalized)) {\n throw error(`Import contains a duplicate file path: ${key}.`, 'IMPORT_FORMAT');\n }\n // A file whose key is a path prefix of another file is a file/directory\n // collision. Check both directions so validation is independent of JSON\n // property order (`a` then `a/b`, or `a/b` then `a`).\n if (\n [...seen].some(\n (existing) =>\n normalized.startsWith(`${existing}/`) || existing.startsWith(`${normalized}/`),\n )\n ) {\n throw error(`Import file path collides with another entry: ${key}.`, 'IMPORT_FORMAT');\n }\n seen.add(normalized);\n\n out[key] = content;\n }\n\n return out;\n}\n\nfunction error(\n message: string,\n code: 'IMPORT_FORMAT' | 'IMPORT_LIMIT',\n opts: { exitCode?: ExitCodeValue } = {},\n): AnyPickError {\n return anypickError(message, code, {\n exitCode: opts.exitCode ?? (code === 'IMPORT_LIMIT' ? 9 : 8),\n mutated: false,\n });\n}\n\nfunction limit(message: string): AnyPickError {\n return error(message, 'IMPORT_LIMIT');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AccountMeta, Provider } from '../types.js';
|
|
2
|
+
import type { AccountStore } from './store.js';
|
|
3
|
+
export declare function collectSnapshotFiles(root: string): Promise<Record<string, string>>;
|
|
4
|
+
export declare function writeSnapshotFiles(root: string, files: Record<string, string>): Promise<void>;
|
|
5
|
+
/** Serialize a saved account to a portable, owner-only JSON envelope. */
|
|
6
|
+
export declare function exportAccountEnvelope(store: AccountStore, providerId: string, name: string, outPath: string): Promise<void>;
|
|
7
|
+
export interface ImportAccountDeps {
|
|
8
|
+
store: AccountStore;
|
|
9
|
+
provider: Provider;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the final account name after identity collision checks. Owned by
|
|
12
|
+
* AccountService because it also runs on save paths.
|
|
13
|
+
*/
|
|
14
|
+
resolveIdentityTarget: (providerId: string, identity: string | undefined, accountName: string, force: boolean) => Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
/** Decode, validate, and stage an account envelope under the provider. */
|
|
17
|
+
export declare function importAccountEnvelope(deps: ImportAccountDeps, providerId: string, name: string, inPath: string, opts?: {
|
|
18
|
+
force?: boolean;
|
|
19
|
+
}): Promise<AccountMeta>;
|
|
20
|
+
//# sourceMappingURL=account-transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-transfer.d.ts","sourceRoot":"","sources":["../../src/core/account-transfer.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAMtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmBxF;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,yEAAyE;AACzE,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB;;;OAGG;IACH,qBAAqB,EAAE,CACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,0EAA0E;AAC1E,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B,OAAO,CAAC,WAAW,CAAC,CAoGtB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { DEFAULT_PROXY_CONFIG } from "../types/account.js";
|
|
2
|
+
import { AnyPickError } from "../utils/errors.js";
|
|
3
|
+
import { pathExists } from "../utils/fs.js";
|
|
4
|
+
import { normalizeAccountName } from "../utils/slug.js";
|
|
5
|
+
import { MAX_IMPORT_ENVELOPE_BYTES, decodeAccountEnvelope, stagedFilePath } from "./account-codec.js";
|
|
6
|
+
import { dirname, join, relative } from "node:path";
|
|
7
|
+
import { chmod, mkdir, mkdtemp, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
8
|
+
import { tmpdir } from "node:os";
|
|
9
|
+
//#region src/core/account-transfer.ts
|
|
10
|
+
/**
|
|
11
|
+
* Account export/import envelope I/O.
|
|
12
|
+
*
|
|
13
|
+
* Kept out of AccountService so the service stays focused on live-auth and
|
|
14
|
+
* snapshot lifecycle; transfer is a separate boundary with its own SEC-01
|
|
15
|
+
* validation (ADR 0002).
|
|
16
|
+
*/
|
|
17
|
+
async function collectSnapshotFiles(root) {
|
|
18
|
+
const out = {};
|
|
19
|
+
async function walk(dir) {
|
|
20
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const full = join(dir, entry.name);
|
|
23
|
+
const rel = relative(root, full).split("\\").join("/");
|
|
24
|
+
if (entry.isDirectory()) await walk(full);
|
|
25
|
+
else if (entry.isFile()) {
|
|
26
|
+
const buf = await readFile(full);
|
|
27
|
+
out[rel] = buf.toString("base64");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (await pathExists(root)) await walk(root);
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
async function writeSnapshotFiles(root, files) {
|
|
35
|
+
for (const [rel, b64] of Object.entries(files)) {
|
|
36
|
+
const dest = stagedFilePath(root, rel);
|
|
37
|
+
await mkdir(dirname(dest), { recursive: true });
|
|
38
|
+
await writeFile(dest, Buffer.from(b64, "base64"), { mode: 384 });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Serialize a saved account to a portable, owner-only JSON envelope. */
|
|
42
|
+
async function exportAccountEnvelope(store, providerId, name, outPath) {
|
|
43
|
+
const account = await store.requireAccount(providerId, normalizeAccountName(name));
|
|
44
|
+
const files = await collectSnapshotFiles(account.snapshotDir);
|
|
45
|
+
const payload = {
|
|
46
|
+
version: 1,
|
|
47
|
+
kind: "anypick-account",
|
|
48
|
+
meta: account.meta,
|
|
49
|
+
proxy: account.proxy,
|
|
50
|
+
files
|
|
51
|
+
};
|
|
52
|
+
const stage = await mkdtemp(join(tmpdir(), "anypick-export-"));
|
|
53
|
+
const tmpPath = join(stage, "account.json");
|
|
54
|
+
await writeFile(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, { mode: 384 });
|
|
55
|
+
try {
|
|
56
|
+
await rename(tmpPath, outPath);
|
|
57
|
+
await chmod(outPath, 384).catch(() => {});
|
|
58
|
+
} finally {
|
|
59
|
+
await rm(stage, {
|
|
60
|
+
recursive: true,
|
|
61
|
+
force: true
|
|
62
|
+
}).catch(() => {});
|
|
63
|
+
}
|
|
64
|
+
process.stderr.write(`Warning: exported account "${account.meta.name}" contains credentials. Store ${outPath} safely.\n`);
|
|
65
|
+
}
|
|
66
|
+
/** Decode, validate, and stage an account envelope under the provider. */
|
|
67
|
+
async function importAccountEnvelope(deps, providerId, name, inPath, opts = {}) {
|
|
68
|
+
let accountName = normalizeAccountName(name);
|
|
69
|
+
if (!await pathExists(inPath)) throw new AnyPickError(`Import file not found: ${inPath}`, "IMPORT_MISSING");
|
|
70
|
+
let existing = await deps.store.getAccount(providerId, accountName);
|
|
71
|
+
if (existing && !opts.force) throw new AnyPickError(`Account "${accountName}" already exists. Use --force to overwrite.`, "ACCOUNT_EXISTS");
|
|
72
|
+
try {
|
|
73
|
+
if ((await stat(inPath)).size > 201326592) throw new AnyPickError(`Import file exceeds ${MAX_IMPORT_ENVELOPE_BYTES} bytes.`, {
|
|
74
|
+
code: "IMPORT_LIMIT",
|
|
75
|
+
mutated: false,
|
|
76
|
+
exitCode: 9
|
|
77
|
+
});
|
|
78
|
+
} catch (err) {
|
|
79
|
+
if (err instanceof AnyPickError) throw err;
|
|
80
|
+
throw new AnyPickError(`Unable to inspect import file: ${inPath}`, {
|
|
81
|
+
code: "IMPORT_MISSING",
|
|
82
|
+
mutated: false
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const raw = await readFile(inPath, "utf8");
|
|
86
|
+
let parsed;
|
|
87
|
+
try {
|
|
88
|
+
parsed = JSON.parse(raw);
|
|
89
|
+
} catch {
|
|
90
|
+
throw new AnyPickError("Import file is not valid JSON.", "IMPORT_FORMAT");
|
|
91
|
+
}
|
|
92
|
+
const envelope = decodeAccountEnvelope(parsed, providerId);
|
|
93
|
+
let identity = envelope.meta.identity;
|
|
94
|
+
let label = envelope.meta.label;
|
|
95
|
+
if (deps.provider.describeSnapshot) {
|
|
96
|
+
const inspectDir = await mkdtemp(join(tmpdir(), "anypick-import-inspect-"));
|
|
97
|
+
try {
|
|
98
|
+
await writeSnapshotFiles(inspectDir, envelope.files);
|
|
99
|
+
const described = await deps.provider.describeSnapshot(inspectDir);
|
|
100
|
+
identity = described.identity ?? identity;
|
|
101
|
+
label = described.label ?? label;
|
|
102
|
+
} finally {
|
|
103
|
+
await rm(inspectDir, {
|
|
104
|
+
recursive: true,
|
|
105
|
+
force: true
|
|
106
|
+
}).catch(() => {});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
accountName = await deps.resolveIdentityTarget(providerId, identity, accountName, opts.force === true);
|
|
110
|
+
existing = await deps.store.getAccount(providerId, accountName);
|
|
111
|
+
const { snapshotDir } = await deps.store.prepareSnapshot(providerId, accountName);
|
|
112
|
+
await writeSnapshotFiles(snapshotDir, envelope.files);
|
|
113
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
114
|
+
const meta = {
|
|
115
|
+
name: accountName,
|
|
116
|
+
provider: providerId,
|
|
117
|
+
createdAt: existing?.meta.createdAt ?? envelope.meta.createdAt ?? now,
|
|
118
|
+
updatedAt: now,
|
|
119
|
+
label,
|
|
120
|
+
identity,
|
|
121
|
+
notes: envelope.meta.notes,
|
|
122
|
+
credentialKind: envelope.meta.credentialKind
|
|
123
|
+
};
|
|
124
|
+
await deps.store.writeMeta(meta);
|
|
125
|
+
if (envelope.proxy) await deps.store.setProxyConfig(providerId, accountName, {
|
|
126
|
+
...DEFAULT_PROXY_CONFIG,
|
|
127
|
+
...envelope.proxy,
|
|
128
|
+
enabled: false,
|
|
129
|
+
options: void 0
|
|
130
|
+
});
|
|
131
|
+
return meta;
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { collectSnapshotFiles, exportAccountEnvelope, importAccountEnvelope, writeSnapshotFiles };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=account-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-transfer.js","names":[],"sources":["../../src/core/account-transfer.ts"],"sourcesContent":["/**\n * Account export/import envelope I/O.\n *\n * Kept out of AccountService so the service stays focused on live-auth and\n * snapshot lifecycle; transfer is a separate boundary with its own SEC-01\n * validation (ADR 0002).\n */\nimport {\n chmod,\n mkdir,\n mkdtemp,\n readdir,\n readFile,\n rename,\n rm,\n stat,\n writeFile,\n} from 'node:fs/promises';\nimport { dirname, join, relative } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport type { AccountMeta, Provider } from '../types';\nimport { DEFAULT_PROXY_CONFIG } from '../types';\nimport { AnyPickError } from '../utils/errors';\nimport { pathExists } from '../utils/fs';\nimport { normalizeAccountName } from '../utils/slug';\nimport { decodeAccountEnvelope, MAX_IMPORT_ENVELOPE_BYTES, stagedFilePath } from './account-codec';\nimport type { AccountStore } from './store';\n\nexport async function collectSnapshotFiles(root: string): Promise<Record<string, string>> {\n const out: Record<string, string> = {};\n async function walk(dir: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = join(dir, entry.name);\n const rel = relative(root, full).split('\\\\').join('/');\n if (entry.isDirectory()) {\n await walk(full);\n } else if (entry.isFile()) {\n const buf = await readFile(full);\n out[rel] = buf.toString('base64');\n }\n }\n }\n if (await pathExists(root)) {\n await walk(root);\n }\n return out;\n}\n\nexport async function writeSnapshotFiles(\n root: string,\n files: Record<string, string>,\n): Promise<void> {\n for (const [rel, b64] of Object.entries(files)) {\n // Defense-in-depth: re-resolve each key against the staging root so a\n // malformed key can never write outside `root` (SEC-01).\n const dest = stagedFilePath(root, rel);\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, Buffer.from(b64, 'base64'), { mode: 0o600 });\n }\n}\n\n/** Serialize a saved account to a portable, owner-only JSON envelope. */\nexport async function exportAccountEnvelope(\n store: AccountStore,\n providerId: string,\n name: string,\n outPath: string,\n): Promise<void> {\n const account = await store.requireAccount(providerId, normalizeAccountName(name));\n const files = await collectSnapshotFiles(account.snapshotDir);\n const payload = {\n version: 1 as const,\n kind: 'anypick-account' as const,\n meta: account.meta,\n proxy: account.proxy,\n files,\n };\n\n // SEC-01: write to an owner-only temp file, then atomically rename.\n // Tighten the final mode even when overwriting an existing (permissive) file.\n const stage = await mkdtemp(join(tmpdir(), 'anypick-export-'));\n const tmpPath = join(stage, 'account.json');\n await writeFile(tmpPath, `${JSON.stringify(payload, null, 2)}\\n`, { mode: 0o600 });\n try {\n await rename(tmpPath, outPath);\n await chmod(outPath, 0o600).catch(() => {});\n } finally {\n await rm(stage, { recursive: true, force: true }).catch(() => {});\n }\n // Warn: the artifact carries live credentials.\n process.stderr.write(\n `Warning: exported account \"${account.meta.name}\" contains credentials. Store ${outPath} safely.\\n`,\n );\n}\n\nexport interface ImportAccountDeps {\n store: AccountStore;\n provider: Provider;\n /**\n * Resolve the final account name after identity collision checks. Owned by\n * AccountService because it also runs on save paths.\n */\n resolveIdentityTarget: (\n providerId: string,\n identity: string | undefined,\n accountName: string,\n force: boolean,\n ) => Promise<string>;\n}\n\n/** Decode, validate, and stage an account envelope under the provider. */\nexport async function importAccountEnvelope(\n deps: ImportAccountDeps,\n providerId: string,\n name: string,\n inPath: string,\n opts: { force?: boolean } = {},\n): Promise<AccountMeta> {\n let accountName = normalizeAccountName(name);\n if (!(await pathExists(inPath))) {\n throw new AnyPickError(`Import file not found: ${inPath}`, 'IMPORT_MISSING');\n }\n\n let existing = await deps.store.getAccount(providerId, accountName);\n if (existing && !opts.force) {\n throw new AnyPickError(\n `Account \"${accountName}\" already exists. Use --force to overwrite.`,\n 'ACCOUNT_EXISTS',\n );\n }\n\n // SEC-01: reject an oversized file before read/JSON.parse, then decode +\n // validate the *entire* envelope (provider ownership,\n // every file path, base64, size/count limits) BEFORE any mutation. A\n // rejection below leaves the DB, current snapshot, active account, and\n // live auth completely unchanged.\n try {\n const size = (await stat(inPath)).size;\n if (size > MAX_IMPORT_ENVELOPE_BYTES) {\n throw new AnyPickError(`Import file exceeds ${MAX_IMPORT_ENVELOPE_BYTES} bytes.`, {\n code: 'IMPORT_LIMIT',\n mutated: false,\n exitCode: 9,\n });\n }\n } catch (err) {\n if (err instanceof AnyPickError) {\n throw err;\n }\n throw new AnyPickError(`Unable to inspect import file: ${inPath}`, {\n code: 'IMPORT_MISSING',\n mutated: false,\n });\n }\n const raw = await readFile(inPath, 'utf8');\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new AnyPickError('Import file is not valid JSON.', 'IMPORT_FORMAT');\n }\n const envelope = decodeAccountEnvelope(parsed, providerId);\n\n let identity = envelope.meta.identity;\n let label = envelope.meta.label;\n if (deps.provider.describeSnapshot) {\n // Inspect a disposable copy first. prepareSnapshot() can replace an\n // existing snapshot, so identity conflicts must be found before it.\n const inspectDir = await mkdtemp(join(tmpdir(), 'anypick-import-inspect-'));\n try {\n await writeSnapshotFiles(inspectDir, envelope.files);\n const described = await deps.provider.describeSnapshot(inspectDir);\n identity = described.identity ?? identity;\n label = described.label ?? label;\n } finally {\n await rm(inspectDir, { recursive: true, force: true }).catch(() => {});\n }\n }\n accountName = await deps.resolveIdentityTarget(\n providerId,\n identity,\n accountName,\n opts.force === true,\n );\n existing = await deps.store.getAccount(providerId, accountName);\n\n // Stage into the live snapshot dir only after full validation and identity\n // conflict checks.\n const { snapshotDir } = await deps.store.prepareSnapshot(providerId, accountName);\n await writeSnapshotFiles(snapshotDir, envelope.files);\n\n const now = new Date().toISOString();\n const meta: AccountMeta = {\n name: accountName,\n provider: providerId,\n createdAt: existing?.meta.createdAt ?? envelope.meta.createdAt ?? now,\n updatedAt: now,\n label,\n identity,\n notes: envelope.meta.notes,\n credentialKind: envelope.meta.credentialKind,\n };\n await deps.store.writeMeta(meta);\n\n // Imported proxies are always disabled and provider-specific options are\n // intentionally dropped by the codec. Starting a proxy is an explicit\n // local action, never something an imported file can trigger.\n if (envelope.proxy) {\n await deps.store.setProxyConfig(providerId, accountName, {\n ...DEFAULT_PROXY_CONFIG,\n ...envelope.proxy,\n enabled: false,\n options: undefined,\n });\n }\n\n return meta;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute activation plans transactionally (spec §P7, §23).
|
|
3
|
+
* Journals only serializable ResourceRef values — never adapter instances.
|
|
4
|
+
*/
|
|
5
|
+
import type { ActivationPlan, GlobalBinding, ProjectBinding } from '../types.js';
|
|
6
|
+
import type { OperationJournal } from './journal.js';
|
|
7
|
+
import type { LeaseStore } from './lease-store.js';
|
|
8
|
+
import type { AccountService } from './service.js';
|
|
9
|
+
import type { RuntimeService } from './runtime-service.js';
|
|
10
|
+
import { type ResolveSourceDeps } from './resolve-source.js';
|
|
11
|
+
import type { ProxyService } from './proxy-service.js';
|
|
12
|
+
import { type AnyPickEventSink } from './events.js';
|
|
13
|
+
export interface ExecuteResult {
|
|
14
|
+
plan: ActivationPlan;
|
|
15
|
+
dryRun: boolean;
|
|
16
|
+
alreadyActive: boolean;
|
|
17
|
+
binding?: GlobalBinding | ProjectBinding;
|
|
18
|
+
proxyEndpoint?: string;
|
|
19
|
+
journalId?: string;
|
|
20
|
+
childExitCode?: number;
|
|
21
|
+
/** Ephemeral isolated runtime (spec §9.7.1) — must be cleaned up by caller. */
|
|
22
|
+
isolated?: {
|
|
23
|
+
directory: string;
|
|
24
|
+
environment: Record<string, string>;
|
|
25
|
+
args?: string[];
|
|
26
|
+
cleanup: () => Promise<void>;
|
|
27
|
+
};
|
|
28
|
+
/** Scoped rollback for a successful ephemeral run. Idempotent. */
|
|
29
|
+
cleanup?: () => Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export interface ExecutorDeps extends ResolveSourceDeps {
|
|
32
|
+
journal: OperationJournal;
|
|
33
|
+
leases: LeaseStore;
|
|
34
|
+
runtime: RuntimeService;
|
|
35
|
+
accounts: AccountService;
|
|
36
|
+
proxy: ProxyService;
|
|
37
|
+
/**
|
|
38
|
+
* Structured sink for degraded-state conditions (OBS-01). Optional.
|
|
39
|
+
* Named `eventSink` rather than `events` so an entire `AnyPickApp` (whose
|
|
40
|
+
* `events` is a `{ sink, emit, list }` facade) can still be passed where
|
|
41
|
+
* `ExecutorDeps` is expected without a structural type collision.
|
|
42
|
+
*/
|
|
43
|
+
eventSink?: AnyPickEventSink;
|
|
44
|
+
}
|
|
45
|
+
export interface ExecuteOptions {
|
|
46
|
+
dryRun?: boolean;
|
|
47
|
+
verbose?: boolean;
|
|
48
|
+
projectRoot?: string;
|
|
49
|
+
/** Report an equal persistent binding as already active after it is safely re-applied. */
|
|
50
|
+
skipIfActive?: boolean;
|
|
51
|
+
/** Budget for the WaitForHealth step. Lowered by tests; defaults to 5s. */
|
|
52
|
+
healthTimeoutMs?: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function executeActivation(plan: ActivationPlan, deps: ExecutorDeps, opts?: ExecuteOptions): Promise<ExecuteResult>;
|
|
55
|
+
export interface RecoveryDeps extends Pick<ExecutorDeps, 'journal'> {
|
|
56
|
+
/** When present, recovery re-resolves source adapters from journal ResourceRefs. */
|
|
57
|
+
resolve?: ResolveSourceDeps;
|
|
58
|
+
/** Structured event sink for refusing recovery that cannot be made exact (OBS-01). */
|
|
59
|
+
events?: AnyPickEventSink;
|
|
60
|
+
}
|
|
61
|
+
export interface RecoveryResult {
|
|
62
|
+
recovered: number;
|
|
63
|
+
failed: string[];
|
|
64
|
+
/** Entries where source/adapter could not be re-resolved exactly (no forward exec). */
|
|
65
|
+
refused: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Startup recovery: re-resolve adapters from stored ResourceRef values;
|
|
69
|
+
* complete exact rollbacks when possible; never substitute another source (spec §23.4).
|
|
70
|
+
*/
|
|
71
|
+
export declare function recoverIncompleteOperations(deps: RecoveryDeps): Promise<RecoveryResult>;
|
|
72
|
+
//# sourceMappingURL=activation-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation-executor.d.ts","sourceRoot":"","sources":["../../src/core/activation-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,cAAc,EAGf,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMpD,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B,CAAC;IACF,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA2CD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA2BxB;AAu2BD,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;IACjE,oFAAoF;IACpF,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,sFAAsF;IACtF,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uFAAuF;IACvF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA4BD;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA6I7F"}
|