From 64e62e98a2c0e9f4edef9f5aa0451b2a8a38f4b4 Mon Sep 17 00:00:00 2001 From: Ben Vinegar Date: Thu, 2 Jul 2026 18:07:34 -0400 Subject: [PATCH] chore(release): 0.11.0 --- .changeset/api-write-surface-ids.md | 5 ---- .changeset/aside-head-slot.md | 5 ---- .changeset/cuddly-clouds-eat.md | 5 ---- .changeset/curvy-parks-fall.md | 2 -- .changeset/frank-moles-raise.md | 2 -- .changeset/free-dodos-type.md | 2 -- .changeset/host-hide-brand.md | 5 ---- .changeset/host-home-view.md | 5 ---- .changeset/hydrate-session-posts.md | 5 ---- .changeset/lazy-surface-iframes.md | 5 ---- .changeset/live-websocket-seam.md | 5 ---- .changeset/nine-bats-fly.md | 2 -- .changeset/rich-part-colorscheme.md | 10 ------- .changeset/session-posts-surfaces.md | 5 ---- .changeset/slides-kit-crossfade.md | 12 -------- .changeset/spotty-shirts-tickle.md | 2 -- .changeset/surface-read-indexes.md | 5 ---- .changeset/system-surface-schemes.md | 5 ---- .changeset/tall-iframes-settle.md | 5 ---- .changeset/theme-change-meta.md | 11 -------- CHANGELOG.md | 41 ++++++++++++++++++++++++++++ package-lock.json | 4 +-- package.json | 2 +- 23 files changed, 44 insertions(+), 106 deletions(-) delete mode 100644 .changeset/api-write-surface-ids.md delete mode 100644 .changeset/aside-head-slot.md delete mode 100644 .changeset/cuddly-clouds-eat.md delete mode 100644 .changeset/curvy-parks-fall.md delete mode 100644 .changeset/frank-moles-raise.md delete mode 100644 .changeset/free-dodos-type.md delete mode 100644 .changeset/host-hide-brand.md delete mode 100644 .changeset/host-home-view.md delete mode 100644 .changeset/hydrate-session-posts.md delete mode 100644 .changeset/lazy-surface-iframes.md delete mode 100644 .changeset/live-websocket-seam.md delete mode 100644 .changeset/nine-bats-fly.md delete mode 100644 .changeset/rich-part-colorscheme.md delete mode 100644 .changeset/session-posts-surfaces.md delete mode 100644 .changeset/slides-kit-crossfade.md delete mode 100644 .changeset/spotty-shirts-tickle.md delete mode 100644 .changeset/surface-read-indexes.md delete mode 100644 .changeset/system-surface-schemes.md delete mode 100644 .changeset/tall-iframes-settle.md delete mode 100644 .changeset/theme-change-meta.md diff --git a/.changeset/api-write-surface-ids.md b/.changeset/api-write-surface-ids.md deleted file mode 100644 index 5819d93..0000000 --- a/.changeset/api-write-surface-ids.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": minor ---- - -Return per-surface ids, kinds, and indexes in write responses without echoing surface payload bodies, and remove the redundant top-level `kinds` array. Read kinds from `surfaces.map((surface) => surface.kind)` instead. diff --git a/.changeset/aside-head-slot.md b/.changeset/aside-head-slot.md deleted file mode 100644 index 57f7b90..0000000 --- a/.changeset/aside-head-slot.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": minor ---- - -Add a host-overridable `ss:aside-head` slot at the top of the sidebar, above the session list (mirrors `ss:aside-foot`). Self-hosted rendering is unchanged; an embedder can project a sidebar header — e.g. a workspace picker and a pinned Home link — above the session list. diff --git a/.changeset/cuddly-clouds-eat.md b/.changeset/cuddly-clouds-eat.md deleted file mode 100644 index 3d84c3d..0000000 --- a/.changeset/cuddly-clouds-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Validate `sideshow surface add` has at least one surface flag before resolving or creating a session, and resolve long-poll waits promptly when clients disconnect. diff --git a/.changeset/curvy-parks-fall.md b/.changeset/curvy-parks-fall.md deleted file mode 100644 index a845151..0000000 --- a/.changeset/curvy-parks-fall.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/frank-moles-raise.md b/.changeset/frank-moles-raise.md deleted file mode 100644 index a845151..0000000 --- a/.changeset/frank-moles-raise.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/free-dodos-type.md b/.changeset/free-dodos-type.md deleted file mode 100644 index a845151..0000000 --- a/.changeset/free-dodos-type.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/host-hide-brand.md b/.changeset/host-hide-brand.md deleted file mode 100644 index 755e69c..0000000 --- a/.changeset/host-hide-brand.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": minor ---- - -Add a `hideBrand` flag to the embed host contract. When set, the engine omits its own "sideshow" wordmark (the sidebar/header home-link brand) so a host that supplies its own branding — e.g. a workspace picker atop the sidebar and a wordmark in the footer — isn't doubled up. Self-hosted leaves it unset and shows the wordmark as before. diff --git a/.changeset/host-home-view.md b/.changeset/host-home-view.md deleted file mode 100644 index a299f68..0000000 --- a/.changeset/host-home-view.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": minor ---- - -Add a `homeView` flag to the embed host contract. When a host owns its own session-less landing (e.g. a "home" feed), the engine no longer auto-selects a session on boot — it honors a deep-linked route session but otherwise stays session-less so nothing is highlighted behind the host's landing, and it clears the selection when the route later becomes session-less. Self-hosted leaves the flag unset and is unchanged (auto-selects the latest session on boot). diff --git a/.changeset/hydrate-session-posts.md b/.changeset/hydrate-session-posts.md deleted file mode 100644 index a9094b5..0000000 --- a/.changeset/hydrate-session-posts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Hydrate session post streams from the session list endpoint to avoid N+1 post detail requests on open. diff --git a/.changeset/lazy-surface-iframes.md b/.changeset/lazy-surface-iframes.md deleted file mode 100644 index 452ed1f..0000000 --- a/.changeset/lazy-surface-iframes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Lazy-load sandboxed surface iframes to reduce initial viewer work on long sessions. diff --git a/.changeset/live-websocket-seam.md b/.changeset/live-websocket-seam.md deleted file mode 100644 index 6735827..0000000 --- a/.changeset/live-websocket-seam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": minor ---- - -Add a server `onEvent` feed tap for hosts and a `liveTransport: "ws"` viewer-embed option so hosted wrappers can provide hibernation-friendly WebSocket live updates while self-hosted sideshow keeps using SSE by default. diff --git a/.changeset/nine-bats-fly.md b/.changeset/nine-bats-fly.md deleted file mode 100644 index a845151..0000000 --- a/.changeset/nine-bats-fly.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/rich-part-colorscheme.md b/.changeset/rich-part-colorscheme.md deleted file mode 100644 index 0c90426..0000000 --- a/.changeset/rich-part-colorscheme.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"sideshow": patch ---- - -Fix markdown/code/diff/mermaid surfaces rendering on a white canvas (washed-out -text) on a dark board. These rich-part frames are sandboxed opaque-origin -iframes, which default to `color-scheme: normal` (light), so in dark mode the UA -painted a white backdrop behind the transparent body. They now pin `color-scheme` -to the resolved scheme — like html surfaces already do — so the frame's canvas -tracks the card in both light and dark. diff --git a/.changeset/session-posts-surfaces.md b/.changeset/session-posts-surfaces.md deleted file mode 100644 index eb9d0f6..0000000 --- a/.changeset/session-posts-surfaces.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -List session posts with canonical `surfaces` entries that include surface ids and omit elided html bodies. diff --git a/.changeset/slides-kit-crossfade.md b/.changeset/slides-kit-crossfade.md deleted file mode 100644 index 120c589..0000000 --- a/.changeset/slides-kit-crossfade.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"sideshow": patch ---- - -Slides kit now grid-stacks its deck so it cross-fades in normal flow. Previously -it swapped slides with `display:none`, which can't fade — so decks were hand-rolled -with `position:absolute` slides over a `min-height` stage, an out-of-flow layout the -surface-page height bridge can't measure (the overlay grows `scrollHeight` but not -the box its ResizeObserver watches), leaving the frame clipped/frozen. The kit now -stacks slides in one grid cell (in flow, sized to the tallest slide) and fades with -opacity/visibility, so the frame follows it. DESIGN_GUIDE documents the out-of-flow -trap and the grid-stack recipe alongside the existing `position: fixed` ban. diff --git a/.changeset/spotty-shirts-tickle.md b/.changeset/spotty-shirts-tickle.md deleted file mode 100644 index a845151..0000000 --- a/.changeset/spotty-shirts-tickle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/surface-read-indexes.md b/.changeset/surface-read-indexes.md deleted file mode 100644 index 457be5a..0000000 --- a/.changeset/surface-read-indexes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Expose derived 0-based surface indexes on post detail, session post list, and post history read responses. diff --git a/.changeset/system-surface-schemes.md b/.changeset/system-surface-schemes.md deleted file mode 100644 index 330e90f..0000000 --- a/.changeset/system-surface-schemes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Let direct rich-surface renders without an explicit mode follow the browser's system color scheme. diff --git a/.changeset/tall-iframes-settle.md b/.changeset/tall-iframes-settle.md deleted file mode 100644 index 0fe71d2..0000000 --- a/.changeset/tall-iframes-settle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"sideshow": patch ---- - -Fix intermittent clipping in surface iframes when async content settles after the initial resize pass. diff --git a/.changeset/theme-change-meta.md b/.changeset/theme-change-meta.md deleted file mode 100644 index 026624d..0000000 --- a/.changeset/theme-change-meta.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"sideshow": minor ---- - -Embed host contract: `onThemeChange` now receives a second `meta` argument — -`{ theme, mode }` — naming the resolved theme id and light/dark scheme behind the -tokens it already reports. Hosts that re-render surfaces out-of-band (e.g. -server-side preview frames they can't theme from the token values alone) can pass -those identifiers to `/s/:id?theme=&mode=` to reproduce the exact look; hosts that -only paint from the token values ignore it. Additive — the tokens argument is -unchanged and the default self-hosted host is unaffected. diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f059a4..dc15edc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,46 @@ # Changelog +## 0.11.0 + +### Minor Changes + +- 2bc9db6: Return per-surface ids, kinds, and indexes in write responses without echoing surface payload bodies, and remove the redundant top-level `kinds` array. Read kinds from `surfaces.map((surface) => surface.kind)` instead. +- 28a3a6d: Add a host-overridable `ss:aside-head` slot at the top of the sidebar, above the session list (mirrors `ss:aside-foot`). Self-hosted rendering is unchanged; an embedder can project a sidebar header — e.g. a workspace picker and a pinned Home link — above the session list. +- 71bf606: Add a `hideBrand` flag to the embed host contract. When set, the engine omits its own "sideshow" wordmark (the sidebar/header home-link brand) so a host that supplies its own branding — e.g. a workspace picker atop the sidebar and a wordmark in the footer — isn't doubled up. Self-hosted leaves it unset and shows the wordmark as before. +- 1b7a28c: Add a `homeView` flag to the embed host contract. When a host owns its own session-less landing (e.g. a "home" feed), the engine no longer auto-selects a session on boot — it honors a deep-linked route session but otherwise stays session-less so nothing is highlighted behind the host's landing, and it clears the selection when the route later becomes session-less. Self-hosted leaves the flag unset and is unchanged (auto-selects the latest session on boot). +- 5eba65a: Add a server `onEvent` feed tap for hosts and a `liveTransport: "ws"` viewer-embed option so hosted wrappers can provide hibernation-friendly WebSocket live updates while self-hosted sideshow keeps using SSE by default. +- ffe7099: Embed host contract: `onThemeChange` now receives a second `meta` argument — + `{ theme, mode }` — naming the resolved theme id and light/dark scheme behind the + tokens it already reports. Hosts that re-render surfaces out-of-band (e.g. + server-side preview frames they can't theme from the token values alone) can pass + those identifiers to `/s/:id?theme=&mode=` to reproduce the exact look; hosts that + only paint from the token values ignore it. Additive — the tokens argument is + unchanged and the default self-hosted host is unaffected. + +### Patch Changes + +- ed8b987: Validate `sideshow surface add` has at least one surface flag before resolving or creating a session, and resolve long-poll waits promptly when clients disconnect. +- 7698b1f: Hydrate session post streams from the session list endpoint to avoid N+1 post detail requests on open. +- 23dad90: Lazy-load sandboxed surface iframes to reduce initial viewer work on long sessions. +- 46cf918: Fix markdown/code/diff/mermaid surfaces rendering on a white canvas (washed-out + text) on a dark board. These rich-part frames are sandboxed opaque-origin + iframes, which default to `color-scheme: normal` (light), so in dark mode the UA + painted a white backdrop behind the transparent body. They now pin `color-scheme` + to the resolved scheme — like html surfaces already do — so the frame's canvas + tracks the card in both light and dark. +- 2bc9db6: List session posts with canonical `surfaces` entries that include surface ids and omit elided html bodies. +- cc6504c: Slides kit now grid-stacks its deck so it cross-fades in normal flow. Previously + it swapped slides with `display:none`, which can't fade — so decks were hand-rolled + with `position:absolute` slides over a `min-height` stage, an out-of-flow layout the + surface-page height bridge can't measure (the overlay grows `scrollHeight` but not + the box its ResizeObserver watches), leaving the frame clipped/frozen. The kit now + stacks slides in one grid cell (in flow, sized to the tallest slide) and fades with + opacity/visibility, so the frame follows it. DESIGN_GUIDE documents the out-of-flow + trap and the grid-stack recipe alongside the existing `position: fixed` ban. +- 2bc9db6: Expose derived 0-based surface indexes on post detail, session post list, and post history read responses. +- 0a094ac: Let direct rich-surface renders without an explicit mode follow the browser's system color scheme. +- 565c85f: Fix intermittent clipping in surface iframes when async content settles after the initial resize pass. + ## 0.10.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index 2f44026..51db2df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sideshow", - "version": "0.10.0", + "version": "0.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sideshow", - "version": "0.10.0", + "version": "0.11.0", "license": "MIT", "dependencies": { "@hono/node-server": "^1.14.0", diff --git a/package.json b/package.json index 27c2d98..4fb53ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sideshow", - "version": "0.10.0", + "version": "0.11.0", "description": "A live visual surface for terminal coding agents — agents draw HTML snippets, you watch them in the browser and comment back.", "keywords": [ "agent-tools",