@brydio/manifest 0.1.0-alpha.3 → 0.1.0-alpha.32

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.
package/src/schema.d.ts CHANGED
@@ -1,6 +1,50 @@
1
1
  import { z } from 'zod';
2
2
  import { FieldTypeInvalid, type FieldType } from './field-types.js';
3
3
  export { COLOUR_TOKENS, FIELD_LIMITS, parseFieldType, RESERVED_FIELDS, structuredFields, type FieldKind, type FieldType, } from './field-types.js';
4
+ /**
5
+ * What an app adds to `.brydio/app.json` to be more than a bundle of servers
6
+ * and skills: where it is shown, what it keeps, the tools that come from what
7
+ * it keeps, its screens, and what it asks the workspace for (contracts §4).
8
+ *
9
+ * Every key is optional, so every manifest E5 already imports still parses.
10
+ * A copy of Brydio's `apps/api/src/apps/manifest/manifest-ext.schema.ts`, the
11
+ * schema the server reads an installed app's manifest with. The two change
12
+ * together; `test/manifest.test.ts` parses the same manifests with both.
13
+ *
14
+ * Zod says what the additions *are*. The checks that are claims about one
15
+ * field against another — a search list naming a date, a placement naming a
16
+ * screen nobody declared — are `dataProblems` below, with a code each, so an
17
+ * import report can say which collection and which field, not just "invalid".
18
+ */
19
+ declare const placementSettingSchema: z.ZodObject<{
20
+ type: z.ZodEnum<{
21
+ string: "string";
22
+ url: "url";
23
+ }>;
24
+ label: z.ZodString;
25
+ required: z.ZodOptional<z.ZodBoolean>;
26
+ placeholder: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>;
28
+ export type PlacementSettingSpec = z.infer<typeof placementSettingSchema>;
29
+ /**
30
+ * How deep a folder's rows may nest, counting its own rows as the first
31
+ * level (ADR-A21): Issues → sprints → issues is two. Each level is listed
32
+ * only when a person opens its parent, so depth costs nothing while closed;
33
+ * the limit is for the sidebar's width and a person's patience.
34
+ */
35
+ export declare const MAX_FOLDER_DEPTH = 4;
36
+ /** The sizes a Home card or a project widget can be drawn at (CC11-F10). */
37
+ export declare const HOME_CARD_SIZES: readonly ["small", "medium", "large"];
38
+ export type HomeCardSize = (typeof HOME_CARD_SIZES)[number];
39
+ /** The kinds drawn as a card, which say the sizes they draw well at. */
40
+ export declare const SIZED_PLACEMENT_KINDS: readonly ["home", "project-widget"];
41
+ /** A stable identity for one independently addable placement offering. */
42
+ export declare const PLACEMENT_KEY: RegExp;
43
+ export declare function effectivePlacementKey(one: {
44
+ key?: string;
45
+ kind: string;
46
+ screen: string;
47
+ }): string;
4
48
  /** Most custom tools one app may declare (A3-F08). */
5
49
  export declare const MAX_CUSTOM_TOOLS = 20;
6
50
  /** A tool name the model and a policy row can both use as it is. */
@@ -18,16 +62,80 @@ declare const customToolSchema: z.ZodObject<{
18
62
  collection: z.ZodOptional<z.ZodString>;
19
63
  }, z.core.$strip>;
20
64
  export type CustomToolSpec = z.infer<typeof customToolSchema>;
65
+ /** Most secrets one app may declare (ADR-A24). */
66
+ export declare const MAX_APP_SECRETS = 20;
67
+ /** The longest value one secret may hold, in characters. */
68
+ export declare const MAX_SECRET_CHARS: number;
69
+ /** A secret's name, as a handler asks for it: `api_key`. */
70
+ export declare const SECRET_NAME: RegExp;
71
+ /**
72
+ * A secret the app needs (ADR-A24): named here, never valued here. The value
73
+ * is entered in the app's settings by an administrator, or stored by the
74
+ * app's own handler with `secrets.set`, and only that app's handlers can read
75
+ * it, with `secrets.get`. A screen never can.
76
+ *
77
+ * `install` (the default) is one value for the whole install; `instance` is
78
+ * one per instance.
79
+ */
80
+ declare const secretSchema: z.ZodObject<{
81
+ name: z.ZodString;
82
+ label: z.ZodString;
83
+ description: z.ZodOptional<z.ZodString>;
84
+ required: z.ZodOptional<z.ZodBoolean>;
85
+ scope: z.ZodOptional<z.ZodEnum<{
86
+ instance: "instance";
87
+ install: "install";
88
+ }>>;
89
+ }, z.core.$strip>;
90
+ export type SecretSpec = z.infer<typeof secretSchema>;
21
91
  declare const extensionShape: {
22
92
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
93
+ key: z.ZodOptional<z.ZodString>;
23
94
  kind: z.ZodEnum<{
95
+ home: "home";
96
+ "project-widget": "project-widget";
24
97
  "project-tab": "project-tab";
25
98
  "project-sidebar": "project-sidebar";
26
99
  "workspace-sidebar": "workspace-sidebar";
27
100
  }>;
28
101
  screen: z.ZodString;
102
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
103
+ small: "small";
104
+ medium: "medium";
105
+ large: "large";
106
+ }>>>;
29
107
  label: z.ZodOptional<z.ZodString>;
30
108
  icon: z.ZodOptional<z.ZodString>;
109
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
110
+ type: z.ZodEnum<{
111
+ string: "string";
112
+ url: "url";
113
+ }>;
114
+ label: z.ZodString;
115
+ required: z.ZodOptional<z.ZodBoolean>;
116
+ placeholder: z.ZodOptional<z.ZodString>;
117
+ }, z.core.$strip>>>;
118
+ children: z.ZodOptional<z.ZodObject<{
119
+ tool: z.ZodString;
120
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
121
+ cap: z.ZodOptional<z.ZodNumber>;
122
+ noun: z.ZodOptional<z.ZodString>;
123
+ create: z.ZodOptional<z.ZodObject<{
124
+ tool: z.ZodString;
125
+ noun: z.ZodOptional<z.ZodString>;
126
+ titleField: z.ZodOptional<z.ZodString>;
127
+ parentField: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$strip>>;
129
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
130
+ noun: z.ZodOptional<z.ZodString>;
131
+ create: z.ZodOptional<z.ZodObject<{
132
+ tool: z.ZodString;
133
+ noun: z.ZodOptional<z.ZodString>;
134
+ titleField: z.ZodOptional<z.ZodString>;
135
+ parentField: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strip>>;
137
+ }, z.core.$strip>>>;
138
+ }, z.core.$strip>>;
31
139
  }, z.core.$strip>>>;
