@productmaker/mcp 8.9.2 → 8.10.1
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 +77 -27
- package/dist/stdio.js +77 -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",
|
|
@@ -1316,6 +1328,19 @@ var AnchoredIntel = z9.object({
|
|
|
1316
1328
|
"market",
|
|
1317
1329
|
"guided"
|
|
1318
1330
|
]).optional(),
|
|
1331
|
+
/**
|
|
1332
|
+
* WHERE `narrativeSelection` came from: `create` = the seller chose it when
|
|
1333
|
+
* creating the task (positional `angleNarratives` or a concrete upfront
|
|
1334
|
+
* `videoPreset`), stamped by angles.worker; `review` = picked on the review
|
|
1335
|
+
* card. Two owner rules meet here: an explicit choice beats the market default
|
|
1336
|
+
* (prod 97352dac), and a blanket upfront preset must NOT block the winner
|
|
1337
|
+
* replica (2026-08-04) while a review-time pick does (#1807). The origin is
|
|
1338
|
+
* the only thing that tells them apart. Absent ⇒ legacy review decision.
|
|
1339
|
+
*/
|
|
1340
|
+
narrativeSelectionSource: z9.enum([
|
|
1341
|
+
"create",
|
|
1342
|
+
"review"
|
|
1343
|
+
]).optional(),
|
|
1319
1344
|
painPointIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
1320
1345
|
hookIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
1321
1346
|
claimIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
@@ -3580,6 +3605,14 @@ var CodeLandingProvenanceSchema = z21.object({
|
|
|
3580
3605
|
*/
|
|
3581
3606
|
budgetDroppedBlockIds: z21.array(z21.string().min(1).max(60)).max(16).optional(),
|
|
3582
3607
|
/**
|
|
3608
|
+
* Sections that EXHAUSTED CONTENT AUTHORING and were dropped, in the order
|
|
3609
|
+
* they failed. Only non-critical sections can land here (the pack selector,
|
|
3610
|
+
* sticky CTA and reviews pager still fail the page); the page shipped
|
|
3611
|
+
* degraded on purpose, and this is what makes that measurable instead of
|
|
3612
|
+
* silent. Absent when nothing was dropped — presence IS the signal.
|
|
3613
|
+
*/
|
|
3614
|
+
authoringDroppedBlockIds: z21.array(z21.string().min(1).max(60)).max(16).optional(),
|
|
3615
|
+
/**
|
|
3583
3616
|
* The budget loop gave up with the page STILL over its target.
|
|
3584
3617
|
*
|
|
3585
3618
|
* It can only shed what `OVERFLOW_DROP_ORDER` lists and never below the
|
|
@@ -3829,6 +3862,7 @@ var LandingPatchSchema = z21.object({
|
|
|
3829
3862
|
}
|
|
3830
3863
|
});
|
|
3831
3864
|
});
|
|
3865
|
+
var MAX_CODE_LANDING_ARTIFACT_ASSETS = 96;
|
|
3832
3866
|
var CodeLandingArtifactSchema = z21.object({
|
|
3833
3867
|
schemaVersion: z21.literal(CODE_LANDING_SCHEMA_VERSION),
|
|
3834
3868
|
runtimeVersion: z21.literal(CODE_LANDING_RUNTIME_VERSION),
|
|
@@ -3840,7 +3874,7 @@ var CodeLandingArtifactSchema = z21.object({
|
|
|
3840
3874
|
document: CodeLandingDocumentSchema,
|
|
3841
3875
|
blocks: z21.array(CodeLandingBlockSchema).min(1).max(32),
|
|
3842
3876
|
anchors: z21.array(CodeLandingAnchorSchema).min(1).max(64),
|
|
3843
|
-
assets: z21.array(CodeLandingAssetSchema).max(
|
|
3877
|
+
assets: z21.array(CodeLandingAssetSchema).max(MAX_CODE_LANDING_ARTIFACT_ASSETS),
|
|
3844
3878
|
components: z21.array(ComponentManifestEntrySchema).max(64),
|
|
3845
3879
|
interactions: z21.array(InteractionProgramSchema).max(64),
|
|
3846
3880
|
protectedBindings: z21.array(ProtectedBindingSchema).max(128),
|
|
@@ -3977,6 +4011,11 @@ var CreateLandingEditRequest = z21.union([
|
|
|
3977
4011
|
LegacyLandingEditRequest
|
|
3978
4012
|
]);
|
|
3979
4013
|
var CommerceReconciliationSchema = z21.object({
|
|
4014
|
+
/** Omission retains legacy checkout authority; document proof never enables purchase. */
|
|
4015
|
+
purpose: z21.enum([
|
|
4016
|
+
"checkout",
|
|
4017
|
+
"document"
|
|
4018
|
+
]).optional(),
|
|
3980
4019
|
state: z21.enum([
|
|
3981
4020
|
"pending",
|
|
3982
4021
|
"awaiting_external_fix",
|
|
@@ -3984,6 +4023,8 @@ var CommerceReconciliationSchema = z21.object({
|
|
|
3984
4023
|
"superseded"
|
|
3985
4024
|
]),
|
|
3986
4025
|
desiredRevision: z21.number().int().positive(),
|
|
4026
|
+
/** Guarded fence installation can serve a later cosmetic head of the same offer. */
|
|
4027
|
+
checkoutFenceRevision: z21.number().int().positive().optional(),
|
|
3987
4028
|
fingerprint: z21.string().min(1),
|
|
3988
4029
|
startedAt: z21.string().datetime(),
|
|
3989
4030
|
deadlineAt: z21.string().datetime(),
|
|
@@ -6275,7 +6316,8 @@ var TaskCreativeVariantVideoPreset = VideoPreset.exclude([
|
|
|
6275
6316
|
"ugc_curiosity_reveal",
|
|
6276
6317
|
"ugc_listicle_3",
|
|
6277
6318
|
"ugc_skeptic_confession",
|
|
6278
|
-
"metaphor_product"
|
|
6319
|
+
"metaphor_product",
|
|
6320
|
+
...BLOCKED_VIDEO_PRESETS
|
|
6279
6321
|
]);
|
|
6280
6322
|
var CreateTaskCreativeVariantBase = z33.object({
|
|
6281
6323
|
clientRequestId: z33.string().uuid(),
|
|
@@ -8839,6 +8881,13 @@ var DEFAULT_PRICING = {
|
|
|
8839
8881
|
ourCostCents: 1.7,
|
|
8840
8882
|
userPriceCents: 3.4
|
|
8841
8883
|
},
|
|
8884
|
+
// Native prompt condense: an LLM shortens the authored visuals of a take
|
|
8885
|
+
// whose prompt overflows the provider (up to five calls, only on overflow).
|
|
8886
|
+
// Unmeasured; priced like the final-simplify rewrite until prod data exists.
|
|
8887
|
+
"openrouter:video-prompt-condense": {
|
|
8888
|
+
ourCostCents: 1,
|
|
8889
|
+
userPriceCents: 2
|
|
8890
|
+
},
|
|
8842
8891
|
// For helper-recorded entries (`callOpenRouter`), `ourCostCents` here is
|
|
8843
8892
|
// only used when `usage.cost` is missing from the provider response —
|
|
8844
8893
|
// otherwise real cost wins via `overrideOurCostCents`. `userPriceCents` is
|
|
@@ -14342,7 +14391,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14342
14391
|
defineCapability(
|
|
14343
14392
|
"create_creative_variant",
|
|
14344
14393
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14345
|
-
|
|
14394
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14395
|
+
"3e02399a7785df328f1c4d63cfbb6d7481abaac9f91d4a5cf51d410e657d63aa",
|
|
14346
14396
|
"credit_consuming",
|
|
14347
14397
|
"creative",
|
|
14348
14398
|
[
|
|
@@ -14397,7 +14447,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14397
14447
|
// default). Recomputed from the real tools/list digest printer.
|
|
14398
14448
|
// + market study opt-in copy (#2005, competitorScanEnabled description).
|
|
14399
14449
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14400
|
-
|
|
14450
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14451
|
+
"d5f2fd2f2d3687ce41acac9b5c44bdf5a5c3d542cbfdafcf5759c35f9320140f",
|
|
14401
14452
|
"credit_consuming",
|
|
14402
14453
|
"creative",
|
|
14403
14454
|
[
|
|
@@ -14583,7 +14634,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14583
14634
|
], [
|
|
14584
14635
|
"task_draft"
|
|
14585
14636
|
]),
|
|
14586
|
-
defineCapability("estimate_creative_variant", "
|
|
14637
|
+
defineCapability("estimate_creative_variant", "d4453364c0706bf88f480cebc977916f06d222d7eebebc9cfa91165929a1a998", "none", "read_only", [
|
|
14587
14638
|
"read"
|
|
14588
14639
|
], [
|
|
14589
14640
|
slot("source_task", true, [
|
|
@@ -14915,7 +14966,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14915
14966
|
defineCapability(
|
|
14916
14967
|
"generate_video_creative",
|
|
14917
14968
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14918
|
-
|
|
14969
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14970
|
+
"932a153afe51975abe3b601530f17178ed8ddd56a6f8116877bc4caab4fc6a9d",
|
|
14919
14971
|
"credit_consuming",
|
|
14920
14972
|
"creative",
|
|
14921
14973
|
[
|
|
@@ -15358,7 +15410,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15358
15410
|
], [
|
|
15359
15411
|
"product_media"
|
|
15360
15412
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15361
|
-
defineCapability("regenerate_video_script", "
|
|
15413
|
+
defineCapability("regenerate_video_script", "eb9546e5cda3864de78ff119ae81dd17c893ea9ea5be1bf0fbfeb8b45302e639", "credit_consuming", "creative", [
|
|
15362
15414
|
"credit_consuming",
|
|
15363
15415
|
"state_change"
|
|
15364
15416
|
], [
|
|
@@ -15421,7 +15473,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15421
15473
|
], [
|
|
15422
15474
|
"media_upload_session"
|
|
15423
15475
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15424
|
-
defineCapability("resolve_pending_action", "
|
|
15476
|
+
defineCapability("resolve_pending_action", "9377ff126ec842cfb8278877846c5f8f6f1b9ba0c263e7200f080db9bbe9ae12", "credit_consuming", "creative", [
|
|
15425
15477
|
"credit_consuming",
|
|
15426
15478
|
"state_change"
|
|
15427
15479
|
], [
|
|
@@ -15942,7 +15994,10 @@ var MCP_DOWNSTREAM_CLIENT_VALUE = "mcp";
|
|
|
15942
15994
|
|
|
15943
15995
|
// ../../packages/types/src/mcp-surface.ts
|
|
15944
15996
|
var MCP_HIDDEN_NARRATIVE_STYLES = [
|
|
15945
|
-
"gap_replication"
|
|
15997
|
+
"gap_replication",
|
|
15998
|
+
// The blocked storyteller family is not offered, not even when revising an
|
|
15999
|
+
// existing script.
|
|
16000
|
+
...BLOCKED_NARRATIVE_STYLES
|
|
15946
16001
|
];
|
|
15947
16002
|
var McpNarrativeStyleSchema = NarrativeStyle.exclude(MCP_HIDDEN_NARRATIVE_STYLES);
|
|
15948
16003
|
var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
@@ -15956,10 +16011,6 @@ var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
|
15956
16011
|
"wild_card",
|
|
15957
16012
|
"animated_problem_pixar",
|
|
15958
16013
|
"sassy_product_pixar",
|
|
15959
|
-
"animated_storyteller",
|
|
15960
|
-
"animated_inner_journey",
|
|
15961
|
-
"animated_object_soul",
|
|
15962
|
-
"animated_timeline",
|
|
15963
16014
|
"market"
|
|
15964
16015
|
];
|
|
15965
16016
|
var McpAngleNarrativeStyleSchema = NarrativeStyle.extract(MCP_ANGLE_NARRATIVE_STYLES);
|
|
@@ -18930,7 +18981,7 @@ var ApiClient = class {
|
|
|
18930
18981
|
};
|
|
18931
18982
|
|
|
18932
18983
|
// src/index.ts
|
|
18933
|
-
var MCP_VERSION = "8.
|
|
18984
|
+
var MCP_VERSION = "8.10.1";
|
|
18934
18985
|
|
|
18935
18986
|
// src/meta-upload-app.ts
|
|
18936
18987
|
import { readFileSync } from "fs";
|
|
@@ -19579,11 +19630,7 @@ var VideoPresetEnum = VideoPreset.extract([
|
|
|
19579
19630
|
"cinematic",
|
|
19580
19631
|
"wild_card",
|
|
19581
19632
|
"pixar_problem",
|
|
19582
|
-
"pixar_sassy"
|
|
19583
|
-
"storyteller",
|
|
19584
|
-
"inner_journey",
|
|
19585
|
-
"object_soul",
|
|
19586
|
-
"timeline"
|
|
19633
|
+
"pixar_sassy"
|
|
19587
19634
|
]);
|
|
19588
19635
|
var VideoStructureEnum = VideoStructure;
|
|
19589
19636
|
var VideoQualityEnum = VideoQuality;
|
|
@@ -21374,8 +21421,8 @@ var CreateProductTaskInput = z83.object({
|
|
|
21374
21421
|
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
21422
|
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
21423
|
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"
|
|
21424
|
+
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.'),
|
|
21425
|
+
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
21426
|
durationSeconds: z83.union([
|
|
21380
21427
|
z83.literal(15),
|
|
21381
21428
|
z83.literal(30)
|
|
@@ -21387,7 +21434,7 @@ var CreateProductTaskInput = z83.object({
|
|
|
21387
21434
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El proveedor se elige internamente. Default: economy.'),
|
|
21388
21435
|
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
21436
|
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", "
|
|
21437
|
+
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
21438
|
outputs: z83.array(z83.enum([
|
|
21392
21439
|
"landing",
|
|
21393
21440
|
"video",
|
|
@@ -21495,7 +21542,7 @@ var PendingActionPayload = z83.discriminatedUnion("kind", [
|
|
|
21495
21542
|
// an opaque HTTP 400 after the model already believed it had been saved.
|
|
21496
21543
|
features: z83.array(z83.string().min(1).max(MCP_REVIEW_FEATURE_ITEM_MAX)).max(10).optional(),
|
|
21497
21544
|
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")
|
|
21545
|
+
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
21546
|
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
21547
|
actorId: z83.string().max(120).nullable().optional(),
|
|
21501
21548
|
creativeDirection: z83.string().max(2e3).optional(),
|
|
@@ -21508,7 +21555,7 @@ var PendingActionPayload = z83.discriminatedUnion("kind", [
|
|
|
21508
21555
|
]).optional().describe("Elecci\xF3n expl\xEDcita: market usa el estudio disponible; guided usa la narrativa elegida para este \xE1ngulo."),
|
|
21509
21556
|
angle: z83.string().min(1).max(480).optional(),
|
|
21510
21557
|
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")
|
|
21558
|
+
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
21559
|
actor: z83.string().min(1).max(360).optional(),
|
|
21513
21560
|
actorId: z83.string().max(120).nullable().optional(),
|
|
21514
21561
|
creativeDirection: z83.string().max(2e3).optional()
|
|
@@ -21584,7 +21631,10 @@ var StatusForResolveSchema = z83.object({
|
|
|
21584
21631
|
"480p",
|
|
21585
21632
|
"720p"
|
|
21586
21633
|
]).optional(),
|
|
21587
|
-
|
|
21634
|
+
// READ from /v1/status: the canonical enum, not the public input policy.
|
|
21635
|
+
// A task created before a narrative was blocked/hidden must still parse,
|
|
21636
|
+
// or resolve_pending_action could never approve it.
|
|
21637
|
+
narrativeStyle: NarrativeStyle.optional(),
|
|
21588
21638
|
pauseForVideoScriptReview: z83.boolean().optional(),
|
|
21589
21639
|
pendingUserAction: z83.object({
|
|
21590
21640
|
kind: z83.string(),
|
|
@@ -22624,7 +22674,7 @@ var VideoCreativeSetup = z84.discriminatedUnion("mode", [
|
|
|
22624
22674
|
mode: z84.literal("guided"),
|
|
22625
22675
|
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
22676
|
buyerPersona: z84.string().trim().min(1).max(360),
|
|
22627
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
22677
|
+
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
22678
|
presenter: VideoPresenter,
|
|
22629
22679
|
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
22680
|
}).strict()
|
|
@@ -22643,7 +22693,7 @@ var VideoInput = z84.object({
|
|
|
22643
22693
|
]).describe('Relaci\xF3n de aspecto. "9:16" = vertical (TikTok/Reels \u2014 default recomendado para ads). "16:9" = horizontal (YouTube). "Auto" = decide la IA.'),
|
|
22644
22694
|
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
22695
|
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", "
|
|
22696
|
+
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
22697
|
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
22698
|
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
22699
|
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",
|
|
@@ -1338,6 +1350,19 @@ var AnchoredIntel = z9.object({
|
|
|
1338
1350
|
"market",
|
|
1339
1351
|
"guided"
|
|
1340
1352
|
]).optional(),
|
|
1353
|
+
/**
|
|
1354
|
+
* WHERE `narrativeSelection` came from: `create` = the seller chose it when
|
|
1355
|
+
* creating the task (positional `angleNarratives` or a concrete upfront
|
|
1356
|
+
* `videoPreset`), stamped by angles.worker; `review` = picked on the review
|
|
1357
|
+
* card. Two owner rules meet here: an explicit choice beats the market default
|
|
1358
|
+
* (prod 97352dac), and a blanket upfront preset must NOT block the winner
|
|
1359
|
+
* replica (2026-08-04) while a review-time pick does (#1807). The origin is
|
|
1360
|
+
* the only thing that tells them apart. Absent ⇒ legacy review decision.
|
|
1361
|
+
*/
|
|
1362
|
+
narrativeSelectionSource: z9.enum([
|
|
1363
|
+
"create",
|
|
1364
|
+
"review"
|
|
1365
|
+
]).optional(),
|
|
1341
1366
|
painPointIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
1342
1367
|
hookIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
1343
1368
|
claimIndices: z9.array(z9.number().int().nonnegative()).max(10),
|
|
@@ -3602,6 +3627,14 @@ var CodeLandingProvenanceSchema = z21.object({
|
|
|
3602
3627
|
*/
|
|
3603
3628
|
budgetDroppedBlockIds: z21.array(z21.string().min(1).max(60)).max(16).optional(),
|
|
3604
3629
|
/**
|
|
3630
|
+
* Sections that EXHAUSTED CONTENT AUTHORING and were dropped, in the order
|
|
3631
|
+
* they failed. Only non-critical sections can land here (the pack selector,
|
|
3632
|
+
* sticky CTA and reviews pager still fail the page); the page shipped
|
|
3633
|
+
* degraded on purpose, and this is what makes that measurable instead of
|
|
3634
|
+
* silent. Absent when nothing was dropped — presence IS the signal.
|
|
3635
|
+
*/
|
|
3636
|
+
authoringDroppedBlockIds: z21.array(z21.string().min(1).max(60)).max(16).optional(),
|
|
3637
|
+
/**
|
|
3605
3638
|
* The budget loop gave up with the page STILL over its target.
|
|
3606
3639
|
*
|
|
3607
3640
|
* It can only shed what `OVERFLOW_DROP_ORDER` lists and never below the
|
|
@@ -3851,6 +3884,7 @@ var LandingPatchSchema = z21.object({
|
|
|
3851
3884
|
}
|
|
3852
3885
|
});
|
|
3853
3886
|
});
|
|
3887
|
+
var MAX_CODE_LANDING_ARTIFACT_ASSETS = 96;
|
|
3854
3888
|
var CodeLandingArtifactSchema = z21.object({
|
|
3855
3889
|
schemaVersion: z21.literal(CODE_LANDING_SCHEMA_VERSION),
|
|
3856
3890
|
runtimeVersion: z21.literal(CODE_LANDING_RUNTIME_VERSION),
|
|
@@ -3862,7 +3896,7 @@ var CodeLandingArtifactSchema = z21.object({
|
|
|
3862
3896
|
document: CodeLandingDocumentSchema,
|
|
3863
3897
|
blocks: z21.array(CodeLandingBlockSchema).min(1).max(32),
|
|
3864
3898
|
anchors: z21.array(CodeLandingAnchorSchema).min(1).max(64),
|
|
3865
|
-
assets: z21.array(CodeLandingAssetSchema).max(
|
|
3899
|
+
assets: z21.array(CodeLandingAssetSchema).max(MAX_CODE_LANDING_ARTIFACT_ASSETS),
|
|
3866
3900
|
components: z21.array(ComponentManifestEntrySchema).max(64),
|
|
3867
3901
|
interactions: z21.array(InteractionProgramSchema).max(64),
|
|
3868
3902
|
protectedBindings: z21.array(ProtectedBindingSchema).max(128),
|
|
@@ -3999,6 +4033,11 @@ var CreateLandingEditRequest = z21.union([
|
|
|
3999
4033
|
LegacyLandingEditRequest
|
|
4000
4034
|
]);
|
|
4001
4035
|
var CommerceReconciliationSchema = z21.object({
|
|
4036
|
+
/** Omission retains legacy checkout authority; document proof never enables purchase. */
|
|
4037
|
+
purpose: z21.enum([
|
|
4038
|
+
"checkout",
|
|
4039
|
+
"document"
|
|
4040
|
+
]).optional(),
|
|
4002
4041
|
state: z21.enum([
|
|
4003
4042
|
"pending",
|
|
4004
4043
|
"awaiting_external_fix",
|
|
@@ -4006,6 +4045,8 @@ var CommerceReconciliationSchema = z21.object({
|
|
|
4006
4045
|
"superseded"
|
|
4007
4046
|
]),
|
|
4008
4047
|
desiredRevision: z21.number().int().positive(),
|
|
4048
|
+
/** Guarded fence installation can serve a later cosmetic head of the same offer. */
|
|
4049
|
+
checkoutFenceRevision: z21.number().int().positive().optional(),
|
|
4009
4050
|
fingerprint: z21.string().min(1),
|
|
4010
4051
|
startedAt: z21.string().datetime(),
|
|
4011
4052
|
deadlineAt: z21.string().datetime(),
|
|
@@ -6297,7 +6338,8 @@ var TaskCreativeVariantVideoPreset = VideoPreset.exclude([
|
|
|
6297
6338
|
"ugc_curiosity_reveal",
|
|
6298
6339
|
"ugc_listicle_3",
|
|
6299
6340
|
"ugc_skeptic_confession",
|
|
6300
|
-
"metaphor_product"
|
|
6341
|
+
"metaphor_product",
|
|
6342
|
+
...BLOCKED_VIDEO_PRESETS
|
|
6301
6343
|
]);
|
|
6302
6344
|
var CreateTaskCreativeVariantBase = z33.object({
|
|
6303
6345
|
clientRequestId: z33.string().uuid(),
|
|
@@ -8861,6 +8903,13 @@ var DEFAULT_PRICING = {
|
|
|
8861
8903
|
ourCostCents: 1.7,
|
|
8862
8904
|
userPriceCents: 3.4
|
|
8863
8905
|
},
|
|
8906
|
+
// Native prompt condense: an LLM shortens the authored visuals of a take
|
|
8907
|
+
// whose prompt overflows the provider (up to five calls, only on overflow).
|
|
8908
|
+
// Unmeasured; priced like the final-simplify rewrite until prod data exists.
|
|
8909
|
+
"openrouter:video-prompt-condense": {
|
|
8910
|
+
ourCostCents: 1,
|
|
8911
|
+
userPriceCents: 2
|
|
8912
|
+
},
|
|
8864
8913
|
// For helper-recorded entries (`callOpenRouter`), `ourCostCents` here is
|
|
8865
8914
|
// only used when `usage.cost` is missing from the provider response —
|
|
8866
8915
|
// otherwise real cost wins via `overrideOurCostCents`. `userPriceCents` is
|
|
@@ -14364,7 +14413,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14364
14413
|
defineCapability(
|
|
14365
14414
|
"create_creative_variant",
|
|
14366
14415
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14367
|
-
|
|
14416
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14417
|
+
"3e02399a7785df328f1c4d63cfbb6d7481abaac9f91d4a5cf51d410e657d63aa",
|
|
14368
14418
|
"credit_consuming",
|
|
14369
14419
|
"creative",
|
|
14370
14420
|
[
|
|
@@ -14419,7 +14469,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14419
14469
|
// default). Recomputed from the real tools/list digest printer.
|
|
14420
14470
|
// + market study opt-in copy (#2005, competitorScanEnabled description).
|
|
14421
14471
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14422
|
-
|
|
14472
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14473
|
+
"d5f2fd2f2d3687ce41acac9b5c44bdf5a5c3d542cbfdafcf5759c35f9320140f",
|
|
14423
14474
|
"credit_consuming",
|
|
14424
14475
|
"creative",
|
|
14425
14476
|
[
|
|
@@ -14605,7 +14656,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14605
14656
|
], [
|
|
14606
14657
|
"task_draft"
|
|
14607
14658
|
]),
|
|
14608
|
-
defineCapability("estimate_creative_variant", "
|
|
14659
|
+
defineCapability("estimate_creative_variant", "d4453364c0706bf88f480cebc977916f06d222d7eebebc9cfa91165929a1a998", "none", "read_only", [
|
|
14609
14660
|
"read"
|
|
14610
14661
|
], [
|
|
14611
14662
|
slot("source_task", true, [
|
|
@@ -14937,7 +14988,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
14937
14988
|
defineCapability(
|
|
14938
14989
|
"generate_video_creative",
|
|
14939
14990
|
// MCP 8.6.0: + storyteller narrative family and animationStyle axis.
|
|
14940
|
-
|
|
14991
|
+
// MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
|
|
14992
|
+
"932a153afe51975abe3b601530f17178ed8ddd56a6f8116877bc4caab4fc6a9d",
|
|
14941
14993
|
"credit_consuming",
|
|
14942
14994
|
"creative",
|
|
14943
14995
|
[
|
|
@@ -15380,7 +15432,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15380
15432
|
], [
|
|
15381
15433
|
"product_media"
|
|
15382
15434
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15383
|
-
defineCapability("regenerate_video_script", "
|
|
15435
|
+
defineCapability("regenerate_video_script", "eb9546e5cda3864de78ff119ae81dd17c893ea9ea5be1bf0fbfeb8b45302e639", "credit_consuming", "creative", [
|
|
15384
15436
|
"credit_consuming",
|
|
15385
15437
|
"state_change"
|
|
15386
15438
|
], [
|
|
@@ -15443,7 +15495,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
15443
15495
|
], [
|
|
15444
15496
|
"media_upload_session"
|
|
15445
15497
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
15446
|
-
defineCapability("resolve_pending_action", "
|
|
15498
|
+
defineCapability("resolve_pending_action", "9377ff126ec842cfb8278877846c5f8f6f1b9ba0c263e7200f080db9bbe9ae12", "credit_consuming", "creative", [
|
|
15447
15499
|
"credit_consuming",
|
|
15448
15500
|
"state_change"
|
|
15449
15501
|
], [
|
|
@@ -15957,7 +16009,10 @@ var MCP_DOWNSTREAM_CLIENT_VALUE = "mcp";
|
|
|
15957
16009
|
|
|
15958
16010
|
// ../../packages/types/src/mcp-surface.ts
|
|
15959
16011
|
var MCP_HIDDEN_NARRATIVE_STYLES = [
|
|
15960
|
-
"gap_replication"
|
|
16012
|
+
"gap_replication",
|
|
16013
|
+
// The blocked storyteller family is not offered, not even when revising an
|
|
16014
|
+
// existing script.
|
|
16015
|
+
...BLOCKED_NARRATIVE_STYLES
|
|
15961
16016
|
];
|
|
15962
16017
|
var McpNarrativeStyleSchema = NarrativeStyle.exclude(MCP_HIDDEN_NARRATIVE_STYLES);
|
|
15963
16018
|
var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
@@ -15971,10 +16026,6 @@ var MCP_ANGLE_NARRATIVE_STYLES = [
|
|
|
15971
16026
|
"wild_card",
|
|
15972
16027
|
"animated_problem_pixar",
|
|
15973
16028
|
"sassy_product_pixar",
|
|
15974
|
-
"animated_storyteller",
|
|
15975
|
-
"animated_inner_journey",
|
|
15976
|
-
"animated_object_soul",
|
|
15977
|
-
"animated_timeline",
|
|
15978
16029
|
"market"
|
|
15979
16030
|
];
|
|
15980
16031
|
var McpAngleNarrativeStyleSchema = NarrativeStyle.extract(MCP_ANGLE_NARRATIVE_STYLES);
|
|
@@ -17262,7 +17313,7 @@ var ApiClient = class {
|
|
|
17262
17313
|
};
|
|
17263
17314
|
|
|
17264
17315
|
// src/index.ts
|
|
17265
|
-
var MCP_VERSION = "8.
|
|
17316
|
+
var MCP_VERSION = "8.10.1";
|
|
17266
17317
|
|
|
17267
17318
|
// src/meta-upload-app.ts
|
|
17268
17319
|
import { readFileSync } from "fs";
|
|
@@ -17911,11 +17962,7 @@ var VideoPresetEnum = VideoPreset.extract([
|
|
|
17911
17962
|
"cinematic",
|
|
17912
17963
|
"wild_card",
|
|
17913
17964
|
"pixar_problem",
|
|
17914
|
-
"pixar_sassy"
|
|
17915
|
-
"storyteller",
|
|
17916
|
-
"inner_journey",
|
|
17917
|
-
"object_soul",
|
|
17918
|
-
"timeline"
|
|
17965
|
+
"pixar_sassy"
|
|
17919
17966
|
]);
|
|
17920
17967
|
var VideoStructureEnum = VideoStructure;
|
|
17921
17968
|
var VideoQualityEnum = VideoQuality;
|
|
@@ -19759,8 +19806,8 @@ var CreateProductTaskInput = z82.object({
|
|
|
19759
19806
|
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
19807
|
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
19808
|
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"
|
|
19809
|
+
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.'),
|
|
19810
|
+
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
19811
|
durationSeconds: z82.union([
|
|
19765
19812
|
z82.literal(15),
|
|
19766
19813
|
z82.literal(30)
|
|
@@ -19772,7 +19819,7 @@ var CreateProductTaskInput = z82.object({
|
|
|
19772
19819
|
videoQuality: VideoQualityEnum.default("economy").describe('Opcional. Calidad: "economy" = Econ\xF3mico, "medium" = Medio o "pro" = Pro. El proveedor se elige internamente. Default: economy.'),
|
|
19773
19820
|
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
19821
|
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", "
|
|
19822
|
+
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
19823
|
outputs: z82.array(z82.enum([
|
|
19777
19824
|
"landing",
|
|
19778
19825
|
"video",
|
|
@@ -19880,7 +19927,7 @@ var PendingActionPayload = z82.discriminatedUnion("kind", [
|
|
|
19880
19927
|
// an opaque HTTP 400 after the model already believed it had been saved.
|
|
19881
19928
|
features: z82.array(z82.string().min(1).max(MCP_REVIEW_FEATURE_ITEM_MAX)).max(10).optional(),
|
|
19882
19929
|
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")
|
|
19930
|
+
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
19931
|
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
19932
|
actorId: z82.string().max(120).nullable().optional(),
|
|
19886
19933
|
creativeDirection: z82.string().max(2e3).optional(),
|
|
@@ -19893,7 +19940,7 @@ var PendingActionPayload = z82.discriminatedUnion("kind", [
|
|
|
19893
19940
|
]).optional().describe("Elecci\xF3n expl\xEDcita: market usa el estudio disponible; guided usa la narrativa elegida para este \xE1ngulo."),
|
|
19894
19941
|
angle: z82.string().min(1).max(480).optional(),
|
|
19895
19942
|
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")
|
|
19943
|
+
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
19944
|
actor: z82.string().min(1).max(360).optional(),
|
|
19898
19945
|
actorId: z82.string().max(120).nullable().optional(),
|
|
19899
19946
|
creativeDirection: z82.string().max(2e3).optional()
|
|
@@ -19969,7 +20016,10 @@ var StatusForResolveSchema = z82.object({
|
|
|
19969
20016
|
"480p",
|
|
19970
20017
|
"720p"
|
|
19971
20018
|
]).optional(),
|
|
19972
|
-
|
|
20019
|
+
// READ from /v1/status: the canonical enum, not the public input policy.
|
|
20020
|
+
// A task created before a narrative was blocked/hidden must still parse,
|
|
20021
|
+
// or resolve_pending_action could never approve it.
|
|
20022
|
+
narrativeStyle: NarrativeStyle.optional(),
|
|
19973
20023
|
pauseForVideoScriptReview: z82.boolean().optional(),
|
|
19974
20024
|
pendingUserAction: z82.object({
|
|
19975
20025
|
kind: z82.string(),
|
|
@@ -21009,7 +21059,7 @@ var VideoCreativeSetup = z83.discriminatedUnion("mode", [
|
|
|
21009
21059
|
mode: z83.literal("guided"),
|
|
21010
21060
|
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
21061
|
buyerPersona: z83.string().trim().min(1).max(360),
|
|
21012
|
-
animationStyle: AnimationStyleEnum.optional().describe('Opcional. Estilo visual SOLO para presets animados ("pixar_problem"
|
|
21062
|
+
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
21063
|
presenter: VideoPresenter,
|
|
21014
21064
|
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
21065
|
}).strict()
|
|
@@ -21028,7 +21078,7 @@ var VideoInput = z83.object({
|
|
|
21028
21078
|
]).describe('Relaci\xF3n de aspecto. "9:16" = vertical (TikTok/Reels \u2014 default recomendado para ads). "16:9" = horizontal (YouTube). "Auto" = decide la IA.'),
|
|
21029
21079
|
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
21080
|
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", "
|
|
21081
|
+
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
21082
|
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
21083
|
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
21084
|
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.1",
|
|
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.",
|