"""Wiki plugin - knowledge articles, categories, versioning.""" from __future__ import annotations import logging from app.plugins.base import BasePlugin from app.plugins.manifest import FrontendMenuItem, FrontendPageRoute, PluginManifest, PluginRouteDef logger = logging.getLogger(__name__) class WikiPlugin(BasePlugin): manifest = PluginManifest( name="wiki", version="1.0.0", display_name="Wiki", description="Knowledge articles with Markdown, categories, tags, versioning, entity links.", dependencies=["permissions", "unified_search"], routes=[ PluginRouteDef(path="/api/v1/wiki", module="app.plugins.builtins.wiki.routes", router_attr="router"), ], permissions=["wiki:read", "wiki:write", "wiki:delete", "wiki:admin"], menu_items=[FrontendMenuItem(label_key="wiki.menu.wiki", label="Wiki", path="/wiki", icon="BookOpen", permission="wiki:read")], page_routes=[FrontendPageRoute(path="/wiki", component="@/pages/Wiki", permission="wiki:read")], ) async def on_activate(self, db, service_container, event_bus) -> None: await super().on_activate(db, service_container, event_bus) try: from app.plugins.builtins.contracts import get_contract search_contract = get_contract("unified_search") if search_contract and hasattr(search_contract, "get_search_registry"): from app.plugins.builtins.unified_search.providers.wiki_provider import WikiSearchProvider search_contract.get_search_registry().register(WikiSearchProvider()) logger.info("Registered WikiSearchProvider via contract") else: logger.warning("unified_search contract not available, skipping WikiSearchProvider registration") except Exception: logger.exception("Failed to register WikiSearchProvider") async def on_deactivate(self, db, service_container, event_bus) -> None: from app.core.hooks import get_hook_registry get_hook_registry().unregister_all_for_plugin("wiki") # Unregister the search provider registered in on_activate (ARCH-012). try: from app.plugins.builtins.contracts import get_contract search_contract = get_contract("unified_search") if search_contract and hasattr(search_contract, "get_search_registry"): search_contract.get_search_registry().unregister("wiki_article") logger.info("Unregistered WikiSearchProvider via contract") except Exception: logger.exception("Failed to unregister WikiSearchProvider") await super().on_deactivate(db, service_container, event_bus)