@oh-my-pi/pi-ai
Added
- Added Synthetic (synthetic.new) usage provider:
/usagenow reports the rolling 5-hour request limit and weekly credit quota viaGET /v2/quotas, including per-tick regeneration rates in the window labels. - Added optional
UsageWindow.resetLabelso rolling windows can render their countdown with an accurate verb (e.g. "tick in 12m" / "regen in 51m" instead of "resets in") — both quota windows on Synthetic regenerate incrementally rather than hard-resetting.
Fixed
- Fixed GitHub Copilot OpenAI-compatible requests being rejected when the session's native OpenAI service tier was set to
priority(#5160 by @audreyt). - Fixed OpenAI Responses token-cap truncations suppressing fully streamed function and custom tool calls whose inputs are complete.
- Added SuperGrok (
xai-oauth) usage tracking for weekly credits, product limits, and positive on-demand caps.
@oh-my-pi/pi-catalog
Changed
- Renamed
codex-auto-reviewmodel toGPT-5.3 Codex Sparkwith updated pricing and capabilities - Removed image input support from GPT-5.3 Codex Spark (text-only)
- Reduced GPT-5.3 Codex Spark context window from 272K to 128K tokens
- Changed GPT-5.3 Codex Spark thinking efforts from
["minimal", "low", "medium", "high", "xhigh"]to["low", "medium", "high", "xhigh"] - Updated pricing for multiple AI models across providers (costs adjusted in models.json)
- Reduced max output tokens for an unspecified model from 16384 to 8192
- Added image input support to Venice AI text model
@oh-my-pi/pi-coding-agent
Added
- Added per-call
modelselection to thetasktool, including per-item batch selectors, fallback chains, and explicit reasoning suffixes. - Added Firecrawl keyless mode: explicitly selecting
firecrawlas the web-search provider now works withoutFIRECRAWL_API_KEYby calling the Firecrawl REST API without anAuthorizationheader; the automatic provider chain remains credential-gated (#4332). - Added
mcp.renderMarkdownResults(enabled by default): non-JSON MCP text results render as Markdown in the terminal transcript; set it tofalseto keep raw text.
Changed
- Adjusted retry fallback handling to recognize discovery-only and runtime extension providers, preventing spurious unknown-provider warnings.
- Restored Auto QA's ask-the-user default:
dev.autoqadefaults totrueagain, so the firstxd://report_issuewrite pops the consent dialog instead of the feature being silently off. Denying consent (ordev.autoqa: false/PI_AUTO_QA=0) fully disables prompt injection; an explicitly configureddev.autoqa: trueoverrides a past denial. Also restored the #1224 guarantee lost in the xd:// device consolidation: the grievance row is inserted only after consent resolves to granted (orPI_AUTO_QA_PUSH=1), so nothing touches the local database while consent is unset or denied.
Fixed
- Fixed Auto QA grievance recording silently dropping every report since the xd:// device consolidation:
openAutoQaDbtreated the database file path (~/.omp/autoqa.db) as a directory and tried to openautoqa.db/autoqa.dbinside it, which fails on legacy installs (the flat file blocks the directory) and fresh ones alike (SQLite does not create parent directories). Also restored thebusy_timeoutpragma dropped in the same refactor (#2421). RenamedgetAutoQaDbDirtogetAutoQaDbPathto match what it returns. - Fixed the setup wizard hiding the selected row on short terminals (e.g. 24x80): the provider sign-in, theme, and web-search lists now fit their windows to the visible height, and decorative chrome (sign-in hint, theme mock preview) yields to the list when space is tight.
- Fixed restored sessions replaying terminal aborted or errored assistant turns, which could repeatedly fail continuation from an assistant role;
/retrynow consults the persisted transcript so the failed turn remains retryable without re-entering provider context. - Fixed
get_available_modelsandset_modelRPCs racing background model discovery on cold start by awaiting the in-flight refresh before reading the registry. RPC/ACP clients that query the catalog or select a model immediately after session ready previously saw only statically-bundled models until discovery completed seconds later. - Fixed deferred
--model <provider>/<pattern>CLI resolution failing on cold start with "Model not found" when the selector pointed at a discovery-backed provider (proxy / ollama / lm-studio / llama.cpp / litellm). The deferred retry now runs a cache-aware discovery pass before resolving, mirroring the default-role fallback's cold-cache race fix (issues #6114, #6162). - Fixed MCP tool calls that return a
WWW-Authenticatechallenge by preserving the structured metadata, completing the configured OAuth flow, and retrying the call once on the refreshed connection. - Fixed the Hindsight API token setting being absent from the Memory tab, so authenticated servers can be configured entirely in the TUI.
- Fixed aborted-task follow-up hints pointing at
history://transcripts that cannot resolve: the hint now reports the transcript as unavailable when the agent ref retains no session file, while still-resumable agents keep theirhubresume hint. - Fixed compiled binaries failing to load legacy Pi extensions with minified imports,
pi-ai/compat, or transitive runtime dependencies. The compatibility loader now follows compact static imports, resolves transitive on-disk ESM imports and CommonJS requires with package conditions, and restores the legacycopyToClipboardanddecodeKittyPrintableroot exports used bypi-vimmodeandpi-web-access. - Fixed a budget-aborted keep-alive subagent becoming an unkillable registration with no
hub-level stop. A subagent force-stopped for exceeding its soft request budget is kept resumable (statusidle, adopted by the lifecycle) so its context can be salvaged, but its async job row settles and is reaped after ~5 min — after whichhub cancel <id>could only reportBackground job not foundbecause it consulted the job manager alone.hub cancelnow falls through to the agent registration: for an id the caller spawned that has no live job, it aborts any in-flight turn, disposes the session, and drops the registration (the interactive Agent Hubxand collabkillalready did this; the model-facinghubdid not). Cross-agent kills stay impossible and Main/advisor refs are never targeted (#6315). - Fixed Agent Hub fallback rows hiding routing provenance and the resolved provider/model (#6316).
- Reduced format-on-write latency by avoiding cold language-server startup when diagnostics are disabled.
- Rewrote the
/guided-goalinterviewer rubric around loop-engineering: deterministic success criteria, verification commands, attempt caps, scope boundaries, and stop conditions. Ready objectives must use the five-section structured markdown form. - Added
task.isolation.apply(defaulttrue) to choose whether successful isolatedtaskruns automatically apply their changes to the parent checkout or retain patch/branch artifacts for later integration. - Added opt-in RPC protocol v2 negotiation with bounded, lossless chunking for stdout objects up to 64 MiB, plus stable cursor-based message pages for histories that should not travel as one response. Legacy JSONL clients remain on protocol v1, while the bundled TypeScript and Python RPC clients negotiate, reassemble, and drain message pages automatically.
- Fixed protocol v2 chunked framing materializing the whole base64 transport in memory: near-limit logical frames (~63 MiB) peaked around 686 MB RSS and over-ceiling frames allocated the full payload buffer before rejection. Chunk lines are now produced lazily from a single serialization, the 64 MiB ceiling is checked before any full-payload allocation, and RPC stdout writes honor backpressure line by line.
- Fixed the bundled TypeScript and Python RPC clients throwing when a
get_messages_pagecursor went stale mid-walk (e.g. a background bash appending a message between pages): the high-levelgetMessages()drains now discard partial pages and fall back to the legacy snapshot on bothsession_busyandstale_cursor, driven by a new machine-readablecodefield on RPC error responses. Direct page calls remain strict.
@oh-my-pi/pi-tui
Added
- Added
SelectList.setMaxVisible()so hosts can refit the visible row budget to available height after construction.
@oh-my-pi/pi-utils
Breaking Changes
- Renamed
getAutoQaDbDirtogetAutoQaDbPathfor accuracy; update any usage accordingly
What's Changed
- feat(ai): SuperGrok usage tracking via billing API by @any-victor in #4874
- feat(coding-agent): rewrite /guided-goal interviewer for loop engineering by @metaphorics in #4927
- fix(tui): show fallback models in Agent Hub by @roboomp in #6318
- fix(coding-agent): let hub cancel kill a jobless agent registration by @roboomp in #6319
- fix(ai): execute complete tools at output limit by @usr-bin-roygbiv in #6320
- fix(extensions): resolve transitive CJS dependencies by @jeffscottward in #6324
- fix(task): only point follow-up hints at transcripts that exist by @paralin in #6328
- fix(settings): expose Hindsight API token by @salmonumbrella in #6329
- Add firecrawl keyless mode support by @CoderTCY in #6331
- fix(coding-agent): retry MCP tool auth challenges by @spenceresin8 in #6346
- fix(rpc): await background model discovery in get_available_models, set_model, and deferred --model resolution by @ReqX in #6355
- fix(coding-agent): guard session context replay tail by @honsunrise in #6357
- feat(ai): add Synthetic usage reporting by @Gareth-Rouse in #6358
- feat(task): allow per-call model selection by @panosAthDBX in #6360
- perf(coding-agent): avoid cold LSP startup on format-only writes by @wolfiesch in #5137
- feat(coding-agent): configure isolated task apply behavior by @korri123 in #6326
- feat: optionally render MCP results as Markdown by @zeroknots in #6347
- feat(coding-agent): add lossless paged RPC transport by @wolfiesch in #6330
New Contributors
- @salmonumbrella made their first contribution in #6329
- @CoderTCY made their first contribution in #6331
- @spenceresin8 made their first contribution in #6346
- @ReqX made their first contribution in #6355
- @honsunrise made their first contribution in #6357
- @Gareth-Rouse made their first contribution in #6358
- @panosAthDBX made their first contribution in #6360
- @zeroknots made their first contribution in #6347
Full Changelog: v17.0.8...v17.0.9