Resolves#195. Before sending an interrupt signal, check whether
the user has text selected. If so, let the browser handle Ctrl+C
as a native copy rather than interrupting Claude.
- Move isRestoringScroll = true before await tick() so scroll events
fired during the DOM transition cannot incorrectly set shouldAutoScroll
to false, breaking autoscroll for all tabs except the first
- Guard the windowStart reactive block with isSwitchingConversation so
stale lines from the previous conversation cannot override the correct
windowStart after a tab switch
- Fix lazy load threshold to trigger relative to the visible window top
(windowStart * AVG_LINE_HEIGHT + 300) rather than the absolute scroll
container top, so older messages load without scrolling through the spacer
Implements issue #179. Adds a Task Loop panel that imports hikari-tasks.json
files and automatically runs Claude Code through each task in sequence, one
per conversation tab. Includes Start/Pause/Stop/Resume controls, real-time
status indicators per task, and a StatusBar badge. WSL UNC paths from the
file picker are normalised to Unix paths at import time.
Adds a Changelog panel accessible from the nav menu. Fetches all
releases from the Gitea API on open and renders each entry with
version badge, date, pre-release tag, and markdown release notes.
Highlights the currently installed version with a pink "current" badge.
Consolidates 21 toolbar buttons into a single Menu trigger that
opens a scrollable dropdown with icon + label per item. Clicking
any item auto-closes the menu; backdrop click also closes it.
All panel state migrated to NavMenu; StatusBar trimmed ~480 lines.
- Terminal: virtual windowing renders max 150 lines, loads 50 older on
scroll-up with scroll position compensation; auto-advances window
forward during auto-scroll so old DOM nodes are unloaded continuously
- Markdown: two-stage derived rendering separates expensive parse step
(marked + hljs + spoilers, runs on content change) from cheap search
highlight step (runs on query change only)
- Achievements: fix double Object.keys() call in derived store
- Terminal: 150ms debounce on search query to reduce redundant updates
- Tests: add Markdown.test.ts for processSpoilers and highlightSearchMatches;
extend Terminal.test.ts with virtual windowing helper coverage
Adds a PRD Creator panel accessible from the status bar that lets Naomi
describe a goal and have Claude break it down into actionable tasks
written to hikari-tasks.json. Tasks can be reviewed, edited, reordered,
and executed directly from the panel. Uses the Lucide ScrollText icon to
distinguish it visually from the Todo List clipboard icon.
Also adds CODEBASE.md to the repo and gitignores hikari-tasks.json as a
user-generated data file.
- Add scan_project Rust command that walks the directory tree and detects project type
- Add CODEBASE as a managed ProjectFile type alongside PROJECT/REQUIREMENTS/ROADMAP/STATE
- Add mapCodebase() store function that scans and sends an analysis prompt to Claude
- Add CODEBASE tab to ProjectContextPanel with Map/Remap buttons and auto-reload on idle
- Update PROJECT_CONTEXT_SYSTEM_ADDENDUM to include CODEBASE.md reference
- Add projectContext store with load/save via existing Tauri file commands
- Add ProjectContextPanel modal with tabbed editor, file-exists badges, and templates
- Add injectTextStore signal so StatusBar can inject content directly into InputBar
- Add PROJECT_CONTEXT_SYSTEM_ADDENDUM auto-appended to custom_instructions on connect
- Add open-book button to StatusBar to open the panel
- Add PROJECT.md example file for the hikari-desktop project itself
- 34 tests covering all store methods, exports, and signal behaviour