OCOpenCowork
Get startedInstallChannelsAgentsCapabilitiesSkillsModelsPlatformsOpsReferenceHelp

会话与消息管理

OpenCowork 的 project/session/message 模型和持久化结构。

会话与消息管理 / Sessions & Messages

OpenCowork 使用的是 project → session 的结构,而不是单纯的“聊天列表”。这样做是为了把工作目录、SSH、插件和模型绑定到真实工作上下文里。

业务模型 / Data model

Project

interface Project {
  id: string
  name: string
  workingFolder?: string
  sshConnectionId?: string
  pluginId?: string
  pinned: boolean
  createdAt: number
  updatedAt: number
}

Session

interface Session {
  id: string
  title: string
  mode: 'chat' | 'clarify' | 'cowork' | 'code' | 'acp'
  projectId: string
  workingFolder?: string
  messageCount: number
  pluginId?: string
  sshConnectionId?: string
  providerId?: string
  modelId?: string
  planId?: string
  pinned: boolean
  createdAt: number
  updatedAt: number
}

Message

interface Message {
  id: string
  sessionId: string
  role: 'user' | 'assistant' | 'tool'
  content: string | ContentBlock[]
  usage?: string
  sortOrder: number
  createdAt: number
}

模式 / Modes

模式含义
chat轻量对话
clarify先问清楚,再进入计划
cowork通用协作
code代码修改与本地执行
acp架构控制与委派执行

消息内容 / Message content

消息内容不是只有纯文本,content 可以是一个 block 数组:

  • text
  • thinking
  • tool_use
  • tool_result
  • image
  • image_error
  • agent_error

这就是为什么聊天窗口能同时展示文本、思考、工具调用和图片。

持久化 / Persistence

会话和消息最终落在 SQLite 中:

  • sessions
  • messages

其中 messages.meta 会保存压缩边界、摘要等辅助信息,messages.sort_order 保证流式写入顺序稳定。

UI store 的作用 / UI store responsibilities

chat-store 负责:

  • 项目和会话列表
  • 当前活动会话
  • 会话模式切换
  • 工作目录与 SSH 上下文
  • 从数据库加载历史消息

project 为什么重要 / Why projects matter

Project 不只是“分组”标签,它实际上承载了:

  • 工作目录
  • SSH 目标
  • 消息平台上下文
  • 关联会话集合
  • pinned 状态

这让 OpenCowork 能把“一个代码仓库 / 一个远程主机 / 一个插件聊天空间”当成真正的工作单元。

On this page