primitive-admin 1.1.0-alpha.62 → 1.1.0-alpha.64

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 (163) hide show
  1. package/README.md +34 -27
  2. package/assets/skill/skills/primitive-platform/SKILL.md +34 -20
  3. package/dist/bin/primitive.js +10 -10
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/analytics.js +5 -15
  6. package/dist/src/commands/analytics.js.map +1 -1
  7. package/dist/src/commands/apps.js +40 -41
  8. package/dist/src/commands/apps.js.map +1 -1
  9. package/dist/src/commands/blob-buckets.js +7 -7
  10. package/dist/src/commands/blob-buckets.js.map +1 -1
  11. package/dist/src/commands/collection-type-configs.js +7 -7
  12. package/dist/src/commands/collection-type-configs.js.map +1 -1
  13. package/dist/src/commands/collections.js +47 -8
  14. package/dist/src/commands/collections.js.map +1 -1
  15. package/dist/src/commands/config.d.ts +23 -12
  16. package/dist/src/commands/config.js +80 -45
  17. package/dist/src/commands/config.js.map +1 -1
  18. package/dist/src/commands/cron-triggers.js +6 -6
  19. package/dist/src/commands/cron-triggers.js.map +1 -1
  20. package/dist/src/commands/database-type-configs.d.ts +2 -0
  21. package/dist/src/commands/database-type-configs.js +171 -0
  22. package/dist/src/commands/database-type-configs.js.map +1 -0
  23. package/dist/src/commands/database-types.js +6 -6
  24. package/dist/src/commands/database-types.js.map +1 -1
  25. package/dist/src/commands/databases.js +35 -25
  26. package/dist/src/commands/databases.js.map +1 -1
  27. package/dist/src/commands/documents.js +138 -11
  28. package/dist/src/commands/documents.js.map +1 -1
  29. package/dist/src/commands/email-templates.js +8 -8
  30. package/dist/src/commands/email-templates.js.map +1 -1
  31. package/dist/src/commands/group-type-configs.js +7 -7
  32. package/dist/src/commands/group-type-configs.js.map +1 -1
  33. package/dist/src/commands/init.js +1 -1
  34. package/dist/src/commands/init.js.map +1 -1
  35. package/dist/src/commands/integrations.js +12 -197
  36. package/dist/src/commands/integrations.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 +19 -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/sync-app-settings.d.ts +24 -19
  49. package/dist/src/commands/sync-app-settings.js +48 -52
  50. package/dist/src/commands/sync-app-settings.js.map +1 -1
  51. package/dist/src/commands/sync.d.ts +952 -61
  52. package/dist/src/commands/sync.js +3977 -849
  53. package/dist/src/commands/sync.js.map +1 -1
  54. package/dist/src/commands/vars.js +4 -4
  55. package/dist/src/commands/vars.js.map +1 -1
  56. package/dist/src/commands/webhooks.js +6 -6
  57. package/dist/src/commands/webhooks.js.map +1 -1
  58. package/dist/src/commands/workflows.d.ts +22 -0
  59. package/dist/src/commands/workflows.js +135 -443
  60. package/dist/src/commands/workflows.js.map +1 -1
  61. package/dist/src/lib/api-client.d.ts +74 -37
  62. package/dist/src/lib/api-client.js +113 -59
  63. package/dist/src/lib/api-client.js.map +1 -1
  64. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
  65. package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
  66. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
  67. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
  68. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
  69. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
  70. package/dist/src/lib/config-object-descriptor.d.ts +24 -5
  71. package/dist/src/lib/config-object-descriptor.js +58 -10
  72. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  73. package/dist/src/lib/config-payload.d.ts +1 -1
  74. package/dist/src/lib/config-payload.js +1 -1
  75. package/dist/src/lib/config-surface.d.ts +8 -8
  76. package/dist/src/lib/config-surface.js +10 -10
  77. package/dist/src/lib/config-surface.js.map +1 -1
  78. package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
  79. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  80. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
  81. package/dist/src/lib/generated-allowlist.js +11 -0
  82. package/dist/src/lib/generated-allowlist.js.map +1 -1
  83. package/dist/src/lib/generated-config-surfaces.d.ts +14 -14
  84. package/dist/src/lib/generated-config-surfaces.js +37 -35
  85. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  86. package/dist/src/lib/generated-template-lint.d.ts +16 -10
  87. package/dist/src/lib/generated-template-lint.js +59 -24
  88. package/dist/src/lib/generated-template-lint.js.map +1 -1
  89. package/dist/src/lib/google-client-secret-status.d.ts +1 -1
  90. package/dist/src/lib/google-client-secret-status.js +4 -4
  91. package/dist/src/lib/google-client-secret-status.js.map +1 -1
  92. package/dist/src/lib/migration-nag.d.ts +2 -2
  93. package/dist/src/lib/migration-nag.js +3 -3
  94. package/dist/src/lib/output.d.ts +1 -1
  95. package/dist/src/lib/output.js +1 -1
  96. package/dist/src/lib/platform-owned.d.ts +5 -5
  97. package/dist/src/lib/platform-owned.js +6 -6
  98. package/dist/src/lib/platform-owned.js.map +1 -1
  99. package/dist/src/lib/query-operators.d.ts +1 -1
  100. package/dist/src/lib/query-operators.js +1 -1
  101. package/dist/src/lib/signing-secret-status.d.ts +2 -2
  102. package/dist/src/lib/signing-secret-status.js +2 -2
  103. package/dist/src/lib/snapshots.d.ts +2 -2
  104. package/dist/src/lib/snapshots.js +2 -2
  105. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
  106. package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
  107. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  108. package/dist/src/lib/swift-codegen/generator.d.ts +11 -2
  109. package/dist/src/lib/swift-codegen/generator.js +182 -6
  110. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  111. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
  112. package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
  113. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
  114. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  115. package/dist/src/lib/sync-dir-selector.js +30 -0
  116. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  117. package/dist/src/lib/sync-paths.d.ts +39 -0
  118. package/dist/src/lib/sync-paths.js +70 -2
  119. package/dist/src/lib/sync-paths.js.map +1 -1
  120. package/dist/src/lib/sync-resource-types.d.ts +122 -31
  121. package/dist/src/lib/sync-resource-types.js +177 -42
  122. package/dist/src/lib/sync-resource-types.js.map +1 -1
  123. package/dist/src/lib/sync-selectors.d.ts +4 -4
  124. package/dist/src/lib/sync-selectors.js +4 -4
  125. package/dist/src/lib/toml-database-config.d.ts +4 -4
  126. package/dist/src/lib/toml-database-config.js +3 -3
  127. package/dist/src/lib/toml-database-config.js.map +1 -1
  128. package/dist/src/lib/toml-metadata-config.d.ts +4 -4
  129. package/dist/src/lib/toml-metadata-config.js +4 -4
  130. package/dist/src/lib/toml-native-form.d.ts +1 -1
  131. package/dist/src/lib/toml-native-form.js +1 -1
  132. package/dist/src/lib/toml-params-validator.d.ts +1 -1
  133. package/dist/src/lib/toml-params-validator.js +1 -1
  134. package/dist/src/lib/version-check.js +1 -1
  135. package/dist/src/lib/version-check.js.map +1 -1
  136. package/dist/src/lib/workflow-apply.d.ts +69 -10
  137. package/dist/src/lib/workflow-apply.js +99 -24
  138. package/dist/src/lib/workflow-apply.js.map +1 -1
  139. package/dist/src/lib/workflow-codegen/generator.js +4 -4
  140. package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
  141. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +11 -0
  142. package/dist/src/lib/workflow-codegen/invokerIR.js +5 -0
  143. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
  144. package/dist/src/lib/workflow-config-apply.d.ts +1 -1
  145. package/dist/src/lib/workflow-config-apply.js +1 -1
  146. package/dist/src/lib/workflow-config-sidecar.d.ts +1 -1
  147. package/dist/src/lib/workflow-config-sidecar.js +1 -1
  148. package/dist/src/lib/workflow-config-sidecar.js.map +1 -1
  149. package/dist/src/lib/workflow-defaults.d.ts +30 -0
  150. package/dist/src/lib/workflow-defaults.js +41 -0
  151. package/dist/src/lib/workflow-defaults.js.map +1 -0
  152. package/dist/src/lib/workflow-include-preserve.d.ts +6 -6
  153. package/dist/src/lib/workflow-include-preserve.js +4 -4
  154. package/dist/src/lib/workflow-payload.d.ts +26 -14
  155. package/dist/src/lib/workflow-payload.js +61 -45
  156. package/dist/src/lib/workflow-payload.js.map +1 -1
  157. package/dist/src/lib/workflow-toml-validator.d.ts +19 -16
  158. package/dist/src/lib/workflow-toml-validator.js +19 -16
  159. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  160. package/dist/src/types/index.d.ts +15 -0
  161. package/dist/src/validators.d.ts +7 -7
  162. package/dist/src/validators.js +6 -6
  163. package/package.json +1 -3
