@brydio/manifest 0.1.0-alpha.6 → 0.1.0-alpha.61

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,5 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { FieldTypeInvalid, type FieldType } from './field-types.js';
3
+ import { type OpenProblemCode } from './open-schema.js';
4
+ import { type ConfirmProblemCode } from './confirm-email.js';
5
+ import { type AnonymousProblemCode, type AnonymousSpec } from './anonymous.js';
6
+ import { type EditorsProblemCode, type ReadersProblemCode } from './readers.js';
3
7
  export { COLOUR_TOKENS, FIELD_LIMITS, parseFieldType, RESERVED_FIELDS, structuredFields, type FieldKind, type FieldType, } from './field-types.js';
4
8
  /**
5
9
  * What an app adds to `.brydio/app.json` to be more than a bundle of servers
@@ -26,8 +30,27 @@ declare const placementSettingSchema: z.ZodObject<{
26
30
  placeholder: z.ZodOptional<z.ZodString>;
27
31
  }, z.core.$strip>;
28
32
  export type PlacementSettingSpec = z.infer<typeof placementSettingSchema>;
33
+ /**
34
+ * How deep a folder's rows may nest, counting its own rows as the first
35
+ * level (ADR-A21): Issues → sprints → issues is two. Each level is listed
36
+ * only when a person opens its parent, so depth costs nothing while closed;
37
+ * the limit is for the sidebar's width and a person's patience.
38
+ */
39
+ export declare const MAX_FOLDER_DEPTH = 4;
40
+ /** The sizes a Home card or a project widget can be drawn at (CC11-F10). */
41
+ export declare const HOME_CARD_SIZES: readonly ["small", "medium", "large"];
42
+ export type HomeCardSize = (typeof HOME_CARD_SIZES)[number];
43
+ /** The kinds drawn as a card, which say the sizes they draw well at. */
44
+ export declare const SIZED_PLACEMENT_KINDS: readonly ["home", "project-widget"];
45
+ /** A stable identity for one independently addable placement offering. */
46
+ export declare const PLACEMENT_KEY: RegExp;
47
+ export declare function effectivePlacementKey(one: {
48
+ key?: string;
49
+ kind: string;
50
+ screen: string;
51
+ }): string;
29
52
  /** Most custom tools one app may declare (A3-F08). */
30
- export declare const MAX_CUSTOM_TOOLS = 20;
53
+ export declare const MAX_CUSTOM_TOOLS = 100;
31
54
  /** A tool name the model and a policy row can both use as it is. */
32
55
  export declare const CUSTOM_TOOL_NAME: RegExp;
33
56
  /**
@@ -41,16 +64,57 @@ declare const customToolSchema: z.ZodObject<{
41
64
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
42
65
  write: z.ZodOptional<z.ZodBoolean>;
43
66
  collection: z.ZodOptional<z.ZodString>;
67
+ public: z.ZodOptional<z.ZodBoolean>;
44
68
  }, z.core.$strip>;
45
69
  export type CustomToolSpec = z.infer<typeof customToolSchema>;
70
+ /** Most secrets one app may declare (ADR-A24). */
71
+ export declare const MAX_APP_SECRETS = 20;
72
+ /** The longest value one secret may hold, in characters. */
73
+ export declare const MAX_SECRET_CHARS: number;
74
+ /** A secret's name, as a handler asks for it: `api_key`. */
75
+ export declare const SECRET_NAME: RegExp;
76
+ /**
77
+ * A secret the app needs (ADR-A24): named here, never valued here. The value
78
+ * is entered in the app's settings by an administrator, or stored by the
79
+ * app's own handler with `secrets.set`, and only that app's handlers can read
80
+ * it, with `secrets.get`. A screen never can.
81
+ *
82
+ * `install` (the default) is one value for the whole install; `instance` is
83
+ * one per instance.
84
+ */
85
+ declare const secretSchema: z.ZodObject<{
86
+ name: z.ZodString;
87
+ label: z.ZodString;
88
+ description: z.ZodOptional<z.ZodString>;
89
+ required: z.ZodOptional<z.ZodBoolean>;
90
+ scope: z.ZodOptional<z.ZodEnum<{
91
+ instance: "instance";
92
+ install: "install";
93
+ }>>;
94
+ }, z.core.$strip>;
95
+ export type SecretSpec = z.infer<typeof secretSchema>;
96
+ /** The `instances` rules an app may declare (CA10). */
97
+ export declare const INSTANCE_RULES: readonly ["one-per-workspace"];
98
+ export type InstanceRule = (typeof INSTANCE_RULES)[number];
46
99
  declare const extensionShape: {
47
100
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
101
+ key: z.ZodOptional<z.ZodString>;
48
102
  kind: z.ZodEnum<{
103
+ home: "home";
104
+ "project-widget": "project-widget";
49
105
  "project-tab": "project-tab";
50
106
  "project-sidebar": "project-sidebar";
51
107
  "workspace-sidebar": "workspace-sidebar";
108
+ "public-page": "public-page";
109
+ "chat-card": "chat-card";
110
+ "person-profile": "person-profile";
52
111
  }>;
53
112
  screen: z.ZodString;
113
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
114
+ small: "small";
115
+ large: "large";
116
+ medium: "medium";
117
+ }>>>;
54
118
  label: z.ZodOptional<z.ZodString>;
