Libraries、内置组件与自定义组件
OpenUI Library 是 Agent 与 client 之间的 contract。它描述 Agent 可以写出的 component calls,提供解析和 prompt 生成所需的 JSON Schema,并把每个允许的名称 映射到可信的 ReactLynx renderer。
这篇指南介绍默认 Library、其中 26 个内置组件,以及新增或替换组件的流程。
Library 包含什么
每个 component definition 有四部分:
- 稳定的 OpenUI component
name; - 一个 Zod object schema,字段顺序决定位置参数顺序;
- 一段用于 generated prompt 的简短
description; - 可信的 ReactLynx
component实现。
createOpenUiLibrary() 把这些 definitions 组合成带以下成员的 Library:
默认 Library 应只创建一次,并保持对象 identity 稳定:
内置组件
createOpenUiLibrary() 包含以下组件。它们也从
@lynx-js/genui/openui/catalog 导出。
布局
内容
按钮
数据展示与媒体
浮层
输入
RadioGroup、Slider 和 TextField 使用 @lynx-js/lynx-ui;generated UI
允许使用这些组件时,需要添加该 peer dependency。
完整、最新的位置参数签名和 live preview 见 OpenUI Catalog。Schema 是唯一事实来源: 可选参数只能从右侧开始省略,也不支持 named-argument syntax。
OpenUI component 语法
组件 Zod object 中的字段顺序,就是 wire-level 位置参数顺序。例如内置 Stack
schema 依次以 children、direction、wrap、gap、align 和 justify
开头,因此下面的写法合法:
下面不是合法的 OpenUI Lang:
Child components 也是 values。它们既可以声明为具名 statements,也可以在 parent schema 允许时 inline 使用:
添加自定义组件
如果应用还没有直接依赖 Zod,先安装:
用稳定名称、有序 prop schema、prompt description 和 ReactLynx renderer 定义
组件。样式应放进 CSS class,而不是 inline style object;可见文本必须包在
<text> 中。
Agent 现在可以输出:
调用方提供的 components 和 groups 会追加在默认值后。如果自定义组件与内置组件
同名,后加入的自定义 definition 会覆盖 components map 中的默认值。这应当被
视为一次有意 override,并且 prompt 侧 schema 必须与它保持一致。
渲染嵌套 component values
如果自定义 prop 接受 child components,请使用 component render contract 中的
renderNode。它会通过 active Library 递归渲染 elements、arrays 和 primitive
values。
不要在自定义组件里调用 generated functions,也不要执行 generated strings。让 OpenUI parser/runtime 在 props 到达 renderer 前完成表达式求值。
交互组件使用的 runtime hooks
自定义组件可以使用 @lynx-js/genui/openui 导出的 hooks:
这些 hooks 都必须运行在 <OpenUiRenderer> 下方。交互组件应遵守
isStreaming,防止用户操作尚未完成的模型 response。
JSON Schema 与 parser utilities
在 renderer 外解析或检查 OpenUI 时,可以使用 Library schema:
流式文本使用 createStreamingParser。如果 UI 保存累计 response,可以调用
set(fullText);如果只传新增 delta,则调用 push(chunk)。
如果同一 response 已经交给 renderer,优先使用它的 onParseResult callback,避免
为了检查 root、stateDeclarations、data statements 或 meta diagnostics 而
创建第二个 parser。
保持 Agent contract 一致
只把组件加入 ReactLynx Library 还不够:Agent 必须收到相同的名称、位置 schema
和描述。默认 prompt 入口刻意保持 headless,使 server code 不需要导入 ReactLynx
或组件 CSS。使用自定义组件时,需要定义匹配的 headless prompt entries,并传给
buildOpenUiSystemPrompt。
完整 CLI 与程序化流程见 System Prompts。