@@ -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,6 +1,4 @@
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";
@@ -33,19 +31,19 @@ export function registerPromptsCommands(program) {
33
31
  .addHelpText("after", `
34
32
  Examples:
35
33
  $ primitive prompts list
36
- $ primitive config new prompt summarizer # scaffold prompts/summarizer.toml
37
- $ 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
38
36
  $ primitive prompts execute 01HXY... --vars '{"text":"Hello world"}'
39
- $ primitive prompts configs list summarizer # what the server runs
37
+ $ primitive prompts configs list summarizer # what the server runs
40
38
  `);
41
- // 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`
42
40
  // (issue #2645) — this group no longer carries config-setting flags.
43
41
  prompts.addHelpText("after", `
44
42
  Configuration lives in prompts/<key>.toml:
45
- $ primitive config fields prompt # the file's keys, types and defaults
46
- $ 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
47
45
  $ primitive config set prompt/<key> <path>=<value>
48
- $ primitive sync push --only prompt/<key>
46
+ $ primitive config push --only prompt/<key>
49
47
  `);
50
48
  // List prompts
51
49
  prompts
@@ -277,7 +275,7 @@ edit, retire (\`status = "archived"\`) or mark one live (\`active = true\`) in t
277
275
  file, then apply it:
278
276
 
279
277
  $ primitive config set prompt/<key> prompt.status=active
280
- $ primitive sync push --only prompt/<key>
278
+ $ primitive config push --only prompt/<key>
281
279
 
282
280
  Duplicating a config is copying its \`[[configs]]\` block and renaming it.
283
281
  `);
@@ -370,11 +368,14 @@ Duplicating a config is copying its \`[[configs]]\` block and renaming it.
370
368
  // ============================================
371
369
  const tests = prompts
372
370
  .command("tests")
373
- .description("Manage and run prompt test cases")
371
+ .description("Run and inspect prompt test cases")
374
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
+
375
377
  Examples:
376
378
  $ primitive prompts tests list <prompt-id>
377
- $ primitive prompts tests create <prompt-id> --name "Basic test" --vars '{"input":"hello"}'
378
379
  $ primitive prompts tests run <prompt-id> <test-case-id>
379
380
  $ primitive prompts tests run-all <prompt-id>
380
381
  $ primitive prompts tests run-all <prompt-id> --test-cases 01ABC,01DEF,01GHI
@@ -411,79 +412,6 @@ Examples:
411
412
  process.exit(1);
412
413
  }
413
414
  });
414
- // Create test case
415
- tests
416
- .command("create")
417
- .description("Create a test case for a prompt")
418
- .argument("<prompt-id>", "Prompt ID")
419
- .option("--app <app-id>", "App ID (uses current app if not specified)")
420
- .option("--name <name>", "Test case name (required)")
421
- .option("--vars <json>", "Input variables as JSON (required)")
422
- .option("--pattern <regex>", "Expected output pattern (regex)")
423
- .option("--contains <json>", "Expected strings to contain (JSON array)")
424
- .option("--json-subset <json>", "Expected JSON subset to match")
425
- .option("--config <config-id>", "Config ID to use for this test")
426
- .option("--evaluator-prompt <prompt-id>", "Evaluator prompt ID")
427
- .option("--evaluator-config <config-id>", "Evaluator config ID")
428
- .option("--json", "Output as JSON")
429
- .action(async (promptId, options) => {
430
- const resolvedAppId = resolveAppId(undefined, options);
431
- if (!options.name || !options.vars) {
432
- error("Required: --name and --vars");
433
- process.exit(1);
434
- }
435
- let inputVariables;
436
- try {
437
- inputVariables = JSON.parse(options.vars);
438
- }
439
- catch {
440
- error("Invalid JSON in --vars");
441
- process.exit(1);
442
- }
443
- let expectedOutputContains;
444
- if (options.contains) {
445
- try {
446
- expectedOutputContains = JSON.parse(options.contains);
447
- }
448
- catch {
449
- error("Invalid JSON in --contains");
450
- process.exit(1);
451
- }
452
- }
453
- let expectedJsonSubset;
454
- if (options.jsonSubset) {
455
- try {
456
- expectedJsonSubset = JSON.parse(options.jsonSubset);
457
- }
458
- catch {
459
- error("Invalid JSON in --json-subset");
460
- process.exit(1);
461
- }
462
- }
463
- const client = new ApiClient();
464
- try {
465
- const result = await client.createTestCase(resolvedAppId, "prompt", promptId, {
466
- name: options.name,
467
- inputVariables,
468
- expectedOutputPattern: options.pattern,
469
- expectedOutputContains,
470
- expectedJsonSubset,
471
- configId: options.config,
472
- evaluatorPromptId: options.evaluatorPrompt,
473
- evaluatorConfigId: options.evaluatorConfig,
474
- });
475
- if (options.json) {
476
- json(result);
477
- return;
478
- }
479
- success(`Test case created: ${result.name}`);
480
- keyValue("Test Case ID", result.testCaseId);
481
- }
482
- catch (err) {
483
- error(err.message);
484
- process.exit(1);
485
- }
486
- });
487
415
  // Get test case
488
416
  tests
489
417
  .command("get")
@@ -549,121 +477,6 @@ Examples:
549
477
  process.exit(1);
550
478
  }
551
479
  });
552
- // Update test case
553
- tests
554
- .command("update")
555
- .description("Update a test case")
556
- .argument("<prompt-id>", "Prompt ID")
557
- .argument("<test-case-id>", "Test Case ID")
558
- .option("--app <app-id>", "App ID (uses current app if not specified)")
559
- .option("--name <name>", "Test case name")
560
- .option("--vars <json>", "Input variables as JSON")
561
- .option("--pattern <regex>", "Expected output pattern (regex)")
562
- .option("--contains <json>", "Expected strings to contain (JSON array)")
563
- .option("--json-subset <json>", "Expected JSON subset to match")
564
- .option("--config <config-id>", "Config ID to use for this test")
565
- .option("--clear-pattern", "Clear expected pattern")
566
- .option("--clear-contains", "Clear expected contains")
567
- .option("--clear-json-subset", "Clear expected JSON subset")
568
- .option("--json", "Output as JSON")
569
- .action(async (promptId, testCaseId, options) => {
570
- const resolvedAppId = resolveAppId(undefined, options);
571
- const payload = {};
572
- if (options.name)
573
- payload.name = options.name;
574
- if (options.vars) {
575
- try {
576
- payload.inputVariables = JSON.parse(options.vars);
577
- }
578
- catch {
579
- error("Invalid JSON in --vars");
580
- process.exit(1);
581
- }
582
- }
583
- if (options.clearPattern) {
584
- payload.expectedOutputPattern = null;
585
- }
586
- else if (options.pattern) {
587
- payload.expectedOutputPattern = options.pattern;
588
- }
589
- if (options.clearContains) {
590
- payload.expectedOutputContains = null;
591
- }
592
- else if (options.contains) {
593
- try {
594
- payload.expectedOutputContains = JSON.parse(options.contains);
595
- }
596
- catch {
597
- error("Invalid JSON in --contains");
598
- process.exit(1);
599
- }
600
- }
601
- if (options.clearJsonSubset) {
602
- payload.expectedJsonSubset = null;
603
- }
604
- else if (options.jsonSubset) {
605
- try {
606
- payload.expectedJsonSubset = JSON.parse(options.jsonSubset);
607
- }
608
- catch {
609
- error("Invalid JSON in --json-subset");
610
- process.exit(1);
611
- }
612
- }
613
- if (options.config)
614
- payload.configId = options.config;
615
- if (Object.keys(payload).length === 0) {
616
- error("No update options specified.");
617
- process.exit(1);
618
- }
619
- const client = new ApiClient();
620
- try {
621
- const result = await client.updateTestCase(resolvedAppId, "prompt", promptId, testCaseId, payload);
622
- if (options.json) {
623
- json(result);
624
- return;
625
- }
626
- success("Test case updated.");
627
- }
628
- catch (err) {
629
- error(err.message);
630
- process.exit(1);
631
- }
632
- });
633
- // Delete test case
634
- tests
635
- .command("delete")
636
- .description("Delete a test case")
637
- .argument("<prompt-id>", "Prompt ID")
638
- .argument("<test-case-id>", "Test Case ID")
639
- .option("--app <app-id>", "App ID (uses current app if not specified)")
640
- .option("-y, --yes", "Skip confirmation prompt")
641
- .action(async (promptId, testCaseId, options) => {
642
- const resolvedAppId = resolveAppId(undefined, options);
643
- if (!options.yes) {
644
- let confirm;
645
- try {
646
- confirm = await confirmPrompt(`Are you sure you want to delete test case ${testCaseId}?`);
647
- }
648
- catch (err) {
649
- error(err.message);
650
- process.exit(1);
651
- }
652
- if (!confirm) {
653
- info("Cancelled.");
654
- return;
655
- }
656
- }
657
- const client = new ApiClient();
658
- try {
659
- await client.deleteTestCase(resolvedAppId, "prompt", promptId, testCaseId);
660
- success("Test case deleted.");
661
- }
662
- catch (err) {
663
- error(err.message);
664
- process.exit(1);
665
- }
666
- });
667
480
  // Run a single test case
668
481
  tests
669
482
  .command("run")
@@ -1030,13 +843,15 @@ Examples:
1030
843
  // ============================================
1031
844
  const attachments = tests
1032
845
  .command("attachments")
1033
- .description("Manage test case file attachments")
846
+ .description("Inspect test case file attachments")
1034
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
+
1035
852
  Examples:
1036
853
  $ primitive prompts tests attachments list <prompt-id> <test-case-id>
1037
- $ primitive prompts tests attachments upload <prompt-id> <test-case-id> ./document.pdf
1038
854
  $ primitive prompts tests attachments download <prompt-id> <test-case-id> document.pdf
1039
- $ primitive prompts tests attachments delete <prompt-id> <test-case-id> document.pdf
1040
855
  `);
