@productmaker/mcp 8.9.2 → 8.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/http.js +42 -27
- package/dist/stdio.js +42 -27
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -283,6 +283,12 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
|
|
|
283
283
|
|
|
284
284
|
## Version history
|
|
285
285
|
|
|
286
|
+
### 8.10.0 — Familia storyteller bloqueada
|
|
287
|
+
|
|
288
|
+
- `create_product_task`, `generate_video_creative`, `create_creative_variant` y `regenerate_video_script` ya no ofrecen los presets `storyteller`, `inner_journey`, `object_soul` y `timeline` ni las narrativas `animated_storyteller`, `animated_inner_journey`, `animated_object_soul` y `animated_timeline`; la API también las rechaza con 400 (bloqueo temporal por calidad). `animationStyle` aplica solo a `pixar_problem` y `pixar_sassy`.
|
|
289
|
+
- `resolve_pending_action` sigue aprobando tareas creadas antes del bloqueo que ya llevan una de esas narrativas, y `create_creative_variant` sobre ellas usa UGC Review en lugar de heredar la narrativa bloqueada.
|
|
290
|
+
- `regenerate_video_script` de una tarea storyteller previa al bloqueo exige elegir otra narrativa.
|
|
291
|
+
|
|
286
292
|
### 8.9.2 — Shopify Meta controls and synchronized MCP release metadata
|
|
287
293
|
|
|
288
294
|
Per-store Meta controls remain available in Integrations. This patch retains the 8.9.0 commerce-verification and publishing contracts; the Meta settings introduce no additional MCP tools.
|
package/dist/http.js
CHANGED
|
@@ -48,6 +48,18 @@ var NarrativeStyle = z.enum([
|
|
|
48
48
|
"animated_object_soul",
|
|
49
49
|
"animated_timeline"
|
|
50
50
|
]);
|
|
51
|
+
var BLOCKED_NARRATIVE_STYLES = [
|
|
52
|
+
"animated_storyteller",
|
|
53
|
+
"animated_inner_journey",
|
|
54
|
+
"animated_object_soul",
|
|
55
|
+
"animated_timeline"
|
|
56
|
+
];
|
|
57
|
+
var BLOCKED_VIDEO_PRESETS = [
|
|
58
|
+
"storyteller",
|
|
59
|
+
"inner_journey",
|
|
60
|
+
"object_soul",
|
|
61
|
+
"timeline"
|
|
62
|
+
];
|
|
51
63
|
var AnimationStyleSchema = z.enum([
|
|
52
64
|
"pixar_3d",
|
|
53
65
|
"claymation",
|
|
@@ -3829,6 +3841,7 @@ var LandingPatchSchema = z21.object({
|
|
|
3829
3841
|
}
|
|
3830
3842
|
});
|
|
3831
3843
|
});
|
|
3844
|
+
var MAX_CODE_LANDING_ARTIFACT_ASSETS = 96;
|
|
3832
3845
|
var CodeLandingArtifactSchema = z21.object({
|
|
3833
3846
|
schemaVersion: z21.literal(CODE_LANDING_SCHEMA_VERSION),
|
|
3834
3847
|
runtimeVersion: z21.literal(CODE_LANDING_RUNTIME_VERSION),
|
|
@@ -3840,7 +3853,7 @@ var CodeLandingArtifactSchema = z21.object({
|
|
|
3840
3853
|
document: CodeLandingDocumentSchema,
|
|
3841
3854
|
blocks: z21.array(CodeLandingBlockSchema).min(1).max(32),
|
|
3842
3855
|
anchors: z21.array(CodeLandingAnchorSchema).min(1).max(64),
|
|
3843
|
-
assets: z21.array(CodeLandingAssetSchema).max(
|
|
3856
|
+
assets: z21.array(CodeLandingAssetSchema).max(MAX_CODE_LANDING_ARTIFACT_ASSETS),
|
|
3844
3857
|
components: z21.array(ComponentManifestEntrySchema).max(64),
|
|
3845
3858
|
interactions: z21.array(InteractionProgramSchema).max(64),
|
|
3846
3859
|
protectedBindings: z21.array(ProtectedBindingSchema).max(128),
|
|
@@ -6275,7 +6288,8 @@ var TaskCreativeVariantVideoPreset = VideoPreset.exclude([
|
|
|
6275
6288
|
"ugc_curiosity_reveal",
|
|
6276
6289
|
"ugc_listicle_3",
|
|
6277
6290
|
"ugc_skeptic_confession",
|
|
6278
|
-
"metaphor_product"
|
|
6291
|
+
"metaphor_product",
|
|
6292
|
+
...BLOCKED_VIDEO_PRESETS
|
|
6279
6293
|
]);
|
|
6280
6294
|
var CreateTaskCreativeVariantBase = z33.object({
|
|
6281
6295
|
clientRequestId: z33.string().uuid(),
|
|
@@ -14342,7 +14356,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14342
14356
|
defineCapability(
|
|
14343
14357
|
"create_creative_variant",
|
|
14344
14358
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14345
|
-
|
|
14359
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14360
|
+
"3e02399a7785df328f1c4d63cfbb6d7481abaac9f91d4a5cf51d410e657d63aa",
|
|
14346
14361
|
"credit_consuming",
|
|
14347
14362
|
"creative",
|
|
14348
14363
|
[
|
|
@@ -14397,7 +14412,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14397
14412
|
// default). Recomputed from the real tools/list digest printer.
|
|
14398
14413
|
// + market study opt-in copy (#2005, competitorScanEnabled description).
|
|
14399
14414
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14400
|
-
|
|
14415
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14416
|
+
"d5f2fd2f2d3687ce41acac9b5c44bdf5a5c3d542cbfdafcf5759c35f9320140f",
|
|
14401
14417
|
"credit_consuming",
|
|
14402
14418
|
"creative",
|
|
14403
14419
|
[
|
|
@@ -14583,7 +14599,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14583
14599
|
], [
|
|
14584
14600
|
"task_draft"
|
|
14585
14601
|
]),
|
|
14586
|
-
defineCapability("estimate_creative_variant", "
|
|
14602
|
+
defineCapability("estimate_creative_variant", "d4453364c0706bf88f480cebc977916f06d222d7eebebc9cfa91165929a1a998", "none", "read_only", [
|
|
14587
14603
|
"read"
|
|
14588
14604
|
], [
|
|
14589
14605
|
slot("source_task", true, [
|
|
@@ -14915,7 +14931,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14915
14931
|
defineCapability(
|
|
14916
14932
|
"generate_video_creative",
|
|
14917
14933
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14918
|
-
|
|
14934
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14935
|
+
"932a153afe51975abe3b601530f17178ed8ddd56a6f8116877bc4caab4fc6a9d",
|
|
14919
14936
|
"credit_consuming",
|
|
14920
14937
|
"creative",
|
|
14921
14938
|
[
|
|
@@ -15358,7 +15375,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15358
15375
|
], [
|
|
15359
15376
|
"product_media"
|
|
15360
15377
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15361
|
-
defineCapability("regenerate_video_script", "
|
|
15378
|
+
defineCapability("regenerate_video_script", "eb9546e5cda3864de78ff119ae81dd17c893ea9ea5be1bf0fbfeb8b45302e639", "credit_consuming", "creative", [
|
|
15362
15379
|
"credit_consuming",
|
|
15363
15380
|
"state_change"
|
|
15364
15381
|
], [
|
|
@@ -15421,7 +15438,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15421
15438
|
], [
|
|
15422
15439
|
"media_upload_session"
|
|
15423
15440
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15424
|
-
defineCapability("resolve_pending_action", "
|
|
15441
|
+
defineCapability("resolve_pending_action", "9377ff126ec842cfb8278877846c5f8f6f1b9ba0c263e7200f080db9bbe9ae12", "credit_consuming", "creative", [
|
|
15425
15442
|
"credit_consuming",
|
|
15426
15443
|
"state_change"
|
|
15427
15444
|
], [
|
|
@@ -15942,7 +15959,10 @@ var MCP_DOWNSTREAM_CLIENT_VALUE = "mcp";
|
|
|
15942
15959
|
|
|
15943
15960
|
// ../../packages/types/src/mcp-surface.ts
|
|
15944
15961
|
var MCP_HIDDEN_NARRATIVE_STYLES = [
|
|
15945
|
-
"gap_replication"
|
|
15962
|
+
"gap_replication",
|
|
15963
|
+
// The blocked storyteller family is not offered, not even when revising an
|
|
15964
|
+
// existing script.
|
|
15965
|
+
...BLOCKED_NARRATIVE_STYLES
|
|
15946
15966
|
];
|
|
15947
15967
|
var McpNarrativeStyleSchema = NarrativeStyle.exclude(MCP_HIDDEN_NARRATIVE_STYLES);
|
|
15948
15968
|
var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
@@ -15956,10 +15976,6 @@ var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
|
15956
15976
|
"wild_card",
|
|
15957
15977
|
"animated_problem_pixar",
|
|
15958
15978
|
"sassy_product_pixar",
|
|
15959
|
-
"animated_storyteller",
|
|
15960
|
-
"animated_inner_journey",
|
|
15961
|
-
"animated_object_soul",
|
|
15962
|
-
"animated_timeline",
|
|
15963
15979
|
"market"
|
|
15964
15980
|
];
|
|
15965
15981
|
var McpAngleNarrativeStyleSchema = NarrativeStyle.extract(MCP_ANGLE_NARRATIVE_STYLES);
|
|
@@ -18930,7 +18946,7 @@ var ApiClient = class {
|
|
|
18930
18946
|
};
|
|
18931
18947
|
|
|
18932
18948
|
// src/index.ts
|
|
18933
|
-
var MCP_VERSION = "8.
|
|
18949
|
+
var MCP_VERSION = "8.10.0";
|
|
18934
18950
|
|
|
18935
18951
|
// src/meta-upload-app.ts
|
|
18936
18952
|
import { readFileSync } from "fs";
|
|
@@ -19579,11 +19595,7 @@ var VideoPresetEnum = VideoPreset.extract([
|
|
|
19579
19595
|
"cinematic",
|
|
19580
19596
|
"wild_card",
|
|
19581
19597
|
"pixar_problem",
|
|
19582
|
-
"pixar_sassy"
|
|
19583
|
-
"storyteller",
|
|
19584
|
-
"inner_journey",
|
|
19585
|
-
"object_soul",
|
|
19586
|
-
"timeline"
|
|
19598
|
+
"pixar_sassy"
|
|
19587
19599
|
]);
|
|
19588
19600
|
var VideoStructureEnum = VideoStructure;
|
|
19589
19601
|
var VideoQualityEnum = VideoQuality;
|
|
@@ -21374,8 +21386,8 @@ var CreateProductTaskInput = z83.object({
|
|
|
21374
21386
|
paymentMethods: z83.string().min(1).max(240).optional().describe('Opcional. M\xE9todos de pago que puede mostrar la landing. Ej. "Tarjeta, PSE, Nequi, Contraentrega". Si se omite, la landing no muestra m\xE9todos de pago.'),
|
|
21375
21387
|
productContext: z83.string().max(PRODUCT_CONTEXT_MAX_CHARS).optional().describe("Opcional. Informacion adicional del producto que la IA debe usar como contexto prioritario: uso real, comprador, restricciones, diferenciadores o direccion creativa. No reemplaza la investigacion de competencia; si hay competencia, guia el primer angulo y los outputs no deben contradecirlo."),
|
|
21376
21388
|
productLabel: z83.string().trim().max(80).optional().describe('Opcional. Qu\xE9 es el producto, en pocas palabras (ej. "quita pelusas para ropa"). Es AUTORITATIVO: si lo env\xEDas, la IA usa esta identidad y no la reemplaza por otra categor\xEDa. Si lo omites, la IA detecta el producto desde la imagen.'),
|
|
21377
|
-
videoPreset: VideoPresetEnum.default("auto").describe('Opcional. Tipo/narrativa del video \u2014 \xFAnico campo de "estilo" que el usuario controla. Default "auto" (la IA escoge tras analizar el producto). Todos los presets funcionan a 15s (single_call) y 30s (Multiescena); "problem_solution" en single_call abre sin el producto y el producto entra por referencia en su beat de soluci\xF3n. Opciones: "auto", "ugc_dynamic" (review con experiencia y prueba), "ugc_how_to" (tutorial con pasos y resultado visible), "ugc_unboxing_chaos" (apertura y primera prueba), "problem_solution" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase" (producto ejecutando una funci\xF3n real), "wearable_showcase" (prenda o accesorio modelado), "cinematic" (TV spot con receta cinematogr\xE1fica), "wild_card" (idea imposible: un truco visual que en la vida real no podr\xEDa pasar, y al cierre la invitaci\xF3n a comprar), "pixar_problem" (problema animado 3D), "pixar_sassy" (producto que habla)
|
|
21378
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
21389
|
+
videoPreset: VideoPresetEnum.default("auto").describe('Opcional. Tipo/narrativa del video \u2014 \xFAnico campo de "estilo" que el usuario controla. Default "auto" (la IA escoge tras analizar el producto). Todos los presets funcionan a 15s (single_call) y 30s (Multiescena); "problem_solution" en single_call abre sin el producto y el producto entra por referencia en su beat de soluci\xF3n. Opciones: "auto", "ugc_dynamic" (review con experiencia y prueba), "ugc_how_to" (tutorial con pasos y resultado visible), "ugc_unboxing_chaos" (apertura y primera prueba), "problem_solution" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase" (producto ejecutando una funci\xF3n real), "wearable_showcase" (prenda o accesorio modelado), "cinematic" (TV spot con receta cinematogr\xE1fica), "wild_card" (idea imposible: un truco visual que en la vida real no podr\xEDa pasar, y al cierre la invitaci\xF3n a comprar), "pixar_problem" (problema animado 3D), "pixar_sassy" (producto que habla). Si el usuario pide algo fuera de esta lista, p\xEDdele una opci\xF3n v\xE1lida.'),
|
|
21390
|
+
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem" o "pixar_sassy") \u2014 la API lo rechaza con cualquier otro preset. Opciones: "pixar_3d" (default, look 3D de pel\xEDcula animada), "claymation" (plastilina stop-motion artesanal), "wes_anderson" (tableau sim\xE9trico pastel), "sci_fi" (futurista con HUDs y ne\xF3n), "realista" (fotorrealista, fiel al producto). Si el usuario pide un look animado sin nombrar el estilo, omite el campo.'),
|
|
21379
21391
|
durationSeconds: z83.union([
|
|
21380
21392
|
z83.literal(15),
|
|
21381
21393
|
z83.literal(30)
|
|
@@ -21387,7 +21399,7 @@ var CreateProductTaskInput = z83.object({
|
|
|
21387
21399
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El proveedor se elige internamente. Default: economy.'),
|
|
21388
21400
|
videoResolution: VideoResolutionEnum.optional().describe('Opcional. Resoluci\xF3n del render. En la web se pregunta "\xBFResoluci\xF3n del video?". "480p" = excelente calidad y m\xE1s econ\xF3mico (RECOMENDADO, default si se omite); "720p" = m\xE1xima nitidez, entre 3% y 15% m\xE1s caro seg\xFAn formato y tier. Si el usuario no menciona resoluci\xF3n, OMITE este campo (el backend usa 480p).'),
|
|
21389
21401
|
videoAngleCount: z83.number().int().min(1).max(3).optional().describe("Cantidad de videos a renderizar: 1, 2 o 3. REQUERIDO cuando outputs incluye video (o se omite outputs, cuyo default incluye video); om\xEDtelo s\xF3lo cuando no se generar\xE1 video. Preg\xFAntalo incluso con aiDecidesAll=true porque cambia el costo."),
|
|
21390
|
-
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "
|
|
21402
|
+
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "market" (narrativa an\xE1lisis de mercado: adapta el video a los patrones ganadores estudiados de la competencia; requiere competitorScanEnabled: true). angleNarratives[i] fuerza la narrativa del \xE1ngulo i; las posiciones restantes las elige la IA. La lista no puede superar videoAngleCount.'),
|
|
21391
21403
|
outputs: z83.array(z83.enum([
|
|
21392
21404
|
"landing",
|
|
21393
21405
|
"video",
|
|
@@ -21495,7 +21507,7 @@ var PendingActionPayload = z83.discriminatedUnion("kind", [
|
|
|
21495
21507
|
// an opaque HTTP 400 after the model already believed it had been saved.
|
|
21496
21508
|
features: z83.array(z83.string().min(1).max(MCP_REVIEW_FEATURE_ITEM_MAX)).max(10).optional(),
|
|
21497
21509
|
buyerPersona: z83.string().min(1).max(360).optional(),
|
|
21498
|
-
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline")
|
|
21510
|
+
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline") no est\xE1 disponible por ahora.'),
|
|
21499
21511
|
actor: z83.string().min(1).max(360).optional().describe("Nueva descripci\xF3n del presentador. Al enviarla sin actorId, se elimina autom\xE1ticamente cualquier actor guardado previo de esos \xE1ngulos."),
|
|
21500
21512
|
actorId: z83.string().max(120).nullable().optional(),
|
|
21501
21513
|
creativeDirection: z83.string().max(2e3).optional(),
|
|
@@ -21508,7 +21520,7 @@ var PendingActionPayload = z83.discriminatedUnion("kind", [
|
|
|
21508
21520
|
]).optional().describe("Elecci\xF3n expl\xEDcita: market usa el estudio disponible; guided usa la narrativa elegida para este \xE1ngulo."),
|
|
21509
21521
|
angle: z83.string().min(1).max(480).optional(),
|
|
21510
21522
|
buyerPersona: z83.string().min(1).max(360).optional(),
|
|
21511
|
-
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline")
|
|
21523
|
+
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline") no est\xE1 disponible por ahora.'),
|
|
21512
21524
|
actor: z83.string().min(1).max(360).optional(),
|
|
21513
21525
|
actorId: z83.string().max(120).nullable().optional(),
|
|
21514
21526
|
creativeDirection: z83.string().max(2e3).optional()
|
|
@@ -21584,7 +21596,10 @@ var StatusForResolveSchema = z83.object({
|
|
|
21584
21596
|
"480p",
|
|
21585
21597
|
"720p"
|
|
21586
21598
|
]).optional(),
|
|
21587
|
-
|
|
21599
|
+
// READ from /v1/status: the canonical enum, not the public input policy.
|
|
21600
|
+
// A task created before a narrative was blocked/hidden must still parse,
|
|
21601
|
+
// or resolve_pending_action could never approve it.
|
|
21602
|
+
narrativeStyle: NarrativeStyle.optional(),
|
|
21588
21603
|
pauseForVideoScriptReview: z83.boolean().optional(),
|
|
21589
21604
|
pendingUserAction: z83.object({
|
|
21590
21605
|
kind: z83.string(),
|
|
@@ -22624,7 +22639,7 @@ var VideoCreativeSetup = z84.discriminatedUnion("mode", [
|
|
|
22624
22639
|
mode: z84.literal("guided"),
|
|
22625
22640
|
videoPreset: VideoPresetEnum.default("auto").describe('Narrativa opcional. Con estudio de mercado no la preguntes: se usa "auto" y el estudio define la estructura. Sin estudio conserva la elecci\xF3n del usuario. Todas las narrativas funcionan en Un solo clip y Multiescena.'),
|
|
22626
22641
|
buyerPersona: z84.string().trim().min(1).max(360),
|
|
22627
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
22642
|
+
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem" o "pixar_sassy") \u2014 la API lo rechaza con cualquier otro preset. Opciones: "pixar_3d" (default, look 3D de pel\xEDcula animada), "claymation" (plastilina stop-motion artesanal), "wes_anderson" (tableau sim\xE9trico pastel), "sci_fi" (futurista con HUDs y ne\xF3n), "realista" (fotorrealista, fiel al producto). Si el usuario pide un look animado sin nombrar el estilo, omite el campo.'),
|
|
22628
22643
|
presenter: VideoPresenter,
|
|
22629
22644
|
creativeDirection: z84.string().trim().min(1).max(500).nullable().describe("Direcci\xF3n visual elegida. null significa que el usuario deleg\xF3 expl\xEDcitamente esta decisi\xF3n.")
|
|
22630
22645
|
}).strict()
|
|
@@ -22643,7 +22658,7 @@ var VideoInput = z84.object({
|
|
|
22643
22658
|
]).describe('Relaci\xF3n de aspecto. "9:16" = vertical (TikTok/Reels \u2014 default recomendado para ads). "16:9" = horizontal (YouTube). "Auto" = decide la IA.'),
|
|
22644
22659
|
durationSeconds: z84.number().int().min(4).max(30).default(15).describe("Opcional. Duraci\xF3n objetivo: Un solo clip Econ\xF3mico o Medio usa 15s; Un solo clip Pro usa 15s o 30s; Multiescena usa 15s o 30s totales. La combinaci\xF3n de formato y calidad determina la ruta y el costo."),
|
|
22645
22660
|
videoAngleCount: z84.number().int().min(1).max(3).describe("Cantidad de videos a renderizar: 1, 2 o 3. Es una decisi\xF3n de costo obligatoria: preg\xFAntala incluso cuando creativeSetup.mode=automatic."),
|
|
22646
|
-
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "
|
|
22661
|
+
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "market" (narrativa an\xE1lisis de mercado: adapta el video a los patrones ganadores estudiados de la competencia; requiere competitorScanEnabled: true). angleNarratives[i] fuerza la narrativa del \xE1ngulo i; las posiciones restantes las elige la IA. La lista no puede superar videoAngleCount.'),
|
|
22647
22662
|
creativeSetup: VideoCreativeSetup.describe("Configuraci\xF3n creativa obligatoria. En guided pregunta narrativa, p\xFAblico, presentador y direcci\xF3n antes de confirmar. Usa automatic s\xF3lo si el usuario deleg\xF3 todo expl\xEDcitamente."),
|
|
22648
22663
|
videoStructure: VideoStructureEnum.default("single_take").describe('Opcional. Formato: "single_take" = Un solo clip (generado completo; puede incluir cambios de plano) o "multi_scene" = Multiescena (varias tomas concatenadas). Default: single_take.'),
|
|
22649
22664
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El sistema elige el proveedor internamente. Default: economy.'),
|
package/dist/stdio.js
CHANGED
|
@@ -70,6 +70,18 @@ var NarrativeStyle = z.enum([
|
|
|
70
70
|
"animated_object_soul",
|
|
71
71
|
"animated_timeline"
|
|
72
72
|
]);
|
|
73
|
+
var BLOCKED_NARRATIVE_STYLES = [
|
|
74
|
+
"animated_storyteller",
|
|
75
|
+
"animated_inner_journey",
|
|
76
|
+
"animated_object_soul",
|
|
77
|
+
"animated_timeline"
|
|
78
|
+
];
|
|
79
|
+
var BLOCKED_VIDEO_PRESETS = [
|
|
80
|
+
"storyteller",
|
|
81
|
+
"inner_journey",
|
|
82
|
+
"object_soul",
|
|
83
|
+
"timeline"
|
|
84
|
+
];
|
|
73
85
|
var AnimationStyleSchema = z.enum([
|
|
74
86
|
"pixar_3d",
|
|
75
87
|
"claymation",
|
|
@@ -3851,6 +3863,7 @@ var LandingPatchSchema = z21.object({
|
|
|
3851
3863
|
}
|
|
3852
3864
|
});
|
|
3853
3865
|
});
|
|
3866
|
+
var MAX_CODE_LANDING_ARTIFACT_ASSETS = 96;
|
|
3854
3867
|
var CodeLandingArtifactSchema = z21.object({
|
|
3855
3868
|
schemaVersion: z21.literal(CODE_LANDING_SCHEMA_VERSION),
|
|
3856
3869
|
runtimeVersion: z21.literal(CODE_LANDING_RUNTIME_VERSION),
|
|
@@ -3862,7 +3875,7 @@ var CodeLandingArtifactSchema = z21.object({
|
|
|
3862
3875
|
document: CodeLandingDocumentSchema,
|
|
3863
3876
|
blocks: z21.array(CodeLandingBlockSchema).min(1).max(32),
|
|
3864
3877
|
anchors: z21.array(CodeLandingAnchorSchema).min(1).max(64),
|
|
3865
|
-
assets: z21.array(CodeLandingAssetSchema).max(
|
|
3878
|
+
assets: z21.array(CodeLandingAssetSchema).max(MAX_CODE_LANDING_ARTIFACT_ASSETS),
|
|
3866
3879
|
components: z21.array(ComponentManifestEntrySchema).max(64),
|
|
3867
3880
|
interactions: z21.array(InteractionProgramSchema).max(64),
|
|
3868
3881
|
protectedBindings: z21.array(ProtectedBindingSchema).max(128),
|
|
@@ -6297,7 +6310,8 @@ var TaskCreativeVariantVideoPreset = VideoPreset.exclude([
|
|
|
6297
6310
|
"ugc_curiosity_reveal",
|
|
6298
6311
|
"ugc_listicle_3",
|
|
6299
6312
|
"ugc_skeptic_confession",
|
|
6300
|
-
"metaphor_product"
|
|
6313
|
+
"metaphor_product",
|
|
6314
|
+
...BLOCKED_VIDEO_PRESETS
|
|
6301
6315
|
]);
|
|
6302
6316
|
var CreateTaskCreativeVariantBase = z33.object({
|
|
6303
6317
|
clientRequestId: z33.string().uuid(),
|
|
@@ -14364,7 +14378,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14364
14378
|
defineCapability(
|
|
14365
14379
|
"create_creative_variant",
|
|
14366
14380
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14367
|
-
|
|
14381
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14382
|
+
"3e02399a7785df328f1c4d63cfbb6d7481abaac9f91d4a5cf51d410e657d63aa",
|
|
14368
14383
|
"credit_consuming",
|
|
14369
14384
|
"creative",
|
|
14370
14385
|
[
|
|
@@ -14419,7 +14434,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14419
14434
|
// default). Recomputed from the real tools/list digest printer.
|
|
14420
14435
|
// + market study opt-in copy (#2005, competitorScanEnabled description).
|
|
14421
14436
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14422
|
-
|
|
14437
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14438
|
+
"d5f2fd2f2d3687ce41acac9b5c44bdf5a5c3d542cbfdafcf5759c35f9320140f",
|
|
14423
14439
|
"credit_consuming",
|
|
14424
14440
|
"creative",
|
|
14425
14441
|
[
|
|
@@ -14605,7 +14621,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14605
14621
|
], [
|
|
14606
14622
|
"task_draft"
|
|
14607
14623
|
]),
|
|
14608
|
-
defineCapability("estimate_creative_variant", "
|
|
14624
|
+
defineCapability("estimate_creative_variant", "d4453364c0706bf88f480cebc977916f06d222d7eebebc9cfa91165929a1a998", "none", "read_only", [
|
|
14609
14625
|
"read"
|
|
14610
14626
|
], [
|
|
14611
14627
|
slot("source_task", true, [
|
|
@@ -14937,7 +14953,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14937
14953
|
defineCapability(
|
|
14938
14954
|
"generate_video_creative",
|
|
14939
14955
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14940
|
-
|
|
14956
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14957
|
+
"932a153afe51975abe3b601530f17178ed8ddd56a6f8116877bc4caab4fc6a9d",
|
|
14941
14958
|
"credit_consuming",
|
|
14942
14959
|
"creative",
|
|
14943
14960
|
[
|
|
@@ -15380,7 +15397,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15380
15397
|
], [
|
|
15381
15398
|
"product_media"
|
|
15382
15399
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15383
|
-
defineCapability("regenerate_video_script", "
|
|
15400
|
+
defineCapability("regenerate_video_script", "eb9546e5cda3864de78ff119ae81dd17c893ea9ea5be1bf0fbfeb8b45302e639", "credit_consuming", "creative", [
|
|
15384
15401
|
"credit_consuming",
|
|
15385
15402
|
"state_change"
|
|
15386
15403
|
], [
|
|
@@ -15443,7 +15460,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15443
15460
|
], [
|
|
15444
15461
|
"media_upload_session"
|
|
15445
15462
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15446
|
-
defineCapability("resolve_pending_action", "
|
|
15463
|
+
defineCapability("resolve_pending_action", "9377ff126ec842cfb8278877846c5f8f6f1b9ba0c263e7200f080db9bbe9ae12", "credit_consuming", "creative", [
|
|
15447
15464
|
"credit_consuming",
|
|
15448
15465
|
"state_change"
|
|
15449
15466
|
], [
|
|
@@ -15957,7 +15974,10 @@ var MCP_DOWNSTREAM_CLIENT_VALUE = "mcp";
|
|
|
15957
15974
|
|
|
15958
15975
|
// ../../packages/types/src/mcp-surface.ts
|
|
15959
15976
|
var MCP_HIDDEN_NARRATIVE_STYLES = [
|
|
15960
|
-
"gap_replication"
|
|
15977
|
+
"gap_replication",
|
|
15978
|
+
// The blocked storyteller family is not offered, not even when revising an
|
|
15979
|
+
// existing script.
|
|
15980
|
+
...BLOCKED_NARRATIVE_STYLES
|
|
15961
15981
|
];
|
|
15962
15982
|
var McpNarrativeStyleSchema = NarrativeStyle.exclude(MCP_HIDDEN_NARRATIVE_STYLES);
|
|
15963
15983
|
var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
@@ -15971,10 +15991,6 @@ var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
|
15971
15991
|
"wild_card",
|
|
15972
15992
|
"animated_problem_pixar",
|
|
15973
15993
|
"sassy_product_pixar",
|
|
15974
|
-
"animated_storyteller",
|
|
15975
|
-
"animated_inner_journey",
|
|
15976
|
-
"animated_object_soul",
|
|
15977
|
-
"animated_timeline",
|
|
15978
15994
|
"market"
|
|
15979
15995
|
];
|
|
15980
15996
|
var McpAngleNarrativeStyleSchema = NarrativeStyle.extract(MCP_ANGLE_NARRATIVE_STYLES);
|
|
@@ -17262,7 +17278,7 @@ var ApiClient = class {
|
|
|
17262
17278
|
};
|
|
17263
17279
|
|
|
17264
17280
|
// src/index.ts
|
|
17265
|
-
var MCP_VERSION = "8.
|
|
17281
|
+
var MCP_VERSION = "8.10.0";
|
|
17266
17282
|
|
|
17267
17283
|
// src/meta-upload-app.ts
|
|
17268
17284
|
import { readFileSync } from "fs";
|
|
@@ -17911,11 +17927,7 @@ var VideoPresetEnum = VideoPreset.extract([
|
|
|
17911
17927
|
"cinematic",
|
|
17912
17928
|
"wild_card",
|
|
17913
17929
|
"pixar_problem",
|
|
17914
|
-
"pixar_sassy"
|
|
17915
|
-
"storyteller",
|
|
17916
|
-
"inner_journey",
|
|
17917
|
-
"object_soul",
|
|
17918
|
-
"timeline"
|
|
17930
|
+
"pixar_sassy"
|
|
17919
17931
|
]);
|
|
17920
17932
|
var VideoStructureEnum = VideoStructure;
|
|
17921
17933
|
var VideoQualityEnum = VideoQuality;
|
|
@@ -19759,8 +19771,8 @@ var CreateProductTaskInput = z82.object({
|
|
|
19759
19771
|
paymentMethods: z82.string().min(1).max(240).optional().describe('Opcional. M\xE9todos de pago que puede mostrar la landing. Ej. "Tarjeta, PSE, Nequi, Contraentrega". Si se omite, la landing no muestra m\xE9todos de pago.'),
|
|
19760
19772
|
productContext: z82.string().max(PRODUCT_CONTEXT_MAX_CHARS).optional().describe("Opcional. Informacion adicional del producto que la IA debe usar como contexto prioritario: uso real, comprador, restricciones, diferenciadores o direccion creativa. No reemplaza la investigacion de competencia; si hay competencia, guia el primer angulo y los outputs no deben contradecirlo."),
|
|
19761
19773
|
productLabel: z82.string().trim().max(80).optional().describe('Opcional. Qu\xE9 es el producto, en pocas palabras (ej. "quita pelusas para ropa"). Es AUTORITATIVO: si lo env\xEDas, la IA usa esta identidad y no la reemplaza por otra categor\xEDa. Si lo omites, la IA detecta el producto desde la imagen.'),
|
|
19762
|
-
videoPreset: VideoPresetEnum.default("auto").describe('Opcional. Tipo/narrativa del video \u2014 \xFAnico campo de "estilo" que el usuario controla. Default "auto" (la IA escoge tras analizar el producto). Todos los presets funcionan a 15s (single_call) y 30s (Multiescena); "problem_solution" en single_call abre sin el producto y el producto entra por referencia en su beat de soluci\xF3n. Opciones: "auto", "ugc_dynamic" (review con experiencia y prueba), "ugc_how_to" (tutorial con pasos y resultado visible), "ugc_unboxing_chaos" (apertura y primera prueba), "problem_solution" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase" (producto ejecutando una funci\xF3n real), "wearable_showcase" (prenda o accesorio modelado), "cinematic" (TV spot con receta cinematogr\xE1fica), "wild_card" (idea imposible: un truco visual que en la vida real no podr\xEDa pasar, y al cierre la invitaci\xF3n a comprar), "pixar_problem" (problema animado 3D), "pixar_sassy" (producto que habla)
|
|
19763
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
19774
|
+
videoPreset: VideoPresetEnum.default("auto").describe('Opcional. Tipo/narrativa del video \u2014 \xFAnico campo de "estilo" que el usuario controla. Default "auto" (la IA escoge tras analizar el producto). Todos los presets funcionan a 15s (single_call) y 30s (Multiescena); "problem_solution" en single_call abre sin el producto y el producto entra por referencia en su beat de soluci\xF3n. Opciones: "auto", "ugc_dynamic" (review con experiencia y prueba), "ugc_how_to" (tutorial con pasos y resultado visible), "ugc_unboxing_chaos" (apertura y primera prueba), "problem_solution" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase" (producto ejecutando una funci\xF3n real), "wearable_showcase" (prenda o accesorio modelado), "cinematic" (TV spot con receta cinematogr\xE1fica), "wild_card" (idea imposible: un truco visual que en la vida real no podr\xEDa pasar, y al cierre la invitaci\xF3n a comprar), "pixar_problem" (problema animado 3D), "pixar_sassy" (producto que habla). Si el usuario pide algo fuera de esta lista, p\xEDdele una opci\xF3n v\xE1lida.'),
|
|
19775
|
+
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem" o "pixar_sassy") \u2014 la API lo rechaza con cualquier otro preset. Opciones: "pixar_3d" (default, look 3D de pel\xEDcula animada), "claymation" (plastilina stop-motion artesanal), "wes_anderson" (tableau sim\xE9trico pastel), "sci_fi" (futurista con HUDs y ne\xF3n), "realista" (fotorrealista, fiel al producto). Si el usuario pide un look animado sin nombrar el estilo, omite el campo.'),
|
|
19764
19776
|
durationSeconds: z82.union([
|
|
19765
19777
|
z82.literal(15),
|
|
19766
19778
|
z82.literal(30)
|
|
@@ -19772,7 +19784,7 @@ var CreateProductTaskInput = z82.object({
|
|
|
19772
19784
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El proveedor se elige internamente. Default: economy.'),
|
|
19773
19785
|
videoResolution: VideoResolutionEnum.optional().describe('Opcional. Resoluci\xF3n del render. En la web se pregunta "\xBFResoluci\xF3n del video?". "480p" = excelente calidad y m\xE1s econ\xF3mico (RECOMENDADO, default si se omite); "720p" = m\xE1xima nitidez, entre 3% y 15% m\xE1s caro seg\xFAn formato y tier. Si el usuario no menciona resoluci\xF3n, OMITE este campo (el backend usa 480p).'),
|
|
19774
19786
|
videoAngleCount: z82.number().int().min(1).max(3).optional().describe("Cantidad de videos a renderizar: 1, 2 o 3. REQUERIDO cuando outputs incluye video (o se omite outputs, cuyo default incluye video); om\xEDtelo s\xF3lo cuando no se generar\xE1 video. Preg\xFAntalo incluso con aiDecidesAll=true porque cambia el costo."),
|
|
19775
|
-
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "
|
|
19787
|
+
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "market" (narrativa an\xE1lisis de mercado: adapta el video a los patrones ganadores estudiados de la competencia; requiere competitorScanEnabled: true). angleNarratives[i] fuerza la narrativa del \xE1ngulo i; las posiciones restantes las elige la IA. La lista no puede superar videoAngleCount.'),
|
|
19776
19788
|
outputs: z82.array(z82.enum([
|
|
19777
19789
|
"landing",
|
|
19778
19790
|
"video",
|
|
@@ -19880,7 +19892,7 @@ var PendingActionPayload = z82.discriminatedUnion("kind", [
|
|
|
19880
19892
|
// an opaque HTTP 400 after the model already believed it had been saved.
|
|
19881
19893
|
features: z82.array(z82.string().min(1).max(MCP_REVIEW_FEATURE_ITEM_MAX)).max(10).optional(),
|
|
19882
19894
|
buyerPersona: z82.string().min(1).max(360).optional(),
|
|
19883
|
-
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline")
|
|
19895
|
+
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline") no est\xE1 disponible por ahora.'),
|
|
19884
19896
|
actor: z82.string().min(1).max(360).optional().describe("Nueva descripci\xF3n del presentador. Al enviarla sin actorId, se elimina autom\xE1ticamente cualquier actor guardado previo de esos \xE1ngulos."),
|
|
19885
19897
|
actorId: z82.string().max(120).nullable().optional(),
|
|
19886
19898
|
creativeDirection: z82.string().max(2e3).optional(),
|
|
@@ -19893,7 +19905,7 @@ var PendingActionPayload = z82.discriminatedUnion("kind", [
|
|
|
19893
19905
|
]).optional().describe("Elecci\xF3n expl\xEDcita: market usa el estudio disponible; guided usa la narrativa elegida para este \xE1ngulo."),
|
|
19894
19906
|
angle: z82.string().min(1).max(480).optional(),
|
|
19895
19907
|
buyerPersona: z82.string().min(1).max(360).optional(),
|
|
19896
|
-
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline")
|
|
19908
|
+
narrativeStyle: PublicNarrativeStyleEnum.optional().describe('Narrativa del video. "problem_product_cta" (Problema y Soluci\xF3n) funciona en ambos formatos \u2014 en Un solo clip abre sin producto y el producto entra por referencia en su beat. La familia storyteller ("animated_storyteller", "animated_inner_journey", "animated_object_soul", "animated_timeline") no est\xE1 disponible por ahora.'),
|
|
19897
19909
|
actor: z82.string().min(1).max(360).optional(),
|
|
19898
19910
|
actorId: z82.string().max(120).nullable().optional(),
|
|
19899
19911
|
creativeDirection: z82.string().max(2e3).optional()
|
|
@@ -19969,7 +19981,10 @@ var StatusForResolveSchema = z82.object({
|
|
|
19969
19981
|
"480p",
|
|
19970
19982
|
"720p"
|
|
19971
19983
|
]).optional(),
|
|
19972
|
-
|
|
19984
|
+
// READ from /v1/status: the canonical enum, not the public input policy.
|
|
19985
|
+
// A task created before a narrative was blocked/hidden must still parse,
|
|
19986
|
+
// or resolve_pending_action could never approve it.
|
|
19987
|
+
narrativeStyle: NarrativeStyle.optional(),
|
|
19973
19988
|
pauseForVideoScriptReview: z82.boolean().optional(),
|
|
19974
19989
|
pendingUserAction: z82.object({
|
|
19975
19990
|
kind: z82.string(),
|
|
@@ -21009,7 +21024,7 @@ var VideoCreativeSetup = z83.discriminatedUnion("mode", [
|
|
|
21009
21024
|
mode: z83.literal("guided"),
|
|
21010
21025
|
videoPreset: VideoPresetEnum.default("auto").describe('Narrativa opcional. Con estudio de mercado no la preguntes: se usa "auto" y el estudio define la estructura. Sin estudio conserva la elecci\xF3n del usuario. Todas las narrativas funcionan en Un solo clip y Multiescena.'),
|
|
21011
21026
|
buyerPersona: z83.string().trim().min(1).max(360),
|
|
21012
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
21027
|
+
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem" o "pixar_sassy") \u2014 la API lo rechaza con cualquier otro preset. Opciones: "pixar_3d" (default, look 3D de pel\xEDcula animada), "claymation" (plastilina stop-motion artesanal), "wes_anderson" (tableau sim\xE9trico pastel), "sci_fi" (futurista con HUDs y ne\xF3n), "realista" (fotorrealista, fiel al producto). Si el usuario pide un look animado sin nombrar el estilo, omite el campo.'),
|
|
21013
21028
|
presenter: VideoPresenter,
|
|
21014
21029
|
creativeDirection: z83.string().trim().min(1).max(500).nullable().describe("Direcci\xF3n visual elegida. null significa que el usuario deleg\xF3 expl\xEDcitamente esta decisi\xF3n.")
|
|
21015
21030
|
}).strict()
|
|
@@ -21028,7 +21043,7 @@ var VideoInput = z83.object({
|
|
|
21028
21043
|
]).describe('Relaci\xF3n de aspecto. "9:16" = vertical (TikTok/Reels \u2014 default recomendado para ads). "16:9" = horizontal (YouTube). "Auto" = decide la IA.'),
|
|
21029
21044
|
durationSeconds: z83.number().int().min(4).max(30).default(15).describe("Opcional. Duraci\xF3n objetivo: Un solo clip Econ\xF3mico o Medio usa 15s; Un solo clip Pro usa 15s o 30s; Multiescena usa 15s o 30s totales. La combinaci\xF3n de formato y calidad determina la ruta y el costo."),
|
|
21030
21045
|
videoAngleCount: z83.number().int().min(1).max(3).describe("Cantidad de videos a renderizar: 1, 2 o 3. Es una decisi\xF3n de costo obligatoria: preg\xFAntala incluso cuando creativeSetup.mode=automatic."),
|
|
21031
|
-
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "
|
|
21046
|
+
angleNarratives: PublicNarrativeStyleEnum.array().max(3).optional().describe('Opcional. Narrativa POR \xC1NGULO (posicional). Valores actuales: "review", "ugc_how_to", "ugc_unboxing_chaos", "problem_product_cta" (problema concreto, producto como soluci\xF3n y CTA), "product_showcase", "wearable_showcase", "cinematic", "wild_card", "animated_problem_pixar", "sassy_product_pixar", "market" (narrativa an\xE1lisis de mercado: adapta el video a los patrones ganadores estudiados de la competencia; requiere competitorScanEnabled: true). angleNarratives[i] fuerza la narrativa del \xE1ngulo i; las posiciones restantes las elige la IA. La lista no puede superar videoAngleCount.'),
|
|
21032
21047
|
creativeSetup: VideoCreativeSetup.describe("Configuraci\xF3n creativa obligatoria. En guided pregunta narrativa, p\xFAblico, presentador y direcci\xF3n antes de confirmar. Usa automatic s\xF3lo si el usuario deleg\xF3 todo expl\xEDcitamente."),
|
|
21033
21048
|
videoStructure: VideoStructureEnum.default("single_take").describe('Opcional. Formato: "single_take" = Un solo clip (generado completo; puede incluir cambios de plano) o "multi_scene" = Multiescena (varias tomas concatenadas). Default: single_take.'),
|
|
21034
21049
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El sistema elige el proveedor internamente. Default: economy.'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@productmaker/mcp",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "ProductMaker MCP server — cost products, generate landing pages, UGC videos, and ad creatives, and publish to Shopify, Meta Ads, and TikTok Ads.",
|