"""Unified Search plugin contract — public interface for cross-plugin access.""" from __future__ import annotations from app.plugins.builtins.contracts import get_contract_registry from app.plugins.builtins.unified_search.embedding import generate_embedding from app.plugins.builtins.unified_search.search_engine import hybrid_search, find_similar_all_types from app.plugins.builtins.unified_search.provider_registry import get_search_registry from app.plugins.builtins.unified_search.base_provider import BaseSearchProvider class UnifiedSearchContract: """Public contract for the unified_search plugin.""" contract_name = "unified_search" generate_embedding = staticmethod(generate_embedding) hybrid_search = staticmethod(hybrid_search) find_similar_all_types = staticmethod(find_similar_all_types) get_search_registry = staticmethod(get_search_registry) BaseSearchProvider = BaseSearchProvider # ─── self-registration ─── _contract = UnifiedSearchContract() get_contract_registry().register("unified_search", _contract) # Backward-compatible local accessor _contract_instance: UnifiedSearchContract | None = None def get_contract() -> UnifiedSearchContract: global _contract_instance if _contract_instance is None: _contract_instance = UnifiedSearchContract() return _contract_instance __all__ = ["UnifiedSearchContract", "generate_embedding", "hybrid_search", "find_similar_all_types", "get_search_registry", "BaseSearchProvider"]