Skip to content

feat(ui): AI meeting summary — streaming, cancellable, notes-safe (MEET-6) - #372

Merged
eliotlim merged 3 commits into
feat/meet-8-desktop-micfrom
feat/meet-6-ai-summary
Oct 4, 2026
Merged

eliotlim merged 3 commits into
feat/meet-8-desktop-micfrom
feat/meet-6-ai-summary

Conversation

@eliotlim

@eliotlim eliotlim commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Problem

A finished meeting had a transcript but no summary; the owner wants Notion-style AI summaries without ever risking their manual notes. Board: MEET-6.

Solution

Summary section in the meeting block using the EXISTING aiGenerate SSE path (zero new server/provider surface): explicit offer on stop (never auto-runs — one click, it costs money), streaming render with a live Cancel button, one-transaction persist of only the summary prop — transcript and manual-notes children untouched on every path (success/cancel/error, asserted by doc-level equality). Prompt: 2–3 sentence summary · decisions · action items, with anti-injection framing and the existing 4000-char budget. Degradation: no-AI / unconfigured / paid-gate 403 (summary-specific copy) / mid-stream error all leave the prior summary intact. i18n ×4. Stacked on #369 — merge after it (before/with #370 is fine; independent of it).

Key files: packages/ui/src/blockeditor/{MeetingSummary.tssx → MeetingSummary.tsx,MeetingBlockView.tsx,exportBlocks.ts}, __tests__/meetingSummary.test.tsx (21 tests), lib/aiBridge.ts, components/AiBridgeHost.tsx, i18n ×4.

Before / After

Behavior Before After
Finished meeting transcript only one-click streaming summary (summary/decisions/action items); Regenerate replaces only AI text — tested doc-equality
Mid-generation n/a Cancel button (focus-retaining); abort leaves prior summary intact
403 / no AI / error n/a summary-specific copy; affordance disabled with explanation; prior summary never lost
Exports summary as one collapsed paragraph newline-split paragraphs in html/md/pdf

Visual change is a small new section in the existing block chrome; captures for the block as a whole live in #369 — incremental UI here is text controls (Devon gate cleared on implementation + fix round).

Test procedure

VITEST_MAX_WORKERS=1 pnpm verify green. Targeted: pnpm --filter @book.dev/ui exec vitest run src/blockeditor/__tests__/meetingSummary.test.tsx.

Operational notes

No env/migration/deps. Uses whatever AI provider is configured (works with MEET-3's local whisper for transcription + any chat provider for summaries; summary gen is paid-gated for guests like all generate calls).


Verify: green serialized. Reviews cleared: design (Devon — BLOCK→CLEAR after Cancel/copy/export fixes), code (Quinn). Final HEAD 33a5586.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
app.book.pub Ready Ready Preview Oct 4, 2026 2:16pm UTC

Request Review

@eliotlim
eliotlim changed the base branch from main to feat/meet-8-desktop-mic October 4, 2026 14:09
@eliotlim
eliotlim merged commit 3c4fad3 into feat/meet-8-desktop-mic Oct 4, 2026
11 of 12 checks passed
@eliotlim
eliotlim deleted the feat/meet-6-ai-summary branch October 4, 2026 14:09

This branch was successfully deployed

1 active deployment
Preview — 28e025b5 Deployed Oct 4, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant