@oh-my-pi/pi-agent-core
Fixed
- Stopped the compaction
<files>summary from trackingscheme://URLs — internal URIs (conflict://,artifact://,local://,history://, …) and web URLs are no longer recorded as files, and legacy entries rehydrated from older compaction summaries are dropped.
@oh-my-pi/pi-ai
Fixed
- Improved reliability of auth-broker snapshot loading by implementing a robust manual schema check
- Fixed MCP tool argument validation to drop optional empty-string parameters before schema validation, matching the existing optional null handling and avoiding pattern/type failures for omitted model-filled fields. (#2981)
- Fixed API-key credential replacement to hard-delete superseded disabled
api_keyrows soauth_credentialsdoes not grow indefinitely after key rotation. (#2941) - Fixed Cursor provider streaming to close text blocks before tool calls so post-tool text opens a new content block and TUI transcript cards render inline instead of grouped near the bottom. (#2924)
@oh-my-pi/pi-catalog
Changed
- Refactored model family ID predicates and capability checkers to use a shared, uniform process-lifetime
memoutility to eliminate caching boilerplate.
Fixed
- Fixed LM Studio dynamic discovery to use native
/api/v0/modelsmetadata so VLM models advertise image input. (#2945)
@oh-my-pi/pi-coding-agent
Changed
- Optimized app startup time by lazily loading site-specific scraper modules
- Refactored internal archive handling into a unified
src/utils/zip.tsmodule - Centralized all
fflate(ZIP) andBun.Archive(tar/tar.gz) operations intozip.ts - Optimized archive reading by using lazy, ranged central-directory access for ZIP files
- Updated internal image processing to no longer include metadata text for fetched images
- Optimized
omp://documentation indexing by compressing doc bodies into a lazily-inflated blob - Changed Mermaid fenced-block ASCII rendering to use the first-party vendored renderer in
@oh-my-pi/pi-utils(src/vendor/mermaid-ascii), dropping thebeautiful-mermaidnpm package, its transitiveelkjs(~3.13MB), and thebeautiful-mermaidbun patch; CJK/emoji width handling and the layout-direction override are preserved. - Changed
omp://documentation embedding to a gzipped base64 index (docs-index.generated.txt, populated at build time and reset afterward) inflated on first read, instead of a ~1.6MB raw TypeScript map. The compiled binary / npm bundle drops ~0.9MB; the dev tree and source checkouts readdocs/from disk. - Replaced the
markit-aipackage with a vendored in-house document engine (src/markit) for the document formats it converts: PDF (viamupdf), DOCX (viamammoth), and PPTX/XLSX/EPUB (viafast-xml-parser). Conversion output is preserved, including the PDF column/table-detection pipeline and HTML-table normalization;markit-ai's unused converters and their dependency tail are gone. Legacy.doc/.ppt/.xls/.rtfremain unsupported (a conversion error), as before. - Centralized ZIP handling behind a single
src/utils/zip.ts(fflate): the new document converters, thewritetool's in-place archive editing, and thereadtool's ranged archive reader now share one ZIP implementation instead of mixingjszipandfflate.
Fixed
- Fixed settings overlay crash when scrolling past the last row in list views
- Improved tool result formatting by correctly wrapping
<out>blocks in dim-ink toggles - Fixed auto-retry after transient model-stream socket closes to replay text/thinking-only partial assistant output, including turns where incomplete tool-call arguments were dropped; completed tool calls still block retry to avoid duplicating tool execution.
- Fixed
omp updatereportingEPERM: operation not permitted, unlink '<binary>.bak'on Windows when self-replacing a standalone binary, even though the new binary had already been installed. The backed-up old executable is still the running process image and cannot be unlinked until the process exits, so the post-verify backup cleanup is now best-effort, backups use a unique per-attempt name, and stale backups are swept on the next update (#845). - Fixed plan-mode
Refine planso the internal approval abort is hidden and the editor is ready for a follow-up prompt instead of showingOperation aborted(#2971). - Fixed TUI prompts beginning with shell-style variables such as
$HOMEbeing misrouted to Python eval; Python shortcuts now require$ <code>or$$ <code>. (#2944) - Fixed LM Studio runtime discovery to use native
/api/v0/modelsmetadata soinspect_imagecan select VLM models. (#2945) - Fixed
ompcrashing at startup withCannot find module './browser-data/browser-data.js'(e.g. on Termux/proot Linux arm64).tools/browser/attach.tsvalue-imported theTargetTypeenum frompuppeteer-core, which dragged the puppeteer-core barrel (and its@puppeteer/browsersChromium downloader) back onto the eager startup import graph — defeating the lazy-load deferral and turning any bundling quirk in that subtree into a fatal boot crash instead of a recoverable browser-tool error. The import is nowimport typeand the target check compares against the"page"literal, so puppeteer only loads on first browser use. - Fixed the standalone compiled binary aborting at startup with
error: Cannot find package 'mupdf'. The vendored document engine keptmupdfexternal, but a single-filebun --compilebinary has nonode_modulesto resolve it from, and the bundler resolves the otherwise-lazy import eagerly at boot.mupdf(and its WASM module, embedded at build time viascripts/embed-mupdf-wasm.ts) is now bundled into the binary, so startup and PDF/document conversion both work in the standalone binary; npm and source installs still loadmupdffromnode_modules.mupdfis also imported lazily inside the PDF converter now, which fixes a compiled-bundle init-order hazard —mupdf's top-level await made the bundled markit chunk's module init async, exposing the converters before their extension tables initialized — and keeps the ~10MB WASM off non-PDF document conversions.
Removed
- Removed the
markit-ai,exifr,music-metadata, and directjszipdependencies. As a side effect, fetching an image or audio URL no longer appends EXIF/audio metadata text; image inlining and resizing are unchanged, and document conversion (PDF/DOCX/PPTX/XLSX/EPUB) is unaffected.
@oh-my-pi/snapcompact
Added
- Added
<out>block wrapping for tool results to improve document structure - Rendered thinking process as italicized blocks above assistant text
- Displayed tool call intents as
//comments in tool call headers - Changed conversation role markers to standard Markdown headings
Changed
- Merged tool results into their corresponding tool call blocks
- Preserved prose formatting around tool calls to maintain conversation flow
- Hidden
_iargument from tool call output when an intent is provided - Optimized assistant turn output to group thinking and text blocks efficiently
Fixed
- Fixed improper splitting of assistant messages around useless tool calls
@oh-my-pi/pi-tui
Fixed
- Fixed bracketed paste under kitty+tmux leaking
[27;5;106~escape tails throughout the pasted text (newlines became visible garbage instead of line breaks). tmux's defaultextended-keys-format=xtermre-encodes paste control bytes asmodifyOtherKeyssequences (ESC[27;5;<code>~), which the paste sanitizer did not decode — only the siblingcsi-uform (ESC[<code>;5u) was handled. Both forms are now decoded back to their literal control byte (Ctrl+J → "\n") before control-character stripping, and the decoder is shared by the multi-line editor and the single-line modal input.
@oh-my-pi/pi-utils
Changed
- Mermaid diagrams are now rendered to ASCII by a first-party vendored renderer (
src/vendor/mermaid-ascii, derived from the MIT-licensedbeautiful-mermaid, ASCII pipeline only) with terminal display width measured viaBun.stringWidth(grapheme-aware, correct for wide/East-Asian glyphs and emoji). Inline label formatting (HTML formatting tags and markdown emphasis) is now reduced to plain text instead of printed raw.
Removed
- Removed the external
beautiful-mermaiddependency (and its transitiveelkjs, ~3.13MB) in favor of the vendored ASCII renderer.
What's Changed
- fix(coding-agent): hide plan refine approval abort by @roboomp in #2978
- fix(ai): preserve Cursor tool-call ordering by @roboomp in #2927
- fix(ai): purge superseded API-key credential rows by @roboomp in #2943
- fix(providers): detect LM Studio VLM image input by @roboomp in #2948
- fix(tui): require space after python prompt sigil by @roboomp in #2949
- fix(ai): prune optional empty tool params by @roboomp in #2983
Full Changelog: v16.0.7...v16.0.8