Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:24:37 +08:00
commit 8cd5c7679d
61 changed files with 6788 additions and 0 deletions

View 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