🎯 解决问题: - 避免推荐用户系统中不存在的工具 - 防止因缺失工具导致的命令执行失败 - 提供更安全、更灵活的现代化命令管理 🔧 主要改进: - 新增 ai_shell/modern_commands.toml 配置文件 - 智能检测系统中已安装的现代化工具 - 只推荐实际可用的工具,安全回退到原始命令 - 完整的工具描述、分类和安装提示 📦 配置文件特性: - 28 个命令映射配置 - 20 个工具描述说明 - 8 个工具分类组织 - 6 个详细安装提示 🛠️ 新增管理工具: - scripts/manage_modern_commands.py 配置管理脚本 - 支持验证、列表、安装建议等功能 - 完整的配置状态检查和报告 🔍 用户体验优化: - ai --config 显示详细的工具状态 - 区分已启用、保持原样、未安装的工具 - 提供具体的安装命令和说明 - 支持环境变量和配置文件自定义 🛡️ 安全保障: - 绝不推荐不存在的工具 - 优雅降级到原始命令 - 保持完全向后兼容性 📋 技术实现: - 添加 tomli 依赖支持 TOML 解析 - 重构配置加载逻辑 - 智能工具检测和状态管理 - 完善的错误处理和回退机制
202 lines
5.2 KiB
Markdown
202 lines
5.2 KiB
Markdown
# 基于配置文件的现代化命令管理完成总结
|
||
|
||
## 🎯 问题解决
|
||
|
||
您提出的问题非常重要:**有些用户主机上可能没有这些工具,如果默认设置了一些替代,可能会导致无法运行**。
|
||
|
||
我已经完全重构了现代化命令管理系统,采用基于配置文件的安全方案。
|
||
|
||
## ✅ 新的解决方案
|
||
|
||
### 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,无论他们的系统中安装了哪些工具!🚀
|