vidspotai-shared 1.0.100 → 1.0.101-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/lib/globals/aiModels/enums.d.ts +1 -0
  2. package/lib/globals/aiModels/enums.d.ts.map +1 -1
  3. package/lib/globals/aiModels/enums.js +3 -0
  4. package/lib/globals/aiModels/extendCapability.d.ts +26 -0
  5. package/lib/globals/aiModels/extendCapability.d.ts.map +1 -0
  6. package/lib/globals/aiModels/extendCapability.js +42 -0
  7. package/lib/globals/aiModels/index.d.ts +1 -0
  8. package/lib/globals/aiModels/index.d.ts.map +1 -1
  9. package/lib/globals/aiModels/index.js +1 -0
  10. package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
  11. package/lib/globals/aiModels/providers/google.js +6 -9
  12. package/lib/globals/aiModels/providers/hostedAvatars.js +10 -10
  13. package/lib/globals/creditUnit.d.ts +20 -33
  14. package/lib/globals/creditUnit.d.ts.map +1 -1
  15. package/lib/globals/creditUnit.js +20 -33
  16. package/lib/globals/types.d.ts +34 -2
  17. package/lib/globals/types.d.ts.map +1 -1
  18. package/lib/globals/types.js +37 -0
  19. package/lib/models/demoVideoProject.model.d.ts +213 -0
  20. package/lib/models/demoVideoProject.model.d.ts.map +1 -1
  21. package/lib/models/index.d.ts +2 -0
  22. package/lib/models/index.d.ts.map +1 -1
  23. package/lib/models/index.js +2 -0
  24. package/lib/models/mediaUpload.model.d.ts +25 -0
  25. package/lib/models/mediaUpload.model.d.ts.map +1 -1
  26. package/lib/models/productConnection.model.d.ts +57 -0
  27. package/lib/models/productConnection.model.d.ts.map +1 -0
  28. package/lib/models/productConnection.model.js +7 -0
  29. package/lib/models/video.model.d.ts +11 -0
  30. package/lib/models/video.model.d.ts.map +1 -1
  31. package/lib/models/videoQaJob.model.d.ts +61 -0
  32. package/lib/models/videoQaJob.model.d.ts.map +1 -0
  33. package/lib/models/videoQaJob.model.js +16 -0
  34. package/lib/schemas/brandKit.schema.d.ts +3 -1
  35. package/lib/schemas/brandKit.schema.d.ts.map +1 -1
  36. package/lib/schemas/brandKit.schema.js +9 -0
  37. package/lib/schemas/brief.schema.d.ts +5 -4
  38. package/lib/schemas/brief.schema.d.ts.map +1 -1
  39. package/lib/schemas/brief.schema.js +23 -1
  40. package/lib/schemas/demoQuestion.schema.d.ts +24 -4
  41. package/lib/schemas/demoQuestion.schema.d.ts.map +1 -1
  42. package/lib/schemas/demoQuestion.schema.js +8 -2
  43. package/lib/schemas/demoSpec.schema.d.ts +40 -6
  44. package/lib/schemas/demoSpec.schema.d.ts.map +1 -1
  45. package/lib/schemas/demoSpec.schema.js +46 -1
  46. package/lib/schemas/project.schema.d.ts +33 -3
  47. package/lib/schemas/project.schema.d.ts.map +1 -1
  48. package/lib/schemas/project.schema.js +22 -0
  49. package/lib/schemas/social.schema.d.ts +1 -1
  50. package/lib/schemas/videoPlan.schema.d.ts +22 -20
  51. package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
  52. package/lib/schemas/videoPlan.schema.js +19 -0
  53. package/lib/services/agent/editClassifier.d.ts +10 -10
  54. package/lib/services/agent/eval/types.d.ts +3 -2
  55. package/lib/services/agent/eval/types.d.ts.map +1 -1
  56. package/lib/services/agent/executor/core.d.ts.map +1 -1
  57. package/lib/services/agent/executor/core.js +11 -0
  58. package/lib/services/agent/planner/Planner.d.ts.map +1 -1
  59. package/lib/services/agent/planner/Planner.js +5 -0
  60. package/lib/services/agent/planner/overlayRegen.d.ts.map +1 -1
  61. package/lib/services/agent/planner/overlayRegen.js +5 -0
  62. package/lib/services/agent/planner/plannerMessages.d.ts.map +1 -1
  63. package/lib/services/agent/planner/plannerMessages.js +10 -1
  64. package/lib/services/agent/planner/scriptFirstPlanner.d.ts.map +1 -1
  65. package/lib/services/agent/planner/scriptFirstPlanner.js +2 -0
  66. package/lib/services/agent/regenCore.d.ts.map +1 -1
  67. package/lib/services/agent/regenCore.js +11 -1
  68. package/lib/services/agent/runHelpers.d.ts +8 -0
  69. package/lib/services/agent/runHelpers.d.ts.map +1 -1
  70. package/lib/services/agent/runHelpers.js +5 -1
  71. package/lib/services/agent/tools/chapterOutline.tool.d.ts +8 -0
  72. package/lib/services/agent/tools/chapterOutline.tool.d.ts.map +1 -1
  73. package/lib/services/agent/tools/chapterOutline.tool.js +21 -8
  74. package/lib/services/agent/tools/composeScene.tool.d.ts +32 -2
  75. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
  76. package/lib/services/agent/tools/estimateCost.tool.d.ts +11 -1
  77. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
  78. package/lib/services/agent/tools/extendVideo.tool.d.ts +9 -3
  79. package/lib/services/agent/tools/extendVideo.tool.d.ts.map +1 -1
  80. package/lib/services/agent/tools/extendVideo.tool.js +12 -27
  81. package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +1 -1
  82. package/lib/services/agent/tools/generateScript.tool.d.ts +3 -2
  83. package/lib/services/agent/tools/generateScript.tool.d.ts.map +1 -1
  84. package/lib/services/agent/tools/generateScript.tool.js +16 -7
  85. package/lib/services/agent/tools/generateVoiceover.tool.d.ts +1 -1
  86. package/lib/services/agent/tools/planVideo.tool.d.ts +11 -8
  87. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
  88. package/lib/services/agent/tools/render.tool.d.ts +11 -1
  89. package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
  90. package/lib/services/agent/tools/searchStock.tool.d.ts +1 -1
  91. package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +4 -4
  92. package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +0 -6
  93. package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
  94. package/lib/services/aiGen/providers/alibaba/alibaba.js +5 -103
  95. package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
  96. package/lib/services/aiGen/providers/bytedance/bytedance.service.js +1 -9
  97. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  98. package/lib/services/aiGen/providers/google/google.service.js +26 -142
  99. package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -1
  100. package/lib/services/aiGen/providers/google/googleErrors.js +7 -17
  101. package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
  102. package/lib/services/aiGen/providers/kling/kling.service.js +22 -3
  103. package/lib/services/aiGen/providers/kling/klingStatus.d.ts +7 -0
  104. package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -1
  105. package/lib/services/aiGen/providers/kling/klingStatus.js +41 -4
  106. package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
  107. package/lib/services/aiGen/providers/pixverse/pixverse.service.js +25 -0
  108. package/lib/services/aiGen/providers/types.d.ts +20 -0
  109. package/lib/services/aiGen/providers/types.d.ts.map +1 -1
  110. package/lib/services/avatarGen/avatarProviderFactory.d.ts.map +1 -1
  111. package/lib/services/avatarGen/avatarProviderFactory.js +3 -0
  112. package/lib/services/avatarGen/index.d.ts +1 -0
  113. package/lib/services/avatarGen/index.d.ts.map +1 -1
  114. package/lib/services/avatarGen/index.js +1 -0
  115. package/lib/services/avatarGen/providers/synthesiaAvatarProvider.d.ts +53 -0
  116. package/lib/services/avatarGen/providers/synthesiaAvatarProvider.d.ts.map +1 -0
  117. package/lib/services/avatarGen/providers/synthesiaAvatarProvider.js +176 -0
  118. package/lib/services/demo/demoAuthor.d.ts +7 -0
  119. package/lib/services/demo/demoAuthor.d.ts.map +1 -1
  120. package/lib/services/demo/demoAuthor.js +2 -0
  121. package/lib/services/demo/demoAuthorPrompt.d.ts +6 -0
  122. package/lib/services/demo/demoAuthorPrompt.d.ts.map +1 -1
  123. package/lib/services/demo/demoAuthorPrompt.js +24 -2
  124. package/lib/services/demo/demoCaptions.d.ts +69 -0
  125. package/lib/services/demo/demoCaptions.d.ts.map +1 -0
  126. package/lib/services/demo/demoCaptions.js +152 -0
  127. package/lib/services/demo/demoMusic.d.ts +8 -1
  128. package/lib/services/demo/demoMusic.d.ts.map +1 -1
  129. package/lib/services/demo/demoMusic.js +32 -16
  130. package/lib/services/demo/demoScriptPrompt.d.ts +2 -1
  131. package/lib/services/demo/demoScriptPrompt.d.ts.map +1 -1
  132. package/lib/services/demo/demoScriptPrompt.js +29 -2
  133. package/lib/services/demo/demoStockAssets.d.ts +29 -0
  134. package/lib/services/demo/demoStockAssets.d.ts.map +1 -0
  135. package/lib/services/demo/demoStockAssets.js +107 -0
  136. package/lib/services/demo/index.d.ts +3 -0
  137. package/lib/services/demo/index.d.ts.map +1 -1
  138. package/lib/services/demo/index.js +3 -0
  139. package/lib/services/demo/productConnection.service.d.ts +78 -0
  140. package/lib/services/demo/productConnection.service.d.ts.map +1 -0
  141. package/lib/services/demo/productConnection.service.js +125 -0
  142. package/lib/services/editor/planToProject.d.ts.map +1 -1
  143. package/lib/services/editor/planToProject.helpers.d.ts +1 -0
  144. package/lib/services/editor/planToProject.helpers.d.ts.map +1 -1
  145. package/lib/services/editor/planToProject.helpers.js +3 -0
  146. package/lib/services/editor/planToProject.js +39 -0
  147. package/lib/services/editor/projectToDesign.js +13 -1
  148. package/lib/services/firestore.service.d.ts +14 -0
  149. package/lib/services/firestore.service.d.ts.map +1 -1
  150. package/lib/services/firestore.service.js +16 -0
  151. package/lib/services/translation/index.d.ts +1 -0
  152. package/lib/services/translation/index.d.ts.map +1 -1
  153. package/lib/services/translation/index.js +8 -1
  154. package/lib/services/translation/outputLanguage.d.ts +75 -0
  155. package/lib/services/translation/outputLanguage.d.ts.map +1 -0
  156. package/lib/services/translation/outputLanguage.js +190 -0
  157. package/lib/services/translation/translation.service.d.ts +13 -2
  158. package/lib/services/translation/translation.service.d.ts.map +1 -1
  159. package/lib/services/translation/translation.service.js +73 -31
  160. package/lib/services/tts/index.d.ts +1 -0
  161. package/lib/services/tts/index.d.ts.map +1 -1
  162. package/lib/services/tts/index.js +1 -0
  163. package/lib/services/tts/providers/elevenlabs.service.d.ts +7 -0
  164. package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
  165. package/lib/services/tts/providers/elevenlabs.service.js +69 -13
  166. package/lib/services/tts/types.d.ts +29 -0
  167. package/lib/services/tts/types.d.ts.map +1 -1
  168. package/lib/services/tts/wordTimings.d.ts +27 -0
  169. package/lib/services/tts/wordTimings.d.ts.map +1 -0
  170. package/lib/services/tts/wordTimings.js +57 -0
  171. package/lib/utils/billableDuration.d.ts +11 -0
  172. package/lib/utils/billableDuration.d.ts.map +1 -0
  173. package/lib/utils/billableDuration.js +91 -0
  174. package/lib/utils/index.d.ts +3 -0
  175. package/lib/utils/index.d.ts.map +1 -1
  176. package/lib/utils/index.js +3 -0
  177. package/lib/utils/mp4Duration.d.ts +38 -0
  178. package/lib/utils/mp4Duration.d.ts.map +1 -0
  179. package/lib/utils/mp4Duration.js +164 -0
  180. package/lib/utils/socialEntitlements.d.ts +51 -0
  181. package/lib/utils/socialEntitlements.d.ts.map +1 -0
  182. package/lib/utils/socialEntitlements.js +65 -0
  183. package/package.json +1 -1
