Skip to content
Merged
Show file tree
Hide file tree
Changes from 102 commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
d2435ae
feat(react-headless): add ThreadContext store with apps/artifacts reg…
abhithesys May 4, 2026
76191f9
Merge remote-tracking branch 'origin/main' into abhishek/openui-chat
abhithesys May 4, 2026
67f1cfc
Map tool-call results to custom inline preview + detailed-view side
abhithesys May 5, 2026
19cd211
feat: add defineAppRenderer + defineArtifactRenderer with end-to-en…
abhithesys May 5, 2026
2f6a72f
A collapsible right-side panel that surfaces ThreadContext entries.
abhithesys May 7, 2026
5ee23c1
feat(sdk): streaming AppRenderer dispatch + OpenAI Responses tool-result
abhithesys May 12, 2026
e38ec0e
Reference implementation of wrapping OpenAI's Conversations + Respons…
abhithesys May 12, 2026
134f896
feat(sdk)!: ChatProvider adapter-based API (storage + llm)
abhithesys May 18, 2026
ff1367e
typecheck fix
abhithesys May 18, 2026
c9d54c9
agent interface
abhithesys May 28, 2026
084d4b4
Merge remote-tracking branch 'origin/main' into abhishek/openui-chat
abhithesys May 29, 2026
7b13de3
- restStorage({ baseUrl, messageFormat?, headers?, fetch? }) — generic
abhithesys Jun 10, 2026
328bb47
Merge remote-tracking branch 'origin/main' into abhishek/openui-chat
abhithesys Jun 10, 2026
db02305
feat(sdk)!: global ArtifactStorage + artifact browser, unified artifact
abhithesys Jun 11, 2026
9b20399
styling updates
pr3khar Jun 16, 2026
535cb50
sidebar cleanups and artifact previews
pr3khar Jun 16, 2026
f84229c
feat(openui-cloud): integration example + artifact streaming support
Aditya-thesys Jun 17, 2026
6ca7a90
feat(openui-cloud): adopt openui:artifact inline-sentinel carrier + e…
Aditya-thesys Jun 17, 2026
0eac285
styling-updates
pr3khar Jun 17, 2026
055f483
fixed responsiveness and side-panels
pr3khar Jun 18, 2026
604faf0
added empty states and tooltip fixes
pr3khar Jun 19, 2026
52aba84
padding fix
pr3khar Jun 19, 2026
75d0ba3
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
pr3khar Jun 19, 2026
6309297
Merge remote-tracking branch 'origin/main' into abhishek/openui-chat
Aditya-thesys Jun 20, 2026
15d6495
genui-sdk lib move
ankit-thesys Jun 21, 2026
4c80173
fix(AgentInterface): typography token, empty-logo img, dedupe tooltip…
ankit-thesys Jun 21, 2026
6df85c0
feat(AgentInterface): keyboard + ARIA support for resize separator
ankit-thesys Jun 21, 2026
782401e
feat(AgentInterface): render full AG-UI user-message content; bump @a…
ankit-thesys Jun 21, 2026
eb4e938
fix(AgentInterface): show not-found state for unknown artifact category
ankit-thesys Jun 22, 2026
2aa409e
feat(openui-cloud): consume migrated @openuidev/thesys hook + make se…
ankit-thesys Jun 22, 2026
b05abbe
add draft docs
abhithesys Jun 22, 2026
2703a0f
Merge remote-tracking branch 'origin/abhishek/openui-chat' into abhis…
abhithesys Jun 22, 2026
a736bac
feat(AgentInterface): add scroll control options for message threads
i-subham23 Jun 22, 2026
88a0e0c
feat(AgentInterface): add comprehensive README for AgentInterface com…
ankit-thesys Jun 23, 2026
02f0ec1
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
ankit-thesys Jun 23, 2026
ae811ba
refactor(AgentInterface): make artifact icons consumer-driven; drop b…
ankit-thesys Jun 23, 2026
f919851
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
Aditya-thesys Jun 24, 2026
0931ee0
refactor(AgentInterface): config-driven artifact type label; drop nam…
ankit-thesys Jun 24, 2026
de38adc
handle artifact streaming in input
Aditya-thesys Jun 24, 2026
e26f273
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
Aditya-thesys Jun 24, 2026
e684588
feat(AgentInterface): consumer-overridable labels config for browser/…
ankit-thesys Jun 24, 2026
a6d9581
feat(toolActivity): implement tool call execution tracking and status…
i-subham23 Jun 24, 2026
056bb01
fix(toolActivity): run-gate tool-call animation + handle TOOL_CALL_CHUNK
ankit-thesys Jun 24, 2026
162929a
chore(openui-cloud): read OPENUI_MODEL for chat model (default openai…
ankit-thesys Jun 24, 2026
80b8029
Merge origin/abhishek/openui-chat into sd/update-openui-toolCall
ankit-thesys Jun 24, 2026
245a7cd
refactor(page): update comments to clarify SDK migration and artifact…
i-subham23 Jun 25, 2026
7ef0878
fix(toolCall): respect prefers-reduced-motion + announce tool status …
ankit-thesys Jun 25, 2026
d6ee803
replace presentation with slides
Aditya-thesys Jun 25, 2026
583de08
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
Aditya-thesys Jun 25, 2026
8e006a1
fix(toolCall): a11y — ARIA states, region names, announce-on-change, …
ankit-thesys Jun 25, 2026
5a25685
fix(toolCall): layout robustness — long-name ellipsis, result clamp, …
ankit-thesys Jun 25, 2026
9b16f33
fix(toolCall): status legibility & display correctness
ankit-thesys Jun 25, 2026
6e57390
fix(webSearchRenderer): source key collisions, accessible names, non-…
ankit-thesys Jun 25, 2026
f620e96
Merge remote-tracking branch 'origin/abhishek/openui-chat' into sd/up…
ankit-thesys Jun 25, 2026
2758df3
fix(artifact): register live artifacts under their real kind, not the…
ankit-thesys Jun 25, 2026
13b89b0
Revert "fix(artifact): register live artifacts under their real kind,…
ankit-thesys Jun 26, 2026
7227ec6
Add so apps import adapters,
abhithesys Jun 27, 2026
a64b0ee
Add `export * from "@openuidev/react-headless"` so apps import adapte…
abhithesys Jun 27, 2026
2ae82ae
Wrap the manual artifactRenderers + artifactCategories wiring: declar…
abhithesys Jun 27, 2026
4359bff
Rewrite the Cloud-touching pages from source: two-plane connect (llm …
abhithesys Jun 27, 2026
1ac38b8
chore(examples/openui-cloud): hardcode the OpenUI Cloud base URL
abhithesys Jun 27, 2026
a2024dd
A self-contained build guide for the Agent Interface SDK + OpenUI Cloud,
abhithesys Jun 27, 2026
651b3c6
remove remnants of chat doc
abhithesys Jun 27, 2026
1205ec7
Merge remote-tracking branch 'origin/abhishek/openui-chat' into abhis…
abhithesys Jun 27, 2026
5c4b993
refactor(examples): migrate consumers from legacy shells to AgentInte…
ankit-thesys Jun 27, 2026
ff5416f
refactor(react-ui)!: remove legacy OpenUIChat shells (Shell/CopilotSh…
ankit-thesys Jun 27, 2026
36258cc
docs: retarget READMEs, docs-site, and skill off the deleted shells
ankit-thesys Jun 27, 2026
915716a
fix(fastapi-backend): keep the published-deps frontend on FullScreen …
ankit-thesys Jun 27, 2026
eab1918
feat(fastapi-backend): switch frontend to workspace deps + migrate to…
ankit-thesys Jun 28, 2026
88eea9c
chore(review): scope lockfile to base + fix stale shell dep ref
ankit-thesys Jun 28, 2026
919d196
chore(shells): remove remaining shell remnants (dead CSS, stale docs,…
ankit-thesys Jun 28, 2026
b42cf38
Enhance artifact registration by adding optional `type` to `meta` in …
i-subham23 Jun 28, 2026
4655289
Add multimedia content to documentation: include videos and images fo…
i-subham23 Jun 28, 2026
45fa621
Merge feat/retire-legacy-shells: retire legacy chat shells → AgentInt…
ankit-thesys Jun 28, 2026
b2529fb
revert(openui-cli): keep the openui-chat scaffold template on FullScr…
ankit-thesys Jun 28, 2026
8472e64
refactor(react-ui): drop workspace tabs/filtering — show all artifact…
ankit-thesys Jun 28, 2026
d155d7e
cloud changes
ankit-thesys Jun 28, 2026
de7e0cd
fix(react-ui): restore user-message styling dropped in shell retirement
ankit-thesys Jun 28, 2026
dd7c9ce
fix(react-ui): keep last artifact preview when a tool call errors
ankit-thesys Jun 28, 2026
5d60e01
Revert "fix(react-ui): keep last artifact preview when a tool call er…
ankit-thesys Jun 29, 2026
fcc21df
fix(react-ui): suppress artifact preview for a failed tool call
ankit-thesys Jun 29, 2026
3f0c240
fix(workspace): render artifacts matching no category in a fallback s…
ankit-thesys Jun 29, 2026
82cfbda
FetchLLM adapts ag-ui props
ankit-thesys Jun 29, 2026
ce70a35
removing openui-cloud from pnpm workspace
ankit-thesys Jun 29, 2026
b8204ef
defining individual artifact category in example
ankit-thesys Jun 29, 2026
b6b703d
fetchLLM
ankit-thesys Jun 29, 2026
dd0b12c
useless dependency deleted
ankit-thesys Jun 29, 2026
900c3ac
chore(examples): remove openui-artifact-demo
ankit-thesys Jun 29, 2026
a7bc63f
version bump
ankit-thesys Jun 29, 2026
e65db17
rename
ankit-thesys Jun 29, 2026
1c1267a
Merge remote-tracking branch 'origin/main' into abhishek/openui-chat
ankit-thesys Jun 29, 2026
eb54db3
chore(examples): remove openui-responses-chat
ankit-thesys Jun 29, 2026
5d7b89f
chore(examples/openui-cloud): clean up globals.css comment
ankit-thesys Jun 29, 2026
df02d42
remove allow builds
abhithesys Jun 29, 2026
4e77a7b
Merge remote-tracking branch 'origin/abhishek/openui-chat' into abhis…
abhithesys Jun 29, 2026
0937036
fix: build errors in form-generator
AbhinRustagi Jun 29, 2026
eba60fb
hardcode version in openui cli template
abhithesys Jun 29, 2026
2daef83
Merge remote-tracking branch 'origin/abhishek/openui-chat' into abhis…
abhithesys Jun 29, 2026
849436c
fix: vercel eve example
AbhinRustagi Jun 29, 2026
273e874
deleting extras and re-wiring
ankit-thesys Jun 29, 2026
0f0f145
Merge branch 'abhishek/openui-chat' of https://github.com/thesysdev/o…
ankit-thesys Jun 29, 2026
82eca99
fix examples
abhithesys Jun 29, 2026
d9cb333
format fix
abhithesys Jun 29, 2026
22866d4
fmt
abhithesys Jun 29, 2026
05b1a7a
fmt
abhithesys Jun 29, 2026
e122c39
update pkg version
abhithesys Jun 29, 2026
e319eb2
update openui-cli version
abhithesys Jun 29, 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
  •  
  •  
  •  
193 changes: 0 additions & 193 deletions docs/app/docs/chat/page.tsx

This file was deleted.

13 changes: 8 additions & 5 deletions docs/components/docs-navbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@ import styles from "./docs-navbar.module.css";
import { SiteHeaderFrame } from "./site-header";
import { ThemeToggle } from "./theme-toggle";

const tabs = [
const tabs: { title: string; url: string; match?: string }[] = [
{ title: "OpenUI", url: "/docs/openui-lang" },
{ title: "Chat", url: "/docs/chat" },
{ title: "Agent Interface", url: "/docs/agent/getting-started/introduction", match: "/docs/agent" },
{ title: "API Reference", url: "/docs/api-reference" },
] as const;
];

function activeTabUrl(pathname: string): string {
const sorted = [...tabs].sort((a, b) => b.url.length - a.url.length);
const sorted = [...tabs].sort((a, b) => (b.match ?? b.url).length - (a.match ?? a.url).length);
return (
sorted.find((t) => pathname === t.url || pathname.startsWith(`${t.url}/`))?.url ?? tabs[0].url
sorted.find((t) => {
const prefix = t.match ?? t.url;
return pathname === prefix || pathname.startsWith(`${prefix}/`);
})?.url ?? tabs[0].url
);
}

Expand Down
6 changes: 3 additions & 3 deletions docs/components/overview-components/chat-modal.css
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@
height: 100%;
}

/* Override Shell container sizing to fit within the modal */
.chat-modal-body .openui-shell-container {
/* Override AgentInterface container sizing to fit within the modal */
.chat-modal-body .openui-agent-container {
height: 100% !important;
width: 100% !important;
}

/* Hide the sidebar in the modal */
.chat-modal-body .openui-shell-sidebar-container {
.chat-modal-body .openui-agent-sidebar-container {
display: none !important;
}

Expand Down
127 changes: 70 additions & 57 deletions docs/components/overview-components/chat-modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@ import "./chat-modal.css";

import { DemoCreditsDialog } from "@/components/DemoCreditsDialog";
import { isDemoCreditsErrorPayload } from "@/lib/demo-credits";
import { openAIAdapter, openAIMessageFormat } from "@openuidev/react-headless";
import { FullScreen } from "@openuidev/react-ui";
import {
AgentInterface,
openAIAdapter,
openAIMessageFormat,
type ChatLLM,
} from "@openuidev/react-ui";
import { openuiChatLibrary } from "@openuidev/react-ui/genui-lib";
import { X } from "lucide-react";
import { useTheme } from "next-themes";
import { useCallback, useEffect, useState } from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { createPortal } from "react-dom";

interface ChatModalProps {
Expand All @@ -40,70 +44,79 @@ export function ChatModal({ onClose }: ChatModalProps) {
};
}, [handleKey]);

// The backend call — including the demo-credits error handling — is unchanged;
// only the chat surface moved from FullScreen to AgentInterface. AgentInterface
// uses its built-in in-memory thread storage (wiped on reload).
const llm = useMemo<ChatLLM>(
() => ({
send: async ({ messages, signal }) => {
const response = await fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
messages: openAIMessageFormat.toApi(messages),
}),
signal,
});

if (!response.ok) {
const err = await response
.clone()
.json()
.catch(() => ({}));
if (isDemoCreditsErrorPayload((err as { error?: unknown }).error)) {
setShowOverviewCreditsDialog(true);
return new Response("data: [DONE]\n\n", {
headers: { "Content-Type": "text/event-stream" },
});
}
}

return response;
},
streamProtocol: openAIAdapter(),
}),
[],
);

