const path = require('path'); const fs = require('fs'); const { InnovatorService } = require('../services/innovator-service'); const { JobManager } = require('../services/job-manager'); const { RetrainPipeline } = require('../services/retrain-pipeline'); const { MasterSession } = require('../src/core/master-session'); const config = require('../config'); async function testRetrainAgent() { const innovator = new InnovatorService({ skillsDir: path.resolve(__dirname, '../../data/skills'), skillsDataDir: path.resolve(__dirname, '../../data/skills'), trainedSkillsDir: path.resolve(__dirname, '../../data/trained_skills'), conversationsDir: path.resolve(__dirname, '../../conversations') }); const agentName = 'ceo'; const agentDir = path.resolve(__dirname, '../../data/agents/ceo'); if (!fs.existsSync(agentDir)) { console.error(`❌ Agent dir ${agentDir} not found`); process.exit(1); } let skill = innovator.registry.getSkill(agentName); if (!skill) { // Register the agent as a "skill" so the pipeline can process it innovator.registry.registerSkill({ skillName: agentName, description: 'CEO Agent', domain: 'management', scope: 'executive', directory: agentDir, status: 'enable' }); skill = innovator.registry.getSkill(agentName); } const retrainJobManager = new JobManager({ storePath: path.resolve(__dirname, '../../.data/jobs-retrain.json') }); const job = retrainJobManager.createJob({ type: 'retrain', skillName: agentName, status: 'queued', progress: '排队中...', instructions: '请训练一个更好的 CEO Agent,着重加强战略规划、团队管理和技术愿景维度,补充更专业的知识库(knowhow)和基准(benchmark)。' }); console.log(`🚀 Starting innovator training pipeline for Agent: ${agentName} (Job: ${job.jobId})`); const pipeline = new RetrainPipeline({ job, skill, innovator, jobManager: retrainJobManager, instructions: '提升公司的战略视野、产品敏感度、团队管理能力,以及面对危机的决策速度', userId: 'admin_test' }); let masterSession = null; try { const backends = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/backends.json'), 'utf-8')); const { loadConfigFromSkills } = require('../src/core/skill-config-loader'); const skillsCodeDir = config.skillsCodeDir; const sysConfig = loadConfigFromSkills(skillsCodeDir, backends); // Ensure agent-manager can find tools masterSession = new MasterSession(sysConfig, skillsCodeDir); await masterSession.init(); console.log('✅ Master session initialized'); } catch (err) { console.error('[Retrain] ⚠️ Master session error:', err.message); } try { if (masterSession) { console.log('🧠 Running with Master Orchestration...'); await pipeline.runWithMaster(masterSession, { onMasterData: (chunk) => process.stdout.write(chunk), onSubAgentData: (agent, chunk) => process.stdout.write(chunk) }); } else { console.log('⚙️ Running Node.js direct pipeline...'); await pipeline.run(); } console.log(`\n✅ Innovator training finished successfully!`); } catch (err) { console.error(`\n❌ Training failed: ${err.message}`, err.stack); } finally { if (masterSession) { await masterSession.shutdown(); } process.exit(0); } } testRetrainAgent();