tandem-editor 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,36 +5,92 @@ All notable changes to Tandem will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [0.3.0] - 2026-04-07
8
+ ## [0.4.0] - 2026-04-12
9
9
 
10
- ### Wave 4: Notification & Interruption Redesign
10
+ ### Added
11
11
 
12
- - **Solo/Tandem mode** replaces All/Urgent/Paused interruption controls (#207, #226)
13
- - **Dwell-time selection events** selections fire after 1s hold (#188)
14
- - **Configurable layout**tabbed or three-panel, with settings popover (#206)
15
- - **Click-to-navigate** click annotated text to jump to annotation card
16
- - **Tab badges** notification counts on inactive panel tabs
17
- - **Skill-directed response routing** Claude responds in chat panel, not terminal
18
- - Review banner replaced with per-annotation toasts (#208, landed earlier)
19
- - `Y_MAP_MODE` constant, Zod validation for mode reads, error logging in channel event bridge
20
- - 894 tests passing
12
+ - Tauri v2 desktop app wrapping the existing web editor (macOS, Linux, Windows)
13
+ - System tray with menu: Open Editor, Setup Claude, Check for Updates, About, Quit
14
+ - Single-instance detectionsecond launch focuses the existing window instead of opening a duplicate
15
+ - Node.js sidecar lifecycle: auto-spawn on startup, health polling, crash restart with exponential backoff
16
+ - Auto-updater checks on launch and every 8h; manual check available via tray menu "Check for Updates"
17
+ - Cross-platform CI release workflow (macOS arm64/x64, Linux x64, Windows x64) with GitHub Releases
18
+ - Window state persistence position and size remembered across sessions
19
+ - Sample file copied to writable data directory on first run (supports read-only app bundles)
20
+ - Self-signed code signing for Windows builds in CI
21
+ - MCP setup auto-configuration on launch — writes Claude Code/Desktop config without manual `tandem setup`
22
+
23
+ ### Fixed
24
+
25
+ - Accept `tauri.localhost` origin in WebSocket and CORS checks so the production WebView can connect
26
+ - Strip Windows `\\?\` extended-length path prefix returned by Tauri path APIs before passing to Node
27
+ - Sidecar binary name resolution corrected for Tauri's platform-specific naming convention
28
+ - Self-contained JS bundles via tsup `noExternal` so Tauri doesn't require `node_modules` at runtime
29
+ - Poll for port release before restarting after update install, preventing a startup race condition
30
+ - Surface last HTTP error in health-poll timeout diagnostics for easier debugging
21
31
 
22
- ## [Unreleased]
32
+ ### Changed
33
+
34
+ - Updater-unavailable log downgraded from error to debug (reduces noise in dev builds without updater keys)
35
+ - Unhandled sidecar events are now logged instead of silently dropped
36
+ - Warn when `sample/` directory is missing in release builds
37
+ - CI: fail build when updater signing key secret is absent
38
+ - CI: summary job catches partial platform build failures rather than reporting false success
39
+
40
+ ## [0.3.2] - 2026-04-12
41
+
42
+ ### Changed
43
+
44
+ - **Annotation type unification:** Three semantically identical types (`comment`, `suggestion`, `question`) collapsed into a single `comment` type with optional `suggestedText` and `directedAt` fields. `AnnotationTypeSchema` reduced from 5 values to 3: `highlight`, `comment`, `flag`. (#193, #245, #255)
45
+ - **Toolbar:** Three annotation buttons (Comment, Suggest, Ask Claude) replaced with a single Comment button with "Replace" and "@Claude" toggles (#193)
46
+ - **Side panel filters:** "Suggestions" → "With replacement", "Questions" → "For Claude" (#193)
47
+ - **`sanitizeAnnotation()` moved to `src/shared/sanitize.ts`** — now available to both server and client code. Client-side Y.Map reads are sanitized to handle legacy session data. (#255)
23
48
 
24
49
  ### Added
25
50
 
26
51
  - Link (Ctrl+K), Horizontal Rule, and Code Block buttons in the formatting toolbar (#204)
27
- - Suggestion cards show a visual diff — original text in red strikethrough → replacement in green (#195)
52
+ - Replacement cards show a visual diff — original text in red strikethrough → replacement in green (#195)
28
53
  - Undo countdown progress bar — a shrinking indicator shows the 10-second undo window (#196)
29
54
  - Review mode shortcut hints (Y / N / ↑↓ / Z) shown below the Review button (#200)
30
55
  - Chat anchor previews expand on hover to show full text (#198)
31
56
  - `disabledTitle` prop on toolbar buttons — annotation buttons show "Select text first" when no text is selected (#197)
32
57
  - Explicit ✕ close button on the highlight color picker (#203)
58
+ - `tandem_comment` now accepts optional `suggestedText` and `directedAt` parameters (#193)
59
+ - `sanitizeAnnotation()` normalizes legacy `suggestion`/`question` entries at read boundaries — permanent migration for historical session data (#193)
60
+ - Exhaustive type switch in `buildDecorations` catches unhandled annotation types at compile time (#255)
61
+ - 8 new tests covering MCP tool params, sanitization edge cases, and legacy migration paths (#255)
33
62
 
34
63
  ### Fixed
35
64
 
36
65
  - Toolbar wraps to a second row on narrow windows instead of overflowing; inline inputs shrink responsively (#192)
37
66
  - Edit button on annotation cards now shows a visible "✎ Edit" label instead of icon-only (#201)
67
+ - Client-side legacy annotations (from pre-0.3.2 sessions) no longer render as invisible decorations or display raw JSON (#255)
68
+ - `sanitizeAnnotation` no longer drops `textSnapshot: ""` or `editedAt: 0` via falsy-check bug (#255)
69
+ - Event queue observer no longer silently dies if `sanitizeAnnotation` throws (#255)
70
+ - `handleEdit` catch-block no longer corrupts annotation data on JSON parse failure (#255)
71
+
72
+ ### Deprecated
73
+
74
+ - `tandem_suggest` MCP tool — use `tandem_comment` with `suggestedText` parameter instead (#193)
75
+
76
+ ### Removed
77
+
78
+ - **MCP wire change:** Removed unused `"overlay"` annotation kind from `AnnotationTypeSchema`. External clients sending `type: "overlay"` will now receive a Zod validation error. (#249)
79
+ - **MCP wire change:** `suggestion` and `question` annotation types removed from `AnnotationTypeSchema`. Use `comment` with `suggestedText` or `directedAt` fields. Legacy data is migrated automatically via `sanitizeAnnotation()`. (#193)
80
+
81
+ ## [0.3.0] - 2026-04-07
82
+
83
+ ### Wave 4: Notification & Interruption Redesign
84
+
85
+ - **Solo/Tandem mode** replaces All/Urgent/Paused interruption controls (#207, #226)
86
+ - **Dwell-time selection events** — selections fire after 1s hold (#188)
87
+ - **Configurable layout** — tabbed or three-panel, with settings popover (#206)
88
+ - **Click-to-navigate** — click annotated text to jump to annotation card
89
+ - **Tab badges** — notification counts on inactive panel tabs
90
+ - **Skill-directed response routing** — Claude responds in chat panel, not terminal
91
+ - Review banner replaced with per-annotation toasts (#208, landed earlier)
92
+ - `Y_MAP_MODE` constant, Zod validation for mode reads, error logging in channel event bridge
93
+ - 894 tests passing
38
94
 
39
95
  ## [0.2.12] - 2026-04-06
40
96