@tappify/extension-sdk 2.1.0-beta.2 → 2.1.0-beta.4

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 (66) hide show
  1. package/dist/{chunk-QJMZRV7A.mjs → chunk-6FASZFC4.mjs} +19 -7
  2. package/dist/chunk-6FASZFC4.mjs.map +1 -0
  3. package/dist/{chunk-EB5XWQAU.cjs → chunk-6MP5DKLZ.cjs} +28 -16
  4. package/dist/chunk-6MP5DKLZ.cjs.map +1 -0
  5. package/dist/{chunk-BPCGXXMD.cjs → chunk-AYYJCRS4.cjs} +10 -10
  6. package/dist/{chunk-BPCGXXMD.cjs.map → chunk-AYYJCRS4.cjs.map} +1 -1
  7. package/dist/{chunk-KZ5NGFUP.mjs → chunk-CEFLOQD4.mjs} +2 -2
  8. package/dist/{chunk-7YKH4LZN.cjs → chunk-EV3KKP62.cjs} +17 -6
  9. package/dist/chunk-EV3KKP62.cjs.map +1 -0
  10. package/dist/{chunk-SGCYEEXD.mjs → chunk-IHLK4I7J.mjs} +17 -6
  11. package/dist/chunk-IHLK4I7J.mjs.map +1 -0
  12. package/dist/{chunk-A74HCO6T.cjs → chunk-TEIGGORZ.cjs} +3 -3
  13. package/dist/{chunk-A74HCO6T.cjs.map → chunk-TEIGGORZ.cjs.map} +1 -1
  14. package/dist/{chunk-SWG7CNTZ.mjs → chunk-WW2D3N2T.mjs} +3 -3
  15. package/dist/{client-DE-vMgdO.d.cts → client-BLnec4SD.d.cts} +1 -1
  16. package/dist/{client-BO3kavn0.d.ts → client-BRxKTo-L.d.ts} +1 -1
  17. package/dist/codegen.d.cts +14 -5
  18. package/dist/codegen.d.ts +14 -5
  19. package/dist/{constants-Bh759FUI.d.cts → constants-CvHbO3ia.d.cts} +14 -5
  20. package/dist/{constants-Bh759FUI.d.ts → constants-CvHbO3ia.d.ts} +14 -5
  21. package/dist/{context-mr8R5CNt.d.ts → context-BjhW0QWy.d.ts} +1 -1
  22. package/dist/{context-DI0EJCRD.d.cts → context-CsviWecX.d.cts} +1 -1
  23. package/dist/host.d.cts +4 -4
  24. package/dist/host.d.ts +4 -4
  25. package/dist/index.d.cts +4 -4
  26. package/dist/index.d.ts +4 -4
  27. package/dist/manifest.cjs +16 -16
  28. package/dist/manifest.d.cts +10 -4
  29. package/dist/manifest.d.ts +10 -4
  30. package/dist/manifest.mjs +1 -1
  31. package/dist/server.cjs +8 -8
  32. package/dist/server.d.cts +5 -5
  33. package/dist/server.d.ts +5 -5
  34. package/dist/server.mjs +3 -3
  35. package/dist/testing/index.cjs +8 -8
  36. package/dist/testing/index.d.cts +3 -3
  37. package/dist/testing/index.d.ts +3 -3
  38. package/dist/testing/index.mjs +4 -4
  39. package/dist/{types-BdDaLnqs.d.cts → types-C5k8VwaA.d.cts} +1 -1
  40. package/dist/{types-uGHrRaOj.d.ts → types-DBpDxGlT.d.ts} +1 -1
  41. package/dist/ui.d.cts +1 -1
  42. package/dist/ui.d.ts +1 -1
  43. package/dist/vite-preview-bootstrap.d.cts +2 -2
  44. package/dist/vite-preview-bootstrap.d.ts +2 -2
  45. package/dist/vite-preview.cjs +7 -7
  46. package/dist/vite-preview.cjs.map +1 -1
  47. package/dist/vite-preview.d.cts +3 -3
  48. package/dist/vite-preview.d.ts +3 -3
  49. package/dist/vite-preview.mjs +4 -4
  50. package/dist/vite-preview.mjs.map +1 -1
  51. package/dist/vite.cjs +16 -5
  52. package/dist/vite.cjs.map +1 -1
  53. package/dist/vite.d.cts +14 -5
  54. package/dist/vite.d.ts +14 -5
  55. package/dist/vite.mjs +16 -5
  56. package/dist/vite.mjs.map +1 -1
  57. package/dist/{work-events-BlOVpK0k.d.ts → work-events-BYU25wmX.d.ts} +40 -8
  58. package/dist/{work-events-D97EoqvS.d.cts → work-events-CxFu-YZE.d.cts} +40 -8
  59. package/package.json +1 -1
  60. package/schema/extension-v2.json +75 -330
  61. package/dist/chunk-7YKH4LZN.cjs.map +0 -1
  62. package/dist/chunk-EB5XWQAU.cjs.map +0 -1
  63. package/dist/chunk-QJMZRV7A.mjs.map +0 -1
  64. package/dist/chunk-SGCYEEXD.mjs.map +0 -1
  65. /package/dist/{chunk-KZ5NGFUP.mjs.map → chunk-CEFLOQD4.mjs.map} +0 -0
  66. /package/dist/{chunk-SWG7CNTZ.mjs.map → chunk-WW2D3N2T.mjs.map} +0 -0
