feat: generative UI views system — views() API + chat integration + planning example#57
Merged
Conversation
…es (#14) Cockpit is an integrated developer reference surface for @cacheplane/stream-resource. It embeds running Angular examples, shows syntax-highlighted source code, renders tutorial documentation, and displays auto-generated API references for each capability. Shared libraries: - @cacheplane/design-tokens: colors, glass, gradient, glow, typography tokens - @cacheplane/ui-react: GlassPanel, GlassButton, Callout, Steps, Tabs, Card, CodeGroup, NavLink - @cacheplane/chat: Angular chat component library (cp-chat, cp-chat-message, cp-chat-input) 14 capability examples (Angular + Python + docs + e2e each): - LangGraph: streaming, persistence, interrupts, memory, durable-execution, subgraphs, time-travel, deployment-runtime - Deep Agents: planning, filesystem, subagents, memory, skills, sandboxes Unified harness: - Capability registry as single source of truth - Serve orchestrator with --capability and --all modes - Per-capability Nx serve targets - CI build job for all Angular apps - LangGraph deployment matrix for all 14 backends - Smoke e2e test suite (28 tests: 14 UI render + 14 send/receive) Light glassmorphism theme matching the website design with frosted glass panels, warm-to-cool gradient backgrounds, and EB Garamond/Inter/JetBrains Mono typography.
) * feat: animated arch diagram, copy buttons, tab labels, deploy docs (#8) * feat(website): add animated architecture flow diagram to introduction * feat(website): redesign arch diagram, fix tabs/table/deploy/copy button - Redesign ArchFlowDiagram as chat+console simulation showing full AI turn - Fix Tab labels using label prop instead of items array - Replace Key Concepts table with CardGroup (better MDX compat) - Expand Deploy section with 4 steps + env config + Angular build - Add copy button to all code blocks via Pre component - Use gpt-5-mini in code examples * feat: gradient feature chips, copy icon, TOC fix (#9) - Add FeatureChips component for Key Concepts (gradient chips, horizontal scroll) - Redesign copy button with SVG icons (copy/check), better visibility - Fix code block border (darker, more visible on light backgrounds) - Fix TOC sticky positioning with alignSelf and right padding - Replace CardGroup in Key Concepts with FeatureChips * docs: improve all 18 docs pages to intro quality (#10) * docs: add plan for improving all docs pages to intro quality * docs(website): expand streaming guide with modes, errors, throttle * docs(website): expand time-travel guide with history UI and debugging * docs(website): expand API reference stubs with intros and examples * docs(website): expand subgraphs guide with orchestrator and error handling * docs(website): add What's Next navigation to all docs pages --------- * docs: expand LangGraph Basics with 4 agent patterns + fix data flow (#11) * docs(website): massively expand LangGraph Basics with agent patterns From 66 to 377 lines. Covers: - Core concepts: nodes, edges, state with detailed code - 4 agent patterns: ReAct, human-in-the-loop, multi-agent, persistence - Each pattern with Python graph code + Angular streamResource connection - Signal mapping table showing every LangGraph concept → Signal - Graph API vs Functional API comparison - Expanded What's Next with 6 cards * fix(website): replace ASCII data flow diagram with Steps component * docs: comprehensive overhaul — 8 pages rewritten, 3300+ lines added (#12) * docs: add comprehensive docs overhaul master plan (15 tasks, 3 phases) * fix(website): resolve import paths, broken links, code fence, .tsx extensions * fix(website): convert all Tabs to label prop syntax * docs(website): rewrite Angular Signals concept with streaming lifecycle and Python code * docs(website): rewrite State Management with Python reducers and TypeScript mapping * docs(website): rewrite Memory guide with Python Store API and Angular patterns * docs(website): rewrite Agent Architecture with full Python patterns and Angular mapping * docs(website): rewrite Deployment guide with full LangGraph Cloud + Angular deployment * docs(website): rewrite Persistence guide with Python checkpointers and thread UI * docs(website): rewrite Testing guide with comprehensive mock patterns * docs(website): rewrite Interrupts guide with Python interrupt code and approval component * fix(website): fix Callout type='warn' → type='warning' + strip code fence titles * docs: Phase 2+3 — polish guides, fix quickstart/install, expand API pages (#13) * docs(website): polish quickstart and installation with fixes * docs(website): expand API reference pages with navigation and context * docs(website): polish streaming, time-travel, subgraphs with Python code * fix(website): fix Callout type warn in installation * feat(cockpit): complete cockpit application with 14 capability examples (#2) Cockpit is an integrated developer reference surface for @cacheplane/stream-resource. It embeds running Angular examples, shows syntax-highlighted source code, renders tutorial documentation, and displays auto-generated API references for each capability. Shared libraries: - @cacheplane/design-tokens: colors, glass, gradient, glow, typography tokens - @cacheplane/ui-react: GlassPanel, GlassButton, Callout, Steps, Tabs, Card, CodeGroup, NavLink - @cacheplane/chat: Angular chat component library (cp-chat, cp-chat-message, cp-chat-input) 14 capability examples (Angular + Python + docs + e2e each): - LangGraph: streaming, persistence, interrupts, memory, durable-execution, subgraphs, time-travel, deployment-runtime - Deep Agents: planning, filesystem, subagents, memory, skills, sandboxes Unified harness: - Capability registry as single source of truth - Serve orchestrator with --capability and --all modes - Per-capability Nx serve targets - CI build job for all Angular apps - LangGraph deployment matrix for all 14 backends - Smoke e2e test suite (28 tests: 14 UI render + 14 send/receive) Light glassmorphism theme matching the website design with frosted glass panels, warm-to-cool gradient backgrounds, and EB Garamond/Inter/JetBrains Mono typography. * feat(cockpit): complete cockpit application with 14 capability examples (#14) Cockpit is an integrated developer reference surface for @cacheplane/stream-resource. It embeds running Angular examples, shows syntax-highlighted source code, renders tutorial documentation, and displays auto-generated API references for each capability. Shared libraries: - @cacheplane/design-tokens: colors, glass, gradient, glow, typography tokens - @cacheplane/ui-react: GlassPanel, GlassButton, Callout, Steps, Tabs, Card, CodeGroup, NavLink - @cacheplane/chat: Angular chat component library (cp-chat, cp-chat-message, cp-chat-input) 14 capability examples (Angular + Python + docs + e2e each): - LangGraph: streaming, persistence, interrupts, memory, durable-execution, subgraphs, time-travel, deployment-runtime - Deep Agents: planning, filesystem, subagents, memory, skills, sandboxes Unified harness: - Capability registry as single source of truth - Serve orchestrator with --capability and --all modes - Per-capability Nx serve targets - CI build job for all Angular apps - LangGraph deployment matrix for all 14 backends - Smoke e2e test suite (28 tests: 14 UI render + 14 send/receive) Light glassmorphism theme matching the website design with frosted glass panels, warm-to-cool gradient backgrounds, and EB Garamond/Inter/JetBrains Mono typography. * feat: add @cacheplane/render and @cacheplane/chat libraries * docs: chat component library & angular renderer design spec Spec for three deliverables: @cacheplane/render (Angular renderer for @json-render/core), @cacheplane/chat (headless primitives + Tailwind compositions for LangGraph/Deep Agent UIs), and cockpit integration. Covers rendering pipeline, debug tool architecture, testing strategy, and dependency chain. * docs: implementation plans for render, chat, and cockpit integration Three plans covering the full chat component library: 1. @cacheplane/render — 11 tasks, Angular renderer for @json-render/core 2. @cacheplane/chat — 14 tasks, headless primitives + Tailwind compositions 3. Cockpit integration — 9 tasks, capability examples consuming chat lib * feat: scaffold @cacheplane/render Nx library Generates the publishable Angular library libs/render with Vitest test executor, ng-packagr build, flat ESLint config, and SPDX license headers matching the stream-resource reference patterns. Installs @json-render/core as a devDependency and registers the @cacheplane/render path alias. * feat(render): add types and defineAngularRegistry * feat(render): add signalStateStore backed by Angular signals * feat(render): add DI tokens for RenderContext and RepeatScope * feat(render): add prop resolution context builder * feat(render): add provideRender DI provider * feat(render): add RenderElementComponent — recursive element renderer Implements the core rendering pipeline component that looks up elements from the spec, resolves component classes from the registry, evaluates visibility conditions, resolves dynamic prop expressions and bindings, and renders via NgComponentOutlet. Includes repeat element support with child Injector-scoped RepeatScope. * feat(render): add RenderSpecComponent — top-level spec entry point Entry point component that accepts spec, registry, store, functions, handlers, and loading as inputs. Provides RENDER_CONTEXT to child RenderElementComponents via viewProviders. Falls back to RENDER_CONFIG from provideRender() for registry/store defaults, and creates an internal signalStateStore from spec.state when no store is provided. * feat(render): add children rendering tests for recursive element tree Adds tests verifying the recursive rendering pattern: parent components receive childKeys and spec as inputs, each child element resolves independently from the same spec, and deeply nested trees are traversable. * feat(render): export rendering pipeline from public API Adds RenderElementComponent, RenderSpecComponent, RENDER_CONTEXT, RenderContext, REPEAT_SCOPE, and RepeatScope to the public API. * feat(render): finalize public API and verify build - Fix @json-render/core peer dep version to ^0.16.0 - Fix componentClass() to return null (not undefined) for ngComponentOutlet compatibility - Fix test component selectors to use render- prefix per eslint config - Remove unused imports from spec files - Suppress no-empty-function lint errors in test helpers * chore: scaffold @cacheplane/chat library * feat(chat): add shared types and mock test utilities - Add ChatConfig and MessageTemplateType to chat.types.ts - Add createMockStreamResourceRef() with writable signals, matching the full StreamResourceRef<T, ResolvedBag> interface including all signals and action methods * feat(chat): add ChatMessages primitive with messageTemplate directive - MessageTemplateDirective: ng-template[messageTemplate] with input.required<MessageTemplateType>() - ChatMessagesComponent: collects templates via contentChildren, computes messages from ref.messages(), renders via ngTemplateOutlet with findTemplate() - Extract getMessageType() as standalone function (human/ai/tool/system/function, fallback 'ai') to enable logic-level unit tests without DOM rendering - 15 tests across 2 spec files; all passing * feat(chat): add ChatInput primitive Adds ChatInputComponent with submitMessage() pure function, isDisabled computed from ref.isLoading, and onSubmit/onKeydown methods. Exports submitMessage for logic-level testing. 7 new tests passing (22 total). * feat(chat): add ChatTypingIndicator and ChatError primitives Adds ChatTypingIndicatorComponent (visible computed from ref.isLoading) and ChatErrorComponent (errorMessage computed with Error/string/unknown handling). Exports isTyping() and extractErrorMessage() pure functions for logic-level testing. 14 new tests passing (36 total). * feat(chat): add ChatInterrupt primitive Adds ChatInterruptComponent with interrupt computed from ref.interrupt(), contentChild(TemplateRef) for consumer-provided templates, and ngTemplateOutlet rendering with interrupt as implicit context. Exports getInterrupt() pure function for logic-level testing. 5 new tests passing (41 total). * feat(chat): add ChatToolCalls and ChatSubagents primitives * feat(chat): add ChatThreadList primitive * feat(chat): add ChatTimeline and ChatGenerativeUi primitives * feat(chat): export all new primitives from public-api * feat(chat): add provideChat DI provider * feat(chat): add <chat> prebuilt composition * feat(chat): add InterruptPanel, ToolCallCard, SubagentCard compositions * feat(chat): add ChatTimelineSlider composition * feat(chat): export compositions and provideChat from public-api * feat(chat): add ChatDebug composition with timeline, state inspector, and diff * fix(chat): fix test failures and verify build - Fix provide-chat test failures (tests were already passing, addressed pre-existing lint and build errors instead) - Add missing peerDependencies: @angular/forms, @json-render/core, @langchain/langgraph-sdk - Rename debug-* component selectors to chat-debug-* prefix to satisfy @angular-eslint/component-selector rule; update all template usages - Rename messageTemplate directive attribute to chatMessageTemplate to satisfy @angular-eslint/directive-selector rule - Fix tsconfig.json: remove baseUrl override so inherited paths from tsconfig.base.json resolve correctly in ng-packagr builds - Fix TS2307: move ToolCallWithResult and ToolProgress imports from @cacheplane/stream-resource to @langchain/langgraph-sdk (not exported) - Fix TS2551: update checkpoint_id access to state.checkpoint.checkpoint_id to match actual ThreadState type shape; update spec accordingly - Fix TS6133: remove unused 'computed' and 'ThreadState' imports - Fix TS2345: cast keydown event with $any() in chat-input template - Add eslint-disable comments for intentionally empty mock no-op methods * fix(render): address code review issues (store recreation, array handling, type accuracy) - I-1: Replace internalStore computed with lazy _internalStore field to prevent store recreation on every spec change - I-2: Update AngularComponentInputs to reflect spread props pattern with index signature instead of props bag - I-3: Fix setByPath to preserve array type when setting by numeric index; add test - I-4: Extract repeatScopes computed to eliminate duplicate RepeatScope construction in repeatInjectors/repeatInputs * fix(chat): address code review issues (ng-content, dedup, types, API correctness) - C1: Remove ng-content from ChatTypingIndicator and ChatError; both are now self-contained status components with default markup (no content projection) - I1+I2: Extract messageContent() to libs/chat/src/lib/compositions/shared/message-utils.ts; both Chat and ChatDebug expose it as a class property with co-location comment - I3: Export MockStreamResourceRef interface with writable signals so tests avoid unsafe casts; createMockStreamResourceRef() now returns MockStreamResourceRef - I4: ChatToolCalls uses AIMessage instanceof check + ref().getToolCalls() instead of (msg as any).tool_calls - I5: ChatTimelineSlider emits replayRequested/forkRequested outputs instead of calling setBranch() with a checkpoint ID (setBranch takes a branch name) - I6: ChatComponent accepts optional threads/activeThreadId inputs and renders a ChatThreadList sidebar when threads are provided * feat(cockpit): add Angular capability examples consuming @cacheplane/chat Creates 14 Angular CockpitCapabilityModule descriptors (8 LangGraph + 6 deep-agents), each with package.json, project.json, tsconfig.json, src/index.ts, src/app.component.ts, and prompts/{topic}.md. LangGraph topics: streaming, persistence, interrupts, memory, time-travel, subgraphs, durable-execution, deployment-runtime. Deep-agents topics: planning, filesystem, subagents, memory, skills, sandboxes. Each Angular component demonstrates the relevant @cacheplane/chat primitives: <chat>, <chat-messages>, <chat-input>, <chat-typing-indicator>, <chat-interrupt-panel>, <chat-timeline-slider>, <chat-subagent-card>, <chat-error>, and <chat-debug>. * feat(cockpit): make Angular examples standalone bootstrappable apps Add main.ts, app.config.ts, and index.html to all 14 cockpit Angular examples (8 LangGraph + 6 Deep Agents) so each can be independently bootstrapped. Deep Agents examples include provideRender({}) from @cacheplane/render to support generative UI via <chat-debug>. --------- Co-authored-by: Brian Love <brian@brianlove.com> * feat(cockpit): add design tokens CSS, Tailwind v4 to Angular apps, fix sidebar and code overflow (#16) - Add tokens.css to @cacheplane/design-tokens with all 29 --ds-* CSS custom properties - Replace hardcoded dark theme in all 14 Angular example apps with design-token-based light theme - Add Tailwind v4 to all Angular apps via @import "tailwindcss" + @theme block - Remove overview entries from cockpit sidebar navigation - Fix code block horizontal overflow in docs mode with overflow-x: auto * feat(chat): Apple-clean UI redesign + streaming example integration * feat(cockpit): wire streaming example to @cacheplane/chat - Rewrite StreamingComponent to use <chat-ui [ref]> (correct API) - Remove duplicate app.component.ts and app.config.ts entry points - Add @angular-devkit/build-angular for app build/serve targets - Add provideChat({}) to app config alongside provideStreamResource - Configure dev proxy (/api → localhost:8123) and file replacements - Update tsconfig.app.json with DOM lib and emitDeclarationOnly override The streaming example is now ~10 lines of component code — all UI complexity lives in the @cacheplane/chat library. * docs: chat UI redesign spec — Apple-clean aesthetic with theming * docs: chat UI redesign implementation plan * feat(chat): add CSS custom property theme system with dark/light modes * feat(chat): redesign <chat> composition — Apple-clean aesthetic with theme vars * feat(chat): restyle ChatInput as pill-shaped with theme vars * feat(chat): restyle ChatTypingIndicator with dot animation and theme vars * feat(chat): restyle ChatError with theme vars * fix(chat): inline theme CSS in styles[] to avoid JIT styleUrls resolution in tests * feat(chat): restyle ChatInterruptPanel with neutral theme vars * feat(chat): restyle ToolCallCard and SubagentCard with theme vars * feat(chat): restyle ChatDebug with theme vars * fix(cockpit): update streaming example selector chat-ui → chat * test(chat): update statusColor spec assertions for CSS var return values --------- * feat(cockpit): wire all 13 remaining Angular examples to @cacheplane/chat * docs: cockpit Angular examples chat integration spec (Phase 1) * docs: cockpit examples chat integration plan * docs: add narrative redesign and white paper pipeline specs Spec 1 (2026-04-05-narrative-redesign): Four new landing page sections — ProblemSection (gap animation + 3 stats), FullStackSection (3-layer stack with SVG particle connectors), ChatFeaturesSection (interactive 4-tab chat scenarios), FairComparisonSection (honest LangChain comparison table). Includes animation detail, correct fix for border-radius fill artifact, and FeatureStrip copy update. Spec 2 (2026-04-05-whitepaper-pipeline): One-time Anthropic SDK generation script producing a static PDF from six assessment-framework chapters. Free download with optional lead-gen form. No gate. * feat(cockpit): wire 7 LangGraph Angular examples to @cacheplane/chat * feat(cockpit): wire 6 Deep Agents Angular examples to @cacheplane/chat-debug - Replace placeholder component implementations with ChatDebugComponent pattern - Delete src/app.component.ts and src/app.config.ts root duplicates from all 6 - Rewrite capability components to use <chat-debug [ref]="stream" class="block h-screen" /> - Rewrite app.config.ts to include provideRender({}) alongside provideChat({}) - Rewrite main.ts to bootstrap from src/app/ (not root src/) - Switch project.json from @nx/js:tsc library to @angular-devkit/build-angular:application - Fix tsconfig.json extends path (6 levels → 4 levels to workspace root) - Update tsconfig.app.json to add lib and emitDeclarationOnly: false - Add <base href="/"> to all index.html files; fix memory selector app-da-memory - Set environment.development.ts langGraphApiUrl to '/api' (proxy-relative) - Fix proxy.conf.json targets to correct ports (8140–8145) - All 6 production builds pass with no errors --------- * feat(cockpit): production deployment - LangGraph Cloud, Angular hosting, CI (#19) * feat(cockpit): add design tokens CSS, Tailwind v4 to Angular apps, fix sidebar and code overflow - Add tokens.css to @cacheplane/design-tokens with all 29 --ds-* CSS custom properties - Replace hardcoded dark theme in all 14 Angular example apps with design-token-based light theme - Add Tailwind v4 to all Angular apps via @import "tailwindcss" + @theme block - Add explicit tsconfig paths for @cacheplane/chat and @cacheplane/stream-resource (CI fix) - Remove overview entries from cockpit sidebar navigation - Fix code block horizontal overflow in docs mode with overflow-x: auto - Exclude all-examples-smoke test from default e2e (requires running servers) * feat(cockpit): production deployment - LangGraph Cloud, Angular hosting, CI pipeline - Switch all 14 Angular apps to @angular/build:application for production builds - Deploy all 14 Python backends to LangGraph Cloud (all healthy) - Wire Angular production environments to LangGraph Cloud URLs - Add Vercel static hosting for Angular examples (cockpit-examples.vercel.app) - Add deployment verification script and assemble script - Add CI jobs for examples deploy and production smoke tests - Fix langgraph.json configs (dependencies, python_version) - Update deploy-langgraph.yml workflow for correct CLI usage * feat(cockpit): Tier 1 example customization — thread management + capability sidebars * docs: cockpit examples Tier 1 customization spec * feat(cockpit): customize persistence example with thread management Rewrites PersistenceComponent to track threads via onThreadId callback, maintain Thread[] and activeThreadId signals, and handle threadSelected to call stream.switchThread(id). Deployment-runtime component verified correct and left unchanged. Both examples build successfully. * feat(cockpit): add capability-specific sidebars to 6 deep-agents examples Each example now renders a live sidebar alongside <chat-debug> using computed() signals derived from stream.value() or stream.messages(). Sidebar styling uses var(--chat-*) CSS custom properties throughout. --------- * feat(cockpit): Tier 2 — memory sidebar, subagent tracking, interrupt panel * feat(cockpit): Tier 2 — memory sidebar, subagent tracking, interrupt panel Rewrites the three LangGraph cockpit examples to use <chat [ref]="stream"> alongside capability-specific sidebars/panels, replacing LegacyChatComponent. - memory: derives memoryEntries from stream.value().memory (confirmed key from Python MemoryState) - subgraphs: derives subagentEntries from stream.subagents() Map with status + message count - interrupts: wires ChatInterruptPanelComponent (action) output to stream.submit(null) resume * feat: add ProblemSection with animated gap progress bar --------- * feat(cockpit): Tier 3 — time-travel checkpoint nav + durable-execution step pipeline Replace LegacyChatComponent with ChatComponent + ChatTimelineSliderComponent in time-travel, and ChatComponent with a status bar pipeline in durable-execution. * fix(cockpit): production review pass — 22 fixes across 14 examples * fix(cockpit): restore streaming and deployment-runtime to use ChatComponent (reverted by PR #19) * fix(cockpit): update e2e tests for current UI (#24) * feat(cockpit): production deployment with serverless API proxy - Switch all 14 Angular apps to @angular/build:application - Deploy all 14 Python backends to LangGraph Cloud - Add Vercel serverless proxy that injects x-api-key server-side - Revert Angular environments to relative /api URLs (proxy handles routing) - Build Output API for proper multi-segment catch-all routing - Angular examples hosted at examples.stream-resource.dev - Deployment verification script and production smoke tests - CI jobs for examples deploy and production smoke * fix(cockpit): update e2e tests for current UI, exclude production-smoke from default run - Update cockpit.spec.ts to match current shell (stripped sidebar prefixes, removed obsolete heading assertions) - Add production-smoke.spec.ts to testIgnore in playwright config (only runs in dedicated CI job, not during cockpit-e2e) * fix(cockpit): restore fileReplacements for dev environment in all 13 Angular examples * fix(cockpit): use full URLs in dev environments (SDK requires absolute URLs) * feat(website): add Examples link to header and footer (#25) * feat(cockpit): production deployment with serverless API proxy - Switch all 14 Angular apps to @angular/build:application - Deploy all 14 Python backends to LangGraph Cloud - Add Vercel serverless proxy that injects x-api-key server-side - Revert Angular environments to relative /api URLs (proxy handles routing) - Build Output API for proper multi-segment catch-all routing - Angular examples hosted at examples.stream-resource.dev - Deployment verification script and production smoke tests - CI jobs for examples deploy and production smoke * fix(cockpit): update e2e tests for current UI, exclude production-smoke from default run - Update cockpit.spec.ts to match current shell (stripped sidebar prefixes, removed obsolete heading assertions) - Add production-smoke.spec.ts to testIgnore in playwright config (only runs in dedicated CI job, not during cockpit-e2e) * feat(website): add Examples link to header and footer pointing to cockpit * fix(chat): fix broken style interpolation in ChatInput border-color * fix(ci): isolate examples deploy to prevent overwriting website (#26) * feat(cockpit): production deployment with serverless API proxy - Switch all 14 Angular apps to @angular/build:application - Deploy all 14 Python backends to LangGraph Cloud - Add Vercel serverless proxy that injects x-api-key server-side - Revert Angular environments to relative /api URLs (proxy handles routing) - Build Output API for proper multi-segment catch-all routing - Angular examples hosted at examples.stream-resource.dev - Deployment verification script and production smoke tests - CI jobs for examples deploy and production smoke * fix(cockpit): update e2e tests for current UI, exclude production-smoke from default run - Update cockpit.spec.ts to match current shell (stripped sidebar prefixes, removed obsolete heading assertions) - Add production-smoke.spec.ts to testIgnore in playwright config (only runs in dedicated CI job, not during cockpit-e2e) * feat(website): add Examples link to header and footer pointing to cockpit * fix(ci): isolate examples deploy to prevent overwriting website project * fix(chat): send simple {role, content} dict instead of HumanMessage object The LangGraph SDK serializes HumanMessage as its LangChain constructor format ({lc, type, id, kwargs}) which the Python backend rejects with: ValueError: Message dict must contain 'role' and 'content' keys Sending {role: 'human', content: text} is the correct wire format. * docs: add continuation context for chat library + cockpit integration * feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, a11y (#27) * docs(chat): add ship-readiness polish implementation plan Addresses all 19 audit issues: theme consolidation, Tailwind conversion, auto-scroll, textarea auto-expand, markdown rendering, empty state, responsive sidebar, SVG icons, ARIA, and API cleanup. * feat(chat): consolidate theme into shared TS module, add icons + markdown utils * feat(chat): convert ChatComponent to Tailwind, add auto-scroll + empty state + responsive sidebar - Replace 80+ lines of inlined CSS vars with CHAT_THEME_STYLES import - Add CHAT_MARKDOWN_STYLES + renderMarkdown for AI message rendering - Convert all inline style="" attributes to Tailwind utility classes - Add auto-scroll via viewChild + effect tracking message count - Add empty state when no messages and not loading - Make thread sidebar responsive with hidden md:flex + mobile toggle - Add ARIA attributes: role=log, aria-live=polite, role=navigation - Use ViewEncapsulation.None for markdown styles * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars * feat(chat): clean up public API, add marked peer dep, verify build Remove legacy cp-chat/cp-chat-input/cp-chat-message components and migrate all cockpit examples to the new ChatComponent composition. Export shared styles, icons, and markdown utilities from public API. Update ChatConfig with renderRegistry, avatarLabel, assistantName. Add marked as optional peer dep and fix dynamic import for library build. Add @source directive to cockpit styles for Tailwind scanning. * feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, a11y (#27) * docs(chat): add ship-readiness polish implementation plan Addresses all 19 audit issues: theme consolidation, Tailwind conversion, auto-scroll, textarea auto-expand, markdown rendering, empty state, responsive sidebar, SVG icons, ARIA, and API cleanup. * feat(chat): consolidate theme into shared TS module, add icons + markdown utils * feat(chat): convert ChatComponent to Tailwind, add auto-scroll + empty state + responsive sidebar - Replace 80+ lines of inlined CSS vars with CHAT_THEME_STYLES import - Add CHAT_MARKDOWN_STYLES + renderMarkdown for AI message rendering - Convert all inline style="" attributes to Tailwind utility classes - Add auto-scroll via viewChild + effect tracking message count - Add empty state when no messages and not loading - Make thread sidebar responsive with hidden md:flex + mobile toggle - Add ARIA attributes: role=log, aria-live=polite, role=navigation - Use ViewEncapsulation.None for markdown styles * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars * feat(chat): clean up public API, add marked peer dep, verify build Remove legacy cp-chat/cp-chat-input/cp-chat-message components and migrate all cockpit examples to the new ChatComponent composition. Export shared styles, icons, and markdown utilities from public API. Update ChatConfig with renderRegistry, avatarLabel, assistantName. Add marked as optional peer dep and fix dynamic import for library build. Add @source directive to cockpit styles for Tailwind scanning. --------- * feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, a11y (#27) * docs(chat): add ship-readiness polish implementation plan Addresses all 19 audit issues: theme consolidation, Tailwind conversion, auto-scroll, textarea auto-expand, markdown rendering, empty state, responsive sidebar, SVG icons, ARIA, and API cleanup. * feat(chat): consolidate theme into shared TS module, add icons + markdown utils * feat(chat): convert ChatComponent to Tailwind, add auto-scroll + empty state + responsive sidebar - Replace 80+ lines of inlined CSS vars with CHAT_THEME_STYLES import - Add CHAT_MARKDOWN_STYLES + renderMarkdown for AI message rendering - Convert all inline style="" attributes to Tailwind utility classes - Add auto-scroll via viewChild + effect tracking message count - Add empty state when no messages and not loading - Make thread sidebar responsive with hidden md:flex + mobile toggle - Add ARIA attributes: role=log, aria-live=polite, role=navigation - Use ViewEncapsulation.None for markdown styles * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars * feat(chat): clean up public API, add marked peer dep, verify build Remove legacy cp-chat/cp-chat-input/cp-chat-message components and migrate all cockpit examples to the new ChatComponent composition. Export shared styles, icons, and markdown utilities from public API. Update ChatConfig with renderRegistry, avatarLabel, assistantName. Add marked as optional peer dep and fix dynamic import for library build. Add @source directive to cockpit styles for Tailwind scanning. --------- * Rebrand to Angular Stream Resource (#28) * docs: add rebrand design spec for Angular Stream Resource * docs: add implementation plan for Angular Stream Resource rebrand * docs: rebrand StreamResource → Angular Stream Resource in README and COMMERCIAL Update product name in prose/marketing contexts: README alt text and license section, COMMERCIAL.md license header. * docs: rebrand StreamResource → Angular Stream Resource in website shared components Update product name in layout metadata title, Nav logo link text, Footer brand name, and Footer copyright line. * docs: rebrand StreamResource → Angular Stream Resource in landing and llms.txt Update product name in ProblemSection badge text, GenerativeUIFrame aria-label, and llms.txt route title and description line. * docs: rebrand StreamResource → Angular Stream Resource in documentation files Update product name in headings and prose across limitations.md and four design specs (titles, overview sentences, section headings). * docs: rebrand stream-resource → Angular Stream Resource in LLM context files Update product name in the H1 title of AGENTS.md and CLAUDE.md. * docs: rebrand remaining spec and plan references to Angular Stream Resource * docs: fix remaining brand references missed in initial pass * Rebrand to Angular Stream Resource (#28) * docs: add rebrand design spec for Angular Stream Resource * docs: add implementation plan for Angular Stream Resource rebrand * docs: rebrand StreamResource → Angular Stream Resource in README and COMMERCIAL Update product name in prose/marketing contexts: README alt text and license section, COMMERCIAL.md license header. * docs: rebrand StreamResource → Angular Stream Resource in website shared components Update product name in layout metadata title, Nav logo link text, Footer brand name, and Footer copyright line. * docs: rebrand StreamResource → Angular Stream Resource in landing and llms.txt Update product name in ProblemSection badge text, GenerativeUIFrame aria-label, and llms.txt route title and description line. * docs: rebrand StreamResource → Angular Stream Resource in documentation files Update product name in headings and prose across limitations.md and four design specs (titles, overview sentences, section headings). * docs: rebrand stream-resource → Angular Stream Resource in LLM context files Update product name in the H1 title of AGENTS.md and CLAUDE.md. * docs: rebrand remaining spec and plan references to Angular Stream Resource * docs: fix remaining brand references missed in initial pass * Rebrand to Angular Stream Resource (#28) * docs: add rebrand design spec for Angular Stream Resource * docs: add implementation plan for Angular Stream Resource rebrand * docs: rebrand StreamResource → Angular Stream Resource in README and COMMERCIAL Update product name in prose/marketing contexts: README alt text and license section, COMMERCIAL.md license header. * docs: rebrand StreamResource → Angular Stream Resource in website shared components Update product name in layout metadata title, Nav logo link text, Footer brand name, and Footer copyright line. * docs: rebrand StreamResource → Angular Stream Resource in landing and llms.txt Update product name in ProblemSection badge text, GenerativeUIFrame aria-label, and llms.txt route title and description line. * docs: rebrand StreamResource → Angular Stream Resource in documentation files Update product name in headings and prose across limitations.md and four design specs (titles, overview sentences, section headings). * docs: rebrand stream-resource → Angular Stream Resource in LLM context files Update product name in the H1 title of AGENTS.md and CLAUDE.md. * docs: rebrand remaining spec and plan references to Angular Stream Resource * docs: fix remaining brand references missed in initial pass * feat(website): add narrative sections, pilot-to-prod page, and rebrand integration (#29) * fix(website): add track shake animation to ProblemSection stall phase * fix(website): ProblemSection quality fixes — timer cleanup, unique SVG ID, aria-hidden, correct import - Store setTimeout IDs and clear them on unmount (prevents state updates on unmounted component) - Use useId() to generate unique hatchId per instance (prevents SVG pattern id collision) - Add role=progressbar + aria-valuenow to track container for screen readers - Add aria-hidden=true to decorative animated elements (pins, labels, badge, counter) - Fix import: use local lib/design-tokens instead of unresolved @cacheplane/design-tokens - Add invariant comment for done-timeout vs counter-duration coupling * feat: add FullStackSection with animated stack diagram and roadmap strip * feat: add ChatFeaturesSection with 4 interactive chat scenarios * feat: add FairComparisonSection comparison table * feat: wire ProblemSection, FullStackSection, ChatFeaturesSection, FairComparisonSection into landing page - Insert ProblemSection + FullStackSection + ChatFeaturesSection after StatsStrip - Insert FairComparisonSection after DeepAgentsShowcase - Add two ambient gradient blobs for extended page height - Task 5 (FeatureStrip copy): no-op — the problematic 'no established pattern' copy was not present in this branch * chore: add puppeteer devDependency and generate-whitepaper script * feat: add whitepaper signup API route with NDJSON persistence * feat: add whitepaper generation script * feat: add WhitePaperSection with free download and optional lead-gen form * feat: add WhitePaperSection to landing page; remove useStream parity copy from FeatureStrip * fix(whitepaper): add JetBrains Mono to Google Fonts URL and regenerate preview Fixes missing code font in whitepaper output. Regenerates whitepaper-preview.html with correct 'EB Garamond' and 'JetBrains Mono' font references throughout. * feat: add PilotHero component and /pilot-to-prod page skeleton * fix: PilotHero responsive padding, eyebrow style conflict, page metadata * feat: add WhatIsIncluded 3-column component for pilot-to-prod page * feat: add HowItWorks 3-phase timeline for pilot-to-prod page * feat: add PricingSignal pricing callout for pilot-to-prod page * feat: add WhitePaperGate 5-field lead gen form for pilot-to-prod page * fix: change role=alert to role=status to match aria-live=polite in WhitePaperGate * feat: add PilotFooterCTA and wire complete pilot-to-prod page * fix: use tokens.colors.accent in PilotFooterCTA, add aria-hidden to page blobs * feat: add Pilot to Prod nav link and restructure homepage (remove FeatureStrip/CockpitCTA/CodeBlock, add PilotProgram CTA) * fix: correct design-tokens import path in pilot-to-prod page (3 levels up) * fix: apply full review findings — messaging, mobile, UX, and RiskRemoval section - Remove useStream() parity messaging from HeroTwoCol, WhatIsIncluded, StatsStrip - Fix PricingSignal: remove ambiguous '/year', clarify as fixed fee + pilot included - Add PricingSignal mobile padding reduction via media query - Fix ProblemSection stat grid to collapse on mobile (auto-fit minmax) - Add RiskRemoval section to pilot-to-prod page (between PricingSignal and WhitePaperGate) - Fix Nav Examples link: external=true, target=_blank, rel=noopener noreferrer - Fix WhitePaperGate: role field sent in message body, not merged into company string - Fix PilotFooterCTA: replace broken whileHover borderColor with CSS class hover - Fix PilotHero: remove opacity from initial animations (prevents blank hero flash) - Increase PilotHero CTA padding to meet 44px touch target * fix: remove remaining useStream parity messaging from layout, Footer, and ValueProps * fix: second review pass — docs messaging, title, broken link, a11y labels - introduction.mdx: remove parity/useStream opening line, use Signal-native positioning - AGENTS.md.template + CLAUDE.md.template: update tagline to Signal-native - layout.tsx: update <title> from LangChain to LangGraph - Footer.tsx: fix /api-reference → /docs/api/stream-resource (was 404) - PilotHero.tsx: add aria-hidden to decorative gradient blobs - WhitePaperSection.tsx: add sr-only labels + aria-label to name/email inputs - LeadForm.tsx (pricing): add sr-only labels + aria-label to all four form inputs * feat: add whitepaper.pdf to public directory Generated from whitepaper-preview.html via Puppeteer. All 6 chapters present (Streaming State Management, Thread Persistence, Tool-Call Rendering, Human Approval Flows, Generative UI, Deterministic Testing). Fixes dead 'Download the Guide' CTAs on pilot-to-prod and homepage. * feat: citation badges on stats, pricing reframe to app deployment license Citation badges: - New CitationBadge component — click-to-open popover with source, stat, note, and link - 66% stat → Stack Overflow Developer Survey 2025 - 31% stat → ISG AI Adoption Reports - 75% stat → Stack Overflow Developer Survey 2025 - Keyboard (Escape) and outside-click dismissal, ARIA dialog role Pricing reframe (app deployment license): - Remove ALL refund/money-back/guarantee language site-wide - PilotHero: trust line → "App deployment license · $20,000 · 3-month co-pilot engagement" - PilotHero: subheadline removes "guaranteed outcome" - WhatIsIncluded: card 3 renamed from "Production Guarantee" → "App Deployment License" - HowItWorks: phase 3 removes "full refund" language, deliverable → "Production deployment" - PricingSignal: subtitle + features list updated to license/co-pilot framing - RiskRemoval: section reframed from guarantee → "What's included in the license" Replaces money-back card with "We work alongside your team" card - PilotFooterCTA: fine print updated - pilot-to-prod/page.tsx: meta description updated * feat: subtler citation badge + citations on all 77% claims CitationBadge: - Reduced to 13px, transparent background, faint border (rgba 0.2) - Text color rgba(0,64,144,0.35) at rest — nearly invisible until hovered - No fill on idle state, border-only approach New citation placements: - PilotHero subheadline: 77% → McKinsey State of AI 2024 - PilotFooterCTA body copy: 77% → McKinsey State of AI 2024 - HomePilotCTA (new component): extracts inline pilot CTA from page.tsx so it can be a client component with CitationBadge on the 77% claim - page.tsx: replaces inline section with <HomePilotCTA /> * docs: add FullStackSection redesign spec (EM/CTO layer narrative + Gen UI bug fix) * feat(website): redesign FullStackSection for EM/CTO audience * docs: apply Angular Stream Resource rebrand to narrative components * chore: sync package-lock.json after merge * fix(website): update e2e test for new landing page structure * feat(website): add narrative sections, pilot-to-prod page, and rebrand integration (#29) * fix(website): add track shake animation to ProblemSection stall phase * fix(website): ProblemSection quality fixes — timer cleanup, unique SVG ID, aria-hidden, correct import - Store setTimeout IDs and clear them on unmount (prevents state updates on unmounted component) - Use useId() to generate unique hatchId per instance (prevents SVG pattern id collision) - Add role=progressbar + aria-valuenow to track container for screen readers - Add aria-hidden=true to decorative animated elements (pins, labels, badge, counter) - Fix import: use local lib/design-tokens instead of unresolved @cacheplane/design-tokens - Add invariant comment for done-timeout vs counter-duration coupling * feat: add FullStackSection with animated stack diagram and roadmap strip * feat: add ChatFeaturesSection with 4 interactive chat scenarios * feat: add FairComparisonSection comparison table * feat: wire ProblemSection, FullStackSection, ChatFeaturesSection, FairComparisonSection into landing page - Insert ProblemSection + FullStackSection + ChatFeaturesSection after StatsStrip - Insert FairComparisonSection after DeepAgentsShowcase - Add two ambient gradient blobs for extended page height - Task 5 (FeatureStrip copy): no-op — the problematic 'no established pattern' copy was not present in this branch * chore: add puppeteer devDependency and generate-whitepaper script * feat: add whitepaper signup API route with NDJSON persistence * feat: add whitepaper generation script * feat: add WhitePaperSection with free download and optional lead-gen form * feat: add WhitePaperSection to landing page; remove useStream parity copy from FeatureStrip * fix(whitepaper): add JetBrains Mono to Google Fonts URL and regenerate preview Fixes missing code font in whitepaper output. Regenerates whitepaper-preview.html with correct 'EB Garamond' and 'JetBrains Mono' font references throughout. * feat: add PilotHero component and /pilot-to-prod page skeleton * fix: PilotHero responsive padding, eyebrow style conflict, page metadata * feat: add WhatIsIncluded 3-column component for pilot-to-prod page * feat: add HowItWorks 3-phase timeline for pilot-to-prod page * feat: add PricingSignal pricing callout for pilot-to-prod page * feat: add WhitePaperGate 5-field lead gen form for pilot-to-prod page * fix: change role=alert to role=status to match aria-live=polite in WhitePaperGate * feat: add PilotFooterCTA and wire complete pilot-to-prod page * fix: use tokens.colors.accent in PilotFooterCTA, add aria-hidden to page blobs * feat: add Pilot to Prod nav link and restructure homepage (remove FeatureStrip/CockpitCTA/CodeBlock, add PilotProgram CTA) * fix: correct design-tokens import path in pilot-to-prod page (3 levels up) * fix: apply full review findings — messaging, mobile, UX, and RiskRemoval section - Remove useStream() parity messaging from HeroTwoCol, WhatIsIncluded, StatsStrip - Fix PricingSignal: remove ambiguous '/year', clarify as fixed fee + pilot included - Add PricingSignal mobile padding reduction via media query - Fix ProblemSection stat grid to collapse on mobile (auto-fit minmax) - Add RiskRemoval section to pilot-to-prod page (between PricingSignal and WhitePaperGate) - Fix Nav Examples link: external=true, target=_blank, rel=noopener noreferrer - Fix WhitePaperGate: role field sent in message body, not merged into company string - Fix PilotFooterCTA: replace broken whileHover borderColor with CSS class hover - Fix PilotHero: remove opacity from initial animations (prevents blank hero flash) - Increase PilotHero CTA padding to meet 44px touch target * fix: remove remaining useStream parity messaging from layout, Footer, and ValueProps * fix: second review pass — docs messaging, title, broken link, a11y labels - introduction.mdx: remove parity/useStream opening line, use Signal-native positioning - AGENTS.md.template + CLAUDE.md.template: update tagline to Signal-native - layout.tsx: update <title> from LangChain to LangGraph - Footer.tsx: fix /api-reference → /docs/api/stream-resource (was 404) - PilotHero.tsx: add aria-hidden to decorative gradient blobs - WhitePaperSection.tsx: add sr-only labels + aria-label to name/email inputs - LeadForm.tsx (pricing): add sr-only labels + aria-label to all four form inputs * feat: add whitepaper.pdf to public directory Generated from whitepaper-preview.html via Puppeteer. All 6 chapters present (Streaming State Management, Thread Persistence, Tool-Call Rendering, Human Approval Flows, Generative UI, Deterministic Testing). Fixes dead 'Download the Guide' CTAs on pilot-to-prod and homepage. * feat: citation badges on stats, pricing reframe to app deployment license Citation badges: - New CitationBadge component — click-to-open popover with source, stat, note, and link - 66% stat → Stack Overflow Developer Survey 2025 - 31% stat → ISG AI Adoption Reports - 75% stat → Stack Overflow Developer Survey 2025 - Keyboard (Escape) and outside-click dismissal, ARIA dialog role Pricing reframe (app deployment license): - Remove ALL refund/money-back/guarantee language site-wide - PilotHero: trust line → "App deployment license · $20,000 · 3-month co-pilot engagement" - PilotHero: subheadline removes "guaranteed outcome" - WhatIsIncluded: card 3 renamed from "Production Guarantee" → "App Deployment License" - HowItWorks: phase 3 removes "full refund" language, deliverable → "Production deployment" - PricingSignal: subtitle + features list updated to license/co-pilot framing - RiskRemoval: section reframed from guarantee → "What's included in the license" Replaces money-back card with "We work alongside your team" card - PilotFooterCTA: fine print updated - pilot-to-prod/page.tsx: meta description updated * feat: subtler citation badge + citations on all 77% claims CitationBadge: - Reduced to 13px, transparent background, faint border (rgba 0.2) - Text color rgba(0,64,144,0.35) at rest — nearly invisible until hovered - No fill on idle state, border-only approach New citation placements: - PilotHero subheadline: 77% → McKinsey State of AI 2024 - PilotFooterCTA body copy: 77% → McKinsey State of AI 2024 - HomePilotCTA (new component): extracts inline pilot CTA from page.tsx so it can be a client component with CitationBadge on the 77% claim - page.tsx: replaces inline section with <HomePilotCTA /> * docs: add FullStackSection redesign spec (EM/CTO layer narrative + Gen UI bug fix) * feat(website): redesign FullStackSection for EM/CTO audience * docs: apply Angular Stream Resource rebrand to narrative components * chore: sync package-lock.json after merge * fix(website): update e2e test for new landing page structure --------- * feat(website): add narrative sections, pilot-to-prod page, and rebrand integration (#29) * fix(website): add track shake animation to ProblemSection stall phase * fix(website): ProblemSection quality fixes — timer cleanup, unique SVG ID, aria-hidden, correct import - Store setTimeout IDs and clear them on unmount (prevents state updates on unmounted component) - Use useId() to generate unique hatchId per instance (prevents SVG pattern id collision) - Add role=progressbar + aria-valuenow to track container for screen readers - Add aria-hidden=true to decorative animated elements (pins, labels, badge, counter) - Fix import: use local lib/design-tokens instead of unresolved @cacheplane/design-tokens - Add invariant comment for done-timeout vs counter-duration coupling * feat: add FullStackSection with animated stack diagram and roadmap strip * feat: add ChatFeaturesSection with 4 interactive chat scenarios * feat: add FairComparisonSection comparison table * feat: wire ProblemSection, FullStackSection, ChatFeaturesSection, FairComparisonSection into landing page - Insert ProblemSection + FullStackSection + ChatFeaturesSection after StatsStrip - Insert FairComparisonSection after DeepAgentsShowcase - Add two ambient gradient blobs for extended page height - Task 5 (FeatureStrip copy): no-op — the problematic 'no established pattern' copy was not present in this branch * chore: add puppeteer devDependency and generate-whitepaper script * feat: add whitepaper signup API route with NDJSON persistence * feat: add whitepaper generation script * feat: add WhitePaperSection with free download and optional lead-gen form * feat: add WhitePaperSection to landing page; remove useStream parity copy from FeatureStrip * fix(whitepaper): add JetBrains Mono to Google Fonts URL and regenerate preview Fixes missing code font in whitepaper output. Regenerates whitepaper-preview.html with correct 'EB Garamond' and 'JetBrains Mono' font references throughout. * feat: add PilotHero component and /pilot-to-prod page skeleton * fix: PilotHero responsive padding, eyebrow style conflict, page metadata * feat: add WhatIsIncluded 3-column component for pilot-to-prod page * feat: add HowItWorks 3-phase timeline for pilot-to-prod page * feat: add PricingSignal pricing callout for pilot-to-prod page * feat: add WhitePaperGate 5-field lead gen form for pilot-to-prod page * fix: change role=alert to role=status to match aria-live=polite in WhitePaperGate * feat: add PilotFooterCTA and wire complete pilot-to-prod page * fix: use tokens.colors.accent in PilotFooterCTA, add aria-hidden to page blobs * feat: add Pilot to Prod nav link and restructure homepage (remove FeatureStrip/CockpitCTA/CodeBlock, add PilotProgram CTA) * fix: correct design-tokens import path in pilot-to-prod page (3 levels up) * fix: apply full review findings — messaging, mobile, UX, and RiskRemoval section - Remove useStream() parity messaging from HeroTwoCol, WhatIsIncluded, StatsStrip - Fix PricingSignal: remove ambiguous '/year', clarify as fixed fee + pilot included - Add PricingSignal mobile padding reduction via media query - Fix ProblemSection stat grid to collapse on mobile (auto-fit minmax) - Add RiskRemoval section to pilot-to-prod page (between PricingSignal and WhitePaperGate) - Fix Nav Examples link: external=true, target=_blank, rel=noopener noreferrer - Fix WhitePaperGate: role field sent in message body, not merged into company string - Fix PilotFooterCTA: replace broken whileHover borderColor with CSS class hover - Fix PilotHero: remove opacity from initial animations (prevents blank hero flash) - Increase PilotHero CTA padding to meet 44px touch target * fix: remove remaining useStream parity messaging from layout, Footer, and ValueProps * fix: second review pass — docs messaging, title, broken link, a11y labels - introduction.mdx: remove parity/useStream opening line, use Signal-native positioning - AGENTS.md.template + CLAUDE.md.template: update tagline to Signal-native - layout.tsx: update <title> from LangChain to LangGraph - Footer.tsx: fix /api-reference → /docs/api/stream-resource (was 404) - PilotHero.tsx: add aria-hidden to decorative gradient blobs - WhitePaperSection.tsx: add sr-only labels + aria-label to name/email inputs - LeadForm.tsx (pricing): add sr-only labels + aria-label to all four form inputs * feat: add whitepaper.pdf to public directory Generated from whitepaper-preview.html via Puppeteer. All 6 chapters present (Streaming State Management, Thread Persistence, Tool-Call Rendering, Human Approval Flows, Generative UI, Deterministic Testing). Fixes dead 'Download the Guide' CTAs on pilot-to-prod and homepage. * feat: citation badges on stats, pricing reframe to app deployment license Citation badges: - New CitationBadge component — click-to-open popover with source, stat, note, and link - 66% stat → Stack Overflow Developer Survey 2025 - 31% stat → ISG AI Adoption Reports - 75% stat → Stack Overflow Developer Survey 2025 - Keyboard (Escape) and outside-click dismissal, ARIA dialog role Pricing reframe (app deployment license): - Remove ALL refund/money-back/guarantee language site-wide - PilotHero: trust line → "App deployment license · $20,000 · 3-month co-pilot engagement" - PilotHero: subheadline removes "guaranteed outcome" - WhatIsIncluded: card 3 renamed from "Production Guarantee" → "App Deployment License" - HowItWorks: phase 3 removes "full refund" language, deliverable → "Production deployment" - PricingSignal: subtitle + features list updated to license/co-pilot framing - RiskRemoval: section reframed from guarantee → "What's included in the license" Replaces money-back card with "We work alongside your team" card - PilotFooterCTA: fine print updated - pilot-to-prod/page.tsx: meta description updated * feat: subtler citation badge + citations on all 77% claims CitationBadge: - Reduced to 13px, transparent background, faint border (rgba 0.2) - Text color rgba(0,64,144,0.35) at rest — nearly invisible until hovered - No fill on idle state, border-only approach New citation placements: - PilotHero subheadline: 77% → McKinsey State of AI 2024 - PilotFooterCTA body copy: 77% → McKinsey State of AI 2024 - HomePilotCTA (new component): extracts inline pilot CTA from page.tsx so it can be a client component with CitationBadge on the 77% claim - page.tsx: replaces inline section with <HomePilotCTA /> * docs: add FullStackSection redesign spec (EM/CTO layer narrative + Gen UI bug fix) * feat(website): redesign FullStackSection for EM/CTO audience * docs: apply Angular Stream Resource rebrand to narrative components * chore: sync package-lock.json after merge * fix(website): update e2e test for new landing page structure --------- * fix(chat): fix runtime errors + ViewEncapsulation breaking theme (#30) * fix(stream-resource): fix 3 runtime errors in streaming chat flow 1. Guard Object.keys(v) against null/undefined in values$ subscriber (stream-resource.fn.ts:94) — crashed when values event had no data 2. Handle plain JSON messages from SSE (not hydrated BaseMessage instances) in getMessageType() — _getType() is a class method not available on plain objects; fall back to reading the `type` property 3. Fix event data extraction in processEvent — normalizeSdkEvent spreads data into the event object, so event['values'] was always undefined; use extractEventData() to read from event['data'] instead. Also sync messages$ from values events and merge messages/partial updates by id to preserve the full message history including human messages. * fix(chat): fix ViewEncapsulation breaking all CSS theme variables ViewEncapsulation.None caused :host selectors in CHAT_THEME_STYLES to not match anything (no shadow DOM = :host doesn't apply). All 40+ CSS custom properties were empty, breaking the entire design. Fix: remove ViewEncapsulation.None from ChatComponent and ChatDebugComponent (default Emulated encapsulation processes :host correctly). Prefix markdown styles with ::ng-deep for innerHTML content penetration. * fix(chat): replace [innerHTML] icon bindings with inline SVG (sanitizer fix) * fix(chat): center input text, remove Assistant label, ChatGPT pattern - Input: items-end → items-center for vertical centering of single-line text - Input: inline SVG for send button (replaces [innerHTML] which Angular sanitizes) - AI messages: remove "Assistant" label, use avatar inline with content (ChatGPT pattern) - Typing indicator: match new AI message layout (avatar + dots, no label) * fix(stream-resource): handle both SDK and mock event formats in extractEventData * feat(cockpit): complete sidebar implementations for all 14 capability examples (#31) * fix(stream-resource): fix 3 runtime errors in streaming chat flow 1. Guard Object.keys(v) against null/undefined in values$ subscriber (stream-resource.fn.ts:94) — crashed when values event had no data 2. Handle plain JSON messages from SSE (not hydrated BaseMessage instances) in getMessageType() — _getType() is a class method not available on plain objects; fall back to reading the `type` property 3. Fix event data extraction in processEvent — normalizeSdkEvent spreads data into the event object, so event['values'] was always undefined; use extractEventData() to read from event['data'] instead. Also sync messages$ from values events and merge messages/partial updates by id to preserve the full message history including human messages. * fix(stream-resource): handle both SDK and mock event formats in extractEventData * docs(cockpit): add cockpit examples validation implementation plan * feat(cockpit): add thread picker sidebar to persistence example * feat(cockpit): add checkpoint timeline sidebar to time-travel example * feat(cockpit): add step progress sidebar to durable-execution example * feat(cockpit): add plan checklist sidebar to planning example * feat(cockpit): add skill invocations sidebar to skills example * feat(cockpit): add delegation tracker sidebar to subagents example Derive delegations from stream.messages() by finding tool_calls in AI messages and matching them with tool result messages. Each delegation shows a status dot (green=complete, amber=running, red=error), agent name, and status text. * feat(cockpit): add file operations sidebar to filesystem example * feat(cockpit): add execution output sidebar to sandboxes example * feat(cockpit): add learned facts sidebar to memory example Derive memory entries from stream.value() by checking for agent_memory or memory dict fields in graph state. Sidebar displays each fact as a bold key with muted value text, plus a count in the header. * fix(website): replace unsourced stats with verified Gartner and Stack Overflow citations - Replace fabricated 77% McKinsey stat with Gartner "50% of GenAI projects abandoned after POC" (Jan 2026) across ProblemSection, PilotHero, HomePilotCTA, and PilotFooterCTA - Replace stale ISG 31% stat with same Gartner citation in ProblemSection - Update progress bar animation to stall at 50% instead of 77% - Update FairComparisonSection to reference @langchain/langgraph-sdk explicitly in column header and subtitle - All three stat cards now cite verified sources: Stack Overflow 2025 Developer Survey (66%, 75%) and Gartner GenAI Project Failure 2026 (50%) * fix(website): replace unsourced stats with verified Gartner and Stack Overflow citations - Replace fabricated 77% McKinsey stat with Gartner "50% of GenAI projects abandoned after POC" (Jan 2026) across ProblemSection, PilotHero, HomePilotCTA, and PilotFooterCTA - Replace stale ISG 31% stat with same Gartner citation in ProblemSection - Update progress bar animation to stall at 50% instead of 77% - Update FairComparisonSection to reference @langchain/langgraph-sdk explicitly in column header and subtitle - All three stat cards now cite verified sources: Stack Overflow 2025 Developer Survey (66%, 75%) and Gartner GenAI Project Failure 2026 (50%) * fix(stream-resource): persist thread ID across messages + smooth scroll (#32) Two critical fixes: 1. Thread persistence: The bridge's onThreadId callback was not connected to currentThreadId tracking. Each submit() created a brand new thread, losing all conversation history. Fix: wrap the transport's onThreadId to update currentThreadId before calling the consumer's callback. 2. Smooth scroll: Replace setTimeout + scrollTop assignment with requestAnimationFrame + scrollTo({behavior:'smooth'}). Only auto-scrolls when user is near bottom (<150px), so reading earlier messages isn't interrupted by new content. * fix(website): replace unsourced stats with verified Gartner citations (#33) * feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, a11y (#27) * docs(chat): add ship-readiness polish implementation plan Addresses all 19 audit issues: theme consolidation, Tailwind conversion, auto-scroll, textarea auto-expand, markdown rendering, empty state, responsive sidebar, SVG icons, ARIA, and API cleanup. * feat(chat): consolidate theme into shared TS module, add icons + markdown utils * feat(chat): convert ChatComponent to Tailwind, add auto-scroll + empty state + responsive sidebar - Replace 80+ lines of inlined CSS vars with CHAT_THEME_STYLES import - Add CHAT_MARKDOWN_STYLES + renderMarkdown for AI message rendering - Convert all inline style="" attributes to Tailwind utility classes - Add auto-scroll via viewChild + effect tracking message count - Add empty state when no messages and not loading - Make thread sidebar responsive with hidden md:flex + mobile toggle - Add ARIA attributes: role=log, aria-live=polite, role=navigation - Use ViewEncapsulation.None for markdown styles * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars * feat(chat): clean up public API, add marked peer dep, verify build Remove legacy cp-chat/cp-chat-input/cp-chat-message components and migrate all cockpit examples to the new ChatComponent composition. Export shared styles, icons, and markdown utilities from public API. Update ChatConfig with renderRegistry, avatarLabel, assistantName. Add marked as optional peer dep and fix dynamic import for library build. Add @source directive to cockpit styles for Tailwind scanning. --------- * Rebrand to Angular Stream Resource (#28) * docs: add rebrand design spec for Angular Stream Resource * docs: add implementation plan for Angular Stream Resource rebrand * docs: rebrand StreamResource → Angular Stream Resource in README and COMMERCIAL Update product name in prose/marketing contexts: README alt text and license section, COMMERCIAL.md license header. * docs: rebrand StreamResource → Angular Stream Resource in website shared components Update product name in layout metadata title, Nav logo link text, Footer brand name, and Footer copyright line. * docs: rebrand StreamResource → Angular Stream Resource in landing and llms.txt Update product name in ProblemSection badge text, GenerativeUIFrame aria-label, and llms.txt route title and description line. * docs: rebrand StreamResource → Angular Stream Resource in documentation files Update product name in headings and prose across limitations.md and four design specs (titles, overview sentences, section headings). * docs: rebrand stream-resource → Angular Stream Resource in LLM context files Update product name in the H1 title of AGENTS.md and CLAUDE.md. * docs: rebrand remaining spec and plan references to Angular Stream Resource * docs: fix remaining brand references missed in initial pass * feat(website): add narrative sections, pilot-to-prod page, and rebrand integration (#29) * fix(website): add track shake animation to ProblemSection stall phase * fix(website): ProblemSection quality fixes — timer cleanup, unique SVG ID, aria-hidden, correct import - Store setTimeout IDs and clear them on unmount (prevents state updates on unmounted component) - Use useId() to generate unique hatchId per instance (prevents SVG pattern id collision) - Add…
3b356c1 to
fa43671
Compare
Register calculator-result and word-count-result view components with the chat widget to enable generative UI rendering of skill invocations.
Register an approval-card view with the chat component so the LangGraph interrupts demo can render a generative UI card with Approve, Edit, and Cancel action buttons.
Register file-preview view component with the chat widget to enable generative UI rendering of file operation results.
…example Register a step-pipeline view with the chat component so the LangGraph durable-execution demo can render a horizontal pipeline with status indicators (complete/active/pending) as generative UI.
Register code-execution view component with the chat widget to enable generative UI rendering of code execution results with stdout/stderr.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
blove
added a commit
that referenced
this pull request
Apr 7, 2026
5 tasks
blove
added a commit
that referenced
this pull request
Apr 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Generative UI Views System
views(),withViews(),withoutViews()— functional API for composable view registriestoRenderRegistry()— bridge to low-level AngularRegistryprovideViews()+VIEW_REGISTRY— DI provider for global/route-level views<chat [views]="ui" [store]="uiStore" />detects specs in messages, renders inline via<render-spec>Example View Components (5 examples)
Documentation
views()API reference page at/docs/render/api/viewsTest plan