55
119
  icon: z.ZodOptional<z.ZodString>;
56
120
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -62,14 +126,53 @@ declare const extensionShape: {
62
126
  required: z.ZodOptional<z.ZodBoolean>;
63
127
  placeholder: z.ZodOptional<z.ZodString>;
64
128
  }, z.core.$strip>>>;
129
+ children: z.ZodOptional<z.ZodObject<{
130
+ tool: z.ZodString;
131
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
132
+ cap: z.ZodOptional<z.ZodNumber>;
133
+ noun: z.ZodOptional<z.ZodString>;
134
+ create: z.ZodOptional<z.ZodObject<{
135
+ tool: z.ZodString;
136
+ noun: z.ZodOptional<z.ZodString>;
137
+ titleField: z.ZodOptional<z.ZodString>;
138
+ parentField: z.ZodOptional<z.ZodString>;
139
+ }, z.core.$strip>>;
140
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
141
+ noun: z.ZodOptional<z.ZodString>;
142
+ create: z.ZodOptional<z.ZodObject<{
143
+ tool: z.ZodString;
144
+ noun: z.ZodOptional<z.ZodString>;
145
+ titleField: z.ZodOptional<z.ZodString>;
146
+ parentField: z.ZodOptional<z.ZodString>;
147
+ }, z.core.$strip>>;
148
+ }, z.core.$strip>>>;
149
+ }, z.core.$strip>>;
65
150
  }, z.core.$strip>>>;
66
151
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
67
152
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
68
153
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
69
154
  label: z.ZodOptional<z.ZodString>;
155
+ openSchema: z.ZodOptional<z.ZodObject<{
156
+ fields: z.ZodString;
157
+ table: z.ZodOptional<z.ZodString>;
158
+ }, z.core.$strict>>;
159
+ publicRead: z.ZodOptional<z.ZodBoolean>;
160
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
161
+ confirmEmail: z.ZodOptional<z.ZodObject<{
162
+ field: z.ZodString;
163
+ subject: z.ZodOptional<z.ZodString>;
164
+ message: z.ZodOptional<z.ZodString>;
165
+ link: z.ZodOptional<z.ZodBoolean>;
166
+ }, z.core.$strict>>;
167
+ anonymous: z.ZodOptional<z.ZodObject<{
168
+ group: z.ZodString;
169
+ minimum: z.ZodOptional<z.ZodNumber>;
170
+ }, z.core.$strict>>;
171
+ readers: z.ZodOptional<z.ZodString>;
172
+ editors: z.ZodOptional<z.ZodString>;
70
173
  }, z.core.$strip>>>;
71
174
  tools: z.ZodOptional<z.ZodObject<{
72
- generated: z.ZodOptional<z.ZodBoolean>;
175
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
73
176
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
74
177
  name: z.ZodString;
75
178
  description: z.ZodString;
@@ -77,16 +180,41 @@ declare const extensionShape: {
77
180
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
78
181
  write: z.ZodOptional<z.ZodBoolean>;
79
182
  collection: z.ZodOptional<z.ZodString>;
183
+ public: z.ZodOptional<z.ZodBoolean>;
80
184
  }, z.core.$strip>>>;
81
185
  }, z.core.$strip>>;
82
186
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
83
187
  entry: z.ZodString;
188
+ kind: z.ZodOptional<z.ZodEnum<{
189
+ tree: "tree";
190
+ frame: "frame";
191
+ }>>;
84
192
  }, z.core.$strip>>>;
85
193
  grants: z.ZodOptional<z.ZodObject<{
86
194
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
87
195
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
196
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
197
  }, z.core.$strip>>;
198
+ /** The secrets its handlers read (ADR-A24): names only, never values. */
199
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
200
+ name: z.ZodString;
201
+ label: z.ZodString;
202
+ description: z.ZodOptional<z.ZodString>;
203
+ required: z.ZodOptional<z.ZodBoolean>;
204
+ scope: z.ZodOptional<z.ZodEnum<{
205
+ instance: "instance";
206
+ install: "install";
207
+ }>>;
208
+ }, z.core.$strip>>>;
209
+ /**
210
+ * How many instances a workspace may keep (CA10). `"one-per-workspace"`:
211
+ * a single workspace instance, shown in the sidebar and on any project as
212
+ * a view of that project's records; never a project's or a person's own.
213
+ * Left out, as many as people make.
214
+ */
215
+ instances: z.ZodOptional<z.ZodEnum<{
216
+ "one-per-workspace": "one-per-workspace";
217
+ }>>;
90
218
  /**
91
219
  * How records move when the schema changes between versions (A3-F07).
92
220
  * Checked against the previous version when a version is published, and
@@ -125,6 +253,13 @@ declare const extensionShape: {
125
253
  * still loads; `POST /apps/publish` requires it and checks it (A5-F04-S03).
126
254
  */
