vx 0.4.1

Universal Development Tool Manager
Documentation
# VX 架构设计

## 整体架构

VX 采用分层插件化架构,确保高度的可扩展性和模块化。

```
┌─────────────────────────────────────────────────────────────┐
│                     VX CLI Layer                           │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│  │   Commands  │ │     UI      │ │   Config    │          │
│  └─────────────┘ └─────────────┘ └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                     VX Core Layer                          │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│  │   Registry  │ │   Config    │ │   Context   │          │
│  │             │ │   Manager   │ │   Manager   │          │
│  └─────────────┘ └─────────────┘ └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                   Plugin System                            │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│  │   Plugin    │ │    Tool     │ │   Package   │          │
│  │   Traits    │ │   Traits    │ │   Manager   │          │
│  │             │ │             │ │   Traits    │          │
│  └─────────────┘ └─────────────┘ └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                 Utility Layer                              │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│  │   HTTP      │ │   Platform  │ │   Version   │          │
│  │   Utils     │ │   Detection │ │   Parser    │          │
│  └─────────────┘ └─────────────┘ └─────────────┘          │
└─────────────────────────────────────────────────────────────┘
```

## 核心组件

### 1. VX Core (vx-core)

**职责**: 提供核心抽象和基础设施

**主要模块**:
- `plugin.rs`: 插件系统的核心 traits
- `config_figment.rs`: 基于 Figment 的配置管理
- `registry.rs`: 插件注册和管理
- `tool.rs`: 工具执行上下文
- `version.rs`: 版本信息管理
- `platform.rs`: 平台检测和适配
- `http.rs`: HTTP 工具和下载
- `url_builder.rs`: URL 构建工具
- `version_parser.rs`: 版本解析工具

### 2. VX CLI (vx-cli)

**职责**: 命令行界面和用户交互

**主要模块**:
- `commands/`: 各种 CLI 命令实现
- `ui.rs`: 用户界面和进度显示
- `args.rs`: 命令行参数解析

### 3. Tool Plugins (vx-tools/*)

**职责**: 具体工具的实现

**当前实现**:
- `vx-tool-node`: Node.js 工具支持
- `vx-tool-go`: Go 工具支持
- `vx-tool-rust`: Rust 工具支持(计划中)
- `vx-tool-python`: Python 工具支持(计划中)

### 4. Package Manager Plugins (vx-package-managers/*)

**职责**: 包管理器的实现

**当前实现**:
- `vx-pm-npm`: npm 包管理器支持
- `vx-pm-pnpm`: pnpm 包管理器支持(计划中)
- `vx-pm-yarn`: yarn 包管理器支持(计划中)

## 设计模式

### 1. Plugin Pattern

```rust
// 插件接口
pub trait VxPlugin: Send + Sync {
    fn name(&self) -> &str;
    fn description(&self) -> &str;
    fn version(&self) -> &str;
    fn tools(&self) -> Vec<Box<dyn VxTool>>;
    fn package_managers(&self) -> Vec<Box<dyn VxPackageManager>>;
}

// 标准插件实现
pub struct StandardPlugin {
    name: String,
    description: String,
    version: String,
    tool_factory: Box<dyn Fn() -> Box<dyn VxTool> + Send + Sync>,
}
```

### 2. Strategy Pattern

```rust
// URL 构建策略
pub trait UrlBuilder: Send + Sync {
    fn download_url(&self, version: &str) -> Option<String>;
    fn versions_url(&self) -> &str;
}

// 版本解析策略
pub trait VersionParser: Send + Sync {
    fn parse_versions(&self, json: &Value, include_prerelease: bool) -> Result<Vec<VersionInfo>>;
}
```

### 3. Factory Pattern

