docs: 更新 README.md 添加工作空间面板文档

- 新增工作空间功能特性章节(命令行 Tab + 文件 Tab)
- 更新架构图:v3.0 → v3.2,加入 workspace 子系统
- 更新项目结构:新增 workspace.ts、workspace-panel.ts
- 更新设置表:新增工作空间目录配置
- 更新安全章节:新增工作空间安全说明
- 更新桌面原生特性表
- 更新日志:v3.2.0 工作空间面板
This commit is contained in:
thzxx
2026-04-07 18:37:57 +08:00
parent 46c9595f26
commit 506d1c5d1f
+93 -40
View File
@@ -39,6 +39,35 @@ AI 可以在对话中主动调用本地工具来完成任务,所有操作在
> ⚠️ 需要模型支持 Tool Calling(推荐 Qwen3、Llama 3.1+、Mistral
### 🖥️ 工作空间 — 终端 & 文件浏览器(v3.2 新增)
右侧可折叠面板,提供终端命令行和文件浏览器两个 Tab:
**命令行 Tab**
- 终端界面,实时流式显示命令输出(支持 ANSI 颜色)
- 支持长时间运行命令(如 `ollama pull`),**无超时限制**
- 多终端 Tab,每个 Tab 独立进程,可随时停止
- `ollama pull` 等进度条实时展示(`\r` 覆盖处理)
**文件 Tab**
- 浏览工作空间目录,目录树展示
- 点击文件预览内容(带行号)
- 支持上级目录导航、刷新
**工作原理**
```
用户/AI 建议命令 → 工作空间执行按钮 → 主进程 spawn 子进程
┌─────────────────────┘
IPC 双向通信(on/send 模式,无超时)
stdout/stderr 实时推送 → 渲染进程终端面板
进程退出 → 通知渲染进程显示退出状态
```
> ⚠️ 与 Tool Calling 的区别:Tool Calling 走 Agent Loop(有超时),工作空间走独立进程(无超时),由用户主动触发。
### 🧠 Agent 记忆系统(v3.0 新增)
AI 会自动从对话中学习并记住关键信息,跨会话持续积累,无需手动配置:
@@ -83,6 +112,7 @@ AI 会自动从对话中学习并记住关键信息,跨会话持续积累,
|------|------|
| Fluent Design 主题 | Windows 11 暗色风格,Mica 毛玻璃材质 |
| 执行日志面板 | 左侧面板实时显示应用运行日志(初始化、连接、模型加载、工具调用等),纯运行时不持久化,常驻显示不可关闭 |
| 工作空间面板 | 右侧面板:终端命令行(实时流式输出)+ 文件浏览器,宽度可拖拽调整 |
| Token 消耗统计 | Header 实时显示当前会话总 token 消耗 |
| 系统托盘 | 最小化到托盘,双击恢复,右键菜单 |
| 原生菜单 | 文件 / 编辑 / 视图 / 窗口 / 帮助完整菜单 |
@@ -96,7 +126,7 @@ AI 会自动从对话中学习并记住关键信息,跨会话持续积累,
## 🏗️ 架构
v3.0 三大子系统协调运作:
v3.2 四大子系统协调运作:
```
用户输入消息
@@ -113,38 +143,43 @@ v3.0 三大子系统协调运作:
保存会话 → 自动提取记忆(≥6 条消息时触发)
④ 工作空间(独立通道)
用户手动/AI 建议命令 → spawn 子进程 → IPC 流式推送 → 终端面板实时展示
```
```
┌─────────────────────────────────────────────────────────┐
│ Electron 应用 │
│ ┌───────────────────────────────────────────────────┐
│ │ 渲染进程 (Renderer) │
│ │ │
│ │ ┌─────────────┐ ┌──────────────┐ ┌─────────┐
│ │ │ chat-area │ │ input-area │ │ memory │ │ │
│ │ │ 消息渲染 │ │ 消息发送 │ │ panel
│ │ │ 工具卡片 │ │ 记忆检索 │ │ 记忆管理 │ │ │
│ │ └──────┬──────┘ └──────┬───────┘ └────────┘
│ │ │ │ │ │
│ │ ┌──────┴───────────────┴───────────────┴──────┐
│ │ │ 核心服务层 │ │
│ │ │ agent-engine memory-manager rag
│ │ │ 工具调用循环 记忆管理 知识检索
│ │ │ tool-registry vector-store doc-proc │
│ │ └──────────────────────┬──────────────────────┘ │
│ │
│ │ ┌──────────────────────┴──────────────────────┐ │ │
│ │ │ ollama.ts (API) chat-db.ts (存储) │ │
│ └────────────────────────────────────────────┘
└─────────────────────────┼─────────────────────────┘
│ IPC
┌─────────────────────────┴─────────────────────────┐
│ │ 主进程 (Main)
│ │ main.ts menu.ts tray.ts ipc.ts preload.ts
│ │ tool-handlers.ts tool-security.ts
└───────────────────────────────────────────────────┘
└─────────────────────────────────────────────────────────
┌─────────────────────────────────────────────────────────────────
Electron 应用
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 渲染进程 (Renderer) │ │
│ │ │ │
│ │ ┌─────────────┐ ┌──────────────┐ ┌────────────────────┐ │ │
│ │ │ chat-area │ │ input-area │ │ workspace-panel
│ │ │ 消息渲染 │ │ 消息发送 │ │ 💻 命令行 Tab
│ │ │ 工具卡片 │ │ 记忆检索 │ │ 📁 文件 Tab
│ │ └──────┬──────┘ └──────┬───────┘ └─────────┬──────────┘ │ │
│ │ │ │ │ │
│ │ ┌──────┴───────────────┴─────────────────────┴──────────┐ │ │
│ │ │ 核心服务层
│ │ │ agent-engine memory-manager rag workspace-panel
│ │ │ tool-registry vector-store doc-proc
│ │ └──────────────────────────┬────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────┴────────────────────────────┐ │ │
│ │ │ ollama.ts (API) chat-db.ts (存储)
│ │ └──────────────────────────┬────────────────────────────┘ │
│ └─────────────────────────────┼──────────────────────────────┘ │
│ IPC
┌─────────────────────────────┴──────────────────────────────┐
│ 主进程 (Main) │
│ │ main.ts menu.ts tray.ts ipc.ts preload.ts │ │
│ │ tool-handlers.ts tool-security.ts workspace.ts │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ workspace.ts: spawn 进程管理 · 流式输出 · 安全检查 │ │
│ │ └──────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
---
@@ -217,18 +252,19 @@ npm run dist:portable # 仅便携版
metona-ollama-desktop/
├── src/
│ ├── main/ # Electron 主进程
│ │ ├── main.ts # 应用入口、窗口管理
│ │ ├── preload.ts # contextBridge 安全暴露
│ │ ├── main.ts # 应用入口、窗口管理、workspace 初始化
│ │ ├── preload.ts # contextBridge 安全暴露(含 workspace API
│ │ ├── menu.ts # 原生菜单
│ │ ├── tray.ts # 系统托盘
│ │ ├── ipc.ts # IPCTool Calling
│ │ ├── ipc.ts # IPCTool Calling + Workspace 流式通信
│ │ ├── utils.ts # 工具函数
│ │ ├── tool-handlers.ts # 🔧 7 个工具实现
│ │ ── tool-security.ts # 🔧 路径/命令安全检查
│ │ ── tool-security.ts # 🔧 路径/命令安全检查
│ │ └── workspace.ts # 🖥️ spawn 进程管理、流式输出
│ └── renderer/ # 渲染进程
│ ├── index.html # 入口 HTML
│ ├── index.html # 入口 HTML(含工作空间面板)
│ ├── main.ts # 入口(全系统初始化)
│ ├── types.d.ts # 完整类型定义
│ ├── types.d.ts # 完整类型定义(含 Workspace 类型)
│ ├── api/
│ │ └── ollama.ts # Ollama REST API
│ ├── db/
@@ -239,13 +275,13 @@ metona-ollama-desktop/
│ │ ├── chat-area.ts # 消息渲染、工具调用卡片
│ │ ├── input-area.ts # 消息发送、记忆检索、自动提取
│ │ ├── memory-panel.ts # 🧠 记忆管理面板
│ │ ├── workspace-panel.ts # 🖥️ 工作空间面板(终端+文件)
│ │ ├── tool-confirm-modal.ts # 🔧 工具确认对话框
│ │ ├── kb-modal.ts # RAG 知识库管理
│ │ ├── settings-modal.ts # 设置面板
│ │ ├── settings-modal.ts # 设置面板(含工作空间目录)
│ │ ├── history-modal.ts # 历史记录
│ │ ├── header.ts # 顶部导航
│ │ ├── model-bar.ts # 模型选择栏
│ │ ├── preset-bar.ts # Agent 预设栏(兼容)
│ │ ├── toast.ts # 通知
│ │ └── lightbox.ts # 图片预览
│ ├── services/
@@ -262,7 +298,7 @@ metona-ollama-desktop/
│ │ ├── sanitizer.ts # HTML 净化器
│ │ └── marked-config.ts # Markdown 渲染
│ └── styles/
│ └── style.css # Fluent Design 样式
│ └── style.css # Fluent Design 样式(含工作空间面板)
├── assets/icons/ # 图标资源
├── docs/
│ ├── BUILD.md # 构建指南
@@ -300,6 +336,7 @@ metona-ollama-desktop/
| 工具调用 | 关闭 | AI 主动调用本地工具 |
| 命令执行 | 关闭 | Shell 命令执行(高风险) |
| Agent 记忆 | 开启 | 自动学习+跨会话记忆 |
| 工作空间目录 | `userData/workspace` | 命令行默认执行目录 |
---
@@ -331,6 +368,13 @@ metona-ollama-desktop/
- **用户确认**:写入/删除/命令执行必须用户确认
- **安全提示词注入**:自动向 system prompt 追加工具使用安全规则
### 工作空间安全
- **IPC 双向通信**`on/send` 模式,不走 `invoke/handle`,无超时但有独立进程管理
- **命令安全检查**:复用 Tool Calling 的命令黑名单和路径检查
- **目录限制**:文件浏览器仅允许在工作空间目录内浏览
- **进程生命周期**:窗口关闭时自动 `SIGTERM` 所有子进程,防止进程泄漏
- **用户控制**:命令由用户手动执行或确认,AI 仅建议不直接执行
### 记忆系统安全
- 记忆提取仅基于对话内容,不读取文件系统
- 记忆存储在本地 IndexedDB,不上传到任何服务器
@@ -345,7 +389,16 @@ metona-ollama-desktop/
### 最新版本
**v3.2.0**代码质量 & 桌面原生化
**v3.2.0**工作空间面板
- 🖥️ 右侧可折叠工作空间面板:命令行 Tab + 文件浏览器 Tab
- 💻 终端界面:实时流式输出、ANSI 颜色支持、多终端 Tab、无超时限制
- 📁 文件浏览器:目录树、文件预览(带行号)、上级导航
- 🔌 IPC 双向通信:`on/send` 模式实现流式推送,独立于 Agent Loop 超时体系
- ⚙️ 设置面板新增工作空间目录配置(默认 `userData/workspace`
- 🔒 工作空间安全:复用命令/路径黑名单,窗口关闭自动清理子进程
- 📦 启动时自动创建工作空间目录
**v3.1.1** — 代码质量 & 桌面原生化
- ♻️ 渲染进程 58 处 console.log 全部迁移至结构化 log-service
- 🖥️ 所有文件对话框(上传/保存/导入)改用 Electron 原生对话框
- 🪙 Header 新增当前会话总 token 消耗统计