127
255
  sdk: z.ZodOptional<z.ZodString>;
256
+ /**
257
+ * The app's own colours and shape (PB21): an accent, named colours each
258
+ * with a light and a dark value, a rounding and a density. No font: every
259
+ * app uses Brydio's. Checked by `themeProblems` (`look.ts`), Brydio's one
260
+ * rule set, copied.
261
+ */
262
+ theme: z.ZodOptional<z.ZodUnknown>;
128
263
  };
129
264
  /** One problem with an app's additions, named down to the field. */
130
265
  export interface DataProblem {
@@ -133,7 +268,7 @@ export interface DataProblem {
133
268
  field?: string;
134
269
  message: string;
135
270
  }
136
- 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';
271
+ export type DataProblemCode = FieldTypeInvalid['code'] | OpenProblemCode | ConfirmProblemCode | AnonymousProblemCode | ReadersProblemCode | EditorsProblemCode | '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_public_shape' | 'placement_public_nothing' | 'placement_chat_card_shape' | 'placement_person_profile_shape' | 'grant_tool_cross_app_self' | 'placement_children_too_deep' | 'placement_create_tool_unknown' | 'placement_create_not_write' | 'secret_name_taken' | 'grant_secrets_missing' | 'instances_needs_sidebar';
137
272
  type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
138
273
  /**
139
274
  * Everything wrong with an app's additions that a type cannot say.
@@ -142,18 +277,44 @@ type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
142
277
  * report; the zod schemas below run it too, so a parse never accepts what
143
278
  * this refuses.
144
279
  */
145
- export declare function dataProblems(additions: Additions, options?: {
280
+ export interface DataProblemOptions {
281
+ /** Off where the grants are the install's record, not the manifest's. */
146
282
  grants?: boolean;
147
- }): DataProblem[];
283
+ /** On for a manifest being written now: refuses kinds that are retired, such as `project-tab`. */
284
+ retired?: boolean;
285
+ }
286
+ export declare function dataProblems(additions: Additions, options?: DataProblemOptions): DataProblem[];
287
+ /**
288
+ * Another installed app's tool, as `grants.tools` names it (FO07): the name
289
+ * the assistant knows it by, `<slug>__<tool>`. Null for anything else.
290
+ * A handler calls it with `tools.call('<slug>__<tool>', input)`.
291
+ */
292
+ export declare function crossAppTool(name: string): {
293
+ app: string;
294
+ tool: string;
295
+ } | null;
296
+ /** An app's name as the front of its tools' assistant names: `issue-tracker` → `issue_tracker`. */
297
+ export declare const appToolPrefix: (name: string) => string;
148
298
  /** The additions alone, for code that has the rest of the manifest already. */
149
299
  export declare const manifestExtensionsSchema: z.ZodObject<{
150
300
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
301
+ key: z.ZodOptional<z.ZodString>;
151
302
  kind: z.ZodEnum<{
303
+ home: "home";
304
+ "project-widget": "project-widget";
152
305
  "project-tab": "project-tab";
153
306
  "project-sidebar": "project-sidebar";
154
307
  "workspace-sidebar": "workspace-sidebar";
308
+ "public-page": "public-page";
309
+ "chat-card": "chat-card";
310
+ "person-profile": "person-profile";
155
311
  }>;
156
312
  screen: z.ZodString;
313
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
314
+ small: "small";
315
+ large: "large";
316
+ medium: "medium";
317
+ }>>>;
157
318
  label: z.ZodOptional<z.ZodString>;
158
319
  icon: z.ZodOptional<z.ZodString>;
159
320
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -165,14 +326,53 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
165
326
  required: z.ZodOptional<z.ZodBoolean>;
166
327
  placeholder: z.ZodOptional<z.ZodString>;
167
328
  }, z.core.$strip>>>;
329
+ children: z.ZodOptional<z.ZodObject<{
330
+ tool: z.ZodString;
331
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
332
+ cap: z.ZodOptional<z.ZodNumber>;
333
+ noun: z.ZodOptional<z.ZodString>;
334
+ create: z.ZodOptional<z.ZodObject<{
335
+ tool: z.ZodString;
336
+ noun: z.ZodOptional<z.ZodString>;
337
+ titleField: z.ZodOptional<z.ZodString>;
338
+ parentField: z.ZodOptional<z.ZodString>;
339
+ }, z.core.$strip>>;
340
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
341
+ noun: z.ZodOptional<z.ZodString>;
342
+ create: z.ZodOptional<z.ZodObject<{
343
+ tool: z.ZodString;
344
+ noun: z.ZodOptional<z.ZodString>;
345
+ titleField: z.ZodOptional<z.ZodString>;
346
+ parentField: z.ZodOptional<z.ZodString>;
347
+ }, z.core.$strip>>;
348
+ }, z.core.$strip>>>;
349
+ }, z.core.$strip>>;
168
350
  }, z.core.$strip>>>;
