Files
JARVIS/backend/app/tools/schemas/manifest.py

71 lines
2.5 KiB
Python

"""
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