@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.
Files changed (74) hide show
  1. package/README.md +26 -0
  2. package/dist/commands/agents.d.ts +31 -0
  3. package/dist/commands/agents.js +478 -0
  4. package/dist/commands/agents.js.map +1 -0
  5. package/dist/commands/connect.d.ts +18 -1
  6. package/dist/commands/connect.js +154 -74
  7. package/dist/commands/connect.js.map +1 -1
  8. package/dist/commands/connections.d.ts +9 -0
  9. package/dist/commands/connections.js +161 -0
  10. package/dist/commands/connections.js.map +1 -0
  11. package/dist/commands/data.d.ts +43 -0
  12. package/dist/commands/data.js +387 -0
  13. package/dist/commands/data.js.map +1 -0
  14. package/dist/commands/finish.js +41 -8
  15. package/dist/commands/finish.js.map +1 -1
  16. package/dist/commands/infra.d.ts +21 -0
  17. package/dist/commands/infra.js +262 -0
  18. package/dist/commands/infra.js.map +1 -0
  19. package/dist/commands/init.js +188 -10
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/knowledge.d.ts +36 -0
  22. package/dist/commands/knowledge.js +123 -0
  23. package/dist/commands/knowledge.js.map +1 -0
  24. package/dist/commands/openclaw.d.ts +2 -0
  25. package/dist/commands/openclaw.js +300 -23
  26. package/dist/commands/openclaw.js.map +1 -1
  27. package/dist/commands/pods.d.ts +17 -0
  28. package/dist/commands/pods.js +371 -0
  29. package/dist/commands/pods.js.map +1 -0
  30. package/dist/commands/status.d.ts +14 -1
  31. package/dist/commands/status.js +78 -220
  32. package/dist/commands/status.js.map +1 -1
  33. package/dist/commands/update.d.ts +11 -2
  34. package/dist/commands/update.js +116 -5
  35. package/dist/commands/update.js.map +1 -1
  36. package/dist/index.js +370 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/agents-config.d.ts +20 -0
  39. package/dist/lib/agents-config.js +45 -0
  40. package/dist/lib/agents-config.js.map +1 -0
  41. package/dist/lib/auth.d.ts +4 -0
  42. package/dist/lib/auth.js +4 -0
  43. package/dist/lib/auth.js.map +1 -1
  44. package/dist/lib/browser-auth.d.ts +35 -0
  45. package/dist/lib/browser-auth.js +170 -0
  46. package/dist/lib/browser-auth.js.map +1 -0
  47. package/dist/lib/hub-client.d.ts +17 -0
  48. package/dist/lib/hub-client.js +115 -0
  49. package/dist/lib/hub-client.js.map +1 -0
  50. package/dist/lib/openclaw.js +30 -19
  51. package/dist/lib/openclaw.js.map +1 -1
  52. package/dist/lib/pod.d.ts +32 -1
  53. package/dist/lib/pod.js +121 -9
  54. package/dist/lib/pod.js.map +1 -1
  55. package/dist/lib/skills-installer.d.ts +18 -0
  56. package/dist/lib/skills-installer.js +97 -0
  57. package/dist/lib/skills-installer.js.map +1 -0
  58. package/dist/lib/targets.d.ts +65 -0
  59. package/dist/lib/targets.js +673 -0
  60. package/dist/lib/targets.js.map +1 -0
  61. package/package.json +5 -3
  62. package/skills/README.md +91 -0
  63. package/skills/synap/README.md +76 -0
  64. package/skills/synap/SKILL.md +882 -0
  65. package/skills/synap/capture.md +170 -0
  66. package/skills/synap/governance.md +206 -0
  67. package/skills/synap/linking.md +128 -0
  68. package/skills/synap/scripts/orient.sh +28 -0
  69. package/skills/synap-schema/SKILL.md +231 -0
  70. package/skills/synap-schema/property-types.md +228 -0
  71. package/skills/synap-ui/SKILL.md +295 -0
  72. package/skills/synap-ui/bento-recipes.md +608 -0
  73. package/skills/synap-ui/view-types.md +259 -0
  74. 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.