OpenCowork
架构设计

状态管理

OpenCowork 基于 Zustand + Immer 的状态管理架构。

状态管理 / State Management

OpenCowork 使用 Zustand + Immer 进行状态管理,所有 store 位于 src/renderer/src/stores/

核心 Store / Core Stores

Store职责
chat-store会话和消息,持久化到 SQLite
agent-storeAgent 循环运行时状态
plugin-store插件实例和状态
settings-store用户偏好设置
provider-storeAI 提供商配置
task-store任务列表(计划模式)
plan-store计划数据
team-storeAgent 团队状态
cron-store定时任务
mcp-storeMCP 服务器
ui-storeUI 状态(侧边栏、主题等)

Store 模式 / Store Pattern

所有 store 使用 Zustand + Immer 中间件:

import { create } from 'zustand'
import { immer } from 'zustand/middleware/immer'
import { persist } from 'zustand/middleware'

export const useChatStore = create<ChatStore>()(
  persist(
    immer((set, get) => ({
      sessions: [],
      addSession: (session) =>
        set((state) => {
          state.sessions.push(session)
        })
    })),
    { name: 'chat-store' }
  )
)

持久化策略 / Persistence

Store持久化方式
chat-storeSQLite(via IPC,fire-and-forget)
settings-storelocalStorage(Zustand persist)
provider-storelocalStorage(Zustand persist)
agent-storeIPC storage

Immer 的使用 / Using Immer

Immer 允许直接修改 state(内部转换为不可变更新):

// 直接修改,无需展开
set((state) => {
  state.messages[sessionId].push(newMessage)
  state.sessions.find((s) => s.id === sessionId).updatedAt = Date.now()
})

On this page