@productmaker/mcp 12.4.0 → 12.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/http.js +534 -533
  2. package/dist/stdio.js +534 -533
  3. package/package.json +3 -3
package/dist/stdio.js CHANGED
@@ -156,7 +156,7 @@ var FrankensteinSourceProviderSchema = z2.enum([
156
156
  "meta",
157
157
  "upload"
158
158
  ]);
159
- var FrankensteinSourceUploadIdSchema = z2.string().uuid();
159
+ var FrankensteinSourceUploadIdSchema = z2.string().guid();
160
160
  var FrankensteinSourceUploadPresignRequestSchema = z2.object({
161
161
  fileName: z2.string().trim().min(1).max(255),
162
162
  contentType: z2.enum([
@@ -3957,8 +3957,8 @@ var AiEditJobSchema = z5.object({
3957
3957
  tier: AiEditTierSchema.default(DEFAULT_AI_EDIT_TIER),
3958
3958
  /** Explicit false suppresses generated music; absent keeps the legacy default. */
3959
3959
  music: z5.boolean().optional(),
3960
- editId: z5.string().uuid(),
3961
- taskId: z5.string().uuid(),
3960
+ editId: z5.string().guid(),
3961
+ taskId: z5.string().guid(),
3962
3962
  angleKey: z5.string().min(1),
3963
3963
  sourceVideoUrl: z5.string().url(),
3964
3964
  /** Medidas del video entregado (Grok 480p/720p también existen). */
@@ -4284,7 +4284,7 @@ var ProductReferencePreviewSchema = z9.object({
4284
4284
  isAuthoritative: z9.boolean()
4285
4285
  });
4286
4286
  var ApprovedProductReferencesSchema = z9.object({
4287
- scopeSnapshotId: z9.string().uuid(),
4287
+ scopeSnapshotId: z9.string().guid(),
4288
4288
  scopeHash: z9.string().min(1).max(128),
4289
4289
  previews: z9.array(ProductReferencePreviewSchema).min(1)
4290
4290
  });
@@ -4296,8 +4296,8 @@ var ProductReferencePendingActionSchema = z9.object({
4296
4296
  ]).default("final"),
4297
4297
  scope: ProductReferenceScopeSchema,
4298
4298
  scopeKey: z9.string().min(1).max(120),
4299
- referenceVersionId: z9.string().uuid(),
4300
- scopeSnapshotId: z9.string().uuid(),
4299
+ referenceVersionId: z9.string().guid(),
4300
+ scopeSnapshotId: z9.string().guid(),
4301
4301
  baseReferenceSetHash: z9.string().min(1).max(128),
4302
4302
  scopeHash: z9.string().min(1).max(128),
4303
4303
  approvedRefKeys: z9.array(z9.string().min(1).max(200)).min(1),
@@ -4338,7 +4338,7 @@ var ResolutionEnvelopeSchema = z9.object({
4338
4338
  expectedScopeHash: z9.string().min(1).max(128),
4339
4339
  scope: ProductReferenceScopeSchema,
4340
4340
  scopeKey: z9.string().min(1).max(120),
4341
- scopeSnapshotId: z9.string().uuid()
4341
+ scopeSnapshotId: z9.string().guid()
4342
4342
  });
4343
4343
  var ResolveProductReferenceSetRequestSchema = z9.discriminatedUnion("decision", [
4344
4344
  ResolutionEnvelopeSchema.extend({
@@ -4388,8 +4388,8 @@ var ResolveProductReferenceSetRequestSchema = z9.discriminatedUnion("decision",
4388
4388
  });
4389
4389
  var ResolveProductReferenceSetResponseSchema = z9.object({
4390
4390
  success: z9.literal(true),
4391
- taskId: z9.string().uuid(),
4392
- resolutionId: z9.string().uuid(),
4391
+ taskId: z9.string().guid(),
4392
+ resolutionId: z9.string().guid(),
4393
4393
  decision: ProductReferenceResolutionDecisionSchema
4394
4394
  });
4395
4395
  var ProductReferenceResolutionSchema = z9.object({
@@ -4427,7 +4427,7 @@ var ReferencePreparationPlanSchema = z9.object({
4427
4427
  reusableOutputs: z9.array(z9.object({
4428
4428
  outputKey: z9.string().min(1).max(200),
4429
4429
  refKey: z9.string().min(1).max(200),
4430
- sourceSnapshotId: z9.string().uuid()
4430
+ sourceSnapshotId: z9.string().guid()
4431
4431
  })),
4432
4432
  execution: z9.object({
4433
4433
  inputKeys: z9.array(z9.string().min(1)),
@@ -4963,7 +4963,7 @@ var ProductPhysicalDetails = z10.object({
4963
4963
  contentAppearance: z10.string().optional()
4964
4964
  });
4965
4965
  var Product = z10.object({
4966
- id: z10.string().uuid().optional(),
4966
+ id: z10.string().guid().optional(),
4967
4967
  title: z10.string(),
4968
4968
  url: z10.string().optional(),
4969
4969
  // Free-video tasks intentionally skip product extraction and may have no
@@ -5883,7 +5883,8 @@ var LANDING_STRATEGIES = [
5883
5883
  var LandingStrategySchema = z14.enum(LANDING_STRATEGIES);
5884
5884
  var SELECTABLE_LANDING_STRATEGIES = [
5885
5885
  "classic",
5886
- "social_proof"
5886
+ "social_proof",
5887
+ "pain_solution"
5887
5888
  ];
5888
5889
  var SelectableLandingStrategySchema = z14.enum(SELECTABLE_LANDING_STRATEGIES);
5889
5890
  var EffectiveLandingStrategySchema = LandingStrategySchema.exclude([
@@ -6031,7 +6032,7 @@ var LandingImageReadable = z15.object({
6031
6032
  */
6032
6033
  index: z15.number().int().min(1).max(20),
6033
6034
  /** Child task that owns this image when variants are rendered alongside the root task. */
6034
- variantTaskId: z15.string().uuid().optional(),
6035
+ variantTaskId: z15.string().guid().optional(),
6035
6036
  /**
6036
6037
  * The image's own `indexNum` within its OWN task (root or variant) — set
6037
6038
  * once at render time and never recomputed. Unlike `index`, this is stable
@@ -6164,6 +6165,13 @@ var CODE_LANDING_USAGE_VARIANTS = [
6164
6165
  "steps"
6165
6166
  ];
6166
6167
  var CodeLandingUsageVariantSchema = z16.enum(CODE_LANDING_USAGE_VARIANTS);
6168
+ var CODE_LANDING_BUY_BOX_FORMATS = [
6169
+ "classic",
6170
+ "benefits",
6171
+ "impact",
6172
+ "pop"
6173
+ ];
6174
+ var CodeLandingBuyBoxFormatSchema = z16.enum(CODE_LANDING_BUY_BOX_FORMATS);
6167
6175
  var CodeLandingRecipeVariantsSchema = z16.object({
6168
6176
  hero: CodeLandingHeroVariantSchema,
6169
6177
  "benefits-grid": CodeLandingBenefitsVariantSchema,
@@ -6204,7 +6212,8 @@ var CodeLandingRecipePlanFields = {
6204
6212
  var CodeLandingRecipeProposalSchema = z16.object(CodeLandingRecipePlanFields).strict();
6205
6213
  var CodeLandingRecipePlanObjectSchema = z16.object({
6206
6214
  version: z16.literal(1),
6207
- ...CodeLandingRecipePlanFields
6215
+ ...CodeLandingRecipePlanFields,
6216
+ buyBoxFormat: CodeLandingBuyBoxFormatSchema.optional()
6208
6217
  }).strict();
6209
6218
  function hasDuplicateIds(ids) {
6210
6219
  return new Set(ids).size !== ids.length;
@@ -6234,7 +6243,7 @@ var JsonValueSchema = z16.lazy(() => z16.union([
6234
6243
  z16.boolean(),
6235
6244
  z16.null(),
6236
6245
  z16.array(JsonValueSchema),
6237
- z16.custom(isPlainJsonRecord, "content objects must be plain JSON records").pipe(z16.record(JsonValueSchema))
6246
+ z16.custom(isPlainJsonRecord, "content objects must be plain JSON records").pipe(z16.record(z16.string(), JsonValueSchema))
6238
6247
  ]));
6239
6248
  var CodeLandingRecipeSelectionSchema = z16.object({
6240
6249
  blockId: z16.string().trim().min(1),
@@ -6693,7 +6702,7 @@ var PresignUploadResponse = z19.object({
6693
6702
  /** Present only for purpose=service. */
6694
6703
  assetToken: z19.string().min(1).optional(),
6695
6704
  /** Present only for purpose=meta_staging. */
6696
- stagingAssetId: z19.string().uuid().optional()
6705
+ stagingAssetId: z19.string().guid().optional()
6697
6706
  });
6698
6707
  var MetaUploadMediaKind = z19.enum([
6699
6708
  "image",
@@ -6703,7 +6712,7 @@ var MetaUploadMediaKind = z19.enum([
6703
6712
  var META_UPLOAD_MAX_FILES = CAMPAIGN_LIMITS.MAX_CREATIVES;
6704
6713
  var META_UPLOAD_IMAGE_MAX_FILES = 5;
6705
6714
  var MetaUploadAssetSummary = z19.object({
6706
- stagingAssetId: z19.string().uuid(),
6715
+ stagingAssetId: z19.string().guid(),
6707
6716
  mediaKind: MediaKind
6708
6717
  }).strict();
6709
6718
  var MetaCampaignType = z19.enum([
@@ -6711,7 +6720,7 @@ var MetaCampaignType = z19.enum([
6711
6720
  "traffic",
6712
6721
  "engagement"
6713
6722
  ]);
6714
- var MetaPublishAttemptId = z19.string().uuid();
6723
+ var MetaPublishAttemptId = z19.string().guid();
6715
6724
  var MetaOptimizationMode = z19.enum([
6716
6725
  "advantage_plus",
6717
6726
  "manual"
@@ -6784,14 +6793,14 @@ var ResolveMetaUploadSessionRequest = z19.object({
6784
6793
  /** Opaque signed token embedded in the one-click upload page URL. */
6785
6794
  token: z19.string().min(1).max(4096),
6786
6795
  /** Stable browser-generated id so failed PUT retries reuse the same slot. */
6787
- uploadId: z19.string().uuid().optional(),
6796
+ uploadId: z19.string().guid().optional(),
6788
6797
  /** Browser-selected metadata; the API checks it against the session kind/role. */
6789
6798
  contentType: z19.enum(META_STAGING_CONTENT_TYPES),
6790
6799
  fileName: z19.string().min(1).max(255),
6791
6800
  fileSize: z19.number().int().positive().max(CAMPAIGN_LIMITS.MAX_FILE_SIZE_BYTES)
6792
6801
  }).strict();
6793
6802
  var MetaUploadSessionResponse = z19.object({
6794
- sessionId: z19.string().uuid(),
6803
+ sessionId: z19.string().guid(),
6795
6804
  uploadPageUrl: HttpUrl,
6796
6805
  mediaKind: MetaUploadMediaKind,
6797
6806
  assetRole: z19.enum([
@@ -6803,18 +6812,18 @@ var MetaUploadSessionResponse = z19.object({
6803
6812
  }).strict();
6804
6813
  var ResolveMetaUploadSessionResponse = z19.object({
6805
6814
  uploadUrl: z19.string().url(),
6806
- stagingAssetId: z19.string().uuid(),
6815
+ stagingAssetId: z19.string().guid(),
6807
6816
  expiresAt: z19.string().datetime()
6808
6817
  }).strict();
6809
6818
  var MetaUploadSessionStatusResponse = z19.object({
6810
- sessionId: z19.string().uuid(),
6819
+ sessionId: z19.string().guid(),
6811
6820
  status: z19.enum([
6812
6821
  "pending",
6813
6822
  "uploaded"
6814
6823
  ]),
6815
6824
  assets: z19.array(MetaUploadAssetSummary).max(META_UPLOAD_MAX_FILES),
6816
6825
  /** Legacy single-file response field retained for older callers. */
6817
- stagingAssetId: z19.string().uuid().optional()
6826
+ stagingAssetId: z19.string().guid().optional()
6818
6827
  }).strict();
6819
6828
  var MetaAdAccountId = z19.string().trim().min(1, "Debes seleccionar una cuenta publicitaria").transform((value) => /^\d+$/.test(value) ? `act_${value}` : value).refine((value) => /^act_\d+$/.test(value), {
6820
6829
  message: 'adAccountId must look like "act_1234567890" (a bare numeric id is also accepted)'
@@ -6894,6 +6903,33 @@ var MetaCampaignDefaults = MetaCampaignConfigBase.omit({
6894
6903
  */
6895
6904
  currency: z19.string().length(3).regex(/^[A-Z]{3}$/).nullable().optional()
6896
6905
  });
6906
+ function refineMetaCreativeSources(value, ctx) {
6907
+ value.creatives.forEach((creative, index) => {
6908
+ if (Boolean(creative.mediaUrl) === Boolean(creative.mediaAssetId)) {
6909
+ ctx.addIssue({
6910
+ code: z19.ZodIssueCode.custom,
6911
+ path: [
6912
+ "creatives",
6913
+ index,
6914
+ "mediaUrl"
6915
+ ],
6916
+ message: "Provide exactly one of mediaUrl or mediaAssetId"
6917
+ });
6918
+ }
6919
+ if (creative.thumbnailUrl && creative.thumbnailAssetId) {
6920
+ ctx.addIssue({
6921
+ code: z19.ZodIssueCode.custom,
6922
+ path: [
6923
+ "creatives",
6924
+ index,
6925
+ "thumbnailUrl"
6926
+ ],
6927
+ message: "Provide at most one of thumbnailUrl or thumbnailAssetId"
6928
+ });
6929
+ }
6930
+ });
6931
+ }
6932
+ __name(refineMetaCreativeSources, "refineMetaCreativeSources");
6897
6933
  var UploadToMetaRequest = z19.object({
6898
6934
  /** Caller-owned retry fence. Required before any provider operation. */
6899
6935
  publishAttemptId: MetaPublishAttemptId,
@@ -6907,7 +6943,7 @@ var UploadToMetaRequest = z19.object({
6907
6943
  /** Legacy public URL; new Meta flows should use mediaAssetId. */
6908
6944
  mediaUrl: HttpUrl.optional(),
6909
6945
  /** Owner-scoped temporary asset created by the Meta staging upload flow. */
6910
- mediaAssetId: z19.string().uuid().optional(),
6946
+ mediaAssetId: z19.string().guid().optional(),
6911
6947
  /**
6912
6948
  * Public URL of an extracted thumbnail. Required for video ads — Meta
6913
6949
  * rejects video ad creatives without `image_hash`/`image_url` in
@@ -6916,7 +6952,7 @@ var UploadToMetaRequest = z19.object({
6916
6952
  */
6917
6953
  thumbnailUrl: HttpUrl.optional(),
6918
6954
  /** Owner-scoped temporary thumbnail created by the Meta staging upload flow. */
6919
- thumbnailAssetId: z19.string().uuid().optional()
6955
+ thumbnailAssetId: z19.string().guid().optional()
6920
6956
  })).min(1).max(CAMPAIGN_LIMITS.MAX_CREATIVES),
6921
6957
  /** Meta Ad Account ID */
6922
6958
  adAccountId: MetaAdAccountId,
@@ -6943,30 +6979,7 @@ var UploadToMetaRequest = z19.object({
6943
6979
  message: "landingUrl is required for landing destinations"
6944
6980
  });
6945
6981
  }
6946
- value.creatives.forEach((creative, index) => {
6947
- if (Boolean(creative.mediaUrl) === Boolean(creative.mediaAssetId)) {
6948
- ctx.addIssue({
6949
- code: z19.ZodIssueCode.custom,
6950
- path: [
6951
- "creatives",
6952
- index,
6953
- "mediaUrl"
6954
- ],
6955
- message: "Provide exactly one of mediaUrl or mediaAssetId"
6956
- });
6957
- }
6958
- if (creative.thumbnailUrl && creative.thumbnailAssetId) {
6959
- ctx.addIssue({
6960
- code: z19.ZodIssueCode.custom,
6961
- path: [
6962
- "creatives",
6963
- index,
6964
- "thumbnailUrl"
6965
- ],
6966
- message: "Provide at most one of thumbnailUrl or thumbnailAssetId"
6967
- });
6968
- }
6969
- });
6982
+ refineMetaCreativeSources(value, ctx);
6970
6983
  });
6971
6984
  var CampaignLifetimeMetricsSchema = z19.object({
6972
6985
  spend: z19.number().nonnegative(),
@@ -7004,13 +7017,13 @@ var Revision = z20.number().finite().int().nonnegative();
7004
7017
  var ClassicLandingBlockSchema = z20.discriminatedUnion("kind", [
7005
7018
  z20.object({
7006
7019
  kind: z20.literal("image"),
7007
- ownerTaskId: z20.string().uuid(),
7020
+ ownerTaskId: z20.string().guid(),
7008
7021
  sourceIndex: z20.number().int().positive()
7009
7022
  }).strict(),
7010
7023
  z20.object({
7011
7024
  kind: z20.literal("gif"),
7012
- ownerTaskId: z20.string().uuid(),
7013
- gifId: z20.string().uuid()
7025
+ ownerTaskId: z20.string().guid(),
7026
+ gifId: z20.string().guid()
7014
7027
  }).strict()
7015
7028
  ]);
7016
7029
  function classicLandingBlockId(block) {
@@ -7033,17 +7046,17 @@ var Blocks = z20.array(ClassicLandingBlockSchema).max(100).superRefine((blocks,
7033
7046
  });
7034
7047
  var ClassicLandingDocumentSchema = z20.object({
7035
7048
  version: z20.literal(1),
7036
- ownerTaskId: z20.string().uuid(),
7049
+ ownerTaskId: z20.string().guid(),
7037
7050
  revision: Revision,
7038
7051
  blocks: Blocks
7039
7052
  }).strict();
7040
7053
  var LandingGifBlockSelectionSchema = z20.object({
7041
- ownerTaskId: z20.string().uuid(),
7042
- gifId: z20.string().uuid(),
7054
+ ownerTaskId: z20.string().guid(),
7055
+ gifId: z20.string().guid(),
7043
7056
  gifRevision: Revision
7044
7057
  }).strict();
7045
7058
  var ClassicLandingImageSelectionSchema = z20.object({
7046
- ownerTaskId: z20.string().uuid(),
7059
+ ownerTaskId: z20.string().guid(),
7047
7060
  sourceIndex: z20.number().int().positive(),
7048
7061
  variantIndex: z20.number().int().nonnegative()
7049
7062
  }).strict();
@@ -7094,7 +7107,7 @@ var ClassicLandingBlockMutationSchema = z20.object({
7094
7107
  blocks: Blocks
7095
7108
  }).strict();
7096
7109
  var LandingGifVisibilityMutationSchema = z20.object({
7097
- gifId: z20.string().uuid(),
7110
+ gifId: z20.string().guid(),
7098
7111
  expectedGifRevision: Revision,
7099
7112
  expectedDocumentRevision: Revision,
7100
7113
  action: z20.enum([
@@ -7880,7 +7893,7 @@ var CodeLandingProvenanceSchema = z23.object({
7880
7893
  editorGifOwnership: z23.object({
7881
7894
  version: z23.literal(1),
7882
7895
  source: z23.object({
7883
- ownerTaskId: z23.string().uuid(),
7896
+ ownerTaskId: z23.string().guid(),
7884
7897
  gifRevision: z23.number().int().nonnegative(),
7885
7898
  contentHash: z23.string().regex(/^[a-f0-9]{64}$/),
7886
7899
  posterHash: z23.string().regex(/^[a-f0-9]{64}$/)
@@ -7888,7 +7901,7 @@ var CodeLandingProvenanceSchema = z23.object({
7888
7901
  }).strict().optional(),
7889
7902
  mode: LandingDocumentModeSchema,
7890
7903
  strategyVersion: z23.string().min(1).max(60),
7891
- sourceTaskId: z23.string().uuid().optional(),
7904
+ sourceTaskId: z23.string().guid().optional(),
7892
7905
  winnerSourceUrl: CodeLandingUrlSchema.optional(),
7893
7906
  notes: z23.array(z23.string().max(240)).max(16),
7894
7907
  /**
@@ -8320,8 +8333,8 @@ var QuotedLandingEditRequest = z23.object({
8320
8333
  "full"
8321
8334
  ]),
8322
8335
  attachmentIds: z23.array(CodeLandingIdSchema).max(4).default([]),
8323
- quoteId: z23.string().uuid(),
8324
- idempotencyKey: z23.string().uuid()
8336
+ quoteId: z23.string().guid(),
8337
+ idempotencyKey: z23.string().guid()
8325
8338
  });
8326
8339
  var CreateLandingEditRequest = z23.union([
8327
8340
  QuotedLandingEditRequest,
@@ -8401,7 +8414,7 @@ var LandingEditDto = z23.object({
8401
8414
  costCents: z23.number(),
8402
8415
  error: z23.string().nullable(),
8403
8416
  createdAt: z23.string(),
8404
- operationId: z23.string().uuid().nullable().optional(),
8417
+ operationId: z23.string().guid().nullable().optional(),
8405
8418
  expectedRevision: z23.number().int().nonnegative().optional(),
8406
8419
  appliedRevision: z23.number().int().positive().nullable().optional(),
8407
8420
  refundStatus: z23.enum([
@@ -8416,14 +8429,24 @@ var LandingEditDto = z23.object({
8416
8429
  commerceReconciliation: CommerceReconciliationSchema.nullable().optional(),
8417
8430
  delivery: z23.lazy(() => LandingEditDeliverySchema).optional(),
8418
8431
  /** Photos the seller attached to this message (see LandingEditAttachmentDto). */
8419
- attachmentIds: z23.array(z23.string().uuid()).max(4).optional()
8432
+ attachmentIds: z23.array(z23.string().guid()).max(4).optional()
8420
8433
  });
8421
8434
  var LandingEditAttachmentDto = z23.object({
8422
- id: z23.string().uuid(),
8435
+ id: z23.string().guid(),
8423
8436
  url: z23.string().url(),
8424
8437
  width: z23.number().int().positive().nullable(),
8425
8438
  height: z23.number().int().positive().nullable()
8426
8439
  });
8440
+ var ApplyLandingCarouselGifRequest = z23.object({
8441
+ attachmentId: z23.string().uuid(),
8442
+ expectedRevision: z23.number().int().nonnegative(),
8443
+ idempotencyKey: z23.string().uuid()
8444
+ }).strict();
8445
+ var ApplyLandingCarouselGifResponse = z23.object({
8446
+ artifact: CodeLandingArtifactSchema,
8447
+ appliedRevision: z23.number().int().positive(),
8448
+ replayed: z23.boolean()
8449
+ });
8427
8450
  var UploadLandingEditAttachmentResponse = z23.object({
8428
8451
  attachment: LandingEditAttachmentDto
8429
8452
  });
@@ -8445,12 +8468,12 @@ var LandingEditQuoteRequest = z23.object({
8445
8468
  attachmentIds: z23.array(CodeLandingIdSchema).max(4).default([])
8446
8469
  });
8447
8470
  var LandingEditSubmitRequest = LandingEditQuoteRequest.extend({
8448
- quoteId: z23.string().uuid(),
8449
- idempotencyKey: z23.string().uuid()
8471
+ quoteId: z23.string().guid(),
8472
+ idempotencyKey: z23.string().guid()
8450
8473
  });
8451
8474
  var LandingOperationQuoteDto = z23.object({
8452
8475
  editPlanSummary: z23.lazy(() => LandingEditPlanSummarySchema).optional(),
8453
- id: z23.string().uuid(),
8476
+ id: z23.string().guid(),
8454
8477
  kind: z23.enum([
8455
8478
  "edit_patch",
8456
8479
  "edit_full",
@@ -8472,7 +8495,7 @@ var LandingRevisionHistoryItemDto = z23.object({
8472
8495
  parentRevision: z23.number().int().positive().nullable(),
8473
8496
  source: z23.string().min(1),
8474
8497
  summary: z23.string().nullable(),
8475
- editId: z23.string().uuid().nullable(),
8498
+ editId: z23.string().guid().nullable(),
8476
8499
  createdAt: z23.string().datetime(),
8477
8500
  isActive: z23.boolean(),
8478
8501
  isRedoTarget: z23.boolean(),
@@ -8518,7 +8541,7 @@ var LandingGifSourceSchema = z24.discriminatedUnion("kind", [
8518
8541
  z24.object({
8519
8542
  kind: z24.literal("generated"),
8520
8543
  referenceSelectionRevision: Revision2,
8521
- referenceImageAssetId: z24.string().uuid().optional(),
8544
+ referenceImageAssetId: z24.string().guid().optional(),
8522
8545
  motionBrief: z24.string().trim().min(1).max(1500)
8523
8546
  }).strict()
8524
8547
  ]);
@@ -8543,7 +8566,7 @@ var ReuseIdentity = z24.object({
8543
8566
  byteSize: z24.number().finite().int().positive().max(50 * 1024 * 1024),
8544
8567
  contentHash: Hash,
8545
8568
  provenance: z24.object({
8546
- taskId: z24.string().uuid(),
8569
+ taskId: z24.string().guid(),
8547
8570
  scanId: z24.string().min(1).max(200).optional(),
8548
8571
  sourceUrl: z24.string().url().max(4096).optional(),
8549
8572
  externalAdId: z24.string().min(1).max(200).optional()
@@ -8573,7 +8596,7 @@ var LandingGifReuseCandidateSchema = z24.discriminatedUnion("kind", [
8573
8596
  var GeneratedResolvedSourceSchema = z24.object({
8574
8597
  kind: z24.literal("generated"),
8575
8598
  referenceSelectionRevision: Revision2,
8576
- referenceImageAssetId: z24.string().uuid().optional(),
8599
+ referenceImageAssetId: z24.string().guid().optional(),
8577
8600
  referenceKeys: z24.array(StorageKey).min(1).max(4),
8578
8601
  identityReferenceKeys: z24.array(StorageKey).min(1).max(4).optional(),
8579
8602
  identityReferenceFingerprint: Hash.optional(),
@@ -8595,7 +8618,7 @@ var AutomaticResolvedSourceSchema = GeneratedResolvedSourceSchema.omit({
8595
8618
  referenceImageAssetId: true
8596
8619
  }).extend({
8597
8620
  kind: z24.literal("automatic"),
8598
- ownerTaskId: z24.string().uuid(),
8621
+ ownerTaskId: z24.string().guid(),
8599
8622
  productName: z24.string().min(1).max(500),
8600
8623
  productTruth: JsonValueSchema.optional(),
8601
8624
  useSheet: JsonValueSchema.optional(),
@@ -8659,7 +8682,7 @@ var LandingGifPlacementSchema = z24.discriminatedUnion("kind", [
8659
8682
  }).strict(),
8660
8683
  z24.object({
8661
8684
  kind: z24.literal("classic"),
8662
- ownerTaskId: z24.string().uuid(),
8685
+ ownerTaskId: z24.string().guid(),
8663
8686
  afterSourceIndex: z24.number().finite().int().min(1)
8664
8687
  }).strict(),
8665
8688
  z24.object({
@@ -8674,7 +8697,7 @@ var LandingGifCreateRequestSchema = z24.object({
8674
8697
  placement: LandingGifPlacementSchema,
8675
8698
  expectedLandingRevision: Revision2,
8676
8699
  expectedGifRevision: Revision2,
8677
- gifId: z24.string().uuid().optional(),
8700
+ gifId: z24.string().guid().optional(),
8678
8701
  expectedDocumentRevision: Revision2.optional()
8679
8702
  }).strict().superRefine((request, ctx) => {
8680
8703
  if (request.gifId === void 0 !== (request.expectedDocumentRevision === void 0)) {
@@ -8714,7 +8737,7 @@ var LandingGifCreateRequestSchema = z24.object({
8714
8737
  });
8715
8738
  var LandingGifSubmitRequestSchema = z24.object({
8716
8739
  request: LandingGifCreateRequestSchema,
8717
- quoteId: z24.string().uuid(),
8740
+ quoteId: z24.string().guid(),
8718
8741
  idempotencyKey: z24.string().trim().min(1).max(200)
8719
8742
  }).strict();
8720
8743
  var LandingGifRemoveRequestSchema = z24.object({
@@ -8750,17 +8773,17 @@ var LandingGifStoredDescriptorSchema = GifTechnicalMetadataSchema.extend({
8750
8773
  quality: LandingGifQualitySchema
8751
8774
  }).strict();
8752
8775
  var LandingGifReadableSchema = LandingGifStoredDescriptorSchema.extend({
8753
- ownerTaskId: z24.string().uuid(),
8776
+ ownerTaskId: z24.string().guid(),
8754
8777
  gifRevision: Revision2,
8755
8778
  gifUrl: z24.string().url(),
8756
8779
  posterUrl: z24.string().url()
8757
8780
  }).strict();
8758
8781
  var LandingGifSelectionSchema = z24.object({
8759
- ownerTaskId: z24.string().uuid(),
8782
+ ownerTaskId: z24.string().guid(),
8760
8783
  gifRevision: Revision2
8761
8784
  }).strict();
8762
8785
  var LandingGifOperationStatusSchema = z24.object({
8763
- operationId: z24.string().uuid(),
8786
+ operationId: z24.string().guid(),
8764
8787
  status: z24.enum([
8765
8788
  "reserved",
8766
8789
  "queued",
@@ -8782,13 +8805,13 @@ var LandingGifOperationStatusSchema = z24.object({
8782
8805
  reservedUserCents: z24.number().finite().int().nonnegative()
8783
8806
  }).strict();
8784
8807
  var LandingGifUseProposalSchema = z24.object({
8785
- id: z24.string().uuid(),
8786
- gifId: z24.string().uuid(),
8808
+ id: z24.string().guid(),
8809
+ gifId: z24.string().guid(),
8787
8810
  idea: z24.string().trim().min(1).max(300),
8788
8811
  motionBrief: z24.string().trim().min(1).max(1500),
8789
8812
  productFingerprint: Hash,
8790
8813
  referenceFingerprint: Hash.nullable(),
8791
- referenceImageAssetId: z24.string().uuid().optional(),
8814
+ referenceImageAssetId: z24.string().guid().optional(),
8792
8815
  referenceImageAssetKey: StorageKey.optional(),
8793
8816
  referenceImageUrl: z24.string().url().optional(),
8794
8817
  identityReferenceKeys: z24.array(StorageKey).min(1).max(4).optional(),
@@ -8809,8 +8832,8 @@ var LandingGifStateSchema = z24.enum([
8809
8832
  "removed"
8810
8833
  ]);
8811
8834
  var LandingGifItemSchema = z24.object({
8812
- gifId: z24.string().uuid(),
8813
- ownerTaskId: z24.string().uuid(),
8835
+ gifId: z24.string().guid(),
8836
+ ownerTaskId: z24.string().guid(),
8814
8837
  gifRevision: Revision2,
8815
8838
  state: LandingGifStateSchema,
8816
8839
  /** Server-derived compatibility for an already delivered singular primary. */
@@ -8850,8 +8873,8 @@ function isDeliverableLandingGif(item) {
8850
8873
  }
8851
8874
  __name(isDeliverableLandingGif, "isDeliverableLandingGif");
8852
8875
  var InitialLandingGifStatusSchema = z24.object({
8853
- intentId: z24.string().uuid(),
8854
- gifId: z24.string().uuid(),
8876
+ intentId: z24.string().guid(),
8877
+ gifId: z24.string().guid(),
8855
8878
  status: z24.enum([
8856
8879
  "funded",
8857
8880
  "awaiting_usage",
@@ -8867,7 +8890,7 @@ var InitialLandingGifStatusSchema = z24.object({
8867
8890
  refundStatus: LandingGifOperationStatusSchema.shape.refundStatus
8868
8891
  }).strict();
8869
8892
  var LandingGifCollectionResponseSchema = z24.object({
8870
- ownerTaskId: z24.string().uuid(),
8893
+ ownerTaskId: z24.string().guid(),
8871
8894
  landingRevision: Revision2,
8872
8895
  document: ClassicLandingDocumentSchema,
8873
8896
  gifs: z24.array(LandingGifItemSchema).max(100),
@@ -8881,15 +8904,15 @@ var LandingGifCollectionResponseSchema = z24.object({
8881
8904
  }
8882
8905
  });
8883
8906
  var LandingGifTargetSchema = z24.object({
8884
- gifId: z24.string().uuid(),
8907
+ gifId: z24.string().guid(),
8885
8908
  expectedGifRevision: Revision2
8886
8909
  }).strict();
8887
8910
  var LandingGifProposalRequestSchema = z24.object({
8888
- gifId: z24.string().uuid().optional(),
8911
+ gifId: z24.string().guid().optional(),
8889
8912
  expectedDocumentRevision: Revision2,
8890
8913
  afterBlockId: z24.string().min(1).max(300).optional(),
8891
8914
  merchantIdea: z24.string().trim().min(8).max(300).optional(),
8892
- referenceImageAssetId: z24.string().uuid().nullable().optional()
8915
+ referenceImageAssetId: z24.string().guid().nullable().optional()
8893
8916
  }).strict();
8894
8917
  var LandingGifQuoteResponseSchema = z24.object({
8895
8918
  quote: LandingOperationQuoteDto.extend({
@@ -8900,7 +8923,7 @@ var LandingGifCreateResponseSchema = z24.object({
8900
8923
  operation: LandingGifOperationStatusSchema
8901
8924
  }).strict();
8902
8925
  var LandingGifStatusResponseSchema = z24.object({
8903
- ownerTaskId: z24.string().uuid(),
8926
+ ownerTaskId: z24.string().guid(),
8904
8927
  landingRevision: Revision2,
8905
8928
  gifRevision: Revision2,
8906
8929
  demoGif: LandingGifReadableSchema.nullable(),
@@ -8938,9 +8961,9 @@ var LandingGifPresentationResponseSchema = z24.object({
8938
8961
  }).strict();
8939
8962
  var LandingGifCompletionReceiptBase = z24.object({
8940
8963
  version: z24.literal(1),
8941
- operationId: z24.string().uuid(),
8942
- taskId: z24.string().uuid(),
8943
- stepId: z24.string().uuid(),
8964
+ operationId: z24.string().guid(),
8965
+ taskId: z24.string().guid(),
8966
+ stepId: z24.string().guid(),
8944
8967
  stepEpoch: Revision2,
8945
8968
  acceptedGifRevision: z24.number().finite().int().positive(),
8946
8969
  gifAssetKey: z24.string().min(1),
@@ -8952,7 +8975,7 @@ var LandingGifCompletionReceiptSchema = z24.discriminatedUnion("version", [
8952
8975
  LandingGifCompletionReceiptBase,
8953
8976
  LandingGifCompletionReceiptBase.extend({
8954
8977
  version: z24.literal(2),
8955
- gifId: z24.string().uuid(),
8978
+ gifId: z24.string().guid(),
8956
8979
  disposition: z24.enum([
8957
8980
  "activated",
8958
8981
  "retained"
@@ -9253,7 +9276,7 @@ var VideoCreativeContext = z27.object({
9253
9276
  productTitle: z27.string(),
9254
9277
  primaryAngle: z27.string(),
9255
9278
  buyerPersona: z27.string().optional(),
9256
- brandId: z27.string().uuid().optional(),
9279
+ brandId: z27.string().guid().optional(),
9257
9280
  features: z27.array(z27.string()).default([]),
9258
9281
  scriptNotes: z27.string().optional(),
9259
9282
  cta: z27.string().optional(),
@@ -9412,19 +9435,19 @@ var ImageCreativeJobStatusEnum = z27.enum([
9412
9435
  "error"
9413
9436
  ]);
9414
9437
  var ImageCreativeJobStatus = z27.object({
9415
- jobId: z27.string().uuid(),
9438
+ jobId: z27.string().guid(),
9416
9439
  status: ImageCreativeJobStatusEnum,
9417
9440
  error: z27.string().optional(),
9418
9441
  result: ImageCreativeResult.nullable().optional(),
9419
9442
  request: ImageCreativeEditableRequest.optional()
9420
9443
  });
9421
9444
  var ImageCreativeJobPayload = z27.object({
9422
- jobId: z27.string().uuid(),
9445
+ jobId: z27.string().guid(),
9423
9446
  status: ImageCreativeJobStatusEnum,
9424
9447
  replayed: z27.boolean().optional()
9425
9448
  });
9426
9449
  var ImageCreativeHistoryEntry = z27.object({
9427
- id: z27.string().uuid(),
9450
+ id: z27.string().guid(),
9428
9451
  createdAt: z27.string().datetime(),
9429
9452
  status: ImageCreativeJobStatusEnum,
9430
9453
  result: ImageCreativeResult.nullable(),
@@ -9444,27 +9467,27 @@ var LandingCreativeResult = z27.object({
9444
9467
  createdAt: z27.string().datetime().optional()
9445
9468
  });
9446
9469
  var LandingCreativeJobStatus = z27.object({
9447
- jobId: z27.string().uuid(),
9470
+ jobId: z27.string().guid(),
9448
9471
  status: LandingCreativeJobStatusEnum,
9449
9472
  error: z27.string().optional(),
9450
9473
  result: LandingCreativeResult.nullable().optional()
9451
9474
  });
9452
9475
  var LandingCreativeJobPayload = z27.object({
9453
- jobId: z27.string().uuid(),
9476
+ jobId: z27.string().guid(),
9454
9477
  status: LandingCreativeJobStatusEnum,
9455
9478
  replayed: z27.boolean().optional()
9456
9479
  });
9457
9480
  var LandingCreativeHistoryEntry = z27.object({
9458
- id: z27.string().uuid(),
9481
+ id: z27.string().guid(),
9459
9482
  createdAt: z27.string().datetime(),
9460
9483
  status: LandingCreativeJobStatusEnum,
9461
9484
  result: LandingCreativeResult.nullable(),
9462
9485
  error: z27.string().optional()
9463
9486
  });
9464
9487
  var CreativeGeneratorJob = z27.object({
9465
- taskId: z27.string().uuid(),
9488
+ taskId: z27.string().guid(),
9466
9489
  /** Immutable approved product-reference snapshot consumed by the worker. */
9467
- referenceVersionId: z27.string().uuid().optional(),
9490
+ referenceVersionId: z27.string().guid().optional(),
9468
9491
  cleanImagesWaitAttempt: z27.number().int().nonnegative().optional()
9469
9492
  });
9470
9493
  var ImageCreativeEditStatus = z27.enum([
@@ -9480,8 +9503,8 @@ var ImageCreativeRegenerateRequest = z27.object({
9480
9503
  });
9481
9504
  var ImageCreativeEditStatusResponse = z27.object({
9482
9505
  ok: z27.literal(true),
9483
- operationId: z27.string().uuid(),
9484
- taskId: z27.string().uuid(),
9506
+ operationId: z27.string().guid(),
9507
+ taskId: z27.string().guid(),
9485
9508
  variantIndex: z27.number().int().nonnegative(),
9486
9509
  status: ImageCreativeEditStatus,
9487
9510
  assetKey: z27.string().optional(),
@@ -9622,20 +9645,20 @@ var CreativeGenderPin = z33.enum([
9622
9645
  var CreativeDirectionSchema = z33.string().transform((value) => value.trim()).pipe(z33.string().max(CREATIVE_DIRECTION_MAX_CHARS));
9623
9646
  var IngestOptions = z33.object({
9624
9647
  /** Optional owner-scoped guided journey context. Never bypasses ingest gates. */
9625
- dropshippingProjectId: z33.string().uuid().optional(),
9626
- languageCode: LanguageCodeSchema.default("es-CO"),
9627
- ugcFormat: VideoFormat.default("single_15s"),
9648
+ dropshippingProjectId: z33.string().guid().optional(),
9649
+ languageCode: LanguageCodeSchema.default("es-CO").nonoptional(),
9650
+ ugcFormat: VideoFormat.default("single_15s").nonoptional(),
9628
9651
  country: CountrySchema,
9629
9652
  price: PriceSchema,
9630
9653
  offer: OfferSchema,
9631
9654
  compareAtPrice: CompareAtPriceSchema,
9632
9655
  pricingInput: SellerPricingInputSchema.optional(),
9633
9656
  paymentMethods: PaymentMethodsSchema,
9634
- videoStyle: VideoStyle.default("ugc"),
9657
+ videoStyle: VideoStyle.default("ugc").nonoptional(),
9635
9658
  /** Canonical public route axes; legacy provider fields remain compatibility aliases. */
9636
9659
  videoStructure: VideoStructure.optional(),
9637
9660
  videoQuality: VideoQuality.optional(),
9638
- videoModel: VideoModel.default("veo"),
9661
+ videoModel: VideoModel.default("veo").nonoptional(),
9639
9662
  /**
9640
9663
  * An explicit registry model id for Free mode (Defect 1, follow-up to the
9641
9664
  * model-agnostic video plan). Validated against `activeVideoModels()` in
@@ -9650,15 +9673,15 @@ var IngestOptions = z33.object({
9650
9673
  ]).optional(),
9651
9674
  rawPrompt: FreeVideoOptionsSchema.shape.rawPrompt.optional(),
9652
9675
  durationSeconds: FreeVideoOptionsSchema.shape.durationSeconds.optional(),
9653
- addSubtitles: FreeVideoOptionsSchema.shape.addSubtitles.optional(),
9676
+ addSubtitles: FreeVideoOptionsSchema.shape.addSubtitles.nonoptional().optional(),
9654
9677
  subtitleText: z33.string().transform((value) => value.trim()).pipe(z33.string().max(FREE_VIDEO_SUBTITLE_MAX_CHARS)).optional(),
9655
- videoTier: WritableVideoTier.default(DEFAULT_VIDEO_TIER),
9656
- narrativeStyle: NarrativeStyle.default("review"),
9678
+ videoTier: WritableVideoTier.default(WritableVideoTier.parse(DEFAULT_VIDEO_TIER)).nonoptional(),
9679
+ narrativeStyle: NarrativeStyle.default("review").nonoptional(),
9657
9680
  videoPreset: VideoPreset.optional(),
9658
9681
  /** Orthogonal visual style for animated narratives only. The API rejects it
9659
9682
  * on non-animated presets; absent → the pipeline resolves 'pixar_3d'. */
9660
9683
  animationStyle: AnimationStyleSchema.optional(),
9661
- multiAngleVideos: z33.boolean().default(false),
9684
+ multiAngleVideos: z33.boolean().default(false).nonoptional(),
9662
9685
  videoAngleCount: z33.number().int().min(1).max(3).optional(),
9663
9686
  /** Per-angle narrative override (positional). angleNarratives[i] forces the
9664
9687
  * narrative of angle position i, overriding the batch auto-selector; a list
@@ -9670,7 +9693,7 @@ var IngestOptions = z33.object({
9670
9693
  // quality levels; an explicit 720p pick wins. Callers that omit the field
9671
9694
  // use the same 480p compatibility fallback in resolveSingleCallAwareResolution.
9672
9695
  videoResolution: VideoResolution.optional(),
9673
- generateAdCopy: z33.boolean().default(true),
9696
+ generateAdCopy: z33.boolean().default(true).nonoptional(),
9674
9697
  generateAiMusic: z33.boolean().optional(),
9675
9698
  /** «Edición con IA» opt-in; a music request aliases to it. */
9676
9699
  generateAiEdit: AiEditRequestSchema.optional(),
@@ -9681,7 +9704,7 @@ var IngestOptions = z33.object({
9681
9704
  * the multipart path on 2026-09-01, so an unbounded opaque string was newly persistable
9682
9705
  * per task. Length only, never `.uuid()` — Actor.id is a CUID. */
9683
9706
  actorId: z33.string().min(1).max(120).optional(),
9684
- isCombo: z33.boolean().default(false),
9707
+ isCombo: z33.boolean().default(false).nonoptional(),
9685
9708
  productContext: z33.string().transform(canonicalizeProductContext).pipe(z33.string().max(PRODUCT_CONTEXT_MAX_CHARS)).optional(),
9686
9709
  creativeDirection: CreativeDirectionSchema.optional(),
9687
9710
  /** Exact copy the user pinned. Rendered VERBATIM on the image creatives this task
@@ -9754,8 +9777,8 @@ var IngestOptions = z33.object({
9754
9777
  * chosen videoPreset. Default true preserves the 2026-08-04 decision;
9755
9778
  * only a deliberate `false` suspends replication. See
9756
9779
  * `shouldAskReplicationConsent` for when this is even asked. */
9757
- replicateWinnerWhenFound: z33.boolean().default(true),
9758
- brandId: z33.string().uuid().optional()
9780
+ replicateWinnerWhenFound: z33.boolean().default(true).nonoptional(),
9781
+ brandId: z33.string().guid().optional()
9759
9782
  }).partial().transform(normalizeSellerPricingFields).superRefine((data, ctx) => {
9760
9783
  const message = validatePriceInversion(data.price, data.compareAtPrice);
9761
9784
  if (message) {
@@ -10502,7 +10525,7 @@ var CreativeEngineWinnerContextSchema = z38.object({
10502
10525
  version: z38.literal(1),
10503
10526
  winnerAdId: z38.string().min(1).max(200),
10504
10527
  /** Owned parsed gap blueprint of the selected winner (opaque evidence). */
10505
- gapBlueprint: z38.unknown(),
10528
+ gapBlueprint: z38.unknown().optional(),
10506
10529
  observed: z38.object({
10507
10530
  scenes: z38.array(CreativeEngineWinnerObservedSceneSchema).max(40),
10508
10531
  /**
@@ -11262,6 +11285,13 @@ var CreativeEngineRepairAuthorContractRetrySchema = z38.object({
11262
11285
  requestedAtMs: z38.number().int().nonnegative(),
11263
11286
  token: id2
11264
11287
  }).strict();
11288
+ var CreativeEngineReplanAuthorContractRetrySchema = z38.object({
11289
+ failedOperationId: id2,
11290
+ planHash: hash,
11291
+ context: CreativeEngineContextBindingSchema,
11292
+ requestedAtMs: z38.number().int().nonnegative(),
11293
+ token: id2
11294
+ }).strict();
11265
11295
  var CreativeEngineCompositionRepairSchema = z38.object({
11266
11296
  reviewId: id2,
11267
11297
  outputHash: hash,
@@ -11395,6 +11425,7 @@ var CreativeEngineStateSchema = z38.object({
11395
11425
  token: id2
11396
11426
  }).strict().optional(),
11397
11427
  repairAuthorContractRetry: CreativeEngineRepairAuthorContractRetrySchema.optional(),
11428
+ replanAuthorContractRetry: CreativeEngineReplanAuthorContractRetrySchema.optional(),
11398
11429
  final: CreativeEngineFinalSchema.optional()
11399
11430
  }).strict().superRefine((state, ctx) => {
11400
11431
  const repairAuthorContractRetry = state.repairAuthorContractRetry;
@@ -11553,6 +11584,13 @@ var CreativeEngineEventSchema = z38.discriminatedUnion("type", [
11553
11584
  context: CreativeEngineContextBindingSchema,
11554
11585
  token: id2
11555
11586
  }).strict(),
11587
+ z38.object({
11588
+ type: z38.literal("replan_author_contract_retry_requested"),
11589
+ failedOperationId: id2,
11590
+ planHash: hash,
11591
+ context: CreativeEngineContextBindingSchema,
11592
+ token: id2
11593
+ }).strict(),
11556
11594
  z38.object({
11557
11595
  type: z38.literal("repair_author_contract_retry_requested"),
11558
11596
  failedOperationId: id2,
@@ -11673,7 +11711,7 @@ var VideoGenerator = z39.object({
11673
11711
  ctx.addIssue({
11674
11712
  code: z39.ZodIssueCode.too_small,
11675
11713
  minimum: 1,
11676
- type: "string",
11714
+ origin: "string",
11677
11715
  inclusive: true,
11678
11716
  path: [
11679
11717
  "prompt"
@@ -11781,7 +11819,7 @@ var RegenerateVideoScriptNarrativeResponse = z39.object({
11781
11819
  var RegenerateVideoRequest = z39.object({
11782
11820
  angleKey: z39.string().min(1),
11783
11821
  /** Stable new-intent identity for regeneration of an already delivered engine video. */
11784
- clientRequestId: z39.string().uuid().optional()
11822
+ clientRequestId: z39.string().guid().optional()
11785
11823
  }).strict();
11786
11824
  var RegenerateVideoResponse = z39.object({
11787
11825
  ok: z39.literal(true),
@@ -11792,7 +11830,7 @@ var RegenerateVideoResponse = z39.object({
11792
11830
  "single_call"
11793
11831
  ]),
11794
11832
  /** New immutable child, when this command bought a new delivered-video intent. */
11795
- taskId: z39.string().uuid().optional()
11833
+ taskId: z39.string().guid().optional()
11796
11834
  });
11797
11835
 
11798
11836
  // ../../packages/types/src/billing.ts
@@ -11800,10 +11838,10 @@ import { z as z40 } from "zod";
11800
11838
  var MAX_BILLING_DECIMAL_PLACES = 10;
11801
11839
  function countDecimalPlaces(value) {
11802
11840
  if (!Number.isFinite(value)) return MAX_BILLING_DECIMAL_PLACES + 1;
11803
- const normalized = value.toString();
11841
+ let normalized = value.toString();
11804
11842
  if (/e/i.test(normalized)) {
11805
- const fixed = value.toFixed(MAX_BILLING_DECIMAL_PLACES);
11806
- return countDecimalPlaces(Number(fixed));
11843
+ if (Math.abs(value) >= 1e21) return 0;
11844
+ normalized = value.toFixed(MAX_BILLING_DECIMAL_PLACES);
11807
11845
  }
11808
11846
  const parts = normalized.split(".");
11809
11847
  if (parts.length < 2) return 0;
@@ -11834,16 +11872,16 @@ var BillingProvider = z40.enum([
11834
11872
  ]);
11835
11873
  var BillingRecordInput = z40.object({
11836
11874
  userId: z40.string().min(1),
11837
- taskId: z40.string().uuid().optional(),
11838
- mixTaskId: z40.string().uuid().optional(),
11839
- productResearchRunId: z40.string().uuid().optional(),
11840
- servicePageId: z40.string().uuid().optional(),
11875
+ taskId: z40.string().guid().optional(),
11876
+ mixTaskId: z40.string().guid().optional(),
11877
+ productResearchRunId: z40.string().guid().optional(),
11878
+ servicePageId: z40.string().guid().optional(),
11841
11879
  provider: BillingProvider,
11842
11880
  label: z40.string().optional(),
11843
11881
  units: z40.number().int().nonnegative().optional(),
11844
11882
  ourCostCents: BillingNonNegativeAmount,
11845
11883
  userPriceCents: BillingNonNegativeAmount,
11846
- metadata: z40.record(z40.unknown()).optional()
11884
+ metadata: z40.record(z40.string(), z40.unknown()).optional()
11847
11885
  }).superRefine((value, ctx) => {
11848
11886
  const scopedIds = [
11849
11887
  value.taskId,
@@ -11865,7 +11903,7 @@ var BillingSummary = z40.object({
11865
11903
  // ../../packages/types/src/shopify.ts
11866
11904
  import { z as z41 } from "zod";
11867
11905
  var ShopifyShopSummary = z41.object({
11868
- id: z41.string().uuid(),
11906
+ id: z41.string().guid(),
11869
11907
  shopDomain: z41.string(),
11870
11908
  primaryDomain: z41.string().nullable(),
11871
11909
  scopes: z41.array(z41.string()),
@@ -11912,7 +11950,7 @@ var ShopifyPublicationMode = z41.enum([
11912
11950
  var SHOPIFY_ANNOUNCEMENT_BAR_MAX_LENGTH = 160;
11913
11951
  var ShopifyPublishRequest = z41.object({
11914
11952
  /** Correlates a mutation with read-only recovery after a lost response. */
11915
- publishAttemptId: z41.string().uuid().optional(),
11953
+ publishAttemptId: z41.string().guid().optional(),
11916
11954
  /** Omitted keeps legacy publication behavior; null explicitly excludes the GIF. */
11917
11955
  selectedLandingGif: LandingGifSelectionSchema.nullable().optional(),
11918
11956
  classicSelection: ClassicLandingSelectionSnapshotSchema.optional(),
@@ -11971,7 +12009,7 @@ var ShopifyPublishRequest = z41.object({
11971
12009
  });
11972
12010
  }
11973
12011
  });
11974
- var CodeLandingThemeSetupRequest = ShopifyPublishRequest.innerType().omit({
12012
+ var CodeLandingThemeSetupRequest = z41.object(ShopifyPublishRequest.shape).omit({
11975
12013
  publishAttemptId: true,
11976
12014
  commerceCorrection: true
11977
12015
  });
@@ -12041,8 +12079,8 @@ var ShopifyBundleMappingResult = z41.discriminatedUnion("status", [
12041
12079
  ]);
12042
12080
  var ShopifyPublishResponse = z41.object({
12043
12081
  pricingNotices: z41.array(SellerPricingNoticeSchema).max(32).optional(),
12044
- publicationId: z41.string().uuid(),
12045
- taskId: z41.string().uuid(),
12082
+ publicationId: z41.string().guid(),
12083
+ taskId: z41.string().guid(),
12046
12084
  status: ShopifyPublicationStatus,
12047
12085
  shopDomain: z41.string(),
12048
12086
  productId: z41.string().optional(),
@@ -12113,8 +12151,8 @@ var ShopifyImportOutcomeResponse = z41.discriminatedUnion("status", [
12113
12151
  ]);
12114
12152
  var ShopifyPublishAttemptStatus = z41.discriminatedUnion("status", [
12115
12153
  z41.object({
12116
- publicationId: z41.string().uuid(),
12117
- taskId: z41.string().uuid(),
12154
+ publicationId: z41.string().guid(),
12155
+ taskId: z41.string().guid(),
12118
12156
  status: z41.enum([
12119
12157
  "pending",
12120
12158
  "processing"
@@ -12122,8 +12160,8 @@ var ShopifyPublishAttemptStatus = z41.discriminatedUnion("status", [
12122
12160
  productId: z41.string().optional()
12123
12161
  }),
12124
12162
  z41.object({
12125
- publicationId: z41.string().uuid(),
12126
- taskId: z41.string().uuid(),
12163
+ publicationId: z41.string().guid(),
12164
+ taskId: z41.string().guid(),
12127
12165
  status: z41.literal("error"),
12128
12166
  productId: z41.string().optional(),
12129
12167
  failure: z41.discriminatedUnion("kind", [
@@ -12277,7 +12315,7 @@ var CreateShopifyBillingChargeRequest = z41.object({
12277
12315
  });
12278
12316
  var ShopifyBillingCallbackQuery = z41.object({
12279
12317
  charge_id: z41.string().regex(/^\d+$/),
12280
- transactionId: z41.string().uuid()
12318
+ transactionId: z41.string().guid()
12281
12319
  });
12282
12320
  var CancelShopifySubscriptionRequest = z41.object({
12283
12321
  subscriptionId: z41.string().min(1)
@@ -12343,12 +12381,12 @@ var ApproveAnglesRefusalReason = z42.enum([
12343
12381
  ]);
12344
12382
  var ApproveAnglesResponse = z42.object({
12345
12383
  success: z42.boolean(),
12346
- taskId: z42.string().uuid(),
12384
+ taskId: z42.string().guid(),
12347
12385
  reason: ApproveAnglesRefusalReason.optional()
12348
12386
  });
12349
12387
  var IngestResumeRefusalResponse = z42.object({
12350
12388
  success: z42.literal(false),
12351
- taskId: z42.string().uuid(),
12389
+ taskId: z42.string().guid(),
12352
12390
  reason: ApproveAnglesRefusalReason.optional()
12353
12391
  });
12354
12392
  var GenerateSuggestionsResponse = z42.object({
@@ -12363,7 +12401,7 @@ var SaveDraftRequest = z42.object({
12363
12401
  });
12364
12402
  var SaveDraftResponse = z42.object({
12365
12403
  success: z42.boolean(),
12366
- taskId: z42.string().uuid()
12404
+ taskId: z42.string().guid()
12367
12405
  });
12368
12406
  var ProductReferenceRecoveryImageMimeType = z42.enum([
12369
12407
  "image/jpeg",
@@ -12408,7 +12446,7 @@ var ConfirmProductReferencesRequest = z42.object({
12408
12446
  "keep_selection"
12409
12447
  ]),
12410
12448
  affectedRefKeys: z42.array(z42.string().min(1).max(200)).min(1).max(5).optional(),
12411
- expectedReferenceVersionId: z42.string().uuid().optional(),
12449
+ expectedReferenceVersionId: z42.string().guid().optional(),
12412
12450
  expectedEvidenceHash: z42.string().min(1).max(128).optional(),
12413
12451
  uploadedImages: z42.array(ProductReferenceRecoveryUpload).max(INGEST_MAX_REFERENCE_IMAGES).optional()
12414
12452
  }).optional()
@@ -12445,7 +12483,7 @@ var ConfirmProductReferencesRequest = z42.object({
12445
12483
  });
12446
12484
  var ConfirmProductReferencesResponse = z42.object({
12447
12485
  success: z42.boolean(),
12448
- taskId: z42.string().uuid(),
12486
+ taskId: z42.string().guid(),
12449
12487
  anglesQueued: z42.boolean()
12450
12488
  });
12451
12489
  var UpdateProductFeaturesRequest = z42.object({
@@ -12512,7 +12550,7 @@ var ApproveVideoAnglesRequest = z42.object({
12512
12550
  "meta",
12513
12551
  "upload"
12514
12552
  ]).optional(),
12515
- sourceUploadIds: z42.array(z42.string().uuid()).min(2).max(5).optional(),
12553
+ sourceUploadIds: z42.array(z42.string().guid()).min(2).max(5).optional(),
12516
12554
  /** Whether to pause for video script review before final generation */
12517
12555
  pauseForVideoScriptReview: z42.boolean().optional(),
12518
12556
  /** Whether to produce an additional AI-music video variant */
@@ -12526,7 +12564,7 @@ var ApproveVideoAnglesRequest = z42.object({
12526
12564
  }).superRefine((value, ctx) => validateFrankensteinDraftSources(value, ctx, true));
12527
12565
  var ApproveVideoAnglesResponse = z42.object({
12528
12566
  success: z42.boolean(),
12529
- taskId: z42.string().uuid(),
12567
+ taskId: z42.string().guid(),
12530
12568
  /** Persisted keys scheduled by this approval; visible candidate indices are not worker keys. */
12531
12569
  approvedAngleKeys: z42.array(z42.string().regex(/^angle_\d+$/)).min(1).max(3).optional(),
12532
12570
  reason: ApproveAnglesRefusalReason.optional()
@@ -12546,11 +12584,11 @@ var SaveVideoDraftRequest = z42.object({
12546
12584
  "meta",
12547
12585
  "upload"
12548
12586
  ]).optional(),
12549
- sourceUploadIds: z42.array(z42.string().uuid()).min(2).max(5).optional()
12587
+ sourceUploadIds: z42.array(z42.string().guid()).min(2).max(5).optional()
12550
12588
  }).superRefine((value, ctx) => validateFrankensteinDraftSources(value, ctx, false));
12551
12589
  var SaveVideoDraftResponse = z42.object({
12552
12590
  success: z42.boolean(),
12553
- taskId: z42.string().uuid()
12591
+ taskId: z42.string().guid()
12554
12592
  });
12555
12593
  var ApproveImageAnglesRequest = z42.object({
12556
12594
  /** Zero-based index of the generated angle explicitly selected for production. */
@@ -12574,7 +12612,7 @@ var ApproveImageAnglesRequest = z42.object({
12574
12612
  });
12575
12613
  var ApproveImageAnglesResponse = z42.object({
12576
12614
  success: z42.boolean(),
12577
- taskId: z42.string().uuid(),
12615
+ taskId: z42.string().guid(),
12578
12616
  reason: ApproveAnglesRefusalReason.optional()
12579
12617
  });
12580
12618
  var SaveImageDraftRequest = z42.object({
@@ -12585,7 +12623,7 @@ var SaveImageDraftRequest = z42.object({
12585
12623
  });
12586
12624
  var SaveImageDraftResponse = z42.object({
12587
12625
  success: z42.boolean(),
12588
- taskId: z42.string().uuid()
12626
+ taskId: z42.string().guid()
12589
12627
  });
12590
12628
  var ImageSuggestionsResponse = z42.object({
12591
12629
  painPoints: z42.array(z42.string()),
@@ -12631,8 +12669,8 @@ var QualityReportReason = z43.enum([
12631
12669
  "other"
12632
12670
  ]);
12633
12671
  var QualityReportRequest = z43.object({
12634
- taskId: z43.string().uuid().optional(),
12635
- mixTaskId: z43.string().uuid().optional(),
12672
+ taskId: z43.string().guid().optional(),
12673
+ mixTaskId: z43.string().guid().optional(),
12636
12674
  kind: QualityReportKind,
12637
12675
  /**
12638
12676
  * URL or internal proxy path (e.g. `/api/assets/...`).
@@ -12658,9 +12696,9 @@ var QualityReportRequest = z43.object({
12658
12696
  ]
12659
12697
  });
12660
12698
  var QualityReportResponse = z43.object({
12661
- reportId: z43.string().uuid(),
12662
- taskId: z43.string().uuid().optional(),
12663
- mixTaskId: z43.string().uuid().optional(),
12699
+ reportId: z43.string().guid(),
12700
+ taskId: z43.string().guid().optional(),
12701
+ mixTaskId: z43.string().guid().optional(),
12664
12702
  kind: QualityReportKind,
12665
12703
  resourceUrl: z43.string().min(1),
12666
12704
  reason: QualityReportReason,
@@ -13089,7 +13127,7 @@ var TaskCreativeVariantVideoPreset = VideoPreset.exclude([
13089
13127
  ...BLOCKED_VIDEO_PRESETS
13090
13128
  ]);
13091
13129
  var CreateTaskCreativeVariantBase = z47.object({
13092
- clientRequestId: z47.string().uuid(),
13130
+ clientRequestId: z47.string().guid(),
13093
13131
  angle: z47.string().trim().min(1).max(TASK_CREATIVE_VARIANT_TEXT_LIMITS.angle),
13094
13132
  buyerPersona: z47.string().trim().min(1).max(TASK_CREATIVE_VARIANT_TEXT_LIMITS.buyerPersona).optional()
13095
13133
  });
@@ -13112,7 +13150,7 @@ var CreateTaskImageVariantRequest = CreateTaskCreativeVariantBase.extend({
13112
13150
  styleMix: z47.boolean().optional()
13113
13151
  }).strict();
13114
13152
  var CreateTaskLandingSectionVariantRequest = z47.object({
13115
- clientRequestId: z47.string().uuid(),
13153
+ clientRequestId: z47.string().guid(),
13116
13154
  kind: z47.literal("landing"),
13117
13155
  sectionKey: LandingSectionKeySchema,
13118
13156
  instructions: z47.string().trim().min(1).max(TASK_CREATIVE_VARIANT_TEXT_LIMITS.landingInstructions).optional()
@@ -13140,8 +13178,8 @@ var EstimateTaskCreativeVariantRequest = z47.discriminatedUnion("kind", [
13140
13178
  ]);
13141
13179
  var CreateTaskCreativeVariantResponse = z47.object({
13142
13180
  ok: z47.literal(true),
13143
- sourceTaskId: z47.string().uuid(),
13144
- variantTaskId: z47.string().uuid(),
13181
+ sourceTaskId: z47.string().guid(),
13182
+ variantTaskId: z47.string().guid(),
13145
13183
  kind: TaskCreativeVariantKind,
13146
13184
  status: TaskCreativeVariantStatus
13147
13185
  }).strict();
@@ -13164,15 +13202,15 @@ var TaskCreativeVariantRecommendationRequest = z47.object({
13164
13202
  }).strict();
13165
13203
  var TaskCreativeVariantRecommendationResponse = z47.object({
13166
13204
  ok: z47.literal(true),
13167
- sourceTaskId: z47.string().uuid(),
13205
+ sourceTaskId: z47.string().guid(),
13168
13206
  kind: TaskCreativeVariantKind,
13169
13207
  field: TaskCreativeVariantRecommendationField,
13170
13208
  value: z47.string().trim().min(1).max(TASK_CREATIVE_VARIANT_TEXT_LIMITS.scriptNotes),
13171
13209
  rationale: z47.string().trim().min(1).max(TASK_CREATIVE_VARIANT_TEXT_LIMITS.recommendationRationale).optional()
13172
13210
  }).strict();
13173
13211
  var TaskCreativeVariantBaseResult = z47.object({
13174
- variantTaskId: z47.string().uuid(),
13175
- sourceTaskId: z47.string().uuid(),
13212
+ variantTaskId: z47.string().guid(),
13213
+ sourceTaskId: z47.string().guid(),
13176
13214
  kind: TaskCreativeVariantKind,
13177
13215
  status: TaskCreativeVariantStatus,
13178
13216
  angle: z47.string().min(1),
@@ -13346,7 +13384,7 @@ var ResultAngle = Angle.extend({
13346
13384
  aiEdit: AiEditTierSchema.nullable().optional()
13347
13385
  });
13348
13386
  var MVPResult = z49.object({
13349
- taskId: z49.string().uuid(),
13387
+ taskId: z49.string().guid(),
13350
13388
  /** Read-only identity derived from validated persisted request context.
13351
13389
  * Optional for older APIs and content-only tasks; absence never implies a service. */
13352
13390
  subjectKind: z49.enum([
@@ -13524,7 +13562,7 @@ var PendingUserActionSchema = z49.discriminatedUnion("kind", [
13524
13562
  z49.object({
13525
13563
  kind: z49.literal("service_angle_approval"),
13526
13564
  angles: z49.array(z49.object({
13527
- id: z49.string().uuid(),
13565
+ id: z49.string().guid(),
13528
13566
  content: z49.string(),
13529
13567
  creativeDirection: z49.string(),
13530
13568
  actor: z49.string(),
@@ -13603,7 +13641,7 @@ var CommercialStudySummarySchema = z49.union([
13603
13641
  })
13604
13642
  ]);
13605
13643
  var StatusResponse = z49.object({
13606
- taskId: z49.string().uuid(),
13644
+ taskId: z49.string().guid(),
13607
13645
  status: TaskStatusSchema,
13608
13646
  /** ENGINEERING string (`Task.error`). Never render this to a seller. */
13609
13647
  error: z49.string().optional(),
@@ -13811,7 +13849,7 @@ var StatusResponse = z49.object({
13811
13849
  frankensteinRun: FrankensteinRunProgressSchema.optional()
13812
13850
  });
13813
13851
  var TaskSummary = z49.object({
13814
- taskId: z49.string().uuid(),
13852
+ taskId: z49.string().guid(),
13815
13853
  /** A projected ServicePage, opened through its own editor and lifecycle. */
13816
13854
  resourceType: z49.literal("service_page").optional(),
13817
13855
  status: TaskStatusSchema,
@@ -14240,7 +14278,7 @@ var RegenerateLandingRoleBody = z50.object({
14240
14278
  comment: z50.string().max(2e3).optional(),
14241
14279
  sourceKey: z50.string().max(200).optional(),
14242
14280
  /** Client-generated key makes a lost response safe to retry without another charge. */
14243
- clientRequestId: z50.string().uuid().optional()
14281
+ clientRequestId: z50.string().guid().optional()
14244
14282
  }).strict();
14245
14283
  var LandingRegenerateEstimationOptions = z50.object({
14246
14284
  /** KIE image endpoint has non-linear pricing by nVariants; for landing we default to 2. */
@@ -14346,6 +14384,8 @@ var CostEstimationRequest = z50.discriminatedUnion("type", [
14346
14384
  var CostEstimationResponse = z50.object({
14347
14385
  /** Server confirms the range includes the first generated classic-landing GIF. */
14348
14386
  includesInitialLandingGif: z50.boolean().optional(),
14387
+ /** The initial-GIF choice is offerable for this config (code landings only quote it after explicit consent). */
14388
+ initialLandingGifOffered: z50.boolean().optional(),
14349
14389
  estimatedCostCents: z50.number().nonnegative(),
14350
14390
  estimatedCostCredits: z50.number().int().nonnegative(),
14351
14391
  /** Scan-only midpoint; excludes generating a winner replica. Not an admission limit. */
@@ -15227,7 +15267,7 @@ var UpdateUserCreditsRequest = z53.object({
15227
15267
  /** Free-text detail. Required when the enum alone does not explain the grant. */
15228
15268
  notes: z53.string().trim().min(1).max(500).optional(),
15229
15269
  /** The task the grant compensates, when there is one. */
15230
- taskId: z53.string().uuid().optional()
15270
+ taskId: z53.string().guid().optional()
15231
15271
  });
15232
15272
  var QualityReportStatus = z53.enum([
15233
15273
  "open",
@@ -15287,7 +15327,7 @@ var AdminSupportDeliveryStatus = z53.enum([
15287
15327
  "blocked"
15288
15328
  ]);
15289
15329
  var AdminSupportMessage = z53.object({
15290
- id: z53.string().uuid(),
15330
+ id: z53.string().guid(),
15291
15331
  direction: z53.enum([
15292
15332
  "inbound",
15293
15333
  "outbound"
@@ -15311,7 +15351,7 @@ var AdminSupportMessage = z53.object({
15311
15351
  createdAt: z53.string().datetime()
15312
15352
  });
15313
15353
  var AdminSupportTicket = z53.object({
15314
- id: z53.string().uuid(),
15354
+ id: z53.string().guid(),
15315
15355
  category: z53.enum([
15316
15356
  "how_to",
15317
15357
  "credits",
@@ -15340,7 +15380,7 @@ var AdminSupportTicket = z53.object({
15340
15380
  updatedAt: z53.string().datetime()
15341
15381
  });
15342
15382
  var AdminSupportConversation = z53.object({
15343
- id: z53.string().uuid(),
15383
+ id: z53.string().guid(),
15344
15384
  status: AdminSupportConversationStatus,
15345
15385
  priority: z53.enum([
15346
15386
  "low",
@@ -15355,7 +15395,7 @@ var AdminSupportConversation = z53.object({
15355
15395
  createdAt: z53.string().datetime(),
15356
15396
  updatedAt: z53.string().datetime(),
15357
15397
  contact: z53.object({
15358
- id: z53.string().uuid(),
15398
+ id: z53.string().guid(),
15359
15399
  userId: z53.string().nullable(),
15360
15400
  verifiedAt: z53.string().datetime().nullable(),
15361
15401
  botMode: z53.enum([
@@ -15371,11 +15411,11 @@ var AdminSupportConversation = z53.object({
15371
15411
  var AdminSupportListQuery = z53.object({
15372
15412
  status: AdminSupportConversationStatus.optional(),
15373
15413
  take: z53.coerce.number().int().min(1).max(100).default(50),
15374
- cursorId: z53.string().uuid().optional()
15414
+ cursorId: z53.string().guid().optional()
15375
15415
  }).strict();
15376
15416
  var AdminSupportListResponse = z53.object({
15377
15417
  conversations: z53.array(AdminSupportConversation),
15378
- nextCursor: z53.string().uuid().nullable()
15418
+ nextCursor: z53.string().guid().nullable()
15379
15419
  });
15380
15420
  var AdminSupportReplyRequest = z53.object({
15381
15421
  body: z53.string().trim().min(1).max(4096),
@@ -15386,7 +15426,7 @@ var AdminSupportActionResponse = z53.object({
15386
15426
  conversation: AdminSupportConversation
15387
15427
  });
15388
15428
  var AdminSupportReplyResponse = z53.object({
15389
- messageId: z53.string().uuid(),
15429
+ messageId: z53.string().guid(),
15390
15430
  deliveryStatus: AdminSupportDeliveryStatus,
15391
15431
  duplicate: z53.boolean()
15392
15432
  });
@@ -15516,7 +15556,7 @@ var VideoVoiceJobSchema = z57.object({
15516
15556
  wakeRevision: z57.number().int().nonnegative()
15517
15557
  }).strict();
15518
15558
  var ExtractJobSchema = z57.object({
15519
- taskId: z57.string().uuid(),
15559
+ taskId: z57.string().guid(),
15520
15560
  imageKey: z57.string().min(1).optional(),
15521
15561
  imageKeys: z57.array(z57.string().min(1)).min(1).max(INGEST_MAX_REFERENCE_IMAGES).optional(),
15522
15562
  /** Existing clean references carried through a recovery extract. They are
@@ -15635,20 +15675,20 @@ var BrandExtractDocumentSchema = z57.object({
15635
15675
  ])
15636
15676
  });
15637
15677
  var VideoMixSubmitJobSchema = z57.object({
15638
- mixTaskId: z57.string().uuid()
15678
+ mixTaskId: z57.string().guid()
15639
15679
  });
15640
15680
  var VideoMixAssembleJobSchema = z57.object({
15641
- mixTaskId: z57.string().uuid()
15681
+ mixTaskId: z57.string().guid()
15642
15682
  });
15643
15683
  var VideoMixQaJobSchema = z57.object({
15644
- mixSceneTaskId: z57.string().uuid(),
15684
+ mixSceneTaskId: z57.string().guid(),
15645
15685
  // externalId is included in the BullMQ payload by the producer (used in the
15646
15686
  // jobId for retry uniqueness) but the worker only reads mixSceneTaskId.
15647
15687
  externalId: z57.string().min(1).optional()
15648
15688
  });
15649
15689
  var BrandExtractLocaleSchema = z57.string().regex(/^[A-Za-z]{2,3}(?:[-_][A-Za-z0-9]{2,8})?$/, "invalid locale");
15650
15690
  var BrandExtractJobSchema = z57.object({
15651
- brandId: z57.string().uuid(),
15691
+ brandId: z57.string().guid(),
15652
15692
  // Generation is part of the durable paid-spend identity. Default 1 keeps
15653
15693
  // pre-migration BullMQ payloads parseable; their DB state fails safe.
15654
15694
  generation: z57.number().int().positive().default(1),
@@ -15680,23 +15720,23 @@ import { z as z58 } from "zod";
15680
15720
  var WhatsAppDeliveryConsumerSchema = z58.discriminatedUnion("kind", [
15681
15721
  z58.object({
15682
15722
  kind: z58.literal("presentation"),
15683
- presentationId: z58.string().uuid(),
15723
+ presentationId: z58.string().guid(),
15684
15724
  pollAt: z58.number().int().nonnegative()
15685
15725
  }).strict(),
15686
15726
  z58.object({
15687
15727
  kind: z58.literal("message"),
15688
- messageId: z58.string().uuid(),
15728
+ messageId: z58.string().guid(),
15689
15729
  providerMessageId: z58.string().min(1).max(256)
15690
15730
  }).strict(),
15691
15731
  z58.object({
15692
15732
  kind: z58.literal("task_watch"),
15693
- commandId: z58.string().uuid(),
15733
+ commandId: z58.string().guid(),
15694
15734
  pollAt: z58.number().int().nonnegative()
15695
15735
  }).strict(),
15696
15736
  z58.object({
15697
15737
  kind: z58.literal("research_watch"),
15698
- commandId: z58.string().uuid(),
15699
- runId: z58.string().uuid(),
15738
+ commandId: z58.string().guid(),
15739
+ runId: z58.string().guid(),
15700
15740
  pollAt: z58.number().int().nonnegative()
15701
15741
  }).strict()
15702
15742
  ]);
@@ -15745,9 +15785,9 @@ var ComboItemSchema = z60.object({
15745
15785
  /** Physical details for this specific product */
15746
15786
  details: z60.object({
15747
15787
  packagingType: z60.string().optional(),
15748
- geometry: z60.record(z60.unknown()).optional(),
15749
- morphology: z60.record(z60.unknown()).optional(),
15750
- estimatedDimensions: z60.record(z60.unknown()).optional()
15788
+ geometry: z60.record(z60.string(), z60.unknown()).optional(),
15789
+ morphology: z60.record(z60.string(), z60.unknown()).optional(),
15790
+ estimatedDimensions: z60.record(z60.string(), z60.unknown()).optional()
15751
15791
  }).optional(),
15752
15792
  /** Per-item usage spec extracted individually (fallback: global combo usageSpec) */
15753
15793
  usageSpec: ProductUsageSpec.optional()
@@ -15786,7 +15826,7 @@ var FacebookConnectionStatusSchema = z61.object({
15786
15826
  message: z61.string().optional()
15787
15827
  });
15788
15828
  var FacebookCreateCampaignRequestSchema = z61.object({
15789
- taskId: z61.string().uuid(),
15829
+ taskId: z61.string().guid(),
15790
15830
  pixelId: z61.string().optional(),
15791
15831
  landingUrl: HttpUrl2.optional()
15792
15832
  });
@@ -15911,29 +15951,14 @@ var FacebookCreateCampaignResponseSchema = z61.object({
15911
15951
  appliedBudget: z61.number().int().positive()
15912
15952
  });
15913
15953
  var FacebookCreateCampaignFromCreativesBodySchema = z61.object({
15914
- /** Caller-owned retry fence. Required before any provider operation. */
15915
- publishAttemptId: MetaPublishAttemptId,
15916
- creatives: z61.array(z61.object({
15917
- type: MediaKind,
15918
- title: z61.string().max(120),
15919
- description: z61.string().max(500),
15920
- cta: MetaCtaType,
15954
+ ...UploadToMetaRequest.shape,
15955
+ creatives: z61.array(UploadToMetaRequest.shape.creatives.element.extend({
15956
+ // Retain this endpoint's HTTP URL policy; the upload owner additionally
15957
+ // forbids credentials. Sharing its field shape must not tighten ours.
15921
15958
  mediaUrl: HttpUrl2.optional(),
15922
- mediaAssetId: z61.string().uuid().optional(),
15923
- thumbnailUrl: HttpUrl2.optional(),
15924
- thumbnailAssetId: z61.string().uuid().optional(),
15925
- creativeId: z61.string().min(1).optional()
15959
+ thumbnailUrl: HttpUrl2.optional()
15926
15960
  })).min(1).max(CAMPAIGN_LIMITS.MAX_CREATIVES),
15927
- adAccountId: MetaAdAccountId,
15928
- portfolioId: z61.string().min(1).optional(),
15929
- pageId: z61.string().min(1).optional(),
15930
- pixelId: z61.string().optional(),
15931
- /** Required unless campaignConfig.destination is 'whatsapp' (see superRefine below). */
15932
15961
  landingUrl: HttpUrl2.optional(),
15933
- /** Target country for ad targeting (ISO 3166-1 alpha-2 code or resolvable name) */
15934
- targetCountry: CountryIso2Schema.default("US"),
15935
- /** Custom campaign name */
15936
- campaignName: z61.string().min(1).max(100).optional(),
15937
15962
  campaignConfig: MetaCampaignConfig.optional()
15938
15963
  }).superRefine((value, ctx) => {
15939
15964
  const isWhatsapp = value.campaignConfig?.destination?.type === "whatsapp";
@@ -15946,30 +15971,7 @@ var FacebookCreateCampaignFromCreativesBodySchema = z61.object({
15946
15971
  message: "landingUrl is required unless destination is whatsapp"
15947
15972
  });
15948
15973
  }
15949
- value.creatives.forEach((creative, index) => {
15950
- if (Boolean(creative.mediaUrl) === Boolean(creative.mediaAssetId)) {
15951
- ctx.addIssue({
15952
- code: z61.ZodIssueCode.custom,
15953
- path: [
15954
- "creatives",
15955
- index,
15956
- "mediaUrl"
15957
- ],
15958
- message: "Provide exactly one of mediaUrl or mediaAssetId"
15959
- });
15960
- }
15961
- if (creative.thumbnailUrl && creative.thumbnailAssetId) {
15962
- ctx.addIssue({
15963
- code: z61.ZodIssueCode.custom,
15964
- path: [
15965
- "creatives",
15966
- index,
15967
- "thumbnailUrl"
15968
- ],
15969
- message: "Provide at most one of thumbnailUrl or thumbnailAssetId"
15970
- });
15971
- }
15972
- });
15974
+ refineMetaCreativeSources(value, ctx);
15973
15975
  if (value.campaignConfig?.destination?.type === "landing" && value.landingUrl && value.campaignConfig.destination.landingUrl !== value.landingUrl) {
15974
15976
  ctx.addIssue({
15975
15977
  code: z61.ZodIssueCode.custom,
@@ -16048,9 +16050,9 @@ var FacebookTaskCreativeSourceSchema = z61.object({
16048
16050
  var FacebookMediaCreativeSourceSchema = z61.object({
16049
16051
  type: z61.literal("media"),
16050
16052
  mediaUrl: HttpUrl2.optional(),
16051
- mediaAssetId: z61.string().uuid().optional(),
16053
+ mediaAssetId: z61.string().guid().optional(),
16052
16054
  thumbnailUrl: HttpUrl2.optional(),
16053
- thumbnailAssetId: z61.string().uuid().optional()
16055
+ thumbnailAssetId: z61.string().guid().optional()
16054
16056
  });
16055
16057
  var FacebookCreativeSourceSchema = z61.discriminatedUnion("type", [
16056
16058
  FacebookTaskCreativeSourceSchema,
@@ -16073,15 +16075,15 @@ var FacebookCreateCampaignFromTasksBodySchema = z61.object({
16073
16075
  pageId: z61.string().min(1),
16074
16076
  pixelId: z61.string().optional(),
16075
16077
  /**
16076
- * Omitted: a campaign with task creatives lands on the published service
16077
- * landing of its service tasks (resolved server side, META_NO_LANDING_URL
16078
- * when there is none); a media-only campaign must name it.
16079
- */
16078
+ * Omitted: a campaign with task creatives lands on the published service
16079
+ * landing of its service tasks (resolved server side, META_NO_LANDING_URL
16080
+ * when there is none); a media-only campaign must name it.
16081
+ */
16080
16082
  landingUrl: HttpUrl2.optional(),
16081
16083
  /**
16082
- * Omitted: the brand country of its service tasks; a product-only campaign
16083
- * keeps "US". Never a hardcoded country for a service (META_NO_TARGET_COUNTRY).
16084
- */
16084
+ * Omitted: the brand country of its service tasks; a product-only campaign
16085
+ * keeps "US". Never a hardcoded country for a service (META_NO_TARGET_COUNTRY).
16086
+ */
16085
16087
  targetCountry: CountryIso2Schema.optional(),
16086
16088
  campaignName: z61.string().min(1).max(100),
16087
16089
  campaignConfig: MetaCampaignConfig.optional()
@@ -16642,7 +16644,7 @@ var VideoSpeechAssetSchema = z64.object({
16642
16644
  var VoiceProgressSchema = z64.discriminatedUnion("status", [
16643
16645
  z64.object({
16644
16646
  status: z64.literal("ready"),
16645
- value: z64.unknown()
16647
+ value: z64.unknown().optional()
16646
16648
  }).strict(),
16647
16649
  z64.object({
16648
16650
  status: z64.literal("waiting"),
@@ -17192,7 +17194,7 @@ var MixSceneResult = z67.object({
17192
17194
  degradedReason: MixDegradationReasonSchema.optional()
17193
17195
  });
17194
17196
  var MixResult = z67.object({
17195
- mixTaskId: z67.string().uuid(),
17197
+ mixTaskId: z67.string().guid(),
17196
17198
  status: z67.enum([
17197
17199
  "queued",
17198
17200
  "processing",
@@ -17235,7 +17237,7 @@ var PreparedImagePreviewUrlSchema = z68.string().url().max(2048).refine((value)
17235
17237
  return protocol === "https:" || protocol === "http:";
17236
17238
  }, "Prepared image preview URLs must use HTTP(S)");
17237
17239
  var WinningProductPreparedImageSchema = z68.object({
17238
- assetId: z68.string().uuid(),
17240
+ assetId: z68.string().guid(),
17239
17241
  previewUrl: PreparedImagePreviewUrlSchema,
17240
17242
  productName: z68.string().trim().min(1).max(240),
17241
17243
  presentation: MediaPresentationImageSchema
@@ -17534,14 +17536,16 @@ var LandingOperationStepSelectionSchema = CodeLandingStepSelectionSchema.extend(
17534
17536
  var LandingOperationReceiptStepSchema = LandingOperationStepSelectionSchema.extend({
17535
17537
  receipt: CodeLandingEffectiveReceiptSchema.optional()
17536
17538
  });
17537
- var LandingOperationEnvelopeNodeSchema = CodeLandingEnvelopeNodeSchema.innerType().extend({
17539
+ var LandingOperationEnvelopeNodeSchema = z73.object(CodeLandingEnvelopeNodeSchema.shape).strict().extend({
17538
17540
  phase: LandingOperationStepPhaseSchema
17539
17541
  }).superRefine((node, ctx) => {
17540
17542
  const legacy = CodeLandingEnvelopeNodeSchema.safeParse({
17541
17543
  ...node,
17542
17544
  phase: "asset"
17543
17545
  });
17544
- if (!legacy.success) for (const issue of legacy.error.issues) ctx.addIssue(issue);
17546
+ if (!legacy.success) for (const issue of legacy.error.issues) ctx.addIssue({
17547
+ ...issue
17548
+ });
17545
17549
  });
17546
17550
  var LandingGifGenerationPolicySchema = z73.discriminatedUnion("model", [
17547
17551
  z73.object({
@@ -17928,7 +17932,7 @@ var LandingRegenerationStatusResponse = z75.object({
17928
17932
  });
17929
17933
 
17930
17934
  // ../../packages/types/src/shopify-meta-tracking.ts
17931
- import { z as z76 } from "zod";
17935
+ import * as z76 from "zod";
17932
17936
  var MetaTrackingOwnerSchema = z76.enum([
17933
17937
  "auto",
17934
17938
  "external",
@@ -18136,7 +18140,7 @@ var UploadedAssetRole = z78.enum([
18136
18140
  ]);
18137
18141
  var UPLOADED_ASSET_MAX_FILES = 10;
18138
18142
  var UPLOADED_ASSET_IMAGE_MAX_FILES = 5;
18139
- var UploadedAssetId = z78.string().uuid();
18143
+ var UploadedAssetId = z78.string().guid();
18140
18144
  var HttpsUrl = z78.string().url().refine((value) => {
18141
18145
  try {
18142
18146
  const url2 = new URL(value);
@@ -18277,7 +18281,7 @@ var DropshippingProjectRewardMilestoneStateSchema = z79.object({
18277
18281
  credits: z79.number().int().positive(),
18278
18282
  available: z79.boolean().optional(),
18279
18283
  earned: z79.boolean(),
18280
- grantId: z79.string().uuid().nullable(),
18284
+ grantId: z79.string().guid().nullable(),
18281
18285
  grantedAt: z79.string().datetime().nullable()
18282
18286
  });
18283
18287
  var DropshippingProjectRewardProgressSchema = z79.object({
@@ -18343,16 +18347,16 @@ var HttpUrlSchema = z79.string().url().max(2e3).refine((value) => {
18343
18347
  }, "Product URL must use HTTP(S)");
18344
18348
  var ResearchCandidateOriginSchema = z79.object({
18345
18349
  type: z79.literal("research_candidate"),
18346
- runId: z79.string().uuid(),
18350
+ runId: z79.string().guid(),
18347
18351
  candidateSourceId: z79.string().min(1).max(160)
18348
18352
  });
18349
18353
  var TaskOriginSchema = z79.object({
18350
18354
  type: z79.literal("task"),
18351
- taskId: z79.string().uuid()
18355
+ taskId: z79.string().guid()
18352
18356
  });
18353
18357
  var ManualOriginSchema = z79.object({
18354
18358
  type: z79.literal("manual"),
18355
- clientRequestId: z79.string().uuid(),
18359
+ clientRequestId: z79.string().guid(),
18356
18360
  country: z79.string().min(2).max(3).optional()
18357
18361
  });
18358
18362
  var CreateDropshippingProjectRequestSchema = z79.object({
@@ -18425,11 +18429,11 @@ var DropshippingProjectNextActionSchema = z79.discriminatedUnion("kind", [
18425
18429
  })
18426
18430
  ]);
18427
18431
  var DropshippingProjectResponseSchema = z79.object({
18428
- id: z79.string().uuid(),
18429
- taskId: z79.string().uuid().nullable(),
18432
+ id: z79.string().guid(),
18433
+ taskId: z79.string().guid().nullable(),
18430
18434
  status: DropshippingProjectStatusSchema,
18431
18435
  originKey: z79.string().min(1),
18432
- researchRunId: z79.string().uuid().nullable(),
18436
+ researchRunId: z79.string().guid().nullable(),
18433
18437
  candidateSourceId: z79.string().nullable(),
18434
18438
  productName: z79.string().nullable(),
18435
18439
  productUrl: HttpUrlSchema.nullable(),
@@ -18784,7 +18788,7 @@ var mediaVideoFields = {
18784
18788
  var mediaImageFields = {
18785
18789
  kind: z81.literal("image"),
18786
18790
  durationSec: z81.never({
18787
- invalid_type_error: "a photo has no duration"
18791
+ error: "a photo has no duration"
18788
18792
  }).optional()
18789
18793
  };
18790
18794
  var mediaOriginFields = {
@@ -19029,7 +19033,7 @@ var LegacyMotionGraphicsClipSpecSchema = z84.discriminatedUnion("kind", [
19029
19033
  ...clipSpecFields,
19030
19034
  kind: z84.literal("broll"),
19031
19035
  speech: z84.never({
19032
- invalid_type_error: "only a speaking clip carries speech"
19036
+ error: "only a speaking clip carries speech"
19033
19037
  }).optional()
19034
19038
  }).strict(),
19035
19039
  z84.object({
@@ -19602,8 +19606,8 @@ var MotionGraphicsCreativeBatchSchema = z89.object({
19602
19606
  version: z89.literal("v1"),
19603
19607
  count: MotionGraphicsHookVariantsSchema,
19604
19608
  index: MotionGraphicsHookVariantsSchema,
19605
- rootTaskId: z89.string().uuid().optional(),
19606
- taskIds: z89.array(z89.string().uuid()).min(1).max(3).optional(),
19609
+ rootTaskId: z89.string().guid().optional(),
19610
+ taskIds: z89.array(z89.string().guid()).min(1).max(3).optional(),
19607
19611
  plans: MotionGraphicsCreativePlansSchema.optional()
19608
19612
  }).strict().superRefine((batch, ctx) => {
19609
19613
  if (batch.index > batch.count) ctx.addIssue({
@@ -19699,7 +19703,7 @@ var MotionGraphicsMusicStatusResponseSchema = z90.discriminatedUnion("status", [
19699
19703
  // ../../packages/types/src/website-capture-artifact.ts
19700
19704
  import { z as z91 } from "zod";
19701
19705
  var WebsiteCaptureBindingSchema = z91.object({
19702
- captureId: z91.string().uuid(),
19706
+ captureId: z91.string().guid(),
19703
19707
  bundleKey: z91.string().min(1),
19704
19708
  sha256: z91.string().regex(/^[a-f0-9]{64}$/)
19705
19709
  });
@@ -19843,7 +19847,7 @@ var motionGraphicsStateSchema = z93.object({
19843
19847
  /** Durable, unpaid Generate intent. Removed only after capture admission and payment. */
19844
19848
  captureAdmission: z93.object({
19845
19849
  version: z93.literal("v1"),
19846
- captureId: z93.string().uuid().optional(),
19850
+ captureId: z93.string().guid().optional(),
19847
19851
  maxSocialAcquisitionPriceCents: z93.number().finite().nonnegative(),
19848
19852
  maxTotalPriceCents: z93.number().finite().nonnegative(),
19849
19853
  deadlineAt: z93.string().datetime(),
@@ -21807,7 +21811,7 @@ var DailyControlProductFactsSchema = z96.object({
21807
21811
  currency: z96.string()
21808
21812
  });
21809
21813
  var DailyControlProductSchema = z96.object({
21810
- projectId: z96.string().uuid(),
21814
+ projectId: z96.string().guid(),
21811
21815
  productName: z96.string().nullable(),
21812
21816
  status: DailyControlStatusSchema,
21813
21817
  /** Motivo legible cuando status !== 'ok'. Nunca se rellenan métricas en ese caso. */
@@ -21852,7 +21856,7 @@ var DailyControlQuerySchema = z96.object({
21852
21856
  * necesita ese producto; sin este filtro cada carga de página lee el gasto
21853
21857
  * de TODOS los proyectos activos del usuario contra Meta/TikTok/Shopify.
21854
21858
  */
21855
- projectId: z96.string().uuid().optional()
21859
+ projectId: z96.string().guid().optional()
21856
21860
  });
21857
21861
  var LinkableCampaignSchema = z96.object({
21858
21862
  provider: z96.enum([
@@ -22061,7 +22065,7 @@ var CreateFinanceOperationSchema = z97.object({
22061
22065
  label: z97.string().trim().min(1).max(60).optional()
22062
22066
  }).strict();
22063
22067
  var FinanceOperationSchema = z97.object({
22064
- id: z97.string().uuid(),
22068
+ id: z97.string().guid(),
22065
22069
  countryCode: z97.string().length(2),
22066
22070
  currency: z97.string().min(3).max(3),
22067
22071
  label: z97.string().min(1)
@@ -22070,7 +22074,7 @@ var MonthlyPLQuerySchema = z97.object({
22070
22074
  /** Opcional a propósito: con UNA sola operación —el caso de casi todo el
22071
22075
  * mundo— el servidor la resuelve solo. Con varias devuelve cuáles son,
22072
22076
  * para poder preguntar por país en vez de fallar. */
22073
- operationId: z97.string().uuid().optional(),
22077
+ operationId: z97.string().guid().optional(),
22074
22078
  /** YYYY-MM. Solo mes calendario: es el periodo con el que se piensa un
22075
22079
  * negocio, y prorratear gastos fijos sobre un rango libre confunde más de
22076
22080
  * lo que ayuda. */
@@ -22079,7 +22083,7 @@ var MonthlyPLQuerySchema = z97.object({
22079
22083
  var RESERVED_EXPENSE_LABEL_PREFIX = "__ad_spend__";
22080
22084
  var isReservedExpenseLabel = /* @__PURE__ */ __name((label) => label.trim().startsWith(RESERVED_EXPENSE_LABEL_PREFIX), "isReservedExpenseLabel");
22081
22085
  var SaveMonthlyExpenseSchema = z97.object({
22082
- operationId: z97.string().uuid().optional(),
22086
+ operationId: z97.string().guid().optional(),
22083
22087
  month: z97.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
22084
22088
  label: z97.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
22085
22089
  message: "reserved_expense_label"
@@ -22087,7 +22091,7 @@ var SaveMonthlyExpenseSchema = z97.object({
22087
22091
  /** Unidades mayores de la moneda; conserva decimales donde aplique. */
22088
22092
  amount: z97.number().finite().min(0),
22089
22093
  allocations: z97.array(z97.object({
22090
- operationId: z97.string().uuid(),
22094
+ operationId: z97.string().guid(),
22091
22095
  sharePct: z97.number().int().min(1).max(100)
22092
22096
  })).min(1).refine((allocations) => allocations.reduce((sum, one) => sum + one.sharePct, 0) <= 100, {
22093
22097
  message: "allocations_must_sum_to_100"
@@ -22096,7 +22100,7 @@ var SaveMonthlyExpenseSchema = z97.object({
22096
22100
  }).optional()
22097
22101
  }).strict();
22098
22102
  var DeleteMonthlyExpenseSchema = z97.object({
22099
- operationId: z97.string().uuid().optional(),
22103
+ operationId: z97.string().guid().optional(),
22100
22104
  month: z97.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/),
22101
22105
  label: z97.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
22102
22106
  message: "reserved_expense_label"
@@ -22104,11 +22108,11 @@ var DeleteMonthlyExpenseSchema = z97.object({
22104
22108
  }).strict();
22105
22109
  var SetAdSpendSchema = z97.object({
22106
22110
  month: z97.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
22107
- operationId: z97.string().uuid().optional(),
22111
+ operationId: z97.string().guid().optional(),
22108
22112
  amount: z97.number().finite().min(0).nullable()
22109
22113
  }).strict();
22110
22114
  var MonthlyExpensesQuerySchema = z97.object({
22111
- operationId: z97.string().uuid().optional(),
22115
+ operationId: z97.string().guid().optional(),
22112
22116
  month: z97.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional()
22113
22117
  }).strict();
22114
22118
 
@@ -22137,13 +22141,13 @@ var ResolveUnmatchedProductSchema = z98.object({
22137
22141
  provider: z98.enum(PRODUCT_ALIAS_PROVIDERS),
22138
22142
  externalId: z98.string().trim().min(1).max(64),
22139
22143
  label: z98.string().trim().min(1).max(PRODUCT_ALIAS_LABEL_MAX_LENGTH),
22140
- operationId: z98.string().uuid(),
22144
+ operationId: z98.string().guid(),
22141
22145
  /** Presente ⇒ es el producto al que pertenece. Ausente ⇒ es uno nuevo. */
22142
- productControlId: z98.string().uuid().optional()
22146
+ productControlId: z98.string().guid().optional()
22143
22147
  }).strict();
22144
22148
  var MergeProductsSchema = z98.object({
22145
- sourceId: z98.string().uuid(),
22146
- targetId: z98.string().uuid()
22149
+ sourceId: z98.string().guid(),
22150
+ targetId: z98.string().guid()
22147
22151
  }).strict().refine((value) => value.sourceId !== value.targetId, {
22148
22152
  message: "merge_same_product",
22149
22153
  path: [
@@ -22151,8 +22155,8 @@ var MergeProductsSchema = z98.object({
22151
22155
  ]
22152
22156
  });
22153
22157
  var CreateProductControlFromTaskSchema = z98.object({
22154
- taskId: z98.string().uuid(),
22155
- operationId: z98.string().uuid().optional()
22158
+ taskId: z98.string().guid(),
22159
+ operationId: z98.string().guid().optional()
22156
22160
  }).strict();
22157
22161
 
22158
22162
  // ../../packages/types/src/product-order-line.ts
@@ -22200,7 +22204,7 @@ var ProductOrderLineSchema = z99.object({
22200
22204
  }).strict();
22201
22205
  var ORDER_LINES_BATCH_MAX = 5e3;
22202
22206
  var ImportOrderLinesSchema = z99.object({
22203
- operationId: z99.string().uuid(),
22207
+ operationId: z99.string().guid(),
22204
22208
  provider: z99.string().min(1).max(32),
22205
22209
  source: z99.string().min(1).max(32),
22206
22210
  reportedAt: z99.string().datetime(),
@@ -22226,7 +22230,7 @@ var ImportOrderLinesFileSchema = z99.object({
22226
22230
  /** El archivo en base64. `.xlsx` del proveedor. */
22227
22231
  fileBase64: z99.string().min(1).max(Math.ceil(8 * 1024 * 1024 / 3) * 4),
22228
22232
  filename: z99.string().min(1).max(200),
22229
- operationId: z99.string().uuid().optional(),
22233
+ operationId: z99.string().guid().optional(),
22230
22234
  provider: z99.string().min(1).max(32).default("dropi"),
22231
22235
  /**
22232
22236
  * Solo mirar: devuelve el resumen y NO escribe nada.
@@ -22260,7 +22264,7 @@ var OrderLinesFileSummarySchema = z99.object({
22260
22264
  });
22261
22265
  var SyncShopifyOrdersSchema = z99.object({
22262
22266
  shopDomain: z99.string().min(3).max(120).optional(),
22263
- operationId: z99.string().uuid().optional(),
22267
+ operationId: z99.string().guid().optional(),
22264
22268
  /** YYYY-MM-DD. Sin rango, el mes en curso. */
22265
22269
  since: z99.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
22266
22270
  until: z99.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
@@ -22461,7 +22465,7 @@ var SaveProductControlCostingSchema = z100.object({
22461
22465
  /** El de Shopify, cuando el producto vive en la tienda. */
22462
22466
  shopifyProductId: z100.string().min(1).optional(),
22463
22467
  /** El NUESTRO, para el producto que nació del archivo del proveedor. */
22464
- productControlId: z100.string().uuid().optional(),
22468
+ productControlId: z100.string().guid().optional(),
22465
22469
  /** Su precio de venta, solo si el producto no vive en Shopify. */
22466
22470
  manualSellingPrice: z100.number().positive().nullable().optional(),
22467
22471
  targetCountry: z100.string().min(2).max(2),
@@ -22501,7 +22505,7 @@ var SaveProductControlCostingSchema = z100.object({
22501
22505
  });
22502
22506
  var SaveProductCatalogSchema = z100.object({
22503
22507
  shopDomain: z100.string().min(1).optional(),
22504
- productControlId: z100.string().uuid(),
22508
+ productControlId: z100.string().guid(),
22505
22509
  /** Nulo BORRA la meta. Cero sería una meta de no ganar nada. */
22506
22510
  targetMonthlyProfit: z100.number().finite().positive().nullable().optional(),
22507
22511
  lifecycleStatus: z100.enum([
@@ -22524,7 +22528,7 @@ var ProductControlCampaignFieldsSchema = z100.object({
22524
22528
  }).strict();
22525
22529
  var LinkProductControlCampaignSchema = z100.union([
22526
22530
  ProductControlCampaignFieldsSchema.extend({
22527
- productControlId: z100.string().uuid()
22531
+ productControlId: z100.string().guid()
22528
22532
  }).strict(),
22529
22533
  ProductControlCampaignFieldsSchema.extend({
22530
22534
  shopDomain: z100.string().min(1),
@@ -22671,7 +22675,7 @@ var ImportFulfillmentCountsResponseSchema = z100.object({
22671
22675
  });
22672
22676
  var CreateManualProductControlSchema = z100.object({
22673
22677
  /** UUID que el diálogo fija por apertura; es además el id del producto. */
22674
- requestId: z100.string().uuid(),
22678
+ requestId: z100.string().guid(),
22675
22679
  title: z100.string().trim().min(1).max(200),
22676
22680
  /** País donde vende este producto; la moneda sale de él en el servidor. */
22677
22681
  targetCountry: z100.string().regex(/^[A-Z]{2}$/).refine((code) => {
@@ -22683,7 +22687,7 @@ var CreateManualProductControlSchema = z100.object({
22683
22687
  }
22684
22688
  }, "unsupported_finance_country"),
22685
22689
  /** Solo cuando coincide con el país elegido; si no, se omite. */
22686
- operationId: z100.string().uuid().optional(),
22690
+ operationId: z100.string().guid().optional(),
22687
22691
  manualSellingPrice: z100.number().finite().positive().max(Number.MAX_SAFE_INTEGER),
22688
22692
  supplierCost: z100.number().finite().positive().max(Number.MAX_SAFE_INTEGER),
22689
22693
  shippingCost: z100.number().finite().nonnegative().max(Number.MAX_SAFE_INTEGER),
@@ -22701,7 +22705,7 @@ var CreateManualProductControlSchema = z100.object({
22701
22705
  }
22702
22706
  });
22703
22707
  var CreateManualProductControlResponseSchema = z100.object({
22704
- productControlId: z100.string().uuid(),
22708
+ productControlId: z100.string().guid(),
22705
22709
  created: z100.boolean()
22706
22710
  });
22707
22711
 
@@ -22792,7 +22796,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22792
22796
  "approve_video_script",
22793
22797
  // 2026-10-14: optional exact plan binding shared by legacy/unified review.
22794
22798
  // Hash captured from the real registered schema in apps/mcp/src/server.test.ts.
22795
- "242c9ce8db5e19c065d67d2e3f3cf9fca20e119b9485bcf854a2233832523b0b",
22799
+ "5f7722993798d952d4a920a9bc7929a8c6a54f8ca13bff1b824d555dd680a6d2",
22796
22800
  "credit_consuming",
22797
22801
  "creative",
22798
22802
  [
@@ -22834,7 +22838,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22834
22838
  ], [
22835
22839
  "staging_asset"
22836
22840
  ], WHATSAPP_ONLY_CHANNEL_EXPOSURE),
22837
- defineCapability("check_media_upload", "daf202e0ff3a7a14425d164a7be6a81922b12233e85dbb898894e7c3ba6c5876", "none", "read_only", [
22841
+ defineCapability("check_media_upload", "58acbc7574d140389efbddfd45e660a353429681891b3d85a08b74351bb5acab", "none", "read_only", [
22838
22842
  "read"
22839
22843
  ], [
22840
22844
  slot("upload_session", true, [
@@ -22845,7 +22849,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22845
22849
  ], [
22846
22850
  "uploaded_asset"
22847
22851
  ], MCP_ONLY_CHANNEL_EXPOSURE),
22848
- defineCapability("cost_dropshipping_project", "411c0e362f132e564d5f948f8d87e3ae55f03dad7d02d8224b949b899a187359", "state_change", "business", [
22852
+ defineCapability("cost_dropshipping_project", "fead3bca76b7531c52020cd64135072593783fe12c0c605865a08f1d7d028001", "state_change", "business", [
22849
22853
  "state_change"
22850
22854
  ], [
22851
22855
  slot("project_revision", true, [
@@ -22882,7 +22886,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22882
22886
  ], [
22883
22887
  "project_costing"
22884
22888
  ]),
22885
- defineCapability("cost_product", "6d1f85a999dbdabae4eda406ff4689cdff2016df375b5b6741b91f4308d819af", "none", "read_only", [
22889
+ defineCapability("cost_product", "2272a6a3375401ced9deba82e41796b037aef20d712bc7996221e7fee0d7a4d7", "none", "read_only", [
22886
22890
  "read"
22887
22891
  ], [
22888
22892
  slot("product_reference", false, [], [
@@ -22926,7 +22930,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22926
22930
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
22927
22931
  // MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
22928
22932
  // MCP 9.1.0: combine current animated-video controls and initial GIF choice.
22929
- "3e02399a7785df328f1c4d63cfbb6d7481abaac9f91d4a5cf51d410e657d63aa",
22933
+ "5991b2e897aad7b10c4e38a93e8c58234741498393439cf0228ed9ffd966efef",
22930
22934
  "credit_consuming",
22931
22935
  "creative",
22932
22936
  [
@@ -22984,7 +22988,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22984
22988
  // MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
22985
22989
  // MCP 9.1.0: combine current animated-video controls and initial GIF choice.
22986
22990
  // MCP 12.4.0: landingStrategy narrowed to classic + social_proof.
22987
- "c35f8c65762db3ea077b09f5f165e5571abea0f40250e4c096d1ef7cad7e5f7a",
22991
+ // MCP 12.5.0: pain_solution restored to landingStrategy.
22992
+ "68a740d97238e720000c16db56ae5748ceb560e342f8fbfe605c954e6284fda7",
22988
22993
  "credit_consuming",
22989
22994
  "creative",
22990
22995
  [
@@ -23144,7 +23149,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23144
23149
  // SHARED_CHANNEL_EXPOSURE to restore it.
23145
23150
  WHATSAPP_ONLY_CHANNEL_EXPOSURE
23146
23151
  ),
23147
- defineCapability("edit_image_creative", "50eca473829328dfb63b9cbae03a9835b79c510e29528563e09b7eb3e5e9bca4", "credit_consuming", "creative", [
23152
+ defineCapability("edit_image_creative", "eb487773c4a9ffd5d4472c5a1d77e0fef7b625dbf9ca15b5da700a903ba30945", "credit_consuming", "creative", [
23148
23153
  "credit_consuming",
23149
23154
  "state_change"
23150
23155
  ], [
@@ -23163,7 +23168,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23163
23168
  ], [
23164
23169
  "creative"
23165
23170
  ]),
23166
- defineCapability("get_image_edit_status", "fe59aefd433afe7e5a2d8b4a81084583750c1447c877b6bce698340326665141", "none", "read_only", [
23171
+ defineCapability("get_image_edit_status", "3feb680140ab8459c10c22fb3aba3a7d41e147fddfcdd7e4cdac050c0f7ea34e", "none", "read_only", [
23167
23172
  "read"
23168
23173
  ], [
23169
23174
  slot("creative_operation", true, [
@@ -23175,7 +23180,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23175
23180
  ], [
23176
23181
  "creative_edit_status"
23177
23182
  ], MCP_ONLY_CHANNEL_EXPOSURE),
23178
- defineCapability("edit_task_draft", "1c9343bdce51aac36ec6254557c8a904037746523168527f012b4c5b6361e98e", "state_change", "creative", [
23183
+ defineCapability("edit_task_draft", "6df71b63f0c00ba9eac12f31fb0b71610225ece74df85032025bb77197bb7c22", "state_change", "creative", [
23179
23184
  "state_change"
23180
23185
  ], [
23181
23186
  slot("task_angle", true, [
@@ -23190,7 +23195,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23190
23195
  ], [
23191
23196
  "task_draft"
23192
23197
  ]),
23193
- defineCapability("estimate_creative_variant", "d4453364c0706bf88f480cebc977916f06d222d7eebebc9cfa91165929a1a998", "none", "read_only", [
23198
+ defineCapability("estimate_creative_variant", "468079ba24e5e0d3c5c707cd54fec64571be429e66cadc12019af4d6e9d10c4e", "none", "read_only", [
23194
23199
  "read"
23195
23200
  ], [
23196
23201
  slot("source_task", true, [
@@ -23212,7 +23217,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23212
23217
  ], [
23213
23218
  "cost_estimate"
23214
23219
  ]),
23215
- defineCapability("estimate_market_study_cost", "d89b2ddfd5020446d7d2b58001b75eedb8f737bc17d908bdbdde1a1c9120f387", "none", "read_only", [
23220
+ defineCapability("estimate_market_study_cost", "d1fbe8ead642d481258c419a1eed059f9c8188d1cd9f2d4eed12e202fc8800a4", "none", "read_only", [
23216
23221
  "read"
23217
23222
  ], [
23218
23223
  slot("creative_kind", true, [
@@ -23237,7 +23242,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23237
23242
  ], [
23238
23243
  "cost_estimate"
23239
23244
  ], MCP_ONLY_CHANNEL_EXPOSURE),
23240
- defineCapability("find_winning_products", "7c4c4fd675f8c1ae9795bd6c7a379207a08cbf9ac5794593b76122294c31e818", "credit_consuming", "business", [
23245
+ defineCapability("find_winning_products", "b73a18bb9618b96067b17791bf2f8e7450e17e34881c4f997e117be89abe058d", "credit_consuming", "business", [
23241
23246
  "credit_consuming",
23242
23247
  "state_change"
23243
23248
  ], [
@@ -23265,7 +23270,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23265
23270
  // from `pnpm --filter @productmaker/mcp test` printing the real digest.
23266
23271
  // Re-baselined 2026-09-26: `idempotencyKey` field description corrected —
23267
23272
  // paid tools ignore caller-provided keys and derive their own semantic key.
23268
- "0e21a9ae925347de20cad321161cb3af0f6a4f9e342c5c7139baf8de70056734",
23273
+ "e9ae8370da117bae121714da12b78f234e07a0805093bce354d7fb9fcec2291e",
23269
23274
  "credit_consuming",
23270
23275
  "creative",
23271
23276
  [
@@ -23324,7 +23329,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23324
23329
  "video"
23325
23330
  ]
23326
23331
  ),
23327
- defineCapability("generate_image_creatives", "2f1698b623d98645b7c618a17988f3aac30f403a9c3f3dc26eb5bdbd9c6ef23e", "credit_consuming", "creative", [
23332
+ defineCapability("generate_image_creatives", "f0d1f771d83c50070ebdef6554072e984997336cb9b7f7f06acd818b021a0187", "credit_consuming", "creative", [
23328
23333
  "credit_consuming",
23329
23334
  "state_change"
23330
23335
  ], [
@@ -23430,7 +23435,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23430
23435
  defineCapability(
23431
23436
  "generate_landing",
23432
23437
  // MCP 12.4.0: guided landingStrategy narrowed to classic + social_proof.
23433
- "d3ef2376273a5a1b987c79182e63ff00a03de322e1a13e0dc69f7ffa8330536e",
23438
+ // MCP 12.5.0: pain_solution restored to guided landingStrategy.
23439
+ "16c4e1ea0cd12ee3367e06b4f73a177c94e16ab7d5323d971d577301ba2c7b70",
23434
23440
  "credit_consuming",
23435
23441
  "creative",
23436
23442
  [
@@ -23543,7 +23549,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23543
23549
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
23544
23550
  // MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
23545
23551
  // MCP 9.1.0: combine current animated-video controls and initial GIF choice.
23546
- "f6cb1097e049216da08e1fb130e53e53761c13198cbb76d56e78fbf2e35441c1",
23552
+ "66dee35d59da0e88e72e24c503f3f1dc46c17c1162d98d48705e2bfe552f3f02",
23547
23553
  "credit_consuming",
23548
23554
  "creative",
23549
23555
  [
@@ -23664,7 +23670,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23664
23670
  }
23665
23671
  ]
23666
23672
  ),
23667
- defineCapability("get_meta_campaign_status", "92077241cf4e9d14edefca410e85715cc383b1433081c3461c925f8fc3d6e8ab", "none", "read_only", [
23673
+ defineCapability("get_meta_campaign_status", "a89fa144b69309bffd3d402c63ab6697757c447022d4af2a20d321f084efb274", "none", "read_only", [
23668
23674
  "read"
23669
23675
  ], [
23670
23676
  slot("campaign", true, [
@@ -23675,7 +23681,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23675
23681
  ], [
23676
23682
  "campaign_status"
23677
23683
  ]),
23678
- defineCapability("get_product_research_run", "3d0bfa4409daa4a8126d18787c3dc619dbdf2fbb679a2cffe9ffcd1c0d96402f", "none", "read_only", [
23684
+ defineCapability("get_product_research_run", "fd6d6260b4c9cf9cac5c0d210ceec54f99825d6214f7e3625622e82305e69550", "none", "read_only", [
23679
23685
  "read"
23680
23686
  ], [
23681
23687
  slot("research_run", true, [
@@ -23686,7 +23692,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23686
23692
  ], [
23687
23693
  "product_research_run"
23688
23694
  ]),
23689
- defineCapability("get_task_status", "6876d865685dd371ae6c2da2d5a69b657731e5a032aff46ac95b6077e9a6d93e", "none", "read_only", [
23695
+ defineCapability("get_task_status", "308241071b3ec785b1f0eba0fc17383e9fe8f2452c6a5a5ef27fd792a99b9d4c", "none", "read_only", [
23690
23696
  "read"
23691
23697
  ], [
23692
23698
  slot("task", true, [
@@ -23700,7 +23706,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23700
23706
  ], [
23701
23707
  "task_status"
23702
23708
  ]),
23703
- defineCapability("get_tiktok_campaign_status", "7a2f90a9a9ba91506fbb57a0a881d5a7b9ca1bb1074b0a754520f02fd81b2801", "none", "read_only", [
23709
+ defineCapability("get_tiktok_campaign_status", "e19b1536d8e317185fb9662a244cc1e94986004b5a4bf84beaf473b5de28562f", "none", "read_only", [
23704
23710
  "read"
23705
23711
  ], [
23706
23712
  slot("campaign", true, [
@@ -23714,7 +23720,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23714
23720
  ], [
23715
23721
  "campaign_status"
23716
23722
  ]),
23717
- defineCapability("get_video_script", "e987ff48555dfdab439f9910fb1fa25af373c78c8a9a5ef26458c82add90f2a2", "none", "read_only", [
23723
+ defineCapability("get_video_script", "1de9980596c34b71ce8843c090549cf310ed52933f53c2b9c3fca13204441d64", "none", "read_only", [
23718
23724
  "read"
23719
23725
  ], [
23720
23726
  slot("task", true, [
@@ -23728,7 +23734,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23728
23734
  ], [
23729
23735
  "video_script"
23730
23736
  ]),
23731
- defineCapability("guide_dropshipping_launch", "0e7a1cb5ad5c6681473df5689336edcd7a63b8d68853359982e44bfd98a65db8", "none", "business", [
23737
+ defineCapability("guide_dropshipping_launch", "1ab3654ed7ef02fbc7b690826a475f27839a3402ca301b8cf26992c11e8f7cf8", "none", "business", [
23732
23738
  "read"
23733
23739
  ], [
23734
23740
  slot("project", false, [
@@ -23750,7 +23756,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23750
23756
  "get_actor_voice_capabilities",
23751
23757
  // Filled by the MCP schema fingerprint test (sha256 of the canonicalized
23752
23758
  // inputSchema) — run apps/mcp server.test.ts to compute.
23753
- "4c31630c2796cbcf250b58f2205c7f5882ac53ad0c9ac7fe929f1b6de78952a5",
23759
+ "862c210dd3c6bf0584ac61deb84617ecb41bf0219098995a1c5b84133af33239",
23754
23760
  "none",
23755
23761
  "read_only",
23756
23762
  [
@@ -23769,7 +23775,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23769
23775
  ],
23770
23776
  MCP_ONLY_CHANNEL_EXPOSURE
23771
23777
  ),
23772
- defineCapability("quote_actor_voice", "5b1deafe387305bc268cd8d58761860b4c02bf10f0c5cd455925f96b40e7b24d", "none", "read_only", [
23778
+ defineCapability("quote_actor_voice", "4d2e9a643abf4cfe5e02789fed36cdfebc9ede6ab4557d0e5be1e4edb46fb836", "none", "read_only", [
23773
23779
  "read"
23774
23780
  ], [
23775
23781
  slot("actor", true, [
@@ -23783,7 +23789,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23783
23789
  ], [
23784
23790
  "actor_voice_quote"
23785
23791
  ], MCP_ONLY_CHANNEL_EXPOSURE),
23786
- defineCapability("generate_actor_voice_preview", "e0c856beacda2344fb0830b5822848c01e82f1b6a7749176e8973c07d5a7c769", "credit_consuming", "creative", [
23792
+ defineCapability("generate_actor_voice_preview", "cb5a0033621df9bc88f4dcea658885eb35a4ebdc6ef88865c3d8afbe3b229548", "credit_consuming", "creative", [
23787
23793
  "credit_consuming",
23788
23794
  "state_change"
23789
23795
  ], [
@@ -23807,7 +23813,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23807
23813
  ], MCP_ONLY_CHANNEL_EXPOSURE),
23808
23814
  defineCapability(
23809
23815
  "get_actor_voice_preview",
23810
- "58cc8667847be5e521534d6a19853782b9d4c65539ede8eaa5dbe7815e10ae3f",
23816
+ "b28f1c7d7e7981ed672509398242b7b7256e2ab44185699e6a0ecd8f39882761",
23811
23817
  "none",
23812
23818
  "creative",
23813
23819
  // Recovery uses the original accepted quote; it must not ask to pay again.
@@ -23832,7 +23838,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23832
23838
  ],
23833
23839
  MCP_ONLY_CHANNEL_EXPOSURE
23834
23840
  ),
23835
- defineCapability("approve_actor_voice", "ae77a93a483b24e9ec79322ac5a7ed39372517c196488b04b3cdfd2ef5205784", "state_change", "creative", [
23841
+ defineCapability("approve_actor_voice", "5b1c61b992dce69b35f9fb1a388bbd73d41c99575fa86b72121b043045254944", "state_change", "creative", [
23836
23842
  "state_change"
23837
23843
  ], [
23838
23844
  slot("actor", true, [
@@ -23866,7 +23872,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23866
23872
  ], [
23867
23873
  "meta_destination"
23868
23874
  ]),
23869
- defineCapability("list_product_research_runs", "3b8fac903cd9e30c5b6a6c584cc70a819af5392bbdbb32b69eab4c65dc52b556", "none", "read_only", [
23875
+ defineCapability("list_product_research_runs", "ee2d750bfd65a34a9c16bb39dac584fe0784956eaf7b0428a88b1e886846f2af", "none", "read_only", [
23870
23876
  "read"
23871
23877
  ], [
23872
23878
  slot("pagination", false, [
@@ -23877,7 +23883,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23877
23883
  ], [
23878
23884
  "product_research_run"
23879
23885
  ]),
23880
- defineCapability("list_shopify_products", "152b137e01066f3b443987ad75f5be00de8696ce984144bd775416192be20667", "none", "read_only", [
23886
+ defineCapability("list_shopify_products", "c3daf527e345f737c8b23eb347b77fbf2290433257753122a8d55fdc65d58e78", "none", "read_only", [
23881
23887
  "read"
23882
23888
  ], [
23883
23889
  slot("shop", true, [
@@ -23901,7 +23907,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23901
23907
  ], [
23902
23908
  "shop"
23903
23909
  ]),
23904
- defineCapability("list_tasks", "cac5e9dda34b90550024cc546976fab1d6de4fc8fca85a3ec6abde65223cb56c", "none", "read_only", [
23910
+ defineCapability("list_tasks", "4a553c287e590c2dcb905c63eb92c8612093a82476093b9f55c0821cad486598", "none", "read_only", [
23905
23911
  "read"
23906
23912
  ], [
23907
23913
  slot("pagination", false, [
@@ -23923,7 +23929,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23923
23929
  ], [
23924
23930
  "tiktok_advertiser"
23925
23931
  ]),
23926
- defineCapability("publish_creatives_to_meta", "dff962c84ed7d0393444dcbe86cb6f4016b5928c1d0005f78ce9a365f1923ac3", "external_mutation", "publishing", [
23932
+ defineCapability("publish_creatives_to_meta", "d9b8961cb26c2357f45b0ed95eae479affc840742b5b09620a67ce325568cbee", "external_mutation", "publishing", [
23927
23933
  "external_mutation",
23928
23934
  "state_change"
23929
23935
  ], [
@@ -23958,7 +23964,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23958
23964
  ], [
23959
23965
  "meta_campaign"
23960
23966
  ]),
23961
- defineCapability("publish_to_meta", "2d2946fbb796cc8198acfed5e15935c690516259a9bfa9e9a75d1fb33548eef2", "external_mutation", "publishing", [
23967
+ defineCapability("publish_to_meta", "663d574b4aa005a5df41f6b8ff458e3f983f874fe6caef94ab0ae8a1477f70bb", "external_mutation", "publishing", [
23962
23968
  "external_mutation",
23963
23969
  "state_change"
23964
23970
  ], [
@@ -23996,7 +24002,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23996
24002
  ], [
23997
24003
  "meta_publication"
23998
24004
  ]),
23999
- defineCapability("publish_to_shopify", "e041e404ad9f6cf49231c9bc38df22e6bd0aa6e4082b4ab8dc655a132b79873f", "external_mutation", "publishing", [
24005
+ defineCapability("publish_to_shopify", "00c4c7af09bb45a72896118ca154a2dc9518f05d74bb9386c825be541fa10fdb", "external_mutation", "publishing", [
24000
24006
  "external_mutation",
24001
24007
  "state_change"
24002
24008
  ], [
@@ -24039,7 +24045,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24039
24045
  // capability set unchanged, so the live agent's parity gate (which forces
24040
24046
  // shadow mode on any canonical gap) is not tripped. Gated server-side by
24041
24047
  // SERVICE_MOTION_GRAPHICS_ENABLED + the `service-motion-graphics` feature.
24042
- defineCapability("create_animated_video", "1d375b3ad4f60d9337009cb86209d66f05da127fdf2748c1cf9d36503e4dce5c", "credit_consuming", "creative", [
24048
+ defineCapability("create_animated_video", "2177ed726e767978eb61fa007f621b389f3b1eb3a2da967fdb44c279bf20fecd", "credit_consuming", "creative", [
24043
24049
  "credit_consuming",
24044
24050
  "state_change"
24045
24051
  ], [
@@ -24090,7 +24096,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24090
24096
  // MCP-only service journey (2026-10-11): brand analysis → service landing →
24091
24097
  // create_animated_video. WhatsApp has no adapter for either, so both are
24092
24098
  // declared unavailable there and its parity gate is unchanged.
24093
- defineCapability("create_brand", "7f5680574f38f1005d162c2a2a3805be82896508793ebcdd5491b8459c803158", "credit_consuming", "creative", [
24099
+ defineCapability("create_brand", "0dba1e46eaaf3ae6ffda459de7eebbdfb2f04da1180b21f84ae4caae434dbbcf", "credit_consuming", "creative", [
24094
24100
  "credit_consuming",
24095
24101
  "state_change"
24096
24102
  ], [
@@ -24113,7 +24119,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24113
24119
  ], [
24114
24120
  "brand"
24115
24121
  ], MCP_ONLY_CHANNEL_EXPOSURE),
24116
- defineCapability("create_service_landing", "ce99d75f4b00bea23b6bf4f56ef3331b266176cb0a9dead55611ee78d21c41b3", "credit_consuming", "creative", [
24122
+ defineCapability("create_service_landing", "9e0f68278d2daa3bcf0326dd8e796d4dc82423f850c765efd48881c99f04a14f", "credit_consuming", "creative", [
24117
24123
  "credit_consuming",
24118
24124
  "state_change"
24119
24125
  ], [
@@ -24138,7 +24144,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24138
24144
  ], [
24139
24145
  "service_landing"
24140
24146
  ], MCP_ONLY_CHANNEL_EXPOSURE),
24141
- defineCapability("create_service_images", "ce729a35f8781dd301514075e2e4408b6660db7523e3705ff2c8cbde571cddf6", "credit_consuming", "creative", [
24147
+ defineCapability("create_service_images", "937e86a1b0e3e0678a029062cddb0a9b632c8bcbb9864225f66488e3e2abdbed", "credit_consuming", "creative", [
24142
24148
  "credit_consuming",
24143
24149
  "state_change"
24144
24150
  ], [
@@ -24175,7 +24181,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24175
24181
  ], MCP_ONLY_CHANNEL_EXPOSURE),
24176
24182
  // MCP-only recovery of an existing code edit. WhatsApp has no code-landing
24177
24183
  // editor or edit receipt input; it hands this recovery to ProductMaker Web.
24178
- defineCapability("verify_landing_commerce", "4b98ea73f291428fa19ec91ec37deb44a776b76cb19b0d47aef20ee905da7d10", "external_mutation", "publishing", [
24184
+ defineCapability("verify_landing_commerce", "f6dcbfbf8e90c39246f0b377745cd2c6c0f76f314c9736a257087c6d00a90f29", "external_mutation", "publishing", [
24179
24185
  "read",
24180
24186
  "state_change",
24181
24187
  "external_mutation"
@@ -24194,7 +24200,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24194
24200
  defineCapability(
24195
24201
  "publish_to_tiktok",
24196
24202
  // MCP 11.7.0: native WhatsApp destination and major-currency budget inputs.
24197
- "50b932193b62929498ae342417427ef84b1982eb7620c6baffb62c8fb986e66e",
24203
+ "ce6e6572583a615203835f6e191a50883ba00f95b8813b3c2bc3d5d92746b24f",
24198
24204
  "external_mutation",
24199
24205
  "publishing",
24200
24206
  [
@@ -24232,7 +24238,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24232
24238
  "tiktok_publication"
24233
24239
  ]
24234
24240
  ),
24235
- defineCapability("prepare_winning_product_image", "6915790d22256a648374412ac4d11126fe3fabc9404f4552205057f9da3ce0db", "none", "business", [
24241
+ defineCapability("prepare_winning_product_image", "51c4795176c13b67901e2aad161124598675c7e5ae476b35a63be5b06906ccca", "none", "business", [
24236
24242
  "state_change"
24237
24243
  ], [
24238
24244
  slot("winner_reference", true, [
@@ -24244,7 +24250,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24244
24250
  ], [
24245
24251
  "product_media"
24246
24252
  ], MCP_ONLY_CHANNEL_EXPOSURE),
24247
- defineCapability("regenerate_video_script", "eb9546e5cda3864de78ff119ae81dd17c893ea9ea5be1bf0fbfeb8b45302e639", "credit_consuming", "creative", [
24253
+ defineCapability("regenerate_video_script", "e68fa5f4f6adb37c4275c60dcb6983d14655a030450c0ed75012044cff0aa29c", "credit_consuming", "creative", [
24248
24254
  "credit_consuming",
24249
24255
  "state_change"
24250
24256
  ], [
@@ -24284,7 +24290,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24284
24290
  ], [
24285
24291
  "meta_upload_session"
24286
24292
  ], WHATSAPP_ONLY_CHANNEL_EXPOSURE),
24287
- defineCapability("request_media_upload", "9a50a4647c61f97fb12bbb9b25f7660f392e3cd9825151735cd66292058882ea", "none", "creative", [
24293
+ defineCapability("request_media_upload", "ab70248efd499351ff119e5563e31185040b57e42ccc0e09efe6b6fbeea794a5", "none", "creative", [
24288
24294
  "state_change"
24289
24295
  ], [
24290
24296
  slot("media_kind", true, [
@@ -24307,7 +24313,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24307
24313
  ], [
24308
24314
  "media_upload_session"
24309
24315
  ], MCP_ONLY_CHANNEL_EXPOSURE),
24310
- defineCapability("resolve_pending_action", "9377ff126ec842cfb8278877846c5f8f6f1b9ba0c263e7200f080db9bbe9ae12", "credit_consuming", "creative", [
24316
+ defineCapability("resolve_pending_action", "a7fef1e3299c2bfb387a16b3e1e243fba8df1db961ebc1f27d2119209124c293", "credit_consuming", "creative", [
24311
24317
  "credit_consuming",
24312
24318
  "state_change"
24313
24319
  ], [
@@ -24343,7 +24349,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24343
24349
  ], [
24344
24350
  "task"
24345
24351
  ]),
24346
- defineCapability("start_dropshipping_project", "2b621702e8da8bb894d392060e5e4f677a8dc26f454e991dbb929053715a4f8b", "state_change", "business", [
24352
+ defineCapability("start_dropshipping_project", "996385df905ed85a933c5726fbebf5a29a98f29364badd8256ff306aff38797c", "state_change", "business", [
24347
24353
  "state_change"
24348
24354
  ], [
24349
24355
  slot("origin", true, [
@@ -24364,7 +24370,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24364
24370
  ], [
24365
24371
  "dropshipping_project"
24366
24372
  ]),
24367
- defineCapability("get_daily_control", "d2ee70df5be00618ad23ef558f91e0066e03a69547a4f2d9310bf9ae51ae9a03", "none", "read_only", [
24373
+ defineCapability("get_daily_control", "f68e63aeda284d8f07040f6ec55c84ba5e55a515667a20bfe3a60268a6827130", "none", "read_only", [
24368
24374
  "read"
24369
24375
  ], [
24370
24376
  slot("window_end", false, [
@@ -24382,7 +24388,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24382
24388
  ], [
24383
24389
  "daily_control_report"
24384
24390
  ]),
24385
- defineCapability("link_campaign_to_project", "42785a9781412e0ad7cf7095b7188f315dea4003002777d5a4b1b9cc79ea05e0", "state_change", "business", [
24391
+ defineCapability("link_campaign_to_project", "1a6d51234a38259e9fa00475c76919742818efb32491a75ffa768ff9fede4013", "state_change", "business", [
24386
24392
  "state_change"
24387
24393
  ], [
24388
24394
  slot("project", true, [
@@ -24402,7 +24408,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24402
24408
  ], [
24403
24409
  "campaign_link"
24404
24410
  ]),
24405
- defineCapability("list_importable_products", "8f3e48f6494c85a3fab82163e11536d9d48aa77b058153efaabf4263548a8f02", "none", "read_only", [
24411
+ defineCapability("list_importable_products", "30404855a9d9c61bd437703f0287041ac77bf997fb7c6e5c7dafdf68712020a9", "none", "read_only", [
24406
24412
  "read"
24407
24413
  ], [
24408
24414
  slot("search", false, [
@@ -24419,7 +24425,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24419
24425
  ], [
24420
24426
  "importable_product_page"
24421
24427
  ]),
24422
- defineCapability("import_product_controls", "b9dae191963ae88ad33060db64eedd1cb63856108f18dbec0e8a039b05117d99", "state_change", "business", [
24428
+ defineCapability("import_product_controls", "f0e1de3062389541317f1351977e77fdcb50ee5d0d5251bbc1f1e7e2ab034515", "state_change", "business", [
24423
24429
  "state_change"
24424
24430
  ], [
24425
24431
  slot("products", true, [
@@ -24436,7 +24442,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24436
24442
  ], [
24437
24443
  "product_control"
24438
24444
  ]),
24439
- defineCapability("set_product_costing", "cce7a31e434c7a1f0af2e3ecaf591eb63c6e3570c466c29e2cab00432ab26bc9", "state_change", "business", [
24445
+ defineCapability("set_product_costing", "de1353c7061d00bf793ecc789c0300c6dd54f758dbff86b10915a51592a99df9", "state_change", "business", [
24440
24446
  "state_change"
24441
24447
  ], [
24442
24448
  /* La identidad sin tienda solo existe en el contrato MCP: el
@@ -24474,7 +24480,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24474
24480
  ], [
24475
24481
  "product_control_costing"
24476
24482
  ]),
24477
- defineCapability("get_product_control", "9d448f8cb2d40fa6547f7265bf908925375c33d891993c1f6e8cae5409729f32", "none", "read_only", [
24483
+ defineCapability("get_product_control", "cc67eec02bc5fba649e705078ecebf4703a3e3e25b9d3189921a7e2bae7f6c0c", "none", "read_only", [
24478
24484
  "read"
24479
24485
  ], [
24480
24486
  slot("day", false, [
@@ -24492,7 +24498,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24492
24498
  ], [
24493
24499
  "product_control_report"
24494
24500
  ]),
24495
- defineCapability("report_product_counts", "0d2eb30d9be73cd818a149af365b165ad5739a36ffb591149f9735bfd9636773", "state_change", "business", [
24501
+ defineCapability("report_product_counts", "8fa2561901b7743506a3639038d7806186c0512470bc6988a54c6bee5dbbb0b0", "state_change", "business", [
24496
24502
  "state_change"
24497
24503
  ], [
24498
24504
  slot("product_control", true, [
@@ -24521,7 +24527,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24521
24527
  ], [
24522
24528
  "product_control_daily_counts"
24523
24529
  ]),
24524
- defineCapability("get_finances", "da5fdd11b49980f85dcee63386e5b443786f65581612ce9333770a631e1ccf45", "none", "read_only", [
24530
+ defineCapability("get_finances", "bb57d3594b204597e9abd2d9beb7df644d07f5683a159d4de1860fa9d03aa5b4", "none", "read_only", [
24525
24531
  "read"
24526
24532
  ], [
24527
24533
  slot("month", false, [
@@ -24535,7 +24541,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24535
24541
  ], [
24536
24542
  "monthly_pl"
24537
24543
  ]),
24538
- defineCapability("sync_shopify_orders", "6a43ef95dc4d4943292416d0f3ef71da9ae19a16593bf76a294ef4b3f8f0eaac", "state_change", "business", [
24544
+ defineCapability("sync_shopify_orders", "0f821de23aa171e89e7e03c1910be57d8dbd878491cbad45a43c4540b4872910", "state_change", "business", [
24539
24545
  "state_change"
24540
24546
  ], [
24541
24547
  slot("shop", false, [
@@ -24555,7 +24561,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24555
24561
  ], [
24556
24562
  "product_order_line"
24557
24563
  ]),
24558
- defineCapability("import_orders_file", "d4691f530dee83c40613d70b2830dc91fb21f5822449601caeaaab409622911c", "state_change", "business", [
24564
+ defineCapability("import_orders_file", "449352851f20e229d488fd10dcfde682774d5c6ef0c66294bedfd6da8d1d93e9", "state_change", "business", [
24559
24565
  "state_change"
24560
24566
  ], [
24561
24567
  slot("orders_file", true, [
@@ -24577,7 +24583,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24577
24583
  ], [
24578
24584
  "product_order_line"
24579
24585
  ]),
24580
- defineCapability("create_operation", "0e610436a98cec2815216d526294da3cfc835830bb960e5dc0381d65b6edf9e5", "state_change", "business", [
24586
+ defineCapability("create_operation", "569501e4e03e6f1782fcf7458e752864804b1ffaa9eb7bd9522e05260939c938", "state_change", "business", [
24581
24587
  "state_change"
24582
24588
  ], [
24583
24589
  slot("country", true, [
@@ -24591,7 +24597,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24591
24597
  ], [
24592
24598
  "finance_operation"
24593
24599
  ]),
24594
- defineCapability("merge_products", "062d0afbedc3309c61cb7eaaf1902a05e2725897f04f5e79ad7e354ac8f05f21", "state_change", "business", [
24600
+ defineCapability("merge_products", "8519963a68603ed7f4a2a82d24e43f317f0a9840e7fd7ba5a90832c4f4a6bcaf", "state_change", "business", [
24595
24601
  "state_change"
24596
24602
  ], [
24597
24603
  slot("source_product", true, [
@@ -24605,7 +24611,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24605
24611
  ], [
24606
24612
  "product_control"
24607
24613
  ]),
24608
- defineCapability("set_monthly_expense", "2ad9958b36fbfc6d665ff1fb33e8fbd446b01d71fc60dcc0b2074fcf8770f2c1", "state_change", "business", [
24614
+ defineCapability("set_monthly_expense", "5ff786a29b44e1961c31fa30decd779d0a18fdf4d7a0bdff7fe130eda59640a4", "state_change", "business", [
24609
24615
  "state_change"
24610
24616
  ], [
24611
24617
  slot("expense_label", true, [
@@ -24625,7 +24631,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24625
24631
  ], [
24626
24632
  "monthly_expense"
24627
24633
  ]),
24628
- defineCapability("set_ad_spend", "edbf19766900aafde76ad5b203fd5c9ecbd3e976705b67ab82867a303a6fa6c9", "state_change", "business", [
24634
+ defineCapability("set_ad_spend", "45f5515a91679304c27f2753ec568bcfe0343644363ec3d185eea3a3f220bbc0", "state_change", "business", [
24629
24635
  "state_change"
24630
24636
  ], [
24631
24637
  slot("amount", true, [
@@ -24646,7 +24652,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24646
24652
  "get_dropi_status",
24647
24653
  // Filled by the MCP schema fingerprint test (sha256 of the canonicalized
24648
24654
  // inputSchema) — run apps/mcp server.test.ts to compute.
24649
- "3465e644ebdcaa404d8bcc1af629012c858bb4aed5bb1b56cfaa2af0d53cfc6e",
24655
+ "dbbf0cae464909761b30d649f08ebf588bc34ab66a0b67abcf9ff3442e1ec457",
24650
24656
  "none",
24651
24657
  "read_only",
24652
24658
  [
@@ -24671,7 +24677,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24671
24677
  defineCapability(
24672
24678
  "sync_dropi_orders",
24673
24679
  // Filled by the MCP schema fingerprint test.
24674
- "46f1172e7afe42991957a2dc262cce235dbf31ededdf37ccf866a583bb19123b",
24680
+ "a2b107f6f36ed6e9ed698e89ff54decf180bfce372adabd3bc0d00739ebd6a02",
24675
24681
  "state_change",
24676
24682
  "business",
24677
24683
  [
@@ -24705,7 +24711,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24705
24711
  defineCapability(
24706
24712
  "create_manual_product",
24707
24713
  // Filled by the MCP schema fingerprint test.
24708
- "4da701236ab1fd460e66f6def729f61a392bad62e8fecdaf8b3b3098fdec53cb",
24714
+ "00b0366e3c23989c10243e8c34ea74d2786c7f521093a006e53cc6e68750e5ad",
24709
24715
  "state_change",
24710
24716
  "business",
24711
24717
  [
@@ -24748,7 +24754,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24748
24754
  defineCapability(
24749
24755
  "list_unmatched_products",
24750
24756
  // Filled by the MCP schema fingerprint test.
24751
- "2c89690b4282a881f29f3bae11268786abf385c2bec0e3d7a1643098f4986e1b",
24757
+ "d72bf2d563daabe2ce719aeee4d3f1899154daba063ebca1ef69499e0ff09034",
24752
24758
  "none",
24753
24759
  "read_only",
24754
24760
  [
@@ -24770,7 +24776,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24770
24776
  defineCapability(
24771
24777
  "resolve_unmatched_product",
24772
24778
  // Filled by the MCP schema fingerprint test.
24773
- "39ccb99a5d138f7f99e25c00b68eec8972e34dbcbd966d2081cdaa7c76ac63ba",
24779
+ "05fb2d978e2e878cbbfeca78b87b0f7e25decedfcfa8490b7cfc055139953574",
24774
24780
  "state_change",
24775
24781
  "business",
24776
24782
  [
@@ -24822,7 +24828,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24822
24828
  defineCapability(
24823
24829
  "link_product_campaign",
24824
24830
  // Filled by the MCP schema fingerprint test.
24825
- "a9976318693f137dd37f4608d382fe1deb13b44c2f5257580c8b52b015899dde",
24831
+ "a4ea2424df8482eb5f004676aa6d43a24f8ad8790644a41f521cdeb879a306a9",
24826
24832
  "state_change",
24827
24833
  "business",
24828
24834
  [
@@ -24860,7 +24866,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24860
24866
  defineCapability(
24861
24867
  "delete_monthly_expense",
24862
24868
  // Filled by the MCP schema fingerprint test.
24863
- "fe9c5d5896165b9c65fbfed779db7918dabf87c69e1601430a1509ad2d452de9",
24869
+ "e762a6d49f2ab0ce1f51315d0d0ec11e1456c8b8b8200c66b899808f89f706d5",
24864
24870
  "state_change",
24865
24871
  "business",
24866
24872
  [
@@ -24888,7 +24894,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24888
24894
  defineCapability(
24889
24895
  "remove_product_control",
24890
24896
  // Filled by the MCP schema fingerprint test.
24891
- "ff0b7411497a0b28eda7294c35b09c45f8beff842bbc6a9a4cc993ba3d766cae",
24897
+ "e29785ec81add0115499e3ae616f47224c2c01dc61c5d7f65d306bc1ac28929f",
24892
24898
  "state_change",
24893
24899
  "business",
24894
24900
  [
@@ -24907,7 +24913,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
24907
24913
  ],
24908
24914
  MCP_ONLY_CHANNEL_EXPOSURE
24909
24915
  ),
24910
- defineCapability("report_daily_returns", "7130d216656cc29a47fc972b4edad5003a6653fca48d95052fbf2b561636e91a", "state_change", "business", [
24916
+ defineCapability("report_daily_returns", "c64af9e1750adf5892caa76c0c170feec91e617ba1769ee5c0af17cbbb4fc6d2", "state_change", "business", [
24911
24917
  "state_change"
24912
24918
  ], [
24913
24919
  slot("project", true, [
@@ -25205,7 +25211,7 @@ var WhatsAppQuoteRecoveryReceiptSchema = z103.discriminatedUnion("state", [
25205
25211
  z103.object({
25206
25212
  ...recoveryBase,
25207
25213
  state: z103.literal("consumed"),
25208
- successorCommandId: z103.string().uuid(),
25214
+ successorCommandId: z103.string().guid(),
25209
25215
  choice: z103.enum([
25210
25216
  "without_winner",
25211
25217
  "retry"
@@ -25215,7 +25221,7 @@ var WhatsAppQuoteRecoveryReceiptSchema = z103.discriminatedUnion("state", [
25215
25221
  ...recoveryBase,
25216
25222
  state: z103.literal("awaiting_media"),
25217
25223
  successorCommandId: z103.null(),
25218
- successorCollectionId: z103.string().uuid(),
25224
+ successorCollectionId: z103.string().guid(),
25219
25225
  choice: z103.enum([
25220
25226
  "without_winner",
25221
25227
  "retry"
@@ -25243,10 +25249,10 @@ var json = z103.lazy(() => z103.union([
25243
25249
  z103.number().finite(),
25244
25250
  z103.string(),
25245
25251
  z103.array(json),
25246
- z103.record(json)
25252
+ z103.record(z103.string(), json)
25247
25253
  ]));
25248
25254
  var commandBase = {
25249
- commandId: z103.string().uuid(),
25255
+ commandId: z103.string().guid(),
25250
25256
  requestHash: z103.string().min(1).max(256),
25251
25257
  expectedUpdatedAt: z103.string().datetime(),
25252
25258
  result: json,
@@ -25254,7 +25260,7 @@ var commandBase = {
25254
25260
  };
25255
25261
  var proposedSnapshot = {
25256
25262
  ...commandBase,
25257
- sourceMessageId: z103.string().uuid(),
25263
+ sourceMessageId: z103.string().guid(),
25258
25264
  expectedStatus: z103.literal("proposed"),
25259
25265
  expectedResult: json
25260
25266
  };
@@ -25315,19 +25321,19 @@ var WhatsAppPresentationFinalizerSchema = z103.object({
25315
25321
  ]).optional(),
25316
25322
  plan: z103.object({
25317
25323
  guardOnly: z103.boolean().optional(),
25318
- planId: z103.string().uuid(),
25324
+ planId: z103.string().guid(),
25319
25325
  expectedPlanRevision: z103.number().int().nonnegative(),
25320
- stepId: z103.string().uuid(),
25326
+ stepId: z103.string().guid(),
25321
25327
  expectedStepRevision: z103.number().int().nonnegative(),
25322
- expectedCommandId: z103.string().uuid().nullable(),
25328
+ expectedCommandId: z103.string().guid().nullable(),
25323
25329
  next: z103.object({
25324
- stepId: z103.string().uuid(),
25330
+ stepId: z103.string().guid(),
25325
25331
  expectedRevision: z103.number().int().nonnegative()
25326
25332
  }).strict().nullable(),
25327
25333
  outputArtifacts: json
25328
25334
  }).strict().optional(),
25329
25335
  collection: z103.object({
25330
- collectionId: z103.string().uuid(),
25336
+ collectionId: z103.string().guid(),
25331
25337
  expectedRevision: z103.number().int().nonnegative(),
25332
25338
  expiresAt: z103.string().datetime()
25333
25339
  }).strict().optional()
@@ -25412,9 +25418,9 @@ var WhatsAppPresentationStepSchema = z104.discriminatedUnion("kind", [
25412
25418
  "research_ready",
25413
25419
  "research_failed"
25414
25420
  ]).optional(),
25415
- commandId: z104.string().uuid().optional(),
25416
- taskId: z104.string().uuid().optional(),
25417
- researchRunId: z104.string().uuid().optional()
25421
+ commandId: z104.string().guid().optional(),
25422
+ taskId: z104.string().guid().optional(),
25423
+ researchRunId: z104.string().guid().optional()
25418
25424
  }).strict().refine((value) => value.resetSourceSequence === void 0 || value.conversationReset === "completed", "Reset source sequence requires a completed reset").optional(),
25419
25425
  intentKey
25420
25426
  }).strict(),
@@ -25446,16 +25452,16 @@ var WhatsAppPresentationStepSchema = z104.discriminatedUnion("kind", [
25446
25452
  "tiktok"
25447
25453
  ])).max(3),
25448
25454
  fullResultUrl: z104.string().url().max(8192),
25449
- commandId: z104.string().uuid(),
25450
- taskId: z104.string().uuid(),
25455
+ commandId: z104.string().guid(),
25456
+ taskId: z104.string().guid(),
25451
25457
  intentKey
25452
25458
  }).strict(),
25453
25459
  z104.object({
25454
25460
  kind: z104.literal("reference_review"),
25455
- commandId: z104.string().uuid(),
25456
- taskId: z104.string().uuid(),
25461
+ commandId: z104.string().guid(),
25462
+ taskId: z104.string().guid(),
25457
25463
  snapshotHash: z104.string().length(64).regex(/^[a-f0-9]+$/),
25458
- pendingAction: z104.record(z104.unknown()),
25464
+ pendingAction: z104.record(z104.string(), z104.unknown()),
25459
25465
  previews: z104.array(preview).max(20),
25460
25466
  expectedPreviewCount: z104.number().int().min(0).max(50),
25461
25467
  intentKey
@@ -25881,7 +25887,7 @@ var ProductTruthBody = z107.object({
25881
25887
  out[key2] = rawIndexes.filter((i) => typeof i === "number" && Number.isInteger(i) && i >= 0 && i < 20);
25882
25888
  }
25883
25889
  return out;
25884
- }, z107.record(z107.array(z107.number().int().min(0).max(19))))
25890
+ }, z107.record(z107.string(), z107.array(z107.number().int().min(0).max(19))))
25885
25891
  })),
25886
25892
  confidence: z107.preprocess((v) => typeof v === "number" && Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 0, z107.number().min(0).max(1))
25887
25893
  });
@@ -26224,15 +26230,16 @@ var CreativeCompositionExecutorRoleSchema = z109.enum(CREATIVE_COMPOSITION_EXECU
26224
26230
  var CreativeCompositionJobSchema = z109.object({
26225
26231
  kind: z109.literal("creative_composition"),
26226
26232
  protocolVersion: CreativeCompositionProtocolVersionSchema,
26227
- jobId: z109.string().uuid(),
26233
+ jobId: z109.string().guid(),
26228
26234
  owner: CreativeEngineOwnerSchema,
26229
26235
  attempt,
26230
26236
  leaseUntil: z109.string().datetime(),
26231
26237
  deadlineAtMs: z109.number().int().nonnegative(),
26232
26238
  /**
26233
26239
  * Contract digest of the API that wrote the job. The renderer refuses a
26234
- * job whose digest is not its own (`renderer_schema_stale`). Absent only
26235
- * on rows written before digests existed.
26240
+ * job whose digest is neither current nor explicitly verified compatible
26241
+ * (`renderer_schema_stale`). Accepted jobs still meet the current schema.
26242
+ * Absent only on rows written before digests existed.
26236
26243
  */
26237
26244
  contractDigest: hash2.optional(),
26238
26245
  width: z109.number().int().positive().max(4096),
@@ -26310,10 +26317,10 @@ var CreativeCompositionClaimResponseSchema = z109.object({
26310
26317
  job: CreativeCompositionJobSchema.nullable()
26311
26318
  }).strict();
26312
26319
  var CreativeCompositionHeartbeatSchema = MotionGraphicsStageReportSchema.extend({
26313
- jobId: z109.string().uuid()
26320
+ jobId: z109.string().guid()
26314
26321
  });
26315
26322
  var CreativeCompositionUploadRequestSchema = z109.object({
26316
- jobId: z109.string().uuid(),
26323
+ jobId: z109.string().guid(),
26317
26324
  attempt,
26318
26325
  files: z109.array(z109.object({
26319
26326
  kind: z109.enum([
@@ -26337,7 +26344,7 @@ var CreativeCompositionUploadResponseSchema = z109.object({
26337
26344
  }).strict()).min(1).max(3)
26338
26345
  }).strict();
26339
26346
  var CreativeCompositionDoneRequestSchema = z109.object({
26340
- jobId: z109.string().uuid(),
26347
+ jobId: z109.string().guid(),
26341
26348
  attempt,
26342
26349
  width: z109.number().int().positive(),
26343
26350
  height: z109.number().int().positive(),
@@ -26345,14 +26352,14 @@ var CreativeCompositionDoneRequestSchema = z109.object({
26345
26352
  durationSec: z109.number().positive()
26346
26353
  }).strict();
26347
26354
  var CreativeCompositionFailedRequestSchema = z109.object({
26348
- jobId: z109.string().uuid(),
26355
+ jobId: z109.string().guid(),
26349
26356
  attempt,
26350
26357
  reason: z109.string().min(1).max(1e3),
26351
26358
  retryable: z109.literal(false)
26352
26359
  }).strict();
26353
26360
  var CreativeCompositionLocalManifestSchema = z109.object({
26354
26361
  kind: z109.literal("creative_composition"),
26355
- jobId: z109.string().uuid(),
26362
+ jobId: z109.string().guid(),
26356
26363
  owner: CreativeEngineOwnerSchema,
26357
26364
  plan: z109.object({
26358
26365
  revision: z109.number().int().positive(),
@@ -26438,8 +26445,8 @@ var CreativeEngineEditContextSnapshotSchema = z111.object({
26438
26445
  hash: hash3,
26439
26446
  binding: CreativeEngineContextBindingSchema,
26440
26447
  data: z111.object({
26441
- physical: z111.record(z111.unknown()),
26442
- commercial: z111.record(z111.unknown())
26448
+ physical: z111.record(z111.string(), z111.unknown()),
26449
+ commercial: z111.record(z111.string(), z111.unknown())
26443
26450
  }).strict(),
26444
26451
  references: z111.array(z111.object({
26445
26452
  sourceId: id4,
@@ -26509,7 +26516,7 @@ var CreativeEngineEditExecutionSchema = z111.object({
26509
26516
  version: z111.literal(1),
26510
26517
  source: CreativeEngineEditSourceSchema,
26511
26518
  intent: z111.object({
26512
- clientRequestId: z111.string().uuid(),
26519
+ clientRequestId: z111.string().guid(),
26513
26520
  sectionsHash: hash3,
26514
26521
  sourceBindingHash: hash3,
26515
26522
  derivedPlanHash: hash3,
@@ -26621,7 +26628,7 @@ var CreativeEngineEditProposalSchema = z111.object({
26621
26628
  userId: id4,
26622
26629
  taskId: id4,
26623
26630
  angleKey: id4,
26624
- clientRequestId: z111.string().uuid(),
26631
+ clientRequestId: z111.string().guid(),
26625
26632
  createdAtMs: z111.number().int().nonnegative(),
26626
26633
  expiresAtMs: z111.number().int().positive(),
26627
26634
  source: CreativeEngineEditSourceSchema,
@@ -26630,7 +26637,7 @@ var CreativeEngineEditProposalSchema = z111.object({
26630
26637
  context: CreativeEngineEditContextSnapshotSchema,
26631
26638
  recipe: CreativeEngineRecipeSchema,
26632
26639
  // The API validates these with its canonical section schema before persistence/use.
26633
- sections: z111.array(z111.record(z111.unknown())).min(1).max(32)
26640
+ sections: z111.array(z111.record(z111.string(), z111.unknown())).min(1).max(32)
26634
26641
  }).strict();
26635
26642
 
26636
26643
  // ../../packages/types/src/creative-engine-retry.ts
@@ -26692,7 +26699,7 @@ var CreativeEngineFreshRetryProvenanceSchema = z112.object({
26692
26699
  import { z as z113 } from "zod";
26693
26700
  var CreativeEngineEntryRequestSchema = z113.object({
26694
26701
  creativeEngine: z113.literal("unified_v1"),
26695
- taskId: z113.string().uuid(),
26702
+ taskId: z113.string().guid(),
26696
26703
  angleKey: z113.string().min(1).max(200),
26697
26704
  requestId: z113.string().min(1).max(200),
26698
26705
  guide: z113.enum([
@@ -26904,7 +26911,7 @@ import { z as z116 } from "zod";
26904
26911
  // ../../packages/types/src/service-landing-primitives.ts
26905
26912
  import { z as z115 } from "zod";
26906
26913
  var OptionalTextSchema = z115.string().trim().min(1).max(500).optional();
26907
- var AssetIdSchema = z115.string().uuid().transform((value) => value.toLowerCase());
26914
+ var AssetIdSchema = z115.string().guid().transform((value) => value.toLowerCase());
26908
26915
  var ServiceLandingPrimaryCtaSchema = z115.object({
26909
26916
  channelIndex: z115.number().int().nonnegative(),
26910
26917
  label: z115.string().trim().min(1).max(80)
@@ -27040,7 +27047,7 @@ var ServiceLandingContactChannelSchema = z116.discriminatedUnion("kind", [
27040
27047
  BookingUrlChannelSchema
27041
27048
  ]);
27042
27049
  var ServiceLandingServiceSchema = z116.object({
27043
- id: z116.string().uuid(),
27050
+ id: z116.string().guid(),
27044
27051
  name: z116.string().trim().min(1).max(120),
27045
27052
  description: OptionalTextSchema,
27046
27053
  inclusions: z116.array(z116.string().trim().min(1).max(160)).max(12),
@@ -27268,7 +27275,7 @@ var ServiceLandingArtifactSchema = z116.preprocess(applyCodeArtifactDefaults, z1
27268
27275
  // ../../packages/types/src/service-landing-facts-brand.ts
27269
27276
  import { z as z117 } from "zod";
27270
27277
  var ServiceLandingServiceFactsSchema = z117.object({
27271
- id: z117.string().uuid(),
27278
+ id: z117.string().guid(),
27272
27279
  name: z117.string().trim().min(1).max(120).optional(),
27273
27280
  description: OptionalTextSchema,
27274
27281
  inclusions: z117.array(z117.string().trim().min(1).max(160)).max(12).default([]),
@@ -27420,7 +27427,7 @@ var ServicePageParserMetadataSchema = z117.object({
27420
27427
  }).strict()).max(100).optional()
27421
27428
  }).strict();
27422
27429
  var ServicePageSourceSchema = z117.object({
27423
- id: z117.string().uuid(),
27430
+ id: z117.string().guid(),
27424
27431
  kind: ServicePageSourceKindSchema,
27425
27432
  status: ServicePageSourceStatusSchema,
27426
27433
  displayName: z117.string().trim().min(1).max(180).optional(),
@@ -27431,14 +27438,14 @@ var ServicePageSourceSchema = z117.object({
27431
27438
  var ServicePageFactConflictSchema = z117.object({
27432
27439
  fieldPath: z117.string().trim().min(1).max(180),
27433
27440
  candidates: z117.array(z117.object({
27434
- id: z117.string().uuid(),
27441
+ id: z117.string().guid(),
27435
27442
  value: z117.string().trim().min(1).max(500),
27436
- sourceIds: z117.array(z117.string().uuid()).min(1).max(10)
27443
+ sourceIds: z117.array(z117.string().guid()).min(1).max(10)
27437
27444
  }).strict()).min(2).max(8)
27438
27445
  }).strict();
27439
27446
  var ServicePageFactProvenanceSchema = z117.object({
27440
27447
  fieldPath: z117.string().trim().min(1).max(180),
27441
- sourceIds: z117.array(z117.string().uuid()).min(1).max(10),
27448
+ sourceIds: z117.array(z117.string().guid()).min(1).max(10),
27442
27449
  evidence: z117.string().trim().max(1e3).optional()
27443
27450
  }).strict();
27444
27451
  var ServicePageFactsReviewSchema = z117.object({
@@ -27454,26 +27461,26 @@ var ServicePageFactsReviewSchema = z117.object({
27454
27461
  // ../../packages/types/src/service-landing-api.ts
27455
27462
  import { z as z118 } from "zod";
27456
27463
  var ServicePageCreateRequestSchema = z118.object({
27457
- brandId: z118.string().uuid(),
27464
+ brandId: z118.string().guid(),
27458
27465
  includeBrandLogo: z118.boolean().optional(),
27459
- idempotencyKey: z118.string().uuid().optional()
27466
+ idempotencyKey: z118.string().guid().optional()
27460
27467
  }).strict();
27461
27468
  var ServicePageFactsUpdateRequestSchema = z118.object({
27462
27469
  expectedRevision: z118.number().int().nonnegative(),
27463
- idempotencyKey: z118.string().uuid(),
27470
+ idempotencyKey: z118.string().guid(),
27464
27471
  facts: ServicePageFactsSchema
27465
27472
  }).strict();
27466
27473
  var ServicePageFactsConfirmRequestSchema = z118.object({
27467
27474
  expectedRevision: z118.number().int().nonnegative(),
27468
- idempotencyKey: z118.string().uuid(),
27475
+ idempotencyKey: z118.string().guid(),
27469
27476
  resolutions: z118.array(z118.object({
27470
27477
  fieldPath: z118.string().trim().min(1).max(180),
27471
- candidateId: z118.string().uuid()
27478
+ candidateId: z118.string().guid()
27472
27479
  }).strict()).max(30)
27473
27480
  }).strict();
27474
27481
  var ServicePageIntakeRequestSchema = z118.object({
27475
27482
  expectedRevision: z118.number().int().nonnegative(),
27476
- idempotencyKey: z118.string().uuid(),
27483
+ idempotencyKey: z118.string().guid(),
27477
27484
  text: z118.string().trim().max(3e4).optional(),
27478
27485
  profileUrl: z118.string().trim().url().max(2048).refine((value) => {
27479
27486
  try {
@@ -27504,7 +27511,7 @@ var ServicePageAttachmentRefSchema = z118.object({
27504
27511
  "source",
27505
27512
  "asset"
27506
27513
  ]),
27507
- id: z118.string().uuid().transform((id6) => id6.toLowerCase())
27514
+ id: z118.string().guid().transform((id6) => id6.toLowerCase())
27508
27515
  }).strict();
27509
27516
  var ServicePageAttachmentRefsSchema = z118.array(ServicePageAttachmentRefSchema).max(SERVICE_PAGE_CHAT_ATTACHMENT_MAX_SELECTION).superRefine((refs, ctx) => {
27510
27517
  const seen = /* @__PURE__ */ new Set();
@@ -27537,13 +27544,13 @@ var ServicePageChatAttachmentUploadResponseSchema = z118.object({
27537
27544
  }).strict();
27538
27545
  var ServicePageChatAttachmentUploadRequestSchema = z118.object({
27539
27546
  expectedRevision: z118.number().int().nonnegative(),
27540
- idempotencyKey: z118.string().uuid(),
27547
+ idempotencyKey: z118.string().guid(),
27541
27548
  profileUrl: z118.string().url().max(2048).optional()
27542
27549
  }).strict();
27543
27550
  var ServicePageEditInstructionSchema = z118.string().trim().min(3).max(SERVICE_PAGE_EDIT_INSTRUCTION_MAX_CHARS);
27544
27551
  var ServicePageEditEstimateRequestSchema = z118.object({
27545
27552
  expectedRevision: z118.number().int().nonnegative(),
27546
- baseCandidateOperationId: z118.string().uuid().transform((id6) => id6.toLowerCase()).optional(),
27553
+ baseCandidateOperationId: z118.string().guid().transform((id6) => id6.toLowerCase()).optional(),
27547
27554
  instruction: ServicePageEditInstructionSchema.optional(),
27548
27555
  attachmentRefs: ServicePageAttachmentRefsSchema.optional()
27549
27556
  }).strict();
@@ -27555,12 +27562,12 @@ var ServicePageEditEstimateResponseSchema = z118.object({
27555
27562
  }).strict();
27556
27563
  var ServicePageGenerationQuoteRequestSchema = z118.object({
27557
27564
  expectedRevision: z118.number().int().nonnegative(),
27558
- baseCandidateOperationId: z118.string().uuid().transform((id6) => id6.toLowerCase()).optional(),
27565
+ baseCandidateOperationId: z118.string().guid().transform((id6) => id6.toLowerCase()).optional(),
27559
27566
  instruction: ServicePageEditInstructionSchema.optional(),
27560
27567
  attachmentRefs: ServicePageAttachmentRefsSchema.optional()
27561
27568
  }).strict();
27562
27569
  var ServicePageQuoteResponseSchema = z118.object({
27563
- quoteId: z118.string().uuid(),
27570
+ quoteId: z118.string().guid(),
27564
27571
  purpose: ServicePageQuotePurposeSchema,
27565
27572
  expectedRevision: z118.number().int().nonnegative(),
27566
27573
  requestHash: z118.string().regex(/^[a-f0-9]{64}$/),
@@ -27574,16 +27581,16 @@ var ServicePageQuoteResponseSchema = z118.object({
27574
27581
  requiresConfirmation: z118.literal(true)
27575
27582
  }).strict();
27576
27583
  var ServicePageGenerateRequestSchema = z118.object({
27577
- quoteId: z118.string().uuid(),
27578
- idempotencyKey: z118.string().uuid(),
27584
+ quoteId: z118.string().guid(),
27585
+ idempotencyKey: z118.string().guid(),
27579
27586
  expectedRevision: z118.number().int().nonnegative(),
27580
- baseCandidateOperationId: z118.string().uuid().transform((id6) => id6.toLowerCase()).optional(),
27587
+ baseCandidateOperationId: z118.string().guid().transform((id6) => id6.toLowerCase()).optional(),
27581
27588
  instruction: ServicePageEditInstructionSchema.optional(),
27582
27589
  attachmentRefs: ServicePageAttachmentRefsSchema.optional()
27583
27590
  }).strict();
27584
27591
  var SERVICE_PAGE_CREATION_MAX_ATTEMPTS = 3;
27585
27592
  var ServicePageCreationMarkerSchema = z118.object({
27586
- rootOperationId: z118.string().uuid().optional(),
27593
+ rootOperationId: z118.string().guid().optional(),
27587
27594
  attempt: z118.number().int().min(1).max(SERVICE_PAGE_CREATION_MAX_ATTEMPTS)
27588
27595
  }).strict();
27589
27596
  var ServicePageCreationEstimateRequestSchema = z118.object({
@@ -27618,8 +27625,8 @@ var ServicePageOperationStatusSchema = z118.enum([
27618
27625
  "requires_reconciliation"
27619
27626
  ]);
27620
27627
  var ServicePageOperationResponseSchema = z118.object({
27621
- opId: z118.string().uuid(),
27622
- servicePageId: z118.string().uuid(),
27628
+ opId: z118.string().guid(),
27629
+ servicePageId: z118.string().guid(),
27623
27630
  kind: z118.enum([
27624
27631
  "fact_extraction",
27625
27632
  "generation"
@@ -27634,7 +27641,7 @@ var ServicePageOperationResponseSchema = z118.object({
27634
27641
  recoverable: z118.boolean()
27635
27642
  }).strict();
27636
27643
  var ServicePageEditHistoryItemSchema = z118.object({
27637
- opId: z118.string().uuid(),
27644
+ opId: z118.string().guid(),
27638
27645
  instruction: ServicePageEditInstructionSchema,
27639
27646
  status: ServicePageOperationStatusSchema,
27640
27647
  expectedRevision: z118.number().int().nonnegative(),
@@ -27649,8 +27656,8 @@ var ServicePageEditHistoryItemSchema = z118.object({
27649
27656
  }).strict();
27650
27657
  var ServicePageEditHistorySchema = z118.array(ServicePageEditHistoryItemSchema).max(50).default([]);
27651
27658
  var ServicePageOperationJobSchema = z118.object({
27652
- operationId: z118.string().uuid(),
27653
- servicePageId: z118.string().uuid(),
27659
+ operationId: z118.string().guid(),
27660
+ servicePageId: z118.string().guid(),
27654
27661
  userId: z118.string().min(1).max(256),
27655
27662
  kind: z118.enum([
27656
27663
  "fact_extraction",
@@ -27659,22 +27666,22 @@ var ServicePageOperationJobSchema = z118.object({
27659
27666
  }).strict();
27660
27667
  var ServicePageDraftUpdateRequestSchema = z118.object({
27661
27668
  expectedRevision: z118.number().int().nonnegative(),
27662
- idempotencyKey: z118.string().uuid(),
27663
- candidateOperationId: z118.string().uuid().transform((id6) => id6.toLowerCase()).optional(),
27669
+ idempotencyKey: z118.string().guid(),
27670
+ candidateOperationId: z118.string().guid().transform((id6) => id6.toLowerCase()).optional(),
27664
27671
  artifact: ServiceLandingArtifactSchema
27665
27672
  }).strict();
27666
27673
  var ServicePagePublishRequestSchema = z118.object({
27667
27674
  expectedRevision: z118.number().int().nonnegative(),
27668
27675
  slug: z118.string().trim().toLowerCase().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64),
27669
- idempotencyKey: z118.string().uuid()
27676
+ idempotencyKey: z118.string().guid()
27670
27677
  }).strict();
27671
27678
  var ServicePageUnpublishRequestSchema = z118.object({
27672
27679
  publishedRevision: z118.number().int().positive(),
27673
- idempotencyKey: z118.string().uuid()
27680
+ idempotencyKey: z118.string().guid()
27674
27681
  }).strict();
27675
27682
  var ServicePageSummarySchema = z118.object({
27676
- id: z118.string().uuid(),
27677
- brandId: z118.string().uuid().nullable(),
27683
+ id: z118.string().guid(),
27684
+ brandId: z118.string().guid().nullable(),
27678
27685
  businessName: z118.string().trim().min(1).max(120).nullable(),
27679
27686
  status: ServicePageStatusSchema,
27680
27687
  draftRevision: z118.number().int().nonnegative(),
@@ -27718,7 +27725,7 @@ var ServicePageListResponseSchema = z118.object({
27718
27725
  pages: z118.array(ServicePageSummarySchema)
27719
27726
  }).strict();
27720
27727
  var ServicePageIntakeResponseSchema = z118.object({
27721
- servicePageId: z118.string().uuid(),
27728
+ servicePageId: z118.string().guid(),
27722
27729
  draftRevision: z118.number().int().nonnegative(),
27723
27730
  sources: z118.array(ServicePageSourceSchema).max(50),
27724
27731
  facts: ServicePageFactsSchema,
@@ -27727,13 +27734,13 @@ var ServicePageIntakeResponseSchema = z118.object({
27727
27734
  assetsById: z118.record(AssetIdSchema, ServicePagePublicAssetSchema)
27728
27735
  }).strict();
27729
27736
  var ServicePagePreviewResponseSchema = z118.object({
27730
- servicePageId: z118.string().uuid(),
27737
+ servicePageId: z118.string().guid(),
27731
27738
  revision: z118.number().int().nonnegative(),
27732
27739
  artifact: ServiceLandingArtifactSchema,
27733
27740
  assetsById: z118.record(AssetIdSchema, ServicePagePublicAssetSchema)
27734
27741
  }).strict();
27735
27742
  var ServicePageAdminViewSchema = z118.object({
27736
- id: z118.string().uuid(),
27743
+ id: z118.string().guid(),
27737
27744
  businessName: z118.string().trim().min(1).max(120).nullable(),
27738
27745
  state: z118.enum([
27739
27746
  "created",
@@ -27746,7 +27753,7 @@ var ServicePageAdminViewSchema = z118.object({
27746
27753
  }).strict();
27747
27754
  var ServicePagePreviewRequestSchema = z118.object({
27748
27755
  expectedRevision: z118.number().int().nonnegative(),
27749
- candidateOperationId: z118.string().uuid().optional(),
27756
+ candidateOperationId: z118.string().guid().optional(),
27750
27757
  artifact: ServiceLandingArtifactSchema.optional()
27751
27758
  }).strict().superRefine((request, context) => {
27752
27759
  if (!request.artifact && !request.candidateOperationId) {
@@ -27904,7 +27911,7 @@ var FlightRecorderEntrySchema = z120.object({
27904
27911
  elements: z120.array(FlightRecorderElementSchema).optional(),
27905
27912
  distillation: FlightRecorderDistillationSchema.optional(),
27906
27913
  // Raw payload (sanitized of secrets)
27907
- rawPayload: z120.record(z120.unknown())
27914
+ rawPayload: z120.record(z120.string(), z120.unknown())
27908
27915
  });
27909
27916
  var FlightRecorderQuerySchema = z120.object({
27910
27917
  taskId: z120.string().min(1),
@@ -27959,7 +27966,7 @@ var Url = z122.string().url().refine((value) => {
27959
27966
  var ClassicLandingAssetBlockSchema = z122.discriminatedUnion("kind", [
27960
27967
  z122.object({
27961
27968
  kind: z122.literal("image"),
27962
- ownerTaskId: z122.string().uuid(),
27969
+ ownerTaskId: z122.string().guid(),
27963
27970
  sourceIndex: z122.number().int().positive(),
27964
27971
  variantIndex: z122.number().int().nonnegative(),
27965
27972
  url: Url,
@@ -27969,8 +27976,8 @@ var ClassicLandingAssetBlockSchema = z122.discriminatedUnion("kind", [
27969
27976
  }).strict(),
27970
27977
  z122.object({
27971
27978
  kind: z122.literal("gif"),
27972
- ownerTaskId: z122.string().uuid(),
27973
- gifId: z122.string().uuid(),
27979
+ ownerTaskId: z122.string().guid(),
27980
+ gifId: z122.string().guid(),
27974
27981
  gifRevision: z122.number().int().nonnegative(),
27975
27982
  demo: LandingGifReadableSchema,
27976
27983
  historicalDelivery: z122.literal(true).optional()
@@ -27978,10 +27985,10 @@ var ClassicLandingAssetBlockSchema = z122.discriminatedUnion("kind", [
27978
27985
  ]);
27979
27986
  var PublishedClassicLandingSchema = z122.object({
27980
27987
  version: z122.literal(1),
27981
- ownerTaskId: z122.string().uuid(),
27988
+ ownerTaskId: z122.string().guid(),
27982
27989
  documentRevision: z122.number().int().nonnegative(),
27983
27990
  ownerRevisions: z122.array(z122.object({
27984
- ownerTaskId: z122.string().uuid(),
27991
+ ownerTaskId: z122.string().guid(),
27985
27992
  landingRevision: z122.number().int().nonnegative()
27986
27993
  }).strict()).max(100),
27987
27994
  blocks: z122.array(ClassicLandingAssetBlockSchema).max(100)
@@ -28028,18 +28035,18 @@ import { z as z123 } from "zod";
28028
28035
  var DropiCountrySchema = z123.enum(DROPI_COUNTRY_CODES);
28029
28036
  var DropiCountryQuerySchema = z123.object({
28030
28037
  countryCode: DropiCountrySchema.default("CO"),
28031
- connectionId: z123.string().uuid().optional()
28038
+ connectionId: z123.string().guid().optional()
28032
28039
  }).strict();
28033
28040
  var ConnectDropiFinancialSchema = z123.object({
28034
28041
  countryCode: DropiCountrySchema.default("CO"),
28035
- connectionId: z123.string().uuid().optional(),
28042
+ connectionId: z123.string().guid().optional(),
28036
28043
  label: z123.string().trim().min(1).max(80).optional(),
28037
28044
  integrationKey: z123.string().trim().min(1).max(4096).regex(/^[\x21-\x7e]+$/)
28038
28045
  }).strict();
28039
28046
  var SyncDropiFinancialSchema = z123.object({
28040
28047
  countryCode: DropiCountrySchema.optional(),
28041
- operationId: z123.string().uuid().optional(),
28042
- connectionId: z123.string().uuid().optional(),
28048
+ operationId: z123.string().guid().optional(),
28049
+ connectionId: z123.string().guid().optional(),
28043
28050
  since: z123.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
28044
28051
  until: z123.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
28045
28052
  }).strict();
@@ -28047,7 +28054,7 @@ var connectionCountries = z123.array(DropiCountrySchema).max(DROPI_COUNTRY_CODES
28047
28054
  var DropiFinancialConnectionsSchema = z123.object({
28048
28055
  connectedCountries: connectionCountries,
28049
28056
  connections: z123.array(z123.object({
28050
- connectionId: z123.string().uuid(),
28057
+ connectionId: z123.string().guid(),
28051
28058
  countryCode: DropiCountrySchema,
28052
28059
  label: z123.string().min(1).max(80)
28053
28060
  }).strict()).max(21).optional(),
@@ -28057,7 +28064,7 @@ var DropiFinancialConnectionsSchema = z123.object({
28057
28064
  var DropiFinancialStatusSchema = z123.object({
28058
28065
  enabled: z123.boolean(),
28059
28066
  connected: z123.boolean(),
28060
- connectionId: z123.string().uuid().optional(),
28067
+ connectionId: z123.string().guid().optional(),
28061
28068
  connectionCount: z123.number().int().nonnegative().optional(),
28062
28069
  label: z123.string().min(1).max(80).optional(),
28063
28070
  countryCode: DropiCountrySchema,
@@ -28184,7 +28191,7 @@ var ServiceImageContextSchema = z124.object({
28184
28191
  // ../../packages/types/src/brand-creation.ts
28185
28192
  import { z as z125 } from "zod";
28186
28193
  var BrandCreationReceiptSchema = z125.object({
28187
- brandId: z125.string().uuid(),
28194
+ brandId: z125.string().guid(),
28188
28195
  status: z125.enum([
28189
28196
  "extracting",
28190
28197
  "ready",
@@ -28327,7 +28334,7 @@ var WebsiteCaptureRequestSchema = z127.object({
28327
28334
  language: MotionGraphicsLanguageSchema
28328
28335
  }).strict();
28329
28336
  var WebsiteCaptureResponseSchema = z127.object({
28330
- captureId: z127.string().uuid(),
28337
+ captureId: z127.string().guid(),
28331
28338
  status: WebsiteCaptureStatusSchema,
28332
28339
  expiresAt: z127.string().datetime(),
28333
28340
  previewUrl: z127.string().url().optional(),
@@ -28336,7 +28343,7 @@ var WebsiteCaptureResponseSchema = z127.object({
28336
28343
  cause: WebsiteCaptureCauseSchema.optional()
28337
28344
  });
28338
28345
  var WebsiteCaptureJobSchema = WebsiteCaptureRequestSchema.extend({
28339
- captureId: z127.string().uuid(),
28346
+ captureId: z127.string().guid(),
28340
28347
  attempt: z127.number().int().positive(),
28341
28348
  leaseUntil: z127.string().datetime(),
28342
28349
  /** Public profile document prepared by the API; never contains a provider credential. */
@@ -28499,7 +28506,7 @@ var image = z128.object({
28499
28506
  width: z128.number().int().positive(),
28500
28507
  height: z128.number().int().positive(),
28501
28508
  adCopy: nullableText,
28502
- rawResponse: z128.unknown()
28509
+ rawResponse: z128.unknown().optional()
28503
28510
  });
28504
28511
  var ProductDemoSnapshotSchema = z128.object({
28505
28512
  /** Optional only for packs frozen before seller review drafts were captured. */
@@ -28512,12 +28519,12 @@ var ProductDemoSnapshotSchema = z128.object({
28512
28519
  country: nullableText,
28513
28520
  features: z128.array(text3).max(100),
28514
28521
  form: nullableText,
28515
- details: z128.unknown(),
28522
+ details: z128.unknown().optional(),
28516
28523
  isCombo: z128.boolean(),
28517
- comboItems: z128.unknown(),
28524
+ comboItems: z128.unknown().optional(),
28518
28525
  images: z128.array(text3).min(1).max(50),
28519
28526
  cleanImages: z128.array(text3).max(50),
28520
- cleanImagesMeta: z128.unknown()
28527
+ cleanImagesMeta: z128.unknown().optional()
28521
28528
  }),
28522
28529
  angles: z128.array(z128.object({
28523
28530
  content: text3,
@@ -28536,7 +28543,7 @@ var ProductDemoSnapshotSchema = z128.object({
28536
28543
  durationSeconds: z128.number().int().positive().nullable(),
28537
28544
  format: VideoFormat,
28538
28545
  resultUrls: z128.array(text3).min(1).max(10),
28539
- rawResponse: z128.unknown(),
28546
+ rawResponse: z128.unknown().optional(),
28540
28547
  adCopy: nullableText
28541
28548
  })).min(1).max(10),
28542
28549
  landingImages: z128.array(z128.object({
@@ -28547,17 +28554,17 @@ var ProductDemoSnapshotSchema = z128.object({
28547
28554
  height: z128.number().int().positive(),
28548
28555
  notes: nullableText
28549
28556
  })).max(20),
28550
- landingConfig: z128.unknown(),
28557
+ landingConfig: z128.unknown().optional(),
28551
28558
  image,
28552
- productUseSheet: z128.unknown(),
28553
- productTruth: z128.unknown(),
28559
+ productUseSheet: z128.unknown().optional(),
28560
+ productTruth: z128.unknown().optional(),
28554
28561
  productReference: z128.object({
28555
28562
  referenceEvidenceVersion: z128.number().int().nonnegative(),
28556
28563
  planVersion: z128.number().int().positive(),
28557
28564
  baseReferenceSetHash: text3,
28558
- referenceSet: z128.unknown(),
28559
- preparationPlan: z128.unknown(),
28560
- canonicalIdentityAnchors: z128.unknown()
28565
+ referenceSet: z128.unknown().optional(),
28566
+ preparationPlan: z128.unknown().optional(),
28567
+ canonicalIdentityAnchors: z128.unknown().optional()
28561
28568
  })
28562
28569
  });
28563
28570
  var ProductDemoPhaseSchema = z128.enum([
@@ -28586,10 +28593,10 @@ var ProductDemoTaskStateSchema = z128.object({
28586
28593
  // ../../packages/types/src/demo-mode-service-page-assets.ts
28587
28594
  import { z as z129 } from "zod";
28588
28595
  var DemoServicePageAssetSourceSchema = z129.object({
28589
- pageId: z129.string().uuid(),
28596
+ pageId: z129.string().guid(),
28590
28597
  ownerId: z129.string().min(1),
28591
28598
  assets: z129.array(z129.object({
28592
- id: z129.string().uuid(),
28599
+ id: z129.string().guid(),
28593
28600
  storageKey: z129.string().min(1).max(1024),
28594
28601
  mediaType: z129.enum([
28595
28602
  "image/webp",
@@ -28665,14 +28672,14 @@ var DEMO_MODE_OPTIONAL_TEMPLATE_KEYS = [
28665
28672
  ...DEMO_MODE_OPTIONAL_MOTION_TEMPLATE_KEYS,
28666
28673
  ...DEMO_MODE_PRODUCT_ALL_TEMPLATE_KEYS
28667
28674
  ];
28668
- var optionalTemplateId = z130.preprocess((value) => value === "" ? void 0 : value, z130.string().uuid().optional());
28675
+ var optionalTemplateId = z130.preprocess((value) => value === "" ? void 0 : value, z130.string().guid().optional());
28669
28676
  var DemoModeTemplatesSchema = z130.object({
28670
- brandId: z130.string().uuid(),
28671
- servicePageId: z130.string().uuid(),
28672
- motionTaskId: z130.string().uuid(),
28677
+ brandId: z130.string().guid(),
28678
+ servicePageId: z130.string().guid(),
28679
+ motionTaskId: z130.string().guid(),
28673
28680
  motionVariantTaskId: optionalTemplateId,
28674
28681
  motionThirdTaskId: optionalTemplateId,
28675
- imageTaskId: z130.string().uuid(),
28682
+ imageTaskId: z130.string().guid(),
28676
28683
  productLandingTaskId: optionalTemplateId,
28677
28684
  productVideoTaskId: optionalTemplateId,
28678
28685
  productVideoVariantTaskId: optionalTemplateId,
@@ -28713,7 +28720,7 @@ var DemoModeSnapshotSchema = z130.object({
28713
28720
  product: ProductDemoSnapshotSchema.optional(),
28714
28721
  brand: z130.object({
28715
28722
  /** Columnas de identidad de `Brand` listas para un `update` (sin id/userId/slug/estado/fechas). */
28716
- identity: z130.record(z130.unknown()),
28723
+ identity: z130.record(z130.string(), z130.unknown()),
28717
28724
  productSamples: z130.array(z130.object({
28718
28725
  name: z130.string(),
28719
28726
  priceCents: z130.number().int().nullable(),
@@ -28733,9 +28740,9 @@ var DemoModeSnapshotSchema = z130.object({
28733
28740
  }))
28734
28741
  }),
28735
28742
  servicePage: z130.object({
28736
- facts: z130.unknown(),
28737
- review: z130.unknown(),
28738
- artifact: z130.unknown(),
28743
+ facts: z130.unknown().optional(),
28744
+ review: z130.unknown().optional(),
28745
+ artifact: z130.unknown().optional(),
28739
28746
  /** Optional only for snapshots saved before page-owned demo media. */
28740
28747
  assetSource: DemoServicePageAssetSourceSchema.optional()
28741
28748
  }),
@@ -28761,7 +28768,7 @@ var DemoModeSnapshotSchema = z130.object({
28761
28768
  width: z130.number().int(),
28762
28769
  height: z130.number().int(),
28763
28770
  adCopy: nullableString,
28764
- rawResponse: z130.unknown()
28771
+ rawResponse: z130.unknown().optional()
28765
28772
  })
28766
28773
  });
28767
28774
  var DemoModeConfigSchema = DemoModeEditableObjectSchema.extend({
@@ -28826,7 +28833,7 @@ var DemoModeJobSchema = z130.object({
28826
28833
  productPhase: ProductDemoJobPhaseSchema.optional(),
28827
28834
  step: DemoModeStepSchema,
28828
28835
  /** brandId | servicePageOperationId | taskId según el flujo. */
28829
- targetId: z130.string().uuid(),
28836
+ targetId: z130.string().guid(),
28830
28837
  userId: z130.string().min(1),
28831
28838
  /** Solo marca: la generación de extracción que el guion completa. */
28832
28839
  generation: z130.number().int().positive().optional(),
@@ -29307,7 +29314,7 @@ var ApiClient = class {
29307
29314
  };
29308
29315
 
29309
29316
  // src/index.ts
29310
- var MCP_VERSION = "12.4.0";
29317
+ var MCP_VERSION = "12.5.0";
29311
29318
 
29312
29319
  // src/meta-upload-app.ts
29313
29320
  import { readFileSync } from "fs";
@@ -30469,7 +30476,7 @@ var ImageCreativeAspectRatioEnum = ImageCreativeAspectRatio;
30469
30476
  var ImageRefSchema = z132.object({
30470
30477
  url: z132.string().url().optional().describe('URL p\xFAblica HTTPS de la foto. Ej: una URL de Shopify CDN, Cloudinary, Imgur. \xDAsala cuando el usuario te diga "est\xE1 en X.com/foto.jpg" o cuando la foto ya est\xE9 hospedada.'),
30471
30478
  path: z132.string().min(1).optional().describe('Ruta del archivo en el computador del usuario. Ej: "/Users/maria/Desktop/foto.jpg", "~/Pictures/camiseta.png", "C:\\Users\\Maria\\Desktop\\foto.jpg". El MCP local la lee del disco y la sube. SOLO funciona cuando el MCP corre local (stdio). NO funciona en mcp.productmaker.app (HTTP) \u2014 ah\xED usa `url`.'),
30472
- assetId: z132.string().uuid().optional().describe("ID opaco devuelto por check_media_upload. \xDAsalo para una imagen subida desde el MCP App; ProductMaker adopta el archivo directamente y el MCP nunca descarga sus bytes.")
30479
+ assetId: z132.string().guid().optional().describe("ID opaco devuelto por check_media_upload. \xDAsalo para una imagen subida desde el MCP App; ProductMaker adopta el archivo directamente y el MCP nunca descarga sus bytes.")
30473
30480
  }).refine((v) => [
30474
30481
  v.url,
30475
30482
  v.path,
@@ -31554,8 +31561,8 @@ function serviceVideoResultMedia(result) {
31554
31561
  }
31555
31562
  __name(serviceVideoResultMedia, "serviceVideoResultMedia");
31556
31563
  var CreativeVariantIdentity = z133.object({
31557
- variantTaskId: z133.string().uuid(),
31558
- sourceTaskId: z133.string().uuid(),
31564
+ variantTaskId: z133.string().guid(),
31565
+ sourceTaskId: z133.string().guid(),
31559
31566
  kind: TaskCreativeVariantKind,
31560
31567
  status: TaskStatusSchema,
31561
31568
  error: z133.string().optional()
@@ -32799,9 +32806,9 @@ var CreateAnimatedVideoInput = z135.object({
32799
32806
  "cancel",
32800
32807
  "generate"
32801
32808
  ]).default("prepare").describe("prepare inicia una captura gratuita; status consulta websiteCaptureId; cancel la cancela; generate requiere captura ready y confirmaci\xF3n expl\xEDcita del usuario despu\xE9s de mostrar vista previa y precio."),
32802
- brandId: z135.string().uuid().optional().describe("ID de un servicio propio y listo (de create_brand). Obligatorio al preparar y crear videos nuevos. Conserva el mismo brandId en reintentos; si recuperas una generaci\xF3n hist\xF3rica aceptada sin este campo, om\xEDtelo como en la petici\xF3n original. status/cancel no lo necesitan."),
32803
- websiteCaptureId: z135.string().uuid().optional().describe("ID de la captura preparada. Obligatorio para status/cancel/generate; no inventarlo."),
32804
- generationRequestId: z135.string().uuid().optional().describe("Identidad opcional de una generaci\xF3n confirmada. Repite el mismo UUID al recuperar una respuesta perdida; usa otro \xFAnicamente cuando el usuario pida y confirme otro video, nunca por un error de transporte."),
32809
+ brandId: z135.string().guid().optional().describe("ID de un servicio propio y listo (de create_brand). Obligatorio al preparar y crear videos nuevos. Conserva el mismo brandId en reintentos; si recuperas una generaci\xF3n hist\xF3rica aceptada sin este campo, om\xEDtelo como en la petici\xF3n original. status/cancel no lo necesitan."),
32810
+ websiteCaptureId: z135.string().guid().optional().describe("ID de la captura preparada. Obligatorio para status/cancel/generate; no inventarlo."),
32811
+ generationRequestId: z135.string().guid().optional().describe("Identidad opcional de una generaci\xF3n confirmada. Repite el mismo UUID al recuperar una respuesta perdida; usa otro \xFAnicamente cuando el usuario pida y confirme otro video, nunca por un error de transporte."),
32805
32812
  confirmed: z135.boolean().optional().describe("Solo true despu\xE9s de que el usuario confirme esta captura, formato, duraci\xF3n, idioma y precio. Obligatorio para generate; preparar no genera ni cobra."),
32806
32813
  // Plain text, not `.url()`: users type «cal.com», and the web accepts it.
32807
32814
  // normalizeWebAddress (shared with the web) adds https:// and refuses
@@ -32891,7 +32898,7 @@ var AnimatedVideoResultSchema = z135.object({
32891
32898
  index: MotionGraphicsHookVariantsSchema,
32892
32899
  count: MotionGraphicsHookVariantsSchema,
32893
32900
  tasks: z135.array(z135.object({
32894
- taskId: z135.string().uuid(),
32901
+ taskId: z135.string().guid(),
32895
32902
  index: MotionGraphicsHookVariantsSchema,
32896
32903
  status: z135.enum([
32897
32904
  "queued",
@@ -33202,7 +33209,7 @@ function registerAnimatedVideoTools(server, api) {
33202
33209
  nowMs: 0
33203
33210
  })
33204
33211
  });
33205
- const parsedTaskIds = z135.array(z135.string().uuid()).min(1).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX).safeParse(created.taskIds);
33212
+ const parsedTaskIds = z135.array(z135.string().guid()).min(1).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX).safeParse(created.taskIds);
33206
33213
  const taskIds = parsedTaskIds.success && parsedTaskIds.data[0] === created.taskId ? parsedTaskIds.data : void 0;
33207
33214
  const receipt = {
33208
33215
  taskId: created.taskId,
@@ -33246,7 +33253,7 @@ __name(registerAnimatedVideoTools, "registerAnimatedVideoTools");
33246
33253
  // src/tools/winning-product-image.ts
33247
33254
  import { z as z136 } from "zod";
33248
33255
  var WinnerReferenceInput = z136.object({
33249
- runId: z136.string().uuid(),
33256
+ runId: z136.string().guid(),
33250
33257
  candidateSourceId: z136.string().trim().min(1).max(160)
33251
33258
  }).strict().describe("Referencia opaca de un producto devuelto por find_winning_products/get_product_research_run.");
33252
33259
  async function resolveWinnerImages(api, winnerReference, images) {
@@ -33287,7 +33294,7 @@ var editTaskDraftGuidance = getProductMakerCapabilityModelGuidance("edit_task_dr
33287
33294
  var CreateProductTaskInput = z137.object({
33288
33295
  images: ImagesInput.optional().describe("1\u20135 fotos del mismo producto. Omitir \xFAnicamente cuando projectId apunta a un proyecto propio con imagen guardada."),
33289
33296
  winnerReference: WinnerReferenceInput.optional().describe(WINNER_IMAGE_CHOICE_GUIDANCE),
33290
- projectId: z137.string().uuid().optional().describe("Opcional. Proyecto guiado propio. Permite continuar sin volver a subir la imagen guardada; nunca evita cr\xE9ditos, cuotas ni confirmaciones."),
33297
+ projectId: z137.string().guid().optional().describe("Opcional. Proyecto guiado propio. Permite continuar sin volver a subir la imagen guardada; nunca evita cr\xE9ditos, cuotas ni confirmaciones."),
33291
33298
  productUrl: z137.string().url().optional().describe("Opcional. URL de la p\xE1gina del producto (Shopify, AliExpress, Amazon, etc.) para enriquecer el contexto. Si se omite, la IA infiere todo desde la imagen."),
33292
33299
  language: Lang.describe('C\xF3digo de idioma para el contenido generado. Ejemplos: "es", "en", "pt". REQUERIDO \u2014 si el usuario no lo especific\xF3, PREG\xDANTALE antes de invocar. NUNCA infieras desde el contexto del chat ni asumas "es" por default.'),
33293
33300
  country: Country.describe('C\xF3digo ISO del pa\xEDs objetivo. Ejemplos: "CO", "MX", "US", "AR". Define moneda, m\xE9todos de pago locales y tono. REQUERIDO \u2014 si el usuario no lo especific\xF3, PREG\xDANTALE antes de invocar. NUNCA infieras desde el contexto del chat.'),
@@ -33320,13 +33327,13 @@ var CreateProductTaskInput = z137.object({
33320
33327
  competitorScanEnabled: z137.boolean().optional().describe("Opcional. Default false: omitirlo significa SIN estudio de mercado. Antes de crear, llama estimate_market_study_cost con kind=product_task, muestra al usuario el costo con y sin estudio y preg\xFAntale si lo quiere; env\xEDa true solo si lo acepta (o si solicita la narrativa an\xE1lisis de mercado). Si la tarea incluye video, true analiza anuncios de la competencia y desbloquea la narrativa an\xE1lisis de mercado; si el estudio no encuentra datos suficientes, degrada al planner cl\xE1sico."),
33321
33328
  generateAiEdit: AiEditRequestSchema.optional().describe('Opcional. Pide la Edici\xF3n con IA: una pasada que a\xF1ade texto, efectos y m\xFAsica sobre cada video entregado (variante with_ai_edit; se cobra al entregar, por video). Nivel: "economy" (Econ\xF3mica, Sonnet 5.5, m\xE1s barata) o "pro" (Opus 5.5, mejor calidad, ~10 min). true equivale a "pro"; false/omitido = sin edici\xF3n.'),
33322
33329
  replicateWinnerWhenFound: z137.boolean().optional().describe("Conserva la preferencia de copiar un ganador si existe. false estudia el mercado sin reemplazar un \xE1ngulo por el anuncio ganador. No a\xF1ade una pregunta obligatoria."),
33323
- brandId: z137.string().uuid().optional().describe("Opcional. ID de una marca del usuario; si se env\xEDa, el sistema usa su voz, colores y persona para enriquecer los outputs generados."),
33330
+ brandId: z137.string().guid().optional().describe("Opcional. ID de una marca del usuario; si se env\xEDa, el sistema usa su voz, colores y persona para enriquecer los outputs generados."),
33324
33331
  actorId: z137.string().trim().min(1).max(120).optional().describe("Opcional. ID de un personaje guardado (usa list_actors para verlos). Si lo env\xEDas, su foto y su voz mandan sobre la descripci\xF3n de texto."),
33325
33332
  creativeGender: CreativeGenderEnum.optional().describe('Opcional. QUI\xC9N APARECE EN PANTALLA en todos los creativos de la task: el presentador del video, las personas fotografiadas en la landing y la persona del anuncio. NO es la voz. M\xE1ndalo en cuanto el usuario lo diga en cualquier momento de la conversaci\xF3n y con cualquier redacci\xF3n ("quiero una mujer", "que salga un hombre", "esto es para hombres"): si no lo mandas, el g\xE9nero lo inventa la IA y el usuario recibe lo contrario de lo que pidi\xF3 sin ning\xFAn aviso. "mixed" solo cuando pida expl\xEDcitamente ambos. Si adem\xE1s mandas actorId, el personaje guardado manda sobre este campo.'),
33326
33333
  creativeDirection: z137.string().max(500).optional().describe('Opcional. Direcci\xF3n creativa en texto libre (colores, mood, estilo) que aplica a los outputs de IMAGEN y LANDING (no al video \u2014 el estilo/ambiente del video se dirige con scriptNotes). M\xC1XIMA PRIORIDAD: anula marca, colores y estilo por defecto. Ej. "amarillo y azul, minimalista". M\xE1x 500 caracteres.'),
33327
33334
  headline: z137.string().max(120).optional().describe("Opcional. Titular EXACTO a renderizar. Se imprime tal cual: la IA no lo reescribe, no lo acorta y no lo traduce. Se aplica a las IM\xC1GENES y a la portada de la landing de esta task (el video no lo usa; para el video usa scriptNotes). \xDAsalo cuando el copy es de marca y no es negociable. M\xE1x 120 caracteres. Si lo omites, la IA escribe el titular."),
33328
33335
  subheadline: z137.string().max(160).optional().describe("Opcional. Subt\xEDtulo EXACTO a renderizar, misma regla que headline. Independiente: puedes fijar solo el subt\xEDtulo. M\xE1x 160 caracteres."),
33329
- landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (Landing cl\xE1sica de ProductMaker: estructura original probada y recomendada) o "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social). Default "classic".'),
33336
+ landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (Landing cl\xE1sica de ProductMaker: estructura original probada y recomendada) , "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social) o "pain_solution" (Problema y soluci\xF3n: dolor reconocible, demostraci\xF3n y transformaci\xF3n). Default "classic".'),
33330
33337
  landingImageFormat: LandingImageFormatEnum.default("9:16").describe('Opcional. Formato/relaci\xF3n de aspecto de las im\xE1genes de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "9:16" (vertical, por defecto), "4:5" (vertical compacto para feed) o "1:1" (cuadrado). Default "9:16".')
33331
33338
  }).strict();
33332
33339
  var CreateServiceVideoInput = z137.object({
@@ -33334,7 +33341,7 @@ var CreateServiceVideoInput = z137.object({
33334
33341
  additionalContext: z137.string().max(3e3).optional().describe('Instrucci\xF3n natural prioritaria. Ej.: "adapta el ritmo de estos competidores", "enfatiza reservas de demos" o restricciones de claims.'),
33335
33342
  language: Lang.describe("Idioma del video: es, en o pt."),
33336
33343
  voiceId: z137.string().trim().min(1).pipe(VoiceId).optional().describe('Opcional. Voz para toda la narraci\xF3n. Usa "auto" para que la IA la alinee con el presentador. Las voces del banco compartido fueron retiradas.'),
33337
- brandId: z137.string().uuid().optional().describe("Marca guardada del usuario. Aplica voz, mensajes, paleta y persona predeterminada."),
33344
+ brandId: z137.string().guid().optional().describe("Marca guardada del usuario. Aplica voz, mensajes, paleta y persona predeterminada."),
33338
33345
  reviewMode: z137.enum([
33339
33346
  "automatic",
33340
33347
  "guided"
@@ -33380,7 +33387,7 @@ var PendingActionPayload = z137.discriminatedUnion("kind", [
33380
33387
  kind: z137.literal("product_reference_set_approval"),
33381
33388
  scope: ProductReferenceScopeEnum.optional(),
33382
33389
  scopeKey: z137.string().min(1).max(120).optional(),
33383
- scopeSnapshotId: z137.string().uuid().optional(),
33390
+ scopeSnapshotId: z137.string().guid().optional(),
33384
33391
  expectedScopeHash: z137.string().min(1).max(128).optional(),
33385
33392
  decision: ProductReferenceResolutionDecisionEnum,
33386
33393
  reason: ProductReferenceRejectionReasonEnum.optional(),
@@ -33445,7 +33452,7 @@ var PendingActionPayload = z137.discriminatedUnion("kind", [
33445
33452
  }),
33446
33453
  z137.object({
33447
33454
  kind: z137.literal("service_angle_approval"),
33448
- angleId: z137.string().uuid().optional(),
33455
+ angleId: z137.string().guid().optional(),
33449
33456
  angleNumber: z137.number().int().positive().optional(),
33450
33457
  content: z137.string().min(1).max(480).optional(),
33451
33458
  creativeDirection: z137.string().min(1).max(1500).optional(),
@@ -33548,7 +33555,7 @@ var StatusForResolveSchema = z137.object({
33548
33555
  }).optional(),
33549
33556
  scope: ProductReferenceScopeEnum.optional(),
33550
33557
  scopeKey: z137.string().optional(),
33551
- scopeSnapshotId: z137.string().uuid().optional(),
33558
+ scopeSnapshotId: z137.string().guid().optional(),
33552
33559
  scopeHash: z137.string().optional(),
33553
33560
  baseReferenceSetHash: z137.string().optional(),
33554
33561
  phase: z137.enum([
@@ -33577,7 +33584,7 @@ var StatusForResolveSchema = z137.object({
33577
33584
  // dropped here, so the approval handler below could not echo it back on the
33578
33585
  // PATCH — the selection looked accepted and reached no render.
33579
33586
  angles: z137.array(z137.object({
33580
- id: z137.string().uuid(),
33587
+ id: z137.string().guid(),
33581
33588
  content: z137.string(),
33582
33589
  creativeDirection: z137.string(),
33583
33590
  actor: z137.string(),
@@ -33939,8 +33946,8 @@ ANTES de invocar, resume outputs, cantidad de videos y datos comerciales, explic
33939
33946
  server.registerTool("verify_landing_commerce", {
33940
33947
  description: getProductMakerCapabilityModelGuidance("verify_landing_commerce").summary + " Verifica una correcci\xF3n manual de precios, tachados o packs de una landing editable existente. Solo relee Shopify y los recibos externos; no cambia precios, inventario, SKU ni compra una edici\xF3n. Pasa taskId y editId de la edici\xF3n ya conocida; nunca inventes IDs ni pidas repetir el cambio. Devuelve el estado can\xF3nico por proveedor: conserva el aviso pendiente hasta confirmar los valores reales. Solo despu\xE9s de confirmar todos los valores, el servidor puede volver a habilitar la compra. Web guardada no demuestra publicaci\xF3n p\xFAblica ni checkout; muestra las correcciones y enlaces pendientes sin c\xF3digos t\xE9cnicos. La disponibilidad del editor conserva sus permisos actuales.",
33941
33948
  inputSchema: {
33942
- taskId: z137.string().uuid(),
33943
- editId: z137.string().uuid()
33949
+ taskId: z137.string().guid(),
33950
+ editId: z137.string().guid()
33944
33951
  },
33945
33952
  annotations: OVERWRITES_EXTERNAL
33946
33953
  }, async (input) => {
@@ -34219,7 +34226,7 @@ ANTES de invocar, resume outputs, cantidad de videos y datos comerciales, explic
34219
34226
  ...page.data,
34220
34227
  items: page.data.items.map((item) => {
34221
34228
  const servicePage = z137.object({
34222
- taskId: z137.string().uuid(),
34229
+ taskId: z137.string().guid(),
34223
34230
  resourceType: z137.literal("service_page")
34224
34231
  }).passthrough().safeParse(item);
34225
34232
  if (!servicePage.success) return item;
@@ -34731,7 +34738,7 @@ var CreateBrandInput = z138.object({
34731
34738
  "pt"
34732
34739
  ]).optional().describe("Idioma de la conversaci\xF3n. Solo se usa si la p\xE1gina del negocio no deja claro su idioma."),
34733
34740
  confirmed: z138.boolean().optional().describe("Solo true despu\xE9s de mostrar el precio y que el usuario acepte. Sin confirmed, start solo cotiza y no cobra."),
34734
- brandId: z138.string().uuid().optional().describe("ID de la marca. Obligatorio para status; no lo inventes.")
34741
+ brandId: z138.string().guid().optional().describe("ID de la marca. Obligatorio para status; no lo inventes.")
34735
34742
  }).strict();
34736
34743
  function normalizeBrandSourceUrl(raw) {
34737
34744
  const value = raw.trim();
@@ -35026,12 +35033,12 @@ var CreateServiceLandingInput = z139.object({
35026
35033
  "status",
35027
35034
  "publish"
35028
35035
  ]).default("prepare").describe("prepare (gratis) crea o retoma la landing de la marca y da el precio; build (pagado, confirmed=true) genera la p\xE1gina directamente con la marca y los datos guardados; status sigue el avance; publish la publica y devuelve su enlace."),
35029
- brandId: z139.string().uuid().optional().describe("ID de la marca (de create_brand). Obligatorio para prepare. Nunca un taskId de producto."),
35030
- servicePageId: z139.string().uuid().optional().describe("ID de la landing que devolvi\xF3 prepare. Obligatorio para build, status y publish."),
35036
+ brandId: z139.string().guid().optional().describe("ID de la marca (de create_brand). Obligatorio para prepare. Nunca un taskId de producto."),
35037
+ servicePageId: z139.string().guid().optional().describe("ID de la landing que devolvi\xF3 prepare. Obligatorio para build, status y publish."),
35031
35038
  businessInfo: z139.string().trim().max(SERVICE_LANDING_INFO_MAX_CHARS).optional().describe("Opcional. Lo que el usuario cont\xF3 del negocio y no estaba en su marca: servicios y precios, WhatsApp o tel\xE9fono, ciudad o zona, horarios. Copia sus palabras; no inventes datos."),
35032
35039
  confirmed: z139.boolean().optional().describe("Solo true despu\xE9s de mostrar el precio total y que el usuario acepte. Obligatorio para build."),
35033
35040
  maxCredits: z139.number().int().positive().optional().describe("El total en cr\xE9ditos que el usuario acept\xF3 (el que devolvi\xF3 prepare). Obligatorio para build: ninguna etapa se inicia si su precio supera este total."),
35034
- operationId: z139.string().uuid().optional().describe("Opcional en status: la operaci\xF3n que devolvi\xF3 build."),
35041
+ operationId: z139.string().guid().optional().describe("Opcional en status: la operaci\xF3n que devolvi\xF3 build."),
35035
35042
  slug: z139.string().trim().toLowerCase().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64).optional().describe("Opcional en publish: la direcci\xF3n corta de la p\xE1gina (ej. sanlucas-barberia). Si falta se usa la sugerida desde el nombre del negocio.")
35036
35043
  }).strict();
35037
35044
  function serviceKey(...parts) {
@@ -35425,7 +35432,7 @@ var LANGUAGE_TAGS = {
35425
35432
  pt: "pt-BR"
35426
35433
  };
35427
35434
  var CreateServiceImagesInput = z140.object({
35428
- brandId: z140.string().uuid().optional().describe("ID de un servicio propio y listo (de create_brand), obligatorio para cotizar y crear im\xE1genes nuevas. En un retry hist\xF3rico ya confirmado que originalmente no ten\xEDa este campo, conserva la petici\xF3n original. Nunca un taskId de producto."),
35435
+ brandId: z140.string().guid().optional().describe("ID de un servicio propio y listo (de create_brand), obligatorio para cotizar y crear im\xE1genes nuevas. En un retry hist\xF3rico ya confirmado que originalmente no ten\xEDa este campo, conserva la petici\xF3n original. Nunca un taskId de producto."),
35429
35436
  instruction: z140.string().trim().max(4e3).optional().describe("Opcional. Qu\xE9 servicio o promoci\xF3n mostrar, con las palabras del usuario (ej. \xABcorte + barba a $35.000 los martes\xBB). Si se omite, la IA propone la imagen usando la informaci\xF3n del servicio."),
35430
35437
  delegateToAi: z140.boolean().optional().describe("true si el usuario prefiere que la IA elija qu\xE9 mostrar a partir de su servicio. Tambi\xE9n se delega cuando instruction est\xE1 vac\xEDo."),
35431
35438
  format: z140.enum(SERVICE_IMAGE_FORMATS).optional().describe('Formato: "4:5" (feed, por defecto), "9:16" (historias/reels) o "1:1" (cuadrado).'),
@@ -35584,7 +35591,7 @@ var CreativeRefs = {
35584
35591
  buyerPersona: z141.string().optional().describe('Opcional. Descripci\xF3n del comprador objetivo. Ej. "Mujeres 35-50, profesionales urbanas". Si se omite, la IA infiere desde el \xE1ngulo y producto.'),
35585
35592
  isCombo: z141.boolean().optional().describe("Opcional. Si true, el creativo presenta el producto como combo/pack. Default false."),
35586
35593
  competitorScanEnabled: z141.boolean().optional().describe("Opcional. Default false: omitirlo significa SIN estudio de mercado. Antes de crear, llama estimate_market_study_cost, muestra al usuario el costo con y sin estudio y preg\xFAntale si lo quiere; env\xEDa true solo si lo acepta (o si solicita la narrativa an\xE1lisis de mercado). En video, true analiza anuncios de la competencia y desbloquea la narrativa an\xE1lisis de mercado; si el estudio no encuentra datos suficientes, degrada al planner cl\xE1sico."),
35587
- brandId: z141.string().uuid().optional().describe("Opcional. ID de una marca del usuario; si se env\xEDa, el sistema usa su voz, colores y persona para enriquecer el creativo.")
35594
+ brandId: z141.string().guid().optional().describe("Opcional. ID de una marca del usuario; si se env\xEDa, el sistema usa su voz, colores y persona para enriquecer el creativo.")
35588
35595
  };
35589
35596
  var VideoPresenter = z141.discriminatedUnion("mode", [
35590
35597
  z141.object({
@@ -35689,7 +35696,7 @@ var FreeVideoInput = z141.object({
35689
35696
  generateAiMusic: z141.boolean().default(false).describe('Opcional. Agrega m\xFAsica instrumental IA debajo del audio nativo. Default false. Equivale a generateAiEdit (nivel "pro"): la Edici\xF3n con IA trae su propia m\xFAsica.'),
35690
35697
  generateAiEdit: AiEditRequestSchema.optional().describe('Opcional. Pide la Edici\xF3n con IA: una pasada que a\xF1ade texto, gr\xE1ficos y m\xFAsica sobre el video ya entregado (variante with_ai_edit; se cobra al entregar). Nivel: "economy" (Econ\xF3mica, Sonnet 5.5, m\xE1s barata) o "pro" (Opus 5.5, mejor calidad, ~10 min). true equivale a "pro". Default sin edici\xF3n.'),
35691
35698
  addSubtitles: z141.boolean().default(false).describe("Opcional. Quema subt\xEDtulos usando el rawPrompt exacto. Default false."),
35692
- idempotencyKey: z141.string().uuid().optional().describe("Opcional. Se acepta por compatibilidad pero se ignora: la identidad del reintento se deriva autom\xE1ticamente de los argumentos sem\xE1nticos, as\xED que un retry con los mismos argumentos ya es idempotente sin este campo.")
35699
+ idempotencyKey: z141.string().guid().optional().describe("Opcional. Se acepta por compatibilidad pero se ignora: la identidad del reintento se deriva autom\xE1ticamente de los argumentos sem\xE1nticos, as\xED que un retry con los mismos argumentos ya es idempotente sin este campo.")
35693
35700
  }).strict();
35694
35701
  var imageStyleList = ImageCreativeStyleEnum.options.join(" | ");
35695
35702
  var ImageCreativeSetup = z141.discriminatedUnion("mode", [
@@ -35791,7 +35798,7 @@ var ImageInput = z141.object({
35791
35798
  brandId: CreativeRefs.brandId
35792
35799
  });
35793
35800
  var EditImageCreativeInput = z141.object({
35794
- taskId: z141.string().uuid().describe("ID de la tarea de imagen ya finalizada."),
35801
+ taskId: z141.string().guid().describe("ID de la tarea de imagen ya finalizada."),
35795
35802
  variantIndex: z141.number().int().min(0).max(10).describe("\xCDndice de la variante a corregir (0 = primera imagen)."),
35796
35803
  clientRequestId: z141.string().min(1).max(160).optional().describe("Identidad estable de esta correcci\xF3n; reutil\xEDzala al reconciliar una respuesta perdida, no para otra instrucci\xF3n."),
35797
35804
  instruction: z141.string().min(1).max(1e3).describe('Qu\xE9 cambiar en esa imagen. Ej. "quita el badge de env\xEDo gratis", "cambia el fondo a blanco".')
@@ -36086,8 +36093,8 @@ function registerCreativeTools(server, api, { transport = "http", proxyBaseUrl =
36086
36093
  server.registerTool("get_image_edit_status", {
36087
36094
  description: imageEditStatusGuidance.summary,
36088
36095
  inputSchema: {
36089
- taskId: z141.string().uuid(),
36090
- operationId: z141.string().uuid()
36096
+ taskId: z141.string().guid(),
36097
+ operationId: z141.string().guid()
36091
36098
  },
36092
36099
  annotations: READS_INTERNAL,
36093
36100
  _meta: taskResultsToolMeta()
@@ -36226,7 +36233,7 @@ var CreativeVariantKindEnum = z142.enum([
36226
36233
  "landing"
36227
36234
  ]);
36228
36235
  var EstimateCreativeVariantInputBase = z142.object({
36229
- sourceTaskId: z142.string().uuid().describe("ID de la tarea original completada."),
36236
+ sourceTaskId: z142.string().guid().describe("ID de la tarea original completada."),
36230
36237
  kind: CreativeVariantKindEnum,
36231
36238
  videoPreset: TaskCreativeVariantVideoPresetEnum.optional().describe("Opcional para video. Solo cambia el preset p\xFAblico; el servidor conserva el modelo/tier del task origen."),
36232
36239
  videoResolution: VideoResolutionEnum.optional().describe("Opcional para video. Resoluci\xF3n del nuevo render."),
@@ -36295,10 +36302,10 @@ var EstimateCreativeVariantInput = EstimateCreativeVariantInputBase.superRefine(
36295
36302
  }
36296
36303
  });
36297
36304
  var CreateCreativeVariantInputBase = z142.object({
36298
- sourceTaskId: z142.string().uuid().describe("ID de la tarea original completada."),
36305
+ sourceTaskId: z142.string().guid().describe("ID de la tarea original completada."),
36299
36306
  kind: CreativeVariantKindEnum,
36300
36307
  confirm: z142.literal(true).describe("Confirmaci\xF3n expl\xEDcita del usuario despu\xE9s de mostrarle el estimado de cr\xE9ditos."),
36301
- clientRequestId: z142.string().uuid().describe("UUID estable para esta intenci\xF3n (obligatorio por compatibilidad de contrato; el servidor deriva la identidad real del request desde los argumentos sem\xE1nticos, as\xED que un UUID nuevo en un retry NO crea una variante duplicada). Si la API devuelve status=error, una nueva generaci\xF3n exige otra confirmaci\xF3n."),
36308
+ clientRequestId: z142.string().guid().describe("UUID estable para esta intenci\xF3n (obligatorio por compatibilidad de contrato; el servidor deriva la identidad real del request desde los argumentos sem\xE1nticos, as\xED que un UUID nuevo en un retry NO crea una variante duplicada). Si la API devuelve status=error, una nueva generaci\xF3n exige otra confirmaci\xF3n."),
36302
36309
  angle: z142.string().trim().min(1).max(500).optional().describe("\xC1ngulo nuevo para video o imagen."),
36303
36310
  buyerPersona: z142.string().trim().min(1).max(360).optional().describe("Buyer persona coherente con el \xE1ngulo."),
36304
36311
  scriptNotes: z142.string().trim().min(1).max(2e3).optional().describe("Direcci\xF3n breve del guion para una variante de video."),
@@ -36667,7 +36674,7 @@ function registerConnectionTools(server, api) {
36667
36674
  inputSchema: z144.object({
36668
36675
  shopDomain: z144.string().min(3).max(120),
36669
36676
  query: z144.string().trim().max(120).optional(),
36670
- taskId: z144.string().uuid().optional()
36677
+ taskId: z144.string().guid().optional()
36671
36678
  }).shape,
36672
36679
  annotations: READS_EXTERNAL
36673
36680
  }, async ({ shopDomain, query, taskId }) => {
@@ -37019,8 +37026,8 @@ var GroupedMediaSource = z146.object({
37019
37026
  var GroupedUploadedAssetSource = z146.object({
37020
37027
  type: z146.literal("asset"),
37021
37028
  /** Returned by check_media_upload. ProductMaker resolves ownership server-side. */
37022
- assetId: z146.string().uuid(),
37023
- thumbnailAssetId: z146.string().uuid().optional()
37029
+ assetId: z146.string().guid(),
37030
+ thumbnailAssetId: z146.string().guid().optional()
37024
37031
  });
37025
37032
  var GroupedCreative = z146.object({
37026
37033
  type: z146.enum([
@@ -37167,7 +37174,7 @@ var PresignUploadResponseSchema = z146.object({
37167
37174
  const url2 = new URL(value);
37168
37175
  return !url2.username && !url2.password;
37169
37176
  }, "public media URL must not contain embedded credentials"),
37170
- stagingAssetId: z146.string().uuid()
37177
+ stagingAssetId: z146.string().guid()
37171
37178
  });
37172
37179
  async function uploadResolvedMedia(api, media, assetRole) {
37173
37180
  if (!media.buffer) throw new ResolveMediaError("INVALID_INPUT", "resolved media has no bytes");
@@ -37656,7 +37663,7 @@ var UploadSessionToolInput = z147.object(UploadSessionToolInputShape).superRefin
37656
37663
  }
37657
37664
  });
37658
37665
  var UploadSessionResponse = z147.object({
37659
- sessionId: z147.string().uuid(),
37666
+ sessionId: z147.string().guid(),
37660
37667
  uploadPageUrl: z147.string().url(),
37661
37668
  mediaKind: z147.enum([
37662
37669
  "image",
@@ -37671,7 +37678,7 @@ var UploadSessionResponse = z147.object({
37671
37678
  expiresAt: z147.string().datetime()
37672
37679
  });
37673
37680
  var UploadStatusInput = z147.object({
37674
- sessionId: z147.string().uuid().describe("The sessionId returned by request_media_upload.")
37681
+ sessionId: z147.string().guid().describe("The sessionId returned by request_media_upload.")
37675
37682
  });
37676
37683
  var UniversalUploadStatusResponse = z147.discriminatedUnion("status", [
37677
37684
  z147.object({
@@ -37681,7 +37688,7 @@ var UniversalUploadStatusResponse = z147.discriminatedUnion("status", [
37681
37688
  z147.object({
37682
37689
  status: z147.literal("uploaded"),
37683
37690
  assets: z147.array(z147.object({
37684
- assetId: z147.string().uuid(),
37691
+ assetId: z147.string().guid(),
37685
37692
  mediaKind: z147.enum([
37686
37693
  "image",
37687
37694
  "video"
@@ -37993,7 +38000,7 @@ var ShippingReferenceSchema = z149.object({
37993
38000
  });
37994
38001
  }
37995
38002
  });
37996
- var SHIPPING_REFERENCES = z149.record(ShippingReferenceSchema).parse(product_costing_shipping_references_default);
38003
+ var SHIPPING_REFERENCES = z149.record(z149.string(), ShippingReferenceSchema).parse(product_costing_shipping_references_default);
37997
38004
  var PRODUCT_COSTING_COUNTRY_CODES = Object.freeze(Object.keys(SHIPPING_REFERENCES));
37998
38005
  var SPANISH_LOCALE_COUNTRIES = /* @__PURE__ */ new Set([
37999
38006
  "MX",
@@ -38832,7 +38839,7 @@ var FindInput = z152.object({
38832
38839
  waitSeconds: z152.number().int().min(0).max(MAX_WAIT_SECONDS).optional().describe("Segundos a esperar el reporte antes de devolver el runId. M\xE1ximo 120.")
38833
38840
  });
38834
38841
  var GetInput = z152.object({
38835
- runId: z152.string().uuid().describe("ID del run devuelto por find_winning_products.")
38842
+ runId: z152.string().guid().describe("ID del run devuelto por find_winning_products.")
38836
38843
  });
38837
38844
  var ListInput = z152.object({
38838
38845
  limit: z152.number().int().min(1).max(20).default(10)
@@ -38978,7 +38985,7 @@ import { z as z153 } from "zod";
38978
38985
  var startDropshippingProjectGuidance = getProductMakerCapabilityModelGuidance("start_dropshipping_project");
38979
38986
  var costDropshippingProjectGuidance = getProductMakerCapabilityModelGuidance("cost_dropshipping_project");
38980
38987
  var guideDropshippingLaunchGuidance = getProductMakerCapabilityModelGuidance("guide_dropshipping_launch");
38981
- var ProjectId = z153.string().uuid();
38988
+ var ProjectId = z153.string().guid();
38982
38989
  var DropshippingProjectStatus = z153.enum([
38983
38990
  "active",
38984
38991
  "completed",
@@ -39092,15 +39099,7 @@ var DropshippingProjectNextAction = z153.discriminatedUnion("kind", NEXT_ACTION_
39092
39099
  kind: z153.literal(kind2),
39093
39100
  href: z153.string().min(1)
39094
39101
  })));
39095
- var CostingInputSchema = z153.object({
39096
- country: z153.string().min(2).max(3),
39097
- supplierCost: z153.number().finite().positive(),
39098
- shippingCost: z153.number().finite().nonnegative(),
39099
- returnRate: z153.number().finite().min(0).lt(1),
39100
- cancellationRate: z153.number().finite().min(0).lt(1),
39101
- adsManagerCpa: z153.number().finite().nonnegative(),
39102
- desiredMargin: z153.number().finite().min(0).lt(1)
39103
- }).superRefine(({ returnRate, cancellationRate }, context) => {
39102
+ var CostingInputSchema = z153.object(DropshippingProjectCostingInputSchema.shape).superRefine(({ returnRate, cancellationRate }, context) => {
39104
39103
  if (returnRate + cancellationRate >= 1) context.addIssue({
39105
39104
  code: z153.ZodIssueCode.custom,
39106
39105
  path: [
@@ -39290,10 +39289,10 @@ var DateOnly = z154.string().regex(/^\d{4}-\d{2}-\d{2}$/);
39290
39289
  var DailyControlInput = z154.object({
39291
39290
  date: DateOnly.optional().describe("D\xEDa final de la ventana (YYYY-MM-DD). Si se omite, la ventana termina AYER en UTC \u2014 nunca hoy, porque el d\xEDa en curso est\xE1 incompleto \u2014 y el servidor puede correrla un d\xEDa m\xE1s atr\xE1s si en la zona horaria de la tienda ese d\xEDa todav\xEDa no ha cerrado."),
39292
39291
  days: z154.number().int().min(1).max(14).default(3).describe("Tama\xF1o de la ventana, 1 a 14 d\xEDas."),
39293
- projectId: z154.string().uuid().optional().describe("Opcional: limita el reporte a un solo proyecto en vez de todos los productos activos.")
39292
+ projectId: z154.string().guid().optional().describe("Opcional: limita el reporte a un solo proyecto en vez de todos los productos activos.")
39294
39293
  }).strict();
39295
39294
  var LinkCampaignInput = z154.object({
39296
- projectId: z154.string().uuid(),
39295
+ projectId: z154.string().guid(),
39297
39296
  provider: z154.enum([
39298
39297
  "meta",
39299
39298
  "tiktok"
@@ -39302,7 +39301,7 @@ var LinkCampaignInput = z154.object({
39302
39301
  campaignId: ProviderCampaignIdentifier
39303
39302
  }).strict();
39304
39303
  var ReportReturnsInput = z154.object({
39305
- projectId: z154.string().uuid(),
39304
+ projectId: z154.string().guid(),
39306
39305
  date: DateOnly,
39307
39306
  returnedOrders: z154.number().int().min(0).max(1e5),
39308
39307
  note: z154.string().trim().max(280).optional()
@@ -39320,7 +39319,7 @@ var DailyControlDayMirror = z154.object({
39320
39319
  light: DailyControlLightMirror
39321
39320
  }).passthrough();
39322
39321
  var DailyControlProductMirror = z154.object({
39323
- projectId: z154.string().uuid(),
39322
+ projectId: z154.string().guid(),
39324
39323
  productName: z154.string().nullable(),
39325
39324
  status: DailyControlStatusMirror,
39326
39325
  statusMessage: z154.string().nullable(),
@@ -39453,7 +39452,7 @@ var SetProductCostingInput = z155.object({
39453
39452
  tienda + id de Shopify. El esquema canónico también las admite juntas,
39454
39453
  pero pedirlas por separado evita que el modelo emita una mezcla que
39455
39454
  diga dos productos a la vez. */
39456
- productControlId: z155.string().uuid().optional().describe("El id nuestro (lo devuelven get_product_control y create_manual_product). Obligatorio para productos manuales o importados sin tienda."),
39455
+ productControlId: z155.string().guid().optional().describe("El id nuestro (lo devuelven get_product_control y create_manual_product). Obligatorio para productos manuales o importados sin tienda."),
39457
39456
  manualSellingPrice: z155.number().positive().nullable().optional().describe("Precio de venta \u2014 SOLO con productControlId: para el producto sin tienda no hay otra verdad. En un producto de Shopify NO se manda: el precio lo manda la tienda."),
39458
39457
  shopDomain: z155.string().min(1).optional(),
39459
39458
  shopifyProductId: z155.string().min(1).max(64).optional(),
@@ -39465,7 +39464,7 @@ var SetProductCostingInput = z155.object({
39465
39464
  }).strict();
39466
39465
  var Count = z155.number().int().min(0).max(1e5).nullable().optional();
39467
39466
  var ReportProductCountsInput = z155.object({
39468
- productControlId: z155.string().uuid().describe("El identificador que devuelve get_product_control."),
39467
+ productControlId: z155.string().guid().describe("El identificador que devuelve get_product_control."),
39469
39468
  date: DateOnly2,
39470
39469
  orders: Count.describe("Pedidos que entraron ese d\xEDa."),
39471
39470
  cancelledOrders: Count,
@@ -39478,7 +39477,7 @@ var SyncShopifyOrdersInput = SyncShopifyOrdersSchema;
39478
39477
  var ImportOrdersFileInput = z155.object({
39479
39478
  /** Ruta ABSOLUTA en la máquina de quien usa el MCP. */
39480
39479
  path: z155.string().min(1),
39481
- operationId: z155.string().uuid().optional(),
39480
+ operationId: z155.string().guid().optional(),
39482
39481
  /** Solo mirar: devuelve el resumen y no escribe nada. */
39483
39482
  dryRun: z155.boolean().optional()
39484
39483
  }).strict();
@@ -39487,35 +39486,35 @@ var CreateOperationInput = z155.object({
39487
39486
  label: z155.string().trim().min(1).max(60).optional()
39488
39487
  }).strict();
39489
39488
  var MergeProductsInput = z155.object({
39490
- sourceId: z155.string().uuid(),
39491
- targetId: z155.string().uuid()
39489
+ sourceId: z155.string().guid(),
39490
+ targetId: z155.string().guid()
39492
39491
  }).strict();
39493
39492
  var SetMonthlyExpenseInput = z155.object({
39494
39493
  month: z155.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
39495
39494
  label: SaveMonthlyExpenseSchema.shape.label,
39496
39495
  amount: z155.number().finite().min(0),
39497
- operationId: z155.string().uuid().optional()
39496
+ operationId: z155.string().guid().optional()
39498
39497
  }).strict();
39499
39498
  var SetAdSpendInput = z155.object({
39500
39499
  month: z155.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
39501
- operationId: z155.string().uuid().optional(),
39500
+ operationId: z155.string().guid().optional(),
39502
39501
  /** null RETIRA la corrección; cero afirma que no pautó. */
39503
39502
  amount: z155.number().finite().min(0).nullable()
39504
39503
  }).strict();
39505
39504
  var GetFinancesInput = z155.object({
39506
39505
  month: z155.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional().describe("Mes en YYYY-MM. Si se omite, el mes en curso. Solo mes calendario."),
39507
- operationId: z155.string().uuid().optional().describe("El negocio, si tiene mas de uno. Con uno solo no hace falta decirlo.")
39506
+ operationId: z155.string().guid().optional().describe("El negocio, si tiene mas de uno. Con uno solo no hace falta decirlo.")
39508
39507
  }).strict();
39509
39508
  var GetDropiStatusInput = DropiCountryQuerySchema.extend({
39510
39509
  countryCode: DropiCountrySchema.optional().describe("Pa\xEDs de la cuenta (ISO-2). Si se omite, el servidor responde por Colombia (CO)."),
39511
- connectionId: z155.string().uuid().optional().describe("Una cuenta concreta cuando el pa\xEDs tiene varias. Sale de la lista de conexiones; nunca se inventa.")
39510
+ connectionId: z155.string().guid().optional().describe("Una cuenta concreta cuando el pa\xEDs tiene varias. Sale de la lista de conexiones; nunca se inventa.")
39512
39511
  });
39513
39512
  var SyncDropiOrdersInput = SyncDropiFinancialSchema;
39514
- var CreateManualProductInput = CreateManualProductControlSchema.innerType().omit({
39513
+ var CreateManualProductInput = z155.strictObject(CreateManualProductControlSchema.shape).omit({
39515
39514
  requestId: true
39516
39515
  });
39517
39516
  var ListUnmatchedProductsInput = z155.object({
39518
- operationId: z155.string().uuid().optional().describe("El negocio, si tiene mas de uno. Con uno solo no hace falta decirlo.")
39517
+ operationId: z155.string().guid().optional().describe("El negocio, si tiene mas de uno. Con uno solo no hace falta decirlo.")
39519
39518
  }).strict();
39520
39519
  var ResolveUnmatchedProductInput = ResolveUnmatchedProductSchema;
39521
39520
  var ListLinkableCampaignsInput = z155.object({}).strict();
@@ -39526,13 +39525,13 @@ var LinkProductCampaignInput = z155.object({
39526
39525
  ]).describe("La red publicitaria de la campa\xF1a."),
39527
39526
  accountId: z155.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/).describe("La cuenta publicitaria. Sale de list_linkable_campaigns; nunca se inventa."),
39528
39527
  campaignId: z155.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/).describe("La campa\xF1a. Sale de list_linkable_campaigns; nunca se inventa."),
39529
- productControlId: z155.string().uuid().optional().describe("El id del producto en su control financiero."),
39528
+ productControlId: z155.string().guid().optional().describe("El id del producto en su control financiero."),
39530
39529
  shopDomain: z155.string().min(1).optional().describe("La tienda del producto; con shopifyProductId es la otra forma de decir cu\xE1l es."),
39531
39530
  shopifyProductId: z155.string().min(1).optional().describe("El id del producto en su tienda. Va junto a shopDomain.")
39532
39531
  }).strict();
39533
39532
  var DeleteMonthlyExpenseInput = DeleteMonthlyExpenseSchema;
39534
39533
  var RemoveProductControlInput = z155.object({
39535
- productControlId: z155.string().uuid().describe("El id del producto en su control. Sale del listado; nunca se inventa.")
39534
+ productControlId: z155.string().guid().describe("El id del producto en su control. Sale del listado; nunca se inventa.")
39536
39535
  }).strict();
39537
39536
  function manualProductRequestId(input) {
39538
39537
  const digest3 = createHash4("sha256").update(JSON.stringify(input, [
@@ -40086,6 +40085,8 @@ function createServer(opts) {
40086
40085
  },
40087
40086
  logging: {}
40088
40087
  },
40088
+ // Bound structural work before parsing hosted tool arguments; stdio remains local.
40089
+ maxToolInputElements: transport === "http" ? 1e4 : void 0,
40089
40090
  instructions
40090
40091
  });
40091
40092
  const api = new ApiClient(apiBaseUrl, opts.credential, {