github can1357/oh-my-pi v17.0.9

6 hours ago

@oh-my-pi/pi-ai

Added

  • Added Synthetic (synthetic.new) usage provider: /usage now reports the rolling 5-hour request limit and weekly credit quota via GET /v2/quotas, including per-tick regeneration rates in the window labels.
  • Added optional UsageWindow.resetLabel so 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-review model to GPT-5.3 Codex Spark with 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 model selection to the task tool, including per-item batch selectors, fallback chains, and explicit reasoning suffixes.
  • Added Firecrawl keyless mode: explicitly selecting firecrawl as the web-search provider now works without FIRECRAWL_API_KEY by calling the Firecrawl REST API without an Authorization header; 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 to false to 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.autoqa defaults to true again, so the first xd://report_issue write pops the consent dialog instead of the feature being silently off. Denying consent (or dev.autoqa: false / PI_AUTO_QA=0) fully disables prompt injection; an explicitly configured dev.autoqa: true overrides 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 (or PI_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: openAutoQaDb treated the database file path (~/.omp/autoqa.db) as a directory and tried to open autoqa.db/autoqa.db inside it, which fails on legacy installs (the flat file blocks the directory) and fresh ones alike (SQLite does not create parent directories). Also restored the busy_timeout pragma dropped in the same refactor (#2421). Renamed getAutoQaDbDir to getAutoQaDbPath to 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; /retry now consults the persisted transcript so the failed turn remains retryable without re-entering provider context.
  • Fixed get_available_models and set_model RPCs 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-Authenticate challenge 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 their hub resume 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 legacy copyToClipboard and decodeKittyPrintable root exports used by pi-vimmode and pi-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 (status idle, adopted by the lifecycle) so its context can be salvaged, but its async job row settles and is reaped after ~5 min — after which hub cancel <id> could only report Background job not found because it consulted the job manager alone. hub cancel now 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 Hub x and collab kill already did this; the model-facing hub did 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-goal interviewer 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 (default true) to choose whether successful isolated task runs 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_page cursor went stale mid-walk (e.g. a background bash appending a message between pages): the high-level getMessages() drains now discard partial pages and fall back to the legacy snapshot on both session_busy and stale_cursor, driven by a new machine-readable code field 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 getAutoQaDbDir to getAutoQaDbPath for 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

Full Changelog: v17.0.8...v17.0.9

Don't miss a new oh-my-pi release

NewReleases is sending notifications on new releases.