1041
856
  // List attachments
1042
857
  attachments
@@ -1074,49 +889,6 @@ Examples:
1074
889
  process.exit(1);
1075
890
  }
1076
891
  });
1077
- // Upload attachment
1078
- attachments
1079
- .command("upload")
1080
- .description("Upload a file attachment to a test case")
1081
- .argument("<prompt-id>", "Prompt ID")
1082
- .argument("<test-case-id>", "Test Case ID")
1083
- .argument("<file-path>", "Path to the file to upload")
1084
- .option("--app <app-id>", "App ID (uses current app if not specified)")
1085
- .option("--name <name>", "Override the filename")
1086
- .option("--json", "Output as JSON")
1087
- .action(async (promptId, testCaseId, filePath, options) => {
1088
- const resolvedAppId = resolveAppId(undefined, options);
1089
- const client = new ApiClient();
1090
- try {
1091
- // Check file exists and get stats
1092
- const stats = statSync(filePath);
1093
- if (!stats.isFile()) {
1094
- error(`Not a file: ${filePath}`);
1095
- process.exit(1);
1096
- }
1097
- // Check file size (10 MB limit)
1098
- const TEN_MB = 10 * 1024 * 1024;
1099
- if (stats.size > TEN_MB) {
1100
- error(`File too large (max 10MB): ${formatFileSize(stats.size)}`);
1101
- process.exit(1);
1102
- }
1103
- const filename = options.name || basename(filePath);
1104
- const data = readFileSync(filePath);
1105
- const contentType = mimeLookup(filePath) || "application/octet-stream";
1106
- const result = await client.uploadTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename, data, contentType);
1107
- if (options.json) {
1108
- json(result);
1109
- return;
1110
- }
1111
- success(`Uploaded: ${filename}`);
1112
- keyValue("Size", formatFileSize(result.attachment.size));
1113
- keyValue("Type", result.attachment.contentType);
1114
- }
1115
- catch (err) {
1116
- error(err.message);
1117
- process.exit(1);
1118
- }
1119
- });
1120
892
  // Download attachment
