@brydio/manifest 0.1.0-alpha.5 → 0.1.0-alpha.50

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,6 +30,25 @@ 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
53
  export declare const MAX_CUSTOM_TOOLS = 20;
31
54
  /** A tool name the model and a policy row can both use as it is. */
@@ -41,16 +64,56 @@ 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";
52
110
  }>;
53
111
  screen: z.ZodString;
112
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
113
+ small: "small";
114
+ medium: "medium";
115
+ large: "large";
116
+ }>>>;
54
117
  label: z.ZodOptional<z.ZodString>;
55
118
  icon: z.ZodOptional<z.ZodString>;
56
119
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -62,14 +125,53 @@ declare const extensionShape: {
62
125
  required: z.ZodOptional<z.ZodBoolean>;
63
126
  placeholder: z.ZodOptional<z.ZodString>;
64
127
  }, z.core.$strip>>>;
128
+ children: z.ZodOptional<z.ZodObject<{
129
+ tool: z.ZodString;
130
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
131
+ cap: z.ZodOptional<z.ZodNumber>;
132
+ noun: z.ZodOptional<z.ZodString>;
133
+ create: z.ZodOptional<z.ZodObject<{
134
+ tool: z.ZodString;
135
+ noun: z.ZodOptional<z.ZodString>;
136
+ titleField: z.ZodOptional<z.ZodString>;
137
+ parentField: z.ZodOptional<z.ZodString>;
138
+ }, z.core.$strip>>;
139
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
140
+ noun: z.ZodOptional<z.ZodString>;
141
+ create: z.ZodOptional<z.ZodObject<{
142
+ tool: z.ZodString;
143
+ noun: z.ZodOptional<z.ZodString>;
144
+ titleField: z.ZodOptional<z.ZodString>;
145
+ parentField: z.ZodOptional<z.ZodString>;
146
+ }, z.core.$strip>>;
147
+ }, z.core.$strip>>>;
148
+ }, z.core.$strip>>;
65
149
  }, z.core.$strip>>>;
66
150
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
67
151
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
68
152
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
69
153
  label: z.ZodOptional<z.ZodString>;
154
+ openSchema: z.ZodOptional<z.ZodObject<{
155
+ fields: z.ZodString;
156
+ table: z.ZodOptional<z.ZodString>;
157
+ }, z.core.$strict>>;
158
+ publicRead: z.ZodOptional<z.ZodBoolean>;
159
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
160
+ confirmEmail: z.ZodOptional<z.ZodObject<{
161
+ field: z.ZodString;
162
+ subject: z.ZodOptional<z.ZodString>;
163
+ message: z.ZodOptional<z.ZodString>;
164
+ link: z.ZodOptional<z.ZodBoolean>;
165
+ }, z.core.$strict>>;
166
+ anonymous: z.ZodOptional<z.ZodObject<{
167
+ group: z.ZodString;
168
+ minimum: z.ZodOptional<z.ZodNumber>;
169
+ }, z.core.$strict>>;
170
+ readers: z.ZodOptional<z.ZodString>;
171
+ editors: z.ZodOptional<z.ZodString>;
70
172
  }, z.core.$strip>>>;
71
173
  tools: z.ZodOptional<z.ZodObject<{
72
- generated: z.ZodOptional<z.ZodBoolean>;
174
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
73
175
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
74
176
  name: z.ZodString;
75
177
  description: z.ZodString;
@@ -77,6 +179,7 @@ declare const extensionShape: {
77
179
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
78
180
  write: z.ZodOptional<z.ZodBoolean>;
79
181
  collection: z.ZodOptional<z.ZodString>;
182
+ public: z.ZodOptional<z.ZodBoolean>;
80
183
  }, z.core.$strip>>>;
81
184
  }, z.core.$strip>>;
82
185
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -87,6 +190,26 @@ declare const extensionShape: {
87
190
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
191
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
192
  }, z.core.$strip>>;
