@oh-my-pi/pi-coding-agent
Added
- Added
providers.autoThinkingModelsetting so users can choose theautothinking classifier backend (online smol or local tiny-memory model) - Added an
autothinking level that classifies each real user turn and resolves to a concrete low-through-xhigh effort, with online smol classification by default and an opt-in local on-device classifier.
Changed
- Updated the interactive thinking selectors in model/model-role pickers and ACP thinking options to include
autoas a selectable level - Updated footer and status-line rendering to show
autowhile auto-thinking is being resolved andauto → <level>once it resolves - Changed the local tiny-model device default to CPU on every platform; explicit
providers.tinyModelDevice/PI_TINY_DEVICEvalues still opt into accelerated ONNX providers.
Fixed
- Prevented auto-thinking classification from running on non-user synthetic turns and non-reasoning models, keeping the session on its provisional concrete effort
- Added a bounded auto-thinking classification path that falls back to the provisional effort on failures/timeouts so prompts continue without interruption
- Bypassed auto classifier for
ultrathinkprompts and resolved directly to the highest supported auto effort - Fixed the JavaScript
evalkernel crashing the whole process with a segfault (SIGTRAP,getImportedModuleon a null record) when imported code reached a local module whose relative-import graph contains a cycle — e.g.await import("…/edit/streaming.ts"), or any workspace path with cyclic re-exports. TheLocalModuleLoaderlinked and evaluated each local module individually inside the recursivevm.SourceTextModulelinker callback, which re-entered Bun'snode:vmmodule linker mid-instantiation and detonated JSC on the first cycle. The loader now constructs the entire local module graph first and drives a singlelink()+evaluate()from the graph root, so cyclic graphs instantiate in one pass; external (node_modules) modules stay eagerly loaded since they carry no imports and cannot form a cycle. - Fixed the streaming
editpreview rendering a blank box for hashline edits whose payload sits on the trailing in-flight line (the common single-opreplace/insertcase). The preview path trimmed that still-typing line before diffing, so a single-payload op collapsed to a "No changes" result — shown as an empty box — for almost the entire stream. Hashline previews now feed the raw in-flight text throughapplyPartialTo, whose streaming-tolerant parser drops a payload-less trailing op and projects a partially-typed payload line as it grows, so the diff appears and fills in live. Transient errors from the actively-typed trailing section are also suppressed while streaming (regardless of section count) so a mid-typed op can't wipe an already-good preview frame; real errors still surface once args are complete.
@oh-my-pi/pi-mnemosyne
Fixed
- Fixed Windows startup crashes by keeping fastembed's older ONNX Runtime binding lazy until local embeddings are used.
- Fixed a segfault at startup from eagerly loading fastembed: importing the embeddings module pulled in
fastembed, which eagerly loads theonnxruntime-nodenative addon. The import is now deferred until a local fastembed model is actually initialized, so API-model, disabled-embeddings, and test runtimes never load the native addon.
What's Changed
- fix: prevent Windows ORT preload crash by @segmentationf4u1t in #1561
Full Changelog: v15.7.1...v15.7.2