vibesurf 0.2.40__py3-none-any.whl

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.

Potentially problematic release.


This version of vibesurf might be problematic. Click here for more details.

Files changed (2921) hide show
  1. vibe_surf/__init__.py +12 -0
  2. vibe_surf/_version.py +34 -0
  3. vibe_surf/agents/__init__.py +0 -0
  4. vibe_surf/agents/browser_use_agent.py +820 -0
  5. vibe_surf/agents/prompts/__init__.py +1 -0
  6. vibe_surf/agents/prompts/report_writer_prompt.py +73 -0
  7. vibe_surf/agents/prompts/vibe_surf_prompt.py +218 -0
  8. vibe_surf/agents/report_writer_agent.py +580 -0
  9. vibe_surf/agents/vibe_surf_agent.py +1839 -0
  10. vibe_surf/agents/views.py +123 -0
  11. vibe_surf/backend/__init__.py +0 -0
  12. vibe_surf/backend/api/__init__.py +3 -0
  13. vibe_surf/backend/api/activity.py +245 -0
  14. vibe_surf/backend/api/agent.py +38 -0
  15. vibe_surf/backend/api/browser.py +70 -0
  16. vibe_surf/backend/api/composio.py +1047 -0
  17. vibe_surf/backend/api/config.py +762 -0
  18. vibe_surf/backend/api/files.py +331 -0
  19. vibe_surf/backend/api/models.py +260 -0
  20. vibe_surf/backend/api/schedule.py +331 -0
  21. vibe_surf/backend/api/task.py +378 -0
  22. vibe_surf/backend/api/vibesurf.py +681 -0
  23. vibe_surf/backend/api/voices.py +481 -0
  24. vibe_surf/backend/database/__init__.py +13 -0
  25. vibe_surf/backend/database/manager.py +318 -0
  26. vibe_surf/backend/database/migrations/v001_initial_schema.sql +118 -0
  27. vibe_surf/backend/database/migrations/v002_add_agent_mode.sql +6 -0
  28. vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql +11 -0
  29. vibe_surf/backend/database/migrations/v004_add_voice_profiles.sql +35 -0
  30. vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
  31. vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
  32. vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
  33. vibe_surf/backend/database/models.py +289 -0
  34. vibe_surf/backend/database/queries.py +1682 -0
  35. vibe_surf/backend/database/schemas.py +100 -0
  36. vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
  37. vibe_surf/backend/frontend/assets/SlackIcon-CE-ahjQZ.js +1 -0
  38. vibe_surf/backend/frontend/assets/Wikipedia-BINJ6cJv.js +1 -0
  39. vibe_surf/backend/frontend/assets/Wolfram-sV3o4SbF.js +1 -0
  40. vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  41. vibe_surf/backend/frontend/assets/a-arrow-down-BcX59nU3.js +6 -0
  42. vibe_surf/backend/frontend/assets/a-arrow-up-CN8sc-6V.js +6 -0
  43. vibe_surf/backend/frontend/assets/a-large-small-D4z4tJYP.js +6 -0
  44. vibe_surf/backend/frontend/assets/accessibility-DPNGH_So.js +6 -0
  45. vibe_surf/backend/frontend/assets/activity-DBaIDOIU.js +6 -0
  46. vibe_surf/backend/frontend/assets/air-vent-Yxf9hR-e.js +6 -0
  47. vibe_surf/backend/frontend/assets/airplay-Cuvu9cUw.js +6 -0
  48. vibe_surf/backend/frontend/assets/alarm-clock-check-Du3BsRJ-.js +6 -0
  49. vibe_surf/backend/frontend/assets/alarm-clock-minus-BWB_dmGd.js +6 -0
  50. vibe_surf/backend/frontend/assets/alarm-clock-off-DtnpjTwW.js +6 -0
  51. vibe_surf/backend/frontend/assets/alarm-clock-plus-CSe6BTX8.js +6 -0
  52. vibe_surf/backend/frontend/assets/alarm-clock-qHQG131G.js +6 -0
  53. vibe_surf/backend/frontend/assets/alarm-smoke-D3HVdJHb.js +6 -0
  54. vibe_surf/backend/frontend/assets/album-CVutl5zk.js +6 -0
  55. vibe_surf/backend/frontend/assets/align-center-D3KadjPz.js +6 -0
  56. vibe_surf/backend/frontend/assets/align-center-horizontal-DGTmV9aA.js +6 -0
  57. vibe_surf/backend/frontend/assets/align-center-vertical-_5fvpuKY.js +6 -0
  58. vibe_surf/backend/frontend/assets/align-end-horizontal-DPltJfFM.js +6 -0
  59. vibe_surf/backend/frontend/assets/align-end-vertical-cv9XHMvE.js +6 -0
  60. vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-QdrwS7dg.js +6 -0
  61. vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-Bf9IacXs.js +6 -0
  62. vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-CyGDfN90.js +6 -0
  63. vibe_surf/backend/frontend/assets/align-horizontal-justify-center-BBV_-6o5.js +6 -0
  64. vibe_surf/backend/frontend/assets/align-horizontal-justify-end-Bisjrtt3.js +6 -0
  65. vibe_surf/backend/frontend/assets/align-horizontal-justify-start-D6DNaBNY.js +6 -0
  66. vibe_surf/backend/frontend/assets/align-horizontal-space-around-DdeziFMB.js +6 -0
  67. vibe_surf/backend/frontend/assets/align-horizontal-space-between-Cifkmzuk.js +6 -0
  68. vibe_surf/backend/frontend/assets/align-justify-CaSlCgAY.js +6 -0
  69. vibe_surf/backend/frontend/assets/align-left-B2G3vNyc.js +6 -0
  70. vibe_surf/backend/frontend/assets/align-right-MCEgT99B.js +6 -0
  71. vibe_surf/backend/frontend/assets/align-start-horizontal-OfSL-vcz.js +6 -0
  72. vibe_surf/backend/frontend/assets/align-start-vertical-Dbqlci_F.js +6 -0
  73. vibe_surf/backend/frontend/assets/align-vertical-distribute-center-FcLPQFYH.js +6 -0
  74. vibe_surf/backend/frontend/assets/align-vertical-distribute-end-CUDa17Tj.js +6 -0
  75. vibe_surf/backend/frontend/assets/align-vertical-distribute-start-CrZvdfpE.js +6 -0
  76. vibe_surf/backend/frontend/assets/align-vertical-justify-center-BOp5aU8B.js +6 -0
  77. vibe_surf/backend/frontend/assets/align-vertical-justify-end-CYB_ypaq.js +6 -0
  78. vibe_surf/backend/frontend/assets/align-vertical-justify-start-DfClLh-A.js +6 -0
  79. vibe_surf/backend/frontend/assets/align-vertical-space-around-DNuIeWrp.js +6 -0
  80. vibe_surf/backend/frontend/assets/align-vertical-space-between-38joduqw.js +6 -0
  81. vibe_surf/backend/frontend/assets/ambulance-C_ROlhJD.js +6 -0
  82. vibe_surf/backend/frontend/assets/ampersand-DvScpWJk.js +6 -0
  83. vibe_surf/backend/frontend/assets/ampersands-Blzum23C.js +6 -0
  84. vibe_surf/backend/frontend/assets/amphora-DctGCu79.js +6 -0
  85. vibe_surf/backend/frontend/assets/anchor-BvYXuJxo.js +6 -0
  86. vibe_surf/backend/frontend/assets/angry-MKPx79NH.js +6 -0
  87. vibe_surf/backend/frontend/assets/annoyed-CfNKx2hK.js +6 -0
  88. vibe_surf/backend/frontend/assets/antenna-Dw3k5fr7.js +6 -0
  89. vibe_surf/backend/frontend/assets/anvil-C8prcEpZ.js +6 -0
  90. vibe_surf/backend/frontend/assets/aperture--Tp9qCvO.js +6 -0
  91. vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
  92. vibe_surf/backend/frontend/assets/app-window-Bs6eiKRX.js +6 -0
  93. vibe_surf/backend/frontend/assets/app-window-mac-A6qCq1Wj.js +6 -0
  94. vibe_surf/backend/frontend/assets/apple-CENdsQC1.js +6 -0
  95. vibe_surf/backend/frontend/assets/archive-DoV6rkNe.js +6 -0
  96. vibe_surf/backend/frontend/assets/archive-restore-C4ruGNaP.js +6 -0
  97. vibe_surf/backend/frontend/assets/archive-x-FSNb8ZNO.js +6 -0
  98. vibe_surf/backend/frontend/assets/armchair-lkSJ2diV.js +6 -0
  99. vibe_surf/backend/frontend/assets/arrow-big-down-CZfd7k5o.js +6 -0
  100. vibe_surf/backend/frontend/assets/arrow-big-down-dash-DZh_9yfN.js +6 -0
  101. vibe_surf/backend/frontend/assets/arrow-big-left-Dl76-6oW.js +6 -0
  102. vibe_surf/backend/frontend/assets/arrow-big-left-dash-B38PvMCG.js +6 -0
  103. vibe_surf/backend/frontend/assets/arrow-big-right-0TeLuAvG.js +6 -0
  104. vibe_surf/backend/frontend/assets/arrow-big-right-dash-Br-Q2sOD.js +6 -0
  105. vibe_surf/backend/frontend/assets/arrow-big-up-DjoHZ6em.js +6 -0
  106. vibe_surf/backend/frontend/assets/arrow-big-up-dash-BDk2lJYm.js +6 -0
  107. vibe_surf/backend/frontend/assets/arrow-down-0-1-DaONJclu.js +6 -0
  108. vibe_surf/backend/frontend/assets/arrow-down-1-0-DRP7zCqR.js +6 -0
  109. vibe_surf/backend/frontend/assets/arrow-down-CVHDaeIM.js +6 -0
  110. vibe_surf/backend/frontend/assets/arrow-down-a-z-D3LHPEGP.js +6 -0
  111. vibe_surf/backend/frontend/assets/arrow-down-from-line-CfhMT8rR.js +6 -0
  112. vibe_surf/backend/frontend/assets/arrow-down-left-CDcXzsPn.js +6 -0
  113. vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-Dh2ydU3g.js +6 -0
  114. vibe_surf/backend/frontend/assets/arrow-down-right-C1zfcmSn.js +6 -0
  115. vibe_surf/backend/frontend/assets/arrow-down-to-dot-CBTjQ2b9.js +6 -0
  116. vibe_surf/backend/frontend/assets/arrow-down-to-line-D7fITr7U.js +6 -0
  117. vibe_surf/backend/frontend/assets/arrow-down-up-CQFDI11z.js +6 -0
  118. vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-BBX8pEpl.js +6 -0
  119. vibe_surf/backend/frontend/assets/arrow-down-z-a-Cj5ts4gv.js +6 -0
  120. vibe_surf/backend/frontend/assets/arrow-left-DFBlqjCJ.js +6 -0
  121. vibe_surf/backend/frontend/assets/arrow-left-from-line-DlmghHsU.js +6 -0
  122. vibe_surf/backend/frontend/assets/arrow-left-right-D2vJTioe.js +6 -0
  123. vibe_surf/backend/frontend/assets/arrow-left-to-line-mHPr5GnP.js +6 -0
  124. vibe_surf/backend/frontend/assets/arrow-right-BQgpMdFf.js +6 -0
  125. vibe_surf/backend/frontend/assets/arrow-right-from-line-BpW80jQb.js +6 -0
  126. vibe_surf/backend/frontend/assets/arrow-right-left-S3D3MTs3.js +6 -0
  127. vibe_surf/backend/frontend/assets/arrow-right-to-line-C70Kx0FS.js +6 -0
  128. vibe_surf/backend/frontend/assets/arrow-up-0-1-BVQDbCWQ.js +6 -0
  129. vibe_surf/backend/frontend/assets/arrow-up-1-0-DyLpNpnM.js +6 -0
  130. vibe_surf/backend/frontend/assets/arrow-up-Bt1icfmQ.js +6 -0
  131. vibe_surf/backend/frontend/assets/arrow-up-a-z-Y80pIZ0a.js +6 -0
  132. vibe_surf/backend/frontend/assets/arrow-up-down-BklRwaY-.js +6 -0
  133. vibe_surf/backend/frontend/assets/arrow-up-from-dot-DEWl1PS1.js +6 -0
  134. vibe_surf/backend/frontend/assets/arrow-up-from-line-B6KTMhpQ.js +6 -0
  135. vibe_surf/backend/frontend/assets/arrow-up-left-DhrKWt_9.js +6 -0
  136. vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-Dip17kLc.js +6 -0
  137. vibe_surf/backend/frontend/assets/arrow-up-right-Cqh04sEk.js +6 -0
  138. vibe_surf/backend/frontend/assets/arrow-up-to-line-BEQShaIO.js +6 -0
  139. vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-DIneP_zC.js +6 -0
  140. vibe_surf/backend/frontend/assets/arrow-up-z-a-B9wbuYNl.js +6 -0
  141. vibe_surf/backend/frontend/assets/arrows-up-from-line-3AFYhAJM.js +6 -0
  142. vibe_surf/backend/frontend/assets/asterisk-W0pDx_Rn.js +6 -0
  143. vibe_surf/backend/frontend/assets/at-sign-DlBejcs3.js +6 -0
  144. vibe_surf/backend/frontend/assets/atom-OaWlLitB.js +6 -0
  145. vibe_surf/backend/frontend/assets/audio-lines-CjFpWvOi.js +6 -0
  146. vibe_surf/backend/frontend/assets/audio-waveform-DuNZMGXb.js +6 -0
  147. vibe_surf/backend/frontend/assets/award-BukkHO3C.js +6 -0
  148. vibe_surf/backend/frontend/assets/axe-BUKyB8rX.js +6 -0
  149. vibe_surf/backend/frontend/assets/axis-3d-D6v4MamZ.js +6 -0
  150. vibe_surf/backend/frontend/assets/baby-BOnXpUZv.js +6 -0
  151. vibe_surf/backend/frontend/assets/backpack-6S9rBoLi.js +6 -0
  152. vibe_surf/backend/frontend/assets/badge-Dm_XCo4W.js +6 -0
  153. vibe_surf/backend/frontend/assets/badge-alert-BvvmA4mG.js +6 -0
  154. vibe_surf/backend/frontend/assets/badge-cent-Q-epnYHs.js +6 -0
  155. vibe_surf/backend/frontend/assets/badge-check-36lbyNM_.js +6 -0
  156. vibe_surf/backend/frontend/assets/badge-dollar-sign-tj_oF0X-.js +6 -0
  157. vibe_surf/backend/frontend/assets/badge-euro-D8PbE0bv.js +6 -0
  158. vibe_surf/backend/frontend/assets/badge-help-BFD5BXO8.js +6 -0
  159. vibe_surf/backend/frontend/assets/badge-indian-rupee-5080RWGL.js +6 -0
  160. vibe_surf/backend/frontend/assets/badge-info-COz3SiCZ.js +6 -0
  161. vibe_surf/backend/frontend/assets/badge-japanese-yen-DFXPoz7u.js +6 -0
  162. vibe_surf/backend/frontend/assets/badge-minus-BsGaVL3Q.js +6 -0
  163. vibe_surf/backend/frontend/assets/badge-percent-B4cd7rtn.js +6 -0
  164. vibe_surf/backend/frontend/assets/badge-plus-Vecq1PGK.js +6 -0
  165. vibe_surf/backend/frontend/assets/badge-pound-sterling-DLYMYG8U.js +6 -0
  166. vibe_surf/backend/frontend/assets/badge-russian-ruble-BzNr--Mh.js +6 -0
  167. vibe_surf/backend/frontend/assets/badge-swiss-franc-Des6zCyZ.js +6 -0
  168. vibe_surf/backend/frontend/assets/badge-x-CSb9nfC0.js +6 -0
  169. vibe_surf/backend/frontend/assets/baggage-claim-DDwV8NEi.js +6 -0
  170. vibe_surf/backend/frontend/assets/ban-BYnCport.js +6 -0
  171. vibe_surf/backend/frontend/assets/banana-Dfi3HmlS.js +6 -0
  172. vibe_surf/backend/frontend/assets/bandage-CcKil-EC.js +6 -0
  173. vibe_surf/backend/frontend/assets/banknote-XCDTM0NN.js +6 -0
  174. vibe_surf/backend/frontend/assets/banknote-arrow-down-DjVb8CZD.js +6 -0
  175. vibe_surf/backend/frontend/assets/banknote-arrow-up-C4w7omsx.js +6 -0
  176. vibe_surf/backend/frontend/assets/banknote-x-CQPrNAnr.js +6 -0
  177. vibe_surf/backend/frontend/assets/barcode-B0ezXTca.js +6 -0
  178. vibe_surf/backend/frontend/assets/baseline-CA8GPr3n.js +6 -0
  179. vibe_surf/backend/frontend/assets/bath-BdiVnLCS.js +6 -0
  180. vibe_surf/backend/frontend/assets/battery-CvLfXslf.js +6 -0
  181. vibe_surf/backend/frontend/assets/battery-charging-Bin6EfKA.js +6 -0
  182. vibe_surf/backend/frontend/assets/battery-full-BNcpthdG.js +6 -0
  183. vibe_surf/backend/frontend/assets/battery-low-0acbM2TX.js +6 -0
  184. vibe_surf/backend/frontend/assets/battery-medium-CqQzYkr0.js +6 -0
  185. vibe_surf/backend/frontend/assets/battery-plus-CeXK9ubJ.js +6 -0
  186. vibe_surf/backend/frontend/assets/battery-warning-BX1_YAxk.js +6 -0
  187. vibe_surf/backend/frontend/assets/beaker-CvU60KJI.js +6 -0
  188. vibe_surf/backend/frontend/assets/bean-DXSFxjpW.js +6 -0
  189. vibe_surf/backend/frontend/assets/bean-off-C18fYQxg.js +6 -0
  190. vibe_surf/backend/frontend/assets/bed-BHNMrHmJ.js +6 -0
  191. vibe_surf/backend/frontend/assets/bed-double-CBJd1xUT.js +6 -0
  192. vibe_surf/backend/frontend/assets/bed-single-C2P2u_SW.js +6 -0
  193. vibe_surf/backend/frontend/assets/beef-DZ7YmxJ9.js +6 -0
  194. vibe_surf/backend/frontend/assets/beer-DoSAYmbT.js +6 -0
  195. vibe_surf/backend/frontend/assets/beer-off-D2D0Eidd.js +6 -0
  196. vibe_surf/backend/frontend/assets/bell-CZemSa0A.js +6 -0
  197. vibe_surf/backend/frontend/assets/bell-dot-2U18M7J_.js +6 -0
  198. vibe_surf/backend/frontend/assets/bell-electric-O_6RWZVP.js +6 -0
  199. vibe_surf/backend/frontend/assets/bell-minus-C5OFhKIv.js +6 -0
  200. vibe_surf/backend/frontend/assets/bell-off-DvNAvSV6.js +6 -0
  201. vibe_surf/backend/frontend/assets/bell-plus-CtbF4PY7.js +6 -0
  202. vibe_surf/backend/frontend/assets/bell-ring-2jzOxMlO.js +6 -0
  203. vibe_surf/backend/frontend/assets/between-horizontal-end-IrrEJxkg.js +6 -0
  204. vibe_surf/backend/frontend/assets/between-horizontal-start-DB4hrTYq.js +6 -0
  205. vibe_surf/backend/frontend/assets/between-vertical-end-DeC10NGd.js +6 -0
  206. vibe_surf/backend/frontend/assets/between-vertical-start-Byocansl.js +6 -0
  207. vibe_surf/backend/frontend/assets/biceps-flexed-ByGLeOXg.js +6 -0
  208. vibe_surf/backend/frontend/assets/bike-C2kR3eV7.js +6 -0
  209. vibe_surf/backend/frontend/assets/binary-ClycWsS0.js +6 -0
  210. vibe_surf/backend/frontend/assets/binoculars-DJ0HCEbV.js +6 -0
  211. vibe_surf/backend/frontend/assets/biohazard-DIYTxz4-.js +6 -0
  212. vibe_surf/backend/frontend/assets/bird-DStHDBlx.js +6 -0
  213. vibe_surf/backend/frontend/assets/bitcoin-CrUhJt55.js +6 -0
  214. vibe_surf/backend/frontend/assets/blend-Bf3c4w6z.js +6 -0
  215. vibe_surf/backend/frontend/assets/blinds-Ni4n5PSf.js +6 -0
  216. vibe_surf/backend/frontend/assets/blocks-B3WNZe2n.js +6 -0
  217. vibe_surf/backend/frontend/assets/bluetooth-Ccoiwmlv.js +6 -0
  218. vibe_surf/backend/frontend/assets/bluetooth-connected-DFiYewdk.js +6 -0
  219. vibe_surf/backend/frontend/assets/bluetooth-off-CWk55vIU.js +6 -0
  220. vibe_surf/backend/frontend/assets/bluetooth-searching-B7AZU8fL.js +6 -0
  221. vibe_surf/backend/frontend/assets/bold-DLSX_sXx.js +6 -0
  222. vibe_surf/backend/frontend/assets/bolt-BtrJOWZT.js +6 -0
  223. vibe_surf/backend/frontend/assets/bomb-qB5OKrmG.js +6 -0
  224. vibe_surf/backend/frontend/assets/bone-CwzjO8Q3.js +6 -0
  225. vibe_surf/backend/frontend/assets/book-CFsU8BHi.js +6 -0
  226. vibe_surf/backend/frontend/assets/book-a-CZdxqQip.js +6 -0
  227. vibe_surf/backend/frontend/assets/book-audio-C4vaYZSH.js +6 -0
  228. vibe_surf/backend/frontend/assets/book-check-Bcz9b-8J.js +6 -0
  229. vibe_surf/backend/frontend/assets/book-copy-CXk7oCU5.js +6 -0
  230. vibe_surf/backend/frontend/assets/book-dashed-emdeAmuI.js +6 -0
  231. vibe_surf/backend/frontend/assets/book-down-Blr3MxEN.js +6 -0
  232. vibe_surf/backend/frontend/assets/book-headphones-gUzmqrJf.js +6 -0
  233. vibe_surf/backend/frontend/assets/book-heart-D0TpFook.js +6 -0
  234. vibe_surf/backend/frontend/assets/book-image-CDh3XrAm.js +6 -0
  235. vibe_surf/backend/frontend/assets/book-key-DQV2MwOV.js +6 -0
  236. vibe_surf/backend/frontend/assets/book-lock-Df4Wh5kT.js +6 -0
  237. vibe_surf/backend/frontend/assets/book-marked-j4_WwgAf.js +6 -0
  238. vibe_surf/backend/frontend/assets/book-minus-DhTrzC1g.js +6 -0
  239. vibe_surf/backend/frontend/assets/book-open-BzAE9-Jg.js +6 -0
  240. vibe_surf/backend/frontend/assets/book-open-check-Uqc5cpgA.js +6 -0
  241. vibe_surf/backend/frontend/assets/book-open-text-BWiD6pH2.js +6 -0
  242. vibe_surf/backend/frontend/assets/book-plus-BSzMVarr.js +6 -0
  243. vibe_surf/backend/frontend/assets/book-text-CWHsjw1-.js +6 -0
  244. vibe_surf/backend/frontend/assets/book-type-9PjTGoqg.js +6 -0
  245. vibe_surf/backend/frontend/assets/book-up-2-B_62ZUyn.js +6 -0
  246. vibe_surf/backend/frontend/assets/book-up-BNLPeI--.js +6 -0
  247. vibe_surf/backend/frontend/assets/book-user-BGJrncKZ.js +6 -0
  248. vibe_surf/backend/frontend/assets/book-x-BIuvvbQ9.js +6 -0
  249. vibe_surf/backend/frontend/assets/bookmark-C6GKCgas.js +6 -0
  250. vibe_surf/backend/frontend/assets/bookmark-check-D2v52wS_.js +6 -0
  251. vibe_surf/backend/frontend/assets/bookmark-minus-5SruaRWe.js +6 -0
  252. vibe_surf/backend/frontend/assets/bookmark-plus-CDB4EbYF.js +6 -0
  253. vibe_surf/backend/frontend/assets/bookmark-x-DawiyeWt.js +6 -0
  254. vibe_surf/backend/frontend/assets/boom-box-CjxUDyUJ.js +6 -0
  255. vibe_surf/backend/frontend/assets/bot-BcNQyjDe.js +6 -0
  256. vibe_surf/backend/frontend/assets/bot-message-square-CJLeai4W.js +6 -0
  257. vibe_surf/backend/frontend/assets/bot-off-CYborYVu.js +6 -0
  258. vibe_surf/backend/frontend/assets/bow-arrow-DINnk6sV.js +6 -0
  259. vibe_surf/backend/frontend/assets/box-C8qv4POs.js +6 -0
  260. vibe_surf/backend/frontend/assets/boxes-C1Wz5G2m.js +6 -0
  261. vibe_surf/backend/frontend/assets/braces-BL19F0qy.js +6 -0
  262. vibe_surf/backend/frontend/assets/brackets-DXYKs2wJ.js +6 -0
  263. vibe_surf/backend/frontend/assets/brain-BuTeWcBr.js +6 -0
  264. vibe_surf/backend/frontend/assets/brain-circuit-DAr0c9Ig.js +6 -0
  265. vibe_surf/backend/frontend/assets/brain-cog-C-6ua_E5.js +6 -0
  266. vibe_surf/backend/frontend/assets/brick-wall-DiRdytpC.js +6 -0
  267. vibe_surf/backend/frontend/assets/brick-wall-fire-Df58-yW_.js +6 -0
  268. vibe_surf/backend/frontend/assets/briefcase-BCC8rhM-.js +6 -0
  269. vibe_surf/backend/frontend/assets/briefcase-business-11K02ygr.js +6 -0
  270. vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-BGOeI8YI.js +6 -0
  271. vibe_surf/backend/frontend/assets/briefcase-medical-Cf5O_Vzv.js +6 -0
  272. vibe_surf/backend/frontend/assets/bring-to-front-DkBhdEDk.js +6 -0
  273. vibe_surf/backend/frontend/assets/brush-CwwHpx8w.js +6 -0
  274. vibe_surf/backend/frontend/assets/bubbles-BNDUSsoL.js +6 -0
  275. vibe_surf/backend/frontend/assets/bug-B-h4nltF.js +6 -0
  276. vibe_surf/backend/frontend/assets/bug-off-BsFDr1Kw.js +6 -0
  277. vibe_surf/backend/frontend/assets/bug-play-26tPYeYP.js +6 -0
  278. vibe_surf/backend/frontend/assets/building-2-B8a5eq3G.js +6 -0
  279. vibe_surf/backend/frontend/assets/building-D-y2htrY.js +6 -0
  280. vibe_surf/backend/frontend/assets/bus-eKi5tEc0.js +6 -0
  281. vibe_surf/backend/frontend/assets/bus-front-UgmZ3AhM.js +6 -0
  282. vibe_surf/backend/frontend/assets/cable-bgAMwTGl.js +6 -0
  283. vibe_surf/backend/frontend/assets/cable-car-D4-4YVV_.js +6 -0
  284. vibe_surf/backend/frontend/assets/cake-CsxUhj7B.js +6 -0
  285. vibe_surf/backend/frontend/assets/cake-slice-CDFVuMN9.js +6 -0
  286. vibe_surf/backend/frontend/assets/calculator-DgmhNoBI.js +6 -0
  287. vibe_surf/backend/frontend/assets/calendar-1-BKz8ZI5j.js +6 -0
  288. vibe_surf/backend/frontend/assets/calendar-arrow-down-CtgxtU04.js +6 -0
  289. vibe_surf/backend/frontend/assets/calendar-arrow-up-xRCcun7L.js +6 -0
  290. vibe_surf/backend/frontend/assets/calendar-check-2-CZSHjt45.js +6 -0
  291. vibe_surf/backend/frontend/assets/calendar-check-4yXO0khM.js +6 -0
  292. vibe_surf/backend/frontend/assets/calendar-clock-BakA-x1D.js +6 -0
  293. vibe_surf/backend/frontend/assets/calendar-cog-CZljoOd5.js +6 -0
  294. vibe_surf/backend/frontend/assets/calendar-days-ChE7Ny1-.js +6 -0
  295. vibe_surf/backend/frontend/assets/calendar-fold-BkO7wfLY.js +6 -0
  296. vibe_surf/backend/frontend/assets/calendar-heart-Dr-9lPi7.js +6 -0
  297. vibe_surf/backend/frontend/assets/calendar-minus-2-qezZcq9-.js +6 -0
  298. vibe_surf/backend/frontend/assets/calendar-minus-vz6lNpYY.js +6 -0
  299. vibe_surf/backend/frontend/assets/calendar-off-BWz43ibw.js +6 -0
  300. vibe_surf/backend/frontend/assets/calendar-plus-2-XgwhzxSM.js +6 -0
  301. vibe_surf/backend/frontend/assets/calendar-plus-D3Dch9Uq.js +6 -0
  302. vibe_surf/backend/frontend/assets/calendar-range-DNVYH5rE.js +6 -0
  303. vibe_surf/backend/frontend/assets/calendar-search-Cu8Pf1i4.js +6 -0
  304. vibe_surf/backend/frontend/assets/calendar-sync-CJShUCMN.js +6 -0
  305. vibe_surf/backend/frontend/assets/calendar-uQc-0CwX.js +6 -0
  306. vibe_surf/backend/frontend/assets/calendar-x-2-DKrkh_XF.js +6 -0
  307. vibe_surf/backend/frontend/assets/calendar-x-BAw2jejx.js +6 -0
  308. vibe_surf/backend/frontend/assets/camera-CeCtO8OS.js +6 -0
  309. vibe_surf/backend/frontend/assets/camera-off-Dn0VufPW.js +6 -0
  310. vibe_surf/backend/frontend/assets/candy-C8LKHyd9.js +6 -0
  311. vibe_surf/backend/frontend/assets/candy-cane-qdqDVt_H.js +6 -0
  312. vibe_surf/backend/frontend/assets/candy-off-DoNKmYDA.js +6 -0
  313. vibe_surf/backend/frontend/assets/cannabis-d1YIKR6M.js +6 -0
  314. vibe_surf/backend/frontend/assets/captions-DLcuaLjj.js +6 -0
  315. vibe_surf/backend/frontend/assets/captions-off-CSNnDqnT.js +6 -0
  316. vibe_surf/backend/frontend/assets/car-BNlBq1cc.js +6 -0
  317. vibe_surf/backend/frontend/assets/car-front-n1ZZ5Nji.js +6 -0
  318. vibe_surf/backend/frontend/assets/car-taxi-front-Da7GM3x6.js +6 -0
  319. vibe_surf/backend/frontend/assets/caravan-DNROe0a9.js +6 -0
  320. vibe_surf/backend/frontend/assets/carrot-ByVO2D43.js +6 -0
  321. vibe_surf/backend/frontend/assets/case-lower-BNX91uLr.js +6 -0
  322. vibe_surf/backend/frontend/assets/case-sensitive-QY839cid.js +6 -0
  323. vibe_surf/backend/frontend/assets/case-upper-DUDhnzhx.js +6 -0
  324. vibe_surf/backend/frontend/assets/cassette-tape-DnY7y11C.js +6 -0
  325. vibe_surf/backend/frontend/assets/cast-DL3Ri4Zn.js +6 -0
  326. vibe_surf/backend/frontend/assets/castle-DoI41Pkw.js +6 -0
  327. vibe_surf/backend/frontend/assets/cat-Xm6ynrXR.js +6 -0
  328. vibe_surf/backend/frontend/assets/cctv-DME6qRnE.js +6 -0
  329. vibe_surf/backend/frontend/assets/chart-area-BGI28u47.js +6 -0
  330. vibe_surf/backend/frontend/assets/chart-bar-DBV1hPM5.js +6 -0
  331. vibe_surf/backend/frontend/assets/chart-bar-big-CvJY7AHY.js +6 -0
  332. vibe_surf/backend/frontend/assets/chart-bar-decreasing-9uwKC-he.js +6 -0
  333. vibe_surf/backend/frontend/assets/chart-bar-increasing-F1gG2kkZ.js +6 -0
  334. vibe_surf/backend/frontend/assets/chart-bar-stacked-DbDlBSDo.js +6 -0
  335. vibe_surf/backend/frontend/assets/chart-candlestick-DTWO94r-.js +6 -0
  336. vibe_surf/backend/frontend/assets/chart-column-Cdh3ooHC.js +6 -0
  337. vibe_surf/backend/frontend/assets/chart-column-big-Eh8aDm6L.js +6 -0
  338. vibe_surf/backend/frontend/assets/chart-column-decreasing-BSuKP6Qc.js +6 -0
  339. vibe_surf/backend/frontend/assets/chart-column-increasing-BzEsRspx.js +6 -0
  340. vibe_surf/backend/frontend/assets/chart-column-stacked-Ca6vYEkF.js +6 -0
  341. vibe_surf/backend/frontend/assets/chart-gantt-BKdYU39i.js +6 -0
  342. vibe_surf/backend/frontend/assets/chart-line-DN7nBokI.js +6 -0
  343. vibe_surf/backend/frontend/assets/chart-network-B6aKwyxu.js +6 -0
  344. vibe_surf/backend/frontend/assets/chart-no-axes-column-BPUq1xmc.js +6 -0
  345. vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-CtSuhRPr.js +6 -0
  346. vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-D9Z23RSe.js +6 -0
  347. vibe_surf/backend/frontend/assets/chart-no-axes-combined-BPIDpAUw.js +6 -0
  348. vibe_surf/backend/frontend/assets/chart-no-axes-gantt-mstaaDOy.js +6 -0
  349. vibe_surf/backend/frontend/assets/chart-pie-DHkYI2nd.js +6 -0
  350. vibe_surf/backend/frontend/assets/chart-scatter-BMUVsxxc.js +6 -0
  351. vibe_surf/backend/frontend/assets/chart-spline-BQYhzmbs.js +6 -0
  352. vibe_surf/backend/frontend/assets/check-check-DZ6-FF8V.js +6 -0
  353. vibe_surf/backend/frontend/assets/chef-hat-DI_R6N2N.js +6 -0
  354. vibe_surf/backend/frontend/assets/cherry-D00B4bwv.js +6 -0
  355. vibe_surf/backend/frontend/assets/chevron-first-D-sSlEK9.js +6 -0
  356. vibe_surf/backend/frontend/assets/chevron-last-AieZfpF5.js +6 -0
  357. vibe_surf/backend/frontend/assets/chevron-left-mfds1hqE.js +6 -0
  358. vibe_surf/backend/frontend/assets/chevron-right-Cjbrp9zy.js +6 -0
  359. vibe_surf/backend/frontend/assets/chevrons-down-D3_RigXr.js +6 -0
  360. vibe_surf/backend/frontend/assets/chevrons-down-up-CWJ3Bpey.js +6 -0
  361. vibe_surf/backend/frontend/assets/chevrons-left-DRqjvpLx.js +6 -0
  362. vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BzX-1Cdp.js +6 -0
  363. vibe_surf/backend/frontend/assets/chevrons-left-right-lA1Z637d.js +6 -0
  364. vibe_surf/backend/frontend/assets/chevrons-right-Ceh1Kykn.js +6 -0
  365. vibe_surf/backend/frontend/assets/chevrons-right-left-D0pOkKiz.js +6 -0
  366. vibe_surf/backend/frontend/assets/chevrons-up-CkJhDtkt.js +6 -0
  367. vibe_surf/backend/frontend/assets/chrome-B99nQ5T6.js +6 -0
  368. vibe_surf/backend/frontend/assets/church-CCtCcuUF.js +6 -0
  369. vibe_surf/backend/frontend/assets/cigarette-DHz-zWI5.js +6 -0
  370. vibe_surf/backend/frontend/assets/cigarette-off-CWKFWcz-.js +6 -0
  371. vibe_surf/backend/frontend/assets/circle-alert-BCdP7B9m.js +6 -0
  372. vibe_surf/backend/frontend/assets/circle-arrow-down-gjAb2XAQ.js +6 -0
  373. vibe_surf/backend/frontend/assets/circle-arrow-left-B8TL5s92.js +6 -0
  374. vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-BDZ_mOB3.js +6 -0
  375. vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-C31JwGaH.js +6 -0
  376. vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-jLaU6DvQ.js +6 -0
  377. vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-D2ixwYhA.js +6 -0
  378. vibe_surf/backend/frontend/assets/circle-arrow-right-C_cagsqv.js +6 -0
  379. vibe_surf/backend/frontend/assets/circle-arrow-up-Dx87_2P9.js +6 -0
  380. vibe_surf/backend/frontend/assets/circle-check-C5uPloQF.js +6 -0
  381. vibe_surf/backend/frontend/assets/circle-check-big-P_p4Wr1K.js +6 -0
  382. vibe_surf/backend/frontend/assets/circle-chevron-down-C2MiOrG4.js +6 -0
  383. vibe_surf/backend/frontend/assets/circle-chevron-left-DDuIXpi4.js +6 -0
  384. vibe_surf/backend/frontend/assets/circle-chevron-right-myMJ4pPe.js +6 -0
  385. vibe_surf/backend/frontend/assets/circle-chevron-up-De1WbdBl.js +6 -0
  386. vibe_surf/backend/frontend/assets/circle-dashed-Bl6JELwp.js +6 -0
  387. vibe_surf/backend/frontend/assets/circle-divide-3_AqIeYz.js +6 -0
  388. vibe_surf/backend/frontend/assets/circle-dollar-sign-BxcNzUBd.js +6 -0
  389. vibe_surf/backend/frontend/assets/circle-dot-BxsZo1Nv.js +6 -0
  390. vibe_surf/backend/frontend/assets/circle-dot-dashed-C9_3fDwg.js +6 -0
  391. vibe_surf/backend/frontend/assets/circle-ellipsis-y8IPhLQX.js +6 -0
  392. vibe_surf/backend/frontend/assets/circle-equal-CMS41nZX.js +6 -0
  393. vibe_surf/backend/frontend/assets/circle-fading-arrow-up-Ctl33k8e.js +6 -0
  394. vibe_surf/backend/frontend/assets/circle-fading-plus-DcIVZnCm.js +6 -0
  395. vibe_surf/backend/frontend/assets/circle-gauge-hli3GonG.js +6 -0
  396. vibe_surf/backend/frontend/assets/circle-help-DhBxmPfs.js +6 -0
  397. vibe_surf/backend/frontend/assets/circle-minus-DuzoP_Gr.js +6 -0
  398. vibe_surf/backend/frontend/assets/circle-off-CkMo-mEi.js +6 -0
  399. vibe_surf/backend/frontend/assets/circle-parking-DObllwiU.js +6 -0
  400. vibe_surf/backend/frontend/assets/circle-parking-off-Eu8OaFfX.js +6 -0
  401. vibe_surf/backend/frontend/assets/circle-pause-DWZvbXLh.js +6 -0
  402. vibe_surf/backend/frontend/assets/circle-percent-Gswg5Dmm.js +6 -0
  403. vibe_surf/backend/frontend/assets/circle-play-Cs7oMz5r.js +6 -0
  404. vibe_surf/backend/frontend/assets/circle-plus-BbT0XhZy.js +6 -0
  405. vibe_surf/backend/frontend/assets/circle-power-DJYAzMhA.js +6 -0
  406. vibe_surf/backend/frontend/assets/circle-slash-2-C6g9B1d4.js +6 -0
  407. vibe_surf/backend/frontend/assets/circle-slash-80HmVvSU.js +6 -0
  408. vibe_surf/backend/frontend/assets/circle-small-BplNmUKo.js +6 -0
  409. vibe_surf/backend/frontend/assets/circle-stop-X4XHzl3_.js +6 -0
  410. vibe_surf/backend/frontend/assets/circle-user-CBbX0YUx.js +6 -0
  411. vibe_surf/backend/frontend/assets/circle-user-round-BKiTCzXI.js +6 -0
  412. vibe_surf/backend/frontend/assets/circuit-board-DMnzBge-.js +6 -0
  413. vibe_surf/backend/frontend/assets/citrus-BXZMlaiu.js +6 -0
  414. vibe_surf/backend/frontend/assets/clapperboard-QI5DhvkW.js +6 -0
  415. vibe_surf/backend/frontend/assets/clipboard-DSAtTHqu.js +6 -0
  416. vibe_surf/backend/frontend/assets/clipboard-check-BZBI9pc5.js +6 -0
  417. vibe_surf/backend/frontend/assets/clipboard-copy-CSl6j3te.js +6 -0
  418. vibe_surf/backend/frontend/assets/clipboard-list-C8QFRlUw.js +6 -0
  419. vibe_surf/backend/frontend/assets/clipboard-minus-BuCbzuoq.js +6 -0
  420. vibe_surf/backend/frontend/assets/clipboard-paste-CQn0LMaW.js +6 -0
  421. vibe_surf/backend/frontend/assets/clipboard-pen-line-Bx0wm5dI.js +6 -0
  422. vibe_surf/backend/frontend/assets/clipboard-pen-q_cqsVmS.js +6 -0
  423. vibe_surf/backend/frontend/assets/clipboard-plus-DwQAo6_l.js +6 -0
  424. vibe_surf/backend/frontend/assets/clipboard-type-BNYyoI1_.js +6 -0
  425. vibe_surf/backend/frontend/assets/clipboard-x-DZYuwaaG.js +6 -0
  426. vibe_surf/backend/frontend/assets/clock-1-DgESaKSE.js +6 -0
  427. vibe_surf/backend/frontend/assets/clock-10-wIgrU8Yj.js +6 -0
  428. vibe_surf/backend/frontend/assets/clock-11-Buh5WHor.js +6 -0
  429. vibe_surf/backend/frontend/assets/clock-12-C2gsOQrL.js +6 -0
  430. vibe_surf/backend/frontend/assets/clock-2-D43KucqT.js +6 -0
  431. vibe_surf/backend/frontend/assets/clock-3-DYI1jraG.js +6 -0
  432. vibe_surf/backend/frontend/assets/clock-4-L4e4KHXv.js +6 -0
  433. vibe_surf/backend/frontend/assets/clock-5-CWJ5YkDs.js +6 -0
  434. vibe_surf/backend/frontend/assets/clock-6-CtaZof53.js +6 -0
  435. vibe_surf/backend/frontend/assets/clock-7-asCRJHjv.js +6 -0
  436. vibe_surf/backend/frontend/assets/clock-8-Cc2qbeiy.js +6 -0
  437. vibe_surf/backend/frontend/assets/clock-9-Dl4X0vFw.js +6 -0
  438. vibe_surf/backend/frontend/assets/clock-BYS3KG7-.js +6 -0
  439. vibe_surf/backend/frontend/assets/clock-alert-Cq_VQBiw.js +6 -0
  440. vibe_surf/backend/frontend/assets/clock-arrow-down-Bd1H68GK.js +6 -0
  441. vibe_surf/backend/frontend/assets/clock-arrow-up-BUYARFyu.js +6 -0
  442. vibe_surf/backend/frontend/assets/clock-fading-DdL2cNkM.js +6 -0
  443. vibe_surf/backend/frontend/assets/cloud-BMpvy1xk.js +6 -0
  444. vibe_surf/backend/frontend/assets/cloud-alert-D5XOu8YY.js +6 -0
  445. vibe_surf/backend/frontend/assets/cloud-cog-CMw4aVSH.js +6 -0
  446. vibe_surf/backend/frontend/assets/cloud-download-DU72C1pe.js +6 -0
  447. vibe_surf/backend/frontend/assets/cloud-drizzle-B0XQktr3.js +6 -0
  448. vibe_surf/backend/frontend/assets/cloud-fog-Bt7bjAbr.js +6 -0
  449. vibe_surf/backend/frontend/assets/cloud-hail-rqT8jB3i.js +6 -0
  450. vibe_surf/backend/frontend/assets/cloud-lightning-BBVTdh3m.js +6 -0
  451. vibe_surf/backend/frontend/assets/cloud-moon-R-fj3ojz.js +6 -0
  452. vibe_surf/backend/frontend/assets/cloud-moon-rain-yqxneI3M.js +6 -0
  453. vibe_surf/backend/frontend/assets/cloud-off-yg-ZE-_Q.js +6 -0
  454. vibe_surf/backend/frontend/assets/cloud-rain-ChHLGe1p.js +6 -0
  455. vibe_surf/backend/frontend/assets/cloud-rain-wind-JR4JcS7C.js +6 -0
  456. vibe_surf/backend/frontend/assets/cloud-snow-Cybax_co.js +6 -0
  457. vibe_surf/backend/frontend/assets/cloud-sun-DkBED-mU.js +6 -0
  458. vibe_surf/backend/frontend/assets/cloud-sun-rain-B5_9ukkr.js +6 -0
  459. vibe_surf/backend/frontend/assets/cloud-upload-Cu4ieVcA.js +6 -0
  460. vibe_surf/backend/frontend/assets/cloudy-BfAjnn1H.js +6 -0
  461. vibe_surf/backend/frontend/assets/clover-Nay_aOR-.js +6 -0
  462. vibe_surf/backend/frontend/assets/club-Wma0dWBT.js +6 -0
  463. vibe_surf/backend/frontend/assets/code-xml-JRyiBJKX.js +6 -0
  464. vibe_surf/backend/frontend/assets/codepen-Db89gVRb.js +6 -0
  465. vibe_surf/backend/frontend/assets/codesandbox-6Bi0nwFB.js +6 -0
  466. vibe_surf/backend/frontend/assets/coffee-BUZkk2WM.js +6 -0
  467. vibe_surf/backend/frontend/assets/cog-BlUy4pJ6.js +6 -0
  468. vibe_surf/backend/frontend/assets/coins-Bx_bjmVj.js +6 -0
  469. vibe_surf/backend/frontend/assets/columns-2-BQVZlGLr.js +6 -0
  470. vibe_surf/backend/frontend/assets/columns-3-SW5AYOfS.js +6 -0
  471. vibe_surf/backend/frontend/assets/columns-3-cog-etTCUk7U.js +6 -0
  472. vibe_surf/backend/frontend/assets/columns-4-BPpIDoQv.js +6 -0
  473. vibe_surf/backend/frontend/assets/combine-DAkv3eQ-.js +6 -0
  474. vibe_surf/backend/frontend/assets/command-BCh8jDkv.js +6 -0
  475. vibe_surf/backend/frontend/assets/compass-B9ZnFYhL.js +6 -0
  476. vibe_surf/backend/frontend/assets/component-B3rp8m52.js +6 -0
  477. vibe_surf/backend/frontend/assets/computer-DSXJ82Yq.js +6 -0
  478. vibe_surf/backend/frontend/assets/concierge-bell-08Utkgj4.js +6 -0
  479. vibe_surf/backend/frontend/assets/cone-CtuBXsg9.js +6 -0
  480. vibe_surf/backend/frontend/assets/construction-CW4jHft2.js +6 -0
  481. vibe_surf/backend/frontend/assets/contact-BEshHPpN.js +6 -0
  482. vibe_surf/backend/frontend/assets/contact-round-kvYdDXoY.js +6 -0
  483. vibe_surf/backend/frontend/assets/container-D0OTPthH.js +6 -0
  484. vibe_surf/backend/frontend/assets/contrast-DnkMkf-y.js +6 -0
  485. vibe_surf/backend/frontend/assets/cookie-CYld1ib8.js +6 -0
  486. vibe_surf/backend/frontend/assets/cooking-pot-r3byuDHj.js +6 -0
  487. vibe_surf/backend/frontend/assets/copy-BmO-mv3j.js +6 -0
  488. vibe_surf/backend/frontend/assets/copy-check-8SojR2n7.js +6 -0
  489. vibe_surf/backend/frontend/assets/copy-minus-BgbL-ezu.js +6 -0
  490. vibe_surf/backend/frontend/assets/copy-plus-pG8nJiZU.js +6 -0
  491. vibe_surf/backend/frontend/assets/copy-slash-7hvOeX3Q.js +6 -0
  492. vibe_surf/backend/frontend/assets/copy-x-DEPYUbh1.js +6 -0
  493. vibe_surf/backend/frontend/assets/copyleft-Ce67b9NQ.js +6 -0
  494. vibe_surf/backend/frontend/assets/copyright-BfKpdVBw.js +6 -0
  495. vibe_surf/backend/frontend/assets/corner-down-left-Dphkqh8j.js +6 -0
  496. vibe_surf/backend/frontend/assets/corner-down-right-Dq07c5k_.js +6 -0
  497. vibe_surf/backend/frontend/assets/corner-left-down-CxWh_26z.js +6 -0
  498. vibe_surf/backend/frontend/assets/corner-left-up-BLgQomz0.js +6 -0
  499. vibe_surf/backend/frontend/assets/corner-right-down-tYY2AfHr.js +6 -0
  500. vibe_surf/backend/frontend/assets/corner-right-up-Bj9fzWl1.js +6 -0
  501. vibe_surf/backend/frontend/assets/corner-up-left-m22RfGo1.js +6 -0
  502. vibe_surf/backend/frontend/assets/corner-up-right-CodaZCnS.js +6 -0
  503. vibe_surf/backend/frontend/assets/cpu-Bu0IGxWB.js +6 -0
  504. vibe_surf/backend/frontend/assets/creative-commons-j_bcx2B-.js +6 -0
  505. vibe_surf/backend/frontend/assets/credit-card-CIdSlGyt.js +6 -0
  506. vibe_surf/backend/frontend/assets/croissant-m9Tzpn6-.js +6 -0
  507. vibe_surf/backend/frontend/assets/crop-BT5n_BDw.js +6 -0
  508. vibe_surf/backend/frontend/assets/cross-WahXWLmu.js +6 -0
  509. vibe_surf/backend/frontend/assets/crosshair-Detaeusf.js +6 -0
  510. vibe_surf/backend/frontend/assets/crown-BIIqN4tU.js +6 -0
  511. vibe_surf/backend/frontend/assets/cuboid-COMWL8KE.js +6 -0
  512. vibe_surf/backend/frontend/assets/cup-soda-DHRt3-v6.js +6 -0
  513. vibe_surf/backend/frontend/assets/currency-B82qjXmb.js +6 -0
  514. vibe_surf/backend/frontend/assets/cylinder-CgY0_Sr-.js +6 -0
  515. vibe_surf/backend/frontend/assets/dam-TTB5VJyi.js +6 -0
  516. vibe_surf/backend/frontend/assets/database-CIFWjgNY.js +6 -0
  517. vibe_surf/backend/frontend/assets/database-backup-CvRH8XaW.js +6 -0
  518. vibe_surf/backend/frontend/assets/database-zap-CiKnHfeB.js +6 -0
  519. vibe_surf/backend/frontend/assets/decimals-arrow-left-BioOtsdm.js +6 -0
  520. vibe_surf/backend/frontend/assets/decimals-arrow-right-Cx4cszFW.js +6 -0
  521. vibe_surf/backend/frontend/assets/delete-BAdtbBtM.js +6 -0
  522. vibe_surf/backend/frontend/assets/dessert-DkIzBH7A.js +6 -0
  523. vibe_surf/backend/frontend/assets/diameter-CvVdrBrk.js +6 -0
  524. vibe_surf/backend/frontend/assets/diamond-BXgkzyFD.js +6 -0
  525. vibe_surf/backend/frontend/assets/diamond-minus-D79h5E4F.js +6 -0
  526. vibe_surf/backend/frontend/assets/diamond-percent-DFTgIUWX.js +6 -0
  527. vibe_surf/backend/frontend/assets/diamond-plus-C_6l6Egb.js +6 -0
  528. vibe_surf/backend/frontend/assets/dice-1-BYNZMiRy.js +6 -0
  529. vibe_surf/backend/frontend/assets/dice-2-BNbymABr.js +6 -0
  530. vibe_surf/backend/frontend/assets/dice-3-Dd1JuSvv.js +6 -0
  531. vibe_surf/backend/frontend/assets/dice-4-D8TCA-54.js +6 -0
  532. vibe_surf/backend/frontend/assets/dice-5-CUoUzy4y.js +6 -0
  533. vibe_surf/backend/frontend/assets/dice-6-B_kWm-vM.js +6 -0
  534. vibe_surf/backend/frontend/assets/dices-XLW7VfCr.js +6 -0
  535. vibe_surf/backend/frontend/assets/diff-R28hcSRc.js +6 -0
  536. vibe_surf/backend/frontend/assets/disc-2-C5DTPMUd.js +6 -0
  537. vibe_surf/backend/frontend/assets/disc-3-BtEvZMjh.js +6 -0
  538. vibe_surf/backend/frontend/assets/disc-CKAPWmCy.js +6 -0
  539. vibe_surf/backend/frontend/assets/disc-album-cuvuWfA9.js +6 -0
  540. vibe_surf/backend/frontend/assets/divide-BxQmQals.js +6 -0
  541. vibe_surf/backend/frontend/assets/dna-D0iYcnjp.js +6 -0
  542. vibe_surf/backend/frontend/assets/dna-off-ErTou38f.js +6 -0
  543. vibe_surf/backend/frontend/assets/dock-BkchtLNf.js +6 -0
  544. vibe_surf/backend/frontend/assets/dog-JA5MF7gp.js +6 -0
  545. vibe_surf/backend/frontend/assets/dollar-sign-S9eSDOrJ.js +6 -0
  546. vibe_surf/backend/frontend/assets/donut-BqRrNkvP.js +6 -0
  547. vibe_surf/backend/frontend/assets/door-closed-B-MrGb6q.js +6 -0
  548. vibe_surf/backend/frontend/assets/door-open-Br3vbfpG.js +6 -0
  549. vibe_surf/backend/frontend/assets/dot-DXfRbuM0.js +6 -0
  550. vibe_surf/backend/frontend/assets/drafting-compass-DMXHtO4G.js +6 -0
  551. vibe_surf/backend/frontend/assets/drama-Dubi2dNu.js +6 -0
  552. vibe_surf/backend/frontend/assets/dribbble-DOzityvb.js +6 -0
  553. vibe_surf/backend/frontend/assets/drill-BQ0EsUsX.js +6 -0
  554. vibe_surf/backend/frontend/assets/droplet-off-ButGxGdH.js +6 -0
  555. vibe_surf/backend/frontend/assets/droplet-son-_skj.js +6 -0
  556. vibe_surf/backend/frontend/assets/droplets-BZ2YfVSA.js +6 -0
  557. vibe_surf/backend/frontend/assets/drum-BQx6BFpe.js +6 -0
  558. vibe_surf/backend/frontend/assets/drumstick-3-rUtwNB.js +6 -0
  559. vibe_surf/backend/frontend/assets/dumbbell-BthFc0AJ.js +6 -0
  560. vibe_surf/backend/frontend/assets/ear-kW9YKHKv.js +6 -0
  561. vibe_surf/backend/frontend/assets/ear-off-C9aEMiZV.js +6 -0
  562. vibe_surf/backend/frontend/assets/earth-B5AfETae.js +6 -0
  563. vibe_surf/backend/frontend/assets/earth-lock-acG4NArC.js +6 -0
  564. vibe_surf/backend/frontend/assets/eclipse-JDjKYV0j.js +6 -0
  565. vibe_surf/backend/frontend/assets/egg-BJX5S-yO.js +6 -0
  566. vibe_surf/backend/frontend/assets/egg-fried-CzdJ94z0.js +6 -0
  567. vibe_surf/backend/frontend/assets/egg-off-DFZTyisV.js +6 -0
  568. vibe_surf/backend/frontend/assets/ellipsis-Do5QGxdF.js +6 -0
  569. vibe_surf/backend/frontend/assets/ellipsis-vertical-DL3lXNkl.js +6 -0
  570. vibe_surf/backend/frontend/assets/equal-CSbKMjR9.js +6 -0
  571. vibe_surf/backend/frontend/assets/equal-approximately-D-_zKTi0.js +6 -0
  572. vibe_surf/backend/frontend/assets/equal-not-BEN-hLun.js +6 -0
  573. vibe_surf/backend/frontend/assets/eraser-EqIxcp-G.js +6 -0
  574. vibe_surf/backend/frontend/assets/ethernet-port-Ctq9b8YM.js +6 -0
  575. vibe_surf/backend/frontend/assets/euro-CUlQSiXf.js +6 -0
  576. vibe_surf/backend/frontend/assets/expand-LQdF_-l7.js +6 -0
  577. vibe_surf/backend/frontend/assets/eye-B14urkBb.js +6 -0
  578. vibe_surf/backend/frontend/assets/eye-closed-BpcKXvvZ.js +6 -0
  579. vibe_surf/backend/frontend/assets/eye-off-B-I1bzN-.js +6 -0
  580. vibe_surf/backend/frontend/assets/facebook-DMySCi-p.js +6 -0
  581. vibe_surf/backend/frontend/assets/factory-Bd6MRr0-.js +6 -0
  582. vibe_surf/backend/frontend/assets/fan-tVwUdYtX.js +6 -0
  583. vibe_surf/backend/frontend/assets/fast-forward-CY4W38Jf.js +6 -0
  584. vibe_surf/backend/frontend/assets/feather-C553H-qS.js +6 -0
  585. vibe_surf/backend/frontend/assets/fence-BJNMd5m7.js +6 -0
  586. vibe_surf/backend/frontend/assets/ferris-wheel-oHPMJGEQ.js +6 -0
  587. vibe_surf/backend/frontend/assets/figma-C9tPiFb3.js +6 -0
  588. vibe_surf/backend/frontend/assets/file-AzAzVrMs.js +6 -0
  589. vibe_surf/backend/frontend/assets/file-archive-CIMp0jPK.js +6 -0
  590. vibe_surf/backend/frontend/assets/file-audio-2-D6PqsNui.js +6 -0
  591. vibe_surf/backend/frontend/assets/file-audio-B3MBbrsx.js +6 -0
  592. vibe_surf/backend/frontend/assets/file-axis-3d-CAs3JLL4.js +6 -0
  593. vibe_surf/backend/frontend/assets/file-badge-2-BigpxEa4.js +6 -0
  594. vibe_surf/backend/frontend/assets/file-badge-DxxBNe6I.js +6 -0
  595. vibe_surf/backend/frontend/assets/file-box-CFM_ZS8C.js +6 -0
  596. vibe_surf/backend/frontend/assets/file-chart-column-DW7tDtSF.js +6 -0
  597. vibe_surf/backend/frontend/assets/file-chart-column-increasing-Dqw2rkcp.js +6 -0
  598. vibe_surf/backend/frontend/assets/file-chart-line-B55e6iQr.js +6 -0
  599. vibe_surf/backend/frontend/assets/file-chart-pie-bx6xE3zh.js +6 -0
  600. vibe_surf/backend/frontend/assets/file-check-2-O19xL6zZ.js +6 -0
  601. vibe_surf/backend/frontend/assets/file-check-BW8E_U7M.js +6 -0
  602. vibe_surf/backend/frontend/assets/file-clock-CJ7TCW3g.js +6 -0
  603. vibe_surf/backend/frontend/assets/file-code-2-IWdjGkQV.js +6 -0
  604. vibe_surf/backend/frontend/assets/file-code-C8Cb2eAQ.js +6 -0
  605. vibe_surf/backend/frontend/assets/file-cog-D7zwEbXQ.js +6 -0
  606. vibe_surf/backend/frontend/assets/file-diff-Cd4QjfxS.js +6 -0
  607. vibe_surf/backend/frontend/assets/file-digit-D4o35Lws.js +6 -0
  608. vibe_surf/backend/frontend/assets/file-down-CvhBfQai.js +6 -0
  609. vibe_surf/backend/frontend/assets/file-heart-SAbeQl04.js +6 -0
  610. vibe_surf/backend/frontend/assets/file-image-n3F2ES2d.js +6 -0
  611. vibe_surf/backend/frontend/assets/file-input-BF2fJ0HZ.js +6 -0
  612. vibe_surf/backend/frontend/assets/file-json-2-CHFMlqRM.js +6 -0
  613. vibe_surf/backend/frontend/assets/file-json-GQx3fsvD.js +6 -0
  614. vibe_surf/backend/frontend/assets/file-key-2-D4vSersB.js +6 -0
  615. vibe_surf/backend/frontend/assets/file-key-DoCfAot9.js +6 -0
  616. vibe_surf/backend/frontend/assets/file-lock-2-D5yc4s9S.js +6 -0
  617. vibe_surf/backend/frontend/assets/file-lock-fbh0rbzY.js +6 -0
  618. vibe_surf/backend/frontend/assets/file-minus-2-jZ3pDR5C.js +6 -0
  619. vibe_surf/backend/frontend/assets/file-minus-uXOKmAYW.js +6 -0
  620. vibe_surf/backend/frontend/assets/file-music-YA3-0ItN.js +6 -0
  621. vibe_surf/backend/frontend/assets/file-output-CXDuHwjv.js +6 -0
  622. vibe_surf/backend/frontend/assets/file-pen-B16K0rIH.js +6 -0
  623. vibe_surf/backend/frontend/assets/file-pen-line-Dec_HNbe.js +6 -0
  624. vibe_surf/backend/frontend/assets/file-plus-2-Wj25GYBI.js +6 -0
  625. vibe_surf/backend/frontend/assets/file-plus-Bv2RaOy_.js +6 -0
  626. vibe_surf/backend/frontend/assets/file-question-CBnhbTUy.js +6 -0
  627. vibe_surf/backend/frontend/assets/file-scan-C4l__2lp.js +6 -0
  628. vibe_surf/backend/frontend/assets/file-search-2-B_BQLrOO.js +6 -0
  629. vibe_surf/backend/frontend/assets/file-search-igYKSOot.js +6 -0
  630. vibe_surf/backend/frontend/assets/file-sliders-BC6jqY7m.js +6 -0
  631. vibe_surf/backend/frontend/assets/file-spreadsheet-8zeuwOFy.js +6 -0
  632. vibe_surf/backend/frontend/assets/file-stack-CEbrflgS.js +6 -0
  633. vibe_surf/backend/frontend/assets/file-symlink-Ce64x_q-.js +6 -0
  634. vibe_surf/backend/frontend/assets/file-terminal-DEMjlYPH.js +6 -0
  635. vibe_surf/backend/frontend/assets/file-text-qsRAxrKg.js +6 -0
  636. vibe_surf/backend/frontend/assets/file-type-2-rdAUx0k-.js +6 -0
  637. vibe_surf/backend/frontend/assets/file-type-Bo0mvnlr.js +6 -0
  638. vibe_surf/backend/frontend/assets/file-up-ChCUFvtC.js +6 -0
  639. vibe_surf/backend/frontend/assets/file-user-DeJOcc6w.js +6 -0
  640. vibe_surf/backend/frontend/assets/file-video-2-NeLUHxWj.js +6 -0
  641. vibe_surf/backend/frontend/assets/file-video-M49YI2mS.js +6 -0
  642. vibe_surf/backend/frontend/assets/file-volume-2-Bde2Kb7U.js +6 -0
  643. vibe_surf/backend/frontend/assets/file-volume-up1R-zQ1.js +6 -0
  644. vibe_surf/backend/frontend/assets/file-warning-DNllVKxU.js +6 -0
  645. vibe_surf/backend/frontend/assets/file-x-2-CHaW7ofd.js +6 -0
  646. vibe_surf/backend/frontend/assets/file-x-Ct2jUMMo.js +6 -0
  647. vibe_surf/backend/frontend/assets/files-CvndfhQ4.js +6 -0
  648. vibe_surf/backend/frontend/assets/film-y1VzEOGa.js +6 -0
  649. vibe_surf/backend/frontend/assets/fingerprint-BI6dfzhE.js +6 -0
  650. vibe_surf/backend/frontend/assets/fire-extinguisher--s4lJQsf.js +6 -0
  651. vibe_surf/backend/frontend/assets/fish-off-D3GNjlTn.js +6 -0
  652. vibe_surf/backend/frontend/assets/fish-s2So_Zeq.js +6 -0
  653. vibe_surf/backend/frontend/assets/fish-symbol-CYjqO11h.js +6 -0
  654. vibe_surf/backend/frontend/assets/flag-C27BL99d.js +6 -0
  655. vibe_surf/backend/frontend/assets/flag-off-CMKWJ8l8.js +6 -0
  656. vibe_surf/backend/frontend/assets/flag-triangle-left-B0Zzobci.js +6 -0
  657. vibe_surf/backend/frontend/assets/flag-triangle-right-BYX5OyAO.js +6 -0
  658. vibe_surf/backend/frontend/assets/flame-BZdffZJx.js +6 -0
  659. vibe_surf/backend/frontend/assets/flame-kindling-B1qjw-qo.js +6 -0
  660. vibe_surf/backend/frontend/assets/flashlight-D7kNRs0V.js +6 -0
  661. vibe_surf/backend/frontend/assets/flashlight-off-Dc1MMZFO.js +6 -0
  662. vibe_surf/backend/frontend/assets/flask-conical-ChF2JmZu.js +6 -0
  663. vibe_surf/backend/frontend/assets/flask-conical-off-DegTh8gS.js +6 -0
  664. vibe_surf/backend/frontend/assets/flask-round-CK1-Ik6i.js +6 -0
  665. vibe_surf/backend/frontend/assets/flip-horizontal-2-Dn8i_KV0.js +6 -0
  666. vibe_surf/backend/frontend/assets/flip-horizontal-CuVvaraZ.js +6 -0
  667. vibe_surf/backend/frontend/assets/flip-vertical-2-rFYdErLA.js +6 -0
  668. vibe_surf/backend/frontend/assets/flip-vertical-B90WGgH0.js +6 -0
  669. vibe_surf/backend/frontend/assets/flower-2-C_TT89UG.js +6 -0
  670. vibe_surf/backend/frontend/assets/flower-CO6QACmS.js +6 -0
  671. vibe_surf/backend/frontend/assets/focus-D26Oa74J.js +6 -0
  672. vibe_surf/backend/frontend/assets/fold-horizontal-CBIHGZ0q.js +6 -0
  673. vibe_surf/backend/frontend/assets/fold-vertical-CD7tvqYt.js +6 -0
  674. vibe_surf/backend/frontend/assets/folder-Cf5LgRi0.js +6 -0
  675. vibe_surf/backend/frontend/assets/folder-archive-eaqS6DPc.js +6 -0
  676. vibe_surf/backend/frontend/assets/folder-check-BKYRcZZr.js +6 -0
  677. vibe_surf/backend/frontend/assets/folder-clock-DfstD_8t.js +6 -0
  678. vibe_surf/backend/frontend/assets/folder-closed-CQt1KGRd.js +6 -0
  679. vibe_surf/backend/frontend/assets/folder-code-D-UAjp3e.js +6 -0
  680. vibe_surf/backend/frontend/assets/folder-cog-8jmE8SgB.js +6 -0
  681. vibe_surf/backend/frontend/assets/folder-dot-BCaqBqPg.js +6 -0
  682. vibe_surf/backend/frontend/assets/folder-down-DRl1_ZDB.js +6 -0
  683. vibe_surf/backend/frontend/assets/folder-git-2-DctBKaC9.js +6 -0
  684. vibe_surf/backend/frontend/assets/folder-git-CgxiRK0t.js +6 -0
  685. vibe_surf/backend/frontend/assets/folder-heart-D6REuieU.js +6 -0
  686. vibe_surf/backend/frontend/assets/folder-input-C12iWWhu.js +6 -0
  687. vibe_surf/backend/frontend/assets/folder-kanban-GZtaS_8J.js +6 -0
  688. vibe_surf/backend/frontend/assets/folder-key-afzRqgkz.js +6 -0
  689. vibe_surf/backend/frontend/assets/folder-lock-BcLNHqg8.js +6 -0
  690. vibe_surf/backend/frontend/assets/folder-minus-CvtpPjpU.js +6 -0
  691. vibe_surf/backend/frontend/assets/folder-open-DupkgJt1.js +6 -0
  692. vibe_surf/backend/frontend/assets/folder-open-dot-Cxfuxe--.js +6 -0
  693. vibe_surf/backend/frontend/assets/folder-output-Cg4BpiEV.js +6 -0
  694. vibe_surf/backend/frontend/assets/folder-pen-DwS7aPNO.js +6 -0
  695. vibe_surf/backend/frontend/assets/folder-plus-2lTMhR3O.js +6 -0
  696. vibe_surf/backend/frontend/assets/folder-root-C8WxCnE2.js +6 -0
  697. vibe_surf/backend/frontend/assets/folder-search-2-Ci-RbLN6.js +6 -0
  698. vibe_surf/backend/frontend/assets/folder-search-DrXJcjXi.js +6 -0
  699. vibe_surf/backend/frontend/assets/folder-symlink-BnpH1nVs.js +6 -0
  700. vibe_surf/backend/frontend/assets/folder-sync-C8-HdePM.js +6 -0
  701. vibe_surf/backend/frontend/assets/folder-tree-CqSaz8mh.js +6 -0
  702. vibe_surf/backend/frontend/assets/folder-up-s-mV4gUm.js +6 -0
  703. vibe_surf/backend/frontend/assets/folder-x-DyHE15uU.js +6 -0
  704. vibe_surf/backend/frontend/assets/folders-BsPXE9jo.js +6 -0
  705. vibe_surf/backend/frontend/assets/footprints-D-XXhokZ.js +6 -0
  706. vibe_surf/backend/frontend/assets/forklift-MYwqGUlF.js +6 -0
  707. vibe_surf/backend/frontend/assets/forward-0FCU5gw7.js +6 -0
  708. vibe_surf/backend/frontend/assets/frame-D8alLdea.js +6 -0
  709. vibe_surf/backend/frontend/assets/framer-DNjQaa1J.js +6 -0
  710. vibe_surf/backend/frontend/assets/frown-BE0OTdKG.js +6 -0
  711. vibe_surf/backend/frontend/assets/fuel-mXmAr8TO.js +6 -0
  712. vibe_surf/backend/frontend/assets/fullscreen-NqXN2Xu7.js +6 -0
  713. vibe_surf/backend/frontend/assets/funnel-DC0c1Jih.js +6 -0
  714. vibe_surf/backend/frontend/assets/funnel-plus-Doo-nNYi.js +6 -0
  715. vibe_surf/backend/frontend/assets/funnel-x-BkmZkEbi.js +6 -0
  716. vibe_surf/backend/frontend/assets/gallery-horizontal-BaQJYKLC.js +6 -0
  717. vibe_surf/backend/frontend/assets/gallery-horizontal-end-BWNtYXQf.js +6 -0
  718. vibe_surf/backend/frontend/assets/gallery-thumbnails-4tJCu6Bt.js +6 -0
  719. vibe_surf/backend/frontend/assets/gallery-vertical-end-F0Ry7RoI.js +6 -0
  720. vibe_surf/backend/frontend/assets/gallery-vertical-gD2KGFqY.js +6 -0
  721. vibe_surf/backend/frontend/assets/gamepad-2-DBi5t2On.js +6 -0
  722. vibe_surf/backend/frontend/assets/gamepad-8df6ey2A.js +6 -0
  723. vibe_surf/backend/frontend/assets/gauge-BKZLQcLt.js +6 -0
  724. vibe_surf/backend/frontend/assets/gavel-CLgRmYF8.js +6 -0
  725. vibe_surf/backend/frontend/assets/gem-M00EoNdV.js +6 -0
  726. vibe_surf/backend/frontend/assets/ghost-CEfBnyKY.js +6 -0
  727. vibe_surf/backend/frontend/assets/gift-BjGURCYr.js +6 -0
  728. vibe_surf/backend/frontend/assets/git-branch-BOK0DnKM.js +6 -0
  729. vibe_surf/backend/frontend/assets/git-branch-plus-Duz02qvz.js +6 -0
  730. vibe_surf/backend/frontend/assets/git-commit-horizontal-DXh9abTq.js +6 -0
  731. vibe_surf/backend/frontend/assets/git-commit-vertical-8IUR92zC.js +6 -0
  732. vibe_surf/backend/frontend/assets/git-compare-Bbxv-OD3.js +6 -0
  733. vibe_surf/backend/frontend/assets/git-compare-arrows-ULo-Y57B.js +6 -0
  734. vibe_surf/backend/frontend/assets/git-fork-wi2CvjEp.js +6 -0
  735. vibe_surf/backend/frontend/assets/git-graph-CWjPQ35V.js +6 -0
  736. vibe_surf/backend/frontend/assets/git-merge-BhyoIeLJ.js +6 -0
  737. vibe_surf/backend/frontend/assets/git-pull-request-BLS97ZSf.js +6 -0
  738. vibe_surf/backend/frontend/assets/git-pull-request-arrow-DNZCE5xe.js +6 -0
  739. vibe_surf/backend/frontend/assets/git-pull-request-closed-8STT9TyU.js +6 -0
  740. vibe_surf/backend/frontend/assets/git-pull-request-create-DR3c4qrX.js +6 -0
  741. vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-BOgAjTFS.js +6 -0
  742. vibe_surf/backend/frontend/assets/git-pull-request-draft-D_pN85AJ.js +6 -0
  743. vibe_surf/backend/frontend/assets/github-DB1aZt0L.js +6 -0
  744. vibe_surf/backend/frontend/assets/gitlab-BMP4NP3r.js +6 -0
  745. vibe_surf/backend/frontend/assets/glass-water-BEC0MS3z.js +6 -0
  746. vibe_surf/backend/frontend/assets/glasses-CfTHXtX7.js +6 -0
  747. vibe_surf/backend/frontend/assets/globe-Dqq-nhcy.js +6 -0
  748. vibe_surf/backend/frontend/assets/globe-lock-BfeWqRWO.js +6 -0
  749. vibe_surf/backend/frontend/assets/goal-C-PhIQ4S.js +6 -0
  750. vibe_surf/backend/frontend/assets/grab-DdIFtKhV.js +6 -0
  751. vibe_surf/backend/frontend/assets/graduation-cap-CwxzapTt.js +6 -0
  752. vibe_surf/backend/frontend/assets/grape-BrXELEz9.js +6 -0
  753. vibe_surf/backend/frontend/assets/grid-2x2-D8v9ysk4.js +6 -0
  754. vibe_surf/backend/frontend/assets/grid-2x2-check-CSZSWQ5C.js +6 -0
  755. vibe_surf/backend/frontend/assets/grid-2x2-plus-01llG4f2.js +6 -0
  756. vibe_surf/backend/frontend/assets/grid-2x2-x-D0_11tKc.js +6 -0
  757. vibe_surf/backend/frontend/assets/grid-3x3-CquAt5Fe.js +6 -0
  758. vibe_surf/backend/frontend/assets/grip-DzkE91_C.js +6 -0
  759. vibe_surf/backend/frontend/assets/grip-horizontal-9smTJuh8.js +6 -0
  760. vibe_surf/backend/frontend/assets/grip-vertical-BazF71zy.js +6 -0
  761. vibe_surf/backend/frontend/assets/group-DJPqVGM9.js +6 -0
  762. vibe_surf/backend/frontend/assets/guitar-Bj7040UW.js +6 -0
  763. vibe_surf/backend/frontend/assets/ham-DqF9nY3K.js +6 -0
  764. vibe_surf/backend/frontend/assets/hammer-D5nCkk93.js +6 -0
  765. vibe_surf/backend/frontend/assets/hand-D3aHt5Jp.js +6 -0
  766. vibe_surf/backend/frontend/assets/hand-coins-DgGrUIw3.js +6 -0
  767. vibe_surf/backend/frontend/assets/hand-heart-D-ejt1w9.js +6 -0
  768. vibe_surf/backend/frontend/assets/hand-helping-BJx7aYP8.js +6 -0
  769. vibe_surf/backend/frontend/assets/hand-metal-D_9PgLDn.js +6 -0
  770. vibe_surf/backend/frontend/assets/hand-platter-B6MPED_R.js +6 -0
  771. vibe_surf/backend/frontend/assets/handshake-5mCL50jm.js +6 -0
  772. vibe_surf/backend/frontend/assets/hard-drive-D06Pr4Fr.js +6 -0
  773. vibe_surf/backend/frontend/assets/hard-drive-download-DV7i6zaz.js +6 -0
  774. vibe_surf/backend/frontend/assets/hard-drive-upload-qc50ymdt.js +6 -0
  775. vibe_surf/backend/frontend/assets/hard-hat-BHAORALK.js +6 -0
  776. vibe_surf/backend/frontend/assets/hash-DTUBYWfA.js +6 -0
  777. vibe_surf/backend/frontend/assets/haze-VZL9k3sN.js +6 -0
  778. vibe_surf/backend/frontend/assets/hdmi-port-De943wKH.js +6 -0
  779. vibe_surf/backend/frontend/assets/heading-1-BYwnxWwH.js +6 -0
  780. vibe_surf/backend/frontend/assets/heading-2-CqPhfYl0.js +6 -0
  781. vibe_surf/backend/frontend/assets/heading-3-CANI8m_-.js +6 -0
  782. vibe_surf/backend/frontend/assets/heading-4-BeqLaVrS.js +6 -0
  783. vibe_surf/backend/frontend/assets/heading-5-EhtPwD0Y.js +6 -0
  784. vibe_surf/backend/frontend/assets/heading-6-CzA0Vq0D.js +6 -0
  785. vibe_surf/backend/frontend/assets/heading-COny31IM.js +6 -0
  786. vibe_surf/backend/frontend/assets/headphone-off-XcT4H0Th.js +6 -0
  787. vibe_surf/backend/frontend/assets/headphones-INSavdLi.js +6 -0
  788. vibe_surf/backend/frontend/assets/headset-D46LhOQp.js +6 -0
  789. vibe_surf/backend/frontend/assets/heart-CnQaegyS.js +6 -0
  790. vibe_surf/backend/frontend/assets/heart-crack-CSaApcMZ.js +6 -0
  791. vibe_surf/backend/frontend/assets/heart-handshake-gpn_t0P6.js +6 -0
  792. vibe_surf/backend/frontend/assets/heart-minus-ByA4Xc3z.js +6 -0
  793. vibe_surf/backend/frontend/assets/heart-off-BaAxT8OM.js +6 -0
  794. vibe_surf/backend/frontend/assets/heart-plus-DsNgHyPq.js +6 -0
  795. vibe_surf/backend/frontend/assets/heart-pulse-mu0bRWr9.js +6 -0
  796. vibe_surf/backend/frontend/assets/heater-BZJRpXix.js +6 -0
  797. vibe_surf/backend/frontend/assets/hexagon-BOkIK8t8.js +6 -0
  798. vibe_surf/backend/frontend/assets/highlighter-BFjuqmg3.js +6 -0
  799. vibe_surf/backend/frontend/assets/history-Dc5zUj7o.js +6 -0
  800. vibe_surf/backend/frontend/assets/hop-BP2c2w0o.js +6 -0
  801. vibe_surf/backend/frontend/assets/hop-off-DvtutUIk.js +6 -0
  802. vibe_surf/backend/frontend/assets/hospital-CnB07zSL.js +6 -0
  803. vibe_surf/backend/frontend/assets/hotel-DcrYKMCA.js +6 -0
  804. vibe_surf/backend/frontend/assets/hourglass-5XoIreir.js +6 -0
  805. vibe_surf/backend/frontend/assets/house-7K0Log2X.js +6 -0
  806. vibe_surf/backend/frontend/assets/house-plug-BpGlsdom.js +6 -0
  807. vibe_surf/backend/frontend/assets/house-plus-CZa5w2xG.js +6 -0
  808. vibe_surf/backend/frontend/assets/house-wifi-D7WgCkxh.js +6 -0
  809. vibe_surf/backend/frontend/assets/ice-cream-bowl-CVO-vDDu.js +6 -0
  810. vibe_surf/backend/frontend/assets/ice-cream-cone-Be2L7luj.js +6 -0
  811. vibe_surf/backend/frontend/assets/id-card-DuJWEfZ1.js +6 -0
  812. vibe_surf/backend/frontend/assets/image-BHKjD-UF.js +6 -0
  813. vibe_surf/backend/frontend/assets/image-down-BxsvaSTP.js +6 -0
  814. vibe_surf/backend/frontend/assets/image-minus-BTyo6N_c.js +6 -0
  815. vibe_surf/backend/frontend/assets/image-off-CYgis6fN.js +6 -0
  816. vibe_surf/backend/frontend/assets/image-play-BH02lW6y.js +6 -0
  817. vibe_surf/backend/frontend/assets/image-plus-_CPkoXgl.js +6 -0
  818. vibe_surf/backend/frontend/assets/image-up-Ck7H6ALp.js +6 -0
  819. vibe_surf/backend/frontend/assets/image-upscale-BKY8Ql1Y.js +6 -0
  820. vibe_surf/backend/frontend/assets/images-C7PaOMX8.js +6 -0
  821. vibe_surf/backend/frontend/assets/import-XtX00yjR.js +6 -0
  822. vibe_surf/backend/frontend/assets/inbox-CHp1G1Tn.js +6 -0
  823. vibe_surf/backend/frontend/assets/indent-decrease-DTtNKMfY.js +6 -0
  824. vibe_surf/backend/frontend/assets/indent-increase-DInW8D_x.js +6 -0
  825. vibe_surf/backend/frontend/assets/index-1QRDbRlx.js +1 -0
  826. vibe_surf/backend/frontend/assets/index-2WLZ-LFU.js +1 -0
  827. vibe_surf/backend/frontend/assets/index-41veksKc.js +1 -0
  828. vibe_surf/backend/frontend/assets/index-9d3lQ4Wj.js +1 -0
  829. vibe_surf/backend/frontend/assets/index-A-NnAKzY.js +1 -0
  830. vibe_surf/backend/frontend/assets/index-B0uEIchy.js +1 -0
  831. vibe_surf/backend/frontend/assets/index-B6ckts6e.js +1 -0
  832. vibe_surf/backend/frontend/assets/index-B8eJzoCm.js +1 -0
  833. vibe_surf/backend/frontend/assets/index-BAjcuT2A.js +1 -0
  834. vibe_surf/backend/frontend/assets/index-BDpVuW9l.js +1 -0
  835. vibe_surf/backend/frontend/assets/index-BEzSx8JL.js +1 -0
  836. vibe_surf/backend/frontend/assets/index-BFZ6c4-2.js +1 -0
  837. vibe_surf/backend/frontend/assets/index-BHwpyLDU.js +1 -0
  838. vibe_surf/backend/frontend/assets/index-BJzwrRH0.js +1 -0
  839. vibe_surf/backend/frontend/assets/index-BKwrPgkD.js +1 -0
  840. vibe_surf/backend/frontend/assets/index-BLAOHAiB.js +1 -0
  841. vibe_surf/backend/frontend/assets/index-BMJN1BeZ.js +1 -0
  842. vibe_surf/backend/frontend/assets/index-BM_pQz6b.js +1 -0
  843. vibe_surf/backend/frontend/assets/index-BNGDVeR7.js +1 -0
  844. vibe_surf/backend/frontend/assets/index-BO1wzOz3.js +1 -0
  845. vibe_surf/backend/frontend/assets/index-BPwUN4EA.js +1 -0
  846. vibe_surf/backend/frontend/assets/index-BUpWUGFt.js +1 -0
  847. vibe_surf/backend/frontend/assets/index-BVOgCkqk.js +1 -0
  848. vibe_surf/backend/frontend/assets/index-BX8uYJvf.js +1 -0
  849. vibe_surf/backend/frontend/assets/index-BXwmSa5j.js +1 -0
  850. vibe_surf/backend/frontend/assets/index-BY5nAT18.js +1 -0
  851. vibe_surf/backend/frontend/assets/index-BZsjXFd9.js +1 -0
  852. vibe_surf/backend/frontend/assets/index-BaQ12pVy.js +1 -0
  853. vibe_surf/backend/frontend/assets/index-Bdh85PFk.js +1 -0
  854. vibe_surf/backend/frontend/assets/index-BdxAovDe.js +1 -0
  855. vibe_surf/backend/frontend/assets/index-BevOJcfm.js +1 -0
  856. vibe_surf/backend/frontend/assets/index-BhbPDv-7.js +20 -0
  857. vibe_surf/backend/frontend/assets/index-Bi2_nzSq.js +1 -0
  858. vibe_surf/backend/frontend/assets/index-BjuAKp39.js +1 -0
  859. vibe_surf/backend/frontend/assets/index-BkWReKus.js +1 -0
  860. vibe_surf/backend/frontend/assets/index-BlT0iN5E.css +1 -0
  861. vibe_surf/backend/frontend/assets/index-Bn_YwEX1.js +1 -0
  862. vibe_surf/backend/frontend/assets/index-BopyFI9_.js +1 -0
  863. vibe_surf/backend/frontend/assets/index-Bq-mBfcp.js +205 -0
  864. vibe_surf/backend/frontend/assets/index-BtNGro4J.js +1 -0
  865. vibe_surf/backend/frontend/assets/index-BtRUEqM8.js +1 -0
  866. vibe_surf/backend/frontend/assets/index-BvcS9R2I.js +1 -0
  867. vibe_surf/backend/frontend/assets/index-ByRMlFrn.js +1 -0
  868. vibe_surf/backend/frontend/assets/index-ByweJ-ba.js +1 -0
  869. vibe_surf/backend/frontend/assets/index-C-CvySwp.js +1 -0
  870. vibe_surf/backend/frontend/assets/index-C3Yoqcx6.js +2 -0
  871. vibe_surf/backend/frontend/assets/index-C3xUW7lX.js +1 -0
  872. vibe_surf/backend/frontend/assets/index-C6oR7Fin.js +1 -0
  873. vibe_surf/backend/frontend/assets/index-C6punO8E.js +1 -0
  874. vibe_surf/backend/frontend/assets/index-C7fGwI5N.js +1 -0
  875. vibe_surf/backend/frontend/assets/index-C9339APM.js +7427 -0
  876. vibe_surf/backend/frontend/assets/index-CAFKIjNb.js +1 -0
  877. vibe_surf/backend/frontend/assets/index-CEGDW591.js +1 -0
  878. vibe_surf/backend/frontend/assets/index-CGzeT9Yq.js +1 -0
  879. vibe_surf/backend/frontend/assets/index-CH-Snzdw.js +1 -0
  880. vibe_surf/backend/frontend/assets/index-CIFNJDFM.js +2723 -0
  881. vibe_surf/backend/frontend/assets/index-CNHcFn3X.js +1 -0
  882. vibe_surf/backend/frontend/assets/index-CP_bbwDH.js +1 -0
  883. vibe_surf/backend/frontend/assets/index-CQVSfKD9.js +1 -0
  884. vibe_surf/backend/frontend/assets/index-CaWx5V5s.js +1 -0
  885. vibe_surf/backend/frontend/assets/index-Cb0tGz07.js +1 -0
  886. vibe_surf/backend/frontend/assets/index-CbHKDInE.js +1 -0
  887. vibe_surf/backend/frontend/assets/index-CePGA63r.js +1 -0
  888. vibe_surf/backend/frontend/assets/index-CfUNPxF7.js +1 -0
  889. vibe_surf/backend/frontend/assets/index-CpUW-lWU.js +1 -0
  890. vibe_surf/backend/frontend/assets/index-Cscpd5G3.js +1 -0
  891. vibe_surf/backend/frontend/assets/index-Ct7oS9uE.js +1 -0
  892. vibe_surf/backend/frontend/assets/index-Cx_W-gua.js +1 -0
  893. vibe_surf/backend/frontend/assets/index-D-gd0ZjH.js +1 -0
  894. vibe_surf/backend/frontend/assets/index-D1366-Ey.js +1 -0
  895. vibe_surf/backend/frontend/assets/index-D1Rf-jZG.js +1 -0
  896. vibe_surf/backend/frontend/assets/index-D2RFrg2r.js +1 -0
  897. vibe_surf/backend/frontend/assets/index-D3_azQSf.js +108 -0
  898. vibe_surf/backend/frontend/assets/index-D5eASxXP.js +1 -0
  899. vibe_surf/backend/frontend/assets/index-D9fl0TdK.js +1 -0
  900. vibe_surf/backend/frontend/assets/index-DCiLjNmU.js +1 -0
  901. vibe_surf/backend/frontend/assets/index-DCxdgdvG.js +1 -0
  902. vibe_surf/backend/frontend/assets/index-DGXaF1oB.js +1 -0
  903. vibe_surf/backend/frontend/assets/index-DHy7kSom.js +1 -0
  904. vibe_surf/backend/frontend/assets/index-DKH6KC9o.js +1 -0
  905. vibe_surf/backend/frontend/assets/index-DKjZ06Bc.js +1 -0
  906. vibe_surf/backend/frontend/assets/index-DQ5b8TQ5.js +1 -0
  907. vibe_surf/backend/frontend/assets/index-DQPs4Zqk.js +1 -0
  908. vibe_surf/backend/frontend/assets/index-DSykqFxk.js +13 -0
  909. vibe_surf/backend/frontend/assets/index-DVXnylY4.js +1 -0
  910. vibe_surf/backend/frontend/assets/index-DWberIXV.js +1 -0
  911. vibe_surf/backend/frontend/assets/index-DWq2xFSF.js +1 -0
  912. vibe_surf/backend/frontend/assets/index-DWrrUV4U.js +1 -0
  913. vibe_surf/backend/frontend/assets/index-DXK7n3cr.js +1 -0
  914. vibe_surf/backend/frontend/assets/index-DYtHFNkM.js +1 -0
  915. vibe_surf/backend/frontend/assets/index-D_v35WKd.js +1 -0
  916. vibe_surf/backend/frontend/assets/index-Dbs5qCFv.js +1 -0
  917. vibe_surf/backend/frontend/assets/index-DcdjKErJ.js +1 -0
  918. vibe_surf/backend/frontend/assets/index-DeGB92Vc.js +1 -0
  919. vibe_surf/backend/frontend/assets/index-DfkDcbqO.js +1 -0
  920. vibe_surf/backend/frontend/assets/index-Dg5uvyoa.js +1 -0
  921. vibe_surf/backend/frontend/assets/index-DjuYMrz5.js +1 -0
  922. vibe_surf/backend/frontend/assets/index-Djz3krhV.js +1 -0
  923. vibe_surf/backend/frontend/assets/index-DtEKUsaA.js +1 -0
  924. vibe_surf/backend/frontend/assets/index-DtKEeqjg.js +1 -0
  925. vibe_surf/backend/frontend/assets/index-DtO-Tei2.js +1 -0
  926. vibe_surf/backend/frontend/assets/index-DuMKqLcc.js +1 -0
  927. vibe_surf/backend/frontend/assets/index-DwqWXmr0.js +1 -0
  928. vibe_surf/backend/frontend/assets/index-Dxb4Fp5u.js +1 -0
  929. vibe_surf/backend/frontend/assets/index-ElUTfe6y.js +1 -0
  930. vibe_surf/backend/frontend/assets/index-F4DPTTmW.js +21 -0
  931. vibe_surf/backend/frontend/assets/index-F7N4-tp0.js +1 -0
  932. vibe_surf/backend/frontend/assets/index-FM3NE49p.js +1 -0
  933. vibe_surf/backend/frontend/assets/index-HXgxnl2q.js +1 -0
  934. vibe_surf/backend/frontend/assets/index-HY6HZeH-.js +1 -0
  935. vibe_surf/backend/frontend/assets/index-JU1gFC-s.js +1 -0
  936. vibe_surf/backend/frontend/assets/index-PsRZzqdR.js +1 -0
  937. vibe_surf/backend/frontend/assets/index-Q9VIxKEz.js +1 -0
  938. vibe_surf/backend/frontend/assets/index-RroJUq2p.js +1 -0
  939. vibe_surf/backend/frontend/assets/index-UE8QCPYd.js +1 -0
  940. vibe_surf/backend/frontend/assets/index-VdxoDWfx.js +1 -0
  941. vibe_surf/backend/frontend/assets/index-YIS8NPcp.js +1 -0
  942. vibe_surf/backend/frontend/assets/index-ZBnWfhuO.js +1 -0
  943. vibe_surf/backend/frontend/assets/index-_00eK0dx.js +1 -0
  944. vibe_surf/backend/frontend/assets/index-ciR61sXL.js +1 -0
  945. vibe_surf/backend/frontend/assets/index-hvkkGC_C.js +1 -0
  946. vibe_surf/backend/frontend/assets/index-iirYVAS4.js +1 -0
  947. vibe_surf/backend/frontend/assets/index-irsZgDst.js +1 -0
  948. vibe_surf/backend/frontend/assets/index-lJyWjBrf.js +1 -0
  949. vibe_surf/backend/frontend/assets/index-lpqC0HtC.js +1 -0
  950. vibe_surf/backend/frontend/assets/index-lr6s8TRd.js +1 -0
  951. vibe_surf/backend/frontend/assets/index-nikO1i2M.js +1 -0
  952. vibe_surf/backend/frontend/assets/index-rOe1xSiI.js +1 -0
  953. vibe_surf/backend/frontend/assets/index-tWBGHnad.js +1 -0
  954. vibe_surf/backend/frontend/assets/index-tsFLmLrl.js +1 -0
  955. vibe_surf/backend/frontend/assets/index-u-It3BPJ.js +1 -0
  956. vibe_surf/backend/frontend/assets/index-u7tDY3oQ.js +1 -0
  957. vibe_surf/backend/frontend/assets/indian-rupee-rcG3I_ik.js +6 -0
  958. vibe_surf/backend/frontend/assets/infinity-D2vde04W.js +6 -0
  959. vibe_surf/backend/frontend/assets/info-DCBxRgu8.js +6 -0
  960. vibe_surf/backend/frontend/assets/inspection-panel-D1NHUrhL.js +6 -0
  961. vibe_surf/backend/frontend/assets/instagram-CJjKKid7.js +6 -0
  962. vibe_surf/backend/frontend/assets/italic-4Xc96EXs.js +6 -0
  963. vibe_surf/backend/frontend/assets/iteration-ccw-Bv46VJuw.js +6 -0
  964. vibe_surf/backend/frontend/assets/iteration-cw-D1aiWDvA.js +6 -0
  965. vibe_surf/backend/frontend/assets/japanese-yen-iCW2ETCz.js +6 -0
  966. vibe_surf/backend/frontend/assets/joystick-DpYFj9GD.js +6 -0
  967. vibe_surf/backend/frontend/assets/kanban-Bi2WetF9.js +6 -0
  968. vibe_surf/backend/frontend/assets/key-CVsuJN4n.js +6 -0
  969. vibe_surf/backend/frontend/assets/key-round-DnXQqmxg.js +6 -0
  970. vibe_surf/backend/frontend/assets/key-square-C923Z847.js +6 -0
  971. vibe_surf/backend/frontend/assets/keyboard-CbihMjR7.js +6 -0
  972. vibe_surf/backend/frontend/assets/keyboard-music-z9LKvpAM.js +6 -0
  973. vibe_surf/backend/frontend/assets/keyboard-off-7iFjxyhx.js +6 -0
  974. vibe_surf/backend/frontend/assets/lamp-BtrnuKcM.js +6 -0
  975. vibe_surf/backend/frontend/assets/lamp-ceiling-BC1utsWI.js +6 -0
  976. vibe_surf/backend/frontend/assets/lamp-desk-pkAXfQ8j.js +6 -0
  977. vibe_surf/backend/frontend/assets/lamp-floor-vTmpCx0w.js +6 -0
  978. vibe_surf/backend/frontend/assets/lamp-wall-down-lOG8ziR3.js +6 -0
  979. vibe_surf/backend/frontend/assets/lamp-wall-up-CZPE8AI2.js +6 -0
  980. vibe_surf/backend/frontend/assets/land-plot-C8hHfhfO.js +6 -0
  981. vibe_surf/backend/frontend/assets/landmark-f1Ab1l9u.js +6 -0
  982. vibe_surf/backend/frontend/assets/languages-CRCZA8-s.js +6 -0
  983. vibe_surf/backend/frontend/assets/laptop-DSbK7NcM.js +6 -0
  984. vibe_surf/backend/frontend/assets/laptop-minimal-DasoCoN2.js +6 -0
  985. vibe_surf/backend/frontend/assets/laptop-minimal-check-lZ_bsJ5w.js +6 -0
  986. vibe_surf/backend/frontend/assets/lasso-DlJ-otu7.js +6 -0
  987. vibe_surf/backend/frontend/assets/lasso-select-BYwDXrvF.js +6 -0
  988. vibe_surf/backend/frontend/assets/laugh-C4s0yYY7.js +6 -0
  989. vibe_surf/backend/frontend/assets/layers-2-37YpnxFQ.js +6 -0
  990. vibe_surf/backend/frontend/assets/layers-DE4bYq54.js +6 -0
  991. vibe_surf/backend/frontend/assets/layout-dashboard-BwQq8lH9.js +6 -0
  992. vibe_surf/backend/frontend/assets/layout-grid-D3mog0PH.js +6 -0
  993. vibe_surf/backend/frontend/assets/layout-list-hbueXQMH.js +6 -0
  994. vibe_surf/backend/frontend/assets/layout-panel-left-DqWFlQAM.js +6 -0
  995. vibe_surf/backend/frontend/assets/layout-panel-top-CTffvfmV.js +6 -0
  996. vibe_surf/backend/frontend/assets/layout-template-DGqYJhgj.js +6 -0
  997. vibe_surf/backend/frontend/assets/lazyIconImports-Dp0wlOKL.js +2 -0
  998. vibe_surf/backend/frontend/assets/leaf-DmquW3E7.js +6 -0
  999. vibe_surf/backend/frontend/assets/leafy-green-BznFobCL.js +6 -0
  1000. vibe_surf/backend/frontend/assets/lectern-DqoFltAf.js +6 -0
  1001. vibe_surf/backend/frontend/assets/letter-text-DO4JCJop.js +6 -0
  1002. vibe_surf/backend/frontend/assets/library-CIMhvcn4.js +6 -0
  1003. vibe_surf/backend/frontend/assets/library-big-CZ8lXboA.js +6 -0
  1004. vibe_surf/backend/frontend/assets/life-buoy-7TSJy9Vb.js +6 -0
  1005. vibe_surf/backend/frontend/assets/ligature-DBcaOHJh.js +6 -0
  1006. vibe_surf/backend/frontend/assets/lightbulb-off-DbjjujiQ.js +6 -0
  1007. vibe_surf/backend/frontend/assets/lightbulb-qkF0YBSU.js +6 -0
  1008. vibe_surf/backend/frontend/assets/link-2-DcH4c4Zc.js +6 -0
  1009. vibe_surf/backend/frontend/assets/link-2-off-DZtuwC5E.js +6 -0
  1010. vibe_surf/backend/frontend/assets/link-DESoaZbo.js +6 -0
  1011. vibe_surf/backend/frontend/assets/linkedin-JjhHmfb4.js +6 -0
  1012. vibe_surf/backend/frontend/assets/list-BrsM64GA.js +6 -0
  1013. vibe_surf/backend/frontend/assets/list-check-CtjFfEK5.js +6 -0
  1014. vibe_surf/backend/frontend/assets/list-checks-DxI2RAHU.js +6 -0
  1015. vibe_surf/backend/frontend/assets/list-collapse-D36HfFAg.js +6 -0
  1016. vibe_surf/backend/frontend/assets/list-end-CnJtPKq2.js +6 -0
  1017. vibe_surf/backend/frontend/assets/list-filter-DQxcz9Im.js +6 -0
  1018. vibe_surf/backend/frontend/assets/list-filter-plus-1zWKh3Nm.js +6 -0
  1019. vibe_surf/backend/frontend/assets/list-minus-CyVCCiP_.js +6 -0
  1020. vibe_surf/backend/frontend/assets/list-music-D2HdEP57.js +6 -0
  1021. vibe_surf/backend/frontend/assets/list-ordered-CI7Q_Z9U.js +6 -0
  1022. vibe_surf/backend/frontend/assets/list-plus-I-ukKH95.js +6 -0
  1023. vibe_surf/backend/frontend/assets/list-restart-BOmwZvpJ.js +6 -0
  1024. vibe_surf/backend/frontend/assets/list-start-s5mFyIxZ.js +6 -0
  1025. vibe_surf/backend/frontend/assets/list-todo-D3I3apKU.js +6 -0
  1026. vibe_surf/backend/frontend/assets/list-tree-dyo6CmDo.js +6 -0
  1027. vibe_surf/backend/frontend/assets/list-video-CDQAsx2G.js +6 -0
  1028. vibe_surf/backend/frontend/assets/list-x-D9NZrtY3.js +6 -0
  1029. vibe_surf/backend/frontend/assets/loader-CZ21EXUH.js +6 -0
  1030. vibe_surf/backend/frontend/assets/loader-circle-BAGc2Gyq.js +6 -0
  1031. vibe_surf/backend/frontend/assets/loader-pinwheel-oc0KDAfx.js +6 -0
  1032. vibe_surf/backend/frontend/assets/locate-fixed-D_gZAi7M.js +6 -0
  1033. vibe_surf/backend/frontend/assets/locate-off-BguB-1e7.js +6 -0
  1034. vibe_surf/backend/frontend/assets/locate-zrCi8zTL.js +6 -0
  1035. vibe_surf/backend/frontend/assets/location-edit-DUKBaV8w.js +6 -0
  1036. vibe_surf/backend/frontend/assets/lock-BIBTiJVb.js +6 -0
  1037. vibe_surf/backend/frontend/assets/lock-keyhole-DfdvlImE.js +6 -0
  1038. vibe_surf/backend/frontend/assets/lock-keyhole-open-BipWMyE2.js +6 -0
  1039. vibe_surf/backend/frontend/assets/lock-open-hTIIUDhX.js +6 -0
  1040. vibe_surf/backend/frontend/assets/log-in-MUY14PK3.js +6 -0
  1041. vibe_surf/backend/frontend/assets/log-out-N9vOM_hV.js +6 -0
  1042. vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
  1043. vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
  1044. vibe_surf/backend/frontend/assets/logs-xWQAk8xE.js +6 -0
  1045. vibe_surf/backend/frontend/assets/lollipop-BfATjFdL.js +6 -0
  1046. vibe_surf/backend/frontend/assets/luggage-C1usgXJA.js +6 -0
  1047. vibe_surf/backend/frontend/assets/magnet-D4uLriLI.js +6 -0
  1048. vibe_surf/backend/frontend/assets/mail-D1FO7Cd4.js +6 -0
  1049. vibe_surf/backend/frontend/assets/mail-check-Ci8WpRcY.js +6 -0
  1050. vibe_surf/backend/frontend/assets/mail-minus-BLSsQTLT.js +6 -0
  1051. vibe_surf/backend/frontend/assets/mail-open-CDCHTm4u.js +6 -0
  1052. vibe_surf/backend/frontend/assets/mail-plus-B7daS-9R.js +6 -0
  1053. vibe_surf/backend/frontend/assets/mail-question-BOoY5VoI.js +6 -0
  1054. vibe_surf/backend/frontend/assets/mail-search-lWL0T5KM.js +6 -0
  1055. vibe_surf/backend/frontend/assets/mail-warning-C1kPMLkO.js +6 -0
  1056. vibe_surf/backend/frontend/assets/mail-x-BbCGpB0U.js +6 -0
  1057. vibe_surf/backend/frontend/assets/mailbox-BelIMLh1.js +6 -0
  1058. vibe_surf/backend/frontend/assets/mails-XSNGLIg6.js +6 -0
  1059. vibe_surf/backend/frontend/assets/map-BPfRs5M-.js +6 -0
  1060. vibe_surf/backend/frontend/assets/map-pin-Bo9rjzwT.js +6 -0
  1061. vibe_surf/backend/frontend/assets/map-pin-check-inside-BOCQ9hdx.js +6 -0
  1062. vibe_surf/backend/frontend/assets/map-pin-check-lZYfidYB.js +6 -0
  1063. vibe_surf/backend/frontend/assets/map-pin-house-BAzpMjxM.js +6 -0
  1064. vibe_surf/backend/frontend/assets/map-pin-minus-e1pq_tox.js +6 -0
  1065. vibe_surf/backend/frontend/assets/map-pin-minus-inside-bYTcKr95.js +6 -0
  1066. vibe_surf/backend/frontend/assets/map-pin-off-COQWPB1x.js +6 -0
  1067. vibe_surf/backend/frontend/assets/map-pin-plus-BkWI2rar.js +6 -0
  1068. vibe_surf/backend/frontend/assets/map-pin-plus-inside-BROwcC6D.js +6 -0
  1069. vibe_surf/backend/frontend/assets/map-pin-x-D2Ku6Hux.js +6 -0
  1070. vibe_surf/backend/frontend/assets/map-pin-x-inside-BgzSyApf.js +6 -0
  1071. vibe_surf/backend/frontend/assets/map-pinned-BujJSPdd.js +6 -0
  1072. vibe_surf/backend/frontend/assets/map-plus-B6j30feS.js +6 -0
  1073. vibe_surf/backend/frontend/assets/mars-DYINnF77.js +6 -0
  1074. vibe_surf/backend/frontend/assets/mars-stroke-CBsC9ZKU.js +6 -0
  1075. vibe_surf/backend/frontend/assets/martini-CXUAUOfs.js +6 -0
  1076. vibe_surf/backend/frontend/assets/maximize-BFF7J1ik.js +6 -0
  1077. vibe_surf/backend/frontend/assets/medal-DgHUWfiy.js +6 -0
  1078. vibe_surf/backend/frontend/assets/megaphone-ChknVYgu.js +6 -0
  1079. vibe_surf/backend/frontend/assets/megaphone-off-B2DuwOZL.js +6 -0
  1080. vibe_surf/backend/frontend/assets/meh-BkI_z7Fm.js +6 -0
  1081. vibe_surf/backend/frontend/assets/memory-stick-jnV8BZ8U.js +6 -0
  1082. vibe_surf/backend/frontend/assets/menu-BGWdm1VM.js +6 -0
  1083. vibe_surf/backend/frontend/assets/merge-0CrgnCFa.js +6 -0
  1084. vibe_surf/backend/frontend/assets/message-circle-Nfutonhc.js +6 -0
  1085. vibe_surf/backend/frontend/assets/message-circle-code-eh8g5zEn.js +6 -0
  1086. vibe_surf/backend/frontend/assets/message-circle-dashed-134APd-i.js +6 -0
  1087. vibe_surf/backend/frontend/assets/message-circle-heart-CCfEj0L4.js +6 -0
  1088. vibe_surf/backend/frontend/assets/message-circle-more-NvNEYrao.js +6 -0
  1089. vibe_surf/backend/frontend/assets/message-circle-off-D9JSF2R5.js +6 -0
  1090. vibe_surf/backend/frontend/assets/message-circle-plus-CxUrzbkE.js +6 -0
  1091. vibe_surf/backend/frontend/assets/message-circle-question-B1AjvIzW.js +6 -0
  1092. vibe_surf/backend/frontend/assets/message-circle-reply-Cq_LGdpm.js +6 -0
  1093. vibe_surf/backend/frontend/assets/message-circle-warning-CJZzVFuj.js +6 -0
  1094. vibe_surf/backend/frontend/assets/message-circle-x-CFaT7HUf.js +6 -0
  1095. vibe_surf/backend/frontend/assets/message-square-TdNl2hum.js +6 -0
  1096. vibe_surf/backend/frontend/assets/message-square-code-HRbe8Bot.js +6 -0
  1097. vibe_surf/backend/frontend/assets/message-square-dashed-DV41vJ2v.js +6 -0
  1098. vibe_surf/backend/frontend/assets/message-square-diff-D1P5SKIl.js +6 -0
  1099. vibe_surf/backend/frontend/assets/message-square-dot-CLfBOSjb.js +6 -0
  1100. vibe_surf/backend/frontend/assets/message-square-heart-Cx9wpKea.js +6 -0
  1101. vibe_surf/backend/frontend/assets/message-square-lock-CGv0fUwZ.js +6 -0
  1102. vibe_surf/backend/frontend/assets/message-square-more-BTf56lQh.js +6 -0
  1103. vibe_surf/backend/frontend/assets/message-square-off-CAuO9gJt.js +6 -0
  1104. vibe_surf/backend/frontend/assets/message-square-plus-DIt_XzdR.js +6 -0
  1105. vibe_surf/backend/frontend/assets/message-square-quote-BpZpFxZD.js +6 -0
  1106. vibe_surf/backend/frontend/assets/message-square-reply-CJyI4MAQ.js +6 -0
  1107. vibe_surf/backend/frontend/assets/message-square-share-DARwiA0s.js +6 -0
  1108. vibe_surf/backend/frontend/assets/message-square-text-huSgEB4l.js +6 -0
  1109. vibe_surf/backend/frontend/assets/message-square-warning-BW-imgi9.js +6 -0
  1110. vibe_surf/backend/frontend/assets/message-square-x-DlDleCY5.js +6 -0
  1111. vibe_surf/backend/frontend/assets/messages-square-BdxEbF0a.js +6 -0
  1112. vibe_surf/backend/frontend/assets/mic-B4lpPP8o.js +6 -0
  1113. vibe_surf/backend/frontend/assets/mic-off-BDjkMW2k.js +6 -0
  1114. vibe_surf/backend/frontend/assets/mic-vocal-DjTJgrSN.js +6 -0
  1115. vibe_surf/backend/frontend/assets/microchip-D9WgoQgG.js +6 -0
  1116. vibe_surf/backend/frontend/assets/microscope-DhRdwj9u.js +6 -0
  1117. vibe_surf/backend/frontend/assets/microwave-Cx-cktmw.js +6 -0
  1118. vibe_surf/backend/frontend/assets/milestone-Bn4J2gZ5.js +6 -0
  1119. vibe_surf/backend/frontend/assets/milk-BwNuvCod.js +6 -0
  1120. vibe_surf/backend/frontend/assets/milk-off-B7Czys2l.js +6 -0
  1121. vibe_surf/backend/frontend/assets/minimize-2-Dyq0b2X5.js +6 -0
  1122. vibe_surf/backend/frontend/assets/minimize-DpN4-eh5.js +6 -0
  1123. vibe_surf/backend/frontend/assets/monitor-BMDueoJx.js +6 -0
  1124. vibe_surf/backend/frontend/assets/monitor-check-B0ttZdSb.js +6 -0
  1125. vibe_surf/backend/frontend/assets/monitor-cog-DSEVRX-K.js +6 -0
  1126. vibe_surf/backend/frontend/assets/monitor-dot-C1rbXtsC.js +6 -0
  1127. vibe_surf/backend/frontend/assets/monitor-down-UsHNCHWw.js +6 -0
  1128. vibe_surf/backend/frontend/assets/monitor-off-BWHYFnFW.js +6 -0
  1129. vibe_surf/backend/frontend/assets/monitor-pause-VlURf6A2.js +6 -0
  1130. vibe_surf/backend/frontend/assets/monitor-play-CtvDdBj_.js +6 -0
  1131. vibe_surf/backend/frontend/assets/monitor-smartphone-BVRCMILq.js +6 -0
  1132. vibe_surf/backend/frontend/assets/monitor-speaker-DaVpljSK.js +6 -0
  1133. vibe_surf/backend/frontend/assets/monitor-stop-B1XZqOHJ.js +6 -0
  1134. vibe_surf/backend/frontend/assets/monitor-up-6o6KBdRy.js +6 -0
  1135. vibe_surf/backend/frontend/assets/monitor-x-DkPYSebu.js +6 -0
  1136. vibe_surf/backend/frontend/assets/moon-BxM64e9B.js +6 -0
  1137. vibe_surf/backend/frontend/assets/moon-star-Bn6pq89P.js +6 -0
  1138. vibe_surf/backend/frontend/assets/mountain-Dn-Uh29Q.js +6 -0
  1139. vibe_surf/backend/frontend/assets/mountain-snow-DDguiGic.js +6 -0
  1140. vibe_surf/backend/frontend/assets/mouse-Ccu5uzLi.js +6 -0
  1141. vibe_surf/backend/frontend/assets/mouse-off-DyDEs3d2.js +6 -0
  1142. vibe_surf/backend/frontend/assets/mouse-pointer-2-D09hD9PW.js +6 -0
  1143. vibe_surf/backend/frontend/assets/mouse-pointer-Cv_qu4W9.js +6 -0
  1144. vibe_surf/backend/frontend/assets/mouse-pointer-ban-CyBqBoaN.js +6 -0
  1145. vibe_surf/backend/frontend/assets/mouse-pointer-click-DjkLOlDc.js +6 -0
  1146. vibe_surf/backend/frontend/assets/move-3d-CWvVC7tH.js +6 -0
  1147. vibe_surf/backend/frontend/assets/move-CbFVB4UI.js +6 -0
  1148. vibe_surf/backend/frontend/assets/move-diagonal-2-BJhYv952.js +6 -0
  1149. vibe_surf/backend/frontend/assets/move-diagonal-BpdDHzBj.js +6 -0
  1150. vibe_surf/backend/frontend/assets/move-down-CnVNMo5w.js +6 -0
  1151. vibe_surf/backend/frontend/assets/move-down-left-Cm2dVHob.js +6 -0
  1152. vibe_surf/backend/frontend/assets/move-down-right-DgtW1zsA.js +6 -0
  1153. vibe_surf/backend/frontend/assets/move-horizontal-DEZvvuZ9.js +6 -0
  1154. vibe_surf/backend/frontend/assets/move-left-Bsp9OXAN.js +6 -0
  1155. vibe_surf/backend/frontend/assets/move-right-b3MvEDOZ.js +6 -0
  1156. vibe_surf/backend/frontend/assets/move-up-left-CyLKc6_v.js +6 -0
  1157. vibe_surf/backend/frontend/assets/move-up-q3QjQGGI.js +6 -0
  1158. vibe_surf/backend/frontend/assets/move-up-right-CVzYXW8M.js +6 -0
  1159. vibe_surf/backend/frontend/assets/move-vertical-BLDKghbu.js +6 -0
  1160. vibe_surf/backend/frontend/assets/music-2-Cv7wxsen.js +6 -0
  1161. vibe_surf/backend/frontend/assets/music-3-BAMkh7cd.js +6 -0
  1162. vibe_surf/backend/frontend/assets/music-4-CxEbsNyP.js +6 -0
  1163. vibe_surf/backend/frontend/assets/music-DI2LJ1pr.js +6 -0
  1164. vibe_surf/backend/frontend/assets/navigation-2-CN7e4Syo.js +6 -0
  1165. vibe_surf/backend/frontend/assets/navigation-2-off-Xfvx3297.js +6 -0
  1166. vibe_surf/backend/frontend/assets/navigation-CTZ2PK8B.js +6 -0
  1167. vibe_surf/backend/frontend/assets/navigation-off-CA0_QNZ8.js +6 -0
  1168. vibe_surf/backend/frontend/assets/network-DJgCGMs5.js +6 -0
  1169. vibe_surf/backend/frontend/assets/newspaper-CncK5ZAP.js +6 -0
  1170. vibe_surf/backend/frontend/assets/nfc-DHkaG7f6.js +6 -0
  1171. vibe_surf/backend/frontend/assets/non-binary-DrHfkDpx.js +6 -0
  1172. vibe_surf/backend/frontend/assets/notebook-Bu_56sbo.js +6 -0
  1173. vibe_surf/backend/frontend/assets/notebook-pen-BfNCvEsp.js +6 -0
  1174. vibe_surf/backend/frontend/assets/notebook-tabs-DXKJLdw0.js +6 -0
  1175. vibe_surf/backend/frontend/assets/notebook-text-CLDwqJL4.js +6 -0
  1176. vibe_surf/backend/frontend/assets/notepad-text-BzId44ui.js +6 -0
  1177. vibe_surf/backend/frontend/assets/notepad-text-dashed-C2ifxTJ-.js +6 -0
  1178. vibe_surf/backend/frontend/assets/nut-BflOPXDH.js +6 -0
  1179. vibe_surf/backend/frontend/assets/nut-off-C7f4vuBh.js +6 -0
  1180. vibe_surf/backend/frontend/assets/octagon-Cy5B14LK.js +6 -0
  1181. vibe_surf/backend/frontend/assets/octagon-alert-BQnnyMAR.js +6 -0
  1182. vibe_surf/backend/frontend/assets/octagon-minus-D4t-g_gW.js +6 -0
  1183. vibe_surf/backend/frontend/assets/octagon-pause-D4ADMFHJ.js +6 -0
  1184. vibe_surf/backend/frontend/assets/octagon-x-3lOoF8Wy.js +6 -0
  1185. vibe_surf/backend/frontend/assets/omega-CAb2Yotb.js +6 -0
  1186. vibe_surf/backend/frontend/assets/option-CIxLb5L5.js +6 -0
  1187. vibe_surf/backend/frontend/assets/orbit-Cyp4vT1A.js +6 -0
  1188. vibe_surf/backend/frontend/assets/origami-Bp-6CC8X.js +6 -0
  1189. vibe_surf/backend/frontend/assets/package-2-CF7BAidm.js +6 -0
  1190. vibe_surf/backend/frontend/assets/package-check-DKVi-M6g.js +6 -0
  1191. vibe_surf/backend/frontend/assets/package-dwDgaGhA.js +6 -0
  1192. vibe_surf/backend/frontend/assets/package-minus-mNyMzPhU.js +6 -0
  1193. vibe_surf/backend/frontend/assets/package-open-D4CXb1O6.js +6 -0
  1194. vibe_surf/backend/frontend/assets/package-plus-Dy5MsZf9.js +6 -0
  1195. vibe_surf/backend/frontend/assets/package-search-1aN1Tfbn.js +6 -0
  1196. vibe_surf/backend/frontend/assets/package-x-Br_OiHp7.js +6 -0
  1197. vibe_surf/backend/frontend/assets/paint-bucket-BgqBhtcr.js +6 -0
  1198. vibe_surf/backend/frontend/assets/paint-roller-BKJO-A3W.js +6 -0
  1199. vibe_surf/backend/frontend/assets/paintbrush-Dr3zosPE.js +6 -0
  1200. vibe_surf/backend/frontend/assets/paintbrush-vertical-C_SF0K9Y.js +6 -0
  1201. vibe_surf/backend/frontend/assets/palette-cqdkJAwD.js +6 -0
  1202. vibe_surf/backend/frontend/assets/panel-bottom-close-LR-vRGYT.js +6 -0
  1203. vibe_surf/backend/frontend/assets/panel-bottom-dashed-DZpxppGi.js +6 -0
  1204. vibe_surf/backend/frontend/assets/panel-bottom-open-BIDVhq4g.js +6 -0
  1205. vibe_surf/backend/frontend/assets/panel-bottom-qNgkDPPB.js +6 -0
  1206. vibe_surf/backend/frontend/assets/panel-left-close-jbvRjJyH.js +6 -0
  1207. vibe_surf/backend/frontend/assets/panel-left-dashed-CGafwEEz.js +6 -0
  1208. vibe_surf/backend/frontend/assets/panel-left-open-RdnDP8SA.js +6 -0
  1209. vibe_surf/backend/frontend/assets/panel-right-DG2JkT_r.js +6 -0
  1210. vibe_surf/backend/frontend/assets/panel-right-close-ON0hPuYG.js +6 -0
  1211. vibe_surf/backend/frontend/assets/panel-right-dashed-BWDVhMO-.js +6 -0
  1212. vibe_surf/backend/frontend/assets/panel-right-open-CKshqOyf.js +6 -0
  1213. vibe_surf/backend/frontend/assets/panel-top-Dmxz_Mfs.js +6 -0
  1214. vibe_surf/backend/frontend/assets/panel-top-close-DONOva6Y.js +6 -0
  1215. vibe_surf/backend/frontend/assets/panel-top-dashed-D0pzC4ED.js +6 -0
  1216. vibe_surf/backend/frontend/assets/panel-top-open-u6AKby5v.js +6 -0
  1217. vibe_surf/backend/frontend/assets/panels-left-bottom-_pyxxhnv.js +6 -0
  1218. vibe_surf/backend/frontend/assets/panels-right-bottom-DqdulV5k.js +6 -0
  1219. vibe_surf/backend/frontend/assets/panels-top-left-8p6VuUOb.js +6 -0
  1220. vibe_surf/backend/frontend/assets/paperclip-BlUFsNqR.js +6 -0
  1221. vibe_surf/backend/frontend/assets/parentheses-CRp6hYJ6.js +6 -0
  1222. vibe_surf/backend/frontend/assets/parking-meter-BKs-9jbh.js +6 -0
  1223. vibe_surf/backend/frontend/assets/party-popper-DbzkvAli.js +6 -0
  1224. vibe_surf/backend/frontend/assets/paw-print-BbMlkOEO.js +6 -0
  1225. vibe_surf/backend/frontend/assets/pc-case-BSIAwfze.js +6 -0
  1226. vibe_surf/backend/frontend/assets/pen-D9TSq5aq.js +6 -0
  1227. vibe_surf/backend/frontend/assets/pen-line-C3NzRPd3.js +6 -0
  1228. vibe_surf/backend/frontend/assets/pen-off-D05y9ref.js +6 -0
  1229. vibe_surf/backend/frontend/assets/pen-tool-D9p9RNoA.js +6 -0
  1230. vibe_surf/backend/frontend/assets/pencil-BKpQNzvp.js +6 -0
  1231. vibe_surf/backend/frontend/assets/pencil-line-Bdq6780_.js +6 -0
  1232. vibe_surf/backend/frontend/assets/pencil-off-CZ7lI3k0.js +6 -0
  1233. vibe_surf/backend/frontend/assets/pencil-ruler-D2QniS9D.js +6 -0
  1234. vibe_surf/backend/frontend/assets/pentagon-CL0P-2Be.js +6 -0
  1235. vibe_surf/backend/frontend/assets/percent-BM6Kl-Hu.js +6 -0
  1236. vibe_surf/backend/frontend/assets/person-standing-CpyRtsce.js +6 -0
  1237. vibe_surf/backend/frontend/assets/philippine-peso-D5bFWvtm.js +6 -0
  1238. vibe_surf/backend/frontend/assets/phone-K9-s3Bu6.js +6 -0
  1239. vibe_surf/backend/frontend/assets/phone-call-BMuuoOHh.js +6 -0
  1240. vibe_surf/backend/frontend/assets/phone-forwarded-D-nD-ssq.js +6 -0
  1241. vibe_surf/backend/frontend/assets/phone-incoming-Ct97uBnX.js +6 -0
  1242. vibe_surf/backend/frontend/assets/phone-missed-Dl1yFHA8.js +6 -0
  1243. vibe_surf/backend/frontend/assets/phone-off-CIIiW4DK.js +6 -0
  1244. vibe_surf/backend/frontend/assets/phone-outgoing-Bn21zfLf.js +6 -0
  1245. vibe_surf/backend/frontend/assets/pi-KBaiCIkJ.js +6 -0
  1246. vibe_surf/backend/frontend/assets/piano-Cor-6BQM.js +6 -0
  1247. vibe_surf/backend/frontend/assets/pickaxe-JX5oJ1hy.js +6 -0
  1248. vibe_surf/backend/frontend/assets/picture-in-picture-2-CSmStCZ4.js +6 -0
  1249. vibe_surf/backend/frontend/assets/picture-in-picture-yDdZDNRC.js +6 -0
  1250. vibe_surf/backend/frontend/assets/piggy-bank-D9sTa-am.js +6 -0
  1251. vibe_surf/backend/frontend/assets/pilcrow-B6Aeks47.js +6 -0
  1252. vibe_surf/backend/frontend/assets/pilcrow-left-BQvCcQzh.js +6 -0
  1253. vibe_surf/backend/frontend/assets/pilcrow-right-CrxOjUOh.js +6 -0
  1254. vibe_surf/backend/frontend/assets/pill-DhPudta1.js +6 -0
  1255. vibe_surf/backend/frontend/assets/pill-bottle-BCzORdwx.js +6 -0
  1256. vibe_surf/backend/frontend/assets/pin-MT9TvItb.js +6 -0
  1257. vibe_surf/backend/frontend/assets/pin-off-C4sFwE93.js +6 -0
  1258. vibe_surf/backend/frontend/assets/pipette-BE16X0Zc.js +6 -0
  1259. vibe_surf/backend/frontend/assets/pizza-Cwfm_kaE.js +6 -0
  1260. vibe_surf/backend/frontend/assets/plane-Ct0cOHRo.js +6 -0
  1261. vibe_surf/backend/frontend/assets/plane-landing-Ct4oV7kn.js +6 -0
  1262. vibe_surf/backend/frontend/assets/plane-takeoff-IjpPtaS6.js +6 -0
  1263. vibe_surf/backend/frontend/assets/plug-2-Cn9EdPUM.js +6 -0
  1264. vibe_surf/backend/frontend/assets/plug-pQlGzx_B.js +6 -0
  1265. vibe_surf/backend/frontend/assets/plug-zap-9nF6PFtm.js +6 -0
  1266. vibe_surf/backend/frontend/assets/pocket-3pOTAnEC.js +6 -0
  1267. vibe_surf/backend/frontend/assets/pocket-knife-TKmUVvO9.js +6 -0
  1268. vibe_surf/backend/frontend/assets/podcast-BHXE6S9W.js +6 -0
  1269. vibe_surf/backend/frontend/assets/pointer-BzZXhAOc.js +6 -0
  1270. vibe_surf/backend/frontend/assets/pointer-off-CC5B3RYl.js +6 -0
  1271. vibe_surf/backend/frontend/assets/popcorn-COypVWGN.js +6 -0
  1272. vibe_surf/backend/frontend/assets/popsicle-CmV5g-9P.js +6 -0
  1273. vibe_surf/backend/frontend/assets/pound-sterling-CRW7qDBu.js +6 -0
  1274. vibe_surf/backend/frontend/assets/power-CeN1_ifF.js +6 -0
  1275. vibe_surf/backend/frontend/assets/power-off-DnruOFHO.js +6 -0
  1276. vibe_surf/backend/frontend/assets/presentation-BBhZ1T90.js +6 -0
  1277. vibe_surf/backend/frontend/assets/printer-J_X9y3GJ.js +6 -0
  1278. vibe_surf/backend/frontend/assets/printer-check-Xrof9OPX.js +6 -0
  1279. vibe_surf/backend/frontend/assets/projector-Cr7pbU9O.js +6 -0
  1280. vibe_surf/backend/frontend/assets/proportions-Bt_oONAD.js +6 -0
  1281. vibe_surf/backend/frontend/assets/puzzle-BEB9dtqG.js +6 -0
  1282. vibe_surf/backend/frontend/assets/pyramid-B63D_xCq.js +6 -0
  1283. vibe_surf/backend/frontend/assets/qr-code-DD65EP-q.js +6 -0
  1284. vibe_surf/backend/frontend/assets/quote-DGI0FmFV.js +6 -0
  1285. vibe_surf/backend/frontend/assets/rabbit-BAAJvAQ1.js +6 -0
  1286. vibe_surf/backend/frontend/assets/radar-DiWFjDof.js +6 -0
  1287. vibe_surf/backend/frontend/assets/radiation-6S246_qf.js +6 -0
  1288. vibe_surf/backend/frontend/assets/radical-B4h5Vjr-.js +6 -0
  1289. vibe_surf/backend/frontend/assets/radio-DNjlx2h6.js +6 -0
  1290. vibe_surf/backend/frontend/assets/radio-receiver-DVXCb1C2.js +6 -0
  1291. vibe_surf/backend/frontend/assets/radio-tower-DUKttK3Q.js +6 -0
  1292. vibe_surf/backend/frontend/assets/radius-NH2Pgs7n.js +6 -0
  1293. vibe_surf/backend/frontend/assets/rail-symbol-y_83HZIX.js +6 -0
  1294. vibe_surf/backend/frontend/assets/rainbow-ex4up0y_.js +6 -0
  1295. vibe_surf/backend/frontend/assets/rat-DVSQEhd7.js +6 -0
  1296. vibe_surf/backend/frontend/assets/ratio-Dv-gnu5W.js +6 -0
  1297. vibe_surf/backend/frontend/assets/receipt-DKZm1LWG.js +6 -0
  1298. vibe_surf/backend/frontend/assets/receipt-cent-5S25Pz-Y.js +6 -0
  1299. vibe_surf/backend/frontend/assets/receipt-euro-BtPm6Ent.js +6 -0
  1300. vibe_surf/backend/frontend/assets/receipt-indian-rupee-DUF2ASWh.js +6 -0
  1301. vibe_surf/backend/frontend/assets/receipt-japanese-yen-DYwfBDPz.js +6 -0
  1302. vibe_surf/backend/frontend/assets/receipt-pound-sterling-Dz03w-I-.js +6 -0
  1303. vibe_surf/backend/frontend/assets/receipt-russian-ruble-BPvEoyQB.js +6 -0
  1304. vibe_surf/backend/frontend/assets/receipt-swiss-franc-CE5V9HAu.js +6 -0
  1305. vibe_surf/backend/frontend/assets/receipt-text-4jJUDNZL.js +6 -0
  1306. vibe_surf/backend/frontend/assets/rectangle-ellipsis-CiMEZA-s.js +6 -0
  1307. vibe_surf/backend/frontend/assets/rectangle-goggles-BbvMYFz0.js +6 -0
  1308. vibe_surf/backend/frontend/assets/rectangle-horizontal-BBRMxKxu.js +6 -0
  1309. vibe_surf/backend/frontend/assets/rectangle-vertical-CeoWO5KM.js +6 -0
  1310. vibe_surf/backend/frontend/assets/recycle-BtU0aG4p.js +6 -0
  1311. vibe_surf/backend/frontend/assets/redo-2-DluCWtO8.js +6 -0
  1312. vibe_surf/backend/frontend/assets/redo-D-cP_Hkn.js +6 -0
  1313. vibe_surf/backend/frontend/assets/redo-dot-D3AdCDPV.js +6 -0
  1314. vibe_surf/backend/frontend/assets/refresh-ccw-PanlYmNP.js +6 -0
  1315. vibe_surf/backend/frontend/assets/refresh-ccw-dot-BtKETZVW.js +6 -0
  1316. vibe_surf/backend/frontend/assets/refresh-cw-2F9M9WA-.js +6 -0
  1317. vibe_surf/backend/frontend/assets/refresh-cw-off-DfcoyDb0.js +6 -0
  1318. vibe_surf/backend/frontend/assets/refrigerator-CjKO5bNs.js +6 -0
  1319. vibe_surf/backend/frontend/assets/regex-DSjHOCWp.js +6 -0
  1320. vibe_surf/backend/frontend/assets/remove-formatting-DNhVuOyu.js +6 -0
  1321. vibe_surf/backend/frontend/assets/repeat-1-BWnjf3uj.js +6 -0
  1322. vibe_surf/backend/frontend/assets/repeat-2-DtYtXQSH.js +6 -0
  1323. vibe_surf/backend/frontend/assets/repeat-Bxz0odhG.js +6 -0
  1324. vibe_surf/backend/frontend/assets/replace-BfkipbaZ.js +6 -0
  1325. vibe_surf/backend/frontend/assets/replace-all-PgS4Wej3.js +6 -0
  1326. vibe_surf/backend/frontend/assets/reply-B5lewwtx.js +6 -0
  1327. vibe_surf/backend/frontend/assets/reply-all-0VOGnNa3.js +6 -0
  1328. vibe_surf/backend/frontend/assets/rewind-BP7_fsYl.js +6 -0
  1329. vibe_surf/backend/frontend/assets/ribbon-CCR_MZmZ.js +6 -0
  1330. vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
  1331. vibe_surf/backend/frontend/assets/rocket-BvI5E0xM.js +6 -0
  1332. vibe_surf/backend/frontend/assets/rocking-chair-D9ciQaG2.js +6 -0
  1333. vibe_surf/backend/frontend/assets/roller-coaster-CIYjsFvO.js +6 -0
  1334. vibe_surf/backend/frontend/assets/rotate-3d-57_lqlxh.js +6 -0
  1335. vibe_surf/backend/frontend/assets/rotate-ccw-Dv0afAgn.js +6 -0
  1336. vibe_surf/backend/frontend/assets/rotate-ccw-key-BEfjwpDz.js +6 -0
  1337. vibe_surf/backend/frontend/assets/rotate-ccw-square-DQw5wuXQ.js +6 -0
  1338. vibe_surf/backend/frontend/assets/rotate-cw-square-BBVduPLL.js +6 -0
  1339. vibe_surf/backend/frontend/assets/route-Cb5rOsHB.js +6 -0
  1340. vibe_surf/backend/frontend/assets/route-off-DCvXXstI.js +6 -0
  1341. vibe_surf/backend/frontend/assets/router-DY3g0wJU.js +6 -0
  1342. vibe_surf/backend/frontend/assets/rows-2-aV0bv01v.js +6 -0
  1343. vibe_surf/backend/frontend/assets/rows-3-YFUDa1KS.js +6 -0
  1344. vibe_surf/backend/frontend/assets/rows-4---Zyqbpk.js +6 -0
  1345. vibe_surf/backend/frontend/assets/rss-CXFLSLBN.js +6 -0
  1346. vibe_surf/backend/frontend/assets/ruler-DqorlT-h.js +6 -0
  1347. vibe_surf/backend/frontend/assets/ruler-dimension-line-7m0vG2Ir.js +6 -0
  1348. vibe_surf/backend/frontend/assets/russian-ruble-C32P06TU.js +6 -0
  1349. vibe_surf/backend/frontend/assets/sailboat-C0UyBVmA.js +6 -0
  1350. vibe_surf/backend/frontend/assets/salad-DJ2OeKQ0.js +6 -0
  1351. vibe_surf/backend/frontend/assets/sandwich-CWDihFSJ.js +6 -0
  1352. vibe_surf/backend/frontend/assets/satellite-DWJiZMc4.js +6 -0
  1353. vibe_surf/backend/frontend/assets/satellite-dish-CyKhq7bX.js +6 -0
  1354. vibe_surf/backend/frontend/assets/saudi-riyal-CDMN7EuW.js +6 -0
  1355. vibe_surf/backend/frontend/assets/save-Sf21IaPS.js +6 -0
  1356. vibe_surf/backend/frontend/assets/save-all-CazGJB6d.js +6 -0
  1357. vibe_surf/backend/frontend/assets/save-off-ClLS86SR.js +6 -0
  1358. vibe_surf/backend/frontend/assets/scale-3d-BO2k-FAS.js +6 -0
  1359. vibe_surf/backend/frontend/assets/scale-B1BMBPHE.js +6 -0
  1360. vibe_surf/backend/frontend/assets/scaling-6FiHXVNt.js +6 -0
  1361. vibe_surf/backend/frontend/assets/scan-BociKTm7.js +6 -0
  1362. vibe_surf/backend/frontend/assets/scan-barcode-9a0RKd9F.js +6 -0
  1363. vibe_surf/backend/frontend/assets/scan-eye-B4Fq_o4w.js +6 -0
  1364. vibe_surf/backend/frontend/assets/scan-face-CQxrOJRg.js +6 -0
  1365. vibe_surf/backend/frontend/assets/scan-heart-gC97XkVz.js +6 -0
  1366. vibe_surf/backend/frontend/assets/scan-line-QZz3wllu.js +6 -0
  1367. vibe_surf/backend/frontend/assets/scan-qr-code-CL7m0Abc.js +6 -0
  1368. vibe_surf/backend/frontend/assets/scan-search-B5fLui1I.js +6 -0
  1369. vibe_surf/backend/frontend/assets/scan-text-lBsygGB9.js +6 -0
  1370. vibe_surf/backend/frontend/assets/school-CJrzwRC4.js +6 -0
  1371. vibe_surf/backend/frontend/assets/scissors-line-dashed-BE64co8i.js +6 -0
  1372. vibe_surf/backend/frontend/assets/scissors-pEw6Xaqr.js +6 -0
  1373. vibe_surf/backend/frontend/assets/screen-share-BK2OnDwg.js +6 -0
  1374. vibe_surf/backend/frontend/assets/screen-share-off-BXzQiMup.js +6 -0
  1375. vibe_surf/backend/frontend/assets/scroll-DOu3NpFe.js +6 -0
  1376. vibe_surf/backend/frontend/assets/scroll-text-Bkt7Rmng.js +6 -0
  1377. vibe_surf/backend/frontend/assets/search-check-BijeS6tH.js +6 -0
  1378. vibe_surf/backend/frontend/assets/search-code-DwYE8wkC.js +6 -0
  1379. vibe_surf/backend/frontend/assets/search-slash-D0kKoqoN.js +6 -0
  1380. vibe_surf/backend/frontend/assets/search-x-O8nHs6x_.js +6 -0
  1381. vibe_surf/backend/frontend/assets/section-CDcMqQkw.js +6 -0
  1382. vibe_surf/backend/frontend/assets/send-18rqzjQL.js +6 -0
  1383. vibe_surf/backend/frontend/assets/send-horizontal-BlS3LSk8.js +6 -0
  1384. vibe_surf/backend/frontend/assets/send-to-back-pQRkI1lQ.js +6 -0
  1385. vibe_surf/backend/frontend/assets/separator-horizontal-DITxbxBK.js +6 -0
  1386. vibe_surf/backend/frontend/assets/separator-vertical-s3Z8KVZ1.js +6 -0
  1387. vibe_surf/backend/frontend/assets/server-BOW7Qnvk.js +6 -0
  1388. vibe_surf/backend/frontend/assets/server-cog-BXqD_2iC.js +6 -0
  1389. vibe_surf/backend/frontend/assets/server-crash-CdPSdSgW.js +6 -0
  1390. vibe_surf/backend/frontend/assets/server-off-CRJxmnrh.js +6 -0
  1391. vibe_surf/backend/frontend/assets/settings-2-CJHcPvMS.js +6 -0
  1392. vibe_surf/backend/frontend/assets/settings-Bj8QCFrW.js +6 -0
  1393. vibe_surf/backend/frontend/assets/shapes-DE19P8VB.js +6 -0
  1394. vibe_surf/backend/frontend/assets/share-2-D_f9E9OI.js +6 -0
  1395. vibe_surf/backend/frontend/assets/share-Dl2kwbyK.js +6 -0
  1396. vibe_surf/backend/frontend/assets/sheet-D-7Wal14.js +6 -0
  1397. vibe_surf/backend/frontend/assets/shell-CBntfIeY.js +6 -0
  1398. vibe_surf/backend/frontend/assets/shield--hABef9x.js +6 -0
  1399. vibe_surf/backend/frontend/assets/shield-alert-B4tE7sej.js +6 -0
  1400. vibe_surf/backend/frontend/assets/shield-ban-CeAW94aR.js +6 -0
  1401. vibe_surf/backend/frontend/assets/shield-check-BE77dRZh.js +6 -0
  1402. vibe_surf/backend/frontend/assets/shield-ellipsis-09A4HS03.js +6 -0
  1403. vibe_surf/backend/frontend/assets/shield-half-DKJcQwtx.js +6 -0
  1404. vibe_surf/backend/frontend/assets/shield-minus-Bwqn7bCD.js +6 -0
  1405. vibe_surf/backend/frontend/assets/shield-off-CNWzwcox.js +6 -0
  1406. vibe_surf/backend/frontend/assets/shield-plus-DWaKzpCt.js +6 -0
  1407. vibe_surf/backend/frontend/assets/shield-question-D_4Yva8t.js +6 -0
  1408. vibe_surf/backend/frontend/assets/shield-user-B9IXYUW_.js +6 -0
  1409. vibe_surf/backend/frontend/assets/shield-x-CiykLrl6.js +6 -0
  1410. vibe_surf/backend/frontend/assets/ship-BScV8-bd.js +6 -0
  1411. vibe_surf/backend/frontend/assets/ship-wheel-Djpjm-Ds.js +6 -0
  1412. vibe_surf/backend/frontend/assets/shirt-BQYiVewb.js +6 -0
  1413. vibe_surf/backend/frontend/assets/shopping-bag-CHEQVXZe.js +6 -0
  1414. vibe_surf/backend/frontend/assets/shopping-basket-BN8OQ-W2.js +6 -0
  1415. vibe_surf/backend/frontend/assets/shopping-cart-CrWWcNX6.js +6 -0
  1416. vibe_surf/backend/frontend/assets/shovel-OV8umLfu.js +6 -0
  1417. vibe_surf/backend/frontend/assets/shower-head-Bx7v6ZlC.js +6 -0
  1418. vibe_surf/backend/frontend/assets/shredder-DqB2N_G-.js +6 -0
  1419. vibe_surf/backend/frontend/assets/shrimp-uvf6awsH.js +6 -0
  1420. vibe_surf/backend/frontend/assets/shrink-D_H8kRaB.js +6 -0
  1421. vibe_surf/backend/frontend/assets/shrub-CkCwsaYP.js +6 -0
  1422. vibe_surf/backend/frontend/assets/shuffle-Fq0KJO-a.js +6 -0
  1423. vibe_surf/backend/frontend/assets/sigma-BR8bMoDL.js +6 -0
  1424. vibe_surf/backend/frontend/assets/signal-TOctv2i0.js +6 -0
  1425. vibe_surf/backend/frontend/assets/signal-high-u_iVhz3W.js +6 -0
  1426. vibe_surf/backend/frontend/assets/signal-low-CLoQeV0B.js +6 -0
  1427. vibe_surf/backend/frontend/assets/signal-medium-AwY8Ntei.js +6 -0
  1428. vibe_surf/backend/frontend/assets/signal-zero-BEXPbo5k.js +6 -0
  1429. vibe_surf/backend/frontend/assets/signature-Cgbo04nK.js +6 -0
  1430. vibe_surf/backend/frontend/assets/signpost-BumCuKy8.js +6 -0
  1431. vibe_surf/backend/frontend/assets/signpost-big-BRDDJu7l.js +6 -0
  1432. vibe_surf/backend/frontend/assets/siren-Dmc1QgzA.js +6 -0
  1433. vibe_surf/backend/frontend/assets/skip-back-DYGAhVaZ.js +6 -0
  1434. vibe_surf/backend/frontend/assets/skip-forward-Cmo14QdF.js +6 -0
  1435. vibe_surf/backend/frontend/assets/skull-C7f59NOY.js +6 -0
  1436. vibe_surf/backend/frontend/assets/slack-BZCH_jmq.js +6 -0
  1437. vibe_surf/backend/frontend/assets/slash-D508NrMk.js +6 -0
  1438. vibe_surf/backend/frontend/assets/slice-X7STCda9.js +6 -0
  1439. vibe_surf/backend/frontend/assets/sliders-horizontal-CfzazJ4Z.js +6 -0
  1440. vibe_surf/backend/frontend/assets/sliders-vertical-CDP8j0-D.js +6 -0
  1441. vibe_surf/backend/frontend/assets/smartphone-charging-BbvzdjcK.js +6 -0
  1442. vibe_surf/backend/frontend/assets/smartphone-nfc-BUwpyAe9.js +6 -0
  1443. vibe_surf/backend/frontend/assets/smartphone-vlXaYd7G.js +6 -0
  1444. vibe_surf/backend/frontend/assets/smile-WIoPOV75.js +6 -0
  1445. vibe_surf/backend/frontend/assets/smile-plus-C7_2KI6t.js +6 -0
  1446. vibe_surf/backend/frontend/assets/snail-DiXb1jdv.js +6 -0
  1447. vibe_surf/backend/frontend/assets/snowflake-DbaQxR5F.js +6 -0
  1448. vibe_surf/backend/frontend/assets/sofa-3gaNXRHk.js +6 -0
  1449. vibe_surf/backend/frontend/assets/soup-BJWMbLNe.js +6 -0
  1450. vibe_surf/backend/frontend/assets/space-BgZ7M3kc.js +6 -0
  1451. vibe_surf/backend/frontend/assets/spade-DmCswPx6.js +6 -0
  1452. vibe_surf/backend/frontend/assets/sparkle-BcIeelqq.js +6 -0
  1453. vibe_surf/backend/frontend/assets/sparkles-EZvTd48X.js +6 -0
  1454. vibe_surf/backend/frontend/assets/speaker-cy8pASlT.js +6 -0
  1455. vibe_surf/backend/frontend/assets/speech-D2DBEjZh.js +6 -0
  1456. vibe_surf/backend/frontend/assets/spell-check-2-CT6j-nnq.js +6 -0
  1457. vibe_surf/backend/frontend/assets/spell-check-BLpw53aW.js +6 -0
  1458. vibe_surf/backend/frontend/assets/spline-Dj4_WV_J.js +6 -0
  1459. vibe_surf/backend/frontend/assets/spline-pointer-B70ZX6Jx.js +6 -0
  1460. vibe_surf/backend/frontend/assets/split-BUN_2DPl.js +6 -0
  1461. vibe_surf/backend/frontend/assets/spray-can--CM3S7I1.js +6 -0
  1462. vibe_surf/backend/frontend/assets/sprout-DHRMaLE1.js +6 -0
  1463. vibe_surf/backend/frontend/assets/square-D8mSOgWq.js +6 -0
  1464. vibe_surf/backend/frontend/assets/square-activity-HHBbub6x.js +6 -0
  1465. vibe_surf/backend/frontend/assets/square-arrow-down-DNqGulvF.js +6 -0
  1466. vibe_surf/backend/frontend/assets/square-arrow-down-left-mkEWcF4d.js +6 -0
  1467. vibe_surf/backend/frontend/assets/square-arrow-down-right-BWWZbJCm.js +6 -0
  1468. vibe_surf/backend/frontend/assets/square-arrow-left-DJJcrIld.js +6 -0
  1469. vibe_surf/backend/frontend/assets/square-arrow-out-down-left-C4KWrLml.js +6 -0
  1470. vibe_surf/backend/frontend/assets/square-arrow-out-down-right-CDptR_XX.js +6 -0
  1471. vibe_surf/backend/frontend/assets/square-arrow-out-up-left-BwHPp6UO.js +6 -0
  1472. vibe_surf/backend/frontend/assets/square-arrow-out-up-right-tzaptCUV.js +6 -0
  1473. vibe_surf/backend/frontend/assets/square-arrow-right-DVcoFdqS.js +6 -0
  1474. vibe_surf/backend/frontend/assets/square-arrow-up-BupGJOnJ.js +6 -0
  1475. vibe_surf/backend/frontend/assets/square-arrow-up-left-w635cnEo.js +6 -0
  1476. vibe_surf/backend/frontend/assets/square-arrow-up-right-C1ac-f2n.js +6 -0
  1477. vibe_surf/backend/frontend/assets/square-asterisk-D6Cym7Xv.js +6 -0
  1478. vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-BVNT9RSH.js +6 -0
  1479. vibe_surf/backend/frontend/assets/square-chart-gantt-C3dcJ6sg.js +6 -0
  1480. vibe_surf/backend/frontend/assets/square-check-S6hpNtFK.js +6 -0
  1481. vibe_surf/backend/frontend/assets/square-check-big-D9upq6ft.js +6 -0
  1482. vibe_surf/backend/frontend/assets/square-chevron-down-BA97_sqV.js +6 -0
  1483. vibe_surf/backend/frontend/assets/square-chevron-left-CLiOdSzb.js +6 -0
  1484. vibe_surf/backend/frontend/assets/square-chevron-right-t-igHrA_.js +6 -0
  1485. vibe_surf/backend/frontend/assets/square-chevron-up-CbvwXecv.js +6 -0
  1486. vibe_surf/backend/frontend/assets/square-code-DUqDccm-.js +6 -0
  1487. vibe_surf/backend/frontend/assets/square-dashed-DAZVB5Ow.js +6 -0
  1488. vibe_surf/backend/frontend/assets/square-dashed-bottom-DIHrivbQ.js +6 -0
  1489. vibe_surf/backend/frontend/assets/square-dashed-bottom-code-BurWoYrF.js +6 -0
  1490. vibe_surf/backend/frontend/assets/square-dashed-kanban-DJ3Nf0yW.js +6 -0
  1491. vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-D83fN529.js +6 -0
  1492. vibe_surf/backend/frontend/assets/square-divide-DfK2w5k3.js +6 -0
  1493. vibe_surf/backend/frontend/assets/square-dot-E08KHmsT.js +6 -0
  1494. vibe_surf/backend/frontend/assets/square-equal-DmilLTYr.js +6 -0
  1495. vibe_surf/backend/frontend/assets/square-function-Bmr5-y7k.js +6 -0
  1496. vibe_surf/backend/frontend/assets/square-kanban-C_Y3PzRd.js +6 -0
  1497. vibe_surf/backend/frontend/assets/square-library-Bljg4ak_.js +6 -0
  1498. vibe_surf/backend/frontend/assets/square-m-Bm5eCYFz.js +6 -0
  1499. vibe_surf/backend/frontend/assets/square-menu-2PwZ-t8v.js +6 -0
  1500. vibe_surf/backend/frontend/assets/square-minus-DB2rsSIh.js +6 -0
  1501. vibe_surf/backend/frontend/assets/square-mouse-pointer-Yggd861r.js +6 -0
  1502. vibe_surf/backend/frontend/assets/square-parking-0BMseCWh.js +6 -0
  1503. vibe_surf/backend/frontend/assets/square-parking-off-wL1Aoald.js +6 -0
  1504. vibe_surf/backend/frontend/assets/square-pen-DUgkyJvx.js +6 -0
  1505. vibe_surf/backend/frontend/assets/square-percent-D1N2DxXQ.js +6 -0
  1506. vibe_surf/backend/frontend/assets/square-pi-BAB-yOqi.js +6 -0
  1507. vibe_surf/backend/frontend/assets/square-pilcrow-YTTQD0YQ.js +6 -0
  1508. vibe_surf/backend/frontend/assets/square-play-D0CcTkr2.js +6 -0
  1509. vibe_surf/backend/frontend/assets/square-plus-BdjiqtXM.js +6 -0
  1510. vibe_surf/backend/frontend/assets/square-power-8LY4_Isa.js +6 -0
  1511. vibe_surf/backend/frontend/assets/square-radical-DC1m2SHK.js +6 -0
  1512. vibe_surf/backend/frontend/assets/square-round-corner-CYVVFjQx.js +6 -0
  1513. vibe_surf/backend/frontend/assets/square-scissors-BZUPjoru.js +6 -0
  1514. vibe_surf/backend/frontend/assets/square-sigma-CTgs2Ekn.js +6 -0
  1515. vibe_surf/backend/frontend/assets/square-slash-DoZz--aG.js +6 -0
  1516. vibe_surf/backend/frontend/assets/square-split-horizontal-C5VA-YKL.js +6 -0
  1517. vibe_surf/backend/frontend/assets/square-split-vertical-br-5Oe8V.js +6 -0
  1518. vibe_surf/backend/frontend/assets/square-square-D-S2fMQV.js +6 -0
  1519. vibe_surf/backend/frontend/assets/square-stack-BpnJ--p7.js +6 -0
  1520. vibe_surf/backend/frontend/assets/square-terminal-D1xyM5zr.js +6 -0
  1521. vibe_surf/backend/frontend/assets/square-user-BM_UbMq8.js +6 -0
  1522. vibe_surf/backend/frontend/assets/square-user-round-BjbE9Ex0.js +6 -0
  1523. vibe_surf/backend/frontend/assets/square-x-ndOAHZyv.js +6 -0
  1524. vibe_surf/backend/frontend/assets/squares-exclude-i1Cuf4eN.js +6 -0
  1525. vibe_surf/backend/frontend/assets/squares-intersect-B_KkkCiA.js +6 -0
  1526. vibe_surf/backend/frontend/assets/squares-subtract-0Gqt-l9r.js +6 -0
  1527. vibe_surf/backend/frontend/assets/squares-unite-fFpeFJy_.js +6 -0
  1528. vibe_surf/backend/frontend/assets/squircle-BWK1XIab.js +6 -0
  1529. vibe_surf/backend/frontend/assets/squirrel-BemFtLhO.js +6 -0
  1530. vibe_surf/backend/frontend/assets/stamp-n1s-2-vi.js +6 -0
  1531. vibe_surf/backend/frontend/assets/star-JqPDEQO0.js +6 -0
  1532. vibe_surf/backend/frontend/assets/star-half-Ctp-6K3f.js +6 -0
  1533. vibe_surf/backend/frontend/assets/star-off-DTrat8iZ.js +6 -0
  1534. vibe_surf/backend/frontend/assets/step-back-_f3vl_Mc.js +6 -0
  1535. vibe_surf/backend/frontend/assets/step-forward-U0c2umRC.js +6 -0
  1536. vibe_surf/backend/frontend/assets/stethoscope-BcOEujBx.js +6 -0
  1537. vibe_surf/backend/frontend/assets/sticker-BUUkREla.js +6 -0
  1538. vibe_surf/backend/frontend/assets/sticky-note-Dau-uEqX.js +6 -0
  1539. vibe_surf/backend/frontend/assets/store-CDDYJAqq.js +6 -0
  1540. vibe_surf/backend/frontend/assets/stretch-horizontal-C7d6gxZ-.js +6 -0
  1541. vibe_surf/backend/frontend/assets/stretch-vertical-DwZ7L62M.js +6 -0
  1542. vibe_surf/backend/frontend/assets/strikethrough-tErW_78t.js +6 -0
  1543. vibe_surf/backend/frontend/assets/subscript-AEnn7z1-.js +6 -0
  1544. vibe_surf/backend/frontend/assets/sun-CUhBOUww.js +6 -0
  1545. vibe_surf/backend/frontend/assets/sun-dim-mjCyc7b-.js +6 -0
  1546. vibe_surf/backend/frontend/assets/sun-medium-BlmZvs1P.js +6 -0
  1547. vibe_surf/backend/frontend/assets/sun-moon-DNDzmGy_.js +6 -0
  1548. vibe_surf/backend/frontend/assets/sun-snow-btXFhvOs.js +6 -0
  1549. vibe_surf/backend/frontend/assets/sunrise-BPn0BvIU.js +6 -0
  1550. vibe_surf/backend/frontend/assets/sunset-Bn6AsuaW.js +6 -0
  1551. vibe_surf/backend/frontend/assets/superscript-CCWWx6fn.js +6 -0
  1552. vibe_surf/backend/frontend/assets/swatch-book-DAO0_j5l.js +6 -0
  1553. vibe_surf/backend/frontend/assets/swiss-franc-DvPAMwVi.js +6 -0
  1554. vibe_surf/backend/frontend/assets/switch-camera-DDK45wsa.js +6 -0
  1555. vibe_surf/backend/frontend/assets/sword-CdjQ03Nx.js +6 -0
  1556. vibe_surf/backend/frontend/assets/swords-DwnTqFFL.js +6 -0
  1557. vibe_surf/backend/frontend/assets/syringe-DMHMk3I_.js +6 -0
  1558. vibe_surf/backend/frontend/assets/table-2-fXlN5mfo.js +6 -0
  1559. vibe_surf/backend/frontend/assets/table-DywCQdAx.js +6 -0
  1560. vibe_surf/backend/frontend/assets/table-cells-merge-1rBoZbUH.js +6 -0
  1561. vibe_surf/backend/frontend/assets/table-cells-split-DvDXy8Zk.js +6 -0
  1562. vibe_surf/backend/frontend/assets/table-columns-split-5lVHYUrA.js +6 -0
  1563. vibe_surf/backend/frontend/assets/table-of-contents-CiE6KpvH.js +6 -0
  1564. vibe_surf/backend/frontend/assets/table-properties-C5MLGyyn.js +6 -0
  1565. vibe_surf/backend/frontend/assets/table-rows-split-6tWPhAGA.js +6 -0
  1566. vibe_surf/backend/frontend/assets/tablet-onVj1N8V.js +6 -0
  1567. vibe_surf/backend/frontend/assets/tablet-smartphone-Dy1zcLBR.js +6 -0
  1568. vibe_surf/backend/frontend/assets/tablets-TV4RvSqQ.js +6 -0
  1569. vibe_surf/backend/frontend/assets/tag-COdo6PC1.js +6 -0
  1570. vibe_surf/backend/frontend/assets/tags-C_PyXxvo.js +6 -0
  1571. vibe_surf/backend/frontend/assets/tally-1-TLUCkMfT.js +6 -0
  1572. vibe_surf/backend/frontend/assets/tally-2-40s-WtRw.js +6 -0
  1573. vibe_surf/backend/frontend/assets/tally-3-Cr7c6JyQ.js +6 -0
  1574. vibe_surf/backend/frontend/assets/tally-4-CgMb3kf-.js +6 -0
  1575. vibe_surf/backend/frontend/assets/tally-5-BYhkAnpk.js +6 -0
  1576. vibe_surf/backend/frontend/assets/tangent-Cch1S25B.js +6 -0
  1577. vibe_surf/backend/frontend/assets/target-BxbxOJBi.js +6 -0
  1578. vibe_surf/backend/frontend/assets/telescope-DB7CDRtv.js +6 -0
  1579. vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
  1580. vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
  1581. vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
  1582. vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
  1583. vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
  1584. vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
  1585. vibe_surf/backend/frontend/assets/tent-CipD8dRg.js +6 -0
  1586. vibe_surf/backend/frontend/assets/tent-tree-HUvCq3o8.js +6 -0
  1587. vibe_surf/backend/frontend/assets/terminal-CfniKHGt.js +6 -0
  1588. vibe_surf/backend/frontend/assets/test-tube-DcBZWnPV.js +6 -0
  1589. vibe_surf/backend/frontend/assets/test-tube-diagonal-DLDAq2x-.js +6 -0
  1590. vibe_surf/backend/frontend/assets/test-tubes-DEqLhART.js +6 -0
  1591. vibe_surf/backend/frontend/assets/text-CjNHL8YY.js +6 -0
  1592. vibe_surf/backend/frontend/assets/text-cursor-Bfyx77E0.js +6 -0
  1593. vibe_surf/backend/frontend/assets/text-cursor-input-DEntniNC.js +6 -0
  1594. vibe_surf/backend/frontend/assets/text-quote-CuHDE9wz.js +6 -0
  1595. vibe_surf/backend/frontend/assets/text-search-BVoMtXGi.js +6 -0
  1596. vibe_surf/backend/frontend/assets/text-select-C5UoP5L8.js +6 -0
  1597. vibe_surf/backend/frontend/assets/theater-5p2oJrBR.js +6 -0
  1598. vibe_surf/backend/frontend/assets/thermometer-UK9pmYRI.js +6 -0
  1599. vibe_surf/backend/frontend/assets/thermometer-snowflake-kQI9FMjj.js +6 -0
  1600. vibe_surf/backend/frontend/assets/thermometer-sun-DFR8N7SP.js +6 -0
  1601. vibe_surf/backend/frontend/assets/thumbs-down-D9fAJ2gG.js +6 -0
  1602. vibe_surf/backend/frontend/assets/thumbs-up-DoKS_oaD.js +6 -0
  1603. vibe_surf/backend/frontend/assets/ticket-Cesz_aOn.js +6 -0
  1604. vibe_surf/backend/frontend/assets/ticket-check-hrSzboJJ.js +6 -0
  1605. vibe_surf/backend/frontend/assets/ticket-minus-DSlyjy1m.js +6 -0
  1606. vibe_surf/backend/frontend/assets/ticket-percent-B1fhQdh4.js +6 -0
  1607. vibe_surf/backend/frontend/assets/ticket-plus-Dimk4-uQ.js +6 -0
  1608. vibe_surf/backend/frontend/assets/ticket-slash-BbNYJCVm.js +6 -0
  1609. vibe_surf/backend/frontend/assets/ticket-x-DZmFrk6f.js +6 -0
  1610. vibe_surf/backend/frontend/assets/tickets-oFgC5KK5.js +6 -0
  1611. vibe_surf/backend/frontend/assets/tickets-plane-7zFRiAsP.js +6 -0
  1612. vibe_surf/backend/frontend/assets/timer-Dus7G8uq.js +6 -0
  1613. vibe_surf/backend/frontend/assets/timer-off-DwuoxoCG.js +6 -0
  1614. vibe_surf/backend/frontend/assets/timer-reset-6QQ9CB1x.js +6 -0
  1615. vibe_surf/backend/frontend/assets/toggle-left-CP39bKF1.js +6 -0
  1616. vibe_surf/backend/frontend/assets/toggle-right-BKQovK3O.js +6 -0
  1617. vibe_surf/backend/frontend/assets/toilet-BBNGmlkm.js +6 -0
  1618. vibe_surf/backend/frontend/assets/tornado-CmCC8lkh.js +6 -0
  1619. vibe_surf/backend/frontend/assets/torus-DksvYfUU.js +6 -0
  1620. vibe_surf/backend/frontend/assets/touchpad-B_iE1cT_.js +6 -0
  1621. vibe_surf/backend/frontend/assets/touchpad-off-C3NRWKvk.js +6 -0
  1622. vibe_surf/backend/frontend/assets/tower-control-C9XxmqPK.js +6 -0
  1623. vibe_surf/backend/frontend/assets/toy-brick-BAWK5m2R.js +6 -0
  1624. vibe_surf/backend/frontend/assets/tractor-ZemWoG5M.js +6 -0
  1625. vibe_surf/backend/frontend/assets/traffic-cone-CQQptVNY.js +6 -0
  1626. vibe_surf/backend/frontend/assets/train-front-C6IEoUQj.js +6 -0
  1627. vibe_surf/backend/frontend/assets/train-front-tunnel-CRzVUubn.js +6 -0
  1628. vibe_surf/backend/frontend/assets/train-track-DQ1Jx75q.js +6 -0
  1629. vibe_surf/backend/frontend/assets/tram-front-CKDE6nBl.js +6 -0
  1630. vibe_surf/backend/frontend/assets/transgender-DRQWjJQq.js +6 -0
  1631. vibe_surf/backend/frontend/assets/trash-C7FJQWXt.js +6 -0
  1632. vibe_surf/backend/frontend/assets/tree-deciduous-C_NdJWmQ.js +6 -0
  1633. vibe_surf/backend/frontend/assets/tree-palm-rAQ0YuEF.js +6 -0
  1634. vibe_surf/backend/frontend/assets/tree-pine-BC-4ht4p.js +6 -0
  1635. vibe_surf/backend/frontend/assets/trees-Br8pDJw0.js +6 -0
  1636. vibe_surf/backend/frontend/assets/trello-BQynNo87.js +6 -0
  1637. vibe_surf/backend/frontend/assets/trending-down-m6hdRTZC.js +6 -0
  1638. vibe_surf/backend/frontend/assets/trending-up-DEzTc77q.js +6 -0
  1639. vibe_surf/backend/frontend/assets/trending-up-down-CdmVa8T1.js +6 -0
  1640. vibe_surf/backend/frontend/assets/triangle-DxElnb7f.js +6 -0
  1641. vibe_surf/backend/frontend/assets/triangle-alert-BmgW8WWD.js +6 -0
  1642. vibe_surf/backend/frontend/assets/triangle-dashed-fyl8Ux-f.js +6 -0
  1643. vibe_surf/backend/frontend/assets/triangle-right-Bn5gxIA-.js +6 -0
  1644. vibe_surf/backend/frontend/assets/trophy-gb1-2rUo.js +6 -0
  1645. vibe_surf/backend/frontend/assets/truck-CyEUIB3S.js +6 -0
  1646. vibe_surf/backend/frontend/assets/truck-electric-C_IB9gt8.js +6 -0
  1647. vibe_surf/backend/frontend/assets/turtle-JiowR0Q_.js +6 -0
  1648. vibe_surf/backend/frontend/assets/tv-B0tAK-iR.js +6 -0
  1649. vibe_surf/backend/frontend/assets/tv-minimal-BzNmtVcb.js +6 -0
  1650. vibe_surf/backend/frontend/assets/tv-minimal-play-DY3HMhTZ.js +6 -0
  1651. vibe_surf/backend/frontend/assets/twitch-X3gysvi1.js +6 -0
  1652. vibe_surf/backend/frontend/assets/twitter-DgWlCFbw.js +6 -0
  1653. vibe_surf/backend/frontend/assets/type-CbzhcXZj.js +6 -0
  1654. vibe_surf/backend/frontend/assets/type-outline-EJOgqfeY.js +6 -0
  1655. vibe_surf/backend/frontend/assets/umbrella-2CrWS8G9.js +6 -0
  1656. vibe_surf/backend/frontend/assets/umbrella-off-wnubYDr5.js +6 -0
  1657. vibe_surf/backend/frontend/assets/underline-kox2pBOb.js +6 -0
  1658. vibe_surf/backend/frontend/assets/undo-2-CMFxk0AM.js +6 -0
  1659. vibe_surf/backend/frontend/assets/undo-BB6rCcPu.js +6 -0
  1660. vibe_surf/backend/frontend/assets/undo-dot-PizHjiGF.js +6 -0
  1661. vibe_surf/backend/frontend/assets/unfold-horizontal-DJYCPLbF.js +6 -0
  1662. vibe_surf/backend/frontend/assets/unfold-vertical-xsaYrtue.js +6 -0
  1663. vibe_surf/backend/frontend/assets/ungroup-COP2DC2I.js +6 -0
  1664. vibe_surf/backend/frontend/assets/university-Bydtu_C0.js +6 -0
  1665. vibe_surf/backend/frontend/assets/unlink-2-CGh6udmI.js +6 -0
  1666. vibe_surf/backend/frontend/assets/unlink-Cl0N-H5R.js +6 -0
  1667. vibe_surf/backend/frontend/assets/unplug-CvUy0kbs.js +6 -0
  1668. vibe_surf/backend/frontend/assets/upload-CsiQhdGb.js +6 -0
  1669. vibe_surf/backend/frontend/assets/usb-DgJciZ8D.js +6 -0
  1670. vibe_surf/backend/frontend/assets/use-post-add-user-X-JStdcv.js +1 -0
  1671. vibe_surf/backend/frontend/assets/user-check-oTj-oMD1.js +6 -0
  1672. vibe_surf/backend/frontend/assets/user-cog-De5lo6V4.js +6 -0
  1673. vibe_surf/backend/frontend/assets/user-lock-Cd6PZI_W.js +6 -0
  1674. vibe_surf/backend/frontend/assets/user-minus-Bk4X5ZEo.js +6 -0
  1675. vibe_surf/backend/frontend/assets/user-pen-DdI66MUk.js +6 -0
  1676. vibe_surf/backend/frontend/assets/user-plus-CU5763YF.js +6 -0
  1677. vibe_surf/backend/frontend/assets/user-rQhBQtW6.js +6 -0
  1678. vibe_surf/backend/frontend/assets/user-round-Balh9Ngi.js +6 -0
  1679. vibe_surf/backend/frontend/assets/user-round-check-CNnGyjh3.js +6 -0
  1680. vibe_surf/backend/frontend/assets/user-round-cog-cytI9ohB.js +6 -0
  1681. vibe_surf/backend/frontend/assets/user-round-minus-BPLiMNlF.js +6 -0
  1682. vibe_surf/backend/frontend/assets/user-round-pen-DYmI1nrr.js +6 -0
  1683. vibe_surf/backend/frontend/assets/user-round-plus-vC9pdrP-.js +6 -0
  1684. vibe_surf/backend/frontend/assets/user-round-search-B7B-daNE.js +6 -0
  1685. vibe_surf/backend/frontend/assets/user-round-x-DyuI5YoS.js +6 -0
  1686. vibe_surf/backend/frontend/assets/user-search-BKYbqUOf.js +6 -0
  1687. vibe_surf/backend/frontend/assets/user-x-DJ3ciRY5.js +6 -0
  1688. vibe_surf/backend/frontend/assets/users-BuFcoxWH.js +6 -0
  1689. vibe_surf/backend/frontend/assets/users-round-Bmf9zVDL.js +6 -0
  1690. vibe_surf/backend/frontend/assets/utensils-DbpPXdpJ.js +6 -0
  1691. vibe_surf/backend/frontend/assets/utensils-crossed-aDCkAivJ.js +6 -0
  1692. vibe_surf/backend/frontend/assets/utility-pole-Bc7lymCy.js +6 -0
  1693. vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
  1694. vibe_surf/backend/frontend/assets/variable-DyXUbeWo.js +6 -0
  1695. vibe_surf/backend/frontend/assets/vault-BBLLA0yD.js +6 -0
  1696. vibe_surf/backend/frontend/assets/vegan-DkXrMg_9.js +6 -0
  1697. vibe_surf/backend/frontend/assets/venetian-mask-DSF__6pM.js +6 -0
  1698. vibe_surf/backend/frontend/assets/venus-BqrM2Wbm.js +6 -0
  1699. vibe_surf/backend/frontend/assets/venus-and-mars-CocpgQS_.js +6 -0
  1700. vibe_surf/backend/frontend/assets/vibrate-CSaEPSAw.js +6 -0
  1701. vibe_surf/backend/frontend/assets/vibrate-off-BkeOYWie.js +6 -0
  1702. vibe_surf/backend/frontend/assets/video-CDDAj1Mz.js +6 -0
  1703. vibe_surf/backend/frontend/assets/video-off-BSlBZ5ca.js +6 -0
  1704. vibe_surf/backend/frontend/assets/videotape-ChK7t0IE.js +6 -0
  1705. vibe_surf/backend/frontend/assets/view-BTeYNd7e.js +6 -0
  1706. vibe_surf/backend/frontend/assets/voicemail-DXRJxFC2.js +6 -0
  1707. vibe_surf/backend/frontend/assets/volleyball-0jePXF2X.js +6 -0
  1708. vibe_surf/backend/frontend/assets/volume-1-CBKuT4gx.js +6 -0
  1709. vibe_surf/backend/frontend/assets/volume-CJ3kb1UJ.js +6 -0
  1710. vibe_surf/backend/frontend/assets/volume-off-Drh6kI0N.js +6 -0
  1711. vibe_surf/backend/frontend/assets/vote-D7rR24Uv.js +6 -0
  1712. vibe_surf/backend/frontend/assets/wallet-cards-BmUXKVPo.js +6 -0
  1713. vibe_surf/backend/frontend/assets/wallet-minimal-CfQ29GXX.js +6 -0
  1714. vibe_surf/backend/frontend/assets/wallet-odbnitLx.js +6 -0
  1715. vibe_surf/backend/frontend/assets/wallpaper--aY9LRKu.js +6 -0
  1716. vibe_surf/backend/frontend/assets/wand-XfMLbt7W.js +6 -0
  1717. vibe_surf/backend/frontend/assets/wand-sparkles-EKZGPSQU.js +6 -0
  1718. vibe_surf/backend/frontend/assets/warehouse-CQb33kTK.js +6 -0
  1719. vibe_surf/backend/frontend/assets/washing-machine-BcdChWag.js +6 -0
  1720. vibe_surf/backend/frontend/assets/watch-BAxj0MpS.js +6 -0
  1721. vibe_surf/backend/frontend/assets/waves-DSxAAEDo.js +6 -0
  1722. vibe_surf/backend/frontend/assets/waves-ladder-CQM5bq9O.js +6 -0
  1723. vibe_surf/backend/frontend/assets/waypoints-X-1I6GAF.js +6 -0
  1724. vibe_surf/backend/frontend/assets/webcam-D0M9jAcy.js +6 -0
  1725. vibe_surf/backend/frontend/assets/webhook-B4-tv0Ay.js +6 -0
  1726. vibe_surf/backend/frontend/assets/webhook-off-DgBYoB9w.js +6 -0
  1727. vibe_surf/backend/frontend/assets/weight-CbJjMaGD.js +6 -0
  1728. vibe_surf/backend/frontend/assets/wheat-DRqMfslQ.js +6 -0
  1729. vibe_surf/backend/frontend/assets/wheat-off-DN3CMot9.js +6 -0
  1730. vibe_surf/backend/frontend/assets/whole-word-rys0-nDs.js +6 -0
  1731. vibe_surf/backend/frontend/assets/wifi-B6YlXqZQ.js +6 -0
  1732. vibe_surf/backend/frontend/assets/wifi-high-BN7s1tEO.js +6 -0
  1733. vibe_surf/backend/frontend/assets/wifi-low-DqS_NT9C.js +6 -0
  1734. vibe_surf/backend/frontend/assets/wifi-off-CRhK1VN6.js +6 -0
  1735. vibe_surf/backend/frontend/assets/wifi-pen-gMAH3nO9.js +6 -0
  1736. vibe_surf/backend/frontend/assets/wifi-zero-CL35Rk1s.js +6 -0
  1737. vibe_surf/backend/frontend/assets/wind-CABDXl30.js +6 -0
  1738. vibe_surf/backend/frontend/assets/wind-arrow-down-CCe6Rj-A.js +6 -0
  1739. vibe_surf/backend/frontend/assets/wine-CADKMVqu.js +6 -0
  1740. vibe_surf/backend/frontend/assets/wine-off-DKIC96cS.js +6 -0
  1741. vibe_surf/backend/frontend/assets/workflow-l7VJgDwH.js +6 -0
  1742. vibe_surf/backend/frontend/assets/worm-Bd0iMQEP.js +6 -0
  1743. vibe_surf/backend/frontend/assets/wrap-text-Cunt4p5D.js +6 -0
  1744. vibe_surf/backend/frontend/assets/wrench-dRH2B7Yl.js +6 -0
  1745. vibe_surf/backend/frontend/assets/youtube-DMk3ysts.js +6 -0
  1746. vibe_surf/backend/frontend/assets/zap-DLlvIcB2.js +6 -0
  1747. vibe_surf/backend/frontend/assets/zap-off-Bxyq6wwx.js +6 -0
  1748. vibe_surf/backend/frontend/favicon.ico +0 -0
  1749. vibe_surf/backend/frontend/index.html +24 -0
  1750. vibe_surf/backend/frontend/manifest.json +31 -0
  1751. vibe_surf/backend/llm_config.py +225 -0
  1752. vibe_surf/backend/main.py +793 -0
  1753. vibe_surf/backend/shared_state.py +1110 -0
  1754. vibe_surf/backend/utils/__init__.py +7 -0
  1755. vibe_surf/backend/utils/encryption.py +172 -0
  1756. vibe_surf/backend/utils/llm_factory.py +274 -0
  1757. vibe_surf/backend/utils/utils.py +42 -0
  1758. vibe_surf/backend/utils/workflow_converter.py +570 -0
  1759. vibe_surf/backend/voice_model_config.py +25 -0
  1760. vibe_surf/browser/__init__.py +8 -0
  1761. vibe_surf/browser/agen_browser_profile.py +136 -0
  1762. vibe_surf/browser/agent_browser_session.py +1244 -0
  1763. vibe_surf/browser/browser_manager.py +268 -0
  1764. vibe_surf/browser/find_page_element.py +1100 -0
  1765. vibe_surf/browser/page_operations.py +222 -0
  1766. vibe_surf/browser/utils.py +785 -0
  1767. vibe_surf/browser/watchdogs/__init__.py +0 -0
  1768. vibe_surf/browser/watchdogs/action_watchdog.py +109 -0
  1769. vibe_surf/browser/watchdogs/dom_watchdog.py +249 -0
  1770. vibe_surf/chrome_extension/background.js +908 -0
  1771. vibe_surf/chrome_extension/config.js +56 -0
  1772. vibe_surf/chrome_extension/content.js +745 -0
  1773. vibe_surf/chrome_extension/dev-reload.js +47 -0
  1774. vibe_surf/chrome_extension/icons/logo.icns +0 -0
  1775. vibe_surf/chrome_extension/icons/logo.png +0 -0
  1776. vibe_surf/chrome_extension/manifest.json +70 -0
  1777. vibe_surf/chrome_extension/permission-iframe.html +38 -0
  1778. vibe_surf/chrome_extension/permission-request.html +104 -0
  1779. vibe_surf/chrome_extension/popup.html +134 -0
  1780. vibe_surf/chrome_extension/scripts/api-client.js +755 -0
  1781. vibe_surf/chrome_extension/scripts/file-manager.js +523 -0
  1782. vibe_surf/chrome_extension/scripts/history-manager.js +658 -0
  1783. vibe_surf/chrome_extension/scripts/main.js +547 -0
  1784. vibe_surf/chrome_extension/scripts/markdown-it.min.js +3 -0
  1785. vibe_surf/chrome_extension/scripts/modal-manager.js +496 -0
  1786. vibe_surf/chrome_extension/scripts/news-carousel.js +543 -0
  1787. vibe_surf/chrome_extension/scripts/permission-iframe-request.js +188 -0
  1788. vibe_surf/chrome_extension/scripts/permission-request.js +118 -0
  1789. vibe_surf/chrome_extension/scripts/session-manager.js +800 -0
  1790. vibe_surf/chrome_extension/scripts/settings-general.js +483 -0
  1791. vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
  1792. vibe_surf/chrome_extension/scripts/settings-manager.js +275 -0
  1793. vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
  1794. vibe_surf/chrome_extension/scripts/settings-workflow.js +3530 -0
  1795. vibe_surf/chrome_extension/scripts/ui-manager.js +3799 -0
  1796. vibe_surf/chrome_extension/scripts/user-settings-storage.js +422 -0
  1797. vibe_surf/chrome_extension/scripts/version.js +3 -0
  1798. vibe_surf/chrome_extension/scripts/voice-recorder.js +514 -0
  1799. vibe_surf/chrome_extension/scripts/workflow-recorder.js +651 -0
  1800. vibe_surf/chrome_extension/sidepanel.html +1200 -0
  1801. vibe_surf/chrome_extension/styles/activity.css +934 -0
  1802. vibe_surf/chrome_extension/styles/animations.css +471 -0
  1803. vibe_surf/chrome_extension/styles/base.css +76 -0
  1804. vibe_surf/chrome_extension/styles/components.css +1044 -0
  1805. vibe_surf/chrome_extension/styles/history-modal.css +791 -0
  1806. vibe_surf/chrome_extension/styles/input.css +760 -0
  1807. vibe_surf/chrome_extension/styles/layout.css +247 -0
  1808. vibe_surf/chrome_extension/styles/news-carousel.css +530 -0
  1809. vibe_surf/chrome_extension/styles/responsive.css +454 -0
  1810. vibe_surf/chrome_extension/styles/settings-environment.css +303 -0
  1811. vibe_surf/chrome_extension/styles/settings-forms.css +389 -0
  1812. vibe_surf/chrome_extension/styles/settings-integrations.css +945 -0
  1813. vibe_surf/chrome_extension/styles/settings-modal.css +145 -0
  1814. vibe_surf/chrome_extension/styles/settings-profiles.css +244 -0
  1815. vibe_surf/chrome_extension/styles/settings-responsive.css +176 -0
  1816. vibe_surf/chrome_extension/styles/settings-utilities.css +25 -0
  1817. vibe_surf/chrome_extension/styles/settings-workflow.css +3013 -0
  1818. vibe_surf/chrome_extension/styles/variables.css +105 -0
  1819. vibe_surf/cli.py +562 -0
  1820. vibe_surf/common.py +35 -0
  1821. vibe_surf/langflow/__init__.py +0 -0
  1822. vibe_surf/langflow/__main__.py +954 -0
  1823. vibe_surf/langflow/alembic/README +1 -0
  1824. vibe_surf/langflow/alembic/env.py +124 -0
  1825. vibe_surf/langflow/alembic/script.py.mako +31 -0
  1826. vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
  1827. vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
  1828. vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  1829. vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
  1830. vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
  1831. vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
  1832. vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
  1833. vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
  1834. vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
  1835. vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
  1836. vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
  1837. vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
  1838. vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
  1839. vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
  1840. vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
  1841. vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
  1842. vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
  1843. vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
  1844. vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
  1845. vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
  1846. vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
  1847. vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
  1848. vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
  1849. vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
  1850. vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
  1851. vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
  1852. vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
  1853. vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
  1854. vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
  1855. vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
  1856. vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
  1857. vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
  1858. vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
  1859. vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
  1860. vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
  1861. vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
  1862. vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
  1863. vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
  1864. vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
  1865. vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
  1866. vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
  1867. vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
  1868. vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
  1869. vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
  1870. vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
  1871. vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
  1872. vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
  1873. vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
  1874. vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
  1875. vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
  1876. vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
  1877. vibe_surf/langflow/alembic.ini +113 -0
  1878. vibe_surf/langflow/api/__init__.py +5 -0
  1879. vibe_surf/langflow/api/build.py +557 -0
  1880. vibe_surf/langflow/api/disconnect.py +31 -0
  1881. vibe_surf/langflow/api/health_check_router.py +65 -0
  1882. vibe_surf/langflow/api/limited_background_tasks.py +29 -0
  1883. vibe_surf/langflow/api/log_router.py +103 -0
  1884. vibe_surf/langflow/api/router.py +63 -0
  1885. vibe_surf/langflow/api/schemas.py +14 -0
  1886. vibe_surf/langflow/api/utils.py +381 -0
  1887. vibe_surf/langflow/api/v1/__init__.py +41 -0
  1888. vibe_surf/langflow/api/v1/api_key.py +88 -0
  1889. vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
  1890. vibe_surf/langflow/api/v1/base.py +50 -0
  1891. vibe_surf/langflow/api/v1/callback.py +136 -0
  1892. vibe_surf/langflow/api/v1/chat.py +675 -0
  1893. vibe_surf/langflow/api/v1/endpoints.py +800 -0
  1894. vibe_surf/langflow/api/v1/files.py +193 -0
  1895. vibe_surf/langflow/api/v1/flows.py +579 -0
  1896. vibe_surf/langflow/api/v1/folders.py +95 -0
  1897. vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
  1898. vibe_surf/langflow/api/v1/login.py +166 -0
  1899. vibe_surf/langflow/api/v1/mcp.py +137 -0
  1900. vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
  1901. vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
  1902. vibe_surf/langflow/api/v1/monitor.py +203 -0
  1903. vibe_surf/langflow/api/v1/openai_responses.py +561 -0
  1904. vibe_surf/langflow/api/v1/projects.py +447 -0
  1905. vibe_surf/langflow/api/v1/schemas.py +488 -0
  1906. vibe_surf/langflow/api/v1/starter_projects.py +17 -0
  1907. vibe_surf/langflow/api/v1/store.py +182 -0
  1908. vibe_surf/langflow/api/v1/users.py +146 -0
  1909. vibe_surf/langflow/api/v1/validate.py +48 -0
  1910. vibe_surf/langflow/api/v1/variable.py +106 -0
  1911. vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
  1912. vibe_surf/langflow/api/v2/__init__.py +7 -0
  1913. vibe_surf/langflow/api/v2/files.py +532 -0
  1914. vibe_surf/langflow/api/v2/mcp.py +330 -0
  1915. vibe_surf/langflow/base/__init__.py +0 -0
  1916. vibe_surf/langflow/base/agents/__init__.py +0 -0
  1917. vibe_surf/langflow/base/agents/agent.py +267 -0
  1918. vibe_surf/langflow/base/agents/callback.py +130 -0
  1919. vibe_surf/langflow/base/agents/context.py +109 -0
  1920. vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
  1921. vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
  1922. vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
  1923. vibe_surf/langflow/base/agents/default_prompts.py +23 -0
  1924. vibe_surf/langflow/base/agents/errors.py +15 -0
  1925. vibe_surf/langflow/base/agents/events.py +346 -0
  1926. vibe_surf/langflow/base/agents/utils.py +205 -0
  1927. vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
  1928. vibe_surf/langflow/base/astra_assistants/util.py +171 -0
  1929. vibe_surf/langflow/base/chains/__init__.py +0 -0
  1930. vibe_surf/langflow/base/chains/model.py +19 -0
  1931. vibe_surf/langflow/base/composio/__init__.py +0 -0
  1932. vibe_surf/langflow/base/composio/composio_base.py +1304 -0
  1933. vibe_surf/langflow/base/compressors/__init__.py +0 -0
  1934. vibe_surf/langflow/base/compressors/model.py +60 -0
  1935. vibe_surf/langflow/base/constants.py +46 -0
  1936. vibe_surf/langflow/base/curl/__init__.py +0 -0
  1937. vibe_surf/langflow/base/curl/parse.py +188 -0
  1938. vibe_surf/langflow/base/data/__init__.py +5 -0
  1939. vibe_surf/langflow/base/data/base_file.py +698 -0
  1940. vibe_surf/langflow/base/data/docling_utils.py +280 -0
  1941. vibe_surf/langflow/base/data/utils.py +198 -0
  1942. vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
  1943. vibe_surf/langflow/base/document_transformers/model.py +43 -0
  1944. vibe_surf/langflow/base/embeddings/__init__.py +0 -0
  1945. vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
  1946. vibe_surf/langflow/base/embeddings/model.py +26 -0
  1947. vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
  1948. vibe_surf/langflow/base/flow_processing/utils.py +86 -0
  1949. vibe_surf/langflow/base/huggingface/__init__.py +0 -0
  1950. vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
  1951. vibe_surf/langflow/base/io/__init__.py +0 -0
  1952. vibe_surf/langflow/base/io/chat.py +20 -0
  1953. vibe_surf/langflow/base/io/text.py +22 -0
  1954. vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
  1955. vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
  1956. vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
  1957. vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
  1958. vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
  1959. vibe_surf/langflow/base/langwatch/__init__.py +0 -0
  1960. vibe_surf/langflow/base/langwatch/utils.py +18 -0
  1961. vibe_surf/langflow/base/mcp/__init__.py +0 -0
  1962. vibe_surf/langflow/base/mcp/constants.py +2 -0
  1963. vibe_surf/langflow/base/mcp/util.py +1544 -0
  1964. vibe_surf/langflow/base/memory/__init__.py +0 -0
  1965. vibe_surf/langflow/base/memory/memory.py +49 -0
  1966. vibe_surf/langflow/base/memory/model.py +38 -0
  1967. vibe_surf/langflow/base/models/__init__.py +3 -0
  1968. vibe_surf/langflow/base/models/aiml_constants.py +51 -0
  1969. vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
  1970. vibe_surf/langflow/base/models/aws_constants.py +151 -0
  1971. vibe_surf/langflow/base/models/chat_result.py +76 -0
  1972. vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
  1973. vibe_surf/langflow/base/models/groq_constants.py +134 -0
  1974. vibe_surf/langflow/base/models/model.py +375 -0
  1975. vibe_surf/langflow/base/models/model_input_constants.py +299 -0
  1976. vibe_surf/langflow/base/models/model_metadata.py +41 -0
  1977. vibe_surf/langflow/base/models/model_utils.py +8 -0
  1978. vibe_surf/langflow/base/models/novita_constants.py +35 -0
  1979. vibe_surf/langflow/base/models/ollama_constants.py +49 -0
  1980. vibe_surf/langflow/base/models/openai_constants.py +121 -0
  1981. vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
  1982. vibe_surf/langflow/base/processing/__init__.py +0 -0
  1983. vibe_surf/langflow/base/prompts/__init__.py +0 -0
  1984. vibe_surf/langflow/base/prompts/api_utils.py +224 -0
  1985. vibe_surf/langflow/base/prompts/utils.py +61 -0
  1986. vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
  1987. vibe_surf/langflow/base/textsplitters/model.py +28 -0
  1988. vibe_surf/langflow/base/tools/__init__.py +0 -0
  1989. vibe_surf/langflow/base/tools/base.py +26 -0
  1990. vibe_surf/langflow/base/tools/component_tool.py +324 -0
  1991. vibe_surf/langflow/base/tools/constants.py +49 -0
  1992. vibe_surf/langflow/base/tools/flow_tool.py +131 -0
  1993. vibe_surf/langflow/base/tools/run_flow.py +227 -0
  1994. vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
  1995. vibe_surf/langflow/base/vectorstores/model.py +193 -0
  1996. vibe_surf/langflow/base/vectorstores/utils.py +22 -0
  1997. vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
  1998. vibe_surf/langflow/cli/__init__.py +0 -0
  1999. vibe_surf/langflow/cli/progress.py +233 -0
  2000. vibe_surf/langflow/components/FAISS/__init__.py +34 -0
  2001. vibe_surf/langflow/components/FAISS/faiss.py +111 -0
  2002. vibe_surf/langflow/components/Notion/__init__.py +19 -0
  2003. vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
  2004. vibe_surf/langflow/components/Notion/create_page.py +94 -0
  2005. vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
  2006. vibe_surf/langflow/components/Notion/list_pages.py +122 -0
  2007. vibe_surf/langflow/components/Notion/list_users.py +77 -0
  2008. vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
  2009. vibe_surf/langflow/components/Notion/search.py +111 -0
  2010. vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
  2011. vibe_surf/langflow/components/__init__.py +270 -0
  2012. vibe_surf/langflow/components/_importing.py +37 -0
  2013. vibe_surf/langflow/components/agentql/__init__.py +3 -0
  2014. vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
  2015. vibe_surf/langflow/components/agents/__init__.py +4 -0
  2016. vibe_surf/langflow/components/agents/agent.py +608 -0
  2017. vibe_surf/langflow/components/agents/mcp_component.py +511 -0
  2018. vibe_surf/langflow/components/aiml/__init__.py +37 -0
  2019. vibe_surf/langflow/components/aiml/aiml.py +115 -0
  2020. vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
  2021. vibe_surf/langflow/components/amazon/__init__.py +36 -0
  2022. vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
  2023. vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
  2024. vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
  2025. vibe_surf/langflow/components/anthropic/__init__.py +34 -0
  2026. vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
  2027. vibe_surf/langflow/components/apify/__init__.py +5 -0
  2028. vibe_surf/langflow/components/apify/apify_actor.py +325 -0
  2029. vibe_surf/langflow/components/arxiv/__init__.py +3 -0
  2030. vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
  2031. vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
  2032. vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  2033. vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
  2034. vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  2035. vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  2036. vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
  2037. vibe_surf/langflow/components/azure/__init__.py +37 -0
  2038. vibe_surf/langflow/components/azure/azure_openai.py +95 -0
  2039. vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
  2040. vibe_surf/langflow/components/baidu/__init__.py +32 -0
  2041. vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
  2042. vibe_surf/langflow/components/bing/__init__.py +3 -0
  2043. vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
  2044. vibe_surf/langflow/components/cassandra/__init__.py +40 -0
  2045. vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
  2046. vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
  2047. vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
  2048. vibe_surf/langflow/components/chains/__init__.py +0 -0
  2049. vibe_surf/langflow/components/chroma/__init__.py +34 -0
  2050. vibe_surf/langflow/components/chroma/chroma.py +169 -0
  2051. vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
  2052. vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
  2053. vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  2054. vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
  2055. vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
  2056. vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
  2057. vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
  2058. vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
  2059. vibe_surf/langflow/components/cohere/__init__.py +40 -0
  2060. vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
  2061. vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
  2062. vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
  2063. vibe_surf/langflow/components/composio/__init__.py +73 -0
  2064. vibe_surf/langflow/components/composio/composio_api.py +279 -0
  2065. vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
  2066. vibe_surf/langflow/components/composio/github_composio.py +11 -0
  2067. vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
  2068. vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
  2069. vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
  2070. vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
  2071. vibe_surf/langflow/components/composio/linear_composio.py +11 -0
  2072. vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
  2073. vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
  2074. vibe_surf/langflow/components/composio/slack_composio.py +11 -0
  2075. vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
  2076. vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
  2077. vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
  2078. vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
  2079. vibe_surf/langflow/components/confluence/__init__.py +3 -0
  2080. vibe_surf/langflow/components/confluence/confluence.py +84 -0
  2081. vibe_surf/langflow/components/couchbase/__init__.py +34 -0
  2082. vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
  2083. vibe_surf/langflow/components/crewai/__init__.py +49 -0
  2084. vibe_surf/langflow/components/crewai/crewai.py +108 -0
  2085. vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
  2086. vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
  2087. vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
  2088. vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
  2089. vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
  2090. vibe_surf/langflow/components/custom_component/__init__.py +34 -0
  2091. vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
  2092. vibe_surf/langflow/components/data/__init__.py +25 -0
  2093. vibe_surf/langflow/components/data/api_request.py +555 -0
  2094. vibe_surf/langflow/components/data/csv_to_data.py +96 -0
  2095. vibe_surf/langflow/components/data/directory.py +113 -0
  2096. vibe_surf/langflow/components/data/file.py +632 -0
  2097. vibe_surf/langflow/components/data/json_to_data.py +99 -0
  2098. vibe_surf/langflow/components/data/news_search.py +164 -0
  2099. vibe_surf/langflow/components/data/rss.py +69 -0
  2100. vibe_surf/langflow/components/data/sql_executor.py +99 -0
  2101. vibe_surf/langflow/components/data/url.py +299 -0
  2102. vibe_surf/langflow/components/data/web_search.py +112 -0
  2103. vibe_surf/langflow/components/data/webhook.py +56 -0
  2104. vibe_surf/langflow/components/datastax/__init__.py +70 -0
  2105. vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
  2106. vibe_surf/langflow/components/datastax/astra_db.py +68 -0
  2107. vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
  2108. vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
  2109. vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
  2110. vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
  2111. vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
  2112. vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
  2113. vibe_surf/langflow/components/datastax/create_thread.py +32 -0
  2114. vibe_surf/langflow/components/datastax/dotenv.py +35 -0
  2115. vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
  2116. vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
  2117. vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
  2118. vibe_surf/langflow/components/datastax/hcd.py +314 -0
  2119. vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
  2120. vibe_surf/langflow/components/datastax/run.py +89 -0
  2121. vibe_surf/langflow/components/deactivated/__init__.py +19 -0
  2122. vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
  2123. vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
  2124. vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
  2125. vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
  2126. vibe_surf/langflow/components/deactivated/embed.py +16 -0
  2127. vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
  2128. vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
  2129. vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
  2130. vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
  2131. vibe_surf/langflow/components/deactivated/message.py +37 -0
  2132. vibe_surf/langflow/components/deactivated/metal.py +54 -0
  2133. vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
  2134. vibe_surf/langflow/components/deactivated/retriever.py +43 -0
  2135. vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
  2136. vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
  2137. vibe_surf/langflow/components/deactivated/split_text.py +63 -0
  2138. vibe_surf/langflow/components/deactivated/store_message.py +24 -0
  2139. vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
  2140. vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
  2141. vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
  2142. vibe_surf/langflow/components/deepseek/__init__.py +34 -0
  2143. vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
  2144. vibe_surf/langflow/components/docling/__init__.py +43 -0
  2145. vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
  2146. vibe_surf/langflow/components/docling/docling_inline.py +249 -0
  2147. vibe_surf/langflow/components/docling/docling_remote.py +192 -0
  2148. vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
  2149. vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
  2150. vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
  2151. vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  2152. vibe_surf/langflow/components/elastic/__init__.py +37 -0
  2153. vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
  2154. vibe_surf/langflow/components/elastic/opensearch.py +243 -0
  2155. vibe_surf/langflow/components/embeddings/__init__.py +37 -0
  2156. vibe_surf/langflow/components/embeddings/similarity.py +77 -0
  2157. vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
  2158. vibe_surf/langflow/components/exa/__init__.py +3 -0
  2159. vibe_surf/langflow/components/exa/exa_search.py +68 -0
  2160. vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
  2161. vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
  2162. vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
  2163. vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
  2164. vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
  2165. vibe_surf/langflow/components/git/__init__.py +4 -0
  2166. vibe_surf/langflow/components/git/git.py +262 -0
  2167. vibe_surf/langflow/components/git/gitextractor.py +196 -0
  2168. vibe_surf/langflow/components/glean/__init__.py +3 -0
  2169. vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
  2170. vibe_surf/langflow/components/google/__init__.py +17 -0
  2171. vibe_surf/langflow/components/google/gmail.py +193 -0
  2172. vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
  2173. vibe_surf/langflow/components/google/google_drive.py +92 -0
  2174. vibe_surf/langflow/components/google/google_drive_search.py +152 -0
  2175. vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
  2176. vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
  2177. vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
  2178. vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
  2179. vibe_surf/langflow/components/groq/__init__.py +34 -0
  2180. vibe_surf/langflow/components/groq/groq.py +140 -0
  2181. vibe_surf/langflow/components/helpers/__init__.py +52 -0
  2182. vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
  2183. vibe_surf/langflow/components/helpers/create_list.py +40 -0
  2184. vibe_surf/langflow/components/helpers/current_date.py +42 -0
  2185. vibe_surf/langflow/components/helpers/id_generator.py +42 -0
  2186. vibe_surf/langflow/components/helpers/memory.py +253 -0
  2187. vibe_surf/langflow/components/helpers/output_parser.py +46 -0
  2188. vibe_surf/langflow/components/helpers/store_message.py +91 -0
  2189. vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
  2190. vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
  2191. vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
  2192. vibe_surf/langflow/components/huggingface/__init__.py +37 -0
  2193. vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
  2194. vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
  2195. vibe_surf/langflow/components/ibm/__init__.py +34 -0
  2196. vibe_surf/langflow/components/ibm/watsonx.py +203 -0
  2197. vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
  2198. vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
  2199. vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
  2200. vibe_surf/langflow/components/input_output/__init__.py +38 -0
  2201. vibe_surf/langflow/components/input_output/chat.py +99 -0
  2202. vibe_surf/langflow/components/input_output/chat_output.py +169 -0
  2203. vibe_surf/langflow/components/input_output/text.py +27 -0
  2204. vibe_surf/langflow/components/input_output/text_output.py +29 -0
  2205. vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
  2206. vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
  2207. vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
  2208. vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
  2209. vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
  2210. vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
  2211. vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
  2212. vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
  2213. vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
  2214. vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
  2215. vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
  2216. vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
  2217. vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
  2218. vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
  2219. vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
  2220. vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
  2221. vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
  2222. vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
  2223. vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
  2224. vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
  2225. vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
  2226. vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
  2227. vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
  2228. vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
  2229. vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
  2230. vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
  2231. vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
  2232. vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
  2233. vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
  2234. vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
  2235. vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
  2236. vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
  2237. vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
  2238. vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
  2239. vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
  2240. vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
  2241. vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
  2242. vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
  2243. vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
  2244. vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
  2245. vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
  2246. vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
  2247. vibe_surf/langflow/components/langwatch/__init__.py +3 -0
  2248. vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
  2249. vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
  2250. vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
  2251. vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
  2252. vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
  2253. vibe_surf/langflow/components/logic/__init__.py +52 -0
  2254. vibe_surf/langflow/components/logic/conditional_router.py +208 -0
  2255. vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
  2256. vibe_surf/langflow/components/logic/flow_tool.py +111 -0
  2257. vibe_surf/langflow/components/logic/listen.py +29 -0
  2258. vibe_surf/langflow/components/logic/loop.py +141 -0
  2259. vibe_surf/langflow/components/logic/notify.py +88 -0
  2260. vibe_surf/langflow/components/logic/pass_message.py +36 -0
  2261. vibe_surf/langflow/components/logic/run_flow.py +71 -0
  2262. vibe_surf/langflow/components/logic/sub_flow.py +115 -0
  2263. vibe_surf/langflow/components/maritalk/__init__.py +32 -0
  2264. vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
  2265. vibe_surf/langflow/components/mem0/__init__.py +3 -0
  2266. vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
  2267. vibe_surf/langflow/components/milvus/__init__.py +34 -0
  2268. vibe_surf/langflow/components/milvus/milvus.py +115 -0
  2269. vibe_surf/langflow/components/mistral/__init__.py +37 -0
  2270. vibe_surf/langflow/components/mistral/mistral.py +114 -0
  2271. vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
  2272. vibe_surf/langflow/components/models/__init__.py +34 -0
  2273. vibe_surf/langflow/components/models/embedding_model.py +114 -0
  2274. vibe_surf/langflow/components/models/language_model.py +144 -0
  2275. vibe_surf/langflow/components/mongodb/__init__.py +34 -0
  2276. vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
  2277. vibe_surf/langflow/components/needle/__init__.py +3 -0
  2278. vibe_surf/langflow/components/needle/needle.py +104 -0
  2279. vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
  2280. vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
  2281. vibe_surf/langflow/components/novita/__init__.py +32 -0
  2282. vibe_surf/langflow/components/novita/novita.py +130 -0
  2283. vibe_surf/langflow/components/nvidia/__init__.py +57 -0
  2284. vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
  2285. vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
  2286. vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
  2287. vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
  2288. vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
  2289. vibe_surf/langflow/components/olivya/__init__.py +3 -0
  2290. vibe_surf/langflow/components/olivya/olivya.py +116 -0
  2291. vibe_surf/langflow/components/ollama/__init__.py +37 -0
  2292. vibe_surf/langflow/components/ollama/ollama.py +330 -0
  2293. vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
  2294. vibe_surf/langflow/components/openai/__init__.py +37 -0
  2295. vibe_surf/langflow/components/openai/openai.py +100 -0
  2296. vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
  2297. vibe_surf/langflow/components/openrouter/__init__.py +32 -0
  2298. vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
  2299. vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
  2300. vibe_surf/langflow/components/perplexity/__init__.py +34 -0
  2301. vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
  2302. vibe_surf/langflow/components/pgvector/__init__.py +34 -0
  2303. vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
  2304. vibe_surf/langflow/components/pinecone/__init__.py +34 -0
  2305. vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
  2306. vibe_surf/langflow/components/processing/__init__.py +117 -0
  2307. vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
  2308. vibe_surf/langflow/components/processing/batch_run.py +205 -0
  2309. vibe_surf/langflow/components/processing/combine_text.py +40 -0
  2310. vibe_surf/langflow/components/processing/converter.py +150 -0
  2311. vibe_surf/langflow/components/processing/create_data.py +111 -0
  2312. vibe_surf/langflow/components/processing/data_operations.py +438 -0
  2313. vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
  2314. vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
  2315. vibe_surf/langflow/components/processing/extract_key.py +54 -0
  2316. vibe_surf/langflow/components/processing/filter_data.py +43 -0
  2317. vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
  2318. vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
  2319. vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
  2320. vibe_surf/langflow/components/processing/llm_router.py +499 -0
  2321. vibe_surf/langflow/components/processing/merge_data.py +91 -0
  2322. vibe_surf/langflow/components/processing/message_to_data.py +37 -0
  2323. vibe_surf/langflow/components/processing/parse_data.py +71 -0
  2324. vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
  2325. vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
  2326. vibe_surf/langflow/components/processing/parser.py +143 -0
  2327. vibe_surf/langflow/components/processing/prompt.py +67 -0
  2328. vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
  2329. vibe_surf/langflow/components/processing/regex.py +83 -0
  2330. vibe_surf/langflow/components/processing/save_file.py +208 -0
  2331. vibe_surf/langflow/components/processing/select_data.py +49 -0
  2332. vibe_surf/langflow/components/processing/split_text.py +141 -0
  2333. vibe_surf/langflow/components/processing/structured_output.py +206 -0
  2334. vibe_surf/langflow/components/processing/update_data.py +161 -0
  2335. vibe_surf/langflow/components/qdrant/__init__.py +34 -0
  2336. vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
  2337. vibe_surf/langflow/components/redis/__init__.py +37 -0
  2338. vibe_surf/langflow/components/redis/redis.py +89 -0
  2339. vibe_surf/langflow/components/redis/redis_chat.py +43 -0
  2340. vibe_surf/langflow/components/sambanova/__init__.py +32 -0
  2341. vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
  2342. vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
  2343. vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  2344. vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
  2345. vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  2346. vibe_surf/langflow/components/searchapi/__init__.py +36 -0
  2347. vibe_surf/langflow/components/searchapi/search.py +79 -0
  2348. vibe_surf/langflow/components/serpapi/__init__.py +3 -0
  2349. vibe_surf/langflow/components/serpapi/serp.py +115 -0
  2350. vibe_surf/langflow/components/serper/__init__.py +3 -0
  2351. vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
  2352. vibe_surf/langflow/components/supabase/__init__.py +37 -0
  2353. vibe_surf/langflow/components/supabase/supabase.py +76 -0
  2354. vibe_surf/langflow/components/tavily/__init__.py +4 -0
  2355. vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
  2356. vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
  2357. vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
  2358. vibe_surf/langflow/components/toolkits/__init__.py +0 -0
  2359. vibe_surf/langflow/components/tools/__init__.py +66 -0
  2360. vibe_surf/langflow/components/tools/calculator.py +104 -0
  2361. vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
  2362. vibe_surf/langflow/components/tools/python_repl.py +98 -0
  2363. vibe_surf/langflow/components/tools/search_api.py +88 -0
  2364. vibe_surf/langflow/components/tools/searxng.py +145 -0
  2365. vibe_surf/langflow/components/tools/serp_api.py +120 -0
  2366. vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
  2367. vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
  2368. vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
  2369. vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
  2370. vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
  2371. vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
  2372. vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
  2373. vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
  2374. vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
  2375. vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  2376. vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
  2377. vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
  2378. vibe_surf/langflow/components/unstructured/__init__.py +3 -0
  2379. vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
  2380. vibe_surf/langflow/components/upstash/__init__.py +34 -0
  2381. vibe_surf/langflow/components/upstash/upstash.py +124 -0
  2382. vibe_surf/langflow/components/vectara/__init__.py +37 -0
  2383. vibe_surf/langflow/components/vectara/vectara.py +97 -0
  2384. vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
  2385. vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
  2386. vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
  2387. vibe_surf/langflow/components/vertexai/__init__.py +37 -0
  2388. vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
  2389. vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
  2390. vibe_surf/langflow/components/weaviate/__init__.py +34 -0
  2391. vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
  2392. vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
  2393. vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
  2394. vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
  2395. vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
  2396. vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
  2397. vibe_surf/langflow/components/xai/__init__.py +32 -0
  2398. vibe_surf/langflow/components/xai/xai.py +167 -0
  2399. vibe_surf/langflow/components/youtube/__init__.py +52 -0
  2400. vibe_surf/langflow/components/youtube/channel.py +227 -0
  2401. vibe_surf/langflow/components/youtube/comments.py +231 -0
  2402. vibe_surf/langflow/components/youtube/playlist.py +33 -0
  2403. vibe_surf/langflow/components/youtube/search.py +120 -0
  2404. vibe_surf/langflow/components/youtube/trending.py +285 -0
  2405. vibe_surf/langflow/components/youtube/video_details.py +263 -0
  2406. vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
  2407. vibe_surf/langflow/components/zep/__init__.py +3 -0
  2408. vibe_surf/langflow/components/zep/zep.py +45 -0
  2409. vibe_surf/langflow/core/__init__.py +0 -0
  2410. vibe_surf/langflow/core/celery_app.py +11 -0
  2411. vibe_surf/langflow/core/celeryconfig.py +18 -0
  2412. vibe_surf/langflow/custom/__init__.py +4 -0
  2413. vibe_surf/langflow/custom/attributes.py +87 -0
  2414. vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
  2415. vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
  2416. vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
  2417. vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
  2418. vibe_surf/langflow/custom/custom_component/component.py +1742 -0
  2419. vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
  2420. vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
  2421. vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
  2422. vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
  2423. vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
  2424. vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
  2425. vibe_surf/langflow/custom/eval.py +12 -0
  2426. vibe_surf/langflow/custom/schema.py +32 -0
  2427. vibe_surf/langflow/custom/tree_visitor.py +21 -0
  2428. vibe_surf/langflow/custom/utils.py +868 -0
  2429. vibe_surf/langflow/events/__init__.py +0 -0
  2430. vibe_surf/langflow/events/event_manager.py +108 -0
  2431. vibe_surf/langflow/exceptions/__init__.py +0 -0
  2432. vibe_surf/langflow/exceptions/api.py +34 -0
  2433. vibe_surf/langflow/exceptions/component.py +17 -0
  2434. vibe_surf/langflow/exceptions/serialization.py +56 -0
  2435. vibe_surf/langflow/field_typing/__init__.py +91 -0
  2436. vibe_surf/langflow/field_typing/constants.py +137 -0
  2437. vibe_surf/langflow/field_typing/range_spec.py +33 -0
  2438. vibe_surf/langflow/graph/__init__.py +6 -0
  2439. vibe_surf/langflow/graph/edge/__init__.py +0 -0
  2440. vibe_surf/langflow/graph/edge/base.py +277 -0
  2441. vibe_surf/langflow/graph/edge/schema.py +119 -0
  2442. vibe_surf/langflow/graph/edge/utils.py +0 -0
  2443. vibe_surf/langflow/graph/graph/__init__.py +0 -0
  2444. vibe_surf/langflow/graph/graph/ascii.py +202 -0
  2445. vibe_surf/langflow/graph/graph/base.py +2242 -0
  2446. vibe_surf/langflow/graph/graph/constants.py +58 -0
  2447. vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
  2448. vibe_surf/langflow/graph/graph/schema.py +53 -0
  2449. vibe_surf/langflow/graph/graph/state_model.py +66 -0
  2450. vibe_surf/langflow/graph/graph/utils.py +1024 -0
  2451. vibe_surf/langflow/graph/schema.py +75 -0
  2452. vibe_surf/langflow/graph/state/__init__.py +0 -0
  2453. vibe_surf/langflow/graph/state/model.py +237 -0
  2454. vibe_surf/langflow/graph/utils.py +229 -0
  2455. vibe_surf/langflow/graph/vertex/__init__.py +0 -0
  2456. vibe_surf/langflow/graph/vertex/base.py +811 -0
  2457. vibe_surf/langflow/graph/vertex/constants.py +0 -0
  2458. vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
  2459. vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
  2460. vibe_surf/langflow/graph/vertex/schema.py +27 -0
  2461. vibe_surf/langflow/graph/vertex/utils.py +19 -0
  2462. vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
  2463. vibe_surf/langflow/helpers/__init__.py +3 -0
  2464. vibe_surf/langflow/helpers/base_model.py +71 -0
  2465. vibe_surf/langflow/helpers/custom.py +13 -0
  2466. vibe_surf/langflow/helpers/data.py +206 -0
  2467. vibe_surf/langflow/helpers/flow.py +359 -0
  2468. vibe_surf/langflow/helpers/folders.py +26 -0
  2469. vibe_surf/langflow/helpers/user.py +27 -0
  2470. vibe_surf/langflow/initial_setup/__init__.py +0 -0
  2471. vibe_surf/langflow/initial_setup/constants.py +2 -0
  2472. vibe_surf/langflow/initial_setup/load.py +21 -0
  2473. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
  2474. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
  2475. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
  2476. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
  2477. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
  2478. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
  2479. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
  2480. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
  2481. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
  2482. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
  2483. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
  2484. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
  2485. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
  2486. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
  2487. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
  2488. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
  2489. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
  2490. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
  2491. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
  2492. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
  2493. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
  2494. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
  2495. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
  2496. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
  2497. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
  2498. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
  2499. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
  2500. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
  2501. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
  2502. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
  2503. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
  2504. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
  2505. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
  2506. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
  2507. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
  2508. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
  2509. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
  2510. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
  2511. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
  2512. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
  2513. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
  2514. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
  2515. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
  2516. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
  2517. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
  2518. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
  2519. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
  2520. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
  2521. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
  2522. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
  2523. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
  2524. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
  2525. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
  2526. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
  2527. vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
  2528. vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
  2529. vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
  2530. vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
  2531. vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
  2532. vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
  2533. vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
  2534. vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
  2535. vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
  2536. vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
  2537. vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
  2538. vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
  2539. vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
  2540. vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
  2541. vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
  2542. vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
  2543. vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
  2544. vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
  2545. vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
  2546. vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
  2547. vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
  2548. vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
  2549. vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
  2550. vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
  2551. vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
  2552. vibe_surf/langflow/initial_setup/setup.py +1108 -0
  2553. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
  2554. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
  2555. vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
  2556. vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
  2557. vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
  2558. vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
  2559. vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
  2560. vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
  2561. vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
  2562. vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
  2563. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
  2564. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
  2565. vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
  2566. vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
  2567. vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
  2568. vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
  2569. vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
  2570. vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
  2571. vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
  2572. vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
  2573. vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
  2574. vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1616 -0
  2575. vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
  2576. vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
  2577. vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
  2578. vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
  2579. vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
  2580. vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
  2581. vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
  2582. vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
  2583. vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
  2584. vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
  2585. vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
  2586. vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
  2587. vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
  2588. vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
  2589. vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
  2590. vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
  2591. vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
  2592. vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
  2593. vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
  2594. vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
  2595. vibe_surf/langflow/inputs/__init__.py +68 -0
  2596. vibe_surf/langflow/inputs/constants.py +2 -0
  2597. vibe_surf/langflow/inputs/input_mixin.py +312 -0
  2598. vibe_surf/langflow/inputs/inputs.py +706 -0
  2599. vibe_surf/langflow/inputs/utils.py +32 -0
  2600. vibe_surf/langflow/inputs/validators.py +19 -0
  2601. vibe_surf/langflow/interface/__init__.py +0 -0
  2602. vibe_surf/langflow/interface/components.py +496 -0
  2603. vibe_surf/langflow/interface/importing/__init__.py +5 -0
  2604. vibe_surf/langflow/interface/importing/utils.py +39 -0
  2605. vibe_surf/langflow/interface/initialize/__init__.py +3 -0
  2606. vibe_surf/langflow/interface/initialize/loading.py +200 -0
  2607. vibe_surf/langflow/interface/listing.py +26 -0
  2608. vibe_surf/langflow/interface/run.py +45 -0
  2609. vibe_surf/langflow/interface/utils.py +112 -0
  2610. vibe_surf/langflow/io/__init__.py +63 -0
  2611. vibe_surf/langflow/io/schema.py +304 -0
  2612. vibe_surf/langflow/langflow_launcher.py +51 -0
  2613. vibe_surf/langflow/legacy_custom/__init__.py +0 -0
  2614. vibe_surf/langflow/legacy_custom/customs.py +16 -0
  2615. vibe_surf/langflow/load/__init__.py +12 -0
  2616. vibe_surf/langflow/load/load.py +250 -0
  2617. vibe_surf/langflow/load/utils.py +126 -0
  2618. vibe_surf/langflow/logging/__init__.py +4 -0
  2619. vibe_surf/langflow/logging/logger.py +407 -0
  2620. vibe_surf/langflow/logging/setup.py +16 -0
  2621. vibe_surf/langflow/main.py +550 -0
  2622. vibe_surf/langflow/memory.py +326 -0
  2623. vibe_surf/langflow/middleware.py +59 -0
  2624. vibe_surf/langflow/processing/__init__.py +0 -0
  2625. vibe_surf/langflow/processing/process.py +216 -0
  2626. vibe_surf/langflow/processing/utils.py +25 -0
  2627. vibe_surf/langflow/py.typed +0 -0
  2628. vibe_surf/langflow/schema/__init__.py +6 -0
  2629. vibe_surf/langflow/schema/artifact.py +82 -0
  2630. vibe_surf/langflow/schema/content_block.py +62 -0
  2631. vibe_surf/langflow/schema/content_types.py +91 -0
  2632. vibe_surf/langflow/schema/data.py +306 -0
  2633. vibe_surf/langflow/schema/dataframe.py +206 -0
  2634. vibe_surf/langflow/schema/dotdict.py +71 -0
  2635. vibe_surf/langflow/schema/encoders.py +13 -0
  2636. vibe_surf/langflow/schema/graph.py +47 -0
  2637. vibe_surf/langflow/schema/image.py +128 -0
  2638. vibe_surf/langflow/schema/log.py +33 -0
  2639. vibe_surf/langflow/schema/message.py +483 -0
  2640. vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
  2641. vibe_surf/langflow/schema/playground_events.py +182 -0
  2642. vibe_surf/langflow/schema/properties.py +39 -0
  2643. vibe_surf/langflow/schema/schema.py +121 -0
  2644. vibe_surf/langflow/schema/serialize.py +14 -0
  2645. vibe_surf/langflow/schema/table.py +140 -0
  2646. vibe_surf/langflow/schema/validators.py +114 -0
  2647. vibe_surf/langflow/serialization/__init__.py +3 -0
  2648. vibe_surf/langflow/serialization/constants.py +2 -0
  2649. vibe_surf/langflow/serialization/serialization.py +320 -0
  2650. vibe_surf/langflow/server.py +70 -0
  2651. vibe_surf/langflow/services/__init__.py +4 -0
  2652. vibe_surf/langflow/services/auth/__init__.py +0 -0
  2653. vibe_surf/langflow/services/auth/factory.py +15 -0
  2654. vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
  2655. vibe_surf/langflow/services/auth/service.py +15 -0
  2656. vibe_surf/langflow/services/auth/utils.py +583 -0
  2657. vibe_surf/langflow/services/base.py +28 -0
  2658. vibe_surf/langflow/services/cache/__init__.py +12 -0
  2659. vibe_surf/langflow/services/cache/base.py +183 -0
  2660. vibe_surf/langflow/services/cache/disk.py +95 -0
  2661. vibe_surf/langflow/services/cache/factory.py +44 -0
  2662. vibe_surf/langflow/services/cache/service.py +355 -0
  2663. vibe_surf/langflow/services/cache/utils.py +169 -0
  2664. vibe_surf/langflow/services/chat/__init__.py +0 -0
  2665. vibe_surf/langflow/services/chat/cache.py +150 -0
  2666. vibe_surf/langflow/services/chat/config.py +2 -0
  2667. vibe_surf/langflow/services/chat/factory.py +11 -0
  2668. vibe_surf/langflow/services/chat/schema.py +10 -0
  2669. vibe_surf/langflow/services/chat/service.py +67 -0
  2670. vibe_surf/langflow/services/database/__init__.py +0 -0
  2671. vibe_surf/langflow/services/database/factory.py +21 -0
  2672. vibe_surf/langflow/services/database/models/__init__.py +19 -0
  2673. vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
  2674. vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
  2675. vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
  2676. vibe_surf/langflow/services/database/models/base.py +17 -0
  2677. vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
  2678. vibe_surf/langflow/services/database/models/file/crud.py +14 -0
  2679. vibe_surf/langflow/services/database/models/file/model.py +19 -0
  2680. vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
  2681. vibe_surf/langflow/services/database/models/flow/model.py +283 -0
  2682. vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
  2683. vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
  2684. vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
  2685. vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
  2686. vibe_surf/langflow/services/database/models/folder/model.py +61 -0
  2687. vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
  2688. vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
  2689. vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
  2690. vibe_surf/langflow/services/database/models/message/crud.py +26 -0
  2691. vibe_surf/langflow/services/database/models/message/model.py +182 -0
  2692. vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
  2693. vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
  2694. vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
  2695. vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
  2696. vibe_surf/langflow/services/database/models/user/crud.py +69 -0
  2697. vibe_surf/langflow/services/database/models/user/model.py +82 -0
  2698. vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
  2699. vibe_surf/langflow/services/database/models/variable/model.py +73 -0
  2700. vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
  2701. vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
  2702. vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
  2703. vibe_surf/langflow/services/database/service.py +485 -0
  2704. vibe_surf/langflow/services/database/session.py +62 -0
  2705. vibe_surf/langflow/services/database/utils.py +88 -0
  2706. vibe_surf/langflow/services/deps.py +259 -0
  2707. vibe_surf/langflow/services/factory.py +88 -0
  2708. vibe_surf/langflow/services/flow/__init__.py +0 -0
  2709. vibe_surf/langflow/services/flow/flow_runner.py +265 -0
  2710. vibe_surf/langflow/services/job_queue/__init__.py +0 -0
  2711. vibe_surf/langflow/services/job_queue/factory.py +11 -0
  2712. vibe_surf/langflow/services/job_queue/service.py +328 -0
  2713. vibe_surf/langflow/services/manager.py +149 -0
  2714. vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
  2715. vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
  2716. vibe_surf/langflow/services/mcp_composer/service.py +591 -0
  2717. vibe_surf/langflow/services/schema.py +23 -0
  2718. vibe_surf/langflow/services/session/__init__.py +0 -0
  2719. vibe_surf/langflow/services/session/factory.py +18 -0
  2720. vibe_surf/langflow/services/session/service.py +63 -0
  2721. vibe_surf/langflow/services/session/utils.py +18 -0
  2722. vibe_surf/langflow/services/settings/__init__.py +3 -0
  2723. vibe_surf/langflow/services/settings/auth.py +133 -0
  2724. vibe_surf/langflow/services/settings/base.py +587 -0
  2725. vibe_surf/langflow/services/settings/constants.py +34 -0
  2726. vibe_surf/langflow/services/settings/factory.py +22 -0
  2727. vibe_surf/langflow/services/settings/feature_flags.py +11 -0
  2728. vibe_surf/langflow/services/settings/manager.py +49 -0
  2729. vibe_surf/langflow/services/settings/service.py +32 -0
  2730. vibe_surf/langflow/services/settings/utils.py +40 -0
  2731. vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
  2732. vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
  2733. vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
  2734. vibe_surf/langflow/services/socket/__init__.py +0 -0
  2735. vibe_surf/langflow/services/socket/factory.py +20 -0
  2736. vibe_surf/langflow/services/socket/service.py +84 -0
  2737. vibe_surf/langflow/services/socket/utils.py +112 -0
  2738. vibe_surf/langflow/services/state/__init__.py +0 -0
  2739. vibe_surf/langflow/services/state/factory.py +16 -0
  2740. vibe_surf/langflow/services/state/service.py +82 -0
  2741. vibe_surf/langflow/services/storage/__init__.py +0 -0
  2742. vibe_surf/langflow/services/storage/constants.py +28 -0
  2743. vibe_surf/langflow/services/storage/factory.py +30 -0
  2744. vibe_surf/langflow/services/storage/local.py +127 -0
  2745. vibe_surf/langflow/services/storage/s3.py +105 -0
  2746. vibe_surf/langflow/services/storage/service.py +51 -0
  2747. vibe_surf/langflow/services/storage/utils.py +5 -0
  2748. vibe_surf/langflow/services/store/__init__.py +0 -0
  2749. vibe_surf/langflow/services/store/exceptions.py +25 -0
  2750. vibe_surf/langflow/services/store/factory.py +20 -0
  2751. vibe_surf/langflow/services/store/schema.py +74 -0
  2752. vibe_surf/langflow/services/store/service.py +600 -0
  2753. vibe_surf/langflow/services/store/utils.py +67 -0
  2754. vibe_surf/langflow/services/task/__init__.py +0 -0
  2755. vibe_surf/langflow/services/task/backends/__init__.py +0 -0
  2756. vibe_surf/langflow/services/task/backends/anyio.py +117 -0
  2757. vibe_surf/langflow/services/task/backends/base.py +15 -0
  2758. vibe_surf/langflow/services/task/backends/celery.py +29 -0
  2759. vibe_surf/langflow/services/task/factory.py +14 -0
  2760. vibe_surf/langflow/services/task/service.py +40 -0
  2761. vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
  2762. vibe_surf/langflow/services/task/utils.py +23 -0
  2763. vibe_surf/langflow/services/telemetry/__init__.py +0 -0
  2764. vibe_surf/langflow/services/telemetry/factory.py +20 -0
  2765. vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
  2766. vibe_surf/langflow/services/telemetry/schema.py +45 -0
  2767. vibe_surf/langflow/services/telemetry/service.py +281 -0
  2768. vibe_surf/langflow/services/tracing/__init__.py +0 -0
  2769. vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
  2770. vibe_surf/langflow/services/tracing/base.py +71 -0
  2771. vibe_surf/langflow/services/tracing/factory.py +20 -0
  2772. vibe_surf/langflow/services/tracing/langfuse.py +170 -0
  2773. vibe_surf/langflow/services/tracing/langsmith.py +208 -0
  2774. vibe_surf/langflow/services/tracing/langwatch.py +185 -0
  2775. vibe_surf/langflow/services/tracing/opik.py +235 -0
  2776. vibe_surf/langflow/services/tracing/schema.py +20 -0
  2777. vibe_surf/langflow/services/tracing/service.py +460 -0
  2778. vibe_surf/langflow/services/tracing/traceloop.py +244 -0
  2779. vibe_surf/langflow/services/tracing/utils.py +29 -0
  2780. vibe_surf/langflow/services/utils.py +246 -0
  2781. vibe_surf/langflow/services/variable/__init__.py +0 -0
  2782. vibe_surf/langflow/services/variable/base.py +119 -0
  2783. vibe_surf/langflow/services/variable/constants.py +2 -0
  2784. vibe_surf/langflow/services/variable/factory.py +28 -0
  2785. vibe_surf/langflow/services/variable/kubernetes.py +204 -0
  2786. vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
  2787. vibe_surf/langflow/services/variable/service.py +195 -0
  2788. vibe_surf/langflow/settings.py +12 -0
  2789. vibe_surf/langflow/template/__init__.py +10 -0
  2790. vibe_surf/langflow/template/field/__init__.py +0 -0
  2791. vibe_surf/langflow/template/field/base.py +257 -0
  2792. vibe_surf/langflow/template/field/prompt.py +2 -0
  2793. vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
  2794. vibe_surf/langflow/template/frontend_node/base.py +214 -0
  2795. vibe_surf/langflow/template/frontend_node/constants.py +65 -0
  2796. vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
  2797. vibe_surf/langflow/template/template/__init__.py +0 -0
  2798. vibe_surf/langflow/template/template/base.py +99 -0
  2799. vibe_surf/langflow/template/utils.py +217 -0
  2800. vibe_surf/langflow/type_extraction/__init__.py +0 -0
  2801. vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
  2802. vibe_surf/langflow/utils/__init__.py +0 -0
  2803. vibe_surf/langflow/utils/async_helpers.py +42 -0
  2804. vibe_surf/langflow/utils/component_utils.py +147 -0
  2805. vibe_surf/langflow/utils/compression.py +19 -0
  2806. vibe_surf/langflow/utils/concurrency.py +60 -0
  2807. vibe_surf/langflow/utils/connection_string_parser.py +8 -0
  2808. vibe_surf/langflow/utils/constants.py +205 -0
  2809. vibe_surf/langflow/utils/data_structure.py +212 -0
  2810. vibe_surf/langflow/utils/image.py +102 -0
  2811. vibe_surf/langflow/utils/lazy_load.py +15 -0
  2812. vibe_surf/langflow/utils/migration.py +61 -0
  2813. vibe_surf/langflow/utils/payload.py +84 -0
  2814. vibe_surf/langflow/utils/schemas.py +117 -0
  2815. vibe_surf/langflow/utils/template_validation.py +284 -0
  2816. vibe_surf/langflow/utils/util.py +479 -0
  2817. vibe_surf/langflow/utils/util_strings.py +56 -0
  2818. vibe_surf/langflow/utils/validate.py +489 -0
  2819. vibe_surf/langflow/utils/version.py +72 -0
  2820. vibe_surf/langflow/utils/voice_utils.py +92 -0
  2821. vibe_surf/langflow/worker.py +37 -0
  2822. vibe_surf/llm/__init__.py +21 -0
  2823. vibe_surf/llm/openai_compatible.py +372 -0
  2824. vibe_surf/logger.py +99 -0
  2825. vibe_surf/telemetry/__init__.py +60 -0
  2826. vibe_surf/telemetry/service.py +113 -0
  2827. vibe_surf/telemetry/views.py +188 -0
  2828. vibe_surf/tools/__init__.py +0 -0
  2829. vibe_surf/tools/browser_use_tools.py +492 -0
  2830. vibe_surf/tools/composio_client.py +458 -0
  2831. vibe_surf/tools/file_system.py +437 -0
  2832. vibe_surf/tools/finance_tools.py +629 -0
  2833. vibe_surf/tools/mcp_client.py +84 -0
  2834. vibe_surf/tools/report_writer_tools.py +22 -0
  2835. vibe_surf/tools/utils.py +1793 -0
  2836. vibe_surf/tools/vibesurf_registry.py +52 -0
  2837. vibe_surf/tools/vibesurf_tools.py +2277 -0
  2838. vibe_surf/tools/views.py +365 -0
  2839. vibe_surf/tools/voice_asr.py +125 -0
  2840. vibe_surf/tools/website_api/__init__.py +0 -0
  2841. vibe_surf/tools/website_api/douyin/__init__.py +0 -0
  2842. vibe_surf/tools/website_api/douyin/client.py +848 -0
  2843. vibe_surf/tools/website_api/douyin/helpers.py +239 -0
  2844. vibe_surf/tools/website_api/newsnow/__init__.py +0 -0
  2845. vibe_surf/tools/website_api/newsnow/client.py +385 -0
  2846. vibe_surf/tools/website_api/newsnow/helpers.py +118 -0
  2847. vibe_surf/tools/website_api/newsnow/sources.json +385 -0
  2848. vibe_surf/tools/website_api/weibo/__init__.py +0 -0
  2849. vibe_surf/tools/website_api/weibo/client.py +767 -0
  2850. vibe_surf/tools/website_api/weibo/helpers.py +997 -0
  2851. vibe_surf/tools/website_api/xhs/__init__.py +0 -0
  2852. vibe_surf/tools/website_api/xhs/client.py +804 -0
  2853. vibe_surf/tools/website_api/xhs/helpers.py +302 -0
  2854. vibe_surf/tools/website_api/youtube/__init__.py +32 -0
  2855. vibe_surf/tools/website_api/youtube/client.py +1267 -0
  2856. vibe_surf/tools/website_api/youtube/helpers.py +420 -0
  2857. vibe_surf/utils.py +34 -0
  2858. vibe_surf/workflows/AIGC/genai_image_generator.py +284 -0
  2859. vibe_surf/workflows/AIGC/media_viewer.py +127 -0
  2860. vibe_surf/workflows/AIGC/vertex_image_generator.py +259 -0
  2861. vibe_surf/workflows/Browser/browser_click_element.py +195 -0
  2862. vibe_surf/workflows/Browser/browser_download_media.py +113 -0
  2863. vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
  2864. vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
  2865. vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
  2866. vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
  2867. vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
  2868. vibe_surf/workflows/Browser/browser_go_back.py +45 -0
  2869. vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
  2870. vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
  2871. vibe_surf/workflows/Browser/browser_html_content.py +73 -0
  2872. vibe_surf/workflows/Browser/browser_input_text.py +169 -0
  2873. vibe_surf/workflows/Browser/browser_navigate.py +50 -0
  2874. vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
  2875. vibe_surf/workflows/Browser/browser_page_info.py +67 -0
  2876. vibe_surf/workflows/Browser/browser_press_key.py +51 -0
  2877. vibe_surf/workflows/Browser/browser_reload.py +44 -0
  2878. vibe_surf/workflows/Browser/browser_scroll.py +99 -0
  2879. vibe_surf/workflows/Browser/browser_search.py +88 -0
  2880. vibe_surf/workflows/Browser/browser_select_options.py +94 -0
  2881. vibe_surf/workflows/Browser/browser_session.py +54 -0
  2882. vibe_surf/workflows/Browser/browser_take_screenshot.py +127 -0
  2883. vibe_surf/workflows/Browser/browser_upload_file.py +182 -0
  2884. vibe_surf/workflows/Browser/browser_wait.py +46 -0
  2885. vibe_surf/workflows/Browser/close_browser_session.py +51 -0
  2886. vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
  2887. vibe_surf/workflows/FileSystem/load_json.py +136 -0
  2888. vibe_surf/workflows/Integrations/composio_api.py +279 -0
  2889. vibe_surf/workflows/Integrations/douyin.py +232 -0
  2890. vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
  2891. vibe_surf/workflows/Integrations/github_composio.py +11 -0
  2892. vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
  2893. vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
  2894. vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
  2895. vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
  2896. vibe_surf/workflows/Integrations/linear_composio.py +11 -0
  2897. vibe_surf/workflows/Integrations/newsnow.py +121 -0
  2898. vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
  2899. vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
  2900. vibe_surf/workflows/Integrations/slack_composio.py +11 -0
  2901. vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
  2902. vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
  2903. vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
  2904. vibe_surf/workflows/Integrations/weibo.py +244 -0
  2905. vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
  2906. vibe_surf/workflows/Integrations/yahoo.py +103 -0
  2907. vibe_surf/workflows/Integrations/youtube.py +251 -0
  2908. vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
  2909. vibe_surf/workflows/VibeSurf/advanced_search.py +115 -0
  2910. vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
  2911. vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
  2912. vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
  2913. vibe_surf/workflows/VibeSurf/structured_output.py +154 -0
  2914. vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
  2915. vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
  2916. vibesurf-0.2.40.dist-info/METADATA +432 -0
  2917. vibesurf-0.2.40.dist-info/RECORD +2921 -0
  2918. vibesurf-0.2.40.dist-info/WHEEL +5 -0
  2919. vibesurf-0.2.40.dist-info/entry_points.txt +2 -0
  2920. vibesurf-0.2.40.dist-info/licenses/LICENSE +22 -0
  2921. vibesurf-0.2.40.dist-info/top_level.txt +1 -0
@@ -0,0 +1,2277 @@
1
+ from typing import Any, Generic, TypeVar
2
+ from browser_use.tools.registry.service import Registry
3
+ from pydantic import BaseModel
4
+ import pdb
5
+ import os
6
+ import asyncio
7
+ import json
8
+ import enum
9
+ import base64
10
+ import mimetypes
11
+ import yfinance as yf
12
+ import pprint
13
+ import pandas as pd
14
+ import numpy as np
15
+ import matplotlib
16
+
17
+ matplotlib.use('Agg') # Use non-interactive backend
18
+ import matplotlib.pyplot as plt
19
+ import seaborn as sns
20
+ import io
21
+ import json
22
+ import re
23
+ import os
24
+ import openpyxl
25
+ from datetime import datetime, timedelta
26
+ from pathlib import Path
27
+ import csv
28
+
29
+ from json_repair import repair_json
30
+ from datetime import datetime
31
+ from typing import Optional, Type, Callable, Dict, Any, Union, Awaitable, TypeVar
32
+ from pathvalidate import sanitize_filename
33
+ from pydantic import BaseModel
34
+ from browser_use.tools.service import Controller, Tools, handle_browser_error
35
+ import logging
36
+ from browser_use.agent.views import ActionModel, ActionResult
37
+ from browser_use.utils import time_execution_sync
38
+ from browser_use.filesystem.file_system import FileSystem
39
+ from browser_use.browser import BrowserSession
40
+ from browser_use.llm.base import BaseChatModel
41
+ from browser_use.llm.messages import UserMessage, ContentPartTextParam, ContentPartImageParam, ImageURL, \
42
+ AssistantMessage
43
+ from browser_use.dom.service import EnhancedDOMTreeNode
44
+ from browser_use.browser.views import BrowserError
45
+ from browser_use.mcp.client import MCPClient
46
+ from browser_use.tools.views import NoParamsAction
47
+ from vibe_surf.browser.agent_browser_session import AgentBrowserSession
48
+ from vibe_surf.tools.views import HoverAction, ExtractionAction, FileExtractionAction, BrowserUseAgentExecution, \
49
+ ReportWriterTask, TodoGenerateAction, TodoModifyAction, VibeSurfDoneAction, SkillSearchAction, SkillCrawlAction, \
50
+ SkillSummaryAction, SkillTakeScreenshotAction, SkillDeepResearchAction, SkillCodeAction, SkillFinanceAction, \
51
+ SkillXhsAction, SkillDouyinAction, SkillYoutubeAction, SkillWeiboAction, GrepContentAction, \
52
+ SearchToolAction, GetToolInfoAction, ExecuteExtraToolAction, ExecutePythonCodeAction, SkillTrendAction
53
+ from vibe_surf.tools.finance_tools import FinanceDataRetriever, FinanceMarkdownFormatter, FinanceMethod
54
+ from vibe_surf.tools.mcp_client import CustomMCPClient
55
+ from vibe_surf.tools.composio_client import ComposioClient
56
+ from vibe_surf.tools.file_system import CustomFileSystem
57
+ from vibe_surf.browser.browser_manager import BrowserManager
58
+ from vibe_surf.tools.vibesurf_registry import VibeSurfRegistry
59
+ from bs4 import BeautifulSoup
60
+ from vibe_surf.logger import get_logger
61
+ from vibe_surf.tools.utils import clean_html_basic
62
+ from vibe_surf.tools.utils import _extract_structured_content, _rank_search_results_with_llm, \
63
+ extract_file_content_with_llm, remove_import_statements
64
+
65
+ logger = get_logger(__name__)
66
+
67
+ Context = TypeVar('Context')
68
+
69
+ T = TypeVar('T', bound=BaseModel)
70
+
71
+
72
+ class VibeSurfTools:
73
+ def __init__(self, exclude_actions: list[str] = [], mcp_server_config: Optional[Dict[str, Any]] = None,
74
+ composio_client: ComposioClient = None):
75
+ self.registry = VibeSurfRegistry(exclude_actions)
76
+ self._register_file_actions()
77
+ self._register_browser_use_agent()
78
+ self._register_report_writer_agent()
79
+ self._register_todo_actions()
80
+ self._register_done_action()
81
+ self._register_skills()
82
+ self._register_extra_tools()
83
+ self.mcp_server_config = mcp_server_config
84
+ self.mcp_clients: Dict[str, MCPClient] = {}
85
+ self.composio_toolkits: Dict[str, Any] = {}
86
+ self.composio_client: ComposioClient = composio_client
87
+
88
+ def get_all_action_names(self, exclude_actions: Optional[list] = None) -> list[str]:
89
+ action_names = []
90
+ for action_name in self.registry.registry.actions:
91
+ add_flag = True
92
+ for ex_action_name in exclude_actions:
93
+ if action_name.startswith(ex_action_name) or ex_action_name in action_name:
94
+ add_flag = False
95
+ break
96
+ if add_flag:
97
+ action_names.append(action_name)
98
+ return action_names
99
+
100
+ def _register_skills(self):
101
+ @self.registry.action(
102
+ 'Advanced search',
103
+ param_model=SkillSearchAction,
104
+ )
105
+ async def skill_search(
106
+ params: SkillSearchAction,
107
+ browser_manager: BrowserManager,
108
+ page_extraction_llm: BaseChatModel
109
+ ):
110
+ """
111
+ Advanced search skill that uses Google AI model search as primary method,
112
+ with fallback to parallel search across all/news/videos tabs.
113
+
114
+ Primary Method: Google AI model search (udm=50) with "show more" button click
115
+ Fallback Method: Parallel search across all, news, and videos tabs
116
+
117
+ Args:
118
+ params: SkillSearchAction containing query and rank parameters
119
+ browser_manager: Browser manager for creating browser sessions
120
+ page_extraction_llm: LLM for ranking results when rank=True
121
+
122
+ Returns:
123
+ ActionResult with formatted search results
124
+ """
125
+ from vibe_surf.tools.utils import google_ai_model_search, fallback_parallel_search
126
+
127
+ agent_ids = []
128
+ try:
129
+ # Step 1: Try Google AI model search first (primary method)
130
+ logger.info(f'🔍 Starting Google AI model search for: {params.query}')
131
+
132
+ # Attempt Google AI model search with udm=50
133
+ search_result_dict = await google_ai_model_search(browser_manager, params.query, max_results=15)
134
+
135
+ # Step 2: If AI search fails or returns insufficient results, use fallback method
136
+ if not search_result_dict or (isinstance(search_result_dict, dict) and len(search_result_dict.get('sources', [])) == 0):
137
+ logger.info(f'🔄 Google AI search returned no results, using fallback parallel search')
138
+
139
+ # Use parallel search across all, news, and videos tabs
140
+ search_result_dict = await fallback_parallel_search(browser_manager, params.query, max_results=15)
141
+ used_fallback = True
142
+ else:
143
+ logger.info(f'✅ Google AI search found results')
144
+ used_fallback = False
145
+
146
+ # Extract response and sources from dict
147
+ ai_response = search_result_dict.get('response', '')
148
+ all_results = search_result_dict.get('sources', [])
149
+
150
+ # Step 3: Process results based on rank parameter
151
+ if params.rank and all_results and len(all_results) > 10:
152
+ logger.info(f'🔄 Using LLM ranking for {len(all_results)} results')
153
+
154
+ if not page_extraction_llm:
155
+ logger.warning("LLM not available for ranking, returning unranked results")
156
+ top_results = all_results[:15]
157
+ else:
158
+ # Use LLM ranking when rank=True and we have many results
159
+ top_results = await _rank_search_results_with_llm(
160
+ all_results, params.query, page_extraction_llm
161
+ )
162
+ elif params.rank and all_results and len(all_results) <= 10:
163
+ logger.info(f'⭐ Skipping LLM ranking for {len(all_results)} results (≤10)')
164
+ top_results = all_results
165
+ else:
166
+ # When rank=False, return results from different tabs (5 each from all, news, videos)
167
+ if hasattr(all_results, '__iter__') and all_results:
168
+ # Group results by source_tab if available, otherwise take first 15
169
+ tab_groups = {'all': [], 'news': [], 'videos': [], 'other': []}
170
+
171
+ for result in all_results:
172
+ source_tab = result.get('source_tab', 'other')
173
+ tab_groups[source_tab].append(result)
174
+
175
+ # Take up to 5 results from each tab
176
+ top_results = []
177
+ for tab_name in ['all', 'news', 'videos', 'other']:
178
+ top_results.extend(tab_groups[tab_name][:5])
179
+
180
+ # If we don't have enough results from tabs, take the first 15 overall
181
+ if len(top_results) < 15:
182
+ top_results = all_results[:15]
183
+ else:
184
+ top_results = all_results[:15] if all_results else []
185
+
186
+ # Step 4: Format results for display - AI response first, then sources
187
+ results_text = f"# 🔍 Search Results for '{params.query}'\n\n"
188
+
189
+ # Display AI response if available
190
+ if ai_response:
191
+ results_text += f"## 🤖 AI Response\n\n{ai_response}\n\n"
192
+ results_text += "---\n\n"
193
+
194
+ # Display sources
195
+ if top_results:
196
+ results_text += f"## 📚 Sources ({len(top_results)} results)\n\n"
197
+ for i, result in enumerate(top_results):
198
+ title = result.get('title', 'Unknown Title')
199
+ url = result.get('url', 'No URL')
200
+ summary = result.get('summary', 'No description available')
201
+
202
+ results_text += f"### {i + 1}. {title}\n"
203
+ results_text += f"**URL:** {url}\n\n"
204
+ results_text += f"**Summary:** {summary}\n\n"
205
+ else:
206
+ results_text += f"## 📚 Sources\n\nNo source results found for query: {params.query}\n\n"
207
+
208
+ logger.info(f'🔍 Skill Search completed for: {params.query}, found {len(top_results)} sources, AI response: {bool(ai_response)}')
209
+ return ActionResult(
210
+ extracted_content=results_text,
211
+ include_extracted_content_only_once=True,
212
+ long_term_memory=f'Search completed for: {params.query}, found {len(top_results)} sources{"with AI response" if ai_response else ""} using {"fallback search" if used_fallback else "AI model search"}'
213
+ )
214
+
215
+ except Exception as e:
216
+ logger.error(f'❌ Skill Search failed: {e}')
217
+ return ActionResult(error=f'Skill search failed: {str(e)}')
218
+ finally:
219
+ # Clean up browser sessions
220
+ for agent_id in agent_ids:
221
+ try:
222
+ await browser_manager.unregister_agent(agent_id, close_tabs=True)
223
+ except Exception as cleanup_error:
224
+ logger.warning(f"Failed to cleanup agent {agent_id}: {cleanup_error}")
225
+
226
+ @self.registry.action(
227
+ '',
228
+ param_model=SkillCrawlAction,
229
+ )
230
+ async def skill_crawl(
231
+ params: SkillCrawlAction,
232
+ browser_manager: BrowserManager,
233
+ page_extraction_llm: BaseChatModel
234
+ ):
235
+ """
236
+ Skill: Extract structured content from current or specified webpage
237
+ """
238
+ llm = page_extraction_llm
239
+ try:
240
+ if not llm:
241
+ raise RuntimeError("LLM is required for skill_crawl")
242
+
243
+ # Get browser session
244
+ browser_session = browser_manager.main_browser_session
245
+
246
+ # If tab_id is provided, switch to that tab
247
+ target_id = None
248
+ if params.tab_id:
249
+ target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
250
+ url = await browser_session.get_current_page_url()
251
+ current_target_id = None
252
+ current_url = None
253
+ if browser_session._dom_watchdog and browser_session._dom_watchdog.enhanced_dom_tree:
254
+ current_target_id = browser_session._dom_watchdog.enhanced_dom_tree.target_id
255
+ if browser_session._cached_browser_state_summary:
256
+ current_url = browser_session._cached_browser_state_summary.url
257
+ if current_target_id != target_id or url != current_url:
258
+ browser_session._dom_watchdog.clear_cache()
259
+ browser_session._cached_browser_state_summary = None
260
+ await browser_session.get_or_create_cdp_session(target_id, focus=True)
261
+
262
+ # Extract structured content using the existing method
263
+ extracted_content = await _extract_structured_content(
264
+ browser_session, params.query, llm, target_id=target_id
265
+ )
266
+
267
+ current_url = await browser_session.get_current_page_url()
268
+ result_text = f'### URL:{current_url}\n\n{extracted_content}'
269
+
270
+ # Handle memory storage
271
+ MAX_MEMORY_LENGTH = 1000
272
+ if len(result_text) < MAX_MEMORY_LENGTH:
273
+ memory = result_text
274
+ include_extracted_content_only_once = False
275
+ else:
276
+ memory = f'Extracted structured content from {current_url} for query: {params.query}'
277
+ include_extracted_content_only_once = True
278
+
279
+ logger.info(f'📄 Skill Crawl completed for: {current_url}')
280
+ return ActionResult(
281
+ extracted_content=result_text,
282
+ include_extracted_content_only_once=include_extracted_content_only_once,
283
+ long_term_memory=memory,
284
+ )
285
+
286
+ except Exception as e:
287
+ logger.error(f'❌ Skill Crawl failed: {e}')
288
+ return ActionResult(error=f'Skill crawl failed: {str(e)}')
289
+
290
+ @self.registry.action(
291
+ '',
292
+ param_model=SkillSummaryAction,
293
+ )
294
+ async def skill_summary(
295
+ params: SkillSummaryAction,
296
+ browser_manager: BrowserManager,
297
+ page_extraction_llm: BaseChatModel
298
+ ):
299
+ """
300
+ Skill: Summarize webpage content using LLM
301
+ """
302
+ llm = page_extraction_llm
303
+ try:
304
+ if not llm:
305
+ raise RuntimeError("LLM is required for skill_summary")
306
+
307
+ # Get browser session
308
+ browser_session = browser_manager.main_browser_session
309
+
310
+ # If tab_id is provided, switch to that tab
311
+ target_id = None
312
+ if params.tab_id:
313
+ target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
314
+ url = await browser_session.get_current_page_url()
315
+ current_target_id = None
316
+ current_url = None
317
+ if browser_session._dom_watchdog and browser_session._dom_watchdog.enhanced_dom_tree:
318
+ current_target_id = browser_session._dom_watchdog.enhanced_dom_tree.target_id
319
+ if browser_session._cached_browser_state_summary:
320
+ current_url = browser_session._cached_browser_state_summary.url
321
+ if current_target_id != target_id or url != current_url:
322
+ browser_session._dom_watchdog.clear_cache()
323
+ browser_session._cached_browser_state_summary = None
324
+ await browser_session.get_or_create_cdp_session(target_id, focus=True)
325
+
326
+ # Extract and summarize content
327
+ summary = await _extract_structured_content(
328
+ browser_session, "Provide a comprehensive summary of this webpage", llm, target_id=target_id
329
+ )
330
+
331
+ current_url = await browser_session.get_current_page_url()
332
+ result_text = f'📝 Summary of {current_url}:\n\n{summary}'
333
+
334
+ # Handle memory storage
335
+ MAX_MEMORY_LENGTH = 1000
336
+ if len(result_text) < MAX_MEMORY_LENGTH:
337
+ memory = result_text
338
+ include_extracted_content_only_once = False
339
+ else:
340
+ memory = f'Summarized webpage: {current_url}'
341
+ include_extracted_content_only_once = True
342
+
343
+ logger.info(f'📝 Skill Summary completed for: {current_url}')
344
+ return ActionResult(
345
+ extracted_content=result_text,
346
+ include_extracted_content_only_once=include_extracted_content_only_once,
347
+ long_term_memory=memory,
348
+ )
349
+
350
+ except Exception as e:
351
+ logger.error(f'❌ Skill Summary failed: {e}')
352
+ return ActionResult(error=f'Skill summary failed: {str(e)}')
353
+
354
+ @self.registry.action(
355
+ '',
356
+ param_model=SkillTakeScreenshotAction,
357
+ )
358
+ async def skill_screenshot(
359
+ params: SkillTakeScreenshotAction,
360
+ browser_manager: BrowserManager,
361
+ file_system: CustomFileSystem
362
+ ):
363
+ """
364
+ Skill: Take screenshot with optional tab selection
365
+ """
366
+ try:
367
+ # Get browser session
368
+ browser_session = browser_manager.main_browser_session
369
+
370
+ # If tab_id is provided, switch to that tab
371
+ if params.tab_id:
372
+ target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
373
+ await browser_session.get_or_create_cdp_session(target_id, focus=True)
374
+
375
+ # Take screenshot using browser session
376
+ screenshot_bytes = await browser_session.take_screenshot()
377
+
378
+ # Generate timestamp for filename
379
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
380
+
381
+ # Get file system directory path (Path type)
382
+ fs_dir = file_system.get_dir()
383
+
384
+ # Create screenshots directory if it doesn't exist
385
+ screenshots_dir = fs_dir / "screenshots"
386
+ screenshots_dir.mkdir(exist_ok=True)
387
+
388
+ # Save screenshot to file system
389
+ page_title = await browser_session.get_current_page_title()
390
+ from pathvalidate import sanitize_filename
391
+ page_title = sanitize_filename(page_title)
392
+ filename = f"{page_title}-{timestamp}.png"
393
+ filepath = screenshots_dir / filename
394
+
395
+ with open(filepath, "wb") as f:
396
+ f.write(screenshot_bytes)
397
+
398
+ msg = f'📸 Screenshot saved to path: [{filename}]({str(filepath.relative_to(fs_dir))})'
399
+ logger.info(msg)
400
+ return ActionResult(
401
+ extracted_content=msg,
402
+ include_in_memory=True,
403
+ long_term_memory=f'Screenshot saved to {str(filepath.relative_to(fs_dir))}',
404
+ )
405
+
406
+ except Exception as e:
407
+ error_msg = f'❌ Failed to take screenshot: {str(e)}'
408
+ logger.error(error_msg)
409
+ return ActionResult(error=error_msg)
410
+
411
+ @self.registry.action(
412
+ 'Execute JavaScript code on webpage',
413
+ param_model=SkillCodeAction,
414
+ )
415
+ async def skill_code(
416
+ params: SkillCodeAction,
417
+ browser_manager: BrowserManager,
418
+ page_extraction_llm: BaseChatModel,
419
+ file_system: CustomFileSystem
420
+ ):
421
+ """
422
+ Skill: Generate and execute JavaScript code from functional requirements or code prompts with iterative retry logic
423
+ """
424
+
425
+ try:
426
+ if not page_extraction_llm:
427
+ raise RuntimeError("LLM is required for skill_code")
428
+
429
+ # Get browser session
430
+ browser_session = browser_manager.main_browser_session
431
+
432
+ # If tab_id is provided, switch to that tab
433
+ if params.tab_id:
434
+ target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
435
+ await browser_session.get_or_create_cdp_session(target_id, focus=True)
436
+
437
+ from vibe_surf.tools.utils import generate_java_script_code
438
+
439
+ success, execute_result, js_code = await generate_java_script_code(params.code_requirement,
440
+ page_extraction_llm, browser_session,
441
+ MAX_ITERATIONS=5)
442
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
443
+ code_file = f"codes/{timestamp}.js"
444
+ await file_system.write_file(code_file, js_code)
445
+
446
+ if len(execute_result) < 1000:
447
+ msg = f'JavaScript Code save at:{code_file}\nResult:\n```json\n {execute_result}\n```\n'
448
+ else:
449
+ result_file = f"codes/{timestamp}.json"
450
+ await file_system.write_file(result_file, execute_result)
451
+ msg = f'Code save at:{code_file}\n```javascript\n{js_code}\n```\n Result save at {result_file}:\n```json\n {execute_result[:1000]}\n...\n```'
452
+ if success:
453
+ return ActionResult(extracted_content=msg)
454
+ else:
455
+ return ActionResult(error=msg)
456
+
457
+ except Exception as e:
458
+ logger.error(f'❌ Skill Code failed: {e}')
459
+ return ActionResult(error=f'Skill code failed: {str(e)}')
460
+
461
+ @self.registry.action(
462
+ 'Get comprehensive financial data for stocks - retrieve company information, historical prices, news, earnings, dividends, analyst recommendations and other financial data using Yahoo Finance.',
463
+ param_model=SkillFinanceAction,
464
+ )
465
+ async def skill_finance(
466
+ params: SkillFinanceAction,
467
+ ):
468
+ """
469
+ Skill: Get comprehensive financial data using Yahoo Finance
470
+
471
+ Available methods include:
472
+ - get_info: Company information including sector, industry, market cap, business summary
473
+ - get_history: Historical stock prices and volume data over time periods
474
+ - get_news: Latest news articles about the company
475
+ - get_dividends: Historical dividend payments and yield data
476
+ - get_earnings: Quarterly and annual earnings data and growth trends
477
+ - get_recommendations: Analyst recommendations, price targets, and ratings
478
+ - get_balance_sheet: Company balance sheet data (assets, liabilities, equity)
479
+ - get_income_stmt: Income statement data (revenue, expenses, profit)
480
+ - get_cashflow: Cash flow statement data (operating, investing, financing)
481
+ - get_fast_info: Quick statistics like current price, volume, market cap
482
+ - get_institutional_holders: Institutional ownership and holdings data
483
+ - get_major_holders: Major shareholders and insider ownership percentages
484
+ - get_sustainability: ESG (Environmental, Social, Governance) scores and data
485
+ - get_upgrades_downgrades: Recent analyst upgrades and downgrades
486
+ - get_splits: Historical stock splits and stock split dates
487
+ - get_actions: Corporate actions including dividends and splits
488
+ - get_sec_filings: Recent SEC filings and regulatory documents
489
+ - get_calendar: Upcoming earnings dates and events
490
+ - get_mutualfund_holders: Mutual fund ownership data
491
+ - get_insider_purchases: Recent insider buying activity
492
+ - get_insider_transactions: All insider trading transactions
493
+ - get_shares: Outstanding shares and float data
494
+ """
495
+ try:
496
+ # Default to get_info if no methods specified
497
+ methods = params.methods if params.methods else [FinanceMethod.GET_INFO]
498
+
499
+ # Convert string methods to FinanceMethod enum if needed
500
+ if methods and isinstance(methods[0], str):
501
+ try:
502
+ methods = [FinanceMethod(method) for method in methods]
503
+ except ValueError as e:
504
+ available_methods = [method.value for method in FinanceMethod]
505
+ return ActionResult(
506
+ error=f'Invalid method in {methods}. Available methods: {available_methods}'
507
+ )
508
+
509
+ # Create data retriever with symbol
510
+ retriever = FinanceDataRetriever(params.symbol)
511
+
512
+ # Convert FinanceMethod enum values to strings for the retriever
513
+ method_strings = [method.value for method in methods]
514
+
515
+ # Retrieve financial data
516
+ financial_data = retriever.get_finance_data(
517
+ methods=method_strings,
518
+ period=getattr(params, 'period', '1y'),
519
+ start_date=getattr(params, 'start_date', None),
520
+ end_date=getattr(params, 'end_date', None),
521
+ interval=getattr(params, 'interval', '1d'),
522
+ num_news=getattr(params, 'num_news', 5)
523
+ )
524
+
525
+ # Format as markdown using the static method
526
+ markdown_content = FinanceMarkdownFormatter.format_finance_data(
527
+ symbol=params.symbol,
528
+ results=financial_data,
529
+ methods=method_strings
530
+ )
531
+
532
+ method_names = [method.value for method in methods]
533
+ logger.info(f'💹 Comprehensive finance data retrieved for {params.symbol} with methods: {method_names}')
534
+
535
+ return ActionResult(
536
+ extracted_content=markdown_content,
537
+ include_extracted_content_only_once=True,
538
+ long_term_memory=f'Retrieved comprehensive financial data for {params.symbol} using methods: {", ".join(method_names)}',
539
+ )
540
+
541
+ except Exception as e:
542
+ error_msg = f'❌ Failed to retrieve financial data for {params.symbol}: {str(e)}'
543
+ logger.error(error_msg)
544
+ return ActionResult(error=error_msg, extracted_content=error_msg)
545
+
546
+ @self.registry.action(
547
+ '',
548
+ param_model=SkillXhsAction,
549
+ )
550
+ async def skill_xhs(
551
+ params: SkillXhsAction,
552
+ browser_manager: BrowserManager,
553
+ file_system: CustomFileSystem
554
+ ):
555
+ """
556
+ Skill: Xiaohongshu API integration
557
+
558
+ Available methods:
559
+ - search_content_by_keyword: Search content by keyword with sorting options
560
+ - fetch_content_details: Get detailed information about specific content
561
+ - fetch_all_content_comments: Get all comments for specific content
562
+ - get_user_profile: Get user profile information
563
+ - fetch_all_user_content: Get all content posted by a user
564
+ - get_home_recommendations: Get homepage recommended content
565
+ """
566
+ try:
567
+ from vibe_surf.tools.website_api.xhs.client import XiaoHongShuApiClient
568
+
569
+ # Initialize client
570
+ xhs_client = XiaoHongShuApiClient(browser_session=browser_manager.main_browser_session)
571
+ await xhs_client.setup()
572
+
573
+ # Parse params JSON string
574
+ import json
575
+ from json_repair import repair_json
576
+ try:
577
+ method_params = json.loads(params.params)
578
+ except json.JSONDecodeError:
579
+ method_params = json.loads(repair_json(params.params))
580
+
581
+ # Execute the requested method
582
+ result = None
583
+ if params.method == "search_content_by_keyword":
584
+ result = await xhs_client.search_content_by_keyword(**method_params)
585
+ elif params.method == "fetch_content_details":
586
+ result = await xhs_client.fetch_content_details(**method_params)
587
+ elif params.method == "fetch_all_content_comments":
588
+ result = await xhs_client.fetch_all_content_comments(**method_params)
589
+ elif params.method == "get_user_profile":
590
+ result = await xhs_client.get_user_profile(**method_params)
591
+ elif params.method == "fetch_all_user_content":
592
+ result = await xhs_client.fetch_all_user_content(**method_params)
593
+ elif params.method == "get_home_recommendations":
594
+ result = await xhs_client.get_home_recommendations()
595
+ else:
596
+ return ActionResult(error=f"Unknown method: {params.method}")
597
+
598
+ # Save result to file
599
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
600
+ filename = f"xhs_{params.method}_{timestamp}.json"
601
+ filepath = file_system.get_dir() / "data" / filename
602
+ filepath.parent.mkdir(exist_ok=True)
603
+
604
+ with open(filepath, "w", encoding="utf-8") as f:
605
+ json.dump(result, f, ensure_ascii=False, indent=2)
606
+
607
+ # Format result as markdown
608
+ if isinstance(result, list):
609
+ display_count = min(5, len(result))
610
+ md_content = f"## Xiaohongshu {params.method.replace('_', ' ').title()}\n\n"
611
+ md_content += f"Showing {display_count} of {len(result)} results:\n\n"
612
+ for i, item in enumerate(result[:display_count]):
613
+ md_content += f"### Result {i + 1}\n"
614
+ for key, value in item.items():
615
+ if not value:
616
+ continue
617
+ if isinstance(value, str) and len(value) > 200:
618
+ md_content += f"- **{key}**: {value[:200]}...\n"
619
+ else:
620
+ md_content += f"- **{key}**: {value}\n"
621
+ md_content += "\n"
622
+ else:
623
+ md_content = f"## Xiaohongshu {params.method.replace('_', ' ').title()}\n\n"
624
+ for key, value in result.items():
625
+ if isinstance(value, str) and len(value) > 200:
626
+ md_content += f"- **{key}**: {value[:200]}...\n"
627
+ else:
628
+ md_content += f"- **{key}**: {value}\n"
629
+ md_content += "\n"
630
+
631
+ # Add file path to markdown
632
+ relative_path = str(filepath.relative_to(file_system.get_dir()))
633
+ md_content += f"\n> 📁 Full data saved to: [{filename}]({relative_path})\n"
634
+ md_content += f"> 💡 Click the link above to view all results.\n"
635
+
636
+ logger.info(f'📕 Xiaohongshu data retrieved with method: {params.method}')
637
+
638
+ # Close client
639
+ await xhs_client.close()
640
+
641
+ return ActionResult(
642
+ extracted_content=md_content
643
+ )
644
+
645
+ except Exception as e:
646
+ error_msg = f'❌ Failed to retrieve Xiaohongshu data: {str(e)}'
647
+ logger.error(error_msg)
648
+ return ActionResult(error=error_msg, extracted_content=error_msg)
649
+
650
+ @self.registry.action(
651
+ '',
652
+ param_model=SkillWeiboAction,
653
+ )
654
+ async def skill_weibo(
655
+ params: SkillWeiboAction,
656
+ browser_manager: BrowserManager,
657
+ file_system: CustomFileSystem
658
+ ):
659
+ """
660
+ Skill: Weibo API integration
661
+
662
+ Available methods:
663
+ - search_posts_by_keyword: Search posts by keyword with sorting options
664
+ - get_post_detail: Get detailed information about specific post
665
+ - get_all_post_comments: Get all comments for specific post
666
+ - get_user_info: Get user profile information
667
+ - get_all_user_posts: Get all posts by a user
668
+ - get_hot_posts: Get hot posts
669
+ - get_trending_list: Get trending list
670
+ """
671
+ try:
672
+ from vibe_surf.tools.website_api.weibo.client import WeiboApiClient
673
+
674
+ # Initialize client
675
+ wb_client = WeiboApiClient(browser_session=browser_manager.main_browser_session)
676
+ await wb_client.setup()
677
+
678
+ # Parse params JSON string
679
+ import json
680
+ from json_repair import repair_json
681
+ try:
682
+ method_params = json.loads(params.params)
683
+ except json.JSONDecodeError:
684
+ method_params = json.loads(repair_json(params.params))
685
+
686
+ # Execute the requested method
687
+ result = None
688
+ if params.method == "search_posts_by_keyword":
689
+ result = await wb_client.search_posts_by_keyword(**method_params)
690
+ elif params.method == "get_post_detail":
691
+ result = await wb_client.get_post_detail(**method_params)
692
+ elif params.method == "get_all_post_comments":
693
+ result = await wb_client.get_all_post_comments(**method_params)
694
+ elif params.method == "get_user_info":
695
+ result = await wb_client.get_user_info(**method_params)
696
+ elif params.method == "get_all_user_posts":
697
+ result = await wb_client.get_all_user_posts(**method_params)
698
+ elif params.method == "get_hot_posts":
699
+ result = await wb_client.get_hot_posts()
700
+ elif params.method == "get_trending_posts":
701
+ result = await wb_client.get_trending_posts()
702
+ else:
703
+ return ActionResult(error=f"Unknown method: {params.method}")
704
+
705
+ # Save result to file
706
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
707
+ filename = f"weibo_{params.method}_{timestamp}.json"
708
+ filepath = file_system.get_dir() / "data" / filename
709
+ filepath.parent.mkdir(exist_ok=True)
710
+
711
+ with open(filepath, "w", encoding="utf-8") as f:
712
+ json.dump(result, f, ensure_ascii=False, indent=2)
713
+ # Format result as markdown
714
+ if isinstance(result, list):
715
+ display_count = min(5, len(result))
716
+ md_content = f"## Weibo {params.method.replace('_', ' ').title()}\n\n"
717
+ md_content += f"Showing {display_count} of {len(result)} results:\n\n"
718
+ for i, item in enumerate(result[:display_count]):
719
+ md_content += f"### Result {i + 1}\n"
720
+ for key, value in item.items():
721
+ if not value:
722
+ continue
723
+ if isinstance(value, str) and len(value) > 200:
724
+ md_content += f"- **{key}**: {value[:200]}...\n"
725
+ else:
726
+ md_content += f"- **{key}**: {value}\n"
727
+ md_content += "\n"
728
+ else:
729
+ md_content = f"## Weibo {params.method.replace('_', ' ').title()}\n\n"
730
+ for key, value in result.items():
731
+ if isinstance(value, str) and len(value) > 200:
732
+ md_content += f"- **{key}**: {value[:200]}...\n"
733
+ else:
734
+ md_content += f"- **{key}**: {value}\n"
735
+ md_content += "\n"
736
+
737
+ # Add file path to markdown
738
+ relative_path = str(filepath.relative_to(file_system.get_dir()))
739
+ md_content += f"\n> 📁 Full data saved to: [{filename}]({relative_path})\n"
740
+ md_content += f"> 💡 Click the link above to view all results.\n"
741
+
742
+ logger.info(f'🐦 Weibo data retrieved with method: {params.method}')
743
+
744
+ # Close client
745
+ await wb_client.close()
746
+
747
+ return ActionResult(
748
+ extracted_content=md_content
749
+ )
750
+
751
+ except Exception as e:
752
+ import traceback
753
+ traceback.print_exc()
754
+ error_msg = f'❌ Failed to retrieve Weibo data: {str(e)}. \nMost likely you are not login, please go to: [Weibo login page](https://passport.weibo.com/sso/signin?entry=miniblog&source=miniblog) and login.'
755
+ logger.error(error_msg)
756
+ return ActionResult(error=error_msg, extracted_content=error_msg)
757
+
758
+ @self.registry.action(
759
+ '',
760
+ param_model=SkillDouyinAction,
761
+ )
762
+ async def skill_douyin(
763
+ params: SkillDouyinAction,
764
+ browser_manager: BrowserManager,
765
+ file_system: CustomFileSystem
766
+ ):
767
+ """
768
+ Skill: Douyin API integration
769
+
770
+ Available methods:
771
+ - search_content_by_keyword: Search content by keyword with filtering options
772
+ - fetch_video_details: Get detailed information about specific video
773
+ - fetch_all_video_comments: Get all comments for specific video
774
+ - fetch_user_info: Get user profile information
775
+ - fetch_all_user_videos: Get all videos by a user
776
+ """
777
+ try:
778
+ from vibe_surf.tools.website_api.douyin.client import DouyinApiClient
779
+
780
+ # Initialize client
781
+ dy_client = DouyinApiClient(browser_session=browser_manager.main_browser_session)
782
+ await dy_client.setup()
783
+
784
+ # Parse params JSON string
785
+ import json
786
+ from json_repair import repair_json
787
+ try:
788
+ method_params = json.loads(params.params)
789
+ except json.JSONDecodeError:
790
+ method_params = json.loads(repair_json(params.params))
791
+
792
+ # Execute the requested method
793
+ result = None
794
+ if params.method == "search_content_by_keyword":
795
+ result = await dy_client.search_content_by_keyword(**method_params)
796
+ elif params.method == "fetch_video_details":
797
+ result = await dy_client.fetch_video_details(**method_params)
798
+ elif params.method == "fetch_all_video_comments":
799
+ result = await dy_client.fetch_all_video_comments(**method_params)
800
+ elif params.method == "fetch_user_info":
801
+ result = await dy_client.fetch_user_info(**method_params)
802
+ elif params.method == "fetch_all_user_videos":
803
+ result = await dy_client.fetch_all_user_videos(**method_params)
804
+ else:
805
+ return ActionResult(error=f"Unknown method: {params.method}")
806
+
807
+ # Save result to file
808
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
809
+ filename = f"douyin_{params.method}_{timestamp}.json"
810
+ filepath = file_system.get_dir() / "data" / filename
811
+ filepath.parent.mkdir(exist_ok=True)
812
+
813
+ with open(filepath, "w", encoding="utf-8") as f:
814
+ json.dump(result, f, ensure_ascii=False, indent=2)
815
+
816
+ # Format result as markdown
817
+ if isinstance(result, list):
818
+ display_count = min(5, len(result))
819
+ md_content = f"## Douyin {params.method.replace('_', ' ').title()}\n\n"
820
+ md_content += f"Showing {display_count} of {len(result)} results:\n\n"
821
+ for i, item in enumerate(result[:display_count]):
822
+ md_content += f"### Result {i + 1}\n"
823
+ for key, value in item.items():
824
+ if not value:
825
+ continue
826
+ if isinstance(value, str) and len(value) > 200:
827
+ md_content += f"- **{key}**: {value[:200]}...\n"
828
+ else:
829
+ md_content += f"- **{key}**: {value}\n"
830
+ md_content += "\n"
831
+ else:
832
+ md_content = f"## Douyin {params.method.replace('_', ' ').title()}\n\n"
833
+ for key, value in result.items():
834
+ if isinstance(value, str) and len(value) > 200:
835
+ md_content += f"- **{key}**: {value[:200]}...\n"
836
+ else:
837
+ md_content += f"- **{key}**: {value}\n"
838
+ md_content += "\n"
839
+
840
+ # Add file path to markdown
841
+ relative_path = str(filepath.relative_to(file_system.get_dir()))
842
+ md_content += f"\n> 📁 Full data saved to: [{filename}]({relative_path})\n"
843
+ md_content += f"> 💡 Click the link above to view all results.\n"
844
+
845
+ logger.info(f'🎵 Douyin data retrieved with method: {params.method}')
846
+
847
+ # Close client
848
+ await dy_client.close()
849
+
850
+ return ActionResult(
851
+ extracted_content=md_content
852
+ )
853
+
854
+ except Exception as e:
855
+ error_msg = f'❌ Failed to retrieve Douyin data: {str(e)}'
856
+ logger.error(error_msg)
857
+ return ActionResult(error=error_msg, extracted_content=error_msg)
858
+
859
+ @self.registry.action(
860
+ """YouTube API - If users want to know the specific content of this video, please use get_video_transcript to get detailed video content first.""",
861
+ param_model=SkillYoutubeAction,
862
+ )
863
+ async def skill_youtube(
864
+ params: SkillYoutubeAction,
865
+ browser_manager: BrowserManager,
866
+ file_system: CustomFileSystem
867
+ ):
868
+ """
869
+ Skill: YouTube API integration
870
+
871
+ Available methods:
872
+ - search_videos: Search videos by keyword
873
+ - get_video_details: Get detailed information about specific video
874
+ - get_video_comments: Get comments for specific video
875
+ - get_channel_info: Get channel information
876
+ - get_channel_videos: Get videos from specific channel
877
+ - get_trending_videos: Get trending videos
878
+ - get_video_transcript: Get video transcript in multiple languages
879
+ """
880
+ try:
881
+ from vibe_surf.tools.website_api.youtube.client import YouTubeApiClient
882
+
883
+ # Initialize client
884
+ yt_client = YouTubeApiClient(browser_session=browser_manager.main_browser_session)
885
+ await yt_client.setup()
886
+
887
+ # Parse params JSON string
888
+ import json
889
+ from json_repair import repair_json
890
+ try:
891
+ method_params = json.loads(params.params)
892
+ except json.JSONDecodeError:
893
+ method_params = json.loads(repair_json(params.params))
894
+
895
+ # Execute the requested method
896
+ result = None
897
+ if params.method == "search_videos":
898
+ result = await yt_client.search_videos(**method_params)
899
+ elif params.method == "get_video_details":
900
+ result = await yt_client.get_video_details(**method_params)
901
+ elif params.method == "get_video_comments":
902
+ result = await yt_client.get_video_comments(**method_params)
903
+ elif params.method == "get_channel_info":
904
+ result = await yt_client.get_channel_info(**method_params)
905
+ elif params.method == "get_channel_videos":
906
+ result = await yt_client.get_channel_videos(**method_params)
907
+ elif params.method == "get_trending_videos":
908
+ result = await yt_client.get_trending_videos()
909
+ elif params.method == "get_video_transcript":
910
+ result = await yt_client.get_video_transcript(**method_params)
911
+ else:
912
+ return ActionResult(error=f"Unknown method: {params.method}")
913
+
914
+ # Save result to file
915
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
916
+ filename = f"youtube_{params.method}_{timestamp}.json"
917
+ filepath = file_system.get_dir() / "data" / filename
918
+ filepath.parent.mkdir(exist_ok=True)
919
+
920
+ with open(filepath, "w", encoding="utf-8") as f:
921
+ json.dump(result, f, ensure_ascii=False, indent=2)
922
+
923
+ # Format result as markdown
924
+ if isinstance(result, list):
925
+ display_count = min(5, len(result))
926
+ md_content = f"## YouTube {params.method.replace('_', ' ').title()}\n\n"
927
+ md_content += f"Showing {display_count} of {len(result)} results:\n\n"
928
+ for i, item in enumerate(result[:display_count]):
929
+ md_content += f"### Result {i + 1}\n"
930
+ for key, value in item.items():
931
+ if not value:
932
+ continue
933
+ if isinstance(value, str) and len(value) > 200:
934
+ md_content += f"- **{key}**: {value[:200]}...\n"
935
+ else:
936
+ md_content += f"- **{key}**: {value}\n"
937
+ md_content += "\n"
938
+ else:
939
+ md_content = f"## YouTube {params.method.replace('_', ' ').title()}\n\n"
940
+ for key, value in result.items():
941
+ if isinstance(value, str) and len(value) > 200:
942
+ md_content += f"- **{key}**: {value[:200]}...\n"
943
+ else:
944
+ md_content += f"- **{key}**: {value}\n"
945
+ md_content += "\n"
946
+
947
+ # Add file path to markdown
948
+ relative_path = str(filepath.relative_to(file_system.get_dir()))
949
+ md_content += f"\n> 📁 Full data saved to: [{filename}]({relative_path})\n"
950
+ md_content += f"> 💡 Click the link above to view all results.\n"
951
+
952
+ logger.info(f'🎬 YouTube data retrieved with method: {params.method}')
953
+
954
+ # Close client
955
+ await yt_client.close()
956
+
957
+ return ActionResult(
958
+ extracted_content=md_content
959
+ )
960
+
961
+ except Exception as e:
962
+ error_msg = f'❌ Failed to retrieve YouTube data: {str(e)}'
963
+ logger.error(error_msg)
964
+ return ActionResult(error=error_msg, extracted_content=error_msg)
965
+
966
+ @self.registry.action(
967
+ """Execute Python code for data processing, visualization, and analysis.
968
+ """,
969
+ param_model=ExecutePythonCodeAction,
970
+ )
971
+ async def execute_python_code(
972
+ params: ExecutePythonCodeAction,
973
+ file_system: CustomFileSystem
974
+ ):
975
+ try:
976
+ # Get base directory from file system
977
+ base_dir = str(file_system.get_dir())
978
+
979
+ # Create a secure namespace with pre-imported libraries
980
+ namespace = {
981
+ '__builtins__': {
982
+ # Safe built-ins only
983
+ 'abs': abs, 'all': all, 'any': any, 'bin': bin, 'bool': bool,
984
+ 'chr': chr, 'dict': dict, 'dir': dir, 'divmod': divmod,
985
+ 'enumerate': enumerate, 'filter': filter, 'float': float,
986
+ 'format': format, 'frozenset': frozenset, 'getattr': getattr,
987
+ 'hasattr': hasattr, 'hash': hash, 'hex': hex, 'id': id,
988
+ 'int': int, 'isinstance': isinstance, 'issubclass': issubclass,
989
+ 'iter': iter, 'len': len, 'list': list, 'map': map,
990
+ 'max': max, 'min': min, 'next': next, 'oct': oct,
991
+ 'ord': ord, 'pow': pow, 'print': print, 'range': range,
992
+ 'repr': repr, 'reversed': reversed, 'round': round,
993
+ 'set': set, 'setattr': setattr, 'slice': slice,
994
+ 'sorted': sorted, 'str': str, 'sum': sum, 'tuple': tuple,
995
+ 'type': type, 'zip': zip,
996
+ },
997
+ 'SAVE_DIR': base_dir,
998
+ }
999
+
1000
+ # Import common libraries safely
1001
+ try:
1002
+
1003
+ # Add libraries to namespace
1004
+ namespace.update({
1005
+ 'pd': pd,
1006
+ 'pandas': pd,
1007
+ 'np': np,
1008
+ 'numpy': np,
1009
+ 'plt': plt,
1010
+ 'matplotlib': matplotlib,
1011
+ 'sns': sns,
1012
+ 'seaborn': sns,
1013
+ 'json': json,
1014
+ 're': re,
1015
+ 'os': os,
1016
+ 'openpyxl': openpyxl,
1017
+ 'datetime': datetime,
1018
+ 'timedelta': timedelta,
1019
+ 'Path': Path,
1020
+ 'csv': csv,
1021
+ 'io': io
1022
+ })
1023
+
1024
+ # Add secure file helper functions
1025
+ def safe_open(path, mode='r', **kwargs):
1026
+ """Secure file open that restricts operations to BASE_DIR"""
1027
+ if (not path.startswith(base_dir)) and os.path.isabs(path):
1028
+ raise PermissionError("Absolute paths are not allowed. Only relative paths within workspace are supported.")
1029
+ if not path.startswith(base_dir):
1030
+ full_path = os.path.join(base_dir, path)
1031
+ else:
1032
+ full_path = path
1033
+ if not full_path.startswith(base_dir):
1034
+ raise PermissionError("File operations are restricted to workspace directory only.")
1035
+ os.makedirs(os.path.dirname(full_path), exist_ok=True)
1036
+ return open(full_path, mode, **kwargs)
1037
+
1038
+ def safe_path(path):
1039
+ """Get safe path within BASE_DIR"""
1040
+ if (not path.startswith(base_dir)) and os.path.isabs(path):
1041
+ raise PermissionError(
1042
+ "Absolute paths are not allowed. Only relative paths within workspace are supported.")
1043
+ if not path.startswith(base_dir):
1044
+ full_path = os.path.join(base_dir, path)
1045
+ else:
1046
+ full_path = path
1047
+ if not full_path.startswith(base_dir):
1048
+ raise PermissionError("File operations are restricted to workspace directory only.")
1049
+ return full_path
1050
+
1051
+ namespace.update({
1052
+ 'open': safe_open,
1053
+ 'safe_path': safe_path,
1054
+ })
1055
+
1056
+ except ImportError as e:
1057
+ logger.warning(f"Failed to import some libraries: {e}")
1058
+
1059
+ # Remove import statements from user code since modules are pre-imported
1060
+ cleaned_code = remove_import_statements(params.code)
1061
+ logger.info(cleaned_code)
1062
+
1063
+ # Check for dangerous operations
1064
+ dangerous_keywords = [
1065
+ 'import subprocess', 'import sys', 'import importlib',
1066
+ '__import__', 'eval(', 'exec(', 'compile(',
1067
+ 'open(', 'file(', 'input(', 'raw_input(',
1068
+ 'execfile', 'reload', 'vars(', 'globals(', 'locals(',
1069
+ 'delattr', 'setattr', 'getattr', '__'
1070
+ ]
1071
+
1072
+ code_lower = cleaned_code.lower()
1073
+ for keyword in dangerous_keywords:
1074
+ if keyword in code_lower and keyword not in ['open(', '__']: # Allow our safe open
1075
+ if keyword == 'open(' and 'safe_open' in cleaned_code:
1076
+ continue # Allow our safe open function
1077
+ return ActionResult(
1078
+ error=f"🚫 Security Error: Dangerous operation '{keyword}' detected. Code execution blocked for security reasons."
1079
+ )
1080
+
1081
+ # Capture stdout to get print outputs
1082
+ import sys
1083
+ from io import StringIO
1084
+
1085
+ old_stdout = sys.stdout
1086
+ sys.stdout = captured_output = StringIO()
1087
+
1088
+ try:
1089
+ # Compile and execute the cleaned code
1090
+ compiled_code = compile(cleaned_code, '<code>', 'exec')
1091
+ exec(compiled_code, namespace, namespace)
1092
+
1093
+ # Get the captured output
1094
+ output_value = captured_output.getvalue()
1095
+ if output_value.strip():
1096
+ result_text = output_value
1097
+ else:
1098
+ result_text = "No output printed to console after executing the Python code."
1099
+ finally:
1100
+ # Restore stdout
1101
+ sys.stdout = old_stdout
1102
+
1103
+ logger.info(f'🐍 Python code executed successfully')
1104
+ return ActionResult(
1105
+ extracted_content=result_text)
1106
+
1107
+ except PermissionError as e:
1108
+ error_msg = f'🚫 Security Error: {str(e)}'
1109
+ logger.error(error_msg)
1110
+ return ActionResult(error=error_msg, extracted_content=error_msg)
1111
+ except SyntaxError as e:
1112
+ error_msg = f'❌ Syntax Error in Python code: {str(e)}'
1113
+ logger.error(error_msg)
1114
+ return ActionResult(error=error_msg, extracted_content=error_msg)
1115
+ except Exception as e:
1116
+ error_msg = f'❌ Python code execution failed: {str(e)}'
1117
+ logger.error(error_msg)
1118
+ return ActionResult(error=error_msg, extracted_content=error_msg)
1119
+
1120
+ @self.registry.action(
1121
+ 'Get trending/real-time news via NewsNow. Leave keywords EMPTY for general hot searches to avoid over-filtering. Only set keywords for specific topics.',
1122
+ param_model=SkillTrendAction,
1123
+ )
1124
+ async def skill_trend(
1125
+ params: SkillTrendAction,
1126
+ file_system: CustomFileSystem
1127
+ ):
1128
+ """
1129
+ Skill: Get trending news from NewsNow API
1130
+
1131
+ Fetches news from various sources (微博, 知乎, IT之家, GitHub, etc.)
1132
+ Can filter by source_id and keywords
1133
+ """
1134
+ try:
1135
+ from vibe_surf.tools.website_api.newsnow.client import NewsNowClient
1136
+
1137
+ # Initialize NewsNow client
1138
+ client = NewsNowClient()
1139
+
1140
+ # If source_id is None, show available sources
1141
+ # If source_id is "*", fetch from all sources
1142
+ if params.source_id is None:
1143
+ available_sources = client.get_available_sources()
1144
+
1145
+ # Format available sources as markdown
1146
+ md_content = "## 📰 Available News Sources\n\n"
1147
+ md_content += f"Total: {len(available_sources)} sources\n\n"
1148
+
1149
+ # Group by type
1150
+ realtime_sources = []
1151
+ hottest_sources = []
1152
+ all_sources = []
1153
+
1154
+ for source_id, metadata in available_sources.items():
1155
+ source_type = metadata.get('type', 'all')
1156
+ source_name = metadata.get('name', source_id)
1157
+ source_title = metadata.get('title', '')
1158
+
1159
+ display_name = f"{source_name} - {source_title}" if source_title else source_name
1160
+
1161
+ if source_type == 'realtime':
1162
+ realtime_sources.append((source_id, display_name))
1163
+ elif source_type == 'hottest':
1164
+ hottest_sources.append((source_id, display_name))
1165
+ else:
1166
+ all_sources.append((source_id, display_name))
1167
+
1168
+ if realtime_sources:
1169
+ md_content += "### 🔴 Real-time News Sources\n"
1170
+ for sid, name in realtime_sources:
1171
+ md_content += f"- `{sid}`: {name}\n"
1172
+ md_content += "\n"
1173
+
1174
+ if hottest_sources:
1175
+ md_content += "### 🔥 Hottest News Sources\n"
1176
+ for sid, name in hottest_sources:
1177
+ md_content += f"- `{sid}`: {name}\n"
1178
+ md_content += "\n"
1179
+
1180
+ if all_sources:
1181
+ md_content += "### 📌 General News Sources\n"
1182
+ for sid, name in all_sources:
1183
+ md_content += f"- `{sid}`: {name}\n"
1184
+ md_content += "\n"
1185
+
1186
+ md_content += "\n> 💡 Use any source_id above to fetch news from that specific source.\n"
1187
+
1188
+ logger.info(f'📰 Listed {len(available_sources)} available news sources')
1189
+ return ActionResult(
1190
+ extracted_content=md_content,
1191
+ include_extracted_content_only_once=True,
1192
+ long_term_memory=f'Listed {len(available_sources)} available news sources'
1193
+ )
1194
+
1195
+ # Fetch news from specified source or all sources
1196
+ # If source_id is "*", set it to None to fetch all sources
1197
+ fetch_source_id = None if params.source_id == "*" else params.source_id
1198
+
1199
+ news_results = await client.get_news(
1200
+ source_id=fetch_source_id,
1201
+ count=params.count,
1202
+ news_type=None # Get both realtime and hottest
1203
+ )
1204
+
1205
+ # Filter by keywords if provided
1206
+ if params.key_words:
1207
+ keywords = [kw.strip().lower() for kw in params.key_words.split(',')]
1208
+ filtered_results = {}
1209
+
1210
+ for source_id, news_items in news_results.items():
1211
+ filtered_items = []
1212
+ for item in news_items:
1213
+ # Convert item to JSON string and check if any keyword matches
1214
+ item_copy = item.copy()
1215
+ if 'url' in item_copy:
1216
+ del item_copy['url']
1217
+ if 'id' in item_copy:
1218
+ del item_copy['id']
1219
+ if 'mobileUrl' in item_copy:
1220
+ del item_copy['mobileUrl']
1221
+ item_str = json.dumps(item_copy, ensure_ascii=False).lower()
1222
+ if any(keyword in item_str for keyword in keywords):
1223
+ filtered_items.append(item)
1224
+
1225
+ if filtered_items:
1226
+ filtered_results[source_id] = filtered_items
1227
+
1228
+ news_results = filtered_results
1229
+
1230
+ # Format results as markdown
1231
+ if not news_results:
1232
+ md_content = f"## 📰 No news found\n\n"
1233
+ if params.source_id:
1234
+ md_content += f"No news found for source: {params.source_id}\n"
1235
+ if params.key_words:
1236
+ md_content += f"No news matching keywords: {params.key_words}\n"
1237
+ else:
1238
+ total_items = sum(len(items) for items in news_results.values())
1239
+ md_content = f"## 📰 Trending News\n\n"
1240
+ md_content += f"Found {total_items} news items from {len(news_results)} source(s)\n"
1241
+ if params.key_words:
1242
+ md_content += f"Filtered by keywords: {params.key_words}\n"
1243
+ md_content += "\n---\n\n"
1244
+
1245
+ # Get source metadata for display names
1246
+ all_sources = client.get_available_sources()
1247
+
1248
+ for source_id, news_items in news_results.items():
1249
+ source_info = all_sources.get(source_id, {})
1250
+ source_name = source_info.get('name', source_id)
1251
+ source_title = source_info.get('title', '')
1252
+
1253
+ display_name = f"{source_name} - {source_title}" if source_title else source_name
1254
+
1255
+ md_content += f"### 📌 {display_name} (`{source_id}`)\n\n"
1256
+ md_content += f"{len(news_items)} items\n\n"
1257
+
1258
+ for i, item in enumerate(news_items[:params.count], 1):
1259
+ title = item.get('title', 'No title')
1260
+ url = item.get('url', '#')
1261
+
1262
+ md_content += f"{i}. [{title}]({url})\n"
1263
+
1264
+ md_content += "\n"
1265
+
1266
+ # Save to file if results are large
1267
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
1268
+ filename = f"newsnow_trend_{timestamp}.json"
1269
+ filepath = file_system.get_dir() / "data" / filename
1270
+ filepath.parent.mkdir(exist_ok=True)
1271
+
1272
+ with open(filepath, "w", encoding="utf-8") as f:
1273
+ json.dump(news_results, f, ensure_ascii=False, indent=2)
1274
+
1275
+ # Add file reference to markdown
1276
+ relative_path = str(filepath.relative_to(file_system.get_dir()))
1277
+ md_content += f"\n> 📁 Full data saved to: [{filename}]({relative_path})\n"
1278
+
1279
+ logger.info(f'📰 NewsNow trend data retrieved: {len(news_results)} sources, {sum(len(items) for items in news_results.values())} items')
1280
+
1281
+ return ActionResult(
1282
+ extracted_content=md_content,
1283
+ include_extracted_content_only_once=True,
1284
+ long_term_memory=f'Retrieved trending news from {len(news_results)} sources with {sum(len(items) for items in news_results.values())} items'
1285
+ )
1286
+
1287
+ except Exception as e:
1288
+ error_msg = f'❌ Failed to retrieve NewsNow trending data: {str(e)}'
1289
+ logger.error(error_msg)
1290
+ return ActionResult(error=error_msg, extracted_content=error_msg)
1291
+
1292
+ def _register_extra_tools(self):
1293
+ """
1294
+ Register extra tools for dynamic toolkit and MCP tool access
1295
+ """
1296
+
1297
+ @self.registry.action(
1298
+ 'Get all available toolkit types from both Composio and MCP clients',
1299
+ param_model=NoParamsAction,
1300
+ )
1301
+ async def get_all_toolkit_types():
1302
+ """
1303
+ Get all toolkit types available in composio_toolkits and mcp_clients
1304
+
1305
+ Returns:
1306
+ ActionResult with list of all toolkit type names
1307
+ """
1308
+ try:
1309
+ toolkit_types = []
1310
+
1311
+ # Add Composio toolkit types
1312
+ if self.composio_toolkits:
1313
+ toolkit_types.extend(list(self.composio_toolkits.keys()))
1314
+
1315
+ # Add MCP client types
1316
+ if self.mcp_clients:
1317
+ toolkit_types.extend(list(self.mcp_clients.keys()))
1318
+
1319
+ result_text = f"Available toolkit types ({len(toolkit_types)} total):\n\n"
1320
+
1321
+ # Group by type
1322
+ composio_types = list(self.composio_toolkits.keys()) if self.composio_toolkits else []
1323
+ mcp_types = list(self.mcp_clients.keys()) if self.mcp_clients else []
1324
+
1325
+ if composio_types:
1326
+ result_text += f"**Composio Toolkits ({len(composio_types)}):**\n"
1327
+ for toolkit in composio_types:
1328
+ result_text += f"- {toolkit}\n"
1329
+ result_text += "\n"
1330
+
1331
+ if mcp_types:
1332
+ result_text += f"**MCP Clients ({len(mcp_types)}):**\n"
1333
+ for client in mcp_types:
1334
+ result_text += f"- {client}\n"
1335
+ result_text += "\n"
1336
+
1337
+ if not toolkit_types:
1338
+ result_text = "No toolkit types available. Please register Composio toolkits or MCP clients first."
1339
+
1340
+ logger.info(f'📋 Retrieved {len(toolkit_types)} toolkit types')
1341
+ return ActionResult(
1342
+ extracted_content=result_text,
1343
+ )
1344
+
1345
+ except Exception as e:
1346
+ logger.error(f'❌ Failed to get toolkit types: {e}')
1347
+ return ActionResult(error=f'Failed to get toolkit types: {str(e)}')
1348
+
1349
+ @self.registry.action(
1350
+ 'Search tools within a specific toolkit type by name and description filters',
1351
+ param_model=SearchToolAction,
1352
+ )
1353
+ async def search_tool(params: SearchToolAction):
1354
+ """
1355
+ Search tools by toolkit type and filters
1356
+
1357
+ Args:
1358
+ params: SearchToolAction containing toolkit_type and filters
1359
+
1360
+ Returns:
1361
+ ActionResult with matching tools and their descriptions
1362
+ """
1363
+ try:
1364
+ toolkit_type = params.toolkit_type
1365
+ try:
1366
+ if params.filters:
1367
+ filters = [f.lower() for f in params.filters]
1368
+ else:
1369
+ filters = []
1370
+ except Exception as e:
1371
+ filters = []
1372
+
1373
+ matching_tools = []
1374
+
1375
+ # Search in registry actions with prefixes
1376
+ for action_name, action in self.registry.registry.actions.items():
1377
+ # Check if this action belongs to the specified toolkit type
1378
+ if toolkit_type in self.composio_toolkits and action_name.startswith(f"cpo.{toolkit_type}."):
1379
+ # Get tool description from param_model
1380
+ try:
1381
+ param_dict = action.param_model.model_json_schema()
1382
+ description = param_dict.get('description', action_name)
1383
+ except:
1384
+ description = action_name
1385
+
1386
+ # Check if any filter matches tool name or description
1387
+ search_text = f"{action_name} {description}".lower()
1388
+ if not filters or any(filter_term in search_text for filter_term in filters):
1389
+ matching_tools.append({
1390
+ 'tool_name': action_name,
1391
+ 'description': description
1392
+ })
1393
+
1394
+ elif toolkit_type in self.mcp_clients and action_name.startswith(f"mcp.{toolkit_type}."):
1395
+ # Get tool description from param_model
1396
+ try:
1397
+ param_dict = action.param_model.model_json_schema()
1398
+ description = param_dict.get('description', action_name)
1399
+ except:
1400
+ description = action_name
1401
+
1402
+ # Check if any filter matches tool name or description
1403
+ search_text = f"{action_name} {description}".lower()
1404
+ if not filters or any(filter_term in search_text for filter_term in filters):
1405
+ matching_tools.append({
1406
+ 'tool_name': action_name,
1407
+ 'description': description
1408
+ })
1409
+
1410
+ # Format results
1411
+ if matching_tools:
1412
+ result_text = f"Found {len(matching_tools)} tools in '{toolkit_type}' matching filters {params.filters}:\n\n"
1413
+ for i, tool in enumerate(matching_tools, 1):
1414
+ result_text += f"{i}. **{tool['tool_name']}**\n"
1415
+ result_text += f" Description: {tool['description']}\n\n"
1416
+ else:
1417
+ result_text = f"No tools found in '{toolkit_type}' matching filters {params.filters}"
1418
+
1419
+ logger.info(f'🔍 Found {len(matching_tools)} tools in {toolkit_type} matching filters')
1420
+ return ActionResult(
1421
+ extracted_content=result_text,
1422
+ include_extracted_content_only_once=True
1423
+ )
1424
+
1425
+ except Exception as e:
1426
+ logger.error(f'❌ Failed to search tools: {e}')
1427
+ return ActionResult(error=f'Failed to search tools: {str(e)}')
1428
+
1429
+ @self.registry.action(
1430
+ 'Get detailed information about a specific tool including its parameters',
1431
+ param_model=GetToolInfoAction,
1432
+ )
1433
+ async def get_tool_info(params: GetToolInfoAction):
1434
+ """
1435
+ Get tool information including parameter model
1436
+
1437
+ Args:
1438
+ params: GetToolInfoAction containing tool_name
1439
+
1440
+ Returns:
1441
+ ActionResult with tool parameter information
1442
+ """
1443
+ try:
1444
+ tool_name = params.tool_name
1445
+
1446
+ if tool_name not in self.registry.registry.actions:
1447
+ return ActionResult(error=f'Tool "{tool_name}" not found in registry')
1448
+
1449
+ action = self.registry.registry.actions[tool_name]
1450
+
1451
+ # Convert param_model to dict
1452
+ try:
1453
+ param_dict = action.param_model.model_json_schema()
1454
+ result_text = json.dumps(param_dict, indent=2, ensure_ascii=False)
1455
+ except Exception as e:
1456
+ result_text = f"Tool: {tool_name}\nError getting parameter info: {str(e)}"
1457
+
1458
+ logger.info(f'ℹ️ Retrieved tool info for: {tool_name}')
1459
+ return ActionResult(
1460
+ extracted_content=f"```json\n{result_text}\n```"
1461
+ )
1462
+
1463
+ except Exception as e:
1464
+ logger.error(f'❌ Failed to get tool info: {e}')
1465
+ return ActionResult(error=f'Failed to get tool info: {str(e)}')
1466
+
1467
+ @self.registry.action(
1468
+ 'Execute a specific extra tool with provided parameters',
1469
+ param_model=ExecuteExtraToolAction,
1470
+ )
1471
+ async def execute_extra_tool(
1472
+ params: ExecuteExtraToolAction,
1473
+ browser_manager: BrowserManager,
1474
+ page_extraction_llm: BaseChatModel,
1475
+ file_system: CustomFileSystem
1476
+ ):
1477
+ """
1478
+ Execute an extra tool with given parameters
1479
+
1480
+ Args:
1481
+ params: ExecuteExtraToolAction containing tool_name and tool_params
1482
+ browser_manager: Browser manager instance
1483
+ page_extraction_llm: LLM instance
1484
+ file_system: File system instance
1485
+
1486
+ Returns:
1487
+ ActionResult from the executed tool
1488
+ """
1489
+ try:
1490
+ tool_name = params.tool_name
1491
+
1492
+ if tool_name not in self.registry.registry.actions:
1493
+ return ActionResult(error=f'Tool "{tool_name}" not found in registry')
1494
+
1495
+ # Parse tool parameters
1496
+ try:
1497
+ tool_params_dict = json.loads(params.tool_params)
1498
+ except json.JSONDecodeError:
1499
+ try:
1500
+ tool_params_dict = json.loads(repair_json(params.tool_params))
1501
+ except Exception as e:
1502
+ return ActionResult(error=f'Failed to parse tool parameters: {str(e)}')
1503
+
1504
+ # Get the action
1505
+ action = self.registry.registry.actions[tool_name]
1506
+
1507
+ # Create special context (same as in act method)
1508
+ special_context = {
1509
+ 'browser_manager': browser_manager,
1510
+ 'page_extraction_llm': page_extraction_llm,
1511
+ 'file_system': file_system,
1512
+ }
1513
+
1514
+ # Validate parameters
1515
+ try:
1516
+ validated_params = action.param_model(**tool_params_dict)
1517
+ except Exception as e:
1518
+ return ActionResult(
1519
+ error=f'Invalid parameters {tool_params_dict} for action {tool_name}: {type(e)}: {e}')
1520
+
1521
+ # Execute the tool
1522
+ result = await action.function(params=validated_params, **special_context)
1523
+
1524
+ logger.info(f'🔧 Successfully executed extra tool: {tool_name}')
1525
+ return result
1526
+
1527
+ except Exception as e:
1528
+ logger.error(f'❌ Failed to execute extra tool: {e}')
1529
+ return ActionResult(error=f'Failed to execute extra tool: {str(e)}')
1530
+
1531
+ def _register_browser_use_agent(self):
1532
+ @self.registry.action(
1533
+ 'Execute browser_use agent tasks. Please specify a tab id to an agent, if you want to let agent work on this tab. When using Parallel Task Processing, each `tab_id` in parameter must be unique - one tab_id can only be assigned to one agent during parallel execution. Otherwise, please use single bu agent to complete the task.',
1534
+ param_model=BrowserUseAgentExecution,
1535
+ )
1536
+ async def execute_browser_use_agent(
1537
+ params: BrowserUseAgentExecution,
1538
+ ):
1539
+ """
1540
+ Execute browser_use agent tasks in parallel for improved efficiency.
1541
+
1542
+ Args:
1543
+ params: BrowserUseAgentExecution containing list of tasks to execute
1544
+ browser_manager: Browser manager instance
1545
+ llm: Language model instance
1546
+ file_system: File system instance
1547
+
1548
+ Returns:
1549
+ ActionResult with execution results
1550
+ """
1551
+ # TODO: Implement parallel execution of browser_use agent tasks
1552
+ # This is a placeholder implementation
1553
+ pass
1554
+
1555
+ def _register_report_writer_agent(self):
1556
+ @self.registry.action(
1557
+ 'Execute report writer agent to generate HTML reports. ',
1558
+ param_model=ReportWriterTask,
1559
+ )
1560
+ async def execute_report_writer_agent(
1561
+ params: ReportWriterTask,
1562
+ ):
1563
+ """
1564
+ Execute report writer agent to generate HTML reports.
1565
+
1566
+ Args:
1567
+ params: ReportWriterTask containing task description with requirements and insights
1568
+ browser_manager: Browser manager instance
1569
+ llm: Language model instance
1570
+ file_system: File system instance
1571
+
1572
+ Returns:
1573
+ ActionResult with generated report path
1574
+ """
1575
+ # TODO: Implement report writer agent execution
1576
+ # This is a placeholder implementation
1577
+ pass
1578
+
1579
+ def _register_todo_actions(self):
1580
+ @self.registry.action(
1581
+ 'Generate a new todo.md file with the provided todo items in markdown checkbox format.',
1582
+ param_model=TodoGenerateAction
1583
+ )
1584
+ async def generate_todos(params: TodoGenerateAction, file_system: CustomFileSystem):
1585
+ """Generate a new todo.md file with todo items in markdown format"""
1586
+ try:
1587
+ # Format todo items as markdown checkboxes
1588
+ formatted_items = []
1589
+ todo_items = params.todo_items
1590
+ for item in todo_items:
1591
+ # Clean item and ensure it doesn't already have checkbox format
1592
+ clean_item = item.strip()
1593
+ if clean_item.startswith('- ['):
1594
+ formatted_items.append(clean_item)
1595
+ else:
1596
+ formatted_items.append(f'- [ ] {clean_item}')
1597
+
1598
+ # Create content for todo.md
1599
+ content = '\n'.join(formatted_items) + '\n'
1600
+
1601
+ # Write to todo.md file
1602
+ todo_path = file_system.get_dir() / 'todo.md'
1603
+ if todo_path.exists():
1604
+ timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
1605
+ await file_system.move_file('todo.md', f'todos/todo-{timestamp}.md')
1606
+ result = await file_system.write_file('todo.md', content)
1607
+
1608
+ logger.info(f'📝 Generated todo.md with {len(todo_items)} items')
1609
+ return ActionResult(
1610
+ extracted_content=f'Todo file generated successfully with {len(todo_items)} items:\n{content}',
1611
+ long_term_memory=f'Generated todo.md with {len(todo_items)} items',
1612
+ )
1613
+
1614
+ except Exception as e:
1615
+ logger.error(f'❌ Failed to generate todo file: {e}')
1616
+ raise RuntimeError(f'Failed to generate todo file: {str(e)}')
1617
+
1618
+ @self.registry.action(
1619
+ 'Read the current todo.md file content.'
1620
+ )
1621
+ async def read_todos(file_system: CustomFileSystem):
1622
+ """Read the current todo.md file content"""
1623
+ try:
1624
+ # Read todo.md file
1625
+ result = await file_system.read_file('todo.md')
1626
+
1627
+ logger.info(f'📖 Read todo.md file')
1628
+ return ActionResult(
1629
+ extracted_content=result,
1630
+ long_term_memory='Read current todo list',
1631
+ include_in_memory=True,
1632
+ )
1633
+
1634
+ except Exception as e:
1635
+ logger.error(f'❌ Failed to read todo file: {e}')
1636
+ return ActionResult(
1637
+ extracted_content='Error: todo.md file not found or could not be read',
1638
+ long_term_memory='Failed to read todo file',
1639
+ )
1640
+
1641
+ @self.registry.action(
1642
+ 'Modify existing todo items in todo.md file. Supports add, remove, complete, and uncomplete operations.',
1643
+ param_model=TodoModifyAction,
1644
+ )
1645
+ async def modify_todos(params: TodoModifyAction, file_system: CustomFileSystem):
1646
+ """Modify existing todo items using various operations"""
1647
+ try:
1648
+ # First read current content
1649
+ current_content = await file_system.read_file('todo.md')
1650
+
1651
+ # Extract just the content part (remove the "Read from file..." prefix)
1652
+ if '<content>' in current_content and '</content>' in current_content:
1653
+ start = current_content.find('<content>') + len('<content>')
1654
+ end = current_content.find('</content>')
1655
+ content = current_content[start:end].strip()
1656
+ else:
1657
+ content = current_content.strip()
1658
+
1659
+ modified_content = content
1660
+ changes_made = []
1661
+
1662
+ # Process each modification
1663
+ for modification in params.modifications:
1664
+ action = modification.action
1665
+ item = modification.item.strip()
1666
+
1667
+ if action == 'add':
1668
+ # Add new item
1669
+ if item:
1670
+ # Format as checkbox if not already formatted
1671
+ if not item.startswith('- ['):
1672
+ item = f'- [ ] {item}'
1673
+ modified_content += f'\n{item}'
1674
+ changes_made.append(f'Added: {item}')
1675
+
1676
+ elif action == 'remove':
1677
+ # Remove item
1678
+ if item:
1679
+ # Try to find and remove the item (with some flexibility)
1680
+ lines = modified_content.split('\n')
1681
+ new_lines = []
1682
+ removed = False
1683
+ for line in lines:
1684
+ if item in line or line.strip().endswith(item):
1685
+ removed = True
1686
+ changes_made.append(f'Removed: {line.strip()}')
1687
+ else:
1688
+ new_lines.append(line)
1689
+ modified_content = '\n'.join(new_lines)
1690
+ if not removed:
1691
+ changes_made.append(f'Item not found for removal: {item}')
1692
+
1693
+ elif action == 'complete':
1694
+ # Mark item as complete: - [ ] → - [x]
1695
+ if item:
1696
+ lines = modified_content.split('\n')
1697
+ completed = False
1698
+ for i, line in enumerate(lines):
1699
+ if item in line and '- [ ]' in line:
1700
+ lines[i] = line.replace('- [ ]', '- [x]')
1701
+ completed = True
1702
+ changes_made.append(f'Completed: {line.strip()} → {lines[i].strip()}')
1703
+ break
1704
+ modified_content = '\n'.join(lines)
1705
+ if not completed:
1706
+ changes_made.append(f'Item not found for completion: {item}')
1707
+
1708
+ elif action == 'uncompleted':
1709
+ # Mark item as uncomplete: - [x] → - [ ]
1710
+ if item:
1711
+ lines = modified_content.split('\n')
1712
+ uncompleted = False
1713
+ for i, line in enumerate(lines):
1714
+ if item in line and '- [x]' in line:
1715
+ lines[i] = line.replace('- [x]', '- [ ]')
1716
+ uncompleted = True
1717
+ changes_made.append(f'Uncompleted: {line.strip()} → {lines[i].strip()}')
1718
+ break
1719
+ modified_content = '\n'.join(lines)
1720
+ if not uncompleted:
1721
+ changes_made.append(f'Item not found for uncompletion: {item}')
1722
+
1723
+ # If we made any add/remove/complete/uncomplete changes, write the updated content
1724
+ if any(change.startswith(('Added:', 'Removed:', 'Completed:', 'Uncompleted:')) for change in
1725
+ changes_made):
1726
+ await file_system.write_file('todo.md', modified_content + '\n')
1727
+
1728
+ changes_summary = '\n'.join(changes_made) if changes_made else 'No changes made'
1729
+
1730
+ logger.info(f'✏️ Modified todo.md: {len(changes_made)} changes')
1731
+ return ActionResult(
1732
+ extracted_content=f'Todo modifications completed:\n{changes_summary}\n\nUpdated content:\n{modified_content}',
1733
+ long_term_memory=f'Modified todo list: {len(changes_made)} changes made',
1734
+ )
1735
+
1736
+ except Exception as e:
1737
+ logger.error(f'❌ Failed to modify todo file: {e}')
1738
+ raise RuntimeError(f'Failed to modify todo file: {str(e)}')
1739
+
1740
+ def _register_done_action(self):
1741
+ @self.registry.action(
1742
+ 'Complete task and output final response. Use for simple responses or comprehensive markdown summaries with optional follow-up task suggestions.',
1743
+ param_model=VibeSurfDoneAction,
1744
+ )
1745
+ async def task_done(
1746
+ params: VibeSurfDoneAction,
1747
+ ):
1748
+ """
1749
+ Complete task execution and provide final response.
1750
+
1751
+ """
1752
+ pass
1753
+
1754
+ def _register_file_actions(self):
1755
+ @self.registry.action(
1756
+ ''
1757
+ )
1758
+ async def replace_file_str(file_name: str, old_str: str, new_str: str, file_system: CustomFileSystem):
1759
+ result = await file_system.replace_file_str(file_name, old_str, new_str)
1760
+ logger.info(f'💾 {result}')
1761
+ return ActionResult(extracted_content=result, long_term_memory=result)
1762
+
1763
+ @self.registry.action(
1764
+ 'Read file content from file system. If this is a file not in current file system, please provide an absolute path.')
1765
+ async def read_file(file_path: str, file_system: CustomFileSystem):
1766
+ if os.path.exists(file_path):
1767
+ external_file = True
1768
+ else:
1769
+ external_file = False
1770
+ result = await file_system.read_file(file_path, external_file=external_file)
1771
+
1772
+ MAX_MEMORY_SIZE = 1000
1773
+ if len(result) > MAX_MEMORY_SIZE:
1774
+ lines = result.splitlines()
1775
+ display = ''
1776
+ lines_count = 0
1777
+ for line in lines:
1778
+ if len(display) + len(line) < MAX_MEMORY_SIZE:
1779
+ display += line + '\n'
1780
+ lines_count += 1
1781
+ else:
1782
+ break
1783
+ remaining_lines = len(lines) - lines_count
1784
+ memory = f'{display}{remaining_lines} more lines...' if remaining_lines > 0 else display
1785
+ else:
1786
+ memory = result
1787
+ logger.info(f'💾 {memory}')
1788
+ return ActionResult(
1789
+ extracted_content=result,
1790
+ include_in_memory=True,
1791
+ long_term_memory=memory,
1792
+ include_extracted_content_only_once=True,
1793
+ )
1794
+
1795
+ @self.registry.action(
1796
+ 'Extract content from a file. Support images, pdf, markdown, txt, json, csv, python, js and etc..',
1797
+ param_model=FileExtractionAction,
1798
+ )
1799
+ async def extract_content_from_file(
1800
+ params: FileExtractionAction,
1801
+ page_extraction_llm: BaseChatModel,
1802
+ file_system: CustomFileSystem,
1803
+ ):
1804
+ try:
1805
+ # Get file path
1806
+ file_path = params.file_path
1807
+ full_file_path = file_path
1808
+ # Check if file exists
1809
+ if not os.path.exists(full_file_path):
1810
+ full_file_path = os.path.join(str(file_system.get_dir()), file_path)
1811
+
1812
+ # Use the utility function to extract content from file
1813
+ extracted_content = await extract_file_content_with_llm(
1814
+ file_path=file_path,
1815
+ query=params.query,
1816
+ llm=page_extraction_llm,
1817
+ file_system=file_system
1818
+ )
1819
+
1820
+ # Handle memory storage
1821
+ if len(extracted_content) < 1000:
1822
+ memory = extracted_content
1823
+ include_extracted_content_only_once = False
1824
+ else:
1825
+ save_result = await file_system.save_extracted_content(extracted_content)
1826
+ memory = (
1827
+ f'Extracted content from file {file_path} for query: {params.query}\nContent saved to file system: {save_result}'
1828
+ )
1829
+ include_extracted_content_only_once = True
1830
+
1831
+ logger.info(f'📄 Extracted content from file: {file_path}')
1832
+ return ActionResult(
1833
+ extracted_content=extracted_content,
1834
+ include_extracted_content_only_once=include_extracted_content_only_once,
1835
+ long_term_memory=memory,
1836
+ )
1837
+
1838
+ except Exception as e:
1839
+ logger.debug(f'Error extracting content from file: {e}')
1840
+ raise RuntimeError(str(e))
1841
+
1842
+ @self.registry.action(
1843
+ ''
1844
+ )
1845
+ async def write_file(
1846
+ file_path: str,
1847
+ content: str,
1848
+ file_system: CustomFileSystem,
1849
+ append: bool = False,
1850
+ trailing_newline: bool = True,
1851
+ leading_newline: bool = False,
1852
+ ):
1853
+ if trailing_newline:
1854
+ content += '\n'
1855
+ if leading_newline:
1856
+ content = '\n' + content
1857
+ if append:
1858
+ result = await file_system.append_file(file_path, content)
1859
+ else:
1860
+ result = await file_system.write_file(file_path, content)
1861
+ logger.info(f'💾 {result}')
1862
+ return ActionResult(extracted_content=result, long_term_memory=result)
1863
+
1864
+ @self.registry.action(
1865
+ 'Set external_src=True to copy from external file(absolute path)to FileSystem, False to copy within FileSystem.'
1866
+ )
1867
+ async def copy_file(src_file_path: str, dst_file_path: str, file_system: CustomFileSystem,
1868
+ external_src: bool = False):
1869
+ result = await file_system.copy_file(src_file_path, dst_file_path, external_src)
1870
+ logger.info(f'📁 {result}')
1871
+ return ActionResult(
1872
+ extracted_content=result,
1873
+ include_in_memory=True,
1874
+ long_term_memory=result,
1875
+ )
1876
+
1877
+ @self.registry.action(
1878
+ 'Rename a file to new_filename. src_file_path is a relative path to the FileSystem.'
1879
+ )
1880
+ async def rename_file(src_file_path: str, new_filename: str, file_system: CustomFileSystem):
1881
+ result = await file_system.rename_file(src_file_path, new_filename)
1882
+ logger.info(f'📁 {result}')
1883
+ return ActionResult(
1884
+ extracted_content=result,
1885
+ include_in_memory=True,
1886
+ long_term_memory=result,
1887
+ )
1888
+
1889
+ @self.registry.action(
1890
+ 'Move a file within the FileSystem from old_filename to new_filename.'
1891
+ )
1892
+ async def move_file(old_file_path: str, new_file_path: str, file_system: CustomFileSystem):
1893
+ result = await file_system.move_file(old_file_path, new_file_path)
1894
+ logger.info(f'📁 {result}')
1895
+ return ActionResult(
1896
+ extracted_content=result,
1897
+ include_in_memory=True,
1898
+ long_term_memory=result,
1899
+ )
1900
+
1901
+ @self.registry.action(
1902
+ 'Check file exist or not.'
1903
+ )
1904
+ async def file_exist(file_path: str, file_system: CustomFileSystem):
1905
+ if os.path.exists(file_path):
1906
+ result = f"{file_path} is a external file and it exists."
1907
+ else:
1908
+ is_file_exist = await file_system.file_exist(file_path)
1909
+ if is_file_exist:
1910
+ result = f"{file_path} is in file system and it exists."
1911
+ else:
1912
+ result = f"{file_path} does not exists."
1913
+
1914
+ logger.info(f'📁 {result}')
1915
+ return ActionResult(
1916
+ extracted_content=result,
1917
+ include_in_memory=True,
1918
+ long_term_memory=result,
1919
+ )
1920
+
1921
+ @self.registry.action(
1922
+ 'List a directory within the FileSystem. Use empty string "" or "." to list the root FileSystem, or provide relative path for subdirectory.'
1923
+ )
1924
+ async def list_directory(directory_path: str, file_system: CustomFileSystem):
1925
+ result = await file_system.list_directory(directory_path)
1926
+ logger.info(f'📁 {result}')
1927
+ return ActionResult(
1928
+ extracted_content=result,
1929
+ include_in_memory=True,
1930
+ long_term_memory=result,
1931
+ )
1932
+
1933
+ @self.registry.action(
1934
+ 'search for query or keywords and return surrounding context',
1935
+ param_model=GrepContentAction,
1936
+ )
1937
+ async def grep_content_from_file(
1938
+ params: GrepContentAction,
1939
+ page_extraction_llm: BaseChatModel,
1940
+ file_system: CustomFileSystem,
1941
+ ):
1942
+ try:
1943
+ # Get file path
1944
+ file_path = params.file_path
1945
+ full_file_path = file_path
1946
+ # Check if file exists
1947
+ if not os.path.exists(full_file_path):
1948
+ full_file_path = os.path.join(str(file_system.get_dir()), file_path)
1949
+
1950
+ # Determine if file is an image based on MIME type
1951
+ mime_type, _ = mimetypes.guess_type(file_path)
1952
+ is_image = mime_type and mime_type.startswith('image/')
1953
+
1954
+ if is_image:
1955
+ # Handle image files with LLM vision for OCR
1956
+ try:
1957
+ # Read image file and encode to base64
1958
+ with open(full_file_path, 'rb') as image_file:
1959
+ image_data = image_file.read()
1960
+ image_base64 = base64.b64encode(image_data).decode('utf-8')
1961
+
1962
+ # Create content parts for OCR
1963
+ content_parts: list[ContentPartTextParam | ContentPartImageParam] = [
1964
+ ContentPartTextParam(
1965
+ text="Please extract all text content from this image for search purposes. Return only the extracted text, no additional explanations.")
1966
+ ]
1967
+
1968
+ # Add the image
1969
+ content_parts.append(
1970
+ ContentPartImageParam(
1971
+ image_url=ImageURL(
1972
+ url=f'data:{mime_type};base64,{image_base64}',
1973
+ media_type=mime_type,
1974
+ detail='high',
1975
+ ),
1976
+ )
1977
+ )
1978
+
1979
+ # Create user message and invoke LLM for OCR
1980
+ user_message = UserMessage(content=content_parts, cache=True)
1981
+ response = await asyncio.wait_for(
1982
+ page_extraction_llm.ainvoke([user_message]),
1983
+ timeout=120.0,
1984
+ )
1985
+
1986
+ file_content = response.completion
1987
+
1988
+ except Exception as e:
1989
+ raise Exception(f'Failed to process image file {file_path} for OCR: {str(e)}')
1990
+
1991
+ else:
1992
+ # Handle non-image files by reading content
1993
+ try:
1994
+ file_content = await file_system.read_file(full_file_path, external_file=True)
1995
+ except Exception as e:
1996
+ raise Exception(f'Failed to read file {file_path}: {str(e)}')
1997
+
1998
+ # Perform grep search
1999
+ search_query = params.query.lower()
2000
+ context_chars = params.context_chars
2001
+
2002
+ # Find all matches with context
2003
+ matches = []
2004
+ content_lower = file_content.lower()
2005
+ search_start = 0
2006
+
2007
+ while True:
2008
+ match_pos = content_lower.find(search_query, search_start)
2009
+ if match_pos == -1:
2010
+ break
2011
+
2012
+ # Calculate context boundaries
2013
+ start_pos = max(0, match_pos - context_chars)
2014
+ end_pos = min(len(file_content), match_pos + len(search_query) + context_chars)
2015
+
2016
+ # Extract context with the match
2017
+ context_before = file_content[start_pos:match_pos]
2018
+ matched_text = file_content[match_pos:match_pos + len(search_query)]
2019
+ context_after = file_content[match_pos + len(search_query):end_pos]
2020
+
2021
+ # Add ellipsis if truncated
2022
+ if start_pos > 0:
2023
+ context_before = "..." + context_before
2024
+ if end_pos < len(file_content):
2025
+ context_after = context_after + "..."
2026
+
2027
+ matches.append({
2028
+ 'context_before': context_before,
2029
+ 'matched_text': matched_text,
2030
+ 'context_after': context_after,
2031
+ 'position': match_pos
2032
+ })
2033
+
2034
+ search_start = match_pos + 1
2035
+
2036
+ # Format results
2037
+ if not matches:
2038
+ extracted_content = f'File: {file_path}\nQuery: "{params.query}"\nResult: No matches found'
2039
+ else:
2040
+ result_text = f'File: {file_path}\nQuery: "{params.query}"\nFound {len(matches)} match(es):\n\n'
2041
+
2042
+ for i, match in enumerate(matches, 1):
2043
+ result_text += f"Match {i} (position: {match['position']}):\n"
2044
+ result_text += f"{match['context_before']}[{match['matched_text']}]{match['context_after']}\n\n"
2045
+
2046
+ extracted_content = result_text.strip()
2047
+
2048
+ # Handle memory storage
2049
+ if len(extracted_content) < 1000:
2050
+ memory = extracted_content
2051
+ include_extracted_content_only_once = False
2052
+ else:
2053
+ save_result = await file_system.save_extracted_content(extracted_content)
2054
+ memory = (
2055
+ f'Grep search completed in file {file_path} for query: {params.query}\nFound {len(matches)} match(es)\nContent saved to file system: {save_result}'
2056
+ )
2057
+ include_extracted_content_only_once = True
2058
+
2059
+ logger.info(f'🔍 Grep search completed in file: {file_path}, found {len(matches)} match(es)')
2060
+ return ActionResult(
2061
+ extracted_content=extracted_content,
2062
+ include_extracted_content_only_once=include_extracted_content_only_once,
2063
+ long_term_memory=memory,
2064
+ )
2065
+
2066
+ except Exception as e:
2067
+ logger.debug(f'Error grep searching content from file: {e}')
2068
+ raise RuntimeError(str(e))
2069
+
2070
+ @self.registry.action(
2071
+ 'Create a directory within the FileSystem.'
2072
+ )
2073
+ async def create_directory(directory_path: str, file_system: CustomFileSystem):
2074
+ result = await file_system.create_directory(directory_path)
2075
+ logger.info(f'📁 {result}')
2076
+ return ActionResult(
2077
+ extracted_content=result,
2078
+ include_in_memory=True,
2079
+ long_term_memory=result,
2080
+ )
2081
+
2082
+ async def register_mcp_clients(self, mcp_server_config: Optional[Dict[str, Any]] = None):
2083
+ self.mcp_server_config = mcp_server_config or self.mcp_server_config
2084
+ if self.mcp_server_config:
2085
+ await self.unregister_mcp_clients()
2086
+ await self.register_mcp_tools()
2087
+
2088
+ async def register_mcp_tools(self):
2089
+ """
2090
+ Register the MCP tools used by this tools.
2091
+ """
2092
+ if not self.mcp_server_config:
2093
+ return
2094
+
2095
+ # Handle both formats: with or without "mcpServers" key
2096
+ mcp_servers = self.mcp_server_config.get('mcpServers', self.mcp_server_config)
2097
+
2098
+ if not mcp_servers:
2099
+ return
2100
+
2101
+ for server_name, server_config in mcp_servers.items():
2102
+ try:
2103
+ logger.info(f'Connecting to MCP server: {server_name}')
2104
+
2105
+ # Create MCP client
2106
+ client = CustomMCPClient(
2107
+ server_name=server_name,
2108
+ command=server_config['command'],
2109
+ args=server_config['args'],
2110
+ env=server_config.get('env', None)
2111
+ )
2112
+
2113
+ # Connect to the MCP server
2114
+ await client.connect(timeout=200)
2115
+
2116
+ # Register tools to tools with prefix
2117
+ prefix = f"mcp.{server_name}."
2118
+ await client.register_to_tools(
2119
+ tools=self,
2120
+ prefix=prefix
2121
+ )
2122
+
2123
+ # Store client for later cleanup
2124
+ self.mcp_clients[server_name] = client
2125
+
2126
+ logger.info(f'Successfully registered MCP server: {server_name} with prefix: {prefix}')
2127
+
2128
+ except Exception as e:
2129
+ logger.error(f'Failed to register MCP server {server_name}: {str(e)}')
2130
+ # Continue with other servers even if one fails
2131
+
2132
+ async def unregister_mcp_clients(self):
2133
+ """
2134
+ Unregister and disconnect all MCP clients.
2135
+ """
2136
+ # Disconnect all MCP clients
2137
+ for server_name, client in self.mcp_clients.items():
2138
+ try:
2139
+ logger.info(f'Disconnecting MCP server: {server_name}')
2140
+ await client.disconnect()
2141
+ except Exception as e:
2142
+ logger.error(f'Failed to disconnect MCP server {server_name}: {str(e)}')
2143
+
2144
+ # Remove MCP tools from registry
2145
+ try:
2146
+ # Get all registered actions
2147
+ actions_to_remove = []
2148
+ for action_name in list(self.registry.registry.actions.keys()):
2149
+ if action_name.startswith('mcp.'):
2150
+ actions_to_remove.append(action_name)
2151
+
2152
+ # Remove MCP actions from registry
2153
+ for action_name in actions_to_remove:
2154
+ if action_name in self.registry.registry.actions:
2155
+ del self.registry.registry.actions[action_name]
2156
+ logger.info(f'Removed MCP action: {action_name}')
2157
+
2158
+ except Exception as e:
2159
+ logger.error(f'Failed to remove MCP actions from registry: {str(e)}')
2160
+
2161
+ # Clear the clients dictionary
2162
+ self.mcp_clients.clear()
2163
+ logger.info('All MCP clients unregistered and disconnected')
2164
+
2165
+ async def register_composio_clients(self, composio_instance: Optional[Any] = None,
2166
+ toolkit_tools_dict: Optional[Dict[str, Any]] = None):
2167
+ """
2168
+ Register Composio tools to the registry.
2169
+
2170
+ Args:
2171
+ composio_instance: Composio instance (optional, can be None initially)
2172
+ toolkit_tools_dict: Dict of toolkit_slug -> tools list
2173
+ """
2174
+ try:
2175
+ # Initialize Composio client if not exists
2176
+ if self.composio_client is None:
2177
+ self.composio_client = ComposioClient(composio_instance=composio_instance)
2178
+ else:
2179
+ # Update the composio instance
2180
+ self.composio_client.update_composio_instance(composio_instance)
2181
+ self.composio_toolkits = toolkit_tools_dict
2182
+ # Register tools if we have both instance and toolkit tools
2183
+ if composio_instance and toolkit_tools_dict:
2184
+ await self.composio_client.register_to_tools(
2185
+ tools=self,
2186
+ toolkit_tools_dict=toolkit_tools_dict,
2187
+ prefix="cpo."
2188
+ )
2189
+ logger.info(f'Successfully registered Composio tools from {len(toolkit_tools_dict)} toolkits')
2190
+ elif not composio_instance:
2191
+ logger.info("Composio client initialized without instance - will register tools later")
2192
+ elif not toolkit_tools_dict:
2193
+ logger.info("Composio client initialized without toolkit tools - will register tools later")
2194
+
2195
+ except Exception as e:
2196
+ logger.error(f'Failed to register Composio clients: {str(e)}')
2197
+
2198
+ async def unregister_composio_clients(self):
2199
+ """
2200
+ Unregister all Composio tools from the registry.
2201
+ """
2202
+ try:
2203
+ if self.composio_client:
2204
+ self.composio_client.unregister_all_tools(self)
2205
+ logger.info('All Composio tools unregistered')
2206
+ self.composio_toolkits.clear()
2207
+ except Exception as e:
2208
+ logger.error(f'Failed to unregister Composio clients: {str(e)}')
2209
+
2210
+ async def update_composio_tools(self, composio_instance: Optional[Any] = None,
2211
+ toolkit_tools_dict: Optional[Dict[str, Any]] = None):
2212
+ """
2213
+ Update Composio tools by unregistering old ones and registering new ones.
2214
+
2215
+ Args:
2216
+ composio_instance: Composio instance
2217
+ toolkit_tools_dict: Dict of toolkit_slug -> tools list
2218
+ """
2219
+ try:
2220
+ # Unregister existing tools
2221
+ await self.unregister_composio_clients()
2222
+
2223
+ # Register new tools
2224
+ await self.register_composio_clients(composio_instance, toolkit_tools_dict)
2225
+ self.composio_toolkits = toolkit_tools_dict
2226
+ logger.info('Composio tools updated successfully')
2227
+
2228
+ except Exception as e:
2229
+ logger.error(f'Failed to update Composio tools: {str(e)}')
2230
+
2231
+ @time_execution_sync('--act')
2232
+ async def act(
2233
+ self,
2234
+ action: ActionModel,
2235
+ browser_manager: BrowserManager | None = None,
2236
+ llm: BaseChatModel | None = None,
2237
+ file_system: CustomFileSystem | None = None,
2238
+ ) -> ActionResult:
2239
+ """Execute an action"""
2240
+
2241
+ for action_name, params in action.model_dump(exclude_unset=True).items():
2242
+ if params is not None:
2243
+ try:
2244
+ if action_name not in self.registry.registry.actions:
2245
+ raise ValueError(f'Action {action_name} not found')
2246
+ action = self.registry.registry.actions[action_name]
2247
+ special_context = {
2248
+ 'browser_manager': browser_manager,
2249
+ 'page_extraction_llm': llm,
2250
+ 'file_system': file_system,
2251
+ }
2252
+ try:
2253
+ validated_params = action.param_model(**params)
2254
+ except Exception as e:
2255
+ raise ValueError(f'Invalid parameters {params} for action {action_name}: {type(e)}: {e}') from e
2256
+
2257
+ result = await action.function(params=validated_params, **special_context)
2258
+ except BrowserError as e:
2259
+ logger.error(f'❌ Action {action_name} failed with BrowserError: {str(e)}')
2260
+ result = handle_browser_error(e)
2261
+ except TimeoutError as e:
2262
+ logger.error(f'❌ Action {action_name} failed with TimeoutError: {str(e)}')
2263
+ result = ActionResult(error=f'{action_name} was not executed due to timeout.')
2264
+ except Exception as e:
2265
+ # Log the original exception with traceback for observability
2266
+ logger.error(f"Action '{action_name}' failed with error: {str(e)}")
2267
+ result = ActionResult(error=str(e))
2268
+
2269
+ if isinstance(result, str):
2270
+ return ActionResult(extracted_content=result)
2271
+ elif isinstance(result, ActionResult):
2272
+ return result
2273
+ elif result is None:
2274
+ return ActionResult()
2275
+ else:
2276
+ raise ValueError(f'Invalid action result type: {type(result)} of {result}')
2277
+ return ActionResult()