codex-multi-auth 2.3.0-beta.1 → 2.3.0-beta.3
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/.codex-plugin/plugin.json +2 -1
- package/README.md +4 -4
- package/config/schema/config.schema.json +268 -21
- package/dist/index.js +0 -1
- package/dist/lib/account-policy.d.ts.map +1 -1
- package/dist/lib/account-policy.js +2 -2
- package/dist/lib/accounts/rate-limits.js +0 -1
- package/dist/lib/accounts.d.ts +3 -8
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +2 -3
- package/dist/lib/audit.d.ts +0 -9
- package/dist/lib/audit.d.ts.map +1 -1
- package/dist/lib/audit.js +0 -1
- package/dist/lib/auth/auth.js +0 -1
- package/dist/lib/auth/browser.js +0 -1
- package/dist/lib/auth/device-auth.d.ts +1 -6
- package/dist/lib/auth/device-auth.d.ts.map +1 -1
- package/dist/lib/auth/device-auth.js +5 -6
- package/dist/lib/auth/index.js +0 -1
- package/dist/lib/auth/org-override.js +0 -1
- package/dist/lib/auth/server.js +0 -1
- package/dist/lib/auth/token-utils.js +0 -1
- package/dist/lib/auth-rate-limit.js +0 -1
- package/dist/lib/budget-guard.d.ts.map +1 -1
- package/dist/lib/budget-guard.js +2 -2
- package/dist/lib/capability-policy.js +0 -1
- package/dist/lib/circuit-breaker.js +0 -1
- package/dist/lib/cli.js +1 -2
- package/dist/lib/codex-cli/index.js +0 -1
- package/dist/lib/codex-cli/observability.js +0 -1
- package/dist/lib/codex-cli/state.js +0 -1
- package/dist/lib/codex-cli/sync.d.ts +2 -2
- package/dist/lib/codex-cli/sync.d.ts.map +1 -1
- package/dist/lib/codex-cli/sync.js +1 -2
- package/dist/lib/codex-cli/writer.d.ts.map +1 -1
- package/dist/lib/codex-cli/writer.js +2 -2
- package/dist/lib/codex-manager/account-credentials.d.ts +13 -0
- package/dist/lib/codex-manager/account-credentials.d.ts.map +1 -0
- package/dist/lib/codex-manager/account-credentials.js +55 -0
- package/dist/lib/codex-manager/account-manager-commands.js +0 -1
- package/dist/lib/codex-manager/account-pool-write.d.ts +1 -1
- package/dist/lib/codex-manager/account-pool-write.d.ts.map +1 -1
- package/dist/lib/codex-manager/account-pool-write.js +0 -1
- package/dist/lib/codex-manager/backend-category-entry.js +0 -1
- package/dist/lib/codex-manager/backend-category-helpers.js +0 -1
- package/dist/lib/codex-manager/backend-category-prompt.js +0 -1
- package/dist/lib/codex-manager/backend-settings-controller.js +0 -1
- package/dist/lib/codex-manager/backend-settings-entry.js +0 -1
- package/dist/lib/codex-manager/backend-settings-helpers.d.ts +0 -1
- package/dist/lib/codex-manager/backend-settings-helpers.d.ts.map +1 -1
- package/dist/lib/codex-manager/backend-settings-helpers.js +1 -2
- package/dist/lib/codex-manager/backend-settings-prompt.js +0 -1
- package/dist/lib/codex-manager/backend-settings-schema.js +0 -1
- package/dist/lib/codex-manager/behavior-settings-panel.d.ts +1 -20
- package/dist/lib/codex-manager/behavior-settings-panel.d.ts.map +1 -1
- package/dist/lib/codex-manager/behavior-settings-panel.js +0 -1
- package/dist/lib/codex-manager/commands/account.js +0 -1
- package/dist/lib/codex-manager/commands/best.d.ts +8 -0
- package/dist/lib/codex-manager/commands/best.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/best.js +64 -1
- package/dist/lib/codex-manager/commands/bridge.js +0 -1
- package/dist/lib/codex-manager/commands/budget.js +0 -1
- package/dist/lib/codex-manager/commands/check.js +0 -1
- package/dist/lib/codex-manager/commands/config-explain.js +0 -1
- package/dist/lib/codex-manager/commands/debug-bundle.js +0 -1
- package/dist/lib/codex-manager/commands/forecast.js +0 -1
- package/dist/lib/codex-manager/commands/init-config.js +0 -1
- package/dist/lib/codex-manager/commands/integrations.js +0 -1
- package/dist/lib/codex-manager/commands/models.js +0 -1
- package/dist/lib/codex-manager/commands/monitor.js +0 -1
- package/dist/lib/codex-manager/commands/report.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/report.js +2 -2
- package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/rotation.js +1 -4
- package/dist/lib/codex-manager/commands/status.js +0 -1
- package/dist/lib/codex-manager/commands/switch.js +0 -1
- package/dist/lib/codex-manager/commands/uninstall.d.ts +2 -2
- package/dist/lib/codex-manager/commands/uninstall.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/uninstall.js +3 -34
- package/dist/lib/codex-manager/commands/unpin.js +0 -1
- package/dist/lib/codex-manager/commands/usage.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/usage.js +2 -2
- package/dist/lib/codex-manager/commands/verify.d.ts +2 -2
- package/dist/lib/codex-manager/commands/verify.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/verify.js +0 -1
- package/dist/lib/codex-manager/commands/why-selected.d.ts +1 -22
- package/dist/lib/codex-manager/commands/why-selected.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/why-selected.js +0 -1
- package/dist/lib/codex-manager/commands/workspace.js +0 -1
- package/dist/lib/codex-manager/dashboard-display-panel.d.ts +1 -15
- package/dist/lib/codex-manager/dashboard-display-panel.d.ts.map +1 -1
- package/dist/lib/codex-manager/dashboard-display-panel.js +0 -1
- package/dist/lib/codex-manager/dashboard-formatters.js +0 -1
- package/dist/lib/codex-manager/dashboard-settings-controller.js +0 -1
- package/dist/lib/codex-manager/dashboard-settings-data.js +0 -1
- package/dist/lib/codex-manager/dashboard-settings-entry.js +0 -1
- package/dist/lib/codex-manager/experimental-settings-entry.js +0 -1
- package/dist/lib/codex-manager/experimental-settings-prompt.d.ts +2 -1
- package/dist/lib/codex-manager/experimental-settings-prompt.d.ts.map +1 -1
- package/dist/lib/codex-manager/experimental-settings-prompt.js +0 -1
- package/dist/lib/codex-manager/experimental-settings-schema.js +1 -2
- package/dist/lib/codex-manager/experimental-sync-target-entry.js +0 -1
- package/dist/lib/codex-manager/experimental-sync-target.js +0 -1
- package/dist/lib/codex-manager/forecast-report-commands.js +0 -1
- package/dist/lib/codex-manager/forecast-report-shared.d.ts +2 -2
- package/dist/lib/codex-manager/forecast-report-shared.d.ts.map +1 -1
- package/dist/lib/codex-manager/forecast-report-shared.js +5 -21
- package/dist/lib/codex-manager/formatters/account-formatters.d.ts +11 -0
- package/dist/lib/codex-manager/formatters/account-formatters.d.ts.map +1 -0
- package/dist/lib/codex-manager/formatters/account-formatters.js +79 -0
- package/dist/lib/codex-manager/formatters/index.d.ts +5 -0
- package/dist/lib/codex-manager/formatters/index.d.ts.map +1 -0
- package/dist/lib/codex-manager/formatters/index.js +4 -0
- package/dist/lib/codex-manager/formatters/model-formatters.d.ts +12 -0
- package/dist/lib/codex-manager/formatters/model-formatters.d.ts.map +1 -0
- package/dist/lib/codex-manager/formatters/model-formatters.js +23 -0
- package/dist/lib/codex-manager/formatters/quota-formatters.d.ts +9 -0
- package/dist/lib/codex-manager/formatters/quota-formatters.d.ts.map +1 -0
- package/dist/lib/codex-manager/formatters/quota-formatters.js +104 -0
- package/dist/lib/codex-manager/formatters/text-style.d.ts +14 -0
- package/dist/lib/codex-manager/formatters/text-style.d.ts.map +1 -0
- package/dist/lib/codex-manager/formatters/text-style.js +111 -0
- package/dist/lib/codex-manager/health-check.d.ts +14 -0
- package/dist/lib/codex-manager/health-check.d.ts.map +1 -0
- package/dist/lib/codex-manager/health-check.js +278 -0
- package/dist/lib/codex-manager/help.d.ts +2 -1
- package/dist/lib/codex-manager/help.d.ts.map +1 -1
- package/dist/lib/codex-manager/help.js +0 -1
- package/dist/lib/codex-manager/login-action-panel.d.ts +4 -0
- package/dist/lib/codex-manager/login-action-panel.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-action-panel.js +238 -0
- package/dist/lib/codex-manager/login-flow.d.ts +17 -0
- package/dist/lib/codex-manager/login-flow.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-flow.js +387 -0
- package/dist/lib/codex-manager/login-menu-actions.d.ts +20 -0
- package/dist/lib/codex-manager/login-menu-actions.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-menu-actions.js +303 -0
- package/dist/lib/codex-manager/login-menu-data.d.ts +19 -0
- package/dist/lib/codex-manager/login-menu-data.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-menu-data.js +378 -0
- package/dist/lib/codex-manager/login-oauth.d.ts +55 -0
- package/dist/lib/codex-manager/login-oauth.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-oauth.js +345 -0
- package/dist/lib/codex-manager/manual-callback.js +0 -1
- package/dist/lib/codex-manager/persist-selected-account.d.ts +24 -0
- package/dist/lib/codex-manager/persist-selected-account.d.ts.map +1 -0
- package/dist/lib/codex-manager/persist-selected-account.js +107 -0
- package/dist/lib/codex-manager/quota-cache-helpers.d.ts +18 -0
- package/dist/lib/codex-manager/quota-cache-helpers.d.ts.map +1 -0
- package/dist/lib/codex-manager/quota-cache-helpers.js +112 -0
- package/dist/lib/codex-manager/rate-limit-markers.js +0 -1
- package/dist/lib/codex-manager/repair-commands.d.ts +0 -15
- package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -1
- package/dist/lib/codex-manager/repair-commands.js +5 -6
- package/dist/lib/codex-manager/settings-hub/backend.d.ts +0 -5
- package/dist/lib/codex-manager/settings-hub/backend.d.ts.map +1 -1
- package/dist/lib/codex-manager/settings-hub/backend.js +2 -3
- package/dist/lib/codex-manager/settings-hub/dashboard.d.ts +1 -14
- package/dist/lib/codex-manager/settings-hub/dashboard.d.ts.map +1 -1
- package/dist/lib/codex-manager/settings-hub/dashboard.js +9 -10
- package/dist/lib/codex-manager/settings-hub/experimental.js +1 -2
- package/dist/lib/codex-manager/settings-hub/index.js +1 -2
- package/dist/lib/codex-manager/settings-hub/shared.js +0 -1
- package/dist/lib/codex-manager/settings-hub-entry.js +0 -1
- package/dist/lib/codex-manager/settings-hub-menu.js +0 -1
- package/dist/lib/codex-manager/settings-hub-prompt.js +0 -1
- package/dist/lib/codex-manager/settings-hub.js +0 -1
- package/dist/lib/codex-manager/settings-panels.js +0 -1
- package/dist/lib/codex-manager/settings-persist-utils.js +0 -1
- package/dist/lib/codex-manager/settings-preview.js +0 -1
- package/dist/lib/codex-manager/settings-write-queue.d.ts +0 -10
- package/dist/lib/codex-manager/settings-write-queue.d.ts.map +1 -1
- package/dist/lib/codex-manager/settings-write-queue.js +10 -11
- package/dist/lib/codex-manager/statusline-order.js +0 -1
- package/dist/lib/codex-manager/statusline-settings-panel.d.ts +3 -18
- package/dist/lib/codex-manager/statusline-settings-panel.d.ts.map +1 -1
- package/dist/lib/codex-manager/statusline-settings-panel.js +0 -1
- package/dist/lib/codex-manager/theme-settings-panel.d.ts +1 -14
- package/dist/lib/codex-manager/theme-settings-panel.d.ts.map +1 -1
- package/dist/lib/codex-manager/theme-settings-panel.js +0 -1
- package/dist/lib/codex-manager/unified-settings-controller.js +0 -1
- package/dist/lib/codex-manager/unified-settings-entry.js +0 -1
- package/dist/lib/codex-manager.d.ts +2 -4
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +219 -2570
- package/dist/lib/config-schema.d.ts +32 -0
- package/dist/lib/config-schema.d.ts.map +1 -0
- package/dist/lib/config-schema.js +96 -0
- package/dist/lib/config.d.ts +0 -13
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +82 -123
- package/dist/lib/constants.js +0 -1
- package/dist/lib/context-overflow.js +0 -1
- package/dist/lib/dashboard-settings.d.ts +3 -3
- package/dist/lib/dashboard-settings.d.ts.map +1 -1
- package/dist/lib/dashboard-settings.js +0 -2
- package/dist/lib/entitlement-cache.js +0 -1
- package/dist/lib/env-parsing.js +0 -1
- package/dist/lib/errors.d.ts +0 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +0 -1
- package/dist/lib/forecast.d.ts +4 -3
- package/dist/lib/forecast.d.ts.map +1 -1
- package/dist/lib/forecast.js +0 -1
- package/dist/lib/fs-retry.d.ts +46 -3
- package/dist/lib/fs-retry.d.ts.map +1 -1
- package/dist/lib/fs-retry.js +77 -9
- package/dist/lib/health.js +0 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/integration-generators.js +0 -1
- package/dist/lib/live-account-sync.js +0 -1
- package/dist/lib/local-bridge.js +0 -1
- package/dist/lib/local-client-tokens.d.ts.map +1 -1
- package/dist/lib/local-client-tokens.js +2 -2
- package/dist/lib/logger.js +0 -1
- package/dist/lib/model-capability-matrix.js +0 -1
- package/dist/lib/named-backup-export.js +0 -1
- package/dist/lib/oc-chatgpt-import-adapter.d.ts +1 -1
- package/dist/lib/oc-chatgpt-import-adapter.d.ts.map +1 -1
- package/dist/lib/oc-chatgpt-import-adapter.js +0 -1
- package/dist/lib/oc-chatgpt-orchestrator.d.ts.map +1 -1
- package/dist/lib/oc-chatgpt-orchestrator.js +2 -2
- package/dist/lib/oc-chatgpt-target-detection.d.ts +1 -1
- package/dist/lib/oc-chatgpt-target-detection.d.ts.map +1 -1
- package/dist/lib/oc-chatgpt-target-detection.js +0 -1
- package/dist/lib/parallel-probe.js +0 -1
- package/dist/lib/policy/runtime-policy.js +0 -1
- package/dist/lib/preemptive-quota-scheduler.js +0 -1
- package/dist/lib/proactive-refresh.js +0 -1
- package/dist/lib/prompts/codex-host-bridge.d.ts +0 -8
- package/dist/lib/prompts/codex-host-bridge.d.ts.map +1 -1
- package/dist/lib/prompts/codex-host-bridge.js +0 -21
- package/dist/lib/prompts/codex.d.ts +3 -11
- package/dist/lib/prompts/codex.d.ts.map +1 -1
- package/dist/lib/prompts/codex.js +6 -13
- package/dist/lib/prompts/fetch-utils.d.ts +0 -2
- package/dist/lib/prompts/fetch-utils.d.ts.map +1 -1
- package/dist/lib/prompts/fetch-utils.js +2 -3
- package/dist/lib/prompts/host-codex-prompt.d.ts.map +1 -1
- package/dist/lib/prompts/host-codex-prompt.js +2 -2
- package/dist/lib/quota-cache.d.ts.map +1 -1
- package/dist/lib/quota-cache.js +17 -44
- package/dist/lib/quota-probe.js +0 -1
- package/dist/lib/quota-readiness.js +0 -1
- package/dist/lib/recovery/constants.js +0 -1
- package/dist/lib/recovery/index.js +0 -1
- package/dist/lib/recovery/storage.d.ts.map +1 -1
- package/dist/lib/recovery/storage.js +35 -54
- package/dist/lib/recovery/storage.js.map +1 -1
- package/dist/lib/recovery/types.d.ts +4 -12
- package/dist/lib/recovery/types.d.ts.map +1 -1
- package/dist/lib/recovery/types.js +0 -1
- package/dist/lib/recovery.d.ts +2 -2
- package/dist/lib/recovery.d.ts.map +1 -1
- package/dist/lib/recovery.js +0 -1
- package/dist/lib/refresh-guardian.js +0 -1
- package/dist/lib/refresh-lease.d.ts.map +1 -1
- package/dist/lib/refresh-lease.js +1 -4
- package/dist/lib/refresh-queue.js +0 -1
- package/dist/lib/request/error-classification.d.ts +75 -0
- package/dist/lib/request/error-classification.d.ts.map +1 -0
- package/dist/lib/request/error-classification.js +295 -0
- package/dist/lib/request/failover-config.js +0 -1
- package/dist/lib/request/failure-policy.js +0 -1
- package/dist/lib/request/fetch-helpers.d.ts +10 -114
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +7 -589
- package/dist/lib/request/headers.d.ts +33 -0
- package/dist/lib/request/headers.d.ts.map +1 -0
- package/dist/lib/request/headers.js +64 -0
- package/dist/lib/request/helpers/input-utils.js +0 -1
- package/dist/lib/request/helpers/model-map.d.ts +10 -0
- package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
- package/dist/lib/request/helpers/model-map.js +11 -1
- package/dist/lib/request/helpers/tool-utils.js +0 -1
- package/dist/lib/request/index.js +0 -1
- package/dist/lib/request/rate-limit-backoff.js +0 -1
- package/dist/lib/request/rate-limit-decision.d.ts +28 -0
- package/dist/lib/request/rate-limit-decision.d.ts.map +1 -0
- package/dist/lib/request/rate-limit-decision.js +191 -0
- package/dist/lib/request/request-attempt-budget.js +0 -1
- package/dist/lib/request/request-init.js +0 -1
- package/dist/lib/request/request-resilience.js +0 -1
- package/dist/lib/request/request-transformer.js +0 -1
- package/dist/lib/request/response-compaction.d.ts +2 -1
- package/dist/lib/request/response-compaction.d.ts.map +1 -1
- package/dist/lib/request/response-compaction.js +0 -1
- package/dist/lib/request/response-handler.js +0 -1
- package/dist/lib/request/response-metadata.js +0 -1
- package/dist/lib/request/stream-failover-runtime.d.ts +8 -0
- package/dist/lib/request/stream-failover-runtime.d.ts.map +1 -0
- package/dist/lib/request/stream-failover-runtime.js +171 -0
- package/dist/lib/request/stream-failover.js +0 -1
- package/dist/lib/request/token-refresh.d.ts +30 -0
- package/dist/lib/request/token-refresh.d.ts.map +1 -0
- package/dist/lib/request/token-refresh.js +116 -0
- package/dist/lib/request/url-rewriting.d.ts +24 -0
- package/dist/lib/request/url-rewriting.d.ts.map +1 -0
- package/dist/lib/request/url-rewriting.js +153 -0
- package/dist/lib/request/wait-utils.js +0 -1
- package/dist/lib/rotation.d.ts +2 -4
- package/dist/lib/rotation.d.ts.map +1 -1
- package/dist/lib/rotation.js +1 -3
- package/dist/lib/routing-mutex.js +0 -1
- package/dist/lib/routing-profiles.d.ts.map +1 -1
- package/dist/lib/routing-profiles.js +2 -2
- package/dist/lib/runtime/account-check-helpers.js +0 -1
- package/dist/lib/runtime/account-check-types.js +0 -1
- package/dist/lib/runtime/account-check.js +0 -1
- package/dist/lib/runtime/account-health-check.js +0 -1
- package/dist/lib/runtime/account-manager-cache-entry.js +0 -1
- package/dist/lib/runtime/account-manager-cache.js +0 -1
- package/dist/lib/runtime/account-pool.js +0 -1
- package/dist/lib/runtime/account-scope.js +0 -1
- package/dist/lib/runtime/account-select-event.js +0 -1
- package/dist/lib/runtime/account-selection.js +0 -1
- package/dist/lib/runtime/account-state.js +0 -1
- package/dist/lib/runtime/account-status.js +0 -1
- package/dist/lib/runtime/account-storage-scope-entry.js +0 -1
- package/dist/lib/runtime/app-bind.js +0 -1
- package/dist/lib/runtime/auth-facade.js +0 -1
- package/dist/lib/runtime/browser-oauth-flow.js +0 -1
- package/dist/lib/runtime/capability-boost.js +0 -1
- package/dist/lib/runtime/config-toml.d.ts +0 -6
- package/dist/lib/runtime/config-toml.d.ts.map +1 -1
- package/dist/lib/runtime/config-toml.js +6 -7
- package/dist/lib/runtime/event-handler.d.ts +0 -31
- package/dist/lib/runtime/event-handler.d.ts.map +1 -1
- package/dist/lib/runtime/event-handler.js +0 -23
- package/dist/lib/runtime/first-run.d.ts +78 -0
- package/dist/lib/runtime/first-run.d.ts.map +1 -0
- package/dist/lib/runtime/first-run.js +327 -0
- package/dist/lib/runtime/flagged-verify-types.js +0 -1
- package/dist/lib/runtime/hydrate-emails.js +0 -1
- package/dist/lib/runtime/live-sync-entry.js +0 -1
- package/dist/lib/runtime/live-sync.js +0 -1
- package/dist/lib/runtime/loader-setup.js +0 -1
- package/dist/lib/runtime/login-menu-accounts.js +0 -1
- package/dist/lib/runtime/manual-oauth-flow.js +0 -1
- package/dist/lib/runtime/oauth-browser-flow.js +0 -1
- package/dist/lib/runtime/preemptive-quota.js +0 -1
- package/dist/lib/runtime/quota-headers.d.ts +1 -6
- package/dist/lib/runtime/quota-headers.d.ts.map +1 -1
- package/dist/lib/runtime/quota-headers.js +5 -6
- package/dist/lib/runtime/quota-probe.js +0 -1
- package/dist/lib/runtime/quota-settings.js +0 -1
- package/dist/lib/runtime/refresh-guardian-entry.js +0 -1
- package/dist/lib/runtime/refresh-guardian.js +0 -1
- package/dist/lib/runtime/request-init.js +0 -1
- package/dist/lib/runtime/rotation-account-selection.d.ts +38 -0
- package/dist/lib/runtime/rotation-account-selection.d.ts.map +1 -0
- package/dist/lib/runtime/rotation-account-selection.js +172 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts +54 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts.map +1 -0
- package/dist/lib/runtime/rotation-proxy-state.js +56 -0
- package/dist/lib/runtime/rotation-server-types.d.ts +57 -0
- package/dist/lib/runtime/rotation-server-types.d.ts.map +1 -0
- package/dist/lib/runtime/rotation-server-types.js +1 -0
- package/dist/lib/runtime/rotation-storage-meta.d.ts +40 -0
- package/dist/lib/runtime/rotation-storage-meta.d.ts.map +1 -0
- package/dist/lib/runtime/rotation-storage-meta.js +143 -0
- package/dist/lib/runtime/rotation-token-refresh.d.ts +25 -0
- package/dist/lib/runtime/rotation-token-refresh.d.ts.map +1 -0
- package/dist/lib/runtime/rotation-token-refresh.js +99 -0
- package/dist/lib/runtime/runtime-current-account.d.ts +3 -3
- package/dist/lib/runtime/runtime-current-account.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-current-account.js +2 -5
- package/dist/lib/runtime/runtime-observability.d.ts +2 -2
- package/dist/lib/runtime/runtime-observability.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-observability.js +0 -5
- package/dist/lib/runtime/runtime-services.js +0 -1
- package/dist/lib/runtime/session-affinity-entry.js +0 -1
- package/dist/lib/runtime/session-affinity.js +0 -1
- package/dist/lib/runtime/session-recovery.js +0 -1
- package/dist/lib/runtime/status-marker.js +0 -1
- package/dist/lib/runtime/storage-scope.js +0 -1
- package/dist/lib/runtime/toast.js +0 -1
- package/dist/lib/runtime/ui-runtime-entry.js +0 -1
- package/dist/lib/runtime/ui-runtime.js +0 -1
- package/dist/lib/runtime/verify-flagged.js +0 -1
- package/dist/lib/runtime-constants.js +0 -1
- package/dist/lib/runtime-paths.js +0 -1
- package/dist/lib/runtime-rotation-proxy.d.ts +7 -124
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
- package/dist/lib/runtime-rotation-proxy.js +618 -1356
- package/dist/lib/schemas.d.ts +5 -93
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +9 -10
- package/dist/lib/session-affinity.js +0 -1
- package/dist/lib/shutdown.js +0 -1
- package/dist/lib/storage/account-clear-entry.js +0 -1
- package/dist/lib/storage/account-clear.js +0 -1
- package/dist/lib/storage/account-match-utils.js +0 -1
- package/dist/lib/storage/account-persistence.d.ts +1 -1
- package/dist/lib/storage/account-persistence.d.ts.map +1 -1
- package/dist/lib/storage/account-persistence.js +0 -1
- package/dist/lib/storage/account-port.d.ts +1 -1
- package/dist/lib/storage/account-port.d.ts.map +1 -1
- package/dist/lib/storage/account-port.js +0 -1
- package/dist/lib/storage/account-save-entry.d.ts +1 -1
- package/dist/lib/storage/account-save-entry.d.ts.map +1 -1
- package/dist/lib/storage/account-save-entry.js +0 -1
- package/dist/lib/storage/account-save.d.ts +1 -1
- package/dist/lib/storage/account-save.d.ts.map +1 -1
- package/dist/lib/storage/account-save.js +0 -1
- package/dist/lib/storage/account-snapshot.js +0 -1
- package/dist/lib/storage/backup-metadata-builder.d.ts +1 -1
- package/dist/lib/storage/backup-metadata-builder.d.ts.map +1 -1
- package/dist/lib/storage/backup-metadata-builder.js +0 -1
- package/dist/lib/storage/backup-metadata.d.ts +13 -0
- package/dist/lib/storage/backup-metadata.d.ts.map +1 -1
- package/dist/lib/storage/backup-metadata.js +0 -1
- package/dist/lib/storage/backup-paths.js +0 -1
- package/dist/lib/storage/backup-restore.d.ts +1 -1
- package/dist/lib/storage/backup-restore.d.ts.map +1 -1
- package/dist/lib/storage/backup-restore.js +0 -1
- package/dist/lib/storage/cache-artifacts.js +0 -1
- package/dist/lib/storage/error-hints.js +0 -1
- package/dist/lib/storage/file-paths.d.ts +2 -2
- package/dist/lib/storage/file-paths.d.ts.map +1 -1
- package/dist/lib/storage/file-paths.js +2 -3
- package/dist/lib/storage/fixture-guards.d.ts +1 -1
- package/dist/lib/storage/fixture-guards.d.ts.map +1 -1
- package/dist/lib/storage/fixture-guards.js +0 -1
- package/dist/lib/storage/flagged-entry.js +0 -1
- package/dist/lib/storage/flagged-load-entry.d.ts +1 -1
- package/dist/lib/storage/flagged-load-entry.d.ts.map +1 -1
- package/dist/lib/storage/flagged-load-entry.js +0 -1
- package/dist/lib/storage/flagged-save-entry.d.ts +1 -1
- package/dist/lib/storage/flagged-save-entry.d.ts.map +1 -1
- package/dist/lib/storage/flagged-save-entry.js +0 -1
- package/dist/lib/storage/flagged-storage-file.d.ts +1 -1
- package/dist/lib/storage/flagged-storage-file.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage-file.js +0 -1
- package/dist/lib/storage/flagged-storage-io.d.ts +1 -1
- package/dist/lib/storage/flagged-storage-io.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage-io.js +2 -3
- package/dist/lib/storage/flagged-storage.d.ts +1 -1
- package/dist/lib/storage/flagged-storage.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage.js +15 -2
- package/dist/lib/storage/flagged-storage.js.map +1 -1
- package/dist/lib/storage/gitignore.js +0 -1
- package/dist/lib/storage/hash.js +0 -1
- package/dist/lib/storage/health.js +0 -1
- package/dist/lib/storage/identity.js +0 -1
- package/dist/lib/storage/import-export.d.ts +1 -1
- package/dist/lib/storage/import-export.d.ts.map +1 -1
- package/dist/lib/storage/import-export.js +2 -3
- package/dist/lib/storage/metadata-section.js +0 -1
- package/dist/lib/storage/migrations.d.ts +7 -49
- package/dist/lib/storage/migrations.d.ts.map +1 -1
- package/dist/lib/storage/migrations.js +5 -2
- package/dist/lib/storage/named-backup-entry.js +0 -1
- package/dist/lib/storage/named-backups-entry.d.ts +1 -1
- package/dist/lib/storage/named-backups-entry.d.ts.map +1 -1
- package/dist/lib/storage/named-backups-entry.js +0 -1
- package/dist/lib/storage/named-backups.js +0 -1
- package/dist/lib/storage/path-state.js +0 -1
- package/dist/lib/storage/paths.js +0 -1
- package/dist/lib/storage/project-migration.d.ts +1 -1
- package/dist/lib/storage/project-migration.d.ts.map +1 -1
- package/dist/lib/storage/project-migration.js +0 -1
- package/dist/lib/storage/public-types.d.ts +70 -0
- package/dist/lib/storage/public-types.d.ts.map +1 -0
- package/dist/lib/storage/public-types.js +6 -0
- package/dist/lib/storage/record-utils.js +0 -1
- package/dist/lib/storage/restore-assessment.d.ts +1 -1
- package/dist/lib/storage/restore-assessment.d.ts.map +1 -1
- package/dist/lib/storage/restore-assessment.js +0 -1
- package/dist/lib/storage/restore-backup-entry.d.ts +1 -1
- package/dist/lib/storage/restore-backup-entry.d.ts.map +1 -1
- package/dist/lib/storage/restore-backup-entry.js +0 -1
- package/dist/lib/storage/restore-metadata.d.ts +1 -1
- package/dist/lib/storage/restore-metadata.d.ts.map +1 -1
- package/dist/lib/storage/restore-metadata.js +0 -1
- package/dist/lib/storage/restore.d.ts +1 -1
- package/dist/lib/storage/restore.d.ts.map +1 -1
- package/dist/lib/storage/restore.js +0 -1
- package/dist/lib/storage/save-retry.d.ts +10 -0
- package/dist/lib/storage/save-retry.d.ts.map +1 -0
- package/dist/lib/storage/save-retry.js +26 -0
- package/dist/lib/storage/snapshot-inspectors.d.ts +1 -1
- package/dist/lib/storage/snapshot-inspectors.d.ts.map +1 -1
- package/dist/lib/storage/snapshot-inspectors.js +0 -1
- package/dist/lib/storage/storage-parser.d.ts +1 -1
- package/dist/lib/storage/storage-parser.d.ts.map +1 -1
- package/dist/lib/storage/storage-parser.js +0 -1
- package/dist/lib/storage/transactions.d.ts +1 -1
- package/dist/lib/storage/transactions.d.ts.map +1 -1
- package/dist/lib/storage/transactions.js +0 -1
- package/dist/lib/storage.d.ts +3 -24
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +47 -55
- package/dist/lib/table-formatter.js +0 -1
- package/dist/lib/temp-path.d.ts +26 -0
- package/dist/lib/temp-path.d.ts.map +1 -0
- package/dist/lib/temp-path.js +30 -0
- package/dist/lib/tools/hashline-tools.js +0 -1
- package/dist/lib/types.js +0 -1
- package/dist/lib/ui/ansi.js +0 -1
- package/dist/lib/ui/auth-menu-builder.d.ts +89 -0
- package/dist/lib/ui/auth-menu-builder.d.ts.map +1 -0
- package/dist/lib/ui/auth-menu-builder.js +350 -0
- package/dist/lib/ui/auth-menu.d.ts +2 -76
- package/dist/lib/ui/auth-menu.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.js +3 -349
- package/dist/lib/ui/confirm.js +0 -1
- package/dist/lib/ui/display-width.js +0 -1
- package/dist/lib/ui/format.js +0 -1
- package/dist/lib/ui/index.d.ts +10 -0
- package/dist/lib/ui/index.d.ts.map +1 -0
- package/dist/lib/ui/index.js +9 -0
- package/dist/lib/ui/runtime.js +0 -1
- package/dist/lib/ui/select.js +0 -1
- package/dist/lib/ui/theme.d.ts +3 -2
- package/dist/lib/ui/theme.d.ts.map +1 -1
- package/dist/lib/ui/theme.js +0 -1
- package/dist/lib/ui/ui-copy.d.ts +159 -0
- package/dist/lib/ui/ui-copy.d.ts.map +1 -0
- package/dist/lib/ui/ui-copy.js +163 -0
- package/dist/lib/unified-settings.d.ts.map +1 -1
- package/dist/lib/unified-settings.js +2 -2
- package/dist/lib/update-notice.d.ts.map +1 -1
- package/dist/lib/update-notice.js +2 -2
- package/dist/lib/usage/index.js +0 -1
- package/dist/lib/usage/ledger.js +0 -1
- package/dist/lib/usage/pricing.js +0 -1
- package/dist/lib/usage/redaction.js +0 -1
- package/dist/lib/usage/types.js +0 -1
- package/dist/lib/utils.js +0 -1
- package/package.json +8 -9
- package/scripts/postinstall.js +34 -265
- package/scripts/preuninstall.js +2 -2
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Repo-relative path of the committed, generated schema file. */
|
|
2
|
+
export declare const CONFIG_SCHEMA_RELATIVE_PATH = "config/schema/config.schema.json";
|
|
3
|
+
type JsonObject = Record<string, unknown>;
|
|
4
|
+
/**
|
|
5
|
+
* Build the full JSON schema document for `config/schema/config.schema.json`.
|
|
6
|
+
*
|
|
7
|
+
* Structure:
|
|
8
|
+
* - Root keeps the original template metadata (`$schema` draft 2020-12, `$id`,
|
|
9
|
+
* `title`) and the template root keys (`plugin`, `provider`, `model`) that
|
|
10
|
+
* the shipped `config/*.json` templates reference via `$schema`.
|
|
11
|
+
* - The complete runtime plugin configuration surface is generated from
|
|
12
|
+
* `PluginConfigSchema` via zod v4's native `z.toJSONSchema()` and embedded
|
|
13
|
+
* as `$defs.pluginConfig`, referenced by the optional root `pluginConfig`
|
|
14
|
+
* property (the shape persisted in unified `settings.json`).
|
|
15
|
+
*
|
|
16
|
+
* `io: "input"` matches runtime semantics: `loadPluginConfig` tolerates and
|
|
17
|
+
* strips unknown keys instead of rejecting them, so the generated definition
|
|
18
|
+
* must not emit `additionalProperties: false`.
|
|
19
|
+
*
|
|
20
|
+
* Key order is the zod shape definition order, which is stable across runs,
|
|
21
|
+
* so output is deterministic.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildConfigJsonSchema(): JsonObject;
|
|
24
|
+
/**
|
|
25
|
+
* Serialize the generated schema exactly as it is committed on disk:
|
|
26
|
+
* 2-space indent (matching the previous handwritten file) plus a trailing
|
|
27
|
+
* newline. `JSON.stringify` preserves insertion order, so the output is
|
|
28
|
+
* byte-for-byte deterministic.
|
|
29
|
+
*/
|
|
30
|
+
export declare function renderConfigJsonSchema(): string;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=config-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../lib/config-schema.ts"],"names":[],"mappings":"AAmBA,kEAAkE;AAClE,eAAO,MAAM,2BAA2B,qCAAqC,CAAC;AAE9E,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,CAmDlD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for `config/schema/config.schema.json`.
|
|
3
|
+
*
|
|
4
|
+
* The JSON schema shipped under `config/schema/` is GENERATED from the zod
|
|
5
|
+
* `PluginConfigSchema` in `lib/schemas.ts` so it cannot drift from the real
|
|
6
|
+
* runtime config surface (audit roadmap §4.5.2).
|
|
7
|
+
*
|
|
8
|
+
* - Regenerate the committed file with `npm run generate:schema`
|
|
9
|
+
* (see `scripts/generate-config-schema.mjs`).
|
|
10
|
+
* - Drift is a test failure: `test/config-schema-generated.test.ts`
|
|
11
|
+
* regenerates the schema in-memory and compares it to the committed file.
|
|
12
|
+
*
|
|
13
|
+
* @internal Generator/tooling module: deliberately NOT re-exported from
|
|
14
|
+
* lib/index.ts. Its only consumers are scripts/generate-config-schema.mjs
|
|
15
|
+
* (via the compiled dist output) and the drift-guard test.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { PluginConfigSchema } from "./schemas.js";
|
|
19
|
+
/** Repo-relative path of the committed, generated schema file. */
|
|
20
|
+
export const CONFIG_SCHEMA_RELATIVE_PATH = "config/schema/config.schema.json";
|
|
21
|
+
/**
|
|
22
|
+
* Build the full JSON schema document for `config/schema/config.schema.json`.
|
|
23
|
+
*
|
|
24
|
+
* Structure:
|
|
25
|
+
* - Root keeps the original template metadata (`$schema` draft 2020-12, `$id`,
|
|
26
|
+
* `title`) and the template root keys (`plugin`, `provider`, `model`) that
|
|
27
|
+
* the shipped `config/*.json` templates reference via `$schema`.
|
|
28
|
+
* - The complete runtime plugin configuration surface is generated from
|
|
29
|
+
* `PluginConfigSchema` via zod v4's native `z.toJSONSchema()` and embedded
|
|
30
|
+
* as `$defs.pluginConfig`, referenced by the optional root `pluginConfig`
|
|
31
|
+
* property (the shape persisted in unified `settings.json`).
|
|
32
|
+
*
|
|
33
|
+
* `io: "input"` matches runtime semantics: `loadPluginConfig` tolerates and
|
|
34
|
+
* strips unknown keys instead of rejecting them, so the generated definition
|
|
35
|
+
* must not emit `additionalProperties: false`.
|
|
36
|
+
*
|
|
37
|
+
* Key order is the zod shape definition order, which is stable across runs,
|
|
38
|
+
* so output is deterministic.
|
|
39
|
+
*/
|
|
40
|
+
export function buildConfigJsonSchema() {
|
|
41
|
+
const pluginConfigRaw = z.toJSONSchema(PluginConfigSchema, {
|
|
42
|
+
target: "draft-2020-12",
|
|
43
|
+
io: "input",
|
|
44
|
+
});
|
|
45
|
+
// Guard before mutating: a zod behavior change returning a non-object
|
|
46
|
+
// here should fail loudly, not via a confusing delete/??= throw below.
|
|
47
|
+
if (!pluginConfigRaw ||
|
|
48
|
+
typeof pluginConfigRaw !== "object" ||
|
|
49
|
+
Array.isArray(pluginConfigRaw)) {
|
|
50
|
+
throw new Error("z.toJSONSchema(PluginConfigSchema) returned a non-object");
|
|
51
|
+
}
|
|
52
|
+
const pluginConfig = pluginConfigRaw;
|
|
53
|
+
// The embedded definition inherits the root document's dialect; a nested
|
|
54
|
+
// `$schema` keyword would be redundant noise.
|
|
55
|
+
delete pluginConfig.$schema;
|
|
56
|
+
// ??= so a future .describe() on PluginConfigSchema wins over this default.
|
|
57
|
+
pluginConfig.description ??=
|
|
58
|
+
"Runtime plugin configuration (the `pluginConfig` section of unified settings.json, also accepted flat in CODEX_MULTI_AUTH_CONFIG_PATH overrides). Generated from PluginConfigSchema in lib/schemas.ts — do not edit by hand; run `npm run generate:schema`.";
|
|
59
|
+
return {
|
|
60
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
61
|
+
$id: "https://codex-multi-auth.local/schema/config.schema.json",
|
|
62
|
+
title: "codex-multi-auth config template",
|
|
63
|
+
description: "GENERATED FILE — do not edit by hand. Regenerate with `npm run generate:schema` (source: lib/config-schema.ts + PluginConfigSchema in lib/schemas.ts).",
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {
|
|
66
|
+
plugin: {
|
|
67
|
+
type: "array",
|
|
68
|
+
items: { type: "string" },
|
|
69
|
+
},
|
|
70
|
+
provider: {
|
|
71
|
+
type: "object",
|
|
72
|
+
additionalProperties: true,
|
|
73
|
+
},
|
|
74
|
+
model: {
|
|
75
|
+
type: "string",
|
|
76
|
+
},
|
|
77
|
+
pluginConfig: {
|
|
78
|
+
$ref: "#/$defs/pluginConfig",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ["plugin", "provider"],
|
|
82
|
+
additionalProperties: true,
|
|
83
|
+
$defs: {
|
|
84
|
+
pluginConfig,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Serialize the generated schema exactly as it is committed on disk:
|
|
90
|
+
* 2-space indent (matching the previous handwritten file) plus a trailing
|
|
91
|
+
* newline. `JSON.stringify` preserves insertion order, so the output is
|
|
92
|
+
* byte-for-byte deterministic.
|
|
93
|
+
*/
|
|
94
|
+
export function renderConfigJsonSchema() {
|
|
95
|
+
return `${JSON.stringify(buildConfigJsonSchema(), null, 2)}\n`;
|
|
96
|
+
}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -40,19 +40,6 @@ export declare function getDefaultPluginConfig(): PluginConfig;
|
|
|
40
40
|
* @returns The effective PluginConfig: a shallow merge of DEFAULT_PLUGIN_CONFIG with any validated user-provided settings
|
|
41
41
|
*/
|
|
42
42
|
export declare function loadPluginConfig(): PluginConfig;
|
|
43
|
-
/**
|
|
44
|
-
* Persist a partial plugin configuration to disk, merging it with existing stored settings.
|
|
45
|
-
*
|
|
46
|
-
* This writes the sanitized patch either to the path specified by the CODEX_MULTI_AUTH_CONFIG_PATH
|
|
47
|
-
* environment variable (if set) or into the unified settings store. The function does not take
|
|
48
|
-
* internal locks; callers should avoid concurrent invocations that might overwrite each other.
|
|
49
|
-
* On Windows and other platforms the write behavior follows the Node.js filesystem semantics and may
|
|
50
|
-
* not be atomic across processes. Callers are responsible for redacting any sensitive values
|
|
51
|
-
* (tokens, secrets) before calling if redaction is required; this function writes merged values as-is.
|
|
52
|
-
*
|
|
53
|
-
* @param configPatch - Partial PluginConfig containing changes to persist; undefined fields are ignored.
|
|
54
|
-
* @returns void
|
|
55
|
-
*/
|
|
56
43
|
export declare function savePluginConfig(configPatch: Partial<PluginConfig>): Promise<void>;
|
|
57
44
|
export declare function getCodexMode(pluginConfig: PluginConfig): boolean;
|
|
58
45
|
export declare function getCodexRuntimeRotationProxy(pluginConfig: PluginConfig): boolean;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -2,10 +2,13 @@ import { existsSync, promises as fs, readFileSync } from "node:fs";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { parseBooleanEnv } from "./env-parsing.js";
|
|
5
|
+
import { withRetry, withRetrySync } from "./fs-retry.js";
|
|
5
6
|
import { logWarn } from "./logger.js";
|
|
7
|
+
import { StorageError } from "./errors.js";
|
|
6
8
|
import { getCodexHomeDir, getCodexMultiAuthDir, getLegacyCodexDir, } from "./runtime-paths.js";
|
|
7
9
|
import { getValidationErrors, PluginConfigSchema } from "./schemas.js";
|
|
8
10
|
import { getUnifiedSettingsPath, loadUnifiedPluginConfigSync, saveUnifiedPluginConfig, } from "./unified-settings.js";
|
|
11
|
+
import { tempPathFor } from "./temp-path.js";
|
|
9
12
|
const CONFIG_DIR = getCodexMultiAuthDir();
|
|
10
13
|
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
11
14
|
const CODEX_HOME_DIR = getCodexHomeDir();
|
|
@@ -32,33 +35,19 @@ const RETRYABLE_CONFIG_READ_CODES = new Set(["EBUSY", "EPERM", "EAGAIN"]);
|
|
|
32
35
|
* attempts). ENOENT and SyntaxError are not retryable and propagate unchanged.
|
|
33
36
|
*/
|
|
34
37
|
function readFileSyncWithConfigRetry(configPath) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
for
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// synchronous and runs on startup, so the previous Atomics.wait froze
|
|
49
|
-
// the entire event loop for up to ~150ms on a transient Windows AV /
|
|
50
|
-
// indexer lock. An immediate re-read costs microseconds and a brief
|
|
51
|
-
// exclusive lock is typically released by the next attempt; if it
|
|
52
|
-
// genuinely persists we fail fast (the caller falls back to defaults)
|
|
53
|
-
// rather than stalling the process.
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Exhausted attempts on a retryable code: surface the last error so the caller
|
|
60
|
-
// classifies it (unreadable) instead of silently returning stale/empty content.
|
|
61
|
-
throw lastError;
|
|
38
|
+
// Immediate retry (backoffMs: 0) — NOT a blocking sleep. loadPluginConfig()
|
|
39
|
+
// is synchronous and runs on startup, so the previous Atomics.wait froze the
|
|
40
|
+
// entire event loop for up to ~150ms on a transient Windows AV / indexer
|
|
41
|
+
// lock. An immediate re-read costs microseconds and a brief exclusive lock
|
|
42
|
+
// is typically released by the next attempt; if it genuinely persists we
|
|
43
|
+
// fail fast (the caller falls back to defaults) rather than stalling the
|
|
44
|
+
// process. On exhaustion the last error surfaces so the caller classifies it
|
|
45
|
+
// (unreadable) instead of silently returning stale/empty content.
|
|
46
|
+
return withRetrySync(() => readFileSync(configPath, "utf-8"), {
|
|
47
|
+
maxAttempts: 5,
|
|
48
|
+
backoffMs: 0,
|
|
49
|
+
retryableCodes: RETRYABLE_CONFIG_READ_CODES,
|
|
50
|
+
});
|
|
62
51
|
}
|
|
63
52
|
function logConfigWarnOnce(message) {
|
|
64
53
|
if (emittedConfigWarnings.has(message)) {
|
|
@@ -332,10 +321,6 @@ function stripUtf8Bom(content) {
|
|
|
332
321
|
function isRecord(value) {
|
|
333
322
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
334
323
|
}
|
|
335
|
-
function isRetryableFsError(error) {
|
|
336
|
-
const code = error?.code;
|
|
337
|
-
return typeof code === "string" && RETRYABLE_FS_CODES.has(code);
|
|
338
|
-
}
|
|
339
324
|
function sleep(ms) {
|
|
340
325
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
341
326
|
}
|
|
@@ -344,33 +329,27 @@ async function getConfigFileMtimeMs(filePath) {
|
|
|
344
329
|
// run on the Windows-sensitive save path, where a transient EBUSY/EPERM/EAGAIN
|
|
345
330
|
// from an AV/indexer lock on a single fs.stat would abort the entire save.
|
|
346
331
|
// Mirror readConfigRecordForSave's bounded transient-FS retry (same code set,
|
|
347
|
-
// same backoff, 5 attempts). ENOENT still returns null immediately.
|
|
348
|
-
|
|
349
|
-
|
|
332
|
+
// same backoff, 5 attempts). ENOENT still returns null immediately. On
|
|
333
|
+
// exhaustion the last failure surfaces so the caller treats it as a real
|
|
334
|
+
// save error rather than a phantom missing file.
|
|
335
|
+
return withRetry(async () => {
|
|
350
336
|
try {
|
|
351
337
|
return (await fs.stat(filePath)).mtimeMs;
|
|
352
338
|
}
|
|
353
339
|
catch (error) {
|
|
354
|
-
|
|
355
|
-
if (code === "ENOENT") {
|
|
340
|
+
if (error?.code === "ENOENT") {
|
|
356
341
|
return null;
|
|
357
342
|
}
|
|
358
|
-
lastError = error;
|
|
359
|
-
if (typeof code === "string" &&
|
|
360
|
-
RETRYABLE_CONFIG_READ_CODES.has(code) &&
|
|
361
|
-
attempt < 4) {
|
|
362
|
-
await sleep(10 * 2 ** attempt);
|
|
363
|
-
continue;
|
|
364
|
-
}
|
|
365
343
|
throw error;
|
|
366
344
|
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
345
|
+
}, {
|
|
346
|
+
maxAttempts: 5,
|
|
347
|
+
backoffMs: (attempt) => 10 * 2 ** (attempt - 1),
|
|
348
|
+
retryableCodes: RETRYABLE_CONFIG_READ_CODES,
|
|
349
|
+
});
|
|
371
350
|
}
|
|
372
351
|
async function writeJsonFileAtomicWithRetry(filePath, payload, options) {
|
|
373
|
-
const tempPath =
|
|
352
|
+
const tempPath = tempPathFor(filePath);
|
|
374
353
|
await fs.mkdir(dirname(filePath), { recursive: true });
|
|
375
354
|
await fs.writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
|
|
376
355
|
let renamed = false;
|
|
@@ -386,19 +365,12 @@ async function writeJsonFileAtomicWithRetry(filePath, payload, options) {
|
|
|
386
365
|
throw staleError;
|
|
387
366
|
}
|
|
388
367
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
catch (error) {
|
|
396
|
-
if (!isRetryableFsError(error) || attempt >= 4) {
|
|
397
|
-
throw error;
|
|
398
|
-
}
|
|
399
|
-
await sleep(10 * 2 ** attempt);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
368
|
+
await withRetry(() => fs.rename(tempPath, filePath), {
|
|
369
|
+
maxAttempts: 5,
|
|
370
|
+
backoffMs: (attempt) => 10 * 2 ** (attempt - 1),
|
|
371
|
+
retryableCodes: RETRYABLE_FS_CODES,
|
|
372
|
+
});
|
|
373
|
+
renamed = true;
|
|
402
374
|
}
|
|
403
375
|
finally {
|
|
404
376
|
if (!renamed) {
|
|
@@ -438,25 +410,17 @@ const CONFIG_LOCK_TTL_MS = 10_000;
|
|
|
438
410
|
const CONFIG_LOCK_WAIT_TIMEOUT_MS = 10_000;
|
|
439
411
|
const CONFIG_LOCK_POLL_MS = 50;
|
|
440
412
|
async function unlinkConfigLockWithRetry(lockPath) {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
attempt < 4) {
|
|
453
|
-
await sleep(10 * 2 ** attempt);
|
|
454
|
-
continue;
|
|
455
|
-
}
|
|
456
|
-
// Best-effort release: a leftover lockfile is recovered as stale by the
|
|
457
|
-
// next acquirer via its expiry/mtime, so never fail the save over this.
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
413
|
+
try {
|
|
414
|
+
await withRetry(() => fs.unlink(lockPath), {
|
|
415
|
+
maxAttempts: 5,
|
|
416
|
+
backoffMs: (attempt) => 10 * 2 ** (attempt - 1),
|
|
417
|
+
retryableCodes: RETRYABLE_FS_CODES,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// ENOENT (already released) or best-effort release failure: a leftover
|
|
422
|
+
// lockfile is recovered as stale by the next acquirer via its
|
|
423
|
+
// expiry/mtime, so never fail the save over this.
|
|
460
424
|
}
|
|
461
425
|
}
|
|
462
426
|
// Owner-safe release: only unlink the lockfile if it still carries OUR owner
|
|
@@ -596,8 +560,8 @@ async function readConfigRecordForSave(configPath) {
|
|
|
596
560
|
if (!existsSync(configPath)) {
|
|
597
561
|
return { status: "missing" };
|
|
598
562
|
}
|
|
599
|
-
|
|
600
|
-
|
|
563
|
+
try {
|
|
564
|
+
return await withRetry(async () => {
|
|
601
565
|
const fileContent = await fs.readFile(configPath, "utf-8");
|
|
602
566
|
const normalizedFileContent = stripUtf8Bom(fileContent);
|
|
603
567
|
const parsed = JSON.parse(normalizedFileContent);
|
|
@@ -607,32 +571,27 @@ async function readConfigRecordForSave(configPath) {
|
|
|
607
571
|
return { status: "invalid", errorMessage };
|
|
608
572
|
}
|
|
609
573
|
return { status: "ok", record: parsed };
|
|
574
|
+
}, {
|
|
575
|
+
maxAttempts: 5,
|
|
576
|
+
backoffMs: (attempt) => 10 * 2 ** (attempt - 1),
|
|
577
|
+
retryableCodes: RETRYABLE_CONFIG_READ_CODES,
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
catch (error) {
|
|
581
|
+
const code = error?.code;
|
|
582
|
+
if (code === "ENOENT") {
|
|
583
|
+
return { status: "missing" };
|
|
610
584
|
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
return { status: "missing" };
|
|
615
|
-
}
|
|
616
|
-
if (typeof code === "string" &&
|
|
617
|
-
RETRYABLE_CONFIG_READ_CODES.has(code) &&
|
|
618
|
-
attempt < 4) {
|
|
619
|
-
await sleep(10 * 2 ** attempt);
|
|
620
|
-
continue;
|
|
621
|
-
}
|
|
622
|
-
const errorMessage = `Failed to read config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`;
|
|
623
|
-
logConfigWarnOnce(errorMessage);
|
|
624
|
-
if (error instanceof SyntaxError) {
|
|
625
|
-
return { status: "invalid", errorMessage };
|
|
626
|
-
}
|
|
627
|
-
if (typeof code === "string") {
|
|
628
|
-
return { status: "unreadable", errorMessage };
|
|
629
|
-
}
|
|
585
|
+
const errorMessage = `Failed to read config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`;
|
|
586
|
+
logConfigWarnOnce(errorMessage);
|
|
587
|
+
if (error instanceof SyntaxError) {
|
|
630
588
|
return { status: "invalid", errorMessage };
|
|
631
589
|
}
|
|
590
|
+
if (typeof code === "string") {
|
|
591
|
+
return { status: "unreadable", errorMessage };
|
|
592
|
+
}
|
|
593
|
+
return { status: "invalid", errorMessage };
|
|
632
594
|
}
|
|
633
|
-
const errorMessage = `Failed to read config from ${configPath}.`;
|
|
634
|
-
logConfigWarnOnce(errorMessage);
|
|
635
|
-
return { status: "unreadable", errorMessage };
|
|
636
595
|
}
|
|
637
596
|
function resolveStoredPluginConfigRecord() {
|
|
638
597
|
// config-01: mirror loadPluginConfig()'s precedence exactly. loadPluginConfig
|
|
@@ -735,6 +694,14 @@ function sanitizePluginConfigForSave(config) {
|
|
|
735
694
|
* @param configPatch - Partial PluginConfig containing changes to persist; undefined fields are ignored.
|
|
736
695
|
* @returns void
|
|
737
696
|
*/
|
|
697
|
+
/**
|
|
698
|
+
* Typed abort for a config save that found the existing file unreadable
|
|
699
|
+
* (audit §4.3): same message as the historical bare Error, but callers can
|
|
700
|
+
* now branch on `instanceof StorageError` / the path field instead of text.
|
|
701
|
+
*/
|
|
702
|
+
function unreadableConfigSaveError(configPath, errorMessage) {
|
|
703
|
+
return new StorageError(`Aborting config save because ${configPath} is unreadable.`, "UNREADABLE", configPath, "Fix or remove the unreadable config file, then retry the save.", new Error(errorMessage));
|
|
704
|
+
}
|
|
738
705
|
export async function savePluginConfig(configPatch) {
|
|
739
706
|
const { sanitized: sanitizedPatch, droppedKeys } = sanitizePluginConfigForSave(configPatch);
|
|
740
707
|
if (droppedKeys.length > 0) {
|
|
@@ -750,11 +717,14 @@ export async function savePluginConfig(configPatch) {
|
|
|
750
717
|
// writer. Mirrors the unified-settings save path (writeSettingsRecordAsync
|
|
751
718
|
// CAS).
|
|
752
719
|
await withConfigFileLock(envPath, async () => {
|
|
753
|
-
|
|
720
|
+
// CAS retry: ESTALE means the file's mtime moved between our stat and
|
|
721
|
+
// the write, so each attempt re-stats, re-reads, and re-merges against
|
|
722
|
+
// the latest on-disk state before writing again.
|
|
723
|
+
await withRetry(async () => {
|
|
754
724
|
const expectedMtimeMs = await getConfigFileMtimeMs(envPath);
|
|
755
725
|
const envConfigState = await readConfigRecordForSave(envPath);
|
|
756
726
|
if (envConfigState.status === "unreadable") {
|
|
757
|
-
throw
|
|
727
|
+
throw unreadableConfigSaveError(envPath, envConfigState.errorMessage);
|
|
758
728
|
}
|
|
759
729
|
const existingConfig = envConfigState.status === "ok"
|
|
760
730
|
? sanitizeStoredPluginConfigRecord(envConfigState.record)
|
|
@@ -763,20 +733,10 @@ export async function savePluginConfig(configPatch) {
|
|
|
763
733
|
...(existingConfig ?? {}),
|
|
764
734
|
...sanitizedPatch,
|
|
765
735
|
};
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
return;
|
|
771
|
-
}
|
|
772
|
-
catch (error) {
|
|
773
|
-
if (error.code !== "ESTALE" ||
|
|
774
|
-
attempt >= 2) {
|
|
775
|
-
throw error;
|
|
776
|
-
}
|
|
777
|
-
// Loop: re-stat, re-read, re-merge against the latest on-disk state.
|
|
778
|
-
}
|
|
779
|
-
}
|
|
736
|
+
await writeJsonFileAtomicWithRetry(envPath, merged, {
|
|
737
|
+
expectedMtimeMs,
|
|
738
|
+
});
|
|
739
|
+
}, { maxAttempts: 3, backoffMs: 0, retryableCodes: ["ESTALE"] });
|
|
780
740
|
});
|
|
781
741
|
});
|
|
782
742
|
return;
|
|
@@ -785,7 +745,7 @@ export async function savePluginConfig(configPatch) {
|
|
|
785
745
|
await withConfigSaveLock(unifiedPath, async () => {
|
|
786
746
|
const unifiedConfigState = await readConfigRecordForSave(unifiedPath);
|
|
787
747
|
if (unifiedConfigState.status === "unreadable") {
|
|
788
|
-
throw
|
|
748
|
+
throw unreadableConfigSaveError(unifiedPath, unifiedConfigState.errorMessage);
|
|
789
749
|
}
|
|
790
750
|
const unifiedConfigRecord = unifiedConfigState.status === "ok"
|
|
791
751
|
? unifiedConfigState.record.pluginConfig
|
|
@@ -796,7 +756,7 @@ export async function savePluginConfig(configPatch) {
|
|
|
796
756
|
? await readConfigRecordForSave(legacyPath)
|
|
797
757
|
: null;
|
|
798
758
|
if (legacyConfigState?.status === "unreadable") {
|
|
799
|
-
throw
|
|
759
|
+
throw unreadableConfigSaveError(legacyPath, legacyConfigState.errorMessage);
|
|
800
760
|
}
|
|
801
761
|
const legacyConfig = legacyConfigState?.status === "ok"
|
|
802
762
|
? sanitizeStoredPluginConfigRecord(legacyConfigState.record)
|
|
@@ -1728,4 +1688,3 @@ export function getPluginConfigExplainReport() {
|
|
|
1728
1688
|
entries,
|
|
1729
1689
|
};
|
|
1730
1690
|
}
|
|
1731
|
-
//# sourceMappingURL=config.js.map
|
package/dist/lib/constants.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export type DashboardThemePreset = "green" | "blue";
|
|
2
2
|
export type DashboardAccentColor = "green" | "cyan" | "blue" | "yellow";
|
|
3
3
|
export type DashboardAccountSortMode = "manual" | "ready-first";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
type DashboardLayoutMode = "compact-details" | "expanded-rows";
|
|
5
|
+
type DashboardFocusStyle = "row-invert";
|
|
6
6
|
export interface DashboardDisplaySettings {
|
|
7
7
|
showPerAccountRows: boolean;
|
|
8
8
|
showQuotaDetails: boolean;
|
|
@@ -32,7 +32,6 @@ export interface DashboardDisplaySettings {
|
|
|
32
32
|
menuStatuslineFields?: DashboardStatuslineField[];
|
|
33
33
|
}
|
|
34
34
|
export type DashboardStatuslineField = "last-used" | "limits" | "status";
|
|
35
|
-
export declare const DASHBOARD_DISPLAY_SETTINGS_VERSION: 1;
|
|
36
35
|
export declare const DEFAULT_DASHBOARD_DISPLAY_SETTINGS: DashboardDisplaySettings;
|
|
37
36
|
/**
|
|
38
37
|
* Filesystem path to the unified dashboard settings file.
|
|
@@ -87,4 +86,5 @@ export declare function loadDashboardDisplaySettings(): Promise<DashboardDisplay
|
|
|
87
86
|
* @param settings - The dashboard display settings to normalize and save
|
|
88
87
|
*/
|
|
89
88
|
export declare function saveDashboardDisplaySettings(settings: DashboardDisplaySettings): Promise<void>;
|
|
89
|
+
export {};
|
|
90
90
|
//# sourceMappingURL=dashboard-settings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-settings.d.ts","sourceRoot":"","sources":["../../lib/dashboard-settings.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AACxE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,aAAa,CAAC;AAChE,
|
|
1
|
+
{"version":3,"file":"dashboard-settings.d.ts","sourceRoot":"","sources":["../../lib/dashboard-settings.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AACxE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,aAAa,CAAC;AAChE,KAAK,mBAAmB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAC/D,KAAK,mBAAmB,GAAG,YAAY,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzE,eAAO,MAAM,kCAAkC,EAAE,wBA2BhD,CAAC;AA4LF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,OAAO,GACZ,wBAAwB,CAoG1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CA+BtF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,4BAA4B,CACjD,QAAQ,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -4,7 +4,6 @@ import { getCodexMultiAuthDir } from "./runtime-paths.js";
|
|
|
4
4
|
import { logWarn } from "./logger.js";
|
|
5
5
|
import { sleep } from "./utils.js";
|
|
6
6
|
import { getUnifiedSettingsPath, loadUnifiedDashboardSettings, saveUnifiedDashboardSettings, } from "./unified-settings.js";
|
|
7
|
-
export const DASHBOARD_DISPLAY_SETTINGS_VERSION = 1;
|
|
8
7
|
export const DEFAULT_DASHBOARD_DISPLAY_SETTINGS = {
|
|
9
8
|
showPerAccountRows: true,
|
|
10
9
|
showQuotaDetails: true,
|
|
@@ -324,4 +323,3 @@ export async function saveDashboardDisplaySettings(settings) {
|
|
|
324
323
|
const normalized = normalizeDashboardDisplaySettings(settings);
|
|
325
324
|
await saveUnifiedDashboardSettings(toJsonRecord(normalized));
|
|
326
325
|
}
|
|
327
|
-
//# sourceMappingURL=dashboard-settings.js.map
|
package/dist/lib/env-parsing.js
CHANGED
package/dist/lib/errors.d.ts
CHANGED
package/dist/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/errors.js
CHANGED
package/dist/lib/forecast.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import type { CodexQuotaSnapshot } from "./quota-probe.js";
|
|
|
2
2
|
import type { QuotaCacheData } from "./quota-cache.js";
|
|
3
3
|
import type { AccountMetadataV3 } from "./storage.js";
|
|
4
4
|
import type { TokenFailure } from "./types.js";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
type ForecastAvailability = "ready" | "delayed" | "unavailable";
|
|
6
|
+
type ForecastRiskLevel = "low" | "medium" | "high";
|
|
7
7
|
export interface ForecastAccountInput {
|
|
8
8
|
index: number;
|
|
9
9
|
account: AccountMetadataV3;
|
|
@@ -37,7 +37,7 @@ export interface ForecastRecommendation {
|
|
|
37
37
|
recommendedIndex: number | null;
|
|
38
38
|
reason: string;
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
interface ForecastExplanationAccount {
|
|
41
41
|
index: number;
|
|
42
42
|
label: string;
|
|
43
43
|
isCurrent: boolean;
|
|
@@ -66,4 +66,5 @@ export declare function evaluateForecastAccounts(inputs: ForecastAccountInput[])
|
|
|
66
66
|
export declare function recommendForecastAccount(results: ForecastAccountResult[]): ForecastRecommendation;
|
|
67
67
|
export declare function summarizeForecast(results: ForecastAccountResult[]): ForecastSummary;
|
|
68
68
|
export declare function buildForecastExplanation(results: ForecastAccountResult[], recommendation: ForecastRecommendation): ForecastExplanation;
|
|
69
|
+
export {};
|
|
69
70
|
//# sourceMappingURL=forecast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forecast.d.ts","sourceRoot":"","sources":["../../lib/forecast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"forecast.d.ts","sourceRoot":"","sources":["../../lib/forecast.ts"],"names":[],"mappings":"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"}
|