会话管理命令
/clear — 清除对话
clearConversation() 是最复杂的命令之一,执行 20+ 步清理:
- 触发
SessionEndhooks(通过executeSessionEndHooks) - 计算需保留的后台任务 agentId
- 清空消息(
setMessages(() => [])) - 清除会话缓存(
clearSessionCaches(preservedAgentIds),传入保留的 agentId) - 重置工作目录和文件状态
- 清理 AppState(保留后台任务)
- 重新生成 session ID(
regenerateSessionId({ setCurrentAsParent: true })) - 保存 worktree 状态
- 触发
SessionStarthooks(通过processSessionStartHooks)
注意:实际函数签名接受解构参数对象
{ setMessages, readFileState, discoveredSkillNames, loadedNestedMemoryPaths, getAppState, setAppState, setConversationId, ... },而非CommandContext。代码位于src/commands/clear/conversation.ts。
clearSessionCaches() — 20+ 缓存清除
clearSessionCaches(preservedAgentIds) 清理 20+ 项缓存,包括:上下文缓存、命令缓存、技能缓存、提示词缓存、图片路径缓存、LSP 诊断缓存、工具 schema 缓存、MCP 输出缓存、GrowthBook 缓存、文件读取缓存等。
/compact — 上下文压缩
/compact 命令触发手动会话压缩。主要流程:
- Session Memory Compact(如果启用了自动记忆功能):提取会话记忆
- Reactive Compact:通过
tryReactiveCompact执行反应式压缩 - Traditional Compact:通过压缩服务生成会话摘要,替换旧消息
压缩完成后更新消息列表。
/resume — 恢复会话
Resume 命令使用 local-jsx 类型,渲染一个会话选择界面。
主要功能:
- 通过
getHistory()列出历史会话 - 支持搜索过滤
- 选择后加载对应会话
注意:实际组件和选择器的实现位于
src/commands/resume/目录中。
/export — 导出对话
导出命令将当前对话渲染为 Markdown 文件并保存到工作目录。
主要步骤:
- 将消息列表转换为文本格式(区分 Human/Assistant 角色)
- 生成带时间戳的文件名
- 写入到当前工作目录
/diff — 文件变更
/diff 命令使用 local-jsx 类型,显示当前会话中的所有文件变更。
主要功能:
- 从消息历史中收集所有文件变更
- 按文件分组显示差异
- 支持滚动浏览
实际组件位于 src/commands/diff/ 目录中。