""" Base plugin class for LangCode Agent """ from abc import ABC, abstractmethod from typing import List, Dict, Any, Optional from langchain.tools import Tool class BasePlugin(ABC): """Base class for LangCode plugins""" def __init__(self, name: str, version: str = "1.0.0", description: str = ""): """ Initialize plugin Args: name: Plugin name version: Plugin version description: Plugin description """ self.name = name self.version = version self.description = description self.enabled = True @abstractmethod def get_tools(self) -> List[Tool]: """ Get tools provided by this plugin Returns: List of tools """ pass @abstractmethod def get_commands(self) -> Dict[str, callable]: """ Get commands provided by this plugin Returns: Dictionary mapping command names to functions """ pass def on_load(self): """Called when plugin is loaded""" pass def on_unload(self): """Called when plugin is unloaded""" pass def get_info(self) -> Dict[str, Any]: """ Get plugin information Returns: Dictionary with plugin info """ return { "name": self.name, "version": self.version, "description": self.description, "enabled": self.enabled, "tools_count": len(self.get_tools()), "commands_count": len(self.get_commands()) } def enable(self): """Enable the plugin""" self.enabled = True def disable(self): """Disable the plugin""" self.enabled = False def is_enabled(self) -> bool: """Check if plugin is enabled""" return self.enabled