vibesurf 0.1.21__py3-none-any.whl → 0.2.6__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 (2868) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +16 -354
  3. vibe_surf/agents/prompts/vibe_surf_prompt.py +45 -0
  4. vibe_surf/agents/report_writer_agent.py +71 -21
  5. vibe_surf/agents/vibe_surf_agent.py +234 -111
  6. vibe_surf/agents/views.py +6 -15
  7. vibe_surf/backend/api/agent.py +38 -0
  8. vibe_surf/backend/api/composio.py +1047 -0
  9. vibe_surf/backend/api/config.py +3 -1
  10. vibe_surf/backend/api/schedule.py +331 -0
  11. vibe_surf/backend/api/task.py +2 -2
  12. vibe_surf/backend/api/vibesurf.py +449 -0
  13. vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
  14. vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
  15. vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
  16. vibe_surf/backend/database/models.py +86 -1
  17. vibe_surf/backend/database/queries.py +567 -4
  18. vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
  19. vibe_surf/backend/frontend/assets/SlackIcon-DH9MFXnM.js +1 -0
  20. vibe_surf/backend/frontend/assets/Wikipedia-MKjlsFhR.js +1 -0
  21. vibe_surf/backend/frontend/assets/Wolfram-DZjh94KW.js +1 -0
  22. vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  23. vibe_surf/backend/frontend/assets/a-arrow-down-M5pMOHfz.js +6 -0
  24. vibe_surf/backend/frontend/assets/a-arrow-up-Bhux1P9g.js +6 -0
  25. vibe_surf/backend/frontend/assets/a-large-small-CxpoIZ2k.js +6 -0
  26. vibe_surf/backend/frontend/assets/accessibility-DIOswxup.js +6 -0
  27. vibe_surf/backend/frontend/assets/activity-Cgoj6BfB.js +6 -0
  28. vibe_surf/backend/frontend/assets/air-vent-BRuCRSP-.js +6 -0
  29. vibe_surf/backend/frontend/assets/airplay-D6ddOHpT.js +6 -0
  30. vibe_surf/backend/frontend/assets/alarm-clock-BswE0svo.js +6 -0
  31. vibe_surf/backend/frontend/assets/alarm-clock-check-CMKnL746.js +6 -0
  32. vibe_surf/backend/frontend/assets/alarm-clock-minus-Cmry03T1.js +6 -0
  33. vibe_surf/backend/frontend/assets/alarm-clock-off-ByCGR7KD.js +6 -0
  34. vibe_surf/backend/frontend/assets/alarm-clock-plus-D80NSz4S.js +6 -0
  35. vibe_surf/backend/frontend/assets/alarm-smoke-DyUVOJUh.js +6 -0
  36. vibe_surf/backend/frontend/assets/album-CGIJADgR.js +6 -0
  37. vibe_surf/backend/frontend/assets/align-center-Cb9nxg1u.js +6 -0
  38. vibe_surf/backend/frontend/assets/align-center-horizontal-DunWyH8w.js +6 -0
  39. vibe_surf/backend/frontend/assets/align-center-vertical-COWbwf4r.js +6 -0
  40. vibe_surf/backend/frontend/assets/align-end-horizontal-BXGWZnJg.js +6 -0
  41. vibe_surf/backend/frontend/assets/align-end-vertical-DsDprlL7.js +6 -0
  42. vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-fSZ29QkE.js +6 -0
  43. vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-C3BFRnLg.js +6 -0
  44. vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-DqYzU1-w.js +6 -0
  45. vibe_surf/backend/frontend/assets/align-horizontal-justify-center-2iNXkDKh.js +6 -0
  46. vibe_surf/backend/frontend/assets/align-horizontal-justify-end-COPIkT0U.js +6 -0
  47. vibe_surf/backend/frontend/assets/align-horizontal-justify-start-DoS3Jrzb.js +6 -0
  48. vibe_surf/backend/frontend/assets/align-horizontal-space-around-k9yEGjMh.js +6 -0
  49. vibe_surf/backend/frontend/assets/align-horizontal-space-between-C6RzmtkD.js +6 -0
  50. vibe_surf/backend/frontend/assets/align-justify-BvD3xtAK.js +6 -0
  51. vibe_surf/backend/frontend/assets/align-left-BP84nxXJ.js +6 -0
  52. vibe_surf/backend/frontend/assets/align-right-6z3k9YVj.js +6 -0
  53. vibe_surf/backend/frontend/assets/align-start-horizontal-DRihqJTg.js +6 -0
  54. vibe_surf/backend/frontend/assets/align-start-vertical-Bs-ISVmy.js +6 -0
  55. vibe_surf/backend/frontend/assets/align-vertical-distribute-center-CU82VWLq.js +6 -0
  56. vibe_surf/backend/frontend/assets/align-vertical-distribute-end-IrubG5LP.js +6 -0
  57. vibe_surf/backend/frontend/assets/align-vertical-distribute-start-BgBu3t8X.js +6 -0
  58. vibe_surf/backend/frontend/assets/align-vertical-justify-center-e7psKZ4D.js +6 -0
  59. vibe_surf/backend/frontend/assets/align-vertical-justify-end-CncIBU5b.js +6 -0
  60. vibe_surf/backend/frontend/assets/align-vertical-justify-start-21_MQReA.js +6 -0
  61. vibe_surf/backend/frontend/assets/align-vertical-space-around-NJNn7zPP.js +6 -0
  62. vibe_surf/backend/frontend/assets/align-vertical-space-between-LYs4c5i9.js +6 -0
  63. vibe_surf/backend/frontend/assets/ambulance-jMfwSVYH.js +6 -0
  64. vibe_surf/backend/frontend/assets/ampersand-B1-1HYj1.js +6 -0
  65. vibe_surf/backend/frontend/assets/ampersands-DVVxe50v.js +6 -0
  66. vibe_surf/backend/frontend/assets/amphora-B12bYdql.js +6 -0
  67. vibe_surf/backend/frontend/assets/anchor-C_JuZyO5.js +6 -0
  68. vibe_surf/backend/frontend/assets/angry-KqzvbAxB.js +6 -0
  69. vibe_surf/backend/frontend/assets/annoyed-CZXUdq0q.js +6 -0
  70. vibe_surf/backend/frontend/assets/antenna-CFlKnuEE.js +6 -0
  71. vibe_surf/backend/frontend/assets/anvil-ObmOBzcW.js +6 -0
  72. vibe_surf/backend/frontend/assets/aperture-CU6mXxj8.js +6 -0
  73. vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
  74. vibe_surf/backend/frontend/assets/app-window-D5iSiHiS.js +6 -0
  75. vibe_surf/backend/frontend/assets/app-window-mac-QOaPWoGX.js +6 -0
  76. vibe_surf/backend/frontend/assets/apple-D7ZsI-et.js +6 -0
  77. vibe_surf/backend/frontend/assets/archive-FLn_d8Ny.js +6 -0
  78. vibe_surf/backend/frontend/assets/archive-restore-C668KwvC.js +6 -0
  79. vibe_surf/backend/frontend/assets/archive-x-DJJed9T2.js +6 -0
  80. vibe_surf/backend/frontend/assets/armchair-DfXLs0Nj.js +6 -0
  81. vibe_surf/backend/frontend/assets/arrow-big-down-DU2dtkeu.js +6 -0
  82. vibe_surf/backend/frontend/assets/arrow-big-down-dash-CzsIOlhF.js +6 -0
  83. vibe_surf/backend/frontend/assets/arrow-big-left-CCeUj8q9.js +6 -0
  84. vibe_surf/backend/frontend/assets/arrow-big-left-dash-CFpRtORj.js +6 -0
  85. vibe_surf/backend/frontend/assets/arrow-big-right-C1QE56k7.js +6 -0
  86. vibe_surf/backend/frontend/assets/arrow-big-right-dash-D6H2wruv.js +6 -0
  87. vibe_surf/backend/frontend/assets/arrow-big-up-0f0CsejQ.js +6 -0
  88. vibe_surf/backend/frontend/assets/arrow-big-up-dash-Dz-Sbw66.js +6 -0
  89. vibe_surf/backend/frontend/assets/arrow-down-0-1-B1PGN6BJ.js +6 -0
  90. vibe_surf/backend/frontend/assets/arrow-down-1-0-Bcl1KrrL.js +6 -0
  91. vibe_surf/backend/frontend/assets/arrow-down-DZKzcieL.js +6 -0
  92. vibe_surf/backend/frontend/assets/arrow-down-a-z-DurN_xiR.js +6 -0
  93. vibe_surf/backend/frontend/assets/arrow-down-from-line-D2i9DDA0.js +6 -0
  94. vibe_surf/backend/frontend/assets/arrow-down-left-Pid0zUYj.js +6 -0
  95. vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-DtnDCgZY.js +6 -0
  96. vibe_surf/backend/frontend/assets/arrow-down-right-BgepY9bM.js +6 -0
  97. vibe_surf/backend/frontend/assets/arrow-down-to-dot-C5rQ12yn.js +6 -0
  98. vibe_surf/backend/frontend/assets/arrow-down-to-line-DovZ64L0.js +6 -0
  99. vibe_surf/backend/frontend/assets/arrow-down-up-D5-v7CDC.js +6 -0
  100. vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-CGAsRLvP.js +6 -0
  101. vibe_surf/backend/frontend/assets/arrow-down-z-a-DOGHwUgR.js +6 -0
  102. vibe_surf/backend/frontend/assets/arrow-left-from-line-DwY8iDxY.js +6 -0
  103. vibe_surf/backend/frontend/assets/arrow-left-hKr3yGVm.js +6 -0
  104. vibe_surf/backend/frontend/assets/arrow-left-right-Be5fvvG0.js +6 -0
  105. vibe_surf/backend/frontend/assets/arrow-left-to-line-DKHIypu3.js +6 -0
  106. vibe_surf/backend/frontend/assets/arrow-right-BaRZuB8W.js +6 -0
  107. vibe_surf/backend/frontend/assets/arrow-right-from-line-D3jqt4-q.js +6 -0
  108. vibe_surf/backend/frontend/assets/arrow-right-left-BKRuMAR-.js +6 -0
  109. vibe_surf/backend/frontend/assets/arrow-right-to-line-rtWVy_CC.js +6 -0
  110. vibe_surf/backend/frontend/assets/arrow-up-0-1-yF8Nt_KM.js +6 -0
  111. vibe_surf/backend/frontend/assets/arrow-up-1-0-WRlLFmSw.js +6 -0
  112. vibe_surf/backend/frontend/assets/arrow-up-BKnAmgTC.js +6 -0
  113. vibe_surf/backend/frontend/assets/arrow-up-a-z-COXfk41y.js +6 -0
  114. vibe_surf/backend/frontend/assets/arrow-up-down-Dtw4v35K.js +6 -0
  115. vibe_surf/backend/frontend/assets/arrow-up-from-dot-B1XSjc2P.js +6 -0
  116. vibe_surf/backend/frontend/assets/arrow-up-from-line-C-lHvDpd.js +6 -0
  117. vibe_surf/backend/frontend/assets/arrow-up-left-CYojov8T.js +6 -0
  118. vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-B54CYEHs.js +6 -0
  119. vibe_surf/backend/frontend/assets/arrow-up-right-Bdo9Z-7A.js +6 -0
  120. vibe_surf/backend/frontend/assets/arrow-up-to-line-DS_I-9Vp.js +6 -0
  121. vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-B3GeXj9O.js +6 -0
  122. vibe_surf/backend/frontend/assets/arrow-up-z-a-CdyZuD75.js +6 -0
  123. vibe_surf/backend/frontend/assets/arrows-up-from-line-0sYhsLRw.js +6 -0
  124. vibe_surf/backend/frontend/assets/asterisk-CQWlVYDB.js +6 -0
  125. vibe_surf/backend/frontend/assets/at-sign-Dug8NlWL.js +6 -0
  126. vibe_surf/backend/frontend/assets/atom-Cx1vCOFb.js +6 -0
  127. vibe_surf/backend/frontend/assets/audio-lines-Cimsj6_f.js +6 -0
  128. vibe_surf/backend/frontend/assets/audio-waveform-BxCl1LyQ.js +6 -0
  129. vibe_surf/backend/frontend/assets/award-dRU3xhJ7.js +6 -0
  130. vibe_surf/backend/frontend/assets/axe-B8CCMGTD.js +6 -0
  131. vibe_surf/backend/frontend/assets/axis-3d-D2ZIjjx3.js +6 -0
  132. vibe_surf/backend/frontend/assets/baby-DWh5CwfC.js +6 -0
  133. vibe_surf/backend/frontend/assets/backpack-D9rjYWvf.js +6 -0
  134. vibe_surf/backend/frontend/assets/badge-C0r2CPAV.js +6 -0
  135. vibe_surf/backend/frontend/assets/badge-alert-Do89zN-s.js +6 -0
  136. vibe_surf/backend/frontend/assets/badge-cent-Dmv_cqc-.js +6 -0
  137. vibe_surf/backend/frontend/assets/badge-check--_Rese0X.js +6 -0
  138. vibe_surf/backend/frontend/assets/badge-dollar-sign-BHnNL8ma.js +6 -0
  139. vibe_surf/backend/frontend/assets/badge-euro-CKNQv-oO.js +6 -0
  140. vibe_surf/backend/frontend/assets/badge-help-BlZAHEa-.js +6 -0
  141. vibe_surf/backend/frontend/assets/badge-indian-rupee-BNIUcLaI.js +6 -0
  142. vibe_surf/backend/frontend/assets/badge-info-CrX5KTPR.js +6 -0
  143. vibe_surf/backend/frontend/assets/badge-japanese-yen-0mdbiK5f.js +6 -0
  144. vibe_surf/backend/frontend/assets/badge-minus-BX_scLIK.js +6 -0
  145. vibe_surf/backend/frontend/assets/badge-percent-BSJP3Okj.js +6 -0
  146. vibe_surf/backend/frontend/assets/badge-plus-DhlqCq3Z.js +6 -0
  147. vibe_surf/backend/frontend/assets/badge-pound-sterling-QpnkBN56.js +6 -0
  148. vibe_surf/backend/frontend/assets/badge-russian-ruble-L30Ncxnh.js +6 -0
  149. vibe_surf/backend/frontend/assets/badge-swiss-franc-BQrLli-C.js +6 -0
  150. vibe_surf/backend/frontend/assets/badge-x-DDXVSWE5.js +6 -0
  151. vibe_surf/backend/frontend/assets/baggage-claim-Nd9Qw4rX.js +6 -0
  152. vibe_surf/backend/frontend/assets/ban-fSKv80ss.js +6 -0
  153. vibe_surf/backend/frontend/assets/banana-DTClkW0x.js +6 -0
  154. vibe_surf/backend/frontend/assets/bandage-DLyvBCvf.js +6 -0
  155. vibe_surf/backend/frontend/assets/banknote-ArlwGdT1.js +6 -0
  156. vibe_surf/backend/frontend/assets/banknote-arrow-down-Dx9vP7KP.js +6 -0
  157. vibe_surf/backend/frontend/assets/banknote-arrow-up-CZNOWrKW.js +6 -0
  158. vibe_surf/backend/frontend/assets/banknote-x-y8ot0KXI.js +6 -0
  159. vibe_surf/backend/frontend/assets/barcode-U3mgwXvC.js +6 -0
  160. vibe_surf/backend/frontend/assets/baseline-Bb17nsNt.js +6 -0
  161. vibe_surf/backend/frontend/assets/bath-Fu-10Xqv.js +6 -0
  162. vibe_surf/backend/frontend/assets/battery-D2ng6PHz.js +6 -0
  163. vibe_surf/backend/frontend/assets/battery-charging-BBA_U97U.js +6 -0
  164. vibe_surf/backend/frontend/assets/battery-full-D74R09iv.js +6 -0
  165. vibe_surf/backend/frontend/assets/battery-low-BMeJBmJp.js +6 -0
  166. vibe_surf/backend/frontend/assets/battery-medium-clKHZw71.js +6 -0
  167. vibe_surf/backend/frontend/assets/battery-plus-DxtzU1bB.js +6 -0
  168. vibe_surf/backend/frontend/assets/battery-warning-1NEZ4eCa.js +6 -0
  169. vibe_surf/backend/frontend/assets/beaker-Br0pnmtw.js +6 -0
  170. vibe_surf/backend/frontend/assets/bean-B04lfjZo.js +6 -0
  171. vibe_surf/backend/frontend/assets/bean-off-C6H6plJJ.js +6 -0
  172. vibe_surf/backend/frontend/assets/bed-B7xWDlGQ.js +6 -0
  173. vibe_surf/backend/frontend/assets/bed-double-We8EVOE6.js +6 -0
  174. vibe_surf/backend/frontend/assets/bed-single-C-tVm75i.js +6 -0
  175. vibe_surf/backend/frontend/assets/beef-BzzCqLUx.js +6 -0
  176. vibe_surf/backend/frontend/assets/beer-B1aIU5Wp.js +6 -0
  177. vibe_surf/backend/frontend/assets/beer-off-T9p0sUQ_.js +6 -0
  178. vibe_surf/backend/frontend/assets/bell-BiEY08q7.js +6 -0
  179. vibe_surf/backend/frontend/assets/bell-dot-D6ZHJmF9.js +6 -0
  180. vibe_surf/backend/frontend/assets/bell-electric-BjP0O4kE.js +6 -0
  181. vibe_surf/backend/frontend/assets/bell-minus-Cw2KMMsV.js +6 -0
  182. vibe_surf/backend/frontend/assets/bell-off-JUGEvepv.js +6 -0
  183. vibe_surf/backend/frontend/assets/bell-plus-BtwPCtO5.js +6 -0
  184. vibe_surf/backend/frontend/assets/bell-ring-B_RAFBbK.js +6 -0
  185. vibe_surf/backend/frontend/assets/between-horizontal-end-DG9RojRP.js +6 -0
  186. vibe_surf/backend/frontend/assets/between-horizontal-start-BNuWKIUb.js +6 -0
  187. vibe_surf/backend/frontend/assets/between-vertical-end-CUvl7S4G.js +6 -0
  188. vibe_surf/backend/frontend/assets/between-vertical-start-tYvnZE7k.js +6 -0
  189. vibe_surf/backend/frontend/assets/biceps-flexed-D2zMmbhv.js +6 -0
  190. vibe_surf/backend/frontend/assets/bike-DPdpsZIt.js +6 -0
  191. vibe_surf/backend/frontend/assets/binary-DnnraEVk.js +6 -0
  192. vibe_surf/backend/frontend/assets/binoculars-BXc-CFA4.js +6 -0
  193. vibe_surf/backend/frontend/assets/biohazard-D-6PF7OA.js +6 -0
  194. vibe_surf/backend/frontend/assets/bird-CYNkrqM5.js +6 -0
  195. vibe_surf/backend/frontend/assets/bitcoin-DG6PDKEk.js +6 -0
  196. vibe_surf/backend/frontend/assets/blend-COR-wQIS.js +6 -0
  197. vibe_surf/backend/frontend/assets/blinds-_pD0AjwU.js +6 -0
  198. vibe_surf/backend/frontend/assets/blocks-C0goFnXe.js +6 -0
  199. vibe_surf/backend/frontend/assets/bluetooth-BFH9HCot.js +6 -0
  200. vibe_surf/backend/frontend/assets/bluetooth-connected-C9JKQLmC.js +6 -0
  201. vibe_surf/backend/frontend/assets/bluetooth-off-ka-F7ZnG.js +6 -0
  202. vibe_surf/backend/frontend/assets/bluetooth-searching-BdyfX9rD.js +6 -0
  203. vibe_surf/backend/frontend/assets/bold-CZSxbQF9.js +6 -0
  204. vibe_surf/backend/frontend/assets/bolt-BjrrPChn.js +6 -0
  205. vibe_surf/backend/frontend/assets/bomb-CMlcm4r9.js +6 -0
  206. vibe_surf/backend/frontend/assets/bone-qWIxHNfL.js +6 -0
  207. vibe_surf/backend/frontend/assets/book-BfRvOdc3.js +6 -0
  208. vibe_surf/backend/frontend/assets/book-a-CpoCb7Zv.js +6 -0
  209. vibe_surf/backend/frontend/assets/book-audio-cBKWAq-p.js +6 -0
  210. vibe_surf/backend/frontend/assets/book-check-CqwOgoOp.js +6 -0
  211. vibe_surf/backend/frontend/assets/book-copy-ORHl4yqI.js +6 -0
  212. vibe_surf/backend/frontend/assets/book-dashed-BrJdSa-D.js +6 -0
  213. vibe_surf/backend/frontend/assets/book-down-Bj4JV-P-.js +6 -0
  214. vibe_surf/backend/frontend/assets/book-headphones-BYuIU1gj.js +6 -0
  215. vibe_surf/backend/frontend/assets/book-heart-DCUxVJaU.js +6 -0
  216. vibe_surf/backend/frontend/assets/book-image-BPpCKv6n.js +6 -0
  217. vibe_surf/backend/frontend/assets/book-key-Ca_EtM6h.js +6 -0
  218. vibe_surf/backend/frontend/assets/book-lock-Bldzz1aF.js +6 -0
  219. vibe_surf/backend/frontend/assets/book-marked-BCleXwJ3.js +6 -0
  220. vibe_surf/backend/frontend/assets/book-minus-XoJOGZOx.js +6 -0
  221. vibe_surf/backend/frontend/assets/book-open-DUlI5XCY.js +6 -0
  222. vibe_surf/backend/frontend/assets/book-open-check-BEksHFoQ.js +6 -0
  223. vibe_surf/backend/frontend/assets/book-open-text-CiKyiRt-.js +6 -0
  224. vibe_surf/backend/frontend/assets/book-plus-DuUfSKu2.js +6 -0
  225. vibe_surf/backend/frontend/assets/book-text-TTfLk4-M.js +6 -0
  226. vibe_surf/backend/frontend/assets/book-type-CMV326FZ.js +6 -0
  227. vibe_surf/backend/frontend/assets/book-up-2-CGiuKI0n.js +6 -0
  228. vibe_surf/backend/frontend/assets/book-up-d2hb8aDq.js +6 -0
  229. vibe_surf/backend/frontend/assets/book-user-BsZySUGG.js +6 -0
  230. vibe_surf/backend/frontend/assets/book-x-CoSA25As.js +6 -0
  231. vibe_surf/backend/frontend/assets/bookmark-CVx8aFGk.js +6 -0
  232. vibe_surf/backend/frontend/assets/bookmark-check-Zh_1fqo_.js +6 -0
  233. vibe_surf/backend/frontend/assets/bookmark-minus---KmRSON.js +6 -0
  234. vibe_surf/backend/frontend/assets/bookmark-plus-ZY-aQ6r5.js +6 -0
  235. vibe_surf/backend/frontend/assets/bookmark-x-DnEKBdZC.js +6 -0
  236. vibe_surf/backend/frontend/assets/boom-box-D5cJf4pI.js +6 -0
  237. vibe_surf/backend/frontend/assets/bot-BbS7VJ5s.js +6 -0
  238. vibe_surf/backend/frontend/assets/bot-message-square-Bm4hBAbI.js +6 -0
  239. vibe_surf/backend/frontend/assets/bot-off-CFjG1wx4.js +6 -0
  240. vibe_surf/backend/frontend/assets/bow-arrow-Bupk8VJM.js +6 -0
  241. vibe_surf/backend/frontend/assets/box-CyVAC5Vv.js +6 -0
  242. vibe_surf/backend/frontend/assets/boxes-B3xCa_UA.js +6 -0
  243. vibe_surf/backend/frontend/assets/braces-QLXt2h0B.js +6 -0
  244. vibe_surf/backend/frontend/assets/brackets-CEy7gs9d.js +6 -0
  245. vibe_surf/backend/frontend/assets/brain-circuit-WmeDjyy5.js +6 -0
  246. vibe_surf/backend/frontend/assets/brain-cog-DKDdpxNn.js +6 -0
  247. vibe_surf/backend/frontend/assets/brain-ziGJYeS1.js +6 -0
  248. vibe_surf/backend/frontend/assets/brick-wall-DXer5s5J.js +6 -0
  249. vibe_surf/backend/frontend/assets/brick-wall-fire-CfXr8Krv.js +6 -0
  250. vibe_surf/backend/frontend/assets/briefcase-C2YbssAg.js +6 -0
  251. vibe_surf/backend/frontend/assets/briefcase-business-CJCpJSkU.js +6 -0
  252. vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-B0jqiIT4.js +6 -0
  253. vibe_surf/backend/frontend/assets/briefcase-medical-BBH0C6ZQ.js +6 -0
  254. vibe_surf/backend/frontend/assets/bring-to-front-ywT72zy-.js +6 -0
  255. vibe_surf/backend/frontend/assets/brush-_uc9w_j1.js +6 -0
  256. vibe_surf/backend/frontend/assets/bubbles-ggRrvDQI.js +6 -0
  257. vibe_surf/backend/frontend/assets/bug-6l9frAXO.js +6 -0
  258. vibe_surf/backend/frontend/assets/bug-off-BmK1mJ7T.js +6 -0
  259. vibe_surf/backend/frontend/assets/bug-play-DbXJeqOa.js +6 -0
  260. vibe_surf/backend/frontend/assets/building-2-Cf9gYIvy.js +6 -0
  261. vibe_surf/backend/frontend/assets/building-D9eMVeBu.js +6 -0
  262. vibe_surf/backend/frontend/assets/bus-COrhWbdv.js +6 -0
  263. vibe_surf/backend/frontend/assets/bus-front-Csav5OG_.js +6 -0
  264. vibe_surf/backend/frontend/assets/cable-BPG7O6tf.js +6 -0
  265. vibe_surf/backend/frontend/assets/cable-car-ChPtZlze.js +6 -0
  266. vibe_surf/backend/frontend/assets/cake-DnmMZhI2.js +6 -0
  267. vibe_surf/backend/frontend/assets/cake-slice-Clc5mDPW.js +6 -0
  268. vibe_surf/backend/frontend/assets/calculator-C77I3XPN.js +6 -0
  269. vibe_surf/backend/frontend/assets/calendar-1-BMs-t7Zd.js +6 -0
  270. vibe_surf/backend/frontend/assets/calendar-DuLRS-6L.js +6 -0
  271. vibe_surf/backend/frontend/assets/calendar-arrow-down-DoVsOnV0.js +6 -0
  272. vibe_surf/backend/frontend/assets/calendar-arrow-up-Ca_1_rkT.js +6 -0
  273. vibe_surf/backend/frontend/assets/calendar-check-2-0JmvXRsb.js +6 -0
  274. vibe_surf/backend/frontend/assets/calendar-check-DtTDIbPE.js +6 -0
  275. vibe_surf/backend/frontend/assets/calendar-clock-39XA2NxZ.js +6 -0
  276. vibe_surf/backend/frontend/assets/calendar-cog-B3elAX8P.js +6 -0
  277. vibe_surf/backend/frontend/assets/calendar-days-B_4sd_nS.js +6 -0
  278. vibe_surf/backend/frontend/assets/calendar-fold-1GZdJiY5.js +6 -0
  279. vibe_surf/backend/frontend/assets/calendar-heart-C20Gu6Pq.js +6 -0
  280. vibe_surf/backend/frontend/assets/calendar-minus-2-C2uYA9Xy.js +6 -0
  281. vibe_surf/backend/frontend/assets/calendar-minus-Bf9ZhUgX.js +6 -0
  282. vibe_surf/backend/frontend/assets/calendar-off-oqUiDnlM.js +6 -0
  283. vibe_surf/backend/frontend/assets/calendar-plus-2-D5AF7K6Z.js +6 -0
  284. vibe_surf/backend/frontend/assets/calendar-plus-DFRLvp48.js +6 -0
  285. vibe_surf/backend/frontend/assets/calendar-range-BtbX_u86.js +6 -0
  286. vibe_surf/backend/frontend/assets/calendar-search-DKFr3oFg.js +6 -0
  287. vibe_surf/backend/frontend/assets/calendar-sync-J6s1mjVg.js +6 -0
  288. vibe_surf/backend/frontend/assets/calendar-x-16dHXmS-.js +6 -0
  289. vibe_surf/backend/frontend/assets/calendar-x-2-DASXeIpI.js +6 -0
  290. vibe_surf/backend/frontend/assets/camera-C73rx5T7.js +6 -0
  291. vibe_surf/backend/frontend/assets/camera-off-lYXrg8Ab.js +6 -0
  292. vibe_surf/backend/frontend/assets/candy-DHin-JSi.js +6 -0
  293. vibe_surf/backend/frontend/assets/candy-cane-BrFztxP3.js +6 -0
  294. vibe_surf/backend/frontend/assets/candy-off-C6p9RmsL.js +6 -0
  295. vibe_surf/backend/frontend/assets/cannabis-BIomtlTh.js +6 -0
  296. vibe_surf/backend/frontend/assets/captions-CU9AD1HN.js +6 -0
  297. vibe_surf/backend/frontend/assets/captions-off-BQabz_7T.js +6 -0
  298. vibe_surf/backend/frontend/assets/car-CIepr4l8.js +6 -0
  299. vibe_surf/backend/frontend/assets/car-front-BvC3NXIU.js +6 -0
  300. vibe_surf/backend/frontend/assets/car-taxi-front-D6kk_vUY.js +6 -0
  301. vibe_surf/backend/frontend/assets/caravan-B4YvOfvY.js +6 -0
  302. vibe_surf/backend/frontend/assets/carrot-DScNmGFZ.js +6 -0
  303. vibe_surf/backend/frontend/assets/case-lower-iW8MijQ2.js +6 -0
  304. vibe_surf/backend/frontend/assets/case-sensitive-DggKI0Fh.js +6 -0
  305. vibe_surf/backend/frontend/assets/case-upper-BC22BC0q.js +6 -0
  306. vibe_surf/backend/frontend/assets/cassette-tape-PMwALept.js +6 -0
  307. vibe_surf/backend/frontend/assets/cast-Kq2v55CB.js +6 -0
  308. vibe_surf/backend/frontend/assets/castle-DJzhSlL6.js +6 -0
  309. vibe_surf/backend/frontend/assets/cat-Cszwi-0j.js +6 -0
  310. vibe_surf/backend/frontend/assets/cctv-4zeLHFGP.js +6 -0
  311. vibe_surf/backend/frontend/assets/chart-area-JyFaZNpl.js +6 -0
  312. vibe_surf/backend/frontend/assets/chart-bar-Bcnue-Eu.js +6 -0
  313. vibe_surf/backend/frontend/assets/chart-bar-big-dJ6tM8UP.js +6 -0
  314. vibe_surf/backend/frontend/assets/chart-bar-decreasing-jviD9Nka.js +6 -0
  315. vibe_surf/backend/frontend/assets/chart-bar-increasing-BcpuBWlQ.js +6 -0
  316. vibe_surf/backend/frontend/assets/chart-bar-stacked-DLxMM-a6.js +6 -0
  317. vibe_surf/backend/frontend/assets/chart-candlestick-BK5WOKib.js +6 -0
  318. vibe_surf/backend/frontend/assets/chart-column-BjT_DIge.js +6 -0
  319. vibe_surf/backend/frontend/assets/chart-column-big-BoOEhNxT.js +6 -0
  320. vibe_surf/backend/frontend/assets/chart-column-decreasing-B3PEhFWj.js +6 -0
  321. vibe_surf/backend/frontend/assets/chart-column-increasing-KTAFoIBT.js +6 -0
  322. vibe_surf/backend/frontend/assets/chart-column-stacked-Drci0FWY.js +6 -0
  323. vibe_surf/backend/frontend/assets/chart-gantt-CxLhKfws.js +6 -0
  324. vibe_surf/backend/frontend/assets/chart-line-Deh3i4SN.js +6 -0
  325. vibe_surf/backend/frontend/assets/chart-network-1nLETKIo.js +6 -0
  326. vibe_surf/backend/frontend/assets/chart-no-axes-column-BBUb9OL4.js +6 -0
  327. vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-BNGTEmAA.js +6 -0
  328. vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-DYl5MpQr.js +6 -0
  329. vibe_surf/backend/frontend/assets/chart-no-axes-combined-Bwo9fVPi.js +6 -0
  330. vibe_surf/backend/frontend/assets/chart-no-axes-gantt-CIpwp7-G.js +6 -0
  331. vibe_surf/backend/frontend/assets/chart-pie-Brn9eScK.js +6 -0
  332. vibe_surf/backend/frontend/assets/chart-scatter-BFmfnF4I.js +6 -0
  333. vibe_surf/backend/frontend/assets/chart-spline-iPy-W03i.js +6 -0
  334. vibe_surf/backend/frontend/assets/check-check-CQEfDsmx.js +6 -0
  335. vibe_surf/backend/frontend/assets/chef-hat-DdOkr4i8.js +6 -0
  336. vibe_surf/backend/frontend/assets/cherry-XkD_QiBI.js +6 -0
  337. vibe_surf/backend/frontend/assets/chevron-first-muFwJevA.js +6 -0
  338. vibe_surf/backend/frontend/assets/chevron-last-Bn079TLv.js +6 -0
  339. vibe_surf/backend/frontend/assets/chevron-left-BhWYBFsk.js +6 -0
  340. vibe_surf/backend/frontend/assets/chevron-right-zm672Mdr.js +6 -0
  341. vibe_surf/backend/frontend/assets/chevrons-down-T3mOFRB2.js +6 -0
  342. vibe_surf/backend/frontend/assets/chevrons-down-up-BfWmsaYK.js +6 -0
  343. vibe_surf/backend/frontend/assets/chevrons-left-BLFCiP6g.js +6 -0
  344. vibe_surf/backend/frontend/assets/chevrons-left-right-Cgp4lAQF.js +6 -0
  345. vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BZSVxQ-x.js +6 -0
  346. vibe_surf/backend/frontend/assets/chevrons-right-DMKOjes0.js +6 -0
  347. vibe_surf/backend/frontend/assets/chevrons-right-left-Clwbiy09.js +6 -0
  348. vibe_surf/backend/frontend/assets/chevrons-up-CdrwLxmN.js +6 -0
  349. vibe_surf/backend/frontend/assets/chrome-46ygw5lK.js +6 -0
  350. vibe_surf/backend/frontend/assets/church-DQW3bkcl.js +6 -0
  351. vibe_surf/backend/frontend/assets/cigarette-CTvLdOLV.js +6 -0
  352. vibe_surf/backend/frontend/assets/cigarette-off-D0kR9lro.js +6 -0
  353. vibe_surf/backend/frontend/assets/circle-alert-QG2k6eWP.js +6 -0
  354. vibe_surf/backend/frontend/assets/circle-arrow-down-BHFs0Q9-.js +6 -0
  355. vibe_surf/backend/frontend/assets/circle-arrow-left-DQWeTJLw.js +6 -0
  356. vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-B_oYI2Rn.js +6 -0
  357. vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-BL4vxEs9.js +6 -0
  358. vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-CFi1FNF-.js +6 -0
  359. vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-CmMWk14E.js +6 -0
  360. vibe_surf/backend/frontend/assets/circle-arrow-right-dhHL8jIm.js +6 -0
  361. vibe_surf/backend/frontend/assets/circle-arrow-up-B8XWR9s_.js +6 -0
  362. vibe_surf/backend/frontend/assets/circle-check-CRm9QkNA.js +6 -0
  363. vibe_surf/backend/frontend/assets/circle-check-big-CPPNLArI.js +6 -0
  364. vibe_surf/backend/frontend/assets/circle-chevron-down-Cs4S5V03.js +6 -0
  365. vibe_surf/backend/frontend/assets/circle-chevron-left-V81BDvwB.js +6 -0
  366. vibe_surf/backend/frontend/assets/circle-chevron-right-CRa7Bkcz.js +6 -0
  367. vibe_surf/backend/frontend/assets/circle-chevron-up-FDxLxvSd.js +6 -0
  368. vibe_surf/backend/frontend/assets/circle-dashed-DD55_roy.js +6 -0
  369. vibe_surf/backend/frontend/assets/circle-divide-DKpocsWo.js +6 -0
  370. vibe_surf/backend/frontend/assets/circle-dollar-sign-p7_bVi5m.js +6 -0
  371. vibe_surf/backend/frontend/assets/circle-dot-Be13EypY.js +6 -0
  372. vibe_surf/backend/frontend/assets/circle-dot-dashed-KuVNkxEv.js +6 -0
  373. vibe_surf/backend/frontend/assets/circle-ellipsis-BSLpVL-C.js +6 -0
  374. vibe_surf/backend/frontend/assets/circle-equal-_Mfed9km.js +6 -0
  375. vibe_surf/backend/frontend/assets/circle-fading-arrow-up-D_E3BIXf.js +6 -0
  376. vibe_surf/backend/frontend/assets/circle-fading-plus-5ZA5Je_2.js +6 -0
  377. vibe_surf/backend/frontend/assets/circle-gauge-b41i9Azv.js +6 -0
  378. vibe_surf/backend/frontend/assets/circle-help-BOLgIUsf.js +6 -0
  379. vibe_surf/backend/frontend/assets/circle-minus-C41JxC_E.js +6 -0
  380. vibe_surf/backend/frontend/assets/circle-off-yuGaN1EU.js +6 -0
  381. vibe_surf/backend/frontend/assets/circle-parking-B-DnXhcd.js +6 -0
  382. vibe_surf/backend/frontend/assets/circle-parking-off-DsCM2b8j.js +6 -0
  383. vibe_surf/backend/frontend/assets/circle-pause-Dqufdu9m.js +6 -0
  384. vibe_surf/backend/frontend/assets/circle-percent-Dp8UwPQq.js +6 -0
  385. vibe_surf/backend/frontend/assets/circle-play-N8vi1Pcd.js +6 -0
  386. vibe_surf/backend/frontend/assets/circle-plus-wD1VqIgT.js +6 -0
  387. vibe_surf/backend/frontend/assets/circle-power-DBZAmaYW.js +6 -0
  388. vibe_surf/backend/frontend/assets/circle-slash-2-hdq8_Fp6.js +6 -0
  389. vibe_surf/backend/frontend/assets/circle-slash-CSrHLLP2.js +6 -0
  390. vibe_surf/backend/frontend/assets/circle-small-BQ6lrOIo.js +6 -0
  391. vibe_surf/backend/frontend/assets/circle-stop-xgLQ9Loi.js +6 -0
  392. vibe_surf/backend/frontend/assets/circle-user-CzvrnVH9.js +6 -0
  393. vibe_surf/backend/frontend/assets/circle-user-round-0JhYfAcs.js +6 -0
  394. vibe_surf/backend/frontend/assets/circuit-board-DpN-UUwV.js +6 -0
  395. vibe_surf/backend/frontend/assets/citrus-BGWHfGg3.js +6 -0
  396. vibe_surf/backend/frontend/assets/clapperboard-9m-99Aof.js +6 -0
  397. vibe_surf/backend/frontend/assets/clipboard-C-MVPhAy.js +6 -0
  398. vibe_surf/backend/frontend/assets/clipboard-check-Bonb2WoP.js +6 -0
  399. vibe_surf/backend/frontend/assets/clipboard-copy-CmRHdw5h.js +6 -0
  400. vibe_surf/backend/frontend/assets/clipboard-list-DEof2iPM.js +6 -0
  401. vibe_surf/backend/frontend/assets/clipboard-minus-DN2QuVOG.js +6 -0
  402. vibe_surf/backend/frontend/assets/clipboard-paste-B20nudiB.js +6 -0
  403. vibe_surf/backend/frontend/assets/clipboard-pen-BZJamOnq.js +6 -0
  404. vibe_surf/backend/frontend/assets/clipboard-pen-line-DScYxgpw.js +6 -0
  405. vibe_surf/backend/frontend/assets/clipboard-plus-DJb4TcvR.js +6 -0
  406. vibe_surf/backend/frontend/assets/clipboard-type-DaibEn_w.js +6 -0
  407. vibe_surf/backend/frontend/assets/clipboard-x-CebR2xkR.js +6 -0
  408. vibe_surf/backend/frontend/assets/clock-1-Cz0OEQH3.js +6 -0
  409. vibe_surf/backend/frontend/assets/clock-10-BMLTtzHQ.js +6 -0
  410. vibe_surf/backend/frontend/assets/clock-11-CZ6m52x1.js +6 -0
  411. vibe_surf/backend/frontend/assets/clock-12-BXZWDgbr.js +6 -0
  412. vibe_surf/backend/frontend/assets/clock-2-ElC7DzP5.js +6 -0
  413. vibe_surf/backend/frontend/assets/clock-3-DN86BONK.js +6 -0
  414. vibe_surf/backend/frontend/assets/clock-4-CV9eUVD9.js +6 -0
  415. vibe_surf/backend/frontend/assets/clock-5-DgMTU8BD.js +6 -0
  416. vibe_surf/backend/frontend/assets/clock-6-_RjAiNVz.js +6 -0
  417. vibe_surf/backend/frontend/assets/clock-7-DsWDnhwN.js +6 -0
  418. vibe_surf/backend/frontend/assets/clock-8-CY-eCfWq.js +6 -0
  419. vibe_surf/backend/frontend/assets/clock-9-D4aWNYpk.js +6 -0
  420. vibe_surf/backend/frontend/assets/clock-UtAbEQE0.js +6 -0
  421. vibe_surf/backend/frontend/assets/clock-alert-gi6h-zRT.js +6 -0
  422. vibe_surf/backend/frontend/assets/clock-arrow-down-CC9Qp0ac.js +6 -0
  423. vibe_surf/backend/frontend/assets/clock-arrow-up-Cjt2qN9V.js +6 -0
  424. vibe_surf/backend/frontend/assets/clock-fading-BJp0FFxY.js +6 -0
  425. vibe_surf/backend/frontend/assets/cloud-TYaHXSiL.js +6 -0
  426. vibe_surf/backend/frontend/assets/cloud-alert-Dp4WVua8.js +6 -0
  427. vibe_surf/backend/frontend/assets/cloud-cog-Dlyn4rqA.js +6 -0
  428. vibe_surf/backend/frontend/assets/cloud-download-DH8UN3eX.js +6 -0
  429. vibe_surf/backend/frontend/assets/cloud-drizzle-s8348ic3.js +6 -0
  430. vibe_surf/backend/frontend/assets/cloud-fog-DHRDnzsg.js +6 -0
  431. vibe_surf/backend/frontend/assets/cloud-hail-D7nJGZgB.js +6 -0
  432. vibe_surf/backend/frontend/assets/cloud-lightning-CscbfdPI.js +6 -0
  433. vibe_surf/backend/frontend/assets/cloud-moon-C6897Z5z.js +6 -0
  434. vibe_surf/backend/frontend/assets/cloud-moon-rain-B6pK_auO.js +6 -0
  435. vibe_surf/backend/frontend/assets/cloud-off-1kN_AD0k.js +6 -0
  436. vibe_surf/backend/frontend/assets/cloud-rain-Dj6B4fBD.js +6 -0
  437. vibe_surf/backend/frontend/assets/cloud-rain-wind-BJrdBUd4.js +6 -0
  438. vibe_surf/backend/frontend/assets/cloud-snow-LK6lpCkZ.js +6 -0
  439. vibe_surf/backend/frontend/assets/cloud-sun-CRH8EQEJ.js +6 -0
  440. vibe_surf/backend/frontend/assets/cloud-sun-rain-7IssqnpA.js +6 -0
  441. vibe_surf/backend/frontend/assets/cloud-upload-tI3Dz1zd.js +6 -0
  442. vibe_surf/backend/frontend/assets/cloudy-okUc5uOM.js +6 -0
  443. vibe_surf/backend/frontend/assets/clover-O6CtUOhV.js +6 -0
  444. vibe_surf/backend/frontend/assets/club-SnWEwVMR.js +6 -0
  445. vibe_surf/backend/frontend/assets/code-xml-CYTnIdXN.js +6 -0
  446. vibe_surf/backend/frontend/assets/codepen-UxBTFH8q.js +6 -0
  447. vibe_surf/backend/frontend/assets/codesandbox-CSRpmotF.js +6 -0
  448. vibe_surf/backend/frontend/assets/coffee-BTr4K8Gn.js +6 -0
  449. vibe_surf/backend/frontend/assets/cog-C7RMqAcW.js +6 -0
  450. vibe_surf/backend/frontend/assets/coins-D7gWOtE7.js +6 -0
  451. vibe_surf/backend/frontend/assets/columns-2-WBM3YpNL.js +6 -0
  452. vibe_surf/backend/frontend/assets/columns-3-DyAMu-k8.js +6 -0
  453. vibe_surf/backend/frontend/assets/columns-3-cog-zfUPAOg0.js +6 -0
  454. vibe_surf/backend/frontend/assets/columns-4-Qz-B3Dvq.js +6 -0
  455. vibe_surf/backend/frontend/assets/combine-CLZvnf8j.js +6 -0
  456. vibe_surf/backend/frontend/assets/command-D8ymLYGG.js +6 -0
  457. vibe_surf/backend/frontend/assets/compass-DGYgNSVa.js +6 -0
  458. vibe_surf/backend/frontend/assets/component-CwL9ER1Q.js +6 -0
  459. vibe_surf/backend/frontend/assets/computer-QNTojt_5.js +6 -0
  460. vibe_surf/backend/frontend/assets/concierge-bell-C7jm8QJd.js +6 -0
  461. vibe_surf/backend/frontend/assets/cone-C9TQbkDB.js +6 -0
  462. vibe_surf/backend/frontend/assets/construction-CSyYpaz5.js +6 -0
  463. vibe_surf/backend/frontend/assets/contact-CFldvJVP.js +6 -0
  464. vibe_surf/backend/frontend/assets/contact-round-DA1kjclM.js +6 -0
  465. vibe_surf/backend/frontend/assets/container-BfGJKo0o.js +6 -0
  466. vibe_surf/backend/frontend/assets/contrast-DmYhTvN3.js +6 -0
  467. vibe_surf/backend/frontend/assets/cookie-Cw70purP.js +6 -0
  468. vibe_surf/backend/frontend/assets/cooking-pot-WzjjWZaR.js +6 -0
  469. vibe_surf/backend/frontend/assets/copy-BPjnY3ea.js +6 -0
  470. vibe_surf/backend/frontend/assets/copy-check-B6hqPf9B.js +6 -0
  471. vibe_surf/backend/frontend/assets/copy-minus-DMGhawAT.js +6 -0
  472. vibe_surf/backend/frontend/assets/copy-plus-DcW4_i4R.js +6 -0
  473. vibe_surf/backend/frontend/assets/copy-slash-Cn_xel6o.js +6 -0
  474. vibe_surf/backend/frontend/assets/copy-x-Dmf3jckJ.js +6 -0
  475. vibe_surf/backend/frontend/assets/copyleft-CJDbqV_Y.js +6 -0
  476. vibe_surf/backend/frontend/assets/copyright-Buw-D4Xa.js +6 -0
  477. vibe_surf/backend/frontend/assets/corner-down-left-BhPTW3SL.js +6 -0
  478. vibe_surf/backend/frontend/assets/corner-down-right-B_Md48mW.js +6 -0
  479. vibe_surf/backend/frontend/assets/corner-left-down-DDc0LvYT.js +6 -0
  480. vibe_surf/backend/frontend/assets/corner-left-up-C_EIQYvd.js +6 -0
  481. vibe_surf/backend/frontend/assets/corner-right-down-Bipz7-p6.js +6 -0
  482. vibe_surf/backend/frontend/assets/corner-right-up-euSAC3Mi.js +6 -0
  483. vibe_surf/backend/frontend/assets/corner-up-left-CRvdJT3E.js +6 -0
  484. vibe_surf/backend/frontend/assets/corner-up-right-CCK7dhVV.js +6 -0
  485. vibe_surf/backend/frontend/assets/cpu-DB-52VKi.js +6 -0
  486. vibe_surf/backend/frontend/assets/creative-commons-CXWueat0.js +6 -0
  487. vibe_surf/backend/frontend/assets/credit-card-CR5swmPL.js +6 -0
  488. vibe_surf/backend/frontend/assets/croissant-ClZbIF3L.js +6 -0
  489. vibe_surf/backend/frontend/assets/crop-DSXkvq6D.js +6 -0
  490. vibe_surf/backend/frontend/assets/cross-CkHV6YOi.js +6 -0
  491. vibe_surf/backend/frontend/assets/crosshair-C3tcoYxo.js +6 -0
  492. vibe_surf/backend/frontend/assets/crown-0LB9DCRa.js +6 -0
  493. vibe_surf/backend/frontend/assets/cuboid-CidkVtLJ.js +6 -0
  494. vibe_surf/backend/frontend/assets/cup-soda-DG_5s6Ma.js +6 -0
  495. vibe_surf/backend/frontend/assets/currency-AEQeyk_J.js +6 -0
  496. vibe_surf/backend/frontend/assets/cylinder-Da7lV5Pc.js +6 -0
  497. vibe_surf/backend/frontend/assets/dam-BIFS7P89.js +6 -0
  498. vibe_surf/backend/frontend/assets/database-Dx9euHTJ.js +6 -0
  499. vibe_surf/backend/frontend/assets/database-backup-Bbbt7mXt.js +6 -0
  500. vibe_surf/backend/frontend/assets/database-zap-CJC7IfdF.js +6 -0
  501. vibe_surf/backend/frontend/assets/decimals-arrow-left-BrRd8_vb.js +6 -0
  502. vibe_surf/backend/frontend/assets/decimals-arrow-right-Cglo48c9.js +6 -0
  503. vibe_surf/backend/frontend/assets/delete-C9qTL0sD.js +6 -0
  504. vibe_surf/backend/frontend/assets/dessert-7PTt5JJ0.js +6 -0
  505. vibe_surf/backend/frontend/assets/diameter-oheO2UGD.js +6 -0
  506. vibe_surf/backend/frontend/assets/diamond-DhBpDMNy.js +6 -0
  507. vibe_surf/backend/frontend/assets/diamond-minus-BqTULDvb.js +6 -0
  508. vibe_surf/backend/frontend/assets/diamond-percent-D1Ck8xGc.js +6 -0
  509. vibe_surf/backend/frontend/assets/diamond-plus-DfSf7Xoq.js +6 -0
  510. vibe_surf/backend/frontend/assets/dice-1-CIRG2xPK.js +6 -0
  511. vibe_surf/backend/frontend/assets/dice-2-r7s36USZ.js +6 -0
  512. vibe_surf/backend/frontend/assets/dice-3-Cl7FLe3x.js +6 -0
  513. vibe_surf/backend/frontend/assets/dice-4-D-yJWiku.js +6 -0
  514. vibe_surf/backend/frontend/assets/dice-5-Ci09NYyS.js +6 -0
  515. vibe_surf/backend/frontend/assets/dice-6-CC2FLvLo.js +6 -0
  516. vibe_surf/backend/frontend/assets/dices-CmB6hNUU.js +6 -0
  517. vibe_surf/backend/frontend/assets/diff-oCWjvY-c.js +6 -0
  518. vibe_surf/backend/frontend/assets/disc-2-DpUl7fl6.js +6 -0
  519. vibe_surf/backend/frontend/assets/disc-3-BugUAszu.js +6 -0
  520. vibe_surf/backend/frontend/assets/disc-DUbtGdHe.js +6 -0
  521. vibe_surf/backend/frontend/assets/disc-album-CXJRMctz.js +6 -0
  522. vibe_surf/backend/frontend/assets/divide-CY1K-HT7.js +6 -0
  523. vibe_surf/backend/frontend/assets/dna-CeE8ObeE.js +6 -0
  524. vibe_surf/backend/frontend/assets/dna-off-BviJKT3C.js +6 -0
  525. vibe_surf/backend/frontend/assets/dock-eIe8zGWk.js +6 -0
  526. vibe_surf/backend/frontend/assets/dog-CSlDDqxp.js +6 -0
  527. vibe_surf/backend/frontend/assets/dollar-sign-5U68U397.js +6 -0
  528. vibe_surf/backend/frontend/assets/donut-BeawTrlI.js +6 -0
  529. vibe_surf/backend/frontend/assets/door-closed-CwY8Mg15.js +6 -0
  530. vibe_surf/backend/frontend/assets/door-open-DFgi7N5B.js +6 -0
  531. vibe_surf/backend/frontend/assets/dot-fPF_etdO.js +6 -0
  532. vibe_surf/backend/frontend/assets/download-gSwRRqnX.js +6 -0
  533. vibe_surf/backend/frontend/assets/drafting-compass-Dj_7EFRc.js +6 -0
  534. vibe_surf/backend/frontend/assets/drama-BlDJuZEs.js +6 -0
  535. vibe_surf/backend/frontend/assets/dribbble-C0k3dpAi.js +6 -0
  536. vibe_surf/backend/frontend/assets/drill-COJcLBB4.js +6 -0
  537. vibe_surf/backend/frontend/assets/droplet-5wuLGLgZ.js +6 -0
  538. vibe_surf/backend/frontend/assets/droplet-off-Bra_6Oh9.js +6 -0
  539. vibe_surf/backend/frontend/assets/droplets-BE8PR1pM.js +6 -0
  540. vibe_surf/backend/frontend/assets/drum-DnJ1RUvq.js +6 -0
  541. vibe_surf/backend/frontend/assets/drumstick-JGiBDDwZ.js +6 -0
  542. vibe_surf/backend/frontend/assets/dumbbell-BEtc4tyd.js +6 -0
  543. vibe_surf/backend/frontend/assets/ear-DAqeJjkr.js +6 -0
  544. vibe_surf/backend/frontend/assets/ear-off-BA7gp4ie.js +6 -0
  545. vibe_surf/backend/frontend/assets/earth-CUlUl7Bp.js +6 -0
  546. vibe_surf/backend/frontend/assets/earth-lock-sl59Ywm7.js +6 -0
  547. vibe_surf/backend/frontend/assets/eclipse-DY7fC5N3.js +6 -0
  548. vibe_surf/backend/frontend/assets/egg-DxfY2UB8.js +6 -0
  549. vibe_surf/backend/frontend/assets/egg-fried-D2Eo3APu.js +6 -0
  550. vibe_surf/backend/frontend/assets/egg-off-DqYobjwG.js +6 -0
  551. vibe_surf/backend/frontend/assets/ellipsis-DgOuKLdR.js +6 -0
  552. vibe_surf/backend/frontend/assets/ellipsis-vertical--sr8F_UD.js +6 -0
  553. vibe_surf/backend/frontend/assets/equal-DS1qMZhi.js +6 -0
  554. vibe_surf/backend/frontend/assets/equal-approximately-mgMMBVF_.js +6 -0
  555. vibe_surf/backend/frontend/assets/equal-not-1Alw8lqE.js +6 -0
  556. vibe_surf/backend/frontend/assets/eraser-IStMo8nh.js +6 -0
  557. vibe_surf/backend/frontend/assets/ethernet-port-B6SRY0d8.js +6 -0
  558. vibe_surf/backend/frontend/assets/euro-S1kGUYTE.js +6 -0
  559. vibe_surf/backend/frontend/assets/expand-Cj8IQccm.js +6 -0
  560. vibe_surf/backend/frontend/assets/eye-DrnoCeKD.js +6 -0
  561. vibe_surf/backend/frontend/assets/eye-closed-B0cNIHJN.js +6 -0
  562. vibe_surf/backend/frontend/assets/eye-off-DIIh42Ws.js +6 -0
  563. vibe_surf/backend/frontend/assets/facebook-Df9Fpfnn.js +6 -0
  564. vibe_surf/backend/frontend/assets/factory-BLKvR2Z1.js +6 -0
  565. vibe_surf/backend/frontend/assets/fan-C-xRuGdo.js +6 -0
  566. vibe_surf/backend/frontend/assets/fast-forward-Bae5V83y.js +6 -0
  567. vibe_surf/backend/frontend/assets/feather-DTPfgED2.js +6 -0
  568. vibe_surf/backend/frontend/assets/fence-Mr7VQ0O9.js +6 -0
  569. vibe_surf/backend/frontend/assets/ferris-wheel-D82pDMqi.js +6 -0
  570. vibe_surf/backend/frontend/assets/figma-DBFJo9L2.js +6 -0
  571. vibe_surf/backend/frontend/assets/file-DvuZsaUg.js +6 -0
  572. vibe_surf/backend/frontend/assets/file-archive-DRtB2ivb.js +6 -0
  573. vibe_surf/backend/frontend/assets/file-audio-2-JE5iEkL9.js +6 -0
  574. vibe_surf/backend/frontend/assets/file-audio-C4RwC1BT.js +6 -0
  575. vibe_surf/backend/frontend/assets/file-axis-3d-DQSHzEo4.js +6 -0
  576. vibe_surf/backend/frontend/assets/file-badge-2-P__XKUXn.js +6 -0
  577. vibe_surf/backend/frontend/assets/file-badge-CejYglxU.js +6 -0
  578. vibe_surf/backend/frontend/assets/file-box-CgFMY7Rp.js +6 -0
  579. vibe_surf/backend/frontend/assets/file-chart-column-Bq5PyMwY.js +6 -0
  580. vibe_surf/backend/frontend/assets/file-chart-column-increasing-t_d1wCSV.js +6 -0
  581. vibe_surf/backend/frontend/assets/file-chart-line-Df6iedBR.js +6 -0
  582. vibe_surf/backend/frontend/assets/file-chart-pie-YH23adPM.js +6 -0
  583. vibe_surf/backend/frontend/assets/file-check-2-CKcRkU0L.js +6 -0
  584. vibe_surf/backend/frontend/assets/file-check-BYZznME9.js +6 -0
  585. vibe_surf/backend/frontend/assets/file-clock-8rD4-Bqt.js +6 -0
  586. vibe_surf/backend/frontend/assets/file-code-2-BjV8KhR4.js +6 -0
  587. vibe_surf/backend/frontend/assets/file-code-CXS3YUpM.js +6 -0
  588. vibe_surf/backend/frontend/assets/file-cog-GKLng0Qf.js +6 -0
  589. vibe_surf/backend/frontend/assets/file-diff-B_7HXPkJ.js +6 -0
  590. vibe_surf/backend/frontend/assets/file-digit-AtVulYi7.js +6 -0
  591. vibe_surf/backend/frontend/assets/file-down-CJIG5dHj.js +6 -0
  592. vibe_surf/backend/frontend/assets/file-heart-B8jWzdG5.js +6 -0
  593. vibe_surf/backend/frontend/assets/file-image-CXtDt3N3.js +6 -0
  594. vibe_surf/backend/frontend/assets/file-input-B-0mgcKT.js +6 -0
  595. vibe_surf/backend/frontend/assets/file-json-2-DQHJM93o.js +6 -0
  596. vibe_surf/backend/frontend/assets/file-json-BmrGDLh2.js +6 -0
  597. vibe_surf/backend/frontend/assets/file-key-2-DnpQ1dTj.js +6 -0
  598. vibe_surf/backend/frontend/assets/file-key-D3lJXveQ.js +6 -0
  599. vibe_surf/backend/frontend/assets/file-lock-2-DWdLzoF7.js +6 -0
  600. vibe_surf/backend/frontend/assets/file-lock-ZMZB3U4I.js +6 -0
  601. vibe_surf/backend/frontend/assets/file-minus-2-CsTsio0s.js +6 -0
  602. vibe_surf/backend/frontend/assets/file-minus-CtfRmVme.js +6 -0
  603. vibe_surf/backend/frontend/assets/file-music-DHhVu2aK.js +6 -0
  604. vibe_surf/backend/frontend/assets/file-output-CjQ-FMg0.js +6 -0
  605. vibe_surf/backend/frontend/assets/file-pen-C9S_u4U9.js +6 -0
  606. vibe_surf/backend/frontend/assets/file-pen-line-niZF4quE.js +6 -0
  607. vibe_surf/backend/frontend/assets/file-plus-2-DzIiS2EM.js +6 -0
  608. vibe_surf/backend/frontend/assets/file-plus-Bloe0E45.js +6 -0
  609. vibe_surf/backend/frontend/assets/file-question-BBTjP9h0.js +6 -0
  610. vibe_surf/backend/frontend/assets/file-scan-B3Bn2EZN.js +6 -0
  611. vibe_surf/backend/frontend/assets/file-search-2-DnC8d9OD.js +6 -0
  612. vibe_surf/backend/frontend/assets/file-search-DzPGZllw.js +6 -0
  613. vibe_surf/backend/frontend/assets/file-sliders-BHYXa9jQ.js +6 -0
  614. vibe_surf/backend/frontend/assets/file-spreadsheet-DvjPpK9G.js +6 -0
  615. vibe_surf/backend/frontend/assets/file-stack-yJR4id_3.js +6 -0
  616. vibe_surf/backend/frontend/assets/file-symlink-BWQBdrEp.js +6 -0
  617. vibe_surf/backend/frontend/assets/file-terminal-CvhcKgiv.js +6 -0
  618. vibe_surf/backend/frontend/assets/file-text-tuxzZhRs.js +6 -0
  619. vibe_surf/backend/frontend/assets/file-type-2-Dgantaer.js +6 -0
  620. vibe_surf/backend/frontend/assets/file-type-DfZBPqmH.js +6 -0
  621. vibe_surf/backend/frontend/assets/file-up-GXfnonbH.js +6 -0
  622. vibe_surf/backend/frontend/assets/file-user-N7Fan7ao.js +6 -0
  623. vibe_surf/backend/frontend/assets/file-video-2-B4JBmAcG.js +6 -0
  624. vibe_surf/backend/frontend/assets/file-video-Fsp8g5kU.js +6 -0
  625. vibe_surf/backend/frontend/assets/file-volume-2-Cg1A9z8S.js +6 -0
  626. vibe_surf/backend/frontend/assets/file-volume-xzVZMKW0.js +6 -0
  627. vibe_surf/backend/frontend/assets/file-warning-CS2F3Xr2.js +6 -0
  628. vibe_surf/backend/frontend/assets/file-x-2-BNUgAQH8.js +6 -0
  629. vibe_surf/backend/frontend/assets/file-x-DTK5Zfd-.js +6 -0
  630. vibe_surf/backend/frontend/assets/files-CNx4yvup.js +6 -0
  631. vibe_surf/backend/frontend/assets/film-Dec7cGCL.js +6 -0
  632. vibe_surf/backend/frontend/assets/fingerprint-B_IGMLcp.js +6 -0
  633. vibe_surf/backend/frontend/assets/fire-extinguisher-CjZilrfE.js +6 -0
  634. vibe_surf/backend/frontend/assets/fish-CXs3XpVQ.js +6 -0
  635. vibe_surf/backend/frontend/assets/fish-off-BfYutBG_.js +6 -0
  636. vibe_surf/backend/frontend/assets/fish-symbol-DFoA8GWJ.js +6 -0
  637. vibe_surf/backend/frontend/assets/flag-cx37QYSs.js +6 -0
  638. vibe_surf/backend/frontend/assets/flag-off-DyXYguA1.js +6 -0
  639. vibe_surf/backend/frontend/assets/flag-triangle-left-Dvsg9XUg.js +6 -0
  640. vibe_surf/backend/frontend/assets/flag-triangle-right-CluL18qS.js +6 -0
  641. vibe_surf/backend/frontend/assets/flame-DwjoBypP.js +6 -0
  642. vibe_surf/backend/frontend/assets/flame-kindling-DFbZUxx1.js +6 -0
  643. vibe_surf/backend/frontend/assets/flashlight-eSCrcAU_.js +6 -0
  644. vibe_surf/backend/frontend/assets/flashlight-off-C6ZnSGnv.js +6 -0
  645. vibe_surf/backend/frontend/assets/flask-conical-CqZXJFUg.js +6 -0
  646. vibe_surf/backend/frontend/assets/flask-conical-off-DLnkLxdX.js +6 -0
  647. vibe_surf/backend/frontend/assets/flask-round-Dukzlk12.js +6 -0
  648. vibe_surf/backend/frontend/assets/flip-horizontal-2-DPCHT9Se.js +6 -0
  649. vibe_surf/backend/frontend/assets/flip-horizontal-B27Zih29.js +6 -0
  650. vibe_surf/backend/frontend/assets/flip-vertical-2-BLZ7P_e7.js +6 -0
  651. vibe_surf/backend/frontend/assets/flip-vertical-BKIxHZUr.js +6 -0
  652. vibe_surf/backend/frontend/assets/flower-2-C3USolHO.js +6 -0
  653. vibe_surf/backend/frontend/assets/flower-MuZltbIo.js +6 -0
  654. vibe_surf/backend/frontend/assets/focus-42uZfpdQ.js +6 -0
  655. vibe_surf/backend/frontend/assets/fold-horizontal-Di0iHFys.js +6 -0
  656. vibe_surf/backend/frontend/assets/fold-vertical-DTaNfFgW.js +6 -0
  657. vibe_surf/backend/frontend/assets/folder-CZZJq_yO.js +6 -0
  658. vibe_surf/backend/frontend/assets/folder-archive-B9gmPXfh.js +6 -0
  659. vibe_surf/backend/frontend/assets/folder-check-D8RNiC0h.js +6 -0
  660. vibe_surf/backend/frontend/assets/folder-clock-xJeq54e5.js +6 -0
  661. vibe_surf/backend/frontend/assets/folder-closed-J_oj7irx.js +6 -0
  662. vibe_surf/backend/frontend/assets/folder-code-sdeNF88C.js +6 -0
  663. vibe_surf/backend/frontend/assets/folder-cog-DaxTyB8x.js +6 -0
  664. vibe_surf/backend/frontend/assets/folder-dot-CcddM8ht.js +6 -0
  665. vibe_surf/backend/frontend/assets/folder-down-B6ibnVRy.js +6 -0
  666. vibe_surf/backend/frontend/assets/folder-git-2-C1s592lv.js +6 -0
  667. vibe_surf/backend/frontend/assets/folder-git-DT6ZCpGc.js +6 -0
  668. vibe_surf/backend/frontend/assets/folder-heart-_fpvnFcA.js +6 -0
  669. vibe_surf/backend/frontend/assets/folder-input-OCjNnVk-.js +6 -0
  670. vibe_surf/backend/frontend/assets/folder-kanban-DgbGiYl_.js +6 -0
  671. vibe_surf/backend/frontend/assets/folder-key-6dl4vOVJ.js +6 -0
  672. vibe_surf/backend/frontend/assets/folder-lock-C0FPUNUM.js +6 -0
  673. vibe_surf/backend/frontend/assets/folder-minus-CnnUrRgx.js +6 -0
  674. vibe_surf/backend/frontend/assets/folder-open-B6qoyzo4.js +6 -0
  675. vibe_surf/backend/frontend/assets/folder-open-dot-vcn79EAq.js +6 -0
  676. vibe_surf/backend/frontend/assets/folder-output-aqyTbjq1.js +6 -0
  677. vibe_surf/backend/frontend/assets/folder-pen-DONbvY-M.js +6 -0
  678. vibe_surf/backend/frontend/assets/folder-plus-B1CMWyUH.js +6 -0
  679. vibe_surf/backend/frontend/assets/folder-root-CO03ueMD.js +6 -0
  680. vibe_surf/backend/frontend/assets/folder-search-2-vXSwPDsr.js +6 -0
  681. vibe_surf/backend/frontend/assets/folder-search-CqRRhEYi.js +6 -0
  682. vibe_surf/backend/frontend/assets/folder-symlink-CyG26ZIM.js +6 -0
  683. vibe_surf/backend/frontend/assets/folder-sync-D7kc3Qv9.js +6 -0
  684. vibe_surf/backend/frontend/assets/folder-tree-B_kJAFgg.js +6 -0
  685. vibe_surf/backend/frontend/assets/folder-up-CPWWXuBL.js +6 -0
  686. vibe_surf/backend/frontend/assets/folder-x-BgWBu65a.js +6 -0
  687. vibe_surf/backend/frontend/assets/folders-BqIxqB0_.js +6 -0
  688. vibe_surf/backend/frontend/assets/footprints-U_DOce2V.js +6 -0
  689. vibe_surf/backend/frontend/assets/forklift-HwzIz7aw.js +6 -0
  690. vibe_surf/backend/frontend/assets/forward-DjYLGiCR.js +6 -0
  691. vibe_surf/backend/frontend/assets/frame-poMkf2ta.js +6 -0
  692. vibe_surf/backend/frontend/assets/framer-DNQvf86-.js +6 -0
  693. vibe_surf/backend/frontend/assets/frown-BnHOvtLa.js +6 -0
  694. vibe_surf/backend/frontend/assets/fuel-Cm_lHCJg.js +6 -0
  695. vibe_surf/backend/frontend/assets/fullscreen-COEG0zVc.js +6 -0
  696. vibe_surf/backend/frontend/assets/funnel-BKREn55d.js +6 -0
  697. vibe_surf/backend/frontend/assets/funnel-plus-B1RbFoZ4.js +6 -0
  698. vibe_surf/backend/frontend/assets/funnel-x-z3lufNFJ.js +6 -0
  699. vibe_surf/backend/frontend/assets/gallery-horizontal-CZQKmb1v.js +6 -0
  700. vibe_surf/backend/frontend/assets/gallery-horizontal-end-rt0pNZmd.js +6 -0
  701. vibe_surf/backend/frontend/assets/gallery-thumbnails-BawPOO5E.js +6 -0
  702. vibe_surf/backend/frontend/assets/gallery-vertical-DHlqWz-O.js +6 -0
  703. vibe_surf/backend/frontend/assets/gallery-vertical-end-1UBU5tP0.js +6 -0
  704. vibe_surf/backend/frontend/assets/gamepad-2-CGlBaPJy.js +6 -0
  705. vibe_surf/backend/frontend/assets/gamepad-B7EN8TXy.js +6 -0
  706. vibe_surf/backend/frontend/assets/gauge-CkJyJpYu.js +6 -0
  707. vibe_surf/backend/frontend/assets/gavel-BXOFsfyc.js +6 -0
  708. vibe_surf/backend/frontend/assets/gem-DJaoJhpp.js +6 -0
  709. vibe_surf/backend/frontend/assets/ghost-5jDlD5mv.js +6 -0
  710. vibe_surf/backend/frontend/assets/gift-DTuN9n1d.js +6 -0
  711. vibe_surf/backend/frontend/assets/git-branch-CAxiUjEF.js +6 -0
  712. vibe_surf/backend/frontend/assets/git-branch-plus-BcouIUD3.js +6 -0
  713. vibe_surf/backend/frontend/assets/git-commit-horizontal-DqOnbX0A.js +6 -0
  714. vibe_surf/backend/frontend/assets/git-commit-vertical-DEAmtVm7.js +6 -0
  715. vibe_surf/backend/frontend/assets/git-compare-8F4A8hf8.js +6 -0
  716. vibe_surf/backend/frontend/assets/git-compare-arrows-BCgbMQBd.js +6 -0
  717. vibe_surf/backend/frontend/assets/git-fork-UmnYpjac.js +6 -0
  718. vibe_surf/backend/frontend/assets/git-graph-MIRVcG3s.js +6 -0
  719. vibe_surf/backend/frontend/assets/git-merge-1ccPZB0a.js +6 -0
  720. vibe_surf/backend/frontend/assets/git-pull-request-BAmJjoSf.js +6 -0
  721. vibe_surf/backend/frontend/assets/git-pull-request-arrow-hDbG9s0T.js +6 -0
  722. vibe_surf/backend/frontend/assets/git-pull-request-closed-DZVF4_75.js +6 -0
  723. vibe_surf/backend/frontend/assets/git-pull-request-create-B_ikGAua.js +6 -0
  724. vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-OlDcvuiA.js +6 -0
  725. vibe_surf/backend/frontend/assets/git-pull-request-draft-CfvzgQz4.js +6 -0
  726. vibe_surf/backend/frontend/assets/github-DlTWmBTt.js +6 -0
  727. vibe_surf/backend/frontend/assets/gitlab-DquWeR50.js +6 -0
  728. vibe_surf/backend/frontend/assets/glass-water-yuqxiPgK.js +6 -0
  729. vibe_surf/backend/frontend/assets/glasses-DPTQtusr.js +6 -0
  730. vibe_surf/backend/frontend/assets/globe-D1X1kv-g.js +6 -0
  731. vibe_surf/backend/frontend/assets/globe-lock-miWknHfI.js +6 -0
  732. vibe_surf/backend/frontend/assets/goal-BY1nb-LN.js +6 -0
  733. vibe_surf/backend/frontend/assets/grab-CnmpLOMH.js +6 -0
  734. vibe_surf/backend/frontend/assets/graduation-cap-CcH89wnV.js +6 -0
  735. vibe_surf/backend/frontend/assets/grape-CIiMFgS_.js +6 -0
  736. vibe_surf/backend/frontend/assets/grid-2x2-DyXR6Owe.js +6 -0
  737. vibe_surf/backend/frontend/assets/grid-2x2-check-D2GIuWpl.js +6 -0
  738. vibe_surf/backend/frontend/assets/grid-2x2-plus-D89B7CNh.js +6 -0
  739. vibe_surf/backend/frontend/assets/grid-2x2-x-CMeekq27.js +6 -0
  740. vibe_surf/backend/frontend/assets/grid-3x3-qKjElxaz.js +6 -0
  741. vibe_surf/backend/frontend/assets/grip--SsS48b-.js +6 -0
  742. vibe_surf/backend/frontend/assets/grip-horizontal-DapWkFjo.js +6 -0
  743. vibe_surf/backend/frontend/assets/grip-vertical-vn3rXQIt.js +6 -0
  744. vibe_surf/backend/frontend/assets/group-XhzCMXdw.js +6 -0
  745. vibe_surf/backend/frontend/assets/guitar-But8OLt2.js +6 -0
  746. vibe_surf/backend/frontend/assets/ham-_9G65W_I.js +6 -0
  747. vibe_surf/backend/frontend/assets/hammer-C2AZqVnX.js +6 -0
  748. vibe_surf/backend/frontend/assets/hand-DXuxSiOo.js +6 -0
  749. vibe_surf/backend/frontend/assets/hand-coins-mma7__lh.js +6 -0
  750. vibe_surf/backend/frontend/assets/hand-heart-DNtq1bnS.js +6 -0
  751. vibe_surf/backend/frontend/assets/hand-helping-Cdw7lKNu.js +6 -0
  752. vibe_surf/backend/frontend/assets/hand-metal-CcoWdRUV.js +6 -0
  753. vibe_surf/backend/frontend/assets/hand-platter-DoQTVTFx.js +6 -0
  754. vibe_surf/backend/frontend/assets/handshake-CJyspjIU.js +6 -0
  755. vibe_surf/backend/frontend/assets/hard-drive-ZduQuJtY.js +6 -0
  756. vibe_surf/backend/frontend/assets/hard-drive-download-D_hUh11c.js +6 -0
  757. vibe_surf/backend/frontend/assets/hard-drive-upload-BBPLIyZo.js +6 -0
  758. vibe_surf/backend/frontend/assets/hard-hat-OlmGevRI.js +6 -0
  759. vibe_surf/backend/frontend/assets/hash-COjLjaYu.js +6 -0
  760. vibe_surf/backend/frontend/assets/haze-Vf7OsAWn.js +6 -0
  761. vibe_surf/backend/frontend/assets/hdmi-port-B3C9bYX1.js +6 -0
  762. vibe_surf/backend/frontend/assets/heading-1-Dyyb72R2.js +6 -0
  763. vibe_surf/backend/frontend/assets/heading-2-ClF7vOi5.js +6 -0
  764. vibe_surf/backend/frontend/assets/heading-3-DPRazJfc.js +6 -0
  765. vibe_surf/backend/frontend/assets/heading-4-3e6Zii5g.js +6 -0
  766. vibe_surf/backend/frontend/assets/heading-5-GEVsfo30.js +6 -0
  767. vibe_surf/backend/frontend/assets/heading-6-CtX8dWYy.js +6 -0
  768. vibe_surf/backend/frontend/assets/heading-C_c5dBtC.js +6 -0
  769. vibe_surf/backend/frontend/assets/headphone-off-VkuNIw42.js +6 -0
  770. vibe_surf/backend/frontend/assets/headphones-BdMKOmhg.js +6 -0
  771. vibe_surf/backend/frontend/assets/headset-CGOllUmf.js +6 -0
  772. vibe_surf/backend/frontend/assets/heart-J_dfRIZ7.js +6 -0
  773. vibe_surf/backend/frontend/assets/heart-crack-BDNXXAjd.js +6 -0
  774. vibe_surf/backend/frontend/assets/heart-handshake-BhQLIVaj.js +6 -0
  775. vibe_surf/backend/frontend/assets/heart-minus-Dgexi3zQ.js +6 -0
  776. vibe_surf/backend/frontend/assets/heart-off-DF68jDRm.js +6 -0
  777. vibe_surf/backend/frontend/assets/heart-plus-D3LX6R_l.js +6 -0
  778. vibe_surf/backend/frontend/assets/heart-pulse-DnwkpqSJ.js +6 -0
  779. vibe_surf/backend/frontend/assets/heater-Bilq_TPS.js +6 -0
  780. vibe_surf/backend/frontend/assets/hexagon-BEvfIIaV.js +6 -0
  781. vibe_surf/backend/frontend/assets/highlighter-CNa8UVQD.js +6 -0
  782. vibe_surf/backend/frontend/assets/history-BggOc8wP.js +6 -0
  783. vibe_surf/backend/frontend/assets/hop-BCUHAdeR.js +6 -0
  784. vibe_surf/backend/frontend/assets/hop-off-B5f9Fr80.js +6 -0
  785. vibe_surf/backend/frontend/assets/hospital-Dk0tqXu9.js +6 -0
  786. vibe_surf/backend/frontend/assets/hotel-CXl-yW7B.js +6 -0
  787. vibe_surf/backend/frontend/assets/hourglass-DSRXQwTc.js +6 -0
  788. vibe_surf/backend/frontend/assets/house-Bhp2WF4v.js +6 -0
  789. vibe_surf/backend/frontend/assets/house-plug-DXm5j2Xq.js +6 -0
  790. vibe_surf/backend/frontend/assets/house-plus-KMp_x4hA.js +6 -0
  791. vibe_surf/backend/frontend/assets/house-wifi-Ccrar5-8.js +6 -0
  792. vibe_surf/backend/frontend/assets/ice-cream-bowl-j3qet3-o.js +6 -0
  793. vibe_surf/backend/frontend/assets/ice-cream-cone-XtpMBOSu.js +6 -0
  794. vibe_surf/backend/frontend/assets/id-card-BqzQOrR_.js +6 -0
  795. vibe_surf/backend/frontend/assets/image-B3lEwdvu.js +6 -0
  796. vibe_surf/backend/frontend/assets/image-down-sVdzbwfm.js +6 -0
  797. vibe_surf/backend/frontend/assets/image-minus-BdddBiyu.js +6 -0
  798. vibe_surf/backend/frontend/assets/image-off-CCZ9kVWH.js +6 -0
  799. vibe_surf/backend/frontend/assets/image-play-LNuKchCO.js +6 -0
  800. vibe_surf/backend/frontend/assets/image-plus-B4GTKJ6Z.js +6 -0
  801. vibe_surf/backend/frontend/assets/image-up-BfxmsdpY.js +6 -0
  802. vibe_surf/backend/frontend/assets/image-upscale-CexWZ50d.js +6 -0
  803. vibe_surf/backend/frontend/assets/images-C8Wp1eOg.js +6 -0
  804. vibe_surf/backend/frontend/assets/import-ec27SWYy.js +6 -0
  805. vibe_surf/backend/frontend/assets/inbox-YvwvpFKi.js +6 -0
  806. vibe_surf/backend/frontend/assets/indent-decrease-Dp0BVsoQ.js +6 -0
  807. vibe_surf/backend/frontend/assets/indent-increase-D3BuYj2n.js +6 -0
  808. vibe_surf/backend/frontend/assets/index-2CcQW4OZ.js +13 -0
  809. vibe_surf/backend/frontend/assets/index-4vq5awkV.js +1 -0
  810. vibe_surf/backend/frontend/assets/index-5ZZlgfo-.js +1 -0
  811. vibe_surf/backend/frontend/assets/index-6dxAUV6Y.js +1 -0
  812. vibe_surf/backend/frontend/assets/index-AzcZQWVx.js +2723 -0
  813. vibe_surf/backend/frontend/assets/index-B-IDFsd0.js +1 -0
  814. vibe_surf/backend/frontend/assets/index-B-ohDVDe.js +1 -0
  815. vibe_surf/backend/frontend/assets/index-B1Q4y1qa.js +1 -0
  816. vibe_surf/backend/frontend/assets/index-B1SY6fah.js +1 -0
  817. vibe_surf/backend/frontend/assets/index-B2ljcLYu.js +1 -0
  818. vibe_surf/backend/frontend/assets/index-B4-H1yfm.js +108 -0
  819. vibe_surf/backend/frontend/assets/index-B6MKztQU.js +1 -0
  820. vibe_surf/backend/frontend/assets/index-B7i2Q-3O.js +1 -0
  821. vibe_surf/backend/frontend/assets/index-B9Wx-Ii0.js +1 -0
  822. vibe_surf/backend/frontend/assets/index-BFzpTaXY.js +1 -0
  823. vibe_surf/backend/frontend/assets/index-BIBNbmyC.js +1 -0
  824. vibe_surf/backend/frontend/assets/index-BL_hoToU.js +1 -0
  825. vibe_surf/backend/frontend/assets/index-BOeI-zQ9.js +1 -0
  826. vibe_surf/backend/frontend/assets/index-BPEpFAuc.js +1 -0
  827. vibe_surf/backend/frontend/assets/index-BQ1eB4fC.js +1 -0
  828. vibe_surf/backend/frontend/assets/index-BQ2H2d3f.js +1 -0
  829. vibe_surf/backend/frontend/assets/index-BR-8IPV4.js +205 -0
  830. vibe_surf/backend/frontend/assets/index-BV8ArFsA.js +1 -0
  831. vibe_surf/backend/frontend/assets/index-BWwASCq5.js +1 -0
  832. vibe_surf/backend/frontend/assets/index-BWwglY3I.js +1 -0
  833. vibe_surf/backend/frontend/assets/index-B_Qz_foX.js +1 -0
  834. vibe_surf/backend/frontend/assets/index-BaoW7GZH.js +1 -0
  835. vibe_surf/backend/frontend/assets/index-BcrHz-y8.js +1 -0
  836. vibe_surf/backend/frontend/assets/index-BdSzkc1f.js +20 -0
  837. vibe_surf/backend/frontend/assets/index-BeLkvqxv.js +1 -0
  838. vibe_surf/backend/frontend/assets/index-Beq_etUM.js +1 -0
  839. vibe_surf/backend/frontend/assets/index-BgzQso9y.js +1 -0
  840. vibe_surf/backend/frontend/assets/index-BiNrEY13.js +1 -0
  841. vibe_surf/backend/frontend/assets/index-Bja3ZEZo.js +1 -0
  842. vibe_surf/backend/frontend/assets/index-BmcD7XCM.js +1 -0
  843. vibe_surf/backend/frontend/assets/index-BmnwJzsA.js +1 -0
  844. vibe_surf/backend/frontend/assets/index-BssAenIo.js +1 -0
  845. vibe_surf/backend/frontend/assets/index-BvEZ1ywS.js +1 -0
  846. vibe_surf/backend/frontend/assets/index-BwO1owi8.js +1 -0
  847. vibe_surf/backend/frontend/assets/index-BwXsJbuu.js +21 -0
  848. vibe_surf/backend/frontend/assets/index-BwlG2DdK.js +1 -0
  849. vibe_surf/backend/frontend/assets/index-BzjC6B6I.js +1 -0
  850. vibe_surf/backend/frontend/assets/index-C0BOag_5.js +1 -0
  851. vibe_surf/backend/frontend/assets/index-C0EsaEHC.js +1 -0
  852. vibe_surf/backend/frontend/assets/index-C0IGIaTE.js +1 -0
  853. vibe_surf/backend/frontend/assets/index-C0IdY_9F.js +1 -0
  854. vibe_surf/backend/frontend/assets/index-C1DABLwl.js +1 -0
  855. vibe_surf/backend/frontend/assets/index-C1JE4AZB.js +1 -0
  856. vibe_surf/backend/frontend/assets/index-C1Rkl2Ur.js +1 -0
  857. vibe_surf/backend/frontend/assets/index-C2YWu5t8.js +1 -0
  858. vibe_surf/backend/frontend/assets/index-C2_4AcrM.js +1 -0
  859. vibe_surf/backend/frontend/assets/index-C48IE5LT.js +1 -0
  860. vibe_surf/backend/frontend/assets/index-C4JqQnzd.js +1 -0
  861. vibe_surf/backend/frontend/assets/index-C5QqjjEO.js +1 -0
  862. vibe_surf/backend/frontend/assets/index-C6ZyrgxW.js +1 -0
  863. vibe_surf/backend/frontend/assets/index-C9n9R8Ob.js +1 -0
  864. vibe_surf/backend/frontend/assets/index-CATPt8gz.js +1 -0
  865. vibe_surf/backend/frontend/assets/index-CAc6KlCl.js +1 -0
  866. vibe_surf/backend/frontend/assets/index-CAeE91z_.js +1 -0
  867. vibe_surf/backend/frontend/assets/index-CBLrD5S8.js +1 -0
  868. vibe_surf/backend/frontend/assets/index-CEx7_efn.js +1 -0
  869. vibe_surf/backend/frontend/assets/index-CGNwvjd6.js +1 -0
  870. vibe_surf/backend/frontend/assets/index-CJIkyYuu.js +1 -0
  871. vibe_surf/backend/frontend/assets/index-CL8YNknR.js +1 -0
  872. vibe_surf/backend/frontend/assets/index-CQ4c4zmh.js +1 -0
  873. vibe_surf/backend/frontend/assets/index-CSKpbeRU.js +1 -0
  874. vibe_surf/backend/frontend/assets/index-CTJUto70.js +1 -0
  875. vibe_surf/backend/frontend/assets/index-CUm8t_3-.js +1 -0
  876. vibe_surf/backend/frontend/assets/index-CWaG8YQf.js +1 -0
  877. vibe_surf/backend/frontend/assets/index-CWqCL2_S.js +1 -0
  878. vibe_surf/backend/frontend/assets/index-CZKjLvxC.js +1 -0
  879. vibe_surf/backend/frontend/assets/index-C_a_gjJ3.js +7382 -0
  880. vibe_surf/backend/frontend/assets/index-C_gjztJA.js +1 -0
  881. vibe_surf/backend/frontend/assets/index-Cd394DZ3.js +1 -0
  882. vibe_surf/backend/frontend/assets/index-Ch_ENQTO.js +1 -0
  883. vibe_surf/backend/frontend/assets/index-CjDauRtw.js +1 -0
  884. vibe_surf/backend/frontend/assets/index-Cjsyudia.js +1 -0
  885. vibe_surf/backend/frontend/assets/index-Ck0Rk7OE.js +1 -0
  886. vibe_surf/backend/frontend/assets/index-Ct1jT_zG.js +1 -0
  887. vibe_surf/backend/frontend/assets/index-CtZOHuJR.js +1 -0
  888. vibe_surf/backend/frontend/assets/index-CwylYZIy.js +1 -0
  889. vibe_surf/backend/frontend/assets/index-CxGAIJCD.js +1 -0
  890. vibe_surf/backend/frontend/assets/index-D-6VXnmQ.js +1 -0
  891. vibe_surf/backend/frontend/assets/index-D-_pq5D8.js +1 -0
  892. vibe_surf/backend/frontend/assets/index-D-oTsuqV.js +1 -0
  893. vibe_surf/backend/frontend/assets/index-D8iHrvl3.js +1 -0
  894. vibe_surf/backend/frontend/assets/index-DDYB0tod.js +1 -0
  895. vibe_surf/backend/frontend/assets/index-DDtHdtyM.js +1 -0
  896. vibe_surf/backend/frontend/assets/index-DH3R0iod.js +1 -0
  897. vibe_surf/backend/frontend/assets/index-DJAmqieX.js +1 -0
  898. vibe_surf/backend/frontend/assets/index-DJYhOcBD.js +1 -0
  899. vibe_surf/backend/frontend/assets/index-DQKxDe4Q.js +1 -0
  900. vibe_surf/backend/frontend/assets/index-DS9glxiF.js +1 -0
  901. vibe_surf/backend/frontend/assets/index-DUjF6qus.js +2 -0
  902. vibe_surf/backend/frontend/assets/index-DXYmUzC_.css +1 -0
  903. vibe_surf/backend/frontend/assets/index-D_wRbh5r.js +1 -0
  904. vibe_surf/backend/frontend/assets/index-Db4BfmcT.js +1 -0
  905. vibe_surf/backend/frontend/assets/index-DfZGZYcK.js +1 -0
  906. vibe_surf/backend/frontend/assets/index-DlDGYPf2.js +1 -0
  907. vibe_surf/backend/frontend/assets/index-DlFy5Gok.js +1 -0
  908. vibe_surf/backend/frontend/assets/index-DmVpDlko.js +1 -0
  909. vibe_surf/backend/frontend/assets/index-Dpc9wHta.js +1 -0
  910. vibe_surf/backend/frontend/assets/index-DvcAIETO.js +1 -0
  911. vibe_surf/backend/frontend/assets/index-Dwi-X1Od.js +1 -0
  912. vibe_surf/backend/frontend/assets/index-FMPFv3Wf.js +1 -0
  913. vibe_surf/backend/frontend/assets/index-H3Uskc2o.js +1 -0
  914. vibe_surf/backend/frontend/assets/index-JWfrTs_0.js +1 -0
  915. vibe_surf/backend/frontend/assets/index-LX3KOMfj.js +1 -0
  916. vibe_surf/backend/frontend/assets/index-LXWgTVf4.js +1 -0
  917. vibe_surf/backend/frontend/assets/index-WJ6PviAq.js +1 -0
  918. vibe_surf/backend/frontend/assets/index-WrqFIXAC.js +1 -0
  919. vibe_surf/backend/frontend/assets/index-Yoj1a8xs.js +1 -0
  920. vibe_surf/backend/frontend/assets/index-YxTPhodS.js +1 -0
  921. vibe_surf/backend/frontend/assets/index-_8LB3oNa.js +1 -0
  922. vibe_surf/backend/frontend/assets/index-bNhROe-x.js +1 -0
  923. vibe_surf/backend/frontend/assets/index-cQAtXO5d.js +1 -0
  924. vibe_surf/backend/frontend/assets/index-hIdlDvEv.js +1 -0
  925. vibe_surf/backend/frontend/assets/index-hxJwU1-s.js +1 -0
  926. vibe_surf/backend/frontend/assets/index-iA_X3O5r.js +1 -0
  927. vibe_surf/backend/frontend/assets/index-iW93REva.js +1 -0
  928. vibe_surf/backend/frontend/assets/index-k2RdCBHb.js +1 -0
  929. vibe_surf/backend/frontend/assets/index-kJKg9EzG.js +1 -0
  930. vibe_surf/backend/frontend/assets/index-mX6ATl2n.js +1 -0
  931. vibe_surf/backend/frontend/assets/index-muCxPdjC.js +1 -0
  932. vibe_surf/backend/frontend/assets/index-nd1f74Wi.js +1 -0
  933. vibe_surf/backend/frontend/assets/index-qGbEX4n3.js +1 -0
  934. vibe_surf/backend/frontend/assets/index-qOd-CLaR.js +1 -0
  935. vibe_surf/backend/frontend/assets/index-sguRseYw.js +1 -0
  936. vibe_surf/backend/frontend/assets/index-vd7ILFrg.js +1 -0
  937. vibe_surf/backend/frontend/assets/index-we6mCAhv.js +1 -0
  938. vibe_surf/backend/frontend/assets/index-x0VA7yzX.js +1 -0
  939. vibe_surf/backend/frontend/assets/index-yCVeNkNd.js +1 -0
  940. vibe_surf/backend/frontend/assets/indian-rupee-ClaZI0Dh.js +6 -0
  941. vibe_surf/backend/frontend/assets/infinity-LKjcIaZa.js +6 -0
  942. vibe_surf/backend/frontend/assets/info-DFBdB7_c.js +6 -0
  943. vibe_surf/backend/frontend/assets/inspection-panel-DGzE6245.js +6 -0
  944. vibe_surf/backend/frontend/assets/instagram-CJj5AWOV.js +6 -0
  945. vibe_surf/backend/frontend/assets/italic-CKFB3the.js +6 -0
  946. vibe_surf/backend/frontend/assets/iteration-ccw-YnfylsKm.js +6 -0
  947. vibe_surf/backend/frontend/assets/iteration-cw-DTHRwCcy.js +6 -0
  948. vibe_surf/backend/frontend/assets/japanese-yen-BG_Inyh_.js +6 -0
  949. vibe_surf/backend/frontend/assets/joystick-bJVSvZlL.js +6 -0
  950. vibe_surf/backend/frontend/assets/kanban-KP-K8pC9.js +6 -0
  951. vibe_surf/backend/frontend/assets/key-CNaiqe5q.js +6 -0
  952. vibe_surf/backend/frontend/assets/key-round-RTYFDTCa.js +6 -0
  953. vibe_surf/backend/frontend/assets/key-square-C7EKR-zE.js +6 -0
  954. vibe_surf/backend/frontend/assets/keyboard-DaM0Dl19.js +6 -0
  955. vibe_surf/backend/frontend/assets/keyboard-music-CzJZiHzS.js +6 -0
  956. vibe_surf/backend/frontend/assets/keyboard-off-C9Jl7GZs.js +6 -0
  957. vibe_surf/backend/frontend/assets/lamp-DK_3DJnO.js +6 -0
  958. vibe_surf/backend/frontend/assets/lamp-ceiling-B8sGjZ8c.js +6 -0
  959. vibe_surf/backend/frontend/assets/lamp-desk-CxWpiNas.js +6 -0
  960. vibe_surf/backend/frontend/assets/lamp-floor-EUFzRKf7.js +6 -0
  961. vibe_surf/backend/frontend/assets/lamp-wall-down-BV84JTWM.js +6 -0
  962. vibe_surf/backend/frontend/assets/lamp-wall-up-BqpaYZN9.js +6 -0
  963. vibe_surf/backend/frontend/assets/land-plot-Dly_Debw.js +6 -0
  964. vibe_surf/backend/frontend/assets/landmark-W6MewilS.js +6 -0
  965. vibe_surf/backend/frontend/assets/languages-BQghN4Gu.js +6 -0
  966. vibe_surf/backend/frontend/assets/laptop-BysYcdO1.js +6 -0
  967. vibe_surf/backend/frontend/assets/laptop-minimal-CUViKl_u.js +6 -0
  968. vibe_surf/backend/frontend/assets/laptop-minimal-check-BZNY8l54.js +6 -0
  969. vibe_surf/backend/frontend/assets/lasso-CBTyEbGH.js +6 -0
  970. vibe_surf/backend/frontend/assets/lasso-select-D9j71vtb.js +6 -0
  971. vibe_surf/backend/frontend/assets/laugh-fkxJEAC6.js +6 -0
  972. vibe_surf/backend/frontend/assets/layers-2-B3mnroGJ.js +6 -0
  973. vibe_surf/backend/frontend/assets/layers-CLO8Qj7V.js +6 -0
  974. vibe_surf/backend/frontend/assets/layout-dashboard-BCgC4-j3.js +6 -0
  975. vibe_surf/backend/frontend/assets/layout-grid-DQlh6Dv5.js +6 -0
  976. vibe_surf/backend/frontend/assets/layout-list-BK2Y57B-.js +6 -0
  977. vibe_surf/backend/frontend/assets/layout-panel-left-BzdjKizu.js +6 -0
  978. vibe_surf/backend/frontend/assets/layout-panel-top-CmMnqmez.js +6 -0
  979. vibe_surf/backend/frontend/assets/layout-template-DkuzhO5B.js +6 -0
  980. vibe_surf/backend/frontend/assets/lazyIconImports-Cbxc-ykm.js +2 -0
  981. vibe_surf/backend/frontend/assets/leaf-D1Z4WxA8.js +6 -0
  982. vibe_surf/backend/frontend/assets/leafy-green-C7IHTNVi.js +6 -0
  983. vibe_surf/backend/frontend/assets/lectern-BpswhiFV.js +6 -0
  984. vibe_surf/backend/frontend/assets/letter-text-B_mZgzJ7.js +6 -0
  985. vibe_surf/backend/frontend/assets/library-BEQ0EBja.js +6 -0
  986. vibe_surf/backend/frontend/assets/library-big-C32jLDwT.js +6 -0
  987. vibe_surf/backend/frontend/assets/life-buoy-AWdXr4CQ.js +6 -0
  988. vibe_surf/backend/frontend/assets/ligature-DRsGqV7j.js +6 -0
  989. vibe_surf/backend/frontend/assets/lightbulb-D3KZbCQp.js +6 -0
  990. vibe_surf/backend/frontend/assets/lightbulb-off-iSDmy8d6.js +6 -0
  991. vibe_surf/backend/frontend/assets/link-2-CCZYGxDI.js +6 -0
  992. vibe_surf/backend/frontend/assets/link-2-off-BWpEKUCS.js +6 -0
  993. vibe_surf/backend/frontend/assets/link-Diw-YZ8t.js +6 -0
  994. vibe_surf/backend/frontend/assets/linkedin-CExn9EK5.js +6 -0
  995. vibe_surf/backend/frontend/assets/list-CB9zDbEv.js +6 -0
  996. vibe_surf/backend/frontend/assets/list-check-CCdijvLD.js +6 -0
  997. vibe_surf/backend/frontend/assets/list-checks-B1EQ8oeV.js +6 -0
  998. vibe_surf/backend/frontend/assets/list-collapse-B_Nyhn3U.js +6 -0
  999. vibe_surf/backend/frontend/assets/list-end-BRGFPR4T.js +6 -0
  1000. vibe_surf/backend/frontend/assets/list-filter-DR4JqPVX.js +6 -0
  1001. vibe_surf/backend/frontend/assets/list-filter-plus-Q7j2JYzP.js +6 -0
  1002. vibe_surf/backend/frontend/assets/list-minus-DrLtfmEG.js +6 -0
  1003. vibe_surf/backend/frontend/assets/list-music-C6MOQHoL.js +6 -0
  1004. vibe_surf/backend/frontend/assets/list-ordered-Db8L0lqU.js +6 -0
  1005. vibe_surf/backend/frontend/assets/list-plus-C1dade1Z.js +6 -0
  1006. vibe_surf/backend/frontend/assets/list-restart-CyRkF6Xo.js +6 -0
  1007. vibe_surf/backend/frontend/assets/list-start-CAn16QHF.js +6 -0
  1008. vibe_surf/backend/frontend/assets/list-todo-giJ3EaBY.js +6 -0
  1009. vibe_surf/backend/frontend/assets/list-tree-ZTTp4tz8.js +6 -0
  1010. vibe_surf/backend/frontend/assets/list-video-SNqnTTmu.js +6 -0
  1011. vibe_surf/backend/frontend/assets/list-x-XeDairuR.js +6 -0
  1012. vibe_surf/backend/frontend/assets/loader-RYX0GikH.js +6 -0
  1013. vibe_surf/backend/frontend/assets/loader-circle-CjMVhyrE.js +6 -0
  1014. vibe_surf/backend/frontend/assets/loader-pinwheel-Dv08mzUX.js +6 -0
  1015. vibe_surf/backend/frontend/assets/locate-DcqAXVyu.js +6 -0
  1016. vibe_surf/backend/frontend/assets/locate-fixed-BgaqK3FM.js +6 -0
  1017. vibe_surf/backend/frontend/assets/locate-off-1UN8A6fK.js +6 -0
  1018. vibe_surf/backend/frontend/assets/location-edit-DFbMZW6i.js +6 -0
  1019. vibe_surf/backend/frontend/assets/lock-DWN4LH3Q.js +6 -0
  1020. vibe_surf/backend/frontend/assets/lock-keyhole-aeS26SmF.js +6 -0
  1021. vibe_surf/backend/frontend/assets/lock-keyhole-open-CoXzZLpr.js +6 -0
  1022. vibe_surf/backend/frontend/assets/lock-open-CBPubokC.js +6 -0
  1023. vibe_surf/backend/frontend/assets/log-in-BW8pmSIu.js +6 -0
  1024. vibe_surf/backend/frontend/assets/log-out-D-d0DczA.js +6 -0
  1025. vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
  1026. vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
  1027. vibe_surf/backend/frontend/assets/logs-AXuVwIE_.js +6 -0
  1028. vibe_surf/backend/frontend/assets/lollipop-CxugcHkj.js +6 -0
  1029. vibe_surf/backend/frontend/assets/luggage-CFtS088O.js +6 -0
  1030. vibe_surf/backend/frontend/assets/magnet-BpIqKX0D.js +6 -0
  1031. vibe_surf/backend/frontend/assets/mail-1Br8NAMK.js +6 -0
  1032. vibe_surf/backend/frontend/assets/mail-check-DFwD0fvI.js +6 -0
  1033. vibe_surf/backend/frontend/assets/mail-minus-B_KovqmT.js +6 -0
  1034. vibe_surf/backend/frontend/assets/mail-open-VEmMVybi.js +6 -0
  1035. vibe_surf/backend/frontend/assets/mail-plus-D-1Wacj7.js +6 -0
  1036. vibe_surf/backend/frontend/assets/mail-question-CJK96wre.js +6 -0
  1037. vibe_surf/backend/frontend/assets/mail-search-Du6F72Wj.js +6 -0
  1038. vibe_surf/backend/frontend/assets/mail-warning-BI87_kvG.js +6 -0
  1039. vibe_surf/backend/frontend/assets/mail-x-DU415vbZ.js +6 -0
  1040. vibe_surf/backend/frontend/assets/mailbox-CMHDAMVZ.js +6 -0
  1041. vibe_surf/backend/frontend/assets/mails-CUDj41Cn.js +6 -0
  1042. vibe_surf/backend/frontend/assets/map-D2I0g3OZ.js +6 -0
  1043. vibe_surf/backend/frontend/assets/map-pin-CiM6iB2r.js +6 -0
  1044. vibe_surf/backend/frontend/assets/map-pin-check-BQWCC6Uv.js +6 -0
  1045. vibe_surf/backend/frontend/assets/map-pin-check-inside-CVhhgPHY.js +6 -0
  1046. vibe_surf/backend/frontend/assets/map-pin-house-CXbXX8w-.js +6 -0
  1047. vibe_surf/backend/frontend/assets/map-pin-minus-D0dRHvgd.js +6 -0
  1048. vibe_surf/backend/frontend/assets/map-pin-minus-inside-DGpPZYAi.js +6 -0
  1049. vibe_surf/backend/frontend/assets/map-pin-off-EbFPnlZq.js +6 -0
  1050. vibe_surf/backend/frontend/assets/map-pin-plus-BLD0VcG5.js +6 -0
  1051. vibe_surf/backend/frontend/assets/map-pin-plus-inside-CapcP3Yk.js +6 -0
  1052. vibe_surf/backend/frontend/assets/map-pin-x-DrNWALEC.js +6 -0
  1053. vibe_surf/backend/frontend/assets/map-pin-x-inside-9DqM8z-J.js +6 -0
  1054. vibe_surf/backend/frontend/assets/map-pinned-DHMQpBhr.js +6 -0
  1055. vibe_surf/backend/frontend/assets/map-plus-CQm0KS9c.js +6 -0
  1056. vibe_surf/backend/frontend/assets/mars-CcweinsF.js +6 -0
  1057. vibe_surf/backend/frontend/assets/mars-stroke-OWTfhzV5.js +6 -0
  1058. vibe_surf/backend/frontend/assets/martini-DGORgxbx.js +6 -0
  1059. vibe_surf/backend/frontend/assets/maximize-2-CN4UuSQb.js +6 -0
  1060. vibe_surf/backend/frontend/assets/maximize-DOYuzVqB.js +6 -0
  1061. vibe_surf/backend/frontend/assets/medal-DZT2ADyJ.js +6 -0
  1062. vibe_surf/backend/frontend/assets/megaphone-DN4B6I5c.js +6 -0
  1063. vibe_surf/backend/frontend/assets/megaphone-off-DRAddUqF.js +6 -0
  1064. vibe_surf/backend/frontend/assets/meh-CTX3Y793.js +6 -0
  1065. vibe_surf/backend/frontend/assets/memory-stick-CSG08PuA.js +6 -0
  1066. vibe_surf/backend/frontend/assets/menu-BUvQ8bhy.js +6 -0
  1067. vibe_surf/backend/frontend/assets/merge-xkPPWyBJ.js +6 -0
  1068. vibe_surf/backend/frontend/assets/message-circle-BSqs77ZY.js +6 -0
  1069. vibe_surf/backend/frontend/assets/message-circle-code-EW46-KUX.js +6 -0
  1070. vibe_surf/backend/frontend/assets/message-circle-dashed-BOxWD8kE.js +6 -0
  1071. vibe_surf/backend/frontend/assets/message-circle-heart-CBhiUXeV.js +6 -0
  1072. vibe_surf/backend/frontend/assets/message-circle-more-DqfUhx6W.js +6 -0
  1073. vibe_surf/backend/frontend/assets/message-circle-off-DrsP7VV_.js +6 -0
  1074. vibe_surf/backend/frontend/assets/message-circle-plus-IixbN-s-.js +6 -0
  1075. vibe_surf/backend/frontend/assets/message-circle-question-DsMgtwwS.js +6 -0
  1076. vibe_surf/backend/frontend/assets/message-circle-reply-D_Eog9Yc.js +6 -0
  1077. vibe_surf/backend/frontend/assets/message-circle-warning-D656cL7l.js +6 -0
  1078. vibe_surf/backend/frontend/assets/message-circle-x-CXWR4BBb.js +6 -0
  1079. vibe_surf/backend/frontend/assets/message-square-DKWryKVG.js +6 -0
  1080. vibe_surf/backend/frontend/assets/message-square-code-0ANFU-JW.js +6 -0
  1081. vibe_surf/backend/frontend/assets/message-square-dashed-DaZwp2x1.js +6 -0
  1082. vibe_surf/backend/frontend/assets/message-square-diff-DpJLi_UX.js +6 -0
  1083. vibe_surf/backend/frontend/assets/message-square-dot-OcgwyxZC.js +6 -0
  1084. vibe_surf/backend/frontend/assets/message-square-heart-CKfZOSw8.js +6 -0
  1085. vibe_surf/backend/frontend/assets/message-square-lock-BnNy_yw5.js +6 -0
  1086. vibe_surf/backend/frontend/assets/message-square-more-D2WGFzms.js +6 -0
  1087. vibe_surf/backend/frontend/assets/message-square-off-DV5974j6.js +6 -0
  1088. vibe_surf/backend/frontend/assets/message-square-plus-7icA5g-P.js +6 -0
  1089. vibe_surf/backend/frontend/assets/message-square-quote-DdAvA-a_.js +6 -0
  1090. vibe_surf/backend/frontend/assets/message-square-reply-Cg9Dlls7.js +6 -0
  1091. vibe_surf/backend/frontend/assets/message-square-share-BptAhOEV.js +6 -0
  1092. vibe_surf/backend/frontend/assets/message-square-text-Cu-Ycwsi.js +6 -0
  1093. vibe_surf/backend/frontend/assets/message-square-warning-DxIzJ5bt.js +6 -0
  1094. vibe_surf/backend/frontend/assets/message-square-x-BF9akIp2.js +6 -0
  1095. vibe_surf/backend/frontend/assets/messages-square-AjrRNZXQ.js +6 -0
  1096. vibe_surf/backend/frontend/assets/mic-BXU1SRXR.js +6 -0
  1097. vibe_surf/backend/frontend/assets/mic-off-BUQ1-6-l.js +6 -0
  1098. vibe_surf/backend/frontend/assets/mic-vocal-CG4Yw8We.js +6 -0
  1099. vibe_surf/backend/frontend/assets/microchip-CodKB7m1.js +6 -0
  1100. vibe_surf/backend/frontend/assets/microscope-BY57GHi1.js +6 -0
  1101. vibe_surf/backend/frontend/assets/microwave-KuJ1X2CX.js +6 -0
  1102. vibe_surf/backend/frontend/assets/milestone-D_ToDu31.js +6 -0
  1103. vibe_surf/backend/frontend/assets/milk-C4Nq829F.js +6 -0
  1104. vibe_surf/backend/frontend/assets/milk-off-BPCtdIks.js +6 -0
  1105. vibe_surf/backend/frontend/assets/minimize-2-DeAs1S78.js +6 -0
  1106. vibe_surf/backend/frontend/assets/minimize-DKOGyuzf.js +6 -0
  1107. vibe_surf/backend/frontend/assets/monitor-Cjm4ELo4.js +6 -0
  1108. vibe_surf/backend/frontend/assets/monitor-check-CrckmDk_.js +6 -0
  1109. vibe_surf/backend/frontend/assets/monitor-cog-DIPYXk5z.js +6 -0
  1110. vibe_surf/backend/frontend/assets/monitor-dot-Cl_ZGBvp.js +6 -0
  1111. vibe_surf/backend/frontend/assets/monitor-down-DCSynbhm.js +6 -0
  1112. vibe_surf/backend/frontend/assets/monitor-off-Bxqkes47.js +6 -0
  1113. vibe_surf/backend/frontend/assets/monitor-pause-B2ogwlXq.js +6 -0
  1114. vibe_surf/backend/frontend/assets/monitor-play-w2CTvWQx.js +6 -0
  1115. vibe_surf/backend/frontend/assets/monitor-smartphone-DYQb-VQa.js +6 -0
  1116. vibe_surf/backend/frontend/assets/monitor-speaker-CruyWIOw.js +6 -0
  1117. vibe_surf/backend/frontend/assets/monitor-stop-D2cot7wP.js +6 -0
  1118. vibe_surf/backend/frontend/assets/monitor-up-Bo4VFUGK.js +6 -0
  1119. vibe_surf/backend/frontend/assets/monitor-x-yhFSw0Zo.js +6 -0
  1120. vibe_surf/backend/frontend/assets/moon-CZFTmFVS.js +6 -0
  1121. vibe_surf/backend/frontend/assets/moon-star-X8Pb6SAO.js +6 -0
  1122. vibe_surf/backend/frontend/assets/mountain-_tKRhauQ.js +6 -0
  1123. vibe_surf/backend/frontend/assets/mountain-snow-COLjUpoc.js +6 -0
  1124. vibe_surf/backend/frontend/assets/mouse-C62B_4i7.js +6 -0
  1125. vibe_surf/backend/frontend/assets/mouse-off-NO65wsqy.js +6 -0
  1126. vibe_surf/backend/frontend/assets/mouse-pointer-2-vvokJ-v-.js +6 -0
  1127. vibe_surf/backend/frontend/assets/mouse-pointer-IHoLB1Ii.js +6 -0
  1128. vibe_surf/backend/frontend/assets/mouse-pointer-ban-BGxlXS_f.js +6 -0
  1129. vibe_surf/backend/frontend/assets/mouse-pointer-click-C7N7cKxT.js +6 -0
  1130. vibe_surf/backend/frontend/assets/move-3d-CQO0qR5b.js +6 -0
  1131. vibe_surf/backend/frontend/assets/move-Bp3oIgRK.js +6 -0
  1132. vibe_surf/backend/frontend/assets/move-diagonal-2-CQ3Gqa4B.js +6 -0
  1133. vibe_surf/backend/frontend/assets/move-diagonal-BkUx0iYA.js +6 -0
  1134. vibe_surf/backend/frontend/assets/move-down-B4dxMy_p.js +6 -0
  1135. vibe_surf/backend/frontend/assets/move-down-left-NxvLep64.js +6 -0
  1136. vibe_surf/backend/frontend/assets/move-down-right-CxcsF1yI.js +6 -0
  1137. vibe_surf/backend/frontend/assets/move-horizontal-or6vuyOq.js +6 -0
  1138. vibe_surf/backend/frontend/assets/move-left-Tcae9tGG.js +6 -0
  1139. vibe_surf/backend/frontend/assets/move-right-jY3F431H.js +6 -0
  1140. vibe_surf/backend/frontend/assets/move-up-Dk8sPbRD.js +6 -0
  1141. vibe_surf/backend/frontend/assets/move-up-left-CD7NRvhF.js +6 -0
  1142. vibe_surf/backend/frontend/assets/move-up-right-BAOhHbBw.js +6 -0
  1143. vibe_surf/backend/frontend/assets/move-vertical-BxWj9bDO.js +6 -0
  1144. vibe_surf/backend/frontend/assets/music-2-DQL5lOH_.js +6 -0
  1145. vibe_surf/backend/frontend/assets/music-3-wkxjpooD.js +6 -0
  1146. vibe_surf/backend/frontend/assets/music-4-CgUN2PUO.js +6 -0
  1147. vibe_surf/backend/frontend/assets/music-YxXwq9fN.js +6 -0
  1148. vibe_surf/backend/frontend/assets/navigation-2-Ba4Z-jSq.js +6 -0
  1149. vibe_surf/backend/frontend/assets/navigation-2-off-C_LfeWvW.js +6 -0
  1150. vibe_surf/backend/frontend/assets/navigation-BEChOEsi.js +6 -0
  1151. vibe_surf/backend/frontend/assets/navigation-off-BehyOyE3.js +6 -0
  1152. vibe_surf/backend/frontend/assets/network-CwJLOq3T.js +6 -0
  1153. vibe_surf/backend/frontend/assets/newspaper-ELrHeGRI.js +6 -0
  1154. vibe_surf/backend/frontend/assets/nfc-B_3XFb34.js +6 -0
  1155. vibe_surf/backend/frontend/assets/non-binary-BsgU9v43.js +6 -0
  1156. vibe_surf/backend/frontend/assets/notebook-j-nq3SkT.js +6 -0
  1157. vibe_surf/backend/frontend/assets/notebook-pen-D9-IPVfi.js +6 -0
  1158. vibe_surf/backend/frontend/assets/notebook-tabs-B8RN5vFZ.js +6 -0
  1159. vibe_surf/backend/frontend/assets/notebook-text-9VvE4wV2.js +6 -0
  1160. vibe_surf/backend/frontend/assets/notepad-text-CtRuOWM5.js +6 -0
  1161. vibe_surf/backend/frontend/assets/notepad-text-dashed-BKDJS1oq.js +6 -0
  1162. vibe_surf/backend/frontend/assets/nut-MLKrgO4r.js +6 -0
  1163. vibe_surf/backend/frontend/assets/nut-off-CX5f1ggv.js +6 -0
  1164. vibe_surf/backend/frontend/assets/octagon-Dm5tdLTK.js +6 -0
  1165. vibe_surf/backend/frontend/assets/octagon-alert-THvRb-wV.js +6 -0
  1166. vibe_surf/backend/frontend/assets/octagon-minus-BIN-9swI.js +6 -0
  1167. vibe_surf/backend/frontend/assets/octagon-pause-BvRAlpaV.js +6 -0
  1168. vibe_surf/backend/frontend/assets/octagon-x-DeRG_Ls0.js +6 -0
  1169. vibe_surf/backend/frontend/assets/omega-CVAxeKBK.js +6 -0
  1170. vibe_surf/backend/frontend/assets/option-14pftykg.js +6 -0
  1171. vibe_surf/backend/frontend/assets/orbit-CfewrZaI.js +6 -0
  1172. vibe_surf/backend/frontend/assets/origami-BT1VriUJ.js +6 -0
  1173. vibe_surf/backend/frontend/assets/package-2-D11kpXq5.js +6 -0
  1174. vibe_surf/backend/frontend/assets/package-BegS59es.js +6 -0
  1175. vibe_surf/backend/frontend/assets/package-check-DOLq4x6S.js +6 -0
  1176. vibe_surf/backend/frontend/assets/package-minus-BFgP752B.js +6 -0
  1177. vibe_surf/backend/frontend/assets/package-open-D2nk_ytU.js +6 -0
  1178. vibe_surf/backend/frontend/assets/package-plus-Va8EoLSt.js +6 -0
  1179. vibe_surf/backend/frontend/assets/package-search-cGv3F3Yi.js +6 -0
  1180. vibe_surf/backend/frontend/assets/package-x-BFCKCrAT.js +6 -0
  1181. vibe_surf/backend/frontend/assets/paint-bucket-C1nh-Go_.js +6 -0
  1182. vibe_surf/backend/frontend/assets/paint-roller-C9vy4fuD.js +6 -0
  1183. vibe_surf/backend/frontend/assets/paintbrush-Bo4L8Hqc.js +6 -0
  1184. vibe_surf/backend/frontend/assets/paintbrush-vertical-DqUyy2UU.js +6 -0
  1185. vibe_surf/backend/frontend/assets/palette-DddGrkXJ.js +6 -0
  1186. vibe_surf/backend/frontend/assets/panel-bottom-DPSx8I79.js +6 -0
  1187. vibe_surf/backend/frontend/assets/panel-bottom-close-D0SBNVCx.js +6 -0
  1188. vibe_surf/backend/frontend/assets/panel-bottom-dashed-CR6jKyB5.js +6 -0
  1189. vibe_surf/backend/frontend/assets/panel-bottom-open-BA8uHJ1f.js +6 -0
  1190. vibe_surf/backend/frontend/assets/panel-left-close-HWzVGhEN.js +6 -0
  1191. vibe_surf/backend/frontend/assets/panel-left-dashed-C8CvEMus.js +6 -0
  1192. vibe_surf/backend/frontend/assets/panel-left-open-DZtgeJky.js +6 -0
  1193. vibe_surf/backend/frontend/assets/panel-right-BIGpcNCD.js +6 -0
  1194. vibe_surf/backend/frontend/assets/panel-right-close-D6I6nB-8.js +6 -0
  1195. vibe_surf/backend/frontend/assets/panel-right-dashed-Dt-tZyfJ.js +6 -0
  1196. vibe_surf/backend/frontend/assets/panel-right-open-Cso_cmr4.js +6 -0
  1197. vibe_surf/backend/frontend/assets/panel-top-DxQozLLO.js +6 -0
  1198. vibe_surf/backend/frontend/assets/panel-top-close-21p_Iy4Q.js +6 -0
  1199. vibe_surf/backend/frontend/assets/panel-top-dashed-BLLvCUcW.js +6 -0
  1200. vibe_surf/backend/frontend/assets/panel-top-open-DOpjqeXN.js +6 -0
  1201. vibe_surf/backend/frontend/assets/panels-left-bottom-Dgc_Zml-.js +6 -0
  1202. vibe_surf/backend/frontend/assets/panels-right-bottom-DBl33v5J.js +6 -0
  1203. vibe_surf/backend/frontend/assets/panels-top-left-Bh9Km2t_.js +6 -0
  1204. vibe_surf/backend/frontend/assets/paperclip-DwNdWjNs.js +6 -0
  1205. vibe_surf/backend/frontend/assets/parentheses-Bv3x0v0d.js +6 -0
  1206. vibe_surf/backend/frontend/assets/parking-meter-CaAUYem8.js +6 -0
  1207. vibe_surf/backend/frontend/assets/party-popper-o676ndwa.js +6 -0
  1208. vibe_surf/backend/frontend/assets/pause-DofdcFyf.js +6 -0
  1209. vibe_surf/backend/frontend/assets/paw-print-CsCZTGwP.js +6 -0
  1210. vibe_surf/backend/frontend/assets/pc-case-ChHKP8Bs.js +6 -0
  1211. vibe_surf/backend/frontend/assets/pen-BJrA5W2j.js +6 -0
  1212. vibe_surf/backend/frontend/assets/pen-line-Cn_-SNuM.js +6 -0
  1213. vibe_surf/backend/frontend/assets/pen-off-vpS9creP.js +6 -0
  1214. vibe_surf/backend/frontend/assets/pen-tool-BHi1klDG.js +6 -0
  1215. vibe_surf/backend/frontend/assets/pencil-Wem_VEVg.js +6 -0
  1216. vibe_surf/backend/frontend/assets/pencil-line-CpG7egII.js +6 -0
  1217. vibe_surf/backend/frontend/assets/pencil-off-DNbfjOTs.js +6 -0
  1218. vibe_surf/backend/frontend/assets/pencil-ruler-BQdaeQqI.js +6 -0
  1219. vibe_surf/backend/frontend/assets/pentagon-BNe4mDhm.js +6 -0
  1220. vibe_surf/backend/frontend/assets/percent-CDhexNCT.js +6 -0
  1221. vibe_surf/backend/frontend/assets/person-standing-DxYpZiGV.js +6 -0
  1222. vibe_surf/backend/frontend/assets/philippine-peso-B7FAFSBd.js +6 -0
  1223. vibe_surf/backend/frontend/assets/phone-CTiWkAUx.js +6 -0
  1224. vibe_surf/backend/frontend/assets/phone-call-CWavZZ8W.js +6 -0
  1225. vibe_surf/backend/frontend/assets/phone-forwarded-CLaEebEE.js +6 -0
  1226. vibe_surf/backend/frontend/assets/phone-incoming-Cv2OCBfT.js +6 -0
  1227. vibe_surf/backend/frontend/assets/phone-missed-DNNjfxVz.js +6 -0
  1228. vibe_surf/backend/frontend/assets/phone-off-ClVQWi0g.js +6 -0
  1229. vibe_surf/backend/frontend/assets/phone-outgoing-CY2TxKXl.js +6 -0
  1230. vibe_surf/backend/frontend/assets/pi-DNqBWxfj.js +6 -0
  1231. vibe_surf/backend/frontend/assets/piano-MiPm47Ma.js +6 -0
  1232. vibe_surf/backend/frontend/assets/pickaxe-YqkOBnCJ.js +6 -0
  1233. vibe_surf/backend/frontend/assets/picture-in-picture-2-BIKggEXM.js +6 -0
  1234. vibe_surf/backend/frontend/assets/picture-in-picture-QAMxgJMO.js +6 -0
  1235. vibe_surf/backend/frontend/assets/piggy-bank-DVE6nzj5.js +6 -0
  1236. vibe_surf/backend/frontend/assets/pilcrow-CIhZWZVN.js +6 -0
  1237. vibe_surf/backend/frontend/assets/pilcrow-left-Ca9XTMpA.js +6 -0
  1238. vibe_surf/backend/frontend/assets/pilcrow-right-CLd68jMN.js +6 -0
  1239. vibe_surf/backend/frontend/assets/pill-CBiMEkPj.js +6 -0
  1240. vibe_surf/backend/frontend/assets/pill-bottle-CJ3pejac.js +6 -0
  1241. vibe_surf/backend/frontend/assets/pin-Oo2Sku7X.js +6 -0
  1242. vibe_surf/backend/frontend/assets/pin-off-DG48ZMV_.js +6 -0
  1243. vibe_surf/backend/frontend/assets/pipette-BzvHUOUt.js +6 -0
  1244. vibe_surf/backend/frontend/assets/pizza-B5z39oy-.js +6 -0
  1245. vibe_surf/backend/frontend/assets/plane-eU326jPg.js +6 -0
  1246. vibe_surf/backend/frontend/assets/plane-landing-gxcqSKOA.js +6 -0
  1247. vibe_surf/backend/frontend/assets/plane-takeoff-CFmuOAfX.js +6 -0
  1248. vibe_surf/backend/frontend/assets/play-CaCbaWdR.js +6 -0
  1249. vibe_surf/backend/frontend/assets/plug-2-CaihODHc.js +6 -0
  1250. vibe_surf/backend/frontend/assets/plug-DrN0weqI.js +6 -0
  1251. vibe_surf/backend/frontend/assets/plug-zap-BT2sgwQy.js +6 -0
  1252. vibe_surf/backend/frontend/assets/pocket-DNEPJJmg.js +6 -0
  1253. vibe_surf/backend/frontend/assets/pocket-knife-1CI1aqMD.js +6 -0
  1254. vibe_surf/backend/frontend/assets/podcast-BsGsWn3h.js +6 -0
  1255. vibe_surf/backend/frontend/assets/pointer-B8T5gv-x.js +6 -0
  1256. vibe_surf/backend/frontend/assets/pointer-off-C2DXzg5S.js +6 -0
  1257. vibe_surf/backend/frontend/assets/popcorn-Bi10K8Em.js +6 -0
  1258. vibe_surf/backend/frontend/assets/popsicle-CxLa9bz8.js +6 -0
  1259. vibe_surf/backend/frontend/assets/pound-sterling-BFXPyyYU.js +6 -0
  1260. vibe_surf/backend/frontend/assets/power-BmqAlXVz.js +6 -0
  1261. vibe_surf/backend/frontend/assets/power-off-CT70n2O0.js +6 -0
  1262. vibe_surf/backend/frontend/assets/presentation-DVhaCvt0.js +6 -0
  1263. vibe_surf/backend/frontend/assets/printer-D7NgKQZm.js +6 -0
  1264. vibe_surf/backend/frontend/assets/printer-check-BYDiSYD3.js +6 -0
  1265. vibe_surf/backend/frontend/assets/projector-BFMEAUGw.js +6 -0
  1266. vibe_surf/backend/frontend/assets/proportions-CUypjhWs.js +6 -0
  1267. vibe_surf/backend/frontend/assets/puzzle-lPcRsrCP.js +6 -0
  1268. vibe_surf/backend/frontend/assets/pyramid-bX_YtvHu.js +6 -0
  1269. vibe_surf/backend/frontend/assets/qr-code-CMBq06CH.js +6 -0
  1270. vibe_surf/backend/frontend/assets/quote-BkFwr2wo.js +6 -0
  1271. vibe_surf/backend/frontend/assets/rabbit-CEyfAR1t.js +6 -0
  1272. vibe_surf/backend/frontend/assets/radar-bMcLs_bP.js +6 -0
  1273. vibe_surf/backend/frontend/assets/radiation-NMlxufHZ.js +6 -0
  1274. vibe_surf/backend/frontend/assets/radical-C3CE5pot.js +6 -0
  1275. vibe_surf/backend/frontend/assets/radio-DQMhSWLz.js +6 -0
  1276. vibe_surf/backend/frontend/assets/radio-receiver-Cwtiayz1.js +6 -0
  1277. vibe_surf/backend/frontend/assets/radio-tower-ngCBBDuR.js +6 -0
  1278. vibe_surf/backend/frontend/assets/radius-CB1vpl4-.js +6 -0
  1279. vibe_surf/backend/frontend/assets/rail-symbol-CWT8jn79.js +6 -0
  1280. vibe_surf/backend/frontend/assets/rainbow-eG2Z6xdv.js +6 -0
  1281. vibe_surf/backend/frontend/assets/rat-CjjmSgkE.js +6 -0
  1282. vibe_surf/backend/frontend/assets/ratio-Ck9TZd6C.js +6 -0
  1283. vibe_surf/backend/frontend/assets/receipt-QzIALZKN.js +6 -0
  1284. vibe_surf/backend/frontend/assets/receipt-cent-wAd12yx1.js +6 -0
  1285. vibe_surf/backend/frontend/assets/receipt-euro-BG_rS29_.js +6 -0
  1286. vibe_surf/backend/frontend/assets/receipt-indian-rupee-DlF7wlqh.js +6 -0
  1287. vibe_surf/backend/frontend/assets/receipt-japanese-yen-GDNnE_Bl.js +6 -0
  1288. vibe_surf/backend/frontend/assets/receipt-pound-sterling-CczRTrHu.js +6 -0
  1289. vibe_surf/backend/frontend/assets/receipt-russian-ruble-CP8qhoZV.js +6 -0
  1290. vibe_surf/backend/frontend/assets/receipt-swiss-franc-B1FjnBVT.js +6 -0
  1291. vibe_surf/backend/frontend/assets/receipt-text-Df0EAqK2.js +6 -0
  1292. vibe_surf/backend/frontend/assets/rectangle-ellipsis-BeZ5b8q2.js +6 -0
  1293. vibe_surf/backend/frontend/assets/rectangle-goggles-B0pWs5f6.js +6 -0
  1294. vibe_surf/backend/frontend/assets/rectangle-horizontal-5D8nW5zN.js +6 -0
  1295. vibe_surf/backend/frontend/assets/rectangle-vertical-D6iXTP5O.js +6 -0
  1296. vibe_surf/backend/frontend/assets/recycle-cePWNqck.js +6 -0
  1297. vibe_surf/backend/frontend/assets/redo-2-DflPUgVL.js +6 -0
  1298. vibe_surf/backend/frontend/assets/redo-C8hJqzAq.js +6 -0
  1299. vibe_surf/backend/frontend/assets/redo-dot-JyZC910i.js +6 -0
  1300. vibe_surf/backend/frontend/assets/refresh-ccw-QGOuU93p.js +6 -0
  1301. vibe_surf/backend/frontend/assets/refresh-ccw-dot-BVfOSZg8.js +6 -0
  1302. vibe_surf/backend/frontend/assets/refresh-cw-DttAl3PC.js +6 -0
  1303. vibe_surf/backend/frontend/assets/refresh-cw-off-1m7CD9nm.js +6 -0
  1304. vibe_surf/backend/frontend/assets/refrigerator-BGk6q_hL.js +6 -0
  1305. vibe_surf/backend/frontend/assets/regex-C-txrNUs.js +6 -0
  1306. vibe_surf/backend/frontend/assets/remove-formatting-CVxREpGZ.js +6 -0
  1307. vibe_surf/backend/frontend/assets/repeat-1-ChFj2WK-.js +6 -0
  1308. vibe_surf/backend/frontend/assets/repeat-2-ViBvoa4W.js +6 -0
  1309. vibe_surf/backend/frontend/assets/repeat-GoYG4svo.js +6 -0
  1310. vibe_surf/backend/frontend/assets/replace-GFcv_X_V.js +6 -0
  1311. vibe_surf/backend/frontend/assets/replace-all-zAC7UUp9.js +6 -0
  1312. vibe_surf/backend/frontend/assets/reply-C2IH8Yvz.js +6 -0
  1313. vibe_surf/backend/frontend/assets/reply-all-CXYDFlBb.js +6 -0
  1314. vibe_surf/backend/frontend/assets/rewind-Bmv_DtI_.js +6 -0
  1315. vibe_surf/backend/frontend/assets/ribbon-B4MeTNUc.js +6 -0
  1316. vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
  1317. vibe_surf/backend/frontend/assets/rocket-Ch2Sc43k.js +6 -0
  1318. vibe_surf/backend/frontend/assets/rocking-chair-Pcx0Ex8j.js +6 -0
  1319. vibe_surf/backend/frontend/assets/roller-coaster-DpdZyHU4.js +6 -0
  1320. vibe_surf/backend/frontend/assets/rotate-3d-CAlCCDrS.js +6 -0
  1321. vibe_surf/backend/frontend/assets/rotate-ccw-Dl5IeMD0.js +6 -0
  1322. vibe_surf/backend/frontend/assets/rotate-ccw-key-CbcFcY_X.js +6 -0
  1323. vibe_surf/backend/frontend/assets/rotate-ccw-square-B6dXtMGF.js +6 -0
  1324. vibe_surf/backend/frontend/assets/rotate-cw-D9QBD3w1.js +6 -0
  1325. vibe_surf/backend/frontend/assets/rotate-cw-square-BTb_LCYt.js +6 -0
  1326. vibe_surf/backend/frontend/assets/route-BY8OMdE6.js +6 -0
  1327. vibe_surf/backend/frontend/assets/route-off-DBPZSjij.js +6 -0
  1328. vibe_surf/backend/frontend/assets/router-Cj5pK344.js +6 -0
  1329. vibe_surf/backend/frontend/assets/rows-2-DQikFZXW.js +6 -0
  1330. vibe_surf/backend/frontend/assets/rows-3-CgpwLjBs.js +6 -0
  1331. vibe_surf/backend/frontend/assets/rows-4-DHLpJgeW.js +6 -0
  1332. vibe_surf/backend/frontend/assets/rss-B2J7l-Sb.js +6 -0
  1333. vibe_surf/backend/frontend/assets/ruler-D-fe4o6e.js +6 -0
  1334. vibe_surf/backend/frontend/assets/ruler-dimension-line-COrwkuXi.js +6 -0
  1335. vibe_surf/backend/frontend/assets/russian-ruble-Bk9zdT2J.js +6 -0
  1336. vibe_surf/backend/frontend/assets/sailboat-DMPxVbdm.js +6 -0
  1337. vibe_surf/backend/frontend/assets/salad-D20azVGZ.js +6 -0
  1338. vibe_surf/backend/frontend/assets/sandwich-Z_d-MQ5t.js +6 -0
  1339. vibe_surf/backend/frontend/assets/satellite-7zgZRaOF.js +6 -0
  1340. vibe_surf/backend/frontend/assets/satellite-dish-Cy6FmD_T.js +6 -0
  1341. vibe_surf/backend/frontend/assets/saudi-riyal-C9ZvxnL2.js +6 -0
  1342. vibe_surf/backend/frontend/assets/save-LkAkHS7W.js +6 -0
  1343. vibe_surf/backend/frontend/assets/save-all-D_-zYl71.js +6 -0
  1344. vibe_surf/backend/frontend/assets/save-off-B0KWQYIj.js +6 -0
  1345. vibe_surf/backend/frontend/assets/scale-3d-FnesJ3yp.js +6 -0
  1346. vibe_surf/backend/frontend/assets/scale-CfDNIDpX.js +6 -0
  1347. vibe_surf/backend/frontend/assets/scaling-D7_wGXPp.js +6 -0
  1348. vibe_surf/backend/frontend/assets/scan-CXtftKWt.js +6 -0
  1349. vibe_surf/backend/frontend/assets/scan-barcode-DMzKInA0.js +6 -0
  1350. vibe_surf/backend/frontend/assets/scan-eye-BNOyXXj8.js +6 -0
  1351. vibe_surf/backend/frontend/assets/scan-face-wv0t4zeq.js +6 -0
  1352. vibe_surf/backend/frontend/assets/scan-heart-BeBWR3xV.js +6 -0
  1353. vibe_surf/backend/frontend/assets/scan-line-CvQpOukb.js +6 -0
  1354. vibe_surf/backend/frontend/assets/scan-qr-code-BQ-Oqt9e.js +6 -0
  1355. vibe_surf/backend/frontend/assets/scan-search-DeDxyjP7.js +6 -0
  1356. vibe_surf/backend/frontend/assets/scan-text-Du5B26Lp.js +6 -0
  1357. vibe_surf/backend/frontend/assets/school-XPbcFxvs.js +6 -0
  1358. vibe_surf/backend/frontend/assets/scissors-C82MxyXF.js +6 -0
  1359. vibe_surf/backend/frontend/assets/scissors-line-dashed-BiIj8ZEF.js +6 -0
  1360. vibe_surf/backend/frontend/assets/screen-share-4rpy_bSP.js +6 -0
  1361. vibe_surf/backend/frontend/assets/screen-share-off-DisAsCVo.js +6 -0
  1362. vibe_surf/backend/frontend/assets/scroll-D3FgdMu9.js +6 -0
  1363. vibe_surf/backend/frontend/assets/scroll-text-BolUgv8k.js +6 -0
  1364. vibe_surf/backend/frontend/assets/search-check-BqDsbYzT.js +6 -0
  1365. vibe_surf/backend/frontend/assets/search-code-BAngOAWT.js +6 -0
  1366. vibe_surf/backend/frontend/assets/search-slash-DGpGjVDh.js +6 -0
  1367. vibe_surf/backend/frontend/assets/search-x-hbEhC-Ks.js +6 -0
  1368. vibe_surf/backend/frontend/assets/section-CZdebDRa.js +6 -0
  1369. vibe_surf/backend/frontend/assets/send-BY6RRvoS.js +6 -0
  1370. vibe_surf/backend/frontend/assets/send-horizontal-ByJf1GwO.js +6 -0
  1371. vibe_surf/backend/frontend/assets/send-to-back-CqeJ0x7-.js +6 -0
  1372. vibe_surf/backend/frontend/assets/separator-horizontal-CyHVE869.js +6 -0
  1373. vibe_surf/backend/frontend/assets/separator-vertical-CHEXvAuG.js +6 -0
  1374. vibe_surf/backend/frontend/assets/server-DPj6-qpq.js +6 -0
  1375. vibe_surf/backend/frontend/assets/server-cog-Dc-mlMR8.js +6 -0
  1376. vibe_surf/backend/frontend/assets/server-crash-CXsISMNW.js +6 -0
  1377. vibe_surf/backend/frontend/assets/server-off-Y_lfL7-w.js +6 -0
  1378. vibe_surf/backend/frontend/assets/settings-2-DZ9wvd5i.js +6 -0
  1379. vibe_surf/backend/frontend/assets/settings-DO_W46zj.js +6 -0
  1380. vibe_surf/backend/frontend/assets/shapes-CIsUods8.js +6 -0
  1381. vibe_surf/backend/frontend/assets/share-0y8A7A5E.js +6 -0
  1382. vibe_surf/backend/frontend/assets/share-2-TSy7pnEx.js +6 -0
  1383. vibe_surf/backend/frontend/assets/sheet-DagiH4ve.js +6 -0
  1384. vibe_surf/backend/frontend/assets/shell-4uq5QK2w.js +6 -0
  1385. vibe_surf/backend/frontend/assets/shield-DSmxKeAX.js +6 -0
  1386. vibe_surf/backend/frontend/assets/shield-alert-2BHG6ofb.js +6 -0
  1387. vibe_surf/backend/frontend/assets/shield-ban-BcQOFFCO.js +6 -0
  1388. vibe_surf/backend/frontend/assets/shield-check-IssT1y70.js +6 -0
  1389. vibe_surf/backend/frontend/assets/shield-ellipsis-B_k2GJZe.js +6 -0
  1390. vibe_surf/backend/frontend/assets/shield-half-Ce9mZY66.js +6 -0
  1391. vibe_surf/backend/frontend/assets/shield-minus-Cm9SRYz3.js +6 -0
  1392. vibe_surf/backend/frontend/assets/shield-off-Di-Txcsi.js +6 -0
  1393. vibe_surf/backend/frontend/assets/shield-plus-Cbd8tnos.js +6 -0
  1394. vibe_surf/backend/frontend/assets/shield-question-5hf3zAb8.js +6 -0
  1395. vibe_surf/backend/frontend/assets/shield-user-D2XuthCx.js +6 -0
  1396. vibe_surf/backend/frontend/assets/shield-x-BTJiGLGc.js +6 -0
  1397. vibe_surf/backend/frontend/assets/ship-DkhgC4pB.js +6 -0
  1398. vibe_surf/backend/frontend/assets/ship-wheel-C-7_Y35l.js +6 -0
  1399. vibe_surf/backend/frontend/assets/shirt-vuhl9SGI.js +6 -0
  1400. vibe_surf/backend/frontend/assets/shopping-bag-DvQ2pPfQ.js +6 -0
  1401. vibe_surf/backend/frontend/assets/shopping-basket-D9s56Xw7.js +6 -0
  1402. vibe_surf/backend/frontend/assets/shopping-cart-ZmbJuTVy.js +6 -0
  1403. vibe_surf/backend/frontend/assets/shovel-L2fbM_rD.js +6 -0
  1404. vibe_surf/backend/frontend/assets/shower-head-DE9aHmtW.js +6 -0
  1405. vibe_surf/backend/frontend/assets/shredder-DadDP-UJ.js +6 -0
  1406. vibe_surf/backend/frontend/assets/shrimp-DycqoQZ3.js +6 -0
  1407. vibe_surf/backend/frontend/assets/shrink-B8aylxOx.js +6 -0
  1408. vibe_surf/backend/frontend/assets/shrub-DF1hbXW3.js +6 -0
  1409. vibe_surf/backend/frontend/assets/shuffle-BuIBx3Jr.js +6 -0
  1410. vibe_surf/backend/frontend/assets/sigma-Do2EOGrK.js +6 -0
  1411. vibe_surf/backend/frontend/assets/signal-D4HUxctG.js +6 -0
  1412. vibe_surf/backend/frontend/assets/signal-high-D4XjnPRT.js +6 -0
  1413. vibe_surf/backend/frontend/assets/signal-low-CbpCiGEn.js +6 -0
  1414. vibe_surf/backend/frontend/assets/signal-medium-DenP3lw7.js +6 -0
  1415. vibe_surf/backend/frontend/assets/signal-zero-CHgcs844.js +6 -0
  1416. vibe_surf/backend/frontend/assets/signature-DK8I0wlU.js +6 -0
  1417. vibe_surf/backend/frontend/assets/signpost-1ES-i9fp.js +6 -0
  1418. vibe_surf/backend/frontend/assets/signpost-big-BSozSaes.js +6 -0
  1419. vibe_surf/backend/frontend/assets/siren-wlABVP_H.js +6 -0
  1420. vibe_surf/backend/frontend/assets/skip-back-Bu_s_NAd.js +6 -0
  1421. vibe_surf/backend/frontend/assets/skip-forward-B_5w_2GT.js +6 -0
  1422. vibe_surf/backend/frontend/assets/skull-BEu1YCxD.js +6 -0
  1423. vibe_surf/backend/frontend/assets/slack-D9649ln8.js +6 -0
  1424. vibe_surf/backend/frontend/assets/slash-DojcavQ9.js +6 -0
  1425. vibe_surf/backend/frontend/assets/slice-CRmKxhnX.js +6 -0
  1426. vibe_surf/backend/frontend/assets/sliders-horizontal-B5g_t8uv.js +6 -0
  1427. vibe_surf/backend/frontend/assets/sliders-vertical-CLBL1buf.js +6 -0
  1428. vibe_surf/backend/frontend/assets/smartphone-D-ep_7qQ.js +6 -0
  1429. vibe_surf/backend/frontend/assets/smartphone-charging-CRPRIfJL.js +6 -0
  1430. vibe_surf/backend/frontend/assets/smartphone-nfc-CmXWPjB7.js +6 -0
  1431. vibe_surf/backend/frontend/assets/smile-C8NQBJ3w.js +6 -0
  1432. vibe_surf/backend/frontend/assets/smile-plus-BXiCkryt.js +6 -0
  1433. vibe_surf/backend/frontend/assets/snail-C4InLnJK.js +6 -0
  1434. vibe_surf/backend/frontend/assets/snowflake-CkOWmqpH.js +6 -0
  1435. vibe_surf/backend/frontend/assets/sofa-C5SFUETc.js +6 -0
  1436. vibe_surf/backend/frontend/assets/soup-BPK9i9Mq.js +6 -0
  1437. vibe_surf/backend/frontend/assets/space-B_AibqtW.js +6 -0
  1438. vibe_surf/backend/frontend/assets/spade-DOYQwKmE.js +6 -0
  1439. vibe_surf/backend/frontend/assets/sparkle-Bgy0TYRq.js +6 -0
  1440. vibe_surf/backend/frontend/assets/sparkles-COXnCZbi.js +6 -0
  1441. vibe_surf/backend/frontend/assets/speaker-CaUol58E.js +6 -0
  1442. vibe_surf/backend/frontend/assets/speech-SU2fqOX1.js +6 -0
  1443. vibe_surf/backend/frontend/assets/spell-check-2-C0X3GG0W.js +6 -0
  1444. vibe_surf/backend/frontend/assets/spell-check-BwnI8rNb.js +6 -0
  1445. vibe_surf/backend/frontend/assets/spline-ByNmiFVd.js +6 -0
  1446. vibe_surf/backend/frontend/assets/spline-pointer-B6jrA3VA.js +6 -0
  1447. vibe_surf/backend/frontend/assets/split-uo1Igb0N.js +6 -0
  1448. vibe_surf/backend/frontend/assets/spray-can-D37CFDNB.js +6 -0
  1449. vibe_surf/backend/frontend/assets/sprout-B25Lx6nK.js +6 -0
  1450. vibe_surf/backend/frontend/assets/square-KfK1ngG3.js +6 -0
  1451. vibe_surf/backend/frontend/assets/square-activity-BGQluYc5.js +6 -0
  1452. vibe_surf/backend/frontend/assets/square-arrow-down-CqlT37VO.js +6 -0
  1453. vibe_surf/backend/frontend/assets/square-arrow-down-left-CR2Go22d.js +6 -0
  1454. vibe_surf/backend/frontend/assets/square-arrow-down-right-rGAHLIaS.js +6 -0
  1455. vibe_surf/backend/frontend/assets/square-arrow-left-CvWu8_9d.js +6 -0
  1456. vibe_surf/backend/frontend/assets/square-arrow-out-down-left-K0v7hlb0.js +6 -0
  1457. vibe_surf/backend/frontend/assets/square-arrow-out-down-right-f74Yq8Hb.js +6 -0
  1458. vibe_surf/backend/frontend/assets/square-arrow-out-up-left-CdBSNScA.js +6 -0
  1459. vibe_surf/backend/frontend/assets/square-arrow-out-up-right-8PNP-37C.js +6 -0
  1460. vibe_surf/backend/frontend/assets/square-arrow-right-DZ3-0COG.js +6 -0
  1461. vibe_surf/backend/frontend/assets/square-arrow-up-CefwAldY.js +6 -0
  1462. vibe_surf/backend/frontend/assets/square-arrow-up-left-Dt6pY6y2.js +6 -0
  1463. vibe_surf/backend/frontend/assets/square-arrow-up-right-C-bPYXZE.js +6 -0
  1464. vibe_surf/backend/frontend/assets/square-asterisk-BIEu0Wq-.js +6 -0
  1465. vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-DFln2i7A.js +6 -0
  1466. vibe_surf/backend/frontend/assets/square-chart-gantt-VCoGr7j5.js +6 -0
  1467. vibe_surf/backend/frontend/assets/square-check-big-DdTm65g2.js +6 -0
  1468. vibe_surf/backend/frontend/assets/square-check-tJdFPLB4.js +6 -0
  1469. vibe_surf/backend/frontend/assets/square-chevron-down-DV0aFQxC.js +6 -0
  1470. vibe_surf/backend/frontend/assets/square-chevron-left-CdGd5MQB.js +6 -0
  1471. vibe_surf/backend/frontend/assets/square-chevron-right-D_aqBwe_.js +6 -0
  1472. vibe_surf/backend/frontend/assets/square-chevron-up-DBzeLhdp.js +6 -0
  1473. vibe_surf/backend/frontend/assets/square-code-DtSsDKtH.js +6 -0
  1474. vibe_surf/backend/frontend/assets/square-dashed-DSG0Ash0.js +6 -0
  1475. vibe_surf/backend/frontend/assets/square-dashed-bottom-BrkR2d57.js +6 -0
  1476. vibe_surf/backend/frontend/assets/square-dashed-bottom-code-CMTH1TbL.js +6 -0
  1477. vibe_surf/backend/frontend/assets/square-dashed-kanban-961FMGlN.js +6 -0
  1478. vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-BWcK5KqH.js +6 -0
  1479. vibe_surf/backend/frontend/assets/square-divide-B8EfzsLW.js +6 -0
  1480. vibe_surf/backend/frontend/assets/square-dot-CFXkGNxl.js +6 -0
  1481. vibe_surf/backend/frontend/assets/square-equal-DNzUS5Xu.js +6 -0
  1482. vibe_surf/backend/frontend/assets/square-function-mVVWlGqH.js +6 -0
  1483. vibe_surf/backend/frontend/assets/square-kanban-gbxgvYAs.js +6 -0
  1484. vibe_surf/backend/frontend/assets/square-library-LB-mLfoV.js +6 -0
  1485. vibe_surf/backend/frontend/assets/square-m-DR4vWmvF.js +6 -0
  1486. vibe_surf/backend/frontend/assets/square-menu-wrD_3b1X.js +6 -0
  1487. vibe_surf/backend/frontend/assets/square-minus-C8LvWB0i.js +6 -0
  1488. vibe_surf/backend/frontend/assets/square-mouse-pointer-BWIOG0ej.js +6 -0
  1489. vibe_surf/backend/frontend/assets/square-parking-Cwf1smWS.js +6 -0
  1490. vibe_surf/backend/frontend/assets/square-parking-off-B7fLGIII.js +6 -0
  1491. vibe_surf/backend/frontend/assets/square-pen-D-KRx-pf.js +6 -0
  1492. vibe_surf/backend/frontend/assets/square-percent-DEPHZN1U.js +6 -0
  1493. vibe_surf/backend/frontend/assets/square-pi-D3ZoGA8y.js +6 -0
  1494. vibe_surf/backend/frontend/assets/square-pilcrow-CU7h7mYC.js +6 -0
  1495. vibe_surf/backend/frontend/assets/square-play-BJID6hok.js +6 -0
  1496. vibe_surf/backend/frontend/assets/square-plus-B_MofyMZ.js +6 -0
  1497. vibe_surf/backend/frontend/assets/square-power-CnNfm3SK.js +6 -0
  1498. vibe_surf/backend/frontend/assets/square-radical-Bb91fkyO.js +6 -0
  1499. vibe_surf/backend/frontend/assets/square-round-corner-DSNwBkrZ.js +6 -0
  1500. vibe_surf/backend/frontend/assets/square-scissors-Q-Hew_gd.js +6 -0
  1501. vibe_surf/backend/frontend/assets/square-sigma-Dvqecf-2.js +6 -0
  1502. vibe_surf/backend/frontend/assets/square-slash-TFALqbOX.js +6 -0
  1503. vibe_surf/backend/frontend/assets/square-split-horizontal-CbPy5mPi.js +6 -0
  1504. vibe_surf/backend/frontend/assets/square-split-vertical-CwEHVK6t.js +6 -0
  1505. vibe_surf/backend/frontend/assets/square-square-BgBRe8Sy.js +6 -0
  1506. vibe_surf/backend/frontend/assets/square-stack-CQOObCB-.js +6 -0
  1507. vibe_surf/backend/frontend/assets/square-terminal-DTCYsALs.js +6 -0
  1508. vibe_surf/backend/frontend/assets/square-user-BtoHpGAf.js +6 -0
  1509. vibe_surf/backend/frontend/assets/square-user-round-DYhk3lBR.js +6 -0
  1510. vibe_surf/backend/frontend/assets/square-x-BxVfvmxy.js +6 -0
  1511. vibe_surf/backend/frontend/assets/squares-exclude-xFnGRjrW.js +6 -0
  1512. vibe_surf/backend/frontend/assets/squares-intersect-CJ3onkar.js +6 -0
  1513. vibe_surf/backend/frontend/assets/squares-subtract-DHkmEhbq.js +6 -0
  1514. vibe_surf/backend/frontend/assets/squares-unite-VTPchsN_.js +6 -0
  1515. vibe_surf/backend/frontend/assets/squircle-BeRgB4CX.js +6 -0
  1516. vibe_surf/backend/frontend/assets/squirrel-CXpCofHU.js +6 -0
  1517. vibe_surf/backend/frontend/assets/stamp-CBKYJLk-.js +6 -0
  1518. vibe_surf/backend/frontend/assets/star-g394tQMa.js +6 -0
  1519. vibe_surf/backend/frontend/assets/star-half-DMNuOefd.js +6 -0
  1520. vibe_surf/backend/frontend/assets/star-off-D_I13W97.js +6 -0
  1521. vibe_surf/backend/frontend/assets/step-back-Ba3vvS1b.js +6 -0
  1522. vibe_surf/backend/frontend/assets/step-forward-tf6_dmSk.js +6 -0
  1523. vibe_surf/backend/frontend/assets/stethoscope-kEGj4Hk2.js +6 -0
  1524. vibe_surf/backend/frontend/assets/sticker-BMrXBzQi.js +6 -0
  1525. vibe_surf/backend/frontend/assets/sticky-note-B6_-_Vk7.js +6 -0
  1526. vibe_surf/backend/frontend/assets/store-ClCC8VsS.js +6 -0
  1527. vibe_surf/backend/frontend/assets/stretch-horizontal-Dfdn4d_v.js +6 -0
  1528. vibe_surf/backend/frontend/assets/stretch-vertical-G91F9Wl8.js +6 -0
  1529. vibe_surf/backend/frontend/assets/strikethrough-DQ1eMtzE.js +6 -0
  1530. vibe_surf/backend/frontend/assets/subscript-B1v5cruw.js +6 -0
  1531. vibe_surf/backend/frontend/assets/sun-Drd6gJu4.js +6 -0
  1532. vibe_surf/backend/frontend/assets/sun-dim-CSbGIP11.js +6 -0
  1533. vibe_surf/backend/frontend/assets/sun-medium-Cownz0gJ.js +6 -0
  1534. vibe_surf/backend/frontend/assets/sun-moon-BgCDmhlw.js +6 -0
  1535. vibe_surf/backend/frontend/assets/sun-snow-B0xowfvd.js +6 -0
  1536. vibe_surf/backend/frontend/assets/sunrise-DkTO7zEY.js +6 -0
  1537. vibe_surf/backend/frontend/assets/sunset-DkKYK75e.js +6 -0
  1538. vibe_surf/backend/frontend/assets/superscript-CBfgJuGP.js +6 -0
  1539. vibe_surf/backend/frontend/assets/swatch-book-DrsAphD2.js +6 -0
  1540. vibe_surf/backend/frontend/assets/swiss-franc-DAYyAzPc.js +6 -0
  1541. vibe_surf/backend/frontend/assets/switch-camera-C7hTq-mz.js +6 -0
  1542. vibe_surf/backend/frontend/assets/sword-BDecpboX.js +6 -0
  1543. vibe_surf/backend/frontend/assets/swords-BjWa4kCQ.js +6 -0
  1544. vibe_surf/backend/frontend/assets/syringe-ClPPE8yd.js +6 -0
  1545. vibe_surf/backend/frontend/assets/table-2-DIGnaXY7.js +6 -0
  1546. vibe_surf/backend/frontend/assets/table-CHxmnA-B.js +6 -0
  1547. vibe_surf/backend/frontend/assets/table-cells-merge-D1zNRVrG.js +6 -0
  1548. vibe_surf/backend/frontend/assets/table-cells-split-CdEYW1Su.js +6 -0
  1549. vibe_surf/backend/frontend/assets/table-columns-split-JoiaUKz3.js +6 -0
  1550. vibe_surf/backend/frontend/assets/table-of-contents-BSpkdcFt.js +6 -0
  1551. vibe_surf/backend/frontend/assets/table-properties-CmoYqW5E.js +6 -0
  1552. vibe_surf/backend/frontend/assets/table-rows-split-B-06ZKqE.js +6 -0
  1553. vibe_surf/backend/frontend/assets/tablet-YvP4PBQR.js +6 -0
  1554. vibe_surf/backend/frontend/assets/tablet-smartphone-BG7aS4OL.js +6 -0
  1555. vibe_surf/backend/frontend/assets/tablets-BVvSHnaS.js +6 -0
  1556. vibe_surf/backend/frontend/assets/tag-Bs9C2NWs.js +6 -0
  1557. vibe_surf/backend/frontend/assets/tags-DEvGZIIh.js +6 -0
  1558. vibe_surf/backend/frontend/assets/tally-1-BjNjbWUj.js +6 -0
  1559. vibe_surf/backend/frontend/assets/tally-2-Bd0nQcFC.js +6 -0
  1560. vibe_surf/backend/frontend/assets/tally-3-DHrPKvJg.js +6 -0
  1561. vibe_surf/backend/frontend/assets/tally-4-DAUwA2aR.js +6 -0
  1562. vibe_surf/backend/frontend/assets/tally-5-CgAN8Y91.js +6 -0
  1563. vibe_surf/backend/frontend/assets/tangent-CRznV78Q.js +6 -0
  1564. vibe_surf/backend/frontend/assets/target-Bj2MJlO6.js +6 -0
  1565. vibe_surf/backend/frontend/assets/telescope-CyRzgTg4.js +6 -0
  1566. vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
  1567. vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
  1568. vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
  1569. vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
  1570. vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
  1571. vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
  1572. vibe_surf/backend/frontend/assets/tent-D1boPMJ_.js +6 -0
  1573. vibe_surf/backend/frontend/assets/tent-tree-DlMlV5UT.js +6 -0
  1574. vibe_surf/backend/frontend/assets/terminal-ByKLrVXr.js +6 -0
  1575. vibe_surf/backend/frontend/assets/test-tube-DjNpqEvy.js +6 -0
  1576. vibe_surf/backend/frontend/assets/test-tube-diagonal-kvKWvVpD.js +6 -0
  1577. vibe_surf/backend/frontend/assets/test-tubes-BUVuvPYq.js +6 -0
  1578. vibe_surf/backend/frontend/assets/text-BaPUPrRB.js +6 -0
  1579. vibe_surf/backend/frontend/assets/text-cursor-DjiJAhIO.js +6 -0
  1580. vibe_surf/backend/frontend/assets/text-cursor-input-DmFbkVcG.js +6 -0
  1581. vibe_surf/backend/frontend/assets/text-quote-DbZhBhba.js +6 -0
  1582. vibe_surf/backend/frontend/assets/text-search-D81mgubi.js +6 -0
  1583. vibe_surf/backend/frontend/assets/text-select-BCYAwryE.js +6 -0
  1584. vibe_surf/backend/frontend/assets/theater-BF8yCQZ3.js +6 -0
  1585. vibe_surf/backend/frontend/assets/thermometer-Dz0qc69z.js +6 -0
  1586. vibe_surf/backend/frontend/assets/thermometer-snowflake-BZ8Fol5x.js +6 -0
  1587. vibe_surf/backend/frontend/assets/thermometer-sun-DgmdNSSx.js +6 -0
  1588. vibe_surf/backend/frontend/assets/thumbs-down-6gCm1bFP.js +6 -0
  1589. vibe_surf/backend/frontend/assets/thumbs-up-BpkAnOkj.js +6 -0
  1590. vibe_surf/backend/frontend/assets/ticket-CZ6VZCic.js +6 -0
  1591. vibe_surf/backend/frontend/assets/ticket-check-CwERJSTS.js +6 -0
  1592. vibe_surf/backend/frontend/assets/ticket-minus-CJ8o42r1.js +6 -0
  1593. vibe_surf/backend/frontend/assets/ticket-percent-D9mgrzai.js +6 -0
  1594. vibe_surf/backend/frontend/assets/ticket-plus-Bf_MplVa.js +6 -0
  1595. vibe_surf/backend/frontend/assets/ticket-slash-CNukz3dP.js +6 -0
  1596. vibe_surf/backend/frontend/assets/ticket-x-DAGtm4Nf.js +6 -0
  1597. vibe_surf/backend/frontend/assets/tickets-Dlm-Pd3N.js +6 -0
  1598. vibe_surf/backend/frontend/assets/tickets-plane-C4lmqLQq.js +6 -0
  1599. vibe_surf/backend/frontend/assets/timer-0lTpmgXp.js +6 -0
  1600. vibe_surf/backend/frontend/assets/timer-off-BGqRyv1S.js +6 -0
  1601. vibe_surf/backend/frontend/assets/timer-reset-DdhKPXcy.js +6 -0
  1602. vibe_surf/backend/frontend/assets/toggle-left-De2ASTKW.js +6 -0
  1603. vibe_surf/backend/frontend/assets/toggle-right-NfpJqTaq.js +6 -0
  1604. vibe_surf/backend/frontend/assets/toilet-DcJuMKzv.js +6 -0
  1605. vibe_surf/backend/frontend/assets/tornado-BannseS-.js +6 -0
  1606. vibe_surf/backend/frontend/assets/torus-CxsKBH8D.js +6 -0
  1607. vibe_surf/backend/frontend/assets/touchpad-ENZl5mwQ.js +6 -0
  1608. vibe_surf/backend/frontend/assets/touchpad-off-Bs9XazIZ.js +6 -0
  1609. vibe_surf/backend/frontend/assets/tower-control-DOH63Gyd.js +6 -0
  1610. vibe_surf/backend/frontend/assets/toy-brick-CK9szegV.js +6 -0
  1611. vibe_surf/backend/frontend/assets/tractor-C4edkneR.js +6 -0
  1612. vibe_surf/backend/frontend/assets/traffic-cone-B7xJNOdC.js +6 -0
  1613. vibe_surf/backend/frontend/assets/train-front-DPkfW4fH.js +6 -0
  1614. vibe_surf/backend/frontend/assets/train-front-tunnel-Dc6i8ZmW.js +6 -0
  1615. vibe_surf/backend/frontend/assets/train-track-DFRUcPF4.js +6 -0
  1616. vibe_surf/backend/frontend/assets/tram-front-DnSEWr26.js +6 -0
  1617. vibe_surf/backend/frontend/assets/transgender-CwbUC-T0.js +6 -0
  1618. vibe_surf/backend/frontend/assets/trash-DSMPsj08.js +6 -0
  1619. vibe_surf/backend/frontend/assets/tree-deciduous-CMyD2rgs.js +6 -0
  1620. vibe_surf/backend/frontend/assets/tree-palm-ClbWCueR.js +6 -0
  1621. vibe_surf/backend/frontend/assets/tree-pine-CxCMH7RZ.js +6 -0
  1622. vibe_surf/backend/frontend/assets/trees-DeERVvec.js +6 -0
  1623. vibe_surf/backend/frontend/assets/trello-DwQeyG2C.js +6 -0
  1624. vibe_surf/backend/frontend/assets/trending-down-CuQxq0A3.js +6 -0
  1625. vibe_surf/backend/frontend/assets/trending-up-BDSGIJWY.js +6 -0
  1626. vibe_surf/backend/frontend/assets/trending-up-down-CSb_7X-_.js +6 -0
  1627. vibe_surf/backend/frontend/assets/triangle-Cc8gzj2X.js +6 -0
  1628. vibe_surf/backend/frontend/assets/triangle-alert-CzfSlrIp.js +6 -0
  1629. vibe_surf/backend/frontend/assets/triangle-dashed-CSlIdQSl.js +6 -0
  1630. vibe_surf/backend/frontend/assets/triangle-right-BIlbKFDC.js +6 -0
  1631. vibe_surf/backend/frontend/assets/trophy-CIFZUGnX.js +6 -0
  1632. vibe_surf/backend/frontend/assets/truck-Id_mHUOq.js +6 -0
  1633. vibe_surf/backend/frontend/assets/truck-electric-WgMKZnOH.js +6 -0
  1634. vibe_surf/backend/frontend/assets/turtle-0ek05Orw.js +6 -0
  1635. vibe_surf/backend/frontend/assets/tv-DLVWDmzW.js +6 -0
  1636. vibe_surf/backend/frontend/assets/tv-minimal-E0w-pb-R.js +6 -0
  1637. vibe_surf/backend/frontend/assets/tv-minimal-play-C8eivgTI.js +6 -0
  1638. vibe_surf/backend/frontend/assets/twitch-D6updjnG.js +6 -0
  1639. vibe_surf/backend/frontend/assets/twitter-Der_Ih7y.js +6 -0
  1640. vibe_surf/backend/frontend/assets/type-BZeEwGKH.js +6 -0
  1641. vibe_surf/backend/frontend/assets/type-outline-WvuVShMD.js +6 -0
  1642. vibe_surf/backend/frontend/assets/umbrella-BFiE5bFk.js +6 -0
  1643. vibe_surf/backend/frontend/assets/umbrella-off-CQKtt_HS.js +6 -0
  1644. vibe_surf/backend/frontend/assets/underline-eH-gfEgl.js +6 -0
  1645. vibe_surf/backend/frontend/assets/undo-2-CGpVoxxS.js +6 -0
  1646. vibe_surf/backend/frontend/assets/undo-BAkkNYmN.js +6 -0
  1647. vibe_surf/backend/frontend/assets/undo-dot-fxz9ZoUf.js +6 -0
  1648. vibe_surf/backend/frontend/assets/unfold-horizontal-Bz6GASed.js +6 -0
  1649. vibe_surf/backend/frontend/assets/unfold-vertical-DVuawiHD.js +6 -0
  1650. vibe_surf/backend/frontend/assets/ungroup-DZlCBfu8.js +6 -0
  1651. vibe_surf/backend/frontend/assets/university-DQQJPlHM.js +6 -0
  1652. vibe_surf/backend/frontend/assets/unlink-2-Bbf62oJC.js +6 -0
  1653. vibe_surf/backend/frontend/assets/unlink-rRnEYNBH.js +6 -0
  1654. vibe_surf/backend/frontend/assets/unplug-BE6bAKlE.js +6 -0
  1655. vibe_surf/backend/frontend/assets/upload-DgbNBlk6.js +6 -0
  1656. vibe_surf/backend/frontend/assets/usb-BsbOhQkP.js +6 -0
  1657. vibe_surf/backend/frontend/assets/use-post-add-user-s3pEdarP.js +1 -0
  1658. vibe_surf/backend/frontend/assets/user-C7_N9vjw.js +6 -0
  1659. vibe_surf/backend/frontend/assets/user-check-D85AcwGt.js +6 -0
  1660. vibe_surf/backend/frontend/assets/user-cog-BUSZoKWO.js +6 -0
  1661. vibe_surf/backend/frontend/assets/user-lock-DrG5znDk.js +6 -0
  1662. vibe_surf/backend/frontend/assets/user-minus-CjVZSxhC.js +6 -0
  1663. vibe_surf/backend/frontend/assets/user-pen-BllWYNRg.js +6 -0
  1664. vibe_surf/backend/frontend/assets/user-plus-Ct840ALN.js +6 -0
  1665. vibe_surf/backend/frontend/assets/user-round-D6DnOG0E.js +6 -0
  1666. vibe_surf/backend/frontend/assets/user-round-check-Ci15Wbid.js +6 -0
  1667. vibe_surf/backend/frontend/assets/user-round-cog-SrRmnnrG.js +6 -0
  1668. vibe_surf/backend/frontend/assets/user-round-minus-CZKo0fkN.js +6 -0
  1669. vibe_surf/backend/frontend/assets/user-round-pen-DQ88K1gY.js +6 -0
  1670. vibe_surf/backend/frontend/assets/user-round-plus-BtBHwnQH.js +6 -0
  1671. vibe_surf/backend/frontend/assets/user-round-search-mZx8k3ks.js +6 -0
  1672. vibe_surf/backend/frontend/assets/user-round-x-4MvMTCpy.js +6 -0
  1673. vibe_surf/backend/frontend/assets/user-search-CkEhATdm.js +6 -0
  1674. vibe_surf/backend/frontend/assets/user-x-DufZCLiX.js +6 -0
  1675. vibe_surf/backend/frontend/assets/users-DgOAHdb7.js +6 -0
  1676. vibe_surf/backend/frontend/assets/users-round-Bj4Zqvjj.js +6 -0
  1677. vibe_surf/backend/frontend/assets/utensils-CcfYVeqi.js +6 -0
  1678. vibe_surf/backend/frontend/assets/utensils-crossed-Daq7-gMB.js +6 -0
  1679. vibe_surf/backend/frontend/assets/utility-pole-BRYxk_9o.js +6 -0
  1680. vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
  1681. vibe_surf/backend/frontend/assets/variable-CQb_DxMu.js +6 -0
  1682. vibe_surf/backend/frontend/assets/vault-D7etPPcB.js +6 -0
  1683. vibe_surf/backend/frontend/assets/vegan-DhjhKnZM.js +6 -0
  1684. vibe_surf/backend/frontend/assets/venetian-mask-DGDNvUAT.js +6 -0
  1685. vibe_surf/backend/frontend/assets/venus-and-mars-BEW94wvT.js +6 -0
  1686. vibe_surf/backend/frontend/assets/venus-u9B-gdcz.js +6 -0
  1687. vibe_surf/backend/frontend/assets/vibrate-off-GMm1P59r.js +6 -0
  1688. vibe_surf/backend/frontend/assets/vibrate-ztsKQUo9.js +6 -0
  1689. vibe_surf/backend/frontend/assets/video-BRU-KCdj.js +6 -0
  1690. vibe_surf/backend/frontend/assets/video-off-UBhDkXSa.js +6 -0
  1691. vibe_surf/backend/frontend/assets/videotape-BnpqC2PU.js +6 -0
  1692. vibe_surf/backend/frontend/assets/view-SPlXqa2E.js +6 -0
  1693. vibe_surf/backend/frontend/assets/voicemail-CslFUibB.js +6 -0
  1694. vibe_surf/backend/frontend/assets/volleyball-YmSfEYj0.js +6 -0
  1695. vibe_surf/backend/frontend/assets/volume-1-DzSvYJXy.js +6 -0
  1696. vibe_surf/backend/frontend/assets/volume-2-CKYHuo73.js +6 -0
  1697. vibe_surf/backend/frontend/assets/volume-D2WpTg4b.js +6 -0
  1698. vibe_surf/backend/frontend/assets/volume-off-CXmQvaUO.js +6 -0
  1699. vibe_surf/backend/frontend/assets/volume-x-Dl4xNI1D.js +6 -0
  1700. vibe_surf/backend/frontend/assets/vote-DVUnQCxF.js +6 -0
  1701. vibe_surf/backend/frontend/assets/wallet-D9F1dFbt.js +6 -0
  1702. vibe_surf/backend/frontend/assets/wallet-cards-DkIuM2Gu.js +6 -0
  1703. vibe_surf/backend/frontend/assets/wallet-minimal-CUUsXAfP.js +6 -0
  1704. vibe_surf/backend/frontend/assets/wallpaper-BHliG6AQ.js +6 -0
  1705. vibe_surf/backend/frontend/assets/wand-sparkles-BA8i-2_I.js +6 -0
  1706. vibe_surf/backend/frontend/assets/wand-u2EI2dL2.js +6 -0
  1707. vibe_surf/backend/frontend/assets/warehouse-CxDEgPyp.js +6 -0
  1708. vibe_surf/backend/frontend/assets/washing-machine-CYoqAbT7.js +6 -0
  1709. vibe_surf/backend/frontend/assets/watch-eNq5oUsh.js +6 -0
  1710. vibe_surf/backend/frontend/assets/waves-Bs6o5G71.js +6 -0
  1711. vibe_surf/backend/frontend/assets/waves-ladder-0t2iIHt8.js +6 -0
  1712. vibe_surf/backend/frontend/assets/waypoints-DyScJk3j.js +6 -0
  1713. vibe_surf/backend/frontend/assets/webcam-BFZUWYUw.js +6 -0
  1714. vibe_surf/backend/frontend/assets/webhook-CMDaI4yk.js +6 -0
  1715. vibe_surf/backend/frontend/assets/webhook-off-DQzE1oMX.js +6 -0
  1716. vibe_surf/backend/frontend/assets/weight-g0EeSmAx.js +6 -0
  1717. vibe_surf/backend/frontend/assets/wheat-hvVtAPlc.js +6 -0
  1718. vibe_surf/backend/frontend/assets/wheat-off-6d_oRYIW.js +6 -0
  1719. vibe_surf/backend/frontend/assets/whole-word-CMHbYgQ-.js +6 -0
  1720. vibe_surf/backend/frontend/assets/wifi-CRHAo2Lb.js +6 -0
  1721. vibe_surf/backend/frontend/assets/wifi-high-BTElqamm.js +6 -0
  1722. vibe_surf/backend/frontend/assets/wifi-low-BFBJvE2C.js +6 -0
  1723. vibe_surf/backend/frontend/assets/wifi-off-DL1S7f79.js +6 -0
  1724. vibe_surf/backend/frontend/assets/wifi-pen-FkLT18-y.js +6 -0
  1725. vibe_surf/backend/frontend/assets/wifi-zero-koQAfMYN.js +6 -0
  1726. vibe_surf/backend/frontend/assets/wind-CgQDM8yC.js +6 -0
  1727. vibe_surf/backend/frontend/assets/wind-arrow-down-ByQJVZNf.js +6 -0
  1728. vibe_surf/backend/frontend/assets/wine-kngKIYWK.js +6 -0
  1729. vibe_surf/backend/frontend/assets/wine-off-DaVVtkyG.js +6 -0
  1730. vibe_surf/backend/frontend/assets/workflow-BBHA5vqf.js +6 -0
  1731. vibe_surf/backend/frontend/assets/worm-D8rJAL-s.js +6 -0
  1732. vibe_surf/backend/frontend/assets/wrap-text-s4fkGxHY.js +6 -0
  1733. vibe_surf/backend/frontend/assets/wrench-CYzg6B-q.js +6 -0
  1734. vibe_surf/backend/frontend/assets/youtube-BIzMVpJA.js +6 -0
  1735. vibe_surf/backend/frontend/assets/zap-nyAdqt4o.js +6 -0
  1736. vibe_surf/backend/frontend/assets/zap-off-Aii1CEgj.js +6 -0
  1737. vibe_surf/backend/frontend/assets/zoom-in-BNWeSenu.js +6 -0
  1738. vibe_surf/backend/frontend/assets/zoom-out-Bd2vIq2c.js +6 -0
  1739. vibe_surf/backend/frontend/favicon.ico +0 -0
  1740. vibe_surf/backend/frontend/index.html +24 -0
  1741. vibe_surf/backend/frontend/manifest.json +31 -0
  1742. vibe_surf/backend/llm_config.py +43 -0
  1743. vibe_surf/backend/main.py +707 -130
  1744. vibe_surf/backend/shared_state.py +482 -26
  1745. vibe_surf/backend/utils/encryption.py +40 -4
  1746. vibe_surf/backend/utils/llm_factory.py +27 -2
  1747. vibe_surf/backend/utils/utils.py +42 -0
  1748. vibe_surf/browser/agen_browser_profile.py +5 -0
  1749. vibe_surf/browser/agent_browser_session.py +226 -119
  1750. vibe_surf/browser/browser_manager.py +5 -4
  1751. vibe_surf/browser/find_page_element.py +1100 -0
  1752. vibe_surf/browser/page_operations.py +222 -0
  1753. vibe_surf/browser/watchdogs/action_watchdog.py +1 -83
  1754. vibe_surf/browser/watchdogs/dom_watchdog.py +17 -5
  1755. vibe_surf/chrome_extension/background.js +96 -55
  1756. vibe_surf/chrome_extension/config.js +10 -1
  1757. vibe_surf/chrome_extension/manifest.json +15 -9
  1758. vibe_surf/chrome_extension/scripts/api-client.js +171 -11
  1759. vibe_surf/chrome_extension/scripts/file-manager.js +53 -12
  1760. vibe_surf/chrome_extension/scripts/main.js +46 -11
  1761. vibe_surf/chrome_extension/scripts/session-manager.js +30 -4
  1762. vibe_surf/chrome_extension/scripts/settings-general.js +513 -0
  1763. vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
  1764. vibe_surf/chrome_extension/scripts/settings-manager.js +72 -1730
  1765. vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
  1766. vibe_surf/chrome_extension/scripts/settings-workflow.js +2911 -0
  1767. vibe_surf/chrome_extension/scripts/ui-manager.js +1354 -503
  1768. vibe_surf/chrome_extension/scripts/version.js +3 -0
  1769. vibe_surf/chrome_extension/sidepanel.html +711 -18
  1770. vibe_surf/chrome_extension/styles/components.css +146 -0
  1771. vibe_surf/chrome_extension/styles/input.css +115 -0
  1772. vibe_surf/chrome_extension/styles/layout.css +2 -0
  1773. vibe_surf/chrome_extension/styles/settings-integrations.css +945 -0
  1774. vibe_surf/chrome_extension/styles/settings-modal.css +7 -3
  1775. vibe_surf/chrome_extension/styles/settings-responsive.css +37 -5
  1776. vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
  1777. vibe_surf/cli.py +154 -11
  1778. vibe_surf/langflow/__init__.py +0 -0
  1779. vibe_surf/langflow/__main__.py +954 -0
  1780. vibe_surf/langflow/alembic/README +1 -0
  1781. vibe_surf/langflow/alembic/env.py +124 -0
  1782. vibe_surf/langflow/alembic/script.py.mako +31 -0
  1783. vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
  1784. vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
  1785. vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  1786. vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
  1787. vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
  1788. vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
  1789. vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
  1790. vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
  1791. vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
  1792. vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
  1793. vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
  1794. vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
  1795. vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
  1796. vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
  1797. vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
  1798. vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
  1799. vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
  1800. vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
  1801. vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
  1802. vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
  1803. vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
  1804. vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
  1805. vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
  1806. vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
  1807. vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
  1808. vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
  1809. vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
  1810. vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
  1811. vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
  1812. vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
  1813. vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
  1814. vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
  1815. vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
  1816. vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
  1817. vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
  1818. vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
  1819. vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
  1820. vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
  1821. vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
  1822. vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
  1823. vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
  1824. vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
  1825. vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
  1826. vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
  1827. vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
  1828. vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
  1829. vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
  1830. vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
  1831. vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
  1832. vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
  1833. vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
  1834. vibe_surf/langflow/alembic.ini +113 -0
  1835. vibe_surf/langflow/api/__init__.py +5 -0
  1836. vibe_surf/langflow/api/build.py +557 -0
  1837. vibe_surf/langflow/api/disconnect.py +31 -0
  1838. vibe_surf/langflow/api/health_check_router.py +65 -0
  1839. vibe_surf/langflow/api/limited_background_tasks.py +29 -0
  1840. vibe_surf/langflow/api/log_router.py +103 -0
  1841. vibe_surf/langflow/api/router.py +63 -0
  1842. vibe_surf/langflow/api/schemas.py +14 -0
  1843. vibe_surf/langflow/api/utils.py +381 -0
  1844. vibe_surf/langflow/api/v1/__init__.py +41 -0
  1845. vibe_surf/langflow/api/v1/api_key.py +88 -0
  1846. vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
  1847. vibe_surf/langflow/api/v1/base.py +50 -0
  1848. vibe_surf/langflow/api/v1/callback.py +136 -0
  1849. vibe_surf/langflow/api/v1/chat.py +675 -0
  1850. vibe_surf/langflow/api/v1/endpoints.py +800 -0
  1851. vibe_surf/langflow/api/v1/files.py +193 -0
  1852. vibe_surf/langflow/api/v1/flows.py +579 -0
  1853. vibe_surf/langflow/api/v1/folders.py +95 -0
  1854. vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
  1855. vibe_surf/langflow/api/v1/login.py +166 -0
  1856. vibe_surf/langflow/api/v1/mcp.py +137 -0
  1857. vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
  1858. vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
  1859. vibe_surf/langflow/api/v1/monitor.py +203 -0
  1860. vibe_surf/langflow/api/v1/openai_responses.py +561 -0
  1861. vibe_surf/langflow/api/v1/projects.py +447 -0
  1862. vibe_surf/langflow/api/v1/schemas.py +488 -0
  1863. vibe_surf/langflow/api/v1/starter_projects.py +17 -0
  1864. vibe_surf/langflow/api/v1/store.py +182 -0
  1865. vibe_surf/langflow/api/v1/users.py +146 -0
  1866. vibe_surf/langflow/api/v1/validate.py +48 -0
  1867. vibe_surf/langflow/api/v1/variable.py +106 -0
  1868. vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
  1869. vibe_surf/langflow/api/v2/__init__.py +7 -0
  1870. vibe_surf/langflow/api/v2/files.py +532 -0
  1871. vibe_surf/langflow/api/v2/mcp.py +330 -0
  1872. vibe_surf/langflow/base/__init__.py +0 -0
  1873. vibe_surf/langflow/base/agents/__init__.py +0 -0
  1874. vibe_surf/langflow/base/agents/agent.py +267 -0
  1875. vibe_surf/langflow/base/agents/callback.py +130 -0
  1876. vibe_surf/langflow/base/agents/context.py +109 -0
  1877. vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
  1878. vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
  1879. vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
  1880. vibe_surf/langflow/base/agents/default_prompts.py +23 -0
  1881. vibe_surf/langflow/base/agents/errors.py +15 -0
  1882. vibe_surf/langflow/base/agents/events.py +346 -0
  1883. vibe_surf/langflow/base/agents/utils.py +205 -0
  1884. vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
  1885. vibe_surf/langflow/base/astra_assistants/util.py +171 -0
  1886. vibe_surf/langflow/base/chains/__init__.py +0 -0
  1887. vibe_surf/langflow/base/chains/model.py +19 -0
  1888. vibe_surf/langflow/base/composio/__init__.py +0 -0
  1889. vibe_surf/langflow/base/composio/composio_base.py +1301 -0
  1890. vibe_surf/langflow/base/compressors/__init__.py +0 -0
  1891. vibe_surf/langflow/base/compressors/model.py +60 -0
  1892. vibe_surf/langflow/base/constants.py +46 -0
  1893. vibe_surf/langflow/base/curl/__init__.py +0 -0
  1894. vibe_surf/langflow/base/curl/parse.py +188 -0
  1895. vibe_surf/langflow/base/data/__init__.py +5 -0
  1896. vibe_surf/langflow/base/data/base_file.py +698 -0
  1897. vibe_surf/langflow/base/data/docling_utils.py +280 -0
  1898. vibe_surf/langflow/base/data/utils.py +198 -0
  1899. vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
  1900. vibe_surf/langflow/base/document_transformers/model.py +43 -0
  1901. vibe_surf/langflow/base/embeddings/__init__.py +0 -0
  1902. vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
  1903. vibe_surf/langflow/base/embeddings/model.py +26 -0
  1904. vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
  1905. vibe_surf/langflow/base/flow_processing/utils.py +86 -0
  1906. vibe_surf/langflow/base/huggingface/__init__.py +0 -0
  1907. vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
  1908. vibe_surf/langflow/base/io/__init__.py +0 -0
  1909. vibe_surf/langflow/base/io/chat.py +20 -0
  1910. vibe_surf/langflow/base/io/text.py +22 -0
  1911. vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
  1912. vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
  1913. vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
  1914. vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
  1915. vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
  1916. vibe_surf/langflow/base/langwatch/__init__.py +0 -0
  1917. vibe_surf/langflow/base/langwatch/utils.py +18 -0
  1918. vibe_surf/langflow/base/mcp/__init__.py +0 -0
  1919. vibe_surf/langflow/base/mcp/constants.py +2 -0
  1920. vibe_surf/langflow/base/mcp/util.py +1544 -0
  1921. vibe_surf/langflow/base/memory/__init__.py +0 -0
  1922. vibe_surf/langflow/base/memory/memory.py +49 -0
  1923. vibe_surf/langflow/base/memory/model.py +38 -0
  1924. vibe_surf/langflow/base/models/__init__.py +3 -0
  1925. vibe_surf/langflow/base/models/aiml_constants.py +51 -0
  1926. vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
  1927. vibe_surf/langflow/base/models/aws_constants.py +151 -0
  1928. vibe_surf/langflow/base/models/chat_result.py +76 -0
  1929. vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
  1930. vibe_surf/langflow/base/models/groq_constants.py +134 -0
  1931. vibe_surf/langflow/base/models/model.py +375 -0
  1932. vibe_surf/langflow/base/models/model_input_constants.py +299 -0
  1933. vibe_surf/langflow/base/models/model_metadata.py +41 -0
  1934. vibe_surf/langflow/base/models/model_utils.py +8 -0
  1935. vibe_surf/langflow/base/models/novita_constants.py +35 -0
  1936. vibe_surf/langflow/base/models/ollama_constants.py +49 -0
  1937. vibe_surf/langflow/base/models/openai_constants.py +121 -0
  1938. vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
  1939. vibe_surf/langflow/base/processing/__init__.py +0 -0
  1940. vibe_surf/langflow/base/prompts/__init__.py +0 -0
  1941. vibe_surf/langflow/base/prompts/api_utils.py +224 -0
  1942. vibe_surf/langflow/base/prompts/utils.py +61 -0
  1943. vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
  1944. vibe_surf/langflow/base/textsplitters/model.py +28 -0
  1945. vibe_surf/langflow/base/tools/__init__.py +0 -0
  1946. vibe_surf/langflow/base/tools/base.py +26 -0
  1947. vibe_surf/langflow/base/tools/component_tool.py +324 -0
  1948. vibe_surf/langflow/base/tools/constants.py +49 -0
  1949. vibe_surf/langflow/base/tools/flow_tool.py +131 -0
  1950. vibe_surf/langflow/base/tools/run_flow.py +227 -0
  1951. vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
  1952. vibe_surf/langflow/base/vectorstores/model.py +193 -0
  1953. vibe_surf/langflow/base/vectorstores/utils.py +22 -0
  1954. vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
  1955. vibe_surf/langflow/cli/__init__.py +0 -0
  1956. vibe_surf/langflow/cli/progress.py +233 -0
  1957. vibe_surf/langflow/components/FAISS/__init__.py +34 -0
  1958. vibe_surf/langflow/components/FAISS/faiss.py +111 -0
  1959. vibe_surf/langflow/components/Notion/__init__.py +19 -0
  1960. vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
  1961. vibe_surf/langflow/components/Notion/create_page.py +94 -0
  1962. vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
  1963. vibe_surf/langflow/components/Notion/list_pages.py +122 -0
  1964. vibe_surf/langflow/components/Notion/list_users.py +77 -0
  1965. vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
  1966. vibe_surf/langflow/components/Notion/search.py +111 -0
  1967. vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
  1968. vibe_surf/langflow/components/__init__.py +270 -0
  1969. vibe_surf/langflow/components/_importing.py +37 -0
  1970. vibe_surf/langflow/components/agentql/__init__.py +3 -0
  1971. vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
  1972. vibe_surf/langflow/components/agents/__init__.py +4 -0
  1973. vibe_surf/langflow/components/agents/agent.py +608 -0
  1974. vibe_surf/langflow/components/agents/mcp_component.py +511 -0
  1975. vibe_surf/langflow/components/aiml/__init__.py +37 -0
  1976. vibe_surf/langflow/components/aiml/aiml.py +115 -0
  1977. vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
  1978. vibe_surf/langflow/components/amazon/__init__.py +36 -0
  1979. vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
  1980. vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
  1981. vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
  1982. vibe_surf/langflow/components/anthropic/__init__.py +34 -0
  1983. vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
  1984. vibe_surf/langflow/components/apify/__init__.py +5 -0
  1985. vibe_surf/langflow/components/apify/apify_actor.py +325 -0
  1986. vibe_surf/langflow/components/arxiv/__init__.py +3 -0
  1987. vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
  1988. vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
  1989. vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  1990. vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
  1991. vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  1992. vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  1993. vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
  1994. vibe_surf/langflow/components/azure/__init__.py +37 -0
  1995. vibe_surf/langflow/components/azure/azure_openai.py +95 -0
  1996. vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
  1997. vibe_surf/langflow/components/baidu/__init__.py +32 -0
  1998. vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
  1999. vibe_surf/langflow/components/bing/__init__.py +3 -0
  2000. vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
  2001. vibe_surf/langflow/components/cassandra/__init__.py +40 -0
  2002. vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
  2003. vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
  2004. vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
  2005. vibe_surf/langflow/components/chains/__init__.py +0 -0
  2006. vibe_surf/langflow/components/chroma/__init__.py +34 -0
  2007. vibe_surf/langflow/components/chroma/chroma.py +169 -0
  2008. vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
  2009. vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
  2010. vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  2011. vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
  2012. vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
  2013. vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
  2014. vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
  2015. vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
  2016. vibe_surf/langflow/components/cohere/__init__.py +40 -0
  2017. vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
  2018. vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
  2019. vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
  2020. vibe_surf/langflow/components/composio/__init__.py +73 -0
  2021. vibe_surf/langflow/components/composio/composio_api.py +279 -0
  2022. vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
  2023. vibe_surf/langflow/components/composio/github_composio.py +11 -0
  2024. vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
  2025. vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
  2026. vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
  2027. vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
  2028. vibe_surf/langflow/components/composio/linear_composio.py +11 -0
  2029. vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
  2030. vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
  2031. vibe_surf/langflow/components/composio/slack_composio.py +11 -0
  2032. vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
  2033. vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
  2034. vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
  2035. vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
  2036. vibe_surf/langflow/components/confluence/__init__.py +3 -0
  2037. vibe_surf/langflow/components/confluence/confluence.py +84 -0
  2038. vibe_surf/langflow/components/couchbase/__init__.py +34 -0
  2039. vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
  2040. vibe_surf/langflow/components/crewai/__init__.py +49 -0
  2041. vibe_surf/langflow/components/crewai/crewai.py +108 -0
  2042. vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
  2043. vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
  2044. vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
  2045. vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
  2046. vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
  2047. vibe_surf/langflow/components/custom_component/__init__.py +34 -0
  2048. vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
  2049. vibe_surf/langflow/components/data/__init__.py +25 -0
  2050. vibe_surf/langflow/components/data/api_request.py +555 -0
  2051. vibe_surf/langflow/components/data/csv_to_data.py +96 -0
  2052. vibe_surf/langflow/components/data/directory.py +113 -0
  2053. vibe_surf/langflow/components/data/file.py +632 -0
  2054. vibe_surf/langflow/components/data/json_to_data.py +99 -0
  2055. vibe_surf/langflow/components/data/news_search.py +164 -0
  2056. vibe_surf/langflow/components/data/rss.py +69 -0
  2057. vibe_surf/langflow/components/data/sql_executor.py +99 -0
  2058. vibe_surf/langflow/components/data/url.py +299 -0
  2059. vibe_surf/langflow/components/data/web_search.py +112 -0
  2060. vibe_surf/langflow/components/data/webhook.py +56 -0
  2061. vibe_surf/langflow/components/datastax/__init__.py +70 -0
  2062. vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
  2063. vibe_surf/langflow/components/datastax/astra_db.py +68 -0
  2064. vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
  2065. vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
  2066. vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
  2067. vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
  2068. vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
  2069. vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
  2070. vibe_surf/langflow/components/datastax/create_thread.py +32 -0
  2071. vibe_surf/langflow/components/datastax/dotenv.py +35 -0
  2072. vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
  2073. vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
  2074. vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
  2075. vibe_surf/langflow/components/datastax/hcd.py +314 -0
  2076. vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
  2077. vibe_surf/langflow/components/datastax/run.py +89 -0
  2078. vibe_surf/langflow/components/deactivated/__init__.py +19 -0
  2079. vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
  2080. vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
  2081. vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
  2082. vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
  2083. vibe_surf/langflow/components/deactivated/embed.py +16 -0
  2084. vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
  2085. vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
  2086. vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
  2087. vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
  2088. vibe_surf/langflow/components/deactivated/message.py +37 -0
  2089. vibe_surf/langflow/components/deactivated/metal.py +54 -0
  2090. vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
  2091. vibe_surf/langflow/components/deactivated/retriever.py +43 -0
  2092. vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
  2093. vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
  2094. vibe_surf/langflow/components/deactivated/split_text.py +63 -0
  2095. vibe_surf/langflow/components/deactivated/store_message.py +24 -0
  2096. vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
  2097. vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
  2098. vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
  2099. vibe_surf/langflow/components/deepseek/__init__.py +34 -0
  2100. vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
  2101. vibe_surf/langflow/components/docling/__init__.py +43 -0
  2102. vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
  2103. vibe_surf/langflow/components/docling/docling_inline.py +249 -0
  2104. vibe_surf/langflow/components/docling/docling_remote.py +192 -0
  2105. vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
  2106. vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
  2107. vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
  2108. vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  2109. vibe_surf/langflow/components/elastic/__init__.py +37 -0
  2110. vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
  2111. vibe_surf/langflow/components/elastic/opensearch.py +243 -0
  2112. vibe_surf/langflow/components/embeddings/__init__.py +37 -0
  2113. vibe_surf/langflow/components/embeddings/similarity.py +77 -0
  2114. vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
  2115. vibe_surf/langflow/components/exa/__init__.py +3 -0
  2116. vibe_surf/langflow/components/exa/exa_search.py +68 -0
  2117. vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
  2118. vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
  2119. vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
  2120. vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
  2121. vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
  2122. vibe_surf/langflow/components/git/__init__.py +4 -0
  2123. vibe_surf/langflow/components/git/git.py +262 -0
  2124. vibe_surf/langflow/components/git/gitextractor.py +196 -0
  2125. vibe_surf/langflow/components/glean/__init__.py +3 -0
  2126. vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
  2127. vibe_surf/langflow/components/google/__init__.py +17 -0
  2128. vibe_surf/langflow/components/google/gmail.py +193 -0
  2129. vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
  2130. vibe_surf/langflow/components/google/google_drive.py +92 -0
  2131. vibe_surf/langflow/components/google/google_drive_search.py +152 -0
  2132. vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
  2133. vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
  2134. vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
  2135. vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
  2136. vibe_surf/langflow/components/groq/__init__.py +34 -0
  2137. vibe_surf/langflow/components/groq/groq.py +140 -0
  2138. vibe_surf/langflow/components/helpers/__init__.py +52 -0
  2139. vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
  2140. vibe_surf/langflow/components/helpers/create_list.py +40 -0
  2141. vibe_surf/langflow/components/helpers/current_date.py +42 -0
  2142. vibe_surf/langflow/components/helpers/id_generator.py +42 -0
  2143. vibe_surf/langflow/components/helpers/memory.py +253 -0
  2144. vibe_surf/langflow/components/helpers/output_parser.py +46 -0
  2145. vibe_surf/langflow/components/helpers/store_message.py +91 -0
  2146. vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
  2147. vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
  2148. vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
  2149. vibe_surf/langflow/components/huggingface/__init__.py +37 -0
  2150. vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
  2151. vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
  2152. vibe_surf/langflow/components/ibm/__init__.py +34 -0
  2153. vibe_surf/langflow/components/ibm/watsonx.py +203 -0
  2154. vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
  2155. vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
  2156. vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
  2157. vibe_surf/langflow/components/input_output/__init__.py +38 -0
  2158. vibe_surf/langflow/components/input_output/chat.py +99 -0
  2159. vibe_surf/langflow/components/input_output/chat_output.py +169 -0
  2160. vibe_surf/langflow/components/input_output/text.py +27 -0
  2161. vibe_surf/langflow/components/input_output/text_output.py +29 -0
  2162. vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
  2163. vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
  2164. vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
  2165. vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
  2166. vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
  2167. vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
  2168. vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
  2169. vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
  2170. vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
  2171. vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
  2172. vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
  2173. vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
  2174. vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
  2175. vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
  2176. vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
  2177. vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
  2178. vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
  2179. vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
  2180. vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
  2181. vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
  2182. vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
  2183. vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
  2184. vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
  2185. vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
  2186. vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
  2187. vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
  2188. vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
  2189. vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
  2190. vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
  2191. vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
  2192. vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
  2193. vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
  2194. vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
  2195. vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
  2196. vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
  2197. vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
  2198. vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
  2199. vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
  2200. vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
  2201. vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
  2202. vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
  2203. vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
  2204. vibe_surf/langflow/components/langwatch/__init__.py +3 -0
  2205. vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
  2206. vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
  2207. vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
  2208. vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
  2209. vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
  2210. vibe_surf/langflow/components/logic/__init__.py +52 -0
  2211. vibe_surf/langflow/components/logic/conditional_router.py +208 -0
  2212. vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
  2213. vibe_surf/langflow/components/logic/flow_tool.py +111 -0
  2214. vibe_surf/langflow/components/logic/listen.py +29 -0
  2215. vibe_surf/langflow/components/logic/loop.py +125 -0
  2216. vibe_surf/langflow/components/logic/notify.py +88 -0
  2217. vibe_surf/langflow/components/logic/pass_message.py +36 -0
  2218. vibe_surf/langflow/components/logic/run_flow.py +71 -0
  2219. vibe_surf/langflow/components/logic/sub_flow.py +115 -0
  2220. vibe_surf/langflow/components/maritalk/__init__.py +32 -0
  2221. vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
  2222. vibe_surf/langflow/components/mem0/__init__.py +3 -0
  2223. vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
  2224. vibe_surf/langflow/components/milvus/__init__.py +34 -0
  2225. vibe_surf/langflow/components/milvus/milvus.py +115 -0
  2226. vibe_surf/langflow/components/mistral/__init__.py +37 -0
  2227. vibe_surf/langflow/components/mistral/mistral.py +114 -0
  2228. vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
  2229. vibe_surf/langflow/components/models/__init__.py +34 -0
  2230. vibe_surf/langflow/components/models/embedding_model.py +114 -0
  2231. vibe_surf/langflow/components/models/language_model.py +144 -0
  2232. vibe_surf/langflow/components/mongodb/__init__.py +34 -0
  2233. vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
  2234. vibe_surf/langflow/components/needle/__init__.py +3 -0
  2235. vibe_surf/langflow/components/needle/needle.py +104 -0
  2236. vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
  2237. vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
  2238. vibe_surf/langflow/components/novita/__init__.py +32 -0
  2239. vibe_surf/langflow/components/novita/novita.py +130 -0
  2240. vibe_surf/langflow/components/nvidia/__init__.py +57 -0
  2241. vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
  2242. vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
  2243. vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
  2244. vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
  2245. vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
  2246. vibe_surf/langflow/components/olivya/__init__.py +3 -0
  2247. vibe_surf/langflow/components/olivya/olivya.py +116 -0
  2248. vibe_surf/langflow/components/ollama/__init__.py +37 -0
  2249. vibe_surf/langflow/components/ollama/ollama.py +330 -0
  2250. vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
  2251. vibe_surf/langflow/components/openai/__init__.py +37 -0
  2252. vibe_surf/langflow/components/openai/openai.py +100 -0
  2253. vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
  2254. vibe_surf/langflow/components/openrouter/__init__.py +32 -0
  2255. vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
  2256. vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
  2257. vibe_surf/langflow/components/perplexity/__init__.py +34 -0
  2258. vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
  2259. vibe_surf/langflow/components/pgvector/__init__.py +34 -0
  2260. vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
  2261. vibe_surf/langflow/components/pinecone/__init__.py +34 -0
  2262. vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
  2263. vibe_surf/langflow/components/processing/__init__.py +117 -0
  2264. vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
  2265. vibe_surf/langflow/components/processing/batch_run.py +205 -0
  2266. vibe_surf/langflow/components/processing/combine_text.py +40 -0
  2267. vibe_surf/langflow/components/processing/converter.py +150 -0
  2268. vibe_surf/langflow/components/processing/create_data.py +111 -0
  2269. vibe_surf/langflow/components/processing/data_operations.py +438 -0
  2270. vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
  2271. vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
  2272. vibe_surf/langflow/components/processing/extract_key.py +54 -0
  2273. vibe_surf/langflow/components/processing/filter_data.py +43 -0
  2274. vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
  2275. vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
  2276. vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
  2277. vibe_surf/langflow/components/processing/llm_router.py +499 -0
  2278. vibe_surf/langflow/components/processing/merge_data.py +91 -0
  2279. vibe_surf/langflow/components/processing/message_to_data.py +37 -0
  2280. vibe_surf/langflow/components/processing/parse_data.py +71 -0
  2281. vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
  2282. vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
  2283. vibe_surf/langflow/components/processing/parser.py +143 -0
  2284. vibe_surf/langflow/components/processing/prompt.py +67 -0
  2285. vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
  2286. vibe_surf/langflow/components/processing/regex.py +83 -0
  2287. vibe_surf/langflow/components/processing/save_file.py +208 -0
  2288. vibe_surf/langflow/components/processing/select_data.py +49 -0
  2289. vibe_surf/langflow/components/processing/split_text.py +141 -0
  2290. vibe_surf/langflow/components/processing/structured_output.py +206 -0
  2291. vibe_surf/langflow/components/processing/update_data.py +161 -0
  2292. vibe_surf/langflow/components/qdrant/__init__.py +34 -0
  2293. vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
  2294. vibe_surf/langflow/components/redis/__init__.py +37 -0
  2295. vibe_surf/langflow/components/redis/redis.py +89 -0
  2296. vibe_surf/langflow/components/redis/redis_chat.py +43 -0
  2297. vibe_surf/langflow/components/sambanova/__init__.py +32 -0
  2298. vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
  2299. vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
  2300. vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  2301. vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
  2302. vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  2303. vibe_surf/langflow/components/searchapi/__init__.py +36 -0
  2304. vibe_surf/langflow/components/searchapi/search.py +79 -0
  2305. vibe_surf/langflow/components/serpapi/__init__.py +3 -0
  2306. vibe_surf/langflow/components/serpapi/serp.py +115 -0
  2307. vibe_surf/langflow/components/serper/__init__.py +3 -0
  2308. vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
  2309. vibe_surf/langflow/components/supabase/__init__.py +37 -0
  2310. vibe_surf/langflow/components/supabase/supabase.py +76 -0
  2311. vibe_surf/langflow/components/tavily/__init__.py +4 -0
  2312. vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
  2313. vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
  2314. vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
  2315. vibe_surf/langflow/components/toolkits/__init__.py +0 -0
  2316. vibe_surf/langflow/components/tools/__init__.py +66 -0
  2317. vibe_surf/langflow/components/tools/calculator.py +104 -0
  2318. vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
  2319. vibe_surf/langflow/components/tools/python_repl.py +98 -0
  2320. vibe_surf/langflow/components/tools/search_api.py +88 -0
  2321. vibe_surf/langflow/components/tools/searxng.py +145 -0
  2322. vibe_surf/langflow/components/tools/serp_api.py +120 -0
  2323. vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
  2324. vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
  2325. vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
  2326. vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
  2327. vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
  2328. vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
  2329. vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
  2330. vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
  2331. vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
  2332. vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  2333. vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
  2334. vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
  2335. vibe_surf/langflow/components/unstructured/__init__.py +3 -0
  2336. vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
  2337. vibe_surf/langflow/components/upstash/__init__.py +34 -0
  2338. vibe_surf/langflow/components/upstash/upstash.py +124 -0
  2339. vibe_surf/langflow/components/vectara/__init__.py +37 -0
  2340. vibe_surf/langflow/components/vectara/vectara.py +97 -0
  2341. vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
  2342. vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
  2343. vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
  2344. vibe_surf/langflow/components/vertexai/__init__.py +37 -0
  2345. vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
  2346. vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
  2347. vibe_surf/langflow/components/weaviate/__init__.py +34 -0
  2348. vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
  2349. vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
  2350. vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
  2351. vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
  2352. vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
  2353. vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
  2354. vibe_surf/langflow/components/xai/__init__.py +32 -0
  2355. vibe_surf/langflow/components/xai/xai.py +167 -0
  2356. vibe_surf/langflow/components/youtube/__init__.py +52 -0
  2357. vibe_surf/langflow/components/youtube/channel.py +227 -0
  2358. vibe_surf/langflow/components/youtube/comments.py +231 -0
  2359. vibe_surf/langflow/components/youtube/playlist.py +33 -0
  2360. vibe_surf/langflow/components/youtube/search.py +120 -0
  2361. vibe_surf/langflow/components/youtube/trending.py +285 -0
  2362. vibe_surf/langflow/components/youtube/video_details.py +263 -0
  2363. vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
  2364. vibe_surf/langflow/components/zep/__init__.py +3 -0
  2365. vibe_surf/langflow/components/zep/zep.py +45 -0
  2366. vibe_surf/langflow/core/__init__.py +0 -0
  2367. vibe_surf/langflow/core/celery_app.py +11 -0
  2368. vibe_surf/langflow/core/celeryconfig.py +18 -0
  2369. vibe_surf/langflow/custom/__init__.py +4 -0
  2370. vibe_surf/langflow/custom/attributes.py +87 -0
  2371. vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
  2372. vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
  2373. vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
  2374. vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
  2375. vibe_surf/langflow/custom/custom_component/component.py +1742 -0
  2376. vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
  2377. vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
  2378. vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
  2379. vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
  2380. vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
  2381. vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
  2382. vibe_surf/langflow/custom/eval.py +12 -0
  2383. vibe_surf/langflow/custom/schema.py +32 -0
  2384. vibe_surf/langflow/custom/tree_visitor.py +21 -0
  2385. vibe_surf/langflow/custom/utils.py +868 -0
  2386. vibe_surf/langflow/events/__init__.py +0 -0
  2387. vibe_surf/langflow/events/event_manager.py +108 -0
  2388. vibe_surf/langflow/exceptions/__init__.py +0 -0
  2389. vibe_surf/langflow/exceptions/api.py +34 -0
  2390. vibe_surf/langflow/exceptions/component.py +17 -0
  2391. vibe_surf/langflow/exceptions/serialization.py +56 -0
  2392. vibe_surf/langflow/field_typing/__init__.py +91 -0
  2393. vibe_surf/langflow/field_typing/constants.py +137 -0
  2394. vibe_surf/langflow/field_typing/range_spec.py +33 -0
  2395. vibe_surf/langflow/graph/__init__.py +6 -0
  2396. vibe_surf/langflow/graph/edge/__init__.py +0 -0
  2397. vibe_surf/langflow/graph/edge/base.py +277 -0
  2398. vibe_surf/langflow/graph/edge/schema.py +119 -0
  2399. vibe_surf/langflow/graph/edge/utils.py +0 -0
  2400. vibe_surf/langflow/graph/graph/__init__.py +0 -0
  2401. vibe_surf/langflow/graph/graph/ascii.py +202 -0
  2402. vibe_surf/langflow/graph/graph/base.py +2242 -0
  2403. vibe_surf/langflow/graph/graph/constants.py +58 -0
  2404. vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
  2405. vibe_surf/langflow/graph/graph/schema.py +53 -0
  2406. vibe_surf/langflow/graph/graph/state_model.py +66 -0
  2407. vibe_surf/langflow/graph/graph/utils.py +1024 -0
  2408. vibe_surf/langflow/graph/schema.py +75 -0
  2409. vibe_surf/langflow/graph/state/__init__.py +0 -0
  2410. vibe_surf/langflow/graph/state/model.py +237 -0
  2411. vibe_surf/langflow/graph/utils.py +229 -0
  2412. vibe_surf/langflow/graph/vertex/__init__.py +0 -0
  2413. vibe_surf/langflow/graph/vertex/base.py +811 -0
  2414. vibe_surf/langflow/graph/vertex/constants.py +0 -0
  2415. vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
  2416. vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
  2417. vibe_surf/langflow/graph/vertex/schema.py +26 -0
  2418. vibe_surf/langflow/graph/vertex/utils.py +19 -0
  2419. vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
  2420. vibe_surf/langflow/helpers/__init__.py +3 -0
  2421. vibe_surf/langflow/helpers/base_model.py +71 -0
  2422. vibe_surf/langflow/helpers/custom.py +13 -0
  2423. vibe_surf/langflow/helpers/data.py +206 -0
  2424. vibe_surf/langflow/helpers/flow.py +359 -0
  2425. vibe_surf/langflow/helpers/folders.py +26 -0
  2426. vibe_surf/langflow/helpers/user.py +27 -0
  2427. vibe_surf/langflow/initial_setup/__init__.py +0 -0
  2428. vibe_surf/langflow/initial_setup/constants.py +2 -0
  2429. vibe_surf/langflow/initial_setup/load.py +21 -0
  2430. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
  2431. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
  2432. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
  2433. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
  2434. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
  2435. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
  2436. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
  2437. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
  2438. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
  2439. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
  2440. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
  2441. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
  2442. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
  2443. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
  2444. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
  2445. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
  2446. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
  2447. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
  2448. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
  2449. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
  2450. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
  2451. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
  2452. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
  2453. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
  2454. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
  2455. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
  2456. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
  2457. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
  2458. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
  2459. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
  2460. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
  2461. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
  2462. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
  2463. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
  2464. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
  2465. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
  2466. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
  2467. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
  2468. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
  2469. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
  2470. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
  2471. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
  2472. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
  2473. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
  2474. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
  2475. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
  2476. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
  2477. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
  2478. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
  2479. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
  2480. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
  2481. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
  2482. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
  2483. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
  2484. vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
  2485. vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
  2486. vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
  2487. vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
  2488. vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
  2489. vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
  2490. vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
  2491. vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
  2492. vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
  2493. vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
  2494. vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
  2495. vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
  2496. vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
  2497. vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
  2498. vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
  2499. vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
  2500. vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
  2501. vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
  2502. vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
  2503. vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
  2504. vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
  2505. vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
  2506. vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
  2507. vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
  2508. vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
  2509. vibe_surf/langflow/initial_setup/setup.py +1108 -0
  2510. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
  2511. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
  2512. vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
  2513. vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
  2514. vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
  2515. vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
  2516. vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
  2517. vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
  2518. vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
  2519. vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
  2520. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
  2521. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
  2522. vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
  2523. vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
  2524. vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
  2525. vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
  2526. vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
  2527. vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
  2528. vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
  2529. vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
  2530. vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
  2531. vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1580 -0
  2532. vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
  2533. vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
  2534. vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
  2535. vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
  2536. vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
  2537. vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
  2538. vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
  2539. vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
  2540. vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
  2541. vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
  2542. vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
  2543. vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
  2544. vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
  2545. vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
  2546. vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
  2547. vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
  2548. vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
  2549. vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
  2550. vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
  2551. vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
  2552. vibe_surf/langflow/inputs/__init__.py +68 -0
  2553. vibe_surf/langflow/inputs/constants.py +2 -0
  2554. vibe_surf/langflow/inputs/input_mixin.py +312 -0
  2555. vibe_surf/langflow/inputs/inputs.py +706 -0
  2556. vibe_surf/langflow/inputs/utils.py +32 -0
  2557. vibe_surf/langflow/inputs/validators.py +19 -0
  2558. vibe_surf/langflow/interface/__init__.py +0 -0
  2559. vibe_surf/langflow/interface/components.py +496 -0
  2560. vibe_surf/langflow/interface/importing/__init__.py +5 -0
  2561. vibe_surf/langflow/interface/importing/utils.py +39 -0
  2562. vibe_surf/langflow/interface/initialize/__init__.py +3 -0
  2563. vibe_surf/langflow/interface/initialize/loading.py +200 -0
  2564. vibe_surf/langflow/interface/listing.py +26 -0
  2565. vibe_surf/langflow/interface/run.py +45 -0
  2566. vibe_surf/langflow/interface/utils.py +112 -0
  2567. vibe_surf/langflow/io/__init__.py +63 -0
  2568. vibe_surf/langflow/io/schema.py +304 -0
  2569. vibe_surf/langflow/langflow_launcher.py +51 -0
  2570. vibe_surf/langflow/legacy_custom/__init__.py +0 -0
  2571. vibe_surf/langflow/legacy_custom/customs.py +16 -0
  2572. vibe_surf/langflow/load/__init__.py +12 -0
  2573. vibe_surf/langflow/load/load.py +250 -0
  2574. vibe_surf/langflow/load/utils.py +126 -0
  2575. vibe_surf/langflow/logging/__init__.py +4 -0
  2576. vibe_surf/langflow/logging/logger.py +407 -0
  2577. vibe_surf/langflow/logging/setup.py +16 -0
  2578. vibe_surf/langflow/main.py +550 -0
  2579. vibe_surf/langflow/memory.py +326 -0
  2580. vibe_surf/langflow/middleware.py +59 -0
  2581. vibe_surf/langflow/processing/__init__.py +0 -0
  2582. vibe_surf/langflow/processing/process.py +216 -0
  2583. vibe_surf/langflow/processing/utils.py +25 -0
  2584. vibe_surf/langflow/py.typed +0 -0
  2585. vibe_surf/langflow/schema/__init__.py +6 -0
  2586. vibe_surf/langflow/schema/artifact.py +82 -0
  2587. vibe_surf/langflow/schema/content_block.py +62 -0
  2588. vibe_surf/langflow/schema/content_types.py +91 -0
  2589. vibe_surf/langflow/schema/data.py +306 -0
  2590. vibe_surf/langflow/schema/dataframe.py +206 -0
  2591. vibe_surf/langflow/schema/dotdict.py +71 -0
  2592. vibe_surf/langflow/schema/encoders.py +13 -0
  2593. vibe_surf/langflow/schema/graph.py +47 -0
  2594. vibe_surf/langflow/schema/image.py +128 -0
  2595. vibe_surf/langflow/schema/log.py +33 -0
  2596. vibe_surf/langflow/schema/message.py +483 -0
  2597. vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
  2598. vibe_surf/langflow/schema/playground_events.py +182 -0
  2599. vibe_surf/langflow/schema/properties.py +39 -0
  2600. vibe_surf/langflow/schema/schema.py +121 -0
  2601. vibe_surf/langflow/schema/serialize.py +14 -0
  2602. vibe_surf/langflow/schema/table.py +140 -0
  2603. vibe_surf/langflow/schema/validators.py +114 -0
  2604. vibe_surf/langflow/serialization/__init__.py +3 -0
  2605. vibe_surf/langflow/serialization/constants.py +2 -0
  2606. vibe_surf/langflow/serialization/serialization.py +320 -0
  2607. vibe_surf/langflow/server.py +70 -0
  2608. vibe_surf/langflow/services/__init__.py +4 -0
  2609. vibe_surf/langflow/services/auth/__init__.py +0 -0
  2610. vibe_surf/langflow/services/auth/factory.py +15 -0
  2611. vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
  2612. vibe_surf/langflow/services/auth/service.py +15 -0
  2613. vibe_surf/langflow/services/auth/utils.py +583 -0
  2614. vibe_surf/langflow/services/base.py +28 -0
  2615. vibe_surf/langflow/services/cache/__init__.py +12 -0
  2616. vibe_surf/langflow/services/cache/base.py +183 -0
  2617. vibe_surf/langflow/services/cache/disk.py +95 -0
  2618. vibe_surf/langflow/services/cache/factory.py +44 -0
  2619. vibe_surf/langflow/services/cache/service.py +355 -0
  2620. vibe_surf/langflow/services/cache/utils.py +169 -0
  2621. vibe_surf/langflow/services/chat/__init__.py +0 -0
  2622. vibe_surf/langflow/services/chat/cache.py +150 -0
  2623. vibe_surf/langflow/services/chat/config.py +2 -0
  2624. vibe_surf/langflow/services/chat/factory.py +11 -0
  2625. vibe_surf/langflow/services/chat/schema.py +10 -0
  2626. vibe_surf/langflow/services/chat/service.py +67 -0
  2627. vibe_surf/langflow/services/database/__init__.py +0 -0
  2628. vibe_surf/langflow/services/database/factory.py +21 -0
  2629. vibe_surf/langflow/services/database/models/__init__.py +19 -0
  2630. vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
  2631. vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
  2632. vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
  2633. vibe_surf/langflow/services/database/models/base.py +17 -0
  2634. vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
  2635. vibe_surf/langflow/services/database/models/file/crud.py +14 -0
  2636. vibe_surf/langflow/services/database/models/file/model.py +19 -0
  2637. vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
  2638. vibe_surf/langflow/services/database/models/flow/model.py +283 -0
  2639. vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
  2640. vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
  2641. vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
  2642. vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
  2643. vibe_surf/langflow/services/database/models/folder/model.py +61 -0
  2644. vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
  2645. vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
  2646. vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
  2647. vibe_surf/langflow/services/database/models/message/crud.py +26 -0
  2648. vibe_surf/langflow/services/database/models/message/model.py +182 -0
  2649. vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
  2650. vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
  2651. vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
  2652. vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
  2653. vibe_surf/langflow/services/database/models/user/crud.py +69 -0
  2654. vibe_surf/langflow/services/database/models/user/model.py +82 -0
  2655. vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
  2656. vibe_surf/langflow/services/database/models/variable/model.py +73 -0
  2657. vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
  2658. vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
  2659. vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
  2660. vibe_surf/langflow/services/database/service.py +485 -0
  2661. vibe_surf/langflow/services/database/session.py +62 -0
  2662. vibe_surf/langflow/services/database/utils.py +88 -0
  2663. vibe_surf/langflow/services/deps.py +259 -0
  2664. vibe_surf/langflow/services/factory.py +88 -0
  2665. vibe_surf/langflow/services/flow/__init__.py +0 -0
  2666. vibe_surf/langflow/services/flow/flow_runner.py +265 -0
  2667. vibe_surf/langflow/services/job_queue/__init__.py +0 -0
  2668. vibe_surf/langflow/services/job_queue/factory.py +11 -0
  2669. vibe_surf/langflow/services/job_queue/service.py +328 -0
  2670. vibe_surf/langflow/services/manager.py +149 -0
  2671. vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
  2672. vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
  2673. vibe_surf/langflow/services/mcp_composer/service.py +591 -0
  2674. vibe_surf/langflow/services/schema.py +23 -0
  2675. vibe_surf/langflow/services/session/__init__.py +0 -0
  2676. vibe_surf/langflow/services/session/factory.py +18 -0
  2677. vibe_surf/langflow/services/session/service.py +63 -0
  2678. vibe_surf/langflow/services/session/utils.py +18 -0
  2679. vibe_surf/langflow/services/settings/__init__.py +3 -0
  2680. vibe_surf/langflow/services/settings/auth.py +147 -0
  2681. vibe_surf/langflow/services/settings/base.py +587 -0
  2682. vibe_surf/langflow/services/settings/constants.py +34 -0
  2683. vibe_surf/langflow/services/settings/factory.py +22 -0
  2684. vibe_surf/langflow/services/settings/feature_flags.py +11 -0
  2685. vibe_surf/langflow/services/settings/manager.py +49 -0
  2686. vibe_surf/langflow/services/settings/service.py +32 -0
  2687. vibe_surf/langflow/services/settings/utils.py +40 -0
  2688. vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
  2689. vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
  2690. vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
  2691. vibe_surf/langflow/services/socket/__init__.py +0 -0
  2692. vibe_surf/langflow/services/socket/factory.py +20 -0
  2693. vibe_surf/langflow/services/socket/service.py +84 -0
  2694. vibe_surf/langflow/services/socket/utils.py +112 -0
  2695. vibe_surf/langflow/services/state/__init__.py +0 -0
  2696. vibe_surf/langflow/services/state/factory.py +16 -0
  2697. vibe_surf/langflow/services/state/service.py +82 -0
  2698. vibe_surf/langflow/services/storage/__init__.py +0 -0
  2699. vibe_surf/langflow/services/storage/constants.py +28 -0
  2700. vibe_surf/langflow/services/storage/factory.py +30 -0
  2701. vibe_surf/langflow/services/storage/local.py +127 -0
  2702. vibe_surf/langflow/services/storage/s3.py +105 -0
  2703. vibe_surf/langflow/services/storage/service.py +51 -0
  2704. vibe_surf/langflow/services/storage/utils.py +5 -0
  2705. vibe_surf/langflow/services/store/__init__.py +0 -0
  2706. vibe_surf/langflow/services/store/exceptions.py +25 -0
  2707. vibe_surf/langflow/services/store/factory.py +20 -0
  2708. vibe_surf/langflow/services/store/schema.py +74 -0
  2709. vibe_surf/langflow/services/store/service.py +600 -0
  2710. vibe_surf/langflow/services/store/utils.py +67 -0
  2711. vibe_surf/langflow/services/task/__init__.py +0 -0
  2712. vibe_surf/langflow/services/task/backends/__init__.py +0 -0
  2713. vibe_surf/langflow/services/task/backends/anyio.py +117 -0
  2714. vibe_surf/langflow/services/task/backends/base.py +15 -0
  2715. vibe_surf/langflow/services/task/backends/celery.py +29 -0
  2716. vibe_surf/langflow/services/task/factory.py +14 -0
  2717. vibe_surf/langflow/services/task/service.py +40 -0
  2718. vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
  2719. vibe_surf/langflow/services/task/utils.py +23 -0
  2720. vibe_surf/langflow/services/telemetry/__init__.py +0 -0
  2721. vibe_surf/langflow/services/telemetry/factory.py +20 -0
  2722. vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
  2723. vibe_surf/langflow/services/telemetry/schema.py +45 -0
  2724. vibe_surf/langflow/services/telemetry/service.py +281 -0
  2725. vibe_surf/langflow/services/tracing/__init__.py +0 -0
  2726. vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
  2727. vibe_surf/langflow/services/tracing/base.py +71 -0
  2728. vibe_surf/langflow/services/tracing/factory.py +20 -0
  2729. vibe_surf/langflow/services/tracing/langfuse.py +170 -0
  2730. vibe_surf/langflow/services/tracing/langsmith.py +208 -0
  2731. vibe_surf/langflow/services/tracing/langwatch.py +185 -0
  2732. vibe_surf/langflow/services/tracing/opik.py +235 -0
  2733. vibe_surf/langflow/services/tracing/schema.py +20 -0
  2734. vibe_surf/langflow/services/tracing/service.py +460 -0
  2735. vibe_surf/langflow/services/tracing/traceloop.py +244 -0
  2736. vibe_surf/langflow/services/tracing/utils.py +29 -0
  2737. vibe_surf/langflow/services/utils.py +246 -0
  2738. vibe_surf/langflow/services/variable/__init__.py +0 -0
  2739. vibe_surf/langflow/services/variable/base.py +119 -0
  2740. vibe_surf/langflow/services/variable/constants.py +2 -0
  2741. vibe_surf/langflow/services/variable/factory.py +28 -0
  2742. vibe_surf/langflow/services/variable/kubernetes.py +204 -0
  2743. vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
  2744. vibe_surf/langflow/services/variable/service.py +195 -0
  2745. vibe_surf/langflow/settings.py +12 -0
  2746. vibe_surf/langflow/template/__init__.py +10 -0
  2747. vibe_surf/langflow/template/field/__init__.py +0 -0
  2748. vibe_surf/langflow/template/field/base.py +257 -0
  2749. vibe_surf/langflow/template/field/prompt.py +2 -0
  2750. vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
  2751. vibe_surf/langflow/template/frontend_node/base.py +214 -0
  2752. vibe_surf/langflow/template/frontend_node/constants.py +65 -0
  2753. vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
  2754. vibe_surf/langflow/template/template/__init__.py +0 -0
  2755. vibe_surf/langflow/template/template/base.py +99 -0
  2756. vibe_surf/langflow/template/utils.py +217 -0
  2757. vibe_surf/langflow/type_extraction/__init__.py +0 -0
  2758. vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
  2759. vibe_surf/langflow/utils/__init__.py +0 -0
  2760. vibe_surf/langflow/utils/async_helpers.py +42 -0
  2761. vibe_surf/langflow/utils/component_utils.py +147 -0
  2762. vibe_surf/langflow/utils/compression.py +19 -0
  2763. vibe_surf/langflow/utils/concurrency.py +60 -0
  2764. vibe_surf/langflow/utils/connection_string_parser.py +8 -0
  2765. vibe_surf/langflow/utils/constants.py +205 -0
  2766. vibe_surf/langflow/utils/data_structure.py +212 -0
  2767. vibe_surf/langflow/utils/image.py +102 -0
  2768. vibe_surf/langflow/utils/lazy_load.py +15 -0
  2769. vibe_surf/langflow/utils/migration.py +61 -0
  2770. vibe_surf/langflow/utils/payload.py +84 -0
  2771. vibe_surf/langflow/utils/schemas.py +117 -0
  2772. vibe_surf/langflow/utils/template_validation.py +284 -0
  2773. vibe_surf/langflow/utils/util.py +479 -0
  2774. vibe_surf/langflow/utils/util_strings.py +56 -0
  2775. vibe_surf/langflow/utils/validate.py +489 -0
  2776. vibe_surf/langflow/utils/version.py +72 -0
  2777. vibe_surf/langflow/utils/voice_utils.py +92 -0
  2778. vibe_surf/langflow/worker.py +37 -0
  2779. vibe_surf/llm/openai_compatible.py +36 -19
  2780. vibe_surf/logger.py +3 -3
  2781. vibe_surf/telemetry/__init__.py +60 -0
  2782. vibe_surf/telemetry/service.py +113 -0
  2783. vibe_surf/telemetry/views.py +188 -0
  2784. vibe_surf/tools/browser_use_tools.py +206 -134
  2785. vibe_surf/tools/composio_client.py +458 -0
  2786. vibe_surf/tools/file_system.py +9 -5
  2787. vibe_surf/tools/finance_tools.py +629 -0
  2788. vibe_surf/tools/mcp_client.py +21 -2
  2789. vibe_surf/tools/report_writer_tools.py +2 -1
  2790. vibe_surf/tools/utils.py +1540 -0
  2791. vibe_surf/tools/vibesurf_registry.py +52 -0
  2792. vibe_surf/tools/vibesurf_tools.py +1376 -83
  2793. vibe_surf/tools/views.py +215 -4
  2794. vibe_surf/tools/website_api/__init__.py +0 -0
  2795. vibe_surf/tools/website_api/douyin/__init__.py +0 -0
  2796. vibe_surf/tools/website_api/douyin/client.py +861 -0
  2797. vibe_surf/tools/website_api/douyin/helpers.py +239 -0
  2798. vibe_surf/tools/website_api/weibo/__init__.py +0 -0
  2799. vibe_surf/tools/website_api/weibo/client.py +777 -0
  2800. vibe_surf/tools/website_api/weibo/helpers.py +997 -0
  2801. vibe_surf/tools/website_api/xhs/__init__.py +0 -0
  2802. vibe_surf/tools/website_api/xhs/client.py +814 -0
  2803. vibe_surf/tools/website_api/xhs/helpers.py +302 -0
  2804. vibe_surf/tools/website_api/youtube/__init__.py +32 -0
  2805. vibe_surf/tools/website_api/youtube/client.py +1267 -0
  2806. vibe_surf/tools/website_api/youtube/helpers.py +420 -0
  2807. vibe_surf/utils.py +34 -0
  2808. vibe_surf/workflows/Browser/browser_click_element.py +189 -0
  2809. vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
  2810. vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
  2811. vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
  2812. vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
  2813. vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
  2814. vibe_surf/workflows/Browser/browser_go_back.py +45 -0
  2815. vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
  2816. vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
  2817. vibe_surf/workflows/Browser/browser_html_content.py +73 -0
  2818. vibe_surf/workflows/Browser/browser_input_text.py +169 -0
  2819. vibe_surf/workflows/Browser/browser_navigate.py +50 -0
  2820. vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
  2821. vibe_surf/workflows/Browser/browser_page_info.py +67 -0
  2822. vibe_surf/workflows/Browser/browser_press_key.py +51 -0
  2823. vibe_surf/workflows/Browser/browser_reload.py +44 -0
  2824. vibe_surf/workflows/Browser/browser_scroll.py +99 -0
  2825. vibe_surf/workflows/Browser/browser_search.py +88 -0
  2826. vibe_surf/workflows/Browser/browser_select_options.py +94 -0
  2827. vibe_surf/workflows/Browser/browser_session.py +54 -0
  2828. vibe_surf/workflows/Browser/browser_take_screenshot.py +76 -0
  2829. vibe_surf/workflows/Browser/browser_upload_file.py +178 -0
  2830. vibe_surf/workflows/Browser/browser_wait.py +46 -0
  2831. vibe_surf/workflows/Browser/close_browser_session.py +51 -0
  2832. vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
  2833. vibe_surf/workflows/FileSystem/load_json.py +136 -0
  2834. vibe_surf/workflows/Integrations/composio_api.py +279 -0
  2835. vibe_surf/workflows/Integrations/douyin.py +232 -0
  2836. vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
  2837. vibe_surf/workflows/Integrations/github_composio.py +11 -0
  2838. vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
  2839. vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
  2840. vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
  2841. vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
  2842. vibe_surf/workflows/Integrations/linear_composio.py +11 -0
  2843. vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
  2844. vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
  2845. vibe_surf/workflows/Integrations/slack_composio.py +11 -0
  2846. vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
  2847. vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
  2848. vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
  2849. vibe_surf/workflows/Integrations/weibo.py +244 -0
  2850. vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
  2851. vibe_surf/workflows/Integrations/yahoo.py +103 -0
  2852. vibe_surf/workflows/Integrations/youtube.py +251 -0
  2853. vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
  2854. vibe_surf/workflows/VibeSurf/advanced_search.py +166 -0
  2855. vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
  2856. vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
  2857. vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
  2858. vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
  2859. vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
  2860. vibesurf-0.2.6.dist-info/METADATA +406 -0
  2861. vibesurf-0.2.6.dist-info/RECORD +2916 -0
  2862. vibesurf-0.2.6.dist-info/licenses/LICENSE +22 -0
  2863. vibesurf-0.1.21.dist-info/METADATA +0 -125
  2864. vibesurf-0.1.21.dist-info/RECORD +0 -101
  2865. vibesurf-0.1.21.dist-info/licenses/LICENSE +0 -201
  2866. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/WHEEL +0 -0
  2867. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/entry_points.txt +0 -0
  2868. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,2242 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+ import contextlib
5
+ import contextvars
6
+ import copy
7
+ import json
8
+ import queue
9
+ import threading
10
+ import traceback
11
+ import uuid
12
+ from collections import defaultdict, deque
13
+ from datetime import datetime, timezone
14
+ from functools import partial
15
+ from itertools import chain
16
+ from typing import TYPE_CHECKING, Any, cast
17
+
18
+ from vibe_surf.langflow.exceptions.component import ComponentBuildError
19
+ from vibe_surf.langflow.graph.edge.base import CycleEdge, Edge
20
+ from vibe_surf.langflow.graph.graph.constants import Finish, lazy_load_vertex_dict
21
+ from vibe_surf.langflow.graph.graph.runnable_vertices_manager import RunnableVerticesManager
22
+ from vibe_surf.langflow.graph.graph.schema import GraphData, GraphDump, StartConfigDict, VertexBuildResult
23
+ from vibe_surf.langflow.graph.graph.state_model import create_state_model_from_graph
24
+ from vibe_surf.langflow.graph.graph.utils import (
25
+ find_all_cycle_edges,
26
+ find_cycle_vertices,
27
+ find_start_component_id,
28
+ get_sorted_vertices,
29
+ process_flow,
30
+ should_continue,
31
+ )
32
+ from vibe_surf.langflow.graph.schema import InterfaceComponentTypes, RunOutputs
33
+ from vibe_surf.langflow.graph.utils import log_vertex_build
34
+ from vibe_surf.langflow.graph.vertex.base import Vertex, VertexStates
35
+ from vibe_surf.langflow.graph.vertex.schema import NodeData, NodeTypeEnum
36
+ from vibe_surf.langflow.graph.vertex.vertex_types import ComponentVertex, InterfaceVertex, StateVertex
37
+ from vibe_surf.langflow.logging.logger import LogConfig, configure, logger
38
+ from vibe_surf.langflow.schema.dotdict import dotdict
39
+ from vibe_surf.langflow.schema.schema import INPUT_FIELD_NAME, InputType, OutputValue
40
+ from vibe_surf.langflow.services.cache.utils import CacheMiss
41
+ from vibe_surf.langflow.services.deps import get_chat_service, get_tracing_service
42
+ from vibe_surf.langflow.utils.async_helpers import run_until_complete
43
+
44
+ if TYPE_CHECKING:
45
+ from collections.abc import Callable, Generator, Iterable
46
+
47
+ from vibe_surf.langflow.api.v1.schemas import InputValueRequest
48
+ from vibe_surf.langflow.custom.custom_component.component import Component
49
+ from vibe_surf.langflow.events.event_manager import EventManager
50
+ from vibe_surf.langflow.graph.edge.schema import EdgeData
51
+ from vibe_surf.langflow.graph.schema import ResultData
52
+ from vibe_surf.langflow.services.chat.schema import GetCache, SetCache
53
+ from vibe_surf.langflow.services.tracing.service import TracingService
54
+
55
+
56
+ class Graph:
57
+ """A class representing a graph of vertices and edges."""
58
+
59
+ def __init__(
60
+ self,
61
+ start: Component | None = None,
62
+ end: Component | None = None,
63
+ flow_id: str | None = None,
64
+ flow_name: str | None = None,
65
+ description: str | None = None,
66
+ user_id: str | None = None,
67
+ log_config: LogConfig | None = None,
68
+ context: dict[str, Any] | None = None,
69
+ ) -> None:
70
+ """Initializes a new Graph instance.
71
+
72
+ If both start and end components are provided, the graph is initialized and prepared for execution.
73
+ If only one is provided, a ValueError is raised. The context must be a dictionary if specified,
74
+ otherwise a TypeError is raised. Internal data structures for vertices, edges, state management,
75
+ run management, and tracing are set up during initialization.
76
+ """
77
+ if log_config:
78
+ configure(**log_config)
79
+
80
+ self._start = start
81
+ self._state_model = None
82
+ self._end = end
83
+ self._prepared = False
84
+ self._runs = 0
85
+ self._updates = 0
86
+ self.flow_id = flow_id
87
+ self.flow_name = flow_name
88
+ self.description = description
89
+ self.user_id = user_id
90
+ self._is_input_vertices: list[str] = []
91
+ self._is_output_vertices: list[str] = []
92
+ self._is_state_vertices: list[str] | None = None
93
+ self.has_session_id_vertices: list[str] = []
94
+ self._sorted_vertices_layers: list[list[str]] = []
95
+ self._run_id = ""
96
+ self._session_id = ""
97
+ self._start_time = datetime.now(timezone.utc)
98
+ self.inactivated_vertices: set = set()
99
+ self.activated_vertices: list[str] = []
100
+ self.vertices_layers: list[list[str]] = []
101
+ self.vertices_to_run: set[str] = set()
102
+ self.stop_vertex: str | None = None
103
+ self.inactive_vertices: set = set()
104
+ # Conditional routing system (separate from ACTIVE/INACTIVE cycle management)
105
+ self.conditionally_excluded_vertices: set = set() # Vertices excluded by conditional routing
106
+ self.conditional_exclusion_sources: dict[str, set[str]] = {} # Maps source vertex -> excluded vertices
107
+ self.edges: list[CycleEdge] = []
108
+ self.vertices: list[Vertex] = []
109
+ self.run_manager = RunnableVerticesManager()
110
+ self._vertices: list[NodeData] = []
111
+ self._edges: list[EdgeData] = []
112
+
113
+ self.top_level_vertices: list[str] = []
114
+ self.vertex_map: dict[str, Vertex] = {}
115
+ self.predecessor_map: dict[str, list[str]] = defaultdict(list)
116
+ self.successor_map: dict[str, list[str]] = defaultdict(list)
117
+ self.in_degree_map: dict[str, int] = defaultdict(int)
118
+ self.parent_child_map: dict[str, list[str]] = defaultdict(list)
119
+ self._run_queue: deque[str] = deque()
120
+ self._first_layer: list[str] = []
121
+ self._lock = asyncio.Lock()
122
+ self.raw_graph_data: GraphData = {"nodes": [], "edges": []}
123
+ self._is_cyclic: bool | None = None
124
+ self._cycles: list[tuple[str, str]] | None = None
125
+ self._cycle_vertices: set[str] | None = None
126
+ self._call_order: list[str] = []
127
+ self._snapshots: list[dict[str, Any]] = []
128
+ self._end_trace_tasks: set[asyncio.Task] = set()
129
+
130
+ if context and not isinstance(context, dict):
131
+ msg = "Context must be a dictionary"
132
+ raise TypeError(msg)
133
+ self._context = dotdict(context or {})
134
+ try:
135
+ self.tracing_service: TracingService | None = get_tracing_service()
136
+ except Exception: # noqa: BLE001
137
+ logger.exception("Error getting tracing service")
138
+ self.tracing_service = None
139
+ if start is not None and end is not None:
140
+ self._set_start_and_end(start, end)
141
+ self.prepare(start_component_id=start._id)
142
+ if (start is not None and end is None) or (start is None and end is not None):
143
+ msg = "You must provide both input and output components"
144
+ raise ValueError(msg)
145
+
146
+ @property
147
+ def context(self) -> dotdict:
148
+ if isinstance(self._context, dotdict):
149
+ return self._context
150
+ return dotdict(self._context)
151
+
152
+ @context.setter
153
+ def context(self, value: dict[str, Any]):
154
+ if not isinstance(value, dict):
155
+ msg = "Context must be a dictionary"
156
+ raise TypeError(msg)
157
+ if isinstance(value, dict):
158
+ value = dotdict(value)
159
+ self._context = value
160
+
161
+ @property
162
+ def session_id(self):
163
+ return self._session_id
164
+
165
+ @session_id.setter
166
+ def session_id(self, value: str):
167
+ self._session_id = value
168
+
169
+ @property
170
+ def state_model(self):
171
+ if not self._state_model:
172
+ self._state_model = create_state_model_from_graph(self)
173
+ return self._state_model
174
+
175
+ def __add__(self, other):
176
+ if not isinstance(other, Graph):
177
+ msg = "Can only add Graph objects"
178
+ raise TypeError(msg)
179
+ # Add the vertices and edges from the other graph to this graph
180
+ new_instance = copy.deepcopy(self)
181
+ for vertex in other.vertices:
182
+ # This updates the edges as well
183
+ new_instance.add_vertex(vertex)
184
+ new_instance.build_graph_maps(new_instance.edges)
185
+ new_instance.define_vertices_lists()
186
+ return new_instance
187
+
188
+ def __iadd__(self, other):
189
+ if not isinstance(other, Graph):
190
+ msg = "Can only add Graph objects"
191
+ raise TypeError(msg)
192
+ # Add the vertices and edges from the other graph to this graph
193
+ for vertex in other.vertices:
194
+ # This updates the edges as well
195
+ self.add_vertex(vertex)
196
+ self.build_graph_maps(self.edges)
197
+ self.define_vertices_lists()
198
+ return self
199
+
200
+ def dumps(
201
+ self,
202
+ name: str | None = None,
203
+ description: str | None = None,
204
+ endpoint_name: str | None = None,
205
+ ) -> str:
206
+ graph_dict = self.dump(name, description, endpoint_name)
207
+ return json.dumps(graph_dict, indent=4, sort_keys=True)
208
+
209
+ def dump(
210
+ self, name: str | None = None, description: str | None = None, endpoint_name: str | None = None
211
+ ) -> GraphDump:
212
+ if self.raw_graph_data != {"nodes": [], "edges": []}:
213
+ data_dict = self.raw_graph_data
214
+ else:
215
+ # we need to convert the vertices and edges to json
216
+ nodes = [node.to_data() for node in self.vertices]
217
+ edges = [edge.to_data() for edge in self.edges]
218
+ self.raw_graph_data = {"nodes": nodes, "edges": edges}
219
+ data_dict = self.raw_graph_data
220
+ graph_dict: GraphDump = {
221
+ "data": data_dict,
222
+ "is_component": len(data_dict.get("nodes", [])) == 1 and data_dict["edges"] == [],
223
+ }
224
+ if name:
225
+ graph_dict["name"] = name
226
+ elif name is None and self.flow_name:
227
+ graph_dict["name"] = self.flow_name
228
+ if description:
229
+ graph_dict["description"] = description
230
+ elif description is None and self.description:
231
+ graph_dict["description"] = self.description
232
+ graph_dict["endpoint_name"] = str(endpoint_name)
233
+ return graph_dict
234
+
235
+ def add_nodes_and_edges(self, nodes: list[NodeData], edges: list[EdgeData]) -> None:
236
+ self._vertices = nodes
237
+ self._edges = edges
238
+ self.raw_graph_data = {"nodes": nodes, "edges": edges}
239
+ self.top_level_vertices = []
240
+ for vertex in self._vertices:
241
+ if vertex_id := vertex.get("id"):
242
+ self.top_level_vertices.append(vertex_id)
243
+ if vertex_id in self.cycle_vertices:
244
+ self.run_manager.add_to_cycle_vertices(vertex_id)
245
+ self._graph_data = process_flow(self.raw_graph_data)
246
+
247
+ self._vertices = self._graph_data["nodes"]
248
+ self._edges = self._graph_data["edges"]
249
+ self.initialize()
250
+
251
+ def add_component(self, component: Component, component_id: str | None = None) -> str:
252
+ component_id = component_id or component._id
253
+ if component_id in self.vertex_map:
254
+ return component_id
255
+ component._id = component_id
256
+ if component_id in self.vertex_map:
257
+ msg = f"Component ID {component_id} already exists"
258
+ raise ValueError(msg)
259
+ frontend_node = component.to_frontend_node()
260
+ self._vertices.append(frontend_node)
261
+ vertex = self._create_vertex(frontend_node)
262
+ vertex.add_component_instance(component)
263
+ self._add_vertex(vertex)
264
+ if component._edges:
265
+ for edge in component._edges:
266
+ self._add_edge(edge)
267
+
268
+ if component._components:
269
+ for _component in component._components:
270
+ self.add_component(_component)
271
+
272
+ return component_id
273
+
274
+ def _set_start_and_end(self, start: Component, end: Component) -> None:
275
+ if not hasattr(start, "to_frontend_node"):
276
+ msg = f"start must be a Component. Got {type(start)}"
277
+ raise TypeError(msg)
278
+ if not hasattr(end, "to_frontend_node"):
279
+ msg = f"end must be a Component. Got {type(end)}"
280
+ raise TypeError(msg)
281
+ self.add_component(start, start._id)
282
+ self.add_component(end, end._id)
283
+
284
+ def add_component_edge(self, source_id: str, output_input_tuple: tuple[str, str], target_id: str) -> None:
285
+ source_vertex = self.get_vertex(source_id)
286
+ if not isinstance(source_vertex, ComponentVertex):
287
+ msg = f"Source vertex {source_id} is not a component vertex."
288
+ raise TypeError(msg)
289
+ target_vertex = self.get_vertex(target_id)
290
+ if not isinstance(target_vertex, ComponentVertex):
291
+ msg = f"Target vertex {target_id} is not a component vertex."
292
+ raise TypeError(msg)
293
+ output_name, input_name = output_input_tuple
294
+ if source_vertex.custom_component is None:
295
+ msg = f"Source vertex {source_id} does not have a custom component."
296
+ raise ValueError(msg)
297
+ if target_vertex.custom_component is None:
298
+ msg = f"Target vertex {target_id} does not have a custom component."
299
+ raise ValueError(msg)
300
+
301
+ try:
302
+ input_field = target_vertex.get_input(input_name)
303
+ input_types = input_field.input_types
304
+ input_field_type = str(input_field.field_type)
305
+ except ValueError as e:
306
+ input_field = target_vertex.data.get("node", {}).get("template", {}).get(input_name)
307
+ if not input_field:
308
+ msg = f"Input field {input_name} not found in target vertex {target_id}"
309
+ raise ValueError(msg) from e
310
+ input_types = input_field.get("input_types", [])
311
+ input_field_type = input_field.get("type", "")
312
+
313
+ edge_data: EdgeData = {
314
+ "source": source_id,
315
+ "target": target_id,
316
+ "data": {
317
+ "sourceHandle": {
318
+ "dataType": source_vertex.custom_component.name
319
+ or source_vertex.custom_component.__class__.__name__,
320
+ "id": source_vertex.id,
321
+ "name": output_name,
322
+ "output_types": source_vertex.get_output(output_name).types,
323
+ },
324
+ "targetHandle": {
325
+ "fieldName": input_name,
326
+ "id": target_vertex.id,
327
+ "inputTypes": input_types,
328
+ "type": input_field_type,
329
+ },
330
+ },
331
+ }
332
+ self._add_edge(edge_data)
333
+
334
+ async def async_start(
335
+ self,
336
+ inputs: list[dict] | None = None,
337
+ max_iterations: int | None = None,
338
+ config: StartConfigDict | None = None,
339
+ event_manager: EventManager | None = None,
340
+ ):
341
+ if not self._prepared:
342
+ msg = "Graph not prepared. Call prepare() first."
343
+ raise ValueError(msg)
344
+ # The idea is for this to return a generator that yields the result of
345
+ # each step call and raise StopIteration when the graph is done
346
+ if config is not None:
347
+ self.__apply_config(config)
348
+ for _input in inputs or []:
349
+ for key, value in _input.items():
350
+ vertex = self.get_vertex(key)
351
+ vertex.set_input_value(key, value)
352
+ # I want to keep a counter of how many times result.vertex.id
353
+ # has been yielded
354
+ yielded_counts: dict[str, int] = defaultdict(int)
355
+
356
+ while should_continue(yielded_counts, max_iterations):
357
+ result = await self.astep(event_manager=event_manager)
358
+ yield result
359
+ if hasattr(result, "vertex"):
360
+ yielded_counts[result.vertex.id] += 1
361
+ if isinstance(result, Finish):
362
+ return
363
+
364
+ msg = "Max iterations reached"
365
+ raise ValueError(msg)
366
+
367
+ def _snapshot(self):
368
+ return {
369
+ "_run_queue": self._run_queue.copy(),
370
+ "_first_layer": self._first_layer.copy(),
371
+ "vertices_layers": copy.deepcopy(self.vertices_layers),
372
+ "vertices_to_run": copy.deepcopy(self.vertices_to_run),
373
+ "run_manager": copy.deepcopy(self.run_manager.to_dict()),
374
+ }
375
+
376
+ def __apply_config(self, config: StartConfigDict) -> None:
377
+ for vertex in self.vertices:
378
+ if vertex.custom_component is None:
379
+ continue
380
+ for output in vertex.custom_component._outputs_map.values():
381
+ for key, value in config["output"].items():
382
+ setattr(output, key, value)
383
+
384
+ def start(
385
+ self,
386
+ inputs: list[dict] | None = None,
387
+ max_iterations: int | None = None,
388
+ config: StartConfigDict | None = None,
389
+ event_manager: EventManager | None = None,
390
+ ) -> Generator:
391
+ """Starts the graph execution synchronously by creating a new event loop in a separate thread.
392
+
393
+ Args:
394
+ inputs: Optional list of input dictionaries
395
+ max_iterations: Optional maximum number of iterations
396
+ config: Optional configuration dictionary
397
+ event_manager: Optional event manager
398
+
399
+ Returns:
400
+ Generator yielding results from graph execution
401
+ """
402
+ if self.is_cyclic and max_iterations is None:
403
+ msg = "You must specify a max_iterations if the graph is cyclic"
404
+ raise ValueError(msg)
405
+
406
+ if config is not None:
407
+ self.__apply_config(config)
408
+
409
+ # Create a queue for passing results and errors between threads
410
+ result_queue: queue.Queue[VertexBuildResult | Exception | None] = queue.Queue()
411
+
412
+ # Function to run async code in separate thread
413
+ def run_async_code():
414
+ # Create new event loop for this thread
415
+ loop = asyncio.new_event_loop()
416
+ asyncio.set_event_loop(loop)
417
+
418
+ try:
419
+ # Run the async generator
420
+ async_gen = self.async_start(inputs, max_iterations, event_manager)
421
+
422
+ while True:
423
+ try:
424
+ # Get next result from async generator
425
+ result = loop.run_until_complete(anext(async_gen))
426
+ result_queue.put(result)
427
+
428
+ if isinstance(result, Finish):
429
+ break
430
+
431
+ except StopAsyncIteration:
432
+ break
433
+ except ValueError as e:
434
+ # Put the exception in the queue
435
+ result_queue.put(e)
436
+ break
437
+
438
+ finally:
439
+ # Ensure all pending tasks are completed
440
+ pending = asyncio.all_tasks(loop)
441
+ if pending:
442
+ # Create a future to gather all pending tasks
443
+ cleanup_future = asyncio.gather(*pending, return_exceptions=True)
444
+ loop.run_until_complete(cleanup_future)
445
+
446
+ # Close the loop
447
+ loop.close()
448
+ # Signal completion
449
+ result_queue.put(None)
450
+
451
+ # Start thread for async execution
452
+ thread = threading.Thread(target=run_async_code)
453
+ thread.start()
454
+
455
+ # Yield results from queue
456
+ while True:
457
+ result = result_queue.get()
458
+ if result is None:
459
+ break
460
+ if isinstance(result, Exception):
461
+ raise result
462
+ yield result
463
+
464
+ # Wait for thread to complete
465
+ thread.join()
466
+
467
+ def _add_edge(self, edge: EdgeData) -> None:
468
+ self.add_edge(edge)
469
+ source_id = edge["data"]["sourceHandle"]["id"]
470
+ target_id = edge["data"]["targetHandle"]["id"]
471
+ self.predecessor_map[target_id].append(source_id)
472
+ self.successor_map[source_id].append(target_id)
473
+ self.in_degree_map[target_id] += 1
474
+ self.parent_child_map[source_id].append(target_id)
475
+
476
+ def add_node(self, node: NodeData) -> None:
477
+ self._vertices.append(node)
478
+
479
+ def add_edge(self, edge: EdgeData) -> None:
480
+ # Check if the edge already exists
481
+ if edge in self._edges:
482
+ return
483
+ self._edges.append(edge)
484
+
485
+ def initialize(self) -> None:
486
+ self._build_graph()
487
+ self.build_graph_maps(self.edges)
488
+ self.define_vertices_lists()
489
+
490
+ @property
491
+ def is_state_vertices(self) -> list[str]:
492
+ """Returns a cached list of vertex IDs for vertices marked as state vertices.
493
+
494
+ The list is computed on first access by filtering vertices with `is_state` set to True and is
495
+ cached for future calls.
496
+ """
497
+ if self._is_state_vertices is None:
498
+ self._is_state_vertices = [vertex.id for vertex in self.vertices if vertex.is_state]
499
+ return self._is_state_vertices
500
+
501
+ def activate_state_vertices(self, name: str, caller: str) -> None:
502
+ """Activates vertices associated with a given state name.
503
+
504
+ Marks vertices with the specified state name, as well as their successors and related
505
+ predecessors. The state manager is then updated with the new state record.
506
+ """
507
+ vertices_ids = set()
508
+ new_predecessor_map = {}
509
+ activated_vertices = []
510
+ for vertex_id in self.is_state_vertices:
511
+ caller_vertex = self.get_vertex(caller)
512
+ vertex = self.get_vertex(vertex_id)
513
+ if vertex_id == caller or vertex.display_name == caller_vertex.display_name:
514
+ continue
515
+ ctx_key = vertex.raw_params.get("context_key")
516
+ if isinstance(ctx_key, str) and name in ctx_key and vertex_id != caller and isinstance(vertex, StateVertex):
517
+ activated_vertices.append(vertex_id)
518
+ vertices_ids.add(vertex_id)
519
+ successors = self.get_all_successors(vertex, flat=True)
520
+ # Update run_manager.run_predecessors because we are activating vertices
521
+ # The run_prdecessors is the predecessor map of the vertices
522
+ # we remove the vertex_id from the predecessor map whenever we run a vertex
523
+ # So we need to get all edges of the vertex and successors
524
+ # and run self.build_adjacency_maps(edges) to get the new predecessor map
525
+ # that is not complete but we can use to update the run_predecessors
526
+ successors_predecessors = set()
527
+ for sucessor in successors:
528
+ successors_predecessors.update(self.get_all_predecessors(sucessor))
529
+
530
+ edges_set = set()
531
+ for _vertex in [vertex, *successors, *successors_predecessors]:
532
+ edges_set.update(_vertex.edges)
533
+ if _vertex.state == VertexStates.INACTIVE:
534
+ _vertex.set_state("ACTIVE")
535
+
536
+ vertices_ids.add(_vertex.id)
537
+ edges = list(edges_set)
538
+ predecessor_map, _ = self.build_adjacency_maps(edges)
539
+ new_predecessor_map.update(predecessor_map)
540
+
541
+ vertices_ids.update(new_predecessor_map.keys())
542
+ vertices_ids.update(v_id for value_list in new_predecessor_map.values() for v_id in value_list)
543
+
544
+ self.activated_vertices = activated_vertices
545
+ self.vertices_to_run.update(vertices_ids)
546
+ self.run_manager.update_run_state(
547
+ run_predecessors=new_predecessor_map,
548
+ vertices_to_run=self.vertices_to_run,
549
+ )
550
+
551
+ def reset_activated_vertices(self) -> None:
552
+ """Resets the activated vertices in the graph."""
553
+ self.activated_vertices = []
554
+
555
+ def validate_stream(self) -> None:
556
+ """Validates the stream configuration of the graph.
557
+
558
+ If there are two vertices in the same graph (connected by edges)
559
+ that have `stream=True` or `streaming=True`, raises a `ValueError`.
560
+
561
+ Raises:
562
+ ValueError: If two connected vertices have `stream=True` or `streaming=True`.
563
+ """
564
+ for vertex in self.vertices:
565
+ if vertex.params.get("stream") or vertex.params.get("streaming"):
566
+ successors = self.get_all_successors(vertex)
567
+ for successor in successors:
568
+ if successor.params.get("stream") or successor.params.get("streaming"):
569
+ msg = (
570
+ f"Components {vertex.display_name} and {successor.display_name} "
571
+ "are connected and both have stream or streaming set to True"
572
+ )
573
+ raise ValueError(msg)
574
+
575
+ @property
576
+ def first_layer(self):
577
+ if self._first_layer is None:
578
+ msg = "Graph not prepared. Call prepare() first."
579
+ raise ValueError(msg)
580
+ return self._first_layer
581
+
582
+ @property
583
+ def is_cyclic(self):
584
+ """Check if the graph has any cycles.
585
+
586
+ Returns:
587
+ bool: True if the graph has any cycles, False otherwise.
588
+ """
589
+ if self._is_cyclic is None:
590
+ self._is_cyclic = bool(self.cycle_vertices)
591
+ return self._is_cyclic
592
+
593
+ @property
594
+ def run_id(self):
595
+ """The ID of the current run.
596
+
597
+ Returns:
598
+ str: The run ID.
599
+
600
+ Raises:
601
+ ValueError: If the run ID is not set.
602
+ """
603
+ if not self._run_id:
604
+ msg = "Run ID not set"
605
+ raise ValueError(msg)
606
+ return self._run_id
607
+
608
+ def set_run_id(self, run_id: uuid.UUID | str | None = None) -> None:
609
+ """Sets the ID of the current run.
610
+
611
+ Args:
612
+ run_id (str): The run ID.
613
+ """
614
+ if run_id is None:
615
+ run_id = uuid.uuid4()
616
+
617
+ self._run_id = str(run_id)
618
+
619
+ async def initialize_run(self) -> None:
620
+ if not self._run_id:
621
+ self.set_run_id()
622
+ if self.tracing_service:
623
+ run_name = f"{self.flow_name} - {self.flow_id}"
624
+ await self.tracing_service.start_tracers(
625
+ run_id=uuid.UUID(self._run_id),
626
+ run_name=run_name,
627
+ user_id=self.user_id,
628
+ session_id=self.session_id,
629
+ )
630
+
631
+ def _end_all_traces_async(self, outputs: dict[str, Any] | None = None, error: Exception | None = None) -> None:
632
+ task = asyncio.create_task(self.end_all_traces(outputs, error))
633
+ self._end_trace_tasks.add(task)
634
+ task.add_done_callback(self._end_trace_tasks.discard)
635
+
636
+ def end_all_traces_in_context(
637
+ self,
638
+ outputs: dict[str, Any] | None = None,
639
+ error: Exception | None = None,
640
+ ) -> Callable:
641
+ # BackgroundTasks run in different context, so we need to copy the context
642
+ context = contextvars.copy_context()
643
+
644
+ async def async_end_traces_func():
645
+ await asyncio.create_task(self.end_all_traces(outputs, error), context=context)
646
+
647
+ return async_end_traces_func
648
+
649
+ async def end_all_traces(self, outputs: dict[str, Any] | None = None, error: Exception | None = None) -> None:
650
+ if not self.tracing_service:
651
+ return
652
+ self._end_time = datetime.now(timezone.utc)
653
+ if outputs is None:
654
+ outputs = {}
655
+ outputs |= self.metadata
656
+ await self.tracing_service.end_tracers(outputs, error)
657
+
658
+ @property
659
+ def sorted_vertices_layers(self) -> list[list[str]]:
660
+ """Returns the sorted layers of vertex IDs by type.
661
+
662
+ Each layer in the returned list contains vertex IDs grouped by their classification,
663
+ such as input, output, session, or state vertices. Sorting is performed if not already done.
664
+ """
665
+ if not self._sorted_vertices_layers:
666
+ self.sort_vertices()
667
+ return self._sorted_vertices_layers
668
+
669
+ def define_vertices_lists(self) -> None:
670
+ """Populates internal lists of input, output, session ID, and state vertex IDs.
671
+
672
+ Iterates over all vertices and appends their IDs to the corresponding internal lists
673
+ based on their classification.
674
+ """
675
+ for vertex in self.vertices:
676
+ if vertex.is_input:
677
+ self._is_input_vertices.append(vertex.id)
678
+ if vertex.is_output:
679
+ self._is_output_vertices.append(vertex.id)
680
+ if vertex.has_session_id:
681
+ self.has_session_id_vertices.append(vertex.id)
682
+ if vertex.is_state:
683
+ if self._is_state_vertices is None:
684
+ self._is_state_vertices = []
685
+ self._is_state_vertices.append(vertex.id)
686
+
687
+ def _set_inputs(self, input_components: list[str], inputs: dict[str, str], input_type: InputType | None) -> None:
688
+ """Updates input vertices' parameters with the provided inputs, filtering by component list and input type.
689
+
690
+ Only vertices whose IDs or display names match the specified input components and whose IDs contain
691
+ the input type (unless input type is 'any' or None) are updated. Raises a ValueError if a specified
692
+ vertex is not found.
693
+ """
694
+ for vertex_id in self._is_input_vertices:
695
+ vertex = self.get_vertex(vertex_id)
696
+ # If the vertex is not in the input_components list
697
+ if input_components and (vertex_id not in input_components and vertex.display_name not in input_components):
698
+ continue
699
+ # If the input_type is not any and the input_type is not in the vertex id
700
+ # Example: input_type = "chat" and vertex.id = "OpenAI-19ddn"
701
+ if input_type is not None and input_type != "any" and input_type not in vertex.id.lower():
702
+ continue
703
+ if vertex is None:
704
+ msg = f"Vertex {vertex_id} not found"
705
+ raise ValueError(msg)
706
+ vertex.update_raw_params(inputs, overwrite=True)
707
+
708
+ async def _run(
709
+ self,
710
+ *,
711
+ inputs: dict[str, str],
712
+ input_components: list[str],
713
+ input_type: InputType | None,
714
+ outputs: list[str],
715
+ stream: bool,
716
+ session_id: str,
717
+ fallback_to_env_vars: bool,
718
+ event_manager: EventManager | None = None,
719
+ ) -> list[ResultData | None]:
720
+ """Runs the graph with the given inputs.
721
+
722
+ Args:
723
+ inputs (Dict[str, str]): The input values for the graph.
724
+ input_components (list[str]): The components to run for the inputs.
725
+ input_type: (Optional[InputType]): The input type.
726
+ outputs (list[str]): The outputs to retrieve from the graph.
727
+ stream (bool): Whether to stream the results or not.
728
+ session_id (str): The session ID for the graph.
729
+ fallback_to_env_vars (bool): Whether to fallback to environment variables.
730
+ event_manager (EventManager | None): The event manager for the graph.
731
+
732
+ Returns:
733
+ List[Optional["ResultData"]]: The outputs of the graph.
734
+ """
735
+ if input_components and not isinstance(input_components, list):
736
+ msg = f"Invalid components value: {input_components}. Expected list"
737
+ raise ValueError(msg)
738
+ if input_components is None:
739
+ input_components = []
740
+
741
+ if not isinstance(inputs.get(INPUT_FIELD_NAME, ""), str):
742
+ msg = f"Invalid input value: {inputs.get(INPUT_FIELD_NAME)}. Expected string"
743
+ raise TypeError(msg)
744
+ if inputs:
745
+ self._set_inputs(input_components, inputs, input_type)
746
+ # Update all the vertices with the session_id
747
+ for vertex_id in self.has_session_id_vertices:
748
+ vertex = self.get_vertex(vertex_id)
749
+ if vertex is None:
750
+ msg = f"Vertex {vertex_id} not found"
751
+ raise ValueError(msg)
752
+ vertex.update_raw_params({"session_id": session_id})
753
+ # Process the graph
754
+ try:
755
+ cache_service = get_chat_service()
756
+ if self.flow_id:
757
+ await cache_service.set_cache(self.flow_id, self)
758
+ except Exception: # noqa: BLE001
759
+ logger.exception("Error setting cache")
760
+
761
+ try:
762
+ # Prioritize the webhook component if it exists
763
+ start_component_id = find_start_component_id(self._is_input_vertices)
764
+ await self.process(
765
+ start_component_id=start_component_id,
766
+ fallback_to_env_vars=fallback_to_env_vars,
767
+ event_manager=event_manager,
768
+ )
769
+ self.increment_run_count()
770
+ except Exception as exc:
771
+ self._end_all_traces_async(error=exc)
772
+ msg = f"Error running graph: {exc}"
773
+ raise ValueError(msg) from exc
774
+
775
+ self._end_all_traces_async()
776
+ # Get the outputs
777
+ vertex_outputs = []
778
+ for vertex in self.vertices:
779
+ if not vertex.built:
780
+ continue
781
+ if vertex is None:
782
+ msg = f"Vertex {vertex_id} not found"
783
+ raise ValueError(msg)
784
+
785
+ if not vertex.result and not stream and hasattr(vertex, "consume_async_generator"):
786
+ await vertex.consume_async_generator()
787
+ if (not outputs and vertex.is_output) or (vertex.display_name in outputs or vertex.id in outputs):
788
+ vertex_outputs.append(vertex.result)
789
+
790
+ return vertex_outputs
791
+
792
+ async def arun(
793
+ self,
794
+ inputs: list[dict[str, str]],
795
+ *,
796
+ inputs_components: list[list[str]] | None = None,
797
+ types: list[InputType | None] | None = None,
798
+ outputs: list[str] | None = None,
799
+ session_id: str | None = None,
800
+ stream: bool = False,
801
+ fallback_to_env_vars: bool = False,
802
+ event_manager: EventManager | None = None,
803
+ ) -> list[RunOutputs]:
804
+ """Runs the graph with the given inputs.
805
+
806
+ Args:
807
+ inputs (list[Dict[str, str]]): The input values for the graph.
808
+ inputs_components (Optional[list[list[str]]], optional): Components to run for the inputs. Defaults to None.
809
+ types (Optional[list[Optional[InputType]]], optional): The types of the inputs. Defaults to None.
810
+ outputs (Optional[list[str]], optional): The outputs to retrieve from the graph. Defaults to None.
811
+ session_id (Optional[str], optional): The session ID for the graph. Defaults to None.
812
+ stream (bool, optional): Whether to stream the results or not. Defaults to False.
813
+ fallback_to_env_vars (bool, optional): Whether to fallback to environment variables. Defaults to False.
814
+ event_manager (EventManager | None): The event manager for the graph.
815
+
816
+ Returns:
817
+ List[RunOutputs]: The outputs of the graph.
818
+ """
819
+ # inputs is {"message": "Hello, world!"}
820
+ # we need to go through self.inputs and update the self.raw_params
821
+ # of the vertices that are inputs
822
+ # if the value is a list, we need to run multiple times
823
+ vertex_outputs = []
824
+ if not isinstance(inputs, list):
825
+ inputs = [inputs]
826
+ elif not inputs:
827
+ inputs = [{}]
828
+ # Length of all should be the as inputs length
829
+ # just add empty lists to complete the length
830
+ if inputs_components is None:
831
+ inputs_components = []
832
+ for _ in range(len(inputs) - len(inputs_components)):
833
+ inputs_components.append([])
834
+ if types is None:
835
+ types = []
836
+ if session_id:
837
+ self.session_id = session_id
838
+ for _ in range(len(inputs) - len(types)):
839
+ types.append("chat") # default to chat
840
+ for run_inputs, components, input_type in zip(inputs, inputs_components, types, strict=True):
841
+ run_outputs = await self._run(
842
+ inputs=run_inputs,
843
+ input_components=components,
844
+ input_type=input_type,
845
+ outputs=outputs or [],
846
+ stream=stream,
847
+ session_id=session_id or "",
848
+ fallback_to_env_vars=fallback_to_env_vars,
849
+ event_manager=event_manager,
850
+ )
851
+ run_output_object = RunOutputs(inputs=run_inputs, outputs=run_outputs)
852
+ await logger.adebug(f"Run outputs: {run_output_object}")
853
+ vertex_outputs.append(run_output_object)
854
+ return vertex_outputs
855
+
856
+ def next_vertex_to_build(self):
857
+ """Returns the next vertex to be built.
858
+
859
+ Yields:
860
+ str: The ID of the next vertex to be built.
861
+ """
862
+ yield from chain.from_iterable(self.vertices_layers)
863
+
864
+ @property
865
+ def metadata(self):
866
+ """The metadata of the graph.
867
+
868
+ Returns:
869
+ dict: The metadata of the graph.
870
+ """
871
+ time_format = "%Y-%m-%d %H:%M:%S %Z"
872
+ return {
873
+ "start_time": self._start_time.strftime(time_format),
874
+ "end_time": self._end_time.strftime(time_format),
875
+ "time_elapsed": f"{(self._end_time - self._start_time).total_seconds()} seconds",
876
+ "flow_id": self.flow_id,
877
+ "flow_name": self.flow_name,
878
+ }
879
+
880
+ def build_graph_maps(self, edges: list[CycleEdge] | None = None, vertices: list[Vertex] | None = None) -> None:
881
+ """Builds the adjacency maps for the graph."""
882
+ if edges is None:
883
+ edges = self.edges
884
+
885
+ if vertices is None:
886
+ vertices = self.vertices
887
+
888
+ self.predecessor_map, self.successor_map = self.build_adjacency_maps(edges)
889
+
890
+ self.in_degree_map = self.build_in_degree(edges)
891
+ self.parent_child_map = self.build_parent_child_map(vertices)
892
+
893
+ def reset_inactivated_vertices(self) -> None:
894
+ """Resets the inactivated vertices in the graph."""
895
+ for vertex_id in self.inactivated_vertices.copy():
896
+ self.mark_vertex(vertex_id, "ACTIVE")
897
+ self.inactivated_vertices = set()
898
+ self.inactivated_vertices = set()
899
+
900
+ def mark_all_vertices(self, state: str) -> None:
901
+ """Marks all vertices in the graph."""
902
+ for vertex in self.vertices:
903
+ vertex.set_state(state)
904
+
905
+ def mark_vertex(self, vertex_id: str, state: str) -> None:
906
+ """Marks a vertex in the graph."""
907
+ vertex = self.get_vertex(vertex_id)
908
+ vertex.set_state(state)
909
+ if state == VertexStates.INACTIVE:
910
+ self.run_manager.remove_from_predecessors(vertex_id)
911
+
912
+ def _mark_branch(
913
+ self, vertex_id: str, state: str, visited: set | None = None, output_name: str | None = None
914
+ ) -> set:
915
+ """Marks a branch of the graph."""
916
+ if visited is None:
917
+ visited = set()
918
+ else:
919
+ self.mark_vertex(vertex_id, state)
920
+ if vertex_id in visited:
921
+ return visited
922
+ visited.add(vertex_id)
923
+
924
+ for child_id in self.parent_child_map[vertex_id]:
925
+ # Only child_id that have an edge with the vertex_id through the output_name
926
+ # should be marked
927
+ if output_name:
928
+ edge = self.get_edge(vertex_id, child_id)
929
+ if edge and edge.source_handle.name != output_name:
930
+ continue
931
+ self._mark_branch(child_id, state, visited)
932
+ return visited
933
+
934
+ def mark_branch(self, vertex_id: str, state: str, output_name: str | None = None) -> None:
935
+ visited = self._mark_branch(vertex_id=vertex_id, state=state, output_name=output_name)
936
+ new_predecessor_map, _ = self.build_adjacency_maps(self.edges)
937
+ new_predecessor_map = {k: v for k, v in new_predecessor_map.items() if k in visited}
938
+ if vertex_id in self.cycle_vertices:
939
+ # Remove dependencies that are not in the cycle and have run at least once
940
+ new_predecessor_map = {
941
+ k: [dep for dep in v if dep in self.cycle_vertices and dep in self.run_manager.ran_at_least_once]
942
+ for k, v in new_predecessor_map.items()
943
+ }
944
+ self.run_manager.update_run_state(
945
+ run_predecessors=new_predecessor_map,
946
+ vertices_to_run=self.vertices_to_run,
947
+ )
948
+
949
+ def exclude_branch_conditionally(self, vertex_id: str, output_name: str | None = None) -> None:
950
+ """Marks a branch as conditionally excluded (for conditional routing).
951
+
952
+ This system is separate from the ACTIVE/INACTIVE state used for cycle management:
953
+ - ACTIVE/INACTIVE: Reset after each cycle iteration to allow cycles to continue
954
+ - Conditional exclusion: Persists until explicitly cleared by the same source vertex
955
+
956
+ Used by ConditionalRouter to ensure only one branch executes per condition evaluation.
957
+ If this vertex has previously excluded branches, they are cleared first to allow
958
+ re-evaluation on subsequent iterations (e.g., in cycles where condition may change).
959
+
960
+ Args:
961
+ vertex_id: The source vertex making the exclusion decision
962
+ output_name: The output name to follow when excluding downstream vertices
963
+ """
964
+ # Clear any previous exclusions from this source vertex
965
+ if vertex_id in self.conditional_exclusion_sources:
966
+ previous_exclusions = self.conditional_exclusion_sources[vertex_id]
967
+ self.conditionally_excluded_vertices -= previous_exclusions
968
+ del self.conditional_exclusion_sources[vertex_id]
969
+
970
+ # Now exclude the new branch
971
+ visited: set[str] = set()
972
+ excluded: set[str] = set()
973
+ self._exclude_branch_conditionally(vertex_id, visited, excluded, output_name, skip_first=True)
974
+
975
+ # Track which vertices this source excluded
976
+ if excluded:
977
+ self.conditional_exclusion_sources[vertex_id] = excluded
978
+
979
+ def _exclude_branch_conditionally(
980
+ self, vertex_id: str, visited: set, excluded: set, output_name: str | None = None, *, skip_first: bool = False
981
+ ) -> None:
982
+ """Recursively excludes vertices in a branch for conditional routing."""
983
+ if vertex_id in visited:
984
+ return
985
+ visited.add(vertex_id)
986
+
987
+ # Don't exclude the first vertex (the router itself)
988
+ if not skip_first:
989
+ self.conditionally_excluded_vertices.add(vertex_id)
990
+ excluded.add(vertex_id)
991
+
992
+ for child_id in self.parent_child_map[vertex_id]:
993
+ # If we're at the router (skip_first=True) and have an output_name,
994
+ # only follow edges from that specific output
995
+ if skip_first and output_name:
996
+ edge = self.get_edge(vertex_id, child_id)
997
+ if edge and edge.source_handle.name != output_name:
998
+ continue
999
+ # After the first level, exclude all descendants
1000
+ self._exclude_branch_conditionally(child_id, visited, excluded, output_name=None, skip_first=False)
1001
+
1002
+ def get_edge(self, source_id: str, target_id: str) -> CycleEdge | None:
1003
+ """Returns the edge between two vertices."""
1004
+ for edge in self.edges:
1005
+ if edge.source_id == source_id and edge.target_id == target_id:
1006
+ return edge
1007
+ return None
1008
+
1009
+ def build_parent_child_map(self, vertices: list[Vertex]):
1010
+ parent_child_map = defaultdict(list)
1011
+ for vertex in vertices:
1012
+ parent_child_map[vertex.id] = [child.id for child in self.get_successors(vertex)]
1013
+ return parent_child_map
1014
+
1015
+ def increment_run_count(self) -> None:
1016
+ self._runs += 1
1017
+
1018
+ def increment_update_count(self) -> None:
1019
+ self._updates += 1
1020
+
1021
+ def __getstate__(self):
1022
+ # Get all attributes that are useful in runs.
1023
+ # We don't need to save the state_manager because it is
1024
+ # a singleton and it is not necessary to save it
1025
+ return {
1026
+ "vertices": self.vertices,
1027
+ "edges": self.edges,
1028
+ "flow_id": self.flow_id,
1029
+ "flow_name": self.flow_name,
1030
+ "description": self.description,
1031
+ "user_id": self.user_id,
1032
+ "raw_graph_data": self.raw_graph_data,
1033
+ "top_level_vertices": self.top_level_vertices,
1034
+ "inactivated_vertices": self.inactivated_vertices,
1035
+ "run_manager": self.run_manager.to_dict(),
1036
+ "_run_id": self._run_id,
1037
+ "in_degree_map": self.in_degree_map,
1038
+ "parent_child_map": self.parent_child_map,
1039
+ "predecessor_map": self.predecessor_map,
1040
+ "successor_map": self.successor_map,
1041
+ "activated_vertices": self.activated_vertices,
1042
+ "vertices_layers": self.vertices_layers,
1043
+ "vertices_to_run": self.vertices_to_run,
1044
+ "stop_vertex": self.stop_vertex,
1045
+ "_run_queue": self._run_queue,
1046
+ "_first_layer": self._first_layer,
1047
+ "_vertices": self._vertices,
1048
+ "_edges": self._edges,
1049
+ "_is_input_vertices": self._is_input_vertices,
1050
+ "_is_output_vertices": self._is_output_vertices,
1051
+ "has_session_id_vertices": self.has_session_id_vertices,
1052
+ "_sorted_vertices_layers": self._sorted_vertices_layers,
1053
+ }
1054
+
1055
+ def __deepcopy__(self, memo):
1056
+ # Check if we've already copied this instance
1057
+ if id(self) in memo:
1058
+ return memo[id(self)]
1059
+
1060
+ if self._start is not None and self._end is not None:
1061
+ # Deep copy start and end components
1062
+ start_copy = copy.deepcopy(self._start, memo)
1063
+ end_copy = copy.deepcopy(self._end, memo)
1064
+ new_graph = type(self)(
1065
+ start_copy,
1066
+ end_copy,
1067
+ copy.deepcopy(self.flow_id, memo),
1068
+ copy.deepcopy(self.flow_name, memo),
1069
+ copy.deepcopy(self.user_id, memo),
1070
+ )
1071
+ else:
1072
+ # Create a new graph without start and end, but copy flow_id, flow_name, and user_id
1073
+ new_graph = type(self)(
1074
+ None,
1075
+ None,
1076
+ copy.deepcopy(self.flow_id, memo),
1077
+ copy.deepcopy(self.flow_name, memo),
1078
+ copy.deepcopy(self.user_id, memo),
1079
+ )
1080
+ # Deep copy vertices and edges
1081
+ new_graph.add_nodes_and_edges(copy.deepcopy(self._vertices, memo), copy.deepcopy(self._edges, memo))
1082
+
1083
+ # Store the newly created object in memo
1084
+ memo[id(self)] = new_graph
1085
+
1086
+ return new_graph
1087
+
1088
+ def __setstate__(self, state):
1089
+ run_manager = state["run_manager"]
1090
+ if isinstance(run_manager, RunnableVerticesManager):
1091
+ state["run_manager"] = run_manager
1092
+ else:
1093
+ state["run_manager"] = RunnableVerticesManager.from_dict(run_manager)
1094
+ self.__dict__.update(state)
1095
+ self.vertex_map = {vertex.id: vertex for vertex in self.vertices}
1096
+ self.tracing_service = get_tracing_service()
1097
+ self.set_run_id(self._run_id)
1098
+
1099
+ @classmethod
1100
+ def from_payload(
1101
+ cls,
1102
+ payload: dict,
1103
+ flow_id: str | None = None,
1104
+ flow_name: str | None = None,
1105
+ user_id: str | None = None,
1106
+ context: dict | None = None,
1107
+ ) -> Graph:
1108
+ """Creates a graph from a payload.
1109
+
1110
+ Args:
1111
+ payload: The payload to create the graph from.
1112
+ flow_id: The ID of the flow.
1113
+ flow_name: The flow name.
1114
+ user_id: The user ID.
1115
+ context: Optional context dictionary for request-specific data.
1116
+
1117
+ Returns:
1118
+ Graph: The created graph.
1119
+ """
1120
+ if "data" in payload:
1121
+ payload = payload["data"]
1122
+ try:
1123
+ vertices = payload["nodes"]
1124
+ edges = payload["edges"]
1125
+ graph = cls(flow_id=flow_id, flow_name=flow_name, user_id=user_id, context=context)
1126
+ graph.add_nodes_and_edges(vertices, edges)
1127
+ except KeyError as exc:
1128
+ logger.exception(exc)
1129
+ if "nodes" not in payload and "edges" not in payload:
1130
+ msg = f"Invalid payload. Expected keys 'nodes' and 'edges'. Found {list(payload.keys())}"
1131
+ raise ValueError(msg) from exc
1132
+
1133
+ msg = f"Error while creating graph from payload: {exc}"
1134
+ raise ValueError(msg) from exc
1135
+ else:
1136
+ return graph
1137
+
1138
+ def __eq__(self, /, other: object) -> bool:
1139
+ if not isinstance(other, Graph):
1140
+ return False
1141
+ return self.__repr__() == other.__repr__()
1142
+
1143
+ # update this graph with another graph by comparing the __repr__ of each vertex
1144
+ # and if the __repr__ of a vertex is not the same as the other
1145
+ # then update the .data of the vertex to the self
1146
+ # both graphs have the same vertices and edges
1147
+ # but the data of the vertices might be different
1148
+
1149
+ def update_edges_from_vertex(self, other_vertex: Vertex) -> None:
1150
+ """Updates the edges of a vertex in the Graph."""
1151
+ new_edges = []
1152
+ for edge in self.edges:
1153
+ if other_vertex.id in {edge.source_id, edge.target_id}:
1154
+ continue
1155
+ new_edges.append(edge)
1156
+ new_edges += other_vertex.edges
1157
+ self.edges = new_edges
1158
+
1159
+ def vertex_data_is_identical(self, vertex: Vertex, other_vertex: Vertex) -> bool:
1160
+ data_is_equivalent = vertex == other_vertex
1161
+ if not data_is_equivalent:
1162
+ return False
1163
+ return self.vertex_edges_are_identical(vertex, other_vertex)
1164
+
1165
+ @staticmethod
1166
+ def vertex_edges_are_identical(vertex: Vertex, other_vertex: Vertex) -> bool:
1167
+ same_length = len(vertex.edges) == len(other_vertex.edges)
1168
+ if not same_length:
1169
+ return False
1170
+ return all(edge in other_vertex.edges for edge in vertex.edges)
1171
+
1172
+ def update(self, other: Graph) -> Graph:
1173
+ # Existing vertices in self graph
1174
+ existing_vertex_ids = {vertex.id for vertex in self.vertices}
1175
+ # Vertex IDs in the other graph
1176
+ other_vertex_ids = set(other.vertex_map.keys())
1177
+
1178
+ # Find vertices that are in other but not in self (new vertices)
1179
+ new_vertex_ids = other_vertex_ids - existing_vertex_ids
1180
+
1181
+ # Find vertices that are in self but not in other (removed vertices)
1182
+ removed_vertex_ids = existing_vertex_ids - other_vertex_ids
1183
+
1184
+ # Remove vertices that are not in the other graph
1185
+ for vertex_id in removed_vertex_ids:
1186
+ with contextlib.suppress(ValueError):
1187
+ self.remove_vertex(vertex_id)
1188
+
1189
+ # The order here matters because adding the vertex is required
1190
+ # if any of them have edges that point to any of the new vertices
1191
+ # By adding them first, them adding the edges we ensure that the
1192
+ # edges have valid vertices to point to
1193
+
1194
+ # Add new vertices
1195
+ for vertex_id in new_vertex_ids:
1196
+ new_vertex = other.get_vertex(vertex_id)
1197
+ self._add_vertex(new_vertex)
1198
+
1199
+ # Now update the edges
1200
+ for vertex_id in new_vertex_ids:
1201
+ new_vertex = other.get_vertex(vertex_id)
1202
+ self._update_edges(new_vertex)
1203
+ # Graph is set at the end because the edges come from the graph
1204
+ # and the other graph is where the new edges and vertices come from
1205
+ new_vertex.graph = self
1206
+
1207
+ # Update existing vertices that have changed
1208
+ for vertex_id in existing_vertex_ids.intersection(other_vertex_ids):
1209
+ self_vertex = self.get_vertex(vertex_id)
1210
+ other_vertex = other.get_vertex(vertex_id)
1211
+ # If the vertices are not identical, update the vertex
1212
+ if not self.vertex_data_is_identical(self_vertex, other_vertex):
1213
+ self.update_vertex_from_another(self_vertex, other_vertex)
1214
+
1215
+ self.build_graph_maps()
1216
+ self.define_vertices_lists()
1217
+ self.increment_update_count()
1218
+ return self
1219
+
1220
+ def update_vertex_from_another(self, vertex: Vertex, other_vertex: Vertex) -> None:
1221
+ """Updates a vertex from another vertex.
1222
+
1223
+ Args:
1224
+ vertex (Vertex): The vertex to be updated.
1225
+ other_vertex (Vertex): The vertex to update from.
1226
+ """
1227
+ vertex.full_data = other_vertex.full_data
1228
+ vertex.parse_data()
1229
+ # Now we update the edges of the vertex
1230
+ self.update_edges_from_vertex(other_vertex)
1231
+ vertex.params = {}
1232
+ vertex.build_params()
1233
+ vertex.graph = self
1234
+ # If the vertex is frozen, we don't want
1235
+ # to reset the results nor the built attribute
1236
+ if not vertex.frozen:
1237
+ vertex.built = False
1238
+ vertex.result = None
1239
+ vertex.artifacts = {}
1240
+ vertex.set_top_level(self.top_level_vertices)
1241
+ self.reset_all_edges_of_vertex(vertex)
1242
+
1243
+ def reset_all_edges_of_vertex(self, vertex: Vertex) -> None:
1244
+ """Resets all the edges of a vertex."""
1245
+ for edge in vertex.edges:
1246
+ for vid in [edge.source_id, edge.target_id]:
1247
+ if vid in self.vertex_map:
1248
+ vertex_ = self.vertex_map[vid]
1249
+ if not vertex_.frozen:
1250
+ vertex_.build_params()
1251
+
1252
+ def _add_vertex(self, vertex: Vertex) -> None:
1253
+ """Adds a vertex to the graph."""
1254
+ self.vertices.append(vertex)
1255
+ self.vertex_map[vertex.id] = vertex
1256
+
1257
+ def add_vertex(self, vertex: Vertex) -> None:
1258
+ """Adds a new vertex to the graph."""
1259
+ self._add_vertex(vertex)
1260
+ self._update_edges(vertex)
1261
+
1262
+ def _update_edges(self, vertex: Vertex) -> None:
1263
+ """Updates the edges of a vertex."""
1264
+ # Vertex has edges, so we need to update the edges
1265
+ for edge in vertex.edges:
1266
+ if edge not in self.edges and edge.source_id in self.vertex_map and edge.target_id in self.vertex_map:
1267
+ self.edges.append(edge)
1268
+
1269
+ def _build_graph(self) -> None:
1270
+ """Builds the graph from the vertices and edges."""
1271
+ self.vertices = self._build_vertices()
1272
+ self.vertex_map = {vertex.id: vertex for vertex in self.vertices}
1273
+ self.edges = self._build_edges()
1274
+
1275
+ # This is a hack to make sure that the LLM vertex is sent to
1276
+ # the toolkit vertex
1277
+ self._build_vertex_params()
1278
+ self._instantiate_components_in_vertices()
1279
+ self._set_cache_to_vertices_in_cycle()
1280
+ self._set_cache_if_listen_notify_components()
1281
+ for vertex in self.vertices:
1282
+ if vertex.id in self.cycle_vertices:
1283
+ self.run_manager.add_to_cycle_vertices(vertex.id)
1284
+
1285
+ def _get_edges_as_list_of_tuples(self) -> list[tuple[str, str]]:
1286
+ """Returns the edges of the graph as a list of tuples.
1287
+
1288
+ Each tuple contains the source and target handle IDs from the edge data.
1289
+
1290
+ Returns:
1291
+ list[tuple[str, str]]: List of (source_id, target_id) tuples representing graph edges.
1292
+ """
1293
+ return [(e["data"]["sourceHandle"]["id"], e["data"]["targetHandle"]["id"]) for e in self._edges]
1294
+
1295
+ def _set_cache_if_listen_notify_components(self) -> None:
1296
+ """Disables caching for all vertices if Listen/Notify components are present.
1297
+
1298
+ If the graph contains any Listen or Notify components, caching is disabled for all vertices
1299
+ by setting cache=False on their outputs. This ensures proper handling of real-time
1300
+ communication between components.
1301
+ """
1302
+ has_listen_or_notify_component = any(
1303
+ vertex.id.split("-")[0] in {"Listen", "Notify"} for vertex in self.vertices
1304
+ )
1305
+ if has_listen_or_notify_component:
1306
+ for vertex in self.vertices:
1307
+ vertex.apply_on_outputs(lambda output_object: setattr(output_object, "cache", False))
1308
+
1309
+ def _set_cache_to_vertices_in_cycle(self) -> None:
1310
+ """Sets the cache to the vertices in cycle."""
1311
+ edges = self._get_edges_as_list_of_tuples()
1312
+ cycle_vertices = set(find_cycle_vertices(edges))
1313
+ for vertex in self.vertices:
1314
+ if vertex.id in cycle_vertices:
1315
+ vertex.apply_on_outputs(lambda output_object: setattr(output_object, "cache", False))
1316
+
1317
+ def _instantiate_components_in_vertices(self) -> None:
1318
+ """Instantiates the components in the vertices."""
1319
+ for vertex in self.vertices:
1320
+ vertex.instantiate_component(self.user_id)
1321
+
1322
+ def remove_vertex(self, vertex_id: str) -> None:
1323
+ """Removes a vertex from the graph."""
1324
+ vertex = self.get_vertex(vertex_id)
1325
+ if vertex is None:
1326
+ return
1327
+ self.vertices.remove(vertex)
1328
+ self.vertex_map.pop(vertex_id)
1329
+ self.edges = [edge for edge in self.edges if vertex_id not in {edge.source_id, edge.target_id}]
1330
+
1331
+ def _build_vertex_params(self) -> None:
1332
+ """Identifies and handles the LLM vertex within the graph."""
1333
+ for vertex in self.vertices:
1334
+ vertex.build_params()
1335
+
1336
+ def _validate_vertex(self, vertex: Vertex) -> bool:
1337
+ """Validates a vertex."""
1338
+ # All vertices that do not have edges are invalid
1339
+ return len(self.get_vertex_edges(vertex.id)) > 0
1340
+
1341
+ def get_vertex(self, vertex_id: str) -> Vertex:
1342
+ """Returns a vertex by id."""
1343
+ try:
1344
+ return self.vertex_map[vertex_id]
1345
+ except KeyError as e:
1346
+ msg = f"Vertex {vertex_id} not found"
1347
+ raise ValueError(msg) from e
1348
+
1349
+ def get_root_of_group_node(self, vertex_id: str) -> Vertex:
1350
+ """Returns the root of a group node."""
1351
+ if vertex_id in self.top_level_vertices:
1352
+ # Get all vertices with vertex_id as .parent_node_id
1353
+ # then get the one at the top
1354
+ vertices = [vertex for vertex in self.vertices if vertex.parent_node_id == vertex_id]
1355
+ # Now go through successors of the vertices
1356
+ # and get the one that none of its successors is in vertices
1357
+ for vertex in vertices:
1358
+ successors = self.get_all_successors(vertex, recursive=False)
1359
+ if not any(successor in vertices for successor in successors):
1360
+ return vertex
1361
+ msg = f"Vertex {vertex_id} is not a top level vertex or no root vertex found"
1362
+ raise ValueError(msg)
1363
+
1364
+ def get_next_in_queue(self):
1365
+ if not self._run_queue:
1366
+ return None
1367
+ return self._run_queue.popleft()
1368
+
1369
+ def extend_run_queue(self, vertices: list[str]) -> None:
1370
+ self._run_queue.extend(vertices)
1371
+
1372
+ async def astep(
1373
+ self,
1374
+ inputs: InputValueRequest | None = None,
1375
+ files: list[str] | None = None,
1376
+ user_id: str | None = None,
1377
+ event_manager: EventManager | None = None,
1378
+ ):
1379
+ if not self._prepared:
1380
+ msg = "Graph not prepared. Call prepare() first."
1381
+ raise ValueError(msg)
1382
+ if not self._run_queue:
1383
+ self._end_all_traces_async()
1384
+ return Finish()
1385
+ vertex_id = self.get_next_in_queue()
1386
+ chat_service = get_chat_service()
1387
+ vertex_build_result = await self.build_vertex(
1388
+ vertex_id=vertex_id,
1389
+ user_id=user_id,
1390
+ inputs_dict=inputs.model_dump() if inputs else {},
1391
+ files=files,
1392
+ get_cache=chat_service.get_cache,
1393
+ set_cache=chat_service.set_cache,
1394
+ event_manager=event_manager,
1395
+ )
1396
+
1397
+ next_runnable_vertices = await self.get_next_runnable_vertices(
1398
+ self._lock, vertex=vertex_build_result.vertex, cache=False
1399
+ )
1400
+ if self.stop_vertex and self.stop_vertex in next_runnable_vertices:
1401
+ next_runnable_vertices = [self.stop_vertex]
1402
+ self.extend_run_queue(next_runnable_vertices)
1403
+ self.reset_inactivated_vertices()
1404
+ self.reset_activated_vertices()
1405
+
1406
+ await chat_service.set_cache(str(self.flow_id or self._run_id), self)
1407
+ self._record_snapshot(vertex_id)
1408
+ return vertex_build_result
1409
+
1410
+ def get_snapshot(self):
1411
+ return copy.deepcopy(
1412
+ {
1413
+ "run_manager": self.run_manager.to_dict(),
1414
+ "run_queue": self._run_queue,
1415
+ "vertices_layers": self.vertices_layers,
1416
+ "first_layer": self.first_layer,
1417
+ "inactive_vertices": self.inactive_vertices,
1418
+ "activated_vertices": self.activated_vertices,
1419
+ }
1420
+ )
1421
+
1422
+ def _record_snapshot(self, vertex_id: str | None = None) -> None:
1423
+ self._snapshots.append(self.get_snapshot())
1424
+ if vertex_id:
1425
+ self._call_order.append(vertex_id)
1426
+
1427
+ def step(
1428
+ self,
1429
+ inputs: InputValueRequest | None = None,
1430
+ files: list[str] | None = None,
1431
+ user_id: str | None = None,
1432
+ ):
1433
+ """Runs the next vertex in the graph.
1434
+
1435
+ Note:
1436
+ This function is a synchronous wrapper around `astep`.
1437
+ It creates an event loop if one does not exist.
1438
+
1439
+ Args:
1440
+ inputs: The inputs for the vertex. Defaults to None.
1441
+ files: The files for the vertex. Defaults to None.
1442
+ user_id: The user ID. Defaults to None.
1443
+ """
1444
+ return run_until_complete(self.astep(inputs, files, user_id))
1445
+
1446
+ async def build_vertex(
1447
+ self,
1448
+ vertex_id: str,
1449
+ *,
1450
+ get_cache: GetCache | None = None,
1451
+ set_cache: SetCache | None = None,
1452
+ inputs_dict: dict[str, str] | None = None,
1453
+ files: list[str] | None = None,
1454
+ user_id: str | None = None,
1455
+ fallback_to_env_vars: bool = False,
1456
+ event_manager: EventManager | None = None,
1457
+ ) -> VertexBuildResult:
1458
+ """Builds a vertex in the graph.
1459
+
1460
+ Args:
1461
+ vertex_id (str): The ID of the vertex to build.
1462
+ get_cache (GetCache): A coroutine to get the cache.
1463
+ set_cache (SetCache): A coroutine to set the cache.
1464
+ inputs_dict (Optional[Dict[str, str]]): Optional dictionary of inputs for the vertex. Defaults to None.
1465
+ files: (Optional[List[str]]): Optional list of files. Defaults to None.
1466
+ user_id (Optional[str]): Optional user ID. Defaults to None.
1467
+ fallback_to_env_vars (bool): Whether to fallback to environment variables. Defaults to False.
1468
+ event_manager (Optional[EventManager]): Optional event manager. Defaults to None.
1469
+
1470
+ Returns:
1471
+ Tuple: A tuple containing the next runnable vertices, top level vertices, result dictionary,
1472
+ parameters, validity flag, artifacts, and the built vertex.
1473
+
1474
+ Raises:
1475
+ ValueError: If no result is found for the vertex.
1476
+ """
1477
+ vertex = self.get_vertex(vertex_id)
1478
+ self.run_manager.add_to_vertices_being_run(vertex_id)
1479
+ try:
1480
+ params = ""
1481
+ should_build = False
1482
+ if not vertex.frozen:
1483
+ should_build = True
1484
+ else:
1485
+ # Check the cache for the vertex
1486
+ if get_cache is not None:
1487
+ cached_result = await get_cache(key=vertex.id)
1488
+ else:
1489
+ cached_result = CacheMiss()
1490
+ if isinstance(cached_result, CacheMiss):
1491
+ should_build = True
1492
+ else:
1493
+ try:
1494
+ cached_vertex_dict = cached_result["result"]
1495
+ # Now set update the vertex with the cached vertex
1496
+ vertex.built = cached_vertex_dict["built"]
1497
+ vertex.artifacts = cached_vertex_dict["artifacts"]
1498
+ vertex.built_object = cached_vertex_dict["built_object"]
1499
+ vertex.built_result = cached_vertex_dict["built_result"]
1500
+ vertex.full_data = cached_vertex_dict["full_data"]
1501
+ vertex.results = cached_vertex_dict["results"]
1502
+ try:
1503
+ vertex.finalize_build()
1504
+
1505
+ if vertex.result is not None:
1506
+ vertex.result.used_frozen_result = True
1507
+ except Exception: # noqa: BLE001
1508
+ logger.debug("Error finalizing build", exc_info=True)
1509
+ should_build = True
1510
+ except KeyError:
1511
+ should_build = True
1512
+
1513
+ if should_build:
1514
+ await vertex.build(
1515
+ user_id=user_id,
1516
+ inputs=inputs_dict,
1517
+ fallback_to_env_vars=fallback_to_env_vars,
1518
+ files=files,
1519
+ event_manager=event_manager,
1520
+ )
1521
+ if set_cache is not None:
1522
+ vertex_dict = {
1523
+ "built": vertex.built,
1524
+ "results": vertex.results,
1525
+ "artifacts": vertex.artifacts,
1526
+ "built_object": vertex.built_object,
1527
+ "built_result": vertex.built_result,
1528
+ "full_data": vertex.full_data,
1529
+ }
1530
+
1531
+ await set_cache(key=vertex.id, data=vertex_dict)
1532
+
1533
+ except Exception as exc:
1534
+ if not isinstance(exc, ComponentBuildError):
1535
+ await logger.aexception("Error building Component")
1536
+ raise
1537
+
1538
+ if vertex.result is not None:
1539
+ params = f"{vertex.built_object_repr()}{params}"
1540
+ valid = True
1541
+ result_dict = vertex.result
1542
+ artifacts = vertex.artifacts
1543
+ else:
1544
+ msg = f"Error building Component: no result found for vertex {vertex_id}"
1545
+ raise ValueError(msg)
1546
+
1547
+ return VertexBuildResult(
1548
+ result_dict=result_dict, params=params, valid=valid, artifacts=artifacts, vertex=vertex
1549
+ )
1550
+
1551
+ def get_vertex_edges(
1552
+ self,
1553
+ vertex_id: str,
1554
+ *,
1555
+ is_target: bool | None = None,
1556
+ is_source: bool | None = None,
1557
+ ) -> list[CycleEdge]:
1558
+ """Returns a list of edges for a given vertex."""
1559
+ # The idea here is to return the edges that have the vertex_id as source or target
1560
+ # or both
1561
+ return [
1562
+ edge
1563
+ for edge in self.edges
1564
+ if (edge.source_id == vertex_id and is_source is not False)
1565
+ or (edge.target_id == vertex_id and is_target is not False)
1566
+ ]
1567
+
1568
+ def get_vertices_with_target(self, vertex_id: str) -> list[Vertex]:
1569
+ """Returns the vertices connected to a vertex."""
1570
+ vertices: list[Vertex] = []
1571
+ for edge in self.edges:
1572
+ if edge.target_id == vertex_id:
1573
+ vertex = self.get_vertex(edge.source_id)
1574
+ if vertex is None:
1575
+ continue
1576
+ vertices.append(vertex)
1577
+ return vertices
1578
+
1579
+ async def process(
1580
+ self,
1581
+ *,
1582
+ fallback_to_env_vars: bool,
1583
+ start_component_id: str | None = None,
1584
+ event_manager: EventManager | None = None,
1585
+ ) -> Graph:
1586
+ """Processes the graph with vertices in each layer run in parallel."""
1587
+ has_webhook_component = "webhook" in start_component_id.lower() if start_component_id else False
1588
+ first_layer = self.sort_vertices(start_component_id=start_component_id)
1589
+ vertex_task_run_count: dict[str, int] = {}
1590
+ to_process = deque(first_layer)
1591
+ layer_index = 0
1592
+ chat_service = get_chat_service()
1593
+ await self.initialize_run()
1594
+ lock = asyncio.Lock()
1595
+ while to_process:
1596
+ current_batch = list(to_process) # Copy current deque items to a list
1597
+ to_process.clear() # Clear the deque for new items
1598
+ tasks = []
1599
+ for vertex_id in current_batch:
1600
+ vertex = self.get_vertex(vertex_id)
1601
+ task = asyncio.create_task(
1602
+ self.build_vertex(
1603
+ vertex_id=vertex_id,
1604
+ user_id=self.user_id,
1605
+ inputs_dict={},
1606
+ fallback_to_env_vars=fallback_to_env_vars,
1607
+ get_cache=chat_service.get_cache,
1608
+ set_cache=chat_service.set_cache,
1609
+ event_manager=event_manager,
1610
+ ),
1611
+ name=f"{vertex.id} Run {vertex_task_run_count.get(vertex_id, 0)}",
1612
+ )
1613
+ tasks.append(task)
1614
+ vertex_task_run_count[vertex_id] = vertex_task_run_count.get(vertex_id, 0) + 1
1615
+
1616
+ await logger.adebug(f"Running layer {layer_index} with {len(tasks)} tasks, {current_batch}")
1617
+ try:
1618
+ next_runnable_vertices = await self._execute_tasks(
1619
+ tasks, lock=lock, has_webhook_component=has_webhook_component
1620
+ )
1621
+ except Exception:
1622
+ await logger.aexception(f"Error executing tasks in layer {layer_index}")
1623
+ raise
1624
+ if not next_runnable_vertices:
1625
+ break
1626
+ to_process.extend(next_runnable_vertices)
1627
+ layer_index += 1
1628
+
1629
+ await logger.adebug("Graph processing complete")
1630
+ return self
1631
+
1632
+ def find_next_runnable_vertices(self, vertex_successors_ids: list[str]) -> list[str]:
1633
+ """Determines the next set of runnable vertices from a list of successor vertex IDs.
1634
+
1635
+ For each successor, if it is not runnable, recursively finds its runnable
1636
+ predecessors; otherwise, includes the successor itself. Returns a sorted list of all such vertex IDs.
1637
+ """
1638
+ next_runnable_vertices = set()
1639
+ for v_id in sorted(vertex_successors_ids):
1640
+ if not self.is_vertex_runnable(v_id):
1641
+ next_runnable_vertices.update(self.find_runnable_predecessors_for_successor(v_id))
1642
+ else:
1643
+ next_runnable_vertices.add(v_id)
1644
+
1645
+ return sorted(next_runnable_vertices)
1646
+
1647
+ async def get_next_runnable_vertices(self, lock: asyncio.Lock, vertex: Vertex, *, cache: bool = True) -> list[str]:
1648
+ """Determines the next set of runnable vertex IDs after a vertex completes execution.
1649
+
1650
+ If the completed vertex is a state vertex, any recently activated state vertices are also included.
1651
+ Updates the run manager to reflect the new runnable state and optionally caches the updated graph state.
1652
+
1653
+ Args:
1654
+ lock: An asyncio lock for thread-safe updates.
1655
+ vertex: The vertex that has just finished execution.
1656
+ cache: If True, caches the updated graph state.
1657
+
1658
+ Returns:
1659
+ A list of vertex IDs that are ready to be executed next.
1660
+ """
1661
+ v_id = vertex.id
1662
+ v_successors_ids = vertex.successors_ids
1663
+ self.run_manager.ran_at_least_once.add(v_id)
1664
+ async with lock:
1665
+ self.run_manager.remove_vertex_from_runnables(v_id)
1666
+ next_runnable_vertices = self.find_next_runnable_vertices(v_successors_ids)
1667
+
1668
+ for next_v_id in set(next_runnable_vertices): # Use set to avoid duplicates
1669
+ if next_v_id == v_id:
1670
+ next_runnable_vertices.remove(v_id)
1671
+ else:
1672
+ self.run_manager.add_to_vertices_being_run(next_v_id)
1673
+ if cache and self.flow_id is not None:
1674
+ set_cache_coro = partial(get_chat_service().set_cache, key=self.flow_id)
1675
+ await set_cache_coro(data=self, lock=lock)
1676
+ if vertex.is_state:
1677
+ next_runnable_vertices.extend(self.activated_vertices)
1678
+ return next_runnable_vertices
1679
+
1680
+ async def _log_vertex_build_from_exception(self, vertex_id: str, result: Exception) -> None:
1681
+ """Logs detailed information about a vertex build exception.
1682
+
1683
+ Formats the exception message and stack trace, constructs an error output,
1684
+ and records the failure using the vertex build logging system.
1685
+ """
1686
+ if isinstance(result, ComponentBuildError):
1687
+ params = result.message
1688
+ tb = result.formatted_traceback
1689
+ else:
1690
+ from vibe_surf.langflow.api.utils import format_exception_message
1691
+
1692
+ tb = traceback.format_exc()
1693
+ await logger.aexception("Error building Component")
1694
+
1695
+ params = format_exception_message(result)
1696
+ message = {"errorMessage": params, "stackTrace": tb}
1697
+ vertex = self.get_vertex(vertex_id)
1698
+ output_label = vertex.outputs[0]["name"] if vertex.outputs else "output"
1699
+ outputs = {output_label: OutputValue(message=message, type="error")}
1700
+ result_data_response = {
1701
+ "results": {},
1702
+ "outputs": outputs,
1703
+ "logs": {},
1704
+ "message": {},
1705
+ "artifacts": {},
1706
+ "timedelta": None,
1707
+ "duration": None,
1708
+ "used_frozen_result": False,
1709
+ }
1710
+
1711
+ await log_vertex_build(
1712
+ flow_id=self.flow_id or "",
1713
+ vertex_id=vertex_id or "errors",
1714
+ valid=False,
1715
+ params=params,
1716
+ data=result_data_response,
1717
+ artifacts={},
1718
+ )
1719
+
1720
+ async def _execute_tasks(
1721
+ self, tasks: list[asyncio.Task], lock: asyncio.Lock, *, has_webhook_component: bool = False
1722
+ ) -> list[str]:
1723
+ """Executes tasks in parallel, handling exceptions for each task.
1724
+
1725
+ Args:
1726
+ tasks: List of tasks to execute
1727
+ lock: Async lock for synchronization
1728
+ has_webhook_component: Whether the graph has a webhook component
1729
+ """
1730
+ results = []
1731
+ completed_tasks = await asyncio.gather(*tasks, return_exceptions=True)
1732
+ vertices: list[Vertex] = []
1733
+
1734
+ for i, result in enumerate(completed_tasks):
1735
+ task_name = tasks[i].get_name()
1736
+ vertex_id = tasks[i].get_name().split(" ")[0]
1737
+
1738
+ if isinstance(result, Exception):
1739
+ await logger.aerror(f"Task {task_name} failed with exception: {result}")
1740
+ if has_webhook_component:
1741
+ await self._log_vertex_build_from_exception(vertex_id, result)
1742
+
1743
+ # Cancel all remaining tasks
1744
+ for t in tasks[i + 1 :]:
1745
+ t.cancel()
1746
+ raise result
1747
+ if isinstance(result, VertexBuildResult):
1748
+ if self.flow_id is not None:
1749
+ await log_vertex_build(
1750
+ flow_id=self.flow_id,
1751
+ vertex_id=result.vertex.id,
1752
+ valid=result.valid,
1753
+ params=result.params,
1754
+ data=result.result_dict,
1755
+ artifacts=result.artifacts,
1756
+ )
1757
+
1758
+ vertices.append(result.vertex)
1759
+ else:
1760
+ msg = f"Invalid result from task {task_name}: {result}"
1761
+ raise TypeError(msg)
1762
+
1763
+ for v in vertices:
1764
+ # set all executed vertices as non-runnable to not run them again.
1765
+ # they could be calculated as predecessor or successors of parallel vertices
1766
+ # This could usually happen with input vertices like ChatInput
1767
+ self.run_manager.remove_vertex_from_runnables(v.id)
1768
+
1769
+ await logger.adebug(f"Vertex {v.id}, result: {v.built_result}, object: {v.built_object}")
1770
+
1771
+ for v in vertices:
1772
+ next_runnable_vertices = await self.get_next_runnable_vertices(lock, vertex=v, cache=False)
1773
+ results.extend(next_runnable_vertices)
1774
+ return list(set(results))
1775
+
1776
+ def topological_sort(self) -> list[Vertex]:
1777
+ """Performs a topological sort of the vertices in the graph.
1778
+
1779
+ Returns:
1780
+ List[Vertex]: A list of vertices in topological order.
1781
+
1782
+ Raises:
1783
+ ValueError: If the graph contains a cycle.
1784
+ """
1785
+ # States: 0 = unvisited, 1 = visiting, 2 = visited
1786
+ state = dict.fromkeys(self.vertices, 0)
1787
+ sorted_vertices = []
1788
+
1789
+ def dfs(vertex) -> None:
1790
+ if state[vertex] == 1:
1791
+ # We have a cycle
1792
+ msg = "Graph contains a cycle, cannot perform topological sort"
1793
+ raise ValueError(msg)
1794
+ if state[vertex] == 0:
1795
+ state[vertex] = 1
1796
+ for edge in vertex.edges:
1797
+ if edge.source_id == vertex.id:
1798
+ dfs(self.get_vertex(edge.target_id))
1799
+ state[vertex] = 2
1800
+ sorted_vertices.append(vertex)
1801
+
1802
+ # Visit each vertex
1803
+ for vertex in self.vertices:
1804
+ if state[vertex] == 0:
1805
+ dfs(vertex)
1806
+
1807
+ return list(reversed(sorted_vertices))
1808
+
1809
+ def generator_build(self) -> Generator[Vertex, None, None]:
1810
+ """Builds each vertex in the graph and yields it."""
1811
+ sorted_vertices = self.topological_sort()
1812
+ logger.debug("There are %s vertices in the graph", len(sorted_vertices))
1813
+ yield from sorted_vertices
1814
+
1815
+ def get_predecessors(self, vertex):
1816
+ """Returns the predecessors of a vertex."""
1817
+ return [self.get_vertex(source_id) for source_id in self.predecessor_map.get(vertex.id, [])]
1818
+
1819
+ def get_all_successors(self, vertex: Vertex, *, recursive=True, flat=True, visited=None):
1820
+ """Returns all successors of a given vertex, optionally recursively and as a flat or nested list.
1821
+
1822
+ Args:
1823
+ vertex: The vertex whose successors are to be retrieved.
1824
+ recursive: If True, retrieves successors recursively; otherwise, only immediate successors.
1825
+ flat: If True, returns a flat list of successors; if False, returns a nested list structure.
1826
+ visited: Internal set used to track visited vertices and prevent cycles.
1827
+
1828
+ Returns:
1829
+ A list of successor vertices, either flat or nested depending on the `flat` parameter.
1830
+ """
1831
+ if visited is None:
1832
+ visited = set()
1833
+
1834
+ # Prevent revisiting vertices to avoid infinite loops in cyclic graphs
1835
+ if vertex in visited:
1836
+ return []
1837
+
1838
+ visited.add(vertex)
1839
+
1840
+ successors = vertex.successors
1841
+ if not successors:
1842
+ return []
1843
+
1844
+ successors_result = []
1845
+
1846
+ for successor in successors:
1847
+ if recursive:
1848
+ next_successors = self.get_all_successors(successor, recursive=recursive, flat=flat, visited=visited)
1849
+ if flat:
1850
+ successors_result.extend(next_successors)
1851
+ else:
1852
+ successors_result.append(next_successors)
1853
+ if flat:
1854
+ successors_result.append(successor)
1855
+ else:
1856
+ successors_result.append([successor])
1857
+
1858
+ if not flat and successors_result:
1859
+ return [successors, *successors_result]
1860
+
1861
+ return successors_result
1862
+
1863
+ def get_successors(self, vertex: Vertex) -> list[Vertex]:
1864
+ """Returns the immediate successor vertices of the given vertex.
1865
+
1866
+ Args:
1867
+ vertex: The vertex whose successors are to be retrieved.
1868
+
1869
+ Returns:
1870
+ A list of vertices that are direct successors of the specified vertex.
1871
+ """
1872
+ return [self.get_vertex(target_id) for target_id in self.successor_map.get(vertex.id, set())]
1873
+
1874
+ def get_all_predecessors(self, vertex: Vertex, *, recursive: bool = True) -> list[Vertex]:
1875
+ """Retrieves all predecessor vertices of a given vertex.
1876
+
1877
+ If `recursive` is True, returns both direct and indirect predecessors by
1878
+ traversing the graph recursively. If False, returns only the immediate predecessors.
1879
+ """
1880
+ _predecessors = self.predecessor_map.get(vertex.id, [])
1881
+ predecessors = [self.get_vertex(v_id) for v_id in _predecessors]
1882
+ if recursive:
1883
+ for predecessor in _predecessors:
1884
+ predecessors.extend(self.get_all_predecessors(self.get_vertex(predecessor), recursive=recursive))
1885
+ else:
1886
+ predecessors.extend([self.get_vertex(predecessor) for predecessor in _predecessors])
1887
+ return predecessors
1888
+
1889
+ def get_vertex_neighbors(self, vertex: Vertex) -> dict[Vertex, int]:
1890
+ """Returns a dictionary mapping each direct neighbor of a vertex to the count of connecting edges.
1891
+
1892
+ A neighbor is any vertex directly connected to the input vertex, either as a source or target.
1893
+ The count reflects the number of edges between the input vertex and each neighbor.
1894
+ """
1895
+ neighbors: dict[Vertex, int] = {}
1896
+ for edge in self.edges:
1897
+ if edge.source_id == vertex.id:
1898
+ neighbor = self.get_vertex(edge.target_id)
1899
+ if neighbor is None:
1900
+ continue
1901
+ if neighbor not in neighbors:
1902
+ neighbors[neighbor] = 0
1903
+ neighbors[neighbor] += 1
1904
+ elif edge.target_id == vertex.id:
1905
+ neighbor = self.get_vertex(edge.source_id)
1906
+ if neighbor is None:
1907
+ continue
1908
+ if neighbor not in neighbors:
1909
+ neighbors[neighbor] = 0
1910
+ neighbors[neighbor] += 1
1911
+ return neighbors
1912
+
1913
+ @property
1914
+ def cycles(self):
1915
+ if self._cycles is None:
1916
+ if self._start is None:
1917
+ self._cycles = []
1918
+ else:
1919
+ entry_vertex = self._start._id
1920
+ edges = [(e["data"]["sourceHandle"]["id"], e["data"]["targetHandle"]["id"]) for e in self._edges]
1921
+ self._cycles = find_all_cycle_edges(entry_vertex, edges)
1922
+ return self._cycles
1923
+
1924
+ @property
1925
+ def cycle_vertices(self):
1926
+ if self._cycle_vertices is None:
1927
+ edges = self._get_edges_as_list_of_tuples()
1928
+ self._cycle_vertices = set(find_cycle_vertices(edges))
1929
+ return self._cycle_vertices
1930
+
1931
+ def _build_edges(self) -> list[CycleEdge]:
1932
+ """Builds the edges of the graph."""
1933
+ # Edge takes two vertices as arguments, so we need to build the vertices first
1934
+ # and then build the edges
1935
+ # if we can't find a vertex, we raise an error
1936
+ edges: set[CycleEdge | Edge] = set()
1937
+ for edge in self._edges:
1938
+ new_edge = self.build_edge(edge)
1939
+ edges.add(new_edge)
1940
+ if self.vertices and not edges:
1941
+ logger.warning("Graph has vertices but no edges")
1942
+ return list(cast("Iterable[CycleEdge]", edges))
1943
+
1944
+ def build_edge(self, edge: EdgeData) -> CycleEdge | Edge:
1945
+ source = self.get_vertex(edge["source"])
1946
+ target = self.get_vertex(edge["target"])
1947
+
1948
+ if source is None:
1949
+ msg = f"Source vertex {edge['source']} not found"
1950
+ raise ValueError(msg)
1951
+ if target is None:
1952
+ msg = f"Target vertex {edge['target']} not found"
1953
+ raise ValueError(msg)
1954
+ if any(v in self.cycle_vertices for v in [source.id, target.id]):
1955
+ new_edge: CycleEdge | Edge = CycleEdge(source, target, edge)
1956
+ else:
1957
+ new_edge = Edge(source, target, edge)
1958
+ return new_edge
1959
+
1960
+ @staticmethod
1961
+ def _get_vertex_class(node_type: str, node_base_type: str, node_id: str) -> type[Vertex]:
1962
+ """Returns the node class based on the node type."""
1963
+ # First we check for the node_base_type
1964
+ node_name = node_id.split("-")[0]
1965
+ if node_name in InterfaceComponentTypes:
1966
+ return InterfaceVertex
1967
+ if node_name in {"SharedState", "Notify", "Listen"}:
1968
+ return StateVertex
1969
+ if node_base_type in lazy_load_vertex_dict.vertex_type_map:
1970
+ return lazy_load_vertex_dict.vertex_type_map[node_base_type]
1971
+ if node_name in lazy_load_vertex_dict.vertex_type_map:
1972
+ return lazy_load_vertex_dict.vertex_type_map[node_name]
1973
+
1974
+ if node_type in lazy_load_vertex_dict.vertex_type_map:
1975
+ return lazy_load_vertex_dict.vertex_type_map[node_type]
1976
+ return Vertex
1977
+
1978
+ def _build_vertices(self) -> list[Vertex]:
1979
+ """Builds the vertices of the graph."""
1980
+ vertices: list[Vertex] = []
1981
+ for frontend_data in self._vertices:
1982
+ if frontend_data.get("type") == NodeTypeEnum.NoteNode:
1983
+ continue
1984
+ try:
1985
+ vertex_instance = self.get_vertex(frontend_data["id"])
1986
+ except ValueError:
1987
+ vertex_instance = self._create_vertex(frontend_data)
1988
+ vertices.append(vertex_instance)
1989
+
1990
+ return vertices
1991
+
1992
+ def _create_vertex(self, frontend_data: NodeData):
1993
+ vertex_data = frontend_data["data"]
1994
+ vertex_type: str = vertex_data["type"]
1995
+ vertex_base_type: str = vertex_data["node"]["template"]["_type"]
1996
+ if "id" not in vertex_data:
1997
+ msg = f"Vertex data for {vertex_data['display_name']} does not contain an id"
1998
+ raise ValueError(msg)
1999
+
2000
+ vertex_class = self._get_vertex_class(vertex_type, vertex_base_type, vertex_data["id"])
2001
+
2002
+ vertex_instance = vertex_class(frontend_data, graph=self)
2003
+ vertex_instance.set_top_level(self.top_level_vertices)
2004
+ return vertex_instance
2005
+
2006
+ def prepare(self, stop_component_id: str | None = None, start_component_id: str | None = None):
2007
+ self.initialize()
2008
+ if stop_component_id and start_component_id:
2009
+ msg = "You can only provide one of stop_component_id or start_component_id"
2010
+ raise ValueError(msg)
2011
+
2012
+ if stop_component_id or start_component_id:
2013
+ try:
2014
+ first_layer = self.sort_vertices(stop_component_id, start_component_id)
2015
+ except Exception: # noqa: BLE001
2016
+ logger.exception("Error sorting vertices")
2017
+ first_layer = self.sort_vertices()
2018
+ else:
2019
+ first_layer = self.sort_vertices()
2020
+
2021
+ for vertex_id in first_layer:
2022
+ self.run_manager.add_to_vertices_being_run(vertex_id)
2023
+ if vertex_id in self.cycle_vertices:
2024
+ self.run_manager.add_to_cycle_vertices(vertex_id)
2025
+ self._first_layer = sorted(first_layer)
2026
+ self._run_queue = deque(self._first_layer)
2027
+ self._prepared = True
2028
+ self._record_snapshot()
2029
+ return self
2030
+
2031
+ @staticmethod
2032
+ def get_children_by_vertex_type(vertex: Vertex, vertex_type: str) -> list[Vertex]:
2033
+ """Returns the children of a vertex based on the vertex type."""
2034
+ children = []
2035
+ vertex_types = [vertex.data["type"]]
2036
+ if "node" in vertex.data:
2037
+ vertex_types += vertex.data["node"]["base_classes"]
2038
+ if vertex_type in vertex_types:
2039
+ children.append(vertex)
2040
+ return children
2041
+
2042
+ def __repr__(self) -> str:
2043
+ vertex_ids = [vertex.id for vertex in self.vertices]
2044
+ edges_repr = "\n".join([f" {edge.source_id} --> {edge.target_id}" for edge in self.edges])
2045
+
2046
+ return (
2047
+ f"Graph Representation:\n"
2048
+ f"----------------------\n"
2049
+ f"Vertices ({len(vertex_ids)}):\n"
2050
+ f" {', '.join(map(str, vertex_ids))}\n\n"
2051
+ f"Edges ({len(self.edges)}):\n"
2052
+ f"{edges_repr}"
2053
+ )
2054
+
2055
+ def __hash__(self) -> int:
2056
+ """Return hash of the graph based on its string representation."""
2057
+ return hash(self.__repr__())
2058
+
2059
+ def get_vertex_predecessors_ids(self, vertex_id: str) -> list[str]:
2060
+ """Get the predecessor IDs of a vertex."""
2061
+ return [v.id for v in self.get_predecessors(self.get_vertex(vertex_id))]
2062
+
2063
+ def get_vertex_successors_ids(self, vertex_id: str) -> list[str]:
2064
+ """Get the successor IDs of a vertex."""
2065
+ return [v.id for v in self.get_vertex(vertex_id).successors]
2066
+
2067
+ def get_vertex_input_status(self, vertex_id: str) -> bool:
2068
+ """Check if a vertex is an input vertex."""
2069
+ return self.get_vertex(vertex_id).is_input
2070
+
2071
+ def get_parent_map(self) -> dict[str, str | None]:
2072
+ """Get the parent node map for all vertices."""
2073
+ return {vertex.id: vertex.parent_node_id for vertex in self.vertices}
2074
+
2075
+ def get_vertex_ids(self) -> list[str]:
2076
+ """Get all vertex IDs in the graph."""
2077
+ return [vertex.id for vertex in self.vertices]
2078
+
2079
+ def sort_vertices(
2080
+ self,
2081
+ stop_component_id: str | None = None,
2082
+ start_component_id: str | None = None,
2083
+ ) -> list[str]:
2084
+ """Sorts the vertices in the graph."""
2085
+ self.mark_all_vertices("ACTIVE")
2086
+
2087
+ first_layer, remaining_layers = get_sorted_vertices(
2088
+ vertices_ids=self.get_vertex_ids(),
2089
+ cycle_vertices=self.cycle_vertices,
2090
+ stop_component_id=stop_component_id,
2091
+ start_component_id=start_component_id,
2092
+ graph_dict=self.__to_dict(),
2093
+ in_degree_map=self.in_degree_map,
2094
+ successor_map=self.successor_map,
2095
+ predecessor_map=self.predecessor_map,
2096
+ is_input_vertex=self.get_vertex_input_status,
2097
+ get_vertex_predecessors=self.get_vertex_predecessors_ids,
2098
+ get_vertex_successors=self.get_vertex_successors_ids,
2099
+ is_cyclic=self.is_cyclic,
2100
+ )
2101
+
2102
+ self.increment_run_count()
2103
+ self._sorted_vertices_layers = [first_layer, *remaining_layers]
2104
+ self.vertices_layers = remaining_layers
2105
+ self.vertices_to_run = set(chain.from_iterable([first_layer, *remaining_layers]))
2106
+ self.build_run_map()
2107
+ self._first_layer = first_layer
2108
+ return first_layer
2109
+
2110
+ @staticmethod
2111
+ def sort_interface_components_first(vertices_layers: list[list[str]]) -> list[list[str]]:
2112
+ """Sorts the vertices in the graph so that vertices containing ChatInput or ChatOutput come first."""
2113
+
2114
+ def contains_interface_component(vertex):
2115
+ return any(component.value in vertex for component in InterfaceComponentTypes)
2116
+
2117
+ # Sort each inner list so that vertices containing ChatInput or ChatOutput come first
2118
+ return [
2119
+ sorted(
2120
+ inner_list,
2121
+ key=lambda vertex: not contains_interface_component(vertex),
2122
+ )
2123
+ for inner_list in vertices_layers
2124
+ ]
2125
+
2126
+ def sort_by_avg_build_time(self, vertices_layers: list[list[str]]) -> list[list[str]]:
2127
+ """Sorts the vertices in the graph so that vertices with the lowest average build time come first."""
2128
+
2129
+ def sort_layer_by_avg_build_time(vertices_ids: list[str]) -> list[str]:
2130
+ """Sorts the vertices in the graph so that vertices with the lowest average build time come first."""
2131
+ if len(vertices_ids) == 1:
2132
+ return vertices_ids
2133
+ vertices_ids.sort(key=lambda vertex_id: self.get_vertex(vertex_id).avg_build_time)
2134
+
2135
+ return vertices_ids
2136
+
2137
+ return [sort_layer_by_avg_build_time(layer) for layer in vertices_layers]
2138
+
2139
+ def is_vertex_runnable(self, vertex_id: str) -> bool:
2140
+ """Returns whether a vertex is runnable."""
2141
+ # Check if vertex is conditionally excluded (for conditional routing)
2142
+ if vertex_id in self.conditionally_excluded_vertices:
2143
+ return False
2144
+ is_active = self.get_vertex(vertex_id).is_active()
2145
+ is_loop = self.get_vertex(vertex_id).is_loop
2146
+ return self.run_manager.is_vertex_runnable(vertex_id, is_active=is_active, is_loop=is_loop)
2147
+
2148
+ def build_run_map(self) -> None:
2149
+ """Builds the run map for the graph.
2150
+
2151
+ This method is responsible for building the run map for the graph,
2152
+ which maps each node in the graph to its corresponding run function.
2153
+ """
2154
+ self.run_manager.build_run_map(predecessor_map=self.predecessor_map, vertices_to_run=self.vertices_to_run)
2155
+
2156
+ def find_runnable_predecessors_for_successors(self, vertex_id: str) -> list[str]:
2157
+ """For each successor of the current vertex, find runnable predecessors if any.
2158
+
2159
+ This checks the direct predecessors of each successor to identify any that are
2160
+ immediately runnable, expanding the search to ensure progress can be made.
2161
+ """
2162
+ runnable_vertices = []
2163
+ for successor_id in self.run_manager.run_map.get(vertex_id, []):
2164
+ runnable_vertices.extend(self.find_runnable_predecessors_for_successor(successor_id))
2165
+
2166
+ return sorted(runnable_vertices)
2167
+
2168
+ def find_runnable_predecessors_for_successor(self, vertex_id: str) -> list[str]:
2169
+ runnable_vertices = []
2170
+ visited = set()
2171
+
2172
+ def find_runnable_predecessors(predecessor_id: str) -> None:
2173
+ if predecessor_id in visited:
2174
+ return
2175
+ visited.add(predecessor_id)
2176
+
2177
+ if self.is_vertex_runnable(predecessor_id):
2178
+ runnable_vertices.append(predecessor_id)
2179
+ else:
2180
+ for pred_pred_id in self.run_manager.run_predecessors.get(predecessor_id, []):
2181
+ find_runnable_predecessors(pred_pred_id)
2182
+
2183
+ for predecessor_id in self.run_manager.run_predecessors.get(vertex_id, []):
2184
+ find_runnable_predecessors(predecessor_id)
2185
+ return runnable_vertices
2186
+
2187
+ def remove_from_predecessors(self, vertex_id: str) -> None:
2188
+ self.run_manager.remove_from_predecessors(vertex_id)
2189
+
2190
+ def remove_vertex_from_runnables(self, vertex_id: str) -> None:
2191
+ self.run_manager.remove_vertex_from_runnables(vertex_id)
2192
+
2193
+ def get_top_level_vertices(self, vertices_ids):
2194
+ """Retrieves the top-level vertices from the given graph based on the provided vertex IDs.
2195
+
2196
+ Args:
2197
+ vertices_ids (list): A list of vertex IDs.
2198
+
2199
+ Returns:
2200
+ list: A list of top-level vertex IDs.
2201
+
2202
+ """
2203
+ top_level_vertices = []
2204
+ for vertex_id in vertices_ids:
2205
+ vertex = self.get_vertex(vertex_id)
2206
+ if vertex.parent_is_top_level:
2207
+ top_level_vertices.append(vertex.parent_node_id)
2208
+ else:
2209
+ top_level_vertices.append(vertex_id)
2210
+ return top_level_vertices
2211
+
2212
+ def build_in_degree(self, edges: list[CycleEdge]) -> dict[str, int]:
2213
+ in_degree: dict[str, int] = defaultdict(int)
2214
+
2215
+ for edge in edges:
2216
+ # We don't need to count if a Component connects more than one
2217
+ # time to the same vertex.
2218
+ in_degree[edge.target_id] += 1
2219
+ for vertex in self.vertices:
2220
+ if vertex.id not in in_degree:
2221
+ in_degree[vertex.id] = 0
2222
+ return in_degree
2223
+
2224
+ @staticmethod
2225
+ def build_adjacency_maps(edges: list[CycleEdge]) -> tuple[dict[str, list[str]], dict[str, list[str]]]:
2226
+ """Returns the adjacency maps for the graph."""
2227
+ predecessor_map: dict[str, list[str]] = defaultdict(list)
2228
+ successor_map: dict[str, list[str]] = defaultdict(list)
2229
+ for edge in edges:
2230
+ predecessor_map[edge.target_id].append(edge.source_id)
2231
+ successor_map[edge.source_id].append(edge.target_id)
2232
+ return predecessor_map, successor_map
2233
+
2234
+ def __to_dict(self) -> dict[str, dict[str, list[str]]]:
2235
+ """Converts the graph to a dictionary."""
2236
+ result: dict = {}
2237
+ for vertex in self.vertices:
2238
+ vertex_id = vertex.id
2239
+ sucessors = [i.id for i in self.get_all_successors(vertex)]
2240
+ predecessors = [i.id for i in self.get_predecessors(vertex)]
2241
+ result |= {vertex_id: {"successors": sucessors, "predecessors": predecessors}}
2242
+ return result