@@ -28,95 +28,108 @@ Built for simplicity and flexibility, it standardizes how agent state, UI intent
2828 </div >
2929 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
3030 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
31- Token‑level and tool‑ event streaming for responsive UIs .
31+ Live token and event streaming for responsive multi turn sessions, with cancel and resume .
3232 </div >
3333 </div >
3434 </div >
3535
3636 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
3737 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
38- Static generative UI
38+ Multimodality
3939 </div >
4040 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
4141 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
42- Render model output into stable, typed components .
42+ Typed attachments and real time media (files, images, audio, transcripts); supports voice, previews, annotations, provenance .
4343 </div >
4444 </div >
4545 </div >
4646
4747 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
4848 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
49- Declarative generative UI
49+ Generative UI, static
5050 </div >
5151 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
5252 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
53- Let agents propose UI trees; app decides what to mount .
53+ Render model output as stable, typed components under app control .
5454 </div >
5555 </div >
5656 </div >
5757
5858 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
5959 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
60- Frontend tools
60+ Generative UI, declarative
6161 </div >
6262 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
6363 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
64- Safe, typed tool calls that bridge agent logic to app actions .
64+ Small declarative language for constrained yet open-ended agent UIs; agents propose trees and constraints, the app validates and mounts .
6565 </div >
6666 </div >
6767 </div >
6868
6969 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
7070 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
71- Interrupts & human‑in‑the‑loop
71+ Shared state
7272 </div >
7373 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
7474 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
75- Pause, approve, edit, or steer mid‑flow .
75+ (Read-only & read-write). Typed store shared between agent and app, with streamed event-sourced diffs and conflict resolution for snappy collaboration .
7676 </div >
7777 </div >
7878 </div >
7979
80+ <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
81+ <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
82+ Thinking steps
83+ </div >
84+ <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
85+ <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
86+ Visualize intermediate reasoning from traces and tool events; no raw chain of thought.
87+ </div >
88+ </div >
89+ </div >
90+
91+
8092 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
8193 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
82- In‑chat + in‑app interactions
94+ Frontend tool calls
8395 </div >
8496 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
8597 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
86- Chat commands alongside regular app controls .
98+ Typed handoffs from agent to frontend-executed actions, and back .
8799 </div >
88100 </div >
89101 </div >
90102
91103 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
92104 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
93- Attachments & multimodality
105+ Backend tool rendering & side effects
94106 </div >
95107 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
96108 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
97- Files, images, audio, and structured payloads .
109+ Visualize backend tool outputs in app and chat, emit side effects as first-class events .
98110 </div >
99111 </div >
100112 </div >
101113
102114 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
103115 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
104- Thinking steps
116+ Interrupts (human in the loop)
105117 </div >
106118 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
107119 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
108- Expose summaries/redactions of chain‑of‑thought artifacts to users, safely .
120+ Pause, approve, edit, retry, or escalate mid flow without losing state .
109121 </div >
110122 </div >
111123 </div >
112124
125+
113126 <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
114127 <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
115- Sub‑agent calls
128+ Sub-agents and composition
116129 </div >
117130 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
118131 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
119- Orchestrate nested agents and delegate specialized tasks .
132+ Nested delegation with scoped state, tracing, and cancellation .
120133 </div >
121134 </div >
122135 </div >
@@ -127,7 +140,29 @@ Built for simplicity and flexibility, it standardizes how agent state, UI intent
127140 </div >
128141 <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
129142 <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
130- Guardrails, policies, and UX affordances to keep agents on track.
143+ Dynamically redirect agent execution with real-time user input to guide behavior and outcomes.
144+ </div >
145+ </div >
146+ </div >
147+
148+ <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
149+ <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
150+ Tool output streaming
151+ </div >
152+ <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
153+ <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
154+ Stream tool results and logs so UIs can render long-running effects in real time.
155+ </div >
156+ </div >
157+ </div >
158+
159+ <div style = { {border: ' 1px solid #e5e7eb' , borderRadius: ' 8px' , overflow: ' hidden' , transition: ' all 0.3s ease' , cursor: ' pointer' }} onMouseEnter = { (e ) => { e .currentTarget .style .borderColor = ' #3b82f6' ; e .currentTarget .style .boxShadow = ' 0 4px 12px rgba(59, 130, 246, 0.15)' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 200px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 1' ; }} onMouseLeave = { (e ) => { e .currentTarget .style .borderColor = ' #e5e7eb' ; e .currentTarget .style .boxShadow = ' none' ; e .currentTarget .querySelector (' .content' ).style .maxHeight = ' 0px' ; e .currentTarget .querySelector (' .content' ).style .opacity = ' 0' ; }} >
160+ <div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
161+ Custom events
162+ </div >
163+ <div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
164+ <div style = { {padding: ' 1rem 0' , color: ' #6b7280' , lineHeight: ' 1.6' }} >
165+ Open-ended data exchange for needs not covered by the protocol.
131166 </div >
132167 </div >
133168 </div >
0 commit comments