Skip to content

fix(deps): update @earendil-works packages to ^0.84.0 - #56

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/@earendil-works-packages
Open

fix(deps): update @earendil-works packages to ^0.84.0#56
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/@earendil-works-packages

Conversation

@renovate

@renovate renovate Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@earendil-works/pi-agent-core (source) ^0.80.0^0.84.0 age confidence
@earendil-works/pi-ai (source) ^0.80.0^0.84.0 age confidence
@earendil-works/pi-coding-agent (source) ^0.80.0^0.84.0 age confidence

Release Notes

earendil-works/pi (@​earendil-works/pi-agent-core)

v0.84.2

Compare Source

Fixed
  • Fixed streamProxy() dropping finalized tool-call metadata such as OpenAI Responses namespaces (#​7709).

v0.84.1

Compare Source

Added
  • Added BeforeToolCallResult.terminate so blocked tool calls can participate in the existing batch early-termination rule (#​7715 by @​muyiyr).
Fixed
  • Fixed Agent.reset() clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#​7717 by @​wesleyzhangwq).

v0.84.0

Compare Source

Breaking Changes
  • Replaced the legacy 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 v2 session and AgentHarness API from the experimental entrypoint to the default package export and removed the experimental subpaths.
  • Removed the legacy JSONL and in-memory repository APIs. Use the v4 JsonlSessionRepo or InMemorySessionRepo, both implementing the new SessionRepo contract.
  • Added the required FileSystem.renameFile() operation to harness execution environments for atomic JSONL publication; custom file-system implementations must provide same-filesystem replacement semantics (#​7707 by @​davidbrai).
Added
  • Added typed AI-request and harness telemetry schemas, their combined schema tuple, callback helpers, and a generated schema reference.
  • Added bounded Session.findEntriesOnBranch() and findEntryOnBranch() queries with explicit traversal, filtering, ordering, and limit options.
  • Added a compile-complete AgentHarness v2 scaffold; unfinished operation paths reject with HarnessNotImplemented while durable execution is implemented.
  • Added JsonlSessionRepo, a v4 append-only JSONL session repository with metadata validation and shared storage semantics (#​7611 by @​davidbrai).
  • Added indexed Session.findOpenOperations() recovery queries and RecordQuery.operationKind filtering (#​7646).
  • Added 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 proxy forwarding for arbitrary OpenAI-compatible samplingParams (#​7568 by @​mrexodia).
Fixed
  • Fixed Windows path handling for NodeExecutionEnv file basenames, recursive skill loading, and prompt template names.
  • Fixed JsonlSessionRepo enforcing session IDs globally across working directories; IDs are now unique within each working directory.
  • Fixed JSONL session forks and torn-tail repairs to publish atomically, avoiding partially written or corrupted sessions after interrupted writes (#​7707 by @​davidbrai).

v0.83.0

Compare Source

v0.82.1

Compare Source

v0.82.0

Compare Source

Breaking Changes
  • Replaced AgentHarness's ExecutionEnv dependency and context-free AgentTool inputs with application-defined toolContext values and context-aware AgentHarnessTool definitions.
Added
  • Added context-aware read, write, edit, and bash harness tools backed by ExecutionEnv, including async bash execution preparation.
Changed
  • Aligned harness tool path handling, edit serialization, shell output capture, explicit non-inherited environments, and cross-platform process cleanup with coding-agent behavior.
Fixed
  • Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported (#​6618 by @​tmustier).

v0.81.1

Compare Source

Added
  • Added retry policy support and lifecycle events for compaction and branch-summary operations in AgentHarness (#​6901 by @​davidbrai).
Fixed
  • Restored the Agent streamFn option and host-configurable fallback for omitted agent-loop stream functions without reintroducing a pi-ai/compat dependency (#​6915).

v0.81.0

Compare Source

Breaking Changes
  • Changed SessionStorage to use getPathToRootOrCompaction(), require session name and statistics methods, support cursor-based entry reads, and store retained compaction tails as self-contained checkpoints (#​6594 by @​cristinaponcela).
  • Moved the uuidv7 export to @earendil-works/pi-ai (#​6834 by @​xl0).
  • Replaced the optional Agent streamFn fallback with a required streamFunction and made low-level loop stream functions required, preventing @earendil-works/pi-ai/compat and all built-in providers from entering selective-provider bundles (#​6851).
Added
  • Added usage metadata to tool results, compaction entries, and branch summaries in the agent harness (#​6671 by @​davidbrai).
earendil-works/pi (@​earendil-works/pi-ai)

v0.84.2

Compare Source

Added
  • Added createGatewayBindingFetch() for routing Cloudflare AI Gateway requests through a Workers AI binding without an API token (#​7901 by @​Maximo-Guk).
  • Added AssistantMessage.endTurn to preserve OpenAI Codex's terminal end_turn signal for diagnostics (#​7766).
Changed
  • Changed Kimi Coding requests to use pi's runtime User-Agent header.
  • Automatically converted supported strict tool schemas to provider-compatible closed objects with required nullable optional fields while preserving original tool definitions, and treated null values for optional non-nullable tool arguments as omitted.
  • Changed OpenAI Responses deferred tool loading to prefer message-anchored additional_tools where supported while retaining tool-search and top-level fallbacks (#​7709).
  • Replaced the Mistral SDK transport with a native Chat Completions HTTP stream, eliminating its generated client and schema runtime overhead.
Fixed
  • Fixed GitHub Copilot login triggering API rate limits while enabling model policies by limiting concurrent policy updates (#​6187).
  • Fixed upstream request buffer limit failures to trigger automatic assistant retries.
  • Fixed OpenAI Responses function and custom tool calls to preserve namespaces during streaming, proxying, and replay (#​7709).
  • Fixed built-in and custom DeepSeek API models to send output limits through the supported max_tokens field.
  • Fixed Google Generative AI and Vertex AI responses with tool calls incorrectly treating output-limit or provider-error stops as normal tool use (#​8059).
  • Fixed Amazon Bedrock replay rejecting tool arguments that contain empty object keys while preserving all valid nested values (#​7882 by @​muyiyr).
  • Fixed DeepSeek compatibility detection for base URLs whose hostname contains uppercase letters (#​7933 by @​yearth).

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).

v0.82.1

Compare Source

Added
  • Added ModelsStoreEntry.etag so persisted provider catalogs can carry the remote ETag validator for conditional refreshes.
  • Added ANTHROPIC_AUTH_TOKEN bearer authentication for Anthropic-compatible gateways (#​5871)
  • Added Claude Opus 5 support for Anthropic and Amazon Bedrock with adaptive thinking, inference profiles, prompt caching, and preserved AWS validation messages (#​7081 by @​unexge, #​7083 by @​davidbrai).
Changed
  • Changed Radius OAuth device authorization, token exchange, and refresh requests to use the configured gateway directly.
  • Changed ModelsError messages to append the underlying cause, so auth failures such as OAuth refresh failed for openai-codex report the provider response instead of a bare wrapper message.

v0.82.0

Compare Source

Breaking Changes
  • Replaced getBuiltinModelDataUrl(provider) with getBuiltinModelDataGeneratedAt() so built-in catalog freshness uses its recorded generation time instead of installation-dependent file metadata (#​7016 by @​davidbrai).
Added
  • Added Kimi Code subscription OAuth login for the kimi-coding provider, with device authorization, token refresh, and OAuth host overrides (#​6935 by @​zaycruz).
  • Added OpenRouter OAuth PKCE login that mints a user-controlled API key for chat and image providers (#​6927 by @​rsaryev).
  • Added Tool.constrainedSampling with strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants, enforcing provider-side constrained tool sampling across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. See Constrained Sampling for Tools.
  • Added supportsGrammarTools and supportsStrictTools compatibility flags, expanded supportsStrictMode to Responses and Bedrock models, and generated model capability metadata to gate constrained sampling.
Changed
  • Changed generated model catalogs to expose only provider-verified reasoning effort levels from models.dev (#​6928 by @​davidbrai).
Fixed
  • Fixed OpenAI Codex cached WebSocket continuations after grammar tool calls to send only the real tool-result delta.
  • Fixed constrained tool sampling across Google, Amazon Bedrock, Mistral, and Azure OpenAI Responses adapters, including model-aware strict-tool capabilities, grammar configuration validation, and malformed grammar-call replay errors.
  • Fixed cacheRetention: "none" to disable implicit prompt-cache writes for supported OpenAI models and session-based caching for OpenAI Codex (#​6618 by @​tmustier).
  • Fixed DNS lookup failures such as getaddrinfo, ENOTFOUND, and EAI_AGAIN to trigger automatic assistant retries (#​6946 by @​christianklotz).
  • Fixed OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after previous_response_not_found errors (#​6955 by @​davidbrai).
  • Fixed OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits (#​6980 by @​petrroll).
  • Fixed OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for ~anthropic/*-latest aliases (#​6941 by @​mteam88).

v0.81.1

Compare Source

Added
  • Added retryAssistantCall() for bounded retries of transient assistant failures with lifecycle callbacks and abort handling (#​6901 by @​davidbrai).
Fixed
  • Fixed Kimi K3 models from Moonshot AI and Moonshot AI China to use the OpenAI thinking format and expose reasoning effort support.

v0.81.0

Compare Source

Added
  • Added Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints, API-key authentication, and generated model catalogs (#​6858 by @​QuintinShaw).
  • Added contentText for extracting joined text from message content (#​6840 by @​xl0).
  • Added a shared uuidv7 utility for time-ordered identifiers (#​6834 by @​xl0).
  • Added optional usage metadata to tool result messages (#​6671 by @​davidbrai).
Changed
  • Changed generated model catalogs to keep TypeScript model shapes separate from ignored JSON model values, reducing generated source churn (#​6765 by @​mitsuhiko).
  • Changed model generation to validate ignored provider data before compilation; npm run build refreshes model data as before, while npm run build:offline reuses existing data without network access.
Fixed
  • Fixed stored API-key credentials to apply their provider-scoped env values during auth resolution, including Amazon Bedrock profiles (#​6864 by @​cristinaponcela).
  • Fixed OpenAI-compatible cross-provider replay to preserve unique tool call IDs when multiple calls share a provider call ID (#​6854 by @​cristinaponcela).
  • Fixed Kimi K3 to expose its supported low, high, and max thinking levels, and normalized the k2p7 alias to the canonical kimi-for-coding model.
  • Fixed the OpenCode Go provider to support models routed through the OpenAI Responses API.
  • Fixed the pi-ai executable path to match npm registry metadata, avoiding repeated consumer lockfile changes (#​6812 by @​jmfederico).
  • Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs, enabling models that reject UUIDv4 IDs (#​6834 by @​xl0).
  • Fixed GitHub Copilot long-context pricing tiers in generated model metadata (#​6668).
  • Fixed Kimi Coding subscription models to report API-equivalent implied costs when models.dev reports zero pricing.
  • Fixed OpenAI Responses early stream endings to be classified as retryable provider errors (#​6727).
  • Fixed GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing (#​6853 by @​aadishv).
earendil-works/pi (@​earendil-works/pi-coding-agent)

v0.84.2

Compare Source

New Features
  • Fullscreen transcript search — Search and navigate matches in fullscreen mode. See TUI Fullscreen Viewport.
  • Configurable default tools — Choose startup built-in tools globally or per project. See Tools.
  • Configurable fullscreen exit output — Print the transcript or only a resume hint on exit. See Interactive Mode.
Added
  • Added fullscreen transcript search with Ctrl+Shift+F, incremental match highlighting, configurable search match theme colors, and next/previous navigation with Enter/Ctrl+G and Shift+Enter/Ctrl+Shift+G.
  • Added experimental strict JSON-schema constrained sampling for the default read, bash, edit, and write tools under PI_EXPERIMENTAL=1.
  • Added a fullscreen exit output setting to choose between printing the final transcript and only a session resume hint.
  • Added the defaultTools setting for configuring the initial built-in tool selection globally or per project.
  • Added --use-theme <name[/name]> to choose an initial per-run interactive theme without changing saved settings (#​7722 by @​rwachtler).
  • Added expandPromptTemplates to extension pi.sendUserMessage() options for explicitly dispatching commands and expanding skills and prompt templates. See pi.sendUserMessage() (#​7857 by @​mrexodia).
  • Added inherited createGatewayBindingFetch() for routing Cloudflare AI Gateway requests through a Workers AI binding without an API token (#​7901 by @​Maximo-Guk).
  • Added inherited AssistantMessage.endTurn to preserve OpenAI Codex's terminal end_turn signal for diagnostics (#​7766).
  • Added inherited unbound single-line transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#​7903 by @​midastruth).
Changed
  • Changed inherited Kimi Coding requests to use pi's runtime User-Agent header.
  • Replaced the inherited Mistral SDK transport with a native Chat Completions HTTP stream, eliminating its generated client and schema runtime overhead.
  • Documented the generic AI_AGENT=pi process marker and how it differs from PI_CODING_AGENT=true (#​7747).
  • Changed inherited OpenAI Responses deferred tool loading to prefer message-anchored additional_tools where supported while retaining tool-search and top-level fallbacks (#​7709).
  • Reduced inherited fullscreen rendering allocation churn by painting full-width layout rows directly instead of recompositing them on every frame.
Fixed
  • Fixed root Markdown files such as README.md and AGENTS.md in skill directories being reported as broken skills unless they declare valid skill frontmatter (#​7805).
  • Fixed single-object edit tool inputs failing validation by accepting them as one-edit arrays in both coding-agent and harness edit tools (#​7835).
  • Fixed managed-tool downloads delaying TUI startup and hiding diagnostics in fullscreen mode by mounting the TUI first and showing download progress and warnings inside it.
  • Fixed opening a model selector immediately after startup cancelling and restarting the in-progress model catalog refresh.
  • Fixed inherited GitHub Copilot login triggering API rate limits while enabling model policies by limiting concurrent policy updates (#​6187).
  • Fixed fullscreen transcript search snapping back to the current match during manual scrolling and fragmented mouse input leaking into the search query.
  • Fixed inherited required LaTeX arguments starting on a new line being parsed as empty (#​7760).
  • Updated the transitive nanoid development dependency to address a denial-of-service vulnerability.
  • Fixed fallback rendering for extension tool results to collapse long output and honor tool expansion (#​7979).
  • Fixed JSON and RPC message_update events dropping cumulative usage during streaming. See JSON Event Mode and RPC message_update (#​7982 by @​christianklotz).
  • Fixed pi.sendMessage(..., { triggerTurn: false }) steering an active run instead of only recording the custom message (#​8022 by @​cristinaponcela).
  • Fixed the defaultTools setting dropping extension and SDK custom tools when selecting built-in defaults.
  • Fixed the subagent example rejecting YAML array syntax for the tools frontmatter field (#​7598 by @​alexsavio).
  • Fixed the subagent example dropping parent session model, thinking, and tool configuration (#​7897 by @​virtuald).
  • Fixed custom system prompts concatenating the current working directory with later appended prompt content (#​7887 by @​distributedlock).
  • Fixed inherited OpenAI Responses function and custom tool calls losing namespaces during streaming, proxying, and replay (#​7709).
  • Fixed inherited upstream request buffer failures not triggering automatic assistant retries.
  • Fixed inherited built-in and custom DeepSeek API models sending output limits through an unsupported field.
  • Fixed inherited Amazon Bedrock replay rejecting tool arguments that contain empty object keys while preserving all valid nested values (#​7882 by @​muyiyr).
  • Fixed inherited DeepSeek compatibility detection for base URLs whose hostname contains uppercase letters (#​7933 by @​yearth).
  • Fixed inherited Google Generative AI and Vertex AI responses with tool calls incorrectly treating output-limit or provider-error stops as normal tool use (#​8059).
  • Fixed inherited fullscreen mouse drag selection and OSC 8 link activation in terminals that report generic SGR mouse release button codes (#​7963).
  • Fixed inherited focused fullscreen overlays not receiving mouse wheel or viewport scroll keys such as PageUp and PageDown (#​7894).
  • Fixed inherited LaTeX control spaces split across line endings causing complete expressions to fall back to raw source.
  • Fixed split Alt+Enter input over SSH being misread as Escape, added PI_TUI_ESC_TIMEOUT for high-latency terminals, and limited that timeout to lone Escape input (#​7899 by @​powerfooI).
  • Fixed inherited idle fullscreen sessions repainting and clearing text selection when the terminal loses focus (#​7892 by @​terrorobe).
  • Fixed fullscreen selection copy to use the host clipboard and report failure instead of claiming success when OSC 52 is unsupported (#​8110 by @​Panoplos).

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](https://redirect.g

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: Enabled.

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

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


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

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot enabled auto-merge (squash) July 24, 2026 18:56
@renovate
renovate Bot force-pushed the renovate/@earendil-works-packages branch from 95fd95d to 6ce5aae Compare July 27, 2026 06:42
@renovate renovate Bot changed the title fix(deps): update @earendil-works packages to ^0.81.0 fix(deps): update @earendil-works packages to ^0.82.0 Jul 27, 2026
@renovate
renovate Bot force-pushed the renovate/@earendil-works-packages branch 8 times, most recently from e18d2b8 to 8e21b4c Compare August 2, 2026 01:40
@renovate renovate Bot changed the title fix(deps): update @earendil-works packages to ^0.82.0 fix(deps): update @earendil-works packages to ^0.83.0 Aug 2, 2026
@renovate
renovate Bot force-pushed the renovate/@earendil-works-packages branch 8 times, most recently from 9741c10 to 501f1c1 Compare August 9, 2026 13:28
@renovate renovate Bot changed the title fix(deps): update @earendil-works packages to ^0.83.0 fix(deps): update @earendil-works packages to ^0.84.0 Aug 9, 2026
@renovate
renovate Bot force-pushed the renovate/@earendil-works-packages branch from 501f1c1 to 64d0920 Compare August 14, 2026 18:46
@renovate
renovate Bot force-pushed the renovate/@earendil-works-packages branch from 64d0920 to a94f947 Compare August 15, 2026 00:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants