Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
8454f12
feat(review-changes): base MCP-communication skeleton
yannbf May 19, 2026
9dcf4c5
wip: Implement review changes screen based on latest designs
ghengeveld May 21, 2026
2796543
update the schema
yannbf May 22, 2026
dee98db
Keep iframes mounted when collapsing
ghengeveld May 22, 2026
f6794b1
Refactor and improve grid to also work well at very large or very sma…
ghengeveld May 22, 2026
297e53f
wip: Add review changes details screen
ghengeveld May 22, 2026
8a01874
refactor(review-changes): reorganize component structure and remove u…
ghengeveld May 22, 2026
e3fcd45
revert
yannbf May 22, 2026
ebfe6a0
Fix React is not defined error
yannbf May 22, 2026
b3e479f
Revert "revert"
yannbf May 22, 2026
53cc0a5
feat(review-changes): enhance ReviewChangesPage with location search …
ghengeveld May 22, 2026
67d85aa
Merge pull request #34874 from storybookjs/addon-review-ui
yannbf May 22, 2026
ff2438b
Introduce design iteration
yannbf May 23, 2026
c4ba9bc
rename review-changes to review
yannbf May 26, 2026
1ffd850
rename directory review-changes -> review
yannbf May 26, 2026
5048ee6
small update
yannbf May 26, 2026
5a0bf2b
Merge branch 'next' into yann/agentic-review-mcp-integration
yannbf May 26, 2026
b0dc746
Merge branch 'yann/agentic-review-mcp-integration' into agentic-revie…
yannbf May 26, 2026
9841ebc
Refactor review addon: rename ReviewChangesPage to ReviewPage, update…
ghengeveld May 26, 2026
f23fa39
Rename `apply-review-state` to `display-review` and `request-review-s…
ghengeveld May 26, 2026
7acc226
Type fixes
ghengeveld May 27, 2026
6784d11
Refactor SummaryScreen component: remove TabsView, introduce TabPanel…
ghengeveld May 27, 2026
bf3a0fc
Fix background
ghengeveld May 27, 2026
88a33ea
Apply review feedback, move logic from MCP to addon review, simplify …
yannbf May 27, 2026
7964963
Fix invalid attribute
ghengeveld May 27, 2026
62fc281
Load above-the-fold iframes immediately
ghengeveld May 27, 2026
521a619
cleanup
yannbf May 27, 2026
69c8397
fix failure
yannbf May 27, 2026
6b2081f
Fix scrolling on tab panel content
ghengeveld May 27, 2026
dad96b8
Fix tab a11y
ghengeveld May 27, 2026
d5e328e
fix(code): add addon-review workspace dependency
Copilot May 27, 2026
562f1b2
Handle review comments
ghengeveld May 27, 2026
b023b97
Fix lockfile
ghengeveld May 28, 2026
9c4ac02
Merge pull request #34890 from storybookjs/agentic-review-design-iter…
yannbf May 28, 2026
ae386c9
Hide clear button on search input
ghengeveld May 28, 2026
611c625
Remove filter icon from search field
ghengeveld May 28, 2026
4af6305
Make collapsible headers sticky
ghengeveld May 28, 2026
04389e2
Replace overly specific headline with a more generic one
ghengeveld May 28, 2026
9d76add
Improve review URLs
ghengeveld May 28, 2026
e0259d1
Add review view state management and scroll restoration
ghengeveld May 28, 2026
ef2a641
Enhance CollectionGrid and SummaryScreen interactivity
ghengeveld May 28, 2026
9cea581
Keep review summary mounted, simplify state handling, and add created…
ghengeveld May 29, 2026
31a2813
Open Storybook with proper filters applied
ghengeveld May 29, 2026
b9ea603
Add a baseline-vs-latest comparison experience to the review details …
ghengeveld May 26, 2026
b677c0a
Fix React import
ghengeveld May 28, 2026
6efe789
Implement story freezing and use it on the review summary screen
ghengeveld May 27, 2026
d4ec5a5
Set inert attribute on to-be-frozen previews
ghengeveld May 28, 2026
a3b2219
Freeze animations at the end
ghengeveld May 28, 2026
9e7c63b
Serve storybook-static as review baseline if it exists, or fall back …
ghengeveld May 28, 2026
2f20330
Prevent vscode from removing React imports
ghengeveld May 28, 2026
c061e09
Fix details iframe interactivity, track comparison mode in sessionSto…
ghengeveld May 29, 2026
a8584d2
Implement component to stories extraction
yannbf May 29, 2026
28f97f4
Merge pull request #34974 from storybookjs/review-experiments-with-ch…
yannbf May 29, 2026
d3fdf3d
Show banner when review is stale
ghengeveld May 29, 2026
700b464
Styling tweaks
ghengeveld May 29, 2026
7b992ab
Fix story assertion
ghengeveld May 30, 2026
3c6ae31
Addon Review: throttle, prioritize, and evict preview thumbnails
ghengeveld May 30, 2026
4d331ed
Merge branch 'next' into yann/agentic-review-mcp-integration
yannbf Jun 2, 2026
a72a9b5
Fix review detail links from inactive summary tab
ghengeveld Jun 2, 2026
0276205
Merge branch 'next' into yann/agentic-review-mcp-integration
yannbf Jun 2, 2026
1984a81
Fix story test
ghengeveld Jun 2, 2026
498473d
Fix ReviewPage Details story test
ghengeveld Jun 2, 2026
e0da866
Implement story freezing and use it on the review summary screen
ghengeveld May 27, 2026
5dc9aba
Set inert attribute on to-be-frozen previews
ghengeveld May 28, 2026
a51e72e
Freeze animations at the end
ghengeveld May 28, 2026
d74b7f9
Address review comments on story freezer
ghengeveld Jun 2, 2026
85b9e83
Fix story test
ghengeveld Jun 2, 2026
af28348
Merge remote-tracking branch 'origin/yann/agentic-review-mcp-integrat…
ghengeveld Jun 2, 2026
40e1c24
Log swallowed source-file change listener errors
ghengeveld Jun 2, 2026
f7779c7
Merge branch 'yann/agentic-review-mcp-integration' into review-baseli…
yannbf Jun 2, 2026
8fffe6e
Fix review screen story failures
ghengeveld Jun 2, 2026
42403d1
Add timeout and deterministic error handling to baseline proxy
ghengeveld Jun 2, 2026
82fe2df
Fix Minimal story test by removing assertion for unrendered branchName
ghengeveld Jun 3, 2026
6a9120d
Address review comments on story freezer
ghengeveld Jun 3, 2026
69045c5
Fix Details story to assert on rendered preview, drop dead branchName…
ghengeveld Jun 3, 2026
a177a6f
Merge remote-tracking branch 'origin/next' into yann/agentic-review-m…
ghengeveld Jun 3, 2026
1a1558d
Address review comments and fix failing SummaryScreen story
ghengeveld Jun 3, 2026
fe08da0
Merge branch 'yann/agentic-review-mcp-integration' into review-baseli…
ghengeveld Jun 3, 2026
0e154c1
Add "New" badge for stories absent from the baseline
ghengeveld Jun 3, 2026
b429288
Improve review detail screen baseline comparison UX
ghengeveld Jun 3, 2026
43ba86f
Route review addon sessionStorage access through a guarded helper
ghengeveld Jun 3, 2026
7a1c185
Show "New" badge for change-detection-flagged stories
ghengeveld Jun 3, 2026
00094e5
Address review feedback: a11y, theme tokens, and safer URL parsing
ghengeveld Jun 3, 2026
77c7d6b
Merge branch 'yann/agentic-review-mcp-integration' into review-baseli…
ghengeveld Jun 3, 2026
959730b
Fix review addon story mocks
ghengeveld Jun 3, 2026
3d06003
Restore chevron as the accessible collapse/expand control
ghengeveld Jun 3, 2026
3dde2f8
Move focus to detail back button and make summary inert
ghengeveld Jun 3, 2026
420e202
Focus detail title heading on entry instead of back button
ghengeveld Jun 3, 2026
52e8d0a
Add focus ring to the review search field
ghengeveld Jun 3, 2026
ba13907
Restore chevron as the accessible collapse/expand control
ghengeveld Jun 3, 2026
92d9e51
Redesign review screens with shared header and responsive grid
ghengeveld Jun 4, 2026
5e78b54
Tweak style and wording
ghengeveld Jun 4, 2026
82aea67
Add copy prompt button to stale review banner
ghengeveld Jun 4, 2026
d3f526e
Merge pull request #34926 from storybookjs/review-baseline-comparison
ghengeveld Jun 4, 2026
02105aa
Merge branch 'yann/agentic-review-mcp-integration' into freeze-previe…
ghengeveld Jun 4, 2026
85dde58
Merge branch 'yann/agentic-review-mcp-integration' into review-layout…
ghengeveld Jun 4, 2026
1f8263e
Maintenance: Fix TypeScript error in setupStoryFreezer test
ghengeveld Jun 4, 2026
161997f
Merge remote-tracking branch 'origin/freeze-preview-iframes' into ifr…
ghengeveld Jun 4, 2026
b6c155f
Fix stale review banner story tests
ghengeveld Jun 4, 2026
9cdea17
Merge remote-tracking branch 'origin/yann/agentic-review-mcp-integrat…
ghengeveld Jun 4, 2026
59dd78b
Merge pull request #34989 from storybookjs/iframe-performance-enhance…
ghengeveld Jun 4, 2026
76d7f43
Merge pull request #34939 from storybookjs/freeze-preview-iframes
ghengeveld Jun 4, 2026
fe73046
Merge remote-tracking branch 'origin/yann/agentic-review-mcp-integrat…
ghengeveld Jun 4, 2026
9780555
Merge branch 'yann/agentic-review-mcp-integration' into stale-review-…
ghengeveld Jun 4, 2026
8c63cfe
Merge pull request #35051 from storybookjs/review-layout-updates
ghengeveld Jun 4, 2026
1d1490c
Merge remote-tracking branch 'origin/yann/agentic-review-mcp-integrat…
ghengeveld Jun 4, 2026
bef69a8
Merge pull request #34981 from storybookjs/stale-review-banner
ghengeveld Jun 4, 2026
9870a80
Convert ReviewPage to .tsx with JSX
ghengeveld Jun 4, 2026
b52f7b9
Extract baseline comparison iframe sync into a hook
ghengeveld Jun 4, 2026
bd8c56e
Consolidate "newly added" resolution into one selector
ghengeveld Jun 4, 2026
bf604c7
Single-source the baseline route and preview URL contracts
ghengeveld Jun 4, 2026
33d868e
Remove dead review-addon code
ghengeveld Jun 4, 2026
7ca6547
Make review baseline origin configurable via env
ghengeveld Jun 4, 2026
8e18c2e
Tidy review addon helpers
ghengeveld Jun 4, 2026
8641dd6
Clarify the preview inert gate vs the freeze gate
ghengeveld Jun 4, 2026
a50d3d8
Reorder DetailsScreen import to satisfy formatter
ghengeveld Jun 4, 2026
215e415
Fall back to setTimeout when queueMicrotask is unavailable in story f…
ghengeveld Jun 4, 2026
84fa5cf
Restore freezer-mutated globals and injected styles between tests
ghengeveld Jun 4, 2026
c4a85d5
Restore local baseline serving and keep review staleness server-autho…
ghengeveld Jun 4, 2026
0184b33
Clear stale baseline state and keep latest preview visible without a …
ghengeveld Jun 4, 2026
3991539
Harden review grid ref typing, clipboard copy, and collection toggle …
ghengeveld Jun 4, 2026
4008669
Keep review detail previews interactive by making freeze opt-in
ghengeveld Jun 4, 2026
00bc383
Fix review grid Frame ref type for polymorphic anchor/div element
ghengeveld Jun 5, 2026
68ba81e
Retrigger CI after svelte sandbox port 6006 EADDRINUSE flake
ghengeveld Jun 5, 2026
44ebd87
Trim verbose preview-margin comment in review grid
ghengeveld Jun 5, 2026
5cca135
Rename pumpPreviewQueue to startQueuedPreviews for clarity
ghengeveld Jun 5, 2026
a725efa
Drop noisy StoryInfo doc comment in review grid
ghengeveld Jun 5, 2026
83952dd
Trim band comment and explain fractional grid breakpoints
ghengeveld Jun 5, 2026
8e6ba7f
Give review search highlight a marker look
ghengeveld Jun 5, 2026
e5042ef
Extract Highlight and Mark into their own component file
ghengeveld Jun 5, 2026
15a290d
Require resolved StoryInfo in review grid and skip invalid stories
ghengeveld Jun 5, 2026
067f3d4
Remove explanatory comments from ReviewHeader
ghengeveld Jun 5, 2026
c2d2548
Drop unnecessary minWidth from ReviewHeader subtitle
ghengeveld Jun 5, 2026
a7ead56
Remove unused server-side git branch resolution from review addon
ghengeveld Jun 5, 2026
50272f7
Use api.getStoryHrefs for review previews and links
ghengeveld Jun 5, 2026
9426ad3
Configure review baseline via a single validated env var
ghengeveld Jun 5, 2026
f79f74b
Document STORYBOOK_REVIEW_BASELINE env var in review addon README
ghengeveld Jun 5, 2026
e23586a
Drop unnecessary review story-id normalization
ghengeveld Jun 5, 2026
1ff5a2a
Inline NEW status value and fix inaccurate New-badge comments
ghengeveld Jun 5, 2026
9c5a693
Revert unintended GuidePage heading change
ghengeveld Jun 5, 2026
2977f3c
Fix SummaryScreen stories
ghengeveld Jun 5, 2026
6cb6e4e
Merge branch 'next' into yann/agentic-review-mcp-integration
ghengeveld Jun 5, 2026
38d35f3
Show copy prompt and view storybook buttons on waiting screen
ghengeveld Jun 5, 2026
24fd698
Merge branch 'next' into yann/agentic-review-mcp-integration
ghengeveld Jun 8, 2026
ae8aa27
Fix scroll windowing and highlight style
ghengeveld Jun 5, 2026
7c98b02
Revert config change
ghengeveld Jun 8, 2026
164898e
Reuse shared useCopyButton in the review addon.
ghengeveld Jun 8, 2026
3166dc4
Rename Highlight search variables for readability.
ghengeveld Jun 8, 2026
56b01e4
Remove leftover comment
ghengeveld Jun 8, 2026
6edd68c
Add docblock to explain server-side baseline handling
ghengeveld Jun 8, 2026
c1c4ba3
Ignore iframes in Chromatic VRT
ghengeveld Jun 9, 2026
74778b0
Merge branch 'next' into yann/agentic-review-mcp-integration
ghengeveld Jun 9, 2026
1c8975f
Change default comparison mode to 1up
ghengeveld Jun 9, 2026
e9d6067
Fix CopyButton typing and align DetailsScreen baseline story tests wi…
ghengeveld Jun 9, 2026
b116472
Merge branch 'next' into yann/agentic-review-mcp-integration
yannbf Jun 10, 2026
df272c8
Review: Detect stale reviews via core/module-graph open service
yannbf Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions code/.storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ const config = defineMain({
directory: '../addons/a11y/src',
titlePrefix: 'addons/accessibility',
},
{
directory: '../addons/review/src',
titlePrefix: 'addons/review',
},
{
directory: '../addons/a11y/template/stories',
titlePrefix: 'addons/accessibility',
Expand Down Expand Up @@ -122,6 +126,7 @@ const config = defineMain({
'@storybook/addon-vitest',
'@storybook/addon-a11y',
'@storybook/addon-mcp',
'@storybook/addon-review',
'storybook-addon-pseudo-states',
'@chromatic-com/storybook',
'./services-preset.ts',
Expand Down
53 changes: 53 additions & 0 deletions code/addons/review/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# @storybook/addon-review

Renders an agent-pushed review of a code change inside Storybook.

An ADE agent pushes a review payload via the companion MCP server
(`@storybook/addon-mcp`); the dev server enriches it with the current git
branch, caches it, and broadcasts it over the Storybook channel. This addon's
page receives the payload (and requests a replay on mount so late or refreshed
tabs catch up) and renders it as a dedicated review experience:

- **Summary** — the review title and narrative, with the affected stories
grouped into Collections (agent-curated clusters) or by Components, plus
search and expand/collapse.
- **Details** — a focused, full-screen story preview with previous/next
navigation through the reviewed stories and a link back to the summary.

## Channel contract

Event names live in `src/constants.ts` and are the cross-repo contract with
`@storybook/addon-mcp`. They must match the emitter's constants exactly.

- `…/push-review` — agent → server: a new review payload.
- `…/display-review` — server → tabs: broadcast a review (`createdAt`-stamped).
- `…/request-review` — tab → server: replay the cached review (on mount).

## Review state shape

See `src/review-state.ts`. It is a duplicate of the canonical valibot schema
that lives in the MCP addon; this side only renders, so it needs the type, not
the validator.

## Baseline comparison

The detail screen can render the reviewed story side-by-side against a baseline
Storybook. The baseline source is configured with a single environment variable:

```sh
STORYBOOK_REVIEW_BASELINE=...
```

It accepts either of:

- **A project-relative path to a static build** (e.g. `storybook-static`). The
directory is served directly. Paths must stay inside the project — absolute
paths and paths that escape the working directory via `..` are rejected.
- **A remote origin URL** (e.g. `https://my-app.chromatic.com`). Requests are
proxied to that origin.