169
351
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
170
352
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
171
353
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
172
354
  label: z.ZodOptional<z.ZodString>;
355
+ openSchema: z.ZodOptional<z.ZodObject<{
356
+ fields: z.ZodString;
357
+ table: z.ZodOptional<z.ZodString>;
358
+ }, z.core.$strict>>;
359
+ publicRead: z.ZodOptional<z.ZodBoolean>;
360
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
361
+ confirmEmail: z.ZodOptional<z.ZodObject<{
362
+ field: z.ZodString;
363
+ subject: z.ZodOptional<z.ZodString>;
364
+ message: z.ZodOptional<z.ZodString>;
365
+ link: z.ZodOptional<z.ZodBoolean>;
366
+ }, z.core.$strict>>;
367
+ anonymous: z.ZodOptional<z.ZodObject<{
368
+ group: z.ZodString;
369
+ minimum: z.ZodOptional<z.ZodNumber>;
370
+ }, z.core.$strict>>;
371
+ readers: z.ZodOptional<z.ZodString>;
372
+ editors: z.ZodOptional<z.ZodString>;
173
373
  }, z.core.$strip>>>;
174
374
  tools: z.ZodOptional<z.ZodObject<{
175
- generated: z.ZodOptional<z.ZodBoolean>;
375
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
176
376
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
177
377
  name: z.ZodString;
178
378
  description: z.ZodString;
@@ -180,16 +380,34 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
180
380
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
181
381
  write: z.ZodOptional<z.ZodBoolean>;
182
382
  collection: z.ZodOptional<z.ZodString>;
383
+ public: z.ZodOptional<z.ZodBoolean>;
183
384
  }, z.core.$strip>>>;
184
385
  }, z.core.$strip>>;
185
386
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
186
387
  entry: z.ZodString;
388
+ kind: z.ZodOptional<z.ZodEnum<{
389
+ tree: "tree";
390
+ frame: "frame";
391
+ }>>;
187
392
  }, z.core.$strip>>>;
188
393
  grants: z.ZodOptional<z.ZodObject<{
189
394
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
190
395
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
191
396
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
192
397
  }, z.core.$strip>>;
398
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
399
+ name: z.ZodString;
400
+ label: z.ZodString;
401
+ description: z.ZodOptional<z.ZodString>;
402
+ required: z.ZodOptional<z.ZodBoolean>;
403
+ scope: z.ZodOptional<z.ZodEnum<{
404
+ instance: "instance";
405
+ install: "install";
406
+ }>>;
407
+ }, z.core.$strip>>>;
408
+ instances: z.ZodOptional<z.ZodEnum<{
409
+ "one-per-workspace": "one-per-workspace";
410
+ }>>;
193
411
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
194
412
  version: z.ZodString;
195
413
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -218,6 +436,7 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
218
436
  }, z.core.$strip>], "op">>;
219
437
  }, z.core.$strip>>>;
220
438
  sdk: z.ZodOptional<z.ZodString>;
439
+ theme: z.ZodOptional<z.ZodUnknown>;
221
440
  }, z.core.$strip>;
222
441
  /**
223
442
  * The additions as code reads a manifest that was checked whole when it was
@@ -226,12 +445,23 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
226
445
  */
227
446
  export declare const storedExtensionsSchema: z.ZodObject<{
228
447
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
448
+ key: z.ZodOptional<z.ZodString>;
229
449
  kind: z.ZodEnum<{
450
+ home: "home";
451
+ "project-widget": "project-widget";
230
452
  "project-tab": "project-tab";
231
453
  "project-sidebar": "project-sidebar";
232
454
  "workspace-sidebar": "workspace-sidebar";
455
+ "public-page": "public-page";
456
+ "chat-card": "chat-card";
457
+ "person-profile": "person-profile";
233
458
  }>;
234
459
  screen: z.ZodString;
460
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
461
+ small: "small";
462
+ large: "large";
463
+ medium: "medium";
464
+ }>>>;
235
465
  label: z.ZodOptional<z.ZodString>;
236
466
  icon: z.ZodOptional<z.ZodString>;
237
467
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -243,14 +473,53 @@ export declare const storedExtensionsSchema: z.ZodObject<{
243
473
  required: z.ZodOptional<z.ZodBoolean>;
244
474
  placeholder: z.ZodOptional<z.ZodString>;
245
475
  }, z.core.$strip>>>;
476
+ children: z.ZodOptional<z.ZodObject<{
477
+ tool: z.ZodString;
478
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
479
+ cap: z.ZodOptional<z.ZodNumber>;
480
+ noun: z.ZodOptional<z.ZodString>;
481
+ create: z.ZodOptional<z.ZodObject<{
482
+ tool: z.ZodString;
483
+ noun: z.ZodOptional<z.ZodString>;
484
+ titleField: z.ZodOptional<z.ZodString>;
485
+ parentField: z.ZodOptional<z.ZodString>;
486
+ }, z.core.$strip>>;
487
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
488
+ noun: z.ZodOptional<z.ZodString>;
489
+ create: z.ZodOptional<z.ZodObject<{
490
+ tool: z.ZodString;
491
+ noun: z.ZodOptional<z.ZodString>;
492
+ titleField: z.ZodOptional<z.ZodString>;
493
+ parentField: z.ZodOptional<z.ZodString>;
494
+ }, z.core.$strip>>;
495
+ }, z.core.$strip>>>;
496
+ }, z.core.$strip>>;
246
497
  }, z.core.$strip>>>;
