Skip to content

chore(deps): update all non-major dependencies - #16

Open
akua-renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-minor-patch
Open

chore(deps): update all non-major dependencies#16
akua-renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-minor-patch

Conversation

@akua-renovate

@akua-renovate akua-renovate Bot commented Jul 30, 2026

Copy link
Copy Markdown

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change
@biomejs/biome (source) devDependencies patch 2.5.62.5.7
@earendil-works/pi-ai (source) dependencies minor 0.82.10.84.1
@earendil-works/pi-coding-agent (source) dependencies minor 0.82.10.84.1
@effect/platform-browser (source) dependencies patch 4.0.0-beta.1024.0.0-beta.105
@effect/platform-bun (source) dependencies patch 4.0.0-beta.1024.0.0-beta.105
@effect/vitest (source) devDependencies patch 4.0.0-beta.1024.0.0-beta.105
@playwright/test (source) devDependencies patch 1.62.01.62.1
@testing-library/user-event devDependencies patch 14.6.114.6.3
@types/react (source) devDependencies patch 19.2.1719.2.18
@types/react-dom (source) devDependencies patch 19.2.319.2.4
@vitejs/plugin-react (source) devDependencies patch 6.0.46.0.5
effect (source) dependencies patch 4.0.0-beta.1024.0.0-beta.105
typebox dependencies minor 1.1.381.3.11
vite (source) devDependencies minor 8.1.58.2.1

Release Notes

biomejs/biome (@​biomejs/biome)

v2.5.7

Compare Source

