Skip to content

Commit 665c365

Browse files
bloveclaudeBrian Love
authored
fix: redesign logo strip with larger ghost-style logos (#58)
* 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 --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * 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 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * 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: 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: 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 * 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 (#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(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: 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(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(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): 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): 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 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 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. * 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): production review pass — 22 fixes across 14 examples * fix(cockpit): restore streaming and deployment-runtime to use ChatComponent (reverted by PR #19) * 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): 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): restore fileReplacements for dev environment in all 13 Angular examples Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(cockpit): use full URLs in dev environments (SDK requires absolute URLs) * 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 * 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(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(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. * 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 * 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. --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 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. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(chat): consolidate theme into shared TS module, add icons + markdown utils Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 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 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 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. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * 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 * 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-du…
1 parent 9d70c0c commit 665c365

12 files changed

Lines changed: 266 additions & 0 deletions

File tree

apps/website/src/components/landing/SocialProof.tsx

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
import { motion } from 'framer-motion';
33
import { tokens } from '../../../lib/design-tokens';
44

5+
<<<<<<< HEAD
6+
=======
57
/**
68
* Companies displayed as social proof — sourced from the LangChain ecosystem.
79
* These represent the types of companies building with LangChain/LangGraph,
810
* the same ecosystem Angular Agent Framework serves.
911
*/
12+
>>>>>>> origin/main
1013
const COMPANIES = [
1114
'Klarna',
1215
'Elastic',
@@ -19,15 +22,23 @@ const COMPANIES = [
1922
'Cisco',
2023
'Workday',
2124
'ServiceNow',
25+
<<<<<<< HEAD
26+
'Monday',
27+
=======
2228
'Monday.com',
29+
>>>>>>> origin/main
2330
];
2431

2532
/** Duplicate for seamless infinite scroll */
2633
const SCROLL_ITEMS = [...COMPANIES, ...COMPANIES];
2734

2835
export function SocialProof() {
2936
return (
37+
<<<<<<< HEAD
38+
<section style={{ padding: '36px 0', overflow: 'hidden' }}>
39+
=======
3040
<section style={{ padding: '24px 0', overflow: 'hidden' }}>
41+
>>>>>>> origin/main
3142
<motion.div
3243
initial={{ opacity: 0 }}
3344
whileInView={{ opacity: 1 }}
@@ -38,27 +49,54 @@ export function SocialProof() {
3849
<p style={{
3950
textAlign: 'center',
4051
fontFamily: 'var(--font-mono,"JetBrains Mono",monospace)',
52+
<<<<<<< HEAD
53+
fontSize: '0.62rem',
54+
=======
4155
fontSize: '0.6rem',
56+
>>>>>>> origin/main
4257
textTransform: 'uppercase',
4358
letterSpacing: '0.12em',
4459
fontWeight: 700,
4560
color: tokens.colors.textMuted,
61+
<<<<<<< HEAD
62+
marginBottom: 22,
63+
=======
4664
marginBottom: 16,
65+
>>>>>>> origin/main
4766
}}>
4867
Built for teams shipping with LangChain
4968
</p>
5069

5170
{/* Scrolling logo strip */}
5271
<div style={{
5372
position: 'relative',
73+
<<<<<<< HEAD
74+
maxWidth: 1060,
75+
margin: '0 auto',
76+
borderRadius: 20,
77+
=======
5478
maxWidth: 900,
5579
margin: '0 auto',
5680
borderRadius: 16,
81+
>>>>>>> origin/main
5782
background: tokens.glass.bg,
5883
backdropFilter: `blur(${tokens.glass.blur})`,
5984
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
6085
border: `1px solid ${tokens.glass.border}`,
6186
overflow: 'hidden',
87+
<<<<<<< HEAD
88+
padding: '32px 0',
89+
}}>
90+
{/* Fade edges */}
91+
<div style={{
92+
position: 'absolute', left: 0, top: 0, bottom: 0, width: 100, zIndex: 1,
93+
background: 'linear-gradient(to right, rgba(248,249,252,0.9), transparent)',
94+
pointerEvents: 'none',
95+
}} />
96+
<div style={{
97+
position: 'absolute', right: 0, top: 0, bottom: 0, width: 100, zIndex: 1,
98+
background: 'linear-gradient(to left, rgba(248,249,252,0.9), transparent)',
99+
=======
62100
padding: '16px 0',
63101
}}>
64102
{/* Fade edges */}
@@ -70,6 +108,7 @@ export function SocialProof() {
70108
<div style={{
71109
position: 'absolute', right: 0, top: 0, bottom: 0, width: 60, zIndex: 1,
72110
background: 'linear-gradient(to left, rgba(244,240,255,0.95), transparent)',
111+
>>>>>>> origin/main
73112
pointerEvents: 'none',
74113
}} />
75114

@@ -79,14 +118,33 @@ export function SocialProof() {
79118
style={{
80119
display: 'flex',
81120
alignItems: 'center',
121+
<<<<<<< HEAD
122+
gap: 72,
123+
width: 'max-content',
124+
paddingLeft: 48,
125+
paddingRight: 48,
126+
=======
82127
gap: 48,
83128
width: 'max-content',
129+
>>>>>>> origin/main
84130
}}
85131
>
86132
{SCROLL_ITEMS.map((company, i) => (
87133
<span
88134
key={`${company}-${i}`}
89135
style={{
136+
<<<<<<< HEAD
137+
fontFamily: 'var(--font-inter, Inter, system-ui, sans-serif)',
138+
fontSize: 'clamp(20px, 1.6vw, 26px)',
139+
fontWeight: 800,
140+
color: tokens.colors.textPrimary,
141+
opacity: 0.18,
142+
whiteSpace: 'nowrap',
143+
letterSpacing: '-0.02em',
144+
userSelect: 'none',
145+
lineHeight: 1,
146+
padding: '4px 0',
147+
=======
90148
fontFamily: 'var(--font-garamond,"EB Garamond",Georgia,serif)',
91149
fontSize: 'clamp(14px, 1.1vw, 17px)',
92150
fontWeight: 700,
@@ -95,6 +153,7 @@ export function SocialProof() {
95153
opacity: 0.6,
96154
letterSpacing: '0.02em',
97155
userSelect: 'none',
156+
>>>>>>> origin/main
98157
}}
99158
>
100159
{company}
@@ -110,7 +169,11 @@ export function SocialProof() {
110169
100% { transform: translateX(-50%); }
111170
}
112171
.logo-scroll-track {
172+
<<<<<<< HEAD
173+
animation: logo-scroll 35s linear infinite;
174+
=======
113175
animation: logo-scroll 30s linear infinite;
176+
>>>>>>> origin/main
114177
}
115178
.logo-scroll-track:hover {
116179
animation-play-state: paused;

cockpit/deep-agents/filesystem/angular/src/app/filesystem.component.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { Component, computed } from '@angular/core';
2+
<<<<<<< HEAD
3+
import { ChatComponent } from '@cacheplane/chat';
4+
import { agent } from '@cacheplane/angular';
5+
import { environment } from '../environments/environment';
6+
=======
27
import { ChatComponent, views } from '@cacheplane/chat';
38
import { signalStateStore } from '@cacheplane/render';
49
import { agent } from '@cacheplane/angular';
510
import { environment } from '../environments/environment';
611
import { FilePreviewComponent } from './views/file-preview.component';
12+
>>>>>>> origin/main
713

814
/**
915
* Represents a file operation extracted from agent tool calls.
@@ -32,7 +38,11 @@ interface FileOperation {
3238
imports: [ChatComponent],
3339
template: `
3440
<div class="flex h-screen">
41+
<<<<<<< HEAD
42+
<chat [ref]="stream" class="flex-1 min-w-0" />
43+
=======
3544
<chat [ref]="stream" [views]="ui" [store]="uiStore" class="flex-1 min-w-0" />
45+
>>>>>>> origin/main
3646
<aside class="w-72 shrink-0 border-l overflow-y-auto p-4 space-y-2"
3747
style="border-color: var(--chat-border, #333); background: var(--chat-bg, #171717); color: var(--chat-text, #e0e0e0);">
3848
<h3 class="text-xs font-semibold uppercase tracking-wide"
@@ -72,12 +82,15 @@ export class FilesystemComponent {
7282
assistantId: environment.streamingAssistantId,
7383
});
7484

85+
<<<<<<< HEAD
86+
=======
7587
readonly ui = views({
7688
'file-preview': FilePreviewComponent,
7789
});
7890

7991
readonly uiStore = signalStateStore({});
8092

93+
>>>>>>> origin/main
8194
/**
8295
* Reactive list of file operations derived from the message history.
8396
*

cockpit/deep-agents/planning/angular/src/app/planning.component.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
<<<<<<< HEAD
2+
import { Component, computed } from '@angular/core';
3+
import { ChatComponent } from '@cacheplane/chat';
4+
import { agent } from '@cacheplane/angular';
5+
import { environment } from '../environments/environment';
6+
7+
/**
8+
* Represents a single step in an agent-generated plan.
9+
*/
10+
interface PlanStep {
11+
title: string;
12+
status: 'pending' | 'in_progress' | 'complete';
13+
}
14+
15+
/**
16+
* PlanningComponent demonstrates agent task decomposition.
17+
*
18+
* The agent receives a complex task, breaks it into ordered steps,
19+
* and executes them sequentially. The sidebar displays a live checklist
20+
* of plan steps derived from the `plan` array in the graph state.
21+
*
22+
* Key integration points:
23+
* - `stream.value()` exposes the full graph state, including the `plan` array
24+
* - `planSteps` is derived from `stream.value()` for reactive sidebar rendering
25+
* - Step status icons update in real time as the agent progresses
26+
*/
27+
=======
128
import { Component } from '@angular/core';
229
import { ChatComponent, views } from '@cacheplane/chat';
330
import { signalStateStore } from '@cacheplane/render';
@@ -6,10 +33,72 @@ import { environment } from '../environments/environment';
633
import { PlanChecklistComponent } from './views/plan-checklist.component';
734
import { CheckboxRowComponent } from './views/checkbox-row.component';
835

36+
>>>>>>> origin/main
937
@Component({
1038
selector: 'app-planning',
1139
standalone: true,
1240
imports: [ChatComponent],
41+
<<<<<<< HEAD
42+
template: `
43+
<div class="flex h-screen">
44+
<chat [ref]="stream" class="flex-1 min-w-0" />
45+
<aside class="w-72 shrink-0 border-l overflow-y-auto p-4 space-y-2"
46+
style="border-color: var(--chat-border, #333); background: var(--chat-bg, #171717); color: var(--chat-text, #e0e0e0);">
47+
<h3 class="text-xs font-semibold uppercase tracking-wide"
48+
style="color: var(--chat-text-muted, #777);">Plan</h3>
49+
@if (planSteps().length === 0) {
50+
<p class="text-sm italic" style="color: var(--chat-text-muted, #777);">No plan yet</p>
51+
}
52+
@for (step of planSteps(); track step.title) {
53+
<div class="flex items-start gap-2 rounded-md px-2 py-1.5 text-sm"
54+
style="background: var(--chat-bg-hover, #222);">
55+
<span class="mt-0.5 shrink-0 text-base leading-none">
56+
@if (step.status === 'complete') {
57+
<span style="color: #22c55e;">&#10003;</span>
58+
} @else if (step.status === 'in_progress') {
59+
<span class="inline-block animate-spin" style="color: var(--chat-text-muted, #777);">&#9696;</span>
60+
} @else {
61+
<span style="color: var(--chat-border-light, #444);">&#9675;</span>
62+
}
63+
</span>
64+
<span style="color: var(--chat-text, #e0e0e0);">{{ step.title }}</span>
65+
</div>
66+
}
67+
</aside>
68+
</div>
69+
`,
70+
})
71+
export class PlanningComponent {
72+
/**
73+
* The streaming resource connected to the planning graph.
74+
*
75+
* The graph returns a `plan` array alongside messages in its state.
76+
* Each plan entry has a `title` and `status` that drive the sidebar checklist.
77+
*/
78+
protected readonly stream = agent({
79+
apiUrl: environment.langGraphApiUrl,
80+
assistantId: environment.streamingAssistantId,
81+
});
82+
83+
/**
84+
* Reactive list of plan steps derived from the graph state.
85+
*
86+
* The Python graph stores the plan as `state.plan` — an array of objects
87+
* with `title` and `status` fields. This signal re-computes whenever
88+
* the stream state changes.
89+
*/
90+
protected readonly planSteps = computed<PlanStep[]>(() => {
91+
const val = this.stream.value() as Record<string, unknown>;
92+
const plan = val?.['plan'];
93+
if (!Array.isArray(plan)) return [];
94+
return plan.map((step: Record<string, unknown>) => ({
95+
title: String(step['title'] ?? ''),
96+
status: (['pending', 'in_progress', 'complete'].includes(step['status'] as string)
97+
? step['status']
98+
: 'pending') as PlanStep['status'],
99+
}));
100+
});
101+
=======
13102
template: `<chat [ref]="stream" [views]="ui" [store]="uiStore" class="block h-screen" />`,
14103
})
15104
export class PlanningComponent {
@@ -24,4 +113,5 @@ export class PlanningComponent {
24113
});
25114

26115
readonly uiStore = signalStateStore({});
116+
>>>>>>> origin/main
27117
}

cockpit/deep-agents/planning/angular/src/environments/environment.development.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ export const environment = {
88
production: false,
99
langGraphApiUrl: 'http://localhost:4310/api',
1010
streamingAssistantId: 'planning',
11+
<<<<<<< HEAD
12+
=======
1113
planningAssistantId: 'planning',
14+
>>>>>>> origin/main
1215
};

cockpit/deep-agents/planning/angular/src/environments/environment.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ export const environment = {
88
production: true,
99
langGraphApiUrl: '/api',
1010
streamingAssistantId: 'planning',
11+
<<<<<<< HEAD
12+
=======
1113
planningAssistantId: 'planning',
14+
>>>>>>> origin/main
1215
};

cockpit/deep-agents/sandboxes/angular/src/app/sandboxes.component.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { Component, computed } from '@angular/core';
2+
<<<<<<< HEAD
3+
import { ChatComponent } from '@cacheplane/chat';
4+
import { agent } from '@cacheplane/angular';
5+
import { environment } from '../environments/environment';
6+
=======
27
import { ChatComponent, views } from '@cacheplane/chat';
38
import { signalStateStore } from '@cacheplane/render';
49
import { agent } from '@cacheplane/angular';
510
import { environment } from '../environments/environment';
611
import { CodeExecutionComponent } from './views/code-execution.component';
12+
>>>>>>> origin/main
713

814
/**
915
* Represents a parsed code execution: the code that was run and its output.
@@ -30,7 +36,11 @@ interface CodeExecution {
3036
imports: [ChatComponent],
3137
template: `
3238
<div class="flex h-screen">
39+
<<<<<<< HEAD
40+
<chat [ref]="stream" class="flex-1 min-w-0" />
41+
=======
3342
<chat [ref]="stream" [views]="ui" [store]="uiStore" class="flex-1 min-w-0" />
43+
>>>>>>> origin/main
3444
<aside class="w-80 shrink-0 border-l overflow-y-auto p-4 space-y-3"
3545
style="border-color: var(--chat-border, #333); background: var(--chat-bg, #171717); color: var(--chat-text, #e0e0e0);">
3646
<h3 class="text-xs font-semibold uppercase tracking-wide"
@@ -66,12 +76,15 @@ export class SandboxesComponent {
6676
assistantId: environment.streamingAssistantId,
6777
});
6878

79+
<<<<<<< HEAD
80+
=======
6981
readonly ui = views({
7082
'code-execution': CodeExecutionComponent,
7183
});
7284

7385
readonly uiStore = signalStateStore({});
7486

87+
>>>>>>> origin/main
7588
/**
7689
* Derived signal: extracts code executions from the message stream.
7790
*

0 commit comments

Comments
 (0)