Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ HOST=0.0.0.0
# OPENAI_API_KEY=sk-...
# OPENROUTER_API_KEY=sk-or-...
# OPENROUTER_MODEL=anthropic/claude-sonnet-4
# EXA_API_KEY=<your-exa-api-key>

# Nano Claude Code (optional — Python agent; install: https://github.com/OpenLAIR/nano-claude-code )
# NANO_CLAUDE_CODE_COMMAND=nano-claude-code
Expand Down
4 changes: 4 additions & 0 deletions public/icons/news/exa.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions server/routes/news.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,31 @@ const SOURCE_REGISTRY = {
},
requiresCredentials: false,
},
exa: {
label: 'Exa',
script: 'research-news/search_exa.py',
configFile: 'news-config-exa.json',
resultsFile: 'news-results-exa.json',
defaultConfig: {
research_domains: {
'Large Language Models': {
keywords: ['large language model', 'LLM', 'transformer', 'foundation model'],
arxiv_categories: [],
priority: 5,
},
'AI Agents': {
keywords: ['AI agent', 'multi-agent', 'autonomous agent', 'tool use'],
arxiv_categories: [],
priority: 4,
},
},
top_n: 10,
queries: 'latest AI research,large language models,AI agents',
category: 'research paper',
days: 30,
},
requiresCredentials: false,
},
};

async function ensureDataDir() {
Expand Down Expand Up @@ -372,6 +397,11 @@ async function handleSearch(sourceName, req, res) {
if (sourceName === 'xiaohongshu' && config.keywords) {
args.push('--keywords', config.keywords);
}
if (sourceName === 'exa') {
if (config.queries) args.push('--queries', config.queries);
if (config.category) args.push('--category', config.category);
if (config.days) args.push('--days', String(config.days));
}

// Build env — pass credentials if required.
// Strip __PYVENV_LAUNCHER__ so uv-installed Python CLIs invoked by the
Expand Down
Loading
Loading