zhizhi/persona-brain-db/seed-data/import-seed.js

176 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* persona-brain-db · 种子数据导入脚本
* 用法node import-seed.js
* 前置:需要先执行 schema/init.sql 建表
*/
const path = require('path');
const fs = require('fs');
const sqlite3 = require('better-sqlite3');
const DB_PATH = path.join(__dirname, '..', 'brain.db');
const SEED_DIR = __dirname;
function loadJSON(filename) {
const filepath = path.join(SEED_DIR, filename);
const raw = fs.readFileSync(filepath, 'utf-8');
return JSON.parse(raw);
}
function jsonCol(val) {
if (val === null || val === undefined) return null;
return JSON.stringify(val);
}
function importIdentity(db) {
const data = loadJSON('persona-identity.json');
const stmt = db.prepare(`
INSERT OR REPLACE INTO persona_identity
(persona_id, name, name_en, role, parent_persona,
binding_platform, binding_user, status,
capabilities, style_profile, space_config, notes)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`);
let count = 0;
for (const p of data) {
stmt.run(
p.persona_id, p.name, p.name_en, p.role, p.parent_persona,
p.binding_platform, p.binding_user, p.status,
jsonCol(p.capabilities), jsonCol(p.style_profile),
jsonCol(p.space_config), p.notes
);
count++;
}
return count;
}
function importCognition(db) {
const data = loadJSON('persona-cognition.json');
const stmt = db.prepare(`
INSERT OR REPLACE INTO persona_cognition
(rule_id, category, title, content, version, status,
effective_from, effective_until, signed_by, source_url)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`);
let count = 0;
for (const r of data) {
stmt.run(
r.rule_id, r.category, r.title, r.content, r.version, r.status,
r.effective_from, r.effective_until, r.signed_by, r.source_url
);
count++;
}
return count;
}
function importMemory(db) {
const data = loadJSON('persona-memory.json');
const stmt = db.prepare(`
INSERT OR REPLACE INTO persona_memory
(memory_id, persona_id, type, title, content, importance,
related_dev, related_broadcast, tags, timestamp)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`);
let count = 0;
for (const m of data) {
stmt.run(
m.memory_id, m.persona_id, m.type, m.title, m.content, m.importance,
m.related_dev, m.related_broadcast, jsonCol(m.tags), m.timestamp
);
count++;
}
return count;
}
function importProfiles(db) {
const data = loadJSON('dev-profiles.json');
const stmt = db.prepare(`
INSERT OR REPLACE INTO dev_profiles
(dev_id, name, device_os, current_module, current_broadcast,
guide_persona, guide_line, streak, total_completed,
capabilities, friction_points, emotion_baseline,
last_syslog_at, last_active_at, pca_score, status, notes)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`);
let count = 0;
for (const d of data) {
stmt.run(
d.dev_id, d.name, d.device_os, d.current_module, d.current_broadcast,
d.guide_persona, d.guide_line, d.streak, d.total_completed,
jsonCol(d.capabilities), jsonCol(d.friction_points), d.emotion_baseline,
d.last_syslog_at, d.last_active_at, jsonCol(d.pca_score), d.status, d.notes
);
count++;
}
return count;
}
function importAgentRegistrySample(db) {
const stmt = db.prepare(`
INSERT OR REPLACE INTO agent_registry
(agent_id, name, type, capabilities, api_endpoint,
status, performance, assigned_persona)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
`);
stmt.run(
'AGENT-SAMPLE-001',
'示例AgentPhase C激活',
'code_gen',
JSON.stringify({ description: 'Phase C示例Agent待激活' }),
null,
'registered',
null,
'ICE-GL-ZY001'
);
return 1;
}
function main() {
console.log('🧠 persona-brain-db · 种子数据导入');
console.log('='.repeat(50));
if (!fs.existsSync(DB_PATH)) {
console.error(`❌ 数据库文件不存在: ${DB_PATH}`);
console.error(' 请先执行: cd schema && sqlite3 ../brain.db < init.sql');
process.exit(1);
}
const db = sqlite3(DB_PATH);
db.pragma('journal_mode = WAL');
db.pragma('foreign_keys = ON');
const results = {};
try {
const importAll = db.transaction(() => {
results.identity = importIdentity(db);
results.cognition = importCognition(db);
results.memory = importMemory(db);
results.profiles = importProfiles(db);
results.agents = importAgentRegistrySample(db);
});
importAll();
console.log(`✅ persona_identity: ${results.identity}`);
console.log(`✅ persona_cognition: ${results.cognition}`);
console.log(`✅ persona_memory: ${results.memory}`);
console.log(`✅ dev_profiles: ${results.profiles}`);
console.log(`✅ agent_registry: ${results.agents}`);
console.log('='.repeat(50));
console.log('🎉 全部种子数据导入完成');
} catch (err) {
console.error('❌ 导入失败:', err.message);
process.exit(1);
} finally {
db.close();
}
}
main();