SYMBOL INDEX (370 symbols across 46 files) FILE: app/api/routes/accounts.py class OAuthTokenCreate (line 14) | class OAuthTokenCreate(BaseModel): class AccountCreate (line 20) | class AccountCreate(BaseModel): class AccountUpdate (line 27) | class AccountUpdate(BaseModel): class OAuthCodeExchange (line 34) | class OAuthCodeExchange(BaseModel): class AccountResponse (line 41) | class AccountResponse(BaseModel): function list_accounts (line 58) | async def list_accounts(_: AdminAuthDep): function get_account (line 84) | async def get_account(organization_uuid: str, _: AdminAuthDep): function create_account (line 108) | async def create_account(account_data: AccountCreate, _: AdminAuthDep): function update_account (line 142) | async def update_account( function delete_account (line 205) | async def delete_account(organization_uuid: str, _: AdminAuthDep): function exchange_oauth_code (line 216) | async def exchange_oauth_code(exchange_data: OAuthCodeExchange, _: Admin... FILE: app/api/routes/claude.py function create_message (line 29) | async def create_message( FILE: app/api/routes/settings.py class SettingsRead (line 11) | class SettingsRead(BaseModel): class SettingsUpdate (line 37) | class SettingsUpdate(BaseModel): function get_settings (line 67) | async def get_settings(_: AdminAuthDep) -> Settings: function update_settings (line 73) | async def update_settings(_: AdminAuthDep, updates: SettingsUpdate) -> S... FILE: app/api/routes/statistics.py class AccountStats (line 9) | class AccountStats(BaseModel): class StatisticsResponse (line 17) | class StatisticsResponse(BaseModel): function get_statistics (line 26) | async def get_statistics(_: AdminAuthDep): FILE: app/core/account.py class AccountStatus (line 14) | class AccountStatus(str, Enum): class AuthType (line 20) | class AuthType(str, Enum): class OAuthToken (line 27) | class OAuthToken: method to_dict (line 34) | def to_dict(self) -> dict: method from_dict (line 43) | def from_dict(cls, data: dict) -> "OAuthToken": class Account (line 52) | class Account: method __init__ (line 55) | def __init__( method __enter__ (line 72) | def __enter__(self) -> "Account": method __exit__ (line 77) | def __exit__(self, exc_type, exc_val, exc_tb): method save (line 109) | def save(self) -> None: method to_dict (line 114) | def to_dict(self) -> dict: method from_dict (line 128) | def from_dict(cls, data: dict) -> "Account": method is_pro (line 148) | def is_pro(self) -> bool: method is_max (line 161) | def is_max(self) -> bool: method __repr__ (line 168) | def __repr__(self) -> str: FILE: app/core/claude_session.py class ClaudeWebSession (line 11) | class ClaudeWebSession: method __init__ (line 12) | def __init__(self, session_id: str): method initialize (line 19) | async def initialize(self): method stream (line 25) | async def stream(self, response: Response) -> AsyncIterator[str]: method cleanup (line 45) | async def cleanup(self): method _ensure_conversation_initialized (line 56) | async def _ensure_conversation_initialized(self) -> None: method update_activity (line 63) | def update_activity(self): method send_message (line 67) | async def send_message(self, payload: Dict[str, Any]) -> AsyncIterator... method upload_file (line 82) | async def upload_file( method send_tool_result (line 88) | async def send_tool_result(self, payload: Dict[str, Any]) -> None: method set_paprika_mode (line 97) | async def set_paprika_mode(self, mode: Optional[str]) -> None: FILE: app/core/config.py class Settings (line 9) | class Settings(BaseSettings): method settings_customise_sources (line 19) | def settings_customise_sources( method _json_config_settings (line 44) | def _json_config_settings(cls) -> Dict[str, Any]: method parse_comma_separated (line 265) | def parse_comma_separated(cls, v: str | List[str]) -> List[str]: FILE: app/core/error_handler.py class ErrorHandler (line 10) | class ErrorHandler: method get_language_from_request (line 16) | def get_language_from_request(request: Request) -> str: method format_error_response (line 22) | def format_error_response( method handle_app_exception (line 45) | async def handle_app_exception(request: Request, exc: AppError) -> JSO... function app_exception_handler (line 81) | async def app_exception_handler(request: Request, exc: AppError) -> JSON... FILE: app/core/exceptions.py class AppError (line 5) | class AppError(Exception): method __init__ (line 10) | def __init__( method __str__ (line 27) | def __str__(self): class InternalServerError (line 31) | class InternalServerError(AppError): method __init__ (line 32) | def __init__(self, context: Optional[Dict[str, Any]] = None): class NoAPIKeyProvidedError (line 41) | class NoAPIKeyProvidedError(AppError): method __init__ (line 42) | def __init__(self, context: Optional[Dict[str, Any]] = None): class InvalidAPIKeyError (line 51) | class InvalidAPIKeyError(AppError): method __init__ (line 52) | def __init__(self, context: Optional[Dict[str, Any]] = None): class NoAccountsAvailableError (line 61) | class NoAccountsAvailableError(AppError): method __init__ (line 62) | def __init__(self, context: Optional[Dict[str, Any]] = None): class ClaudeRateLimitedError (line 72) | class ClaudeRateLimitedError(AppError): method __init__ (line 75) | def __init__(self, resets_at: datetime, context: Optional[Dict[str, An... class CloudflareBlockedError (line 88) | class CloudflareBlockedError(AppError): method __init__ (line 89) | def __init__(self, context: Optional[Dict[str, Any]] = None): class OrganizationDisabledError (line 98) | class OrganizationDisabledError(AppError): method __init__ (line 99) | def __init__(self, context: Optional[Dict[str, Any]] = None): class InvalidModelNameError (line 109) | class InvalidModelNameError(AppError): method __init__ (line 110) | def __init__(self, model_name: str, context: Optional[Dict[str, Any]] ... class ClaudeAuthenticationError (line 121) | class ClaudeAuthenticationError(AppError): method __init__ (line 122) | def __init__(self, context: Optional[Dict[str, Any]] = None): class ClaudeHttpError (line 131) | class ClaudeHttpError(AppError): method __init__ (line 132) | def __init__( class NoValidMessagesError (line 156) | class NoValidMessagesError(AppError): method __init__ (line 157) | def __init__(self, context: Optional[Dict[str, Any]] = None): class ExternalImageDownloadError (line 166) | class ExternalImageDownloadError(AppError): method __init__ (line 167) | def __init__(self, url: str, context: Optional[Dict[str, Any]] = None): class ExternalImageNotAllowedError (line 178) | class ExternalImageNotAllowedError(AppError): method __init__ (line 179) | def __init__(self, url: str, context: Optional[Dict[str, Any]] = None): class NoResponseError (line 190) | class NoResponseError(AppError): method __init__ (line 191) | def __init__(self, context: Optional[Dict[str, Any]] = None): class OAuthExchangeError (line 200) | class OAuthExchangeError(AppError): method __init__ (line 201) | def __init__(self, reason: str, context: Optional[Dict[str, Any]] = No... class OrganizationInfoError (line 212) | class OrganizationInfoError(AppError): method __init__ (line 213) | def __init__(self, reason: str, context: Optional[Dict[str, Any]] = No... class CookieAuthorizationError (line 224) | class CookieAuthorizationError(AppError): method __init__ (line 225) | def __init__(self, reason: str, context: Optional[Dict[str, Any]] = No... class OAuthAuthenticationNotAllowedError (line 236) | class OAuthAuthenticationNotAllowedError(AppError): method __init__ (line 237) | def __init__(self, context: Optional[Dict[str, Any]] = None): class ClaudeStreamingError (line 246) | class ClaudeStreamingError(AppError): method __init__ (line 247) | def __init__( class NoMessageError (line 267) | class NoMessageError(AppError): method __init__ (line 268) | def __init__(self, context: Optional[Dict[str, Any]] = None): FILE: app/core/external/claude_client.py class ClaudeWebClient (line 26) | class ClaudeWebClient: method __init__ (line 29) | def __init__(self, account: Account): method initialize (line 34) | async def initialize(self): method cleanup (line 43) | async def cleanup(self): method _build_headers (line 48) | def _build_headers( method _request (line 67) | async def _request( method create_conversation (line 129) | async def create_conversation(self) -> str: method set_paprika_mode (line 151) | async def set_paprika_mode(self, conv_uuid: str, mode: Optional[str]) ... method upload_file (line 161) | async def upload_file( method send_message (line 173) | async def send_message(self, payload: Dict[str, Any], conv_uuid: str) ... method send_tool_result (line 190) | async def send_tool_result(self, payload: Dict[str, Any], conv_uuid: s... method delete_conversation (line 199) | async def delete_conversation(self, conv_uuid: str) -> None: FILE: app/core/http_client.py class Response (line 52) | class Response(ABC): method status_code (line 57) | def status_code(self) -> int: method json (line 62) | async def json(self) -> Any: method headers (line 68) | def headers(self) -> Dict[str, str]: method aiter_bytes (line 73) | def aiter_bytes(self, chunk_size: Optional[int] = None) -> AsyncIterat... class CurlResponseWrapper (line 78) | class CurlResponseWrapper(Response): method __init__ (line 81) | def __init__(self, response: "CurlResponse", stream: bool = False): method status_code (line 86) | def status_code(self) -> int: method json (line 89) | async def json(self) -> Any: method headers (line 99) | def headers(self) -> Dict[str, str]: method aiter_bytes (line 102) | async def aiter_bytes( class HttpxResponse (line 110) | class HttpxResponse(Response): method __init__ (line 113) | def __init__(self, response: httpx.Response): method status_code (line 117) | def status_code(self) -> int: method json (line 120) | async def json(self) -> Any: method headers (line 125) | def headers(self) -> Dict[str, str]: method aiter_bytes (line 128) | async def aiter_bytes( class RnetResponse (line 138) | class RnetResponse(Response): method __init__ (line 141) | def __init__(self, response: "rnet.Response"): method status_code (line 145) | def status_code(self) -> int: method json (line 148) | async def json(self) -> Any: method headers (line 152) | def headers(self) -> Dict[str, str]: method aiter_bytes (line 160) | async def aiter_bytes( class AsyncSession (line 169) | class AsyncSession(ABC): method request (line 173) | async def request( method close (line 187) | async def close(self): method __aenter__ (line 191) | async def __aenter__(self): method __aexit__ (line 194) | async def __aexit__(self, exc_type, exc_val, exc_tb): class CurlAsyncSessionWrapper (line 200) | class CurlAsyncSessionWrapper(AsyncSession): method __init__ (line 203) | def __init__( method process_files (line 217) | def process_files(self, files: dict) -> curl_cffi.CurlMime: method request (line 258) | async def request( method close (line 294) | async def close(self): class RnetAsyncSession (line 300) | class RnetAsyncSession(AsyncSession): method __init__ (line 303) | def __init__( method request (line 342) | async def request( method close (line 429) | async def close(self): class HttpxAsyncSession (line 437) | class HttpxAsyncSession(AsyncSession): method __init__ (line 440) | def __init__( method stream (line 453) | async def stream( method request (line 494) | async def request( method close (line 526) | async def close(self): function create_session (line 530) | def create_session( function create_plain_session (line 566) | def create_plain_session( function download_image (line 605) | async def download_image(url: str, timeout: int = 30) -> Tuple[bytes, str]: FILE: app/core/static.py function register_static_routes (line 9) | def register_static_routes(app: FastAPI): FILE: app/dependencies/auth.py function get_api_key (line 21) | async def get_api_key( function verify_api_key (line 42) | async def verify_api_key( function verify_admin_api_key (line 61) | async def verify_admin_api_key( FILE: app/main.py function lifespan (line 19) | async def lifespan(app: FastAPI): function health (line 78) | async def health(): function main (line 84) | def main(): FILE: app/models/claude.py class Role (line 6) | class Role(str, Enum): class ImageType (line 11) | class ImageType(str, Enum): class Base64ImageSource (line 19) | class Base64ImageSource(BaseModel): class URLImageSource (line 25) | class URLImageSource(BaseModel): class FileImageSource (line 30) | class FileImageSource(BaseModel): class WebSearchResult (line 36) | class WebSearchResult(BaseModel): class CacheControl (line 46) | class CacheControl(BaseModel): class TextContent (line 51) | class TextContent(BaseModel): class ImageContent (line 58) | class ImageContent(BaseModel): class ThinkingContent (line 65) | class ThinkingContent(BaseModel): class RedactedThinkingContent (line 72) | class RedactedThinkingContent(BaseModel): class ToolUseContent (line 78) | class ToolUseContent(BaseModel): class ToolResultContent (line 87) | class ToolResultContent(BaseModel): class ServerToolUseContent (line 96) | class ServerToolUseContent(BaseModel): class WebSearchToolResultContent (line 105) | class WebSearchToolResultContent(BaseModel): class InputMessage (line 125) | class InputMessage(BaseModel): class ThinkingOptions (line 131) | class ThinkingOptions(BaseModel): class ToolChoice (line 137) | class ToolChoice(BaseModel): class CustomToolSpec (line 144) | class CustomToolSpec(BaseModel): class Tool (line 150) | class Tool(BaseModel): class OutputConfig (line 159) | class OutputConfig(BaseModel): class OutputFormat (line 166) | class OutputFormat(BaseModel): class ServerToolUsage (line 174) | class ServerToolUsage(BaseModel): class Usage (line 179) | class Usage(BaseModel): class MessagesAPIRequest (line 188) | class MessagesAPIRequest(BaseModel): method validate_thinking_tokens (line 207) | def validate_thinking_tokens(self) -> "MessagesAPIRequest": class Message (line 219) | class Message(BaseModel): FILE: app/models/internal.py class Attachment (line 6) | class Attachment(BaseModel): method from_text (line 13) | def from_text(cls, content: str) -> "Attachment": class ClaudeWebRequest (line 23) | class ClaudeWebRequest(BaseModel): class UploadResponse (line 34) | class UploadResponse(BaseModel): FILE: app/models/streaming.py class BaseEvent (line 8) | class BaseEvent(BaseModel): class TextDelta (line 14) | class TextDelta(BaseModel): class InputJsonDelta (line 20) | class InputJsonDelta(BaseModel): class ThinkingDelta (line 26) | class ThinkingDelta(BaseModel): class SignatureDelta (line 32) | class SignatureDelta(BaseModel): class MessageDeltaData (line 41) | class MessageDeltaData(BaseModel): class ErrorInfo (line 50) | class ErrorInfo(BaseModel): class MessageStartEvent (line 57) | class MessageStartEvent(BaseEvent): class ContentBlockStartEvent (line 62) | class ContentBlockStartEvent(BaseEvent): class ContentBlockDeltaEvent (line 68) | class ContentBlockDeltaEvent(BaseEvent): class ContentBlockStopEvent (line 74) | class ContentBlockStopEvent(BaseEvent): class MessageDeltaEvent (line 79) | class MessageDeltaEvent(BaseEvent): class MessageStopEvent (line 85) | class MessageStopEvent(BaseEvent): class PingEvent (line 89) | class PingEvent(BaseEvent): class ErrorEvent (line 93) | class ErrorEvent(BaseEvent): class UnknownEvent (line 98) | class UnknownEvent(BaseEvent): class StreamingEvent (line 104) | class StreamingEvent(RootModel): FILE: app/processors/base.py class BaseContext (line 12) | class BaseContext: class BaseProcessor (line 22) | class BaseProcessor(ABC): method process (line 26) | async def process(self, context: BaseContext) -> BaseContext: method name (line 39) | def name(self) -> str: FILE: app/processors/claude_ai/claude_api_processor.py class ClaudeAPIProcessor (line 26) | class ClaudeAPIProcessor(BaseProcessor): method __init__ (line 29) | def __init__(self): method _request_messages_api (line 34) | async def _request_messages_api( method process (line 47) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _insert_system_message (line 195) | def _insert_system_message(self, context: ClaudeAIContext) -> None: method _prepare_headers (line 219) | def _prepare_headers( FILE: app/processors/claude_ai/claude_web_processor.py class ClaudeWebProcessor (line 17) | class ClaudeWebProcessor(BaseProcessor): method process (line 20) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/claude_ai/context.py class ClaudeAIContext (line 12) | class ClaudeAIContext(BaseContext): FILE: app/processors/claude_ai/event_parser_processor.py class EventParsingProcessor (line 8) | class EventParsingProcessor(BaseProcessor): method __init__ (line 11) | def __init__(self): method process (line 15) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/claude_ai/message_collector_processor.py class MessageCollectorProcessor (line 32) | class MessageCollectorProcessor(BaseProcessor): method process (line 35) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _collect_messages_generator (line 62) | async def _collect_messages_generator( method _apply_delta (line 173) | def _apply_delta(self, content_block: ContentBlock, delta: Delta) -> N... FILE: app/processors/claude_ai/model_injector_processor.py class ModelInjectorProcessor (line 12) | class ModelInjectorProcessor(BaseProcessor): method process (line 15) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _inject_model_generator (line 46) | async def _inject_model_generator( FILE: app/processors/claude_ai/non_streaming_response_processor.py class NonStreamingResponseProcessor (line 10) | class NonStreamingResponseProcessor(BaseProcessor): method process (line 13) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/claude_ai/pipeline.py class ClaudeAIPipeline (line 28) | class ClaudeAIPipeline(ProcessingPipeline): method __init__ (line 29) | def __init__(self, processors: Optional[List[BaseProcessor]] = None): method process (line 57) | async def process( FILE: app/processors/claude_ai/stop_sequences_processor.py class StopSequencesProcessor (line 18) | class StopSequencesProcessor(BaseProcessor): method process (line 21) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _process_stop_sequences (line 60) | async def _process_stop_sequences( FILE: app/processors/claude_ai/streaming_response_processor.py class StreamingResponseProcessor (line 10) | class StreamingResponseProcessor(BaseProcessor): method __init__ (line 13) | def __init__(self): method process (line 17) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/claude_ai/tavern_test_message_processor.py class TestMessageProcessor (line 16) | class TestMessageProcessor(BaseProcessor): method process (line 19) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/claude_ai/token_counter_processor.py class TokenCounterProcessor (line 18) | class TokenCounterProcessor(BaseProcessor): method process (line 21) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _count_tokens_generator (line 51) | async def _count_tokens_generator( method _calculate_input_tokens (line 98) | async def _calculate_input_tokens(self, context: ClaudeAIContext) -> int: method _calculate_output_tokens (line 116) | async def _calculate_output_tokens(self, context: ClaudeAIContext) -> ... FILE: app/processors/claude_ai/tool_call_event_processor.py class ToolCallEventProcessor (line 18) | class ToolCallEventProcessor(BaseProcessor): method process (line 21) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: method _process_tool_events (line 51) | async def _process_tool_events( FILE: app/processors/claude_ai/tool_result_processor.py class ToolResultProcessor (line 15) | class ToolResultProcessor(BaseProcessor): method process (line 18) | async def process(self, context: ClaudeAIContext) -> ClaudeAIContext: FILE: app/processors/pipeline.py class ProcessingPipeline (line 7) | class ProcessingPipeline(BaseProcessor): method __init__ (line 12) | def __init__(self, processors: Optional[List[BaseProcessor]] = None): method process (line 25) | async def process(self, context: BaseContext) -> BaseContext: FILE: app/services/account.py class AccountManager (line 17) | class AccountManager: method __new__ (line 26) | def __new__(cls): method __init__ (line 34) | def __init__(self): method add_account (line 48) | async def add_account( method remove_account (line 127) | async def remove_account(self, organization_uuid: str) -> None: method get_account_for_session (line 150) | async def get_account_for_session( method get_account_for_oauth (line 226) | async def get_account_for_oauth( method get_account_by_id (line 270) | async def get_account_by_id(self, account_id: str) -> Optional[Account]: method release_session (line 295) | async def release_session(self, session_id: str) -> None: method start_task (line 306) | async def start_task(self) -> None: method stop_task (line 311) | async def stop_task(self) -> None: method _task_loop (line 320) | async def _task_loop(self) -> None: method _check_and_recover_accounts (line 333) | async def _check_and_recover_accounts(self) -> None: method _check_and_refresh_accounts (line 350) | async def _check_and_refresh_accounts(self) -> None: method _refresh_account_token (line 364) | async def _refresh_account_token(self, account: Account) -> None: method _attempt_oauth_authentication (line 389) | async def _attempt_oauth_authentication(self, account: Account) -> None: method get_status (line 406) | async def get_status(self) -> Dict: method save_accounts (line 444) | def save_accounts(self) -> None: method load_accounts (line 468) | def load_accounts(self) -> None: method __repr__ (line 501) | def __repr__(self) -> str: FILE: app/services/cache.py class CacheCheckpoint (line 27) | class CacheCheckpoint: method __init__ (line 30) | def __init__(self, checkpoint: str, account_id: str): class CacheService (line 36) | class CacheService: method __new__ (line 45) | def __new__(cls): method __init__ (line 53) | def __init__(self): method process_messages (line 64) | def process_messages( method add_checkpoints (line 130) | def add_checkpoints(self, checkpoints: List[str], account_id: str) -> ... method _update_hasher (line 149) | def _update_hasher(self, hasher: "hashlib._Hash", data: Dict) -> None: method _content_block_to_dict (line 164) | def _content_block_to_dict(self, content_block: ContentBlock) -> Dict: method start_cleanup_task (line 194) | async def start_cleanup_task(self) -> None: method stop_cleanup_task (line 200) | async def stop_cleanup_task(self) -> None: method _cleanup_loop (line 210) | async def _cleanup_loop(self) -> None: method _cleanup_expired_checkpoints (line 222) | def _cleanup_expired_checkpoints(self) -> None: method cleanup_all (line 240) | async def cleanup_all(self) -> None: method __repr__ (line 246) | def __repr__(self) -> str: FILE: app/services/event_processing/event_parser.py class SSEMessage (line 15) | class SSEMessage: class EventParser (line 20) | class EventParser: method __init__ (line 23) | def __init__(self, skip_unknown_events: bool = True): method parse_stream (line 27) | async def parse_stream( method _process_buffer (line 50) | async def _process_buffer(self) -> AsyncIterator[StreamingEvent]: method _parse_sse_message (line 64) | def _parse_sse_message(self, message_text: str) -> SSEMessage: method _create_streaming_event (line 90) | def _create_streaming_event(self, sse_msg: SSEMessage) -> Optional[Str... method flush (line 124) | async def flush(self) -> AsyncIterator[StreamingEvent]: FILE: app/services/event_processing/event_serializer.py class EventSerializer (line 7) | class EventSerializer: method __init__ (line 10) | def __init__(self, skip_unknown_events: bool = True): method serialize_stream (line 13) | async def serialize_stream( method serialize_event (line 30) | def serialize_event(self, event: StreamingEvent) -> Optional[str]: method serialize_batch (line 62) | async def serialize_batch(self, events: list[StreamingEvent]) -> str: FILE: app/services/i18n.py class I18nService (line 9) | class I18nService: method __init__ (line 15) | def __init__(self): method _load_translations (line 21) | def _load_translations(self) -> None: method _get_nested_value (line 36) | def _get_nested_value(self, data: Dict[str, Any], key: str) -> Optiona... method _interpolate_message (line 52) | def _interpolate_message(self, message: str, context: Dict[str, Any]) ... method get_message (line 67) | def get_message( method parse_accept_language (line 107) | def parse_accept_language(self, accept_language: Optional[str]) -> str: method get_supported_languages (line 143) | def get_supported_languages(self) -> list[str]: method reload_translations (line 147) | def reload_translations(self) -> None: FILE: app/services/oauth.py class OAuthAuthenticator (line 24) | class OAuthAuthenticator: method _generate_pkce (line 27) | def _generate_pkce(self) -> Tuple[str, str]: method _build_headers (line 41) | def _build_headers(self, cookie: str) -> Dict[str, str]: method _request (line 55) | async def _request(self, method: str, url: str, **kwargs) -> Response: method _token_request (line 82) | async def _token_request(self, url: str, data: dict) -> Response: method get_organization_info (line 114) | async def get_organization_info(self, cookie: str) -> Tuple[str, List[... method authorize_with_cookie (line 159) | async def authorize_with_cookie( method exchange_token (line 227) | async def exchange_token(self, code: str, verifier: str) -> Dict: method refresh_access_token (line 266) | async def refresh_access_token(self, refresh_token: str) -> Optional[D... method authenticate_account (line 288) | async def authenticate_account(self, account: Account) -> bool: method refresh_account_token (line 329) | async def refresh_account_token(self, account: Account) -> bool: FILE: app/services/session.py class SessionManager (line 11) | class SessionManager: method __new__ (line 19) | def __new__(cls): method __init__ (line 27) | def __init__(self): method get_or_create_session (line 40) | async def get_or_create_session(self, session_id: str) -> ClaudeWebSes... method get_session (line 61) | async def get_session(self, session_id: str) -> Optional[ClaudeWebSess... method remove_session (line 83) | async def remove_session(self, session_id: str) -> None: method _is_session_expired (line 94) | async def _is_session_expired(self, session: ClaudeWebSession) -> bool: method _remove_session (line 111) | async def _remove_session(self, session_id: str) -> None: method start_cleanup_task (line 129) | async def start_cleanup_task(self) -> None: method stop_cleanup_task (line 135) | async def stop_cleanup_task(self) -> None: method _cleanup_loop (line 145) | async def _cleanup_loop(self) -> None: method _cleanup_expired_sessions (line 157) | async def _cleanup_expired_sessions(self) -> None: method cleanup_all (line 172) | async def cleanup_all(self) -> None: method __repr__ (line 184) | def __repr__(self) -> str: FILE: app/services/tool_call.py class ToolCallState (line 10) | class ToolCallState: method __init__ (line 13) | def __init__(self, tool_use_id: str, session_id: str): class ToolCallManager (line 20) | class ToolCallManager: method __new__ (line 28) | def __new__(cls): method __init__ (line 36) | def __init__(self): method register_tool_call (line 48) | def register_tool_call( method get_tool_call (line 66) | def get_tool_call(self, tool_use_id: str) -> Optional[ToolCallState]: method complete_tool_call (line 78) | def complete_tool_call(self, tool_use_id: str) -> None: method start_cleanup_task (line 91) | async def start_cleanup_task(self) -> None: method stop_cleanup_task (line 97) | async def stop_cleanup_task(self) -> None: method _cleanup_loop (line 107) | async def _cleanup_loop(self) -> None: method _cleanup_expired_tool_calls (line 119) | def _cleanup_expired_tool_calls(self) -> None: method cleanup_all (line 136) | async def cleanup_all(self) -> None: method __repr__ (line 142) | def __repr__(self) -> str: FILE: app/utils/logger.py function configure_logger (line 8) | def configure_logger(): FILE: app/utils/messages.py function process_messages (line 23) | async def process_messages( function extract_image_from_url (line 107) | async def extract_image_from_url(url: str) -> Optional[Base64ImageSource]: FILE: app/utils/retry.py function is_retryable_error (line 7) | def is_retryable_error(exception): function log_before_sleep (line 12) | def log_before_sleep(retry_state: RetryCallState) -> None: FILE: scripts/build_wheel.py function run_command (line 11) | def run_command(cmd, cwd=None, check=True): function clean_directories (line 21) | def clean_directories(): function check_node_installed (line 31) | def check_node_installed(): function check_pnpm_installed (line 45) | def check_pnpm_installed(): function build_frontend (line 60) | def build_frontend(): function build_wheel (line 94) | def build_wheel(): function parse_args (line 117) | def parse_args(): function main (line 135) | def main(): FILE: tests/test_claude_request_models.py class MessagesAPIRequestToolParsingTests (line 6) | class MessagesAPIRequestToolParsingTests(unittest.TestCase): method test_accepts_custom_tool_payload_without_top_level_input_schema (line 7) | def test_accepts_custom_tool_payload_without_top_level_input_schema(se... method test_accepts_server_web_search_tool_without_input_schema (line 34) | def test_accepts_server_web_search_tool_without_input_schema(self) -> ...