@actions-json/bridge 0.1.118 → 0.1.120

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.
@@ -0,0 +1,3303 @@
1
+ {
2
+ "protocol": "actions.json",
3
+ "version": 1,
4
+ "surface": {
5
+ "kind": "browser_overlay_runtime",
6
+ "description": "Authorized Chrome extension runtime for rendering agent-created HTML overlays on the active website."
7
+ },
8
+ "primitive_dictionary": {
9
+ "version": 1,
10
+ "stage": 1,
11
+ "host": "extension",
12
+ "primitives": [
13
+ {
14
+ "name": "browser.screenshot",
15
+ "support": "supported",
16
+ "reason": null,
17
+ "capability_class": "privileged",
18
+ "portable": false,
19
+ "summary": "Capture a true rendered screenshot where the host has browser-level authority.",
20
+ "input_schema": {
21
+ "type": "object",
22
+ "properties": {
23
+ "format": {
24
+ "type": "string",
25
+ "enum": [
26
+ "png",
27
+ "jpeg"
28
+ ]
29
+ },
30
+ "quality": {
31
+ "type": "integer",
32
+ "minimum": 1,
33
+ "maximum": 100
34
+ },
35
+ "max_width": {
36
+ "type": "integer",
37
+ "minimum": 1
38
+ },
39
+ "max_height": {
40
+ "type": "integer",
41
+ "minimum": 1
42
+ },
43
+ "max_kilobytes": {
44
+ "type": "integer",
45
+ "minimum": 1
46
+ }
47
+ },
48
+ "additionalProperties": false
49
+ }
50
+ },
51
+ {
52
+ "name": "browser.claimed_tabs.list",
53
+ "support": "supported",
54
+ "reason": null,
55
+ "capability_class": "privileged",
56
+ "portable": false,
57
+ "summary": "List browser tabs already claimed by the actions.json extension.",
58
+ "input_schema": {
59
+ "type": "object",
60
+ "properties": {},
61
+ "additionalProperties": false
62
+ }
63
+ },
64
+ {
65
+ "name": "browser.claimed_tabs.activate",
66
+ "support": "supported",
67
+ "reason": null,
68
+ "capability_class": "privileged",
69
+ "portable": false,
70
+ "summary": "Focus an already-claimed browser tab and reconnect its actions.json runtime.",
71
+ "input_schema": {
72
+ "type": "object",
73
+ "required": [
74
+ "tab_id"
75
+ ],
76
+ "properties": {
77
+ "tab_id": {
78
+ "type": "integer",
79
+ "description": "Chrome tab id from browser.claimed_tabs.list."
80
+ }
81
+ },
82
+ "additionalProperties": false
83
+ }
84
+ },
85
+ {
86
+ "name": "runtime.agent.start",
87
+ "support": "supported",
88
+ "reason": null,
89
+ "capability_class": "privileged",
90
+ "portable": false,
91
+ "summary": "Start the extension-owned hosted GPT Realtime session, defaulting to text-only mode without microphone capture.",
92
+ "input_schema": {
93
+ "type": "object",
94
+ "properties": {
95
+ "text_only": {
96
+ "type": "boolean",
97
+ "default": true,
98
+ "description": "When true or omitted, start without microphone capture and request text output."
99
+ }
100
+ },
101
+ "additionalProperties": false
102
+ }
103
+ },
104
+ {
105
+ "name": "runtime.agent.stop",
106
+ "support": "supported",
107
+ "reason": null,
108
+ "capability_class": "privileged",
109
+ "portable": false,
110
+ "summary": "Stop the extension-owned hosted GPT Realtime session.",
111
+ "input_schema": {
112
+ "type": "object",
113
+ "properties": {},
114
+ "additionalProperties": false
115
+ }
116
+ },
117
+ {
118
+ "name": "runtime.agent.user_message",
119
+ "support": "supported",
120
+ "reason": null,
121
+ "capability_class": "privileged",
122
+ "portable": false,
123
+ "summary": "Inject a developer test prompt into the active hosted GPT Realtime session and request a text-only response surfaced as a browser toast.",
124
+ "input_schema": {
125
+ "type": "object",
126
+ "required": [
127
+ "text"
128
+ ],
129
+ "properties": {
130
+ "text": {
131
+ "type": "string",
132
+ "description": "User-style instruction to send into the active hosted Realtime session for testing."
133
+ }
134
+ },
135
+ "additionalProperties": false
136
+ }
137
+ },
138
+ {
139
+ "name": "pointer.move",
140
+ "support": "supported",
141
+ "reason": null,
142
+ "capability_class": "portable",
143
+ "portable": true,
144
+ "summary": "Move a visible pointer affordance to viewport coordinates.",
145
+ "input_schema": {
146
+ "type": "object",
147
+ "required": [
148
+ "x",
149
+ "y"
150
+ ],
151
+ "properties": {
152
+ "x": {
153
+ "type": "number"
154
+ },
155
+ "y": {
156
+ "type": "number"
157
+ },
158
+ "duration_ms": {
159
+ "type": "integer",
160
+ "minimum": 0
161
+ }
162
+ },
163
+ "additionalProperties": false
164
+ }
165
+ },
166
+ {
167
+ "name": "pointer.click",
168
+ "support": "supported",
169
+ "reason": null,
170
+ "capability_class": "portable",
171
+ "portable": true,
172
+ "summary": "Move visibly to viewport coordinates and perform a click.",
173
+ "input_schema": {
174
+ "type": "object",
175
+ "required": [
176
+ "x",
177
+ "y"
178
+ ],
179
+ "properties": {
180
+ "x": {
181
+ "type": "number"
182
+ },
183
+ "y": {
184
+ "type": "number"
185
+ },
186
+ "button": {
187
+ "type": "string",
188
+ "enum": [
189
+ "left",
190
+ "middle",
191
+ "right"
192
+ ]
193
+ }
194
+ },
195
+ "additionalProperties": false
196
+ }
197
+ },
198
+ {
199
+ "name": "pointer.double_click",
200
+ "support": "supported",
201
+ "reason": null,
202
+ "capability_class": "portable",
203
+ "portable": true,
204
+ "summary": "Move visibly to viewport coordinates and perform a double click.",
205
+ "input_schema": {
206
+ "type": "object",
207
+ "required": [
208
+ "x",
209
+ "y"
210
+ ],
211
+ "properties": {
212
+ "x": {
213
+ "type": "number"
214
+ },
215
+ "y": {
216
+ "type": "number"
217
+ }
218
+ },
219
+ "additionalProperties": false
220
+ }
221
+ },
222
+ {
223
+ "name": "pointer.drag",
224
+ "support": "supported",
225
+ "reason": null,
226
+ "capability_class": "portable",
227
+ "portable": true,
228
+ "summary": "Move visibly from one viewport point or locator to another while dragging.",
229
+ "input_schema": {
230
+ "type": "object",
231
+ "required": [
232
+ "from",
233
+ "to"
234
+ ],
235
+ "properties": {
236
+ "from": {
237
+ "type": "object",
238
+ "properties": {
239
+ "x": {
240
+ "type": "number"
241
+ },
242
+ "y": {
243
+ "type": "number"
244
+ },
245
+ "selector": {
246
+ "type": "string"
247
+ },
248
+ "text": {
249
+ "type": "string"
250
+ },
251
+ "text_contains": {
252
+ "type": "string"
253
+ },
254
+ "text_equals": {
255
+ "type": "string"
256
+ },
257
+ "locator": {
258
+ "type": "object"
259
+ }
260
+ },
261
+ "additionalProperties": true
262
+ },
263
+ "to": {
264
+ "type": "object",
265
+ "properties": {
266
+ "x": {
267
+ "type": "number"
268
+ },
269
+ "y": {
270
+ "type": "number"
271
+ },
272
+ "selector": {
273
+ "type": "string"
274
+ },
275
+ "text": {
276
+ "type": "string"
277
+ },
278
+ "text_contains": {
279
+ "type": "string"
280
+ },
281
+ "text_equals": {
282
+ "type": "string"
283
+ },
284
+ "locator": {
285
+ "type": "object"
286
+ }
287
+ },
288
+ "additionalProperties": true
289
+ },
290
+ "duration_ms": {
291
+ "type": "integer",
292
+ "minimum": 0
293
+ },
294
+ "steps": {
295
+ "type": "integer",
296
+ "minimum": 1,
297
+ "maximum": 40
298
+ }
299
+ },
300
+ "additionalProperties": false
301
+ }
302
+ },
303
+ {
304
+ "name": "viewport.scroll",
305
+ "support": "supported",
306
+ "reason": null,
307
+ "capability_class": "portable",
308
+ "portable": true,
309
+ "summary": "Scroll the current viewport by a visible delta.",
310
+ "input_schema": {
311
+ "type": "object",
312
+ "properties": {
313
+ "delta_x": {
314
+ "type": "number"
315
+ },
316
+ "delta_y": {
317
+ "type": "number"
318
+ }
319
+ },
320
+ "additionalProperties": false
321
+ }
322
+ },
323
+ {
324
+ "name": "storage.read_file",
325
+ "support": "supported",
326
+ "reason": null,
327
+ "capability_class": "privileged",
328
+ "portable": false,
329
+ "summary": "Read a declared text file from the loaded actions.json storage bundle by path or file id.",
330
+ "input_schema": {
331
+ "type": "object",
332
+ "properties": {
333
+ "path": {
334
+ "type": "string",
335
+ "description": "Canonical storage path, such as scopes/shared/name/sites/example.com/path/SKILL.md."
336
+ },
337
+ "id": {
338
+ "type": "string",
339
+ "description": "Declared file id from actions.site mode=list files."
340
+ },
341
+ "max_bytes": {
342
+ "type": "integer",
343
+ "minimum": 1,
344
+ "maximum": 256000,
345
+ "default": 64000
346
+ }
347
+ },
348
+ "additionalProperties": false
349
+ }
350
+ },
351
+ {
352
+ "name": "text.insert",
353
+ "support": "supported",
354
+ "reason": null,
355
+ "capability_class": "portable",
356
+ "portable": true,
357
+ "summary": "Insert text into the focused editable target or a requested editable locator.",
358
+ "input_schema": {
359
+ "type": "object",
360
+ "required": [
361
+ "text"
362
+ ],
363
+ "properties": {
364
+ "text": {
365
+ "type": "string"
366
+ },
367
+ "target": {
368
+ "type": "object",
369
+ "description": "Optional editable target locator. Omit to use the focused editable element."
370
+ },
371
+ "mode": {
372
+ "type": "string",
373
+ "enum": [
374
+ "append",
375
+ "replace"
376
+ ],
377
+ "default": "append"
378
+ }
379
+ },
380
+ "additionalProperties": false
381
+ }
382
+ },
383
+ {
384
+ "name": "keyboard.press",
385
+ "support": "supported",
386
+ "reason": null,
387
+ "capability_class": "mixed",
388
+ "portable": false,
389
+ "summary": "Dispatch a page-level keyboard key or modifier chord to the focused element.",
390
+ "input_schema": {
391
+ "type": "object",
392
+ "required": [
393
+ "key"
394
+ ],
395
+ "properties": {
396
+ "key": {
397
+ "type": "string",
398
+ "description": "Key name, or a compact chord such as Meta+A, Control+A, or Shift+Enter."
399
+ },
400
+ "modifiers": {
401
+ "type": "array",
402
+ "items": {
403
+ "type": "string",
404
+ "enum": [
405
+ "Alt",
406
+ "Control",
407
+ "Ctrl",
408
+ "Meta",
409
+ "Cmd",
410
+ "Command",
411
+ "Shift",
412
+ "Option"
413
+ ]
414
+ }
415
+ }
416
+ },
417
+ "additionalProperties": false
418
+ }
419
+ },
420
+ {
421
+ "name": "transfer.insert",
422
+ "support": "supported",
423
+ "reason": null,
424
+ "capability_class": "privileged",
425
+ "portable": false,
426
+ "summary": "Render a stored transfer item and insert it into a target editable element without resending the full payload through the model.",
427
+ "input_schema": {
428
+ "type": "object",
429
+ "properties": {
430
+ "label": {
431
+ "type": "string"
432
+ },
433
+ "id": {
434
+ "type": "string"
435
+ },
436
+ "target": {
437
+ "type": "object"
438
+ },
439
+ "item_selector": {
440
+ "type": "object"
441
+ },
442
+ "render": {
443
+ "type": "object"
444
+ },
445
+ "mode": {
446
+ "type": "string",
447
+ "enum": [
448
+ "replace",
449
+ "append"
450
+ ]
451
+ }
452
+ },
453
+ "additionalProperties": false
454
+ }
455
+ },
456
+ {
457
+ "name": "transfer.clear",
458
+ "support": "supported",
459
+ "reason": null,
460
+ "capability_class": "privileged",
461
+ "portable": false,
462
+ "summary": "Clear one transfer item or all transfer items in the current session.",
463
+ "input_schema": {
464
+ "type": "object",
465
+ "properties": {
466
+ "label": {
467
+ "type": "string"
468
+ },
469
+ "id": {
470
+ "type": "string"
471
+ },
472
+ "scope": {
473
+ "type": "string",
474
+ "enum": [
475
+ "session"
476
+ ]
477
+ }
478
+ },
479
+ "additionalProperties": false
480
+ }
481
+ },
482
+ {
483
+ "name": "transfer.read",
484
+ "support": "supported",
485
+ "reason": null,
486
+ "capability_class": "privileged",
487
+ "portable": false,
488
+ "summary": "Read transfer-buffer metadata or payload by label or id.",
489
+ "input_schema": {
490
+ "type": "object",
491
+ "properties": {
492
+ "label": {
493
+ "type": "string"
494
+ },
495
+ "id": {
496
+ "type": "string"
497
+ },
498
+ "include_value": {
499
+ "type": "boolean"
500
+ }
501
+ },
502
+ "additionalProperties": false
503
+ }
504
+ },
505
+ {
506
+ "name": "transfer.write",
507
+ "support": "supported",
508
+ "reason": null,
509
+ "capability_class": "privileged",
510
+ "portable": false,
511
+ "summary": "Store text or structured JSON in the extension-local transfer buffer for cross-tab workflows.",
512
+ "input_schema": {
513
+ "type": "object",
514
+ "required": [
515
+ "label",
516
+ "format",
517
+ "value"
518
+ ],
519
+ "properties": {
520
+ "label": {
521
+ "type": "string"
522
+ },
523
+ "format": {
524
+ "type": "string",
525
+ "enum": [
526
+ "text/plain",
527
+ "application/json",
528
+ "text/uri-list"
529
+ ]
530
+ },
531
+ "value": {},
532
+ "metadata": {
533
+ "type": "object"
534
+ },
535
+ "ttl_seconds": {
536
+ "type": "integer",
537
+ "minimum": 0
538
+ },
539
+ "mode": {
540
+ "type": "string",
541
+ "enum": [
542
+ "replace",
543
+ "append"
544
+ ]
545
+ },
546
+ "redaction": {
547
+ "type": "object"
548
+ }
549
+ },
550
+ "additionalProperties": false
551
+ }
552
+ },
553
+ {
554
+ "name": "clipboard.write",
555
+ "support": "unsupported",
556
+ "reason": "transfer_buffer_preferred",
557
+ "capability_class": "privileged",
558
+ "portable": false,
559
+ "summary": "Write text to the extension-approved clipboard or transfer surface when permission is available.",
560
+ "input_schema": {
561
+ "type": "object",
562
+ "required": [
563
+ "text"
564
+ ],
565
+ "properties": {
566
+ "text": {
567
+ "type": "string"
568
+ }
569
+ },
570
+ "additionalProperties": false
571
+ }
572
+ },
573
+ {
574
+ "name": "clipboard.read",
575
+ "support": "unsupported",
576
+ "reason": "transfer_buffer_preferred",
577
+ "capability_class": "privileged",
578
+ "portable": false,
579
+ "summary": "Read text from the extension-approved clipboard or transfer surface when permission is available.",
580
+ "input_schema": {
581
+ "type": "object",
582
+ "properties": {},
583
+ "additionalProperties": false
584
+ }
585
+ },
586
+ {
587
+ "name": "runtime.session.name",
588
+ "support": "unsupported",
589
+ "reason": "handler_unavailable",
590
+ "capability_class": "privileged",
591
+ "portable": false,
592
+ "summary": "Name the current browser-control session for user-visible transparency.",
593
+ "input_schema": {
594
+ "type": "object",
595
+ "required": [
596
+ "name"
597
+ ],
598
+ "properties": {
599
+ "name": {
600
+ "type": "string"
601
+ }
602
+ },
603
+ "additionalProperties": false
604
+ }
605
+ },
606
+ {
607
+ "name": "runtime.session.finalize_tabs",
608
+ "support": "unsupported",
609
+ "reason": "handler_unavailable",
610
+ "capability_class": "privileged",
611
+ "portable": false,
612
+ "summary": "Finalize browser tabs controlled during an authoring session.",
613
+ "input_schema": {
614
+ "type": "object",
615
+ "properties": {},
616
+ "additionalProperties": false
617
+ }
618
+ },
619
+ {
620
+ "name": "page.info",
621
+ "support": "supported",
622
+ "reason": null,
623
+ "capability_class": "portable",
624
+ "portable": true,
625
+ "summary": "Return basic information about the current page.",
626
+ "input_schema": {
627
+ "type": "object",
628
+ "properties": {},
629
+ "additionalProperties": false
630
+ }
631
+ },
632
+ {
633
+ "name": "dom.observe.visible",
634
+ "support": "supported",
635
+ "reason": null,
636
+ "capability_class": "portable",
637
+ "portable": true,
638
+ "summary": "Observe visible DOM candidates that match a selector or text query.",
639
+ "input_schema": {
640
+ "type": "object",
641
+ "properties": {
642
+ "selector": {
643
+ "type": "string"
644
+ },
645
+ "text_contains": {
646
+ "type": "string"
647
+ }
648
+ },
649
+ "additionalProperties": false
650
+ }
651
+ },
652
+ {
653
+ "name": "dom.snapshot_text",
654
+ "support": "supported",
655
+ "reason": null,
656
+ "capability_class": "portable",
657
+ "portable": true,
658
+ "summary": "Return a text snapshot of visible page content.",
659
+ "input_schema": {
660
+ "type": "object",
661
+ "properties": {
662
+ "selector": {
663
+ "type": "string"
664
+ },
665
+ "max_chars": {
666
+ "type": "integer",
667
+ "minimum": 1
668
+ }
669
+ },
670
+ "additionalProperties": false
671
+ }
672
+ },
673
+ {
674
+ "name": "dom.list_sections",
675
+ "support": "supported",
676
+ "reason": null,
677
+ "capability_class": "portable",
678
+ "portable": true,
679
+ "summary": "List rendered page sections with inferred headings, document offsets, viewport visibility, and optional item counts.",
680
+ "input_schema": {
681
+ "type": "object",
682
+ "properties": {
683
+ "selector": {
684
+ "type": "string"
685
+ },
686
+ "heading_selector": {
687
+ "type": "string"
688
+ },
689
+ "item_selector": {
690
+ "type": "string"
691
+ },
692
+ "text_contains": {
693
+ "type": "string"
694
+ },
695
+ "max_sections": {
696
+ "type": "integer",
697
+ "minimum": 1
698
+ },
699
+ "max_heading_length": {
700
+ "type": "integer",
701
+ "minimum": 12
702
+ }
703
+ },
704
+ "additionalProperties": false
705
+ }
706
+ },
707
+ {
708
+ "name": "locator.element_info",
709
+ "support": "supported",
710
+ "reason": null,
711
+ "capability_class": "portable",
712
+ "portable": true,
713
+ "summary": "Resolve a locator to visible element geometry and a recommended clickable center. When multiple visible elements match, return all candidates and mark the result ambiguous instead of making an arbitrary choice.",
714
+ "input_schema": {
715
+ "type": "object",
716
+ "required": [
717
+ "locator"
718
+ ],
719
+ "properties": {
720
+ "locator": {
721
+ "type": "object"
722
+ }
723
+ },
724
+ "additionalProperties": false
725
+ }
726
+ },
727
+ {
728
+ "name": "locator.text_content",
729
+ "support": "supported",
730
+ "reason": null,
731
+ "capability_class": "portable",
732
+ "portable": true,
733
+ "summary": "Resolve a locator and return its visible text content.",
734
+ "input_schema": {
735
+ "type": "object",
736
+ "required": [
737
+ "locator"
738
+ ],
739
+ "properties": {
740
+ "locator": {
741
+ "type": "object"
742
+ }
743
+ },
744
+ "additionalProperties": false
745
+ }
746
+ },
747
+ {
748
+ "name": "locator.wait_for",
749
+ "support": "supported",
750
+ "reason": null,
751
+ "capability_class": "portable",
752
+ "portable": true,
753
+ "summary": "Wait for a locator to satisfy a visible or attached state.",
754
+ "input_schema": {
755
+ "type": "object",
756
+ "required": [
757
+ "locator"
758
+ ],
759
+ "properties": {
760
+ "locator": {
761
+ "type": "object"
762
+ },
763
+ "state": {
764
+ "type": "string",
765
+ "enum": [
766
+ "attached",
767
+ "visible"
768
+ ]
769
+ },
770
+ "timeout_ms": {
771
+ "type": "integer",
772
+ "minimum": 0
773
+ }
774
+ },
775
+ "additionalProperties": false
776
+ }
777
+ },
778
+ {
779
+ "name": "overlay.open",
780
+ "support": "supported",
781
+ "reason": null,
782
+ "capability_class": "privileged",
783
+ "portable": false,
784
+ "summary": "Render an agent-created HTML document in the authorized page overlay.",
785
+ "input_schema": {
786
+ "type": "object",
787
+ "properties": {
788
+ "html": {
789
+ "type": "string",
790
+ "description": "Inline HTML body or document markup to render inside the overlay. Use either html or template, not both."
791
+ },
792
+ "template": {
793
+ "type": "object",
794
+ "description": "Storage reference for a reusable overlay template. The runtime resolves it from the uploaded actions.json.storage bundle.",
795
+ "required": [
796
+ "scope",
797
+ "path"
798
+ ],
799
+ "properties": {
800
+ "scope": {
801
+ "type": "string",
802
+ "description": "Storage scope, such as public, private, or shared/name."
803
+ },
804
+ "path": {
805
+ "type": "string",
806
+ "description": "Path inside the scope, such as sites/example.com/overlays/report/template.html."
807
+ }
808
+ },
809
+ "additionalProperties": false
810
+ },
811
+ "data": {
812
+ "type": "object",
813
+ "description": "Optional storage reference for JSON data injected into a template as [data-actions-json-overlay-data]. Commonly private data with a public template.",
814
+ "required": [
815
+ "scope",
816
+ "path"
817
+ ],
818
+ "properties": {
819
+ "scope": {
820
+ "type": "string"
821
+ },
822
+ "path": {
823
+ "type": "string"
824
+ }
825
+ },
826
+ "additionalProperties": false
827
+ },
828
+ "title": {
829
+ "type": "string",
830
+ "description": "Overlay title shown in the drag handle."
831
+ },
832
+ "width": {
833
+ "type": "integer",
834
+ "minimum": 420,
835
+ "maximum": 1400
836
+ },
837
+ "height": {
838
+ "type": "integer",
839
+ "minimum": 320,
840
+ "maximum": 1000
841
+ },
842
+ "launchers": {
843
+ "type": "array",
844
+ "description": "Optional visible-page buttons that reopen this overlay from a relevant DOM anchor.",
845
+ "items": {
846
+ "type": "object",
847
+ "properties": {
848
+ "id": {
849
+ "type": "string",
850
+ "description": "Stable launcher id used to replace older buttons for the same overlay affordance."
851
+ },
852
+ "label": {
853
+ "type": "string",
854
+ "description": "Button text shown in the original page DOM."
855
+ },
856
+ "title": {
857
+ "type": "string",
858
+ "description": "Tooltip/title for the launcher button."
859
+ },
860
+ "selector": {
861
+ "type": "string",
862
+ "description": "Single CSS selector hint for the element to place the button near."
863
+ },
864
+ "selectors": {
865
+ "type": "array",
866
+ "items": {
867
+ "type": "string"
868
+ },
869
+ "description": "Ordered CSS selector hints for the element to place the button near."
870
+ },
871
+ "text_contains": {
872
+ "type": "string",
873
+ "description": "Optional visible text filter for selected anchor candidates."
874
+ },
875
+ "text_equals": {
876
+ "type": "string",
877
+ "description": "Optional exact visible text filter for selected anchor candidates."
878
+ },
879
+ "url_contains": {
880
+ "type": "string",
881
+ "description": "Only install this launcher when the current page URL contains this string."
882
+ },
883
+ "url_matches": {
884
+ "type": "string",
885
+ "description": "Only install this launcher when the current page URL matches this regular expression."
886
+ },
887
+ "placement": {
888
+ "type": "string",
889
+ "enum": [
890
+ "beforebegin",
891
+ "afterbegin",
892
+ "beforeend",
893
+ "afterend"
894
+ ],
895
+ "default": "afterend"
896
+ },
897
+ "max_instances": {
898
+ "type": "integer",
899
+ "minimum": 1,
900
+ "maximum": 10,
901
+ "default": 3
902
+ }
903
+ },
904
+ "additionalProperties": false
905
+ }
906
+ }
907
+ },
908
+ "additionalProperties": false
909
+ }
910
+ },
911
+ {
912
+ "name": "overlay.register_launcher",
913
+ "support": "supported",
914
+ "reason": null,
915
+ "capability_class": "privileged",
916
+ "portable": false,
917
+ "summary": "Register visible-page launcher buttons that can reopen an overlay later.",
918
+ "input_schema": {
919
+ "type": "object",
920
+ "properties": {
921
+ "html": {
922
+ "type": "string",
923
+ "description": "Inline HTML body or document markup to render later when a registered launcher is clicked. Use either html or template, not both."
924
+ },
925
+ "template": {
926
+ "type": "object",
927
+ "description": "Storage reference for a reusable overlay template. The runtime resolves it when the launcher opens.",
928
+ "required": [
929
+ "scope",
930
+ "path"
931
+ ],
932
+ "properties": {
933
+ "scope": {
934
+ "type": "string",
935
+ "description": "Storage scope, such as public, private, or shared/name."
936
+ },
937
+ "path": {
938
+ "type": "string",
939
+ "description": "Path inside the scope, such as sites/example.com/overlays/report/template.html."
940
+ }
941
+ },
942
+ "additionalProperties": false
943
+ },
944
+ "data": {
945
+ "type": "object",
946
+ "description": "Optional storage reference for JSON data injected into a template as [data-actions-json-overlay-data].",
947
+ "required": [
948
+ "scope",
949
+ "path"
950
+ ],
951
+ "properties": {
952
+ "scope": {
953
+ "type": "string"
954
+ },
955
+ "path": {
956
+ "type": "string"
957
+ }
958
+ },
959
+ "additionalProperties": false
960
+ },
961
+ "title": {
962
+ "type": "string",
963
+ "description": "Overlay title shown when the launcher opens the overlay."
964
+ },
965
+ "width": {
966
+ "type": "integer",
967
+ "minimum": 420,
968
+ "maximum": 1400
969
+ },
970
+ "height": {
971
+ "type": "integer",
972
+ "minimum": 320,
973
+ "maximum": 1000
974
+ },
975
+ "launchers": {
976
+ "type": "array",
977
+ "description": "Visible-page buttons that reopen this overlay from a relevant DOM anchor.",
978
+ "items": {
979
+ "type": "object",
980
+ "properties": {
981
+ "id": {
982
+ "type": "string",
983
+ "description": "Stable launcher id used to replace older buttons for the same overlay affordance."
984
+ },
985
+ "label": {
986
+ "type": "string",
987
+ "description": "Button text shown in the original page DOM."
988
+ },
989
+ "title": {
990
+ "type": "string",
991
+ "description": "Tooltip/title for the launcher button."
992
+ },
993
+ "selector": {
994
+ "type": "string",
995
+ "description": "Single CSS selector hint for the element to place the button near."
996
+ },
997
+ "selectors": {
998
+ "type": "array",
999
+ "items": {
1000
+ "type": "string"
1001
+ },
1002
+ "description": "Ordered CSS selector hints for the element to place the button near."
1003
+ },
1004
+ "text_contains": {
1005
+ "type": "string",
1006
+ "description": "Optional visible text filter for selected anchor candidates."
1007
+ },
1008
+ "text_equals": {
1009
+ "type": "string",
1010
+ "description": "Optional exact visible text filter for selected anchor candidates."
1011
+ },
1012
+ "url_contains": {
1013
+ "type": "string",
1014
+ "description": "Only install this launcher when the current page URL contains this string."
1015
+ },
1016
+ "url_matches": {
1017
+ "type": "string",
1018
+ "description": "Only install this launcher when the current page URL matches this regular expression."
1019
+ },
1020
+ "placement": {
1021
+ "type": "string",
1022
+ "enum": [
1023
+ "beforebegin",
1024
+ "afterbegin",
1025
+ "beforeend",
1026
+ "afterend"
1027
+ ],
1028
+ "default": "afterend"
1029
+ },
1030
+ "max_instances": {
1031
+ "type": "integer",
1032
+ "minimum": 1,
1033
+ "maximum": 10,
1034
+ "default": 3
1035
+ }
1036
+ },
1037
+ "additionalProperties": false
1038
+ }
1039
+ }
1040
+ },
1041
+ "required": [
1042
+ "launchers"
1043
+ ],
1044
+ "additionalProperties": false
1045
+ }
1046
+ },
1047
+ {
1048
+ "name": "overlay.close",
1049
+ "support": "supported",
1050
+ "reason": null,
1051
+ "capability_class": "privileged",
1052
+ "portable": false,
1053
+ "summary": "Close the current actions.json overlay if one exists.",
1054
+ "input_schema": {
1055
+ "type": "object",
1056
+ "properties": {},
1057
+ "additionalProperties": false
1058
+ }
1059
+ },
1060
+ {
1061
+ "name": "overlay.menu.hide",
1062
+ "summary": "Hide the actions.json menu overlay so it cannot intercept page clicks; pair with overlay.menu.show.",
1063
+ "description": "Hide the actions.json menu overlay so it cannot intercept clicks on page controls underneath. The overlay's open/collapsed state and position are preserved; call overlay.menu.show to restore it. Use the pattern hide -> perform the click sequence -> show to make clicks reliable when the overlay would otherwise sit over the target.",
1064
+ "support": "supported",
1065
+ "input_schema": {
1066
+ "type": "object",
1067
+ "properties": {},
1068
+ "additionalProperties": false
1069
+ },
1070
+ "x_actions": {
1071
+ "direction": "agent_to_html",
1072
+ "handler": "overlay.menu.hide",
1073
+ "scope": "active_surface",
1074
+ "source": {
1075
+ "files": [
1076
+ "src/content.js"
1077
+ ],
1078
+ "symbols": [
1079
+ "overlay.menu.hide"
1080
+ ],
1081
+ "selectors": [
1082
+ "#__actions_json_menu_overlay_host"
1083
+ ],
1084
+ "component": "ActionsJsonMenuOverlay"
1085
+ }
1086
+ }
1087
+ },
1088
+ {
1089
+ "name": "overlay.menu.show",
1090
+ "summary": "Restore a hidden actions.json menu overlay to its prior position and state.",
1091
+ "description": "Restore a previously hidden actions.json menu overlay to exactly its prior position and state. Pairs with overlay.menu.hide.",
1092
+ "support": "supported",
1093
+ "input_schema": {
1094
+ "type": "object",
1095
+ "properties": {},
1096
+ "additionalProperties": false
1097
+ },
1098
+ "x_actions": {
1099
+ "direction": "agent_to_html",
1100
+ "handler": "overlay.menu.show",
1101
+ "scope": "active_surface",
1102
+ "source": {
1103
+ "files": [
1104
+ "src/content.js"
1105
+ ],
1106
+ "symbols": [
1107
+ "overlay.menu.show"
1108
+ ],
1109
+ "selectors": [
1110
+ "#__actions_json_menu_overlay_host"
1111
+ ],
1112
+ "component": "ActionsJsonMenuOverlay"
1113
+ }
1114
+ }
1115
+ },
1116
+ {
1117
+ "name": "overlay.menu.collapse",
1118
+ "summary": "Collapse the actions.json menu overlay to a small handle.",
1119
+ "description": "Collapse the actions.json menu overlay to a small 42x42 handle so it occupies minimal space while remaining visible. Reversible with overlay.menu.expand.",
1120
+ "support": "supported",
1121
+ "input_schema": {
1122
+ "type": "object",
1123
+ "properties": {},
1124
+ "additionalProperties": false
1125
+ },
1126
+ "x_actions": {
1127
+ "direction": "agent_to_html",
1128
+ "handler": "overlay.menu.collapse",
1129
+ "scope": "active_surface",
1130
+ "source": {
1131
+ "files": [
1132
+ "src/content.js"
1133
+ ],
1134
+ "symbols": [
1135
+ "overlay.menu.collapse"
1136
+ ],
1137
+ "selectors": [
1138
+ "#__actions_json_menu_overlay_host"
1139
+ ],
1140
+ "component": "ActionsJsonMenuOverlay"
1141
+ }
1142
+ }
1143
+ },
1144
+ {
1145
+ "name": "overlay.menu.expand",
1146
+ "summary": "Expand the actions.json menu overlay from its collapsed handle.",
1147
+ "description": "Expand the actions.json menu overlay back to its full size from the collapsed handle.",
1148
+ "support": "supported",
1149
+ "input_schema": {
1150
+ "type": "object",
1151
+ "properties": {},
1152
+ "additionalProperties": false
1153
+ },
1154
+ "x_actions": {
1155
+ "direction": "agent_to_html",
1156
+ "handler": "overlay.menu.expand",
1157
+ "scope": "active_surface",
1158
+ "source": {
1159
+ "files": [
1160
+ "src/content.js"
1161
+ ],
1162
+ "symbols": [
1163
+ "overlay.menu.expand"
1164
+ ],
1165
+ "selectors": [
1166
+ "#__actions_json_menu_overlay_host"
1167
+ ],
1168
+ "component": "ActionsJsonMenuOverlay"
1169
+ }
1170
+ }
1171
+ },
1172
+ {
1173
+ "name": "overlay.menu.move",
1174
+ "summary": "Move the actions.json menu overlay to a corner or explicit coordinates.",
1175
+ "description": "Move the actions.json menu overlay out of the way. Pass corner as one of top-left, top-right, bottom-left, bottom-right, or pass explicit numeric left and top viewport coordinates.",
1176
+ "support": "supported",
1177
+ "input_schema": {
1178
+ "type": "object",
1179
+ "properties": {
1180
+ "corner": {
1181
+ "type": "string",
1182
+ "enum": [
1183
+ "top-left",
1184
+ "top-right",
1185
+ "bottom-left",
1186
+ "bottom-right"
1187
+ ]
1188
+ },
1189
+ "left": {
1190
+ "type": "number"
1191
+ },
1192
+ "top": {
1193
+ "type": "number"
1194
+ }
1195
+ },
1196
+ "additionalProperties": false
1197
+ },
1198
+ "x_actions": {
1199
+ "direction": "agent_to_html",
1200
+ "handler": "overlay.menu.move",
1201
+ "scope": "active_surface",
1202
+ "source": {
1203
+ "files": [
1204
+ "src/content.js"
1205
+ ],
1206
+ "symbols": [
1207
+ "overlay.menu.move"
1208
+ ],
1209
+ "selectors": [
1210
+ "#__actions_json_menu_overlay_host"
1211
+ ],
1212
+ "component": "ActionsJsonMenuOverlay"
1213
+ }
1214
+ }
1215
+ },
1216
+ {
1217
+ "name": "task.add",
1218
+ "summary": "Add task(s) to the agent task queue.",
1219
+ "support": "supported",
1220
+ "description": "Add one or more tasks to the in-session task queue. Pass a single task as text, or many as a tasks array of strings. Use this to externalize a multi-step plan so you do not have to hold the whole loop in memory: enqueue every step first, then pull them one at a time with task.next.",
1221
+ "input_schema": {
1222
+ "type": "object",
1223
+ "properties": {
1224
+ "text": {
1225
+ "type": "string",
1226
+ "description": "A single task description."
1227
+ },
1228
+ "tasks": {
1229
+ "type": "array",
1230
+ "items": {
1231
+ "type": "string"
1232
+ },
1233
+ "description": "Multiple task descriptions to enqueue in order."
1234
+ }
1235
+ },
1236
+ "additionalProperties": false
1237
+ },
1238
+ "x_actions": {
1239
+ "direction": "agent_to_html",
1240
+ "handler": "task.add",
1241
+ "scope": "active_surface",
1242
+ "source": {
1243
+ "files": [
1244
+ "src/content.js"
1245
+ ],
1246
+ "symbols": [
1247
+ "task.add"
1248
+ ],
1249
+ "component": "ActionsJsonTaskQueue"
1250
+ }
1251
+ }
1252
+ },
1253
+ {
1254
+ "name": "task.next",
1255
+ "summary": "Get the next task from the queue.",
1256
+ "support": "supported",
1257
+ "description": "Pull the next pending task from the queue and mark it in progress. Returns {done:false, task, remaining} while work remains, or {done:true, remaining:0, ...summary} when the queue is empty (including a summary of every completed and failed task to ground your final report). After finishing a task, call task.complete, then task.next again.",
1258
+ "input_schema": {
1259
+ "type": "object",
1260
+ "properties": {},
1261
+ "additionalProperties": false
1262
+ },
1263
+ "x_actions": {
1264
+ "direction": "agent_to_html",
1265
+ "handler": "task.next",
1266
+ "scope": "active_surface",
1267
+ "source": {
1268
+ "files": [
1269
+ "src/content.js"
1270
+ ],
1271
+ "symbols": [
1272
+ "task.next"
1273
+ ],
1274
+ "component": "ActionsJsonTaskQueue"
1275
+ }
1276
+ }
1277
+ },
1278
+ {
1279
+ "name": "task.complete",
1280
+ "summary": "Mark the current task complete (or failed).",
1281
+ "support": "supported",
1282
+ "description": "Report the in-progress task as finished. Optionally pass id to target a specific task, status \"failed\" if it could not be done, and result with a short outcome note. Then call task.next for the following task.",
1283
+ "input_schema": {
1284
+ "type": "object",
1285
+ "properties": {
1286
+ "id": {
1287
+ "type": "string",
1288
+ "description": "Task id to complete; defaults to the in-progress task."
1289
+ },
1290
+ "status": {
1291
+ "type": "string",
1292
+ "enum": [
1293
+ "done",
1294
+ "failed"
1295
+ ],
1296
+ "description": "Outcome; defaults to done."
1297
+ },
1298
+ "result": {
1299
+ "type": "string",
1300
+ "description": "Short note on the outcome."
1301
+ }
1302
+ },
1303
+ "additionalProperties": false
1304
+ },
1305
+ "x_actions": {
1306
+ "direction": "agent_to_html",
1307
+ "handler": "task.complete",
1308
+ "scope": "active_surface",
1309
+ "source": {
1310
+ "files": [
1311
+ "src/content.js"
1312
+ ],
1313
+ "symbols": [
1314
+ "task.complete"
1315
+ ],
1316
+ "component": "ActionsJsonTaskQueue"
1317
+ }
1318
+ }
1319
+ },
1320
+ {
1321
+ "name": "task.list",
1322
+ "summary": "List all tasks and their status.",
1323
+ "support": "supported",
1324
+ "description": "Return the full task queue with each task id, text, status, and result, plus counts of completed/failed/pending. Use to review progress without changing state.",
1325
+ "input_schema": {
1326
+ "type": "object",
1327
+ "properties": {},
1328
+ "additionalProperties": false
1329
+ },
1330
+ "x_actions": {
1331
+ "direction": "agent_to_html",
1332
+ "handler": "task.list",
1333
+ "scope": "active_surface",
1334
+ "source": {
1335
+ "files": [
1336
+ "src/content.js"
1337
+ ],
1338
+ "symbols": [
1339
+ "task.list"
1340
+ ],
1341
+ "component": "ActionsJsonTaskQueue"
1342
+ }
1343
+ }
1344
+ },
1345
+ {
1346
+ "name": "task.clear",
1347
+ "summary": "Clear the task queue.",
1348
+ "support": "supported",
1349
+ "description": "Remove all tasks from the queue and reset it. Use before seeding a fresh plan.",
1350
+ "input_schema": {
1351
+ "type": "object",
1352
+ "properties": {},
1353
+ "additionalProperties": false
1354
+ },
1355
+ "x_actions": {
1356
+ "direction": "agent_to_html",
1357
+ "handler": "task.clear",
1358
+ "scope": "active_surface",
1359
+ "source": {
1360
+ "files": [
1361
+ "src/content.js"
1362
+ ],
1363
+ "symbols": [
1364
+ "task.clear"
1365
+ ],
1366
+ "component": "ActionsJsonTaskQueue"
1367
+ }
1368
+ }
1369
+ }
1370
+ ]
1371
+ },
1372
+ "prompt": {
1373
+ "title": "Browser overlay runtime",
1374
+ "instructions": "Use overlay.open to present an agent-created HTML document as a temporary draggable, resizable, minimizable overlay on the current page. For reusable overlays, prefer a storage-backed template reference plus a JSON data reference so shared template code can stay separate from private user data. The template receives the parsed data through a script tag marked data-actions-json-overlay-data. Prefer supplying launchers that integrate visible reopen buttons into the relevant original DOM context. Launchers are conditional registrations: they may be declared before their target DOM is visible, then installed when URL and DOM predicates match. Do not use this action for credential capture, deceptive UI, or persistent page modification.",
1375
+ "source": {
1376
+ "files": [
1377
+ "src/content.js"
1378
+ ],
1379
+ "symbols": [
1380
+ "actionsJsonOverlay.openHtml"
1381
+ ],
1382
+ "selectors": [
1383
+ "#__actions_json_overlay_runtime_host"
1384
+ ]
1385
+ }
1386
+ },
1387
+ "tools": [
1388
+ {
1389
+ "name": "overlay.open",
1390
+ "description": "Render an inline HTML document or a storage-backed template/data overlay in a draggable, resizable, and minimizable popup on the authorized browser tab. Use template plus data when the visual template should be reusable and the user data should remain in a separate private JSON file. Registered launchers can coexist and reattach independently when SPA navigation brings their matching context into view.",
1391
+ "input_schema": {
1392
+ "type": "object",
1393
+ "properties": {
1394
+ "html": {
1395
+ "type": "string",
1396
+ "description": "Inline HTML body or document markup to render inside the overlay. Use either html or template, not both."
1397
+ },
1398
+ "template": {
1399
+ "type": "object",
1400
+ "description": "Storage reference for a reusable overlay template. The runtime resolves it from the uploaded actions.json.storage bundle.",
1401
+ "required": [
1402
+ "scope",
1403
+ "path"
1404
+ ],
1405
+ "properties": {
1406
+ "scope": {
1407
+ "type": "string",
1408
+ "description": "Storage scope, such as public, private, or shared/name."
1409
+ },
1410
+ "path": {
1411
+ "type": "string",
1412
+ "description": "Path inside the scope, such as sites/example.com/overlays/report/template.html."
1413
+ }
1414
+ },
1415
+ "additionalProperties": false
1416
+ },
1417
+ "data": {
1418
+ "type": "object",
1419
+ "description": "Optional storage reference for JSON data injected into a template as [data-actions-json-overlay-data]. Commonly private data with a public template.",
1420
+ "required": [
1421
+ "scope",
1422
+ "path"
1423
+ ],
1424
+ "properties": {
1425
+ "scope": {
1426
+ "type": "string"
1427
+ },
1428
+ "path": {
1429
+ "type": "string"
1430
+ }
1431
+ },
1432
+ "additionalProperties": false
1433
+ },
1434
+ "title": {
1435
+ "type": "string",
1436
+ "description": "Overlay title shown in the drag handle."
1437
+ },
1438
+ "width": {
1439
+ "type": "integer",
1440
+ "minimum": 420,
1441
+ "maximum": 1400
1442
+ },
1443
+ "height": {
1444
+ "type": "integer",
1445
+ "minimum": 320,
1446
+ "maximum": 1000
1447
+ },
1448
+ "launchers": {
1449
+ "type": "array",
1450
+ "description": "Optional visible-page buttons that reopen this overlay from a relevant DOM anchor.",
1451
+ "items": {
1452
+ "type": "object",
1453
+ "properties": {
1454
+ "id": {
1455
+ "type": "string",
1456
+ "description": "Stable launcher id used to replace older buttons for the same overlay affordance."
1457
+ },
1458
+ "label": {
1459
+ "type": "string",
1460
+ "description": "Button text shown in the original page DOM."
1461
+ },
1462
+ "title": {
1463
+ "type": "string",
1464
+ "description": "Tooltip/title for the launcher button."
1465
+ },
1466
+ "selector": {
1467
+ "type": "string",
1468
+ "description": "Single CSS selector hint for the element to place the button near."
1469
+ },
1470
+ "selectors": {
1471
+ "type": "array",
1472
+ "items": {
1473
+ "type": "string"
1474
+ },
1475
+ "description": "Ordered CSS selector hints for the element to place the button near."
1476
+ },
1477
+ "text_contains": {
1478
+ "type": "string",
1479
+ "description": "Optional visible text filter for selected anchor candidates, such as ACT-5 or Continue Watching."
1480
+ },
1481
+ "text_equals": {
1482
+ "type": "string",
1483
+ "description": "Optional exact visible text filter for selected anchor candidates."
1484
+ },
1485
+ "url_contains": {
1486
+ "type": "string",
1487
+ "description": "Only install this launcher when the current page URL contains this string."
1488
+ },
1489
+ "url_matches": {
1490
+ "type": "string",
1491
+ "description": "Only install this launcher when the current page URL matches this regular expression."
1492
+ },
1493
+ "placement": {
1494
+ "type": "string",
1495
+ "enum": [
1496
+ "beforebegin",
1497
+ "afterbegin",
1498
+ "beforeend",
1499
+ "afterend"
1500
+ ],
1501
+ "default": "afterend"
1502
+ },
1503
+ "max_instances": {
1504
+ "type": "integer",
1505
+ "minimum": 1,
1506
+ "maximum": 10,
1507
+ "default": 3
1508
+ }
1509
+ },
1510
+ "additionalProperties": false
1511
+ }
1512
+ }
1513
+ },
1514
+ "additionalProperties": false
1515
+ },
1516
+ "x_actions": {
1517
+ "direction": "agent_to_html",
1518
+ "handler": "actionsJsonOverlay.openHtml",
1519
+ "scope": "active_surface",
1520
+ "source": {
1521
+ "files": [
1522
+ "src/content.js"
1523
+ ],
1524
+ "symbols": [
1525
+ "actionsJsonOverlay.openHtml"
1526
+ ],
1527
+ "selectors": [
1528
+ "#__actions_json_overlay_runtime_host"
1529
+ ],
1530
+ "component": "ActionsJsonOverlay"
1531
+ },
1532
+ "result_schema": {
1533
+ "type": "object",
1534
+ "properties": {
1535
+ "ok": {
1536
+ "type": "boolean"
1537
+ },
1538
+ "overlay_id": {
1539
+ "type": "string"
1540
+ },
1541
+ "launchers": {
1542
+ "type": "array",
1543
+ "items": {
1544
+ "type": "object",
1545
+ "properties": {
1546
+ "launcher_id": {
1547
+ "type": "string"
1548
+ },
1549
+ "placement": {
1550
+ "type": "string"
1551
+ },
1552
+ "target_text": {
1553
+ "type": "string"
1554
+ }
1555
+ }
1556
+ }
1557
+ }
1558
+ },
1559
+ "required": [
1560
+ "ok"
1561
+ ]
1562
+ }
1563
+ }
1564
+ },
1565
+ {
1566
+ "name": "overlay.register_launcher",
1567
+ "description": "Register visible-page launcher buttons that can reopen an overlay later without opening the overlay immediately. Use this when the page should gain a contextual affordance, such as a Categories button beside a carousel heading, while leaving the overlay closed until the user clicks it.",
1568
+ "input_schema": {
1569
+ "type": "object",
1570
+ "properties": {
1571
+ "html": {
1572
+ "type": "string",
1573
+ "description": "Inline HTML body or document markup to render later when a registered launcher is clicked. Use either html or template, not both."
1574
+ },
1575
+ "template": {
1576
+ "type": "object",
1577
+ "description": "Storage reference for a reusable overlay template. The runtime resolves it when the launcher opens.",
1578
+ "required": [
1579
+ "scope",
1580
+ "path"
1581
+ ],
1582
+ "properties": {
1583
+ "scope": {
1584
+ "type": "string",
1585
+ "description": "Storage scope, such as public, private, or shared/name."
1586
+ },
1587
+ "path": {
1588
+ "type": "string",
1589
+ "description": "Path inside the scope, such as sites/example.com/overlays/report/template.html."
1590
+ }
1591
+ },
1592
+ "additionalProperties": false
1593
+ },
1594
+ "data": {
1595
+ "type": "object",
1596
+ "description": "Optional storage reference for JSON data injected into a template as [data-actions-json-overlay-data].",
1597
+ "required": [
1598
+ "scope",
1599
+ "path"
1600
+ ],
1601
+ "properties": {
1602
+ "scope": {
1603
+ "type": "string"
1604
+ },
1605
+ "path": {
1606
+ "type": "string"
1607
+ }
1608
+ },
1609
+ "additionalProperties": false
1610
+ },
1611
+ "title": {
1612
+ "type": "string",
1613
+ "description": "Overlay title shown when the launcher opens the overlay."
1614
+ },
1615
+ "width": {
1616
+ "type": "integer",
1617
+ "minimum": 420,
1618
+ "maximum": 1400
1619
+ },
1620
+ "height": {
1621
+ "type": "integer",
1622
+ "minimum": 320,
1623
+ "maximum": 1000
1624
+ },
1625
+ "launchers": {
1626
+ "type": "array",
1627
+ "description": "Visible-page buttons that reopen this overlay from a relevant DOM anchor.",
1628
+ "items": {
1629
+ "type": "object",
1630
+ "properties": {
1631
+ "id": {
1632
+ "type": "string",
1633
+ "description": "Stable launcher id used to replace older buttons for the same overlay affordance."
1634
+ },
1635
+ "label": {
1636
+ "type": "string",
1637
+ "description": "Button text shown in the original page DOM."
1638
+ },
1639
+ "title": {
1640
+ "type": "string",
1641
+ "description": "Tooltip/title for the launcher button."
1642
+ },
1643
+ "selector": {
1644
+ "type": "string",
1645
+ "description": "Single CSS selector hint for the element to place the button near."
1646
+ },
1647
+ "selectors": {
1648
+ "type": "array",
1649
+ "items": {
1650
+ "type": "string"
1651
+ },
1652
+ "description": "Ordered CSS selector hints for the element to place the button near."
1653
+ },
1654
+ "text_contains": {
1655
+ "type": "string",
1656
+ "description": "Optional visible text filter for selected anchor candidates, such as ACT-5 or Continue Watching."
1657
+ },
1658
+ "text_equals": {
1659
+ "type": "string",
1660
+ "description": "Optional exact visible text filter for selected anchor candidates."
1661
+ },
1662
+ "url_contains": {
1663
+ "type": "string",
1664
+ "description": "Only install this launcher when the current page URL contains this string."
1665
+ },
1666
+ "url_matches": {
1667
+ "type": "string",
1668
+ "description": "Only install this launcher when the current page URL matches this regular expression."
1669
+ },
1670
+ "placement": {
1671
+ "type": "string",
1672
+ "enum": [
1673
+ "beforebegin",
1674
+ "afterbegin",
1675
+ "beforeend",
1676
+ "afterend"
1677
+ ],
1678
+ "default": "afterend"
1679
+ },
1680
+ "max_instances": {
1681
+ "type": "integer",
1682
+ "minimum": 1,
1683
+ "maximum": 10,
1684
+ "default": 3
1685
+ }
1686
+ },
1687
+ "additionalProperties": false
1688
+ }
1689
+ }
1690
+ },
1691
+ "required": [
1692
+ "launchers"
1693
+ ],
1694
+ "additionalProperties": false
1695
+ },
1696
+ "x_actions": {
1697
+ "direction": "agent_to_html",
1698
+ "handler": "actionsJsonOverlay.registerLauncher",
1699
+ "scope": "active_surface",
1700
+ "source": {
1701
+ "files": [
1702
+ "src/content.js"
1703
+ ],
1704
+ "symbols": [
1705
+ "actionsJsonOverlay.registerLauncher"
1706
+ ],
1707
+ "selectors": [
1708
+ "[data-actions-json-overlay-launcher]"
1709
+ ],
1710
+ "component": "ActionsJsonOverlay"
1711
+ },
1712
+ "result_schema": {
1713
+ "type": "object",
1714
+ "properties": {
1715
+ "ok": {
1716
+ "type": "boolean"
1717
+ },
1718
+ "overlay_id": {
1719
+ "type": "string"
1720
+ },
1721
+ "launchers": {
1722
+ "type": "array",
1723
+ "items": {
1724
+ "type": "object",
1725
+ "properties": {
1726
+ "launcher_id": {
1727
+ "type": "string"
1728
+ },
1729
+ "placement": {
1730
+ "type": "string"
1731
+ },
1732
+ "target_text": {
1733
+ "type": "string"
1734
+ }
1735
+ }
1736
+ }
1737
+ }
1738
+ },
1739
+ "required": [
1740
+ "ok"
1741
+ ]
1742
+ }
1743
+ }
1744
+ },
1745
+ {
1746
+ "name": "overlay.close",
1747
+ "description": "Close the current actions.json overlay if one exists.",
1748
+ "input_schema": {
1749
+ "type": "object",
1750
+ "properties": {},
1751
+ "additionalProperties": false
1752
+ },
1753
+ "x_actions": {
1754
+ "direction": "agent_to_html",
1755
+ "handler": "actionsJsonOverlay.close",
1756
+ "scope": "active_surface",
1757
+ "source": {
1758
+ "files": [
1759
+ "src/content.js"
1760
+ ],
1761
+ "symbols": [
1762
+ "actionsJsonOverlay.close"
1763
+ ],
1764
+ "selectors": [
1765
+ "#__actions_json_overlay_runtime_host"
1766
+ ],
1767
+ "component": "ActionsJsonOverlay"
1768
+ }
1769
+ }
1770
+ },
1771
+ {
1772
+ "name": "overlay.menu.hide",
1773
+ "description": "Hide the actions.json menu overlay so it cannot intercept clicks on page controls underneath. The overlay's open/collapsed state and position are preserved; call overlay.menu.show to restore it. Use the pattern hide -> perform the click sequence -> show to make clicks reliable when the overlay would otherwise sit over the target.",
1774
+ "input_schema": {
1775
+ "type": "object",
1776
+ "properties": {},
1777
+ "additionalProperties": false
1778
+ },
1779
+ "x_actions": {
1780
+ "direction": "agent_to_html",
1781
+ "handler": "overlay.menu.hide",
1782
+ "scope": "active_surface",
1783
+ "source": {
1784
+ "files": [
1785
+ "src/content.js"
1786
+ ],
1787
+ "symbols": [
1788
+ "overlay.menu.hide"
1789
+ ],
1790
+ "selectors": [
1791
+ "#__actions_json_menu_overlay_host"
1792
+ ],
1793
+ "component": "ActionsJsonMenuOverlay"
1794
+ }
1795
+ }
1796
+ },
1797
+ {
1798
+ "name": "overlay.menu.show",
1799
+ "description": "Restore a previously hidden actions.json menu overlay to exactly its prior position and state. Pairs with overlay.menu.hide.",
1800
+ "input_schema": {
1801
+ "type": "object",
1802
+ "properties": {},
1803
+ "additionalProperties": false
1804
+ },
1805
+ "x_actions": {
1806
+ "direction": "agent_to_html",
1807
+ "handler": "overlay.menu.show",
1808
+ "scope": "active_surface",
1809
+ "source": {
1810
+ "files": [
1811
+ "src/content.js"
1812
+ ],
1813
+ "symbols": [
1814
+ "overlay.menu.show"
1815
+ ],
1816
+ "selectors": [
1817
+ "#__actions_json_menu_overlay_host"
1818
+ ],
1819
+ "component": "ActionsJsonMenuOverlay"
1820
+ }
1821
+ }
1822
+ },
1823
+ {
1824
+ "name": "overlay.menu.collapse",
1825
+ "description": "Collapse the actions.json menu overlay to a small 42x42 handle so it occupies minimal space while remaining visible. Reversible with overlay.menu.expand.",
1826
+ "input_schema": {
1827
+ "type": "object",
1828
+ "properties": {},
1829
+ "additionalProperties": false
1830
+ },
1831
+ "x_actions": {
1832
+ "direction": "agent_to_html",
1833
+ "handler": "overlay.menu.collapse",
1834
+ "scope": "active_surface",
1835
+ "source": {
1836
+ "files": [
1837
+ "src/content.js"
1838
+ ],
1839
+ "symbols": [
1840
+ "overlay.menu.collapse"
1841
+ ],
1842
+ "selectors": [
1843
+ "#__actions_json_menu_overlay_host"
1844
+ ],
1845
+ "component": "ActionsJsonMenuOverlay"
1846
+ }
1847
+ }
1848
+ },
1849
+ {
1850
+ "name": "overlay.menu.expand",
1851
+ "description": "Expand the actions.json menu overlay back to its full size from the collapsed handle.",
1852
+ "input_schema": {
1853
+ "type": "object",
1854
+ "properties": {},
1855
+ "additionalProperties": false
1856
+ },
1857
+ "x_actions": {
1858
+ "direction": "agent_to_html",
1859
+ "handler": "overlay.menu.expand",
1860
+ "scope": "active_surface",
1861
+ "source": {
1862
+ "files": [
1863
+ "src/content.js"
1864
+ ],
1865
+ "symbols": [
1866
+ "overlay.menu.expand"
1867
+ ],
1868
+ "selectors": [
1869
+ "#__actions_json_menu_overlay_host"
1870
+ ],
1871
+ "component": "ActionsJsonMenuOverlay"
1872
+ }
1873
+ }
1874
+ },
1875
+ {
1876
+ "name": "overlay.menu.move",
1877
+ "description": "Move the actions.json menu overlay out of the way. Pass corner as one of top-left, top-right, bottom-left, bottom-right, or pass explicit numeric left and top viewport coordinates.",
1878
+ "input_schema": {
1879
+ "type": "object",
1880
+ "properties": {
1881
+ "corner": {
1882
+ "type": "string",
1883
+ "enum": [
1884
+ "top-left",
1885
+ "top-right",
1886
+ "bottom-left",
1887
+ "bottom-right"
1888
+ ]
1889
+ },
1890
+ "left": {
1891
+ "type": "number"
1892
+ },
1893
+ "top": {
1894
+ "type": "number"
1895
+ }
1896
+ },
1897
+ "additionalProperties": false
1898
+ },
1899
+ "x_actions": {
1900
+ "direction": "agent_to_html",
1901
+ "handler": "overlay.menu.move",
1902
+ "scope": "active_surface",
1903
+ "source": {
1904
+ "files": [
1905
+ "src/content.js"
1906
+ ],
1907
+ "symbols": [
1908
+ "overlay.menu.move"
1909
+ ],
1910
+ "selectors": [
1911
+ "#__actions_json_menu_overlay_host"
1912
+ ],
1913
+ "component": "ActionsJsonMenuOverlay"
1914
+ }
1915
+ }
1916
+ },
1917
+ {
1918
+ "name": "runtime.configure_pacing",
1919
+ "description": "Configure the minimum start-to-start interval between human-observable interaction actions for this runtime session. Defaults to 500ms so fast request bursts are accepted but clicks, pointer moves, typing, and scrolls execute at a human-paced rhythm. DOM reads and storage/overlay operations are not delayed.",
1920
+ "input_schema": {
1921
+ "type": "object",
1922
+ "properties": {
1923
+ "min_interval_ms": {
1924
+ "type": "integer",
1925
+ "minimum": 0,
1926
+ "maximum": 10000,
1927
+ "default": 500
1928
+ }
1929
+ },
1930
+ "additionalProperties": false
1931
+ }
1932
+ },
1933
+ {
1934
+ "name": "runtime.session.log",
1935
+ "description": "Return the extension-local hosted-agent session log, including recent transcript turns, tool calls, tool failures, Realtime errors, screenshots, and session lifecycle events. Use this for debugging a session after the user reports transcript or tool behavior problems.",
1936
+ "input_schema": {
1937
+ "type": "object",
1938
+ "properties": {
1939
+ "limit": {
1940
+ "type": "integer",
1941
+ "minimum": 1,
1942
+ "maximum": 2000,
1943
+ "default": 2000
1944
+ }
1945
+ },
1946
+ "additionalProperties": false
1947
+ }
1948
+ },
1949
+ {
1950
+ "name": "runtime.agent.start",
1951
+ "description": "Start the extension-owned hosted GPT Realtime session. Defaults to text-only mode, so it does not request microphone access or open a local microphone stream.",
1952
+ "input_schema": {
1953
+ "type": "object",
1954
+ "properties": {
1955
+ "text_only": {
1956
+ "type": "boolean",
1957
+ "default": true,
1958
+ "description": "When true or omitted, start without microphone capture. Set false only when intentionally starting the voice path."
1959
+ }
1960
+ },
1961
+ "additionalProperties": false
1962
+ },
1963
+ "x_actions": {
1964
+ "direction": "agent_to_html",
1965
+ "handler": "actionsJsonOverlay.runtimeAgentStart",
1966
+ "scope": "active_surface",
1967
+ "source": {
1968
+ "files": [
1969
+ "src/content.js",
1970
+ "src/background.js",
1971
+ "src/offscreen-agent.js",
1972
+ "src/agent/realtime-session-manager.mjs",
1973
+ "src/agent/realtime-webrtc-transport.mjs"
1974
+ ],
1975
+ "component": "HostedRealtimeSession"
1976
+ }
1977
+ }
1978
+ },
1979
+ {
1980
+ "name": "runtime.agent.stop",
1981
+ "description": "Stop the extension-owned hosted GPT Realtime session and return the current stopped session state.",
1982
+ "input_schema": {
1983
+ "type": "object",
1984
+ "properties": {},
1985
+ "additionalProperties": false
1986
+ },
1987
+ "x_actions": {
1988
+ "direction": "agent_to_html",
1989
+ "handler": "actionsJsonOverlay.runtimeAgentStop",
1990
+ "scope": "active_surface",
1991
+ "source": {
1992
+ "files": [
1993
+ "src/content.js",
1994
+ "src/background.js",
1995
+ "src/offscreen-agent.js",
1996
+ "src/agent/realtime-session-manager.mjs"
1997
+ ],
1998
+ "component": "HostedRealtimeSession"
1999
+ }
2000
+ }
2001
+ },
2002
+ {
2003
+ "name": "runtime.agent.user_message",
2004
+ "description": "Inject a developer test prompt into the active hosted GPT Realtime session. The model response is requested as text only and shown in the browser as a toast instead of being spoken.",
2005
+ "input_schema": {
2006
+ "type": "object",
2007
+ "properties": {
2008
+ "text": {
2009
+ "type": "string",
2010
+ "description": "User-style instruction to send into the active hosted Realtime session for testing."
2011
+ }
2012
+ },
2013
+ "required": [
2014
+ "text"
2015
+ ],
2016
+ "additionalProperties": false
2017
+ },
2018
+ "x_actions": {
2019
+ "direction": "agent_to_html",
2020
+ "handler": "actionsJsonOverlay.runtimeAgentUserMessage",
2021
+ "scope": "active_surface",
2022
+ "source": {
2023
+ "files": [
2024
+ "src/content.js",
2025
+ "src/background.js",
2026
+ "src/offscreen-agent.js",
2027
+ "src/agent/realtime-session-manager.mjs"
2028
+ ],
2029
+ "component": "HostedRealtimeSession"
2030
+ }
2031
+ }
2032
+ },
2033
+ {
2034
+ "name": "browser.claimed_tabs.list",
2035
+ "description": "List tabs already claimed by the actions.json Chrome extension, including their tab ids, URLs, titles, runtime keys, authorization ids, and active state. Use this before switching context among user-authorized tabs.",
2036
+ "input_schema": {
2037
+ "type": "object",
2038
+ "properties": {},
2039
+ "additionalProperties": false
2040
+ }
2041
+ },
2042
+ {
2043
+ "name": "browser.claimed_tabs.activate",
2044
+ "description": "Focus an already-claimed tab and reconnect that tab's actions.json runtime to the bridge. Call browser.claimed_tabs.list first, then pass the selected tab_id. After a successful scheduled activation, refresh the runtime list before issuing page-specific actions.",
2045
+ "input_schema": {
2046
+ "type": "object",
2047
+ "required": [
2048
+ "tab_id"
2049
+ ],
2050
+ "properties": {
2051
+ "tab_id": {
2052
+ "type": "integer",
2053
+ "description": "Chrome tab id returned by browser.claimed_tabs.list."
2054
+ }
2055
+ },
2056
+ "additionalProperties": false
2057
+ }
2058
+ },
2059
+ {
2060
+ "name": "browser.screenshot",
2061
+ "description": "Capture the currently visible browser tab as an image so the agent can inspect the page state after authorization.",
2062
+ "input_schema": {
2063
+ "type": "object",
2064
+ "properties": {
2065
+ "format": {
2066
+ "type": "string",
2067
+ "enum": [
2068
+ "png",
2069
+ "jpeg"
2070
+ ],
2071
+ "default": "png"
2072
+ },
2073
+ "quality": {
2074
+ "type": "integer",
2075
+ "minimum": 1,
2076
+ "maximum": 100,
2077
+ "description": "JPEG quality. Ignored for PNG captures."
2078
+ },
2079
+ "delay_ms": {
2080
+ "type": "integer",
2081
+ "minimum": 0,
2082
+ "maximum": 30000,
2083
+ "description": "Wait this many milliseconds in the browser before capturing, useful for pages that are still painting after navigation."
2084
+ },
2085
+ "capture_timeout_ms": {
2086
+ "type": "integer",
2087
+ "minimum": 1,
2088
+ "maximum": 60000,
2089
+ "description": "Maximum time to wait for the extension background capture request to answer before returning a structured screenshot error."
2090
+ },
2091
+ "max_kb": {
2092
+ "type": "integer",
2093
+ "minimum": 1,
2094
+ "maximum": 20480,
2095
+ "description": "Deprecated alias for max_kilobytes."
2096
+ },
2097
+ "max_kilobytes": {
2098
+ "type": "integer",
2099
+ "minimum": 1,
2100
+ "maximum": 20480,
2101
+ "description": "Target maximum encoded image size in kilobytes. The browser may downscale and switch to JPEG to fit this budget before sending the screenshot."
2102
+ },
2103
+ "max_width": {
2104
+ "type": "integer",
2105
+ "minimum": 1,
2106
+ "maximum": 4096,
2107
+ "description": "Optional maximum encoded image width after browser-side resizing."
2108
+ },
2109
+ "max_height": {
2110
+ "type": "integer",
2111
+ "minimum": 1,
2112
+ "maximum": 4096,
2113
+ "description": "Optional maximum encoded image height after browser-side resizing."
2114
+ }
2115
+ },
2116
+ "additionalProperties": false
2117
+ },
2118
+ "x_actions": {
2119
+ "direction": "agent_to_html",
2120
+ "handler": "actionsJsonOverlay.screenshot",
2121
+ "scope": "active_surface",
2122
+ "source": {
2123
+ "files": [
2124
+ "src/content.js",
2125
+ "src/background.js"
2126
+ ],
2127
+ "symbols": [
2128
+ "actionsJsonOverlay.screenshot",
2129
+ "chrome.tabs.captureVisibleTab"
2130
+ ],
2131
+ "component": "ActionsJsonOverlay"
2132
+ },
2133
+ "result_schema": {
2134
+ "type": "object",
2135
+ "properties": {
2136
+ "ok": {
2137
+ "type": "boolean"
2138
+ },
2139
+ "data_url": {
2140
+ "type": "string"
2141
+ },
2142
+ "mime_type": {
2143
+ "type": "string"
2144
+ },
2145
+ "image_bytes": {
2146
+ "type": "integer"
2147
+ },
2148
+ "encoded": {
2149
+ "type": "object"
2150
+ },
2151
+ "viewport": {
2152
+ "type": "object"
2153
+ },
2154
+ "url": {
2155
+ "type": "string"
2156
+ },
2157
+ "captured_at": {
2158
+ "type": "string"
2159
+ }
2160
+ },
2161
+ "required": [
2162
+ "ok",
2163
+ "data_url",
2164
+ "mime_type",
2165
+ "viewport"
2166
+ ]
2167
+ }
2168
+ }
2169
+ },
2170
+ {
2171
+ "name": "storage.import_bundle",
2172
+ "description": "Import an agent-provided actions.json.storage bundle into extension local storage for offline local lookup.",
2173
+ "input_schema": {
2174
+ "type": "object",
2175
+ "properties": {
2176
+ "bundle": {
2177
+ "type": "object",
2178
+ "description": "A versioned actions.json.storage.bundle object built by the agent-side bridge."
2179
+ }
2180
+ },
2181
+ "required": [
2182
+ "bundle"
2183
+ ],
2184
+ "additionalProperties": false
2185
+ },
2186
+ "x_actions": {
2187
+ "direction": "agent_to_html",
2188
+ "handler": "actionsJsonOverlay.importStorageBundle",
2189
+ "scope": "persistent",
2190
+ "source": {
2191
+ "files": [
2192
+ "src/content.js"
2193
+ ],
2194
+ "symbols": [
2195
+ "actionsJsonOverlay.importStorageBundle",
2196
+ "chrome.storage.local.set"
2197
+ ],
2198
+ "component": "ActionsJsonOverlay"
2199
+ },
2200
+ "result_schema": {
2201
+ "type": "object",
2202
+ "properties": {
2203
+ "ok": {
2204
+ "type": "boolean"
2205
+ },
2206
+ "entry_count": {
2207
+ "type": "integer"
2208
+ },
2209
+ "synced_at_ms": {
2210
+ "type": [
2211
+ "integer",
2212
+ "null"
2213
+ ]
2214
+ },
2215
+ "imported_at": {
2216
+ "type": "string"
2217
+ }
2218
+ },
2219
+ "required": [
2220
+ "ok",
2221
+ "entry_count"
2222
+ ]
2223
+ }
2224
+ }
2225
+ },
2226
+ {
2227
+ "name": "browser.extract_elements",
2228
+ "description": "Extract structured data from DOM elements using schema-declared scope, item selector, and field extraction rules. Page-specific meanings belong in actions.json, not in the runtime.",
2229
+ "input_schema": {
2230
+ "type": "object",
2231
+ "properties": {
2232
+ "scope": {
2233
+ "type": "object",
2234
+ "description": "How to find the page region that bounds extraction.",
2235
+ "properties": {
2236
+ "selector": {
2237
+ "type": "string",
2238
+ "description": "Single CSS selector hint for locating the scope element."
2239
+ },
2240
+ "selectors": {
2241
+ "type": "array",
2242
+ "items": {
2243
+ "type": "string"
2244
+ },
2245
+ "description": "Ordered CSS selector hints for locating the scope element."
2246
+ },
2247
+ "text_equals": {
2248
+ "type": "string",
2249
+ "description": "Optional exact visible text filter for the scope element."
2250
+ },
2251
+ "text_contains": {
2252
+ "type": "string",
2253
+ "description": "Optional visible text substring filter for the scope element."
2254
+ },
2255
+ "root_selector": {
2256
+ "type": "string",
2257
+ "description": "Optional ancestor selector to use as the extraction root."
2258
+ },
2259
+ "root_strategy": {
2260
+ "type": "string",
2261
+ "enum": [
2262
+ "scope",
2263
+ "parent",
2264
+ "nearest_ancestor_containing_items"
2265
+ ],
2266
+ "default": "scope",
2267
+ "description": "Generic strategy for deriving the extraction root from the scope element."
2268
+ },
2269
+ "max_ancestor_depth": {
2270
+ "type": "integer",
2271
+ "minimum": 0,
2272
+ "maximum": 20,
2273
+ "default": 4
2274
+ }
2275
+ },
2276
+ "additionalProperties": false
2277
+ },
2278
+ "item_selector": {
2279
+ "type": "string",
2280
+ "description": "CSS selector for each item to extract within the resolved root."
2281
+ },
2282
+ "fields": {
2283
+ "type": "array",
2284
+ "description": "Field rules applied to each matched item.",
2285
+ "items": {
2286
+ "type": "object",
2287
+ "properties": {
2288
+ "name": {
2289
+ "type": "string",
2290
+ "description": "Output field name."
2291
+ },
2292
+ "selector": {
2293
+ "type": "string",
2294
+ "description": "CSS selector relative to the item. Use :scope for the item itself."
2295
+ },
2296
+ "attribute": {
2297
+ "type": "string",
2298
+ "description": "Single attribute or text pseudo-attribute to read."
2299
+ },
2300
+ "attributes": {
2301
+ "type": "array",
2302
+ "items": {
2303
+ "type": "string"
2304
+ },
2305
+ "description": "Ordered attributes or text pseudo-attribute to try."
2306
+ }
2307
+ },
2308
+ "required": [
2309
+ "name"
2310
+ ],
2311
+ "additionalProperties": false
2312
+ },
2313
+ "minItems": 1
2314
+ }
2315
+ },
2316
+ "required": [
2317
+ "item_selector",
2318
+ "fields"
2319
+ ],
2320
+ "additionalProperties": false
2321
+ },
2322
+ "x_actions": {
2323
+ "direction": "agent_to_html",
2324
+ "handler": "actionsJsonOverlay.extractElements",
2325
+ "scope": "active_surface",
2326
+ "source": {
2327
+ "files": [
2328
+ "src/content.js"
2329
+ ],
2330
+ "symbols": [
2331
+ "actionsJsonOverlay.extractElements"
2332
+ ],
2333
+ "component": "ActionsJsonOverlay"
2334
+ },
2335
+ "result_schema": {
2336
+ "type": "object",
2337
+ "properties": {
2338
+ "ok": {
2339
+ "type": "boolean"
2340
+ },
2341
+ "scope": {
2342
+ "type": "object"
2343
+ },
2344
+ "items": {
2345
+ "type": "array",
2346
+ "items": {
2347
+ "type": "object"
2348
+ }
2349
+ },
2350
+ "item_count": {
2351
+ "type": "integer"
2352
+ },
2353
+ "extracted_at": {
2354
+ "type": "string"
2355
+ },
2356
+ "url": {
2357
+ "type": "string"
2358
+ }
2359
+ },
2360
+ "required": [
2361
+ "ok",
2362
+ "items",
2363
+ "item_count"
2364
+ ]
2365
+ }
2366
+ }
2367
+ },
2368
+ {
2369
+ "name": "browser.run_javascript",
2370
+ "description": "Run schema-declared JavaScript in the authorized page with structured arguments and return the script result. Page-specific actions belong in actions.json, not in the runtime.",
2371
+ "input_schema": {
2372
+ "type": "object",
2373
+ "properties": {
2374
+ "source": {
2375
+ "type": "string",
2376
+ "description": "JavaScript function body to execute. It receives `args` and `helpers` bindings and may return a structured value."
2377
+ },
2378
+ "javascript": {
2379
+ "type": "string",
2380
+ "description": "Alias for source."
2381
+ },
2382
+ "args": {
2383
+ "type": "object",
2384
+ "description": "Structured arguments passed to the JavaScript body."
2385
+ }
2386
+ },
2387
+ "required": [
2388
+ "source"
2389
+ ],
2390
+ "additionalProperties": false
2391
+ },
2392
+ "x_actions": {
2393
+ "direction": "agent_to_html",
2394
+ "handler": "actionsJsonOverlay.runJavascript",
2395
+ "scope": "active_surface",
2396
+ "source": {
2397
+ "files": [
2398
+ "src/content.js"
2399
+ ],
2400
+ "symbols": [
2401
+ "actionsJsonOverlay.runJavascript"
2402
+ ],
2403
+ "component": "ActionsJsonOverlay"
2404
+ },
2405
+ "result_schema": {
2406
+ "type": "object",
2407
+ "properties": {
2408
+ "ok": {
2409
+ "type": "boolean"
2410
+ },
2411
+ "result": {},
2412
+ "url": {
2413
+ "type": "string"
2414
+ }
2415
+ },
2416
+ "required": [
2417
+ "ok",
2418
+ "result"
2419
+ ]
2420
+ }
2421
+ }
2422
+ },
2423
+ {
2424
+ "name": "dom.list_sections",
2425
+ "description": "List rendered page sections with inferred headings, document offsets, viewport visibility, and optional item counts. Use this before scrolling to rows whose vertical position varies between page loads.",
2426
+ "input_schema": {
2427
+ "type": "object",
2428
+ "properties": {
2429
+ "selector": {
2430
+ "type": "string",
2431
+ "description": "CSS selector for section-like containers. Defaults to section and role=region containers."
2432
+ },
2433
+ "heading_selector": {
2434
+ "type": "string",
2435
+ "description": "Optional CSS selector used inside each section to identify the section heading."
2436
+ },
2437
+ "item_selector": {
2438
+ "type": "string",
2439
+ "description": "Optional CSS selector counted inside each section, useful for carousel rows."
2440
+ },
2441
+ "text_contains": {
2442
+ "type": "string",
2443
+ "description": "Optional case-insensitive filter applied to heading and section text."
2444
+ },
2445
+ "max_sections": {
2446
+ "type": "integer",
2447
+ "minimum": 1,
2448
+ "maximum": 500
2449
+ },
2450
+ "max_heading_length": {
2451
+ "type": "integer",
2452
+ "minimum": 12,
2453
+ "maximum": 500
2454
+ }
2455
+ },
2456
+ "additionalProperties": false
2457
+ },
2458
+ "x_actions": {
2459
+ "direction": "agent_to_html",
2460
+ "handler": "actionsJsonOverlay.domListSections",
2461
+ "scope": "active_surface",
2462
+ "source": {
2463
+ "files": [
2464
+ "src/content.js"
2465
+ ],
2466
+ "symbols": [
2467
+ "actionsJsonOverlay.domListSections"
2468
+ ],
2469
+ "component": "ActionsJsonOverlay"
2470
+ }
2471
+ }
2472
+ },
2473
+ {
2474
+ "name": "debug.run_javascript",
2475
+ "description": "Authoring-only fallback that evaluates arbitrary JavaScript through the extension background debugger transport. Use this to prove a page operation before encoding it as portable actions.json behavior; do not treat it as a portable primitive.",
2476
+ "input_schema": {
2477
+ "type": "object",
2478
+ "properties": {
2479
+ "source": {
2480
+ "type": "string",
2481
+ "description": "JavaScript function body to evaluate in the inspected page. It receives `args` and `helpers` bindings."
2482
+ },
2483
+ "javascript": {
2484
+ "type": "string",
2485
+ "description": "Alias for source."
2486
+ },
2487
+ "args": {
2488
+ "type": "object",
2489
+ "description": "Structured arguments passed to the JavaScript body."
2490
+ }
2491
+ },
2492
+ "required": [
2493
+ "source"
2494
+ ],
2495
+ "additionalProperties": false
2496
+ },
2497
+ "x_actions": {
2498
+ "direction": "agent_to_html",
2499
+ "handler": "actionsJsonOverlay.debugRunJavascript",
2500
+ "scope": "active_surface",
2501
+ "capability_class": "debug",
2502
+ "portable": false,
2503
+ "source": {
2504
+ "files": [
2505
+ "src/content.js",
2506
+ "src/background.js"
2507
+ ],
2508
+ "symbols": [
2509
+ "actionsJsonOverlay.debugRunJavascript",
2510
+ "chrome.debugger.sendCommand"
2511
+ ],
2512
+ "component": "ActionsJsonOverlay"
2513
+ },
2514
+ "result_schema": {
2515
+ "type": "object",
2516
+ "properties": {
2517
+ "ok": {
2518
+ "type": "boolean"
2519
+ },
2520
+ "result": {},
2521
+ "url": {
2522
+ "type": [
2523
+ "string",
2524
+ "null"
2525
+ ]
2526
+ },
2527
+ "execution": {
2528
+ "type": "object"
2529
+ }
2530
+ },
2531
+ "required": [
2532
+ "ok"
2533
+ ]
2534
+ }
2535
+ }
2536
+ },
2537
+ {
2538
+ "name": "locator.element_info",
2539
+ "description": "Resolve a visible locator to viewport geometry and a recommended clickable center. When multiple visible elements match, the result includes ambiguous=true, candidate_count, and candidates with text, bounding boxes, and clickable centers; inspect candidates before clicking.",
2540
+ "input_schema": {
2541
+ "type": "object",
2542
+ "properties": {
2543
+ "locator": {
2544
+ "type": "object"
2545
+ }
2546
+ },
2547
+ "required": [
2548
+ "locator"
2549
+ ],
2550
+ "additionalProperties": false
2551
+ },
2552
+ "x_actions": {
2553
+ "direction": "agent_to_html",
2554
+ "handler": "actionsJsonOverlay.locatorElementInfo",
2555
+ "scope": "active_surface",
2556
+ "source": {
2557
+ "files": [
2558
+ "src/content.js"
2559
+ ],
2560
+ "symbols": [
2561
+ "actionsJsonOverlay.locatorElementInfo"
2562
+ ],
2563
+ "component": "ActionsJsonOverlay"
2564
+ }
2565
+ }
2566
+ },
2567
+ {
2568
+ "name": "viewport.scroll",
2569
+ "description": "Scroll the current viewport, or a scoped scrollable page region such as a horizontal carousel, by a visible delta.",
2570
+ "input_schema": {
2571
+ "type": "object",
2572
+ "properties": {
2573
+ "delta_x": {
2574
+ "type": "number"
2575
+ },
2576
+ "delta_y": {
2577
+ "type": "number"
2578
+ },
2579
+ "scope": {
2580
+ "type": "object",
2581
+ "description": "Optional page region used to find a scrollable element instead of scrolling the global viewport.",
2582
+ "properties": {
2583
+ "selector": {
2584
+ "type": "string"
2585
+ },
2586
+ "selectors": {
2587
+ "type": "array",
2588
+ "items": {
2589
+ "type": "string"
2590
+ }
2591
+ },
2592
+ "text_equals": {
2593
+ "type": "string"
2594
+ },
2595
+ "text_contains": {
2596
+ "type": "string"
2597
+ },
2598
+ "root_selector": {
2599
+ "type": "string"
2600
+ },
2601
+ "root_strategy": {
2602
+ "type": "string",
2603
+ "enum": [
2604
+ "scope",
2605
+ "parent",
2606
+ "nearest_ancestor_containing_items"
2607
+ ],
2608
+ "default": "scope"
2609
+ },
2610
+ "max_ancestor_depth": {
2611
+ "type": "integer",
2612
+ "minimum": 0,
2613
+ "maximum": 20,
2614
+ "default": 4
2615
+ }
2616
+ },
2617
+ "additionalProperties": false
2618
+ },
2619
+ "item_selector": {
2620
+ "type": "string",
2621
+ "description": "Optional item selector used with nearest_ancestor_containing_items to locate the carousel root."
2622
+ }
2623
+ },
2624
+ "additionalProperties": false
2625
+ },
2626
+ "x_actions": {
2627
+ "direction": "agent_to_html",
2628
+ "handler": "actionsJsonOverlay.viewportScroll",
2629
+ "scope": "active_surface",
2630
+ "source": {
2631
+ "files": [
2632
+ "src/content.js"
2633
+ ],
2634
+ "symbols": [
2635
+ "actionsJsonOverlay.viewportScroll"
2636
+ ],
2637
+ "component": "ActionsJsonOverlay"
2638
+ }
2639
+ }
2640
+ },
2641
+ {
2642
+ "name": "pointer.click",
2643
+ "description": "Move the visible pointer affordance to viewport coordinates and perform a click.",
2644
+ "input_schema": {
2645
+ "type": "object",
2646
+ "properties": {
2647
+ "x": {
2648
+ "type": "number"
2649
+ },
2650
+ "y": {
2651
+ "type": "number"
2652
+ },
2653
+ "button": {
2654
+ "type": "string",
2655
+ "enum": [
2656
+ "left",
2657
+ "middle",
2658
+ "right"
2659
+ ]
2660
+ }
2661
+ },
2662
+ "required": [
2663
+ "x",
2664
+ "y"
2665
+ ],
2666
+ "additionalProperties": false
2667
+ },
2668
+ "x_actions": {
2669
+ "direction": "agent_to_html",
2670
+ "handler": "actionsJsonOverlay.pointerClick",
2671
+ "scope": "active_surface",
2672
+ "source": {
2673
+ "files": [
2674
+ "src/content.js"
2675
+ ],
2676
+ "symbols": [
2677
+ "actionsJsonOverlay.pointerClick"
2678
+ ],
2679
+ "component": "ActionsJsonOverlay"
2680
+ }
2681
+ }
2682
+ },
2683
+ {
2684
+ "name": "pointer.move",
2685
+ "description": "Move the visible pointer affordance to viewport coordinates without clicking. Use this to show the user what element is being targeted before a follow-up action.",
2686
+ "input_schema": {
2687
+ "type": "object",
2688
+ "properties": {
2689
+ "x": {
2690
+ "type": "number"
2691
+ },
2692
+ "y": {
2693
+ "type": "number"
2694
+ },
2695
+ "duration_ms": {
2696
+ "type": "integer",
2697
+ "minimum": 0
2698
+ }
2699
+ },
2700
+ "required": [
2701
+ "x",
2702
+ "y"
2703
+ ],
2704
+ "additionalProperties": false
2705
+ },
2706
+ "x_actions": {
2707
+ "direction": "agent_to_html",
2708
+ "handler": "actionsJsonOverlay.pointerMove",
2709
+ "scope": "active_surface",
2710
+ "source": {
2711
+ "files": [
2712
+ "src/content.js"
2713
+ ],
2714
+ "symbols": [
2715
+ "actionsJsonOverlay.pointerMove"
2716
+ ],
2717
+ "component": "ActionsJsonOverlay"
2718
+ }
2719
+ }
2720
+ },
2721
+ {
2722
+ "name": "pointer.double_click",
2723
+ "description": "Move the visible pointer affordance to viewport coordinates and perform a double click.",
2724
+ "input_schema": {
2725
+ "type": "object",
2726
+ "properties": {
2727
+ "x": {
2728
+ "type": "number"
2729
+ },
2730
+ "y": {
2731
+ "type": "number"
2732
+ }
2733
+ },
2734
+ "required": [
2735
+ "x",
2736
+ "y"
2737
+ ],
2738
+ "additionalProperties": false
2739
+ },
2740
+ "x_actions": {
2741
+ "direction": "agent_to_html",
2742
+ "handler": "actionsJsonOverlay.pointerDoubleClick",
2743
+ "scope": "active_surface",
2744
+ "source": {
2745
+ "files": [
2746
+ "src/content.js"
2747
+ ],
2748
+ "symbols": [
2749
+ "actionsJsonOverlay.pointerDoubleClick"
2750
+ ],
2751
+ "component": "ActionsJsonOverlay"
2752
+ }
2753
+ }
2754
+ },
2755
+ {
2756
+ "name": "pointer.drag",
2757
+ "description": "Move visibly from one viewport point or locator to another while dragging. Call a site-specific read action after this primitive to verify that the page state actually changed; some applications ignore synthetic drag events.",
2758
+ "input_schema": {
2759
+ "type": "object",
2760
+ "properties": {
2761
+ "from": {
2762
+ "type": "object",
2763
+ "properties": {
2764
+ "x": {
2765
+ "type": "number"
2766
+ },
2767
+ "y": {
2768
+ "type": "number"
2769
+ },
2770
+ "selector": {
2771
+ "type": "string"
2772
+ },
2773
+ "text": {
2774
+ "type": "string"
2775
+ },
2776
+ "text_contains": {
2777
+ "type": "string"
2778
+ },
2779
+ "text_equals": {
2780
+ "type": "string"
2781
+ },
2782
+ "locator": {
2783
+ "type": "object"
2784
+ }
2785
+ },
2786
+ "additionalProperties": true
2787
+ },
2788
+ "to": {
2789
+ "type": "object",
2790
+ "properties": {
2791
+ "x": {
2792
+ "type": "number"
2793
+ },
2794
+ "y": {
2795
+ "type": "number"
2796
+ },
2797
+ "selector": {
2798
+ "type": "string"
2799
+ },
2800
+ "text": {
2801
+ "type": "string"
2802
+ },
2803
+ "text_contains": {
2804
+ "type": "string"
2805
+ },
2806
+ "text_equals": {
2807
+ "type": "string"
2808
+ },
2809
+ "locator": {
2810
+ "type": "object"
2811
+ }
2812
+ },
2813
+ "additionalProperties": true
2814
+ },
2815
+ "duration_ms": {
2816
+ "type": "integer",
2817
+ "minimum": 0
2818
+ },
2819
+ "steps": {
2820
+ "type": "integer",
2821
+ "minimum": 1,
2822
+ "maximum": 40
2823
+ }
2824
+ },
2825
+ "required": [
2826
+ "from",
2827
+ "to"
2828
+ ],
2829
+ "additionalProperties": false
2830
+ },
2831
+ "x_actions": {
2832
+ "direction": "agent_to_html",
2833
+ "handler": "actionsJsonOverlay.pointerDrag",
2834
+ "scope": "active_surface",
2835
+ "source": {
2836
+ "files": [
2837
+ "src/content.js"
2838
+ ],
2839
+ "symbols": [
2840
+ "actionsJsonOverlay.pointerDrag"
2841
+ ],
2842
+ "component": "ActionsJsonOverlay"
2843
+ }
2844
+ }
2845
+ },
2846
+ {
2847
+ "name": "text.insert",
2848
+ "description": "Insert text into the focused editable target or a requested editable locator. Use a site-specific locator and pointer.click first when the target is not already focused.",
2849
+ "input_schema": {
2850
+ "type": "object",
2851
+ "properties": {
2852
+ "text": {
2853
+ "type": "string"
2854
+ },
2855
+ "target": {
2856
+ "type": "object",
2857
+ "description": "Optional editable target locator. Omit to use the focused editable element."
2858
+ },
2859
+ "mode": {
2860
+ "type": "string",
2861
+ "enum": [
2862
+ "append",
2863
+ "replace"
2864
+ ],
2865
+ "default": "append"
2866
+ }
2867
+ },
2868
+ "required": [
2869
+ "text"
2870
+ ],
2871
+ "additionalProperties": false
2872
+ },
2873
+ "x_actions": {
2874
+ "direction": "agent_to_html",
2875
+ "handler": "actionsJsonOverlay.textInsert",
2876
+ "scope": "active_surface",
2877
+ "source": {
2878
+ "files": [
2879
+ "src/content.js"
2880
+ ],
2881
+ "symbols": [
2882
+ "actionsJsonOverlay.textInsert"
2883
+ ],
2884
+ "component": "ActionsJsonOverlay"
2885
+ }
2886
+ }
2887
+ },
2888
+ {
2889
+ "name": "keyboard.press",
2890
+ "description": "Dispatch a keyboard key or modifier chord to the focused page element. Use this for Enter/Escape/Tab flows after focusing a visible target.",
2891
+ "input_schema": {
2892
+ "type": "object",
2893
+ "properties": {
2894
+ "key": {
2895
+ "type": "string",
2896
+ "description": "Key name, or a compact chord such as Meta+A, Control+A, or Shift+Enter."
2897
+ },
2898
+ "modifiers": {
2899
+ "type": "array",
2900
+ "items": {
2901
+ "type": "string",
2902
+ "enum": [
2903
+ "Alt",
2904
+ "Control",
2905
+ "Ctrl",
2906
+ "Meta",
2907
+ "Cmd",
2908
+ "Command",
2909
+ "Shift",
2910
+ "Option"
2911
+ ]
2912
+ }
2913
+ }
2914
+ },
2915
+ "required": [
2916
+ "key"
2917
+ ],
2918
+ "additionalProperties": false
2919
+ },
2920
+ "x_actions": {
2921
+ "direction": "agent_to_html",
2922
+ "handler": "actionsJsonOverlay.keyboardPress",
2923
+ "scope": "active_surface",
2924
+ "source": {
2925
+ "files": [
2926
+ "src/content.js"
2927
+ ],
2928
+ "symbols": [
2929
+ "actionsJsonOverlay.keyboardPress"
2930
+ ],
2931
+ "component": "ActionsJsonOverlay"
2932
+ }
2933
+ }
2934
+ },
2935
+ {
2936
+ "name": "transfer.insert",
2937
+ "description": "Render a stored transfer item and insert it into a target editable element without resending the full payload through the model.",
2938
+ "input_schema": {
2939
+ "type": "object",
2940
+ "properties": {
2941
+ "label": {
2942
+ "type": "string"
2943
+ },
2944
+ "id": {
2945
+ "type": "string"
2946
+ },
2947
+ "target": {
2948
+ "type": "object"
2949
+ },
2950
+ "item_selector": {
2951
+ "type": "object"
2952
+ },
2953
+ "render": {
2954
+ "type": "object"
2955
+ },
2956
+ "mode": {
2957
+ "type": "string",
2958
+ "enum": [
2959
+ "replace",
2960
+ "append"
2961
+ ]
2962
+ }
2963
+ },
2964
+ "additionalProperties": false
2965
+ },
2966
+ "x_actions": {
2967
+ "direction": "agent_to_html",
2968
+ "handler": "actionsJsonOverlay.transferInsert",
2969
+ "scope": "active_surface",
2970
+ "source": {
2971
+ "files": [
2972
+ "src/content.js",
2973
+ "src/background.js"
2974
+ ],
2975
+ "symbols": [
2976
+ "actionsJsonOverlay.transferInsert"
2977
+ ],
2978
+ "component": "ActionsJsonOverlay"
2979
+ }
2980
+ }
2981
+ },
2982
+ {
2983
+ "name": "storage.list",
2984
+ "description": "List the currently cached actions.json.storage bundle paths from extension local storage.",
2985
+ "input_schema": {
2986
+ "type": "object",
2987
+ "properties": {},
2988
+ "additionalProperties": false
2989
+ },
2990
+ "x_actions": {
2991
+ "direction": "agent_to_html",
2992
+ "handler": "actionsJsonOverlay.listStorageBundle",
2993
+ "scope": "persistent",
2994
+ "source": {
2995
+ "files": [
2996
+ "src/content.js"
2997
+ ],
2998
+ "symbols": [
2999
+ "actionsJsonOverlay.listStorageBundle",
3000
+ "chrome.storage.local.get"
3001
+ ],
3002
+ "component": "ActionsJsonOverlay"
3003
+ },
3004
+ "result_schema": {
3005
+ "type": "object",
3006
+ "properties": {
3007
+ "ok": {
3008
+ "type": "boolean"
3009
+ },
3010
+ "protocol": {
3011
+ "type": [
3012
+ "string",
3013
+ "null"
3014
+ ]
3015
+ },
3016
+ "version": {
3017
+ "type": [
3018
+ "integer",
3019
+ "null"
3020
+ ]
3021
+ },
3022
+ "synced_at_ms": {
3023
+ "type": [
3024
+ "integer",
3025
+ "null"
3026
+ ]
3027
+ },
3028
+ "imported_at": {
3029
+ "type": [
3030
+ "string",
3031
+ "null"
3032
+ ]
3033
+ },
3034
+ "entry_count": {
3035
+ "type": "integer"
3036
+ },
3037
+ "paths": {
3038
+ "type": "array",
3039
+ "items": {
3040
+ "type": "string"
3041
+ }
3042
+ }
3043
+ },
3044
+ "required": [
3045
+ "ok",
3046
+ "entry_count",
3047
+ "paths"
3048
+ ]
3049
+ }
3050
+ }
3051
+ },
3052
+ {
3053
+ "name": "task.add",
3054
+ "description": "Add one or more tasks to the in-session task queue. Pass a single task as text, or many as a tasks array of strings. Use this to externalize a multi-step plan so you do not have to hold the whole loop in memory: enqueue every step first, then pull them one at a time with task.next.",
3055
+ "input_schema": {
3056
+ "type": "object",
3057
+ "properties": {
3058
+ "text": {
3059
+ "type": "string",
3060
+ "description": "A single task description."
3061
+ },
3062
+ "tasks": {
3063
+ "type": "array",
3064
+ "items": {
3065
+ "type": "string"
3066
+ },
3067
+ "description": "Multiple task descriptions to enqueue in order."
3068
+ }
3069
+ },
3070
+ "additionalProperties": false
3071
+ },
3072
+ "x_actions": {
3073
+ "direction": "agent_to_html",
3074
+ "handler": "task.add",
3075
+ "scope": "active_surface",
3076
+ "source": {
3077
+ "files": [
3078
+ "src/content.js"
3079
+ ],
3080
+ "symbols": [
3081
+ "task.add"
3082
+ ],
3083
+ "component": "ActionsJsonTaskQueue"
3084
+ }
3085
+ }
3086
+ },
3087
+ {
3088
+ "name": "task.next",
3089
+ "description": "Pull the next pending task from the queue and mark it in progress. Returns {done:false, task, remaining} while work remains, or {done:true, remaining:0, ...summary} when the queue is empty (including a summary of every completed and failed task to ground your final report). After finishing a task, call task.complete, then task.next again.",
3090
+ "input_schema": {
3091
+ "type": "object",
3092
+ "properties": {},
3093
+ "additionalProperties": false
3094
+ },
3095
+ "x_actions": {
3096
+ "direction": "agent_to_html",
3097
+ "handler": "task.next",
3098
+ "scope": "active_surface",
3099
+ "source": {
3100
+ "files": [
3101
+ "src/content.js"
3102
+ ],
3103
+ "symbols": [
3104
+ "task.next"
3105
+ ],
3106
+ "component": "ActionsJsonTaskQueue"
3107
+ }
3108
+ }
3109
+ },
3110
+ {
3111
+ "name": "task.complete",
3112
+ "description": "Report the in-progress task as finished. Optionally pass id to target a specific task, status \"failed\" if it could not be done, and result with a short outcome note. Then call task.next for the following task.",
3113
+ "input_schema": {
3114
+ "type": "object",
3115
+ "properties": {
3116
+ "id": {
3117
+ "type": "string",
3118
+ "description": "Task id to complete; defaults to the in-progress task."
3119
+ },
3120
+ "status": {
3121
+ "type": "string",
3122
+ "enum": [
3123
+ "done",
3124
+ "failed"
3125
+ ],
3126
+ "description": "Outcome; defaults to done."
3127
+ },
3128
+ "result": {
3129
+ "type": "string",
3130
+ "description": "Short note on the outcome."
3131
+ }
3132
+ },
3133
+ "additionalProperties": false
3134
+ },
3135
+ "x_actions": {
3136
+ "direction": "agent_to_html",
3137
+ "handler": "task.complete",
3138
+ "scope": "active_surface",
3139
+ "source": {
3140
+ "files": [
3141
+ "src/content.js"
3142
+ ],
3143
+ "symbols": [
3144
+ "task.complete"
3145
+ ],
3146
+ "component": "ActionsJsonTaskQueue"
3147
+ }
3148
+ }
3149
+ },
3150
+ {
3151
+ "name": "task.list",
3152
+ "description": "Return the full task queue with each task id, text, status, and result, plus counts of completed/failed/pending. Use to review progress without changing state.",
3153
+ "input_schema": {
3154
+ "type": "object",
3155
+ "properties": {},
3156
+ "additionalProperties": false
3157
+ },
3158
+ "x_actions": {
3159
+ "direction": "agent_to_html",
3160
+ "handler": "task.list",
3161
+ "scope": "active_surface",
3162
+ "source": {
3163
+ "files": [
3164
+ "src/content.js"
3165
+ ],
3166
+ "symbols": [
3167
+ "task.list"
3168
+ ],
3169
+ "component": "ActionsJsonTaskQueue"
3170
+ }
3171
+ }
3172
+ },
3173
+ {
3174
+ "name": "task.clear",
3175
+ "description": "Remove all tasks from the queue and reset it. Use before seeding a fresh plan.",
3176
+ "input_schema": {
3177
+ "type": "object",
3178
+ "properties": {},
3179
+ "additionalProperties": false
3180
+ },
3181
+ "x_actions": {
3182
+ "direction": "agent_to_html",
3183
+ "handler": "task.clear",
3184
+ "scope": "active_surface",
3185
+ "source": {
3186
+ "files": [
3187
+ "src/content.js"
3188
+ ],
3189
+ "symbols": [
3190
+ "task.clear"
3191
+ ],
3192
+ "component": "ActionsJsonTaskQueue"
3193
+ }
3194
+ }
3195
+ }
3196
+ ],
3197
+ "signals": [
3198
+ {
3199
+ "name": "overlay.closed",
3200
+ "description": "Emitted when the overlay is closed by the user.",
3201
+ "direction": "html_to_agent",
3202
+ "event": "actions-json:overlay-closed",
3203
+ "ingestion": "enabled",
3204
+ "payload": {
3205
+ "type": "object",
3206
+ "properties": {
3207
+ "overlay_id": {
3208
+ "type": "string"
3209
+ }
3210
+ }
3211
+ },
3212
+ "source": {
3213
+ "files": [
3214
+ "src/content.js"
3215
+ ],
3216
+ "symbols": [
3217
+ "actions-json:overlay-closed"
3218
+ ],
3219
+ "selectors": [
3220
+ "#__actions_json_overlay_runtime_host"
3221
+ ]
3222
+ }
3223
+ },
3224
+ {
3225
+ "name": "overlay.minimized",
3226
+ "description": "Emitted when the overlay is collapsed to its title bar.",
3227
+ "direction": "html_to_agent",
3228
+ "event": "actions-json:overlay-minimized",
3229
+ "ingestion": "enabled",
3230
+ "payload": {
3231
+ "type": "object",
3232
+ "properties": {
3233
+ "overlay_id": {
3234
+ "type": "string"
3235
+ }
3236
+ }
3237
+ },
3238
+ "source": {
3239
+ "files": [
3240
+ "src/content.js"
3241
+ ],
3242
+ "symbols": [
3243
+ "actions-json:overlay-minimized"
3244
+ ],
3245
+ "selectors": [
3246
+ "#__actions_json_overlay_runtime_host"
3247
+ ]
3248
+ }
3249
+ },
3250
+ {
3251
+ "name": "overlay.expanded",
3252
+ "description": "Emitted when the overlay is expanded from its minimized title-bar state.",
3253
+ "direction": "html_to_agent",
3254
+ "event": "actions-json:overlay-expanded",
3255
+ "ingestion": "enabled",
3256
+ "payload": {
3257
+ "type": "object",
3258
+ "properties": {
3259
+ "overlay_id": {
3260
+ "type": "string"
3261
+ }
3262
+ }
3263
+ },
3264
+ "source": {
3265
+ "files": [
3266
+ "src/content.js"
3267
+ ],
3268
+ "symbols": [
3269
+ "actions-json:overlay-expanded"
3270
+ ],
3271
+ "selectors": [
3272
+ "#__actions_json_overlay_runtime_host"
3273
+ ]
3274
+ }
3275
+ },
3276
+ {
3277
+ "name": "overlay.launcher_opened",
3278
+ "description": "Emitted when the user opens a registered overlay from a visible-page launcher button.",
3279
+ "direction": "html_to_agent",
3280
+ "event": "actions-json:overlay-launcher-opened",
3281
+ "ingestion": "enabled",
3282
+ "payload": {
3283
+ "type": "object",
3284
+ "properties": {
3285
+ "launcher_id": {
3286
+ "type": "string"
3287
+ }
3288
+ }
3289
+ },
3290
+ "source": {
3291
+ "files": [
3292
+ "src/content.js"
3293
+ ],
3294
+ "symbols": [
3295
+ "actions-json:overlay-launcher-opened"
3296
+ ],
3297
+ "selectors": [
3298
+ "[data-actions-json-overlay-launcher]"
3299
+ ]
3300
+ }
3301
+ }
3302
+ ]
3303
+ }