fix-db-paths.js 1.98 KB
#!/usr/bin/env node
/**
 * fix-db-paths.js — 修正 SQLite 中 directory 字段的大小写问题
 *
 * 将 /Users/yibo/Documents/LemonAI/LemonApe → /Users/yibo/Documents/LemonAI/lemonape
 * 以兼容 Linux 环境。
 */

const path = require('path');

// Ensure we can find project modules
const MODULE = require('module');
const PROJECT_ROOT = path.resolve(__dirname, '..');
MODULE.globalPaths.push(path.join(PROJECT_ROOT, 'node_modules'));

// Load .env
const fs = require('fs');
const envFile = path.join(PROJECT_ROOT, '.env');
if (fs.existsSync(envFile)) {
  for (const line of fs.readFileSync(envFile, 'utf-8').split('\n')) {
    const m = line.match(/^([^#=]+)=(.*)$/);
    if (m) process.env[m[1].trim()] = m[2].trim();
  }
}

const skillDb = require(path.join(PROJECT_ROOT, 'server', 'services', 'skill-db'));

const WRONG_PATTERN = '/LemonApe/';
const CORRECT_PATTERN = '/lemonape/';

const skills = skillDb.listSkills();
let fixed = 0;

console.log(`\n🔧 扫描 ${skills.length} 个 skills 的 directory 字段...\n`);

for (const skill of skills) {
  if (skill.directory && skill.directory.includes(WRONG_PATTERN)) {
    const oldDir = skill.directory;
    const newDir = oldDir.replace(WRONG_PATTERN, CORRECT_PATTERN);
    console.log(`  ✏️  ${skill.skillName}`);
    console.log(`     旧: ${oldDir}`);
    console.log(`     新: ${newDir}`);
    skillDb.updateSkill(skill.skillName, { directory: newDir });
    fixed++;
  }
}

if (fixed > 0) {
  console.log(`\n✅ 已修正 ${fixed} 个 skill 的路径`);
} else {
  console.log(`\n✅ 所有路径已正确,无需修正`);
}

// 验证
console.log(`\n── 验证 ──`);
const keyAgents = ['l3-hunt', 'l2-digest', 'evolving'];
for (const name of keyAgents) {
  const s = skillDb.getSkill(name);
  if (s) {
    const isOk = !s.directory || !s.directory.includes(WRONG_PATTERN);
    console.log(`  ${isOk ? '✅' : '❌'} ${name}: ${s.directory || '(no dir)'}`);
  } else {
    console.log(`  ⚠️  ${name}: 未注册`);
  }
}

console.log('');