247
498
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
248
499
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
249
500
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
250
501
  label: z.ZodOptional<z.ZodString>;
502
+ openSchema: z.ZodOptional<z.ZodObject<{
503
+ fields: z.ZodString;
504
+ table: z.ZodOptional<z.ZodString>;
505
+ }, z.core.$strict>>;
506
+ publicRead: z.ZodOptional<z.ZodBoolean>;
507
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
508
+ confirmEmail: z.ZodOptional<z.ZodObject<{
509
+ field: z.ZodString;
510
+ subject: z.ZodOptional<z.ZodString>;
511
+ message: z.ZodOptional<z.ZodString>;
512
+ link: z.ZodOptional<z.ZodBoolean>;
513
+ }, z.core.$strict>>;
514
+ anonymous: z.ZodOptional<z.ZodObject<{
515
+ group: z.ZodString;
516
+ minimum: z.ZodOptional<z.ZodNumber>;
517
+ }, z.core.$strict>>;
518
+ readers: z.ZodOptional<z.ZodString>;
519
+ editors: z.ZodOptional<z.ZodString>;
251
520
  }, z.core.$strip>>>;
252
521
  tools: z.ZodOptional<z.ZodObject<{
253
- generated: z.ZodOptional<z.ZodBoolean>;
522
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
254
523
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
255
524
  name: z.ZodString;
256
525
  description: z.ZodString;
@@ -258,16 +527,34 @@ export declare const storedExtensionsSchema: z.ZodObject<{
258
527
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
259
528
  write: z.ZodOptional<z.ZodBoolean>;
260
529
  collection: z.ZodOptional<z.ZodString>;
530
+ public: z.ZodOptional<z.ZodBoolean>;
261
531
  }, z.core.$strip>>>;
262
532
  }, z.core.$strip>>;
263
533
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
264
534
  entry: z.ZodString;
535
+ kind: z.ZodOptional<z.ZodEnum<{
536
+ tree: "tree";
537
+ frame: "frame";
538
+ }>>;
265
539
  }, z.core.$strip>>>;
266
540
  grants: z.ZodOptional<z.ZodObject<{
267
541
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
268
542
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
269
543
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
270
544
  }, z.core.$strip>>;
545
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
546
+ name: z.ZodString;
547
+ label: z.ZodString;
548
+ description: z.ZodOptional<z.ZodString>;
549
+ required: z.ZodOptional<z.ZodBoolean>;
550
+ scope: z.ZodOptional<z.ZodEnum<{
551
+ instance: "instance";
552
+ install: "install";
553
+ }>>;
554
+ }, z.core.$strip>>>;
555
+ instances: z.ZodOptional<z.ZodEnum<{
556
+ "one-per-workspace": "one-per-workspace";
557
+ }>>;
271
558
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
272
559
  version: z.ZodString;
273
560
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -296,6 +583,7 @@ export declare const storedExtensionsSchema: z.ZodObject<{
296
583
  }, z.core.$strip>], "op">>;
297
584
  }, z.core.$strip>>>;
298
585
  sdk: z.ZodOptional<z.ZodString>;
586
+ theme: z.ZodOptional<z.ZodUnknown>;
299
587
  }, z.core.$strip>;
300
588
  /** E5's manifest with the additions: the whole `.brydio/app.json` of an app. */
