- event-controller: check async state for inlined image read results
instead of hardcoding isBackgroundRunning=false
- ui-helpers: fall through to render text blocks when read results
contain both images and text
- terminal-capabilities: return null for unknown PI_FORCE_IMAGE_PROTOCOL
values instead of silently falling through to fallback detection
- Replaced external dependencies with native Bun APIs: glob, TOML parsing, and HTML parsing.
- Removed 7 unused dependencies (file-type, glob, ignore, marked, zod, ms, @types/ms) and simplified package.json.
- Migrated mermaid cache key type from string to bigint using Bun.hash.xxHash64() for efficient hashing.
- Deleted ignore-files utility module and removed rootDir/ignoreMatcher parameters from loadFilesFromDir().
- Implemented inline MIME type detection for images, reducing sniff buffer from 4100 to 12 bytes.
- Replaced node-html-parser with linkedom library across all web scrapers for improved DOM API compatibility.
- Updated DOM property access from .text to .textContent and .parentNode to .parentElement for linkedom API.
- Refactored extractDocumentLinks() to use regex-based parsing with 20-link limit instead of full DOM traversal.
- Added type assertions and Array.from() wrappers for querySelectorAll() results to ensure proper typing.
- Unified glob pattern handling in ast_find and ast_replace tools by consolidating separate glob parameter into path parameter.
- Added parseSearchPath() utility function to parse glob patterns from file paths and separate base path from glob components.
- Made pattern parameter required in ast_find tool and removed strictness parameter from both ast_find and ast_replace tools.
- Updated tool documentation to clarify that path parameter accepts files, directories, and glob patterns.
- Replaced full-page HTML parsing with bounded head extraction to reduce memory usage and parsing overhead.
- Implemented regex-based attribute extraction to avoid DOM parsing overhead for link discovery.
- Added extractHeadHtml() to limit parsing to first 32KB of head section, preventing expensive whole-page traversal.
- Added ast_find and ast_replace tools for syntax-aware structural code search and rewriting via ast-grep.
- Added astFind.enabled and astReplace.enabled configuration settings to control tool availability.
- Implemented native AST module with pattern matching, language inference, and edit application for 7 languages.
- Added system prompt guidance to prefer AST tools over bash text manipulation for syntax-aware operations.
- Extracted prompt formatting logic into reusable `formatPromptContent()` utility function with configurable render phases.
- Removed 166 lines of duplicate formatting code from scripts and config modules by centralizing regex patterns and helper functions.
- Updated prompt template rendering to use unified `formatPromptContent()` instead of inline `optimizePromptLayout()` implementation.
- Added comprehensive test coverage for prompt formatting with pre-render and post-render mode validation.
- Added `occurrence` parameter to symbol resolution for disambiguating repeated matches on the same line.
- Fixed code action application to execute command-based actions via `workspace/executeCommand` protocol.
- Fixed diagnostics glob pattern detection to recognize bracket character class patterns.
- Fixed LSP render metadata sanitization to prevent tab and newline characters from breaking layout.
- Refactored symbol resolution and code action handling into reusable utility functions with improved error handling.
- Added comprehensive regression test suite covering glob patterns, symbol resolution, code actions, and text sanitization.
- Added type_definition, implementation, and code_actions LSP operations with source context display.
- Replaced column/end_line/end_character parameters with symbol parameter for unified position specification.
- Enhanced definition and references operations to include 3-line source context in results.
- Added glob pattern support in file parameter for diagnostics action.
- Implemented code_actions operation with query matching and apply mode for automated fixes.
- Added public `waitForIdle()` and `getLastAssistantMessage()` APIs to AgentSession for deterministic session state access.
- Refactored deferred continuation scheduling from raw `setTimeout()` to centralized post-prompt task tracking system for concurrent recovery operations.
- Fixed race conditions between deferred TTSR/context-promotion continuations and `prompt()` completion via shared recovery orchestrator.
- Replaced `#waitForRetry()` with `#waitForPostPromptRecovery()` to unify retry and TTSR resume gate handling.
- Fixed TTSR violations during subagent execution aborting the entire subagent run; `#waitForPostPromptRecovery()` now awaits agent idle after TTSR/retry gates resolve, preventing `prompt()` from returning while fire-and-forget `agent.continue()` is still streaming.
- Added comprehensive test case verifying `prompt()` blocks until TTSR continuation with tool calls completes, preventing premature session disposal.
- Added `tools.maxTimeout` setting to enforce global timeout ceiling across all tool calls.
- Centralized per-tool timeout constants and clamping logic into `tool-timeouts.ts` module.
- Extracted `clampTimeout()` function to standardize timeout enforcement across bash, python, browser, ssh, and fetch tools.
- Implemented TTSR resume gate to ensure `prompt()` blocks until TTSR interrupt continuations complete, preventing race conditions between TTSR injections and subsequent prompts.
- Replaced `#waitForRetry()` with `#waitForPostPromptRecovery()` to handle both retry and TTSR resume gates, ensuring prompt completion waits for all post-prompt recovery operations.
- Added comprehensive test coverage for TTSR resume gate behavior under interrupt and deferred injection modes.
- Renamed intent field from `agent__intent` to `intent` in tool schemas for cleaner API contracts.
- Refined intent parameter guidance to require concise 2-6 word present participle sentences.
- Updated intentTracing documentation and test fixtures to reflect the new field naming convention.
Add cross-platform terminal dark/light mode detection using the Mode 2031
VT extension (DECSET 2031). On startup, query the terminal's current
appearance with CSI ? 996 n, then subscribe to live appearance change
notifications with CSI ? 2031 h. When the OS or terminal switches between
dark and light mode, the terminal sends a DSR that triggers an automatic
theme re-evaluation.
Previously, detectTerminalBackground() only checked the COLORFGBG
environment variable once at launch — a static value that never updates
when the system appearance changes mid-session. The SIGWINCH listener
only fires on terminal resize, not on appearance changes.
Mode 2031 is supported by Ghostty, Kitty (0.38.1+), Contour (0.4.0+),
VTE/GNOME Terminal (0.82.0+), and tmux (3.6+). Unsupported terminals
silently ignore the escape sequences and fall back to the existing
COLORFGBG heuristic.
writeMCPConfigFile writes to disk via node:fs, but the capability
system's readFile (capability/fs.ts) caches file contents in an
in-memory Map. When /mcp reauth writes a new credential ID to the
config file and then #reloadMCP calls discoverAndConnect, the
builtin provider's readFile hits the stale cache and returns the
old config — causing the connection to use the old (deleted)
credential ID and fail with HTTP 401 missing_token.
Fix: call invalidateFsCache(filePath) after the atomic rename in
writeMCPConfigFile so subsequent loadCapability reads see fresh
content.
- Added lenientArgValidation option to tools for graceful handling of argument validation errors.
- Refactored schema reference resolution to inline all $ref definitions instead of preserving them at root level.
- Added circular reference detection during schema resolution to prevent infinite loops.
- Added AJV compilation verification to catch unresolved $ref references before tool execution.
- Added graceful schema validation fallback mechanism that degrades to unconstrained schemas on repeated validation failures.
- Enhanced schema enforcement across AI providers to use try-catch pattern with automatic fallback to non-strict mode on validation errors.
- Improved handling of circular, deeply nested, and non-object output schemas with stack overflow prevention and type conversion fallbacks.
- Added `tryEnforceStrictSchema()` utility function providing error-resilient schema validation with strict mode flag tracking.
- Added normalizeMixedSchemaNode() function to recursively convert mixed JTD and JSON Schema definitions into valid JSON Schema.
- Changed output schema validation to gracefully fall back to unconstrained JSON objects when schema is invalid instead of throwing errors.
- Fixed handling of mixed JTD and JSON Schema output definitions by normalizing them during schema conversion.
- Added comprehensive test coverage for JTD-to-JSON Schema conversion and output schema validation edge cases.
* fix: use --no-optional-locks for background git status calls
Prevent index.lock contention by adding --no-optional-locks to all
git status --porcelain calls. This is the same approach VSCode uses
in its built-in git extension (GIT_OPTIONAL_LOCKS=0).
The status-line component polls git status every ~1s to show
staged/unstaged/untracked counts. Without --no-optional-locks,
each call acquires index.lock for an opportunistic index refresh,
which blocks concurrent git operations (pull, rebase, commit) run
by the user or by omp's own tool execution.
The git-status documentation explicitly recommends this:
'Scripts running status in the background should consider
using git --no-optional-locks status'
References:
- git docs: https://git-scm.com/docs/git-status (BACKGROUND REFRESH)
- git commit adding the flag: https://github.com/git/git/commit/27344d6
- VSCode's fix: GIT_OPTIONAL_LOCKS=0 in extensions/git/src/git.ts:2716
- Claude Code same issue: https://github.com/anthropics/claude-code/issues/11005
- GitExtensions same issue: https://github.com/gitextensions/gitextensions/issues/5066
- VSCode issue #31069: https://github.com/microsoft/vscode/issues/31069
* style: fix biome formatting for long lines in worktree.ts
Add an optional `oauth` config block on MCP server entries in mcp.json,
allowing explicit `clientId` and `callbackPort` values for servers that
don't expose these through auto-discovery (e.g. Slack).
The `oauth.clientId` is used as a fallback — if the server's error
response or well-known metadata includes a client_id, that takes
precedence. The `callbackPort` defaults to 3000 when not specified.
- Added `sanitizeSchemaForStrictMode` function to normalize JSON schemas by removing non-structural keys for strict mode compatibility.
- Enhanced `enforceStrictSchema` to handle union types with object variants and type arrays containing object.
- Fixed `enforceStrictSchema` to properly handle malformed object schemas with required keys.
- Integrated schema sanitization in coding-agent submit-result tool with fallback to non-strict mode on validation errors.
- Removed per-task skill pinning feature; subagents now inherit session skill set instead of per-task selection.
- Removed `preloadedSkills` option from `CreateAgentSessionOptions` interface and related system prompt plumbing.
- Removed `skills` field from Task schema; task execution now passes available session skills directly to subagents.
- Simplified task execution pipeline by removing skill resolution logic and preloaded skills handling from system prompt templates.
- Replaced `Type.Object` with `Type.Record` for more accurate representation of arbitrary JSON output when no specific schema is provided.
- Improved config CLI test assertions for model roles to strip ANSI escape codes, enhancing test robustness.
- Restructured submit_result tool parameter schema to wrap data and error fields in a nested result object.
- Updated all prompt documentation to reference the new result.data and result.error parameter paths.
- Added validation logic to ensure result is an object containing exactly one of data or error.
- Updated test cases to reflect the new nested result object parameter structure.
- Added support for setting array and record configuration values using JSON syntax.
- Implemented JSON parsing and validation for array and record types in config CLI.
- Added 2 integration tests covering array and record configuration workflows.
- Enhanced test setup with temporary directory management and settings reset for isolation.