first commit

This commit is contained in:
H
2026-04-03 13:01:19 +08:00
commit 538eced414
2575 changed files with 645911 additions and 0 deletions

View File

@@ -0,0 +1,569 @@
# Claude Code 命令系统详解
## 概述
Claude Code 的命令系统是用户与 CLI 交互的核心方式。每个斜杠命令slash command都是一个独立的模块支持懒加载以提高启动性能。命令定义遵循统一的 `Command` 接口,包含元数据和执行逻辑。
## 命令类型
### 1. prompt 类型命令
生成提示词发送给 AI 模型处理。
```typescript
type Command = {
type: 'prompt'
name: string
description: string
contentLength: number
source: 'builtin'
async getPromptForCommand(args): Promise<ContentBlockParam[]>
}
```
### 2. local-jsx 类型命令
渲染本地 React 组件的交互式命令。
```typescript
type Command = {
type: 'local-jsx'
name: string
description: string
load: () => import('./xxx.js')
}
```
### 3. local 类型命令
执行本地逻辑的命令,不涉及 AI 模型。
```typescript
type Command = {
type: 'local'
name: string
description: string
supportsNonInteractive: boolean
load: () => import('./xxx.js')
}
```
---
## 命令详解
### /commit - 创建 Git 提交
**文件位置**: `src/commands/commit.ts`
**功能描述**: 分析当前 Git 状态,生成符合项目规范的提交信息,创建新的 Git 提交。
**触发条件**: 用户输入 `/commit`
**核心逻辑**:
1. 获取当前 Git 状态(`git status``git diff HEAD``git branch --show-current`
2. 获取最近 10 条提交记录以了解项目提交风格
3. 根据变更内容生成提交信息
4. 使用 HEREDOC 语法执行 `git commit`
**安全协议**:
- 禁止更新 git config
- 禁止跳过 hooks除非用户明确要求
- 必须创建新提交,禁止使用 `--amend`
- 禁止提交包含密钥的文件(.env 等)
- 禁止使用需要交互输入的 git 命令(如 `git rebase -i`
**相关文件**:
- `src/commands/commit.ts` - 命令入口
- `src/utils/attribution.js` - 获取归属文本
---
### /review - 代码审查
**文件位置**: `src/commands/review.ts`
**功能描述**: 审查 GitHub Pull Request 的代码变更。
**触发条件**: 用户输入 `/review [PR编号]`
**核心逻辑**:
1. 若未提供 PR 编号,执行 `gh pr list` 显示打开的 PR 列表
2. 若提供 PR 编号,执行 `gh pr view <number>` 获取详情
3. 执行 `gh pr diff <number>` 获取代码差异
4. 分析代码质量、风格、潜在问题、安全性等
5. 提供改进建议
**本地审查提示词** (`LOCAL_REVIEW_PROMPT`):
```
You are an expert code reviewer. Follow these steps:
1. If no PR number is provided, run `gh pr list`
2. Analyze the changes and provide a thorough code review
...
```
**ultrareview 命令**:
- 唯一入口:通过 `/ultrareview` 触发远程 Bug Hunter 路径
- 使用 `~10-20 min` 执行深度 bug 查找
- 需要在 Claude Code 网页版运行
**相关文件**:
- `src/commands/review.ts` - 包含本地 review 和 ultrareview 命令
- `src/commands/review/ultrareviewEnabled.ts` - ultrareview 功能开关
---
### /compact - 对话压缩
**文件位置**: `src/commands/compact/index.ts`, `src/commands/compact/compact.ts`
**功能描述**: 清除对话历史但保留摘要,保持在上下文中。
**触发条件**: 用户输入 `/compact [自定义摘要指令]`
**核心逻辑**:
1. 首先尝试会话内存压缩(无自定义指令时)
2. 若有自定义指令或会话内存压缩不适用,执行传统的压缩流程:
- 执行 PreCompact hooks
- 运行 microcompact 减少 token 数量
- 调用 `compactConversation` 生成摘要
- 执行 PostCompact hooks
3. 重置文件状态缓存
4. 生成压缩边界标记和摘要消息
**压缩类型**:
- **完整压缩**: 总结整个对话历史
- **部分压缩**: 围绕选定消息索引进行压缩
- `from`: 总结索引之后的消息,保留早期消息
- `up_to`: 总结索引之前的消息,保留后续消息
**相关服务**:
- `src/services/compact/compact.ts` - 核心压缩逻辑
- `src/services/compact/microCompact.ts` - 微压缩
- `src/services/compact/sessionMemoryCompact.ts` - 会话内存压缩
- `src/services/compact/postCompactCleanup.ts` - 压缩后清理
---
### /mcp - MCP 服务器管理
**文件位置**: `src/commands/mcp/index.ts`
**功能描述**: 管理 MCPModel Context Protocol服务器连接。
**触发条件**: 用户输入 `/mcp [enable|disable [服务器名称]]`
**核心逻辑**:
1. 懒加载 MCP 管理界面组件
2. 支持启用/禁用特定 MCP 服务器
3. 管理 MCP 服务器配置
**MCP 配置类型** (`Transport`):
- `stdio` - 标准 I/O 传输
- `sse` - Server-Sent Events
- `http` - HTTP 传输
- `ws` - WebSocket
- `sdk` - SDK 传输
**相关服务**:
- `src/services/mcp/useManageMCPConnections.ts` - MCP 连接管理 Hook
- `src/services/mcp/types.ts` - MCP 类型定义
- `src/services/mcp/client.ts` - MCP 客户端实现
---
### /config - 配置面板
**文件位置**: `src/commands/config/index.ts`
**功能描述**: 打开配置面板,管理 Claude Code 设置。
**别名**: `/settings`
**触发条件**: 用户输入 `/config`
**核心逻辑**:
- 懒加载配置面板 React 组件
- 支持用户偏好设置、项目设置等
---
### /doctor - 诊断检查
**文件位置**: `src/commands/doctor/index.ts`
**功能描述**: 诊断和验证 Claude Code 安装状态和设置。
**触发条件**: 用户输入 `/doctor`
**核心逻辑**:
1. 检查环境变量 `DISABLE_DOCTOR_COMMAND` 确认是否启用
2. 懒加载诊断组件
3. 执行多项检查:安装完整性、配置正确性、认证状态等
---
### /login - 登录
**文件位置**: `src/commands/login/index.ts`
**功能描述**: 使用 Anthropic 账户登录或切换账户。
**触发条件**: 用户输入 `/login`
**核心逻辑**:
1. 检测是否已有 API Key 认证(`hasAnthropicApiKeyAuth()`
2. 根据认证状态显示不同描述
3. 检查环境变量 `DISABLE_LOGIN_COMMAND`
4. 懒加载登录组件
---
### /logout - 登出
**文件位置**: `src/commands/logout/index.ts`
**功能描述**: 从 Anthropic 账户登出。
**触发条件**: 用户输入 `/logout`
**核心逻辑**:
1. 检查环境变量 `DISABLE_LOGOUT_COMMAND`
2. 执行登出逻辑,清除认证信息
---
### /memory - 记忆文件编辑
**文件位置**: `src/commands/memory/index.ts`
**功能描述**: 编辑 Claude 记忆文件。
**触发条件**: 用户输入 `/memory`
**核心逻辑**:
- 懒加载记忆编辑器组件
---
### /skills - 技能列表
**文件位置**: `src/commands/skills/index.ts`
**功能描述**: 列出可用的技能Skills
**触发条件**: 用户输入 `/skills`
**核心逻辑**:
- 懒加载技能列表组件
- 显示所有已安装和可用的技能
---
### /tasks - 后台任务管理
**文件位置**: `src/commands/tasks/index.ts`
**功能描述**: 列出和管理后台任务。
**别名**: `/bashes`
**触发条件**: 用户输入 `/tasks`
**核心逻辑**:
- 懒加载任务管理界面
- 显示正在运行、完成、失败的任务
---
### /vim - Vim 模式切换
**文件位置**: `src/commands/vim/index.ts`, `src/commands/vim/vim.ts`
**功能描述**: 在 Vim 和 Normal 编辑模式之间切换。
**触发条件**: 用户输入 `/vim`
**核心逻辑**:
- 切换 REPL 的编辑模式
- 仅在交互式会话中可用
---
### /diff - 变更查看
**文件位置**: `src/commands/diff/index.ts`
**功能描述**: 查看未提交的变更和每轮对话的差异。
**触发条件**: 用户输入 `/diff`
**核心逻辑**:
- 懒加载差异查看组件
- 显示工作区与上次提交的差异
---
### /cost - 成本显示
**文件位置**: `src/commands/cost/index.ts`, `src/commands/cost/cost.ts`
**功能描述**: 显示当前会话的总成本和持续时间。
**触发条件**: 用户输入 `/cost`
**隐藏条件**:
- Claude.ai 订阅用户Ants 除外)默认隐藏
- 订阅用户可看到成本明细
---
### /theme - 主题切换
**文件位置**: `src/commands/theme/index.ts`
**功能描述**: 更改终端主题。
**触发条件**: 用户输入 `/theme`
**核心逻辑**:
- 懒加载主题选择组件
---
### /context - 上下文可视化
**文件位置**: `src/commands/context/index.ts`
**功能描述**: 将当前上下文使用情况可视化为彩色网格。
**触发条件**: 用户输入 `/context`
**交互模式变体**:
- `context` - 交互式彩色网格(仅交互式会话)
- `context` (非交互式) - 纯文本上下文使用情况
---
### /pr_comments - PR 评论获取
**文件位置**: `src/commands/pr_comments/index.ts`
**功能描述**: 获取 GitHub Pull Request 的评论。
**触发条件**: 用户输入 `/pr-comments [参数]`
**核心逻辑**:
1. 使用 `gh pr view` 获取 PR 信息
2. 使用 `gh api` 获取 PR 级评论
3. 使用 `gh api` 获取代码审查评论
4. 格式化显示评论列表
**备用方案**: 若市场不可用,使用内置提示词直接调用 GitHub CLI
---
### /resume - 恢复对话
**文件位置**: `src/commands/resume/index.ts`
**功能描述**: 恢复之前的对话。
**别名**: `/continue`
**触发条件**: 用户输入 `/resume [对话ID或搜索词]`
**核心逻辑**:
- 懒加载恢复界面
- 支持按 ID 或关键词搜索历史对话
---
### /share - 分享会话
**文件位置**: `src/commands/share/index.ts`
**功能描述**: 分享当前会话。
**触发条件**: 用户输入 `/share`
**核心逻辑**:
- 生成分享链接或会话导出
---
### /desktop - 桌面客户端
**文件位置**: `src/commands/desktop/index.ts`
**功能描述**: 在 Claude Desktop 中继续当前会话。
**别名**: `/app`
**触发条件**: 用户输入 `/desktop`
**平台限制**:
- macOS: 完全支持
- Windows (x64): 支持
- 其他平台: 隐藏
---
### /mobile - 移动应用
**文件位置**: `src/commands/mobile/index.ts`
**功能描述**: 显示下载 Claude 移动应用的二维码。
**别名**: `/ios`, `/android`
**触发条件**: 用户输入 `/mobile`
**核心逻辑**:
- 懒加载移动应用下载界面组件
- 显示 iOS 和 Android 的下载选项
---
### /permissions - 权限管理
**文件位置**: `src/commands/permissions/index.ts`
**功能描述**: 管理允许和拒绝的工具权限规则。
**别名**: `/allowed-tools`
**触发条件**: 用户输入 `/permissions`
**核心逻辑**:
- 懒加载权限管理界面
- 配置 `alwaysAllowRules` 等权限规则
---
### /agents - Agent 配置管理
**文件位置**: `src/commands/agents/index.ts`
**功能描述**: 管理 Agent 配置。
**触发条件**: 用户输入 `/agents`
**核心逻辑**:
- 懒加载 Agent 管理界面
- 支持多 Agent 配置
---
### /exit - 退出 REPL
**文件位置**: `src/commands/exit/index.ts`
**功能描述**: 退出 REPL 会话。
**别名**: `/quit`
**触发条件**: 用户输入 `/exit`
**特性**:
- `immediate: true` - 立即执行,不等待 AI 响应
---
### /bridge - 远程控制
**文件位置**: `src/commands/bridge/index.ts`
**功能描述**: 连接此终端进行远程控制会话。
**别名**: `/rc`
**触发条件**: 用户输入 `/remote-control [名称]`
**条件限制**:
- 需要启用 `BRIDGE_MODE` 功能
- 需要 `isBridgeEnabled()` 返回 true
**核心逻辑**:
- 建立与 Claude Code 网页版的桥接连接
- 支持远程会话控制
---
## 命令注册机制
命令通过 `src/commands.js` 统一注册和管理:
```typescript
export interface Command {
type: 'prompt' | 'local-jsx' | 'local'
name: string
description: string
aliases?: string[]
load?: () => Promise<any>
getPromptForCommand?: (args: string, context: CommandContext) => Promise<ContentBlockParam[]>
allowedTools?: string[]
contentLength?: number
progressMessage?: string
source?: 'builtin'
isEnabled?: () => boolean
isHidden?: boolean
supportsNonInteractive?: boolean
argumentHint?: string
}
```
## 懒加载机制
大多数命令使用懒加载模式:
```typescript
const command = {
type: 'local-jsx',
name: 'example',
load: () => import('./example.js'),
}
```
这确保只有实际使用的命令才会加载其代码,优化启动性能。
## 权限控制
某些命令支持 `isEnabled()` 方法动态控制可用性:
```typescript
const command = {
type: 'local',
name: 'doctor',
isEnabled: () => !isEnvTruthy(process.env.DISABLE_DOCTOR_COMMAND),
load: () => import('./doctor.js'),
}
```
---
## 相关源码文件
| 命令 | 源码路径 |
|------|---------|
| commit | `src/commands/commit.ts` |
| review | `src/commands/review.ts` |
| compact | `src/commands/compact/` |
| mcp | `src/commands/mcp/` |
| config | `src/commands/config/` |
| doctor | `src/commands/doctor/` |
| login | `src/commands/login/` |
| logout | `src/commands/logout/` |
| memory | `src/commands/memory/` |
| skills | `src/commands/skills/` |
| tasks | `src/commands/tasks/` |
| vim | `src/commands/vim/` |
| diff | `src/commands/diff/` |
| cost | `src/commands/cost/` |
| theme | `src/commands/theme/` |
| context | `src/commands/context/` |
| resume | `src/commands/resume/` |
| share | `src/commands/share/` |
| desktop | `src/commands/desktop/` |
| mobile | `src/commands/mobile/` |
| permissions | `src/commands/permissions/` |
| agents | `src/commands/agents/` |
| exit | `src/commands/exit/` |
| bridge | `src/commands/bridge/` |