32
140
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
33
141
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
@@ -53,6 +161,17 @@ declare const extensionShape: {
53
161
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
162
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
55
163
  }, z.core.$strip>>;
164
+ /** The secrets its handlers read (ADR-A24): names only, never values. */
165
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
166
+ name: z.ZodString;
167
+ label: z.ZodString;
168
+ description: z.ZodOptional<z.ZodString>;
169
+ required: z.ZodOptional<z.ZodBoolean>;
170
+ scope: z.ZodOptional<z.ZodEnum<{
171
+ instance: "instance";
172
+ install: "install";
173
+ }>>;
174
+ }, z.core.$strip>>>;
56
175
  /**
57
176
  * How records move when the schema changes between versions (A3-F07).
58
177
  * Checked against the previous version when a version is published, and
@@ -99,7 +218,7 @@ export interface DataProblem {
99
218
  field?: string;
100
219
  message: string;
101
220
  }
102
- export type DataProblemCode = FieldTypeInvalid['code'] | 'data_too_many_collections' | 'data_too_many_fields' | 'data_collection_name_format' | 'data_field_name_format' | 'data_field_reserved' | 'data_label_format' | 'data_label_taken' | 'data_project_field_twice' | 'data_search_unknown_field' | 'data_search_not_text' | 'grant_collection_missing' | 'grant_tool_missing' | 'custom_name_taken' | 'custom_collection_unknown' | 'custom_input_invalid' | 'placement_screen_unknown';
221
+ export type DataProblemCode = FieldTypeInvalid['code'] | 'data_too_many_collections' | 'data_too_many_fields' | 'data_collection_name_format' | 'data_field_name_format' | 'data_field_reserved' | 'data_label_format' | 'data_label_taken' | 'data_project_field_twice' | 'data_search_unknown_field' | 'data_search_not_text' | 'grant_collection_missing' | 'grant_tool_missing' | 'custom_name_taken' | 'custom_collection_unknown' | 'custom_input_invalid' | 'placement_key_taken' | 'placement_screen_unknown' | 'placement_home_sizes' | 'placement_sizes_not_home' | 'placement_widget_sizes' | 'placement_tab_retired' | 'placement_children_too_deep' | 'placement_create_tool_unknown' | 'placement_create_not_write' | 'secret_name_taken' | 'grant_secrets_missing';
103
222
  type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
104
223
  /**
105
224
  * Everything wrong with an app's additions that a type cannot say.
@@ -108,20 +227,62 @@ type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
108
227
  * report; the zod schemas below run it too, so a parse never accepts what
109
228
  * this refuses.
110
229
  */
