diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index b79be4c32..1487d19ea 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -10,6 +10,7 @@ - Fixed provider gateway `quota insufficient` / `额度不足` errors being classified as generic 403 failures instead of usage-limit errors. - Aligned the `openai-responses` strict-mode gate and resolved strict-support detection with `openai-completions` so buildModel-created OpenAI-compatible Responses models (for example DeepSeek-family endpoints) preserve an author-set `tool.strict === false` on the wire unless `compat.supportsStrictMode` is explicitly `false` ([#4527](https://github.com/can1357/oh-my-pi/issues/4527)). - Fixed custom `openai-codex-responses` providers with opaque proxy/API keys failing before dispatch when no ChatGPT `chatgpt_account_id` claim exists; Codex requests now omit `chatgpt-account-id` when it cannot be derived. ([#4526](https://github.com/can1357/oh-my-pi/issues/4526)) +- Fixed OpenAI Responses/Codex orchestration token accounting so provider-side orchestration tokens stay billable and included in totals without appearing as ordinary uncached prompt input. ([#4469](https://github.com/can1357/oh-my-pi/issues/4469)) ## [16.3.6] - 2026-07-04 @@ -32,7 +33,6 @@ ### Fixed - Fixed tool-call validation to strip stray trailing line terminators on schema-matching enum values and on well-known identifier fields (`path`, `paths`, `file`, `file_path`, `url`, `uri`, `title`, `label`) before dispatch, keeping ordinary trailing spaces and content-carrying fields (`content`, `input`, `code`, `command`, etc.) intact ([#4461](https://github.com/can1357/oh-my-pi/issues/4461)). -- Fixed OpenAI Responses/Codex orchestration token accounting so provider-side orchestration tokens stay billable and included in totals without appearing as ordinary uncached prompt input. ([#4469](https://github.com/can1357/oh-my-pi/issues/4469)) ## [16.3.4] - 2026-07-03 diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index b89477d62..fbcbc74d6 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -14,11 +14,20 @@ - Fixed legacy Pi extension reloads on POSIX so `loadLegacyPiModule` imports the entry through a cache-busting filesystem path, refreshes load-time graph hooks when reloads add new modules, and threads the current load's `?mtime` tag through the extension source graph — relative `./helper.ts` siblings, `#alias/*` package-imports, extension-local bare dependency entries, and their relative children all rekey per reload, so same-process re-imports pick up edits across the whole graph. ([#4565](https://github.com/can1357/oh-my-pi/issues/4565)) - Fixed bash tool pipeline execution preserving stale upstream output when the final stage was a stripped `head`/`tail` limiter; the tool now runs the command as written so `seq 1 5 | head -n2` returns only `1` and `2`. ([#4562](https://github.com/can1357/oh-my-pi/issues/4562)) - Fixed the status-line token-rate segment rendering as `/s`, which Ghostty auto-detected as a hyperlink on Ctrl+hover. ([#4541](https://github.com/can1357/oh-my-pi/issues/4541)) -- Fixed xAI `web_search` sending unsupported request-level `search_parameters` to the Responses Agent Tools API; result counts are now enforced locally without adding deprecated live-search date bounds. ([#4537](https://github.com/can1357/oh-my-pi/issues/4537)) - Fixed xAI `web_search` to use `xai-oauth` credentials before falling back to `xai` API-key credentials, and to treat xAI OAuth as available in provider selection. ([#4536](https://github.com/can1357/oh-my-pi/issues/4536)) - Fixed token-usage badges disappearing on session resume for empty automated assistant turns; live and resume paths now share the same billed-usage predicate so a turn that consumed tokens keeps its badge on both surfaces, and only genuinely zero-usage turns suppress the row. ([#4532](https://github.com/can1357/oh-my-pi/issues/4532)) - Fixed `/model` search escaping the active provider tab and silently letting a same-named model from a different provider be persisted as the default role. `#filterModels` no longer auto-switches to the `ALL` tab when a query is typed inside a provider tab; results and Enter stay scoped to the selected provider. Empty results now name the active tab and point at `ALL` as the explicit escape. ([#4522](https://github.com/can1357/oh-my-pi/issues/4522)) - Fixed Esc no longer stopping TTS audio playback once the assistant reply had finished streaming; queued Kokoro (and remote) audio kept reading past the response's end because `vocalizer.clear()` only fired from the aborted-stream cascade. Esc now silences a still-audible vocalizer as its first action (ahead of the `tree`/`branch` double-Esc gesture); a second Esc keeps its previous behavior. ([#4521](https://github.com/can1357/oh-my-pi/issues/4521)) +- Fixed grep/bash tool guidance so agents use Rust-style `foo|bar` patterns or `grep -E` instead of GNU BRE `\|` assumptions, and avoid bash when exact pipeline semantics are required. ([#4540](https://github.com/can1357/oh-my-pi/issues/4540)) +- Fixed xAI `web_search` sending unsupported request-level `search_parameters` to the Responses Agent Tools API; result counts are now enforced locally without adding deprecated live-search date bounds. ([#4537](https://github.com/can1357/oh-my-pi/issues/4537)) +- Fixed tool-call renderers crashing the TUI when providers send array/object `path` arguments before schema validation can report the invalid call back to the model. ([#4525](https://github.com/can1357/oh-my-pi/issues/4525)) +- Fixed `glob path:"/"` and `path:"//"` returning ordinary empty results by rejecting slash-only root searches with the documented error. ([#4516](https://github.com/can1357/oh-my-pi/issues/4516)) +- Fixed `omp read` hanging on PDFs whose inline-image binary payload contains delimiter-looking bytes, while preserving text and table extraction after the image. ([#4512](https://github.com/can1357/oh-my-pi/issues/4512)) +- Fixed `pi/` model resolution crashing on YAML list-valued `modelRoles` entries by normalizing string arrays the same way as comma-separated strings. ([#4492](https://github.com/can1357/oh-my-pi/issues/4492)) +- Fixed the hidden workflowz eval notice describing eval-spawned agent recursion as a fixed depth of 3 instead of the configurable `task.maxRecursionDepth` default of 2 with an eval hard cap of 3. ([#4493](https://github.com/can1357/oh-my-pi/issues/4493)) +- Fixed the `snapcompact.shape` settings UI to expose `silver16-bw` and updated snapcompact renderability warnings to report unsupported glyphs instead of a misleading non-ASCII rate. ([#4486](https://github.com/can1357/oh-my-pi/issues/4486)) +- Fixed session/status usage totals to preserve provider-reported orchestration tokens separately from ordinary input and cache-hit buckets. ([#4469](https://github.com/can1357/oh-my-pi/issues/4469)) +- Fixed published `.d.ts` being unconsumable under `moduleResolution: "node16" | "nodenext"`: the declaration emit ran under Bundler resolution and left relative re-exports extensionless (`export * from "./sdk"`), so a NodeNext consumer failed to resolve the package root (`TS2834`/`TS2305`). The publish pipeline now rewrites emitted relative specifiers to explicit `.js` extensions across every package's `dist/types`. ## [16.3.6] - 2026-07-04 @@ -30,23 +39,13 @@ ### Fixed -- Fixed grep/bash tool guidance so agents use Rust-style `foo|bar` patterns or `grep -E` instead of GNU BRE `\|` assumptions, and avoid bash when exact pipeline semantics are required. ([#4540](https://github.com/can1357/oh-my-pi/issues/4540)) -- Fixed xAI `web_search` sending unsupported request-level `search_parameters` to the Responses Agent Tools API; result counts are now enforced locally without adding deprecated live-search date bounds. ([#4537](https://github.com/can1357/oh-my-pi/issues/4537)) - -- Fixed tool-call renderers crashing the TUI when providers send array/object `path` arguments before schema validation can report the invalid call back to the model. ([#4525](https://github.com/can1357/oh-my-pi/issues/4525)) -- Fixed `glob path:"/"` and `path:"//"` returning ordinary empty results by rejecting slash-only root searches with the documented error. ([#4516](https://github.com/can1357/oh-my-pi/issues/4516)) - - Fixed raw `read` ranges not contributing to edit seen-line provenance, so re-reading an anchor range with `:raw` now unblocks hashline edits without adding non-raw line prefixes. -- Fixed `omp read` hanging on PDFs whose inline-image binary payload contains delimiter-looking bytes, while preserving text and table extraction after the image. ([#4512](https://github.com/can1357/oh-my-pi/issues/4512)) - Fixed replan-driven session title refresh updating the statusline but not the terminal window title: terminal-title updates now fire from the session-name-changed listener, so every `setSessionName` path (first-input titling, `/rename`, plan seeding, replan refresh) sets the OSC title consistently. - Fixed user-interrupt aborts rendering the persisted `Interrupted by user` label in assistant transcripts; replay and live views now suppress that redundant line again while preserving generic/custom abort labels. - Fixed streamed assistant text and thinking disappearing from terminal scrollback while a long turn ran, and Ctrl+O-expanded tool results showing up half-rendered above the viewport: everything that scrolls off the window now reaches native scrollback (exact bytes for settled content, a frozen what-you-saw snapshot for still-running blocks, repaired at most once when the block finalizes). Streaming eval/bash boxes no longer spray duplicated stale copies; user-initiated `!`/`$` execution blocks report a finalization contract. - Fixed turn-ending provider errors rendering with a doubled blank gap above the `Error:` block (caller and error block each added a spacer). - Fixed the write tool renderer crashing when persisted runtime content is a truthy non-string value; rendering now coerces display content before Windows CR normalization. ([#4495](https://github.com/can1357/oh-my-pi/issues/4495)) - Fixed cmux-backend `browser({action:"run"})` calls crashing the entire process with an unhandled rejection when the tab was released mid-run (e.g. a sibling subagent calling `browser({action:"close", all:true})` or a session-scoped tab reap). `runInTabWithSnapshot` in `tab-supervisor.ts` creates a `Promise.withResolvers()` triple so `releaseTab` can signal in-flight runs, but the cmux branch used to await `runCmuxCode(...)` directly and never awaited the local promise. When `releaseTab` rejected that orphaned promise ("Tab ... was closed"), Bun surfaced it as an unhandled rejection and the top-level handler tore the whole session down, killing every other tab and subagent sharing it. Both backends now await the same `promise` (so `pending.reject` always has an attached handler AND the caller sees `Tab "..." was closed` immediately instead of blocking to the run's timeout), and a new `pending.closeAc` is composed into the cmux run's abort signal so `wait(...)`, in-flight cmux socket calls, and the facade proxies unwind promptly when the tab is closed rather than leaking to their own timeout ([#4499](https://github.com/can1357/oh-my-pi/issues/4499)). -- Fixed `pi/` model resolution crashing on YAML list-valued `modelRoles` entries by normalizing string arrays the same way as comma-separated strings. ([#4492](https://github.com/can1357/oh-my-pi/issues/4492)) -- Fixed the hidden workflowz eval notice describing eval-spawned agent recursion as a fixed depth of 3 instead of the configurable `task.maxRecursionDepth` default of 2 with an eval hard cap of 3. ([#4493](https://github.com/can1357/oh-my-pi/issues/4493)) -- Fixed the `snapcompact.shape` settings UI to expose `silver16-bw` and updated snapcompact renderability warnings to report unsupported glyphs instead of a misleading non-ASCII rate. ([#4486](https://github.com/can1357/oh-my-pi/issues/4486)) ## [16.3.5] - 2026-07-04 @@ -65,8 +64,6 @@ - Fixed ACP `terminal/create` sending the bash tool's full shell line in `command` with no `args`, which broke spec-conformant clients that spawn `command`+`args` directly (no implicit shell) — any command containing a space, pipe, `&&`, redirect, or `$(...)` failed with `ENOENT` and the agent silently degraded to read-only tools. The bash tool now wraps the shell line before calling `clientBridge.createTerminal`, reusing the same shell binary + args the local `bash-executor` resolves via `settings.getShellConfig()` (Git Bash / `bash.exe` on Windows, `$SHELL` with `sh` fallback on POSIX) so bash semantics — `$VAR`, `$(...)`, `source`, POSIX quoting, `-l` — are preserved on both platforms. ([#4333](https://github.com/can1357/oh-my-pi/issues/4333)) - Fixed inference worker subprocesses (TTS, STT, tiny-model, mnemopi embeddings) discarding stderr, which left every unexpected exit — most visibly the local Kokoro TTS worker's recurring `exit code 7` crash loop — undiagnosable from the parent's logs. `createWorkerSubprocess` now pipes stderr without starting a live read while the worker is idle, then drains the stream after `onExit`, emits captured lines to `logger.debug` under an ` stderr` message, and keeps the last 16 KiB in a bounded ring that gets appended to the `Error` surfaced through `onError`. The exit surface is synchronized with the post-exit drain via `SpawnedSubprocess.stderrDrained`, so the full native trace shows up on the `tts: worker error` line without reintroducing event-loop liveness from unref'd workers. ([#4324](https://github.com/can1357/oh-my-pi/issues/4324)) - Fixed Windows session tail loss after atomic compaction rewrites by fencing append writers during full-file replacement and gating the atomic publish on a `commitGuard` that the storage backend checks synchronously before rename, so a concurrent `flushSync` (Ctrl+C / session-exit) is not overwritten by the stale body serialized before it ran. Covers post-compaction prompts, tool results, title changes, and exit diagnostics on the current JSONL path ([#4338](https://github.com/can1357/oh-my-pi/issues/4338)). -- Fixed session/status usage totals to preserve provider-reported orchestration tokens separately from ordinary input and cache-hit buckets. ([#4469](https://github.com/can1357/oh-my-pi/issues/4469)) -- Fixed published `.d.ts` being unconsumable under `moduleResolution: "node16" | "nodenext"`: the declaration emit ran under Bundler resolution and left relative re-exports extensionless (`export * from "./sdk"`), so a NodeNext consumer failed to resolve the package root (`TS2834`/`TS2305`). The publish pipeline now rewrites emitted relative specifiers to explicit `.js` extensions across every package's `dist/types`. ## [16.3.4] - 2026-07-03