108 lines
2.5 KiB
Python
108 lines
2.5 KiB
Python
"""
|
||
数据模型:工具和元数据定义
|
||
"""
|
||
|
||
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
|