193
+ /** The secrets its handlers read (ADR-A24): names only, never values. */
194
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
195
+ name: z.ZodString;
196
+ label: z.ZodString;
197
+ description: z.ZodOptional<z.ZodString>;
198
+ required: z.ZodOptional<z.ZodBoolean>;
199
+ scope: z.ZodOptional<z.ZodEnum<{
200
+ instance: "instance";
201
+ install: "install";
202
+ }>>;
203
+ }, z.core.$strip>>>;
204
+ /**
205
+ * How many instances a workspace may keep (CA10). `"one-per-workspace"`:
206
+ * a single workspace instance, shown in the sidebar and on any project as
207
+ * a view of that project's records; never a project's or a person's own.
208
+ * Left out, as many as people make.
209
+ */
210
+ instances: z.ZodOptional<z.ZodEnum<{
211
+ "one-per-workspace": "one-per-workspace";
212
+ }>>;
90
213
  /**
91
214
  * How records move when the schema changes between versions (A3-F07).
92
215
  * Checked against the previous version when a version is published, and
@@ -133,7 +256,7 @@ export interface DataProblem {
133
256
  field?: string;
134
257
  message: string;
135
258
  }
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';
259
+ 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' | '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
260
  type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
138
261
  /**
139
262
  * Everything wrong with an app's additions that a type cannot say.
@@ -142,18 +265,43 @@ type Additions = z.infer<z.ZodObject<typeof extensionShape>>;
142
265
  * report; the zod schemas below run it too, so a parse never accepts what
143
266
  * this refuses.
144
267
  */
145
- export declare function dataProblems(additions: Additions, options?: {
268
+ export interface DataProblemOptions {
269
+ /** Off where the grants are the install's record, not the manifest's. */
146
270
  grants?: boolean;
147
- }): DataProblem[];
271
+ /** On for a manifest being written now: refuses kinds that are retired, such as `project-tab`. */
272
+ retired?: boolean;
273
+ }
274
+ export declare function dataProblems(additions: Additions, options?: DataProblemOptions): DataProblem[];
275
+ /**
276
+ * Another installed app's tool, as `grants.tools` names it (FO07): the name
277
+ * the assistant knows it by, `<slug>__<tool>`. Null for anything else.
278
+ * A handler calls it with `tools.call('<slug>__<tool>', input)`.
279
+ */
280
+ export declare function crossAppTool(name: string): {
281
+ app: string;
282
+ tool: string;
283
+ } | null;
284
+ /** An app's name as the front of its tools' assistant names: `issue-tracker` → `issue_tracker`. */
285
+ export declare const appToolPrefix: (name: string) => string;
148
286
  /** The additions alone, for code that has the rest of the manifest already. */
149
287
  export declare const manifestExtensionsSchema: z.ZodObject<{
150
288
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
289
+ key: z.ZodOptional<z.ZodString>;
151
290
  kind: z.ZodEnum<{
291
+ home: "home";
292
+ "project-widget": "project-widget";
152
293
  "project-tab": "project-tab";
153
294
  "project-sidebar": "project-sidebar";
154
295
  "workspace-sidebar": "workspace-sidebar";
296
+ "public-page": "public-page";
297
+ "chat-card": "chat-card";
155
298
  }>;
156
299
  screen: z.ZodString;
300
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
301
+ small: "small";
302
+ medium: "medium";
303
+ large: "large";
304
+ }>>>;
157
305
  label: z.ZodOptional<z.ZodString>;
158
306
  icon: z.ZodOptional<z.ZodString>;
159
307
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -165,14 +313,53 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
165
313
  required: z.ZodOptional<z.ZodBoolean>;
166
314
  placeholder: z.ZodOptional<z.ZodString>;
167
315
  }, z.core.$strip>>>;