301
589
  export declare const appManifestSchema: z.ZodObject<{
@@ -318,7 +606,200 @@ export declare const appManifestSchema: z.ZodObject<{
318
606
  terms: z.ZodOptional<z.ZodString>;
319
607
  support: z.ZodOptional<z.ZodString>;
320
608
  }, z.core.$strip>>;
321
- icon: z.ZodOptional<z.ZodString>;
609
+ logo: z.ZodOptional<z.ZodObject<{
610
+ color: z.ZodString;
611
+ mono: z.ZodString;
612
+ }, z.core.$strip>>;
613
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
614
+ color: z.ZodString;
615
+ mono: z.ZodString;
616
+ }, z.core.$strip>]>>;
617
+ brandColor: z.ZodOptional<z.ZodString>;
618
+ brandColorDark: z.ZodOptional<z.ZodString>;
619
+ defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
620
+ skills: z.ZodOptional<z.ZodString>;
621
+ servers: z.ZodOptional<z.ZodString>;
622
+ integrations: z.ZodOptional<z.ZodString>;
623
+ requires: z.ZodOptional<z.ZodObject<{
624
+ servers: z.ZodDefault<z.ZodArray<z.ZodString>>;
625
+ integrations: z.ZodDefault<z.ZodArray<z.ZodString>>;
626
+ builtin: z.ZodDefault<z.ZodArray<z.ZodString>>;
627
+ }, z.core.$strip>>;
628
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
629
+ placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
630
+ key: z.ZodOptional<z.ZodString>;
631
+ kind: z.ZodEnum<{
632
+ home: "home";
633
+ "project-widget": "project-widget";
634
+ "project-tab": "project-tab";
635
+ "project-sidebar": "project-sidebar";
636
+ "workspace-sidebar": "workspace-sidebar";
637
+ "public-page": "public-page";
638
+ "chat-card": "chat-card";
639
+ "person-profile": "person-profile";
640
+ }>;
641
+ screen: z.ZodString;
642
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
643
+ small: "small";
644
+ large: "large";
645
+ medium: "medium";
646
+ }>>>;
647
+ label: z.ZodOptional<z.ZodString>;
648
+ icon: z.ZodOptional<z.ZodString>;
649
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
650
+ type: z.ZodEnum<{
651
+ string: "string";
652
+ url: "url";
653
+ }>;
654
+ label: z.ZodString;
655
+ required: z.ZodOptional<z.ZodBoolean>;
656
+ placeholder: z.ZodOptional<z.ZodString>;
657
+ }, z.core.$strip>>>;
658
+ children: z.ZodOptional<z.ZodObject<{
659
+ tool: z.ZodString;
660
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
661
+ cap: z.ZodOptional<z.ZodNumber>;
662
+ noun: z.ZodOptional<z.ZodString>;
663
+ create: z.ZodOptional<z.ZodObject<{
664
+ tool: z.ZodString;
665
+ noun: z.ZodOptional<z.ZodString>;
666
+ titleField: z.ZodOptional<z.ZodString>;
667
+ parentField: z.ZodOptional<z.ZodString>;
668
+ }, z.core.$strip>>;
669
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
670
+ noun: z.ZodOptional<z.ZodString>;
671
+ create: z.ZodOptional<z.ZodObject<{
672
+ tool: z.ZodString;
673
+ noun: z.ZodOptional<z.ZodString>;
674
+ titleField: z.ZodOptional<z.ZodString>;
675
+ parentField: z.ZodOptional<z.ZodString>;
676
+ }, z.core.$strip>>;
677
+ }, z.core.$strip>>>;
678
+ }, z.core.$strip>>;
679
+ }, z.core.$strip>>>;
680
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
681
+ schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
682
+ search: z.ZodOptional<z.ZodArray<z.ZodString>>;
683
+ label: z.ZodOptional<z.ZodString>;
684
+ openSchema: z.ZodOptional<z.ZodObject<{
685
+ fields: z.ZodString;
686
+ table: z.ZodOptional<z.ZodString>;
687
+ }, z.core.$strict>>;
688
+ publicRead: z.ZodOptional<z.ZodBoolean>;
689
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
690
+ confirmEmail: z.ZodOptional<z.ZodObject<{
691
+ field: z.ZodString;
692
+ subject: z.ZodOptional<z.ZodString>;
693
+ message: z.ZodOptional<z.ZodString>;
694
+ link: z.ZodOptional<z.ZodBoolean>;
695
+ }, z.core.$strict>>;
696
+ anonymous: z.ZodOptional<z.ZodObject<{
697
+ group: z.ZodString;
698
+ minimum: z.ZodOptional<z.ZodNumber>;
699
+ }, z.core.$strict>>;
700
+ readers: z.ZodOptional<z.ZodString>;
701
+ editors: z.ZodOptional<z.ZodString>;
702
+ }, z.core.$strip>>>;
703
+ tools: z.ZodOptional<z.ZodObject<{
704
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
705
+ custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
706
+ name: z.ZodString;
707
+ description: z.ZodString;
708
+ handler: z.ZodString;
709
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
710
+ write: z.ZodOptional<z.ZodBoolean>;
711
+ collection: z.ZodOptional<z.ZodString>;
712
+ public: z.ZodOptional<z.ZodBoolean>;
713
+ }, z.core.$strip>>>;
714
+ }, z.core.$strip>>;
715
+ screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
716
+ entry: z.ZodString;
717
+ kind: z.ZodOptional<z.ZodEnum<{
718
+ tree: "tree";
719
+ frame: "frame";
720
+ }>>;
721
+ }, z.core.$strip>>>;
722
+ grants: z.ZodOptional<z.ZodObject<{
723
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
724
+ collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
725
+ host: z.ZodOptional<z.ZodArray<z.ZodString>>;
726
+ }, z.core.$strip>>;
727
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
728
+ name: z.ZodString;
729
+ label: z.ZodString;
730
+ description: z.ZodOptional<z.ZodString>;
731
+ required: z.ZodOptional<z.ZodBoolean>;
732
+ scope: z.ZodOptional<z.ZodEnum<{
733
+ instance: "instance";
734
+ install: "install";
735
+ }>>;
736
+ }, z.core.$strip>>>;
737
+ instances: z.ZodOptional<z.ZodEnum<{
738
+ "one-per-workspace": "one-per-workspace";
739
+ }>>;
740
+ migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
741
+ version: z.ZodString;
742
+ steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
743
+ op: z.ZodLiteral<"add">;
744
+ collection: z.ZodString;
745
+ field: z.ZodString;
746
+ default: z.ZodOptional<z.ZodUnknown>;
747
+ }, z.core.$strip>, z.ZodObject<{
748
+ op: z.ZodLiteral<"rename">;
749
+ collection: z.ZodString;
750
+ from: z.ZodString;
751
+ to: z.ZodString;
752
+ }, z.core.$strip>, z.ZodObject<{
753
+ op: z.ZodLiteral<"drop">;
754
+ collection: z.ZodString;
755
+ field: z.ZodString;
756
+ }, z.core.$strip>, z.ZodObject<{
757
+ op: z.ZodLiteral<"dropCollection">;
758
+ collection: z.ZodString;
759
+ }, z.core.$strip>, z.ZodObject<{
760
+ op: z.ZodLiteral<"replace">;
761
+ collection: z.ZodString;
762
+ field: z.ZodString;
763
+ from: z.ZodString;
764
+ to: z.ZodString;
765
+ }, z.core.$strip>], "op">>;
766
+ }, z.core.$strip>>>;
767
+ sdk: z.ZodOptional<z.ZodString>;
768
+ theme: z.ZodOptional<z.ZodUnknown>;
769
+ }, z.core.$strip>;
770
+ /**
771
+ * A manifest being written now, as `brydio validate`, `build` and `dev` read
772
+ * it: the same, and nothing retired (`placement_tab_retired`) — which a
773
+ * published version may still hold.
774
+ */
775
+ export declare const newAppManifestSchema: z.ZodObject<{
776
+ name: z.ZodString;
777
+ version: z.ZodString;
778
+ displayName: z.ZodOptional<z.ZodString>;
779
+ summary: z.ZodOptional<z.ZodString>;
780
+ description: z.ZodOptional<z.ZodString>;
781
+ author: z.ZodOptional<z.ZodObject<{
782
+ name: z.ZodString;
783
+ email: z.ZodOptional<z.ZodString>;
784
+ url: z.ZodOptional<z.ZodString>;
785
+ }, z.core.$strip>>;
786
+ homepage: z.ZodOptional<z.ZodString>;
787
+ repository: z.ZodOptional<z.ZodString>;
788
+ license: z.ZodOptional<z.ZodString>;
789
+ keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
790
+ links: z.ZodOptional<z.ZodObject<{
791
+ privacy: z.ZodOptional<z.ZodString>;
792
+ terms: z.ZodOptional<z.ZodString>;
793
+ support: z.ZodOptional<z.ZodString>;
794
+ }, z.core.$strip>>;
795
+ logo: z.ZodOptional<z.ZodObject<{
796
+ color: z.ZodString;
797
+ mono: z.ZodString;
798
+ }, z.core.$strip>>;
799
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
800
+ color: z.ZodString;
801
+ mono: z.ZodString;
802
+ }, z.core.$strip>]>>;
322
803
  brandColor: z.ZodOptional<z.ZodString>;
