Loading...
Loading...
Compare original and translation side by side
@openuidev/lang-corelatesthttps://github.com/thesysdev/openuihttps://www.openui.com@openuidev/lang-corelatesthttps://github.com/thesysdev/openuihttps://www.openui.compackage.json@openuidev/*node_modules/@openuidev/*.d.ts@openuidevpackage.json@openuidev/*node_modules/@openuidev/*.d.ts@openuidev| Package | Use for |
|---|---|
| Framework-agnostic parser, streaming parser, prompt generation, runtime evaluation, |
| React |
| Vue 3 |
| Svelte 5 |
| OpenUI's default React component libraries ( |
| Bring-your-own React chat state, hooks, storage/LLM adapter primitives, streaming adapters, message converters, and artifact primitives without OpenUI's visual components |
| React Email component library and prompt options for generated email |
| CDN/iframe/no-build React renderer bundle exposed as |
| |
| Version-sensitive client-side OpenUI Cloud helpers such as |
| Version-sensitive server-side OpenUI Cloud helpers such as |
@openuidev/lang-core@openuidev/react-ui@openuidev/react-headless@openuidev/react-ui@openuidev/react-headless| 包名 | 适用场景 |
|---|---|
| 与框架无关的解析器、流式解析器、提示词生成、运行时评估、 |
| React的 |
| Vue 3的 |
| Svelte 5的 |
| OpenUI默认的React组件库( |
| 自定义React聊天状态、钩子函数、存储/LLM适配器原语、流式适配器、消息转换器、工件原语,不含OpenUI的可视化组件 |
| React Email组件库及生成邮件的提示词选项 |
| CDN/iframe/无需构建的React渲染器包,暴露为 |
| |
| 对版本敏感的OpenUI Cloud客户端助手,如 |
| 对版本敏感的OpenUI Cloud服务端助手,如用于云托管 |
@openuidev/lang-core@openuidev/react-ui@openuidev/react-headless@openuidev/react-ui@openuidev/react-headless@openuidev/cli@openuidev/react-uiAgentInterfaceopenuiLibraryopenuiChatLibrary@openuidev/react-lang@openuidev/vue-lang@openuidev/svelte-lang@openuidev/lang-core@openuidev/cli@openuidev/react-uiAgentInterfaceopenuiLibraryopenuiChatLibrary@openuidev/react-lang@openuidev/vue-lang@openuidev/svelte-lang@openuidev/lang-corePOST https://api.thesys.dev/v1/embed/responsesopenai| Capability | How |
|---|---|
| Generative UI (OpenUI Lang) | Default response format, streamed in Responses-compatible events |
| Output validation & correction | Invalid model output detected and corrected in-stream; sanitized fallback — no broken UI reaches the renderer |
| Managed model access | Leading providers behind one API (billed at cost), automatic model/provider fallbacks; models list endpoint |
| Bring your own model credentials (BYOK) | Available on every plan; read Configure BYOK for provider credential formats, organization access, billing, model identifiers, and the required human handoff |
| Artifacts: slides + reports | |
| Web search | |
| Image search | |
| Remote MCP servers | |
| App-owned function tools | |
| Conversation + artifact persistence | |
| Multi-user / multi-app isolation | Mint the fct_ with |
| App metadata | |
| Standard OpenAI Responses params | Being Responses-compatible, |
| Responsive managed UI | |
POST https://api.thesys.dev/v1/embed/responsesopenai| 功能 | 使用方式 |
|---|---|
| 生成式UI(OpenUI Lang) | 默认响应格式,以兼容Responses的事件流式传输 |
| 输出验证与修正 | 流式检测并修正无效模型输出;提供净化后的回退方案——确保不会有损坏的UI到达渲染器 |
| 托管模型访问 | 通过统一API访问主流模型提供商(按成本计费),自动实现模型/提供商降级;提供模型列表端点 |
| 自带模型凭据(BYOK) | 所有套餐均支持;请阅读配置BYOK了解提供商凭据格式、组织访问、计费、模型标识符及必要的人工交互流程 |
| 工件:幻灯片+报告 | |
| 网页搜索 | |
| 图片搜索 | |
| 远程MCP服务器 | |
| 应用自有函数工具 | |
| 对话+工件持久化 | |
| 多用户/多应用隔离 | 生成fct_令牌时携带 |
| 应用元数据 | 对话和Responses调用中的 |
| 标准OpenAI Responses参数 | 兼容Responses, |
| 响应式托管UI | |
| Starting point and goal | Required runbook |
|---|---|
| Existing React app, add managed Cloud chat | Read references/cloud-integration.md completely before editing |
| Existing non-React app, add managed Cloud chat | Read references/cloud-integration.md; require a current first-party client/runtime or report the verified React-only boundary |
| Existing self-hosted/open-source app, replace or supplement it with Cloud | Read both references/oss-to-cloud-migration.md and references/cloud-integration.md completely before editing |
| 起点与目标 | 所需执行手册 |
|---|---|
| 现有React应用,添加托管云聊天 | 编辑前完整阅读references/cloud-integration.md |
| 现有非React应用,添加托管云聊天 | 阅读references/cloud-integration.md;要求使用当前官方客户端/运行时,否则说明仅支持React的边界限制 |
| 现有自托管/开源应用,替换或补充为云托管 | 编辑前完整阅读references/oss-to-cloud-migration.md和references/cloud-integration.md |
NAME=valuenpx @openuidev/cli@latest create --name genui-chat-app --template openui-self-hosted --no-skill --no-interactive
cd genui-chat-appNAME=valuenpx @openuidev/cli@latest create --name genui-chat-app --template openui-self-hosted --no-skill --no-interactive
cd genui-chat-app
The CLI is the easiest way to scaffold a new OpenUI/GenUI app. Version-sensitive: verify current CLI flags/template names before relying on them. It prompts for an OpenUI Cloud or self-hosted Agent Interface app when no template is passed. Use `--template openui-cloud` for the managed Cloud starter and `--template openui-self-hosted` for the app-owned model/storage starter. For unattended agent/CI use, pass `--template`, `--no-interactive`, and usually `--no-skill`.
Use `--no-install` when the agent needs to control package-manager behavior explicitly:
```bash
npx @openuidev/cli@latest create --name genui-chat-app --template openui-self-hosted --no-skill --no-interactive --no-installERR_PNPM_IGNORED_BUILDSsharpunrs-resolverpnpm approve-buildspnpm approve-builds --allOPENAI_API_KEYpnpm run build
CLI是搭建新OpenUI/生成式UI应用最简便的方式。请注意版本兼容性:在依赖前验证当前CLI的标志/模板名称。当未指定模板时,它会提示创建OpenUI Cloud或自托管Agent Interface应用。使用`--template openui-cloud`创建托管云启动项目,使用`--template openui-self-hosted`创建应用自有模型/存储启动项目。对于无人值守的代理/CI使用场景,传入`--template`、`--no-interactive`,通常还需传入`--no-skill`。
当代理需要显式控制包管理器行为时,使用`--no-install`:
```bash
npx @openuidev/cli@latest create --name genui-chat-app --template openui-self-hosted --no-skill --no-interactive --no-installERR_PNPM_IGNORED_BUILDSsharpunrs-resolverpnpm approve-buildspnpm approve-builds --allOPENAI_API_KEYpnpm run build@openuidev/thesys*THESYS_API_KEY.env.localOPENUI_MODELprovider/modelDEMO_USER_ID/api/chat/api/frontend-tokenopenui-cloud/api/chat@openuidev/thesys-serverartifactToolcreateResponsesInstructionsAgentInterfacellmstoragellmopenAIResponsesAdapter()openAIConversationMessageFormatstorageuseOpenuiCloudStorage()@openuidev/thesys@openuidev/thesyshttps://console.thesys.dev/keysChatLLM/api/chatuseOpenuiCloudStorage()/api/frontend-tokenopenAIConversationMessageFormat.toApi(messages.slice(-1))conversation: threadIdopenAIResponsesAdapter()user_idthreadId@openuidev/thesysdynamic(..., { ssr: false })@openuidev/thesys*THESYS_API_KEY.env.localOPENUI_MODELprovider/modelDEMO_USER_ID/api/chat/api/frontend-tokenopenui-cloud/api/chat@openuidev/thesys-serverartifactToolcreateResponsesInstructionsAgentInterfacellmstoragellmopenAIResponsesAdapter()openAIConversationMessageFormatstorage@openuidev/thesysuseOpenuiCloudStorage()@openuidev/thesyshttps://console.thesys.dev/keysChatLLM/api/chatuseOpenuiCloudStorage()/api/frontend-tokenopenAIConversationMessageFormat.toApi(messages.slice(-1))conversation: threadIdopenAIResponsesAdapter()user_idthreadId@openuidev/thesysdynamic(..., { ssr: false })AgentInterface@openuidev/react-uillmfetchLLM({ url, streamAdapter, messageFormat })storagerestStorage({ baseUrl })artifactRenderersartifactCategoriescomponentLibrarycomponentsAgentInterfaceRendereropenuiChatLibraryAgentInterfaceSidebarThreadHeaderComposerWorkspace.openui-agent-*import {
AgentInterface,
fetchLLM,
restStorage,
openAIReadableStreamAdapter,
openAIMessageFormat,
} from "@openuidev/react-ui";
const llm = fetchLLM({
url: "/api/chat",
streamAdapter: openAIReadableStreamAdapter(),
messageFormat: openAIMessageFormat,
});
const storage = restStorage({ baseUrl: "/api/chat/storage" });
export function Chat() {
return <AgentInterface llm={llm} storage={storage} />;
}fetchLLM{ threadId, messages }ResponseagUIAdapter()openAIAdapter()openAIReadableStreamAdapter()openAIResponsesAdapter()langGraphAdapter()llmfetchLLM({ url, streamAdapter, messageFormat })streamAdapterChatLLMChatLLMstreamProtocolstreamAdapterimport { type ChatLLM, openAIAdapter } from "@openuidev/react-ui";
const llm: ChatLLM = {
streamProtocol: openAIAdapter(),
send: ({ threadId, messages, signal }) =>
fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ threadId, messages }),
signal,
}),
};@openuidev/react-uiAgentInterfacellmfetchLLM({ url, streamAdapter, messageFormat })storagerestStorage({ baseUrl })artifactRenderersartifactCategoriescomponentLibrarycomponentsAgentInterfaceRendereropenuiChatLibraryAgentInterfaceSidebarThreadHeaderComposerWorkspace.openui-agent-*import {
AgentInterface,
fetchLLM,
restStorage,
openAIReadableStreamAdapter,
openAIMessageFormat,
} from "@openuidev/react-ui";
const llm = fetchLLM({
url: "/api/chat",
streamAdapter: openAIReadableStreamAdapter(),
messageFormat: openAIMessageFormat,
});
const storage = restStorage({ baseUrl: "/api/chat/storage" });
export function Chat() {
return <AgentInterface llm={llm} storage={storage} />;
}fetchLLM{ threadId, messages }ResponseagUIAdapter()openAIAdapter()openAIReadableStreamAdapter()openAIResponsesAdapter()langGraphAdapter()llmfetchLLM({ url, streamAdapter, messageFormat })streamAdapterChatLLMChatLLMstreamProtocolstreamAdapterimport { type ChatLLM, openAIAdapter } from "@openuidev/react-ui";
const llm: ChatLLM = {
streamProtocol: openAIAdapter(),
send: ({ threadId, messages, signal }) =>
fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ threadId, messages }),
signal,
}),
};@openuidev/*RendererAgentInterface"use client"/// <reference types="vite/client" />declare module "*.css";@openuidev/react-ui/components.css@openuidev/react-ui/styles/index.css@openuidev/react-ui/layered/styles/index.css@openuidev/react-headless@openuidev/react-uiRendereropenuiChatLibraryimport { Renderer } from "@openuidev/react-lang";
import { openuiChatLibrary } from "@openuidev/react-ui";
import "@openuidev/react-ui/components.css";
import "@openuidev/react-ui/styles/index.css";
export function AssistantGenUI({
response,
isStreaming,
}: {
response: string;
isStreaming?: boolean;
}) {
return (
<Renderer
response={response}
library={openuiChatLibrary}
isStreaming={isStreaming}
onError={(error) => console.error(error)}
/>
);
}CardStack@openuidev/*RendererAgentInterface"use client"/// <reference types="vite/client" />declare module "*.css";@openuidev/react-ui/components.css@openuidev/react-ui/styles/index.css@openuidev/react-ui/layered/styles/index.css@openuidev/react-headless@openuidev/react-uiRendereropenuiChatLibraryimport { Renderer } from "@openuidev/react-lang";
import { openuiChatLibrary } from "@openuidev/react-ui";
import "@openuidev/react-ui/components.css";
import "@openuidev/react-ui/styles/index.css";
export function AssistantGenUI({
response,
isStreaming,
}: {
response: string;
isStreaming?: boolean;
}) {
return (
<Renderer
response={response}
library={openuiChatLibrary}
isStreaming={isStreaming}
onError={(error) => console.error(error)}
/>
);
}CardStackhttps://github.com/thesysdev/openui/tree/main/examplesopenui-chatopenui-dashboardopenui-artifact-demovercel-ai-chatlanggraph-chatmastra-chatmulti-agent-chatsupabase-chatfastapi-backendvue-chatsvelte-chatopenui-react-nativereact-emailmaterial-ui-chatshadcn-chatform-generatorhands-on-table-chatharnesses/pi-agent-harnessharnesses/vercel-evehttps://github.com/thesysdev/openui/tree/main/examplesopenui-chatopenui-dashboardopenui-artifact-demovercel-ai-chatlanggraph-chatmastra-chatmulti-agent-chatsupabase-chatfastapi-backendvue-chatsvelte-chatopenui-react-nativereact-emailmaterial-ui-chatshadcn-chatform-generatorhands-on-table-chatharnesses/pi-agent-harnessharnesses/vercel-evenpx @openuidev/cli@latest generate ./src/library.tsx --out ./src/generated/system-prompt.txt
npx @openuidev/cli@latest generate ./src/library.tsx --json-schema --out ./src/generated/component-spec.jsonprompt()toJSONSchema()librarydefaultpromptOptionsoptionsPromptOptionsnpx @openuidev/cli@latest generate ./src/library.tsx --out ./src/generated/system-prompt.txt
npx @openuidev/cli@latest generate ./src/library.tsx --json-schema --out ./src/generated/component-spec.jsonprompt()toJSONSchema()librarydefaultpromptOptionsoptionsPromptOptionsopenuiLibraryopenuiChatLibraryCardimport { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui";
const systemPrompt = openuiLibrary.prompt(openuiPromptOptions);openuiLibraryopenuiChatLibraryCardimport { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui";
const systemPrompt = openuiLibrary.prompt(openuiPromptOptions);zod.tsx.tsdefineComponentzod/v4import { createLibrary, defineComponent } from "@openuidev/react-lang";
import { z } from "zod/v4";
const MetricCard = defineComponent({
name: "MetricCard",
description: "Shows a labeled metric.",
props: z.object({
label: z.string(),
value: z.string(),
}),
component: ({ props }) => (
<article>
<strong>{props.label}</strong>
<span>{props.value}</span>
</article>
),
});
export const library = createLibrary({
root: "MetricCard",
components: [MetricCard],
});component@openuidev/react-lang@openuidev/vue-lang@openuidev/svelte-lang@openuidev/lang-corenullzod/v4zod.tsx.tsdefineComponentzod/v4import { createLibrary, defineComponent } from "@openuidev/react-lang";
import { z } from "zod/v4";
const MetricCard = defineComponent({
name: "MetricCard",
description: "显示带标签的指标。",
props: z.object({
label: z.string(),
value: z.string(),
}),
component: ({ props }) => (
<article>
<strong>{props.label}</strong>
<span>{props.value}</span>
</article>
),
});
export const library = createLibrary({
root: "MetricCard",
components: [MetricCard],
});component@openuidev/react-lang@openuidev/vue-lang@openuidev/svelte-lang@openuidev/lang-corenullzod/v4identifier = Expressionroot = <RootComponent>(...)rootrootStack([title], "row", "l")root = Stack([chart])chart = ...root = Stack([title, metrics, table])
title = TextContent("Q4 dashboard", "large-heavy")
metrics = Stack([rev, users], "row", "m")
rev = StatCard("Revenue", "$1.2M")
users = StatCard("Users", "450k")
table = Table([Col("Region", ["NA", "EU"]), Col("Revenue", [720000, 480000], "currency")])identifier = Expressionroot = <RootComponent>(...)rootrootStack([title], "row", "l")root = Stack([chart])chart = ...root = Stack([title, metrics, table])
title = TextContent("Q4 dashboard", "large-heavy")
metrics = Stack([rev, users], "row", "m")
rev = StatCard("Revenue", "$1.2M")
users = StatCard("Users", "450k")
table = Table([Col("Region", ["NA", "EU"]), Col("Revenue", [720000, 480000], "currency")])$name = defaultValue$variableInputSelectvalue?: $binding<...>$days = "7"
root = Stack([filter, total])
filter = Select("days", [SelectItem("7", "7 days"), SelectItem("30", "30 days")], null, null, $days)
total = TextContent("Showing " + $days + " days")$name = defaultValue$variableInputSelectvalue?: $binding<...>$days = "7"
root = Stack([filter, total])
filter = Select("days", [SelectItem("7", "7 days"), SelectItem("30", "30 days")], null, null, $days)
total = TextContent("Showing " + $days + " days")Query$variablesMutation$title = ""
root = Stack([input, btn, tbl])
todos = Query("list_todos", {}, {rows: []})
createTodo = Mutation("create_todo", {title: $title})
input = Input("title", "What needs to be done?", "text", null, $title)
btn = Button("Create", Action([@Run(createTodo), @Run(todos), @Reset($title)]), "primary")
tbl = Table([Col("Title", todos.rows.title)])Query$variablesMutation$title = ""
root = Stack([input, btn, tbl])
todos = Query("list_todos", {}, {rows: []})
createTodo = Mutation("create_todo", {title: $title})
input = Input("title", "What needs to be done?", "text", null, $title)
btn = Button("Create", Action([@Run(createTodo), @Run(todos), @Reset($title)]), "primary")
tbl = Table([Col("Title", todos.rows.title)])@Count(...)@Count@Sum@Avg@Min@Max@First@Last@Filter@Sort@Round@Each@Run@Set@Reset@ToAssistant@OpenUrl@Count(...)@Count@Sum@Avg@Min@Max@First@Last@Filter@Sort@Round@Each@Run@Set@Reset@ToAssistant@OpenUrlimport { Renderer } from "@openuidev/react-lang"import { Renderer } from "@openuidev/vue-lang"import { Renderer } from "@openuidev/svelte-lang"window.__OpenUI.Rendererwindow.__OpenUI.openuiChatLibraryresponselibraryisStreamingonActiononStateUpdateinitialStateonParseResulttoolProviderqueryLoaderonErrorQueryMutationQueryMutationnodePlaceholderimport { Renderer } from "@openuidev/react-lang"import { Renderer } from "@openuidev/vue-lang"import { Renderer } from "@openuidev/svelte-lang"window.__OpenUI.Rendererwindow.__OpenUI.openuiChatLibraryresponselibraryisStreamingonActiononStateUpdateinitialStateonParseResulttoolProviderqueryLoaderonErrorQueryMutationQueryMutationnodePlaceholderopenui generatecreateParser(...).parse(...)result.meta.errorsresult.errorsRendereronErrorQueryMutationnpm_config_cache=$PWD/.npm-cache npm installpnpm install --store-dir .pnpm-storeimport { createParser } from "@openuidev/react-lang";
import { openuiChatLibrary } from "@openuidev/react-ui";
const parser = createParser(openuiChatLibrary.toJSONSchema(), "Card");
const result = parser.parse(response);
const errors = result.meta?.errors ?? [];
if (errors.length > 0) throw new Error(JSON.stringify(errors, null, 2));"Card"openuiChatLibrary"Stack"openuiLibraryopenui generatecreateParser(...).parse(...)result.meta.errorsresult.errorsRendereronErrorQueryMutationnpm_config_cache=$PWD/.npm-cache npm installpnpm install --store-dir .pnpm-storeimport { createParser } from "@openuidev/react-lang";
import { openuiChatLibrary } from "@openuidev/react-ui";
const parser = createParser(openuiChatLibrary.toJSONSchema(), "Card");
const result = parser.parse(response);
const errors = result.meta?.errors ?? [];
if (errors.length > 0) throw new Error(JSON.stringify(errors, null, 2));openuiChatLibrary"Card"openuiLibrary"Stack"@openuidev/react-uiimport { Renderer } from "@openuidev/react-lang";
import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui";
import "@openuidev/react-ui/components.css";
import "@openuidev/react-ui/styles/index.css";
const prompt = openuiLibrary.prompt(openuiPromptOptions);openuiLibraryopenuiChatLibraryAgentInterfacellmstoragefetchLLMrestStorageFullScreenCopilotBottomTrayThemeProvidercreateTheme@openuidev/react-ui/components.css@openuidev/react-ui/styles/index.css@openuidev/react-ui/layered/styles/index.css@openuidev/react-uiimport { Renderer } from "@openuidev/react-lang";
import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui";
import "@openuidev/react-ui/components.css";
import "@openuidev/react-ui/styles/index.css";
const prompt = openuiLibrary.prompt(openuiPromptOptions);openuiLibraryopenuiChatLibraryAgentInterfacellmstoragefetchLLMrestStorageFullScreenCopilotBottomTrayThemeProvidercreateTheme@openuidev/react-ui/components.css@openuidev/react-ui/styles/index.css@openuidev/react-ui/layered/styles/index.cssAgentInterfaceThemePropslightThemedarkThemecreateThemethemeThemeProviderlightThemecreateTheme()node_modules/@openuidev/react-uihttps://github.com/thesysdev/openui/tree/main/packagesimport { AgentInterface, createTheme, type ThemeProps } from "@openuidev/react-ui";
const companyChatTheme: ThemeProps = {
lightTheme: createTheme({
background: "oklch(0.98 0.01 250)",
interactiveAccentDefault: "oklch(0.55 0.18 255)",
chatUserResponseBg: "oklch(0.55 0.18 255)",
chatUserResponseText: "oklch(0.99 0 0)",
radiusM: "10px",
fontBody: "Inter, system-ui, sans-serif",
}),
darkTheme: createTheme({
background: "oklch(0.16 0.02 255)",
interactiveAccentDefault: "oklch(0.72 0.14 255)",
chatUserResponseBg: "oklch(0.72 0.14 255)",
chatUserResponseText: "oklch(0.12 0.01 255)",
}),
};
const starters = [
{ displayText: "Summarize pipeline", prompt: "Summarize the current sales pipeline." },
];
<AgentInterface
llm={llm}
theme={companyChatTheme}
logoUrl="/brand/logo.svg"
agentName="Acme Assistant"
starters={starters}
starterVariant="long"
/>;disableThemeProviderThemeProviderThemePropsAgentInterfacelightThemedarkThemecreateThemeThemeProviderthemelightThemecreateTheme()node_modules/@openuidev/react-uihttps://github.com/thesysdev/openui/tree/main/packagesimport { AgentInterface, createTheme, type ThemeProps } from "@openuidev/react-ui";
const companyChatTheme: ThemeProps = {
lightTheme: createTheme({
background: "oklch(0.98 0.01 250)",
interactiveAccentDefault: "oklch(0.55 0.18 255)",
chatUserResponseBg: "oklch(0.55 0.18 255)",
chatUserResponseText: "oklch(0.99 0 0)",
radiusM: "10px",
fontBody: "Inter, system-ui, sans-serif",
}),
darkTheme: createTheme({
background: "oklch(0.16 0.02 255)",
interactiveAccentDefault: "oklch(0.72 0.14 255)",
chatUserResponseBg: "oklch(0.72 0.14 255)",
chatUserResponseText: "oklch(0.12 0.01 255)",
}),
};
const starters = [
{ displayText: "Summarize pipeline", prompt: "Summarize the current sales pipeline." },
];
<AgentInterface
llm={llm}
theme={companyChatTheme}
logoUrl="/brand/logo.svg"
agentName="Acme Assistant"
starters={starters}
starterVariant="long"
/>;ThemeProviderdisableThemeProvider.d.tspackage.jsonnpm view @openuidev/react-ui versionlatestnode_modules/@openuidev/*https://github.com/thesysdev/openuihttps://github.com/thesysdev/openui/tree/main/packageshttps://github.com/thesysdev/openui/tree/main/exampleshttps://www.openui.com/llms.txthttps://www.openui.com/llms-full.txthttps://www.openui.com/docs/openui-lang/specification-v05https://www.openui.com/docs/openui-lang/syntaxhttps://www.openui.com/docs/openui-lang/defining-componentshttps://www.openui.com/docs/openui-lang/rendererhttps://www.openui.com/docs/openui-lang/reactive-statehttps://www.openui.com/docs/openui-lang/queries-mutationshttps://www.openui.com/docs/openui-lang/builtinshttps://www.openui.com/docs/agent/getting-started/quickstarthttps://www.openui.com/docs/agent/getting-started/openui-cloudhttps://www.openui.com/docs/agent/core-concepts/conversationshttps://www.openui.com/docs/agent/core-concepts/toolshttps://www.openui.com/docs/agent/core-concepts/artifactshttps://www.openui.com/docs/agent/core-concepts/generative-uihttps://www.openui.com/docs/agent/reference/agentinterface-propshttps://www.openui.com/docs/agent/reference/adapters-and-formatshttps://www.openui.com/docs/agent/reference/self-hostinghttps://www.openui.com/docs/agent/reference/define-artifact-rendererhttps://www.openui.com/docs/agent/guides/custom-artifactshttps://www.openui.com/docs/api-reference/cli.d.tspackage.jsonlatestnpm view @openuidev/react-ui versionnode_modules/@openuidev/*https://github.com/thesysdev/openuihttps://github.com/thesysdev/openui/tree/main/packageshttps://github.com/thesysdev/openui/tree/main/exampleshttps://www.openui.com/llms.txthttps://www.openui.com/llms-full.txthttps://www.openui.com/docs/openui-lang/specification-v05https://www.openui.com/docs/openui-lang/syntaxhttps://www.openui.com/docs/openui-lang/defining-componentshttps://www.openui.com/docs/openui-lang/rendererhttps://www.openui.com/docs/openui-lang/reactive-statehttps://www.openui.com/docs/openui-lang/queries-mutationshttps://www.openui.com/docs/openui-lang/builtinshttps://www.openui.com/docs/agent/getting-started/quickstarthttps://www.openui.com/docs/agent/getting-started/openui-cloudhttps://www.openui.com/docs/agent/core-concepts/conversationshttps://www.openui.com/docs/agent/core-concepts/toolshttps://www.openui.com/docs/agent/core-concepts/artifactshttps://www.openui.com/docs/agent/core-concepts/generative-uihttps://www.openui.com/docs/agent/reference/agentinterface-propshttps://www.openui.com/docs/agent/reference/adapters-and-formatshttps://www.openui.com/docs/agent/reference/self-hostinghttps://www.openui.com/docs/agent/reference/define-artifact-rendererhttps://www.openui.com/docs/agent/guides/custom-artifactshttps://www.openui.com/docs/api-reference/cli