316
+ children: z.ZodOptional<z.ZodObject<{
317
+ tool: z.ZodString;
318
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
319
+ cap: z.ZodOptional<z.ZodNumber>;
320
+ noun: z.ZodOptional<z.ZodString>;
321
+ create: z.ZodOptional<z.ZodObject<{
322
+ tool: z.ZodString;
323
+ noun: z.ZodOptional<z.ZodString>;
324
+ titleField: z.ZodOptional<z.ZodString>;
325
+ parentField: z.ZodOptional<z.ZodString>;
326
+ }, z.core.$strip>>;
327
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
328
+ noun: z.ZodOptional<z.ZodString>;
329
+ create: z.ZodOptional<z.ZodObject<{
330
+ tool: z.ZodString;
331
+ noun: z.ZodOptional<z.ZodString>;
332
+ titleField: z.ZodOptional<z.ZodString>;
333
+ parentField: z.ZodOptional<z.ZodString>;
334
+ }, z.core.$strip>>;
335
+ }, z.core.$strip>>>;
336
+ }, z.core.$strip>>;
168
337
  }, z.core.$strip>>>;
169
338
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
170
339
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
171
340
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
172
341
  label: z.ZodOptional<z.ZodString>;
342
+ openSchema: z.ZodOptional<z.ZodObject<{
343
+ fields: z.ZodString;
344
+ table: z.ZodOptional<z.ZodString>;
345
+ }, z.core.$strict>>;
346
+ publicRead: z.ZodOptional<z.ZodBoolean>;
347
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
348
+ confirmEmail: z.ZodOptional<z.ZodObject<{
349
+ field: z.ZodString;
350
+ subject: z.ZodOptional<z.ZodString>;
351
+ message: z.ZodOptional<z.ZodString>;
352
+ link: z.ZodOptional<z.ZodBoolean>;
353
+ }, z.core.$strict>>;
354
+ anonymous: z.ZodOptional<z.ZodObject<{
355
+ group: z.ZodString;
356
+ minimum: z.ZodOptional<z.ZodNumber>;
357
+ }, z.core.$strict>>;
358
+ readers: z.ZodOptional<z.ZodString>;
359
+ editors: z.ZodOptional<z.ZodString>;
173
360
  }, z.core.$strip>>>;
174
361
  tools: z.ZodOptional<z.ZodObject<{
175
- generated: z.ZodOptional<z.ZodBoolean>;
362
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
176
363
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
177
364
  name: z.ZodString;
178
365
  description: z.ZodString;
@@ -180,6 +367,7 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
180
367
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
181
368
  write: z.ZodOptional<z.ZodBoolean>;
182
369
  collection: z.ZodOptional<z.ZodString>;
370
+ public: z.ZodOptional<z.ZodBoolean>;
183
371
  }, z.core.$strip>>>;
184
372
  }, z.core.$strip>>;
185
373
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -190,6 +378,19 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
190
378
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
191
379
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
192
380
  }, z.core.$strip>>;
381
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
382
+ name: z.ZodString;
383
+ label: z.ZodString;
384
+ description: z.ZodOptional<z.ZodString>;
385
+ required: z.ZodOptional<z.ZodBoolean>;
386
+ scope: z.ZodOptional<z.ZodEnum<{
387
+ instance: "instance";
388
+ install: "install";
389
+ }>>;
390
+ }, z.core.$strip>>>;
391
+ instances: z.ZodOptional<z.ZodEnum<{
392
+ "one-per-workspace": "one-per-workspace";
393
+ }>>;
193
394
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
194
395
  version: z.ZodString;
