All notable changes to this project will be documented in this file. Format: Keep a Changelog. Versioning: SemVer.
- Claude Code provider (
session-recall-cc) — separate CLI for Claude Code session recall- FTS5 full-text search over Claude Code JSONL sessions
- Porter stemming, unicode61, prefix queries, bm25 column weighting
- Incremental on-demand indexing with mtime cutoff
- Symlink guard and bounded JSONL reads (security hardened)
- WAL mode + busy_timeout for concurrent access
- Auto-prune (configurable via
SESSION_RECALL_CC_PRUNE_DAYS, default 90) session-recall-claudealias
- Sidecar entry point — optional cron-based index pre-warming
python -m session_recall.providers.claude_code.sidecar --once
- Agent-runnable install doc —
deploy/install-claude-code.md- Sentinel-bracketed CLAUDE.md instructions with cross-CLI safety
- Per-repo default install (not global)
- Token budget tests for Claude Code provider output
[claude]pip extra — decorative marker for discoverability
- FTS5 query injection prevention (reuses upstream
sanitize_fts5_query) - Symlink traversal guard on all filesystem operations
- Bounded JSONL reads (1MB line cap, 5000 line cap)
- No writes to user-owned config files (
~/.claude/settings.json,CLAUDE.md, MCP config)
- Process-level isolation —
session-recall-ccis a separate binary; bugs cannot affectsession-recall - Env var gate — requires
SESSION_RECALL_ENABLE_CLAUDE_BACKEND=1 - Agent-driven recall — no hooks, no auto-mutation; agent reads instruction file and decides
- Cherry-picked from PR #8 (@osamarehman) with security hardening and architectural alignment
- Per-provider health dimensions —
session-recall health --provider <name>now shows 4 sub-dimensions per backend (Path Discovery, File Inventory, Recent Activity, Trust Model) instead of a single session-count check - Structured JSON health output —
providersdict in--jsonmode with per-provider dimensions for agent parsing (backward-compat:dimsarray preserved) - Helpful error messages — requesting a disabled backend now shows how to enable it (
export SESSION_RECALL_ENABLE_FILE_BACKENDS=1) instead of a cryptic "unavailable" error - Agent-runnable backend install guide —
deploy/install-other-backends.mdwalks agents through VS Code/JetBrains/Neovim setup with detection, confirmation prompts, idempotent shell snippets, troubleshooting, and rollback - "Works With" matrix in README — all 4 backends visible above Quickstart with direct links to setup guides
- 26 new tests (13 unit + 7 integration + 6 E2E) — 197 total
- README Health Check section expanded with per-provider examples, dimension table, JSON usage, and error guidance
deploy/install.mdprerequisites no longer require Copilot CLI — VS Code/JetBrains/Neovim are listed as alternativesdeploy/install-other-backends.mdverification steps usehealth --providerinstead oflist --provider
- Multi-storage provider architecture — pluggable backends for VS Code, JetBrains, Neovim session recall (opt-in via
SESSION_RECALL_ENABLE_FILE_BACKENDS=1) - Asymmetric lookback — JSONL/file providers default to 5-day window, SQLite keeps 30-day. Override with
--days NorSESSION_RECALL_JSONL_DAYS=N reposcommand — summarize discovered repositories across all providers- WSL/Linux support — VS Code Server paths, XDG directory support
- Security hardening:
- Symlink escape protection (
is_under_rootguard at all glob sites) - Trust level tagging (
_trust_level: trusted_first_party | untrusted_third_party) - Sentinel fence wrapping for untrusted file-backed content
- Bounded JSONL reader (
iter_jsonl_bounded) — caps line size and count - mtime prefilter skips stale files before opening
- Symlink escape protection (
- Token budget regression tests — list/search/files byte budgets enforced in CI
- Adversarial security tests — symlink escape, JSONL bomb, prompt injection, nested JSON
- PyPI publish workflow — tag
v*triggers test → build → publish → GitHub Release (Trusted Publisher OIDC) --providerflag on all commands to select specific storage backend
listdefault--limitreverted from 50 to 10 (preserves ~50 token Tier-1 budget)- Search results use
excerptfield (250-char truncation) instead ofcontent(500-char) — restores Tier-2 ~200 token budget - Provider field shortened (
cli/vsc/jb/nv) and omitted when single provider active — reduces per-row token overhead - File-backed providers split into
providers/file/subpackage (one file per provider, ≤200 LOC each) - Copilot CLI provider split into
providers/copilot_cli/subpackage reposcommand now callsschema_problems()before querying (matches all other commands)
_local_workspace_labelnow deterministic — removed filesystem-dependentis_dir()branch (F1)- macOS VS Code workspace path added to root candidates (F21)
- Initial release — progressive session recall for GitHub Copilot CLI
- Commands:
list,search,show,files,checkpoints,health,schema-check --days Nfilter on all query commands- FTS5 query sanitization (7 crash bugs fixed)
- Zero runtime dependencies (stdlib only)
- WAL-safe SQLite with exponential backoff
- Schema validation on every CLI entry point