@hraness/ghostget 0.18.13 → 0.18.14

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 (33) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +12 -7
  3. package/dist/apple-photos-client.js +1 -1
  4. package/dist/beeper-client.js +42 -6
  5. package/dist/{imessage-direct-install-2gm3kge7.js → imessage-direct-install-5nftwc6p.js} +1 -1
  6. package/dist/{index-maa9hb5z.js → index-g6na3p6k.js} +1 -1
  7. package/dist/{index-en5hycxp.js → index-kaav16fd.js} +4 -2
  8. package/dist/{index-2ymnp8xv.js → index-qcf2f6wm.js} +5 -1
  9. package/dist/{messaging-automation-j4274hvc.js → messaging-automation-58s1366z.js} +1 -1
  10. package/dist/messaging-automation-api.js +2 -2
  11. package/dist/{messaging-native-install-8w1j36ah.js → messaging-native-install-c90nv501.js} +1 -1
  12. package/dist/{whatsapp-automation-runtime-hgh1e9rm.js → whatsapp-automation-runtime-ke1dx91p.js} +1 -1
  13. package/docs/messaging-automation.md +14 -7
  14. package/package.json +8 -4
  15. package/skills/ghostget/references/install.md +5 -5
  16. package/src/assets/adapters/beeper/wrench-web-adapter.json +37 -1
  17. package/src/assets/adapters/beeper/wrench-web-adapter.v2.4.0.json +1500 -0
  18. package/src/beeper-client-types.ts +1 -1
  19. package/src/control/menubar-cli.ts +3 -1
  20. package/src/control/menubar-icon.ts +4 -0
  21. package/src/messaging-automation-descriptors.ts +9 -1
  22. package/src/messaging-automation-factory.ts +7 -5
  23. package/src/messaging-automation-server.ts +2 -2
  24. package/src/messaging-automation-types.ts +3 -2
  25. package/src/messaging-automation-validation.ts +5 -1
  26. package/src/plugins/beeper-linked-device/plugin.ts +3 -1
  27. package/src/provider-plugin-contract-identity.ts +11 -2
  28. package/src/providers/beeper-automation.ts +447 -0
  29. package/src/providers/beeper-local-runtime.ts +61 -21
  30. package/src/providers/beeper-local.ts +4 -4
  31. package/src/providers/beeper-omni.ts +9 -2
  32. package/src/providers/messaging-native-install.ts +2 -1
  33. package/src/version.ts +1 -1
