feat: add Quick Prompt global hotkey popup for one-off AI questions

Add a system-wide global hotkey (Win+Shift+A / Cmd+Shift+A) that summons
a floating, frameless popup window for quick AI interactions from any app.

Main process:
- GlobalHotkeyService for registering/unregistering system-wide shortcuts
- Frameless, transparent, always-on-top BrowserWindow factory
- IPC handlers for send, discard, close, continue-in-aryx, cancel
- Session event routing from sidecar to quick prompt window
- Settings persistence for default model, hotkey, and reasoning effort

Renderer (separate lightweight entry):
- QuickPromptApp with session state, streaming, keyboard shortcuts
- QuickPromptInput with model selector trigger and cancel support
- QuickPromptResponse with streamed markdown and thinking blocks
- QuickPromptActions (Discard / Close / Continue in Aryx)
- ModelSelector dropdown with tier badges and reasoning effort
- Glass Command Bar aesthetic with animated gradient border

Settings:
- Quick Prompt section in SettingsPanel with enable toggle, hotkey
  display, default model selector, and reasoning effort picker

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-04-13 11:23:14 +02:00
co-authored by Copilot
parent ec92b61663
commit b038019954
24 changed files with 1404 additions and 11 deletions
+14
View File
@@ -83,4 +83,18 @@ export const ipcChannels = {
updateStatus: 'app:update-status',
getQuota: 'sidecar:get-quota',
trayCreateScratchpad: 'tray:create-scratchpad',
// Quick Prompt
quickPromptSend: 'quick-prompt:send',
quickPromptDiscard: 'quick-prompt:discard',
quickPromptClose: 'quick-prompt:close',
quickPromptContinueInAryx: 'quick-prompt:continue-in-aryx',
quickPromptCancelTurn: 'quick-prompt:cancel-turn',
quickPromptSetSettings: 'quick-prompt:set-settings',
quickPromptGetSettings: 'quick-prompt:get-settings',
quickPromptGetCapabilities: 'quick-prompt:get-capabilities',
quickPromptSessionCreated: 'quick-prompt:session-created',
quickPromptSessionEvent: 'quick-prompt:session-event',
quickPromptShow: 'quick-prompt:show',
quickPromptHide: 'quick-prompt:hide',
} as const;