Advanced

Google Search Optimization

When using Google providers, the plugin runs 5 parallel search strategies per topic:

StrategyPurpose
OptimizedAI-generated query with optimal keywords
SpecificExact phrase matching for precision
BroadWide search for comprehensive coverage
RecentTime-filtered for latest developments
SimpleBasic 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

GoalRecommendation
SpeedAgentic providers, fewer results per topic, concise format
CostGemini Agentic Search, lower max search results
QualityEnable AI queries + AI judge, increase results per topic, use custom prompts
CoverageResults per topic 10-15, max search 40-50, broader date range

API Rate Limits

ProviderFree TierPaid
Google Custom Search100 queries/day$5 per 1,000
Gemini1,500 req/dayPay-as-you-go
OpenAI / Anthropic / GrokNo free tierPay-per-use
PerplexityNo free tierSubscription
OpenRouterNo free tierVaries 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

PatternImplementation
FactoryNewsProviderFactory — creates providers from settings
StrategyAgentic vs Modular pipeline selection
TemplateTemplateEngine — placeholder rendering
Abstract BaseBaseNewsProvider, 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

  1. Run npm run build
  2. Copy main.js, manifest.json, styles.css to your vault's .obsidian/plugins/daily-news-briefing/
  3. Reload Obsidian (Ctrl/Cmd+R)

Adding a New Provider

Agentic Provider
  1. Create src/providers/agentic/your-provider.ts
  2. Extend BaseNewsProvider, implement generateNews(topics, language)
  3. Register in NewsProviderFactory
  4. Add settings UI and types
Summarizer
  1. Create src/providers/summarizers/your-summarizer.ts
  2. Extend BaseSummarizer, implement summarize(topic, articles, language)
  3. Register in coordinator factory

Pull Requests

  1. Fork and create a feature branch
  2. Ensure npm run build passes
  3. Test in Obsidian
  4. Submit PR with description and testing notes
Good First Issues: Add language translations, create template presets, improve error messages, add placeholders, or enhance docs.