@@ -0,0 +1,1500 @@
1
+ {
2
+ "schemaVersion": 6,
3
+ "id": "beeper-local",
4
+ "version": "2.4.0",
5
+ "displayName": "Beeper (Pinned Local CLI)",
6
+ "surfaceId": "beeper",
7
+ "origins": [
8
+ "https://www.beeper.com"
9
+ ],
10
+ "browserDomains": [
11
+ "www.beeper.com"
12
+ ],
13
+ "operations": {
14
+ "accounts.list": {
15
+ "description": "List the exact account realm bound to the fixed local Beeper Desktop target.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {},
22
+ "required": []
23
+ },
24
+ "localCli": {
25
+ "surface": "beeper",
26
+ "action": "accounts.list",
27
+ "contractVersion": 2,
28
+ "timeoutMs": 120000,
29
+ "maxOutputBytes": 10485760
30
+ }
31
+ },
32
+ "accounts.read": {
33
+ "description": "Read one exact connected Beeper account.",
34
+ "risk": "R1",
35
+ "sideEffect": "none",
36
+ "idempotency": "none",
37
+ "dedupeWindowMs": 0,
38
+ "input": {
39
+ "properties": {
40
+ "account_id": {
41
+ "type": "string",
42
+ "description": "Exact Beeper account ID returned by this adapter",
43
+ "minLength": 1,
44
+ "maxLength": 512
45
+ }
46
+ },
47
+ "required": [
48
+ "account_id"
49
+ ]
50
+ },
51
+ "localCli": {
52
+ "surface": "beeper",
53
+ "action": "accounts.read",
54
+ "contractVersion": 1,
55
+ "timeoutMs": 120000,
56
+ "maxOutputBytes": 10485760
57
+ }
58
+ },
59
+ "bridges.list": {
60
+ "description": "List one bounded, secret-free bridge capability catalog.",
61
+ "risk": "R1",
62
+ "sideEffect": "none",
63
+ "idempotency": "none",
64
+ "dedupeWindowMs": 0,
65
+ "input": {
66
+ "properties": {
67
+ "provider": {
68
+ "type": "string",
69
+ "description": "Optional exact bridge provider class",
70
+ "minLength": 1,
71
+ "maxLength": 32,
72
+ "enum": [
73
+ "local",
74
+ "cloud",
75
+ "self-hosted",
76
+ "platform-sdk"
77
+ ]
78
+ },
79
+ "available": {
80
+ "type": "boolean",
81
+ "description": "Optionally require current availability"
82
+ },
83
+ "limit": {
84
+ "type": "number",
85
+ "description": "Maximum projected bridges",
86
+ "minimum": 1,
87
+ "maximum": 128
88
+ }
89
+ },
90
+ "required": []
91
+ },
92
+ "localCli": {
93
+ "surface": "beeper",
94
+ "action": "bridges.list",
95
+ "contractVersion": 2,
96
+ "timeoutMs": 120000,
97
+ "maxOutputBytes": 10485760
98
+ }
99
+ },
100
+ "bridges.read": {
101
+ "description": "Read one exact bridge and its secret-free capabilities.",
102
+ "risk": "R1",
103
+ "sideEffect": "none",
104
+ "idempotency": "none",
105
+ "dedupeWindowMs": 0,
106
+ "input": {
107
+ "properties": {
108
+ "bridge_id": {
109
+ "type": "string",
110
+ "description": "Exact bridge ID returned by this adapter",
111
+ "minLength": 1,
112
+ "maxLength": 512
113
+ }
114
+ },
115
+ "required": [
116
+ "bridge_id"
117
+ ]
118
+ },
119
+ "localCli": {
120
+ "surface": "beeper",
121
+ "action": "bridges.read",
122
+ "contractVersion": 1,
123
+ "timeoutMs": 120000,
124
+ "maxOutputBytes": 10485760
125
+ }
126
+ },
127
+ "contacts.list": {
128
+ "description": "List one bounded account-aware contact projection through Desktop contact pages.",
129
+ "risk": "R1",
130
+ "sideEffect": "none",
131
+ "idempotency": "none",
132
+ "dedupeWindowMs": 0,
133
+ "input": {
134
+ "properties": {
135
+ "account_id": {
136
+ "type": "string",
137
+ "description": "Exact Beeper account ID returned by this adapter",
138
+ "minLength": 1,
139
+ "maxLength": 512
140
+ },
141
+ "query": {
142
+ "type": "string",
143
+ "description": "Optional normalized provider contact-lookup query of at most 256 UTF-8 bytes",
144
+ "minLength": 1,
145
+ "maxLength": 256
146
+ },
147
+ "before_cursor": {
148
+ "type": "string",
149
+ "description": "Exact opaque provider cursor returned by a prior older-results page",
150
+ "minLength": 1,
151
+ "maxLength": 2048
152
+ },
153
+ "after_cursor": {
154
+ "type": "string",
155
+ "description": "Exact opaque provider cursor returned by a prior newer-results page",
156
+ "minLength": 1,
157
+ "maxLength": 2048
158
+ },
159
+ "limit": {
160
+ "type": "number",
161
+ "description": "Maximum projected contacts",
162
+ "minimum": 1,
163
+ "maximum": 200
164
+ }
165
+ },
166
+ "required": []
167
+ },
168
+ "localCli": {
169
+ "surface": "beeper",
170
+ "action": "contacts.list",
171
+ "contractVersion": 3,
172
+ "timeoutMs": 120000,
173
+ "maxOutputBytes": 10485760
174
+ }
175
+ },
176
+ "contacts.search": {
177
+ "description": "Search one bounded contact candidate window.",
178
+ "risk": "R1",
179
+ "sideEffect": "none",
180
+ "idempotency": "none",
181
+ "dedupeWindowMs": 0,
182
+ "input": {
183
+ "properties": {
184
+ "query": {
185
+ "type": "string",
186
+ "description": "Normalized bounded contact lookup text",
187
+ "minLength": 1,
188
+ "maxLength": 256
189
+ },
190
+ "account_id": {
191
+ "type": "string",
192
+ "description": "Exact Beeper account ID returned by this adapter",
193
+ "minLength": 1,
194
+ "maxLength": 512
195
+ },
196
+ "limit": {
197
+ "type": "number",
198
+ "description": "Maximum candidate contacts",
199
+ "minimum": 1,
200
+ "maximum": 20
201
+ }
202
+ },
203
+ "required": [
204
+ "query"
205
+ ]
206
+ },
207
+ "localCli": {
208
+ "surface": "beeper",
209
+ "action": "contacts.search",
210
+ "contractVersion": 1,
211
+ "timeoutMs": 120000,
212
+ "maxOutputBytes": 10485760
213
+ }
214
+ },
215
+ "contacts.read": {
216
+ "description": "Read one exact account-bound contact identity.",
217
+ "risk": "R1",
218
+ "sideEffect": "none",
219
+ "idempotency": "none",
220
+ "dedupeWindowMs": 0,
221
+ "input": {
222
+ "properties": {
223
+ "account_id": {
224
+ "type": "string",
225
+ "description": "Exact Beeper account ID returned by this adapter",
226
+ "minLength": 1,
227
+ "maxLength": 512
228
+ },
229
+ "contact_id": {
230
+ "type": "string",
231
+ "description": "Exact contact ID returned by this adapter",
232
+ "minLength": 1,
233
+ "maxLength": 2048
234
+ }
235
+ },
236
+ "required": [
237
+ "account_id",
238
+ "contact_id"
239
+ ]
240
+ },
241
+ "localCli": {
242
+ "surface": "beeper",
243
+ "action": "contacts.read",
244
+ "contractVersion": 1,
245
+ "timeoutMs": 120000,
246
+ "maxOutputBytes": 10485760
247
+ }
248
+ },
249
+ "messaging.list": {
250
+ "description": "List one bounded account-aware conversation projection.",
251
+ "risk": "R1",
252
+ "sideEffect": "none",
253
+ "idempotency": "none",
254
+ "dedupeWindowMs": 0,
255
+ "input": {
256
+ "properties": {
257
+ "account_id": {
258
+ "type": "string",
259
+ "description": "Exact Beeper account ID returned by this adapter",
260
+ "minLength": 1,
261
+ "maxLength": 512
262
+ },
263
+ "limit": {
264
+ "type": "number",
265
+ "description": "Maximum projected conversations",
266
+ "minimum": 1,
267
+ "maximum": 200
268
+ },
269
+ "archived": {
270
+ "type": "boolean",
271
+ "description": "Filter by archived state"
272
+ },
273
+ "pinned": {
274
+ "type": "boolean",
275
+ "description": "Filter by pinned state"
276
+ },
277
+ "muted": {
278
+ "type": "boolean",
279
+ "description": "Filter by muted state"
280
+ },
281
+ "unread": {
282
+ "type": "boolean",
283
+ "description": "Filter by unread state"
284
+ },
285
+ "low_priority": {
286
+ "type": "boolean",
287
+ "description": "Filter by low-priority state"
288
+ }
289
+ },
290
+ "required": []
291
+ },
292
+ "localCli": {
293
+ "surface": "beeper",
294
+ "action": "messaging.list",
295
+ "contractVersion": 1,
296
+ "timeoutMs": 120000,
297
+ "maxOutputBytes": 10485760
298
+ }
299
+ },
300
+ "messaging.search": {
301
+ "description": "Search one bounded conversation candidate window.",
302
+ "risk": "R1",
303
+ "sideEffect": "none",
304
+ "idempotency": "none",
305
+ "dedupeWindowMs": 0,
306
+ "input": {
307
+ "properties": {
308
+ "query": {
309
+ "type": "string",
310
+ "description": "Normalized bounded conversation lookup text",
311
+ "minLength": 1,
312
+ "maxLength": 256
313
+ },
314
+ "account_id": {
315
+ "type": "string",
316
+ "description": "Exact Beeper account ID returned by this adapter",
317
+ "minLength": 1,
318
+ "maxLength": 512
319
+ },
320
+ "limit": {
321
+ "type": "number",
322
+ "description": "Maximum candidate conversations",
323
+ "minimum": 1,
324
+ "maximum": 20
325
+ }
326
+ },
327
+ "required": [
328
+ "query"
329
+ ]
330
+ },
331
+ "localCli": {
332
+ "surface": "beeper",
333
+ "action": "messaging.search",
334
+ "contractVersion": 2,
335
+ "timeoutMs": 120000,
336
+ "maxOutputBytes": 10485760
337
+ }
338
+ },
339
+ "conversations.read": {
340
+ "description": "Read one exact account-bound conversation.",
341
+ "risk": "R1",
342
+ "sideEffect": "none",
343
+ "idempotency": "none",
344
+ "dedupeWindowMs": 0,
345
+ "input": {
346
+ "properties": {
347
+ "account_id": {
348
+ "type": "string",
349
+ "description": "Exact Beeper account ID returned by this adapter",
350
+ "minLength": 1,
351
+ "maxLength": 512
352
+ },
353
+ "conversation_id": {
354
+ "type": "string",
355
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
356
+ "minLength": 3,
357
+ "maxLength": 2048
358
+ },
359
+ "max_participants": {
360
+ "type": "number",
361
+ "description": "Maximum projected participants",
362
+ "minimum": 1,
363
+ "maximum": 500
364
+ }
365
+ },
366
+ "required": [
367
+ "account_id",
368
+ "conversation_id"
369
+ ]
370
+ },
371
+ "localCli": {
372
+ "surface": "beeper",
373
+ "action": "conversations.read",
374
+ "contractVersion": 2,
375
+ "timeoutMs": 120000,
376
+ "maxOutputBytes": 10485760
377
+ }
378
+ },
379
+ "messaging.read": {
380
+ "description": "Read one bounded page from one exact conversation.",
381
+ "risk": "R1",
382
+ "sideEffect": "none",
383
+ "idempotency": "none",
384
+ "dedupeWindowMs": 0,
385
+ "input": {
386
+ "properties": {
387
+ "account_id": {
388
+ "type": "string",
389
+ "description": "Exact Beeper account ID returned by this adapter",
390
+ "minLength": 1,
391
+ "maxLength": 512
392
+ },
393
+ "conversation_id": {
394
+ "type": "string",
395
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
396
+ "minLength": 3,
397
+ "maxLength": 2048
398
+ },
399
+ "before_cursor": {
400
+ "type": "string",
401
+ "description": "Exact opaque provider cursor returned by a prior page",
402
+ "minLength": 1,
403
+ "maxLength": 2048
404
+ },
405
+ "after_cursor": {
406
+ "type": "string",
407
+ "description": "Exact opaque provider cursor returned by a prior page",
408
+ "minLength": 1,
409
+ "maxLength": 2048
410
+ },
411
+ "sender": {
412
+ "type": "string",
413
+ "description": "Exact sender filter: me, others, or one bounded opaque provider user ID",
414
+ "minLength": 1,
415
+ "maxLength": 2048
416
+ },
417
+ "limit": {
418
+ "type": "number",
419
+ "description": "Maximum projected messages",
420
+ "minimum": 1,
421
+ "maximum": 200
422
+ }
423
+ },
424
+ "required": [
425
+ "account_id",
426
+ "conversation_id"
427
+ ]
428
+ },
429
+ "localCli": {
430
+ "surface": "beeper",
431
+ "action": "messaging.read",
432
+ "contractVersion": 3,
433
+ "timeoutMs": 120000,
434
+ "maxOutputBytes": 10485760
435
+ }
436
+ },
437
+ "messaging.content.search": {
438
+ "description": "Search and paginate one bounded message-content candidate window through the exact local provider index.",
439
+ "risk": "R1",
440
+ "sideEffect": "none",
441
+ "idempotency": "none",
442
+ "dedupeWindowMs": 0,
443
+ "input": {
444
+ "properties": {
445
+ "query": {
446
+ "type": "string",
447
+ "description": "Normalized bounded message lookup text",
448
+ "minLength": 1,
449
+ "maxLength": 256
450
+ },
451
+ "account_id": {
452
+ "type": "string",
453
+ "description": "Exact Beeper account ID returned by this adapter",
454
+ "minLength": 1,
455
+ "maxLength": 512
456
+ },
457
+ "conversation_id": {
458
+ "type": "string",
459
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
460
+ "minLength": 3,
461
+ "maxLength": 2048
462
+ },
463
+ "chat_type": {
464
+ "type": "string",
465
+ "description": "Exact chat type filter",
466
+ "minLength": 1,
467
+ "maxLength": 16,
468
+ "enum": [
469
+ "group",
470
+ "single"
471
+ ]
472
+ },
473
+ "after": {
474
+ "type": "string",
475
+ "description": "Canonical UTC ISO timestamp",
476
+ "minLength": 20,
477
+ "maxLength": 64
478
+ },
479
+ "before": {
480
+ "type": "string",
481
+ "description": "Canonical UTC ISO timestamp",
482
+ "minLength": 20,
483
+ "maxLength": 64
484
+ },
485
+ "before_cursor": {
486
+ "type": "string",
487
+ "description": "Exact opaque provider cursor returned by a prior older-results page",
488
+ "minLength": 1,
489
+ "maxLength": 2048
490
+ },
491
+ "after_cursor": {
492
+ "type": "string",
493
+ "description": "Exact opaque provider cursor returned by a prior newer-results page",
494
+ "minLength": 1,
495
+ "maxLength": 2048
496
+ },
497
+ "exclude_low_priority": {
498
+ "type": "boolean",
499
+ "description": "Exclude low-priority chats"
500
+ },
501
+ "include_muted": {
502
+ "type": "boolean",
503
+ "description": "Include muted chats"
504
+ },
505
+ "media": {
506
+ "type": "array",
507
+ "description": "Exact media-kind filters",
508
+ "items": {
509
+ "type": "string",
510
+ "description": "One exact media kind",
511
+ "minLength": 1,
512
+ "maxLength": 16,
513
+ "enum": [
514
+ "any",
515
+ "video",
516
+ "image",
517
+ "link",
518
+ "file"
519
+ ]
520
+ },
521
+ "minItems": 0,
522
+ "maxItems": 5
523
+ },
524
+ "sender": {
525
+ "type": "string",
526
+ "description": "Exact sender selector returned by this adapter",
527
+ "minLength": 1,
528
+ "maxLength": 2048
529
+ },
530
+ "limit": {
531
+ "type": "number",
532
+ "description": "Maximum projected message candidates",
533
+ "minimum": 1,
534
+ "maximum": 200
535
+ }
536
+ },
537
+ "required": []
538
+ },
539
+ "localCli": {
540
+ "surface": "beeper",
541
+ "action": "messaging.content.search",
542
+ "contractVersion": 2,
543
+ "timeoutMs": 120000,
544
+ "maxOutputBytes": 10485760
545
+ }
546
+ },
547
+ "messaging.message.read": {
548
+ "description": "Read one exact message from one exact conversation.",
549
+ "risk": "R1",
550
+ "sideEffect": "none",
551
+ "idempotency": "none",
552
+ "dedupeWindowMs": 0,
553
+ "input": {
554
+ "properties": {
555
+ "account_id": {
556
+ "type": "string",
557
+ "description": "Exact Beeper account ID returned by this adapter",
558
+ "minLength": 1,
559
+ "maxLength": 512
560
+ },
561
+ "conversation_id": {
562
+ "type": "string",
563
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
564
+ "minLength": 3,
565
+ "maxLength": 2048
566
+ },
567
+ "message_id": {
568
+ "type": "string",
569
+ "description": "Exact message ID returned by this adapter",
570
+ "minLength": 1,
571
+ "maxLength": 2048
572
+ }
573
+ },
574
+ "required": [
575
+ "account_id",
576
+ "conversation_id",
577
+ "message_id"
578
+ ]
579
+ },
580
+ "localCli": {
581
+ "surface": "beeper",
582
+ "action": "messaging.message.read",
583
+ "contractVersion": 1,
584
+ "timeoutMs": 120000,
585
+ "maxOutputBytes": 10485760
586
+ }
587
+ },
588
+ "messaging.context.read": {
589
+ "description": "Read bounded context around one exact message.",
590
+ "risk": "R1",
591
+ "sideEffect": "none",
592
+ "idempotency": "none",
593
+ "dedupeWindowMs": 0,
594
+ "input": {
595
+ "properties": {
596
+ "account_id": {
597
+ "type": "string",
598
+ "description": "Exact Beeper account ID returned by this adapter",
599
+ "minLength": 1,
600
+ "maxLength": 512
601
+ },
602
+ "conversation_id": {
603
+ "type": "string",
604
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
605
+ "minLength": 3,
606
+ "maxLength": 2048
607
+ },
608
+ "message_id": {
609
+ "type": "string",
610
+ "description": "Exact message ID returned by this adapter",
611
+ "minLength": 1,
612
+ "maxLength": 2048
613
+ },
614
+ "before": {
615
+ "type": "number",
616
+ "description": "Messages before the exact target",
617
+ "minimum": 0,
618
+ "maximum": 100
619
+ },
620
+ "after": {
621
+ "type": "number",
622
+ "description": "Messages after the exact target",
623
+ "minimum": 0,
624
+ "maximum": 100
625
+ }
626
+ },
627
+ "required": [
628
+ "account_id",
629
+ "conversation_id",
630
+ "message_id"
631
+ ]
632
+ },
633
+ "localCli": {
634
+ "surface": "beeper",
635
+ "action": "messaging.context.read",
636
+ "contractVersion": 1,
637
+ "timeoutMs": 120000,
638
+ "maxOutputBytes": 10485760
639
+ }
640
+ },
641
+ "messaging.send": {
642
+ "description": "Submit one confirmed text, file, sticker, or voice request to Beeper Desktop; network delivery is not asserted.",
643
+ "risk": "R3",
644
+ "sideEffect": "externally visible provider or Desktop mutation",
645
+ "idempotency": "local-at-most-once",
646
+ "dedupeWindowMs": 86400000,
647
+ "input": {
648
+ "properties": {
649
+ "account_id": {
650
+ "type": "string",
651
+ "description": "Exact Beeper account ID returned by this adapter",
652
+ "minLength": 1,
653
+ "maxLength": 512
654
+ },
655
+ "conversation_id": {
656
+ "type": "string",
657
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
658
+ "minLength": 3,
659
+ "maxLength": 2048
660
+ },
661
+ "kind": {
662
+ "type": "string",
663
+ "description": "Exact bounded send kind",
664
+ "minLength": 1,
665
+ "maxLength": 16,
666
+ "enum": [
667
+ "text",
668
+ "file",
669
+ "sticker",
670
+ "voice"
671
+ ]
672
+ },
673
+ "text": {
674
+ "type": "string",
675
+ "description": "Message text or optional file caption",
676
+ "minLength": 0,
677
+ "maxLength": 65536
678
+ },
679
+ "file": {
680
+ "type": "file",
681
+ "description": "Plan-bound file, sticker, or voice-note bytes",
682
+ "maxBytes": 524288000
683
+ },
684
+ "filename": {
685
+ "type": "string",
686
+ "description": "Provider-visible filename",
687
+ "minLength": 1,
688
+ "maxLength": 512
689
+ },
690
+ "mime_type": {
691
+ "type": "string",
692
+ "description": "Exact media type",
693
+ "minLength": 1,
694
+ "maxLength": 128
695
+ },
696
+ "duration_seconds": {
697
+ "type": "number",
698
+ "description": "Voice-note duration in seconds",
699
+ "minimum": 1,
700
+ "maximum": 86400
701
+ },
702
+ "reply_to": {
703
+ "type": "string",
704
+ "description": "Exact message ID returned by this adapter",
705
+ "minLength": 1,
706
+ "maxLength": 2048
707
+ },
708
+ "mentions": {
709
+ "type": "array",
710
+ "description": "Canonical Matrix/Beeper participant IDs",
711
+ "items": {
712
+ "type": "string",
713
+ "description": "Canonical Matrix/Beeper user ID",
714
+ "minLength": 3,
715
+ "maxLength": 2048
716
+ },
717
+ "minItems": 0,
718
+ "maxItems": 25
719
+ },
720
+ "no_preview": {
721
+ "type": "boolean",
722
+ "description": "Disable link previews for text"
723
+ }
724
+ },
725
+ "required": [
726
+ "account_id",
727
+ "conversation_id",
728
+ "kind"
729
+ ]
730
+ },
731
+ "localCli": {
732
+ "surface": "beeper",
733
+ "action": "messaging.send",
734
+ "contractVersion": 1,
735
+ "timeoutMs": 300000,
736
+ "maxOutputBytes": 10485760
737
+ }
738
+ },
739
+ "reactions.set": {
740
+ "description": "Set one exact reaction desired state.",
741
+ "risk": "R2",
742
+ "sideEffect": "reversible provider or private desired-state mutation",
743
+ "idempotency": "local-at-most-once",
744
+ "dedupeWindowMs": 86400000,
745
+ "input": {
746
+ "properties": {
747
+ "account_id": {
748
+ "type": "string",
749
+ "description": "Exact Beeper account ID returned by this adapter",
750
+ "minLength": 1,
751
+ "maxLength": 512
752
+ },
753
+ "conversation_id": {
754
+ "type": "string",
755
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
756
+ "minLength": 3,
757
+ "maxLength": 2048
758
+ },
759
+ "message_id": {
760
+ "type": "string",
761
+ "description": "Exact message ID returned by this adapter",
762
+ "minLength": 1,
763
+ "maxLength": 2048
764
+ },
765
+ "reaction": {
766
+ "type": "string",
767
+ "description": "Exact reaction text",
768
+ "minLength": 1,
769
+ "maxLength": 256
770
+ },
771
+ "enabled": {
772
+ "type": "boolean",
773
+ "description": "Desired reaction presence"
774
+ }
775
+ },
776
+ "required": [
777
+ "account_id",
778
+ "conversation_id",
779
+ "message_id",
780
+ "reaction",
781
+ "enabled"
782
+ ]
783
+ },
784
+ "localCli": {
785
+ "surface": "beeper",
786
+ "action": "reactions.set",
787
+ "contractVersion": 1,
788
+ "timeoutMs": 120000,
789
+ "maxOutputBytes": 10485760
790
+ }
791
+ },
792
+ "messaging.edit": {
793
+ "description": "Edit one exact message authored by the bound account.",
794
+ "risk": "R3",
795
+ "sideEffect": "externally visible provider or Desktop mutation",
796
+ "idempotency": "local-at-most-once",
797
+ "dedupeWindowMs": 86400000,
798
+ "input": {
799
+ "properties": {
800
+ "account_id": {
801
+ "type": "string",
802
+ "description": "Exact Beeper account ID returned by this adapter",
803
+ "minLength": 1,
804
+ "maxLength": 512
805
+ },
806
+ "conversation_id": {
807
+ "type": "string",
808
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
809
+ "minLength": 3,
810
+ "maxLength": 2048
811
+ },
812
+ "message_id": {
813
+ "type": "string",
814
+ "description": "Exact message ID returned by this adapter",
815
+ "minLength": 1,
816
+ "maxLength": 2048
817
+ },
818
+ "text": {
819
+ "type": "string",
820
+ "description": "Replacement message text",
821
+ "minLength": 1,
822
+ "maxLength": 65536
823
+ }
824
+ },
825
+ "required": [
826
+ "account_id",
827
+ "conversation_id",
828
+ "message_id",
829
+ "text"
830
+ ]
831
+ },
832
+ "localCli": {
833
+ "surface": "beeper",
834
+ "action": "messaging.edit",
835
+ "contractVersion": 1,
836
+ "timeoutMs": 120000,
837
+ "maxOutputBytes": 10485760
838
+ }
839
+ },
840
+ "conversations.start": {
841
+ "description": "Start one conversation with one exact account-bound user.",
842
+ "risk": "R3",
843
+ "sideEffect": "externally visible provider or Desktop mutation",
844
+ "idempotency": "local-at-most-once",
845
+ "dedupeWindowMs": 86400000,
846
+ "input": {
847
+ "properties": {
848
+ "account_id": {
849
+ "type": "string",
850
+ "description": "Exact Beeper account ID returned by this adapter",
851
+ "minLength": 1,
852
+ "maxLength": 512
853
+ },
854
+ "user_id": {
855
+ "type": "string",
856
+ "description": "Canonical Matrix/Beeper user ID",
857
+ "minLength": 3,
858
+ "maxLength": 2048
859
+ }
860
+ },
861
+ "required": [
862
+ "account_id",
863
+ "user_id"
864
+ ]
865
+ },
866
+ "localCli": {
867
+ "surface": "beeper",
868
+ "action": "conversations.start",
869
+ "contractVersion": 1,
870
+ "timeoutMs": 120000,
871
+ "maxOutputBytes": 10485760
872
+ }
873
+ },
874
+ "conversations.archive.set": {
875
+ "description": "Set one conversation archive desired state.",
876
+ "risk": "R2",
877
+ "sideEffect": "reversible provider or private desired-state mutation",
878
+ "idempotency": "local-at-most-once",
879
+ "dedupeWindowMs": 86400000,
880
+ "input": {
881
+ "properties": {
882
+ "account_id": {
883
+ "type": "string",
884
+ "description": "Exact Beeper account ID returned by this adapter",
885
+ "minLength": 1,
886
+ "maxLength": 512
887
+ },
888
+ "conversation_id": {
889
+ "type": "string",
890
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
891
+ "minLength": 3,
892
+ "maxLength": 2048
893
+ },
894
+ "enabled": {
895
+ "type": "boolean",
896
+ "description": "Desired archived state"
897
+ }
898
+ },
899
+ "required": [
900
+ "account_id",
901
+ "conversation_id",
902
+ "enabled"
903
+ ]
904
+ },
905
+ "localCli": {
906
+ "surface": "beeper",
907
+ "action": "conversations.archive.set",
908
+ "contractVersion": 1,
909
+ "timeoutMs": 120000,
910
+ "maxOutputBytes": 10485760
911
+ }
912
+ },
913
+ "conversations.pin.set": {
914
+ "description": "Set one conversation pin desired state.",
915
+ "risk": "R2",
916
+ "sideEffect": "reversible provider or private desired-state mutation",
917
+ "idempotency": "local-at-most-once",
918
+ "dedupeWindowMs": 86400000,
919
+ "input": {
920
+ "properties": {
921
+ "account_id": {
922
+ "type": "string",
923
+ "description": "Exact Beeper account ID returned by this adapter",
924
+ "minLength": 1,
925
+ "maxLength": 512
926
+ },
927
+ "conversation_id": {
928
+ "type": "string",
929
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
930
+ "minLength": 3,
931
+ "maxLength": 2048
932
+ },
933
+ "enabled": {
934
+ "type": "boolean",
935
+ "description": "Desired pinned state"
936
+ }
937
+ },
938
+ "required": [
939
+ "account_id",
940
+ "conversation_id",
941
+ "enabled"
942
+ ]
943
+ },
944
+ "localCli": {
945
+ "surface": "beeper",
946
+ "action": "conversations.pin.set",
947
+ "contractVersion": 1,
948
+ "timeoutMs": 120000,
949
+ "maxOutputBytes": 10485760
950
+ }
951
+ },
952
+ "conversations.mute.set": {
953
+ "description": "Set one conversation mute desired state.",
954
+ "risk": "R2",
955
+ "sideEffect": "reversible provider or private desired-state mutation",
956
+ "idempotency": "local-at-most-once",
957
+ "dedupeWindowMs": 86400000,
958
+ "input": {
959
+ "properties": {
960
+ "account_id": {
961
+ "type": "string",
962
+ "description": "Exact Beeper account ID returned by this adapter",
963
+ "minLength": 1,
964
+ "maxLength": 512
965
+ },
966
+ "conversation_id": {
967
+ "type": "string",
968
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
969
+ "minLength": 3,
970
+ "maxLength": 2048
971
+ },
972
+ "enabled": {
973
+ "type": "boolean",
974
+ "description": "Desired muted state"
975
+ }
976
+ },
977
+ "required": [
978
+ "account_id",
979
+ "conversation_id",
980
+ "enabled"
981
+ ]
982
+ },
983
+ "localCli": {
984
+ "surface": "beeper",
985
+ "action": "conversations.mute.set",
986
+ "contractVersion": 1,
987
+ "timeoutMs": 120000,
988
+ "maxOutputBytes": 10485760
989
+ }
990
+ },
991
+ "conversations.read-state.set": {
992
+ "description": "Set one conversation read marker, potentially emitting a network receipt.",
993
+ "risk": "R3",
994
+ "sideEffect": "externally visible provider or Desktop mutation",
995
+ "idempotency": "local-at-most-once",
996
+ "dedupeWindowMs": 86400000,
997
+ "input": {
998
+ "properties": {
999
+ "account_id": {
1000
+ "type": "string",
1001
+ "description": "Exact Beeper account ID returned by this adapter",
1002
+ "minLength": 1,
1003
+ "maxLength": 512
1004
+ },
1005
+ "conversation_id": {
1006
+ "type": "string",
1007
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1008
+ "minLength": 3,
1009
+ "maxLength": 2048
1010
+ },
1011
+ "unread": {
1012
+ "type": "boolean",
1013
+ "description": "Desired marked-unread state"
1014
+ },
1015
+ "message_id": {
1016
+ "type": "string",
1017
+ "description": "Exact message ID returned by this adapter",
1018
+ "minLength": 1,
1019
+ "maxLength": 2048
1020
+ }
1021
+ },
1022
+ "required": [
1023
+ "account_id",
1024
+ "conversation_id",
1025
+ "unread"
1026
+ ]
1027
+ },
1028
+ "localCli": {
1029
+ "surface": "beeper",
1030
+ "action": "conversations.read-state.set",
1031
+ "contractVersion": 1,
1032
+ "timeoutMs": 120000,
1033
+ "maxOutputBytes": 10485760
1034
+ }
1035
+ },
1036
+ "conversations.priority.set": {
1037
+ "description": "Set one conversation inbox priority desired state.",
1038
+ "risk": "R2",
1039
+ "sideEffect": "reversible provider or private desired-state mutation",
1040
+ "idempotency": "local-at-most-once",
1041
+ "dedupeWindowMs": 86400000,
1042
+ "input": {
1043
+ "properties": {
1044
+ "account_id": {
1045
+ "type": "string",
1046
+ "description": "Exact Beeper account ID returned by this adapter",
1047
+ "minLength": 1,
1048
+ "maxLength": 512
1049
+ },
1050
+ "conversation_id": {
1051
+ "type": "string",
1052
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1053
+ "minLength": 3,
1054
+ "maxLength": 2048
1055
+ },
1056
+ "level": {
1057
+ "type": "string",
1058
+ "description": "Desired inbox priority",
1059
+ "minLength": 1,
1060
+ "maxLength": 16,
1061
+ "enum": [
1062
+ "inbox",
1063
+ "low"
1064
+ ]
1065
+ }
1066
+ },
1067
+ "required": [
1068
+ "account_id",
1069
+ "conversation_id",
1070
+ "level"
1071
+ ]
1072
+ },
1073
+ "localCli": {
1074
+ "surface": "beeper",
1075
+ "action": "conversations.priority.set",
1076
+ "contractVersion": 1,
1077
+ "timeoutMs": 120000,
1078
+ "maxOutputBytes": 10485760
1079
+ }
1080
+ },
1081
+ "conversations.notify": {
1082
+ "description": "Send one explicit iMessage Notify Anyway alert.",
1083
+ "risk": "R3",
1084
+ "sideEffect": "externally visible provider or Desktop mutation",
1085
+ "idempotency": "local-at-most-once",
1086
+ "dedupeWindowMs": 86400000,
1087
+ "input": {
1088
+ "properties": {
1089
+ "account_id": {
1090
+ "type": "string",
1091
+ "description": "Exact Beeper account ID returned by this adapter",
1092
+ "minLength": 1,
1093
+ "maxLength": 512
1094
+ },
1095
+ "conversation_id": {
1096
+ "type": "string",
1097
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1098
+ "minLength": 3,
1099
+ "maxLength": 2048
1100
+ }
1101
+ },
1102
+ "required": [
1103
+ "account_id",
1104
+ "conversation_id"
1105
+ ]
1106
+ },
1107
+ "localCli": {
1108
+ "surface": "beeper",
1109
+ "action": "conversations.notify",
1110
+ "contractVersion": 1,
1111
+ "timeoutMs": 120000,
1112
+ "maxOutputBytes": 10485760
1113
+ }
1114
+ },
1115
+ "conversations.title.set": {
1116
+ "description": "Set one exact group-conversation title.",
1117
+ "risk": "R3",
1118
+ "sideEffect": "externally visible provider or Desktop mutation",
1119
+ "idempotency": "local-at-most-once",
1120
+ "dedupeWindowMs": 86400000,
1121
+ "input": {
1122
+ "properties": {
1123
+ "account_id": {
1124
+ "type": "string",
1125
+ "description": "Exact Beeper account ID returned by this adapter",
1126
+ "minLength": 1,
1127
+ "maxLength": 512
1128
+ },
1129
+ "conversation_id": {
1130
+ "type": "string",
1131
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1132
+ "minLength": 3,
1133
+ "maxLength": 2048
1134
+ },
1135
+ "title": {
1136
+ "type": "string",
1137
+ "description": "Replacement group title",
1138
+ "minLength": 1,
1139
+ "maxLength": 1024
1140
+ }
1141
+ },
1142
+ "required": [
1143
+ "account_id",
1144
+ "conversation_id",
1145
+ "title"
1146
+ ]
1147
+ },
1148
+ "localCli": {
1149
+ "surface": "beeper",
1150
+ "action": "conversations.title.set",
1151
+ "contractVersion": 1,
1152
+ "timeoutMs": 120000,
1153
+ "maxOutputBytes": 10485760
1154
+ }
1155
+ },
1156
+ "conversations.description.set": {
1157
+ "description": "Set or clear one exact group-conversation description.",
1158
+ "risk": "R3",
1159
+ "sideEffect": "externally visible provider or Desktop mutation",
1160
+ "idempotency": "local-at-most-once",
1161
+ "dedupeWindowMs": 86400000,
1162
+ "input": {
1163
+ "properties": {
1164
+ "account_id": {
1165
+ "type": "string",
1166
+ "description": "Exact Beeper account ID returned by this adapter",
1167
+ "minLength": 1,
1168
+ "maxLength": 512
1169
+ },
1170
+ "conversation_id": {
1171
+ "type": "string",
1172
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1173
+ "minLength": 3,
1174
+ "maxLength": 2048
1175
+ },
1176
+ "clear": {
1177
+ "type": "boolean",
1178
+ "description": "Clear the description"
1179
+ },
1180
+ "description": {
1181
+ "type": "string",
1182
+ "description": "Replacement group description",
1183
+ "minLength": 1,
1184
+ "maxLength": 65536
1185
+ }
1186
+ },
1187
+ "required": [
1188
+ "account_id",
1189
+ "conversation_id",
1190
+ "clear"
1191
+ ]
1192
+ },
1193
+ "localCli": {
1194
+ "surface": "beeper",
1195
+ "action": "conversations.description.set",
1196
+ "contractVersion": 1,
1197
+ "timeoutMs": 120000,
1198
+ "maxOutputBytes": 10485760
1199
+ }
1200
+ },
1201
+ "conversations.avatar.set": {
1202
+ "description": "Set or clear one exact group-conversation avatar.",
1203
+ "risk": "R3",
1204
+ "sideEffect": "externally visible provider or Desktop mutation",
1205
+ "idempotency": "local-at-most-once",
1206
+ "dedupeWindowMs": 86400000,
1207
+ "input": {
1208
+ "properties": {
1209
+ "account_id": {
1210
+ "type": "string",
1211
+ "description": "Exact Beeper account ID returned by this adapter",
1212
+ "minLength": 1,
1213
+ "maxLength": 512
1214
+ },
1215
+ "conversation_id": {
1216
+ "type": "string",
1217
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1218
+ "minLength": 3,
1219
+ "maxLength": 2048
1220
+ },
1221
+ "clear": {
1222
+ "type": "boolean",
1223
+ "description": "Clear the avatar"
1224
+ },
1225
+ "avatar": {
1226
+ "type": "file",
1227
+ "description": "Plan-bound replacement avatar bytes",
1228
+ "maxBytes": 16777216
1229
+ }
1230
+ },
1231
+ "required": [
1232
+ "account_id",
1233
+ "conversation_id",
1234
+ "clear"
1235
+ ]
1236
+ },
1237
+ "localCli": {
1238
+ "surface": "beeper",
1239
+ "action": "conversations.avatar.set",
1240
+ "contractVersion": 1,
1241
+ "timeoutMs": 120000,
1242
+ "maxOutputBytes": 10485760
1243
+ }
1244
+ },
1245
+ "conversations.draft.set": {
1246
+ "description": "Set or clear one private Desktop draft.",
1247
+ "risk": "R2",
1248
+ "sideEffect": "reversible provider or private desired-state mutation",
1249
+ "idempotency": "local-at-most-once",
1250
+ "dedupeWindowMs": 86400000,
1251
+ "input": {
1252
+ "properties": {
1253
+ "account_id": {
1254
+ "type": "string",
1255
+ "description": "Exact Beeper account ID returned by this adapter",
1256
+ "minLength": 1,
1257
+ "maxLength": 512
1258
+ },
1259
+ "conversation_id": {
1260
+ "type": "string",
1261
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1262
+ "minLength": 3,
1263
+ "maxLength": 2048
1264
+ },
1265
+ "clear": {
1266
+ "type": "boolean",
1267
+ "description": "Clear the draft"
1268
+ },
1269
+ "text": {
1270
+ "type": "string",
1271
+ "description": "Replacement private draft text",
1272
+ "minLength": 0,
1273
+ "maxLength": 65536
1274
+ },
1275
+ "attachment": {
1276
+ "type": "file",
1277
+ "description": "Plan-bound private draft attachment",
1278
+ "maxBytes": 524288000
1279
+ },
1280
+ "filename": {
1281
+ "type": "string",
1282
+ "description": "Attachment filename",
1283
+ "minLength": 1,
1284
+ "maxLength": 512
1285
+ },
1286
+ "mime_type": {
1287
+ "type": "string",
1288
+ "description": "Attachment media type",
1289
+ "minLength": 1,
1290
+ "maxLength": 128
1291
+ }
1292
+ },
1293
+ "required": [
1294
+ "account_id",
1295
+ "conversation_id",
1296
+ "clear"
1297
+ ]
1298
+ },
1299
+ "localCli": {
1300
+ "surface": "beeper",
1301
+ "action": "conversations.draft.set",
1302
+ "contractVersion": 1,
1303
+ "timeoutMs": 120000,
1304
+ "maxOutputBytes": 10485760
1305
+ }
1306
+ },
1307
+ "conversations.disappearing.set": {
1308
+ "description": "Set one disappearing-message retention interval.",
1309
+ "risk": "R3",
1310
+ "sideEffect": "externally visible provider or Desktop mutation",
1311
+ "idempotency": "local-at-most-once",
1312
+ "dedupeWindowMs": 86400000,
1313
+ "input": {
1314
+ "properties": {
1315
+ "account_id": {
1316
+ "type": "string",
1317
+ "description": "Exact Beeper account ID returned by this adapter",
1318
+ "minLength": 1,
1319
+ "maxLength": 512
1320
+ },
1321
+ "conversation_id": {
1322
+ "type": "string",
1323
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1324
+ "minLength": 3,
1325
+ "maxLength": 2048
1326
+ },
1327
+ "seconds": {
1328
+ "type": "number",
1329
+ "description": "Desired disappearing-message interval; zero disables",
1330
+ "minimum": 0,
1331
+ "maximum": 31536000
1332
+ }
1333
+ },
1334
+ "required": [
1335
+ "account_id",
1336
+ "conversation_id",
1337
+ "seconds"
1338
+ ]
1339
+ },
1340
+ "localCli": {
1341
+ "surface": "beeper",
1342
+ "action": "conversations.disappearing.set",
1343
+ "contractVersion": 1,
1344
+ "timeoutMs": 120000,
1345
+ "maxOutputBytes": 10485760
1346
+ }
1347
+ },
1348
+ "conversations.reminder.set": {
1349
+ "description": "Set or clear one private Desktop reminder.",
1350
+ "risk": "R2",
1351
+ "sideEffect": "reversible provider or private desired-state mutation",
1352
+ "idempotency": "local-at-most-once",
1353
+ "dedupeWindowMs": 86400000,
1354
+ "input": {
1355
+ "properties": {
1356
+ "account_id": {
1357
+ "type": "string",
1358
+ "description": "Exact Beeper account ID returned by this adapter",
1359
+ "minLength": 1,
1360
+ "maxLength": 512
1361
+ },
1362
+ "conversation_id": {
1363
+ "type": "string",
1364
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1365
+ "minLength": 3,
1366
+ "maxLength": 2048
1367
+ },
1368
+ "clear": {
1369
+ "type": "boolean",
1370
+ "description": "Clear the reminder"
1371
+ },
1372
+ "when": {
1373
+ "type": "string",
1374
+ "description": "Canonical UTC ISO timestamp",
1375
+ "minLength": 20,
1376
+ "maxLength": 64
1377
+ },
1378
+ "dismiss_on_message": {
1379
+ "type": "boolean",
1380
+ "description": "Dismiss when a message arrives"
1381
+ }
1382
+ },
1383
+ "required": [
1384
+ "account_id",
1385
+ "conversation_id",
1386
+ "clear"
1387
+ ]
1388
+ },
1389
+ "localCli": {
1390
+ "surface": "beeper",
1391
+ "action": "conversations.reminder.set",
1392
+ "contractVersion": 1,
1393
+ "timeoutMs": 120000,
1394
+ "maxOutputBytes": 10485760
1395
+ }
1396
+ },
1397
+ "conversations.focus": {
1398
+ "description": "Focus one exact Desktop conversation with optional plan-bound draft state.",
1399
+ "risk": "R2",
1400
+ "sideEffect": "reversible provider or private desired-state mutation",
1401
+ "idempotency": "local-at-most-once",
1402
+ "dedupeWindowMs": 86400000,
1403
+ "input": {
1404
+ "properties": {
1405
+ "account_id": {
1406
+ "type": "string",
1407
+ "description": "Exact Beeper account ID returned by this adapter",
1408
+ "minLength": 1,
1409
+ "maxLength": 512
1410
+ },
1411
+ "conversation_id": {
1412
+ "type": "string",
1413
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1414
+ "minLength": 3,
1415
+ "maxLength": 2048
1416
+ },
1417
+ "message_id": {
1418
+ "type": "string",
1419
+ "description": "Exact message ID returned by this adapter",
1420
+ "minLength": 1,
1421
+ "maxLength": 2048
1422
+ },
1423
+ "draft": {
1424
+ "type": "string",
1425
+ "description": "Plan-bound Desktop draft text",
1426
+ "minLength": 0,
1427
+ "maxLength": 65536
1428
+ },
1429
+ "attachment": {
1430
+ "type": "file",
1431
+ "description": "Plan-bound Desktop draft attachment",
1432
+ "maxBytes": 524288000
1433
+ }
1434
+ },
1435
+ "required": [
1436
+ "account_id",
1437
+ "conversation_id"
1438
+ ]
1439
+ },
1440
+ "localCli": {
1441
+ "surface": "beeper",
1442
+ "action": "conversations.focus",
1443
+ "contractVersion": 1,
1444
+ "timeoutMs": 120000,
1445
+ "maxOutputBytes": 10485760
1446
+ }
1447
+ },
1448
+ "presence.set": {
1449
+ "description": "Send one bounded typing or paused presence indication.",
1450
+ "risk": "R3",
1451
+ "sideEffect": "externally visible provider or Desktop mutation",
1452
+ "idempotency": "local-at-most-once",
1453
+ "dedupeWindowMs": 86400000,
1454
+ "input": {
1455
+ "properties": {
1456
+ "account_id": {
1457
+ "type": "string",
1458
+ "description": "Exact Beeper account ID returned by this adapter",
1459
+ "minLength": 1,
1460
+ "maxLength": 512
1461
+ },
1462
+ "conversation_id": {
1463
+ "type": "string",
1464
+ "description": "Canonical full Beeper/Matrix chat ID returned by this adapter",
1465
+ "minLength": 3,
1466
+ "maxLength": 2048
1467
+ },
1468
+ "state": {
1469
+ "type": "string",
1470
+ "description": "Exact presence state",
1471
+ "minLength": 1,
1472
+ "maxLength": 16,
1473
+ "enum": [
1474
+ "typing",
1475
+ "paused"
1476
+ ]
1477
+ },
1478
+ "duration_seconds": {
1479
+ "type": "number",
1480
+ "description": "Bounded typing duration before a separately journaled paused dispatch",
1481
+ "minimum": 1,
1482
+ "maximum": 30
1483
+ }
1484
+ },
1485
+ "required": [
1486
+ "account_id",
1487
+ "conversation_id",
1488
+ "state"
1489
+ ]
1490
+ },
1491
+ "localCli": {
1492
+ "surface": "beeper",
1493
+ "action": "presence.set",
1494
+ "contractVersion": 1,
1495
+ "timeoutMs": 120000,
1496
+ "maxOutputBytes": 10485760
1497
+ }
1498
+ }
1499
+ }
1500
+ }