@@ -64,24 +64,17 @@
64
64
  },
65
65
  "visibility": {
66
66
  "type": "string",
67
- "enum": [
68
- "public",
69
- "unlisted",
70
- "private"
71
- ],
67
+ "enum": ["public", "unlisted", "private"],
72
68
  "description": "Who can find and install this extension. \"public\" lists it in the Tap Store and needs all five listing fields; \"unlisted\" installs by link; \"private\" installs only in your own workspace."
73
69
  },
74
70
  "installScope": {
75
71
  "type": "string",
76
- "enum": [
77
- "project",
78
- "organization"
79
- ],
72
+ "enum": ["project", "organization"],
80
73
  "description": "Whether one install belongs to a single project or to a whole organization. An organization install contributes no pages, tabs, widgets or series, because those render on a project."
81
74
  },
82
75
  "scopes": {
83
76
  "minItems": 1,
84
- "maxItems": 20,
77
+ "maxItems": 21,
85
78
  "type": "array",
86
79
  "items": {
87
80
  "type": "object",
@@ -96,6 +89,7 @@
96
89
  "reviews:read",
97
90
  "review.threads:read",
98
91
  "crashes:read",
92
+ "builds:read",
99
93
  "revenue:read",
100
94
  "metrics:write",
101
95
  "alerts:write",
@@ -119,9 +113,7 @@
119
113
  "description": "Why this extension asks for the scope, in your own words. Shown on the consent screen, and required for the scopes that ask for one."
120
114
  }
121
115
  },
122
- "required": [
123
- "key"
124
- ],
116
+ "required": ["key"],
125
117
  "additionalProperties": false
126
118
  },
127
119
  "description": "The permissions an owner grants at install. Declare only what your contributions use."
@@ -161,11 +153,7 @@
161
153
  "description": "Whether this surface is drawn on phone layouts. Defaults to true; set false to hide it there."
162
154
  }
163
155
  },
164
- "required": [
165
- "id",
166
- "title",
167
- "entry"
168
- ],
156
+ "required": ["id", "title", "entry"],
169
157
  "additionalProperties": false
170
158
  },
171
159
  "description": "Pages of this extension's own, each on its own route under the project. `nav: true` also puts one in the project navigation."
@@ -195,12 +183,7 @@
195
183
  },
196
184
  "page": {
197
185
  "type": "string",
198
- "enum": [
199
- "overview",
200
- "analytics",
201
- "deployments",
202
- "ai_chat"
203
- ],
186
+ "enum": ["overview", "analytics", "deployments", "ai_chat"],
204
187
  "description": "The host page this tab sits on."
205
188
  },
206
189
  "mobile": {
@@ -208,12 +191,7 @@
208
191
  "description": "Whether this surface is drawn on phone layouts. Defaults to true; set false to hide it there."
209
192
  }
210
193
  },
211
- "required": [
212
- "id",
213
- "title",
214
- "entry",
215
- "page"
216
- ],
194
+ "required": ["id", "title", "entry", "page"],
217
195
  "additionalProperties": false
218
196
  },
219
197
  "description": "Tabs beside the host's own on a named host page."
