Skip to content

v0.8.21 — ESC Cancel Fix + S39 Session Charts + S40 Context Gauges

Choose a tag to compare

@TheArchitectit TheArchitectit released this 26 Jul 16:30
· 755 commits to master since this release

v0.8.21 (2026-07-27)

ESC abort now cleanly skips retry nudges + real-time session gauges + stacked memory charts.

Three features and a critical P1 bug fix: pressing ESC mid-task previously fired up to 5 blind retry nudges that re-ran the exact task you just cancelled. That's fixed — the new 'cancelled' error category short-circuits the retry safety net on any user-initiated abort.

What's new

  • S39 — Sessions tab with stacked memory graph. Real-time stacked area chart of per-session memory usage (compact limit + context tokens) over time. Data persisted in new SQLite tables (session_heartbeats, token_samples) with a heartbeat hook that records token usage on every turn_end. Updates live via SSE (/api/sessions/events) using the same Last-Event-ID resumable-stream pattern as the compact event stream.
  • S40 — Per-session context gauges on Overview. Stacked bar of per-repo context usage (real-time via /api/sessions + SSE). Each session gets a proportional gauge showing context tokens vs compact limit — making it easy to see at a glance which repos are close to compaction.
  • S38 cancelled — ESC/Ctrl-C abort skips all retry nudges. The error-retry classifier now recognizes stopReason === "aborted" (the signal pi fires on ESC) as a new 'cancelled' category. Both errorRetryCount and consecutiveErrors are reset to zero (a cancel is not a failure for circuit-breaker purposes).
  • Dashboard "Buy Me a Coffee" support link.

Fixed

  • P1 — ESC abort fires blind retry nudges. The S38 classifier matched s.includes('aborted') and returned 'transient' — identical to a provider 5xx. The safety net then fired up to 5 retry nudges, re-running the task the user explicitly cancelled. Fixed by introducing the 'cancelled' category. (5742881)
  • Dashboard build: recharts dependency. The S39 chart component imported recharts which was declared in package.json but never installed — causing the vite build step to fail. Pinned to ^2.15.4. (a2319a1, fb2f2bf)
  • S40 lastCtxTokens fallback. Providers without usage metadata gracefully fall back to last known value instead of showing 0. (90a7b78)

Tests

S38 file: 37 tests (up from 33). Full gate: 628 pass / 0 fail across 59 files in ~29s. Guardrails clean.

Migration

None — fully backward-compatible. Update with pi update --extensions.


Full release notes · Changelog · npm