Skip to content

v2.0.0 — OpenCode, archived sessions, any laptop

Latest

Choose a tag to compare

@mpankaj151 mpankaj151 released this 11 Sep 07:51
· 2 commits to main since this release
0c65801

Four CLIs, nothing ages out, and it runs on any laptop that has any one of them.

OpenCode (new source)

  • Mirror adapter — OpenCode's SQLite DB is read read-only and projected to one JSONL per root session (sub-agents embedded, cost rolled up). The binary is never invoked on the indexing path; the mirror doubles as the backup.
  • Live — the watcher re-syncs on DB/WAL writes; the opt-in plugin (./install.sh --opencode-plugin) indexes a session the moment a turn settles.
  • Loss protection — a session deleted in OpenCode is archived to the raw vault before its mirror file goes; spilled tool outputs are inlined before OpenCode purges them; weekly VACUUM INTO DB snapshots.
  • Restore into OpenCode — a deleted session goes back through opencode import with its directory and parent links intact.
  • Enrichment through OpenCode — the opencode-headless provider runs the summariser via opencode run, selectable per machine; [enrichment].provider = "auto" picks whichever summariser CLI is on PATH.

Archived sessions and Restore

  • Rows are never deleted. When a transcript ages out (Claude Code's cleanupPeriodDays, opencode session delete, a manual rm) the session keeps its title, summary, cost and reasoning trail and moves to the new Archived tab. Usage stats, search, digests and the MCP server still count it.
  • ♻ Restore brings a session back from the raw vault, per row, only where it will actually succeed. scripts/restore-session.py --all --apply for a machine that already lost sessions.
  • archived_reason separates real sessions from subagent sidechain noise. Sidechains no longer create rows at all — 93% of one registry was empty agent-* rows.

Codex tracked again

  • Paginated rollouts (item_completed), zstd-compressed rollouts (.jsonl.zst) and archived_sessions/ are all indexed, archived and restored. An unknown dialect indexes with 0 turns and warns instead of vanishing silently.
  • Pricing uses the rollout's real model — every Codex session had been billed as gpt-5.

Any laptop, any subset of CLIs

  • Source availability means transcripts on disk, not the binary; config.toml is layered over config.toml.example; CLAUDE_CONFIG_DIR / CODEX_HOME / XDG_DATA_HOME / OPENCODE_DB are followed and baked into the background jobs.
  • Linux — install.sh renders and enables systemd --user units (watcher + nightly timer) from the same template as the launchd plists; --no-scheduler.
  • The nightly pipeline degrades cleanly: embeddings skip without the model, enrichment skips without a summariser, and a real failure exits non-zero instead of "Enriched 0/4".
  • tests/test_portability.py boots one-CLI laptops with stub binaries; CI runs Ubuntu and macOS × Python 3.11/3.12.

Correct costs

  • pricing.json re-tiered per model generation (Opus 4.5+/5, Sonnet 5, Haiku 4.5, gpt-5.2…5.5, Fable/Mythos). Every Opus session had been priced at the retired Opus 4.1 rate, 3× too high. An unknown model is loud and never overwrites a stored cost.

Honest UI and MCP

  • Resume and Bridge refuse for a CLI not installed on this machine; Restore is offered per row; truncated lists are marked; stats windows no longer leak the cutoff day; the heatmap follows the theme; sb and doctor read [ui].port.
  • Redaction extended (hf_, glpat-, pypi-, Slack webhook URLs) at every egress.

Docs

  • README, SETUP, ARCHITECTURE and ADDING-A-CLI rewritten for the current feature set; screenshots and the GIF tour regenerated from sb demo, which now seeds archived sessions and accepts --port N.

Upgrading: no breaking changes for an existing install — git pull && ./install.sh (idempotent — migrates the schema, re-renders the launchd/systemd jobs with your CLI home variables, rebuilds a venv older than Python 3.11, and re-prices every session on the first refresh). Then scripts/restore-session.py --all shows which aged-out sessions can come back, and raise cleanupPeriodDays in ~/.claude/settings.json on every machine.