/
alexefan136
/
flowstack
Обзор
Документация
Войти
/
alexefan136
/
flowstack
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
core/engine/src/tools/__init__.py
391 строка
10 KB
Alexander Efanov
Обновление репозитория
15 июл 2026, 12:19
15 июл 2026, 12:19
76704c6
Код
Авторство
О чём код?
""" Tools package — встроенные инструменты для FlowStack Engine. Предоставляет: - **Базовые классы**: Tool, ToolResult, ToolRegistry - **Встроенные tools**: calculator, code_execution, diagram_gen, file_ops, python_repl - **Опциональные tools**: browser, web_search (требуют дополнительные зависимости) - **MCP интеграции**: через `src.tools.mcp` subpackage MCP Protocol: 2024-11-05 https://modelcontextprotocol.io/specification/2024-11-05 Примеры использования: from src.tools import CalculatorTool, ToolRegistry registry = ToolRegistry() registry.register_tool(CalculatorTool()) # Или через registry.py (singleton) from src.tools.registry import get_tool, registry_lifecycle """ from __future__ import annotations # ============================================================================ # Base classes (всегда доступны) # ============================================================================ from src.tools.base import ( # Exceptions ToolError, ToolExecutionError, ToolValidationError, ToolNotFoundError, ToolPermissionError, ResourceNotFoundError, PromptNotFoundError, # MCP Content Types (2024-11-05 spec) TextContent, ImageContent, ResourceContent, Content, content_to_dict, content_list_to_dict_list, # Tool Result ToolResult, # Base Classes Tool, Resource, ResourceDefinition, Prompt, PromptDefinition, PromptArgument, PromptMessage, # Registry ToolRegistry, get_global_registry, # Decorators & Helpers tool, register_in_global, create_text_tool, ) # ============================================================================ # Встроенные tools (core — всегда доступны) # ============================================================================ from src.tools.calculator import CalculatorTool from src.tools.code_execution import ( CodeExecutionConfig, CodeExecutionTool, CodeExecutionError, CodeValidationError, ExecutionTimeoutError, MemoryLimitError, ForbiddenOperationError, UnsupportedLanguageError, ) from src.tools.diagram_gen import ( DiagramConfig, DiagramGenTool, DiagramError, DiagramValidationError, DiagramRenderError, RendererNotFoundError, UnsupportedDiagramTypeError, ) from src.tools.file_ops import ( FileOpsConfig, FileOpsTool, FileOpsError, PathTraversalError, FileTooLargeError, ForbiddenPathError, ReadOnlyError, SymlinkEscapeError, OperationNotPermittedError, FileInfo, DirectoryListing, ) from src.tools.python_repl import ( PythonReplConfig, PythonReplTool, ReplError, ReplSessionNotFoundError, ReplValidationError, ReplTimeoutError, ReplWorkerError, ReplProcessCrashedError, ) # ============================================================================ # Опциональные tools (могут быть недоступны) # ============================================================================ # Browser tool (требует aiohttp + beautifulsoup4, опционально playwright) try: from src.tools.browser import ( BrowserTool, BrowserConfig, BrowserClient, PageInfo, ExtractedLink, ExtractedImage, ) _HAS_BROWSER = True except ImportError: _HAS_BROWSER = False BrowserTool = None # type: ignore[assignment,misc] BrowserConfig = None # type: ignore[assignment,misc] BrowserClient = None # type: ignore[assignment,misc] PageInfo = None # type: ignore[assignment,misc] ExtractedLink = None # type: ignore[assignment,misc] ExtractedImage = None # type: ignore[assignment,misc] # Web search tool (требует aiohttp + опционально duckduckgo-search) try: from src.tools.web_search import ( WebSearchTool, WebSearchConfig, WebSearchError, ProviderNotAvailableError, ProviderAuthError, ProviderRateLimitError, ProviderTimeoutError, InvalidQueryError, SearchResult, NewsResult, ImageResult, InstantAnswer, SearchProvider, DuckDuckGoProvider, BraveProvider, TavilyProvider, SearXNGProvider, SerpAPIProvider, create_provider, ) _HAS_WEB_SEARCH = True except ImportError: _HAS_WEB_SEARCH = False WebSearchTool = None # type: ignore[assignment,misc] WebSearchConfig = None # type: ignore[assignment,misc] WebSearchError = None # type: ignore[assignment,misc] ProviderNotAvailableError = None # type: ignore[assignment,misc] ProviderAuthError = None # type: ignore[assignment,misc] ProviderRateLimitError = None # type: ignore[assignment,misc] ProviderTimeoutError = None # type: ignore[assignment,misc] InvalidQueryError = None # type: ignore[assignment,misc] SearchResult = None # type: ignore[assignment,misc] NewsResult = None # type: ignore[assignment,misc] ImageResult = None # type: ignore[assignment,misc] InstantAnswer = None # type: ignore[assignment,misc] SearchProvider = None # type: ignore[assignment,misc] DuckDuckGoProvider = None # type: ignore[assignment,misc] BraveProvider = None # type: ignore[assignment,misc] TavilyProvider = None # type: ignore[assignment,misc] SearXNGProvider = None # type: ignore[assignment,misc] SerpAPIProvider = None # type: ignore[assignment,misc] create_provider = None # type: ignore[assignment,misc] # ============================================================================ # Registry (singleton API + lifecycle) # ============================================================================ from src.tools.registry import ( # Core classes ToolRegistryManager, MCPBundle, MCPToolAdapter, # Singleton API get_manager, reset_manager, # Module-level API get_tool, list_tools, list_tool_names, register_tool, unregister_tool, has_tool, list_tools_by_tag, enable_mcp_bundle, disable_mcp_bundle, list_bundles, stats, initialize, shutdown, call_tool, # Lifecycle registry_lifecycle, ) # ============================================================================ # Helper functions # ============================================================================ def has_browser() -> bool: """Проверить доступность browser tool.""" return _HAS_BROWSER def has_web_search() -> bool: """Проверить доступность web_search tool.""" return _HAS_WEB_SEARCH def list_available_tools() -> list[str]: """ Получить список имён всех доступных builtin tools. Учитывает опциональные tools (browser, web_search). """ tools = [ "calculator", "code_execution", "diagram_gen", "file_ops", "python_repl", ] if _HAS_BROWSER: tools.append("browser") if _HAS_WEB_SEARCH: tools.append("web_search") return tools # ============================================================================ # Package version # ============================================================================ __version__ = "1.0.0" # ============================================================================ # Exports # ============================================================================ __all__ = [ # Version "__version__", # ---------- Base classes ---------- # Exceptions "ToolError", "ToolExecutionError", "ToolValidationError", "ToolNotFoundError", "ToolPermissionError", "ResourceNotFoundError", "PromptNotFoundError", # MCP Content Types "TextContent", "ImageContent", "ResourceContent", "Content", "content_to_dict", "content_list_to_dict_list", # Tool Result "ToolResult", # Base Classes "Tool", "Resource", "ResourceDefinition", "Prompt", "PromptDefinition", "PromptArgument", "PromptMessage", # Registry base "ToolRegistry", "get_global_registry", # Decorators "tool", "register_in_global", "create_text_tool", # ---------- Core tools ---------- "CalculatorTool", "CodeExecutionConfig", "CodeExecutionTool", "CodeExecutionError", "CodeValidationError", "ExecutionTimeoutError", "MemoryLimitError", "ForbiddenOperationError", "UnsupportedLanguageError", "DiagramConfig", "DiagramGenTool", "DiagramError", "DiagramValidationError", "DiagramRenderError", "RendererNotFoundError", "UnsupportedDiagramTypeError", "FileOpsConfig", "FileOpsTool", "FileOpsError", "PathTraversalError", "FileTooLargeError", "ForbiddenPathError", "ReadOnlyError", "SymlinkEscapeError", "OperationNotPermittedError", "FileInfo", "DirectoryListing", "PythonReplConfig", "PythonReplTool", "ReplError", "ReplSessionNotFoundError", "ReplValidationError", "ReplTimeoutError", "ReplWorkerError", "ReplProcessCrashedError", # ---------- Optional tools ---------- # Browser (опциональный) "BrowserTool", "BrowserConfig", "BrowserClient", "PageInfo", "ExtractedLink", "ExtractedImage", # Web Search (опциональный) "WebSearchTool", "WebSearchConfig", "WebSearchError", "ProviderNotAvailableError", "ProviderAuthError", "ProviderRateLimitError", "ProviderTimeoutError", "InvalidQueryError", "SearchResult", "NewsResult", "ImageResult", "InstantAnswer", "SearchProvider", "DuckDuckGoProvider", "BraveProvider", "TavilyProvider", "SearXNGProvider", "SerpAPIProvider", "create_provider", # ---------- Registry (singleton + lifecycle) ---------- "ToolRegistryManager", "MCPBundle", "MCPToolAdapter", "get_manager", "reset_manager", "get_tool", "list_tools", "list_tool_names", "register_tool", "unregister_tool", "has_tool", "list_tools_by_tag", "enable_mcp_bundle", "disable_mcp_bundle", "list_bundles", "stats", "initialize", "shutdown", "call_tool", "registry_lifecycle", # ---------- Helpers ---------- "has_browser", "has_web_search", "list_available_tools", ]