1121
893
  attachments
1122
894
  .command("download")
@@ -1142,41 +914,6 @@ Examples:
1142
914
  process.exit(1);
1143
915
  }
1144
916
  });
1145
- // Delete attachment
1146
- attachments
1147
- .command("delete")
1148
- .description("Delete a file attachment from a test case")
1149
- .argument("<prompt-id>", "Prompt ID")
1150
- .argument("<test-case-id>", "Test Case ID")
1151
- .argument("<filename>", "Name of the file to delete")
1152
- .option("--app <app-id>", "App ID (uses current app if not specified)")
1153
- .option("-y, --yes", "Skip confirmation prompt")
1154
- .action(async (promptId, testCaseId, filename, options) => {
1155
- const resolvedAppId = resolveAppId(undefined, options);
1156
- if (!options.yes) {
1157
- let confirm;
1158
- try {
1159
- confirm = await confirmPrompt(`Are you sure you want to delete attachment "${filename}"?`);
1160
- }
1161
- catch (err) {
1162
- error(err.message);
1163
- process.exit(1);
1164
- }
1165
- if (!confirm) {
1166
- info("Cancelled.");
1167
- return;
1168
- }
1169
- }
1170
- const client = new ApiClient();
1171
- try {
1172
- await client.deleteTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename);
1173
- success(`Deleted: ${filename}`);
1174
- }
1175
- catch (err) {
1176
- error(err.message);
1177
- process.exit(1);
1178
- }
1179
- });
1180
917
  }
1181
918
  function formatFileSize(bytes) {
1182
919
  if (bytes < 1024)