coding-proxy 0.5.1a3__tar.gz → 0.5.1a4__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.5.1a3 → coding_proxy-0.5.1a4}/PKG-INFO +1 -1
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/pyproject.toml +1 -1
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/executor.py +2 -2
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/dashboard.py +18 -1
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_router_executor.py +10 -1
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/uv.lock +1 -1
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/.github/workflows/ci.yml +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/.github/workflows/coverage.yml +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/.github/workflows/release.yml +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/.gitignore +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/.pre-commit-config.yaml +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/AGENTS.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/CHANGELOG.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/CLAUDE.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/LICENSE +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/README.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/assets/dashboard-v0.4.0.png +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/assets/model-calling-v0.5.0.png +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/assets/session-v0.4.0.png +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/.agents/browser-validation.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/.agents/issue.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/.agents/knowledge-map.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/.agents/reference-specifications.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/config-reference.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/convert.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/design-patterns.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/routing.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/testing.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/arch/vendors.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/framework.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/api-reference.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/cli-reference.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/dashboard.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/monitoring.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/quickstart.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/guide/vendors.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/ops/ci-cd.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/user-guide.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/docs/zh-CN/README.md +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/__main__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/providers/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/providers/base.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/providers/github.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/providers/google.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/runtime.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/auth/store.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/cli/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/cli/auth_commands.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/cli/banner.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/compat/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/compat/canonical.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/compat/session_store.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/auth_schema.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/config.default.yaml +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/loader.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/resiliency.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/routing.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/schema.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/server.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/session_policy.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/config/vendors.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/anthropic_to_gemini.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/anthropic_to_openai.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/gemini_sse_adapter.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/gemini_to_anthropic.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/openai_to_anthropic.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/vendor_channels.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/logging/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/logging/db.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/logging/formatters.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/logging/stats.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/auth.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/compat.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/constants.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/pricing.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/token.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/model/vendor.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/config.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/anthropic.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/gemini.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/openai.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/handler.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/operation.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/routes.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/usage_registry.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/pricing.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/circuit_breaker.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/error_classifier.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/model_mapper.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/quota_guard.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/rate_limit.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/retry.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/router.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/session_manager.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/session_policy.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/tier.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/usage_parser.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/routing/usage_recorder.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/app.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/factory.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/responses.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/server/routes.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/streaming/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/streaming/anthropic_compat.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/alibaba.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/anthropic.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/antigravity.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/base.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/concurrency.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/copilot.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/copilot_models.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/copilot_token_manager.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/copilot_urls.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/doubao.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/kimi.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/minimax.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/mixins.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/native_anthropic.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/token_manager.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/xiaomi.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/vendors/zhipu.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/e2e/__init__.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/e2e/conftest.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/e2e/test_e2e_http.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/e2e/test_e2e_token.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/e2e/test_e2e_vendor.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_antigravity.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_app_routes.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_auto_login.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_banner.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_circuit_breaker.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_cli_usage.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_compat.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_concurrency_monitor.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_config_init.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_config_loader.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_convert_request.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_convert_response.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_convert_sse.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_copilot.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_copilot_convert_request.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_copilot_convert_response.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_copilot_models.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_copilot_urls.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_currency.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_error_classifier.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_executor_in_flight_tracking.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_logging_dual_write.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_mixins.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_auth.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_compat.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_constants.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_mapper.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_pricing.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_token.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_model_vendor.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_api_base_url_override.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_api_extractors.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_api_handler.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_api_operation.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_api_routes.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_native_vendors.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_parse_usage.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_parse_usage_gemini.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_pricing.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_quota_guard.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_rate_limit.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_router_chain.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_runtime_reauth.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_schema.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_session_aware.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_streaming_anthropic_compat.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_tier.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_tiers_config.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_time_range.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_token_logger.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_token_logger_native_columns.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_token_manager.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_types.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_vendor_channels.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_vendor_streaming.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_vendors.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_zhipu.py +0 -0
- {coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/tests/test_zhipu_concurrency.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-proxy
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1a4
|
|
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.5.
|
|
3
|
+
version = "0.5.1a4"
|
|
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"
|
|
@@ -54,7 +54,7 @@ from ..model.compat import CanonicalRequest
|
|
|
54
54
|
|
|
55
55
|
logger = logging.getLogger(__name__)
|
|
56
56
|
|
|
57
|
-
_SESSION_TITLE_MAX_LEN =
|
|
57
|
+
_SESSION_TITLE_MAX_LEN = 600
|
|
58
58
|
|
|
59
59
|
# Claude Code 注入的"噪声"标签 — 系统级上下文,不应进入 Session 标题。
|
|
60
60
|
# 这些标签由 CC harness 在首个 user 消息 content 中拼接,高度同质,
|
|
@@ -63,7 +63,7 @@ _NOISE_TAG_PATTERN = re.compile(
|
|
|
63
63
|
r"<(?P<tag>system-reminder|user-preferences|"
|
|
64
64
|
r"local-command-stdout|local-command-stderr|"
|
|
65
65
|
r"bash-input|bash-stdout|bash-stderr|"
|
|
66
|
-
r"ide_selection|stdin|system_instruction)\b[^>]*>"
|
|
66
|
+
r"ide_selection|stdin|system_instruction|session)\b[^>]*>"
|
|
67
67
|
r".*?</(?P=tag)>",
|
|
68
68
|
flags=re.DOTALL | re.IGNORECASE,
|
|
69
69
|
)
|
|
@@ -444,6 +444,21 @@ _DASHBOARD_HTML = """<!DOCTYPE html>
|
|
|
444
444
|
.detail-card .detail-item { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
|
|
445
445
|
.detail-card .detail-label { font-size: 11px; color: var(--text-tertiary); text-transform: uppercase; letter-spacing: .3px; }
|
|
446
446
|
.detail-card .detail-value { color: var(--text-primary); line-height: 1.4; word-break: break-all; overflow-wrap: break-word; }
|
|
447
|
+
.detail-title-row {
|
|
448
|
+
padding-bottom: 10px; margin-bottom: 10px;
|
|
449
|
+
border-bottom: 1px solid var(--border);
|
|
450
|
+
}
|
|
451
|
+
.detail-title-row .detail-value {
|
|
452
|
+
white-space: normal;
|
|
453
|
+
word-break: break-word;
|
|
454
|
+
overflow-wrap: break-word;
|
|
455
|
+
line-height: 1.5;
|
|
456
|
+
max-height: 4.5em;
|
|
457
|
+
overflow: hidden;
|
|
458
|
+
display: -webkit-box;
|
|
459
|
+
-webkit-line-clamp: 3;
|
|
460
|
+
-webkit-box-orient: vertical;
|
|
461
|
+
}
|
|
447
462
|
.detail-identity-row {
|
|
448
463
|
display: flex; gap: 16px;
|
|
449
464
|
padding-bottom: 10px; margin-bottom: 10px;
|
|
@@ -1903,9 +1918,11 @@ function renderSessionPage() {
|
|
|
1903
1918
|
'<td>' + formatCategories(s.client_categories) + '</td>' +
|
|
1904
1919
|
'</tr>' +
|
|
1905
1920
|
'<tr class="row-detail"><td colspan="11"><div class="detail-card">' +
|
|
1921
|
+
'<div class="detail-title-row">' +
|
|
1922
|
+
'<div class="detail-item"><div class="detail-label">Title</div><div class="detail-value">' + (sessionTitle ? escapeHtml(sessionTitle) : '–') + '</div></div>' +
|
|
1923
|
+
'</div>' +
|
|
1906
1924
|
'<div class="detail-identity-row">' +
|
|
1907
1925
|
'<div class="detail-item"><div class="detail-label">Session ID</div><div class="detail-value" title="' + escapeHtml(s.session_key) + '">' + escapeHtml(parsed.session_id || s.session_key) + '</div></div>' +
|
|
1908
|
-
'<div class="detail-item"><div class="detail-label">Title</div><div class="detail-value">' + (sessionTitle ? escapeHtml(sessionTitle) : '–') + '</div></div>' +
|
|
1909
1926
|
'<div class="detail-item"><div class="detail-label">Device</div><div class="detail-value" title="' + escapeHtml(parsed.device_id || '') + '">' + (parsed.device_id ? escapeHtml(parsed.device_id) : '–') + '</div></div>' +
|
|
1910
1927
|
'<div class="detail-item"><div class="detail-label">Account</div><div class="detail-value" title="' + escapeHtml(parsed.account_uuid || '') + '">' + (parsed.account_uuid ? escapeHtml(parsed.account_uuid) : '–') + '</div></div>' +
|
|
1911
1928
|
'</div>' +
|
|
@@ -2249,6 +2249,15 @@ class TestSanitizeUserText:
|
|
|
2249
2249
|
raw = "<local-command-stdout>build ok</local-command-stdout>构建后的下一步问题"
|
|
2250
2250
|
assert _sanitize_user_text(raw) == "构建后的下一步问题"
|
|
2251
2251
|
|
|
2252
|
+
def test_strips_session_tag(self):
|
|
2253
|
+
"""``<session>`` 标签应被完整剥离,不残留在标题中."""
|
|
2254
|
+
raw = "<session>session metadata</session>用户真实输入文本"
|
|
2255
|
+
assert _sanitize_user_text(raw) == "用户真实输入文本"
|
|
2256
|
+
|
|
2257
|
+
def test_strips_session_tag_multiline(self):
|
|
2258
|
+
raw = "<session>\nline1\nline2\n</session>真实标题"
|
|
2259
|
+
assert _sanitize_user_text(raw) == "真实标题"
|
|
2260
|
+
|
|
2252
2261
|
|
|
2253
2262
|
class TestExtractSessionTitle:
|
|
2254
2263
|
"""``_extract_session_title`` — 端到端从 CanonicalRequest 抽取标题."""
|
|
@@ -2258,7 +2267,7 @@ class TestExtractSessionTitle:
|
|
|
2258
2267
|
return build_canonical_request({"model": "test", "messages": messages}, {})
|
|
2259
2268
|
|
|
2260
2269
|
def test_truncates_to_max_len(self):
|
|
2261
|
-
long_text = "用户输入文本" *
|
|
2270
|
+
long_text = "用户输入文本" * 200
|
|
2262
2271
|
req = self._build_request([{"role": "user", "content": long_text}])
|
|
2263
2272
|
title = _extract_session_title(req)
|
|
2264
2273
|
assert len(title) == _SESSION_TITLE_MAX_LEN
|
|
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
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/anthropic_to_gemini.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/anthropic_to_openai.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/gemini_sse_adapter.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/convert/gemini_to_anthropic.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/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.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/__init__.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/anthropic.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/src/coding/proxy/native_api/extractors/gemini.py
RENAMED
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/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.5.1a3 → coding_proxy-0.5.1a4}/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
|
|
File without changes
|
{coding_proxy-0.5.1a3 → coding_proxy-0.5.1a4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|