🐙
$ git clone https://github.com/can1357/oh-my-pi.git
).
Hardened compaction summarization against prompt injection: conversation history and previous summaries are now treated as untrusted, and embedded
Compaction summarization input is now bounded to the summary model's context (windowed fold for oversized spans) and deterministic context-overflow 400s are no longer retried up to the full retry budget; artifact ids containing
Fixed remote compaction mirroring the ).
<conversation>/<previous-summary> boundary tags are neutralized before prompt assembly ().503 no longer misclassify hard 400s as transient.@oh-my-pi/pi-ai
Changed
- Fixed Gemini thought summaries occasionally leaking a raw
```thinking/``````thinkingfence delimiter into the reasoning block, so it no longer shows up as fence spam in the thinking display or persisted transcripts (). - Fixed Anthropic-compatible endpoints with strict prompt validation (e.g. Z.AI GLM
api.z.ai/api/anthropic, which rejects the whole request with400 code 1213 "The prompt parameter was not received normally") failing sessions once a tool returned empty output on a vision-capable model: empty successfultool_resultblocks now encode ascontent: ""instead ofcontent: [], which both the official API and strict compatible endpoints accept. - Fixed
retry.usageReservePct(Reserve Margin) ignoring Claude Fable/Mythos weekly tier usage until it hit 100%, so a Fable model kept serving turns past the configured reserve; reserve health now honors the mapped tier row while credential-wide hard blocks still require confirmed exhaustion (). - Fixed opencode-go (Console Go) rejecting Responses turns with
400 No tool output found for tool call …(naming a random call of the batch on each retry) when a model streamed a trailing text/thinking block after its tool calls:buildResponsesInputemitted that block as an assistantmessageitem wedged between thefunction_callbatch and itsfunction_call_outputitems. Such interleaved messages are now hoisted ahead of their call batch (canonicalmessage(s) → calls → outputs), which the strict gateway validator accepts; content is unchanged (). - Fixed OAuth login (Codex
localhost:1455, and anylocalhostcallback flow) failing on hosts with IPv6 disabled at the kernel (ipv6.disable=1). The::1companion listener added in ), which the in-use check misread as a real collision — tearing down the healthy IPv4 listener and surfacing a bogus "port 1455 is in use" error. The dual-bind path now detects the missing IPv6 loopback up front and serves IPv4 alone (). - Regenerated the Cursor agent protobufs to model hosted WebFetch permission queries (
interaction_query/interaction_responsefield 9) and the matchingToolCallvariant (field 37).
Fixed
- Fixed a physically corrupt
models.db(SQLITE_CORRUPT*/SQLITE_NOTADB, "database disk image is malformed") permanently disabling the model cache. The shared read/write paths swallowed unrecoverable SQLite corruption as a best-effort miss and cached the broken handle, so a successful live catalog could never overwrite the corrupt cache and every later process repeated the miss — a runtime provider extension with no bundled catalog was left with only its bootstrap model. Corruption now self-heals: the cache closes the handle, quarantinesmodels.db(+-wal/-shm) aside, recreates a fresh database, and retries the operation once;SQLITE_BUSY, permission, and unrelated errors keep their existing best-effort paths (). - Cloud Code Assist Gemini 3.6/3.7 Flash no longer maps user
minimalto wirethinkingLevel: MINIMALwhen that effort is aliased onto the-lowSKU. The request now sendsLOW, which those SKUs accept. - Fixed SuperGrok (
xai-oauth) Grok 4.6 hiding the thinking-level picker: the Responses effort-capable allowlist now includesgrok-4.6, so/modelcan select the documentedlow/medium/high/xhighladder (maxis rejected by api.x.ai). - Marked CoreWeave runtime discovery as authoritative so stale bundled model ids that the endpoint no longer serves stop appearing as selectable models.
- ChatGPT Codex discovery that advertises only worker
-wmSKUs now also registers the plain model route, so a configuredopenai-codex/<model>keeps resolving instead of fuzzy-falling-back to the-wmSKU some accounts reject. - Fixed
opencode-go/muse-spark-1.2(andmuse-spark-1.2-contributor) failing every tool-call turn withOpenAI completions stream closed before a finish_reason was received. The Go gateway serves these ids only at/zen/go/v1/responses, but the/zen/go/v1/modelsdiscovery omits theprovider.npmhint, so the resolver fell through toopenai-completions; both ids are now pinned toopenai-responseslikedeepseek-v4-flash(). - Fixed Cursor Grok 4.5/4.6 discovery classifying the versioned ids as non-reasoning:
GetUsableModelsships nothinkingDetailsand the bundled references readreasoning: false, so the picker hid the effort ladder. Discovery now markscursor-grok-<version>ids as reasoning models (the non-reasoninggrok-code-*ids stay out) ().
@oh-my-pi/pi-coding-agent
Added
- Added
providers.cacheRetentionsetting (/settings→ Providers → Protocol) to control prompt-cache retention per request:autokeeps the provider default (Anthropic: 5m entries with idle keep-alive refreshes),shortforces 5m,longrestores 1h TTLs where supported and disables the keep-alive refresh loop,nonedisables prompt caching.
Changed
- The
readtool now materializes a local text file once per invocation instead of once per consumer. A ranged read of a file within the snapshot cap previously cost four opens and three UTF-8 decodes — an 8KiB binary sniff, a streaming scan for the rendered window, a whole-file read for bracket context, and another whole-file read to hash the snapshot — with two of those readers separately normalizing line endings; whole-file reads under the structural summarizer paid a fifth read. Byte counts and truncation boundaries are now measured on the buffered bytes, so they stay exact for content that is not valid UTF-8. Files above the snapshot cap keep streaming, since nothing on that path wants the whole file. Raw reads, which skip the tree-sitter parse that documented the old cost, no longer pay for it. - Documented that
bash.patternsgates thebashtool only and does not cover a shell thatevalcan spawn via subprocess, and that closing that path needs atools.approval.evalpolicy — noted indocs/bash-tool-runtime.md,docs/approval-mode.md, anddocs/settings.md(). - Fixed a submitted
/skill:<name>command staying invisible in the transcript until its awaited preflight (memory recall,before_agent_starthooks, auto-thinking classification, pre-prompt compaction) finished, so a slow step such as a Hindsight auto-recall timeout made the command look unaccepted. Idle skill submissions now paint an optimistic row immediately — like a normal prompt — and reconcile it in place when the canonicalmessage_startlands (). - Fixed
omp commitsplit-commit failing withcorrupt binary patchwhen a split commit contains a binary file.parseFileDiffssplit the captured diff on"\ndiff --git ", consuming the\nthat terminates each block, andpatch.joinstripped trailing newlines — both dropped the blank line that terminates aGIT binary patchblock, so the rebuilt patch was rejected bygit apply --binary. Both trailing and mid-diff binary blocks now survive the parse/rebuild round-trip byte-exact (). - Fixed Claude Code marketplace plugins ignoring the
enabledPluginsswitch in~/.claude/settings.jsonand.claude/settings(.local).json: a plugin turned off for a project no longer loads there, and a local-scope install enabled for a project loads even when its recordedprojectPathis a different directory - Fixed revived subagents (warm lifecycle reviver and cold persisted reviver) rebuilding the session without initializing the extension runtime, leaving every runtime action throwing
ExtensionRuntimeNotInitializedError. An extension with atool_callhandler that touched a runtime action (e.g.appendEntry) then tripped the fail-closed gate inemitToolCalland blocked every tool — including the hiddenyield— so the revived agent could neither finish nor exit and looped until killed. Both revivers now call the sharedinitializeExtensionshelper, restoring runtime actions,onError, and thesession_startevent (). - Fixed a mid-run compaction being misread as a phantom overflow: after a compaction rebased the in-flight context snapshot,
getContextBreakdownused message position (anchorIndex >= cutoffCount) as a freshness proxy, so an in-flight provider response whose request predated the compaction out-ranked the rebased estimate and reported the pre-compaction token count (~2.6x the real one). This tripped the "Compaction freed too little context to make progress" guard and drove the frame-rescue path on a byte-identicaltokensBefore. Assistant context snapshots now carry a monotonic compaction epoch, and a post-cutoff anchor whose epoch predates the last compaction is no longer trusted over the rebased estimate (). - Fixed the TinyFish web search provider ignoring the
lang:/language:query directive, so every request fell back to the API's US/English geolocation.parsed.langnow maps onto TinyFish'slocation/languageparameters (e.g.lang:it-it→location=IT&language=it), matching the DuckDuckGo, Perplexity, and SearXNG providers (). - Fixed task and eval subagents discovering newly added agent definitions while resolving their role aliases from stale startup settings. Subagent preflight now atomically reloads persisted settings before agent discovery while preserving live runtime overrides.
- Fixed images returned by tools mounted under
xd://rendering only as file links instead of inline terminal graphics. - Resume Cursor idle-stall turns after completed MCP/todo tool results. The watchdog already closes the Connect stream, so unmarked blocks no longer need the
exec-resolvedmarker to continue. - Fixed the Web Search Provider Order settings summary showing providers excluded from web search ( by )
- Fixed the clipboard image-paste keybind attaching Finder's generated file icon instead of the copied image on macOS. Current Finder
Cmd+Cpasteboards advertise both apublic.file-urland a generated 1024x1024 icon bitmap, soarboard::get_image()succeeded with the icon andInputController.handleImagePasteattached it before the file-URL branch was ever reached. The handler now probesreadMacFileUrlsFromClipboard()before the bitmap representation, so an image file URL wins over the co-advertised icon; pure bitmap pasteboards (screenshots, browser copies) and non-image file URLs still fall through to the image/text paths (). - Fixed OpenCode MCP servers 401ing when config used OpenCode's
{env:VAR}/{file:path}substitution (e.g.Bearer {env:MCP_KEY}headers); the OpenCode loader now expands those tokens the way OpenCode does instead of only${VAR}(). - Fixed worker subprocesses (memory embeddings, tiny-model titles, TTS/STT, JS eval, browser relay, LSP mux, daemon broker) running with their cwd pinned to the CLI install directory. They share the agent's foreground process group, and terminal cwd heuristics such as kitty's
new_tab_with_cwdpick the newest process in that group, so new terminal tabs opened in~/.bun/install/global/node_modules/@oh-my-pi/pi-coding-agent/distwhile any worker was alive. Workers now spawn with the absolute host entry and inherit the agent's cwd. - Preserved MCP
ImageContenttool-result blocks so vision-capable models and the TUI can inspect returned images instead of receiving only a text placeholder (). - Fixed high CPU during multi-subagent / workflowz / orchestrate sessions: each live tool block (streaming args, a running partial tool, or a
tasksubagent) armed its own 80ms spinnersetIntervaldrivingrequestComponentRender, so N concurrent live blocks created N unsynchronized repaint timers that kept the render scheduler awake near-continuously. The per-block timers are now consolidated into a single shared spinner ticker that repaints every live block in one coalesced frame per glyph step, independent of block count () - Added
.cssto the built-in Biome serverfileTypesso CSS files route through Biome's linter/asserter by default instead of requiring a full per-projectfileTypesoverride. ( by ). - Fixed PlanYolo plan approval dropping all MCP tools: the post-handoff tool restore now accounts for MCP discovery that completed while planning instead of restoring a pre-discovery snapshot.
- Fixed parallel
web_searchcalls hanging forever past the 60s timeout when the shared headless-browser daemon or page died mid-setup; browser fallback setup and teardown are now abort-protected (). - Fixed terminals that deliver Shift+Enter as a bare LF (or the legacy CSI
13;2~form) getting a plain switch instead of summarize-and-switch in the/treeselector (). - Fixed
/mcp reauthrefusing to run the OAuth flow for HTTP MCP servers that allow unauthenticatedinitializebut require auth fortools/call; endpoint discovery now runs against the server URL before giving up ().
@oh-my-pi/pi-tui
Fixed
- Fixed images rendering as the
[Image: …]text card on SIXEL terminals that expose no identifying environment variable (foot, xterm, contour): the graphics probe no longer requires Windows Terminal, and no longer reads an XTSMGRAPHICS success reply as a failure. - Fixed the multiline editor ignoring a
tui.input.submitremap onto Ctrl+Enter: the hardcoded Ctrl/Shift+Enter → newline fallbacks now yield to an explicit submit binding, so Ctrl+Enter can be used to submit ( in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in made their first contribution in
Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf github.com.
Wie bewertest du diesen Beitrag?
1 Klick Feedback Teilen mit Netzwerk & Team:
Hat Ihnen dieser Tipp / Anleitung geholfen?
Community-Analysen & Experten-Meinungen 0
Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf „ Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum 🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Tipp: Mit Pfeiltasten [ ← ] und [ → ] blättern
SOCIAL SHARE CARD GENERATOR