Skip to content

Releases: null12138/pi

v0.83.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 08:27

New Features

  • Credential export for external clients — pi auth print-api-key and pi auth print-bearer-token export configured credentials with automatic OAuth refresh and minimum-validity enforcement.
  • Headless OpenRouter sign-in — Complete /login over SSH by pasting the redirect URL or authorization code when the loopback callback is unavailable. See OpenRouter.
  • Claude Opus 5 on GitHub Copilot — Use Claude Opus 5 through GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot.

Breaking Changes

  • Upgraded bundled TypeBox aliases 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. Extensions using removed APIs must migrate to supported TypeBox APIs. See Package Dependencies (#7243 by @petrroll).

Added

  • Added pi auth print-api-key and pi auth print-bearer-token commands for exporting configured credentials to external clients, including automatic OAuth refresh and configurable minimum token validity (#7168).
  • Exposed the session's resolved model scope as ctx.scopedModels to extensions. See Extension Context (#7191 by @pungggi, #7215).
  • Added inherited per-request fetch injection for supported text and image provider transports.
  • Added the inherited "pending" stop reason for partial streaming messages. See Custom Provider Stream Pattern (#7151 by @lucasmeijer).
  • Added inherited raw provider stop reasons 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 login for remote and headless environments. See OpenRouter (#7114 by @rgarcia).
  • Added inherited Claude Opus 5 support for GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot (#7158 by @jay-aye-see-kay).

Changed

  • Changed inherited OAuth credential resolution to refresh tokens with less than five minutes of validity remaining instead of waiting until expiration (#7168).

Fixed

  • Added a status line when the tool output expansion is toggled (#7180).
  • Fixed file-backed SYSTEM.md and APPEND_SYSTEM.md prompts being omitted from the interactive startup context listing. See System Prompt Files (#7096).
  • Fixed context files loading twice when a linked Git worktree is nested under its main repository. See Context Files (#7221 by @arajkumar).
  • Fixed llama.cpp streamed responses reporting zero token usage and leaving session context accounting empty. See llama.cpp (#7258 by @SteveImmanuel).
  • Fixed session replacement and committed tree navigation during an active response to abort and persist the outgoing turn instead of leaving dangling tool calls. See Sessions (#7022 by @tmustier).
  • Fixed failed Git package installs leaving partial directories that blocked clean retries. See Install and Manage (#7210 by @haoqixu).
  • Fixed the /model selector retaining a stale selection while filtering instead of highlighting the top match (#7211 by @christianbasch).
  • Fixed direct RPC bash commands bypassing extension user_bash handlers. See User Bash Events (#7214).
  • Fixed skills, prompts, and themes losing package source metadata after extensions reload resources. See Resource Events (#6968).
  • Fixed cancellation of concurrently running user bash commands so every active command is aborted (#7103 by @yzhg1983).
  • Fixed duplicate messages appearing when extensions switch sessions during interactive startup (#7110 by @yzhg1983).
  • Fixed inherited Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels (#6951, #6998).
  • Fixed inherited Z.AI output limits being sent through an unsupported parameter. See Providers (#7174 by @HyeokjaeLee).
  • Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys. See Amazon Bedrock (#7176 by @christianbasch).
  • Fixed inherited image fallback paths overflowing narrow terminals, shortened home-directory paths, and made absolute paths clickable when terminal hyperlinks are available (#7262).
  • Fixed inherited OpenAI-compatible tool calls losing their function arguments when malformed deltas also contain an empty custom object (#7288 by @sunnyyoung).

v0.75.59

Choose a tag to compare

@github-actions github-actions released this 14 Jul 14:58

Added

  • Claude Code-style /goal system: goal condition is injected into system prompt, evaluated each turn by an LLM evaluator, and the runner never stops until the condition is met or the user clears it.
  • /goal status display showing condition, running time, turn count, token spend, and evaluator reason.
  • /goal clear (and aliases stop/off/reset/cancel) to clear the active goal.
  • Evaluator returns nextDirection when goal is not yet met, guiding the next turn with a concrete instruction.
  • clearSessionGoal(), getLastAssistantMessage(), appendGoalCleared() APIs for programmatic goal management.

Changed

  • /goal with a condition now immediately submits it as a user message (like Claude Code).
  • Goal runner no longer pauses on duplicate output or error retry limits — it only stops when the evaluator confirms the condition is met.
  • System prompt includes <session_goal> tag when a goal is active, so the model is always aware of it.
  • Setting or clearing a goal rebuilds the system prompt immediately.
  • Error retries are now infinite with a fixed 5s delay instead of exponential backoff with a 10-attempt cap.

Removed

  • Duplicate-detection auto-pause from goal runner (relied on by the evaluator's nextDirection instead).

v0.75.58

Choose a tag to compare

@github-actions github-actions released this 11 Jul 16:23

Added

  • Manage/edit provider prompts prefill the current name, base URL, API key, and model list in the input field.
  • /goal runner auto-pauses after several consecutive near-duplicate assistant outputs (stuck/repeat loop).

Changed

  • Goal continuation prompt asks the model not to repeat prior status reports.

v0.75.57

Choose a tag to compare

@github-actions github-actions released this 11 Jul 15:53

Added

  • Model hub tabs can be switched with ←/→ when the search box is empty (in addition to Tab).
  • Manage edit flow can change provider name/id, base URL, API key, and models; renaming updates models.json / auth.json entries.

Changed

  • Manage provider edit prompts always show name, URL, and API key fields; blank API key keeps the existing value.

v0.75.56

Choose a tag to compare

@github-actions github-actions released this 11 Jul 15:34

Added

  • Unified model hub at /model (and Ctrl+L) with Select / Cycle / Manage tabs: grouped model picking with recent models, cycle whitelist management, and interactive custom provider management.
  • OpenAI-compatible /login flow discovers models via GET {baseUrl}/models, uses human-readable provider ids, and falls back to selecting the first available model when no provider default exists.
  • models.json can be written from the TUI Manage tab (upsertProviderInModelsJson / removeProviderFromModelsJson).
  • Settings store recentModels (most-recent first, max 10) and update on model select/cycle.

Changed

  • /scoped-models is now an alias that opens the model hub Cycle tab.
  • Selecting a model after custom provider setup no longer requires a hard-coded default for every provider.

v0.75.55

Choose a tag to compare

@github-actions github-actions released this 31 May 13:32

Fixed

  • MCP tool calls no longer hang for 120s when server disconnects mid-call — pending promises are now rejected immediately on disconnect.
  • RPC client requests no longer hang forever when the subprocess disconnects.
  • sleep() no longer leaks AbortSignal listeners on normal completion.
  • Proxy and codex-responses AbortSignal listeners now use { once: true } to prevent leaks.
  • Startup checks (checkForNewPiVersion, checkForPackageUpdates, checkTmuxKeyboardSetup) now have .catch() to prevent unhandled rejections.
  • Added global unhandledRejection handler to prevent silent crashes.
  • MCP connect handshake timeout increased from 30s to 120s to accommodate npx cold starts.
  • /mcp <name> toggle now immediately reflects in selector without needing Esc+reopen.

Changed

  • MCP server initialize handshake timeout raised to 120s (was 30s) for npx cold start compatibility.
  • handleEvent switch (337 lines) split into 15 named _handleXxx() methods.
  • Slash command dispatch (170-line if-else chain) replaced with Map-based dispatch.
  • MCP tool grouping for system prompt moved from _rebuildSystemPrompt to MCPManager.getMcpToolDescriptions().

v0.75.54

Choose a tag to compare

@github-actions github-actions released this 31 May 07:18

Changed

  • MCP server startup now connects all servers in parallel (Promise.allSettled) instead of sequentially, dramatically reducing startup time when multiple servers are configured.
  • Toggling a server via /mcp now only stops/starts that single server instead of restarting all servers.

v0.75.53

Choose a tag to compare

@github-actions github-actions released this 31 May 07:13

Fixed

  • /mcp selector now fetches fresh config on each rebuild, so toggling a server on/off immediately updates the displayed status without needing Esc+reopen.

v0.75.52

Choose a tag to compare

@github-actions github-actions released this 30 May 14:19

Added

  • MCP tools now accept an optional _timeoutMs parameter that the AI can use to override timeout per-call (e.g. _timeoutMs: 300000 for 5 minutes). Stripped before sending to the MCP server. Documented in system prompt.

v0.75.51

Choose a tag to compare

@github-actions github-actions released this 30 May 14:10

Added

  • Per-tool MCP timeout via toolTimeouts map in server config (e.g. {"search": 300000, "ping": 5000}). Uses AbortSignal.any() to race per-tool timeout with caller's cancellation signal.