# 命令模块 (commands) 本模块负责定义和管理 Claw 交互界面中使用的“斜杠命令”(Slash Commands),并提供相关的解析和执行逻辑。 ## 概览 `commands` 模块的主要职责包括: - 定义所有可用的斜杠命令及其元数据(别名、说明、类别等)。 - 提供命令注册表 (`CommandRegistry`),用于在 CLI 中发现和分发命令。 - 实现复杂的管理命令,如插件管理 (`/plugins`)、智能体查看 (`/agents`) 和技能查看 (`/skills`)。 - 提供命令建议功能,支持基于编辑距离 (Levenshtein distance) 的模糊匹配。 ## 关键特性 - **斜杠命令规范 (SlashCommandSpec)**:每个命令都包含详尽的元数据,包括所属类别(核心、工作区、会话、Git、自动化)以及是否支持在恢复会话时执行。 - **命令分类**: - **核心 (Core)**:`/help`, `/status`, `/model`, `/permissions`, `/cost` 等。 - **工作区 (Workspace)**:`/config`, `/memory`, `/diff`, `/teleport` 等。 - **会话 (Session)**:`/clear`, `/resume`, `/export`, `/session` 等。 - **Git 交互**:`/branch`, `/commit`, `/pr`, `/issue` 等。 - **自动化 (Automation)**:`/plugins`, `/agents`, `/skills`, `/ultraplan` 等。 - **模糊匹配与建议**:当用户输入错误的命令时,系统会自动推荐最接近的合法命令。 - **插件集成**:`/plugins` 命令允许用户动态安装、启用、禁用或卸载插件,并能通知运行时重新加载环境。 ## 实现逻辑 ### 核心模块 - **`lib.rs`**: 包含了绝大部分逻辑。 - **`SlashCommand` 枚举**: 定义了所有命令的强类型表示。 - **`SlashCommandSpec` 结构体**: 存储命令的静态配置信息。 - **`handle_plugins_slash_command`**: 处理复杂的插件管理工作流。 - **`suggest_slash_commands`**: 实现基于 Levenshtein 距离的建议算法。 ### 工作流程 1. 用户在 REPL 中输入以 `/` 开头的字符串。 2. `claw-cli` 调用 `SlashCommand::parse` 进行解析。 3. 解析后的命令被分发到相应的处理器。 4. 处理结果(通常包含要显示给用户的消息,以及可选的会话更新或运行时重新加载请求)返回给 CLI。 ## 使用示例 (内部) ```rust use commands::{SlashCommand, suggest_slash_commands}; // 解析命令 if let Some(cmd) = SlashCommand::parse("/model sonnet") { // 处理模型切换逻辑 } // 获取建议 let suggestions = suggest_slash_commands("hpel", 3); // 返回 ["/help"] ```