The dev server exposes the baseline under an internal proxy path, so baseline
previews and the baseline index load from the same origin as Storybook. If the
variable is unset, or is neither a valid relative path nor a valid URL, no
baseline is served (a warning is logged for invalid values) and the comparison
controls stay hidden.
26 changes: 26 additions & 0 deletions code/addons/review/build-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import type { BuildEntries } from '../../../scripts/build/utils/entry-utils.ts';

const config: BuildEntries = {
entries: {
browser: [
{
exportEntries: ['.'],
entryPoint: './src/index.ts',
},
{
exportEntries: ['./manager'],
entryPoint: './src/manager.tsx',
dts: false,
},
],
node: [
{
exportEntries: ['./preset'],
entryPoint: './src/preset.ts',
dts: false,
},
],
},
};

export default config;
1 change: 1 addition & 0 deletions code/addons/review/manager.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './dist/manager.js';
63 changes: 63 additions & 0 deletions code/addons/review/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"name": "@storybook/addon-review",
"version": "10.5.0-alpha.5",
"description": "Storybook addon that renders agent-pushed reviews",
"keywords": [
"storybook",
"storybook-addon",
"review",
"mcp",
"agent"
],
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/addons/review",
"bugs": {
"url": "https://github.com/storybookjs/storybook/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/storybookjs/storybook.git",
"directory": "code/addons/review"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
},
"license": "MIT",
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"code": "./src/index.ts",
"default": "./dist/index.js"
},
"./manager": "./dist/manager.js",
"./package.json": "./package.json",
"./preset": "./dist/preset.js"
},
"files": [
"dist/**/*",
"README.md",
"*.js",
"*.d.ts",
"!src/**/*"
],
"devDependencies": {
"http-proxy-middleware": "^4.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sirv": "^2.0.4",
"typescript": "^5.9.3"
},
Comment thread
ghengeveld marked this conversation as resolved.
"peerDependencies": {
"storybook": "workspace:^"
},
"publishConfig": {
"access": "public"
},
"storybook": {
"displayName": "Review",
"unsupportedFrameworks": [
"react-native"
]
}
}
1 change: 1 addition & 0 deletions code/addons/review/preset.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './dist/preset.js';
10 changes: 10 additions & 0 deletions code/addons/review/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "addon-review",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"projectType": "library",
"targets": {
"compile": {},
"check": {}
},
"tags": ["library"]
}
Loading