Skip to content

v0.4.0 — Checkpoint, attention-first UI, phone-first mirror

Choose a tag to compare

@m-morino m-morino released this 04 Jul 01:55

Added

  • Checkpoint (Space c, experimental). Reset a bloated session in one
    gesture: saikai has the session write its own handoff, shows you the
    extracted NEW SESSION PROMPT to vet/edit, and only on your confirm sends
    /clear and reseeds a fresh, lean session — with child→parent lineage
    (Shift+F6 jumps back). The whole pipeline is verified end-to-end against a
    real claude: injection settling, transcript freshness, child detection,
    and a reseed that confirms the turn actually started (a silently-swallowed
    Enter can no longer fake success). Each pane shows its real context
    fill
    (ctx 662K/1.0M (66%), the numbers Claude records — not a chars/4
    guess); Shift+F11 still sends a plain /compact, now verified the same way.
  • Attention-first list. One accent colour (cyan) is reserved for "needs
    you right now": the list opens grouped by state with Needs input first,
    the cursor lands on the first session waiting on a human, and Shift+F3
    hops to the next one. Everything else stays calm greyscale.
  • Web mirror: phone-first control. Drag-to-select as a block/rectangle
    (pane-respecting, like a desktop terminal emulator over an alt-screen) with
    edge auto-scroll and an http-safe Copy; a ⌨ composer tray (visible
    textarea) so the OS paste bubble and IME finally work on phones; an
    ergonomic key bar laid out by measured reach (loop keys ☰ List /
    ! Next on a shoulder row, d-pad + tall Enter in the thumb arc, Esc
    isolated on the far side) with hold-to-repeat arrows and a ⇄ Hand
    toggle that mirrors everything for left-handed use; Checkpoint and Compact
    ride the More row.
  • Web mirror: opt-in TLS (SAIKAI_MIRROR_TLS=1) with a cached self-signed
    EC certificate, plus SAIKAI_MIRROR_TLS_CERT/KEY for your own.
  • memory_safety one-knob presets (on / off / strict) for the
    live-pane RAM gate, replacing per-variable tuning for the common cases.
  • A permanent claude-seam probe (scripts/probe_claude_seams.py): one
    command re-audits every assumption saikai makes about the installed claude
    binary (transcript persistence, /clear child minting, /compact
    injection, --resume, the sessions registry, all transcript readers) —
    run it after claude updates.

Changed

  • Marker vocabulary rebuilt around one attention accent and dim tiers,
    with ASCII-safe glyphs (? waiting · ! reply due · ~ working · =
    idle · . recent) so widths never garble on CJK terminals; a contextual
    marker legend explains each row's glyphs in the preview.
  • Preview leads with recognition: your first/last message first, then
    details; the Summary pane is selectable text.
  • The mirror's inline page script is CSP-pinned by hash (script-src 'self' 'sha256-…', no unsafe-inline), refused inputs answer 429 instead of a
    silent 204, and client disconnects no longer spam tracebacks.
  • CLI: saikai --table | head exits cleanly on a closed pipe; --preview
    re-renders when the cache is older than the transcript.

Fixed

  • 40+ defects from a five-round audit campaign (real-claude E2E probes,
    hostile-input batteries, and an external cross-review), including: the
    checkpoint reseed being silently swallowed after /clear; the mirror page
    rendering nothing since the CSP hardening (inline script blocked); user
    content ([wip]-style titles, folder names) being eaten as markup — or
    crashing the app — in toasts, tabs, table cells, modals, and the folder
    picker; a duplicated event handler disabling header-skip; chronological
    sorts comparing mixed-offset ISO strings lexically; same-mtime cache
    staleness across preview/prefs/titles/lineage; non-dict JSONL lines
    aborting scanners (including b2 child detection); corrupt pref/config
    shapes crashing startup; a future mtime reading as "active"; Windows
    watchdog missing modern shells (nu/fish/xonsh); and venv PATH stripping
    missing trailing separators. Regression nets (AST sweeps, CSP-hash and
    markup-safety contracts) now guard each class.