Skip to content

Releases: beautifulrem/pi-sakura-cyberdeck

v1.2.0

Choose a tag to compare

@beautifulrem beautifulrem released this 30 Sep 13:16
46792d2

A robustness, performance and "lighter footprint" release based on a full code review
against Pi 0.99.1. Extension code shrank from ~12,000 to ~8,700 lines, the pack no longer
redraws the terminal while idle, and it no longer rewrites tool or command output.
Supported Pi versions: 0.87.1 and newer (tested on 0.87.1 and 0.99.1).

Highlights

  • Idle means idle: the footer no longer redraws the screen 4×/second forever (0 bytes written while idle, was ~3.4 KB/s).
  • Your output stays yours: tool results, !cmd output and thinking are shown exactly as Pi renders them — no more added ✓/× glyphs, lost indentation, 200-line caps or replaced lines.
  • Fixed /zentui fixed-editor disable turning off (and saving) the main editor.
  • Fixed the working HUD being stuck at ↓ 1 token on Anthropic models, and "done in 0s" after multi-step runs.
  • Safer git: no more index.lock collisions with the agent's own git commands; far fewer git processes.
  • Removed the obsolete fixed-editor compositor (~1,950 lines); use Pi's native "tuiMode": "fullscreen".
  • Matrix rain is now opt-in (/sakura-matrix on) and no longer fights the shimmer.
  • 256-color terminals and NO_COLOR are now respected by every effect.
  • New: this what's-new notice after updates, and /sakura-changelog to read the changelog inside Pi.

Fixed — editor, footer and settings (Zentui)

  • /zentui fixed-editor disable|enable|toggle was parsed as the editor switch and disabled the main editor, persisting it to config. Direct commands are now parsed strictly (/zentui <target> <on|off|toggle>); anything else shows usage. If this bug turned your editor off earlier, run /zentui editor on once.
  • Lines you typed in the editor that contained both the model and provider name (e.g. "compare gpt-5 with OpenAI") were deleted from the editor view. Only lines Zentui itself renders are ever stripped now.
  • Footer token and cost totals undercounted: compaction, branch-summary, usage entries and tool-result usage (subagents / codemode) were missing. Totals now match Pi's own footer.
  • An extension status with a key such as constructor or __proto__ crashed every footer render.
  • Settings changes (enabling git commit/metrics, package version, footer format, icon mode) did not apply until the next refresh or restart; they now apply immediately.
  • Built-in defaults disagreed with what users actually got (refresh interval, footer format, icons). Defaults now come from one place.
  • A corrupt sakura-cyberdeck-zentui.json silently reset every setting to defaults. You now get a warning naming the file and the JSON error, and the file is never overwritten until fixed.
  • $sep in a custom footerFormat always rendered | regardless of the separator setting.
  • Numbers from 999,500 to 999,999 were shown as 1000k (now 1.0M).
  • A "bold accent" style spec dropped the theme color.
  • Gradients split emoji ZWJ sequences and combining marks (e.g. accented folder names) into broken pieces.
  • The git segment silently froze with stale data when git status output exceeded 1 MB (very large change sets); the buffer is now 16 MB and failures show [git n/a].
  • Non-English git locales made normal folders look like git errors; git now runs with LC_ALL=C.
  • Windows absolute paths were not recognised in git path handling.
  • Runtime versions ignored the project folder and went stale after nvm use / pyenv local; they now run in the project folder and refresh when version files change.
  • Thinking level max had no color of its own (new colors.editorThinkingMax).

Fixed — tool cards, messages and thinking

  • !cmd output: expanded output was capped at ~19 lines, the bottom border was drawn as a second "BASH · COMPLETE" header, output lines that looked like box edges or ─── rules were replaced by frames, and failed or cancelled commands were labelled ✓ COMPLETE. !cmd output is now stock Pi.
  • Tool card bodies were rewritten: syntax and word-diff highlighting was lost, lines starting with ok/Successfully/error got ✓/× glyphs (which were copied with the text), lines starting with read/edit/snake_case words lost their indentation, long lines lost a trailing ..., expanded output was capped at 200 lines, and collapsed bodies could be replaced by summaries. Bodies are now passed through byte-for-byte inside the sakura frame.
  • Diff lines lost their indentation around line-number width changes (e.g. lines 95–105).
  • Tool card status (running / done / failed) was guessed from the text; it now comes from the tool's real state.
  • Clicking a tool card to expand it in fullscreen mode hit the wrong row.
  • Clicking a thinking block to show/hide it stopped working in fullscreen mode, per-message thinking toggles were ignored, and visible thinking was cut to 16 lines. Thinking is now stock Pi; hidden thinking shows a sakura ✦ Thought label.
  • User messages lost ordered-list numbering (1)), backslash escapes and other extensions' markdown transforms. They are now Pi's own rendering inside the rail.
  • Prototype patches could leave stale copies behind after uninstall, could stack on reload, and clashed with the upstream pi-zentui package's registry.

