# opencode-sessions **Repository Path**: desktop-app/opencode-sessions ## Basic Information - **Project Name**: opencode-sessions - **Description**: No description available - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OC Sessions OpenCode 会话桌面管理工具 — 基于 Tauri v2 的跨平台桌面应用,直接读取 OpenCode 的 SQLite 数据库,提供项目树、会话列表、消息浏览和 Diff 查看等功能。 ![Tauri](https://img.shields.io/badge/Tauri-2.11-blueviolet) ![React](https://img.shields.io/badge/React-18.3-61DAFB) ![Rust](https://img.shields.io/badge/Rust-2021-orange) ![SQLite](https://img.shields.io/badge/SQLite-rusqlite-003B57) --- ## 功能 | 功能 | 说明 | |---|---| | **项目侧栏** | 列出 OpenCode 的所有项目,按最后更新时间排序,已过滤 0 会话的项目 | | **会话列表** | 按项目查看会话,支持树形展开(父子会话)、右键重命名/删除 | | **全局视图** | "Global" 模式按项目目录分组浏览所有会话 | | **消息对话** | Markdown 渲染的消息浏览,支持代码块折叠、行内代码、链接和图片 | | **思考过程** | 展示 AI 模型的推理过程(reasoning) | | **工具调用** | 可视化展示 agent 的工具调用链(task/explore 等) | | **代码 Diff** | 侧边抽屉查看文件变更 diff,带语法着色 | | **自定义标题栏** | 无边框窗口,自定义最小化/最大化/关闭按钮 | | **系统托盘** | 关闭窗口时隐藏到系统托盘,后台运行 | --- ## 技术栈 ### 前端 | 技术 | 用途 | |---|---| | React 18 + TypeScript | UI 框架 | | Vite 5 | 构建工具 | | @tanstack/react-query | 数据请求与缓存 | | zustand | 全局状态管理 | | react-markdown + remark-gfm | Markdown 渲染(支持 GFM 表格、任务列表等) | | MUI 5 | 主题与基础组件 | ### 后端 | 技术 | 用途 | |---|---| | Tauri v2 | 桌面应用框架 | | Rust + rusqlite | SQLite 数据库访问(只读模式) | | serde / serde_json | 序列化 | | tauri-tray-icon | 系统托盘 | ### 数据源 直接读取 OpenCode 的 SQLite 数据库文件(默认路径 `~/.local/share/opencode/opencode.db`),以只读方式访问 `project`、`session`、`message`、`part` 等表。 --- ## 项目结构 ``` oc-sessions/ ├── src/ # 前端源码 │ ├── components/ │ │ ├── layout/ │ │ │ ├── DesktopLayout.tsx # 主布局(标题栏 + 侧栏 + 会话列表 + 消息区) │ │ │ ├── Sidebar.tsx # 项目侧栏 │ │ │ ├── Titlebar.tsx # 自定义标题栏 │ │ │ └── index.ts │ │ ├── SessionList/ │ │ │ └── SessionListPanel.tsx # 会话列表(树形展开、右键菜单、删除确认) │ │ ├── SessionDetail/ │ │ │ └── ConversationPanel.tsx # 消息对话(Markdown 渲染、Diff 抽屉) │ │ └── ErrorBoundary.tsx │ ├── services/ │ │ └── tauri-api.ts # Tauri invoke 封装 │ ├── stores/ │ │ └── appStore.ts # zustand 全局状态 │ ├── types/ # TypeScript 类型定义 │ ├── theme.ts # MUI 主题配置 │ ├── hooks/ # 自定义 hooks │ ├── App.tsx / App.css # 根组件与样式 │ └── main.tsx # 入口 ├── src-tauri/ # Rust 后端 │ ├── src/ │ │ ├── commands/ # Tauri 命令 │ │ │ ├── projects.rs # 项目查询(列表/详情/统计) │ │ │ └── sessions.rs # 会话 CRUD(列表/详情/消息/搜索) │ │ ├── services/ │ │ │ ├── db.rs # 数据库连接管理(惰性初始化、只读模式) │ │ │ ├── project_service.rs # 项目数据访问 │ │ │ └── session_service.rs # 会话数据访问 │ │ ├── models/ # 数据模型 │ │ ├── error.rs # 错误类型 │ │ ├── lib.rs # 应用入口(窗口管理、系统托盘) │ │ └── main.rs # 启动点 │ └── Cargo.toml ├── package.json ├── vite.config.ts └── tauri.conf.json ``` --- ## 快速开始 ### 前置要求 - [Node.js](https://nodejs.org/) >= 18 - [Rust](https://www.rust-lang.org/) (通过 rustup 安装) - Tauri v2 系统依赖([参考文档](https://v2.tauri.app/start/prerequisites/)) ### 开发 ```bash # 安装前端依赖 npm install # 启动 Tauri 开发模式(自动启动 Vite HMR + Rust 后端) npm run tauri dev ``` ### 构建 ```bash npm run tauri build ``` 构建产物位于 `src-tauri/target/release/`。 --- ## Tauri 命令 ### 窗口控制 | 命令 | 说明 | |---|---| | `cmd_minimize_window` | 最小化窗口 | | `cmd_toggle_maximize` | 切换最大化/还原 | | `cmd_hide_window` | 隐藏窗口(到系统托盘) | | `cmd_open_url` | 在默认浏览器中打开 URL | ### 项目 | 命令 | 参数 | 说明 | |---|---|---| | `get_projects` | `page`, `limit`, `search?` | 分页获取项目列表(含会话数,已过滤 0 会话项目) | | `get_project_by_id` | `id` | 获取单个项目详情 | | `get_projects_stats` | — | 获取项目总数统计 | ### 会话 | 命令 | 参数 | 说明 | |---|---|---| | `get_sessions_by_project` | `projectId`, `page`, `limit` | 按项目分页获取会话 | | `get_session_detail` | `id` | 获取会话详情 | | `get_session_messages` | `sessionId`, `page`, `limit`, `order?` | 分页获取消息(支持正序/倒序) | | `get_session_diff` | `id` | 获取会话 diff | | `get_session_children` | `id`, `page`, `limit` | 获取子会话列表 | | `get_session_tree` | `id` | 获取会话树 | | `get_session_stats` | `id` | 获取会话统计 | | `search_sessions` | `projectId`, `query`, `page`, `limit` | 搜索会话 | | `update_session_title` | `id`, `title` | 更新会话标题 | | `delete_session` | `id` | 删除单个会话 | | `batch_delete_sessions` | `ids` | 批量删除会话 | --- ## 许可 MIT