@elevasis/sdk 1.25.0 → 1.26.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.
- package/dist/cli.cjs +87 -120
- package/dist/index.d.ts +220 -50
- package/dist/index.js +4 -435
- package/dist/node/index.d.ts +46 -38
- package/dist/test-utils/index.d.ts +154 -40
- package/dist/test-utils/index.js +27 -355
- package/dist/types/worker/adapters/clickup.d.ts +22 -0
- package/dist/types/worker/adapters/index.d.ts +1 -0
- package/dist/worker/index.js +32 -354
- package/package.json +2 -2
- package/reference/_navigation.md +11 -1
- package/reference/_reference-manifest.json +70 -0
- package/reference/claude-config/rules/organization-model.md +12 -1
- package/reference/claude-config/rules/organization-os.md +12 -1
- package/reference/claude-config/skills/om/SKILL.md +13 -5
- package/reference/claude-config/skills/om/operations/codify-level-a.md +109 -100
- package/reference/claude-config/skills/om/operations/customers.md +10 -6
- package/reference/claude-config/skills/om/operations/features.md +7 -3
- package/reference/claude-config/skills/om/operations/goals.md +10 -6
- package/reference/claude-config/skills/om/operations/identity.md +8 -5
- package/reference/claude-config/skills/om/operations/labels.md +17 -1
- package/reference/claude-config/skills/om/operations/offerings.md +11 -7
- package/reference/claude-config/skills/om/operations/roles.md +11 -7
- package/reference/claude-config/skills/om/operations/techStack.md +10 -2
- package/reference/claude-config/skills/setup/SKILL.md +2 -2
- package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -0
- package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -0
- package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -0
- package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -0
- package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +49 -0
- package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +42 -0
- package/reference/cli-management.mdx +541 -0
- package/reference/cli.mdx +4 -532
- package/reference/concepts.mdx +134 -146
- package/reference/deployment/api.mdx +296 -297
- package/reference/deployment/command-center.mdx +208 -209
- package/reference/deployment/index.mdx +194 -195
- package/reference/deployment/provided-features.mdx +110 -107
- package/reference/deployment/ui-execution.mdx +249 -250
- package/reference/examples/organization-model.ts +14 -4
- package/reference/framework/index.mdx +111 -195
- package/reference/framework/resource-documentation.mdx +90 -0
- package/reference/framework/tutorial-system.mdx +135 -135
- package/reference/getting-started.mdx +141 -142
- package/reference/index.mdx +95 -106
- package/reference/packages/ui/src/auth/README.md +6 -6
- package/reference/platform-tools/adapters-integration.mdx +300 -301
- package/reference/platform-tools/adapters-platform.mdx +552 -553
- package/reference/platform-tools/index.mdx +216 -217
- package/reference/platform-tools/type-safety.mdx +82 -82
- package/reference/resources/index.mdx +348 -349
- package/reference/resources/patterns.mdx +446 -449
- package/reference/resources/types.mdx +115 -116
- package/reference/roadmap.mdx +164 -165
- package/reference/rules/organization-model.md +14 -0
- package/reference/runtime.mdx +172 -173
- package/reference/scaffold/operations/propagation-pipeline.md +1 -1
- package/reference/scaffold/recipes/extend-lead-gen.md +130 -77
- package/reference/scaffold/reference/contracts.md +376 -446
- package/reference/scaffold/reference/glossary.md +8 -6
- package/reference/scaffold/ui/feature-flags-and-gating.md +59 -46
- package/reference/scaffold/ui/feature-shell.mdx +11 -11
- package/reference/scaffold/ui/recipes.md +24 -24
- package/reference/troubleshooting.mdx +222 -223
|
@@ -1,553 +1,552 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Platform Adapters
|
|
3
|
-
description: Type-safe singleton adapters for built-in platform services -- scheduler, storage, LLM, PDF, approval, notifications, acqDb, list, execution, and email -- no credentials required
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
{ offset: '+
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
{ role: '
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
| `
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
|
232
|
-
|
|
|
233
|
-
| `
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
{ id: '
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
|
271
|
-
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
|
302
|
-
|
|
|
303
|
-
| `
|
|
304
|
-
| `
|
|
305
|
-
| `
|
|
306
|
-
| `
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
|
312
|
-
|
|
|
313
|
-
| `
|
|
314
|
-
| `
|
|
315
|
-
| `
|
|
316
|
-
| `
|
|
317
|
-
| `
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
|
323
|
-
|
|
|
324
|
-
| `
|
|
325
|
-
| `
|
|
326
|
-
| `
|
|
327
|
-
| `
|
|
328
|
-
| `
|
|
329
|
-
| `
|
|
330
|
-
| `
|
|
331
|
-
| `
|
|
332
|
-
| `
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
|
338
|
-
|
|
|
339
|
-
| `
|
|
340
|
-
| `
|
|
341
|
-
| `
|
|
342
|
-
| `
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
|
348
|
-
|
|
|
349
|
-
| `
|
|
350
|
-
| `
|
|
351
|
-
| `
|
|
352
|
-
| `
|
|
353
|
-
| `
|
|
354
|
-
| `
|
|
355
|
-
| `
|
|
356
|
-
| `
|
|
357
|
-
| `
|
|
358
|
-
| `
|
|
359
|
-
| `
|
|
360
|
-
| `
|
|
361
|
-
| `
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
|
367
|
-
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
|
373
|
-
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
{ email: '
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
|
410
|
-
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
|
439
|
-
|
|
|
440
|
-
| `
|
|
441
|
-
| `
|
|
442
|
-
| `
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
|
478
|
-
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
console.log(err.
|
|
541
|
-
console.log(err.
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
**Last Updated:** 2026-04-15
|
|
1
|
+
---
|
|
2
|
+
title: Platform Adapters
|
|
3
|
+
description: Type-safe singleton adapters for built-in platform services -- scheduler, storage, LLM, PDF, approval, notifications, acqDb, list, execution, and email -- no credentials required
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Platform adapters are singleton objects imported directly from `@elevasis/sdk/worker`. They require no credential argument because the platform injects context server-side. For integration adapters (Attio, Stripe, etc.), see [Integration Adapters](adapters-integration.mdx).
|
|
7
|
+
|
|
8
|
+
```typescript
|
|
9
|
+
import {
|
|
10
|
+
acqDb, scheduler, storage, pdf, approval,
|
|
11
|
+
notifications, llm, list, execution, email,
|
|
12
|
+
} from '@elevasis/sdk/worker'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Quick Reference
|
|
18
|
+
|
|
19
|
+
| Import | Methods | Purpose |
|
|
20
|
+
| --------------- | ------- | ------------------------------------ |
|
|
21
|
+
| `acqDb` | 49 | Acquisition database CRUD and sync |
|
|
22
|
+
| `scheduler` | 9 | Task schedule management |
|
|
23
|
+
| `storage` | 5 | File upload, download, signed URLs |
|
|
24
|
+
| `pdf` | 2 | PDF rendering to storage or buffer |
|
|
25
|
+
| `approval` | 2 | Human-in-the-loop approval gates |
|
|
26
|
+
| `notifications` | 1 | In-app team notifications |
|
|
27
|
+
| `llm` | 1 | LLM inference with structured output |
|
|
28
|
+
| `list` | 4 | List-scoped execution and stage ops |
|
|
29
|
+
| `execution` | 1 | Trigger nested child executions |
|
|
30
|
+
| `email` | 1 | Send email to org members |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Scheduler Adapter
|
|
35
|
+
|
|
36
|
+
Singleton -- 9 methods for task schedule management.
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { scheduler } from '@elevasis/sdk/worker'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Methods
|
|
43
|
+
|
|
44
|
+
| Method | Params | Returns |
|
|
45
|
+
| -------------------------------- | ------------------------------ | ---------------------- |
|
|
46
|
+
| `createSchedule` | `CreateScheduleInput` | `TaskSchedule` |
|
|
47
|
+
| `updateAnchor` | `{ scheduleId, anchorAt }` | `TaskSchedule` |
|
|
48
|
+
| `deleteSchedule` | `{ scheduleId }` | `void` |
|
|
49
|
+
| `findByIdempotencyKey` | `{ idempotencyKey }` | `TaskSchedule | null` |
|
|
50
|
+
| `deleteScheduleByIdempotencyKey` | `{ idempotencyKey }` | `void` |
|
|
51
|
+
| `listSchedules` | `{ status?, limit?, offset? }` | `TaskSchedule[]` |
|
|
52
|
+
| `getSchedule` | `{ scheduleId }` | `TaskSchedule` |
|
|
53
|
+
| `cancelSchedule` | `{ scheduleId }` | `void` |
|
|
54
|
+
| `cancelSchedulesByMetadata` | `{ metadata }` | `{ cancelledCount }` |
|
|
55
|
+
|
|
56
|
+
### Examples
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// Create a relative schedule (follow-up sequence)
|
|
60
|
+
const schedule = await scheduler.createSchedule({
|
|
61
|
+
organizationId: context.organizationId,
|
|
62
|
+
name: 'Proposal follow-up',
|
|
63
|
+
target: { resourceType: 'workflow', resourceId: 'send-followup' },
|
|
64
|
+
scheduleConfig: {
|
|
65
|
+
type: 'relative',
|
|
66
|
+
anchorAt: '2026-03-15T10:00:00Z',
|
|
67
|
+
anchorLabel: 'proposal_sent_date',
|
|
68
|
+
items: [
|
|
69
|
+
{ offset: '+3d', payload: { step: 'first-followup' }, label: 'First follow-up' },
|
|
70
|
+
{ offset: '+7d', payload: { step: 'second-followup' }, label: 'Second follow-up' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
metadata: { dealId: 'deal-123', contactEmail: 'jane@acme.com' },
|
|
74
|
+
idempotencyKey: 'proposal-followup-deal-123',
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// Reschedule (update anchor)
|
|
78
|
+
await scheduler.updateAnchor({
|
|
79
|
+
scheduleId: schedule.id,
|
|
80
|
+
anchorAt: '2026-03-20T10:00:00Z',
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
// Cancel all schedules matching metadata
|
|
84
|
+
await scheduler.cancelSchedulesByMetadata({
|
|
85
|
+
metadata: { dealId: 'deal-123' },
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Storage Adapter
|
|
92
|
+
|
|
93
|
+
Singleton -- 5 methods for file storage operations. All paths are relative to the organization's storage prefix (injected server-side).
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { storage } from '@elevasis/sdk/worker'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Methods
|
|
100
|
+
|
|
101
|
+
| Method | Params | Returns |
|
|
102
|
+
| ----------------- | ----------------------- | ------------------------ |
|
|
103
|
+
| `upload` | `StorageUploadInput` | `StorageUploadOutput` |
|
|
104
|
+
| `download` | `StorageDownloadInput` | `StorageDownloadOutput` |
|
|
105
|
+
| `createSignedUrl` | `StorageSignedUrlInput` | `StorageSignedUrlOutput` |
|
|
106
|
+
| `delete` | `StorageDeleteInput` | `StorageDeleteOutput` |
|
|
107
|
+
| `list` | `StorageListInput` | `StorageListOutput` |
|
|
108
|
+
|
|
109
|
+
### Examples
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Upload a PDF
|
|
113
|
+
await storage.upload({
|
|
114
|
+
bucket: 'acquisition',
|
|
115
|
+
path: 'proposals/deal-123/proposal.pdf',
|
|
116
|
+
content: base64PdfContent,
|
|
117
|
+
contentType: 'application/pdf',
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
// Generate a signed URL (temporary access)
|
|
121
|
+
const { signedUrl } = await storage.createSignedUrl({
|
|
122
|
+
bucket: 'acquisition',
|
|
123
|
+
path: 'proposals/deal-123/proposal.pdf',
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
// List files under a prefix
|
|
127
|
+
const files = await storage.list({
|
|
128
|
+
bucket: 'acquisition',
|
|
129
|
+
path: 'proposals/deal-123/',
|
|
130
|
+
})
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## LLM Adapter
|
|
136
|
+
|
|
137
|
+
Singleton -- 1 method with a generic `<T>` for typed structured output. No API keys needed -- keys are resolved server-side from environment variables.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { llm } from '@elevasis/sdk/worker'
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Method
|
|
144
|
+
|
|
145
|
+
| Method | Params | Returns |
|
|
146
|
+
| --------------- | -------------------------------------- | -------------------------- |
|
|
147
|
+
| `generate<T>` | `Omit<LLMGenerateRequest, 'signal'>` | `LLMGenerateResponse<T>` |
|
|
148
|
+
|
|
149
|
+
The `signal` property (AbortSignal) is not serializable over the postMessage boundary. Abort is handled at the worker level.
|
|
150
|
+
|
|
151
|
+
### Example
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
interface Classification {
|
|
155
|
+
category: 'interested' | 'not-interested' | 'bounced'
|
|
156
|
+
confidence: number
|
|
157
|
+
summary: string
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const response = await llm.generate<Classification>({
|
|
161
|
+
provider: 'anthropic',
|
|
162
|
+
model: 'claude-sonnet-4-5',
|
|
163
|
+
messages: [
|
|
164
|
+
{ role: 'system', content: 'Classify this email reply.' },
|
|
165
|
+
{ role: 'user', content: emailText },
|
|
166
|
+
],
|
|
167
|
+
responseSchema: {
|
|
168
|
+
type: 'object',
|
|
169
|
+
properties: {
|
|
170
|
+
category: { type: 'string', enum: ['interested', 'not-interested', 'bounced'] },
|
|
171
|
+
confidence: { type: 'number', minimum: 0, maximum: 1 },
|
|
172
|
+
summary: { type: 'string' },
|
|
173
|
+
},
|
|
174
|
+
required: ['category', 'confidence', 'summary'],
|
|
175
|
+
},
|
|
176
|
+
temperature: 0.1,
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
// response.output is typed as Classification
|
|
180
|
+
const { category, confidence, summary } = response.output
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Supported models:** See the full model table in [Platform Tools](index.mdx#llm-tool).
|
|
184
|
+
|
|
185
|
+
See [Adapter Type Safety](type-safety.mdx) for required field enforcement and design rationale.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## PDF Adapter
|
|
190
|
+
|
|
191
|
+
Singleton -- 2 methods for rendering PDFDocument structures to files or buffers. No credential required.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { pdf } from '@elevasis/sdk/worker'
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Methods
|
|
198
|
+
|
|
199
|
+
| Method | Params | Returns |
|
|
200
|
+
| ---------------- | ------------------------------------------------- | --------------------------- |
|
|
201
|
+
| `render` | `{ document, theme?, storage: { bucket, path } }` | `{ success, pdfUrl, size }` |
|
|
202
|
+
| `renderToBuffer` | `{ document, theme? }` | `{ buffer }` |
|
|
203
|
+
|
|
204
|
+
### Example
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
// Render to storage (returns a URL)
|
|
208
|
+
const result = await pdf.render({
|
|
209
|
+
document: proposalDocument,
|
|
210
|
+
storage: { bucket: 'acquisition', path: 'proposals/deal-123/proposal.pdf' },
|
|
211
|
+
})
|
|
212
|
+
console.log(result.pdfUrl)
|
|
213
|
+
|
|
214
|
+
// Render to buffer (for inline processing)
|
|
215
|
+
const { buffer } = await pdf.renderToBuffer({ document: proposalDocument })
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Approval Adapter
|
|
221
|
+
|
|
222
|
+
Singleton -- 2 methods for creating and managing human-in-the-loop (HITL) approval tasks. No credential required.
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
import { approval } from '@elevasis/sdk/worker'
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Methods
|
|
229
|
+
|
|
230
|
+
| Method | Params | Returns |
|
|
231
|
+
| ------------------ | ---------------------------------------------------------------------------------------- | ------------- |
|
|
232
|
+
| `create` | `{ actions, context, description?, priority?, humanCheckpoint?, metadata?, expiresAt? }` | `{ id }` |
|
|
233
|
+
| `deleteByMetadata` | `{ metadata, status? }` | `{ deleted }` |
|
|
234
|
+
|
|
235
|
+
### Example
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
// Create an approval gate
|
|
239
|
+
const task = await approval.create({
|
|
240
|
+
actions: [
|
|
241
|
+
{ id: 'approve', label: 'Approve', type: 'primary' },
|
|
242
|
+
{ id: 'reject', label: 'Reject', type: 'danger' },
|
|
243
|
+
],
|
|
244
|
+
context: { dealId: 'deal-123', proposalUrl: 'https://...' },
|
|
245
|
+
description: 'Review proposal for Acme Corp',
|
|
246
|
+
humanCheckpoint: 'proposal-review',
|
|
247
|
+
metadata: { dealId: 'deal-123' },
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
// Clean up stale tasks
|
|
251
|
+
await approval.deleteByMetadata({
|
|
252
|
+
metadata: { dealId: 'deal-123' },
|
|
253
|
+
status: 'pending',
|
|
254
|
+
})
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Notifications Adapter
|
|
260
|
+
|
|
261
|
+
Singleton -- 1 method for sending in-app team notifications. `userId` and `organizationId` are injected server-side.
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
import { notifications } from '@elevasis/sdk/worker'
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Method
|
|
268
|
+
|
|
269
|
+
| Method | Params | Returns |
|
|
270
|
+
| -------- | ---------------------- | ------- |
|
|
271
|
+
| `create` | `NotificationSDKInput` | `void` |
|
|
272
|
+
|
|
273
|
+
`NotificationSDKInput` fields: `category`, `title`, `message`, `actionUrl?`, `metadata?`
|
|
274
|
+
|
|
275
|
+
### Example
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
await notifications.create({
|
|
279
|
+
category: 'acquisition',
|
|
280
|
+
title: 'New lead qualified',
|
|
281
|
+
message: 'Acme Corp has been qualified and moved to proposal stage.',
|
|
282
|
+
actionUrl: '/deals/deal-123',
|
|
283
|
+
})
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## AcqDb Adapter
|
|
289
|
+
|
|
290
|
+
Singleton -- 41 methods for acquisition database management (lists, companies, contacts, deals, deal-sync, enrichment, social monitoring). `organizationId` is injected server-side -- never pass it.
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
import { acqDb } from '@elevasis/sdk/worker'
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Methods
|
|
297
|
+
|
|
298
|
+
**List operations:**
|
|
299
|
+
|
|
300
|
+
| Method | Params | Returns |
|
|
301
|
+
| ------------------- | --------------------------------------------------- | ------------------------- |
|
|
302
|
+
| `listLists` | none | `AcqList[]` |
|
|
303
|
+
| `createList` | `Omit<CreateListParams, 'organizationId'>` | `AcqList` |
|
|
304
|
+
| `updateList` | `{ id } & UpdateListParams` | `AcqList` |
|
|
305
|
+
| `deleteList` | `{ id }` | `void` |
|
|
306
|
+
| `addContactsToList` | `Omit<AddContactsToListParams, 'organizationId'>` | `AddContactsToListResult` |
|
|
307
|
+
|
|
308
|
+
**Company operations:**
|
|
309
|
+
|
|
310
|
+
| Method | Params | Returns |
|
|
311
|
+
| --------------- | ----------------------------------------------- | -------------------- |
|
|
312
|
+
| `createCompany` | `Omit<CreateCompanyParams, 'organizationId'>` | `AcqCompany` |
|
|
313
|
+
| `upsertCompany` | `Omit<UpsertCompanyParams, 'organizationId'>` | `AcqCompany` |
|
|
314
|
+
| `updateCompany` | `{ id } & UpdateCompanyParams` | `AcqCompany` |
|
|
315
|
+
| `getCompany` | `{ id }` | `AcqCompany | null` |
|
|
316
|
+
| `listCompanies` | `{ filters? }` | `AcqCompany[]` |
|
|
317
|
+
| `deleteCompany` | `{ id }` | `void` |
|
|
318
|
+
|
|
319
|
+
**Contact operations:**
|
|
320
|
+
|
|
321
|
+
| Method | Params | Returns |
|
|
322
|
+
| ----------------------------- | ----------------------------------------------------- | ------------------------------- |
|
|
323
|
+
| `createContact` | `Omit<CreateContactParams, 'organizationId'>` | `AcqContact` |
|
|
324
|
+
| `upsertContact` | `Omit<UpsertContactParams, 'organizationId'>` | `AcqContact` |
|
|
325
|
+
| `updateContact` | `{ id } & UpdateContactParams` | `AcqContact` |
|
|
326
|
+
| `getContact` | `{ id }` | `AcqContact | null` |
|
|
327
|
+
| `getContactByEmail` | `{ email }` | `AcqContact | null` |
|
|
328
|
+
| `listContacts` | `{ filters?, pagination? }` | `PaginatedResult<AcqContact>` |
|
|
329
|
+
| `deleteContact` | `{ id }` | `void` |
|
|
330
|
+
| `bulkImportContacts` | `Omit<BulkImportParams, 'organizationId'>` | `BulkImportResult` |
|
|
331
|
+
| `bulkImportCompanies` | `Omit<BulkImportCompaniesParams, 'organizationId'>` | `BulkImportCompaniesResult` |
|
|
332
|
+
| `deactivateContactsByCompany` | `{ companyId }` | `{ deactivated: number }` |
|
|
333
|
+
|
|
334
|
+
**Deal operations:**
|
|
335
|
+
|
|
336
|
+
| Method | Params | Returns |
|
|
337
|
+
| ---------------------- | -------------------------------------------- | ----------------- |
|
|
338
|
+
| `upsertDeal` | `Omit<UpsertDealParams, 'organizationId'>` | `AcqDeal` |
|
|
339
|
+
| `getDealByEmail` | `{ email }` | `AcqDeal | null` |
|
|
340
|
+
| `getDealByEnvelopeId` | `{ envelopeId }` | `AcqDeal | null` |
|
|
341
|
+
| `updateDealEnvelopeId` | `{ attioDealId, envelopeId }` | `AcqDeal | null` |
|
|
342
|
+
| `getDealByAttioId` | `{ attioDealId }` | `AcqDeal | null` |
|
|
343
|
+
|
|
344
|
+
**Deal-sync operations:**
|
|
345
|
+
|
|
346
|
+
| Method | Params | Returns |
|
|
347
|
+
| ------------------------------- | ----------------------------------------------------------- | ------------------------------------- |
|
|
348
|
+
| `updateDiscoveryData` | `Omit<UpdateDiscoveryDataParams, 'organizationId'>` | `void` |
|
|
349
|
+
| `updateProposalData` | `Omit<UpdateProposalDataParams, 'organizationId'>` | `void` |
|
|
350
|
+
| `markProposalSent` | `Omit<MarkProposalSentParams, 'organizationId'>` | `void` |
|
|
351
|
+
| `markProposalReviewed` | `Omit<MarkProposalReviewedParams, 'organizationId'>` | `void` |
|
|
352
|
+
| `updateCloseLostReason` | `Omit<UpdateCloseLostReasonParams, 'organizationId'>` | `void` |
|
|
353
|
+
| `updateFees` | `Omit<UpdateFeesParams, 'organizationId'>` | `void` |
|
|
354
|
+
| `syncDealStage` | `Omit<SyncDealStageParams, 'organizationId'>` | `void` |
|
|
355
|
+
| `setContactNurture` | `Omit<SetContactNurtureParams, 'organizationId'>` | `void` |
|
|
356
|
+
| `cancelSchedulesAndHitlByEmail` | `Omit<..., 'organizationId'>` | `{ schedulesCancelled, hitlDeleted }` |
|
|
357
|
+
| `cancelHitlByDealId` | `Omit<..., 'organizationId'>` | `{ hitlDeleted }` |
|
|
358
|
+
| `clearDealFields` | `Omit<ClearDealFieldsParams, 'organizationId'>` | `void` |
|
|
359
|
+
| `deleteDeal` | `Omit<DeleteDealParams, 'organizationId'>` | `void` |
|
|
360
|
+
| `recordReply` | `{ contactEmail, replyText, replySubject?, campaignName? }` | `void` |
|
|
361
|
+
| `recordDealActivity` | `{ attioDealId?, contactEmail?, type, ... }` | `void` |
|
|
362
|
+
|
|
363
|
+
**Enrichment operations:**
|
|
364
|
+
|
|
365
|
+
| Method | Params | Returns |
|
|
366
|
+
| --------------------- | -------------------------------------------------------- | ------- |
|
|
367
|
+
| `mergeEnrichmentData` | `{ id, table: 'acq_companies' | 'acq_contacts', data }` | `void` |
|
|
368
|
+
|
|
369
|
+
**Social monitoring operations:**
|
|
370
|
+
|
|
371
|
+
| Method | Params | Returns |
|
|
372
|
+
| ------------------- | --------------------------------------------------------------- | ------------------------- |
|
|
373
|
+
| `upsertSocialPosts` | `{ posts: Omit<UpsertSocialPostParams, 'organizationId'>[] }` | `UpsertSocialPostsResult` |
|
|
374
|
+
|
|
375
|
+
### Example
|
|
376
|
+
|
|
377
|
+
```typescript
|
|
378
|
+
const deal = await acqDb.getDealByEmail({ email: 'jane@acme.com' })
|
|
379
|
+
if (!deal) {
|
|
380
|
+
await acqDb.upsertDeal({
|
|
381
|
+
attioDealId: 'deal-123',
|
|
382
|
+
contactEmail: 'jane@acme.com',
|
|
383
|
+
})
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Bulk import contacts
|
|
387
|
+
await acqDb.bulkImportContacts({
|
|
388
|
+
listId: 'list-abc',
|
|
389
|
+
contacts: [
|
|
390
|
+
{ email: 'a@example.com', firstName: 'Alice' },
|
|
391
|
+
{ email: 'b@example.com', firstName: 'Bob' },
|
|
392
|
+
],
|
|
393
|
+
})
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Execution Adapter
|
|
399
|
+
|
|
400
|
+
Singleton -- 1 method for triggering another resource (workflow or agent) as a nested child execution. Maximum depth: 5 levels.
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
import { execution } from '@elevasis/sdk/worker'
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Method
|
|
407
|
+
|
|
408
|
+
| Method | Params | Returns |
|
|
409
|
+
| --------- | ------------------------ | ------------------------------------------ |
|
|
410
|
+
| `trigger` | `{ resourceId, input? }` | `{ success, executionId, output, error? }` |
|
|
411
|
+
|
|
412
|
+
### Example
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
const result = await execution.trigger({
|
|
416
|
+
resourceId: 'send-welcome-sequence',
|
|
417
|
+
input: { userId: newUser.id, email: newUser.email },
|
|
418
|
+
})
|
|
419
|
+
|
|
420
|
+
if (!result.success) {
|
|
421
|
+
throw new Error(`Child workflow failed: ${result.error}`)
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## List Adapter
|
|
428
|
+
|
|
429
|
+
Singleton -- 4 methods for list-scoped lead-gen runtime operations. This is the focused companion to `acqDb` for list-oriented workflows.
|
|
430
|
+
|
|
431
|
+
```typescript
|
|
432
|
+
import { list } from '@elevasis/sdk/worker'
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Methods
|
|
436
|
+
|
|
437
|
+
| Method | Params | Returns |
|
|
438
|
+
| -------------------- | ----------------------------------------- | ------------ |
|
|
439
|
+
| `getConfig` | `{ listId }` | `ListConfig` |
|
|
440
|
+
| `recordExecution` | `{ listId, executionId, payload? }` | `void` |
|
|
441
|
+
| `updateCompanyStage` | `{ listId, companyId, stage, metadata? }` | `void` |
|
|
442
|
+
| `updateContactStage` | `{ listId, contactId, stage, metadata? }` | `void` |
|
|
443
|
+
|
|
444
|
+
### Example
|
|
445
|
+
|
|
446
|
+
```typescript
|
|
447
|
+
const config = await list.getConfig({ listId })
|
|
448
|
+
|
|
449
|
+
await list.recordExecution({
|
|
450
|
+
listId,
|
|
451
|
+
executionId: context.executionId,
|
|
452
|
+
payload: { resourceId: context.resourceId, step: 'qualification' },
|
|
453
|
+
})
|
|
454
|
+
|
|
455
|
+
await list.updateCompanyStage({
|
|
456
|
+
listId,
|
|
457
|
+
companyId,
|
|
458
|
+
stage: 'qualified',
|
|
459
|
+
})
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
Use `list` when the workflow is explicitly operating on a list pipeline run. Use `acqDb` when you need broader list, company, contact, or deal CRUD.
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## Email Adapter
|
|
467
|
+
|
|
468
|
+
Singleton -- 1 method for sending platform emails to organization members (from `notifications@elevasis.io`). For client-facing emails, use the Resend or Instantly integration adapters instead.
|
|
469
|
+
|
|
470
|
+
```typescript
|
|
471
|
+
import { email } from '@elevasis/sdk/worker'
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Method
|
|
475
|
+
|
|
476
|
+
| Method | Params | Returns |
|
|
477
|
+
| ------ | ------------------------------------------------------------------------------- | --------------------------- |
|
|
478
|
+
| `send` | `{ subject, html?, text?, userIds?, targetRole?, targetAll?, replyTo?, tags? }` | `{ sent, failed, errors? }` |
|
|
479
|
+
|
|
480
|
+
### Example
|
|
481
|
+
|
|
482
|
+
```typescript
|
|
483
|
+
// Notify all org members
|
|
484
|
+
await email.send({
|
|
485
|
+
subject: 'New deal closed',
|
|
486
|
+
text: 'Acme Corp has signed the contract.',
|
|
487
|
+
targetAll: true,
|
|
488
|
+
})
|
|
489
|
+
|
|
490
|
+
// Notify specific users
|
|
491
|
+
await email.send({
|
|
492
|
+
subject: 'Action required',
|
|
493
|
+
html: '\<p\>Please review the proposal.\</p\>',
|
|
494
|
+
userIds: ['user-abc', 'user-def'],
|
|
495
|
+
})
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## Custom Adapters with `createAdapter`
|
|
501
|
+
|
|
502
|
+
The generic `createAdapter` factory is exported for building adapters for any tool not already covered. Define a type map and call the factory.
|
|
503
|
+
|
|
504
|
+
```typescript
|
|
505
|
+
import { createAdapter } from '@elevasis/sdk/worker'
|
|
506
|
+
|
|
507
|
+
// 1. Define a type map
|
|
508
|
+
type MyToolMap = {
|
|
509
|
+
doSomething: { params: { input: string }; result: { output: string } }
|
|
510
|
+
listItems: { params: { limit?: number }; result: { items: string[] } }
|
|
511
|
+
getStatus: { params: Record<string, never>; result: { healthy: boolean } }
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
// 2. Create the adapter
|
|
515
|
+
const myTool = createAdapter<MyToolMap>('my-tool', [
|
|
516
|
+
'doSomething', 'listItems', 'getStatus',
|
|
517
|
+
], 'my-credential') // credential is optional
|
|
518
|
+
|
|
519
|
+
// 3. Use it (fully typed)
|
|
520
|
+
const result = await myTool.doSomething({ input: 'hello' })
|
|
521
|
+
// ^-- { output: string }
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
Method names are compile-time checked against the type map keys.
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## Error Handling
|
|
529
|
+
|
|
530
|
+
All adapter calls throw `PlatformToolError` on failure, with a `code` field and `retryable` flag:
|
|
531
|
+
|
|
532
|
+
```typescript
|
|
533
|
+
import { PlatformToolError } from '@elevasis/sdk/worker'
|
|
534
|
+
|
|
535
|
+
try {
|
|
536
|
+
await scheduler.listSchedules({ status: 'active' })
|
|
537
|
+
} catch (err) {
|
|
538
|
+
if (err instanceof PlatformToolError) {
|
|
539
|
+
console.log(err.message) // Human-readable error
|
|
540
|
+
console.log(err.code) // e.g., 'rate_limit_exceeded', 'service_unavailable'
|
|
541
|
+
console.log(err.retryable) // true for transient errors
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
Retryable error codes: `rate_limit_exceeded`, `network_error`, `timeout_error`, `api_error`, `service_unavailable`, `server_unavailable`.
|
|
547
|
+
|
|
548
|
+
**Timeouts:** LLM calls have a 120s timeout. All other tool calls have a 60s timeout.
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
**Last Updated:** 2026-04-15
|