Files
gh-dwsy-ai-runtime-ai-runti…/skills/toolkit/discover/models/tool.py
2025-11-29 18:24:37 +08:00

108 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
数据模型:工具和元数据定义
"""
from dataclasses import dataclass, field
from typing import Dict, List, Any, Optional
from datetime import datetime
@dataclass
class ToolUsage:
"""工具使用信息"""
command: str
task: str
trigger: str
expected: str
execution_status: str = "unknown"
output_files: List[str] = field(default_factory=list)
key_findings: Dict[str, Any] = field(default_factory=dict)
satisfaction: float = 0.0
duration: float = 0.0
followup_actions: List[str] = field(default_factory=list)
lessons_learned: List[str] = field(default_factory=list)
@dataclass
class ToolMetadata:
"""工具元数据基类"""
tool_id: str
tool_name: str
description: str
purpose: List[str] = field(default_factory=list)
last_used: Optional[datetime] = None
satisfaction: float = 0.0
related_tools: Dict[str, List[str]] = field(default_factory=dict)
maintenance_notes: Dict[str, Any] = field(default_factory=dict)
version: str = "1.0.0"
@dataclass
class Tool:
"""工具基类"""
metadata: ToolMetadata
@property
def tool_id(self) -> str:
return self.metadata.tool_id
@property
def tool_name(self) -> str:
return self.metadata.tool_name
@property
def description(self) -> str:
return self.metadata.description
@dataclass
class InternalTool(Tool):
"""内部工具AI-runtime创建的工具"""
meta_file: str
tool_file: Optional[str]
language: str
file: str
complexity: str
usage: Dict[str, Any] = field(default_factory=dict)
full_meta: Optional[Dict[str, Any]] = None
def __post_init__(self):
if not isinstance(self.metadata, ToolMetadata):
self.metadata = ToolMetadata(
tool_id=self.tool_id,
tool_name=self.tool_name,
description=self.description,
purpose=self.metadata.get("purpose", []) if isinstance(self.metadata, dict) else self.metadata.purpose
)
@dataclass
class ExternalTool(Tool):
"""外部工具第三方CLI工具"""
command: str
category: str
use_cases: List[str]
install_guide: str
installed: bool = False
path: Optional[str] = None
@property
def status(self) -> str:
"""获取安装状态"""
return "✅ 已安装" if self.installed else "❌ 未安装"
class ToolDetectorError(Exception):
"""工具检测异常"""
pass
class ToolFormatError(Exception):
"""工具格式化异常"""
pass