chore: update changelogs

This commit is contained in:
can1357
2026-06-30 06:44:42 +02:00
parent 38d40122f9
commit b704ac698a
9 changed files with 42 additions and 36 deletions
+11 -16
View File
@@ -4,28 +4,23 @@
### Added
- Added service tier support for Google Gemini and Vertex AI
- Introduced `ServiceTierByFamily` to allow model-specific service tier configurations
- Added Google Vertex AI Interactions API support, sharing one Interactions transport across the direct Google and Vertex providers. Gemini 3+ models use the Interactions API by default — on the official `generativelanguage` endpoint for direct Google, and under ADC/bearer auth for Vertex — with automatic fallback to `:streamGenerateContent` when the model/endpoint can't serve Interactions. Pass `useInteractionsApi: false` to force generateContent.
- Added support for an explicit Vertex bearer access token via `GOOGLE_CLOUD_ACCESS_TOKEN` / `CLOUDSDK_AUTH_ACCESS_TOKEN`, so `gcloud auth print-access-token` can drive Vertex without a full `application-default login`.
- Added service tier support for Google Gemini and Vertex AI, including model-specific service tier configurations via ServiceTierByFamily.
- Added Google Vertex AI Interactions API support for Gemini 3+ models by default, with automatic fallback to :streamGenerateContent and a useInteractionsApi: false option to force standard generation.
- Added support for explicit Vertex bearer access tokens via GOOGLE_CLOUD_ACCESS_TOKEN or CLOUDSDK_AUTH_ACCESS_TOKEN environment variables.
### Changed
- Updated service tier logic to avoid global scopes in favor of per-provider configurations
- Refactored priority request billing to better align with specific provider capabilities
- Updated internal `coerceServiceTierByFamily` helper to facilitate migration from legacy settings
- Changed API-key resolution precedence so an explicit environment variable (e.g. `GEMINI_API_KEY`) overrides a stored/broker-migrated static API key; a deliberate OAuth login still takes precedence over the env var.
- Updated service tier logic to use per-provider configurations instead of global scopes.
- Refactored priority request billing and accounting to better align with specific provider capabilities.
- Updated API key resolution precedence so explicit environment variables (e.g., GEMINI_API_KEY) override stored or broker-migrated static API keys, while deliberate OAuth logins still take highest precedence.
### Fixed
- Improved Vertex AI reliability by automatically falling back to global endpoints on 404 errors
- Fixed safety setting application for Google Vertex AI models
- Ensured Gemini service tier is correctly passed through to the API
- Corrected priority request accounting for supported providers
- Fixed Kimi Code's Anthropic-compatible request path to keep thinking enabled and downgrade forced tool choice for Kimi K2.7 Code title generation. ([#3852](https://github.com/can1357/oh-my-pi/issues/3852))
- Healed leaked reasoning fences (` ```thinking ` / `<think>`) live for every provider via a central stream wrapper, splitting them into structured thinking blocks during streaming.
- Fixed Codex requests failing with `Unsupported value: 'all_turns' is not supported with this model`: the `reasoning.context: "all_turns"` default is now gated to gpt-5.4+ Codex models. Older ids (`gpt-5.1-codex`, `gpt-5.3-codex`, `gpt-5.3-codex-spark`) omit `context` so the server applies its `current_turn` default; an explicit `all_turns` override is also suppressed on those models, while `current_turn`/`auto` always pass through.
- Improved Vertex AI reliability by automatically falling back to global endpoints on 404 errors.
- Fixed safety setting application for Google Vertex AI models.
- Fixed Kimi Code's Anthropic-compatible request path to keep thinking enabled and downgrade forced tool choice for Kimi K2.7 Code title generation.
- Fixed leaked reasoning fences (such as ```thinking or <think>) across all providers by splitting them into structured thinking blocks during streaming.
- Fixed Codex requests failing with unsupported all_turns errors on older models (gpt-5.1 and gpt-5.3) by gating the reasoning.context: "all_turns" default to gpt-5.4+ models.
## [16.2.6] - 2026-06-29
+2 -2
View File
@@ -4,8 +4,8 @@
### Fixed
- Fixed Kimi K2.7 Code compatibility to avoid disabled thinking and forced tool choice on native Kimi endpoints that require thinking mode. ([#3852](https://github.com/can1357/oh-my-pi/issues/3852))
- Fixed Cerebras `gemma-4-31b` dynamic discovery to mark the model as image-capable so attached images are serialized as OpenAI Chat Completions `image_url` data URIs. ([#3854](https://github.com/can1357/oh-my-pi/issues/3854))
- Fixed compatibility with Kimi K2.7 Code on native endpoints to ensure thinking mode is preserved and tool choice is not forced.
- Fixed Cerebras gemma-4-31b dynamic discovery to correctly identify the model as image-capable, enabling proper serialization of attached images.
## [16.2.6] - 2026-06-29
+5 -7
View File
@@ -2,12 +2,11 @@
## [Unreleased]
### Changed
### Breaking Changes
- Replaced the global `serviceTier` setting with `tier.openai`, `tier.anthropic`, and `tier.google` for granular control
- Updated `/fast` to target the service-tier family of the currently selected model
- Updated subagent and advisor tier configuration to use the new per-family setting structure
- Removed `fastModeScope` setting, as per-family scoping is now natively supported via the `tier.*` settings
- Replaced the global `serviceTier` and `fastModeScope` settings with granular, per-family settings (`tier.openai`, `tier.anthropic`, and `tier.google`) to control service tiers, subagents, advisors, and `/fast` mode targets.
### Changed
- Improved binary file detection and terminal handling to prevent corruption from non-UTF-8 content, and updated file summaries to explicitly note skipped binary files.
- Enhanced context compaction (snapcompact) to resolve shapes contextually based on rendered text content.
@@ -21,8 +20,7 @@
- Improved error reporting for `omp tiny-models download` by displaying the actual worker-side download error.
- Resolved status inconsistencies between `/extensions`, `/mcp list`, and the dashboard, ensuring MCP server states, allowlists/denylists, and configuration files (like `mcp.json`) stay fully synchronized.
- Improved branch-mode task merges to preserve the agent's original commit history (messages and authors) and fixed a bug where merges were rejected due to unrelated dirty changes in the parent checkout.
- Fixed the `Working…` loader staying gone for the rest of a parent turn when a long-running tool (e.g. a `task` subagent) finished inside a transient overlay window (auto-snapcompact, auto-context-full, auto-retry). Those overlays null the working loader on start and the overlay-end handler is the only restorer keyed off the missing loader; if the subagent's `tool_execution_end` lands while the overlay is still active (or its end handler errored before re-arming), the spinner stayed gone until the next turn even though the parent kept streaming. `tool_execution_end` now mirrors the `tool_execution_update` self-heal so the working loader survives a subagent completing inside the overlay window ([#3858](https://github.com/can1357/oh-my-pi/issues/3858)).
- Fixed the working loader disappearing after a subagent (`task`) tool completed while the focused session was still streaming: `tool_execution_end` did not re-arm the loader the way `tool_execution_update` did, so a tool result landing after a transient overlay (auto-compaction / auto-retry) left the UI looking idle ([#3857](https://github.com/can1357/oh-my-pi/issues/3857)).
- Fixed an issue where the `Working...` loader spinner would prematurely disappear or fail to re-arm after a subagent (`task`) tool completed or during transient overlays (such as auto-compaction or auto-retry).
## [16.2.6] - 2026-06-29
@@ -4,6 +4,7 @@ import { scheduler } from "node:timers/promises";
import { Agent } from "@oh-my-pi/pi-agent-core";
import type { ApiKeyResolveContext, AssistantMessage, ToolCall } from "@oh-my-pi/pi-ai";
import { createMockModel } from "@oh-my-pi/pi-ai/providers/mock";
import * as aiStream from "@oh-my-pi/pi-ai/stream";
import { AssistantMessageEventStream } from "@oh-my-pi/pi-ai/utils/event-stream";
import { getBundledModel } from "@oh-my-pi/pi-catalog/models";
import { ModelRegistry } from "@oh-my-pi/pi-coding-agent/config/model-registry";
@@ -54,6 +55,9 @@ describe("AgentSession retry delay cap", () => {
beforeEach(async () => {
tempDir = TempDir.createSync("@pi-retry-cap-");
authStorage = await AuthStorage.create(path.join(tempDir.path(), "testauth.db"));
// A live env var now overrides a stored static api_key; these tests rotate stored Anthropic
// credentials, so neutralize env resolution (ignores every provider's ambient env key).
vi.spyOn(aiStream, "getEnvApiKey").mockReturnValue(undefined);
authStorage.setRuntimeApiKey("anthropic", "anthropic-test-key");
modelRegistry = new ModelRegistry(authStorage, path.join(tempDir.path(), "models.yml"));
});
@@ -1,7 +1,11 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "bun:test";
import { stripVTControlCharacters } from "node:util";
import { resetSettingsForTest, Settings } from "@oh-my-pi/pi-coding-agent/config/settings";
import { setExcludedSearchProviders, setPreferredSearchProvider } from "@oh-my-pi/pi-coding-agent/web/search/provider";
import {
SEARCH_PROVIDER_ORDER,
setExcludedSearchProviders,
setPreferredSearchProvider,
} from "@oh-my-pi/pi-coding-agent/web/search/provider";
import { __resetDirsFromEnvForTests, setAgentDir, TempDir } from "@oh-my-pi/pi-utils";
import { runSearchCommand } from "../../../src/cli/web-search-cli";
@@ -128,17 +132,22 @@ describe("runSearchCommand provider settings", () => {
});
it("treats explicit --provider auto as a one-shot override of the configured preferred provider", async () => {
// Same Tavily preference is configured by `beforeEach`, but no exclusions
// hide Jina here, so the auto chain order (Jina before Tavily) decides.
// Tavily is the configured preference, but `--provider auto` overrides it and walks the
// chain. Restrict eligibility to Jina + Tavily so an ambient broker/OAuth provider
// (gemini, anthropic, codex, perplexity…) can't win on a dev machine; the chain order
// (Jina before Tavily) still decides between the two.
const currentTempDir = tempAgentDir;
if (!currentTempDir) throw new Error("tempAgentDir missing");
// Drive the exclusion through settings too — Settings.init re-applies
// `providers.webSearchExclude`, overwriting a bare setExcludedSearchProviders() call.
const onlyJinaTavily = SEARCH_PROVIDER_ORDER.filter(id => id !== "jina" && id !== "tavily");
resetSettingsForTest();
setPreferredSearchProvider("auto");
setExcludedSearchProviders([]);
setExcludedSearchProviders(onlyJinaTavily);
await Settings.init({
inMemory: true,
cwd: currentTempDir.path(),
overrides: { "providers.webSearch": "tavily" },
overrides: { "providers.webSearch": "tavily", "providers.webSearchExclude": onlyJinaTavily },
});
vi.spyOn(globalThis, "fetch").mockImplementation(makeFetchMock());
+1 -1
View File
@@ -5,7 +5,7 @@
### Added
- Added embedded Silver TrueType font rendering support to `renderSnapcompactPng`, featuring automatic per-glyph fallback for missing bitmap characters and anti-aliased scaling for East Asian wide code points.
- Added `snapcompactSupportedChars` to check font capability for specific characters.
- Added the `snapcompactSupportedChars` function to check font capability for specific characters.
## [16.2.5] - 2026-06-28
+3 -3
View File
@@ -9,9 +9,9 @@
### Changed
- Improved text normalization for non-ASCII text: semantic emojis fold to ASCII labels (e.g., `[OK]`, `[WARN]`, `[FAIL]`), decorative emojis are dropped, box-drawing/compatibility symbols fold to ASCII skeletons, and Unicode text is preserved when supported by the selected font or the embedded Silver fallback.
- Updated bitmap shapes to draw missing glyphs per-character using the embedded Silver TrueType fallback instead of rendering blanks or switching entire snippets, with support for East Asian wide characters across two grid cells.
- Updated text wrapping, pagination, and provider shape geometries to account for wide character footprints and updated X.org 8x13 font metrics (11px/22px pitches).
- Improved non-ASCII text normalization by folding semantic emojis to ASCII labels (e.g., `[OK]`, `[WARN]`), dropping decorative emojis, and folding box-drawing symbols to ASCII skeletons.
- Enhanced missing glyph rendering to use the embedded Silver TrueType fallback per-character, including support for East Asian wide characters across two grid cells.
- Updated text wrapping, pagination, and provider shape geometries to support wide character footprints and updated X.org 8x13 font metrics.
## [16.1.23] - 2026-06-26
+1 -1
View File
@@ -4,7 +4,7 @@
### Fixed
- Improved premium request calculation logic to account for specific model families
- Improved premium request calculation accuracy by correctly accounting for specific model families.
## [16.2.6] - 2026-06-29
+1 -1
View File
@@ -4,7 +4,7 @@
### Fixed
- Fixed `StdinBuffer` swallowing a fast double-Esc that arrived as one `"\x1b\x1b"` chunk: `parseKey` returns `undefined` for the combined chunk, so the editor's double-escape gesture and any single-Esc handler the second press should have hit never fired. The buffer now splits a bare `"\x1b\x1b"` into two ESC events only when no follower arrives in the disambiguation window; when a follower arrives, the second ESC stays attached so legacy Alt chords like `"\x1bd"` and meta-CSI/SS3 chords like `"\x1b\x1b[A"` still emit as parseable sequences ([#3857](https://github.com/can1357/oh-my-pi/issues/3857)).
- Fixed an issue where a fast double-Escape keypress was swallowed and ignored, preventing double-escape gestures and subsequent Escape key handlers from firing.
## [16.2.3] - 2026-06-28