vidspotai-shared 1.0.53 → 1.0.55

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 (230) hide show
  1. package/lib/globals/aiModels/providers/alibaba.d.ts +4 -0
  2. package/lib/globals/aiModels/providers/alibaba.d.ts.map +1 -0
  3. package/lib/globals/aiModels/providers/alibaba.js +183 -0
  4. package/lib/globals/aiModels/providers/elevenlabs.d.ts +13 -0
  5. package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +1 -0
  6. package/lib/globals/aiModels/providers/elevenlabs.js +25 -0
  7. package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +36 -0
  8. package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +1 -0
  9. package/lib/globals/aiModels/providers/pixverseTemplates.js +42 -0
  10. package/lib/globals/aiModels/tierHelpers.d.ts +27 -0
  11. package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -0
  12. package/lib/globals/aiModels/tierHelpers.js +73 -0
  13. package/lib/globals/ttsModels/providers/minimax.d.ts +8 -0
  14. package/lib/globals/ttsModels/providers/minimax.d.ts.map +1 -0
  15. package/lib/globals/ttsModels/providers/minimax.js +18 -0
  16. package/lib/globals/ttsModels/providers/openai.d.ts +8 -0
  17. package/lib/globals/ttsModels/providers/openai.d.ts.map +1 -0
  18. package/lib/globals/ttsModels/providers/openai.js +18 -0
  19. package/lib/globals/types.d.ts +2 -1
  20. package/lib/globals/types.d.ts.map +1 -1
  21. package/lib/globals/types.js +1 -0
  22. package/lib/models/agent.model.d.ts +117 -0
  23. package/lib/models/agent.model.d.ts.map +1 -0
  24. package/lib/models/agent.model.js +13 -0
  25. package/lib/models/analytics.model.d.ts +4 -0
  26. package/lib/models/analytics.model.d.ts.map +1 -1
  27. package/lib/models/cachedAsset.model.d.ts +18 -0
  28. package/lib/models/cachedAsset.model.d.ts.map +1 -0
  29. package/lib/models/cachedAsset.model.js +2 -0
  30. package/lib/models/cachedRawAsset.model.d.ts +20 -0
  31. package/lib/models/cachedRawAsset.model.d.ts.map +1 -0
  32. package/lib/models/cachedRawAsset.model.js +2 -0
  33. package/lib/models/video.model.d.ts +1 -0
  34. package/lib/models/video.model.d.ts.map +1 -1
  35. package/lib/schemas/agentPersona.schema.d.ts +10 -0
  36. package/lib/schemas/agentPersona.schema.d.ts.map +1 -0
  37. package/lib/schemas/agentPersona.schema.js +11 -0
  38. package/lib/schemas/brandKit.schema.d.ts +101 -0
  39. package/lib/schemas/brandKit.schema.d.ts.map +1 -0
  40. package/lib/schemas/brandKit.schema.js +46 -0
  41. package/lib/schemas/brief.schema.d.ts +216 -0
  42. package/lib/schemas/brief.schema.d.ts.map +1 -0
  43. package/lib/schemas/brief.schema.js +118 -0
  44. package/lib/schemas/index.d.ts +6 -0
  45. package/lib/schemas/index.d.ts.map +1 -0
  46. package/lib/schemas/index.js +21 -0
  47. package/lib/schemas/project.schema.d.ts +1005 -0
  48. package/lib/schemas/project.schema.d.ts.map +1 -0
  49. package/lib/schemas/project.schema.js +238 -0
  50. package/lib/schemas/videoPlan.schema.d.ts +145 -0
  51. package/lib/schemas/videoPlan.schema.d.ts.map +1 -0
  52. package/lib/schemas/videoPlan.schema.js +109 -0
  53. package/lib/services/agent/beatSnap.d.ts +10 -0
  54. package/lib/services/agent/beatSnap.d.ts.map +1 -0
  55. package/lib/services/agent/beatSnap.js +128 -0
  56. package/lib/services/agent/costPreflight.d.ts +22 -0
  57. package/lib/services/agent/costPreflight.d.ts.map +1 -0
  58. package/lib/services/agent/costPreflight.js +75 -0
  59. package/lib/services/agent/critic.d.ts +103 -0
  60. package/lib/services/agent/critic.d.ts.map +1 -0
  61. package/lib/services/agent/critic.js +132 -0
  62. package/lib/services/agent/eval/index.d.ts +5 -0
  63. package/lib/services/agent/eval/index.d.ts.map +1 -0
  64. package/lib/services/agent/eval/index.js +20 -0
  65. package/lib/services/agent/eval/judge.d.ts +14 -0
  66. package/lib/services/agent/eval/judge.d.ts.map +1 -0
  67. package/lib/services/agent/eval/judge.js +95 -0
  68. package/lib/services/agent/eval/recorder.d.ts +17 -0
  69. package/lib/services/agent/eval/recorder.d.ts.map +1 -0
  70. package/lib/services/agent/eval/recorder.js +65 -0
  71. package/lib/services/agent/eval/seedBriefs.d.ts +16 -0
  72. package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -0
  73. package/lib/services/agent/eval/seedBriefs.js +1188 -0
  74. package/lib/services/agent/eval/types.d.ts +196 -0
  75. package/lib/services/agent/eval/types.d.ts.map +1 -0
  76. package/lib/services/agent/eval/types.js +65 -0
  77. package/lib/services/agent/executor.d.ts +50 -0
  78. package/lib/services/agent/executor.d.ts.map +1 -0
  79. package/lib/services/agent/executor.js +188 -0
  80. package/lib/services/agent/index.d.ts +15 -0
  81. package/lib/services/agent/index.d.ts.map +1 -0
  82. package/lib/services/agent/index.js +30 -0
  83. package/lib/services/agent/llmCaller.d.ts +77 -0
  84. package/lib/services/agent/llmCaller.d.ts.map +1 -0
  85. package/lib/services/agent/llmCaller.js +16 -0
  86. package/lib/services/agent/llmCallerGateway.d.ts +39 -0
  87. package/lib/services/agent/llmCallerGateway.d.ts.map +1 -0
  88. package/lib/services/agent/llmCallerGateway.js +246 -0
  89. package/lib/services/agent/llmCallerRegistry.d.ts +4 -0
  90. package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -0
  91. package/lib/services/agent/llmCallerRegistry.js +19 -0
  92. package/lib/services/agent/modelRouter.d.ts +41 -0
  93. package/lib/services/agent/modelRouter.d.ts.map +1 -0
  94. package/lib/services/agent/modelRouter.js +57 -0
  95. package/lib/services/agent/musicSelect.d.ts +23 -0
  96. package/lib/services/agent/musicSelect.d.ts.map +1 -0
  97. package/lib/services/agent/musicSelect.js +65 -0
  98. package/lib/services/agent/personas.d.ts +60 -0
  99. package/lib/services/agent/personas.d.ts.map +1 -0
  100. package/lib/services/agent/personas.js +156 -0
  101. package/lib/services/agent/planner.d.ts +56 -0
  102. package/lib/services/agent/planner.d.ts.map +1 -0
  103. package/lib/services/agent/planner.js +237 -0
  104. package/lib/services/agent/toolRegistry.d.ts +64 -0
  105. package/lib/services/agent/toolRegistry.d.ts.map +1 -0
  106. package/lib/services/agent/toolRegistry.js +78 -0
  107. package/lib/services/agent/tools/analyzeReference.tool.d.ts +36 -0
  108. package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +1 -0
  109. package/lib/services/agent/tools/analyzeReference.tool.js +44 -0
  110. package/lib/services/agent/tools/animateImage.tool.d.ts +23 -0
  111. package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -0
  112. package/lib/services/agent/tools/animateImage.tool.js +58 -0
  113. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +30 -0
  114. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +1 -0
  115. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +90 -0
  116. package/lib/services/agent/tools/composeScene.tool.d.ts +948 -0
  117. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -0
  118. package/lib/services/agent/tools/composeScene.tool.js +90 -0
  119. package/lib/services/agent/tools/estimateCost.tool.d.ts +342 -0
  120. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -0
  121. package/lib/services/agent/tools/estimateCost.tool.js +62 -0
  122. package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +32 -0
  123. package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +1 -0
  124. package/lib/services/agent/tools/generateAvatarVideo.tool.js +112 -0
  125. package/lib/services/agent/tools/generateImage.tool.d.ts +28 -0
  126. package/lib/services/agent/tools/generateImage.tool.d.ts.map +1 -0
  127. package/lib/services/agent/tools/generateImage.tool.js +97 -0
  128. package/lib/services/agent/tools/generateVideo.tool.d.ts +30 -0
  129. package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -0
  130. package/lib/services/agent/tools/generateVideo.tool.js +84 -0
  131. package/lib/services/agent/tools/generateVoiceover.tool.d.ts +18 -0
  132. package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +1 -0
  133. package/lib/services/agent/tools/generateVoiceover.tool.js +72 -0
  134. package/lib/services/agent/tools/index.d.ts +19 -0
  135. package/lib/services/agent/tools/index.d.ts.map +1 -0
  136. package/lib/services/agent/tools/index.js +34 -0
  137. package/lib/services/agent/tools/planVideo.tool.d.ts +191 -0
  138. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -0
  139. package/lib/services/agent/tools/planVideo.tool.js +46 -0
  140. package/lib/services/agent/tools/render.tool.d.ts +357 -0
  141. package/lib/services/agent/tools/render.tool.d.ts.map +1 -0
  142. package/lib/services/agent/tools/render.tool.js +48 -0
  143. package/lib/services/agent/tools/searchMusic.tool.d.ts +49 -0
  144. package/lib/services/agent/tools/searchMusic.tool.d.ts.map +1 -0
  145. package/lib/services/agent/tools/searchMusic.tool.js +74 -0
  146. package/lib/services/agent/tools/searchStock.tool.d.ts +37 -0
  147. package/lib/services/agent/tools/searchStock.tool.d.ts.map +1 -0
  148. package/lib/services/agent/tools/searchStock.tool.js +101 -0
  149. package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +59 -0
  150. package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +1 -0
  151. package/lib/services/agent/tools/searchUserLibrary.tool.js +58 -0
  152. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +31 -0
  153. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +1 -0
  154. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +2 -0
  155. package/lib/services/aiGen/canonicalAdapters/index.d.ts +3 -0
  156. package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +1 -0
  157. package/lib/services/aiGen/canonicalAdapters/index.js +18 -0
  158. package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +23 -0
  159. package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +1 -0
  160. package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +12 -0
  161. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +18 -0
  162. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +1 -0
  163. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +100 -0
  164. package/lib/services/aiGen/providers/fal/falImage.service.d.ts +9 -0
  165. package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +1 -0
  166. package/lib/services/aiGen/providers/fal/falImage.service.js +102 -0
  167. package/lib/services/aiGen/providers/fal/index.d.ts +2 -0
  168. package/lib/services/aiGen/providers/fal/index.d.ts.map +1 -0
  169. package/lib/services/aiGen/providers/fal/index.js +17 -0
  170. package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +4 -0
  171. package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +1 -0
  172. package/lib/services/aiGen/providers/kling/cameraAdapter.js +53 -0
  173. package/lib/services/aiGen/providers/pexels/index.d.ts +2 -0
  174. package/lib/services/aiGen/providers/pexels/index.d.ts.map +1 -0
  175. package/lib/services/aiGen/providers/pexels/index.js +17 -0
  176. package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +11 -0
  177. package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +1 -0
  178. package/lib/services/aiGen/providers/pexels/pexels.service.js +118 -0
  179. package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +3 -0
  180. package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +1 -0
  181. package/lib/services/aiGen/providers/runway/cameraAdapter.js +46 -0
  182. package/lib/services/analytics.service.d.ts +10 -0
  183. package/lib/services/analytics.service.d.ts.map +1 -1
  184. package/lib/services/analytics.service.js +27 -0
  185. package/lib/services/asr/assemblyai.service.d.ts +72 -0
  186. package/lib/services/asr/assemblyai.service.d.ts.map +1 -0
  187. package/lib/services/asr/assemblyai.service.js +89 -0
  188. package/lib/services/asr/index.d.ts +2 -0
  189. package/lib/services/asr/index.d.ts.map +1 -0
  190. package/lib/services/asr/index.js +17 -0
  191. package/lib/services/assetCache.service.d.ts +54 -0
  192. package/lib/services/assetCache.service.d.ts.map +1 -0
  193. package/lib/services/assetCache.service.js +96 -0
  194. package/lib/services/audioAnalysis/index.d.ts +2 -0
  195. package/lib/services/audioAnalysis/index.d.ts.map +1 -0
  196. package/lib/services/audioAnalysis/index.js +17 -0
  197. package/lib/services/audioAnalysis/onsetDetection.service.d.ts +50 -0
  198. package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +1 -0
  199. package/lib/services/audioAnalysis/onsetDetection.service.js +136 -0
  200. package/lib/services/editor/designToProject.d.ts +60 -0
  201. package/lib/services/editor/designToProject.d.ts.map +1 -0
  202. package/lib/services/editor/designToProject.js +194 -0
  203. package/lib/services/musicGen/index.d.ts +6 -0
  204. package/lib/services/musicGen/index.d.ts.map +1 -0
  205. package/lib/services/musicGen/index.js +26 -0
  206. package/lib/services/musicGen/musicSearchFactory.service.d.ts +14 -0
  207. package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +1 -0
  208. package/lib/services/musicGen/musicSearchFactory.service.js +59 -0
  209. package/lib/services/musicGen/providers/curated.service.d.ts +22 -0
  210. package/lib/services/musicGen/providers/curated.service.d.ts.map +1 -0
  211. package/lib/services/musicGen/providers/curated.service.js +171 -0
  212. package/lib/services/musicGen/providers/jamendo.service.d.ts +8 -0
  213. package/lib/services/musicGen/providers/jamendo.service.d.ts.map +1 -0
  214. package/lib/services/musicGen/providers/jamendo.service.js +93 -0
  215. package/lib/services/musicGen/providers/mubert.service.d.ts +9 -0
  216. package/lib/services/musicGen/providers/mubert.service.d.ts.map +1 -0
  217. package/lib/services/musicGen/providers/mubert.service.js +113 -0
  218. package/lib/services/musicGen/types.d.ts +42 -0
  219. package/lib/services/musicGen/types.d.ts.map +1 -0
  220. package/lib/services/musicGen/types.js +10 -0
  221. package/lib/services/tts/providers/minimax.service.d.ts +14 -0
  222. package/lib/services/tts/providers/minimax.service.d.ts.map +1 -0
  223. package/lib/services/tts/providers/minimax.service.js +78 -0
  224. package/lib/services/tts/providers/openai.service.d.ts +14 -0
  225. package/lib/services/tts/providers/openai.service.d.ts.map +1 -0
  226. package/lib/services/tts/providers/openai.service.js +71 -0
  227. package/lib/utils/helpers.d.ts +1 -0
  228. package/lib/utils/helpers.d.ts.map +1 -1
  229. package/lib/utils/helpers.js +26 -12
  230. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeScene.tool.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/tools/composeScene.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EAAgB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiC/D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGf,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIhB,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAC3C,OAAO,WAAW,EAClB,OAAO,YAAY,CA4DpB,CAAC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.composeSceneTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const project_schema_1 = require("../../../schemas/project.schema");
