Advanced
Google Search Optimization
When using Google providers, the plugin runs 5 parallel search strategies per topic:
| Strategy | Purpose |
|---|---|
| Optimized | AI-generated query with optimal keywords |
| Specific | Exact phrase matching for precision |
| Broad | Wide search for comprehensive coverage |
| Recent | Time-filtered for latest developments |
| Simple | Basic query as fallback |
Results are deduplicated, filtered by quality sources (BBC, Reuters, TechCrunch, Bloomberg, etc.), and ranked by AI.
Caching
Two levels of caching reduce API usage and speed up generation:
- Query Cache: Persists AI-generated search queries per topic. Cleared manually.
- Daily Content Cache: Caches processed content per topic per day. Auto-cleaned on next day.
Performance Tips
| Goal | Recommendation |
|---|---|
| Speed | Agentic providers, fewer results per topic, concise format |
| Cost | Gemini Agentic Search, lower max search results |
| Quality | Enable AI queries + AI judge, increase results per topic, use custom prompts |
| Coverage | Results per topic 10-15, max search 40-50, broader date range |
API Rate Limits
| Provider | Free Tier | Paid |
|---|---|---|
| Google Custom Search | 100 queries/day | $5 per 1,000 |
| Gemini | 1,500 req/day | Pay-as-you-go |
| OpenAI / Anthropic / Grok | No free tier | Pay-per-use |
| Perplexity | No free tier | Subscription |
| OpenRouter | No free tier | Varies by model |
For 3 topics with Gemini Agentic Search, expect ~3-6 Gemini calls per day — well within free limits (1,500 req/day).
Architecture
graph TD
A[Plugin Main] --> B[News Provider Factory]
B --> C1[Agentic Providers]
B --> C2[Search-Summarize Coordinator]
C1 --> D1[Perplexity]
C1 --> D2[GPT Agentic]
C1 --> D3[Claude Agentic]
C1 --> D4[Grok Agentic]
C1 --> D5[Gemini Agentic]
C1 --> D5[OpenRouter Agentic]
C2 --> E1[Retrievers]
C2 --> E2[Summarizers]
E1 --> F1[Google Search]
E1 --> F2[RSS]
E2 --> G1[Gemini]
E2 --> G2[GPT]
E2 --> G3[Claude]
E2 --> G4[Grok]
E2 --> G5[OpenRouter]
A --> H[Template Engine]
style A fill:#a855f7,stroke:#d8b4fe,color:#fff
style B fill:#3b82f6,stroke:#93c5fd,color:#fff
style H fill:#22c55e,stroke:#86efac,color:#fff
Design Patterns
| Pattern | Implementation |
|---|---|
| Factory | NewsProviderFactory — creates providers from settings |
| Strategy | Agentic vs Modular pipeline selection |
| Template | TemplateEngine — placeholder rendering |
| Abstract Base | BaseNewsProvider, BaseRetriever, BaseSummarizer |
File Structure
src/
types.ts # Type definitions & settings
constants.ts # Translations & constants
utils.ts # FileUtils, LanguageUtils, ContentUtils, MetadataUtils
settings-tab.ts # Settings UI
providers/
base-news-provider.ts # Abstract base class
news-provider-factory.ts # Factory
agentic/ # Perplexity, GPT, Claude, Grok, OpenRouter, Gemini
coordinators/ # Search-Summarize coordinator
retrievers/ # Google Search, RSS
summarizers/ # Gemini, GPT, Claude, Grok, OpenRouter
template/
template-engine.ts # Rendering engine
template-presets.ts # Preset definitions
Contributing
Development Setup
git clone https://github.com/ChenziqiAdam/Daily-News-Briefing.git
cd Daily-News-Briefing
npm install
npm run dev # Watch mode
npm run build # Production build
Testing
- Run
npm run build - Copy
main.js,manifest.json,styles.cssto your vault's.obsidian/plugins/daily-news-briefing/ - Reload Obsidian (
Ctrl/Cmd+R)
Adding a New Provider
Agentic Provider
- Create
src/providers/agentic/your-provider.ts - Extend
BaseNewsProvider, implementgenerateNews(topics, language) - Register in
NewsProviderFactory - Add settings UI and types
Summarizer
- Create
src/providers/summarizers/your-summarizer.ts - Extend
BaseSummarizer, implementsummarize(topic, articles, language) - Register in coordinator factory
Pull Requests
- Fork and create a feature branch
- Ensure
npm run buildpasses - Test in Obsidian
- Submit PR with description and testing notes
Good First Issues: Add language translations, create template presets, improve error messages, add placeholders, or enhance docs.
Need more help?