@oh-my-pi/pi-ai
Added
OAuthCallbackFlownow serves aGET /launchroute on its loopback callback server that 302-redirects to the pending authorization URL, and exposes that short URL asOAuthAuthInfo.launchUrl. UIs can advertise it as a truncation-safe copy target (~30 chars) instead of the full authorize URL, so terminals narrower than the composed row cannot silently drop OAuth query parameters likecode_challenge_method=S256(#4418).- Preserved explicit
tool.strict === falseon OpenAI-family function tool payloads (openai-responses, openai-codex-responses, openai-completions) so backends that distinguishstrict: falsefrom an omitted flag stop over-filling optional arguments (#4336).
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).
@oh-my-pi/pi-coding-agent
Fixed
- Fixed Mnemopi auto-retention so protocol markers are stripped from embedding and FTS projections while stored transcripts remain readable. (#4395)
- Fixed mnemopi auto-retain storing cumulative full-session transcripts on every retention interval; subsequent retains now store only newly completed user-turn suffixes. (#4396)
- Fixed large
artifact://reads materializing entire MCP/tool artifacts before selector paging, preventing OOM crashes on unbounded raw reads and surfacing bounded read/search/copy guidance (#4482). - Fixed
/mcp reauthand/mcp adddropping OAuth scopes advertised viaWWW-Authenticate: Bearer scope="..."challenges and via protected-resource metadata (scopes_supported/scopes/scope), which caused tokens to be issued without the required scopes and reconnects to fail withinsufficient_scope(#4467) - Fixed task-branch merges aborting the whole cherry-pick range when a single commit was empty against HEAD (redundant with an already-applied change, or 3-way merged to HEAD); the sequencer now
--skips the empty commit and continues so later non-overlapping work still lands (#4438). - Fixed write/edit LSP diagnostics for TypeScript files outside any project root by suppressing project-resolution noise while preserving real syntax errors (#4401).
- Fixed
/mcp reauthagainst S256-only OAuth providers (Linear, and OAuth 2.1 flows generally) failing on Windows and other environments where the browser cannot auto-open. Two independent defects converged on Linear'sThe plain PKCE method is not allowed. Use S256 instead.error page:openPathinvoked barerundll32and silently swallowed the resultingExecutable not found in $PATHwhen the Windows machine PATH no longer referencedSystem32, andMCPAuthorizationLinkPromptcomposed aCopy URL:line wider than the viewport thatTUI#prepareLinethen silently truncated — trimming the trailingcode_challenge_method=S256(RFC 7636 §4.3 treats a request withcode_challengeand no method asplain). The MCP OAuth fallback,/login, setup wizard, auth-broker CLI, and login-dialog now advertise the shortOAuthAuthInfo.launchUrl(loopback/launchroute hosted byOAuthCallbackFlow) as the copy target; the OSC 8 hyperlink still carries the full URL for click-through; the MCP flow additionally stages the copy target on the clipboard via OSC 52; and the Windows opener now resolvesrundll32.exethrough%SystemRoot%\System32\, logging spawn failures and non-zero exits instead of dropping them (#4418). - Fixed
lsp rename_fileaborting when an LSP server returns duplicate byte-identical non-empty text edits for the same range, such as tsserverwillRenameFilesedits through barrel re-exports (#4458). - Fixed Linux x64
PI_TINY_DEVICE=cudatiny-model side runtimes missing ONNX Runtime CUDA provider binaries by repairing theonnxruntime-nodeCUDA sidecar install and preserving actionable CUDA diagnostics inomp tiny-models downloadoutput (#4475). - Improved reliability of edits when file snapshots share identical 16-bit hash tags
- Fixed ACP
terminal/createsending the bash tool's full shell line incommandwith noargs, which broke spec-conformant clients that spawncommand+argsdirectly (no implicit shell) — any command containing a space, pipe,&&, redirect, or$(...)failed withENOENTand the agent silently degraded to read-only tools. The bash tool now wraps the shell line before callingclientBridge.createTerminal, reusing the same shell binary + args the localbash-executorresolves viasettings.getShellConfig()(Git Bash /bash.exeon Windows,$SHELLwithshfallback on POSIX) so bash semantics —$VAR,$(...),source, POSIX quoting,-l— are preserved on both platforms. (#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 7crash loop — undiagnosable from the parent's logs.createWorkerSubprocessnow pipes stderr without starting a live read while the worker is idle, then drains the stream afteronExit, emits captured lines tologger.debugunder an<exitLabel> stderrmessage, and keeps the last 16 KiB in a bounded ring that gets appended to theErrorsurfaced throughonError. The exit surface is synchronized with the post-exit drain viaSpawnedSubprocess.stderrDrained, so the full native trace shows up on thetts: worker errorline without reintroducing event-loop liveness from unref'd workers. (#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
commitGuardthat the storage backend checks synchronously before rename, so a concurrentflushSync(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).
@oh-my-pi/pi-mnemopi
Fixed
- Fixed
remember(..., { embedText })so hosts can store full transcripts while embedding, FTS-indexing, and rebuild-reembedding a marker-free projection. (#4395)
@oh-my-pi/pi-tui
Fixed
- Fixed the modifyOtherKeys keyboard fallback enabling on unknown SSH terminals, avoiding broken Shift input in iOS SSH clients such as Redock (#4325).
What's Changed
- fix(mnemopi): retain only new auto-retain turns by @roboomp in #4397
- fix(mnemopi): strip retention markers from embedding projections by @roboomp in #4398
- fix(lsp): suppress orphan TypeScript project diagnostics by @roboomp in #4404
- fix(mcp): surface a short launch URL and log Windows opener failures for OAuth by @roboomp in #4420
- fix(task): auto-skip empty cherry-picks during task-branch merges (#4438) by @roboomp in #4440
- fix(lsp): dedupe identical replacement edits by @roboomp in #4460
- fix(ai): trim whitespace around enum tool args by @roboomp in #4465
- fix(mcp): carry OAuth scopes from challenge and resource metadata by @roboomp in #4468
- fix(read): guard large artifact raw reads by @roboomp in #4483
- fix(ai): preserve explicit tool.strict:false on OpenAI-family payloads by @roboomp in #4340
- fix(tiny): repair Linux CUDA side-runtime install by @roboomp in #4476
Full Changelog: v16.3.4...v16.3.5