Route Whisper transcriptions to Duncan when no text input is focused
Details
When Cmd+M is pressed without a text input focused, the speech recording
now proceeds normally and routes the transcription to Duncan's AI tray
instead of silently discarding it. This enables voice commands:
- MainWindow.Speech.cs: removed early return when no text control is
focused — always start recording regardless of focus state
- MainWindow.axaml.cs: OnTranscriptionReady routes to
AiTrayVM.SendVoiceMessageAsync() when _speechTargetControl is null,
and auto-opens the AI tray panel
- AiSuggestionTrayViewModel.Chat.cs: added SendVoiceMessageAsync() that
sets ChatInputText and triggers the standard send pipeline (RAG +
intent classification)
Flow: Cmd+M → record → Whisper transcribe → no text field? → Duncan
processes via RAG + intent engine → shows response/action in AI tray.
Round 4: complete AI intent inventory with full slot signatures
Details
The 10th-man audit: previous rounds listed intent names but not the full
slot signatures needed for the AI to construct proper natural-language-to-action
calls. The RAG-indexed descriptions now contain the complete actionable API
for every plugin, enabling voice/speech-to-intent routing.
Key findings and fixes:
- Tasks: was missing 3 of 4 intents — added tasks.create_project,
tasks.update_task (with all 12 updatable fields), tasks.add_link (with
6 relationship types). This is the biggest gap: users saying "mark my
task as done" or "link this task to that note" would have failed.
- Finance: had intent names but no slot details for 10 intents — users
asking "what's my checking balance?" or "how much did I spend on
groceries?" need the AI to know which params to fill
- Notes: was missing content and tags slots (only listed title)
- Journal: had wrong required slot (title doesn't exist, content is required)
- Files: was completely missing files.create_bookmark intent
- WebClips: was completely missing webclips.save_clip intent
- All plugins: standardized format with * for required slots, included
defaults and behavioral notes (e.g., email.draft_email saves as draft,
does not send; calendar defaults to +1hr; habits uses fuzzy name matching)
Round 3: add command palette entries to all plugins that expose them
Details
5 plugins register commands in the global command palette (Cmd+K) but none
of their DetailedDescriptions mentioned this. If a user asks Duncan "refresh
my feeds" or "check my mail", the AI needs to know these commands exist.
- RSS: Refresh All Feeds, Show Unread/Starred, Mark All Read, OPML import/export
- Email: Check Mail, Compose, Add Account, Mark All Read, Empty Trash
- Contacts: New Contact/Company/Group, filter by status, Import, Scan Duplicates
- Habits: New Habit, New Goal, Log Habit, View Analytics
- Files: Upload File, New Folder, Toggle View, Switch Storage Mode
Round 2: fill remaining DetailedDescription gaps across all plugins
Details
Focused on AI-actionable gaps identified by cross-referencing PLUGIN_CONTEXT.md:
- Tasks: list 8 default statuses by name, add GTD contexts with autocomplete,
GitHub activity timeline, AI intent with slots
- Notes: wiki-link syntax for internal pages vs cross-plugin, automatic backlink
resolution, sticky note tags, AI intent with slots
- Calendar: AI intent with slots
- Contacts: favorites toggle, per-contact notes field, AI intent with slots
- Email: AI intent with slots
- Habits: export/share, 3 AI intents with slots
- Finance: category management flags (sort order, hidden)
- Journal: entry metadata (weather, location, word count, favorite), editable
transcription text, AI intent with slots
- Files: vault unlock requirement
- Snippets: AI intent with slots
- RSS: batch refresh, remove feeds, feed context menus, AI intent with slots
- WebClips: delete/archive CRUD, graph contribution with tag-based edges
- Data: search datasets by name
Update DetailedDescriptions across all plugins for RAG indexing completeness
Details
The AI assistant (Duncan) lacked knowledge of many user-facing features because
PluginMetadata.DetailedDescription — which gets RAG-indexed as plugin_context
chunks — was incomplete across most plugins.
Updated 13 plugin files to include all features documented in PLUGIN_CONTEXT.md:
HIGH priority (major feature gaps filled):
- Tasks: pairwise prioritization, task links/relationships, discrete notes,
projects, AI features, in-plugin keyboard shortcuts
- Notes: 23 block types (was "15+"), chart blocks, table variants, export/import
formats, page locking, cover images, inline properties, 18 templates
MEDIUM priority (moderate gaps filled):
- Calendar: agenda view, mini calendar, video conference detection, recurring
event exceptions, ICS subscriptions, drag-to-create snap grid, event popover
- Contacts: phonetic names, personal relationships, interaction detail fields,
org chart, company detail expansion, statistics detail
- Email: sender trust detail, search debounce, layout toggle, folder management
expansion, concurrent sync limits, intent signals
- Habits: frequency/value type detail, streak rules, dashboard metrics,
goal overdue detection, multi-period analytics detail
LOW priority (minor enrichments):
- Finance: 9 account types (added Equity), 10 AI intents enumerated
- Files: vault security boundary note
- Snippets: minor formatting improvements
- RSS: reader mode metadata extraction, semantic renderer detail
- WebClips: scroll position resume, domain filtering, AI suggestions
- Canvas: arrow styles, keyboard shortcuts, data migration note
- Data: CTE detection, import capability detail, AI insights
Journal was already comprehensive — no changes needed.
Get notified about new releases