命令系统
源码:
cli/commands/|constants/commands.ts
1. 命令分类
Claude Code 支持三类命令:
| 类型 | 前缀 | 示例 |
|---|---|---|
| Slash 命令 | / | /help, /clear, /stats |
| 快捷键 | Ctrl+ | Ctrl+C, Ctrl+D |
| 自然语言 | 无 | 直接对话 |
2. 内置命令
// constants/commands.ts
const BUILTIN_COMMANDS = {
help: {
name: '/help',
description: '显示帮助信息',
handler: () => showHelp()
},
clear: {
name: '/clear',
description: '清空对话历史',
handler: () => clearHistory()
},
stats: {
name: '/stats',
description: '显示 Token 使用统计',
handler: () => showStats()
},
models: {
name: '/models',
description: '列出可用模型',
handler: () => listModels()
},
compact: {
name: '/compact',
description: '压缩对话上下文',
handler: () => compactContext()
},
// ... 更多命令
}
3. 命令解析
function parseCommand(input: string): Command | null {
if (!input.startsWith('/')) return null
const [name, ...args] = input.slice(1).split(/\s+/)
const command = findCommand(name)
if (!command) {
// 尝试匹配技能
const skill = findSkill(name)
if (skill) return buildSkillCommand(skill, args)
return null
}
return { command, args }
}
4. 命令执行流程
用户输入 "/stats"
│
↓
parseCommand() 解析
│
↓
查找内置命令 → 找到 stats
│
↓
执行 handler
│
↓
显示 Token 使用统计
│
↓
结果输出到终端
5. 快捷键处理
// 快捷键处理
function handleKeyPress(key: string) {
switch (key) {
case 'ctrl+c':
interruptCurrentRequest()
break
case 'ctrl+d':
exitApp()
break
case 'ctrl+l':
clearScreen()
break
case 'tab':
autoComplete()
break
}
}
6. 命令扩展
Plugin 系统允许注册自定义命令:
// 插件注册命令
ctx.registerCommand({
name: 'deploy',
description: '部署到生产环境',
handler: async (args) => {
await deployToProduction(args)
}
})
7. 完整命令列表
| 命令 | 功能 | 是否需要网络 |
|---|---|---|
/help | 帮助 | 否 |
/clear | 清空历史 | 否 |
/stats | Token 统计 | 否 |
/models | 列出模型 | 否 |
/compact | 压缩上下文 | 是 |
/cost | 费用估算 | 否 |
/permissions | 权限设置 | 否 |
/quit | 退出 | 否 |
上一节:Plugins 系统 | 下一节:10 安全系统