6
+ const toolRegistry_1 = require("../toolRegistry");
7
+ /**
8
+ * compose_scene — pure Project JSON mutation.
9
+ *
10
+ * Insert / replace / remove clips for a single scene index, optionally append a
11
+ * transition into the next scene. Pure function: input project + ops → output
12
+ * project. Persistence is the host's job (separate render/save tools).
13
+ */
14
+ const SceneSpecSchema = zod_1.z.object({
15
+ sceneIndex: zod_1.z
16
+ .number()
17
+ .int()
18
+ .nonnegative()
19
+ .describe("0-based scene position the clips belong to."),
20
+ insertAtMs: zod_1.z
21
+ .number()
22
+ .nonnegative()
23
+ .describe("Absolute project timestamp (ms) where the scene starts."),
24
+ clips: zod_1.z
25
+ .array(project_schema_1.ClipSchema)
26
+ .min(1)
27
+ .describe("Clips that make up the scene. display.from/to must be relative to project t=0, not the scene."),
28
+ transitionIn: project_schema_1.TransitionSchema.optional().describe("Transition from previous scene's last clip into this scene's first clip."),
29
+ /** If true, replaces any existing clips that overlap this scene's time range. */
30
+ replaceOverlapping: zod_1.z.boolean().default(false),
31
+ });
32
+ const InputSchema = zod_1.z.object({
33
+ project: project_schema_1.ProjectSchema.describe("Current project JSON. Will be mutated by spec."),
34
+ spec: SceneSpecSchema,
35
+ });
36
+ const OutputSchema = zod_1.z.object({
37
+ project: project_schema_1.ProjectSchema,
38
+ insertedClipIds: zod_1.z.array(zod_1.z.string()),
39
+ removedClipIds: zod_1.z.array(zod_1.z.string()),
40
+ });
41
+ exports.composeSceneTool = {
42
+ name: "compose_scene",
43
+ description: [
44
+ "Apply a scene-level edit to the Project JSON: insert clips, optionally",
45
+ "replace overlapping ones, attach an inbound transition. Pure function —",
46
+ "returns a new project; does NOT persist or render.",
47
+ "Call once per scene as the executor lands assets. Do NOT batch multi-scene",
48
+ "edits in a single call; one-scene-at-a-time keeps undo and provenance clean.",
49
+ ].join(" "),
50
+ inputSchema: InputSchema,
51
+ outputSchema: OutputSchema,
52
+ idempotent: true,
53
+ handler: async (input) => {
54
+ const { project, spec } = input;
55
+ const sceneStart = spec.insertAtMs;
56
+ const sceneEnd = Math.max(...spec.clips.map((c) => c.display.to));
57
+ let removedClipIds = [];
58
+ let nextClips = project.clips;
59
+ if (spec.replaceOverlapping) {
60
+ const overlaps = (from, to) => from < sceneEnd && to > sceneStart;
61
+ removedClipIds = project.clips
62
+ .filter((c) => overlaps(c.display.from, c.display.to))
63
+ .map((c) => c.id);
64
+ nextClips = project.clips.filter((c) => !removedClipIds.includes(c.id));
65
+ }
66
+ const insertedClipIds = spec.clips.map((c) => c.id);
67
+ nextClips = [...nextClips, ...spec.clips];
68
+ let nextTransitions = project.transitions;
69
+ if (spec.transitionIn) {
70
+ // Drop any existing transition pointing to the same toClipId.
71
+ nextTransitions = project.transitions.filter((t) => t.toClipId !== spec.transitionIn.toClipId);
72
+ nextTransitions = [...nextTransitions, spec.transitionIn];
73
+ }
74
+ const nextDuration = Math.max(project.durationMs, sceneEnd);
75
+ const nextProject = {
76
+ ...project,
77
+ clips: nextClips,
78
+ transitions: nextTransitions,
79
+ durationMs: nextDuration,
80
+ updatedAt: new Date().toISOString(),
81
+ };
82
+ // Re-validate to catch any drift.
83
+ return {
84
+ project: project_schema_1.ProjectSchema.parse(nextProject),
85
+ insertedClipIds,
86
+ removedClipIds,
87
+ };
88
+ },
89
+ };
90
+ (0, toolRegistry_1.registerTool)(exports.composeSceneTool);
@@ -0,0 +1,342 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../toolRegistry";
3
+ declare const InputSchema: z.ZodObject<{
4
+ project: z.ZodObject<{
5
+ schemaVersion: z.ZodLiteral<1>;
6
+ id: z.ZodString;
7
+ name: z.ZodString;
8
+ durationMs: z.ZodNumber;
9
+ fps: z.ZodDefault<z.ZodNumber>;
10
+ size: z.ZodObject<{
11
+ width: z.ZodNumber;
12
+ height: z.ZodNumber;
13
+ }, z.core.$strip>;
14
+ aspect: z.ZodEnum<{
15
+ "9:16": "9:16";
16
+ "16:9": "16:9";
17
+ "1:1": "1:1";
18
+ "4:5": "4:5";
19
+ }>;
20
+ background: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
21
+ type: z.ZodLiteral<"color">;
22
+ value: z.ZodString;
23
+ }, z.core.$strip>, z.ZodObject<{
24
+ type: z.ZodLiteral<"image">;
25
+ src: z.ZodString;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ type: z.ZodLiteral<"transparent">;
28
+ }, z.core.$strip>], "type">>;
29
+ tracks: z.ZodArray<z.ZodObject<{
30
+ id: z.ZodString;
31
+ kind: z.ZodEnum<{
32
+ audio: "audio";
33
+ video: "video";
34
+ text: "text";
35
+ caption: "caption";
36
+ fx: "fx";
37
+ }>;
38
+ name: z.ZodOptional<z.ZodString>;
39
+ index: z.ZodNumber;
40
+ muted: z.ZodDefault<z.ZodBoolean>;
41
+ hidden: z.ZodDefault<z.ZodBoolean>;
42
+ locked: z.ZodDefault<z.ZodBoolean>;
43
+ gainDb: z.ZodDefault<z.ZodNumber>;
44
+ }, z.core.$strip>>;
45
+ clips: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
46
+ type: z.ZodLiteral<"video">;
47
+ src: z.ZodString;
48
+ trim: z.ZodOptional<z.ZodObject<{
49
+ from: z.ZodNumber;
50
+ to: z.ZodNumber;
51
+ }, z.core.$strip>>;
52
+ volume: z.ZodDefault<z.ZodNumber>;
53
+ playbackRate: z.ZodDefault<z.ZodNumber>;
54
+ colorGrade: z.ZodOptional<z.ZodObject<{
55
+ exposure: z.ZodDefault<z.ZodNumber>;
56
+ contrast: z.ZodDefault<z.ZodNumber>;
57
+ saturation: z.ZodDefault<z.ZodNumber>;
58
+ warmth: z.ZodDefault<z.ZodNumber>;
59
+ }, z.core.$strip>>;
60
+ crop: z.ZodOptional<z.ZodObject<{
61
+ x: z.ZodNumber;
62
+ y: z.ZodNumber;
63
+ width: z.ZodNumber;
64
+ height: z.ZodNumber;
65
+ }, z.core.$strip>>;
66
+ id: z.ZodString;
67
+ trackId: z.ZodString;
68
+ display: z.ZodObject<{
69
+ from: z.ZodNumber;
70
+ to: z.ZodNumber;
71
+ }, z.core.$strip>;
72
+ name: z.ZodOptional<z.ZodString>;
73
+ provenance: z.ZodOptional<z.ZodObject<{
74
+ tier: z.ZodEnum<{
75
+ T0: "T0";
76
+ T1: "T1";
77
+ T2: "T2";
78
+ T3: "T3";
79
+ }>;
80
+ source: z.ZodString;
81
+ modelKey: z.ZodOptional<z.ZodString>;
82
+ prompt: z.ZodOptional<z.ZodString>;
83
+ assetHash: z.ZodOptional<z.ZodString>;
84
+ creditsSpent: z.ZodOptional<z.ZodNumber>;
85
+ generationId: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strip>>;
87
+ effects: z.ZodDefault<z.ZodArray<z.ZodObject<{
88
+ id: z.ZodString;
89
+ kind: z.ZodString;
90
+ enabled: z.ZodDefault<z.ZodBoolean>;
91
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
92
+ }, z.core.$strip>>>;
93
+ transform: z.ZodDefault<z.ZodObject<{
94
+ x: z.ZodDefault<z.ZodNumber>;
95
+ y: z.ZodDefault<z.ZodNumber>;
96
+ scaleX: z.ZodDefault<z.ZodNumber>;
97
+ scaleY: z.ZodDefault<z.ZodNumber>;
98
+ rotation: z.ZodDefault<z.ZodNumber>;
99
+ opacity: z.ZodDefault<z.ZodNumber>;
100
+ }, z.core.$strip>>;
101
+ locked: z.ZodDefault<z.ZodBoolean>;
102
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
103
+ }, z.core.$strip>, z.ZodObject<{
104
+ type: z.ZodLiteral<"image">;
105
+ src: z.ZodString;
106
+ motion: z.ZodOptional<z.ZodObject<{
107
+ kind: z.ZodEnum<{
108
+ kenBurnsIn: "kenBurnsIn";
109
+ kenBurnsOut: "kenBurnsOut";
110
+ panLeft: "panLeft";
111
+ panRight: "panRight";
112
+ parallax: "parallax";
113
+ }>;
114
+ intensity: z.ZodDefault<z.ZodNumber>;
115
+ }, z.core.$strip>>;
116
+ colorGrade: z.ZodOptional<z.ZodObject<{
117
+ exposure: z.ZodDefault<z.ZodNumber>;
118
+ contrast: z.ZodDefault<z.ZodNumber>;
119
+ saturation: z.ZodDefault<z.ZodNumber>;
120
+ warmth: z.ZodDefault<z.ZodNumber>;
121
+ }, z.core.$strip>>;
122
+ id: z.ZodString;
123
+ trackId: z.ZodString;
124
+ display: z.ZodObject<{
125
+ from: z.ZodNumber;
126
+ to: z.ZodNumber;
127
+ }, z.core.$strip>;
128
+ name: z.ZodOptional<z.ZodString>;
129
+ provenance: z.ZodOptional<z.ZodObject<{
130
+ tier: z.ZodEnum<{
131
+ T0: "T0";
132
+ T1: "T1";
133
+ T2: "T2";
134
+ T3: "T3";
135
+ }>;
136
+ source: z.ZodString;
137
+ modelKey: z.ZodOptional<z.ZodString>;
138
+ prompt: z.ZodOptional<z.ZodString>;
139
+ assetHash: z.ZodOptional<z.ZodString>;
140
+ creditsSpent: z.ZodOptional<z.ZodNumber>;
141
+ generationId: z.ZodOptional<z.ZodString>;
142
+ }, z.core.$strip>>;
143
+ effects: z.ZodDefault<z.ZodArray<z.ZodObject<{
144
+ id: z.ZodString;
145
+ kind: z.ZodString;
146
+ enabled: z.ZodDefault<z.ZodBoolean>;
147
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
148
+ }, z.core.$strip>>>;
149
+ transform: z.ZodDefault<z.ZodObject<{
150
+ x: z.ZodDefault<z.ZodNumber>;
151
+ y: z.ZodDefault<z.ZodNumber>;
152
+ scaleX: z.ZodDefault<z.ZodNumber>;
153
+ scaleY: z.ZodDefault<z.ZodNumber>;
154
+ rotation: z.ZodDefault<z.ZodNumber>;
155
+ opacity: z.ZodDefault<z.ZodNumber>;
156
+ }, z.core.$strip>>;
157
+ locked: z.ZodDefault<z.ZodBoolean>;
158
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
159
+ }, z.core.$strip>, z.ZodObject<{
160
+ type: z.ZodLiteral<"audio">;
161
+ src: z.ZodString;
162
+ trim: z.ZodOptional<z.ZodObject<{
163
+ from: z.ZodNumber;
164
+ to: z.ZodNumber;
165
+ }, z.core.$strip>>;
166
+ volume: z.ZodDefault<z.ZodNumber>;
167
+ duckAgainstTrackId: z.ZodOptional<z.ZodString>;
168
+ fadeInMs: z.ZodDefault<z.ZodNumber>;
169
+ fadeOutMs: z.ZodDefault<z.ZodNumber>;
170
+ id: z.ZodString;
171
+ trackId: z.ZodString;
172
+ display: z.ZodObject<{
173
+ from: z.ZodNumber;
174
+ to: z.ZodNumber;
175
+ }, z.core.$strip>;
176
+ name: z.ZodOptional<z.ZodString>;
177
+ provenance: z.ZodOptional<z.ZodObject<{
178
+ tier: z.ZodEnum<{
179
+ T0: "T0";
180
+ T1: "T1";
181
+ T2: "T2";
182
+ T3: "T3";
183
+ }>;
184
+ source: z.ZodString;
185
+ modelKey: z.ZodOptional<z.ZodString>;
186
+ prompt: z.ZodOptional<z.ZodString>;
187
+ assetHash: z.ZodOptional<z.ZodString>;
188
+ creditsSpent: z.ZodOptional<z.ZodNumber>;
189
+ generationId: z.ZodOptional<z.ZodString>;
190
+ }, z.core.$strip>>;
191
+ effects: z.ZodDefault<z.ZodArray<z.ZodObject<{
192
+ id: z.ZodString;
193
+ kind: z.ZodString;
194
+ enabled: z.ZodDefault<z.ZodBoolean>;
195
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
196
+ }, z.core.$strip>>>;
197
+ transform: z.ZodDefault<z.ZodObject<{
198
+ x: z.ZodDefault<z.ZodNumber>;
199
+ y: z.ZodDefault<z.ZodNumber>;
200
+ scaleX: z.ZodDefault<z.ZodNumber>;
201
+ scaleY: z.ZodDefault<z.ZodNumber>;
202
+ rotation: z.ZodDefault<z.ZodNumber>;
203
+ opacity: z.ZodDefault<z.ZodNumber>;
204
+ }, z.core.$strip>>;
205
+ locked: z.ZodDefault<z.ZodBoolean>;
206
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
207
+ }, z.core.$strip>, z.ZodObject<{
208
+ type: z.ZodLiteral<"text">;
209
+ text: z.ZodString;
210
+ fontFamily: z.ZodDefault<z.ZodString>;
211
+ fontSize: z.ZodDefault<z.ZodNumber>;
212
+ fontWeight: z.ZodDefault<z.ZodNumber>;
213
+ color: z.ZodDefault<z.ZodString>;
214
+ align: z.ZodDefault<z.ZodEnum<{
215
+ left: "left";
216
+ center: "center";
217
+ right: "right";
218
+ }>>;
219
+ backgroundColor: z.ZodOptional<z.ZodString>;
220
+ shadow: z.ZodOptional<z.ZodString>;
221
+ id: z.ZodString;
222
+ trackId: z.ZodString;
223
+ display: z.ZodObject<{
224
+ from: z.ZodNumber;
225
+ to: z.ZodNumber;
226
+ }, z.core.$strip>;
227
+ name: z.ZodOptional<z.ZodString>;
228
+ provenance: z.ZodOptional<z.ZodObject<{
229
+ tier: z.ZodEnum<{
230
+ T0: "T0";
231
+ T1: "T1";
232
+ T2: "T2";
233
+ T3: "T3";
234
+ }>;
235
+ source: z.ZodString;
236
+ modelKey: z.ZodOptional<z.ZodString>;
237
+ prompt: z.ZodOptional<z.ZodString>;
238
+ assetHash: z.ZodOptional<z.ZodString>;
239
+ creditsSpent: z.ZodOptional<z.ZodNumber>;
240
+ generationId: z.ZodOptional<z.ZodString>;
241
+ }, z.core.$strip>>;
242
+ effects: z.ZodDefault<z.ZodArray<z.ZodObject<{
243
+ id: z.ZodString;
244
+ kind: z.ZodString;
245
+ enabled: z.ZodDefault<z.ZodBoolean>;
246
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
247
+ }, z.core.$strip>>>;
248
+ transform: z.ZodDefault<z.ZodObject<{
249
+ x: z.ZodDefault<z.ZodNumber>;
250
+ y: z.ZodDefault<z.ZodNumber>;
251
+ scaleX: z.ZodDefault<z.ZodNumber>;
252
+ scaleY: z.ZodDefault<z.ZodNumber>;
253
+ rotation: z.ZodDefault<z.ZodNumber>;
254
+ opacity: z.ZodDefault<z.ZodNumber>;
255
+ }, z.core.$strip>>;
256
+ locked: z.ZodDefault<z.ZodBoolean>;
257
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
258
+ }, z.core.$strip>, z.ZodObject<{
259
+ type: z.ZodLiteral<"caption">;
260
+ text: z.ZodString;
261
+ words: z.ZodDefault<z.ZodArray<z.ZodObject<{
262
+ word: z.ZodString;
263
+ start: z.ZodNumber;
264
+ end: z.ZodNumber;
265
+ }, z.core.$strip>>>;
266
+ fontFamily: z.ZodDefault<z.ZodString>;
267
+ fontSize: z.ZodDefault<z.ZodNumber>;
268
+ color: z.ZodDefault<z.ZodString>;
269
+ highlightColor: z.ZodOptional<z.ZodString>;
270
+ language: z.ZodDefault<z.ZodString>;
271
+ id: z.ZodString;
272
+ trackId: z.ZodString;
273
+ display: z.ZodObject<{
274
+ from: z.ZodNumber;
275
+ to: z.ZodNumber;
276
+ }, z.core.$strip>;
277
+ name: z.ZodOptional<z.ZodString>;
278
+ provenance: z.ZodOptional<z.ZodObject<{
279
+ tier: z.ZodEnum<{
280
+ T0: "T0";
281
+ T1: "T1";
282
+ T2: "T2";
283
+ T3: "T3";
284
+ }>;
285
+ source: z.ZodString;
286
+ modelKey: z.ZodOptional<z.ZodString>;
287
+ prompt: z.ZodOptional<z.ZodString>;
288
+ assetHash: z.ZodOptional<z.ZodString>;
289
+ creditsSpent: z.ZodOptional<z.ZodNumber>;
290
+ generationId: z.ZodOptional<z.ZodString>;
291
+ }, z.core.$strip>>;
292
+ effects: z.ZodDefault<z.ZodArray<z.ZodObject<{
293
+ id: z.ZodString;
294
+ kind: z.ZodString;
295
+ enabled: z.ZodDefault<z.ZodBoolean>;
296
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
297
+ }, z.core.$strip>>>;
298
+ transform: z.ZodDefault<z.ZodObject<{
299
+ x: z.ZodDefault<z.ZodNumber>;
300
+ y: z.ZodDefault<z.ZodNumber>;
301
+ scaleX: z.ZodDefault<z.ZodNumber>;
302
+ scaleY: z.ZodDefault<z.ZodNumber>;
303
+ rotation: z.ZodDefault<z.ZodNumber>;
304
+ opacity: z.ZodDefault<z.ZodNumber>;
305
+ }, z.core.$strip>>;
306
+ locked: z.ZodDefault<z.ZodBoolean>;
307
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
308
+ }, z.core.$strip>], "type">>;
309
+ transitions: z.ZodDefault<z.ZodArray<z.ZodObject<{
310
+ id: z.ZodString;
311
+ fromClipId: z.ZodString;
312
+ toClipId: z.ZodString;
313
+ kind: z.ZodEnum<{
314
+ none: "none";
315
+ fade: "fade";
316
+ crossfade: "crossfade";
317
+ wipe: "wipe";
318
+ slide: "slide";
319
+ whipPan: "whipPan";
320
+ dipToBlack: "dipToBlack";
321
+ dipToWhite: "dipToWhite";
322
+ }>;
323
+ durationMs: z.ZodNumber;
324
+ }, z.core.$strip>>>;
325
+ agentRunId: z.ZodOptional<z.ZodString>;
326
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
327
+ createdAt: z.ZodString;
328
+ updatedAt: z.ZodString;
329
+ }, z.core.$strip>;
330
+ }, z.core.$strip>;
331
+ declare const OutputSchema: z.ZodObject<{
332
+ totalCredits: z.ZodNumber;
333
+ breakdown: z.ZodArray<z.ZodObject<{
334
+ clipId: z.ZodString;
335
+ tier: z.ZodString;
336
+ source: z.ZodString;
337
+ credits: z.ZodNumber;
338
+ }, z.core.$strip>>;
339
+ }, z.core.$strip>;
340
+ export declare const estimateCostTool: ToolDefinition<typeof InputSchema, typeof OutputSchema>;
341
+ export {};
342
+ //# sourceMappingURL=estimateCost.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateCost.tool.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/tools/estimateCost.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAgB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE/D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEf,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;iBAUhB,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAC3C,OAAO,WAAW,EAClB,OAAO,YAAY,CA0BpB,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.estimateCostTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const project_schema_1 = require("../../../schemas/project.schema");
6
+ const toolRegistry_1 = require("../toolRegistry");
7
+ const InputSchema = zod_1.z.object({
8
+ project: project_schema_1.ProjectSchema,
9
+ });
10
+ const OutputSchema = zod_1.z.object({
11
+ totalCredits: zod_1.z.number().nonnegative(),
12
+ breakdown: zod_1.z.array(zod_1.z.object({
13
+ clipId: zod_1.z.string(),
14
+ tier: zod_1.z.string(),
15
+ source: zod_1.z.string(),
16
+ credits: zod_1.z.number().nonnegative(),
17
+ })),
18
+ });
19
+ exports.estimateCostTool = {
20
+ name: "estimate_cost",
21
+ description: [
22
+ "Estimate the credit cost of rendering a Project JSON without spending any",
23
+ "credits. Reads each clip's provenance.creditsSpent (if already generated)",
24
+ "or estimates from tier when not yet generated. Always call before",
25
+ "executing a plan so the planner can stay within budget.",
26
+ ].join(" "),
27
+ inputSchema: InputSchema,
28
+ outputSchema: OutputSchema,
29
+ estimateCost: async () => 0,
30
+ handler: async ({ project }) => {
31
+ const breakdown = project.clips.map((clip) => {
32
+ const tier = clip.provenance?.tier ?? "T0";
33
+ const source = clip.provenance?.source ?? "user-upload";
34
+ const credits = clip.provenance?.creditsSpent ?? estimateFromTier(tier, clip.display);
35
+ return { clipId: clip.id, tier, source, credits };
36
+ });
37
+ return {
38
+ totalCredits: breakdown.reduce((s, b) => s + b.credits, 0),
39
+ breakdown,
40
+ };
41
+ },
42
+ };
43
+ /**
44
+ * Rough per-second per-tier estimate, in credits. Refined later via aiModelConfigs
45
+ * lookups once tier annotations are backfilled across providers.
46
+ */
47
+ function estimateFromTier(tier, display) {
48
+ const seconds = Math.max(0, (display.to - display.from) / 1000);
49
+ switch (tier) {
50
+ case "T0":
51
+ return 0;
52
+ case "T1":
53
+ return Math.ceil(seconds * 1);
54
+ case "T2":
55
+ return Math.ceil(seconds * 4);
56
+ case "T3":
57
+ return Math.ceil(seconds * 12);
58
+ default:
59
+ return Math.ceil(seconds * 4);
60
+ }
61
+ }
62
+ (0, toolRegistry_1.registerTool)(exports.estimateCostTool);
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../toolRegistry";
3
+ /**
4
+ * generate_avatar_video — wraps the existing kling-avatar pipeline so the
5
+ * planner's `talking-head-avatar` scene strategy is executable. Accepts a
6
+ * presenter face image URL plus either a pre-uploaded audio URL or raw TTS
7
+ * text (in which case the tool synthesizes via ElevenLabs and uploads to GCS
8
+ * before handing off, since Kling avatar requires a public sound_file URL).
9
+ *
10
+ * Returns a provider task id; the executor / monitor layer polls completion
11
+ * exactly as it does for generate_video.
12
+ */
13
+ declare const InputSchema: z.ZodObject<{
14
+ inputImageUrl: z.ZodString;
15
+ ttsText: z.ZodOptional<z.ZodString>;
16
+ inputAudioUrl: z.ZodOptional<z.ZodString>;
17
+ voiceId: z.ZodOptional<z.ZodString>;
18
+ languageCode: z.ZodOptional<z.ZodString>;
19
+ mode: z.ZodDefault<z.ZodEnum<{
20
+ std: "std";
21
+ pro: "pro";
22
+ }>>;
23
+ prompt: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ declare const OutputSchema: z.ZodObject<{
26
+ status: z.ZodLiteral<"triggered">;
27
+ taskId: z.ZodString;
28
+ audioUrl: z.ZodString;
29
+ }, z.core.$strip>;
30
+ export declare const generateAvatarVideoTool: ToolDefinition<typeof InputSchema, typeof OutputSchema>;
31
+ export {};
32
+ //# sourceMappingURL=generateAvatarVideo.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAvatarVideo.tool.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/tools/generateAvatarVideo.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EAAgB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE/D;;;;;;;;;GASG;AAEH,QAAA,MAAM,WAAW;;;;;;;;;;;iBAiCb,CAAC;AAEL,QAAA,MAAM,YAAY;;;;iBAIhB,CAAC;AAEH,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAClD,OAAO,WAAW,EAClB,OAAO,YAAY,CA0DpB,CAAC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAvatarVideoTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const aiModels_1 = require("../../../globals/aiModels");
6
+ const firebase_1 = require("../../../libs/firebase");
7
+ const aiGenFactory_service_1 = require("../../aiGen/aiGenFactory.service");
8
+ const types_1 = require("../../aiGen/types");
9
+ const ttsFactory_service_1 = require("../../tts/ttsFactory.service");
10
+ const toolRegistry_1 = require("../toolRegistry");
11
+ /**
12
+ * generate_avatar_video — wraps the existing kling-avatar pipeline so the
13
+ * planner's `talking-head-avatar` scene strategy is executable. Accepts a
14
+ * presenter face image URL plus either a pre-uploaded audio URL or raw TTS
15
+ * text (in which case the tool synthesizes via ElevenLabs and uploads to GCS
16
+ * before handing off, since Kling avatar requires a public sound_file URL).
17
+ *
18
+ * Returns a provider task id; the executor / monitor layer polls completion
19
+ * exactly as it does for generate_video.
20
+ */
21
+ const InputSchema = zod_1.z
22
+ .object({
23
+ inputImageUrl: zod_1.z
24
+ .string()
25
+ .url()
26
+ .describe("Presenter face still — Kling animates this image to lipsync the audio."),
27
+ ttsText: zod_1.z
28
+ .string()
29
+ .min(1)
30
+ .optional()
31
+ .describe("VO line to synthesize. Either ttsText or inputAudioUrl must be set; if both are set, inputAudioUrl wins."),
32
+ inputAudioUrl: zod_1.z
33
+ .string()
34
+ .url()
35
+ .optional()
36
+ .describe("Pre-uploaded audio URL (mp3/wav). Skips internal TTS+upload."),
37
+ voiceId: zod_1.z.string().optional(),
38
+ languageCode: zod_1.z.string().optional(),
39
+ mode: zod_1.z.enum(["std", "pro"]).default("std"),
40
+ prompt: zod_1.z
41
+ .string()
42
+ .optional()
43
+ .describe("Optional motion/emotion hint passed through to Kling."),
44
+ })
45
+ .superRefine((v, ctx) => {
46
+ if (!v.ttsText && !v.inputAudioUrl) {
47
+ ctx.addIssue({
48
+ code: zod_1.z.ZodIssueCode.custom,
49
+ message: "Either ttsText or inputAudioUrl is required.",
50
+ });
51
+ }
52
+ });
53
+ const OutputSchema = zod_1.z.object({
54
+ status: zod_1.z.literal("triggered"),
55
+ taskId: zod_1.z.string(),
56
+ audioUrl: zod_1.z.string().url().describe("Audio URL fed to Kling — host can reuse for caption sync."),
57
+ });
58
+ exports.generateAvatarVideoTool = {
59
+ name: "generate_avatar_video",
60
+ description: [
61
+ "Generate a talking-head avatar video by animating a presenter face still",
62
+ "to lipsync a voiceover. Wraps the kling-avatar provider.",
63
+ "Use this for the `talking-head-avatar` scene strategy. Do NOT use it for",
64
+ "general motion shots — generate_video is cheaper and more flexible there.",
65
+ "Examples:",
66
+ ' { inputImageUrl: "https://.../face.png", ttsText: "Hi, today we\'re testing the new serum." }',
67
+ ' { inputImageUrl: "https://.../face.png", inputAudioUrl: "https://.../vo.mp3", mode: "pro" }',
68
+ ].join(" "),
69
+ inputSchema: InputSchema,
70
+ outputSchema: OutputSchema,
71
+ idempotent: false,
72
+ estimateCost: async (input) => {
73
+ // Kling avatar bills per audio second. Without a length we assume 6s (typical scene).
74
+ const approxSec = input.ttsText ? Math.max(2, Math.ceil(input.ttsText.length / 15)) : 6;
75
+ const perSec = input.mode === "pro" ? 0.028 : 0.014;
76
+ return Math.ceil(approxSec * perSec * 100); // rough credit conversion
77
+ },
78
+ handler: async (input, ctx) => {
79
+ let audioUrl = input.inputAudioUrl;
80
+ if (!audioUrl) {
81
+ const tts = (0, ttsFactory_service_1.getTtsProviderService)("elevenlabs");
82
+ const result = await tts.generate({
83
+ text: input.ttsText,
84
+ voiceId: input.voiceId,
85
+ languageCode: input.languageCode,
86
+ });
87
+ const filePath = `agent-avatar-audio/${ctx.userId}/${ctx.agentRunId}-${Date.now()}.${result.extension}`;
88
+ const file = (0, firebase_1.getBucket)().file(filePath);
89
+ await file.save(result.audioBuffer, { contentType: result.mimeType });
90
+ const [signedUrl] = await file.getSignedUrl({ action: "read", expires: "03-09-2491" });
91
+ audioUrl = signedUrl;
92
+ }
93
+ const provider = (0, aiGenFactory_service_1.getAiGenProviderService)(aiModels_1.EVideoGenModels.KLING_AVATAR);
94
+ const result = await provider.generateVideo({
95
+ modelKey: aiModels_1.EVideoGenModels.KLING_AVATAR,
96
+ prompt: input.prompt,
97
+ inputImageUrl: input.inputImageUrl,
98
+ inputAudioUrl: audioUrl,
99
+ mode: input.mode === "pro" ? types_1.EVideoMode.PROFESSIONAL : types_1.EVideoMode.STANDARD,
100
+ type: "image-to-video",
101
+ });
102
+ const taskId = result.task?.taskId ??
103
+ result.task?.id ??
104
+ (typeof result.task === "string" ? result.task : "unknown");
105
+ return {
106
+ status: "triggered",
107
+ taskId,
108
+ audioUrl: audioUrl,
109
+ };
110
+ },
111
+ };
112
+ (0, toolRegistry_1.registerTool)(exports.generateAvatarVideoTool);