Fix settings overlay blocking toolbar hit-testing
Details
Add IsVisible binding on TasksSettingsOverlay UserControl so it
is removed from the visual tree when closed, preventing it from
intercepting pointer events on the toolbar buttons.
Fix ACTION block parser failing on JSON with arrays/nested objects
Details
The regex-based ACTION block parser used [^[]* which broke on any JSON
containing literal [ characters (e.g. checklist arrays, tags arrays).
This caused 0 blocks parsed despite valid-looking [ACTION] output,
silently dropping AI actions that would have updated tasks.
Replaced regex approach with brace-depth counting that handles nested
{}, [], and quoted strings correctly. Also added FlattenSlotValue()
which converts JSON arrays to newline-separated strings — so when the
AI sends "add_checklist": ["item1", "item2"], it becomes the
newline-delimited format the intent handler expects.
Added ACTION format header guidance for slot naming (add_checklist not
checklist) and array support.
Version: 1.65.1 -> 1.65.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix cloud AI token limits causing MAX_TOKENS truncation
Details
Cloud providers handle their own context limits and bill per token, so
artificially capping them at 200/1200/2500 caused truncation errors
(MAX_TOKENS from Gemini). Raised cloud token budgets to 1024/4096/8192
— the system prompt's length guidance still controls actual verbosity.
Also bumped AiMemoryExtractor MaxTokens from 100 to 256 to prevent
JSON truncation that caused the JsonReaderException on memory extraction.
Version: 1.65.0 -> 1.65.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move wiki-link resolution and conversation history off UI thread
Details
ResolveWikiLinksAsync was running on the UI thread before Task.Run,
performing up to 5 async database lookups via ILinkableItemProvider
.GetItemByIdAsync — each one blocking the UI. Moved it inside Task.Run.
BuildConversationHistory was also running on UI thread with LINQ over
the ObservableCollection. Replaced with a snapshot taken on the UI
thread (fast — just select/toList) and the filtering/trimming logic
moved inside Task.Run.
This eliminates the brief UI freeze between pressing Send and seeing
the streaming response begin. Bumps Desktop to 1.64.3.
Parse unclosed ACTION blocks and strip LLM stop token artifacts
Details
Three chat quality fixes:
1. ACTION block parsing: AI models sometimes omit [/ACTION] closing tags
(e.g. two consecutive [ACTION]{...} blocks with no [/ACTION] between
them). Added UnclosedActionPattern regex that matches blocks terminated
by the next [ACTION], end of string, or a stray [/ACTION]. StrayActionTags
regex strips any remaining tag fragments from the displayed text.
2. Model stop token artifacts: Qwen models output a literal Ċ (U+010A)
character before stop tokens like <|im_end|>. The existing ChatTokenPattern
only stripped the tag itself, leaving the Ċ visible in chat. Updated the
regex to capture preceding U+010A/U+0120 chars, and added
TrailingModelArtifacts regex to clean any remaining instances at end of
output.
3. Cross-plugin action guidance: Updated ActionFormatHeader prompt to
explicitly tell the AI it can use actions from any plugin regardless of
which plugin the user is currently viewing.
Bumps Desktop to 1.64.2.
Get notified about new releases