From 20cbfbd1693dac583535f19bcf6bdbc16fc1aa25 Mon Sep 17 00:00:00 2001
From: thzxx
Date: Mon, 22 Jun 2026 18:13:01 +0800
Subject: [PATCH] =?UTF-8?q?v0.11.11:=20=E5=BD=BB=E5=BA=95=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4=E6=8A=80=E8=83=BD=E7=B3=BB=E7=BB=9F=EF=BC=8C=E5=B7=A5?=
=?UTF-8?q?=E5=85=B7=2044=E2=86=9242=EF=BC=8CSQLite=207=E2=86=926=20?=
=?UTF-8?q?=E5=BC=A0=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 删除 src/renderer/services/skill-manager.ts (480行)
- sqlite.ts: 删除 skills 表/索引/迁移/SkillRow接口/CRUD
- ipc.ts: 删除 6 个 skills IPC handler
- preload.ts/types.d.ts: 删除 skills bridge 方法/类型
- agent-engine.ts: 删除技能匹配上下文注入/自动提取
- tool-registry.ts: 删除 skill_list/skill_view 工具定义/执行
- log-service.ts/sub-agent.ts/workspace-panel.ts: 清理引用
- index.html: 帮助面板/工具卡片更新,44→42
- README/release-notes/DEVELOPMENT/AGENT: 文档全量同步
---
README.md | 32 +-
docs/BUILD.md | 6 +-
docs/DEVELOPMENT.md | 14 +-
package-lock.json | 4 +-
package.json | 4 +-
release-notes.md | 13 +-
src/main/db/sqlite.ts | 90 ----
src/main/ipc.ts | 27 --
src/main/menu.ts | 2 +-
src/main/preload.ts | 8 +-
src/renderer/components/workspace-panel.ts | 4 +-
src/renderer/index.html | 17 +-
src/renderer/public/AGENT.md | 1 -
src/renderer/services/agent-engine.ts | 21 +-
src/renderer/services/log-service.ts | 1 -
src/renderer/services/skill-manager.ts | 480 ---------------------
src/renderer/services/sub-agent.ts | 1 -
src/renderer/services/tool-registry.ts | 46 +-
src/renderer/types.d.ts | 8 +-
19 files changed, 41 insertions(+), 738 deletions(-)
delete mode 100644 src/renderer/services/skill-manager.ts
diff --git a/README.md b/README.md
index 62b0e0a..ba0a31a 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
-
+
@@ -35,10 +35,9 @@
| | 功能 | 说明 |
|:---:|:---|:---|
| 🤖 | **ReAct Agent Loop** | 始终开启的唯一对话模式。Thought → Action → Observation → Reflection 完整循环,最大 85 轮(可配置),自动重试 2 次,工具去重,并行/链式执行 |
-| 🔧 | **44 个内置工具** | 文件系统(16个) · 命令执行 · 联网搜索 · 浏览器控制(9个) · Git · 记忆 · 会话 · 子代理 · 系统工具 |
+| 🔧 | **42 个内置工具** | 文件系统(16个) · 命令执行 · 联网搜索 · 浏览器控制(9个) · Git · 记忆 · 会话 · 子代理 · 系统工具 |
| 🧠 | **智能记忆系统** | 三类记忆(fact / preference / rule),FTS5 全文搜索 + 向量语义搜索,写入前安全扫描,容量 500 条,90 天衰减 |
| 📋 | **自定义文件** | SOUL.md(人格,不可压缩)+ AGENT.md(行为准则)+ USER.md(用户画像),工作空间优先,内置默认 fallback |
-| 🎯 | **技能自动生成 v1.1** | 工具调用链自动提取 → 语义匹配 → 参数自优化 → 未使用衰减 → 技能链合并,越用越精准 |
| 🌐 | **MCP 协议扩展** | JSON-RPC 2.0 over stdio,动态工具发现,Shadowing 防护 |
| 🔍 | **联网搜索(双模式)** | SearXNG 元搜索引擎 JSON API(70+引擎聚合)/ 四引擎 HTML 解析(Bing+百度+搜狗+360),双模式可切换;web_fetch 支持反爬+UA切换+浏览器回退 |
| 🌏 | **浏览器控制** | 打开网页 · 截图 · 执行 JS · 提取内容 · 点击 · 输入 · 滚动 · 关闭 |
@@ -138,12 +137,10 @@
-📊 技能 / 会话 / 子代理(5 个)
+📊 会话 / 子代理(3 个)
| 工具 | 功能 |
|------|------|
-| `skill_list` | 列出已生成的技能 |
-| `skill_view` | 查看技能详情 |
| `session_list` | 列出历史会话 |
| `session_read` | 读取会话内容 |
| `spawn_task` | 委派子代理(独立上下文 + 超时保护) |
@@ -173,11 +170,9 @@
↓
记忆检索 (FTS5 + 向量语义搜索) → 上下文注入
↓
- 技能匹配 (语义匹配 + 参数自优化 + 衰减 + 链合并)
- ↓
Ollama API (流式响应,num_ctx 自动检测)
↓
- Tool Registry (44 内置 + MCP 动态)
+ Tool Registry (42 内置 + MCP 动态)
↓
观察结果 → 反思 → 循环 / 最终回答
```
@@ -204,7 +199,7 @@ main.ts (入口)
### 🗄️ 数据库
-SQLite (sql.js WASM),7 张表,WAL 模式 + FTS5 全文搜索:
+SQLite (sql.js WASM),6 张表,WAL 模式 + FTS5 全文搜索:
| 表 | 用途 |
|---|---|
@@ -214,7 +209,6 @@ SQLite (sql.js WASM),7 张表,WAL 模式 + FTS5 全文搜索:
| `memories` | Agent 记忆(FTS5 + 向量嵌入) |
| `settings` | 设置(JSON 序列化) |
| `traces` | ReAct 执行轨迹 |
-| `skills` | 自动生成的技能 |
## 🔒 安全机制
@@ -245,7 +239,7 @@ npm start
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
```
-产出:`release/Metona Ollama Setup v0.11.10.exe`
+产出:`release/Metona Ollama Setup v0.11.11.exe`
## 🛠️ 常用命令
@@ -276,10 +270,9 @@ npm run dist # 构建 Windows 安装包
| | Feature | Description |
|:---:|:---|:---|
| 🤖 | **ReAct Agent Loop** | Always-on, only chat mode. Full Thought → Action → Observation → Reflection cycle, up to 85 iterations (configurable), auto-retry 2 times, tool dedup, parallel/chain execution |
-| 🔧 | **44 Built-in Tools** | File system · Command · Web search · Browser · Git · Memory · Skills · Sessions · Sub-agent · System |
+| 🔧 | **42 Built-in Tools** | File system · Command · Web search · Browser · Git · Memory · Sessions · Sub-agent · System |
| 🧠 | **Smart Memory System** | Three types (fact / preference / rule), FTS5 + vector semantic search, pre-write security scan, 500 capacity, 90-day decay |
| 📋 | **Custom Files** | SOUL.md (persona, never compressed) + AGENT.md (behavior rules) + USER.md (user profile), workspace-first with built-in defaults |
-| 🎯 | **Auto Skill Generation v1.1** | Tool chain extraction → semantic matching → parameter self-optimization → decay → chain merging |
| 🌐 | **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 |
@@ -378,12 +371,10 @@ npm run dist # 构建 Windows 安装包
-📊 Skills / Sessions / Sub-agent (5)
+📊 Sessions / Sub-agent (3)
| Tool | Function |
|------|------|
-| `skill_list` | List generated skills |
-| `skill_view` | View skill details |
| `session_list` | List session history |
| `session_read` | Read session content |
| `spawn_task` | Delegate sub-agent (isolated context + timeout) |
@@ -413,7 +404,7 @@ User message → workspace SOUL.md (never compressed) → AGENT.md → USER.md
↓
Ollama API (Streaming Response)
↓
- Tool Registry (44 Built-in + MCP Dynamic)
+ Tool Registry (42 Built-in + MCP Dynamic)
↓
Observation → Reflection → Loop / Final Answer
```
@@ -440,7 +431,7 @@ main.ts (Entry)
### 🗄️ Database
-SQLite (sql.js WASM), 7 tables, WAL mode + FTS5 full-text search:
+SQLite (sql.js WASM), 6 tables, WAL mode + FTS5 full-text search:
| Table | Purpose |
|---|---|
@@ -450,7 +441,6 @@ SQLite (sql.js WASM), 7 tables, WAL mode + FTS5 full-text search:
| `memories` | Agent memories (FTS5 + vector embedding) |
| `settings` | Settings (JSON serialization) |
| `traces` | ReAct execution traces |
-| `skills` | Auto-generated skills |
## 🔒 Security
@@ -481,7 +471,7 @@ npm start
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
```
-Output: `release/Metona Ollama Setup v0.11.10.exe`
+Output: `release/Metona Ollama Setup v0.11.11.exe`
## 🛠️ Common Commands
diff --git a/docs/BUILD.md b/docs/BUILD.md
index 7339b98..cfbba20 100644
--- a/docs/BUILD.md
+++ b/docs/BUILD.md
@@ -91,7 +91,7 @@ npm run dist # NSIS 安装包
| 文件 | 说明 |
|------|------|
-| `release/Metona Ollama Setup v0.11.10.exe` | NSIS 安装包(可选目录、创建快捷方式) |
+| `release/Metona Ollama Setup v0.11.11.exe` | NSIS 安装包(可选目录、创建快捷方式) |
> 仅提供 NSIS 安装包。
@@ -103,7 +103,7 @@ npm run dist # NSIS 安装包
TOKEN="your_access_token"
curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama-desktop/releases?access_token=$TOKEN" \
-H "Content-Type: application/json" \
- -d '{"tag_name":"v0.11.10","name":"v0.11.10","body":"Release notes","target_commitish":"master"}'
+ -d '{"tag_name":"v0.11.11","name":"v0.11.11","body":"Release notes","target_commitish":"master"}'
```
### 上传附件
@@ -112,7 +112,7 @@ curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama-desktop/release
TOKEN="your_access_token"
RELEASE_ID=""
curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama-desktop/releases/$RELEASE_ID/attach_files?access_token=$TOKEN" \
- -H "Content-Type: multipart/form-data" -F "file=@release/Metona Ollama Setup v0.11.10.exe"
+ -H "Content-Type: multipart/form-data" -F "file=@release/Metona Ollama Setup v0.11.11.exe"
```
## 故障排查
diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md
index 811292b..6fc6075 100644
--- a/docs/DEVELOPMENT.md
+++ b/docs/DEVELOPMENT.md
@@ -1,6 +1,6 @@
# Metona Ollama Desktop — 开发规范
-> 版本: v0.11.10 | 更新: 2026-06-05 | 维护: 项目团队
+> 版本: v0.11.11 | 更新: 2026-06-05 | 维护: 项目团队
---
@@ -43,7 +43,7 @@ src/
│ ├── tray.ts # 系统托盘
│ ├── utils.ts # 工具函数
│ └── db/
-│ └── sqlite.ts # SQLite 数据库层(7 张表 + FTS5)
+│ └── sqlite.ts # SQLite 数据库层(6 张表 + FTS5)
├── renderer/ # 渲染进程
│ ├── main.ts # 入口、全局初始化
│ ├── types.d.ts # 完整类型定义
@@ -53,12 +53,11 @@ src/
│ ├── components/ # 14 个 UI 组件
│ ├── services/
│ │ ├── agent-engine.ts # ReAct Agent Loop 引擎
-│ │ ├── tool-registry.ts # 工具注册与调度(39 个内置工具 + MCP 动态)
+│ │ ├── tool-registry.ts # 工具注册与调度(42 个内置工具 + MCP 动态)
│ │ ├── memory-manager.ts # 记忆管理核心
│ │ ├── vector-memory.ts # 记忆向量索引(IVF)
│ │ ├── vector-store.ts # 向量存储 + IVF 索引
│ │ ├── context-manager.ts # 上下文窗口管理
-│ │ ├── skill-manager.ts # 技能自动生成(Level 0)
│ │ ├── sub-agent.ts # 子代理委派
│ │ ├── mcp-client.ts # MCP 渲染端客户端
│ │ ├── log-service.ts # 结构化日志
@@ -155,11 +154,11 @@ import {
### 5.1 五大子系统
```
-① Agent 系统 → agent-engine.ts + tool-registry.ts(39 内置工具 + MCP 动态)
+① Agent 系统 → agent-engine.ts + tool-registry.ts(42 内置工具 + MCP 动态)
② 记忆系统 → memory-manager.ts + vector-memory.ts
③ 向量存储 → vector-store.ts(IVF 索引)
④ 工作空间 → workspace.ts (主进程) + workspace-panel.ts (渲染进程)
-⑤ 数据层 → db/sqlite.ts(SQLite, 7 张表, FTS5)
+⑤ 数据层 → db/sqlite.ts(SQLite, 6 张表, FTS5)
```
### 5.2 ReAct Agent Loop
@@ -177,7 +176,7 @@ import {
### 5.3 SQLite 数据库
-7 张表,WAL 模式 + NORMAL 同步:
+6 张表,WAL 模式 + NORMAL 同步:
| 表 | 用途 | 关键特性 |
|---|---|---|
@@ -187,7 +186,6 @@ import {
| `memories` | Agent 记忆 | FTS5 全文搜索,向量嵌入,容量 500 上限 |
| `settings` | 设置 | JSON 序列化 |
| `traces` | ReAct 执行轨迹 | Agent 可观测性 |
-| `skills` | 自动生成的可复用技能 | 成功/失败次数、平均时长 |
### 5.4 联网搜索联动
diff --git a/package-lock.json b/package-lock.json
index 3966187..02235d5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "metona-ollama-desktop",
- "version": "0.11.10",
+ "version": "0.11.11",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "metona-ollama-desktop",
- "version": "0.11.10",
+ "version": "0.11.11",
"license": "MIT",
"dependencies": {
"ffmpeg-static": "^5.2.0",
diff --git a/package.json b/package.json
index fdb2fbf..a5448b2 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "metona-ollama-desktop",
- "version": "0.11.10",
- "description": "Metona Ollama - TypeScript + Electron 桌面 AI 聊天客户端",
+ "version": "0.11.11",
+ "description": "Metona Ollama - TypeScript + Electron \u684c\u9762 AI \u804a\u5929\u5ba2\u6237\u7aef",
"main": "dist/main/main.js",
"author": "thzxx",
"license": "MIT",
diff --git a/release-notes.md b/release-notes.md
index 39b79ec..871c298 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -4,7 +4,7 @@
## 项目简介
-Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,采用 TypeScript + Electron 构建。所有 AI 推理均在本地完成,数据不离开本机。支持 ReAct Agent Loop、44 个内置工具、智能记忆系统、MCP 协议扩展、四引擎联网搜索、浏览器控制等能力。
+Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,采用 TypeScript + Electron 构建。所有 AI 推理均在本地完成,数据不离开本机。支持 ReAct Agent Loop、42 个内置工具、智能记忆系统、MCP 协议扩展、四引擎联网搜索、浏览器控制等能力。
---
@@ -18,7 +18,7 @@ Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,
- 链式工具调用:web_search → web_fetch、list_directory → read_file 等模式
- 文本解析兜底:当模型未通过 tool_calls 返回时,从文本中提取 Action/Input
-### 🔧 44 个内置工具
+### 🔧 42 个内置工具
| 分类 | 数量 | 工具 |
|------|------|------|
@@ -28,7 +28,6 @@ Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,
| 浏览器控制 | 8 | browser_open, browser_screenshot, browser_evaluate, browser_extract, browser_click, browser_type, browser_scroll, browser_close |
| Git | 1 | git(init/clone/add/commit/push/pull/diff/log/status/branch/checkout/merge/stash/reset/tag/remote) |
| 记忆管理 | 4 | memory_search, memory_add, memory_replace, memory_remove |
-| 技能系统 | 2 | skill_list, skill_view(渐进式加载) |
| 会话管理 | 2 | session_list, session_read |
| 子代理 | 1 | spawn_task(独立上下文 + 超时保护) |
| 系统工具 | 6 | datetime / calculator / random / uuid / json_format / hash |
@@ -62,11 +61,6 @@ Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,
- Token 消耗趋势图(输入/输出分色显示)
- 2 秒自动刷新
-### 📊 技能自动生成系统
-- 从成功的工具调用链中自动提取可复用技能
-- Level 0 简短摘要(~100 tokens),渐进式加载
-- 技能匹配与上下文注入
-
### 🔒 安全机制
- 文件路径安全检查(checkPathAllowed)
- 命令执行安全检查(checkCommandAllowed)
@@ -91,7 +85,7 @@ Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,
```
### 数据层
-- **SQLite (sql.js WASM)**:7 张表(sessions, messages, tool_calls, memories, settings, traces, skills)
+- **SQLite (sql.js WASM)**:6 张表(sessions, messages, tool_calls, memories, settings, traces)
- **FTS5 全文搜索**:memories 表支持全文检索
- **WAL 模式 + NORMAL 同步**:零原生依赖,无需 electron-rebuild
@@ -116,7 +110,6 @@ Metona Ollama Desktop 是一个基于 **Ollama** 的本地 AI 桌面客户端,
## 最近改进
- **`/compress` 上下文压缩**:支持手动触发 LLM 摘要压缩,长对话不再丢失上下文
-- **Skill 渐进式加载**:技能摘要(Level 0)仅 ~100 tokens,按需加载完整工具链
- **Token 全局统计**:仪表盘新增跨会话累计 Token 分析视图
- **图表重写**:Token 消耗趋势图重写 — 网格线 + 正确高度计算 + 柱子底部对齐
- **Agent Loop 稳定性**:修复 abortController 在自动压缩前未定义的严重 bug
diff --git a/src/main/db/sqlite.ts b/src/main/db/sqlite.ts
index 06c69f9..80a80d2 100644
--- a/src/main/db/sqlite.ts
+++ b/src/main/db/sqlite.ts
@@ -205,22 +205,6 @@ export async function initDatabase(): Promise {
);
CREATE INDEX IF NOT EXISTS idx_traces_session ON traces(session_id, created_at);
- -- v4.2 技能表(自动从成功工具调用链提取)
- CREATE TABLE IF NOT EXISTS skills (
- id TEXT PRIMARY KEY,
- name TEXT NOT NULL,
- description TEXT NOT NULL,
- summary TEXT DEFAULT '',
- trigger_keywords TEXT,
- tool_chain TEXT NOT NULL,
- success_count INTEGER DEFAULT 0,
- fail_count INTEGER DEFAULT 0,
- avg_duration_ms INTEGER DEFAULT 0,
- created_at INTEGER NOT NULL,
- updated_at INTEGER NOT NULL,
- last_used_at INTEGER
- );
- CREATE INDEX IF NOT EXISTS idx_skills_updated ON skills(updated_at DESC);
`);
// 兼容迁移:为已有 messages 表补充 attachments 列(文件/视频等附件 JSON)
@@ -228,8 +212,6 @@ export async function initDatabase(): Promise {
// 兼容迁移:为已有 messages 表补充 prompt_eval_count 列
- // 兼容迁移:为已有 skills 表补充 summary 列
- try { db.run("ALTER TABLE skills ADD COLUMN summary TEXT DEFAULT ''"); } catch { /* 列已存在,忽略 */ }
// 尝试创建 FTS5 全文搜索(可选,sql.js 默认 WASM 可能不包含 FTS5)
try {
@@ -314,22 +296,6 @@ export interface ToolCallRow {
created_at: number;
}
-// v4.2
-export interface SkillRow {
- id: string;
- name: string;
- description: string;
- summary: string;
- trigger_keywords: string | null;
- tool_chain: string;
- success_count: number;
- fail_count: number;
- avg_duration_ms: number;
- created_at: number;
- updated_at: number;
- last_used_at: number | null;
-}
-
export interface TraceRow {
id: string;
session_id: string;
@@ -527,62 +493,6 @@ export function getTracesBySession(sessionId: string): TraceRow[] {
return queryAll(getDb(), 'SELECT * FROM traces WHERE session_id = ? ORDER BY step_index ASC', [sessionId]) as unknown as TraceRow[];
}
-// ─── Skills CRUD (v4.2) ───
-
-export function saveSkill(skill: SkillRow): string {
- runExec(getDb(), `INSERT OR REPLACE INTO skills (id, name, description, summary, trigger_keywords, tool_chain, success_count, fail_count, avg_duration_ms, created_at, updated_at, last_used_at)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
- [skill.id, skill.name, skill.description, skill.summary || '', skill.trigger_keywords, skill.tool_chain,
- skill.success_count, skill.fail_count, skill.avg_duration_ms,
- skill.created_at, skill.updated_at, skill.last_used_at]
- );
- persist();
- return skill.id;
-}
-
-
-export function getAllSkills(): SkillRow[] {
- return queryAll(getDb(), 'SELECT * FROM skills ORDER BY success_count DESC, updated_at DESC') as unknown as SkillRow[];
-}
-
-export function deleteSkill(id: string): void {
- runExec(getDb(), 'DELETE FROM skills WHERE id = ?', [id]);
- persist();
-}
-
-export function clearAllSkills(): void {
- getDb().run('DELETE FROM skills');
- persist();
-}
-
-export function searchSkills(keywords: string, limit = 5): SkillRow[] {
- const likeQ = `%${keywords.replace(/[^\w\u4e00-\u9fff]/g, '%')}%`;
- return queryAll(getDb(), `
- SELECT * FROM skills
- WHERE trigger_keywords LIKE ? OR name LIKE ? OR description LIKE ?
- ORDER BY success_count DESC, updated_at DESC
- LIMIT ?
- `, [likeQ, likeQ, likeQ, limit]) as unknown as SkillRow[];
-}
-
-export function incrementSkillUsage(id: string, success: boolean, durationMs: number): void {
- const d = getDb();
- const skill = queryOne(d, 'SELECT success_count, fail_count, avg_duration_ms FROM skills WHERE id = ?', [id]) as any;
- if (!skill) return;
-
- const newSuccess = success ? skill.success_count + 1 : skill.success_count;
- const newFail = success ? skill.fail_count : skill.fail_count + 1;
- const totalUses = newSuccess + newFail;
- // 指数移动平均
- const alpha = 0.3;
- const newAvg = Math.round(alpha * durationMs + (1 - alpha) * (skill.avg_duration_ms || durationMs));
-
- runExec(d, `UPDATE skills SET success_count = ?, fail_count = ?, avg_duration_ms = ?, updated_at = ?, last_used_at = ? WHERE id = ?`,
- [newSuccess, newFail, newAvg, Date.now(), Date.now(), id]
- );
- persist();
-}
-
// ─── Token 全局统计 ───
export interface SessionTokenStat {
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 68f4fbe..a758531 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -15,7 +15,6 @@ import {
saveSetting, getSetting,
saveToolCall, getToolCallsBySession,
saveTrace, getTracesBySession,
- saveSkill, getAllSkills, deleteSkill, clearAllSkills, searchSkills, incrementSkillUsage,
exportAllSessions, importSessions,
getAllSessionsTokenStats
} from './db/sqlite.js';
@@ -433,32 +432,6 @@ export async function setupIPC(): Promise {
catch (err) { sendLog('error', '导入失败', (err as Error).message); return { imported: 0, skipped: 0 }; }
});
- // ── Skills (v4.2) ──
- ipcMain.handle('db:saveSkill', (_, skill) => {
- try { return { success: true, id: saveSkill(skill) }; }
- catch (err) { return { success: false, error: (err as Error).message }; }
- });
- ipcMain.handle('db:getAllSkills', () => {
- try { return getAllSkills(); }
- catch { return []; }
- });
- ipcMain.handle('db:deleteSkill', (_, id) => {
- try { deleteSkill(id); return { success: true }; }
- catch (err) { return { success: false, error: (err as Error).message }; }
- });
- ipcMain.handle('db:clearAllSkills', () => {
- try { clearAllSkills(); return { success: true }; }
- catch (err) { return { success: false, error: (err as Error).message }; }
- });
- ipcMain.handle('db:searchSkills', (_, query: string, limit?: number) => {
- try { return searchSkills(query, limit ?? 5); }
- catch { return []; }
- });
- ipcMain.handle('db:incrementSkillUsage', (_, id: string, success: boolean, durationMs: number) => {
- try { incrementSkillUsage(id, success, durationMs); return { success: true }; }
- catch (err) { return { success: false, error: (err as Error).message }; }
- });
-
// ── Token 全局统计 ──
ipcMain.handle('db:getAllTokenStats', () => {
try { return getAllSessionsTokenStats(); }
diff --git a/src/main/menu.ts b/src/main/menu.ts
index a92e323..46838a7 100644
--- a/src/main/menu.ts
+++ b/src/main/menu.ts
@@ -101,7 +101,7 @@ export function createMenu(): void {
dialog.showMessageBox(mainWindow!, {
type: 'info',
title: '关于 Metona Ollama',
- message: 'Metona Ollama Desktop v0.11.10',
+ message: 'Metona Ollama Desktop v0.11.11',
detail: 'TypeScript + Electron Ollama AI 聊天客户端\n\nhttps://gitee.com/thzxx/metona-ollama',
icon: getIconPath()
});
diff --git a/src/main/preload.ts b/src/main/preload.ts
index 4e5091d..35bb05b 100644
--- a/src/main/preload.ts
+++ b/src/main/preload.ts
@@ -77,13 +77,7 @@ contextBridge.exposeInMainWorld('metonaDesktop', {
getTraces: (sessionId: string) => ipcRenderer.invoke('db:getTraces', sessionId),
exportSessions: () => ipcRenderer.invoke('db:exportSessions'),
importSessions: (data: unknown) => ipcRenderer.invoke('db:importSessions', data),
- // v4.2 Skills
- saveSkill: (skill: unknown) => ipcRenderer.invoke('db:saveSkill', skill),
- getAllSkills: () => ipcRenderer.invoke('db:getAllSkills'),
- deleteSkill: (id: string) => ipcRenderer.invoke('db:deleteSkill', id),
- clearAllSkills: () => ipcRenderer.invoke('db:clearAllSkills'),
- searchSkills: (query: string, limit?: number) => ipcRenderer.invoke('db:searchSkills', query, limit),
- incrementSkillUsage: (id: string, success: boolean, durationMs: number) => ipcRenderer.invoke('db:incrementSkillUsage', id, success, durationMs),
+
getAllTokenStats: () => ipcRenderer.invoke('db:getAllTokenStats'),
},
workspace: {
diff --git a/src/renderer/components/workspace-panel.ts b/src/renderer/components/workspace-panel.ts
index ed86ed5..d4ea4c4 100644
--- a/src/renderer/components/workspace-panel.ts
+++ b/src/renderer/components/workspace-panel.ts
@@ -964,7 +964,7 @@ function getToolDisplayName(name: string): string {
diff_files: '文件对比', replace_in_files: '批量替换', read_multiple_files: '批量读取',
git: 'Git 操作', compress: '压缩/解压', web_search: '联网搜索',
memory_search: '搜索记忆', memory_add: '添加记忆', memory_replace: '替换记忆', memory_remove: '删除记忆',
- skill_list: '技能列表', skill_view: '查看技能',
+
session_list: '会话列表', session_read: '读取会话', spawn_task: '子代理委派',
browser_open: '打开网页', browser_screenshot: '浏览器截图', browser_evaluate: '执行JS', browser_extract: '提取内容',
browser_click: '点击元素', browser_type: '输入文本', browser_scroll: '滚动页面', browser_close: '关闭浏览器'
@@ -981,7 +981,7 @@ function getToolIcon(name: string): string {
diff_files: '🔀', replace_in_files: '🔄', read_multiple_files: '📚',
git: '🔖', compress: '🗜️', web_search: '🔍',
memory_search: '🧠', memory_add: '💾', memory_replace: '✏️', memory_remove: '🗑️',
- skill_list: '🎯', skill_view: '👁️',
+
session_list: '📋', session_read: '📖', spawn_task: '🤖',
browser_open: '🌐', browser_screenshot: '📸', browser_evaluate: '⚡', browser_extract: '📰',
browser_click: '👆', browser_type: '⌨️', browser_scroll: '↕️', browser_close: '❌'
diff --git a/src/renderer/index.html b/src/renderer/index.html
index f6be390..c722b4c 100644
--- a/src/renderer/index.html
+++ b/src/renderer/index.html
@@ -28,7 +28,7 @@