@usenaive-sdk/blueprints 0.8.0 → 0.10.0

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/dist/index.d.ts CHANGED
@@ -5,9 +5,10 @@ import { VettaClient } from '@usenaive-sdk/vetta';
5
5
  * Blueprints and their templates.
6
6
  *
7
7
  * A **blueprint** is the machine: screens, `/api/*`, the store, build and deploy, the approval
8
- * flow. It is one repository, and it is shared across its templates. A **template** is DATA — the
9
- * crew and its prompts, the tool allow-lists, the kinds of work it files, its schedules, the demo
10
- * seed and the words its screens print. One repo carries every template its blueprint has, so
8
+ * flow — or, for a data-only blueprint, none of those. It is one repository, and it is shared across
9
+ * its templates. A **template** is DATA — the crew and its prompts, the tool allow-lists and its
10
+ * schedules. What a blueprint's own screens print per template is the blueprint's business, and
11
+ * the engine never reads it (ADR-0903). One repo carries every template its blueprint has, so
11
12
  * switching is an edit plus `naive up`: never a re-clone, never a new app.
12
13
  *
13
14
  * The pair is checked here and refused at define time (`define.ts`), in the author's own
@@ -15,12 +16,6 @@ import { VettaClient } from '@usenaive-sdk/vetta';
15
16
  * discovered against a half-provisioned organization.
16
17
  */
17
18
 
18
- /** One kind of work a template files — a deliverable kind, a post kind. `id` is what rows carry. */
19
- interface TemplateKind {
20
- id: string;
21
- label: string;
22
- description?: string;
23
- }
24
19
  /**
25
20
  * The data module a blueprint repo exports, one per template it carries. Everything here is data:
26
21
  * nothing in it is a function, a component or a route, because those are the blueprint's and are
@@ -33,12 +28,6 @@ interface Template {
33
28
  /** One line for the operator: what this crew does. */
34
29
  description: string;
35
30
  agents: AgentDecl[];
36
- /** The kinds this template's queue holds; the screens list them in this order. */
37
- kinds: TemplateKind[];
38
- /** The demo rows the store seeds on first run, keyed by collection (`clients`, `posts`, …). */
39
- seed: Record<string, unknown>;
40
- /** Every word a screen prints that changes with the template — headings, labels, onboarding copy. */
41
- words: Record<string, string>;
42
31
  }