323
804
  brandColorDark: z.ZodOptional<z.ZodString>;
324
805
  defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -332,12 +813,23 @@ export declare const appManifestSchema: z.ZodObject<{
332
813
  }, z.core.$strip>>;
333
814
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
334
815
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
816
+ key: z.ZodOptional<z.ZodString>;
335
817
  kind: z.ZodEnum<{
818
+ home: "home";
819
+ "project-widget": "project-widget";
336
820
  "project-tab": "project-tab";
337
821
  "project-sidebar": "project-sidebar";
338
822
  "workspace-sidebar": "workspace-sidebar";
823
+ "public-page": "public-page";
824
+ "chat-card": "chat-card";
825
+ "person-profile": "person-profile";
339
826
  }>;
340
827
  screen: z.ZodString;
828
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
829
+ small: "small";
830
+ large: "large";
831
+ medium: "medium";
832
+ }>>>;
341
833
  label: z.ZodOptional<z.ZodString>;
342
834
  icon: z.ZodOptional<z.ZodString>;
343
835
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -349,14 +841,53 @@ export declare const appManifestSchema: z.ZodObject<{
349
841
  required: z.ZodOptional<z.ZodBoolean>;
350
842
  placeholder: z.ZodOptional<z.ZodString>;
351
843
  }, z.core.$strip>>>;
844
+ children: z.ZodOptional<z.ZodObject<{
845
+ tool: z.ZodString;
846
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
847
+ cap: z.ZodOptional<z.ZodNumber>;
848
+ noun: z.ZodOptional<z.ZodString>;
849
+ create: z.ZodOptional<z.ZodObject<{
850
+ tool: z.ZodString;
851
+ noun: z.ZodOptional<z.ZodString>;
852
+ titleField: z.ZodOptional<z.ZodString>;
853
+ parentField: z.ZodOptional<z.ZodString>;
854
+ }, z.core.$strip>>;
855
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
856
+ noun: z.ZodOptional<z.ZodString>;
857
+ create: z.ZodOptional<z.ZodObject<{
858
+ tool: z.ZodString;
859
+ noun: z.ZodOptional<z.ZodString>;
860
+ titleField: z.ZodOptional<z.ZodString>;
861
+ parentField: z.ZodOptional<z.ZodString>;
862
+ }, z.core.$strip>>;
863
+ }, z.core.$strip>>>;
864
+ }, z.core.$strip>>;
352
865
  }, z.core.$strip>>>;
