diff --git a/packages/ai/src/providers/openai-codex-responses.ts b/packages/ai/src/providers/openai-codex-responses.ts index 4c41e5820..043ee443e 100644 --- a/packages/ai/src/providers/openai-codex-responses.ts +++ b/packages/ai/src/providers/openai-codex-responses.ts @@ -1507,7 +1507,7 @@ function handleToolCallArgumentsDelta( function handleToolCallArgumentsDone(runtime: CodexStreamRuntime, rawEvent: Record): void { const entry = openItemForEvent(runtime, rawEvent); - if (!entry || entry.item.type !== "function_call" || entry.block?.type !== "toolCall") return; + if (entry?.item.type !== "function_call" || entry.block?.type !== "toolCall") return; const args = (rawEvent as { arguments?: string }).arguments; if (typeof args === "string") { const block = entry.block; @@ -1540,7 +1540,7 @@ function handleCustomToolCallInputDelta( function handleCustomToolCallInputDone(runtime: CodexStreamRuntime, rawEvent: Record): void { const entry = openItemForEvent(runtime, rawEvent); - if (!entry || entry.item.type !== "custom_tool_call" || entry.block?.type !== "toolCall") return; + if (entry?.item.type !== "custom_tool_call" || entry.block?.type !== "toolCall") return; const input = (rawEvent as { input?: string }).input; if (typeof input === "string") { entry.block.partialJson = input; diff --git a/packages/ai/test/openai-codex-stream.test.ts b/packages/ai/test/openai-codex-stream.test.ts index cfdd134ff..6de9e99d6 100644 --- a/packages/ai/test/openai-codex-stream.test.ts +++ b/packages/ai/test/openai-codex-stream.test.ts @@ -452,7 +452,12 @@ describe("openai-codex streaming", () => { response: { id: "resp_1", status: "completed", - usage: { input_tokens: 5, output_tokens: 3, total_tokens: 8, input_tokens_details: { cached_tokens: 0 } }, + usage: { + input_tokens: 5, + output_tokens: 3, + total_tokens: 8, + input_tokens_details: { cached_tokens: 0 }, + }, }, }, ]; diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 21e625f79..e3987dd49 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,61 @@ ## [Unreleased] +### Added + +- Added `WebSearchProviderError` class with HTTP status for actionable provider error messages +- `$ARGUMENTS` syntax for custom slash commands as alternative to `$@` for all arguments joined. Aligns with patterns used by Claude, Codex, and OpenCode. Both syntaxes remain fully supported. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin)) +- Configurable double-escape action: choose whether double-escape with empty editor opens `/tree` (default) or `/branch`. Configure via `/settings` or `doubleEscapeAction` in settings.json ([#404](https://github.com/badlogic/pi-mono/issues/404)) +- Vertex AI provider (`google-vertex`): access Gemini models via Google Cloud Vertex AI using Application Default Credentials ([#300](https://github.com/badlogic/pi-mono/pull/300) by [@default-anton](https://github.com/default-anton)) +- Built-in provider overrides in `models.json`: override just `baseUrl` to route a built-in provider through a proxy while keeping all its models, or define `models` to fully replace the provider ([#406](https://github.com/badlogic/pi-mono/pull/406) by [@yevhen](https://github.com/yevhen)) +- Automatic image resizing: images larger than 2000x2000 are resized for better model compatibility. Original dimensions are injected into the prompt. Controlled via `/settings` or `images.autoResize` in settings.json. ([#402](https://github.com/badlogic/pi-mono/pull/402) by [@mitsuhiko](https://github.com/mitsuhiko)) +- Alt+Enter keybind to queue follow-up messages while agent is streaming +- `Theme` and `ThemeColor` types now exported for hooks using `ctx.ui.custom()` +- Terminal window title now displays "pi - dirname" to identify which project session you're in ([#407](https://github.com/badlogic/pi-mono/pull/407) by [@kaofelix](https://github.com/kaofelix)) + +### Changed + +- Changed `isAutoresearchShCommand()` to use proper command-line argument parsing instead of regex, improving accuracy for complex shell invocations +- Changed autoresearch initialization prompt to display collected tradeoff metrics in the setup summary +- Changed `command-initialize.md` template to include guidance on preflight requirements, comparability invariants, and marking measurement-critical files as off-limits +- Changed `command-initialize.md` to instruct users to write or update `autoresearch.program.md` with durable heuristics and repo-specific strategy +- Changed autoresearch resume guidance to emphasize continuing on the current protected branch rather than switching branches +- Changed autoresearch prompt to clarify that `autoresearch.md` holds durable conclusions while `autoresearch.ideas.md` is the scratch backlog +- Changed autoresearch prompt guidance to require stable measurement harness and fixed benchmark inputs unless intentionally starting a new segment +- Changed autoresearch prompt to recommend keeping equal or near-equal results when they materially simplify implementation +- Changed `init_experiment` to reset pending run state (checks, duration, ASI, artifact directory) when initializing a new segment +- Changed `log_experiment` to set `autoResumeArmed` flag after successfully logging a run to enable auto-resume on next agent turn +- Changed `run_experiment` to set `autoResumeArmed` flag and update dashboard after completing a run +- Changed auto-resume logic to only prompt when a new pending run exists or when `autoResumeArmed` is explicitly set, preventing duplicate prompts +- Changed path normalization in contract validation to use `path.posix.normalize()` for consistent path handling +- Extended extension `registerProvider()` typing with OAuth provider support and source-aware registration metadata. +- **Slash commands and hook commands now work during streaming**: Previously, using a slash command or hook command while the agent was streaming would crash with "Agent is already processing". Now: + - Hook commands execute immediately (they manage their own LLM interaction via `pi.sendMessage()`) + - File-based slash commands are expanded and queued via steer/followUp + - `steer()` and `followUp()` now expand file-based slash commands and error on hook commands (hook commands cannot be queued) + - `prompt()` accepts new `streamingBehavior` option (`"steer"` or `"followUp"`) to specify queueing behavior during streaming + - RPC `prompt` command now accepts optional `streamingBehavior` field + ([#420](https://github.com/badlogic/pi-mono/issues/420)) +- Editor component now uses word wrapping instead of character-level wrapping for better readability ([#382](https://github.com/badlogic/pi-mono/pull/382) by [@nickseelert](https://github.com/nickseelert)) + +### Fixed + +- Fixed boundary duplication warnings to always display when replacement lines match the next surviving line, even when auto-correction is disabled +- Fixed secondary metrics validation to properly reject missing configured metrics and new metrics without force flag +- Fixed ASI data cloning to prevent prototype pollution attacks by filtering reserved property names +- Fixed CLI `--api-key` handling for deferred model resolution by applying runtime API key overrides after extension model selection. +- Fixed extension provider registration cleanup to remove stale source-scoped custom API/OAuth providers across extension reloads. +- `--list-models` no longer shows Google Vertex AI models without explicit authentication configured +- JPEG/GIF/WebP images not displaying in terminals using Kitty graphics protocol (Kitty, Ghostty, WezTerm). The protocol requires PNG format, so non-PNG images are now converted before display. +- Version check URL typo preventing update notifications from working ([#423](https://github.com/badlogic/pi-mono/pull/423) by [@skuridin](https://github.com/skuridin)) +- Large images exceeding Anthropic's 5MB limit now retry with progressive quality/size reduction ([#424](https://github.com/badlogic/pi-mono/pull/424) by [@mitsuhiko](https://github.com/mitsuhiko)) +- Slash command argument substitution now processes positional arguments (`$1`, `$2`, etc.) before all-arguments (`$@`, `$ARGUMENTS`) to prevent recursive substitution when argument values contain dollar-digit patterns like `$100`. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin)) +- Edit tool diff not displaying in TUI due to race condition between async preview computation and tool execution +- `/model` selector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used. +- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored ([#411](https://github.com/badlogic/pi-mono/pull/411) by [@nathyong](https://github.com/nathyong)) +- `AgentSession.prompt()` now throws if called while the agent is already streaming, preventing race conditions. Use `steer()` or `followUp()` to queue messages during streaming. +- Ctrl+C now works like Escape in selector components, so mashing Ctrl+C will eventually close the program ([#400](https://github.com/badlogic/pi-mono/pull/400) by [@mitsuhiko](https://github.com/mitsuhiko)) + ## [15.13.1] - 2026-06-15 ### Added @@ -4181,19 +4236,6 @@ ### Changed -- Changed `isAutoresearchShCommand()` to use proper command-line argument parsing instead of regex, improving accuracy for complex shell invocations -- Changed autoresearch initialization prompt to display collected tradeoff metrics in the setup summary -- Changed `command-initialize.md` template to include guidance on preflight requirements, comparability invariants, and marking measurement-critical files as off-limits -- Changed `command-initialize.md` to instruct users to write or update `autoresearch.program.md` with durable heuristics and repo-specific strategy -- Changed autoresearch resume guidance to emphasize continuing on the current protected branch rather than switching branches -- Changed autoresearch prompt to clarify that `autoresearch.md` holds durable conclusions while `autoresearch.ideas.md` is the scratch backlog -- Changed autoresearch prompt guidance to require stable measurement harness and fixed benchmark inputs unless intentionally starting a new segment -- Changed autoresearch prompt to recommend keeping equal or near-equal results when they materially simplify implementation -- Changed `init_experiment` to reset pending run state (checks, duration, ASI, artifact directory) when initializing a new segment -- Changed `log_experiment` to set `autoResumeArmed` flag after successfully logging a run to enable auto-resume on next agent turn -- Changed `run_experiment` to set `autoResumeArmed` flag and update dashboard after completing a run -- Changed auto-resume logic to only prompt when a new pending run exists or when `autoResumeArmed` is explicitly set, preventing duplicate prompts -- Changed path normalization in contract validation to use `path.posix.normalize()` for consistent path handling - Changed autoresearch initialization to collect and validate benchmark command, metric definition, scope paths, off-limits list, and constraints before `init_experiment` - Changed `init_experiment` to require exact benchmark command, metric definition, scope, off-limits, and constraints matching collected contract - Changed `log_experiment` to record run number, benchmark command, scope paths, off-limits list, constraints, and segment fingerprint with each result @@ -4243,9 +4285,6 @@ ### Fixed -- Fixed boundary duplication warnings to always display when replacement lines match the next surviving line, even when auto-correction is disabled -- Fixed secondary metrics validation to properly reject missing configured metrics and new metrics without force flag -- Fixed ASI data cloning to prevent prototype pollution attacks by filtering reserved property names - Fixed autoresearch resume to detect and recover pending run artifacts that were left unlogged from previous sessions - Fixed dashboard overlay to display when running experiment even with zero completed results - Fixed tab character rendering in dashboard command display and tool output summaries @@ -5861,15 +5900,12 @@ ### Changed - Improved welcome screen responsiveness to dynamically show or hide the right column based on available terminal width -- Extended extension `registerProvider()` typing with OAuth provider support and source-aware registration metadata. ### Fixed - Fixed welcome screen layout to gracefully handle small terminal widths and prevent rendering errors on narrow displays - Fixed welcome screen title truncation to prevent overflow when content exceeds available width - Fixed deferred `--model` resolution so extension-provided models are matched before fallback selection and unresolved explicit patterns no longer silently fallback. -- Fixed CLI `--api-key` handling for deferred model resolution by applying runtime API key overrides after extension model selection. -- Fixed extension provider registration cleanup to remove stale source-scoped custom API/OAuth providers across extension reloads. ## [12.5.1] - 2026-02-15 @@ -8730,7 +8766,6 @@ - Added `git.enabled` setting to enable/disable the structured git tool - Added `offset` and `limit` parameters to Output tool for paginated reading of large outputs - Added provider fallback chain for web search that tries all configured providers before failing -- Added `WebSearchProviderError` class with HTTP status for actionable provider error messages - Added bash interceptor rule to block git commands when structured git tool is enabled - Added validation requiring `message` parameter for git commit operations (prevents interactive editor) - Added output ID hints in multi-agent Task results pointing to Output tool for full logs @@ -10198,43 +10233,14 @@ pi --extension ./safety.ts -e ./todo.ts ## [0.32.3] - 2026-01-03 -### Fixed - -- `--list-models` no longer shows Google Vertex AI models without explicit authentication configured -- JPEG/GIF/WebP images not displaying in terminals using Kitty graphics protocol (Kitty, Ghostty, WezTerm). The protocol requires PNG format, so non-PNG images are now converted before display. -- Version check URL typo preventing update notifications from working ([#423](https://github.com/badlogic/pi-mono/pull/423) by [@skuridin](https://github.com/skuridin)) -- Large images exceeding Anthropic's 5MB limit now retry with progressive quality/size reduction ([#424](https://github.com/badlogic/pi-mono/pull/424) by [@mitsuhiko](https://github.com/mitsuhiko)) - ## [0.32.2] - 2026-01-03 -### Added - -- `$ARGUMENTS` syntax for custom slash commands as alternative to `$@` for all arguments joined. Aligns with patterns used by Claude, Codex, and OpenCode. Both syntaxes remain fully supported. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin)) - -### Changed - -- **Slash commands and hook commands now work during streaming**: Previously, using a slash command or hook command while the agent was streaming would crash with "Agent is already processing". Now: - - Hook commands execute immediately (they manage their own LLM interaction via `pi.sendMessage()`) - - File-based slash commands are expanded and queued via steer/followUp - - `steer()` and `followUp()` now expand file-based slash commands and error on hook commands (hook commands cannot be queued) - - `prompt()` accepts new `streamingBehavior` option (`"steer"` or `"followUp"`) to specify queueing behavior during streaming - - RPC `prompt` command now accepts optional `streamingBehavior` field - ([#420](https://github.com/badlogic/pi-mono/issues/420)) - -### Fixed - -- Slash command argument substitution now processes positional arguments (`$1`, `$2`, etc.) before all-arguments (`$@`, `$ARGUMENTS`) to prevent recursive substitution when argument values contain dollar-digit patterns like `$100`. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin)) - ## [0.32.1] - 2026-01-03 ### Added - Shell commands without context contribution: use `!!command` to execute a bash command that is shown in the TUI and saved to session history but excluded from LLM context. Useful for running commands you don't want the AI to see. ([#414](https://github.com/badlogic/pi-mono/issues/414)) -### Fixed - -- Edit tool diff not displaying in TUI due to race condition between async preview computation and tool execution - ## [0.32.0] - 2026-01-03 ### Breaking Changes @@ -10258,27 +10264,6 @@ pi --extension ./safety.ts -e ./todo.ts - `RpcSessionState.queueMode` → `steeringMode` and `followUpMode` - **Settings UI**: "Queue mode" setting split into "Steering mode" and "Follow-up mode" -### Added - -- Configurable double-escape action: choose whether double-escape with empty editor opens `/tree` (default) or `/branch`. Configure via `/settings` or `doubleEscapeAction` in settings.json ([#404](https://github.com/badlogic/pi-mono/issues/404)) -- Vertex AI provider (`google-vertex`): access Gemini models via Google Cloud Vertex AI using Application Default Credentials ([#300](https://github.com/badlogic/pi-mono/pull/300) by [@default-anton](https://github.com/default-anton)) -- Built-in provider overrides in `models.json`: override just `baseUrl` to route a built-in provider through a proxy while keeping all its models, or define `models` to fully replace the provider ([#406](https://github.com/badlogic/pi-mono/pull/406) by [@yevhen](https://github.com/yevhen)) -- Automatic image resizing: images larger than 2000x2000 are resized for better model compatibility. Original dimensions are injected into the prompt. Controlled via `/settings` or `images.autoResize` in settings.json. ([#402](https://github.com/badlogic/pi-mono/pull/402) by [@mitsuhiko](https://github.com/mitsuhiko)) -- Alt+Enter keybind to queue follow-up messages while agent is streaming -- `Theme` and `ThemeColor` types now exported for hooks using `ctx.ui.custom()` -- Terminal window title now displays "pi - dirname" to identify which project session you're in ([#407](https://github.com/badlogic/pi-mono/pull/407) by [@kaofelix](https://github.com/kaofelix)) - -### Changed - -- Editor component now uses word wrapping instead of character-level wrapping for better readability ([#382](https://github.com/badlogic/pi-mono/pull/382) by [@nickseelert](https://github.com/nickseelert)) - -### Fixed - -- `/model` selector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used. -- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored ([#411](https://github.com/badlogic/pi-mono/pull/411) by [@nathyong](https://github.com/nathyong)) -- `AgentSession.prompt()` now throws if called while the agent is already streaming, preventing race conditions. Use `steer()` or `followUp()` to queue messages during streaming. -- Ctrl+C now works like Escape in selector components, so mashing Ctrl+C will eventually close the program ([#400](https://github.com/badlogic/pi-mono/pull/400) by [@mitsuhiko](https://github.com/mitsuhiko)) - ## [0.31.1] - 2026-01-02 ### Fixed diff --git a/packages/collab-web/CHANGELOG.md b/packages/collab-web/CHANGELOG.md index 5272c4fa7..89f49adb1 100644 --- a/packages/collab-web/CHANGELOG.md +++ b/packages/collab-web/CHANGELOG.md @@ -2,6 +2,14 @@ ## [Unreleased] +### Fixed + +- Fixed mobile layout issues where the entire chat flow would overflow horizontally and text was rendered too large on iOS Safari (by setting `text-size-adjust: 100%`) +- Made transcript rows stack vertically on small screens to optimize reading space, and prevented grid track expansion +- Hid non-essential metadata (such as the model name, thinking level, and working directory path) and context gauge tracks on mobile headers to prevent overflow +- Wrapped composer button labels to display icon-only on mobile devices for a more compact and readable layout +- Made the connect screen, ended session card, and notification toasts fully responsive for smaller device viewports + ## [15.13.1] - 2026-06-15 ### Added @@ -20,11 +28,6 @@ - Hid non-essential metadata (such as the model name, thinking level, and working directory path) and context gauge tracks on mobile headers to prevent overflow - Wrapped composer button labels to display icon-only on mobile devices for a more compact and readable layout - Made the connect screen, ended session card, and notification toasts fully responsive for smaller device viewports -- Fixed mobile layout issues where the entire chat flow would overflow horizontally and text was rendered too large on iOS Safari (by setting `text-size-adjust: 100%`) -- Made transcript rows stack vertically on small screens to optimize reading space, and prevented grid track expansion -- Hid non-essential metadata (such as the model name, thinking level, and working directory path) and context gauge tracks on mobile headers to prevent overflow -- Wrapped composer button labels to display icon-only on mobile devices for a more compact and readable layout -- Made the connect screen, ended session card, and notification toasts fully responsive for smaller device viewports ## [15.12.4] - 2026-06-13 diff --git a/packages/hashline/CHANGELOG.md b/packages/hashline/CHANGELOG.md index bb7e1f911..05de23189 100644 --- a/packages/hashline/CHANGELOG.md +++ b/packages/hashline/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +### Fixed + +- Auto-repaired one-sided multi-line boundary echoes by dropping delimiter-neutral duplicated boundary lines and emitted a boundary-echo warning +- Parser now treats a leading `\` on inline payload bodies as the payload delimiter, matching standalone payload rows. +- Restored the warning emitted when escaped indented payload rows (`\\ TEXT`) are accepted as payload delimiters. + ## [15.13.1] - 2026-06-15 ### Breaking Changes @@ -14,10 +20,7 @@ ### Fixed -- Auto-repaired one-sided multi-line boundary echoes by dropping delimiter-neutral duplicated boundary lines and emitted a boundary-echo warning - Normalized cwd-relative hashline paths to forward-slash form on Windows. -- Parser now treats a leading `\` on inline payload bodies as the payload delimiter, matching standalone payload rows. -- Restored the warning emitted when escaped indented payload rows (`\\ TEXT`) are accepted as payload delimiters. ## [15.12.5] - 2026-06-13 diff --git a/packages/natives/CHANGELOG.md b/packages/natives/CHANGELOG.md index c22ad267c..8d7f11766 100644 --- a/packages/natives/CHANGELOG.md +++ b/packages/natives/CHANGELOG.md @@ -2,19 +2,22 @@ ## [Unreleased] +### Fixed + +- Fixed shipped Linux native addons failing to load with `version 'GLIBC_2.39' not found` on distributions older than Ubuntu 24.04. After native builds moved onto the Ubuntu 24.04 (glibc 2.39) self-hosted runner, the x64 addon was a plain host build that linked the runner's glibc and the arm64 cross-build floated up to GLIBC_2.30; the `linux-x64` (baseline + modern) and `linux-arm64` addons are now built through `cargo-zigbuild` against a pinned glibc 2.17 floor, restoring portability to any glibc ≥ 2.17 (CentOS 7 / Ubuntu 14.04 era). +- Fixed Linux native builds hard-failing when `RUSTC_WRAPPER=sccache` points at an unavailable shared cache backend. The native build script now retries the `napi` build once without the sccache wrapper after a cache-storage startup failure, so install smoke tests and local fallback builds can proceed while preserving the cached fast path when the backend is healthy. +- Fixed shell cancellation cleanup failing to reap child processes inside containers whose guest kernel was built without `CONFIG_PROC_CHILDREN` (e.g. some Kata/microVM guests): the Linux descendant walk relied solely on `/proc//task//children`, which does not exist there, so `children()` / `live_descendants()` returned empty and termination waves never reached the children. It now falls back to scanning `/proc` and grouping by parent pid (the primitive the macOS path already uses) when no `children` file is readable, keeping the cheap per-task fast path on kernels that support it. + ## [15.13.1] - 2026-06-15 ### Fixed -- Fixed shipped Linux native addons failing to load with `version 'GLIBC_2.39' not found` on distributions older than Ubuntu 24.04. After native builds moved onto the Ubuntu 24.04 (glibc 2.39) self-hosted runner, the x64 addon was a plain host build that linked the runner's glibc and the arm64 cross-build floated up to GLIBC_2.30; the `linux-x64` (baseline + modern) and `linux-arm64` addons are now built through `cargo-zigbuild` against a pinned glibc 2.17 floor, restoring portability to any glibc ≥ 2.17 (CentOS 7 / Ubuntu 14.04 era). - Fixed `pi-natives` deadlocking at addon load (`dlopen` hang) on some Linux hosts. The load-time Tokio runtime install added in 15.12.6 ran inside `#[module_init]`, which executes while the dynamic-loader lock is held; building the multi-thread runtime there eagerly spawns worker threads, and a fresh worker blocking to acquire the loader lock the init thread still owns deadlocks the whole load (every native consumer hangs at startup). The runtime is now built from an exported `__ompInstallTokioRuntime` that the JS loader calls once, immediately after `dlopen` returns and before any async native runs; `#[module_init]` only installs the crash handler. napi-rs materializes its runtime lazily on first async use (`RT` is a `LazyLock`) and `create_custom_tokio_runtime` only records the runtime, so the post-load install is still adopted — preserving the Windows commit-limit thread probing/back-off from 15.12.6 without spawning under the loader lock. - Fixed `blockRangeAt` (and thus the edit tool's `replace block` / `delete block` / `insert after block` ops) returning no block for a construct whose opening line follows a blank line — most visibly in Swift, where `replace block` on a SwiftUI `var body: some View {` (or any statement/declaration after a blank line) failed with "could not resolve a syntactic block… (unsupported language, blank/closer line, or parse error)". tree-sitter-swift inserts a zero-width separator node at the start of a statement that follows a blank line; the resolver queried the first content column with a zero-width point range, which `ts_node_named_descendant_for_point_range` absorbs into that invisible node and bubbles back up to the enclosing body (or the file root), so no block was found. The query now spans the first content character (a one-column-wide range) so it skips zero-width nodes and descends into the node that actually begins on the line. - Fixed native shell execution reporting `unterminated here document sequence` for a multi-command line that contains a here-doc with a quoted or escaped delimiter (`<<'TAG'`, `<<"TAG"`, `<<\TAG`) followed by another command (e.g. a `sqlite3 … <<'SQL' … SQL` query followed by an `echo`/second command). The output minimizer's segmented-chain runner rebuilds each `&&`/`;`/newline segment from the brush-parser AST via `pipeline.to_string()`, and that `Display` impl re-emits a quoted/escaped here-doc's *closing* delimiter with its quotes intact (`'SQL'` instead of the required bare `SQL`) — an invalid close tag that the re-run segment never matches. Here-doc-bearing pipelines are now ineligible for segmentation, so the command runs whole via the unsegmented path (where the executor parses it correctly); a lone here-doc was unaffected because it was never segmented. - Fixed native addon loading leaving stale `~/.omp/natives/` cache directories behind after updates; successful loads now remove older version directories best-effort. - Fixed Linux source-built native addons hanging during package import by keeping the Windows-only Tokio worker probe out of non-Windows module initialization ([#2553](https://github.com/can1357/oh-my-pi/issues/2553)). - Fixed `pi-iso` Windows clippy failures in symlink placeholder metadata, block-clone path resolution, and readonly cleanup handling ([#2379](https://github.com/can1357/oh-my-pi/pull/2379) by [@oldschoola](https://github.com/oldschoola)). -- Fixed Linux native builds hard-failing when `RUSTC_WRAPPER=sccache` points at an unavailable shared cache backend. The native build script now retries the `napi` build once without the sccache wrapper after a cache-storage startup failure, so install smoke tests and local fallback builds can proceed while preserving the cached fast path when the backend is healthy. -- Fixed shell cancellation cleanup failing to reap child processes inside containers whose guest kernel was built without `CONFIG_PROC_CHILDREN` (e.g. some Kata/microVM guests): the Linux descendant walk relied solely on `/proc//task//children`, which does not exist there, so `children()` / `live_descendants()` returned empty and termination waves never reached the children. It now falls back to scanning `/proc` and grouping by parent pid (the primitive the macOS path already uses) when no `children` file is readable, keeping the cheap per-task fast path on kernels that support it. ## [15.12.6] - 2026-06-14 diff --git a/packages/snapcompact/CHANGELOG.md b/packages/snapcompact/CHANGELOG.md index 5384845d2..c5dd79f47 100644 --- a/packages/snapcompact/CHANGELOG.md +++ b/packages/snapcompact/CHANGELOG.md @@ -2,12 +2,15 @@ ## [Unreleased] +### Added + +- Added `openai-codex` to first-party provider image budgets so ChatGPT Plus/Pro Codex sessions use the same 200-image request cap as OpenAI API sessions instead of the unknown-provider floor. + ## [15.13.1] - 2026-06-15 ### Added - Added two spacing-tuned frame variants to `SHAPE_VARIANTS`: `8on22-bw` (8x13 glyphs on a 22px pitch — extra line spacing) and `11on16-bw` (8x13 glyphs on an 11px advance — extra letter spacing). Both pin the indexed `stretch: false` path, so the native renderer draws natural-size glyphs on the padded cell box (the Rust path already advances by `cellWidth` and the new variants validate horizontal padding) -- Added `openai-codex` to first-party provider image budgets so ChatGPT Plus/Pro Codex sessions use the same 200-image request cap as OpenAI API sessions instead of the unknown-provider floor. ### Changed diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index f4df82d13..fafc013bb 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -2,23 +2,29 @@ ## [Unreleased] -## [15.13.1] - 2026-06-15 - ### Added - Added profile-aware directory helpers and isolated profile state roots, while keeping the install ID shared across profiles. - Added a named-profile API to the `dirs` module — `setProfile()`, `getActiveProfile()`, `getProfileRootDir()`, and `normalizeProfileName()` — plus `resolveProfileEnv()`, which selects the active profile from `OMP_PROFILE` (canonical; takes precedence) then `PI_PROFILE` (legacy fallback, consulted only when `OMP_PROFILE` is unset). -- Added support for a runtime `overrides` map in `RuntimeInstallSpec`, which is now written into generated runtime `package.json` manifests to force dependency pins (including transitive ones) across the runtime tree -- Added a lightweight loop-phase breadcrumb stack (`pushLoopPhase`/`popLoopPhase`/`currentLoopPhase`, plus `takeRecentLoopPhase` which returns the live phase or the most recently popped one and clears it) so the TUI event-loop watchdog can attribute a main-thread block to the phase that caused it — including a synchronous phase already popped before the watchdog's delayed tick runs ([#2485](https://github.com/can1357/oh-my-pi/issues/2485)) -- Added `FetchWithRetryOptions.timeout` (forwarded to the underlying `fetch` call). `false` disables Bun's native ~300s pre-response timeout; a positive number overrides the ceiling. Bare browser/Node fetch ignores it ([#2422](https://github.com/can1357/oh-my-pi/issues/2422)) - Added the side-effect-free `@oh-my-pi/pi-utils/worker-host` module (`declareWorkerHostEntry()` / `workerHostEntry()`), extracted from `env` (still re-exported there) so worker spawn sites can resolve the self-dispatching CLI host entry without importing `env`'s side-effecting module graph. ### Fixed - Fixed profile directory isolation when a profile's agent `.env` customizes directory roots: directory-affecting keys (`XDG_DATA_HOME`/`XDG_STATE_HOME`/`XDG_CACHE_HOME`, and a default-mode `PI_CODING_AGENT_DIR`) are now honored. The `env` loader rebuilds the `dirs` resolver after applying `.env` files (`refreshDirsFromEnv()`), so a profile `.env` that points XDG roots elsewhere no longer leaks state into the home-based config dir. -- Made `TempDir` cleanup retry transient Windows `EBUSY`/`EPERM`/`ENOTEMPTY` removal failures so tests are less likely to fail when deleting just-used temp directories. - Fixed `installRuntimeModuleResolver()` to keep bare requests from runtime-cache modules inside that registered runtime before falling back to host/workspace packages. +## [15.13.1] - 2026-06-15 + +### Added + +- Added support for a runtime `overrides` map in `RuntimeInstallSpec`, which is now written into generated runtime `package.json` manifests to force dependency pins (including transitive ones) across the runtime tree +- Added a lightweight loop-phase breadcrumb stack (`pushLoopPhase`/`popLoopPhase`/`currentLoopPhase`, plus `takeRecentLoopPhase` which returns the live phase or the most recently popped one and clears it) so the TUI event-loop watchdog can attribute a main-thread block to the phase that caused it — including a synchronous phase already popped before the watchdog's delayed tick runs ([#2485](https://github.com/can1357/oh-my-pi/issues/2485)) +- Added `FetchWithRetryOptions.timeout` (forwarded to the underlying `fetch` call). `false` disables Bun's native ~300s pre-response timeout; a positive number overrides the ceiling. Bare browser/Node fetch ignores it ([#2422](https://github.com/can1357/oh-my-pi/issues/2422)) + +### Fixed + +- Made `TempDir` cleanup retry transient Windows `EBUSY`/`EPERM`/`ENOTEMPTY` removal failures so tests are less likely to fail when deleting just-used temp directories. + ## [15.12.4] - 2026-06-13 ### Fixed