mirror of
https://github.com/jina-ai/node-DeepResearch.git
synced 2025-12-26 06:28:56 +08:00
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
import { Command } from 'commander';
|
|
import { getResponse } from './agent';
|
|
import { version } from '../package.json';
|
|
|
|
const program = new Command();
|
|
|
|
program
|
|
.name('deepresearch')
|
|
.description('AI-powered research assistant that keeps searching until it finds the answer')
|
|
.version(version)
|
|
.argument('<query>', 'The research query to investigate')
|
|
.option('-t, --token-budget <number>', 'Maximum token budget', (val) => {
|
|
const num = parseInt(val);
|
|
if (isNaN(num)) throw new Error('Invalid token budget: must be a number');
|
|
return num;
|
|
}, 1000000)
|
|
.option('-m, --max-attempts <number>', 'Maximum bad attempts before giving up', (val) => {
|
|
const num = parseInt(val);
|
|
if (isNaN(num)) throw new Error('Invalid max attempts: must be a number');
|
|
return num;
|
|
}, 3)
|
|
.option('-v, --verbose', 'Show detailed progress')
|
|
.action(async (query: string, options: any) => {
|
|
try {
|
|
const { result } = await getResponse(
|
|
query,
|
|
parseInt(options.tokenBudget),
|
|
parseInt(options.maxAttempts),
|
|
);
|
|
|
|
if (result.action === 'answer') {
|
|
console.log('\nAnswer:', result.answer);
|
|
if (result.references?.length) {
|
|
console.log('\nReferences:');
|
|
result.references.forEach(ref => {
|
|
console.log(`- ${ref.url}`);
|
|
console.log(` "${ref.exactQuote}"`);
|
|
});
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Error:', error instanceof Error ? error.message : String(error));
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
program.parse();
|