Skip to content

v0.1.23

Latest

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 28 Jul 17:53
· 96 commits to main since this release

Features

  • First-class max thinking level above xhigh--thinking max,
    /thinking max, ACP session/set_config_option, and RPC
    available_thinking_levels all accept the new 7th level. Anthropic
    adaptive-thinking models send output_config.effort: "max" (Opus 4.6 /
    Sonnet 4.6 accept max without xhigh, per the documented effort matrix);
    DeepSeek reasoning models send reasoning_effort: "max" (with xhigh
    keeping its historical "max" mapping so existing configs are unchanged);
    models without a max wire value clamp to xhigh/high. Legacy
    budget-based thinking gains a thinking_budgets.max slot (default 65536).
    Fixes #139.

  • Atlas Cloud provider presetatlascloud (aliases atlas-cloud,
    atlas) routes through the OpenAI-compatible chat-completions adapter at
    https://api.atlascloud.ai/v1 with ATLASCLOUD_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 the zai provider, and MiniMax-M3
    (MiniMax-M3, 1M context) under both minimax and minimax-cn. The
    upstream provider-id snapshot is updated so the mainland zhipuai/BigModel
    endpoint and the zai-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.2 or
    pi --provider minimax --model MiniMax-M3. Fixes
    #115.

  • /mcp slash 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 rpc no 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 after turn_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 through agent_end reaches 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 like npm:pkg@^1.2.0 previously re-ran a full
    npm install on every startup, and dist-tag specs could fail startup
    lock verification), npm root -g runs at most once per resolution pass,
    and pi update refreshes ranges/dist-tags while exact pins stay pinned,
    matching upstream TypeScript pi semantics. Lock entries whose stored
    pinned classification predates this change rotate cleanly instead of
    hard-failing verification. No new dependencies. From the report in
    #140.
  • CI gates repaired on maintests/e2e_transient_retry_resume.rs is
    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 unregistered cursor,
    llamacpp, and mistralrs); and clippy --all-targets -- -D warnings
    is clean again (six future_not_send guard-across-await sites converted
    to OwnedMutexGuard).
  • Windows WSAENOTCONN retry now also fires for TLS errors surfaced through
    non-Io variants
    is_retryable_not_connected_tls walks the TlsError
    source chain in addition to matching the direct Io variant, 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 OwnedMutexGuard at
    every spawned lock site; the fuzz workspace dropped its stale asupersync
    git-rev pin and re-locked on the published crate.