feat(chat): EnhancedInput 支持 Claude / 斜杠命令补全(commands/skills + 自动学习)#333
feat(chat): EnhancedInput 支持 Claude / 斜杠命令补全(commands/skills + 自动学习)#333J3n5en merged 1 commit intoJ3n5en:mainfrom
Conversation
- 新增 ClaudeCompletionsManager 服务,索引内置命令、用户自定义命令和技能 - 监听 ~/.claude/commands 和 ~/.claude/skills 目录变化,实时刷新补全列表 - 支持自动学习用户常用命令,按使用频次排序 - EnhancedInput 中新增斜杠弹出菜单,支持模糊搜索与键盘导航
|
Claude finished @hmhm2022's task in 3m 17s —— View job 🔍 代码审查报告
📊 审查概览 · 一目了然
🏆 代码质量评分📋 问题分布🎯 关键发现
🎯 问题详细分析 · 📊 点击展开查看📊 **👆 点击此处展开详细统计和图表分析**📈 问题趋势分析
🐛 问题清单与修复指南 · 📋 点击展开查看📋 **👆 点击此处展开详细问题列表 (共 8 个问题) · 一键复制追踪 📌**
|
| 🎯 优先级 | 🚨 严重 | ⚡ 轻微 | 📈 总计 | |
|---|---|---|---|---|
| 🔴 P0 | 0 个 | - | - | 0 个 |
| 🟡 P1 | - | 4 个 | - | 4 个 |
| 🔵 P2 | - | - | 4 个 | 4 个 |
| 📊 合计 | 0 | 4 | 4 | 8 个 |
💡 架构亮点
值得肯定的设计决策:
- 模块化设计优秀 —
ClaudeCompletionsManager作为独立服务与 IPC 层分离,职责清晰 - 防御性编程 —
normalizeSlashLabel对路径样式(/usr/local/bin)的过滤处理非常周到 - 文件监听策略合理 — 使用
@parcel/watcher+ debounce/maxWait 双重策略,避免频繁刷新 - 重试机制 —
scheduleWatchersRetry轮询检测目录创建,支持运行时动态添加 - dedup 优先级 —
buildSnapshot中 learned → builtin → user 的覆盖策略直觉正确 - 与
@mention 互斥 — 避免两个弹窗同时出现的交互冲突
🎯 合并决策建议
📋 合并评估结果
| 📊 评估维度 | ⭐ 得分 | 🎯 状态 | 💭 说明 |
|---|---|---|---|
| 🔐 安全性 | 8/10 | ✅ 通过 | 缓存无上限为唯一隐患,无注入风险 |
| 📊 代码质量 | 8/10 | ✅ 良好 | 结构清晰,有少量重复代码 |
| ⚡ 性能影响 | 7/10 | 串行文件读取可优化 | |
| 🛠️ 功能完整性 | 9/10 | ✅ 完整 | 核心功能完备,交互体验好 |
| 🧪 测试覆盖 | 5/10 | 无单元测试覆盖 |
📈 综合评分: 37/50 分 · 等级: 良好
🚦 最终建议
⚠️ 条件合并
📝 详细理由:
- 🟡 无严重安全或崩溃级别问题
- 🟡 存在 4 个中等问题,但核心功能不受影响
- 🟡 建议修复 fix: 彻底修复终端渲染问题(花屏和字体设置闪烁) #1(ensureStarted 竞争条件)和 feat(source-control): 新增类 VSCode 风格的源代码管理面板 #4(缓存容量限制)后合并
- 🟡 代码质量良好,架构设计合理
🎯 具体行动建议:
-
建议本版本修复:
- fix: 彻底修复终端渲染问题(花屏和字体设置闪烁) #1 修复
ensureStarted中starting的 error handling - 修复 Windows 平台兼容性问题 #2 提取重复的
learn逻辑为共用函数 - feat(source-control): 新增类 VSCode 风格的源代码管理面板 #4 为学习缓存添加条目容量上限(建议 200 条)
- fix: 彻底修复终端渲染问题(花屏和字体设置闪烁) #1 修复
-
后续版本改进:
- feat(terminal): 添加终端渲染器设置,修复 WebGL 花屏问题 #5 日志消息统一为英文
- Feat/wsl support #6 考虑内置命令列表的维护策略
- fix: memory leaks and terminal lazy loading #8 斜杠弹窗标签添加 i18n 支持
- 为
ClaudeCompletionsManager添加单元测试
变更内容
交互与行为
输入 /(且 / 前是空格或行首)触发补全弹窗
↑/↓ 选择条目,Enter 执行并发送,Esc 关闭弹窗
与 @ 文件提及互斥:当 @ 提及弹窗激活时不触发 / 补全
防止学习缓存污染:路径样式(如 /usr/local/bin)不会被写入学习缓存
变更文件
src/main/services/claude/ClaudeCompletionsManager.ts
src/main/ipc/claudeCompletions.ts
src/main/ipc/index.ts
src/preload/index.ts
src/renderer/components/chat/EnhancedInput.tsx
src/shared/types/claude.ts
src/shared/types/ipc.ts
如何验证
打开增强输入框,在行首输入 /,应出现补全列表
↑/↓ 切换高亮,按 Enter 应直接发送替换后的 /xxx 消息
运行期间新建 ~/.claude/commands 或 ~/.claude/skills 并添加 .md/SKILL.md,应在短时间内自动出现在补全中(无需重启)
发送以路径开头的文本(如 /usr/local/bin)不应污染后续补全候选