@hailer/mcp 0.0.1

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 (163) hide show
  1. package/.claude/commands/tool-builder.md +37 -0
  2. package/.claude/commands/ws-pull.md +44 -0
  3. package/.claude/settings.json +8 -0
  4. package/.claude/settings.local.json +49 -0
  5. package/.claude/skills/activity-api/SKILL.md +96 -0
  6. package/.claude/skills/activity-api/references/activity-endpoints.md +845 -0
  7. package/.claude/skills/add-app-member-skill/SKILL.md +977 -0
  8. package/.claude/skills/agent-building/SKILL.md +243 -0
  9. package/.claude/skills/agent-building/references/architecture-patterns.md +446 -0
  10. package/.claude/skills/agent-building/references/code-examples.md +587 -0
  11. package/.claude/skills/agent-building/references/implementation-guide.md +619 -0
  12. package/.claude/skills/app-api/SKILL.md +219 -0
  13. package/.claude/skills/app-api/references/app-endpoints.md +759 -0
  14. package/.claude/skills/building-hailer-apps-skill/SKILL.md +548 -0
  15. package/.claude/skills/create-app-skill/SKILL.md +1101 -0
  16. package/.claude/skills/create-insight-skill/SKILL.md +1317 -0
  17. package/.claude/skills/get-insight-data-skill/SKILL.md +1053 -0
  18. package/.claude/skills/hailer-api/SKILL.md +283 -0
  19. package/.claude/skills/hailer-api/references/activities.md +620 -0
  20. package/.claude/skills/hailer-api/references/authentication.md +216 -0
  21. package/.claude/skills/hailer-api/references/datasets.md +437 -0
  22. package/.claude/skills/hailer-api/references/files.md +301 -0
  23. package/.claude/skills/hailer-api/references/insights.md +469 -0
  24. package/.claude/skills/hailer-api/references/workflows.md +720 -0
  25. package/.claude/skills/hailer-api/references/workspaces-users.md +445 -0
  26. package/.claude/skills/insight-api/SKILL.md +185 -0
  27. package/.claude/skills/insight-api/references/insight-endpoints.md +514 -0
  28. package/.claude/skills/install-workflow-skill/SKILL.md +1056 -0
  29. package/.claude/skills/list-apps-skill/SKILL.md +1010 -0
  30. package/.claude/skills/list-workflows-minimal-skill/SKILL.md +992 -0
  31. package/.claude/skills/local-first-skill/SKILL.md +570 -0
  32. package/.claude/skills/mcp-tools/SKILL.md +419 -0
  33. package/.claude/skills/mcp-tools/references/api-endpoints.md +499 -0
  34. package/.claude/skills/mcp-tools/references/data-structures.md +554 -0
  35. package/.claude/skills/mcp-tools/references/implementation-patterns.md +717 -0
  36. package/.claude/skills/preview-insight-skill/SKILL.md +1290 -0
  37. package/.claude/skills/publish-hailer-app-skill/SKILL.md +453 -0
  38. package/.claude/skills/remove-app-member-skill/SKILL.md +671 -0
  39. package/.claude/skills/remove-app-skill/SKILL.md +985 -0
  40. package/.claude/skills/remove-insight-skill/SKILL.md +1011 -0
  41. package/.claude/skills/remove-workflow-skill/SKILL.md +920 -0
  42. package/.claude/skills/scaffold-hailer-app-skill/SKILL.md +1034 -0
  43. package/.claude/skills/skill-testing/README.md +137 -0
  44. package/.claude/skills/skill-testing/SKILL.md +348 -0
  45. package/.claude/skills/skill-testing/references/test-patterns.md +705 -0
  46. package/.claude/skills/skill-testing/references/testing-guide.md +603 -0
  47. package/.claude/skills/skill-testing/references/validation-checklist.md +537 -0
  48. package/.claude/skills/tool-builder/SKILL.md +328 -0
  49. package/.claude/skills/update-app-skill/SKILL.md +970 -0
  50. package/.claude/skills/update-workflow-field-skill/SKILL.md +1098 -0
  51. package/.env.example +81 -0
  52. package/.mcp.json +13 -0
  53. package/README.md +297 -0
  54. package/dist/app.d.ts +4 -0
  55. package/dist/app.js +74 -0
  56. package/dist/cli.d.ts +3 -0
  57. package/dist/cli.js +5 -0
  58. package/dist/client/adaptive-documentation-bot.d.ts +108 -0
  59. package/dist/client/adaptive-documentation-bot.js +475 -0
  60. package/dist/client/adaptive-documentation-types.d.ts +66 -0
  61. package/dist/client/adaptive-documentation-types.js +9 -0
  62. package/dist/client/agent-activity-bot.d.ts +51 -0
  63. package/dist/client/agent-activity-bot.js +166 -0
  64. package/dist/client/agent-tracker.d.ts +499 -0
  65. package/dist/client/agent-tracker.js +659 -0
  66. package/dist/client/description-updater.d.ts +56 -0
  67. package/dist/client/description-updater.js +259 -0
  68. package/dist/client/log-parser.d.ts +72 -0
  69. package/dist/client/log-parser.js +387 -0
  70. package/dist/client/mcp-client.d.ts +50 -0
  71. package/dist/client/mcp-client.js +532 -0
  72. package/dist/client/message-processor.d.ts +35 -0
  73. package/dist/client/message-processor.js +352 -0
  74. package/dist/client/multi-bot-manager.d.ts +24 -0
  75. package/dist/client/multi-bot-manager.js +74 -0
  76. package/dist/client/providers/anthropic-provider.d.ts +19 -0
  77. package/dist/client/providers/anthropic-provider.js +631 -0
  78. package/dist/client/providers/llm-provider.d.ts +47 -0
  79. package/dist/client/providers/llm-provider.js +367 -0
  80. package/dist/client/providers/openai-provider.d.ts +23 -0
  81. package/dist/client/providers/openai-provider.js +621 -0
  82. package/dist/client/simple-llm-caller.d.ts +19 -0
  83. package/dist/client/simple-llm-caller.js +100 -0
  84. package/dist/client/skill-generator.d.ts +81 -0
  85. package/dist/client/skill-generator.js +386 -0
  86. package/dist/client/test-adaptive-bot.d.ts +9 -0
  87. package/dist/client/test-adaptive-bot.js +82 -0
  88. package/dist/client/token-pricing.d.ts +38 -0
  89. package/dist/client/token-pricing.js +127 -0
  90. package/dist/client/token-tracker.d.ts +232 -0
  91. package/dist/client/token-tracker.js +457 -0
  92. package/dist/client/token-usage-bot.d.ts +53 -0
  93. package/dist/client/token-usage-bot.js +153 -0
  94. package/dist/client/tool-executor.d.ts +69 -0
  95. package/dist/client/tool-executor.js +159 -0
  96. package/dist/client/tool-schema-loader.d.ts +60 -0
  97. package/dist/client/tool-schema-loader.js +178 -0
  98. package/dist/client/types.d.ts +69 -0
  99. package/dist/client/types.js +7 -0
  100. package/dist/config.d.ts +162 -0
  101. package/dist/config.js +296 -0
  102. package/dist/core.d.ts +26 -0
  103. package/dist/core.js +147 -0
  104. package/dist/lib/context-manager.d.ts +111 -0
  105. package/dist/lib/context-manager.js +431 -0
  106. package/dist/lib/logger.d.ts +74 -0
  107. package/dist/lib/logger.js +277 -0
  108. package/dist/lib/materialize.d.ts +3 -0
  109. package/dist/lib/materialize.js +101 -0
  110. package/dist/lib/normalizedName.d.ts +7 -0
  111. package/dist/lib/normalizedName.js +48 -0
  112. package/dist/lib/prompt-length-manager.d.ts +81 -0
  113. package/dist/lib/prompt-length-manager.js +457 -0
  114. package/dist/lib/terminal-prompt.d.ts +9 -0
  115. package/dist/lib/terminal-prompt.js +108 -0
  116. package/dist/mcp/UserContextCache.d.ts +56 -0
  117. package/dist/mcp/UserContextCache.js +163 -0
  118. package/dist/mcp/auth.d.ts +2 -0
  119. package/dist/mcp/auth.js +29 -0
  120. package/dist/mcp/hailer-clients.d.ts +42 -0
  121. package/dist/mcp/hailer-clients.js +246 -0
  122. package/dist/mcp/signal-handler.d.ts +45 -0
  123. package/dist/mcp/signal-handler.js +317 -0
  124. package/dist/mcp/tool-registry.d.ts +100 -0
  125. package/dist/mcp/tool-registry.js +306 -0
  126. package/dist/mcp/tools/activity.d.ts +15 -0
  127. package/dist/mcp/tools/activity.js +955 -0
  128. package/dist/mcp/tools/app.d.ts +20 -0
  129. package/dist/mcp/tools/app.js +1488 -0
  130. package/dist/mcp/tools/discussion.d.ts +19 -0
  131. package/dist/mcp/tools/discussion.js +950 -0
  132. package/dist/mcp/tools/file.d.ts +15 -0
  133. package/dist/mcp/tools/file.js +119 -0
  134. package/dist/mcp/tools/insight.d.ts +17 -0
  135. package/dist/mcp/tools/insight.js +806 -0
  136. package/dist/mcp/tools/skill.d.ts +10 -0
  137. package/dist/mcp/tools/skill.js +279 -0
  138. package/dist/mcp/tools/user.d.ts +10 -0
  139. package/dist/mcp/tools/user.js +108 -0
  140. package/dist/mcp/tools/workflow-template.d.ts +19 -0
  141. package/dist/mcp/tools/workflow-template.js +822 -0
  142. package/dist/mcp/tools/workflow.d.ts +18 -0
  143. package/dist/mcp/tools/workflow.js +1362 -0
  144. package/dist/mcp/utils/api-errors.d.ts +45 -0
  145. package/dist/mcp/utils/api-errors.js +160 -0
  146. package/dist/mcp/utils/data-transformers.d.ts +102 -0
  147. package/dist/mcp/utils/data-transformers.js +194 -0
  148. package/dist/mcp/utils/file-upload.d.ts +33 -0
  149. package/dist/mcp/utils/file-upload.js +148 -0
  150. package/dist/mcp/utils/hailer-api-client.d.ts +120 -0
  151. package/dist/mcp/utils/hailer-api-client.js +323 -0
  152. package/dist/mcp/utils/index.d.ts +13 -0
  153. package/dist/mcp/utils/index.js +39 -0
  154. package/dist/mcp/utils/logger.d.ts +42 -0
  155. package/dist/mcp/utils/logger.js +103 -0
  156. package/dist/mcp/utils/types.d.ts +286 -0
  157. package/dist/mcp/utils/types.js +7 -0
  158. package/dist/mcp/workspace-cache.d.ts +42 -0
  159. package/dist/mcp/workspace-cache.js +97 -0
  160. package/dist/mcp-server.d.ts +42 -0
  161. package/dist/mcp-server.js +280 -0
  162. package/package.json +56 -0
  163. package/tsconfig.json +23 -0
