## Summary
This PR covers the full audit of Claude CLI changes from 2.1.50 to 2.1.53, plus a batch of bug fixes, new features, and maintenance work identified during that review.
### New Features
- **Workspace trust gate** — detects hooks, MCP servers, and custom commands in a workspace before connecting; persists trust decisions so users aren't prompted repeatedly
- **Custom background image** — users can set a background image with configurable opacity; character panel and compact mode go transparent when active
- **Draggable tab reordering** — conversation tabs can be reordered via pointer-event drag-and-drop (HTML5 drag is intercepted by Tauri/WebView2, so pointer events are used instead)
- **Org UUID in account info** — exposes the org UUID from Claude auth status
### Bug Fixes
- **Unread dot false positives** — initialise unread counts on mount to prevent all tabs showing the blue dot after toggling the file editor (Closes#164)
- **Watchdog for hung WSL bridge** — detects connections that never receive `system:init` and kills the stale process after 1 minute (Closes#166)
- **Suppress terminal window flash on Windows** — applies `CREATE_NO_WINDOW` to all subprocesses via a `HideWindow` trait extension (Closes#165)
- **HTML escaping in markdown renderer** — escape `<` and `>` in `codespan` and `html` renderer callbacks to prevent raw HTML injection (Closes#169)
### Maintenance
- Verify stream-JSON handles tool results above the 50K threshold correctly (Closes#162)
- Reviewed hook security fixes from CLI 2.1.51 — not applicable to our setup (Closes#163)
- Expose org UUID from `claude auth status` (Closes#160)
- Clean up Svelte and Vite build warnings (`a11y_click_events_have_key_events`, `state_referenced_locally`, `non_reactive_update`, `codeSplitting`, chunk size, CodeMirror dynamic import)
- Update all npm dependencies to latest compatible versions with exact pinning (Closes#81, Closes#82, Closes#83, Closes#84, Closes#85, Closes#86, Closes#87, Closes#90, Closes#91, Closes#93, Closes#94, Closes#95, Closes#96, Closes#97, Closes#98, Closes#99, Closes#101, Closes#141, Closes#142, Closes#143, Closes#145, Closes#146, Closes#147)
- Run `cargo update` to bring Cargo.lock up to date
### Closes
Closes#160Closes#162Closes#163Closes#164Closes#165Closes#166Closes#167Closes#168Closes#169Closes#81Closes#82Closes#83Closes#84Closes#85Closes#86Closes#87Closes#90Closes#91Closes#93Closes#94Closes#95Closes#96Closes#97Closes#98Closes#99Closes#101Closes#141Closes#142Closes#143Closes#145Closes#146Closes#147✨ This PR was created with help from Hikari~ 🌸
Reviewed-on: #171
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>