111
- export declare function dataProblems(additions: Additions, options?: {
230
+ export interface DataProblemOptions {
231
+ /** Off where the grants are the install's record, not the manifest's. */
112
232
  grants?: boolean;
113
- }): DataProblem[];
233
+ /** On for a manifest being written now: refuses kinds that are retired, such as `project-tab`. */
234
+ retired?: boolean;
235
+ }
236
+ export declare function dataProblems(additions: Additions, options?: DataProblemOptions): DataProblem[];
114
237
  /** The additions alone, for code that has the rest of the manifest already. */
115
238
  export declare const manifestExtensionsSchema: z.ZodObject<{
116
239
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
240
+ key: z.ZodOptional<z.ZodString>;
117
241
  kind: z.ZodEnum<{
242
+ home: "home";
243
+ "project-widget": "project-widget";
118
244
  "project-tab": "project-tab";
119
245
  "project-sidebar": "project-sidebar";
120
246
  "workspace-sidebar": "workspace-sidebar";
121
247
  }>;
122
248
  screen: z.ZodString;
249
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
250
+ small: "small";
251
+ medium: "medium";
252
+ large: "large";
253
+ }>>>;
123
254
  label: z.ZodOptional<z.ZodString>;
124
255
  icon: z.ZodOptional<z.ZodString>;
256
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
257
+ type: z.ZodEnum<{
258
+ string: "string";
259
+ url: "url";
260
+ }>;
261
+ label: z.ZodString;
262
+ required: z.ZodOptional<z.ZodBoolean>;
263
+ placeholder: z.ZodOptional<z.ZodString>;
264
+ }, z.core.$strip>>>;
265
+ children: z.ZodOptional<z.ZodObject<{
266
+ tool: z.ZodString;
267
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
268
+ cap: z.ZodOptional<z.ZodNumber>;
269
+ noun: z.ZodOptional<z.ZodString>;
270
+ create: z.ZodOptional<z.ZodObject<{
271
+ tool: z.ZodString;
272
+ noun: z.ZodOptional<z.ZodString>;
273
+ titleField: z.ZodOptional<z.ZodString>;
274
+ parentField: z.ZodOptional<z.ZodString>;
275
+ }, z.core.$strip>>;
276
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
277
+ noun: z.ZodOptional<z.ZodString>;
278
+ create: z.ZodOptional<z.ZodObject<{
279
+ tool: z.ZodString;
280
+ noun: z.ZodOptional<z.ZodString>;
281
+ titleField: z.ZodOptional<z.ZodString>;
282
+ parentField: z.ZodOptional<z.ZodString>;
283
+ }, z.core.$strip>>;
284
+ }, z.core.$strip>>>;
285
+ }, z.core.$strip>>;
125
286
  }, z.core.$strip>>>;
126
287
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
127
288
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
@@ -147,6 +308,16 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
147
308
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
148
309
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
149
310
  }, z.core.$strip>>;
311
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
312
+ name: z.ZodString;
313
+ label: z.ZodString;
314
+ description: z.ZodOptional<z.ZodString>;
315
+ required: z.ZodOptional<z.ZodBoolean>;
316
+ scope: z.ZodOptional<z.ZodEnum<{
317
+ instance: "instance";
318
+ install: "install";
319
+ }>>;
320
+ }, z.core.$strip>>>;
150
321
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
151
322
  version: z.ZodString;
152
323
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -183,14 +354,52 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
183
354
  */
184
355
  export declare const storedExtensionsSchema: z.ZodObject<{
185
356
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
357
+ key: z.ZodOptional<z.ZodString>;
186
358
  kind: z.ZodEnum<{
359
+ home: "home";
360
+ "project-widget": "project-widget";
187
361
  "project-tab": "project-tab";
188
362
  "project-sidebar": "project-sidebar";
189
363
  "workspace-sidebar": "workspace-sidebar";
190
364
  }>;
191
365
  screen: z.ZodString;
366
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
367
+ small: "small";
368
+ medium: "medium";
369
+ large: "large";
370
+ }>>>;
192
371
  label: z.ZodOptional<z.ZodString>;
