@inf-monkeys-tech/monkeys 1.0.35 → 1.0.37

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 (63) hide show
  1. package/lib/contracts/common.d.ts +2 -1
  2. package/lib/contracts/common.d.ts.map +1 -1
  3. package/lib/contracts/common.js.map +1 -1
  4. package/lib/contracts/index.d.ts +1 -0
  5. package/lib/contracts/index.d.ts.map +1 -1
  6. package/lib/contracts/index.js +1 -0
  7. package/lib/contracts/index.js.map +1 -1
  8. package/lib/contracts/menu.d.ts +790 -0
  9. package/lib/contracts/menu.d.ts.map +1 -0
  10. package/lib/contracts/menu.js +319 -0
  11. package/lib/contracts/menu.js.map +1 -0
  12. package/lib/contracts/page.d.ts +6 -0
  13. package/lib/contracts/page.d.ts.map +1 -1
  14. package/lib/contracts/page.js +6 -0
  15. package/lib/contracts/page.js.map +1 -1
  16. package/lib/contracts/semantic.d.ts +59 -0
  17. package/lib/contracts/semantic.d.ts.map +1 -1
  18. package/lib/contracts/semantic.js +2 -0
  19. package/lib/contracts/semantic.js.map +1 -1
  20. package/lib/contracts/tenant.d.ts +445 -4
  21. package/lib/contracts/tenant.d.ts.map +1 -1
  22. package/lib/contracts/tenant.js +113 -2
  23. package/lib/contracts/tenant.js.map +1 -1
  24. package/lib/esm/contracts/index.mjs +1166 -746
  25. package/lib/esm/contracts/index.mjs.map +1 -1
  26. package/lib/esm/index.mjs +1692 -749
  27. package/lib/esm/index.mjs.map +1 -1
  28. package/lib/esm/runtime/index.mjs +1234 -342
  29. package/lib/esm/runtime/index.mjs.map +1 -1
  30. package/lib/esm/schemas/index.mjs +1158 -746
  31. package/lib/esm/schemas/index.mjs.map +1 -1
  32. package/lib/json-schema/index.json +3 -0
  33. package/lib/json-schema/menu-definition-set.schema.json +411 -0
  34. package/lib/json-schema/menu-definition.schema.json +385 -0
  35. package/lib/json-schema/menu-runtime-bundle.schema.json +541 -0
  36. package/lib/json-schema/page-definition.schema.json +14 -0
  37. package/lib/json-schema/page-runtime-descriptor.schema.json +14 -0
  38. package/lib/json-schema/product-declaration.schema.json +369 -1
  39. package/lib/json-schema/tenant-product-config.schema.json +537 -2
  40. package/lib/json-schema/tenant-runtime-config.schema.json +667 -2
  41. package/lib/runtime/declaration-compiler.d.ts +2 -0
  42. package/lib/runtime/declaration-compiler.d.ts.map +1 -1
  43. package/lib/runtime/declaration-compiler.js +4 -0
  44. package/lib/runtime/declaration-compiler.js.map +1 -1
  45. package/lib/runtime/index.d.ts +1 -0
  46. package/lib/runtime/index.d.ts.map +1 -1
  47. package/lib/runtime/index.js +1 -0
  48. package/lib/runtime/index.js.map +1 -1
  49. package/lib/runtime/menu-compiler.d.ts +58 -0
  50. package/lib/runtime/menu-compiler.d.ts.map +1 -0
  51. package/lib/runtime/menu-compiler.js +436 -0
  52. package/lib/runtime/menu-compiler.js.map +1 -0
  53. package/lib/runtime/tenant-config.d.ts +2 -0
  54. package/lib/runtime/tenant-config.d.ts.map +1 -1
  55. package/lib/runtime/tenant-config.js +1 -0
  56. package/lib/runtime/tenant-config.js.map +1 -1
  57. package/lib/schemas/index.d.ts +477 -3
  58. package/lib/schemas/index.d.ts.map +1 -1
  59. package/lib/schemas/index.js +46 -2
  60. package/lib/schemas/index.js.map +1 -1
  61. package/package.json +1 -1
  62. package/test/fixtures/current-user-menu-profile.v1.json +22 -0
  63. package/test/fixtures/menu-definition.v1.json +41 -0
package/lib/esm/index.mjs CHANGED
@@ -8303,6 +8303,9 @@ var DomainEventSchema = z8.object({
8303
8303
  occurredAt: IsoDateTimeSchema
8304
8304
  }).strict();
8305
8305
 
8306
+ // src/contracts/menu.ts
8307
+ import { z as z10 } from "zod";
8308
+
8306
8309
  // src/contracts/page.ts
8307
8310
  import { z as z9 } from "zod";
