Fix RSS feed fetch timeout and add progressive streaming
Details
- Use HttpCompletionOption.ResponseHeadersRead in FetchFeedAsync and
RefreshFeedAsync so the response streams immediately after headers
arrive, enabling progressive XML parsing instead of buffering the
entire body first
- Add OperationCanceledException catch clauses that distinguish between
HttpClient timeout (user-friendly "server may be slow or unreachable"
message) and explicit user cancellation
- Increase default HttpClient timeout from 30s to 60s since RSS feeds
from smaller servers can be slow, and streaming now provides visual
feedback during the wait
- Add CancellationTokenSource to AddFeedAsync in RssViewModel so users
can cancel a slow feed fetch via CancelAddFeedCommand
Add context-aware RAG query augmentation from active entity
Details
When the user asks a question while viewing an entity, the RAG query is
now augmented with semantic keywords extracted from the entity's JSON
(job_title, company_name, department, tags, contexts, etc.). This causes
the embedding search to surface semantically related items across plugins
without any changes to the RAG service or Rust embedding layer.
Add tasks.search_tasks intent for AI task discovery
Details
Adds a new search intent that allows the AI to actively search tasks by
title, description, tags, or status. Uses SDK search with fuzzy fallback
(Contains matching) to catch partial matches. Supports optional status
filter and configurable max results. Also updates PLUGIN_CONTEXT.md to
document all five task intents.
Add fuzzy search, new AI intents, and RAG improvements to Contacts plugin
Details
Add StringSimilarity utility (Jaro-Winkler, Levenshtein, Token Jaccard) for
fuzzy name matching in contact resolution and search. ResolveContactAsync now
falls back to fuzzy matching (threshold 0.6) when exact match fails, including
a full scan fallback for typos/nicknames. Search intent also augments SDK
results with fuzzy matches.
New intents:
- contacts.get_contact: retrieves full contact details (emails, phones,
addresses, social profiles, tags, recent interactions)
- contacts.list_by_company: lists contacts at a company (fuzzy matched)
- contacts.list_by_group: lists contacts in a group (fuzzy matched)
RAG indexing now includes:
- Company chunks with name, industry, website, employee count
- Group chunks with name, description, member count, member names
- Enriched contact chunks with tags, address, social profiles
Version bump 1.9.7 → 1.10.0
Get notified about new releases