@oh-my-pi/pi-ai
Fixed
- Fixed OpenAI Responses native history replay leaking image generation provider-only fields into the next request, which made OpenAI-compatible proxies reject
pitool-calling sessions withUnknown parameter: input[1].action. (#3201) - Fixed a stream thought-leakage issue for
gemini-3.5-flashwhere the model's internal reasoning JSON could leak into the visible text stream. The stream parser now uses a brace-balanced counting algorithm to accurately slice and discard the leading thought JSON block, with a robust fallback for unescaped double quotes, dynamic tool-name derivation, and preservation of subsequent text deltas without triggering empty-response retries.
@oh-my-pi/pi-catalog
Fixed
- Fixed Umans
umans-glm-5.1/umans-glm-5.2advertising native image input. Themodels/infoendpoint reportssupports_vision: "via-handoff"for the GLM models, meaning vision routes through a separate handoff pre-analysis step instead of accepting raw image blocks;umansSupportsVisiontreated any non-empty string as native vision support, so image prompts went directly to GLM and were rejected with400 This model does not support image inputs. The helper now requiressupports_vision === true, the bundled GLM 5.1/5.2 rows are corrected to text-only, and stale mismatched Umans cache rows for those ids are dropped so the vision-handoff path runs even before a successful refresh. (#3184)
@oh-my-pi/pi-coding-agent
Added
- Added
tab.waitForSelectorfor more robust element-wait behavior - Added
tab.waitForNavigationto monitor and await page transitions
Changed
- Standardized public HTML exports to use the brand web palette instead of the local TUI theme
- Updated export logic to allow choosing between brand-web or local TUI color palettes
- Clamped browser tool timeouts to fail fast with named errors instead of opaque cell timeouts
- Added strict validation to block unsupported Playwright-only selector engines in browser tools
Fixed
- Fixed Codex image reads re-encoding to WebP and then failing the next request with an invalid
input_image.image_url; Codex-bound images now stay in PNG/JPEG-compatible formats. - Fixed prompt-template and file slash-command submissions rendering both the raw slash invocation and the expanded prompt in the interactive transcript. (#3199)
- Fixed the
/modelthinking picker labeling the OpenAI GPT-5.5 top effort asmaxinstead of the catalog-declaredxhigh(#3194). - Fixed session-title generation silently falling back to the online
smolmodel (and billing whatever provider held the resolved API key — OpenRouter in the reporter's case) when the user had explicitly configured a localproviders.tinyModel:generateSessionTitleraced local against online with a 10s timeout and fired the online request immediately whenever the local worker returnednull(unknown key, model not downloaded, transformers.js failure). Now an explicit local-model choice is honored end-to-end — on local failure the session is left untitled with alogger.warninstead of billing the smol fallback (#3187) - Fixed OpenCode MCP discovery so array commands are normalized into a stdio executable plus arguments,
environmentis accepted as the OpenCode env key, and argument lists are omitted when empty. (#3180) - Fixed plan mode leaving
writehidden undertools.discoveryMode: "all", which made the agent attempt to create the plan file viaeditand stall. Plan-mode entry now force-activateswritewhenever the registry built it, matching thewrite+editinstructions in the plan-mode prompt (#3165) - Fixed
editandpatchtool writes bypassing the ACP client's open buffer when Zed (or another ACP client) advertises thefs.writeTextFilecapability: all three write-mode tools (edit,patch,replace) now route through the client bridge when it is available, so the editor's TypeScript diagnostics panel updates immediately instead of requiring a workspace reload. - Fixed the agent dashboard new-agent description and the hook editor (default hook-style mode) treating Ctrl+Q as plain text on Windows Terminal, leaving Windows users unable to submit because the terminal cannot deliver a distinct Ctrl+Enter event. Both forms now submit on the shared
app.message.followUpchord (Ctrl+Q or Ctrl+Enter), matching the main prompt editor and any user remap ofapp.message.followUp(#2118). - Fixed
pi.sendMessage({ display: true })rendering the custom message twice when fired from asession_startextension handler (or any other non-streaming dispatch before the initial transcript render).ExtensionUiController.#applyCustomMessageDisplayrebuilt the chat from the freshly-persisted session entry, andmain.ts's subsequentrenderInitialMessages(undefined, { preserveExistingChat: true })then both re-rendered from session entries AND re-appended the preserved chat children — duplicating the message. The rebuild now waits untilrenderInitialMessageshas completed at least once (tracked viaInteractiveModeContext.initialChatRendered); after that, post-init extension sends still rebuild as before so messages fromtool_result/agent_end/ etc. surface immediately (#1955). - Fixed Git-mutating automation silently mis-handling pure Jujutsu workspaces (
.jj/repo/present, no colocated.git/).task/worktree.ts#getRepoRootpreviously threw a generic "Git repository not found" for isolated subagent setup, andautoresearch/git.ts#ensureAutoresearchBranchreturned a soft "Not in a git repository" warning that let/autoresearchproceed with no branch isolation or auto-commits. Both paths now detect a pure jj workspace via the newjj.isPureJjRepohelper and surface an actionable Jujutsu-specific error pointing atjj git init --colocate. Colocated jj-git (both.jj/and.git/at the same root) and plain Git checkouts behave exactly as before (#1935). - Fixed
autothinking mode being silently dropped when a session is resumed (--continue/--resume/in-app switch). The session log persisted only the resolved per-turn effort, not theautoselector, so resume froze the session at the last concrete level and never reclassified again. The log now records the configured selector (autovs concrete) alongside the resolved effort, so resumedautosessions stay in auto (shown as pending until the next turn reclassifies) and manual concrete pins still restore as concrete — including a pin whose level matches the effortautohad just resolved to. - Fixed transcript scrollback stability on terminals with eager erase risk so completed assistant messages remain stable while new streaming lines are rendering
- Fixed Hindsight retain (and the shared mnemopi/Hindsight recall paths) framing assistant turns whose only content was punctuation/whitespace — most commonly the lone
.some providers emit for tool-call-only or thinking-only turns — into[role: assistant]\n.\n[assistant:end]blocks that polluted the bank, wasted retain tokens, and degraded recall.prepareRetentionTranscript,extractMessages, andflattenMessagesForRecallnow require at least one letter or digit per message via a sharedhasSubstantiveContentpredicate (#1806). - Fixed
/resumerendering forked child sessions without a fork tag, making them indistinguishable from their parent when titles match (#1792).
What's Changed
- fix: route edit/patch/replace writes through ACP client bridge by @Mokto in #2244
- fix(coding-agent): force-activated write tool while plan mode is live by @roboomp in #3166
- fix(mcp): normalize OpenCode MCP command arrays by @roboomp in #3182
- fix(catalog/umans): treated supports_vision sentinels as text-only by @roboomp in #3186
- fix(coding-agent): honor explicit local
providers.tinyModelinstead of silently billing onlinesmol(issue #3187) by @roboomp in #3190 - fix(google-gemini-cli): robust stream thought-leakage filter for gemini-3.5-flash by @cagedbird043 in #3191
- fix(coding-agent): show xhigh in model picker by @roboomp in #3195
- fix(coding-agent): mark forked sessions in resume picker by @roboomp in #1794
- fix(hindsight): drop punctuation-only assistant turns before retain by @roboomp in #1807
- fix(session): keep auto thinking mode active across session resume by @msimon in #1865
- fix(coding-agent): guarded Git-mutating automation in pure jj workspaces by @roboomp in #1939
- fix(coding-agent): rendered extension sendMessage(display:true) once during session_start by @roboomp in #1956
- fix(coding-agent): submit /agents create form and hook editor on Ctrl+Q by @roboomp in #2134
- fix(tui): replace raw optimistic slash prompt renders by @roboomp in #3200
- fix(ai): sanitize Responses image history replay by @roboomp in #3202
New Contributors
Full Changelog: v16.1.10...v16.1.11