github can1357/oh-my-pi v18.13.2

4 hours ago

@oh-my-pi/pi-agent-core

Added

  • AgentTool gained the optional handlesToolInterrupt flag: an interruptible tool that sets it (such as wait) still runs, without blocking, when a loop-owned interrupt is already queued, so it can drain the queued wake event instead of being skipped; user cancellation still skips it (#17174 by @alphastorm)

@oh-my-pi/pi-ai

Fixed

  • Fixed OAuth logins shared by several processes being disabled with invalid_grant when they refreshed at the same time or one of them quit mid-refresh (#17128 by @sjawhar)
  • Fixed transient Google 429 rate-limit and capacity responses retrying in place without blocking or rotating credentials, while daily caps and zero-entitlement limits still rotate (#17127 by @GTanger)
  • Fixed Aliyun DashScope's multimodal gateway failing a turn on its intermittent InvalidParameter 400s for valid inline images ("provided URL does not appear to be valid", "Download multimodal file timed out"); they are now retried (#17101 by @shuairongzeng)
  • Fixed a revoked or rejected GitHub Copilot credential continuing to show its last cached usage quota instead of being dropped (#17081)
  • Fixed Devin requests compressing the request body on the UI thread, which briefly froze the TUI on long conversations; requests under 1 KiB are now sent uncompressed

@oh-my-pi/pi-catalog

Added

  • Added LM Studio decision models to discovery: models LM Studio reports as type: "decision" are listed as judge models served over its /v1/decisions endpoint, alongside its chat models (#17169 by @richiestanaway)

@oh-my-pi/pi-coding-agent

Added

  • Extensions in the interactive TUI can read and directly switch plan, vibe, goal, and loop modes with ctx.sessionModes and observe changes with the mode_changed event, without submitting slash commands; extensionHandlers.modeControl: false turns off extension-driven mode changes (#15753 by @Shadorain)
  • RPC hosts can capture draft-only speech-to-text with live previews when speech input is enabled, without submitting an agent turn; slow flushes have adjustable deadlines, and failed transcription does not block a session change after capture closes (#17158 by @felipe-santos-aya).
  • Added discovery.advertisedReasoning to let a custom provider opt out of the reasoning ladder its /v1/models rows advertise (default true); discovery: proxy now reads that ladder, its none off-switch, and an explicit reasoning: false instead of building every model's thinking surface from the bundled catalog reference alone (#15255, #17077 by @Youwenqwq)
  • WATCHDOG.yml advisor entries now accept scope (main, subagent, or all, default all) to attach an advisor only to the top-level session or only to advised subagents, and includeReasoning: false to omit primary assistant _thinking:_ blocks from advisor review deltas (#17058 by @trukhinyuri)
  • Added session.worktreeScope to keep the resume picker scoped to one directory (#17061 by @Dante-dan).
  • LM Studio decision models can now serve the judge role (modelRoles.judge: lm-studio/<model>); they answer over LM Studio's /v1/decisions endpoint instead of being offered as chat models (#17169 by @richiestanaway)
  • Extensions' getAllTools() now reports mcpServerName, mcpToolName and mcpReadOnlyHint for MCP-backed tools, so an extension can tell read-only connector tools from ones that change things (#17120 by @cfpperche)
  • RPC: navigate_tree (move the leaf in the same session file, optionally summarizing the abandoned branch), abort_branch_summary and set_label, with matching RpcClient methods (#17138 by @andrebrait)
  • RPC: delta message_update frames (messageUpdates: "delta") now carry the block on start/end events and the message on a restart, so a client can rebuild the streaming message from deltas alone (#17137 by @andrebrait)
  • ctx.ui.input now accepts { secret: true } to mask typed characters as bullets in the TUI, forward an optional secret host hint on RPC extension_ui_request frames, and refuse plaintext form elicitation in ACP mode (#17080 by @GTanger)
  • Added opt-in gc.autoCompress (default off): interactive launches start a detached, low-priority omp gc --compress --apply at most once a day, so idle sessions are stored compressed without running the command; volumes where compression does not shrink a probe file (e.g. macOS 27) are skipped, and the latest run's output or skip reason is in gc-auto-compress.log in the agent dir (#17189 by @wolfiesch)
  • Added withFatLto to the Nix package: omp.override { withFatLto = false; } links pi-natives with thin LTO for faster builds (#13752 by @n3oney)

Changed

  • Bundled scout subagents now include ast_grep in their default tool list, matching the agent prompt's AST-search directive; scout stays read-only, so lsp (which can rename and apply code actions) is not added (#17151 by @sinhduc01)
  • Clearing a draft now brings back the idle recap and idle compaction it held off, a subagent view you return to gets the recap it still owed, and prompts, turn-starting messages and IRC wakes that arrive during idle compaction wait for it to finish; SDK owners can opt a session in with AgentSession.enableIdleMaintenance({ isBlocked, scheduledTurn, onRecap }) and refreshIdleMaintenance() (#17136 by @andrebrait)
  • TTSR interrupts include a bounded excerpt of the text that matched the rule, quoted as untrusted data with harness tags escaped; excerpts are retained once per stream, preserved alongside AST matches, and omitted for zero-width matches (#17099 by @shgew)
  • Sessions that load several provider-registering extensions into a shared model registry (subagents, /tan, SDK hosts) start faster: the model catalog is rebuilt once instead of once per extension (#17088 by @Delije4)
  • Qwen 3.8 models (for example Qwen3.8-Flash-Next served locally) now get the replace edit tool instead of hashline, like Kimi, DeepSeek and GLM 5.3 Flash; an explicit edit.mode, edit.modelVariants, PI_EDIT_VARIANT or PI_STRICT_EDIT_MODE still wins (#17096 by @ianderse)
  • ACP clients now receive each tool's name on tool_call, so tools without a specific ACP kind (task, wait, ask, …) show their own name instead of a generic "tool" label (#17162 by @epk)
  • /context now opens an interactive, read-only viewer of the active prompt, tools, messages, and thinking with estimated token usage and per-tool output, instead of the static usage report (#16160 by @C-W-Z).
  • Nix builds cache Rust dependencies and the native addon in separate derivations, so Rust edits no longer recompile every dependency and TypeScript edits reuse the addon (#13752 by @n3oney)

Fixed

  • Fixed ask questions being unanswerable while the prompt held a draft: Up/Down now hand the keyboard to the question (typing still goes to the draft until then), and the untouched draft is back in the prompt once the question is answered or cancelled (#17215 by @H4vC)
  • Fixed the Agent Hub becoming unreachable after the last subagent finished: the people icon now stays (muted) while the session has subagents to inspect, and /subagents opens the hub as an alias of /hub (#17215 by @H4vC)
  • Fixed /goal pause leaving the goal tool active; pausing now restores the toolset from before the goal started (#15753 by @Shadorain)
  • Fixed /live flipping between listening and speaking at every pause in the assistant's speech; speaking now holds through short pauses (#17114)
  • Fixed the workflowz notice showing Python call forms in JS-only sessions and describing keep-alive workers when eval.workpool.freshAgents is on (#17152 by @bigHippoZz)
  • Fixed the first request after midnight or a working-directory change rewriting the conversation's first message, which broke OpenAI response chaining and the provider prompt cache, when an extension context handler or secret obfuscation was active, when an extension inserted its own message afresh on every request (superpowers' bootstrap), or when requests from one or more advisors ran in between; the new date or directory is now appended after the earlier turns, and is repeated when a side question (/btw) or a branch left out the turn that carried it (#17117 by @sjawhar)
  • Fixed :auto on a retry fallback entry being ignored: a fixed-effort session now switches to auto thinking on that fallback instead of inheriting the failing turn's effort, and advisor fallbacks keep following the primary's effort without enabling unverified thinking (#17100 by @shgew)
  • Fixed ssh:// home-relative paths resolving against literal /~ instead of the remote account's home (#17182 by @alphastorm)
  • Fixed searches of ssh:// directories failing with unsupported directory scans (#17182 by @alphastorm)
  • Fixed clone-first worktrees carrying source-bound Python environments and CMake build trees, including self-ignored and nested directories (#17181 by @alphastorm)
  • Fixed clean cloned worktrees carrying files ignored only by the source checkout, while retaining caches ignored by the target (#17181 by @alphastorm)
  • Fixed glob patterns ending in / returning no directories or including matching files; directory-only constraints now work across local, URL, and multi-root searches (#17180 by @alphastorm)
  • Fixed recursive skill:// glob and find discovery skipping contained linked directories; linked resources keep their skill URLs and directory cycles terminate (#17180 by @alphastorm)
  • Fixed find treating nonempty linked files as empty and dropping them before judgment (#17180 by @alphastorm)
  • Fixed JSON selectors failing on BOM-prefixed input, backup and extensionless files, and modifier-only queries (#17179 by @alphastorm)
  • Fixed JSON selectors on ssh:// text files while preserving pagination and the remote read limit (#17179 by @alphastorm)
  • Fixed tool.apply_patch(...) being rejected as an unknown tool in JavaScript eval when apply-patch editing is enabled (#17178 by @alphastorm)
  • Fixed eval silently changing supplied cell deadlines without showing the requested and effective timeouts (#17178 by @alphastorm)
  • Fixed unavailable Python remaining in eval's advertised languages and corrected its interpreter setup guidance (#17178 by @alphastorm)
  • Fixed PDF archive members returning a binary-entry banner instead of converted text, with PDF selectors and page-image reads now supported (#17175 by @alphastorm)
  • Fixed github run_watch labeling unavailable or partial failed-job logs as full logs, and included bounded fetch-failure reasons (#17173 by @alphastorm)
  • Fixed github pr_create echoing large PR bodies in creation summaries and xd://github result details (#17173 by @alphastorm)
  • Fixed raw URL reads prepending transport headers and normalizing response whitespace; raw URL bodies, ranges, and artifacts now share source-body coordinates (#17171 by @alphastorm)
  • Fixed raw ranged reads adding elision rows, continuation notices for satisfied ranges, and conflict instructions to selected source text (#17171 by @alphastorm)
  • Fixed read replacing a valid HTML page with a stale or missing guessed .md page; alternate representations now report their actual source URL (#16834)
  • Fixed implicit interactive autoResume failing every launch when a saved model cannot be restored and model fallback is disabled: startup now warns and opens a fresh session without carrying over the old history or cache identity, while preserving the original --max-time deadline. Saved-model diagnostics in the warning are sanitized and length-limited before display. Explicit resume and headless model-restoration restrictions remain unchanged (#17163 by @SAKANA-MOONLIGHT).
  • Fixed proc://<id>/mode reporting a known in-process job or agent as a missing service, and clarified that stdin and lifetime modes are services-only (#17170 by @alphastorm)
  • Fixed Rex and other OSC 7501 terminals losing the working or blocked indicator when omp redraws a user message during a run (#17145)
  • Fixed hintless Google HTTP 429 model-capacity responses using the 45–75s model-capacity backoff instead of the short generic retry delay (#17127 by @GTanger)
  • Fixed skill:// reads, /skill: commands (terminal, ACP and RPC) and subagent autoload skills serving a plugin's old version, or failing with File not found, in a running session after omp plugin upgrade installed a new version; the session now rediscovers its skills and uses the upgraded files, whether or not the old version's directory was deleted (#17027 by @sjawhar)
  • Fixed Esc on a busy session (and RPC abort_and_restore_queue) silently discarding queued messages from extensions and agents, such as pi.sendMessage steer/follow-up cards and agent-attributed prompts; they now appear in the transcript without restarting the run and reach the model with your next prompt (#17161 by @sjawhar)
  • Fixed a failed delivery of messages typed during compaction discarding other queued messages, such as an extension's prompt; only the messages that delivery queued are taken back, and messages anything else queued before, during or after it stay queued (#17161 by @sjawhar)
  • Fixed a failed delivery of messages typed during compaction sending the first of them twice: once now and again with the retried batch (#17161 by @sjawhar)
  • Fixed --resume <file|id>, --continue, SessionManager.continueRecent(), the resume pickers and RPC open_session reviving an old copy of a conversation that had continued in a new file because omp could not keep writing the original (another omp process held it, or the file changed under it); resume now opens the copy with the newest turn, unless the original has turns of its own that copy lacks (for --resume, the pickers, and --continue or auto-resume of the terminal's last session), and says which file it picked; --continue and auto-resume without a record of the terminal's last session, and RPC open_session, take the copy with the newest turn among all linked copies, whichever one was written last. Copies saved before this fix are not linked and still resume as before (#17159 by @sjawhar)
  • Fixed a retry.fallbackChains entry naming another Claude model being skipped while the latest Claude turn carries signed thinking: the chain now moves to that entry when the failure is on another model, is not retried (an account-policy denial, a non-retryable error, or a wait past retry.maxDelayMs), or has spent its retries (#17115 by @sjawhar)
  • Anthropic composer predictions now cache the persisted conversation prefix; /btw follow-ups reuse stable topic history without caching regenerated image descriptions (#17186)
  • Fixed wait returning a skipped-tool error for background completions, peer messages, or parent steering queued before execution (#17174 by @alphastorm)
  • Session-stop extensions now pass all continuation messages to the agent instead of silently discarding every message after the first; blocking decisions still take priority (#17129 by @aktanazat)
  • Fixed the crash and SIGTERM recovery hint offering omp --resume <id> for a session that was never saved to disk, which --resume cannot load; such a session now prints no resume command (#17119 by @sjawhar)
  • Fixed Ctrl+V over SSH pasting the server's clipboard when the client terminal forwards the key instead of pasting (e.g. Tern on Windows into a macOS host); omp now leaves the remote clipboard alone and points you to your terminal's paste shortcut (#17149 by @H4vC)
  • Fixed apply_patch committing unmatched old/context text or dropping numeric prefixes; matching now uses complete lines without changing other edit modes' fuzzy behavior (#17184 by @alphastorm)
  • Fixed context-free apply_patch line deletions leaving blank rows, including first, last and only lines (#17184 by @alphastorm)
  • Fixed apply_patch rejecting move-only updates and move-then-add envelopes; moves preserve source bytes and permissions and later sections see the ordered file state (#17184 by @alphastorm)
  • Fixed omp plugin commands applying changes under --dry-run: upgrade and omp update --plugins --check now preview, and actions without a preview reject the flag (#17104 by @sjawhar)
  • Turning off async.widgets mid-session now stops spec requests for already-shown job widgets and aborts any request in flight (#17090 by @yuzu-octopus)
  • Fixed learn not hot-registering a newly minted or updated managed skill in the active session (session.skills, skill://, and the system prompt), and fixed composeRecallQuery dropping prior user turns when an earlier turn repeated the latest prompt (#17113 by @GTanger)
  • Fixed @path file mentions skipping .pdf, .docx, .xlsx, .pptx, and .epub files as binary instead of converting them to Markdown with markit like CLI @file arguments and read (#17193 by @GTanger)
  • Fixed an automatic retry fallback (a hop down retry.fallbackChains or the Fireworks Fast degrade) re-rendering the system prompt for the new model, which made Anthropic write the whole cached conversation again on each hop; a hop now keeps the Model line and Delegation wording, and rebuilds only when the new model needs a different edit mode, tool-description handling, or tool set (#17014 by @sjawhar)
  • Fixed a live subagent's system prompt re-rendering its peer list, with each peer's current activity, on every rebuild, which made Anthropic write the whole cached conversation again; the list now updates only when a rebuild changes the rest of the prompt, and history:// lists the current peers (#17014 by @sjawhar)
  • SQLite row selectors now avoid shadowed ROWID aliases so reads, updates, and deletes target the intended single row. (#16998, #17001 by @ai-yang)
  • Fixed composer predictions offering notes relayed in from other agents or sessions (for example an orchestrator's pasted status note) as the user's next message; predictions now cover only what the person at the keyboard would type (#17185 by @wolfiesch)
  • Fixed image descriptions using the first vision model in catalog order (such as claude-fable-5) when no vision model is configured; they now use the least expensive priced vision-capable model (#17148, #17196 by @gcp)
  • Fixed wait results and background job deliveries naming a finished subagent only by a job id that differs from its agent id (e.g. Foo-2 for a messaged agent's new turn), where agent://Foo-2 and history://Foo-2 are not found; they now name history://Foo, plus agent://Foo when that turn published its output (#17112 by @sjawhar)
  • Fixed RpcClient.promptAndWait() hanging until its timeout when the agent process exits or the client stops after the prompt was acknowledged; it now rejects right away (#17135 by @andrebrait)
  • Fixed reading versioned Read the Docs pages serving the development branch's source file instead of the requested version's content when the page's Edit link targets another branch (#17091 by @yuzu-octopus)
  • Fixed RPC startup hanging when an extension opens a dialog during session_start: the client can now answer it, and other commands still wait for startup to finish, in order (#17139 by @andrebrait)
  • Fixed extension tools disappearing once the startup plan mode (plan.defaultOnStartup) was paused or its plan approved: tools of extensions that load after startup now stay, while built-ins that plan mode registered, such as its write transport, still go (#17085 by @appboypov)
  • Fixed a batch task call silently ignoring a model (or sourceSession) on a non-seance item while the seance agent is hidden, so the child ran on its own model; the call is now refused with the same error as a single-agent call (#17107 by @sjawhar)
  • Fixed an edit under an older [path#TAG] header, after another edit had changed the file, applying to lines that read never displayed, including a line it had cut at the column cap; such an edit now shows the anchored lines first, as it does under the file's current tag (#16208, #17033 by @sjawhar)
  • Fixed omp gc --compress (and the gc.autoCompress background run) taking minutes on large session histories (#17195 by @H4vC)
  • Fixed omp gc --compress --apply spending time on every idle session where the filesystem does not actually compress files (e.g. macOS 27); it now reports compress skipped: <reason>, and gc.autoCompress no longer slows interactive startup with that check (#17195 by @H4vC)

@oh-my-pi/pi-mnemopi

Fixed

  • Fixed local embeddings using one spinning CPU thread per core, so a single recall query cost several CPU-seconds on a many-core machine (#17109 by @sjawhar)

@oh-my-pi/pi-natives

Added

  • Added opt-in, cycle-safe descendant-link traversal to native glob through followLinks, leaving default traversal unchanged (#17180 by @alphastorm)

Changed

  • Faster native line, word, and structured patch diffs on large edits (#17015 by @GTanger)

Fixed

  • Fixed the built-in sort using many times its -S buffer size, or more memory than its container allows or the machine has available, on inputs of short lines, and ignoring timeout or a cancel while it sorts (#17155 by @sjawhar)
  • Fixed the built-in sort -m and sort -c splitting lines longer than their read buffer, and sort joining a file's unterminated last line to the next file's first line (#17155 by @sjawhar)
  • Fixed the built-in sort -S N% using the wrong buffer size: -S 50% gave 0 bytes and -S 100% a thousand times the machine's memory; it is now N percent of physical memory as in GNU sort (#17155 by @sjawhar)
  • Exited bash-tool & jobs are reaped without another command; wait still reports their status, and $! works inside pipelines, subshells, and command substitutions (#17144).
  • On macOS, the bash tool's built-in ps includes other users' processes and unreaped zombies when selecting a PID (#17144).
  • Fixed native glob file-type filters discarding target size and modification time for linked files (#17180 by @alphastorm)
  • Fixed leading UTF-8 BOMs causing embedded jq JSON input parse errors while preserving raw-input bytes (#17179 by @alphastorm)
  • Fixed the shell's timeout and tool aborts not stopping built-in commands that were still reading (cat /dev/zero, huge files, FIFOs with no writer) (#17141 by @sjawhar)
  • Fixed a tool abort leaving a background in-process command, such as cat /dev/zero > /dev/null &, running and keeping a core busy after its shell session was gone (#17141 by @sjawhar)
  • Fixed a shell redirect to or from a FIFO whose other end is a background job, such as echo hi > f & cat < f, hanging the command; a tool abort now also stops a write redirect to a FIFO that has no reader (#17141 by @sjawhar)
  • Fixed a background external command with a FIFO redirect, such as /bin/cat < f & echo hi > f, hanging the shell until the FIFO's other end opened; the command's own process now opens it, as in bash (#17141 by @sjawhar)
  • Fixed timeout printing error: interrupted when its limit stopped a built-in command; like GNU timeout, it now prints nothing of its own and exits 124 (#17141 by @sjawhar)
  • Fixed crackling in live voice playback: the assistant's speech now absorbs packet jitter without dropping out, short turns play without waiting for the next response, and lost packets no longer insert extra synthesized audio (#17114)
  • Fixed the bash tool's rm -r and du crashing the whole session with a stack overflow on a directory tree thousands of levels deep; rm -r also removes such a tree without running out of file descriptors, and reports a directory that is its own ancestor instead of descending into it (#17021 by @sjawhar)
  • Fixed the bash tool's find panicking and writing a native panic report to ~/.omp/logs when the command reading its output exits early, as in find . -printf '%p\n' | head -1, or when its stderr is closed; it now stops quietly, and a failed -fprintf write is reported instead of find: internal error (#17079 by @trukhinyuri)
  • Fixed the shell's built-in grep and rg running the whole agent out of memory on a file with no line breaks, such as a large sparse file: a line over 256 MiB is now reported as not searched for that file and the search continues, and a -f pattern file over 256 MiB is refused with exit status 2 (#17108 by @sjawhar)
  • Fixed the embedded shell's globs keeping matches whose literal tail does not exist: ls -d DIR/*/ now lists only directories instead of passing every file as file/, and */name keeps only matches that contain name, as in bash (#17110 by @sjawhar)
  • Fixed the embedded shell ignoring shopt -s globstar: ** now matches any number of directory levels as in bash (**/*.rs finds files at every depth, also in compgen -G), and a timeout or interrupt stops a long ** expansion (#17111 by @sjawhar)

@oh-my-pi/pi-tui

Added

  • Added a frame-write listener (TUI.addFrameWriteListener) for terminal integrations that need to react to emitted ANSI output, including resize paints (#17145)
  • HookInputComponent (showHookInput) now accepts { secret: true } to mask typed characters as bullets (•) in input overlays (#17080 by @GTanger)
  • Added an ANSI and native /context viewer with category navigation, content inspection, token-usage and compaction estimates, and keyboard/mouse controls that adapt across Tern and other terminals (#16160 by @C-W-Z).

Fixed

  • Fixed AskDialogComponent's draft input guard holding the keyboard until the draft was cleared; Up/Down (or a pointer action) now release it so the question can be answered with the draft parked, and syncPresentation receives the effective blocked state (#17215 by @H4vC)
  • Fixed the prompt editor's autocomplete popup (e.g. emoji suggestions after :D) staying open and following the cursor after Shift/Ctrl/Alt+Enter inserted a newline, so the next Enter submitted past a stale list; newlines and cursor motion (arrows, Home/End, word jumps, character jumps) now close it (#17215 by @H4vC)
  • Fixed run_watch failed-job rows hiding why a job's logs are unavailable; multiline gh errors now stay on one row (#17173 by @alphastorm)

Removed

  • Removed the static context usage report (ContextUsageView, renderContextUsage, describeContextUsage), contextUsageHead(), and the glyph and color fields of ContextBreakdown categories; use ContextViewer (#16160 by @C-W-Z).
  • Fixed Markdown tables inside list items disappearing from the terminal transcript (#17165).

@oh-my-pi/pi-utils

Added

  • Added deadlineMs and waitMessage cleanup registration options: shutdown waits longer for that callback, but only while it is still pending, and says so on stderr once nothing else is left to wait for (#17128 by @sjawhar)
  • A process stopped by SIGTERM now prints its registered recovery commands after the terminal is handed back, so a stopped omp session shows omp --resume <id> instead of leaving its last frame above the shell prompt like a crash (#17119 by @sjawhar)

Fixed

  • Fixed plain TAR archives requiring a whole-container memory buffer to list entries or read a selected member (#17175 by @alphastorm)

What's Changed

  • fix(coding-agent): keep composer predictions from echoing relayed agent notes by @wolfiesch in #17185
  • feat(coding-agent): compress idle sessions in the background with gc.autoCompress by @wolfiesch in #17189
  • fix(edit): ran the seen-line guard on the stale-tag recovery path by @sjawhar in #17033
  • fix(builtins): stop find quietly when its output or stderr pipe closes by @trukhinyuri in #17079
  • fix(coding-agent): keep extension tools registered while startup plan mode is on by @appboypov in #17085
  • fix(coding-agent): only fetch ReadTheDocs raw source when ref matches version slug by @yuzu-octopus in #17091
  • fix(task): refuse seance-only fields on batch items when seance is hidden by @sjawhar in #17107
  • fix(grep,rg): bound the line buffer and pattern files so one file cannot exhaust the host by @sjawhar in #17108
  • fix(shell): drop glob matches whose literal tail does not exist by @sjawhar in #17110
  • fix(coding-agent): name agent:// and history:// for task jobs whose id is not the agent id by @sjawhar in #17112
  • fix(rpc): reject acknowledged prompts when the client stops or the transport closes by @andrebrait in #17135
  • fix(rpc): answer startup dialogs while extensions start by @andrebrait in #17139
  • feat(coding-agent): make context content inspectable in /context by @C-W-Z in #16160
  • nix packaging refactor by @n3oney in #13752
  • fix(coding-agent): speed up gc --compress and move the compression probe into the gc run by @H4vC in #17195
  • fix(coding-agent): avoid shadowed SQLite rowid aliases by @ai-yang in #17001
  • fix(ci): install floored bun to a writable dir when ~/.bun is read-only by @bse-ai in #17076
  • feat(acp): send the tool name on tool_call by @epk in #17162
  • fix(coding-agent): stop plugin commands applying changes under --dry-run by @sjawhar in #17104
  • fix(builtins): walk rm -r and du with explicit stacks by @sjawhar in #17021
  • fix(coding-agent): keep the system prompt byte-stable across retry fallbacks and roster changes by @sjawhar in #17014
  • perf(tui): memoize the output pane's styled content per frame by @yuzu-octopus in #16779
  • perf(ai): memoize schemaDefinesProperty per schema identity by @yuzu-octopus in #16780
  • fix(apply-patch): require matching context and support move-only sections by @alphastorm in #17184
  • fix(coding-agent): use the cheapest vision model for image descriptions by @gcp in #17196
  • fix(coding-agent): convert markit-supported documents in @file mentions by @GTanger in #17193
  • fix(edit): use the replace edit tool for Qwen 3.8 models by @ianderse in #17096
  • fix(coding-agent): stop Ctrl+V over SSH from pasting the remote host clipboard by @H4vC in #17149
  • fix(ai): purged copilot usage when every endpoint rejects auth by @roboomp in #17086
  • perf(coding-agent): rebuild the model catalog once when clearing several extension sources by @Delije4 in #17088
  • fix(coding-agent): stop job widget spec requests when async.widgets is disabled by @yuzu-octopus in #17090
  • feat(coding-agent): support secret input masking on extension input dialogs by @GTanger in #17080
  • fix(mnemopi): bound the local embedding session's onnxruntime threads by @sjawhar in #17109
  • fix(voice): buffered live playback against jitter and held speaking phase by @roboomp in #17125
  • feat(utils): print recovery hints when SIGTERM stops the process by @sjawhar in #17119
  • feat(rpc): make delta message updates rebuildable by @andrebrait in #17137
  • feat(rpc): navigate the session tree and set labels over RPC by @andrebrait in #17138
  • fix(wait): consume queued wake events instead of skipping wait by @alphastorm in #17174
  • fix(coding-agent): reused persisted cache prefix for side turns by @roboomp in #17188
  • fix(coding-agent): show matched text in TTSR interrupts by @shgew in #17099
  • fix(coding-agent): refresh session skills on learn and preserve recall query turn boundaries by @GTanger in #17113
  • fix(coding-agent): let a chain reach a sibling Claude model after a signed-thinking turn by @sjawhar in #17115
  • fix(shell): stop in-process utilities reading when their command is cancelled by @sjawhar in #17141
  • fix(ai): keep a shared OAuth login alive when processes race to refresh it by @sjawhar in #17128
  • fix(session): resumed the newest copy of a session that continued in a sibling file by @sjawhar in #17159
  • fix(coding-agent): keep queued extension messages through an interrupt by @sjawhar in #17161
  • omp: preserve all stop continuation feedback by @aktanazat in #17129
  • fix(skills): keep plugin skills readable in running sessions after a plugin upgrade by @sjawhar in #17027
  • fix(ai): retry Aliyun multimodal gateway's flaky 400s by @shuairongzeng in #17101
  • feat(extensions): expose MCP server, tool name and readOnlyHint in ToolInfo by @cfpperche in #17120
  • fix(ai): classify Google RPC QuotaFailure, RetryInfo, and MODEL_CAPACITY_EXHAUSTED details by @GTanger in #17127
  • fix(tui): restored program status after prompt redraws by @roboomp in #17147
  • pi-ast: make tree-sitter wasm an opt-in feature (default on) by @ianks in #17153
  • fix(proc): distinguish service controls from in-process jobs by @alphastorm in #17170
  • fix(cli): start fresh when implicit auto-resume cannot restore its model by @SAKANA-MOONLIGHT in #17163
  • feat(catalog): discover LM Studio decision models as judges by @richiestanaway in #17169
  • fix(read): keep raw reads to the requested source bytes by @alphastorm in #17171
  • fix(github): keep run_watch and pr_create results truthful and concise by @alphastorm in #17173
  • fix(read): read pdf archive members and index large plain tars lazily by @alphastorm in #17175
  • fix(eval): keep eval's advertised contract in step with what runs by @alphastorm in #17178
  • fix(read): apply json selectors to bom, backup, modifier-only and ssh targets by @alphastorm in #17179
  • fix(tui): rendered tables inside list items by @roboomp in #17168
  • fix(read): stop substituting guessed Markdown for valid HTML by @roboomp in #16838
  • fix(glob): honor directory-only patterns and linked skill entries by @alphastorm in #17180
  • fix(worktree): keep source-only environments and ignored paths out of clones by @alphastorm in #17181
  • fix(ssh): resolve home-relative paths and search directory scopes by @alphastorm in #17182
  • fix(coding-agent): preserve auto thinking in retry fallback selectors by @shgew in #17100
  • feat(coding-agent): allow directory-scoped resume picker by @Dante-dan in #17061
  • feat(advisor): add per-advisor session scope and includeReasoning in WATCHDOG.yml by @trukhinyuri in #17058
  • fix(coding-agent): trust a /v1/models row's own reasoning declaration by @Youwenqwq in #17077
  • fix(shell): reaped background jobs and preserved nested pid by @roboomp in #17146
  • fix(sort): bound the in-process sort's memory by its buffer and stop it on cancel by @sjawhar in #17155
  • fix(shell): make shopt -s globstar match ** recursively by @sjawhar in #17111
  • fix(coding-agent): keep the date/cwd reminder append-only when turns are re-allocated by @sjawhar in #17117
  • feat(session): move idle maintenance to a session-owned scheduler by @andrebrait in #17136
  • fix(coding-agent): render the workflowz notice for the session's eval runtimes and workpool mode by @bigHippoZz in #17152
  • feat(rpc): expose native dictation to RPC hosts by @felipe-santos-aya in #17158
  • feat(coding-agent): expose lsp and ast_grep on bundled scout agent by @sinhduc01 in #17151
  • perf(diff): replace Rc linked list with flat arena in myers_diff by @GTanger in #17015
  • feat(extensions): direct control of built-in session modes by @Shadorain in #15753
  • fix(tui): close stale autocomplete, answerable ask with draft, reachable agent hub by @H4vC in #17215

New Contributors

Full Changelog: v18.13.1...v18.13.2

Don't miss a new oh-my-pi release

NewReleases is sending notifications on new releases.