@almadar/integrations 2.29.0 → 2.31.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.
@@ -1,5 +1,5 @@
1
1
  import { ServiceParamsValue, ServiceParams, EntityRow } from '@almadar/core';
2
- import { f as IntegrationParamValue, g as IntegrationParams } from './BaseIntegration-C_5q54DM.js';
2
+ import { f as IntegrationParamValue, g as IntegrationParams } from './BaseIntegration-BYlbMFlf.js';
3
3
 
4
4
  /** Scalar value admissible as a SQL bind parameter. */
5
5
  type DatabaseQueryParamValue = string | number | boolean | Date | null;
@@ -38,49 +38,68 @@ interface DatabaseDriver {
38
38
  */
39
39
 
40
40
  type GitHubActions = {
41
+ /** Clone a repository via the git CLI into a local target directory, using the configured token for auth. */
41
42
  cloneRepo: {
42
43
  params: {
44
+ /** HTTPS clone URL, e.g. https://github.com/owner/repo. Owner/repo are parsed from it when not preconfigured. */
43
45
  repoUrl: string;
46
+ /** Local directory to clone into. */
44
47
  targetDir: string;
48
+ /** Branch to check out after cloning; defaults to the repo's default branch. */
45
49
  branch?: string;
46
50
  };
47
51
  result: {
48
52
  message: string;
49
53
  };
50
54
  };
55
+ /** Create a new local branch via the git CLI in the configured working directory. */
51
56
  createBranch: {
52
57
  params: {
58
+ /** Name of the branch to create. */
53
59
  branchName: string;
60
+ /** Branch to branch from; defaults to the current branch. */
54
61
  baseBranch?: string;
55
62
  };
56
63
  result: {
57
64
  message: string;
58
65
  };
59
66
  };
67
+ /** Commit staged (or given) changes via the git CLI in the configured working directory. */
60
68
  commit: {
61
69
  params: {
70
+ /** Commit message. */
62
71
  message: string;
72
+ /** Specific files to commit; when omitted, all changes are committed. */
63
73
  files?: string[];
64
74
  };
65
75
  result: {
66
76
  message: string;
67
77
  };
68
78
  };
79
+ /** Push a local branch to the remote via the git CLI, using the configured token for auth. */
69
80
  push: {
70
81
  params: {
82
+ /** Branch name to push. */
71
83
  branchName: string;
84
+ /** Force-push (overwrites remote history); never set true in an agent context. */
72
85
  force?: boolean;
73
86
  };
74
87
  result: {
75
88
  message: string;
76
89
  };
77
90
  };
91
+ /** Open a pull request via the GitHub REST API. */
78
92
  createPR: {
79
93
  params: {
94
+ /** Pull request title. */
80
95
  title: string;
96
+ /** Pull request description body. */
81
97
  body: string;
98
+ /** Branch the PR merges into, e.g. main. */
82
99
  baseBranch: string;
100
+ /** Branch the PR merges from (the feature branch). */
83
101
  headBranch: string;
102
+ /** Open as a draft PR instead of ready-for-review. */
84
103
  draft?: boolean;
85
104
  };
86
105
  result: {
@@ -89,8 +108,10 @@ type GitHubActions = {
89
108
  title: string;
90
109
  };
91
110
  };
111
+ /** List review comments on a pull request via the GitHub REST API. */
92
112
  getPRComments: {
93
113
  params: {
114
+ /** Pull request number. */
94
115
  prNumber: number;
95
116
  };
96
117
  result: {
@@ -101,10 +122,14 @@ type GitHubActions = {
101
122
  }>;
102
123
  };
103
124
  };
125
+ /** List issues on the configured repository via the GitHub REST API. */
104
126
  listIssues: {
105
127
  params: {
128
+ /** Issue state filter: 'open', 'closed', or 'all'; defaults to open. */
106
129
  state?: string;
130
+ /** Only issues carrying all of these labels. */
107
131
  labels?: string[];
132
+ /** Page size for the GitHub API request. */
108
133
  per_page?: number;
109
134
  };
110
135
  result: {
@@ -115,8 +140,10 @@ type GitHubActions = {
115
140
  }>;
116
141
  };
117
142
  };
143
+ /** Fetch a single issue's details via the GitHub REST API. */
118
144
  getIssue: {
119
145
  params: {
146
+ /** Issue number. */
120
147
  issueNumber: number;
121
148
  };
122
149
  result: {
@@ -126,11 +153,16 @@ type GitHubActions = {
126
153
  state: string;
127
154
  };
128
155
  };
156
+ /** Read a file's content from a repository at a given ref (declared intent — dispatch is being wired). */
129
157
  getFile: {
130
158
  params: {
159
+ /** Repository owner (user or org). */
131
160
  owner: string;
161
+ /** Repository name. */
132
162
  repo: string;
163
+ /** File path within the repository. */
133
164
  path: string;
165
+ /** Branch, tag, or commit SHA to read from; defaults to the default branch. */
134
166
  ref?: string;
135
167
  };
136
168
  result: {
@@ -140,12 +172,18 @@ type GitHubActions = {
140
172
  size: number;
141
173
  };
142
174
  };
175
+ /** List commits on a repository, optionally filtered by file path (declared intent — dispatch is being wired). */
143
176
  listCommits: {
144
177
  params: {
178
+ /** Repository owner (user or org). */
145
179
  owner: string;
180
+ /** Repository name. */
146
181
  repo: string;
182
+ /** Only commits touching this file path. */
147
183
  path?: string;
184
+ /** Branch, tag, or commit SHA to start from; defaults to the default branch. */
148
185
  ref?: string;
186
+ /** Page size for the GitHub API request. */
149
187
  per_page?: number;
150
188
  };
151
189
  result: {
@@ -157,12 +195,18 @@ type GitHubActions = {
157
195
  }>;
158
196
  };
159
197
  };
198
+ /** Open a new issue on a repository (declared intent — dispatch is being wired). */
160
199
  createIssue: {
161
200
  params: {
201
+ /** Repository owner (user or org). */
162
202
  owner: string;
203
+ /** Repository name. */
163
204
  repo: string;
205
+ /** Issue title. */
164
206
  title: string;
207
+ /** Issue body/description. */
165
208
  body?: string;
209
+ /** Labels to apply to the new issue. */
166
210
  labels?: string[];
167
211
  };
168
212
  result: {
@@ -173,10 +217,17 @@ type GitHubActions = {
173
217
  };
174
218
  };
175
219
  type StripeActions = {
220
+ /**
221
+ * Create a Stripe PaymentIntent for a one-off charge.
222
+ * @synonyms charge, pay
223
+ */
176
224
  createPaymentIntent: {
177
225
  params: {
226
+ /** Charge amount in the currency's smallest unit (e.g. cents for USD). */
178
227
  amount: number;
228
+ /** ISO 4217 currency code, e.g. usd. */
179
229
  currency: string;
230
+ /** Arbitrary key-value tags attached to the PaymentIntent (string values only). */
180
231
  metadata?: Record<string, string>;
181
232
  };
182
233
  result: {
@@ -187,8 +238,10 @@ type StripeActions = {
187
238
  currency: string;
188
239
  };
189
240
  };
241
+ /** Confirm a previously created PaymentIntent, attempting to complete the charge. */
190
242
  confirmPayment: {
191
243
  params: {
244
+ /** The PaymentIntent id returned by createPaymentIntent. */
192
245
  paymentIntentId: string;
193
246
  };
194
247
  result: {
@@ -196,9 +249,12 @@ type StripeActions = {
196
249
  status: string;
197
250
  };
198
251
  };
252
+ /** Refund a charged PaymentIntent, in full or in part. */
199
253
  refund: {
200
254
  params: {
255
+ /** The PaymentIntent id to refund. */
201
256
  paymentIntentId: string;
257
+ /** Amount to refund in the currency's smallest unit; omit for a full refund. */
202
258
  amount?: number;
203
259
  };
204
260
  result: {
@@ -209,12 +265,18 @@ type StripeActions = {
209
265
  };
210
266
  };
211
267
  type LLMIntegrationActions = {
268
+ /** Generate free-form text from a prompt via the configured LLM provider (default 'You are a helpful assistant.' system prompt). */
212
269
  generate: {
213
270
  params: {
271
+ /** The user/task prompt sent to the model. */
214
272
  userPrompt: string;
273
+ /** System prompt steering the model's behavior; defaults to a generic assistant prompt. */
215
274
  systemPrompt?: string;
275
+ /** Model id override; when set, a fresh client is built for this call instead of the shared one. */
216
276
  model?: string;
277
+ /** Sampling temperature (0-1ish, provider-dependent); higher is more random. */
217
278
  temperature?: number;
279
+ /** Maximum tokens to generate; defaults to 1024. */
218
280
  maxTokens?: number;
219
281
  };
220
282
  result: {
@@ -227,10 +289,14 @@ type LLMIntegrationActions = {
227
289
  };
228
290
  };
229
291
  };
292
+ /** Classify text into exactly one of a caller-supplied category list, with a confidence score and reasoning. */
230
293
  classify: {
231
294
  params: {
295
+ /** Text to classify. */
232
296
  text: string;
297
+ /** Closed set of category labels the model must choose from. */
233
298
  categories: string[];
299
+ /** Model id override. */
234
300
  model?: string;
235
301
  };
236
302
  result: {
@@ -239,19 +305,28 @@ type LLMIntegrationActions = {
239
305
  reasoning: string;
240
306
  };
241
307
  };
308
+ /** Extract structured data from text according to a JSON-schema-shaped description; returned data is not validated against the schema. */
242
309
  extract: {
243
310
  params: {
311
+ /** Source text to extract data from. */
244
312
  text: string;
313
+ /** JSON-schema-like description of the fields to extract; passed to the model as a prompt, not enforced structurally. */
245
314
  schema: IntegrationParams;
315
+ /** Model id override. */
246
316
  model?: string;
247
317
  };
248
318
  result: IntegrationParams;
249
319
  };
320
+ /** Summarize text, optionally constrained by length and style, returning a summary plus key points. */
250
321
  summarize: {
251
322
  params: {
323
+ /** Text to summarize. */
252
324
  text: string;
325
+ /** Target maximum summary length in words. */
253
326
  maxLength?: number;
327
+ /** Summary style: 'bullet' for bullet points, 'detailed' for thorough, otherwise concise. */
254
328
  style?: string;
329
+ /** Model id override. */
255
330
  model?: string;
256
331
  };
257
332
  result: {
@@ -259,9 +334,12 @@ type LLMIntegrationActions = {
259
334
  keyPoints: string[];
260
335
  };
261
336
  };
337
+ /** Generate embedding vectors for an array of texts via the configured embedding model (default baai/bge-base-en-v1.5 on OpenRouter, independent of the chat provider). */
262
338
  embed: {
263
339
  params: {
340
+ /** Texts to embed, one vector per entry, in order. */
264
341
  texts: string[];
342
+ /** Embedding model id override. */
265
343
  model?: string;
266
344
  };
267
345
  result: {
@@ -270,9 +348,12 @@ type LLMIntegrationActions = {
270
348
  };
271
349
  };
272
350
  type MLActions = {
351
+ /** Run inference against a deployed model-serving orbital by posting an INFER event and reading the prediction back out of the emitted INFERRED result; may cold-start (up to 60s default timeout). */
273
352
  infer: {
274
353
  params: {
354
+ /** Checkpoint or model identifier the serving orbital resolves. */
275
355
  model: string;
356
+ /** JSON-safe model input payload. */
276
357
  input: ServiceParamsValue;
277
358
  };
278
359
  result: {
@@ -283,10 +364,14 @@ type MLActions = {
283
364
  };
284
365
  };
285
366
  type YouTubeActions = {
367
+ /** Search YouTube via the Data API and return matching video snippets. */
286
368
  search: {
287
369
  params: {
370
+ /** Search query text. */
288
371
  query: string;
372
+ /** Maximum number of results; defaults to 10. */
289
373
  maxResults?: number;
374
+ /** Resource type filter passed to the Data API (e.g. 'video', 'channel', 'playlist'). */
290
375
  type?: string;
291
376
  };
292
377
  result: Array<{
@@ -296,8 +381,10 @@ type YouTubeActions = {
296
381
  description: string;
297
382
  }>;
298
383
  };
384
+ /** Fetch a video's snippet and statistics via the YouTube Data API. */
299
385
  getVideo: {
300
386
  params: {
387
+ /** YouTube video id. */
301
388
  videoId: string;
302
389
  };
303
390
  result: {
@@ -307,8 +394,10 @@ type YouTubeActions = {
307
394
  likeCount: string;
308
395
  };
309
396
  };
397
+ /** Fetch a channel's snippet and statistics via the YouTube Data API. */
310
398
  getChannel: {
311
399
  params: {
400
+ /** YouTube channel id. */
312
401
  channelId: string;
313
402
  };
314
403
  result: {
@@ -319,10 +408,17 @@ type YouTubeActions = {
319
408
  };
320
409
  };
321
410
  type TwilioActions = {
411
+ /**
412
+ * Send an SMS message via Twilio.
413
+ * @synonyms text message, text
414
+ */
322
415
  sendSMS: {
323
416
  params: {
417
+ /** Destination phone number, E.164 format. */
324
418
  to: string;
419
+ /** Message text. */
325
420
  body: string;
421
+ /** Sender phone number; defaults to TWILIO_PHONE_NUMBER. */
326
422
  from?: string;
327
423
  };
328
424
  result: {
@@ -330,9 +426,12 @@ type TwilioActions = {
330
426
  status: string;
331
427
  };
332
428
  };
429
+ /** Send a WhatsApp message via Twilio, using the configured phone number as sender on both ends. */
333
430
  sendWhatsApp: {
334
431
  params: {
432
+ /** Destination phone number, E.164 format (sent as whatsapp:number). */
335
433
  to: string;
434
+ /** Message text. */
336
435
  body: string;
337
436
  };
338
437
  result: {
@@ -342,14 +441,20 @@ type TwilioActions = {
342
441
  };
343
442
  };
344
443
  type EmailActions = {
444
+ /** Send a transactional email via the configured provider (SendGrid or Resend). */
345
445
  send: {
346
446
  params: {
447
+ /** Recipient email address. */
347
448
  to: string;
449
+ /** Email subject line. */
348
450
  subject: string;
451
+ /** Plain-text (or HTML, if `htmlBody` is absent) body content. */
349
452
  body: string;
453
+ /** Sender address; defaults to FROM_EMAIL. */
350
454
  from?: string;
351
455
  /** HTML content; when present `body` becomes the plain-text alternative. */
352
456
  htmlBody?: string;
457
+ /** Reply-To address. */
353
458
  replyTo?: string;
354
459
  /** Provider template reference (SendGrid dynamic templates; Resend rejects it loudly). */
355
460
  templateId?: string;
@@ -361,11 +466,16 @@ type EmailActions = {
361
466
  };
362
467
  };
363
468
  type WebhookActions = {
469
+ /** POST a JSON event notification to an external URL, HMAC-SHA256-signed when a secret is configured; 5xx responses retry, 4xx do not. */
364
470
  send: {
365
471
  params: {
472
+ /** Destination URL to POST to. */
366
473
  url: string;
474
+ /** Event name, carried in the body and the X-Almadar-Event header. */
367
475
  event: string;
476
+ /** Event payload; defaults to an empty object. */
368
477
  payload?: Record<string, string>;
478
+ /** Per-call HMAC signing secret, overriding WEBHOOK_SIGNING_SECRET. */
369
479
  secret?: string;
370
480
  };
371
481
  result: {
@@ -376,8 +486,10 @@ type WebhookActions = {
376
486
  };
377
487
  };
378
488
  type PushActions = {
489
+ /** Send a VAPID-signed Web Push notification to a browser PushSubscription endpoint. */
379
490
  send: {
380
491
  params: {
492
+ /** Browser PushSubscription: endpoint URL plus the p256dh/auth encryption keys. */
381
493
  subscription: {
382
494
  endpoint: string;
383
495
  keys: {
@@ -385,25 +497,36 @@ type PushActions = {
385
497
  auth: string;
386
498
  };
387
499
  };
500
+ /** Notification title. */
388
501
  title: string;
502
+ /** Notification body text. */
389
503
  body: string;
504
+ /** URL to open when the notification is clicked. */
390
505
  url?: string;
506
+ /** Notification icon URL. */
391
507
  icon?: string;
392
508
  };
393
509
  result: {
394
510
  statusCode: number;
395
511
  ok: boolean;
512
+ /** True on a 404/410 push-service response — the subscription is gone and must be pruned, never retried. */
396
513
  expired: boolean;
397
514
  };
398
515
  };
399
516
  };
400
517
  type CalendarActions = {
518
+ /** List events on a Google Calendar; pass `syncToken` for incremental sync instead of a time window (the API rejects combining them). */
401
519
  listEvents: {
402
520
  params: {
521
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID (or 'primary'). */
403
522
  calendarId?: string;
523
+ /** ISO start of the time window (ignored when `syncToken` is set). */
404
524
  timeMin?: string;
525
+ /** ISO end of the time window (ignored when `syncToken` is set). */
405
526
  timeMax?: string;
527
+ /** Incremental-sync token from a previous call's `nextSyncToken`; supersedes timeMin/timeMax. */
406
528
  syncToken?: string;
529
+ /** Maximum events to return; defaults to 250. */
407
530
  maxResults?: number;
408
531
  };
409
532
  result: {
@@ -417,17 +540,26 @@ type CalendarActions = {
417
540
  status: string;
418
541
  updated: string;
419
542
  }>;
543
+ /** Token to pass as `syncToken` on the next call; null when incremental sync isn't available for this response. */
420
544
  nextSyncToken: string | null;
421
545
  };
422
546
  };
547
+ /** Create a calendar event; an all-day event uses a 10-char (YYYY-MM-DD) start with no `end`/`durationMinutes`, defaulting to the next day. */
423
548
  createEvent: {
424
549
  params: {
550
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID. */
425
551
  calendarId?: string;
552
+ /** Event title. */
426
553
  summary: string;
554
+ /** Event description. */
427
555
  description?: string;
556
+ /** Event location text. */
428
557
  location?: string;
558
+ /** ISO start (10 chars = all-day date, longer = dateTime). */
429
559
  start: string;
560
+ /** ISO end; if omitted, derived from `durationMinutes` or the all-day next-day convention. */
430
561
  end?: string;
562
+ /** Duration in minutes used to derive `end` when `end` is omitted (non-all-day events only). */
431
563
  durationMinutes?: number;
432
564
  };
433
565
  result: {
@@ -436,14 +568,22 @@ type CalendarActions = {
436
568
  htmlLink: string;
437
569
  };
438
570
  };
571
+ /** Patch an existing event's fields; only fields present in params are changed. */
439
572
  updateEvent: {
440
573
  params: {
574
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID. */
441
575
  calendarId?: string;
576
+ /** Id of the event to update. */
442
577
  eventId: string;
578
+ /** New event title. */
443
579
  summary?: string;
580
+ /** New event description. */
444
581
  description?: string;
582
+ /** New event location text. */
445
583
  location?: string;
584
+ /** New ISO start. */
446
585
  start?: string;
586
+ /** New ISO end. */
447
587
  end?: string;
448
588
  };
449
589
  result: {
@@ -451,9 +591,12 @@ type CalendarActions = {
451
591
  status: string;
452
592
  };
453
593
  };
594
+ /** Delete a calendar event. */
454
595
  deleteEvent: {
455
596
  params: {
597
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID. */
456
598
  calendarId?: string;
599
+ /** Id of the event to delete. */
457
600
  eventId: string;
458
601
  };
459
602
  result: {
@@ -461,10 +604,14 @@ type CalendarActions = {
461
604
  deleted: boolean;
462
605
  };
463
606
  };
607
+ /** Query busy time blocks on a calendar within a window. */
464
608
  freeBusy: {
465
609
  params: {
610
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID. */
466
611
  calendarId?: string;
612
+ /** ISO start of the query window. */
467
613
  timeMin: string;
614
+ /** ISO end of the query window. */
468
615
  timeMax: string;
469
616
  };
470
617
  result: {
@@ -474,11 +621,16 @@ type CalendarActions = {
474
621
  }>;
475
622
  };
476
623
  };
624
+ /** Register a push-notification channel for calendar change events (Google Calendar API watch). */
477
625
  watch: {
478
626
  params: {
627
+ /** Calendar id; defaults to GOOGLE_CALENDAR_ID. */
479
628
  calendarId?: string;
629
+ /** Caller-chosen id identifying this notification channel. */
480
630
  channelId: string;
631
+ /** HTTPS callback URL Google POSTs change notifications to. */
481
632
  address: string;
633
+ /** Requested channel time-to-live in seconds. */
482
634
  ttlSeconds?: number;
483
635
  };
484
636
  result: {
@@ -487,9 +639,12 @@ type CalendarActions = {
487
639
  expiration: string;
488
640
  };
489
641
  };
642
+ /** Stop an active watch channel, ending calendar change notifications. */
490
643
  stopWatch: {
491
644
  params: {
645
+ /** The channel id from the corresponding `watch` call. */
492
646
  channelId: string;
647
+ /** The resourceId returned by the corresponding `watch` call. */
493
648
  resourceId: string;
494
649
  };
495
650
  result: {
@@ -498,10 +653,14 @@ type CalendarActions = {
498
653
  };
499
654
  };
500
655
  type DriveActions = {
656
+ /** List non-trashed files in a Google Drive folder, optionally filtered by a Drive API query clause. */
501
657
  listFiles: {
502
658
  params: {
659
+ /** Restrict to files whose parents include this folder id. */
503
660
  folderId?: string;
661
+ /** Extra Drive API query clause, ANDed with the folder/trashed filters. */
504
662
  query?: string;
663
+ /** Maximum files to return; defaults to 100. */
505
664
  maxResults?: number;
506
665
  };
507
666
  result: {
@@ -515,8 +674,10 @@ type DriveActions = {
515
674
  }>;
516
675
  };
517
676
  };
677
+ /** Download a file's content, base64-encoded. */
518
678
  getFile: {
519
679
  params: {
680
+ /** Drive file id. */
520
681
  fileId: string;
521
682
  };
522
683
  result: {
@@ -527,11 +688,19 @@ type DriveActions = {
527
688
  size: number;
528
689
  };
529
690
  };
691
+ /**
692
+ * Upload a file to Drive; writes go through the user OAuth client when configured (service-account uploads have no storage quota on personal accounts).
693
+ * @synonyms upload file
694
+ */
530
695
  uploadFile: {
531
696
  params: {
697
+ /** File name to create. */
532
698
  name: string;
699
+ /** File content as a base64 data URL (data:mime;base64,...) or raw base64/plain text. */
533
700
  content: string;
701
+ /** MIME type; inferred from a data URL when omitted. */
534
702
  mimeType?: string;
703
+ /** Parent folder id; defaults to GOOGLE_DRIVE_FOLDER_ID. */
535
704
  folderId?: string;
536
705
  };
537
706
  result: {
@@ -540,9 +709,12 @@ type DriveActions = {
540
709
  webViewLink: string;
541
710
  };
542
711
  };
712
+ /** Create a new Drive folder. */
543
713
  createFolder: {
544
714
  params: {
715
+ /** Folder name to create. */
545
716
  name: string;
717
+ /** Parent folder id; defaults to GOOGLE_DRIVE_FOLDER_ID. */
546
718
  parentId?: string;
547
719
  };
548
720
  result: {
@@ -550,10 +722,14 @@ type DriveActions = {
550
722
  name: string;
551
723
  };
552
724
  };
725
+ /** Grant a user permission on a Drive file. */
553
726
  shareFile: {
554
727
  params: {
728
+ /** Drive file id. */
555
729
  fileId: string;
730
+ /** Email address of the grantee. */
556
731
  email: string;
732
+ /** Permission level; defaults to 'reader'. */
557
733
  role?: 'reader' | 'writer' | 'commenter';
558
734
  };
559
735
  result: {
@@ -563,12 +739,15 @@ type DriveActions = {
563
739
  };
564
740
  };
565
741
  type MetaAdsActions = {
742
+ /** Fetch total ad spend, impressions, and clicks for an account over a date range via the Meta Graph API Marketing Insights endpoint (read-only). */
566
743
  getSpend: {
567
744
  params: {
745
+ /** Ad account id (with or without the `act_` prefix); defaults to META_AD_ACCOUNT_ID. */
568
746
  accountId?: string;
747
+ /** Range start date (YYYY-MM-DD). */
569
748
  since: string;
749
+ /** Range end date (YYYY-MM-DD). */
570
750
  until: string;
571
- clientTag?: string;
572
751
  };
573
752
  result: {
574
753
  spend: number;
@@ -577,9 +756,12 @@ type MetaAdsActions = {
577
756
  clicks: number;
578
757
  };
579
758
  };
759
+ /** List campaigns on an ad account via the Meta Graph API (read-only); dailyBudget is converted from Meta's minor-unit reporting. */
580
760
  listCampaigns: {
581
761
  params: {
762
+ /** Ad account id (with or without the `act_` prefix); defaults to META_AD_ACCOUNT_ID. */
582
763
  accountId?: string;
764
+ /** Filter by campaign effective_status (e.g. 'ACTIVE', 'PAUSED'). */
583
765
  status?: string;
584
766
  };
585
767
  result: {
@@ -593,8 +775,10 @@ type MetaAdsActions = {
593
775
  };
594
776
  };
595
777
  type AccountingActions = {
778
+ /** Shape invoice rows into an import-ready CSV export (no accounting-vendor connection — generic column set). */
596
779
  exportInvoices: {
597
780
  params: {
781
+ /** Invoice rows to export, in column order id/number/customer/issuedAt/dueAt/currency/net/tax/gross/status. */
598
782
  invoices: Array<{
599
783
  id: string;
600
784
  number: string;
@@ -607,6 +791,7 @@ type AccountingActions = {
607
791
  gross: number;
608
792
  status: string;
609
793
  }>;
794
+ /** Export format; only 'csv' is currently supported. */
610
795
  format?: 'csv';
611
796
  };
612
797
  result: {
@@ -615,8 +800,10 @@ type AccountingActions = {
615
800
  count: number;
616
801
  };
617
802
  };
803
+ /** Shape journal entry rows into an import-ready CSV export. */
618
804
  exportJournal: {
619
805
  params: {
806
+ /** Journal entry rows to export, in column order date/account/description/debit/credit/reference. */
620
807
  entries: Array<{
621
808
  date: string;
622
809
  account: string;
@@ -625,6 +812,7 @@ type AccountingActions = {
625
812
  credit: number;
626
813
  reference: string;
627
814
  }>;
815
+ /** Export format; only 'csv' is currently supported. */
628
816
  format?: 'csv';
629
817
  };
630
818
  result: {
@@ -635,10 +823,14 @@ type AccountingActions = {
635
823
  };
636
824
  };
637
825
  type BankingActions = {
826
+ /** Start a GoCardless Bank Account Data requisition (bank-connection consent flow); the returned `link` is where the end user authorizes access. */
638
827
  createRequisition: {
639
828
  params: {
829
+ /** GoCardless institution id (the bank to connect). */
640
830
  institutionId: string;
831
+ /** URL GoCardless redirects the user to after consent. */
641
832
  redirectUrl: string;
833
+ /** Caller-chosen reference to correlate the requisition. */
642
834
  reference?: string;
643
835
  };
644
836
  result: {
@@ -646,18 +838,24 @@ type BankingActions = {
646
838
  link: string;
647
839
  };
648
840
  };
841
+ /** List account ids linked under a completed requisition. */
649
842
  listAccounts: {
650
843
  params: {
844
+ /** Requisition id from createRequisition. */
651
845
  requisitionId: string;
652
846
  };
653
847
  result: {
654
848
  accounts: string[];
655
849
  };
656
850
  };
851
+ /** List booked transactions on a linked bank account, optionally filtered by date range. */
657
852
  listTransactions: {
658
853
  params: {
854
+ /** GoCardless account id. */
659
855
  accountId: string;
856
+ /** Only transactions booked on/after this date (YYYY-MM-DD). */
660
857
  dateFrom?: string;
858
+ /** Only transactions booked on/before this date (YYYY-MM-DD). */
661
859
  dateTo?: string;
662
860
  };
663
861
  result: {
@@ -673,12 +871,18 @@ type BankingActions = {
673
871
  };
674
872
  };
675
873
  type EsignActions = {
874
+ /** Send a document for e-signature via DocuSign; accepts the document content as a data URL or raw base64. */
676
875
  sendEnvelope: {
677
876
  params: {
877
+ /** Signer's email address. */
678
878
  recipientEmail: string;
879
+ /** Signer's display name. */
679
880
  recipientName: string;
881
+ /** Document file name (its extension also picks the DocuSign fileExtension). */
680
882
  documentName: string;
883
+ /** Document content as a base64 data URL or raw base64. */
681
884
  documentContent: string;
885
+ /** Envelope email subject; defaults to "Please sign: " + documentName. */
682
886
  emailSubject?: string;
683
887
  };
684
888
  result: {
@@ -686,8 +890,10 @@ type EsignActions = {
686
890
  status: string;
687
891
  };
688
892
  };
893
+ /** Poll a DocuSign envelope's signing status. */
689
894
  getEnvelopeStatus: {
690
895
  params: {
896
+ /** DocuSign envelope id from sendEnvelope. */
691
897
  envelopeId: string;
692
898
  };
693
899
  result: {
@@ -695,8 +901,10 @@ type EsignActions = {
695
901
  completedAt: string;
696
902
  };
697
903
  };
904
+ /** Download the combined signed document(s) for a completed envelope, base64-encoded PDF. */
698
905
  downloadDocument: {
699
906
  params: {
907
+ /** DocuSign envelope id. */
700
908
  envelopeId: string;
701
909
  };
702
910
  result: {
@@ -706,11 +914,16 @@ type EsignActions = {
706
914
  };
707
915
  };
708
916
  type DockerActions = {
917
+ /** Simulate building a container image (in-memory backend — no real Docker daemon/SDK; a real build is not yet implemented). */
709
918
  build: {
710
919
  params: {
920
+ /** Image tag to build, e.g. myapp:latest. */
711
921
  tag: string;
922
+ /** Dockerfile path; defaults to 'Dockerfile'. */
712
923
  dockerfile?: string;
924
+ /** Build context directory; defaults to '.'. */
713
925
  context?: string;
926
+ /** Build-time --build-arg values. */
714
927
  buildArgs?: Record<string, string>;
715
928
  };
716
929
  result: {
@@ -720,20 +933,27 @@ type DockerActions = {
720
933
  buildTime: number;
721
934
  };
722
935
  };
936
+ /** Simulate starting a container from an image (in-memory backend). */
723
937
  run: {
724
938
  params: {
939
+ /** Image to run (as built/tagged by the `build` action, or an arbitrary name). */
725
940
  image: string;
941
+ /** Container name; auto-generated when omitted. */
726
942
  name?: string;
943
+ /** Host/container port mappings. */
727
944
  ports?: Array<{
728
945
  host: number;
729
946
  container: number;
730
947
  protocol?: string;
731
948
  }>;
949
+ /** Environment variables set inside the container. */
732
950
  env?: Record<string, string>;
951
+ /** Host/container path mounts. */
733
952
  volumes?: Array<{
734
953
  host: string;
735
954
  container: string;
736
955
  }>;
956
+ /** Override command run inside the container. */
737
957
  command?: string;
738
958
  };
739
959
  result: {
@@ -747,8 +967,10 @@ type DockerActions = {
747
967
  }>;
748
968
  };
749
969
  };
970
+ /** Stop a running (or paused) simulated container. */
750
971
  stop: {
751
972
  params: {
973
+ /** Container id, or a unique id prefix. */
752
974
  containerId: string;
753
975
  };
754
976
  result: {
@@ -757,9 +979,12 @@ type DockerActions = {
757
979
  stoppedAt: number;
758
980
  };
759
981
  };
982
+ /** Remove a simulated container; fails if it is running unless `force` is set. */
760
983
  remove: {
761
984
  params: {
985
+ /** Container id, or a unique id prefix. */
762
986
  containerId: string;
987
+ /** Remove even if the container is currently running. */
763
988
  force?: boolean;
764
989
  };
765
990
  result: {
@@ -767,10 +992,14 @@ type DockerActions = {
767
992
  removed: boolean;
768
993
  };
769
994
  };
995
+ /** Fetch generated log lines for a simulated container. */
770
996
  logs: {
771
997
  params: {
998
+ /** Container id, or a unique id prefix. */
772
999
  containerId: string;
1000
+ /** Number of most-recent lines to return; defaults to 100. */
773
1001
  tail?: number;
1002
+ /** Only lines timestamped at/after this ISO time. */
774
1003
  since?: string;
775
1004
  };
776
1005
  result: {
@@ -779,8 +1008,10 @@ type DockerActions = {
779
1008
  lineCount: number;
780
1009
  };
781
1010
  };
1011
+ /** Fetch a simulated container's current status and metadata. */
782
1012
  status: {
783
1013
  params: {
1014
+ /** Container id, or a unique id prefix. */
784
1015
  containerId: string;
785
1016
  };
786
1017
  result: {
@@ -798,9 +1029,12 @@ type DockerActions = {
798
1029
  stoppedAt: number | null;
799
1030
  };
800
1031
  };
1032
+ /** List simulated containers; by default only running ones (like `docker ps`). */
801
1033
  list: {
802
1034
  params: {
1035
+ /** Include stopped/exited containers, not just running ones. */
803
1036
  all?: boolean;
1037
+ /** Filter by a `key` or `key=value` label match. */
804
1038
  filterByLabel?: string;
805
1039
  };
806
1040
  result: {
@@ -821,20 +1055,32 @@ type DockerActions = {
821
1055
  };
822
1056
  };
823
1057
  type StorageActions = {
1058
+ /**
1059
+ * Upload an object to an S3-compatible bucket (real S3/R2/MinIO backend when storage credentials are configured, in-memory dev fallback otherwise — refused in production). Admits either the canonical `key`+`content` pair or the file-form `file` payload (UploadDropZone's `{ name, size, type, content }` shape); when `file` is present its `key`/`content` are derived from it.
1060
+ * @synonyms upload file, upload object
1061
+ */
824
1062
  upload: {
825
1063
  params: {
1064
+ /** Target bucket; defaults to STORAGE_BUCKET. */
826
1065
  bucket: string;
1066
+ /** Object key to store under (canonical shape); ignored when `file` is present. */
827
1067
  key?: string;
1068
+ /** Object content as a base64 data URL, raw base64, or plain text (canonical shape); ignored when `file` is present. */
828
1069
  content?: string;
1070
+ /** MIME type override for the canonical shape; inferred from a data URL when omitted. */
829
1071
  contentType?: string;
1072
+ /** File-form upload payload (as emitted by UploadDropZone); `content` is a base64 data URL. */
830
1073
  file?: {
831
1074
  name: string;
832
1075
  size: number;
833
1076
  type: string;
834
1077
  content?: string;
835
1078
  };
1079
+ /** Object ACL — 'public' produces a public URL, otherwise the URL is signed/private. */
836
1080
  acl?: 'public' | 'private';
1081
+ /** Reject the upload if the file-form payload's declared size exceeds this many bytes. */
837
1082
  maxSize?: number;
1083
+ /** Arbitrary metadata stored alongside the object (in-memory backend only). */
838
1084
  metadata?: IntegrationParams;
839
1085
  };
840
1086
  result: {
@@ -846,16 +1092,21 @@ type StorageActions = {
846
1092
  url: string;
847
1093
  };
848
1094
  };
1095
+ /** Upload a whole UploadDropZone batch in one call, one item per file — the FSM-friendly shape for bulk-persisting uploaded-file rows. */
849
1096
  uploadMany: {
850
1097
  params: {
1098
+ /** Target bucket; defaults to STORAGE_BUCKET. */
851
1099
  bucket: string;
1100
+ /** Files to upload, in UploadDropZone's `{ name, size, type, content }` shape. */
852
1101
  files: Array<{
853
1102
  name: string;
854
1103
  size: number;
855
1104
  type: string;
856
1105
  content?: string;
857
1106
  }>;
1107
+ /** Object ACL applied to every file in the batch. */
858
1108
  acl?: 'public' | 'private';
1109
+ /** Reject any file whose declared size exceeds this many bytes. */
859
1110
  maxSize?: number;
860
1111
  };
861
1112
  result: {
@@ -870,9 +1121,12 @@ type StorageActions = {
870
1121
  count: number;
871
1122
  };
872
1123
  };
1124
+ /** Download an object's content, base64-encoded. */
873
1125
  download: {
874
1126
  params: {
1127
+ /** Bucket the object lives in; defaults to STORAGE_BUCKET. */
875
1128
  bucket: string;
1129
+ /** Object key. */
876
1130
  key: string;
877
1131
  };
878
1132
  result: {
@@ -882,11 +1136,16 @@ type StorageActions = {
882
1136
  metadata: IntegrationParams;
883
1137
  };
884
1138
  };
1139
+ /** List object keys in a bucket, optionally prefix-filtered, one page at a time. */
885
1140
  list: {
886
1141
  params: {
1142
+ /** Bucket to list; defaults to STORAGE_BUCKET. */
887
1143
  bucket: string;
1144
+ /** Only keys starting with this prefix. */
888
1145
  prefix?: string;
1146
+ /** Maximum keys per page; defaults to 1000. */
889
1147
  maxKeys?: number;
1148
+ /** Pagination token from a previous call's `nextToken`. */
890
1149
  continuationToken?: string;
891
1150
  };
892
1151
  result: {
@@ -896,23 +1155,32 @@ type StorageActions = {
896
1155
  lastModified: number;
897
1156
  }>;
898
1157
  truncated: boolean;
1158
+ /** Present iff `truncated` — pass back as `continuationToken` for the next page. */
899
1159
  nextToken?: string;
900
1160
  };
901
1161
  };
1162
+ /** Delete an object from a bucket. */
902
1163
  delete: {
903
1164
  params: {
1165
+ /** Bucket the object lives in; defaults to STORAGE_BUCKET. */
904
1166
  bucket: string;
1167
+ /** Object key to delete. */
905
1168
  key: string;
906
1169
  };
907
1170
  result: {
908
1171
  deleted: boolean;
909
1172
  };
910
1173
  };
1174
+ /** Generate a time-limited pre-signed URL for direct GET or PUT access to an object. */
911
1175
  getSignedUrl: {
912
1176
  params: {
1177
+ /** Bucket the object lives in; defaults to STORAGE_BUCKET. */
913
1178
  bucket: string;
1179
+ /** Object key. */
914
1180
  key: string;
1181
+ /** URL validity window in seconds; defaults to 3600. */
915
1182
  expiresIn?: number;
1183
+ /** Whether the URL authorizes a read or a write; defaults to 'get'. */
916
1184
  operation?: 'get' | 'put';
917
1185
  };
918
1186
  result: {
@@ -922,11 +1190,16 @@ type StorageActions = {
922
1190
  };
923
1191
  };
924
1192
  type QueueActions = {
1193
+ /** Add a job to an in-memory job queue, ordered by priority (higher first) among ready jobs. */
925
1194
  enqueue: {
926
1195
  params: {
1196
+ /** Queue name. */
927
1197
  queue: string;
1198
+ /** Arbitrary job payload. */
928
1199
  payload: ServiceParams;
1200
+ /** Delay before the job becomes eligible for dequeue, in milliseconds. */
929
1201
  delay?: number;
1202
+ /** Priority — higher values are dequeued before lower ones. */
930
1203
  priority?: number;
931
1204
  };
932
1205
  result: {
@@ -934,8 +1207,10 @@ type QueueActions = {
934
1207
  position: number;
935
1208
  };
936
1209
  };
1210
+ /** Pop the highest-priority pending job whose delay has elapsed, marking it 'processing'; returns null if none is ready. */
937
1211
  dequeue: {
938
1212
  params: {
1213
+ /** Queue name. */
939
1214
  queue: string;
940
1215
  };
941
1216
  result: {
@@ -947,8 +1222,10 @@ type QueueActions = {
947
1222
  } | null;
948
1223
  };
949
1224
  };
1225
+ /** Look up a job's current status by id. */
950
1226
  status: {
951
1227
  params: {
1228
+ /** Job id from enqueue. */
952
1229
  jobId: string;
953
1230
  };
954
1231
  result: {
@@ -961,34 +1238,44 @@ type QueueActions = {
961
1238
  } | null;
962
1239
  };
963
1240
  };
1241
+ /** Mark a 'processing' job completed and store its result; no-op (returns false) if the job isn't in 'processing' state. */
964
1242
  complete: {
965
1243
  params: {
1244
+ /** Job id. */
966
1245
  jobId: string;
1246
+ /** Result payload to attach to the job. */
967
1247
  result?: ServiceParams;
968
1248
  };
969
1249
  result: {
970
1250
  completed: boolean;
971
1251
  };
972
1252
  };
1253
+ /** Mark a 'processing' job failed; no-op (returns false) if the job isn't in 'processing' state. */
973
1254
  fail: {
974
1255
  params: {
1256
+ /** Job id. */
975
1257
  jobId: string;
1258
+ /** Failure reason to attach to the job. */
976
1259
  error?: string;
977
1260
  };
978
1261
  result: {
979
1262
  failed: boolean;
980
1263
  };
981
1264
  };
1265
+ /** Remove a 'pending' job from its queue; no-op (returns false) once it has been dequeued. */
982
1266
  cancel: {
983
1267
  params: {
1268
+ /** Job id. */
984
1269
  jobId: string;
985
1270
  };
986
1271
  result: {
987
1272
  cancelled: boolean;
988
1273
  };
989
1274
  };
1275
+ /** Count pending and processing jobs in a queue. */
990
1276
  size: {
991
1277
  params: {
1278
+ /** Queue name. */
992
1279
  queue: string;
993
1280
  };
994
1281
  result: {
@@ -999,35 +1286,46 @@ type QueueActions = {
999
1286
  };
1000
1287
  };
1001
1288
  type RedisActions = {
1289
+ /** Read a key's value from the in-memory cache; returns null (as `value`) if absent or expired. */
1002
1290
  get: {
1003
1291
  params: {
1292
+ /** Cache key. */
1004
1293
  key: string;
1005
1294
  };
1006
1295
  result: {
1007
1296
  value: ServiceParams;
1008
1297
  };
1009
1298
  };
1299
+ /** Write a key's value, optionally with an expiry. */
1010
1300
  set: {
1011
1301
  params: {
1302
+ /** Cache key. */
1012
1303
  key: string;
1304
+ /** Value to store. */
1013
1305
  value: ServiceParams;
1306
+ /** Time-to-live in seconds; omit for no expiry. */
1014
1307
  ttl?: number;
1015
1308
  };
1016
1309
  result: {
1017
1310
  ok: boolean;
1018
1311
  };
1019
1312
  };
1313
+ /** Delete a key. */
1020
1314
  delete: {
1021
1315
  params: {
1316
+ /** Cache key. */
1022
1317
  key: string;
1023
1318
  };
1024
1319
  result: {
1025
1320
  deleted: boolean;
1026
1321
  };
1027
1322
  };
1323
+ /** Acquire a mutex on a key; fails (returns acquired:false) if another lock on the key is still alive. */
1028
1324
  lock: {
1029
1325
  params: {
1326
+ /** Lock key. */
1030
1327
  key: string;
1328
+ /** Lock time-to-live in milliseconds; defaults to 30000 (30s). */
1031
1329
  ttl?: number;
1032
1330
  };
1033
1331
  result: {
@@ -1035,44 +1333,58 @@ type RedisActions = {
1035
1333
  lockId: string;
1036
1334
  };
1037
1335
  };
1336
+ /** Release a lock; only succeeds when `lockId` matches the current holder. */
1038
1337
  unlock: {
1039
1338
  params: {
1339
+ /** Lock key. */
1040
1340
  key: string;
1341
+ /** Lock id returned by the corresponding `lock` call. */
1041
1342
  lockId: string;
1042
1343
  };
1043
1344
  result: {
1044
1345
  released: boolean;
1045
1346
  };
1046
1347
  };
1348
+ /** Atomically add to a numeric key's value (creating it at 0 if absent), preserving any existing TTL. */
1047
1349
  increment: {
1048
1350
  params: {
1351
+ /** Cache key. */
1049
1352
  key: string;
1353
+ /** Amount to add; defaults to 1 (can be negative to decrement). */
1050
1354
  by?: number;
1051
1355
  };
1052
1356
  result: {
1053
1357
  value: number;
1054
1358
  };
1055
1359
  };
1360
+ /** Set (or reset) a key's expiry; no-op (returns set:false) if the key doesn't exist or is already expired. */
1056
1361
  expire: {
1057
1362
  params: {
1363
+ /** Cache key. */
1058
1364
  key: string;
1365
+ /** New time-to-live in seconds. */
1059
1366
  ttl: number;
1060
1367
  };
1061
1368
  result: {
1062
1369
  set: boolean;
1063
1370
  };
1064
1371
  };
1372
+ /** Publish a message to a channel; delivered synchronously to in-process subscriber callbacks only. */
1065
1373
  publish: {
1066
1374
  params: {
1375
+ /** Channel name. */
1067
1376
  channel: string;
1377
+ /** Message payload. */
1068
1378
  message: ServiceParams;
1069
1379
  };
1070
1380
  result: {
1071
1381
  receivers: number;
1072
1382
  };
1073
1383
  };
1384
+ /** Register interest in a channel; does not itself wire a callback (that happens at a higher-level API). */
1074
1385
  subscribe: {
1075
1386
  params: {
1387
+ /** Channel name. */
1076
1388
  channel: string;
1077
1389
  };
1078
1390
  result: {
@@ -1081,10 +1393,14 @@ type RedisActions = {
1081
1393
  };
1082
1394
  };
1083
1395
  type OAuthActions = {
1396
+ /** Build the provider authorization URL (PKCE + state) for an OAuth/OIDC login redirect; real OIDC discovery when OAUTH_CLIENT_ID/SECRET are configured, an in-memory mock otherwise. */
1084
1397
  authorize: {
1085
1398
  params: {
1399
+ /** Identity provider; OIDC issuer defaults to Google unless OIDC_ISSUER_URL overrides it. */
1086
1400
  provider: 'google' | 'github' | 'auth0';
1401
+ /** OAuth scopes to request. */
1087
1402
  scopes: string[];
1403
+ /** Callback URL the provider redirects back to after consent. */
1088
1404
  redirectUri: string;
1089
1405
  };
1090
1406
  result: {
@@ -1092,9 +1408,12 @@ type OAuthActions = {
1092
1408
  state: string;
1093
1409
  };
1094
1410
  };
1411
+ /** Exchange an authorization code for tokens, consuming the one-time-use `state` from the matching `authorize` call. */
1095
1412
  token: {
1096
1413
  params: {
1414
+ /** Authorization code from the provider's redirect callback. */
1097
1415
  code: string;
1416
+ /** The `state` value returned by `authorize`. */
1098
1417
  state: string;
1099
1418
  };
1100
1419
  result: {
@@ -1104,8 +1423,10 @@ type OAuthActions = {
1104
1423
  tokenType: 'bearer';
1105
1424
  };
1106
1425
  };
1426
+ /** Exchange a refresh token for a new access token. */
1107
1427
  refresh: {
1108
1428
  params: {
1429
+ /** Refresh token from a prior `token` call. */
1109
1430
  refreshToken: string;
1110
1431
  };
1111
1432
  result: {
@@ -1113,16 +1434,20 @@ type OAuthActions = {
1113
1434
  expiresIn: number;
1114
1435
  };
1115
1436
  };
1437
+ /** Revoke an access or refresh token. */
1116
1438
  revoke: {
1117
1439
  params: {
1440
+ /** The access or refresh token to revoke. */
1118
1441
  token: string;
1119
1442
  };
1120
1443
  result: {
1121
1444
  revoked: boolean;
1122
1445
  };
1123
1446
  };
1447
+ /** Fetch the authenticated user's profile claims for an access token. */
1124
1448
  userinfo: {
1125
1449
  params: {
1450
+ /** Access token from a prior `token`/`refresh` call. */
1126
1451
  accessToken: string;
1127
1452
  };
1128
1453
  result: {
@@ -1134,8 +1459,10 @@ type OAuthActions = {
1134
1459
  };
1135
1460
  };
1136
1461
  type CredentialsActions = {
1462
+ /** List declared credentials and their masked (last-4) configuration status; open to any caller. */
1137
1463
  list: {
1138
1464
  params: {
1465
+ /** Restrict the listing to one service's declared credentials; omit for all services. */
1139
1466
  service?: string;
1140
1467
  };
1141
1468
  result: {
@@ -1151,10 +1478,14 @@ type CredentialsActions = {
1151
1478
  }>;
1152
1479
  };
1153
1480
  };
1481
+ /** Save a credential value into the hosted store; the env var must be one declared for the service (or a well-formed connection-ref name for `database`). Admin/owner role required. */
1154
1482
  set: {
1155
1483
  params: {
1484
+ /** Integration name the credential belongs to. */
1156
1485
  service: string;
1486
+ /** Declared env-var name being set. */
1157
1487
  envVar: string;
1488
+ /** Secret value to store; never logged. */
1158
1489
  value: string;
1159
1490
  };
1160
1491
  result: {
@@ -1164,17 +1495,22 @@ type CredentialsActions = {
1164
1495
  last4: string;
1165
1496
  };
1166
1497
  };
1498
+ /** Delete a stored credential from the hosted store. Admin/owner role required. */
1167
1499
  remove: {
1168
1500
  params: {
1501
+ /** Integration name the credential belongs to. */
1169
1502
  service: string;
1503
+ /** Env-var name to remove. */
1170
1504
  envVar: string;
1171
1505
  };
1172
1506
  result: {
1173
1507
  removed: boolean;
1174
1508
  };
1175
1509
  };
1510
+ /** Check whether a service's required credentials are present and, if a live probe is declared for it, exercise the service to confirm they actually work. Admin/owner role required. */
1176
1511
  test: {
1177
1512
  params: {
1513
+ /** Integration name to test. */
1178
1514
  service: string;
1179
1515
  };
1180
1516
  result: {
@@ -1186,20 +1522,28 @@ type CredentialsActions = {
1186
1522
  message: string;
1187
1523
  };
1188
1524
  };
1525
+ /** Re-encrypt all stored credentials under the current master key (ALMADAR_CREDENTIAL_MASTER_KEY), retiring ALMADAR_CREDENTIAL_MASTER_KEY_PREVIOUS. Admin/owner role required. */
1189
1526
  rotate: {
1190
1527
  params: Record<string, never>;
1191
1528
  result: {
1529
+ /** Entries successfully re-encrypted under the current key. */
1192
1530
  rotated: number;
1531
+ /** Entries already under the current key (no-op). */
1193
1532
  alreadyCurrent: number;
1533
+ /** Entries that could not be decrypted with either key (data loss risk). */
1194
1534
  unreadable: number;
1195
1535
  };
1196
1536
  };
1197
1537
  };
1198
1538
  type OtelActions = {
1539
+ /** Start a trace span (in-memory backend — no OpenTelemetry SDK/exporter). */
1199
1540
  startSpan: {
1200
1541
  params: {
1542
+ /** Span name. */
1201
1543
  name: string;
1544
+ /** Key-value attributes attached to the span. */
1202
1545
  attributes?: IntegrationParams;
1546
+ /** Existing trace id to attach this span to; a new one is generated when omitted. */
1203
1547
  traceId?: string;
1204
1548
  };
1205
1549
  result: {
@@ -1207,38 +1551,52 @@ type OtelActions = {
1207
1551
  traceId: string;
1208
1552
  };
1209
1553
  };
1554
+ /** Mark a span ended, optionally recording its final status; no-op (returns ended:false) for an unknown span id. */
1210
1555
  endSpan: {
1211
1556
  params: {
1557
+ /** Span id from startSpan. */
1212
1558
  spanId: string;
1559
+ /** Final span status. */
1213
1560
  status?: 'ok' | 'error';
1214
1561
  };
1215
1562
  result: {
1216
1563
  ended: boolean;
1217
1564
  };
1218
1565
  };
1566
+ /** Attach a timestamped event to an open span; no-op (returns added:false) for an unknown span id. */
1219
1567
  addEvent: {
1220
1568
  params: {
1569
+ /** Span id from startSpan. */
1221
1570
  spanId: string;
1571
+ /** Event name. */
1222
1572
  name: string;
1573
+ /** Key-value attributes attached to the event. */
1223
1574
  attributes?: IntegrationParams;
1224
1575
  };
1225
1576
  result: {
1226
1577
  added: boolean;
1227
1578
  };
1228
1579
  };
1580
+ /** Record a metric sample: counters accumulate, gauges overwrite, histograms append to the sample list. */
1229
1581
  recordMetric: {
1230
1582
  params: {
1583
+ /** Metric name. */
1231
1584
  name: string;
1585
+ /** Sample value. */
1232
1586
  value: number;
1587
+ /** Aggregation kind; defaults to 'counter'. */
1233
1588
  type?: 'counter' | 'gauge' | 'histogram';
1589
+ /** Key-value labels attached to the metric (replaces prior labels on the same name). */
1234
1590
  labels?: IntegrationParams;
1235
1591
  };
1236
1592
  result: {
1237
1593
  recorded: boolean;
1238
1594
  };
1239
1595
  };
1596
+ /** Fetch a stored span's full record by id; null if unknown. */
1240
1597
  getSpan: {
1241
1598
  params: {
1599
+ /** Span id from startSpan. */
1242
1600
  spanId: string;
1243
1601
  };
1244
1602
  result: {
@@ -1251,6 +1609,7 @@ type OtelActions = {
1251
1609
  attributes: IntegrationParams;
1252
1610
  } | null;
1253
1611
  };
1612
+ /** Fetch all recorded metrics, keyed by metric name. */
1254
1613
  getMetrics: {
1255
1614
  params: Record<string, never>;
1256
1615
  result: Record<string, {
@@ -1263,8 +1622,10 @@ type OtelActions = {
1263
1622
  };
1264
1623
  };
1265
1624
  type CLIActions = {
1625
+ /** Validate an orbital schema by writing it to a temp file and shelling out to `npx @almadar/cli validate --format=json`. */
1266
1626
  validate: {
1267
1627
  params: {
1628
+ /** Raw .orb schema content to validate. */
1268
1629
  schema: string;
1269
1630
  };
1270
1631
  result: {
@@ -1276,11 +1637,16 @@ type CLIActions = {
1276
1637
  };
1277
1638
  };
1278
1639
  type DeepAgentActions = {
1640
+ /** Send a chat message to the DeepAgent server (POST /api/agent/message), continuing an existing thread or starting one. */
1279
1641
  sendMessage: {
1280
1642
  params: {
1643
+ /** Message text. */
1281
1644
  message: string;
1645
+ /** Existing thread id to continue; a new thread starts when omitted. */
1282
1646
  threadId?: string;
1647
+ /** Named skill to invoke for this message. */
1283
1648
  skill?: string;
1649
+ /** Extra context passed through to the agent. */
1284
1650
  context?: IntegrationParams;
1285
1651
  };
1286
1652
  result: {
@@ -1288,16 +1654,20 @@ type DeepAgentActions = {
1288
1654
  threadId: string;
1289
1655
  };
1290
1656
  };
1657
+ /** Cancel an in-flight generation on a DeepAgent thread (POST /api/agent/cancel). */
1291
1658
  cancelGeneration: {
1292
1659
  params: {
1660
+ /** Thread whose generation to cancel. */
1293
1661
  threadId: string;
1294
1662
  };
1295
1663
  result: {
1296
1664
  cancelled: boolean;
1297
1665
  };
1298
1666
  };
1667
+ /** Validate a schema via the DeepAgent server (POST /api/schema/validate). */
1299
1668
  validateSchema: {
1300
1669
  params: {
1670
+ /** Schema content to validate. */
1301
1671
  schema: string;
1302
1672
  };
1303
1673
  result: {
@@ -1305,9 +1675,12 @@ type DeepAgentActions = {
1305
1675
  errors: string[];
1306
1676
  };
1307
1677
  };
1678
+ /** Compile a schema to a target shell via the DeepAgent server (POST /api/schema/compile). */
1308
1679
  compileSchema: {
1309
1680
  params: {
1681
+ /** Schema content to compile. */
1310
1682
  schema: string;
1683
+ /** Target codegen shell (e.g. 'typescript'). */
1311
1684
  shell?: string;
1312
1685
  };
1313
1686
  result: {
@@ -1315,8 +1688,10 @@ type DeepAgentActions = {
1315
1688
  files: string[];
1316
1689
  };
1317
1690
  };
1691
+ /** Fetch a thread's message history via the DeepAgent server (POST /api/agent/history). */
1318
1692
  getThreadHistory: {
1319
1693
  params: {
1694
+ /** Thread id. */
1320
1695
  threadId: string;
1321
1696
  };
1322
1697
  result: {
@@ -1329,10 +1704,14 @@ type DeepAgentActions = {
1329
1704
  };
1330
1705
  };
1331
1706
  type DatabaseActions = {
1707
+ /** Run a single read-only SELECT against a Postgres connection (write statements and multi-statement SQL are rejected before execution). */
1332
1708
  query: {
1333
1709
  params: {
1710
+ /** Env-var NAME whose value is the Postgres connection string — never the secret itself; resolved from the credential store/environment at run time. */
1334
1711
  connectionRef: string;
1712
+ /** SQL text; must be exactly one SELECT statement. */
1335
1713
  sql: string;
1714
+ /** Positional bind parameters for the query. */
1336
1715
  params?: DatabaseQueryParamValue[];
1337
1716
  };
1338
1717
  result: {
@@ -1342,8 +1721,10 @@ type DatabaseActions = {
1342
1721
  };
1343
1722
  };
1344
1723
  type WikimediaActions = {
1724
+ /** Look up a Wikipedia page (redirect-resolved): a one-line description, a Commons thumbnail, and the lead-section extract; empty fields on a miss. */
1345
1725
  getPage: {
1346
1726
  params: {
1727
+ /** Page title to look up. */
1347
1728
  title: string;
1348
1729
  };
1349
1730
  result: {
@@ -1355,25 +1736,32 @@ type WikimediaActions = {
1355
1736
  };
1356
1737
  };
1357
1738
  type IconifyActions = {
1739
+ /** Check whether an icon exists at the given Iconify API path (a GET, not a HEAD, despite the name). */
1358
1740
  svgExists: {
1359
1741
  params: {
1742
+ /** Iconify API path segment to probe, e.g. 'prefix/name.svg'. */
1360
1743
  path: string;
1361
1744
  };
1362
1745
  result: {
1363
1746
  exists: boolean;
1364
1747
  };
1365
1748
  };
1749
+ /** Search Iconify's icon sets by relevance. */
1366
1750
  search: {
1367
1751
  params: {
1752
+ /** Search query text. */
1368
1753
  query: string;
1754
+ /** Maximum icon ids to return; defaults to 1. */
1369
1755
  limit?: number;
1370
1756
  };
1371
1757
  result: {
1372
1758
  icons: string[];
1373
1759
  };
1374
1760
  };
1761
+ /** Fetch an icon's raw SVG body (for color-tone classification); null if the icon or its collection isn't found. */
1375
1762
  getIconBody: {
1376
1763
  params: {
1764
+ /** Icon id in "prefix:name" form. */
1377
1765
  iconId: string;
1378
1766
  };
1379
1767
  result: {
@@ -1382,9 +1770,12 @@ type IconifyActions = {
1382
1770
  };
1383
1771
  };
1384
1772
  type ArxivActions = {
1773
+ /** Search arXiv's public Atom API by relevance. */
1385
1774
  search: {
1386
1775
  params: {
1776
+ /** Search query text (matched across all fields). */
1387
1777
  query: string;
1778
+ /** Maximum results to return; defaults to 8. */
1388
1779
  maxResults?: number;
1389
1780
  };
1390
1781
  result: {