Repository navigation
v0.5.3
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_posttool 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-handofffor the initiating session,
channel-pickupfor 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.themenow provides a realThemeinstance instead of an empty
cast — extensions that calltheme.fg()etc. (e.g.pi-mcp-adapter's
status bar, which crashed into permanent "not connected") work again- On Windows, the
~/.percho/ui-pluginslink 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
evaporationconfig: 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