From 15ad2f3ef3245469dc3d123a09cc63505adef04e Mon Sep 17 00:00:00 2001 From: Metona Dev Date: Fri, 24 Apr 2026 12:44:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20skills=20=E8=A1=A8=E5=A2=9E=E5=8A=A0=20s?= =?UTF-8?q?ummary=20=E5=88=97=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=B8=90=E8=BF=9B?= =?UTF-8?q?=E5=BC=8F=E6=8A=80=E8=83=BD=E5=8A=A0=E8=BD=BD=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Skill 接口包含 summary 字段且 extractSkillsFromToolRecords() 会生成摘要, 但 SQLite schema 和 saveSkill() 遗漏了该列,导致保存时 summary 丢失。 - CREATE TABLE 增加 summary TEXT DEFAULT '' - 兼容迁移:ALTER TABLE 补充 summary 列 - saveSkill() INSERT 语句增加 summary 参数 - SkillRow 接口增加 summary 字段 --- src/main/db/sqlite.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/db/sqlite.ts b/src/main/db/sqlite.ts index a631d8c..e90436e 100644 --- a/src/main/db/sqlite.ts +++ b/src/main/db/sqlite.ts @@ -210,6 +210,7 @@ export async function initDatabase(): Promise { 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, @@ -225,6 +226,9 @@ export async function initDatabase(): Promise { // 兼容迁移:为已有 messages 表补充 prompt_eval_count 列(新库已有,旧库需要 ALTER) try { db.run('ALTER TABLE messages ADD COLUMN prompt_eval_count INTEGER'); } catch { /* 列已存在,忽略 */ } + // 兼容迁移:为已有 skills 表补充 summary 列 + try { db.run("ALTER TABLE skills ADD COLUMN summary TEXT DEFAULT ''"); } catch { /* 列已存在,忽略 */ } + // 尝试创建 FTS5 全文搜索(可选,sql.js 默认 WASM 可能不包含 FTS5) try { db.run(` @@ -312,6 +316,7 @@ export interface SkillRow { id: string; name: string; description: string; + summary: string; trigger_keywords: string | null; tool_chain: string; success_count: number; @@ -522,9 +527,9 @@ export function getTracesBySession(sessionId: string): TraceRow[] { // ─── Skills CRUD (v4.2) ─── export function saveSkill(skill: SkillRow): string { - runExec(getDb(), `INSERT OR REPLACE INTO skills (id, name, description, 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.trigger_keywords, skill.tool_chain, + 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] );