You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`load_code_block_diffs_for_composer` — used by the single-tab path (#84)
28
+
-**Web UI** — browse and search all Cursor AI workspaces; conversation view with syntax-highlighted code blocks, dark/light mode, and bookmarkable chat URLs (#63)
29
+
-**Export formats** — one-click export of chats as Markdown, HTML, PDF, JSON, and CSV from the web UI (#63)
30
+
-**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)
31
+
-**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)
32
+
-**Desktop app packaging** — Windows `.exe` via PyInstaller + pywebview; no Python installation required on the target machine (#63)
33
+
-**Type-safe models** with schema validation at SQLite read boundaries (#24, #30)
- Optional exclusion rules for sensitive projects and chats (#1, #2)
37
+
- Full-text search with workspace and log-type filters (#63)
38
+
- Hypothesis property-based tests for blob and bubble parsing (#71, #81)
39
+
- PDF export endpoint coverage in CI (#72)
40
+
- Unit tests for `determine_project_for_conversation` fallback chain (#87, #89)
26
41
27
42
### Changed
28
43
-**List-path performance** — skip full `messageRequestContext` scan unless
@@ -35,31 +50,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
35
50
-**`assemble_workspace_tabs`** inner per-composer loop refactored into a shared
36
51
`_assemble_tab_from_composer_data` helper reused by `assemble_single_tab`; full
37
52
path behaviour is unchanged (#84)
53
+
- Extract shared `from_dict` validation helpers for model classes, reducing duplication (#70, #80)
54
+
- Enable mypy `strict-optional` and fix nullability gaps across the codebase (#69, #79)
38
55
39
56
### Deprecated
40
57
- Direct use of `GET /api/workspaces/<id>/tabs` (no `?summary=1`) from the workspace
41
58
UI on page load; the UI now calls `?summary=1` for first paint and lazy-fetches
42
59
individual tabs. The full-assembly endpoint remains available for export,
43
60
search, and backward-compatible consumers (planned removal: post-1.0) (#84)
44
61
45
-
46
-
-**Web UI** — browse and search all Cursor AI workspaces; conversation view with syntax-highlighted code blocks, dark/light mode, and bookmarkable chat URLs (#63)
47
-
-**Export formats** — one-click export of chats as Markdown, HTML, PDF, JSON, and CSV from the web UI (#63)
48
-
-**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)
49
-
-**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)
50
-
-**Desktop app packaging** — Windows `.exe` via PyInstaller + pywebview; no Python installation required on the target machine (#63)
51
-
-**Type-safe models** with schema validation at SQLite read boundaries (#24, #30)
0 commit comments