@oh-my-pi/pi-ai
Added
- Added AIML API as an OpenAI-compatible provider preset with
AIMLAPI_API_KEYdiscovery (#2105).
@oh-my-pi/pi-coding-agent
Added
- Added a
/plan-reviewcommand that manually (re-)opens the plan-review overlay while plan mode is active. Since there is no fixed plan filename, it reviews the newestlocal://<slug>-plan.mdthe agent wrote — useful for pulling the review back up after dismissing it, or reviewing a plan the agent wrote without callingresolve.
Changed
- Reverted the
tasktool's result-header glyph from the⇶signature icon back to the quietstatus.donebullet (•): white while a subagent is running, accent once it finishes. The reviewer verdict line and per-agent result lines use the same bullet.
Fixed
- Fixed
/loginAPI-key prompts (OpenCode Zen, Perplexity OTP, GitHub Enterprise URL, manual OAuth redirect URL, …) silently dropping pasted content on kitty/Linux/Wayland — and any other terminal supporting OSC 5522 enhanced paste.InputControllerenables kitty's enhanced clipboard protocol on TUI start and consumes the resulting OSC 5522 packets in anaddInputListenerthat runs before focus dispatch, so the paste never reached the modalInput's bracketed-paste handler; the routing then stuffed the text into the mainCustomEditorunconditionally, even whenselector-controllerhad detached the editor and focused a temporary OAuth input. The pasted API key accumulated in the hidden editor and only resurfaced in the main prompt when the user dismissed the modal with Enter or Esc. The enhanced-paste callback now consultsui.getFocused()and routes the text to the focused component when it exposes apasteTexthook, falling back to the editor only when no modal target is in focus; image pastes refuse with a status message instead of stuffing a binary blob into the hidden editor. (#2127) - Fixed an auto-compaction dead loop when
compaction.strategywasshakeand the configured threshold was low enough that a single shake pass could not bring the context below it (e.g. a 50K-token threshold on a session well above it). Each pass auto-continued, the next agent turn re-triggered the threshold check, and the second shake had nothing new to drop, so the session spun forever. The shake recovery path now estimates post-shake context and, when it is still above the threshold (or shake reclaimed nothing on overflow recovery), surfaces a one-shot warning and falls back to the summarization-drivencontext-fullcompaction so progress actually resumes (#2119). - Fixed
/skill:prompts so magic keywords and turn-budget directives in skill args inject the same hidden notices as normal user prompts, matching the editor highlight behavior (#2128). - Fixed MCP OAuth fallback rendering to show a short terminal hyperlink and keep the raw authorization URL on one unwrapped copy line (#2121).
- Fixed the
tasktool rendering a success bullet and asuccessframe state for detail-less error results (e.g. an argument-validation failure that never executes): the header now shows the error glyph with an error border anderrorstate, and surfaces the dispatched agent name. - Fixed Agent Control Center new-agent creation so Windows Ctrl+Enter sequences submitted as a single LF generate the agent instead of inserting a newline (#2118).
- Fixed plan-mode subagents preserving read-only specialty tools such as
report_findingwhile still stripping mutating tools (#1998). - Removed unreachable standalone Exa tool-suite exports and stale tool-count barrel exposure while keeping the live Exa
web_searchprovider helpers (#2093). - Fixed
omp commitsplit plans accepting hunk selectors that resolve to no parsed hunks, which crashed the apply step after the index reset and left the working tree fully unstaged (#2098).
@oh-my-pi/pi-tui
Added
- Added
TUI.getFocused()accessor andInput.pasteText(text)method so callers consuming non-bracketed paste transports (e.g. kitty's OSC 5522 enhanced clipboard) can route a paste payload to the currently focused modal Input rather than always to the primary editor. Mirrors the existingEditor.pasteTextsemantics: newlines stripped, tabs normalized, NFC normalization applied. (#2127)
Fixed
- Fixed tmux/screen/zellij rewind/branch (
requestRender(true, { clearScrollback: true })) permanently anchoring the input box to the pane top and overlaying scrollback after a streamed reply had grown past the viewport.#emitFullPaintonly reset#scrollbackHighWaterinside theclearScrollbackbranch and otherwise raised it monotonically, so inside multiplexers (where\x1b[3Jis a no-op andclearScrollbackis forced off) the streaming peak survived the rewind; on the next frame#planLiveRegionPinnedRendersaw the stale high-water and anchoredrenderViewportToppast the actual content, repainting every visible row blank and parking the cursor at screen row 0 for the rest of the session. A full repaint withclearViewport: truere-emits the entire transcript from row 0, so#scrollbackHighWateris now assigned (not max-clamped) to the natural push count regardless of whether ED 3 was issued (#2130).
What's Changed
- fix(commit): reject empty split hunk selectors by @danzaio in #2116
- fix: close several issues by @danzaio in #2120
- fix(cli): keep MCP auth URLs clickable by @roboomp in #2133
- fix(coding-agent): honor magic keywords in skill args by @roboomp in #2132
- fix(coding-agent): fall back to context-full when shake cannot drop below the threshold by @roboomp in #2135
- fix(tui): reset scrollbackHighWater on full repaint inside multiplexers by @roboomp in #2137
- fix(tui): route enhanced-paste text to the focused Input prompt by @roboomp in #2138
New Contributors
Full Changelog: v15.10.5...v15.10.6