Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions claude_code_log/discovery.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""Unified session discovery across all providers."""

from typing import Iterator, Optional

from .providers import discover_providers
from .providers.base import SessionInfo


def discover_all_sessions(
providers: Optional[list[str]] = None,
) -> Iterator[SessionInfo]:
"""Discover sessions from all available providers.

Args:
providers: Optional list of provider names to include.
If None, discovers from all available providers.

Yields:
SessionInfo objects from all providers.
"""
registry = discover_providers()

if providers is None:
providers = registry.get_available_providers()

for provider_name in providers:
provider = registry.get_provider(provider_name)
if provider and provider.is_available():
yield from provider.discover_sessions()


def discover_sessions_by_provider(provider_name: str) -> Iterator[SessionInfo]:
"""Discover sessions from a specific provider.

Args:
provider_name: Name of the provider to discover sessions from.

Yields:
SessionInfo objects from the specified provider.
"""
registry = discover_providers()
yield from registry.discover_sessions_by_provider(provider_name)


def get_session_stats() -> dict[str, int]:
registry = discover_providers()
stats: dict[str, int] = {}

for provider_name in registry.get_available_providers():
provider = registry.get_provider(provider_name)
if provider:
count = sum(1 for _ in provider.discover_sessions())
stats[provider_name] = count

return stats


def load_session(provider_name: str, session_id: str):
"""Load a session from a specific provider.

Args:
provider_name: Name of the provider.
session_id: ID of the session to load.

Returns:
Iterator of TranscriptEntry objects.
"""
registry = discover_providers()
return registry.load_session(provider_name, session_id)
11 changes: 11 additions & 0 deletions claude_code_log/providers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Provider abstraction layer for multi-provider session support."""

from .base import BaseProvider, SessionInfo
from .registry import ProviderRegistry, discover_providers

__all__ = [
"BaseProvider",
"SessionInfo",
"ProviderRegistry",
"discover_providers",
]
Loading