@adminide-stack/yantra-mobile 12.0.69-alpha.8 → 12.0.69

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 (522) hide show
  1. package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
  2. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
  3. package/lib/components/KeyboardComposerDock.js +8 -1
  4. package/lib/components/KeyboardComposerDock.js.map +1 -1
  5. package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  7. package/lib/config/env-config.js +4 -0
  8. package/lib/config/env-config.js.map +1 -1
  9. package/lib/contexts/ChatLiveStreamContext.js +4 -1
  10. package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
  11. package/lib/features/agent-chat/NativeAgentChat.js +2 -0
  12. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  13. package/lib/features/apps/AppsCatalog.js +2 -2
  14. package/lib/features/apps/AppsCatalog.js.map +1 -1
  15. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  16. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  17. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  18. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  19. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  20. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  21. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  22. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  23. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  24. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  25. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  26. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  27. package/lib/features/canvas/CanvasExperience.js +859 -0
  28. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  29. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  30. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  32. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  33. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  34. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  35. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  36. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  37. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  38. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  39. package/lib/features/canvas/CanvasToolDock.js +423 -0
  40. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  41. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  42. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  43. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  44. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  45. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  46. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  47. package/lib/features/canvas/MoodboardExperience.js +205 -0
  48. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  49. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  50. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  51. package/lib/features/canvas/PromoContextFields.js +150 -0
  52. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  53. package/lib/features/canvas/SetStudioExperience.js +323 -0
  54. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  56. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  57. package/lib/features/canvas/VideoEditExperience.js +824 -0
  58. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  59. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  60. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  61. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  62. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  63. package/lib/features/canvas/aiEdit.js +53 -0
  64. package/lib/features/canvas/aiEdit.js.map +1 -0
  65. package/lib/features/canvas/canvasAgentChat.js +76 -0
  66. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  67. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  68. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  69. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  70. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  71. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  72. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  73. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  74. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  75. package/lib/features/canvas/canvasCore.js +138 -1
  76. package/lib/features/canvas/canvasCore.js.map +1 -1
  77. package/lib/features/canvas/canvasEditOps.js +224 -0
  78. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  79. package/lib/features/canvas/canvasTasks.js +187 -0
  80. package/lib/features/canvas/canvasTasks.js.map +1 -0
  81. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  82. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  83. package/lib/features/canvas/editTools.js +54 -0
  84. package/lib/features/canvas/editTools.js.map +1 -0
  85. package/lib/features/canvas/extendVideo.js +5 -0
  86. package/lib/features/canvas/extendVideo.js.map +1 -0
  87. package/lib/features/canvas/frameExtract.js +33 -0
  88. package/lib/features/canvas/frameExtract.js.map +1 -0
  89. package/lib/features/canvas/generationModels.js +201 -0
  90. package/lib/features/canvas/generationModels.js.map +1 -0
  91. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  92. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  93. package/lib/features/canvas/influencer/productReel.js +72 -0
  94. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  95. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  96. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  97. package/lib/features/canvas/moodboardCore.js +13 -0
  98. package/lib/features/canvas/moodboardCore.js.map +1 -0
  99. package/lib/features/canvas/promoProjectImport.js +99 -0
  100. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  101. package/lib/features/canvas/promoVideo.js +312 -0
  102. package/lib/features/canvas/promoVideo.js.map +1 -0
  103. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  104. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  105. package/lib/features/canvas/sessionIdentity.js +28 -1
  106. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  107. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  108. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  109. package/lib/features/canvas/set/cameraPath.js +194 -0
  110. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  111. package/lib/features/canvas/set/setProject.js +24 -0
  112. package/lib/features/canvas/set/setProject.js.map +1 -0
  113. package/lib/features/canvas/storageLibrary.js +184 -0
  114. package/lib/features/canvas/storageLibrary.js.map +1 -0
  115. package/lib/features/canvas/studioCatalog.js +129 -0
  116. package/lib/features/canvas/studioCatalog.js.map +1 -0
  117. package/lib/features/canvas/studioLooks.js +189 -0
  118. package/lib/features/canvas/studioLooks.js.map +1 -0
  119. package/lib/features/canvas/surfaceIndex.js +63 -1
  120. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  121. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  122. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  123. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  124. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  125. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  126. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  127. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  128. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  129. package/lib/features/canvas/video3d.js +109 -0
  130. package/lib/features/canvas/video3d.js.map +1 -0
  131. package/lib/features/canvas/videoClips.js +42 -0
  132. package/lib/features/canvas/videoClips.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  134. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  136. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  138. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  140. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  142. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  144. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/filters.js +41 -0
  146. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  148. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  150. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  151. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  152. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  153. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  154. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  155. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  156. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  157. package/lib/features/canvas/videoRenderer.js +8 -0
  158. package/lib/features/canvas/videoRenderer.js.map +1 -0
  159. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  160. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  161. package/lib/features/characters/characterStudioProps.js +14 -0
  162. package/lib/features/characters/characterStudioProps.js.map +1 -0
  163. package/lib/features/chat/ChatCodeBlock.js +7 -3
  164. package/lib/features/chat/ChatCodeBlock.js.map +1 -1
  165. package/lib/features/chat/ChatTranscript.js +7 -3
  166. package/lib/features/chat/ChatTranscript.js.map +1 -1
  167. package/lib/features/chat/ChatWidgetCard.js +13 -0
  168. package/lib/features/chat/ChatWidgetCard.js.map +1 -0
  169. package/lib/features/chat/ConnectorConnectCard.js +164 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
  172. package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
  173. package/lib/features/chat/MessageActionBar.js.map +1 -1
  174. package/lib/features/chat/QueuedFollowUps.js +71 -0
  175. package/lib/features/chat/QueuedFollowUps.js.map +1 -0
  176. package/lib/features/chat/chatWidgets.js +37 -0
  177. package/lib/features/chat/chatWidgets.js.map +1 -0
  178. package/lib/features/chat/connectorConnect.js +179 -0
  179. package/lib/features/chat/connectorConnect.js.map +1 -0
  180. package/lib/features/chat/connectorConnectHandbacks.js +55 -0
  181. package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
  182. package/lib/features/design/DesignEditorExperience.js +643 -0
  183. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  184. package/lib/features/design/DesignExperience.js +444 -0
  185. package/lib/features/design/DesignExperience.js.map +1 -0
  186. package/lib/features/design/designCore.js +298 -0
  187. package/lib/features/design/designCore.js.map +1 -0
  188. package/lib/features/design/designIndex.js +150 -0
  189. package/lib/features/design/designIndex.js.map +1 -0
  190. package/lib/features/design/exportDesign.js +133 -0
  191. package/lib/features/design/exportDesign.js.map +1 -0
  192. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  193. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  194. package/lib/features/job-search/ContactsPanel.js +627 -0
  195. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  196. package/lib/features/job-search/InsightsPanel.js +299 -0
  197. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  198. package/lib/features/job-search/InterviewPanel.js +637 -0
  199. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  200. package/lib/features/job-search/JdPastePrompt.js +130 -0
  201. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  202. package/lib/features/job-search/JobCard.js +199 -0
  203. package/lib/features/job-search/JobCard.js.map +1 -0
  204. package/lib/features/job-search/JobDetailSheet.js +255 -0
  205. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  206. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  207. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  208. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  209. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  210. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  211. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  212. package/lib/features/job-search/ProfilePanel.js +679 -0
  213. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  214. package/lib/features/job-search/RepliesPanel.js +344 -0
  215. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  216. package/lib/features/job-search/SavedPanel.js +297 -0
  217. package/lib/features/job-search/SavedPanel.js.map +1 -0
  218. package/lib/features/job-search/chat/widgetContent.js +29 -0
  219. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  220. package/lib/features/job-search/cvText.js +91 -0
  221. package/lib/features/job-search/cvText.js.map +1 -0
  222. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  223. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  224. package/lib/features/job-search/jobSearchClient.js +184 -0
  225. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  226. package/lib/features/job-search/jobSearchExec.js +14 -0
  227. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  228. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  229. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  230. package/lib/features/job-search/jobSearchTheme.js +44 -0
  231. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  232. package/lib/features/job-search/savedJobs.js +85 -0
  233. package/lib/features/job-search/savedJobs.js.map +1 -0
  234. package/lib/features/job-search/searchHistory.js +117 -0
  235. package/lib/features/job-search/searchHistory.js.map +1 -0
  236. package/lib/features/job-search/types.js +36 -0
  237. package/lib/features/job-search/types.js.map +1 -0
  238. package/lib/features/job-search/useJobSearchSession.js +558 -0
  239. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  240. package/lib/features/messaging/ChatComponents.js +529 -0
  241. package/lib/features/messaging/ChatComponents.js.map +1 -0
  242. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  243. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  244. package/lib/features/messaging/ContactsScreen.js +288 -0
  245. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  246. package/lib/features/messaging/ConversationListScreen.js +147 -0
  247. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  248. package/lib/features/messaging/MessageActions.js +290 -0
  249. package/lib/features/messaging/MessageActions.js.map +1 -0
  250. package/lib/features/messaging/NativeChatExperience.js +189 -0
  251. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  252. package/lib/features/messaging/RegistrationScreen.js +11 -14
  253. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  254. package/lib/features/messaging/ThreadScreen.js +215 -0
  255. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  256. package/lib/features/messaging/chatInviteLink.js +52 -0
  257. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  258. package/lib/features/messaging/chatModel.js +278 -0
  259. package/lib/features/messaging/chatModel.js.map +1 -0
  260. package/lib/features/messaging/chatOperations.js +106 -1
  261. package/lib/features/messaging/chatOperations.js.map +1 -1
  262. package/lib/features/messaging/emojiCatalog.js +60 -0
  263. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  264. package/lib/features/messaging/emojiKeywords.js +1592 -0
  265. package/lib/features/messaging/emojiKeywords.js.map +1 -0
  266. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  267. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  268. package/lib/features/messaging/phoneNumbers.js +52 -1
  269. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  270. package/lib/features/messaging/sha256.js +68 -0
  271. package/lib/features/messaging/sha256.js.map +1 -0
  272. package/lib/features/messaging/useChatData.js +421 -0
  273. package/lib/features/messaging/useChatData.js.map +1 -0
  274. package/lib/features/messaging/useContactMatches.js +191 -0
  275. package/lib/features/messaging/useContactMatches.js.map +1 -0
  276. package/lib/features/messaging/usePhoneVerification.js +12 -12
  277. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  278. package/lib/features/messaging/yantraChatOrg.js +8 -3
  279. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  280. package/lib/features/resume/AnnotateModal.js +100 -0
  281. package/lib/features/resume/AnnotateModal.js.map +1 -0
  282. package/lib/features/resume/AnnotationBar.js +69 -0
  283. package/lib/features/resume/AnnotationBar.js.map +1 -0
  284. package/lib/features/resume/ExportSheet.js +105 -0
  285. package/lib/features/resume/ExportSheet.js.map +1 -0
  286. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  287. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  288. package/lib/features/resume/ResumeEditor.js +676 -0
  289. package/lib/features/resume/ResumeEditor.js.map +1 -0
  290. package/lib/features/resume/ResumeExperience.js +235 -0
  291. package/lib/features/resume/ResumeExperience.js.map +1 -0
  292. package/lib/features/resume/ResumeListPanel.js +262 -0
  293. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  294. package/lib/features/resume/ResumeToolbar.js +236 -0
  295. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  296. package/lib/features/resume/annotations.js +17 -0
  297. package/lib/features/resume/annotations.js.map +1 -0
  298. package/lib/features/resume/documentCss.js +52 -0
  299. package/lib/features/resume/documentCss.js.map +1 -0
  300. package/lib/features/resume/draft.js +89 -0
  301. package/lib/features/resume/draft.js.map +1 -0
  302. package/lib/features/resume/exportResume.js +43 -0
  303. package/lib/features/resume/exportResume.js.map +1 -0
  304. package/lib/features/resume/pickResumePhoto.js +22 -0
  305. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  306. package/lib/features/resume/renderResume.js +121 -0
  307. package/lib/features/resume/renderResume.js.map +1 -0
  308. package/lib/features/resume/resumeClient.js +69 -0
  309. package/lib/features/resume/resumeClient.js.map +1 -0
  310. package/lib/features/resume/resumeExec.js +14 -0
  311. package/lib/features/resume/resumeExec.js.map +1 -0
  312. package/lib/features/resume/resumeIndex.js +244 -0
  313. package/lib/features/resume/resumeIndex.js.map +1 -0
  314. package/lib/features/resume/resumeRuntime.js +50 -0
  315. package/lib/features/resume/resumeRuntime.js.map +1 -0
  316. package/lib/features/resume/resumeTheme.js +34 -0
  317. package/lib/features/resume/resumeTheme.js.map +1 -0
  318. package/lib/features/resume/resumeToolbox.js +49 -0
  319. package/lib/features/resume/resumeToolbox.js.map +1 -0
  320. package/lib/features/resume/templates.js +90 -0
  321. package/lib/features/resume/templates.js.map +1 -0
  322. package/lib/features/resume/types.js +10 -0
  323. package/lib/features/resume/types.js.map +1 -0
  324. package/lib/features/resume/useResumeSession.js +183 -0
  325. package/lib/features/resume/useResumeSession.js.map +1 -0
  326. package/lib/features/shopping/DealsPanel.js +254 -0
  327. package/lib/features/shopping/DealsPanel.js.map +1 -0
  328. package/lib/features/shopping/HistoryPanel.js +147 -0
  329. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  330. package/lib/features/shopping/OrdersPanel.js +157 -0
  331. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  332. package/lib/features/shopping/ProductCard.js +326 -0
  333. package/lib/features/shopping/ProductCard.js.map +1 -0
  334. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  335. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  336. package/lib/features/shopping/ProductFilterBar.js +153 -0
  337. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  338. package/lib/features/shopping/ProductPhoto.js +27 -0
  339. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  340. package/lib/features/shopping/SavedPanel.js +139 -0
  341. package/lib/features/shopping/SavedPanel.js.map +1 -0
  342. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  343. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  344. package/lib/features/shopping/ShoppingExperience.js +888 -0
  345. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  346. package/lib/features/shopping/TrendingSections.js +199 -0
  347. package/lib/features/shopping/TrendingSections.js.map +1 -0
  348. package/lib/features/shopping/WatchlistPanel.js +148 -0
  349. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  350. package/lib/features/shopping/catalog.js +238 -0
  351. package/lib/features/shopping/catalog.js.map +1 -0
  352. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  353. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  354. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  355. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  356. package/lib/features/shopping/chat/widgetContent.js +233 -0
  357. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  358. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  359. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  360. package/lib/features/shopping/productImage.js +42 -0
  361. package/lib/features/shopping/productImage.js.map +1 -0
  362. package/lib/features/shopping/savedProducts.js +84 -0
  363. package/lib/features/shopping/savedProducts.js.map +1 -0
  364. package/lib/features/shopping/services/catalogActions.js +166 -0
  365. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  366. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  367. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  368. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  369. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  370. package/lib/features/shopping/services/productAvailability.js +25 -0
  371. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  372. package/lib/features/shopping/services/productFilters.js +72 -0
  373. package/lib/features/shopping/services/productFilters.js.map +1 -0
  374. package/lib/features/shopping/services/retailerUrl.js +75 -0
  375. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  376. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  377. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  378. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  379. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  380. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  381. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  382. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  383. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  384. package/lib/features/shopping/shoppingCart.js +116 -0
  385. package/lib/features/shopping/shoppingCart.js.map +1 -0
  386. package/lib/features/shopping/shoppingExec.js +14 -0
  387. package/lib/features/shopping/shoppingExec.js.map +1 -0
  388. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  389. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  390. package/lib/features/shopping/shoppingRuntime.js +63 -0
  391. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  392. package/lib/features/shopping/timeAgo.js +14 -0
  393. package/lib/features/shopping/timeAgo.js.map +1 -0
  394. package/lib/features/shopping/useShoppingSearch.js +262 -0
  395. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  396. package/lib/features/travel/BookHeaderGlow.js +48 -0
  397. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  398. package/lib/features/travel/BookingsPanel.js +29 -0
  399. package/lib/features/travel/BookingsPanel.js.map +1 -0
  400. package/lib/features/travel/DiscoverPanel.js +155 -0
  401. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  402. package/lib/features/travel/FlightCompareBar.js +86 -0
  403. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  404. package/lib/features/travel/FlightDealsBoard.js +100 -0
  405. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  406. package/lib/features/travel/HistoryPanel.js +82 -0
  407. package/lib/features/travel/HistoryPanel.js.map +1 -0
  408. package/lib/features/travel/PopularDestinations.js +144 -0
  409. package/lib/features/travel/PopularDestinations.js.map +1 -0
  410. package/lib/features/travel/SavedPanel.js +27 -0
  411. package/lib/features/travel/SavedPanel.js.map +1 -0
  412. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  413. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  414. package/lib/features/travel/TravelBookHero.js +425 -0
  415. package/lib/features/travel/TravelBookHero.js.map +1 -0
  416. package/lib/features/travel/TravelDatesField.js +234 -0
  417. package/lib/features/travel/TravelDatesField.js.map +1 -0
  418. package/lib/features/travel/TravelDetailSheet.js +106 -0
  419. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  420. package/lib/features/travel/TravelExperience.js +624 -0
  421. package/lib/features/travel/TravelExperience.js.map +1 -0
  422. package/lib/features/travel/TravelGuestsField.js +85 -0
  423. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  424. package/lib/features/travel/TravelLanding.js +318 -0
  425. package/lib/features/travel/TravelLanding.js.map +1 -0
  426. package/lib/features/travel/TravelLocationField.js +179 -0
  427. package/lib/features/travel/TravelLocationField.js.map +1 -0
  428. package/lib/features/travel/TravelPropertyCard.js +266 -0
  429. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  430. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  431. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  432. package/lib/features/travel/TravelRailFlyout.js +79 -0
  433. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  434. package/lib/features/travel/TravelResultsMap.js +126 -0
  435. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  436. package/lib/features/travel/WorkspacePanel.js +148 -0
  437. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  438. package/lib/features/travel/appNav.js +244 -0
  439. package/lib/features/travel/appNav.js.map +1 -0
  440. package/lib/features/travel/calendarDays.js +50 -0
  441. package/lib/features/travel/calendarDays.js.map +1 -0
  442. package/lib/features/travel/catalog.js +72 -0
  443. package/lib/features/travel/catalog.js.map +1 -0
  444. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  445. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  446. package/lib/features/travel/chat/widgetContent.js +107 -0
  447. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  448. package/lib/features/travel/flightDeals.js +65 -0
  449. package/lib/features/travel/flightDeals.js.map +1 -0
  450. package/lib/features/travel/mapCoordinates.js +36 -0
  451. package/lib/features/travel/mapCoordinates.js.map +1 -0
  452. package/lib/features/travel/parseTravelIntent.js +303 -0
  453. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  454. package/lib/features/travel/savedStays.js +66 -0
  455. package/lib/features/travel/savedStays.js.map +1 -0
  456. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  457. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  458. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  459. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  460. package/lib/features/travel/services/geocodeLocation.js +79 -0
  461. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  462. package/lib/features/travel/services/placePredictions.js +113 -0
  463. package/lib/features/travel/services/placePredictions.js.map +1 -0
  464. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  465. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  466. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  467. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  468. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  469. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  470. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  471. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  472. package/lib/features/travel/travelAgentSwipe.js +7 -0
  473. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  474. package/lib/features/travel/travelExec.js +14 -0
  475. package/lib/features/travel/travelExec.js.map +1 -0
  476. package/lib/features/travel/travelHistoryStore.js +108 -0
  477. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  478. package/lib/features/travel/travelRuntime.js +62 -0
  479. package/lib/features/travel/travelRuntime.js.map +1 -0
  480. package/lib/features/travel/types.js +9 -0
  481. package/lib/features/travel/types.js.map +1 -0
  482. package/lib/features/travel/useTravelSearch.js +330 -0
  483. package/lib/features/travel/useTravelSearch.js.map +1 -0
  484. package/lib/features/travel/workspaceContent.js +548 -0
  485. package/lib/features/travel/workspaceContent.js.map +1 -0
  486. package/lib/hooks/useCdecliChannel.js +128 -6
  487. package/lib/hooks/useCdecliChannel.js.map +1 -1
  488. package/lib/hooks/useChatApi.js +4 -2
  489. package/lib/hooks/useChatApi.js.map +1 -1
  490. package/lib/hooks/useChatStream.js +77 -63
  491. package/lib/hooks/useChatStream.js.map +1 -1
  492. package/lib/hooks/useHostConnectorCard.js +24 -0
  493. package/lib/hooks/useHostConnectorCard.js.map +1 -0
  494. package/lib/hooks/useObtainSystemToken.js +23 -5
  495. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  496. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  497. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  498. package/lib/index.js +1 -1
  499. package/lib/index.js.map +1 -1
  500. package/lib/screens/Chat/index.js +51 -22
  501. package/lib/screens/Chat/index.js.map +1 -1
  502. package/lib/screens/ChatNative/index.js +13 -2
  503. package/lib/screens/ChatNative/index.js.map +1 -1
  504. package/lib/screens/Home/HomeScreen.js +3 -3
  505. package/lib/screens/Home/HomeScreen.js.map +1 -1
  506. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  507. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  508. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
  509. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  510. package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
  511. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  512. package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
  513. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  514. package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
  515. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  516. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  517. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  518. package/lib/services/brainQuickReply.js +38 -1
  519. package/lib/services/brainQuickReply.js.map +1 -1
  520. package/lib/state/chatThreadMerge.js +6 -1
  521. package/lib/state/chatThreadMerge.js.map +1 -1
  522. package/package.json +6 -4
