@productmaker/mcp 12.0.0 → 12.0.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 CHANGED
@@ -309,6 +309,12 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
309
309
 
310
310
  ## Version history
311
311
 
312
+ ### 12.0.1 — Service output recovery
313
+
314
+ Internal motion output admission isolates artifacts by claim, accepts paired
315
+ upload ordering and preserves historical output URLs. Complete upload targets
316
+ and full-refund-aware settlement protect delivery without MCP contract changes.
317
+
312
318
  ### 12.0.0 — Ready service required for new service content
313
319
 
314
320
  - New Motion Graphics videos require an owned ready Service (`brandId`) before
package/dist/http.js CHANGED
@@ -16373,6 +16373,8 @@ var motionGraphicsStateSchema = z86.object({
16373
16373
  stage: MotionGraphicsStageSchema,
16374
16374
  /** How many times an agent has taken this job. */
16375
16375
  claims: z86.number().int().nonnegative(),
16376
+ /** Upload admission binds all outputs to this claim; absent on legacy jobs. */
16377
+ outputAttempt: z86.number().int().positive().optional(),
16376
16378
  /** Until when the current claim holds. Null while queued. */
16377
16379
  leaseUntil: z86.string().datetime().nullable(),
16378
16380
  /** When the job first entered the queue: the age that decides "nobody is coming". */
@@ -16395,8 +16397,7 @@ var motionGraphicsStateSchema = z86.object({
16395
16397
  /**
16396
16398
  * Where the live preview (a screenshot of the site taken during research)
16397
16399
  * was signed for upload. Recorded when the upload is signed, because it
16398
- * arrives long before `done` writes `outputs`. Fixed by the task id
16399
- * (`motionGraphicsOutputKey(taskId, "preview")`).
16400
+ * arrives long before `done` writes `outputs`. New admissions isolate it by claim.
16400
16401
  */
16401
16402
  previewKey: z86.string().min(1).optional(),
16402
16403
  outputs: MotionGraphicsOutputsSchema.optional(),
@@ -16515,6 +16516,8 @@ var MotionGraphicsExistingClipSchema = z87.object({
16515
16516
  }
16516
16517
  });
16517
16518
  var MotionGraphicsJobSchema = z87.object({
16519
+ /** Protocol 7: delivery settlement follows the accepted hook prefix. */
16520
+ deliveryUsageVersion: z87.literal("v1").optional(),
16518
16521
  soundtrackVersion: z87.literal("v1").optional(),
16519
16522
  speechRecoveryVersion: z87.literal("v1").optional(),
16520
16523
  freeDirectionVersion: z87.literal(MOTION_GRAPHICS_FREE_DIRECTION_VERSION).optional(),
@@ -16704,6 +16707,12 @@ var MotionGraphicsUploadResponseSchema = z87.object({
16704
16707
  contentType: z87.string()
16705
16708
  }))
16706
16709
  });
16710
+ var MotionGraphicsDeliveryUsageSchema = z87.object({
16711
+ variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1),
16712
+ clipsUsed: z87.number().int().min(0).max(MOTION_GRAPHICS_BROLL_MAX_CLIPS).optional(),
16713
+ lipsyncUsed: z87.number().int().min(0).max(MOTION_GRAPHICS_LIPSYNC_MAX_CLIPS).optional(),
16714
+ voUsed: z87.boolean().optional()
16715
+ }).strict();
16707
16716
  var MotionGraphicsDoneRequestSchema = z87.object({
16708
16717
  musicUsed: z87.boolean().optional(),
16709
16718
  cleanVariants: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional(),
@@ -16736,8 +16745,77 @@ var MotionGraphicsDoneRequestSchema = z87.object({
16736
16745
  * EXTRA hook versions uploaded and delivered (0..2; the main video is not
16737
16746
  * counted). Each paid version beyond it is refunded. Absent reads as 0.
16738
16747
  */
16739
- variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional()
16740
- }).strict();
16748
+ variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional(),
16749
+ usageByVariantCount: z87.array(MotionGraphicsDeliveryUsageSchema).min(1).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX).optional()
16750
+ }).strict().superRefine((request, ctx) => {
16751
+ const usage = request.usageByVariantCount;
16752
+ if (!usage) return;
16753
+ if (usage.length !== (request.variantsDelivered ?? 0) + 1) {
16754
+ ctx.addIssue({
16755
+ code: z87.ZodIssueCode.custom,
16756
+ path: [
16757
+ "usageByVariantCount"
16758
+ ],
16759
+ message: "Usage must cover every delivered hook prefix"
16760
+ });
16761
+ }
16762
+ for (const [index, entry] of usage.entries()) {
16763
+ if (entry.variantsDelivered !== index) {
16764
+ ctx.addIssue({
16765
+ code: z87.ZodIssueCode.custom,
16766
+ path: [
16767
+ "usageByVariantCount",
16768
+ index,
16769
+ "variantsDelivered"
16770
+ ],
16771
+ message: "Usage prefixes must be contiguous and ordered"
16772
+ });
16773
+ }
16774
+ const previous = usage[index - 1];
16775
+ for (const field of [
16776
+ "clipsUsed",
16777
+ "lipsyncUsed",
16778
+ "voUsed"
16779
+ ]) {
16780
+ const value = entry[field];
16781
+ const aggregate = request[field];
16782
+ if (value === void 0 !== (aggregate === void 0) || index === usage.length - 1 && value !== aggregate) {
16783
+ ctx.addIssue({
16784
+ code: z87.ZodIssueCode.custom,
16785
+ path: [
16786
+ "usageByVariantCount",
16787
+ index,
16788
+ field
16789
+ ],
16790
+ message: "Usage must preserve aggregate field presence and final totals"
16791
+ });
16792
+ }
16793
+ const before = previous?.[field];
16794
+ if (before !== void 0 && value !== void 0 && Number(value) < Number(before)) {
16795
+ ctx.addIssue({
16796
+ code: z87.ZodIssueCode.custom,
16797
+ path: [
16798
+ "usageByVariantCount",
16799
+ index,
16800
+ field
16801
+ ],
16802
+ message: "Usage cannot decrease when a hook is added"
16803
+ });
16804
+ }
16805
+ }
16806
+ if (entry.clipsUsed !== void 0 && entry.lipsyncUsed !== void 0 && entry.lipsyncUsed > entry.clipsUsed) {
16807
+ ctx.addIssue({
16808
+ code: z87.ZodIssueCode.custom,
16809
+ path: [
16810
+ "usageByVariantCount",
16811
+ index,
16812
+ "lipsyncUsed"
16813
+ ],
16814
+ message: "Lip sync usage cannot exceed clip usage"
16815
+ });
16816
+ }
16817
+ }
16818
+ });
16741
16819
  var MotionGraphicsClipSubmitRequestSchema = z87.object({
16742
16820
  attempt: MotionGraphicsAttemptSchema,
16743
16821
  clips: MotionGraphicsClipRequestSchema.shape.clips
@@ -25510,7 +25588,7 @@ var ApiClient = class {
25510
25588
  };
25511
25589
 
25512
25590
  // src/index.ts
25513
- var MCP_VERSION = "12.0.0";
25591
+ var MCP_VERSION = "12.0.1";
25514
25592
 
25515
25593
  // src/meta-upload-app.ts
25516
25594
  import { readFileSync } from "fs";
package/dist/stdio.js CHANGED
@@ -16148,6 +16148,8 @@ var motionGraphicsStateSchema = z86.object({
16148
16148
  stage: MotionGraphicsStageSchema,
16149
16149
  /** How many times an agent has taken this job. */
16150
16150
  claims: z86.number().int().nonnegative(),
16151
+ /** Upload admission binds all outputs to this claim; absent on legacy jobs. */
16152
+ outputAttempt: z86.number().int().positive().optional(),
16151
16153
  /** Until when the current claim holds. Null while queued. */
16152
16154
  leaseUntil: z86.string().datetime().nullable(),
16153
16155
  /** When the job first entered the queue: the age that decides "nobody is coming". */
@@ -16170,8 +16172,7 @@ var motionGraphicsStateSchema = z86.object({
16170
16172
  /**
16171
16173
  * Where the live preview (a screenshot of the site taken during research)
16172
16174
  * was signed for upload. Recorded when the upload is signed, because it
16173
- * arrives long before `done` writes `outputs`. Fixed by the task id
16174
- * (`motionGraphicsOutputKey(taskId, "preview")`).
16175
+ * arrives long before `done` writes `outputs`. New admissions isolate it by claim.
16175
16176
  */
16176
16177
  previewKey: z86.string().min(1).optional(),
16177
16178
  outputs: MotionGraphicsOutputsSchema.optional(),
@@ -16290,6 +16291,8 @@ var MotionGraphicsExistingClipSchema = z87.object({
16290
16291
  }
16291
16292
  });
16292
16293
  var MotionGraphicsJobSchema = z87.object({
16294
+ /** Protocol 7: delivery settlement follows the accepted hook prefix. */
16295
+ deliveryUsageVersion: z87.literal("v1").optional(),
16293
16296
  soundtrackVersion: z87.literal("v1").optional(),
16294
16297
  speechRecoveryVersion: z87.literal("v1").optional(),
16295
16298
  freeDirectionVersion: z87.literal(MOTION_GRAPHICS_FREE_DIRECTION_VERSION).optional(),
@@ -16479,6 +16482,12 @@ var MotionGraphicsUploadResponseSchema = z87.object({
16479
16482
  contentType: z87.string()
16480
16483
  }))
16481
16484
  });
16485
+ var MotionGraphicsDeliveryUsageSchema = z87.object({
16486
+ variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1),
16487
+ clipsUsed: z87.number().int().min(0).max(MOTION_GRAPHICS_BROLL_MAX_CLIPS).optional(),
16488
+ lipsyncUsed: z87.number().int().min(0).max(MOTION_GRAPHICS_LIPSYNC_MAX_CLIPS).optional(),
16489
+ voUsed: z87.boolean().optional()
16490
+ }).strict();
16482
16491
  var MotionGraphicsDoneRequestSchema = z87.object({
16483
16492
  musicUsed: z87.boolean().optional(),
16484
16493
  cleanVariants: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional(),
@@ -16511,8 +16520,77 @@ var MotionGraphicsDoneRequestSchema = z87.object({
16511
16520
  * EXTRA hook versions uploaded and delivered (0..2; the main video is not
16512
16521
  * counted). Each paid version beyond it is refunded. Absent reads as 0.
16513
16522
  */
16514
- variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional()
16515
- }).strict();
16523
+ variantsDelivered: z87.number().int().min(0).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX - 1).optional(),
16524
+ usageByVariantCount: z87.array(MotionGraphicsDeliveryUsageSchema).min(1).max(MOTION_GRAPHICS_HOOK_VARIANTS_MAX).optional()
16525
+ }).strict().superRefine((request, ctx) => {
16526
+ const usage = request.usageByVariantCount;
16527
+ if (!usage) return;
16528
+ if (usage.length !== (request.variantsDelivered ?? 0) + 1) {
16529
+ ctx.addIssue({
16530
+ code: z87.ZodIssueCode.custom,
16531
+ path: [
16532
+ "usageByVariantCount"
16533
+ ],
16534
+ message: "Usage must cover every delivered hook prefix"
16535
+ });
16536
+ }
16537
+ for (const [index, entry] of usage.entries()) {
16538
+ if (entry.variantsDelivered !== index) {
16539
+ ctx.addIssue({
16540
+ code: z87.ZodIssueCode.custom,
16541
+ path: [
16542
+ "usageByVariantCount",
16543
+ index,
16544
+ "variantsDelivered"
16545
+ ],
16546
+ message: "Usage prefixes must be contiguous and ordered"
16547
+ });
16548
+ }
16549
+ const previous = usage[index - 1];
16550
+ for (const field of [
16551
+ "clipsUsed",
16552
+ "lipsyncUsed",
16553
+ "voUsed"
16554
+ ]) {
16555
+ const value = entry[field];
16556
+ const aggregate = request[field];
16557
+ if (value === void 0 !== (aggregate === void 0) || index === usage.length - 1 && value !== aggregate) {
16558
+ ctx.addIssue({
16559
+ code: z87.ZodIssueCode.custom,
16560
+ path: [
16561
+ "usageByVariantCount",
16562
+ index,
16563
+ field
16564
+ ],
16565
+ message: "Usage must preserve aggregate field presence and final totals"
16566
+ });
16567
+ }
16568
+ const before = previous?.[field];
16569
+ if (before !== void 0 && value !== void 0 && Number(value) < Number(before)) {
16570
+ ctx.addIssue({
16571
+ code: z87.ZodIssueCode.custom,
16572
+ path: [
16573
+ "usageByVariantCount",
16574
+ index,
16575
+ field
16576
+ ],
16577
+ message: "Usage cannot decrease when a hook is added"
16578
+ });
16579
+ }
16580
+ }
16581
+ if (entry.clipsUsed !== void 0 && entry.lipsyncUsed !== void 0 && entry.lipsyncUsed > entry.clipsUsed) {
16582
+ ctx.addIssue({
16583
+ code: z87.ZodIssueCode.custom,
16584
+ path: [
16585
+ "usageByVariantCount",
16586
+ index,
16587
+ "lipsyncUsed"
16588
+ ],
16589
+ message: "Lip sync usage cannot exceed clip usage"
16590
+ });
16591
+ }
16592
+ }
16593
+ });
16516
16594
  var MotionGraphicsClipSubmitRequestSchema = z87.object({
16517
16595
  attempt: MotionGraphicsAttemptSchema,
16518
16596
  clips: MotionGraphicsClipRequestSchema.shape.clips
@@ -23839,7 +23917,7 @@ var ApiClient = class {
23839
23917
  };
23840
23918
 
23841
23919
  // src/index.ts
23842
- var MCP_VERSION = "12.0.0";
23920
+ var MCP_VERSION = "12.0.1";
23843
23921
 
23844
23922
  // src/meta-upload-app.ts
23845
23923
  import { readFileSync } from "fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@productmaker/mcp",
3
- "version": "12.0.0",
3
+ "version": "12.0.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.",