Added automatic resizing (>2048px triggers resize to max 1920x1080) and
JPEG conversion (>2MB) for image file attachments using sharp. Reduces
payload size when attaching large screenshots or high-resolution images.
Added automatic resizing (>2048px triggers resize to max 1920x1080) and
JPEG conversion (>2MB) for image attachments to reduce payload size.
Uses canvas-based processing with createImageBitmap where available.
- Added animated spinner for task tool progress (spinnerFrame in render options)
- Added 35+ language/file type icons to theme (lang.* symbols for Unicode/Nerd/ASCII)
- Read tool now displays file type icons and metadata inline with path
- Added getFileType helper to detect image/binary/text files by extension
Task tool now parses NDJSON events from subagent execution and aggregates
token usage (input, output, cache read/write) and costs across all completed
message_end events. Usage is stored in tool result details and included in
session statistics via getUsageStatistics().
Also changed AgentSession.dispose() to async to properly flush pending writes.
Rewrote SessionManager to use streaming NDJSON writes with proper backpressure
handling instead of synchronous file appends. Key changes:
- SessionManager.open() and continueRecent() are now async for proper init
- Session writes use atomic rename pattern with fsync for crash safety
- Added flush() method for explicit control over pending write completion
- Large content blocks (>500KB) are truncated before writing to prevent OOM
- Images are replaced with placeholder thumbnails during persistence
Introduced registerAsyncCleanup() for registering async callbacks that run
on SIGINT, SIGTERM, and SIGHUP. This enables proper session flushing before
exit without blocking synchronous signal handlers.
- Changed read tool result display to hide content by default with expand hint, showing only metadata until expanded.
- Changed diagnostics display to group messages by file with tree structure and severity icons.
- Changed diff stats formatting to use colored +/- indicators with slash separators.
- Removed custom renderers for ls, find, and grep tools in favor of generic tool display.
- Simplified truncation warning formatting for read tool output.
- Added fuzzy path matching suggestions when read tool encounters file-not-found errors, showing closest matches using Levenshtein distance.
- Changed read tool to automatically redirect to ls when given a directory path instead of a file.
- Implemented Levenshtein distance algorithm for computing path similarity scores.
- Added fd-based file candidate listing with gitignore support for fuzzy matching.
- Rewrote tool documentation with structured sections and clearer usage guidelines.
- Added explicit guidance on when to use and avoid each tool.
- Simplified examples and removed implementation details from tool prompts.
- Added best practices for read, write, and bash tools.
- Migrated Exa web search provider from MCP protocol to direct REST API for simpler integration.
- Added defensive handling for malformed response data with fallback text display in web search rendering.
- Replaced SSE parsing and markdown response handling with direct JSON API responses.
- Added type guards and null coalescing throughout render.ts to prevent runtime errors on unexpected data.
- Normalized search type parameter to map deprecated 'keyword' to 'fast' for API compatibility.
- Consolidated all prompt templates into centralized src/prompts/ directory.
- Extracted inline prompt constants to external markdown files for better maintainability.
- Refactored system-prompt.ts to use template string replacement with placeholders.
- Relocated bundled agent and command prompts from scattered directories to prompts/.
- Enhanced tool result renderers to use structured tree layouts with expand hints and truncation indicators.
- Added detailed metadata fields to grep, find, ls, and output tools for richer TUI display.
- Improved web-search renderer with section-based layout including Answer, Sources, Related, and Meta sections.
- Added helper functions for tree-style list formatting, diagnostics rendering, and diff preview truncation.
- Added status.shadowed symbol key to theme system for proper shadowed extension state display.
- Fixed extension list and inspector panel to use correct disabled and shadowed status symbols.
- Changed tree.hook symbol from └ to ⎿ in UNICODE_SYMBOLS.
- Fixed token counting for subagent progress to handle different usage object formats (camelCase and snake_case).
- Added getUsageTokens helper to normalize usage objects from different event formats.
- Added 30+ built-in color themes and comprehensive symbol customization via theme presets and overrides.
- Added status line segment editor with presets, separators, and customizable left/right segments.
- Added Biome CLI-based linter client as alternative to LSP for diagnostics and formatting.
- Added 20MB file size limit for image files to prevent memory issues during serialization.
- Replaced hardcoded Unicode symbols throughout codebase with theme-configurable symbol system.
- Added getUsageStatistics() method to SessionManager for tracking token usage and costs.
- Added UsageStatistics interface and type export for session usage tracking.
- Replaced inline token/cost calculation with centralized getUsageStatistics() method in status line.
- Added Pi segment and updated model icon in status line display.
- Replaced FooterComponent with new StatusLineComponent featuring powerline-style segments and Nerd Font icons.
- Added git branch detection with file watching and status tracking with 1-second TTL cache.
- Added setTopBorder() method to Editor component for custom status content in top border.
- Changed Editor component to use rounded box-drawing characters for borders.
- Renamed footer theme properties to statusLine prefix across dark and light themes.
- Added automatic browser opening after exporting session to HTML.
- Added automatic browser opening after sharing session as a Gist.
- Extracted browser-opening logic into reusable openInBrowser method.