@@ -5,7 +5,7 @@
<h1 align="center">Metona Ollama Desktop</h1>
<p align="center">
<strong>🤖 本地 AI 桌面客户端 · Local AI Desktop Client</strong>
<strong>🤖 本地 AI 桌é� ¢å®¢æˆ·ç«? · Local AI Desktop Client</strong>
</p>
<p align="center">
@@ -14,7 +14,7 @@
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-v0.16.17 -E8734A?style=flat-square" alt="version">
<img src="https://img.shields.io/badge/version-v0.16.18 -E8734A?style=flat-square" alt="version">
<img src="https://img.shields.io/badge/electron-33+-47848F?style=flat-square&logo=electron" alt="electron">
<img src="https://img.shields.io/badge/typescript-5.7+-3178C6?style=flat-square&logo=typescript" alt="typescript">
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="license">
@@ -22,65 +22,65 @@
</p>
<p align="center">
<em>所有 AI 推理在本地完成,数据不离开本机。< /em><br>
<em>All AI inference runs locally — data never leaves your machine.</em>
<em>所æœ?AI 推ç� †åœ¨æœ¬åœ°å®Œæˆ� ,数æ� ®ä¸� 离开本机ã€? /em><br>
<em>All AI inference runs locally � data never leaves your machine.</em>
</p>
---
# 🇨🇳 䏿–‡
## ✨ 特性
## �特�
| | 功能 | 说明 |
|:---:|:---|:---|
| 🤖 | **ReAct Agent Loop ** | 始终开启的唯一对话模式。8 状态机( INIT→ THINKING→ PARSING→ EXECUTING→ OBSERVING→ REFLECTING→ COMPRESSING→ TERMINATED),最大 85 轮(可配置),智能重试(永久错误立即返回、瞬态错误指数退避),工具去重,智能路径依赖串行化,看门狗超时保护 |
| 🛡️ | **提示词加固 ** | 参考数据标记(<<<REFERENCE_DATA_START>>>) + 工具结果仅为数据非指令的安全规则注入 |
| 📋 | **Plan Mode ** | 开关切换,AI 首先生成执行计划(Markdown 渲染确认弹窗),批准后按步骤追踪执行,plan_track 工具标记完成状态,**支持断点续传**(中止后可恢复未完成计划) |
| 🔧 | **32 个内置工具 ** | 文件系统(13个) · 命令执行 · 联网搜索 · 浏览器控制(9个) · Git · 记忆 · 会话 · 子代理 · 系统工具 · Plan Mode 追踪 |
| 🧠 | **智能记忆系统 ** | 三类记忆(fact / preference / rule),存储于工作空间 MEMORY.md 文件,受路径保护仅 memory 工具可访问,写入前安全扫描,容量 500 条,对话结束自动提取,严格格式校验 |
| 📋 | **自定义文件 ** | SOUL.md(人格,不可压缩)+ AGENT.md(行为准则,内置 fallback) + USER.md(用户画像,仅工作空间读取,不存在则不注入) |
| 🤖 | **ReAct Agent Loop ** | 始终开å� ¯çš„唯一对è¯� 模å¼� ã€? 状æ€� 机( INIT→ THINKING→ PARSING→ EXECUTING→ OBSERVING→ REFLECTING→ COMPRESSING→ TERMINATED),最å¤?85 轮(å� ¯é…� 置),智能é‡� 试(永久错误立å� ³è¿”回ã€� 瞬æ€� 错误指数退é� ¿ï¼‰ï¼Œå·¥å…·åŽ»é‡� ,智能路径ä¾� 赖串行化,看门狗超时ä¿� æŠ? |
| 🛡ï¸? | **æ� � 示è¯� åŠ å›?* | å� ‚考数æ� ®æ ‡è®°ï¼ˆ<<<REFERENCE_DATA_START>>>ï¼? 工具结果仅为数æ� ®é� žæŒ‡ä»¤çš„安全规则注入 |
| 📋 | **Plan Mode ** | 开关切æ� ¢ï¼ŒAI 首先生æˆ� 执行计划(Markdown 渲染确认弹窗),批准å� ŽæŒ‰æ¥éª¤è¿½è¸ªæ‰§è¡Œï¼Œplan_track å·¥å…·æ ‡è®°å®Œæˆ� 状æ€� ,**支æŒ� æ–点ç»ä¼ **ï¼ˆä¸æ¢å� Žå� ¯æ� ¢å¤� 未完æˆ� 计划ï¼? |
| 🔧 | **32 个内置工å…?* | 文件系统ï¼?3个) · 命令执行 · è� ”网æ� œç´¢ · æµ� 览器控制(9个)  · Git  · 记忆 · 会è¯� · å� 代ç� ?· 系统工具  · Plan Mode 追踪 |
| 🧠| **智能记忆系统 ** | 三类记忆(fact / preference / rule),å˜å‚¨äºŽå·¥ä½œç©ºé—?MEMORY.md 文件,å� —路径ä¿� 护ä»?memory 工具å� ¯è®¿é—®ï¼Œå†™å…¥å‰� 安全扫æ� � ,容é‡� 500 æ� ¡ï¼Œå¯¹è¯� 结æ� Ÿè‡ªåЍæ� � å� –ï¼Œä¸¥æ ¼æ ¼å¼� æ ¡éª? |
| 📋 | **自定义文ä»?* | SOUL.mdï¼ˆäººæ ¼ï¼Œä¸� å� ¯åŽ‹ç¼©ï¼? AGENT.md(行为准则,内置 fallbackï¼? USER.md(用户画åƒ� ,仅工作空间读å� –,ä¸� å˜åœ¨åˆ™ä¸� 注入) |
| ðŸŒ� | **MCP å� � 议扩展 ** | JSON-RPC 2.0 over stdio,动æ€� 工具å� ‘现,Shadowing 防护 |
| 🔍 | **联网搜索(双模式) ** | SearXNG 元搜索引擎 JSON API( 70+引擎聚合)/ 四引擎 HTML 解析(Bing+百度+搜狗+360),双模式可切换;web_fetch 支持反爬+UA切换+浏览器回退 |
| 🌏 | **浏览器控制 ** | 打开网页 · 截图 · 执行 JS · 提取内容 · 点击 · 输入 · 滚动 · 关闭 |
| 🖥️ | **工作空间面板 ** | 终端(增量流式输出)+ 文件浏览器,命令安全检查 |
| 🔢 | **上下文长度手动控制 ** | 设置面板下拉选择(128K / 256K / 512K / 1M),默认 128K,模型栏显示当前配置值,下拉框中显示每个模型自身的上下文长度 |
| 🗜️ | **智能上下文管理 ** | 滑动窗口 + Token 自动校准 + 消息重要性评分 + LLM 结构化 JSON 压缩,智能触发(120 条增量压缩 + 300 条硬上限) |
| ⏱️ | **智能超时保护 ** | Agent Loop 看门狗(可配,默认 30min)+ 流式总超时(可配,默认 300s)+ 工具 HTTP/MCP 超时可配 |
| 🪝 | **Hook 系统 ** | 4 阶段生命周期钩子( pre_tool / post_tool / post_iteration / pre_completion),内置安全检查、文件去重、自动计划追踪、变更审计、结果校验 |
| 👥 | **子代理委派 ** | spawn_task 工具,独立上下文 + 超时保护 |
| 📈 | **Token 仪表盘 ** | 全局 + 会话统计,消耗趋势柱状图,2 秒刷新,输入/输出分色 |
| 📋 | **系统提示词卡片 ** | 每条 AI 回复顶部折叠卡片,点击查看实际发送给模型的完整上下文 |
| 🎨 | **暖色调 UI ** | 奶白 `#FAF7F2` + 珊瑚橙 `#E8734A` ,长时间使用不疲劳,流式渲染优化 |
| ðŸ”� | **è� ”网æ� œç´¢ï¼ˆå� Œæ¨¡å¼� ï¼?* | SearXNG å…ƒæ� œç´¢å¼•æ“?JSON APIï¼?0+引擎è� šå� ˆï¼? 四引æ“?HTML è§£æž� (Bing+百度+æ� œç‹—+360),å� Œæ¨¡å¼� å� ¯åˆ‡æ� ¢ï¼›web_fetch 支æŒ� å� � 爬+UA切æ� ¢+æµ� 览器回退 |
| ðŸŒ� | **æµ� 览器控åˆ?* | 打开网页 · 截图 · 执行 JS  · æ� � å� –内容 · 点击 · 输入 · 滚动 · å…³é— |
| 🖥ï¸?| **工作空间é� ¢æ� ¿ ** | 终端(增é‡� æµ� å¼� 输出)+ 文件æµ� 览器,命令安全检æŸ? |
| 🔢 | **上下文长度手动控åˆ?* | 设置é� ¢æ� ¿ä¸‹æ‹‰é€‰æ‹©ï¼?28K / 256K / 512K / 1M),默认 128K,模型æ � 显示当å‰� é…� ç½®å€¼ï¼Œä¸‹æ‹‰æ¡†ä¸æ˜¾ç¤ºæ¯� 个模型自身的上下文长度 |
| 🗜ï¸? | **智能上下文管ç� ?* | 滑动窗å� £ + Token è‡ªåŠ¨æ ¡å‡† + 消æ� ¯é‡� è¦� 性评åˆ?+ LLM 结构åŒ?JSON 压缩,智能触å� ‘(120 æ� ¡å¢žé‡� 压ç¼?+ 300 æ� ¡ç¡¬ä¸Šé™� ï¼? |
| â� ±ï¸� | **智能超时ä¿� 护 ** | Agent Loop 看门狗(å� ¯é…� ,默è®?30minï¼? æµ� å¼� 总超时(å� ¯é…� ,默è®?300sï¼? 工具 HTTP/MCP è¶…æ—¶å� ¯é…� |
| ðŸª� | **Hook 系统 ** | 4 阶段生命周期钩å� ( pre_tool / post_tool / post_iteration / pre_completion),内置安全检查ã€� 文件去é‡� ã€� 自动计划追踪ã€� å� ˜æ›´å®¡è®¡ã€� ç»“æžœæ ¡éª? |
| 👥 | **å� 代ç� †å§”æ´?* | spawn_task 工具,独立上下文 + è¶…æ—¶ä¿� 护 |
| 📈 | **Token 仪表�* | 全局 + 会� 统计,消耗趋势柱状图� 秒刷新,输入/输出分色 |
| 📋 | **系统æ� � 示è¯� å� ¡ç‰?* | æ¯� æ� ¡ AI 回å¤� 顶部折å� å� ¡ç‰‡ï¼Œç‚¹å‡»æŸ¥çœ‹å®žé™…å� ‘é€� 给模型的完整上下文 |
| 🎨 | **暖色è°? UI ** | 奶白 `#FAF7F2` + ç� Šç‘šæ©? `#E8734A` ,长时间使用ä¸� 疲劳,æµ� å¼� 渲染优化 |
| 🔔 | **系统托盘 ** | 原生托盘集� |
| ðŸ”� | **AES-256-GCM ** | æ•°æ� ®åŠ å¯†æ”¯æŒ� |
| 🧪 | **可观测性 ** | 执行轨迹缓冲批量写入 SQLite + Agent Metrics JSON/Prometheus 双格式导出 |
| 🧪 | **å� ¯è§‚测æ€?* | 执行轨迹缓冲批é‡� 写入 SQLite + Agent Metrics JSON/Prometheus å� Œæ ¼å¼� 导å‡? |
## 🔧 工具清å� •
<details>
<summary><strong>📁 文件系统(13 个) </strong></summary>
<summary><strong>� 文件系统�3 个) </strong></summary>
| 工具 | 功能 |
|------|------|
| `read_file` | 读取文件(文本/binary,2000行默认) |
| `read_file` | 读å� –文件(文æœ?binaryï¼?000行默认) |
| `write_file` | 写入/è¿½åŠ æ–‡ä»¶ï¼ˆæ”¯æŒ� base64二进制) |
| `list_directory` | 列出目录内容 |
| `search_files` | 搜索文件(正则/通配符) |
| `search_files` | æ� œç´¢æ–‡ä»¶ï¼ˆæ£åˆ?通é…� 符) |
| `create_directory` | 创建目录 |
| `delete_file` | åˆ é™¤æ–‡ä»¶/目录(返回大å°� ) |
| `move_file` | 移动/重命名文件 |
| `move_file` | 移动/é‡� 命å� � æ–‡ä»? |
| `copy_file` | � 制文件 |
| `edit_file` | 编辑文件(支æŒ� æ£åˆ™æ›¿æ� ¢ï¼‰ |
| `tree` | ç›®å½•æ ‘ç»“æž„ï¼ˆé»˜è®¤5层深度) |
| `download_file` | 下载文件 |
| `read_multiple_files` | 批量读取(50文件 /10KB) |
| `read_multiple_files` | 批é‡� 读å� –ï¼?0文件 /10KBï¼? |
| `compress` | 压缩文件/目录 |
</details>
<details>
<summary><strong>⚡ 命令执行(1 个) </strong></summary>
<summary><strong>�命令执行� 个) </strong></summary>
| 工具 | 功能 |
|------|------|
@@ -89,11 +89,11 @@
</details>
<details>
<summary><strong>🔍 联网搜索(2 个) </strong></summary>
<summary><strong>ðŸ”� è� ”网æ� œç´¢ï¼? 个) </strong></summary>
| 工具 | 功能 |
|------|------|
| `web_search` | SearXNG JSON API / 四引擎并行,默认 30 条结果 |
| `web_search` | SearXNG JSON API / 四引擎并行,默认 30 æ� ¡ç»“æž? |
| `web_fetch` | 网页内容抓å� –,自动é‡� 试(指数退é� ¿ï¼‰ï¼Œç§»åŠ¨ç«¯UA切æ� ¢ï¼ŒSPA页é� ¢è‡ªåЍå� ‡çº§åˆ°æµ� 览器渲染 |
</details>
@@ -111,27 +111,27 @@
| `browser_type` | 输入文本 |
| `browser_scroll` | 页é� ¢æ»šåЍ |
| `browser_wait` | ç‰å¾…å…ƒç´ /å»¶æ—¶ |
| `browser_close` | 关闭浏览器 |
| `browser_close` | 关闿µ� 览å™? |
</details>
<details>
<summary><strong>📦 Git( 1 个,17 个子命令)< /strong></summary>
<summary><strong>📦 Gitï¼? 个,17 个å� 命令ï¼? /strong></summary>
| 子命令 | 功能 |
| å� 命ä»?| 功能 |
|--------|------|
| `init` `clone` `add` `commit` `push` `pull` | 基础� 作 |
| `diff` `log` `status` `branch` `checkout` | 查看与切换 |
| `diff` `log` `status` `branch` `checkout` | 查看与切æ� ? |
| `merge` `stash` `reset` `tag` `remote` | 高级� 作 |
</details>
<details>
<summary><strong>🧠 记忆管理(1 个) </strong></summary>
<summary><strong>🧠记忆管ç� †ï¼? 个) </strong></summary>
| 工具 | 功能 |
|------|------|
| `memory` | 统一记忆管理(5 个 action: search 搜索 / add 添加 / replace 替换 / remove 删除 / read_all 读取全部)。工作空间 MEMORY.md 受路径保护,仅此工具可访问 |
| `memory` | 统一记忆管ç� †ï¼? ä¸? action: search æ� œç´¢ / add æ·»åŠ / replace 替æ� ¢ / remove åˆ é™¤ / read_all 读å� –全部)。工作空é—?MEMORY.md å� —路径ä¿� 护,仅æ¤å·¥å…·å� ¯è®¿é—? |
</details>
@@ -142,21 +142,21 @@
|------|------|
| `session_list` | 列出历å� ²ä¼šè¯� |
| `session_read` | 读å� –会è¯� 内容 |
| `spawn_task` | 委派子代理(独立上下文 + 超时保护) |
| `spawn_task` | 委派å� 代ç� †ï¼ˆç‹¬ç«‹ä¸Šä¸‹æ–?+ è¶…æ—¶ä¿� 护ï¼? |
</details>
<details>
<summary><strong>🕐 系统工具(1 个) </strong></summary>
<summary><strong>� 系统工具� 个) </strong></summary>
| 工具 | 功能 |
|------|------|
| `calculator` | 安全数学计算(+ - * / * * % (),递归下降解析器) |
| `calculator` | 安全数å¦è®¡ç®—ï¼? - * / * * % (),递归下é™� è§£æž� 器) |
</details>
<details>
<summary><strong>📋 Plan Mode( 1 个,仅 Plan 模式激活) </strong></summary>
<summary><strong>📋 Plan Mode� 个,�Plan 模� 激活) </strong></summary>
| 工具 | 功能 |
|------|------|
@@ -164,51 +164,51 @@
</details>
## 🏗️ 架构
## ðŸ� —ï¸?æž¶æž„
```
用户消息 → 扫描工作空间 SOUL.md(不可压缩层)→ AGENT.md → USER.md(工作空间,不存在则跳过)
↓
记忆检索 (MEMORY.md 关键词搜索) → 上下文注入
↓
Agent Engine (8 状态机 ReAct Loop, ≤85 轮, 智能重试, 路径依赖串行化, 看门狗+分级超时 )
↓
提示词加固(参考数据标记 + 工具结果安全规则)
↓
用户消æ� ¯ â†?扫æ� � 工作空间 SOUL.md(ä¸� å� ¯åŽ‹ç¼©å±‚ï¼‰â†’ AGENT.md â†? USER.md(工作空间,ä¸� å˜åœ¨åˆ™è·³è¿‡ï¼?
�
记忆检ç´?(MEMORY.md 关键è¯� æ� œç´? â†?上下文注å…?
�
Agent Engine (8 状� 机 ReAct Loop, �5 � 智能� 试, 路径� 赖串行� 看门�分级超时 )
�
æ� � 示è¯� åŠ å›ºï¼ˆå� ‚考数æ� ®æ ‡è®?+ 工具结果安全规则ï¼?
�
Ollama API (æµ� å¼� å“� 应,num_ctx 用户å� ¯é…� 128K/256K/512K/1M)
↓
Tool Registry (32 内置 + MCP 动态 + Plan Mode plan_track)
↓
Hook 系统 (pre/post tool/iteration/completion) → 观察结果 → 反思 → 循环 / 最终回答
�
Tool Registry (32 内置 + MCP 动� + Plan Mode plan_track)
�
Hook 系统 (pre/post tool/iteration/completion) â†?观察结果 â†?å� � æ€?â†?循环 / 最终回ç?
```
### 🧩 UI 组件(原生 DOM)
### 🧩 UI 组件(原�DOM�
```
main.ts (å…¥å� £)
├── header.ts # 顶部导航栏
├── model-bar.ts # 模型选择栏
├── header.ts # 顶部导航æ ?
├── model-bar.ts # 模型选择æ ?
├── chat-area.ts # è� Šå¤©æ¶ˆæ� ¯åŒºåŸŸ
├── input-area.ts # 输入框 + 文件上传 + Plan Mode 开关
├── workspace-panel.ts # 终端 + 文件浏览器 + 工具卡片
├── input-area.ts # 输入æ¡?+ æ–‡ä»¶ä¸Šä¼ + Plan Mode å¼€å…?
├── workspace-panel.ts # 终端 + 文件æµ� 览å™?+ 工具å� ¡ç‰‡
├── settings-modal.ts # 设置é� ¢æ� ¿ï¼ˆå� «çœ‹é—¨ç‹—è¶…æ—¶é…� 置)
├── history-modal.ts # 会è¯� 历å� ²
├── memory-modal.ts # 记忆管ç� †
├── tools-modal.ts # 工具列表
├── token-dashboard.ts # Token 消耗仪表盘
├── tool-confirm-modal.ts # 工具执行确认
├── prompt-modal.ts # 系统提示词查看 + Plan 确认弹窗
├── prompt-modal.ts # 系统æ� � 示è¯� 查çœ?+ Plan 确认弹窗
├── toast.ts # Toast 通知
└── lightbox.ts # 图片ç� ¯ç®±
```
### 🗄️ 数据库
### 🗄ï¸?æ•°æ� ®åº?
SQLite (sql.js WASM), 5 张表,WAL 模式:
SQLite (sql.js WASM)ï¼? å¼ è¡¨ï¼ŒWAL 模å¼� ï¼?
| 表 | 用途 |
| �| 用� |
|---|---|
| `sessions` | 会话( parent_id 父子关系) |
| `sessions` | 会è¯� ( parent_id 父å� 关系ï¼? |
| `messages` | 消æ� ¯ï¼ˆå¤–键级è� ”åˆ é™¤ï¼‰ |
| `tool_calls` | 工具调用记录 |
| `settings` | 设置(JSON � 列化) |
@@ -218,17 +218,17 @@ SQLite (sql.js WASM), 5 张表,WAL 模式:
| 层级 | 措施 |
|------|------|
| 📁 文件系统 | `checkPathAllowed()` — 路径黑名单(33 个系统/敏感目录,含 Linux + Windows) |
| ⚡ 命令执行 | `checkCommandAllowed()` — 命令黑名单(30 条危险命令,含 POSIX + Windows) + 三种模式 |
| 🖥️ 前端渲染 | HTML 净化器(白名单标签 + URI 协议检查) |
| 🔒 Electron | `contextIsolation: true` + IPC 白名单 + IPC fs 路径验证 |
| ðŸ“� 文件系统 | `checkPathAllowed()` â€?路径黑å� � å� •(33 个系ç»?æ•� 感目录,å� « Linux + Windowsï¼? |
| âš?命令执行 | `checkCommandAllowed()` â€?命令黑å� � å� •(30 æ� ¡å� ±é™©å‘½ä»¤ï¼Œå� ?POSIX + Windowsï¼? 三ç§� 模å¼� |
| 🖥ï¸?å‰� 端渲染 | HTML 净化器(白å� � å� •æ ‡ç¾ + URI å� � 议检查) |
| 🔒 Electron | `contextIsolation: true` + IPC 白å� � å� ?+ IPC fs 路径验è¯� |
| ðŸ”� æ•°æ� ®åР坆 | AES-256-GCM |
| 🧠 记忆安全 | 写入前 Prompt Injection / 敏感信息检测,多层级去重过滤 |
| 🌐 MCP 安全 | Shadowing 防护 + 双下划线分隔防歧义 |
| 🌐 网络安全 | `web_fetch` 流式体积限制(10MB) + 无 content-length 时防 OOM |
| ⚡ 进程安全 | Windows `taskkill` 强制终止 + 工作空间路径大小写不敏感校验 |
| 🧠记忆安全 | 写入å‰?Prompt Injection / æ•� 感信æ� ¯æ£€æµ‹ï¼Œå¤šå±‚级去é‡� 过æ»? |
| ðŸŒ� MCP 安全 | Shadowing 防护 + å� Œä¸‹åˆ’线分隔防æ§ä¹? |
| � 网络安全 | `web_fetch` � � 体积� 制�0MB� � content-length 时防 OOM |
| âš?进程安全 | Windows `taskkill` å¼ºåˆ¶ç»ˆæ¢ + 工作空间路径大å°� 写ä¸� æ•� æ„Ÿæ ¡éªŒ |
## 🚀 快速开始
## 🚀 快速开�
``` bash
git clone https://gitee.com/thzxx/metona-ollama-desktop.git
@@ -238,32 +238,32 @@ npm install
npm start
```
## 📦 构建 Windows 安装包
## 📦 构建 Windows 安装�
``` bash
# 环境:Ubuntu 24.04 + Node.js v22 + Wine 9.0+
ELECTRON_MIRROR = https://npmmirror.com/mirrors/electron/ npm run dist
```
产出: `release/Metona Ollama Setup v0.16.17 .exe`
产出: `release/Metona Ollama Setup v0.16.18 .exe`
## 🛠️ 常用命令
## 🛠�常用命令
``` bash
npm start # 构建并运行
npm start # 构建并� �
npm run dev:renderer # Vite watch(渲染进程)
npm run dev:main # tsc watch(主进程)
npm run dev:main # tsc watch(主进程�
npm run build # 完整构建
npm run dist # 构建 Windows 安装包
npm run dist # 构建 Windows 安装�
```
## 💻 系统� 求
- 🖥️ Windows 10/11( 64 位)
- 🤖 Ollama 本地运行中(默认 `http://localhost:11434` )
- 🖥� Windows 10/11�4 � )
- 🤖 Ollama 本地è¿� 行ä¸ï¼ˆé»˜è®¤ `http://localhost:11434` ï¼?
- 💾 建议 8GB+ 内å˜
## 📄 许可证
## 📄 许å� ¯è¯?
[MIT ](LICENSE )
@@ -271,27 +271,27 @@ npm run dist # 构建 Windows 安装包
# 🇬🇧 English
## ✨ Features
## � Features
| | Feature | Description |
|:---:|:---|:---|
| 🤖 | **ReAct Agent Loop ** | Always-on, only chat mode. 8-state machine, up to 85 iterations (configurable), smart retry (permanent errors return immediately, transient errors use exponential backoff), tool dedup, path-aware dependency serialization, watchdog + tiered timeout protection |
| 🛡️ | **Prompt Hardening ** | Reference data markers (<<<REFERENCE_DATA_START>>>) + tool results are data-not-instructions safety rules |
| 🛡� | **Prompt Hardening ** | Reference data markers (<<<REFERENCE_DATA_START>>>) + tool results are data-not-instructions safety rules |
| 📋 | **Plan Mode ** | Toggle switch. AI first generates an execution plan (Markdown-rendered confirmation dialog), then tracks step-by-step execution, **supports resume ** (interrupted plans restore on next session) |
| 🔧 | **32 Built-in Tools ** | File system · Command · Web search · Browser · Git · Memory · Sessions · Sub-agent · System · Plan Mode tracking |
| 🧠 | **Smart Memory System ** | Three types (fact / preference / rule), stored in workspace MEMORY.md file, path-protected — only the memory tool can access it, pre-write security scan, 500 capacity, auto-extract on conversation end, strict format validation |
| 🧠| **Smart Memory System ** | Three types (fact / preference / rule), stored in workspace MEMORY.md file, path-protected � only the memory tool can access it, pre-write security scan, 500 capacity, auto-extract on conversation end, strict format validation |
| 📋 | **Custom Files ** | SOUL.md (persona, never compressed) + AGENT.md (behavior rules, built-in fallback) + USER.md (user profile, workspace only, skipped if absent) |
| � | **MCP Protocol Extension ** | JSON-RPC 2.0 over stdio, dynamic tool discovery, Shadowing protection |
| � | **Web Search (dual-mode) ** | SearXNG meta-search JSON API (70+ engines) / quad-engine HTML parsing (Bing+Baidu+Sogou+360), switchable; web_fetch with auto-retry+mobile UA+SPA browser fallback |
| � | **Browser Control ** | Open pages · Screenshot · JS execution · Content extraction · Click · Type · Scroll · Close |
| 🖥️ | **Workspace Panel ** | Terminal (incremental streaming) + file browser, command security checks |
| 🖥� | **Workspace Panel ** | Terminal (incremental streaming) + file browser, command security checks |
| 🔢 | **Manual Context Length ** | Settings dropdown (128K / 256K / 512K / 1M), default 128K. Model bar shows configured value, dropdown shows per-model context length |
| 🗜️ | **Smart Context Manager ** | Sliding window + Token auto-calibration + message importance scoring + LLM structured JSON compression, smart triggers (120 msg incremental + 300 msg hard limit) |
| 🗜� | **Smart Context Manager ** | Sliding window + Token auto-calibration + message importance scoring + LLM structured JSON compression, smart triggers (120 msg incremental + 300 msg hard limit) |
| â� ±ï¸� | **Smart Timeout Protection ** | Agent Loop watchdog (configurable, default 30min) + stream total timeout (configurable, default 300s) + configurable HTTP/MCP timeouts |
| � | **Hook System ** | 4-phase lifecycle hooks (pre_tool / post_tool / post_iteration / pre_completion), built-in security check, file dedup, auto plan tracking, change audit, result validation |
| 👥 | **Sub-agent Delegation ** | spawn_task tool, isolated context + timeout protection |
| 📈 | **Token Dashboard ** | Global + session stats, consumption trend bar chart, 2s refresh, input/output color-coded |
| 📋 | **System Prompt Card ** | Collapsible card atop each AI reply — click to inspect the full context sent to the model |
| 📋 | **System Prompt Card ** | Collapsible card atop each AI reply � click to inspect the full context sent to the model |
| 🎨 | **Warm-tone UI ** | Cream `#FAF7F2` + coral `#E8734A` , fatigue-free for extended use, streaming render optimized |
| 🔔 | **System Tray ** | Native tray integration |
| � | **AES-256-GCM ** | Data encryption support |
@@ -321,7 +321,7 @@ npm run dist # 构建 Windows 安装包
</details>
<details>
<summary><strong>⚡ Command Execution (1)</strong></summary>
<summary><strong>âš? Command Execution (1)</strong></summary>
| Tool | Function |
|------|------|
@@ -404,22 +404,22 @@ npm run dist # 构建 Windows 安装包
</details>
## 🏗️ Architecture
## ðŸ� —ï¸? Architecture
```
User message → workspace SOUL.md (never compressed) → AGENT.md → USER.md (workspace, skipped if absent)
↓
Memory Retrieval (MEMORY.md keyword search) → Context Injection
↓
Agent Engine (8-state ReAct Loop, ≤8 5 iter, smart retry, path-aware serialization, watchdog+tiered timeout)
↓
User message � workspace SOUL.md (never compressed) � AGENT.md � USER.md (workspace, skipped if absent)
�
Memory Retrieval (MEMORY.md keyword search) � Context Injection
�
Agent Engine (8-state ReAct Loop, � 5 iter, smart retry, path-aware serialization, watchdog+tiered timeout)
�
Prompt Hardening (reference data markers + tool result safety rules)
↓
�
Ollama API (Streaming Response, num_ctx user-configurable 128K/256K/512K/1M)
↓
�
Tool Registry (32 Built-in + MCP Dynamic + Plan Mode plan_track)
↓
Hook System (pre/post tool/iteration/completion) → Observation → Reflection → Loop / Final Answer
�
Hook System (pre/post tool/iteration/completion) � Observation � Reflection � Loop / Final Answer
```
### 🧩 UI Components (Native DOM)
@@ -442,7 +442,7 @@ main.ts (Entry)
└── lightbox.ts # Image lightbox
```
### 🗄️ Database
### 🗄� Database
SQLite (sql.js WASM), 5 tables, WAL mode:
@@ -458,15 +458,15 @@ SQLite (sql.js WASM), 5 tables, WAL mode:
| Layer | Measure |
|------|------|
| 📁 File System | `checkPathAllowed()` — path blacklist (33 system/sensitive dirs, Linux + Windows) |
| ⚡ Command Execution | `checkCommandAllowed()` — command blacklist (30 dangerous commands, POSIX + Windows) + three modes |
| 🖥️ Frontend Rendering | HTML sanitizer (whitelist tags + URI protocol check) |
| � File System | `checkPathAllowed()` � path blacklist (33 system/sensitive dirs, Linux + Windows) |
| � Command Execution | `checkCommandAllowed()` � command blacklist (30 dangerous commands, POSIX + Windows) + three modes |
| 🖥� Frontend Rendering | HTML sanitizer (whitelist tags + URI protocol check) |
| 🔒 Electron | `contextIsolation: true` + IPC whitelist + IPC fs path validation |
| � Data Encryption | AES-256-GCM |
| 🧠Memory Security | Pre-write prompt injection / sensitive info detection, multi-layer dedup filtering |
| � MCP Security | Shadowing protection + double-underscore delimiter disambiguation |
| � Network Security | `web_fetch` streaming size limit (10MB) + OOM prevention without content-length |
| ⚡ Process Security | Windows `taskkill` forced termination + case-insensitive workspace path validation |
| âš? Process Security | Windows `taskkill` forced termination + case-insensitive workspace path validation |
## 🚀 Quick Start
@@ -485,9 +485,9 @@ npm start
ELECTRON_MIRROR = https://npmmirror.com/mirrors/electron/ npm run dist
```
Output: `release/Metona Ollama Setup v0.16.17 .exe`
Output: `release/Metona Ollama Setup v0.16.18 .exe`
## 🛠️ Common Commands
## 🛠� Common Commands
``` bash
npm start # Build and run
@@ -499,7 +499,7 @@ npm run dist # Build Windows installer
## 💻 System Requirements
- 🖥️ Windows 10/11 (64-bit)
- 🖥� Windows 10/11 (64-bit)
- 🤖 Ollama running locally (default `http://localhost:11434` )
- 💾 8GB+ RAM recommended