#!/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('');