@@ -0,0 +1,514 @@
1
+ # Insight API Endpoints Reference
2
+
3
+ Complete reference for Hailer Insight API endpoints. Insights provide SQL-like reporting over workflow/activity data.
4
+
5
+ ## Table of Contents
6
+
7
+ - [v3.insight.create](#v3insightcreate) - Create new insight
8
+ - [v3.insight.update](#v3insightupdate) - Update existing insight
9
+ - [v3.insight.copy](#v3insightcopy) - Copy/duplicate an insight
10
+ - [v3.insight.remove](#v3insightremove) - Delete an insight
11
+ - [v3.insight.list](#v3insightlist) - List all insights
12
+ - [v3.insight.public](#v3insightpublic) - Get public insight data
13
+ - [v3.insight.data](#v3insightdata) - Execute insight query and get results
14
+ - [v3.insight.preview](#v3insightpreview) - Preview insight during design
15
+ - [v3.insight.member.add](#v3insightmemberadd) - Add member permissions
16
+ - [v3.insight.member.remove](#v3insightmemberremove) - Remove member permissions
17
+
18
+ ---
19
+
20
+ ## Prerequisites
21
+
22
+ Before using Insights:
23
+ 1. Must have workflows created with activities
24
+ 2. Understand workflow schema (field IDs, field types)
25
+ 3. Basic SQL knowledge (SELECT, JOIN, WHERE, etc.)
26
+ 4. Use `v3.insight.preview` while designing to test queries
27
+
28
+ ---
29
+
30
+ ## v3.insight.create
31
+
32
+ Create new Insight with SQL query over workflow data.
33
+
34
+ **Endpoint**: `POST /v3/insight/create`
35
+
36
+ **Request Body**:
37
+ ```json
38
+ {
39
+ "0": "stringstringstringstring", // workspaceId
40
+ "1": {
41
+ "name": "string",
42
+ "public": false,
43
+ "sources": [
44
+ {
45
+ "name": "tableName", // SQL table alias
46
+ "workflowId": "workflowId", // Which workflow to query
47
+ "fields": [
48
+ { "name": "columnName", "meta": "name" }, // Activity name
49
+ { "name": "columnName", "fieldId": "fieldId" } // Custom field
50
+ ]
51
+ }
52
+ ],
53
+ "query": "SELECT columnName FROM tableName" // SQL query
54
+ }
55
+ }
56
+ ```
57
+
58
+ **Example 1 - Single Workflow**:
59
+ ```javascript
60
+ v3.insight.create(
61
+ workspaceId,
62
+ {
63
+ name: 'Book Insights',
64
+ sources: [{
65
+ name: 'books',
66
+ workflowId: bookWorkflowId,
67
+ fields: [
68
+ { name: 'title', meta: 'name' }, // Activity name
69
+ { name: 'publishDate', fieldId: fieldId } // Custom field
70
+ ]
71
+ }],
72
+ query: 'SELECT title, publishDate FROM books',
73
+ }
74
+ )
75
+ ```
76
+
77
+ **Example 2 - Join Two Workflows**:
78
+ ```javascript
79
+ v3.insight.create(
80
+ workspaceId,
81
+ {
82
+ name: 'Books with Authors',
83
+ sources: [
84
+ {
85
+ name: 'books',
86
+ workflowId: bookWorkflowId,
87
+ fields: [
88
+ { name: 'title', meta: 'name' },
89
+ { name: 'author', fieldId: authorLinkFieldId }
90
+ ]
91
+ },
92
+ {
93
+ name: 'authors',
94
+ workflowId: authorWorkflowId,
95
+ fields: [
96
+ { name: 'id', meta: '_id' }, // Activity ID
97
+ { name: 'authorName', meta: 'name' }, // Activity Name
98
+ { name: 'born', fieldId: bornFieldId }
99
+ ]
100
+ }
101
+ ],
102
+ query: `
103
+ SELECT title, publishDate, authorName
104
+ FROM authors
105
+ LEFT JOIN books ON books.author = authors.id
106
+ `
107
+ }
108
+ )
109
+ ```
110
+
111
+ **Meta Fields** (built-in activity properties):
112
+ - `meta: 'name'` - Activity name
113
+ - `meta: '_id'` - Activity ID
114
+ - `meta: 'created'` - Creation timestamp
115
+ - `meta: 'updated'` - Last update timestamp
116
+ - `meta: 'phase'` - Current phase ID
117
+ - `meta: 'team'` - Owner team ID
118
+
119
+ **Response**:
120
+ ```json
121
+ {
122
+ "code": 0,
123
+ "msg": "string",
124
+ "details": {
125
+ "insightId": "stringstringstringstring"
126
+ },
127
+ "debug": null
128
+ }
129
+ ```
130
+
131
+ ---
132
+
133
+ ## v3.insight.update
134
+
135
+ Update an existing insight (name, query, sources, permissions, etc.).
136
+
137
+ **Endpoint**: `POST /v3/insight/update`
138
+
139
+ **Request Body**:
140
+ ```json
141
+ {
142
+ "0": "stringstringstringstring", // insightId
143
+ "1": {
144
+ "name": "string",
145
+ "public": true,
146
+ "sources": [],
147
+ "query": "string",
148
+ "presets": []
149
+ }
150
+ }
151
+ ```
152
+
153
+ **Note**: Only workspace admins can modify `sources`. Regular users with edit permission can only update `name`, `query`, and `presets` if sources remain unchanged.
154
+
155
+ **Response**:
156
+ ```json
157
+ {
158
+ "code": 0,
159
+ "msg": "string",
160
+ "details": {},
161
+ "debug": null
162
+ }
163
+ ```
164
+
165
+ ---
166
+
167
+ ## v3.insight.copy
168
+
169
+ Duplicate an existing insight.
170
+
171
+ **Endpoint**: `POST /v3/insight/copy`
172
+
173
+ **Request Body**:
174
+ ```json
175
+ {
176
+ "0": "stringstringstringstring", // insightId to copy
177
+ "1": {
178
+ "name": "Copy of Original Insight"
179
+ }
180
+ }
181
+ ```
182
+
183
+ **Response**:
184
+ ```json
185
+ {
186
+ "code": 0,
187
+ "msg": "string",
188
+ "details": {
189
+ "insightId": "stringstringstringstring" // New insight ID
190
+ },
191
+ "debug": null
192
+ }
193
+ ```
194
+
195
+ ---
196
+
197
+ ## v3.insight.remove
198
+
199
+ Delete an insight.
200
+
201
+ **Endpoint**: `POST /v3/insight/remove`
202
+
203
+ **Request Body**:
204
+ ```json
205
+ {
206
+ "0": "stringstringstringstring" // insightId
207
+ }
208
+ ```
209
+
210
+ **Response**:
211
+ ```json
212
+ {
213
+ "code": 0,
214
+ "msg": "string",
215
+ "details": {},
216
+ "debug": null
217
+ }
218
+ ```
219
+
220
+ ---
221
+
222
+ ## v3.insight.list
223
+
224
+ List all insights in a workspace that the user has access to.
225
+
226
+ **Endpoint**: `POST /v3/insight/list`
227
+
228
+ **Request Body**:
229
+ ```json
230
+ {
231
+ "0": "stringstringstringstring" // workspaceId
232
+ }
233
+ ```
234
+
235
+ **Response**:
236
+ ```json
237
+ {
238
+ "code": 0,
239
+ "msg": "string",
240
+ "details": {
241
+ "insights": [
242
+ {
243
+ "_id": "stringstringstringstring",
244
+ "name": "Insight Name",
245
+ "public": false,
246
+ "sources": [],
247
+ "query": "SELECT ...",
248
+ "created": 1234567890,
249
+ "updated": 1234567890
250
+ }
251
+ ]
252
+ },
253
+ "debug": null
254
+ }
255
+ ```
256
+
257
+ ---
258
+
259
+ ## v3.insight.public
260
+
261
+ Get public data for a publicly shared insight (no authentication required).
262
+
263
+ **Endpoint**: `POST /v3/insight/public`
264
+
265
+ **Request Body**:
266
+ ```json
267
+ {
268
+ "0": "string" // insightKey (max 32 chars)
269
+ }
270
+ ```
271
+
272
+ **Response**:
273
+ ```json
274
+ {
275
+ "code": 0,
276
+ "msg": "string",
277
+ "details": {
278
+ "insight": {},
279
+ "data": []
280
+ },
281
+ "debug": null
282
+ }
283
+ ```
284
+
285
+ ---
286
+
287
+ ## v3.insight.data
288
+
289
+ Execute the insight query and get results (actual data).
290
+
291
+ **Endpoint**: `POST /v3/insight/data`
292
+
293
+ **Request Body**:
294
+ ```json
295
+ {
296
+ "0": "stringstringstringstring", // insightId
297
+ "1": {
298
+ "update": true // Whether to refresh/recalculate data
299
+ }
300
+ }
301
+ ```
302
+
303
+ **Response**:
304
+ ```json
305
+ {
306
+ "code": 0,
307
+ "msg": "string",
308
+ "details": {
309
+ "columns": ["title", "publishDate", "authorName"],
310
+ "rows": [
311
+ ["Book 1", "2024-01-01", "Author A"],
312
+ ["Book 2", "2024-02-01", "Author B"]
313
+ ]
314
+ },
315
+ "debug": null
316
+ }
317
+ ```
318
+
319
+ ---
320
+
321
+ ## v3.insight.preview
322
+
323
+ Preview partial insight during design. Used for testing SQL queries before saving.
324
+
325
+ **Key Features**:
326
+ - Can be called frequently during design
327
+ - Returns errors if SQL is invalid
328
+ - Limited to ~20 activities for performance
329
+ - Workspace admins can modify sources
330
+ - Regular users cannot change sources (security)
331
+
332
+ **Endpoint**: `POST /v3/insight/preview`
333
+
334
+ **Request Body**:
335
+ ```json
336
+ {
337
+ "0": "stringstringstringstring", // workspaceId
338
+ "1": {
339
+ "query": "SELECT title FROM books WHERE publishDate > '2024-01-01'",
340
+ "sources": [
341
+ {
342
+ "name": "books",
343
+ "workflowId": "workflowId",
344
+ "fields": [
345
+ { "name": "title", "meta": "name" },
346
+ { "name": "publishDate", "fieldId": "fieldId" }
347
+ ]
348
+ }
349
+ ]
350
+ }
351
+ }
352
+ ```
353
+
354
+ **Response** (success):
355
+ ```json
356
+ {
357
+ "code": 0,
358
+ "msg": "string",
359
+ "details": {
360
+ "columns": ["title"],
361
+ "rows": [
362
+ ["Book 1"],
363
+ ["Book 2"]
364
+ ],
365
+ "limited": true // Indicates data was limited for preview
366
+ },
367
+ "debug": null
368
+ }
369
+ ```
370
+
371
+ **Response** (error):
372
+ ```json
373
+ {
374
+ "code": 403,
375
+ "msg": "SQL syntax error near 'SELEC'",
376
+ "details": {},
377
+ "debug": null
378
+ }
379
+ ```
380
+
381
+ ---
382
+
383
+ ## v3.insight.member.add
384
+
385
+ Add member permissions to an insight (user, team, workspace, or group).
386
+
387
+ **Endpoint**: `POST /v3/insight.member.add`
388
+
389
+ **Request Body**:
390
+ ```json
391
+ {
392
+ "0": "stringstringstringstring", // insightId
393
+ "1": "network_<networkId>" // OR: team_<teamId>, user_<userId>, group_<groupId>
394
+ }
395
+ ```
396
+
397
+ **Member Format**:
398
+ - Workspace: `network_<networkId>`
399
+ - Team: `team_<teamId>`
400
+ - User: `user_<userId>`
401
+ - Group: `group_<groupId>`
402
+
403
+ **Response**:
404
+ ```json
405
+ {
406
+ "code": 0,
407
+ "msg": "string",
408
+ "details": {},
409
+ "debug": null
410
+ }
411
+ ```
412
+
413
+ ---
414
+
415
+ ## v3.insight.member.remove
416
+
417
+ Remove member permissions from an insight.
418
+
419
+ **Endpoint**: `POST /v3/insight.member.remove`
420
+
421
+ **Request Body**:
422
+ ```json
423
+ {
424
+ "0": "stringstringstringstring", // insightId
425
+ "1": "user_<userId>" // OR: network_<networkId>, team_<teamId>, group_<groupId>
426
+ }
427
+ ```
428
+
429
+ **Response**:
430
+ ```json
431
+ {
432
+ "code": 0,
433
+ "msg": "string",
434
+ "details": {},
435
+ "debug": null
436
+ }
437
+ ```
438
+
439
+ ---
440
+
441
+ ## SQL Query Guidelines
442
+
443
+ ### Supported SQL Features
444
+ - SELECT with column names or * (all)
445
+ - FROM with table aliases (source names)
446
+ - WHERE clauses with AND/OR
447
+ - JOIN (INNER, LEFT, RIGHT, FULL)
448
+ - GROUP BY with aggregations
449
+ - ORDER BY with ASC/DESC
450
+ - LIMIT and OFFSET
451
+
452
+ ### Common Patterns
453
+
454
+ **Filter by phase**:
455
+ ```sql
456
+ SELECT title FROM books WHERE phase = 'phaseId'
457
+ ```
458
+
459
+ **Count activities**:
460
+ ```sql
461
+ SELECT COUNT(*) as total FROM books
462
+ ```
463
+
464
+ **Group and aggregate**:
465
+ ```sql
466
+ SELECT author, COUNT(*) as bookCount
467
+ FROM books
468
+ GROUP BY author
469
+ ORDER BY bookCount DESC
470
+ ```
471
+
472
+ **Join workflows**:
473
+ ```sql
474
+ SELECT b.title, a.name as authorName
475
+ FROM books b
476
+ LEFT JOIN authors a ON b.authorId = a.id
477
+ WHERE b.publishDate > '2024-01-01'
478
+ ```
479
+
480
+ ---
481
+
482
+ ## Common Response Format
483
+
484
+ All endpoints return this format:
485
+
486
+ ```json
487
+ {
488
+ "code": 0, // 0 = success, 403 = error
489
+ "msg": "string", // Success/error message
490
+ "details": {}, // Response data
491
+ "debug": null // Optional debug info
492
+ }
493
+ ```
494
+
495
+ ---
496
+
497
+ ## Permissions
498
+
499
+ **Workspace Admins**:
500
+ - Create, update, delete insights
501
+ - Modify insight sources
502
+ - Share insights (make public)
503
+ - Manage all insight permissions
504
+
505
+ **Regular Users**:
506
+ - View insights they have access to
507
+ - Edit insights (name, query) if given permission
508
+ - Cannot modify sources (security restriction)
509
+ - Cannot change permissions
510
+
511
+ **Public Insights**:
512
+ - Accessible without authentication via `insightKey`
513
+ - Read-only access
514
+ - Good for public dashboards/reports