ccproxy-api 0.2.2__tar.gz → 0.2.3__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.
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/PKG-INFO +2 -1
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/_version.py +2 -2
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/storage.py +103 -8
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/pyproject.toml +2 -1
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/.gitignore +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/LICENSE +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/__main__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/app.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/bootstrap.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/decorators.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/dependencies.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/format_validation.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/cors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/normalize_headers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/request_id.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/middleware/streaming_hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/routes/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/routes/health.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/api/routes/plugins.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/bearer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/dependencies.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/exceptions.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/managers/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/managers/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/managers/base_enhanced.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/managers/token_snapshot.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/models/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/models/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/models/credentials.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/cli_errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/flows.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/protocol.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/registry.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/router.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/session.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/oauth/templates.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/storage/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/storage/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/auth/storage/generic.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/_settings_help.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/auth.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/config/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/config/commands.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/config/schema_commands.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/plugins.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/serve.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/commands/status.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/decorators.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/helpers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/main.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/options/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/options/claude_options.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/options/core_options.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/options/security_options.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/cli/options/server_options.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/core.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/env_generator.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/runtime.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/security.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/settings.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/toml_generator.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/config/utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/async_task_manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/async_utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/auth/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/constants.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/id_utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/interfaces.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/logging.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/middleware.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/cli_discovery.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/declaration.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/discovery.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/factories.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/events.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/formatters/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/formatters/json.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/formatters/raw.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/http_tracer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/layers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/registry.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/thread_manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/types.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/interfaces.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/loader.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/middleware.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/protocol.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/runtime.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/request_context.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/status_report.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/system.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/transformers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/types.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/data/claude_headers_fallback.json +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/data/codex_headers_fallback.json +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/http/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/http/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/http/client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/http/hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/http/pool.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/_helpers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/requests.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/responses.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/streams.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/base_model.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/common/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/common/identifiers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/common/streams.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/common/thinking.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/common/usage.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/constants.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/context.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/mapping.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/_helpers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/requests.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/responses.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/streams.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/_helpers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/requests.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/responses.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/streams.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/models/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/models/anthropic.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/models/openai.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/streaming/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/streaming/accumulators.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/streaming/formatters.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/streaming/processors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/models/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/models/detection.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/models/provider.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/formatter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/hook.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/logger.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/access_log/writer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/ingest.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/analytics/service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/detection_service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/health.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/streaming_metrics.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_api/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/auth.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/converter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/detection_service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/exceptions.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/handler.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/health.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/message_queue.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/options.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/parser.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/session_client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/session_pool.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/stream_handle.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/stream_worker.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/streaming.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_sdk/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_shared/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_shared/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/claude_shared/model_defaults.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/detection_service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/health.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/hooks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/model_defaults.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/streaming_metrics.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/utils/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/codex/utils/sse_parser.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/formatter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/hook.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/command_replay/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/data/copilot_fallback.json +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/detection_service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/model_defaults.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/oauth/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/oauth/client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/oauth/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/oauth/provider.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/oauth/storage.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/copilot/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/factory.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/hook.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/credential_balancer/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/dashboard/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/dashboard/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/dashboard/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/dashboard/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/dashboard/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/docker_path.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/middleware.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/protocol.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/stream_process.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/docker/validators.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/duckdb_storage/storage.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/max_tokens/token_limits.json +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/collector.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/grafana/dashboards/ccproxy-dashboard.json +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/hook.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/pushgateway.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/metrics/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_claude/provider.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/client.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/provider.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/oauth_codex/storage.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/handlers/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/handlers/cli.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/handlers/protocol.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/handlers/terminal.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/mcp.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/routes.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/ui/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/ui/permission_handler_protocol.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/permissions/ui/terminal_permission_handler.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/cache.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/exceptions.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/loader.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/service.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/updater.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/pricing/utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/request_tracer/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/request_tracer/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/request_tracer/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/request_tracer/hook.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/plugins/request_tracer/plugin.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/core.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/errors.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/manager.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/registry.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/scheduler/tasks.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/base.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/chain_composer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/chain_validation.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/chat_accumulator.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/delta_utils.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/format_adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/format_context.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/format_registry.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/http_adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/mock_adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/protocols.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/adapters/simple_converters.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/auth_registry.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/cache/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/cache/response_cache.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/cli_detection.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/config/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/config/proxy_configuration.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/container.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/factories.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/handler_config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/interfaces.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/mocking/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/mocking/mock_handler.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/tracing/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/tracing/interfaces.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/services/tracing/null_tracer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/buffer.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/deferred.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/handler.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/interfaces.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/simple_adapter.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/sse.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/streaming/sse_parser.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/templates/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/templates/plugin_scaffold.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/content_generation.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/cli.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/config.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/console.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/models.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/runner.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/endpoints/tools.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/mock_responses.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/response_handlers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/testing/scenarios.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/__init__.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/binary_resolver.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/caching.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/cli_logging.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/command_line.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/headers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/id_generator.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/model_mapper.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/startup_helpers.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/utils/version_checker.py +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/examples/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/tests/factories/README.md +0 -0
- {ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/tests/fixtures/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ccproxy-api
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
@@ -20,6 +20,7 @@ Requires-Dist: typing-extensions>=4.0.0
|
|
|
20
20
|
Requires-Dist: uvicorn>=0.34.0
|
|
21
21
|
Provides-Extra: plugins-claude
|
|
22
22
|
Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'plugins-claude'
|
|
23
|
+
Requires-Dist: keyring>=25.0.0; extra == 'plugins-claude'
|
|
23
24
|
Requires-Dist: qrcode>=8.2; extra == 'plugins-claude'
|
|
24
25
|
Provides-Extra: plugins-codex
|
|
25
26
|
Requires-Dist: pyjwt>=2.10.1; extra == 'plugins-codex'
|
|
@@ -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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
31
|
+
__version__ = version = '0.2.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 3)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -15,6 +15,77 @@ from .models import ClaudeCredentials, ClaudeProfileInfo
|
|
|
15
15
|
logger = get_plugin_logger()
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
# Keychain service name used by Claude Code
|
|
19
|
+
KEYCHAIN_SERVICE = "Claude Code"
|
|
20
|
+
KEYCHAIN_ACCOUNT = "credentials"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _is_keyring_available() -> bool:
|
|
24
|
+
"""Check if keyring library is available."""
|
|
25
|
+
try:
|
|
26
|
+
import keyring # noqa: F401
|
|
27
|
+
|
|
28
|
+
return True
|
|
29
|
+
except ImportError:
|
|
30
|
+
return False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
async def _read_from_keychain() -> dict[str, Any] | None:
|
|
34
|
+
"""Read Claude credentials from system keychain.
|
|
35
|
+
|
|
36
|
+
Claude Code stores OAuth credentials in the system keychain and intentionally
|
|
37
|
+
deletes the plain text ~/.claude/.credentials.json file for security.
|
|
38
|
+
See: https://github.com/anthropics/claude-code/issues/1414
|
|
39
|
+
|
|
40
|
+
Uses the keyring library which supports:
|
|
41
|
+
- macOS Keychain
|
|
42
|
+
- Windows Credential Manager
|
|
43
|
+
- Linux Secret Service (GNOME Keyring, KDE Wallet)
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Parsed credentials dict or None if not found or keyring unavailable
|
|
47
|
+
"""
|
|
48
|
+
if not _is_keyring_available():
|
|
49
|
+
logger.debug(
|
|
50
|
+
"keyring_not_available",
|
|
51
|
+
hint="Install keyring package for system keychain support",
|
|
52
|
+
category="auth",
|
|
53
|
+
)
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
def read_keychain() -> dict[str, Any] | None:
|
|
57
|
+
try:
|
|
58
|
+
import keyring
|
|
59
|
+
|
|
60
|
+
password = keyring.get_password(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT)
|
|
61
|
+
if password:
|
|
62
|
+
parsed = json.loads(password)
|
|
63
|
+
if isinstance(parsed, dict):
|
|
64
|
+
return parsed
|
|
65
|
+
logger.debug(
|
|
66
|
+
"keychain_invalid_format",
|
|
67
|
+
expected="dict",
|
|
68
|
+
got=type(parsed).__name__,
|
|
69
|
+
category="auth",
|
|
70
|
+
)
|
|
71
|
+
except json.JSONDecodeError as e:
|
|
72
|
+
logger.debug(
|
|
73
|
+
"keychain_json_decode_error",
|
|
74
|
+
error=str(e),
|
|
75
|
+
category="auth",
|
|
76
|
+
)
|
|
77
|
+
except Exception as e:
|
|
78
|
+
logger.debug(
|
|
79
|
+
"keychain_read_error",
|
|
80
|
+
error=str(e),
|
|
81
|
+
error_type=type(e).__name__,
|
|
82
|
+
category="auth",
|
|
83
|
+
)
|
|
84
|
+
return None
|
|
85
|
+
|
|
86
|
+
return await asyncio.to_thread(read_keychain)
|
|
87
|
+
|
|
88
|
+
|
|
18
89
|
class ClaudeOAuthStorage(BaseJsonStorage[ClaudeCredentials]):
|
|
19
90
|
"""Claude OAuth-specific token storage implementation."""
|
|
20
91
|
|
|
@@ -61,24 +132,48 @@ class ClaudeOAuthStorage(BaseJsonStorage[ClaudeCredentials]):
|
|
|
61
132
|
return False
|
|
62
133
|
|
|
63
134
|
async def load(self) -> ClaudeCredentials | None:
|
|
64
|
-
"""Load Claude credentials.
|
|
135
|
+
"""Load Claude credentials from file or system keychain.
|
|
136
|
+
|
|
137
|
+
Claude Code stores credentials in the system keychain and intentionally
|
|
138
|
+
deletes the plain text file for security. This method tries file first,
|
|
139
|
+
then falls back to the system keychain (macOS Keychain, Windows Credential
|
|
140
|
+
Manager, or Linux Secret Service).
|
|
65
141
|
|
|
66
142
|
Returns:
|
|
67
143
|
Stored credentials or None
|
|
68
144
|
"""
|
|
69
145
|
try:
|
|
70
|
-
#
|
|
146
|
+
# Try file first (works on all platforms, manual setups)
|
|
71
147
|
data = await self._read_json()
|
|
72
|
-
if
|
|
73
|
-
|
|
148
|
+
if data:
|
|
149
|
+
credentials = ClaudeCredentials.model_validate(data)
|
|
150
|
+
logger.debug(
|
|
151
|
+
"claude_oauth_credentials_loaded",
|
|
152
|
+
has_oauth=bool(credentials.claude_ai_oauth),
|
|
153
|
+
source="file",
|
|
154
|
+
category="auth",
|
|
155
|
+
)
|
|
156
|
+
return credentials
|
|
157
|
+
|
|
158
|
+
# Fallback to system keychain (where Claude Code stores credentials)
|
|
159
|
+
keychain_data = await _read_from_keychain()
|
|
160
|
+
if keychain_data:
|
|
161
|
+
credentials = ClaudeCredentials.model_validate(keychain_data)
|
|
162
|
+
logger.debug(
|
|
163
|
+
"claude_oauth_credentials_loaded",
|
|
164
|
+
has_oauth=bool(credentials.claude_ai_oauth),
|
|
165
|
+
source="keychain",
|
|
166
|
+
category="auth",
|
|
167
|
+
)
|
|
168
|
+
return credentials
|
|
74
169
|
|
|
75
|
-
credentials = ClaudeCredentials.model_validate(data)
|
|
76
170
|
logger.debug(
|
|
77
|
-
"
|
|
78
|
-
|
|
171
|
+
"claude_oauth_credentials_not_found",
|
|
172
|
+
checked_file=str(self.file_path),
|
|
173
|
+
checked_keychain=_is_keyring_available(),
|
|
79
174
|
category="auth",
|
|
80
175
|
)
|
|
81
|
-
return
|
|
176
|
+
return None
|
|
82
177
|
except Exception as e:
|
|
83
178
|
logger.error(
|
|
84
179
|
"claude_oauth_credentials_load_error",
|
|
@@ -92,10 +92,11 @@ dev = [
|
|
|
92
92
|
"bandit",
|
|
93
93
|
"types-aiofiles>=24.0.0",
|
|
94
94
|
"types-PyYAML>=6.0.12.12",
|
|
95
|
+
"keyring>=25.0.0",
|
|
95
96
|
]
|
|
96
97
|
|
|
97
98
|
[project.optional-dependencies]
|
|
98
|
-
plugins-claude = ["claude-agent-sdk>=0.1.0", "qrcode>=8.2"]
|
|
99
|
+
plugins-claude = ["claude-agent-sdk>=0.1.0", "qrcode>=8.2", "keyring>=25.0.0"]
|
|
99
100
|
plugins-codex = ["qrcode>=8.2", "pyjwt>=2.10.1"]
|
|
100
101
|
plugins-storage = [
|
|
101
102
|
"sqlmodel>=0.0.24",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/formatters/raw.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/core/plugins/hooks/implementations/http_tracer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/__init__.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/_helpers.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/errors.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/requests.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/responses.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/anthropic_to_openai/streams.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/__init__.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/_helpers.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/errors.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/requests.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/responses.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_anthropic/streams.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/__init__.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/requests.py
RENAMED
|
File without changes
|
{ccproxy_api-0.2.2 → ccproxy_api-0.2.3}/ccproxy/llms/formatters/openai_to_openai/responses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|