Patch Changes
  • #​10822 c171b3b Thanks @​pkallos! - Added the option ignoreIfStatements to useNullishCoalescing. Biome now flags if statements that only assign to a nullish variable (such as if (!a) { a = b }) and can rewrite them to ??=. When enabled, Biome ignores those if statements.

  • #​11136 e63354c Thanks @​AkashNaickar! - Added a new nursery rule noExtendNative, which reports extending the prototype of a built-in object.

  • #​10094 e007143 Thanks @​THEjacob1000! - Added the nursery rule noTailwindArbitraryValue. Biome now reports Tailwind CSS arbitrary values such as w-[400px], including in HTML/JSX class attributes, configured utility functions, and tagged templates.

  • #​11184 135f476 Thanks @​subotac! - Fixed #​11176: noUnknownPseudoClass now recognizes Vue's :deep() pseudo-class inside .vue style blocks.

  • #​8239 a519f9d Thanks @​cormacrelf! - Fixed #​8233, where Biome CLI in
    stdin mode didn't work correctly when handling files in projects with nested
    configurations. For example, with the following structure,
    --stdin-file-path=subdirectory/... would not use the nested configuration in
    subdirectory/biome.json:

    ├── biome.json
    └── subdirectory
        ├── biome.json
        └── lib.js
    
    biome format --write --stdin-file-path=subdirectory/lib.js < subdirectory/lib.js

    Now, the nested configuration is correctly picked up and applied.

    In addition, Biome now shows a warning if --stdin-file-path is provided but
    that path is ignored and therefore not formatted or fixed.

  • #​11138 8c2c6bd Thanks @​ematipico! - Fixed noUnnecessaryConditions: Biome now chooses the same function overload as TypeScript when an argument is a callback, so conditions that were previously missed are reported.

    The following code is now invalid, because a parameter typed () => void accepts an async callback and schedule therefore returns string:

    declare function schedule(handler: () => void): string;
    declare function schedule(handler: () => Promise<void>): string | undefined;
    
    schedule(async () => {}) ?? "fallback";

    The following code is also now invalid, because map(() => 42) returns 42:

    type Mapper<T> = () => T;
    declare function map<T>(mapper: Mapper<T>): T;
    
    map(() => 42) || flag;
  • #​11138 8c2c6bd Thanks @​ematipico! - Fixed #​11087: noUnnecessaryConditions no longer reports optional chains and nullish coalescing whose receiver can be nullish.

    For example, the optional chain and fallback in the following code are no longer reported:

    declare const usage: { range: { startDate: string } } | null;
    const startDate = usage?.range.startDate ?? "N/A";
  • #​11118 9c16840 Thanks @​subotac! - Fixed #​11098: The HTML formatter now preserves the configured trailing newline when a file ends with a comment.

    -<!-- trailing comment -->
    \ No newline at end of file
    +<!-- trailing comment -->
  • #​11201 0e80610 Thanks @​Bishwas-py! - Fixed #​11182: suppression comments for noPositiveTabindex now suppress the rule in HTML files when the attributes of the element span multiple lines.

  • #​11079 607afd2 Thanks @​dyc3! - The HTML formatter now lays out the srcset attribute of <img> and <source> as the list of candidates it is. Runs of whitespace between candidates collapse, and once the list no longer fits on one line each candidate goes on its own line with the descriptors aligned:

    - <img srcset="/visual@0.5.png  400w, /visual.png 805w, /visual@2x.png 1610w, /visual@3x.png 2415w" />
    + <img
    +   srcset="
    +     /visual@0.5.png  400w,
    +     /visual.png      805w,
    +     /visual@2x.png  1610w,
    +     /visual@3x.png  2415w
    +   "
    + />
  • #​11156 fed72c7 Thanks @​saberoueslati! - Fixed #​11129: noUnusedVariables no longer reports Vue bindings as unused when they are assigned through automatically unwrapped template refs.

  • #​11124 d890b39 Thanks @​denbezrukov! - Fixed CSS formatting of line comments between a declaration colon and value to preserve their source indentation.

     .test {
       background:
    -  /////// foo
    -  // bar
    +        /////// foo
    +        // bar
         radial-gradient(circle, #&#8203;000, transparent);
     }
  • #​11113 3d8ab73 Thanks @​denbezrukov! - Fixed CSS formatting of long block comments between comma-separated property values:

     .foo {
       box-shadow:
    -    1000px /* long long long long long long long long long long long long comment */ 1000px /* long long long long long long long long long comment */ 2px color(srgb 0.555555555 0.555555555 0.555555555),
    +    1000px
    +      /* long long long long long long long long long long long long comment */
    +      1000px /* long long long long long long long long long comment */ 2px
    +      color(srgb 0.555555555 0.555555555 0.555555555),
         1px 1px black;
     }
  • #​11127 da5c1a5 Thanks @​dyc3! - The HTML formatter now picks the quote character for an attribute by counting the quotes in the value rather than looking only for a double quote. &apos; and &quot; count as the characters they stand for, and only the character that ends up as the delimiter stays escaped:

    - <div title='123 &apos;&quot; 456'></div>
    + <div title="123 '&quot; 456"></div>

    Entities that are not quotes, such as &amp; or &[#&#8203;39](https://redirect.github.com/biomejs/biome/issues/39);, are left exactly as written.

  • #​11193 77035bb Thanks @​dyc3! - Fixed the HTML formatter collapsing the blank line between an element and the text that follows it. A blank line before text is now kept, the way one before another element already was:

      <div>foo</div>
    -
      text
  • #​11106 ad80f57 Thanks @​dyc3! - The HTML formatter now writes the HTML5 doctype in lowercase, matching Prettier:

    - <!DOCTYPE html>
    + <!doctype html>

    This only applies to a plain .html file whose doctype stands alone. A doctype that names a DTD keeps the case it was written with, since the rest of the declaration is not lowercased either:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    A .vue, .svelte, or .astro file keeps whatever the author wrote.

  • #​11188 60679db Thanks @​dyc3! - Fixed the HTML formatter printing a comment twice when it ended the line of the last element in a document:

    - text<!-- a --><!-- a -->
    + text<!-- a -->
  • #​11077 4dcd0d9 Thanks @​dyc3! - Fixed a bug where the HTML formatter collapsed the whitespace inside <textarea>, <xmp> and <plaintext>, changing what the page renders.

    - <textarea>
    -  line one
    - line two </textarea>
    + <textarea>line one line two</textarea>

    Biome now prints the content of these elements exactly as it appears in the source, matching the existing behavior for <pre>.

  • #​11194 abfbb11 Thanks @​dyc3! - Fixed the HTML formatter refusing to format a Svelte file containing an array pattern that skips a position:

    {#each animals as [, value]}
    	<p>{value}</p>
    {/each}
  • #​10094 e007143 Thanks @​THEjacob1000! - Fixed useSortedClasses to correctly detect unsorted classes in static member expression tagged templates (e.g. tw.div\...``). Previously, these were silently skipped due to surrounding whitespace trivia not being stripped from the tag name.

  • #​11078 10da30e Thanks @​dyc3! - Fixed Vue single-file components failing to parse when they contain a custom block such as <i18n> or <docs>, or a <template> written in another language. Their content is no longer read as HTML, so a block may hold whatever its own tooling expects:

    <docs>
    This block is prose, and it may mention a `<my-component>` without closing it.
    </docs>
    
    <template lang="pug">
      .test
        #foo
    </template>

    Previously both blocks produced a parse error and the whole file was left unformatted. Biome now prints their content unchanged while still formatting the opening tag.

  • #​11231 4afd901 Thanks @​ematipico! - Improved the performance of the following lint rules:

  • #​11134 2fa0a62 Thanks @​yanthomasdev! - Clarified the warning emitted when using the experimental json and json-pretty reporters.

  • #​11198 ed88b13 Thanks @​saberoueslati! - Fixed #​11171: variables referenced only inside a Svelte attachment ({@&#8203;attach ...}) are no longer reported as unused by noUnusedVariables and noUnusedImports.

  • #​11155 6ee17ea Thanks @​dyc3! - Improved performance when printing diagnostics to the console.

  • #​11160 217f8ad Thanks @​dyc3! - Improved the performance of noFloatingPromises by skipping type inference for assignment statements, which are always considered handled.

  • #​11159 26c23d9 Thanks @​saberoueslati! - Fixed #​11144: noFloatingPromises no longer reports already-awaited optional Promise values.

  • #​11138 8c2c6bd Thanks @​ematipico! - Fixed #​11121: noUnnecessaryConditions no longer reports conditions based on an inapplicable function overload.

    For example, the condition in the following code is no longer reported because query({}) selects the overload that returns boolean:

    declare function query(options: { initial: string }): { isPending: false };
    declare function query(options: { initial?: string }): { isPending: boolean };
    
    const { isPending } = query({});
    isPending || fallback;
  • #​11152 c4fc6a9 Thanks @​dyc3! - Improved the performance of collecting rule timings with --profile-rules in heavily multithreaded environments.

  • #​11128 4d3ff76 Thanks @​ematipico! - Fixed #​7635: noDeprecatedImports now detects deprecated ambient declarations that are exported separately.

  • #​11117 01f7ef5 Thanks @​subotac! - Fixed #​11014: noDelete no longer reports process.env["FOO"] style property deletions.

  • #​11168 9847e68 Thanks @​saberoueslati! - Added the nursery rule noNonScalableViewport, which reports viewport metadata that disables user scaling with user-scalable=no.

    For example:

    <meta name="viewport" content="width=device-width, user-scalable=no" />
  • #​11154 a1d6b1f Thanks @​dyc3! - Improved the performance of noImportCycles by skipping graph traversals for imports that cannot be part of a cycle.

  • #​11175 d96d6dd Thanks @​ematipico! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the syntax descriptor of @property rules.

earendil-works/pi (@​earendil-works/pi-ai)

v0.84.1

Compare Source

Added
  • Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international QWEN_TOKEN_PLAN_API_KEY (#​7659 by @​arasovic).

v0.84.0

Compare Source

Breaking Changes
  • Renamed the exported ModelsStreamTransforms interface to ModelsRequestTransforms because its header transformation now applies to all authenticated provider requests.

  • Required dynamic model providers to accept a concrete RefreshModelsContext.signal; Models.refresh() remains unbounded when callers omit its optional signal.

  • Required provider login, API-key check/resolution, and OAuth refresh implementations to accept a concrete abort signal; public auth and credential operations remain unbounded when callers omit their optional signal.

  • Replaced raw RefreshModelsContext.store access with the read-only context.stored snapshot and generation-checked context.publish() transaction.

    createProvider({ fetchModels }): no catalog-publication migration is required. Before and after, return the fetched list; createProvider() restores stored models and publishes and persists refreshed models itself. signal is now guaranteed to be present.

    // Before
    const beforeProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });
    
    // After: unchanged
    const afterProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });

    Handwritten Provider.refreshModels(): replace direct store access and pre-publication mutation with generation-guarded publications.

    // Before
    refreshModels: async (context) => {
      const stored = await context.store.read();
      if (stored) currentModels = stored.models;
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      currentModels = refreshed;
      await context.store.write({ models: refreshed, checkedAt: Date.now() });
    },
    
    // After
    refreshModels: async (context) => {
      if (context.stored) {
        const restored = context.stored.models;
        if (!(await context.publish({
          update: () => { currentModels = restored; },
        }))) return;
      }
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      if (context.signal.aborted) return;
      await context.publish({
        persist: { models: refreshed, checkedAt: Date.now() },
        update: () => { currentModels = refreshed; },
      });
    },

    In publish(), omit persist to leave storage unchanged, pass a ModelsStoreEntry to write it, or pass persist: null to delete it. Omit update for metadata-only persistence; omit persist for an ephemeral in-memory publication.

