@kaitranntt/ccs 8.1.4 → 8.2.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/config/base-claude.settings.json +1 -5
- package/config/base-kiro.settings.json +4 -4
- package/config/base-qoder.settings.json +10 -0
- package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
- package/dist/api/services/cliproxy-profile-bridge.js +6 -0
- package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +18 -8
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/auth/commands/create-command.d.ts.map +1 -1
- package/dist/auth/commands/create-command.js +11 -0
- package/dist/auth/commands/create-command.js.map +1 -1
- package/dist/channels/official-channels-runtime.js +1 -1
- package/dist/channels/official-channels-runtime.js.map +1 -1
- package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts +41 -0
- package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts.map +1 -0
- package/dist/cliproxy/accounts/account-safety-cross-lane.js +177 -0
- package/dist/cliproxy/accounts/account-safety-cross-lane.js.map +1 -0
- package/dist/cliproxy/accounts/account-safety.d.ts +29 -1
- package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
- package/dist/cliproxy/accounts/account-safety.js +41 -7
- package/dist/cliproxy/accounts/account-safety.js.map +1 -1
- package/dist/cliproxy/accounts/drain-order.d.ts +277 -0
- package/dist/cliproxy/accounts/drain-order.d.ts.map +1 -0
- package/dist/cliproxy/accounts/drain-order.js +575 -0
- package/dist/cliproxy/accounts/drain-order.js.map +1 -0
- package/dist/cliproxy/accounts/pool-state.d.ts +132 -0
- package/dist/cliproxy/accounts/pool-state.d.ts.map +1 -0
- package/dist/cliproxy/accounts/pool-state.js +201 -0
- package/dist/cliproxy/accounts/pool-state.js.map +1 -0
- package/dist/cliproxy/accounts/registry.d.ts +17 -1
- package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
- package/dist/cliproxy/accounts/registry.js +58 -5
- package/dist/cliproxy/accounts/registry.js.map +1 -1
- package/dist/cliproxy/accounts/types.d.ts +20 -0
- package/dist/cliproxy/accounts/types.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +1 -1
- package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +88 -11
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts +2 -0
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-types.js +7 -0
- package/dist/cliproxy/auth/auth-types.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +48 -10
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-trace/redactor.js +1 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -1
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.js +2 -2
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.js.map +1 -1
- package/dist/cliproxy/binary/version-checker.d.ts +4 -2
- package/dist/cliproxy/binary/version-checker.d.ts.map +1 -1
- package/dist/cliproxy/binary/version-checker.js +30 -20
- package/dist/cliproxy/binary/version-checker.js.map +1 -1
- package/dist/cliproxy/claude-shadow-warning.d.ts +39 -0
- package/dist/cliproxy/claude-shadow-warning.d.ts.map +1 -0
- package/dist/cliproxy/claude-shadow-warning.js +187 -0
- package/dist/cliproxy/claude-shadow-warning.js.map +1 -0
- package/dist/cliproxy/config/base-config-loader.d.ts +6 -5
- package/dist/cliproxy/config/base-config-loader.d.ts.map +1 -1
- package/dist/cliproxy/config/base-config-loader.js +19 -12
- package/dist/cliproxy/config/base-config-loader.js.map +1 -1
- package/dist/cliproxy/config/env-builder.d.ts +3 -0
- package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
- package/dist/cliproxy/config/env-builder.js +158 -20
- package/dist/cliproxy/config/env-builder.js.map +1 -1
- package/dist/cliproxy/config/generator.d.ts +2 -1
- package/dist/cliproxy/config/generator.d.ts.map +1 -1
- package/dist/cliproxy/config/generator.js +66 -9
- package/dist/cliproxy/config/generator.js.map +1 -1
- package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
- package/dist/cliproxy/config/thinking-config.js +2 -0
- package/dist/cliproxy/config/thinking-config.js.map +1 -1
- package/dist/cliproxy/executor/arg-parser.d.ts +8 -5
- package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
- package/dist/cliproxy/executor/arg-parser.js +21 -10
- package/dist/cliproxy/executor/arg-parser.js.map +1 -1
- package/dist/cliproxy/executor/auth-coordinator.d.ts +4 -0
- package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
- package/dist/cliproxy/executor/auth-coordinator.js +5 -1
- package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
- package/dist/cliproxy/executor/browser-launch-setup.d.ts +1 -0
- package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -1
- package/dist/cliproxy/executor/browser-launch-setup.js +4 -3
- package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +35 -6
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/executor/proxy-resolver.d.ts +15 -9
- package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -1
- package/dist/cliproxy/executor/proxy-resolver.js +14 -5
- package/dist/cliproxy/executor/proxy-resolver.js.map +1 -1
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +94 -2
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
- package/dist/cliproxy/provider-capabilities.js +12 -0
- package/dist/cliproxy/provider-capabilities.js.map +1 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js +160 -8
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +14 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.js +79 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-claude.d.ts +9 -0
- package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-claude.js +53 -16
- package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.d.ts +2 -2
- package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.js +2 -4
- package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher.js +4 -0
- package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
- package/dist/cliproxy/quota/quota-label-sanitizer.d.ts +10 -0
- package/dist/cliproxy/quota/quota-label-sanitizer.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-label-sanitizer.js +31 -0
- package/dist/cliproxy/quota/quota-label-sanitizer.js.map +1 -0
- package/dist/cliproxy/quota/quota-manager.d.ts +7 -0
- package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-manager.js +51 -2
- package/dist/cliproxy/quota/quota-manager.js.map +1 -1
- package/dist/cliproxy/routing/pool-onboarding-hint.d.ts +95 -0
- package/dist/cliproxy/routing/pool-onboarding-hint.d.ts.map +1 -0
- package/dist/cliproxy/routing/pool-onboarding-hint.js +172 -0
- package/dist/cliproxy/routing/pool-onboarding-hint.js.map +1 -0
- package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts +50 -0
- package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts.map +1 -0
- package/dist/cliproxy/routing/pool-opt-in-prompt.js +232 -0
- package/dist/cliproxy/routing/pool-opt-in-prompt.js.map +1 -0
- package/dist/cliproxy/routing/routing-strategy-http.d.ts.map +1 -1
- package/dist/cliproxy/routing/routing-strategy-http.js +35 -26
- package/dist/cliproxy/routing/routing-strategy-http.js.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.d.ts +132 -0
- package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.js +342 -5
- package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
- package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
- package/dist/cliproxy/services/catalog-cache.js +5 -3
- package/dist/cliproxy/services/catalog-cache.js.map +1 -1
- package/dist/cliproxy/services/stats-fetcher.d.ts +13 -0
- package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/services/stats-fetcher.js +25 -1
- package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
- package/dist/cliproxy/types/provider-types.d.ts +1 -1
- package/dist/cliproxy/types/provider-types.d.ts.map +1 -1
- package/dist/cliproxy/types/provider-types.js +1 -0
- package/dist/cliproxy/types/provider-types.js.map +1 -1
- package/dist/codex-auth/codex-config-symlink.js +21 -4
- package/dist/codex-auth/codex-config-symlink.js.map +1 -1
- package/dist/codex-auth/commands/import-default-command.d.ts +1 -1
- package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -1
- package/dist/codex-auth/commands/import-default-command.js +12 -25
- package/dist/codex-auth/commands/import-default-command.js.map +1 -1
- package/dist/commands/api-command/help.js +1 -1
- package/dist/commands/api-command/help.js.map +1 -1
- package/dist/commands/bar/help-subcommand.d.ts +2 -0
- package/dist/commands/bar/help-subcommand.d.ts.map +1 -0
- package/dist/commands/bar/help-subcommand.js +63 -0
- package/dist/commands/bar/help-subcommand.js.map +1 -0
- package/dist/commands/bar/index.d.ts +8 -0
- package/dist/commands/bar/index.d.ts.map +1 -0
- package/dist/commands/bar/index.js +78 -0
- package/dist/commands/bar/index.js.map +1 -0
- package/dist/commands/bar/install-subcommand.d.ts +92 -0
- package/dist/commands/bar/install-subcommand.d.ts.map +1 -0
- package/dist/commands/bar/install-subcommand.js +605 -0
- package/dist/commands/bar/install-subcommand.js.map +1 -0
- package/dist/commands/bar/launch-subcommand.d.ts +64 -0
- package/dist/commands/bar/launch-subcommand.d.ts.map +1 -0
- package/dist/commands/bar/launch-subcommand.js +236 -0
- package/dist/commands/bar/launch-subcommand.js.map +1 -0
- package/dist/commands/bar/uninstall-subcommand.d.ts +13 -0
- package/dist/commands/bar/uninstall-subcommand.d.ts.map +1 -0
- package/dist/commands/bar/uninstall-subcommand.js +78 -0
- package/dist/commands/bar/uninstall-subcommand.js.map +1 -0
- package/dist/commands/bar/version-subcommand.d.ts +8 -0
- package/dist/commands/bar/version-subcommand.d.ts.map +1 -0
- package/dist/commands/bar/version-subcommand.js +62 -0
- package/dist/commands/bar/version-subcommand.js.map +1 -0
- package/dist/commands/cleanup-command.d.ts.map +1 -1
- package/dist/commands/cleanup-command.js +99 -51
- package/dist/commands/cleanup-command.js.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.js +20 -1
- package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/index.d.ts.map +1 -1
- package/dist/commands/cliproxy/index.js +20 -0
- package/dist/commands/cliproxy/index.js.map +1 -1
- package/dist/commands/cliproxy/order-subcommand.d.ts +16 -0
- package/dist/commands/cliproxy/order-subcommand.d.ts.map +1 -0
- package/dist/commands/cliproxy/order-subcommand.js +520 -0
- package/dist/commands/cliproxy/order-subcommand.js.map +1 -0
- package/dist/commands/cliproxy/pool-state-renderer.d.ts +40 -0
- package/dist/commands/cliproxy/pool-state-renderer.d.ts.map +1 -0
- package/dist/commands/cliproxy/pool-state-renderer.js +220 -0
- package/dist/commands/cliproxy/pool-state-renderer.js.map +1 -0
- package/dist/commands/cliproxy/pool-subcommand.d.ts +10 -0
- package/dist/commands/cliproxy/pool-subcommand.d.ts.map +1 -0
- package/dist/commands/cliproxy/pool-subcommand.js +112 -0
- package/dist/commands/cliproxy/pool-subcommand.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand.d.ts +10 -1
- package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.js +22 -6
- package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/routing-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/routing-subcommand.js +19 -0
- package/dist/commands/cliproxy/routing-subcommand.js.map +1 -1
- package/dist/commands/command-catalog.d.ts.map +1 -1
- package/dist/commands/command-catalog.js +8 -0
- package/dist/commands/command-catalog.js.map +1 -1
- package/dist/commands/config-channels-command.d.ts +1 -4
- package/dist/commands/config-channels-command.d.ts.map +1 -1
- package/dist/commands/config-channels-command.js +20 -24
- package/dist/commands/config-channels-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +6 -1
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/root-command-router.d.ts.map +1 -1
- package/dist/commands/root-command-router.js +7 -0
- package/dist/commands/root-command-router.js.map +1 -1
- package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
- package/dist/config/loader/yaml-serializer.js +13 -0
- package/dist/config/loader/yaml-serializer.js.map +1 -1
- package/dist/config/reserved-names.d.ts +1 -1
- package/dist/config/reserved-names.d.ts.map +1 -1
- package/dist/config/reserved-names.js +1 -0
- package/dist/config/reserved-names.js.map +1 -1
- package/dist/config/schemas/cliproxy.d.ts +37 -0
- package/dist/config/schemas/cliproxy.d.ts.map +1 -1
- package/dist/config/schemas/proxy-server.js +1 -1
- package/dist/config/schemas/quota.d.ts +26 -2
- package/dist/config/schemas/quota.d.ts.map +1 -1
- package/dist/config/schemas/quota.js +20 -1
- package/dist/config/schemas/quota.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +3 -0
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
- package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
- package/dist/cursor/cursor-daemon-auth.js +49 -0
- package/dist/cursor/cursor-daemon-auth.js.map +1 -0
- package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon-entry.js +44 -0
- package/dist/cursor/cursor-daemon-entry.js.map +1 -1
- package/dist/cursor/cursor-daemon.d.ts +2 -1
- package/dist/cursor/cursor-daemon.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon.js +21 -5
- package/dist/cursor/cursor-daemon.js.map +1 -1
- package/dist/cursor/cursor-models.d.ts.map +1 -1
- package/dist/cursor/cursor-models.js +2 -1
- package/dist/cursor/cursor-models.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
- package/dist/cursor/cursor-profile-executor.js +7 -4
- package/dist/cursor/cursor-profile-executor.js.map +1 -1
- package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
- package/dist/cursor/cursor-runtime-probe.js +4 -2
- package/dist/cursor/cursor-runtime-probe.js.map +1 -1
- package/dist/cursor/types.d.ts +1 -0
- package/dist/cursor/types.d.ts.map +1 -1
- package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
- package/dist/dispatcher/flows/account-flow.js +9 -0
- package/dist/dispatcher/flows/account-flow.js.map +1 -1
- package/dist/dispatcher/profile-resolver.d.ts +16 -0
- package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
- package/dist/dispatcher/profile-resolver.js +49 -3
- package/dist/dispatcher/profile-resolver.js.map +1 -1
- package/dist/docker/docker-key-rotation.d.ts +2 -0
- package/dist/docker/docker-key-rotation.d.ts.map +1 -1
- package/dist/docker/docker-key-rotation.js +9 -1
- package/dist/docker/docker-key-rotation.js.map +1 -1
- package/dist/glmt/sse-parser.d.ts +1 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -1
- package/dist/glmt/sse-parser.js +13 -1
- package/dist/glmt/sse-parser.js.map +1 -1
- package/dist/management/doctor.d.ts.map +1 -1
- package/dist/management/doctor.js +10 -0
- package/dist/management/doctor.js.map +1 -1
- package/dist/management/shared-manager.d.ts.map +1 -1
- package/dist/management/shared-manager.js +9 -1
- package/dist/management/shared-manager.js.map +1 -1
- package/dist/proxy/profile-router.d.ts +16 -0
- package/dist/proxy/profile-router.d.ts.map +1 -1
- package/dist/proxy/profile-router.js +7 -2
- package/dist/proxy/profile-router.js.map +1 -1
- package/dist/proxy/proxy-daemon.js +1 -1
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/server/http-helpers.d.ts +5 -0
- package/dist/proxy/server/http-helpers.d.ts.map +1 -1
- package/dist/proxy/server/http-helpers.js +40 -1
- package/dist/proxy/server/http-helpers.js.map +1 -1
- package/dist/proxy/server/messages-route.d.ts.map +1 -1
- package/dist/proxy/server/messages-route.js +252 -17
- package/dist/proxy/server/messages-route.js.map +1 -1
- package/dist/proxy/transformers/request-transformer.d.ts.map +1 -1
- package/dist/proxy/transformers/request-transformer.js +9 -2
- package/dist/proxy/transformers/request-transformer.js.map +1 -1
- package/dist/proxy/upstream-url.d.ts +42 -2
- package/dist/proxy/upstream-url.d.ts.map +1 -1
- package/dist/proxy/upstream-url.js +83 -4
- package/dist/proxy/upstream-url.js.map +1 -1
- package/dist/shared/claude-extension-setup.d.ts.map +1 -1
- package/dist/shared/claude-extension-setup.js +2 -1
- package/dist/shared/claude-extension-setup.js.map +1 -1
- package/dist/shared/cliproxy-model-routing.d.ts.map +1 -1
- package/dist/shared/cliproxy-model-routing.js +1 -0
- package/dist/shared/cliproxy-model-routing.js.map +1 -1
- package/dist/shared/stale-codex-translator-settings.d.ts.map +1 -1
- package/dist/shared/stale-codex-translator-settings.js +48 -9
- package/dist/shared/stale-codex-translator-settings.js.map +1 -1
- package/dist/targets/codex-adapter.d.ts.map +1 -1
- package/dist/targets/codex-adapter.js +10 -8
- package/dist/targets/codex-adapter.js.map +1 -1
- package/dist/targets/target-metadata.js +1 -1
- package/dist/targets/target-metadata.js.map +1 -1
- package/dist/ui/assets/{Trans-DyZQZ3e2.js → Trans-RG_sMDEu.js} +1 -1
- package/dist/ui/assets/accounts-yTXURc-q.js +1 -0
- package/dist/ui/assets/{alert-dialog-DWHL-dqd.js → alert-dialog-DjvPgzFs.js} +1 -1
- package/dist/ui/assets/api-Ck1dtNEM.js +4 -0
- package/dist/ui/assets/{auth-section-B4o90dwz.js → auth-section-DBnY_LPz.js} +1 -1
- package/dist/ui/assets/{backups-section-1AsdSIJO.js → backups-section-Ci-uL4Of.js} +1 -1
- package/dist/ui/assets/{channels-CU4Zdsc_.js → channels-BeS9O5q0.js} +1 -1
- package/dist/ui/assets/{checkbox-CbCKGH8I.js → checkbox-DFeFDZBp.js} +1 -1
- package/dist/ui/assets/claude-extension-DS5qN19Z.js +1 -0
- package/dist/ui/assets/cliproxy-D7HJH4mZ.js +4 -0
- package/dist/ui/assets/{cliproxy-ai-providers-Dr4L5NRY.js → cliproxy-ai-providers-oJQZXrtc.js} +6 -6
- package/dist/ui/assets/cliproxy-control-panel-2mRPEcRj.js +1 -0
- package/dist/ui/assets/{codex-0HdbW8NR.js → codex-D0AUQ6jA.js} +4 -4
- package/dist/ui/assets/{confirm-dialog-b5Dahgnk.js → confirm-dialog-B37-CVuq.js} +1 -1
- package/dist/ui/assets/{copilot-B1Ojakbt.js → copilot-KaaW-mko.js} +2 -2
- package/dist/ui/assets/{cursor-PUtNVPx1.js → cursor-BKiTgYi5.js} +1 -1
- package/dist/ui/assets/{droid-S2gclncb.js → droid-DHdqGnFw.js} +2 -2
- package/dist/ui/assets/{globalenv-section-7wKSmNSG.js → globalenv-section-SfZO97nU.js} +1 -1
- package/dist/ui/assets/health-CSRS9O0D.js +1 -0
- package/dist/ui/assets/icons-DSLG1YsC.js +1 -0
- package/dist/ui/assets/index-CGgavq2X.js +56 -0
- package/dist/ui/assets/{index-BWboJia4.js → index-ChTYEBCZ.js} +1 -1
- package/dist/ui/assets/index-Cu_F55_O.js +1 -0
- package/dist/ui/assets/{index-Coc3_ABK.js → index-DJ66NrBH.js} +1 -1
- package/dist/ui/assets/index-DWUuSBUe.js +1 -0
- package/dist/ui/assets/{index-CxvNNHgE.js → index-DycwEe96.js} +1 -1
- package/dist/ui/assets/index-DzFlVVV3.css +1 -0
- package/dist/ui/assets/{index-Cx0dmbiQ.js → index-iQuEEGbH.js} +1 -1
- package/dist/ui/assets/logs-tiZ_51mo.js +1 -0
- package/dist/ui/assets/{masked-input-4L9CIZGb.js → masked-input-D9FVoeMA.js} +1 -1
- package/dist/ui/assets/providers/qoder.svg +1 -0
- package/dist/ui/assets/proxy-status-widget-2k26d8pS.js +1 -0
- package/dist/ui/assets/{raw-json-settings-editor-panel-DXh8c8rA.js → raw-json-settings-editor-panel-CguBh93H.js} +1 -1
- package/dist/ui/assets/{searchable-select-CtvEQrMo.js → searchable-select-C4wShshD.js} +1 -1
- package/dist/ui/assets/{separator-E0ISp1SN.js → separator-mvGlDdEW.js} +1 -1
- package/dist/ui/assets/{shared-BeYwHeNS.js → shared-Ck0yAwbs.js} +2 -2
- package/dist/ui/assets/{table-BBslZvNP.js → table-DrUJOxKL.js} +1 -1
- package/dist/ui/assets/updates-BVHBFcq8.js +1 -0
- package/dist/ui/assets/{use-accounts-BdalFsdY.js → use-accounts-DLtuaniS.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/browser/browser-settings.d.ts.map +1 -1
- package/dist/utils/browser/browser-settings.js +13 -3
- package/dist/utils/browser/browser-settings.js.map +1 -1
- package/dist/utils/browser/mcp-installer.d.ts.map +1 -1
- package/dist/utils/browser/mcp-installer.js +5 -34
- package/dist/utils/browser/mcp-installer.js.map +1 -1
- package/dist/utils/claude-user-config-lock.d.ts +9 -0
- package/dist/utils/claude-user-config-lock.d.ts.map +1 -0
- package/dist/utils/claude-user-config-lock.js +96 -0
- package/dist/utils/claude-user-config-lock.js.map +1 -0
- package/dist/utils/glmt-deprecation.d.ts.map +1 -1
- package/dist/utils/glmt-deprecation.js +1 -3
- package/dist/utils/glmt-deprecation.js.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.js +5 -34
- package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
- package/dist/utils/retry-strategy.js +1 -1
- package/dist/utils/retry-strategy.js.map +1 -1
- package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
- package/dist/utils/websearch/mcp-installer.js +112 -78
- package/dist/utils/websearch/mcp-installer.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +0 -9
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/auth-middleware.js +26 -4
- package/dist/web-server/middleware/auth-middleware.js.map +1 -1
- package/dist/web-server/model-pricing.d.ts +18 -2
- package/dist/web-server/model-pricing.d.ts.map +1 -1
- package/dist/web-server/model-pricing.js +86 -3
- package/dist/web-server/model-pricing.js.map +1 -1
- package/dist/web-server/models-dev/pricing-resolver.js +14 -14
- package/dist/web-server/models-dev/pricing-resolver.js.map +1 -1
- package/dist/web-server/routes/account-routes.d.ts.map +1 -1
- package/dist/web-server/routes/account-routes.js +116 -0
- package/dist/web-server/routes/account-routes.js.map +1 -1
- package/dist/web-server/routes/bar-routes.d.ts +149 -0
- package/dist/web-server/routes/bar-routes.d.ts.map +1 -0
- package/dist/web-server/routes/bar-routes.js +415 -0
- package/dist/web-server/routes/bar-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +10 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +45 -13
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
- package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
- package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cursor-routes.js +6 -1
- package/dist/web-server/routes/cursor-routes.js.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.js +7 -0
- package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +18 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +6 -1
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +10 -1
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
- package/dist/web-server/services/claude-extension-settings-service.js +5 -1
- package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
- package/dist/web-server/usage/bar-analytics.d.ts +101 -0
- package/dist/web-server/usage/bar-analytics.d.ts.map +1 -0
- package/dist/web-server/usage/bar-analytics.js +315 -0
- package/dist/web-server/usage/bar-analytics.js.map +1 -0
- package/dist/web-server/usage/claude-native-credentials.d.ts +56 -0
- package/dist/web-server/usage/claude-native-credentials.d.ts.map +1 -0
- package/dist/web-server/usage/claude-native-credentials.js +140 -0
- package/dist/web-server/usage/claude-native-credentials.js.map +1 -0
- package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts +24 -0
- package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts.map +1 -0
- package/dist/web-server/usage/cliproxy-snapshot-reader.js +82 -0
- package/dist/web-server/usage/cliproxy-snapshot-reader.js.map +1 -0
- package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +3 -2
- package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-syncer.js +46 -13
- package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +9 -3
- package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-transformer.js +133 -19
- package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
- package/dist/web-server/usage/codex-local-quota-collector.d.ts +74 -0
- package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -0
- package/dist/web-server/usage/codex-local-quota-collector.js +250 -0
- package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -0
- package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
- package/dist/web-server/usage/codex-native-usage-collector.js +18 -2
- package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
- package/dist/web-server/usage/data-aggregator.d.ts +11 -0
- package/dist/web-server/usage/data-aggregator.d.ts.map +1 -1
- package/dist/web-server/usage/data-aggregator.js +29 -1
- package/dist/web-server/usage/data-aggregator.js.map +1 -1
- package/dist/web-server/usage/native-quota-collector.d.ts +44 -0
- package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -0
- package/dist/web-server/usage/native-quota-collector.js +378 -0
- package/dist/web-server/usage/native-quota-collector.js.map +1 -0
- package/dist/web-server/usage/profile-filter.d.ts +1 -1
- package/dist/web-server/usage/profile-filter.d.ts.map +1 -1
- package/dist/web-server/usage/profile-filter.js +6 -1
- package/dist/web-server/usage/profile-filter.js.map +1 -1
- package/dist/web-server/usage/types.d.ts +2 -0
- package/dist/web-server/usage/types.d.ts.map +1 -1
- package/lib/mcp/ccs-browser-server.cjs +31 -15
- package/package.json +1 -1
- package/scripts/completion/ccs.bash +0 -12
- package/scripts/completion/ccs.fish +0 -11
- package/scripts/completion/ccs.ps1 +0 -10
- package/scripts/completion/ccs.zsh +0 -13
- package/scripts/github/stable-release-issue-cleanup-lib.mjs +115 -0
- package/scripts/github/stable-release-issue-cleanup.mjs +134 -0
- package/dist/ui/assets/accounts-BPJltru3.js +0 -1
- package/dist/ui/assets/api-BxPN-zy4.js +0 -4
- package/dist/ui/assets/claude-extension-CWpjmIGt.js +0 -1
- package/dist/ui/assets/cliproxy-K6eBb5VO.js +0 -4
- package/dist/ui/assets/cliproxy-control-panel-Cz5r7kHP.js +0 -1
- package/dist/ui/assets/health-hMLN_gyw.js +0 -1
- package/dist/ui/assets/icons-DzKUh8vG.js +0 -1
- package/dist/ui/assets/index-BMoGhs28.css +0 -1
- package/dist/ui/assets/index-COt1pbk-.js +0 -1
- package/dist/ui/assets/index-CcGVqYOy.js +0 -56
- package/dist/ui/assets/index-DkR2KVhF.js +0 -1
- package/dist/ui/assets/logs-BRFVfyLc.js +0 -1
- package/dist/ui/assets/proxy-status-widget-s1UWOE23.js +0 -1
- package/dist/ui/assets/updates-CDrm903n.js +0 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pool State Renderer (CLI)
|
|
4
|
+
*
|
|
5
|
+
* Renders the pool context section appended to `ccs cliproxy quota` per provider:
|
|
6
|
+
* - routing mode line (pool on/off, strategy, session affinity)
|
|
7
|
+
* - effective drain order (Phase 4 resolver)
|
|
8
|
+
* - per-account state: available / cooling-until-<time> / paused
|
|
9
|
+
*
|
|
10
|
+
* ASCII only. No color is required for correctness; color is applied via the ui
|
|
11
|
+
* helpers, which already degrade to plain text under NO_COLOR / non-TTY.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.renderProviderPoolSection = exports.modeLabel = exports.describeAccountState = exports.formatCooldownReset = exports.readPoolRoutingSettings = void 0;
|
|
15
|
+
const ui_1 = require("../../utils/ui");
|
|
16
|
+
const pool_state_1 = require("../../cliproxy/accounts/pool-state");
|
|
17
|
+
const routing_strategy_1 = require("../../cliproxy/routing/routing-strategy");
|
|
18
|
+
const config_loader_facade_1 = require("../../config/config-loader-facade");
|
|
19
|
+
/**
|
|
20
|
+
* Read pool routing settings from the unified config. Pool routing, when on,
|
|
21
|
+
* uses fill-first + session affinity regardless of stored routing values, so the
|
|
22
|
+
* effective routing shown reflects the pool defaults in that case.
|
|
23
|
+
*/
|
|
24
|
+
function readPoolRoutingSettings() {
|
|
25
|
+
const config = (0, config_loader_facade_1.loadOrCreateUnifiedConfig)();
|
|
26
|
+
const poolEnabled = config.cliproxy?.pool_routing?.enabled === true;
|
|
27
|
+
const maxRetryCredentials = config.cliproxy?.pool_routing?.max_retry_credentials;
|
|
28
|
+
if (poolEnabled) {
|
|
29
|
+
// Pool routing overrides routing to fill-first + affinity 1h (see generator).
|
|
30
|
+
return {
|
|
31
|
+
poolEnabled: true,
|
|
32
|
+
strategy: 'fill-first',
|
|
33
|
+
sessionAffinityEnabled: true,
|
|
34
|
+
sessionAffinityTtl: '1h',
|
|
35
|
+
maxRetryCredentials,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const affinity = (0, routing_strategy_1.getConfiguredCliproxySessionAffinitySettings)();
|
|
39
|
+
return {
|
|
40
|
+
poolEnabled: false,
|
|
41
|
+
strategy: (0, routing_strategy_1.getConfiguredCliproxyRoutingStrategy)(),
|
|
42
|
+
sessionAffinityEnabled: affinity.enabled,
|
|
43
|
+
sessionAffinityTtl: affinity.ttl,
|
|
44
|
+
maxRetryCredentials,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.readPoolRoutingSettings = readPoolRoutingSettings;
|
|
48
|
+
/** Format an epoch-ms reset time as a short relative + clock label. */
|
|
49
|
+
function formatCooldownReset(until, now) {
|
|
50
|
+
const seconds = Math.max(0, Math.round((until - now) / 1000));
|
|
51
|
+
const relative = seconds <= 0
|
|
52
|
+
? 'now'
|
|
53
|
+
: seconds < 60
|
|
54
|
+
? `${seconds}s`
|
|
55
|
+
: seconds < 3600
|
|
56
|
+
? `${Math.round(seconds / 60)}m`
|
|
57
|
+
: seconds < 86400
|
|
58
|
+
? `${Math.round(seconds / 3600)}h`
|
|
59
|
+
: `${Math.round(seconds / 86400)}d`;
|
|
60
|
+
const clock = new Date(until).toLocaleTimeString(undefined, {
|
|
61
|
+
hour: '2-digit',
|
|
62
|
+
minute: '2-digit',
|
|
63
|
+
});
|
|
64
|
+
return `${relative} (${clock})`;
|
|
65
|
+
}
|
|
66
|
+
exports.formatCooldownReset = formatCooldownReset;
|
|
67
|
+
/**
|
|
68
|
+
* Human label + tone for a single account state. The three states map to
|
|
69
|
+
* distinct client failure modes, so they are labelled differently on purpose.
|
|
70
|
+
*/
|
|
71
|
+
function describeAccountState(account, now) {
|
|
72
|
+
switch (account.state) {
|
|
73
|
+
case 'cooling': {
|
|
74
|
+
const reset = account.cooldownUntil !== undefined
|
|
75
|
+
? formatCooldownReset(account.cooldownUntil, now)
|
|
76
|
+
: 'unknown';
|
|
77
|
+
const src = account.cooldownSource === 'memory' ? ' [in-process]' : '';
|
|
78
|
+
return { label: `cooling until ${reset}${src}`, tone: 'cooling' };
|
|
79
|
+
}
|
|
80
|
+
case 'paused':
|
|
81
|
+
// A pause can be manual (the user) OR automatic (ban detection,
|
|
82
|
+
// cross-provider isolation, an expired-but-not-restored quota cooldown).
|
|
83
|
+
// The classifier cannot tell which without a stored reason, so the label
|
|
84
|
+
// must not claim "manual". See pool-state.ts classifyAccount.
|
|
85
|
+
return { label: 'paused (manual or safety)', tone: 'paused' };
|
|
86
|
+
case 'available':
|
|
87
|
+
default:
|
|
88
|
+
return { label: 'available', tone: 'available' };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.describeAccountState = describeAccountState;
|
|
92
|
+
function modeLabel(mode) {
|
|
93
|
+
switch (mode) {
|
|
94
|
+
case 'manual':
|
|
95
|
+
return 'manual (--set)';
|
|
96
|
+
case 'tier':
|
|
97
|
+
return 'tier-derived (--by-tier)';
|
|
98
|
+
case 'file':
|
|
99
|
+
default:
|
|
100
|
+
return 'file order';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.modeLabel = modeLabel;
|
|
104
|
+
/**
|
|
105
|
+
* Render the drift warning. The honest copy depends on whether a stored order
|
|
106
|
+
* exists: in file mode there is no stored order (the user reset or never set
|
|
107
|
+
* one), so referencing a "stored order" or telling them to "re-apply" would be
|
|
108
|
+
* false. File-mode drift means residual on-disk priorities (e.g. left by a prior
|
|
109
|
+
* managed order) still steer the selector, and the fix is to clear them.
|
|
110
|
+
*/
|
|
111
|
+
function renderDrainOrderDrift(provider, pool) {
|
|
112
|
+
if (!pool.drainOrder.hasDrift) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (pool.drainOrder.mode === 'file') {
|
|
116
|
+
console.log(` ${(0, ui_1.warn)(`Drift: residual priorities from a previous managed order still steer the selector;\n` +
|
|
117
|
+
` clear them with "ccs cliproxy accounts order ${provider} --reset" (or re-auth the accounts).`)}`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
console.log(` ${(0, ui_1.warn)(`Drift: stored order does not match auth files; run "ccs cliproxy accounts order ${provider}" to inspect, then re-apply with --set/--by-tier.`)}`);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Render the honesty note about cooling visibility.
|
|
124
|
+
*
|
|
125
|
+
* - Pool OFF: cooling is disabled at the proxy (stock stability mode), so no
|
|
126
|
+
* account ever shows a quota cooldown here. State that plainly.
|
|
127
|
+
* - Pool ON but no live proxy reading available (proxy stopped/older binary, or
|
|
128
|
+
* the listing returned no cooling entries): the in-proxy 429 cooldowns that
|
|
129
|
+
* actually drive session hops are not visible, so say so rather than implying
|
|
130
|
+
* every account is healthy.
|
|
131
|
+
*/
|
|
132
|
+
function renderCoolingNote(pool, settings) {
|
|
133
|
+
if (!settings.poolEnabled) {
|
|
134
|
+
const anyCooling = pool.states.some((s) => s.state === 'cooling');
|
|
135
|
+
if (!anyCooling) {
|
|
136
|
+
console.log((0, ui_1.dim)(' Note: cooling is off (stock stability mode); accounts never show a quota cooldown here.'));
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Pool ON: only omit the caveat once we actually have live proxy-sourced
|
|
141
|
+
// cooling data to show. Otherwise the states reflect CCS-side checks only.
|
|
142
|
+
if (!(0, pool_state_1.hasProxySourcedCooling)(pool)) {
|
|
143
|
+
console.log((0, ui_1.dim)(' Note: live in-proxy 429 cooldowns are not shown here; states reflect CCS-side checks only.'));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Render the pool context section for one provider. Returns silently (renders
|
|
148
|
+
* nothing) when the provider has no accounts, so quota output stays clean.
|
|
149
|
+
*
|
|
150
|
+
* Async because it folds in live in-proxy 429 cooldowns (the real session-hop
|
|
151
|
+
* mechanism when pool routing is ON) via a single bounded management API read;
|
|
152
|
+
* that read degrades silently when the proxy is stopped, remote, or older.
|
|
153
|
+
*/
|
|
154
|
+
async function renderProviderPoolSection(provider, settings, now = Date.now()) {
|
|
155
|
+
const pool = await (0, pool_state_1.resolvePoolStateWithProxyCooldowns)({ provider, settings, now });
|
|
156
|
+
if (pool.states.length === 0) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
console.log((0, ui_1.subheader)('Pool context'));
|
|
160
|
+
// Routing mode line. The badge is a plain success-colored label (no marker)
|
|
161
|
+
// so it reads as a status, not an action item.
|
|
162
|
+
const routingBadge = settings.poolEnabled
|
|
163
|
+
? (0, ui_1.color)('pool routing ON', 'success')
|
|
164
|
+
: (0, ui_1.dim)('pool routing off');
|
|
165
|
+
const affinity = settings.sessionAffinityEnabled
|
|
166
|
+
? `affinity ${settings.sessionAffinityTtl}`
|
|
167
|
+
: 'no affinity';
|
|
168
|
+
// max-retry only applies when pool routing is on; mirror the generator's
|
|
169
|
+
// default so the displayed value matches the generated config.
|
|
170
|
+
const retry = settings.poolEnabled
|
|
171
|
+
? `, max-retry ${settings.maxRetryCredentials ?? routing_strategy_1.POOL_MAX_RETRY_CREDENTIALS}`
|
|
172
|
+
: '';
|
|
173
|
+
console.log(` Routing: ${routingBadge} | ${settings.strategy} | ${affinity}${retry}`);
|
|
174
|
+
// Drain order line. Order is sorted by the on-disk priority the selector
|
|
175
|
+
// actually reads, so the first account here is the real "next" account.
|
|
176
|
+
const orderMode = modeLabel(pool.drainOrder.mode);
|
|
177
|
+
if (pool.drainOrder.order.length > 0) {
|
|
178
|
+
console.log(` Order: ${(0, ui_1.dim)(orderMode)} -> ${pool.drainOrder.order.join(' > ')}`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
console.log(` Order: ${(0, ui_1.dim)(orderMode)} ${(0, ui_1.dim)('(no active accounts)')}`);
|
|
182
|
+
}
|
|
183
|
+
renderDrainOrderDrift(provider, pool);
|
|
184
|
+
// Per-account state. Render in drain order first, then any accounts not in the
|
|
185
|
+
// order (paused accounts are excluded from the order but still listed).
|
|
186
|
+
const stateById = new Map(pool.states.map((s) => [s.accountId, s]));
|
|
187
|
+
const ordered = [];
|
|
188
|
+
for (const id of pool.drainOrder.order) {
|
|
189
|
+
const s = stateById.get(id);
|
|
190
|
+
if (s)
|
|
191
|
+
ordered.push(s);
|
|
192
|
+
}
|
|
193
|
+
for (const s of pool.states) {
|
|
194
|
+
if (!pool.drainOrder.order.includes(s.accountId))
|
|
195
|
+
ordered.push(s);
|
|
196
|
+
}
|
|
197
|
+
for (const account of ordered) {
|
|
198
|
+
const { label, tone } = describeAccountState(account, now);
|
|
199
|
+
// Color-only labels (no markers) so the per-account list reads as a clean
|
|
200
|
+
// status column. Available is success-colored; cooling and paused are
|
|
201
|
+
// warning-colored to flag them without prefixing each line with a marker.
|
|
202
|
+
const rendered = tone === 'available' ? (0, ui_1.color)(label, 'success') : (0, ui_1.color)(label, 'warning');
|
|
203
|
+
const defaultMark = account.isDefault ? (0, ui_1.color)(' *', 'success') : '';
|
|
204
|
+
console.log(` - ${account.accountId}${defaultMark}: ${rendered}`);
|
|
205
|
+
}
|
|
206
|
+
renderCoolingNote(pool, settings);
|
|
207
|
+
// Resume hint: a pause can be manual OR automatic (ban detection,
|
|
208
|
+
// cross-provider isolation, expired-but-unrestored quota cooldown). Point the
|
|
209
|
+
// user at the real resume command so they can recover whichever caused it.
|
|
210
|
+
if (pool.states.some((s) => s.state === 'paused')) {
|
|
211
|
+
console.log(` ${(0, ui_1.dim)(`Resume: ccs cliproxy resume <account>`)}`);
|
|
212
|
+
}
|
|
213
|
+
// Reset/management hints. Dim hint matches the order subcommand's "To update:"
|
|
214
|
+
// style, and the indent stays outside the styling helper.
|
|
215
|
+
const tierHint = pool_state_1.POOL_TIER_AWARE_PROVIDERS.has(provider) ? ` (or --by-tier)` : '';
|
|
216
|
+
console.log(` ${(0, ui_1.dim)(`Manage order: ccs cliproxy accounts order ${provider} --set <ids>${tierHint}`)}`);
|
|
217
|
+
console.log('');
|
|
218
|
+
}
|
|
219
|
+
exports.renderProviderPoolSection = renderProviderPoolSection;
|
|
220
|
+
//# sourceMappingURL=pool-state-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-state-renderer.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-state-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIProxy Pool Routing Subcommand
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* ccs cliproxy pool --enable Enable pool routing (fill-first + affinity + cooling ON)
|
|
6
|
+
* ccs cliproxy pool --disable Disable pool routing and restore non-pool config
|
|
7
|
+
* ccs cliproxy pool Show current pool routing state
|
|
8
|
+
*/
|
|
9
|
+
export declare function handlePoolSubcommand(args: string[]): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=pool-subcommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyCH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwExE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Pool Routing Subcommand
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* ccs cliproxy pool --enable Enable pool routing (fill-first + affinity + cooling ON)
|
|
7
|
+
* ccs cliproxy pool --disable Disable pool routing and restore non-pool config
|
|
8
|
+
* ccs cliproxy pool Show current pool routing state
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.handlePoolSubcommand = void 0;
|
|
12
|
+
const ui_1 = require("../../utils/ui");
|
|
13
|
+
const routing_strategy_1 = require("../../cliproxy/routing/routing-strategy");
|
|
14
|
+
const config_loader_facade_1 = require("../../config/config-loader-facade");
|
|
15
|
+
const port_manager_1 = require("../../cliproxy/config/port-manager");
|
|
16
|
+
const proxy_target_resolver_1 = require("../../cliproxy/proxy/proxy-target-resolver");
|
|
17
|
+
const path_resolver_1 = require("../../cliproxy/config/path-resolver");
|
|
18
|
+
const arg_extractor_1 = require("../arg-extractor");
|
|
19
|
+
/**
|
|
20
|
+
* Print the manual-config guidance for remote/Docker targets, then refuse.
|
|
21
|
+
* enablePoolRouting/disablePoolRouting only write local config files, so a
|
|
22
|
+
* remote proxy is never touched — refuse rather than lie about hot-reload.
|
|
23
|
+
* Mirrors the remote-refusal copy in order-subcommand and the manual snippet
|
|
24
|
+
* in pool-opt-in-prompt's printRemoteHint().
|
|
25
|
+
*/
|
|
26
|
+
function printRemotePoolRefusal(enable) {
|
|
27
|
+
console.log((0, ui_1.warn)(`Remote proxy target detected. Pool routing management for remote proxies is not\n` +
|
|
28
|
+
` supported in v1. Run this command on the host running CLIProxy instead.`));
|
|
29
|
+
console.log('');
|
|
30
|
+
if (enable) {
|
|
31
|
+
console.log(' To enable pool routing manually, add to your CLIProxy config.yaml:');
|
|
32
|
+
console.log(' disable-cooling: false');
|
|
33
|
+
console.log(` max-retry-credentials: ${routing_strategy_1.POOL_MAX_RETRY_CREDENTIALS}`);
|
|
34
|
+
console.log(' routing:');
|
|
35
|
+
console.log(' strategy: fill-first');
|
|
36
|
+
console.log(' session-affinity: true');
|
|
37
|
+
console.log(' session-affinity-ttl: "1h"');
|
|
38
|
+
console.log('');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function handlePoolSubcommand(args) {
|
|
42
|
+
await (0, ui_1.initUI)();
|
|
43
|
+
console.log('');
|
|
44
|
+
console.log((0, ui_1.header)('CLIProxy Pool Routing'));
|
|
45
|
+
console.log('');
|
|
46
|
+
const wantsEnable = (0, arg_extractor_1.hasAnyFlag)(args, ['--enable']);
|
|
47
|
+
const wantsDisable = (0, arg_extractor_1.hasAnyFlag)(args, ['--disable']);
|
|
48
|
+
// Resolve the real proxy target before any config write. Remote targets are
|
|
49
|
+
// refused (enable/disable only mutate local files; the remote proxy is never
|
|
50
|
+
// touched, so the "hot-reload" success message would be a lie). Local targets
|
|
51
|
+
// use the configured lifecycle port so the regenerated config-<port>.yaml is
|
|
52
|
+
// the same file the running proxy reads.
|
|
53
|
+
if (wantsEnable || wantsDisable) {
|
|
54
|
+
const target = (0, proxy_target_resolver_1.getProxyTarget)();
|
|
55
|
+
if (target.isRemote) {
|
|
56
|
+
printRemotePoolRefusal(wantsEnable);
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const port = (0, port_manager_1.resolveLifecyclePort)();
|
|
62
|
+
const configPath = (0, path_resolver_1.getConfigPathForPort)(port);
|
|
63
|
+
const authDir = (0, path_resolver_1.getAuthDir)();
|
|
64
|
+
if (wantsEnable) {
|
|
65
|
+
const result = (0, routing_strategy_1.enablePoolRouting)(port, { configPath, authDir });
|
|
66
|
+
if (result.failed) {
|
|
67
|
+
console.log((0, ui_1.warn)(result.message));
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
}
|
|
70
|
+
else if (result.changed) {
|
|
71
|
+
console.log((0, ui_1.ok)(result.message));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log((0, ui_1.info)(result.message));
|
|
75
|
+
}
|
|
76
|
+
console.log('');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (wantsDisable) {
|
|
80
|
+
const result = (0, routing_strategy_1.disablePoolRouting)(port, { configPath, authDir });
|
|
81
|
+
if (result.failed) {
|
|
82
|
+
console.log((0, ui_1.warn)(result.message));
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
}
|
|
85
|
+
else if (result.changed) {
|
|
86
|
+
console.log((0, ui_1.ok)(result.message));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log((0, ui_1.info)(result.message));
|
|
90
|
+
}
|
|
91
|
+
console.log('');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Default: show status
|
|
95
|
+
const config = (0, config_loader_facade_1.loadOrCreateUnifiedConfig)();
|
|
96
|
+
const enabled = config.cliproxy?.pool_routing?.enabled === true;
|
|
97
|
+
const dismissed = config.cliproxy?.pool_routing?.prompt_dismissed === true;
|
|
98
|
+
const maxRetry = config.cliproxy?.pool_routing?.max_retry_credentials;
|
|
99
|
+
console.log(` Status: ${enabled ? (0, ui_1.ok)('enabled') : (0, ui_1.warn)('disabled')}`);
|
|
100
|
+
if (enabled && maxRetry !== undefined) {
|
|
101
|
+
console.log(` Max retry: ${maxRetry}`);
|
|
102
|
+
}
|
|
103
|
+
if (!enabled && dismissed) {
|
|
104
|
+
console.log(` Dismissed: ${(0, ui_1.info)('yes (prompt will not re-show)')}`);
|
|
105
|
+
}
|
|
106
|
+
console.log('');
|
|
107
|
+
console.log(` Enable: ccs cliproxy pool --enable`);
|
|
108
|
+
console.log(` Disable: ccs cliproxy pool --disable`);
|
|
109
|
+
console.log('');
|
|
110
|
+
}
|
|
111
|
+
exports.handlePoolSubcommand = handlePoolSubcommand;
|
|
112
|
+
//# sourceMappingURL=pool-subcommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-subcommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - ccs cliproxy resume <account>
|
|
9
9
|
* - ccs cliproxy doctor
|
|
10
10
|
*/
|
|
11
|
-
import type { QuotaErrorMetadata } from '../../cliproxy/quota/quota-types';
|
|
11
|
+
import type { CodexQuotaResult, QuotaErrorMetadata } from '../../cliproxy/quota/quota-types';
|
|
12
12
|
import { type QuotaSupportedProvider } from '../../cliproxy/provider-capabilities';
|
|
13
13
|
declare function resolveDisplayedTier(accountTier: string | undefined, liveTier: string | undefined): string;
|
|
14
14
|
interface QuotaFailureDisplayEntry {
|
|
@@ -18,8 +18,17 @@ interface QuotaFailureDisplayEntry {
|
|
|
18
18
|
declare function getQuotaFailureDisplayEntries(quota: QuotaErrorMetadata & {
|
|
19
19
|
error?: string;
|
|
20
20
|
}): QuotaFailureDisplayEntry[];
|
|
21
|
+
type CodexWindowSummary = Pick<CodexQuotaResult['windows'][number], 'label' | 'resetAfterSeconds' | 'category' | 'cadence' | 'featureLabel'>;
|
|
22
|
+
/**
|
|
23
|
+
* Strip a leading "GPT-X.Y-Codex-" prefix from a feature label and turn the
|
|
24
|
+
* remainder into a Codex-prefixed display name. Other labels pass through unchanged.
|
|
25
|
+
*/
|
|
26
|
+
declare function prettifyCodexFeatureLabel(featureLabel: unknown, fallbackLabel?: unknown): string;
|
|
27
|
+
declare function getCodexWindowDisplayLabel(window: CodexWindowSummary, allWindows?: CodexWindowSummary[]): string;
|
|
21
28
|
export declare const __testExports: {
|
|
29
|
+
getCodexWindowDisplayLabel: typeof getCodexWindowDisplayLabel;
|
|
22
30
|
getQuotaFailureDisplayEntries: typeof getQuotaFailureDisplayEntries;
|
|
31
|
+
prettifyCodexFeatureLabel: typeof prettifyCodexFeatureLabel;
|
|
23
32
|
resolveDisplayedTier: typeof resolveDisplayedTier;
|
|
24
33
|
};
|
|
25
34
|
export declare function handleQuotaStatus(verbose?: boolean, providerFilter?: QuotaSupportedProvider | 'all'): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/quota-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"quota-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/quota-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,OAAO,KAAK,EACV,gBAAgB,EAIhB,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;AAI1C,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,sCAAsC,CAAC;AAqE9C,iBAAS,oBAAoB,CAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAER;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iBAAS,6BAA6B,CACpC,KAAK,EAAE,kBAAkB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,wBAAwB,EAAE,CA0C5B;AA6ED,KAAK,kBAAkB,GAAG,IAAI,CAC5B,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EACnC,OAAO,GAAG,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CACxE,CAAC;AAkCF;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAWzF;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,GAAE,kBAAkB,EAAO,GACpC,MAAM,CAuCR;AAsgBD,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,UAAQ,EACf,cAAc,GAAE,sBAAsB,GAAG,KAAa,GACrD,OAAO,CAAC,IAAI,CAAC,CAkDf;AAED,wBAAsB,YAAY,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvE"}
|
|
@@ -14,11 +14,13 @@ exports.handleResumeAccount = exports.handlePauseAccount = exports.handleSetDefa
|
|
|
14
14
|
const account_manager_1 = require("../../cliproxy/accounts/account-manager");
|
|
15
15
|
const quota_fetcher_1 = require("../../cliproxy/quota/quota-fetcher");
|
|
16
16
|
const quota_fetcher_codex_1 = require("../../cliproxy/quota/quota-fetcher-codex");
|
|
17
|
+
const quota_label_sanitizer_1 = require("../../cliproxy/quota/quota-label-sanitizer");
|
|
17
18
|
const quota_fetcher_claude_1 = require("../../cliproxy/quota/quota-fetcher-claude");
|
|
18
19
|
const quota_fetcher_claude_normalizer_1 = require("../../cliproxy/quota/quota-fetcher-claude-normalizer");
|
|
19
20
|
const quota_fetcher_gemini_cli_1 = require("../../cliproxy/quota/quota-fetcher-gemini-cli");
|
|
20
21
|
const quota_fetcher_ghcp_1 = require("../../cliproxy/quota/quota-fetcher-ghcp");
|
|
21
22
|
const quota_manager_1 = require("../../cliproxy/quota/quota-manager");
|
|
23
|
+
const pool_state_renderer_1 = require("./pool-state-renderer");
|
|
22
24
|
const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
|
|
23
25
|
const email_account_identity_1 = require("../../cliproxy/accounts/email-account-identity");
|
|
24
26
|
const ui_1 = require("../../utils/ui");
|
|
@@ -210,10 +212,11 @@ function inferCodeReviewCadence(window, allWindows) {
|
|
|
210
212
|
* Strip a leading "GPT-X.Y-Codex-" prefix from a feature label and turn the
|
|
211
213
|
* remainder into a Codex-prefixed display name. Other labels pass through unchanged.
|
|
212
214
|
*/
|
|
213
|
-
function prettifyCodexFeatureLabel(featureLabel) {
|
|
214
|
-
const trimmed =
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
function prettifyCodexFeatureLabel(featureLabel, fallbackLabel) {
|
|
216
|
+
const trimmed = (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabelOrNull)(featureLabel) ??
|
|
217
|
+
(fallbackLabel === undefined
|
|
218
|
+
? (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabel)(featureLabel)
|
|
219
|
+
: (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabel)(fallbackLabel));
|
|
217
220
|
const stripped = trimmed.replace(/^GPT-[\d.]+-Codex-/i, '');
|
|
218
221
|
if (stripped !== trimmed && stripped.length > 0) {
|
|
219
222
|
return `Codex ${stripped}`;
|
|
@@ -230,7 +233,7 @@ function getCodexWindowDisplayLabel(window, allWindows = []) {
|
|
|
230
233
|
return 'Weekly usage limit';
|
|
231
234
|
}
|
|
232
235
|
if (window.category === 'additional') {
|
|
233
|
-
const pretty = prettifyCodexFeatureLabel(window.featureLabel
|
|
236
|
+
const pretty = prettifyCodexFeatureLabel(window.featureLabel, window.label);
|
|
234
237
|
if (window.cadence === '5h')
|
|
235
238
|
return `${pretty} (5h)`;
|
|
236
239
|
if (window.cadence === 'weekly')
|
|
@@ -653,7 +656,9 @@ const QUOTA_PROVIDER_RUNTIME = {
|
|
|
653
656
|
},
|
|
654
657
|
};
|
|
655
658
|
exports.__testExports = {
|
|
659
|
+
getCodexWindowDisplayLabel,
|
|
656
660
|
getQuotaFailureDisplayEntries,
|
|
661
|
+
prettifyCodexFeatureLabel,
|
|
657
662
|
resolveDisplayedTier,
|
|
658
663
|
};
|
|
659
664
|
async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
|
|
@@ -670,6 +675,8 @@ async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
|
|
|
670
675
|
return [provider, await QUOTA_PROVIDER_RUNTIME[provider].fetch(verbose)];
|
|
671
676
|
})));
|
|
672
677
|
console.log('');
|
|
678
|
+
// Pool routing settings are global to the CLIProxy config; read once.
|
|
679
|
+
const poolSettings = (0, pool_state_renderer_1.readPoolRoutingSettings)();
|
|
673
680
|
for (const provider of provider_capabilities_1.QUOTA_SUPPORTED_PROVIDER_IDS) {
|
|
674
681
|
if (!shouldFetch(provider)) {
|
|
675
682
|
continue;
|
|
@@ -678,6 +685,10 @@ async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
|
|
|
678
685
|
const result = providerResults.get(provider) ?? null;
|
|
679
686
|
if (result !== null && runtime.hasData(result)) {
|
|
680
687
|
runtime.render(result);
|
|
688
|
+
// Pool context: drain order + per-account state (available/cooling/paused).
|
|
689
|
+
// QuotaSupportedProvider ids are all valid CLIProxyProvider values.
|
|
690
|
+
// Async: folds in live in-proxy 429 cooldowns when pool routing is on.
|
|
691
|
+
await (0, pool_state_renderer_1.renderProviderPoolSection)(provider, poolSettings);
|
|
681
692
|
continue;
|
|
682
693
|
}
|
|
683
694
|
console.log((0, ui_1.subheader)(runtime.emptyTitle));
|
|
@@ -814,8 +825,13 @@ async function handlePauseAccount(args) {
|
|
|
814
825
|
process.exit(1);
|
|
815
826
|
}
|
|
816
827
|
if (account.paused) {
|
|
828
|
+
const refreshed = (0, account_manager_1.pauseAccount)(provider, account.id);
|
|
829
|
+
const refreshedAccount = refreshed ? (0, account_manager_1.findAccountByQuery)(provider, account.id) : account;
|
|
817
830
|
console.log((0, ui_1.warn)(`Account already paused: ${formatCliAccountLabel(account)}`));
|
|
818
|
-
|
|
831
|
+
if (refreshed) {
|
|
832
|
+
console.log((0, ui_1.info)('Manual pause refreshed; account will stay out of quota rotation'));
|
|
833
|
+
}
|
|
834
|
+
console.log((0, ui_1.info)(`Paused at: ${refreshedAccount?.pausedAt || account.pausedAt || 'unknown'}`));
|
|
819
835
|
return;
|
|
820
836
|
}
|
|
821
837
|
const success = (0, account_manager_1.pauseAccount)(provider, account.id);
|