Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
9341e16
feat(cockpit): add render/spec-rendering capability
blove Apr 8, 2026
daebd9c
feat(cockpit): add render/element-rendering capability
blove Apr 8, 2026
c63b6ad
feat(cockpit): add render/state-management capability
blove Apr 8, 2026
ce594a3
feat(cockpit): add render/registry capability
blove Apr 8, 2026
d0717de
feat(cockpit): add render/repeat-loops capability
blove Apr 8, 2026
a9eea54
feat(cockpit): add render/computed-functions capability
blove Apr 8, 2026
df72c86
feat(cockpit): add chat/messages capability
blove Apr 8, 2026
5f7c462
feat(cockpit): add chat/input capability
blove Apr 8, 2026
23109f2
feat(cockpit): add chat/interrupts capability
blove Apr 8, 2026
3f24731
feat(cockpit): add chat/tool-calls capability
blove Apr 8, 2026
0a20bf1
feat(cockpit): add chat/subagents capability
blove Apr 8, 2026
1de2146
feat(cockpit): add chat/threads capability
blove Apr 8, 2026
653494d
feat(cockpit): add chat/timeline capability
blove Apr 8, 2026
95137d9
feat(cockpit): add chat/generative-ui capability
blove Apr 8, 2026
a522ece
feat(cockpit): add chat/debug capability
blove Apr 8, 2026
fb57bcb
feat(cockpit): add chat/theming capability
blove Apr 8, 2026
409b03c
test(cockpit): add render and chat matrix tests
blove Apr 8, 2026
3a1c24a
test(cockpit): add render and chat footprint tests
blove Apr 8, 2026
d9299e7
docs(cockpit): add render product docs pages
blove Apr 8, 2026
753a556
docs(cockpit): add chat product docs pages
blove Apr 8, 2026
4567099
fix(cockpit): rewrite render examples as standalone demos without cha…
blove Apr 8, 2026
ca2e6e7
fix(cockpit): update chat examples to agent() API from @cacheplane/an…
blove Apr 8, 2026
e90dc45
feat(cockpit): add render and chat products to manifest and capabilit…
blove Apr 8, 2026
dd242a2
feat(cockpit): register render and chat modules in route resolution a…
blove Apr 8, 2026
85ffb2f
docs(cockpit): add cross-references from existing capabilities to chat
blove Apr 8, 2026
e0cbefb
chore(cockpit): add package.json files for Nx project discovery
blove Apr 8, 2026
1df92bd
fix(cockpit): use CockpitProduct type in route handler for render/cha…
blove Apr 8, 2026
adceef8
docs: add streaming simulation design spec for render examples
blove Apr 8, 2026
f661c40
docs: add streaming simulation implementation plan
blove Apr 8, 2026
1005caa
feat(cockpit): add StreamingSimulator and StreamingTimelineComponent
blove Apr 9, 2026
0f10739
fix(cockpit): validate setSpeed input in StreamingSimulator
blove Apr 9, 2026
32ca97b
feat(cockpit): rewrite spec-rendering with streaming simulation
blove Apr 9, 2026
173f975
fix(cockpit): add protected modifier and clean up stale store in spec…
blove Apr 9, 2026
d5f9ea9
feat(cockpit): rewrite element-rendering with streaming simulation
blove Apr 9, 2026
6d8377c
feat(cockpit): rewrite state-management with streaming simulation
blove Apr 9, 2026
5cf5c9d
feat(cockpit): rewrite registry with streaming simulation
blove Apr 9, 2026
6d92e46
feat(cockpit): rewrite repeat-loops with streaming simulation
blove Apr 9, 2026
eab6bff
feat(cockpit): rewrite computed-functions with streaming simulation
blove Apr 9, 2026
dfe7e80
test(cockpit): update render example e2e tests for streaming simulation
blove Apr 9, 2026
f125296
fix(cockpit): add bindings/emit/loading inputs to all render demo com…
blove Apr 9, 2026
6600018
fix(cockpit): use h-full instead of h-screen for iframe-compatible he…
blove Apr 9, 2026
3df3ed8
fix(cockpit): make shell full viewport height with scrollable sidebar
blove Apr 9, 2026
8021247
fix(cockpit): render children in DemoHeadingComponent across all rend…
blove Apr 9, 2026
b4b5745
feat(cockpit): add skeleton shimmer effect to all render demo components
blove Apr 9, 2026
ad83863
feat(cockpit): add interactive controls panels to element-rendering, …
blove Apr 9, 2026
a8eefb8
fix(cockpit): move controls below JSON pane and add auto-scroll to st…
blove Apr 9, 2026
40440f0
fix(cockpit): fix visibility toggle — use $state condition and Angula…
blove Apr 9, 2026
d4db3d5
fix(cockpit): review fixes — sandbox eval, remove unused import, resp…
blove Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 19 additions & 1 deletion apps/cockpit/scripts/capability-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/
export interface Capability {
id: string;
product: 'langgraph' | 'deep-agents';
product: 'langgraph' | 'deep-agents' | 'render' | 'chat';
topic: string;
angularProject: string;
port: number;
Expand All @@ -27,6 +27,24 @@ export const capabilities: readonly Capability[] = [
{ id: 'da-memory', product: 'deep-agents', topic: 'memory', angularProject: 'cockpit-deep-agents-memory-angular', port: 4313, pythonDir: 'cockpit/deep-agents/memory/python', graphName: 'da-memory' },
{ id: 'skills', product: 'deep-agents', topic: 'skills', angularProject: 'cockpit-deep-agents-skills-angular', port: 4314, pythonDir: 'cockpit/deep-agents/skills/python', graphName: 'skills' },
{ id: 'sandboxes', product: 'deep-agents', topic: 'sandboxes', angularProject: 'cockpit-deep-agents-sandboxes-angular', port: 4315, pythonDir: 'cockpit/deep-agents/sandboxes/python', graphName: 'sandboxes' },
// Render capabilities
{ id: 'spec-rendering', product: 'render', topic: 'spec-rendering', angularProject: 'cockpit-render-spec-rendering-angular', port: 4401, pythonDir: 'cockpit/render/spec-rendering/python', graphName: 'spec-rendering' },
{ id: 'element-rendering', product: 'render', topic: 'element-rendering', angularProject: 'cockpit-render-element-rendering-angular', port: 4402, pythonDir: 'cockpit/render/element-rendering/python', graphName: 'element-rendering' },
{ id: 'state-management', product: 'render', topic: 'state-management', angularProject: 'cockpit-render-state-management-angular', port: 4403, pythonDir: 'cockpit/render/state-management/python', graphName: 'state-management' },
{ id: 'r-registry', product: 'render', topic: 'registry', angularProject: 'cockpit-render-registry-angular', port: 4404, pythonDir: 'cockpit/render/registry/python', graphName: 'r-registry' },
{ id: 'repeat-loops', product: 'render', topic: 'repeat-loops', angularProject: 'cockpit-render-repeat-loops-angular', port: 4405, pythonDir: 'cockpit/render/repeat-loops/python', graphName: 'repeat-loops' },
{ id: 'computed-functions', product: 'render', topic: 'computed-functions', angularProject: 'cockpit-render-computed-functions-angular', port: 4406, pythonDir: 'cockpit/render/computed-functions/python', graphName: 'computed-functions' },
// Chat capabilities
{ id: 'c-messages', product: 'chat', topic: 'messages', angularProject: 'cockpit-chat-messages-angular', port: 4501, pythonDir: 'cockpit/chat/messages/python', graphName: 'c-messages' },
{ id: 'c-input', product: 'chat', topic: 'input', angularProject: 'cockpit-chat-input-angular', port: 4502, pythonDir: 'cockpit/chat/input/python', graphName: 'c-input' },
{ id: 'c-interrupts', product: 'chat', topic: 'interrupts', angularProject: 'cockpit-chat-interrupts-angular', port: 4503, pythonDir: 'cockpit/chat/interrupts/python', graphName: 'c-interrupts' },
{ id: 'c-tool-calls', product: 'chat', topic: 'tool-calls', angularProject: 'cockpit-chat-tool-calls-angular', port: 4504, pythonDir: 'cockpit/chat/tool-calls/python', graphName: 'c-tool-calls' },
{ id: 'c-subagents', product: 'chat', topic: 'subagents', angularProject: 'cockpit-chat-subagents-angular', port: 4505, pythonDir: 'cockpit/chat/subagents/python', graphName: 'c-subagents' },
{ id: 'c-threads', product: 'chat', topic: 'threads', angularProject: 'cockpit-chat-threads-angular', port: 4506, pythonDir: 'cockpit/chat/threads/python', graphName: 'c-threads' },
{ id: 'c-timeline', product: 'chat', topic: 'timeline', angularProject: 'cockpit-chat-timeline-angular', port: 4507, pythonDir: 'cockpit/chat/timeline/python', graphName: 'c-timeline' },
{ id: 'c-generative-ui', product: 'chat', topic: 'generative-ui', angularProject: 'cockpit-chat-generative-ui-angular', port: 4508, pythonDir: 'cockpit/chat/generative-ui/python', graphName: 'c-generative-ui' },
{ id: 'c-debug', product: 'chat', topic: 'debug', angularProject: 'cockpit-chat-debug-angular', port: 4509, pythonDir: 'cockpit/chat/debug/python', graphName: 'c-debug' },
{ id: 'c-theming', product: 'chat', topic: 'theming', angularProject: 'cockpit-chat-theming-angular', port: 4510, pythonDir: 'cockpit/chat/theming/python', graphName: 'c-theming' },
] as const;

export function findCapability(id: string): Capability | undefined {
Expand Down
6 changes: 3 additions & 3 deletions apps/cockpit/src/components/cockpit-shell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ export function CockpitShell({
return (
<main
aria-label="Cockpit shell"
className="grid md:grid-cols-[16rem_minmax(0,1fr)] min-h-screen"
className="grid md:grid-cols-[16rem_minmax(0,1fr)] h-screen overflow-hidden"
data-hydrated={isHydrated ? 'true' : 'false'}
>
{/* Desktop sidebar — hidden on mobile */}
<div className="hidden md:block">
<div className="hidden md:block overflow-y-auto">
<CockpitSidebar
navigationTree={navigationTree}
manifest={cockpitManifest}
Expand Down Expand Up @@ -94,7 +94,7 @@ export function CockpitShell({
</>
)}

<section className="grid grid-rows-[auto_1fr] gap-2 p-4 bg-[var(--ds-glass-bg)] backdrop-blur-[var(--ds-glass-blur)]">
<section className="grid grid-rows-[auto_1fr] gap-2 p-4 overflow-hidden bg-[var(--ds-glass-bg)] backdrop-blur-[var(--ds-glass-blur)]">
<header className="flex flex-col gap-2 md:flex-row md:items-center md:justify-between">
<div className="flex items-center gap-3">
<button
Expand Down
10 changes: 5 additions & 5 deletions apps/cockpit/src/lib/cockpit-page.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest, type CockpitProduct, type CockpitSection, type CockpitPageId, type CockpitLanguage } from '@cacheplane/cockpit-registry';
import {
buildNavigationTree,
getCapabilityPresentation,
Expand Down Expand Up @@ -27,11 +27,11 @@ const DEFAULT_COCKPIT_SLUG = [
export function getCockpitPageModel(slug: string[] = []): CockpitPageModel {
const resolvedEntry = resolveCockpitEntry({
manifest: cockpitManifest,
product: (slug[0] ?? DEFAULT_COCKPIT_SLUG[0]) as 'deep-agents' | 'langgraph',
section: (slug[1] ?? DEFAULT_COCKPIT_SLUG[1]) as 'getting-started' | 'core-capabilities',
product: (slug[0] ?? DEFAULT_COCKPIT_SLUG[0]) as CockpitProduct,
section: (slug[1] ?? DEFAULT_COCKPIT_SLUG[1]) as CockpitSection,
topic: slug[2] ?? DEFAULT_COCKPIT_SLUG[2],
page: (slug[3] ?? DEFAULT_COCKPIT_SLUG[3]) as 'overview' | 'build' | 'prompts' | 'code' | 'testing',
language: (slug[4] ?? DEFAULT_COCKPIT_SLUG[4]) as 'python' | 'typescript',
page: (slug[3] ?? DEFAULT_COCKPIT_SLUG[3]) as CockpitPageId,
language: (slug[4] ?? DEFAULT_COCKPIT_SLUG[4]) as CockpitLanguage,
});

return {
Expand Down
41 changes: 41 additions & 0 deletions apps/cockpit/src/lib/route-resolution.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,19 @@ describe('buildNavigationTree', () => {
it('groups manifest entries by product and section', () => {
const tree = buildNavigationTree(cockpitManifest);

expect(tree).toHaveLength(4);
expect(tree[0]).toMatchObject({
product: 'deep-agents',
});
expect(tree[1]).toMatchObject({
product: 'langgraph',
});
expect(tree[2]).toMatchObject({
product: 'render',
});
expect(tree[3]).toMatchObject({
product: 'chat',
});
});
});

Expand Down Expand Up @@ -125,6 +132,40 @@ describe('getCapabilityPresentation', () => {
});
});

it('presents render capabilities with module-backed metadata', () => {
const entry = resolveCockpitEntry({
manifest: cockpitManifest,
product: 'render',
section: 'core-capabilities',
topic: 'spec-rendering',
page: 'overview',
language: 'python',
});
const presentation = getCapabilityPresentation(entry);

expect(presentation).toMatchObject({
kind: 'capability',
docsPath: '/docs/render/core-capabilities/spec-rendering/overview/python',
});
});

it('presents chat capabilities with module-backed metadata', () => {
const entry = resolveCockpitEntry({
manifest: cockpitManifest,
product: 'chat',
section: 'core-capabilities',
topic: 'messages',
page: 'overview',
language: 'python',
});
const presentation = getCapabilityPresentation(entry);

expect(presentation).toMatchObject({
kind: 'capability',
docsPath: '/docs/chat/core-capabilities/messages/overview/python',
});
});

it('resolves module-backed metadata for every implemented capability topic', () => {
const capabilityEntries = cockpitManifest.filter(
(entry) => entry.entryKind === 'capability'
Expand Down
34 changes: 33 additions & 1 deletion apps/cockpit/src/lib/route-resolution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,22 @@ import { deepAgentsFilesystemPythonModule } from '../../../../cockpit/deep-agent
import { deepAgentsSubagentsPythonModule } from '../../../../cockpit/deep-agents/subagents/python/src/index';
import { deepAgentsSkillsPythonModule } from '../../../../cockpit/deep-agents/skills/python/src/index';
import { deepAgentsSandboxesPythonModule } from '../../../../cockpit/deep-agents/sandboxes/python/src/index';
import { renderSpecRenderingPythonModule } from '../../../../cockpit/render/spec-rendering/python/src/index';
import { renderElementRenderingPythonModule } from '../../../../cockpit/render/element-rendering/python/src/index';
import { renderStateManagementPythonModule } from '../../../../cockpit/render/state-management/python/src/index';
import { renderRegistryPythonModule } from '../../../../cockpit/render/registry/python/src/index';
import { renderRepeatLoopsPythonModule } from '../../../../cockpit/render/repeat-loops/python/src/index';
import { renderComputedFunctionsPythonModule } from '../../../../cockpit/render/computed-functions/python/src/index';
import { chatMessagesPythonModule } from '../../../../cockpit/chat/messages/python/src/index';
import { chatInputPythonModule } from '../../../../cockpit/chat/input/python/src/index';
import { chatInterruptsPythonModule } from '../../../../cockpit/chat/interrupts/python/src/index';
import { chatToolCallsPythonModule } from '../../../../cockpit/chat/tool-calls/python/src/index';
import { chatSubagentsPythonModule } from '../../../../cockpit/chat/subagents/python/src/index';
import { chatThreadsPythonModule } from '../../../../cockpit/chat/threads/python/src/index';
import { chatTimelinePythonModule } from '../../../../cockpit/chat/timeline/python/src/index';
import { chatGenerativeUiPythonModule } from '../../../../cockpit/chat/generative-ui/python/src/index';
import { chatDebugPythonModule } from '../../../../cockpit/chat/debug/python/src/index';
import { chatThemingPythonModule } from '../../../../cockpit/chat/theming/python/src/index';

export interface ResolveCockpitEntryOptions {
manifest: CockpitManifestEntry[];
Expand Down Expand Up @@ -70,6 +86,22 @@ const capabilityModules = [
deepAgentsSubagentsPythonModule,
deepAgentsSkillsPythonModule,
deepAgentsSandboxesPythonModule,
renderSpecRenderingPythonModule,
renderElementRenderingPythonModule,
renderStateManagementPythonModule,
renderRegistryPythonModule,
renderRepeatLoopsPythonModule,
renderComputedFunctionsPythonModule,
chatMessagesPythonModule,
chatInputPythonModule,
chatInterruptsPythonModule,
chatToolCallsPythonModule,
chatSubagentsPythonModule,
chatThreadsPythonModule,
chatTimelinePythonModule,
chatGenerativeUiPythonModule,
chatDebugPythonModule,
chatThemingPythonModule,
];

export const toCockpitPath = (entry: CockpitManifestEntry): string =>
Expand Down Expand Up @@ -135,7 +167,7 @@ export const resolveCockpitEntry = ({
export const buildNavigationTree = (
manifest: CockpitManifestEntry[]
): NavigationProduct[] => {
const products: CockpitManifestEntry['product'][] = ['deep-agents', 'langgraph'];
const products: CockpitManifestEntry['product'][] = ['deep-agents', 'langgraph', 'render', 'chat'];
const sections: CockpitManifestEntry['section'][] = [
'getting-started',
'core-capabilities',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Debug Workflows

Design debug workflows around event logging and inspector panels that surface stream events, state changes, and rendering decisions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Debug Code

Code examples for debug tools show how to enable event logging, attach inspector panels, and filter debug output by event type.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Debug Overview

Debug tools provide visibility into message flow, stream events, tool call execution, and component rendering during development.

Use this page when you need to diagnose issues in the chat pipeline or inspect runtime behavior.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Debug Prompts

Prompts for debug configuration should specify which event types to log, the verbosity level, and where debug output should appear.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Debug Testing

Test debug tooling by triggering known events and verifying that the logger captures them with the correct type, payload, and timestamp.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Generative UI Workflows

Design generative UI workflows around a component registry that maps response data types to Angular components rendered inline.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Generative UI Code

Code examples for generative UI show how to register inline components, parse structured response data, and render widgets within messages.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Generative UI Overview

Generative UI renders dynamic Angular components inline within assistant messages based on structured data from the response stream.

Use this page when you need to embed interactive widgets, charts, or forms directly in chat responses.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Generative UI Prompts

Prompts for generative UI should define the data shapes that trigger component rendering and the expected visual output for each type.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Generative UI Testing

Test generative UI by sending structured response data and verifying that the correct inline component renders with the expected inputs.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Input Workflows

Design input workflows around a single input component that handles text capture, validation, and submission events.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Input Code

Code examples for input show how to configure the input component, handle submission events, and manage loading states.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Input Overview

The input system captures user text, handles submission, and manages input state like loading indicators and disabled states.

Use this page when you need to customize input behavior or add features like file attachments or command detection.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Input Prompts

Prompts for input configuration should specify placeholder text, validation rules, and any pre-processing before submission.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Input Testing

Test input handling by simulating user keystrokes and submissions, then verifying the emitted message content and input state transitions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Interrupt Workflows

Design interrupt workflows around explicit pause points that present the user with a clear action and resume the stream on response.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Interrupts Code

Code examples for interrupts show how to emit an interrupt event, render a confirmation UI, and resume the response stream.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Interrupts Overview

Interrupts pause the assistant response stream to collect user confirmation or additional input before continuing.

Use this page when you need to add human-in-the-loop checkpoints to your chat workflows.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Interrupts Prompts

Prompts for interrupts should describe the pause condition, the user-facing question, and the expected response format.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Interrupts Testing

Test interrupts by triggering a pause condition and verifying that the stream stops, the prompt renders, and resumption produces the correct continuation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Message Workflows

Design message workflows around a clear message type hierarchy and consistent serialization for transport and storage.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Messages Code

Code examples for messages show how to create, send, receive, and render message objects in the chat component.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Messages Overview

Messages are the core data unit in Chat, representing user inputs, assistant responses, and system instructions in a conversation.

Use this page when you need to understand how messages flow through the chat pipeline and how they are stored and displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Messages Prompts

Prompts for message handling should define the expected message roles, content formats, and any metadata attached to each message.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Messages Testing

Test message handling by verifying that sent messages appear in the conversation thread with the correct role, content, and ordering.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Subagent Workflows

Design subagent workflows around clear delegation boundaries where the parent agent routes to a child and merges the result.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Subagent Code

Code examples for subagents show how to register child agents, route messages to them, and merge their responses into the main thread.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Subagents Overview

Subagents delegate parts of a conversation to specialized agents that handle domain-specific tasks and return results to the main thread.

Use this page when you need to compose multiple agents within a single chat experience.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Subagent Prompts

Prompts for subagents should define the delegation trigger, the child agent's role, and how its response integrates into the parent conversation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Subagent Testing

Test subagent delegation by triggering a routing condition and verifying that the child agent handles the task and returns the expected result.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Theming Workflows

Design theming workflows around a set of CSS custom properties that cascade through all chat components for consistent styling.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Theming Code

Code examples for theming show how to set CSS custom properties, override component styles, and switch between light and dark modes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Theming Overview

Theming controls the visual appearance of the chat interface through CSS custom properties and component-level style overrides.

Use this page when you need to match the chat UI to your application's design system or brand.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Theming Prompts

Prompts for theming should specify the design tokens, color palette, typography scale, and spacing values used across the chat UI.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Theming Testing

Test theming by applying a custom theme and verifying that CSS custom property values propagate correctly to all chat components.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Thread Workflows

Design thread workflows around a thread store that persists messages and supports operations like resume, branch, and delete.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Thread Code

Code examples for threads show how to create, load, resume, and branch conversation threads using the thread store API.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Threads Overview

Threads organize conversations into persistent sessions that can be resumed, branched, or archived.

Use this page when you need to manage conversation history and multi-session continuity.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Thread Prompts

Prompts for thread management should specify how threads are created, resumed, and how context is carried across sessions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Thread Testing

Test thread management by creating threads, adding messages, resuming sessions, and verifying that conversation history is preserved correctly.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build Timeline Workflows

Design timeline workflows around a virtualized message list that handles large histories and smooth auto-scrolling during streaming.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Timeline Code

Code examples for the timeline show how to configure the message list, add custom message templates, and control scroll behavior.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Timeline Overview

The timeline renders the conversation as a scrollable sequence of message bubbles with automatic scroll-to-bottom and streaming indicators.

Use this page when you need to customize how messages are displayed or add features like timestamps and read receipts.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Timeline Prompts

Prompts for timeline configuration should describe the desired message layout, grouping rules, and any custom rendering for specific message types.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Timeline Testing

Test the timeline by rendering a message sequence and verifying scroll position, message ordering, and streaming indicator behavior.
Loading
Loading