Skip to content

Commit 631053a

Browse files
fix(docs): normalize OpenClaw OS route and regen prompts
Update the primary nav to use /openclaw-os and regenerate generated prompt/spec artifacts. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 75970b1 commit 631053a

4 files changed

Lines changed: 41 additions & 23 deletions

File tree

docs/components/site-primary-nav.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const PRIMARY_SITE_NAV_ITEMS = [
99
{ title: "Playground", href: "/playground", newTab: false },
1010
{ title: "Demo", href: "/demo/github", newTab: true },
1111
{ title: "Blogs", href: "/blog", newTab: false },
12-
{ title: "OpenClaw OS", href: "/Openclaw-OS", newTab: false, badge: "New" },
12+
{ title: "OpenClaw OS", href: "/openclaw-os", newTab: false, badge: "New" },
1313
] as const;
1414

1515
export function SitePrimaryNav() {

docs/generated/chat-system-prompt.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Separator(orientation?: "horizontal" | "vertical", decorative?: boolean) — Vis
3131

3232
### Tables
3333
Table(columns: Col[]) — Data table — column-oriented. Each Col holds its own data array.
34-
Col(label: string, data, type?: "string" | "number" | "action") — Column definition — holds label + data array
34+
Col(label: string, data: any, type?: "string" | "number" | "action") — Column definition — holds label + data array
3535

3636
### Charts (2D)
3737
BarChart(labels: string[], series: Series[], variant?: "grouped" | "stacked", xLabel?: string, yLabel?: string) — Vertical bars; use for comparing values across categories with one or more series
@@ -53,20 +53,20 @@ ScatterSeries(name: string, points: Point[]) — Named dataset
5353
Point(x: number, y: number, z?: number) — Data point with numeric coordinates
5454

5555
### Forms
56-
Form(name: string, buttons: Buttons, fields) — Form container with fields and explicit action buttons
56+
Form(name: string, buttons: Buttons, fields?: FormControl[]) — Form container with fields and explicit action buttons
5757
FormControl(label: string, input: Input | TextArea | Select | DatePicker | Slider | CheckBoxGroup | RadioGroup, hint?: string) — Field with label, input component, and optional hint text
5858
Label(text: string) — Text label
5959
Input(name: string, placeholder?: string, type?: "text" | "email" | "password" | "number" | "url", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
6060
TextArea(name: string, placeholder?: string, rows?: number, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
6161
Select(name: string, items: SelectItem[], placeholder?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
6262
SelectItem(value: string, label: string) — Option for Select
63-
DatePicker(name: string, mode?: "single" | "range", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)
63+
DatePicker(name: string, mode?: "single" | "range", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<any>)
6464
Slider(name: string, variant: "continuous" | "discrete", min: number, max: number, step?: number, defaultValue?: number[], label?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<number[]>) — Numeric slider input; supports continuous and discrete (stepped) variants
65-
CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)
65+
CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<Record<string, boolean>>)
6666
CheckBoxItem(label: string, description: string, name: string, defaultChecked?: boolean)
6767
RadioGroup(name: string, items: RadioItem[], defaultValue?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
6868
RadioItem(label: string, description: string, value: string)
69-
SwitchGroup(name: string, items: SwitchItem[], variant?: "clear" | "card" | "sunk", value?) — Group of switch toggles
69+
SwitchGroup(name: string, items: SwitchItem[], variant?: "clear" | "card" | "sunk", value?: $binding<Record<string, boolean>>) — Group of switch toggles
7070
SwitchItem(label?: string, description?: string, name: string, defaultChecked?: boolean) — Individual switch toggle
7171
- Define EACH FormControl as its own reference — do NOT inline all controls in one array.
7272
- NEVER nest Form inside Form.

docs/generated/playground-component-spec.json

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"description": "Data table — column-oriented. Each Col holds its own data array."
4747
},
4848
"Col": {
49-
"signature": "Col(label: string, data, type?: \"string\" | \"number\" | \"action\")",
49+
"signature": "Col(label: string, data: any, type?: \"string\" | \"number\" | \"action\")",
5050
"description": "Column definition — holds label + data array"
5151
},
5252
"BarChart": {
@@ -102,7 +102,7 @@
102102
"description": "Data point with numeric coordinates"
103103
},
104104
"Form": {
105-
"signature": "Form(name: string, buttons: Buttons, fields)",
105+
"signature": "Form(name: string, buttons: Buttons, fields?: FormControl[])",
106106
"description": "Form container with fields and explicit action buttons"
107107
},
108108
"FormControl": {
@@ -130,15 +130,15 @@
130130
"description": "Option for Select"
131131
},
132132
"DatePicker": {
133-
"signature": "DatePicker(name: string, mode?: \"single\" | \"range\", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)",
133+
"signature": "DatePicker(name: string, mode?: \"single\" | \"range\", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<any>)",
134134
"description": ""
135135
},
136136
"Slider": {
137137
"signature": "Slider(name: string, variant: \"continuous\" | \"discrete\", min: number, max: number, step?: number, defaultValue?: number[], label?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<number[]>)",
138138
"description": "Numeric slider input; supports continuous and discrete (stepped) variants"
139139
},
140140
"CheckBoxGroup": {
141-
"signature": "CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)",
141+
"signature": "CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<Record<string, boolean>>)",
142142
"description": ""
143143
},
144144
"CheckBoxItem": {
@@ -154,7 +154,7 @@
154154
"description": ""
155155
},
156156
"SwitchGroup": {
157-
"signature": "SwitchGroup(name: string, items: SwitchItem[], variant?: \"clear\" | \"card\" | \"sunk\", value?)",
157+
"signature": "SwitchGroup(name: string, items: SwitchItem[], variant?: \"clear\" | \"card\" | \"sunk\", value?: $binding<Record<string, boolean>>)",
158158
"description": "Group of switch toggles"
159159
},
160160
"SwitchItem": {
@@ -170,7 +170,7 @@
170170
"description": "Group of Button components. direction: \"row\" (default) | \"column\"."
171171
},
172172
"Stack": {
173-
"signature": "Stack([children], direction?: \"row\" | \"column\", gap?: \"none\" | \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"2xl\", align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\", justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\", wrap?: boolean)",
173+
"signature": "Stack(children: any[], direction?: \"row\" | \"column\", gap?: \"none\" | \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"2xl\", align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\", justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\", wrap?: boolean)",
174174
"description": "Flex container. direction: \"row\"|\"column\" (default \"column\"). gap: \"none\"|\"xs\"|\"s\"|\"m\"|\"l\"|\"xl\"|\"2xl\" (default \"m\"). align: \"start\"|\"center\"|\"end\"|\"stretch\"|\"baseline\". justify: \"start\"|\"center\"|\"end\"|\"between\"|\"around\"|\"evenly\"."
175175
},
176176
"Tabs": {
@@ -265,7 +265,10 @@
265265
},
266266
{
267267
"name": "Tables",
268-
"components": ["Table", "Col"],
268+
"components": [
269+
"Table",
270+
"Col"
271+
],
269272
"notes": [
270273
"- Table is COLUMN-oriented: Table([Col(\"Label\", dataArray), Col(\"Count\", countArray, \"number\")]). Use array pluck for data: data.rows.fieldName",
271274
"- Col data can be component arrays for styled cells: Col(\"Status\", @Each(data.rows, \"item\", Tag(item.status, null, \"sm\", item.status == \"open\" ? \"success\" : \"danger\")))",
@@ -295,7 +298,12 @@
295298
},
296299
{
297300
"name": "Charts (1D)",
298-
"components": ["PieChart", "RadialChart", "SingleStackedBarChart", "Slice"],
301+
"components": [
302+
"PieChart",
303+
"RadialChart",
304+
"SingleStackedBarChart",
305+
"Slice"
306+
],
299307
"notes": [
300308
"- PieChart and BarChart need NUMBERS, not objects. For list data, use @Count(@Filter(...)) to aggregate:",
301309
"- PieChart from list: `PieChart([\"Low\", \"Med\", \"High\"], [@Count(@Filter(data.rows, \"priority\", \"==\", \"low\")), @Count(@Filter(data.rows, \"priority\", \"==\", \"medium\")), @Count(@Filter(data.rows, \"priority\", \"==\", \"high\"))], \"donut\")`",
@@ -304,7 +312,11 @@
304312
},
305313
{
306314
"name": "Charts (Scatter)",
307-
"components": ["ScatterChart", "ScatterSeries", "Point"]
315+
"components": [
316+
"ScatterChart",
317+
"ScatterSeries",
318+
"Point"
319+
]
308320
},
309321
{
310322
"name": "Forms",
@@ -338,14 +350,20 @@
338350
},
339351
{
340352
"name": "Buttons",
341-
"components": ["Button", "Buttons"],
353+
"components": [
354+
"Button",
355+
"Buttons"
356+
],
342357
"notes": [
343358
"- Toggle in @Each: @Each(rows, \"t\", Button(t.status == \"open\" ? \"Close\" : \"Reopen\", Action([...])))"
344359
]
345360
},
346361
{
347362
"name": "Data Display",
348-
"components": ["TagBlock", "Tag"],
363+
"components": [
364+
"TagBlock",
365+
"Tag"
366+
],
349367
"notes": [
350368
"- Color-mapped Tag: Tag(value, null, \"sm\", value == \"high\" ? \"danger\" : value == \"medium\" ? \"warning\" : \"neutral\")"
351369
]

docs/generated/playground-system-prompt.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Props typed `ActionExpression` accept an Action([@steps...]) expression. See the
1818
Props marked `$binding<type>` accept a `$variable` reference for two-way binding.
1919

2020
### Layout
21-
Stack([children], direction?: "row" | "column", gap?: "none" | "xs" | "s" | "m" | "l" | "xl" | "2xl", align?: "start" | "center" | "end" | "stretch" | "baseline", justify?: "start" | "center" | "end" | "between" | "around" | "evenly", wrap?: boolean) — Flex container. direction: "row"|"column" (default "column"). gap: "none"|"xs"|"s"|"m"|"l"|"xl"|"2xl" (default "m"). align: "start"|"center"|"end"|"stretch"|"baseline". justify: "start"|"center"|"end"|"between"|"around"|"evenly".
21+
Stack(children: any[], direction?: "row" | "column", gap?: "none" | "xs" | "s" | "m" | "l" | "xl" | "2xl", align?: "start" | "center" | "end" | "stretch" | "baseline", justify?: "start" | "center" | "end" | "between" | "around" | "evenly", wrap?: boolean) — Flex container. direction: "row"|"column" (default "column"). gap: "none"|"xs"|"s"|"m"|"l"|"xl"|"2xl" (default "m"). align: "start"|"center"|"end"|"stretch"|"baseline". justify: "start"|"center"|"end"|"between"|"around"|"evenly".
2222
Tabs(items: TabItem[]) — Tabbed container
2323
TabItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps)[]) — value is unique id, trigger is tab label, content is array of components
2424
Accordion(items: AccordionItem[]) — Collapsible sections
@@ -53,7 +53,7 @@ CodeBlock(language: string, codeString: string) — Syntax-highlighted code bloc
5353

5454
### Tables
5555
Table(columns: Col[]) — Data table — column-oriented. Each Col holds its own data array.
56-
Col(label: string, data, type?: "string" | "number" | "action") — Column definition — holds label + data array
56+
Col(label: string, data: any, type?: "string" | "number" | "action") — Column definition — holds label + data array
5757
- Table is COLUMN-oriented: Table([Col("Label", dataArray), Col("Count", countArray, "number")]). Use array pluck for data: data.rows.fieldName
5858
- Col data can be component arrays for styled cells: Col("Status", @Each(data.rows, "item", Tag(item.status, null, "sm", item.status == "open" ? "success" : "danger")))
5959
- Row actions: Col("Actions", @Each(data.rows, "t", Button("Edit", Action([@Set($showEdit, true), @Set($editId, t.id)]))))
@@ -89,20 +89,20 @@ ScatterSeries(name: string, points: Point[]) — Named dataset
8989
Point(x: number, y: number, z?: number) — Data point with numeric coordinates
9090

9191
### Forms
92-
Form(name: string, buttons: Buttons, fields) — Form container with fields and explicit action buttons
92+
Form(name: string, buttons: Buttons, fields?: FormControl[]) — Form container with fields and explicit action buttons
9393
FormControl(label: string, input: Input | TextArea | Select | DatePicker | Slider | CheckBoxGroup | RadioGroup, hint?: string) — Field with label, input component, and optional hint text
9494
Label(text: string) — Text label
9595
Input(name: string, placeholder?: string, type?: "text" | "email" | "password" | "number" | "url", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
9696
TextArea(name: string, placeholder?: string, rows?: number, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
9797
Select(name: string, items: SelectItem[], placeholder?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
9898
SelectItem(value: string, label: string) — Option for Select
99-
DatePicker(name: string, mode?: "single" | "range", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)
99+
DatePicker(name: string, mode?: "single" | "range", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<any>)
100100
Slider(name: string, variant: "continuous" | "discrete", min: number, max: number, step?: number, defaultValue?: number[], label?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<number[]>) — Numeric slider input; supports continuous and discrete (stepped) variants
101-
CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?)
101+
CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<Record<string, boolean>>)
102102
CheckBoxItem(label: string, description: string, name: string, defaultChecked?: boolean)
103103
RadioGroup(name: string, items: RadioItem[], defaultValue?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)
104104
RadioItem(label: string, description: string, value: string)
105-
SwitchGroup(name: string, items: SwitchItem[], variant?: "clear" | "card" | "sunk", value?) — Group of switch toggles
105+
SwitchGroup(name: string, items: SwitchItem[], variant?: "clear" | "card" | "sunk", value?: $binding<Record<string, boolean>>) — Group of switch toggles
106106
SwitchItem(label?: string, description?: string, name: string, defaultChecked?: boolean) — Individual switch toggle
107107
- For Form fields, define EACH FormControl as its own reference — do NOT inline all controls in one array. This allows progressive field-by-field streaming.
108108
- NEVER nest Form inside Form — each Form should be a standalone container.

0 commit comments

Comments
 (0)