"""Provider-neutral agent session source endpoints.""" from __future__ import annotations import asyncio from datetime import UTC, datetime from fastapi import APIRouter, Depends from app.api.deps import require_org_member from app.schemas.agent_sessions import AgentSessionSourceRead, AgentSessionSourcesResponse from app.services import agent_session_sources from app.services.organizations import OrganizationContext router = APIRouter(prefix="/agent-sessions", tags=["agent-sessions"]) ORG_MEMBER_DEP = Depends(require_org_member) @router.get( "/sources", response_model=AgentSessionSourcesResponse, summary="List available agent session sources", description=( "Returns source cards for Claude Code, Codex CLI, and OpenAI API session " "history. OpenAI API history is only marked available once Pipeline has an " "owned local event source." ), ) async def list_sources( ctx: OrganizationContext = ORG_MEMBER_DEP, ) -> AgentSessionSourcesResponse: sources = await asyncio.to_thread(agent_session_sources.list_sources) scanned_at = datetime.now(UTC).replace(tzinfo=None) return AgentSessionSourcesResponse( sources=[AgentSessionSourceRead(**source) for source in sources], last_scanned_at=scanned_at, )