Fixed — working HUD (shimmer)

  • The live token counter stayed at ↓ 1 token on Anthropic models while streaming (the provider's early placeholder count was treated as final).
  • After an aborted or failed message the count dropped from thousands back to 1.
  • The completion notice measured only the last turn ("Sparkled for 0s" after a run with tool calls); it now covers the whole run.
  • The completion notice used an invalid notification type, and also appeared after Esc or errors. It now shows only after successful runs, once Pi has fully settled (after retries/compaction).
  • The spinner verb changed after every tool call; it now stays the same for the whole run.
  • The "stalled" coral fade and the tool-use pulse were never actually shown; both now work.
  • The highlight popped in at the left edge instead of sweeping in smoothly; the first thinking frame could glow at a random phase.
  • ©, ® and ™ were counted as two tokens each in the live estimate.
  • In RPC mode every prompt sent clients a notification full of raw terminal escapes; print/json modes ran animation timers for nothing. Effects now run only in the interactive TUI.

Fixed — matrix, header, theme

  • Matrix listened to session_switch, an event Pi removed in 0.65.
  • Matrix and shimmer both drove Pi's working indicator; switching matrix off mid-run reset the shimmer to Pi's default spinner.
  • /sakura-matrix preview claimed "5 seconds" but did nothing while disabled or outside the TUI, and stopped the rain for the rest of a running turn.
  • A failed matrix settings write left the in-memory state changed without stopping the rain or telling you.
  • The header's top padding grew with terminal height (19 blank lines at 50 rows) and changed on every vertical resize; it is now a fixed single line.
  • Theme dim text failed WCAG AA contrast (3.5:1 → 4.7:1); muted borders are more visible.

Performance

  • No redraws while idle (footer pulse is now opt-in and only runs while the agent works).
  • Context-usage and usage-total calculations are cached like Pi's own footer instead of rescanning the session on every frame.
  • Working HUD: one ~11 Hz clock instead of three (≈40–55 renders/s → ≤11).
  • Git: one status --porcelain=2 --branch --show-stash plus one rev-parse per refresh instead of ~10 processes; nothing runs when git segments are hidden.
  • Runtime/package probes run only when their segments are visible, once per change, never in non-interactive modes.
  • Tool cards are cached with no size limit and do no per-line regex work; the gradient cache no longer thrashes on animation frames.
  • The clock segment wakes once a minute instead of every second.

Security and robustness

  • A malicious repository could inject terminal escape sequences (e.g. clipboard writes) through package.json version, folder names, branch/tag names or runtime output shown in the footer. All external text is now sanitised.
  • Git runs with GIT_OPTIONAL_LOCKS=0 and -c core.fsmonitor=false, and project probes (git, runtime, package) are skipped in untrusted projects.
  • Config and state writes (Zentui, matrix, changelog) are atomic; broken config files are reported instead of silently replaced.
  • Matrix settings now live in Pi's agent directory (respects PI_CODING_AGENT_DIR) like the other pack files.
  • All UI work is guarded for disposed UIs and non-TUI modes; shutdown cleanup is idempotent; nothing prints with console.* while the TUI runs.

Changed

  • Sakura Matrix is off by default and is now a rain widget only (it no longer changes the working message or indicator). Turn it on with /sakura-matrix on; saved settings are kept.
  • New /sakura-matrix subcommands: help, height N; clearer validation and "not saved" messages.
  • The footer pulse animation is opt-in: /zentui pulse on (setting animations.footerPulse).
  • New switch features.messageStyle (/zentui messages on|off) controls message and tool styling independently of the editor. Existing configs keep their previous look: if you had the editor turned off, message styling stays off until you enable it.
  • Tool cards keep the sakura frame and status rail, but edit/self-rendered tools and image results use Pi's stock rendering.
  • The "Thought trail" tree is gone; hidden thinking shows a ✦ Thought label.
  • Header height is fixed; the header is only installed in the interactive TUI.
  • Runtime segment detects bun, deno, node, python, go, rust, ruby and java (~50 rarely used runtimes removed). Package version reads package.json, Cargo.toml, pyproject.toml and composer.json.
  • Default background project refresh is every 60 s (and only when something visible needs it).
  • Colors follow Pi's detected color mode: 24-bit on truecolor terminals, neares...
Read more

v1.1.6

Choose a tag to compare

@beautifulrem beautifulrem released this 30 Sep 11:39

Changes

  • Completely remove the bundled Codex/Grok subscription quota component: footer chips, OAuth quota requests, polling timers, disk caching, and /dual-usage.
  • Remove the quota extension from the package manifest and its default footer placement.
  • Keep the theme, header, matrix, Zentui chrome, and Claude shimmer.
  • Add package checks to prevent the removed quota component from being shipped again.

Upgrade

For an unpinned Git installation:

pi update git:github.com/beautifulrem/pi-sakura-cyberdeck

Restart Pi after updating. Pi does not automatically push package updates. Pinned installations stay on their selected tag/commit; to move to this release:

pi install git:github.com/beautifulrem/pi-sakura-cyberdeck@v1.1.6

Compatibility

  • Existing theme and Zentui configuration files are preserved; no destructive migration is performed.
  • Old quota placement entries and cache files can remain on disk harmlessly. They are not needed by this release.
  • /dual-usage is intentionally no longer available.
  • If you manually configured a standalone extension path ending in extensions/dual-quota/index.ts, remove that entry before updating. Normal package installations need no manual cleanup.
  • The fixed-editor compositor remains disabled by default and runtime-blocked on Pi 0.84+ even with a legacy fixedEditor.enabled: true setting. Use Pi's native tuiMode: "fullscreen" for a sticky editor.

Validation

Package checks, Git whitespace checks, and direct legacy configuration compatibility checks passed.

v1.1.4

Choose a tag to compare

@beautifulrem beautifulrem released this 25 Jul 21:38

Fixed

  • Removed transient pink per-thought timer from working HUD; total turn timer remains.
  • Passed fixed-cluster mouse clicks through to below-editor widgets.
  • Preserved compositor ownership when transcript selection drags into pinned UI.
  • Added package regression checks for mouse ownership and single-timer HUD.

v1.0.0

Choose a tag to compare

@beautifulrem beautifulrem released this 22 Jul 10:41