195
396
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -226,12 +427,22 @@ export declare const manifestExtensionsSchema: z.ZodObject<{
226
427
  */
227
428
  export declare const storedExtensionsSchema: z.ZodObject<{
228
429
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
430
+ key: z.ZodOptional<z.ZodString>;
229
431
  kind: z.ZodEnum<{
432
+ home: "home";
433
+ "project-widget": "project-widget";
230
434
  "project-tab": "project-tab";
231
435
  "project-sidebar": "project-sidebar";
232
436
  "workspace-sidebar": "workspace-sidebar";
437
+ "public-page": "public-page";
438
+ "chat-card": "chat-card";
233
439
  }>;
234
440
  screen: z.ZodString;
441
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
442
+ small: "small";
443
+ medium: "medium";
444
+ large: "large";
445
+ }>>>;
235
446
  label: z.ZodOptional<z.ZodString>;
236
447
  icon: z.ZodOptional<z.ZodString>;
237
448
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -243,14 +454,53 @@ export declare const storedExtensionsSchema: z.ZodObject<{
243
454
  required: z.ZodOptional<z.ZodBoolean>;
244
455
  placeholder: z.ZodOptional<z.ZodString>;
245
456
  }, z.core.$strip>>>;
457
+ children: z.ZodOptional<z.ZodObject<{
458
+ tool: z.ZodString;
459
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
460
+ cap: z.ZodOptional<z.ZodNumber>;
461
+ noun: z.ZodOptional<z.ZodString>;
462
+ create: z.ZodOptional<z.ZodObject<{
463
+ tool: z.ZodString;
464
+ noun: z.ZodOptional<z.ZodString>;
465
+ titleField: z.ZodOptional<z.ZodString>;
466
+ parentField: z.ZodOptional<z.ZodString>;
467
+ }, z.core.$strip>>;
468
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
469
+ noun: z.ZodOptional<z.ZodString>;
470
+ create: z.ZodOptional<z.ZodObject<{
471
+ tool: z.ZodString;
472
+ noun: z.ZodOptional<z.ZodString>;
473
+ titleField: z.ZodOptional<z.ZodString>;
474
+ parentField: z.ZodOptional<z.ZodString>;
475
+ }, z.core.$strip>>;
476
+ }, z.core.$strip>>>;
477
+ }, z.core.$strip>>;
246
478
  }, z.core.$strip>>>;
247
479
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
248
480
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
249
481
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
250
482
  label: z.ZodOptional<z.ZodString>;
483
+ openSchema: z.ZodOptional<z.ZodObject<{
484
+ fields: z.ZodString;
485
+ table: z.ZodOptional<z.ZodString>;
486
+ }, z.core.$strict>>;
487
+ publicRead: z.ZodOptional<z.ZodBoolean>;
488
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
489
+ confirmEmail: z.ZodOptional<z.ZodObject<{
490
+ field: z.ZodString;
491
+ subject: z.ZodOptional<z.ZodString>;
492
+ message: z.ZodOptional<z.ZodString>;
493
+ link: z.ZodOptional<z.ZodBoolean>;
494
+ }, z.core.$strict>>;
495
+ anonymous: z.ZodOptional<z.ZodObject<{
496
+ group: z.ZodString;
497
+ minimum: z.ZodOptional<z.ZodNumber>;
498
+ }, z.core.$strict>>;
499
+ readers: z.ZodOptional<z.ZodString>;
500
+ editors: z.ZodOptional<z.ZodString>;
251
501
  }, z.core.$strip>>>;
252
502
  tools: z.ZodOptional<z.ZodObject<{
253
- generated: z.ZodOptional<z.ZodBoolean>;
503
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
254
504
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
255
505
  name: z.ZodString;
256
506
  description: z.ZodString;
@@ -258,6 +508,7 @@ export declare const storedExtensionsSchema: z.ZodObject<{
258
508
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
259
509
  write: z.ZodOptional<z.ZodBoolean>;
260
510
  collection: z.ZodOptional<z.ZodString>;
511
+ public: z.ZodOptional<z.ZodBoolean>;
261
512
  }, z.core.$strip>>>;
262
513
  }, z.core.$strip>>;
263
514
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -268,6 +519,19 @@ export declare const storedExtensionsSchema: z.ZodObject<{
268
519
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
269
520
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
270
521
  }, z.core.$strip>>;
522
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
523
+ name: z.ZodString;
524
+ label: z.ZodString;
525
+ description: z.ZodOptional<z.ZodString>;
526
+ required: z.ZodOptional<z.ZodBoolean>;
527
+ scope: z.ZodOptional<z.ZodEnum<{
528
+ instance: "instance";
529
+ install: "install";
530
+ }>>;
531
+ }, z.core.$strip>>>;
532
+ instances: z.ZodOptional<z.ZodEnum<{
533
+ "one-per-workspace": "one-per-workspace";
534
+ }>>;
271
535
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
272
536
  version: z.ZodString;
