primitive-admin 1.1.0-alpha.61 → 1.1.0-alpha.63

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.
Files changed (172) hide show
  1. package/README.md +34 -27
  2. package/assets/skill/skills/primitive-platform/SKILL.md +59 -21
  3. package/dist/bin/primitive.js +10 -10
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/apps.js +40 -41
  6. package/dist/src/commands/apps.js.map +1 -1
  7. package/dist/src/commands/blob-buckets.js +7 -7
  8. package/dist/src/commands/blob-buckets.js.map +1 -1
  9. package/dist/src/commands/collection-type-configs.js +7 -7
  10. package/dist/src/commands/collection-type-configs.js.map +1 -1
  11. package/dist/src/commands/collections.js +47 -8
  12. package/dist/src/commands/collections.js.map +1 -1
  13. package/dist/src/commands/config.d.ts +23 -12
  14. package/dist/src/commands/config.js +80 -45
  15. package/dist/src/commands/config.js.map +1 -1
  16. package/dist/src/commands/cron-triggers.js +6 -6
  17. package/dist/src/commands/cron-triggers.js.map +1 -1
  18. package/dist/src/commands/database-type-configs.d.ts +2 -0
  19. package/dist/src/commands/database-type-configs.js +171 -0
  20. package/dist/src/commands/database-type-configs.js.map +1 -0
  21. package/dist/src/commands/database-types.js +313 -13
  22. package/dist/src/commands/database-types.js.map +1 -1
  23. package/dist/src/commands/databases.js +35 -25
  24. package/dist/src/commands/databases.js.map +1 -1
  25. package/dist/src/commands/documents.js +138 -11
  26. package/dist/src/commands/documents.js.map +1 -1
  27. package/dist/src/commands/email-templates.js +8 -8
  28. package/dist/src/commands/email-templates.js.map +1 -1
  29. package/dist/src/commands/group-type-configs.js +7 -7
  30. package/dist/src/commands/group-type-configs.js.map +1 -1
  31. package/dist/src/commands/init.js +1 -1
  32. package/dist/src/commands/init.js.map +1 -1
  33. package/dist/src/commands/integrations.js +12 -197
  34. package/dist/src/commands/integrations.js.map +1 -1
  35. package/dist/src/commands/llm.js +6 -9
  36. package/dist/src/commands/llm.js.map +1 -1
  37. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  38. package/dist/src/commands/metadata-category-configs.js +112 -0
  39. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  40. package/dist/src/commands/metadata.js +4 -129
  41. package/dist/src/commands/metadata.js.map +1 -1
  42. package/dist/src/commands/prompts.js +24 -282
  43. package/dist/src/commands/prompts.js.map +1 -1
  44. package/dist/src/commands/rule-sets.js +8 -8
  45. package/dist/src/commands/rule-sets.js.map +1 -1
  46. package/dist/src/commands/scripts.js +16 -201
  47. package/dist/src/commands/scripts.js.map +1 -1
  48. package/dist/src/commands/settings.d.ts +9 -12
  49. package/dist/src/commands/settings.js +79 -31
  50. package/dist/src/commands/settings.js.map +1 -1
  51. package/dist/src/commands/sync-app-settings.d.ts +24 -19
  52. package/dist/src/commands/sync-app-settings.js +48 -52
  53. package/dist/src/commands/sync-app-settings.js.map +1 -1
  54. package/dist/src/commands/sync.d.ts +1003 -53
  55. package/dist/src/commands/sync.js +4080 -882
  56. package/dist/src/commands/sync.js.map +1 -1
  57. package/dist/src/commands/vars.js +4 -4
  58. package/dist/src/commands/vars.js.map +1 -1
  59. package/dist/src/commands/webhooks.js +6 -6
  60. package/dist/src/commands/webhooks.js.map +1 -1
  61. package/dist/src/commands/workflows.d.ts +22 -0
  62. package/dist/src/commands/workflows.js +142 -446
  63. package/dist/src/commands/workflows.js.map +1 -1
  64. package/dist/src/lib/access-rule-display.d.ts +21 -0
  65. package/dist/src/lib/access-rule-display.js +34 -0
  66. package/dist/src/lib/access-rule-display.js.map +1 -0
  67. package/dist/src/lib/api-client.d.ts +75 -37
  68. package/dist/src/lib/api-client.js +113 -59
  69. package/dist/src/lib/api-client.js.map +1 -1
  70. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
  71. package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
  72. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
  73. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
  74. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
  75. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
  76. package/dist/src/lib/config-object-descriptor.d.ts +24 -5
  77. package/dist/src/lib/config-object-descriptor.js +58 -10
  78. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  79. package/dist/src/lib/config-payload.d.ts +1 -1
  80. package/dist/src/lib/config-payload.js +1 -1
  81. package/dist/src/lib/config-surface.d.ts +8 -8
  82. package/dist/src/lib/config-surface.js +10 -10
  83. package/dist/src/lib/config-surface.js.map +1 -1
  84. package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
  85. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  86. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
  87. package/dist/src/lib/generated-allowlist.js +11 -0
  88. package/dist/src/lib/generated-allowlist.js.map +1 -1
  89. package/dist/src/lib/generated-config-surfaces.d.ts +14 -14
  90. package/dist/src/lib/generated-config-surfaces.js +63 -35
  91. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  92. package/dist/src/lib/generated-template-lint.d.ts +16 -10
  93. package/dist/src/lib/generated-template-lint.js +59 -24
  94. package/dist/src/lib/generated-template-lint.js.map +1 -1
  95. package/dist/src/lib/google-client-secret-status.d.ts +1 -1
  96. package/dist/src/lib/google-client-secret-status.js +4 -4
  97. package/dist/src/lib/google-client-secret-status.js.map +1 -1
  98. package/dist/src/lib/migration-nag.d.ts +2 -2
  99. package/dist/src/lib/migration-nag.js +3 -3
  100. package/dist/src/lib/output.d.ts +1 -1
  101. package/dist/src/lib/output.js +1 -1
  102. package/dist/src/lib/platform-owned.d.ts +5 -5
  103. package/dist/src/lib/platform-owned.js +6 -6
  104. package/dist/src/lib/platform-owned.js.map +1 -1
  105. package/dist/src/lib/query-operators.d.ts +1 -1
  106. package/dist/src/lib/query-operators.js +1 -1
  107. package/dist/src/lib/signing-secret-status.d.ts +2 -2
  108. package/dist/src/lib/signing-secret-status.js +2 -2
  109. package/dist/src/lib/snapshots.d.ts +2 -2
  110. package/dist/src/lib/snapshots.js +2 -2
  111. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
  112. package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
  113. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  114. package/dist/src/lib/swift-codegen/generator.js +5 -4
  115. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  116. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
  117. package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
  118. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
  119. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  120. package/dist/src/lib/sync-dir-selector.js +30 -0
  121. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  122. package/dist/src/lib/sync-paths.d.ts +39 -0
  123. package/dist/src/lib/sync-paths.js +70 -2
  124. package/dist/src/lib/sync-paths.js.map +1 -1
  125. package/dist/src/lib/sync-resource-types.d.ts +122 -31
  126. package/dist/src/lib/sync-resource-types.js +177 -42
  127. package/dist/src/lib/sync-resource-types.js.map +1 -1
  128. package/dist/src/lib/sync-selectors.d.ts +4 -4
  129. package/dist/src/lib/sync-selectors.js +4 -4
  130. package/dist/src/lib/toml-database-config.d.ts +4 -4
  131. package/dist/src/lib/toml-database-config.js +3 -3
  132. package/dist/src/lib/toml-database-config.js.map +1 -1
  133. package/dist/src/lib/toml-metadata-config.d.ts +4 -4
  134. package/dist/src/lib/toml-metadata-config.js +4 -4
  135. package/dist/src/lib/toml-native-form.d.ts +1 -1
  136. package/dist/src/lib/toml-native-form.js +1 -1
  137. package/dist/src/lib/toml-params-validator.d.ts +1 -1
  138. package/dist/src/lib/toml-params-validator.js +1 -1
  139. package/dist/src/lib/version-check.js +1 -1
  140. package/dist/src/lib/version-check.js.map +1 -1
  141. package/dist/src/lib/workflow-apply.d.ts +69 -10
  142. package/dist/src/lib/workflow-apply.js +99 -24
  143. package/dist/src/lib/workflow-apply.js.map +1 -1
  144. package/dist/src/lib/workflow-codegen/generator.js +1 -1
  145. package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
  146. package/dist/src/lib/workflow-config-apply.d.ts +1 -1
  147. package/dist/src/lib/workflow-config-apply.js +1 -1
  148. package/dist/src/lib/workflow-config-sidecar.d.ts +1 -1
  149. package/dist/src/lib/workflow-config-sidecar.js +1 -1
  150. package/dist/src/lib/workflow-config-sidecar.js.map +1 -1
  151. package/dist/src/lib/workflow-defaults.d.ts +30 -0
  152. package/dist/src/lib/workflow-defaults.js +41 -0
  153. package/dist/src/lib/workflow-defaults.js.map +1 -0
  154. package/dist/src/lib/workflow-include-preserve.d.ts +12 -7
  155. package/dist/src/lib/workflow-include-preserve.js +139 -6
  156. package/dist/src/lib/workflow-include-preserve.js.map +1 -1
  157. package/dist/src/lib/workflow-payload.d.ts +26 -14
  158. package/dist/src/lib/workflow-payload.js +61 -45
  159. package/dist/src/lib/workflow-payload.js.map +1 -1
  160. package/dist/src/lib/workflow-toml-validator.d.ts +19 -16
  161. package/dist/src/lib/workflow-toml-validator.js +19 -16
  162. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  163. package/dist/src/types/index.d.ts +15 -0
  164. package/dist/src/validators.d.ts +7 -7
  165. package/dist/src/validators.js +6 -6
  166. package/package.json +1 -3
  167. package/dist/src/lib/generated-workflow-model-fields.d.ts +0 -20
  168. package/dist/src/lib/generated-workflow-model-fields.js +0 -53
  169. package/dist/src/lib/generated-workflow-model-fields.js.map +0 -1
  170. package/dist/src/lib/workflow-field-descriptor.d.ts +0 -91
  171. package/dist/src/lib/workflow-field-descriptor.js +0 -153
  172. package/dist/src/lib/workflow-field-descriptor.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { ApiClient } from "../lib/api-client.js";
