The stats panel in StatusBar could grow too long when all sections
(Tools Used, Historical Costs, Budget tracking) were expanded, causing
content to overflow off the bottom of the screen.
Added max-height and overflow-y-auto to the stats container to ensure
it stays within the viewport and can be scrolled when needed.
Fixes: #136
- Add flex-wrap to StatusBar icon container to prevent overflow
- Add responsive media queries to hide button text on small screens (< 640px)
- Stack StatusBar sections vertically on mobile (< 768px)
- Add flex-wrap to InputBar controls to prevent bottom status info cutoff
- Make control buttons show icons only on small screens
- All buttons now use flex-shrink: 0 to prevent unwanted squishing
- Ensures Connect button, clock, and CLI version remain visible at all screen sizes
This commit fixes all 4 reported agent tracking bugs and adds comprehensive test coverage:
**Bug Fixes:**
1. Agents stuck in "running" state after completion
- Added SubagentStop hook parsing in wsl_bridge.rs
- Emits claude:agent-end events when SubagentStop hooks detected
- Includes 8 new Rust tests for hook parsing
2. Agents persisting after disconnect
- Added clearConversation() call on disconnect in tauri.ts
- Prevents agents from persisting across sessions
3. "Kill All" button doing nothing
- Added markAllErrored() call in AgentMonitorPanel after interrupt
- Updates UI state immediately after killing process
4. Badge persisting after closing tab
- Added clearConversation() call in conversations.ts deleteConversation()
- Properly cleans up agent tracking when tab is closed
**Test Coverage:**
- Added comprehensive agents.test.ts with 24 new tests
- Tests all store methods: addAgent, updateAgentId, endAgent, markAllErrored, clearCompleted, clearConversation, runningAgentCount
- Added 8 Rust tests for SubagentStart/Stop hook parsing
- All 387 frontend tests pass
- All 426 backend tests pass
**Documentation:**
- Updated CLAUDE.md with comprehensive testing guidelines
- Documents coverage goals, console mocking strategies, and E2E integration testing patterns
β¨ This fix was implemented with help from Hikari~ πΈ
Added detailed documentation covering:
- Coverage goal: maintain near-100% test coverage across codebase
- Console mocking strategies for preventing flaky tests
- E2E integration testing approach for cross-platform code
- Guidance for adding tests when developing new features
This documentation ensures future development maintains our excellent
test coverage and follows established testing patterns.
Add comprehensive E2E-style integration tests for notification commands
that verify command structure without executing system APIs. This approach
enables testing cross-platform code in Linux CI environments.
Changes:
- Add 10 E2E tests for notification command structure verification
- Add helper functions to build commands for testing (Linux, Windows)
- Test command arguments, quote escaping, unicode support, edge cases
- Fix flaky frontend test by mocking console.error in config store test
- Fix lint errors (unused variables, TypeScript any types, unused imports)
- Fix TypeScript type errors in Svelte components
Test coverage:
- notifications.rs: 10 new E2E tests (command structure verification)
- All 417 backend tests passing
- All 363 frontend tests passing (no stderr output)
- 61.08% backend coverage (appropriate for architecture)
The E2E tests verify:
β Correct command names and arguments
β Proper quote escaping for PowerShell
β Unicode preservation across platforms
β Special character handling
β Edge case resilience (empty inputs)
β Cross-platform consistency
β¨ This commit was crafted with love by Hikari~ πΈ
Add comprehensive management capabilities to both panels:
MCP Management Panel:
- Add "Add New Server" form with transport selection (STDIO/HTTP/SSE)
- Add enhanced server details view showing full CLI output
- Dynamic placeholder text based on transport type
- Support for environment variables and headers (backend)
Plugin Management Panel:
- Add collapsible marketplace management section
- Add/remove marketplaces from GitHub repos
- List all configured marketplaces with sources
- Enhanced plugin installation with marketplace syntax support
Backend Commands:
- add_mcp_server: Add MCP servers with transport/env/headers
- get_mcp_server_details: Fetch full server details from CLI
- list_marketplaces: Parse and list plugin marketplaces
- add_marketplace: Add marketplace from GitHub source
- remove_marketplace: Remove marketplace by name
All operations use Claude CLI directly, avoiding cross-platform path
issues by letting the CLI handle file system operations internally.
β¨ This enhancement was built by Hikari~ πΈ
- Remove --json flag from CLI commands (not supported)
- Parse plugin list text output format
- Parse MCP server list text output format
- Add status field to McpServerInfo for connection status
- Display connection status in MCP panel (β/β badges)
- Simplify get_mcp_server to reuse list_mcp_servers
Backend (Rust):
- Add plugin management commands: list, install, uninstall, enable, disable, update
- Add MCP server management commands: list, get details, remove
- Integrate with Claude CLI's 'plugin' and 'mcp' subcommands
- Export PluginInfo and McpServerInfo types
Frontend (Svelte):
- Create PluginManagementPanel component with full CRUD operations
- Create McpManagementPanel component with server listing and removal
- Add buttons to StatusBar for both panels
- Beautiful UI with lucide-svelte icons
- Theme-aware styling using CSS variables
- Real-time loading states and error handling
Closes#133Closes#134
- Replace all hardcoded colours with CSS theme variables
- TodoPanel now respects user's theme (Dark, Light, Trans Pride, etc.)
- Clear todos when user disconnects (stop)
- Preserve todos during reconnects (permission prompts, interrupts)
- Only clear on real disconnect (when skipNextGreeting is false)
- Add TodoPanel component to display TodoWrite tool calls
- Create todos Svelte store to track todo state
- Emit todo-update Tauri event when TodoWrite is called
- Add todo button to status bar (next to session history)
- Display todos with status icons, progress bar, and completion count
- Real-time updates as I work through tasks
Closes#132
Displays the Claude Code CLI version in the status bar (to the left of the system clock) to help with debugging and understanding which features are available.
Changes:
- Add get_claude_version command to fetch CLI version from `claude --version`
- Create CliVersion.svelte component to display version
- Position component in InputBar status bar next to SystemClock
- Update on app start and CLI reconnection
Closes#131
Adds a "Clear All Sessions" button to the Session History Panel that
allows users to delete all saved sessions at once to manage disk usage.
Features:
- Red "Clear All" button with trash icon next to Import button
- Automatically disabled when there are no sessions to clear
- Confirmation dialog with warning styling shows exact session count
- Warning icon and "This action cannot be undone" message
- Keyboard support (Escape to cancel)
- Uses existing clearAllSessions() backend command
Benefits:
- Gives users control over disk usage
- Prevents unbounded growth of session files
- Safety confirmation prevents accidental deletions
- Improves performance for users with many sessions
Closes: #130
Removes all frontend invocations of the log_discord_rpc command that was
deleted in the Discord RPC refactor (edd8fa5). The frontend was still
calling this command during Discord RPC initialization, causing errors
that prevented the close confirmation modal event listener from being
registered.
The root cause:
1. initializeDiscordRpc() called invoke("log_discord_rpc")
2. Command doesn't exist anymore, promise rejects
3. await stops execution before close event listener setup
4. Close modal never works
Replaced all log_discord_rpc calls with console.log since the backend
already uses the tracing framework for Discord RPC logging.
Fixes: Close confirmation modal not appearing after Discord RPC refactor
Removes file-based logging from Discord RPC manager in favour of using
the tracing framework exclusively. All Discord RPC logs now appear in
the Debug Console with proper log levels.
Changes:
- Remove log_path field and file logging methods from DiscordRpcManager
- Replace all self.log() calls with tracing macros (debug/info/error)
- Remove log_discord_rpc command and its registration
- Remove set_app_handle() call from main setup
Benefits:
- Reduces disk usage (no unbounded log file growth)
- Eliminates maintenance burden of managing log files
- Better log levels and integration with existing tracing system
Closes: #129
Implements support for displaying Claude's extended thinking blocks in
the conversation UI with a collapsible, visually distinct component.
Changes:
- Backend: Update wsl_bridge.rs to emit thinking blocks with dedicated
line_type instead of system messages
- Types: Add "thinking" to TerminalLine type union
- Config: Add show_thinking_blocks toggle (default: true)
- UI: Create ThinkingBlock.svelte component with collapsible interface
- Terminal: Update to conditionally render thinking blocks
- Settings: Add toggle in Appearance section of ConfigSidebar
The ThinkingBlock component features:
- Lightbulb icon to indicate extended thinking
- Collapsible/expandable with animated chevron
- Distinct styling: dimmed, italic, monospace
- Timestamp display
- Respects global show_thinking_blocks config setting
Note: Extended thinking support in Claude Code CLI appears to be in
development. This implementation is ready and will automatically display
thinking blocks once the CLI begins emitting them.
Issue: #120β¨ Implemented by Hikari~ πΈ
- Add key to #each block in MemoryBrowserPanel (ESLint)
- Replace .last() with .next_back() for better performance (Clippy)
- Format files with Prettier
Co-Authored-By: Hikari <hikari@nhcarrigan.com>
Implements issue #118 to display auto-memory system operations and
provide a browser for viewing memory files.
Backend changes:
- Detect memory file operations in format_tool_description()
- Add emoji icons (π/πΎ) for memory Read/Write/Edit operations
- Add list_memory_files() Tauri command to find all memory files
- Add 4 new tests for memory detection logic
- Update Tauri capabilities to allow reading .claude directory
Frontend changes:
- Create MemoryBrowserPanel component with file list and viewer
- Add memory panel to main app layout
- Support Markdown rendering of memory file contents
- Add loading states and error handling
Testing:
- All 354 Rust tests passing
- TypeScript type-checks pass
Co-Authored-By: Hikari <hikari@nhcarrigan.com>
Claude Code CLI v2.1.33 introduced support for restricting sub-agents
via Task(agent_type) syntax in agent tools frontmatter. This commit
updates our Task tool detection to handle both the legacy "Task" syntax
and the new "Task(agent_type)" syntax.
Changes:
- Updated agent-start event detection to match "Task" or "Task("
- Updated character state detection to recognize Task(agent_type)
- Added comprehensive test cases for new syntax variants:
- Task(Explore)
- Task(Plan)
- Task(general-purpose)
The fix is backwards compatible and all 350+ tests pass.
Fixes: #114
Add a SystemClock component that displays the current date and time in
British format. The clock appears in the top control bar (same row as
Clipboard and Actions buttons) and updates every second.
Features:
- Date format: "7 February 2026" (British English)
- Time format: "14:35:42" (24-hour)
- Auto-updates every second via setInterval
- Proper cleanup on unmount using Svelte 5 $effect
- Hover effect with accent colour border
- Positioned with margin-left: auto to align right
Testing:
- Added comprehensive unit tests for date/time formatting logic
- 12 test cases covering edge cases, month boundaries, leap years
- All tests passing with proper local timezone handling
- Updated CLAUDE.md with testing requirements and guidelines
Resolves: #128