return createPortal(
<div className="chat-modal-overlay" onClick={onClose}>
<div className="chat-modal-container" onClick={(e) => e.stopPropagation()}>
<button className="chat-modal-close" onClick={onClose} aria-label="Close chat">
<X size={20} />
</button>
<div className="chat-modal-body">
<FullScreen
welcomeMessage={{ title: "Hello, how can I help you today?" }}
processMessage={async ({ messages, abortController }) => {
const response = await fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
messages: openAIMessageFormat.toApi(messages),
}),
signal: abortController.signal,
});

if (!response.ok) {
const err = await response
.clone()
.json()
.catch(() => ({}));
if (isDemoCreditsErrorPayload((err as { error?: unknown }).error)) {
setShowOverviewCreditsDialog(true);
return new Response("data: [DONE]\n\n", {
headers: { "Content-Type": "text/event-stream" },
});
}
}

return response;
}}
streamProtocol={openAIAdapter()}
<AgentInterface
llm={llm}
componentLibrary={openuiChatLibrary}
agentName="OpenUI Chat"
theme={{ mode: (resolvedTheme as "light" | "dark") ?? "light" }}
conversationStarters={{
variant: "short",
options: [
{
displayText: "Revenue dashboard",
prompt:
"Build a revenue dashboard with a bar chart showing monthly revenue for Q4, key metrics, and a summary table.",
},
{
displayText: "Signup form",
prompt:
"Create a user registration form with name, email, password, and country fields with validation.",
},
{
displayText: "Compare React vs Vue",
prompt:
"Show me a comparison of React and Vue frameworks using tabs with pros, cons, and a feature comparison table.",
},
{
displayText: "Travel destinations",
prompt:
"Show me a carousel of 3 popular travel destinations with images, descriptions, and best time to visit.",
},
],
}}
/>
starterVariant="short"
starters={[
{
displayText: "Revenue dashboard",
prompt:
"Build a revenue dashboard with a bar chart showing monthly revenue for Q4, key metrics, and a summary table.",
},
{
displayText: "Signup form",
prompt:
"Create a user registration form with name, email, password, and country fields with validation.",
},
{
displayText: "Compare React vs Vue",
prompt:
"Show me a comparison of React and Vue frameworks using tabs with pros, cons, and a feature comparison table.",
},
{
displayText: "Travel destinations",
prompt:
"Show me a carousel of 3 popular travel destinations with images, descriptions, and best time to visit.",
},
]}
>
<AgentInterface.Welcome title="Hello, how can I help you today?" />
</AgentInterface>
</div>
<DemoCreditsDialog
open={showOverviewCreditsDialog}
Expand Down
Loading
Loading