vidspotai-shared 1.0.82 → 1.0.83

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 (442) hide show
  1. package/lib/globals/aiModels/enums.d.ts +11 -1
  2. package/lib/globals/aiModels/enums.d.ts.map +1 -1
  3. package/lib/globals/aiModels/enums.js +24 -1
  4. package/lib/globals/aiModels/index.d.ts.map +1 -1
  5. package/lib/globals/aiModels/index.js +2 -0
  6. package/lib/globals/aiModels/providers/anthropic.d.ts +12 -0
  7. package/lib/globals/aiModels/providers/anthropic.d.ts.map +1 -0
  8. package/lib/globals/aiModels/providers/anthropic.js +88 -0
  9. package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
  10. package/lib/globals/aiModels/providers/google.js +82 -0
  11. package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
  12. package/lib/globals/aiModels/providers/openai.js +63 -4
  13. package/lib/globals/aiModels/tierHelpers.d.ts +12 -0
  14. package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -1
  15. package/lib/globals/aiModels/tierHelpers.js +83 -0
  16. package/lib/globals/aiModels/types.d.ts +19 -0
  17. package/lib/globals/aiModels/types.d.ts.map +1 -1
  18. package/lib/globals/types.d.ts +120 -1
  19. package/lib/globals/types.d.ts.map +1 -1
  20. package/lib/globals/types.js +135 -1
  21. package/lib/models/agent.model.d.ts +41 -1
  22. package/lib/models/agent.model.d.ts.map +1 -1
  23. package/lib/models/index.d.ts +1 -0
  24. package/lib/models/index.d.ts.map +1 -1
  25. package/lib/models/index.js +1 -0
  26. package/lib/models/social.model.d.ts +180 -0
  27. package/lib/models/social.model.d.ts.map +1 -0
  28. package/lib/models/social.model.js +2 -0
  29. package/lib/models/user.model.d.ts +10 -0
  30. package/lib/models/user.model.d.ts.map +1 -1
  31. package/lib/models/video.model.d.ts +6 -0
  32. package/lib/models/video.model.d.ts.map +1 -1
  33. package/lib/schemas/brief.schema.d.ts +46 -0
  34. package/lib/schemas/brief.schema.d.ts.map +1 -1
  35. package/lib/schemas/brief.schema.js +72 -1
  36. package/lib/schemas/index.d.ts +1 -0
  37. package/lib/schemas/index.d.ts.map +1 -1
  38. package/lib/schemas/index.js +1 -0
  39. package/lib/schemas/project.schema.d.ts +67 -0
  40. package/lib/schemas/project.schema.d.ts.map +1 -1
  41. package/lib/schemas/project.schema.js +12 -0
  42. package/lib/schemas/social.schema.d.ts +91 -0
  43. package/lib/schemas/social.schema.d.ts.map +1 -0
  44. package/lib/schemas/social.schema.js +114 -0
  45. package/lib/schemas/videoPlan.schema.d.ts +114 -0
  46. package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
  47. package/lib/schemas/videoPlan.schema.js +141 -1
  48. package/lib/services/agent/chatAgent.d.ts +25 -1
  49. package/lib/services/agent/chatAgent.d.ts.map +1 -1
  50. package/lib/services/agent/chatAgent.js +145 -9
  51. package/lib/services/agent/costPreflight.d.ts +11 -1
  52. package/lib/services/agent/costPreflight.d.ts.map +1 -1
  53. package/lib/services/agent/costPreflight.js +18 -1
  54. package/lib/services/agent/covers/coverPlanner.d.ts +41 -0
  55. package/lib/services/agent/covers/coverPlanner.d.ts.map +1 -0
  56. package/lib/services/agent/covers/coverPlanner.js +278 -0
  57. package/lib/services/agent/covers/covers.schema.d.ts +158 -0
  58. package/lib/services/agent/covers/covers.schema.d.ts.map +1 -0
  59. package/lib/services/agent/covers/covers.schema.js +166 -0
  60. package/lib/services/agent/covers/index.d.ts +3 -0
  61. package/lib/services/agent/covers/index.d.ts.map +1 -0
  62. package/lib/services/agent/covers/index.js +18 -0
  63. package/lib/services/agent/critic.d.ts +10 -0
  64. package/lib/services/agent/critic.d.ts.map +1 -1
  65. package/lib/services/agent/critic.js +37 -1
  66. package/lib/services/agent/editClassifier.d.ts +2 -2
  67. package/lib/services/agent/editClassifier.js +2 -2
  68. package/lib/services/agent/editExisting/editAssembler.d.ts +78 -0
  69. package/lib/services/agent/editExisting/editAssembler.d.ts.map +1 -0
  70. package/lib/services/agent/editExisting/editAssembler.js +172 -0
  71. package/lib/services/agent/editExisting/editExisting.schema.d.ts +119 -0
  72. package/lib/services/agent/editExisting/editExisting.schema.d.ts.map +1 -0
  73. package/lib/services/agent/editExisting/editExisting.schema.js +157 -0
  74. package/lib/services/agent/editExisting/highlightPicker.d.ts +48 -0
  75. package/lib/services/agent/editExisting/highlightPicker.d.ts.map +1 -0
  76. package/lib/services/agent/editExisting/highlightPicker.js +199 -0
  77. package/lib/services/agent/editExisting/index.d.ts +4 -0
  78. package/lib/services/agent/editExisting/index.d.ts.map +1 -0
  79. package/lib/services/agent/editExisting/index.js +19 -0
  80. package/lib/services/agent/eval/seedBriefs.d.ts +4 -3
  81. package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -1
  82. package/lib/services/agent/eval/seedBriefs.js +283 -3
  83. package/lib/services/agent/eval/types.d.ts +10 -0
  84. package/lib/services/agent/eval/types.d.ts.map +1 -1
  85. package/lib/services/agent/executor/core.d.ts +70 -0
  86. package/lib/services/agent/executor/core.d.ts.map +1 -0
  87. package/lib/services/agent/executor/core.js +250 -0
  88. package/lib/services/agent/executor/duration.d.ts +20 -0
  89. package/lib/services/agent/executor/duration.d.ts.map +1 -0
  90. package/lib/services/agent/executor/duration.js +46 -0
  91. package/lib/services/agent/executor/index.d.ts +15 -0
  92. package/lib/services/agent/executor/index.d.ts.map +1 -0
  93. package/lib/services/agent/executor/index.js +32 -0
  94. package/lib/services/agent/executor/types.d.ts +183 -0
  95. package/lib/services/agent/executor/types.d.ts.map +1 -0
  96. package/lib/services/agent/executor/types.js +29 -0
  97. package/lib/services/agent/executor/visual.d.ts +32 -0
  98. package/lib/services/agent/executor/visual.d.ts.map +1 -0
  99. package/lib/services/agent/executor/visual.js +400 -0
  100. package/lib/services/agent/executor/voice.d.ts +17 -0
  101. package/lib/services/agent/executor/voice.d.ts.map +1 -0
  102. package/lib/services/agent/executor/voice.js +119 -0
  103. package/lib/services/agent/extendChain.d.ts +101 -0
  104. package/lib/services/agent/extendChain.d.ts.map +1 -0
  105. package/lib/services/agent/extendChain.js +177 -0
  106. package/lib/services/agent/index.d.ts +11 -1
  107. package/lib/services/agent/index.d.ts.map +1 -1
  108. package/lib/services/agent/index.js +11 -1
  109. package/lib/services/agent/llmCaller.d.ts +7 -8
  110. package/lib/services/agent/llmCaller.d.ts.map +1 -1
  111. package/lib/services/agent/llmCallerAnthropic.d.ts +44 -31
  112. package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -1
  113. package/lib/services/agent/llmCallerAnthropic.js +135 -60
  114. package/lib/services/agent/llmCallerFactory.d.ts +34 -0
  115. package/lib/services/agent/llmCallerFactory.d.ts.map +1 -0
  116. package/lib/services/agent/llmCallerFactory.js +31 -0
  117. package/lib/services/agent/llmCallerGemini.d.ts +62 -0
  118. package/lib/services/agent/llmCallerGemini.d.ts.map +1 -0
  119. package/lib/services/agent/llmCallerGemini.js +235 -0
  120. package/lib/services/agent/llmCallerOpenai.d.ts +56 -0
  121. package/lib/services/agent/llmCallerOpenai.d.ts.map +1 -0
  122. package/lib/services/agent/llmCallerOpenai.js +230 -0
  123. package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -1
  124. package/lib/services/agent/llmCallerRegistry.js +7 -7
  125. package/lib/services/agent/llmCallerRouting.d.ts +63 -0
  126. package/lib/services/agent/llmCallerRouting.d.ts.map +1 -0
  127. package/lib/services/agent/llmCallerRouting.js +124 -0
  128. package/lib/services/agent/llmModelRegistry.d.ts +59 -0
  129. package/lib/services/agent/llmModelRegistry.d.ts.map +1 -0
  130. package/lib/services/agent/llmModelRegistry.js +168 -0
  131. package/lib/services/agent/llmRetry.d.ts +57 -0
  132. package/lib/services/agent/llmRetry.d.ts.map +1 -0
  133. package/lib/services/agent/llmRetry.js +102 -0
  134. package/lib/services/agent/modelRouter.d.ts +3 -3
  135. package/lib/services/agent/modelRouter.d.ts.map +1 -1
  136. package/lib/services/agent/modelRouter.js +27 -13
  137. package/lib/services/agent/planMutations.d.ts +54 -1
  138. package/lib/services/agent/planMutations.d.ts.map +1 -1
  139. package/lib/services/agent/planMutations.js +78 -0
  140. package/lib/services/agent/planner/Planner.d.ts +0 -17
  141. package/lib/services/agent/planner/Planner.d.ts.map +1 -1
  142. package/lib/services/agent/planner/Planner.js +67 -303
  143. package/lib/services/agent/planner/overlayRegen.d.ts +38 -0
  144. package/lib/services/agent/planner/overlayRegen.d.ts.map +1 -0
  145. package/lib/services/agent/planner/overlayRegen.js +145 -0
  146. package/lib/services/agent/planner/plannerMessages.d.ts +34 -0
  147. package/lib/services/agent/planner/plannerMessages.d.ts.map +1 -0
  148. package/lib/services/agent/planner/plannerMessages.js +185 -0
  149. package/lib/services/agent/planner/promptSections.d.ts +12 -0
  150. package/lib/services/agent/planner/promptSections.d.ts.map +1 -1
  151. package/lib/services/agent/planner/promptSections.js +57 -0
  152. package/lib/services/agent/planner/scriptFirstPlanner.d.ts +35 -0
  153. package/lib/services/agent/planner/scriptFirstPlanner.d.ts.map +1 -0
  154. package/lib/services/agent/planner/scriptFirstPlanner.js +140 -0
  155. package/lib/services/agent/planner/structuralRules.d.ts +10 -0
  156. package/lib/services/agent/planner/structuralRules.d.ts.map +1 -1
  157. package/lib/services/agent/planner/structuralRules.js +92 -9
  158. package/lib/services/agent/planner/validators.d.ts +18 -0
  159. package/lib/services/agent/planner/validators.d.ts.map +1 -1
  160. package/lib/services/agent/planner/validators.js +97 -0
  161. package/lib/services/agent/planner.d.ts +2 -1
  162. package/lib/services/agent/planner.d.ts.map +1 -1
  163. package/lib/services/agent/planner.js +5 -1
  164. package/lib/services/agent/priorProject.d.ts +26 -0
  165. package/lib/services/agent/priorProject.d.ts.map +1 -0
  166. package/lib/services/agent/priorProject.js +51 -0
  167. package/lib/services/agent/providerFallback/chains.d.ts.map +1 -1
  168. package/lib/services/agent/providerFallback/chains.js +27 -15
  169. package/lib/services/agent/repurpose/index.d.ts +3 -0
  170. package/lib/services/agent/repurpose/index.d.ts.map +1 -0
  171. package/lib/services/agent/repurpose/index.js +18 -0
  172. package/lib/services/agent/repurpose/repurpose.schema.d.ts +132 -0
  173. package/lib/services/agent/repurpose/repurpose.schema.d.ts.map +1 -0
  174. package/lib/services/agent/repurpose/repurpose.schema.js +144 -0
  175. package/lib/services/agent/repurpose/shortsPicker.d.ts +25 -0
  176. package/lib/services/agent/repurpose/shortsPicker.d.ts.map +1 -0
  177. package/lib/services/agent/repurpose/shortsPicker.js +218 -0
  178. package/lib/services/agent/runHelpers.d.ts +21 -2
  179. package/lib/services/agent/runHelpers.d.ts.map +1 -1
  180. package/lib/services/agent/runHelpers.js +71 -2
  181. package/lib/services/agent/tools/animateImage.tool.d.ts +1 -0
  182. package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -1
  183. package/lib/services/agent/tools/animateImage.tool.js +12 -0
  184. package/lib/services/agent/tools/chapterOutline.tool.d.ts +42 -0
  185. package/lib/services/agent/tools/chapterOutline.tool.d.ts.map +1 -0
  186. package/lib/services/agent/tools/chapterOutline.tool.js +115 -0
  187. package/lib/services/agent/tools/composeScene.tool.d.ts +63 -0
  188. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
  189. package/lib/services/agent/tools/estimateCost.tool.d.ts +27 -0
  190. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
  191. package/lib/services/agent/tools/estimateCost.tool.js +55 -7
  192. package/lib/services/agent/tools/extendVideo.tool.d.ts +26 -0
  193. package/lib/services/agent/tools/extendVideo.tool.d.ts.map +1 -0
  194. package/lib/services/agent/tools/extendVideo.tool.js +149 -0
  195. package/lib/services/agent/tools/generateScript.tool.d.ts +184 -0
  196. package/lib/services/agent/tools/generateScript.tool.d.ts.map +1 -0
  197. package/lib/services/agent/tools/generateScript.tool.js +123 -0
  198. package/lib/services/agent/tools/generateVideo.tool.d.ts +1 -0
  199. package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -1
  200. package/lib/services/agent/tools/generateVideo.tool.js +20 -1
  201. package/lib/services/agent/tools/index.d.ts +4 -0
  202. package/lib/services/agent/tools/index.d.ts.map +1 -1
  203. package/lib/services/agent/tools/index.js +4 -0
  204. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts +50 -0
  205. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts.map +1 -0
  206. package/lib/services/agent/tools/matchBrollToScript.tool.js +139 -0
  207. package/lib/services/agent/tools/planVideo.tool.d.ts +56 -0
  208. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
  209. package/lib/services/agent/tools/planVideo.tool.js +3 -3
  210. package/lib/services/agent/tools/render.tool.d.ts +21 -0
  211. package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
  212. package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
  213. package/lib/services/aiGen/aiGenFactory.service.js +18 -3
  214. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts +26 -0
  215. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts.map +1 -0
  216. package/lib/services/aiGen/providers/anthropic/anthropic.service.js +95 -0
  217. package/lib/services/aiGen/providers/google/google.service.d.ts +24 -1
  218. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  219. package/lib/services/aiGen/providers/google/google.service.js +87 -243
  220. package/lib/services/aiGen/providers/google/googleErrors.d.ts +13 -0
  221. package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -0
  222. package/lib/services/aiGen/providers/google/googleErrors.js +102 -0
  223. package/lib/services/aiGen/providers/google/googleFetch.d.ts +8 -0
  224. package/lib/services/aiGen/providers/google/googleFetch.d.ts.map +1 -0
  225. package/lib/services/aiGen/providers/google/googleFetch.js +96 -0
  226. package/lib/services/aiGen/providers/google/googleMusic.d.ts +15 -0
  227. package/lib/services/aiGen/providers/google/googleMusic.d.ts.map +1 -0
  228. package/lib/services/aiGen/providers/google/googleMusic.js +77 -0
  229. package/lib/services/aiGen/providers/kling/kling.service.d.ts +7 -3
  230. package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
  231. package/lib/services/aiGen/providers/kling/kling.service.js +23 -367
  232. package/lib/services/aiGen/providers/kling/klingCredits.d.ts +9 -0
  233. package/lib/services/aiGen/providers/kling/klingCredits.d.ts.map +1 -0
  234. package/lib/services/aiGen/providers/kling/klingCredits.js +63 -0
  235. package/lib/services/aiGen/providers/kling/klingRequests.d.ts +32 -0
  236. package/lib/services/aiGen/providers/kling/klingRequests.d.ts.map +1 -0
  237. package/lib/services/aiGen/providers/kling/klingRequests.js +194 -0
  238. package/lib/services/aiGen/providers/kling/klingStatus.d.ts +16 -0
  239. package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -0
  240. package/lib/services/aiGen/providers/kling/klingStatus.js +173 -0
  241. package/lib/services/bullmq.service.d.ts +61 -0
  242. package/lib/services/bullmq.service.d.ts.map +1 -1
  243. package/lib/services/bullmq.service.js +101 -1
  244. package/lib/services/crypto/index.d.ts +2 -0
  245. package/lib/services/crypto/index.d.ts.map +1 -0
  246. package/lib/services/crypto/index.js +17 -0
  247. package/lib/services/crypto/tokenVault.d.ts +47 -0
  248. package/lib/services/crypto/tokenVault.d.ts.map +1 -0
  249. package/lib/services/crypto/tokenVault.js +179 -0
  250. package/lib/services/editor/captionStyleHint.d.ts +3 -0
  251. package/lib/services/editor/captionStyleHint.d.ts.map +1 -0
  252. package/lib/services/editor/captionStyleHint.js +112 -0
  253. package/lib/services/editor/planToProject.d.ts +7 -66
  254. package/lib/services/editor/planToProject.d.ts.map +1 -1
  255. package/lib/services/editor/planToProject.helpers.d.ts +40 -0
  256. package/lib/services/editor/planToProject.helpers.d.ts.map +1 -0
  257. package/lib/services/editor/planToProject.helpers.js +177 -0
  258. package/lib/services/editor/planToProject.js +197 -180
  259. package/lib/services/editor/planToProject.types.d.ts +94 -0
  260. package/lib/services/editor/planToProject.types.d.ts.map +1 -0
  261. package/lib/services/editor/planToProject.types.js +2 -0
  262. package/lib/services/firestore.service.d.ts +5 -0
  263. package/lib/services/firestore.service.d.ts.map +1 -1
  264. package/lib/services/firestore.service.js +13 -0
  265. package/lib/services/index.d.ts +12 -0
  266. package/lib/services/index.d.ts.map +1 -1
  267. package/lib/services/index.js +12 -0
  268. package/lib/services/promptEnhancer/index.d.ts +18 -0
  269. package/lib/services/promptEnhancer/index.d.ts.map +1 -0
  270. package/lib/services/promptEnhancer/index.js +33 -0
  271. package/lib/services/promptEnhancer/models.d.ts +54 -0
  272. package/lib/services/promptEnhancer/models.d.ts.map +1 -0
  273. package/lib/services/promptEnhancer/models.js +37 -0
  274. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts +14 -0
  275. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts.map +1 -0
  276. package/lib/services/promptEnhancer/profiles/agent.profile.js +40 -0
  277. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts +13 -0
  278. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts.map +1 -0
  279. package/lib/services/promptEnhancer/profiles/avatar.profile.js +40 -0
  280. package/lib/services/promptEnhancer/profiles/base.d.ts +28 -0
  281. package/lib/services/promptEnhancer/profiles/base.d.ts.map +1 -0
  282. package/lib/services/promptEnhancer/profiles/base.js +35 -0
  283. package/lib/services/promptEnhancer/profiles/image.profile.d.ts +11 -0
  284. package/lib/services/promptEnhancer/profiles/image.profile.d.ts.map +1 -0
  285. package/lib/services/promptEnhancer/profiles/image.profile.js +42 -0
  286. package/lib/services/promptEnhancer/profiles/index.d.ts +12 -0
  287. package/lib/services/promptEnhancer/profiles/index.d.ts.map +1 -0
  288. package/lib/services/promptEnhancer/profiles/index.js +33 -0
  289. package/lib/services/promptEnhancer/profiles/video.profile.d.ts +15 -0
  290. package/lib/services/promptEnhancer/profiles/video.profile.d.ts.map +1 -0
  291. package/lib/services/promptEnhancer/profiles/video.profile.js +81 -0
  292. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts +45 -0
  293. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts.map +1 -0
  294. package/lib/services/promptEnhancer/promptEnhancer.service.js +157 -0
  295. package/lib/services/promptEnhancer/schema.d.ts +19 -0
  296. package/lib/services/promptEnhancer/schema.d.ts.map +1 -0
  297. package/lib/services/promptEnhancer/schema.js +43 -0
  298. package/lib/services/promptEnhancer/types.d.ts +112 -0
  299. package/lib/services/promptEnhancer/types.d.ts.map +1 -0
  300. package/lib/services/promptEnhancer/types.js +2 -0
  301. package/lib/services/socialAI/captionGen.d.ts +81 -0
  302. package/lib/services/socialAI/captionGen.d.ts.map +1 -0
  303. package/lib/services/socialAI/captionGen.js +206 -0
  304. package/lib/services/socialAI/hookScore.d.ts +85 -0
  305. package/lib/services/socialAI/hookScore.d.ts.map +1 -0
  306. package/lib/services/socialAI/hookScore.js +170 -0
  307. package/lib/services/socialAI/index.d.ts +3 -0
  308. package/lib/services/socialAI/index.d.ts.map +1 -0
  309. package/lib/services/socialAI/index.js +18 -0
  310. package/lib/services/socialAccounts/index.d.ts +2 -0
  311. package/lib/services/socialAccounts/index.d.ts.map +1 -0
  312. package/lib/services/socialAccounts/index.js +17 -0
  313. package/lib/services/socialAccounts/socialAccountService.d.ts +25 -0
  314. package/lib/services/socialAccounts/socialAccountService.d.ts.map +1 -0
  315. package/lib/services/socialAccounts/socialAccountService.js +105 -0
  316. package/lib/services/socialEngage/factory.d.ts +7 -0
  317. package/lib/services/socialEngage/factory.d.ts.map +1 -0
  318. package/lib/services/socialEngage/factory.js +25 -0
  319. package/lib/services/socialEngage/index.d.ts +6 -0
  320. package/lib/services/socialEngage/index.d.ts.map +1 -0
  321. package/lib/services/socialEngage/index.js +21 -0
  322. package/lib/services/socialEngage/meta.engage.d.ts +17 -0
  323. package/lib/services/socialEngage/meta.engage.d.ts.map +1 -0
  324. package/lib/services/socialEngage/meta.engage.js +128 -0
  325. package/lib/services/socialEngage/metaWebhook.d.ts +50 -0
  326. package/lib/services/socialEngage/metaWebhook.d.ts.map +1 -0
  327. package/lib/services/socialEngage/metaWebhook.js +93 -0
  328. package/lib/services/socialEngage/types.d.ts +72 -0
  329. package/lib/services/socialEngage/types.d.ts.map +1 -0
  330. package/lib/services/socialEngage/types.js +10 -0
  331. package/lib/services/socialEngage/youtube.engage.d.ts +9 -0
  332. package/lib/services/socialEngage/youtube.engage.d.ts.map +1 -0
  333. package/lib/services/socialEngage/youtube.engage.js +87 -0
  334. package/lib/services/socialFormat/aspectGeometry.d.ts +74 -0
  335. package/lib/services/socialFormat/aspectGeometry.d.ts.map +1 -0
  336. package/lib/services/socialFormat/aspectGeometry.js +135 -0
  337. package/lib/services/socialFormat/index.d.ts +2 -0
  338. package/lib/services/socialFormat/index.d.ts.map +1 -0
  339. package/lib/services/socialFormat/index.js +19 -0
  340. package/lib/services/socialInsights/index.d.ts +3 -0
  341. package/lib/services/socialInsights/index.d.ts.map +1 -0
  342. package/lib/services/socialInsights/index.js +18 -0
  343. package/lib/services/socialInsights/recommendations.d.ts +131 -0
  344. package/lib/services/socialInsights/recommendations.d.ts.map +1 -0
  345. package/lib/services/socialInsights/recommendations.js +277 -0
  346. package/lib/services/socialInsights/timeBuckets.d.ts +35 -0
  347. package/lib/services/socialInsights/timeBuckets.d.ts.map +1 -0
  348. package/lib/services/socialInsights/timeBuckets.js +78 -0
  349. package/lib/services/socialMetrics/factory.d.ts +5 -0
  350. package/lib/services/socialMetrics/factory.d.ts.map +1 -0
  351. package/lib/services/socialMetrics/factory.js +24 -0
  352. package/lib/services/socialMetrics/index.d.ts +6 -0
  353. package/lib/services/socialMetrics/index.d.ts.map +1 -0
  354. package/lib/services/socialMetrics/index.js +21 -0
  355. package/lib/services/socialMetrics/meta.metrics.d.ts +22 -0
  356. package/lib/services/socialMetrics/meta.metrics.d.ts.map +1 -0
  357. package/lib/services/socialMetrics/meta.metrics.js +137 -0
  358. package/lib/services/socialMetrics/tiktok.metrics.d.ts +8 -0
  359. package/lib/services/socialMetrics/tiktok.metrics.d.ts.map +1 -0
  360. package/lib/services/socialMetrics/tiktok.metrics.js +43 -0
  361. package/lib/services/socialMetrics/types.d.ts +54 -0
  362. package/lib/services/socialMetrics/types.d.ts.map +1 -0
  363. package/lib/services/socialMetrics/types.js +2 -0
  364. package/lib/services/socialMetrics/youtube.metrics.d.ts +8 -0
  365. package/lib/services/socialMetrics/youtube.metrics.d.ts.map +1 -0
  366. package/lib/services/socialMetrics/youtube.metrics.js +43 -0
  367. package/lib/services/socialOAuth/factory.d.ts +7 -0
  368. package/lib/services/socialOAuth/factory.d.ts.map +1 -0
  369. package/lib/services/socialOAuth/factory.js +42 -0
  370. package/lib/services/socialOAuth/index.d.ts +11 -0
  371. package/lib/services/socialOAuth/index.d.ts.map +1 -0
  372. package/lib/services/socialOAuth/index.js +26 -0
  373. package/lib/services/socialOAuth/linkedin.oauth.d.ts +14 -0
  374. package/lib/services/socialOAuth/linkedin.oauth.d.ts.map +1 -0
  375. package/lib/services/socialOAuth/linkedin.oauth.js +127 -0
  376. package/lib/services/socialOAuth/meta.oauth.d.ts +31 -0
  377. package/lib/services/socialOAuth/meta.oauth.d.ts.map +1 -0
  378. package/lib/services/socialOAuth/meta.oauth.js +214 -0
  379. package/lib/services/socialOAuth/oauthState.d.ts +14 -0
  380. package/lib/services/socialOAuth/oauthState.d.ts.map +1 -0
  381. package/lib/services/socialOAuth/oauthState.js +66 -0
  382. package/lib/services/socialOAuth/pinterest.oauth.d.ts +15 -0
  383. package/lib/services/socialOAuth/pinterest.oauth.d.ts.map +1 -0
  384. package/lib/services/socialOAuth/pinterest.oauth.js +126 -0
  385. package/lib/services/socialOAuth/threads.oauth.d.ts +14 -0
  386. package/lib/services/socialOAuth/threads.oauth.d.ts.map +1 -0
  387. package/lib/services/socialOAuth/threads.oauth.js +129 -0
  388. package/lib/services/socialOAuth/tiktok.oauth.d.ts +15 -0
  389. package/lib/services/socialOAuth/tiktok.oauth.d.ts.map +1 -0
  390. package/lib/services/socialOAuth/tiktok.oauth.js +151 -0
  391. package/lib/services/socialOAuth/types.d.ts +67 -0
  392. package/lib/services/socialOAuth/types.d.ts.map +1 -0
  393. package/lib/services/socialOAuth/types.js +2 -0
  394. package/lib/services/socialOAuth/x.oauth.d.ts +17 -0
  395. package/lib/services/socialOAuth/x.oauth.d.ts.map +1 -0
  396. package/lib/services/socialOAuth/x.oauth.js +134 -0
  397. package/lib/services/socialOAuth/youtube.oauth.d.ts +15 -0
  398. package/lib/services/socialOAuth/youtube.oauth.d.ts.map +1 -0
  399. package/lib/services/socialOAuth/youtube.oauth.js +156 -0
  400. package/lib/services/socialPublish/factory.d.ts +5 -0
  401. package/lib/services/socialPublish/factory.d.ts.map +1 -0
  402. package/lib/services/socialPublish/factory.js +32 -0
  403. package/lib/services/socialPublish/index.d.ts +10 -0
  404. package/lib/services/socialPublish/index.d.ts.map +1 -0
  405. package/lib/services/socialPublish/index.js +25 -0
  406. package/lib/services/socialPublish/linkedin.publish.d.ts +9 -0
  407. package/lib/services/socialPublish/linkedin.publish.d.ts.map +1 -0
  408. package/lib/services/socialPublish/linkedin.publish.js +143 -0
  409. package/lib/services/socialPublish/meta.publish.d.ts +28 -0
  410. package/lib/services/socialPublish/meta.publish.d.ts.map +1 -0
  411. package/lib/services/socialPublish/meta.publish.js +149 -0
  412. package/lib/services/socialPublish/pinterest.publish.d.ts +13 -0
  413. package/lib/services/socialPublish/pinterest.publish.d.ts.map +1 -0
  414. package/lib/services/socialPublish/pinterest.publish.js +130 -0
  415. package/lib/services/socialPublish/threads.publish.d.ts +12 -0
  416. package/lib/services/socialPublish/threads.publish.d.ts.map +1 -0
  417. package/lib/services/socialPublish/threads.publish.js +96 -0
  418. package/lib/services/socialPublish/tiktok.publish.d.ts +13 -0
  419. package/lib/services/socialPublish/tiktok.publish.d.ts.map +1 -0
  420. package/lib/services/socialPublish/tiktok.publish.js +118 -0
  421. package/lib/services/socialPublish/types.d.ts +47 -0
  422. package/lib/services/socialPublish/types.d.ts.map +1 -0
  423. package/lib/services/socialPublish/types.js +2 -0
  424. package/lib/services/socialPublish/x.publish.d.ts +12 -0
  425. package/lib/services/socialPublish/x.publish.d.ts.map +1 -0
  426. package/lib/services/socialPublish/x.publish.js +147 -0
  427. package/lib/services/socialPublish/youtube.publish.d.ts +9 -0
  428. package/lib/services/socialPublish/youtube.publish.d.ts.map +1 -0
  429. package/lib/services/socialPublish/youtube.publish.js +107 -0
  430. package/lib/services/stock/index.d.ts +2 -0
  431. package/lib/services/stock/index.d.ts.map +1 -0
  432. package/lib/services/stock/index.js +17 -0
  433. package/lib/services/stock/realPersonSafety.d.ts +99 -0
  434. package/lib/services/stock/realPersonSafety.d.ts.map +1 -0
  435. package/lib/services/stock/realPersonSafety.js +248 -0
  436. package/lib/utils/index.d.ts +1 -0
  437. package/lib/utils/index.d.ts.map +1 -1
  438. package/lib/utils/index.js +1 -0
  439. package/lib/utils/renderTier.d.ts +26 -0
  440. package/lib/utils/renderTier.d.ts.map +1 -0
  441. package/lib/utils/renderTier.js +34 -0
  442. package/package.json +1 -1
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Executor = void 0;
4
+ const logger_1 = require("../../../utils/logger");
5
+ const toolRegistry_1 = require("../toolRegistry");
6
+ const ttsDuration_1 = require("../ttsDuration");
7
+ const providerTaskCache_1 = require("../providerTaskCache");
8
+ const voice_1 = require("./voice");
9
+ const visual_1 = require("./visual");
10
+ /**
11
+ * Executor — turns an approved VideoPlan into per-scene asset results.
12
+ *
13
+ * Plan-then-execute split (not free-form ReAct): the executor does NOT pick
14
+ * tools. The plan dictates which tool runs per scene; the executor only does
15
+ * the dispatch + per-scene parallelism + idempotency-key generation.
16
+ *
17
+ * Returns a SceneOutcome per scene, leaving composition (compose_scene),
18
+ * critique (Critic.review), and render to the orchestrator above. The
19
+ * per-scene VISUAL strategy switch lives in ./visual (runVisual); the voice
20
+ * resolution helpers in ./voice; the public types in ./types.
21
+ */
22
+ class Executor {
23
+ constructor(opts = {}) {
24
+ this.concurrency = opts.concurrency ?? 4;
25
+ this.runTool = opts.runTool ?? toolRegistry_1.runTool;
26
+ this.onSceneComplete = opts.onSceneComplete;
27
+ this.taskCache = opts.taskCache;
28
+ this.onTaskMint = opts.onTaskMint;
29
+ this.frozenVisualScenes = opts.frozenVisualScenes;
30
+ this.frozenVoiceoverScenes = opts.frozenVoiceoverScenes;
31
+ }
32
+ /**
33
+ * AG-11b: publish a scene's generated identity image so dependent scenes can
34
+ * anchor off it. Idempotent — first call wins (the still image is produced
35
+ * once per scene). No-op when the registry isn't initialised (e.g. runVisual
36
+ * driven outside run(), such as single-scene regen).
37
+ */
38
+ publishIdentityImage(sceneIndex, url) {
39
+ this.identityImages?.get(sceneIndex)?.resolve(url);
40
+ }
41
+ /**
42
+ * AG-11b: resolve the generated identity image of this scene's character
43
+ * anchor, or undefined when there's no anchor / no registry / the anchor
44
+ * produced no usable still (stock, pure t2v, avatar, or a failed scene).
45
+ * Self-references are ignored.
46
+ */
47
+ async resolveAnchorIdentityImage(scene) {
48
+ const anchorIdx = scene.characterAnchorSceneIndex;
49
+ if (anchorIdx == null || anchorIdx === scene.sceneIndex)
50
+ return undefined;
51
+ const entry = this.identityImages?.get(anchorIdx);
52
+ if (!entry)
53
+ return undefined;
54
+ const url = await entry.promise;
55
+ if (url) {
56
+ logger_1.logger.info("executor: AG-11b anchoring scene to character reference", {
57
+ sceneIndex: scene.sceneIndex,
58
+ anchorSceneIndex: anchorIdx,
59
+ });
60
+ }
61
+ return url;
62
+ }
63
+ /**
64
+ * Stage 7 slice 1 helper. Returns cached pending-task output if the
65
+ * upstream input hash matches and entry is within TTL; null otherwise.
66
+ * Logs the hit so trace shows where $$ was saved.
67
+ */
68
+ checkTaskCache(clipId, tool, input) {
69
+ const inputsHash = (0, providerTaskCache_1.hashTaskInputs)(input);
70
+ const hit = (0, providerTaskCache_1.getCachedTask)(this.taskCache, clipId, inputsHash);
71
+ if (hit) {
72
+ logger_1.logger.info("executor: task-cache hit", {
73
+ clipId,
74
+ tool,
75
+ modelKey: hit.modelKey,
76
+ taskId: hit.taskId,
77
+ ageMs: Date.now() - hit.createdAt,
78
+ });
79
+ }
80
+ return { hit, inputsHash };
81
+ }
82
+ /**
83
+ * Best-effort mint. Swallows callback errors — a Firestore blip must not
84
+ * fail the scene (the tool already succeeded and produced a real taskId).
85
+ */
86
+ async mintTaskCache(clipId, entry) {
87
+ if (!this.onTaskMint)
88
+ return;
89
+ try {
90
+ await this.onTaskMint(clipId, entry);
91
+ }
92
+ catch (err) {
93
+ logger_1.logger.warn("executor: onTaskMint callback threw — swallowed", {
94
+ clipId,
95
+ err: err.message,
96
+ });
97
+ }
98
+ }
99
+ /** Bundle the bound helpers runVisual needs (see VisualDeps). */
100
+ visualDeps() {
101
+ return {
102
+ runTool: this.runTool,
103
+ frozenVisualScenes: this.frozenVisualScenes,
104
+ checkTaskCache: (clipId, tool, input) => this.checkTaskCache(clipId, tool, input),
105
+ mintTaskCache: (clipId, entry) => this.mintTaskCache(clipId, entry),
106
+ publishIdentityImage: (sceneIndex, url) => this.publishIdentityImage(sceneIndex, url),
107
+ resolveAnchorIdentityImage: (scene) => this.resolveAnchorIdentityImage(scene),
108
+ };
109
+ }
110
+ async run(plan, ctx) {
111
+ const queue = [...plan.scenes];
112
+ const results = new Array(plan.scenes.length);
113
+ const workers = [];
114
+ let cursor = 0;
115
+ // AG-11b: stand up one identity-image deferred per scene before the workers
116
+ // start, so a dependent scene can await its anchor's still even if the
117
+ // anchor hasn't produced it yet.
118
+ this.identityImages = new Map();
119
+ for (const scene of queue) {
120
+ let resolve;
121
+ const promise = new Promise((r) => {
122
+ resolve = r;
123
+ });
124
+ this.identityImages.set(scene.sceneIndex, { promise, resolve });
125
+ }
126
+ const worker = async () => {
127
+ while (true) {
128
+ const i = cursor++;
129
+ if (i >= queue.length)
130
+ return;
131
+ const scene = queue[i];
132
+ const outcome = await this.runScene(scene, ctx, plan.aspect, plan);
133
+ // AG-11b: ensure this scene's identity deferred is settled (→ undefined
134
+ // for strategies that never published an image) so dependents on it
135
+ // never hang.
136
+ this.publishIdentityImage(scene.sceneIndex, undefined);
137
+ results[i] = outcome;
138
+ if (this.onSceneComplete) {
139
+ try {
140
+ await this.onSceneComplete(scene.sceneIndex, outcome);
141
+ }
142
+ catch (err) {
143
+ logger_1.logger.warn("executor: onSceneComplete callback threw — swallowed", {
144
+ sceneIndex: scene.sceneIndex,
145
+ err: err.message,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ };
151
+ for (let i = 0; i < Math.min(this.concurrency, queue.length); i++) {
152
+ workers.push(worker());
153
+ }
154
+ await Promise.all(workers);
155
+ return results;
156
+ }
157
+ async runScene(scene, ctx, aspect, plan) {
158
+ const start = Date.now();
159
+ const idempotencyKey = `${ctx.agentRunId}:scene-${scene.sceneIndex}`;
160
+ const sceneCtx = { ...ctx, idempotencyKey };
161
+ const visualOutcome = await (0, visual_1.runVisual)(this.visualDeps(), scene, sceneCtx, aspect, plan);
162
+ if (!visualOutcome.ok) {
163
+ return {
164
+ scene,
165
+ ok: false,
166
+ error: visualOutcome.error,
167
+ durationMs: Date.now() - start,
168
+ };
169
+ }
170
+ let voiceoverAudioBase64;
171
+ let voiceoverEstimateMs;
172
+ let voiceoverOverBudget = false;
173
+ // Gap #1 follow-up — skip-generation. VO preserved verbatim from a prior
174
+ // run: planToProject injects the frozen audio clip, so re-running TTS here
175
+ // just burns ElevenLabs credits for a result we discard.
176
+ const voiceoverFrozen = this.frozenVoiceoverScenes?.has(scene.sceneIndex) ?? false;
177
+ if (voiceoverFrozen) {
178
+ logger_1.logger.info("executor: skip-gen — voiceover frozen (preserved), no TTS call", {
179
+ sceneIndex: scene.sceneIndex,
180
+ });
181
+ }
182
+ // talking-head-avatar bakes the VO into the rendered MP4; running TTS again
183
+ // here would just waste credits and create a duplicate audio track.
184
+ if (scene.voiceoverLine && scene.strategy !== "talking-head-avatar" && !voiceoverFrozen) {
185
+ // AG-31: brief.voice.style → ElevenLabs voice_settings.
186
+ // AG-28: if estimated VO > scene.durationMs, speed up TTS within natural
187
+ // limits (≤1.15× extra over style.speed) before falling back to a
188
+ // freeze-frame-pad signal for the stitcher.
189
+ // AG-44: per-scene voiceStyle wins over plan-level when present, so the
190
+ // emotional arc can shift across the timeline (frustrated → curious → excited).
191
+ // AG-4: normalize freeform adjectives ('whispered', 'frustrated', …) onto
192
+ // the canonical VoiceStyle set before mapping to voice_settings, so the
193
+ // planned emotional arc isn't silently dropped on synonym drift.
194
+ const effectiveVoiceStyle = (0, voice_1.normalizeVoiceStyle)(scene.voiceStyle ?? plan.voiceStyle);
195
+ const baseSettings = (0, voice_1.resolveVoiceSettings)(effectiveVoiceStyle);
196
+ const baseSpeed = baseSettings.speed ?? 1.0;
197
+ const rawEstMs = (0, ttsDuration_1.estimateTtsMs)(scene.voiceoverLine);
198
+ const budgetMs = scene.durationMs * 1.05;
199
+ // Adjusted speed: only kick in if natural speech would overrun. Cap the
200
+ // speedup multiplier at 1.15× style-base; faster than that sounds rushed.
201
+ let speed = baseSpeed;
202
+ if (rawEstMs > budgetMs) {
203
+ const needed = rawEstMs / budgetMs;
204
+ const cappedMultiplier = Math.min(1.15, needed);
205
+ speed = +(baseSpeed * cappedMultiplier).toFixed(2);
206
+ }
207
+ const adjustedEstMs = rawEstMs * (baseSpeed / speed);
208
+ voiceoverEstimateMs = Math.round(adjustedEstMs);
209
+ voiceoverOverBudget = adjustedEstMs > budgetMs;
210
+ const voInput = {
211
+ text: scene.voiceoverLine,
212
+ ...baseSettings,
213
+ // Override speed when AG-28 budget forced an adjustment.
214
+ speed: +Math.max(0.7, Math.min(1.2, speed)).toFixed(2),
215
+ };
216
+ const sanitized = (0, voice_1.sanitizeVoiceId)(plan.voiceId);
217
+ if (sanitized)
218
+ voInput.voiceId = sanitized;
219
+ const voOutcome = await this.runTool("generate_voiceover", voInput, { ...sceneCtx, idempotencyKey: `${idempotencyKey}:vo` });
220
+ if (voOutcome.ok) {
221
+ voiceoverAudioBase64 = voOutcome.output.audioBase64;
222
+ }
223
+ else {
224
+ // AG-37: don't swallow silently — final video shipping muted with no
225
+ // log was the original bug. Surface the error in the result so the
226
+ // trace shows WHY VO is missing.
227
+ logger_1.logger.warn("executor: voiceover tool failed", {
228
+ sceneIndex: scene.sceneIndex,
229
+ error: voOutcome.error,
230
+ voiceIdRequested: plan.voiceId,
231
+ voiceIdSent: sanitized,
232
+ });
233
+ }
234
+ // Don't fail the whole scene on VO miss — host can re-run just the VO.
235
+ }
236
+ return {
237
+ scene,
238
+ ok: true,
239
+ result: {
240
+ ...visualOutcome.output,
241
+ voiceoverAudioBase64,
242
+ voiceoverEstimateMs,
243
+ voiceoverOverBudget,
244
+ idempotencyKey,
245
+ },
246
+ durationMs: Date.now() - start,
247
+ };
248
+ }
249
+ }
250
+ exports.Executor = Executor;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * OD-T7 / AG-42 — give the planner's `preferredModel` a chance to actually run
3
+ * when the scene duration is just slightly off from what the model accepts.
4
+ *
5
+ * Decision tree:
6
+ * 1. Model has no duration constraint → use planned duration
7
+ * 2. Planned duration already legal → use planned duration
8
+ * 3. Nearest legal is within snap tolerance → snap, log info
9
+ * 4. Outside tolerance + explicit preferredModel → log warn ("dropping
10
+ * planner pick — too far from any allowed value"); use planned duration
11
+ * anyway so the capability filter drops it and the chain fallback runs
12
+ * (the withFallback warn AG-42 also logs there now)
13
+ *
14
+ * We intentionally do NOT throw — throwing would crash a scene mid-run and
15
+ * lose all the other planner output. The graceful fallback chain already
16
+ * exists; this helper just keeps the planner's pick alive when the drift is
17
+ * small, and makes the drop visible when it isn't.
18
+ */
19
+ export declare function resolveDurationForPreferredModel(modelKey: string, plannedDurationSec: number, explicit: boolean, sceneIndex: number): number;
20
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/duration.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAsBR"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDurationForPreferredModel = resolveDurationForPreferredModel;
4
+ const logger_1 = require("../../../utils/logger");
5
+ const chains_1 = require("../providerFallback/chains");
6
+ /**
7
+ * OD-T7 / AG-42 — give the planner's `preferredModel` a chance to actually run
8
+ * when the scene duration is just slightly off from what the model accepts.
9
+ *
10
+ * Decision tree:
11
+ * 1. Model has no duration constraint → use planned duration
12
+ * 2. Planned duration already legal → use planned duration
13
+ * 3. Nearest legal is within snap tolerance → snap, log info
14
+ * 4. Outside tolerance + explicit preferredModel → log warn ("dropping
15
+ * planner pick — too far from any allowed value"); use planned duration
16
+ * anyway so the capability filter drops it and the chain fallback runs
17
+ * (the withFallback warn AG-42 also logs there now)
18
+ *
19
+ * We intentionally do NOT throw — throwing would crash a scene mid-run and
20
+ * lose all the other planner output. The graceful fallback chain already
21
+ * exists; this helper just keeps the planner's pick alive when the drift is
22
+ * small, and makes the drop visible when it isn't.
23
+ */
24
+ function resolveDurationForPreferredModel(modelKey, plannedDurationSec, explicit, sceneIndex) {
25
+ const snap = (0, chains_1.snapDurationForModel)(modelKey, plannedDurationSec);
26
+ if (!snap) {
27
+ if (explicit) {
28
+ logger_1.logger.warn("executor: preferredModel duration outside snap tolerance — chain fallback will pick", {
29
+ sceneIndex,
30
+ modelKey,
31
+ plannedDurationSec,
32
+ });
33
+ }
34
+ return plannedDurationSec;
35
+ }
36
+ if (snap.driftSec > 0.01) {
37
+ logger_1.logger.info("executor: snapped duration to fit preferredModel", {
38
+ sceneIndex,
39
+ modelKey,
40
+ from: snap.requestedSec,
41
+ to: snap.snappedSec,
42
+ driftSec: Number(snap.driftSec.toFixed(2)),
43
+ });
44
+ }
45
+ return snap.snappedSec;
46
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Executor — turns an approved VideoPlan into per-scene asset results. Split:
3
+ * - core.ts — the Executor class (run loop, scene dispatch, task cache,
4
+ * AG-11b identity-image registry)
5
+ * - visual.ts — runVisual: the per-scene VISUAL strategy switch
6
+ * - voice.ts — TTS voice-id sanitising + voice-style → voice_settings
7
+ * - duration.ts — preferredModel duration snapping
8
+ * - types.ts — SceneAssetResult / SceneOutcome / ExecutorOptions /
9
+ * RunToolFn / classifySceneFailure
10
+ *
11
+ * Public surface is unchanged from the former single-file module.
12
+ */
13
+ export * from "./types";
14
+ export { Executor } from "./core";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Executor = void 0;
18
+ /**
19
+ * Executor — turns an approved VideoPlan into per-scene asset results. Split:
20
+ * - core.ts — the Executor class (run loop, scene dispatch, task cache,
21
+ * AG-11b identity-image registry)
22
+ * - visual.ts — runVisual: the per-scene VISUAL strategy switch
23
+ * - voice.ts — TTS voice-id sanitising + voice-style → voice_settings
24
+ * - duration.ts — preferredModel duration snapping
25
+ * - types.ts — SceneAssetResult / SceneOutcome / ExecutorOptions /
26
+ * RunToolFn / classifySceneFailure
27
+ *
28
+ * Public surface is unchanged from the former single-file module.
29
+ */
30
+ __exportStar(require("./types"), exports);
31
+ var core_1 = require("./core");
32
+ Object.defineProperty(exports, "Executor", { enumerable: true, get: function () { return core_1.Executor; } });
@@ -0,0 +1,183 @@
1
+ import { PlannedScene } from "../../../schemas/videoPlan.schema";
2
+ import { ToolContext, ToolOutcome } from "../toolRegistry";
3
+ import { ExtendChainStep, SceneClip } from "../extendChain";
4
+ import { ProviderTaskCache, ProviderTaskCacheEntry } from "../providerTaskCache";
5
+ /**
6
+ * Executor public types: the per-scene asset/outcome shapes, the run options,
7
+ * the injectable runTool signature, and the failure classifier. Kept separate
8
+ * from the Executor class so tool/host modules can import these without pulling
9
+ * in the class (and its provider deps).
10
+ */
11
+ export type RunToolFn = <O = unknown>(name: string, input: unknown, ctx: ToolContext) => Promise<ToolOutcome<O>>;
12
+ export interface SceneAssetResult {
13
+ /** Concrete asset URL for the visual track (image or video). */
14
+ visualUrl?: string;
15
+ /** P-UNS-2: stock attribution for the visual, when the provider requires credit (Unsplash). */
16
+ attribution?: {
17
+ name: string;
18
+ url?: string;
19
+ };
20
+ /** Voiceover audio (base64 or url depending on host policy). */
21
+ voiceoverAudioBase64?: string;
22
+ /**
23
+ * Resolved voiceover URL once the host has uploaded the base64 buffer to
24
+ * its asset store (GCS / Firebase Storage). The agent.controller flow
25
+ * sets this in `onSceneComplete` so `planToProject` can render a real VO
26
+ * clip on `track-vo`. When unset, planToProject skips the VO clip.
27
+ */
28
+ voiceoverUrl?: string;
29
+ /** Provider task id for async generations the host still needs to poll. */
30
+ pendingTaskId?: string;
31
+ /** Model key the pending task was triggered on — the poller needs this to pick the provider. */
32
+ pendingModelKey?: string;
33
+ /**
34
+ * AG-2 / L-4 extend chain. Set when the scene's requested duration exceeds the
35
+ * chosen model's max single clip AND the model supports native extension: the
36
+ * executor triggers the initial clip (at the model's max legal length, its id
37
+ * in `pendingTaskId`) and lists the remaining length here as ordered extension
38
+ * segments. The host runs them SEQUENTIALLY via `resolveExtendChain` (each
39
+ * extend continues the previous provider task, so each waits for that task to
40
+ * COMPLETE) and fills `clips`. Absent on the common path (scene fits one clip).
41
+ */
42
+ extendChain?: ExtendChainStep[];
43
+ /**
44
+ * AG-2 / L-4. Resolved visual sub-clips (source + extensions) in render order,
45
+ * filled by the host's `resolveExtendChain` after sequential polling.
46
+ * planToProject lays these out as adjacent video clips across the scene's
47
+ * time window. When unset, the single `visualUrl` is used.
48
+ */
49
+ clips?: SceneClip[];
50
+ /** AG-22: provider chain the tool walked (in order, primary first). For trace + post-mortem. */
51
+ attemptedProviders?: string[];
52
+ /** Tool name used. */
53
+ tool: string;
54
+ /** Idempotency key the executor minted; useful for retries. */
55
+ idempotencyKey: string;
56
+ /**
57
+ * AG-28: estimated VO duration (ms) from the wpm heuristic. Set when
58
+ * voiceoverAudioBase64 is set. Used pre-upload for budget math; the
59
+ * editor-side display window prefers voiceoverActualMs when available.
60
+ */
61
+ voiceoverEstimateMs?: number;
62
+ /**
63
+ * Probed actual mp3 duration (ms). Stamped by `resolveVoiceoverUrl` after
64
+ * generation, before the buffer is discarded. Reflects real playback
65
+ * length — required to size the editor VO clip's display window so
66
+ * Remotion's `endAt` doesn't truncate emotive/punctuated deliveries that
67
+ * the wpm estimate undershoots. Falls back to `voiceoverEstimateMs` when
68
+ * ffprobe is unavailable.
69
+ */
70
+ voiceoverActualMs?: number;
71
+ /**
72
+ * AG-28: TTS over-budget signal. True when the line + style produces audio
73
+ * longer than scene.durationMs * 1.05 even after the executor's atempo
74
+ * adjustment. Stitcher should freeze-frame-pad rather than clip.
75
+ */
76
+ voiceoverOverBudget?: boolean;
77
+ /**
78
+ * AG-3: word-level captions transcribed from the resolved VO audio. Stamped
79
+ * host-side by `resolveSceneCaptions` (NOT the executor — captions need the
80
+ * uploaded voiceoverUrl, which only exists post-resolveVoiceoverUrl). Times
81
+ * are ms relative to scene start (== VO audio start). planToProject turns
82
+ * this into a CaptionClip on the caption track.
83
+ */
84
+ captionWords?: Array<{
85
+ word: string;
86
+ start: number;
87
+ end: number;
88
+ }>;
89
+ }
90
+ export interface SceneOutcome {
91
+ scene: PlannedScene;
92
+ ok: boolean;
93
+ result?: SceneAssetResult;
94
+ error?: {
95
+ code: string;
96
+ message: string;
97
+ /**
98
+ * Set when the failure came from a provider-fallback-wrapped tool whose
99
+ * entire chain exhausted (or terminated on auth/safety/input). Used by
100
+ * the orchestrator to decide between agent re-plan / scene degrade /
101
+ * hard fail.
102
+ */
103
+ classification?: "transient" | "rate_limit" | "capability" | "safety" | "auth" | "quota" | "input" | "unknown";
104
+ needsReplan?: boolean;
105
+ attemptedProviders?: string[];
106
+ };
107
+ durationMs: number;
108
+ }
109
+ /**
110
+ * Inspect a failed scene to decide the next orchestration step.
111
+ *
112
+ * - "replan" : agent should re-plan the scene (safety / bad input)
113
+ * - "degrade" : try a cheaper strategy (e.g. T2/T3 chain exhausted on quota)
114
+ * - "fail" : terminal — surface to user (auth / chain-exhausted-unknown)
115
+ * - "retry" : transient — caller may re-run the scene as-is later
116
+ */
117
+ export declare function classifySceneFailure(outcome: SceneOutcome): "replan" | "degrade" | "fail" | "retry" | null;
118
+ export interface ExecutorOptions {
119
+ /** Max scenes to run in parallel. Generation providers rate-limit themselves; this guards on top. */
120
+ concurrency?: number;
121
+ /** Inject a recording wrapper (e.g. runToolRecorded) for eval / replay. */
122
+ runTool?: RunToolFn;
123
+ /**
124
+ * Stage 3 hook: invoked after each scene finishes (success OR failure).
125
+ * Lets the orchestrator stream incremental Project updates into Firestore
126
+ * so the editor + agent drawer surfaces light up as scenes complete,
127
+ * rather than waiting for the whole executor to finish. Errors thrown
128
+ * from the callback are swallowed (logged) so a Firestore blip can't
129
+ * crash the executor.
130
+ */
131
+ onSceneComplete?: (sceneIndex: number, outcome: SceneOutcome) => Promise<void>;
132
+ /**
133
+ * Stage 7 slice 1: provider task-id cache (read side). When the upstream
134
+ * inputs for animate_image / generate_video / generate_avatar_video hash
135
+ * to the same value as a cached entry (and entry is within TTL), the
136
+ * executor returns the cached taskId + modelKey and skips the tool call.
137
+ * /execute passes the project's cache here so re-runs after downstream
138
+ * (poll/stitch/critic) bugs reuse the prior $$ gens. /regenerate-scene
139
+ * deliberately omits this (user wants a fresh gen) but still mints.
140
+ */
141
+ taskCache?: ProviderTaskCache;
142
+ /**
143
+ * Stage 7 slice 1: cache write side. Invoked after a successful tool call
144
+ * that produced a pendingTaskId. Orchestrator persists the entry on the
145
+ * AgentProject doc so the NEXT execute can replay. Errors swallowed —
146
+ * cache is best-effort optimisation, not correctness.
147
+ */
148
+ onTaskMint?: (clipId: string, entry: ProviderTaskCacheEntry) => Promise<void>;
149
+ /**
150
+ * Gap #1 follow-up (skip-generation). Scene indices whose VISUAL is preserved
151
+ * verbatim from a prior run (locked / user-placed, unapproved for mutation).
152
+ * runVisual returns a no-op "frozen" outcome for these — no provider call, no
153
+ * task minted, no $$ — and planToProject injects the real clip instead of a
154
+ * placeholder twin. Without this the lock guarantee held but we still PAID to
155
+ * regenerate footage we immediately discarded.
156
+ */
157
+ frozenVisualScenes?: ReadonlySet<number>;
158
+ /** Gap #1 follow-up. Scene indices whose VOICEOVER is preserved — skip TTS. */
159
+ frozenVoiceoverScenes?: ReadonlySet<number>;
160
+ }
161
+ /**
162
+ * Visual outcome shape returned by runVisual — either a resolved visual
163
+ * (URL or pending task) or a structured scene error.
164
+ */
165
+ export type VisualOutcome = {
166
+ ok: true;
167
+ output: {
168
+ tool: string;
169
+ visualUrl?: string;
170
+ pendingTaskId?: string;
171
+ pendingModelKey?: string;
172
+ attemptedProviders?: string[];
173
+ extendChain?: ExtendChainStep[];
174
+ attribution?: {
175
+ name: string;
176
+ url?: string;
177
+ };
178
+ };
179
+ } | {
180
+ ok: false;
181
+ error: SceneOutcome["error"];
182
+ };
183
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifySceneFailure = classifySceneFailure;
4
+ /**
5
+ * Inspect a failed scene to decide the next orchestration step.
6
+ *
7
+ * - "replan" : agent should re-plan the scene (safety / bad input)
8
+ * - "degrade" : try a cheaper strategy (e.g. T2/T3 chain exhausted on quota)
9
+ * - "fail" : terminal — surface to user (auth / chain-exhausted-unknown)
10
+ * - "retry" : transient — caller may re-run the scene as-is later
11
+ */
12
+ function classifySceneFailure(outcome) {
13
+ if (outcome.ok)
14
+ return null;
15
+ const c = outcome.error?.classification;
16
+ if (!c)
17
+ return "fail";
18
+ if (outcome.error?.needsReplan)
19
+ return "replan"; // safety / input
20
+ if (c === "auth")
21
+ return "fail";
22
+ if (c === "quota")
23
+ return "degrade";
24
+ if (c === "rate_limit" || c === "transient")
25
+ return "retry";
26
+ if (c === "capability")
27
+ return "degrade";
28
+ return "fail";
29
+ }
@@ -0,0 +1,32 @@
1
+ import { PlannedScene, VideoPlan } from "../../../schemas/videoPlan.schema";
2
+ import { ToolContext } from "../toolRegistry";
3
+ import { ProviderTaskCacheEntry } from "../providerTaskCache";
4
+ import { RunToolFn, VisualOutcome } from "./types";
5
+ /**
6
+ * Per-scene VISUAL resolution — the strategy switch that the Executor delegates
7
+ * to. Extracted as a free function so the Executor class stays a thin
8
+ * orchestrator. It receives a `VisualDeps` bundle (the bound Executor helpers
9
+ * it needs: runTool, the task-cache read/write, and the AG-11b identity-image
10
+ * publish/resolve) rather than `this`, keeping it independently testable.
11
+ */
12
+ export interface VisualDeps {
13
+ runTool: RunToolFn;
14
+ /**
15
+ * Gap #1 follow-up — scene indices whose visual is preserved verbatim; a
16
+ * match returns a no-op "frozen" outcome before any provider call.
17
+ */
18
+ frozenVisualScenes?: ReadonlySet<number>;
19
+ /** Stage 7 slice 1 — task-cache read: cached pending-task or null + the input hash. */
20
+ checkTaskCache(clipId: string, tool: string, input: Record<string, unknown>): {
21
+ hit: ProviderTaskCacheEntry | null;
22
+ inputsHash: string;
23
+ };
24
+ /** Stage 7 slice 1 — best-effort task-cache write. */
25
+ mintTaskCache(clipId: string, entry: ProviderTaskCacheEntry): Promise<void>;
26
+ /** AG-11b — publish this scene's generated identity still for dependents. */
27
+ publishIdentityImage(sceneIndex: number, url: string | undefined): void;
28
+ /** AG-11b — resolve this scene's character-anchor identity still (or undefined). */
29
+ resolveAnchorIdentityImage(scene: PlannedScene): Promise<string | undefined>;
30
+ }
31
+ export declare function runVisual(deps: VisualDeps, scene: PlannedScene, ctx: ToolContext, aspect: VideoPlan["aspect"], plan: VideoPlan): Promise<VisualOutcome>;
32
+ //# sourceMappingURL=visual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/visual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAe,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,uFAAuF;IACvF,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;QAAE,GAAG,EAAE,sBAAsB,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,sDAAsD;IACtD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,6EAA6E;IAC7E,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACxE,oFAAoF;IACpF,0BAA0B,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9E;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC3B,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,aAAa,CAAC,CAkdxB"}