ccproxy-api 0.2.4__tar.gz → 0.2.6__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 (422) hide show
  1. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/PKG-INFO +19 -19
  2. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/_version.py +2 -2
  3. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/factories.py +25 -1
  4. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/_helpers.py +30 -0
  5. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/streams.py +6 -5
  6. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/context.py +24 -0
  7. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/responses.py +6 -1
  8. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/streams.py +17 -10
  9. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/models/anthropic.py +9 -1
  10. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/models/openai.py +12 -1
  11. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/adapter.py +4 -5
  12. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/adapter.py +140 -27
  13. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/config.py +7 -0
  14. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/detection_service.py +61 -6
  15. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/plugin.py +1 -0
  16. ccproxy_api-0.2.6/ccproxy/plugins/codex/routes.py +604 -0
  17. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/base.py +1 -0
  18. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/format_adapter.py +8 -0
  19. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/mock_adapter.py +59 -11
  20. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/factories.py +18 -0
  21. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/mocking/mock_handler.py +227 -18
  22. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/pyproject.toml +27 -27
  23. ccproxy_api-0.2.4/ccproxy/plugins/codex/routes.py +0 -129
  24. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/.gitignore +0 -0
  25. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/LICENSE +0 -0
  26. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/README.md +0 -0
  27. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/__main__.py +0 -0
  28. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/__init__.py +0 -0
  29. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/app.py +0 -0
  30. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/bootstrap.py +0 -0
  31. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/decorators.py +0 -0
  32. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/dependencies.py +0 -0
  33. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/format_validation.py +0 -0
  34. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/__init__.py +0 -0
  35. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/cors.py +0 -0
  36. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/errors.py +0 -0
  37. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/hooks.py +0 -0
  38. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/normalize_headers.py +0 -0
  39. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/request_id.py +0 -0
  40. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/middleware/streaming_hooks.py +0 -0
  41. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/routes/__init__.py +0 -0
  42. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/routes/health.py +0 -0
  43. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/api/routes/plugins.py +0 -0
  44. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/__init__.py +0 -0
  45. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/bearer.py +0 -0
  46. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/dependencies.py +0 -0
  47. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/exceptions.py +0 -0
  48. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/manager.py +0 -0
  49. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/managers/__init__.py +0 -0
  50. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/managers/base.py +0 -0
  51. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/managers/base_enhanced.py +0 -0
  52. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/managers/token_snapshot.py +0 -0
  53. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/models/__init__.py +0 -0
  54. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/models/base.py +0 -0
  55. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/models/credentials.py +0 -0
  56. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/__init__.py +0 -0
  57. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/base.py +0 -0
  58. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/cli_errors.py +0 -0
  59. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/flows.py +0 -0
  60. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/protocol.py +0 -0
  61. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/registry.py +0 -0
  62. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/router.py +0 -0
  63. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/routes.py +0 -0
  64. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/session.py +0 -0
  65. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/oauth/templates.py +0 -0
  66. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/storage/__init__.py +0 -0
  67. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/storage/base.py +0 -0
  68. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/auth/storage/generic.py +0 -0
  69. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/__init__.py +0 -0
  70. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/_settings_help.py +0 -0
  71. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/__init__.py +0 -0
  72. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/auth.py +0 -0
  73. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/config/__init__.py +0 -0
  74. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/config/commands.py +0 -0
  75. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/config/schema_commands.py +0 -0
  76. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/plugins.py +0 -0
  77. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/serve.py +0 -0
  78. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/commands/status.py +0 -0
  79. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/decorators.py +0 -0
  80. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/helpers.py +0 -0
  81. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/main.py +0 -0
  82. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/options/__init__.py +0 -0
  83. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/options/claude_options.py +0 -0
  84. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/options/core_options.py +0 -0
  85. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/options/security_options.py +0 -0
  86. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/cli/options/server_options.py +0 -0
  87. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/__init__.py +0 -0
  88. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/core.py +0 -0
  89. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/env_generator.py +0 -0
  90. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/runtime.py +0 -0
  91. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/security.py +0 -0
  92. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/settings.py +0 -0
  93. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/toml_generator.py +0 -0
  94. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/config/utils.py +0 -0
  95. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/__init__.py +0 -0
  96. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/async_task_manager.py +0 -0
  97. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/async_utils.py +0 -0
  98. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/auth/__init__.py +0 -0
  99. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/constants.py +0 -0
  100. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/errors.py +0 -0
  101. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/id_utils.py +0 -0
  102. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/interfaces.py +0 -0
  103. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/logging.py +0 -0
  104. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/middleware.py +0 -0
  105. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/__init__.py +0 -0
  106. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/cli_discovery.py +0 -0
  107. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/declaration.py +0 -0
  108. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/discovery.py +0 -0
  109. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/__init__.py +0 -0
  110. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/base.py +0 -0
  111. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/events.py +0 -0
  112. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/implementations/__init__.py +0 -0
  113. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/implementations/formatters/__init__.py +0 -0
  114. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/implementations/formatters/json.py +0 -0
  115. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/implementations/formatters/raw.py +0 -0
  116. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/implementations/http_tracer.py +0 -0
  117. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/layers.py +0 -0
  118. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/manager.py +0 -0
  119. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/registry.py +0 -0
  120. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/thread_manager.py +0 -0
  121. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/hooks/types.py +0 -0
  122. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/interfaces.py +0 -0
  123. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/loader.py +0 -0
  124. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/middleware.py +0 -0
  125. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/models.py +0 -0
  126. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/protocol.py +0 -0
  127. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/plugins/runtime.py +0 -0
  128. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/request_context.py +0 -0
  129. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/status_report.py +0 -0
  130. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/system.py +0 -0
  131. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/transformers.py +0 -0
  132. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/core/types.py +0 -0
  133. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/data/claude_headers_fallback.json +0 -0
  134. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/data/codex_headers_fallback.json +0 -0
  135. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/http/__init__.py +0 -0
  136. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/http/base.py +0 -0
  137. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/http/client.py +0 -0
  138. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/http/hooks.py +0 -0
  139. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/http/pool.py +0 -0
  140. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/__init__.py +0 -0
  141. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/__init__.py +0 -0
  142. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/errors.py +0 -0
  143. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/requests.py +0 -0
  144. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/anthropic_to_openai/responses.py +0 -0
  145. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/base.py +0 -0
  146. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/base_model.py +0 -0
  147. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/common/__init__.py +0 -0
  148. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/common/identifiers.py +0 -0
  149. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/common/streams.py +0 -0
  150. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/common/thinking.py +0 -0
  151. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/common/usage.py +0 -0
  152. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/constants.py +0 -0
  153. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/mapping.py +0 -0
  154. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/__init__.py +0 -0
  155. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/_helpers.py +0 -0
  156. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/errors.py +0 -0
  157. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/requests.py +0 -0
  158. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/responses.py +0 -0
  159. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_anthropic/streams.py +0 -0
  160. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/__init__.py +0 -0
  161. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/_helpers.py +0 -0
  162. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/errors.py +0 -0
  163. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/openai_to_openai/requests.py +0 -0
  164. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/formatters/utils.py +0 -0
  165. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/models/__init__.py +0 -0
  166. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/streaming/__init__.py +0 -0
  167. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/streaming/accumulators.py +0 -0
  168. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/streaming/formatters.py +0 -0
  169. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/llms/streaming/processors.py +0 -0
  170. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/models/__init__.py +0 -0
  171. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/models/detection.py +0 -0
  172. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/models/provider.py +0 -0
  173. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/README.md +0 -0
  174. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/__init__.py +0 -0
  175. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/config.py +0 -0
  176. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/formatter.py +0 -0
  177. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/hook.py +0 -0
  178. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/logger.py +0 -0
  179. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/plugin.py +0 -0
  180. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/access_log/writer.py +0 -0
  181. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/README.md +0 -0
  182. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/__init__.py +0 -0
  183. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/config.py +0 -0
  184. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/ingest.py +0 -0
  185. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/models.py +0 -0
  186. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/plugin.py +0 -0
  187. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/routes.py +0 -0
  188. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/analytics/service.py +0 -0
  189. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/README.md +0 -0
  190. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/__init__.py +0 -0
  191. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/config.py +0 -0
  192. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/detection_service.py +0 -0
  193. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/health.py +0 -0
  194. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/hooks.py +0 -0
  195. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/models.py +0 -0
  196. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/plugin.py +0 -0
  197. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/routes.py +0 -0
  198. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/streaming_metrics.py +0 -0
  199. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_api/tasks.py +0 -0
  200. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/README.md +0 -0
  201. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/__init__.py +0 -0
  202. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/adapter.py +0 -0
  203. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/auth.py +0 -0
  204. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/client.py +0 -0
  205. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/config.py +0 -0
  206. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/converter.py +0 -0
  207. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/detection_service.py +0 -0
  208. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/exceptions.py +0 -0
  209. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/handler.py +0 -0
  210. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/health.py +0 -0
  211. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/hooks.py +0 -0
  212. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/manager.py +0 -0
  213. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/message_queue.py +0 -0
  214. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/models.py +0 -0
  215. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/options.py +0 -0
  216. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/parser.py +0 -0
  217. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/plugin.py +0 -0
  218. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/routes.py +0 -0
  219. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/session_client.py +0 -0
  220. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/session_pool.py +0 -0
  221. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/stream_handle.py +0 -0
  222. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/stream_worker.py +0 -0
  223. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/streaming.py +0 -0
  224. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_sdk/tasks.py +0 -0
  225. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_shared/README.md +0 -0
  226. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_shared/__init__.py +0 -0
  227. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/claude_shared/model_defaults.py +0 -0
  228. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/README.md +0 -0
  229. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/__init__.py +0 -0
  230. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/health.py +0 -0
  231. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/hooks.py +0 -0
  232. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/model_defaults.py +0 -0
  233. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/models.py +0 -0
  234. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/streaming_metrics.py +0 -0
  235. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/tasks.py +0 -0
  236. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/utils/__init__.py +0 -0
  237. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/codex/utils/sse_parser.py +0 -0
  238. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/README.md +0 -0
  239. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/__init__.py +0 -0
  240. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/config.py +0 -0
  241. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/formatter.py +0 -0
  242. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/hook.py +0 -0
  243. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/command_replay/plugin.py +0 -0
  244. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/README.md +0 -0
  245. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/__init__.py +0 -0
  246. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/adapter.py +0 -0
  247. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/config.py +0 -0
  248. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/data/copilot_fallback.json +0 -0
  249. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/detection_service.py +0 -0
  250. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/manager.py +0 -0
  251. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/model_defaults.py +0 -0
  252. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/models.py +0 -0
  253. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/oauth/__init__.py +0 -0
  254. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/oauth/client.py +0 -0
  255. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/oauth/models.py +0 -0
  256. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/oauth/provider.py +0 -0
  257. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/oauth/storage.py +0 -0
  258. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/plugin.py +0 -0
  259. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/copilot/routes.py +0 -0
  260. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/README.md +0 -0
  261. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/__init__.py +0 -0
  262. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/config.py +0 -0
  263. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/factory.py +0 -0
  264. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/hook.py +0 -0
  265. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/manager.py +0 -0
  266. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/credential_balancer/plugin.py +0 -0
  267. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/dashboard/README.md +0 -0
  268. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/dashboard/__init__.py +0 -0
  269. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/dashboard/config.py +0 -0
  270. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/dashboard/plugin.py +0 -0
  271. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/dashboard/routes.py +0 -0
  272. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/README.md +0 -0
  273. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/__init__.py +0 -0
  274. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/adapter.py +0 -0
  275. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/config.py +0 -0
  276. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/docker_path.py +0 -0
  277. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/middleware.py +0 -0
  278. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/models.py +0 -0
  279. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/plugin.py +0 -0
  280. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/protocol.py +0 -0
  281. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/stream_process.py +0 -0
  282. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/docker/validators.py +0 -0
  283. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/README.md +0 -0
  284. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/__init__.py +0 -0
  285. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/config.py +0 -0
  286. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/plugin.py +0 -0
  287. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/routes.py +0 -0
  288. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/duckdb_storage/storage.py +0 -0
  289. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/README.md +0 -0
  290. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/__init__.py +0 -0
  291. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/adapter.py +0 -0
  292. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/config.py +0 -0
  293. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/models.py +0 -0
  294. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/plugin.py +0 -0
  295. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/service.py +0 -0
  296. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/max_tokens/token_limits.json +0 -0
  297. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/README.md +0 -0
  298. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/__init__.py +0 -0
  299. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/collector.py +0 -0
  300. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/config.py +0 -0
  301. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/grafana/dashboards/ccproxy-dashboard.json +0 -0
  302. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/hook.py +0 -0
  303. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/plugin.py +0 -0
  304. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/pushgateway.py +0 -0
  305. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/routes.py +0 -0
  306. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/metrics/tasks.py +0 -0
  307. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/README.md +0 -0
  308. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/__init__.py +0 -0
  309. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/client.py +0 -0
  310. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/config.py +0 -0
  311. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/manager.py +0 -0
  312. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/models.py +0 -0
  313. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/plugin.py +0 -0
  314. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/provider.py +0 -0
  315. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_claude/storage.py +0 -0
  316. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/README.md +0 -0
  317. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/__init__.py +0 -0
  318. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/client.py +0 -0
  319. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/config.py +0 -0
  320. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/manager.py +0 -0
  321. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/models.py +0 -0
  322. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/plugin.py +0 -0
  323. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/provider.py +0 -0
  324. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/oauth_codex/storage.py +0 -0
  325. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/README.md +0 -0
  326. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/__init__.py +0 -0
  327. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/config.py +0 -0
  328. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/handlers/__init__.py +0 -0
  329. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/handlers/cli.py +0 -0
  330. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/handlers/protocol.py +0 -0
  331. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/handlers/terminal.py +0 -0
  332. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/mcp.py +0 -0
  333. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/models.py +0 -0
  334. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/plugin.py +0 -0
  335. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/routes.py +0 -0
  336. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/service.py +0 -0
  337. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/ui/__init__.py +0 -0
  338. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/ui/permission_handler_protocol.py +0 -0
  339. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/permissions/ui/terminal_permission_handler.py +0 -0
  340. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/README.md +0 -0
  341. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/__init__.py +0 -0
  342. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/cache.py +0 -0
  343. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/config.py +0 -0
  344. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/exceptions.py +0 -0
  345. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/loader.py +0 -0
  346. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/models.py +0 -0
  347. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/plugin.py +0 -0
  348. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/service.py +0 -0
  349. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/tasks.py +0 -0
  350. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/updater.py +0 -0
  351. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/pricing/utils.py +0 -0
  352. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/request_tracer/README.md +0 -0
  353. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/request_tracer/__init__.py +0 -0
  354. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/request_tracer/config.py +0 -0
  355. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/request_tracer/hook.py +0 -0
  356. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/plugins/request_tracer/plugin.py +0 -0
  357. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/__init__.py +0 -0
  358. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/core.py +0 -0
  359. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/errors.py +0 -0
  360. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/manager.py +0 -0
  361. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/registry.py +0 -0
  362. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/scheduler/tasks.py +0 -0
  363. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/__init__.py +0 -0
  364. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/__init__.py +0 -0
  365. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/chain_composer.py +0 -0
  366. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/chain_validation.py +0 -0
  367. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/chat_accumulator.py +0 -0
  368. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/delta_utils.py +0 -0
  369. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/format_context.py +0 -0
  370. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/format_registry.py +0 -0
  371. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/http_adapter.py +0 -0
  372. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/protocols.py +0 -0
  373. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/adapters/simple_converters.py +0 -0
  374. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/auth_registry.py +0 -0
  375. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/cache/__init__.py +0 -0
  376. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/cache/response_cache.py +0 -0
  377. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/cli_detection.py +0 -0
  378. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/config/__init__.py +0 -0
  379. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/config/proxy_configuration.py +0 -0
  380. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/container.py +0 -0
  381. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/handler_config.py +0 -0
  382. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/interfaces.py +0 -0
  383. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/mocking/__init__.py +0 -0
  384. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/tracing/__init__.py +0 -0
  385. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/tracing/interfaces.py +0 -0
  386. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/services/tracing/null_tracer.py +0 -0
  387. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/__init__.py +0 -0
  388. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/buffer.py +0 -0
  389. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/deferred.py +0 -0
  390. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/handler.py +0 -0
  391. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/interfaces.py +0 -0
  392. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/simple_adapter.py +0 -0
  393. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/sse.py +0 -0
  394. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/streaming/sse_parser.py +0 -0
  395. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/templates/__init__.py +0 -0
  396. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/templates/plugin_scaffold.py +0 -0
  397. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/__init__.py +0 -0
  398. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/config.py +0 -0
  399. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/content_generation.py +0 -0
  400. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/__init__.py +0 -0
  401. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/cli.py +0 -0
  402. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/config.py +0 -0
  403. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/console.py +0 -0
  404. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/models.py +0 -0
  405. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/runner.py +0 -0
  406. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/endpoints/tools.py +0 -0
  407. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/mock_responses.py +0 -0
  408. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/response_handlers.py +0 -0
  409. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/testing/scenarios.py +0 -0
  410. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/__init__.py +0 -0
  411. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/binary_resolver.py +0 -0
  412. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/caching.py +0 -0
  413. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/cli_logging.py +0 -0
  414. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/command_line.py +0 -0
  415. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/headers.py +0 -0
  416. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/id_generator.py +0 -0
  417. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/model_mapper.py +0 -0
  418. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/startup_helpers.py +0 -0
  419. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/ccproxy/utils/version_checker.py +0 -0
  420. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/examples/README.md +0 -0
  421. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/tests/factories/README.md +0 -0
  422. {ccproxy_api-0.2.4 → ccproxy_api-0.2.6}/tests/fixtures/README.md +0 -0