273
537
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -318,7 +582,194 @@ export declare const appManifestSchema: z.ZodObject<{
318
582
  terms: z.ZodOptional<z.ZodString>;
319
583
  support: z.ZodOptional<z.ZodString>;
320
584
  }, z.core.$strip>>;
321
- icon: z.ZodOptional<z.ZodString>;
585
+ logo: z.ZodOptional<z.ZodObject<{
586
+ color: z.ZodString;
587
+ mono: z.ZodString;
588
+ }, z.core.$strip>>;
589
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
590
+ color: z.ZodString;
591
+ mono: z.ZodString;
592
+ }, z.core.$strip>]>>;
593
+ brandColor: z.ZodOptional<z.ZodString>;
594
+ brandColorDark: z.ZodOptional<z.ZodString>;
595
+ defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
596
+ skills: z.ZodOptional<z.ZodString>;
597
+ servers: z.ZodOptional<z.ZodString>;
598
+ integrations: z.ZodOptional<z.ZodString>;
599
+ requires: z.ZodOptional<z.ZodObject<{
600
+ servers: z.ZodDefault<z.ZodArray<z.ZodString>>;
601
+ integrations: z.ZodDefault<z.ZodArray<z.ZodString>>;
602
+ builtin: z.ZodDefault<z.ZodArray<z.ZodString>>;
603
+ }, z.core.$strip>>;
604
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
605
+ placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
606
+ key: z.ZodOptional<z.ZodString>;
607
+ kind: z.ZodEnum<{
608
+ home: "home";
609
+ "project-widget": "project-widget";
610
+ "project-tab": "project-tab";
611
+ "project-sidebar": "project-sidebar";
612
+ "workspace-sidebar": "workspace-sidebar";
613
+ "public-page": "public-page";
614
+ "chat-card": "chat-card";
615
+ }>;
616
+ screen: z.ZodString;
617
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
618
+ small: "small";
619
+ medium: "medium";
620
+ large: "large";
621
+ }>>>;
622
+ label: z.ZodOptional<z.ZodString>;
623
+ icon: z.ZodOptional<z.ZodString>;
624
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
625
+ type: z.ZodEnum<{
626
+ string: "string";
627
+ url: "url";
628
+ }>;
629
+ label: z.ZodString;
630
+ required: z.ZodOptional<z.ZodBoolean>;
631
+ placeholder: z.ZodOptional<z.ZodString>;
632
+ }, z.core.$strip>>>;
633
+ children: z.ZodOptional<z.ZodObject<{
634
+ tool: z.ZodString;
635
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
636
+ cap: z.ZodOptional<z.ZodNumber>;
637
+ noun: z.ZodOptional<z.ZodString>;
638
+ create: z.ZodOptional<z.ZodObject<{
639
+ tool: z.ZodString;
640
+ noun: z.ZodOptional<z.ZodString>;
641
+ titleField: z.ZodOptional<z.ZodString>;
642
+ parentField: z.ZodOptional<z.ZodString>;
643
+ }, z.core.$strip>>;
644
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
645
+ noun: z.ZodOptional<z.ZodString>;
646
+ create: z.ZodOptional<z.ZodObject<{
647
+ tool: z.ZodString;
648
+ noun: z.ZodOptional<z.ZodString>;
649
+ titleField: z.ZodOptional<z.ZodString>;
650
+ parentField: z.ZodOptional<z.ZodString>;
651
+ }, z.core.$strip>>;
652
+ }, z.core.$strip>>>;
653
+ }, z.core.$strip>>;
654
+ }, z.core.$strip>>>;
655
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
656
+ schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
657
+ search: z.ZodOptional<z.ZodArray<z.ZodString>>;
658
+ label: z.ZodOptional<z.ZodString>;
659
+ openSchema: z.ZodOptional<z.ZodObject<{
660
+ fields: z.ZodString;
661
+ table: z.ZodOptional<z.ZodString>;
662
+ }, z.core.$strict>>;
663
+ publicRead: z.ZodOptional<z.ZodBoolean>;
664
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
665
+ confirmEmail: z.ZodOptional<z.ZodObject<{
666
+ field: z.ZodString;
667
+ subject: z.ZodOptional<z.ZodString>;
668
+ message: z.ZodOptional<z.ZodString>;
669
+ link: z.ZodOptional<z.ZodBoolean>;
670
+ }, z.core.$strict>>;
671
+ anonymous: z.ZodOptional<z.ZodObject<{
672
+ group: z.ZodString;
673
+ minimum: z.ZodOptional<z.ZodNumber>;
674
+ }, z.core.$strict>>;
675
+ readers: z.ZodOptional<z.ZodString>;
676
+ editors: z.ZodOptional<z.ZodString>;
677
+ }, z.core.$strip>>>;
678
+ tools: z.ZodOptional<z.ZodObject<{
679
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
680
+ custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
681
+ name: z.ZodString;
682
+ description: z.ZodString;
683
+ handler: z.ZodString;
684
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
685
+ write: z.ZodOptional<z.ZodBoolean>;
686
+ collection: z.ZodOptional<z.ZodString>;
687
+ public: z.ZodOptional<z.ZodBoolean>;
688
+ }, z.core.$strip>>>;
689
+ }, z.core.$strip>>;
690
+ screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
691
+ entry: z.ZodString;
692
+ }, z.core.$strip>>>;
693
+ grants: z.ZodOptional<z.ZodObject<{
694
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
695
+ collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
696
+ host: z.ZodOptional<z.ZodArray<z.ZodString>>;
697
+ }, z.core.$strip>>;
698
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
699
+ name: z.ZodString;
700
+ label: z.ZodString;
701
+ description: z.ZodOptional<z.ZodString>;
702
+ required: z.ZodOptional<z.ZodBoolean>;
703
+ scope: z.ZodOptional<z.ZodEnum<{
704
+ instance: "instance";
705
+ install: "install";
706
+ }>>;
707
+ }, z.core.$strip>>>;
708
+ instances: z.ZodOptional<z.ZodEnum<{
709
+ "one-per-workspace": "one-per-workspace";
710
+ }>>;
711
+ migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
712
+ version: z.ZodString;
713
+ steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
714
+ op: z.ZodLiteral<"add">;
715
+ collection: z.ZodString;
716
+ field: z.ZodString;
717
+ default: z.ZodOptional<z.ZodUnknown>;
718
+ }, z.core.$strip>, z.ZodObject<{
719
+ op: z.ZodLiteral<"rename">;
720
+ collection: z.ZodString;
721
+ from: z.ZodString;
722
+ to: z.ZodString;
723
+ }, z.core.$strip>, z.ZodObject<{
724
+ op: z.ZodLiteral<"drop">;
725
+ collection: z.ZodString;
726
+ field: z.ZodString;
727
+ }, z.core.$strip>, z.ZodObject<{
728
+ op: z.ZodLiteral<"dropCollection">;
729
+ collection: z.ZodString;
730
+ }, z.core.$strip>, z.ZodObject<{
731
+ op: z.ZodLiteral<"replace">;
732
+ collection: z.ZodString;
733
+ field: z.ZodString;
734
+ from: z.ZodString;
735
+ to: z.ZodString;
736
+ }, z.core.$strip>], "op">>;
737
+ }, z.core.$strip>>>;
738
+ sdk: z.ZodOptional<z.ZodString>;
739
+ }, z.core.$strip>;
740
+ /**
741
+ * A manifest being written now, as `brydio validate`, `build` and `dev` read
742
+ * it: the same, and nothing retired (`placement_tab_retired`) — which a
743
+ * published version may still hold.
744
+ */
745
+ export declare const newAppManifestSchema: z.ZodObject<{
746
+ name: z.ZodString;
747
+ version: z.ZodString;
748
+ displayName: z.ZodOptional<z.ZodString>;
749
+ summary: z.ZodOptional<z.ZodString>;
750
+ description: z.ZodOptional<z.ZodString>;
751
+ author: z.ZodOptional<z.ZodObject<{
752
+ name: z.ZodString;
753
+ email: z.ZodOptional<z.ZodString>;
754
+ url: z.ZodOptional<z.ZodString>;
755
+ }, z.core.$strip>>;
756
+ homepage: z.ZodOptional<z.ZodString>;
757
+ repository: z.ZodOptional<z.ZodString>;
758
+ license: z.ZodOptional<z.ZodString>;
759
+ keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
760
+ links: z.ZodOptional<z.ZodObject<{
761
+ privacy: z.ZodOptional<z.ZodString>;
762
+ terms: z.ZodOptional<z.ZodString>;
763
+ support: z.ZodOptional<z.ZodString>;
764
+ }, z.core.$strip>>;
765
+ logo: z.ZodOptional<z.ZodObject<{
766
+ color: z.ZodString;
767
+ mono: z.ZodString;
768
+ }, z.core.$strip>>;
769
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
770
+ color: z.ZodString;
771
+ mono: z.ZodString;
772
+ }, z.core.$strip>]>>;
322
773
  brandColor: z.ZodOptional<z.ZodString>;
