@@ -28,95 +28,108 @@ Built for simplicity and flexibility, it standardizes how agent state, UI intent
28
28
</div >
29
29
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
30
30
<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 .
32
32
</div >
33
33
</div >
34
34
</div >
35
35
36
36
<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' ; }} >
37
37
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
38
- Static generative UI
38
+ Multimodality
39
39
</div >
40
40
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
41
41
<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 .
43
43
</div >
44
44
</div >
45
45
</div >
46
46
47
47
<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' ; }} >
48
48
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
49
- Declarative generative UI
49
+ Generative UI, static
50
50
</div >
51
51
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
52
52
<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 .
54
54
</div >
55
55
</div >
56
56
</div >
57
57
58
58
<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' ; }} >
59
59
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
60
- Frontend tools
60
+ Generative UI, declarative
61
61
</div >
62
62
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
63
63
<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 .
65
65
</div >
66
66
</div >
67
67
</div >
68
68
69
69
<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' ; }} >
70
70
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
71
- Interrupts & human‑in‑the‑loop
71
+ Shared state
72
72
</div >
73
73
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
74
74
<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 .
76
76
</div >
77
77
</div >
78
78
</div >
79
79
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
+
80
92
<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
93
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
82
- In‑chat + in‑app interactions
94
+ Frontend tool calls
83
95
</div >
84
96
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
85
97
<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 .
87
99
</div >
88
100
</div >
89
101
</div >
90
102
91
103
<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' ; }} >
92
104
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
93
- Attachments & multimodality
105
+ Backend tool rendering & side effects
94
106
</div >
95
107
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
96
108
<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 .
98
110
</div >
99
111
</div >
100
112
</div >
101
113
102
114
<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' ; }} >
103
115
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
104
- Thinking steps
116
+ Interrupts (human in the loop)
105
117
</div >
106
118
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
107
119
<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 .
109
121
</div >
110
122
</div >
111
123
</div >
112
124
125
+
113
126
<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' ; }} >
114
127
<div style = { {padding: ' 1rem 1.5rem' , backgroundColor: ' #f9fafb' , fontWeight: ' 600' , color: ' #374151' }} >
115
- Sub‑agent calls
128
+ Sub-agents and composition
116
129
</div >
117
130
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
118
131
<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 .
120
133
</div >
121
134
</div >
122
135
</div >
@@ -127,7 +140,29 @@ Built for simplicity and flexibility, it standardizes how agent state, UI intent
127
140
</div >
128
141
<div className = " content" style = { {maxHeight: ' 0px' , opacity: ' 0' , overflow: ' hidden' , transition: ' all 0.3s ease' , padding: ' 0 1.5rem' , backgroundColor: ' #ffffff' }} >
129
142
<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.
131
166
</div >
132
167
</div >
133
168
</div >
0 commit comments