193
372
  icon: z.ZodOptional<z.ZodString>;
373
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
374
+ type: z.ZodEnum<{
375
+ string: "string";
376
+ url: "url";
377
+ }>;
378
+ label: z.ZodString;
379
+ required: z.ZodOptional<z.ZodBoolean>;
380
+ placeholder: z.ZodOptional<z.ZodString>;
381
+ }, z.core.$strip>>>;
382
+ children: z.ZodOptional<z.ZodObject<{
383
+ tool: z.ZodString;
384
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
385
+ cap: z.ZodOptional<z.ZodNumber>;
386
+ noun: z.ZodOptional<z.ZodString>;
387
+ create: z.ZodOptional<z.ZodObject<{
388
+ tool: z.ZodString;
389
+ noun: z.ZodOptional<z.ZodString>;
390
+ titleField: z.ZodOptional<z.ZodString>;
391
+ parentField: z.ZodOptional<z.ZodString>;
392
+ }, z.core.$strip>>;
393
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
394
+ noun: z.ZodOptional<z.ZodString>;
395
+ create: z.ZodOptional<z.ZodObject<{
396
+ tool: z.ZodString;
397
+ noun: z.ZodOptional<z.ZodString>;
398
+ titleField: z.ZodOptional<z.ZodString>;
399
+ parentField: z.ZodOptional<z.ZodString>;
400
+ }, z.core.$strip>>;
401
+ }, z.core.$strip>>>;
402
+ }, z.core.$strip>>;
194
403
  }, z.core.$strip>>>;
195
404
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
196
405
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
@@ -216,6 +425,16 @@ export declare const storedExtensionsSchema: z.ZodObject<{
216
425
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
217
426
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
218
427
  }, z.core.$strip>>;
428
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
429
+ name: z.ZodString;
430
+ label: z.ZodString;
431
+ description: z.ZodOptional<z.ZodString>;
432
+ required: z.ZodOptional<z.ZodBoolean>;
433
+ scope: z.ZodOptional<z.ZodEnum<{
434
+ instance: "instance";
435
+ install: "install";
436
+ }>>;
437
+ }, z.core.$strip>>>;
219
438
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
220
439
  version: z.ZodString;
221
440
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -266,7 +485,14 @@ export declare const appManifestSchema: z.ZodObject<{
266
485
  terms: z.ZodOptional<z.ZodString>;
267
486
  support: z.ZodOptional<z.ZodString>;
268
487
  }, z.core.$strip>>;
269
- icon: z.ZodOptional<z.ZodString>;
488
+ logo: z.ZodOptional<z.ZodObject<{
489
+ color: z.ZodString;
490
+ mono: z.ZodString;
491
+ }, z.core.$strip>>;
492
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
493
+ color: z.ZodString;
494
+ mono: z.ZodString;
495
+ }, z.core.$strip>]>>;
270
496
  brandColor: z.ZodOptional<z.ZodString>;
271
497
  brandColorDark: z.ZodOptional<z.ZodString>;
272
498
  defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -280,14 +506,52 @@ export declare const appManifestSchema: z.ZodObject<{
280
506
  }, z.core.$strip>>;
281
507
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
282
508
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
509
+ key: z.ZodOptional<z.ZodString>;
283
510
  kind: z.ZodEnum<{
511
+ home: "home";
512
+ "project-widget": "project-widget";
284
513
  "project-tab": "project-tab";
285
514
  "project-sidebar": "project-sidebar";
286
515
  "workspace-sidebar": "workspace-sidebar";
287
516
  }>;
288
517
  screen: z.ZodString;
518
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
519
+ small: "small";
520
+ medium: "medium";
521
+ large: "large";
522
+ }>>>;
289
523
  label: z.ZodOptional<z.ZodString>;
290
524
  icon: z.ZodOptional<z.ZodString>;
