Skip to content

Releases: mpankaj151/session-browser

v2.0.0 — OpenCode, archived sessions, any laptop

Choose a tag to compare

@mpankaj151 mpankaj151 released this 11 Sep 07:51
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.

v1.1.0 — automatic work journal

Choose a tag to compare

@mpankaj151 mpankaj151 released this 12 Jul 18:42
11bfa73

Every session now journals itself — and any window of your history becomes a report.

Work journal (new)

  • Journal-grade enrichment — the nightly one-liner becomes a full journal per session: accomplishments, key decisions with rationale, explorations set aside, open threads, and a reusability note. Stored in sessions.*, session_snapshots, and a rendered markdown journal artifact.
  • SessionEnd hook — sessions are journaled the moment they end (detached, never blocks shutdown). Stop keeps its instant-indexing role; a re-fire with no new activity costs nothing.
  • Resumed sessions re-enrich incrementally — prior journal + only the new turns, so updates never re-pay for the whole transcript.
  • Daily digest — daily-logs/YYYY-MM-DD.md assembled deterministically per local day (no LLM cost), self-healing for missed or stale days; final step of every refresh.
  • work-journal skill — linked into ~/.claude/skills at install. Ask Claude "what did I do last week", "monthly summary", or "draft my self-assessment for the last quarter" → paste-ready Markdown + a self-contained HTML timeline, generated from the journal, never by re-reading transcripts. Personal report framing via [reports].style_override.

Fixes & defaults

  • Codex sessions were silently never enriched (transcript lookup missed rollout-*.jsonl naming) — fixed via adapter.session_id_for_path.
  • Enrichment now pins claude-sonnet-5 by default (predictable cost on API billing; [enrichment.claude_headless] model to change, "" for CLI default).
  • install.sh registers Stop + SessionEnd hooks and symlinks shipped skills; uninstall.sh reverses both.

Upgrading: git pull && ./install.sh (idempotent — registers the new hook and skill links). One-time journal of existing history: sb refresh --enrich.

v1.0.2 — cold-machine install fixes

Choose a tag to compare

@mpankaj151 mpankaj151 released this 08 Jul 19:48

Patch release — three more first-run fixes from real cold-machine installs (thanks again to our field tester 🙌). No feature changes.

Fixed

  • Embedding model download failed on machines without a warm cache — even when explicitly authorized. semsearch set HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE at import; huggingface_hub freezes those into module constants on first use, so the authorized download retry was a permanent no-op ("outgoing traffic has been disabled"). The offline-first guarantee now uses the local_files_only=True kwarg instead of env vars — same privacy promise, no frozen global state — and embed-sessions.py prints a 3-line actionable message instead of a 100-line traceback when the model is genuinely unreachable. New regression test runs against an empty HF_HOME.
  • sb doctor could hang forever at the UI probe: the curl had no deadline, and a wedged/suspended process holding port 7655 accepts the TCP connect but never answers. The probe now has a 3-second timeout and distinguishes "UI not running" from "port held by a non-answering process — sb stop, then sb ui".
  • sb ui on a busy port died with a bare exit 1. It now checks the port first and tells you the UI may already be running (and how to restart) instead of silently spawning a doomed process. Existing installs: re-run ./bin/install-cr.sh to pick up the new function.
  • Post-install "what now?" moment: install.sh now ends with an unmissable next-steps block (./bin/install-cr.sh → source ~/.zshrc → sb ui / sb demo / sb doctor), matching bootstrap.sh — and mentioning the install-cr.sh step manual-clone users need before sb exists.

Full changelog: v1.0.1...v1.0.2

v1.0.1 — first-run & recovery fixes

Choose a tag to compare

@mpankaj151 mpankaj151 released this 08 Jul 15:26

Patch release — first-run and recovery fixes from launch-week field reports. No feature or behavior changes beyond the installers.

Fixed

  • Install failed on stock Macs with !! python3 >= 3.11 required (reported by our first field tester 🎉). macOS resolves python3 to the Xcode CLT build (often 3.9) even when a modern Python is installed. Both install.sh and bootstrap.sh now hunt for python3.13 / python3.12 / python3.11 before settling for python3, and the error — when it does fire — prints the version found plus the exact brew / apt command to fix it. The README Quick start now states the prerequisite above the one-liner.
  • Moving the repo directory broke the install unrecoverably. Both installers checked for the presence of their artifacts (Stop hook, cr/sb rc blocks) rather than their correctness, so re-running them didn't repair stale absolute paths. They now repoint stale entries — foreign hooks and unmanaged rc content preserved — making the documented recovery (./install.sh && ./bin/install-cr.sh from the new location) actually work. Covered by new regression tests that simulate the move under an isolated HOME.

Docs

  • New README section on AI summaries/topics: enriching your existing history is opt-in (sb refresh --enrich) since it spends your plan's quota; new sessions are summarized automatically by the nightly job (only summary-less sessions are ever sent).
  • docs/SETUP.md: install flags are now a table with explanations.

Full changelog: v1.0.0...v1.0.1

v1.0.0 — Session Browser

Choose a tag to compare

@mpankaj151 mpankaj151 released this 06 Jul 23:16

First stable release — one local, private home for every AI coding session across Claude Code, GitHub Copilot CLI, and Codex.

demo

Highlights

  • Unified session index — every session from ~/.claude, ~/.copilot, and ~/.codex in one searchable place, updated live by a file watcher.
  • Search three ways — keyword, semantic (vector), and FTS5 full-text over the actual conversations.
  • Usage dashboard — GitHub-style activity heatmap, per-day/model/project/CLI token + cost breakdowns, and the headline: what this month's work would have cost at public API list prices on your flat-rate plan. Also in the terminal: sb stats.
  • Resume from anywhere — cr <session_id> resumes any session in the current directory, not just where it started.
  • Cross-CLI bridge — hand a session off Claude ⇄ Copilot ⇄ Codex with a context primer.
  • Reasoning trails — a readable decision trail for each session.
  • MCP server — your session history as tools inside Claude Code itself.
  • Demo mode — sb demo seeds synthetic sessions so you can see everything in 30 seconds with zero real data.

Privacy by design

Everything runs and stays on your machine: SQLite + Flask + vanilla JS. No cloud calls, no telemetry, works fully offline. A single redaction chokepoint masks API keys, tokens, Authorization headers, and URL credentials in every egress — copy/export/bridge primers, the search index, reasoning trails, LLM enrichment prompts, and MCP tool results. The web UI binds to loopback with Host-header and CSRF protection.

Install

curl -fsSL https://raw.githubusercontent.com/mpankaj151/session-browser/main/bootstrap.sh | bash

SB_INSTALL_ARGS=--lite skips the ~2 GB semantic-search ML stack (keyword + full-text search still work).

Quality

  • 20-test suite (redaction shapes, monotonic upserts, timestamp normalization, XSS escaping, shell-heredoc compilation) running on a ubuntu/macos × Python 3.11/3.12 CI matrix.
  • Two full adversarial review rounds — ~60 findings found, verified, and fixed before this release.