323
774
  brandColorDark: z.ZodOptional<z.ZodString>;
324
775
  defaultPrompts: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -332,12 +783,22 @@ export declare const appManifestSchema: z.ZodObject<{
332
783
  }, z.core.$strip>>;
333
784
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
334
785
  placements: z.ZodOptional<z.ZodArray<z.ZodObject<{
786
+ key: z.ZodOptional<z.ZodString>;
335
787
  kind: z.ZodEnum<{
788
+ home: "home";
789
+ "project-widget": "project-widget";
336
790
  "project-tab": "project-tab";
337
791
  "project-sidebar": "project-sidebar";
338
792
  "workspace-sidebar": "workspace-sidebar";
793
+ "public-page": "public-page";
794
+ "chat-card": "chat-card";
339
795
  }>;
340
796
  screen: z.ZodString;
797
+ sizes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
798
+ small: "small";
799
+ medium: "medium";
800
+ large: "large";
801
+ }>>>;
341
802
  label: z.ZodOptional<z.ZodString>;
342
803
  icon: z.ZodOptional<z.ZodString>;
343
804
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -349,14 +810,53 @@ export declare const appManifestSchema: z.ZodObject<{
349
810
  required: z.ZodOptional<z.ZodBoolean>;
350
811
  placeholder: z.ZodOptional<z.ZodString>;
351
812
  }, z.core.$strip>>>;
