ccproxy-api 0.1.7__tar.gz → 0.2.0__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 (674) hide show
  1. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/.gitignore +5 -0
  2. ccproxy_api-0.2.0/PKG-INFO +212 -0
  3. ccproxy_api-0.2.0/README.md +172 -0
  4. ccproxy_api-0.2.0/ccproxy/api/__init__.py +11 -0
  5. ccproxy_api-0.2.0/ccproxy/api/app.py +581 -0
  6. ccproxy_api-0.2.0/ccproxy/api/bootstrap.py +30 -0
  7. ccproxy_api-0.2.0/ccproxy/api/decorators.py +85 -0
  8. ccproxy_api-0.2.0/ccproxy/api/dependencies.py +191 -0
  9. ccproxy_api-0.2.0/ccproxy/api/format_validation.py +54 -0
  10. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/api/middleware/cors.py +6 -3
  11. ccproxy_api-0.2.0/ccproxy/api/middleware/errors.py +595 -0
  12. ccproxy_api-0.2.0/ccproxy/api/middleware/hooks.py +563 -0
  13. ccproxy_api-0.2.0/ccproxy/api/middleware/normalize_headers.py +59 -0
  14. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/api/middleware/request_id.py +35 -16
  15. ccproxy_api-0.2.0/ccproxy/api/middleware/streaming_hooks.py +292 -0
  16. ccproxy_api-0.2.0/ccproxy/api/routes/__init__.py +15 -0
  17. ccproxy_api-0.2.0/ccproxy/api/routes/health.py +135 -0
  18. ccproxy_api-0.2.0/ccproxy/api/routes/plugins.py +277 -0
  19. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/auth/__init__.py +2 -19
  20. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/auth/bearer.py +25 -15
  21. ccproxy_api-0.2.0/ccproxy/auth/dependencies.py +195 -0
  22. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/auth/exceptions.py +0 -12
  23. ccproxy_api-0.2.0/ccproxy/auth/manager.py +88 -0
  24. ccproxy_api-0.2.0/ccproxy/auth/managers/__init__.py +10 -0
  25. ccproxy_api-0.2.0/ccproxy/auth/managers/base.py +523 -0
  26. ccproxy_api-0.2.0/ccproxy/auth/managers/base_enhanced.py +63 -0
  27. ccproxy_api-0.2.0/ccproxy/auth/managers/token_snapshot.py +77 -0
  28. ccproxy_api-0.2.0/ccproxy/auth/models/base.py +65 -0
  29. ccproxy_api-0.2.0/ccproxy/auth/models/credentials.py +40 -0
  30. ccproxy_api-0.2.0/ccproxy/auth/oauth/__init__.py +12 -0
  31. ccproxy_api-0.2.0/ccproxy/auth/oauth/base.py +533 -0
  32. ccproxy_api-0.2.0/ccproxy/auth/oauth/cli_errors.py +37 -0
  33. ccproxy_api-0.2.0/ccproxy/auth/oauth/flows.py +430 -0
  34. ccproxy_api-0.2.0/ccproxy/auth/oauth/protocol.py +366 -0
  35. ccproxy_api-0.2.0/ccproxy/auth/oauth/registry.py +408 -0
  36. ccproxy_api-0.2.0/ccproxy/auth/oauth/router.py +396 -0
  37. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/auth/oauth/routes.py +186 -113
  38. ccproxy_api-0.2.0/ccproxy/auth/oauth/session.py +151 -0
  39. ccproxy_api-0.2.0/ccproxy/auth/oauth/templates.py +342 -0
  40. ccproxy_api-0.2.0/ccproxy/auth/storage/__init__.py +9 -0
  41. ccproxy_api-0.2.0/ccproxy/auth/storage/base.py +331 -0
  42. ccproxy_api-0.2.0/ccproxy/auth/storage/generic.py +134 -0
  43. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/__init__.py +1 -2
  44. ccproxy_api-0.2.0/ccproxy/cli/_settings_help.py +351 -0
  45. ccproxy_api-0.2.0/ccproxy/cli/commands/auth.py +1690 -0
  46. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/commands/config/commands.py +209 -276
  47. ccproxy_api-0.2.0/ccproxy/cli/commands/plugins.py +669 -0
  48. ccproxy_api-0.2.0/ccproxy/cli/commands/serve.py +251 -0
  49. ccproxy_api-0.2.0/ccproxy/cli/commands/status.py +254 -0
  50. ccproxy_api-0.2.0/ccproxy/cli/decorators.py +83 -0
  51. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/helpers.py +22 -60
  52. ccproxy_api-0.2.0/ccproxy/cli/main.py +453 -0
  53. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/options/claude_options.py +0 -25
  54. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/config/__init__.py +7 -11
  55. ccproxy_api-0.2.0/ccproxy/config/core.py +227 -0
  56. ccproxy_api-0.2.0/ccproxy/config/env_generator.py +232 -0
  57. ccproxy_api-0.2.0/ccproxy/config/runtime.py +67 -0
  58. ccproxy_api-0.2.0/ccproxy/config/security.py +52 -0
  59. ccproxy_api-0.2.0/ccproxy/config/settings.py +518 -0
  60. ccproxy_api-0.2.0/ccproxy/config/toml_generator.py +299 -0
  61. ccproxy_api-0.2.0/ccproxy/config/utils.py +452 -0
  62. ccproxy_api-0.2.0/ccproxy/core/__init__.py +10 -0
  63. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/core}/_version.py +16 -3
  64. ccproxy_api-0.2.0/ccproxy/core/async_task_manager.py +516 -0
  65. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/async_utils.py +47 -14
  66. ccproxy_api-0.2.0/ccproxy/core/auth/__init__.py +6 -0
  67. ccproxy_api-0.2.0/ccproxy/core/constants.py +63 -0
  68. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/errors.py +53 -0
  69. ccproxy_api-0.2.0/ccproxy/core/id_utils.py +20 -0
  70. ccproxy_api-0.2.0/ccproxy/core/interfaces.py +140 -0
  71. ccproxy_api-0.2.0/ccproxy/core/logging.py +742 -0
  72. ccproxy_api-0.2.0/ccproxy/core/plugins/__init__.py +77 -0
  73. ccproxy_api-0.2.0/ccproxy/core/plugins/cli_discovery.py +211 -0
  74. ccproxy_api-0.2.0/ccproxy/core/plugins/declaration.py +455 -0
  75. ccproxy_api-0.2.0/ccproxy/core/plugins/discovery.py +604 -0
  76. ccproxy_api-0.2.0/ccproxy/core/plugins/factories.py +967 -0
  77. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/__init__.py +30 -0
  78. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/base.py +58 -0
  79. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/events.py +46 -0
  80. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/implementations/__init__.py +16 -0
  81. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/implementations/formatters/__init__.py +11 -0
  82. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/implementations/formatters/json.py +552 -0
  83. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/implementations/formatters/raw.py +370 -0
  84. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/implementations/http_tracer.py +431 -0
  85. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/layers.py +44 -0
  86. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/manager.py +186 -0
  87. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/registry.py +139 -0
  88. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/thread_manager.py +203 -0
  89. ccproxy_api-0.2.0/ccproxy/core/plugins/hooks/types.py +22 -0
  90. ccproxy_api-0.2.0/ccproxy/core/plugins/interfaces.py +416 -0
  91. ccproxy_api-0.2.0/ccproxy/core/plugins/loader.py +166 -0
  92. ccproxy_api-0.2.0/ccproxy/core/plugins/middleware.py +233 -0
  93. ccproxy_api-0.2.0/ccproxy/core/plugins/models.py +59 -0
  94. ccproxy_api-0.2.0/ccproxy/core/plugins/protocol.py +180 -0
  95. ccproxy_api-0.2.0/ccproxy/core/plugins/runtime.py +519 -0
  96. ccproxy_api-0.1.7/ccproxy/observability/context.py → ccproxy_api-0.2.0/ccproxy/core/request_context.py +137 -94
  97. ccproxy_api-0.2.0/ccproxy/core/status_report.py +211 -0
  98. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/transformers.py +13 -8
  99. ccproxy_api-0.2.0/ccproxy/data/claude_headers_fallback.json +558 -0
  100. ccproxy_api-0.2.0/ccproxy/data/codex_headers_fallback.json +121 -0
  101. ccproxy_api-0.2.0/ccproxy/http/__init__.py +30 -0
  102. ccproxy_api-0.2.0/ccproxy/http/base.py +95 -0
  103. ccproxy_api-0.2.0/ccproxy/http/client.py +323 -0
  104. ccproxy_api-0.2.0/ccproxy/http/hooks.py +642 -0
  105. ccproxy_api-0.2.0/ccproxy/http/pool.py +279 -0
  106. ccproxy_api-0.2.0/ccproxy/llms/formatters/__init__.py +7 -0
  107. ccproxy_api-0.2.0/ccproxy/llms/formatters/anthropic_to_openai/__init__.py +55 -0
  108. ccproxy_api-0.2.0/ccproxy/llms/formatters/anthropic_to_openai/errors.py +65 -0
  109. ccproxy_api-0.2.0/ccproxy/llms/formatters/anthropic_to_openai/requests.py +356 -0
  110. ccproxy_api-0.2.0/ccproxy/llms/formatters/anthropic_to_openai/responses.py +153 -0
  111. ccproxy_api-0.2.0/ccproxy/llms/formatters/anthropic_to_openai/streams.py +1546 -0
  112. ccproxy_api-0.2.0/ccproxy/llms/formatters/base.py +140 -0
  113. ccproxy_api-0.2.0/ccproxy/llms/formatters/base_model.py +33 -0
  114. ccproxy_api-0.2.0/ccproxy/llms/formatters/common/__init__.py +51 -0
  115. ccproxy_api-0.2.0/ccproxy/llms/formatters/common/identifiers.py +48 -0
  116. ccproxy_api-0.2.0/ccproxy/llms/formatters/common/streams.py +254 -0
  117. ccproxy_api-0.2.0/ccproxy/llms/formatters/common/thinking.py +74 -0
  118. ccproxy_api-0.2.0/ccproxy/llms/formatters/common/usage.py +135 -0
  119. ccproxy_api-0.2.0/ccproxy/llms/formatters/constants.py +55 -0
  120. ccproxy_api-0.2.0/ccproxy/llms/formatters/context.py +116 -0
  121. ccproxy_api-0.2.0/ccproxy/llms/formatters/mapping.py +33 -0
  122. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/__init__.py +55 -0
  123. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/_helpers.py +141 -0
  124. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/errors.py +53 -0
  125. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/requests.py +674 -0
  126. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/responses.py +285 -0
  127. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_anthropic/streams.py +530 -0
  128. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/__init__.py +53 -0
  129. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/_helpers.py +325 -0
  130. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/errors.py +6 -0
  131. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/requests.py +388 -0
  132. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/responses.py +594 -0
  133. ccproxy_api-0.2.0/ccproxy/llms/formatters/openai_to_openai/streams.py +1832 -0
  134. ccproxy_api-0.2.0/ccproxy/llms/formatters/utils.py +306 -0
  135. ccproxy_api-0.2.0/ccproxy/llms/models/__init__.py +9 -0
  136. ccproxy_api-0.2.0/ccproxy/llms/models/anthropic.py +619 -0
  137. ccproxy_api-0.2.0/ccproxy/llms/models/openai.py +844 -0
  138. ccproxy_api-0.2.0/ccproxy/llms/streaming/__init__.py +26 -0
  139. ccproxy_api-0.2.0/ccproxy/llms/streaming/accumulators.py +1074 -0
  140. ccproxy_api-0.2.0/ccproxy/llms/streaming/formatters.py +251 -0
  141. ccproxy_api-0.1.7/ccproxy/adapters/openai/streaming.py → ccproxy_api-0.2.0/ccproxy/llms/streaming/processors.py +193 -240
  142. ccproxy_api-0.2.0/ccproxy/models/__init__.py +13 -0
  143. ccproxy_api-0.2.0/ccproxy/models/detection.py +107 -0
  144. ccproxy_api-0.2.0/ccproxy/models/provider.py +75 -0
  145. ccproxy_api-0.2.0/ccproxy/plugins/access_log/README.md +32 -0
  146. ccproxy_api-0.2.0/ccproxy/plugins/access_log/__init__.py +20 -0
  147. ccproxy_api-0.2.0/ccproxy/plugins/access_log/config.py +33 -0
  148. ccproxy_api-0.2.0/ccproxy/plugins/access_log/formatter.py +126 -0
  149. ccproxy_api-0.2.0/ccproxy/plugins/access_log/hook.py +763 -0
  150. ccproxy_api-0.2.0/ccproxy/plugins/access_log/logger.py +254 -0
  151. ccproxy_api-0.2.0/ccproxy/plugins/access_log/plugin.py +137 -0
  152. ccproxy_api-0.2.0/ccproxy/plugins/access_log/writer.py +109 -0
  153. ccproxy_api-0.2.0/ccproxy/plugins/analytics/README.md +24 -0
  154. ccproxy_api-0.2.0/ccproxy/plugins/analytics/__init__.py +1 -0
  155. ccproxy_api-0.2.0/ccproxy/plugins/analytics/config.py +5 -0
  156. ccproxy_api-0.2.0/ccproxy/plugins/analytics/ingest.py +85 -0
  157. ccproxy_api-0.2.0/ccproxy/plugins/analytics/models.py +97 -0
  158. ccproxy_api-0.2.0/ccproxy/plugins/analytics/plugin.py +121 -0
  159. ccproxy_api-0.2.0/ccproxy/plugins/analytics/routes.py +163 -0
  160. ccproxy_api-0.2.0/ccproxy/plugins/analytics/service.py +284 -0
  161. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/README.md +29 -0
  162. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/__init__.py +10 -0
  163. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/adapter.py +829 -0
  164. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/config.py +52 -0
  165. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/detection_service.py +461 -0
  166. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/health.py +175 -0
  167. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/hooks.py +284 -0
  168. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/models.py +256 -0
  169. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/plugin.py +298 -0
  170. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/routes.py +118 -0
  171. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/streaming_metrics.py +68 -0
  172. ccproxy_api-0.2.0/ccproxy/plugins/claude_api/tasks.py +84 -0
  173. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/README.md +35 -0
  174. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/__init__.py +80 -0
  175. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/adapter.py +749 -0
  176. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/auth.py +57 -0
  177. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/client.py +63 -39
  178. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/config.py +210 -0
  179. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/converter.py +6 -6
  180. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/detection_service.py +163 -0
  181. ccproxy_api-0.1.7/ccproxy/services/claude_sdk_service.py → ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/handler.py +123 -304
  182. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/health.py +113 -0
  183. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/hooks.py +115 -0
  184. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/manager.py +42 -32
  185. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/message_queue.py +8 -8
  186. ccproxy_api-0.1.7/ccproxy/models/claude_sdk.py → ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/models.py +64 -16
  187. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/options.py +154 -0
  188. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/parser.py +23 -5
  189. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/plugin.py +269 -0
  190. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/routes.py +104 -0
  191. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/session_client.py +124 -12
  192. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/session_pool.py +700 -0
  193. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/stream_handle.py +48 -43
  194. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/stream_worker.py +22 -18
  195. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/streaming.py +50 -16
  196. ccproxy_api-0.2.0/ccproxy/plugins/claude_sdk/tasks.py +97 -0
  197. ccproxy_api-0.2.0/ccproxy/plugins/claude_shared/README.md +18 -0
  198. ccproxy_api-0.2.0/ccproxy/plugins/claude_shared/__init__.py +12 -0
  199. ccproxy_api-0.2.0/ccproxy/plugins/claude_shared/model_defaults.py +171 -0
  200. ccproxy_api-0.2.0/ccproxy/plugins/codex/README.md +35 -0
  201. ccproxy_api-0.2.0/ccproxy/plugins/codex/__init__.py +6 -0
  202. ccproxy_api-0.2.0/ccproxy/plugins/codex/adapter.py +635 -0
  203. ccproxy_api-0.1.7/ccproxy/config/codex.py → ccproxy_api-0.2.0/ccproxy/plugins/codex/config.py +78 -12
  204. ccproxy_api-0.2.0/ccproxy/plugins/codex/detection_service.py +544 -0
  205. ccproxy_api-0.2.0/ccproxy/plugins/codex/health.py +162 -0
  206. ccproxy_api-0.2.0/ccproxy/plugins/codex/hooks.py +263 -0
  207. ccproxy_api-0.2.0/ccproxy/plugins/codex/model_defaults.py +39 -0
  208. ccproxy_api-0.2.0/ccproxy/plugins/codex/models.py +263 -0
  209. ccproxy_api-0.2.0/ccproxy/plugins/codex/plugin.py +275 -0
  210. ccproxy_api-0.2.0/ccproxy/plugins/codex/routes.py +129 -0
  211. ccproxy_api-0.2.0/ccproxy/plugins/codex/streaming_metrics.py +324 -0
  212. ccproxy_api-0.2.0/ccproxy/plugins/codex/tasks.py +106 -0
  213. ccproxy_api-0.2.0/ccproxy/plugins/codex/utils/__init__.py +1 -0
  214. ccproxy_api-0.2.0/ccproxy/plugins/codex/utils/sse_parser.py +106 -0
  215. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/README.md +34 -0
  216. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/__init__.py +17 -0
  217. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/config.py +133 -0
  218. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/formatter.py +432 -0
  219. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/hook.py +294 -0
  220. ccproxy_api-0.2.0/ccproxy/plugins/command_replay/plugin.py +161 -0
  221. ccproxy_api-0.2.0/ccproxy/plugins/copilot/README.md +39 -0
  222. ccproxy_api-0.2.0/ccproxy/plugins/copilot/__init__.py +11 -0
  223. ccproxy_api-0.2.0/ccproxy/plugins/copilot/adapter.py +465 -0
  224. ccproxy_api-0.2.0/ccproxy/plugins/copilot/config.py +155 -0
  225. ccproxy_api-0.2.0/ccproxy/plugins/copilot/data/copilot_fallback.json +41 -0
  226. ccproxy_api-0.2.0/ccproxy/plugins/copilot/detection_service.py +255 -0
  227. ccproxy_api-0.2.0/ccproxy/plugins/copilot/manager.py +275 -0
  228. ccproxy_api-0.2.0/ccproxy/plugins/copilot/model_defaults.py +284 -0
  229. ccproxy_api-0.2.0/ccproxy/plugins/copilot/models.py +148 -0
  230. ccproxy_api-0.2.0/ccproxy/plugins/copilot/oauth/__init__.py +16 -0
  231. ccproxy_api-0.2.0/ccproxy/plugins/copilot/oauth/client.py +494 -0
  232. ccproxy_api-0.2.0/ccproxy/plugins/copilot/oauth/models.py +385 -0
  233. ccproxy_api-0.2.0/ccproxy/plugins/copilot/oauth/provider.py +602 -0
  234. ccproxy_api-0.2.0/ccproxy/plugins/copilot/oauth/storage.py +170 -0
  235. ccproxy_api-0.2.0/ccproxy/plugins/copilot/plugin.py +360 -0
  236. ccproxy_api-0.2.0/ccproxy/plugins/copilot/routes.py +294 -0
  237. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/README.md +124 -0
  238. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/__init__.py +6 -0
  239. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/config.py +270 -0
  240. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/factory.py +415 -0
  241. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/hook.py +51 -0
  242. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/manager.py +587 -0
  243. ccproxy_api-0.2.0/ccproxy/plugins/credential_balancer/plugin.py +146 -0
  244. ccproxy_api-0.2.0/ccproxy/plugins/dashboard/README.md +25 -0
  245. ccproxy_api-0.2.0/ccproxy/plugins/dashboard/__init__.py +1 -0
  246. ccproxy_api-0.2.0/ccproxy/plugins/dashboard/config.py +8 -0
  247. ccproxy_api-0.2.0/ccproxy/plugins/dashboard/plugin.py +71 -0
  248. ccproxy_api-0.2.0/ccproxy/plugins/dashboard/routes.py +67 -0
  249. ccproxy_api-0.2.0/ccproxy/plugins/docker/README.md +32 -0
  250. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/__init__.py +3 -0
  251. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/adapter.py +108 -10
  252. ccproxy_api-0.2.0/ccproxy/plugins/docker/config.py +82 -0
  253. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/docker_path.py +4 -3
  254. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/middleware.py +2 -2
  255. ccproxy_api-0.2.0/ccproxy/plugins/docker/plugin.py +198 -0
  256. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/stream_process.py +3 -3
  257. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/README.md +26 -0
  258. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/__init__.py +1 -0
  259. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/config.py +22 -0
  260. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/plugin.py +128 -0
  261. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/routes.py +51 -0
  262. ccproxy_api-0.2.0/ccproxy/plugins/duckdb_storage/storage.py +633 -0
  263. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/README.md +38 -0
  264. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/__init__.py +12 -0
  265. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/adapter.py +235 -0
  266. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/config.py +86 -0
  267. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/models.py +53 -0
  268. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/plugin.py +200 -0
  269. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/service.py +271 -0
  270. ccproxy_api-0.2.0/ccproxy/plugins/max_tokens/token_limits.json +54 -0
  271. ccproxy_api-0.2.0/ccproxy/plugins/metrics/README.md +35 -0
  272. ccproxy_api-0.2.0/ccproxy/plugins/metrics/__init__.py +10 -0
  273. ccproxy_api-0.1.7/ccproxy/observability/metrics.py → ccproxy_api-0.2.0/ccproxy/plugins/metrics/collector.py +20 -153
  274. ccproxy_api-0.2.0/ccproxy/plugins/metrics/config.py +85 -0
  275. ccproxy_api-0.2.0/ccproxy/plugins/metrics/hook.py +403 -0
  276. ccproxy_api-0.2.0/ccproxy/plugins/metrics/plugin.py +268 -0
  277. {ccproxy_api-0.1.7/ccproxy/observability → ccproxy_api-0.2.0/ccproxy/plugins/metrics}/pushgateway.py +57 -59
  278. ccproxy_api-0.2.0/ccproxy/plugins/metrics/routes.py +107 -0
  279. ccproxy_api-0.2.0/ccproxy/plugins/metrics/tasks.py +117 -0
  280. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/README.md +35 -0
  281. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/__init__.py +14 -0
  282. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/client.py +270 -0
  283. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/config.py +84 -0
  284. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/manager.py +482 -0
  285. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/models.py +266 -0
  286. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/plugin.py +149 -0
  287. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/provider.py +571 -0
  288. ccproxy_api-0.2.0/ccproxy/plugins/oauth_claude/storage.py +212 -0
  289. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/README.md +38 -0
  290. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/__init__.py +14 -0
  291. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/client.py +224 -0
  292. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/config.py +95 -0
  293. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/manager.py +256 -0
  294. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/models.py +239 -0
  295. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/plugin.py +146 -0
  296. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/provider.py +574 -0
  297. ccproxy_api-0.2.0/ccproxy/plugins/oauth_codex/storage.py +92 -0
  298. ccproxy_api-0.2.0/ccproxy/plugins/permissions/README.md +28 -0
  299. ccproxy_api-0.2.0/ccproxy/plugins/permissions/__init__.py +22 -0
  300. ccproxy_api-0.2.0/ccproxy/plugins/permissions/config.py +28 -0
  301. ccproxy_api-0.1.7/ccproxy/cli/commands/permission_handler.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/handlers/cli.py +49 -25
  302. ccproxy_api-0.2.0/ccproxy/plugins/permissions/handlers/protocol.py +33 -0
  303. ccproxy_api-0.2.0/ccproxy/plugins/permissions/handlers/terminal.py +675 -0
  304. {ccproxy_api-0.1.7/ccproxy/api/routes → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/mcp.py +34 -7
  305. ccproxy_api-0.1.7/ccproxy/models/permissions.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/models.py +65 -1
  306. ccproxy_api-0.2.0/ccproxy/plugins/permissions/plugin.py +153 -0
  307. ccproxy_api-0.1.7/ccproxy/api/routes/permissions.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/routes.py +20 -16
  308. ccproxy_api-0.1.7/ccproxy/api/services/permission_service.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/service.py +65 -11
  309. {ccproxy_api-0.1.7/ccproxy/api → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/ui/permission_handler_protocol.py +1 -1
  310. {ccproxy_api-0.1.7/ccproxy/api → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/ui/terminal_permission_handler.py +66 -10
  311. ccproxy_api-0.2.0/ccproxy/plugins/pricing/README.md +34 -0
  312. ccproxy_api-0.2.0/ccproxy/plugins/pricing/__init__.py +6 -0
  313. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/pricing/cache.py +7 -6
  314. ccproxy_api-0.1.7/ccproxy/config/pricing.py → ccproxy_api-0.2.0/ccproxy/plugins/pricing/config.py +32 -6
  315. ccproxy_api-0.2.0/ccproxy/plugins/pricing/exceptions.py +35 -0
  316. ccproxy_api-0.2.0/ccproxy/plugins/pricing/loader.py +440 -0
  317. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/pricing/models.py +13 -23
  318. ccproxy_api-0.2.0/ccproxy/plugins/pricing/plugin.py +169 -0
  319. ccproxy_api-0.2.0/ccproxy/plugins/pricing/service.py +191 -0
  320. ccproxy_api-0.2.0/ccproxy/plugins/pricing/tasks.py +300 -0
  321. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/pricing/updater.py +86 -72
  322. ccproxy_api-0.2.0/ccproxy/plugins/pricing/utils.py +99 -0
  323. ccproxy_api-0.2.0/ccproxy/plugins/request_tracer/README.md +40 -0
  324. ccproxy_api-0.2.0/ccproxy/plugins/request_tracer/__init__.py +7 -0
  325. ccproxy_api-0.2.0/ccproxy/plugins/request_tracer/config.py +120 -0
  326. ccproxy_api-0.2.0/ccproxy/plugins/request_tracer/hook.py +415 -0
  327. ccproxy_api-0.2.0/ccproxy/plugins/request_tracer/plugin.py +255 -0
  328. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/scheduler/__init__.py +2 -14
  329. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/scheduler/core.py +26 -41
  330. ccproxy_api-0.2.0/ccproxy/scheduler/manager.py +195 -0
  331. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/scheduler/registry.py +6 -32
  332. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/scheduler/tasks.py +268 -276
  333. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/services/__init__.py +0 -1
  334. ccproxy_api-0.2.0/ccproxy/services/adapters/__init__.py +11 -0
  335. ccproxy_api-0.2.0/ccproxy/services/adapters/base.py +123 -0
  336. ccproxy_api-0.2.0/ccproxy/services/adapters/chain_composer.py +88 -0
  337. ccproxy_api-0.2.0/ccproxy/services/adapters/chain_validation.py +44 -0
  338. ccproxy_api-0.2.0/ccproxy/services/adapters/chat_accumulator.py +200 -0
  339. ccproxy_api-0.2.0/ccproxy/services/adapters/delta_utils.py +142 -0
  340. ccproxy_api-0.2.0/ccproxy/services/adapters/format_adapter.py +136 -0
  341. ccproxy_api-0.2.0/ccproxy/services/adapters/format_context.py +11 -0
  342. ccproxy_api-0.2.0/ccproxy/services/adapters/format_registry.py +158 -0
  343. ccproxy_api-0.2.0/ccproxy/services/adapters/http_adapter.py +1045 -0
  344. ccproxy_api-0.2.0/ccproxy/services/adapters/mock_adapter.py +118 -0
  345. ccproxy_api-0.2.0/ccproxy/services/adapters/protocols.py +35 -0
  346. ccproxy_api-0.2.0/ccproxy/services/adapters/simple_converters.py +571 -0
  347. ccproxy_api-0.2.0/ccproxy/services/auth_registry.py +180 -0
  348. ccproxy_api-0.2.0/ccproxy/services/cache/__init__.py +6 -0
  349. ccproxy_api-0.2.0/ccproxy/services/cache/response_cache.py +261 -0
  350. ccproxy_api-0.2.0/ccproxy/services/cli_detection.py +437 -0
  351. ccproxy_api-0.2.0/ccproxy/services/config/__init__.py +6 -0
  352. ccproxy_api-0.2.0/ccproxy/services/config/proxy_configuration.py +111 -0
  353. ccproxy_api-0.2.0/ccproxy/services/container.py +256 -0
  354. ccproxy_api-0.2.0/ccproxy/services/factories.py +380 -0
  355. ccproxy_api-0.2.0/ccproxy/services/handler_config.py +76 -0
  356. ccproxy_api-0.2.0/ccproxy/services/interfaces.py +298 -0
  357. ccproxy_api-0.2.0/ccproxy/services/mocking/__init__.py +6 -0
  358. ccproxy_api-0.2.0/ccproxy/services/mocking/mock_handler.py +291 -0
  359. ccproxy_api-0.2.0/ccproxy/services/tracing/__init__.py +7 -0
  360. ccproxy_api-0.2.0/ccproxy/services/tracing/interfaces.py +61 -0
  361. ccproxy_api-0.2.0/ccproxy/services/tracing/null_tracer.py +57 -0
  362. ccproxy_api-0.2.0/ccproxy/streaming/__init__.py +23 -0
  363. ccproxy_api-0.2.0/ccproxy/streaming/buffer.py +1056 -0
  364. ccproxy_api-0.2.0/ccproxy/streaming/deferred.py +897 -0
  365. ccproxy_api-0.2.0/ccproxy/streaming/handler.py +117 -0
  366. ccproxy_api-0.2.0/ccproxy/streaming/interfaces.py +77 -0
  367. ccproxy_api-0.2.0/ccproxy/streaming/simple_adapter.py +39 -0
  368. ccproxy_api-0.2.0/ccproxy/streaming/sse.py +109 -0
  369. ccproxy_api-0.2.0/ccproxy/streaming/sse_parser.py +127 -0
  370. ccproxy_api-0.2.0/ccproxy/templates/__init__.py +6 -0
  371. ccproxy_api-0.2.0/ccproxy/templates/plugin_scaffold.py +695 -0
  372. ccproxy_api-0.2.0/ccproxy/testing/endpoints/__init__.py +33 -0
  373. ccproxy_api-0.2.0/ccproxy/testing/endpoints/cli.py +215 -0
  374. ccproxy_api-0.2.0/ccproxy/testing/endpoints/config.py +874 -0
  375. ccproxy_api-0.2.0/ccproxy/testing/endpoints/console.py +57 -0
  376. ccproxy_api-0.2.0/ccproxy/testing/endpoints/models.py +100 -0
  377. ccproxy_api-0.2.0/ccproxy/testing/endpoints/runner.py +1903 -0
  378. ccproxy_api-0.2.0/ccproxy/testing/endpoints/tools.py +308 -0
  379. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/mock_responses.py +70 -1
  380. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/response_handlers.py +20 -0
  381. ccproxy_api-0.2.0/ccproxy/utils/__init__.py +8 -0
  382. ccproxy_api-0.2.0/ccproxy/utils/binary_resolver.py +476 -0
  383. ccproxy_api-0.2.0/ccproxy/utils/caching.py +327 -0
  384. ccproxy_api-0.2.0/ccproxy/utils/cli_logging.py +101 -0
  385. ccproxy_api-0.2.0/ccproxy/utils/command_line.py +251 -0
  386. ccproxy_api-0.2.0/ccproxy/utils/headers.py +228 -0
  387. ccproxy_api-0.2.0/ccproxy/utils/model_mapper.py +120 -0
  388. ccproxy_api-0.2.0/ccproxy/utils/startup_helpers.py +223 -0
  389. ccproxy_api-0.2.0/ccproxy/utils/version_checker.py +457 -0
  390. ccproxy_api-0.2.0/pyproject.toml +422 -0
  391. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/tests/factories/README.md +3 -2
  392. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/tests/fixtures/README.md +8 -9
  393. ccproxy_api-0.1.7/.env.example +0 -31
  394. ccproxy_api-0.1.7/.github/workflows/backend.yml +0 -117
  395. ccproxy_api-0.1.7/.github/workflows/build.yml +0 -72
  396. ccproxy_api-0.1.7/.github/workflows/ci.yml +0 -44
  397. ccproxy_api-0.1.7/.github/workflows/docs.yml +0 -115
  398. ccproxy_api-0.1.7/.github/workflows/frontend.yml.disabled +0 -122
  399. ccproxy_api-0.1.7/.github/workflows/release.yml +0 -151
  400. ccproxy_api-0.1.7/.pre-commit-config.yaml +0 -132
  401. ccproxy_api-0.1.7/.python-version +0 -1
  402. ccproxy_api-0.1.7/CHANGELOG.md +0 -621
  403. ccproxy_api-0.1.7/CONTRIBUTING.md +0 -402
  404. ccproxy_api-0.1.7/CONVENTIONS.md +0 -259
  405. ccproxy_api-0.1.7/Dockerfile +0 -99
  406. ccproxy_api-0.1.7/Makefile +0 -252
  407. ccproxy_api-0.1.7/PKG-INFO +0 -615
  408. ccproxy_api-0.1.7/README.md +0 -582
  409. ccproxy_api-0.1.7/TESTING.md +0 -578
  410. ccproxy_api-0.1.7/ccproxy/__init__.py +0 -4
  411. ccproxy_api-0.1.7/ccproxy/adapters/__init__.py +0 -11
  412. ccproxy_api-0.1.7/ccproxy/adapters/base.py +0 -80
  413. ccproxy_api-0.1.7/ccproxy/adapters/codex/__init__.py +0 -11
  414. ccproxy_api-0.1.7/ccproxy/adapters/openai/__init__.py +0 -42
  415. ccproxy_api-0.1.7/ccproxy/adapters/openai/adapter.py +0 -953
  416. ccproxy_api-0.1.7/ccproxy/adapters/openai/models.py +0 -412
  417. ccproxy_api-0.1.7/ccproxy/adapters/openai/response_adapter.py +0 -355
  418. ccproxy_api-0.1.7/ccproxy/adapters/openai/response_models.py +0 -178
  419. ccproxy_api-0.1.7/ccproxy/api/__init__.py +0 -25
  420. ccproxy_api-0.1.7/ccproxy/api/app.py +0 -366
  421. ccproxy_api-0.1.7/ccproxy/api/dependencies.py +0 -215
  422. ccproxy_api-0.1.7/ccproxy/api/middleware/auth.py +0 -0
  423. ccproxy_api-0.1.7/ccproxy/api/middleware/errors.py +0 -731
  424. ccproxy_api-0.1.7/ccproxy/api/middleware/headers.py +0 -49
  425. ccproxy_api-0.1.7/ccproxy/api/middleware/logging.py +0 -180
  426. ccproxy_api-0.1.7/ccproxy/api/middleware/request_content_logging.py +0 -297
  427. ccproxy_api-0.1.7/ccproxy/api/middleware/server_header.py +0 -58
  428. ccproxy_api-0.1.7/ccproxy/api/responses.py +0 -89
  429. ccproxy_api-0.1.7/ccproxy/api/routes/__init__.py +0 -24
  430. ccproxy_api-0.1.7/ccproxy/api/routes/claude.py +0 -371
  431. ccproxy_api-0.1.7/ccproxy/api/routes/codex.py +0 -1251
  432. ccproxy_api-0.1.7/ccproxy/api/routes/health.py +0 -768
  433. ccproxy_api-0.1.7/ccproxy/api/routes/metrics.py +0 -1029
  434. ccproxy_api-0.1.7/ccproxy/api/routes/proxy.py +0 -211
  435. ccproxy_api-0.1.7/ccproxy/api/services/__init__.py +0 -6
  436. ccproxy_api-0.1.7/ccproxy/auth/conditional.py +0 -84
  437. ccproxy_api-0.1.7/ccproxy/auth/credentials_adapter.py +0 -93
  438. ccproxy_api-0.1.7/ccproxy/auth/dependencies.py +0 -229
  439. ccproxy_api-0.1.7/ccproxy/auth/manager.py +0 -102
  440. ccproxy_api-0.1.7/ccproxy/auth/models.py +0 -118
  441. ccproxy_api-0.1.7/ccproxy/auth/oauth/__init__.py +0 -26
  442. ccproxy_api-0.1.7/ccproxy/auth/oauth/models.py +0 -48
  443. ccproxy_api-0.1.7/ccproxy/auth/oauth/storage.py +0 -0
  444. ccproxy_api-0.1.7/ccproxy/auth/openai/__init__.py +0 -13
  445. ccproxy_api-0.1.7/ccproxy/auth/openai/credentials.py +0 -166
  446. ccproxy_api-0.1.7/ccproxy/auth/openai/oauth_client.py +0 -334
  447. ccproxy_api-0.1.7/ccproxy/auth/openai/storage.py +0 -184
  448. ccproxy_api-0.1.7/ccproxy/auth/storage/__init__.py +0 -12
  449. ccproxy_api-0.1.7/ccproxy/auth/storage/base.py +0 -57
  450. ccproxy_api-0.1.7/ccproxy/auth/storage/json_file.py +0 -158
  451. ccproxy_api-0.1.7/ccproxy/auth/storage/keyring.py +0 -189
  452. ccproxy_api-0.1.7/ccproxy/claude_sdk/__init__.py +0 -18
  453. ccproxy_api-0.1.7/ccproxy/claude_sdk/options.py +0 -194
  454. ccproxy_api-0.1.7/ccproxy/claude_sdk/session_pool.py +0 -550
  455. ccproxy_api-0.1.7/ccproxy/cli/commands/auth.py +0 -964
  456. ccproxy_api-0.1.7/ccproxy/cli/commands/serve.py +0 -986
  457. ccproxy_api-0.1.7/ccproxy/cli/docker/__init__.py +0 -34
  458. ccproxy_api-0.1.7/ccproxy/cli/docker/adapter_factory.py +0 -157
  459. ccproxy_api-0.1.7/ccproxy/cli/docker/params.py +0 -274
  460. ccproxy_api-0.1.7/ccproxy/cli/main.py +0 -104
  461. ccproxy_api-0.1.7/ccproxy/config/auth.py +0 -153
  462. ccproxy_api-0.1.7/ccproxy/config/claude.py +0 -348
  463. ccproxy_api-0.1.7/ccproxy/config/cors.py +0 -79
  464. ccproxy_api-0.1.7/ccproxy/config/discovery.py +0 -95
  465. ccproxy_api-0.1.7/ccproxy/config/docker_settings.py +0 -264
  466. ccproxy_api-0.1.7/ccproxy/config/observability.py +0 -158
  467. ccproxy_api-0.1.7/ccproxy/config/reverse_proxy.py +0 -31
  468. ccproxy_api-0.1.7/ccproxy/config/scheduler.py +0 -108
  469. ccproxy_api-0.1.7/ccproxy/config/security.py +0 -19
  470. ccproxy_api-0.1.7/ccproxy/config/server.py +0 -86
  471. ccproxy_api-0.1.7/ccproxy/config/settings.py +0 -577
  472. ccproxy_api-0.1.7/ccproxy/config/validators.py +0 -231
  473. ccproxy_api-0.1.7/ccproxy/core/__init__.py +0 -274
  474. ccproxy_api-0.1.7/ccproxy/core/codex_transformers.py +0 -389
  475. ccproxy_api-0.1.7/ccproxy/core/constants.py +0 -97
  476. ccproxy_api-0.1.7/ccproxy/core/http.py +0 -328
  477. ccproxy_api-0.1.7/ccproxy/core/http_transformers.py +0 -812
  478. ccproxy_api-0.1.7/ccproxy/core/interfaces.py +0 -247
  479. ccproxy_api-0.1.7/ccproxy/core/logging.py +0 -287
  480. ccproxy_api-0.1.7/ccproxy/core/proxy.py +0 -143
  481. ccproxy_api-0.1.7/ccproxy/core/validators.py +0 -288
  482. ccproxy_api-0.1.7/ccproxy/data/claude_headers_fallback.json +0 -37
  483. ccproxy_api-0.1.7/ccproxy/data/codex_headers_fallback.json +0 -14
  484. ccproxy_api-0.1.7/ccproxy/models/__init__.py +0 -164
  485. ccproxy_api-0.1.7/ccproxy/models/detection.py +0 -208
  486. ccproxy_api-0.1.7/ccproxy/models/errors.py +0 -42
  487. ccproxy_api-0.1.7/ccproxy/models/messages.py +0 -269
  488. ccproxy_api-0.1.7/ccproxy/models/requests.py +0 -107
  489. ccproxy_api-0.1.7/ccproxy/models/responses.py +0 -270
  490. ccproxy_api-0.1.7/ccproxy/models/types.py +0 -102
  491. ccproxy_api-0.1.7/ccproxy/observability/__init__.py +0 -51
  492. ccproxy_api-0.1.7/ccproxy/observability/access_logger.py +0 -457
  493. ccproxy_api-0.1.7/ccproxy/observability/sse_events.py +0 -303
  494. ccproxy_api-0.1.7/ccproxy/observability/stats_printer.py +0 -753
  495. ccproxy_api-0.1.7/ccproxy/observability/storage/__init__.py +0 -1
  496. ccproxy_api-0.1.7/ccproxy/observability/storage/duckdb_simple.py +0 -677
  497. ccproxy_api-0.1.7/ccproxy/observability/storage/models.py +0 -70
  498. ccproxy_api-0.1.7/ccproxy/observability/streaming_response.py +0 -107
  499. ccproxy_api-0.1.7/ccproxy/pricing/__init__.py +0 -19
  500. ccproxy_api-0.1.7/ccproxy/pricing/loader.py +0 -251
  501. ccproxy_api-0.1.7/ccproxy/scheduler/manager.py +0 -239
  502. ccproxy_api-0.1.7/ccproxy/services/claude_detection_service.py +0 -243
  503. ccproxy_api-0.1.7/ccproxy/services/codex_detection_service.py +0 -252
  504. ccproxy_api-0.1.7/ccproxy/services/credentials/__init__.py +0 -55
  505. ccproxy_api-0.1.7/ccproxy/services/credentials/config.py +0 -105
  506. ccproxy_api-0.1.7/ccproxy/services/credentials/manager.py +0 -561
  507. ccproxy_api-0.1.7/ccproxy/services/credentials/oauth_client.py +0 -481
  508. ccproxy_api-0.1.7/ccproxy/services/proxy_service.py +0 -1827
  509. ccproxy_api-0.1.7/ccproxy/static/.keep +0 -0
  510. ccproxy_api-0.1.7/ccproxy/utils/__init__.py +0 -14
  511. ccproxy_api-0.1.7/ccproxy/utils/cost_calculator.py +0 -210
  512. ccproxy_api-0.1.7/ccproxy/utils/disconnection_monitor.py +0 -83
  513. ccproxy_api-0.1.7/ccproxy/utils/model_mapping.py +0 -199
  514. ccproxy_api-0.1.7/ccproxy/utils/models_provider.py +0 -150
  515. ccproxy_api-0.1.7/ccproxy/utils/simple_request_logger.py +0 -284
  516. ccproxy_api-0.1.7/ccproxy/utils/startup_helpers.py +0 -601
  517. ccproxy_api-0.1.7/ccproxy/utils/streaming_metrics.py +0 -199
  518. ccproxy_api-0.1.7/ccproxy/utils/version_checker.py +0 -190
  519. ccproxy_api-0.1.7/data/metrics.db +0 -0
  520. ccproxy_api-0.1.7/devenv.lock +0 -103
  521. ccproxy_api-0.1.7/devenv.nix +0 -119
  522. ccproxy_api-0.1.7/docker-compose.monitoring.yml +0 -56
  523. ccproxy_api-0.1.7/docker-compose.yml +0 -22
  524. ccproxy_api-0.1.7/docs/README.md +0 -221
  525. ccproxy_api-0.1.7/docs/api-reference.md +0 -142
  526. ccproxy_api-0.1.7/docs/assets/extra.css +0 -0
  527. ccproxy_api-0.1.7/docs/assets/extra.js +0 -15
  528. ccproxy_api-0.1.7/docs/contributing.md +0 -1
  529. ccproxy_api-0.1.7/docs/development/debugging-with-proxy.md +0 -198
  530. ccproxy_api-0.1.7/docs/examples.md +0 -384
  531. ccproxy_api-0.1.7/docs/gen_ref_pages.py +0 -41
  532. ccproxy_api-0.1.7/docs/getting-started/configuration.md +0 -747
  533. ccproxy_api-0.1.7/docs/getting-started/installation.md +0 -169
  534. ccproxy_api-0.1.7/docs/getting-started/quickstart.md +0 -678
  535. ccproxy_api-0.1.7/docs/index.md +0 -337
  536. ccproxy_api-0.1.7/docs/metrics-api.md +0 -529
  537. ccproxy_api-0.1.7/docs/observability.md +0 -82
  538. ccproxy_api-0.1.7/docs/systemd-setup.md +0 -261
  539. ccproxy_api-0.1.7/docs/user-guide/api-usage.md +0 -103
  540. ccproxy_api-0.1.7/docs/user-guide/authentication.md +0 -295
  541. ccproxy_api-0.1.7/docs/user-guide/claude-code-options.md +0 -199
  542. ccproxy_api-0.1.7/docs/user-guide/claude-sdk-compatibility.md +0 -229
  543. ccproxy_api-0.1.7/docs/user-guide/codex-api.md +0 -549
  544. ccproxy_api-0.1.7/docs/user-guide/mcp-integration.md +0 -146
  545. ccproxy_api-0.1.7/docs/user-guide/pool-configuration.md +0 -162
  546. ccproxy_api-0.1.7/docs/user-guide/understanding-pool-logs.md +0 -166
  547. ccproxy_api-0.1.7/examples/README_chat_agent.md +0 -79
  548. ccproxy_api-0.1.7/examples/ai_code_discussion_demo.py +0 -1458
  549. ccproxy_api-0.1.7/examples/anthropic_streaming_demo.py +0 -263
  550. ccproxy_api-0.1.7/examples/anthropic_tools_demo.py +0 -188
  551. ccproxy_api-0.1.7/examples/client.py +0 -311
  552. ccproxy_api-0.1.7/examples/common_utils.py +0 -263
  553. ccproxy_api-0.1.7/examples/console_utils.py +0 -359
  554. ccproxy_api-0.1.7/examples/debug_anthropic_streaming.py +0 -391
  555. ccproxy_api-0.1.7/examples/openai_anthropic_conversation_demo.py +0 -703
  556. ccproxy_api-0.1.7/examples/openai_claude_code_options_example.sh +0 -50
  557. ccproxy_api-0.1.7/examples/openai_json_object_example.sh +0 -46
  558. ccproxy_api-0.1.7/examples/openai_json_schema_example.sh +0 -61
  559. ccproxy_api-0.1.7/examples/openai_streaming_demo.py +0 -126
  560. ccproxy_api-0.1.7/examples/openai_structured_response_demo.py +0 -237
  561. ccproxy_api-0.1.7/examples/openai_thinking_demo.py +0 -225
  562. ccproxy_api-0.1.7/examples/openai_tools_demo.py +0 -211
  563. ccproxy_api-0.1.7/examples/project_code_access_demo.py +0 -587
  564. ccproxy_api-0.1.7/examples/simple_thinking_demo.py +0 -118
  565. ccproxy_api-0.1.7/examples/textual_chat_agent.py +0 -440
  566. ccproxy_api-0.1.7/mkdocs.yml +0 -217
  567. ccproxy_api-0.1.7/monitoring/grafana/provisioning/dashboards/dashboard.yml +0 -12
  568. ccproxy_api-0.1.7/monitoring/grafana/provisioning/datasources/victoria-metrics.yml +0 -18
  569. ccproxy_api-0.1.7/pyproject.toml +0 -352
  570. ccproxy_api-0.1.7/scripts/act-run.sh +0 -7
  571. ccproxy_api-0.1.7/scripts/build-docs.sh +0 -24
  572. ccproxy_api-0.1.7/scripts/entrypoint.sh +0 -183
  573. ccproxy_api-0.1.7/scripts/format_version.py +0 -50
  574. ccproxy_api-0.1.7/scripts/serve-docs.sh +0 -18
  575. ccproxy_api-0.1.7/scripts/setup-systemd.sh +0 -210
  576. ccproxy_api-0.1.7/scripts/setup.sh +0 -45
  577. ccproxy_api-0.1.7/scripts/traffic_generator.py +0 -674
  578. ccproxy_api-0.1.7/systemd/ccproxy.service.template +0 -20
  579. ccproxy_api-0.1.7/tests/.gitignore +0 -7
  580. ccproxy_api-0.1.7/tests/conftest.py +0 -1117
  581. ccproxy_api-0.1.7/tests/factories/__init__.py +0 -24
  582. ccproxy_api-0.1.7/tests/factories/fastapi_factory.py +0 -422
  583. ccproxy_api-0.1.7/tests/fixtures/auth/__init__.py +0 -51
  584. ccproxy_api-0.1.7/tests/fixtures/auth/example_usage.py +0 -287
  585. ccproxy_api-0.1.7/tests/fixtures/claude_sdk/__init__.py +0 -5
  586. ccproxy_api-0.1.7/tests/fixtures/claude_sdk/client_mocks.py +0 -146
  587. ccproxy_api-0.1.7/tests/fixtures/claude_sdk/internal_mocks.py +0 -255
  588. ccproxy_api-0.1.7/tests/fixtures/claude_sdk/responses.py +0 -95
  589. ccproxy_api-0.1.7/tests/fixtures/credentials.json +0 -9
  590. ccproxy_api-0.1.7/tests/fixtures/external_apis/__init__.py +0 -5
  591. ccproxy_api-0.1.7/tests/fixtures/external_apis/anthropic_api.py +0 -178
  592. ccproxy_api-0.1.7/tests/fixtures/external_apis/openai_codex_api.py +0 -153
  593. ccproxy_api-0.1.7/tests/fixtures/proxy_service/__init__.py +0 -5
  594. ccproxy_api-0.1.7/tests/fixtures/proxy_service/oauth_mocks.py +0 -91
  595. ccproxy_api-0.1.7/tests/fixtures/responses.json +0 -177
  596. ccproxy_api-0.1.7/tests/helpers/__init__.py +0 -1
  597. ccproxy_api-0.1.7/tests/helpers/assertions.py +0 -135
  598. ccproxy_api-0.1.7/tests/helpers/test_data.py +0 -234
  599. ccproxy_api-0.1.7/tests/integration/test_access_logger_integration.py +0 -476
  600. ccproxy_api-0.1.7/tests/integration/test_confirmation_integration.py +0 -361
  601. ccproxy_api-0.1.7/tests/integration/test_duckdb_settings_integration.py +0 -149
  602. ccproxy_api-0.1.7/tests/integration/test_streaming_access_logging.py +0 -488
  603. ccproxy_api-0.1.7/tests/test_cache_control_limiter.py +0 -321
  604. ccproxy_api-0.1.7/tests/unit/__init__.py +0 -0
  605. ccproxy_api-0.1.7/tests/unit/api/__init__.py +0 -0
  606. ccproxy_api-0.1.7/tests/unit/api/test_api.py +0 -551
  607. ccproxy_api-0.1.7/tests/unit/api/test_confirmation_routes.py +0 -514
  608. ccproxy_api-0.1.7/tests/unit/api/test_mcp_route.py +0 -346
  609. ccproxy_api-0.1.7/tests/unit/api/test_metrics_api.py +0 -485
  610. ccproxy_api-0.1.7/tests/unit/api/test_reset_endpoint.py +0 -301
  611. ccproxy_api-0.1.7/tests/unit/auth/__init__.py +0 -0
  612. ccproxy_api-0.1.7/tests/unit/auth/test_auth.py +0 -951
  613. ccproxy_api-0.1.7/tests/unit/cli/__init__.py +0 -0
  614. ccproxy_api-0.1.7/tests/unit/cli/test_cli_auth_commands.py +0 -569
  615. ccproxy_api-0.1.7/tests/unit/cli/test_cli_config.py +0 -382
  616. ccproxy_api-0.1.7/tests/unit/cli/test_cli_confirmation_handler.py +0 -527
  617. ccproxy_api-0.1.7/tests/unit/cli/test_cli_serve.py +0 -481
  618. ccproxy_api-0.1.7/tests/unit/config/__init__.py +0 -0
  619. ccproxy_api-0.1.7/tests/unit/config/test_claude_sdk_options.py +0 -208
  620. ccproxy_api-0.1.7/tests/unit/config/test_claude_sdk_parser.py +0 -417
  621. ccproxy_api-0.1.7/tests/unit/config/test_terminal_handler.py +0 -202
  622. ccproxy_api-0.1.7/tests/unit/observability/test_streaming_response.py +0 -274
  623. ccproxy_api-0.1.7/tests/unit/services/__init__.py +0 -0
  624. ccproxy_api-0.1.7/tests/unit/services/test_adapters.py +0 -1136
  625. ccproxy_api-0.1.7/tests/unit/services/test_claude_sdk_client.py +0 -491
  626. ccproxy_api-0.1.7/tests/unit/services/test_codex_proxy.py +0 -378
  627. ccproxy_api-0.1.7/tests/unit/services/test_confirmation_service.py +0 -409
  628. ccproxy_api-0.1.7/tests/unit/services/test_docker.py +0 -518
  629. ccproxy_api-0.1.7/tests/unit/services/test_fastapi_factory.py +0 -171
  630. ccproxy_api-0.1.7/tests/unit/services/test_http_transformers.py +0 -1384
  631. ccproxy_api-0.1.7/tests/unit/services/test_observability.py +0 -1204
  632. ccproxy_api-0.1.7/tests/unit/services/test_pricing.py +0 -877
  633. ccproxy_api-0.1.7/tests/unit/services/test_pushgateway_error_handling.py +0 -324
  634. ccproxy_api-0.1.7/tests/unit/services/test_queue_duckdb_storage.py +0 -459
  635. ccproxy_api-0.1.7/tests/unit/services/test_scheduler.py +0 -702
  636. ccproxy_api-0.1.7/tests/unit/services/test_scheduler_tasks.py +0 -812
  637. ccproxy_api-0.1.7/tests/unit/services/test_session_pool_race_condition.py +0 -208
  638. ccproxy_api-0.1.7/tests/unit/services/test_sse_events.py +0 -475
  639. ccproxy_api-0.1.7/tests/unit/services/test_sse_stream_filtering.py +0 -526
  640. ccproxy_api-0.1.7/tests/unit/services/test_stats_printer.py +0 -881
  641. ccproxy_api-0.1.7/tests/unit/services/test_streaming.py +0 -148
  642. ccproxy_api-0.1.7/tests/unit/utils/__init__.py +0 -0
  643. ccproxy_api-0.1.7/tests/unit/utils/test_duckdb_lifecycle.py +0 -266
  644. ccproxy_api-0.1.7/tests/unit/utils/test_startup_helpers.py +0 -917
  645. ccproxy_api-0.1.7/tests/unit/utils/test_version_checker.py +0 -345
  646. ccproxy_api-0.1.7/uv.lock +0 -3447
  647. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/LICENSE +0 -0
  648. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/__main__.py +0 -0
  649. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/api/middleware/__init__.py +0 -0
  650. {ccproxy_api-0.1.7/tests → ccproxy_api-0.2.0/ccproxy/auth/models}/__init__.py +0 -0
  651. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/commands/__init__.py +0 -0
  652. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/commands/config/__init__.py +0 -0
  653. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/commands/config/schema_commands.py +0 -0
  654. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/options/__init__.py +0 -0
  655. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/options/core_options.py +0 -0
  656. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/options/security_options.py +0 -0
  657. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/cli/options/server_options.py +0 -0
  658. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/middleware.py +0 -0
  659. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/system.py +0 -0
  660. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/core/types.py +0 -0
  661. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/exceptions.py +0 -0
  662. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/models.py +0 -0
  663. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/protocol.py +0 -0
  664. {ccproxy_api-0.1.7/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/validators.py +0 -0
  665. {ccproxy_api-0.1.7/monitoring → ccproxy_api-0.2.0/ccproxy/plugins/metrics}/grafana/dashboards/ccproxy-dashboard.json +0 -0
  666. {ccproxy_api-0.1.7/tests/integration → ccproxy_api-0.2.0/ccproxy/plugins/permissions/handlers}/__init__.py +0 -0
  667. {ccproxy_api-0.1.7/ccproxy/api → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/ui/__init__.py +0 -0
  668. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/scheduler/errors.py +0 -0
  669. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/__init__.py +0 -0
  670. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/config.py +0 -0
  671. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/content_generation.py +0 -0
  672. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/testing/scenarios.py +0 -0
  673. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/ccproxy/utils/id_generator.py +0 -0
  674. {ccproxy_api-0.1.7 → ccproxy_api-0.2.0}/examples/README.md +0 -0
@@ -163,3 +163,8 @@ ccproxy/static/dashboard/
163
163
 
164
164
  *.wal
165
165
  *.duckdb
166
+ .lazy.lua
167
+ .ccproxy.toml
168
+
169
+ make
170
+ run
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.4
2
+ Name: ccproxy-api
3
+ Version: 0.2.0
4
+ Summary: API server that provides an Anthropic and OpenAI compatible interface over Claude Code, allowing to use your Claude OAuth account or over the API.
5
+ License-File: LICENSE
6
+ Requires-Python: >=3.11
7
+ Requires-Dist: aiofiles>=24.1.0
8
+ Requires-Dist: fastapi[standard]>=0.115.14
9
+ Requires-Dist: httpx[http2]>=0.28.1
10
+ Requires-Dist: packaging>=25.0
11
+ Requires-Dist: pydantic-settings>=2.4.0
12
+ Requires-Dist: pydantic>=2.8.0
13
+ Requires-Dist: pyjwt>=2.10.1
14
+ Requires-Dist: rich-toolkit>=0.14.8
15
+ Requires-Dist: rich>=13.0.0
16
+ Requires-Dist: sortedcontainers>=2.4.0
17
+ Requires-Dist: structlog>=25.4.0
18
+ Requires-Dist: typer>=0.16.0
19
+ Requires-Dist: typing-extensions>=4.0.0
20
+ Requires-Dist: uvicorn>=0.34.0
21
+ Provides-Extra: plugins-claude
22
+ Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'plugins-claude'
23
+ Requires-Dist: qrcode>=8.2; extra == 'plugins-claude'
24
+ Provides-Extra: plugins-codex
25
+ Requires-Dist: pyjwt>=2.10.1; extra == 'plugins-codex'
26
+ Requires-Dist: qrcode>=8.2; extra == 'plugins-codex'
27
+ Provides-Extra: plugins-mcp
28
+ Requires-Dist: fastapi-mcp>=0.3.7; extra == 'plugins-mcp'
29
+ Provides-Extra: plugins-metrics
30
+ Requires-Dist: prometheus-client>=0.22.1; extra == 'plugins-metrics'
31
+ Provides-Extra: plugins-storage
32
+ Requires-Dist: duckdb-engine>=0.17.0; extra == 'plugins-storage'
33
+ Requires-Dist: duckdb<1.4.0,>=1.1.0; extra == 'plugins-storage'
34
+ Requires-Dist: sqlalchemy>=2.0.0; extra == 'plugins-storage'
35
+ Requires-Dist: sqlmodel>=0.0.24; extra == 'plugins-storage'
36
+ Provides-Extra: plugins-tui
37
+ Requires-Dist: aioconsole>=0.8.1; extra == 'plugins-tui'
38
+ Requires-Dist: textual>=3.7.1; extra == 'plugins-tui'
39
+ Description-Content-Type: text/markdown
40
+
41
+ # CCProxy API Server
42
+
43
+ CCProxy is a local, plugin-based reverse proxy that unifies access to
44
+ multiple AI providers (e.g., Claude SDK/API and OpenAI Codex) behind a
45
+ consistent API. It ships with bundled plugins for providers, logging,
46
+ tracing, metrics, analytics, and more.
47
+
48
+ ## Supported Providers
49
+
50
+ - Anthropic Claude API/SDK (OAuth2 flow or Claude CLI/SDK token files)
51
+ - OpenAI Codex (ChatGPT backend Responses API using OAuth for paid/pro accounts)
52
+ - GitHub Copilot (chat and completions for free, paid, or business accounts)
53
+
54
+ Each provider adapter exposes the same surface area: OpenAI Chat
55
+ Completions, OpenAI Responses, and Anthropic Messages. The proxy maintains a
56
+ shared model-mapping layer so you can reuse the same `model` identifier
57
+ across providers without rewriting client code.
58
+
59
+ Authentication can reuse existing provider files (e.g., Claude CLI SDK
60
+ tokens and the Codex CLI credential store), or you can run
61
+ `ccproxy auth login <provider>` to complete the OAuth flow from the CLI;
62
+ stored secrets are picked up automatically by the proxy.
63
+
64
+ ## Extensibility
65
+
66
+ CCProxy's plugin system lets you add instrumentation and storage layers
67
+ without patching the core server. Bundled plugins currently include:
68
+
69
+ - [`access_log`](ccproxy/plugins/access_log/README.md): structured access
70
+ logging for client and provider traffic
71
+ - [`analytics`](ccproxy/plugins/analytics/README.md): DuckDB-backed analytics
72
+ APIs for captured request logs
73
+ - [`claude_api`](ccproxy/plugins/claude_api/README.md): Anthropic Claude HTTP
74
+ API adapter with health and metrics
75
+ - [`claude_sdk`](ccproxy/plugins/claude_sdk/README.md): local Claude CLI/SDK
76
+ adapter with session pooling
77
+ - [`codex`](ccproxy/plugins/codex/README.md): OpenAI Codex provider adapter
78
+ with OAuth support
79
+ - [`command_replay`](ccproxy/plugins/command_replay/README.md): generates
80
+ `curl`/`xh` commands for captured requests
81
+ - [`copilot`](ccproxy/plugins/copilot/README.md): GitHub Copilot provider
82
+ adapter with OAuth token management
83
+ - [`credential_balancer`](ccproxy/plugins/credential_balancer/README.md):
84
+ rotates upstream credentials based on health
85
+ - [`dashboard`](ccproxy/plugins/dashboard/README.md): serves the CCProxy
86
+ dashboard SPA and APIs
87
+ - [`docker`](ccproxy/plugins/docker/README.md): runs providers inside Docker via
88
+ CLI extensions
89
+ - [`duckdb_storage`](ccproxy/plugins/duckdb_storage/README.md): exposes
90
+ DuckDB-backed storage for logs and analytics
91
+ - [`max_tokens`](ccproxy/plugins/max_tokens/README.md): normalizes
92
+ `max_tokens` fields to provider limits
93
+ - [`metrics`](ccproxy/plugins/metrics/README.md): Prometheus-compatible metrics
94
+ with optional Pushgateway
95
+ - [`oauth_claude`](ccproxy/plugins/oauth_claude/README.md): standalone OAuth
96
+ provider for Claude integrations
97
+ - [`oauth_codex`](ccproxy/plugins/oauth_codex/README.md): standalone OAuth
98
+ provider for Codex integrations
99
+ - [`permissions`](ccproxy/plugins/permissions/README.md): interactive approval
100
+ flow for privileged tool actions
101
+ - [`pricing`](ccproxy/plugins/pricing/README.md): caches model pricing data for
102
+ cost-aware features
103
+ - [`request_tracer`](ccproxy/plugins/request_tracer/README.md): detailed
104
+ request/response tracing for debugging
105
+
106
+ Shared helpers such as
107
+ [`claude_shared`](ccproxy/plugins/claude_shared/README.md) provide metadata
108
+ consumed by the Claude plugins. Each plugin directory contains its own README
109
+ with configuration examples.
110
+
111
+ ## Quick Links
112
+
113
+ - Docs site entry: `docs/index.md`
114
+ - Getting started: `docs/getting-started/quickstart.md`
115
+ - Configuration reference: `docs/getting-started/configuration.md`
116
+ - Examples: `docs/examples.md`
117
+ - Migration (0.2): `docs/migration/0.2-plugin-first.md`
118
+
119
+ ## Plugin Config Quickstart
120
+
121
+ The plugin system is enabled by default (`enable_plugins = true`), and all
122
+ discovered plugins load automatically when no additional filters are set. Use
123
+ these knobs to adjust what runs:
124
+
125
+ - `enabled_plugins`: optional allow list; when set, only the listed plugins run.
126
+ - `disabled_plugins`: optional block list applied when `enabled_plugins` is not
127
+ set.
128
+ - `plugins.<name>.enabled`: per-plugin flag (defaults to `true`) that you can
129
+ override in TOML or environment variables. Any plugin set to `false` is added
130
+ to the deny list alongside `disabled_plugins` during startup.
131
+
132
+ During startup we merge `disabled_plugins` and any `plugins.<name>.enabled = false`
133
+ entries into a single deny list. At runtime the loader checks the allow list
134
+ first and then confirms the plugin is not deny listed. Configure plugins under
135
+ `plugins.<name>` in TOML or via nested environment variables.
136
+
137
+ Use `ccproxy plugins list` to inspect discovered plugins and
138
+ `ccproxy plugins settings <name>` to review configuration fields.
139
+
140
+ ### TOML example (`.ccproxy.toml`)
141
+
142
+ ```toml
143
+ enable_plugins = true
144
+ # enabled_plugins = ["metrics", "analytics"] # Optional allow list
145
+ disabled_plugins = ["duckdb_storage"] # Optional block list
146
+
147
+ [plugins.access_log]
148
+ client_enabled = true
149
+ client_format = "structured"
150
+ client_log_file = "/tmp/ccproxy/access.log"
151
+
152
+ [plugins.request_tracer]
153
+ json_logs_enabled = true
154
+ raw_http_enabled = true
155
+ log_dir = "/tmp/ccproxy/traces"
156
+
157
+ [plugins.duckdb_storage]
158
+ enabled = false
159
+
160
+ [plugins.analytics]
161
+ enabled = true
162
+
163
+ # Metrics plugin
164
+ [plugins.metrics]
165
+ enabled = true
166
+ # pushgateway_enabled = true
167
+ # pushgateway_url = "http://localhost:9091"
168
+ # pushgateway_job = "ccproxy"
169
+ # pushgateway_push_interval = 60
170
+ ```
171
+
172
+ ### Environment variables (nested with `__`)
173
+
174
+ ```bash
175
+ export DISABLED_PLUGINS="duckdb_storage" # Optional block list
176
+ export PLUGINS__ACCESS_LOG__ENABLED=true
177
+ export PLUGINS__ACCESS_LOG__CLIENT_ENABLED=true
178
+ export PLUGINS__ACCESS_LOG__CLIENT_FORMAT=structured
179
+ export PLUGINS__ACCESS_LOG__CLIENT_LOG_FILE=/tmp/ccproxy/access.log
180
+
181
+ export PLUGINS__REQUEST_TRACER__ENABLED=true
182
+ export PLUGINS__REQUEST_TRACER__JSON_LOGS_ENABLED=true
183
+ export PLUGINS__REQUEST_TRACER__RAW_HTTP_ENABLED=true
184
+ export PLUGINS__REQUEST_TRACER__LOG_DIR=/tmp/ccproxy/traces
185
+
186
+ export PLUGINS__DUCKDB_STORAGE__ENABLED=true
187
+ export PLUGINS__ANALYTICS__ENABLED=true
188
+ export PLUGINS__METRICS__ENABLED=true
189
+ # export PLUGINS__METRICS__PUSHGATEWAY_ENABLED=true
190
+ # export PLUGINS__METRICS__PUSHGATEWAY_URL=http://localhost:9091
191
+ ```
192
+
193
+ ## Running
194
+
195
+ To install the latest stable release without cloning the repository, use `uvx`
196
+ to grab the published wheel and launch the CLI:
197
+
198
+ ```bash
199
+ uvx --with "ccproxy-api[all]" ccproxy serve --port 8000
200
+ ```
201
+
202
+ If you prefer `pipx`, install the package (optionally with extras) and use the
203
+ local shim:
204
+
205
+ ```bash
206
+ pipx install "ccproxy-api[all]"
207
+ ccproxy serve # default on localhost:8000
208
+ ```
209
+
210
+ ## License
211
+
212
+ See `LICENSE`.
@@ -0,0 +1,172 @@
1
+ # CCProxy API Server
2
+
3
+ CCProxy is a local, plugin-based reverse proxy that unifies access to
4
+ multiple AI providers (e.g., Claude SDK/API and OpenAI Codex) behind a
5
+ consistent API. It ships with bundled plugins for providers, logging,
6
+ tracing, metrics, analytics, and more.
7
+
8
+ ## Supported Providers
9
+
10
+ - Anthropic Claude API/SDK (OAuth2 flow or Claude CLI/SDK token files)
11
+ - OpenAI Codex (ChatGPT backend Responses API using OAuth for paid/pro accounts)
12
+ - GitHub Copilot (chat and completions for free, paid, or business accounts)
13
+
14
+ Each provider adapter exposes the same surface area: OpenAI Chat
15
+ Completions, OpenAI Responses, and Anthropic Messages. The proxy maintains a
16
+ shared model-mapping layer so you can reuse the same `model` identifier
17
+ across providers without rewriting client code.
18
+
19
+ Authentication can reuse existing provider files (e.g., Claude CLI SDK
20
+ tokens and the Codex CLI credential store), or you can run
21
+ `ccproxy auth login <provider>` to complete the OAuth flow from the CLI;
22
+ stored secrets are picked up automatically by the proxy.
23
+
24
+ ## Extensibility
25
+
26
+ CCProxy's plugin system lets you add instrumentation and storage layers
27
+ without patching the core server. Bundled plugins currently include:
28
+
29
+ - [`access_log`](ccproxy/plugins/access_log/README.md): structured access
30
+ logging for client and provider traffic
31
+ - [`analytics`](ccproxy/plugins/analytics/README.md): DuckDB-backed analytics
32
+ APIs for captured request logs
33
+ - [`claude_api`](ccproxy/plugins/claude_api/README.md): Anthropic Claude HTTP
34
+ API adapter with health and metrics
35
+ - [`claude_sdk`](ccproxy/plugins/claude_sdk/README.md): local Claude CLI/SDK
36
+ adapter with session pooling
37
+ - [`codex`](ccproxy/plugins/codex/README.md): OpenAI Codex provider adapter
38
+ with OAuth support
39
+ - [`command_replay`](ccproxy/plugins/command_replay/README.md): generates
40
+ `curl`/`xh` commands for captured requests
41
+ - [`copilot`](ccproxy/plugins/copilot/README.md): GitHub Copilot provider
42
+ adapter with OAuth token management
43
+ - [`credential_balancer`](ccproxy/plugins/credential_balancer/README.md):
44
+ rotates upstream credentials based on health
45
+ - [`dashboard`](ccproxy/plugins/dashboard/README.md): serves the CCProxy
46
+ dashboard SPA and APIs
47
+ - [`docker`](ccproxy/plugins/docker/README.md): runs providers inside Docker via
48
+ CLI extensions
49
+ - [`duckdb_storage`](ccproxy/plugins/duckdb_storage/README.md): exposes
50
+ DuckDB-backed storage for logs and analytics
51
+ - [`max_tokens`](ccproxy/plugins/max_tokens/README.md): normalizes
52
+ `max_tokens` fields to provider limits
53
+ - [`metrics`](ccproxy/plugins/metrics/README.md): Prometheus-compatible metrics
54
+ with optional Pushgateway
55
+ - [`oauth_claude`](ccproxy/plugins/oauth_claude/README.md): standalone OAuth
56
+ provider for Claude integrations
57
+ - [`oauth_codex`](ccproxy/plugins/oauth_codex/README.md): standalone OAuth
58
+ provider for Codex integrations
59
+ - [`permissions`](ccproxy/plugins/permissions/README.md): interactive approval
60
+ flow for privileged tool actions
61
+ - [`pricing`](ccproxy/plugins/pricing/README.md): caches model pricing data for
62
+ cost-aware features
63
+ - [`request_tracer`](ccproxy/plugins/request_tracer/README.md): detailed
64
+ request/response tracing for debugging
65
+
66
+ Shared helpers such as
67
+ [`claude_shared`](ccproxy/plugins/claude_shared/README.md) provide metadata
68
+ consumed by the Claude plugins. Each plugin directory contains its own README
69
+ with configuration examples.
70
+
71
+ ## Quick Links
72
+
73
+ - Docs site entry: `docs/index.md`
74
+ - Getting started: `docs/getting-started/quickstart.md`
75
+ - Configuration reference: `docs/getting-started/configuration.md`
76
+ - Examples: `docs/examples.md`
77
+ - Migration (0.2): `docs/migration/0.2-plugin-first.md`
78
+
79
+ ## Plugin Config Quickstart
80
+
81
+ The plugin system is enabled by default (`enable_plugins = true`), and all
82
+ discovered plugins load automatically when no additional filters are set. Use
83
+ these knobs to adjust what runs:
84
+
85
+ - `enabled_plugins`: optional allow list; when set, only the listed plugins run.
86
+ - `disabled_plugins`: optional block list applied when `enabled_plugins` is not
87
+ set.
88
+ - `plugins.<name>.enabled`: per-plugin flag (defaults to `true`) that you can
89
+ override in TOML or environment variables. Any plugin set to `false` is added
90
+ to the deny list alongside `disabled_plugins` during startup.
91
+
92
+ During startup we merge `disabled_plugins` and any `plugins.<name>.enabled = false`
93
+ entries into a single deny list. At runtime the loader checks the allow list
94
+ first and then confirms the plugin is not deny listed. Configure plugins under
95
+ `plugins.<name>` in TOML or via nested environment variables.
96
+
97
+ Use `ccproxy plugins list` to inspect discovered plugins and
98
+ `ccproxy plugins settings <name>` to review configuration fields.
99
+
100
+ ### TOML example (`.ccproxy.toml`)
101
+
102
+ ```toml
103
+ enable_plugins = true
104
+ # enabled_plugins = ["metrics", "analytics"] # Optional allow list
105
+ disabled_plugins = ["duckdb_storage"] # Optional block list
106
+
107
+ [plugins.access_log]
108
+ client_enabled = true
109
+ client_format = "structured"
110
+ client_log_file = "/tmp/ccproxy/access.log"
111
+
112
+ [plugins.request_tracer]
113
+ json_logs_enabled = true
114
+ raw_http_enabled = true
115
+ log_dir = "/tmp/ccproxy/traces"
116
+
117
+ [plugins.duckdb_storage]
118
+ enabled = false
119
+
120
+ [plugins.analytics]
121
+ enabled = true
122
+
123
+ # Metrics plugin
124
+ [plugins.metrics]
125
+ enabled = true
126
+ # pushgateway_enabled = true
127
+ # pushgateway_url = "http://localhost:9091"
128
+ # pushgateway_job = "ccproxy"
129
+ # pushgateway_push_interval = 60
130
+ ```
131
+
132
+ ### Environment variables (nested with `__`)
133
+
134
+ ```bash
135
+ export DISABLED_PLUGINS="duckdb_storage" # Optional block list
136
+ export PLUGINS__ACCESS_LOG__ENABLED=true
137
+ export PLUGINS__ACCESS_LOG__CLIENT_ENABLED=true
138
+ export PLUGINS__ACCESS_LOG__CLIENT_FORMAT=structured
139
+ export PLUGINS__ACCESS_LOG__CLIENT_LOG_FILE=/tmp/ccproxy/access.log
140
+
141
+ export PLUGINS__REQUEST_TRACER__ENABLED=true
142
+ export PLUGINS__REQUEST_TRACER__JSON_LOGS_ENABLED=true
143
+ export PLUGINS__REQUEST_TRACER__RAW_HTTP_ENABLED=true
144
+ export PLUGINS__REQUEST_TRACER__LOG_DIR=/tmp/ccproxy/traces
145
+
146
+ export PLUGINS__DUCKDB_STORAGE__ENABLED=true
147
+ export PLUGINS__ANALYTICS__ENABLED=true
148
+ export PLUGINS__METRICS__ENABLED=true
149
+ # export PLUGINS__METRICS__PUSHGATEWAY_ENABLED=true
150
+ # export PLUGINS__METRICS__PUSHGATEWAY_URL=http://localhost:9091
151
+ ```
152
+
153
+ ## Running
154
+
155
+ To install the latest stable release without cloning the repository, use `uvx`
156
+ to grab the published wheel and launch the CLI:
157
+
158
+ ```bash
159
+ uvx --with "ccproxy-api[all]" ccproxy serve --port 8000
160
+ ```
161
+
162
+ If you prefer `pipx`, install the package (optionally with extras) and use the
163
+ local shim:
164
+
165
+ ```bash
166
+ pipx install "ccproxy-api[all]"
167
+ ccproxy serve # default on localhost:8000
168
+ ```
169
+
170
+ ## License
171
+
172
+ See `LICENSE`.
@@ -0,0 +1,11 @@
1
+ """API layer for CCProxy API Server."""
2
+
3
+ from ccproxy.api.app import create_app, get_app
4
+ from ccproxy.api.dependencies import SettingsDep
5
+
6
+
7
+ __all__ = [
8
+ "create_app",
9
+ "get_app",
10
+ "SettingsDep",
11
+ ]