refactor: 重构现代化命令管理为基于配置文件的安全方案

🎯 解决问题:
- 避免推荐用户系统中不存在的工具
- 防止因缺失工具导致的命令执行失败
- 提供更安全、更灵活的现代化命令管理

🔧 主要改进:
- 新增 ai_shell/modern_commands.toml 配置文件
- 智能检测系统中已安装的现代化工具
- 只推荐实际可用的工具,安全回退到原始命令
- 完整的工具描述、分类和安装提示

📦 配置文件特性:
- 28 个命令映射配置
- 20 个工具描述说明
- 8 个工具分类组织
- 6 个详细安装提示

🛠️ 新增管理工具:
- scripts/manage_modern_commands.py 配置管理脚本
- 支持验证、列表、安装建议等功能
- 完整的配置状态检查和报告

🔍 用户体验优化:
- ai --config 显示详细的工具状态
- 区分已启用、保持原样、未安装的工具
- 提供具体的安装命令和说明
- 支持环境变量和配置文件自定义

🛡️ 安全保障:
- 绝不推荐不存在的工具
- 优雅降级到原始命令
- 保持完全向后兼容性

📋 技术实现:
- 添加 tomli 依赖支持 TOML 解析
- 重构配置加载逻辑
- 智能工具检测和状态管理
- 完善的错误处理和回退机制
This commit is contained in:
2025-07-12 22:44:31 +08:00
parent c4d1510ce9
commit afbbb1fbb0
7 changed files with 614 additions and 87 deletions

View File

@ -0,0 +1,201 @@
# 基于配置文件的现代化命令管理完成总结
## 🎯 问题解决
您提出的问题非常重要:**有些用户主机上可能没有这些工具,如果默认设置了一些替代,可能会导致无法运行**。
我已经完全重构了现代化命令管理系统,采用基于配置文件的安全方案。
## ✅ 新的解决方案
### 1. **配置文件驱动**
- 创建了 `ai_shell/modern_commands.toml` 配置文件
- 所有现代化命令映射都在配置文件中定义
- 支持工具描述、分类和安装提示
### 2. **智能检测机制**
- **只推荐已安装的工具**:系统会检测哪些现代化工具实际可用
- **安全回退**:如果现代化工具不存在,保持使用原始命令
- **避免错误**:绝不会推荐不存在的命令
### 3. **完整的配置管理**
- 详细的配置状态显示
- 缺失工具的安装建议
- 配置验证和管理工具
## 📋 技术实现
### 配置文件结构 (`ai_shell/modern_commands.toml`)
```toml
[commands]
# 命令映射
ls = "eza"
cat = "bat"
find = "fd"
# ... 更多映射
[descriptions]
# 工具描述
eza = "现代化的 ls 替代,支持图标、颜色和更好的格式化"
bat = "带语法高亮和行号的 cat 替代"
# ... 更多描述
[categories]
# 工具分类
file_operations = ["ls", "cat", "find", "tree", "rm"]
text_processing = ["grep", "sed", "awk", "cut", "diff"]
# ... 更多分类
[installation_hints]
# 安装提示
eza = "brew install eza # macOS\nsudo apt install eza # Ubuntu"
bat = "brew install bat # macOS\nsudo apt install bat # Ubuntu"
# ... 更多提示
```
### 智能检测逻辑
```python
def get_available_modern_commands() -> Dict[str, str]:
"""只返回系统中实际可用的现代化命令"""
all_alternatives = get_modern_commands()
available_alternatives = {}
for old_cmd, new_cmd in all_alternatives.items():
# 检查现代化命令是否可用
if shutil.which(new_cmd):
available_alternatives[old_cmd] = new_cmd
# 如果不可用,保持原始命令(如果存在)
elif shutil.which(old_cmd):
available_alternatives[old_cmd] = old_cmd
return available_alternatives
```
## 🔧 用户体验
### 配置状态显示
```bash
ai --config
```
输出示例:
```
现代化命令替代:
✅ 已启用的替代 (5 个):
find → fd
npm → pnpm
rm → trash
scp → rsync
yarn → pnpm
⚠️ 可配置但未安装的工具 (21 个):
cat → bat
安装: brew install bat
ls → eza
安装: brew install eza
# ... 更多工具和安装提示
```
### 管理工具
```bash
# 验证配置文件
uv run python scripts/manage_modern_commands.py validate
# 列出所有配置状态
uv run python scripts/manage_modern_commands.py list
# 显示安装建议
uv run python scripts/manage_modern_commands.py install
# 检查特定命令
uv run python scripts/manage_modern_commands.py check ls
```
## 🛡️ 安全保障
### 1. **绝不推荐不存在的工具**
- 系统启动时检测所有工具的可用性
- AI 提示词中只包含实际可用的替代
- 用户永远不会收到无法执行的命令
### 2. **优雅降级**
- 如果现代化工具不存在,自动使用原始命令
- 保持系统的完全兼容性
- 不影响基本功能
### 3. **清晰的状态反馈**
- 明确显示哪些工具已启用
- 列出可配置但未安装的工具
- 提供具体的安装指导
## 📊 配置统计
当前配置包含:
- **28 个命令映射**
- **20 个工具描述**
- **8 个工具分类**
- **6 个安装提示**
支持的现代化工具类别:
- **文件操作**: eza, bat, fd, tree, trash
- **文本处理**: rg, sd, choose, delta
- **系统监控**: procs, htop, ncdu, duf
- **网络工具**: gping, httpie, aria2c
- **编辑器**: nvim, micro
- **其他**: zoxide, ouch, pnpm
## 🎯 用户价值
### 1. **安全性**
- 不会推荐不存在的工具
- 避免命令执行失败
- 保持系统稳定性
### 2. **灵活性**
- 用户可以选择安装感兴趣的工具
- 支持自定义配置
- 渐进式采用现代化工具
### 3. **指导性**
- 提供安装建议和说明
- 展示工具的优势和特性
- 帮助用户了解现代化选择
### 4. **可维护性**
- 配置文件易于维护和扩展
- 支持版本控制
- 便于社区贡献
## 🚀 使用建议
### 对于新用户
1. 运行 `ai --config` 查看当前状态
2. 根据安装提示安装感兴趣的工具
3. 重新运行 `ai --config` 验证新工具
### 对于高级用户
1. 编辑 `ai_shell/modern_commands.toml` 自定义配置
2. 使用环境变量覆盖特定映射
3. 使用管理工具验证和维护配置
### 对于开发者
1. 使用 `scripts/manage_modern_commands.py` 管理配置
2. 添加新的工具映射和描述
3. 贡献安装提示和最佳实践
---
## 🎉 总结
这个新的基于配置文件的方案完美解决了您提出的问题:
**安全性**: 只推荐已安装的工具,避免执行失败
**灵活性**: 用户可以选择性安装和配置工具
**可维护性**: 配置文件易于管理和扩展
**用户友好**: 提供清晰的状态显示和安装指导
现在用户可以安全地使用 AI Shell无论他们的系统中安装了哪些工具🚀