@almadar/core 10.79.0 → 10.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/builders.d.ts +3 -3
  2. package/dist/builders.js +39 -3
  3. package/dist/builders.js.map +1 -1
  4. package/dist/{effect-Mx_niZdY.d.ts → effect-BHoSW19_.d.ts} +259 -4
  5. package/dist/{entityAccess-C3_cjLNi.d.ts → entityAccess-0POr1WuY.d.ts} +1 -1
  6. package/dist/factory/index.d.ts +4 -4
  7. package/dist/factory/index.js +450 -164
  8. package/dist/factory/index.js.map +1 -1
  9. package/dist/factory-runtime/index.d.ts +3 -3
  10. package/dist/factory-runtime/index.js +39 -3
  11. package/dist/factory-runtime/index.js.map +1 -1
  12. package/dist/{index-B1N3gjT0.d.ts → index-rVlLkZJu.d.ts} +4 -4
  13. package/dist/index.d.ts +10 -10
  14. package/dist/index.js +1615 -574
  15. package/dist/index.js.map +1 -1
  16. package/dist/mock/index.d.ts +4 -4
  17. package/dist/mock/index.js +28 -0
  18. package/dist/mock/index.js.map +1 -1
  19. package/dist/patterns/component-mapping.json +11 -1
  20. package/dist/patterns/event-contracts.json +1 -1
  21. package/dist/patterns/index.d.ts +2707 -652
  22. package/dist/patterns/index.js +1441 -569
  23. package/dist/patterns/index.js.map +1 -1
  24. package/dist/patterns/integrators-registry.json +1004 -402
  25. package/dist/patterns/patterns-registry.json +423 -165
  26. package/dist/patterns/registry.json +423 -165
  27. package/dist/patterns/services-registry.json +1171 -424
  28. package/dist/{schema-CkTuSx6F.d.ts → schema-CkTTGH6l.d.ts} +38 -38
  29. package/dist/{trait-B1fI0lTU.d.ts → trait-D269f6pt.d.ts} +32 -2
  30. package/dist/types/index.d.ts +5 -5
  31. package/dist/types/index.js +175 -4
  32. package/dist/types/index.js.map +1 -1
  33. package/dist/{types-B53Myv7U.d.ts → types-7PHjoE7m.d.ts} +2 -2
  34. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "exportedAt": "2026-08-29T08:09:09.100Z",
3
+ "exportedAt": "2026-09-03T08:33:38.850Z",
4
4
  "services": {
5
5
  "llm": {
6
6
  "name": "llm",
@@ -17,36 +17,52 @@
17
17
  "name": "systemPrompt",
18
18
  "type": "string",
19
19
  "required": false,
20
- "description": ""
20
+ "description": "System prompt steering the model's behavior."
21
21
  },
22
22
  {
23
23
  "name": "userPrompt",
24
24
  "type": "string",
25
25
  "required": true,
26
- "description": ""
26
+ "description": "The user/task prompt sent to the model."
27
27
  },
28
28
  {
29
29
  "name": "model",
30
30
  "type": "string",
31
31
  "required": false,
32
- "description": ""
32
+ "description": "Model id override."
33
33
  },
34
34
  {
35
35
  "name": "temperature",
36
36
  "type": "number",
37
37
  "required": false,
38
- "description": ""
38
+ "description": "Sampling temperature; higher is more random."
39
39
  },
40
40
  {
41
41
  "name": "maxTokens",
42
42
  "type": "number",
43
43
  "required": false,
44
- "description": ""
44
+ "description": "Maximum tokens to generate."
45
45
  }
46
46
  ],
47
47
  "responseShape": {
48
48
  "content": "string",
49
- "usage": "object"
49
+ "usage": {
50
+ "type": "object",
51
+ "properties": {
52
+ "promptTokens": {
53
+ "type": "number",
54
+ "required": true
55
+ },
56
+ "completionTokens": {
57
+ "type": "number",
58
+ "required": true
59
+ },
60
+ "totalTokens": {
61
+ "type": "number",
62
+ "required": true
63
+ }
64
+ }
65
+ }
50
66
  }
51
67
  },
52
68
  {
@@ -57,19 +73,19 @@
57
73
  "name": "text",
58
74
  "type": "string",
59
75
  "required": true,
60
- "description": ""
76
+ "description": "Text to classify."
61
77
  },
62
78
  {
63
79
  "name": "categories",
64
80
  "type": "string[]",
65
81
  "required": true,
66
- "description": ""
82
+ "description": "Closed set of category labels the model must choose from."
67
83
  },
68
84
  {
69
85
  "name": "model",
70
86
  "type": "string",
71
87
  "required": false,
72
- "description": ""
88
+ "description": "Model id override."
73
89
  }
74
90
  ],
75
91
  "responseShape": {
@@ -86,25 +102,57 @@
86
102
  "name": "text",
87
103
  "type": "string",
88
104
  "required": true,
89
- "description": ""
105
+ "description": "Source text to extract data from."
90
106
  },
91
107
  {
92
108
  "name": "schema",
93
109
  "type": "JsonSchemaDefinition",
94
110
  "required": true,
95
- "description": ""
111
+ "description": "JSON Schema describing the fields to extract.",
112
+ "properties": {
113
+ "type": {
114
+ "type": "string",
115
+ "required": false
116
+ },
117
+ "properties": {
118
+ "type": "JsonSchemaDefinition",
119
+ "required": false
120
+ },
121
+ "required": {
122
+ "type": "string[]",
123
+ "required": false
124
+ },
125
+ "items": {
126
+ "type": "JsonSchemaDefinition",
127
+ "required": false
128
+ },
129
+ "additionalProperties": {
130
+ "type": "JsonSchemaDefinition",
131
+ "required": false
132
+ },
133
+ "description": {
134
+ "type": "string",
135
+ "required": false
136
+ },
137
+ "enum": {
138
+ "type": "string[]",
139
+ "required": false,
140
+ "description": "Enum values are serialized to strings on the wire — pass `[\"a\",\"b\"]` even for non-string enums."
141
+ }
142
+ }
96
143
  },
97
144
  {
98
145
  "name": "model",
99
146
  "type": "string",
100
147
  "required": false,
101
- "description": ""
148
+ "description": "Model id override."
102
149
  }
103
150
  ],
104
151
  "responseShape": {
105
152
  "data": "ExtractedData",
106
153
  "confidence": "number"
107
- }
154
+ },
155
+ "synonyms": "parse, structure"
108
156
  },
109
157
  {
110
158
  "name": "summarize",
@@ -114,25 +162,25 @@
114
162
  "name": "text",
115
163
  "type": "string",
116
164
  "required": true,
117
- "description": ""
165
+ "description": "Text to summarize."
118
166
  },
119
167
  {
120
168
  "name": "maxLength",
121
169
  "type": "number",
122
170
  "required": false,
123
- "description": ""
171
+ "description": "Target maximum summary length in words."
124
172
  },
125
173
  {
126
174
  "name": "style",
127
175
  "type": "string",
128
176
  "required": false,
129
- "description": ""
177
+ "description": "Summary style, e.g. 'bullet' or 'detailed'."
130
178
  },
131
179
  {
132
180
  "name": "model",
133
181
  "type": "string",
134
182
  "required": false,
135
- "description": ""
183
+ "description": "Model id override."
136
184
  }
137
185
  ],
138
186
  "responseShape": {
@@ -148,13 +196,13 @@
148
196
  "name": "texts",
149
197
  "type": "string[]",
150
198
  "required": true,
151
- "description": ""
199
+ "description": "Texts to embed, one vector per entry, in order."
152
200
  },
153
201
  {
154
202
  "name": "model",
155
203
  "type": "string",
156
204
  "required": false,
157
- "description": ""
205
+ "description": "Embedding model id override."
158
206
  }
159
207
  ],
160
208
  "responseShape": {
@@ -441,7 +489,30 @@
441
489
  }
442
490
  ],
443
491
  "responseShape": {
444
- "services": "DiscoveredService[]"
492
+ "services": {
493
+ "type": "DiscoveredService[]",
494
+ "items": {
495
+ "type": "DiscoveredService",
496
+ "properties": {
497
+ "name": {
498
+ "type": "string",
499
+ "required": true
500
+ },
501
+ "instanceId": {
502
+ "type": "string",
503
+ "required": true
504
+ },
505
+ "host": {
506
+ "type": "string",
507
+ "required": true
508
+ },
509
+ "port": {
510
+ "type": "number",
511
+ "required": true
512
+ }
513
+ }
514
+ }
515
+ }
445
516
  }
446
517
  },
447
518
  {
@@ -456,7 +527,30 @@
456
527
  }
457
528
  ],
458
529
  "responseShape": {
459
- "services": "DiscoveredService[]"
530
+ "services": {
531
+ "type": "DiscoveredService[]",
532
+ "items": {
533
+ "type": "DiscoveredService",
534
+ "properties": {
535
+ "name": {
536
+ "type": "string",
537
+ "required": true
538
+ },
539
+ "instanceId": {
540
+ "type": "string",
541
+ "required": true
542
+ },
543
+ "host": {
544
+ "type": "string",
545
+ "required": true
546
+ },
547
+ "port": {
548
+ "type": "number",
549
+ "required": true
550
+ }
551
+ }
552
+ }
553
+ }
460
554
  }
461
555
  }
462
556
  ],
@@ -581,7 +675,19 @@
581
675
  }
582
676
  ],
583
677
  "responseShape": {
584
- "skill": "object"
678
+ "skill": {
679
+ "type": "object",
680
+ "properties": {
681
+ "name": {
682
+ "type": "string",
683
+ "required": true
684
+ },
685
+ "content": {
686
+ "type": "string",
687
+ "required": true
688
+ }
689
+ }
690
+ }
585
691
  }
586
692
  },
587
693
  {
@@ -602,7 +708,19 @@
602
708
  }
603
709
  ],
604
710
  "responseShape": {
605
- "skill": "object"
711
+ "skill": {
712
+ "type": "object",
713
+ "properties": {
714
+ "name": {
715
+ "type": "string",
716
+ "required": true
717
+ },
718
+ "content": {
719
+ "type": "string",
720
+ "required": true
721
+ }
722
+ }
723
+ }
606
724
  }
607
725
  },
608
726
  {
@@ -617,7 +735,19 @@
617
735
  }
618
736
  ],
619
737
  "responseShape": {
620
- "skill": "object"
738
+ "skill": {
739
+ "type": "object",
740
+ "properties": {
741
+ "name": {
742
+ "type": "string",
743
+ "required": true
744
+ },
745
+ "content": {
746
+ "type": "string",
747
+ "required": true
748
+ }
749
+ }
750
+ }
621
751
  }
622
752
  },
623
753
  {
@@ -625,7 +755,22 @@
625
755
  "description": "Generate all available skills.",
626
756
  "params": [],
627
757
  "responseShape": {
628
- "skills": "array"
758
+ "skills": {
759
+ "type": "array",
760
+ "items": {
761
+ "type": "object",
762
+ "properties": {
763
+ "name": {
764
+ "type": "string",
765
+ "required": true
766
+ },
767
+ "content": {
768
+ "type": "string",
769
+ "required": true
770
+ }
771
+ }
772
+ }
773
+ }
629
774
  }
630
775
  }
631
776
  ],
