- Added renderCall and renderResult methods to MCPTool and DeferredMCPTool classes for TUI rendering of tool calls and results.
- Created new mcp/render.ts module providing JSON tree rendering functionality with configurable depth and line limits for terminal display.
- Updated renderResult signature in custom tool and extension types to accept optional args parameter for accessing original tool arguments during result rendering.
- Fixed method binding in extension and hook tool wrappers by applying .bind(tool) to renderCall and renderResult methods to preserve correct 'this' context.
- Added filter to skip .git directories in fuzzy_find_sync function to improve search performance.
- Fixed timeout handling in LSP write-through operations to properly clear formatter and diagnostics results when operations exceed the 10-second timeout threshold.
- Added timeout detection mechanism in LSP index that sets a flag when the timeout signal is aborted.
- Added nonAbortable property to EditTool and WriteTool classes to prevent these operations from being aborted during execution.
- Externalized subagent submit reminder prompt to a separate template file for improved maintainability and dynamic retry tracking.
- Applied semantic compression rules to system prompt and skill documentation, removing grammatical scaffolding while preserving meaning-carrying content.
- Updated semantic-compression skill documentation with more aggressive compression stance, expanded deletion tiers, and clarified preservation rules.
- Refactored system prompt for brevity using fragments, label:value pairs, and direct phrasing without sacrificing clarity or instruction fidelity.
- Added semantic-compression skill documentation with deletion tiers, preservation rules, and compression examples.
- Enhanced system prompt with explicit assumption-stating guidance, pre-finishing checklist, and conflict resolution procedures.
- Added verification guidance for test-first approach and naive-before-optimizing pattern for algorithmic work.
- Clarified commitment to high-reliability contexts and user stamina constraints in stakes section.
- Reorganized settings tabs from 8 to 10 tabs with improved categorization: Display, Agent, Input, Tools, Config, Services, Bash, LSP, TTSR, and Status.
- Moved behavior-related settings (thinking level, steering mode, retry attempts) from Behavior tab to new Agent tab.
- Moved input/interaction settings (escape action, collapse changelog, notifications) to new Input tab.
- Moved tool configuration settings (line numbers, fuzzy matching, patch mode) from Tools tab to new Config tab.
- Moved provider and external service settings (web, image, exa) to new Services tab.
- Removed type guard functions (isBashToolResult, isReadToolResult, isEditToolResult, isWriteToolResult, isGrepToolResult, isFindToolResult, isLsToolResult) from public API exports.
- Consolidated directory listing functionality from dedicated `ls` tool into the `read` tool.
- Removed the `ls` tool and all related exports, types, and configurations from the public API.
- Updated `read` tool to return formatted directory listings with modification times instead of redirecting to `ls` tool.
- Removed `bashInterceptor.simpleLs` setting and related interception logic from bash tool.
- Removed `ls.enabled` setting and related tool registration logic.
- Removed test cases for the `ls` tool and updated tool type definitions to remove `LsToolResultEvent`.
- Added enable/disable settings for specialized tools (find, grep, ls, notebook, fetch, web_search, lsp, calc) allowing fine-grained control over tool availability.
- Implemented conditional tool documentation in system prompt that dynamically lists only enabled specialized tools based on configuration.
- Updated tool filtering logic to respect enable/disable settings, preventing unavailable tools from being exposed to the agent.
- Reorganized todo-related settings from `todoCompletion.*` namespace to `todo.*` namespace with separate `todo.enabled` and `todo.reminders.*` properties.
- Updated settings access pattern in agent session from grouped settings object to flat dot-notation keys for improved consistency.
- Refactored todo_write tool availability check to independently gate on both `todo.enabled` setting and absence of submit_result.
- Fixed tool parameter schemas displaying internal TypeBox metadata fields in system prompt.
- Removed project tree snapshot generation from system prompt as unused feature.
- Removed unused imports and constants related to project tree scanning functionality.
- Condensed prompt documentation throughout by removing articles, auxiliary verbs, and redundant explanations for improved clarity and conciseness.
- Simplified system prompts by replacing multi-line explanations with terse, semicolon-separated fragments and removing verbose motivational language.
- Reformatted tool documentation to use abbreviated language, removing 'the', 'a', and 'is' throughout for more direct technical writing.
- Removed blank lines and consolidated spacing in prompt files to reduce vertical whitespace and improve document density.
- Exported getWorkProfile function and WorkProfile type from main package index for work profiling capabilities.
- Updated coding-agent debug module imports to use new main package exports instead of subpath imports.
- Removed 'strippedRedirect' field from NormalizedCommand interface returned by normalizeBashCommand().
- Removed automatic stripping of '2>&1' stderr redirections from bash command normalization.
- Updated bash-normalize function to only extract head/tail patterns and no longer process stderr redirection.
- Removed test cases for 2>&1 stripping and combined pattern handling in bash-normalize tests.
- Introduced new task scheduling system with CancelToken for cooperative cancellation, replacing Rayon-based work scheduling with libuv thread pool integration.
- Added Cancellable interface with timeoutMs and signal properties for unified timeout and abort signal handling across all async operations.
- Converted async functions (clipboard, html, image, shell, grep, glob) to synchronous functions returning task::Async wrappers for consistent cancellation semantics.
- Removed abortShellExecution() function and executionId tracking in favor of centralized CancelToken-based cancellation.
- Simplified htmlToMarkdown() signature by removing RequestOptions parameter and delegating cancellation to Cancellable interface.
- Replaced heap-allocated Vec with stack-allocated SmallVec in grep module for context lines and type filters to reduce allocations.
- Optimized process tree data structure in ps module from Vec to SmallVec with capacity 4 for typical process child counts.
- Changed shell module to use SmallVec for process IDs collection, reducing heap allocations in abort operations.
- Refactored text module to use SmallVec for token and line collections, avoiding heap allocations for typical text wrapping scenarios.
- Increased work profiler stack capacity from 2 to 4 elements and optimized stack collection using iterator copy.
- Added work profile capture to debug report bundle for improved profiling insights.
- Added work scheduling profiler with always-on circular buffer sampling to track CPU scheduling patterns and task execution times.
- Added `getWorkProfile()` native function to retrieve profiling data including folded stacks, markdown summary, SVG flamegraph, and metrics for the last N seconds.
- Added work profile debug menu item to visualize CPU scheduling patterns via flamegraph in the coding agent.
- Added work profile support to report bundles with folded stacks, summary, and flamegraph visualization.
- Updated `launch_blocking()` and `launch_async()` functions to accept task name tags for profiling instrumentation.
- Added dependencies on inferno, smallvec, and heapless crates for profiling infrastructure.
- Added interactive shell console subcommand to coding-agent CLI with support for working directory, timeout, and snapshot configuration.
- Added cancellation token support to ExecutionContext and ExecutionParameters for graceful shell execution interruption.
- Implemented cancellation checks throughout AST execution pipeline (Program, CompoundList, AndOrList, Pipeline, and all command types) to enable responsive interruption.
- Replaced process tracking mechanism with tokio_util CancellationToken for improved async cancellation handling.
- Added tokio-util 0.7.16 dependency to pi-natives crate for cancellation token support.
- Vendored brush-core crate locally to enable local development and patching.
- Added patch.crates-io section in Cargo.toml to redirect brush-core dependency to vendored version at crates/brush-core-vendored.
- Updated pi-natives Cargo.toml to use local path dependency for brush-core instead of external crate version.
- Fixed `find` tool to return a single match when given a file path instead of failing with 'not a directory' error.
- Added `hasGlobChars` helper function to detect glob patterns and distinguish file paths from glob patterns.
- Extended `FindOperations` interface with optional `stat` method for distinguishing files from directories.
- Added test case verifying that `find` tool correctly returns a single file when given a file path.
- Added automatic extraction of embedded native addon payload to ~/.omp/natives/<version> on first run of compiled binaries.
- Added embed:native build script for generating platform-specific native addon payloads embedded in compiled binaries.
- Enhanced native addon loading to prioritize extracted embedded addon over downloaded versions.
- Improved error messages with platform-specific guidance for compiled vs npm-installed binaries.
- Refactored CI workflow to use reusable build_binary() function for cross-platform binary compilation.
- Upgraded brush-core from 0.3.5 to 0.4.0 and added brush-builtins 0.1.0 dependency to support new builtin command framework.
- Refactored shell execution to use new ExecutionResult and ExecutionControlFlow types from brush-core 0.4.0, replacing previous ExitCode-based approach.
- Updated system_info disk refresh to use new sysinfo 0.38 API with single refresh(true) call instead of separate refresh_list() and refresh() calls.
- Added tokio full-featured runtime dependency to support async operations in pi-natives.
- Updated phf from 0.11 to 0.13 with macros feature for improved perfect hash function support.
- Fixed UTF-16 string handling in text.rs to properly strip trailing null bytes before conversion.
- Added Shell class to persistent shell session management with session caching and abort capabilities.
- Added find() function for file discovery with glob pattern matching and optional streaming callbacks.
- Exported ImageFormat enum from main natives package for image encoding format selection.
- Reorganized native bindings into modular type files with declaration merging pattern for better maintainability.
- Refactored shell execution to use persistent Shell instances instead of stateless executeShell function calls.
- Enhanced SystemInfo type with additional fields for distro, kernel, CPU, and disk information.
- Refactored PhotonImage API from standalone functions to instance methods with simplified naming conventions.
- Renamed PhotonImage.new_from_byteslice() to parse() for a simpler, more intuitive factory method API.
- Converted PhotonImage.get_width() and get_height() methods to width and height getter properties.
- Consolidated four separate encoding methods (getBytes, getBytesJpeg, getBytesWebp, getBytesGif) into a single encode(format, quality) method.
- Moved resize() from a standalone function to a PhotonImage instance method.
- Added ImageFormat enum to specify encoding formats (PNG, JPEG, WEBP, GIF) in the encode method.
- Removed manual resource management via free() and Symbol.dispose, simplifying PhotonImage lifecycle.
- Added session-based shell execution with persistent shell instances and session management via sessionKey parameter.
- Added support for shell snapshots to initialize bash sessions with saved state via snapshotPath parameter.
- Added sessionEnv option to set environment variables once per session, separate from command-specific env variables.
- Added process group management functions (process_group_id and kill_process_group) for better process lifecycle control on Linux, macOS, and Windows.
- Changed env option to apply variables for the current command only, with session-level variables now managed via sessionEnv.
- Refactored shell execution to use async output queuing with enqueueChunk for proper chunk sequencing and improved timeout handling with process group termination.
- Added native system information collection via new getSystemInfo() function in pi-natives crate using sysinfo library.
- Exported SystemInfo type and getSystemInfo() function from @oh-my-pi/pi-natives package for cross-platform system details.
- Migrated system information collection in coding-agent from shell-based commands to native Rust bindings for improved performance and reliability.
- Removed shell configuration retrieval from environment information display in coding-agent.
- Refactored system-prompt.ts to use native getSystemInfo() instead of platform-specific shell commands and helper functions.
- Added sysinfo 0.30 dependency to pi-natives crate for native system information gathering.
- Added native clipboard support with copyToClipboard() and readImageFromClipboard() functions using arboard library.
- Exported ClipboardImage type for clipboard image data with MIME type information.
- Migrated clipboard operations from shell commands to native arboard bindings for improved performance and reliability.
- Implemented Rust native module in pi-natives crate providing cross-platform clipboard access for Linux, macOS, and Windows.
- Added TypeScript bindings and type definitions for clipboard functionality in natives package.
- Replaced Node.js-based persistent shell sessions with direct native calls for improved reliability and streaming.
- Integrated `brush-core` and `os_pipe` into the `pi-natives` crate for shell command execution.
- Removed the `shell-session.ts` module and its corresponding test suite.
- Updated `bash-executor` to leverage the new native shell execution.
- Reorganized system prompt guidance for parallel task execution, moving coordinator section earlier and restructuring parallel_reflex section for improved clarity.
- Added native process tree killing and listing functions via new `ps` module in pi-natives crate with platform-specific implementations (Linux /proc, macOS libproc, Windows CreateToolhelp32Snapshot).
- Refactored process termination logic to prioritize native process tree killing when available, improving reliability of process cleanup across platforms.
- Removed detached process spawning across codebase (bash-executor, shell-session, kernel, lsp client, markitdown conversion) in favor of native process tree management.
- Simplified ptree module by removing managed children tracking and postmortem cleanup hooks, delegating process lifecycle management to native implementations.
- Fixed role override regression by consolidating multiple override calls into a single operation to prevent intermediate state loss.
- Changed model role assignment in buildSessionOptions to use override with merged state instead of deprecated setModelRole method.
- Refactored multiple conditional override calls for smol, slow, and plan model roles to batch them into a single override call.
- Added native shell execution API via brush-core with streaming output support and configurable timeouts.
- Migrated bash executor from persistent ptree-based shell sessions to native bindings with improved performance and simplified architecture.
- Removed persistent shell session module and replaced with native brush-core implementation for better resource management.
- Added executeShell() and abortShellExecution() functions to native bindings for shell command execution with cancellation support.
- Implemented shell execution with support for environment variables, working directory changes, and timeout handling.