@@ -1,42 +1,42 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ccproxy-api
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
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
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
7
- Requires-Dist: aiofiles>=24.1.0
8
- Requires-Dist: fastapi[standard]>=0.115.14
7
+ Requires-Dist: aiofiles>=25.1.0
8
+ Requires-Dist: fastapi[standard]>=0.119.0
9
9
  Requires-Dist: httpx[http2]>=0.28.1
10
10
  Requires-Dist: packaging>=25.0
11
- Requires-Dist: pydantic-settings>=2.4.0
12
- Requires-Dist: pydantic>=2.8.0
11
+ Requires-Dist: pydantic-settings>=2.11.0
12
+ Requires-Dist: pydantic>=2.12.2
13
13
  Requires-Dist: pyjwt>=2.10.1
14
- Requires-Dist: rich-toolkit>=0.14.8
15
- Requires-Dist: rich>=13.0.0
14
+ Requires-Dist: rich-toolkit>=0.15.1
15
+ Requires-Dist: rich>=14.2.0
16
16
  Requires-Dist: sortedcontainers>=2.4.0
17
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
18
+ Requires-Dist: typer>=0.19.2
19
+ Requires-Dist: typing-extensions>=4.15.0
20
+ Requires-Dist: uvicorn>=0.37.0
21
21
  Provides-Extra: plugins-claude
