🎯 解决问题: - 避免推荐用户系统中不存在的工具 - 防止因缺失工具导致的命令执行失败 - 提供更安全、更灵活的现代化命令管理 🔧 主要改进: - 新增 ai_shell/modern_commands.toml 配置文件 - 智能检测系统中已安装的现代化工具 - 只推荐实际可用的工具,安全回退到原始命令 - 完整的工具描述、分类和安装提示 📦 配置文件特性: - 28 个命令映射配置 - 20 个工具描述说明 - 8 个工具分类组织 - 6 个详细安装提示 🛠️ 新增管理工具: - scripts/manage_modern_commands.py 配置管理脚本 - 支持验证、列表、安装建议等功能 - 完整的配置状态检查和报告 🔍 用户体验优化: - ai --config 显示详细的工具状态 - 区分已启用、保持原样、未安装的工具 - 提供具体的安装命令和说明 - 支持环境变量和配置文件自定义 🛡️ 安全保障: - 绝不推荐不存在的工具 - 优雅降级到原始命令 - 保持完全向后兼容性 📋 技术实现: - 添加 tomli 依赖支持 TOML 解析 - 重构配置加载逻辑 - 智能工具检测和状态管理 - 完善的错误处理和回退机制
5.2 KiB
5.2 KiB
基于配置文件的现代化命令管理完成总结
🎯 问题解决
您提出的问题非常重要:有些用户主机上可能没有这些工具,如果默认设置了一些替代,可能会导致无法运行。
我已经完全重构了现代化命令管理系统,采用基于配置文件的安全方案。
✅ 新的解决方案
1. 配置文件驱动
- 创建了
ai_shell/modern_commands.toml
配置文件 - 所有现代化命令映射都在配置文件中定义
- 支持工具描述、分类和安装提示
2. 智能检测机制
- 只推荐已安装的工具:系统会检测哪些现代化工具实际可用
- 安全回退:如果现代化工具不存在,保持使用原始命令
- 避免错误:绝不会推荐不存在的命令
3. 完整的配置管理
- 详细的配置状态显示
- 缺失工具的安装建议
- 配置验证和管理工具
📋 技术实现
配置文件结构 (ai_shell/modern_commands.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"
# ... 更多提示
智能检测逻辑
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
🔧 用户体验
配置状态显示
ai --config
输出示例:
现代化命令替代:
✅ 已启用的替代 (5 个):
find → fd
npm → pnpm
rm → trash
scp → rsync
yarn → pnpm
⚠️ 可配置但未安装的工具 (21 个):
cat → bat
安装: brew install bat
ls → eza
安装: brew install eza
# ... 更多工具和安装提示
管理工具
# 验证配置文件
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. 可维护性
- 配置文件易于维护和扩展
- 支持版本控制
- 便于社区贡献
🚀 使用建议
对于新用户
- 运行
ai --config
查看当前状态 - 根据安装提示安装感兴趣的工具
- 重新运行
ai --config
验证新工具
对于高级用户
- 编辑
ai_shell/modern_commands.toml
自定义配置 - 使用环境变量覆盖特定映射
- 使用管理工具验证和维护配置
对于开发者
- 使用
scripts/manage_modern_commands.py
管理配置 - 添加新的工具映射和描述
- 贡献安装提示和最佳实践
🎉 总结
这个新的基于配置文件的方案完美解决了您提出的问题:
✅ 安全性: 只推荐已安装的工具,避免执行失败 ✅ 灵活性: 用户可以选择性安装和配置工具 ✅ 可维护性: 配置文件易于管理和扩展 ✅ 用户友好: 提供清晰的状态显示和安装指导
现在用户可以安全地使用 AI Shell,无论他们的系统中安装了哪些工具!🚀