import * as fs from 'fs/promises'; import * as readline from 'readline'; import { deepResearch, writeFinalReport } from './deep-research'; import { generateFeedback } from './feedback'; const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); // Helper function to get user input function askQuestion(query: string): Promise { return new Promise(resolve => { rl.question(query, answer => { resolve(answer); }); }); } // run the agent async function run() { // Get initial query const initialQuery = await askQuestion('What would you like to research? '); // Get breath and depth parameters const breadth = parseInt( await askQuestion( 'Enter research breadth (recommended 2-10, default 4): ', ), 10, ) || 4; const depth = parseInt( await askQuestion('Enter research depth (recommended 1-5, default 2): '), 10, ) || 2; console.log(`Creating research plan...`); // Generate follow-up questions const followUpQuestions = await generateFeedback({ query: initialQuery, }); console.log( '\nTo better understand your research needs, please answer these follow-up questions:', ); // Collect answers to follow-up questions const answers: string[] = []; for (const question of followUpQuestions) { const answer = await askQuestion(`\n${question}\nYour answer: `); answers.push(answer); } // Combine all information for deep research const combinedQuery = ` Initial Query: ${initialQuery} Follow-up Questions and Answers: ${followUpQuestions.map((q, i) => `Q: ${q}\nA: ${answers[i]}`).join('\n')} `; console.log('\nResearching your topic...'); const { learnings, visitedUrls } = await deepResearch({ query: combinedQuery, breadth, depth, }); console.log(`\n\nLearnings:\n\n${learnings.join('\n')}`); console.log( `\n\nVisited URLs (${visitedUrls.length}):\n\n${visitedUrls.join('\n')}`, ); console.log('Writing final report...'); const report = await writeFinalReport({ prompt: combinedQuery, learnings, visitedUrls, }); // Save report to file await fs.writeFile('output.md', report, 'utf-8'); console.log(`\n\nFinal Report:\n\n${report}`); console.log('\nReport has been saved to output.md'); rl.close(); } run().catch(console.error);