@@ -0,0 +1,134 @@
1
+ import {useState,useRef,useEffect,useCallback,useMemo}from'react';import {loadStudioTemplatePage,uniqueTemplatePage,STUDIO_TEMPLATE_PAGE_SIZE}from'./canvasChatTemplates.js';import {studioCatalogFilter,STUDIO_CATALOG_QUERY,studioTemplatesToCatalogNodes,catalogRowToStudioTemplate}from'./studioCatalog.js';function rowsFromData(data) {
2
+ var _a, _b;
3
+ return ((_b = (_a = data == null ? void 0 : data.formTemplateSubmissions) == null ? void 0 : _a.nodes) != null ? _b : []).map(catalogRowToStudioTemplate).filter((row) => row !== null);
4
+ }
5
+ function readCachedTemplates(client, search) {
6
+ if (!client) return [];
7
+ try {
8
+ const data = client.readQuery({
9
+ query: STUDIO_CATALOG_QUERY,
10
+ variables: {
11
+ filter: studioCatalogFilter(search, 0)
12
+ }
13
+ });
14
+ return rowsFromData(data);
15
+ } catch (e) {
16
+ return [];
17
+ }
18
+ }
19
+ function writeCachedTemplates(client, search, rows) {
20
+ if (!client) return;
21
+ client.writeQuery({
22
+ query: STUDIO_CATALOG_QUERY,
23
+ variables: {
24
+ filter: studioCatalogFilter(search, 0)
25
+ },
26
+ data: {
27
+ formTemplateSubmissions: {
28
+ __typename: "FormTemplateSubmissionConnection",
29
+ nodes: studioTemplatesToCatalogNodes(rows)
30
+ }
31
+ }
32
+ });
33
+ }
34
+ function isFullPage(count) {
35
+ return count > 0 && count % STUDIO_TEMPLATE_PAGE_SIZE === 0;
36
+ }
37
+ function useStudioCatalogTemplates(search, client, runAction, corpus) {
38
+ const term = search.trim();
39
+ const [templates, setTemplates] = useState(() => readCachedTemplates(client, term));
40
+ const [loading, setLoading] = useState(() => readCachedTemplates(client, term).length === 0);
41
+ const [loadingMore, setLoadingMore] = useState(false);
42
+ const [ended, setEnded] = useState(false);
43
+ const templatesRef = useRef(templates);
44
+ templatesRef.current = templates;
45
+ const endedRef = useRef(false);
46
+ const loadMoreLock = useRef(false);
47
+ const runActionRef = useRef(runAction);
48
+ runActionRef.current = runAction;
49
+ const corpusRef = useRef(corpus);
50
+ corpusRef.current = corpus;
51
+ useEffect(() => {
52
+ endedRef.current = false;
53
+ setEnded(false);
54
+ const cached = readCachedTemplates(client, term);
55
+ if (cached.length > 0) {
56
+ setTemplates(cached);
57
+ setLoading(false);
58
+ } else {
59
+ setLoading(true);
60
+ }
61
+ let live = true;
62
+ void loadStudioTemplatePage(term || void 0, 0, runActionRef.current, corpusRef.current).then((page) => {
63
+ if (!live) return;
64
+ setTemplates(page.rows);
65
+ writeCachedTemplates(client, term, page.rows);
66
+ }).finally(() => {
67
+ if (live) setLoading(false);
68
+ });
69
+ return () => {
70
+ live = false;
71
+ };
72
+ }, [client, term]);
73
+ const loadMore = useCallback(() => {
74
+ const already = templatesRef.current;
75
+ if (loadMoreLock.current || already.length === 0) return;
76
+ loadMoreLock.current = true;
77
+ setLoadingMore(true);
78
+ void (async () => {
79
+ let incoming = [];
80
+ if (client) {
81
+ try {
82
+ const {
83
+ data
84
+ } = await client.query({
85
+ query: STUDIO_CATALOG_QUERY,
86
+ variables: {
87
+ filter: studioCatalogFilter(term, already.length)
88
+ },
89
+ fetchPolicy: "network-only"
90
+ });
91
+ incoming = rowsFromData(data);
92
+ } catch (e) {
93
+ incoming = [];
94
+ }
95
+ }
96
+ let next = uniqueTemplatePage(already, incoming, [], term || void 0);
97
+ if (next.rows.length === 0) {
98
+ const page = await loadStudioTemplatePage(term || void 0, already.length, runActionRef.current, corpusRef.current);
99
+ next = uniqueTemplatePage(already, page.rows, corpusRef.current, term || void 0);
100
+ }
101
+ if (next.rows.length === 0) {
102
+ endedRef.current = true;
103
+ setEnded(true);
104
+ return;
105
+ }
106
+ endedRef.current = false;
107
+ setEnded(false);
108
+ const merged = [...already, ...next.rows];
109
+ templatesRef.current = merged;
110
+ setTemplates(merged);
111
+ writeCachedTemplates(client, term, merged);
112
+ })().catch(() => {
113
+ endedRef.current = true;
114
+ setEnded(true);
115
+ }).finally(() => {
116
+ loadMoreLock.current = false;
117
+ setLoadingMore(false);
118
+ });
119
+ }, [client, term]);
120
+ const hydrate = useCallback((rows, _offset) => {
121
+ setTemplates([...rows]);
122
+ endedRef.current = !isFullPage(rows.length);
123
+ setEnded(!isFullPage(rows.length));
124
+ writeCachedTemplates(client, term, rows);
125
+ }, [client, term]);
126
+ return useMemo(() => ({
127
+ templates,
128
+ loading: loading && templates.length === 0,
129
+ loadingMore,
130
+ hasMore: !ended,
131
+ loadMore,
132
+ hydrate
133
+ }), [ended, hydrate, loadMore, loading, loadingMore, templates]);
134
+ }export{useStudioCatalogTemplates};//# sourceMappingURL=useStudioCatalogTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStudioCatalogTemplates.js","sources":["../../../src/features/canvas/useStudioCatalogTemplates.ts"],"sourcesContent":["import type { ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport { loadStudioTemplatePage, uniqueTemplatePage, type CanvasPromptTemplate } from './canvasChatTemplates';\nimport { STUDIO_TEMPLATE_PAGE_SIZE } from './canvasChatTemplates';\nimport {\n STUDIO_CATALOG_QUERY,\n catalogRowToStudioTemplate,\n studioCatalogFilter,\n studioTemplatesToCatalogNodes,\n type StudioCatalogRow,\n} from './studioCatalog';\n\ninterface StudioCatalogData {\n formTemplateSubmissions?: { nodes?: StudioCatalogRow[] | null } | null;\n}\n\n/** Host Apollo client — passed in so the federated remote writes the host cache. */\nexport type StudioCatalogClient = Pick<ApolloClient<object>, 'readQuery' | 'writeQuery' | 'query'>;\n\nfunction rowsFromData(data: StudioCatalogData | null | undefined): CanvasPromptTemplate[] {\n return (data?.formTemplateSubmissions?.nodes ?? [])\n .map(catalogRowToStudioTemplate)\n .filter((row): row is CanvasPromptTemplate => row !== null);\n}\n\nfunction readCachedTemplates(client: StudioCatalogClient | null | undefined, search: string): CanvasPromptTemplate[] {\n if (!client) return [];\n try {\n const data = client.readQuery<StudioCatalogData>({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(search, 0) },\n });\n return rowsFromData(data);\n } catch {\n return [];\n }\n}\n\nfunction writeCachedTemplates(\n client: StudioCatalogClient | null | undefined,\n search: string,\n rows: readonly CanvasPromptTemplate[],\n) {\n if (!client) return;\n client.writeQuery({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(search, 0) },\n data: {\n formTemplateSubmissions: {\n __typename: 'FormTemplateSubmissionConnection',\n nodes: studioTemplatesToCatalogNodes(rows),\n },\n },\n });\n}\n\nfunction isFullPage(count: number): boolean {\n return count > 0 && count % STUDIO_TEMPLATE_PAGE_SIZE === 0;\n}\n\nexport function useStudioCatalogTemplates(\n search: string,\n client: StudioCatalogClient | null | undefined,\n runAction: RunMediaAction | undefined,\n corpus: CanvasPromptTemplate[],\n) {\n const term = search.trim();\n const [templates, setTemplates] = useState<CanvasPromptTemplate[]>(() => readCachedTemplates(client, term));\n const [loading, setLoading] = useState(() => readCachedTemplates(client, term).length === 0);\n const [loadingMore, setLoadingMore] = useState(false);\n const [ended, setEnded] = useState(false);\n const templatesRef = useRef(templates);\n templatesRef.current = templates;\n const endedRef = useRef(false);\n const loadMoreLock = useRef(false);\n const runActionRef = useRef(runAction);\n runActionRef.current = runAction;\n const corpusRef = useRef(corpus);\n corpusRef.current = corpus;\n\n useEffect(() => {\n endedRef.current = false;\n setEnded(false);\n const cached = readCachedTemplates(client, term);\n if (cached.length > 0) {\n setTemplates(cached);\n setLoading(false);\n } else {\n setLoading(true);\n }\n let live = true;\n void loadStudioTemplatePage(term || undefined, 0, runActionRef.current, corpusRef.current)\n .then((page) => {\n if (!live) return;\n setTemplates(page.rows);\n writeCachedTemplates(client, term, page.rows);\n })\n .finally(() => {\n if (live) setLoading(false);\n });\n return () => {\n live = false;\n };\n }, [client, term]);\n\n const loadMore = useCallback(() => {\n const already = templatesRef.current;\n if (loadMoreLock.current || already.length === 0) return;\n loadMoreLock.current = true;\n setLoadingMore(true);\n void (async () => {\n let incoming: CanvasPromptTemplate[] = [];\n if (client) {\n try {\n const { data } = await client.query({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(term, already.length) },\n fetchPolicy: 'network-only',\n });\n incoming = rowsFromData(data as StudioCatalogData);\n } catch {\n incoming = [];\n }\n }\n let next = uniqueTemplatePage(already, incoming, [], term || undefined);\n if (next.rows.length === 0) {\n const page = await loadStudioTemplatePage(\n term || undefined,\n already.length,\n runActionRef.current,\n corpusRef.current,\n );\n next = uniqueTemplatePage(already, page.rows, corpusRef.current, term || undefined);\n }\n if (next.rows.length === 0) {\n endedRef.current = true;\n setEnded(true);\n return;\n }\n endedRef.current = false;\n setEnded(false);\n const merged = [...already, ...next.rows];\n templatesRef.current = merged;\n setTemplates(merged);\n writeCachedTemplates(client, term, merged);\n })()\n .catch(() => {\n endedRef.current = true;\n setEnded(true);\n })\n .finally(() => {\n loadMoreLock.current = false;\n setLoadingMore(false);\n });\n }, [client, term]);\n\n const hydrate = useCallback(\n (rows: readonly CanvasPromptTemplate[], _offset: number) => {\n setTemplates([...rows]);\n endedRef.current = !isFullPage(rows.length);\n setEnded(!isFullPage(rows.length));\n writeCachedTemplates(client, term, rows);\n },\n [client, term],\n );\n\n return useMemo(\n () => ({\n templates,\n loading: loading && templates.length === 0,\n loadingMore,\n hasMore: !ended,\n loadMore,\n hydrate,\n }),\n [ended, hydrate, loadMore, loading, loadingMore, templates],\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import {resultUrl,generationImageUrl}from'./videoEditor/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 VIDEO_3D_CONNECTOR = "yantra-video-3d";
18
+ const VIDEO_3D_ACTIONS = {
19
+ objectGenerate: "YANTRA_VIDEO_3D_OBJECT_GENERATE",
20
+ objectStatus: "YANTRA_VIDEO_3D_OBJECT_STATUS",
21
+ worldGenerate: "YANTRA_VIDEO_3D_WORLD_GENERATE"};
22
+ function unwrap(result, what) {
23
+ if (result.successful === false) {
24
+ throw new Error(result.error || `${what} failed`);
25
+ }
26
+ const data = result.data && typeof result.data === "object" ? result.data : result;
27
+ if (data.successful === false) {
28
+ throw new Error(data.error || `${what} failed`);
29
+ }
30
+ return data;
31
+ }
32
+ const asString = (value) => typeof value === "string" ? value : "";
33
+ const toObjectResult = (data) => ({
34
+ modelUrl: asString(data.modelUrl),
35
+ previewUrl: asString(data.previewUrl) || asString(data.modelUrl),
36
+ model: asString(data.model),
37
+ requestId: asString(data.requestId),
38
+ stored: data.stored !== false
39
+ });
40
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
41
+ const POLL_INTERVAL_MS = 5e3;
42
+ const DEFAULT_TOTAL_TIMEOUT_MS = 36e4;
43
+ async function generateWorld3D(run, options) {
44
+ const data = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.worldGenerate, __spreadValues(__spreadValues({
45
+ prompt: options.prompt
46
+ }, options.model ? {
47
+ model: options.model
48
+ } : {}), options.width ? {
49
+ width: options.width
50
+ } : {})), "3D world generation");
51
+ const imageUrl = asString(data.imageUrl) || resultUrl(data, VIDEO_3D_ACTIONS.worldGenerate);
52
+ if (!imageUrl) throw new Error("World generation returned no image");
53
+ return {
54
+ imageUrl,
55
+ model: asString(data.model),
56
+ provider: asString(data.provider),
57
+ width: typeof data.width === "number" ? data.width : 0,
58
+ height: typeof data.height === "number" ? data.height : 0,
59
+ resolvedPrompt: asString(data.resolvedPrompt) || options.prompt,
60
+ stored: data.stored !== false
61
+ };
62
+ }
63
+ async function generateObject3D(run, options) {
64
+ var _a, _b, _c, _d;
65
+ const params = {};
66
+ if (options.imageUrl) params.imageUrl = options.imageUrl;
67
+ if ((_a = options.prompt) == null ? void 0 : _a.trim()) params.prompt = options.prompt.trim();
68
+ if (options.model) params.model = options.model;
69
+ if (options.texture !== void 0) params.texture = options.texture;
70
+ if (!params.imageUrl && !params.prompt) {
71
+ throw new Error("Give the object a source image or a prompt.");
72
+ }
73
+ (_b = options.onProgress) == null ? void 0 : _b.call(options, "Submitting to the mesh model\u2026");
74
+ const first = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectGenerate, params), "3D object generation");
75
+ if (first.status !== "pending") return toObjectResult(first);
76
+ const requestId = asString(first.requestId);
77
+ const model = asString(first.model);
78
+ if (!requestId || !model) throw new Error("The 3D job did not come back with anything to poll.");
79
+ const deadline = Date.now() + ((_c = options.totalTimeoutMs) != null ? _c : DEFAULT_TOTAL_TIMEOUT_MS);
80
+ const typical = typeof first.typicalSeconds === "number" ? first.typicalSeconds : 90;
81
+ const startedAt = Date.now();
82
+ while (Date.now() < deadline) {
83
+ const waited = Math.round((Date.now() - startedAt) / 1e3);
84
+ (_d = options.onProgress) == null ? void 0 : _d.call(options, `Building the mesh \u2014 ${waited}s of about ${typical}s`);
85
+ await sleep(POLL_INTERVAL_MS);
86
+ const next = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectStatus, {
87
+ requestId,
88
+ model
89
+ }), "3D object status");
90
+ if (next.status !== "pending") return toObjectResult(next);
91
+ }
92
+ throw new Error("The 3D job is taking longer than expected. Try again in a minute.");
93
+ }
94
+ const SET_RENDER_INSTRUCTION = "Use the attached layout references as the exact composition: keep camera angle, position and scale of every subject, and the horizon. Replace untextured blocking with photographic detail. ";
95
+ async function renderSetStill(run, options) {
96
+ const prompt = `${SET_RENDER_INSTRUCTION}${options.look.trim() || "Photorealistic scene matching the layout."}`;
97
+ const refs = options.referenceUrls.filter(Boolean).slice(0, 4);
98
+ const result = await run("yantra-image-generation", "YANTRA_IMAGE_GENERATION_GENERATE", __spreadValues(__spreadValues({
99
+ prompt,
100
+ aspect_ratio: options.aspect || "16:9"
101
+ }, refs[0] ? {
102
+ referenceImageUrl: refs[0]
103
+ } : {}), refs.length > 1 ? {
104
+ referenceImageUrls: refs
105
+ } : {}));
106
+ const url = generationImageUrl(result) || resultUrl(result, "YANTRA_IMAGE_GENERATION_GENERATE") || "";
107
+ if (!url) throw new Error("Set render returned no image");
108
+ return url;
109
+ }export{SET_RENDER_INSTRUCTION,VIDEO_3D_ACTIONS,VIDEO_3D_CONNECTOR,generateObject3D,generateWorld3D,renderSetStill};//# sourceMappingURL=video3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video3d.js","sources":["../../../src/features/canvas/video3d.ts"],"sourcesContent":["/**\n * Native twin of canvas-surface `rpc/video3dRpc` — world + object mesh lanes\n * on `yantra-video-3d`. Phone has no Three.js set viewport; these RPCs power\n * the native Set studio (world / object / still render).\n */\nimport { resultUrl, generationImageUrl, type RunMediaAction } from './videoEditor/mediaActions';\n\nexport const VIDEO_3D_CONNECTOR = 'yantra-video-3d';\n\nexport const VIDEO_3D_ACTIONS = {\n objectGenerate: 'YANTRA_VIDEO_3D_OBJECT_GENERATE',\n objectStatus: 'YANTRA_VIDEO_3D_OBJECT_STATUS',\n worldGenerate: 'YANTRA_VIDEO_3D_WORLD_GENERATE',\n listModels: 'YANTRA_VIDEO_3D_LIST_MODELS',\n checkAvailability: 'YANTRA_VIDEO_3D_CHECK_AVAILABILITY',\n} as const;\n\nexport interface Object3DResult {\n modelUrl: string;\n previewUrl: string;\n model: string;\n requestId: string;\n stored: boolean;\n}\n\nexport interface World3DResult {\n imageUrl: string;\n model: string;\n provider: string;\n width: number;\n height: number;\n resolvedPrompt: string;\n stored: boolean;\n}\n\nfunction unwrap(result: Record<string, unknown>, what: string): Record<string, unknown> {\n if (result.successful === false) {\n throw new Error((result.error as string) || `${what} failed`);\n }\n const data = (result.data && typeof result.data === 'object' ? result.data : result) as Record<string, unknown>;\n if (data.successful === false) {\n throw new Error((data.error as string) || `${what} failed`);\n }\n return data;\n}\n\nconst asString = (value: unknown): string => (typeof value === 'string' ? value : '');\n\nconst toObjectResult = (data: Record<string, unknown>): Object3DResult => ({\n modelUrl: asString(data.modelUrl),\n previewUrl: asString(data.previewUrl) || asString(data.modelUrl),\n model: asString(data.model),\n requestId: asString(data.requestId),\n stored: data.stored !== false,\n});\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TOTAL_TIMEOUT_MS = 360_000;\n\nexport async function generateWorld3D(\n run: RunMediaAction,\n options: { prompt: string; model?: string; width?: number },\n): Promise<World3DResult> {\n const data = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.worldGenerate, {\n prompt: options.prompt,\n ...(options.model ? { model: options.model } : {}),\n ...(options.width ? { width: options.width } : {}),\n }),\n '3D world generation',\n );\n const imageUrl = asString(data.imageUrl) || resultUrl(data, VIDEO_3D_ACTIONS.worldGenerate);\n if (!imageUrl) throw new Error('World generation returned no image');\n return {\n imageUrl,\n model: asString(data.model),\n provider: asString(data.provider),\n width: typeof data.width === 'number' ? data.width : 0,\n height: typeof data.height === 'number' ? data.height : 0,\n resolvedPrompt: asString(data.resolvedPrompt) || options.prompt,\n stored: data.stored !== false,\n };\n}\n\nexport async function generateObject3D(\n run: RunMediaAction,\n options: {\n imageUrl?: string;\n prompt?: string;\n model?: string;\n texture?: boolean;\n totalTimeoutMs?: number;\n onProgress?: (message: string) => void;\n },\n): Promise<Object3DResult> {\n const params: Record<string, unknown> = {};\n if (options.imageUrl) params.imageUrl = options.imageUrl;\n if (options.prompt?.trim()) params.prompt = options.prompt.trim();\n if (options.model) params.model = options.model;\n if (options.texture !== undefined) params.texture = options.texture;\n if (!params.imageUrl && !params.prompt) {\n throw new Error('Give the object a source image or a prompt.');\n }\n\n options.onProgress?.('Submitting to the mesh model…');\n const first = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectGenerate, params),\n '3D object generation',\n );\n if (first.status !== 'pending') return toObjectResult(first);\n\n const requestId = asString(first.requestId);\n const model = asString(first.model);\n if (!requestId || !model) throw new Error('The 3D job did not come back with anything to poll.');\n\n const deadline = Date.now() + (options.totalTimeoutMs ?? DEFAULT_TOTAL_TIMEOUT_MS);\n const typical = typeof first.typicalSeconds === 'number' ? first.typicalSeconds : 90;\n const startedAt = Date.now();\n\n while (Date.now() < deadline) {\n const waited = Math.round((Date.now() - startedAt) / 1000);\n options.onProgress?.(`Building the mesh — ${waited}s of about ${typical}s`);\n await sleep(POLL_INTERVAL_MS);\n const next = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectStatus, { requestId, model }),\n '3D object status',\n );\n if (next.status !== 'pending') return toObjectResult(next);\n }\n throw new Error('The 3D job is taking longer than expected. Try again in a minute.');\n}\n\n/** Layout still from set props — image lane with a blocking instruction (web RenderPanel). */\nexport const SET_RENDER_INSTRUCTION =\n 'Use the attached layout references as the exact composition: keep camera angle, ' +\n 'position and scale of every subject, and the horizon. Replace untextured blocking ' +\n 'with photographic detail. ';\n\nexport async function renderSetStill(\n run: RunMediaAction,\n options: { look: string; referenceUrls: string[]; aspect?: string },\n): Promise<string> {\n const prompt = `${SET_RENDER_INSTRUCTION}${options.look.trim() || 'Photorealistic scene matching the layout.'}`;\n const refs = options.referenceUrls.filter(Boolean).slice(0, 4);\n const result = await run('yantra-image-generation', 'YANTRA_IMAGE_GENERATION_GENERATE', {\n prompt,\n aspect_ratio: options.aspect || '16:9',\n ...(refs[0] ? { referenceImageUrl: refs[0] } : {}),\n ...(refs.length > 1 ? { referenceImageUrls: refs } : {}),\n });\n const url = generationImageUrl(result) || resultUrl(result, 'YANTRA_IMAGE_GENERATION_GENERATE') || '';\n if (!url) throw new Error('Set render returned no image');\n return url;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ 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 CLIP_ASPECT_RATIOS = ["9:16", "1:1", "16:9"];
18
+ const CLIP_COUNT_CHOICES = [1, 2, 3, 4, 5, 6, 8, 10];
19
+ const CLIP_RESOLUTIONS = ["720", "1080"];
20
+ function buildClipRunParams(opts) {
21
+ return __spreadValues({
22
+ video_url: opts.videoUrl,
23
+ num_clips: opts.numClips,
24
+ aspect_ratio: opts.aspectRatio,
25
+ format: opts.resolution
26
+ }, opts.language ? {
27
+ language: opts.language
28
+ } : {});
29
+ }
30
+ function parseClipRunResult(result) {
31
+ var _a;
32
+ const data = (_a = result.data) != null ? _a : result;
33
+ let clips = Array.isArray(data.clips) ? data.clips : [];
34
+ if (clips.length === 0 && typeof data.highlights_json === "string") {
35
+ try {
36
+ const parsed = JSON.parse(data.highlights_json);
37
+ if (Array.isArray(parsed)) clips = parsed;
38
+ } catch (e) {
39
+ }
40
+ }
41
+ return clips.map((c) => c.clip_url).filter((u) => typeof u === "string" && u.length > 0);
42
+ }export{CLIP_ASPECT_RATIOS,CLIP_COUNT_CHOICES,CLIP_RESOLUTIONS,buildClipRunParams,parseClipRunResult};//# sourceMappingURL=videoClips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoClips.js","sources":["../../../src/features/canvas/videoClips.ts"],"sourcesContent":["/** Native twin of canvas-surface `rpc/videoClipRpc` — params + result parse. */\n\nexport const CLIP_ASPECT_RATIOS = ['9:16', '1:1', '16:9'] as const;\nexport const CLIP_COUNT_CHOICES = [1, 2, 3, 4, 5, 6, 8, 10] as const;\nexport const CLIP_RESOLUTIONS = ['720', '1080'] as const;\n\nexport interface VideoClipRunOptions {\n videoUrl: string;\n numClips: number;\n aspectRatio: string;\n resolution: string;\n language?: string;\n}\n\nexport function buildClipRunParams(opts: VideoClipRunOptions): Record<string, unknown> {\n return {\n video_url: opts.videoUrl,\n num_clips: opts.numClips,\n aspect_ratio: opts.aspectRatio,\n format: opts.resolution,\n ...(opts.language ? { language: opts.language } : {}),\n };\n}\n\nexport function parseClipRunResult(result: Record<string, unknown>): string[] {\n const data = (result.data ?? result) as Record<string, unknown>;\n let clips = Array.isArray(data.clips) ? (data.clips as Array<{ clip_url?: string }>) : [];\n if (clips.length === 0 && typeof data.highlights_json === 'string') {\n try {\n const parsed = JSON.parse(data.highlights_json) as unknown;\n if (Array.isArray(parsed)) clips = parsed as Array<{ clip_url?: string }>;\n } catch {\n /* malformed highlights_json */\n }\n }\n return clips.map((c) => c.clip_url).filter((u): u is string => typeof u === 'string' && u.length > 0);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEO,MAAM,kBAAqB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,MAAM;AAC3C,MAAA,kBAAA,GAAqB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,EAAE;AAC7C,MAAA,gBAAA,GAAmB,CAAC,KAAA,EAAO,MAAM;AAQvC,SAAS,mBAAmB,IAAoD,EAAA;AACrF,EAAO,OAAA,cAAA,CAAA;AAAA,IACL,WAAW,IAAK,CAAA,QAAA;AAAA,IAChB,WAAW,IAAK,CAAA,QAAA;AAAA,IAChB,cAAc,IAAK,CAAA,WAAA;AAAA,IACnB,QAAQ,IAAK,CAAA;AAAA,GAAA,EACT,KAAK,QAAW,GAAA;AAAA,IAClB,UAAU,IAAK,CAAA;AAAA,MACb,EAAC,CAAA;AAET;AACO,SAAS,mBAAmB,MAA2C,EAAA;AAvB9E,EAAA,IAAA,EAAA;AAwBE,EAAM,MAAA,IAAA,GAAA,CAAQ,EAAO,GAAA,MAAA,CAAA,IAAA,KAAP,IAAe,GAAA,EAAA,GAAA,MAAA;AAC7B,EAAI,IAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAI,GAAA,IAAA,CAAK,QAExC,EAAC;AACN,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,OAAO,IAAA,CAAK,oBAAoB,QAAU,EAAA;AAClE,IAAI,IAAA;AACF,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,eAAe,CAAA;AAC9C,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA,EAAW,KAAA,GAAA,MAAA;AAAA,KAG7B,CAAA,OAAA,CAAA,EAAA;AAAA;AAER;AAEF,EAAA,OAAO,KAAM,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAY,IAAA,CAAA,CAAE,SAAS,CAAC,CAAA;AACpG"}
@@ -0,0 +1,120 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useRef,useState}from'react';import {StyleSheet,View,Text,ScrollView,TextInput,Pressable,ActivityIndicator}from'react-native';import {deriveAgentEndpoint}from'../remoteMediaClient.js';import {runCutAgentTurn}from'./agentLoop.js';function AgentCutPane({
2
+ timeline,
3
+ setTimeline,
4
+ token,
5
+ indexUrl
6
+ }) {
7
+ const timelineRef = useRef(timeline);
8
+ timelineRef.current = timeline;
9
+ const [prompt, setPrompt] = useState("Keep the strongest 3 clips and put the hero shot first");
10
+ const [busy, setBusy] = useState(false);
11
+ const [status, setStatus] = useState(null);
12
+ const [log, setLog] = useState([]);
13
+ const [history, setHistory] = useState([]);
14
+ const run = async () => {
15
+ if (!token || !indexUrl) {
16
+ setLog((l) => [...l, "Sign in needed for AI cut."]);
17
+ return;
18
+ }
19
+ const text = prompt.trim();
20
+ if (!text || busy) return;
21
+ setBusy(true);
22
+ setStatus("Starting\u2026");
23
+ setHistory((h) => [...h, {
24
+ role: "user",
25
+ content: text
26
+ }]);
27
+ try {
28
+ const result = await runCutAgentTurn({
29
+ history,
30
+ userText: text,
31
+ token,
32
+ agentEndpoint: deriveAgentEndpoint(indexUrl),
33
+ onStatus: setStatus,
34
+ ctx: {
35
+ getTimeline: () => timelineRef.current,
36
+ setTimeline: (next) => {
37
+ timelineRef.current = next;
38
+ setTimeline(next);
39
+ }
40
+ }
41
+ });
42
+ for (const step of result.steps) setLog((l) => [...l, step.label]);
43
+ setLog((l) => [...l, result.text]);
44
+ setHistory((h) => [...h, {
45
+ role: "assistant",
46
+ content: result.text
47
+ }]);
48
+ setPrompt("");
49
+ } catch (err) {
50
+ setLog((l) => [...l, err instanceof Error ? err.message : String(err)]);
51
+ } finally {
52
+ setBusy(false);
53
+ setStatus(null);
54
+ }
55
+ };
56
+ return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
57
+ /* @__PURE__ */ jsx(Text, { style: styles.title, children: "AI cut" }),
58
+ /* @__PURE__ */ jsx(Text, { style: styles.fine, children: "Describe the cut. The agent can inspect, trim, reorder, and remove clips." }),
59
+ /* @__PURE__ */ jsx(ScrollView, { style: styles.log, contentContainerStyle: {
60
+ paddingBottom: 8
61
+ }, children: log.map((line, i) => /* @__PURE__ */ jsx(Text, { style: styles.logLine, children: line }, `${i}-${line.slice(0, 12)}`)) }),
62
+ status ? /* @__PURE__ */ jsx(Text, { style: styles.status, children: status }) : null,
63
+ /* @__PURE__ */ jsx(TextInput, { value: prompt, onChangeText: setPrompt, style: styles.input, multiline: true, placeholderTextColor: "#94a3b8", placeholder: "e.g. Drop the last clip and tighten the open" }),
64
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => void run(), disabled: busy, style: [styles.cta, busy && styles.ctaOff], children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: "#0f172a" }) : /* @__PURE__ */ jsx(Text, { style: styles.ctaLabel, children: "Run cut" }) })
65
+ ] });
66
+ }
67
+ const styles = StyleSheet.create({
68
+ root: {
69
+ padding: 12,
70
+ gap: 8
71
+ },
72
+ title: {
73
+ fontSize: 14,
74
+ fontWeight: "700",
75
+ color: "#0f172a"
76
+ },
77
+ fine: {
78
+ fontSize: 12,
79
+ color: "#64748b",
80
+ lineHeight: 16
81
+ },
82
+ log: {
83
+ maxHeight: 140,
84
+ backgroundColor: "#f8fafc",
85
+ borderRadius: 10,
86
+ padding: 8
87
+ },
88
+ logLine: {
89
+ fontSize: 12,
90
+ color: "#334155",
91
+ marginBottom: 4
92
+ },
93
+ status: {
94
+ fontSize: 12,
95
+ color: "#7c3aed"
96
+ },
97
+ input: {
98
+ minHeight: 64,
99
+ borderRadius: 10,
100
+ borderWidth: 1,
101
+ borderColor: "#e2e8f0",
102
+ paddingHorizontal: 10,
103
+ paddingVertical: 8,
104
+ color: "#0f172a",
105
+ textAlignVertical: "top"
106
+ },
107
+ cta: {
108
+ alignItems: "center",
109
+ paddingVertical: 11,
110
+ borderRadius: 10,
111
+ backgroundColor: "#e2e8f0"
112
+ },
113
+ ctaOff: {
114
+ opacity: 0.5
115
+ },
116
+ ctaLabel: {
117
+ fontWeight: "700",
118
+ color: "#0f172a"
119
+ }
120
+ });export{AgentCutPane};//# sourceMappingURL=AgentCutPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentCutPane.js","sources":["../../../../../src/features/canvas/videoEditor/agent/AgentCutPane.tsx"],"sourcesContent":["/**\n * Agentic cut pane inside the video editor — describe the cut, tools rearrange clips.\n */\nimport React, { useRef, useState } from 'react';\nimport { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport type { EditorTimeline } from '../editorModel';\nimport { deriveAgentEndpoint } from '../remoteMediaClient';\nimport { runCutAgentTurn } from './agentLoop';\n\nexport function AgentCutPane({\n timeline,\n setTimeline,\n token,\n indexUrl,\n}: {\n timeline: EditorTimeline;\n setTimeline: (next: EditorTimeline | ((prev: EditorTimeline) => EditorTimeline)) => void;\n token?: string | null;\n indexUrl?: string | null;\n}) {\n const timelineRef = useRef(timeline);\n timelineRef.current = timeline;\n const [prompt, setPrompt] = useState('Keep the strongest 3 clips and put the hero shot first');\n const [busy, setBusy] = useState(false);\n const [status, setStatus] = useState<string | null>(null);\n const [log, setLog] = useState<string[]>([]);\n const [history, setHistory] = useState<Array<{ role: 'user' | 'assistant'; content: string }>>([]);\n\n const run = async () => {\n if (!token || !indexUrl) {\n setLog((l) => [...l, 'Sign in needed for AI cut.']);\n return;\n }\n const text = prompt.trim();\n if (!text || busy) return;\n setBusy(true);\n setStatus('Starting…');\n setHistory((h) => [...h, { role: 'user', content: text }]);\n try {\n const result = await runCutAgentTurn({\n history,\n userText: text,\n token,\n agentEndpoint: deriveAgentEndpoint(indexUrl),\n onStatus: setStatus,\n ctx: {\n getTimeline: () => timelineRef.current,\n setTimeline: (next) => {\n timelineRef.current = next;\n setTimeline(next);\n },\n },\n });\n for (const step of result.steps) setLog((l) => [...l, step.label]);\n setLog((l) => [...l, result.text]);\n setHistory((h) => [...h, { role: 'assistant', content: result.text }]);\n setPrompt('');\n } catch (err: unknown) {\n setLog((l) => [...l, err instanceof Error ? err.message : String(err)]);\n } finally {\n setBusy(false);\n setStatus(null);\n }\n };\n\n return (\n <View style={styles.root}>\n <Text style={styles.title}>AI cut</Text>\n <Text style={styles.fine}>Describe the cut. The agent can inspect, trim, reorder, and remove clips.</Text>\n <ScrollView style={styles.log} contentContainerStyle={{ paddingBottom: 8 }}>\n {log.map((line, i) => (\n <Text key={`${i}-${line.slice(0, 12)}`} style={styles.logLine}>\n {line}\n </Text>\n ))}\n </ScrollView>\n {status ? <Text style={styles.status}>{status}</Text> : null}\n <TextInput\n value={prompt}\n onChangeText={setPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#94a3b8\"\n placeholder=\"e.g. Drop the last clip and tighten the open\"\n />\n <Pressable onPress={() => void run()} disabled={busy} style={[styles.cta, busy && styles.ctaOff]}>\n {busy ? <ActivityIndicator color=\"#0f172a\" /> : <Text style={styles.ctaLabel}>Run cut</Text>}\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { padding: 12, gap: 8 },\n title: { fontSize: 14, fontWeight: '700', color: '#0f172a' },\n fine: { fontSize: 12, color: '#64748b', lineHeight: 16 },\n log: { maxHeight: 140, backgroundColor: '#f8fafc', borderRadius: 10, padding: 8 },\n logLine: { fontSize: 12, color: '#334155', marginBottom: 4 },\n status: { fontSize: 12, color: '#7c3aed' },\n input: {\n minHeight: 64,\n borderRadius: 10,\n borderWidth: 1,\n borderColor: '#e2e8f0',\n paddingHorizontal: 10,\n paddingVertical: 8,\n color: '#0f172a',\n textAlignVertical: 'top',\n },\n cta: {\n alignItems: 'center',\n paddingVertical: 11,\n borderRadius: 10,\n backgroundColor: '#e2e8f0',\n },\n ctaOff: { opacity: 0.5 },\n ctaLabel: { fontWeight: '700', color: '#0f172a' },\n});\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import {brainChat}from'./brainClient.js';import {CUT_AGENT_TOOLS,executeCutTool}from'./cutTools.js';const SYSTEM = `You are a video editor assistant on a phone timeline.
2
+ Use tools to inspect and rearrange clips. Prefer short clear replies.
3
+ Only use the provided tools. When done, summarize in two sentences.`;
4
+ async function runCutAgentTurn(args) {
5
+ var _a, _b, _c, _d;
6
+ const steps = [];
7
+ const messages = [{
8
+ role: "system",
9
+ content: SYSTEM
10
+ }, ...args.history.slice(-10).map((m) => ({
11
+ role: m.role,
12
+ content: m.content
13
+ })), {
14
+ role: "user",
15
+ content: args.userText
16
+ }];
17
+ const maxRounds = (_a = args.maxRounds) != null ? _a : 10;
18
+ for (let round = 0; round < maxRounds; round += 1) {
19
+ (_b = args.onStatus) == null ? void 0 : _b.call(args, round === 0 ? "Thinking\u2026" : `Working (round ${round + 1})\u2026`);
20
+ let reply;
21
+ try {
22
+ reply = await brainChat({
23
+ messages,
24
+ tools: CUT_AGENT_TOOLS,
25
+ token: args.token,
26
+ agentEndpoint: args.agentEndpoint
27
+ });
28
+ } catch (err) {
29
+ return {
30
+ text: err instanceof Error ? err.message : String(err),
31
+ steps
32
+ };
33
+ }
34
+ if (!((_c = reply.tool_calls) == null ? void 0 : _c.length)) {
35
+ return {
36
+ text: reply.content.trim() || "Done.",
37
+ steps
38
+ };
39
+ }
40
+ messages.push({
41
+ role: "assistant",
42
+ content: reply.content || ""
43
+ });
44
+ for (const call of reply.tool_calls) {
45
+ let parsed = {};
46
+ try {
47
+ parsed = JSON.parse(call.function.arguments || "{}");
48
+ } catch (e) {
49
+ parsed = {};
50
+ }
51
+ (_d = args.onStatus) == null ? void 0 : _d.call(args, call.function.name);
52
+ const outcome = await executeCutTool(call.function.name, parsed, args.ctx);
53
+ steps.push({
54
+ label: outcome.label,
55
+ detail: outcome.detail
56
+ });
57
+ messages.push({
58
+ role: "tool",
59
+ tool_call_id: call.id,
60
+ name: call.function.name,
61
+ content: outcome.content
62
+ });
63
+ }
64
+ }
65
+ return {
66
+ text: "Stopped after the tool budget. Ask me to continue if needed.",
67
+ steps
68
+ };
69
+ }export{runCutAgentTurn};//# sourceMappingURL=agentLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentLoop.js","sources":["../../../../../src/features/canvas/videoEditor/agent/agentLoop.ts"],"sourcesContent":["/**\n * One agentic cut turn — twin of web agentLoop (cut tools only).\n */\nimport { brainChat, type BrainMessage, type BrainReply } from './brainClient';\nimport { CUT_AGENT_TOOLS, executeCutTool, type AgentToolContext } from './cutTools';\n\nexport interface AgentTurnResult {\n text: string;\n steps: Array<{ label: string; detail?: string }>;\n}\n\nconst SYSTEM = `You are a video editor assistant on a phone timeline.\nUse tools to inspect and rearrange clips. Prefer short clear replies.\nOnly use the provided tools. When done, summarize in two sentences.`;\n\nexport async function runCutAgentTurn(args: {\n history: Array<{ role: 'user' | 'assistant'; content: string }>;\n userText: string;\n ctx: AgentToolContext;\n token: string;\n agentEndpoint: string;\n onStatus?: (text: string) => void;\n maxRounds?: number;\n}): Promise<AgentTurnResult> {\n const steps: AgentTurnResult['steps'] = [];\n const messages: BrainMessage[] = [\n { role: 'system', content: SYSTEM },\n ...args.history.slice(-10).map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content })),\n { role: 'user', content: args.userText },\n ];\n const maxRounds = args.maxRounds ?? 10;\n\n for (let round = 0; round < maxRounds; round += 1) {\n args.onStatus?.(round === 0 ? 'Thinking…' : `Working (round ${round + 1})…`);\n let reply: BrainReply;\n try {\n reply = await brainChat({\n messages,\n tools: CUT_AGENT_TOOLS,\n token: args.token,\n agentEndpoint: args.agentEndpoint,\n });\n } catch (err) {\n return {\n text: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n\n if (!reply.tool_calls?.length) {\n return { text: reply.content.trim() || 'Done.', steps };\n }\n\n messages.push({\n role: 'assistant',\n content: reply.content || '',\n });\n\n for (const call of reply.tool_calls) {\n let parsed: unknown = {};\n try {\n parsed = JSON.parse(call.function.arguments || '{}');\n } catch {\n parsed = {};\n }\n args.onStatus?.(call.function.name);\n const outcome = await executeCutTool(call.function.name, parsed, args.ctx);\n steps.push({ label: outcome.label, detail: outcome.detail });\n messages.push({\n role: 'tool',\n tool_call_id: call.id,\n name: call.function.name,\n content: outcome.content,\n });\n }\n }\n\n return { text: 'Stopped after the tool budget. Ask me to continue if needed.', steps };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ 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
+ async function brainChat(args) {
18
+ var _a, _b, _c;
19
+ const resp = await fetch(`${args.agentEndpoint}/v1/yantra-brain/chat/completions`, {
20
+ method: "POST",
21
+ headers: {
22
+ "content-type": "application/json",
23
+ authorization: `Bearer ${args.token}`
24
+ },
25
+ body: JSON.stringify(__spreadValues({
26
+ model: args.model || "yantra-brain-smart",
27
+ messages: args.messages
28
+ }, ((_a = args.tools) == null ? void 0 : _a.length) ? {
29
+ tools: args.tools,
30
+ tool_choice: "auto"
31
+ } : {}))
32
+ });
33
+ const json = await resp.json().catch(() => ({}));
34
+ if (!resp.ok) {
35
+ throw new Error(typeof json.error === "string" ? json.error : `Brain chat failed (HTTP ${resp.status})`);
36
+ }
37
+ const choices = json.choices;
38
+ const message = (_c = (_b = choices == null ? void 0 : choices[0]) == null ? void 0 : _b.message) != null ? _c : {};
39
+ const content = typeof message.content === "string" ? message.content : "";
40
+ const tool_calls = Array.isArray(message.tool_calls) ? message.tool_calls : void 0;
41
+ return {
42
+ content,
43
+ tool_calls
44
+ };
45
+ }export{brainChat};//# sourceMappingURL=brainClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brainClient.js","sources":["../../../../../src/features/canvas/videoEditor/agent/brainClient.ts"],"sourcesContent":["/** Brain chat transport for the studio agent (gateway /v1/yantra-brain). */\nexport interface BrainMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tool_call_id?: string;\n name?: string;\n}\n\nexport interface BrainTool {\n type: 'function';\n function: { name: string; description: string; parameters: Record<string, unknown> };\n}\n\nexport interface BrainToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n}\n\nexport interface BrainReply {\n content: string;\n tool_calls?: BrainToolCall[];\n}\n\nexport type BrainChat = (args: {\n messages: BrainMessage[];\n tools?: BrainTool[];\n model?: string;\n token: string;\n agentEndpoint: string;\n}) => Promise<BrainReply>;\n\nexport async function brainChat(args: {\n messages: BrainMessage[];\n tools?: BrainTool[];\n model?: string;\n token: string;\n agentEndpoint: string;\n}): Promise<BrainReply> {\n const resp = await fetch(`${args.agentEndpoint}/v1/yantra-brain/chat/completions`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${args.token}`,\n },\n body: JSON.stringify({\n model: args.model || 'yantra-brain-smart',\n messages: args.messages,\n ...(args.tools?.length ? { tools: args.tools, tool_choice: 'auto' } : {}),\n }),\n });\n const json = (await resp.json().catch(() => ({}))) as Record<string, unknown>;\n if (!resp.ok) {\n throw new Error(typeof json.error === 'string' ? json.error : `Brain chat failed (HTTP ${resp.status})`);\n }\n const choices = json.choices as Array<{ message?: Record<string, unknown> }> | undefined;\n const message = choices?.[0]?.message ?? {};\n const content = typeof message.content === 'string' ? message.content : '';\n const tool_calls = Array.isArray(message.tool_calls) ? (message.tool_calls as BrainToolCall[]) : undefined;\n return { content, tool_calls };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkCA,eAAsB,UAAU,IAMR,EAAA;AAxCxB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyCE,EAAA,MAAM,OAAO,MAAM,KAAA,CAAM,CAAG,EAAA,IAAA,CAAK,aAAa,CAAqC,iCAAA,CAAA,EAAA;AAAA,IACjF,MAAQ,EAAA,MAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,kBAAA;AAAA,MAChB,aAAA,EAAe,CAAU,OAAA,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,KACrC;AAAA,IACA,IAAA,EAAM,KAAK,SAAU,CAAA,cAAA,CAAA;AAAA,MACnB,KAAA,EAAO,KAAK,KAAS,IAAA,oBAAA;AAAA,MACrB,UAAU,IAAK,CAAA;AAAA,KACX,EAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAS,IAAA;AAAA,MACvB,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,WAAa,EAAA;AAAA,KACf,GAAI,EACL,CAAA;AAAA,GACF,CAAA;AACD,EAAM,MAAA,IAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,GAAO,KAAM,CAAA,OAAO,EAAG,CAAA,CAAA;AAChD,EAAI,IAAA,CAAC,KAAK,EAAI,EAAA;AACZ,IAAM,MAAA,IAAI,KAAM,CAAA,OAAO,IAAK,CAAA,KAAA,KAAU,QAAW,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,wBAAA,EAA2B,IAAK,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA;AAAA;AAEzG,EAAA,MAAM,UAAU,IAAK,CAAA,OAAA;AAGrB,EAAA,MAAM,WAAU,EAAU,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,CAAA,CAAA,KAAV,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,KAAd,YAAyB,EAAC;AAC1C,EAAA,MAAM,UAAU,OAAO,OAAA,CAAQ,OAAY,KAAA,QAAA,GAAW,QAAQ,OAAU,GAAA,EAAA;AACxE,EAAA,MAAM,aAAa,KAAM,CAAA,OAAA,CAAQ,QAAQ,UAAU,CAAA,GAAI,QAAQ,UAAgC,GAAA,MAAA;AAC/F,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA;AAAA,GACF;AACF"}