@synap-core/cli 1.2.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/commands/agents.d.ts +31 -0
- package/dist/commands/agents.js +478 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/connect.d.ts +18 -1
- package/dist/commands/connect.js +154 -74
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.d.ts +9 -0
- package/dist/commands/connections.js +161 -0
- package/dist/commands/connections.js.map +1 -0
- package/dist/commands/data.d.ts +43 -0
- package/dist/commands/data.js +387 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/finish.js +41 -8
- package/dist/commands/finish.js.map +1 -1
- package/dist/commands/infra.d.ts +21 -0
- package/dist/commands/infra.js +262 -0
- package/dist/commands/infra.js.map +1 -0
- package/dist/commands/init.js +188 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +36 -0
- package/dist/commands/knowledge.js +123 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/openclaw.d.ts +2 -0
- package/dist/commands/openclaw.js +300 -23
- package/dist/commands/openclaw.js.map +1 -1
- package/dist/commands/pods.d.ts +17 -0
- package/dist/commands/pods.js +371 -0
- package/dist/commands/pods.js.map +1 -0
- package/dist/commands/status.d.ts +14 -1
- package/dist/commands/status.js +78 -220
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +11 -2
- package/dist/commands/update.js +116 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +370 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agents-config.d.ts +20 -0
- package/dist/lib/agents-config.js +45 -0
- package/dist/lib/agents-config.js.map +1 -0
- package/dist/lib/auth.d.ts +4 -0
- package/dist/lib/auth.js +4 -0
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/browser-auth.d.ts +35 -0
- package/dist/lib/browser-auth.js +170 -0
- package/dist/lib/browser-auth.js.map +1 -0
- package/dist/lib/hub-client.d.ts +17 -0
- package/dist/lib/hub-client.js +115 -0
- package/dist/lib/hub-client.js.map +1 -0
- package/dist/lib/openclaw.js +30 -19
- package/dist/lib/openclaw.js.map +1 -1
- package/dist/lib/pod.d.ts +32 -1
- package/dist/lib/pod.js +121 -9
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/skills-installer.d.ts +18 -0
- package/dist/lib/skills-installer.js +97 -0
- package/dist/lib/skills-installer.js.map +1 -0
- package/dist/lib/targets.d.ts +65 -0
- package/dist/lib/targets.js +673 -0
- package/dist/lib/targets.js.map +1 -0
- package/package.json +5 -3
- package/skills/README.md +91 -0
- package/skills/synap/README.md +76 -0
- package/skills/synap/SKILL.md +882 -0
- package/skills/synap/capture.md +170 -0
- package/skills/synap/governance.md +206 -0
- package/skills/synap/linking.md +128 -0
- package/skills/synap/scripts/orient.sh +28 -0
- package/skills/synap-schema/SKILL.md +231 -0
- package/skills/synap-schema/property-types.md +228 -0
- package/skills/synap-ui/SKILL.md +295 -0
- package/skills/synap-ui/bento-recipes.md +608 -0
- package/skills/synap-ui/view-types.md +259 -0
- package/skills/synap-ui/widget-catalog.md +305 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# View types — reference
|
|
2
|
+
|
|
3
|
+
Each view type has its own `config` shape. This file covers the 12 implemented types with their required/optional fields.
|
|
4
|
+
|
|
5
|
+
All views share a base shape:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
{
|
|
9
|
+
name: string,
|
|
10
|
+
type: ViewType,
|
|
11
|
+
profileSlug?: string, // which entity profile to query (required for entity views)
|
|
12
|
+
description?: string,
|
|
13
|
+
config: ViewTypeConfig // type-specific, see below
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Common sub-objects:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
// Filter — combine in arrays for AND; use { or: [...] } for OR
|
|
21
|
+
type Filter = {
|
|
22
|
+
property: string;
|
|
23
|
+
op:
|
|
24
|
+
| "eq"
|
|
25
|
+
| "neq"
|
|
26
|
+
| "gt"
|
|
27
|
+
| "gte"
|
|
28
|
+
| "lt"
|
|
29
|
+
| "lte"
|
|
30
|
+
| "in"
|
|
31
|
+
| "nin"
|
|
32
|
+
| "contains"
|
|
33
|
+
| "exists";
|
|
34
|
+
value: unknown;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Sort
|
|
38
|
+
type Sort = { property: string; direction: "asc" | "desc" };
|
|
39
|
+
|
|
40
|
+
// Column (for tabular views)
|
|
41
|
+
type Column = { slug: string; width?: number; label?: string };
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## `table`
|
|
47
|
+
|
|
48
|
+
Dense data. Sort, filter, resize columns.
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
config: {
|
|
52
|
+
columns: Column[],
|
|
53
|
+
filters?: Filter[],
|
|
54
|
+
sort?: Sort[],
|
|
55
|
+
pageSize?: number, // default 50
|
|
56
|
+
groupBy?: { property: string } // optional row grouping
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Best for: tasks with many fields, deals with pipeline data, contacts with CRM attributes.
|
|
61
|
+
|
|
62
|
+
## `list`
|
|
63
|
+
|
|
64
|
+
Scan-friendly rows. Shows title + 2–3 properties per row.
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
config: {
|
|
68
|
+
primaryField: string, // usually "title"
|
|
69
|
+
secondaryFields: string[], // 2–3 properties shown as meta
|
|
70
|
+
filters?: Filter[],
|
|
71
|
+
sort?: Sort[]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Best for: tasks, notes, messages, action items.
|
|
76
|
+
|
|
77
|
+
## `grid`
|
|
78
|
+
|
|
79
|
+
Uniform card grid.
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
config: {
|
|
83
|
+
cardFields: string[], // properties shown on each card
|
|
84
|
+
filters?: Filter[],
|
|
85
|
+
sort?: Sort[],
|
|
86
|
+
density?: "compact" | "comfortable" | "spacious"
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Best for: mixed content where title + 2 properties is enough.
|
|
91
|
+
|
|
92
|
+
## `gallery`
|
|
93
|
+
|
|
94
|
+
Image-forward cards. Requires a property that holds an image URL.
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
config: {
|
|
98
|
+
imageProperty: string, // e.g., "thumbnail", "favicon", "cover"
|
|
99
|
+
titleProperty?: string, // default "title"
|
|
100
|
+
captionProperty?: string,
|
|
101
|
+
filters?: Filter[],
|
|
102
|
+
sort?: Sort[]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Best for: articles, bookmarks, products, books, photos.
|
|
107
|
+
|
|
108
|
+
## `kanban`
|
|
109
|
+
|
|
110
|
+
Status pipeline. Requires `groupBy` on an enum/status property.
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
config: {
|
|
114
|
+
groupBy: { property: string }, // MUST be set — column grouping
|
|
115
|
+
cardFields: string[],
|
|
116
|
+
filters?: Filter[],
|
|
117
|
+
sort?: Sort[],
|
|
118
|
+
columnOrder?: string[] // force column order
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Best for: tasks by status, deals by stage, drafts by workflow step.
|
|
123
|
+
|
|
124
|
+
## `matrix`
|
|
125
|
+
|
|
126
|
+
2-axis grid. Requires two `groupBy` properties.
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
config: {
|
|
130
|
+
xAxis: { property: string, buckets?: string[] | number[] },
|
|
131
|
+
yAxis: { property: string, buckets?: string[] | number[] },
|
|
132
|
+
cardFields?: string[],
|
|
133
|
+
filters?: Filter[]
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Best for: priority × urgency (Eisenhower), effort × impact, stage × owner.
|
|
138
|
+
|
|
139
|
+
## `masonry` / `feed`
|
|
140
|
+
|
|
141
|
+
Pinterest-style, variable-size cards. Default for Library.
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
config: {
|
|
145
|
+
cardFields: string[],
|
|
146
|
+
filters?: Filter[],
|
|
147
|
+
sort?: Sort[],
|
|
148
|
+
variableHeight: true // cards size themselves to content
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Best for: mixed content types, inspiration boards, library browsing.
|
|
153
|
+
|
|
154
|
+
## `calendar`
|
|
155
|
+
|
|
156
|
+
Date-indexed. Requires a date property.
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
config: {
|
|
160
|
+
dateProperty: string, // e.g., "dueDate", "startDate"
|
|
161
|
+
endDateProperty?: string, // for events with duration
|
|
162
|
+
view?: "month" | "week" | "day" | "agenda",
|
|
163
|
+
titleProperty?: string,
|
|
164
|
+
colorBy?: { property: string },
|
|
165
|
+
filters?: Filter[]
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Best for: events, tasks with dueDate, drafts with publishDate.
|
|
170
|
+
|
|
171
|
+
## `flow`
|
|
172
|
+
|
|
173
|
+
Node-edge graph. Fully custom — mostly used for automations and mindmaps.
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
config: {
|
|
177
|
+
nodes: { id, type, position: {x,y}, data }[],
|
|
178
|
+
edges: { id, source, target, type? }[],
|
|
179
|
+
fitView?: boolean
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Best for: automations, workflow diagrams, mind maps, decision trees. Usually populated programmatically by the automation builder, not hand-authored.
|
|
184
|
+
|
|
185
|
+
## `bento`
|
|
186
|
+
|
|
187
|
+
A mixed composition of cells. See `widget-catalog.md` and `bento-recipes.md` for block kinds and ready-to-use layouts.
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
config: {
|
|
191
|
+
blocks: BentoBlock[], // see bento section
|
|
192
|
+
gridColumns?: 12, // default 12
|
|
193
|
+
rowHeight?: number // px per grid row
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Best for: dashboards, workspace home pages, project overview pages.
|
|
198
|
+
|
|
199
|
+
## `branch_tree`
|
|
200
|
+
|
|
201
|
+
Hierarchical data with parent-child relationships.
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
config: {
|
|
205
|
+
parentProperty: string, // e.g., "parentTaskId", "parentProjectId"
|
|
206
|
+
titleProperty?: string,
|
|
207
|
+
cardFields?: string[],
|
|
208
|
+
expandDepth?: number // default 2
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Best for: projects with subtasks, topic hierarchies, org charts, file trees.
|
|
213
|
+
|
|
214
|
+
## `whiteboard`
|
|
215
|
+
|
|
216
|
+
Free-form canvas. Sparse config — most state is in the canvas itself.
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
config: {
|
|
220
|
+
canvasId: string, // links to the yjs doc
|
|
221
|
+
defaultTool?: "pen" | "rect" | "arrow" | "text"
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Best for: brainstorming, sketches, visual thinking. Rarely generated by AI — user-authored.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Picking a view type
|
|
230
|
+
|
|
231
|
+
Work from the data, not from the request:
|
|
232
|
+
|
|
233
|
+
| User says | Look at data | Pick |
|
|
234
|
+
| ------------------------------- | ------------------------------------ | ------------------------------------------------------ |
|
|
235
|
+
| "track tasks" | has `status` (enum) | `kanban` |
|
|
236
|
+
| "what's due this week" | has `dueDate` | `calendar` |
|
|
237
|
+
| "my reading list" | articles / bookmarks with thumbnails | `gallery` |
|
|
238
|
+
| "dashboard for X" | mixed data, 4+ types of info | `bento` |
|
|
239
|
+
| "pipeline", "stages" | has ordered enum property | `kanban` |
|
|
240
|
+
| "roadmap", "timeline" | has start + end dates | defer (unsupported) — use `calendar` or `list` grouped |
|
|
241
|
+
| "team directory" | people with photos | `gallery` |
|
|
242
|
+
| "urgent vs. important" | has 2 enum dimensions | `matrix` |
|
|
243
|
+
| "project hierarchy" | has parent-child relation | `branch_tree` |
|
|
244
|
+
| "everything", "library" | mixed profiles | `masonry`/`feed` or `bento` |
|
|
245
|
+
| "data", "database", "inventory" | dense, many columns | `table` |
|
|
246
|
+
|
|
247
|
+
If in doubt: `list` is the safe default for any entity type. Always better than guessing wrong.
|
|
248
|
+
|
|
249
|
+
## Updating vs. creating
|
|
250
|
+
|
|
251
|
+
- `POST /views` — create new view (auto-approved for agents)
|
|
252
|
+
- `PATCH /views/:viewId` — update config (proposal-gated by default; the user owns their views)
|
|
253
|
+
- `POST /views/:viewId/arrange` — bento-specific, rearrange blocks (auto-approved)
|
|
254
|
+
|
|
255
|
+
When the user says "change my kanban to group by priority instead of status," that's a PATCH — expect a proposal. Explain this to the user.
|
|
256
|
+
|
|
257
|
+
## Multiple views over the same data
|
|
258
|
+
|
|
259
|
+
Views are cheap. A single `task` profile can have 10 views: kanban by status, kanban by project, calendar by dueDate, list of overdue, matrix priority × urgency, gallery of completed. Each view is one `POST /views` call. Don't try to make one mega-view that satisfies every need.
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# Widget catalog — reference
|
|
2
|
+
|
|
3
|
+
Widgets (cells) are the universal rendering unit. A bento is composed of cells. Views embed cells. Side panels host cells.
|
|
4
|
+
|
|
5
|
+
**Never guess a widget kind.** Always call `GET /api/hub/widget-definitions?workspaceId={workspaceId}` first — the response is the authoritative registry for what's installed.
|
|
6
|
+
|
|
7
|
+
This file is a categorized snapshot of what typically exists in a Synap pod. Use it for planning ("can I build X?") — but verify against the registry before committing.
|
|
8
|
+
|
|
9
|
+
## How widget references work in bentos
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"id": "block-123",
|
|
14
|
+
"kind": "widget",
|
|
15
|
+
"widgetKind": "stat-card",
|
|
16
|
+
"config": {
|
|
17
|
+
/* widget-specific, see configSchema in registry */
|
|
18
|
+
},
|
|
19
|
+
"layout": { "x": 0, "y": 0, "w": 4, "h": 2 }
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`widgetKind` is a string matching a registered cell. `config` must validate against the cell's `configSchema` (returned by `/widget-definitions`).
|
|
24
|
+
|
|
25
|
+
## Categories
|
|
26
|
+
|
|
27
|
+
The registry tags each widget with a category:
|
|
28
|
+
|
|
29
|
+
- `core` — universal layout primitives (stat, section-header, quick-access)
|
|
30
|
+
- `data` — entity-driven (entity-card, entity-gallery, view embeds)
|
|
31
|
+
- `ai` — AI outputs (proactive cards, proposals, chat)
|
|
32
|
+
- `entity` — entity-detail views and editors
|
|
33
|
+
- `communication` — channels, threads, messages
|
|
34
|
+
- `governance` — proposals, approvals
|
|
35
|
+
- `content` — documents, articles, rich media
|
|
36
|
+
|
|
37
|
+
## Core widgets (layout primitives — always available)
|
|
38
|
+
|
|
39
|
+
### `stat-card`
|
|
40
|
+
|
|
41
|
+
Single metric on a card. Best for top-of-dashboard KPIs.
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"widgetKind": "stat-card",
|
|
46
|
+
"config": {
|
|
47
|
+
"label": "Tasks completed this week",
|
|
48
|
+
"metric": "count",
|
|
49
|
+
"filter": {
|
|
50
|
+
"profileSlug": "task",
|
|
51
|
+
"properties.status": "done",
|
|
52
|
+
"updatedAt.gte": "this-week"
|
|
53
|
+
},
|
|
54
|
+
"trend": true, // show vs. last period
|
|
55
|
+
"icon": "check-circle"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `section-header`
|
|
61
|
+
|
|
62
|
+
Title + optional subtitle. Separator for bento rows.
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"widgetKind": "section-header",
|
|
67
|
+
"config": { "title": "This week", "subtitle": "Updated just now" }
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### `quick-access`
|
|
72
|
+
|
|
73
|
+
Shortcut grid — a row of entity or view pins.
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"widgetKind": "quick-access",
|
|
78
|
+
"config": {
|
|
79
|
+
"items": [
|
|
80
|
+
{ "kind": "view", "viewId": "...", "label": "Inbox" },
|
|
81
|
+
{
|
|
82
|
+
"kind": "entity",
|
|
83
|
+
"entityId": "ent_project_...",
|
|
84
|
+
"label": "Current project"
|
|
85
|
+
},
|
|
86
|
+
{ "kind": "url", "url": "https://...", "label": "Calendar" }
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `feed`
|
|
93
|
+
|
|
94
|
+
Activity feed — recent entity mutations, AI actions, proposals.
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"widgetKind": "feed",
|
|
99
|
+
"config": {
|
|
100
|
+
"sources": ["entity.create", "entity.update", "proposal.approved"],
|
|
101
|
+
"limit": 20,
|
|
102
|
+
"filter": { "profileSlug": ["task", "note"] } // optional
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### `inbox`
|
|
108
|
+
|
|
109
|
+
Unread + actionable items. Proposals, mentions, due tasks.
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"widgetKind": "inbox",
|
|
114
|
+
"config": { "categories": ["proposals", "mentions", "due_today"] }
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Data widgets
|
|
119
|
+
|
|
120
|
+
### `entity-card`
|
|
121
|
+
|
|
122
|
+
One entity, rich rendering.
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"widgetKind": "entity-card",
|
|
127
|
+
"config": {
|
|
128
|
+
"entityId": "ent_...",
|
|
129
|
+
"fields": ["title", "status", "dueDate", "assignee"],
|
|
130
|
+
"showRelations": true
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### `entity-gallery`
|
|
136
|
+
|
|
137
|
+
Gallery of entities filtered by a query.
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"widgetKind": "entity-gallery",
|
|
142
|
+
"config": {
|
|
143
|
+
"profileSlug": "article",
|
|
144
|
+
"filters": [{ "property": "status", "op": "eq", "value": "unread" }],
|
|
145
|
+
"sort": [{ "property": "createdAt", "direction": "desc" }],
|
|
146
|
+
"limit": 12,
|
|
147
|
+
"imageProperty": "thumbnail"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### `entity-spotlight`
|
|
153
|
+
|
|
154
|
+
One featured entity, large format. Often the "current project" or "today's focus."
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"widgetKind": "entity-spotlight",
|
|
159
|
+
"config": { "entityId": "ent_...", "showDocument": true }
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### `view` (generic view embed)
|
|
164
|
+
|
|
165
|
+
Any saved view rendered inside a bento. Usually easier than configuring widgets individually.
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"kind": "view",
|
|
170
|
+
"viewId": "<savedViewId>",
|
|
171
|
+
"layout": { "x": 0, "y": 0, "w": 12, "h": 6 }
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Note: `{ "kind": "view", "viewId": … }` is a bento block type, not a widget. Use it when you have a saved view and just want to embed it.
|
|
176
|
+
|
|
177
|
+
### `view-kanban` / `view-table` / `view-calendar` / `view-grid` / `view-list`
|
|
178
|
+
|
|
179
|
+
Inline view configs — no saved view required. Good for one-off dashboard pieces.
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"widgetKind": "view-kanban",
|
|
184
|
+
"config": {
|
|
185
|
+
"profileSlug": "task",
|
|
186
|
+
"groupBy": { "property": "status" },
|
|
187
|
+
"filters": [{ "property": "projectId", "op": "eq", "value": "ent_current" }]
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Entity widgets (for entity-detail pages / side panels)
|
|
193
|
+
|
|
194
|
+
- `entity-detail` — the full entity view (fields, properties, related)
|
|
195
|
+
- `document-editor` — rich markdown editor for a document
|
|
196
|
+
- `entity-relationships` — graph/list of connected entities
|
|
197
|
+
- `entity-properties` — the properties panel (forms)
|
|
198
|
+
|
|
199
|
+
Mostly used inside entity pages, not bentos.
|
|
200
|
+
|
|
201
|
+
## AI widgets
|
|
202
|
+
|
|
203
|
+
### `proactive-feed`
|
|
204
|
+
|
|
205
|
+
AI nudges and insights the user's agents posted proactively.
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"widgetKind": "proactive-feed",
|
|
210
|
+
"config": { "limit": 10, "categories": ["insight", "nudge", "digest"] }
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### `morning-briefing` / `weekly-digest` / `health-check` / `insight`
|
|
215
|
+
|
|
216
|
+
Proactive cards rendered individually. Usually only appear after the Proactive Intelligence Layer has posted — not manually composed by an agent.
|
|
217
|
+
|
|
218
|
+
### `ai-chat`
|
|
219
|
+
|
|
220
|
+
Embedded chat surface targeting a specific channel.
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"widgetKind": "ai-chat",
|
|
225
|
+
"config": { "channelId": "ch_...", "mode": "compact" }
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### `recent-chats`
|
|
230
|
+
|
|
231
|
+
List of recent AI conversations.
|
|
232
|
+
|
|
233
|
+
### `agent-activity`
|
|
234
|
+
|
|
235
|
+
What the user's agents have been doing (actions, proposals, writes). Good for governance bentos.
|
|
236
|
+
|
|
237
|
+
## Governance widgets
|
|
238
|
+
|
|
239
|
+
- `proposals-list` — pending proposals needing review
|
|
240
|
+
- `proposal-detail` — single proposal card
|
|
241
|
+
- `proposal-timeline` — history of proposal approvals/rejections
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"widgetKind": "proposals-list",
|
|
246
|
+
"config": { "status": "pending", "limit": 10 }
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Communication widgets
|
|
251
|
+
|
|
252
|
+
- `channel` — full channel (messages + composer)
|
|
253
|
+
- `channel-navigator` — sidebar-style channel list
|
|
254
|
+
- `channel-view` — read-only channel embed
|
|
255
|
+
- `channel-feed` — activity-style feed of messages
|
|
256
|
+
|
|
257
|
+
## Intelligence widgets (Intelligence Service specific)
|
|
258
|
+
|
|
259
|
+
- `service-status` — IS health
|
|
260
|
+
- `usage` — token consumption, model usage
|
|
261
|
+
- `agents` — registered agents list
|
|
262
|
+
- `agent-detail` — one agent's config
|
|
263
|
+
- `skills` — installed skills
|
|
264
|
+
- `tasks` — IS-managed tasks (not entities)
|
|
265
|
+
|
|
266
|
+
## Workflow widgets
|
|
267
|
+
|
|
268
|
+
- `workflow-list` — all automations
|
|
269
|
+
- `automation-detail` / `automation-flow` / `automation-status`
|
|
270
|
+
- `command-detail` — one command config
|
|
271
|
+
- `trigger-button` — a button that runs a command
|
|
272
|
+
- `run-history` — past automation runs
|
|
273
|
+
|
|
274
|
+
## Layout guidelines
|
|
275
|
+
|
|
276
|
+
The bento grid is 12 columns. Typical widget sizes:
|
|
277
|
+
|
|
278
|
+
| Widget | Typical `w`, `h` |
|
|
279
|
+
| ------------------ | ---------------- |
|
|
280
|
+
| `stat-card` | 3×2 |
|
|
281
|
+
| `section-header` | 12×1 |
|
|
282
|
+
| `quick-access` | 6×2 or 12×2 |
|
|
283
|
+
| `view-kanban` | 8×4 or 12×6 |
|
|
284
|
+
| `view-calendar` | 8×4 or 12×6 |
|
|
285
|
+
| `entity-spotlight` | 4×4 |
|
|
286
|
+
| `entity-gallery` | 6×4 or 12×4 |
|
|
287
|
+
| `feed` / `inbox` | 4×6 or 6×6 |
|
|
288
|
+
| `proactive-feed` | 4×6 |
|
|
289
|
+
| `proposals-list` | 6×4 |
|
|
290
|
+
| `agent-activity` | 6×4 |
|
|
291
|
+
|
|
292
|
+
Rules of thumb:
|
|
293
|
+
|
|
294
|
+
- Don't make anything shorter than 2 rows (too cramped).
|
|
295
|
+
- Tall narrow feeds (4×6) work better than short wide ones.
|
|
296
|
+
- Put `section-header` (12×1) as the first row of a visual group.
|
|
297
|
+
- Limit a bento to 8–12 blocks. Past that, split into a second bento or a dedicated view.
|
|
298
|
+
|
|
299
|
+
## Common mistakes
|
|
300
|
+
|
|
301
|
+
1. **Referencing a `widgetKind` that doesn't exist in the registry.** The bento will render an error block. Always fetch the registry first.
|
|
302
|
+
2. **Passing a `config` that doesn't match the widget's `configSchema`.** Returns a validation error; the widget shows "invalid config" in UI.
|
|
303
|
+
3. **Using a widget that depends on a missing profile.** If you use `entity-gallery` with `profileSlug: "podcast"` and `podcast` doesn't exist, the widget shows an empty state. Verify first.
|
|
304
|
+
4. **Overlapping layout rectangles.** react-grid-layout will resolve it by shifting blocks, but the output won't match your intent. Double-check `x + w <= 12` and no two blocks share the same cells.
|
|
305
|
+
5. **Putting an `ai-chat` widget on a dashboard.** It works but rarely what the user wants — the chat app is already one tab away. Reserve for edge cases like project-specific chat pinned to a project home.
|