- Added todo_write tool for creating and managing structured task lists during coding sessions.
- Added persistent todo panel above the editor that displays task progress with Ctrl+T toggle.
- Added grouped display for consecutive Read tool calls in a compact tree view.
- Changed system prompt to use more direct, field-oriented language with emphasis on verification and assumptions.
- Changed Ctrl+Enter to insert newline when not streaming, and Ctrl+T from toggling thinking blocks to toggling todo list.
- Replaced yaml package dependency with Bun's built-in YAML parser and extracted frontmatter parsing to dedicated module.
- Changed temporary model selector keybinding from Ctrl+Y to Alt+P to avoid conflicts.
- Fixed Alt+Enter to insert newline when not streaming instead of submitting.
- Fixed Cursor provider to avoid advertising Edit tool, using full-file Write instead.
- Added Ctrl+Enter support for inserting newlines in TUI editor using Kitty and legacy terminal formats.
- Removed duplicate Ctrl+Y handler and refactored input controller to use trimmedText variable.
- Added grouped display for consecutive Read tool calls, showing multiple file reads in a compact tree view.
- Changed Read tool result display to hide content by default, showing only file path and status.
- Changed expand hint text from 'Ctrl+O to expand' to 'Ctrl+O for more'.
- Added ReadToolGroupComponent class to group multiple Read tool executions together in a single display.
- Renamed getStyledStatusIcon to formatStatusIcon for consistency with other format functions.
- Refactored formatExpandHint function signature to put theme parameter first and make expanded/hasMore optional.
- Increased default bash output preview from 5 to 10 lines when collapsed.
- Updated expanded bash output view to show full untruncated output when available.
- Added fullOutput field to BashToolDetails to preserve complete output for expanded view.
- Exported BASH_DEFAULT_PREVIEW_LINES constant for consistent preview line configuration.
- Added thinkingLevel field to agent frontmatter allowing subagents to override thinking level with clamping to model capabilities.
- Added structured output schema to reviewer agent ensuring consistent review output format with findings, correctness verdict, and confidence.
- Expanded system prompt with defensive reasoning guidance including assumption checks, edge case awareness, and completion reflex inhibition.
- Consolidated expandPath, parseFrontmatter, and parseAgentFields utilities into discovery/helpers module eliminating code duplication across loaders.
- Replaced silent error handling with logger.warn calls across config parsing, migrations, extension loading, and OAuth refresh failures.
- Converted SettingsManager.create(), loadSettings(), discoverSkills(), loadSlashCommands(), buildSystemPrompt(), loadSkills(), loadProjectContextFiles(), and getShellConfig() from synchronous to asynchronous APIs.
- Changed capability provider load() method from supporting both sync and async to async-only by removing loadSync().
- Removed fs property from LoadContext interface in capability types.
- Added new fs.ts module with caching layer for filesystem operations using readFile, readDirEntries, readDir, walkUp, and cache management functions.
- Refactored all discovery providers (builtin, claude, cline, codex, cursor, gemini, github, mcp-json, ssh, vscode, windsurf) to use async file operations with Promise.all for parallel loading.
- Added persistent prompt history with SQLite-backed storage using FTS5 for efficient text searching.
- Added Ctrl+R keybinding to search through prompt history in interactive mode.
- Added HistoryStorage class with singleton pattern, deduplication, and prepared statements for database operations.
- Added HistorySearchComponent with scrollable results list, keyboard navigation, and selection highlighting.
- Added setHistoryStorage() method to Editor class for saving and restoring history across sessions.
- Added setFooter(), setHeader(), and setEditorComponent() methods to ExtensionUIContext for custom UI components.
- Exported InteractiveModeOptions type and numerous UI components for programmatic SDK usage.
- Added --no-tools flag to disable all built-in tools and --no-extensions flag to disable extension discovery.
- Changed bash tool output truncation to recalculate on terminal resize instead of using cached width.
- Fixed Wayland clipboard copy (wl-copy) no longer blocking when the process doesn't exit promptly.
- Updated model pricing and renamed nex-agi/deepseek-v3.1-nex-n1 model removing :free suffix.
- Added betas option to AnthropicOptions for passing custom Anthropic beta feature flags.
- Changed Anthropic OAuth tool naming to use 'proxy_' prefix instead of mapping to Claude Code tool names.
- Added Claude Code headers for all Anthropic requests, not just OAuth tokens.
- Fixed Anthropic OAuth code parsing to accept full redirect URLs in addition to raw authorization codes.
- Fixed Anthropic token refresh to preserve existing refresh token when server doesn't return a new one.
- Fixed thinking mode being disabled when tool_choice forces a specific tool, and auto-adjusted max_tokens when thinking budget is set.
- Added calc tool supporting basic mathematical calculations with arithmetic operators, parentheses, and hex/binary/octal literals.
- Added support for multiple API credentials per provider with round-robin distribution across sessions.
- Added file locking on auth.json to prevent concurrent write corruption.
- Added clickable OAuth login URL display in terminal with plain text fallback.
- Updated ask tool prompt to emphasize exhausting other options before asking users.
- Refactored OAuth credential storage to append new credentials instead of replacing existing ones.
- Added retry logic with exponential backoff and model fallback for auto-compaction failures.
- Added support for pi/<role> model aliases and automatic model inheritance for subtasks.
- Enhanced error messages with retry-after timing from rate limit headers across all providers.
- Fixed image attachments being dropped when steering messages are queued during streaming.
- Changed edit tool to merge call and result displays into single block.
- Changed model override behavior to persist in settings when explicitly set via CLI.
- Port pi-ai from upstream with Bun-first approach (source files, no dist)
- Add cli_ prefix to tool names in OAuth mode to avoid collisions
- Improve beta header handling with proper deduplication
- Convert codex-instructions.md to Bun text embed
- Strip .js extensions from all imports
- Added environment variable management via settings.json with applyEnvironmentVariables() and related methods.
- Enhanced file mentions to support directories, validate boundaries, and truncate large files.
- Added fallback model candidate logic in title generator to retry on model failures.
- Fixed bash output preview to minify JSON content and skip structural-only lines.
- Added Cerebras provider support with thinking block filtering and zai-glm-4.6 model priority.
- Refactored tree rendering to use consistent theme.tree properties instead of boxSharp.
- Added in-memory session storage abstraction with SessionStorage interface and MemorySessionStorage implementation.
- Added configurable bash interceptor rules with pattern-based command interception settings.
- Added AbortSignal support to 80+ web scrapers for request cancellation.
- Changed task tool to require explicit task `id` field and single `agent` parameter at top level.
- Removed `submit_review` tool - reviewers now use `complete` tool with structured output.
- Replaced Date.now() and crypto.randomUUID() with nanoid() for unique ID generation throughout codebase.
- Co-located tool renderers with their respective tool implementations across 14 tool modules.
- Added render-utils module with shared formatting helpers for diagnostics, diffs, paths, and metadata.
- Removed ~800 lines of inline renderer implementations from centralized renderers.ts file.
- Added Google Vertex AI provider with 11 Gemini model configurations.
- Added OpenAI Codex provider with 13 GPT-5 model configurations.
- Added webSearchProvider, imageProvider, and git.enabled settings for configurable provider selection and feature toggles.
- Added offset and limit parameters to Output tool for paginated reading of large outputs.
- Added provider fallback chain for web search with WebSearchProviderError class for graceful degradation.
- Changed generate_image tool to save images to temp files instead of inline base64 to reduce context bloat.
- Changed web search default model from claude-sonnet-4-5-20250514 to claude-haiku-4-5.
- Added git command interception in bash to redirect to dedicated git tool when enabled.
Branch summary prompts when navigating away from a branch are now
controlled by a setting (disabled by default). Enable in Settings →
Config → "Branch summaries" to restore the previous prompting behavior.
- Fixed context file preview in inspector panel to read content from raw object instead of async file reads.
- Added slash commands to extensions inspector panel for visibility and management.
- Extracted getContextFileContent helper method for type-safe content extraction.
- Added VoiceSupervisor and VoiceController classes for realtime voice mode using OpenAI Realtime API.
- Added echo suppression, noise floor filtering, and fallback transcript handling for voice input.
- Changed voice mode toggle from Caps Lock to Ctrl+Y with auto-send on silence behavior.
- Changed default TTS model from gpt-4o-mini-tts to tts-1.
- Added kwaipilot/kat-coder-pro model and removed deprecated OpenRouter models.
- Added voice mode with Caps Lock push-to-talk for speech-to-text and text-to-speech using OpenAI APIs.
- Added voice settings configuration for transcription model, TTS model, voice selection, and audio format.
- Added description field to task tool for user-facing progress summaries in subagent spawning.
- Added isCapsLock helper function to tui package for Kitty protocol key detection.
- Added getApiKeyForProvider() method to ModelRegistry for retrieving API keys by provider name.
- Added shared render-utils module with standardized formatting functions for truncation, bytes, tokens, duration, and tree rendering.
- Extracted resolveOmpCommand() helper to centralize cross-platform subprocess command resolution.
- Consolidated duplicate utility functions across grep, find, ls, notebook, ask, output, exa, lsp, and web search renderers.
- Updated web search tool to support 'auto' as explicit provider option for auto-detection.
- Added terminal cursor mode support to Editor component with setUseTerminalCursor() and getCursorPosition() methods.
- Added getCursorPosition() method to Component interface and Container class for cursor position aggregation.
- Added hardware cursor positioning and visibility management to TUI class with change detection.
- Enabled terminal cursor mode in HookEditorComponent and CustomEditor for proper cursor blinking.
- Changed isError property from required to optional across ToolResultMessage and tool event interfaces.
- Added SpinnerType variants with distinct animation frames per symbol preset.
- Fixed spinner animation crash when frames array is empty by adding guard clause.
- Refactored agent-loop tool execution to consolidate toolCallId, toolName, and isError into details object.
- 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
- 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.
- 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.
- 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 createLspWritethrough factory for unified LSP-aware file write operations with formatting and diagnostics.
- Added syncContent and notifySaved LSP client methods for in-memory content synchronization.
- Added EditMatchError class and utils module with once and untilAborted helper functions.
- Changed FileDiagnosticsResult interface: renamed diagnostics->messages, hasErrors->errored, serverName->server.
- Changed session title generation to trigger before first message instead of after agent work begins.
- Simplified edit and write tools by delegating to writethrough callback and removing manual abort handling.
- Redesigned Extension Control Center from 3-column layout to tabbed interface with provider tabs.
- Replaced sidebar tree navigation with horizontal tab bar supporting TAB/Shift+TAB cycling.
- Added session header/footer output in text mode showing version, model, provider, and thinking level.
- Removed HolyGrailLayout and SidebarTree components in favor of TwoColumnBody with tabs.
- Added Extension Control Center dashboard with three-column layout, fuzzy search, and keyboard navigation.
- Added extension enable/disable functionality with persistent settings via SettingsManager.
- Renamed /status command to /extensions with /status as alias.
- Removed dynamic discovery settings from settings selector in favor of new extension dashboard.