525
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
526
+ type: z.ZodEnum<{
527
+ string: "string";
528
+ url: "url";
529
+ }>;
530
+ label: z.ZodString;
531
+ required: z.ZodOptional<z.ZodBoolean>;
532
+ placeholder: z.ZodOptional<z.ZodString>;
533
+ }, z.core.$strip>>>;
534
+ children: z.ZodOptional<z.ZodObject<{
535
+ tool: z.ZodString;
536
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
537
+ cap: z.ZodOptional<z.ZodNumber>;
538
+ noun: z.ZodOptional<z.ZodString>;
539
+ create: z.ZodOptional<z.ZodObject<{
540
+ tool: z.ZodString;
541
+ noun: z.ZodOptional<z.ZodString>;
542
+ titleField: z.ZodOptional<z.ZodString>;
543
+ parentField: z.ZodOptional<z.ZodString>;
544
+ }, z.core.$strip>>;
545
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
546
+ noun: z.ZodOptional<z.ZodString>;
547
+ create: z.ZodOptional<z.ZodObject<{
548
+ tool: z.ZodString;
549
+ noun: z.ZodOptional<z.ZodString>;
550
+ titleField: z.ZodOptional<z.ZodString>;
551
+ parentField: z.ZodOptional<z.ZodString>;
552
+ }, z.core.$strip>>;
553
+ }, z.core.$strip>>>;
554
+ }, z.core.$strip>>;
291
555
  }, z.core.$strip>>>;
292
556
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
293
557
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
@@ -313,6 +577,172 @@ export declare const appManifestSchema: z.ZodObject<{
313
577
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
314
578
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
315
579
  }, z.core.$strip>>;
