235 lines
6.3 KiB
Markdown
235 lines
6.3 KiB
Markdown
# 命令系统分析
|
||
|
||
## 架构概述
|
||
|
||
命令系统通过 `/` 前缀提供用户交互功能,共约 82 个命令目录、189 个文件。
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class Command {
|
||
+string name
|
||
+string description
|
||
+boolean hidden
|
||
+execute(args) void
|
||
}
|
||
|
||
class InteractiveCommand {
|
||
+React 组件渲染
|
||
+用户交互
|
||
}
|
||
|
||
class NonInteractiveCommand {
|
||
+纯逻辑执行
|
||
+无 UI
|
||
}
|
||
|
||
Command <|-- InteractiveCommand
|
||
Command <|-- NonInteractiveCommand
|
||
InteractiveCommand <|-- CommitCommand
|
||
InteractiveCommand <|-- DoctorCommand
|
||
InteractiveCommand <|-- ReviewCommand
|
||
NonInteractiveCommand <|-- ClearCommand
|
||
NonInteractiveCommand <|-- CostCommand
|
||
NonInteractiveCommand <|-- CompactCommand
|
||
```
|
||
|
||
## 命令类型系统
|
||
|
||
所有命令统一使用三种基本类型:
|
||
|
||
| 类型 | 说明 | 适用场景 |
|
||
|------|------|----------|
|
||
| `local` | 执行本地操作,返回文本结果 | 简单操作(/clear、/cost) |
|
||
| `local-jsx` | 执行本地操作并渲染 React 组件 | 需要用户交互(/help、/theme) |
|
||
| `prompt` | 扩展为提示文本,由模型执行 | 需要 AI 能力(/commit、/review) |
|
||
|
||
## 命令来源
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A[命令来源] --> B[builtin<br/>内置命令]
|
||
A --> C[skills/<br/>技能目录]
|
||
A --> D[bundled<br/>打包技能]
|
||
A --> E[plugin<br/>插件命令]
|
||
A --> F[managed<br/>托管命令]
|
||
A --> G[mcp<br/>MCP 技能]
|
||
|
||
B --> H[commands.ts<br/>统一注册]
|
||
C --> H
|
||
D --> H
|
||
E --> H
|
||
F --> H
|
||
G --> H
|
||
```
|
||
|
||
## 命令注册机制
|
||
|
||
命令在 `src/commands.ts` 中注册,使用 `memoize` 缓存,支持延迟加载(`load()` 按需加载实现)。使用 Fuse.js 实现模糊搜索,支持命令名称、描述和别名匹配。
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[COMMANDS memoize] --> B[核心命令注册]
|
||
B --> C[loadSkillsDir<br/>用户技能]
|
||
B --> D[initBundledSkills<br/>打包技能]
|
||
B --> E[插件加载器<br/>插件命令]
|
||
|
||
F{可用性检查} --> G[meetsAvailabilityRequirement]
|
||
G --> H[isCommandEnabled<br/>功能标志/平台/环境]
|
||
G --> I[availability<br/>claude-ai/console]
|
||
```
|
||
|
||
## 命令分类
|
||
|
||
### 交互管理类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/compact` | 压缩对话上下文 |
|
||
| `/clear` | 清除对话/缓存 |
|
||
| `/rewind` | 回退对话状态 |
|
||
| `/resume` | 恢复之前的会话 |
|
||
| `/exit` | 退出程序 |
|
||
| `/rename` | 重命名会话 |
|
||
|
||
### 代码工作流类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/commit` | 创建 Git 提交 |
|
||
| `/review` | 代码审查 |
|
||
| `/diff` | 查看变更 |
|
||
| `/autofix-pr` | 自动修复 PR |
|
||
| `/pr_comments` | 查看 PR 评论 |
|
||
| `/bughunter` | Bug 搜索 |
|
||
| `/plan` | 计划模式 |
|
||
|
||
### 环境和配置类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/config` | 设置管理 |
|
||
| `/doctor` | 环境诊断 |
|
||
| `/env` | 环境变量管理 |
|
||
| `/permissions` | 权限管理 |
|
||
| `/sandbox-toggle` | 沙盒开关 |
|
||
| `/keybindings` | 快捷键配置 |
|
||
| `/vim` | Vim 模式切换 |
|
||
| `/theme` | 主题切换 |
|
||
| `/color` | 颜色配置 |
|
||
| `/output-style` | 输出样式 |
|
||
| `/effort` | 思考力度设置 |
|
||
| `/model` | 模型选择 |
|
||
|
||
### 认证和账户类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/login` | 登录 |
|
||
| `/logout` | 登出 |
|
||
| `/cost` | 使用成本查看 |
|
||
| `/usage` | 使用量查看 |
|
||
| `/extra-usage` | 额外用量 |
|
||
| `/rate-limit-options` | 速率限制选项 |
|
||
| `/reset-limits` | 重置限制 |
|
||
| `/passes` | 使用通行证 |
|
||
|
||
### 工具集成类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/mcp` | MCP 服务器管理 |
|
||
| `/skills` | 技能管理 |
|
||
| `/plugin` | 插件管理 |
|
||
| `/reload-plugins` | 重新加载插件 |
|
||
| `/hooks` | 钩子管理 |
|
||
| `/lsp` | LSP 管理 |
|
||
|
||
### IDE 和远程类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/bridge` | IDE 桥接模式 |
|
||
| `/ide` | IDE 集成 |
|
||
| `/desktop` | 桌面应用切换 |
|
||
| `/mobile` | 移动应用切换 |
|
||
| `/chrome` | Chrome 扩展集成 |
|
||
| `/remote-env` | 远程环境 |
|
||
| `/remote-setup` | 远程设置 |
|
||
| `/teleport` | 传送(远程会话迁移) |
|
||
|
||
### 信息查看类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/help` | 帮助信息 |
|
||
| `/context` | 上下文可视化 |
|
||
| `/ctx_viz` | 上下文结构可视化 |
|
||
| `/stats` | 统计信息 |
|
||
| `/status` | 状态查看 |
|
||
| `/cost` | 成本查看 |
|
||
| `/memory` | 持久化内存管理 |
|
||
| `/files` | 文件列表 |
|
||
| `/session` | 会话管理 |
|
||
| `/thinkback` | 回溯思考过程 |
|
||
| `/thinkback-play` | 回放思考过程 |
|
||
| `/summary` | 会话摘要 |
|
||
| `/share` | 分享会话 |
|
||
| `/export` | 导出会话 |
|
||
| `/release-notes` | 更新日志 |
|
||
| `/feedback` | 反馈 |
|
||
|
||
### 开发调试类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/debug-tool-call` | 调试工具调用 |
|
||
| `/heapdump` | 堆转储 |
|
||
| `/perf-issue` | 性能问题 |
|
||
| `/break-cache` | 缓存清除 |
|
||
| `/mock-limits` | 模拟限制 |
|
||
| `/ant-trace` | 内部追踪 |
|
||
| `/backfill-sessions` | 回填会话 |
|
||
| `/debug` | 调试模式 |
|
||
|
||
### 特殊功能类
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `/voice` | 语音输入 |
|
||
| `/add-dir` | 添加工作目录 |
|
||
| `/branch` | 分支管理 |
|
||
| `/tag` | 标签管理 |
|
||
| `/copy` | 复制输出 |
|
||
| `/onboarding` | 新手引导 |
|
||
| `/upgrade` | 升级 |
|
||
| `/fast` | 快速模式切换 |
|
||
| `/btw` | 顺便提到 |
|
||
| `/good-claude` | 正面反馈 |
|
||
| `/stickers` | 贴纸 |
|
||
| `/issue` | Issue 管理 |
|
||
| `/install-github-app` | 安装 GitHub 应用 |
|
||
| `/install-slack-app` | 安装 Slack 应用 |
|
||
| `/advisor` | 顾问 |
|
||
| `/agents` | 代理管理 |
|
||
| `/passes` | 使用通行证 |
|
||
| `/privacy-settings` | 隐私设置 |
|
||
| `/terminalSetup` | 终端设置 |
|
||
|
||
## 命令执行流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant User as 用户
|
||
participant Input as TextInput
|
||
participant Parser as 命令解析器
|
||
participant Registry as commands.ts
|
||
participant Impl as 命令实现
|
||
participant UI as Ink 渲染
|
||
|
||
User->>Input: 输入 /commit
|
||
Input->>Parser: 识别 / 前缀
|
||
Parser->>Registry: 查找命令
|
||
Registry->>Impl: 命令路由
|
||
Impl->>UI: 渲染交互界面
|
||
UI->>User: 显示结果
|
||
```
|
||
|
||
## 特殊命令集
|
||
|
||
| 集合 | 说明 |
|
||
|------|------|
|
||
| `REMOTE_SAFE_COMMANDS` | 远程模式下可安全执行的命令(不依赖本地文件系统) |
|
||
| `BRIDGE_SAFE_COMMANDS` | 可通过远程控制桥接安全执行的命令 |
|
||
| `immediate` 命令 | 不需要等待停止点,立即执行的命令(如 /status、/cost) |
|