ccproxy-api 0.1.6__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 (672) hide show
  1. {ccproxy_api-0.1.6 → 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.6 → 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.6 → 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.6 → ccproxy_api-0.2.0}/ccproxy/auth/__init__.py +2 -19
  20. {ccproxy_api-0.1.6 → 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.6 → 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.6 → 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.6 → 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.6 → 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.6 → 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.6 → ccproxy_api-0.2.0}/ccproxy/cli/options/claude_options.py +0 -25
  54. {ccproxy_api-0.1.6 → 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.6/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.6 → 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.6 → 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.6/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.6 → 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.6/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.6/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.6/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.6/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.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/manager.py +42 -32
  185. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/message_queue.py +8 -8
  186. ccproxy_api-0.1.6/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.6/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.6/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.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/stream_handle.py +48 -43
  194. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/stream_worker.py +22 -18
  195. {ccproxy_api-0.1.6/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.6/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.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/__init__.py +3 -0
  251. {ccproxy_api-0.1.6/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.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/docker_path.py +4 -3
  254. {ccproxy_api-0.1.6/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.6/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.6/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.6/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.6/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.6/ccproxy/api/routes → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/mcp.py +34 -7
  305. ccproxy_api-0.1.6/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.6/ccproxy/api/routes/permissions.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/routes.py +20 -16
  308. ccproxy_api-0.1.6/ccproxy/api/services/permission_service.py → ccproxy_api-0.2.0/ccproxy/plugins/permissions/service.py +65 -11
  309. {ccproxy_api-0.1.6/ccproxy/api → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/ui/permission_handler_protocol.py +1 -1
  310. {ccproxy_api-0.1.6/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.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/pricing/cache.py +7 -6
  314. ccproxy_api-0.1.6/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.6/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.6/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.6 → ccproxy_api-0.2.0}/ccproxy/scheduler/__init__.py +2 -14
  329. {ccproxy_api-0.1.6 → 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.6 → ccproxy_api-0.2.0}/ccproxy/scheduler/registry.py +6 -32
  332. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/scheduler/tasks.py +346 -314
  333. {ccproxy_api-0.1.6 → 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.6 → ccproxy_api-0.2.0}/ccproxy/testing/mock_responses.py +70 -1
  380. {ccproxy_api-0.1.6 → 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.6 → ccproxy_api-0.2.0}/tests/factories/README.md +3 -2
  392. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/tests/fixtures/README.md +8 -9
  393. ccproxy_api-0.1.6/.env.example +0 -31
  394. ccproxy_api-0.1.6/.github/workflows/backend.yml +0 -117
  395. ccproxy_api-0.1.6/.github/workflows/build.yml +0 -72
  396. ccproxy_api-0.1.6/.github/workflows/ci.yml +0 -44
  397. ccproxy_api-0.1.6/.github/workflows/docs.yml +0 -115
  398. ccproxy_api-0.1.6/.github/workflows/frontend.yml.disabled +0 -122
  399. ccproxy_api-0.1.6/.github/workflows/release.yml +0 -151
  400. ccproxy_api-0.1.6/.pre-commit-config.yaml +0 -132
  401. ccproxy_api-0.1.6/.python-version +0 -1
  402. ccproxy_api-0.1.6/CHANGELOG.md +0 -403
  403. ccproxy_api-0.1.6/CONTRIBUTING.md +0 -402
  404. ccproxy_api-0.1.6/CONVENTIONS.md +0 -259
  405. ccproxy_api-0.1.6/Dockerfile +0 -99
  406. ccproxy_api-0.1.6/Makefile +0 -252
  407. ccproxy_api-0.1.6/PKG-INFO +0 -615
  408. ccproxy_api-0.1.6/README.md +0 -582
  409. ccproxy_api-0.1.6/TESTING.md +0 -578
  410. ccproxy_api-0.1.6/ccproxy/__init__.py +0 -4
  411. ccproxy_api-0.1.6/ccproxy/adapters/__init__.py +0 -11
  412. ccproxy_api-0.1.6/ccproxy/adapters/base.py +0 -80
  413. ccproxy_api-0.1.6/ccproxy/adapters/codex/__init__.py +0 -11
  414. ccproxy_api-0.1.6/ccproxy/adapters/openai/__init__.py +0 -42
  415. ccproxy_api-0.1.6/ccproxy/adapters/openai/adapter.py +0 -953
  416. ccproxy_api-0.1.6/ccproxy/adapters/openai/models.py +0 -412
  417. ccproxy_api-0.1.6/ccproxy/adapters/openai/response_adapter.py +0 -355
  418. ccproxy_api-0.1.6/ccproxy/adapters/openai/response_models.py +0 -178
  419. ccproxy_api-0.1.6/ccproxy/api/__init__.py +0 -25
  420. ccproxy_api-0.1.6/ccproxy/api/app.py +0 -354
  421. ccproxy_api-0.1.6/ccproxy/api/dependencies.py +0 -222
  422. ccproxy_api-0.1.6/ccproxy/api/middleware/auth.py +0 -0
  423. ccproxy_api-0.1.6/ccproxy/api/middleware/errors.py +0 -723
  424. ccproxy_api-0.1.6/ccproxy/api/middleware/headers.py +0 -49
  425. ccproxy_api-0.1.6/ccproxy/api/middleware/logging.py +0 -180
  426. ccproxy_api-0.1.6/ccproxy/api/middleware/request_content_logging.py +0 -297
  427. ccproxy_api-0.1.6/ccproxy/api/middleware/server_header.py +0 -58
  428. ccproxy_api-0.1.6/ccproxy/api/responses.py +0 -89
  429. ccproxy_api-0.1.6/ccproxy/api/routes/__init__.py +0 -24
  430. ccproxy_api-0.1.6/ccproxy/api/routes/claude.py +0 -371
  431. ccproxy_api-0.1.6/ccproxy/api/routes/codex.py +0 -1231
  432. ccproxy_api-0.1.6/ccproxy/api/routes/health.py +0 -768
  433. ccproxy_api-0.1.6/ccproxy/api/routes/metrics.py +0 -1029
  434. ccproxy_api-0.1.6/ccproxy/api/routes/proxy.py +0 -211
  435. ccproxy_api-0.1.6/ccproxy/api/services/__init__.py +0 -6
  436. ccproxy_api-0.1.6/ccproxy/auth/conditional.py +0 -84
  437. ccproxy_api-0.1.6/ccproxy/auth/credentials_adapter.py +0 -93
  438. ccproxy_api-0.1.6/ccproxy/auth/dependencies.py +0 -229
  439. ccproxy_api-0.1.6/ccproxy/auth/manager.py +0 -102
  440. ccproxy_api-0.1.6/ccproxy/auth/models.py +0 -118
  441. ccproxy_api-0.1.6/ccproxy/auth/oauth/__init__.py +0 -26
  442. ccproxy_api-0.1.6/ccproxy/auth/oauth/models.py +0 -48
  443. ccproxy_api-0.1.6/ccproxy/auth/oauth/storage.py +0 -0
  444. ccproxy_api-0.1.6/ccproxy/auth/openai/__init__.py +0 -13
  445. ccproxy_api-0.1.6/ccproxy/auth/openai/credentials.py +0 -166
  446. ccproxy_api-0.1.6/ccproxy/auth/openai/oauth_client.py +0 -334
  447. ccproxy_api-0.1.6/ccproxy/auth/openai/storage.py +0 -184
  448. ccproxy_api-0.1.6/ccproxy/auth/storage/__init__.py +0 -12
  449. ccproxy_api-0.1.6/ccproxy/auth/storage/base.py +0 -57
  450. ccproxy_api-0.1.6/ccproxy/auth/storage/json_file.py +0 -158
  451. ccproxy_api-0.1.6/ccproxy/auth/storage/keyring.py +0 -189
  452. ccproxy_api-0.1.6/ccproxy/claude_sdk/__init__.py +0 -18
  453. ccproxy_api-0.1.6/ccproxy/claude_sdk/options.py +0 -194
  454. ccproxy_api-0.1.6/ccproxy/claude_sdk/session_pool.py +0 -550
  455. ccproxy_api-0.1.6/ccproxy/cli/commands/auth.py +0 -964
  456. ccproxy_api-0.1.6/ccproxy/cli/commands/serve.py +0 -986
  457. ccproxy_api-0.1.6/ccproxy/cli/docker/__init__.py +0 -34
  458. ccproxy_api-0.1.6/ccproxy/cli/docker/adapter_factory.py +0 -157
  459. ccproxy_api-0.1.6/ccproxy/cli/docker/params.py +0 -274
  460. ccproxy_api-0.1.6/ccproxy/cli/main.py +0 -104
  461. ccproxy_api-0.1.6/ccproxy/config/auth.py +0 -153
  462. ccproxy_api-0.1.6/ccproxy/config/claude.py +0 -348
  463. ccproxy_api-0.1.6/ccproxy/config/cors.py +0 -79
  464. ccproxy_api-0.1.6/ccproxy/config/discovery.py +0 -95
  465. ccproxy_api-0.1.6/ccproxy/config/docker_settings.py +0 -264
  466. ccproxy_api-0.1.6/ccproxy/config/observability.py +0 -158
  467. ccproxy_api-0.1.6/ccproxy/config/reverse_proxy.py +0 -31
  468. ccproxy_api-0.1.6/ccproxy/config/scheduler.py +0 -108
  469. ccproxy_api-0.1.6/ccproxy/config/security.py +0 -19
  470. ccproxy_api-0.1.6/ccproxy/config/server.py +0 -86
  471. ccproxy_api-0.1.6/ccproxy/config/settings.py +0 -577
  472. ccproxy_api-0.1.6/ccproxy/config/validators.py +0 -231
  473. ccproxy_api-0.1.6/ccproxy/core/__init__.py +0 -274
  474. ccproxy_api-0.1.6/ccproxy/core/codex_transformers.py +0 -389
  475. ccproxy_api-0.1.6/ccproxy/core/constants.py +0 -97
  476. ccproxy_api-0.1.6/ccproxy/core/http.py +0 -328
  477. ccproxy_api-0.1.6/ccproxy/core/http_transformers.py +0 -812
  478. ccproxy_api-0.1.6/ccproxy/core/interfaces.py +0 -247
  479. ccproxy_api-0.1.6/ccproxy/core/logging.py +0 -287
  480. ccproxy_api-0.1.6/ccproxy/core/proxy.py +0 -143
  481. ccproxy_api-0.1.6/ccproxy/core/validators.py +0 -288
  482. ccproxy_api-0.1.6/ccproxy/models/__init__.py +0 -164
  483. ccproxy_api-0.1.6/ccproxy/models/detection.py +0 -208
  484. ccproxy_api-0.1.6/ccproxy/models/errors.py +0 -42
  485. ccproxy_api-0.1.6/ccproxy/models/messages.py +0 -269
  486. ccproxy_api-0.1.6/ccproxy/models/requests.py +0 -107
  487. ccproxy_api-0.1.6/ccproxy/models/responses.py +0 -270
  488. ccproxy_api-0.1.6/ccproxy/models/types.py +0 -102
  489. ccproxy_api-0.1.6/ccproxy/observability/__init__.py +0 -51
  490. ccproxy_api-0.1.6/ccproxy/observability/access_logger.py +0 -457
  491. ccproxy_api-0.1.6/ccproxy/observability/sse_events.py +0 -303
  492. ccproxy_api-0.1.6/ccproxy/observability/stats_printer.py +0 -753
  493. ccproxy_api-0.1.6/ccproxy/observability/storage/__init__.py +0 -1
  494. ccproxy_api-0.1.6/ccproxy/observability/storage/duckdb_simple.py +0 -677
  495. ccproxy_api-0.1.6/ccproxy/observability/storage/models.py +0 -70
  496. ccproxy_api-0.1.6/ccproxy/observability/streaming_response.py +0 -107
  497. ccproxy_api-0.1.6/ccproxy/pricing/__init__.py +0 -19
  498. ccproxy_api-0.1.6/ccproxy/pricing/loader.py +0 -251
  499. ccproxy_api-0.1.6/ccproxy/scheduler/manager.py +0 -239
  500. ccproxy_api-0.1.6/ccproxy/services/claude_detection_service.py +0 -269
  501. ccproxy_api-0.1.6/ccproxy/services/codex_detection_service.py +0 -263
  502. ccproxy_api-0.1.6/ccproxy/services/credentials/__init__.py +0 -55
  503. ccproxy_api-0.1.6/ccproxy/services/credentials/config.py +0 -105
  504. ccproxy_api-0.1.6/ccproxy/services/credentials/manager.py +0 -561
  505. ccproxy_api-0.1.6/ccproxy/services/credentials/oauth_client.py +0 -481
  506. ccproxy_api-0.1.6/ccproxy/services/proxy_service.py +0 -1827
  507. ccproxy_api-0.1.6/ccproxy/static/.keep +0 -0
  508. ccproxy_api-0.1.6/ccproxy/utils/__init__.py +0 -14
  509. ccproxy_api-0.1.6/ccproxy/utils/cost_calculator.py +0 -210
  510. ccproxy_api-0.1.6/ccproxy/utils/disconnection_monitor.py +0 -83
  511. ccproxy_api-0.1.6/ccproxy/utils/model_mapping.py +0 -199
  512. ccproxy_api-0.1.6/ccproxy/utils/models_provider.py +0 -150
  513. ccproxy_api-0.1.6/ccproxy/utils/simple_request_logger.py +0 -284
  514. ccproxy_api-0.1.6/ccproxy/utils/startup_helpers.py +0 -470
  515. ccproxy_api-0.1.6/ccproxy/utils/streaming_metrics.py +0 -199
  516. ccproxy_api-0.1.6/ccproxy/utils/version_checker.py +0 -184
  517. ccproxy_api-0.1.6/data/metrics.db +0 -0
  518. ccproxy_api-0.1.6/devenv.lock +0 -103
  519. ccproxy_api-0.1.6/devenv.nix +0 -119
  520. ccproxy_api-0.1.6/docker-compose.monitoring.yml +0 -56
  521. ccproxy_api-0.1.6/docker-compose.yml +0 -22
  522. ccproxy_api-0.1.6/docs/README.md +0 -221
  523. ccproxy_api-0.1.6/docs/api-reference.md +0 -142
  524. ccproxy_api-0.1.6/docs/assets/extra.css +0 -0
  525. ccproxy_api-0.1.6/docs/assets/extra.js +0 -15
  526. ccproxy_api-0.1.6/docs/contributing.md +0 -1
  527. ccproxy_api-0.1.6/docs/development/debugging-with-proxy.md +0 -198
  528. ccproxy_api-0.1.6/docs/examples.md +0 -384
  529. ccproxy_api-0.1.6/docs/gen_ref_pages.py +0 -41
  530. ccproxy_api-0.1.6/docs/getting-started/configuration.md +0 -747
  531. ccproxy_api-0.1.6/docs/getting-started/installation.md +0 -169
  532. ccproxy_api-0.1.6/docs/getting-started/quickstart.md +0 -678
  533. ccproxy_api-0.1.6/docs/index.md +0 -337
  534. ccproxy_api-0.1.6/docs/metrics-api.md +0 -529
  535. ccproxy_api-0.1.6/docs/observability.md +0 -82
  536. ccproxy_api-0.1.6/docs/systemd-setup.md +0 -261
  537. ccproxy_api-0.1.6/docs/user-guide/api-usage.md +0 -103
  538. ccproxy_api-0.1.6/docs/user-guide/authentication.md +0 -295
  539. ccproxy_api-0.1.6/docs/user-guide/claude-code-options.md +0 -199
  540. ccproxy_api-0.1.6/docs/user-guide/claude-sdk-compatibility.md +0 -229
  541. ccproxy_api-0.1.6/docs/user-guide/codex-api.md +0 -549
  542. ccproxy_api-0.1.6/docs/user-guide/mcp-integration.md +0 -146
  543. ccproxy_api-0.1.6/docs/user-guide/pool-configuration.md +0 -162
  544. ccproxy_api-0.1.6/docs/user-guide/understanding-pool-logs.md +0 -166
  545. ccproxy_api-0.1.6/examples/README_chat_agent.md +0 -79
  546. ccproxy_api-0.1.6/examples/ai_code_discussion_demo.py +0 -1458
  547. ccproxy_api-0.1.6/examples/anthropic_streaming_demo.py +0 -263
  548. ccproxy_api-0.1.6/examples/anthropic_tools_demo.py +0 -188
  549. ccproxy_api-0.1.6/examples/client.py +0 -311
  550. ccproxy_api-0.1.6/examples/common_utils.py +0 -263
  551. ccproxy_api-0.1.6/examples/console_utils.py +0 -359
  552. ccproxy_api-0.1.6/examples/debug_anthropic_streaming.py +0 -391
  553. ccproxy_api-0.1.6/examples/openai_anthropic_conversation_demo.py +0 -703
  554. ccproxy_api-0.1.6/examples/openai_claude_code_options_example.sh +0 -50
  555. ccproxy_api-0.1.6/examples/openai_json_object_example.sh +0 -46
  556. ccproxy_api-0.1.6/examples/openai_json_schema_example.sh +0 -61
  557. ccproxy_api-0.1.6/examples/openai_streaming_demo.py +0 -126
  558. ccproxy_api-0.1.6/examples/openai_structured_response_demo.py +0 -237
  559. ccproxy_api-0.1.6/examples/openai_thinking_demo.py +0 -225
  560. ccproxy_api-0.1.6/examples/openai_tools_demo.py +0 -211
  561. ccproxy_api-0.1.6/examples/project_code_access_demo.py +0 -587
  562. ccproxy_api-0.1.6/examples/simple_thinking_demo.py +0 -118
  563. ccproxy_api-0.1.6/examples/textual_chat_agent.py +0 -440
  564. ccproxy_api-0.1.6/mkdocs.yml +0 -217
  565. ccproxy_api-0.1.6/monitoring/grafana/provisioning/dashboards/dashboard.yml +0 -12
  566. ccproxy_api-0.1.6/monitoring/grafana/provisioning/datasources/victoria-metrics.yml +0 -18
  567. ccproxy_api-0.1.6/pyproject.toml +0 -349
  568. ccproxy_api-0.1.6/scripts/act-run.sh +0 -7
  569. ccproxy_api-0.1.6/scripts/build-docs.sh +0 -24
  570. ccproxy_api-0.1.6/scripts/entrypoint.sh +0 -183
  571. ccproxy_api-0.1.6/scripts/format_version.py +0 -50
  572. ccproxy_api-0.1.6/scripts/serve-docs.sh +0 -18
  573. ccproxy_api-0.1.6/scripts/setup-systemd.sh +0 -210
  574. ccproxy_api-0.1.6/scripts/setup.sh +0 -45
  575. ccproxy_api-0.1.6/scripts/traffic_generator.py +0 -674
  576. ccproxy_api-0.1.6/systemd/ccproxy.service.template +0 -20
  577. ccproxy_api-0.1.6/tests/.gitignore +0 -7
  578. ccproxy_api-0.1.6/tests/conftest.py +0 -1117
  579. ccproxy_api-0.1.6/tests/factories/__init__.py +0 -24
  580. ccproxy_api-0.1.6/tests/factories/fastapi_factory.py +0 -422
  581. ccproxy_api-0.1.6/tests/fixtures/auth/__init__.py +0 -51
  582. ccproxy_api-0.1.6/tests/fixtures/auth/example_usage.py +0 -287
  583. ccproxy_api-0.1.6/tests/fixtures/claude_sdk/__init__.py +0 -5
  584. ccproxy_api-0.1.6/tests/fixtures/claude_sdk/client_mocks.py +0 -146
  585. ccproxy_api-0.1.6/tests/fixtures/claude_sdk/internal_mocks.py +0 -255
  586. ccproxy_api-0.1.6/tests/fixtures/claude_sdk/responses.py +0 -95
  587. ccproxy_api-0.1.6/tests/fixtures/credentials.json +0 -9
  588. ccproxy_api-0.1.6/tests/fixtures/external_apis/__init__.py +0 -5
  589. ccproxy_api-0.1.6/tests/fixtures/external_apis/anthropic_api.py +0 -178
  590. ccproxy_api-0.1.6/tests/fixtures/external_apis/openai_codex_api.py +0 -153
  591. ccproxy_api-0.1.6/tests/fixtures/proxy_service/__init__.py +0 -5
  592. ccproxy_api-0.1.6/tests/fixtures/proxy_service/oauth_mocks.py +0 -91
  593. ccproxy_api-0.1.6/tests/fixtures/responses.json +0 -177
  594. ccproxy_api-0.1.6/tests/helpers/__init__.py +0 -1
  595. ccproxy_api-0.1.6/tests/helpers/assertions.py +0 -135
  596. ccproxy_api-0.1.6/tests/helpers/test_data.py +0 -234
  597. ccproxy_api-0.1.6/tests/integration/test_access_logger_integration.py +0 -476
  598. ccproxy_api-0.1.6/tests/integration/test_confirmation_integration.py +0 -361
  599. ccproxy_api-0.1.6/tests/integration/test_duckdb_settings_integration.py +0 -149
  600. ccproxy_api-0.1.6/tests/integration/test_streaming_access_logging.py +0 -488
  601. ccproxy_api-0.1.6/tests/test_cache_control_limiter.py +0 -321
  602. ccproxy_api-0.1.6/tests/unit/__init__.py +0 -0
  603. ccproxy_api-0.1.6/tests/unit/api/__init__.py +0 -0
  604. ccproxy_api-0.1.6/tests/unit/api/test_api.py +0 -551
  605. ccproxy_api-0.1.6/tests/unit/api/test_confirmation_routes.py +0 -514
  606. ccproxy_api-0.1.6/tests/unit/api/test_mcp_route.py +0 -346
  607. ccproxy_api-0.1.6/tests/unit/api/test_metrics_api.py +0 -485
  608. ccproxy_api-0.1.6/tests/unit/api/test_reset_endpoint.py +0 -301
  609. ccproxy_api-0.1.6/tests/unit/auth/__init__.py +0 -0
  610. ccproxy_api-0.1.6/tests/unit/auth/test_auth.py +0 -951
  611. ccproxy_api-0.1.6/tests/unit/cli/__init__.py +0 -0
  612. ccproxy_api-0.1.6/tests/unit/cli/test_cli_auth_commands.py +0 -569
  613. ccproxy_api-0.1.6/tests/unit/cli/test_cli_config.py +0 -382
  614. ccproxy_api-0.1.6/tests/unit/cli/test_cli_confirmation_handler.py +0 -527
  615. ccproxy_api-0.1.6/tests/unit/cli/test_cli_serve.py +0 -481
  616. ccproxy_api-0.1.6/tests/unit/config/__init__.py +0 -0
  617. ccproxy_api-0.1.6/tests/unit/config/test_claude_sdk_options.py +0 -208
  618. ccproxy_api-0.1.6/tests/unit/config/test_claude_sdk_parser.py +0 -417
  619. ccproxy_api-0.1.6/tests/unit/config/test_terminal_handler.py +0 -202
  620. ccproxy_api-0.1.6/tests/unit/observability/test_streaming_response.py +0 -274
  621. ccproxy_api-0.1.6/tests/unit/services/__init__.py +0 -0
  622. ccproxy_api-0.1.6/tests/unit/services/test_adapters.py +0 -1136
  623. ccproxy_api-0.1.6/tests/unit/services/test_claude_sdk_client.py +0 -491
  624. ccproxy_api-0.1.6/tests/unit/services/test_codex_proxy.py +0 -379
  625. ccproxy_api-0.1.6/tests/unit/services/test_confirmation_service.py +0 -409
  626. ccproxy_api-0.1.6/tests/unit/services/test_docker.py +0 -518
  627. ccproxy_api-0.1.6/tests/unit/services/test_fastapi_factory.py +0 -171
  628. ccproxy_api-0.1.6/tests/unit/services/test_http_transformers.py +0 -1384
  629. ccproxy_api-0.1.6/tests/unit/services/test_observability.py +0 -1204
  630. ccproxy_api-0.1.6/tests/unit/services/test_pricing.py +0 -877
  631. ccproxy_api-0.1.6/tests/unit/services/test_pushgateway_error_handling.py +0 -324
  632. ccproxy_api-0.1.6/tests/unit/services/test_queue_duckdb_storage.py +0 -459
  633. ccproxy_api-0.1.6/tests/unit/services/test_scheduler.py +0 -702
  634. ccproxy_api-0.1.6/tests/unit/services/test_scheduler_tasks.py +0 -804
  635. ccproxy_api-0.1.6/tests/unit/services/test_session_pool_race_condition.py +0 -208
  636. ccproxy_api-0.1.6/tests/unit/services/test_sse_events.py +0 -475
  637. ccproxy_api-0.1.6/tests/unit/services/test_sse_stream_filtering.py +0 -526
  638. ccproxy_api-0.1.6/tests/unit/services/test_stats_printer.py +0 -881
  639. ccproxy_api-0.1.6/tests/unit/services/test_streaming.py +0 -148
  640. ccproxy_api-0.1.6/tests/unit/utils/__init__.py +0 -0
  641. ccproxy_api-0.1.6/tests/unit/utils/test_duckdb_lifecycle.py +0 -266
  642. ccproxy_api-0.1.6/tests/unit/utils/test_startup_helpers.py +0 -917
  643. ccproxy_api-0.1.6/tests/unit/utils/test_version_checker.py +0 -317
  644. ccproxy_api-0.1.6/uv.lock +0 -3447
  645. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/LICENSE +0 -0
  646. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/__main__.py +0 -0
  647. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/api/middleware/__init__.py +0 -0
  648. {ccproxy_api-0.1.6/tests → ccproxy_api-0.2.0/ccproxy/auth/models}/__init__.py +0 -0
  649. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/commands/__init__.py +0 -0
  650. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/commands/config/__init__.py +0 -0
  651. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/commands/config/schema_commands.py +0 -0
  652. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/options/__init__.py +0 -0
  653. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/options/core_options.py +0 -0
  654. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/options/security_options.py +0 -0
  655. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/cli/options/server_options.py +0 -0
  656. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/core/middleware.py +0 -0
  657. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/core/system.py +0 -0
  658. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/core/types.py +0 -0
  659. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/claude_sdk/exceptions.py +0 -0
  660. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/models.py +0 -0
  661. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/protocol.py +0 -0
  662. {ccproxy_api-0.1.6/ccproxy → ccproxy_api-0.2.0/ccproxy/plugins}/docker/validators.py +0 -0
  663. {ccproxy_api-0.1.6/monitoring → ccproxy_api-0.2.0/ccproxy/plugins/metrics}/grafana/dashboards/ccproxy-dashboard.json +0 -0
  664. {ccproxy_api-0.1.6/tests/integration → ccproxy_api-0.2.0/ccproxy/plugins/permissions/handlers}/__init__.py +0 -0
  665. {ccproxy_api-0.1.6/ccproxy/api → ccproxy_api-0.2.0/ccproxy/plugins/permissions}/ui/__init__.py +0 -0
  666. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/scheduler/errors.py +0 -0
  667. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/testing/__init__.py +0 -0
  668. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/testing/config.py +0 -0
  669. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/testing/content_generation.py +0 -0
  670. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/testing/scenarios.py +0 -0
  671. {ccproxy_api-0.1.6 → ccproxy_api-0.2.0}/ccproxy/utils/id_generator.py +0 -0
  672. {ccproxy_api-0.1.6 → 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
+ ]