全局状态(internal/state)

internal/state/global.go 维护进程级全局状态,通过 getter/setter 访问:

状态说明
cwd当前工作目录
sessionID当前 session UUID
isInteractive是否交互模式
mainLoopModelOverride模型覆盖(来自 --model 参数)

SessionState(持久化)

internal/session/state.go 定义持久化到磁盘的 session 级状态:

type SessionState struct {
    LastSummarizedMessageID string   // 最后被 session memory 摘要的消息 UUID
    PlanMode                bool     // plan mode 是否激活
    InvokedSkills           []string // 本 session 已触发的 skill 列表
}

存储路径:<projectDir>/<sessionID>.state.json

对话历史(history)

internal/session/history.go 管理对话历史的持久化,支持 --continue 和 --resume 恢复上次会话。

历史文件存储在 .claude/ 目录(project dir),格式为 JSON。

Session ID

Session ID 是 UUID v4,在以下情况生成或复用:

  • 新会话:自动生成
  • --continue:使用最近一次 session ID(state.GetMostRecentSessionID(cwd))
  • --session-id / --resume:使用指定的 session ID

Plan Mode

SessionState.PlanMode 记录 plan mode 激活状态,通过 EnterPlanMode / ExitPlanMode tool 切换,持久化到 session state 文件,跨工具调用保持一致。

相关页面

  • query-engine — 会话历史传入 RunParams.Messages
  • compact — session_memory_compact 使用 LastSummarizedMessageID
  • overview — —continue / —resume 参数