22
- Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'plugins-claude'
23
- Requires-Dist: keyring>=25.0.0; extra == 'plugins-claude'
22
+ Requires-Dist: claude-agent-sdk>=0.1.4; extra == 'plugins-claude'
23
+ Requires-Dist: keyring>=25.7.0; extra == 'plugins-claude'
24
24
  Requires-Dist: qrcode>=8.2; extra == 'plugins-claude'
25
25
  Provides-Extra: plugins-codex
26
26
  Requires-Dist: pyjwt>=2.10.1; extra == 'plugins-codex'
27
27
  Requires-Dist: qrcode>=8.2; extra == 'plugins-codex'
28
28
  Provides-Extra: plugins-mcp
29
- Requires-Dist: fastapi-mcp>=0.3.7; extra == 'plugins-mcp'
29
+ Requires-Dist: fastapi-mcp>=0.4.0; extra == 'plugins-mcp'
30
30
  Provides-Extra: plugins-metrics
31
- Requires-Dist: prometheus-client>=0.22.1; extra == 'plugins-metrics'
31
+ Requires-Dist: prometheus-client>=0.23.1; extra == 'plugins-metrics'
32
32
  Provides-Extra: plugins-storage
33
33
  Requires-Dist: duckdb-engine>=0.17.0; extra == 'plugins-storage'
