feat: multiple UI improvements, font settings, and memory file display names #175

Merged
naomi merged 22 commits from fix/tweaks into main 2026-03-03 20:21:58 -08:00

22 Commits

Author SHA1 Message Date
hikari c3a6a2950a fix: apply custom UI font to full app interface
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m32s
CI / Lint & Test (pull_request) Successful in 17m23s
CI / Build Linux (pull_request) Successful in 20m21s
CI / Build Windows (cross-compile) (pull_request) Successful in 30m18s
- Set document.body.style.fontFamily directly (belt-and-suspenders
  alongside the CSS variable) to ensure the font propagates
- Use var(--ui-font-family) in .app-container so the main app area
  respects the custom font (was hardcoded, blocking inheritance)
- Rename 'Custom Font' setting to 'Custom Terminal Font' for clarity
2026-03-03 19:36:35 -08:00
hikari d2c39fd5c2 feat: add custom UI font support
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m17s
CI / Lint & Test (pull_request) Successful in 18m28s
CI / Build Linux (pull_request) Successful in 22m18s
CI / Build Windows (cross-compile) (pull_request) Successful in 33m40s
Allow users to specify a custom font for the entire app interface
(menus, labels, buttons) separately from the terminal font. Supports
Google Fonts URLs, direct font file URLs, and local file paths.

