@synap-core/cli 1.6.1 → 1.7.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/dist/commands/data.js +16 -9
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/discover.d.ts +18 -0
- package/dist/commands/discover.js +71 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/knowledge.js +9 -5
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/hub-client.d.ts +8 -0
- package/dist/lib/hub-client.js +14 -0
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/pod.d.ts +8 -0
- package/dist/lib/pod.js +9 -1
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/targets.js +31 -7
- package/dist/lib/targets.js.map +1 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +881 -0
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +907 -0
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +907 -0
- package/node_modules/@synap/hub-rest-client/dist/index.js +851 -0
- package/node_modules/@synap/hub-rest-client/package.json +45 -0
- package/node_modules/@synap/hub-rest-client/src/client.ts +1143 -0
- package/node_modules/@synap/hub-rest-client/src/errors.ts +30 -0
- package/node_modules/@synap/hub-rest-client/src/index.ts +111 -0
- package/node_modules/@synap/hub-rest-client/src/setup.ts +77 -0
- package/node_modules/@synap/hub-rest-client/src/types.ts +639 -0
- package/package.json +8 -2
- package/skills/synap/SKILL.md +19 -20
|
@@ -0,0 +1,907 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synap/hub-rest-client — Hub Protocol REST API Types
|
|
3
|
+
*
|
|
4
|
+
* Canonical TypeScript interfaces for all objects returned by the
|
|
5
|
+
* Synap Hub Protocol REST API (`/api/hub/*`).
|
|
6
|
+
*
|
|
7
|
+
* These are the source of truth for external consumers (Raycast extension,
|
|
8
|
+
* CLI, third-party integrations). Keep in sync with hub-protocol-rest.ts
|
|
9
|
+
* response shapes in synap-backend.
|
|
10
|
+
*
|
|
11
|
+
* Zero runtime dependencies — pure TypeScript interfaces.
|
|
12
|
+
*/
|
|
13
|
+
interface HubEntity {
|
|
14
|
+
id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
profileSlug: string;
|
|
17
|
+
workspaceId: string | null;
|
|
18
|
+
/** JSONB property bag — keys depend on the profile schema */
|
|
19
|
+
properties: Record<string, unknown>;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
status?: string;
|
|
23
|
+
priority?: string;
|
|
24
|
+
dueDate?: string;
|
|
25
|
+
content?: string;
|
|
26
|
+
url?: string;
|
|
27
|
+
}
|
|
28
|
+
interface HubDocument {
|
|
29
|
+
id: string;
|
|
30
|
+
title: string;
|
|
31
|
+
content: string;
|
|
32
|
+
workspaceId: string | null;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
updatedAt: string;
|
|
35
|
+
}
|
|
36
|
+
interface HubChannel {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
type: "personal" | "thread" | "sub_thread" | "feed" | "external" | "agent_collab";
|
|
40
|
+
workspaceId: string | null;
|
|
41
|
+
agentType?: string;
|
|
42
|
+
contextObjectType?: "workspace" | "entity" | "document" | "view" | "project" | "task" | "user" | "external" | null;
|
|
43
|
+
contextObjectId?: string | null;
|
|
44
|
+
createdAt: string;
|
|
45
|
+
}
|
|
46
|
+
interface HubWorkspace {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
role?: string;
|
|
50
|
+
}
|
|
51
|
+
/** GET /api/hub/workspaces — canonical Hub Protocol shape (not `data`). */
|
|
52
|
+
interface HubWorkspacesListResponse {
|
|
53
|
+
workspaces: HubWorkspace[];
|
|
54
|
+
}
|
|
55
|
+
/** GET /api/hub/users/me returns at least `id` (and `scopes`); email may be omitted. */
|
|
56
|
+
interface HubUser {
|
|
57
|
+
id: string;
|
|
58
|
+
email?: string;
|
|
59
|
+
name?: string;
|
|
60
|
+
scopes?: string[];
|
|
61
|
+
}
|
|
62
|
+
interface HubMemoryResult {
|
|
63
|
+
id: string;
|
|
64
|
+
content: string;
|
|
65
|
+
score?: number;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
}
|
|
68
|
+
interface HubListResponse<T> {
|
|
69
|
+
data: T[];
|
|
70
|
+
total?: number;
|
|
71
|
+
hasMore?: boolean;
|
|
72
|
+
}
|
|
73
|
+
interface HubSingleResponse<T> {
|
|
74
|
+
data: T;
|
|
75
|
+
}
|
|
76
|
+
interface CreateEntityInput {
|
|
77
|
+
profileSlug: string;
|
|
78
|
+
title: string;
|
|
79
|
+
workspaceId?: string;
|
|
80
|
+
properties?: Record<string, unknown>;
|
|
81
|
+
content?: string;
|
|
82
|
+
url?: string;
|
|
83
|
+
status?: string;
|
|
84
|
+
priority?: "low" | "medium" | "high" | "urgent";
|
|
85
|
+
dueDate?: string;
|
|
86
|
+
}
|
|
87
|
+
interface UpdateEntityInput {
|
|
88
|
+
title?: string;
|
|
89
|
+
properties?: Record<string, unknown>;
|
|
90
|
+
content?: string;
|
|
91
|
+
url?: string;
|
|
92
|
+
status?: string;
|
|
93
|
+
priority?: "low" | "medium" | "high" | "urgent";
|
|
94
|
+
dueDate?: string;
|
|
95
|
+
}
|
|
96
|
+
interface CreateDocumentInput {
|
|
97
|
+
title: string;
|
|
98
|
+
content?: string;
|
|
99
|
+
workspaceId?: string;
|
|
100
|
+
entityId?: string;
|
|
101
|
+
}
|
|
102
|
+
interface StoreMemoryInput {
|
|
103
|
+
fact: string;
|
|
104
|
+
context?: string;
|
|
105
|
+
workspaceId?: string;
|
|
106
|
+
}
|
|
107
|
+
interface SendToChannelInput {
|
|
108
|
+
channelId: string;
|
|
109
|
+
content: string;
|
|
110
|
+
/** Defaults to the authenticated user (GET /users/me). */
|
|
111
|
+
userId?: string;
|
|
112
|
+
role?: "system" | "assistant" | "user";
|
|
113
|
+
/** When true, may queue an IS response on AI-active threads (server-side). */
|
|
114
|
+
autoRespond?: boolean;
|
|
115
|
+
workspaceId?: string;
|
|
116
|
+
}
|
|
117
|
+
interface AgentSetupResult {
|
|
118
|
+
hubApiKey: string;
|
|
119
|
+
agentUserId: string;
|
|
120
|
+
workspaceId: string;
|
|
121
|
+
}
|
|
122
|
+
interface PodStatus {
|
|
123
|
+
url: string;
|
|
124
|
+
healthy: boolean;
|
|
125
|
+
version?: string;
|
|
126
|
+
}
|
|
127
|
+
interface CaptureProposal {
|
|
128
|
+
tempId: string;
|
|
129
|
+
profileSlug: string;
|
|
130
|
+
title: string;
|
|
131
|
+
description?: string;
|
|
132
|
+
properties?: Record<string, unknown>;
|
|
133
|
+
confidence: number;
|
|
134
|
+
action: "create" | "link" | "dismiss";
|
|
135
|
+
linkedEntityId?: string;
|
|
136
|
+
linkedEntityTitle?: string;
|
|
137
|
+
dedupCandidates?: Array<{
|
|
138
|
+
entityId: string;
|
|
139
|
+
title: string;
|
|
140
|
+
profileSlug: string;
|
|
141
|
+
score: number;
|
|
142
|
+
}>;
|
|
143
|
+
}
|
|
144
|
+
interface CaptureRelation {
|
|
145
|
+
sourceTempId: string;
|
|
146
|
+
targetTempId: string;
|
|
147
|
+
relationType: string;
|
|
148
|
+
}
|
|
149
|
+
interface CaptureStructureResponse {
|
|
150
|
+
proposals: CaptureProposal[];
|
|
151
|
+
relations: CaptureRelation[];
|
|
152
|
+
followUp: string | null;
|
|
153
|
+
dedupCandidates?: Record<string, Array<{
|
|
154
|
+
entityId: string;
|
|
155
|
+
title: string;
|
|
156
|
+
score: number;
|
|
157
|
+
}>>;
|
|
158
|
+
}
|
|
159
|
+
interface CaptureExecuteInput {
|
|
160
|
+
entities: Array<{
|
|
161
|
+
tempId: string;
|
|
162
|
+
profileSlug: string;
|
|
163
|
+
title: string;
|
|
164
|
+
description?: string;
|
|
165
|
+
properties?: Record<string, unknown>;
|
|
166
|
+
action: "create" | "link" | "dismiss";
|
|
167
|
+
linkedEntityId?: string;
|
|
168
|
+
confidence?: number;
|
|
169
|
+
}>;
|
|
170
|
+
relations?: CaptureRelation[];
|
|
171
|
+
}
|
|
172
|
+
interface CaptureExecuteResponse {
|
|
173
|
+
created: Array<{
|
|
174
|
+
tempId: string;
|
|
175
|
+
entityId: string;
|
|
176
|
+
profileSlug: string;
|
|
177
|
+
linked: boolean;
|
|
178
|
+
}>;
|
|
179
|
+
relations: Array<{
|
|
180
|
+
sourceTempId: string;
|
|
181
|
+
targetTempId: string;
|
|
182
|
+
relationType: string;
|
|
183
|
+
}>;
|
|
184
|
+
}
|
|
185
|
+
interface HubRelation {
|
|
186
|
+
id: string;
|
|
187
|
+
sourceEntityId: string;
|
|
188
|
+
targetEntityId: string;
|
|
189
|
+
type: string;
|
|
190
|
+
label?: string;
|
|
191
|
+
createdAt: string;
|
|
192
|
+
}
|
|
193
|
+
interface HubGraphNode extends HubEntity {
|
|
194
|
+
depth: number;
|
|
195
|
+
}
|
|
196
|
+
interface HubGraphEdge {
|
|
197
|
+
sourceId: string;
|
|
198
|
+
targetId: string;
|
|
199
|
+
type: string;
|
|
200
|
+
label?: string;
|
|
201
|
+
}
|
|
202
|
+
interface HubGraphResult {
|
|
203
|
+
nodes: HubGraphNode[];
|
|
204
|
+
edges: HubGraphEdge[];
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* A single link returned by getConnections() — unified view across three sources:
|
|
208
|
+
* - `"graph"` : an explicit row in the relations table
|
|
209
|
+
* - `"property"` : derived from another entity's `entity_id` property pointing here
|
|
210
|
+
* - `"thread"` : a chat thread created, updated, or referenced this entity
|
|
211
|
+
*/
|
|
212
|
+
interface HubConnection {
|
|
213
|
+
entityId: string;
|
|
214
|
+
entity: HubEntity | null;
|
|
215
|
+
label: string;
|
|
216
|
+
direction: "outgoing" | "incoming" | "structural";
|
|
217
|
+
source: "graph" | "property" | "thread";
|
|
218
|
+
relationType?: string;
|
|
219
|
+
propertySlug?: string;
|
|
220
|
+
propertyLabel?: string;
|
|
221
|
+
channelId?: string;
|
|
222
|
+
channelRelationshipType?: string;
|
|
223
|
+
createdAt?: string | null;
|
|
224
|
+
}
|
|
225
|
+
interface HubConnectionsResult {
|
|
226
|
+
connections: HubConnection[];
|
|
227
|
+
counts: {
|
|
228
|
+
total: number;
|
|
229
|
+
graph: number;
|
|
230
|
+
structural: number;
|
|
231
|
+
threads: number;
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
interface HubProfile {
|
|
235
|
+
id: string;
|
|
236
|
+
slug: string;
|
|
237
|
+
displayName: string;
|
|
238
|
+
description?: string;
|
|
239
|
+
entityScope: "pod" | "workspace";
|
|
240
|
+
parentSlug?: string;
|
|
241
|
+
icon?: string;
|
|
242
|
+
color?: string;
|
|
243
|
+
properties?: HubPropertyDef[];
|
|
244
|
+
}
|
|
245
|
+
interface HubPropertyDef {
|
|
246
|
+
id: string;
|
|
247
|
+
slug: string;
|
|
248
|
+
displayName: string;
|
|
249
|
+
type: "string" | "number" | "boolean" | "date" | "entity_id" | "array" | "object" | "secret";
|
|
250
|
+
required?: boolean;
|
|
251
|
+
options?: string[];
|
|
252
|
+
}
|
|
253
|
+
interface HubDiscoverProperty {
|
|
254
|
+
slug: string;
|
|
255
|
+
displayName: string;
|
|
256
|
+
type: string;
|
|
257
|
+
options?: string[];
|
|
258
|
+
required?: boolean;
|
|
259
|
+
}
|
|
260
|
+
interface HubDiscoverProfile {
|
|
261
|
+
slug: string;
|
|
262
|
+
displayName: string;
|
|
263
|
+
scope: "pod" | "workspace";
|
|
264
|
+
description?: string | null;
|
|
265
|
+
icon?: string | null;
|
|
266
|
+
properties: HubDiscoverProperty[];
|
|
267
|
+
createCommand: string;
|
|
268
|
+
}
|
|
269
|
+
interface HubDiscoverResult {
|
|
270
|
+
profiles: HubDiscoverProfile[];
|
|
271
|
+
commands: Record<string, string>;
|
|
272
|
+
hint: string;
|
|
273
|
+
}
|
|
274
|
+
interface HubThread {
|
|
275
|
+
id: string;
|
|
276
|
+
name?: string;
|
|
277
|
+
type: "personal" | "thread" | "sub_thread" | "feed" | "external" | "agent_collab";
|
|
278
|
+
workspaceId?: string;
|
|
279
|
+
agentType?: string;
|
|
280
|
+
contextObjectType?: "workspace" | "entity" | "document" | "view" | "project" | "task" | "user" | "external";
|
|
281
|
+
contextObjectId?: string;
|
|
282
|
+
parentChannelId?: string;
|
|
283
|
+
linkedEntityIds?: string[];
|
|
284
|
+
linkedDocumentIds?: string[];
|
|
285
|
+
createdAt: string;
|
|
286
|
+
updatedAt: string;
|
|
287
|
+
}
|
|
288
|
+
interface HubMessage {
|
|
289
|
+
id: string;
|
|
290
|
+
content: string;
|
|
291
|
+
role: "user" | "assistant" | "system";
|
|
292
|
+
userId?: string;
|
|
293
|
+
createdAt: string;
|
|
294
|
+
}
|
|
295
|
+
interface HubThreadContext {
|
|
296
|
+
thread: HubThread;
|
|
297
|
+
messages: HubMessage[];
|
|
298
|
+
linkedEntities: HubEntity[];
|
|
299
|
+
linkedDocuments: HubDocument[];
|
|
300
|
+
}
|
|
301
|
+
interface HubProposal {
|
|
302
|
+
id: string;
|
|
303
|
+
status: "pending" | "approved" | "rejected";
|
|
304
|
+
action: "create" | "update" | "delete";
|
|
305
|
+
subjectType: string;
|
|
306
|
+
data: Record<string, unknown>;
|
|
307
|
+
reason?: string;
|
|
308
|
+
createdAt: string;
|
|
309
|
+
reviewedAt?: string;
|
|
310
|
+
}
|
|
311
|
+
interface HubView {
|
|
312
|
+
id: string;
|
|
313
|
+
name: string;
|
|
314
|
+
type: "table" | "kanban" | "list" | "grid" | "gallery" | "calendar" | "timeline" | "graph" | "bento" | string;
|
|
315
|
+
profileSlug?: string;
|
|
316
|
+
workspaceId?: string;
|
|
317
|
+
config?: Record<string, unknown>;
|
|
318
|
+
createdAt: string;
|
|
319
|
+
updatedAt: string;
|
|
320
|
+
}
|
|
321
|
+
interface HubSearchResult {
|
|
322
|
+
entities: HubEntity[];
|
|
323
|
+
documents: HubDocument[];
|
|
324
|
+
total: number;
|
|
325
|
+
}
|
|
326
|
+
interface HubCommand {
|
|
327
|
+
id: string;
|
|
328
|
+
name: string;
|
|
329
|
+
slug: string;
|
|
330
|
+
description?: string;
|
|
331
|
+
workspaceId?: string;
|
|
332
|
+
}
|
|
333
|
+
interface HubAgentUser {
|
|
334
|
+
id: string;
|
|
335
|
+
name: string;
|
|
336
|
+
agentType?: string;
|
|
337
|
+
workspaceId?: string;
|
|
338
|
+
}
|
|
339
|
+
interface HubUserContext {
|
|
340
|
+
recentEntities: HubEntity[];
|
|
341
|
+
activeThreads: HubThread[];
|
|
342
|
+
workspaceSummary?: Record<string, unknown>;
|
|
343
|
+
}
|
|
344
|
+
interface HubGovernanceResult {
|
|
345
|
+
status: "approved" | "proposed" | "denied";
|
|
346
|
+
id?: string;
|
|
347
|
+
proposalId?: string;
|
|
348
|
+
reason?: string;
|
|
349
|
+
message?: string;
|
|
350
|
+
/**
|
|
351
|
+
* Short human-readable summary of what was proposed. Present on `proposed`
|
|
352
|
+
* responses. Example: `Delete task "Q2 plan review"`.
|
|
353
|
+
*/
|
|
354
|
+
summary?: string;
|
|
355
|
+
/**
|
|
356
|
+
* Reasoning — echoed from the AI's rationale or the policy's explanation
|
|
357
|
+
* of why review is needed. Present on `proposed` responses.
|
|
358
|
+
*/
|
|
359
|
+
reasoning?: string;
|
|
360
|
+
/**
|
|
361
|
+
* Pod-relative path for the review UI: `/proposals/{id}`.
|
|
362
|
+
* Present on `proposed` responses.
|
|
363
|
+
*/
|
|
364
|
+
reviewPath?: string;
|
|
365
|
+
/**
|
|
366
|
+
* Absolute URL for the review UI (defaults to `studio.synap.live`,
|
|
367
|
+
* overridable via `SYNAP_APP_URL` on the pod). Surface this directly to
|
|
368
|
+
* the user so they can approve without digging through the app.
|
|
369
|
+
*/
|
|
370
|
+
reviewUrl?: string;
|
|
371
|
+
}
|
|
372
|
+
interface CreateThreadInput {
|
|
373
|
+
name?: string;
|
|
374
|
+
type?: HubThread["type"];
|
|
375
|
+
workspaceId?: string;
|
|
376
|
+
agentType?: string;
|
|
377
|
+
entityId?: string;
|
|
378
|
+
documentId?: string;
|
|
379
|
+
userId?: string;
|
|
380
|
+
}
|
|
381
|
+
interface CreateRelationInput {
|
|
382
|
+
sourceEntityId: string;
|
|
383
|
+
targetEntityId: string;
|
|
384
|
+
type: string;
|
|
385
|
+
label?: string;
|
|
386
|
+
workspaceId?: string;
|
|
387
|
+
userId?: string;
|
|
388
|
+
}
|
|
389
|
+
interface CreateViewInput {
|
|
390
|
+
name: string;
|
|
391
|
+
type: HubView["type"];
|
|
392
|
+
profileSlug?: string;
|
|
393
|
+
workspaceId: string;
|
|
394
|
+
config?: Record<string, unknown>;
|
|
395
|
+
userId?: string;
|
|
396
|
+
}
|
|
397
|
+
interface ExecuteCommandInput {
|
|
398
|
+
slug: string;
|
|
399
|
+
workspaceId?: string;
|
|
400
|
+
parameters?: Record<string, unknown>;
|
|
401
|
+
userId?: string;
|
|
402
|
+
}
|
|
403
|
+
type AutomationStatus = "draft" | "active" | "paused" | "error";
|
|
404
|
+
type AutomationTriggerType = "event" | "cron" | "webhook" | "manual";
|
|
405
|
+
interface HubAutomation {
|
|
406
|
+
id: string;
|
|
407
|
+
userId: string;
|
|
408
|
+
workspaceId?: string | null;
|
|
409
|
+
name: string;
|
|
410
|
+
description?: string | null;
|
|
411
|
+
triggerType: AutomationTriggerType;
|
|
412
|
+
triggerConfig?: Record<string, unknown>;
|
|
413
|
+
flowDefinition?: {
|
|
414
|
+
nodes: Record<string, unknown>[];
|
|
415
|
+
edges: Record<string, unknown>[];
|
|
416
|
+
};
|
|
417
|
+
status: AutomationStatus;
|
|
418
|
+
metadata?: Record<string, unknown>;
|
|
419
|
+
createdAt?: string;
|
|
420
|
+
updatedAt?: string;
|
|
421
|
+
}
|
|
422
|
+
interface CreateAutomationInput {
|
|
423
|
+
name: string;
|
|
424
|
+
triggerType: AutomationTriggerType;
|
|
425
|
+
workspaceId?: string | null;
|
|
426
|
+
description?: string;
|
|
427
|
+
triggerConfig?: Record<string, unknown>;
|
|
428
|
+
flowDefinition?: {
|
|
429
|
+
nodes: Record<string, unknown>[];
|
|
430
|
+
edges: Record<string, unknown>[];
|
|
431
|
+
};
|
|
432
|
+
status?: AutomationStatus;
|
|
433
|
+
metadata?: Record<string, unknown>;
|
|
434
|
+
userId?: string;
|
|
435
|
+
agentUserId?: string;
|
|
436
|
+
}
|
|
437
|
+
interface UpdateAutomationInput {
|
|
438
|
+
name?: string;
|
|
439
|
+
description?: string;
|
|
440
|
+
triggerType?: AutomationTriggerType;
|
|
441
|
+
triggerConfig?: Record<string, unknown>;
|
|
442
|
+
flowDefinition?: {
|
|
443
|
+
nodes: Record<string, unknown>[];
|
|
444
|
+
edges: Record<string, unknown>[];
|
|
445
|
+
};
|
|
446
|
+
status?: AutomationStatus;
|
|
447
|
+
metadata?: Record<string, unknown>;
|
|
448
|
+
workspaceId?: string;
|
|
449
|
+
userId?: string;
|
|
450
|
+
}
|
|
451
|
+
type ReactionKind = "automation" | "ai_feed" | "ai_react" | "notify" | "webhook" | "message_out";
|
|
452
|
+
type ReactionLens = "all" | "internal" | "external";
|
|
453
|
+
/** Opaque reaction event from the Pulse feed — shape varies by kind. */
|
|
454
|
+
interface HubReactionEvent {
|
|
455
|
+
id: string;
|
|
456
|
+
eventType: string;
|
|
457
|
+
kind?: ReactionKind;
|
|
458
|
+
workspaceId?: string | null;
|
|
459
|
+
userId?: string;
|
|
460
|
+
createdAt: string;
|
|
461
|
+
reactions?: Record<string, unknown>[];
|
|
462
|
+
[key: string]: unknown;
|
|
463
|
+
}
|
|
464
|
+
type NotificationSourceType = "proposal" | "connector" | "agent" | "system" | "inbox_item";
|
|
465
|
+
interface CreateNotificationInput {
|
|
466
|
+
userId: string;
|
|
467
|
+
workspaceId: string;
|
|
468
|
+
type: string;
|
|
469
|
+
sourceType?: NotificationSourceType;
|
|
470
|
+
sourceId?: string;
|
|
471
|
+
workspaceUrl?: string;
|
|
472
|
+
groupKey?: string;
|
|
473
|
+
data?: Record<string, unknown>;
|
|
474
|
+
}
|
|
475
|
+
interface HubWebhookDelivery {
|
|
476
|
+
id: string;
|
|
477
|
+
subscriptionId: string;
|
|
478
|
+
status: string;
|
|
479
|
+
responseStatus?: number;
|
|
480
|
+
attempt: number;
|
|
481
|
+
deliveredAt?: string;
|
|
482
|
+
createdAt: string;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* HubRestClient — typed HTTP client for the Synap Hub Protocol REST API.
|
|
487
|
+
*
|
|
488
|
+
* Uses the native `fetch` API (Node.js >= 18, browsers, Deno, Bun).
|
|
489
|
+
* Zero runtime dependencies.
|
|
490
|
+
*
|
|
491
|
+
* @example
|
|
492
|
+
* ```ts
|
|
493
|
+
* const client = new HubRestClient({
|
|
494
|
+
* podUrl: "https://my-pod.synap.live",
|
|
495
|
+
* apiKey: "synap_hub_live_...",
|
|
496
|
+
* });
|
|
497
|
+
*
|
|
498
|
+
* const entities = await client.searchEntities("meeting notes", { profileSlug: "note" });
|
|
499
|
+
* ```
|
|
500
|
+
*/
|
|
501
|
+
|
|
502
|
+
interface HubRestClientConfig {
|
|
503
|
+
/** Pod URL, e.g. https://my-pod.synap.live */
|
|
504
|
+
podUrl: string;
|
|
505
|
+
/** Hub Protocol API key (Bearer token) */
|
|
506
|
+
apiKey: string;
|
|
507
|
+
/** Default workspace ID — used when not specified per call */
|
|
508
|
+
workspaceId?: string;
|
|
509
|
+
/** Optional request timeout in ms (default: 30000) */
|
|
510
|
+
timeoutMs?: number;
|
|
511
|
+
}
|
|
512
|
+
declare class HubRestClient {
|
|
513
|
+
private readonly base;
|
|
514
|
+
private readonly headers;
|
|
515
|
+
private readonly timeoutMs;
|
|
516
|
+
readonly workspaceId: string | undefined;
|
|
517
|
+
/** Cached from GET /users/me — avoids repeated identity calls. */
|
|
518
|
+
private resolvedUserId;
|
|
519
|
+
constructor(config: HubRestClientConfig);
|
|
520
|
+
/** User id for the current API key (Hub REST requires userId on several GETs). */
|
|
521
|
+
private resolveUserId;
|
|
522
|
+
private request;
|
|
523
|
+
getMe(): Promise<HubUser>;
|
|
524
|
+
getWorkspaces(): Promise<HubWorkspace[]>;
|
|
525
|
+
provisionAgentWorkspace(input: {
|
|
526
|
+
agentUserId: string;
|
|
527
|
+
workspaceName?: string;
|
|
528
|
+
}): Promise<{
|
|
529
|
+
workspaceId: string;
|
|
530
|
+
created: boolean;
|
|
531
|
+
}>;
|
|
532
|
+
/**
|
|
533
|
+
* Get full activity context for a user — recent entities, active threads, workspace summary.
|
|
534
|
+
* Use at session start to orient the agent to the user's current state.
|
|
535
|
+
*/
|
|
536
|
+
getUserContext(userId: string, options?: {
|
|
537
|
+
workspaceId?: string;
|
|
538
|
+
}): Promise<HubUserContext>;
|
|
539
|
+
searchEntities(query: string, options?: {
|
|
540
|
+
profileSlug?: string;
|
|
541
|
+
workspaceId?: string;
|
|
542
|
+
/**
|
|
543
|
+
* "workspace" (default) — applies the client workspaceId filter.
|
|
544
|
+
* "all" — omits workspaceId entirely so results span all workspaces.
|
|
545
|
+
*/
|
|
546
|
+
scope?: "workspace" | "all";
|
|
547
|
+
limit?: number;
|
|
548
|
+
}, signal?: AbortSignal): Promise<HubEntity[]>;
|
|
549
|
+
getEntity(id: string): Promise<HubEntity>;
|
|
550
|
+
getRecentEntities(options?: {
|
|
551
|
+
profileSlug?: string;
|
|
552
|
+
workspaceId?: string;
|
|
553
|
+
limit?: number;
|
|
554
|
+
/** "all" — omits workspaceId so results span all workspaces the user can access. */
|
|
555
|
+
scope?: "workspace" | "all";
|
|
556
|
+
}): Promise<HubEntity[]>;
|
|
557
|
+
createEntity(input: CreateEntityInput): Promise<HubGovernanceResult>;
|
|
558
|
+
updateEntity(id: string, input: UpdateEntityInput): Promise<HubEntity | HubGovernanceResult>;
|
|
559
|
+
/**
|
|
560
|
+
* Unified full-text search across entities, documents, and views.
|
|
561
|
+
* Use when you don't know the content type. For entity-only search use searchEntities().
|
|
562
|
+
*
|
|
563
|
+
* Note: The backend GET /search requires userId as a query param; this method resolves
|
|
564
|
+
* the current user automatically.
|
|
565
|
+
*/
|
|
566
|
+
search(query: string, options?: {
|
|
567
|
+
collections?: Array<"entities" | "documents" | "views">;
|
|
568
|
+
workspaceId?: string;
|
|
569
|
+
limit?: number;
|
|
570
|
+
}, signal?: AbortSignal): Promise<HubSearchResult>;
|
|
571
|
+
/**
|
|
572
|
+
* Get all relations for an entity — inbound and outbound.
|
|
573
|
+
* Use to discover connections before graph traversal.
|
|
574
|
+
*
|
|
575
|
+
* Note: The backend GET /relations requires both userId and workspaceId.
|
|
576
|
+
* This method resolves userId automatically; workspaceId falls back to client default.
|
|
577
|
+
*/
|
|
578
|
+
getRelations(entityId: string, options?: {
|
|
579
|
+
workspaceId?: string;
|
|
580
|
+
}): Promise<HubRelation[]>;
|
|
581
|
+
/**
|
|
582
|
+
* Create a typed relation between two entities.
|
|
583
|
+
* Type is a free string — conventions: "related_to", "parent_of", "child_of",
|
|
584
|
+
* "belongs_to", "authored_by", "depends_on", "references".
|
|
585
|
+
* Goes through governance — may return "proposed".
|
|
586
|
+
*/
|
|
587
|
+
createRelation(input: CreateRelationInput): Promise<HubGovernanceResult>;
|
|
588
|
+
/**
|
|
589
|
+
* Delete a relation by ID (get from getRelations()).
|
|
590
|
+
*/
|
|
591
|
+
deleteRelation(relationId: string): Promise<void>;
|
|
592
|
+
/**
|
|
593
|
+
* Traverse the knowledge graph from an entity using BFS.
|
|
594
|
+
* Returns nodes and edges up to maxDepth hops away.
|
|
595
|
+
* maxDepth: 1=direct neighbors, 2=neighborhood (recommended), 3=extended (expensive).
|
|
596
|
+
*
|
|
597
|
+
* @example
|
|
598
|
+
* const graph = await client.traverseGraph(projectId, { maxDepth: 2 });
|
|
599
|
+
* const tasks = graph.nodes.filter(n => n.profileSlug === "task");
|
|
600
|
+
*/
|
|
601
|
+
traverseGraph(entityId: string, options?: {
|
|
602
|
+
maxDepth?: number;
|
|
603
|
+
workspaceId?: string;
|
|
604
|
+
}): Promise<HubGraphResult>;
|
|
605
|
+
/**
|
|
606
|
+
* Unified view of everything connected to an entity. Merges three sources:
|
|
607
|
+
* 1. Graph relations — explicit rows in the relations table (both directions)
|
|
608
|
+
* 2. Structural links — entities whose `entity_id` properties point to this entity
|
|
609
|
+
* 3. Thread connections — chat threads that touched this entity
|
|
610
|
+
*
|
|
611
|
+
* Prefer this over `getRelations()` / `traverseGraph()` when you want the complete
|
|
612
|
+
* picture — those only see the relations table and miss property-based links that
|
|
613
|
+
* haven't been synced (notably custom profiles without a `relationDefId` mapping).
|
|
614
|
+
*
|
|
615
|
+
* Each connection carries a `source` field so callers can filter by origin.
|
|
616
|
+
*
|
|
617
|
+
* @example
|
|
618
|
+
* const { connections } = await client.getConnections(entityId);
|
|
619
|
+
* const tasks = connections.filter(c => c.entity?.profileSlug === "task");
|
|
620
|
+
*/
|
|
621
|
+
getConnections(entityId: string, options?: {
|
|
622
|
+
workspaceId?: string;
|
|
623
|
+
limit?: number;
|
|
624
|
+
}): Promise<HubConnectionsResult>;
|
|
625
|
+
/**
|
|
626
|
+
* List all entity profile types in the workspace.
|
|
627
|
+
* Always call before creating entities to discover what types are available.
|
|
628
|
+
* Returns system profiles (always present) + custom workspace profiles.
|
|
629
|
+
*/
|
|
630
|
+
listProfiles(workspaceId: string): Promise<HubProfile[]>;
|
|
631
|
+
/**
|
|
632
|
+
* List property definitions for a workspace, optionally filtered by profile.
|
|
633
|
+
*/
|
|
634
|
+
listPropertyDefs(workspaceId: string, options?: {
|
|
635
|
+
profileSlug?: string;
|
|
636
|
+
}): Promise<HubPropertyDef[]>;
|
|
637
|
+
/**
|
|
638
|
+
* Runtime discovery — profiles with property schemas + command tree.
|
|
639
|
+
*
|
|
640
|
+
* Call once per session at session start. Returns ground-truth profile
|
|
641
|
+
* schemas (including custom workspace profiles) and the canonical CLI
|
|
642
|
+
* command map. Replaces static skill file profile descriptions.
|
|
643
|
+
*/
|
|
644
|
+
discover(workspaceId?: string): Promise<HubDiscoverResult>;
|
|
645
|
+
/**
|
|
646
|
+
* List threads (channels) accessible to a user.
|
|
647
|
+
*/
|
|
648
|
+
listThreads(userId: string, options?: {
|
|
649
|
+
workspaceId?: string;
|
|
650
|
+
type?: string;
|
|
651
|
+
}): Promise<HubThread[]>;
|
|
652
|
+
/**
|
|
653
|
+
* Get the user's personal channel — their private AI conversation thread.
|
|
654
|
+
* Use as default destination for messages and proactive posts.
|
|
655
|
+
*
|
|
656
|
+
* Note: The backend GET /channels/personal requires both userId and workspaceId.
|
|
657
|
+
*/
|
|
658
|
+
getPersonalChannel(userId: string, workspaceId?: string): Promise<HubThread>;
|
|
659
|
+
/**
|
|
660
|
+
* Create a new thread. Pass entityId to auto-link on creation.
|
|
661
|
+
*
|
|
662
|
+
* Note: The backend POST /threads requires workspaceId in the body.
|
|
663
|
+
*/
|
|
664
|
+
createThread(input: CreateThreadInput): Promise<HubThread>;
|
|
665
|
+
/**
|
|
666
|
+
* Get full thread context: messages + all linked entities and documents.
|
|
667
|
+
* Call before sending a message to orient the AI with conversation history.
|
|
668
|
+
*/
|
|
669
|
+
getThreadContext(threadId: string): Promise<HubThreadContext>;
|
|
670
|
+
/**
|
|
671
|
+
* Get messages in a thread.
|
|
672
|
+
*/
|
|
673
|
+
getMessages(threadId: string, _options?: {
|
|
674
|
+
limit?: number;
|
|
675
|
+
before?: string;
|
|
676
|
+
}): Promise<HubMessage[]>;
|
|
677
|
+
/**
|
|
678
|
+
* Link an entity to a thread so it appears in thread context for AI.
|
|
679
|
+
*/
|
|
680
|
+
linkEntityToThread(threadId: string, entityId: string): Promise<void>;
|
|
681
|
+
/**
|
|
682
|
+
* Link a document to a thread.
|
|
683
|
+
*/
|
|
684
|
+
linkDocumentToThread(threadId: string, documentId: string): Promise<void>;
|
|
685
|
+
/**
|
|
686
|
+
* Get research branches of a thread — parallel AI investigations.
|
|
687
|
+
*/
|
|
688
|
+
getThreadBranches(threadId: string): Promise<Array<{
|
|
689
|
+
channelId: string;
|
|
690
|
+
branchPurpose: string | null;
|
|
691
|
+
status: string;
|
|
692
|
+
}>>;
|
|
693
|
+
storeMemory(input: StoreMemoryInput): Promise<{
|
|
694
|
+
id: string;
|
|
695
|
+
}>;
|
|
696
|
+
recallMemory(query: string, options?: {
|
|
697
|
+
workspaceId?: string;
|
|
698
|
+
limit?: number;
|
|
699
|
+
}): Promise<HubMemoryResult[]>;
|
|
700
|
+
/**
|
|
701
|
+
* Delete a stored memory fact by ID.
|
|
702
|
+
*/
|
|
703
|
+
deleteMemory(memoryId: string): Promise<void>;
|
|
704
|
+
getChannels(options?: {
|
|
705
|
+
workspaceId?: string;
|
|
706
|
+
}): Promise<HubChannel[]>;
|
|
707
|
+
sendToChannel(input: SendToChannelInput): Promise<{
|
|
708
|
+
id: string;
|
|
709
|
+
}>;
|
|
710
|
+
/**
|
|
711
|
+
* List proposals — pending AI writes awaiting human review.
|
|
712
|
+
* Filter by status: "pending" (needs review), "approved", "rejected".
|
|
713
|
+
*/
|
|
714
|
+
listProposals(options?: {
|
|
715
|
+
status?: "pending" | "approved" | "rejected";
|
|
716
|
+
workspaceId?: string;
|
|
717
|
+
limit?: number;
|
|
718
|
+
}): Promise<HubProposal[]>;
|
|
719
|
+
/**
|
|
720
|
+
* Approve or reject a proposal.
|
|
721
|
+
*
|
|
722
|
+
* Note: The backend PATCH /proposals/:id is an AI-revision endpoint that updates
|
|
723
|
+
* the proposal data/summary, not a review (approve/reject) endpoint.
|
|
724
|
+
* Use this to update proposal data before human review.
|
|
725
|
+
*/
|
|
726
|
+
reviewProposal(proposalId: string, decision: "approved" | "rejected", reason?: string): Promise<HubProposal>;
|
|
727
|
+
/**
|
|
728
|
+
* List data views in a workspace.
|
|
729
|
+
*/
|
|
730
|
+
listViews(workspaceId: string, options?: {
|
|
731
|
+
profileSlug?: string;
|
|
732
|
+
}): Promise<HubView[]>;
|
|
733
|
+
/**
|
|
734
|
+
* Create a new view. Goes through governance.
|
|
735
|
+
*/
|
|
736
|
+
createView(input: CreateViewInput): Promise<HubGovernanceResult>;
|
|
737
|
+
/**
|
|
738
|
+
* Get a document by ID with full markdown content.
|
|
739
|
+
*/
|
|
740
|
+
getDocument(documentId: string): Promise<HubDocument>;
|
|
741
|
+
/**
|
|
742
|
+
* Create a document. Use for long-form content: meeting notes, research, writeups.
|
|
743
|
+
* Goes through governance.
|
|
744
|
+
*/
|
|
745
|
+
createDocument(input: CreateDocumentInput & {
|
|
746
|
+
workspaceId?: string;
|
|
747
|
+
}): Promise<HubGovernanceResult>;
|
|
748
|
+
/**
|
|
749
|
+
* List available commands (automation shortcuts) in the workspace.
|
|
750
|
+
*/
|
|
751
|
+
listCommands(workspaceId?: string): Promise<HubCommand[]>;
|
|
752
|
+
/**
|
|
753
|
+
* Execute a command by slug.
|
|
754
|
+
*
|
|
755
|
+
* Note: The backend POST /commands/execute uses a `command` field (the shell command
|
|
756
|
+
* string) and `userId`, not a `slug`. This maps ExecuteCommandInput.slug to `command`.
|
|
757
|
+
*/
|
|
758
|
+
executeCommand(input: ExecuteCommandInput): Promise<{
|
|
759
|
+
status: string;
|
|
760
|
+
result?: unknown;
|
|
761
|
+
}>;
|
|
762
|
+
/**
|
|
763
|
+
* List agent users provisioned in the workspace.
|
|
764
|
+
*/
|
|
765
|
+
listAgentUsers(workspaceId?: string): Promise<HubAgentUser[]>;
|
|
766
|
+
/**
|
|
767
|
+
* Post a proactive message to the user's personal channel.
|
|
768
|
+
* For AI-initiated insights and summaries. Rate-limited: 3/hour, 10/day.
|
|
769
|
+
* proactiveType must be one of: insight, suggestion, alert, nudge,
|
|
770
|
+
* morning_briefing, weekly_digest, health_check.
|
|
771
|
+
*/
|
|
772
|
+
postProactive(userId: string, content: string, options?: {
|
|
773
|
+
workspaceId?: string;
|
|
774
|
+
type?: string;
|
|
775
|
+
}): Promise<{
|
|
776
|
+
id: string;
|
|
777
|
+
}>;
|
|
778
|
+
captureStructure(input: {
|
|
779
|
+
text: string;
|
|
780
|
+
url?: string;
|
|
781
|
+
workspaceId?: string;
|
|
782
|
+
previousEntities?: CaptureProposal[];
|
|
783
|
+
}): Promise<CaptureStructureResponse>;
|
|
784
|
+
captureExecute(input: CaptureExecuteInput & {
|
|
785
|
+
workspaceId?: string;
|
|
786
|
+
}): Promise<CaptureExecuteResponse>;
|
|
787
|
+
/**
|
|
788
|
+
* List automations for the current user, optionally filtered by workspace and status.
|
|
789
|
+
*/
|
|
790
|
+
listAutomations(options?: {
|
|
791
|
+
workspaceId?: string;
|
|
792
|
+
status?: AutomationStatus;
|
|
793
|
+
limit?: number;
|
|
794
|
+
}): Promise<HubAutomation[]>;
|
|
795
|
+
/**
|
|
796
|
+
* Get a single automation by ID.
|
|
797
|
+
*/
|
|
798
|
+
getAutomation(automationId: string, options?: {
|
|
799
|
+
workspaceId?: string;
|
|
800
|
+
}): Promise<HubAutomation>;
|
|
801
|
+
/**
|
|
802
|
+
* Create an automation. Defaults to status=draft.
|
|
803
|
+
* Use activateAutomation() to enable it.
|
|
804
|
+
*/
|
|
805
|
+
createAutomation(input: CreateAutomationInput): Promise<HubAutomation>;
|
|
806
|
+
/**
|
|
807
|
+
* Update an automation's definition or metadata.
|
|
808
|
+
*/
|
|
809
|
+
updateAutomation(automationId: string, input: UpdateAutomationInput): Promise<HubAutomation>;
|
|
810
|
+
/**
|
|
811
|
+
* Manually trigger an automation once with an optional payload.
|
|
812
|
+
* Bypasses the automation's normal trigger config.
|
|
813
|
+
*/
|
|
814
|
+
triggerAutomation(automationId: string, options?: {
|
|
815
|
+
payload?: Record<string, unknown>;
|
|
816
|
+
workspaceId?: string;
|
|
817
|
+
}): Promise<{
|
|
818
|
+
status: string;
|
|
819
|
+
runId?: string;
|
|
820
|
+
result?: unknown;
|
|
821
|
+
}>;
|
|
822
|
+
/**
|
|
823
|
+
* Activate a draft or paused automation (sets status=active).
|
|
824
|
+
*/
|
|
825
|
+
activateAutomation(automationId: string, options?: {
|
|
826
|
+
workspaceId?: string;
|
|
827
|
+
}): Promise<HubAutomation>;
|
|
828
|
+
/**
|
|
829
|
+
* Pause an active automation (sets status=paused).
|
|
830
|
+
*/
|
|
831
|
+
pauseAutomation(automationId: string, options?: {
|
|
832
|
+
workspaceId?: string;
|
|
833
|
+
}): Promise<HubAutomation>;
|
|
834
|
+
/**
|
|
835
|
+
* List the user-wide Pulse feed — the timestamp-sorted union of reactive events.
|
|
836
|
+
* Call getSubscriptionFanout() on an individual event for its dense reactions[].
|
|
837
|
+
*/
|
|
838
|
+
listSubscriptions(options?: {
|
|
839
|
+
workspaceId?: string;
|
|
840
|
+
kind?: ReactionKind;
|
|
841
|
+
eventType?: string;
|
|
842
|
+
lens?: ReactionLens;
|
|
843
|
+
limit?: number;
|
|
844
|
+
}): Promise<HubReactionEvent[]>;
|
|
845
|
+
/**
|
|
846
|
+
* Get the reaction fan-out for a single event — full reactions[] populated.
|
|
847
|
+
*/
|
|
848
|
+
getSubscriptionFanout(eventId: string, options?: {
|
|
849
|
+
lens?: ReactionLens;
|
|
850
|
+
}): Promise<HubReactionEvent>;
|
|
851
|
+
/**
|
|
852
|
+
* Persist a notification and emit notification:new to the frontend.
|
|
853
|
+
* Use for IS-originated events (skill.triggered, agent actions, etc.).
|
|
854
|
+
* Backend-originated notifications (vault, proposals) use NotificationService directly.
|
|
855
|
+
*/
|
|
856
|
+
createNotification(input: CreateNotificationInput): Promise<{
|
|
857
|
+
id: string;
|
|
858
|
+
}>;
|
|
859
|
+
/**
|
|
860
|
+
* List delivery log for a webhook subscription.
|
|
861
|
+
* Powers the Reactions Health tab and replay flows.
|
|
862
|
+
*/
|
|
863
|
+
getWebhookDeliveries(subscriptionId: string, options?: {
|
|
864
|
+
limit?: number;
|
|
865
|
+
}): Promise<HubWebhookDelivery[]>;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
/**
|
|
869
|
+
* Hub Protocol REST API error class.
|
|
870
|
+
* Thrown when the server returns a non-2xx response.
|
|
871
|
+
*/
|
|
872
|
+
declare class HubApiError extends Error {
|
|
873
|
+
readonly statusCode: number;
|
|
874
|
+
readonly body?: unknown | undefined;
|
|
875
|
+
constructor(message: string, statusCode: number, body?: unknown | undefined);
|
|
876
|
+
get isUnauthorized(): boolean;
|
|
877
|
+
get isForbidden(): boolean;
|
|
878
|
+
get isNotFound(): boolean;
|
|
879
|
+
get isServerError(): boolean;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* Pod setup and health utilities.
|
|
884
|
+
*
|
|
885
|
+
* These functions are the canonical implementations shared between
|
|
886
|
+
* the Synap CLI and the Raycast extension. They use the native fetch API
|
|
887
|
+
* and have zero Node.js-specific dependencies.
|
|
888
|
+
*/
|
|
889
|
+
|
|
890
|
+
/**
|
|
891
|
+
* Check whether a Synap pod is healthy.
|
|
892
|
+
* Hits `GET {podUrl}/health` with a 5s timeout.
|
|
893
|
+
*/
|
|
894
|
+
declare function checkPodHealth(podUrl: string): Promise<PodStatus>;
|
|
895
|
+
/**
|
|
896
|
+
* Create an agent user + Hub Protocol API key on the pod.
|
|
897
|
+
*
|
|
898
|
+
* Auth: `Authorization: Bearer <provisioningToken>`
|
|
899
|
+
* The provisioning token is either:
|
|
900
|
+
* - The pod's `PROVISIONING_TOKEN` env var (self-hosted path)
|
|
901
|
+
* - A CP-signed `agent_setup` JWT (managed pod path)
|
|
902
|
+
*
|
|
903
|
+
* Endpoint: `POST {podUrl}/api/hub/setup/agent`
|
|
904
|
+
*/
|
|
905
|
+
declare function setupAgent(podUrl: string, provisioningToken: string, agentType?: string): Promise<AgentSetupResult>;
|
|
906
|
+
|
|
907
|
+
export { type AgentSetupResult, type CaptureExecuteInput, type CaptureExecuteResponse, type CaptureProposal, type CaptureRelation, type CaptureStructureResponse, type CreateDocumentInput, type CreateEntityInput, type CreateRelationInput, type CreateThreadInput, type CreateViewInput, type ExecuteCommandInput, type HubAgentUser, HubApiError, type HubChannel, type HubCommand, type HubConnection, type HubConnectionsResult, type HubDiscoverProfile, type HubDiscoverProperty, type HubDiscoverResult, type HubDocument, type HubEntity, type HubGovernanceResult, type HubGraphEdge, type HubGraphNode, type HubGraphResult, type HubListResponse, type HubMemoryResult, type HubMessage, type HubProfile, type HubPropertyDef, type HubProposal, type HubRelation, HubRestClient, type HubRestClientConfig, type HubSearchResult, type HubSingleResponse, type HubThread, type HubThreadContext, type HubUser, type HubUserContext, type HubView, type HubWorkspace, type HubWorkspacesListResponse, type PodStatus, type SendToChannelInput, type StoreMemoryInput, type UpdateEntityInput, checkPodHealth, setupAgent };
|