580
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
581
+ name: z.ZodString;
582
+ label: z.ZodString;
583
+ description: z.ZodOptional<z.ZodString>;
584
+ required: z.ZodOptional<z.ZodBoolean>;
585
+ scope: z.ZodOptional<z.ZodEnum<{
586
+ instance: "instance";
587
+ install: "install";
588
+ }>>;
589
+ }, z.core.$strip>>>;
590
+ migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
591
+ version: z.ZodString;
592
+ steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
593
+ op: z.ZodLiteral<"add">;
594
+ collection: z.ZodString;
595
+ field: z.ZodString;
596
+ default: z.ZodOptional<z.ZodUnknown>;
597
+ }, z.core.$strip>, z.ZodObject<{
598
+ op: z.ZodLiteral<"rename">;
599
+ collection: z.ZodString;
600
+ from: z.ZodString;
601
+ to: z.ZodString;
602
+ }, z.core.$strip>, z.ZodObject<{
603
+ op: z.ZodLiteral<"drop">;
604
+ collection: z.ZodString;
605
+ field: z.ZodString;
606
+ }, z.core.$strip>, z.ZodObject<{
607
+ op: z.ZodLiteral<"dropCollection">;
608
+ collection: z.ZodString;
609
+ }, z.core.$strip>, z.ZodObject<{
610
+ op: z.ZodLiteral<"replace">;
611
+ collection: z.ZodString;
612
+ field: z.ZodString;
613
+ from: z.ZodString;
614
+ to: z.ZodString;
615
+ }, z.core.$strip>], "op">>;
616
+ }, z.core.$strip>>>;
617
+ sdk: z.ZodOptional<z.ZodString>;
618
+ }, z.core.$strip>;
619
+ /**
620
+ * A manifest being written now, as `brydio validate`, `build` and `dev` read
621
+ * it: the same, and nothing retired (`placement_tab_retired`) — which a
622
+ * published version may still hold.
623
+ */
624
+ export declare const newAppManifestSchema: z.ZodObject<{
625
+ name: z.ZodString;
626
+ version: z.ZodString;
627
+ displayName: z.ZodOptional<z.ZodString>;
628
+ summary: z.ZodOptional<z.ZodString>;
629
+ description: z.ZodOptional<z.ZodString>;
630
+ author: z.ZodOptional<z.ZodObject<{
631
+ name: z.ZodString;
632
+ email: z.ZodOptional<z.ZodString>;
633
+ url: z.ZodOptional<z.ZodString>;
634
+ }, z.core.$strip>>;
635
+ homepage: z.ZodOptional<z.ZodString>;
636
+ repository: z.ZodOptional<z.ZodString>;
637
+ license: z.ZodOptional<z.ZodString>;
638
+ keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
639
+ links: z.ZodOptional<z.ZodObject<{
640
+ privacy: z.ZodOptional<z.ZodString>;
641
+ terms: z.ZodOptional<z.ZodString>;
642
+ support: z.ZodOptional<z.ZodString>;
643
+ }, z.core.$strip>>;
644
+ logo: z.ZodOptional<z.ZodObject<{
645
+ color: z.ZodString;
646
+ mono: z.ZodString;
647
+ }, z.core.$strip>>;
648
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
649
+ color: z.ZodString;
650
+ mono: z.ZodString;
651
+ }, z.core.$strip>]>>;
652
+ brandColor: z.ZodOptional<z.ZodString>;
653
+ brandColorDark: z.ZodOptional<z.ZodString>;
654
+ defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
655
+ skills: z.ZodOptional<z.ZodString>;
656
+ servers: z.ZodOptional<z.ZodString>;
657
+ integrations: z.ZodOptional<z.ZodString>;
658
+ requires: z.ZodOptional<z.ZodObject<{
659
+ servers: z.ZodDefault<z.ZodArray<z.ZodString>>;
660
+ integrations: z.ZodDefault<z.ZodArray<z.ZodString>>;
661
+ builtin: z.ZodDefault<z.ZodArray<z.ZodString>>;
662
+ }, z.core.$strip>>;
663
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
664
+ placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
665
+ key: z.ZodOptional<z.ZodString>;
666
+ kind: z.ZodEnum<{
667
+ home: "home";
668
+ "project-widget": "project-widget";
669
+ "project-tab": "project-tab";
670
+ "project-sidebar": "project-sidebar";
671
+ "workspace-sidebar": "workspace-sidebar";
672
+ }>;
673
+ screen: z.ZodString;
674
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
675
+ small: "small";
676
+ medium: "medium";
677
+ large: "large";
678
+ }>>>;
679
+ label: z.ZodOptional<z.ZodString>;
680
+ icon: z.ZodOptional<z.ZodString>;
681
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
682
+ type: z.ZodEnum<{
683
+ string: "string";
684
+ url: "url";
685
+ }>;
686
+ label: z.ZodString;
687
+ required: z.ZodOptional<z.ZodBoolean>;
688
+ placeholder: z.ZodOptional<z.ZodString>;
689
+ }, z.core.$strip>>>;
690
+ children: z.ZodOptional<z.ZodObject<{
691
+ tool: z.ZodString;
692
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
693
+ cap: z.ZodOptional<z.ZodNumber>;
694
+ noun: z.ZodOptional<z.ZodString>;
695
+ create: z.ZodOptional<z.ZodObject<{
696
+ tool: z.ZodString;
697
+ noun: z.ZodOptional<z.ZodString>;
698
+ titleField: z.ZodOptional<z.ZodString>;
699
+ parentField: z.ZodOptional<z.ZodString>;
700
+ }, z.core.$strip>>;
701
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
702
+ noun: z.ZodOptional<z.ZodString>;
703
+ create: z.ZodOptional<z.ZodObject<{
704
+ tool: z.ZodString;
705
+ noun: z.ZodOptional<z.ZodString>;
706
+ titleField: z.ZodOptional<z.ZodString>;
707
+ parentField: z.ZodOptional<z.ZodString>;
708
+ }, z.core.$strip>>;
709
+ }, z.core.$strip>>>;
710
+ }, z.core.$strip>>;
711
+ }, z.core.$strip>>>;
712
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
713
+ schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
714
+ search: z.ZodOptional<z.ZodArray<z.ZodString>>;
715
+ label: z.ZodOptional<z.ZodString>;
716
+ }, z.core.$strip>>>;
717
+ tools: z.ZodOptional<z.ZodObject<{
718
+ generated: z.ZodOptional<z.ZodBoolean>;
719
+ custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
720
+ name: z.ZodString;
721
+ description: z.ZodString;
722
+ handler: z.ZodString;
723
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
724
+ write: z.ZodOptional<z.ZodBoolean>;
725
+ collection: z.ZodOptional<z.ZodString>;
726
+ }, z.core.$strip>>>;
727
+ }, z.core.$strip>>;
728
+ screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
729
+ entry: z.ZodString;
730
+ }, z.core.$strip>>>;
731
+ grants: z.ZodOptional<z.ZodObject<{
732
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
733
+ collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
734
+ host: z.ZodOptional<z.ZodArray<z.ZodString>>;
735
+ }, z.core.$strip>>;
736
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
737
+ name: z.ZodString;
738
+ label: z.ZodString;
739
+ description: z.ZodOptional<z.ZodString>;
740
+ required: z.ZodOptional<z.ZodBoolean>;
741
+ scope: z.ZodOptional<z.ZodEnum<{
742
+ instance: "instance";
743
+ install: "install";
744
+ }>>;
745
+ }, z.core.$strip>>>;
316
746
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
317
747
  version: z.ZodString;
318
748
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{