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
Owner

Summary

  • fix: show_thinking_blocks setting now persists across sessions — it was defined on the TypeScript side but missing from the Rust HikariConfig struct, so serde silently dropped it on every save/load
  • feat: Tool calls are now rendered as collapsible blocks matching the Extended Thinking block aesthetic, replacing the old inline dropdown approach
  • feat: Add configurable max output tokens setting
  • feat: Use random creative names for conversation tabs
  • test: Significantly expanded frontend unit test coverage
  • docs: Require tests for all changes in CLAUDE.md
  • feat: Allow users to specify a custom terminal font (Closes #176)
  • feat: Display friendly names for memory files derived from the first heading (Closes #177)
  • feat: Add custom UI font support for the app chrome (buttons, labels, tabs)
  • fix: Apply custom UI font to the full app interface — .app-container was hardcoded, blocking inheritance from body; also renamed "Custom Font" to "Custom Terminal Font" for clarity

This PR was created with help from Hikari~ 🌸

## Summary - **fix**: `show_thinking_blocks` setting now persists across sessions — it was defined on the TypeScript side but missing from the Rust `HikariConfig` struct, so serde silently dropped it on every save/load - **feat**: Tool calls are now rendered as collapsible blocks matching the Extended Thinking block aesthetic, replacing the old inline dropdown approach - **feat**: Add configurable max output tokens setting - **feat**: Use random creative names for conversation tabs - **test**: Significantly expanded frontend unit test coverage - **docs**: Require tests for all changes in CLAUDE.md - **feat**: Allow users to specify a custom terminal font (Closes #176) - **feat**: Display friendly names for memory files derived from the first heading (Closes #177) - **feat**: Add custom UI font support for the app chrome (buttons, labels, tabs) - **fix**: Apply custom UI font to the full app interface — `.app-container` was hardcoded, blocking inheritance from `body`; also renamed "Custom Font" to "Custom Terminal Font" for clarity ✨ This PR was created with help from Hikari~ 🌸
hikari added 2 commits 2026-03-02 15:39:36 -08:00
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
08f7ca2d55
naomi changed title from fix: assorted small tweaks to feat: tinking blocks setting persists, tool calls rendered nicer 2026-03-02 15:48:11 -08:00
naomi changed title from feat: tinking blocks setting persists, tool calls rendered nicer to feat: thinking blocks setting persists, tool calls rendered nicer 2026-03-02 15:48:16 -08:00
naomi added 1 commit 2026-03-03 09:47:19 -08:00
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
19e28b7ec7
hikari added 1 commit 2026-03-03 10:56:50 -08:00
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
66c65a6ab8
hikari added 1 commit 2026-03-03 12:05:37 -08:00
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
fd3122e080
hikari added 1 commit 2026-03-03 12:21:55 -08:00
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
514e137590
Adds mirror-function tests for five Svelte components (HighlightedText,
CliVersion, AchievementNotification, StatusBar, ConversationTabs) and
removes stale eslint-disable comments from existing store test files.
hikari added 1 commit 2026-03-03 12:52:14 -08:00
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
7e45c685d3
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.
hikari added 6 commits 2026-03-03 16:06:41 -08:00
hikari added 1 commit 2026-03-03 16:28:42 -08:00
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
3b8a093421
hikari added 1 commit 2026-03-03 16:41:14 -08:00
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
16f92e22b9
hikari added 2 commits 2026-03-03 17:43:10 -08:00
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
67bae9a33c
hikari added 1 commit 2026-03-03 17:46:38 -08:00
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
9061098b0f
hikari added 1 commit 2026-03-03 18:07:20 -08:00
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
5bfff9d5e0
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`
hikari added 1 commit 2026-03-03 18:20:01 -08:00
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
c5feb9b43c
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
hikari added 1 commit 2026-03-03 18:41:28 -08:00
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
d2c39fd5c2
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
hikari added 1 commit 2026-03-03 19:38:30 -08:00
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
c3a6a2950a
- 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
hikari changed title from feat: thinking blocks setting persists, tool calls rendered nicer to feat: multiple UI improvements, font settings, and memory file display names 2026-03-03 19:40:14 -08:00
naomi merged commit fa906684c2 into main 2026-03-03 20:21:58 -08:00
naomi deleted branch fix/tweaks 2026-03-03 20:21:58 -08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: nhcarrigan/hikari-desktop#175