fix: skills 表增加 summary 列,修复渐进式技能加载数据丢失

Skill 接口包含 summary 字段且 extractSkillsFromToolRecords() 会生成摘要,
但 SQLite schema 和 saveSkill() 遗漏了该列,导致保存时 summary 丢失。
- CREATE TABLE 增加 summary TEXT DEFAULT ''
- 兼容迁移:ALTER TABLE 补充 summary 列
- saveSkill() INSERT 语句增加 summary 参数
- SkillRow 接口增加 summary 字段
This commit is contained in:
Metona Dev
2026-04-24 12:44:23 +08:00
parent 9f38d35b1e
commit 15ad2f3ef3
+8 -3
View File
@@ -210,6 +210,7 @@ export async function initDatabase(): Promise<SQL.Database> {
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
name TEXT NOT NULL, name TEXT NOT NULL,
description TEXT NOT NULL, description TEXT NOT NULL,
summary TEXT DEFAULT '',
trigger_keywords TEXT, trigger_keywords TEXT,
tool_chain TEXT NOT NULL, tool_chain TEXT NOT NULL,
success_count INTEGER DEFAULT 0, success_count INTEGER DEFAULT 0,
@@ -225,6 +226,9 @@ export async function initDatabase(): Promise<SQL.Database> {
// 兼容迁移:为已有 messages 表补充 prompt_eval_count 列(新库已有,旧库需要 ALTER) // 兼容迁移:为已有 messages 表补充 prompt_eval_count 列(新库已有,旧库需要 ALTER)
try { db.run('ALTER TABLE messages ADD COLUMN prompt_eval_count INTEGER'); } catch { /* 列已存在,忽略 */ } 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 // 尝试创建 FTS5 全文搜索(可选,sql.js 默认 WASM 可能不包含 FTS5
try { try {
db.run(` db.run(`
@@ -312,6 +316,7 @@ export interface SkillRow {
id: string; id: string;
name: string; name: string;
description: string; description: string;
summary: string;
trigger_keywords: string | null; trigger_keywords: string | null;
tool_chain: string; tool_chain: string;
success_count: number; success_count: number;
@@ -522,9 +527,9 @@ export function getTracesBySession(sessionId: string): TraceRow[] {
// ─── Skills CRUD (v4.2) ─── // ─── Skills CRUD (v4.2) ───
export function saveSkill(skill: SkillRow): string { 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) 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[skill.id, skill.name, skill.description, skill.trigger_keywords, skill.tool_chain, [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.success_count, skill.fail_count, skill.avg_duration_ms,
skill.created_at, skill.updated_at, skill.last_used_at] skill.created_at, skill.updated_at, skill.last_used_at]
); );