43
32
  /**
44
33
  * Every blueprint and the templates it carries. `agency` defaults to `blank` — a working agency
@@ -115,9 +104,9 @@ declare const AgentDeclSchema: z.ZodObject<{
115
104
  cap_micro_usd: z.ZodNumber;
116
105
  max_task_micro_usd: z.ZodNumber;
117
106
  period: z.ZodEnum<{
107
+ month: "month";
118
108
  day: "day";
119
109
  week: "week";
120
- month: "month";
121
110
  }>;
122
111
  }, z.core.$strip>;
123
112
  description: z.ZodOptional<z.ZodString>;
@@ -128,16 +117,16 @@ declare const AgentDeclSchema: z.ZodObject<{
128
117
  default_config: z.ZodObject<{
129
118
  permission: z.ZodEnum<{
130
119
  allow: "allow";
131
- ask: "ask";
132
120
  deny: "deny";
121
+ ask: "ask";
133
122
  }>;
134
123
  }, z.core.$strip>;
135
124
  configs: z.ZodRecord<z.ZodString, z.ZodObject<{
136
125
  enabled: z.ZodBoolean;
137
126
  permission: z.ZodEnum<{
138
127
  allow: "allow";
139
- ask: "ask";
140
128
  deny: "deny";
129
+ ask: "ask";
141
130
  }>;
142
131
  config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
143
132
  }, z.core.$strip>>;
@@ -231,33 +220,9 @@ declare const SkillDeclSchema: z.ZodObject<{
231
220
  slug: z.ZodString;
232
221
  file: z.ZodString;
233
222
  }, z.core.$strip>;
234
- /**
235
- * `connections` is the accounts the studio asks an operator to connect to this persona BEFORE the
236
- * crew exists (`canonical-spec §31.10`): `social.from` names a declared `choice` question and
237
- * `social.map` maps its option labels to publishing networks. Published on the artifact, never read
238
- * by the apply.
239
- */
240
223
  declare const IdentityDeclSchema: z.ZodObject<{
241
224
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
242
225
  name: z.ZodString;
243
- connections: z.ZodOptional<z.ZodObject<{
244
- social: z.ZodOptional<z.ZodObject<{
245
- from: z.ZodString;
246
- map: z.ZodRecord<z.ZodString, z.ZodEnum<{
247
- bluesky: "bluesky";
248
- facebook: "facebook";
249
- instagram: "instagram";
250
- linkedin: "linkedin";
251
- mastodon: "mastodon";
252
- pinterest: "pinterest";
253
- reddit: "reddit";
254
- threads: "threads";
255
- tiktok: "tiktok";
256
- x: "x";
257
- youtube: "youtube";
258
- }>>;
259
- }, z.core.$strip>>;
260
- }, z.core.$strip>>;
261
226
  legal: z.ZodOptional<z.ZodArray<z.ZodObject<{
262
227
  description: z.ZodString;
263
228
  state: z.ZodEnum<{
@@ -360,6 +325,230 @@ declare const ProjectSchema: z.ZodObject<{
360
325
  name: z.ZodString;
361
326
  blueprint: z.ZodOptional<z.ZodString>;
362
327
  template: z.ZodOptional<z.ZodString>;
328
+ title: z.ZodOptional<z.ZodString>;
329
+ description: z.ZodOptional<z.ZodString>;
330
+ platforms: z.ZodOptional<z.ZodArray<z.ZodEnum<{
331
+ bluesky: "bluesky";
332
+ facebook: "facebook";
333
+ instagram: "instagram";
334
+ linkedin: "linkedin";
335
+ mastodon: "mastodon";
336
+ pinterest: "pinterest";
337
+ reddit: "reddit";
338
+ threads: "threads";
339
+ tiktok: "tiktok";
340
+ x: "x";
341
+ youtube: "youtube";
342
+ }>>>;
343
+ mini_apps: z.ZodOptional<z.ZodArray<z.ZodObject<{
344
+ slug: z.ZodString;
345
+ name: z.ZodString;
346
+ icon: z.ZodEnum<{
347
+ calendar: "calendar";
348
+ grid: "grid";
349
+ list: "list";
350
+ chart: "chart";
351
+ play: "play";
352
+ }>;
353
+ pages: z.ZodArray<z.ZodObject<{
354
+ slug: z.ZodString;
355
+ title: z.ZodString;
356
+ spec: z.ZodObject<{
357
+ root: z.ZodString;
358
+ elements: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
359
+ type: z.ZodLiteral<"Page">;
360
+ props: z.ZodObject<{}, z.core.$strict>;
361
+ children: z.ZodArray<z.ZodString>;
362
+ }, z.core.$strict>, z.ZodObject<{
363
+ type: z.ZodLiteral<"Section">;
364
+ props: z.ZodObject<{
365
+ title: z.ZodString;
366
+ to: z.ZodOptional<z.ZodString>;
367
+ hide_empty: z.ZodOptional<z.ZodBoolean>;
368
+ }, z.core.$strict>;
369
+ children: z.ZodArray<z.ZodString>;
370
+ }, z.core.$strict>, z.ZodObject<{
371
+ type: z.ZodLiteral<"Stack">;
372
+ props: z.ZodObject<{}, z.core.$strict>;
373
+ children: z.ZodArray<z.ZodString>;
374
+ }, z.core.$strict>, z.ZodObject<{
375
+ type: z.ZodLiteral<"Grid">;
376
+ props: z.ZodObject<{
377
+ columns: z.ZodLiteral<2 | 1 | 3>;
378
+ }, z.core.$strict>;
379
+ children: z.ZodArray<z.ZodString>;
380
+ }, z.core.$strict>, z.ZodObject<{
381
+ type: z.ZodLiteral<"Metric">;
382
+ props: z.ZodObject<{
383
+ label: z.ZodString;
384
+ value: z.ZodObject<{
385
+ $source: z.ZodEnum<{
386
+ views_total: "views_total";
387
+ spend_total: "spend_total";
388
+ }>;
389
+ days: z.ZodDefault<z.ZodNumber>;
390
+ }, z.core.$strict>;
391
+ delta: z.ZodOptional<z.ZodObject<{
392
+ $source: z.ZodEnum<{
393
+ views_change: "views_change";
394
+ }>;
395
+ }, z.core.$strict>>;
396
+ }, z.core.$strict>;
397
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
398
+ }, z.core.$strict>, z.ZodObject<{
399
+ type: z.ZodLiteral<"LineChart">;
400
+ props: z.ZodObject<{
401
+ label: z.ZodOptional<z.ZodString>;
402
+ series: z.ZodObject<{
403
+ $source: z.ZodEnum<{
404
+ spend_by_day: "spend_by_day";
405
+ }>;
406
+ days: z.ZodDefault<z.ZodNumber>;
407
+ }, z.core.$strict>;
408
+ }, z.core.$strict>;
409
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
410
+ }, z.core.$strict>, z.ZodObject<{
411
+ type: z.ZodLiteral<"BarList">;
412
+ props: z.ZodObject<{
413
+ label: z.ZodOptional<z.ZodString>;
414
+ bars: z.ZodObject<{
415
+ $source: z.ZodEnum<{
416
+ post_views: "post_views";
417
+ }>;
418
+ limit: z.ZodDefault<z.ZodNumber>;
419
+ }, z.core.$strict>;
420
+ }, z.core.$strict>;
421
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
422
+ }, z.core.$strict>, z.ZodObject<{
423
+ type: z.ZodLiteral<"Progress">;
424
+ props: z.ZodObject<{
425
+ label: z.ZodString;
426
+ progress: z.ZodObject<{
427
+ $source: z.ZodEnum<{
428
+ posts_this_week: "posts_this_week";
429
+ }>;
430
+ }, z.core.$strict>;
431
+ }, z.core.$strict>;
432
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
433
+ }, z.core.$strict>, z.ZodObject<{
434
+ type: z.ZodLiteral<"Roadmap">;
435
+ props: z.ZodObject<{
436
+ label: z.ZodOptional<z.ZodString>;
437
+ board: z.ZodObject<{
438
+ $source: z.ZodEnum<{
439
+ roadmap: "roadmap";
440
+ }>;
441
+ per_group: z.ZodDefault<z.ZodNumber>;
442
+ }, z.core.$strict>;
443
+ }, z.core.$strict>;
444
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
445
+ }, z.core.$strict>, z.ZodObject<{
446
+ type: z.ZodLiteral<"Schedule">;
447
+ props: z.ZodObject<{
448
+ label: z.ZodOptional<z.ZodString>;
449
+ week: z.ZodObject<{
450
+ $source: z.ZodEnum<{
451
+ schedule: "schedule";
452
+ }>;
453
+ }, z.core.$strict>;
454
+ }, z.core.$strict>;
455
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
456
+ }, z.core.$strict>, z.ZodObject<{
457
+ type: z.ZodLiteral<"Media">;
458
+ props: z.ZodObject<{
459
+ label: z.ZodOptional<z.ZodString>;
460
+ files: z.ZodObject<{
461
+ $source: z.ZodEnum<{
462
+ latest_media: "latest_media";
463
+ newest_media: "newest_media";
464
+ }>;
465
+ count: z.ZodDefault<z.ZodNumber>;
466
+ }, z.core.$strict>;
467
+ }, z.core.$strict>;
468
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
469
+ }, z.core.$strict>, z.ZodObject<{
470
+ type: z.ZodLiteral<"Text">;
471
+ props: z.ZodObject<{
472
+ text: z.ZodString;
473
+ }, z.core.$strict>;
474
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
475
+ }, z.core.$strict>, z.ZodObject<{
476
+ type: z.ZodLiteral<"Needs">;
477
+ props: z.ZodObject<{
478
+ label: z.ZodOptional<z.ZodString>;
479
+ needs: z.ZodObject<{
480
+ $source: z.ZodEnum<{
481
+ needs: "needs";
482
+ }>;
483
+ }, z.core.$strict>;
484
+ }, z.core.$strict>;
485
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
486
+ }, z.core.$strict>, z.ZodObject<{
487
+ type: z.ZodLiteral<"Activity">;
488
+ props: z.ZodObject<{
489
+ label: z.ZodOptional<z.ZodString>;
490
+ agents: z.ZodObject<{
491
+ $source: z.ZodEnum<{
492
+ agents_activity: "agents_activity";
493
+ }>;
494
+ }, z.core.$strict>;
495
+ }, z.core.$strict>;
496
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
497
+ }, z.core.$strict>, z.ZodObject<{
498
+ type: z.ZodLiteral<"Accounts">;
499
+ props: z.ZodObject<{
500
+ accounts: z.ZodObject<{
501
+ $source: z.ZodEnum<{
502
+ accounts: "accounts";
503
+ }>;
504
+ }, z.core.$strict>;
505
+ }, z.core.$strict>;
506
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
507
+ }, z.core.$strict>, z.ZodObject<{
508
+ type: z.ZodLiteral<"Posts">;
509
+ props: z.ZodObject<{
510
+ label: z.ZodOptional<z.ZodString>;
511
+ layout: z.ZodOptional<z.ZodEnum<{
512
+ grid: "grid";
513
+ list: "list";
514
+ row: "row";
515
+ }>>;
516
+ posts: z.ZodObject<{
517
+ $source: z.ZodEnum<{
518
+ posts: "posts";
519
+ }>;
520
+ status: z.ZodUnion<readonly [z.ZodEnum<{
521
+ scheduled: "scheduled";
522
+ posted: "posted";
523
+ waiting: "waiting";
524
+ }>, z.ZodArray<z.ZodEnum<{
525
+ scheduled: "scheduled";
526
+ posted: "posted";
527
+ waiting: "waiting";
528
+ }>>]>;
529
+ limit: z.ZodDefault<z.ZodNumber>;
530
+ }, z.core.$strict>;
531
+ }, z.core.$strict>;
532
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
533
+ }, z.core.$strict>, z.ZodObject<{
534
+ type: z.ZodLiteral<"Answers">;
535
+ props: z.ZodObject<{
536
+ answers: z.ZodObject<{
537
+ $source: z.ZodEnum<{
538
+ answers: "answers";
539
+ }>;
540
+ keys: z.ZodArray<z.ZodString>;
541
+ }, z.core.$strict>;
542
+ }, z.core.$strict>;
543
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
544
+ }, z.core.$strict>, z.ZodObject<{
545
+ type: z.ZodLiteral<"MediaLibrary">;
546
+ props: z.ZodObject<{}, z.core.$strict>;
547
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
548
+ }, z.core.$strict>], "type">>;
549
+ }, z.core.$strict>;
550
+ }, z.core.$strict>>;
551
+ }, z.core.$strict>>>;
363
552
  questions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
364
553
  type: z.ZodLiteral<"text">;
365
554
  placeholder: z.ZodOptional<z.ZodString>;
@@ -372,6 +561,18 @@ declare const ProjectSchema: z.ZodObject<{
372
561
  options: z.ZodArray<z.ZodString>;
373
562
  multiple: z.ZodDefault<z.ZodBoolean>;
374
563
  other: z.ZodDefault<z.ZodBoolean>;
564
+ details: z.ZodOptional<z.ZodArray<z.ZodObject<{
565
+ option: z.ZodString;
566
+ note: z.ZodOptional<z.ZodString>;
567
+ image: z.ZodOptional<z.ZodString>;
568
+ }, z.core.$strip>>>;
569
+ key: z.ZodString;
570
+ label: z.ZodString;
571
+ help: z.ZodOptional<z.ZodString>;
572
+ optional: z.ZodOptional<z.ZodBoolean>;
573
+ }, z.core.$strip>, z.ZodObject<{
574
+ type: z.ZodLiteral<"media">;
575
+ placeholder: z.ZodOptional<z.ZodString>;
375
576
  key: z.ZodString;
376
577
  label: z.ZodString;
377
578
  help: z.ZodOptional<z.ZodString>;
@@ -384,24 +585,6 @@ declare const ProjectSchema: z.ZodObject<{
384
585
  identities: z.ZodDefault<z.ZodArray<z.ZodObject<{
385
586
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
386
587
  name: z.ZodString;
387
- connections: z.ZodOptional<z.ZodObject<{
388
- social: z.ZodOptional<z.ZodObject<{
389
- from: z.ZodString;
390
- map: z.ZodRecord<z.ZodString, z.ZodEnum<{
391
- bluesky: "bluesky";
392
- facebook: "facebook";
393
- instagram: "instagram";
394
- linkedin: "linkedin";
395
- mastodon: "mastodon";
396
- pinterest: "pinterest";
397
- reddit: "reddit";
398
- threads: "threads";
399
- tiktok: "tiktok";
400
- x: "x";
401
- youtube: "youtube";
402
- }>>;
403
- }, z.core.$strip>>;
404
- }, z.core.$strip>>;
405
588
  legal: z.ZodOptional<z.ZodArray<z.ZodObject<{
406
589
  description: z.ZodString;
407
590
  state: z.ZodEnum<{
@@ -532,9 +715,9 @@ declare const ProjectSchema: z.ZodObject<{
532
715
  cap_micro_usd: z.ZodNumber;
533
716
  max_task_micro_usd: z.ZodNumber;
534
717
  period: z.ZodEnum<{
718
+ month: "month";
535
719
  day: "day";
536
720
  week: "week";
537
- month: "month";
538
721
  }>;
539
722
  }, z.core.$strip>;
540
723
  description: z.ZodOptional<z.ZodString>;
@@ -545,16 +728,16 @@ declare const ProjectSchema: z.ZodObject<{
545
728
  default_config: z.ZodObject<{
546
729
  permission: z.ZodEnum<{
547
730
  allow: "allow";
548
- ask: "ask";
549
731
  deny: "deny";
732
+ ask: "ask";
550
733
  }>;
551
734
  }, z.core.$strip>;
552
735
  configs: z.ZodRecord<z.ZodString, z.ZodObject<{
553
736
  enabled: z.ZodBoolean;
554
737
  permission: z.ZodEnum<{
555
738
  allow: "allow";
556
- ask: "ask";
557
739
  deny: "deny";
740
+ ask: "ask";
558
741
  }>;
559
742
  config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
560
743
  }, z.core.$strip>>;
@@ -674,10 +857,10 @@ declare function defineProject({ templates, ...input }: DefineInput): Readonly<P
674
857
  * names unchanged, so nothing downstream of it learns a second word for the same thing.
675
858
  */
676
859
  declare const ResourceActionSchema: z.ZodEnum<{
860
+ deleted: "deleted";
677
861
  created: "created";
678
862
  updated: "updated";
679
863
  unchanged: "unchanged";
680
- deleted: "deleted";
681
864
  refused: "refused";
682
865
  }>;
683
866
  type ResourceAction = z.infer<typeof ResourceActionSchema>;
@@ -685,10 +868,10 @@ type ResourceAction = z.infer<typeof ResourceActionSchema>;
685
868
  declare const ResourceReportSchema: z.ZodObject<{
686
869
  name: z.ZodString;
687
870
  action: z.ZodEnum<{
871
+ deleted: "deleted";
688
872
  created: "created";
689
873
  updated: "updated";
690
874
  unchanged: "unchanged";
691
- deleted: "deleted";
692
875
  refused: "refused";
693
876
  }>;
694
877
  id: z.ZodOptional<z.ZodString>;
@@ -1017,6 +1200,13 @@ interface UpOptions {
1017
1200
  * applied install lands on the row that exists.
1018
1201
  */
1019
1202
  project?: string;
1203
+ /**
1204
+ * An install that shares the organization by its own names (ADR-1104, `scoped.ts`): its crew is
1205
+ * filed under `project` rather than the template, and an identity is stamped with `project` and
1206
+ * adopted only when it already carries it — another project's persona, or one nobody stamped, is
1207
+ * refused rather than taken. Absent is every apply before that rule, exactly as it was.
1208
+ */
1209
+ isolated?: boolean;
1020
1210
  /**
1021
1211
  * What dials an app's own address before its crew is briefed (`awaitServing`). The platform's
1022
1212
  * `fetch` by default; a test hands in a fake. It is NOT the client's `fetch`, which on a hosted
@@ -1033,6 +1223,28 @@ declare function selectCrew(config: Readonly<ProjectConfig>, select: BlueprintSe
1033
1223
  /** Plan → apply → report. Every refusal is one line in the report, never a thrown escape. */
1034
1224
  declare function up(config: Readonly<ProjectConfig>, client: VettaClient, opts?: UpOptions): Promise<UpReport>;
1035
1225
 
1226
+ /**
1227
+ * ONE TEMPLATE, TWICE IN ONE ORGANIZATION (`canonical-spec §29.6`, ADR-1104).
1228
+ *
1229
+ * Everything `up()` provisions is keyed by name in the organization, and ADR-0785 refuses a name
1230
+ * another project holds — so a second install of a template found every agent taken and hired no
1231
+ * one. An install that must share the organization with those names takes its own: every agent,
1232
+ * app, identity and vault name, and every reference to one, starts with the install's prefix. The
1233
+ * API decides the prefix once, when the install row is created, and passes it here on every apply.
1234
+ *
1235
+ * `config.name` becomes the install's `project`, so app ownership (ADR-0375), `NAIVE_PROJECT` and
1236
+ * the board's card keys (`<project>:<key>`) are the install's own and never another install's.
1237
+ *
1238
+ * Prose is not rewritten. A system prompt that says "hand the script to the editor" still says it;
1239
+ * the agent is told, in one generated line at the end of its `system`, what each name is here.
1240
+ */
1241
+
1242
+ /**
1243
+ * The config an install with `prefix` applies. `""` renames nothing and only files it under `project`.
1244
+ * Skills stay shared by slug, so no install's `removed` deletes one another install's crew runs.
1245
+ */
1246
+ declare function scoped(config: Readonly<ProjectConfig>, prefix: string, project: string): ProjectConfig;
1247
+
1036
1248
  /**
1037
1249
  * Agents in `naive up`: upsert by name with a drift-only PATCH, `allowed_apps` names resolved to
1038
1250
  * app ids in the `apps` tool config (§29.3), the platform config passthrough (`system`, `skills`,
@@ -1061,4 +1273,4 @@ declare function up(config: Readonly<ProjectConfig>, client: VettaClient, opts?:
1061
1273
  */
1062
1274
  declare const PROJECT_CONTEXT_PREAMBLE: string;
1063
1275
 
1064
- export { type AgentDecl, type AppDecl, BLUEPRINTS, BlueprintRefusal, CONFIG_CANDIDATES, type ConfigLoad, type CredentialDecl, type CrewPerClientDecl, type DefineInput, type FileSource, type IdentityDecl, type MigrationFile, PLATFORM_ENV, PROJECT_CONTEXT_PREAMBLE, type PlatformEnv, type ProjectConfig, type ResourceAction, type ResourceReport, type ScheduleDecl, type SkillDecl, type TaskDecl, type Template, type TemplateChoice, type TemplateKind, type UpOptions, type UpReport, type VaultDecl, chooseTemplate, collectFiles, contentHash, defineProject, generatedPassword, generatedSecret, hasRoster, loadConfig, migrationFiles, parseProject, selectCrew, up };
1276
+ export { type AgentDecl, type AppDecl, BLUEPRINTS, BlueprintRefusal, CONFIG_CANDIDATES, type ConfigLoad, type CredentialDecl, type CrewPerClientDecl, type DefineInput, type FileSource, type IdentityDecl, type MigrationFile, PLATFORM_ENV, PROJECT_CONTEXT_PREAMBLE, type PlatformEnv, type ProjectConfig, type ResourceAction, type ResourceReport, type ScheduleDecl, type SkillDecl, type TaskDecl, type Template, type TemplateChoice, type UpOptions, type UpReport, type VaultDecl, chooseTemplate, collectFiles, contentHash, defineProject, generatedPassword, generatedSecret, hasRoster, loadConfig, migrationFiles, parseProject, scoped, selectCrew, up };