@@ -84,8 +84,8 @@ export declare const TransitionKindSchema: z.ZodEnum<{
84
84
  * - label: in-frame label for an object or person (anchored to frame area)
85
85
  */
86
86
  export declare const TextRoleSchema: z.ZodEnum<{
87
- body: "body";
88
87
  watermark: "watermark";
88
+ body: "body";
89
89
  cta: "cta";
90
90
  headline: "headline";
91
91
  subheadline: "subheadline";
@@ -93,8 +93,8 @@ export declare const TextRoleSchema: z.ZodEnum<{
93
93
  label: "label";
94
94
  }>;
95
95
  export declare const TextPositionSchema: z.ZodEnum<{
96
- center: "center";
97
96
  top: "top";
97
+ center: "center";
98
98
  "top-left": "top-left";
99
99
  "top-right": "top-right";
100
100
  "top-banner": "top-banner";
@@ -106,8 +106,8 @@ export declare const TextPositionSchema: z.ZodEnum<{
106
106
  "caption-strip": "caption-strip";
107
107
  }>;
108
108
  export declare const TextAnimationSchema: z.ZodEnum<{
109
- type: "type";
110
109
  pop: "pop";
110
+ type: "type";
111
111
  none: "none";
112
112
  fade: "fade";
113
113
  "slide-up": "slide-up";
@@ -138,8 +138,8 @@ export declare const TextBgStyleSchema: z.ZodEnum<{
138
138
  export declare const TextOverlaySchema: z.ZodObject<{
139
139
  text: z.ZodString;
140
140
  role: z.ZodEnum<{
141
- body: "body";
142
141
  watermark: "watermark";
142
+ body: "body";
143
143
  cta: "cta";
144
144
  headline: "headline";
145
145
  subheadline: "subheadline";
@@ -147,8 +147,8 @@ export declare const TextOverlaySchema: z.ZodObject<{
147
147
  label: "label";
148
148
  }>;
149
149
  position: z.ZodOptional<z.ZodEnum<{
150
- center: "center";
151
150
  top: "top";
151
+ center: "center";
152
152
  "top-left": "top-left";
153
153
  "top-right": "top-right";
154
154
  "top-banner": "top-banner";
@@ -167,10 +167,10 @@ export declare const TextOverlaySchema: z.ZodObject<{
167
167
  fontSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
168
168
  sizePct: z.ZodOptional<z.ZodNumber>;
169
169
  weight: z.ZodOptional<z.ZodEnum<{
170
- regular: "regular";
171
170
  bold: "bold";
172
- black: "black";
173
171
  medium: "medium";
172
+ regular: "regular";
173
+ black: "black";
174
174
  }>>;
175
175
  color: z.ZodOptional<z.ZodString>;
176
176
  bgColor: z.ZodOptional<z.ZodString>;
@@ -182,8 +182,8 @@ export declare const TextOverlaySchema: z.ZodObject<{
182
182
  outline: "outline";
183
183
  }>>;
184
184
  animation: z.ZodOptional<z.ZodEnum<{
185
- type: "type";
186
185
  pop: "pop";
186
+ type: "type";
187
187
  none: "none";
188
188
  fade: "fade";
189
189
  "slide-up": "slide-up";
@@ -322,8 +322,8 @@ export declare const PlannedSceneSchema: z.ZodObject<{
322
322
  overlays: z.ZodOptional<z.ZodArray<z.ZodObject<{
323
323
  text: z.ZodString;
324
324
  role: z.ZodEnum<{
325
- body: "body";
326
325
  watermark: "watermark";
326
+ body: "body";
327
327
  cta: "cta";
328
328
  headline: "headline";
329
329
  subheadline: "subheadline";
@@ -331,8 +331,8 @@ export declare const PlannedSceneSchema: z.ZodObject<{
331
331
  label: "label";
332
332
  }>;
333
333
  position: z.ZodOptional<z.ZodEnum<{
334
- center: "center";
335
334
  top: "top";
335
+ center: "center";
336
336
  "top-left": "top-left";
337
337
  "top-right": "top-right";
338
338
  "top-banner": "top-banner";
@@ -351,10 +351,10 @@ export declare const PlannedSceneSchema: z.ZodObject<{
351
351
  fontSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
352
352
  sizePct: z.ZodOptional<z.ZodNumber>;
353
353
  weight: z.ZodOptional<z.ZodEnum<{
354
- regular: "regular";
355
354
  bold: "bold";
356
- black: "black";
357
355
  medium: "medium";
356
+ regular: "regular";
357
+ black: "black";
358
358
  }>>;
359
359
  color: z.ZodOptional<z.ZodString>;
360
360
  bgColor: z.ZodOptional<z.ZodString>;
@@ -366,8 +366,8 @@ export declare const PlannedSceneSchema: z.ZodObject<{
366
366
  outline: "outline";
367
367
  }>>;
368
368
  animation: z.ZodOptional<z.ZodEnum<{
369
- type: "type";
370
369
  pop: "pop";
370
+ type: "type";
371
371
  none: "none";
372
372
  fade: "fade";
373
373
  "slide-up": "slide-up";
@@ -427,8 +427,8 @@ export declare const PlannedSceneSchema: z.ZodObject<{
427
427
  broll: z.ZodOptional<z.ZodArray<z.ZodObject<{
428
428
  assetUrl: z.ZodString;
429
429
  kind: z.ZodDefault<z.ZodEnum<{
430
- image: "image";
431
430
  video: "video";
431
+ image: "image";
432
432
  }>>;
433
433
  startMs: z.ZodDefault<z.ZodNumber>;
434
434
  durationMs: z.ZodOptional<z.ZodNumber>;
@@ -557,8 +557,8 @@ export declare const VideoPlanSchema: z.ZodObject<{
557
557
  overlays: z.ZodOptional<z.ZodArray<z.ZodObject<{
558
558
  text: z.ZodString;
559
559
  role: z.ZodEnum<{
560
- body: "body";
561
560
  watermark: "watermark";
561
+ body: "body";
562
562
  cta: "cta";
563
563
  headline: "headline";
564
564
  subheadline: "subheadline";
@@ -566,8 +566,8 @@ export declare const VideoPlanSchema: z.ZodObject<{
566
566
  label: "label";
567
567
  }>;
568
568
  position: z.ZodOptional<z.ZodEnum<{
569
- center: "center";
570
569
  top: "top";
570
+ center: "center";
571
571
  "top-left": "top-left";
572
572
  "top-right": "top-right";
573
573
  "top-banner": "top-banner";
@@ -586,10 +586,10 @@ export declare const VideoPlanSchema: z.ZodObject<{
586
586
  fontSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
587
587
  sizePct: z.ZodOptional<z.ZodNumber>;
588
588
  weight: z.ZodOptional<z.ZodEnum<{
589
- regular: "regular";
590
589
  bold: "bold";
591
- black: "black";
592
590
  medium: "medium";
591
+ regular: "regular";
592
+ black: "black";
593
593
  }>>;
594
594
  color: z.ZodOptional<z.ZodString>;
595
595
  bgColor: z.ZodOptional<z.ZodString>;
@@ -601,8 +601,8 @@ export declare const VideoPlanSchema: z.ZodObject<{
601
601
  outline: "outline";
602
602
  }>>;
603
603
  animation: z.ZodOptional<z.ZodEnum<{
604
- type: "type";
605
604
  pop: "pop";
605
+ type: "type";
606
606
  none: "none";
607
607
  fade: "fade";
608
608
  "slide-up": "slide-up";
@@ -662,8 +662,8 @@ export declare const VideoPlanSchema: z.ZodObject<{
662
662
  broll: z.ZodOptional<z.ZodArray<z.ZodObject<{
663
663
  assetUrl: z.ZodString;
664
664
  kind: z.ZodDefault<z.ZodEnum<{
665
- image: "image";
666
665
  video: "video";
666
+ image: "image";
667
667
  }>>;
668
668
  startMs: z.ZodDefault<z.ZodNumber>;
669
669
  durationMs: z.ZodOptional<z.ZodNumber>;
@@ -699,7 +699,9 @@ export declare const VideoPlanSchema: z.ZodObject<{
699
699
  }, z.core.$strip>>;
700
700
  voiceId: z.ZodOptional<z.ZodString>;
701
701
  voiceStyle: z.ZodOptional<z.ZodString>;
702
+ outputLanguage: z.ZodOptional<z.ZodString>;
702
703
  notes: z.ZodOptional<z.ZodString>;
704
+ brandLogoUrl: z.ZodOptional<z.ZodString>;
703
705
  captionStyle: z.ZodOptional<z.ZodObject<{
704
706
  fontFamily: z.ZodOptional<z.ZodString>;
705
707
  fontSize: z.ZodOptional<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"videoPlan.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/videoPlan.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"videoPlan.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/videoPlan.schema.ts"],"names":[],"mappings":"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"}
@@ -550,8 +550,27 @@ exports.VideoPlanSchema = zod_1.z.object({
550
550
  * into every consumer — executor validates at use-time.
551
551
  */
552
552
  voiceStyle: zod_1.z.string().optional(),
553
+ /**
554
+ * Language of the viewer-facing text in this plan (voiceoverLine,
555
+ * onScreenText, overlays, title). ISO 639-1 / "zh-cn". ORCHESTRATOR-ONLY:
556
+ * stamped from `brief.outputLanguage` post-parse, not filled by the LLM.
557
+ *
558
+ * The executor forwards it to TTS as `languageCode` and to caption ASR as a
559
+ * decode hint, so the spoken audio and the burned-in captions agree with the
560
+ * script instead of each independently guessing. Absent = English.
561
+ */
562
+ outputLanguage: zod_1.z.string().optional(),
553
563
  /** Free-form planner notes — e.g. why a particular tier mix was chosen. */
554
564
  notes: zod_1.z.string().optional(),
565
+ /**
566
+ * Reach per-recipient enrichment — URL of a brand logo to pin as a small
567
+ * corner overlay across the whole video ("product-aware" personalization).
568
+ * ORCHESTRATOR-ONLY: the planner LLM must NOT set this; the outreach fan-out
569
+ * injects the recipient's `logoUrl` post-plan (see resolvePlaceholdersDeep /
570
+ * outreachCampaignProcessor). When present, planToProject emits a contained
571
+ * logo ImageClip on the dedicated logo track. Absent → no logo overlay.
572
+ */
573
+ brandLogoUrl: zod_1.z.string().url().optional(),
555
574
  /**
556
575
  * CH-8 — caption styling applied to every CaptionClip at planToProject time.
557
576
  * Set by the chat `change_caption_style` tool; absent → renderer defaults
@@ -40,8 +40,8 @@ export declare const TextEditSchema: z.ZodObject<{
40
40
  overlaysByScene: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
41
41
  text: z.ZodString;
42
42
  role: z.ZodEnum<{
43
- body: "body";
44
43
  watermark: "watermark";
44
+ body: "body";
45
45
  cta: "cta";
46
46
  headline: "headline";
47
47
  subheadline: "subheadline";
@@ -49,8 +49,8 @@ export declare const TextEditSchema: z.ZodObject<{
49
49
  label: "label";
50
50
  }>;
51
51
  position: z.ZodOptional<z.ZodEnum<{
52
- center: "center";
53
52
  top: "top";
53
+ center: "center";
54
54
  "top-left": "top-left";
55
55
  "top-right": "top-right";
56
56
  "top-banner": "top-banner";
@@ -69,10 +69,10 @@ export declare const TextEditSchema: z.ZodObject<{
69
69
  fontSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
70
70
  sizePct: z.ZodOptional<z.ZodNumber>;
71
71
  weight: z.ZodOptional<z.ZodEnum<{
72
- regular: "regular";
73
72
  bold: "bold";
74
- black: "black";
75
73
  medium: "medium";
74
+ regular: "regular";
75
+ black: "black";
76
76
  }>>;
77
77
  color: z.ZodOptional<z.ZodString>;
78
78
  bgColor: z.ZodOptional<z.ZodString>;
@@ -84,8 +84,8 @@ export declare const TextEditSchema: z.ZodObject<{
84
84
  outline: "outline";
85
85
  }>>;
86
86
  animation: z.ZodOptional<z.ZodEnum<{
87
- type: "type";
88
87
  pop: "pop";
88
+ type: "type";
89
89
  none: "none";
90
90
  fade: "fade";
91
91
  "slide-up": "slide-up";
@@ -143,8 +143,8 @@ export declare const EditRequestSchema: z.ZodObject<{
143
143
  overlaysByScene: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
144
144
  text: z.ZodString;
145
145
  role: z.ZodEnum<{
146
- body: "body";
147
146
  watermark: "watermark";
147
+ body: "body";
148
148
  cta: "cta";
149
149
  headline: "headline";
150
150
  subheadline: "subheadline";
@@ -152,8 +152,8 @@ export declare const EditRequestSchema: z.ZodObject<{
152
152
  label: "label";
153
153
  }>;
154
154
  position: z.ZodOptional<z.ZodEnum<{
155
- center: "center";
156
155
  top: "top";
156
+ center: "center";
157
157
  "top-left": "top-left";
158
158
  "top-right": "top-right";
159
159
  "top-banner": "top-banner";
@@ -172,10 +172,10 @@ export declare const EditRequestSchema: z.ZodObject<{
172
172
  fontSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
173
173
  sizePct: z.ZodOptional<z.ZodNumber>;
174
174
  weight: z.ZodOptional<z.ZodEnum<{
175
- regular: "regular";
176
175
  bold: "bold";
177
- black: "black";
178
176
  medium: "medium";
177
+ regular: "regular";
178
+ black: "black";
179
179
  }>>;
180
180
  color: z.ZodOptional<z.ZodString>;
181
181
  bgColor: z.ZodOptional<z.ZodString>;
@@ -187,8 +187,8 @@ export declare const EditRequestSchema: z.ZodObject<{
187
187
  outline: "outline";
188
188
  }>>;
189
189
  animation: z.ZodOptional<z.ZodEnum<{
190
- type: "type";
191
190
  pop: "pop";
191
+ type: "type";
192
192
  none: "none";
193
193
  fade: "fade";
194
194
  "slide-up": "slide-up";
@@ -63,8 +63,8 @@ export declare const EvalBriefSchema: z.ZodObject<{
63
63
  "voiceover-only": "voiceover-only";
64
64
  }>>;
65
65
  pacing: z.ZodOptional<z.ZodEnum<{
66
- medium: "medium";
67
66
  fast: "fast";
67
+ medium: "medium";
68
68
  slow: "slow";
69
69
  "very-fast": "very-fast";
70
70
  }>>;
@@ -83,6 +83,7 @@ export declare const EvalBriefSchema: z.ZodObject<{
83
83
  L2: "L2";
84
84
  L3: "L3";
85
85
  }>>;
86
+ outputLanguage: z.ZodOptional<z.ZodString>;
86
87
  voice: z.ZodOptional<z.ZodObject<{
87
88
  gender: z.ZodOptional<z.ZodEnum<{
88
89
  male: "male";
@@ -97,7 +98,7 @@ export declare const EvalBriefSchema: z.ZodObject<{
97
98
  senior: "senior";
98
99
  }>>;
99
100
  accent: z.ZodOptional<z.ZodString>;
100
- language: z.ZodDefault<z.ZodString>;
101
+ language: z.ZodOptional<z.ZodString>;
101
102
  voiceId: z.ZodOptional<z.ZodString>;
102
103
  style: z.ZodOptional<z.ZodEnum<{
103
104
  energetic: "energetic";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;GAUG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB;;;;;;;iBAQ3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAY9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAQ1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;GAUG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB;;;;;;;iBAQ3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAY9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAQ1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAA6B,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAczE,OAAO,EAAE,eAAe,EAAa,YAAY,EAAE,MAAM,SAAS,CAAC;AAInE;;;;;;;;;;;GAWG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAsB;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAkC;IAEhE;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc,CAAC,CAGrB;gBAEU,IAAI,GAAE,eAAoB;IAiBtC;;;OAGG;YACW,eAAe;IAY7B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;;OAKG;YACW,0BAA0B;IAiBxC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;YACW,aAAa;IAe3B,iEAAiE;IACjE,OAAO,CAAC,UAAU;IAcZ,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA4EvD,QAAQ;CA+GvB"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAA6B,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAezE,OAAO,EAAE,eAAe,EAAa,YAAY,EAAE,MAAM,SAAS,CAAC;AAInE;;;;;;;;;;;GAWG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAsB;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAkC;IAEhE;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc,CAAC,CAGrB;gBAEU,IAAI,GAAE,eAAoB;IAiBtC;;;OAGG;YACW,eAAe;IAY7B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;;OAKG;YACW,0BAA0B;IAiBxC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;YACW,aAAa;IAe3B,iEAAiE;IACjE,OAAO,CAAC,UAAU;IAcZ,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA4EvD,QAAQ;CAyHvB"}
@@ -7,6 +7,7 @@ const ttsDuration_1 = require("../ttsDuration");
7
7
  const providerTaskCache_1 = require("../providerTaskCache");
8
8
  const voice_1 = require("./voice");
9
9
  const visual_1 = require("./visual");
10
+ const outputLanguage_1 = require("../../translation/outputLanguage");
10
11
  const repair_1 = require("../repair");
11
12
  /**
12
13
  * Executor — turns an approved VideoPlan into per-scene asset results.
@@ -265,6 +266,16 @@ class Executor {
265
266
  const sanitized = (0, voice_1.sanitizeVoiceId)(plan.voiceId);
266
267
  if (sanitized)
267
268
  voInput.voiceId = sanitized;
269
+ // Tell ElevenLabs which language the line is in rather than letting it
270
+ // auto-detect. Auto-detect is decent on a full paragraph but unreliable
271
+ // on the 4-9 word lines a short scene carries, where a Spanish line can
272
+ // get read with an English phoneme set. Omitted for English so the
273
+ // default path is byte-identical to before; the provider also retries
274
+ // without the code if it rejects an unsupported one
275
+ // (elevenlabs.service.ts:107-120).
276
+ if (!(0, outputLanguage_1.isEnglish)(plan.outputLanguage)) {
277
+ voInput.languageCode = plan.outputLanguage;
278
+ }
268
279
  const voOutcome = await this.runTool("generate_voiceover", voInput, { ...sceneCtx, idempotencyKey: `${idempotencyKey}:vo` });
269
280
  if (voOutcome.ok) {
270
281
  voiceoverAudioBase64 = voOutcome.output.audioBase64;
@@ -1 +1 @@
1
- {"version":3,"file":"Planner.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/Planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAoB,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,SAAS,EAEV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAkB7C;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,OAAO;IAIN,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,IAAI,EAAE,cAAc;IAK3C,IAAI,CACR,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACvC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAChC;;;;;;WAMG;QACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAC9B,GACL,OAAO,CAAC,SAAS,CAAC;IAoRrB;;;;;;;;;;;OAWG;IACH,UAAU,CACR,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACvC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;KAC5B,GACL;QAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;KAAE;IAqEhE;;;;;;;;;;;;;;;;OAgBG;IACG,0BAA0B,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAChC,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,0EAA0E;QAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB,GACL,OAAO,CAAC,WAAW,EAAE,CAAC;CAQ1B"}
1
+ {"version":3,"file":"Planner.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/Planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAoB,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,SAAS,EAEV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAkB7C;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,OAAO;IAIN,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,IAAI,EAAE,cAAc;IAK3C,IAAI,CACR,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACvC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAChC;;;;;;WAMG;QACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAC9B,GACL,OAAO,CAAC,SAAS,CAAC;IAyRrB;;;;;;;;;;;OAWG;IACH,UAAU,CACR,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACvC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;KAC5B,GACL;QAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;KAAE;IAqEhE;;;;;;;;;;;;;;;;OAgBG;IACG,0BAA0B,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAChC,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,0EAA0E;QAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB,GACL,OAAO,CAAC,WAAW,EAAE,CAAC;CAQ1B"}
@@ -244,6 +244,11 @@ class Planner {
244
244
  // "female-young-adult-excited". That triggers the executor's strip-and-
245
245
  // warn on every regen of the same trace, so kill it here once.
246
246
  reparsed.data.voiceId = brief.voice?.voiceId;
247
+ // Output language flows brief → plan deterministically, same as
248
+ // voiceId/voiceStyle. The executor reads it off the plan to set the
249
+ // TTS language and the caption ASR hint, so it must survive even when
250
+ // the LLM omits it (it's marked ORCHESTRATOR-ONLY in the schema).
251
+ reparsed.data.outputLanguage = brief.outputLanguage;
247
252
  // Soft-validation pass: vo-clip (if we downgraded after maxRetries)
248
253
  // + trailing-silence. These ship with the plan; the UI surfaces them.
249
254
  reparsed.data.warnings = (0, validators_1.collectPlanWarnings)(reparsed.data);
@@ -1 +1 @@
1
- {"version":3,"file":"overlayRegen.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/overlayRegen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EAGZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK7C,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IACJ,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,WAAW,EAAE,CAAC,CAwIxB"}
1
+ {"version":3,"file":"overlayRegen.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/overlayRegen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EAGZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IACJ,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,WAAW,EAAE,CAAC,CA4IxB"}
@@ -6,6 +6,7 @@ const videoPlan_schema_1 = require("../../../schemas/videoPlan.schema");
6
6
  const personas_1 = require("../personas");
7
7
  const promptSections_1 = require("./promptSections");
8
8
  const overlaySanity_1 = require("./overlaySanity");
9
+ const outputLanguage_1 = require("../../translation/outputLanguage");
9
10
  /**
10
11
  * Stage 6 slice 4 — focused overlay regeneration for a single scene. The
11
12
  * full `plan()` path is too expensive (and too lossy) for "I just want
@@ -71,6 +72,10 @@ async function regenerateOverlaysForScene(deps, scene, brief, opts = {}) {
71
72
  personaLine,
72
73
  brandKitSection,
73
74
  bibleSection,
75
+ // Overlays are burned-in viewer-facing copy, and this path regenerates
76
+ // them independently of the planner — without its own rule a non-English
77
+ // plan would sprout English overlays on the first overlay re-roll.
78
+ (0, outputLanguage_1.buildOutputLanguageSection)(brief.outputLanguage, "every overlays[].text"),
74
79
  ]
75
80
  .filter(Boolean)
76
81
  .join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"plannerMessages.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/plannerMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAchF;;;;;GAKG;AAEH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAC/B,WAAW,EAAE,iBAAiB,GAAG,IAAI,EACrC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,eAAe,UAAQ;;;;;;KA0IxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAiChE"}
1
+ {"version":3,"file":"plannerMessages.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/plannerMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAehF;;;;;GAKG;AAEH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAC/B,WAAW,EAAE,iBAAiB,GAAG,IAAI,EACrC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,eAAe,UAAQ;;;;;;KAsJxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAiChE"}
@@ -4,6 +4,7 @@ exports.buildPlannerMessages = buildPlannerMessages;
4
4
  exports.briefNeedsWebResearch = briefNeedsWebResearch;
5
5
  const personas_1 = require("../personas");
6
6
  const modelQualityNotes_1 = require("../modelQualityNotes");
7
+ const outputLanguage_1 = require("../../translation/outputLanguage");
7
8
  const promptSections_1 = require("./promptSections");
8
9
  const structuralRules_1 = require("./structuralRules");
9
10
  /**
@@ -14,6 +15,11 @@ const structuralRules_1 = require("./structuralRules");
14
15
  */
15
16
  function buildPlannerMessages(brief, persona, brandKit, styleMemory, bible, lastErrors, useResearchCall = false) {
16
17
  const structuralRulesSection = (0, structuralRules_1.buildStructuralRulesSection)(brief);
18
+ // Empty string on English (the common path adds zero tokens). Placed LAST in
19
+ // the system prompt below — deliberately: this block competes with ~150
20
+ // lines of English instructions and English example titles, and recency wins
21
+ // when an instruction has to override the ambient language of the prompt.
22
+ const outputLanguageSection = (0, outputLanguage_1.buildOutputLanguageSection)(brief.outputLanguage, "every viewer-facing string (scene.voiceoverLine, scene.onScreenText, every overlays[].text, and plan.title)");
17
23
  const personaSection = persona
18
24
  ? [
19
25
  "",
@@ -125,7 +131,10 @@ function buildPlannerMessages(brief, persona, brandKit, styleMemory, bible, last
125
131
  "quotes). It should read like a video/episode title a creator would use,",
126
132
  "derived from the brief's subject and angle — NOT a restatement of the raw",
127
133
  "prompt. Examples: \"5 Morning Habits That Boost Focus\", \"Meet the New",
128
- "Aurora Smartwatch\", \"Why Your Plants Keep Dying\".",
134
+ "Aurora Smartwatch\", \"Why Your Plants Keep Dying\". (Those examples are",
135
+ "English purely to show the SHAPE — follow the output-language rule below",
136
+ "for the actual wording.)",
137
+ outputLanguageSection,
129
138
  ]
130
139
  .filter(Boolean)
131
140
  .join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"scriptFirstPlanner.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/scriptFirstPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAoB,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAGhB,SAAS,EAEV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAYzC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;CAChB;AAQD,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAO,GACrE,OAAO,CAAC,SAAS,CAAC,CAuIpB"}
1
+ {"version":3,"file":"scriptFirstPlanner.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/planner/scriptFirstPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAoB,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAGhB,SAAS,EAEV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAYzC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;CAChB;AAQD,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAO,GACrE,OAAO,CAAC,SAAS,CAAC,CAyIpB"}
@@ -33,6 +33,7 @@ async function planScriptFirst(deps, brief, opts = {}) {
33
33
  const { chapters } = await (0, chapterOutline_tool_1.chapterOutlineCore)(llm, {
34
34
  script: script.fullText,
35
35
  wpm,
36
+ outputLanguage: brief.outputLanguage,
36
37
  });
37
38
  // Pass 3 — explode each chapter into B-roll scenes, keeping sceneIndex
38
39
  // globally contiguous and back-filling chapter.sceneIndices.
@@ -117,6 +118,7 @@ async function planScriptFirst(deps, brief, opts = {}) {
117
118
  // as the scene-first path; the LLM never authors them here.
118
119
  voiceId: brief.voice?.voiceId,
119
120
  voiceStyle: brief.voice?.style,
121
+ outputLanguage: brief.outputLanguage,
120
122
  warnings: [],
121
123
  ...(opts.bible ? { bible: opts.bible } : {}),
122
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"regenCore.d.ts","sourceRoot":"","sources":["../../../src/services/agent/regenCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAQ,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAW9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAsd1B"}
1
+ {"version":3,"file":"regenCore.d.ts","sourceRoot":"","sources":["../../../src/services/agent/regenCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAQ,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAY9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA+d1B"}
@@ -19,6 +19,7 @@ exports.executeRegenTarget = executeRegenTarget;
19
19
  const node_crypto_1 = require("node:crypto");
20
20
  const modelRouter_1 = require("./modelRouter");
21
21
  const executor_1 = require("./executor");
22
+ const outputLanguage_1 = require("../translation/outputLanguage");
22
23
  const taskPoller_1 = require("./taskPoller");
23
24
  const planner_1 = require("./planner");
24
25
  const llmCallerRegistry_1 = require("./llmCallerRegistry");
@@ -187,6 +188,11 @@ async function executeRegenTarget(target, project, ctx, options = {}) {
187
188
  const voInput = { text: newLine };
188
189
  if (plan.voiceId)
189
190
  voInput.voiceId = plan.voiceId;
191
+ // Match the executor: a single-scene VO re-roll must speak the same
192
+ // language as the rest of the timeline, not re-auto-detect off one line.
193
+ if (!(0, outputLanguage_1.isEnglish)(plan.outputLanguage)) {
194
+ voInput.languageCode = plan.outputLanguage;
195
+ }
190
196
  const voOutcome = await (0, recorder_1.runToolRecorded)("generate_voiceover", voInput, {
191
197
  userId: ctx.userId,
192
198
  agentRunId: runId,
@@ -276,7 +282,11 @@ async function executeRegenTarget(target, project, ctx, options = {}) {
276
282
  };
277
283
  }
278
284
  const { runId, trace } = startRunTrace();
279
- const asrOutcome = await (0, recorder_1.runToolRecorded)("generate_captions", { audioUrl, wordTimestamps: true }, {
285
+ const asrOutcome = await (0, recorder_1.runToolRecorded)("generate_captions", {
286
+ audioUrl,
287
+ wordTimestamps: true,
288
+ ...(plan.outputLanguage ? { languageCode: plan.outputLanguage } : {}),
289
+ }, {
280
290
  userId: ctx.userId,
281
291
  agentRunId: runId,
282
292
  idempotencyKey: `${runId}:captions:${sceneIndex}`,
@@ -39,6 +39,14 @@ export declare function resolveSceneCaptions(outcome: SceneOutcome, ctx: {
39
39
  userId: string;
40
40
  agentRunId: string;
41
41
  projectId: string;
42
+ /**
43
+ * Plan's output language. Passed to ASR as a decode hint so captions come
44
+ * back in the language the VO was actually synthesized in. Without it
45
+ * AssemblyAI autodetects per scene, which on 2-4s clips can disagree
46
+ * scene-to-scene and produce a video whose captions switch language
47
+ * mid-way. Absent → autodetect (unchanged legacy behaviour).
48
+ */
49
+ outputLanguage?: string;
42
50
  }): Promise<void>;
43
51
  /**
44
52
  * Stage 3 — write the initial Project shell after the planner approves a
@@ -1 +1 @@
1
- {"version":3,"file":"runHelpers.d.ts","sourceRoot":"","sources":["../../../src/services/agent/runHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI5E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8C1C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,GACpB,kBAAkB,GAAG,SAAS,CA2BhC;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,IAAI,EAAE,EACtB,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC3C,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,IAAI,EAAE,EACtB,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"runHelpers.d.ts","sourceRoot":"","sources":["../../../src/services/agent/runHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI5E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8C1C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,GACpB,kBAAkB,GAAG,SAAS,CA2BhC;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE;IACH,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,IAAI,EAAE,EACtB,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC3C,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,IAAI,EAAE,EACtB,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -161,7 +161,11 @@ async function resolveSceneCaptions(outcome, ctx) {
161
161
  return; // nothing to caption
162
162
  if (result.captionWords && result.captionWords.length > 0)
163
163
  return; // idempotent
164
- const captionOutcome = await (0, toolRegistry_1.runTool)("generate_captions", { audioUrl: result.voiceoverUrl, wordTimestamps: true }, {
164
+ const captionOutcome = await (0, toolRegistry_1.runTool)("generate_captions", {
165
+ audioUrl: result.voiceoverUrl,
166
+ wordTimestamps: true,
167
+ ...(ctx.outputLanguage ? { languageCode: ctx.outputLanguage } : {}),
168
+ }, {
165
169
  userId: ctx.userId,
166
170
  agentRunId: ctx.agentRunId,
167
171
  projectId: ctx.projectId,
@@ -17,6 +17,7 @@ declare const InputSchema: z.ZodObject<{
17
17
  script: z.ZodString;
18
18
  targetChapterCount: z.ZodOptional<z.ZodNumber>;
19
19
  wpm: z.ZodOptional<z.ZodNumber>;
20
+ outputLanguage: z.ZodOptional<z.ZodString>;
20
21
  }, z.core.$strip>;
21
22
  declare const OutputSchema: z.ZodObject<{
22
23
  chapters: z.ZodArray<z.ZodObject<{
@@ -34,6 +35,13 @@ export declare function chapterOutlineCore(llm: LlmCaller, args: {
34
35
  script: string;
35
36
  targetChapterCount?: number;
36
37
  wpm?: number;
38
+ /**
39
+ * Language for the chapter TITLES. The narration is sliced verbatim from
40
+ * the script so it's already in the right language, but titles are
41
+ * authored fresh here and would otherwise come back English on top of a
42
+ * non-English script (they ship as YouTube chapter markers).
43
+ */
44
+ outputLanguage?: string;
37
45
  }): Promise<{
38
46
  chapters: Chapter[];
39
47
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"chapterOutline.tool.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/tools/chapterOutline.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAiB,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAgB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE/D;;;;;;;;;;GAUG;AAEH,QAAA,MAAM,WAAW;;;;iBAYf,CAAC;AAoBH,QAAA,MAAM,YAAY;;;;;;;;iBAEhB,CAAC;AAEH;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAgDlC;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAC7C,OAAO,WAAW,EAClB,OAAO,YAAY,CAmBpB,CAAC"}
1
+ {"version":3,"file":"chapterOutline.tool.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/tools/chapterOutline.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAiB,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAgB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAG/D;;;;;;;;;;GAUG;AAEH,QAAA,MAAM,WAAW;;;;;iBAkBf,CAAC;AAoBH,QAAA,MAAM,YAAY;;;;;;;;iBAEhB,CAAC;AAEH;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAuDlC;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAC7C,OAAO,WAAW,EAClB,OAAO,YAAY,CAoBpB,CAAC"}