feat: 白龙马数字意识框架 v2.2.0 - 3D意识空间、多技能协同、自我进化系统

This commit is contained in:
xiaoyuanda666-ship-it
2026-06-07 19:43:22 +08:00
commit bf73366e81
234 changed files with 219763 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
/**
* 测试 memories_au (AFTER UPDATE) trigger 是否正常工作。
* 验证:更新记忆后,新关键词能被 FTS5 搜到。
*
* 用法node scripts/test-fts-trigger.mjs
*/
import Database from 'better-sqlite3'
import path from 'path'
import { fileURLToPath } from 'url'
import fs from 'fs'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const dbPath = path.resolve(__dirname, '../data/jarvis.db')
if (!fs.existsSync(dbPath)) {
console.error('数据库不存在:', dbPath)
process.exit(1)
}
const db = new Database(dbPath)
db.pragma('journal_mode = WAL')
const TEST_MEM_ID = 'fact_fts_trigger_test_' + Date.now()
let passed = 0
let failed = 0
function check(label, value) {
if (value) {
console.log(`${label}`)
passed++
} else {
console.log(`${label}`)
failed++
}
}
console.log('\n── FTS5 Trigger 测试 ──\n')
// 1. 插入一条测试记忆
const ts = new Date().toISOString()
const insertResult = db.prepare(`
INSERT INTO memories (event_type, content, detail, title, mem_id, entities, concepts, tags, links, source_ref, timestamp)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`).run('fact', '测试关键词_插入阶段_UNIQUE123', '详情内容_插入', '测试标题', TEST_MEM_ID, '[]', '[]', '[]', '[]', null, ts)
const newId = insertResult.lastInsertRowid
console.log(`[1] 插入记忆 id=${newId} mem_id=${TEST_MEM_ID}`)
// 2. 验证 INSERT trigger能搜到插入阶段的关键词
const afterInsert = db.prepare(`
SELECT m.* FROM memories m
JOIN memories_fts ON memories_fts.rowid = m.id
WHERE memories_fts MATCH 'UNIQUE123'
LIMIT 5
`).all()
check('INSERT trigger能搜到 UNIQUE123', afterInsert.some(r => r.id === newId))
// 3. 更新这条记忆,换成完全不同的关键词
db.prepare(`
UPDATE memories SET content = '测试关键词_更新阶段_UPDATED456', detail = '详情内容_更新', timestamp = ?
WHERE id = ?
`).run(new Date().toISOString(), newId)
console.log(`\n[2] 更新记忆 id=${newId},内容换成 UPDATED456`)
// 4. 验证 UPDATE trigger能搜到新关键词
const afterUpdate_new = db.prepare(`
SELECT m.* FROM memories m
JOIN memories_fts ON memories_fts.rowid = m.id
WHERE memories_fts MATCH 'UPDATED456'
LIMIT 5
`).all()
check('UPDATE trigger能搜到新关键词 UPDATED456', afterUpdate_new.some(r => r.id === newId))
// 5. 验证旧关键词不应该再被搜到FTS 已删除旧条目)
const afterUpdate_old = db.prepare(`
SELECT m.* FROM memories m
JOIN memories_fts ON memories_fts.rowid = m.id
WHERE memories_fts MATCH 'UNIQUE123'
LIMIT 5
`).all()
check('UPDATE trigger旧关键词 UNIQUE123 已从索引移除', !afterUpdate_old.some(r => r.id === newId))
// 6. 清理测试数据
db.prepare(`DELETE FROM memories WHERE id = ?`).run(newId)
console.log(`\n[3] 已清理测试数据`)
// 验证 DELETE trigger
const afterDelete = db.prepare(`
SELECT m.* FROM memories m
JOIN memories_fts ON memories_fts.rowid = m.id
WHERE memories_fts MATCH 'UPDATED456'
LIMIT 5
`).all()
check('DELETE trigger删除后搜不到', !afterDelete.some(r => r.id === newId))
db.close()
console.log(`\n── 结果:${passed} 通过 / ${failed} 失败 ──\n`)
process.exit(failed > 0 ? 1 : 0)