coding-proxy 0.2.3a2__tar.gz → 0.2.3a4__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.2.3a2 → coding_proxy-0.2.3a4}/PKG-INFO +1 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/pyproject.toml +1 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/config.default.yaml +1 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/logging/db.py +1 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/executor.py +6 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/quota_guard.py +1 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/dashboard.py +490 -225
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/uv.lock +1 -1
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/.github/workflows/ci.yml +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/.github/workflows/coverage.yml +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/.github/workflows/release.yml +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/.gitignore +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/AGENTS.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/CHANGELOG.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/CLAUDE.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/LICENSE +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/README.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/docs/ci-cd.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/docs/framework.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/docs/user-guide.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/docs/zh-CN/README.md +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/__main__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/providers/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/providers/base.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/providers/github.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/providers/google.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/runtime.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/auth/store.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/cli/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/cli/auth_commands.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/cli/banner.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/compat/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/compat/canonical.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/compat/session_store.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/auth_schema.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/loader.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/resiliency.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/routing.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/schema.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/server.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/config/vendors.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/anthropic_to_gemini.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/anthropic_to_openai.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/gemini_sse_adapter.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/gemini_to_anthropic.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/convert/openai_to_anthropic.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/logging/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/logging/formatters.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/logging/stats.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/auth.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/compat.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/constants.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/pricing.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/token.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/model/vendor.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/pricing.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/circuit_breaker.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/error_classifier.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/model_mapper.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/rate_limit.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/retry.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/router.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/session_manager.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/tier.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/usage_parser.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/routing/usage_recorder.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/app.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/factory.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/request_normalizer.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/responses.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/server/routes.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/streaming/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/streaming/anthropic_compat.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/alibaba.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/anthropic.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/antigravity.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/base.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/copilot.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/copilot_models.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/copilot_token_manager.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/copilot_urls.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/doubao.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/kimi.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/minimax.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/mixins.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/native_anthropic.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/token_manager.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/xiaomi.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/src/coding/proxy/vendors/zhipu.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/__init__.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_antigravity.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_app_routes.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_auto_login.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_banner.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_circuit_breaker.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_cli_usage.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_compat.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_config_init.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_config_loader.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_convert_request.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_convert_response.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_convert_sse.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_copilot.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_copilot_convert_request.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_copilot_convert_response.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_copilot_models.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_copilot_urls.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_currency.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_error_classifier.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_logging_dual_write.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_mixins.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_auth.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_compat.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_constants.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_mapper.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_pricing.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_token.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_model_vendor.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_native_vendors.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_parse_usage.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_pricing.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_quota_guard.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_rate_limit.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_request_normalizer.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_router_chain.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_router_executor.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_runtime_reauth.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_schema.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_streaming_anthropic_compat.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_tier.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_tiers_config.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_time_range.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_token_logger.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_token_manager.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_types.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_vendor_streaming.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_vendors.py +0 -0
- {coding_proxy-0.2.3a2 → coding_proxy-0.2.3a4}/tests/test_zhipu.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-proxy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3a4
|
|
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.2.
|
|
3
|
+
version = "0.2.3a4"
|
|
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"
|
|
@@ -58,7 +58,7 @@ vendors:
|
|
|
58
58
|
probe_interval_seconds: 300
|
|
59
59
|
weekly_quota_guard:
|
|
60
60
|
enabled: true
|
|
61
|
-
token_budget:
|
|
61
|
+
token_budget: 500000000 # 一周 token 预算(根据订阅计划调整)
|
|
62
62
|
window_hours: 168.0 # 7 天滑动窗口
|
|
63
63
|
threshold_percent: 99.0
|
|
64
64
|
probe_interval_seconds: 1800 # 每 30 分钟探测一次
|
|
@@ -497,7 +497,7 @@ class TokenLogger:
|
|
|
497
497
|
return 0
|
|
498
498
|
cutoff_iso = _hours_ago_utc_iso(window_hours)
|
|
499
499
|
cursor = await self._db.execute(
|
|
500
|
-
"""SELECT COALESCE(SUM(input_tokens + output_tokens), 0) AS total
|
|
500
|
+
"""SELECT COALESCE(SUM(input_tokens + output_tokens + cache_creation_tokens + cache_read_tokens), 0) AS total
|
|
501
501
|
FROM usage_log
|
|
502
502
|
WHERE vendor = ? AND success = 1
|
|
503
503
|
AND ts >= ?""",
|
|
@@ -276,7 +276,12 @@ class _RouteExecutor:
|
|
|
276
276
|
tier.name,
|
|
277
277
|
usage,
|
|
278
278
|
)
|
|
279
|
-
tier.record_success(
|
|
279
|
+
tier.record_success(
|
|
280
|
+
info.input_tokens
|
|
281
|
+
+ info.output_tokens
|
|
282
|
+
+ info.cache_creation_tokens
|
|
283
|
+
+ info.cache_read_tokens
|
|
284
|
+
)
|
|
280
285
|
duration = int((time.monotonic() - start) * 1000)
|
|
281
286
|
model = body.get("model", "unknown")
|
|
282
287
|
model_served = usage.get("model_served") or tier.vendor.map_model(model)
|