353
866
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
354
867
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
355
868
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
356
869
  label: z.ZodOptional<z.ZodString>;
870
+ openSchema: z.ZodOptional<z.ZodObject<{
871
+ fields: z.ZodString;
872
+ table: z.ZodOptional<z.ZodString>;
873
+ }, z.core.$strict>>;
874
+ publicRead: z.ZodOptional<z.ZodBoolean>;
875
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
876
+ confirmEmail: z.ZodOptional<z.ZodObject<{
877
+ field: z.ZodString;
878
+ subject: z.ZodOptional<z.ZodString>;
879
+ message: z.ZodOptional<z.ZodString>;
880
+ link: z.ZodOptional<z.ZodBoolean>;
881
+ }, z.core.$strict>>;
882
+ anonymous: z.ZodOptional<z.ZodObject<{
883
+ group: z.ZodString;
884
+ minimum: z.ZodOptional<z.ZodNumber>;
885
+ }, z.core.$strict>>;
886
+ readers: z.ZodOptional<z.ZodString>;
887
+ editors: z.ZodOptional<z.ZodString>;
357
888
  }, z.core.$strip>>>;
358
889
  tools: z.ZodOptional<z.ZodObject<{
359
- generated: z.ZodOptional<z.ZodBoolean>;
890
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
360
891
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
361
892
  name: z.ZodString;
362
893
  description: z.ZodString;
@@ -364,16 +895,34 @@ export declare const appManifestSchema: z.ZodObject<{
364
895
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
365
896
  write: z.ZodOptional<z.ZodBoolean>;
366
897
  collection: z.ZodOptional<z.ZodString>;
898
+ public: z.ZodOptional<z.ZodBoolean>;
367
899
  }, z.core.$strip>>>;
368
900
  }, z.core.$strip>>;
369
901
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
370
902
  entry: z.ZodString;
903
+ kind: z.ZodOptional<z.ZodEnum<{
904
+ tree: "tree";
905
+ frame: "frame";
906
+ }>>;
371
907
  }, z.core.$strip>>>;
372
908
  grants: z.ZodOptional<z.ZodObject<{
373
909
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
374
910
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
375
911
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
376
912
  }, z.core.$strip>>;
913
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
914
+ name: z.ZodString;
915
+ label: z.ZodString;
916
+ description: z.ZodOptional<z.ZodString>;
917
+ required: z.ZodOptional<z.ZodBoolean>;
918
+ scope: z.ZodOptional<z.ZodEnum<{
919
+ instance: "instance";
920
+ install: "install";
921
+ }>>;
922
+ }, z.core.$strip>>>;
923
+ instances: z.ZodOptional<z.ZodEnum<{
924
+ "one-per-workspace": "one-per-workspace";
925
+ }>>;
377
926
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
378
927
  version: z.ZodString;
379
928
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -402,6 +951,7 @@ export declare const appManifestSchema: z.ZodObject<{
402
951
  }, z.core.$strip>], "op">>;
403
952
  }, z.core.$strip>>>;
404
953
  sdk: z.ZodOptional<z.ZodString>;
954
+ theme: z.ZodOptional<z.ZodUnknown>;
405
955
  }, z.core.$strip>;
406
956
  export type ManifestExtensions = z.infer<typeof manifestExtensionsSchema>;
407
957
  export type AppManifestWithData = z.infer<typeof appManifestSchema>;
@@ -422,6 +972,23 @@ export interface CollectionSpec {
422
972
  search: string[];
423
973
  /** The one `project` field, whose value is copied to `app_document.project_id`. */
424
974
  projectField: string | null;
975
+ /**
976
+ * Fields defined at runtime (P5): the companion collection, and the field
977
+ * naming a row's table (null: one table per instance). The store reads the
978
+ * live definitions; `fields` here holds only the manifest's own.
979
+ */
980
+ openSchema?: {
981
+ fields: string;
982
+ table: string | null;
983
+ };
984
+ /** On a companion: the open collection whose fields its records define (P5). */
985
+ definesFieldsOf?: string;
986
+ /** Answers kept with no writer, read only a whole group of at least `minimum` at a time (P13). */
987
+ anonymous?: AnonymousSpec;
988
+ /** The string[] field naming who alone may read a record, when it names anyone (P16). */
989
+ readers?: string;
990
+ /** The string[] field naming who alone may change a record, when it names anyone (DW06). */
991
+ editors?: string;
425
992
  }
426
993
  /**
427
994
  * The singular a collection's tools are named with: the manifest's, else the