- 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.
- Added ScopeSignal class for composable cancellation with AbortSignal and timeout support.
- Refactored bash-executor to use async/await with stream pipelines and ScopeSignal utility.
- Replaced manual abort handling with untilAborted wrapper across find, ls, notebook, and read tools.
- Simplified error handling by removing manual abort signal listener setup and cleanup logic.
- 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.
- Replaced crypto.randomUUID() with nanoid() for ID generation across session-manager and rpc-mode.
- Added RecentSessionInfo class with lazy getters for fullName, name, and timeAgo properties.
- Simplified session retrieval by consolidating isValidSessionFile() into getSortedSessions() helper.
- Added nanoid ^5.1.6 dependency and removed duplicate safe-buffer entries from lockfile.
- 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.
- Fixed title generation flag reset when starting new sessions.
- Added localhost URL detection for OpenAI-compatible provider auto-configuration.
- Changed terminal title prefix from 'pi:' to 'omp:'.
- Added debug logging for title generation model lookup, API key retrieval, and request/response handling.
- Removed title length validation that rejected titles over 60 characters.
- Added rulebook tool for agents to fetch rule content by name during execution.
- Added rulebook rules filtering to exclude TTSR, always-apply, and description-less rules.
- Added XML-formatted rulebook rules to system prompt generation.
- Exported rulebook utilities including createRulebookTool, filterRulebookRules, and formatRulesForPrompt.
- Added Time Traveling Streamed Rules (TTSR) feature for real-time pattern matching and rule injection during streaming.
- Added TtsrManager with configurable settings for context mode, repeat mode, and repeat gap.
- Added TTSR trigger support across all rule discovery sources (builtin, cline, cursor, windsurf).
- Added abort signal handling in agent loop to support stream interruption for TTSR.
- Added TtsrNotificationComponent for displaying rule violation notifications in interactive mode.
- Fixed /status command output to use consistent column alignment across all sections.
- Refactored status rendering to collect all line sections before calculating max width.
- Renamed dev:install script to install:dev for consistency.
- Renamed CLI command references from 'pi' to 'omp' throughout documentation.
- Updated version update notification to suggest 'omp update' instead of npm install.
- Updated SDK and extension loading documentation with new command naming.
- Added spawns frontmatter field to agent definitions supporting wildcard or comma-separated agent names.
- Added spawn restriction enforcement to block disallowed sub-agent spawns from parent agents.
- Fixed duplicate skill loading when skills exist in multiple paths.
- Refactored skill loading to use shared addSkill helper with deduplication via seenPaths Set.
- Added unified capability-based discovery system for loading configuration from 8 AI coding tools (Cursor, Windsurf, Cline, GitHub Copilot, Gemini, Codex, Claude, VS Code).
- Added Discovery settings tab in interactive mode for enabling/disabling configuration providers.
- Added provider source attribution showing which tool contributed each configuration item.
- Added support for tool-specific rule formats including Cursor MDC, Windsurf global_rules, and Cline .clinerules.
- Changed MCP tool name parsing to use last underscore separator for improved server name handling.
- Refactored core loaders (skills, hooks, custom tools, slash commands) to use capability API instead of manual directory scanning.
- Renamed CLI binary and package from 'pi' to 'omp' across all platforms and installers.
- Changed environment variable prefix from PI_* to OMP_* with automatic migration support.
- Changed configuration directory from ~/.pi/ to ~/.omp/ with multi-path fallback discovery.
- Added getConfigDirPaths(), findConfigFile(), and readConfigFile() functions for config resolution across .omp, .pi, and .claude directories.
- Added `pi update` command for checking and installing CLI updates from GitHub releases or bun.
- Added cross-platform installer scripts (shell and PowerShell) with automatic PATH configuration.
- Changed HTML export to use compile-time bundled templates via Bun macros.
- Changed `exportToHtml` and `exportFromFile` functions to async operations.
- Embedded assets (themes, templates, agents, commands) directly into binary at compile time using Bun imports.
- Removed runtime filesystem reads for bundled assets in favor of static build-time imports.
- Simplified build scripts by removing copy-assets steps and compiling directly from TypeScript source.
- Updated publish workflow to use bun publish with NPM_CONFIG_TOKEN environment variable.
- Added TypeScript declarations for importing .md, .css, .html, and .js files as text strings.
- Extracted bash execution logic from bash tool into dedicated BashExecutor with configurable cwd and timeout options.
- Added timeout handling with automatic process termination and timeout-specific result tracking.
- Simplified streaming output handling by replacing rolling buffer with string concatenation.
- Reformatted indentation from spaces to tabs across shell utility files.
- Added shell environment snapshot feature to preserve user aliases, functions, and shell options across command executions.
- Added zsh support alongside bash for shell detection and configuration.
- Added PI_BASH_NO_CI, PI_BASH_NO_LOGIN, and PI_SHELL_PREFIX environment variables for shell customization.
- Changed Edit tool to reject .ipynb files with guidance to use NotebookEdit tool instead.
- Added shell-snapshot.ts module with snapshot caching, cleanup handlers, and source command generation.
- Added provider tab bar for filtering models by provider with Tab/Arrow key navigation.
- Replaced single-key shortcuts (S/L) with context menu for model role assignment.
- Added LSP diagnostics display in tool execution results with error/warning indicators.
- Improved model list sorting to include secondary sort by model ID.
- Refactored role markers to use badge-style labels (DEFAULT, SMOL, SLOW).
- Added mutex-based synchronization to prevent race conditions in LSP client, session context, and RPC mode.
- Fixed resource leaks by ensuring stream reader locks are released in try/finally blocks.
- Fixed duplicate processing issues by tracking in-flight operations in runner creation and message writes.
- Fixed event listener mutation during iteration by copying array before emitting.
- Added abort controller cleanup to prevent memory leaks in auto-compaction and retry logic.