```rust
// 可配置工具工厂
pub struct ConfigurableTool {
    metadata: ToolMetadata,
    config_manager: FigmentConfigManager,
    url_builder: Box<dyn UrlBuilder>,
    version_parser: Box<dyn VersionParser>,
}

impl ConfigurableTool {
    pub fn new(
        metadata: ToolMetadata,
        url_builder: Box<dyn UrlBuilder>,
        version_parser: Box<dyn VersionParser>,
    ) -> Result<Self> {
        // 工厂方法实现
    }
}
```

## 配置系统架构

### Figment 分层配置

```
Environment Variables (VX_*)     ← 最高优先级
Project Config (.vx.toml)
Project Detection (pyproject.toml, Cargo.toml, etc.)
User Config (~/.config/vx/config.toml)
Built-in Defaults                ← 最低优先级
```

### 配置流程

1. **初始化**: 创建 `FigmentConfigManager`
2. **检测**: 自动检测项目类型和配置文件
3. **合并**: 按优先级合并所有配置层
4. **解析**: 提取最终配置
5. **应用**: 将配置应用到工具和包管理器

## 扩展点

### 1. 添加新工具

```rust
// 1. 定义工具元数据
let metadata = ToolMetadata {
    name: "python".to_string(),
    description: "Python programming language".to_string(),
    aliases: vec!["py".to_string(), "python3".to_string()],
};

// 2. 实现 URL 构建器
pub struct PythonUrlBuilder;
impl UrlBuilder for PythonUrlBuilder { /* ... */ }

// 3. 实现版本解析器
pub struct PythonVersionParser;
impl VersionParser for PythonVersionParser { /* ... */ }

// 4. 创建可配置工具
let tool = ConfigurableTool::new(
    metadata,
    Box::new(PythonUrlBuilder),
    Box::new(PythonVersionParser),
)?;

// 5. 创建插件
let plugin = StandardPlugin::new(
    "python".to_string(),
    "Python support for vx".to_string(),
    "0.1.0".to_string(),
    || Box::new(tool),
);
```

### 2. 添加新包管理器

```rust
// 1. 实现包管理器 trait
pub struct PipPackageManager;

impl VxPackageManager for PipPackageManager {
    fn name(&self) -> &str { "pip" }
    fn ecosystem(&self) -> Ecosystem { Ecosystem::Python }
    
    async fn install_packages(&self, packages: &[PackageSpec], project_path: &Path) -> Result<()> {
        // pip install 实现
    }
    
    fn is_preferred_for_project(&self, project_path: &Path) -> bool {
        // 检查 requirements.txt 或 pyproject.toml
    }
}

// 2. 集成到插件
impl VxPlugin for PythonPlugin {
    fn package_managers(&self) -> Vec<Box<dyn VxPackageManager>> {
        vec![Box::new(PipPackageManager)]
    }
}
```

## 性能考虑

### 1. 懒加载
- 插件按需加载
- 工具实例按需创建
- 配置按需解析

### 2. 缓存策略
- 版本信息缓存
- 配置解析结果缓存
- HTTP 请求缓存

### 3. 并发处理
- 异步 I/O 操作
- 并行下载和安装
- 非阻塞用户界面

## 错误处理

### 1. 分层错误处理
```rust
pub enum VxError {
    ConfigError { message: String },
    ToolNotFound { tool_name: String },
    VersionNotFound { tool_name: String, version: String },
    InstallationFailed { tool_name: String, version: String, reason: String },
    NetworkError { url: String, error: String },
    Other { message: String },
}
```

### 2. 错误恢复
- 配置错误时回退到默认配置
- 网络错误时重试机制
- 安装失败时清理机制

## 测试策略

### 1. 单元测试
- 每个模块独立测试
- Mock 外部依赖
- 覆盖边界条件

### 2. 集成测试
- 插件系统集成测试
- 配置系统集成测试
- 端到端工作流测试

### 3. 性能测试
- 启动时间测试
- 内存使用测试
- 并发性能测试

这种架构设计确保了 VX 的可维护性、可扩展性和性能,同时提供了清晰的开发指导和最佳实践。