""" Tool Manifest Schema Defines the structure for tool manifest declarations following VCPToolBox plugin patterns. """ from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any from enum import Enum class ToolType(str, Enum): """Tool execution type""" SYNC = "sync" # Synchronous execution ASYNC = "async" # Asynchronous execution SERVICE = "service" # Continuous running service class RuntimeType(str, Enum): """Runtime type for tool execution""" PYTHON = "python" JAVASCRIPT = "javascript" NATIVE = "native" class InvocationCommand(BaseModel): """Command definition for tool invocation""" name: str = Field(..., description="Command name") description: str = Field(..., description="Command description (for AI)") parameters: Optional[Dict[str, Any]] = Field(default=None, description="Parameters JSON Schema") required: Optional[List[str]] = Field(default=None, description="Required parameter list") example: Optional[str] = Field(default=None, description="Invocation example") class ToolManifest(BaseModel): """Tool Manifest - declarative tool definition""" manifest_version: str = Field(default="1.0.0", description="Manifest version") name: str = Field(..., description="Tool name (English, unique)") display_name: str = Field(..., description="Display name (Chinese)") description: str = Field(..., description="Tool description") author: Optional[str] = Field(default=None, description="Author") version: str = Field(default="1.0.0", description="Version number") # Execution configuration type: ToolType = Field(default=ToolType.SYNC, description="Tool type") runtime: RuntimeType = Field(default=RuntimeType.PYTHON, description="Runtime") entry: str = Field(..., description="Execution entry (file path or command)") timeout: int = Field(default=30000, description="Timeout (milliseconds)") # Configuration config_schema: Optional[Dict[str, Any]] = Field( default=None, description="Configuration schema" ) # Capabilities commands: List[InvocationCommand] = Field( default_factory=list, description="Available commands" ) # Metadata tags: Optional[List[str]] = Field(default=None, description="Tags") dependencies: Optional[List[str]] = Field(default=None, description="Dependency tools") enabled: bool = Field(default=True, description="Whether enabled") class Config: use_enum_values = True