- Add custom_ui_font_path and custom_ui_font_family to Rust config
- Refactor applyCustomFont into shared applyFontFromSource helper
- Add applyCustomUiFont function using --ui-font-family CSS variable
- Update app.css to use --ui-font-family with fallback
- Apply custom UI font on startup in +page.svelte
- Add Custom UI Font section to ConfigSidebar settings panel
- Add tests for applyCustomUiFont and setCustomUiFont
2026-03-03 18:41:21 -08:00
hikari c5feb9b43c feat: display friendly names for memory files (closes #177)
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m14s
CI / Lint & Test (pull_request) Successful in 19m13s
CI / Build Linux (pull_request) Successful in 23m5s
CI / Build Windows (cross-compile) (pull_request) Successful in 38m45s
The memory file list now shows human-readable titles instead of raw
filenames wherever possible.

- Rust: adds `MemoryFileInfo { path, heading }` and updates
  `MemoryFilesResponse` to use `Vec<MemoryFileInfo>`; adds
  `extract_first_heading()` helper that scans the first `# Heading`
  from a file's content; both `list_memory_files_native` and
  `list_memory_files_via_wsl` now read each file and populate the
  heading field; raw filename remains available as a fallback
- Frontend: updates `MemoryBrowserPanel.svelte` to use the richer type;
  adds `getDisplayName()` which returns the heading or falls back to the
  raw filename; file buttons use the display name with the raw filename
  as a tooltip; the viewer header also shows the display name with the
  filename shown as a subtitle when a heading is present
- Tests: 8 new Rust unit tests for `extract_first_heading` (happy path,
  edge cases, empty content, whitespace); 12 new TypeScript tests for
  `getFileName` and `getDisplayName` mirrored from the component
2026-03-03 18:19:53 -08:00
hikari 5bfff9d5e0 feat: allow users to specify a custom font (closes #176)
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m57s
CI / Lint & Test (pull_request) Successful in 24m12s
CI / Build Linux (pull_request) Successful in 23m48s
CI / Build Windows (cross-compile) (pull_request) Successful in 37m48s
Adds support for loading a custom font from either a remote URL or a
local file path, and applying it to the terminal and input bar.

- Rust: adds `custom_font_path` and `custom_font_family` fields to
  `HikariConfig` with `#[serde(default)]` for backwards compatibility
- TypeScript: extends `HikariConfig` interface and `defaultConfig`;
  exports `applyCustomFont()` which injects an `@import` for CSS
  stylesheet URLs, a `@font-face` rule for direct font file URLs, or a
  base64 data URL `@font-face` for local files via Tauri `readFile`;
  adds `setCustomFont()` to the config store
- Terminal.svelte and InputBar.svelte now use
  `--terminal-font-family` CSS variable (falls back to `monospace`)
- ConfigSidebar.svelte: new "Custom Font" section with URL/path input,
  family name input, Apply + Reset buttons, and inline status feedback
- `+page.svelte`: applies saved font on startup alongside theme/size
- 14 new tests for `applyCustomFont` (all code paths) + 2 for
  `setCustomFont`
2026-03-03 18:07:14 -08:00
hikari 9061098b0f docs: require tests for all changes in CLAUDE.md
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 58s
CI / Lint & Test (pull_request) Successful in 19m4s
CI / Build Linux (pull_request) Successful in 23m39s
CI / Build Windows (cross-compile) (pull_request) Successful in 41m43s
2026-03-03 17:46:31 -08:00
hikari 67bae9a33c test: add coverage for editorStore methods and file system operations
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 59s
CI / Lint & Test (pull_request) Successful in 18m9s
CI / Build Linux (pull_request) Successful in 22m35s
CI / Build Windows (cross-compile) (pull_request) Successful in 42m5s
2026-03-03 17:43:03 -08:00
hikari f30ff60ea9 test: add coverage for editorStore methods and file system operations 2026-03-03 17:17:21 -08:00
hikari 16f92e22b9 test: add comprehensive sessions store coverage (escapeHtml, generateHtmlExport, all exports)
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m28s
CI / Lint & Test (pull_request) Successful in 20m17s
CI / Build Linux (pull_request) Successful in 24m5s
CI / Build Windows (cross-compile) (pull_request) Successful in 34m33s
2026-03-03 16:41:06 -08:00
hikari 3b8a093421 test: fix clipboard coverage (real imports) and add cd/new success paths
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m8s
CI / Lint & Test (pull_request) Successful in 20m10s
CI / Build Linux (pull_request) Successful in 22m1s
CI / Build Windows (cross-compile) (pull_request) Successful in 37m56s
2026-03-03 16:28:34 -08:00
hikari 55ad039451 test: add coverage for slashCommands execute functions and notificationManager Method 4
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m6s
CI / Lint & Test (pull_request) Successful in 17m23s
CI / Build Linux (pull_request) Successful in 21m15s
CI / Build Windows (cross-compile) (pull_request) Successful in 35m27s
2026-03-03 16:06:35 -08:00
hikari ea53bf0d4d test: add coverage for debugConsole, notificationManager, and achievements 2026-03-03 15:48:55 -08:00
hikari a5fb22bd23 test: add coverage for terminalNotifier, testNotifications, and claude store 2026-03-03 15:17:29 -08:00
hikari c819adc9ea test: add coverage for drafts, soundPlayer, wslNotificationHelper, and costTrackingStore 2026-03-03 14:58:49 -08:00
hikari 58f53a421b test: add coverage for configStore methods and derived stores 2026-03-03 14:45:22 -08:00
hikari acebe590c3 test: add coverage for messageMode, stateMapper branches, and initStatsListener 2026-03-03 14:24:41 -08:00
hikari 7e45c685d3 test: add clipboard and notification rules tests
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m34s
CI / Lint & Test (pull_request) Successful in 19m30s
CI / Build Linux (pull_request) Successful in 20m6s
CI / Build Windows (cross-compile) (pull_request) Successful in 30m44s
Adds 55 tests for clipboard store pure functions (detectLanguage for 12
languages + formatTimestamp with fake timers) and 13 tests for the
notification rules state machine (reconnect transition logic and no-op
handlers). Total test count now 698 across 30 files.
2026-03-03 12:52:08 -08:00
hikari 514e137590 test: add component logic tests and clean up eslint directives
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 56s
CI / Lint & Test (pull_request) Successful in 16m12s
CI / Build Linux (pull_request) Successful in 20m14s
CI / Build Windows (cross-compile) (pull_request) Successful in 32m19s
Adds mirror-function tests for five Svelte components (HighlightedText,
CliVersion, AchievementNotification, StatusBar, ConversationTabs) and
removes stale eslint-disable comments from existing store test files.
2026-03-03 12:21:47 -08:00
hikari fd3122e080 test: expand frontend unit test coverage to 30%
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 57s
CI / Lint & Test (pull_request) Failing after 5m49s
CI / Build Linux (pull_request) Has been skipped
CI / Build Windows (cross-compile) (pull_request) Has been skipped
2026-03-03 12:05:31 -08:00
hikari 66c65a6ab8 feat: use random creative names for conversation tabs
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 58s
CI / Lint & Test (pull_request) Successful in 16m15s
CI / Build Linux (pull_request) Successful in 20m3s
CI / Build Windows (cross-compile) (pull_request) Successful in 29m56s
2026-03-03 10:56:44 -08:00
hikari 19e28b7ec7 feat: add configurable max output tokens setting
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m1s
CI / Lint & Test (pull_request) Successful in 16m15s
CI / Build Linux (pull_request) Successful in 20m15s
CI / Build Windows (cross-compile) (pull_request) Successful in 30m13s
2026-03-03 09:47:15 -08:00
hikari 08f7ca2d55 feat: restyle tool calls as collapsible blocks matching thinking block aesthetic
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 57s
CI / Lint & Test (pull_request) Successful in 16m25s
CI / Build Linux (pull_request) Successful in 21m32s
CI / Build Windows (cross-compile) (pull_request) Successful in 31m29s
2026-03-02 15:08:19 -08:00
hikari c5d1df351c fix: persist show_thinking_blocks setting across sessions 2026-03-02 13:36:23 -08:00