Skip to content

v0.5.3

Choose a tag to compare

@github-actions github-actions released this 27 Aug 11:09
· 60 commits to main since this release

What's new

Context evaporation is now the default (ACP compression removed)

The ACP context-compression stack (kernel, tools, IPC, UI) has been removed
from this release. Context Evaporation — the regenerable-tool-output
tiered manager introduced alongside ACP in 0.5.2 — is now the default
context manager, with Settings → 上下文管理 offering a clean
evaporation / off choice.

In evaporation mode, regenerable tool output (measured at ~87% of context
volume) is replaced at four waterline tiers — 60% / 85% / 95% of
min(context window, 256K budget) — by stubs that carry their own
restore instructions, keeping the conversation lean while staying fully
reproducible when re-read. The decision machine is monotonic
(full → snip → stub only escalates), protects the tail of the window and
recent errors, and backs off with hysteresis so batches stop before the
waterline instead of thrashing against it.

Cross-session collaboration channels

A new built-in channel-watch extension enables agent-to-agent
communication across sessions over the project's .local/agent-work/ channel/<topic>/ directories:

  • Sessions subscribe to a channel; channel messages appended by other
    sessions wake the subscriber with an actionable notification
    (debounced, de-duplicated, self-write suppressed, ping-pong capped)
  • The new channel_post tool makes the message the intent: one post =
    one wake-up, instead of N wake-ups per task as files were written —
    plain file edits no longer produce notifications
  • Coordinating skills (design-handoff for the initiating session,
    channel-pickup for the implementing one) ship with the app; the
    initiator now subscribes immediately after creating the channel, so the
    notification link works in both directions
  • Toggle: Settings → General (on by default)

Unified error system — silent failures now visible

Confusing dead-ends now surface as structured, actionable errors in one
place:

  • In-conversation error cards for failed turns: classified by a
    pattern table (title / suggestion / action), with retry, compact and
    copy-detail actions; auto-retry turns only card after they really give up
  • Composer inline error bar with draft recovery and one-click resend
  • Global toasts for background failures that used to be swallowed
  • Stream-guard trips are surfaced as warning cards instead of a
    silently truncated response
  • Transient "retrying" status row while the SDK auto-retries a
    failing provider call

Image preview: always on top + keyboard navigation

  • The full-screen image viewer now renders on a layer above everything
    else
    , so the floating "back to bottom" button no longer sits on top
    of the zoomed image
  • Multi-image previews support ← / → to step through the previous /
    next image without closing, Esc to close, and an n / total
    counter in the corner

Streaming performance (P0)

Fast models streaming 50–100+ deltas per second used to re-render the
whole app per event. Streaming events are now coalesced per animation
frame, selection and row-model subscriptions are stabilized, and
historical meta groups memoize by element identity — turn-delta cascades
no longer starve the main thread or drop frames during the status-line
and CenterOrb animations.

Crash auto-recovery

If the renderer dies while the main process survives (a crash the error
boundary cannot catch), the app now reloads automatically; 3 crashes
within 30 seconds stop and offer a dialog. Alongside it, bulky tool
results (repeated image base64 snapshots, 500KB × 4 per event) are slimmed
at the single emit point, and log/trace capture got hardening
(giant-event truncation, byte-based rotation, batched writes) — the trace
blow-up class of incident can no longer wedge the app.

Provider settings fixes

  • Empty-model validation now uses the built-in provider list, so clearing
    models on an existing custom provider is caught instead of landing a
    dead zero-model provider; baseUrl validation matches the setter's
    http(s):// policy
  • The "clear saved key" checkbox chain is removed — deleting credentials
    now happens through the row's "remove credential" / "delete" actions only
  • Pure baseUrl overrides for built-in providers consistently stay in the
    override form (no more form swap after saving)

Extension / MCP integration fixes

  • ctx.ui.theme now provides a real Theme instance instead of an empty
    cast — extensions that call theme.fg() etc. (e.g. pi-mcp-adapter's
    status bar, which crashed into permanent "not connected") work again
  • On Windows, the ~/.percho/ui-plugins link now falls back to a
    junction (no admin rights or Developer Mode needed), so the UI
    plugin docs stay reachable

Also in this release

  • pi SDK 0.84.0 → 0.84.3
  • LAN observer: 401 auth failure now reaches the token-gate error state
  • Long unbroken strings (URLs, tokens) no longer overflow message bubbles
  • Session-list copy icon vertically centered; copy diagnostics bubble
    z-ordered above rows
  • Default-empty evaporation config: zero behavior change until a tier
    is configured or enabled

Download

Platform File
macOS (Apple Silicon) percho-mac-arm64.dmg
macOS (Intel) percho-mac-x64.dmg
Windows percho-windows-x64.exe (installer) or percho-windows-x64.zip

macOS users can also brew install --cask jaxton07/tap/percho.

Ad-hoc signed (no Developer ID). On macOS, if Gatekeeper blocks the app, right-click it and choose Open (or run xattr -cr "/Applications/Percho.app" as a fallback). Windows may still show a SmartScreen prompt — click "More info" → "Run anyway".

Full Changelog: v0.5.2...v0.5.3