@oh-my-pi/pi-agent-core
Added
AgentTool.concurrencynow also accepts a per-call resolver function(args) => "shared" | "exclusive", letting tools pick the scheduling mode from the call's arguments (a throwing resolver falls back to"exclusive")
Fixed
- Fixed whitespace-only error tool results so Anthropic requests no longer 400 with
tool_result: content cannot be empty if is_error is trueand wedge the session on every subsequent turn
@oh-my-pi/pi-ai
Fixed
- Fixed Anthropic encoding of error tool results with whitespace-only content so requests no longer 400 with
tool_result: content cannot be empty if is_error is true
@oh-my-pi/pi-coding-agent
Added
- Added the Expert Elixir language server (
expert, invoked asexpert --stdio) to the built-in LSP server list, auto-detected for Mix projects (mix.exs/mix.lock). When both are installed,elixir-lsremains the primary navigation server (Expert is ordered after it). - Added
magicKeywords.enabledand per-keywordmagicKeywords.ultrathink,magicKeywords.orchestrate, andmagicKeywords.workflowsettings to disable hidden magic-keyword notices and ultrathink auto-thinking escalation (#1796). - Added external-editor support for Plan Review section annotations, preserving multiline feedback for Refine plan (#2305).
- Added plain-RPC slash command discovery with command source metadata and startup/update notifications (#2261).
Changed
- Bash tool calls in one assistant message now run in parallel instead of serializing the batch: non-pty
bashis scheduled as a shared tool (pty: truestays exclusive), and overlapping calls on the same shell session key degrade to isolated one-shot shells so they cannot queue behind or abort each other
Fixed
- Fixed CDP attach target selection for Chromium/Edge endpoints that expose page targets through discovery before
browser.pages()is populated, and improvedws://app.cdp_urldiagnostics (#2246). - Fixed local memory consolidation on Responses-style models that reject user-only requests by sending a dedicated stage-two system prompt.
- Fixed extension, custom-tool, custom-command, and hook loaders injecting
pithrough bare@oh-my-pi/pi-coding-agentself-imports, which could pull a different cached package version into global installs during plugin load and trigger mixed-runtime stack overflows. - Marked unsmoothed assistant streaming renders as transient so streamed code blocks can avoid synchronous syntax highlighting until the message finalizes.
- Routed LSP hover code rendering through the shared cached highlighter instead of calling the native highlighter directly on each render.
- Kept smooth assistant streaming renders transient until
message_endso catch-up frames do not synchronously re-highlight still-growing code blocks. - Fixed the
jobtool's poll header repeating the running count ("waiting on 19 of 19 19 running"): the title now reads "waiting on N jobs" (or "waiting on N of M jobs" when some settled) and the dim meta lists only settled categories (done/failed/cancelled) - Fixed
ircsend await:trueto a busy peer stranding the sender until timeout when async execution is disabled: the recipient (e.g. Main blocked in a synchronous task spawn awaiting the sender's own batch) can never reach a step boundary to reply, so it now generates an ephemeral side-channel auto-reply from its context (the pre-mailboxrespondAsBackgroundbehavior), records it as anirc:autoreplyaside in its own history, and delivers it back over the bus withreplyTothreading - Fixed Windows-style backslash paths and globs being parsed as literal POSIX path segments by search/find tools (#2245).
@oh-my-pi/pi-tui
Fixed
- Fixed Ctrl+C/exit corrupting the parent shell on Windows:
emergencyTerminalRestore()wrote\x1b[?1049l(leave alternate screen) unconditionally on every exit path, and conhost/Windows Terminal execute an unconditional cursor restore for it even when the alt buffer was never entered — with no prior save the cursor jumped to the viewport home, so the shell prompt landed on top of the dead frame. The leave sequence is now gated on tracked alt-screen state (set/cleared by the TUI's fullscreen-overlay enter/leave and stop paths). - Skipped native syntax highlighting for transient markdown streaming renders, including nested list code blocks, leaving code blocks plain until their content stabilizes to avoid main-thread highlighter spikes.
What's Changed
- fix: prevent Anthropic 400 on empty error tool results by @Mokto in #2250
- feat(coding-agent): add Expert Elixir language server to built-in LSP defaults by @tlarevo in #2282
- fix(browser): attach to discovered CDP pages by @danzaio in #2264
- fix(coding-agent): avoid mixed-runtime self imports in loaders by @jiwangyihao in #2297
- fix(tools): normalize Windows search paths by @danzaio in #2263
- Avoid transient syntax highlight work by @cexll in #2310
- feat(rpc): expose slash command metadata by @danzaio in #2262
- feat(prompting): add magic keyword toggles by @danzaio in #2283
- Add external editor for Plan Review annotations by @daandden in #2308
New Contributors
Full Changelog: v15.11.1...v15.11.2