- Added 25+ new specialized web scrapers for sites including MusicBrainz, Discourse, Lemmy, Sourcegraph, ORCID, and package registries.
- Refactored web-fetch-handlers module to web-scrapers with modular architecture and centralized handler exports.
- Added AbortSignal support throughout web-fetch tool and scraper utilities for improved request cancellation.
- Fixed npm license parsing to handle object format with type property.
- Fixed raw GitHub URL construction by removing refs/heads prefix from ref path.
- Added graceful termination with cleanup and timeout handling to task executor.
- Fixed task worker error handling to prevent hanging on crashes with global error handlers.
- Fixed double-stringified JSON output parsing from subagents.
- Fixed markitdown tool to use automatic installer via ensureTool() instead of Bun.which().
- Added abort reason tracking and centralized timer/listener cleanup in executor.
- Added 50+ specialized web-fetch handlers for platform-specific content extraction including GitHub, GitLab, npm, PyPI, crates.io, and many more.
- Added automatic yt-dlp installation for YouTube transcript extraction with fallback support.
- Added handlers for social platforms including Twitter/X via Nitter, Reddit, Mastodon, Bluesky, and Hacker News.
- Added handlers for academic sources including arXiv, PubMed, Semantic Scholar, bioRxiv, and IACR ePrint.
- Added Python tool installation support via uv or pip fallback for markitdown and html2text.
- Extracted URL handlers from monolithic web-fetch.ts into modular handler files with shared utilities.
- Added YouTube video support with automatic transcript extraction via yt-dlp.
- Added parseYouTubeUrl function to extract video and playlist IDs from various URL formats.
- Added cleanVttToText function to convert VTT subtitle files to plain text.
- Reformatted indentation from spaces to tabs in jtd-to-json-schema.ts and name-generator.ts.
- Updated DEVELOPMENT.md architecture diagram to reflect SDK wrapper, capability system, and git-tool dependency.
- Expanded directory structure documentation to cover 40+ new files including capability, discovery, and extension systems.
- Revised development workflow instructions to use bun commands instead of npm/tsx.
- Added documentation sections for new extension sources and capability types.
- Updated AGENTS.md with simplified issue labeling, corrected repository URLs, and streamlined release commands.
- Consolidated README.md package table and removed redundant development/publishing sections.
- Fixed memory accumulation by streaming events directly to disk instead of storing in memory.
- Changed subprocess usage tracking to accumulate incrementally from message_end events.
- Fixed session persistence to exclude transient streaming data (partialJson, jsonlEvents).
- Removed parseSubagentUsage() function in favor of pre-accumulated usage data.
- 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.
- Added `all` parameter to edit tool for replacing all occurrences with fuzzy matching support.
- Added OpenRouter provider support for image generation when `OPENROUTER_API_KEY` is set.
- Renamed image tool from `gemini_image` to `generate_image` with updated default model.
- Added test cases for edit tool's `all: true` option covering multiple scenarios.
- Added ImageMagick fallback for image processing when sharp is unavailable.
- Added image-magick utility module with detection, conversion, and resize functions.
- Changed web_fetch tool label from 'web_fetch' to 'Web Fetch'.
- Updated image-convert and image-resize to use ImageMagick fallback instead of failing or returning original.
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 file-based slash commands discovery from commands/ directories.
- Added $ARGUMENTS placeholder support for slash command argument substitution.
- Changed argument substitution order to process positional args before wildcards to prevent re-substitution bugs.
- Integrated slash command expansion into AgentSession initialization flow.
fd's --glob mode matches against filenames only, not paths. Patterns
like `reports/**` were failing because fd looked for entries literally
named `reports/**`. Now detects path separators and adds --full-path
flag with `**/` prefix to match correctly.
- Changed multi-task display to show task descriptions instead of agent names when available.
- Fixed indentation in worktree constants module for consistency.
The `resolved` flag was set synchronously before awaiting `proc.exited`,
causing the stdout reader to skip all JSON events via the `if (resolved)
return` guard. Now we await both process exit and stream reader completion
before setting `resolved = true`.
- Added new @oh-my-pi/pi-git-tool package with 22 git operations, safety guards, caching, and GitHub CLI integration.
- Added /wt slash command for git worktree management with create, list, merge, remove, spawn, and parallel operations.
- Added worktree library with collapse strategies (simple, merge-base, rebase) and session tracking for agent tasks.
- Added structured git tool with TypeBox schema exposing gitTool and createGitTool from SDK.
- Added safety policies blocking force push to protected branches and warning on destructive operations.
- Windows uses cmd /c start instead of raw start (shell builtin)
- macOS uses open, Linux uses xdg-open
- Wrapped in try-catch to fail silently when unavailable
- 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 cycleRoleModels() method to cycle through configured role-based models with deduplication.
- Added RoleModelCycleResult interface with model, thinkingLevel, and role properties.
- Added isCtrlY() helper function to detect Ctrl+Y input across raw byte and Kitty protocol.
- 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.
- Added 65 new built-in color themes including dark, light, and material variants.
- Added theme sync script to generate theme index from JSON files.
- Expanded default theme collection from approximately 30 to 96 themes.
- 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.