34
- Requires-Dist: duckdb<1.4.0,>=1.1.0; extra == 'plugins-storage'
35
- Requires-Dist: sqlalchemy>=2.0.0; extra == 'plugins-storage'
36
- Requires-Dist: sqlmodel>=0.0.24; extra == 'plugins-storage'
34
+ Requires-Dist: duckdb>=1.3.2; extra == 'plugins-storage'
35
+ Requires-Dist: sqlalchemy>=2.0.44; extra == 'plugins-storage'
36
+ Requires-Dist: sqlmodel>=0.0.27; extra == 'plugins-storage'
37
37
  Provides-Extra: plugins-tui
38
- Requires-Dist: aioconsole>=0.8.1; extra == 'plugins-tui'
39
- Requires-Dist: textual>=3.7.1; extra == 'plugins-tui'
38
+ Requires-Dist: aioconsole>=0.8.2; extra == 'plugins-tui'
39
+ Requires-Dist: textual>=6.3.0; extra == 'plugins-tui'
40
40
  Description-Content-Type: text/markdown
41
41
 
42
42
  # CCProxy API Server
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.2.4'
32
- __version_tuple__ = version_tuple = (0, 2, 4)
31
+ __version__ = version = '0.2.6'
32
+ __version_tuple__ = version_tuple = (0, 2, 6)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -14,6 +14,7 @@ from fastapi import APIRouter
14
14
  from ccproxy.models.provider import ProviderConfig