813
+ children: z.ZodOptional<z.ZodObject<{
814
+ tool: z.ZodString;
815
+ refreshSeconds: z.ZodOptional<z.ZodNumber>;
816
+ cap: z.ZodOptional<z.ZodNumber>;
817
+ noun: z.ZodOptional<z.ZodString>;
818
+ create: z.ZodOptional<z.ZodObject<{
819
+ tool: z.ZodString;
820
+ noun: z.ZodOptional<z.ZodString>;
821
+ titleField: z.ZodOptional<z.ZodString>;
822
+ parentField: z.ZodOptional<z.ZodString>;
823
+ }, z.core.$strip>>;
824
+ nested: z.ZodOptional<z.ZodArray<z.ZodObject<{
825
+ noun: z.ZodOptional<z.ZodString>;
826
+ create: z.ZodOptional<z.ZodObject<{
827
+ tool: z.ZodString;
828
+ noun: z.ZodOptional<z.ZodString>;
829
+ titleField: z.ZodOptional<z.ZodString>;
830
+ parentField: z.ZodOptional<z.ZodString>;
831
+ }, z.core.$strip>>;
832
+ }, z.core.$strip>>>;
833
+ }, z.core.$strip>>;
352
834
  }, z.core.$strip>>>;
353
835
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
354
836
  schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
355
837
  search: z.ZodOptional<z.ZodArray<z.ZodString>>;
356
838
  label: z.ZodOptional<z.ZodString>;
