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,40 @@
|
|
|
1
|
+
import { type PluginLoadResult, type PluginManifest, type PluginRecord } from '../types.js';
|
|
2
|
+
export declare const PLUGIN_MANIFEST_FILE = "anypick.plugin.json";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the entry module inside `root`, refusing anything that escapes it.
|
|
5
|
+
*
|
|
6
|
+
* `main` comes from a file the user may have obtained from a third party, so a
|
|
7
|
+
* `../../` entry must not be able to make AnyPick import an arbitrary module
|
|
8
|
+
* from elsewhere on disk under the plugin's name.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveEntry(root: string, main: string): string;
|
|
11
|
+
export declare function parseManifest(raw: string, source: string): PluginManifest;
|
|
12
|
+
export declare function readManifest(root: string): Promise<PluginManifest>;
|
|
13
|
+
/**
|
|
14
|
+
* SHA-256 of one file. Kept for tests and migration diagnostics; trust pins use
|
|
15
|
+
* `digestPluginPackage` so helper modules cannot change under a trusted entry.
|
|
16
|
+
*/
|
|
17
|
+
export declare function digestEntry(entry: string): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* SHA-256 over the whole plugin package, not just the entry module.
|
|
20
|
+
*
|
|
21
|
+
* Format (stable, path-order sorted):
|
|
22
|
+
* for each relative POSIX path under the plugin root:
|
|
23
|
+
* path\\0 + byteLength\\0 + fileBytes
|
|
24
|
+
*
|
|
25
|
+
* Hashing only `main` would let a compromised helper module change while the
|
|
26
|
+
* trusted entry stayed identical (ADR 0012). Manifest + every shipped file are
|
|
27
|
+
* included so an install is a fixed artifact.
|
|
28
|
+
*/
|
|
29
|
+
export declare function digestPluginPackage(root: string): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Load every enabled plugin.
|
|
32
|
+
*
|
|
33
|
+
* A broken or tampered plugin is reported as a failure and skipped rather than
|
|
34
|
+
* aborting startup: the framework's job is switching real logins, and one bad
|
|
35
|
+
* third-party extension must not make `anypick` unusable (ADR 0012).
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadPlugins(records: PluginRecord[]): Promise<PluginLoadResult>;
|
|
38
|
+
/** `ANYPICK_NO_PLUGINS=1` skips loading entirely, for bisecting a bad plugin. */
|
|
39
|
+
export declare function pluginsDisabledByEnv(): boolean;
|
|
40
|
+
//# sourceMappingURL=plugin-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../src/core/plugin-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AAGlB,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAsB1D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAoCzE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAYxE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AA4BD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBvE;AAoDD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsBpF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import "../types/plugins.js";
|
|
2
|
+
import { ExitCode, anypickError } from "../utils/errors.js";
|
|
3
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { readFile, readdir, stat } from "node:fs/promises";
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { pathToFileURL } from "node:url";
|
|
7
|
+
//#region src/core/plugin-loader.ts
|
|
8
|
+
var PLUGIN_MANIFEST_FILE = "anypick.plugin.json";
|
|
9
|
+
/** Plugin names are used as directory-independent keys and printed in receipts. */
|
|
10
|
+
var NAME_PATTERN = /^[a-z0-9][a-z0-9-]{1,63}$/;
|
|
11
|
+
/** Directory names skipped when hashing a plugin package (dev debris / VCS). */
|
|
12
|
+
var DIGEST_SKIP_DIRS = /* @__PURE__ */ new Set([
|
|
13
|
+
".git",
|
|
14
|
+
".hg",
|
|
15
|
+
".svn",
|
|
16
|
+
"node_modules",
|
|
17
|
+
".DS_Store",
|
|
18
|
+
"__pycache__"
|
|
19
|
+
]);
|
|
20
|
+
function fail(message, suggestions = []) {
|
|
21
|
+
throw anypickError(message, "PLUGIN_INVALID", {
|
|
22
|
+
exitCode: ExitCode.OPERATIONAL,
|
|
23
|
+
suggestions
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the entry module inside `root`, refusing anything that escapes it.
|
|
28
|
+
*
|
|
29
|
+
* `main` comes from a file the user may have obtained from a third party, so a
|
|
30
|
+
* `../../` entry must not be able to make AnyPick import an arbitrary module
|
|
31
|
+
* from elsewhere on disk under the plugin's name.
|
|
32
|
+
*/
|
|
33
|
+
function resolveEntry(root, main) {
|
|
34
|
+
if (isAbsolute(main)) fail(`Plugin entry "${main}" must be a path relative to the plugin directory.`);
|
|
35
|
+
const entry = resolve(root, main);
|
|
36
|
+
const rel = relative(root, entry);
|
|
37
|
+
if (rel.startsWith("..") || isAbsolute(rel)) fail(`Plugin entry "${main}" resolves outside the plugin directory.`);
|
|
38
|
+
return entry;
|
|
39
|
+
}
|
|
40
|
+
function parseManifest(raw, source) {
|
|
41
|
+
let data;
|
|
42
|
+
try {
|
|
43
|
+
data = JSON.parse(raw);
|
|
44
|
+
} catch {
|
|
45
|
+
fail(`${source} is not valid JSON.`);
|
|
46
|
+
}
|
|
47
|
+
if (typeof data !== "object" || data === null) fail(`${source} must contain a JSON object.`);
|
|
48
|
+
const m = data;
|
|
49
|
+
const name = m.name;
|
|
50
|
+
if (typeof name !== "string" || !NAME_PATTERN.test(name)) fail(`${source} has an invalid "name". Use lowercase letters, digits, and hyphens (2-64 characters).`);
|
|
51
|
+
if (typeof m.version !== "string" || m.version.length === 0) fail(`${source} is missing a "version" string.`);
|
|
52
|
+
if (typeof m.main !== "string" || m.main.length === 0) fail(`${source} is missing a "main" entry module path.`);
|
|
53
|
+
if (m.apiVersion !== 1) fail(`Plugin ${name} targets AnyPick plugin API ${String(m.apiVersion)}; this build supports 1.`, [`Update the plugin, or use a AnyPick release that supports API ${String(m.apiVersion)}.`]);
|
|
54
|
+
return {
|
|
55
|
+
name,
|
|
56
|
+
version: m.version,
|
|
57
|
+
description: typeof m.description === "string" ? m.description : void 0,
|
|
58
|
+
apiVersion: 1,
|
|
59
|
+
main: m.main
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function readManifest(root) {
|
|
63
|
+
const path = join(root, PLUGIN_MANIFEST_FILE);
|
|
64
|
+
try {
|
|
65
|
+
return parseManifest(await readFile(path, "utf8"), path);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (error.code !== "ENOENT") throw error;
|
|
68
|
+
}
|
|
69
|
+
return fail(`No ${PLUGIN_MANIFEST_FILE} found in ${root}.`, [`A AnyPick plugin is a directory containing ${PLUGIN_MANIFEST_FILE}.`]);
|
|
70
|
+
}
|
|
71
|
+
async function listPluginFiles(root) {
|
|
72
|
+
const out = [];
|
|
73
|
+
async function walk(dir) {
|
|
74
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
if (DIGEST_SKIP_DIRS.has(entry.name)) continue;
|
|
77
|
+
const full = join(dir, entry.name);
|
|
78
|
+
if (entry.isDirectory()) {
|
|
79
|
+
await walk(full);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (entry.isFile() || entry.isSymbolicLink()) {
|
|
83
|
+
if ((await stat(full).catch(() => null))?.isFile()) out.push(full);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
await walk(root);
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* SHA-256 over the whole plugin package, not just the entry module.
|
|
92
|
+
*
|
|
93
|
+
* Format (stable, path-order sorted):
|
|
94
|
+
* for each relative POSIX path under the plugin root:
|
|
95
|
+
* path\\0 + byteLength\\0 + fileBytes
|
|
96
|
+
*
|
|
97
|
+
* Hashing only `main` would let a compromised helper module change while the
|
|
98
|
+
* trusted entry stayed identical (ADR 0012). Manifest + every shipped file are
|
|
99
|
+
* included so an install is a fixed artifact.
|
|
100
|
+
*/
|
|
101
|
+
async function digestPluginPackage(root) {
|
|
102
|
+
const rels = (await listPluginFiles(root)).map((full) => ({
|
|
103
|
+
full,
|
|
104
|
+
rel: relative(root, full).split(sep).join("/")
|
|
105
|
+
})).toSorted((a, b) => a.rel.localeCompare(b.rel));
|
|
106
|
+
const hash = createHash("sha256");
|
|
107
|
+
for (const { full, rel } of rels) {
|
|
108
|
+
const bytes = await readFile(full);
|
|
109
|
+
hash.update(rel);
|
|
110
|
+
hash.update("\0");
|
|
111
|
+
hash.update(String(bytes.byteLength));
|
|
112
|
+
hash.update("\0");
|
|
113
|
+
hash.update(bytes);
|
|
114
|
+
}
|
|
115
|
+
return hash.digest("hex");
|
|
116
|
+
}
|
|
117
|
+
function isPlugin(value) {
|
|
118
|
+
return typeof value === "object" && value !== null && typeof value.activate === "function";
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Import one plugin's entry module and hand back its `activate`.
|
|
122
|
+
*
|
|
123
|
+
* The digest is checked *before* the import: once `import()` runs, arbitrary
|
|
124
|
+
* module top-level code has already executed in a process holding credential
|
|
125
|
+
* file handles, so verification after the fact would be theatre.
|
|
126
|
+
*/
|
|
127
|
+
async function loadOne(record) {
|
|
128
|
+
const manifest = await readManifest(record.path);
|
|
129
|
+
if (manifest.name !== record.name) fail(`Plugin at ${record.path} now calls itself "${manifest.name}" but is installed as "${record.name}".`, ["Remove and re-add the plugin."]);
|
|
130
|
+
const entry = resolveEntry(record.path, manifest.main);
|
|
131
|
+
if (await digestPluginPackage(record.path) !== record.digest) throw anypickError(`Plugin ${record.name} has changed since you trusted it.`, "PLUGIN_UNTRUSTED", {
|
|
132
|
+
exitCode: ExitCode.OPERATIONAL,
|
|
133
|
+
suggestions: [`Review the change, then run: anypick plugin trust ${record.name}`, `Or remove it: anypick plugin remove ${record.name}`]
|
|
134
|
+
});
|
|
135
|
+
const mod = await import(pathToFileURL(entry).href);
|
|
136
|
+
const exported = mod.default ?? mod;
|
|
137
|
+
if (!isPlugin(exported)) fail(`Plugin ${record.name} does not export an object with an "activate" function.`);
|
|
138
|
+
return {
|
|
139
|
+
manifest,
|
|
140
|
+
plugin: exported
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Load every enabled plugin.
|
|
145
|
+
*
|
|
146
|
+
* A broken or tampered plugin is reported as a failure and skipped rather than
|
|
147
|
+
* aborting startup: the framework's job is switching real logins, and one bad
|
|
148
|
+
* third-party extension must not make `anypick` unusable (ADR 0012).
|
|
149
|
+
*/
|
|
150
|
+
async function loadPlugins(records) {
|
|
151
|
+
const loaded = [];
|
|
152
|
+
const failures = [];
|
|
153
|
+
for (const record of records) {
|
|
154
|
+
if (!record.enabled) continue;
|
|
155
|
+
try {
|
|
156
|
+
const { manifest, plugin } = await loadOne(record);
|
|
157
|
+
loaded.push({
|
|
158
|
+
record,
|
|
159
|
+
manifest,
|
|
160
|
+
plugin
|
|
161
|
+
});
|
|
162
|
+
} catch (err) {
|
|
163
|
+
failures.push({
|
|
164
|
+
name: record.name,
|
|
165
|
+
path: record.path,
|
|
166
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
167
|
+
untrusted: typeof err.code === "string" && err.code === "PLUGIN_UNTRUSTED"
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
loaded,
|
|
173
|
+
failures
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/** `ANYPICK_NO_PLUGINS=1` skips loading entirely, for bisecting a bad plugin. */
|
|
177
|
+
function pluginsDisabledByEnv() {
|
|
178
|
+
const v = process.env.ANYPICK_NO_PLUGINS;
|
|
179
|
+
return v === "1" || v === "true";
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
export { PLUGIN_MANIFEST_FILE, digestPluginPackage, loadPlugins, parseManifest, pluginsDisabledByEnv, readManifest, resolveEntry };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=plugin-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.js","names":[],"sources":["../../src/core/plugin-loader.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { readdir, readFile, stat } from 'node:fs/promises';\nimport { isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n PLUGIN_API_VERSION,\n type AnyPickPlugin,\n type PluginLoadFailure,\n type PluginLoadResult,\n type PluginManifest,\n type PluginRecord,\n} from '../types';\nimport { anypickError, ExitCode } from '../utils/errors';\n\nexport const PLUGIN_MANIFEST_FILE = 'anypick.plugin.json';\n\n/** Plugin names are used as directory-independent keys and printed in receipts. */\nconst NAME_PATTERN = /^[a-z0-9][a-z0-9-]{1,63}$/;\n\n/** Directory names skipped when hashing a plugin package (dev debris / VCS). */\nconst DIGEST_SKIP_DIRS = new Set([\n '.git',\n '.hg',\n '.svn',\n 'node_modules',\n '.DS_Store',\n '__pycache__',\n]);\n\nfunction fail(message: string, suggestions: string[] = []): never {\n throw anypickError(message, 'PLUGIN_INVALID', {\n exitCode: ExitCode.OPERATIONAL,\n suggestions,\n });\n}\n\n/**\n * Resolve the entry module inside `root`, refusing anything that escapes it.\n *\n * `main` comes from a file the user may have obtained from a third party, so a\n * `../../` entry must not be able to make AnyPick import an arbitrary module\n * from elsewhere on disk under the plugin's name.\n */\nexport function resolveEntry(root: string, main: string): string {\n if (isAbsolute(main)) {\n fail(`Plugin entry \"${main}\" must be a path relative to the plugin directory.`);\n }\n const entry = resolve(root, main);\n const rel = relative(root, entry);\n if (rel.startsWith('..') || isAbsolute(rel)) {\n fail(`Plugin entry \"${main}\" resolves outside the plugin directory.`);\n }\n return entry;\n}\n\nexport function parseManifest(raw: string, source: string): PluginManifest {\n let data: unknown;\n try {\n data = JSON.parse(raw);\n } catch {\n fail(`${source} is not valid JSON.`);\n }\n if (typeof data !== 'object' || data === null) {\n fail(`${source} must contain a JSON object.`);\n }\n const m = data as Record<string, unknown>;\n const name = m.name;\n if (typeof name !== 'string' || !NAME_PATTERN.test(name)) {\n fail(\n `${source} has an invalid \"name\". Use lowercase letters, digits, and hyphens (2-64 characters).`,\n );\n }\n if (typeof m.version !== 'string' || m.version.length === 0) {\n fail(`${source} is missing a \"version\" string.`);\n }\n if (typeof m.main !== 'string' || m.main.length === 0) {\n fail(`${source} is missing a \"main\" entry module path.`);\n }\n if (m.apiVersion !== PLUGIN_API_VERSION) {\n fail(\n `Plugin ${name} targets AnyPick plugin API ${String(m.apiVersion)}; this build supports ${PLUGIN_API_VERSION}.`,\n [`Update the plugin, or use a AnyPick release that supports API ${String(m.apiVersion)}.`],\n );\n }\n return {\n name,\n version: m.version,\n description: typeof m.description === 'string' ? m.description : undefined,\n apiVersion: PLUGIN_API_VERSION,\n main: m.main,\n };\n}\n\nexport async function readManifest(root: string): Promise<PluginManifest> {\n const path = join(root, PLUGIN_MANIFEST_FILE);\n try {\n return parseManifest(await readFile(path, 'utf8'), path);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw error;\n }\n }\n return fail(`No ${PLUGIN_MANIFEST_FILE} found in ${root}.`, [\n `A AnyPick plugin is a directory containing ${PLUGIN_MANIFEST_FILE}.`,\n ]);\n}\n\n/**\n * SHA-256 of one file. Kept for tests and migration diagnostics; trust pins use\n * `digestPluginPackage` so helper modules cannot change under a trusted entry.\n */\nexport async function digestEntry(entry: string): Promise<string> {\n const bytes = await readFile(entry);\n return createHash('sha256').update(bytes).digest('hex');\n}\n\nasync function listPluginFiles(root: string): Promise<string[]> {\n const out: string[] = [];\n async function walk(dir: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (DIGEST_SKIP_DIRS.has(entry.name)) {\n continue;\n }\n const full = join(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(full);\n continue;\n }\n if (entry.isFile() || entry.isSymbolicLink()) {\n // Only regular files contribute; broken symlinks fail at read time.\n const info = await stat(full).catch(() => null);\n if (info?.isFile()) {\n out.push(full);\n }\n }\n }\n }\n await walk(root);\n return out;\n}\n\n/**\n * SHA-256 over the whole plugin package, not just the entry module.\n *\n * Format (stable, path-order sorted):\n * for each relative POSIX path under the plugin root:\n * path\\\\0 + byteLength\\\\0 + fileBytes\n *\n * Hashing only `main` would let a compromised helper module change while the\n * trusted entry stayed identical (ADR 0012). Manifest + every shipped file are\n * included so an install is a fixed artifact.\n */\nexport async function digestPluginPackage(root: string): Promise<string> {\n const files = await listPluginFiles(root);\n const rels = files\n .map((full) => ({\n full,\n rel: relative(root, full).split(sep).join('/'),\n }))\n .toSorted((a, b) => a.rel.localeCompare(b.rel));\n\n const hash = createHash('sha256');\n for (const { full, rel } of rels) {\n const bytes = await readFile(full);\n hash.update(rel);\n hash.update('\\0');\n hash.update(String(bytes.byteLength));\n hash.update('\\0');\n hash.update(bytes);\n }\n return hash.digest('hex');\n}\n\nfunction isPlugin(value: unknown): value is AnyPickPlugin {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { activate?: unknown }).activate === 'function'\n );\n}\n\n/**\n * Import one plugin's entry module and hand back its `activate`.\n *\n * The digest is checked *before* the import: once `import()` runs, arbitrary\n * module top-level code has already executed in a process holding credential\n * file handles, so verification after the fact would be theatre.\n */\nasync function loadOne(\n record: PluginRecord,\n): Promise<{ manifest: PluginManifest; plugin: AnyPickPlugin }> {\n const manifest = await readManifest(record.path);\n if (manifest.name !== record.name) {\n fail(\n `Plugin at ${record.path} now calls itself \"${manifest.name}\" but is installed as \"${record.name}\".`,\n ['Remove and re-add the plugin.'],\n );\n }\n const entry = resolveEntry(record.path, manifest.main);\n // Package digest is checked *before* import: once import runs, top-level code\n // has already executed in a process holding credential file handles.\n const digest = await digestPluginPackage(record.path);\n if (digest !== record.digest) {\n throw anypickError(\n `Plugin ${record.name} has changed since you trusted it.`,\n 'PLUGIN_UNTRUSTED',\n {\n exitCode: ExitCode.OPERATIONAL,\n suggestions: [\n `Review the change, then run: anypick plugin trust ${record.name}`,\n `Or remove it: anypick plugin remove ${record.name}`,\n ],\n },\n );\n }\n const mod: unknown = await import(pathToFileURL(entry).href);\n const exported = (mod as { default?: unknown }).default ?? mod;\n if (!isPlugin(exported)) {\n fail(`Plugin ${record.name} does not export an object with an \"activate\" function.`);\n }\n return { manifest, plugin: exported };\n}\n\n/**\n * Load every enabled plugin.\n *\n * A broken or tampered plugin is reported as a failure and skipped rather than\n * aborting startup: the framework's job is switching real logins, and one bad\n * third-party extension must not make `anypick` unusable (ADR 0012).\n */\nexport async function loadPlugins(records: PluginRecord[]): Promise<PluginLoadResult> {\n const loaded: PluginLoadResult['loaded'] = [];\n const failures: PluginLoadFailure[] = [];\n for (const record of records) {\n if (!record.enabled) {\n continue;\n }\n try {\n const { manifest, plugin } = await loadOne(record);\n loaded.push({ record, manifest, plugin });\n } catch (err) {\n failures.push({\n name: record.name,\n path: record.path,\n reason: err instanceof Error ? err.message : String(err),\n untrusted:\n typeof (err as { code?: unknown }).code === 'string' &&\n (err as { code: string }).code === 'PLUGIN_UNTRUSTED',\n });\n }\n }\n return { loaded, failures };\n}\n\n/** `ANYPICK_NO_PLUGINS=1` skips loading entirely, for bisecting a bad plugin. */\nexport function pluginsDisabledByEnv(): boolean {\n const v = process.env.ANYPICK_NO_PLUGINS;\n return v === '1' || v === 'true';\n}\n"],"mappings":";;;;;;;AAcA,IAAa,uBAAuB;;AAGpC,IAAM,eAAe;;AAGrB,IAAM,mCAAmB,IAAI,IAAI;CAC/B;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,KAAK,SAAiB,cAAwB,CAAC,GAAU;CAChE,MAAM,aAAa,SAAS,kBAAkB;EAC5C,UAAU,SAAS;EACnB;CACF,CAAC;AACH;;;;;;;;AASA,SAAgB,aAAa,MAAc,MAAsB;CAC/D,IAAI,WAAW,IAAI,GACjB,KAAK,iBAAiB,KAAK,mDAAmD;CAEhF,MAAM,QAAQ,QAAQ,MAAM,IAAI;CAChC,MAAM,MAAM,SAAS,MAAM,KAAK;CAChC,IAAI,IAAI,WAAW,IAAI,KAAK,WAAW,GAAG,GACxC,KAAK,iBAAiB,KAAK,yCAAyC;CAEtE,OAAO;AACT;AAEA,SAAgB,cAAc,KAAa,QAAgC;CACzE,IAAI;CACJ,IAAI;EACF,OAAO,KAAK,MAAM,GAAG;CACvB,QAAQ;EACN,KAAK,GAAG,OAAO,oBAAoB;CACrC;CACA,IAAI,OAAO,SAAS,YAAY,SAAS,MACvC,KAAK,GAAG,OAAO,6BAA6B;CAE9C,MAAM,IAAI;CACV,MAAM,OAAO,EAAE;CACf,IAAI,OAAO,SAAS,YAAY,CAAC,aAAa,KAAK,IAAI,GACrD,KACE,GAAG,OAAO,sFACZ;CAEF,IAAI,OAAO,EAAE,YAAY,YAAY,EAAE,QAAQ,WAAW,GACxD,KAAK,GAAG,OAAO,gCAAgC;CAEjD,IAAI,OAAO,EAAE,SAAS,YAAY,EAAE,KAAK,WAAW,GAClD,KAAK,GAAG,OAAO,wCAAwC;CAEzD,IAAI,EAAE,eAAA,GACJ,KACE,UAAU,KAAK,8BAA8B,OAAO,EAAE,UAAU,EAAE,2BAClE,CAAC,iEAAiE,OAAO,EAAE,UAAU,EAAE,EAAE,CAC3F;CAEF,OAAO;EACL;EACA,SAAS,EAAE;EACX,aAAa,OAAO,EAAE,gBAAgB,WAAW,EAAE,cAAc,KAAA;EACjE,YAAA;EACA,MAAM,EAAE;CACV;AACF;AAEA,eAAsB,aAAa,MAAuC;CACxE,MAAM,OAAO,KAAK,MAAM,oBAAoB;CAC5C,IAAI;EACF,OAAO,cAAc,MAAM,SAAS,MAAM,MAAM,GAAG,IAAI;CACzD,SAAS,OAAO;EACd,IAAK,MAAgC,SAAS,UAC5C,MAAM;CAEV;CACA,OAAO,KAAK,MAAM,qBAAqB,YAAY,KAAK,IAAI,CAC1D,8CAA8C,qBAAqB,EACrE,CAAC;AACH;AAWA,eAAe,gBAAgB,MAAiC;CAC9D,MAAM,MAAgB,CAAC;CACvB,eAAe,KAAK,KAA4B;EAC9C,MAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;EAC1D,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,iBAAiB,IAAI,MAAM,IAAI,GACjC;GAEF,MAAM,OAAO,KAAK,KAAK,MAAM,IAAI;GACjC,IAAI,MAAM,YAAY,GAAG;IACvB,MAAM,KAAK,IAAI;IACf;GACF;GACA,IAAI,MAAM,OAAO,KAAK,MAAM,eAAe;SAGrC,MADe,KAAK,IAAI,CAAC,CAAC,YAAY,IAAI,EAAA,EACpC,OAAO,GACf,IAAI,KAAK,IAAI;GAAA;EAGnB;CACF;CACA,MAAM,KAAK,IAAI;CACf,OAAO;AACT;;;;;;;;;;;;AAaA,eAAsB,oBAAoB,MAA+B;CAEvE,MAAM,QAAO,MADO,gBAAgB,IAAI,EAAA,CAErC,KAAK,UAAU;EACd;EACA,KAAK,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;CAC/C,EAAE,CAAC,CACF,UAAU,GAAG,MAAM,EAAE,IAAI,cAAc,EAAE,GAAG,CAAC;CAEhD,MAAM,OAAO,WAAW,QAAQ;CAChC,KAAK,MAAM,EAAE,MAAM,SAAS,MAAM;EAChC,MAAM,QAAQ,MAAM,SAAS,IAAI;EACjC,KAAK,OAAO,GAAG;EACf,KAAK,OAAO,IAAI;EAChB,KAAK,OAAO,OAAO,MAAM,UAAU,CAAC;EACpC,KAAK,OAAO,IAAI;EAChB,KAAK,OAAO,KAAK;CACnB;CACA,OAAO,KAAK,OAAO,KAAK;AAC1B;AAEA,SAAS,SAAS,OAAwC;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAAiC,aAAa;AAE1D;;;;;;;;AASA,eAAe,QACb,QAC8D;CAC9D,MAAM,WAAW,MAAM,aAAa,OAAO,IAAI;CAC/C,IAAI,SAAS,SAAS,OAAO,MAC3B,KACE,aAAa,OAAO,KAAK,qBAAqB,SAAS,KAAK,yBAAyB,OAAO,KAAK,KACjG,CAAC,+BAA+B,CAClC;CAEF,MAAM,QAAQ,aAAa,OAAO,MAAM,SAAS,IAAI;CAIrD,IAAI,MADiB,oBAAoB,OAAO,IAAI,MACrC,OAAO,QACpB,MAAM,aACJ,UAAU,OAAO,KAAK,qCACtB,oBACA;EACE,UAAU,SAAS;EACnB,aAAa,CACX,qDAAqD,OAAO,QAC5D,uCAAuC,OAAO,MAChD;CACF,CACF;CAEF,MAAM,MAAe,MAAM,OAAO,cAAc,KAAK,CAAC,CAAC;CACvD,MAAM,WAAY,IAA8B,WAAW;CAC3D,IAAI,CAAC,SAAS,QAAQ,GACpB,KAAK,UAAU,OAAO,KAAK,wDAAwD;CAErF,OAAO;EAAE;EAAU,QAAQ;CAAS;AACtC;;;;;;;;AASA,eAAsB,YAAY,SAAoD;CACpF,MAAM,SAAqC,CAAC;CAC5C,MAAM,WAAgC,CAAC;CACvC,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,CAAC,OAAO,SACV;EAEF,IAAI;GACF,MAAM,EAAE,UAAU,WAAW,MAAM,QAAQ,MAAM;GACjD,OAAO,KAAK;IAAE;IAAQ;IAAU;GAAO,CAAC;EAC1C,SAAS,KAAK;GACZ,SAAS,KAAK;IACZ,MAAM,OAAO;IACb,MAAM,OAAO;IACb,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;IACvD,WACE,OAAQ,IAA2B,SAAS,YAC3C,IAAyB,SAAS;GACvC,CAAC;EACH;CACF;CACA,OAAO;EAAE;EAAQ;CAAS;AAC5B;;AAGA,SAAgB,uBAAgC;CAC9C,MAAM,IAAI,QAAQ,IAAI;CACtB,OAAO,MAAM,OAAO,MAAM;AAC5B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { PluginRecord } from '../types.js';
|
|
2
|
+
import type { PluginStore } from './plugin-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Install, trust, and enable plugins.
|
|
5
|
+
*
|
|
6
|
+
* Adding a plugin never enables it. A plugin runs in-process alongside code that
|
|
7
|
+
* reads and rewrites real credential files, so becoming loadable is a separate,
|
|
8
|
+
* explicit decision from being present on disk (ADR 0012).
|
|
9
|
+
*/
|
|
10
|
+
export declare class PluginService {
|
|
11
|
+
private readonly store;
|
|
12
|
+
private readonly root;
|
|
13
|
+
constructor(store: PluginStore, root: string);
|
|
14
|
+
list(): PluginRecord[];
|
|
15
|
+
get(name: string): PluginRecord | null;
|
|
16
|
+
/** Read the manifest at `dir`, record it disabled, and pin its package digest. */
|
|
17
|
+
add(dir: string): Promise<PluginRecord>;
|
|
18
|
+
remove(name: string): Promise<void>;
|
|
19
|
+
setEnabled(name: string, enabled: boolean): Promise<PluginRecord>;
|
|
20
|
+
/**
|
|
21
|
+
* Re-pin the package digest to the code currently on disk.
|
|
22
|
+
*
|
|
23
|
+
* This is the acknowledgement step after a plugin's code changes — an upgrade,
|
|
24
|
+
* a `git pull`, or something the user did not expect. It reports the old and
|
|
25
|
+
* new digest so the caller can show what is being approved.
|
|
26
|
+
*/
|
|
27
|
+
trust(name: string): Promise<{
|
|
28
|
+
record: PluginRecord;
|
|
29
|
+
previousDigest: string;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=plugin-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-service.d.ts","sourceRoot":"","sources":["../../src/core/plugin-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBlD;;;;;;GAMG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EAC3B;IAEJ,IAAI,IAAI,YAAY,EAAE,CAErB;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAErC;IAED,kFAAkF;IAC5E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+B5C;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxC;IAEK,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAUtE;IAED;;;;;;OAMG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAiBnF;CACF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ExitCode, anypickError } from "../utils/errors.js";
|
|
2
|
+
import { withMutationLock } from "./mutation-lock.js";
|
|
3
|
+
import { digestPluginPackage, readManifest } from "./plugin-loader.js";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
//#region src/core/plugin-service.ts
|
|
6
|
+
/** All plugin mutations serialize on one scope: the set is read as a whole at startup. */
|
|
7
|
+
var PLUGIN_SCOPE = "plugins";
|
|
8
|
+
function nowIso() {
|
|
9
|
+
return (/* @__PURE__ */ new Date()).toISOString();
|
|
10
|
+
}
|
|
11
|
+
function notFound(name) {
|
|
12
|
+
throw anypickError(`No plugin named "${name}" is installed.`, "PLUGIN_NOT_FOUND", {
|
|
13
|
+
exitCode: ExitCode.NOT_FOUND,
|
|
14
|
+
suggestions: ["List installed plugins: anypick plugin list"]
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Install, trust, and enable plugins.
|
|
19
|
+
*
|
|
20
|
+
* Adding a plugin never enables it. A plugin runs in-process alongside code that
|
|
21
|
+
* reads and rewrites real credential files, so becoming loadable is a separate,
|
|
22
|
+
* explicit decision from being present on disk (ADR 0012).
|
|
23
|
+
*/
|
|
24
|
+
var PluginService = class {
|
|
25
|
+
store;
|
|
26
|
+
root;
|
|
27
|
+
constructor(store, root) {
|
|
28
|
+
this.store = store;
|
|
29
|
+
this.root = root;
|
|
30
|
+
}
|
|
31
|
+
list() {
|
|
32
|
+
return this.store.list();
|
|
33
|
+
}
|
|
34
|
+
get(name) {
|
|
35
|
+
return this.store.get(name);
|
|
36
|
+
}
|
|
37
|
+
/** Read the manifest at `dir`, record it disabled, and pin its package digest. */
|
|
38
|
+
async add(dir) {
|
|
39
|
+
const path = resolve(dir);
|
|
40
|
+
const manifest = await readManifest(path);
|
|
41
|
+
const digest = await digestPluginPackage(path);
|
|
42
|
+
return withMutationLock(this.root, PLUGIN_SCOPE, async () => {
|
|
43
|
+
const existing = this.store.get(manifest.name);
|
|
44
|
+
if (existing && existing.path !== path) throw anypickError(`A different plugin directory is already installed as "${manifest.name}".`, "PLUGIN_CONFLICT", {
|
|
45
|
+
exitCode: ExitCode.OPERATIONAL,
|
|
46
|
+
details: { installedPath: existing.path },
|
|
47
|
+
suggestions: [`Remove the existing one first: anypick plugin remove ${manifest.name}`]
|
|
48
|
+
});
|
|
49
|
+
const record = {
|
|
50
|
+
name: manifest.name,
|
|
51
|
+
path,
|
|
52
|
+
version: manifest.version,
|
|
53
|
+
enabled: existing?.enabled ?? false,
|
|
54
|
+
digest,
|
|
55
|
+
addedAt: existing?.addedAt ?? nowIso(),
|
|
56
|
+
updatedAt: nowIso()
|
|
57
|
+
};
|
|
58
|
+
this.store.upsert(record);
|
|
59
|
+
return record;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async remove(name) {
|
|
63
|
+
await withMutationLock(this.root, PLUGIN_SCOPE, async () => {
|
|
64
|
+
if (!this.store.remove(name)) notFound(name);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async setEnabled(name, enabled) {
|
|
68
|
+
return withMutationLock(this.root, PLUGIN_SCOPE, async () => {
|
|
69
|
+
const existing = this.store.get(name);
|
|
70
|
+
if (!existing) notFound(name);
|
|
71
|
+
const record = {
|
|
72
|
+
...existing,
|
|
73
|
+
enabled,
|
|
74
|
+
updatedAt: nowIso()
|
|
75
|
+
};
|
|
76
|
+
this.store.upsert(record);
|
|
77
|
+
return record;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Re-pin the package digest to the code currently on disk.
|
|
82
|
+
*
|
|
83
|
+
* This is the acknowledgement step after a plugin's code changes — an upgrade,
|
|
84
|
+
* a `git pull`, or something the user did not expect. It reports the old and
|
|
85
|
+
* new digest so the caller can show what is being approved.
|
|
86
|
+
*/
|
|
87
|
+
async trust(name) {
|
|
88
|
+
const existing = this.store.get(name);
|
|
89
|
+
if (!existing) notFound(name);
|
|
90
|
+
const manifest = await readManifest(existing.path);
|
|
91
|
+
const digest = await digestPluginPackage(existing.path);
|
|
92
|
+
return withMutationLock(this.root, PLUGIN_SCOPE, async () => {
|
|
93
|
+
const record = {
|
|
94
|
+
...existing,
|
|
95
|
+
version: manifest.version,
|
|
96
|
+
digest,
|
|
97
|
+
updatedAt: nowIso()
|
|
98
|
+
};
|
|
99
|
+
this.store.upsert(record);
|
|
100
|
+
return {
|
|
101
|
+
record,
|
|
102
|
+
previousDigest: existing.digest
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
//#endregion
|
|
108
|
+
export { PluginService };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=plugin-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-service.js","names":[],"sources":["../../src/core/plugin-service.ts"],"sourcesContent":["import { resolve } from 'node:path';\nimport type { PluginRecord } from '../types';\nimport { anypickError, ExitCode } from '../utils/errors';\nimport { withMutationLock } from './mutation-lock';\nimport { digestPluginPackage, readManifest } from './plugin-loader';\nimport type { PluginStore } from './plugin-store';\n\n/** All plugin mutations serialize on one scope: the set is read as a whole at startup. */\nconst PLUGIN_SCOPE = 'plugins';\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction notFound(name: string): never {\n throw anypickError(`No plugin named \"${name}\" is installed.`, 'PLUGIN_NOT_FOUND', {\n exitCode: ExitCode.NOT_FOUND,\n suggestions: ['List installed plugins: anypick plugin list'],\n });\n}\n\n/**\n * Install, trust, and enable plugins.\n *\n * Adding a plugin never enables it. A plugin runs in-process alongside code that\n * reads and rewrites real credential files, so becoming loadable is a separate,\n * explicit decision from being present on disk (ADR 0012).\n */\nexport class PluginService {\n constructor(\n private readonly store: PluginStore,\n private readonly root: string,\n ) {}\n\n list(): PluginRecord[] {\n return this.store.list();\n }\n\n get(name: string): PluginRecord | null {\n return this.store.get(name);\n }\n\n /** Read the manifest at `dir`, record it disabled, and pin its package digest. */\n async add(dir: string): Promise<PluginRecord> {\n const path = resolve(dir);\n const manifest = await readManifest(path);\n const digest = await digestPluginPackage(path);\n return withMutationLock(this.root, PLUGIN_SCOPE, async () => {\n const existing = this.store.get(manifest.name);\n if (existing && existing.path !== path) {\n throw anypickError(\n `A different plugin directory is already installed as \"${manifest.name}\".`,\n 'PLUGIN_CONFLICT',\n {\n exitCode: ExitCode.OPERATIONAL,\n details: { installedPath: existing.path },\n suggestions: [`Remove the existing one first: anypick plugin remove ${manifest.name}`],\n },\n );\n }\n const record: PluginRecord = {\n name: manifest.name,\n path,\n version: manifest.version,\n // Re-adding an already-enabled plugin from the same path keeps it\n // enabled; the freshly computed digest re-trusts the current code.\n enabled: existing?.enabled ?? false,\n digest,\n addedAt: existing?.addedAt ?? nowIso(),\n updatedAt: nowIso(),\n };\n this.store.upsert(record);\n return record;\n });\n }\n\n async remove(name: string): Promise<void> {\n await withMutationLock(this.root, PLUGIN_SCOPE, async () => {\n if (!this.store.remove(name)) {\n notFound(name);\n }\n });\n }\n\n async setEnabled(name: string, enabled: boolean): Promise<PluginRecord> {\n return withMutationLock(this.root, PLUGIN_SCOPE, async () => {\n const existing = this.store.get(name);\n if (!existing) {\n notFound(name);\n }\n const record: PluginRecord = { ...existing, enabled, updatedAt: nowIso() };\n this.store.upsert(record);\n return record;\n });\n }\n\n /**\n * Re-pin the package digest to the code currently on disk.\n *\n * This is the acknowledgement step after a plugin's code changes — an upgrade,\n * a `git pull`, or something the user did not expect. It reports the old and\n * new digest so the caller can show what is being approved.\n */\n async trust(name: string): Promise<{ record: PluginRecord; previousDigest: string }> {\n const existing = this.store.get(name);\n if (!existing) {\n notFound(name);\n }\n const manifest = await readManifest(existing.path);\n const digest = await digestPluginPackage(existing.path);\n return withMutationLock(this.root, PLUGIN_SCOPE, async () => {\n const record: PluginRecord = {\n ...existing,\n version: manifest.version,\n digest,\n updatedAt: nowIso(),\n };\n this.store.upsert(record);\n return { record, previousDigest: existing.digest };\n });\n }\n}\n"],"mappings":";;;;;;AAQA,IAAM,eAAe;AAErB,SAAS,SAAiB;CACxB,wBAAO,IAAI,KAAK,EAAA,CAAE,YAAY;AAChC;AAEA,SAAS,SAAS,MAAqB;CACrC,MAAM,aAAa,oBAAoB,KAAK,kBAAkB,oBAAoB;EAChF,UAAU,SAAS;EACnB,aAAa,CAAC,6CAA6C;CAC7D,CAAC;AACH;;;;;;;;AASA,IAAa,gBAAb,MAA2B;CAEN;CACA;CAFnB,YACE,OACA,MACA;EAFiB,KAAA,QAAA;EACA,KAAA,OAAA;CAChB;CAEH,OAAuB;EACrB,OAAO,KAAK,MAAM,KAAK;CACzB;CAEA,IAAI,MAAmC;EACrC,OAAO,KAAK,MAAM,IAAI,IAAI;CAC5B;;CAGA,MAAM,IAAI,KAAoC;EAC5C,MAAM,OAAO,QAAQ,GAAG;EACxB,MAAM,WAAW,MAAM,aAAa,IAAI;EACxC,MAAM,SAAS,MAAM,oBAAoB,IAAI;EAC7C,OAAO,iBAAiB,KAAK,MAAM,cAAc,YAAY;GAC3D,MAAM,WAAW,KAAK,MAAM,IAAI,SAAS,IAAI;GAC7C,IAAI,YAAY,SAAS,SAAS,MAChC,MAAM,aACJ,yDAAyD,SAAS,KAAK,KACvE,mBACA;IACE,UAAU,SAAS;IACnB,SAAS,EAAE,eAAe,SAAS,KAAK;IACxC,aAAa,CAAC,wDAAwD,SAAS,MAAM;GACvF,CACF;GAEF,MAAM,SAAuB;IAC3B,MAAM,SAAS;IACf;IACA,SAAS,SAAS;IAGlB,SAAS,UAAU,WAAW;IAC9B;IACA,SAAS,UAAU,WAAW,OAAO;IACrC,WAAW,OAAO;GACpB;GACA,KAAK,MAAM,OAAO,MAAM;GACxB,OAAO;EACT,CAAC;CACH;CAEA,MAAM,OAAO,MAA6B;EACxC,MAAM,iBAAiB,KAAK,MAAM,cAAc,YAAY;GAC1D,IAAI,CAAC,KAAK,MAAM,OAAO,IAAI,GACzB,SAAS,IAAI;EAEjB,CAAC;CACH;CAEA,MAAM,WAAW,MAAc,SAAyC;EACtE,OAAO,iBAAiB,KAAK,MAAM,cAAc,YAAY;GAC3D,MAAM,WAAW,KAAK,MAAM,IAAI,IAAI;GACpC,IAAI,CAAC,UACH,SAAS,IAAI;GAEf,MAAM,SAAuB;IAAE,GAAG;IAAU;IAAS,WAAW,OAAO;GAAE;GACzE,KAAK,MAAM,OAAO,MAAM;GACxB,OAAO;EACT,CAAC;CACH;;;;;;;;CASA,MAAM,MAAM,MAAyE;EACnF,MAAM,WAAW,KAAK,MAAM,IAAI,IAAI;EACpC,IAAI,CAAC,UACH,SAAS,IAAI;EAEf,MAAM,WAAW,MAAM,aAAa,SAAS,IAAI;EACjD,MAAM,SAAS,MAAM,oBAAoB,SAAS,IAAI;EACtD,OAAO,iBAAiB,KAAK,MAAM,cAAc,YAAY;GAC3D,MAAM,SAAuB;IAC3B,GAAG;IACH,SAAS,SAAS;IAClB;IACA,WAAW,OAAO;GACpB;GACA,KAAK,MAAM,OAAO,MAAM;GACxB,OAAO;IAAE;IAAQ,gBAAgB,SAAS;GAAO;EACnD,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PluginRecord } from '../types.js';
|
|
2
|
+
import type { AnyPickDatabase } from './db.js';
|
|
3
|
+
/**
|
|
4
|
+
* The installed plugin registry.
|
|
5
|
+
*
|
|
6
|
+
* Kept in SQLite rather than a config file so `anypick plugin` mutations are
|
|
7
|
+
* transactional with the rest of the data root, and so a plugin cannot enable
|
|
8
|
+
* itself by writing a file the loader happens to read.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PluginStore {
|
|
11
|
+
private readonly db;
|
|
12
|
+
constructor(db: AnyPickDatabase);
|
|
13
|
+
list(): PluginRecord[];
|
|
14
|
+
get(name: string): PluginRecord | null;
|
|
15
|
+
upsert(record: PluginRecord): void;
|
|
16
|
+
remove(name: string): boolean;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=plugin-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-store.d.ts","sourceRoot":"","sources":["../../src/core/plugin-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AA0B5C;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;IAA/B,YAA6B,EAAE,EAAE,eAAe,EAAI;IAEpD,IAAI,IAAI,YAAY,EAAE,CAKrB;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAKrC;IAED,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAoBjC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5B;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/core/plugin-store.ts
|
|
2
|
+
function parse(row) {
|
|
3
|
+
return {
|
|
4
|
+
name: row.name,
|
|
5
|
+
path: row.path,
|
|
6
|
+
version: row.version,
|
|
7
|
+
enabled: row.enabled === 1,
|
|
8
|
+
digest: row.digest,
|
|
9
|
+
addedAt: row.added_at,
|
|
10
|
+
updatedAt: row.updated_at
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
var COLUMNS = "name, path, version, enabled, digest, added_at, updated_at";
|
|
14
|
+
/**
|
|
15
|
+
* The installed plugin registry.
|
|
16
|
+
*
|
|
17
|
+
* Kept in SQLite rather than a config file so `anypick plugin` mutations are
|
|
18
|
+
* transactional with the rest of the data root, and so a plugin cannot enable
|
|
19
|
+
* itself by writing a file the loader happens to read.
|
|
20
|
+
*/
|
|
21
|
+
var PluginStore = class {
|
|
22
|
+
db;
|
|
23
|
+
constructor(db) {
|
|
24
|
+
this.db = db;
|
|
25
|
+
}
|
|
26
|
+
list() {
|
|
27
|
+
return this.db.prepare(`SELECT ${COLUMNS} FROM plugins ORDER BY name`).all().map(parse);
|
|
28
|
+
}
|
|
29
|
+
get(name) {
|
|
30
|
+
const row = this.db.prepare(`SELECT ${COLUMNS} FROM plugins WHERE name = ?`).get(name);
|
|
31
|
+
return row ? parse(row) : null;
|
|
32
|
+
}
|
|
33
|
+
upsert(record) {
|
|
34
|
+
this.db.prepare(`INSERT INTO plugins (${COLUMNS}) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
35
|
+
ON CONFLICT(name) DO UPDATE SET
|
|
36
|
+
path = excluded.path,
|
|
37
|
+
version = excluded.version,
|
|
38
|
+
enabled = excluded.enabled,
|
|
39
|
+
digest = excluded.digest,
|
|
40
|
+
updated_at = excluded.updated_at`).run(record.name, record.path, record.version, record.enabled ? 1 : 0, record.digest, record.addedAt, record.updatedAt);
|
|
41
|
+
}
|
|
42
|
+
remove(name) {
|
|
43
|
+
const info = this.db.prepare("DELETE FROM plugins WHERE name = ?").run(name);
|
|
44
|
+
return Number(info.changes ?? 0) > 0;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { PluginStore };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=plugin-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-store.js","names":[],"sources":["../../src/core/plugin-store.ts"],"sourcesContent":["import type { PluginRecord } from '../types';\nimport type { AnyPickDatabase } from './db';\n\ninterface PluginRow {\n name: string;\n path: string;\n version: string;\n enabled: number;\n digest: string;\n added_at: string;\n updated_at: string;\n}\n\nfunction parse(row: PluginRow): PluginRecord {\n return {\n name: row.name,\n path: row.path,\n version: row.version,\n enabled: row.enabled === 1,\n digest: row.digest,\n addedAt: row.added_at,\n updatedAt: row.updated_at,\n };\n}\n\nconst COLUMNS = 'name, path, version, enabled, digest, added_at, updated_at';\n\n/**\n * The installed plugin registry.\n *\n * Kept in SQLite rather than a config file so `anypick plugin` mutations are\n * transactional with the rest of the data root, and so a plugin cannot enable\n * itself by writing a file the loader happens to read.\n */\nexport class PluginStore {\n constructor(private readonly db: AnyPickDatabase) {}\n\n list(): PluginRecord[] {\n const rows = this.db\n .prepare(`SELECT ${COLUMNS} FROM plugins ORDER BY name`)\n .all() as unknown as PluginRow[];\n return rows.map(parse);\n }\n\n get(name: string): PluginRecord | null {\n const row = this.db.prepare(`SELECT ${COLUMNS} FROM plugins WHERE name = ?`).get(name) as\n | PluginRow\n | undefined;\n return row ? parse(row) : null;\n }\n\n upsert(record: PluginRecord): void {\n this.db\n .prepare(\n `INSERT INTO plugins (${COLUMNS}) VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(name) DO UPDATE SET\n path = excluded.path,\n version = excluded.version,\n enabled = excluded.enabled,\n digest = excluded.digest,\n updated_at = excluded.updated_at`,\n )\n .run(\n record.name,\n record.path,\n record.version,\n record.enabled ? 1 : 0,\n record.digest,\n record.addedAt,\n record.updatedAt,\n );\n }\n\n remove(name: string): boolean {\n const info = this.db.prepare('DELETE FROM plugins WHERE name = ?').run(name);\n return Number(info.changes ?? 0) > 0;\n }\n}\n"],"mappings":";AAaA,SAAS,MAAM,KAA8B;CAC3C,OAAO;EACL,MAAM,IAAI;EACV,MAAM,IAAI;EACV,SAAS,IAAI;EACb,SAAS,IAAI,YAAY;EACzB,QAAQ,IAAI;EACZ,SAAS,IAAI;EACb,WAAW,IAAI;CACjB;AACF;AAEA,IAAM,UAAU;;;;;;;;AAShB,IAAa,cAAb,MAAyB;CACM;CAA7B,YAAY,IAAsC;EAArB,KAAA,KAAA;CAAsB;CAEnD,OAAuB;EAIrB,OAHa,KAAK,GACf,QAAQ,UAAU,QAAQ,4BAA4B,CAAC,CACvD,IACI,CAAA,CAAK,IAAI,KAAK;CACvB;CAEA,IAAI,MAAmC;EACrC,MAAM,MAAM,KAAK,GAAG,QAAQ,UAAU,QAAQ,6BAA6B,CAAC,CAAC,IAAI,IAAI;EAGrF,OAAO,MAAM,MAAM,GAAG,IAAI;CAC5B;CAEA,OAAO,QAA4B;EACjC,KAAK,GACF,QACC,wBAAwB,QAAQ;;;;;;4CAOlC,CAAC,CACA,IACC,OAAO,MACP,OAAO,MACP,OAAO,SACP,OAAO,UAAU,IAAI,GACrB,OAAO,QACP,OAAO,SACP,OAAO,SACT;CACJ;CAEA,OAAO,MAAuB;EAC5B,MAAM,OAAO,KAAK,GAAG,QAAQ,oCAAoC,CAAC,CAAC,IAAI,IAAI;EAC3E,OAAO,OAAO,KAAK,WAAW,CAAC,IAAI;CACrC;AACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional per-provider proxy pool (multi-account behind one endpoint).
|
|
3
|
+
*
|
|
4
|
+
* Default mode is **single** (no pool row, or mode: "single"):
|
|
5
|
+
* each account keeps its own proxy process — current behavior.
|
|
6
|
+
*
|
|
7
|
+
* Opt-in **multi**: one shared process, members enable/disable independently.
|
|
8
|
+
*
|
|
9
|
+
* Pool state lives in the shared SQLite database (`pools` table) so it is
|
|
10
|
+
* transactional with the rest of the data root. A previously written
|
|
11
|
+
* `pool.json` (the pre-SQLite layout) is still read as a fallback on `get`
|
|
12
|
+
* so existing installs keep their pool without a separate migration step; any
|
|
13
|
+
* write replaces it (the JSON file is removed on `set`).
|
|
14
|
+
*/
|
|
15
|
+
import type { ProviderProxyPool } from '../types.js';
|
|
16
|
+
import type { AnyPickDatabase } from './db.js';
|
|
17
|
+
export declare function poolConfigPath(root: string, providerId: string): string;
|
|
18
|
+
export declare function poolRuntimeDir(root: string, providerId: string): string;
|
|
19
|
+
export declare const DEFAULT_POOL: Omit<ProviderProxyPool, 'provider' | 'updatedAt' | 'members'>;
|
|
20
|
+
export declare class PoolStore {
|
|
21
|
+
private readonly root;
|
|
22
|
+
private readonly db;
|
|
23
|
+
constructor(root: string, db: AnyPickDatabase);
|
|
24
|
+
get(providerId: string): Promise<ProviderProxyPool | null>;
|
|
25
|
+
/** Effective pool — never null; default single with empty members. */
|
|
26
|
+
getOrDefault(providerId: string): Promise<ProviderProxyPool>;
|
|
27
|
+
set(pool: ProviderProxyPool): Promise<void>;
|
|
28
|
+
delete(providerId: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Ensure members list tracks known accounts.
|
|
31
|
+
* New accounts are added enabled:true in multi mode, or ignored in single.
|
|
32
|
+
*/
|
|
33
|
+
syncMembers(providerId: string, accountNames: string[]): Promise<ProviderProxyPool>;
|
|
34
|
+
/** Turn multi-account pool on (opt-in). */
|
|
35
|
+
enableMulti(providerId: string, accountNames: string[], opts?: {
|
|
36
|
+
port?: number;
|
|
37
|
+
host?: string;
|
|
38
|
+
}): Promise<ProviderProxyPool>;
|
|
39
|
+
/** Back to single-account proxies (default). */
|
|
40
|
+
disableMulti(providerId: string): Promise<ProviderProxyPool>;
|
|
41
|
+
setMemberEnabled(providerId: string, account: string, enabled: boolean): Promise<ProviderProxyPool>;
|
|
42
|
+
private readLegacy;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=pool-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-store.d.ts","sourceRoot":"","sources":["../../src/core/pool-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAI9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAItF,CAAC;AAEF,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAFrB,YACmB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,eAAe,EAClC;IAEE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAU/D;IAED,sEAAsE;IAChE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAWjE;IAEK,GAAG,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhD;IAEK,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9C;IAED;;;OAGG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBxF;IAED,2CAA2C;IACrC,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;IAED,gDAAgD;IAC1C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUjE;IAEK,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,iBAAiB,CAAC,CAU5B;YAEa,UAAU;CAezB"}
|