Features
-
First-class
maxthinking level abovexhigh—--thinking max,
/thinking max, ACPsession/set_config_option, and RPC
available_thinking_levelsall accept the new 7th level. Anthropic
adaptive-thinking models sendoutput_config.effort: "max"(Opus 4.6 /
Sonnet 4.6 acceptmaxwithoutxhigh, per the documented effort matrix);
DeepSeek reasoning models sendreasoning_effort: "max"(withxhigh
keeping its historical"max"mapping so existing configs are unchanged);
models without amaxwire value clamp toxhigh/high. Legacy
budget-based thinking gains athinking_budgets.maxslot (default65536).
Fixes #139. -
Atlas Cloud provider preset —
atlascloud(aliasesatlas-cloud,
atlas) routes through the OpenAI-compatible chat-completions adapter at
https://api.atlascloud.ai/v1withATLASCLOUD_API_KEY/
ATLAS_CLOUD_API_KEY. From
#141,
implemented independently after verifying the live service. -
Newer z.ai (GLM) and MiniMax models in the registry — the model catalog
now includes z.ai GLM-5.1 (glm-5.1, 200K context) and GLM-5.2
(glm-5.2, 1M context) under thezaiprovider, and MiniMax-M3
(MiniMax-M3, 1M context) under bothminimaxandminimax-cn. The
upstream provider-id snapshot is updated so the mainlandzhipuai/BigModel
endpoint and thezai-coding-plan/zhipuai-coding-plan/minimax-coding-plan
routing presets also surface these ids. Context windows, max-output ceilings,
pricing, and reasoning support are taken from the published
models.dev catalog and verified against the official
z.ai and MiniMax API docs.
Select them with e.g.pi --provider zai --model glm-5.2or
pi --provider minimax --model MiniMax-M3. Fixes
#115. -
/mcpslash command — reports MCP (Model Context Protocol) server
status in the interactive TUI instead of returning "Unknown command". Lists
any MCP servers an installed extension has registered and clarifies that Pi
does not read standalone MCP config files (.agents/mcp.json,
.pi/mcp.json,~/.pi/agent/mcp.json). Fixes
#112.
Bug Fixes
--mode rpcno longer drops or hangs the turn when stdin closes
— piping a single command (printf '{"type":"prompt",...}' | pi --mode rpc) tore the session down while the prompt task was still starting or
streaming: current builds silently lost every event after the ack, older
builds hung afterturn_start. The RPC loop now drains in-flight work at
EOF (streaming turns with retries and queued steering/follow-ups,
extension commands, auto-compaction, background bash), cancels extension
UI requests that can no longer be answered, guards the activity flags
against panic/cancellation leaks, and flushes the stdout writer behind a
shutdown sentinel so the full stream throughagent_endreaches the
client. Fixes
#137.- Startup no longer probes the npm registry for installed packages —
installed exact and conventional-range npm specs are now satisfied
locally (ranges likenpm:pkg@^1.2.0previously re-ran a full
npm installon every startup, and dist-tag specs could fail startup
lock verification),npm root -gruns at most once per resolution pass,
andpi updaterefreshes ranges/dist-tags while exact pins stay pinned,
matching upstream TypeScript pi semantics. Lock entries whose stored
pinnedclassification predates this change rotate cleanly instead of
hard-failing verification. No new dependencies. From the report in
#140. - CI gates repaired on main —
tests/e2e_transient_retry_resume.rsis
registered in the suite-classification and traceability registries
(caught via
#135);
the provider-metadata snapshot suite reflects reality again (95 canonical
providers / 51 aliases, including previously unregisteredcursor,
llamacpp, andmistralrs); andclippy --all-targets -- -D warnings
is clean again (sixfuture_not_sendguard-across-await sites converted
toOwnedMutexGuard). - Windows
WSAENOTCONNretry now also fires for TLS errors surfaced through
non-Iovariants —is_retryable_not_connected_tlswalks theTlsError
source chain in addition to matching the directIovariant, so a "socket
not connected" (os error 10057) reported via the TLS library is still
detected and retried with a fresh connection. Hardens
#111 /
#106. - Streamed tool-call partials carry id/name from the first delta
(#129),
fsync refusals on virtiofs/FUSE filesystems no longer fail writes
(#136),
and the extension compatibility layer supports current Pi package APIs
(pi-subagents 0.34.0 import contract; groundwork for
#132).
Internal
- Async runtime migrated to asupersync 0.3.9 with
OwnedMutexGuardat
every spawned lock site; the fuzz workspace dropped its stale asupersync
git-rev pin and re-locked on the published crate.