Repository navigation
Releases: null12138/pi
Releases · null12138/pi
Release list
v0.83.0
New Features
- Credential export for external clients —
pi auth print-api-keyandpi auth print-bearer-tokenexport configured credentials with automatic OAuth refresh and minimum-validity enforcement. - Headless OpenRouter sign-in — Complete
/loginover 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, andValue.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-keyandpi auth print-bearer-tokencommands 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.scopedModelsto extensions. See Extension Context (#7191 by @pungggi, #7215). - Added inherited per-request
fetchinjection 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.mdandAPPEND_SYSTEM.mdprompts 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
/modelselector retaining a stale selection while filtering instead of highlighting the top match (#7211 by @christianbasch). - Fixed direct RPC bash commands bypassing extension
user_bashhandlers. 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
customobject (#7288 by @sunnyyoung).
v0.75.59
Added
- Claude Code-style
/goalsystem: 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. /goalstatus display showing condition, running time, turn count, token spend, and evaluator reason./goal clear(and aliasesstop/off/reset/cancel) to clear the active goal.- Evaluator returns
nextDirectionwhen goal is not yet met, guiding the next turn with a concrete instruction. clearSessionGoal(),getLastAssistantMessage(),appendGoalCleared()APIs for programmatic goal management.
Changed
/goalwith 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
Added
- Manage/edit provider prompts prefill the current name, base URL, API key, and model list in the input field.
/goalrunner 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
Added
- Model hub tabs can be switched with
←/→when the search box is empty (in addition toTab). - Manage edit flow can change provider name/id, base URL, API key, and models; renaming updates
models.json/auth.jsonentries.
Changed
- Manage provider edit prompts always show name, URL, and API key fields; blank API key keeps the existing value.
v0.75.56
Added
- Unified model hub at
/model(andCtrl+L) with Select / Cycle / Manage tabs: grouped model picking with recent models, cycle whitelist management, and interactive custom provider management. - OpenAI-compatible
/loginflow discovers models viaGET {baseUrl}/models, uses human-readable provider ids, and falls back to selecting the first available model when no provider default exists. models.jsoncan 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-modelsis 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
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
unhandledRejectionhandler 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
initializehandshake timeout raised to 120s (was 30s) for npx cold start compatibility. handleEventswitch (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
_rebuildSystemPrompttoMCPManager.getMcpToolDescriptions().
v0.75.54
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
/mcpnow only stops/starts that single server instead of restarting all servers.
v0.75.53
Fixed
/mcpselector 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
Added
- MCP tools now accept an optional
_timeoutMsparameter that the AI can use to override timeout per-call (e.g._timeoutMs: 300000for 5 minutes). Stripped before sending to the MCP server. Documented in system prompt.
v0.75.51
Added
- Per-tool MCP timeout via
toolTimeoutsmap in server config (e.g.{"search": 300000, "ping": 5000}). UsesAbortSignal.any()to race per-tool timeout with caller's cancellation signal.