@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 12.0.129

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 (360) hide show
  1. package/lib/compute.js +57 -1
  2. package/lib/compute.js.map +1 -1
  3. package/lib/features/agent-chat/NativeAgentChat.js +3 -2
  4. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  5. package/lib/features/apps/AppsCatalog.js +10 -0
  6. package/lib/features/apps/AppsCatalog.js.map +1 -1
  7. package/lib/features/apps/mobileAppCatalog.js +11 -0
  8. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  9. package/lib/features/canvas/AudioEditorExperience.js +448 -105
  10. package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
  11. package/lib/features/canvas/CanvasAgentChatPane.js +33 -14
  12. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  13. package/lib/features/canvas/CanvasBoardsGrid.js +493 -41
  14. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  15. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
  16. package/lib/features/canvas/CanvasEditToolsPanel.js +37 -1
  17. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  18. package/lib/features/canvas/CanvasExperience.js +237 -22
  19. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  20. package/lib/features/canvas/CanvasGeneratePanel.js +119 -26
  21. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  22. package/lib/features/canvas/CanvasLooksPanel.js +17 -6
  23. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
  24. package/lib/features/canvas/CanvasTasksPanel.js +18 -1
  25. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  26. package/lib/features/canvas/DesignCategoryGallery.js +423 -0
  27. package/lib/features/canvas/DesignCategoryGallery.js.map +1 -0
  28. package/lib/features/canvas/ImageEditorExperience.js +763 -187
  29. package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
  30. package/lib/features/canvas/SetStudioExperience.js +199 -11
  31. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  32. package/lib/features/canvas/VideoEditorExperience.js +59 -40
  33. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  34. package/lib/features/canvas/VideoGeneratorExperience.js +134 -34
  35. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  36. package/lib/features/canvas/aiEdit.js +4 -2
  37. package/lib/features/canvas/aiEdit.js.map +1 -1
  38. package/lib/features/canvas/audioEditor/AudioWaveform.js +96 -0
  39. package/lib/features/canvas/audioEditor/AudioWaveform.js.map +1 -0
  40. package/lib/features/canvas/audioEditor/audioPeaks.js +93 -0
  41. package/lib/features/canvas/audioEditor/audioPeaks.js.map +1 -0
  42. package/lib/features/canvas/canvasTaskSync.js +34 -7
  43. package/lib/features/canvas/canvasTaskSync.js.map +1 -1
  44. package/lib/features/canvas/canvasTasks.js +23 -3
  45. package/lib/features/canvas/canvasTasks.js.map +1 -1
  46. package/lib/features/canvas/canvasTheme.js +10 -24
  47. package/lib/features/canvas/canvasTheme.js.map +1 -1
  48. package/lib/features/canvas/canvasUi.js +1 -1
  49. package/lib/features/canvas/canvasUi.js.map +1 -1
  50. package/lib/features/canvas/createTiles.js +17 -9
  51. package/lib/features/canvas/createTiles.js.map +1 -1
  52. package/lib/features/canvas/deepLinks.js +35 -5
  53. package/lib/features/canvas/deepLinks.js.map +1 -1
  54. package/lib/features/canvas/designCatalog.js +165 -0
  55. package/lib/features/canvas/designCatalog.js.map +1 -0
  56. package/lib/features/canvas/designCategories.js +262 -0
  57. package/lib/features/canvas/designCategories.js.map +1 -0
  58. package/lib/features/canvas/editorControls.js +406 -0
  59. package/lib/features/canvas/editorControls.js.map +1 -0
  60. package/lib/features/canvas/generationModels.js +5 -3
  61. package/lib/features/canvas/generationModels.js.map +1 -1
  62. package/lib/features/canvas/generationTasks.js +162 -0
  63. package/lib/features/canvas/generationTasks.js.map +1 -0
  64. package/lib/features/canvas/generator/BottomSheet.js +167 -0
  65. package/lib/features/canvas/generator/BottomSheet.js.map +1 -0
  66. package/lib/features/canvas/generator/BusinessCardChatCard.js +155 -0
  67. package/lib/features/canvas/generator/BusinessCardChatCard.js.map +1 -0
  68. package/lib/features/canvas/generator/DirectorSheet.js +163 -0
  69. package/lib/features/canvas/generator/DirectorSheet.js.map +1 -0
  70. package/lib/features/canvas/generator/ReframePreview.js +122 -0
  71. package/lib/features/canvas/generator/ReframePreview.js.map +1 -0
  72. package/lib/features/canvas/generator/RunLogCard.js +119 -0
  73. package/lib/features/canvas/generator/RunLogCard.js.map +1 -0
  74. package/lib/features/canvas/generator/ShotPanel.js +261 -0
  75. package/lib/features/canvas/generator/ShotPanel.js.map +1 -0
  76. package/lib/features/canvas/generator/businessCardWidget.js +117 -0
  77. package/lib/features/canvas/generator/businessCardWidget.js.map +1 -0
  78. package/lib/features/canvas/generator/cameraVocabulary.js +142 -0
  79. package/lib/features/canvas/generator/cameraVocabulary.js.map +1 -0
  80. package/lib/features/canvas/generator/cinematicVocabulary.js +416 -0
  81. package/lib/features/canvas/generator/cinematicVocabulary.js.map +1 -0
  82. package/lib/features/canvas/generator/direction.js +41 -0
  83. package/lib/features/canvas/generator/direction.js.map +1 -0
  84. package/lib/features/canvas/generator/reframeGeometry.js +108 -0
  85. package/lib/features/canvas/generator/reframeGeometry.js.map +1 -0
  86. package/lib/features/canvas/generator/runLog.js +71 -0
  87. package/lib/features/canvas/generator/runLog.js.map +1 -0
  88. package/lib/features/canvas/generator/shot.js +133 -0
  89. package/lib/features/canvas/generator/shot.js.map +1 -0
  90. package/lib/features/canvas/generator/useShotSpec.js +87 -0
  91. package/lib/features/canvas/generator/useShotSpec.js.map +1 -0
  92. package/lib/features/canvas/home/HeroComposer.js +214 -0
  93. package/lib/features/canvas/home/HeroComposer.js.map +1 -0
  94. package/lib/features/canvas/home/HeroMonitor.js +225 -0
  95. package/lib/features/canvas/home/HeroMonitor.js.map +1 -0
  96. package/lib/features/canvas/home/LookDetail.js +185 -0
  97. package/lib/features/canvas/home/LookDetail.js.map +1 -0
  98. package/lib/features/canvas/home/LoopingVideo.js +37 -0
  99. package/lib/features/canvas/home/LoopingVideo.js.map +1 -0
  100. package/lib/features/canvas/home/TemplatesGallery.js +253 -0
  101. package/lib/features/canvas/home/TemplatesGallery.js.map +1 -0
  102. package/lib/features/canvas/home/heroShots.js +100 -0
  103. package/lib/features/canvas/home/heroShots.js.map +1 -0
  104. package/lib/features/canvas/homeWork.js +62 -3
  105. package/lib/features/canvas/homeWork.js.map +1 -1
  106. package/lib/features/canvas/imageEditor/ImageMarkup.js +195 -0
  107. package/lib/features/canvas/imageEditor/ImageMarkup.js.map +1 -0
  108. package/lib/features/canvas/imageEditor/imageEditOps.js +367 -0
  109. package/lib/features/canvas/imageEditor/imageEditOps.js.map +1 -0
  110. package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
  111. package/lib/features/canvas/rankedCatalogSearch.js +375 -0
  112. package/lib/features/canvas/rankedCatalogSearch.js.map +1 -0
  113. package/lib/features/canvas/recorder/CameraRecorderExperience.js +68 -20
  114. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
  115. package/lib/features/canvas/recorder/RecordingReview.js +272 -0
  116. package/lib/features/canvas/recorder/RecordingReview.js.map +1 -0
  117. package/lib/features/canvas/recorder/RecordingsList.js +179 -0
  118. package/lib/features/canvas/recorder/RecordingsList.js.map +1 -0
  119. package/lib/features/canvas/recorder/recorderOps.js +99 -0
  120. package/lib/features/canvas/recorder/recorderOps.js.map +1 -0
  121. package/lib/features/canvas/seedanceShowcase.js +314 -0
  122. package/lib/features/canvas/seedanceShowcase.js.map +1 -0
  123. package/lib/features/canvas/serverTasks.js +149 -15
  124. package/lib/features/canvas/serverTasks.js.map +1 -1
  125. package/lib/features/canvas/sessionRenewal.js +114 -0
  126. package/lib/features/canvas/sessionRenewal.js.map +1 -0
  127. package/lib/features/canvas/set/SetViewportWebView.js +34 -1
  128. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  129. package/lib/features/canvas/set/agent/setTurn.js +4 -2
  130. package/lib/features/canvas/set/agent/setTurn.js.map +1 -1
  131. package/lib/features/canvas/set/setPresets.js +85 -0
  132. package/lib/features/canvas/set/setPresets.js.map +1 -0
  133. package/lib/features/canvas/set/setProject.js +4 -1
  134. package/lib/features/canvas/set/setProject.js.map +1 -1
  135. package/lib/features/canvas/studioCatalog.js +59 -4
  136. package/lib/features/canvas/studioCatalog.js.map +1 -1
  137. package/lib/features/canvas/studioLooks.js +31 -4
  138. package/lib/features/canvas/studioLooks.js.map +1 -1
  139. package/lib/features/canvas/surfaceIndex.js +1 -14
  140. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  141. package/lib/features/canvas/templateSearch.js +489 -0
  142. package/lib/features/canvas/templateSearch.js.map +1 -0
  143. package/lib/features/canvas/useCanvasSession.js +28 -6
  144. package/lib/features/canvas/useCanvasSession.js.map +1 -1
  145. package/lib/features/canvas/useStudioCatalogTemplates.js +41 -5
  146. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -1
  147. package/lib/features/canvas/videoEditor/EditorPanels.js +531 -0
  148. package/lib/features/canvas/videoEditor/EditorPanels.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +48 -4
  150. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  151. package/lib/features/canvas/videoEditor/agent/agentLoop.js +2 -0
  152. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
  153. package/lib/features/canvas/videoEditor/agent/brainClient.js +97 -27
  154. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
  155. package/lib/features/canvas/videoEditor/agent/cutTools.js +707 -3
  156. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
  157. package/lib/features/canvas/videoEditor/audioServices.js +165 -0
  158. package/lib/features/canvas/videoEditor/audioServices.js.map +1 -0
  159. package/lib/features/canvas/videoEditor/captions.js +144 -0
  160. package/lib/features/canvas/videoEditor/captions.js.map +1 -0
  161. package/lib/features/canvas/videoEditor/compileTimeline.js +24 -16
  162. package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -1
  163. package/lib/features/canvas/videoEditor/editorModel.js +12 -2
  164. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
  165. package/lib/features/canvas/videoEditor/exportTask.js +89 -7
  166. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
  167. package/lib/features/canvas/videoEditor/layers.js +117 -0
  168. package/lib/features/canvas/videoEditor/layers.js.map +1 -0
  169. package/lib/features/canvas/videoEditor/remoteMediaClient.js +45 -18
  170. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
  171. package/lib/features/canvas/videoEditor/renderTimeline.js +18 -6
  172. package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -1
  173. package/lib/features/canvas/videoEditor/revoice.js +138 -0
  174. package/lib/features/canvas/videoEditor/revoice.js.map +1 -0
  175. package/lib/features/canvas/videoEditor/storageUpload.js +34 -0
  176. package/lib/features/canvas/videoEditor/storageUpload.js.map +1 -0
  177. package/lib/features/canvas/videoEditor/textMotion.js +109 -0
  178. package/lib/features/canvas/videoEditor/textMotion.js.map +1 -0
  179. package/lib/features/canvas/videoEditor/transitions.js +31 -0
  180. package/lib/features/canvas/videoEditor/transitions.js.map +1 -0
  181. package/lib/features/chat/TemplatesChatCards.js +8 -3
  182. package/lib/features/chat/TemplatesChatCards.js.map +1 -1
  183. package/lib/features/design/DesignEditorExperience.js +674 -644
  184. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  185. package/lib/features/design/DesignExperience.js +285 -538
  186. package/lib/features/design/DesignExperience.js.map +1 -1
  187. package/lib/features/design/designCore.js +2 -212
  188. package/lib/features/design/designCore.js.map +1 -1
  189. package/lib/features/design/designIndex.js +1 -50
  190. package/lib/features/design/designIndex.js.map +1 -1
  191. package/lib/features/design/doc/aiDesign.js +247 -0
  192. package/lib/features/design/doc/aiDesign.js.map +1 -0
  193. package/lib/features/design/doc/artifacts.js +280 -0
  194. package/lib/features/design/doc/artifacts.js.map +1 -0
  195. package/lib/features/design/doc/chart.js +98 -0
  196. package/lib/features/design/doc/chart.js.map +1 -0
  197. package/lib/features/design/doc/crop.js +104 -0
  198. package/lib/features/design/doc/crop.js.map +1 -0
  199. package/lib/features/design/doc/curve.js +49 -0
  200. package/lib/features/design/doc/curve.js.map +1 -0
  201. package/lib/features/design/doc/docOps.js +397 -0
  202. package/lib/features/design/doc/docOps.js.map +1 -0
  203. package/lib/features/design/doc/findReplace.js +112 -0
  204. package/lib/features/design/doc/findReplace.js.map +1 -0
  205. package/lib/features/design/doc/fonts.js +79 -0
  206. package/lib/features/design/doc/fonts.js.map +1 -0
  207. package/lib/features/design/doc/frames.js +17 -0
  208. package/lib/features/design/doc/frames.js.map +1 -0
  209. package/lib/features/design/doc/geometry.js +133 -0
  210. package/lib/features/design/doc/geometry.js.map +1 -0
  211. package/lib/features/design/doc/imageAdjust.js +203 -0
  212. package/lib/features/design/doc/imageAdjust.js.map +1 -0
  213. package/lib/features/design/doc/legacyDoc.js +107 -0
  214. package/lib/features/design/doc/legacyDoc.js.map +1 -0
  215. package/lib/features/design/doc/newDoc.js +335 -0
  216. package/lib/features/design/doc/newDoc.js.map +1 -0
  217. package/lib/features/design/doc/pageRange.js +17 -0
  218. package/lib/features/design/doc/pageRange.js.map +1 -0
  219. package/lib/features/design/doc/pathScale.js +68 -0
  220. package/lib/features/design/doc/pathScale.js.map +1 -0
  221. package/lib/features/design/doc/qr.js +62 -0
  222. package/lib/features/design/doc/qr.js.map +1 -0
  223. package/lib/features/design/doc/shapes.js +366 -0
  224. package/lib/features/design/doc/shapes.js.map +1 -0
  225. package/lib/features/design/doc/sizes.js +230 -0
  226. package/lib/features/design/doc/sizes.js.map +1 -0
  227. package/lib/features/design/doc/textEffects.js +134 -0
  228. package/lib/features/design/doc/textEffects.js.map +1 -0
  229. package/lib/features/design/doc/textLayout.js +182 -0
  230. package/lib/features/design/doc/textLayout.js.map +1 -0
  231. package/lib/features/design/doc/types.js +30 -0
  232. package/lib/features/design/doc/types.js.map +1 -0
  233. package/lib/features/design/editor/AiPanel.js +194 -0
  234. package/lib/features/design/editor/AiPanel.js.map +1 -0
  235. package/lib/features/design/editor/ChartDataPanel.js +182 -0
  236. package/lib/features/design/editor/ChartDataPanel.js.map +1 -0
  237. package/lib/features/design/editor/CropOverlay.js +199 -0
  238. package/lib/features/design/editor/CropOverlay.js.map +1 -0
  239. package/lib/features/design/editor/DesignCanvas.js +363 -0
  240. package/lib/features/design/editor/DesignCanvas.js.map +1 -0
  241. package/lib/features/design/editor/ExportSheet.js +123 -0
  242. package/lib/features/design/editor/ExportSheet.js.map +1 -0
  243. package/lib/features/design/editor/FindReplacePanel.js +93 -0
  244. package/lib/features/design/editor/FindReplacePanel.js.map +1 -0
  245. package/lib/features/design/editor/ImageTools.js +188 -0
  246. package/lib/features/design/editor/ImageTools.js.map +1 -0
  247. package/lib/features/design/editor/LayerTools.js +485 -0
  248. package/lib/features/design/editor/LayerTools.js.map +1 -0
  249. package/lib/features/design/editor/PageStrip.js +203 -0
  250. package/lib/features/design/editor/PageStrip.js.map +1 -0
  251. package/lib/features/design/editor/Slideshow.js +97 -0
  252. package/lib/features/design/editor/Slideshow.js.map +1 -0
  253. package/lib/features/design/editor/ToolPanels.js +695 -0
  254. package/lib/features/design/editor/ToolPanels.js.map +1 -0
  255. package/lib/features/design/editor/controls.js +630 -0
  256. package/lib/features/design/editor/controls.js.map +1 -0
  257. package/lib/features/design/editor/useDesignSave.js +91 -0
  258. package/lib/features/design/editor/useDesignSave.js.map +1 -0
  259. package/lib/features/design/export/exportDesign.js +170 -0
  260. package/lib/features/design/export/exportDesign.js.map +1 -0
  261. package/lib/features/design/export/pdf.js +143 -0
  262. package/lib/features/design/export/pdf.js.map +1 -0
  263. package/lib/features/design/home/DesignHome.js +688 -0
  264. package/lib/features/design/home/DesignHome.js.map +1 -0
  265. package/lib/features/design/home/studioHome.js +61 -0
  266. package/lib/features/design/home/studioHome.js.map +1 -0
  267. package/lib/features/design/pickDesignImage.js +60 -0
  268. package/lib/features/design/pickDesignImage.js.map +1 -0
  269. package/lib/features/design/render/DesignPageView.js +69 -0
  270. package/lib/features/design/render/DesignPageView.js.map +1 -0
  271. package/lib/features/design/render/PageCapture.js +288 -0
  272. package/lib/features/design/render/PageCapture.js.map +1 -0
  273. package/lib/features/design/render/TextMeasure.js +115 -0
  274. package/lib/features/design/render/TextMeasure.js.map +1 -0
  275. package/lib/features/design/render/fontRegistry.js +110 -0
  276. package/lib/features/design/render/fontRegistry.js.map +1 -0
  277. package/lib/features/design/render/layers.js +392 -0
  278. package/lib/features/design/render/layers.js.map +1 -0
  279. package/lib/features/design/render/svg.js +35 -0
  280. package/lib/features/design/render/svg.js.map +1 -0
  281. package/lib/features/design/render/svgParts.js +435 -0
  282. package/lib/features/design/render/svgParts.js.map +1 -0
  283. package/lib/features/design/surface/BoardScreen.js +529 -0
  284. package/lib/features/design/surface/BoardScreen.js.map +1 -0
  285. package/lib/features/design/surface/CompareView.js +138 -0
  286. package/lib/features/design/surface/CompareView.js.map +1 -0
  287. package/lib/features/design/surface/CreationScreen.js +294 -0
  288. package/lib/features/design/surface/CreationScreen.js.map +1 -0
  289. package/lib/features/design/surface/DesignAgentChatPane.js +444 -0
  290. package/lib/features/design/surface/DesignAgentChatPane.js.map +1 -0
  291. package/lib/features/design/surface/DesignBoards.js +441 -0
  292. package/lib/features/design/surface/DesignBoards.js.map +1 -0
  293. package/lib/features/design/surface/DesignPreview.js +159 -0
  294. package/lib/features/design/surface/DesignPreview.js.map +1 -0
  295. package/lib/features/design/surface/DesignSurfaceExperience.js +80 -0
  296. package/lib/features/design/surface/DesignSurfaceExperience.js.map +1 -0
  297. package/lib/features/design/surface/FullScreenPreview.js +59 -0
  298. package/lib/features/design/surface/FullScreenPreview.js.map +1 -0
  299. package/lib/features/design/surface/NewSystemDialog.js +122 -0
  300. package/lib/features/design/surface/NewSystemDialog.js.map +1 -0
  301. package/lib/features/design/surface/PickerSheet.js +175 -0
  302. package/lib/features/design/surface/PickerSheet.js.map +1 -0
  303. package/lib/features/design/surface/TemplatesGallery.js +156 -0
  304. package/lib/features/design/surface/TemplatesGallery.js.map +1 -0
  305. package/lib/features/design/surface/WetPaint.js +140 -0
  306. package/lib/features/design/surface/WetPaint.js.map +1 -0
  307. package/lib/features/design/surface/agentTurn.js +229 -0
  308. package/lib/features/design/surface/agentTurn.js.map +1 -0
  309. package/lib/features/design/surface/designBoard.js +218 -0
  310. package/lib/features/design/surface/designBoard.js.map +1 -0
  311. package/lib/features/design/surface/designChannel.js +186 -0
  312. package/lib/features/design/surface/designChannel.js.map +1 -0
  313. package/lib/features/design/surface/designChat.js +141 -0
  314. package/lib/features/design/surface/designChat.js.map +1 -0
  315. package/lib/features/design/surface/designConnector.js +266 -0
  316. package/lib/features/design/surface/designConnector.js.map +1 -0
  317. package/lib/features/design/surface/designDocument.js +40 -0
  318. package/lib/features/design/surface/designDocument.js.map +1 -0
  319. package/lib/features/design/surface/designExport.js +55 -0
  320. package/lib/features/design/surface/designExport.js.map +1 -0
  321. package/lib/features/design/surface/designLinks.js +64 -0
  322. package/lib/features/design/surface/designLinks.js.map +1 -0
  323. package/lib/features/design/surface/designPalette.js +24 -0
  324. package/lib/features/design/surface/designPalette.js.map +1 -0
  325. package/lib/features/design/surface/designRun.js +161 -0
  326. package/lib/features/design/surface/designRun.js.map +1 -0
  327. package/lib/features/design/surface/designTheme.js +119 -0
  328. package/lib/features/design/surface/designTheme.js.map +1 -0
  329. package/lib/features/design/surface/execStream.js +206 -0
  330. package/lib/features/design/surface/execStream.js.map +1 -0
  331. package/lib/features/design/surface/metaball.js +48 -0
  332. package/lib/features/design/surface/metaball.js.map +1 -0
  333. package/lib/features/design/surface/pickReferenceFiles.js +35 -0
  334. package/lib/features/design/surface/pickReferenceFiles.js.map +1 -0
  335. package/lib/features/design/surface/useDesignSurface.js +379 -0
  336. package/lib/features/design/surface/useDesignSurface.js.map +1 -0
  337. package/lib/features/docs/DocBlockRow.js +336 -0
  338. package/lib/features/docs/DocBlockRow.js.map +1 -0
  339. package/lib/features/docs/DocsEditorExperience.js +949 -0
  340. package/lib/features/docs/DocsEditorExperience.js.map +1 -0
  341. package/lib/features/docs/DocsToolbar.js +247 -0
  342. package/lib/features/docs/DocsToolbar.js.map +1 -0
  343. package/lib/features/docs/blocks.js +560 -0
  344. package/lib/features/docs/blocks.js.map +1 -0
  345. package/lib/features/docs/docArtifacts.js +129 -0
  346. package/lib/features/docs/docArtifacts.js.map +1 -0
  347. package/lib/features/docs/docEdits.js +201 -0
  348. package/lib/features/docs/docEdits.js.map +1 -0
  349. package/lib/features/docs/docExport.js +235 -0
  350. package/lib/features/docs/docExport.js.map +1 -0
  351. package/lib/features/docs/docShare.js +62 -0
  352. package/lib/features/docs/docShare.js.map +1 -0
  353. package/lib/features/links/openInApp.js +38 -2
  354. package/lib/features/links/openInApp.js.map +1 -1
  355. package/lib/routes.json +54 -0
  356. package/lib/screens/DesignNative/index.js +35 -0
  357. package/lib/screens/DesignNative/index.js.map +1 -0
  358. package/package.json +4 -4
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cutTools.js","sources":["../../../../../src/features/canvas/videoEditor/agent/cutTools.ts"],"sourcesContent":["/**\n * Agent tools mapped onto the native EditorTimeline (web agent/timelineOps +\n * tools): inspect, remove, reorder, trim, plus add_scene (a shot to film as\n * a colour scene), add_text (a title stamped to its scene) and film_scenes\n * (hands shots to the editor's Produce run).\n */\nimport type { EditorTimeline } from '../editorModel';\nimport { clipFromColor, moveClip, removeClip, textClipAt, updateClip } from '../editorModel';\nimport { sceneSpans } from '../sceneLayers';\nimport type { BrainTool } from './brainClient';\n\nexport interface AgentToolContext {\n getTimeline: () => EditorTimeline;\n setTimeline: (next: EditorTimeline) => void;\n /** Film these scenes with the AI video model in the background (Produce video); absent = unavailable. */\n film?: (sceneIds: string[]) => void;\n}\n\n/** web SHOT_SEC_RANGE: shorter reads as a flash, longer than one clip is slowed. */\nexport const SHOT_SEC_RANGE = { min: 2, max: 15, default: 6 } as const;\n\nexport interface ToolOutcome {\n ok: boolean;\n label: string;\n detail?: string;\n content: string;\n}\n\nexport const CUT_AGENT_TOOLS: BrainTool[] = [\n {\n type: 'function',\n function: {\n name: 'get_timeline',\n description: 'List clips on the timeline with ids, sources, and durations.',\n parameters: { type: 'object', properties: {} },\n },\n },\n {\n type: 'function',\n function: {\n name: 'remove_scenes',\n description: 'Remove clips by id.',\n parameters: {\n type: 'object',\n properties: { ids: { type: 'array', items: { type: 'string' } } },\n required: ['ids'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'reorder_scenes',\n description: 'Move a clip earlier (-1) or later (1) by one slot.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n direction: { type: 'integer', enum: [-1, 1] },\n },\n required: ['id', 'direction'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'trim_scene',\n description: 'Set trimStartSec / trimEndSec on a clip (source seconds).',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n trimStartSec: { type: 'number' },\n trimEndSec: { type: 'number' },\n },\n required: ['id'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'add_scene',\n description:\n 'Add a scene for the AI video model to FILM: a colour scene carrying its shot (picture only - subject, setting, action, light, camera move; no on-screen text). Optional title is laid on it. Then call film_scenes. Returns the scene id.',\n parameters: {\n type: 'object',\n properties: {\n shot: { type: 'string' },\n seconds: { type: 'number', description: 'How long it plays (default 6, 2-15).' },\n title: { type: 'string', description: 'On-screen title for this scene.' },\n index: { type: 'integer', description: 'Position in the cut (default: the end).' },\n },\n required: ['shot'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'add_text',\n description: 'Lay a title on a scene (it moves with the scene). Times are seconds from the scene start.',\n parameters: {\n type: 'object',\n properties: {\n scene_id: { type: 'string' },\n text: { type: 'string' },\n at_sec: { type: 'number' },\n seconds: { type: 'number' },\n },\n required: ['scene_id', 'text'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'film_scenes',\n description:\n \"Film scenes that have a shot with the AI video model. Starts the filming and returns at once; each clip lands in its scene a few minutes later, keeping the scene's length and titles. Default: every colour scene with a shot.\",\n parameters: {\n type: 'object',\n properties: { scene_ids: { type: 'array', items: { type: 'string' } } },\n },\n },\n },\n];\n\nexport async function executeCutTool(name: string, rawArgs: unknown, ctx: AgentToolContext): Promise<ToolOutcome> {\n const args = (rawArgs && typeof rawArgs === 'object' ? rawArgs : {}) as Record<string, unknown>;\n if (name === 'get_timeline') {\n const t = ctx.getTimeline();\n const spans = sceneSpans(t.clips);\n const rows = t.clips.map((c, i) => ({\n index: i,\n id: c.id,\n kind: c.fillColor ? (c.shot ? 'shot to film' : 'colour scene') : c.type,\n ...(c.fillColor ? {} : { src: c.src?.slice(0, 80) }),\n ...(c.shot ? { shot: c.shot.slice(0, 160) } : {}),\n startSec: Math.round(spans[i].startSec * 10) / 10,\n durationSec: c.durationSec,\n trimStartSec: c.trimStartSec,\n trimEndSec: c.trimEndSec,\n titles: t.texts.filter((x) => x.sceneId === c.id).map((x) => x.text),\n }));\n return {\n ok: true,\n label: `Timeline · ${rows.length} clip(s)`,\n content: JSON.stringify(rows),\n };\n }\n if (name === 'remove_scenes') {\n const ids = Array.isArray(args.ids) ? args.ids.filter((x): x is string => typeof x === 'string') : [];\n let next = ctx.getTimeline();\n for (const id of ids) next = removeClip(next, id);\n ctx.setTimeline(next);\n return { ok: true, label: `Removed ${ids.length} clip(s)`, content: 'ok' };\n }\n if (name === 'reorder_scenes') {\n const id = typeof args.id === 'string' ? args.id : '';\n const direction = args.direction === -1 || args.direction === 1 ? args.direction : 1;\n ctx.setTimeline(moveClip(ctx.getTimeline(), id, direction));\n return { ok: true, label: `Moved ${id}`, content: 'ok' };\n }\n if (name === 'trim_scene') {\n const id = typeof args.id === 'string' ? args.id : '';\n const patch: { trimStartSec?: number; trimEndSec?: number | null } = {};\n if (typeof args.trimStartSec === 'number') patch.trimStartSec = args.trimStartSec;\n if (typeof args.trimEndSec === 'number') patch.trimEndSec = args.trimEndSec;\n ctx.setTimeline(updateClip(ctx.getTimeline(), id, patch));\n return { ok: true, label: `Trimmed ${id}`, content: 'ok' };\n }\n if (name === 'add_scene') {\n const shot = typeof args.shot === 'string' ? args.shot.trim() : '';\n if (!shot) return { ok: false, label: 'Add scene', content: 'error: a scene to film needs a shot' };\n const asked = typeof args.seconds === 'number' ? args.seconds : SHOT_SEC_RANGE.default;\n const seconds = Math.min(SHOT_SEC_RANGE.max, Math.max(SHOT_SEC_RANGE.min, asked));\n const t = ctx.getTimeline();\n const scene = { ...clipFromColor('#101014'), name: shot.slice(0, 32), shot, durationSec: seconds };\n const index =\n typeof args.index === 'number' && args.index >= 0 && args.index <= t.clips.length\n ? Math.floor(args.index)\n : t.clips.length;\n const clips = [...t.clips];\n clips.splice(index, 0, scene);\n let next: EditorTimeline = { ...t, clips };\n const title = typeof args.title === 'string' ? args.title.trim() : '';\n if (title) {\n const start = sceneSpans(clips).find((s) => s.id === scene.id)?.startSec ?? 0;\n const text = {\n ...textClipAt(start, { text: title, x: 0.5, y: 0.5 }),\n durationSec: Math.min(3, seconds),\n sceneId: scene.id,\n };\n next = { ...next, texts: [...next.texts, text] };\n }\n ctx.setTimeline(next);\n const note =\n seconds !== asked\n ? ` (a scene to film runs ${SHOT_SEC_RANGE.min}-${SHOT_SEC_RANGE.max}s, used ${seconds}s)`\n : '';\n return {\n ok: true,\n label: `Added scene · ${shot.slice(0, 32)}`,\n content: JSON.stringify({ scene_id: scene.id }) + note,\n };\n }\n if (name === 'add_text') {\n const t = ctx.getTimeline();\n const sceneId = typeof args.scene_id === 'string' ? args.scene_id : '';\n const span = sceneSpans(t.clips).find((s) => s.id === sceneId);\n const words = typeof args.text === 'string' ? args.text.trim() : '';\n if (!span || !words)\n return { ok: false, label: 'Add text', content: 'error: needs a scene_id from get_timeline and text' };\n const len = Math.max(0.5, span.endSec - span.startSec);\n const at = Math.min(len - 0.5, Math.max(0, typeof args.at_sec === 'number' ? args.at_sec : 0));\n const seconds = Math.min(len - at, Math.max(0.5, typeof args.seconds === 'number' ? args.seconds : len - at));\n const text = {\n ...textClipAt(span.startSec + at, { text: words, x: 0.5, y: 0.5 }),\n durationSec: seconds,\n sceneId,\n };\n ctx.setTimeline({ ...t, texts: [...t.texts, text] });\n return { ok: true, label: `Title · ${words.slice(0, 24)}`, content: JSON.stringify({ text_id: text.id }) };\n }\n if (name === 'film_scenes') {\n if (!ctx.film) return { ok: false, label: 'Film scenes', content: 'error: filming is not available here' };\n const t = ctx.getTimeline();\n const asked = Array.isArray(args.scene_ids)\n ? args.scene_ids.filter((x): x is string => typeof x === 'string')\n : [];\n const ids = (asked.length ? asked : t.clips.filter((c) => c.fillColor && c.shot).map((c) => c.id)).filter(\n (id) => t.clips.some((c) => c.id === id),\n );\n if (!ids.length) return { ok: false, label: 'Film scenes', content: 'error: no scene with a shot to film' };\n ctx.film(ids);\n return {\n ok: true,\n label: `Filming ${ids.length} scene${ids.length === 1 ? '' : 's'}`,\n content: `filming ${ids.length} scene(s); each lands in place in a few minutes`,\n };\n }\n return { ok: false, label: name, content: `Unknown tool ${name}` };\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"cutTools.js","sources":["../../../../../src/features/canvas/videoEditor/agent/cutTools.ts"],"sourcesContent":["/**\n * Agent tools mapped onto the native EditorTimeline (web agent/timelineOps +\n * tools): inspect, remove, reorder, trim, plus add_scene (a shot to film as\n * a colour scene), add_text (a title stamped to its scene) and film_scenes\n * (hands shots to the editor's Produce run).\n */\nimport type { EditorClip, EditorTimeline, SceneAudio } from '../editorModel';\nimport {\n clipFromColor,\n clipFromItem,\n DEFAULT_IMAGE_SEC,\n moveClip,\n removeClip,\n textClipAt,\n updateClip,\n} from '../editorModel';\nimport { sceneAtSec, sceneSpans } from '../sceneLayers';\nimport type { RunMediaAction } from '../mediaActions';\nimport { captionsForClip, placeCaptions, transcribeMedia, type TranscriptCue } from '../captions';\nimport { composeMusic, composeSoundEffect, speakLine, STOCK_VOICES } from '../audioServices';\nimport { probeAudioSec } from '../revoice';\nimport type { BrainTool } from './brainClient';\n\n/** A library item the agent can cut from (board media, picked media, taken-in links). */\nexport interface AgentLibraryItem {\n id: string;\n type: 'image' | 'video' | 'audio';\n src: string;\n name: string;\n /** The link it was taken in from. */\n sourceUrl?: string;\n}\n\n/** An uploaded document (screenplay, shot list, brief) the agent reads. */\nexport interface AgentDocument {\n id: string;\n name: string;\n text: string;\n}\n\n/** What the agent learned about one source (cached per src across turns). */\nexport interface MediaAnalysis {\n durationSec: number;\n transcript: TranscriptCue[];\n description?: string;\n}\n\nexport interface AgentToolContext {\n getTimeline: () => EditorTimeline;\n setTimeline: (next: EditorTimeline) => void;\n /** Film these scenes with the AI video model in the background (Produce video); absent = unavailable. */\n film?: (sceneIds: string[]) => void;\n /** Connector runner: transcription, music, sound effects, speech. Absent = those tools say so. */\n runAction?: RunMediaAction;\n /** Media the agent may cut from beyond the timeline's own clips. */\n library?: () => AgentLibraryItem[];\n /** Documents the user gave this project. */\n documents?: () => AgentDocument[];\n /** Analysis cache keyed by media src; keep one Map per editor so a re-ask is free. */\n analyses?: Map<string, MediaAnalysis>;\n /** Fetch a link and put it in the library. */\n importLink?: (url: string) => Promise<AgentLibraryItem>;\n /** Describe one picture in two sentences (a vision model); absent = no visual pass. */\n describe?: (imageUrl: string, hint: string) => Promise<string>;\n /** Known source seconds per clip id (the player's measurements). */\n sourceSec?: () => Readonly<Record<string, number>>;\n /** A live status line while a slow tool works. */\n progress?: (text: string) => void;\n}\n\n/** web SHOT_SEC_RANGE: shorter reads as a flash, longer than one clip is slowed. */\nexport const SHOT_SEC_RANGE = { min: 2, max: 15, default: 6 } as const;\n\nexport interface ToolOutcome {\n ok: boolean;\n label: string;\n detail?: string;\n content: string;\n}\n\nexport const CUT_AGENT_TOOLS: BrainTool[] = [\n {\n type: 'function',\n function: {\n name: 'get_timeline',\n description: 'List clips on the timeline with ids, sources, and durations.',\n parameters: { type: 'object', properties: {} },\n },\n },\n {\n type: 'function',\n function: {\n name: 'remove_scenes',\n description: 'Remove clips by id.',\n parameters: {\n type: 'object',\n properties: { ids: { type: 'array', items: { type: 'string' } } },\n required: ['ids'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'reorder_scenes',\n description: 'Move a clip earlier (-1) or later (1) by one slot.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n direction: { type: 'integer', enum: [-1, 1] },\n },\n required: ['id', 'direction'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'trim_scene',\n description: 'Set trimStartSec / trimEndSec on a clip (source seconds).',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n trimStartSec: { type: 'number' },\n trimEndSec: { type: 'number' },\n },\n required: ['id'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'add_scene',\n description:\n 'Add a scene for the AI video model to FILM: a colour scene carrying its shot (picture only - subject, setting, action, light, camera move; no on-screen text). Optional title is laid on it. Then call film_scenes. Returns the scene id.',\n parameters: {\n type: 'object',\n properties: {\n shot: { type: 'string' },\n seconds: { type: 'number', description: 'How long it plays (default 6, 2-15).' },\n title: { type: 'string', description: 'On-screen title for this scene.' },\n index: { type: 'integer', description: 'Position in the cut (default: the end).' },\n },\n required: ['shot'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'add_text',\n description: 'Lay a title on a scene (it moves with the scene). Times are seconds from the scene start.',\n parameters: {\n type: 'object',\n properties: {\n scene_id: { type: 'string' },\n text: { type: 'string' },\n at_sec: { type: 'number' },\n seconds: { type: 'number' },\n },\n required: ['scene_id', 'text'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'film_scenes',\n description:\n \"Film scenes that have a shot with the AI video model. Starts the filming and returns at once; each clip lands in its scene a few minutes later, keeping the scene's length and titles. Default: every colour scene with a shot.\",\n parameters: {\n type: 'object',\n properties: { scene_ids: { type: 'array', items: { type: 'string' } } },\n },\n },\n },\n ...MEDIA_TOOL_SCHEMAS(),\n];\n\n/** A tool's name and schema, OpenAI function-calling shape (web tools.ts `tool`). */\nfunction tool(\n name: string,\n description: string,\n properties: Record<string, unknown>,\n required: string[] = [],\n): BrainTool {\n return { type: 'function', function: { name, description, parameters: { type: 'object', properties, required } } };\n}\n\nfunction sceneEntry(): Record<string, unknown> {\n return {\n type: 'object',\n properties: {\n asset_id: {\n type: 'string',\n description: 'Library item or timeline clip id (video or image) to cut from. Omit for a scene to film.',\n },\n in_sec: { type: 'number', description: 'Start inside the source clip, seconds. Omit for the head.' },\n out_sec: {\n type: 'number',\n description: 'End inside the source clip, seconds. For a still: how long it holds.',\n },\n label: { type: 'string', description: 'Short scene name shown on the timeline.' },\n shot: {\n type: 'string',\n description:\n 'A scene to FILM instead of cutting from the library: subject, setting, action, light, camera move. Picture only. Then call film_scenes.',\n },\n seconds: { type: 'number', description: 'How long a scene to film plays (default 6, 2-15).' },\n },\n };\n}\n\nexport const MEDIA_TOOL_NAMES = [\n 'analyze_footage',\n 'read_document',\n 'get_transcript',\n 'search_dialogue',\n 'import_link',\n 'set_cut',\n 'add_music',\n 'add_sound_effect',\n 'add_voiceover',\n 'add_captions',\n 'set_format',\n] as const;\n\nfunction MEDIA_TOOL_SCHEMAS(): BrainTool[] {\n return [\n tool(\n 'analyze_footage',\n 'Learn the dialogue (timed transcript) and, when available, what each library item or clip shows. Cached per item: analyzing again is free. Call before cutting footage you have not seen.',\n {\n asset_ids: {\n type: 'array',\n items: { type: 'string' },\n description: 'Only these items; omit for every item not yet analyzed.',\n },\n visual: { type: 'boolean', description: 'Describe what the picture shows (default true).' },\n },\n ),\n tool(\n 'read_document',\n 'The full text of an uploaded document (screenplay, shot list, brief).',\n { document_id: { type: 'string' } },\n ['document_id'],\n ),\n tool(\n 'get_transcript',\n 'Every dialogue cue of one item with source timings, once it has been analyzed.',\n { asset_id: { type: 'string' } },\n ['asset_id'],\n ),\n tool(\n 'search_dialogue',\n 'Find where words are spoken across the analyzed media: returns the best-matching cues with their item id and source timings.',\n {\n query: { type: 'string', description: 'Words or a line of dialogue to look for.' },\n limit: { type: 'number', description: 'Max results (default 12).' },\n },\n ['query'],\n ),\n tool(\n 'import_link',\n \"Take a web link into the library: a direct picture, video or sound file, or a page (its preview picture or video). Links in the user's current message are already taken in; use this for a link from an earlier message.\",\n { url: { type: 'string' } },\n ['url'],\n ),\n tool(\n 'set_cut',\n 'Lay scenes on the timeline back to back. Each scene is cut from library footage (asset_id) or is a shot to film (shot + seconds). mode \"replace\" swaps the whole cut; \"append\" adds after the last scene. Returns the new scene ids.',\n {\n scenes: { type: 'array', items: sceneEntry(), description: 'Scenes in play order.' },\n mode: { type: 'string', enum: ['replace', 'append'], description: 'Default \"replace\".' },\n },\n ['scenes'],\n ),\n tool(\n 'add_music',\n 'Generate a music bed from a mood description and lay it under the cut (mixed under the other audio). Takes a minute or two.',\n {\n prompt: { type: 'string', description: 'Mood, genre, instrumentation, tempo, build.' },\n duration_sec: { type: 'number', description: \"Length wanted (default: the cut's length, max 180).\" },\n at_sec: { type: 'number', description: 'Timeline second it starts (default 0).' },\n },\n ['prompt'],\n ),\n tool(\n 'add_sound_effect',\n 'Generate one sound effect (a hit, riser, whoosh, ambience) and place it at a timeline second.',\n {\n prompt: { type: 'string' },\n at_sec: { type: 'number' },\n duration_sec: { type: 'number', description: 'Default 2, max 20.' },\n },\n ['prompt', 'at_sec'],\n ),\n tool(\n 'add_voiceover',\n 'Speak a line with a synthetic voice and place it at a timeline second; it moves with the scene it lands in.',\n {\n text: { type: 'string' },\n at_sec: { type: 'number', description: 'Default: after the last voiceover line, else 0.' },\n voice: {\n type: 'string',\n enum: STOCK_VOICES.map((v) => v.id),\n description: \"Default: the studio's first voice.\",\n },\n },\n ['text'],\n ),\n tool(\n 'add_captions',\n 'Captions from the dialogue of the given scenes (default: every video scene); transcribes what is not analyzed yet.',\n {\n scene_ids: { type: 'array', items: { type: 'string' } },\n },\n ),\n tool(\n 'set_format',\n 'Output aspect: 16:9, 9:16, 1:1, 4:5, or auto (source).',\n {\n aspect: { type: 'string', enum: ['16:9', '9:16', '1:1', '4:5', 'auto'] },\n },\n ['aspect'],\n ),\n ];\n}\n\nexport async function executeCutTool(name: string, rawArgs: unknown, ctx: AgentToolContext): Promise<ToolOutcome> {\n const args = (rawArgs && typeof rawArgs === 'object' ? rawArgs : {}) as Record<string, unknown>;\n if (name === 'get_timeline') {\n const t = ctx.getTimeline();\n const spans = sceneSpans(t.clips);\n const rows = t.clips.map((c, i) => ({\n index: i,\n id: c.id,\n kind: c.fillColor ? (c.shot ? 'shot to film' : 'colour scene') : c.type,\n ...(c.fillColor ? {} : { src: c.src?.slice(0, 80) }),\n ...(c.shot ? { shot: c.shot.slice(0, 160) } : {}),\n startSec: Math.round(spans[i].startSec * 10) / 10,\n durationSec: c.durationSec,\n trimStartSec: c.trimStartSec,\n trimEndSec: c.trimEndSec,\n titles: t.texts.filter((x) => x.sceneId === c.id).map((x) => x.text),\n }));\n return {\n ok: true,\n label: `Timeline · ${rows.length} clip(s)`,\n content: JSON.stringify(rows),\n };\n }\n if (name === 'remove_scenes') {\n const ids = Array.isArray(args.ids) ? args.ids.filter((x): x is string => typeof x === 'string') : [];\n let next = ctx.getTimeline();\n for (const id of ids) next = removeClip(next, id);\n ctx.setTimeline(next);\n return { ok: true, label: `Removed ${ids.length} clip(s)`, content: 'ok' };\n }\n if (name === 'reorder_scenes') {\n const id = typeof args.id === 'string' ? args.id : '';\n const direction = args.direction === -1 || args.direction === 1 ? args.direction : 1;\n ctx.setTimeline(moveClip(ctx.getTimeline(), id, direction));\n return { ok: true, label: `Moved ${id}`, content: 'ok' };\n }\n if (name === 'trim_scene') {\n const id = typeof args.id === 'string' ? args.id : '';\n const patch: { trimStartSec?: number; trimEndSec?: number | null } = {};\n if (typeof args.trimStartSec === 'number') patch.trimStartSec = args.trimStartSec;\n if (typeof args.trimEndSec === 'number') patch.trimEndSec = args.trimEndSec;\n ctx.setTimeline(updateClip(ctx.getTimeline(), id, patch));\n return { ok: true, label: `Trimmed ${id}`, content: 'ok' };\n }\n if (name === 'add_scene') {\n const shot = typeof args.shot === 'string' ? args.shot.trim() : '';\n if (!shot) return { ok: false, label: 'Add scene', content: 'error: a scene to film needs a shot' };\n const asked = typeof args.seconds === 'number' ? args.seconds : SHOT_SEC_RANGE.default;\n const seconds = Math.min(SHOT_SEC_RANGE.max, Math.max(SHOT_SEC_RANGE.min, asked));\n const t = ctx.getTimeline();\n const scene = { ...clipFromColor('#101014'), name: shot.slice(0, 32), shot, durationSec: seconds };\n const index =\n typeof args.index === 'number' && args.index >= 0 && args.index <= t.clips.length\n ? Math.floor(args.index)\n : t.clips.length;\n const clips = [...t.clips];\n clips.splice(index, 0, scene);\n let next: EditorTimeline = { ...t, clips };\n const title = typeof args.title === 'string' ? args.title.trim() : '';\n if (title) {\n const start = sceneSpans(clips).find((s) => s.id === scene.id)?.startSec ?? 0;\n const text = {\n ...textClipAt(start, { text: title, x: 0.5, y: 0.5 }),\n durationSec: Math.min(3, seconds),\n sceneId: scene.id,\n };\n next = { ...next, texts: [...next.texts, text] };\n }\n ctx.setTimeline(next);\n const note =\n seconds !== asked\n ? ` (a scene to film runs ${SHOT_SEC_RANGE.min}-${SHOT_SEC_RANGE.max}s, used ${seconds}s)`\n : '';\n return {\n ok: true,\n label: `Added scene · ${shot.slice(0, 32)}`,\n content: JSON.stringify({ scene_id: scene.id }) + note,\n };\n }\n if (name === 'add_text') {\n const t = ctx.getTimeline();\n const sceneId = typeof args.scene_id === 'string' ? args.scene_id : '';\n const span = sceneSpans(t.clips).find((s) => s.id === sceneId);\n const words = typeof args.text === 'string' ? args.text.trim() : '';\n if (!span || !words)\n return { ok: false, label: 'Add text', content: 'error: needs a scene_id from get_timeline and text' };\n const len = Math.max(0.5, span.endSec - span.startSec);\n const at = Math.min(len - 0.5, Math.max(0, typeof args.at_sec === 'number' ? args.at_sec : 0));\n const seconds = Math.min(len - at, Math.max(0.5, typeof args.seconds === 'number' ? args.seconds : len - at));\n const text = {\n ...textClipAt(span.startSec + at, { text: words, x: 0.5, y: 0.5 }),\n durationSec: seconds,\n sceneId,\n };\n ctx.setTimeline({ ...t, texts: [...t.texts, text] });\n return { ok: true, label: `Title · ${words.slice(0, 24)}`, content: JSON.stringify({ text_id: text.id }) };\n }\n if (name === 'film_scenes') {\n if (!ctx.film) return { ok: false, label: 'Film scenes', content: 'error: filming is not available here' };\n const t = ctx.getTimeline();\n const asked = Array.isArray(args.scene_ids)\n ? args.scene_ids.filter((x): x is string => typeof x === 'string')\n : [];\n const ids = (asked.length ? asked : t.clips.filter((c) => c.fillColor && c.shot).map((c) => c.id)).filter(\n (id) => t.clips.some((c) => c.id === id),\n );\n if (!ids.length) return { ok: false, label: 'Film scenes', content: 'error: no scene with a shot to film' };\n ctx.film(ids);\n return {\n ok: true,\n label: `Filming ${ids.length} scene${ids.length === 1 ? '' : 's'}`,\n content: `filming ${ids.length} scene(s); each lands in place in a few minutes`,\n };\n }\n if ((MEDIA_TOOL_NAMES as readonly string[]).includes(name)) {\n try {\n return await executeMediaTool(name as (typeof MEDIA_TOOL_NAMES)[number], args, ctx);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const kind = err instanceof ToolInputError ? 'bad arguments' : 'failed';\n return {\n ok: false,\n label: `${name.replace(/_/g, ' ')} ${kind}`,\n detail: message.slice(0, 80),\n content: `error (${kind}): ${message}`,\n };\n }\n }\n return { ok: false, label: name, content: `Unknown tool ${name}` };\n}\n\n// ── Media tools (web agent/tools.ts), over the connectors the editor already calls ──\n\nclass ToolInputError extends Error {}\ntype Args = Record<string, unknown>;\n\nfunction str(args: Args, key: string, required = false): string | undefined {\n const v = args[key];\n if (v == null || v === '') {\n if (required) throw new ToolInputError(`missing \"${key}\"`);\n return undefined;\n }\n if (typeof v !== 'string') throw new ToolInputError(`\"${key}\" must be a string`);\n return v;\n}\nfunction num(args: Args, key: string): number | undefined {\n const v = args[key];\n if (v == null || v === '') return undefined;\n const n = typeof v === 'number' ? v : Number(v);\n if (!Number.isFinite(n)) throw new ToolInputError(`\"${key}\" must be a number of seconds`);\n return n;\n}\nfunction strList(args: Args, key: string, required = false): string[] | undefined {\n const v = args[key];\n if (v == null) {\n if (required) throw new ToolInputError(`missing \"${key}\"`);\n return undefined;\n }\n if (!Array.isArray(v)) throw new ToolInputError(`\"${key}\" must be an array of ids`);\n return v.map((x) => String(x));\n}\n\nconst secs = (n: number): string => `${n.toFixed(1)}s`;\nconst plural = (n: number, word: string): string => `${n} ${word}${n === 1 ? '' : 's'}`;\nconst excerpt = (s: string, n: number): string => (s.length > n ? `${s.slice(0, n - 1)}…` : s);\nfunction withNotes(text: string, notes: string[]): string {\n return notes.length ? `${text}\\nNotes: ${notes.join('; ')}` : text;\n}\n\nconst DOCUMENT_CHAR_CAP = 60_000;\nconst TRANSCRIPT_CUE_CAP = 400;\nconst DEFAULT_MUSIC_SEC = 60;\nconst MAX_MUSIC_SEC = 180;\nconst DEFAULT_SFX_SEC = 2;\nexport const FORMAT_ASPECTS: Record<string, string | null> = {\n '16:9': '16:9',\n '9:16': '9:16',\n '1:1': '1:1',\n '4:5': '4:5',\n auto: null,\n};\n\n/** Every item the agent can name: the library, then the timeline's own footage. */\nexport function agentLibrary(ctx: AgentToolContext): AgentLibraryItem[] {\n const out: AgentLibraryItem[] = [...(ctx.library?.() ?? [])];\n const seen = new Set(out.map((i) => i.id));\n for (const c of ctx.getTimeline().clips) {\n if (c.fillColor || seen.has(c.id)) continue;\n out.push({ id: c.id, type: c.type, src: c.src, name: c.name });\n }\n return out;\n}\n\nfunction needRun(ctx: AgentToolContext, what: string): RunMediaAction {\n if (!ctx.runAction) throw new Error(`${what} is not available here`);\n return ctx.runAction;\n}\n\nfunction cache(ctx: AgentToolContext): Map<string, MediaAnalysis> {\n if (!ctx.analyses) ctx.analyses = new Map();\n return ctx.analyses;\n}\n\nfunction cutSec(t: EditorTimeline, sourceSec?: Readonly<Record<string, number>>): number {\n const spans = sceneSpans(t.clips, sourceSec);\n return spans.length ? spans[spans.length - 1].endSec : 0;\n}\n\nlet audioCounter = 0;\nfunction sceneAudioAt(\n t: EditorTimeline,\n audio: { audioUrl: string; startSec: number; durationSec: number | null; volume: number; label: string },\n sourceSec?: Readonly<Record<string, number>>,\n): SceneAudio {\n audioCounter += 1;\n const scene = sceneAtSec(sceneSpans(t.clips, sourceSec), audio.startSec);\n return {\n id: `agent-audio-${Date.now().toString(36)}-${audioCounter}`,\n ...audio,\n startSec: Math.round(audio.startSec * 1000) / 1000,\n ...(scene ? { sceneId: scene.id } : {}),\n };\n}\n\nasync function analyzeItem(\n item: AgentLibraryItem,\n ctx: AgentToolContext,\n visual: boolean,\n): Promise<{ analysis: MediaAnalysis; problems: string[] }> {\n const seed = cache(ctx).get(item.src);\n const problems: string[] = [];\n let transcript = seed?.transcript ?? [];\n const timed = item.type === 'video' || item.type === 'audio';\n if (timed && !seed) {\n if (ctx.runAction) {\n try {\n transcript = await transcribeMedia(ctx.runAction, item.src);\n } catch (err) {\n problems.push(`transcription failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n } else problems.push('transcription is not available here');\n }\n const clip = ctx.getTimeline().clips.find((c) => c.id === item.id);\n const durationSec =\n seed?.durationSec ||\n (clip\n ? clip.type === 'image'\n ? (clip.durationSec ?? DEFAULT_IMAGE_SEC)\n : (ctx.sourceSec?.()[clip.id] ?? clip.trimEndSec ?? 0)\n : 0) ||\n (transcript.length ? transcript[transcript.length - 1].end : 0);\n let description = seed?.description;\n if (visual && ctx.describe && !description && item.type !== 'audio') {\n try {\n let picture: string | null = item.type === 'image' ? item.src : null;\n if (!picture && ctx.runAction) {\n const r = await ctx.runAction('yantra-video-editing', 'YANTRA_VIDEO_EDIT_CONTACT_SHEET', {\n input_url: item.src,\n cols: 3,\n rows: 2,\n thumb_width: 320,\n });\n const root = (r.data && typeof r.data === 'object' ? r.data : r) as { output_url?: unknown };\n picture = typeof root.output_url === 'string' && root.output_url ? root.output_url : null;\n }\n if (picture) {\n description = await ctx.describe(\n picture,\n item.type === 'image'\n ? 'This is a still image from a video project.'\n : 'This is a contact sheet of six frames from one video clip, left to right then top to bottom, in time order.',\n );\n } else problems.push('no frames could be rendered for the visual pass');\n } catch (err) {\n problems.push(`visual pass failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n const analysis: MediaAnalysis = { durationSec, transcript, ...(description ? { description } : {}) };\n cache(ctx).set(item.src, analysis);\n return { analysis, problems };\n}\n\nfunction summarize(item: AgentLibraryItem, an: MediaAnalysis, problems: string[]): string {\n const bits = [`id=${item.id} \"${item.name}\" (${item.type})`];\n if (an.durationSec > 0) bits.push(secs(an.durationSec));\n if (an.transcript.length) bits.push(`dialogue: \"${excerpt(an.transcript.map((c) => c.text).join(' '), 220)}\"`);\n else if (item.type !== 'image') bits.push('no speech');\n if (an.description) bits.push(`looks: ${an.description}`);\n if (problems.length) bits.push(`(${problems.join('; ')})`);\n return `- ${bits.join(' · ')}`;\n}\n\nconst tokensOf = (s: string): string[] => s.toLowerCase().match(/[a-z0-9']{3,}/g) ?? [];\n\nfunction clipForEntry(\n entry: Args,\n i: number,\n library: AgentLibraryItem[],\n timeline: EditorTimeline,\n): { clip: EditorClip } | { error: string } {\n const assetId = str(entry, 'asset_id') ?? str(entry, 'id');\n const shot = str(entry, 'shot')?.trim();\n const label = str(entry, 'label');\n if (!assetId) {\n if (!shot) throw new ToolInputError(`scenes[${i}] needs an asset_id from the library or a shot to film`);\n const asked = num(entry, 'seconds') ?? SHOT_SEC_RANGE.default;\n const seconds = Math.min(SHOT_SEC_RANGE.max, Math.max(SHOT_SEC_RANGE.min, asked));\n return {\n clip: { ...clipFromColor('#101014'), name: (label ?? shot).slice(0, 32), shot, durationSec: seconds },\n };\n }\n const onTimeline = timeline.clips.find((c) => c.id === assetId);\n const item = library.find((x) => x.id === assetId);\n if (!onTimeline && !item) return { error: `scenes[${i}]: no library item \"${assetId}\"` };\n if (item?.type === 'audio') return { error: `scenes[${i}]: \"${assetId}\" is audio, not a picture` };\n const base = onTimeline\n ? {\n ...clipFromItem({\n id: onTimeline.itemId,\n type: onTimeline.type,\n src: onTimeline.src,\n x: 0,\n y: 0,\n width: 640,\n height: 360,\n zIndex: 1,\n generatedAssetName: onTimeline.name,\n }),\n ...(onTimeline.fillColor ? { fillColor: onTimeline.fillColor } : {}),\n ...(onTimeline.hasAudio === false ? { hasAudio: false as const } : {}),\n }\n : clipFromItem({\n id: item!.id,\n type: item!.type as 'image' | 'video',\n src: item!.src,\n x: 0,\n y: 0,\n width: 640,\n height: 360,\n zIndex: 1,\n generatedAssetName: item!.name,\n });\n const inSec = Math.max(0, num(entry, 'in_sec') ?? 0);\n const outSec = num(entry, 'out_sec');\n const named = label ? { name: label.slice(0, 32) } : {};\n if (base.type === 'image') {\n const hold = outSec !== undefined ? Math.max(0.5, outSec - inSec) : DEFAULT_IMAGE_SEC;\n return { clip: { ...base, ...named, durationSec: hold } };\n }\n if (outSec !== undefined && outSec <= inSec) return { error: `scenes[${i}]: out_sec must be after in_sec` };\n return { clip: { ...base, ...named, trimStartSec: inSec, trimEndSec: outSec ?? null } };\n}\n\nasync function executeMediaTool(\n name: (typeof MEDIA_TOOL_NAMES)[number],\n args: Args,\n ctx: AgentToolContext,\n): Promise<ToolOutcome> {\n const sourceSec = ctx.sourceSec?.();\n switch (name) {\n case 'analyze_footage': {\n const library = agentLibrary(ctx);\n const ids = strList(args, 'asset_ids');\n const visual = typeof args.visual === 'boolean' ? args.visual : true;\n const missing: string[] = [];\n const targets = ids\n ? ids.flatMap((id) => {\n const a = library.find((x) => x.id === id);\n if (!a) missing.push(`no item \"${id}\"`);\n return a ? [a] : [];\n })\n : library.filter((a) => {\n const an = cache(ctx).get(a.src);\n return !an || (visual && ctx.describe && !an.description && a.type !== 'audio');\n });\n if (!targets.length) {\n return {\n ok: true,\n label: 'Library already analyzed',\n content: withNotes('Everything in the library is already analyzed.', missing),\n };\n }\n const lines: string[] = [];\n let spoken = 0;\n for (let i = 0; i < targets.length; i += 1) {\n ctx.progress?.(`Scanning ${i + 1}/${targets.length}…`);\n const { analysis, problems } = await analyzeItem(targets[i], ctx, visual);\n if (analysis.transcript.length) spoken += 1;\n lines.push(summarize(targets[i], analysis, problems));\n }\n return {\n ok: true,\n label: `Scanned ${plural(targets.length, 'clip')}`,\n detail: `${spoken} with dialogue`,\n content: withNotes(`Analyzed ${plural(targets.length, 'item')}:\\n${lines.join('\\n')}`, missing),\n };\n }\n case 'read_document': {\n const id = str(args, 'document_id', true)!;\n const docs = ctx.documents?.() ?? [];\n const doc = docs.find((d) => d.id === id) ?? docs.find((d) => d.name.toLowerCase() === id.toLowerCase());\n if (!doc)\n throw new ToolInputError(\n `no document \"${id}\"; available: ${docs.map((d) => `${d.id} (${d.name})`).join(', ') || 'none'}`,\n );\n const cut = doc.text.length > DOCUMENT_CHAR_CAP;\n return {\n ok: true,\n label: `Read ${doc.name}`,\n content: `${doc.name}${cut ? ` (first ${DOCUMENT_CHAR_CAP} of ${doc.text.length} chars)` : ''}:\\n${doc.text.slice(0, DOCUMENT_CHAR_CAP)}`,\n };\n }\n case 'get_transcript': {\n const id = str(args, 'asset_id', true)!;\n const item = agentLibrary(ctx).find((x) => x.id === id);\n if (!item) throw new ToolInputError(`no library item \"${id}\"`);\n const cues = cache(ctx).get(item.src)?.transcript;\n if (!cues)\n return {\n ok: true,\n label: `No transcript for ${item.name}`,\n content: `\"${item.name}\" is not analyzed yet - call analyze_footage.`,\n };\n if (!cues.length)\n return { ok: true, label: `No speech in ${item.name}`, content: `\"${item.name}\" has no speech.` };\n const lines = cues\n .slice(0, TRANSCRIPT_CUE_CAP)\n .map((c) => `[${c.start.toFixed(1)}-${c.end.toFixed(1)}] ${c.text}`);\n return {\n ok: true,\n label: `Read transcript of ${item.name}`,\n content: `${item.name} (${plural(cues.length, 'cue')}):\\n${lines.join('\\n')}`,\n };\n }\n case 'search_dialogue': {\n const query = str(args, 'query', true)!;\n const limit = Math.max(1, Math.min(40, num(args, 'limit') ?? 12));\n const words = new Set(tokensOf(query));\n const needle = query.toLowerCase().trim();\n const hits: Array<{ score: number; line: string }> = [];\n let searched = 0;\n for (const item of agentLibrary(ctx)) {\n const cues = cache(ctx).get(item.src)?.transcript;\n if (!cues?.length) continue;\n searched += 1;\n cues.forEach((c, i) => {\n const text = c.text.toLowerCase();\n let score = 0;\n for (const w of tokensOf(text)) if (words.has(w)) score += 1;\n if (needle && text.includes(needle)) score += 5;\n if (!score) return;\n const before = cues[i - 1]?.text ?? '';\n const after = cues[i + 1]?.text ?? '';\n hits.push({\n score: score / Math.max(1, words.size),\n line: `- ${item.id} \"${item.name}\" [${c.start.toFixed(1)}-${c.end.toFixed(1)}] \"${c.text}\"${before || after ? ` (context: …${excerpt(before, 60)} | ${excerpt(after, 60)}…)` : ''}`,\n });\n });\n }\n if (!searched)\n return {\n ok: true,\n label: 'Nothing to search',\n content: 'No analyzed dialogue yet - call analyze_footage first.',\n };\n hits.sort((a, b) => b.score - a.score);\n const top = hits.slice(0, limit);\n return {\n ok: true,\n label: `Searched dialogue for \"${excerpt(query, 40)}\"`,\n detail: plural(top.length, 'match'),\n content: top.length\n ? `${plural(top.length, 'match')} for \"${query}\":\\n${top.map((h) => h.line).join('\\n')}`\n : `Nothing in the dialogue matches \"${query}\".`,\n };\n }\n case 'import_link': {\n const url = str(args, 'url', true)!.trim();\n const known = agentLibrary(ctx).find((a) => a.sourceUrl === url);\n if (known)\n return {\n ok: true,\n label: `Already have ${known.name}`,\n content: `Already in the library: ${known.type} id=${known.id} \"${known.name}\".`,\n };\n if (!ctx.importLink) throw new Error('taking in links is not available here');\n ctx.progress?.('Opening the link…');\n const got = await ctx.importLink(url);\n let looks = '';\n if (got.type === 'image' && ctx.describe) {\n const { analysis } = await analyzeItem(got, ctx, true);\n if (analysis.description) looks = ` · looks: ${analysis.description}`;\n }\n return {\n ok: true,\n label: `Took in ${got.name}`,\n content: `Took in the link as ${got.type} id=${got.id} \"${got.name}\"${looks}.`,\n };\n }\n case 'set_cut': {\n const raw = args.scenes;\n if (!Array.isArray(raw) || !raw.length) throw new ToolInputError('\"scenes\" must be a non-empty array');\n const mode = str(args, 'mode') === 'append' ? 'append' : 'replace';\n const t = ctx.getTimeline();\n const library = agentLibrary(ctx);\n const notes: string[] = [];\n const made: EditorClip[] = [];\n raw.forEach((e, i) => {\n const entry = (e && typeof e === 'object' && !Array.isArray(e) ? e : {}) as Args;\n const r = clipForEntry(entry, i, library, t);\n if ('error' in r) notes.push(`skipped ${r.error}`);\n else made.push(r.clip);\n });\n if (!made.length)\n return { ok: false, label: 'Nothing placed', content: withNotes('Nothing was placed.', notes) };\n const next: EditorTimeline = { ...t, clips: mode === 'replace' ? made : [...t.clips, ...made] };\n ctx.setTimeline(next);\n const toFilm = made.filter((c) => c.fillColor && c.shot).length;\n return {\n ok: true,\n label: `${mode === 'append' ? 'Appended' : 'Placed'} ${plural(made.length, 'scene')}`,\n detail: `cut is ${secs(cutSec(next, sourceSec))}`,\n content: withNotes(\n `Placed ${plural(made.length, 'scene')} (${mode}): ${JSON.stringify(made.map((c) => c.id))}.${toFilm ? ` ${plural(toFilm, 'scene')} wait to be filmed: call film_scenes.` : ''}`,\n notes,\n ),\n };\n }\n case 'add_music': {\n const run = needRun(ctx, 'Music');\n const prompt = str(args, 'prompt', true)!;\n const t = ctx.getTimeline();\n const total = cutSec(t, sourceSec);\n const at = Math.max(0, num(args, 'at_sec') ?? 0);\n const wanted = num(args, 'duration_sec') ?? (total > at ? total - at : DEFAULT_MUSIC_SEC);\n const durationSec = Math.max(10, Math.min(MAX_MUSIC_SEC, Math.round(wanted)));\n ctx.progress?.(`Composing music (${durationSec}s)…`);\n const audioUrl = await composeMusic(run, `Instrumental music bed, no vocals: ${prompt}`, durationSec);\n const now = ctx.getTimeline();\n if (at <= 0) {\n ctx.setTimeline({ ...now, soundtrack: { audioUrl, mode: 'mix', title: excerpt(prompt, 60) } });\n return {\n ok: true,\n label: 'Generated music',\n detail: excerpt(prompt, 60),\n content: `Music laid under the whole cut (${secs(durationSec)}), mixed under the other audio.`,\n };\n }\n const audio = sceneAudioAt(\n now,\n { audioUrl, startSec: at, durationSec: null, volume: 0.6, label: `Music · ${excerpt(prompt, 32)}` },\n sourceSec,\n );\n ctx.setTimeline({ ...now, sceneAudio: [...(now.sceneAudio ?? []), audio] });\n return {\n ok: true,\n label: 'Generated music',\n detail: excerpt(prompt, 60),\n content: `Music placed at ${secs(at)} (id=${audio.id}).`,\n };\n }\n case 'add_sound_effect': {\n const run = needRun(ctx, 'Sound effects');\n const prompt = str(args, 'prompt', true)!;\n const at = Math.max(0, num(args, 'at_sec') ?? 0);\n const durationSec = Math.max(0.5, Math.min(20, num(args, 'duration_sec') ?? DEFAULT_SFX_SEC));\n ctx.progress?.(`Generating sound effect: ${excerpt(prompt, 40)}…`);\n const audioUrl = await composeSoundEffect(run, prompt, durationSec);\n const now = ctx.getTimeline();\n const audio = sceneAudioAt(\n now,\n { audioUrl, startSec: at, durationSec, volume: 0.9, label: `SFX · ${excerpt(prompt, 32)}` },\n sourceSec,\n );\n ctx.setTimeline({ ...now, sceneAudio: [...(now.sceneAudio ?? []), audio] });\n return {\n ok: true,\n label: 'Added sound effect',\n detail: excerpt(prompt, 60),\n content: `Sound effect placed at ${secs(at)} (id=${audio.id}).`,\n };\n }\n case 'add_voiceover': {\n const run = needRun(ctx, 'Voiceover');\n const text = str(args, 'text', true)!;\n const voice = str(args, 'voice');\n if (voice && !STOCK_VOICES.some((v) => v.id === voice))\n throw new ToolInputError(`unknown voice \"${voice}\"`);\n const before = ctx.getTimeline();\n const lines = (before.sceneAudio ?? []).filter((a) => a.label?.startsWith('Voiceover'));\n const lastEnd = lines.reduce((end, a) => Math.max(end, a.startSec + (a.durationSec ?? 0)), 0);\n const at = Math.max(0, num(args, 'at_sec') ?? lastEnd);\n ctx.progress?.('Recording voiceover…');\n const audioUrl = await speakLine(run, text, voice);\n const measured = await probeAudioSec(run, audioUrl);\n const now = ctx.getTimeline();\n const audio = sceneAudioAt(\n now,\n {\n audioUrl,\n startSec: at,\n durationSec: measured > 0 ? Math.round(measured * 1000) / 1000 : null,\n volume: 1,\n label: `Voiceover · ${excerpt(text, 32)}`,\n },\n sourceSec,\n );\n ctx.setTimeline({ ...now, sceneAudio: [...(now.sceneAudio ?? []), audio] });\n return {\n ok: true,\n label: 'Added voiceover',\n detail: excerpt(text, 60),\n content: `Voiceover placed at ${secs(at)} (id=${audio.id}${measured > 0 ? `, ${secs(measured)}` : ''}).`,\n };\n }\n case 'add_captions': {\n const ids = strList(args, 'scene_ids');\n const t = ctx.getTimeline();\n const notes: string[] = [];\n if (ids)\n for (const id of ids) if (!t.clips.some((c) => c.id === id)) notes.push(`no scene with id \"${id}\"`);\n const scenes = t.clips.filter((c) => c.type === 'video' && !c.fillColor && (!ids || ids.includes(c.id)));\n let next = t;\n let count = 0;\n for (const scene of scenes) {\n let cues = cache(ctx).get(scene.src)?.transcript;\n if (!cues && ctx.runAction) {\n ctx.progress?.(`Transcribing ${scene.name}…`);\n cues = (\n await analyzeItem({ id: scene.id, type: 'video', src: scene.src, name: scene.name }, ctx, false)\n ).analysis.transcript;\n }\n const lines = captionsForClip(next, scene.id, cues ?? [], sourceSec);\n count += lines.length;\n next = placeCaptions(next, lines);\n }\n if (!count) notes.push('no dialogue in those scenes');\n else ctx.setTimeline(next);\n return {\n ok: count > 0,\n label: count > 0 ? `Captioned ${plural(count, 'line')}` : 'No captions added',\n content: withNotes(`Added ${plural(count, 'caption')}.`, notes),\n };\n }\n case 'set_format': {\n const aspect = str(args, 'aspect', true)!;\n if (!(aspect in FORMAT_ASPECTS)) {\n return {\n ok: false,\n label: 'Format unchanged',\n content: `Format unchanged.\\nNotes: unknown aspect \"${aspect}\" - use 16:9, 9:16, 1:1, 4:5 or auto`,\n };\n }\n const t = ctx.getTimeline();\n const ratio = FORMAT_ASPECTS[aspect];\n const rest: EditorTimeline = { ...t };\n delete rest.aspect;\n ctx.setTimeline(ratio ? { ...t, aspect: ratio } : rest);\n return { ok: true, label: `Set format ${aspect}`, content: `Format set to ${aspect}.` };\n }\n }\n}\n"],"names":["_a","_b","_c","_d"],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import {resultUrl}from'./mediaActions.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const MUSIC_MODEL = "fal-ai/elevenlabs/music";
18
+ const SFX_MODEL = "eleven_text_to_sound_v2";
19
+ const MUSIC_MOODS = [{
20
+ id: "upbeat",
21
+ label: "Upbeat",
22
+ prompt: "Upbeat energetic pop backing track, bright synths, driving rhythm, feel-good, instrumental, clean mix"
23
+ }, {
24
+ id: "cinematic",
25
+ label: "Cinematic",
26
+ prompt: "Cinematic orchestral underscore, swelling strings, soft brass, emotional build, instrumental film score"
27
+ }, {
28
+ id: "ambient",
29
+ label: "Ambient",
30
+ prompt: "Calm ambient background bed, soft evolving pads, gentle textures, relaxing, loopable, instrumental"
31
+ }, {
32
+ id: "lofi",
33
+ label: "Lo-fi",
34
+ prompt: "Lo-fi hip hop beat, dusty drums, warm keys, vinyl crackle, chill study vibe, instrumental"
35
+ }, {
36
+ id: "acoustic",
37
+ label: "Acoustic",
38
+ prompt: "Warm acoustic guitar backing track, light percussion, organic and friendly, instrumental"
39
+ }, {
40
+ id: "electronic",
41
+ label: "Electronic",
42
+ prompt: "Modern electronic track, punchy synth bass, crisp hats, mid-tempo groove, instrumental"
43
+ }, {
44
+ id: "corporate",
45
+ label: "Corporate",
46
+ prompt: "Uplifting corporate background music, clean piano and soft synths, optimistic, steady pulse, instrumental"
47
+ }, {
48
+ id: "epic",
49
+ label: "Epic",
50
+ prompt: "Epic trailer music, massive percussion hits, choir stabs, rising tension, heroic climax, instrumental"
51
+ }];
52
+ const STOCK_VOICES = [{
53
+ id: "af_heart",
54
+ label: "Heart \xB7 female"
55
+ }, {
56
+ id: "af_bella",
57
+ label: "Bella \xB7 female"
58
+ }, {
59
+ id: "af_nova",
60
+ label: "Nova \xB7 female"
61
+ }, {
62
+ id: "af_sarah",
63
+ label: "Sarah \xB7 female"
64
+ }, {
65
+ id: "af_sky",
66
+ label: "Sky \xB7 female"
67
+ }, {
68
+ id: "bf_emma",
69
+ label: "Emma \xB7 female (British)"
70
+ }, {
71
+ id: "am_adam",
72
+ label: "Adam \xB7 male"
73
+ }, {
74
+ id: "am_michael",
75
+ label: "Michael \xB7 male"
76
+ }, {
77
+ id: "am_onyx",
78
+ label: "Onyx \xB7 male"
79
+ }, {
80
+ id: "am_liam",
81
+ label: "Liam \xB7 male"
82
+ }, {
83
+ id: "bm_george",
84
+ label: "George \xB7 male (British)"
85
+ }, {
86
+ id: "bm_daniel",
87
+ label: "Daniel \xB7 male (British)"
88
+ }];
89
+ const DEFAULT_STOCK_VOICE = STOCK_VOICES[0].id;
90
+ function buildSpeakParams(text, voice = DEFAULT_STOCK_VOICE) {
91
+ return {
92
+ text,
93
+ voice,
94
+ engine: "kokoro",
95
+ language: "en"
96
+ };
97
+ }
98
+ async function speakLine(run, text, voice) {
99
+ const result = await run("yantra-voicebox", "YANTRA_VOICEBOX_SPEAK", buildSpeakParams(text, voice));
100
+ return resultUrl(result, "SPEAK");
101
+ }
102
+ async function composeMusic(run, prompt, durationSec) {
103
+ const result = await run("yantra-audio", "YANTRA_AUDIO_RUN_PROMPT", {
104
+ prompt,
105
+ model: MUSIC_MODEL,
106
+ durationSec: Math.round(durationSec),
107
+ format: "mp3"
108
+ });
109
+ return resultUrl(result, "RUN_PROMPT");
110
+ }
111
+ async function composeSoundEffect(run, prompt, durationSec) {
112
+ try {
113
+ return resultUrl(await run("yantra-audio", "YANTRA_AUDIO_RUN_PROMPT", {
114
+ prompt,
115
+ durationSec,
116
+ model: SFX_MODEL
117
+ }), "RUN_PROMPT");
118
+ } catch (e) {
119
+ return resultUrl(await run("yantra-audio", "YANTRA_AUDIO_RUN_PROMPT", {
120
+ prompt: `Sound effect: ${prompt}`,
121
+ durationSec
122
+ }), "RUN_PROMPT");
123
+ }
124
+ }
125
+ function parseStockTracks(result) {
126
+ const root = result.data && typeof result.data === "object" ? result.data : result;
127
+ if (!Array.isArray(root.tracks)) return [];
128
+ return root.tracks.flatMap((row) => {
129
+ var _a, _b, _c, _d;
130
+ if (!row || typeof row !== "object") return [];
131
+ const r = row;
132
+ if (typeof r.url !== "string" || !r.url) return [];
133
+ return [__spreadValues({
134
+ id: String((_a = r.id) != null ? _a : r.url),
135
+ title: String((_b = r.title) != null ? _b : "Untitled"),
136
+ artist: String((_c = r.artist) != null ? _c : ""),
137
+ durationMs: Number(r.durationMs) || 0,
138
+ url: r.url,
139
+ license: String((_d = r.license) != null ? _d : "")
140
+ }, typeof r.page === "string" ? {
141
+ page: r.page
142
+ } : {})];
143
+ });
144
+ }
145
+ async function searchStockMusic(run, query, limit = 12) {
146
+ var _a;
147
+ const result = await run("yantra-audio", "YANTRA_AUDIO_STOCK_SEARCH", {
148
+ query,
149
+ limit
150
+ });
151
+ if (result.successful === false) throw new Error(String((_a = result.error) != null ? _a : "Search failed"));
152
+ return parseStockTracks(result);
153
+ }
154
+ async function resolveStockTrack(run, track) {
155
+ const raw = track.url.replace(/#.*$/, "");
156
+ try {
157
+ const result = await run("yantra-audio", "YANTRA_AUDIO_STOCK_RESOLVE", {
158
+ url: raw
159
+ });
160
+ const root = result.data && typeof result.data === "object" ? result.data : result;
161
+ if (result.successful !== false && typeof root.url === "string" && root.url) return root.url;
162
+ } catch (e) {
163
+ }
164
+ return raw;
165
+ }export{DEFAULT_STOCK_VOICE,MUSIC_MODEL,MUSIC_MOODS,SFX_MODEL,STOCK_VOICES,buildSpeakParams,composeMusic,composeSoundEffect,parseStockTracks,resolveStockTrack,searchStockMusic,speakLine};//# sourceMappingURL=audioServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioServices.js","sources":["../../../../src/features/canvas/videoEditor/audioServices.ts"],"sourcesContent":["/**\n * The audio connector calls the editor panels and the agent share: compose a\n * music bed, a sound effect, speak a line, search / resolve stock music.\n * Thin wrappers over the host's RunMediaAction so a test scripts them.\n */\nimport { resultUrl, type RunMediaAction } from './mediaActions';\n\n/** Model pin for music: without it the run dies (live-smoked), with it the lane returns an mp3. */\nexport const MUSIC_MODEL = 'fal-ai/elevenlabs/music';\nexport const SFX_MODEL = 'eleven_text_to_sound_v2';\n\n/** Mood presets (web MusicPanel MOODS): each a full prompt for an instrumental bed. */\nexport const MUSIC_MOODS: ReadonlyArray<{ id: string; label: string; prompt: string }> = [\n {\n id: 'upbeat',\n label: 'Upbeat',\n prompt: 'Upbeat energetic pop backing track, bright synths, driving rhythm, feel-good, instrumental, clean mix',\n },\n {\n id: 'cinematic',\n label: 'Cinematic',\n prompt: 'Cinematic orchestral underscore, swelling strings, soft brass, emotional build, instrumental film score',\n },\n {\n id: 'ambient',\n label: 'Ambient',\n prompt: 'Calm ambient background bed, soft evolving pads, gentle textures, relaxing, loopable, instrumental',\n },\n {\n id: 'lofi',\n label: 'Lo-fi',\n prompt: 'Lo-fi hip hop beat, dusty drums, warm keys, vinyl crackle, chill study vibe, instrumental',\n },\n {\n id: 'acoustic',\n label: 'Acoustic',\n prompt: 'Warm acoustic guitar backing track, light percussion, organic and friendly, instrumental',\n },\n {\n id: 'electronic',\n label: 'Electronic',\n prompt: 'Modern electronic track, punchy synth bass, crisp hats, mid-tempo groove, instrumental',\n },\n {\n id: 'corporate',\n label: 'Corporate',\n prompt: 'Uplifting corporate background music, clean piano and soft synths, optimistic, steady pulse, instrumental',\n },\n {\n id: 'epic',\n label: 'Epic',\n prompt: 'Epic trailer music, massive percussion hits, choir stabs, rising tension, heroic climax, instrumental',\n },\n];\n\n/** Kokoro stock voices (web VOICEOVER_VOICES). */\nexport const STOCK_VOICES: ReadonlyArray<{ id: string; label: string }> = [\n { id: 'af_heart', label: 'Heart · female' },\n { id: 'af_bella', label: 'Bella · female' },\n { id: 'af_nova', label: 'Nova · female' },\n { id: 'af_sarah', label: 'Sarah · female' },\n { id: 'af_sky', label: 'Sky · female' },\n { id: 'bf_emma', label: 'Emma · female (British)' },\n { id: 'am_adam', label: 'Adam · male' },\n { id: 'am_michael', label: 'Michael · male' },\n { id: 'am_onyx', label: 'Onyx · male' },\n { id: 'am_liam', label: 'Liam · male' },\n { id: 'bm_george', label: 'George · male (British)' },\n { id: 'bm_daniel', label: 'Daniel · male (British)' },\n];\nexport const DEFAULT_STOCK_VOICE = STOCK_VOICES[0].id;\n\n/** A kokoro preset must ride with its engine, or the connector defaults to another and rejects it. */\nexport function buildSpeakParams(text: string, voice: string = DEFAULT_STOCK_VOICE): Record<string, unknown> {\n return { text, voice, engine: 'kokoro', language: 'en' };\n}\n\nexport async function speakLine(run: RunMediaAction, text: string, voice?: string): Promise<string> {\n const result = await run('yantra-voicebox', 'YANTRA_VOICEBOX_SPEAK', buildSpeakParams(text, voice));\n return resultUrl(result, 'SPEAK');\n}\n\nexport async function composeMusic(run: RunMediaAction, prompt: string, durationSec: number): Promise<string> {\n const result = await run('yantra-audio', 'YANTRA_AUDIO_RUN_PROMPT', {\n prompt,\n model: MUSIC_MODEL,\n durationSec: Math.round(durationSec),\n format: 'mp3',\n });\n return resultUrl(result, 'RUN_PROMPT');\n}\n\n/** The sound-effects model by name first; intent routing is the fallback (web generateSfx). */\nexport async function composeSoundEffect(run: RunMediaAction, prompt: string, durationSec: number): Promise<string> {\n try {\n return resultUrl(\n await run('yantra-audio', 'YANTRA_AUDIO_RUN_PROMPT', { prompt, durationSec, model: SFX_MODEL }),\n 'RUN_PROMPT',\n );\n } catch {\n return resultUrl(\n await run('yantra-audio', 'YANTRA_AUDIO_RUN_PROMPT', { prompt: `Sound effect: ${prompt}`, durationSec }),\n 'RUN_PROMPT',\n );\n }\n}\n\n/** One stock row from YANTRA_AUDIO_STOCK_SEARCH (Openverse; openly licensed). */\nexport interface StockTrack {\n id: string;\n title: string;\n artist: string;\n durationMs: number;\n url: string;\n license: string;\n page?: string;\n}\n\nexport function parseStockTracks(result: Record<string, unknown>): StockTrack[] {\n const root = (result.data && typeof result.data === 'object' ? result.data : result) as { tracks?: unknown };\n if (!Array.isArray(root.tracks)) return [];\n return root.tracks.flatMap((row) => {\n if (!row || typeof row !== 'object') return [];\n const r = row as Record<string, unknown>;\n if (typeof r.url !== 'string' || !r.url) return [];\n return [\n {\n id: String(r.id ?? r.url),\n title: String(r.title ?? 'Untitled'),\n artist: String(r.artist ?? ''),\n durationMs: Number(r.durationMs) || 0,\n url: r.url,\n license: String(r.license ?? ''),\n ...(typeof r.page === 'string' ? { page: r.page } : {}),\n },\n ];\n });\n}\n\nexport async function searchStockMusic(run: RunMediaAction, query: string, limit = 12): Promise<StockTrack[]> {\n const result = await run('yantra-audio', 'YANTRA_AUDIO_STOCK_SEARCH', { query, limit });\n if (result.successful === false) throw new Error(String(result.error ?? 'Search failed'));\n return parseStockTracks(result);\n}\n\n/**\n * Search rows carry transient preview URLs (#preview); adding one resolves a\n * durable stored URL. A failed resolve falls back to the preview URL: a\n * playable track now beats an error.\n */\nexport async function resolveStockTrack(run: RunMediaAction, track: StockTrack): Promise<string> {\n const raw = track.url.replace(/#.*$/, '');\n try {\n const result = await run('yantra-audio', 'YANTRA_AUDIO_STOCK_RESOLVE', { url: raw });\n const root = (result.data && typeof result.data === 'object' ? result.data : result) as { url?: unknown };\n if (result.successful !== false && typeof root.url === 'string' && root.url) return root.url;\n } catch {\n // fall through to the preview URL\n }\n return raw;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import {sceneSpans,sceneAtSec}from'./sceneLayers.js';var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const CAPTION_SIZES = {
21
+ small: 28,
22
+ medium: 40,
23
+ large: 56
24
+ };
25
+ const DEFAULT_CAPTION_STYLE = {
26
+ color: "#ffffff",
27
+ stroke: "#000000",
28
+ fontSize: CAPTION_SIZES.medium
29
+ };
30
+ const CAPTION_COLORS = ["#ffffff", "#facc15", "#22d3ee", "#f472b6", "#000000"];
31
+ const CAPTION_X = 0.5;
32
+ const CAPTION_Y = 0.86;
33
+ const MIN_CAPTION_SEC = 0.2;
34
+ function captionStyleOf(timeline) {
35
+ return __spreadValues(__spreadValues({}, DEFAULT_CAPTION_STYLE), timeline.captionStyle);
36
+ }
37
+ function captionSizeOf(style) {
38
+ var _a;
39
+ const px = (_a = style.fontSize) != null ? _a : CAPTION_SIZES.medium;
40
+ return Object.keys(CAPTION_SIZES).reduce((best, k) => Math.abs(CAPTION_SIZES[k] - px) < Math.abs(CAPTION_SIZES[best] - px) ? k : best);
41
+ }
42
+ function parseTranscriptSegments(result) {
43
+ const root = result.data && typeof result.data === "object" ? result.data : result;
44
+ const raw = Array.isArray(root.segments) ? root.segments : Array.isArray(root.cues) ? root.cues : [];
45
+ const out = [];
46
+ for (const entry of raw) {
47
+ if (!entry || typeof entry !== "object") continue;
48
+ const e = entry;
49
+ const text = typeof e.text === "string" ? e.text.trim() : "";
50
+ const start = Number(e.start);
51
+ const end = Number(e.end);
52
+ if (!text || !Number.isFinite(start) || !Number.isFinite(end) || end <= start) continue;
53
+ out.push({
54
+ start,
55
+ end,
56
+ text
57
+ });
58
+ }
59
+ return out;
60
+ }
61
+ async function transcribeMedia(run, src) {
62
+ var _a;
63
+ try {
64
+ const result = await run("yantra-video-clip", "YANTRA_VIDEO_CLIP_TRANSCRIBE", {
65
+ video_url: src
66
+ });
67
+ if (result.successful === false) throw new Error(String((_a = result.error) != null ? _a : "Transcription failed"));
68
+ return parseTranscriptSegments(result);
69
+ } catch (err) {
70
+ if (/no speech/i.test(err instanceof Error ? err.message : String(err))) return [];
71
+ throw err;
72
+ }
73
+ }
74
+ let captionCounter = 0;
75
+ function captionLine(text, startSec, endSec, sceneId) {
76
+ captionCounter += 1;
77
+ return __spreadValues({
78
+ id: `caption-${Date.now().toString(36)}-${captionCounter}`,
79
+ text,
80
+ startSec: Math.round(startSec * 1e3) / 1e3,
81
+ durationSec: Math.round((endSec - startSec) * 1e3) / 1e3,
82
+ x: CAPTION_X,
83
+ y: CAPTION_Y,
84
+ role: "caption"
85
+ }, sceneId ? {
86
+ sceneId
87
+ } : {});
88
+ }
89
+ function cuesToCaptions(cues, window, sceneId) {
90
+ var _a, _b;
91
+ const inSec = (_a = window.sourceInSec) != null ? _a : 0;
92
+ const outSec = (_b = window.sourceOutSec) != null ? _b : Infinity;
93
+ const speed = window.speed && window.speed > 0 ? window.speed : 1;
94
+ const out = [];
95
+ for (const cue of cues) {
96
+ const text = cue.text.trim();
97
+ if (!text || cue.end <= inSec || cue.start >= outSec) continue;
98
+ const from = window.timelineStartSec + (Math.max(cue.start, inSec) - inSec) / speed;
99
+ const to = window.timelineStartSec + (Math.min(cue.end, outSec) - inSec) / speed;
100
+ if (to - from < MIN_CAPTION_SEC) continue;
101
+ out.push(captionLine(text, from, to, sceneId));
102
+ }
103
+ return out;
104
+ }
105
+ function captionsForClip(timeline, clipId, cues, sourceSec) {
106
+ var _a;
107
+ const clip = timeline.clips.find((c) => c.id === clipId);
108
+ const span = sceneSpans(timeline.clips, sourceSec).find((s) => s.id === clipId);
109
+ if (!clip || !span) return [];
110
+ return cuesToCaptions(cues, {
111
+ timelineStartSec: span.startSec,
112
+ sourceInSec: clip.trimStartSec,
113
+ sourceOutSec: (_a = clip.trimEndSec) != null ? _a : span.endSec > span.startSec ? clip.trimStartSec + (span.endSec - span.startSec) * clip.speed : null,
114
+ speed: clip.speed
115
+ }, clip.id);
116
+ }
117
+ function captionsForAudioAt(timeline, cues, startSec, durationSec, sourceSec) {
118
+ const spans = sceneSpans(timeline.clips, sourceSec);
119
+ return cuesToCaptions(cues, {
120
+ timelineStartSec: startSec,
121
+ sourceOutSec: durationSec != null ? durationSec : null
122
+ }).map((line) => {
123
+ const scene = sceneAtSec(spans, line.startSec);
124
+ return scene ? __spreadProps(__spreadValues({}, line), {
125
+ sceneId: scene.id
126
+ }) : line;
127
+ });
128
+ }
129
+ function placeCaptions(timeline, lines) {
130
+ if (!lines.length) return timeline;
131
+ const overlaps = (a, b) => a.startSec < b.startSec + b.durationSec && b.startSec < a.startSec + a.durationSec;
132
+ const kept = timeline.texts.filter((t) => t.role !== "caption" || !lines.some((l) => overlaps(l, t)));
133
+ return __spreadProps(__spreadValues({}, timeline), {
134
+ texts: [...kept, ...lines].sort((a, b) => a.startSec - b.startSec)
135
+ });
136
+ }
137
+ function captionLines(timeline) {
138
+ return timeline.texts.filter((t) => t.role === "caption");
139
+ }
140
+ function clearCaptions(timeline) {
141
+ return __spreadProps(__spreadValues({}, timeline), {
142
+ texts: timeline.texts.filter((t) => t.role !== "caption")
143
+ });
144
+ }export{CAPTION_COLORS,CAPTION_SIZES,CAPTION_X,CAPTION_Y,DEFAULT_CAPTION_STYLE,captionLine,captionLines,captionSizeOf,captionStyleOf,captionsForAudioAt,captionsForClip,clearCaptions,cuesToCaptions,parseTranscriptSegments,placeCaptions,transcribeMedia};//# sourceMappingURL=captions.js.map