15
15
  from ccproxy.services.adapters.base import BaseAdapter
16
16
  from ccproxy.services.adapters.http_adapter import BaseHTTPAdapter
17
+ from ccproxy.services.adapters.mock_adapter import MockAdapter
17
18
  from ccproxy.services.interfaces import (
18
19
  IMetricsCollector,
19
20
  IRequestTracer,
@@ -104,6 +105,7 @@ class BaseProviderPluginFactory(ProviderPluginFactory):
104
105
  cli_commands: list[CliCommandSpec] = []
105
106
  cli_arguments: list[CliArgumentSpec] = []
106
107
  tool_accumulator_class: type | None = None
108
+ use_mock_adapter_in_bypass_mode: bool = True
107
109
 
108
110
  def __init__(self) -> None:
109
111
  """Initialize factory with manifest built from class attributes."""
@@ -215,6 +217,24 @@ class BaseProviderPluginFactory(ProviderPluginFactory):
215
217
  Returns:
216
218
  Adapter instance
217
219
  """
220
+ settings = context.get("settings")
221
+ service_container = context.get("service_container")
222
+ if settings and getattr(settings.server, "bypass_mode", False):
223
+ if not service_container:
224
+ raise RuntimeError(
225
+ f"Cannot initialize plugin '{self.plugin_name}' in bypass mode: "
226
+ "service container is required to create mock adapter. "
227
+ "This is likely a configuration issue."
228
+ )
229
+ logger.warning(
230
+ "plugin_bypass_mode_enabled",
231
+ plugin=self.plugin_name,
232
+ adapter=self.adapter_class.__name__,
233
+ category="lifecycle",
234
+ )
235
+ if self.use_mock_adapter_in_bypass_mode:
236
+ return MockAdapter(service_container.get_mock_handler())
237
+
218
238
  # Extract services from context (one-time extraction)
219
239
  http_pool_manager: HTTPPoolManager | None = cast(
220
240
  "HTTPPoolManager | None", context.get("http_pool_manager")
@@ -232,7 +252,6 @@ class BaseProviderPluginFactory(ProviderPluginFactory):
232
252
  config = context.get("config")
233
253
 
234
254
  # Get all adapter dependencies from service container
235
- service_container = context.get("service_container")
236
255
  if not service_container:
237
256
  raise RuntimeError("Service container is required for adapter services")
238
257
 
@@ -268,6 +287,8 @@ class BaseProviderPluginFactory(ProviderPluginFactory):
268
287
  if hasattr(context, "get")
269
288
  else None,
270
289
  }
290
+ if settings and getattr(settings.server, "bypass_mode", False):
291
+ adapter_kwargs["mock_handler"] = service_container.get_mock_handler()
271
292
  if self.tool_accumulator_class:
272
293
  adapter_kwargs["tool_accumulator_class"] = self.tool_accumulator_class
273
294
 
@@ -303,6 +324,9 @@ class BaseProviderPluginFactory(ProviderPluginFactory):
303
324
  "model_mapper": context.get("model_mapper")
304
325
  if hasattr(context, "get")
305
326
  else None,
327
+ "mock_handler": service_container.get_mock_handler()
328
+ if settings and getattr(settings.server, "bypass_mode", False)
329
+ else None,
306
330
  }
307
331
  if self.tool_accumulator_class:
308
332
  non_http_adapter_kwargs["tool_accumulator_class"] = (
@@ -42,3 +42,33 @@ def build_openai_tool_call(
42
42
  arguments=str(args_str),
43
43
  ),
44
44
  )
45
+
46
+
47
+ def build_openai_tool_call_chunk(
48
+ *,
49
+ index: int,
50
+ tool_id: str | None,
51
+ tool_name: str | None,
52
+ tool_input: Any,
53
+ arguments: Any = None,
54
+ fallback_index: int = 0,
55
+ ) -> openai_models.ToolCallChunk:
56
+ args_str = (
57
+ arguments
58
+ if isinstance(arguments, str) and arguments
59
+ else serialize_tool_arguments(tool_input)
60
+ )
61
+ call_id = (
62
+ tool_id if isinstance(tool_id, str) and tool_id else f"call_{fallback_index}"
63
+ )
64
+ name = tool_name if isinstance(tool_name, str) and tool_name else "function"
65
+
66
+ return openai_models.ToolCallChunk(
67
+ index=index,
68
+ id=str(call_id),
69
+ type="function",
70
+ function=openai_models.FunctionCall(
71
+ name=str(name),
72
+ arguments=str(args_str),
73
+ ),
74
+ )
@@ -27,7 +27,7 @@ from ccproxy.llms.models import anthropic as anthropic_models
27
27
  from ccproxy.llms.models import openai as openai_models
28
28
  from ccproxy.llms.streaming.accumulators import ClaudeAccumulator
29
29
 
30
- from ._helpers import build_openai_tool_call
30
+ from ._helpers import build_openai_tool_call_chunk
31
31
  from .requests import _build_responses_payload_from_anthropic_request
32
32
  from .responses import convert__anthropic_usage_to_openai_responses__usage
33
33
 
@@ -88,10 +88,10 @@ def _anthropic_delta_to_text(
88
88
  return None
89
89
 
90
90
 
91
- def _build_openai_tool_call(
91
+ def _build_openai_tool_call_chunk(
92
92
  accumulator: ClaudeAccumulator,
93
93
  block_index: int,
94
- ) -> openai_models.ToolCall | None:
94
+ ) -> openai_models.ToolCallChunk | None:
95
95
  for tool_call in accumulator.get_complete_tool_calls():
96
96
  if tool_call.get("index") != block_index:
97
97
  continue
@@ -102,7 +102,8 @@ def _build_openai_tool_call(
102
102
  tool_name = function_payload.get("name") or tool_call.get("name")
103
103
  arguments = function_payload.get("arguments")
104
104
 
105
- return build_openai_tool_call(
105
+ return build_openai_tool_call_chunk(
106
+ index=tool_call.get("index", block_index),
106
107
  tool_id=tool_call.get("id"),
107
108
  tool_name=tool_name,
108
109
  tool_input=tool_call.get("input", {}),
@@ -1413,7 +1414,7 @@ class AnthropicToOpenAIChatStreamAdapter:
1413
1414
  continue
1414
1415
  if block_index in emitted_tool_indices:
1415
1416
  continue
1416
- tool_call = _build_openai_tool_call(accumulator, block_index)
1417
+ tool_call = _build_openai_tool_call_chunk(accumulator, block_index)
1417
1418
  if tool_call is None:
1418
1419
  continue
1419
1420
  emitted_tool_indices.add(block_index)
@@ -11,6 +11,9 @@ _INSTRUCTIONS_VAR: ContextVar[str | None] = ContextVar(
11
11
  "formatter_instructions", default=None
12
12
  )
13
13
  _TOOLS_VAR: ContextVar[list[Any] | None] = ContextVar("formatter_tools", default=None)
14
+ _OPENAI_THINKING_XML_VAR: ContextVar[bool | None] = ContextVar(
15
+ "formatter_openai_thinking_xml", default=None
16
+ )
14
17
 
15
18
 
16
19
  def register_request(request: Any | None, instructions: str | None = None) -> None:
@@ -114,3 +117,24 @@ def get_last_request_tools() -> list[Any] | None:
114
117
 
115
118
  cached = _TOOLS_VAR.get()
116
119
  return list(cached) if cached else None
120
+
121
+
122
+ def register_openai_thinking_xml(enabled: bool | None) -> None:
123
+ """Cache OpenAI thinking serialization preference for active conversions.
124
+
125
+ Args:
126
+ enabled: Whether thinking blocks should be serialized with XML wrappers.
127
+ ``None`` means downstream conversion logic should use its default.
128
+
129
+ Note:
130
+ The value is stored in a ``ContextVar``, so concurrent async requests
131
+ keep independent preferences without leaking into each other.
132
+ """
133
+
134
+ _OPENAI_THINKING_XML_VAR.set(enabled)
135
+
136
+
137
+ def get_openai_thinking_xml() -> bool | None:
138
+ """Return the OpenAI thinking serialization preference for active conversions."""
139
+
140
+ return _OPENAI_THINKING_XML_VAR.get()
@@ -15,6 +15,7 @@ from ccproxy.llms.formatters.common import (
15
15
  convert_openai_responses_usage_to_completion_usage,
16
16
  merge_thinking_segments,
17
17
  )
18
+ from ccproxy.llms.formatters.context import get_openai_thinking_xml
18
19
  from ccproxy.llms.models import openai as openai_models
19
20
 
20
21
  from ._helpers import (
@@ -333,6 +334,10 @@ def convert__openai_responses_to_openai_chat__response(
333
334
  response: openai_models.ResponseObject,
334
335
  ) -> openai_models.ChatCompletionResponse:
335
336
  """Convert an OpenAI ResponseObject to a ChatCompletionResponse."""
337
+ include_thinking = get_openai_thinking_xml()
338
+ if include_thinking is None:
339
+ include_thinking = True
340
+
336
341
  text_segments: list[str] = []
337
342
  added_reasoning: set[tuple[str, str]] = set()
338
343
  tool_calls: list[openai_models.ToolCall] = []
@@ -353,7 +358,7 @@ def convert__openai_responses_to_openai_chat__response(
353
358
  if thinking_text and len(thinking_text) > 30
354
359
  else thinking_text,
355
360
  )
356
- if thinking_text:
361
+ if include_thinking and thinking_text:
357
362
  key = (signature or "", thinking_text)
358
363
  if key not in added_reasoning:
359
364
  text_segments.append(_wrap_thinking(signature, thinking_text))
@@ -27,16 +27,14 @@ from ccproxy.llms.formatters.context import (
27
27
  get_last_instructions,
28
28
  get_last_request,
29
29
  get_last_request_tools,
30
+ get_openai_thinking_xml,
30
31
  register_request,
31
32
  register_request_tools,
32
33
  )
33
34
  from ccproxy.llms.models import openai as openai_models
34
35
  from ccproxy.llms.streaming.accumulators import OpenAIAccumulator
35
36
 
36
- from ._helpers import (
37
- _convert_tools_chat_to_responses,
38
- _get_attr,
39
- )
37
+ from ._helpers import _convert_tools_chat_to_responses, _get_attr
40
38
  from .requests import _build_responses_payload_from_chat_request
41
39
  from .responses import (
42
40
  _collect_reasoning_segments,
@@ -61,6 +59,10 @@ class OpenAIResponsesToChatStreamAdapter:
61
59
  async def generator() -> AsyncGenerator[
62
60
  openai_models.ChatCompletionChunk, None
63
61
  ]:
62
+ include_thinking = get_openai_thinking_xml()
63
+ if include_thinking is None:
64
+ include_thinking = True
65
+
64
66
  model_id = ""
65
67
  role_sent = False
66
68
 
@@ -387,7 +389,8 @@ class OpenAIResponsesToChatStreamAdapter:
387
389
 
388
390
  # Emit initial tool call chunk to surface id/name information
389
391
  if not state.initial_emitted:
390
- tool_call = openai_models.ToolCall(
392
+ tool_call = openai_models.ToolCallChunk(
393
+ index=state.index,
391
394
  id=state.id,
392
395
  type="function",
393
396
  function=openai_models.FunctionCall(
@@ -440,7 +443,8 @@ class OpenAIResponsesToChatStreamAdapter:
440
443
  state.name = guessed
441
444
 
442
445
  if state.initial_emitted:
443
- tool_call = openai_models.ToolCall(
446
+ tool_call = openai_models.ToolCallChunk(
447
+ index=state.index,
444
448
  id=state.id,
445
449
  type="function",
446
450
  function=openai_models.FunctionCall(
@@ -492,7 +496,8 @@ class OpenAIResponsesToChatStreamAdapter:
492
496
  if guessed:
493
497
  state.name = guessed
494
498
 
495
- tool_call = openai_models.ToolCall(
499
+ tool_call = openai_models.ToolCallChunk(
500
+ index=state.index,
496
501
  id=state.id,
497
502
  type="function",
498
503
  function=openai_models.FunctionCall(
@@ -537,7 +542,7 @@ class OpenAIResponsesToChatStreamAdapter:
537
542
  for entry in summary_list:
538
543
  text = _get_attr(entry, "text")
539
544
  signature = _get_attr(entry, "signature")
540
- if isinstance(text, str) and text:
545
+ if include_thinking and isinstance(text, str) and text:
541
546
  chunk_text = _wrap_thinking(signature, text)
542
547
  sequence_counter += 1
543
548
  yield openai_models.ChatCompletionChunk(
@@ -584,7 +589,8 @@ class OpenAIResponsesToChatStreamAdapter:
584
589
  if guessed:
585
590
  state.name = guessed
586
591
  if not state.arguments_emitted:
587
- tool_call = openai_models.ToolCall(
592
+ tool_call = openai_models.ToolCallChunk(
593
+ index=state.index,
588
594
  id=state.id,
589
595
  type="function",
590
596
  function=openai_models.FunctionCall(
@@ -614,7 +620,8 @@ class OpenAIResponsesToChatStreamAdapter:
614
620
 
615
621
  # Emit a patch chunk if the name was never surfaced earlier
616
622
  if state.name and not state.name_emitted:
617
- tool_call = openai_models.ToolCall(
623
+ tool_call = openai_models.ToolCallChunk(
624
+ index=state.index,
618
625
  id=state.id,
619
626
  type="function",
620
627
  function=openai_models.FunctionCall(
@@ -352,8 +352,16 @@ class ThinkingConfigDisabled(ThinkingConfigBase):
352
352
  type: Literal["disabled"] = Field(default="disabled", alias="type")
353
353
 
354
354
 
355
+ class ThinkingConfigAdaptive(ThinkingConfigBase):
356
+ """Configuration for adaptive thinking (Claude 4-6+)."""
357
+
358
+ type: Literal["adaptive"] = Field(default="adaptive", alias="type")
359
+ display: Literal["summarized", "omitted"] | None = None
360
+
361
+
355
362
  ThinkingConfig = Annotated[
356
- ThinkingConfigEnabled | ThinkingConfigDisabled, Field(discriminator="type")
363
+ ThinkingConfigEnabled | ThinkingConfigDisabled | ThinkingConfigAdaptive,
364
+ Field(discriminator="type"),
357
365
  ]
358
366
 
359
367
 
@@ -185,11 +185,22 @@ class FunctionCall(LlmBaseModel):
185
185
 
186
186
 
187
187
  class ToolCall(LlmBaseModel):
188
+ """Non-streaming tool call (ChatCompletionMessageToolCall)."""
189
+
188
190
  id: str
189
191
  type: Literal["function"] = Field(default="function")
190
192
  function: FunctionCall
191
193
 
192
194
 
195
+ class ToolCallChunk(LlmBaseModel):
196
+ """Streaming tool call delta (ChoiceDeltaToolCall)."""
197
+
198
+ index: int
199
+ id: str | None = None
200
+ type: Literal["function"] | None = None
201
+ function: FunctionCall | None = None
202
+
203
+
193
204
  class ChatMessage(LlmBaseModel):
194
205
  """
195
206
  A message within a chat conversation.
@@ -309,7 +320,7 @@ class ChatCompletionResponse(LlmBaseModel):
309
320
  class DeltaMessage(LlmBaseModel):
310
321
  role: Literal["assistant"] | None = None
311
322
  content: str | list[Any] | None = None
312
- tool_calls: list[ToolCall] | None = None
323
+ tool_calls: list[ToolCallChunk] | None = None
313
324
  audio: dict[str, Any] | None = None
314
325
  reasoning: ResponseMessageReasoning | None = None
315
326
 
@@ -85,15 +85,14 @@ class ClaudeAPIAdapter(BaseHTTPAdapter):
85
85
  # Always set Authorization from OAuth-managed access token
86
86
  filtered_headers["authorization"] = f"Bearer {token_value}"
87
87
 
88
- # PATCH: Add Computer Use beta headers for Anthropic API
89
- # These are required for browser automation tools to work
88
+ # Minimal beta tags required for OAuth-based Claude Code auth
90
89
  filtered_headers["anthropic-version"] = "2023-06-01"
91
- filtered_headers["anthropic-beta"] = "computer-use-2025-01-24"
90
+ filtered_headers["anthropic-beta"] = "claude-code-20250219,oauth-2025-04-20"
92
91
 
93
- # Add CLI headers if available, but never allow overriding auth
92
+ # Add CLI headers if available, but never allow overriding auth or beta
94
93
  cli_headers = self._collect_cli_headers()
95
94
  if cli_headers:
96
- blocked_overrides = {"authorization", "x-api-key"}
95
+ blocked_overrides = {"authorization", "x-api-key", "anthropic-beta"}
97
96
  for key, value in cli_headers.items():
98
97
  lk = key.lower()
99
98
  if lk in blocked_overrides: