Initial commit
This commit is contained in:
107
skills/toolkit/discover/models/tool.py
Normal file
107
skills/toolkit/discover/models/tool.py
Normal file
@@ -0,0 +1,107 @@
|
||||
"""
|
||||
数据模型:工具和元数据定义
|
||||
"""
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user