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.
Files changed (178) hide show
  1. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/PKG-INFO +1 -1
  2. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/pyproject.toml +1 -1
  3. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/config.default.yaml +87 -0
  4. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/dashboard.py +18 -4
  5. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/uv.lock +1 -1
  6. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/ci.yml +0 -0
  7. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/coverage.yml +0 -0
  8. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.github/workflows/release.yml +0 -0
  9. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.gitignore +0 -0
  10. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/.pre-commit-config.yaml +0 -0
  11. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/AGENTS.md +0 -0
  12. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/CHANGELOG.md +0 -0
  13. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/CLAUDE.md +0 -0
  14. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/LICENSE +0 -0
  15. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/README.md +0 -0
  16. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/assets/dashboard-v0.2.4.png +0 -0
  17. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/config-reference.md +0 -0
  18. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/convert.md +0 -0
  19. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/design-patterns.md +0 -0
  20. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/routing.md +0 -0
  21. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/testing.md +0 -0
  22. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/arch/vendors.md +0 -0
  23. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/ci-cd.md +0 -0
  24. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/framework.md +0 -0
  25. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/api-reference.md +0 -0
  26. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/cli-reference.md +0 -0
  27. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/dashboard.md +0 -0
  28. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/monitoring.md +0 -0
  29. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/quickstart.md +0 -0
  30. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/guide/vendors.md +0 -0
  31. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/user-guide.md +0 -0
  32. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/docs/zh-CN/README.md +0 -0
  33. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/__init__.py +0 -0
  34. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/__init__.py +0 -0
  35. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/__main__.py +0 -0
  36. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/__init__.py +0 -0
  37. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/__init__.py +0 -0
  38. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/base.py +0 -0
  39. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/github.py +0 -0
  40. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/providers/google.py +0 -0
  41. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/runtime.py +0 -0
  42. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/auth/store.py +0 -0
  43. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/__init__.py +0 -0
  44. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/auth_commands.py +0 -0
  45. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/cli/banner.py +0 -0
  46. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/__init__.py +0 -0
  47. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/canonical.py +0 -0
  48. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/compat/session_store.py +0 -0
  49. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/__init__.py +0 -0
  50. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/auth_schema.py +0 -0
  51. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/loader.py +0 -0
  52. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/resiliency.py +0 -0
  53. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/routing.py +0 -0
  54. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/schema.py +0 -0
  55. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/server.py +0 -0
  56. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/config/vendors.py +0 -0
  57. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/__init__.py +0 -0
  58. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_gemini.py +0 -0
  59. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/anthropic_to_openai.py +0 -0
  60. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_sse_adapter.py +0 -0
  61. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/gemini_to_anthropic.py +0 -0
  62. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/openai_to_anthropic.py +0 -0
  63. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/convert/vendor_channels.py +0 -0
  64. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/__init__.py +0 -0
  65. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/db.py +0 -0
  66. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/formatters.py +0 -0
  67. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/logging/stats.py +0 -0
  68. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/__init__.py +0 -0
  69. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/auth.py +0 -0
  70. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/compat.py +0 -0
  71. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/constants.py +0 -0
  72. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/pricing.py +0 -0
  73. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/token.py +0 -0
  74. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/model/vendor.py +0 -0
  75. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/__init__.py +0 -0
  76. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/config.py +0 -0
  77. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/__init__.py +0 -0
  78. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/anthropic.py +0 -0
  79. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/gemini.py +0 -0
  80. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/extractors/openai.py +0 -0
  81. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/handler.py +0 -0
  82. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/operation.py +0 -0
  83. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/routes.py +0 -0
  84. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/native_api/usage_registry.py +0 -0
  85. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/pricing.py +0 -0
  86. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/__init__.py +0 -0
  87. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/circuit_breaker.py +0 -0
  88. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/error_classifier.py +0 -0
  89. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/executor.py +0 -0
  90. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/model_mapper.py +0 -0
  91. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/quota_guard.py +0 -0
  92. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/rate_limit.py +0 -0
  93. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/retry.py +0 -0
  94. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/router.py +0 -0
  95. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/session_manager.py +0 -0
  96. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/tier.py +0 -0
  97. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/usage_parser.py +0 -0
  98. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/routing/usage_recorder.py +0 -0
  99. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/__init__.py +0 -0
  100. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/app.py +0 -0
  101. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/factory.py +0 -0
  102. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/responses.py +0 -0
  103. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/server/routes.py +0 -0
  104. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/streaming/__init__.py +0 -0
  105. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/streaming/anthropic_compat.py +0 -0
  106. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/__init__.py +0 -0
  107. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/alibaba.py +0 -0
  108. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/anthropic.py +0 -0
  109. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/antigravity.py +0 -0
  110. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/base.py +0 -0
  111. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot.py +0 -0
  112. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_models.py +0 -0
  113. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_token_manager.py +0 -0
  114. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/copilot_urls.py +0 -0
  115. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/doubao.py +0 -0
  116. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/kimi.py +0 -0
  117. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/minimax.py +0 -0
  118. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/mixins.py +0 -0
  119. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/native_anthropic.py +0 -0
  120. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/token_manager.py +0 -0
  121. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/xiaomi.py +0 -0
  122. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/src/coding/proxy/vendors/zhipu.py +0 -0
  123. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/__init__.py +0 -0
  124. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_antigravity.py +0 -0
  125. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_app_routes.py +0 -0
  126. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_auto_login.py +0 -0
  127. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_banner.py +0 -0
  128. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_circuit_breaker.py +0 -0
  129. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_cli_usage.py +0 -0
  130. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_compat.py +0 -0
  131. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_config_init.py +0 -0
  132. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_config_loader.py +0 -0
  133. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_request.py +0 -0
  134. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_response.py +0 -0
  135. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_convert_sse.py +0 -0
  136. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot.py +0 -0
  137. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_convert_request.py +0 -0
  138. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_convert_response.py +0 -0
  139. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_models.py +0 -0
  140. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_copilot_urls.py +0 -0
  141. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_currency.py +0 -0
  142. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_error_classifier.py +0 -0
  143. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_logging_dual_write.py +0 -0
  144. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_mixins.py +0 -0
  145. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_auth.py +0 -0
  146. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_compat.py +0 -0
  147. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_constants.py +0 -0
  148. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_mapper.py +0 -0
  149. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_pricing.py +0 -0
  150. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_token.py +0 -0
  151. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_model_vendor.py +0 -0
  152. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_base_url_override.py +0 -0
  153. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_extractors.py +0 -0
  154. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_handler.py +0 -0
  155. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_operation.py +0 -0
  156. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_api_routes.py +0 -0
  157. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_native_vendors.py +0 -0
  158. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_parse_usage.py +0 -0
  159. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_parse_usage_gemini.py +0 -0
  160. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_pricing.py +0 -0
  161. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_quota_guard.py +0 -0
  162. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_rate_limit.py +0 -0
  163. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_router_chain.py +0 -0
  164. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_router_executor.py +0 -0
  165. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_runtime_reauth.py +0 -0
  166. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_schema.py +0 -0
  167. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_streaming_anthropic_compat.py +0 -0
  168. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_tier.py +0 -0
  169. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_tiers_config.py +0 -0
  170. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_time_range.py +0 -0
  171. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_logger.py +0 -0
  172. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_logger_native_columns.py +0 -0
  173. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_token_manager.py +0 -0
  174. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_types.py +0 -0
  175. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendor_channels.py +0 -0
  176. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendor_streaming.py +0 -0
  177. {coding_proxy-0.3.0a2 → coding_proxy-0.3.0a3}/tests/test_vendors.py +0 -0
  178. {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.0a2
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.0a2"
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] = {};
@@ -74,7 +74,7 @@ wheels = [
74
74
 
75
75
  [[package]]
76
76
  name = "coding-proxy"
77
- version = "0.3.0a2"
77
+ version = "0.3.0a3"
78
78
  source = { editable = "." }
79
79
  dependencies = [
80
80
  { name = "aiosqlite" },
File without changes
File without changes
File without changes
File without changes