839
+ openSchema: z.ZodOptional<z.ZodObject<{
840
+ fields: z.ZodString;
841
+ table: z.ZodOptional<z.ZodString>;
842
+ }, z.core.$strict>>;
843
+ publicRead: z.ZodOptional<z.ZodBoolean>;
844
+ publicSubmit: z.ZodOptional<z.ZodBoolean>;
845
+ confirmEmail: z.ZodOptional<z.ZodObject<{
846
+ field: z.ZodString;
847
+ subject: z.ZodOptional<z.ZodString>;
848
+ message: z.ZodOptional<z.ZodString>;
849
+ link: z.ZodOptional<z.ZodBoolean>;
850
+ }, z.core.$strict>>;
851
+ anonymous: z.ZodOptional<z.ZodObject<{
852
+ group: z.ZodString;
853
+ minimum: z.ZodOptional<z.ZodNumber>;
854
+ }, z.core.$strict>>;
855
+ readers: z.ZodOptional<z.ZodString>;
856
+ editors: z.ZodOptional<z.ZodString>;
357
857
  }, z.core.$strip>>>;
358
858
  tools: z.ZodOptional<z.ZodObject<{
359
- generated: z.ZodOptional<z.ZodBoolean>;
859
+ generated: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"read">]>>;
360
860
  custom: z.ZodOptional<z.ZodArray<z.ZodObject<{
361
861
  name: z.ZodString;
362
862
  description: z.ZodString;
@@ -364,6 +864,7 @@ export declare const appManifestSchema: z.ZodObject<{
364
864
  input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
365
865
  write: z.ZodOptional<z.ZodBoolean>;
366
866
  collection: z.ZodOptional<z.ZodString>;
867
+ public: z.ZodOptional<z.ZodBoolean>;
367
868
  }, z.core.$strip>>>;
368
869
  }, z.core.$strip>>;
369
870
  screens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -374,6 +875,19 @@ export declare const appManifestSchema: z.ZodObject<{
374
875
  collections: z.ZodOptional<z.ZodArray<z.ZodString>>;
375
876
  host: z.ZodOptional<z.ZodArray<z.ZodString>>;
376
877
  }, z.core.$strip>>;
878
+ secrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
879
+ name: z.ZodString;
880
+ label: z.ZodString;
881
+ description: z.ZodOptional<z.ZodString>;
882
+ required: z.ZodOptional<z.ZodBoolean>;
883
+ scope: z.ZodOptional<z.ZodEnum<{
884
+ instance: "instance";
885
+ install: "install";
886
+ }>>;
887
+ }, z.core.$strip>>>;
888
+ instances: z.ZodOptional<z.ZodEnum<{
889
+ "one-per-workspace": "one-per-workspace";
890
+ }>>;
377
891
  migrations: z.ZodOptional<z.ZodArray<z.ZodObject<{
378
892
  version: z.ZodString;
379
893
  steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -422,6 +936,23 @@ export interface CollectionSpec {
422
936
  search: string[];
423
937
  /** The one `project` field, whose value is copied to `app_document.project_id`. */
424
938
  projectField: string | null;
939
+ /**
940
+ * Fields defined at runtime (P5): the companion collection, and the field
941
+ * naming a row's table (null: one table per instance). The store reads the
942
+ * live definitions; `fields` here holds only the manifest's own.
943
+ */
944
+ openSchema?: {
945
+ fields: string;
946
+ table: string | null;
947
+ };
948
+ /** On a companion: the open collection whose fields its records define (P5). */
949
+ definesFieldsOf?: string;
950
+ /** Answers kept with no writer, read only a whole group of at least `minimum` at a time (P13). */
951
+ anonymous?: AnonymousSpec;
952
+ /** The string[] field naming who alone may read a record, when it names anyone (P16). */
953
+ readers?: string;
954
+ /** The string[] field naming who alone may change a record, when it names anyone (DW06). */
955
+ editors?: string;
425
956
  }
426
957
  /**
427
958
  * The singular a collection's tools are named with: the manifest's, else the