8308
8311
  var PageTypeSchema = z9.enum([
@@ -8390,6 +8393,9 @@ var PageDefinitionSchema = z9.object({
8390
8393
  access: z9.object({
8391
8394
  actions: z9.array(z9.enum(["read", "write", "execute", "manage-permissions"])).default([])
8392
8395
  }).strict(),
8396
+ input: z9.object({
8397
+ schemaRef: ContractIdentifierSchema
8398
+ }).strict().optional(),
8393
8399
  rendererConfig: z9.object({
8394
8400
  schemaRef: ContractIdentifierSchema,
8395
8401
  value: JsonObjectSchema
@@ -8579,40 +8585,314 @@ var PageRuntimeProjectionSchema = z9.object({
8579
8585
  }
8580
8586
  });
8581
8587
 
8588
+ // src/contracts/menu.ts
8589
+ var MENU_ACTIVATION_QUERY_PARAMETER = "__menuActivation";
8590
+ var MENU_CONTRACT_VERSION = 1;
8591
+ var MENU_MAX_DEFINITIONS = 128;
8592
+ var MENU_MAX_NODES = 1024;
8593
+ var MENU_MAX_TREE_DEPTH = 16;
8594
+ var MENU_MAX_INPUT_BYTES = 64 * 1024;
8595
+ var MENU_MAX_INPUT_VALUES = 2048;
8596
+ var MenuOrderSchema = z10.number().int().min(-1e6).max(1e6);
8597
+ var inspectJsonValue = (value) => {
8598
+ let maxDepth = 0;
8599
+ let values = 0;
8600
+ const visit = (candidate, depth) => {
8601
+ values += 1;
8602
+ maxDepth = Math.max(maxDepth, depth);
8603
+ if (Array.isArray(candidate)) {
8604
+ candidate.forEach((item) => visit(item, depth + 1));
8605
+ return;
8606
+ }
8607
+ if (candidate && typeof candidate === "object") {
8608
+ Object.values(candidate).forEach((item) => visit(item, depth + 1));
8609
+ }
8610
+ };
8611
+ visit(value, 1);
8612
+ return {
8613
+ bytes: new TextEncoder().encode(JSON.stringify(value)).byteLength,
8614
+ depth: maxDepth,
8615
+ values
8616
+ };
8617
+ };
8618
+ var MenuBoundedInputSchema = JsonObjectSchema.superRefine((value, context) => {
8619
+ const bounds = inspectJsonValue(value);
8620
+ if (bounds.bytes > MENU_MAX_INPUT_BYTES) {
8621
+ context.addIssue({
8622
+ code: "custom",
8623
+ message: `Menu input exceeds ${MENU_MAX_INPUT_BYTES} UTF-8 bytes.`
8624
+ });
8625
+ }
8626
+ if (bounds.depth > MENU_MAX_TREE_DEPTH) {
8627
+ context.addIssue({
8628
+ code: "custom",
8629
+ message: `Menu input exceeds maximum depth ${MENU_MAX_TREE_DEPTH}.`
8630
+ });
8631
+ }
8632
+ if (bounds.values > MENU_MAX_INPUT_VALUES) {
8633
+ context.addIssue({
8634
+ code: "custom",
8635
+ message: `Menu input exceeds ${MENU_MAX_INPUT_VALUES} values.`
8636
+ });
8637
+ }
8638
+ });
8639
+ var MenuPageRefSchema = z10.object({
8640
+ applicationId: ContractIdentifierSchema,
8641
+ pageId: ContractIdentifierSchema
8642
+ }).strict();
8643
+ var MenuSourceInputBindingSchema = z10.discriminatedUnion("exposure", [
8644
+ z10.object({ exposure: z10.literal("client"), value: MenuBoundedInputSchema }).strict(),
8645
+ z10.object({ exposure: z10.literal("server"), value: MenuBoundedInputSchema }).strict()
8646
+ ]);
8647
+ var MenuRuntimeInputBindingSchema = z10.discriminatedUnion("exposure", [
8648
+ z10.object({ exposure: z10.literal("client"), value: MenuBoundedInputSchema }).strict(),
8649
+ z10.object({ exposure: z10.literal("server") }).strict()
8650
+ ]);
8651
+ var MenuNavigateBehaviorSchema = z10.object({
8652
+ kind: z10.literal("navigate"),
8653
+ page: MenuPageRefSchema,
8654
+ activationId: ContractIdentifierSchema.optional(),
8655
+ input: MenuSourceInputBindingSchema.optional()
8656
+ }).strict();
8657
+ var MenuActionBehaviorSchema = z10.object({
8658
+ kind: z10.literal("action"),
8659
+ actionRef: ContractIdentifierSchema,
8660
+ input: MenuBoundedInputSchema.optional()
8661
+ }).strict();
8662
+ var MenuBehaviorSchema = z10.discriminatedUnion("kind", [
8663
+ MenuNavigateBehaviorSchema,
8664
+ MenuActionBehaviorSchema
8665
+ ]);
8666
+ var MenuNodeBaseShape = {
8667
+ nodeId: ContractIdentifierSchema,
8668
+ parentNodeId: ContractIdentifierSchema.optional(),
8669
+ order: MenuOrderSchema
8670
+ };
8671
+ var MenuGroupNodeSchema = z10.object({
8672
+ ...MenuNodeBaseShape,
8673
+ kind: z10.literal("group"),
8674
+ label: LocalizedTextSchema.optional(),
8675
+ iconRef: ContractIdentifierSchema.optional()
8676
+ }).strict();
8677
+ var MenuDividerNodeSchema = z10.object({
8678
+ ...MenuNodeBaseShape,
8679
+ kind: z10.literal("divider")
8680
+ }).strict();
8681
+ var MenuItemNodeSchema = z10.object({
8682
+ ...MenuNodeBaseShape,
8683
+ kind: z10.literal("item"),
8684
+ label: LocalizedTextSchema,
8685
+ iconRef: ContractIdentifierSchema.optional(),
8686
+ tone: z10.enum(["default", "danger"]).optional(),
8687
+ requiredPermission: ContractIdentifierSchema.optional(),
8688
+ behavior: MenuBehaviorSchema
8689
+ }).strict();
8690
+ var MenuNodeSchema = z10.discriminatedUnion("kind", [
8691
+ MenuGroupNodeSchema,
8692
+ MenuDividerNodeSchema,
8693
+ MenuItemNodeSchema
8694
+ ]);
8695
+ var MenuContributionSchema = z10.object({
8696
+ providerId: ContractIdentifierSchema,
8697
+ parentNodeId: ContractIdentifierSchema.optional(),
8698
+ order: MenuOrderSchema
8699
+ }).strict();
8700
+ var validateMenuStructure = (menu, context) => {
8701
+ const nodesById = /* @__PURE__ */ new Map();
8702
+ menu.nodes.forEach((node, index) => {
8703
+ if (nodesById.has(node.nodeId)) {
8704
+ context.addIssue({
8705
+ code: "custom",
8706
+ path: ["nodes", index, "nodeId"],
8707
+ message: `Duplicate menu nodeId: ${node.nodeId}`
8708
+ });
8709
+ return;
8710
+ }
8711
+ nodesById.set(node.nodeId, { node, index });
8712
+ });
8713
+ const validateParent = (parentNodeId, path) => {
8714
+ if (!parentNodeId) return;
8715
+ const parent = nodesById.get(parentNodeId);
8716
+ if (!parent) {
8717
+ context.addIssue({ code: "custom", path, message: `Unknown menu parentNodeId: ${parentNodeId}` });
8718
+ return;
8719
+ }
8720
+ if (parent.node.kind !== "group") {
8721
+ context.addIssue({ code: "custom", path, message: `Menu parent ${parentNodeId} must be a group.` });
8722
+ }
8723
+ };
8724
+ menu.nodes.forEach((node, index) => validateParent(node.parentNodeId, ["nodes", index, "parentNodeId"]));
8725
+ menu.contributions.forEach((contribution, index) => validateParent(contribution.parentNodeId, ["contributions", index, "parentNodeId"]));
8726
+ menu.nodes.forEach((node, index) => {
8727
+ const ancestors = /* @__PURE__ */ new Set([node.nodeId]);
8728
+ let parentNodeId = node.parentNodeId;
8729
+ let depth = 1;
8730
+ while (parentNodeId) {
8731
+ if (ancestors.has(parentNodeId)) {
8732
+ context.addIssue({
8733
+ code: "custom",
8734
+ path: ["nodes", index, "parentNodeId"],
8735
+ message: `Menu node cycle contains ${node.nodeId}.`
8736
+ });
8737
+ break;
8738
+ }
8739
+ ancestors.add(parentNodeId);
8740
+ depth += 1;
8741
+ if (depth > MENU_MAX_TREE_DEPTH) {
8742
+ context.addIssue({
8743
+ code: "custom",
8744
+ path: ["nodes", index, "parentNodeId"],
8745
+ message: `Menu tree exceeds maximum depth ${MENU_MAX_TREE_DEPTH}.`
8746
+ });
8747
+ break;
8748
+ }
8749
+ parentNodeId = nodesById.get(parentNodeId)?.node.parentNodeId;
8750
+ }
8751
+ });
8752
+ const contributionKeys = /* @__PURE__ */ new Set();
8753
+ menu.contributions.forEach((contribution, index) => {
8754
+ const key = `${contribution.parentNodeId ?? ""}\0${contribution.providerId}`;
8755
+ if (contributionKeys.has(key)) {
8756
+ context.addIssue({
8757
+ code: "custom",
8758
+ path: ["contributions", index, "providerId"],
8759
+ message: `Duplicate menu contribution provider at parent: ${contribution.providerId}`
8760
+ });
8761
+ }
8762
+ contributionKeys.add(key);
8763
+ });
8764
+ };
8765
+ var MenuDefinitionSchema = z10.object({
8766
+ contract: z10.literal("MenuDefinition"),
8767
+ version: z10.literal(MENU_CONTRACT_VERSION),
8768
+ applicationId: ContractIdentifierSchema,
8769
+ surface: ContractIdentifierSchema,
8770
+ menuId: ContractIdentifierSchema,
8771
+ nodes: z10.array(MenuNodeSchema).max(MENU_MAX_NODES),
8772
+ contributions: z10.array(MenuContributionSchema).max(MENU_MAX_NODES).default([])
8773
+ }).strict().superRefine(validateMenuStructure);
8774
+ var MenuDefinitionSetSchema = z10.union([
8775
+ z10.literal("*"),
8776
+ z10.object({
8777
+ version: z10.literal(MENU_CONTRACT_VERSION),
8778
+ definitions: z10.array(MenuDefinitionSchema).max(MENU_MAX_DEFINITIONS)
8779
+ }).strict()
8780
+ ]);
8781
+ var MenuAccessRequirementSchema = z10.object({
8782
+ authenticated: z10.boolean().default(true),
8783
+ permissionAllOf: z10.array(ContractIdentifierSchema).default([]),
8784
+ permissionAnyOf: z10.array(ContractIdentifierSchema).default([]),
8785
+ featureFlags: z10.array(ContractIdentifierSchema).default([])
8786
+ }).strict();
8787
+ var MenuPageRegistrationSchema = z10.object({
8788
+ applicationId: ContractIdentifierSchema,
8789
+ page: PageDefinitionSchema
8790
+ }).strict();
8791
+ var MenuActionRegistrationSchema = z10.object({
8792
+ applicationId: ContractIdentifierSchema,
8793
+ actionRef: ContractIdentifierSchema,
8794
+ inputSchemaRef: ContractIdentifierSchema.optional(),
8795
+ access: MenuAccessRequirementSchema
8796
+ }).strict();
8797
+ var MenuContributionProviderRegistrationSchema = z10.object({
8798
+ applicationId: ContractIdentifierSchema,
8799
+ providerId: ContractIdentifierSchema,
8800
+ surfaces: z10.array(ContractIdentifierSchema).min(1).optional()
8801
+ }).strict();
8802
+ var CompiledMenuNavigateBehaviorSchema = z10.object({
8803
+ kind: z10.literal("navigate"),
8804
+ page: MenuPageRefSchema,
8805
+ activationId: ContractIdentifierSchema,
8806
+ input: MenuRuntimeInputBindingSchema.optional()
8807
+ }).strict();
8808
+ var CompiledMenuActionBehaviorSchema = z10.object({
8809
+ kind: z10.literal("action"),
8810
+ actionRef: ContractIdentifierSchema,
8811
+ input: MenuBoundedInputSchema.optional()
8812
+ }).strict();
8813
+ var CompiledMenuBehaviorSchema = z10.discriminatedUnion("kind", [
8814
+ CompiledMenuNavigateBehaviorSchema,
8815
+ CompiledMenuActionBehaviorSchema
8816
+ ]);
8817
+ var CompiledMenuItemAccessSchema = MenuAccessRequirementSchema.extend({
8818
+ requiredPermission: ContractIdentifierSchema.optional()
8819
+ }).strict();
8820
+ var CompiledMenuGroupNodeSchema = MenuGroupNodeSchema;
8821
+ var CompiledMenuDividerNodeSchema = MenuDividerNodeSchema;
8822
+ var CompiledMenuItemNodeSchema = MenuItemNodeSchema.omit({ behavior: true, requiredPermission: true }).extend({
8823
+ behavior: CompiledMenuBehaviorSchema,
8824
+ access: CompiledMenuItemAccessSchema
8825
+ }).strict();
8826
+ var CompiledMenuNodeSchema = z10.discriminatedUnion("kind", [
8827
+ CompiledMenuGroupNodeSchema,
8828
+ CompiledMenuDividerNodeSchema,
8829
+ CompiledMenuItemNodeSchema
8830
+ ]);
8831
+ var CompiledMenuProjectionSchema = z10.object({
8832
+ applicationId: ContractIdentifierSchema,
8833
+ surface: ContractIdentifierSchema,
8834
+ menuId: ContractIdentifierSchema,
8835
+ nodes: z10.array(CompiledMenuNodeSchema).max(MENU_MAX_NODES),
8836
+ contributions: z10.array(MenuContributionSchema).max(MENU_MAX_NODES)
8837
+ }).strict();
8838
+ var MenuNavigationTargetSchema = z10.object({
8839
+ page: MenuPageRefSchema,
8840
+ activationId: ContractIdentifierSchema,
8841
+ input: MenuRuntimeInputBindingSchema.optional()
8842
+ }).strict();
8843
+ var MenuRuntimeBundleSchema = z10.object({
8844
+ contract: z10.literal("MenuRuntimeBundle"),
8845
+ version: z10.literal(MENU_CONTRACT_VERSION),
8846
+ applicationId: ContractIdentifierSchema,
8847
+ sourceVersion: ContractIdentifierSchema,
8848
+ contentHash: Sha256Schema,
8849
+ menus: z10.array(CompiledMenuProjectionSchema).max(MENU_MAX_DEFINITIONS),
8850
+ navigationTargets: z10.array(MenuNavigationTargetSchema),
8851
+ sourceMap: z10.record(z10.string(), ContractIdentifierSchema).default({})
8852
+ }).strict();
8853
+ var MenuContributionResultSchema = z10.object({
8854
+ contract: z10.literal("MenuContributionResult"),
8855
+ applicationId: ContractIdentifierSchema,
8856
+ surface: ContractIdentifierSchema,
8857
+ menuId: ContractIdentifierSchema,
8858
+ providerId: ContractIdentifierSchema,
8859
+ nodes: z10.array(CompiledMenuNodeSchema).max(MENU_MAX_NODES)
8860
+ }).strict();
8861
+
8582
8862
  // src/contracts/semantic.ts
8583
- import { z as z10 } from "zod";
8584
- var ConceptRelationshipSchema = z10.object({
8863
+ import { z as z11 } from "zod";
8864
+ var ConceptRelationshipSchema = z11.object({
8585
8865
  kind: ContractIdentifierSchema,
8586
8866
  targetConceptId: ContractIdentifierSchema,
8587
- cardinality: z10.enum(["one", "optional", "many"])
8867
+ cardinality: z11.enum(["one", "optional", "many"])
8588
8868
  }).strict();
8589
- var ConceptDefinitionSchema = z10.object({
8590
- contract: z10.literal("ConceptDefinition"),
8869
+ var ConceptDefinitionSchema = z11.object({
8870
+ contract: z11.literal("ConceptDefinition"),
8591
8871
  conceptId: ContractIdentifierSchema,
8592
8872
  ownerRepo: ContractIdentifierSchema,
8593
- displayName: z10.string().trim().min(1),
8594
- description: z10.string().optional(),
8873
+ displayName: z11.string().trim().min(1),
8874
+ description: z11.string().optional(),
8595
8875
  schemaRef: ContractIdentifierSchema,
8596
8876
  ontologyId: ContractIdentifierSchema.optional(),
8597
- capabilityIds: z10.array(ContractIdentifierSchema).default([]),
8598
- commandNames: z10.array(ContractIdentifierSchema).default([]),
8599
- relationships: z10.array(ConceptRelationshipSchema).default([])
8877
+ capabilityIds: z11.array(ContractIdentifierSchema).default([]),
8878
+ commandNames: z11.array(ContractIdentifierSchema).default([]),
8879
+ relationships: z11.array(ConceptRelationshipSchema).default([])
8600
8880
  }).strict();
8601
- var DomainCommandDefinitionSchema = z10.object({
8602
- contract: z10.literal("DomainCommandDefinition"),
8881
+ var DomainCommandDefinitionSchema = z11.object({
8882
+ contract: z11.literal("DomainCommandDefinition"),
8603
8883
  commandName: ContractIdentifierSchema,
8604
8884
  ownerRepo: ContractIdentifierSchema,
8605
- displayName: z10.string().trim().min(1),
8606
- description: z10.string().optional(),
8607
- targetKinds: z10.array(ContractIdentifierSchema).min(1),
8885
+ displayName: z11.string().trim().min(1),
8886
+ description: z11.string().optional(),
8887
+ targetKinds: z11.array(ContractIdentifierSchema).min(1),
8608
8888
  inputSchemaRef: ContractIdentifierSchema,
8609
8889
  outputSchemaRef: ContractIdentifierSchema.optional(),
8610
- requiredPermissionCodes: z10.array(ContractIdentifierSchema).default([]),
8890
+ requiredPermissionCodes: z11.array(ContractIdentifierSchema).default([]),
8611
8891
  handlerRef: EntityRefSchema,
8612
- sideEffects: z10.array(z10.enum(["data-write", "execution", "navigation", "notification", "external-call"])).default([])
8892
+ sideEffects: z11.array(z11.enum(["data-write", "execution", "navigation", "notification", "external-call"])).default([])
8613
8893
  }).strict();
8614
- var DomainCommandSchema = z10.object({
8615
- contract: z10.literal("DomainCommand"),
8894
+ var DomainCommandSchema = z11.object({
8895
+ contract: z11.literal("DomainCommand"),
8616
8896
  commandId: ContractIdentifierSchema,
8617
8897
  commandName: ContractIdentifierSchema,
8618
8898
  requestId: ContractIdentifierSchema,
@@ -8620,29 +8900,30 @@ var DomainCommandSchema = z10.object({
8620
8900
  idempotencyKey: ContractIdentifierSchema,
8621
8901
  targetRef: EntityRefSchema,
8622
8902
  actorRef: EntityRefSchema,
8623
- source: z10.object({
8624
- product: z10.enum(["studio", "kernel", "compute", "agent", "mcp", "service"]),
8903
+ source: z11.object({
8904
+ product: z11.enum(["studio", "kernel", "compute", "agent", "mcp", "service"]),
8625
8905
  pageId: ContractIdentifierSchema.optional(),
8626
8906
  capabilityId: ContractIdentifierSchema.optional()
8627
8907
  }).strict(),
8628
8908
  payload: JsonObjectSchema,
8629
8909
  issuedAt: IsoDateTimeSchema
8630
8910
  }).strict();
8631
- var ProductDeclarationSchema = z10.object({
8632
- contract: z10.literal("ProductDeclaration"),
8911
+ var ProductDeclarationSchema = z11.object({
8912
+ contract: z11.literal("ProductDeclaration"),
8633
8913
  declarationId: ContractIdentifierSchema,
8634
8914
  ownerRepo: ContractIdentifierSchema,
8635
- concepts: z10.array(ConceptDefinitionSchema).default([]),
8636
- ontologies: z10.array(OntologyDefinitionSchema).default([]),
8637
- projections: z10.array(ProjectionSpecSchema).default([]),
8638
- commands: z10.array(DomainCommandDefinitionSchema).default([]),
8639
- capabilities: z10.array(CapabilityManifestSchema).default([]),
8640
- pages: z10.array(PageDefinitionSchema).default([])
8641
- }).strict();
8642
- var DeclarationGraphEdgeSchema = z10.object({
8915
+ concepts: z11.array(ConceptDefinitionSchema).default([]),
8916
+ ontologies: z11.array(OntologyDefinitionSchema).default([]),
8917
+ projections: z11.array(ProjectionSpecSchema).default([]),
8918
+ commands: z11.array(DomainCommandDefinitionSchema).default([]),
8919
+ capabilities: z11.array(CapabilityManifestSchema).default([]),
8920
+ pages: z11.array(PageDefinitionSchema).default([]),
8921
+ menus: z11.array(MenuDefinitionSchema).default([])
8922
+ }).strict();
8923
+ var DeclarationGraphEdgeSchema = z11.object({
8643
8924
  from: EntityRefSchema,
8644
8925
  to: EntityRefSchema,
8645
- relation: z10.enum([
8926
+ relation: z11.enum([
8646
8927
  "uses-ontology",
8647
8928
  "uses-projection",
8648
8929
  "uses-capability",
@@ -8650,25 +8931,25 @@ var DeclarationGraphEdgeSchema = z10.object({
8650
8931
  "relates-to-concept"
8651
8932
  ])
8652
8933
  }).strict();
8653
- var ChangeImpactSchema = z10.object({
8934
+ var ChangeImpactSchema = z11.object({
8654
8935
  changedRef: EntityRefSchema,
8655
- affectedRefs: z10.array(EntityRefSchema),
8656
- reasons: z10.array(ContractIdentifierSchema).min(1)
8936
+ affectedRefs: z11.array(EntityRefSchema),
8937
+ reasons: z11.array(ContractIdentifierSchema).min(1)
8657
8938
  }).strict();
8658
- var ChangeImpactGraphSchema = z10.object({
8659
- contract: z10.literal("ChangeImpactGraph"),
8939
+ var ChangeImpactGraphSchema = z11.object({
8940
+ contract: z11.literal("ChangeImpactGraph"),
8660
8941
  declarationId: ContractIdentifierSchema,
8661
- nodes: z10.array(EntityRefSchema),
8662
- edges: z10.array(DeclarationGraphEdgeSchema),
8663
- impacts: z10.array(ChangeImpactSchema),
8942
+ nodes: z11.array(EntityRefSchema),
8943
+ edges: z11.array(DeclarationGraphEdgeSchema),
8944
+ impacts: z11.array(ChangeImpactSchema),
8664
8945
  generatedAt: IsoDateTimeSchema
8665
8946
  }).strict();
8666
8947
 
8667
8948
  // src/contracts/tenant.ts
8668
- import { z as z12 } from "zod";
8949
+ import { z as z13 } from "zod";
8669
8950
 
8670
8951
  // src/contracts/theme.ts
8671
- import { z as z11 } from "zod";
8952
+ import { z as z12 } from "zod";
8672
8953
 
8673
8954
  // src/theme-tokens/core.ts
8674
8955
  var import_ajv = __toESM(require_ajv());
@@ -10895,20 +11176,20 @@ function assertMonkeysThemeTokensComplete(input) {
10895
11176
  }
10896
11177
 
10897
11178
  // src/contracts/theme.ts
10898
- var ThemeTokenTypeSchema = z11.enum(THEME_TOKEN_TYPES);
10899
- var ThemeTokenSchema = z11.record(z11.string(), z11.unknown()).superRefine((input, context) => {
11179
+ var ThemeTokenTypeSchema = z12.enum(THEME_TOKEN_TYPES);
11180
+ var ThemeTokenSchema = z12.record(z12.string(), z12.unknown()).superRefine((input, context) => {
10900
11181
  const issues = validateThemeTokensDocumentStructure({ token: input });
10901
11182
  for (const issue of issues) {
10902
11183
  context.addIssue({ code: "custom", message: `${issue.path} ${issue.message}` });
10903
11184
  }
10904
11185
  });
10905
- var ThemeTokenGroupSchema = z11.record(z11.string(), z11.unknown()).superRefine((input, context) => {
11186
+ var ThemeTokenGroupSchema = z12.record(z12.string(), z12.unknown()).superRefine((input, context) => {
10906
11187
  const issues = validateThemeTokensDocumentStructure(input);
10907
11188
  for (const issue of issues) {
10908
11189
  context.addIssue({ code: "custom", message: `${issue.path} ${issue.message}` });
10909
11190
  }
10910
11191
  });
10911
- var ThemeTokensSchema = z11.record(z11.string(), z11.unknown()).superRefine((input, context) => {
11192
+ var ThemeTokensSchema = z12.record(z12.string(), z12.unknown()).superRefine((input, context) => {
10912
11193
  const issues = validateThemeTokensDocument(input);
10913
11194
  for (const issue of issues) {
10914
11195
  context.addIssue({ code: "custom", message: `${issue.path} ${issue.message}` });
@@ -10935,9 +11216,9 @@ var ResolvedThemeTokensSchema = ThemeTokensSchema.superRefine((input, context) =
10935
11216
  });
10936
11217
 
10937
11218
  // src/contracts/tenant.ts
10938
- var DesignTokenFileSourceSchema = z12.object({
10939
- type: z12.literal("file"),
10940
- path: z12.string().trim().min(1).superRefine((source, context) => {
11219
+ var DesignTokenFileSourceSchema = z13.object({
11220
+ type: z13.literal("file"),
11221
+ path: z13.string().trim().min(1).superRefine((source, context) => {
10941
11222
  if (/^[a-z][a-z\d+.-]*:/i.test(source)) {
10942
11223
  context.addIssue({
10943
11224
  code: "custom",
@@ -10946,9 +11227,9 @@ var DesignTokenFileSourceSchema = z12.object({
10946
11227
  }
10947
11228
  })
10948
11229
  }).strict();
10949
- var DesignTokenUrlSourceSchema = z12.object({
10950
- type: z12.literal("url"),
10951
- url: z12.string().trim().min(1).superRefine((source, context) => {
11230
+ var DesignTokenUrlSourceSchema = z13.object({
11231
+ type: z13.literal("url"),
11232
+ url: z13.string().trim().min(1).superRefine((source, context) => {
10952
11233
  if (!/^https?:\/\//i.test(source)) {
10953
11234
  context.addIssue({
10954
11235
  code: "custom",
@@ -10957,118 +11238,207 @@ var DesignTokenUrlSourceSchema = z12.object({
10957
11238
  }
10958
11239
  })
10959
11240
  }).strict();
10960
- var DesignTokenInlineSourceSchema = z12.object({
10961
- type: z12.literal("inline"),
11241
+ var DesignTokenInlineSourceSchema = z13.object({
11242
+ type: z13.literal("inline"),
10962
11243
  document: ThemeTokensSchema
10963
11244
  }).strict();
10964
- var DesignTokenSourceSchema = z12.discriminatedUnion("type", [
11245
+ var DesignTokenSourceSchema = z13.discriminatedUnion("type", [
10965
11246
  DesignTokenFileSourceSchema,
10966
11247
  DesignTokenUrlSourceSchema,
10967
11248
  DesignTokenInlineSourceSchema
10968
11249
  ]);
10969
- var TenantDesignTokensConfigSchema = z12.object({
11250
+ var TenantDesignTokensConfigSchema = z13.object({
10970
11251
  /** Ordered tenant overrides. The backend always applies the product default first. */
10971
- tokenSources: z12.array(DesignTokenSourceSchema)
11252
+ tokenSources: z13.array(DesignTokenSourceSchema)
10972
11253
  }).strict();
10973
- var TenantAuthBindingSchema = z12.object({
10974
- kind: z12.literal("auth-provider"),
11254
+ var TenantAuthBindingSchema = z13.object({
11255
+ kind: z13.literal("auth-provider"),
10975
11256
  providerId: ContractIdentifierSchema,
10976
11257
  policyRef: ContractIdentifierSchema.optional()
10977
11258
  }).strict();
10978
- var TenantDataBindingSchema = z12.discriminatedUnion("kind", [
10979
- z12.object({
10980
- kind: z12.literal("data-provider"),
11259
+ var TenantDataBindingSchema = z13.discriminatedUnion("kind", [
11260
+ z13.object({
11261
+ kind: z13.literal("data-provider"),
10981
11262
  providerId: ContractIdentifierSchema,
10982
11263
  domainRef: ContractIdentifierSchema.optional()
10983
11264
  }).strict(),
10984
- z12.object({
10985
- kind: z12.literal("projection"),
11265
+ z13.object({
11266
+ kind: z13.literal("projection"),
10986
11267
  projectionRef: ContractIdentifierSchema,
10987
11268
  domainRef: ContractIdentifierSchema.optional()
10988
11269
  }).strict()
10989
11270
  ]);
10990
- var TenantAuthBindingsSchema = z12.record(
11271
+ var TenantAuthBindingsSchema = z13.record(
10991
11272
  ContractIdentifierSchema,
10992
11273
  TenantAuthBindingSchema
10993
11274
  );
10994
- var TenantDataBindingsSchema = z12.record(
11275
+ var TenantDataBindingsSchema = z13.record(
10995
11276
  ContractIdentifierSchema,
10996
11277
  TenantDataBindingSchema
10997
11278
  );
10998
- var TenantTrendRadarSourceSchema = z12.object({
11279
+ var TenantTrendRadarSourceSchema = z13.object({
10999
11280
  ontologyId: ContractIdentifierSchema,
11000
11281
  viewId: ContractIdentifierSchema
11001
11282
  }).strict();
11002
- var TenantTrendRadarSourcesSchema = z12.object({
11283
+ var TenantTrendRadarSourcesSchema = z13.object({
11003
11284
  hotwords: TenantTrendRadarSourceSchema.optional(),
11004
11285
  brands: TenantTrendRadarSourceSchema.optional()
11005
11286
  }).strict();
11006
- var AssetVariantsSchema = z12.object({
11007
- light: z12.string().optional(),
11008
- dark: z12.string().optional()
11287
+ var AssetVariantsSchema = z13.object({
11288
+ light: z13.string().optional(),
11289
+ dark: z13.string().optional()
11009
11290
  }).strict();
11010
- var ThemeHeadbarSchema = z12.object({
11011
- theme: z12.enum(["card", "glassy", "ghost"]).optional(),
11012
- navPosition: z12.enum(["left", "center", "right"]).optional(),
11013
- actions: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]).optional(),
11014
- profile: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]).optional(),
11015
- showTeamQuota: z12.boolean().optional()
11291
+ var LEGACY_CURRENT_USER_MENU_ITEM_IDS = ["dark-mode", "language", "settings", "logout"];
11292
+ var CURRENT_USER_MENU_CONTROL_REFS = ["dark-mode", "language"];
11293
+ var CURRENT_USER_MENU_ACTION_REFS = ["logout"];
11294
+ var CurrentUserMenuIdentifierSchema = z13.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/, "Expected a stable current-user menu identifier.");
11295
+ var CurrentUserMenuDisplayTextSchema = z13.union([
11296
+ z13.string().trim().min(1),
11297
+ z13.record(z13.string().trim().min(1), z13.string().trim().min(1)).refine((value) => Object.keys(value).length > 0, "Localized menu text must contain at least one locale.")
11298
+ ]);
11299
+ var CurrentUserMenuNavigationItemSchema = z13.object({
11300
+ id: CurrentUserMenuIdentifierSchema,
11301
+ kind: z13.literal("navigation"),
11302
+ ref: CurrentUserMenuIdentifierSchema
11303
+ }).strict();
11304
+ var CurrentUserMenuControlItemSchema = z13.object({
11305
+ id: CurrentUserMenuIdentifierSchema,
11306
+ kind: z13.literal("control"),
11307
+ ref: z13.enum(CURRENT_USER_MENU_CONTROL_REFS)
11016
11308
  }).strict();
11017
- var TenantHeadbarModuleLeafSchema = z12.object({
11309
+ var CurrentUserMenuActionItemSchema = z13.object({
11310
+ id: CurrentUserMenuIdentifierSchema,
11311
+ kind: z13.literal("action"),
11312
+ ref: z13.enum(CURRENT_USER_MENU_ACTION_REFS),
11313
+ tone: z13.enum(["default", "danger"]).optional()
11314
+ }).strict();
11315
+ var CurrentUserMenuItemSchema = z13.discriminatedUnion("kind", [
11316
+ CurrentUserMenuNavigationItemSchema,
11317
+ CurrentUserMenuControlItemSchema,
11318
+ CurrentUserMenuActionItemSchema
11319
+ ]);
11320
+ var CurrentUserMenuSectionSchema = z13.object({
11321
+ id: CurrentUserMenuIdentifierSchema,
11322
+ label: CurrentUserMenuDisplayTextSchema.optional(),
11323
+ dividerBefore: z13.boolean().optional(),
11324
+ items: z13.array(CurrentUserMenuItemSchema)
11325
+ }).strict();
11326
+ var CurrentUserMenuConfigSchema = z13.object({
11327
+ version: z13.literal(1),
11328
+ sections: z13.array(CurrentUserMenuSectionSchema).max(20)
11329
+ }).strict().superRefine((value, context) => {
11330
+ const sectionIds = /* @__PURE__ */ new Set();
11331
+ const itemIds = /* @__PURE__ */ new Set();
11332
+ let itemCount = 0;
11333
+ value.sections.forEach((section, sectionIndex) => {
11334
+ if (sectionIds.has(section.id)) {
11335
+ context.addIssue({
11336
+ code: "custom",
11337
+ message: `Duplicate current-user menu section id ${section.id}.`,
11338
+ path: ["sections", sectionIndex, "id"]
11339
+ });
11340
+ }
11341
+ sectionIds.add(section.id);
11342
+ itemCount += section.items.length;
11343
+ section.items.forEach((item, itemIndex) => {
11344
+ if (itemIds.has(item.id)) {
11345
+ context.addIssue({
11346
+ code: "custom",
11347
+ message: `Duplicate current-user menu item id ${item.id}.`,
11348
+ path: ["sections", sectionIndex, "items", itemIndex, "id"]
11349
+ });
11350
+ }
11351
+ itemIds.add(item.id);
11352
+ });
11353
+ });
11354
+ if (itemCount > 100) {
11355
+ context.addIssue({
11356
+ code: "custom",
11357
+ message: "Current-user menu supports at most 100 items.",
11358
+ path: ["sections"]
11359
+ });
11360
+ }
11361
+ });
11362
+ var LegacyCurrentUserMenuProfileSchema = z13.array(z13.enum(LEGACY_CURRENT_USER_MENU_ITEM_IDS)).superRefine((value, context) => {
11363
+ const seen = /* @__PURE__ */ new Set();
11364
+ value.forEach((item, index) => {
11365
+ if (seen.has(item)) {
11366
+ context.addIssue({
11367
+ code: "custom",
11368
+ message: `Duplicate legacy current-user menu item ${item}.`,
11369
+ path: [index]
11370
+ });
11371
+ }
11372
+ seen.add(item);
11373
+ });
11374
+ });
11375
+ var CurrentUserMenuProfileSchema = z13.union([
11376
+ z13.literal("*"),
11377
+ LegacyCurrentUserMenuProfileSchema,
11378
+ CurrentUserMenuConfigSchema
11379
+ ]);
11380
+ var ThemeHeadbarSchema = z13.object({
11381
+ theme: z13.enum(["card", "glassy", "ghost"]).optional(),
11382
+ navPosition: z13.enum(["left", "center", "right"]).optional(),
11383
+ actions: z13.union([z13.literal("*"), z13.array(ContractIdentifierSchema)]).optional(),
11384
+ profile: CurrentUserMenuProfileSchema.optional(),
11385
+ showTeamQuota: z13.boolean().optional()
11386
+ }).strict();
11387
+ var TenantHeadbarModuleLeafSchema = z13.object({
11018
11388
  id: ContractIdentifierSchema,
11019
- extraInfo: z12.boolean().optional(),
11020
- displayName: z12.union([z12.string(), z12.record(LocaleIdentifierSchema, z12.string())]).optional(),
11021
- visible: z12.boolean().optional(),
11022
- disabled: z12.boolean().optional(),
11023
- icon: z12.string().optional(),
11024
- showQuickSwitcher: z12.boolean().optional(),
11025
- showSidebar: z12.boolean().optional(),
11026
- showContentFrame: z12.boolean().optional()
11389
+ extraInfo: z13.boolean().optional(),
11390
+ displayName: z13.union([z13.string(), z13.record(LocaleIdentifierSchema, z13.string())]).optional(),
11391
+ visible: z13.boolean().optional(),
11392
+ disabled: z13.boolean().optional(),
11393
+ icon: z13.string().optional(),
11394
+ showQuickSwitcher: z13.boolean().optional(),
11395
+ showSidebar: z13.boolean().optional(),
11396
+ showContentFrame: z13.boolean().optional()
11027
11397
  }).strict();
11028
11398
  var TenantHeadbarModuleItemSchema = TenantHeadbarModuleLeafSchema.extend({
11029
- children: z12.array(TenantHeadbarModuleLeafSchema).optional()
11030
- }).strict();
11031
- var KernelHeadbarSchema = z12.object({
11032
- theme: z12.literal("card").optional(),
11033
- layoutMode: z12.enum(["boxed", "full-bleed"]).optional(),
11034
- heightPx: z12.number().positive().optional(),
11035
- navPosition: z12.enum(["left", "center", "right"]).optional(),
11036
- brandTitle: z12.string().optional(),
11037
- menuRadius: z12.enum(["default", "none", "sm", "md", "lg", "xl", "full"]).optional()
11038
- }).strict();
11039
- var CustomIconSchema = z12.object({
11040
- color: z12.string().optional(),
11041
- url: z12.string().optional(),
11042
- type: z12.enum(["svg", "image"]).optional(),
11043
- hintTextColor: z12.string().optional()
11044
- }).strict();
11045
- var WorkbenchCustomerToolSchema = z12.object({
11399
+ children: z13.array(TenantHeadbarModuleLeafSchema).optional()
11400
+ }).strict();
11401
+ var KernelHeadbarSchema = z13.object({
11402
+ theme: z13.literal("card").optional(),
11403
+ layoutMode: z13.enum(["boxed", "full-bleed"]).optional(),
11404
+ heightPx: z13.number().positive().optional(),
11405
+ navPosition: z13.enum(["left", "center", "right"]).optional(),
11406
+ brandTitle: z13.string().optional(),
11407
+ menuRadius: z13.enum(["default", "none", "sm", "md", "lg", "xl", "full"]).optional()
11408
+ }).strict();
11409
+ var CustomIconSchema = z13.object({
11410
+ color: z13.string().optional(),
11411
+ url: z13.string().optional(),
11412
+ type: z13.enum(["svg", "image"]).optional(),
11413
+ hintTextColor: z13.string().optional()
11414
+ }).strict();
11415
+ var WorkbenchCustomerToolSchema = z13.object({
11046
11416
  id: ContractIdentifierSchema,
11047
- label: z12.union([z12.string(), z12.record(LocaleIdentifierSchema, z12.string())]).optional(),
11048
- fixed: z12.boolean().optional()
11417
+ label: z13.union([z13.string(), z13.record(LocaleIdentifierSchema, z13.string())]).optional(),
11418
+ fixed: z13.boolean().optional()
11049
11419
  }).strict();
11050
- var WorkbenchStudioOverrideSchema = z12.object({
11051
- studioName: z12.string().trim().min(1),
11052
- dropdownToolsDefault: z12.array(ContractIdentifierSchema).optional(),
11053
- existingToolsDefault: z12.array(ContractIdentifierSchema).optional(),
11054
- historyColumnsDefault: z12.number().int().min(1).max(6).optional()
11420
+ var WorkbenchStudioOverrideSchema = z13.object({
11421
+ studioName: z13.string().trim().min(1),
11422
+ dropdownToolsDefault: z13.array(ContractIdentifierSchema).optional(),
11423
+ existingToolsDefault: z13.array(ContractIdentifierSchema).optional(),
11424
+ historyColumnsDefault: z13.number().int().min(1).max(6).optional()
11055
11425
  }).strict();
11056
- var TenantWorkbenchPageContextSchema = z12.object({
11426
+ var TenantWorkbenchPageContextSchema = z13.object({
11057
11427
  workflow: JsonObjectSchema.optional(),
11058
11428
  agent: JsonObjectSchema.optional(),
11059
11429
  agentId: ContractIdentifierSchema.optional(),
11060
11430
  designProject: JsonObjectSchema.optional(),
11061
11431
  designMetadataId: ContractIdentifierSchema.optional(),
11062
- iframeUrl: z12.string().trim().min(1).optional(),
11063
- info: z12.object({
11432
+ iframeUrl: z13.string().trim().min(1).optional(),
11433
+ info: z13.object({
11064
11434
  displayName: LocalizedTextSchema.optional(),
11065
11435
  description: LocalizedTextSchema.optional(),
11066
- iconUrl: z12.string().trim().min(1).optional()
11436
+ iconUrl: z13.string().trim().min(1).optional()
11067
11437
  }).strict().optional(),
11068
- isBuiltinPinned: z12.boolean().optional(),
11069
- isBuiltinReadonly: z12.boolean().optional()
11438
+ isBuiltinPinned: z13.boolean().optional(),
11439
+ isBuiltinReadonly: z13.boolean().optional()
11070
11440
  }).strict();
11071
- var TenantWorkbenchPageEnvelopeSchema = z12.object({
11441
+ var TenantWorkbenchPageEnvelopeSchema = z13.object({
11072
11442
  definition: PageDefinitionSchema,
11073
11443
  context: TenantWorkbenchPageContextSchema
11074
11444
  }).strict().superRefine(({ definition }, context) => {
@@ -11101,56 +11471,56 @@ var TenantWorkbenchPageEnvelopeSchema = z12.object({
11101
11471
  });
11102
11472
  }
11103
11473
  });
11104
- var TenantWorkbenchPageGroupSchema = z12.object({
11474
+ var TenantWorkbenchPageGroupSchema = z13.object({
11105
11475
  id: ContractIdentifierSchema,
11106
- pageIds: z12.array(ContractIdentifierSchema),
11476
+ pageIds: z13.array(ContractIdentifierSchema),
11107
11477
  displayName: LocalizedTextSchema,
11108
- isBuiltIn: z12.boolean(),
11109
- iconUrl: z12.string().optional(),
11110
- sortIndex: z12.number().int().nullable().optional(),
11478
+ isBuiltIn: z13.boolean(),
11479
+ iconUrl: z13.string().optional(),
11480
+ sortIndex: z13.number().int().nullable().optional(),
11111
11481
  presetRelationId: ContractIdentifierSchema.optional(),
11112
11482
  relationKey: ContractIdentifierSchema.nullable().optional(),
11113
11483
  studioId: ContractIdentifierSchema.optional()
11114
11484
  }).strict();
11115
- var TenantWorkbenchConfigSchema = z12.object({
11116
- pages: z12.array(TenantWorkbenchPageEnvelopeSchema),
11117
- pageGroups: z12.array(TenantWorkbenchPageGroupSchema),
11118
- catalog: z12.object({ enabled: z12.boolean().optional(), defaultEntry: z12.boolean().optional() }).strict().optional(),
11119
- quickSwitcherMaxItems: z12.number().int().nonnegative().optional(),
11120
- defaultOrder: z12.object({
11121
- groups: z12.array(ContractIdentifierSchema),
11122
- pages: z12.record(ContractIdentifierSchema, z12.array(ContractIdentifierSchema))
11485
+ var TenantWorkbenchConfigSchema = z13.object({
11486
+ pages: z13.array(TenantWorkbenchPageEnvelopeSchema),
11487
+ pageGroups: z13.array(TenantWorkbenchPageGroupSchema),
11488
+ catalog: z13.object({ enabled: z13.boolean().optional(), defaultEntry: z13.boolean().optional() }).strict().optional(),
11489
+ quickSwitcherMaxItems: z13.number().int().nonnegative().optional(),
11490
+ defaultOrder: z13.object({
11491
+ groups: z13.array(ContractIdentifierSchema),
11492
+ pages: z13.record(ContractIdentifierSchema, z13.array(ContractIdentifierSchema))
11123
11493
  }).strict().optional(),
11124
- customers: z12.object({
11125
- dropdownToolsDefault: z12.array(ContractIdentifierSchema).optional(),
11126
- layoutManagerTools: z12.array(WorkbenchCustomerToolSchema).optional(),
11127
- studioTabsMode: z12.enum(["dropdown", "tabs"]).optional(),
11128
- historyWatermark: z12.object({
11129
- svgUrl: z12.string().optional(),
11130
- coverage: z12.array(z12.enum(["list", "detail", "download"])).optional(),
11131
- maxLongEdgeRatio: z12.number().positive().optional(),
11132
- sizing: z12.object({
11494
+ customers: z13.object({
11495
+ dropdownToolsDefault: z13.array(ContractIdentifierSchema).optional(),
11496
+ layoutManagerTools: z13.array(WorkbenchCustomerToolSchema).optional(),
11497
+ studioTabsMode: z13.enum(["dropdown", "tabs"]).optional(),
11498
+ historyWatermark: z13.object({
11499
+ svgUrl: z13.string().optional(),
11500
+ coverage: z13.array(z13.enum(["list", "detail", "download"])).optional(),
11501
+ maxLongEdgeRatio: z13.number().positive().optional(),
11502
+ sizing: z13.object({
11133
11503
  mode: ContractIdentifierSchema,
11134
- heightRatio: z12.number().positive().optional(),
11135
- minHeightPx: z12.number().nonnegative().optional(),
11136
- maxHeightPx: z12.number().nonnegative().optional()
11504
+ heightRatio: z13.number().positive().optional(),
11505
+ minHeightPx: z13.number().nonnegative().optional(),
11506
+ maxHeightPx: z13.number().nonnegative().optional()
11137
11507
  }).strict().optional(),
11138
- enhance: z12.object({
11139
- enabled: z12.boolean().optional(),
11140
- backgroundLumaThreshold: z12.number().min(0).max(1).optional(),
11141
- stroke: z12.object({
11142
- color: z12.string().optional(),
11143
- opacity: z12.number().min(0).max(1).optional(),
11144
- widthRatio: z12.number().nonnegative().optional(),
11145
- blurRatio: z12.number().nonnegative().optional(),
11146
- steps: z12.number().int().positive().optional()
11508
+ enhance: z13.object({
11509
+ enabled: z13.boolean().optional(),
11510
+ backgroundLumaThreshold: z13.number().min(0).max(1).optional(),
11511
+ stroke: z13.object({
11512
+ color: z13.string().optional(),
11513
+ opacity: z13.number().min(0).max(1).optional(),
11514
+ widthRatio: z13.number().nonnegative().optional(),
11515
+ blurRatio: z13.number().nonnegative().optional(),
11516
+ steps: z13.number().int().positive().optional()
11147
11517
  }).strict().optional()
11148
11518
  }).strict().optional()
11149
11519
  }).strict().optional(),
11150
- layoutManagerEnabled: z12.boolean().optional(),
11151
- existingToolsDefault: z12.array(ContractIdentifierSchema).optional(),
11152
- historyColumnsDefault: z12.number().int().min(1).max(6).optional(),
11153
- studioOverrides: z12.array(WorkbenchStudioOverrideSchema).optional()
11520
+ layoutManagerEnabled: z13.boolean().optional(),
11521
+ existingToolsDefault: z13.array(ContractIdentifierSchema).optional(),
11522
+ historyColumnsDefault: z13.number().int().min(1).max(6).optional(),
11523
+ studioOverrides: z13.array(WorkbenchStudioOverrideSchema).optional()
11154
11524
  }).strict().optional()
11155
11525
  }).strict().superRefine(({ pages, pageGroups }, context) => {
11156
11526
  const pageIds = pages.map(({ definition }) => definition.pageId);
@@ -11174,38 +11544,38 @@ var TenantWorkbenchConfigSchema = z12.object({
11174
11544
  });
11175
11545
  });
11176
11546
  });
11177
- var LoginPageSchema = z12.object({
11178
- background: z12.object({ imageUrl: z12.string().optional(), gradient: z12.string().optional() }).strict().optional(),
11179
- logo: z12.object({
11180
- url: z12.string().optional(),
11181
- lightUrl: z12.string().optional(),
11182
- darkUrl: z12.string().optional(),
11183
- position: z12.enum(["top", "middle", "bottom"]).optional(),
11184
- scale: z12.number().positive().optional()
11547
+ var LoginPageSchema = z13.object({
11548
+ background: z13.object({ imageUrl: z13.string().optional(), gradient: z13.string().optional() }).strict().optional(),
11549
+ logo: z13.object({
11550
+ url: z13.string().optional(),
11551
+ lightUrl: z13.string().optional(),
11552
+ darkUrl: z13.string().optional(),
11553
+ position: z13.enum(["top", "middle", "bottom"]).optional(),
11554
+ scale: z13.number().positive().optional()
11185
11555
  }).strict().optional(),
11186
- customCss: z12.string().optional()
11556
+ customCss: z13.string().optional()
11187
11557
  }).strict();
11188
11558
  var LandingPageHeadbarConfigShape = {
11189
- headbarMode: z12.enum(["shared", "hidden"]).optional()
11559
+ headbarMode: z13.enum(["shared", "hidden"]).optional()
11190
11560
  };
11191
- var LandingPageDefaultConfigSchema = z12.object({
11192
- mode: z12.literal("default"),
11561
+ var LandingPageDefaultConfigSchema = z13.object({
11562
+ mode: z13.literal("default"),
11193
11563
  ...LandingPageHeadbarConfigShape
11194
11564
  }).strict();
11195
- var LandingPageMarkdownConfigSchema = z12.object({
11196
- mode: z12.literal("markdown"),
11197
- content: z12.string(),
11565
+ var LandingPageMarkdownConfigSchema = z13.object({
11566
+ mode: z13.literal("markdown"),
11567
+ content: z13.string(),
11198
11568
  ...LandingPageHeadbarConfigShape
11199
11569
  }).strict();
11200
- var LandingPageHtmlConfigSchema = z12.object({
11201
- mode: z12.literal("html"),
11202
- content: z12.string(),
11570
+ var LandingPageHtmlConfigSchema = z13.object({
11571
+ mode: z13.literal("html"),
11572
+ content: z13.string(),
11203
11573
  ...LandingPageHeadbarConfigShape
11204
11574
  }).strict();
11205
- var LandingPageIframeConfigSchema = z12.object({
11206
- mode: z12.literal("iframe"),
11575
+ var LandingPageIframeConfigSchema = z13.object({
11576
+ mode: z13.literal("iframe"),
11207
11577
  ...LandingPageHeadbarConfigShape,
11208
- url: z12.string().refine((value) => {
11578
+ url: z13.string().refine((value) => {
11209
11579
  if (/^\/(?!\/)/.test(value)) {
11210
11580
  return !value.includes("\\");
11211
11581
  }
@@ -11217,422 +11587,424 @@ var LandingPageIframeConfigSchema = z12.object({
11217
11587
  }
11218
11588
  }, "Landing page iframe URL must use a root-relative path or HTTP(S) without embedded credentials.")
11219
11589
  }).strict();
11220
- var TenantLandingPageConfigSchema = z12.discriminatedUnion("mode", [
11590
+ var TenantLandingPageConfigSchema = z13.discriminatedUnion("mode", [
11221
11591
  LandingPageDefaultConfigSchema,
11222
11592
  LandingPageMarkdownConfigSchema,
11223
11593
  LandingPageHtmlConfigSchema,
11224
11594
  LandingPageIframeConfigSchema
11225
11595
  ]);
11226
- var TenantApplicationConfigSchema = z12.object({
11227
- theme: z12.object({
11228
- id: z12.string().optional(),
11229
- name: z12.string().optional(),
11230
- title: z12.string().optional(),
11596
+ var TenantApplicationConfigSchema = z13.object({
11597
+ theme: z13.object({
11598
+ id: z13.string().optional(),
11599
+ name: z13.string().optional(),
11600
+ title: z13.string().optional(),
11231
11601
  favicon: AssetVariantsSchema.optional(),
11232
11602
  logo: AssetVariantsSchema.optional(),
11233
- pwaIcon: z12.string().optional(),
11234
- form: z12.object({ variant: z12.enum(["bento", "ghost"]) }).strict().optional(),
11235
- toast: z12.object({
11236
- position: z12.enum(["top-right", "top-left", "bottom-right", "bottom-left", "top-center", "bottom-center"])
11603
+ pwaIcon: z13.string().optional(),
11604
+ form: z13.object({ variant: z13.enum(["bento", "ghost"]) }).strict().optional(),
11605
+ toast: z13.object({
11606
+ position: z13.enum(["top-right", "top-left", "bottom-right", "bottom-left", "top-center", "bottom-center"])
11237
11607
  }).strict().optional(),
11238
- icons: z12.object({ error: CustomIconSchema.optional(), empty: CustomIconSchema.optional() }).strict().optional(),
11239
- views: z12.object({
11240
- form: z12.object({
11241
- toast: z12.object({ afterCreate: z12.boolean(), afterDelete: z12.boolean() }).strict(),
11242
- progress: z12.enum(["estimate", "infinite"]),
11243
- onlyResult: z12.boolean(),
11244
- tabular: z12.object({ theme: z12.enum(["default", "tentiary", "primary"]) }).strict()
11608
+ icons: z13.object({ error: CustomIconSchema.optional(), empty: CustomIconSchema.optional() }).strict().optional(),
11609
+ views: z13.object({
11610
+ form: z13.object({
11611
+ toast: z13.object({ afterCreate: z13.boolean(), afterDelete: z13.boolean() }).strict(),
11612
+ progress: z13.enum(["estimate", "infinite"]),
11613
+ onlyResult: z13.boolean(),
11614
+ tabular: z13.object({ theme: z13.enum(["default", "tentiary", "primary"]) }).strict()
11245
11615
  }).strict()
11246
11616
  }).strict().optional(),
11247
11617
  loginPage: LoginPageSchema.optional(),
11248
- extraLanguageURL: z12.record(z12.string(), z12.string()).optional(),
11249
- hideSpaceHeader: z12.boolean().optional(),
11250
- showSidebarTeamSelector: z12.boolean().optional(),
11251
- showWorkbenchSidebar: z12.boolean().optional(),
11252
- workbenchViewTheme: z12.enum(["default", "bsd-blue"]).optional(),
11253
- defaults: z12.object({
11254
- showFormInImageDetail: z12.boolean().optional(),
11255
- darkMode: z12.enum(["light", "dark", "auto"]).optional(),
11256
- language: z12.enum(["en-US", "zh-CN", "ja-JP"]).optional(),
11257
- showDarkModeToggle: z12.boolean().optional(),
11258
- showLanguageToggle: z12.boolean().optional()
11618
+ extraLanguageURL: z13.record(z13.string(), z13.string()).optional(),
11619
+ hideSpaceHeader: z13.boolean().optional(),
11620
+ showSidebarTeamSelector: z13.boolean().optional(),
11621
+ showWorkbenchSidebar: z13.boolean().optional(),
11622
+ workbenchViewTheme: z13.enum(["default", "bsd-blue"]).optional(),
11623
+ defaults: z13.object({
11624
+ showFormInImageDetail: z13.boolean().optional(),
11625
+ darkMode: z13.enum(["light", "dark", "auto"]).optional(),
11626
+ language: z13.enum(["en-US", "zh-CN", "ja-JP"]).optional(),
11627
+ showDarkModeToggle: z13.boolean().optional(),
11628
+ showLanguageToggle: z13.boolean().optional()
11259
11629
  }).strict().optional(),
11260
- modules: z12.object({
11261
- monkeysSpaceSidebar: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]).optional(),
11262
- monkeysSpaceHeadbar: z12.union([
11263
- z12.literal("*"),
11264
- z12.array(TenantHeadbarModuleItemSchema)
11630
+ modules: z13.object({
11631
+ monkeysSpaceSidebar: z13.union([z13.literal("*"), z13.array(ContractIdentifierSchema)]).optional(),
11632
+ monkeysSpaceHeadbar: z13.union([
11633
+ z13.literal("*"),
11634
+ z13.array(TenantHeadbarModuleItemSchema)
11265
11635
  ]).optional(),
11266
- settingsSidebar: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]).optional()
11636
+ settingsSidebar: z13.union([z13.literal("*"), z13.array(ContractIdentifierSchema)]).optional()
11267
11637
  }).strict().optional(),
11268
11638
  headbar: ThemeHeadbarSchema.optional(),
11269
- kernelLayout: z12.object({
11270
- navigationMode: z12.enum(["sidebar", "topbar"]).optional(),
11271
- allowNavigationModeSwitch: z12.boolean().optional(),
11639
+ kernelLayout: z13.object({
11640
+ navigationMode: z13.enum(["sidebar", "topbar"]).optional(),
11641
+ allowNavigationModeSwitch: z13.boolean().optional(),
11272
11642
  headbar: KernelHeadbarSchema.optional()
11273
11643
  }).strict().optional(),
11274
- paginationPosition: z12.enum(["left", "right"]).optional(),
11275
- ugcViewIconOnlyMode: z12.boolean().optional(),
11276
- workflowPreviewExecutionGrid: z12.object({
11277
- selectionModeDisplayType: z12.enum(["operation-button", "dropdown-menu"]).optional(),
11278
- clickBehavior: z12.enum(["preview", "select", "fill-form", "none"]).optional(),
11279
- showErrorFilter: z12.boolean().optional(),
11280
- displayType: z12.enum(["grid", "masonry"]).optional(),
11281
- showDetailButton: z12.boolean().optional()
11644
+ paginationPosition: z13.enum(["left", "right"]).optional(),
11645
+ ugcViewIconOnlyMode: z13.boolean().optional(),
11646
+ workflowPreviewExecutionGrid: z13.object({
11647
+ selectionModeDisplayType: z13.enum(["operation-button", "dropdown-menu"]).optional(),
11648
+ clickBehavior: z13.enum(["preview", "select", "fill-form", "none"]).optional(),
11649
+ showErrorFilter: z13.boolean().optional(),
11650
+ displayType: z13.enum(["grid", "masonry"]).optional(),
11651
+ showDetailButton: z13.boolean().optional()
11282
11652
  }).strict().optional(),
11283
- workbenchSidebarDefaultOpen: z12.boolean().optional(),
11284
- workbenchSidebarMoreAction: z12.boolean().optional(),
11285
- workbenchSidebarApart: z12.boolean().optional(),
11286
- workbenchSidebarToggleGroupDetail: z12.boolean().optional(),
11287
- workbenchSidebarViewType: z12.boolean().optional(),
11288
- workbenchSidebarFormViewEmbed: z12.boolean().optional(),
11289
- workbenchSidebarModernMode: z12.boolean().optional(),
11290
- ugc: z12.object({ onItemClick: z12.boolean(), subtitle: z12.boolean().optional() }).strict().optional(),
11291
- uniImagePreview: z12.boolean().optional(),
11292
- imagePreviewStyle: z12.union([z12.literal(false), z12.enum(["simple", "normal", "uni"])]).optional(),
11293
- teamAsUser: z12.boolean().optional(),
11294
- themeMode: z12.enum(["shadow", "border"]).optional(),
11295
- density: z12.enum(["compact", "default", "comfortable"]).optional(),
11296
- pageZoom: z12.number().positive().optional(),
11297
- miniMode: z12.object({ showPreviewViewExecutionResultGrid: z12.boolean() }).strict().optional(),
11298
- workflow: z12.object({ allowConcurrentRuns: z12.boolean() }).strict().optional(),
11299
- historyResult: z12.object({ display: z12.boolean() }).strict().optional(),
11300
- uploader: z12.object({
11301
- orientation: z12.enum(["vertical", "horizontal"]),
11302
- pasteButton: z12.boolean(),
11303
- statusText: z12.boolean()
11653
+ workbenchSidebarDefaultOpen: z13.boolean().optional(),
11654
+ workbenchSidebarMoreAction: z13.boolean().optional(),
11655
+ workbenchSidebarApart: z13.boolean().optional(),
11656
+ workbenchSidebarToggleGroupDetail: z13.boolean().optional(),
11657
+ workbenchSidebarViewType: z13.boolean().optional(),
11658
+ workbenchSidebarFormViewEmbed: z13.boolean().optional(),
11659
+ workbenchSidebarModernMode: z13.boolean().optional(),
11660
+ ugc: z13.object({ onItemClick: z13.boolean(), subtitle: z13.boolean().optional() }).strict().optional(),
11661
+ uniImagePreview: z13.boolean().optional(),
11662
+ imagePreviewStyle: z13.union([z13.literal(false), z13.enum(["simple", "normal", "uni"])]).optional(),
11663
+ teamAsUser: z13.boolean().optional(),
11664
+ themeMode: z13.enum(["shadow", "border"]).optional(),
11665
+ density: z13.enum(["compact", "default", "comfortable"]).optional(),
11666
+ pageZoom: z13.number().positive().optional(),
11667
+ miniMode: z13.object({ showPreviewViewExecutionResultGrid: z13.boolean() }).strict().optional(),
11668
+ workflow: z13.object({ allowConcurrentRuns: z13.boolean() }).strict().optional(),
11669
+ historyResult: z13.object({ display: z13.boolean() }).strict().optional(),
11670
+ uploader: z13.object({
11671
+ orientation: z13.enum(["vertical", "horizontal"]),
11672
+ pasteButton: z13.boolean(),
11673
+ statusText: z13.boolean()
11304
11674
  }).strict().optional(),
11305
- designProjects: z12.object({
11306
- oneOnOne: z12.boolean(),
11307
- newTabOpenBoard: z12.boolean(),
11308
- defaultShowGrid: z12.boolean().optional(),
11309
- createDefaultFrame: z12.boolean(),
11310
- showPageMenu: z12.boolean(),
11311
- showMainMenu: z12.boolean(),
11312
- showStylePanel: z12.boolean(),
11313
- showToolbar: z12.boolean(),
11314
- toolbarPosition: z12.enum(["bottom", "left"]).optional(),
11315
- showContextMenu: z12.boolean(),
11316
- showActionsMenu: z12.boolean(),
11317
- showPageAndLayerSidebar: z12.boolean().optional(),
11318
- showBoardOperationSidebar: z12.boolean().optional(),
11319
- showMiniToolsToolbar: z12.boolean().optional(),
11320
- showRightSidebar: z12.boolean().optional(),
11321
- showRealtimeDrawing: z12.boolean().optional(),
11322
- showWorkflow: z12.boolean().optional(),
11323
- showVersionManager: z12.boolean().optional(),
11324
- showAgent: z12.boolean().optional(),
11325
- AgentTools: z12.array(ContractIdentifierSchema).optional()
11675
+ designProjects: z13.object({
11676
+ oneOnOne: z13.boolean(),
11677
+ newTabOpenBoard: z13.boolean(),
11678
+ defaultShowGrid: z13.boolean().optional(),
11679
+ createDefaultFrame: z13.boolean(),
11680
+ showPageMenu: z13.boolean(),
11681
+ showMainMenu: z13.boolean(),
11682
+ showStylePanel: z13.boolean(),
11683
+ showToolbar: z13.boolean(),
11684
+ toolbarPosition: z13.enum(["bottom", "left"]).optional(),
11685
+ showContextMenu: z13.boolean(),
11686
+ showActionsMenu: z13.boolean(),
11687
+ showPageAndLayerSidebar: z13.boolean().optional(),
11688
+ showBoardOperationSidebar: z13.boolean().optional(),
11689
+ showMiniToolsToolbar: z13.boolean().optional(),
11690
+ showRightSidebar: z13.boolean().optional(),
11691
+ showRealtimeDrawing: z13.boolean().optional(),
11692
+ showWorkflow: z13.boolean().optional(),
11693
+ showVersionManager: z13.boolean().optional(),
11694
+ showAgent: z13.boolean().optional(),
11695
+ AgentTools: z13.array(ContractIdentifierSchema).optional()
11326
11696
  }).strict().optional(),
11327
11697
  workbench: TenantWorkbenchConfigSchema.optional(),
11328
- visionProWorkflows: z12.array(ContractIdentifierSchema).optional(),
11329
- initTeam: z12.boolean().optional(),
11330
- imageThumbnail: z12.boolean().optional(),
11331
- pages: z12.object({
11332
- allowPageKeys: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]),
11698
+ visionProWorkflows: z13.array(ContractIdentifierSchema).optional(),
11699
+ initTeam: z13.boolean().optional(),
11700
+ imageThumbnail: z13.boolean().optional(),
11701
+ pages: z13.object({
11702
+ allowPageKeys: z13.union([z13.literal("*"), z13.array(ContractIdentifierSchema)]),
11333
11703
  defaultPageKey: ContractIdentifierSchema.optional()
11334
11704
  }).strict().optional(),
11335
- agent: z12.object({
11705
+ agent: z13.object({
11336
11706
  logo: AssetVariantsSchema.optional(),
11337
- brandDisplayMode: z12.enum(["auto", "logo-only", "logo-name", "name-only"]).optional(),
11338
- density: z12.enum(["compact", "default", "comfortable"]).optional()
11707
+ brandDisplayMode: z13.enum(["auto", "logo-only", "logo-name", "name-only"]).optional(),
11708
+ density: z13.enum(["compact", "default", "comfortable"]).optional()
11339
11709
  }).strict().optional()
11340
11710
  }).strict(),
11341
11711
  landingPage: TenantLandingPageConfigSchema.optional(),
11342
- auth: z12.object({
11343
- enabled: z12.array(ContractIdentifierSchema).default([]),
11344
- oidc: z12.object({ buttonText: z12.string().optional(), autoSignin: z12.boolean().optional() }).strict().optional(),
11345
- password: z12.object({ disableAutoRegister: z12.boolean().optional() }).strict().optional(),
11346
- hideAuthToast: z12.boolean().optional(),
11347
- autoReload: z12.boolean().optional(),
11348
- defaultOtherTeam: z12.boolean().optional()
11712
+ auth: z13.object({
11713
+ enabled: z13.array(ContractIdentifierSchema).default([]),
11714
+ oidc: z13.object({ buttonText: z13.string().optional(), autoSignin: z13.boolean().optional() }).strict().optional(),
11715
+ password: z13.object({ disableAutoRegister: z13.boolean().optional() }).strict().optional(),
11716
+ hideAuthToast: z13.boolean().optional(),
11717
+ autoReload: z13.boolean().optional(),
11718
+ defaultOtherTeam: z13.boolean().optional()
11349
11719
  }).strict(),
11350
- endpoints: z12.record(ContractIdentifierSchema, z12.string()),
11351
- module: z12.union([z12.literal("*"), z12.array(ContractIdentifierSchema)]),
11352
- behavior: z12.object({
11353
- clearWorkflowFormStorageAfterUpdate: z12.boolean().optional(),
11354
- autoApproveOAuth: z12.boolean().optional(),
11355
- rememberWorkflowModelSelection: z12.boolean().optional()
11720
+ endpoints: z13.record(ContractIdentifierSchema, z13.string()),
11721
+ module: z13.union([z13.literal("*"), z13.array(ContractIdentifierSchema)]),
11722
+ behavior: z13.object({
11723
+ clearWorkflowFormStorageAfterUpdate: z13.boolean().optional(),
11724
+ autoApproveOAuth: z13.boolean().optional(),
11725
+ rememberWorkflowModelSelection: z13.boolean().optional()
11356
11726
  }).strict(),
11357
- dataManagement: z12.object({
11358
- favoriteOntologyId: z12.string().optional(),
11359
- pairedOntologyId: z12.string().optional(),
11360
- galleryOntologyIds: z12.array(ContractIdentifierSchema).max(20).optional(),
11361
- galleryOntologyId: z12.string().optional(),
11362
- dataBrowserDefaultOntologyId: z12.string().optional(),
11363
- workflowResultOntologyId: z12.string().optional(),
11364
- homeAdvertisement: z12.object({
11727
+ dataManagement: z13.object({
11728
+ favoriteOntologyId: z13.string().optional(),
11729
+ pairedOntologyId: z13.string().optional(),
11730
+ galleryOntologyIds: z13.array(ContractIdentifierSchema).max(20).optional(),
11731
+ galleryOntologyId: z13.string().optional(),
11732
+ dataBrowserDefaultOntologyId: z13.string().optional(),
11733
+ workflowResultOntologyId: z13.string().optional(),
11734
+ homeAdvertisement: z13.object({
11365
11735
  ontologyId: ContractIdentifierSchema,
11366
11736
  viewId: ContractIdentifierSchema.optional(),
11367
- viewType: z12.enum(["filter", "container", "share_link"]).optional(),
11737
+ viewType: z13.enum(["filter", "container", "share_link"]).optional(),
11368
11738
  teamId: ContractIdentifierSchema.optional(),
11369
- teamOnly: z12.boolean().optional(),
11370
- pageSize: z12.number().int().positive().optional(),
11371
- sortBy: z12.enum(["pin_order", "asset_id", "updated_timestamp", "created_timestamp"]).optional(),
11372
- sortOrder: z12.enum(["asc", "desc"]).optional(),
11373
- fieldMap: z12.record(z12.string(), z12.string()).optional(),
11374
- columnIds: z12.record(z12.string(), z12.string()).optional()
11739
+ teamOnly: z13.boolean().optional(),
11740
+ pageSize: z13.number().int().positive().optional(),
11741
+ sortBy: z13.enum(["pin_order", "asset_id", "updated_timestamp", "created_timestamp"]).optional(),
11742
+ sortOrder: z13.enum(["asc", "desc"]).optional(),
11743
+ fieldMap: z13.record(z13.string(), z13.string()).optional(),
11744
+ columnIds: z13.record(z13.string(), z13.string()).optional()
11375
11745
  }).strict().optional(),
11376
- homeTrendAssistant: z12.object({
11746
+ homeTrendAssistant: z13.object({
11377
11747
  ontologyId: ContractIdentifierSchema.optional(),
11378
11748
  viewId: ContractIdentifierSchema.optional(),
11379
11749
  viewInstanceId: ContractIdentifierSchema.optional(),
11380
- viewName: z12.string().optional(),
11750
+ viewName: z13.string().optional(),
11381
11751
  teamId: ContractIdentifierSchema.optional(),
11382
11752
  designOptionsWorkflowId: ContractIdentifierSchema.optional(),
11383
- tep: z12.object({ baseUrl: z12.string().optional(), timeoutMs: z12.number().int().positive().optional() }).strict().optional(),
11384
- runtime: z12.object({ appId: ContractIdentifierSchema, tepBaseUrlConfigured: z12.boolean(), tepAuthorizationConfigured: z12.boolean(), tepCookieConfigured: z12.boolean() }).strict().optional()
11753
+ tep: z13.object({ baseUrl: z13.string().optional(), timeoutMs: z13.number().int().positive().optional() }).strict().optional(),
11754
+ runtime: z13.object({ appId: ContractIdentifierSchema, tepBaseUrlConfigured: z13.boolean(), tepAuthorizationConfigured: z13.boolean(), tepCookieConfigured: z13.boolean() }).strict().optional()
11385
11755
  }).strict().optional(),
11386
11756
  trendRadar: TenantTrendRadarSourcesSchema.optional(),
11387
- sharing: z12.object({
11388
- silentViewLinks: z12.object({ enabled: z12.boolean().optional(), placement: z12.object({ mode: z12.enum(["sourceOntology", "ontology"]).optional(), ontologyId: ContractIdentifierSchema.optional(), parentId: ContractIdentifierSchema.optional(), navId: ContractIdentifierSchema.optional() }).strict().optional() }).strict().optional(),
11389
- shareAccess: z12.object({ publicLinksEnabled: z12.boolean().optional(), passwordGateEnabled: z12.boolean().optional(), passwordAccessTtlSeconds: z12.number().int().positive().optional(), defaultViewTreeDelivery: z12.enum(["manual", "auto"]).optional() }).strict().optional(),
11390
- shareDialog: z12.object({
11391
- audience: z12.object({ enabled: z12.boolean().optional(), allowed: z12.array(z12.enum(["user", "team", "public"])).optional(), default: z12.enum(["user", "team", "public"]).optional() }).strict().optional(),
11392
- accessLevel: z12.object({ enabled: z12.boolean().optional(), allowed: z12.array(z12.enum(["read", "write"])).optional(), default: z12.enum(["read", "write"]).optional() }).strict().optional(),
11393
- viewTreeDelivery: z12.object({ enabled: z12.boolean().optional(), allowed: z12.array(z12.enum(["manual", "auto"])).optional(), default: z12.enum(["manual", "auto"]).optional() }).strict().optional()
11757
+ sharing: z13.object({
11758
+ silentViewLinks: z13.object({ enabled: z13.boolean().optional(), placement: z13.object({ mode: z13.enum(["sourceOntology", "ontology"]).optional(), ontologyId: ContractIdentifierSchema.optional(), parentId: ContractIdentifierSchema.optional(), navId: ContractIdentifierSchema.optional() }).strict().optional() }).strict().optional(),
11759
+ shareAccess: z13.object({ publicLinksEnabled: z13.boolean().optional(), passwordGateEnabled: z13.boolean().optional(), passwordAccessTtlSeconds: z13.number().int().positive().optional(), defaultViewTreeDelivery: z13.enum(["manual", "auto"]).optional() }).strict().optional(),
11760
+ shareDialog: z13.object({
11761
+ audience: z13.object({ enabled: z13.boolean().optional(), allowed: z13.array(z13.enum(["user", "team", "public"])).optional(), default: z13.enum(["user", "team", "public"]).optional() }).strict().optional(),
11762
+ accessLevel: z13.object({ enabled: z13.boolean().optional(), allowed: z13.array(z13.enum(["read", "write"])).optional(), default: z13.enum(["read", "write"]).optional() }).strict().optional(),
11763
+ viewTreeDelivery: z13.object({ enabled: z13.boolean().optional(), allowed: z13.array(z13.enum(["manual", "auto"])).optional(), default: z13.enum(["manual", "auto"]).optional() }).strict().optional()
11394
11764
  }).strict().optional()
11395
11765
  }).strict().optional()
11396
11766
  }).strict().optional(),
11397
- compute: z12.object({
11398
- integrations: z12.object({
11399
- harbor: z12.object({ endpoint: z12.string().optional(), projectScopes: z12.array(z12.string()).optional(), authMode: z12.string().optional(), principal: z12.string().optional(), autoSync: z12.boolean().optional(), proxyUrl: z12.string().optional() }).strict().optional(),
11400
- gitlab: z12.object({ baseUrl: z12.string().optional(), groupScopes: z12.array(z12.string()).optional(), tokenMode: z12.string().optional(), deployProjectPath: z12.string().optional(), deploymentReportsEnabled: z12.boolean().optional(), proxyUrl: z12.string().optional() }).strict().optional(),
11401
- kubernetes: z12.object({ accessMode: z12.string().optional(), clusterAlias: z12.string().optional(), agentProjectPath: z12.string().optional(), agentName: z12.string().optional(), namespaceScopes: z12.array(z12.string()).optional(), rolloutObserverEnabled: z12.boolean().optional(), proxyUrl: z12.string().optional() }).strict().optional()
11767
+ compute: z13.object({
11768
+ integrations: z13.object({
11769
+ harbor: z13.object({ endpoint: z13.string().optional(), projectScopes: z13.array(z13.string()).optional(), authMode: z13.string().optional(), principal: z13.string().optional(), autoSync: z13.boolean().optional(), proxyUrl: z13.string().optional() }).strict().optional(),
11770
+ gitlab: z13.object({ baseUrl: z13.string().optional(), groupScopes: z13.array(z13.string()).optional(), tokenMode: z13.string().optional(), deployProjectPath: z13.string().optional(), deploymentReportsEnabled: z13.boolean().optional(), proxyUrl: z13.string().optional() }).strict().optional(),
11771
+ kubernetes: z13.object({ accessMode: z13.string().optional(), clusterAlias: z13.string().optional(), agentProjectPath: z13.string().optional(), agentName: z13.string().optional(), namespaceScopes: z13.array(z13.string()).optional(), rolloutObserverEnabled: z13.boolean().optional(), proxyUrl: z13.string().optional() }).strict().optional()
11402
11772
  }).strict().optional()
11403
11773
  }).strict().optional(),
11404
- data: z12.object({}).strict().optional(),
11405
- storage: z12.object({
11406
- presignMode: z12.enum(["frontend", "backend", "both"]).optional(),
11407
- presign: z12.object({
11408
- expiresInSeconds: z12.number().int().positive(),
11409
- buckets: z12.array(
11410
- z12.object({
11774
+ data: z13.object({}).strict().optional(),
11775
+ storage: z13.object({
11776
+ presignMode: z13.enum(["frontend", "backend", "both"]).optional(),
11777
+ presign: z13.object({
11778
+ expiresInSeconds: z13.number().int().positive(),
11779
+ buckets: z13.array(
11780
+ z13.object({
11411
11781
  id: ContractIdentifierSchema,
11412
11782
  provider: ContractIdentifierSchema,
11413
11783
  preferredUrlPatternId: ContractIdentifierSchema,
11414
- urlPatterns: z12.array(
11415
- z12.object({
11784
+ urlPatterns: z13.array(
11785
+ z13.object({
11416
11786
  id: ContractIdentifierSchema,
11417
- type: z12.enum(["bucket-hostname", "provider-hostname"]),
11418
- hostname: z12.string().trim().min(1),
11419
- preferred: z12.boolean().optional(),
11420
- bucketSegment: z12.string().optional()
11787
+ type: z13.enum(["bucket-hostname", "provider-hostname"]),
11788
+ hostname: z13.string().trim().min(1),
11789
+ preferred: z13.boolean().optional(),
11790
+ bucketSegment: z13.string().optional()
11421
11791
  }).strict()
11422
11792
  )
11423
11793
  }).strict()
11424
11794
  )
11425
11795
  }).strict().optional()
11426
11796
  }).strict().optional(),
11427
- monkeyData: z12.object({ baseUrl: z12.string().optional() }).strict().optional()
11797
+ monkeyData: z13.object({ baseUrl: z13.string().optional() }).strict().optional()
11428
11798
  }).strict();
11429
- var TenantProductConfigSchema = z12.object({
11430
- contract: z12.literal("TenantProductConfig"),
11799
+ var TenantProductConfigSchema = z13.object({
11800
+ contract: z13.literal("TenantProductConfig"),
11431
11801
  tenantId: ContractIdentifierSchema,
11432
11802
  appId: ContractIdentifierSchema,
11433
11803
  environment: ContractIdentifierSchema,
11434
11804
  designTokens: TenantDesignTokensConfigSchema,
11435
- moduleRefs: z12.array(ContractIdentifierSchema).default([]),
11436
- pageRefs: z12.array(ContractIdentifierSchema).default([]),
11437
- featureFlags: z12.record(z12.string(), z12.boolean()).default({}),
11805
+ moduleRefs: z13.array(ContractIdentifierSchema).default([]),
11806
+ pageRefs: z13.array(ContractIdentifierSchema).default([]),
11807
+ featureFlags: z13.record(z13.string(), z13.boolean()).default({}),
11438
11808
  authBinding: TenantAuthBindingsSchema,
11439
11809
  dataBinding: TenantDataBindingsSchema,
11440
- sourceMap: z12.record(z12.string(), ContractIdentifierSchema),
11441
- warnings: z12.array(z12.string()).default([]),
11810
+ sourceMap: z13.record(z13.string(), ContractIdentifierSchema),
11811
+ warnings: z13.array(z13.string()).default([]),
11812
+ menus: MenuDefinitionSetSchema.optional(),
11442
11813
  applicationConfig: TenantApplicationConfigSchema
11443
11814
  }).strict();
11444
- var TenantRuntimeConfigSchema = z12.object({
11445
- contract: z12.literal("TenantRuntimeConfig"),
11815
+ var TenantRuntimeConfigSchema = z13.object({
11816
+ contract: z13.literal("TenantRuntimeConfig"),
11446
11817
  tenantId: ContractIdentifierSchema,
11447
11818
  appId: ContractIdentifierSchema,
11448
11819
  environment: ContractIdentifierSchema,
11449
11820
  designTokens: ResolvedThemeTokensSchema,
11450
- moduleRefs: z12.array(ContractIdentifierSchema).default([]),
11451
- pageRefs: z12.array(ContractIdentifierSchema).default([]),
11452
- featureFlags: z12.record(z12.string(), z12.boolean()).default({}),
11821
+ moduleRefs: z13.array(ContractIdentifierSchema).default([]),
11822
+ pageRefs: z13.array(ContractIdentifierSchema).default([]),
11823
+ featureFlags: z13.record(z13.string(), z13.boolean()).default({}),
11453
11824
  authBinding: TenantAuthBindingsSchema,
11454
11825
  dataBinding: TenantDataBindingsSchema,
11455
- sourceMap: z12.record(z12.string(), ContractIdentifierSchema),
11456
- warnings: z12.array(z12.string()).default([]),
11826
+ sourceMap: z13.record(z13.string(), ContractIdentifierSchema),
11827
+ warnings: z13.array(z13.string()).default([]),
11828
+ menuBundle: MenuRuntimeBundleSchema.optional(),
11457
11829
  applicationConfig: TenantApplicationConfigSchema
11458
11830
  }).strict();
11459
11831
 
11460
11832
  // src/contracts/trend.ts
11461
- import { z as z13 } from "zod";
11462
- var RadarDecisionMetricsSchema = z13.object({
11463
- currentSales: z13.number().finite(),
11464
- forecastSales: z13.number().finite(),
11465
- searchHeat: z13.number().finite(),
11466
- socialHeat: z13.number().finite(),
11467
- confidence: z13.number().min(0).max(1)
11468
- }).strict();
11469
- var TrendSourceSchema = z13.object({
11833
+ import { z as z14 } from "zod";
11834
+ var RadarDecisionMetricsSchema = z14.object({
11835
+ currentSales: z14.number().finite(),
11836
+ forecastSales: z14.number().finite(),
11837
+ searchHeat: z14.number().finite(),
11838
+ socialHeat: z14.number().finite(),
11839
+ confidence: z14.number().min(0).max(1)
11840
+ }).strict();
11841
+ var TrendSourceSchema = z14.object({
11470
11842
  sourceId: ContractIdentifierSchema,
11471
11843
  provider: ContractIdentifierSchema,
11472
- channel: z13.enum(["trend", "ecommerce", "social", "search", "internal"]),
11844
+ channel: z14.enum(["trend", "ecommerce", "social", "search", "internal"]),
11473
11845
  collectedAt: IsoDateTimeSchema,
11474
- sourceUrl: z13.string().url().optional(),
11475
- evidenceRefs: z13.array(EntityRefSchema).default([])
11846
+ sourceUrl: z14.string().url().optional(),
11847
+ evidenceRefs: z14.array(EntityRefSchema).default([])
11476
11848
  }).strict();
11477
- var TrendIngestRunSchema = z13.object({
11478
- contract: z13.literal("TrendIngestRun"),
11849
+ var TrendIngestRunSchema = z14.object({
11850
+ contract: z14.literal("TrendIngestRun"),
11479
11851
  ingestRunId: ContractIdentifierSchema,
11480
11852
  sourceId: ContractIdentifierSchema,
11481
11853
  requestId: ContractIdentifierSchema,
11482
11854
  idempotencyKey: ContractIdentifierSchema,
11483
- status: z13.enum(["RUNNING", "SUCCEEDED", "FAILED", "PARTIAL"]),
11484
- recordCount: z13.number().int().nonnegative(),
11485
- errorCount: z13.number().int().nonnegative(),
11855
+ status: z14.enum(["RUNNING", "SUCCEEDED", "FAILED", "PARTIAL"]),
11856
+ recordCount: z14.number().int().nonnegative(),
11857
+ errorCount: z14.number().int().nonnegative(),
11486
11858
  startedAt: IsoDateTimeSchema,
11487
11859
  completedAt: IsoDateTimeSchema.optional()
11488
11860
  }).strict();
11489
- var TrendSourceRecordSchema = z13.object({
11490
- contract: z13.literal("TrendSourceRecord"),
11861
+ var TrendSourceRecordSchema = z14.object({
11862
+ contract: z14.literal("TrendSourceRecord"),
11491
11863
  sourceRecordId: ContractIdentifierSchema,
11492
11864
  source: TrendSourceSchema,
11493
11865
  ingestRunRef: EntityRefSchema,
11494
- recordVersion: z13.number().int().positive(),
11866
+ recordVersion: z14.number().int().positive(),
11495
11867
  contentHash: Sha256Schema,
11496
11868
  payload: JsonValueSchema,
11497
11869
  idempotencyKey: ContractIdentifierSchema,
11498
11870
  collectedAt: IsoDateTimeSchema
11499
11871
  }).strict();
11500
- var HotwordBodySchema = z13.object({
11501
- contract: z13.literal("HotwordBody"),
11872
+ var HotwordBodySchema = z14.object({
11873
+ contract: z14.literal("HotwordBody"),
11502
11874
  hotwordId: ContractIdentifierSchema,
11503
- label: z13.string().trim().min(1),
11504
- normalizedLabel: z13.string().trim().min(1),
11505
- categories: z13.array(ContractIdentifierSchema).default([]),
11506
- sourceRefs: z13.array(TrendSourceSchema).min(1),
11507
- relationRefs: z13.array(EntityRefSchema).default([]),
11875
+ label: z14.string().trim().min(1),
11876
+ normalizedLabel: z14.string().trim().min(1),
11877
+ categories: z14.array(ContractIdentifierSchema).default([]),
11878
+ sourceRefs: z14.array(TrendSourceSchema).min(1),
11879
+ relationRefs: z14.array(EntityRefSchema).default([]),
11508
11880
  createdAt: IsoDateTimeSchema,
11509
11881
  updatedAt: IsoDateTimeSchema
11510
11882
  }).strict();
11511
11883
  var CommerceBodyFieldsSchema = {
11512
- displayName: z13.string().trim().min(1),
11513
- normalizedName: z13.string().trim().min(1),
11514
- categories: z13.array(ContractIdentifierSchema).default([]),
11515
- sourceRefs: z13.array(EntityRefSchema).min(1),
11516
- relationRefs: z13.array(EntityRefSchema).default([]),
11884
+ displayName: z14.string().trim().min(1),
11885
+ normalizedName: z14.string().trim().min(1),
11886
+ categories: z14.array(ContractIdentifierSchema).default([]),
11887
+ sourceRefs: z14.array(EntityRefSchema).min(1),
11888
+ relationRefs: z14.array(EntityRefSchema).default([]),
11517
11889
  createdAt: IsoDateTimeSchema,
11518
11890
  updatedAt: IsoDateTimeSchema
11519
11891
  };
11520
- var BrandBodySchema = z13.object({
11521
- contract: z13.literal("BrandBody"),
11892
+ var BrandBodySchema = z14.object({
11893
+ contract: z14.literal("BrandBody"),
11522
11894
  brandId: ContractIdentifierSchema,
11523
11895
  ...CommerceBodyFieldsSchema
11524
11896
  }).strict();
11525
- var ProductBodySchema = z13.object({
11526
- contract: z13.literal("ProductBody"),
11897
+ var ProductBodySchema = z14.object({
11898
+ contract: z14.literal("ProductBody"),
11527
11899
  productId: ContractIdentifierSchema,
11528
11900
  brandRef: EntityRefSchema.optional(),
11529
11901
  ...CommerceBodyFieldsSchema
11530
11902
  }).strict();
11531
- var TrendMetricSnapshotSchema = z13.object({
11532
- contract: z13.literal("TrendMetricSnapshot"),
11903
+ var TrendMetricSnapshotSchema = z14.object({
11904
+ contract: z14.literal("TrendMetricSnapshot"),
11533
11905
  snapshotId: ContractIdentifierSchema,
11534
11906
  subjectRef: EntityRefSchema,
11535
11907
  observedAt: IsoDateTimeSchema,
11536
- metrics: z13.record(z13.string(), z13.number().finite()),
11537
- confidence: z13.number().min(0).max(1),
11538
- evidenceRefs: z13.array(EntityRefSchema).min(1)
11908
+ metrics: z14.record(z14.string(), z14.number().finite()),
11909
+ confidence: z14.number().min(0).max(1),
11910
+ evidenceRefs: z14.array(EntityRefSchema).min(1)
11539
11911
  }).strict();
11540
- var RadarScoreModelBodySchema = z13.object({
11541
- contract: z13.literal("RadarScoreModelBody"),
11912
+ var RadarScoreModelBodySchema = z14.object({
11913
+ contract: z14.literal("RadarScoreModelBody"),
11542
11914
  modelId: ContractIdentifierSchema,
11543
- version: z13.number().int().positive(),
11915
+ version: z14.number().int().positive(),
11544
11916
  weights: RadarDecisionMetricsSchema,
11545
- thresholds: z13.record(z13.string(), z13.number().finite()).default({}),
11546
- explanationRules: z13.record(z13.string(), z13.string().trim().min(1)).default({}),
11917
+ thresholds: z14.record(z14.string(), z14.number().finite()).default({}),
11918
+ explanationRules: z14.record(z14.string(), z14.string().trim().min(1)).default({}),
11547
11919
  createdAt: IsoDateTimeSchema
11548
11920
  }).strict();
11549
- var RadarScoreProjectionSchema = z13.object({
11550
- contract: z13.literal("RadarScoreProjection"),
11921
+ var RadarScoreProjectionSchema = z14.object({
11922
+ contract: z14.literal("RadarScoreProjection"),
11551
11923
  projectionId: ContractIdentifierSchema,
11552
11924
  subjectRef: EntityRefSchema,
11553
11925
  modelRef: EntityRefSchema,
11554
- totalScore: z13.number().finite(),
11926
+ totalScore: z14.number().finite(),
11555
11927
  dimensions: RadarDecisionMetricsSchema,
11556
- evidenceRefs: z13.array(EntityRefSchema).min(1),
11928
+ evidenceRefs: z14.array(EntityRefSchema).min(1),
11557
11929
  freshnessAt: IsoDateTimeSchema
11558
11930
  }).strict();
11559
- var RadarPanoramaNodeSchema = z13.object({
11931
+ var RadarPanoramaNodeSchema = z14.object({
11560
11932
  ref: EntityRefSchema,
11561
- label: z13.string().trim().min(1),
11562
- categories: z13.array(ContractIdentifierSchema).default([]),
11563
- score: z13.number().finite().optional(),
11933
+ label: z14.string().trim().min(1),
11934
+ categories: z14.array(ContractIdentifierSchema).default([]),
11935
+ score: z14.number().finite().optional(),
11564
11936
  freshnessAt: IsoDateTimeSchema.optional()
11565
11937
  }).strict();
11566
- var RadarPanoramaEdgeSchema = z13.object({
11938
+ var RadarPanoramaEdgeSchema = z14.object({
11567
11939
  sourceRef: EntityRefSchema,
11568
11940
  targetRef: EntityRefSchema,
11569
11941
  relation: ContractIdentifierSchema,
11570
- evidenceRefs: z13.array(EntityRefSchema).default([])
11942
+ evidenceRefs: z14.array(EntityRefSchema).default([])
11571
11943
  }).strict();
11572
- var RadarPanoramaSchema = z13.object({
11573
- contract: z13.literal("RadarPanorama"),
11574
- nodes: z13.array(RadarPanoramaNodeSchema),
11575
- edges: z13.array(RadarPanoramaEdgeSchema),
11944
+ var RadarPanoramaSchema = z14.object({
11945
+ contract: z14.literal("RadarPanorama"),
11946
+ nodes: z14.array(RadarPanoramaNodeSchema),
11947
+ edges: z14.array(RadarPanoramaEdgeSchema),
11576
11948
  generatedAt: IsoDateTimeSchema
11577
11949
  }).strict();
11578
- var BrandGeneticsProfileSchema = z13.object({
11579
- contract: z13.literal("BrandGeneticsProfile"),
11950
+ var BrandGeneticsProfileSchema = z14.object({
11951
+ contract: z14.literal("BrandGeneticsProfile"),
11580
11952
  brandRef: EntityRefSchema,
11581
- categories: z13.array(ContractIdentifierSchema).default([]),
11582
- signature: z13.record(ContractIdentifierSchema, z13.number().finite()),
11583
- relatedRefs: z13.array(EntityRefSchema).default([]),
11584
- evidenceRefs: z13.array(EntityRefSchema).default([]),
11953
+ categories: z14.array(ContractIdentifierSchema).default([]),
11954
+ signature: z14.record(ContractIdentifierSchema, z14.number().finite()),
11955
+ relatedRefs: z14.array(EntityRefSchema).default([]),
11956
+ evidenceRefs: z14.array(EntityRefSchema).default([]),
11585
11957
  computedAt: IsoDateTimeSchema
11586
11958
  }).strict();
11587
- var RadarOpportunityMatrixPointSchema = z13.object({
11959
+ var RadarOpportunityMatrixPointSchema = z14.object({
11588
11960
  subjectRef: EntityRefSchema,
11589
- label: z13.string().trim().min(1),
11590
- x: z13.number().finite(),
11591
- y: z13.number().finite(),
11592
- score: z13.number().finite(),
11593
- evidenceRefs: z13.array(EntityRefSchema).default([])
11594
- }).strict();
11595
- var RadarOpportunityMatrixSchema = z13.object({
11596
- contract: z13.literal("RadarOpportunityMatrix"),
11597
- xMetric: z13.enum(["currentSales", "forecastSales", "searchHeat", "socialHeat", "confidence"]),
11598
- yMetric: z13.enum(["currentSales", "forecastSales", "searchHeat", "socialHeat", "confidence"]),
11599
- points: z13.array(RadarOpportunityMatrixPointSchema),
11961
+ label: z14.string().trim().min(1),
11962
+ x: z14.number().finite(),
11963
+ y: z14.number().finite(),
11964
+ score: z14.number().finite(),
11965
+ evidenceRefs: z14.array(EntityRefSchema).default([])
11966
+ }).strict();
11967
+ var RadarOpportunityMatrixSchema = z14.object({
11968
+ contract: z14.literal("RadarOpportunityMatrix"),
11969
+ xMetric: z14.enum(["currentSales", "forecastSales", "searchHeat", "socialHeat", "confidence"]),
11970
+ yMetric: z14.enum(["currentSales", "forecastSales", "searchHeat", "socialHeat", "confidence"]),
11971
+ points: z14.array(RadarOpportunityMatrixPointSchema),
11600
11972
  computedAt: IsoDateTimeSchema
11601
11973
  }).strict();
11602
- var RadarQueryBodySchema = z13.object({
11603
- contract: z13.literal("RadarQueryBody"),
11974
+ var RadarQueryBodySchema = z14.object({
11975
+ contract: z14.literal("RadarQueryBody"),
11604
11976
  queryId: ContractIdentifierSchema,
11605
- filters: z13.record(z13.string(), JsonValueSchema).default({}),
11606
- sort: z13.object({
11977
+ filters: z14.record(z14.string(), JsonValueSchema).default({}),
11978
+ sort: z14.object({
11607
11979
  field: ContractIdentifierSchema,
11608
- direction: z13.enum(["asc", "desc"])
11980
+ direction: z14.enum(["asc", "desc"])
11609
11981
  }).strict(),
11610
- pageSize: z13.number().int().min(1).max(200),
11982
+ pageSize: z14.number().int().min(1).max(200),
11611
11983
  updatedAt: IsoDateTimeSchema
11612
11984
  }).strict();
11613
- var SavedRadarQuerySchema = z13.object({
11614
- contract: z13.literal("SavedRadarQuery"),
11985
+ var SavedRadarQuerySchema = z14.object({
11986
+ contract: z14.literal("SavedRadarQuery"),
11615
11987
  savedQueryId: ContractIdentifierSchema,
11616
11988
  teamId: ContractIdentifierSchema,
11617
11989
  ownerRef: EntityRefSchema,
11618
- name: z13.string().trim().min(1),
11990
+ name: z14.string().trim().min(1),
11619
11991
  queryRef: EntityRefSchema,
11620
- expectedVersion: z13.number().int().nonnegative(),
11992
+ expectedVersion: z14.number().int().nonnegative(),
11621
11993
  updatedAt: IsoDateTimeSchema
11622
11994
  }).strict();
11623
- var RadarSelectionSchema = z13.object({
11624
- contract: z13.literal("RadarSelection"),
11995
+ var RadarSelectionSchema = z14.object({
11996
+ contract: z14.literal("RadarSelection"),
11625
11997
  selectionId: ContractIdentifierSchema,
11626
11998
  teamId: ContractIdentifierSchema,
11627
11999
  ownerRef: EntityRefSchema,
11628
- subjectRefs: z13.array(EntityRefSchema),
11629
- status: z13.enum(["stashed", "selected", "rejected", "archived"]),
11630
- note: z13.string().optional(),
11631
- expectedVersion: z13.number().int().nonnegative(),
12000
+ subjectRefs: z14.array(EntityRefSchema),
12001
+ status: z14.enum(["stashed", "selected", "rejected", "archived"]),
12002
+ note: z14.string().optional(),
12003
+ expectedVersion: z14.number().int().nonnegative(),
11632
12004
  updatedAt: IsoDateTimeSchema
11633
12005
  }).strict();
11634
- var RadarAnalysisRunSchema = z13.object({
11635
- contract: z13.literal("RadarAnalysisRun"),
12006
+ var RadarAnalysisRunSchema = z14.object({
12007
+ contract: z14.literal("RadarAnalysisRun"),
11636
12008
  runId: ContractIdentifierSchema,
11637
12009
  teamId: ContractIdentifierSchema,
11638
12010
  selectionRef: EntityRefSchema,
@@ -11641,66 +12013,66 @@ var RadarAnalysisRunSchema = z13.object({
11641
12013
  designProjectRef: EntityRefSchema.optional(),
11642
12014
  replayedFromRef: EntityRefSchema.optional(),
11643
12015
  workflowDefinitionTeamId: ContractIdentifierSchema.optional(),
11644
- workflowInput: z13.record(z13.string(), JsonValueSchema).default({}),
11645
- createDesignProject: z13.boolean().default(true),
11646
- designProjectName: z13.string().trim().min(1).max(200).optional(),
12016
+ workflowInput: z14.record(z14.string(), JsonValueSchema).default({}),
12017
+ createDesignProject: z14.boolean().default(true),
12018
+ designProjectName: z14.string().trim().min(1).max(200).optional(),
11647
12019
  modelRef: EntityRefSchema,
11648
12020
  requestId: ContractIdentifierSchema,
11649
12021
  idempotencyKey: ContractIdentifierSchema,
11650
- status: z13.enum(["QUEUED", "RUNNING", "SUCCEEDED", "FAILED", "CANCELLED", "PARTIAL"]),
11651
- outputRefs: z13.array(EntityRefSchema).default([]),
11652
- error: z13.object({
12022
+ status: z14.enum(["QUEUED", "RUNNING", "SUCCEEDED", "FAILED", "CANCELLED", "PARTIAL"]),
12023
+ outputRefs: z14.array(EntityRefSchema).default([]),
12024
+ error: z14.object({
11653
12025
  code: ContractIdentifierSchema,
11654
- message: z13.string().trim().min(1),
11655
- retryable: z13.boolean()
12026
+ message: z14.string().trim().min(1),
12027
+ retryable: z14.boolean()
11656
12028
  }).strict().optional(),
11657
12029
  startedAt: IsoDateTimeSchema.optional(),
11658
12030
  completedAt: IsoDateTimeSchema.optional(),
11659
12031
  createdAt: IsoDateTimeSchema
11660
12032
  }).strict();
11661
- var RadarAnalysisAssetSchema = z13.object({
12033
+ var RadarAnalysisAssetSchema = z14.object({
11662
12034
  artifactRef: EntityRefSchema,
11663
12035
  kind: ContractIdentifierSchema,
11664
- mimeType: z13.string().trim().min(1).optional(),
11665
- url: z13.string().url(),
11666
- metadata: z13.record(z13.string(), JsonValueSchema).default({}),
12036
+ mimeType: z14.string().trim().min(1).optional(),
12037
+ url: z14.string().url(),
12038
+ metadata: z14.record(z14.string(), JsonValueSchema).default({}),
11667
12039
  createdAt: IsoDateTimeSchema
11668
12040
  }).strict();
11669
- var RadarAnalysisDetailSchema = z13.object({
11670
- contract: z13.literal("RadarAnalysisDetail"),
12041
+ var RadarAnalysisDetailSchema = z14.object({
12042
+ contract: z14.literal("RadarAnalysisDetail"),
11671
12043
  run: RadarAnalysisRunSchema,
11672
- runVersion: z13.number().int().positive(),
12044
+ runVersion: z14.number().int().positive(),
11673
12045
  selection: RadarSelectionSchema,
11674
- outputs: z13.array(OutputRecordSchema),
11675
- assets: z13.array(RadarAnalysisAssetSchema),
11676
- lineage: z13.array(LineageRecordSchema)
12046
+ outputs: z14.array(OutputRecordSchema),
12047
+ assets: z14.array(RadarAnalysisAssetSchema),
12048
+ lineage: z14.array(LineageRecordSchema)
11677
12049
  }).strict();
11678
- var RadarActionRecordSchema = z13.object({
11679
- contract: z13.literal("RadarActionRecord"),
12050
+ var RadarActionRecordSchema = z14.object({
12051
+ contract: z14.literal("RadarActionRecord"),
11680
12052
  actionId: ContractIdentifierSchema,
11681
12053
  teamId: ContractIdentifierSchema,
11682
12054
  actorRef: EntityRefSchema,
11683
- action: z13.enum(["stash", "select", "reject", "archive", "launch", "retry", "replay", "rollback"]),
12055
+ action: z14.enum(["stash", "select", "reject", "archive", "launch", "retry", "replay", "rollback"]),
11684
12056
  targetRef: EntityRefSchema,
11685
12057
  requestId: ContractIdentifierSchema,
11686
12058
  idempotencyKey: ContractIdentifierSchema,
11687
- expectedVersion: z13.number().int().nonnegative(),
12059
+ expectedVersion: z14.number().int().nonnegative(),
11688
12060
  occurredAt: IsoDateTimeSchema
11689
12061
  }).strict();
11690
- var RadarWritebackRecordSchema = z13.object({
11691
- contract: z13.literal("RadarWritebackRecord"),
12062
+ var RadarWritebackRecordSchema = z14.object({
12063
+ contract: z14.literal("RadarWritebackRecord"),
11692
12064
  writebackId: ContractIdentifierSchema,
11693
12065
  actionRef: EntityRefSchema,
11694
12066
  targetRef: EntityRefSchema,
11695
- status: z13.enum(["PENDING", "APPLIED", "FAILED"]),
11696
- resultingVersion: z13.number().int().nonnegative().optional(),
11697
- error: z13.string().trim().min(1).optional(),
12067
+ status: z14.enum(["PENDING", "APPLIED", "FAILED"]),
12068
+ resultingVersion: z14.number().int().nonnegative().optional(),
12069
+ error: z14.string().trim().min(1).optional(),
11698
12070
  recordedAt: IsoDateTimeSchema
11699
12071
  }).strict();
11700
12072
 
11701
12073
  // src/contracts/workflow-definition.ts
11702
- import { z as z14 } from "zod";
11703
- var ConductorTaskTypeSchema = z14.enum([
12074
+ import { z as z15 } from "zod";
12075
+ var ConductorTaskTypeSchema = z15.enum([
11704
12076
  "SIMPLE",
11705
12077
  "DYNAMIC",
11706
12078
  "FORK_JOIN",
@@ -11749,46 +12121,46 @@ var requiredTaskFields = {
11749
12121
  WAIT: ["inputParameters"],
11750
12122
  TERMINATE: ["inputParameters"]
11751
12123
  };
11752
- var ConductorTaskDefinitionSchema = z14.lazy(
11753
- () => z14.object({
12124
+ var ConductorTaskDefinitionSchema = z15.lazy(
12125
+ () => z15.object({
11754
12126
  name: ContractIdentifierSchema,
11755
12127
  taskReferenceName: ContractIdentifierSchema,
11756
12128
  type: ConductorTaskTypeSchema,
11757
- inputParameters: z14.record(z14.string(), JsonValueSchema).optional(),
11758
- startDelay: z14.number().int().nonnegative().optional(),
11759
- optional: z14.boolean().optional(),
11760
- asyncComplete: z14.boolean().optional(),
11761
- rateLimited: z14.boolean().optional(),
11762
- retryCount: z14.number().int().nonnegative().optional(),
11763
- taskDefinition: z14.record(z14.string(), JsonValueSchema).optional(),
11764
- loopCondition: z14.string().optional(),
11765
- loopOver: z14.array(ConductorTaskDefinitionSchema).optional(),
11766
- sink: z14.string().optional(),
11767
- forkTasks: z14.array(z14.array(ConductorTaskDefinitionSchema)).optional(),
11768
- joinOn: z14.array(ContractIdentifierSchema).optional(),
11769
- defaultExclusiveJoinTask: z14.array(ContractIdentifierSchema).optional(),
11770
- dynamicForkTasksParam: z14.string().optional(),
11771
- dynamicForkTasksInputParamName: z14.string().optional(),
11772
- subWorkflowParam: z14.object({
11773
- $ref: z14.string().optional(),
12129
+ inputParameters: z15.record(z15.string(), JsonValueSchema).optional(),
12130
+ startDelay: z15.number().int().nonnegative().optional(),
12131
+ optional: z15.boolean().optional(),
12132
+ asyncComplete: z15.boolean().optional(),
12133
+ rateLimited: z15.boolean().optional(),
12134
+ retryCount: z15.number().int().nonnegative().optional(),
12135
+ taskDefinition: z15.record(z15.string(), JsonValueSchema).optional(),
12136
+ loopCondition: z15.string().optional(),
12137
+ loopOver: z15.array(ConductorTaskDefinitionSchema).optional(),
12138
+ sink: z15.string().optional(),
12139
+ forkTasks: z15.array(z15.array(ConductorTaskDefinitionSchema)).optional(),
12140
+ joinOn: z15.array(ContractIdentifierSchema).optional(),
12141
+ defaultExclusiveJoinTask: z15.array(ContractIdentifierSchema).optional(),
12142
+ dynamicForkTasksParam: z15.string().optional(),
12143
+ dynamicForkTasksInputParamName: z15.string().optional(),
12144
+ subWorkflowParam: z15.object({
12145
+ $ref: z15.string().optional(),
11774
12146
  name: ContractIdentifierSchema,
11775
- version: z14.number().int().positive().optional(),
11776
- taskToDomain: z14.record(z14.string(), z14.string()).optional(),
11777
- workflowDefinition: z14.record(z14.string(), JsonValueSchema).optional()
12147
+ version: z15.number().int().positive().optional(),
12148
+ taskToDomain: z15.record(z15.string(), z15.string()).optional(),
12149
+ workflowDefinition: z15.record(z15.string(), JsonValueSchema).optional()
11778
12150
  }).strict().optional(),
11779
- decisionCases: z14.record(z14.string(), z14.array(ConductorTaskDefinitionSchema)).optional(),
11780
- defaultCase: z14.array(ConductorTaskDefinitionSchema).optional(),
11781
- evaluatorType: z14.enum(["value-param", "javascript", "graaljs"]).optional(),
11782
- expression: z14.string().optional(),
12151
+ decisionCases: z15.record(z15.string(), z15.array(ConductorTaskDefinitionSchema)).optional(),
12152
+ defaultCase: z15.array(ConductorTaskDefinitionSchema).optional(),
12153
+ evaluatorType: z15.enum(["value-param", "javascript", "graaljs"]).optional(),
12154
+ expression: z15.string().optional(),
11783
12155
  __alias: JsonValueSchema.optional(),
11784
- callbackFromWorker: z14.boolean().optional(),
12156
+ callbackFromWorker: z15.boolean().optional(),
11785
12157
  caseExpression: JsonValueSchema.optional(),
11786
- caseValueParam: z14.string().optional(),
11787
- dependencies: z14.array(JsonValueSchema).optional(),
11788
- description: z14.string().optional(),
11789
- dynamicTaskNameParam: z14.string().optional(),
11790
- joinMode: z14.string().optional(),
11791
- permissive: z14.boolean().optional(),
12158
+ caseValueParam: z15.string().optional(),
12159
+ dependencies: z15.array(JsonValueSchema).optional(),
12160
+ description: z15.string().optional(),
12161
+ dynamicTaskNameParam: z15.string().optional(),
12162
+ joinMode: z15.string().optional(),
12163
+ permissive: z15.boolean().optional(),
11792
12164
  joinTaskRef: ContractIdentifierSchema.optional(),
11793
12165
  forkTaskRef: ContractIdentifierSchema.optional()
11794
12166
  }).strict().superRefine((task, context) => {
@@ -11802,29 +12174,29 @@ var ConductorTaskDefinitionSchema = z14.lazy(
11802
12174
  }
11803
12175
  })
11804
12176
  );
11805
- var ConductorWorkflowDefinitionSchema = z14.object({
11806
- ownerApp: z14.string().optional(),
11807
- createTime: z14.number().int().nonnegative().optional(),
11808
- updateTime: z14.number().int().nonnegative().optional(),
11809
- createdBy: z14.string().optional(),
11810
- updatedBy: z14.string().optional(),
12177
+ var ConductorWorkflowDefinitionSchema = z15.object({
12178
+ ownerApp: z15.string().optional(),
12179
+ createTime: z15.number().int().nonnegative().optional(),
12180
+ updateTime: z15.number().int().nonnegative().optional(),
12181
+ createdBy: z15.string().optional(),
12182
+ updatedBy: z15.string().optional(),
11811
12183
  name: ContractIdentifierSchema,
11812
- description: z14.string().optional(),
11813
- version: z14.number().int().positive(),
11814
- tasks: z14.array(ConductorTaskDefinitionSchema),
11815
- inputParameters: z14.array(ContractIdentifierSchema),
11816
- outputParameters: z14.record(z14.string(), JsonValueSchema).optional(),
12184
+ description: z15.string().optional(),
12185
+ version: z15.number().int().positive(),
12186
+ tasks: z15.array(ConductorTaskDefinitionSchema),
12187
+ inputParameters: z15.array(ContractIdentifierSchema),
12188
+ outputParameters: z15.record(z15.string(), JsonValueSchema).optional(),
11817
12189
  failureWorkflow: ContractIdentifierSchema.optional(),
11818
- schemaVersion: z14.number().int().positive().optional(),
11819
- restartable: z14.boolean().optional(),
11820
- workflowStatusListenerEnabled: z14.boolean().optional(),
11821
- ownerEmail: z14.string().email().optional(),
11822
- timeoutPolicy: z14.enum(["TIME_OUT_WF", "ALERT_ONLY"]).optional(),
11823
- timeoutSeconds: z14.number().int().nonnegative(),
11824
- variables: z14.record(z14.string(), JsonValueSchema).optional(),
11825
- inputTemplate: z14.record(z14.string(), JsonValueSchema).optional()
11826
- }).strict();
11827
- var WorkflowParameterTypeSchema = z14.enum([
12190
+ schemaVersion: z15.number().int().positive().optional(),
12191
+ restartable: z15.boolean().optional(),
12192
+ workflowStatusListenerEnabled: z15.boolean().optional(),
12193
+ ownerEmail: z15.string().email().optional(),
12194
+ timeoutPolicy: z15.enum(["TIME_OUT_WF", "ALERT_ONLY"]).optional(),
12195
+ timeoutSeconds: z15.number().int().nonnegative(),
12196
+ variables: z15.record(z15.string(), JsonValueSchema).optional(),
12197
+ inputTemplate: z15.record(z15.string(), JsonValueSchema).optional()
12198
+ }).strict();
12199
+ var WorkflowParameterTypeSchema = z15.enum([
11828
12200
  "string",
11829
12201
  "file",
11830
12202
  "number",
@@ -11834,213 +12206,213 @@ var WorkflowParameterTypeSchema = z14.enum([
11834
12206
  "notice",
11835
12207
  "canvas-assist"
11836
12208
  ]);
11837
- var WorkflowConditionalStateSchema = z14.object({
11838
- conditions: z14.array(
11839
- z14.object({
11840
- field: z14.string(),
11841
- operator: z14.enum(["is", "isNot", "isGreaterThan", "isLessThan", "isGreaterThanOrEqual", "isLessThanOrEqual", "in", "notIn"]),
12209
+ var WorkflowConditionalStateSchema = z15.object({
12210
+ conditions: z15.array(
12211
+ z15.object({
12212
+ field: z15.string(),
12213
+ operator: z15.enum(["is", "isNot", "isGreaterThan", "isLessThan", "isGreaterThanOrEqual", "isLessThanOrEqual", "in", "notIn"]),
11842
12214
  value: JsonValueSchema
11843
12215
  }).strict()
11844
12216
  ),
11845
- logic: z14.enum(["AND", "OR"]).optional()
11846
- }).strict();
11847
- var ImageSelectMappingAppearanceSchema = z14.object({
11848
- columns: z14.number().int().min(1).max(4).optional(),
11849
- cardSize: z14.enum(["sm", "md", "lg"]).optional(),
11850
- imageAspectRatio: z14.enum(["square", "4:5", "3:4", "16:9"]).optional(),
11851
- gap: z14.enum(["sm", "md", "lg"]).optional(),
11852
- radius: z14.enum(["sm", "md", "lg", "xl"]).optional(),
11853
- borderStyle: z14.enum(["none", "soft", "strong"]).optional(),
11854
- borderWidth: z14.union([z14.literal(0), z14.literal(1), z14.literal(2)]).optional(),
11855
- enableScroll: z14.boolean().optional(),
11856
- maxHeight: z14.number().int().min(160).max(1200).optional(),
11857
- enableCollapse: z14.boolean().optional(),
11858
- visibleRows: z14.number().int().min(1).max(6).optional(),
11859
- hideLabel: z14.boolean().optional(),
11860
- hideDescription: z14.boolean().optional(),
11861
- hideValue: z14.boolean().optional()
11862
- }).strict();
11863
- var ComfyWorkflowPortBindingSchema = z14.object({
11864
- node: z14.union([z14.string(), z14.number()]),
11865
- key: z14.string().optional()
11866
- }).strict();
11867
- var WorkflowParameterTypeOptionsSchema = z14.object({
11868
- editor: z14.enum(["code", "codeNodeEditor", "htmlEditor", "sqlEditor", "json"]).optional(),
11869
- editorLanguage: z14.enum(["javaScript", "json", "python", "sql"]).optional(),
11870
- maxValue: z14.number().optional(),
11871
- minValue: z14.number().optional(),
11872
- max: z14.number().optional(),
11873
- min: z14.number().optional(),
11874
- multipleValues: z14.boolean().optional(),
11875
- numberPrecision: z14.number().nonnegative().optional(),
11876
- password: z14.boolean().optional(),
11877
- rows: z14.number().int().positive().optional(),
11878
- assetType: z14.string().optional(),
11879
- accept: z14.string().optional(),
11880
- maxSize: z14.number().positive().optional(),
11881
- fileType: z14.string().optional(),
11882
- aiMultiShotMainImageField: z14.string().optional(),
11883
- aiMultiShotWorkflowAppId: z14.string().optional(),
11884
- aiMultiShotWorkflowId: z14.string().optional(),
11885
- allowCustomInput: z14.boolean().optional(),
11886
- allowUploadVideo: z14.boolean().optional(),
11887
- aspectRatioField: z14.string().optional(),
11888
- assemblyValueType: z14.string().optional(),
11889
- autoAnalyzeDesignImage: z14.boolean().optional(),
11890
- autoDetectAspectRatio: z14.boolean().optional(),
11891
- autoIncrementId: z14.boolean().optional(),
12217
+ logic: z15.enum(["AND", "OR"]).optional()
12218
+ }).strict();
12219
+ var ImageSelectMappingAppearanceSchema = z15.object({
12220
+ columns: z15.number().int().min(1).max(4).optional(),
12221
+ cardSize: z15.enum(["sm", "md", "lg"]).optional(),
12222
+ imageAspectRatio: z15.enum(["square", "4:5", "3:4", "16:9"]).optional(),
12223
+ gap: z15.enum(["sm", "md", "lg"]).optional(),
12224
+ radius: z15.enum(["sm", "md", "lg", "xl"]).optional(),
12225
+ borderStyle: z15.enum(["none", "soft", "strong"]).optional(),
12226
+ borderWidth: z15.union([z15.literal(0), z15.literal(1), z15.literal(2)]).optional(),
12227
+ enableScroll: z15.boolean().optional(),
12228
+ maxHeight: z15.number().int().min(160).max(1200).optional(),
12229
+ enableCollapse: z15.boolean().optional(),
12230
+ visibleRows: z15.number().int().min(1).max(6).optional(),
12231
+ hideLabel: z15.boolean().optional(),
12232
+ hideDescription: z15.boolean().optional(),
12233
+ hideValue: z15.boolean().optional()
12234
+ }).strict();
12235
+ var ComfyWorkflowPortBindingSchema = z15.object({
12236
+ node: z15.union([z15.string(), z15.number()]),
12237
+ key: z15.string().optional()
12238
+ }).strict();
12239
+ var WorkflowParameterTypeOptionsSchema = z15.object({
12240
+ editor: z15.enum(["code", "codeNodeEditor", "htmlEditor", "sqlEditor", "json"]).optional(),
12241
+ editorLanguage: z15.enum(["javaScript", "json", "python", "sql"]).optional(),
12242
+ maxValue: z15.number().optional(),
12243
+ minValue: z15.number().optional(),
12244
+ max: z15.number().optional(),
12245
+ min: z15.number().optional(),
12246
+ multipleValues: z15.boolean().optional(),
12247
+ numberPrecision: z15.number().nonnegative().optional(),
12248
+ password: z15.boolean().optional(),
12249
+ rows: z15.number().int().positive().optional(),
12250
+ assetType: z15.string().optional(),
12251
+ accept: z15.string().optional(),
12252
+ maxSize: z15.number().positive().optional(),
12253
+ fileType: z15.string().optional(),
12254
+ aiMultiShotMainImageField: z15.string().optional(),
12255
+ aiMultiShotWorkflowAppId: z15.string().optional(),
12256
+ aiMultiShotWorkflowId: z15.string().optional(),
12257
+ allowCustomInput: z15.boolean().optional(),
12258
+ allowUploadVideo: z15.boolean().optional(),
12259
+ aspectRatioField: z15.string().optional(),
12260
+ assemblyValueType: z15.string().optional(),
12261
+ autoAnalyzeDesignImage: z15.boolean().optional(),
12262
+ autoDetectAspectRatio: z15.boolean().optional(),
12263
+ autoIncrementId: z15.boolean().optional(),
11892
12264
  comfyOptions: ComfyWorkflowPortBindingSchema.optional(),
11893
- comfyuiModelServerId: z14.string().optional(),
11894
- comfyuiModelTypeName: z14.string().optional(),
12265
+ comfyuiModelServerId: z15.string().optional(),
12266
+ comfyuiModelTypeName: z15.string().optional(),
11895
12267
  defaultCustomInput: JsonValueSchema.optional(),
11896
- descriptionAlert: z14.boolean().optional(),
11897
- disabled: z14.union([z14.boolean(), WorkflowConditionalStateSchema]).optional(),
11898
- editable: z14.union([z14.boolean(), WorkflowConditionalStateSchema]).optional(),
11899
- enableAiMultiShot: z14.boolean().optional(),
11900
- enableBooleanSwitchMode: z14.boolean().optional(),
11901
- enableClear: z14.boolean().optional(),
11902
- enableExpand: z14.boolean().optional(),
11903
- enableImageMask: z14.boolean().optional(),
11904
- enableImageOverlay: z14.boolean().optional(),
11905
- enablePopupEditor: z14.boolean().optional(),
11906
- enablePromptFontSize: z14.boolean().optional(),
11907
- enableReset: z14.boolean().optional(),
11908
- enableSelectItemIcon: z14.boolean().optional(),
11909
- enableSelectList: z14.boolean().optional(),
11910
- enableSelectSearch: z14.boolean().optional(),
11911
- enableSliderEnterMode: z14.boolean().optional(),
11912
- enableVoice: z14.boolean().optional(),
11913
- expandButtonText: z14.string().optional(),
11914
- foldUp: z14.boolean().optional(),
11915
- hidden: z14.boolean().optional(),
11916
- hideRequiredDot: z14.boolean().optional(),
11917
- inlineTitleWithSelect: z14.boolean().optional(),
11918
- knowledgeGraphButtonText: z14.string().optional(),
11919
- identifyAttributeCount: z14.union([z14.number().nonnegative(), z14.string().min(1), z14.object({ min: z14.number().nonnegative().optional(), max: z14.number().nonnegative().optional() }).strict()]).optional(),
11920
- identifyAttributes: z14.array(JsonValueSchema).optional(),
11921
- identifyMaxVariants: z14.number().int().nonnegative().optional(),
11922
- identifySourceField: z14.string().optional(),
11923
- imageOverlayBaseField: z14.string().optional(),
11924
- imageOverlayOverlayField: z14.string().optional(),
12268
+ descriptionAlert: z15.boolean().optional(),
12269
+ disabled: z15.union([z15.boolean(), WorkflowConditionalStateSchema]).optional(),
12270
+ editable: z15.union([z15.boolean(), WorkflowConditionalStateSchema]).optional(),
12271
+ enableAiMultiShot: z15.boolean().optional(),
12272
+ enableBooleanSwitchMode: z15.boolean().optional(),
12273
+ enableClear: z15.boolean().optional(),
12274
+ enableExpand: z15.boolean().optional(),
12275
+ enableImageMask: z15.boolean().optional(),
12276
+ enableImageOverlay: z15.boolean().optional(),
12277
+ enablePopupEditor: z15.boolean().optional(),
12278
+ enablePromptFontSize: z15.boolean().optional(),
12279
+ enableReset: z15.boolean().optional(),
12280
+ enableSelectItemIcon: z15.boolean().optional(),
12281
+ enableSelectList: z15.boolean().optional(),
12282
+ enableSelectSearch: z15.boolean().optional(),
12283
+ enableSliderEnterMode: z15.boolean().optional(),
12284
+ enableVoice: z15.boolean().optional(),
12285
+ expandButtonText: z15.string().optional(),
12286
+ foldUp: z15.boolean().optional(),
12287
+ hidden: z15.boolean().optional(),
12288
+ hideRequiredDot: z15.boolean().optional(),
12289
+ inlineTitleWithSelect: z15.boolean().optional(),
12290
+ knowledgeGraphButtonText: z15.string().optional(),
12291
+ identifyAttributeCount: z15.union([z15.number().nonnegative(), z15.string().min(1), z15.object({ min: z15.number().nonnegative().optional(), max: z15.number().nonnegative().optional() }).strict()]).optional(),
12292
+ identifyAttributes: z15.array(JsonValueSchema).optional(),
12293
+ identifyMaxVariants: z15.number().int().nonnegative().optional(),
12294
+ identifySourceField: z15.string().optional(),
12295
+ imageOverlayBaseField: z15.string().optional(),
12296
+ imageOverlayOverlayField: z15.string().optional(),
11925
12297
  imageSelectMappingAppearance: ImageSelectMappingAppearanceSchema.optional(),
11926
- imageSelectMappingColumns: z14.number().int().min(1).max(4).optional(),
11927
- imageSelectMappingEnableCustomUpload: z14.boolean().optional(),
11928
- imageSelectMappingHideLabel: z14.boolean().optional(),
11929
- imageSelectMappingHideLink: z14.boolean().optional(),
11930
- imageSelectMappingHideMeta: z14.boolean().optional(),
11931
- imageSelectMappingInlineUseLargeUploadBox: z14.boolean().optional(),
11932
- imageSelectMappingPromptField: z14.string().optional(),
11933
- imageSelectMappingTabOrder: z14.enum(["template-first", "upload-first"]).optional(),
11934
- imageSelectMappingTabWidthMode: z14.enum(["content", "fill"]).optional(),
12298
+ imageSelectMappingColumns: z15.number().int().min(1).max(4).optional(),
12299
+ imageSelectMappingEnableCustomUpload: z15.boolean().optional(),
12300
+ imageSelectMappingHideLabel: z15.boolean().optional(),
12301
+ imageSelectMappingHideLink: z15.boolean().optional(),
12302
+ imageSelectMappingHideMeta: z15.boolean().optional(),
12303
+ imageSelectMappingInlineUseLargeUploadBox: z15.boolean().optional(),
12304
+ imageSelectMappingPromptField: z15.string().optional(),
12305
+ imageSelectMappingTabOrder: z15.enum(["template-first", "upload-first"]).optional(),
12306
+ imageSelectMappingTabWidthMode: z15.enum(["content", "fill"]).optional(),
11935
12307
  imageSelectMappingTemplatePrompt: LocalizedTextSchema.optional(),
11936
12308
  imageSelectMappingTemplateTabTitle: LocalizedTextSchema.optional(),
11937
- imageSelectMappingUploadMode: z14.enum(["tabs", "inline"]).optional(),
12309
+ imageSelectMappingUploadMode: z15.enum(["tabs", "inline"]).optional(),
11938
12310
  imageSelectMappingUploadPrompt: LocalizedTextSchema.optional(),
11939
12311
  imageSelectMappingUploadTabTitle: LocalizedTextSchema.optional(),
11940
- endpoints: z14.array(JsonValueSchema).optional(),
11941
- examples: z14.array(JsonValueSchema).optional(),
12312
+ endpoints: z15.array(JsonValueSchema).optional(),
12313
+ examples: z15.array(JsonValueSchema).optional(),
11942
12314
  extraData: JsonValueSchema.optional(),
11943
12315
  layer: JsonValueSchema.optional(),
11944
12316
  map: JsonValueSchema.optional(),
11945
- multiline: z14.boolean().optional(),
11946
- options: z14.array(JsonValueSchema).optional(),
11947
- originalFiles: z14.array(JsonValueSchema).optional(),
12317
+ multiline: z15.boolean().optional(),
12318
+ options: z15.array(JsonValueSchema).optional(),
12319
+ originalFiles: z15.array(JsonValueSchema).optional(),
11948
12320
  placeholder: LocalizedTextSchema.optional(),
11949
- preserveSelectListOrder: z14.boolean().optional(),
12321
+ preserveSelectListOrder: z15.boolean().optional(),
11950
12322
  promptDictionary: JsonValueSchema.optional(),
11951
- promptFontSize: z14.number().optional(),
12323
+ promptFontSize: z15.number().optional(),
11952
12324
  promptModeToggle: JsonValueSchema.optional(),
11953
- requireActiveSelectFilter: z14.boolean().optional(),
11954
- restoreDefaultOnEmptyEnter: z14.boolean().optional(),
11955
- search: z14.boolean().optional(),
11956
- selectButtonEnableCollapse: z14.boolean().optional(),
11957
- selectButtonVisibleRows: z14.number().int().positive().optional(),
11958
- selectList: z14.array(JsonValueSchema).optional(),
11959
- selectListDisplayMode: z14.string().optional(),
11960
- selectPromptField: z14.string().optional(),
11961
- showAddLocalFileButton: z14.boolean().optional(),
11962
- singleColumn: z14.boolean().optional(),
11963
- singleFrameForMultiple: z14.boolean().optional(),
11964
- textSingleLine: z14.boolean().optional(),
11965
- textareaMiniHeight: z14.number().nonnegative().optional(),
12325
+ requireActiveSelectFilter: z15.boolean().optional(),
12326
+ restoreDefaultOnEmptyEnter: z15.boolean().optional(),
12327
+ search: z15.boolean().optional(),
12328
+ selectButtonEnableCollapse: z15.boolean().optional(),
12329
+ selectButtonVisibleRows: z15.number().int().positive().optional(),
12330
+ selectList: z15.array(JsonValueSchema).optional(),
12331
+ selectListDisplayMode: z15.string().optional(),
12332
+ selectPromptField: z15.string().optional(),
12333
+ showAddLocalFileButton: z15.boolean().optional(),
12334
+ singleColumn: z15.boolean().optional(),
12335
+ singleFrameForMultiple: z15.boolean().optional(),
12336
+ textSingleLine: z15.boolean().optional(),
12337
+ textareaMiniHeight: z15.number().nonnegative().optional(),
11966
12338
  tips: LocalizedTextSchema.optional(),
11967
12339
  visibility: JsonValueSchema.optional(),
11968
- voiceButtonText: z14.string().optional(),
11969
- designAnalysisFields: z14.array(JsonValueSchema).optional(),
11970
- designAnalysisFillStrategy: z14.string().optional(),
11971
- designAnalysisMaxFields: z14.number().int().nonnegative().optional(),
11972
- designAnalysisType: z14.string().optional(),
11973
- designAnalysisFieldPrefix: z14.string().optional()
11974
- }).strict();
11975
- var WorkflowParameterSchema = z14.lazy(
11976
- () => z14.object({
12340
+ voiceButtonText: z15.string().optional(),
12341
+ designAnalysisFields: z15.array(JsonValueSchema).optional(),
12342
+ designAnalysisFillStrategy: z15.string().optional(),
12343
+ designAnalysisMaxFields: z15.number().int().nonnegative().optional(),
12344
+ designAnalysisType: z15.string().optional(),
12345
+ designAnalysisFieldPrefix: z15.string().optional()
12346
+ }).strict();
12347
+ var WorkflowParameterSchema = z15.lazy(
12348
+ () => z15.object({
11977
12349
  displayName: LocalizedTextSchema,
11978
12350
  name: ContractIdentifierSchema,
11979
12351
  type: WorkflowParameterTypeSchema,
11980
12352
  typeOptions: WorkflowParameterTypeOptionsSchema.optional(),
11981
12353
  default: JsonValueSchema.optional(),
11982
12354
  description: LocalizedTextSchema.optional(),
11983
- hint: z14.string().optional(),
11984
- displayOptions: z14.object({
11985
- hide: z14.record(z14.string(), z14.array(JsonValueSchema)).optional(),
11986
- show: z14.record(z14.string(), z14.array(JsonValueSchema)).optional()
12355
+ hint: z15.string().optional(),
12356
+ displayOptions: z15.object({
12357
+ hide: z15.record(z15.string(), z15.array(JsonValueSchema)).optional(),
12358
+ show: z15.record(z15.string(), z15.array(JsonValueSchema)).optional()
11987
12359
  }).strict().optional(),
11988
- options: z14.array(z14.union([
11989
- z14.object({ name: LocalizedTextSchema, value: z14.union([z14.string(), z14.number(), z14.boolean()]), action: z14.string().optional(), description: LocalizedTextSchema.optional() }).strict(),
12360
+ options: z15.array(z15.union([
12361
+ z15.object({ name: LocalizedTextSchema, value: z15.union([z15.string(), z15.number(), z15.boolean()]), action: z15.string().optional(), description: LocalizedTextSchema.optional() }).strict(),
11990
12362
  WorkflowParameterSchema,
11991
- z14.object({ displayName: z14.string(), name: ContractIdentifierSchema, values: z14.array(WorkflowParameterSchema) }).strict()
12363
+ z15.object({ displayName: z15.string(), name: ContractIdentifierSchema, values: z15.array(WorkflowParameterSchema) }).strict()
11992
12364
  ])).optional(),
11993
12365
  placeholder: LocalizedTextSchema.optional(),
11994
- isNodeSetting: z14.boolean().optional(),
11995
- noDataExpression: z14.boolean().optional(),
11996
- required: z14.boolean().optional(),
11997
- example: z14.string().optional(),
11998
- extractValue: z14.object({ type: z14.literal("regex"), regex: z14.string() }).strict().optional(),
11999
- properties: z14.array(WorkflowParameterSchema).optional(),
12000
- assetType: z14.string().optional(),
12001
- flag: z14.boolean().optional(),
12002
- enableExpand: z14.boolean().optional(),
12003
- enableVoice: z14.boolean().optional(),
12004
- expandButtonText: z14.string().optional(),
12005
- knowledgeGraphButtonText: z14.string().optional(),
12006
- selectListDisplayMode: z14.string().optional(),
12007
- voiceButtonText: z14.string().optional()
12366
+ isNodeSetting: z15.boolean().optional(),
12367
+ noDataExpression: z15.boolean().optional(),
12368
+ required: z15.boolean().optional(),
12369
+ example: z15.string().optional(),
12370
+ extractValue: z15.object({ type: z15.literal("regex"), regex: z15.string() }).strict().optional(),
12371
+ properties: z15.array(WorkflowParameterSchema).optional(),
12372
+ assetType: z15.string().optional(),
12373
+ flag: z15.boolean().optional(),
12374
+ enableExpand: z15.boolean().optional(),
12375
+ enableVoice: z15.boolean().optional(),
12376
+ expandButtonText: z15.string().optional(),
12377
+ knowledgeGraphButtonText: z15.string().optional(),
12378
+ selectListDisplayMode: z15.string().optional(),
12379
+ voiceButtonText: z15.string().optional()
12008
12380
  }).strict()
12009
12381
  );
12010
- var WorkflowOutputBindingSchema = z14.object({ key: ContractIdentifierSchema, value: z14.string() }).strict();
12011
- var WorkflowNodeSchema = z14.object({
12382
+ var WorkflowOutputBindingSchema = z15.object({ key: ContractIdentifierSchema, value: z15.string() }).strict();
12383
+ var WorkflowNodeSchema = z15.object({
12012
12384
  id: ContractIdentifierSchema,
12013
12385
  referenceName: ContractIdentifierSchema,
12014
12386
  capabilityRef: ContractIdentifierSchema,
12015
12387
  capabilityVersion: ContractIdentifierSchema.optional(),
12016
- inputBindings: z14.record(z14.string(), JsonValueSchema).default({}),
12017
- configuration: z14.object({ executor: z14.literal("conductor"), task: ConductorTaskDefinitionSchema }).strict()
12388
+ inputBindings: z15.record(z15.string(), JsonValueSchema).default({}),
12389
+ configuration: z15.object({ executor: z15.literal("conductor"), task: ConductorTaskDefinitionSchema }).strict()
12018
12390
  }).strict().superRefine((node, context) => {
12019
12391
  if (node.configuration.task.taskReferenceName !== node.referenceName) context.addIssue({ code: "custom", path: ["configuration", "task", "taskReferenceName"], message: "Conductor task reference must match node referenceName." });
12020
12392
  if (node.configuration.task.name !== node.capabilityRef) context.addIssue({ code: "custom", path: ["configuration", "task", "name"], message: "Conductor task name must match node capabilityRef." });
12021
12393
  if (JSON.stringify(node.configuration.task.inputParameters ?? {}) !== JSON.stringify(node.inputBindings)) context.addIssue({ code: "custom", path: ["configuration", "task", "inputParameters"], message: "Conductor task inputs must match node inputBindings." });
12022
12394
  });
12023
- var WorkflowEdgeSchema = z14.object({
12395
+ var WorkflowEdgeSchema = z15.object({
12024
12396
  from: ContractIdentifierSchema,
12025
12397
  to: ContractIdentifierSchema,
12026
12398
  outputPort: ContractIdentifierSchema.optional(),
12027
12399
  inputPort: ContractIdentifierSchema.optional(),
12028
- condition: z14.string().optional()
12400
+ condition: z15.string().optional()
12029
12401
  }).strict();
12030
- var WorkflowTriggerSchema = z14.object({
12402
+ var WorkflowTriggerSchema = z15.object({
12031
12403
  id: ContractIdentifierSchema,
12032
- type: z14.enum(["manual", "schedule", "webhook", "event", "api"]),
12033
- enabled: z14.boolean(),
12034
- schedule: z14.object({ cron: z14.string().trim().min(1) }).strict().optional(),
12035
- webhook: z14.object({
12036
- path: z14.string().trim().min(1).optional(),
12037
- method: z14.enum(["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"]),
12038
- auth: z14.enum(["NONE", "BASIC", "CUSTOM_HEADER"]),
12039
- basicAuth: z14.object({ username: z14.string(), password: z14.string() }).strict().optional(),
12040
- headerAuth: z14.object({ name: z14.string().trim().min(1), value: z14.string() }).strict().optional(),
12041
- responseUntil: z14.enum(["WORKFLOW_STARTED", "WORKFLOW_COMPLETED_OR_FINISHED"])
12404
+ type: z15.enum(["manual", "schedule", "webhook", "event", "api"]),
12405
+ enabled: z15.boolean(),
12406
+ schedule: z15.object({ cron: z15.string().trim().min(1) }).strict().optional(),
12407
+ webhook: z15.object({
12408
+ path: z15.string().trim().min(1).optional(),
12409
+ method: z15.enum(["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"]),
12410
+ auth: z15.enum(["NONE", "BASIC", "CUSTOM_HEADER"]),
12411
+ basicAuth: z15.object({ username: z15.string(), password: z15.string() }).strict().optional(),
12412
+ headerAuth: z15.object({ name: z15.string().trim().min(1), value: z15.string() }).strict().optional(),
12413
+ responseUntil: z15.enum(["WORKFLOW_STARTED", "WORKFLOW_COMPLETED_OR_FINISHED"])
12042
12414
  }).strict().optional(),
12043
- event: z14.object({
12415
+ event: z15.object({
12044
12416
  eventType: ContractIdentifierSchema,
12045
12417
  configuration: JsonValueSchema.optional()
12046
12418
  }).strict().optional()
@@ -12049,63 +12421,63 @@ var WorkflowTriggerSchema = z14.object({
12049
12421
  if (trigger.type === "webhook" && !trigger.webhook) context.addIssue({ code: "custom", path: ["webhook"], message: "Webhook trigger requires webhook configuration." });
12050
12422
  if (trigger.type === "event" && !trigger.event) context.addIssue({ code: "custom", path: ["event"], message: "Event trigger requires event configuration." });
12051
12423
  });
12052
- var WorkflowValidationIssueSchema = z14.object({
12424
+ var WorkflowValidationIssueSchema = z15.object({
12053
12425
  taskReferenceName: ContractIdentifierSchema,
12054
- issueType: z14.enum(["ERROR", "WARNING"]),
12055
- detailReason: z14.object({ type: ContractIdentifierSchema, name: ContractIdentifierSchema, detailInformation: JsonValueSchema.optional() }).strict(),
12056
- humanMessage: z14.object({ en: z14.string(), zh: z14.string() }).strict()
12426
+ issueType: z15.enum(["ERROR", "WARNING"]),
12427
+ detailReason: z15.object({ type: ContractIdentifierSchema, name: ContractIdentifierSchema, detailInformation: JsonValueSchema.optional() }).strict(),
12428
+ humanMessage: z15.object({ en: z15.string(), zh: z15.string() }).strict()
12057
12429
  }).strict();
12058
- var WorkflowDefinitionSchema = z14.object({
12059
- contract: z14.literal("WorkflowDefinition"),
12430
+ var WorkflowDefinitionSchema = z15.object({
12431
+ contract: z15.literal("WorkflowDefinition"),
12060
12432
  metadata: ContractMetadataSchema.omit({ name: true, description: true, labels: true }).extend({
12061
12433
  name: LocalizedTextSchema,
12062
12434
  description: LocalizedTextSchema.optional(),
12063
- role: z14.enum(["workflow", "template"]),
12435
+ role: z15.enum(["workflow", "template"]),
12064
12436
  teamId: ContractIdentifierSchema,
12065
12437
  creatorRef: EntityRefSchema,
12066
- tags: z14.array(ContractIdentifierSchema).default([])
12438
+ tags: z15.array(ContractIdentifierSchema).default([])
12067
12439
  }).strict(),
12068
- revision: z14.object({
12069
- kind: z14.enum(["release", "backup"]),
12070
- recordVersion: z14.number().int().positive(),
12071
- sourceVersion: z14.number().int().positive().optional()
12440
+ revision: z15.object({
12441
+ kind: z15.enum(["release", "backup"]),
12442
+ recordVersion: z15.number().int().positive(),
12443
+ sourceVersion: z15.number().int().positive().optional()
12072
12444
  }).strict().superRefine((revision, context) => {
12073
12445
  if (revision.kind === "backup" && revision.sourceVersion === void 0) context.addIssue({ code: "custom", path: ["sourceVersion"], message: "Backup revisions require a sourceVersion." });
12074
12446
  }),
12075
- presentation: z14.object({ iconUrl: z14.string().optional(), thumbnail: z14.string().optional() }).strict(),
12076
- ports: z14.object({ inputs: z14.array(ContractPortSchema).default([]), outputs: z14.array(ContractPortSchema).default([]) }).strict(),
12077
- parameters: z14.object({ variables: z14.array(WorkflowParameterSchema).default([]), outputs: z14.array(WorkflowOutputBindingSchema).default([]) }).strict(),
12078
- graph: z14.object({ nodes: z14.array(WorkflowNodeSchema), edges: z14.array(WorkflowEdgeSchema).default([]) }).strict(),
12079
- execution: z14.object({
12080
- timeoutMs: z14.number().int().positive().optional(),
12081
- retries: z14.number().int().nonnegative().default(0),
12082
- concurrencyLimit: z14.number().int().positive().optional(),
12083
- idempotency: z14.enum(["required", "supported", "none"]),
12084
- rateLimit: z14.object({ enabled: z14.boolean(), max: z14.number().int().nonnegative(), windowMs: z14.number().int().nonnegative() }).strict().superRefine((rateLimit, context) => {
12447
+ presentation: z15.object({ iconUrl: z15.string().optional(), thumbnail: z15.string().optional() }).strict(),
12448
+ ports: z15.object({ inputs: z15.array(ContractPortSchema).default([]), outputs: z15.array(ContractPortSchema).default([]) }).strict(),
12449
+ parameters: z15.object({ variables: z15.array(WorkflowParameterSchema).default([]), outputs: z15.array(WorkflowOutputBindingSchema).default([]) }).strict(),
12450
+ graph: z15.object({ nodes: z15.array(WorkflowNodeSchema), edges: z15.array(WorkflowEdgeSchema).default([]) }).strict(),
12451
+ execution: z15.object({
12452
+ timeoutMs: z15.number().int().positive().optional(),
12453
+ retries: z15.number().int().nonnegative().default(0),
12454
+ concurrencyLimit: z15.number().int().positive().optional(),
12455
+ idempotency: z15.enum(["required", "supported", "none"]),
12456
+ rateLimit: z15.object({ enabled: z15.boolean(), max: z15.number().int().nonnegative(), windowMs: z15.number().int().nonnegative() }).strict().superRefine((rateLimit, context) => {
12085
12457
  if (rateLimit.enabled && (rateLimit.max === 0 || rateLimit.windowMs === 0)) context.addIssue({ code: "custom", message: "Enabled rate limit requires positive max and windowMs." });
12086
12458
  }).optional(),
12087
- conductor: z14.object({
12088
- ownerApp: z14.string().optional(),
12089
- createTime: z14.number().int().nonnegative().optional(),
12090
- updateTime: z14.number().int().nonnegative().optional(),
12091
- createdBy: z14.string().optional(),
12092
- updatedBy: z14.string().optional(),
12459
+ conductor: z15.object({
12460
+ ownerApp: z15.string().optional(),
12461
+ createTime: z15.number().int().nonnegative().optional(),
12462
+ updateTime: z15.number().int().nonnegative().optional(),
12463
+ createdBy: z15.string().optional(),
12464
+ updatedBy: z15.string().optional(),
12093
12465
  failureWorkflow: ContractIdentifierSchema.optional(),
12094
- schemaVersion: z14.number().int().positive().optional(),
12095
- restartable: z14.boolean().optional(),
12096
- workflowStatusListenerEnabled: z14.boolean().optional(),
12097
- ownerEmail: z14.string().email().optional(),
12098
- timeoutPolicy: z14.enum(["TIME_OUT_WF", "ALERT_ONLY"]).optional(),
12099
- variables: z14.record(z14.string(), JsonValueSchema).optional(),
12100
- inputTemplate: z14.record(z14.string(), JsonValueSchema).optional()
12466
+ schemaVersion: z15.number().int().positive().optional(),
12467
+ restartable: z15.boolean().optional(),
12468
+ workflowStatusListenerEnabled: z15.boolean().optional(),
12469
+ ownerEmail: z15.string().email().optional(),
12470
+ timeoutPolicy: z15.enum(["TIME_OUT_WF", "ALERT_ONLY"]).optional(),
12471
+ variables: z15.record(z15.string(), JsonValueSchema).optional(),
12472
+ inputTemplate: z15.record(z15.string(), JsonValueSchema).optional()
12101
12473
  }).strict()
12102
12474
  }).strict(),
12103
- triggers: z14.array(WorkflowTriggerSchema).default([]),
12104
- views: z14.array(z14.object({ pageRef: ContractIdentifierSchema, placement: ContractIdentifierSchema.optional() }).strict()).default([]),
12105
- dataContracts: z14.object({ reads: z14.array(ContractIdentifierSchema).default([]), writes: z14.array(ContractIdentifierSchema).default([]), emits: z14.array(ContractIdentifierSchema).default([]) }).strict(),
12106
- governance: z14.object({ activated: z14.boolean(), validated: z14.boolean(), validationIssues: z14.array(WorkflowValidationIssueSchema).default([]), hidden: z14.boolean().optional() }).strict(),
12107
- interfaces: z14.object({
12108
- openai: z14.object({ enabled: z14.boolean(), modelName: z14.string().trim().min(1).optional() }).strict(),
12475
+ triggers: z15.array(WorkflowTriggerSchema).default([]),
12476
+ views: z15.array(z15.object({ pageRef: ContractIdentifierSchema, placement: ContractIdentifierSchema.optional() }).strict()).default([]),
12477
+ dataContracts: z15.object({ reads: z15.array(ContractIdentifierSchema).default([]), writes: z15.array(ContractIdentifierSchema).default([]), emits: z15.array(ContractIdentifierSchema).default([]) }).strict(),
12478
+ governance: z15.object({ activated: z15.boolean(), validated: z15.boolean(), validationIssues: z15.array(WorkflowValidationIssueSchema).default([]), hidden: z15.boolean().optional() }).strict(),
12479
+ interfaces: z15.object({
12480
+ openai: z15.object({ enabled: z15.boolean(), modelName: z15.string().trim().min(1).optional() }).strict(),
12109
12481
  shortcutRef: EntityRefSchema.optional(),
12110
12482
  preferredAppId: ContractIdentifierSchema.optional()
12111
12483
  }).strict().superRefine((interfaces, context) => {
@@ -12124,21 +12496,21 @@ var WorkflowDefinitionSchema = z14.object({
12124
12496
  });
12125
12497
 
12126
12498
  // src/contracts/workflow-runtime.ts
12127
- import { z as z15 } from "zod";
12128
- var WorkflowCatalogEntrySchema = z15.object({
12129
- contract: z15.literal("WorkflowCatalogEntry"),
12499
+ import { z as z16 } from "zod";
12500
+ var WorkflowCatalogEntrySchema = z16.object({
12501
+ contract: z16.literal("WorkflowCatalogEntry"),
12130
12502
  workflowId: ContractIdentifierSchema,
12131
12503
  teamId: ContractIdentifierSchema,
12132
12504
  creatorRef: EntityRefSchema,
12133
12505
  currentDefinitionRef: EntityRefSchema,
12134
- lifecycle: z15.enum(["ACTIVE", "DELETED"]),
12135
- asset: z15.object({
12136
- preset: z15.boolean(),
12137
- marketplacePublished: z15.boolean(),
12506
+ lifecycle: z16.enum(["ACTIVE", "DELETED"]),
12507
+ asset: z16.object({
12508
+ preset: z16.boolean(),
12509
+ marketplacePublished: z16.boolean(),
12138
12510
  publishConfig: JsonObjectSchema.optional(),
12139
- sort: z15.number().int(),
12511
+ sort: z16.number().int(),
12140
12512
  forkFromRef: EntityRefSchema.optional(),
12141
- notAuthorized: z15.boolean()
12513
+ notAuthorized: z16.boolean()
12142
12514
  }).strict(),
12143
12515
  createdAt: IsoDateTimeSchema,
12144
12516
  updatedAt: IsoDateTimeSchema,
@@ -12173,17 +12545,17 @@ var WorkflowCatalogEntrySchema = z15.object({
12173
12545
  });
12174
12546
  }
12175
12547
  });
12176
- var WorkflowPublicationSchema = z15.object({
12177
- contract: z15.literal("WorkflowPublication"),
12548
+ var WorkflowPublicationSchema = z16.object({
12549
+ contract: z16.literal("WorkflowPublication"),
12178
12550
  publicationId: ContractIdentifierSchema,
12179
12551
  definitionRef: EntityRefSchema,
12180
12552
  runtimeDefinitionRef: EntityRefSchema,
12181
12553
  sourceHash: Sha256Schema,
12182
12554
  compiledHash: Sha256Schema,
12183
- status: z15.enum(["PENDING", "PUBLISHED", "FAILED", "RETIRED"]),
12555
+ status: z16.enum(["PENDING", "PUBLISHED", "FAILED", "RETIRED"]),
12184
12556
  publisherRef: EntityRefSchema,
12185
12557
  publishedAt: IsoDateTimeSchema.optional(),
12186
- failureReason: z15.string().trim().min(1).optional()
12558
+ failureReason: z16.string().trim().min(1).optional()
12187
12559
  }).strict().superRefine((publication, context) => {
12188
12560
  if (publication.definitionRef.kind !== "workflow-definition") {
12189
12561
  context.addIssue({
@@ -12214,12 +12586,12 @@ var WorkflowPublicationSchema = z15.object({
12214
12586
  });
12215
12587
  }
12216
12588
  });
12217
- var WorkflowCompletionCommitSchema = z15.object({
12218
- contract: z15.literal("WorkflowCompletionCommit"),
12589
+ var WorkflowCompletionCommitSchema = z16.object({
12590
+ contract: z16.literal("WorkflowCompletionCommit"),
12219
12591
  commitId: ContractIdentifierSchema,
12220
12592
  run: ApplicationRunSchema,
12221
- outputs: z15.array(OutputRecordSchema),
12222
- artifacts: z15.array(ArtifactManifestSchema),
12593
+ outputs: z16.array(OutputRecordSchema),
12594
+ artifacts: z16.array(ArtifactManifestSchema),
12223
12595
  lineage: LineageRecordSchema,
12224
12596
  completedAt: IsoDateTimeSchema
12225
12597
  }).strict().superRefine((commit, context) => {
@@ -12261,15 +12633,15 @@ var WorkflowCompletionCommitSchema = z15.object({
12261
12633
  }
12262
12634
  });
12263
12635
  });
12264
- var WorkflowCompletionReceiptSchema = z15.object({
12265
- contract: z15.literal("WorkflowCompletionReceipt"),
12636
+ var WorkflowCompletionReceiptSchema = z16.object({
12637
+ contract: z16.literal("WorkflowCompletionReceipt"),
12266
12638
  commitId: ContractIdentifierSchema,
12267
12639
  runRef: EntityRefSchema,
12268
- outputRefs: z15.array(EntityRefSchema),
12269
- artifactRefs: z15.array(EntityRefSchema),
12640
+ outputRefs: z16.array(EntityRefSchema),
12641
+ artifactRefs: z16.array(EntityRefSchema),
12270
12642
  contentHash: Sha256Schema,
12271
12643
  committedAt: IsoDateTimeSchema,
12272
- idempotentReplay: z15.boolean()
12644
+ idempotentReplay: z16.boolean()
12273
12645
  }).strict().superRefine((receipt, context) => {
12274
12646
  if (receipt.runRef.kind !== "application-run") {
12275
12647
  context.addIssue({
@@ -12333,6 +12705,9 @@ var canonicalContractSchemas = {
12333
12705
  "expiring-access-grant": ExpiringAccessGrantSchema,
12334
12706
  "hotword-body": HotwordBodySchema,
12335
12707
  "lineage-record": LineageRecordSchema,
12708
+ "menu-definition": MenuDefinitionSchema,
12709
+ "menu-definition-set": MenuDefinitionSetSchema,
12710
+ "menu-runtime-bundle": MenuRuntimeBundleSchema,
12336
12711
  "ontology-definition": OntologyDefinitionSchema,
12337
12712
  "overlay-node": OverlayNodeSchema,
12338
12713
  "output-record": OutputRecordSchema,
@@ -12729,6 +13104,11 @@ var compileProductDeclaration = (input) => {
12729
13104
  const commandsByName = uniqueIndex(declaration.commands, (value) => value.commandName, "command name");
12730
13105
  const capabilitiesById = uniqueIndex(declaration.capabilities, (value) => value.id, "capability id");
12731
13106
  const pagesById = uniqueIndex(declaration.pages, (value) => value.pageId, "page id");
13107
+ const menusByKey = uniqueIndex(
13108
+ declaration.menus,
13109
+ (value) => `${value.applicationId}/${value.surface}/${value.menuId}`,
13110
+ "menu definition"
13111
+ );
12732
13112
  const nodes = [];
12733
13113
  const edges = [];
12734
13114
  const addNode = (kind, id) => nodes.push(ref(kind, id));
@@ -12743,6 +13123,7 @@ var compileProductDeclaration = (input) => {
12743
13123
  }
12744
13124
  for (const command of declaration.commands) addNode("command", command.commandName);
12745
13125
  for (const capability of declaration.capabilities) addNode("capability", capability.id);
13126
+ for (const menu of declaration.menus) addNode("menu", `${menu.applicationId}/${menu.surface}/${menu.menuId}`);
12746
13127
  for (const concept of declaration.concepts) {
12747
13128
  addNode("concept", concept.conceptId);
12748
13129
  if (concept.ontologyId) {
@@ -12788,6 +13169,7 @@ var compileProductDeclaration = (input) => {
12788
13169
  commandsByName,
12789
13170
  capabilitiesById,
12790
13171
  pagesById,
13172
+ menusByKey,
12791
13173
  nodes: Object.freeze(nodes),
12792
13174
  edges: Object.freeze(edges)
12793
13175
  });
@@ -12866,6 +13248,512 @@ var buildChangeImpactGraph = (previousInput, nextInput, generatedAt = (/* @__PUR
12866
13248
  });
12867
13249
  };
12868
13250
 
13251
+ // src/runtime/menu-compiler.ts
13252
+ var MenuCompilationError = class extends Error {
13253
+ constructor(code, path, message) {
13254
+ super(`${path}: ${message}`);
13255
+ this.name = "MenuCompilationError";
13256
+ this.code = code;
13257
+ this.path = path;
13258
+ }
13259
+ };
13260
+ var menuKey = (applicationId, surface, menuId) => `${applicationId}\0${surface}\0${menuId}`;
13261
+ var pageKey = (page) => `${page.applicationId}\0${page.pageId}`;
13262
+ var targetKey = (page, activationId) => `${page.applicationId}\0${page.pageId}\0${activationId}`;
13263
+ var actionKey = (applicationId, actionRef) => `${applicationId}\0${actionRef}`;
13264
+ var providerKey = (applicationId, providerId) => `${applicationId}\0${providerId}`;
13265
+ var stableSerialize = (value) => {
13266
+ if (value === void 0) return "null";
13267
+ if (value === null || typeof value !== "object") return JSON.stringify(value) ?? "null";
13268
+ if (Array.isArray(value)) return `[${value.map((item) => stableSerialize(item)).join(",")}]`;
13269
+ const record = value;
13270
+ return `{${Object.keys(record).filter((key) => record[key] !== void 0).sort().map((key) => `${JSON.stringify(key)}:${stableSerialize(record[key])}`).join(",")}}`;
13271
+ };
13272
+ var deepFreeze = (value) => {
13273
+ if (value === null || typeof value !== "object" || Object.isFrozen(value)) return value;
13274
+ Object.values(value).forEach((child) => deepFreeze(child));
13275
+ return Object.freeze(value);
13276
+ };
13277
+ var SHA256_INITIAL = [
13278
+ 1779033703,
13279
+ 3144134277,
13280
+ 1013904242,
13281
+ 2773480762,
13282
+ 1359893119,
13283
+ 2600822924,
13284
+ 528734635,
13285
+ 1541459225
13286
+ ];
13287
+ var SHA256_ROUND = [
13288
+ 1116352408,
13289
+ 1899447441,
13290
+ 3049323471,
13291
+ 3921009573,
13292
+ 961987163,
13293
+ 1508970993,
13294
+ 2453635748,
13295
+ 2870763221,
13296
+ 3624381080,
13297
+ 310598401,
13298
+ 607225278,
13299
+ 1426881987,
13300
+ 1925078388,
13301
+ 2162078206,
13302
+ 2614888103,
13303
+ 3248222580,
13304
+ 3835390401,
13305
+ 4022224774,
13306
+ 264347078,
13307
+ 604807628,
13308
+ 770255983,
13309
+ 1249150122,
13310
+ 1555081692,
13311
+ 1996064986,
13312
+ 2554220882,
13313
+ 2821834349,
13314
+ 2952996808,
13315
+ 3210313671,
13316
+ 3336571891,
13317
+ 3584528711,
13318
+ 113926993,
13319
+ 338241895,
13320
+ 666307205,
13321
+ 773529912,
13322
+ 1294757372,
13323
+ 1396182291,
13324
+ 1695183700,
13325
+ 1986661051,
13326
+ 2177026350,
13327
+ 2456956037,
13328
+ 2730485921,
13329
+ 2820302411,
13330
+ 3259730800,
13331
+ 3345764771,
13332
+ 3516065817,
13333
+ 3600352804,
13334
+ 4094571909,
13335
+ 275423344,
13336
+ 430227734,
13337
+ 506948616,
13338
+ 659060556,
13339
+ 883997877,
13340
+ 958139571,
13341
+ 1322822218,
13342
+ 1537002063,
13343
+ 1747873779,
13344
+ 1955562222,
13345
+ 2024104815,
13346
+ 2227730452,
13347
+ 2361852424,
13348
+ 2428436474,
13349
+ 2756734187,
13350
+ 3204031479,
13351
+ 3329325298
13352
+ ];
13353
+ var rotateRight = (value, amount) => value >>> amount | value << 32 - amount;
13354
+ var sha256Hex = (value) => {
13355
+ const source = [...new TextEncoder().encode(value)];
13356
+ const bitLength = source.length * 8;
13357
+ source.push(128);
13358
+ while (source.length % 64 !== 56) source.push(0);
13359
+ const high = Math.floor(bitLength / 4294967296);
13360
+ const low = bitLength >>> 0;
13361
+ for (let shift = 24; shift >= 0; shift -= 8) source.push(high >>> shift & 255);
13362
+ for (let shift = 24; shift >= 0; shift -= 8) source.push(low >>> shift & 255);
13363
+ const hash = [...SHA256_INITIAL];
13364
+ const words = new Array(64).fill(0);
13365
+ for (let offset = 0; offset < source.length; offset += 64) {
13366
+ for (let index = 0; index < 16; index += 1) {
13367
+ const start = offset + index * 4;
13368
+ words[index] = (source[start] << 24 | source[start + 1] << 16 | source[start + 2] << 8 | source[start + 3]) >>> 0;
13369
+ }
13370
+ for (let index = 16; index < 64; index += 1) {
13371
+ const previous = words[index - 15];
13372
+ const recent = words[index - 2];
13373
+ const small0 = rotateRight(previous, 7) ^ rotateRight(previous, 18) ^ previous >>> 3;
13374
+ const small1 = rotateRight(recent, 17) ^ rotateRight(recent, 19) ^ recent >>> 10;
13375
+ words[index] = words[index - 16] + small0 + words[index - 7] + small1 >>> 0;
13376
+ }
13377
+ let [a, b, c, d, e, f, g, h] = hash;
13378
+ for (let index = 0; index < 64; index += 1) {
13379
+ const big1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);
13380
+ const choice = e & f ^ ~e & g;
13381
+ const temp1 = h + big1 + choice + SHA256_ROUND[index] + words[index] >>> 0;
13382
+ const big0 = rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22);
13383
+ const majority = a & b ^ a & c ^ b & c;
13384
+ const temp2 = big0 + majority >>> 0;
13385
+ h = g;
13386
+ g = f;
13387
+ f = e;
13388
+ e = d + temp1 >>> 0;
13389
+ d = c;
13390
+ c = b;
13391
+ b = a;
13392
+ a = temp1 + temp2 >>> 0;
13393
+ }
13394
+ hash[0] = hash[0] + a >>> 0;
13395
+ hash[1] = hash[1] + b >>> 0;
13396
+ hash[2] = hash[2] + c >>> 0;
13397
+ hash[3] = hash[3] + d >>> 0;
13398
+ hash[4] = hash[4] + e >>> 0;
13399
+ hash[5] = hash[5] + f >>> 0;
13400
+ hash[6] = hash[6] + g >>> 0;
13401
+ hash[7] = hash[7] + h >>> 0;
13402
+ }
13403
+ return hash.map((part) => part.toString(16).padStart(8, "0")).join("");
13404
+ };
13405
+ var uniqueIndex2 = (values, key, path) => {
13406
+ const result = /* @__PURE__ */ new Map();
13407
+ values.forEach((value, index) => {
13408
+ const identity = key(value);
13409
+ if (result.has(identity)) {
13410
+ throw new MenuCompilationError(
13411
+ "duplicate-registration",
13412
+ `${path}[${index}]`,
13413
+ `Duplicate registry identity: ${identity.split("\0").join("/")}`
13414
+ );
13415
+ }
13416
+ result.set(identity, value);
13417
+ });
13418
+ return result;
13419
+ };
13420
+ var normalizedSiblingOrder = (left, right) => left.order - right.order || left.nodeId.localeCompare(right.nodeId);
13421
+ var normalizeNodeOrder = (nodes) => {
13422
+ const childrenByParent = /* @__PURE__ */ new Map();
13423
+ nodes.forEach((node) => {
13424
+ const parent = node.parentNodeId ?? "";
13425
+ const children = childrenByParent.get(parent) ?? [];
13426
+ children.push(node);
13427
+ childrenByParent.set(parent, children);
13428
+ });
13429
+ childrenByParent.forEach((children) => children.sort(normalizedSiblingOrder));
13430
+ const ordered = [];
13431
+ const appendChildren = (parentNodeId) => {
13432
+ for (const node of childrenByParent.get(parentNodeId) ?? []) {
13433
+ ordered.push(node);
13434
+ appendChildren(node.nodeId);
13435
+ }
13436
+ };
13437
+ appendChildren("");
13438
+ return ordered;
13439
+ };
13440
+ var requirementFromPage = (registration) => ({
13441
+ authenticated: registration.page.visibility.authenticated,
13442
+ permissionAllOf: registration.page.visibility.permissionAllOf,
13443
+ permissionAnyOf: registration.page.visibility.permissionAnyOf,
13444
+ featureFlags: registration.page.visibility.featureFlags
13445
+ });
13446
+ var validatePermissionCodes = (permissions, knownPermissions, path) => {
13447
+ permissions.forEach((permission, index) => {
13448
+ if (!knownPermissions.has(permission)) {
13449
+ throw new MenuCompilationError(
13450
+ "unknown-permission",
13451
+ `${path}[${index}]`,
13452
+ `Unknown platform permission: ${permission}`
13453
+ );
13454
+ }
13455
+ });
13456
+ };
13457
+ var validateInput = (value, schemaRef, validators, path) => {
13458
+ if (!schemaRef) {
13459
+ throw new MenuCompilationError(
13460
+ "missing-input-schema",
13461
+ path,
13462
+ "Input is configured but the target has no input schema reference."
13463
+ );
13464
+ }
13465
+ const validator = validators.get(schemaRef);
13466
+ if (!validator) {
13467
+ throw new MenuCompilationError(
13468
+ "unknown-input-schema",
13469
+ path,
13470
+ `No input validator is registered for ${schemaRef}.`
13471
+ );
13472
+ }
13473
+ try {
13474
+ return MenuBoundedInputSchema.parse(validator(value));
13475
+ } catch (error) {
13476
+ const message = error instanceof Error ? error.message : String(error);
13477
+ throw new MenuCompilationError("invalid-input", path, `Input validation failed for ${schemaRef}: ${message}`);
13478
+ }
13479
+ };
13480
+ var evaluateAccess = (item, context) => {
13481
+ const reasons = [];
13482
+ const protectedBySession = item.access.authenticated || item.access.permissionAllOf.length > 0 || item.access.permissionAnyOf.length > 0 || item.access.requiredPermission !== void 0;
13483
+ if (!context.sessionResolved && protectedBySession) reasons.push("session-unresolved");
13484
+ if (item.access.authenticated && !context.authenticated) reasons.push("authentication");
13485
+ const granted = new Set(context.permissionCodes);
13486
+ const elevated = context.isKernelSuperAdmin === true || granted.has("*");
13487
+ if (item.access.permissionAllOf.some((permission) => !granted.has(permission))) {
13488
+ reasons.push("permission-all");
13489
+ }
13490
+ if (item.access.permissionAnyOf.length > 0 && !item.access.permissionAnyOf.some((permission) => granted.has(permission))) {
13491
+ reasons.push("permission-any");
13492
+ }
13493
+ if (!elevated && item.access.requiredPermission && !granted.has(item.access.requiredPermission)) {
13494
+ reasons.push("required-permission");
13495
+ }
13496
+ if (item.access.featureFlags.some((flag) => context.featureFlags[flag] !== true)) {
13497
+ reasons.push("feature-flag");
13498
+ }
13499
+ return Object.freeze({ allowed: reasons.length === 0, reasons: Object.freeze(reasons) });
13500
+ };
13501
+ var resolveMenuActivationId = (page, activationId) => activationId ?? page.pageId;
13502
+ var readMenuActivationFromSearch = (search) => {
13503
+ const params = typeof search === "string" ? new URLSearchParams(search) : search;
13504
+ const value = params.get(MENU_ACTIVATION_QUERY_PARAMETER)?.trim();
13505
+ return value || void 0;
13506
+ };
13507
+ var serializeMenuActivationSearch = (search, page, activationId) => {
13508
+ const params = new URLSearchParams(typeof search === "string" ? search : search.toString());
13509
+ const effectiveActivationId = resolveMenuActivationId(page, activationId);
13510
+ if (effectiveActivationId === page.pageId) params.delete(MENU_ACTIVATION_QUERY_PARAMETER);
13511
+ else params.set(MENU_ACTIVATION_QUERY_PARAMETER, effectiveActivationId);
13512
+ return params.toString();
13513
+ };
13514
+ var isCompiledMenuItemSelected = (item, page, activationId) => item.behavior.kind === "navigate" && pageKey(item.behavior.page) === pageKey(page) && item.behavior.activationId === resolveMenuActivationId(page, activationId);
13515
+ var compileMenuRuntimeBundle = (input) => {
13516
+ const applicationId = ContractIdentifierSchema.parse(input.applicationId);
13517
+ const supportedSurfaces = new Set(input.supportedSurfaces.map((surface) => ContractIdentifierSchema.parse(surface)));
13518
+ const definitions = input.definitions.map((definition) => MenuDefinitionSchema.parse(definition));
13519
+ const pages = input.pages.map((registration) => MenuPageRegistrationSchema.parse(registration));
13520
+ const actions = input.actions.map((registration) => MenuActionRegistrationSchema.parse(registration));
13521
+ const contributionProviders = input.contributionProviders.map((registration) => MenuContributionProviderRegistrationSchema.parse(registration));
13522
+ const inputValidators = input.inputValidators ?? /* @__PURE__ */ new Map();
13523
+ const knownPermissions = new Set(input.permissionCodes.map((permission) => ContractIdentifierSchema.parse(permission)));
13524
+ pages.forEach((registration, index) => {
13525
+ if (!registration.page.visibility.productContexts.some((context) => context === registration.applicationId)) {
13526
+ throw new MenuCompilationError(
13527
+ "invalid-page-application",
13528
+ `pages[${index}].applicationId`,
13529
+ `Page ${registration.page.pageId} is not visible in ${registration.applicationId}.`
13530
+ );
13531
+ }
13532
+ });
13533
+ const pagesByKey = uniqueIndex2(pages, (registration) => pageKey({
13534
+ applicationId: registration.applicationId,
13535
+ pageId: registration.page.pageId
13536
+ }), "pages");
13537
+ const actionsByKey = uniqueIndex2(actions, (registration) => actionKey(
13538
+ registration.applicationId,
13539
+ registration.actionRef
13540
+ ), "actions");
13541
+ const providersByKey = uniqueIndex2(contributionProviders, (registration) => providerKey(
13542
+ registration.applicationId,
13543
+ registration.providerId
13544
+ ), "contributionProviders");
13545
+ const definitionsByKey = /* @__PURE__ */ new Map();
13546
+ definitions.forEach((definition, index) => {
13547
+ const identity = menuKey(definition.applicationId, definition.surface, definition.menuId);
13548
+ if (definitionsByKey.has(identity)) {
13549
+ throw new MenuCompilationError(
13550
+ "duplicate-definition",
13551
+ `definitions[${index}]`,
13552
+ `Duplicate menu definition: ${definition.applicationId}/${definition.surface}/${definition.menuId}`
13553
+ );
13554
+ }
13555
+ definitionsByKey.set(identity, definition);
13556
+ });
13557
+ const targetSourceSignatures = /* @__PURE__ */ new Map();
13558
+ const navigationTargetsByKey = /* @__PURE__ */ new Map();
13559
+ const serverInputByTargetKey = /* @__PURE__ */ new Map();
13560
+ const requestedTargetKeys = /* @__PURE__ */ new Set();
13561
+ const requestedMenus = [];
13562
+ definitions.forEach((definition, definitionIndex) => {
13563
+ if (definition.applicationId === applicationId && !supportedSurfaces.has(definition.surface)) {
13564
+ throw new MenuCompilationError(
13565
+ "unsupported-surface",
13566
+ `definitions[${definitionIndex}].surface`,
13567
+ `Application ${applicationId} does not support menu surface ${definition.surface}.`
13568
+ );
13569
+ }
13570
+ const compiledNodes = definition.nodes.map((node, nodeIndex) => {
13571
+ if (node.kind !== "item") return node;
13572
+ const nodePath = `definitions[${definitionIndex}].nodes[${nodeIndex}]`;
13573
+ if (node.requiredPermission && !knownPermissions.has(node.requiredPermission)) {
13574
+ throw new MenuCompilationError(
13575
+ "unknown-permission",
13576
+ `${nodePath}.requiredPermission`,
13577
+ `Unknown platform permission: ${node.requiredPermission}`
13578
+ );
13579
+ }
13580
+ let access;
13581
+ if (node.behavior.kind === "navigate") {
13582
+ const registration = pagesByKey.get(pageKey(node.behavior.page));
13583
+ if (!registration) {
13584
+ throw new MenuCompilationError(
13585
+ "unknown-page",
13586
+ `${nodePath}.behavior.page`,
13587
+ `Unknown page reference: ${node.behavior.page.applicationId}/${node.behavior.page.pageId}`
13588
+ );
13589
+ }
13590
+ access = requirementFromPage(registration);
13591
+ validatePermissionCodes(access.permissionAllOf, knownPermissions, `${nodePath}.targetAccess.permissionAllOf`);
13592
+ validatePermissionCodes(access.permissionAnyOf, knownPermissions, `${nodePath}.targetAccess.permissionAnyOf`);
13593
+ const activationId = resolveMenuActivationId(node.behavior.page, node.behavior.activationId);
13594
+ const identity = targetKey(node.behavior.page, activationId);
13595
+ let runtimeInput;
13596
+ let normalizedSourceInput;
13597
+ if (node.behavior.input) {
13598
+ const normalized = validateInput(
13599
+ node.behavior.input.value,
13600
+ registration.page.input?.schemaRef,
13601
+ inputValidators,
13602
+ `${nodePath}.behavior.input.value`
13603
+ );
13604
+ normalizedSourceInput = { exposure: node.behavior.input.exposure, value: normalized };
13605
+ runtimeInput = node.behavior.input.exposure === "client" ? { exposure: "client", value: normalized } : { exposure: "server" };
13606
+ if (node.behavior.input.exposure === "server" && definition.applicationId === applicationId) {
13607
+ serverInputByTargetKey.set(identity, deepFreeze(normalized));
13608
+ }
13609
+ }
13610
+ const signature = stableSerialize({
13611
+ kind: "navigate",
13612
+ page: node.behavior.page,
13613
+ activationId,
13614
+ input: normalizedSourceInput
13615
+ });
13616
+ const existingSignature = targetSourceSignatures.get(identity);
13617
+ if (existingSignature !== void 0 && existingSignature !== signature) {
13618
+ throw new MenuCompilationError(
13619
+ "conflicting-navigation-target",
13620
+ `${nodePath}.behavior`,
13621
+ `Navigation target ${node.behavior.page.applicationId}/${node.behavior.page.pageId}/${activationId} has conflicting behavior or input.`
13622
+ );
13623
+ }
13624
+ targetSourceSignatures.set(identity, signature);
13625
+ if (!navigationTargetsByKey.has(identity)) {
13626
+ navigationTargetsByKey.set(identity, {
13627
+ page: node.behavior.page,
13628
+ activationId,
13629
+ input: runtimeInput
13630
+ });
13631
+ }
13632
+ if (definition.applicationId === applicationId) requestedTargetKeys.add(identity);
13633
+ const { requiredPermission: requiredPermission2, behavior: _behavior2, ...presentation2 } = node;
13634
+ return CompiledMenuItemNodeSchema.parse({
13635
+ ...presentation2,
13636
+ behavior: {
13637
+ kind: "navigate",
13638
+ page: node.behavior.page,
13639
+ activationId,
13640
+ input: runtimeInput
13641
+ },
13642
+ access: { ...access, requiredPermission: requiredPermission2 }
13643
+ });
13644
+ }
13645
+ const action = actionsByKey.get(actionKey(definition.applicationId, node.behavior.actionRef));
13646
+ if (!action) {
13647
+ throw new MenuCompilationError(
13648
+ "unknown-action",
13649
+ `${nodePath}.behavior.actionRef`,
13650
+ `Unknown action reference for ${definition.applicationId}: ${node.behavior.actionRef}`
13651
+ );
13652
+ }
13653
+ access = action.access;
13654
+ validatePermissionCodes(access.permissionAllOf, knownPermissions, `${nodePath}.targetAccess.permissionAllOf`);
13655
+ validatePermissionCodes(access.permissionAnyOf, knownPermissions, `${nodePath}.targetAccess.permissionAnyOf`);
13656
+ const actionInput = node.behavior.input ? validateInput(node.behavior.input, action.inputSchemaRef, inputValidators, `${nodePath}.behavior.input`) : void 0;
13657
+ const { requiredPermission, behavior: _behavior, ...presentation } = node;
13658
+ return CompiledMenuItemNodeSchema.parse({
13659
+ ...presentation,
13660
+ behavior: { kind: "action", actionRef: node.behavior.actionRef, input: actionInput },
13661
+ access: { ...access, requiredPermission }
13662
+ });
13663
+ });
13664
+ definition.contributions.forEach((contribution, contributionIndex) => {
13665
+ const provider = providersByKey.get(providerKey(definition.applicationId, contribution.providerId));
13666
+ const path = `definitions[${definitionIndex}].contributions[${contributionIndex}].providerId`;
13667
+ if (!provider) {
13668
+ throw new MenuCompilationError(
13669
+ "unknown-contribution-provider",
13670
+ path,
13671
+ `Unknown contribution provider for ${definition.applicationId}: ${contribution.providerId}`
13672
+ );
13673
+ }
13674
+ if (provider.surfaces && !provider.surfaces.includes(definition.surface)) {
13675
+ throw new MenuCompilationError(
13676
+ "unsupported-contribution-surface",
13677
+ path,
13678
+ `Provider ${contribution.providerId} does not support surface ${definition.surface}.`
13679
+ );
13680
+ }
13681
+ });
13682
+ if (definition.applicationId !== applicationId) return;
13683
+ requestedMenus.push(CompiledMenuProjectionSchema.parse({
13684
+ applicationId: definition.applicationId,
13685
+ surface: definition.surface,
13686
+ menuId: definition.menuId,
13687
+ nodes: normalizeNodeOrder(compiledNodes),
13688
+ contributions: [...definition.contributions].sort((left, right) => (left.parentNodeId ?? "").localeCompare(right.parentNodeId ?? "") || left.order - right.order || left.providerId.localeCompare(right.providerId))
13689
+ }));
13690
+ });
13691
+ const menus = requestedMenus.sort((left, right) => left.surface.localeCompare(right.surface) || left.menuId.localeCompare(right.menuId));
13692
+ const navigationTargets = [...requestedTargetKeys].map((identity) => navigationTargetsByKey.get(identity)).filter((target) => target !== void 0).sort((left, right) => left.page.applicationId.localeCompare(right.page.applicationId) || left.page.pageId.localeCompare(right.page.pageId) || left.activationId.localeCompare(right.activationId));
13693
+ const unsignedDocument = {
13694
+ contract: "MenuRuntimeBundle",
13695
+ version: MENU_CONTRACT_VERSION,
13696
+ applicationId,
13697
+ sourceVersion: input.sourceVersion,
13698
+ menus,
13699
+ navigationTargets,
13700
+ sourceMap: Object.fromEntries(
13701
+ Object.entries(input.sourceMap ?? {}).sort(([left], [right]) => left.localeCompare(right))
13702
+ )
13703
+ };
13704
+ const document = MenuRuntimeBundleSchema.parse({
13705
+ ...unsignedDocument,
13706
+ contentHash: sha256Hex(stableSerialize(unsignedDocument))
13707
+ });
13708
+ const menusByKey = new Map(document.menus.map((menu) => [
13709
+ menuKey(menu.applicationId, menu.surface, menu.menuId),
13710
+ menu
13711
+ ]));
13712
+ const documentTargetsByKey = new Map(document.navigationTargets.map((target) => [
13713
+ targetKey(target.page, target.activationId),
13714
+ target
13715
+ ]));
13716
+ const resolveNavigationTarget = (page, explicitActivationId) => {
13717
+ const parsedPage = MenuPageRefSchema.parse(page);
13718
+ if (explicitActivationId !== void 0) {
13719
+ const parsedActivation = ContractIdentifierSchema.safeParse(explicitActivationId);
13720
+ if (!parsedActivation.success) return Object.freeze({ status: "invalid", reason: "invalid-activation" });
13721
+ const target2 = documentTargetsByKey.get(targetKey(parsedPage, parsedActivation.data));
13722
+ if (target2) return Object.freeze({ status: "resolved", target: target2 });
13723
+ const sameActivation = document.navigationTargets.find((candidate) => candidate.page.applicationId === parsedPage.applicationId && candidate.activationId === parsedActivation.data);
13724
+ return Object.freeze({
13725
+ status: "invalid",
13726
+ reason: sameActivation ? "page-mismatch" : "unknown-activation"
13727
+ });
13728
+ }
13729
+ const target = documentTargetsByKey.get(targetKey(parsedPage, parsedPage.pageId));
13730
+ return target ? Object.freeze({ status: "resolved", target }) : Object.freeze({ status: "unmatched" });
13731
+ };
13732
+ return Object.freeze({
13733
+ document: deepFreeze(document),
13734
+ menusByKey,
13735
+ navigationTargetsByKey: documentTargetsByKey,
13736
+ serverInputByTargetKey,
13737
+ evaluateItemAccess: evaluateAccess,
13738
+ resolveNavigationTarget,
13739
+ selectedNodeIds(menu, page, activationId) {
13740
+ if (menu.applicationId !== document.applicationId) return /* @__PURE__ */ new Set();
13741
+ const nodesById = new Map(menu.nodes.map((node) => [node.nodeId, node]));
13742
+ const selected = /* @__PURE__ */ new Set();
13743
+ for (const node of menu.nodes) {
13744
+ if (node.kind !== "item" || !isCompiledMenuItemSelected(node, page, activationId)) continue;
13745
+ selected.add(node.nodeId);
13746
+ let parentNodeId = node.parentNodeId;
13747
+ while (parentNodeId) {
13748
+ selected.add(parentNodeId);
13749
+ parentNodeId = nodesById.get(parentNodeId)?.parentNodeId;
13750
+ }
13751
+ }
13752
+ return selected;
13753
+ }
13754
+ });
13755
+ };
13756
+
12869
13757
  // src/runtime/view-provider-registry.ts
12870
13758
  var referenceVersion = (version) => version === void 0 ? void 0 : String(version);
12871
13759
  var sameStringSet = (left, right) => {
@@ -13141,7 +14029,7 @@ var compilePageRuntimeProjection = (input) => {
13141
14029
  const guardsByPageId = unique2(document.guards, (guard) => guard.pageId, "guard pageId");
13142
14030
  const renderersByPageId = unique2(document.renderers, (renderer) => renderer.pageId, "renderer pageId");
13143
14031
  const matchers = pages.map((page) => ({ page, pattern: routePattern(page.routePath), specificity: routeSpecificity(page.routePath) })).sort((left, right) => right.specificity - left.specificity || left.page.pageId.localeCompare(right.page.pageId));
13144
- const evaluateAccess = (pageId, context) => {
14032
+ const evaluateAccess2 = (pageId, context) => {
13145
14033
  const guard = guardsByPageId.get(pageId);
13146
14034
  if (!guard) throw new Error(`Unknown page guard: ${pageId}`);
13147
14035
  const reasons = [];
@@ -13164,9 +14052,9 @@ var compilePageRuntimeProjection = (input) => {
13164
14052
  navigationByPageId,
13165
14053
  guardsByPageId,
13166
14054
  renderersByPageId,
13167
- evaluateAccess,
14055
+ evaluateAccess: evaluateAccess2,
13168
14056
  visibleNavigation(context) {
13169
- return Object.freeze(document.navigation.filter((item) => evaluateAccess(item.pageId, context).allowed));
14057
+ return Object.freeze(document.navigation.filter((item) => evaluateAccess2(item.pageId, context).allowed));
13170
14058
  },
13171
14059
  matchRoute(pathname) {
13172
14060
  const path = pathname.split("?")[0]?.split("#")[0] || "/";
@@ -13346,6 +14234,7 @@ var compileTenantRuntimeConfig = (input) => {
13346
14234
  dataBinding: productConfig.dataBinding,
13347
14235
  sourceMap: productConfig.sourceMap,
13348
14236
  warnings: productConfig.warnings,
14237
+ menuBundle: input.menuBundle,
13349
14238
  applicationConfig: productConfig.applicationConfig
13350
14239
  }));
13351
14240
  };
@@ -13656,6 +14545,8 @@ export {
13656
14545
  BrandBodySchema,
13657
14546
  BrandGeneticsProfileSchema,
13658
14547
  CODE_LANGUAGES,
14548
+ CURRENT_USER_MENU_ACTION_REFS,
14549
+ CURRENT_USER_MENU_CONTROL_REFS,
13659
14550
  CapabilityManifestSchema,
13660
14551
  CapabilityProviderBindingSchema,
13661
14552
  CapabilityRegistryDocumentSchema,
@@ -13664,6 +14555,15 @@ export {
13664
14555
  CapabilitySourceTypeSchema,
13665
14556
  ChangeImpactGraphSchema,
13666
14557
  ChangeImpactSchema,
14558
+ CompiledMenuActionBehaviorSchema,
14559
+ CompiledMenuBehaviorSchema,
14560
+ CompiledMenuDividerNodeSchema,
14561
+ CompiledMenuGroupNodeSchema,
14562
+ CompiledMenuItemAccessSchema,
14563
+ CompiledMenuItemNodeSchema,
14564
+ CompiledMenuNavigateBehaviorSchema,
14565
+ CompiledMenuNodeSchema,
14566
+ CompiledMenuProjectionSchema,
13667
14567
  CompletionEventSchema,
13668
14568
  CompletionHeaderSchema,
13669
14569
  ConceptDefinitionSchema,
@@ -13675,6 +14575,14 @@ export {
13675
14575
  ContractMetadataSchema,
13676
14576
  ContractPortSchema,
13677
14577
  ContractVersionSchema,
14578
+ CurrentUserMenuActionItemSchema,
14579
+ CurrentUserMenuConfigSchema,
14580
+ CurrentUserMenuControlItemSchema,
14581
+ CurrentUserMenuDisplayTextSchema,
14582
+ CurrentUserMenuItemSchema,
14583
+ CurrentUserMenuNavigationItemSchema,
14584
+ CurrentUserMenuProfileSchema,
14585
+ CurrentUserMenuSectionSchema,
13678
14586
  DEFAULT_CONDUCTOR_OWNER_EMAIL,
13679
14587
  DataContinuityEnvelopeSchema,
13680
14588
  DeclarationGraphEdgeSchema,
@@ -13689,10 +14597,40 @@ export {
13689
14597
  IsoDateTimeSchema,
13690
14598
  JsonObjectSchema,
13691
14599
  JsonValueSchema,
14600
+ LEGACY_CURRENT_USER_MENU_ITEM_IDS,
13692
14601
  LineageRecordSchema,
13693
14602
  LocaleIdentifierSchema,
13694
14603
  LocalizedTextSchema,
14604
+ MENU_ACTIVATION_QUERY_PARAMETER,
14605
+ MENU_CONTRACT_VERSION,
14606
+ MENU_MAX_DEFINITIONS,
14607
+ MENU_MAX_INPUT_BYTES,
14608
+ MENU_MAX_INPUT_VALUES,
14609
+ MENU_MAX_NODES,
14610
+ MENU_MAX_TREE_DEPTH,
13695
14611
  MONKEYS_REQUIRED_THEME_TOKEN_PATHS,
14612
+ MenuAccessRequirementSchema,
14613
+ MenuActionBehaviorSchema,
14614
+ MenuActionRegistrationSchema,
14615
+ MenuBehaviorSchema,
14616
+ MenuBoundedInputSchema,
14617
+ MenuCompilationError,
14618
+ MenuContributionProviderRegistrationSchema,
14619
+ MenuContributionResultSchema,
14620
+ MenuContributionSchema,
14621
+ MenuDefinitionSchema,
14622
+ MenuDefinitionSetSchema,
14623
+ MenuDividerNodeSchema,
14624
+ MenuGroupNodeSchema,
14625
+ MenuItemNodeSchema,
14626
+ MenuNavigateBehaviorSchema,
14627
+ MenuNavigationTargetSchema,
14628
+ MenuNodeSchema,
14629
+ MenuPageRefSchema,
14630
+ MenuPageRegistrationSchema,
14631
+ MenuRuntimeBundleSchema,
14632
+ MenuRuntimeInputBindingSchema,
14633
+ MenuSourceInputBindingSchema,
13696
14634
  OntologyDefinitionSchema,
13697
14635
  OutputRecordSchema,
13698
14636
  OverlayNodeSchema,
@@ -13796,6 +14734,7 @@ export {
13796
14734
  canonicalContractSchemas,
13797
14735
  compileCapabilityRegistry,
13798
14736
  compileConductorWorkflowDefinition,
14737
+ compileMenuRuntimeBundle,
13799
14738
  compilePageRuntimeProjection,
13800
14739
  compileProductDeclaration,
13801
14740
  compileProductRuntimeCatalog,
@@ -13819,6 +14758,7 @@ export {
13819
14758
  getAgentSessionRuntimeCapabilities,
13820
14759
  isAgentResourceModeCompatible,
13821
14760
  isAgentSessionTerminalStatus,
14761
+ isCompiledMenuItemSelected,
13822
14762
  mergeThemeTokenDocuments,
13823
14763
  normalizeAgentExecutionMode,
13824
14764
  normalizeAgentMode,
@@ -13826,9 +14766,12 @@ export {
13826
14766
  projectAgentSessionEvents,
13827
14767
  publishOpenApiToolCapabilityManifests,
13828
14768
  readApplicationHandoffFromUrl,
14769
+ readMenuActivationFromSearch,
13829
14770
  resolveAgentSessionCommandTransition,
14771
+ resolveMenuActivationId,
13830
14772
  resolveThemeTokens,
13831
14773
  serializeApplicationHandoff,
14774
+ serializeMenuActivationSearch,
13832
14775
  toAgentSessionViewModel,
13833
14776
  validateDomainCommand,
13834
14777
  validateThemeTokensDocument,