|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [Unreleased] |
| 9 | + |
| 10 | +### Added |
| 11 | +- **Web UI** — browse and search all Cursor AI workspaces; conversation view with syntax-highlighted code blocks, dark/light mode, and bookmarkable chat URLs (#63) |
| 12 | +- **Export formats** — one-click export of chats as Markdown, HTML, PDF, JSON, and CSV from the web UI (#63) |
| 13 | +- **CLI export** (`cursor-chat-export` / `scripts/export.py`) — zip archive or individual Markdown files with YAML frontmatter; incremental mode (`--since last`) preserves state across runs (#63, #42, #61) |
| 14 | +- **Cursor CLI agent session support** — browse and export sessions stored in `~/.cursor/chats/` by the `cursor agent` CLI; gracefully degrades when the IDE database is absent (#7, #8, #63) |
| 15 | +- **Desktop app packaging** — Windows `.exe` via PyInstaller + pywebview; no Python installation required on the target machine (#63) |
| 16 | +- **Type-safe models** with schema validation at SQLite read boundaries (#24, #30) |
| 17 | +- **CI matrix** (Linux / macOS / Windows) running pytest, mypy, and gitleaks (#13, #19, #44, #62) |
| 18 | +- **Python packaging infrastructure** (`pyproject.toml` with hatchling, bounded dependency pins, `requirements-lock.txt`, Dependabot) (#45, #47, #49, #53) |
| 19 | +- Optional exclusion rules for sensitive projects and chats (#1, #2) |
| 20 | +- Full-text search with workspace and log-type filters (#63) |
| 21 | +- Hypothesis property-based tests for blob and bubble parsing (#71, #81) |
| 22 | +- PDF export endpoint coverage in CI (#72) |
| 23 | + |
| 24 | +### Changed |
| 25 | +- Extract shared `from_dict` validation helpers for model classes, reducing duplication (#70, #80) |
| 26 | +- Enable mypy `strict-optional` and fix nullability gaps across the codebase (#69, #79) |
| 27 | + |
| 28 | +### Fixed |
| 29 | +- Path traversal and symlink-escape protection on `/api/set-workspace` (#15, #22) |
| 30 | +- Disabled Werkzeug debug mode by default; opt-in via `--debug` / `FLASK_DEBUG=1` (#9, #20) |
| 31 | +- Sanitise Marked.js HTML output with DOMPurify (#11, #21) |
| 32 | +- Wrapped all production `sqlite3.connect()` calls in context managers (#17, #23) |
| 33 | +- Skip NULL bubble rows in workspace tabs loader (#50, #52) |
| 34 | +- Thread-unsafe `_workspace_path_override` race condition (#43, #54) |
| 35 | +- Normalise Windows-style paths on non-Windows hosts (#8) |
| 36 | +- Add incomplete-result signaling on parse failure so callers can distinguish partial vs. complete data (#67, #78) |
| 37 | +- Replace `print()` error output with structured logging throughout (#68, #77) |
| 38 | +- Replace silent `except Exception: pass` with structured logging in workspace and bubble load paths (#66, #76) |
| 39 | +- Decouple API handlers from private `_`-prefixed service internals (#73) |
| 40 | + |
| 41 | +[Unreleased]: https://github.com/cppalliance/cppa-cursor-browser/commits/HEAD |
0 commit comments