test-train-ceo.js 3.43 KB
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();