You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e0253ce
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: content/docs/references/api/metadata.mdx
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -95,6 +95,7 @@ const result = AppDefinitionResponseSchema.parse(data);
95
95
|**navigation**|`({ id: string; label?: string \| Record<string, string>; icon?: string; order?: number; … } \| { type: 'separator'; id?: string; order?: number } \| … +8 more)[]`| optional | Full navigation tree for the app sidebar |
96
96
|**areas**|`{ id: string; label: string \| Record<string, string>; icon?: string; description?: string \| Record<string, string>; … }[]`| optional | Navigation areas for partitioning navigation by business domain |
97
97
|**contextSelectors**|`{ id: string; label: string \| Record<string, string>; icon?: string; optionsSource: object; … }[]`| optional | App-level scope dropdowns whose value is injected into nav items as `{<id>}` template vars |
98
+
|**landing**|`{ item: string; visible: string \| object }[]`| optional |[PLANNED — not yet rendered] Per-audience landing: the first entry whose `visible` (CEL) holds for the reader names the navigation entry (`item`, an `id` of this app's own `navigation` or `areas[].navigation`) the app opens on. An `item` that names no entry of this app, or a `group` / `separator` / `action` entry, is refused at parse. No match, or no key: the app opens on its first navigation item by `order`, as before. No console reads this list yet, so until the landing redirect ships every reader still opens on the first navigation item. |
98
99
|**requiredPermissions**|`string[]`| optional | Permissions required to access this app |
99
100
|**defaultAgent**|`string`| optional | Platform agent bound to this app's ambient chat ('ask' is the implicit default; 'build' for authoring surfaces) — ADR-0063 §1 |
description: "App schemas of the ObjectStack UI Protocol: ActionNavItem, App, AppBranding and 12 more — each property with its type, default and a TypeScript example."
4
+
description: "App schemas of the ObjectStack UI Protocol: ActionNavItem, App, AppBranding and 13 more — each property with its type, default and a TypeScript example."
5
5
---
6
6
7
7
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -13,8 +13,8 @@ description: "App schemas of the ObjectStack UI Protocol: ActionNavItem, App, Ap
@@ -78,6 +78,7 @@ const result = ActionNavItemSchema.parse(data);
78
78
|**navigation**|`({ id: string; label?: string \| Record<string, string>; icon?: string; order?: number; … } \| { type: 'separator'; id?: string; order?: number } \| … +8 more)[]`| optional | Full navigation tree for the app sidebar |
79
79
|**areas**|`{ id: string; label: string \| Record<string, string>; icon?: string; description?: string \| Record<string, string>; … }[]`| optional | Navigation areas for partitioning navigation by business domain |
80
80
|**contextSelectors**|`{ id: string; label: string \| Record<string, string>; icon?: string; optionsSource: object; … }[]`| optional | App-level scope dropdowns whose value is injected into nav items as `{<id>}` template vars |
81
+
|**landing**|`{ item: string; visible: string \| object }[]`| optional |[PLANNED — not yet rendered] Per-audience landing: the first entry whose `visible` (CEL) holds for the reader names the navigation entry (`item`, an `id` of this app's own `navigation` or `areas[].navigation`) the app opens on. An `item` that names no entry of this app, or a `group` / `separator` / `action` entry, is refused at parse. No match, or no key: the app opens on its first navigation item by `order`, as before. No console reads this list yet, so until the landing redirect ships every reader still opens on the first navigation item. |
81
82
|**requiredPermissions**|`string[]`| optional | Permissions required to access this app |
82
83
|**defaultAgent**|`string`| optional | Platform agent bound to this app's ambient chat ('ask' is the implicit default; 'build' for authoring surfaces) — ADR-0063 §1 |
@@ -303,6 +304,13 @@ Documentation entry on the app menu (ADR-0046). Targets a `book` and/or a `doc`
303
304
|**allValue**|`string`| optional (default: `""`) | Sentinel value meaning "no concrete selection yet" (empty string is almost always right) |
304
305
|**persist**|`Enum<'query' \| 'session' \| 'none'>`| optional (default: `"query"`) | Persist selection via URL query, sessionStorage, or not at all |
305
306
307
+
### Nested Shape: `App.landing[number]`
308
+
309
+
| Property | Type | Required | Description |
310
+
| :--- | :--- | :--- | :--- |
311
+
|**item**|`string`| ✅ | Id of the app's own navigation entry this audience lands on (any depth of `navigation` or `areas[].navigation`). Refused at parse when no such entry exists, or when it is a `group`, `separator` or `action` entry, which open nothing. |
312
+
|**visible**|`string \| { dialect: Enum<'cel' \| 'cron' \| 'template'>; source: string; ast?: any; meta?: object }`| ✅ | Audience predicate (CEL), the dialect of a navigation entry's `visible`, e.g. P`'service_agent' in current_user.positions`. Required. It reads the signed-in reader (`current_user`, `features`); there is no `data` here, and a `visible` that reads `data` is refused at parse. |
313
+
306
314
### Nested Shape: `App.protection`
307
315
308
316
| Property | Type | Required | Description |
@@ -358,6 +366,18 @@ Documentation entry on the app menu (ADR-0046). Targets a `book` and/or a `doc`
|**item**|`string`| ✅ | Id of the app's own navigation entry this audience lands on (any depth of `navigation` or `areas[].navigation`). Refused at parse when no such entry exists, or when it is a `group`, `separator` or `action` entry, which open nothing. |
378
+
|**visible**|`string \| { dialect: Enum<'cel' \| 'cron' \| 'template'>; source: string; ast?: any; meta?: object }`| ✅ | Audience predicate (CEL), the dialect of a navigation entry's `visible`, e.g. P`'service_agent' in current_user.positions`. Required. It reads the signed-in reader (`current_user`, `features`); there is no `data` here, and a `visible` that reads `data` is refused at parse. |
0 commit comments