tandem-editor 0.16.0 → 0.18.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/.claude-plugin/plugin.json +4 -4
- package/CHANGELOG.md +38 -1
- package/dist/cli/index.js +486 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/client/assets/{CoworkSettings-B4LapjhG.js → CoworkSettings-Brg8F0cb.js} +1 -1
- package/dist/client/assets/{dist-CJtsfiU2.js → dist-CHppK3gQ.js} +1 -1
- package/dist/client/assets/index-Boow3rxN.css +1 -0
- package/dist/client/assets/index-BymYYAwj.js +271 -0
- package/dist/client/assets/{prod-p35ShryZ.js → prod-Pu_njNLv.js} +1 -1
- package/dist/client/index.html +21 -5
- package/dist/monitor/index.js +6 -3
- package/dist/monitor/index.js.map +1 -1
- package/dist/server/index.js +324 -14
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/tandem/SKILL.md +2 -2
- package/dist/client/assets/index-BIEOrpU_.js +0 -270
- package/dist/client/assets/index-DdjGUhNd.css +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tandem",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Edit and iterate on documents with any MCP-capable AI. Claude is the default and best-supported client today.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Tandem"
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"mcpServers": {
|
|
12
12
|
"tandem": {
|
|
13
13
|
"command": "npx",
|
|
14
|
-
"args": ["-y", "tandem-editor@0.
|
|
14
|
+
"args": ["-y", "tandem-editor@0.18.0", "mcp-stdio"],
|
|
15
15
|
"env": {
|
|
16
16
|
"TANDEM_URL": "http://127.0.0.1:3479"
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"tandem-channel": {
|
|
20
20
|
"command": "npx",
|
|
21
|
-
"args": ["-y", "tandem-editor@0.
|
|
21
|
+
"args": ["-y", "tandem-editor@0.18.0", "channel"],
|
|
22
22
|
"env": {
|
|
23
23
|
"TANDEM_URL": "http://127.0.0.1:3479"
|
|
24
24
|
}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"monitors": [
|
|
29
29
|
{
|
|
30
30
|
"name": "tandem-events",
|
|
31
|
-
"command": "
|
|
31
|
+
"command": "npx -y tandem-editor@0.18.0 monitor",
|
|
32
32
|
"description": "Tandem real-time document events (annotations, chat, selections)"
|
|
33
33
|
}
|
|
34
34
|
]
|
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,44 @@ 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
|
-
## [
|
|
8
|
+
## [0.18.0] - 2026-07-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Real-time push now works for manually-launched Claude Code sessions, through the plugin monitor (#1201).** Until now, a Claude Code session received live document events (annotations, chat, selections) only if Tandem's own auto-launcher started it with a special flag — a session you started yourself by hand got nothing and had to poll for changes. The Tandem plugin now ships a *monitor* that Claude Code 2.1.212+ activates at launch and that pushes those events with no flag required. Install it once — `claude plugin marketplace add bloknayrb/tandem`, then `claude plugin install tandem@tandem-editor` — and every `claude` you start afterward wakes on document changes. (This is a Claude Code plugin capability; the desktop app and Cowork keep using their existing transports and are unchanged by this release.)
|
|
13
|
+
|
|
14
|
+
One caveat: if you install the plugin *and* also launch with `--dangerously-load-development-channels server:tandem-channel`, both transports deliver each event and you'll see it twice. For a hand-launched session, install the plugin and drop the flag.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **The server no longer crashes when an event subscriber's connection drops abruptly (#1202).** The `/api/events` push stream sends a periodic keepalive; if the client socket had already died, that write threw from inside a timer where nothing caught it, and the unhandled error took the whole server process down. The keepalive and event writes are now guarded and clean up the dead subscriber instead of crashing.
|
|
19
|
+
|
|
20
|
+
### Internal
|
|
21
|
+
|
|
22
|
+
- **The `tandem_checkInbox` tool description now explains why to poll steadily (#1200).** A session can't tell from the server whether real-time push is actually reaching it, so the guidance to poll at a steady cadence — plus the note that polling dedups against already-pushed items, making it cheap and safe — now lives in the tool description itself. That reaches every MCP client, not only the ones that installed the Tandem skill.
|
|
23
|
+
|
|
24
|
+
## [0.17.0] - 2026-07-17
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **New-tab search is now fuzzy and ranked by match quality (#1186).** The new-tab menu's file search converges on the same fuzzy-match stack the command palette uses: results rank by match quality rather than pure recency (equal scores keep recency order), name matches outrank directory matches, and subsequence matches are now included (`chp` finds `chapter.md`). A directory-only match keeps its row but leaves the filename unhighlighted.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **The editor no longer throws an unhandled error when focus leaves the document (#1195).** Four surfaces — the status pill's word count, the formatting toolbar, the formatting bar, and find/replace's match count — kept themselves in sync with the editor by writing Svelte state directly from a Tiptap event callback. Tiptap emits those callbacks synchronously from ProseMirror's dispatch, and a native `blur` can arrive while the UI is mid-render, so the write landed inside an active Svelte reaction and threw. Despite the error text naming only `$derived`/`$inspect`/template expressions, an ordinary `{#if}` block is enough to trigger it, and the throw is not dev-only — it escapes through ProseMirror's dispatch in packaged builds too. All four now bridge through a shared microtask hop, which also collapses a burst of transactions into a single update instead of recomputing on every cursor move.
|
|
33
|
+
|
|
34
|
+
- **Settings controls no longer lie about being editable when the store is read-only (#1186).** When the on-disk settings `schemaVersion` is newer than the running build, Tandem opens settings read-only and silently drops writes — but the toggles and radios still flipped visually and then went stale, so the UI disagreed with what was saved. Every settings control across all tabs and the popover now shows a genuine disabled state, with a surface-wide banner explaining why, instead of accepting input it can't persist. (Display-name and actions that don't write settings stay live.)
|
|
35
|
+
|
|
36
|
+
- **Keyboard activation works again in the Cowork "admin declined" dialog (#1186).** The dialog sits inside its backdrop, whose unguarded keydown handler called `preventDefault()` on Enter/Space as they bubbled up from the dialog's own buttons and the Learn-more link — so every control in that dialog was dead to the keyboard, and pressing a key dismissed the dialog out from under you. The backdrop now only acts on events that originate on itself.
|
|
37
|
+
|
|
38
|
+
- **The text selection popup no longer paints a stray frosted-glass rectangle behind itself (#1189).** Selecting text in the desktop app drew a blurred rectangle spanning the popup's whole bounding box — including the empty space beside the narrower Annotate row, where no chrome is actually visible. The shared `.tandem-floating-pill` recipe carried a `backdrop-filter: blur(8px)` that every other pill hides behind its opaque background; the selection popup's shell is deliberately transparent (the two-capsule design), so there the blur had nothing to hide behind. The blur is now gone from the recipe, where it was invisible dead weight on every other surface anyway. The popup's capsules keep their background, border, shadow, and the gap the editor shows through — unchanged.
|
|
39
|
+
|
|
40
|
+
Only production builds were affected, which is why it survived since the two-capsule popup landed in #798: that redesign shipped with a `backdrop-filter: none` reset on the shell meant to cancel the recipe's blur, and the reset never survived minification. lightningcss (Vite's default CSS minifier) collapses a `backdrop-filter` + `-webkit-backdrop-filter` pair into the `-webkit-` form alone, and Chromium does not honour the prefixed form, so the reset silently evaporated in the packaged app while working fine in dev. That minifier hazard is tracked separately in #1188; a regression test now forbids both the blur on the recipe and the prefixed-pair pattern that hid it.
|
|
41
|
+
|
|
42
|
+
### Internal
|
|
43
|
+
|
|
44
|
+
- **`tandem doctor` gains two dev-checkout diagnostics (#1192).** A staleness check compares `package.json` / `package-lock.json` against the tree npm actually installed and warns (fix: `npm install`) when they disagree — but only reports PASS after a comparison that compared something, recording an explicit "skipped" result for lockfile shapes it can't compare (v1/v2 lockfiles, root-only maps) rather than an unearned green. An orphaned-Vite check warns when :5173 is serving while both backend ports are down — the "editor loads but nothing works" state a crashed `dev:standalone` leaves behind — after confirming the port really is Vite. Both self-gate to the `tandem-editor` checkout and never appear for an end user running `tandem doctor` in their own project.
|
|
45
|
+
- **A `release` skill codifies the six-surface version bump (#1191).** `.claude/skills/release/SKILL.md` records the full cut sequence: the six version surfaces (four CI-guarded, the two lockfiles not), the changelog and tag steps, and the draft-then-publish GitHub Release flow. The `dev-server` skill gains an orphaned-Vite recovery step, and three Windows/cross-platform gotchas were promoted into `CLAUDE.md`.
|
|
9
46
|
|
|
10
47
|
## [0.16.0] - 2026-07-13
|
|
11
48
|
|