coding-proxy 0.3.0a2__tar.gz → 0.3.0a3__tar.gz
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.
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/PKG-INFO +1 -1
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/pyproject.toml +1 -1
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/config.default.yaml +87 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/dashboard.py +18 -4
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/uv.lock +1 -1
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/ci.yml +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/coverage.yml +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/release.yml +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.gitignore +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.pre-commit-config.yaml +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/AGENTS.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/CHANGELOG.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/CLAUDE.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/LICENSE +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/README.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/assets/dashboard-v0.2.4.png +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/config-reference.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/convert.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/design-patterns.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/routing.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/testing.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/vendors.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/ci-cd.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/framework.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/api-reference.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/cli-reference.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/dashboard.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/monitoring.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/quickstart.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/vendors.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/user-guide.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/zh-CN/README.md +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/__main__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/base.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/github.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/google.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/runtime.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/store.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/auth_commands.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/banner.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/canonical.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/session_store.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/auth_schema.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/loader.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/resiliency.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/routing.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/schema.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/server.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/vendors.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_gemini.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_openai.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_sse_adapter.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_to_anthropic.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/openai_to_anthropic.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/vendor_channels.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/db.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/formatters.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/stats.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/auth.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/compat.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/constants.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/pricing.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/token.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/vendor.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/config.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/anthropic.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/gemini.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/openai.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/handler.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/operation.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/routes.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/usage_registry.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/pricing.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/circuit_breaker.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/error_classifier.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/executor.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/model_mapper.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/quota_guard.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/rate_limit.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/retry.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/router.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/session_manager.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/tier.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/usage_parser.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/usage_recorder.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/app.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/factory.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/responses.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/routes.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/streaming/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/streaming/anthropic_compat.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/alibaba.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/anthropic.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/antigravity.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/base.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_models.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_token_manager.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_urls.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/doubao.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/kimi.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/minimax.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/mixins.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/native_anthropic.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/token_manager.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/xiaomi.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/zhipu.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/__init__.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_antigravity.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_app_routes.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_auto_login.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_banner.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_circuit_breaker.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_cli_usage.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_compat.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_config_init.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_config_loader.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_request.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_response.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_sse.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_convert_request.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_convert_response.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_models.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_urls.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_currency.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_error_classifier.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_logging_dual_write.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_mixins.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_auth.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_compat.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_constants.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_mapper.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_pricing.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_token.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_vendor.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_base_url_override.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_extractors.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_handler.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_operation.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_routes.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_vendors.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_parse_usage.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_parse_usage_gemini.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_pricing.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_quota_guard.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_rate_limit.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_router_chain.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_router_executor.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_runtime_reauth.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_schema.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_streaming_anthropic_compat.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_tier.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_tiers_config.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_time_range.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_logger.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_logger_native_columns.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_manager.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_types.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendor_channels.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendor_streaming.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendors.py +0 -0
- {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_zhipu.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-proxy
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.0a3
|
|
4
4
|
Summary: A High-Availability, Transparent, and Smart Multi-Vendor Proxy for Claude Code. Support Claude Plans, GitHub Copilot, Google Antigravity, ZAI/GLM, MiniMax, Qwen, Xiaomi, Kimi, Doubao...
|
|
5
5
|
Project-URL: Source Code, https://github.com/ThreeFish-AI/coding-proxy
|
|
6
6
|
Project-URL: User Guide, https://github.com/ThreeFish-AI/coding-proxy/blob/master/docs/user-guide.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "coding-proxy"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.0a3"
|
|
4
4
|
description = "A High-Availability, Transparent, and Smart Multi-Vendor Proxy for Claude Code. Support Claude Plans, GitHub Copilot, Google Antigravity, ZAI/GLM, MiniMax, Qwen, Xiaomi, Kimi, Doubao..."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -398,6 +398,93 @@ pricing:
|
|
|
398
398
|
output_cost_per_mtok: $5
|
|
399
399
|
cache_write_cost_per_mtok: $1.25
|
|
400
400
|
cache_read_cost_per_mtok: $0.10
|
|
401
|
+
# -- OpenAI --
|
|
402
|
+
- vendor: openai
|
|
403
|
+
model: gpt-5.4-pro
|
|
404
|
+
input_cost_per_mtok: $30.00
|
|
405
|
+
output_cost_per_mtok: $180.00
|
|
406
|
+
cache_read_cost_per_mtok: $3.00
|
|
407
|
+
- vendor: openai
|
|
408
|
+
model: gpt-5.4-2026-03-05
|
|
409
|
+
input_cost_per_mtok: $2.50
|
|
410
|
+
output_cost_per_mtok: $15.00
|
|
411
|
+
cache_read_cost_per_mtok: $0.25
|
|
412
|
+
- vendor: openai
|
|
413
|
+
model: gpt-5.4-mini-2026-03-17
|
|
414
|
+
input_cost_per_mtok: $0.75
|
|
415
|
+
output_cost_per_mtok: $4.50
|
|
416
|
+
cache_read_cost_per_mtok: $0.07
|
|
417
|
+
- vendor: openai
|
|
418
|
+
model: gpt-5.4-nano
|
|
419
|
+
input_cost_per_mtok: $0.20
|
|
420
|
+
output_cost_per_mtok: $1.25
|
|
421
|
+
cache_read_cost_per_mtok: $0.02
|
|
422
|
+
- vendor: openai
|
|
423
|
+
model: gpt-5-mini-2025-08-07
|
|
424
|
+
input_cost_per_mtok: $0.25
|
|
425
|
+
output_cost_per_mtok: $2.00
|
|
426
|
+
cache_read_cost_per_mtok: $0.02
|
|
427
|
+
- vendor: openai
|
|
428
|
+
model: gpt-5-nano-2025-08-07
|
|
429
|
+
input_cost_per_mtok: $0.05
|
|
430
|
+
output_cost_per_mtok: $0.40
|
|
431
|
+
cache_read_cost_per_mtok: $0.01
|
|
432
|
+
- vendor: openai
|
|
433
|
+
model: text-embedding-3-large
|
|
434
|
+
input_cost_per_mtok: $0.13
|
|
435
|
+
- vendor: openai
|
|
436
|
+
model: text-embedding-3-small
|
|
437
|
+
input_cost_per_mtok: $0.02
|
|
438
|
+
- vendor: openai
|
|
439
|
+
model: text-embedding-ada-002
|
|
440
|
+
input_cost_per_mtok: $0.10
|
|
441
|
+
# -- Anthropic Native --
|
|
442
|
+
- vendor: anthropic-native
|
|
443
|
+
model: claude-opus-4-7
|
|
444
|
+
input_cost_per_mtok: $5.0
|
|
445
|
+
output_cost_per_mtok: $25.0
|
|
446
|
+
cache_write_cost_per_mtok: $6.25
|
|
447
|
+
cache_read_cost_per_mtok: $0.50
|
|
448
|
+
- vendor: anthropic-native
|
|
449
|
+
model: claude-opus-4-6
|
|
450
|
+
input_cost_per_mtok: $5.0
|
|
451
|
+
output_cost_per_mtok: $25.0
|
|
452
|
+
cache_write_cost_per_mtok: $6.25
|
|
453
|
+
cache_read_cost_per_mtok: $0.50
|
|
454
|
+
- vendor: anthropic-native
|
|
455
|
+
model: claude-sonnet-4-6
|
|
456
|
+
input_cost_per_mtok: $3.0
|
|
457
|
+
output_cost_per_mtok: $15.0
|
|
458
|
+
cache_write_cost_per_mtok: $3.75
|
|
459
|
+
cache_read_cost_per_mtok: $0.30
|
|
460
|
+
- vendor: anthropic-native
|
|
461
|
+
model: claude-haiku-4-5-20251001
|
|
462
|
+
input_cost_per_mtok: $1
|
|
463
|
+
output_cost_per_mtok: $5
|
|
464
|
+
cache_write_cost_per_mtok: $1.25
|
|
465
|
+
cache_read_cost_per_mtok: $0.10
|
|
466
|
+
# -- Gemini --
|
|
467
|
+
- vendor: gemini
|
|
468
|
+
model: gemini-3.1-pro-preview
|
|
469
|
+
input_cost_per_mtok: $2.00
|
|
470
|
+
output_cost_per_mtok: $12.00
|
|
471
|
+
cache_read_cost_per_mtok: $0.20
|
|
472
|
+
- vendor: gemini
|
|
473
|
+
model: gemini-3-flash-preview
|
|
474
|
+
input_cost_per_mtok: $0.50
|
|
475
|
+
output_cost_per_mtok: $3.00
|
|
476
|
+
cache_read_cost_per_mtok: $0.03
|
|
477
|
+
- vendor: gemini
|
|
478
|
+
model: gemini-2.5-flash
|
|
479
|
+
input_cost_per_mtok: $0.30
|
|
480
|
+
output_cost_per_mtok: $2.50
|
|
481
|
+
cache_read_cost_per_mtok: $0.03
|
|
482
|
+
- vendor: gemini
|
|
483
|
+
model: gemini-embedding-001
|
|
484
|
+
input_cost_per_mtok: $0.15
|
|
485
|
+
- vendor: gemini
|
|
486
|
+
model: text-embedding-004
|
|
487
|
+
input_cost_per_mtok: $0.10
|
|
401
488
|
# ── Google Antigravity(参照 Anthropic 定价估算) ──
|
|
402
489
|
- vendor: antigravity
|
|
403
490
|
model: claude-opus-4-6-thinking
|
|
@@ -585,6 +585,20 @@ function now() {
|
|
|
585
585
|
return new Date().toLocaleTimeString('zh-CN', {hour:'2-digit',minute:'2-digit',second:'2-digit'});
|
|
586
586
|
}
|
|
587
587
|
|
|
588
|
+
// ── Vendor 展示名映射 ─────────────────────────────────────
|
|
589
|
+
// 规则:以 cc/api 前缀区分代理形态,屏蔽后端 -native 消歧后缀。
|
|
590
|
+
// _API_VENDORS 需与后端 native_api/handler.py::_VENDOR_LABEL 对齐,
|
|
591
|
+
// 新增无 -native 后缀的 native vendor 时同步更新本集合。
|
|
592
|
+
const _API_VENDORS = new Set(['anthropic-native', 'openai', 'gemini']);
|
|
593
|
+
function formatVendorLabel(v) {
|
|
594
|
+
if (!isValidLabel(v)) return v;
|
|
595
|
+
if (_API_VENDORS.has(v)) {
|
|
596
|
+
const name = v.endsWith('-native') ? v.slice(0, -'-native'.length) : v;
|
|
597
|
+
return 'api | ' + name;
|
|
598
|
+
}
|
|
599
|
+
return 'cc | ' + v;
|
|
600
|
+
}
|
|
601
|
+
|
|
588
602
|
// ── 渐变填充工具 ──────────────────────────────────────────
|
|
589
603
|
function makeGradient(ctx, color) {
|
|
590
604
|
const h = ctx.canvas.height;
|
|
@@ -944,7 +958,7 @@ function buildTimeline(rows, tierOrder) {
|
|
|
944
958
|
const color = VENDOR_COLORS[i % VENDOR_COLORS.length];
|
|
945
959
|
return {
|
|
946
960
|
...COMMON_LINE_DATASET,
|
|
947
|
-
label: v,
|
|
961
|
+
label: formatVendorLabel(v),
|
|
948
962
|
data: dates.map(d => vendorDateMap[v][d] || 0),
|
|
949
963
|
borderColor: color,
|
|
950
964
|
backgroundColor: color + '30',
|
|
@@ -994,7 +1008,7 @@ function buildVendorDist(rows, tierOrder) {
|
|
|
994
1008
|
chartVendorDist = new Chart(ctx, {
|
|
995
1009
|
type: 'doughnut',
|
|
996
1010
|
data: {
|
|
997
|
-
labels,
|
|
1011
|
+
labels: labels.map(formatVendorLabel),
|
|
998
1012
|
datasets: [{
|
|
999
1013
|
data,
|
|
1000
1014
|
backgroundColor: labels.map((_,i) => VENDOR_COLORS[i % VENDOR_COLORS.length]),
|
|
@@ -1066,7 +1080,7 @@ function buildTokenTimeline(rows, tierOrder) {
|
|
|
1066
1080
|
const color = VENDOR_COLORS[i % VENDOR_COLORS.length];
|
|
1067
1081
|
return {
|
|
1068
1082
|
...COMMON_LINE_DATASET,
|
|
1069
|
-
label: v,
|
|
1083
|
+
label: formatVendorLabel(v),
|
|
1070
1084
|
data: dates.map(d => vendorDateMap[v][d] || 0),
|
|
1071
1085
|
borderColor: color,
|
|
1072
1086
|
backgroundColor: color + '30',
|
|
@@ -1103,7 +1117,7 @@ function buildModelTokenTimeline(rows) {
|
|
|
1103
1117
|
const v = r.vendor;
|
|
1104
1118
|
const m = r.model_served;
|
|
1105
1119
|
if (!isValidLabel(v) || !isValidLabel(m)) continue;
|
|
1106
|
-
const key = v + ' / ' + m;
|
|
1120
|
+
const key = formatVendorLabel(v) + ' / ' + m;
|
|
1107
1121
|
const d = r.date;
|
|
1108
1122
|
if (!d) continue;
|
|
1109
1123
|
if (!modelDateMap[key]) modelDateMap[key] = {};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_gemini.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_openai.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_sse_adapter.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_to_anthropic.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/openai_to_anthropic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/__init__.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/anthropic.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/gemini.py
RENAMED
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/openai.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/streaming/anthropic_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_token_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|