2
2
  import { resolveAppId } from "../lib/config.js";
3
- import { confirmPrompt } from "../lib/confirm-prompt.js";
4
3
  import { parseDataOption } from "../lib/data-input.js";
5
4
  import { success, error, info, keyValue, json, divider, } from "../lib/output.js";
6
5
  /**
@@ -41,8 +40,10 @@ export function registerMetadataCommands(program) {
41
40
  .command("metadata")
42
41
  .description("Read and write typed resource metadata (values)")
43
42
  .addHelpText("after", `
44
- Category definitions (schemas and read/write rules) are managed separately by
45
- app admins; these commands read and write the metadata values themselves.
43
+ These commands read and write metadata VALUES. Category definitions (schemas
44
+ and read/write rules) are a separate plane: inspect them with
45
+ 'primitive metadata-category-configs', author them in TOML and apply them with
46
+ 'primitive config push'.
46
47
 
47
48
  Examples:
48
49
  $ primitive metadata get user 01HXY... profile
@@ -52,8 +53,6 @@ Examples:
52
53
  $ primitive metadata get-batch --resource user:01HXY...:profile,settings --resource class:01HZQ...:roster
53
54
  $ primitive metadata get-batch --requests '[{"resourceType":"user","resourceId":"01HXY...","categories":["profile"]}]'
54
55
  $ primitive metadata resolve user billing stripeCustomerId cus_ABC
55
- $ primitive metadata categories list
56
- $ primitive metadata categories get user profile
57
56
  `);
58
57
  // ─── get ───
59
58
  metadata
@@ -278,129 +277,5 @@ Example:
278
277
  process.exit(1);
279
278
  }
280
279
  });
281
- // ─── categories (read-only config inspection) ───
282
- //
283
- // Category definitions are authored declaratively via `primitive sync`; these
284
- // read-only subcommands let a developer inspect the app's category configs
285
- // (schemas + read/write rules) without leaving the CLI.
286
- const categories = metadata
287
- .command("categories")
288
- .description("Inspect and delete metadata category definitions (schemas + read/write rules)")
289
- .addHelpText("after", `
290
- Category definitions are authored declaratively with 'primitive sync'; 'list'
291
- and 'get' are read-only inspection. 'delete' removes a definition (admin-gated);
292
- stored values for the category are NOT deleted — delete values first.
293
-
294
- Examples:
295
- $ primitive metadata categories list
296
- $ primitive metadata categories get user profile
297
- $ primitive metadata categories delete user profile
298
- `);
299
- categories
300
- .command("list")
301
- .description("List all metadata category definitions for the app")
302
- .option("--app <app-id>", "App ID (uses current app if not specified)")
303
- .option("--json", "Output as JSON")
304
- .action(async (options) => {
305
- const resolvedAppId = resolveAppId(undefined, options);
306
- const client = new ApiClient();
307
- try {
308
- const configs = await client.listMetadataCategoryConfigs(resolvedAppId);
309
- if (options.json) {
310
- json(configs);
311
- return;
312
- }
313
- if (!configs || configs.length === 0) {
314
- info("No metadata category definitions.");
315
- return;
316
- }
317
- for (const cfg of configs) {
318
- divider();
319
- keyValue("Resource Type", cfg.resourceType);
320
- keyValue("Category", cfg.category);
321
- keyValue("Schema Version", String(cfg.schemaVersion ?? "(none)"));
322
- keyValue("Read Rule", cfg.readRule ?? "(none — default deny)");
323
- keyValue("Write Rule", cfg.writeRule ?? "(none — default deny)");
324
- if (cfg.description)
325
- keyValue("Description", cfg.description);
326
- }
327
- }
328
- catch (err) {
329
- error(err.message);
330
- process.exit(1);
331
- }
332
- });
333
- categories
334
- .command("get")
335
- .description("Show one metadata category definition")
336
- .argument("<resource-type>", "Resource type (e.g. user, class)")
337
- .argument("<category>", "Metadata category")
338
- .option("--app <app-id>", "App ID (uses current app if not specified)")
339
- .option("--json", "Output as JSON")
340
- .action(async (resourceType, category, options) => {
341
- const resolvedAppId = resolveAppId(undefined, options);
342
- const client = new ApiClient();
343
- try {
344
- const cfg = await client.getMetadataCategoryConfig(resolvedAppId, resourceType, category);
345
- if (options.json) {
346
- json(cfg);
347
- return;
348
- }
349
- keyValue("Resource Type", cfg.resourceType);
350
- keyValue("Category", cfg.category);
351
- keyValue("Schema Version", String(cfg.schemaVersion ?? "(none)"));
352
- keyValue("Read Rule", cfg.readRule ?? "(none — default deny)");
353
- keyValue("Write Rule", cfg.writeRule ?? "(none — default deny)");
354
- if (cfg.description)
355
- keyValue("Description", cfg.description);
356
- keyValue("Schema", JSON.stringify(cfg.schema, null, 2));
357
- }
358
- catch (err) {
359
- error(err.message);
360
- process.exit(1);
361
- }
362
- });
363
- categories
364
- .command("delete")
365
- .description("Delete a metadata category definition (admin-gated). The one configuration verb that survives the TOML-only rule (issue #2645): `sync push --prune` has no server delete surface for this type yet (#1426), so deleting the file cannot retire the category. Orphan semantics: stored values for the category are NOT deleted — delete them first if you need them gone, or they become unreachable.")
366
- .argument("<resource-type>", "Resource type (e.g. user, class)")
367
- .argument("<category>", "Metadata category")
368
- .option("--app <app-id>", "App ID (uses current app if not specified)")
369
- .option("-y, --yes", "Skip confirmation prompt")
370
- .option("--json", "Output as JSON")
371
- .action(async (resourceType, category, options) => {
372
- const resolvedAppId = resolveAppId(undefined, options);
373
- if (!options.yes) {
374
- let confirm;
375
- try {
376
- confirm = await confirmPrompt(`Delete metadata category '${resourceType}/${category}'? This cannot be undone. ` +
377
- "Stored values for this category are NOT deleted and become unreachable — delete them first if you need them gone.");
378
- }
379
- catch (err) {
380
- error(err.message);
381
- process.exit(1);
382
- }
383
- if (!confirm) {
384
- info("Cancelled.");
385
- return;
386
- }
387
- }
388
- const client = new ApiClient();
389
- try {
390
- const result = await client.deleteMetadataCategoryConfig(resolvedAppId, resourceType, category);
391
- if (options.json) {
392
- json(result);
393
- return;
394
- }
395
- success("Metadata category definition deleted.");
396
- keyValue("Resource Type", result.resourceType);
397
- keyValue("Category", result.category);
398
- info("Stored values for this category (if any) were not deleted and are now unreachable — delete values before the category next time.");
399
- }
400
- catch (err) {
401
- error(err.message);
402
- process.exit(1);
403
- }
404
- });
405
280
  }
406
281
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/commands/metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,OAAO,EACP,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,OAAO,GACR,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,OAG5B;IACC,OAAO,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAa;IAKtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,KAAK,CACH,6BAA6B,KAAK,2CAA2C,CAC9E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;QACtB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,oBAAoB,CAAC,MAAW;IACvC,IAAI,MAAM,EAAE,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,MAAM;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrC,CAAC,CAAC,cAAc,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE,OAAO,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;CAcL,CACI,CAAC;IAEJ,cAAc;IACd,QAAQ;SACL,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;SACxC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAC9C,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,CACT,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC;YACrE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,QAAQ;SACL,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+DAA+D,CAAC;SAC5E,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;SACxC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAC/C,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,IAAI,CACL,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC7B,QAAQ,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACzD,QAAQ,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,eAAe;IACf,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,8HAA8H,CAC/H;SACA,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAC9C,aAAa,EACb,YAAY,EACZ,UAAU,CACX,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtC,OAAO,EAAE,CAAC;gBACV,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC;gBACpE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,wGAAwG,CACzG;SACA,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;SACxC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAChD,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,CACT,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iEAAiE,CAAC,CAAC;YAC1E,CAAC;YACD,QAAQ,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,QAAQ;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,0GAA0G,CAC3G;SACA,MAAM,CACL,mBAAmB,EACnB,+DAA+D,EAC/D,CAAC,KAAa,EAAE,QAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAC3D,EAAc,CACf;SACA,MAAM,CACL,mBAAmB,EACnB,sEAAsE,CACvE;SACA,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEvD,IAAI,QAIF,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,KAAK,CACH,8FAA8F,CAC/F,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,yBAAyB,CACnD,aAAa,EACb,QAAS,CACV,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,EAAE,CAAC;gBACV,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,QAAQ,CACN,QAAQ,EACR,SAAS,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CACrD,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAChD,IAAI,CAAC,UAAiC,CACvC,EAAE,CAAC;oBACF,QAAQ,CAAC,KAAK,QAAQ,EAAE,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,QAAQ;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,gFAAgF,CACjF;SACA,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;SACrD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,WAAW,CACV,OAAO,EACP;;;;;;;CAOL,CACI;SACA,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CACjD,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,GAAG,EACH,KAAK,CACN,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,mDAAmD;IACnD,EAAE;IACF,8EAA8E;IAC9E,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,UAAU,GAAG,QAAQ;SACxB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+EAA+E,CAAC;SAC5F,WAAW,CACV,OAAO,EACP;;;;;;;;;CASL,CACI,CAAC;IAEJ,UAAU;SACP,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC5C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC;gBAClE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAC,CAAC;gBAC/D,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,uBAAuB,CAAC,CAAC;gBACjE,IAAI,GAAG,CAAC,WAAW;oBAAE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAChD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAChD,aAAa,EACb,YAAY,EACZ,QAAQ,CACT,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAC,CAAC;YAC/D,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,uBAAuB,CAAC,CAAC;YACjE,IAAI,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9D,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,sYAAsY,CACvY;SACA,QAAQ,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC/D,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAChD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,IAAI,OAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,aAAa,CAC3B,6BAA6B,YAAY,IAAI,QAAQ,4BAA4B;oBAC/E,mHAAmH,CACtH,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnB,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,4BAA4B,CACtD,aAAa,EACb,YAAY,EACZ,QAAQ,CACT,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CACF,kIAAkI,CACnI,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/commands/metadata.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
- import { readFileSync, writeFileSync, statSync } from "fs";
2
- import { basename } from "path";
3
- import { lookup as mimeLookup } from "mime-types";
1
+ import { writeFileSync } from "fs";
4
2
  import { ApiClient } from "../lib/api-client.js";
5
3
  import { resolveAppId } from "../lib/config.js";
6
4
  import chalk from "chalk";
7
5
  import { success, error, info, warn, keyValue, result as printResult, formatTable, formatId, formatDate, formatStatus, formatDuration, json, divider, progress, progressEnd, } from "../lib/output.js";
8
6
  import { pollUntil } from "../lib/watch.js";
9
7
  import { confirmPrompt } from "../lib/confirm-prompt.js";
8
+ import { formatAccessRuleForDisplay } from "../lib/access-rule-display.js";
10
9
  /**
11
10
  * Resolve a prompt reference — its server id, or the author-chosen key its
12
11
  * TOML file is named for.
@@ -32,19 +31,19 @@ export function registerPromptsCommands(program) {
32
31
  .addHelpText("after", `
33
32
  Examples:
34
33
  $ primitive prompts list
35
- $ primitive config new prompt summarizer # scaffold prompts/summarizer.toml
36
- $ primitive sync push --only prompt/summarizer # apply it
34
+ $ primitive config create prompt summarizer # scaffold prompts/summarizer.toml
35
+ $ primitive config push --only prompt/summarizer # apply it
37
36
  $ primitive prompts execute 01HXY... --vars '{"text":"Hello world"}'
38
- $ primitive prompts configs list summarizer # what the server runs
37
+ $ primitive prompts configs list summarizer # what the server runs
39
38
  `);
40
- // Server-side configuration is authored in TOML and applied with `sync push`
39
+ // Server-side configuration is authored in TOML and applied with `config push`
41
40
  // (issue #2645) — this group no longer carries config-setting flags.
42
41
  prompts.addHelpText("after", `
43
42
  Configuration lives in prompts/<key>.toml:
44
- $ primitive config fields prompt # the file's keys, types and defaults
45
- $ primitive config new prompt <key> # scaffold one locally
43
+ $ primitive config fields prompt # the file's keys, types and defaults
44
+ $ primitive config create prompt <key> # scaffold one locally
46
45
  $ primitive config set prompt/<key> <path>=<value>
47
- $ primitive sync push --only prompt/<key>
46
+ $ primitive config push --only prompt/<key>
48
47
  `);
49
48
  // List prompts
50
49
  prompts
@@ -102,6 +101,10 @@ Configuration lives in prompts/<key>.toml:
102
101
  printResult("Name", result.displayName);
103
102
  printResult("Description", result.description);
104
103
  printResult("Status", formatStatus(result.status));
104
+ // #2652: no rule means every non-admin execution is denied. Print that
105
+ // in words — a blank or "-" would read as "unrestricted" and hide a
106
+ // prompt that was never given a rule.
107
+ printResult("Access Rule", formatAccessRuleForDisplay(result.accessRule, "prompt"));
105
108
  printResult("Active Config", result.activeConfigId || "-");
106
109
  if (result.configs && result.configs.length > 0) {
107
110
  divider();
@@ -272,7 +275,7 @@ edit, retire (\`status = "archived"\`) or mark one live (\`active = true\`) in t
272
275
  file, then apply it:
273
276
 
274
277
  $ primitive config set prompt/<key> prompt.status=active
275
- $ primitive sync push --only prompt/<key>
278
+ $ primitive config push --only prompt/<key>
276
279
 
277
280
  Duplicating a config is copying its \`[[configs]]\` block and renaming it.
278
281
  `);
@@ -365,11 +368,14 @@ Duplicating a config is copying its \`[[configs]]\` block and renaming it.
365
368
  // ============================================
366
369
  const tests = prompts
367
370
  .command("tests")
368
- .description("Manage and run prompt test cases")
371
+ .description("Run and inspect prompt test cases")
369
372
  .addHelpText("after", `
373
+ Test cases are authored in TOML at prompts/<key>.tests/<name>.toml and applied
374
+ with \`primitive config push\` (issue #2769); \`config fields prompt\` lists the
375
+ fields. Deleting a case is removing its file and running \`config push --prune\`.
376
+
370
377
  Examples:
371
378
  $ primitive prompts tests list <prompt-id>
372
- $ primitive prompts tests create <prompt-id> --name "Basic test" --vars '{"input":"hello"}'
373
379
  $ primitive prompts tests run <prompt-id> <test-case-id>
374
380
  $ primitive prompts tests run-all <prompt-id>
375
381
  $ primitive prompts tests run-all <prompt-id> --test-cases 01ABC,01DEF,01GHI
@@ -406,79 +412,6 @@ Examples:
406
412
  process.exit(1);
407
413
  }
408
414
  });
409
- // Create test case
410
- tests
411
- .command("create")
412
- .description("Create a test case for a prompt")
413
- .argument("<prompt-id>", "Prompt ID")
414
- .option("--app <app-id>", "App ID (uses current app if not specified)")
415
- .option("--name <name>", "Test case name (required)")
416
- .option("--vars <json>", "Input variables as JSON (required)")
417
- .option("--pattern <regex>", "Expected output pattern (regex)")
418
- .option("--contains <json>", "Expected strings to contain (JSON array)")
419
- .option("--json-subset <json>", "Expected JSON subset to match")
420
- .option("--config <config-id>", "Config ID to use for this test")
421
- .option("--evaluator-prompt <prompt-id>", "Evaluator prompt ID")
422
- .option("--evaluator-config <config-id>", "Evaluator config ID")
423
- .option("--json", "Output as JSON")
424
- .action(async (promptId, options) => {
425
- const resolvedAppId = resolveAppId(undefined, options);
426
- if (!options.name || !options.vars) {
427
- error("Required: --name and --vars");
428
- process.exit(1);
429
- }
430
- let inputVariables;
431
- try {
432
- inputVariables = JSON.parse(options.vars);
433
- }
434
- catch {
435
- error("Invalid JSON in --vars");
436
- process.exit(1);
437
- }
438
- let expectedOutputContains;
439
- if (options.contains) {
440
- try {
441
- expectedOutputContains = JSON.parse(options.contains);
442
- }
443
- catch {
444
- error("Invalid JSON in --contains");
445
- process.exit(1);
446
- }
447
- }
448
- let expectedJsonSubset;
449
- if (options.jsonSubset) {
450
- try {
451
- expectedJsonSubset = JSON.parse(options.jsonSubset);
452
- }
453
- catch {
454
- error("Invalid JSON in --json-subset");
455
- process.exit(1);
456
- }
457
- }
458
- const client = new ApiClient();
459
- try {
460
- const result = await client.createTestCase(resolvedAppId, "prompt", promptId, {
461
- name: options.name,
462
- inputVariables,
463
- expectedOutputPattern: options.pattern,
464
- expectedOutputContains,
465
- expectedJsonSubset,
466
- configId: options.config,
467
- evaluatorPromptId: options.evaluatorPrompt,
468
- evaluatorConfigId: options.evaluatorConfig,
469
- });
470
- if (options.json) {
471
- json(result);
472
- return;
473
- }
474
- success(`Test case created: ${result.name}`);
475
- keyValue("Test Case ID", result.testCaseId);
476
- }
477
- catch (err) {
478
- error(err.message);
479
- process.exit(1);
480
- }
481
- });
482
415
  // Get test case
483
416
  tests
484
417
  .command("get")
@@ -544,121 +477,6 @@ Examples:
544
477
  process.exit(1);
545
478
  }
546
479
  });
547
- // Update test case
548
- tests
549
- .command("update")
550
- .description("Update a test case")
551
- .argument("<prompt-id>", "Prompt ID")
552
- .argument("<test-case-id>", "Test Case ID")
553
- .option("--app <app-id>", "App ID (uses current app if not specified)")
554
- .option("--name <name>", "Test case name")
555
- .option("--vars <json>", "Input variables as JSON")
556
- .option("--pattern <regex>", "Expected output pattern (regex)")
557
- .option("--contains <json>", "Expected strings to contain (JSON array)")
558
- .option("--json-subset <json>", "Expected JSON subset to match")
559
- .option("--config <config-id>", "Config ID to use for this test")
560
- .option("--clear-pattern", "Clear expected pattern")
561
- .option("--clear-contains", "Clear expected contains")
562
- .option("--clear-json-subset", "Clear expected JSON subset")
563
- .option("--json", "Output as JSON")
564
- .action(async (promptId, testCaseId, options) => {
565
- const resolvedAppId = resolveAppId(undefined, options);
566
- const payload = {};
567
- if (options.name)
568
- payload.name = options.name;
569
- if (options.vars) {
570
- try {
571
- payload.inputVariables = JSON.parse(options.vars);
572
- }
573
- catch {
574
- error("Invalid JSON in --vars");
575
- process.exit(1);
576
- }
577
- }
578
- if (options.clearPattern) {
579
- payload.expectedOutputPattern = null;
580
- }
581
- else if (options.pattern) {
582
- payload.expectedOutputPattern = options.pattern;
583
- }
584
- if (options.clearContains) {
585
- payload.expectedOutputContains = null;
586
- }
587
- else if (options.contains) {
588
- try {
589
- payload.expectedOutputContains = JSON.parse(options.contains);
590
- }
591
- catch {
592
- error("Invalid JSON in --contains");
593
- process.exit(1);
594
- }
595
- }
596
- if (options.clearJsonSubset) {
597
- payload.expectedJsonSubset = null;
598
- }
599
- else if (options.jsonSubset) {
600
- try {
601
- payload.expectedJsonSubset = JSON.parse(options.jsonSubset);
602
- }
603
- catch {
604
- error("Invalid JSON in --json-subset");
605
- process.exit(1);
606
- }
607
- }
608
- if (options.config)
609
- payload.configId = options.config;
610
- if (Object.keys(payload).length === 0) {
611
- error("No update options specified.");
612
- process.exit(1);
613
- }
614
- const client = new ApiClient();
615
- try {
616
- const result = await client.updateTestCase(resolvedAppId, "prompt", promptId, testCaseId, payload);
617
- if (options.json) {
618
- json(result);
619
- return;
620
- }
621
- success("Test case updated.");
622
- }
623
- catch (err) {
624
- error(err.message);
625
- process.exit(1);
626
- }
627
- });
628
- // Delete test case
629
- tests
630
- .command("delete")
631
- .description("Delete a test case")
632
- .argument("<prompt-id>", "Prompt ID")
633
- .argument("<test-case-id>", "Test Case ID")
634
- .option("--app <app-id>", "App ID (uses current app if not specified)")
635
- .option("-y, --yes", "Skip confirmation prompt")
636
- .action(async (promptId, testCaseId, options) => {
637
- const resolvedAppId = resolveAppId(undefined, options);
638
- if (!options.yes) {
639
- let confirm;
640
- try {
641
- confirm = await confirmPrompt(`Are you sure you want to delete test case ${testCaseId}?`);
642
- }
643
- catch (err) {
644
- error(err.message);
645
- process.exit(1);
646
- }
647
- if (!confirm) {
648
- info("Cancelled.");
649
- return;
650
- }
651
- }
652
- const client = new ApiClient();
653
- try {
654
- await client.deleteTestCase(resolvedAppId, "prompt", promptId, testCaseId);
655
- success("Test case deleted.");
656
- }
657
- catch (err) {
658
- error(err.message);
659
- process.exit(1);
660
- }
661
- });
662
480
  // Run a single test case
663
481
  tests
664
482
  .command("run")
@@ -1025,13 +843,15 @@ Examples:
1025
843
  // ============================================
1026
844
  const attachments = tests
1027
845
  .command("attachments")
1028
- .description("Manage test case file attachments")
846
+ .description("Inspect test case file attachments")
1029
847
  .addHelpText("after", `
848
+ Attachments are authored as files in prompts/<key>.tests/<name>/ and applied
849
+ with \`primitive config push\` (#2769); removing one and running
850
+ \`config push --prune\` deletes it server-side. These verbs read server state.
851
+
1030
852
  Examples:
1031
853
  $ primitive prompts tests attachments list <prompt-id> <test-case-id>
1032
- $ primitive prompts tests attachments upload <prompt-id> <test-case-id> ./document.pdf
1033
854
  $ primitive prompts tests attachments download <prompt-id> <test-case-id> document.pdf
1034
- $ primitive prompts tests attachments delete <prompt-id> <test-case-id> document.pdf
1035
855
  `);
1036
856
  // List attachments
1037
857
  attachments
@@ -1069,49 +889,6 @@ Examples:
1069
889
  process.exit(1);
1070
890
  }
1071
891
  });
1072
- // Upload attachment
1073
- attachments
1074
- .command("upload")
1075
- .description("Upload a file attachment to a test case")
1076
- .argument("<prompt-id>", "Prompt ID")
1077
- .argument("<test-case-id>", "Test Case ID")
1078
- .argument("<file-path>", "Path to the file to upload")
1079
- .option("--app <app-id>", "App ID (uses current app if not specified)")
1080
- .option("--name <name>", "Override the filename")
1081
- .option("--json", "Output as JSON")
1082
- .action(async (promptId, testCaseId, filePath, options) => {
1083
- const resolvedAppId = resolveAppId(undefined, options);
1084
- const client = new ApiClient();
1085
- try {
1086
- // Check file exists and get stats
1087
- const stats = statSync(filePath);
1088
- if (!stats.isFile()) {
1089
- error(`Not a file: ${filePath}`);
1090
- process.exit(1);
1091
- }
1092
- // Check file size (10 MB limit)
1093
- const TEN_MB = 10 * 1024 * 1024;
1094
- if (stats.size > TEN_MB) {
1095
- error(`File too large (max 10MB): ${formatFileSize(stats.size)}`);
1096
- process.exit(1);
1097
- }
1098
- const filename = options.name || basename(filePath);
1099
- const data = readFileSync(filePath);
1100
- const contentType = mimeLookup(filePath) || "application/octet-stream";
1101
- const result = await client.uploadTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename, data, contentType);
1102
- if (options.json) {
1103
- json(result);
1104
- return;
1105
- }
1106
- success(`Uploaded: ${filename}`);
1107
- keyValue("Size", formatFileSize(result.attachment.size));
1108
- keyValue("Type", result.attachment.contentType);
1109
- }
1110
- catch (err) {
1111
- error(err.message);
1112
- process.exit(1);
1113
- }
1114
- });
1115
892
  // Download attachment
1116
893
  attachments
1117
894
  .command("download")
@@ -1137,41 +914,6 @@ Examples:
1137
914
  process.exit(1);
1138
915
  }
1139
916
  });
1140
- // Delete attachment
1141
- attachments
1142
- .command("delete")
1143
- .description("Delete a file attachment from a test case")
1144
- .argument("<prompt-id>", "Prompt ID")
1145
- .argument("<test-case-id>", "Test Case ID")
1146
- .argument("<filename>", "Name of the file to delete")
1147
- .option("--app <app-id>", "App ID (uses current app if not specified)")
1148
- .option("-y, --yes", "Skip confirmation prompt")
1149
- .action(async (promptId, testCaseId, filename, options) => {
1150
- const resolvedAppId = resolveAppId(undefined, options);
1151
- if (!options.yes) {
1152
- let confirm;
1153
- try {
1154
- confirm = await confirmPrompt(`Are you sure you want to delete attachment "${filename}"?`);
1155
- }
1156
- catch (err) {
1157
- error(err.message);
1158
- process.exit(1);
1159
- }
1160
- if (!confirm) {
1161
- info("Cancelled.");
1162
- return;
1163
- }
1164
- }
1165
- const client = new ApiClient();
1166
- try {
1167
- await client.deleteTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename);
1168
- success(`Deleted: ${filename}`);
1169
- }
1170
- catch (err) {
1171
- error(err.message);
1172
- process.exit(1);
1173
- }
1174
- });
1175
917
  }
1176
918
  function formatFileSize(bytes) {
1177
919
  if (bytes < 1024)