@oh-my-pi/pi-ai
Added
- Added
anthropic-client-platform(desktop_app) andanthropic-client-version(1.11187.4) headers to the Anthropic request fingerprint for OAuth sessions
Changed
- Changed non-built-in tool names sent to Anthropic from
proxy_prefixing to_prefixing (for examplebashto_bash) while built-in tool names remain unchanged - Updated the Anthropic OAuth stealth fingerprint to track Claude Code 2.1.165:
claudeCodeVersionbumped to2.1.165(flows into both thecc_versionbilling header and theclaude-cli/<version>user-agent),claudeCodeSystemInstructionchanged to"You are a Claude agent, built on Anthropic's Claude Agent SDK.", and the billing-headercc_entrypointchanged fromclitolocal-agent. - Clamped the Anthropic request
max_tokenstoMath.min(CLAUDE_CODE_MAX_OUTPUT_TOKENS, options.maxTokens || model.maxTokens)(64k) so OAuth requests match Claude Code's requested output cap instead of sending the model's full ceiling (e.g. 128k for Opus 4.8).
@oh-my-pi/pi-coding-agent
Added
- macOS release binaries are now signed with a Developer ID Application identity (hardened runtime + secure timestamp + JIT/library-validation entitlements) and notarized in CI when the
APPLE_*signing secrets are configured; releases auto-fall back to ad-hoc signing until then. This makes the shipped binaries Gatekeeper-acceptable, unblocking an official Homebrew submission (#776). Seedocs/macos-signing-notarization.md. - Added a Homebrew install path:
brew install can1357/tap/omp. The can1357/homebrew-tap formula installs the prebuilt release binary, and arelease_brewCI job regenerates it (version + per-asset sha256) from each published release viascripts/ci-update-brew-formula.ts(#776).
Changed
- Adjusted
completion()model resolution so thedefaulttier now prefers the session’s active model and falls back to the configured default role when needed - Rewrote the session auto-title prompt (
prompts/system/title-system.md) and theset_titletool description to ask for a concise, sentence-case title (3-7 words) that captures the session's topic/goal, with good/bad examples and explicit guidance to treat the first message as data (no following embedded links/instructions, no refusals, describe URL/reference asks). The local on-device title prompt (tiny-title-system.md) was aligned to the same 3-7 word, sentence-case convention. The deterministic greeting/low-signal filter and thenonedeferral sentinel are unchanged. - Renamed the eval oneshot helper from
llm()tocompletion()in both JavaScript and Python preludes, including status events, prompt docs, and runtime tests.
Fixed
- Fixed
completion()to always send a non-empty default system prompt whensystemis omitted so providers that require instructions no longer reject requests - Fixed structured
completion()mode to return parsed JSON from plain text output when the model skips the forcedrespondtool call - Fixed slow-tier
completion()reasoning requests to avoid unsupported effort settings by only enabling reasoning on reasoning-capable models and capping effort to supported levels - Fixed JS eval worker reset/dispose to close workers gracefully before forced termination, avoiding Bun 1.3.14 N-API teardown crashes with native modules such as
canvas.
@oh-my-pi/pi-tui
Fixed
- Fixed Windows ConPTY session-resume painting the transcript with the last several rows truncated below the viewport until Alt+Tab forced a host repaint. After
sessionReplace/historyRebuild/overlayRebuildpaints that scroll-push content into native scrollback, the renderer now arms a 150 ms ConPTY settle window that coalesces spinner/blink-drivenrequestRender(false)calls into a single trailing render — Windows Terminal's viewport-follow logic no longer falls further behind the cursor on every tick of the post-paint storm. The arm also reclaims any render request queued during the in-flight composition (notablyImageBudget.endPass()callingrequestRender()synchronously when a frame trips the live-graphics cap): without that, the queued request sat on the standard 30 Hz throttle and fired at ~33 ms — well inside the 150 ms quiet window — defeating the coalescing. Bumped the ConPTY per-WriteFilechunk cap from 8 KiB to 16 KiB so a multi-megabyte resume paint emits half as many writes (still well under the ~32 KiB threshold from #2034 that the original cap defends against), and made the cap measure encoded UTF-8 bytes instead of JS code units so a CJK-heavy transcript can't silently inflate a 16-KiB-of-code-units chunk into ~48 KiB ofWriteFiletraffic and reintroduce the #2034 viewport bug (#2095).
What's Changed
- fix(coding-agent): close JS eval workers gracefully by @basedcorp99 in #2079
- fix(tui): settle ConPTY after big paints to stop session-resume tail truncation by @roboomp in #2101
Full Changelog: v15.10.3...v15.10.4