@@ -243,12 +221,7 @@
243
221
  },
244
222
  "page": {
245
223
  "type": "string",
246
- "enum": [
247
- "overview",
248
- "analytics",
249
- "deployments",
250
- "ai_chat"
251
- ],
224
+ "enum": ["overview", "analytics", "deployments", "ai_chat"],
252
225
  "description": "The host page this widget renders on."
253
226
  },
254
227
  "slot": {
@@ -264,11 +237,7 @@
264
237
  },
265
238
  "size": {
266
239
  "type": "string",
267
- "enum": [
268
- "1x1",
269
- "2x1",
270
- "2x2"
271
- ],
240
+ "enum": ["1x1", "2x1", "2x2"],
272
241
  "description": "The widget's footprint in the slot grid, as columns by rows. Every slot takes all three."
273
242
  },
274
243
  "expandable": {
@@ -276,14 +245,7 @@
276
245
  "description": "Whether owners can open the same component in the expand panel."
277
246
  }
278
247
  },
279
- "required": [
280
- "id",
281
- "title",
282
- "entry",
283
- "page",
284
- "slot",
285
- "size"
286
- ],
248
+ "required": ["id", "title", "entry", "page", "slot", "size"],
287
249
  "additionalProperties": false
288
250
  },
289
251
  "description": "Cards drawn into a named slot on a host page."
@@ -307,11 +269,7 @@
307
269
  },
308
270
  "chart": {
309
271
  "type": "string",
310
- "enum": [
311
- "installs-activity",
312
- "conversion",
313
- "release-cadence"
314
- ],
272
+ "enum": ["installs-activity", "conversion", "release-cadence"],
315
273
  "description": "The host chart this line is drawn on."
316
274
  },
317
275
  "metric": {
@@ -321,12 +279,7 @@
321
279
  "description": "The connector metric this line plots. It has to be one the connector declares."
322
280
  }
323
281
  },
324
- "required": [
325
- "id",
326
- "label",
327
- "chart",
328
- "metric"
329
- ],
282
+ "required": ["id", "label", "chart", "metric"],
330
283
  "additionalProperties": false
331
284
  },
332
285
  "description": "Lines drawn onto a host chart from a metric the connector writes. The host draws the line on the chart this names and puts the vendor in the chart legend; a stale metric is drawn dashed with the time of its last sync."
@@ -344,12 +297,7 @@
344
297
  },
345
298
  "page": {
346
299
  "type": "string",
347
- "enum": [
348
- "overview",
349
- "analytics",
350
- "deployments",
351
- "ai_chat"
352
- ],
300
+ "enum": ["overview", "analytics", "deployments", "ai_chat"],
353
301
  "description": "The host page this banner appears on."
354
302
  },
355
303
  "event": {
@@ -358,11 +306,7 @@
358
306
  "description": "The event that raises it. Declare the same name under `contributes.webhooks` with `as: \"banner\"`."
359
307
  }
360
308
  },
361
- "required": [
362
- "id",
363
- "page",
364
- "event"
365
- ],
309
+ "required": ["id", "page", "event"],
366
310
  "additionalProperties": false
367
311
  },
368
312
  "description": "Banners raised on a host page by a webhook declared with as: \"banner\". The host draws one at the top of that page, carrying the `why` sentence from the delivery, until the owner dismisses it."
@@ -390,7 +334,8 @@
390
334
  "analytics.keywords",
391
335
  "analytics.reviews",
392
336
  "deployments.releases",
393
- "deployments.builds"
337
+ "deployments.builds",
338
+ "deployments.runs"
394
339
  ],
395
340
  "description": "The host table whose row menu gains this entry."
396
341
  },
@@ -401,12 +346,7 @@
401
346
  "description": "The source file that renders this contribution, as a path relative to the manifest. It has to be present as an expose in the built bundle."
402
347
  }
403
348
  },
404
- "required": [
405
- "id",
406
- "title",
407
- "table",
408
- "entry"
409
- ],
349
+ "required": ["id", "title", "table", "entry"],
410
350
  "additionalProperties": false
411
351
  },
412
352
  "description": "Actions offered on a row of a host table."
@@ -457,13 +397,7 @@
457
397
  "description": "The one or two characters drawn at the marker."
458
398
  }
