superartifacts 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1353 @@
1
+ # Generated from sdks/openapi.json, spec hash f1886b4302fd534ad9d18552806f52f6cee192f699da87d92a6b2d59e51a3288. Do not edit.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Annotated, Any, Dict, List, Literal, Optional, Union
6
+
7
+ from pydantic import BaseModel, ConfigDict, Field, RootModel
8
+
9
+
10
+ class Error1(BaseModel):
11
+ model_config = ConfigDict(
12
+ extra='allow',
13
+ )
14
+ code: Annotated[str, Field(description='Stable, machine-readable.')]
15
+ message: Annotated[str, Field(description='For a person.')]
16
+ fix: Optional[str] = None
17
+ retryAfterSeconds: Optional[int] = None
18
+
19
+
20
+ class Error(BaseModel):
21
+ model_config = ConfigDict(
22
+ extra='allow',
23
+ )
24
+ error: Error1
25
+
26
+
27
+ class V1WhoamiGetResponse(BaseModel):
28
+ pass
29
+ model_config = ConfigDict(
30
+ extra='allow',
31
+ )
32
+
33
+
34
+ class V1HelpGetResponse(BaseModel):
35
+ pass
36
+ model_config = ConfigDict(
37
+ extra='allow',
38
+ )
39
+
40
+
41
+ class V1WebhooksGetResponse(BaseModel):
42
+ pass
43
+ model_config = ConfigDict(
44
+ extra='allow',
45
+ )
46
+
47
+
48
+ class V1WebhooksPostRequest(BaseModel):
49
+ model_config = ConfigDict(
50
+ extra='allow',
51
+ )
52
+ url: Annotated[Optional[str], Field(max_length=2048)] = None
53
+ description: Annotated[Optional[str], Field(max_length=500)] = None
54
+ eventTypes: Optional[List[str]] = None
55
+ agent: Annotated[
56
+ Optional[str],
57
+ Field(description='On create or list: me, or an owned agent handle.'),
58
+ ] = None
59
+
60
+
61
+ class V1WebhooksPostResponse(BaseModel):
62
+ pass
63
+ model_config = ConfigDict(
64
+ extra='allow',
65
+ )
66
+
67
+
68
+ class V1WebhooksIdGetResponse(BaseModel):
69
+ pass
70
+ model_config = ConfigDict(
71
+ extra='allow',
72
+ )
73
+
74
+
75
+ class V1WebhooksIdDeleteResponse(BaseModel):
76
+ pass
77
+ model_config = ConfigDict(
78
+ extra='allow',
79
+ )
80
+
81
+
82
+ class V1WebhooksIdTestPostResponse(BaseModel):
83
+ pass
84
+ model_config = ConfigDict(
85
+ extra='allow',
86
+ )
87
+
88
+
89
+ class V1WebhooksIdRotatePostResponse(BaseModel):
90
+ pass
91
+ model_config = ConfigDict(
92
+ extra='allow',
93
+ )
94
+
95
+
96
+ class V1WebhookMessagesGetResponse(BaseModel):
97
+ pass
98
+ model_config = ConfigDict(
99
+ extra='allow',
100
+ )
101
+
102
+
103
+ class V1ArtifactsGetResponse(BaseModel):
104
+ pass
105
+ model_config = ConfigDict(
106
+ extra='allow',
107
+ )
108
+
109
+
110
+ class Instance(BaseModel):
111
+ model_config = ConfigDict(
112
+ extra='allow',
113
+ )
114
+ slug: str
115
+ values: Dict[str, Any]
116
+ title: Optional[str] = None
117
+
118
+
119
+ class Template(BaseModel):
120
+ model_config = ConfigDict(
121
+ extra='allow',
122
+ )
123
+ slug: str
124
+ version: Annotated[Optional[int], Field(ge=1)] = None
125
+
126
+
127
+ class File(BaseModel):
128
+ model_config = ConfigDict(
129
+ extra='allow',
130
+ )
131
+ path: Annotated[str, Field(description='Relative, no leading slash.')]
132
+ content: Annotated[str, Field(description='Base64 of the bytes.')]
133
+ contentType: Annotated[
134
+ Optional[str], Field(description='Default: from the extension.')
135
+ ] = None
136
+ sha256: Annotated[
137
+ Optional[str], Field(description='Hex digest of the decoded bytes.')
138
+ ] = None
139
+
140
+
141
+ class V1ArtifactsPostRequest(BaseModel):
142
+ model_config = ConfigDict(
143
+ extra='allow',
144
+ )
145
+ slug: Annotated[
146
+ str,
147
+ Field(
148
+ description='Kebab-case, 3–63 chars, under your key’s handle: it updates one there you are Editor on. Another workspace’s artifact: publish from its dashboard.'
149
+ ),
150
+ ]
151
+ prompt: Annotated[
152
+ Optional[str],
153
+ Field(description='Optional: the request it answers, on its card.'),
154
+ ] = None
155
+ html: Annotated[
156
+ Optional[str], Field(description='Complete self-contained index.html.')
157
+ ] = None
158
+ values: Annotated[
159
+ Optional[Dict[str, Any]],
160
+ Field(
161
+ description="Filled slots for `template`'s runtime, by slot name; `json` slots are schema-checked."
162
+ ),
163
+ ] = None
164
+ instances: Annotated[
165
+ Optional[List[Instance]],
166
+ Field(
167
+ description='Instead of `slug`/`values`: several pages of one `template`.',
168
+ max_length=10,
169
+ ),
170
+ ] = None
171
+ template: Annotated[
172
+ Optional[Template],
173
+ Field(
174
+ description='The template built from (provenance); required with `values` or `instances`.'
175
+ ),
176
+ ] = None
177
+ title: Annotated[
178
+ Optional[str], Field(description='Under 60 chars. Default: page <title>.')
179
+ ] = None
180
+ description: Annotated[
181
+ Optional[str],
182
+ Field(description='Link-preview sentence, under 200 chars. Default: `prompt`.'),
183
+ ] = None
184
+ kind: Annotated[
185
+ Optional[
186
+ Literal[
187
+ 'page', 'slideshow', 'survey', 'tracker', 'video', 'tool', 'dashboard'
188
+ ]
189
+ ],
190
+ Field(
191
+ description='Default `page`. `dashboard` labels a page of mostly live data.'
192
+ ),
193
+ ] = None
194
+ collection: Annotated[
195
+ Optional[str],
196
+ Field(description='Gallery grouping label, not a content collection.'),
197
+ ] = None
198
+ visibility: Annotated[
199
+ Optional[Literal['private', 'organization']],
200
+ Field(
201
+ description='From version 1. Default: the workspace default; public is set after.'
202
+ ),
203
+ ] = None
204
+ policy: Annotated[
205
+ Optional[Dict[str, Any]],
206
+ Field(
207
+ description='Data policy v1. Visitors submit to a sheet (perUser single, upsert, a field per question), a log (many, append-only) or a shared doc (shared, key). CMS rows: `collections`. See super_help data.'
208
+ ),
209
+ ] = None
210
+ triggers: Annotated[
211
+ Optional[List[Dict[str, Any]]],
212
+ Field(
213
+ description='Declared agent triggers: key, prompt, optional label, on, who, agent, input, when, once. At most 8 and 12 KiB; omitted on redeploy keeps the previous set.',
214
+ max_length=8,
215
+ ),
216
+ ] = None
217
+ dataset: Annotated[
218
+ Optional[str],
219
+ Field(description="With `values`: overrides the declaration's `dataset.key`."),
220
+ ] = None
221
+ continues: Annotated[
222
+ Optional[str],
223
+ Field(description='With `values`: the dataset key this one succeeds.'),
224
+ ] = None
225
+ uploads: Annotated[
226
+ Optional[str],
227
+ Field(description='uploadId from super_upload; its files ship with the page.'),
228
+ ] = None
229
+ valuesFile: Annotated[
230
+ Optional[str],
231
+ Field(
232
+ description='With `uploads`: the staged JSON file to read `values` from.'
233
+ ),
234
+ ] = None
235
+ files: Annotated[
236
+ Optional[List[File]],
237
+ Field(
238
+ description='With `html`: small assets. ≤200, 5 MiB each, 10 MiB total, decoded.'
239
+ ),
240
+ ] = None
241
+
242
+
243
+ class V1ArtifactsPostResponse(BaseModel):
244
+ pass
245
+ model_config = ConfigDict(
246
+ extra='allow',
247
+ )
248
+
249
+
250
+ class V1ArtifactsArtifactGetResponse(BaseModel):
251
+ pass
252
+ model_config = ConfigDict(
253
+ extra='allow',
254
+ )
255
+
256
+
257
+ class V1ArtifactsArtifactPatchRequest(BaseModel):
258
+ model_config = ConfigDict(
259
+ extra='allow',
260
+ )
261
+ visibility: Annotated[
262
+ Optional[Literal['private', 'organization', 'public']],
263
+ Field(
264
+ description='private: Restricted (default). organization: anyone at the workspace. public: anyone with the link.'
265
+ ),
266
+ ] = None
267
+ collection: Annotated[
268
+ Optional[str],
269
+ Field(description='Gallery grouping label, ≤ 60 chars. Empty clears it.'),
270
+ ] = None
271
+ phase: Annotated[
272
+ Optional[str],
273
+ Field(
274
+ description='The name a stream’s `revealAt` waits for; from then on that stream reads as public.'
275
+ ),
276
+ ] = None
277
+ notifyOnSubmission: Optional[bool] = None
278
+ triggersEnabled: Optional[bool] = None
279
+
280
+
281
+ class V1ArtifactsArtifactPatchResponse(BaseModel):
282
+ pass
283
+ model_config = ConfigDict(
284
+ extra='allow',
285
+ )
286
+
287
+
288
+ class V1ArtifactsArtifactDeleteResponse(BaseModel):
289
+ pass
290
+ model_config = ConfigDict(
291
+ extra='allow',
292
+ )
293
+
294
+
295
+ class V1ArtifactsArtifactFileGetResponse(BaseModel):
296
+ pass
297
+ model_config = ConfigDict(
298
+ extra='allow',
299
+ )
300
+
301
+
302
+ class V1ArtifactsArtifactOpenPostRequest(BaseModel):
303
+ model_config = ConfigDict(
304
+ extra='allow',
305
+ )
306
+ version: Annotated[Optional[int], Field(ge=1)] = None
307
+
308
+
309
+ class V1ArtifactsArtifactOpenPostResponse(BaseModel):
310
+ pass
311
+ model_config = ConfigDict(
312
+ extra='allow',
313
+ )
314
+
315
+
316
+ class V1ArtifactsArtifactVersionsVersionServePostResponse(BaseModel):
317
+ pass
318
+ model_config = ConfigDict(
319
+ extra='allow',
320
+ )
321
+
322
+
323
+ class V1ArtifactsArtifactLivePostResponse(BaseModel):
324
+ pass
325
+ model_config = ConfigDict(
326
+ extra='allow',
327
+ )
328
+
329
+
330
+ class V1ArtifactsArtifactLiveDeleteResponse(BaseModel):
331
+ pass
332
+ model_config = ConfigDict(
333
+ extra='allow',
334
+ )
335
+
336
+
337
+ class File1(BaseModel):
338
+ model_config = ConfigDict(
339
+ extra='allow',
340
+ )
341
+ path: str
342
+ bytes: Annotated[int, Field(description='Exact size.', ge=1)]
343
+ sha256: Annotated[Optional[str], Field(description='Hex; checked on upload.')] = (
344
+ None
345
+ )
346
+ contentType: Annotated[
347
+ Optional[str], Field(description='Default: from the extension.')
348
+ ] = None
349
+
350
+
351
+ class V1UploadsPostRequest(BaseModel):
352
+ model_config = ConfigDict(
353
+ extra='allow',
354
+ )
355
+ files: List[File1]
356
+
357
+
358
+ class V1UploadsPostResponse(BaseModel):
359
+ pass
360
+ model_config = ConfigDict(
361
+ extra='allow',
362
+ )
363
+
364
+
365
+ class V1ArtifactsArtifactDataGetResponse(BaseModel):
366
+ pass
367
+ model_config = ConfigDict(
368
+ extra='allow',
369
+ )
370
+
371
+
372
+ class V1ArtifactsArtifactDataRowsPostRequest(BaseModel):
373
+ model_config = ConfigDict(
374
+ extra='allow',
375
+ )
376
+ stream: Optional[str] = None
377
+ rows: Annotated[Optional[List[Dict[str, Any]]], Field(max_length=50)] = None
378
+ ops: Annotated[Optional[List[Dict[str, Any]]], Field(max_length=50)] = None
379
+ atomic: Optional[bool] = None
380
+
381
+
382
+ class V1ArtifactsArtifactDataRowsPostResponse(BaseModel):
383
+ pass
384
+ model_config = ConfigDict(
385
+ extra='allow',
386
+ )
387
+
388
+
389
+ class V1DataGetResponse(BaseModel):
390
+ pass
391
+ model_config = ConfigDict(
392
+ extra='allow',
393
+ )
394
+
395
+
396
+ class Scope(BaseModel):
397
+ model_config = ConfigDict(
398
+ extra='allow',
399
+ )
400
+ series: Optional[str] = None
401
+ datasets: Annotated[Optional[List[str]], Field(max_length=20)] = None
402
+ tags: Annotated[Optional[List[str]], Field(description='All must match.')] = None
403
+
404
+
405
+ class ComputeItem(BaseModel):
406
+ model_config = ConfigDict(
407
+ extra='allow',
408
+ )
409
+ as_: Annotated[str, Field(alias='as')]
410
+ expr: Literal['a * b', 'a / b', 'a + b']
411
+ operands: Annotated[List[str], Field(max_length=2, min_length=2)]
412
+ unit: Optional[str] = None
413
+
414
+
415
+ class GroupBy(RootModel[str]):
416
+ root: Annotated[str, Field(pattern='^field:.+$')]
417
+
418
+
419
+ class Distributions(BaseModel):
420
+ model_config = ConfigDict(
421
+ extra='allow',
422
+ )
423
+ artifact: Annotated[str, Field(description='Artifact id or slug.')]
424
+ version: Annotated[Optional[int], Field(ge=1)] = None
425
+ group_by: Annotated[
426
+ Optional[str], Field(description='A choice, boolean or integer field.')
427
+ ] = None
428
+ bucket: Optional[Literal['day', 'week']] = None
429
+
430
+
431
+ class V1DataQueryPostRequest(BaseModel):
432
+ model_config = ConfigDict(
433
+ extra='allow',
434
+ )
435
+ scope: Annotated[
436
+ Optional[Scope], Field(description='The union of the forms given.')
437
+ ] = None
438
+ measures: Annotated[
439
+ Optional[List[str]],
440
+ Field(
441
+ description='Catalog measure names, not field names.',
442
+ max_length=6,
443
+ min_length=1,
444
+ ),
445
+ ] = None
446
+ agg: Optional[Literal['sum', 'avg', 'min', 'max', 'count', 'last']] = None
447
+ compute: Annotated[
448
+ Optional[List[ComputeItem]],
449
+ Field(
450
+ description='Derived columns, in order; operands name a measure or an earlier `as`.',
451
+ max_length=4,
452
+ ),
453
+ ] = None
454
+ filter: Annotated[
455
+ Optional[List[str]],
456
+ Field(
457
+ description="ANDed 'field op value' clauses: 'reps >= 5', 'day in mon,tue', 'note is set'. Ops: = != > >= < <= in. Catalog fields only.",
458
+ max_length=8,
459
+ ),
460
+ ] = None
461
+ group_by: Annotated[
462
+ Optional[
463
+ List[Union[Literal['dataset', 'day', 'week', 'month', 'visitor'], GroupBy]]
464
+ ],
465
+ Field(
466
+ description='One of dataset, day, week, month, visitor, or "field:{name}".',
467
+ max_length=2,
468
+ ),
469
+ ] = None
470
+ since: Annotated[
471
+ Optional[str], Field(description='ISO-8601 instant or window (7d, 24h).')
472
+ ] = None
473
+ until: Optional[str] = None
474
+ limit: Annotated[Optional[int], Field(ge=1, le=500)] = None
475
+ distributions: Annotated[
476
+ Optional[Distributions],
477
+ Field(
478
+ description="One artifact's per-field distributions instead of a scoped query."
479
+ ),
480
+ ] = None
481
+
482
+
483
+ class V1DataQueryPostResponse(BaseModel):
484
+ pass
485
+ model_config = ConfigDict(
486
+ extra='allow',
487
+ )
488
+
489
+
490
+ class V1SchemaGetResponse(BaseModel):
491
+ pass
492
+ model_config = ConfigDict(
493
+ extra='allow',
494
+ )
495
+
496
+
497
+ class FieldModel(BaseModel):
498
+ model_config = ConfigDict(
499
+ extra='allow',
500
+ )
501
+ name: str
502
+ type: Annotated[
503
+ str,
504
+ Field(
505
+ description='text long_text rich_text email url phone color integer decimal rating measurement boolean date datetime time choice multi_choice json image video file reference reference_list'
506
+ ),
507
+ ]
508
+ label: Optional[str] = None
509
+ required: Optional[bool] = None
510
+ unique: Optional[bool] = None
511
+ pii: Annotated[
512
+ Literal['none', 'contact', 'sensitive', 'secret'],
513
+ Field(
514
+ description='contact: masked for non-owners. sensitive: encrypted, not queryable. secret: write-only.'
515
+ ),
516
+ ]
517
+ description: Optional[str] = None
518
+ rules: Annotated[
519
+ Optional[Dict[str, Any]],
520
+ Field(
521
+ description='minLength maxLength pattern; min max precision; scale; measure unit; after before; choices minChoices maxChoices; collection onDelete; maxItems; maxBytes.'
522
+ ),
523
+ ] = None
524
+
525
+
526
+ class Define(BaseModel):
527
+ model_config = ConfigDict(
528
+ extra='allow',
529
+ )
530
+ key: Annotated[
531
+ str,
532
+ Field(
533
+ description='Lowercase letters, digits, underscores; starts with a letter.'
534
+ ),
535
+ ]
536
+ name: Annotated[str, Field(description='1–80 chars.')]
537
+ description: Optional[str] = None
538
+ displayField: Annotated[
539
+ Optional[str], Field(description='Labels an entry. Default: first text field.')
540
+ ] = None
541
+ fields: Annotated[List[FieldModel], Field(max_length=60)]
542
+
543
+
544
+ class V1SchemaPutRequest(BaseModel):
545
+ model_config = ConfigDict(
546
+ extra='allow',
547
+ )
548
+ define: Annotated[
549
+ Optional[Define],
550
+ Field(
551
+ description='A content collection definition: creates one, or replaces the one with this key.'
552
+ ),
553
+ ] = None
554
+ workspace: Annotated[
555
+ Optional[str], Field(description='Workspace handle. Omit for your own.')
556
+ ] = None
557
+
558
+
559
+ class V1SchemaPutResponse(BaseModel):
560
+ pass
561
+ model_config = ConfigDict(
562
+ extra='allow',
563
+ )
564
+
565
+
566
+ class V1CollectionsCollectionEntriesGetResponse(BaseModel):
567
+ pass
568
+ model_config = ConfigDict(
569
+ extra='allow',
570
+ )
571
+
572
+
573
+ class V1CollectionsCollectionEntriesPostRequest(BaseModel):
574
+ model_config = ConfigDict(
575
+ extra='allow',
576
+ )
577
+ values: Annotated[
578
+ Optional[List[Dict[str, Any]]],
579
+ Field(description='Keyed by field name. An array writes a batch.'),
580
+ ] = None
581
+ status: Annotated[
582
+ Optional[Literal['draft', 'published', 'archived']],
583
+ Field(description='Written entries. Default published.'),
584
+ ] = None
585
+ workspace: Annotated[
586
+ Optional[str], Field(description='Workspace handle. Omit for your own.')
587
+ ] = None
588
+
589
+
590
+ class V1CollectionsCollectionEntriesPostResponse(BaseModel):
591
+ pass
592
+ model_config = ConfigDict(
593
+ extra='allow',
594
+ )
595
+
596
+
597
+ class Header(BaseModel):
598
+ model_config = ConfigDict(
599
+ extra='allow',
600
+ )
601
+ name: Annotated[str, Field(description='e.g. authorization, x-api-key.')]
602
+ scheme: Annotated[
603
+ Optional[str],
604
+ Field(description='Prefix before the value, e.g. "Bearer ". May be empty.'),
605
+ ] = None
606
+
607
+
608
+ class V1CollectionsCollectionEntriesEntryFieldsFieldUsePostRequest(BaseModel):
609
+ model_config = ConfigDict(
610
+ extra='allow',
611
+ )
612
+ method: Literal['GET', 'POST', 'PUT', 'PATCH', 'DELETE']
613
+ url: Annotated[
614
+ str,
615
+ Field(
616
+ description='https only; its host must be the approved one. Redirects are returned, never followed.'
617
+ ),
618
+ ]
619
+ headers: Annotated[
620
+ Optional[Dict[str, str]],
621
+ Field(
622
+ description='Sent as given, except host, authorization, cookie, proxy-* and the grant’s own header.'
623
+ ),
624
+ ] = None
625
+ body: Annotated[Optional[str], Field(description='≤64 KiB.')] = None
626
+ header: Annotated[
627
+ Optional[Header],
628
+ Field(
629
+ description='Where the value goes; asked for when no grant exists. The approved grant’s header wins.'
630
+ ),
631
+ ] = None
632
+
633
+
634
+ class V1CollectionsCollectionEntriesEntryFieldsFieldUsePostResponse(BaseModel):
635
+ pass
636
+ model_config = ConfigDict(
637
+ extra='allow',
638
+ )
639
+
640
+
641
+ class V1TemplatesGetResponse(BaseModel):
642
+ pass
643
+ model_config = ConfigDict(
644
+ extra='allow',
645
+ )
646
+
647
+
648
+ class UseCase(BaseModel):
649
+ model_config = ConfigDict(
650
+ extra='allow',
651
+ )
652
+ title: Annotated[str, Field(max_length=80)]
653
+ prompt: Annotated[str, Field(max_length=280)]
654
+
655
+
656
+ class Slot(BaseModel):
657
+ model_config = ConfigDict(
658
+ extra='allow',
659
+ )
660
+ name: str
661
+ type: str
662
+
663
+
664
+ class Spec(BaseModel):
665
+ model_config = ConfigDict(
666
+ extra='allow',
667
+ )
668
+ slots: Annotated[
669
+ Optional[List[Slot]],
670
+ Field(
671
+ description='The fill schema, an array: [{"name": "headline", "type": "text", "required": true, "max": 120}].'
672
+ ),
673
+ ] = None
674
+
675
+
676
+ class File2(BaseModel):
677
+ model_config = ConfigDict(
678
+ extra='allow',
679
+ )
680
+ path: str
681
+ text: Annotated[
682
+ Optional[str],
683
+ Field(description='UTF-8 text, base64-ed for you. Send `text` or `content`.'),
684
+ ] = None
685
+ content: Annotated[
686
+ Optional[str], Field(description='Base64 of the bytes, for binaries.')
687
+ ] = None
688
+ contentType: Optional[str] = None
689
+
690
+
691
+ class Companion(BaseModel):
692
+ model_config = ConfigDict(
693
+ extra='allow',
694
+ )
695
+ role: Annotated[str, Field(description='Kebab-case, unique, not "primary".')]
696
+ title: str
697
+ description: Optional[str] = None
698
+ kind: Optional[
699
+ Literal['page', 'slideshow', 'survey', 'tracker', 'video', 'tool', 'dashboard']
700
+ ] = None
701
+ visibility: Annotated[
702
+ Optional[Literal['inherit', 'private', 'public']],
703
+ Field(description='Default inherit: the primary’s.'),
704
+ ] = None
705
+ declaration: Annotated[
706
+ Optional[Dict[str, Any]], Field(description='This part’s policy, or omit.')
707
+ ] = None
708
+ slots: Annotated[
709
+ Optional[List[str]],
710
+ Field(description='Slot names whose values this part gets. Default all.'),
711
+ ] = None
712
+ files: Annotated[
713
+ List[File2],
714
+ Field(
715
+ description='Runtime files, `index.html` required. Omitting them on a revision drops the runtime from that new draft version only.'
716
+ ),
717
+ ]
718
+
719
+
720
+ class V1TemplatesPostRequest(BaseModel):
721
+ model_config = ConfigDict(
722
+ extra='allow',
723
+ )
724
+ slug: Annotated[str, Field(description='Kebab-case, 3–64 chars. Permanent.')]
725
+ title: str
726
+ description: str
727
+ kind: Annotated[
728
+ Optional[
729
+ Literal[
730
+ 'page', 'slideshow', 'survey', 'tracker', 'video', 'tool', 'dashboard'
731
+ ]
732
+ ],
733
+ Field(
734
+ description='`dashboard`: a page that mostly shows live data — a label, not a capability.'
735
+ ),
736
+ ] = None
737
+ jobs: Annotated[
738
+ Optional[
739
+ List[
740
+ Literal[
741
+ 'track',
742
+ 'collect',
743
+ 'present',
744
+ 'report',
745
+ 'monitor',
746
+ 'prove',
747
+ 'document',
748
+ 'explain',
749
+ 'plan',
750
+ 'decide',
751
+ 'review',
752
+ 'learn',
753
+ 'prototype',
754
+ 'announce',
755
+ 'compute',
756
+ 'curate',
757
+ 'coordinate',
758
+ 'play',
759
+ ]
760
+ ]
761
+ ],
762
+ Field(
763
+ description='What a person hires it for; the first is primary. Create default: from `kind`.',
764
+ max_length=2,
765
+ min_length=1,
766
+ ),
767
+ ] = None
768
+ audience: Annotated[
769
+ Optional[
770
+ List[
771
+ Literal[
772
+ 'everyone',
773
+ 'engineering',
774
+ 'product',
775
+ 'design',
776
+ 'marketing',
777
+ 'sales',
778
+ 'ops',
779
+ 'people',
780
+ 'finance',
781
+ 'founders',
782
+ 'education',
783
+ 'personal',
784
+ 'community',
785
+ ]
786
+ ]
787
+ ],
788
+ Field(
789
+ description='1–3, or `everyone` alone (the default).',
790
+ max_length=3,
791
+ min_length=1,
792
+ ),
793
+ ] = None
794
+ useCases: Annotated[
795
+ Optional[List[UseCase]],
796
+ Field(
797
+ description='Things to build from it; the build prompt draws on them.',
798
+ max_length=5,
799
+ ),
800
+ ] = None
801
+ installArchetype: Annotated[
802
+ Optional[Literal['scenarios', 'explainer', 'interview']],
803
+ Field(
804
+ description='After install: `scenarios` (default) offers three builds; `explainer` builds one from the sample; `interview` asks three questions first.'
805
+ ),
806
+ ] = None
807
+ installAfter: Annotated[
808
+ Optional[str],
809
+ Field(
810
+ description='Your note, appended to the build prompt as a suggestion.',
811
+ max_length=1500,
812
+ ),
813
+ ] = None
814
+ samplePublic: Annotated[
815
+ Optional[bool],
816
+ Field(description='The sample may appear on the public listing page.'),
817
+ ] = None
818
+ category: Annotated[
819
+ Optional[
820
+ Literal[
821
+ 'trackers',
822
+ 'surveys',
823
+ 'presentations',
824
+ 'dashboards',
825
+ 'documents',
826
+ 'tools',
827
+ 'games',
828
+ 'other',
829
+ ]
830
+ ],
831
+ Field(description='Deprecated; read as `jobs` when `jobs` is absent.'),
832
+ ] = None
833
+ spec: Annotated[
834
+ Spec,
835
+ Field(
836
+ description='`slots`, `declaration` (every instance’s policy), optional `comments`, `keywords` (searched), `examplePrompts`.'
837
+ ),
838
+ ]
839
+ guidance: Annotated[
840
+ Optional[str], Field(description='Optional notes for whoever fills it.')
841
+ ] = None
842
+ prompt: Annotated[
843
+ Optional[str], Field(description='A prompt a person copies to ask for one.')
844
+ ] = None
845
+ sample: Annotated[
846
+ Optional[Dict[str, Any]],
847
+ Field(description='`{"values": {…}}`, rendered in the preview.'),
848
+ ] = None
849
+ demo: Annotated[
850
+ Optional[str],
851
+ Field(
852
+ description='Slug of your artifact to link as the demo (linked once public). "" clears it.'
853
+ ),
854
+ ] = None
855
+ files: Annotated[
856
+ Optional[List[File2]],
857
+ Field(
858
+ description='Runtime files, `index.html` required. Omitting them on a revision drops the runtime from that new draft version only.'
859
+ ),
860
+ ] = None
861
+ companions: Annotated[
862
+ Optional[List[Companion]],
863
+ Field(
864
+ description='Extra artifacts each publish makes at {slug}-{role}, same values (e.g. a stage for a host). Bind the primary with `source: {artifact: "@primary", streams}`. Released: add, never remove.',
865
+ max_length=3,
866
+ ),
867
+ ] = None
868
+ expectedVersion: Annotated[
869
+ Optional[int],
870
+ Field(
871
+ description='The version you revised. Present: revise. Absent: create.',
872
+ ge=1,
873
+ ),
874
+ ] = None
875
+ changeNote: Annotated[
876
+ Optional[str],
877
+ Field(description='Revisions: one line on why, for the changelog.'),
878
+ ] = None
879
+
880
+
881
+ class V1TemplatesPostResponse(BaseModel):
882
+ pass
883
+ model_config = ConfigDict(
884
+ extra='allow',
885
+ )
886
+
887
+
888
+ class V1TemplatesSlugGetResponse(BaseModel):
889
+ pass
890
+ model_config = ConfigDict(
891
+ extra='allow',
892
+ )
893
+
894
+
895
+ class V1TemplatesSlugHistoryGetResponse(BaseModel):
896
+ pass
897
+ model_config = ConfigDict(
898
+ extra='allow',
899
+ )
900
+
901
+
902
+ class V1TemplatesSlugFeedbackGetResponse(BaseModel):
903
+ pass
904
+ model_config = ConfigDict(
905
+ extra='allow',
906
+ )
907
+
908
+
909
+ class V1TemplatesSlugActionsPostRequest(BaseModel):
910
+ model_config = ConfigDict(
911
+ extra='allow',
912
+ )
913
+ action: Literal[
914
+ 'install', 'uninstall', 'rate', 'report', 'rollback', 'request_verification'
915
+ ]
916
+ stars: Annotated[Optional[int], Field(ge=1, le=5)] = None
917
+ version: Annotated[Optional[int], Field(ge=1)] = None
918
+ kind: Annotated[
919
+ Optional[
920
+ Literal[
921
+ 'spam', 'harmful', 'broken', 'misleading', 'pii', 'copyright', 'other'
922
+ ]
923
+ ],
924
+ Field(description='Report only.'),
925
+ ] = None
926
+ reason: Annotated[
927
+ Optional[str], Field(description='Report only.', max_length=1000)
928
+ ] = None
929
+ confirmedByPerson: Annotated[
930
+ Optional[bool],
931
+ Field(
932
+ description='Install only: true once the person agreed to this public template. Never set it unasked (`permission_required`).'
933
+ ),
934
+ ] = None
935
+
936
+
937
+ class V1TemplatesSlugActionsPostResponse(BaseModel):
938
+ pass
939
+ model_config = ConfigDict(
940
+ extra='allow',
941
+ )
942
+
943
+
944
+ class V1TemplatesSlugReleasePostRequest(BaseModel):
945
+ model_config = ConfigDict(
946
+ extra='allow',
947
+ )
948
+ version: Annotated[int, Field(ge=1)]
949
+ visibility: Annotated[
950
+ Optional[Literal['public', 'unlisted', 'workspace']],
951
+ Field(
952
+ description='`unlisted` (default): by slug. `public`: marketplace. `workspace`: team shelf, members only.'
953
+ ),
954
+ ] = None
955
+ demoConsent: Annotated[
956
+ Optional[bool],
957
+ Field(
958
+ description='Default false. Makes the demo artifact, and its data, public.'
959
+ ),
960
+ ] = None
961
+ sampleConsent: Annotated[
962
+ Optional[bool],
963
+ Field(
964
+ description='true: show the sample on the public listing. Omit: unchanged.'
965
+ ),
966
+ ] = None
967
+
968
+
969
+ class V1TemplatesSlugReleasePostResponse(BaseModel):
970
+ pass
971
+ model_config = ConfigDict(
972
+ extra='allow',
973
+ )
974
+
975
+
976
+ class V1ProjectsGetResponse(BaseModel):
977
+ pass
978
+ model_config = ConfigDict(
979
+ extra='allow',
980
+ )
981
+
982
+
983
+ class V1ProjectsPostRequest(BaseModel):
984
+ model_config = ConfigDict(
985
+ extra='allow',
986
+ )
987
+ title: Annotated[Optional[str], Field(description='≤ 120 chars.')] = None
988
+ artifacts: Annotated[
989
+ Optional[List[str]], Field(description='Artifact ids or slugs, in order.')
990
+ ] = None
991
+ groupLabel: Annotated[
992
+ Optional[str], Field(description='Heading over these artifacts.')
993
+ ] = None
994
+ visibility: Annotated[
995
+ Optional[Literal['private', 'organization', 'public']],
996
+ Field(
997
+ description='organization: anyone at the workspace. Widening over private needs confirm.'
998
+ ),
999
+ ] = None
1000
+ rule: Annotated[
1001
+ Optional[Dict[str, Any]],
1002
+ Field(description='See super_help projects. null: manual.'),
1003
+ ] = None
1004
+ confirm: Annotated[
1005
+ Optional[bool],
1006
+ Field(
1007
+ description='Needed to delete; also to add a private artifact to a shared project, or widen one holding private ones (`confirm_private`).'
1008
+ ),
1009
+ ] = None
1010
+ workspace: Annotated[
1011
+ Optional[str], Field(description='Workspace handle. Omit for your own.')
1012
+ ] = None
1013
+
1014
+
1015
+ class V1ProjectsPostResponse(BaseModel):
1016
+ pass
1017
+ model_config = ConfigDict(
1018
+ extra='allow',
1019
+ )
1020
+
1021
+
1022
+ class V1ProjectsProjectGetResponse(BaseModel):
1023
+ pass
1024
+ model_config = ConfigDict(
1025
+ extra='allow',
1026
+ )
1027
+
1028
+
1029
+ class Move(BaseModel):
1030
+ model_config = ConfigDict(
1031
+ extra='allow',
1032
+ )
1033
+ artifact: Annotated[
1034
+ str, Field(description='An artifact id or slug, or an item id.')
1035
+ ]
1036
+ to: Annotated[int, Field(description='New position; 1 is first.', ge=1)]
1037
+
1038
+
1039
+ class V1ProjectsProjectPatchRequest(BaseModel):
1040
+ model_config = ConfigDict(
1041
+ extra='allow',
1042
+ )
1043
+ title: Annotated[Optional[str], Field(description='≤ 120 chars.')] = None
1044
+ visibility: Annotated[
1045
+ Optional[Literal['private', 'organization', 'public']],
1046
+ Field(
1047
+ description='organization: anyone at the workspace. Widening over private needs confirm.'
1048
+ ),
1049
+ ] = None
1050
+ order: Annotated[
1051
+ Optional[List[str]],
1052
+ Field(description='Every item once, in order: ids or slugs.'),
1053
+ ] = None
1054
+ move: Optional[Move] = None
1055
+ rule: Annotated[
1056
+ Optional[Dict[str, Any]],
1057
+ Field(description='See super_help projects. null: manual.'),
1058
+ ] = None
1059
+ collapsedGroups: Annotated[
1060
+ Optional[List[str]], Field(description='groupLabels shown folded. Whole set.')
1061
+ ] = None
1062
+ confirm: Annotated[
1063
+ Optional[bool],
1064
+ Field(
1065
+ description='Needed to delete; also to add a private artifact to a shared project, or widen one holding private ones (`confirm_private`).'
1066
+ ),
1067
+ ] = None
1068
+ workspace: Annotated[
1069
+ Optional[str], Field(description='Workspace handle. Omit for your own.')
1070
+ ] = None
1071
+
1072
+
1073
+ class V1ProjectsProjectPatchResponse(BaseModel):
1074
+ pass
1075
+ model_config = ConfigDict(
1076
+ extra='allow',
1077
+ )
1078
+
1079
+
1080
+ class V1ProjectsProjectDeleteResponse(BaseModel):
1081
+ pass
1082
+ model_config = ConfigDict(
1083
+ extra='allow',
1084
+ )
1085
+
1086
+
1087
+ class V1ProjectsProjectArtifactsPostRequest(BaseModel):
1088
+ model_config = ConfigDict(
1089
+ extra='allow',
1090
+ )
1091
+ artifacts: Annotated[
1092
+ Optional[List[str]], Field(description='Artifact ids or slugs, in order.')
1093
+ ] = None
1094
+ groupLabel: Annotated[
1095
+ Optional[str], Field(description='Heading over these artifacts.')
1096
+ ] = None
1097
+ confirm: Annotated[
1098
+ Optional[bool],
1099
+ Field(
1100
+ description='Needed to delete; also to add a private artifact to a shared project, or widen one holding private ones (`confirm_private`).'
1101
+ ),
1102
+ ] = None
1103
+ workspace: Annotated[
1104
+ Optional[str], Field(description='Workspace handle. Omit for your own.')
1105
+ ] = None
1106
+
1107
+
1108
+ class V1ProjectsProjectArtifactsPostResponse(BaseModel):
1109
+ pass
1110
+ model_config = ConfigDict(
1111
+ extra='allow',
1112
+ )
1113
+
1114
+
1115
+ class V1ProjectsProjectArtifactsRemoveDeleteResponse(BaseModel):
1116
+ pass
1117
+ model_config = ConfigDict(
1118
+ extra='allow',
1119
+ )
1120
+
1121
+
1122
+ class V1ArtifactsArtifactSharesPostRequest(BaseModel):
1123
+ model_config = ConfigDict(
1124
+ extra='allow',
1125
+ )
1126
+ emails: Annotated[List[str], Field(max_length=50, min_length=1)]
1127
+ role: Annotated[
1128
+ Optional[Literal['viewer', 'commenter', 'editor']],
1129
+ Field(
1130
+ description="Default viewer; editor for a workspace. An editor's key restores (super_artifact_set version), writes (super_data_write), publishes by slug in its workspace."
1131
+ ),
1132
+ ] = None
1133
+ artifactOnly: Annotated[
1134
+ Optional[bool], Field(description='Skip the team invite.')
1135
+ ] = None
1136
+
1137
+
1138
+ class V1ArtifactsArtifactSharesPostResponse(BaseModel):
1139
+ pass
1140
+ model_config = ConfigDict(
1141
+ extra='allow',
1142
+ )
1143
+
1144
+
1145
+ class V1ProjectsProjectSharesPostRequest(BaseModel):
1146
+ model_config = ConfigDict(
1147
+ extra='allow',
1148
+ )
1149
+ emails: Annotated[List[str], Field(max_length=50, min_length=1)]
1150
+ role: Annotated[
1151
+ Optional[Literal['viewer', 'commenter', 'editor']],
1152
+ Field(
1153
+ description="Default viewer; editor for a workspace. An editor's key restores (super_artifact_set version), writes (super_data_write), publishes by slug in its workspace."
1154
+ ),
1155
+ ] = None
1156
+ confirm: Annotated[
1157
+ Optional[bool],
1158
+ Field(
1159
+ description='Project only: true shares a project that holds private artifacts (`confirm_private`).'
1160
+ ),
1161
+ ] = None
1162
+
1163
+
1164
+ class V1ProjectsProjectSharesPostResponse(BaseModel):
1165
+ pass
1166
+ model_config = ConfigDict(
1167
+ extra='allow',
1168
+ )
1169
+
1170
+
1171
+ class V1WorkspaceSharesPostRequest(BaseModel):
1172
+ model_config = ConfigDict(
1173
+ extra='allow',
1174
+ )
1175
+ emails: Annotated[List[str], Field(max_length=50, min_length=1)]
1176
+ role: Annotated[
1177
+ Optional[Literal['viewer', 'commenter', 'editor']],
1178
+ Field(
1179
+ description="Default viewer; editor for a workspace. An editor's key restores (super_artifact_set version), writes (super_data_write), publishes by slug in its workspace."
1180
+ ),
1181
+ ] = None
1182
+ workspace: Annotated[
1183
+ Optional[str], Field(description='A handle you administer, or "" for your own.')
1184
+ ] = None
1185
+
1186
+
1187
+ class V1WorkspaceSharesPostResponse(BaseModel):
1188
+ pass
1189
+ model_config = ConfigDict(
1190
+ extra='allow',
1191
+ )
1192
+
1193
+
1194
+ class V1ArtifactsArtifactCommentsGetResponse(BaseModel):
1195
+ pass
1196
+ model_config = ConfigDict(
1197
+ extra='allow',
1198
+ )
1199
+
1200
+
1201
+ class RespondItem(BaseModel):
1202
+ model_config = ConfigDict(
1203
+ extra='allow',
1204
+ )
1205
+ thread: Annotated[str, Field(description='Thread id, not a message id.')]
1206
+ body: Annotated[
1207
+ Optional[str], Field(description='Explain the outcome and published version.')
1208
+ ] = None
1209
+ messageId: Annotated[Optional[str], Field(description='UUID reused on retry.')] = (
1210
+ None
1211
+ )
1212
+ resolve: Annotated[
1213
+ Optional[bool], Field(description='true resolves, false reopens.')
1214
+ ] = None
1215
+
1216
+
1217
+ class V1ArtifactsArtifactCommentsResponsesPostRequest(BaseModel):
1218
+ model_config = ConfigDict(
1219
+ extra='allow',
1220
+ )
1221
+ respond: Annotated[Optional[List[RespondItem]], Field(max_length=20)] = None
1222
+
1223
+
1224
+ class V1ArtifactsArtifactCommentsResponsesPostResponse(BaseModel):
1225
+ pass
1226
+ model_config = ConfigDict(
1227
+ extra='allow',
1228
+ )
1229
+
1230
+
1231
+ class ReactItem(BaseModel):
1232
+ model_config = ConfigDict(
1233
+ extra='allow',
1234
+ )
1235
+ thread: str
1236
+ message: str
1237
+ emoji: str
1238
+ on: Optional[bool] = None
1239
+
1240
+
1241
+ class V1ArtifactsArtifactCommentsReactionsPostRequest(BaseModel):
1242
+ model_config = ConfigDict(
1243
+ extra='allow',
1244
+ )
1245
+ react: Annotated[Optional[List[ReactItem]], Field(max_length=20)] = None
1246
+
1247
+
1248
+ class V1ArtifactsArtifactCommentsReactionsPostResponse(BaseModel):
1249
+ pass
1250
+ model_config = ConfigDict(
1251
+ extra='allow',
1252
+ )
1253
+
1254
+
1255
+ class V1ArtifactsArtifactCommentsResolutionsPostRequest(BaseModel):
1256
+ model_config = ConfigDict(
1257
+ extra='allow',
1258
+ )
1259
+ resolve: Annotated[Optional[List[str]], Field(max_length=20)] = None
1260
+
1261
+
1262
+ class V1ArtifactsArtifactCommentsResolutionsPostResponse(BaseModel):
1263
+ pass
1264
+ model_config = ConfigDict(
1265
+ extra='allow',
1266
+ )
1267
+
1268
+
1269
+ class V1ArtifactsArtifactCommentsScreenshotsScreenshotGetResponse(BaseModel):
1270
+ pass
1271
+ model_config = ConfigDict(
1272
+ extra='allow',
1273
+ )
1274
+
1275
+
1276
+ class V1MentionsGetResponse(BaseModel):
1277
+ pass
1278
+ model_config = ConfigDict(
1279
+ extra='allow',
1280
+ )
1281
+
1282
+
1283
+ class V1SignaturesGetResponse(BaseModel):
1284
+ pass
1285
+ model_config = ConfigDict(
1286
+ extra='allow',
1287
+ )
1288
+
1289
+
1290
+ class Signer(BaseModel):
1291
+ model_config = ConfigDict(
1292
+ extra='allow',
1293
+ )
1294
+ name: str
1295
+ email: str
1296
+ party: Annotated[
1297
+ Optional[str], Field(description='Their role in the agreement, e.g. "Tenant".')
1298
+ ] = None
1299
+
1300
+
1301
+ class V1SignaturesPostRequest(BaseModel):
1302
+ model_config = ConfigDict(
1303
+ extra='allow',
1304
+ )
1305
+ artifact: Annotated[Optional[str], Field(description='Artifact id or slug.')] = None
1306
+ version: Annotated[
1307
+ Optional[int],
1308
+ Field(description='The version to sign. Default: the published one.', ge=1),
1309
+ ] = None
1310
+ signers: Annotated[Optional[List[Signer]], Field(max_length=10, min_length=1)] = (
1311
+ None
1312
+ )
1313
+ message: Annotated[
1314
+ Optional[str],
1315
+ Field(description='A note shown to every signer.', max_length=500),
1316
+ ] = None
1317
+
1318
+
1319
+ class V1SignaturesPostResponse(BaseModel):
1320
+ pass
1321
+ model_config = ConfigDict(
1322
+ extra='allow',
1323
+ )
1324
+
1325
+
1326
+ class V1SignaturesRequestGetResponse(BaseModel):
1327
+ pass
1328
+ model_config = ConfigDict(
1329
+ extra='allow',
1330
+ )
1331
+
1332
+
1333
+ class V1SignaturesRequestRemindPostRequest(BaseModel):
1334
+ model_config = ConfigDict(
1335
+ extra='allow',
1336
+ )
1337
+ signer: Annotated[
1338
+ Optional[str], Field(description='A signer id, from status. For remind.')
1339
+ ] = None
1340
+
1341
+
1342
+ class V1SignaturesRequestRemindPostResponse(BaseModel):
1343
+ pass
1344
+ model_config = ConfigDict(
1345
+ extra='allow',
1346
+ )
1347
+
1348
+
1349
+ class V1SignaturesRequestWithdrawPostResponse(BaseModel):
1350
+ pass
1351
+ model_config = ConfigDict(
1352
+ extra='allow',
1353
+ )