@oh-my-pi/pi-ai
Removed
- Removed ANTML stream markup healing for
antml:function_callsandantml:thinkingenvelopes, so Anthropic-compatible providers no longer parse those tags intotoolCall/thinkingevents
Fixed
- Fixed GLM-5.x coding-plan OpenAI-compatible streams to use a longer default watchdog window, avoiding spurious
OpenAI completions stream stalled while waiting for the next eventerrors during slowglm-5.1thinking/output phases. (#1494) - Fixed
zhipu-coding-planmodel discovery and credential validation to use the dedicated GLM Coding Plan endpoint (https://open.bigmodel.cn/api/coding/paas/v4) instead of the general BigModel endpoint, preventing requests from consuming ordinary account balance. (#1494) - Fixed DeepSeek tool calls failing on NanoGPT (e.g.
nanogpt/deepseek/deepseek-v4-prowith reasoning enabled) by routing tool-bearing DeepSeek requests through NanoGPT's:toolsmodel route and addingnanogptto the DSML leak allowlist so streamed<|DSML|tool_calls>...</|DSML|tool_calls>envelopes are healed into structured tool calls instead of being passed through as visible text. (#1488) - Fixed DeepSeek tool calls failing on NanoGPT (e.g.
nanogpt/deepseek/deepseek-v4-prowith reasoning enabled) by addingnanogptto the DSML leak allowlist so streamed<|DSML|tool_calls>...</|DSML|tool_calls>envelopes are healed into structured tool calls instead of being passed through as visible text. The:toolsmodel suffix is no longer appended on NanoGPT; that route triggered NanoGPT's server-side tool-call parser and 502'd withcode: "malformed_tool_call"on complex tool schemas (todo_write) — the default route forwardsdelta.content(including DSML envelopes) which is healed client-side. (#1488) - Fixed OpenAI-compatible streamed parallel tool calls losing indexed argument deltas by tracking active tool-call blocks by the provider's
tool_calls[].index; this keeps parallel NanoGPTreadcalls from merging or dropping theirpatharguments. (#1488)
@oh-my-pi/pi-coding-agent
Added
- Added the
omp-pluginsdiscovery provider, which scans every extension package directory configured viaextensions:(in~/.omp/agent/settings.jsonor<cwd>/.omp/settings.json) or--extension/-eon the CLI forskills/,hooks/pre|post/,tools/,commands/,rules/,prompts/, and.mcp.json. Prior to this, only the extension's TypeScript factory module ran; every sibling capability the docs (https://omp.sh/docs/extension-authoring) advertised was silently ignored (#1496). - Added the top-level
omp install <target>subcommand documented at https://omp.sh/docs/extension-authoring. Local paths route toomp plugin link(so the directory is symlinked into the plugin set), and npm/marketplace specs route toomp plugin install. Before this,installwas not a registered subcommand and the CLI runner silently forwardedinstall ./my-extensiontolaunchas an initial LLM prompt (#1496).
Changed
- Changed the sticky
Todospanel above the editor to advance as tasks close, instead of pinning to the first 5 tasks of the active phase.selectStickyTodoWindownow shows up to 5 open (pending / in_progress) tasks in original phase order and reports the count of remaining open tasks for the+N morehint, so everytodo_writeflip produces a visible row shift. Closed-phase tail falls back to the last 5 tasks (with the+N moreline suppressed) untilgetActivePhasewalks to the next phase. - Linked the sticky
Todospanel to the liveSessionObserverRegistryso pending todos that have an in-flight subagent doing their work light up green with an animated spinner — the sametheme.spinnerFrames("status" preset) thetasktool uses for its agent rows — instead of staying greyed out as if nothing is happening. A new exportedtodoMatchesAnyDescription(content, descriptions)does case- and whitespace-insensitive equality first with a 6-char minimum-overlap substring fallback in either direction, so "Sonnet #2: shallow bug scan" and a subagent description of "Sonnet #2" still link up. Completed todos now render withtheme.status.success(✔ /\uf00c/[ok]per symbol preset, still wrapped in thesuccesscolour so themed palettes can keep their purple/green/whatever) and in_progress rows render withtheme.status.running, matching thetasktool's icon vocabulary. The spinner interval only ticks while at least one visible open todo has a matched active subagent, and self-stops once subagents finish, so plain in_progress todos do not animate forever in the absence of subagent activity. - Extracted the top-level CLI command table from
src/cli.tsinto a side-effect-freesrc/cli-commands.tsso test code can introspect the registered subcommands without triggering the entrypoint's top-level await.
@oh-my-pi/hashline
Changed
InMemorySnapshotStorenow coalesces consecutive same-path reads into one tag whenever their views agree on every shared line. Overlapping or directly abutting range reads extend the existing snapshot's contiguous run in place; reads separated by a gap union into aSparseSnapshotspanning both ranges. A disagreeing shared line is treated as "the file changed on disk" and mints a fresh tag, preserving the prior superset-dedup behavior. This stops sequential range reads of an unchanged file (e.g.:50-100then:100-200, or:1-100then:150-200) from fragmenting into separate anchors.
@oh-my-pi/pi-tui
Fixed
- Fixed terminal resizes corrupting native scrollback with duplicated rows. The 15.4.0 change that defers a destructive scrollback clear+replay (so a user scrolled into history is not yanked while a streaming tail cell mutates) also caught genuine width/height resizes: a resize reflows the terminal's own committed scrollback at the new geometry, but repainting only the viewport left the stale old-size rows in history, so every overflowed row showed up twice (old-size wrap + new-size copy) when scrolling back, until the next prompt submit cleaned it up.
#planRendernow rebuilds history synchronously when the frame's geometry actually changed (widthChanged || heightChanged) via the restoredhistoryRebuildintent, and defers the rebuild only for pure content mutations where the user may be reading scrollback mid-stream.
What's Changed
- fix(tui): deferred native scrollback rebuilds by @H4vC in #1478
- fix(discovery): wire extension package sub-dirs + add top-level
installby @roboomp in #1498 - fix(ai): widen GLM coding-plan stream watchdog by @roboomp in #1495
- feat(coding-agent): advance the sticky todo panel as tasks close by @oldschoola in #1501
Full Changelog: v15.5.11...v15.5.12