459
399
  },
460
- "required": [
461
- "id",
462
- "label",
463
- "chart",
464
- "event",
465
- "glyph"
466
- ],
400
+ "required": ["id", "label", "chart", "event", "glyph"],
467
401
  "additionalProperties": false
468
402
  },
469
403
  "description": "Markers drawn on a host chart by a webhook declared with as: \"event\". Needs the `ui:render` and `alerts:write` scopes. The host draws the glyph on the chart time axis at the moment the delivery arrived, with the vendor named on hover."
@@ -486,10 +420,7 @@
486
420
  "description": "The JSON Schema for the values owners fill in. It becomes `TapSettingsProps[\"values\"]` and the reserved `settings` singleton."
487
421
  }
488
422
  },
489
- "required": [
490
- "entry",
491
- "schema"
492
- ],
423
+ "required": ["entry", "schema"],
493
424
  "additionalProperties": false,
494
425
  "description": "The settings panel owners open for this install."
495
426
  },
@@ -504,11 +435,7 @@
504
435
  "properties": {
505
436
  "scope": {
506
437
  "type": "string",
507
- "enum": [
508
- "user",
509
- "install",
510
- "organization"
511
- ],
438
+ "enum": ["user", "install", "organization"],
512
439
  "description": "Who the documents belong to: one `user`, the whole `install`, or the `organization`."
513
440
  },
514
441
  "singleton": {
@@ -524,10 +451,7 @@
524
451
  "description": "The JSON Schema for one document in this collection."
525
452
  }
526
453
  },
527
- "required": [
528
- "scope",
529
- "schema"
530
- ],
454
+ "required": ["scope", "schema"],
531
455
  "additionalProperties": false
532
456
  },
533
457
  "description": "The hosted storage collections this extension reads and writes. At most 10, and the name \"settings\" is reserved. Needs the `storage:write` scope."
@@ -540,11 +464,7 @@
540
464
  "properties": {
541
465
  "method": {
542
466
  "type": "string",
543
- "enum": [
544
- "none",
545
- "api_key",
546
- "oauth"
547
- ],
467
+ "enum": ["none", "api_key", "oauth"],
548
468
  "description": "The credential flow owners go through at install."
549
469
  },
550
470
  "fields": {
@@ -592,12 +512,7 @@
592
512
  "description": "The hint drawn under the input."
593
513
  }
594
514
  },
595
- "required": [
596
- "name",
597
- "label",
598
- "type",
599
- "required"
600
- ],
515
+ "required": ["name", "label", "type", "required"],
601
516
  "additionalProperties": false
602
517
  },
603
518
  "description": "The credentials owners enter. They reach your server as `credentials` on every call."
@@ -626,37 +541,22 @@
626
541
  },
627
542
  "tokenRequestEncoding": {
628
543
  "type": "string",
629
- "enum": [
630
- "form",
631
- "json"
632
- ],
544
+ "enum": ["form", "json"],
633
545
  "description": "The request body encoding for authorization-code and refresh token exchanges. When omitted, uses form encoding (application/x-www-form-urlencoded); json uses application/json."
634
546
  }
635
547
  },
636
- "required": [
637
- "authorizationUrl",
638
- "tokenUrl",
639
- "scopes"
640
- ],
548
+ "required": ["authorizationUrl", "tokenUrl", "scopes"],
641
549
  "additionalProperties": false,
642
550
  "description": "The endpoints, for `method: \"oauth\"`."
643
551
  }
644
552
  },
645
- "required": [
646
- "method"
647
- ],
553
+ "required": ["method"],
648
554
  "additionalProperties": false,
649
555
  "description": "How owners authenticate this connector."
650
556
  },
651
557
  "sync": {
652
558
  "type": "string",
653
- "enum": [
654
- "5m",
655
- "15m",
656
- "1h",
657
- "6h",
658
- "24h"
659
- ],
559
+ "enum": ["5m", "15m", "1h", "6h", "24h"],
660
560
  "description": "How often Tappify asks your server to sync."
661
561
  },
662
562
  "metrics": {
@@ -678,21 +578,12 @@
678
578
  },
679
579
  "unit": {
680
580
  "type": "string",
681
- "enum": [
682
- "count",
683
- "ratio",
684
- "currency",
685
- "seconds",
686
- "bytes"
687
- ],
581
+ "enum": ["count", "ratio", "currency", "seconds", "bytes"],
688
582
  "description": "How the value is formatted."
689
583
  },
690
584
  "kind": {
691
585
  "type": "string",
692
- "enum": [
693
- "gauge",
694
- "counter"
695
- ],
586
+ "enum": ["gauge", "counter"],
696
587
  "description": "Whether the value is a level at a point in time (`gauge`) or accumulates (`counter`)."
697
588
  },
698
589
  "dimensions": {
@@ -713,10 +604,7 @@
713
604
  "description": "The label owners read on the dimension."
714
605
  }
715
606
  },
716
- "required": [
717
- "key",
718
- "label"
719
- ],
607
+ "required": ["key", "label"],
720
608
  "additionalProperties": false
721
609
  },
722
610
  "description": "The breakdowns this metric can be split by."
@@ -728,12 +616,7 @@
728
616
  "description": "How many days of history to fetch on the first sync."
729
617
  }
730
618
  },
731
- "required": [
732
- "key",
733
- "label",
734
- "unit",
735
- "kind"
736
- ],
619
+ "required": ["key", "label", "unit", "kind"],
737
620
  "additionalProperties": false
738
621
  },
739
622
  "description": "The metrics this connector writes into the metrics store. Needs the `metrics:write` scope."
@@ -755,11 +638,7 @@
755
638
  },
756
639
  "as": {
757
640
  "type": "string",
758
- "enum": [
759
- "alert",
760
- "banner",
761
- "event"
762
- ],
641
+ "enum": ["alert", "banner", "event"],
763
642
  "description": "What Tappify turns it into: an inbox `alert`, a page `banner`, or an `event` a chart marker and `tap.data.subscribe` can read."
764
643
  },
765
644
  "payload": {
@@ -771,11 +650,7 @@
771
650
  "description": "The JSON Schema for the body your server posts. An alert or a banner has to carry `why`."
772
651
  }
773
652
  },
774
- "required": [
775
- "event",
776
- "as",
777
- "payload"
778
- ],
653
+ "required": ["event", "as", "payload"],
779
654
  "additionalProperties": false
780
655
  },
781
656
  "description": "The events this extension's server posts to Tappify, and what each one becomes. An `alert` or a `banner` needs the `alerts:write` scope."
@@ -810,41 +685,21 @@
810
685
  },
811
686
  "returns": {
812
687
  "type": "string",
813
- "enum": [
814
- "comparison",
815
- "table",
816
- "series",
817
- "list",
818
- "value"
819
- ],
688
+ "enum": ["comparison", "table", "series", "list", "value"],
820
689
  "description": "The card the host draws from the result."
821
690
  },
822
691
  "cost": {
823
692
  "type": "string",
824
- "enum": [
825
- "low",
826
- "medium",
827
- "high"
828
- ],
693
+ "enum": ["low", "medium", "high"],
829
694
  "description": "Roughly what one call costs to serve, so the assistant can prefer a cheaper tool."
830
695
  },
831
696
  "cache": {
832
697
  "type": "string",
833
- "enum": [
834
- "1m",
835
- "5m",
836
- "1h"
837
- ],
698
+ "enum": ["1m", "5m", "1h"],
838
699
  "description": "How long an identical call may be served from cache instead of reaching your server."
839
700
  }
840
701
  },
841
- "required": [
842
- "id",
843
- "description",
844
- "input",
845
- "returns",
846
- "cost"
847
- ],
702
+ "required": ["id", "description", "input", "returns", "cost"],
848
703
  "additionalProperties": false
849
704
  },
850
705
  "description": "The tools the assistant may call on your server. Needs the `ai:tools` scope."
@@ -873,11 +728,7 @@
873
728
  "description": "The path that answers the picker with `{ items: [{ id, label }] }`. The host always calls `/tappify/mentions/<id>` under `server.baseUrl` — the route `createTappifyHandler` serves — so write that path here; it records the route, it does not choose it."
874
729
  }
875
730
  },
876
- "required": [
877
- "id",
878
- "label",
879
- "list"
880
- ],
731
+ "required": ["id", "label", "list"],
881
732
  "additionalProperties": false
882
733
  },
883
734
  "description": "The things owners can name with @ in chat, and where to list them. Needs the `ai:tools` scope."
@@ -926,6 +777,7 @@
926
777
  "reviews:read",
927
778
  "review.threads:read",
928
779
  "crashes:read",
780
+ "builds:read",
929
781
  "revenue:read",
930
782
  "metrics:write",
931
783
  "alerts:write",
@@ -972,11 +824,7 @@
972
824
  },
973
825
  "category": {
974
826
  "type": "string",
975
- "enum": [
976
- "metric_definitions",
977
- "gotchas",
978
- "setup"
979
- ],
827
+ "enum": ["metric_definitions", "gotchas", "setup"],
980
828
  "description": "What kind of knowledge the file carries."
981
829
  },
982
830
  "file": {
@@ -986,11 +834,7 @@
986
834
  "description": "The markdown file in the bundle, as a path relative to the manifest."
987
835
  }
988
836
  },
989
- "required": [
990
- "id",
991
- "category",
992
- "file"
993
- ],
837
+ "required": ["id", "category", "file"],
994
838
  "additionalProperties": false
995
839
  },
996
840
  "description": "Markdown the assistant indexes and cites when it answers about this extension."
@@ -1033,12 +877,7 @@
1033
877
  "description": "The tool ids this skill is allowed to use."
1034
878
  }
1035
879
  },
1036
- "required": [
1037
- "id",
1038
- "name",
1039
- "description",
1040
- "file"
1041
- ],
880
+ "required": ["id", "name", "description", "file"],
1042
881
  "additionalProperties": false
1043
882
  },
1044
883
  "description": "Markdown procedures that shape how the assistant works. Needs the `ai:skills` scope."
@@ -1097,12 +936,7 @@
1097
936
  "description": "The JSON Schema for a short form the owner fills in before the prompt is sent."
1098
937
  }
1099
938
  },
1100
- "required": [
1101
- "id",
1102
- "title",
1103
- "template",
1104
- "surfaces"
1105
- ],
939
+ "required": ["id", "title", "template", "surfaces"],
1106
940
  "additionalProperties": false
1107
941
  },
1108
942
  "description": "Prompt templates the host offers owners as chips. Needs the `ai:skills` scope."
@@ -1129,28 +963,17 @@
1129
963
  "type": "array",
1130
964
  "items": {
1131
965
  "type": "string",
1132
- "enum": [
1133
- "turn_start",
1134
- "mention"
1135
- ]
966
+ "enum": ["turn_start", "mention"]
1136
967
  },
1137
968
  "description": "When the host calls your server for it."
1138
969
  },
1139
970
  "cache": {
1140
971
  "type": "string",
1141
- "enum": [
1142
- "1m",
1143
- "5m",
1144
- "1h"
1145
- ],
972
+ "enum": ["1m", "5m", "1h"],
1146
973
  "description": "How long the context may be reused before refetching."
1147
974
  }
1148
975
  },
1149
- "required": [
1150
- "id",
1151
- "description",
1152
- "when"
1153
- ],
976
+ "required": ["id", "description", "when"],
1154
977
  "additionalProperties": false
1155
978
  },
1156
979
  "description": "Providers the host calls to put your data in front of the assistant. Needs the `ai:skills` scope."
@@ -1166,11 +989,7 @@
1166
989
  "properties": {
1167
990
  "kind": {
1168
991
  "type": "string",
1169
- "enum": [
1170
- "tracker",
1171
- "docs",
1172
- "chat"
1173
- ],
992
+ "enum": ["tracker", "docs", "chat"],
1174
993
  "description": "What kind of destination this is."
1175
994
  },
1176
995
  "container": {
@@ -1188,10 +1007,7 @@
1188
1007
  "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1189
1008
  }
1190
1009
  },
1191
- "required": [
1192
- "label",
1193
- "list"
1194
- ],
1010
+ "required": ["label", "list"],
1195
1011
  "additionalProperties": false,
1196
1012
  "description": "Deprecated. Resolve containers dynamically with describe_container."
1197
1013
  },
@@ -1200,11 +1016,7 @@
1200
1016
  "type": "array",
1201
1017
  "items": {
1202
1018
  "type": "string",
1203
- "enum": [
1204
- "issue",
1205
- "page",
1206
- "message"
1207
- ]
1019
+ "enum": ["issue", "page", "message"]
1208
1020
  },
1209
1021
  "description": "What this destination can create."
1210
1022
  },
@@ -1234,9 +1046,7 @@
1234
1046
  "description": "The fields an owner has to fill in before you can create."
1235
1047
  }
1236
1048
  },
1237
- "required": [
1238
- "required"
1239
- ],
1049
+ "required": ["required"],
1240
1050
  "additionalProperties": false,
1241
1051
  "description": "Deprecated. Resolve fields dynamically with describe_container."
1242
1052
  },
@@ -1244,10 +1054,7 @@
1244
1054
  "type": "array",
1245
1055
  "items": {
1246
1056
  "type": "string",
1247
- "enum": [
1248
- "image",
1249
- "link"
1250
- ]
1057
+ "enum": ["image", "link"]
1251
1058
  },
1252
1059
  "description": "What can be attached to a created item."
1253
1060
  },
@@ -1255,10 +1062,7 @@
1255
1062
  "anyOf": [
1256
1063
  {
1257
1064
  "type": "string",
1258
- "enum": [
1259
- "two-way",
1260
- "none"
1261
- ],
1065
+ "enum": ["two-way", "none"],
1262
1066
  "description": "Deprecated. Declare a comments capability object."
1263
1067
  },
1264
1068
  {
@@ -1332,26 +1136,17 @@
1332
1136
  "description": "Your own status names that mean finished."
1333
1137
  }
1334
1138
  },
1335
- "required": [
1336
- "open",
1337
- "in_progress",
1338
- "done"
1339
- ],
1139
+ "required": ["open", "in_progress", "done"],
1340
1140
  "additionalProperties": false,
1341
1141
  "description": "Deprecated. Resolve statuses dynamically with describe_container."
1342
1142
  }
1343
1143
  },
1344
- "required": [
1345
- "direction"
1346
- ],
1144
+ "required": ["direction"],
1347
1145
  "additionalProperties": false
1348
1146
  },
1349
1147
  "identity": {
1350
1148
  "type": "string",
1351
- "enum": [
1352
- "user",
1353
- "install"
1354
- ],
1149
+ "enum": ["user", "install"],
1355
1150
  "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1356
1151
  },
1357
1152
  "auth": {
@@ -1376,11 +1171,7 @@
1376
1171
  "description": "The scopes requested from the provider."
1377
1172
  }
1378
1173
  },
1379
- "required": [
1380
- "method",
1381
- "provider",
1382
- "scopes"
1383
- ],
1174
+ "required": ["method", "provider", "scopes"],
1384
1175
  "additionalProperties": false
1385
1176
  },
1386
1177
  {
@@ -1435,20 +1226,12 @@
1435
1226
  "description": "The hint drawn under the input."
1436
1227
  }
1437
1228
  },
1438
- "required": [
1439
- "name",
1440
- "label",
1441
- "type",
1442
- "required"
1443
- ],
1229
+ "required": ["name", "label", "type", "required"],
1444
1230
  "additionalProperties": false
1445
1231
  }
1446
1232
  }
1447
1233
  },
1448
- "required": [
1449
- "method",
1450
- "fields"
1451
- ],
1234
+ "required": ["method", "fields"],
1452
1235
  "additionalProperties": false
1453
1236
  }
1454
1237
  ],
@@ -1470,11 +1253,7 @@
1470
1253
  "properties": {
1471
1254
  "kind": {
1472
1255
  "type": "string",
1473
- "enum": [
1474
- "tracker",
1475
- "docs",
1476
- "chat"
1477
- ],
1256
+ "enum": ["tracker", "docs", "chat"],
1478
1257
  "description": "What kind of destination this is."
1479
1258
  },
1480
1259
  "container": {
@@ -1492,10 +1271,7 @@
1492
1271
  "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1493
1272
  }
1494
1273
  },
1495
- "required": [
1496
- "label",
1497
- "list"
1498
- ],
1274
+ "required": ["label", "list"],
1499
1275
  "additionalProperties": false,
1500
1276
  "description": "Where items land, and how owners pick one."
1501
1277
  },
@@ -1504,11 +1280,7 @@
1504
1280
  "type": "array",
1505
1281
  "items": {
1506
1282
  "type": "string",
1507
- "enum": [
1508
- "issue",
1509
- "page",
1510
- "message"
1511
- ]
1283
+ "enum": ["issue", "page", "message"]
1512
1284
  },
1513
1285
  "description": "What this destination can create."
1514
1286
  },
@@ -1538,9 +1310,7 @@
1538
1310
  "description": "The fields an owner has to fill in before you can create."
1539
1311
  }
1540
1312
  },
1541
- "required": [
1542
- "required"
1543
- ],
1313
+ "required": ["required"],
1544
1314
  "additionalProperties": false,
1545
1315
  "description": "What a created item carries."
1546
1316
  },
@@ -1548,19 +1318,13 @@
1548
1318
  "type": "array",
1549
1319
  "items": {
1550
1320
  "type": "string",
1551
- "enum": [
1552
- "image",
1553
- "link"
1554
- ]
1321
+ "enum": ["image", "link"]
1555
1322
  },
1556
1323
  "description": "What can be attached to a created item."
1557
1324
  },
1558
1325
  "comments": {
1559
1326
  "type": "string",
1560
- "enum": [
1561
- "two-way",
1562
- "none"
1563
- ],
1327
+ "enum": ["two-way", "none"],
1564
1328
  "description": "Whether comments sync back and forth or not at all."
1565
1329
  },
1566
1330
  "status": {
@@ -1596,28 +1360,18 @@
1596
1360
  "description": "Your own status names that mean finished."
1597
1361
  }
1598
1362
  },
1599
- "required": [
1600
- "open",
1601
- "in_progress",
1602
- "done"
1603
- ],
1363
+ "required": ["open", "in_progress", "done"],
1604
1364
  "additionalProperties": false,
1605
1365
  "description": "Your status names, grouped into the three stages Tappify draws."
1606
1366
  }
1607
1367
  },
1608
- "required": [
1609
- "webhook",
1610
- "map"
1611
- ],
1368
+ "required": ["webhook", "map"],
1612
1369
  "additionalProperties": false,
1613
1370
  "description": "How status travels back from your system."
1614
1371
  },
1615
1372
  "identity": {
1616
1373
  "type": "string",
1617
- "enum": [
1618
- "user",
1619
- "install"
1620
- ],
1374
+ "enum": ["user", "install"],
1621
1375
  "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1622
1376
  }
1623
1377
  },
@@ -1682,26 +1436,16 @@
1682
1436
  },
1683
1437
  "cache": {
1684
1438
  "type": "string",
1685
- "enum": [
1686
- "1m",
1687
- "5m",
1688
- "1h"
1689
- ],
1439
+ "enum": ["1m", "5m", "1h"],
1690
1440
  "description": "How long an identical call may be served from cache instead of reaching your server."
1691
1441
  },
1692
1442
  "kind": {
1693
1443
  "type": "string",
1694
- "enum": [
1695
- "read",
1696
- "write"
1697
- ],
1444
+ "enum": ["read", "write"],
1698
1445
  "description": "Whether this procedure only reads or also changes something."
1699
1446
  }
1700
1447
  },
1701
- "required": [
1702
- "input",
1703
- "output"
1704
- ],
1448
+ "required": ["input", "output"],
1705
1449
  "additionalProperties": false
1706
1450
  },
1707
1451
  "description": "The procedures the host may call on your server, by name, each with its input and output schema. At most 30."
@@ -1716,6 +1460,9 @@
1716
1460
  "keyword.set_changed",
1717
1461
  "screenshots.updated",
1718
1462
  "price.changed",
1463
+ "build.succeeded",
1464
+ "build.failed",
1465
+ "build.uploaded",
1719
1466
  "featuring.started",
1720
1467
  "score.changed",
1721
1468
  "incident.opened",
@@ -1737,9 +1484,7 @@
1737
1484
  "description": "The Tappify events your server subscribes to. Each is delivered to `POST /tappify/events` as it happens, with the same body every host-to-vendor call carries."
1738
1485
  }
1739
1486
  },
1740
- "required": [
1741
- "baseUrl"
1742
- ],
1487
+ "required": ["baseUrl"],
1743
1488
  "additionalProperties": false,
1744
1489
  "description": "Your own server: where the host calls it, and what it answers. Required once you declare a connector, a webhook, an assistant contribution, a work destination or a procedure."
1745
1490
  },