- Throttled subagent progress emissions with a coalescing window and terminal flushes.
- Switched message_update handling to append text deltas into a bounded tail buffer for recent output.
- Removed deep cloning from TaskTool progress updates to keep progress rendering cheap.
- Refactored glob pattern handling to create Bun.Glob matcher inline for cleaner implementation.
- Improved empty result detection to return early with appropriate message when no files match.
- Renamed `head_limit` to `limit` in grep and find tools for consistency.
- Added `context` as optional alias for the `c` parameter in grep.
- Made hidden files inclusion configurable in find with `hidden` parameter.
- Integrated .gitignore and .ignore file support in find tool.
- Updated plan mode documentation for self-contained plan files.
- Added model_usage table to persist most-recently-used model timestamps across sessions.
- Model selector now sorts fuzzy-matched results by usage recency.
- Schema version bumped to 3 for model_usage table.
- Removed unused currentModel field from ModelSelectorComponent.
- Refined descriptions to be more concise and focused.
- Restructured content for improved clarity and consistency across all plan mode prompts.
- Tightened critical sections with more direct language.
- Improved plan mode prompt clarity and organization.
- Plan mode provides structured workflow where agents propose plans for user approval before execution.
- Added plan:// internal URL protocol for accessing plan files and injecting plan-mode context into subagent prompts.
- Added plan mode toggle shortcut and paused status indicator in status line.
- Fixed plan reference injection to properly pass workflow state to plan-mode system prompts.
- Improved autocomplete fuzzy matching to support subsequence matching for skill suggestions.
- Model field now accepts string arrays for fallback model prioritization.
- Extracted model list parsing into dedicated parseModelList helper function.
- Extended default model alias detection to validate all entries in comma-separated lists.
- Removed duplicate hexToRgb and rgbToAnsi functions that were only used in foreground color conversion.
- Reused colorToAnsi for background colors by applying ANSI code substitution instead of reimplementing the full logic.
- Exposed mergeCallAndResult and inline rendering options from tools to their wrappers.
- Added normalizeTimeoutSeconds helper to validate and clamp timeout values with flexible unit support.
- Updated buildRenderContext JSDoc to include python tool in list requiring extra state.
- Removed Prettier configuration files (.prettierignore and .prettierrc) and migrated formatting to Biome.
- Updated Biome configuration from version 2.3.11 to 2.3.12 and changed arrowParentheses rule from 'always' to 'asNeeded'.
- Pinned @biomejs/biome dependency to exact version 2.3.12 in package.json and bun.lock.
- Applied consistent arrow function formatting across 489 files by removing unnecessary parentheses around single parameters.
- Removed blank lines after comment blocks and reorganized imports for consistency across the codebase.
- Changed loadCustomModels from async to sync using fs.readFileSync for immediate resolution.
- Updated discoverModels to return synchronously, removing await from main.ts, pipeline.ts, and commit index.ts.
- Migrated sdk.ts to use node:fs instead of node:fs/promises for synchronous operations.
- Refactored scanDirectoryForSkills to use recursive traversal instead of batch Promise.all.
- Added tarball Dockerfile for testing npm publish/install flow with verdaccio registry.
- Converted named imports from node modules (fs, path, os) to namespace imports across all packages.
- Extended extension loader error handling with isEacces and hasFsCode type guards.
- Fixed autocomplete race condition in editor by tracking request ID to discard stale results.
- Added guard clause in plugin-settings to prevent null reference when settings list is undefined.
- Added branch change callbacks in footer to update state after git head resolution.
- Added timing instrumentation to Python kernel startup and gateway acquisition.
- Improved error logging in settings manager for config file access failures.
- Fixed model discovery to re-check file existence after JSON to YAML migration and improved file access error handling.
- Converted readdirSync, readFileSync, and statSync to async readdir, readFile, stat across skills and agent discovery.
- Made scanDirectoryForSkills async and refactored custom directory scanning to use Promise.all for concurrent processing.
- Updated agent discovery to use fs/promises for async file reading and refactored helper patterns.
- Added AgentParsingError exception class for better error handling during agent parsing.
- Added filesystem error type guards (isEnoent, isEacces, isPerm, etc.) to pi-utils for safe error checking.
- Added color manipulation utilities to pi-utils for accessibility features.
- Added color-blind mode setting to settings manager.
- Migrated plugins, settings, and config modules from sync to async file operations.
- Updated error handling to use new pi-utils type guards for type-safe checking.
- Removed WASM generation script; use Bun `wasm?raw` loader for imports.
- Added bunfig.toml with loaders for `.md`, `.py`, and `.wasm?raw` text imports.
- Added types/assets/index.d.ts for global TypeScript module declarations.
- Unified TypeScript configuration with tsgo-based checking across monorepo.
- Removed build and WASM steps from install and publish pipelines.
- Upgraded Perplexity search model from 'sonar' to 'sonar-pro' for improved search quality.
- Added 'high' search context size configuration to Perplexity API requests for enhanced context awareness.
- Added tsconfig.publish.json files to all packages with optimized publish-time configuration.
- Updated all package.json scripts with prepublishOnly hooks for correct type checking during publish.
- Added @oh-my-pi/omp-stats path mappings to root tsconfig.json for consistent imports.
- Added WASM generation script for photon module and integrated into install:dev script.
- Added mermaid rendering with terminal graphics for markdown output in iTerm2 and Kitty terminals.
- Implemented two-level mermaid caching with deduplication by content hash.
- Added background mermaid pre-rendering in assistant messages for responsive display.
- Implemented Python kernel session pooling with MAX_KERNEL_SESSIONS limit and idle cleanup timer.
- Refactored commit agent to remove unused FileObservation type and improve prompts.
- Updated test utilities to use AuthStorage.create() async factory method.
- Added ExistingChangelogEntries interface to pass existing unreleased changelog entries for deletion support.
- Agent prompts now display existing unreleased changelog entries organized by path for potential removal.
- Made analyze_files tool conditional on enableAnalyzeFiles flag when pre-computed observations are available.
- Fixed changelog application to process proposals with only deletions without new entries.
- Added fallback commit generation using file pattern analysis when agentic mode fails, enabling graceful degradation.
- Added trivial change detection to automatically classify whitespace-only and import-reorganization commits.
- Added support for pre-computed file observations to skip redundant agent analysis calls.
- Added diff caching with file prioritization to optimize token usage and respect budget limits in large changesets.
- Added changelog deletion support for removing outdated entries via the proposal interface.
- Optimized git-file-diff and git-overview tools with prioritization logic and smart truncation.
- Fixed indentation and line breaks in nested code blocks (lsp/render.ts, patch/shared.ts).
- Collapsed overlong function arguments and ternary expressions to standard line length.
- Reorganized import statements for consistency (ask.ts).
- Improved readability of conditional expressions (output-block.ts, web/search/render.ts, python.ts).
- Resolved a dedicated smaller model for the commit agent instead of reusing the primary model.
- Exit commit command with code 0 on successful completion.
- Prevented searches from root directory by throwing ToolError when searchPath is '/'.
- Added 5-second timeout to fd operations for both gitignore detection and main file search.
- The commit agent now proposes changelog entries via a dedicated tool instead of auto-generation.
- Added retry logic that reminds the agent to call missing tools before session completion.
- Split commit validation now allows changelog target files in change sets.
- Added retry utility functions `isRetryableError` and `extractHttpStatusFromError` to the @ai package for identifying transient errors suitable for retry operations.
- Made `AgentStorage.open()` asynchronous with exponential backoff retry logic to handle SQLITE_BUSY errors during concurrent database access.
- Refactored `AuthStorage` to use async factory pattern with `create()` method instead of synchronous constructor for proper async initialization.
- Added graceful error handling in terminal operations to exit cleanly when terminal becomes unavailable due to EIO errors instead of crashing.
- Added error handling during emergency terminal restore to prevent errors when terminal is already dead during crash cleanup.
- Added hunk selectors (all, indices, or line ranges) to split commits for partial file staging.
- Added topological sort via Kahn's algorithm to execute commits in correct dependency order.
- Added circular dependency detection with validation errors for split commit plans.
- Changed analyze_file tool to analyze_files for parallel batch analysis with cross-file context.
- Added stageHunks() git helper for fine-grained partial file staging by hunk index or line range.
- Output block border color now reflects state (error, success, warning) for visual feedback.
- Tools use renderStatusLine, renderTreeList, renderFileList, renderCodeCell for unified formatting.
- Write tool shows streaming preview of content being written with syntax highlighting.
- Read tool displays resolved path information when reading from URLs or symlinks.
- Calculator shows expression and output (e.g., `2+2 = 4`) instead of just the result.
- Empty and error states render consistently with status headers across Find, Grep, Ls, Notebook, Ask.
- Assistant messages now render as formatted Markdown using the TUI Markdown component.
- Word wrapping respects terminal width with a minimum of 40 columns.
- Added extractMessageText and writeAssistantMessage for full multi-line assistant output.
- Rewrote formatToolArgs to recursively traverse nested objects and arrays.
- Changed formatToolArgsBlock to use branch characters for tree-style visual hierarchy.
- Added real-time thinking line that updates with streaming message preview during agent processing.
- Changed tool execution output to display name and formatted argument block separately.
- Replaced generic message labels with content previews extracted from assistant responses.
- Replaced deterministic pipeline with agent session using specialized git tools for diff analysis.
- Introduced git-overview, git-file-diff, git-hunk, and analyze-file tools for fine-grained inspection.
- Added split-commit support to create multiple atomic commits for unrelated changes.
- Added commit message validation with filler word detection, meta phrase filtering, and unicode normalization.
- Added --legacy flag to use the deterministic pipeline when preferred.
- Extracted formatCommitMessage and model selection logic into dedicated modules.
- Added file locking mechanism to prevent concurrent write races in settings persistence.
- Exported `withFileLock` utility function for coordinating file access across processes.
- Integrated file locking into SettingsManager.save() to ensure atomic config updates.
- Added distinct root tracking to scope candidate extraction for improved wide change detection.
- Introduced extractTopLevelRoot() helper function to identify top-level directory roots in file paths.
- Enhanced isWideChange() function to consider number of distinct roots (3+) as a wide change indicator.
- Changed tool result rendering to merge call and result displays with tool arguments in headers across 13 tools.
- Added args parameter to render methods enabling display of contextual metadata like patterns, paths, and commands.
- Changed Read tool title to display line range when offset or limit arguments provided.
- Changed worker instantiation to use direct URL import instead of pre-bundled worker files.
- Removed streaming preview rendering logic from write tool.
- Created new TUI component library with renderStatusLine, renderOutputBlock, renderCodeCell, renderFileList, and renderTreeList utilities for consistent tool output rendering.
- Refactored 13+ tools to use centralized TUI components, replacing inline theme formatting and ToolUIKit class usage with declarative component APIs.
- Moved tree rendering utilities (getTreeBranch, getTreeContinuePrefix) from tool render-utils to TUI module for improved code organization.
- Streamlined render function return types across tools from Text to Component objects with render/invalidate methods for better state management.
- Added configurable map-reduce analysis settings for concurrency, timeout, file thresholds, and token limits.
- Made changelog diff truncation limit configurable via maxDiffChars parameter.
- Added support for excluding YAML lock files from commit analysis via suffix patterns.
- Created GitError custom error class with command and stderr tracking for structured error handling.
- Converted relative imports to alias-based '$c' imports across commit modules.
- Added CommitSettings interface with configurable map-reduce and changelog parameters.
- Added getCommitSettings() method to SettingsManager for retrieving commit configuration with sensible defaults.
- Added commit settings field to Settings interface.
- Improved YAML formatting by adding indentation parameter to YAML.stringify() calls for better readability.
- Removed redundant mkdirSync calls before Bun.write operations.
- Reorganized import statements in alphabetical order for consistency.
- Added worker bundle caching to pre-build and cache the worker script at startup, improving worker initialization performance.
- Introduced `workerBundlePromise` that bundles worker.ts using Bun.build and caches it in ~/.omp/worker-bundle.js for reuse across worker instances.
- Modified worker instantiation to use the pre-built bundle instead of loading the raw TypeScript file directly.
- Added `omp commit` command for generating conventional commits with AI-powered analysis of staged changes.
- Implemented conventional commit analysis pipeline with scope detection, changelog categorization, and summary generation.
- Added map-reduce analysis pattern for efficiently processing large diffs using smaller models for file-level observations.
- Implemented automatic changelog generation and updates to CHANGELOG.md files based on commit analysis.
- Added git operations wrapper (ControlledGit) for managing staged files, diffs, commits, and push operations.
- Implemented comprehensive validation for conventional commit format, scope naming, and changelog entries.
- Settings now stored in ~/.omp/agent/config.yaml instead of agent.db
- Models config now supports models.yaml (preferred) alongside models.json
- Auto-migration from agent.db settings and models.json on first run
- AgentStorage.saveSettings() deprecated (getSettings() kept for migration)
- storage-migration.ts now only handles auth.json migration