"""Index package: Async index synchronization and repair.

This package handles:
- ContextNode → IndexRecord expansion (3-level)
- Outbox event processing with retry/DLQ
- Directory summary generation
- Repair job for corrupted nodes

Key invariant: All IndexRecords MUST contain account_id + owner_space in filters.
"""

from index.index_record_builder import (
    build_index_records,
    build_single_record,
    build_record_id,
    _extract_account_id,
    _validate_filters,
    FilterValidationError,
)

from index.outbox_worker import (
    OutboxWorker,
    WorkerResult,
    WorkerConfig,
    create_upsert_event,
)

from index.sql_notify_listener import SQLNotifyListener

from index.directory_summarizer import (
    DirectorySummarizer,
    DirectorySummary,
    ChildSummary,
    is_directory_uri,
)

from index.directory_event_handler import (
    DirectoryEventHandler,
    DirectoryEventResult,
    DirNode,
    DagStats,
)

from index.repair_job import (
    RepairJob,
    RepairReport,
    RepairJobSummary,
    AGFSSnapshot,
    MemoryAGFSSnapshot,
    OutboxEventSink,
    MemoryOutboxEventSink,
)

__all__ = [
    "build_index_records",
    "build_single_record",
    "build_record_id",
    "_extract_account_id",
    "_validate_filters",
    "FilterValidationError",
    "OutboxWorker",
    "WorkerResult",
    "WorkerConfig",
    "create_upsert_event",
    "SQLNotifyListener",
    "DirectorySummarizer",
    "DirectorySummary",
    "ChildSummary",
    "is_directory_uri",
    "DirectoryEventHandler",
    "DirectoryEventResult",
    "DirNode",
    "DagStats",
    "RepairJob",
    "RepairReport",
    "RepairJobSummary",
    "AGFSSnapshot",
    "MemoryAGFSSnapshot",
    "OutboxEventSink",
    "MemoryOutboxEventSink",
]