Added
  • Added optional OAuthAuth.isSubscription metadata for distinguishing subscription-backed authentication from generic OAuth sign-in.
  • Added explicit TelemetryContext propagation across stream, deferred, and image request options using the vendor-neutral @earendil-works/pi-telemetry contract.
  • Added deferred provider request contracts, durable response handles, authenticated fetch/cancel dispatch, and faux-provider support for pending, ready, failed, and cancelled responses (#​7339 by @​davidbrai).
  • Added Baseten as a built-in OpenAI-compatible provider with models.dev catalog generation and native chat_template_args reasoning controls.
  • Added arbitrary OpenAI-compatible sampling parameters through Model.samplingParams and StreamOptions.samplingParams, including per-request overrides (#​7568 by @​mrexodia).
  • Added opt-in vLLM thinking_token_budget support for OpenAI-compatible models, reserving output tokens for the final answer (#​7638 by @​bnsd55).
  • Added OpenAICompletionsCompat.supportsFinishReason for providers that omit streamed finish_reason values, inferring normal and tool-use stops when the stream ends.
  • Added structured Amazon Bedrock failure diagnostics with HTTP status, modeled error code, and AWS request id when available (#​7286 by @​brianstanley).
Changed
  • Added optional cancellation to ModelsStore reads, writes, and deletions; catalog orchestration binds these waits to the provider refresh signal.
Fixed
  • Fixed GitHub Copilot Grok 4.5 requests to use the supported Responses API (#​7560).
  • Bounded OAuth token refreshes so stalled requests release the credential-store lock (#​7508).
  • Fixed tool argument validation to preserve values that already match an anyOf/oneOf union arm before attempting coercion, avoiding nullable unions converting null to another primitive value (#​7328).
  • Fixed cancellation of model catalog refreshes so callers stop waiting even when a custom provider ignores its abort signal (#​7027).
  • Fixed auth resolution, availability checks, OAuth refreshes, provider login, and in-memory credential queue waits to honor caller cancellation.
  • Fixed newer provider refreshes being blocked by or overwritten by an older stalled generation, including persisted catalog publication.
  • Updated GPT-5.6 Terra and Luna pricing across OpenAI and passthrough model catalogs.
  • Fixed Fireworks Kimi K3 models to use the OpenAI-compatible API with native reasoning-effort levels and deferred tools (#​7199, #​7230 by @​XBeg9).
  • Fixed Fireworks GLM 5.2 models sending the unsupported prompt_cache_retention field when long cache retention is enabled, and enabled session affinity for automatic prompt caching (#​7676).
  • Updated Groq's Qwen reasoning override for the replacement qwen/qwen3.6-27b model.
  • Fixed the OpenCode Go provider display name.
  • Fixed provider error normalization treating arrays and class instances as structured response bodies instead of preserving their original errors (#​7205 by @​erikogenvik).
  • Fixed Anthropic streams dropping text or thinking included in the initial content-block event (#​7358 by @​davidbrai).
  • Fixed Google history conversion dropping signed empty text and thinking blocks required for replay (#​7362 by @​jingtao-wisdomgraph).
  • Fixed OpenAI Codex cached WebSocket sessions being shared across different account credentials (#​7364).
  • Fixed transient Google Generative AI and Vertex AI provider errors bypassing automatic retries (#​7471 by @​vish-pr).
  • Fixed Gemini 3 tool call ids being discarded during history conversion, breaking signed multi-turn replay (#​7494 by @​muyiyr).
  • Fixed OpenAI Responses incomplete reasons so only max_output_tokens is treated as a length stop, and exposed bounded recovery detection for responses truncated below their intended output limit (#​7540 by @​davidbrai).
  • Restored GitHub Copilot models returned through account-specific policy responses (#​7672 by @​muyiyr).
  • Replaced the retired Qwen Token Plan qwen3.8-max-preview model with qwen3.8-max (#​7670 by @​QuintinShaw).

v0.83.0

Compare Source

Breaking Changes
  • Upgraded the exported TypeBox dependency to 1.3.7, removing deprecated APIs including Type.Base, Type.Awaited, Type.Promise, Type.AsyncIterator, Type.Iterator, Type.Options, and Value.Mutate, while fixing compiled validation of nullable array tool arguments. Consumers using removed APIs must migrate to supported TypeBox APIs (#​7243 by @​petrroll).
Added
  • Added per-request fetch injection for supported text and image provider transports; Google adapters reject non-global implementations rather than silently bypassing them.
  • Added Claude Opus 5 support for the GitHub Copilot provider, routing through the Anthropic Messages API with adaptive thinking, 1M context, and the Copilot minimal thinking-level override (#​7158 by @​jay-aye-see-kay).
  • Added the "pending" stop reason for partial streaming messages. See Stop Reasons (#​7151 by @​lucasmeijer).
  • Added AssistantMessage.rawStopReason and populated it across Google, Anthropic, Amazon Bedrock, Mistral, and OpenAI streams; unmapped terminal reasons now surface as provider errors instead of successful stops (#​7272).
  • Added manual redirect URL and authorization-code entry to OpenRouter OAuth login for remote and headless environments (#​7114 by @​rgarcia).
  • Added AuthResolutionOverrides.minOAuthValidityMs so callers can require and refresh OAuth credentials with a minimum remaining validity (#​7168).
Changed
  • Changed stored OAuth credentials to refresh when less than five minutes of validity remain instead of waiting until expiration (#​7168).
Fixed
  • Fixed Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels (#​6951, #​6998).
  • Fixed Z.AI providers and compatible custom endpoints to send output limits through max_tokens, which those endpoints honor (#​7174 by @​HyeokjaeLee).
  • Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys (#​7176 by @​christianbasch).
  • Fixed malformed OpenAI-compatible tool-call deltas with both a valid function payload and an empty custom object discarding the function arguments (#​7288 by @​sunnyyoung).
earendil-works/pi (@​earendil-works/pi-coding-agent)

v0.84.1

Compare Source

New Features
  • Qwen Token Plan Individual — Use the built-in provider for models documented for Individual subscriptions. See API Keys.
  • Authentication readiness checks — Use pi auth check to verify provider or model credentials, optionally emitting the resolved credential.
  • Improved fullscreen interaction — Select words and paragraphs with multiple clicks and configure half-page transcript scrolling. See TUI Fullscreen Viewport.
  • Terminating blocked tool calls — Extension tool_call handlers can stop all-terminating batches without another model call. See Tool Events.
Added
  • Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international QWEN_TOKEN_PLAN_API_KEY. See API Keys (#​7659 by @​arasovic).
  • Added pi auth check provider/model auth preflight with optional credential output (#​7152).
  • Added terminate support to blocked extension tool_call events so all-terminating batches can skip the automatic follow-up model call. See Tool Events (#​7715 by @​muyiyr).
  • Added inherited double-click word and whitespace selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode (#​7725, #​7733 by @​volsa).
  • Added inherited unbound half-page transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#​7735).
Changed
  • Softened the bash tool's PI_* environment guideline in an attempt to reduce unnecessary inspection commands (#​7128).
  • Reduced worst-case automatic terminal theme detection delay from 200 ms to 100 ms by probing color-scheme and background support concurrently.
Fixed
  • Fixed Bun standalone binaries crashing on startup when the cwd contains a bunfig.toml with preload by compiling with --no-compile-autoload-bunfig (#​7685 by @​geril07).
  • Fixed extension TUI method wrappers recursing indefinitely when delegating to the original method (#​7731).
  • Fixed right-click not pasting clipboard text in fullscreen mode on Windows.
  • Fixed inherited Agent.reset() clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#​7717 by @​wesleyzhangwq).
  • Fixed inherited LaTeX relation, multiplication, and named-operator spacing, and matrix composition with stacked fractions, operator limits, and adjacent matrices.
  • Reduced inherited fullscreen mouse event volume under tmux, Zellij, and GNU Screen by using button-motion tracking instead of all-motion tracking.

v0.84.0

Compare Source

New Features
  • Fullscreen TUI mode — Switch between regular and fullscreen modes at runtime, with a sticky editor and footer, independently scrollable transcript, and draggable scrollbars. See UI & Display.
  • Mermaid and LaTeX rendering — Render Mermaid diagrams and terminal-friendly Unicode math in interactive transcripts. See Markdown settings and TUI Markdown.
  • Per-directory context overrides — Use AGENTS.override.md to replace context files for a specific directory. See Context Files.
  • Advanced custom model sampling — Configure arbitrary OpenAI-compatible samplingParams and opt-in vLLM thinking_token_budget values. See Sampling Parameters.
  • Baseten provider — Use built-in Baseten authentication and model support. See API Keys.
Breaking Changes
  • Renamed the inherited pi-ai ModelsStreamTransforms interface to ModelsRequestTransforms because its header transformation now applies to all authenticated provider requests.

  • Changed JSON and RPC message_update events to emit only assistantMessageEvent deltas, removing the cumulative message and assistantMessageEvent.partial fields that caused quadratic output growth. Clients that need partial messages must assemble deltas between message_start and message_end; the latter remains authoritative (#​7290).

  • ModelRegistry.getApiKeyAndHeaders() now returns ProviderHeaders with string | null values and preserves null header-deletion markers. Extensions that inspect returned headers must handle null; extensions forwarding them to pi-ai streams should pass them through unchanged. This prevents placeholder OpenAI credentials from being sent through Cloudflare AI Gateway (#​7030).

  • Changed ModelRegistry.refresh() to accept ModelsRefreshOptions and return ModelsRefreshResult instead of discarding cancellation and provider errors.

  • Changed ModelRuntime.setRuntimeApiKey() to accept auth cancellation options rather than catalog refresh options. Call refresh({ providers: [providerId], signal }) separately when remote freshness is required.

  • Required config-form extension OAuth refreshToken(credentials, signal) callbacks to accept and honor a concrete abort signal.

  • Replaced dynamic provider refresh context store access with the read-only context.stored snapshot and generation-checked context.publish() transaction.

    Providers built with createProvider({ fetchModels }): no catalog-publication migration is required. Before and after, return the fetched models and register the resulting provider; createProvider() owns restoration, persistence, and in-memory publication.

    // Before
    const beforeProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });
    pi.registerProvider(beforeProvider);
    
    // After: unchanged
    const afterProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });
    pi.registerProvider(afterProvider);

    Handwritten native Provider.refreshModels(): replace direct store access and pre-publication mutation with generation-guarded publications.

    // Before
    refreshModels: async (context) => {
      const stored = await context.store.read();
      if (stored) currentModels = stored.models;
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      currentModels = refreshed;
      await context.store.write({ models: refreshed, checkedAt: Date.now() });
    },
    
    // After
    refreshModels: async (context) => {
      if (context.stored) {
        const restored = context.stored.models;
        if (!(await context.publish({
          update: () => { currentModels = restored; },
        }))) return;
      }
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      if (context.signal.aborted) return;
      await context.publish({
        persist: { models: refreshed, checkedAt: Date.now() },
        update: () => { currentModels = refreshed; },
      });
    },

    For the config-form pi.registerProvider(name, { refreshModels }), callbacks that only return models remain unchanged; pi publishes the returned list. If such a callback previously used context.store for custom persistence, read context.stored and call context.publish({ persist: entry }). In publish(), omit persist to leave storage unchanged, pass a ModelsStoreEntry to write it, or pass persist: null to delete it.

  • Replaced the inherited pi-agent-core harness session model with the v4 lane-based Session, SessionStorage, and SessionRepo APIs, including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views.

  • Promoted the inherited v2 session and AgentHarness API from pi-agent-core's experimental entrypoint to its default export and removed the experimental subpaths.

  • Removed the inherited legacy JSONL and in-memory repository APIs. Use pi-agent-core's v4 JsonlSessionRepo or InMemorySessionRepo, both implementing the new SessionRepo contract.

  • Added the inherited required pi-agent-core FileSystem.renameFile() operation for atomic JSONL publication; custom harness file-system implementations must provide same-filesystem replacement semantics (#​7707 by @​davidbrai).

  • Replaced experimental remote-session list summaries with durable SessionMetadata; RemoteSession.sessions no longer exposes runtime phase, model, thinking, attachment, or lock state, which remains available from acquired SessionSnapshot values (#​7708).

Added
  • Added built-in Baseten provider support with BASETEN_API_KEY authentication and zai-org/GLM-5.2 as the default model.
  • Added experimental remote-session client APIs: the transport-neutral PiClient, CBOR protocol, Unix-socket transport, and @earendil-works/pi-coding-agent/client RemoteSession controller with transcript reducers. See Pi Client and Remote Protocol (#​7344, #​7348, #​7371, #​7409).
  • Added CredentialSynchronizationError for credential changes that commit successfully but fail to synchronize local model state.
  • Added chainable pi.registerMarkdownTransformer() hooks for display-only transformation of user and assistant Markdown. See pi.registerMarkdownTransformer() (#​7231 by @​xl0).
  • Added an experimental fullscreen TUI mode, selectable through --tui-mode fullscreen or /settings (#​7304).
  • Added runtime switching between regular and fullscreen TUI modes through /settings.
  • Added a sticky editor, status, widget, and footer dock to fullscreen mode while keeping the transcript independently scrollable.
  • Added a draggable transcript scrollbar to fullscreen mode with configurable auto, always, and hidden modes through /settings; always reserves the rightmost column.
  • Added page scrolling and marked-message navigation shortcuts to fullscreen mode.
  • Added an optional scrollbarThumb theme color for fullscreen scrollbar thumbs, falling back to selectedBg.
  • Added configurable themed Unicode rendering for supported Mermaid diagrams in interactive messages, including optional rendering while streaming. See Markdown settings (#​7624 by @​xl0).
  • Added opt-in Ctrl+P/Ctrl+N prompt history navigation, with explicit history bindings taking precedence over application shortcuts while the editor is focused.
  • Added per-directory AGENTS.override.md context files, which replace AGENTS.md or CLAUDE.md in the same directory while preserving context from other directories. See Context Files (#​7681 by @​Marvae).
  • Added AI_AGENT=pi to CLI and RPC child-process environments for generic agent attribution. See Environment Variables (#​7493 by @​renaudhartert-db).
  • Added inherited terminal-friendly Unicode rendering for LaTeX expressions in Markdown. See TUI Markdown.
  • Added stacked transient notifications in fullscreen mode.
  • Added arbitrary OpenAI-compatible model sampling parameters through samplingParams in models.json, model overrides, extension providers, and stream options. See Sampling Parameters (#​7568 by @​mrexodia).
  • Added inherited opt-in vLLM thinking_token_budget support for OpenAI-compatible models, reserving output tokens for the final answer (#​7638 by @​bnsd55).
  • Added inherited support for OpenAI-compatible streams that omit finish_reason, using compat.supportsFinishReason to infer normal and tool-use stops when the stream ends. See OpenAI Compatibility.
  • Added inherited deferred provider request contracts, durable response handles, authenticated fetch/cancel dispatch, and faux-provider support for pending, ready, failed, and cancelled responses (#​7339 by @​davidbrai).
  • Added inherited vendor-neutral telemetry contracts plus agent-owned typed AI-request and harness schemas, composed span starters, and callback helpers. See the agent telemetry schema reference.
  • Added inherited structured Amazon Bedrock failure diagnostics with HTTP status, modeled error code, and AWS request id when available (#​7286 by @​brianstanley).
  • Added inherited AgentOptions.shouldStopAfterTurn for gracefully stopping after a completed turn before queued messages or another model call are processed. See Agent Options (#​7367 by @​acmerfight).
  • Added inherited v4 JsonlSessionRepo support for append-only JSONL harness sessions (#​7611 by @​davidbrai).
  • Added inherited bounded branch-entry and indexed open-operation recovery queries to the v4 session API (#​7448, #​7646).
  • Added the inherited compile-complete AgentHarness v2 scaffold; unfinished operation paths reject with HarnessNotImplemented while durable execution is implemented.
Changed
  • Added inherited optional cancellation to pi-ai ModelsStore reads, writes, and deletions; catalog orchestration binds these waits to the provider refresh signal.
  • Reduced the inherited default fullscreen mouse wheel step from three lines to one for finer scrolling.
Fixed
  • Fixed the footer showing (sub) for generic OAuth/OpenID sign-ins without a known subscription; extension OAuth providers can opt in with isSubscription.
  • Fixed inherited OAuth token refreshes so stalled requests release the credential-store lock (#​7508).
  • Fixed inherited tool argument validation to preserve values that already match an anyOf/oneOf union arm before coercion, avoiding nullable unions converting null to another primitive value (#​7328).
  • Fixed inherited Fireworks GLM 5.2 requests sending the unsupported prompt_cache_retention field when long cache retention is enabled, and enabled session affinity for automatic prompt caching (#​7676).
  • Fixed inherited JsonlSessionRepo enforcing session IDs globally across working directories; IDs are now unique within each working directory.
  • Fixed inherited JSONL session forks and torn-tail repairs to publish atomically, avoiding partially written or corrupted sessions after interrupted writes (#​7707 by @​davidbrai).
  • Fixed path-containing find globs returning no results on Windows (#​6817).
  • Fixed messages queued during manual /compact failing instead of being sent after compaction completes.
  • Fixed Git Bash, MSYS, Cygwin, and WSL drive paths passed to built-in file tools resolving against the current Windows drive instead of their native drive (#​7064, #​7547).
  • Fixed project-level nested provider retry settings replacing unmodified global provider retry settings (#​7572).
  • Fixed inherited GitHub Copilot Grok 4.5 requests to use the supported Responses API (#​7560).
  • Fixed fullscreen shutdown leaking terminal capability-query replies into the parent shell prompt.
  • Fixed bare exact --model IDs shared by multiple providers choosing the first catalog entry instead of the sole authenticated provider or a clear ambiguity error (#​7327).
  • Fixed standalone x64 binaries requiring Haswell-era AVX2/BMI2 instructions by compiling release executables against Bun's baseline runtime (#​7390 by @​davidbrai).
  • Fixed Ctrl+X copy confirmations in fullscreen mode adding a transcript status line instead of showing the transient Copied! marker.
  • Fixed Kitty image previews in fullscreen mode overlapping the sticky editor and footer dock while scrolling.
  • Fixed image-heavy fullscreen sessions lagging when layout changes retransmitted visible Kitty image payl

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

@akua-renovate
akua-renovate Bot force-pushed the renovate/all-minor-patch branch 2 times, most recently from 2bbd862 to 76d4361 Compare July 31, 2026 01:02
@akua-renovate akua-renovate Bot changed the title chore(deps): update all non-major dependencies Update all non-major dependencies Jul 31, 2026
@akua-renovate akua-renovate Bot changed the title Update all non-major dependencies chore(deps): update all non-major dependencies Jul 31, 2026
@akua-renovate
akua-renovate Bot force-pushed the renovate/all-minor-patch branch 10 times, most recently from 8791d2c to 83e48a6 Compare August 7, 2026 04:58
@akua-renovate
akua-renovate Bot force-pushed the renovate/all-minor-patch branch from 83e48a6 to 8b32a69 Compare August 7, 2026 08:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants