Introduce ParseRuleKind.mixedMerchant to flag merchants whose category
varies (Ozon, marketplaces). When set, the pipeline suppresses the
merchant→category rule suggestion in the Inbox so the card shows
"confirm once" instead of "Create rule". Inbox action "Categories vary"
creates the marker rule, removes any existing merchant→category rule and
observed candidate, and rewrites the draft cache without the suggestion.
Adds findMixedMerchantRule lookup, InboxController.markMerchantMixed,
localizations (en/ru), UI in inbox_card/rule_editor, and tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
When enabled, the native listener captures every post from monitored
apps (including empty/duplicate placeholders like "Конфиденциально")
and stores a full dump of key/postTime/visibility/flags/extras in the
new raw_messages.diagnostics column (schemaVersion 9), shown in the
parsing-log detail panel. Dedup is salted with postTime in this mode so
two distinct posts (placeholder then real-text update) both appear while
reboot redelivery still collapses. Toggle lives in parsing settings
(Android), synced to native via the ingest worker.
Also gate the parsing worker drain on the feature being enabled, with an
explicit re-drain when it is turned back on.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the OpenRouter HTTP client with a DeepSeek client:
- data/openrouter/ -> data/deepseek/; OpenRouterClient -> DeepSeekClient
(+ DeepSeekCompletion / DeepSeek*Exception)
- base URL api.deepseek.com, drop OpenRouter-only headers
- DeepSeek has no strict json_schema: use response_format json_object
and rely on the prompt for shape (ai_schema.dart removed)
- secure-storage key openrouter_api_key -> deepseek_api_key
- default model deepseek/deepseek-v4-flash -> deepseek-chat
- l10n strings, test dart-defines (DEEPSEEK_API_KEY/_TEST_MODEL), docs
Also bundles in-progress findBodyIgnoreRule (body-level ignore rules
applied before the AI call) already present in the working tree.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>