Dynamically index plugin quick actions and shortcuts for RAG discovery
Details
ShellContentProvider now discovers all IQuickActionProvider plugins at
indexing time and creates individual RAG chunks per quick action. This
replaces the hardcoded shortcut list that was manually maintained and
had drifted out of sync (e.g. listed Cmd+B for transactions instead of
Cmd+Shift+T).
Each quick action gets its own searchable chunk with the action name,
plugin, description, keyboard shortcut, and usage instructions. The
global shortcuts chunk now dynamically appends plugin shortcuts instead
of hardcoding them, so adding a new quick action to any plugin
automatically makes it discoverable by Duncan via semantic search.
Shell-level shortcuts (Cmd+K, Cmd+I, Cmd+M, etc.) remain hardcoded
since they are not plugin-declared.
Desktop version 1.65.5 → 1.65.6.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add slot validation and action result feedback to AI intent pipeline
Details
Three fixes for the AI creating duplicate tasks and inventing fake slots:
1. IntentEngine.ExecuteDirectAsync now validates slot names against the
IntentDescriptor before calling the plugin. Unknown slots (e.g.
"parent_task_id", "parent_id") are stripped and warnings attached to
the IntentResult. This prevents silent data loss.
2. Action execution results are now injected into conversation history
as an [Action Results] block. On the next turn, the AI sees what
succeeded, what failed, and what warnings were raised — enabling
self-correction instead of blindly retrying or duplicating.
3. ActionFormatHeader updated with explicit guidance: only use declared
slot names, use tasks.add_link for linking existing entities instead
of re-creating them, and acknowledge action result feedback.
Desktop version 1.65.4 → 1.65.5.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Warnings field to IntentResult for slot validation feedback
Details
IntentResult now carries an optional IReadOnlyList<string> Warnings property.
This allows the intent execution pipeline to report non-fatal issues like
unknown slot names back to the AI and user, enabling self-correction on
subsequent turns rather than silently ignoring invalid slots.
SDK version bumped 1.65.0 → 1.65.1.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Harden ACTION format prompt to prevent hallucinated completions
Details
The AI was writing "✓ Created task X" with zero [ACTION] blocks,
fabricating success messages without actually executing anything.
Strengthened the ACTION format header to explicitly forbid claiming
completion without corresponding [ACTION] blocks. Added rules:
- Writing checkmarks/success without [ACTION] = lying to the user
- N actions requested = N [ACTION] blocks required, no shortcuts
- Never pretend you did something — say you can't if no action exists
Version: 1.65.3 -> 1.65.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix [[ wiki-link picker not triggering in AI chat input
Details
The link picker popup, ViewModel, XAML, and keyboard routing were all
implemented but the [[ detection never fired. The OnTextInput override
on the UserControl relied on TextInput events bubbling up from the
TextBox, but Avalonia's TextBox marks TextInput as handled, preventing
bubble propagation to parent controls.
Fixed by attaching a tunnel-phase TextInput handler directly on the
ChatInputBox via AddHandler with RoutingStrategies.Tunnel. Tunnel
routing intercepts the event BEFORE the TextBox processes it, so we
can detect the second [ keystroke, remove the first [ already in the
text, suppress the second [ from being inserted, and open the picker.
Version: 1.65.2 -> 1.65.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Get notified about new releases