@@ -641,25 +786,25 @@
641
786
  "actions": [
642
787
  {
643
788
  "name": "cloneRepo",
644
- "description": "",
789
+ "description": "Clone a repository via the git CLI into a local target directory, using the configured token for auth.",
645
790
  "params": [
646
791
  {
647
792
  "name": "repoUrl",
648
793
  "type": "string",
649
794
  "required": true,
650
- "description": ""
795
+ "description": "HTTPS clone URL, e.g. https://github.com/owner/repo. Owner/repo are parsed from it when not preconfigured."
651
796
  },
652
797
  {
653
798
  "name": "targetDir",
654
799
  "type": "string",
655
800
  "required": true,
656
- "description": ""
801
+ "description": "Local directory to clone into."
657
802
  },
658
803
  {
659
804
  "name": "branch",
660
805
  "type": "string",
661
806
  "required": false,
662
- "description": ""
807
+ "description": "Branch to check out after cloning; defaults to the repo's default branch."
663
808
  }
664
809
  ],
665
810
  "responseShape": {
@@ -668,19 +813,19 @@
668
813
  },
669
814
  {
670
815
  "name": "createBranch",
671
- "description": "",
816
+ "description": "Create a new local branch via the git CLI in the configured working directory.",
672
817
  "params": [
673
818
  {
674
819
  "name": "branchName",
675
820
  "type": "string",
676
821
  "required": true,
677
- "description": ""
822
+ "description": "Name of the branch to create."
678
823
  },
679
824
  {
680
825
  "name": "baseBranch",
681
826
  "type": "string",
682
827
  "required": false,
683
- "description": ""
828
+ "description": "Branch to branch from; defaults to the current branch."
684
829
  }
685
830
  ],
686
831
  "responseShape": {
@@ -689,19 +834,19 @@
689
834
  },
690
835
  {
691
836
  "name": "commit",
692
- "description": "",
837
+ "description": "Commit staged (or given) changes via the git CLI in the configured working directory.",
693
838
  "params": [
694
839
  {
695
840
  "name": "message",
696
841
  "type": "string",
697
842
  "required": true,
698
- "description": ""
843
+ "description": "Commit message."
699
844
  },
700
845
  {
701
846
  "name": "files",
702
847
  "type": "string[]",
703
848
  "required": false,
704
- "description": ""
849
+ "description": "Specific files to commit; when omitted, all changes are committed."
705
850
  }
706
851
  ],
707
852
  "responseShape": {
@@ -710,19 +855,19 @@
710
855
  },
711
856
  {
712
857
  "name": "push",
713
- "description": "",
858
+ "description": "Push a local branch to the remote via the git CLI, using the configured token for auth.",
714
859
  "params": [
715
860
  {
716
861
  "name": "branchName",
717
862
  "type": "string",
718
863
  "required": true,
719
- "description": ""
864
+ "description": "Branch name to push."
720
865
  },
721
866
  {
722
867
  "name": "force",
723
868
  "type": "boolean",
724
869
  "required": false,
725
- "description": ""
870
+ "description": "Force-push (overwrites remote history); never set true in an agent context."
726
871
  }
727
872
  ],
728
873
  "responseShape": {
@@ -731,37 +876,37 @@
731
876
  },
732
877
  {
733
878
  "name": "createPR",
734
- "description": "",
879
+ "description": "Open a pull request via the GitHub REST API.",
735
880
  "params": [
736
881
  {
737
882
  "name": "title",
738
883
  "type": "string",
739
884
  "required": true,
740
- "description": ""
885
+ "description": "Pull request title."
741
886
  },
742
887
  {
743
888
  "name": "body",
744
889
  "type": "string",
745
890
  "required": true,
746
- "description": ""
891
+ "description": "Pull request description body."
747
892
  },
748
893
  {
749
894
  "name": "baseBranch",
750
895
  "type": "string",
751
896
  "required": true,
752
- "description": ""
897
+ "description": "Branch the PR merges into, e.g. main."
753
898
  },
754
899
  {
755
900
  "name": "headBranch",
756
901
  "type": "string",
757
902
  "required": true,
758
- "description": ""
903
+ "description": "Branch the PR merges from (the feature branch)."
759
904
  },
760
905
  {
761
906
  "name": "draft",
762
907
  "type": "boolean",
763
908
  "required": false,
764
- "description": ""
909
+ "description": "Open as a draft PR instead of ready-for-review."
765
910
  }
766
911
  ],
767
912
  "responseShape": {
@@ -772,55 +917,93 @@
772
917
  },
773
918
  {
774
919
  "name": "getPRComments",
775
- "description": "",
920
+ "description": "List review comments on a pull request via the GitHub REST API.",
776
921
  "params": [
777
922
  {
778
923
  "name": "prNumber",
779
924
  "type": "number",
780
925
  "required": true,
781
- "description": ""
926
+ "description": "Pull request number."
782
927
  }
783
928
  ],
784
929
  "responseShape": {
785
- "comments": "array"
930
+ "comments": {
931
+ "type": "array",
932
+ "items": {
933
+ "type": "object",
934
+ "properties": {
935
+ "id": {
936
+ "type": "number",
937
+ "required": true
938
+ },
939
+ "body": {
940
+ "type": "string",
941
+ "required": true
942
+ },
943
+ "user": {
944
+ "type": "string",
945
+ "required": true
946
+ }
947
+ }
948
+ }
949
+ }
786
950
  }
787
951
  },
788
952
  {
789
953
  "name": "listIssues",
790
- "description": "",
954
+ "description": "List issues on the configured repository via the GitHub REST API.",
791
955
  "params": [
792
956
  {
793
957
  "name": "state",
794
958
  "type": "string",
795
959
  "required": false,
796
- "description": ""
960
+ "description": "Issue state filter: 'open', 'closed', or 'all'; defaults to open."
797
961
  },
798
962
  {
799
963
  "name": "labels",
800
964
  "type": "string[]",
801
965
  "required": false,
802
- "description": ""
966
+ "description": "Only issues carrying all of these labels."
803
967
  },
804
968
  {
805
969
  "name": "per_page",
806
970
  "type": "number",
807
971
  "required": false,
808
- "description": ""
972
+ "description": "Page size for the GitHub API request."
809
973
  }
810
974
  ],
811
975
  "responseShape": {
812
- "issues": "array"
976
+ "issues": {
977
+ "type": "array",
978
+ "items": {
979
+ "type": "object",
980
+ "properties": {
981
+ "number": {
982
+ "type": "number",
983
+ "required": true
984
+ },
985
+ "title": {
986
+ "type": "string",
987
+ "required": true
988
+ },
989
+ "state": {
990
+ "type": "string",
991
+ "required": true
992
+ }
993
+ }
994
+ }
995
+ }
813
996
  }
814
997
  },
815
998
  {
816
999
  "name": "getIssue",
817
- "description": "",
1000
+ "description": "Fetch a single issue's details via the GitHub REST API.",
818
1001
  "params": [
819
1002
  {
820
1003
  "name": "issueNumber",
821
1004
  "type": "number",
822
1005
  "required": true,
823
- "description": ""
1006
+ "description": "Issue number."
824
1007
  }
825
1008
  ],
826
1009
  "responseShape": {
@@ -832,31 +1015,31 @@
832
1015
  },
833
1016
  {
834
1017
  "name": "getFile",
835
- "description": "",
1018
+ "description": "Read a file's content from a repository at a given ref (declared intent — dispatch is being wired).",
836
1019
  "params": [
837
1020
  {
838
1021
  "name": "owner",
839
1022
  "type": "string",
840
1023
  "required": true,
841
- "description": ""
1024
+ "description": "Repository owner (user or org)."
842
1025
  },
843
1026
  {
844
1027
  "name": "repo",
845
1028
  "type": "string",
846
1029
  "required": true,
847
- "description": ""
1030
+ "description": "Repository name."
848
1031
  },
849
1032
  {
850
1033
  "name": "path",
851
1034
  "type": "string",
852
1035
  "required": true,
853
- "description": ""
1036
+ "description": "File path within the repository."
854
1037
  },
855
1038
  {
856
1039
  "name": "ref",
857
1040
  "type": "string",
858
1041
  "required": false,
859
- "description": ""
1042
+ "description": "Branch, tag, or commit SHA to read from; defaults to the default branch."
860
1043
  }
861
1044
  ],
862
1045
  "responseShape": {
@@ -868,76 +1051,99 @@
868
1051
  },
869
1052
  {
870
1053
  "name": "listCommits",
871
- "description": "",
1054
+ "description": "List commits on a repository, optionally filtered by file path (declared intent — dispatch is being wired).",
872
1055
  "params": [
873
1056
  {
874
1057
  "name": "owner",
875
1058
  "type": "string",
876
1059
  "required": true,
877
- "description": ""
1060
+ "description": "Repository owner (user or org)."
878
1061
  },
879
1062
  {
880
1063
  "name": "repo",
881
1064
  "type": "string",
882
1065
  "required": true,
883
- "description": ""
1066
+ "description": "Repository name."
884
1067
  },
885
1068
  {
886
1069
  "name": "path",
887
1070
  "type": "string",
888
1071
  "required": false,
889
- "description": ""
1072
+ "description": "Only commits touching this file path."
890
1073
  },
891
1074
  {
892
1075
  "name": "ref",
893
1076
  "type": "string",
894
1077
  "required": false,
895
- "description": ""
1078
+ "description": "Branch, tag, or commit SHA to start from; defaults to the default branch."
896
1079
  },
897
1080
  {
898
1081
  "name": "per_page",
899
1082
  "type": "number",
900
1083
  "required": false,
901
- "description": ""
1084
+ "description": "Page size for the GitHub API request."
902
1085
  }
903
1086
  ],
904
1087
  "responseShape": {
905
- "commits": "array"
1088
+ "commits": {
1089
+ "type": "array",
1090
+ "items": {
1091
+ "type": "object",
1092
+ "properties": {
1093
+ "sha": {
1094
+ "type": "string",
1095
+ "required": true
1096
+ },
1097
+ "message": {
1098
+ "type": "string",
1099
+ "required": true
1100
+ },
1101
+ "author": {
1102
+ "type": "string",
1103
+ "required": true
1104
+ },
1105
+ "date": {
1106
+ "type": "string",
1107
+ "required": true
1108
+ }
1109
+ }
1110
+ }
1111
+ }
906
1112
  }
907
1113
  },
908
1114
  {
909
1115
  "name": "createIssue",
910
- "description": "",
1116
+ "description": "Open a new issue on a repository (declared intent — dispatch is being wired).",
911
1117
  "params": [
912
1118
  {
913
1119
  "name": "owner",
914
1120
  "type": "string",
915
1121
  "required": true,
916
- "description": ""
1122
+ "description": "Repository owner (user or org)."
917
1123
  },
918
1124
  {
919
1125
  "name": "repo",
920
1126
  "type": "string",
921
1127
  "required": true,
922
- "description": ""
1128
+ "description": "Repository name."
923
1129
  },
924
1130
  {
925
1131
  "name": "title",
926
1132
  "type": "string",
927
1133
  "required": true,
928
- "description": ""
1134
+ "description": "Issue title."
929
1135
  },
930
1136
  {
931
1137
  "name": "body",
932
1138
  "type": "string",
933
1139
  "required": false,
934
- "description": ""
1140
+ "description": "Issue body/description."
935
1141
  },
936
1142
  {
937
1143
  "name": "labels",
938
1144
  "type": "string[]",
939
1145
  "required": false,
940
- "description": ""
1146
+ "description": "Labels to apply to the new issue."
941
1147
  }
942
1148
  ],
943
1149
  "responseShape": {
@@ -975,25 +1181,25 @@
975
1181
  "actions": [
976
1182
  {
977
1183
  "name": "createPaymentIntent",
978
- "description": "",
1184
+ "description": "Create a Stripe PaymentIntent for a one-off charge.",
979
1185
  "params": [
980
1186
  {
981
1187
  "name": "amount",
982
1188
  "type": "number",
983
1189
  "required": true,
984
- "description": ""
1190
+ "description": "Charge amount in the currency's smallest unit (e.g. cents for USD)."
985
1191
  },
986
1192
  {
987
1193
  "name": "currency",
988
1194
  "type": "string",
989
1195
  "required": true,
990
- "description": ""
1196
+ "description": "ISO 4217 currency code, e.g. usd."
991
1197
  },
992
1198
  {
993
1199
  "name": "metadata",
994
1200
  "type": "object",
995
1201
  "required": false,
996
- "description": ""
1202
+ "description": "Arbitrary key-value tags attached to the PaymentIntent (string values only)."
997
1203
  }
998
1204
  ],
999
1205
  "responseShape": {
@@ -1002,17 +1208,18 @@
1002
1208
  "status": "string",
1003
1209
  "amount": "number",
1004
1210
  "currency": "string"
1005
- }
1211
+ },
1212
+ "synonyms": "charge, pay"
1006
1213
  },
1007
1214
  {
1008
1215
  "name": "confirmPayment",
1009
- "description": "",
1216
+ "description": "Confirm a previously created PaymentIntent, attempting to complete the charge.",
1010
1217
  "params": [
1011
1218
  {
1012
1219
  "name": "paymentIntentId",
1013
1220
  "type": "string",
1014
1221
  "required": true,
1015
- "description": ""
1222
+ "description": "The PaymentIntent id returned by createPaymentIntent."
1016
1223
  }
1017
1224
  ],
1018
1225
  "responseShape": {
@@ -1022,19 +1229,19 @@
1022
1229
  },
1023
1230
  {
1024
1231
  "name": "refund",
1025
- "description": "",
1232
+ "description": "Refund a charged PaymentIntent, in full or in part.",
1026
1233
  "params": [
1027
1234
  {
1028
1235
  "name": "paymentIntentId",
1029
1236
  "type": "string",
1030
1237
  "required": true,
1031
- "description": ""
1238
+ "description": "The PaymentIntent id to refund."
1032
1239
  },
1033
1240
  {
1034
1241
  "name": "amount",
1035
1242
  "type": "number",
1036
1243
  "required": false,
1037
- "description": ""
1244
+ "description": "Amount to refund in the currency's smallest unit; omit for a full refund."
1038
1245
  }
1039
1246
  ],
1040
1247
  "responseShape": {
@@ -1067,65 +1274,85 @@
1067
1274
  "actions": [
1068
1275
  {
1069
1276
  "name": "generate",
1070
- "description": "",
1277
+ "description": "Generate free-form text from a prompt via the configured LLM provider (default 'You are a helpful assistant.' system prompt).",
1071
1278
  "params": [
1072
1279
  {
1073
1280
  "name": "userPrompt",
1074
1281
  "type": "string",
1075
1282
  "required": true,
1076
- "description": ""
1283
+ "description": "The user/task prompt sent to the model."
1077
1284
  },
1078
1285
  {
1079
1286
  "name": "systemPrompt",
1080
1287
  "type": "string",
1081
1288
  "required": false,
1082
- "description": ""
1289
+ "description": "System prompt steering the model's behavior; defaults to a generic assistant prompt."
1083
1290
  },
1084
1291
  {
1085
1292
  "name": "model",
1086
1293
  "type": "string",
1087
1294
  "required": false,
1088
- "description": ""
1295
+ "description": "Model id override; when set, a fresh client is built for this call instead of the shared one."
1089
1296
  },
1090
1297
  {
1091
1298
  "name": "temperature",
1092
1299
  "type": "number",
1093
1300
  "required": false,
1094
- "description": ""
1301
+ "description": "Sampling temperature (0-1ish, provider-dependent); higher is more random."
1095
1302
  },
1096
1303
  {
1097
1304
  "name": "maxTokens",
1098
1305
  "type": "number",
1099
1306
  "required": false,
1100
- "description": ""
1307
+ "description": "Maximum tokens to generate; defaults to 1024."
1101
1308
  }
1102
1309
  ],
1103
1310
  "responseShape": {
1104
1311
  "content": "string",
1105
- "usage": "object"
1312
+ "usage": {
1313
+ "type": "object",
1314
+ "properties": {
1315
+ "promptTokens": {
1316
+ "type": "number",
1317
+ "required": false
1318
+ },
1319
+ "completionTokens": {
1320
+ "type": "number",
1321
+ "required": false
1322
+ },
1323
+ "totalTokens": {
1324
+ "type": "number",
1325
+ "required": false
1326
+ },
1327
+ "tokens": {
1328
+ "type": "number",
1329
+ "required": false
1330
+ }
1331
+ }
1332
+ }
1106
1333
  }
1107
1334
  },
1108
1335
  {
1109
1336
  "name": "classify",
1110
- "description": "",
1337
+ "description": "Classify text into exactly one of a caller-supplied category list, with a confidence score and reasoning.",
1111
1338
  "params": [
1112
1339
  {
1113
1340
  "name": "text",
1114
1341
  "type": "string",
1115
1342
  "required": true,
1116
- "description": ""
1343
+ "description": "Text to classify."
1117
1344
  },
1118
1345
  {
1119
1346
  "name": "categories",
1120
1347
  "type": "string[]",
1121
1348
  "required": true,
1122
- "description": ""
1349
+ "description": "Closed set of category labels the model must choose from."
1123
1350
  },
1124
1351
  {
1125
1352
  "name": "model",
1126
1353
  "type": "string",
1127
1354
  "required": false,
1128
- "description": ""
1355
+ "description": "Model id override."
1129
1356
  }
1130
1357
  ],
1131
1358
  "responseShape": {
@@ -1136,56 +1363,56 @@
1136
1363
  },
1137
1364
  {
1138
1365
  "name": "extract",
1139
- "description": "",
1366
+ "description": "Extract structured data from text according to a JSON-schema-shaped description; returned data is not validated against the schema.",
1140
1367
  "params": [
1141
1368
  {
1142
1369
  "name": "text",
1143
1370
  "type": "string",
1144
1371
  "required": true,
1145
- "description": ""
1372
+ "description": "Source text to extract data from."
1146
1373
  },
1147
1374
  {
1148
1375
  "name": "schema",
1149
1376
  "type": "IntegrationParams",
1150
1377
  "required": true,
1151
- "description": ""
1378
+ "description": "JSON-schema-like description of the fields to extract; passed to the model as a prompt, not enforced structurally."
1152
1379
  },
1153
1380
  {
1154
1381
  "name": "model",
1155
1382
  "type": "string",
1156
1383
  "required": false,
1157
- "description": ""
1384
+ "description": "Model id override."
1158
1385
  }
1159
1386
  ],
1160
1387
  "responseShape": {}
1161
1388
  },
1162
1389
  {
1163
1390
  "name": "summarize",
1164
- "description": "",
1391
+ "description": "Summarize text, optionally constrained by length and style, returning a summary plus key points.",
1165
1392
  "params": [
1166
1393
  {
1167
1394
  "name": "text",
1168
1395
  "type": "string",
1169
1396
  "required": true,
1170
- "description": ""
1397
+ "description": "Text to summarize."
1171
1398
  },
1172
1399
  {
1173
1400
  "name": "maxLength",
1174
1401
  "type": "number",
1175
1402
  "required": false,
1176
- "description": ""
1403
+ "description": "Target maximum summary length in words."
1177
1404
  },
1178
1405
  {
1179
1406
  "name": "style",
1180
1407
  "type": "string",
1181
1408
  "required": false,
1182
- "description": ""
1409
+ "description": "Summary style: 'bullet' for bullet points, 'detailed' for thorough, otherwise concise."
1183
1410
  },
1184
1411
  {
1185
1412
  "name": "model",
1186
1413
  "type": "string",
1187
1414
  "required": false,
1188
- "description": ""
1415
+ "description": "Model id override."
1189
1416
  }
1190
1417
  ],
1191
1418
  "responseShape": {
@@ -1195,19 +1422,19 @@
1195
1422
  },
1196
1423
  {
1197
1424
  "name": "embed",
1198
- "description": "",
1425
+ "description": "Generate embedding vectors for an array of texts via the configured embedding model (default baai/bge-base-en-v1.5 on OpenRouter, independent of the chat provider).",
1199
1426
  "params": [
1200
1427
  {
1201
1428
  "name": "texts",
1202
1429
  "type": "string[]",
1203
1430
  "required": true,
1204
- "description": ""
1431
+ "description": "Texts to embed, one vector per entry, in order."
1205
1432
  },
1206
1433
  {
1207
1434
  "name": "model",
1208
1435
  "type": "string",
1209
1436
  "required": false,
1210
- "description": ""
1437
+ "description": "Embedding model id override."
1211
1438
  }
1212
1439
  ],
1213
1440
  "responseShape": {
@@ -1238,38 +1465,38 @@
1238
1465
  "actions": [
1239
1466
  {
1240
1467
  "name": "search",
1241
- "description": "",
1468
+ "description": "Search YouTube via the Data API and return matching video snippets.",
1242
1469
  "params": [
1243
1470
  {
1244
1471
  "name": "query",
1245
1472
  "type": "string",
1246
1473
  "required": true,
1247
- "description": ""
1474
+ "description": "Search query text."
1248
1475
  },
1249
1476
  {
1250
1477
  "name": "maxResults",
1251
1478
  "type": "number",
1252
1479
  "required": false,
1253
- "description": ""
1480
+ "description": "Maximum number of results; defaults to 10."
1254
1481
  },
1255
1482
  {
1256
1483
  "name": "type",
1257
1484
  "type": "string",
1258
1485
  "required": false,
1259
- "description": ""
1486
+ "description": "Resource type filter passed to the Data API (e.g. 'video', 'channel', 'playlist')."
1260
1487
  }
1261
1488
  ],
1262
1489
  "responseShape": {}
1263
1490
  },
1264
1491
  {
1265
1492
  "name": "getVideo",
1266
- "description": "",
1493
+ "description": "Fetch a video's snippet and statistics via the YouTube Data API.",
1267
1494
  "params": [
1268
1495
  {
1269
1496
  "name": "videoId",
1270
1497
  "type": "string",
1271
1498
  "required": true,
1272
- "description": ""
1499
+ "description": "YouTube video id."
1273
1500
  }
1274
1501
  ],
1275
1502
  "responseShape": {
@@ -1281,13 +1508,13 @@
1281
1508
  },
1282
1509
  {
1283
1510
  "name": "getChannel",
1284
- "description": "",
1511
+ "description": "Fetch a channel's snippet and statistics via the YouTube Data API.",
1285
1512
  "params": [
1286
1513
  {
1287
1514
  "name": "channelId",
1288
1515
  "type": "string",
1289
1516
  "required": true,
1290
- "description": ""
1517
+ "description": "YouTube channel id."
1291
1518
  }
1292
1519
  ],
1293
1520
  "responseShape": {
@@ -1315,47 +1542,48 @@
1315
1542
  "actions": [
1316
1543
  {
1317
1544
  "name": "sendSMS",
1318
- "description": "",
1545
+ "description": "Send an SMS message via Twilio.",
1319
1546
  "params": [
1320
1547
  {
1321
1548
  "name": "to",
1322
1549
  "type": "string",
1323
1550
  "required": true,
1324
- "description": ""
1551
+ "description": "Destination phone number, E.164 format."
1325
1552
  },
1326
1553
  {
1327
1554
  "name": "body",
1328
1555
  "type": "string",
1329
1556
  "required": true,
1330
- "description": ""
1557
+ "description": "Message text."
1331
1558
  },
1332
1559
  {
1333
1560
  "name": "from",
1334
1561
  "type": "string",
1335
1562
  "required": false,
1336
- "description": ""
1563
+ "description": "Sender phone number; defaults to TWILIO_PHONE_NUMBER."
1337
1564
  }
1338
1565
  ],
1339
1566
  "responseShape": {
1340
1567
  "sid": "string",
1341
1568
  "status": "string"
1342
- }
1569
+ },
1570
+ "synonyms": "text message, text"
1343
1571
  },
1344
1572
  {
1345
1573
  "name": "sendWhatsApp",
1346
- "description": "",
1574
+ "description": "Send a WhatsApp message via Twilio, using the configured phone number as sender on both ends.",
1347
1575
  "params": [
1348
1576
  {
1349
1577
  "name": "to",
1350
1578
  "type": "string",
1351
1579
  "required": true,
1352
- "description": ""
1580
+ "description": "Destination phone number, E.164 format (sent as whatsapp:number)."
1353
1581
  },
1354
1582
  {
1355
1583
  "name": "body",
1356
1584
  "type": "string",
1357
1585
  "required": true,
1358
- "description": ""
1586
+ "description": "Message text."
1359
1587
  }
1360
1588
  ],
1361
1589
  "responseShape": {
@@ -1392,31 +1620,31 @@
1392
1620
  "actions": [
1393
1621
  {
1394
1622
  "name": "send",
1395
- "description": "",
1623
+ "description": "Send a transactional email via the configured provider (SendGrid or Resend).",
1396
1624
  "params": [
1397
1625
  {
1398
1626
  "name": "to",
1399
1627
  "type": "string",
1400
1628
  "required": true,
1401
- "description": ""
1629
+ "description": "Recipient email address."
1402
1630
  },
1403
1631
  {
1404
1632
  "name": "subject",
1405
1633
  "type": "string",
1406
1634
  "required": true,
1407
- "description": ""
1635
+ "description": "Email subject line."
1408
1636
  },
1409
1637
  {
1410
1638
  "name": "body",
1411
1639
  "type": "string",
1412
1640
  "required": true,
1413
- "description": ""
1641
+ "description": "Plain-text (or HTML, if `htmlBody` is absent) body content."
1414
1642
  },
1415
1643
  {
1416
1644
  "name": "from",
1417
1645
  "type": "string",
1418
1646
  "required": false,
1419
- "description": ""
1647
+ "description": "Sender address; defaults to FROM_EMAIL."
1420
1648
  },
1421
1649
  {
1422
1650
  "name": "htmlBody",
@@ -1428,7 +1656,7 @@
1428
1656
  "name": "replyTo",
1429
1657
  "type": "string",
1430
1658
  "required": false,
1431
- "description": ""
1659
+ "description": "Reply-To address."
1432
1660
  },
1433
1661
  {
1434
1662
  "name": "templateId",
@@ -1471,31 +1699,31 @@
1471
1699
  "actions": [
1472
1700
  {
1473
1701
  "name": "send",
1474
- "description": "",
1702
+ "description": "POST a JSON event notification to an external URL, HMAC-SHA256-signed when a secret is configured; 5xx responses retry, 4xx do not.",
1475
1703
  "params": [
1476
1704
  {
1477
1705
  "name": "url",
1478
1706
  "type": "string",
1479
1707
  "required": true,
1480
- "description": ""
1708
+ "description": "Destination URL to POST to."
1481
1709
  },
1482
1710
  {
1483
1711
  "name": "event",
1484
1712
  "type": "string",
1485
1713
  "required": true,
1486
- "description": ""
1714
+ "description": "Event name, carried in the body and the X-Almadar-Event header."
1487
1715
  },
1488
1716
  {
1489
1717
  "name": "payload",
1490
1718
  "type": "object",
1491
1719
  "required": false,
1492
- "description": ""
1720
+ "description": "Event payload; defaults to an empty object."
1493
1721
  },
1494
1722
  {
1495
1723
  "name": "secret",
1496
1724
  "type": "string",
1497
1725
  "required": false,
1498
- "description": ""
1726
+ "description": "Per-call HMAC signing secret, overriding WEBHOOK_SIGNING_SECRET."
1499
1727
  }
1500
1728
  ],
1501
1729
  "responseShape": {
@@ -1528,37 +1756,57 @@
1528
1756
  "actions": [
1529
1757
  {
1530
1758
  "name": "send",
1531
- "description": "",
1759
+ "description": "Send a VAPID-signed Web Push notification to a browser PushSubscription endpoint.",
1532
1760
  "params": [
1533
1761
  {
1534
1762
  "name": "subscription",
1535
1763
  "type": "object",
1536
1764
  "required": true,
1537
- "description": ""
1765
+ "description": "Browser PushSubscription: endpoint URL plus the p256dh/auth encryption keys.",
1766
+ "properties": {
1767
+ "endpoint": {
1768
+ "type": "string",
1769
+ "required": true
1770
+ },
1771
+ "keys": {
1772
+ "type": "object",
1773
+ "required": true,
1774
+ "properties": {
1775
+ "p256dh": {
1776
+ "type": "string",
1777
+ "required": true
1778
+ },
1779
+ "auth": {
1780
+ "type": "string",
1781
+ "required": true
1782
+ }
1783
+ }
1784
+ }
1785
+ }
1538
1786
  },
1539
1787
  {
1540
1788
  "name": "title",
1541
1789
  "type": "string",
1542
1790
  "required": true,
1543
- "description": ""
1791
+ "description": "Notification title."
1544
1792
  },
1545
1793
  {
1546
1794
  "name": "body",
1547
1795
  "type": "string",
1548
1796
  "required": true,
1549
- "description": ""
1797
+ "description": "Notification body text."
1550
1798
  },
1551
1799
  {
1552
1800
  "name": "url",
1553
1801
  "type": "string",
1554
1802
  "required": false,
1555
- "description": ""
1803
+ "description": "URL to open when the notification is clicked."
1556
1804
  },
1557
1805
  {
1558
1806
  "name": "icon",
1559
1807
  "type": "string",
1560
1808
  "required": false,
1561
- "description": ""
1809
+ "description": "Notification icon URL."
1562
1810
  }
1563
1811
  ],
1564
1812
  "responseShape": {
@@ -1596,89 +1844,128 @@
1596
1844
  "actions": [
1597
1845
  {
1598
1846
  "name": "listEvents",
1599
- "description": "",
1847
+ "description": "List events on a Google Calendar; pass `syncToken` for incremental sync instead of a time window (the API rejects combining them).",
1600
1848
  "params": [
1601
1849
  {
1602
1850
  "name": "calendarId",
1603
1851
  "type": "string",
1604
1852
  "required": false,
1605
- "description": ""
1853
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID (or 'primary')."
1606
1854
  },
1607
1855
  {
1608
1856
  "name": "timeMin",
1609
1857
  "type": "string",
1610
1858
  "required": false,
1611
- "description": ""
1859
+ "description": "ISO start of the time window (ignored when `syncToken` is set)."
1612
1860
  },
1613
1861
  {
1614
1862
  "name": "timeMax",
1615
1863
  "type": "string",
1616
1864
  "required": false,
1617
- "description": ""
1865
+ "description": "ISO end of the time window (ignored when `syncToken` is set)."
1618
1866
  },
1619
1867
  {
1620
1868
  "name": "syncToken",
1621
1869
  "type": "string",
1622
1870
  "required": false,
1623
- "description": ""
1871
+ "description": "Incremental-sync token from a previous call's `nextSyncToken`; supersedes timeMin/timeMax."
1624
1872
  },
1625
1873
  {
1626
1874
  "name": "maxResults",
1627
1875
  "type": "number",
1628
1876
  "required": false,
1629
- "description": ""
1877
+ "description": "Maximum events to return; defaults to 250."
1630
1878
  }
1631
1879
  ],
1632
1880
  "responseShape": {
1633
- "events": "array",
1881
+ "events": {
1882
+ "type": "array",
1883
+ "items": {
1884
+ "type": "object",
1885
+ "properties": {
1886
+ "id": {
1887
+ "type": "string",
1888
+ "required": true
1889
+ },
1890
+ "summary": {
1891
+ "type": "string",
1892
+ "required": true
1893
+ },
1894
+ "description": {
1895
+ "type": "string",
1896
+ "required": true
1897
+ },
1898
+ "location": {
1899
+ "type": "string",
1900
+ "required": true
1901
+ },
1902
+ "start": {
1903
+ "type": "string",
1904
+ "required": true
1905
+ },
1906
+ "end": {
1907
+ "type": "string",
1908
+ "required": true
1909
+ },
1910
+ "status": {
1911
+ "type": "string",
1912
+ "required": true
1913
+ },
1914
+ "updated": {
1915
+ "type": "string",
1916
+ "required": true
1917
+ }
1918
+ }
1919
+ }
1920
+ },
1634
1921
  "nextSyncToken": "string | null"
1635
1922
  }
1636
1923
  },
1637
1924
  {
1638
1925
  "name": "createEvent",
1639
- "description": "",
1926
+ "description": "Create a calendar event; an all-day event uses a 10-char (YYYY-MM-DD) start with no `end`/`durationMinutes`, defaulting to the next day.",
1640
1927
  "params": [
1641
1928
  {
1642
1929
  "name": "calendarId",
1643
1930
  "type": "string",
1644
1931
  "required": false,
1645
- "description": ""
1932
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID."
1646
1933
  },
1647
1934
  {
1648
1935
  "name": "summary",
1649
1936
  "type": "string",
1650
1937
  "required": true,
1651
- "description": ""
1938
+ "description": "Event title."
1652
1939
  },
1653
1940
  {
1654
1941
  "name": "description",
1655
1942
  "type": "string",
1656
1943
  "required": false,
1657
- "description": ""
1944
+ "description": "Event description."
1658
1945
  },
1659
1946
  {
1660
1947
  "name": "location",
1661
1948
  "type": "string",
1662
1949
  "required": false,
1663
- "description": ""
1950
+ "description": "Event location text."
1664
1951
  },
1665
1952
  {
1666
1953
  "name": "start",
1667
1954
  "type": "string",
1668
1955
  "required": true,
1669
- "description": ""
1956
+ "description": "ISO start (10 chars = all-day date, longer = dateTime)."
1670
1957
  },
1671
1958
  {
1672
1959
  "name": "end",
1673
1960
  "type": "string",
1674
1961
  "required": false,
1675
- "description": ""
1962
+ "description": "ISO end; if omitted, derived from `durationMinutes` or the all-day next-day convention."
1676
1963
  },
1677
1964
  {
1678
1965
  "name": "durationMinutes",
1679
1966
  "type": "number",
1680
1967
  "required": false,
1681
- "description": ""
1968
+ "description": "Duration in minutes used to derive `end` when `end` is omitted (non-all-day events only)."
1682
1969
  }
1683
1970
  ],
1684
1971
  "responseShape": {
@@ -1689,49 +1976,49 @@
1689
1976
  },
1690
1977
  {
1691
1978
  "name": "updateEvent",
1692
- "description": "",
1979
+ "description": "Patch an existing event's fields; only fields present in params are changed.",
1693
1980
  "params": [
1694
1981
  {
1695
1982
  "name": "calendarId",
1696
1983
  "type": "string",
1697
1984
  "required": false,
1698
- "description": ""
1985
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID."
1699
1986
  },
1700
1987
  {
1701
1988
  "name": "eventId",
1702
1989
  "type": "string",
1703
1990
  "required": true,
1704
- "description": ""
1991
+ "description": "Id of the event to update."
1705
1992
  },
1706
1993
  {
1707
1994
  "name": "summary",
1708
1995
  "type": "string",
1709
1996
  "required": false,
1710
- "description": ""
1997
+ "description": "New event title."
1711
1998
  },
1712
1999
  {
1713
2000
  "name": "description",
1714
2001
  "type": "string",
1715
2002
  "required": false,
1716
- "description": ""
2003
+ "description": "New event description."
1717
2004
  },
1718
2005
  {
1719
2006
  "name": "location",
1720
2007
  "type": "string",
1721
2008
  "required": false,
1722
- "description": ""
2009
+ "description": "New event location text."
1723
2010
  },
1724
2011
  {
1725
2012
  "name": "start",
1726
2013
  "type": "string",
1727
2014
  "required": false,
1728
- "description": ""
2015
+ "description": "New ISO start."
1729
2016
  },
1730
2017
  {
1731
2018
  "name": "end",
1732
2019
  "type": "string",
1733
2020
  "required": false,
1734
- "description": ""
2021
+ "description": "New ISO end."
1735
2022
  }
1736
2023
  ],
1737
2024
  "responseShape": {
@@ -1741,19 +2028,19 @@
1741
2028
  },
1742
2029
  {
1743
2030
  "name": "deleteEvent",
1744
- "description": "",
2031
+ "description": "Delete a calendar event.",
1745
2032
  "params": [
1746
2033
  {
1747
2034
  "name": "calendarId",
1748
2035
  "type": "string",
1749
2036
  "required": false,
1750
- "description": ""
2037
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID."
1751
2038
  },
1752
2039
  {
1753
2040
  "name": "eventId",
1754
2041
  "type": "string",
1755
2042
  "required": true,
1756
- "description": ""
2043
+ "description": "Id of the event to delete."
1757
2044
  }
1758
2045
  ],
1759
2046
  "responseShape": {
@@ -1763,58 +2050,73 @@
1763
2050
  },
1764
2051
  {
1765
2052
  "name": "freeBusy",
1766
- "description": "",
2053
+ "description": "Query busy time blocks on a calendar within a window.",
1767
2054
  "params": [
1768
2055
  {
1769
2056
  "name": "calendarId",
1770
2057
  "type": "string",
1771
2058
  "required": false,
1772
- "description": ""
2059
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID."
1773
2060
  },
1774
2061
  {
1775
2062
  "name": "timeMin",
1776
2063
  "type": "string",
1777
2064
  "required": true,
1778
- "description": ""
2065
+ "description": "ISO start of the query window."
1779
2066
  },
1780
2067
  {
1781
2068
  "name": "timeMax",
1782
2069
  "type": "string",
1783
2070
  "required": true,
1784
- "description": ""
2071
+ "description": "ISO end of the query window."
1785
2072
  }
1786
2073
  ],
1787
2074
  "responseShape": {
1788
- "busy": "array"
2075
+ "busy": {
2076
+ "type": "array",
2077
+ "items": {
2078
+ "type": "object",
2079
+ "properties": {
2080
+ "start": {
2081
+ "type": "string",
2082
+ "required": true
2083
+ },
2084
+ "end": {
2085
+ "type": "string",
2086
+ "required": true
2087
+ }
2088
+ }
2089
+ }
2090
+ }
1789
2091
  }
1790
2092
  },
1791
2093
  {
1792
2094
  "name": "watch",
1793
- "description": "",
2095
+ "description": "Register a push-notification channel for calendar change events (Google Calendar API watch).",
1794
2096
  "params": [
1795
2097
  {
1796
2098
  "name": "calendarId",
1797
2099
  "type": "string",
1798
2100
  "required": false,
1799
- "description": ""
2101
+ "description": "Calendar id; defaults to GOOGLE_CALENDAR_ID."
1800
2102
  },
1801
2103
  {
1802
2104
  "name": "channelId",
1803
2105
  "type": "string",
1804
2106
  "required": true,
1805
- "description": ""
2107
+ "description": "Caller-chosen id identifying this notification channel."
1806
2108
  },
1807
2109
  {
1808
2110
  "name": "address",
1809
2111
  "type": "string",
1810
2112
  "required": true,
1811
- "description": ""
2113
+ "description": "HTTPS callback URL Google POSTs change notifications to."
1812
2114
  },
1813
2115
  {
1814
2116
  "name": "ttlSeconds",
1815
2117
  "type": "number",
1816
2118
  "required": false,
1817
- "description": ""
2119
+ "description": "Requested channel time-to-live in seconds."
1818
2120
  }
1819
2121
  ],
1820
2122
  "responseShape": {
@@ -1825,19 +2127,19 @@
1825
2127
  },
1826
2128
  {
1827
2129
  "name": "stopWatch",
1828
- "description": "",
2130
+ "description": "Stop an active watch channel, ending calendar change notifications.",
1829
2131
  "params": [
1830
2132
  {
1831
2133
  "name": "channelId",
1832
2134
  "type": "string",
1833
2135
  "required": true,
1834
- "description": ""
2136
+ "description": "The channel id from the corresponding `watch` call."
1835
2137
  },
1836
2138
  {
1837
2139
  "name": "resourceId",
1838
2140
  "type": "string",
1839
2141
  "required": true,
1840
- "description": ""
2142
+ "description": "The resourceId returned by the corresponding `watch` call."
1841
2143
  }
1842
2144
  ],
1843
2145
  "responseShape": {
@@ -1885,40 +2187,71 @@
1885
2187
  "actions": [
1886
2188
  {
1887
2189
  "name": "listFiles",
1888
- "description": "",
2190
+ "description": "List non-trashed files in a Google Drive folder, optionally filtered by a Drive API query clause.",
1889
2191
  "params": [
1890
2192
  {
1891
2193
  "name": "folderId",
1892
2194
  "type": "string",
1893
2195
  "required": false,
1894
- "description": ""
2196
+ "description": "Restrict to files whose parents include this folder id."
1895
2197
  },
1896
2198
  {
1897
2199
  "name": "query",
1898
2200
  "type": "string",
1899
2201
  "required": false,
1900
- "description": ""
2202
+ "description": "Extra Drive API query clause, ANDed with the folder/trashed filters."
1901
2203
  },
1902
2204
  {
1903
2205
  "name": "maxResults",
1904
2206
  "type": "number",
1905
2207
  "required": false,
1906
- "description": ""
2208
+ "description": "Maximum files to return; defaults to 100."
1907
2209
  }
1908
2210
  ],
1909
2211
  "responseShape": {
1910
- "files": "array"
2212
+ "files": {
2213
+ "type": "array",
2214
+ "items": {
2215
+ "type": "object",
2216
+ "properties": {
2217
+ "id": {
2218
+ "type": "string",
2219
+ "required": true
2220
+ },
2221
+ "name": {
2222
+ "type": "string",
2223
+ "required": true
2224
+ },
2225
+ "mimeType": {
2226
+ "type": "string",
2227
+ "required": true
2228
+ },
2229
+ "size": {
2230
+ "type": "number",
2231
+ "required": true
2232
+ },
2233
+ "modifiedTime": {
2234
+ "type": "string",
2235
+ "required": true
2236
+ },
2237
+ "webViewLink": {
2238
+ "type": "string",
2239
+ "required": true
2240
+ }
2241
+ }
2242
+ }
2243
+ }
1911
2244
  }
1912
2245
  },
1913
2246
  {
1914
2247
  "name": "getFile",
1915
- "description": "",
2248
+ "description": "Download a file's content, base64-encoded.",
1916
2249
  "params": [
1917
2250
  {
1918
2251
  "name": "fileId",
1919
2252
  "type": "string",
1920
2253
  "required": true,
1921
- "description": ""
2254
+ "description": "Drive file id."
1922
2255
  }
1923
2256
  ],
1924
2257
  "responseShape": {
@@ -1931,54 +2264,55 @@
1931
2264
  },
1932
2265
  {
1933
2266
  "name": "uploadFile",
1934
- "description": "",
2267
+ "description": "Upload a file to Drive; writes go through the user OAuth client when configured (service-account uploads have no storage quota on personal accounts).",
1935
2268
  "params": [
1936
2269
  {
1937
2270
  "name": "name",
1938
2271
  "type": "string",
1939
2272
  "required": true,
1940
- "description": ""
2273
+ "description": "File name to create."
1941
2274
  },
1942
2275
  {
1943
2276
  "name": "content",
1944
2277
  "type": "string",
1945
2278
  "required": true,
1946
- "description": ""
2279
+ "description": "File content as a base64 data URL (data:mime;base64,...) or raw base64/plain text."
1947
2280
  },
1948
2281
  {
1949
2282
  "name": "mimeType",
1950
2283
  "type": "string",
1951
2284
  "required": false,
1952
- "description": ""
2285
+ "description": "MIME type; inferred from a data URL when omitted."
1953
2286
  },
1954
2287
  {
1955
2288
  "name": "folderId",
1956
2289
  "type": "string",
1957
2290
  "required": false,
1958
- "description": ""
2291
+ "description": "Parent folder id; defaults to GOOGLE_DRIVE_FOLDER_ID."
1959
2292
  }
1960
2293
  ],
1961
2294
  "responseShape": {
1962
2295
  "id": "string",
1963
2296
  "name": "string",
1964
2297
  "webViewLink": "string"
1965
- }
2298
+ },
2299
+ "synonyms": "upload file"
1966
2300
  },
1967
2301
  {
1968
2302
  "name": "createFolder",
1969
- "description": "",
2303
+ "description": "Create a new Drive folder.",
1970
2304
  "params": [
1971
2305
  {
1972
2306
  "name": "name",
1973
2307
  "type": "string",
1974
2308
  "required": true,
1975
- "description": ""
2309
+ "description": "Folder name to create."
1976
2310
  },
1977
2311
  {
1978
2312
  "name": "parentId",
1979
2313
  "type": "string",
1980
2314
  "required": false,
1981
- "description": ""
2315
+ "description": "Parent folder id; defaults to GOOGLE_DRIVE_FOLDER_ID."
1982
2316
  }
1983
2317
  ],
1984
2318
  "responseShape": {
@@ -1988,25 +2322,25 @@
1988
2322
  },
1989
2323
  {
1990
2324
  "name": "shareFile",
1991
- "description": "",
2325
+ "description": "Grant a user permission on a Drive file.",
1992
2326
  "params": [
1993
2327
  {
1994
2328
  "name": "fileId",
1995
2329
  "type": "string",
1996
2330
  "required": true,
1997
- "description": ""
2331
+ "description": "Drive file id."
1998
2332
  },
1999
2333
  {
2000
2334
  "name": "email",
2001
2335
  "type": "string",
2002
2336
  "required": true,
2003
- "description": ""
2337
+ "description": "Email address of the grantee."
2004
2338
  },
2005
2339
  {
2006
2340
  "name": "role",
2007
2341
  "type": "'reader' | 'writer' | 'commenter'",
2008
2342
  "required": false,
2009
- "description": ""
2343
+ "description": "Permission level; defaults to 'reader'."
2010
2344
  }
2011
2345
  ],
2012
2346
  "responseShape": {
@@ -2048,31 +2382,25 @@
2048
2382
  "actions": [
2049
2383
  {
2050
2384
  "name": "getSpend",
2051
- "description": "",
2385
+ "description": "Fetch total ad spend, impressions, and clicks for an account over a date range via the Meta Graph API Marketing Insights endpoint (read-only).",
2052
2386
  "params": [
2053
2387
  {
2054
2388
  "name": "accountId",
2055
2389
  "type": "string",
2056
2390
  "required": false,
2057
- "description": ""
2391
+ "description": "Ad account id (with or without the `act_` prefix); defaults to META_AD_ACCOUNT_ID."
2058
2392
  },
2059
2393
  {
2060
2394
  "name": "since",
2061
2395
  "type": "string",
2062
2396
  "required": true,
2063
- "description": ""
2397
+ "description": "Range start date (YYYY-MM-DD)."
2064
2398
  },
2065
2399
  {
2066
2400
  "name": "until",
2067
2401
  "type": "string",
2068
2402
  "required": true,
2069
- "description": ""
2070
- },
2071
- {
2072
- "name": "clientTag",
2073
- "type": "string",
2074
- "required": false,
2075
- "description": ""
2403
+ "description": "Range end date (YYYY-MM-DD)."
2076
2404
  }
2077
2405
  ],
2078
2406
  "responseShape": {
@@ -2084,23 +2412,46 @@
2084
2412
  },
2085
2413
  {
2086
2414
  "name": "listCampaigns",
2087
- "description": "",
2415
+ "description": "List campaigns on an ad account via the Meta Graph API (read-only); dailyBudget is converted from Meta's minor-unit reporting.",
2088
2416
  "params": [
2089
2417
  {
2090
2418
  "name": "accountId",
2091
2419
  "type": "string",
2092
2420
  "required": false,
2093
- "description": ""
2421
+ "description": "Ad account id (with or without the `act_` prefix); defaults to META_AD_ACCOUNT_ID."
2094
2422
  },
2095
2423
  {
2096
2424
  "name": "status",
2097
2425
  "type": "string",
2098
2426
  "required": false,
2099
- "description": ""
2427
+ "description": "Filter by campaign effective_status (e.g. 'ACTIVE', 'PAUSED')."
2100
2428
  }
2101
2429
  ],
2102
2430
  "responseShape": {
2103
- "campaigns": "array"
2431
+ "campaigns": {
2432
+ "type": "array",
2433
+ "items": {
2434
+ "type": "object",
2435
+ "properties": {
2436
+ "id": {
2437
+ "type": "string",
2438
+ "required": true
2439
+ },
2440
+ "name": {
2441
+ "type": "string",
2442
+ "required": true
2443
+ },
2444
+ "status": {
2445
+ "type": "string",
2446
+ "required": true
2447
+ },
2448
+ "dailyBudget": {
2449
+ "type": "number",
2450
+ "required": true
2451
+ }
2452
+ }
2453
+ }
2454
+ }
2104
2455
  }
2105
2456
  }
2106
2457
  ],
@@ -2127,19 +2478,64 @@
2127
2478
  "actions": [
2128
2479
  {
2129
2480
  "name": "exportInvoices",
2130
- "description": "",
2481
+ "description": "Shape invoice rows into an import-ready CSV export (no accounting-vendor connection — generic column set).",
2131
2482
  "params": [
2132
2483
  {
2133
2484
  "name": "invoices",
2134
2485
  "type": "array",
2135
2486
  "required": true,
2136
- "description": ""
2487
+ "description": "Invoice rows to export, in column order id/number/customer/issuedAt/dueAt/currency/net/tax/gross/status.",
2488
+ "items": {
2489
+ "type": "object",
2490
+ "properties": {
2491
+ "id": {
2492
+ "type": "string",
2493
+ "required": true
2494
+ },
2495
+ "number": {
2496
+ "type": "string",
2497
+ "required": true
2498
+ },
2499
+ "customer": {
2500
+ "type": "string",
2501
+ "required": true
2502
+ },
2503
+ "issuedAt": {
2504
+ "type": "string",
2505
+ "required": true
2506
+ },
2507
+ "dueAt": {
2508
+ "type": "string",
2509
+ "required": true
2510
+ },
2511
+ "currency": {
2512
+ "type": "string",
2513
+ "required": true
2514
+ },
2515
+ "net": {
2516
+ "type": "number",
2517
+ "required": true
2518
+ },
2519
+ "tax": {
2520
+ "type": "number",
2521
+ "required": true
2522
+ },
2523
+ "gross": {
2524
+ "type": "number",
2525
+ "required": true
2526
+ },
2527
+ "status": {
2528
+ "type": "string",
2529
+ "required": true
2530
+ }
2531
+ }
2532
+ }
2137
2533
  },
2138
2534
  {
2139
2535
  "name": "format",
2140
2536
  "type": "'csv'",
2141
2537
  "required": false,
2142
- "description": ""
2538
+ "description": "Export format; only 'csv' is currently supported."
2143
2539
  }
2144
2540
  ],
2145
2541
  "responseShape": {
@@ -2150,19 +2546,48 @@
2150
2546
  },
2151
2547
  {
2152
2548
  "name": "exportJournal",
2153
- "description": "",
2549
+ "description": "Shape journal entry rows into an import-ready CSV export.",
2154
2550
  "params": [
2155
2551
  {
2156
2552
  "name": "entries",
2157
2553
  "type": "array",
2158
2554
  "required": true,
2159
- "description": ""
2555
+ "description": "Journal entry rows to export, in column order date/account/description/debit/credit/reference.",
2556
+ "items": {
2557
+ "type": "object",
2558
+ "properties": {
2559
+ "date": {
2560
+ "type": "string",
2561
+ "required": true
2562
+ },
2563
+ "account": {
2564
+ "type": "string",
2565
+ "required": true
2566
+ },
2567
+ "description": {
2568
+ "type": "string",
2569
+ "required": true
2570
+ },
2571
+ "debit": {
2572
+ "type": "number",
2573
+ "required": true
2574
+ },
2575
+ "credit": {
2576
+ "type": "number",
2577
+ "required": true
2578
+ },
2579
+ "reference": {
2580
+ "type": "string",
2581
+ "required": true
2582
+ }
2583
+ }
2584
+ }
2160
2585
  },
2161
2586
  {
2162
2587
  "name": "format",
2163
2588
  "type": "'csv'",
2164
2589
  "required": false,
2165
- "description": ""
2590
+ "description": "Export format; only 'csv' is currently supported."
2166
2591
  }
2167
2592
  ],
2168
2593
  "responseShape": {
@@ -2184,25 +2609,25 @@
2184
2609
  "actions": [
2185
2610
  {
2186
2611
  "name": "createRequisition",
2187
- "description": "",
2612
+ "description": "Start a GoCardless Bank Account Data requisition (bank-connection consent flow); the returned `link` is where the end user authorizes access.",
2188
2613
  "params": [
2189
2614
  {
2190
2615
  "name": "institutionId",
2191
2616
  "type": "string",
2192
2617
  "required": true,
2193
- "description": ""
2618
+ "description": "GoCardless institution id (the bank to connect)."
2194
2619
  },
2195
2620
  {
2196
2621
  "name": "redirectUrl",
2197
2622
  "type": "string",
2198
2623
  "required": true,
2199
- "description": ""
2624
+ "description": "URL GoCardless redirects the user to after consent."
2200
2625
  },
2201
2626
  {
2202
2627
  "name": "reference",
2203
2628
  "type": "string",
2204
2629
  "required": false,
2205
- "description": ""
2630
+ "description": "Caller-chosen reference to correlate the requisition."
2206
2631
  }
2207
2632
  ],
2208
2633
  "responseShape": {
@@ -2212,13 +2637,13 @@
2212
2637
  },
2213
2638
  {
2214
2639
  "name": "listAccounts",
2215
- "description": "",
2640
+ "description": "List account ids linked under a completed requisition.",
2216
2641
  "params": [
2217
2642
  {
2218
2643
  "name": "requisitionId",
2219
2644
  "type": "string",
2220
2645
  "required": true,
2221
- "description": ""
2646
+ "description": "Requisition id from createRequisition."
2222
2647
  }
2223
2648
  ],
2224
2649
  "responseShape": {
@@ -2227,29 +2652,60 @@
2227
2652
  },
2228
2653
  {
2229
2654
  "name": "listTransactions",
2230
- "description": "",
2655
+ "description": "List booked transactions on a linked bank account, optionally filtered by date range.",
2231
2656
  "params": [
2232
2657
  {
2233
2658
  "name": "accountId",
2234
2659
  "type": "string",
2235
2660
  "required": true,
2236
- "description": ""
2661
+ "description": "GoCardless account id."
2237
2662
  },
2238
2663
  {
2239
2664
  "name": "dateFrom",
2240
2665
  "type": "string",
2241
2666
  "required": false,
2242
- "description": ""
2667
+ "description": "Only transactions booked on/after this date (YYYY-MM-DD)."
2243
2668
  },
2244
2669
  {
2245
2670
  "name": "dateTo",
2246
2671
  "type": "string",
2247
2672
  "required": false,
2248
- "description": ""
2673
+ "description": "Only transactions booked on/before this date (YYYY-MM-DD)."
2249
2674
  }
2250
2675
  ],
2251
2676
  "responseShape": {
2252
- "transactions": "array"
2677
+ "transactions": {
2678
+ "type": "array",
2679
+ "items": {
2680
+ "type": "object",
2681
+ "properties": {
2682
+ "id": {
2683
+ "type": "string",
2684
+ "required": true
2685
+ },
2686
+ "amount": {
2687
+ "type": "number",
2688
+ "required": true
2689
+ },
2690
+ "currency": {
2691
+ "type": "string",
2692
+ "required": true
2693
+ },
2694
+ "date": {
2695
+ "type": "string",
2696
+ "required": true
2697
+ },
2698
+ "description": {
2699
+ "type": "string",
2700
+ "required": true
2701
+ },
2702
+ "counterparty": {
2703
+ "type": "string",
2704
+ "required": true
2705
+ }
2706
+ }
2707
+ }
2708
+ }
2253
2709
  }
2254
2710
  }
2255
2711
  ],
@@ -2276,37 +2732,37 @@
2276
2732
  "actions": [
2277
2733
  {
2278
2734
  "name": "sendEnvelope",
2279
- "description": "",
2735
+ "description": "Send a document for e-signature via DocuSign; accepts the document content as a data URL or raw base64.",
2280
2736
  "params": [
2281
2737
  {
2282
2738
  "name": "recipientEmail",
2283
2739
  "type": "string",
2284
2740
  "required": true,
2285
- "description": ""
2741
+ "description": "Signer's email address."
2286
2742
  },
2287
2743
  {
2288
2744
  "name": "recipientName",
2289
2745
  "type": "string",
2290
2746
  "required": true,
2291
- "description": ""
2747
+ "description": "Signer's display name."
2292
2748
  },
2293
2749
  {
2294
2750
  "name": "documentName",
2295
2751
  "type": "string",
2296
2752
  "required": true,
2297
- "description": ""
2753
+ "description": "Document file name (its extension also picks the DocuSign fileExtension)."
2298
2754
  },
2299
2755
  {
2300
2756
  "name": "documentContent",
2301
2757
  "type": "string",
2302
2758
  "required": true,
2303
- "description": ""
2759
+ "description": "Document content as a base64 data URL or raw base64."
2304
2760
  },
2305
2761
  {
2306
2762
  "name": "emailSubject",
2307
2763
  "type": "string",
2308
2764
  "required": false,
2309
- "description": ""
2765
+ "description": "Envelope email subject; defaults to \"Please sign: \" + documentName."
2310
2766
  }
2311
2767
  ],
2312
2768
  "responseShape": {
@@ -2316,13 +2772,13 @@
2316
2772
  },
2317
2773
  {
2318
2774
  "name": "getEnvelopeStatus",
2319
- "description": "",
2775
+ "description": "Poll a DocuSign envelope's signing status.",
2320
2776
  "params": [
2321
2777
  {
2322
2778
  "name": "envelopeId",
2323
2779
  "type": "string",
2324
2780
  "required": true,
2325
- "description": ""
2781
+ "description": "DocuSign envelope id from sendEnvelope."
2326
2782
  }
2327
2783
  ],
2328
2784
  "responseShape": {
@@ -2332,13 +2788,13 @@
2332
2788
  },
2333
2789
  {
2334
2790
  "name": "downloadDocument",
2335
- "description": "",
2791
+ "description": "Download the combined signed document(s) for a completed envelope, base64-encoded PDF.",
2336
2792
  "params": [
2337
2793
  {
2338
2794
  "name": "envelopeId",
2339
2795
  "type": "string",
2340
2796
  "required": true,
2341
- "description": ""
2797
+ "description": "DocuSign envelope id."
2342
2798
  }
2343
2799
  ],
2344
2800
  "responseShape": {
@@ -2370,31 +2826,31 @@
2370
2826
  "actions": [
2371
2827
  {
2372
2828
  "name": "build",
2373
- "description": "",
2829
+ "description": "Simulate building a container image (in-memory backend — no real Docker daemon/SDK; a real build is not yet implemented).",
2374
2830
  "params": [
2375
2831
  {
2376
2832
  "name": "tag",
2377
2833
  "type": "string",
2378
2834
  "required": true,
2379
- "description": ""
2835
+ "description": "Image tag to build, e.g. myapp:latest."
2380
2836
  },
2381
2837
  {
2382
2838
  "name": "dockerfile",
2383
2839
  "type": "string",
2384
2840
  "required": false,
2385
- "description": ""
2841
+ "description": "Dockerfile path; defaults to 'Dockerfile'."
2386
2842
  },
2387
2843
  {
2388
2844
  "name": "context",
2389
2845
  "type": "string",
2390
2846
  "required": false,
2391
- "description": ""
2847
+ "description": "Build context directory; defaults to '.'."
2392
2848
  },
2393
2849
  {
2394
2850
  "name": "buildArgs",
2395
2851
  "type": "object",
2396
2852
  "required": false,
2397
- "description": ""
2853
+ "description": "Build-time --build-arg values."
2398
2854
  }
2399
2855
  ],
2400
2856
  "responseShape": {
@@ -2406,61 +2862,110 @@
2406
2862
  },
2407
2863
  {
2408
2864
  "name": "run",
2409
- "description": "",
2865
+ "description": "Simulate starting a container from an image (in-memory backend).",
2410
2866
  "params": [
2411
2867
  {
2412
2868
  "name": "image",
2413
2869
  "type": "string",
2414
2870
  "required": true,
2415
- "description": ""
2871
+ "description": "Image to run (as built/tagged by the `build` action, or an arbitrary name)."
2416
2872
  },
2417
2873
  {
2418
2874
  "name": "name",
2419
2875
  "type": "string",
2420
2876
  "required": false,
2421
- "description": ""
2877
+ "description": "Container name; auto-generated when omitted."
2422
2878
  },
2423
2879
  {
2424
2880
  "name": "ports",
2425
2881
  "type": "array",
2426
2882
  "required": false,
2427
- "description": ""
2883
+ "description": "Host/container port mappings.",
2884
+ "items": {
2885
+ "type": "object",
2886
+ "properties": {
2887
+ "host": {
2888
+ "type": "number",
2889
+ "required": true
2890
+ },
2891
+ "container": {
2892
+ "type": "number",
2893
+ "required": true
2894
+ },
2895
+ "protocol": {
2896
+ "type": "string",
2897
+ "required": false
2898
+ }
2899
+ }
2900
+ }
2428
2901
  },
2429
2902
  {
2430
2903
  "name": "env",
2431
2904
  "type": "object",
2432
2905
  "required": false,
2433
- "description": ""
2906
+ "description": "Environment variables set inside the container."
2434
2907
  },
2435
2908
  {
2436
2909
  "name": "volumes",
2437
2910
  "type": "array",
2438
2911
  "required": false,
2439
- "description": ""
2912
+ "description": "Host/container path mounts.",
2913
+ "items": {
2914
+ "type": "object",
2915
+ "properties": {
2916
+ "host": {
2917
+ "type": "string",
2918
+ "required": true
2919
+ },
2920
+ "container": {
2921
+ "type": "string",
2922
+ "required": true
2923
+ }
2924
+ }
2925
+ }
2440
2926
  },
2441
2927
  {
2442
2928
  "name": "command",
2443
2929
  "type": "string",
2444
2930
  "required": false,
2445
- "description": ""
2931
+ "description": "Override command run inside the container."
2446
2932
  }
2447
2933
  ],
2448
2934
  "responseShape": {
2449
2935
  "containerId": "string",
2450
2936
  "name": "string",
2451
2937
  "status": "string",
2452
- "ports": "array"
2938
+ "ports": {
2939
+ "type": "array",
2940
+ "items": {
2941
+ "type": "object",
2942
+ "properties": {
2943
+ "host": {
2944
+ "type": "number",
2945
+ "required": true
2946
+ },
2947
+ "container": {
2948
+ "type": "number",
2949
+ "required": true
2950
+ },
2951
+ "protocol": {
2952
+ "type": "string",
2953
+ "required": true
2954
+ }
2955
+ }
2956
+ }
2957
+ }
2453
2958
  }
2454
2959
  },
2455
2960
  {
2456
2961
  "name": "stop",
2457
- "description": "",
2962
+ "description": "Stop a running (or paused) simulated container.",
2458
2963
  "params": [
2459
2964
  {
2460
2965
  "name": "containerId",
2461
2966
  "type": "string",
2462
2967
  "required": true,
2463
- "description": ""
2968
+ "description": "Container id, or a unique id prefix."
2464
2969
  }
2465
2970
  ],
2466
2971
  "responseShape": {
@@ -2471,19 +2976,19 @@
2471
2976
  },
2472
2977
  {
2473
2978
  "name": "remove",
2474
- "description": "",
2979
+ "description": "Remove a simulated container; fails if it is running unless `force` is set.",
2475
2980
  "params": [
2476
2981
  {
2477
2982
  "name": "containerId",
2478
2983
  "type": "string",
2479
2984
  "required": true,
2480
- "description": ""
2985
+ "description": "Container id, or a unique id prefix."
2481
2986
  },
2482
2987
  {
2483
2988
  "name": "force",
2484
2989
  "type": "boolean",
2485
2990
  "required": false,
2486
- "description": ""
2991
+ "description": "Remove even if the container is currently running."
2487
2992
  }
2488
2993
  ],
2489
2994
  "responseShape": {
@@ -2493,25 +2998,25 @@
2493
2998
  },
2494
2999
  {
2495
3000
  "name": "logs",
2496
- "description": "",
3001
+ "description": "Fetch generated log lines for a simulated container.",
2497
3002
  "params": [
2498
3003
  {
2499
3004
  "name": "containerId",
2500
3005
  "type": "string",
2501
3006
  "required": true,
2502
- "description": ""
3007
+ "description": "Container id, or a unique id prefix."
2503
3008
  },
2504
3009
  {
2505
3010
  "name": "tail",
2506
3011
  "type": "number",
2507
3012
  "required": false,
2508
- "description": ""
3013
+ "description": "Number of most-recent lines to return; defaults to 100."
2509
3014
  },
2510
3015
  {
2511
3016
  "name": "since",
2512
3017
  "type": "string",
2513
3018
  "required": false,
2514
- "description": ""
3019
+ "description": "Only lines timestamped at/after this ISO time."
2515
3020
  }
2516
3021
  ],
2517
3022
  "responseShape": {
@@ -2522,13 +3027,13 @@
2522
3027
  },
2523
3028
  {
2524
3029
  "name": "status",
2525
- "description": "",
3030
+ "description": "Fetch a simulated container's current status and metadata.",
2526
3031
  "params": [
2527
3032
  {
2528
3033
  "name": "containerId",
2529
3034
  "type": "string",
2530
3035
  "required": true,
2531
- "description": ""
3036
+ "description": "Container id, or a unique id prefix."
2532
3037
  }
2533
3038
  ],
2534
3039
  "responseShape": {
@@ -2536,7 +3041,26 @@
2536
3041
  "name": "string",
2537
3042
  "image": "string",
2538
3043
  "status": "string",
2539
- "ports": "array",
3044
+ "ports": {
3045
+ "type": "array",
3046
+ "items": {
3047
+ "type": "object",
3048
+ "properties": {
3049
+ "host": {
3050
+ "type": "number",
3051
+ "required": true
3052
+ },
3053
+ "container": {
3054
+ "type": "number",
3055
+ "required": true
3056
+ },
3057
+ "protocol": {
3058
+ "type": "string",
3059
+ "required": true
3060
+ }
3061
+ }
3062
+ }
3063
+ },
2540
3064
  "createdAt": "number",
2541
3065
  "startedAt": "number | null",
2542
3066
  "stoppedAt": "number | null"
@@ -2544,23 +3068,71 @@
2544
3068
  },
2545
3069
  {
2546
3070
  "name": "list",
2547
- "description": "",
3071
+ "description": "List simulated containers; by default only running ones (like `docker ps`).",
2548
3072
  "params": [
2549
3073
  {
2550
3074
  "name": "all",
2551
3075
  "type": "boolean",
2552
3076
  "required": false,
2553
- "description": ""
3077
+ "description": "Include stopped/exited containers, not just running ones."
2554
3078
  },
2555
3079
  {
2556
3080
  "name": "filterByLabel",
2557
3081
  "type": "string",
2558
3082
  "required": false,
2559
- "description": ""
3083
+ "description": "Filter by a `key` or `key=value` label match."
2560
3084
  }
2561
3085
  ],
2562
3086
  "responseShape": {
2563
- "containers": "array",
3087
+ "containers": {
3088
+ "type": "array",
3089
+ "items": {
3090
+ "type": "object",
3091
+ "properties": {
3092
+ "id": {
3093
+ "type": "string",
3094
+ "required": true
3095
+ },
3096
+ "name": {
3097
+ "type": "string",
3098
+ "required": true
3099
+ },
3100
+ "image": {
3101
+ "type": "string",
3102
+ "required": true
3103
+ },
3104
+ "status": {
3105
+ "type": "string",
3106
+ "required": true
3107
+ },
3108
+ "ports": {
3109
+ "type": "array",
3110
+ "required": true,
3111
+ "items": {
3112
+ "type": "object",
3113
+ "properties": {
3114
+ "host": {
3115
+ "type": "number",
3116
+ "required": true
3117
+ },
3118
+ "container": {
3119
+ "type": "number",
3120
+ "required": true
3121
+ },
3122
+ "protocol": {
3123
+ "type": "string",
3124
+ "required": true
3125
+ }
3126
+ }
3127
+ }
3128
+ },
3129
+ "createdAt": {
3130
+ "type": "number",
3131
+ "required": true
3132
+ }
3133
+ }
3134
+ }
3135
+ },
2564
3136
  "total": "number"
2565
3137
  }
2566
3138
  }
@@ -2583,25 +3155,25 @@
2583
3155
  "actions": [
2584
3156
  {
2585
3157
  "name": "query",
2586
- "description": "",
3158
+ "description": "Run a single read-only SELECT against a Postgres connection (write statements and multi-statement SQL are rejected before execution).",
2587
3159
  "params": [
2588
3160
  {
2589
3161
  "name": "connectionRef",
2590
3162
  "type": "string",
2591
3163
  "required": true,
2592
- "description": ""
3164
+ "description": "Env-var NAME whose value is the Postgres connection string — never the secret itself; resolved from the credential store/environment at run time."
2593
3165
  },
2594
3166
  {
2595
3167
  "name": "sql",
2596
3168
  "type": "string",
2597
3169
  "required": true,
2598
- "description": ""
3170
+ "description": "SQL text; must be exactly one SELECT statement."
2599
3171
  },
2600
3172
  {
2601
3173
  "name": "params",
2602
3174
  "type": "DatabaseQueryParamValue[]",
2603
3175
  "required": false,
2604
- "description": ""
3176
+ "description": "Positional bind parameters for the query."
2605
3177
  }
2606
3178
  ],
2607
3179
  "responseShape": {
@@ -2622,55 +3194,73 @@
2622
3194
  "actions": [
2623
3195
  {
2624
3196
  "name": "upload",
2625
- "description": "",
3197
+ "description": "Upload an object to an S3-compatible bucket (real S3/R2/MinIO backend when storage credentials are configured, in-memory dev fallback otherwise — refused in production). Admits either the canonical `key`+`content` pair or the file-form `file` payload (UploadDropZone's `{ name, size, type, content }` shape); when `file` is present its `key`/`content` are derived from it.",
2626
3198
  "params": [
2627
3199
  {
2628
3200
  "name": "bucket",
2629
3201
  "type": "string",
2630
3202
  "required": true,
2631
- "description": ""
3203
+ "description": "Target bucket; defaults to STORAGE_BUCKET."
2632
3204
  },
2633
3205
  {
2634
3206
  "name": "key",
2635
3207
  "type": "string",
2636
3208
  "required": false,
2637
- "description": ""
3209
+ "description": "Object key to store under (canonical shape); ignored when `file` is present."
2638
3210
  },
2639
3211
  {
2640
3212
  "name": "content",
2641
3213
  "type": "string",
2642
3214
  "required": false,
2643
- "description": ""
3215
+ "description": "Object content as a base64 data URL, raw base64, or plain text (canonical shape); ignored when `file` is present."
2644
3216
  },
2645
3217
  {
2646
3218
  "name": "contentType",
2647
3219
  "type": "string",
2648
3220
  "required": false,
2649
- "description": ""
3221
+ "description": "MIME type override for the canonical shape; inferred from a data URL when omitted."
2650
3222
  },
2651
3223
  {
2652
3224
  "name": "file",
2653
3225
  "type": "object",
2654
3226
  "required": false,
2655
- "description": ""
3227
+ "description": "File-form upload payload (as emitted by UploadDropZone); `content` is a base64 data URL.",
3228
+ "properties": {
3229
+ "name": {
3230
+ "type": "string",
3231
+ "required": true
3232
+ },
3233
+ "size": {
3234
+ "type": "number",
3235
+ "required": true
3236
+ },
3237
+ "type": {
3238
+ "type": "string",
3239
+ "required": true
3240
+ },
3241
+ "content": {
3242
+ "type": "string",
3243
+ "required": false
3244
+ }
3245
+ }
2656
3246
  },
2657
3247
  {
2658
3248
  "name": "acl",
2659
3249
  "type": "'public' | 'private'",
2660
3250
  "required": false,
2661
- "description": ""
3251
+ "description": "Object ACL — 'public' produces a public URL, otherwise the URL is signed/private."
2662
3252
  },
2663
3253
  {
2664
3254
  "name": "maxSize",
2665
3255
  "type": "number",
2666
3256
  "required": false,
2667
- "description": ""
3257
+ "description": "Reject the upload if the file-form payload's declared size exceeds this many bytes."
2668
3258
  },
2669
3259
  {
2670
3260
  "name": "metadata",
2671
3261
  "type": "IntegrationParams",
2672
3262
  "required": false,
2673
- "description": ""
3263
+ "description": "Arbitrary metadata stored alongside the object (in-memory backend only)."
2674
3264
  }
2675
3265
  ],
2676
3266
  "responseShape": {
@@ -2680,57 +3270,110 @@
2680
3270
  "etag": "string",
2681
3271
  "id": "string",
2682
3272
  "url": "string"
2683
- }
3273
+ },
3274
+ "synonyms": "upload file, upload object"
2684
3275
  },
2685
3276
  {
2686
3277
  "name": "uploadMany",
2687
- "description": "",
3278
+ "description": "Upload a whole UploadDropZone batch in one call, one item per file — the FSM-friendly shape for bulk-persisting uploaded-file rows.",
2688
3279
  "params": [
2689
3280
  {
2690
3281
  "name": "bucket",
2691
3282
  "type": "string",
2692
3283
  "required": true,
2693
- "description": ""
3284
+ "description": "Target bucket; defaults to STORAGE_BUCKET."
2694
3285
  },
2695
3286
  {
2696
3287
  "name": "files",
2697
3288
  "type": "array",
2698
3289
  "required": true,
2699
- "description": ""
3290
+ "description": "Files to upload, in UploadDropZone's `{ name, size, type, content }` shape.",
3291
+ "items": {
3292
+ "type": "object",
3293
+ "properties": {
3294
+ "name": {
3295
+ "type": "string",
3296
+ "required": true
3297
+ },
3298
+ "size": {
3299
+ "type": "number",
3300
+ "required": true
3301
+ },
3302
+ "type": {
3303
+ "type": "string",
3304
+ "required": true
3305
+ },
3306
+ "content": {
3307
+ "type": "string",
3308
+ "required": false
3309
+ }
3310
+ }
3311
+ }
2700
3312
  },
2701
3313
  {
2702
3314
  "name": "acl",
2703
3315
  "type": "'public' | 'private'",
2704
3316
  "required": false,
2705
- "description": ""
3317
+ "description": "Object ACL applied to every file in the batch."
2706
3318
  },
2707
3319
  {
2708
3320
  "name": "maxSize",
2709
3321
  "type": "number",
2710
3322
  "required": false,
2711
- "description": ""
3323
+ "description": "Reject any file whose declared size exceeds this many bytes."
2712
3324
  }
2713
3325
  ],
2714
3326
  "responseShape": {
2715
- "items": "array",
3327
+ "items": {
3328
+ "type": "array",
3329
+ "items": {
3330
+ "type": "object",
3331
+ "properties": {
3332
+ "id": {
3333
+ "type": "string",
3334
+ "required": true
3335
+ },
3336
+ "key": {
3337
+ "type": "string",
3338
+ "required": true
3339
+ },
3340
+ "url": {
3341
+ "type": "string",
3342
+ "required": true
3343
+ },
3344
+ "name": {
3345
+ "type": "string",
3346
+ "required": true
3347
+ },
3348
+ "sizeBytes": {
3349
+ "type": "number",
3350
+ "required": true
3351
+ },
3352
+ "mimeType": {
3353
+ "type": "string",
3354
+ "required": true
3355
+ }
3356
+ }
3357
+ }
3358
+ },
2716
3359
  "count": "number"
2717
3360
  }
2718
3361
  },
2719
3362
  {
2720
3363
  "name": "download",
2721
- "description": "",
3364
+ "description": "Download an object's content, base64-encoded.",
2722
3365
  "params": [
2723
3366
  {
2724
3367
  "name": "bucket",
2725
3368
  "type": "string",
2726
3369
  "required": true,
2727
- "description": ""
3370
+ "description": "Bucket the object lives in; defaults to STORAGE_BUCKET."
2728
3371
  },
2729
3372
  {
2730
3373
  "name": "key",
2731
3374
  "type": "string",
2732
3375
  "required": true,
2733
- "description": ""
3376
+ "description": "Object key."
2734
3377
  }
2735
3378
  ],
2736
3379
  "responseShape": {
@@ -2742,54 +3385,73 @@
2742
3385
  },
2743
3386
  {
2744
3387
  "name": "list",
2745
- "description": "",
3388
+ "description": "List object keys in a bucket, optionally prefix-filtered, one page at a time.",
2746
3389
  "params": [
2747
3390
  {
2748
3391
  "name": "bucket",
2749
3392
  "type": "string",
2750
3393
  "required": true,
2751
- "description": ""
3394
+ "description": "Bucket to list; defaults to STORAGE_BUCKET."
2752
3395
  },
2753
3396
  {
2754
3397
  "name": "prefix",
2755
3398
  "type": "string",
2756
3399
  "required": false,
2757
- "description": ""
3400
+ "description": "Only keys starting with this prefix."
2758
3401
  },
2759
3402
  {
2760
3403
  "name": "maxKeys",
2761
3404
  "type": "number",
2762
3405
  "required": false,
2763
- "description": ""
3406
+ "description": "Maximum keys per page; defaults to 1000."
2764
3407
  },
2765
3408
  {
2766
3409
  "name": "continuationToken",
2767
3410
  "type": "string",
2768
3411
  "required": false,
2769
- "description": ""
3412
+ "description": "Pagination token from a previous call's `nextToken`."
2770
3413
  }
2771
3414
  ],
2772
3415
  "responseShape": {
2773
- "keys": "array",
3416
+ "keys": {
3417
+ "type": "array",
3418
+ "items": {
3419
+ "type": "object",
3420
+ "properties": {
3421
+ "key": {
3422
+ "type": "string",
3423
+ "required": true
3424
+ },
3425
+ "size": {
3426
+ "type": "number",
3427
+ "required": true
3428
+ },
3429
+ "lastModified": {
3430
+ "type": "number",
3431
+ "required": true
3432
+ }
3433
+ }
3434
+ }
3435
+ },
2774
3436
  "truncated": "boolean",
2775
3437
  "nextToken": "string"
2776
3438
  }
2777
3439
  },
2778
3440
  {
2779
3441
  "name": "delete",
2780
- "description": "",
3442
+ "description": "Delete an object from a bucket.",
2781
3443
  "params": [
2782
3444
  {
2783
3445
  "name": "bucket",
2784
3446
  "type": "string",
2785
3447
  "required": true,
2786
- "description": ""
3448
+ "description": "Bucket the object lives in; defaults to STORAGE_BUCKET."
2787
3449
  },
2788
3450
  {
2789
3451
  "name": "key",
2790
3452
  "type": "string",
2791
3453
  "required": true,
2792
- "description": ""
3454
+ "description": "Object key to delete."
2793
3455
  }
2794
3456
  ],
2795
3457
  "responseShape": {
@@ -2798,31 +3460,31 @@
2798
3460
  },
2799
3461
  {
2800
3462
  "name": "getSignedUrl",
2801
- "description": "",
3463
+ "description": "Generate a time-limited pre-signed URL for direct GET or PUT access to an object.",
2802
3464
  "params": [
2803
3465
  {
2804
3466
  "name": "bucket",
2805
3467
  "type": "string",
2806
3468
  "required": true,
2807
- "description": ""
3469
+ "description": "Bucket the object lives in; defaults to STORAGE_BUCKET."
2808
3470
  },
2809
3471
  {
2810
3472
  "name": "key",
2811
3473
  "type": "string",
2812
3474
  "required": true,
2813
- "description": ""
3475
+ "description": "Object key."
2814
3476
  },
2815
3477
  {
2816
3478
  "name": "expiresIn",
2817
3479
  "type": "number",
2818
3480
  "required": false,
2819
- "description": ""
3481
+ "description": "URL validity window in seconds; defaults to 3600."
2820
3482
  },
2821
3483
  {
2822
3484
  "name": "operation",
2823
3485
  "type": "'get' | 'put'",
2824
3486
  "required": false,
2825
- "description": ""
3487
+ "description": "Whether the URL authorizes a read or a write; defaults to 'get'."
2826
3488
  }
2827
3489
  ],
2828
3490
  "responseShape": {
@@ -2874,31 +3536,31 @@
2874
3536
  "actions": [
2875
3537
  {
2876
3538
  "name": "enqueue",
2877
- "description": "",
3539
+ "description": "Add a job to an in-memory job queue, ordered by priority (higher first) among ready jobs.",
2878
3540
  "params": [
2879
3541
  {
2880
3542
  "name": "queue",
2881
3543
  "type": "string",
2882
3544
  "required": true,
2883
- "description": ""
3545
+ "description": "Queue name."
2884
3546
  },
2885
3547
  {
2886
3548
  "name": "payload",
2887
3549
  "type": "ServiceParams",
2888
3550
  "required": true,
2889
- "description": ""
3551
+ "description": "Arbitrary job payload."
2890
3552
  },
2891
3553
  {
2892
3554
  "name": "delay",
2893
3555
  "type": "number",
2894
3556
  "required": false,
2895
- "description": ""
3557
+ "description": "Delay before the job becomes eligible for dequeue, in milliseconds."
2896
3558
  },
2897
3559
  {
2898
3560
  "name": "priority",
2899
3561
  "type": "number",
2900
3562
  "required": false,
2901
- "description": ""
3563
+ "description": "Priority — higher values are dequeued before lower ones."
2902
3564
  }
2903
3565
  ],
2904
3566
  "responseShape": {
@@ -2908,13 +3570,13 @@
2908
3570
  },
2909
3571
  {
2910
3572
  "name": "dequeue",
2911
- "description": "",
3573
+ "description": "Pop the highest-priority pending job whose delay has elapsed, marking it 'processing'; returns null if none is ready.",
2912
3574
  "params": [
2913
3575
  {
2914
3576
  "name": "queue",
2915
3577
  "type": "string",
2916
3578
  "required": true,
2917
- "description": ""
3579
+ "description": "Queue name."
2918
3580
  }
2919
3581
  ],
2920
3582
  "responseShape": {
@@ -2923,13 +3585,13 @@
2923
3585
  },
2924
3586
  {
2925
3587
  "name": "status",
2926
- "description": "",
3588
+ "description": "Look up a job's current status by id.",
2927
3589
  "params": [
2928
3590
  {
2929
3591
  "name": "jobId",
2930
3592
  "type": "string",
2931
3593
  "required": true,
2932
- "description": ""
3594
+ "description": "Job id from enqueue."
2933
3595
  }
2934
3596
  ],
2935
3597
  "responseShape": {
@@ -2939,19 +3601,19 @@
2939
3601
  },
2940
3602
  {
2941
3603
  "name": "complete",
2942
- "description": "",
3604
+ "description": "Mark a 'processing' job completed and store its result; no-op (returns false) if the job isn't in 'processing' state.",
2943
3605
  "params": [
2944
3606
  {
2945
3607
  "name": "jobId",
2946
3608
  "type": "string",
2947
3609
  "required": true,
2948
- "description": ""
3610
+ "description": "Job id."
2949
3611
  },
2950
3612
  {
2951
3613
  "name": "result",
2952
3614
  "type": "ServiceParams",
2953
3615
  "required": false,
2954
- "description": ""
3616
+ "description": "Result payload to attach to the job."
2955
3617
  }
2956
3618
  ],
2957
3619
  "responseShape": {
@@ -2960,19 +3622,19 @@
2960
3622
  },
2961
3623
  {
2962
3624
  "name": "fail",
2963
- "description": "",
3625
+ "description": "Mark a 'processing' job failed; no-op (returns false) if the job isn't in 'processing' state.",
2964
3626
  "params": [
2965
3627
  {
2966
3628
  "name": "jobId",
2967
3629
  "type": "string",
2968
3630
  "required": true,
2969
- "description": ""
3631
+ "description": "Job id."
2970
3632
  },
2971
3633
  {
2972
3634
  "name": "error",
2973
3635
  "type": "string",
2974
3636
  "required": false,
2975
- "description": ""
3637
+ "description": "Failure reason to attach to the job."
2976
3638
  }
2977
3639
  ],
2978
3640
  "responseShape": {
@@ -2981,13 +3643,13 @@
2981
3643
  },
2982
3644
  {
2983
3645
  "name": "cancel",
2984
- "description": "",
3646
+ "description": "Remove a 'pending' job from its queue; no-op (returns false) once it has been dequeued.",
2985
3647
  "params": [
2986
3648
  {
2987
3649
  "name": "jobId",
2988
3650
  "type": "string",
2989
3651
  "required": true,
2990
- "description": ""
3652
+ "description": "Job id."
2991
3653
  }
2992
3654
  ],
2993
3655
  "responseShape": {
@@ -2996,13 +3658,13 @@
2996
3658
  },
2997
3659
  {
2998
3660
  "name": "size",
2999
- "description": "",
3661
+ "description": "Count pending and processing jobs in a queue.",
3000
3662
  "params": [
3001
3663
  {
3002
3664
  "name": "queue",
3003
3665
  "type": "string",
3004
3666
  "required": true,
3005
- "description": ""
3667
+ "description": "Queue name."
3006
3668
  }
3007
3669
  ],
3008
3670
  "responseShape": {
@@ -3030,13 +3692,13 @@
3030
3692
  "actions": [
3031
3693
  {
3032
3694
  "name": "get",
3033
- "description": "",
3695
+ "description": "Read a key's value from the in-memory cache; returns null (as `value`) if absent or expired.",
3034
3696
  "params": [
3035
3697
  {
3036
3698
  "name": "key",
3037
3699
  "type": "string",
3038
3700
  "required": true,
3039
- "description": ""
3701
+ "description": "Cache key."
3040
3702
  }
3041
3703
  ],
3042
3704
  "responseShape": {
@@ -3045,25 +3707,25 @@
3045
3707
  },
3046
3708
  {
3047
3709
  "name": "set",
3048
- "description": "",
3710
+ "description": "Write a key's value, optionally with an expiry.",
3049
3711
  "params": [
3050
3712
  {
3051
3713
  "name": "key",
3052
3714
  "type": "string",
3053
3715
  "required": true,
3054
- "description": ""
3716
+ "description": "Cache key."
3055
3717
  },
3056
3718
  {
3057
3719
  "name": "value",
3058
3720
  "type": "ServiceParams",
3059
3721
  "required": true,
3060
- "description": ""
3722
+ "description": "Value to store."
3061
3723
  },
3062
3724
  {
3063
3725
  "name": "ttl",
3064
3726
  "type": "number",
3065
3727
  "required": false,
3066
- "description": ""
3728
+ "description": "Time-to-live in seconds; omit for no expiry."
3067
3729
  }
3068
3730
  ],
3069
3731
  "responseShape": {
@@ -3072,13 +3734,13 @@
3072
3734
  },
3073
3735
  {
3074
3736
  "name": "delete",
3075
- "description": "",
3737
+ "description": "Delete a key.",
3076
3738
  "params": [
3077
3739
  {
3078
3740
  "name": "key",
3079
3741
  "type": "string",
3080
3742
  "required": true,
3081
- "description": ""
3743
+ "description": "Cache key."
3082
3744
  }
3083
3745
  ],
3084
3746
  "responseShape": {
@@ -3087,19 +3749,19 @@
3087
3749
  },
3088
3750
  {
3089
3751
  "name": "lock",
3090
- "description": "",
3752
+ "description": "Acquire a mutex on a key; fails (returns acquired:false) if another lock on the key is still alive.",
3091
3753
  "params": [
3092
3754
  {
3093
3755
  "name": "key",
3094
3756
  "type": "string",
3095
3757
  "required": true,
3096
- "description": ""
3758
+ "description": "Lock key."
3097
3759
  },
3098
3760
  {
3099
3761
  "name": "ttl",
3100
3762
  "type": "number",
3101
3763
  "required": false,
3102
- "description": ""
3764
+ "description": "Lock time-to-live in milliseconds; defaults to 30000 (30s)."
3103
3765
  }
3104
3766
  ],
3105
3767
  "responseShape": {
@@ -3109,19 +3771,19 @@
3109
3771
  },
3110
3772
  {
3111
3773
  "name": "unlock",
3112
- "description": "",
3774
+ "description": "Release a lock; only succeeds when `lockId` matches the current holder.",
3113
3775
  "params": [
3114
3776
  {
3115
3777
  "name": "key",
3116
3778
  "type": "string",
3117
3779
  "required": true,
3118
- "description": ""
3780
+ "description": "Lock key."
3119
3781
  },
3120
3782
  {
3121
3783
  "name": "lockId",
3122
3784
  "type": "string",
3123
3785
  "required": true,
3124
- "description": ""
3786
+ "description": "Lock id returned by the corresponding `lock` call."
3125
3787
  }
3126
3788
  ],
3127
3789
  "responseShape": {
@@ -3130,19 +3792,19 @@
3130
3792
  },
3131
3793
  {
3132
3794
  "name": "increment",
3133
- "description": "",
3795
+ "description": "Atomically add to a numeric key's value (creating it at 0 if absent), preserving any existing TTL.",
3134
3796
  "params": [
3135
3797
  {
3136
3798
  "name": "key",
3137
3799
  "type": "string",
3138
3800
  "required": true,
3139
- "description": ""
3801
+ "description": "Cache key."
3140
3802
  },
3141
3803
  {
3142
3804
  "name": "by",
3143
3805
  "type": "number",
3144
3806
  "required": false,
3145
- "description": ""
3807
+ "description": "Amount to add; defaults to 1 (can be negative to decrement)."
3146
3808
  }
3147
3809
  ],
3148
3810
  "responseShape": {
@@ -3151,19 +3813,19 @@
3151
3813
  },
3152
3814
  {
3153
3815
  "name": "expire",
3154
- "description": "",
3816
+ "description": "Set (or reset) a key's expiry; no-op (returns set:false) if the key doesn't exist or is already expired.",
3155
3817
  "params": [
3156
3818
  {
3157
3819
  "name": "key",
3158
3820
  "type": "string",
3159
3821
  "required": true,
3160
- "description": ""
3822
+ "description": "Cache key."
3161
3823
  },
3162
3824
  {
3163
3825
  "name": "ttl",
3164
3826
  "type": "number",
3165
3827
  "required": true,
3166
- "description": ""
3828
+ "description": "New time-to-live in seconds."
3167
3829
  }
3168
3830
  ],
3169
3831
  "responseShape": {
@@ -3172,19 +3834,19 @@
3172
3834
  },
3173
3835
  {
3174
3836
  "name": "publish",
3175
- "description": "",
3837
+ "description": "Publish a message to a channel; delivered synchronously to in-process subscriber callbacks only.",
3176
3838
  "params": [
3177
3839
  {
3178
3840
  "name": "channel",
3179
3841
  "type": "string",
3180
3842
  "required": true,
3181
- "description": ""
3843
+ "description": "Channel name."
3182
3844
  },
3183
3845
  {
3184
3846
  "name": "message",
3185
3847
  "type": "ServiceParams",
3186
3848
  "required": true,
3187
- "description": ""
3849
+ "description": "Message payload."
3188
3850
  }
3189
3851
  ],
3190
3852
  "responseShape": {
@@ -3193,13 +3855,13 @@
3193
3855
  },
3194
3856
  {
3195
3857
  "name": "subscribe",
3196
- "description": "",
3858
+ "description": "Register interest in a channel; does not itself wire a callback (that happens at a higher-level API).",
3197
3859
  "params": [
3198
3860
  {
3199
3861
  "name": "channel",
3200
3862
  "type": "string",
3201
3863
  "required": true,
3202
- "description": ""
3864
+ "description": "Channel name."
3203
3865
  }
3204
3866
  ],
3205
3867
  "responseShape": {
@@ -3225,25 +3887,25 @@
3225
3887
  "actions": [
3226
3888
  {
3227
3889
  "name": "authorize",
3228
- "description": "",
3890
+ "description": "Build the provider authorization URL (PKCE + state) for an OAuth/OIDC login redirect; real OIDC discovery when OAUTH_CLIENT_ID/SECRET are configured, an in-memory mock otherwise.",
3229
3891
  "params": [
3230
3892
  {
3231
3893
  "name": "provider",
3232
3894
  "type": "'google' | 'github' | 'auth0'",
3233
3895
  "required": true,
3234
- "description": ""
3896
+ "description": "Identity provider; OIDC issuer defaults to Google unless OIDC_ISSUER_URL overrides it."
3235
3897
  },
3236
3898
  {
3237
3899
  "name": "scopes",
3238
3900
  "type": "string[]",
3239
3901
  "required": true,
3240
- "description": ""
3902
+ "description": "OAuth scopes to request."
3241
3903
  },
3242
3904
  {
3243
3905
  "name": "redirectUri",
3244
3906
  "type": "string",
3245
3907
  "required": true,
3246
- "description": ""
3908
+ "description": "Callback URL the provider redirects back to after consent."
3247
3909
  }
3248
3910
  ],
3249
3911
  "responseShape": {
@@ -3253,19 +3915,19 @@
3253
3915
  },
3254
3916
  {
3255
3917
  "name": "token",
3256
- "description": "",
3918
+ "description": "Exchange an authorization code for tokens, consuming the one-time-use `state` from the matching `authorize` call.",
3257
3919
  "params": [
3258
3920
  {
3259
3921
  "name": "code",
3260
3922
  "type": "string",
3261
3923
  "required": true,
3262
- "description": ""
3924
+ "description": "Authorization code from the provider's redirect callback."
3263
3925
  },
3264
3926
  {
3265
3927
  "name": "state",
3266
3928
  "type": "string",
3267
3929
  "required": true,
3268
- "description": ""
3930
+ "description": "The `state` value returned by `authorize`."
3269
3931
  }
3270
3932
  ],
3271
3933
  "responseShape": {
@@ -3277,13 +3939,13 @@
3277
3939
  },
3278
3940
  {
3279
3941
  "name": "refresh",
3280
- "description": "",
3942
+ "description": "Exchange a refresh token for a new access token.",
3281
3943
  "params": [
3282
3944
  {
3283
3945
  "name": "refreshToken",
3284
3946
  "type": "string",
3285
3947
  "required": true,
3286
- "description": ""
3948
+ "description": "Refresh token from a prior `token` call."
3287
3949
  }
3288
3950
  ],
3289
3951
  "responseShape": {
@@ -3293,13 +3955,13 @@
3293
3955
  },
3294
3956
  {
3295
3957
  "name": "revoke",
3296
- "description": "",
3958
+ "description": "Revoke an access or refresh token.",
3297
3959
  "params": [
3298
3960
  {
3299
3961
  "name": "token",
3300
3962
  "type": "string",
3301
3963
  "required": true,
3302
- "description": ""
3964
+ "description": "The access or refresh token to revoke."
3303
3965
  }
3304
3966
  ],
3305
3967
  "responseShape": {
@@ -3308,13 +3970,13 @@
3308
3970
  },
3309
3971
  {
3310
3972
  "name": "userinfo",
3311
- "description": "",
3973
+ "description": "Fetch the authenticated user's profile claims for an access token.",
3312
3974
  "params": [
3313
3975
  {
3314
3976
  "name": "accessToken",
3315
3977
  "type": "string",
3316
3978
  "required": true,
3317
- "description": ""
3979
+ "description": "Access token from a prior `token`/`refresh` call."
3318
3980
  }
3319
3981
  ],
3320
3982
  "responseShape": {
@@ -3358,41 +4020,76 @@
3358
4020
  "actions": [
3359
4021
  {
3360
4022
  "name": "list",
3361
- "description": "",
4023
+ "description": "List declared credentials and their masked (last-4) configuration status; open to any caller.",
3362
4024
  "params": [
3363
4025
  {
3364
4026
  "name": "service",
3365
4027
  "type": "string",
3366
4028
  "required": false,
3367
- "description": ""
4029
+ "description": "Restrict the listing to one service's declared credentials; omit for all services."
3368
4030
  }
3369
4031
  ],
3370
4032
  "responseShape": {
3371
4033
  "enabled": "boolean",
3372
- "entries": "array"
4034
+ "entries": {
4035
+ "type": "array",
4036
+ "items": {
4037
+ "type": "object",
4038
+ "properties": {
4039
+ "service": {
4040
+ "type": "string",
4041
+ "required": true
4042
+ },
4043
+ "envVar": {
4044
+ "type": "string",
4045
+ "required": true
4046
+ },
4047
+ "required": {
4048
+ "type": "boolean",
4049
+ "required": true
4050
+ },
4051
+ "description": {
4052
+ "type": "string",
4053
+ "required": true
4054
+ },
4055
+ "configured": {
4056
+ "type": "boolean",
4057
+ "required": true
4058
+ },
4059
+ "source": {
4060
+ "type": "'store' | 'env' | 'none'",
4061
+ "required": true
4062
+ },
4063
+ "last4": {
4064
+ "type": "string",
4065
+ "required": true
4066
+ }
4067
+ }
4068
+ }
4069
+ }
3373
4070
  }
3374
4071
  },
3375
4072
  {
3376
4073
  "name": "set",
3377
- "description": "",
4074
+ "description": "Save a credential value into the hosted store; the env var must be one declared for the service (or a well-formed connection-ref name for `database`). Admin/owner role required.",
3378
4075
  "params": [
3379
4076
  {
3380
4077
  "name": "service",
3381
4078
  "type": "string",
3382
4079
  "required": true,
3383
- "description": ""
4080
+ "description": "Integration name the credential belongs to."
3384
4081
  },
3385
4082
  {
3386
4083
  "name": "envVar",
3387
4084
  "type": "string",
3388
4085
  "required": true,
3389
- "description": ""
4086
+ "description": "Declared env-var name being set."
3390
4087
  },
3391
4088
  {
3392
4089
  "name": "value",
3393
4090
  "type": "string",
3394
4091
  "required": true,
3395
- "description": ""
4092
+ "description": "Secret value to store; never logged."
3396
4093
  }
3397
4094
  ],
3398
4095
  "responseShape": {
@@ -3404,19 +4101,19 @@
3404
4101
  },
3405
4102
  {
3406
4103
  "name": "remove",
3407
- "description": "",
4104
+ "description": "Delete a stored credential from the hosted store. Admin/owner role required.",
3408
4105
  "params": [
3409
4106
  {
3410
4107
  "name": "service",
3411
4108
  "type": "string",
3412
4109
  "required": true,
3413
- "description": ""
4110
+ "description": "Integration name the credential belongs to."
3414
4111
  },
3415
4112
  {
3416
4113
  "name": "envVar",
3417
4114
  "type": "string",
3418
4115
  "required": true,
3419
- "description": ""
4116
+ "description": "Env-var name to remove."
3420
4117
  }
3421
4118
  ],
3422
4119
  "responseShape": {
@@ -3425,13 +4122,13 @@
3425
4122
  },
3426
4123
  {
3427
4124
  "name": "test",
3428
- "description": "",
4125
+ "description": "Check whether a service's required credentials are present and, if a live probe is declared for it, exercise the service to confirm they actually work. Admin/owner role required.",
3429
4126
  "params": [
3430
4127
  {
3431
4128
  "name": "service",
3432
4129
  "type": "string",
3433
4130
  "required": true,
3434
- "description": ""
4131
+ "description": "Integration name to test."
3435
4132
  }
3436
4133
  ],
3437
4134
  "responseShape": {
@@ -3445,7 +4142,7 @@
3445
4142
  },
3446
4143
  {
3447
4144
  "name": "rotate",
3448
- "description": "",
4145
+ "description": "Re-encrypt all stored credentials under the current master key (ALMADAR_CREDENTIAL_MASTER_KEY), retiring ALMADAR_CREDENTIAL_MASTER_KEY_PREVIOUS. Admin/owner role required.",
3449
4146
  "params": [],
3450
4147
  "responseShape": {
3451
4148
  "rotated": "number",
@@ -3477,25 +4174,25 @@
3477
4174
  "actions": [
3478
4175
  {
3479
4176
  "name": "startSpan",
3480
- "description": "",
4177
+ "description": "Start a trace span (in-memory backend — no OpenTelemetry SDK/exporter).",
3481
4178
  "params": [
3482
4179
  {
3483
4180
  "name": "name",
3484
4181
  "type": "string",
3485
4182
  "required": true,
3486
- "description": ""
4183
+ "description": "Span name."
3487
4184
  },
3488
4185
  {
3489
4186
  "name": "attributes",
3490
4187
  "type": "IntegrationParams",
3491
4188
  "required": false,
3492
- "description": ""
4189
+ "description": "Key-value attributes attached to the span."
3493
4190
  },
3494
4191
  {
3495
4192
  "name": "traceId",
3496
4193
  "type": "string",
3497
4194
  "required": false,
3498
- "description": ""
4195
+ "description": "Existing trace id to attach this span to; a new one is generated when omitted."
3499
4196
  }
3500
4197
  ],
3501
4198
  "responseShape": {
@@ -3505,19 +4202,19 @@
3505
4202
  },
3506
4203
  {
3507
4204
  "name": "endSpan",
3508
- "description": "",
4205
+ "description": "Mark a span ended, optionally recording its final status; no-op (returns ended:false) for an unknown span id.",
3509
4206
  "params": [
3510
4207
  {
3511
4208
  "name": "spanId",
3512
4209
  "type": "string",
3513
4210
  "required": true,
3514
- "description": ""
4211
+ "description": "Span id from startSpan."
3515
4212
  },
3516
4213
  {
3517
4214
  "name": "status",
3518
4215
  "type": "'ok' | 'error'",
3519
4216
  "required": false,
3520
- "description": ""
4217
+ "description": "Final span status."
3521
4218
  }
3522
4219
  ],
3523
4220
  "responseShape": {
@@ -3526,25 +4223,25 @@
3526
4223
  },
3527
4224
  {
3528
4225
  "name": "addEvent",
3529
- "description": "",
4226
+ "description": "Attach a timestamped event to an open span; no-op (returns added:false) for an unknown span id.",
3530
4227
  "params": [
3531
4228
  {
3532
4229
  "name": "spanId",
3533
4230
  "type": "string",
3534
4231
  "required": true,
3535
- "description": ""
4232
+ "description": "Span id from startSpan."
3536
4233
  },
3537
4234
  {
3538
4235
  "name": "name",
3539
4236
  "type": "string",
3540
4237
  "required": true,
3541
- "description": ""
4238
+ "description": "Event name."
3542
4239
  },
3543
4240
  {
3544
4241
  "name": "attributes",
3545
4242
  "type": "IntegrationParams",
3546
4243
  "required": false,
3547
- "description": ""
4244
+ "description": "Key-value attributes attached to the event."
3548
4245
  }
3549
4246
  ],
3550
4247
  "responseShape": {
@@ -3553,31 +4250,31 @@
3553
4250
  },
3554
4251
  {
3555
4252
  "name": "recordMetric",
3556
- "description": "",
4253
+ "description": "Record a metric sample: counters accumulate, gauges overwrite, histograms append to the sample list.",
3557
4254
  "params": [
3558
4255
  {
3559
4256
  "name": "name",
3560
4257
  "type": "string",
3561
4258
  "required": true,
3562
- "description": ""
4259
+ "description": "Metric name."
3563
4260
  },
3564
4261
  {
3565
4262
  "name": "value",
3566
4263
  "type": "number",
3567
4264
  "required": true,
3568
- "description": ""
4265
+ "description": "Sample value."
3569
4266
  },
3570
4267
  {
3571
4268
  "name": "type",
3572
4269
  "type": "'counter' | 'gauge' | 'histogram'",
3573
4270
  "required": false,
3574
- "description": ""
4271
+ "description": "Aggregation kind; defaults to 'counter'."
3575
4272
  },
3576
4273
  {
3577
4274
  "name": "labels",
3578
4275
  "type": "IntegrationParams",
3579
4276
  "required": false,
3580
- "description": ""
4277
+ "description": "Key-value labels attached to the metric (replaces prior labels on the same name)."
3581
4278
  }
3582
4279
  ],
3583
4280
  "responseShape": {
@@ -3586,20 +4283,20 @@
3586
4283
  },
3587
4284
  {
3588
4285
  "name": "getSpan",
3589
- "description": "",
4286
+ "description": "Fetch a stored span's full record by id; null if unknown.",
3590
4287
  "params": [
3591
4288
  {
3592
4289
  "name": "spanId",
3593
4290
  "type": "string",
3594
4291
  "required": true,
3595
- "description": ""
4292
+ "description": "Span id from startSpan."
3596
4293
  }
3597
4294
  ],
3598
4295
  "responseShape": {}
3599
4296
  },
3600
4297
  {
3601
4298
  "name": "getMetrics",
3602
- "description": "",
4299
+ "description": "Fetch all recorded metrics, keyed by metric name.",
3603
4300
  "params": [],
3604
4301
  "responseShape": {}
3605
4302
  }
@@ -3627,13 +4324,13 @@
3627
4324
  "actions": [
3628
4325
  {
3629
4326
  "name": "validate",
3630
- "description": "",
4327
+ "description": "Validate an orbital schema by writing it to a temp file and shelling out to `npx",
3631
4328
  "params": [
3632
4329
  {
3633
4330
  "name": "schema",
3634
4331
  "type": "string",
3635
4332
  "required": true,
3636
- "description": ""
4333
+ "description": "Raw .orb schema content to validate."
3637
4334
  }
3638
4335
  ],
3639
4336
  "responseShape": {
@@ -3656,31 +4353,31 @@
3656
4353
  "actions": [
3657
4354
  {
3658
4355
  "name": "sendMessage",
3659
- "description": "",
4356
+ "description": "Send a chat message to the DeepAgent server (POST /api/agent/message), continuing an existing thread or starting one.",
3660
4357
  "params": [
3661
4358
  {
3662
4359
  "name": "message",
3663
4360
  "type": "string",
3664
4361
  "required": true,
3665
- "description": ""
4362
+ "description": "Message text."
3666
4363
  },
3667
4364
  {
3668
4365
  "name": "threadId",
3669
4366
  "type": "string",
3670
4367
  "required": false,
3671
- "description": ""
4368
+ "description": "Existing thread id to continue; a new thread starts when omitted."
3672
4369
  },
3673
4370
  {
3674
4371
  "name": "skill",
3675
4372
  "type": "string",
3676
4373
  "required": false,
3677
- "description": ""
4374
+ "description": "Named skill to invoke for this message."
3678
4375
  },
3679
4376
  {
3680
4377
  "name": "context",
3681
4378
  "type": "IntegrationParams",
3682
4379
  "required": false,
3683
- "description": ""
4380
+ "description": "Extra context passed through to the agent."
3684
4381
  }
3685
4382
  ],
3686
4383
  "responseShape": {
@@ -3690,13 +4387,13 @@
3690
4387
  },
3691
4388
  {
3692
4389
  "name": "cancelGeneration",
3693
- "description": "",
4390
+ "description": "Cancel an in-flight generation on a DeepAgent thread (POST /api/agent/cancel).",
3694
4391
  "params": [
3695
4392
  {
3696
4393
  "name": "threadId",
3697
4394
  "type": "string",
3698
4395
  "required": true,
3699
- "description": ""
4396
+ "description": "Thread whose generation to cancel."
3700
4397
  }
3701
4398
  ],
3702
4399
  "responseShape": {
@@ -3705,13 +4402,13 @@
3705
4402
  },
3706
4403
  {
3707
4404
  "name": "validateSchema",
3708
- "description": "",
4405
+ "description": "Validate a schema via the DeepAgent server (POST /api/schema/validate).",
3709
4406
  "params": [
3710
4407
  {
3711
4408
  "name": "schema",
3712
4409
  "type": "string",
3713
4410
  "required": true,
3714
- "description": ""
4411
+ "description": "Schema content to validate."
3715
4412
  }
3716
4413
  ],
3717
4414
  "responseShape": {
@@ -3721,19 +4418,19 @@
3721
4418
  },
3722
4419
  {
3723
4420
  "name": "compileSchema",
3724
- "description": "",
4421
+ "description": "Compile a schema to a target shell via the DeepAgent server (POST /api/schema/compile).",
3725
4422
  "params": [
3726
4423
  {
3727
4424
  "name": "schema",
3728
4425
  "type": "string",
3729
4426
  "required": true,
3730
- "description": ""
4427
+ "description": "Schema content to compile."
3731
4428
  },
3732
4429
  {
3733
4430
  "name": "shell",
3734
4431
  "type": "string",
3735
4432
  "required": false,
3736
- "description": ""
4433
+ "description": "Target codegen shell (e.g. 'typescript')."
3737
4434
  }
3738
4435
  ],
3739
4436
  "responseShape": {
@@ -3743,17 +4440,36 @@
3743
4440
  },
3744
4441
  {
3745
4442
  "name": "getThreadHistory",
3746
- "description": "",
4443
+ "description": "Fetch a thread's message history via the DeepAgent server (POST /api/agent/history).",
3747
4444
  "params": [
3748
4445
  {
3749
4446
  "name": "threadId",
3750
4447
  "type": "string",
3751
4448
  "required": true,
3752
- "description": ""
4449
+ "description": "Thread id."
3753
4450
  }
3754
4451
  ],
3755
4452
  "responseShape": {
3756
- "messages": "array"
4453
+ "messages": {
4454
+ "type": "array",
4455
+ "items": {
4456
+ "type": "object",
4457
+ "properties": {
4458
+ "role": {
4459
+ "type": "string",
4460
+ "required": true
4461
+ },
4462
+ "content": {
4463
+ "type": "string",
4464
+ "required": true
4465
+ },
4466
+ "timestamp": {
4467
+ "type": "number",
4468
+ "required": true
4469
+ }
4470
+ }
4471
+ }
4472
+ }
3757
4473
  }
3758
4474
  }
3759
4475
  ],
@@ -3780,13 +4496,13 @@
3780
4496
  "actions": [
3781
4497
  {
3782
4498
  "name": "getPage",
3783
- "description": "",
4499
+ "description": "Look up a Wikipedia page (redirect-resolved): a one-line description, a Commons thumbnail, and the lead-section extract; empty fields on a miss.",
3784
4500
  "params": [
3785
4501
  {
3786
4502
  "name": "title",
3787
4503
  "type": "string",
3788
4504
  "required": true,
3789
- "description": ""
4505
+ "description": "Page title to look up."
3790
4506
  }
3791
4507
  ],
3792
4508
  "responseShape": {
@@ -3820,13 +4536,13 @@
3820
4536
  "actions": [
3821
4537
  {
3822
4538
  "name": "svgExists",
3823
- "description": "",
4539
+ "description": "Check whether an icon exists at the given Iconify API path (a GET, not a HEAD, despite the name).",
3824
4540
  "params": [
3825
4541
  {
3826
4542
  "name": "path",
3827
4543
  "type": "string",
3828
4544
  "required": true,
3829
- "description": ""
4545
+ "description": "Iconify API path segment to probe, e.g. 'prefix/name.svg'."
3830
4546
  }
3831
4547
  ],
3832
4548
  "responseShape": {
@@ -3835,19 +4551,19 @@
3835
4551
  },
3836
4552
  {
3837
4553
  "name": "search",
3838
- "description": "",
4554
+ "description": "Search Iconify's icon sets by relevance.",
3839
4555
  "params": [
3840
4556
  {
3841
4557
  "name": "query",
3842
4558
  "type": "string",
3843
4559
  "required": true,
3844
- "description": ""
4560
+ "description": "Search query text."
3845
4561
  },
3846
4562
  {
3847
4563
  "name": "limit",
3848
4564
  "type": "number",
3849
4565
  "required": false,
3850
- "description": ""
4566
+ "description": "Maximum icon ids to return; defaults to 1."
3851
4567
  }
3852
4568
  ],
3853
4569
  "responseShape": {
@@ -3856,13 +4572,13 @@
3856
4572
  },
3857
4573
  {
3858
4574
  "name": "getIconBody",
3859
- "description": "",
4575
+ "description": "Fetch an icon's raw SVG body (for color-tone classification); null if the icon or its collection isn't found.",
3860
4576
  "params": [
3861
4577
  {
3862
4578
  "name": "iconId",
3863
4579
  "type": "string",
3864
4580
  "required": true,
3865
- "description": ""
4581
+ "description": "Icon id in \"prefix:name\" form."
3866
4582
  }
3867
4583
  ],
3868
4584
  "responseShape": {
@@ -3893,23 +4609,54 @@
3893
4609
  "actions": [
3894
4610
  {
3895
4611
  "name": "search",
3896
- "description": "",
4612
+ "description": "Search arXiv's public Atom API by relevance.",
3897
4613
  "params": [
3898
4614
  {
3899
4615
  "name": "query",
3900
4616
  "type": "string",
3901
4617
  "required": true,
3902
- "description": ""
4618
+ "description": "Search query text (matched across all fields)."
3903
4619
  },
3904
4620
  {
3905
4621
  "name": "maxResults",
3906
4622
  "type": "number",
3907
4623
  "required": false,
3908
- "description": ""
4624
+ "description": "Maximum results to return; defaults to 8."
3909
4625
  }
3910
4626
  ],
3911
4627
  "responseShape": {
3912
- "results": "array"
4628
+ "results": {
4629
+ "type": "array",
4630
+ "items": {
4631
+ "type": "object",
4632
+ "properties": {
4633
+ "id": {
4634
+ "type": "string",
4635
+ "required": true
4636
+ },
4637
+ "title": {
4638
+ "type": "string",
4639
+ "required": true
4640
+ },
4641
+ "summary": {
4642
+ "type": "string",
4643
+ "required": true
4644
+ },
4645
+ "authors": {
4646
+ "type": "string[]",
4647
+ "required": true
4648
+ },
4649
+ "published": {
4650
+ "type": "string",
4651
+ "required": true
4652
+ },
4653
+ "url": {
4654
+ "type": "string",
4655
+ "required": true
4656
+ }
4657
+ }
4658
+ }
4659
+ }
3913
4660
  }
3914
4661
  }
3915
4662
  ],