- 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
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
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
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`
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.
Adds mirror-function tests for five Svelte components (HighlightedText,
CliVersion, AchievementNotification, StatusBar, ConversationTabs) and
removes stale eslint-disable comments from existing store test files.