sync: auto-sync from GURU-5070 at 2026-05-30 14:29:02
Author: Mike Swanson Machine: GURU-5070 Timestamp: 2026-05-30 14:29:02
This commit is contained in:
@@ -228,3 +228,61 @@ The dashboard view set is now complete (Machines, Sessions, Support Codes, Users
|
|||||||
- **Dashboard:** projects/msp-tools/guru-connect/dashboard/ (React+Vite+TS). Build emits to ../server/static/app/ (gitignored). Dev Vite proxy /api,/ws -> localhost:3002.
|
- **Dashboard:** projects/msp-tools/guru-connect/dashboard/ (React+Vite+TS). Build emits to ../server/static/app/ (gitignored). Dev Vite proxy /api,/ws -> localhost:3002.
|
||||||
- **Server SPA serving:** Axum fallback ServeDir(server/static/app).fallback(index.html); /api/*rest + /ws/*rest -> JSON 404; /downloads nested; /health,/metrics intact. axum 0.7.9, tower-http 0.6.11.
|
- **Server SPA serving:** Axum fallback ServeDir(server/static/app).fallback(index.html); /api/*rest + /ws/*rest -> JSON 404; /downloads nested; /health,/metrics intact. axum 0.7.9, tower-http 0.6.11.
|
||||||
- **Coord:** guruconnect/dashboard component = built (view set complete); all session locks released.
|
- **Coord:** guruconnect/dashboard component = built (view set complete); all session locks released.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Update: 21:28 PT — Wispr Flow dictation fixed for Claude Code CLI (GURU-5070)
|
||||||
|
|
||||||
|
### Session Summary
|
||||||
|
|
||||||
|
Mike reported the Wispr Flow dictation hotkey worked in every application except the Claude Code CLI. Diagnosis proceeded in two stages. First, confirmed the CLI terminal was running elevated ("Run as administrator") via a WindowsIdentity/WindowsPrincipal check, while Wispr Flow ran at medium integrity. Windows UIPI blocks a lower-integrity process from installing a global keyboard hook that fires over a higher-integrity foreground window — so Wispr's hotkey went deaf whenever the elevated CLI had focus. Resolved by promoting Wispr Flow to High integrity: created a "Wispr Flow (Elevated)" scheduled task (AtLogOn, RunLevel Highest, targeting the stable Squirrel stub so it survives app updates), disabled the existing non-elevated Startup-folder shortcut to prevent a double launch, killed all Wispr processes, and relaunched via the task. Verified the new process token integrity level read HIGH.
|
||||||
|
|
||||||
|
Second stage: hotkey then fired (dictation started) but transcribed text did not land in the CLI. Identified the terminal window class as `ConsoleWindowClass` (legacy conhost), with Windows Terminal installed but not the default. Legacy conhost mishandles the synthetic clipboard paste (Ctrl+V) Wispr uses to insert text. Because Wispr now runs at High integrity, it can inject into Claude regardless of Claude's elevation (UIPI only blocks lower→higher), so the remaining fix was purely about getting a paste-capable terminal. Set Windows Terminal as the default terminal application (HKCU\Console\%%Startup delegation GUIDs), then rewrote the Desktop `Claude.lnk` to launch via `wt.exe` explicitly (self-contained, not reliant on the global default), preserving working dir, args, and icon. Backed up the original shortcut to `Claude.lnk.bak`.
|
||||||
|
|
||||||
|
Activation requires Mike to close the current (legacy-conhost) session and relaunch from the updated shortcut; the running session cannot retroactively move into Windows Terminal. Not yet user-confirmed working end-to-end.
|
||||||
|
|
||||||
|
### Key Decisions
|
||||||
|
|
||||||
|
- Promoted Wispr Flow to elevated via a **scheduled task with RunLevel Highest** rather than a Run-key/Startup shortcut: Task Scheduler launches elevated at logon without a UAC prompt and is the reliable way to make admin auto-start persist.
|
||||||
|
- Targeted the scheduled task at the **stable Squirrel stub** `...\WisprFlow\Wispr Flow.exe` (not the version-pinned `app-1.5.559\` path) so it survives Wispr auto-updates.
|
||||||
|
- Left the Claude shortcut **non-elevated** (its original Run-as-admin flag was already False). Elevated Wispr can inject into a non-elevated target, so forcing Claude to admin was unnecessary and avoids running `--dangerously-skip-permissions` as administrator.
|
||||||
|
- Wrapped the shortcut target in **`wt.exe` explicitly** in addition to setting WT as the default terminal — belt-and-suspenders so the fix doesn't silently break if the global default-terminal GUIDs get reset by a Windows update.
|
||||||
|
|
||||||
|
### Problems Encountered
|
||||||
|
|
||||||
|
- Elevated CLI starved Wispr's global hotkey hook (UIPI) → fixed by elevating Wispr via scheduled task.
|
||||||
|
- Legacy conhost dropped Wispr's clipboard-paste text insertion → fixed by routing Claude through Windows Terminal.
|
||||||
|
- The current elevated session was an anomaly: the shortcut's Run-as-admin flag read False, so normal double-click launches are non-elevated; this session had been manually elevated. Did not force elevation back on.
|
||||||
|
|
||||||
|
### Configuration Changes
|
||||||
|
|
||||||
|
- **Created:** Scheduled task `Wispr Flow (Elevated)` (AtLogOn, Interactive, RunLevel Highest, action = `C:\Users\guru\AppData\Local\WisprFlow\Wispr Flow.exe`).
|
||||||
|
- **Renamed (disabled):** `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\Wispr Flow.lnk` → `Wispr Flow.lnk.disabled`.
|
||||||
|
- **Registry (HKCU):** `HKCU:\Console\%%Startup` — `DelegationConsole = {2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69}`, `DelegationTerminal = {E12CFF52-A866-4C77-9A90-F570A7AA2C6B}` (Windows Terminal as default terminal app).
|
||||||
|
- **Modified:** `C:\Users\guru\Desktop\Claude.lnk` — Target now `...\WindowsApps\wt.exe`; Args `-d "D:\claudetools" "C:\Users\guru\.local\bin\claude.exe" --chrome --dangerously-skip-permissions`; WorkingDir `D:\claudetools`; Icon `claude.exe,0`.
|
||||||
|
- **Backup:** `C:\Users\guru\Desktop\Claude.lnk.bak` (original shortcut).
|
||||||
|
|
||||||
|
### Infrastructure & Servers
|
||||||
|
|
||||||
|
- Host: **GURU-5070** (Mike's workstation), Windows 11 Pro 10.0.26200.
|
||||||
|
- Wispr Flow install: `C:\Users\guru\AppData\Local\WisprFlow\` (v1.5.559); stable stub `Wispr Flow.exe`, updater `Update.exe`, helper at `resources\Release\Wispr Flow Helper.exe`.
|
||||||
|
- Windows Terminal 1.24.11321.0 (Store/AppX); `wt.exe` alias `C:\Users\guru\AppData\Local\Microsoft\WindowsApps\wt.exe`.
|
||||||
|
- Claude Code CLI binary: `C:\Users\guru\.local\bin\claude.exe`.
|
||||||
|
|
||||||
|
### Commands & Outputs
|
||||||
|
|
||||||
|
- Elevation check: `WindowsPrincipal.IsInRole(Administrator)` → True (legacy session).
|
||||||
|
- Console window class: `ConsoleWindowClass`, title `Administrator: ...` (legacy conhost confirmed).
|
||||||
|
- Token integrity probe (advapi32 GetTokenInformation, TokenIntegrityLevel=25): Wispr Flow PID → `HIGH (elevated)` after relaunch.
|
||||||
|
|
||||||
|
### Pending / Incomplete Tasks
|
||||||
|
|
||||||
|
- **User confirmation pending:** Mike must close the current session and relaunch from the Desktop shortcut (opens in Windows Terminal), then test the Wispr hotkey to confirm text now inserts.
|
||||||
|
- If text still fails in WT: check Wispr's text-insertion method (prefer keystroke/type over clipboard paste if offered) and verify WT's Ctrl+V paste binding is default.
|
||||||
|
|
||||||
|
### Reference Information
|
||||||
|
|
||||||
|
- Revert shortcut: delete `Claude.lnk`, rename `Claude.lnk.bak` → `Claude.lnk`.
|
||||||
|
- Revert default terminal: Settings → Privacy & security → For developers → Terminal → "Let Windows decide".
|
||||||
|
- Revert Wispr elevation: `Unregister-ScheduledTask "Wispr Flow (Elevated)"`; rename `Wispr Flow.lnk.disabled` → `Wispr Flow.lnk`.
|
||||||
|
- Windows Terminal delegation GUIDs: Console `{2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69}`, Terminal `{E12CFF52-A866-4C77-9A90-F570A7AA2C6B}`.
|
||||||
|
|||||||
Reference in New Issue
Block a user