vibesurf 0.1.43__py3-none-any.whl → 0.2.9a2__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.
Files changed (2835) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +1 -77
  3. vibe_surf/agents/prompts/vibe_surf_prompt.py +41 -4
  4. vibe_surf/agents/report_writer_agent.py +18 -38
  5. vibe_surf/agents/vibe_surf_agent.py +121 -133
  6. vibe_surf/agents/views.py +6 -15
  7. vibe_surf/backend/api/composio.py +46 -1
  8. vibe_surf/backend/api/schedule.py +331 -0
  9. vibe_surf/backend/api/vibesurf.py +449 -0
  10. vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
  11. vibe_surf/backend/database/models.py +34 -1
  12. vibe_surf/backend/database/queries.py +254 -1
  13. vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
  14. vibe_surf/backend/frontend/assets/SlackIcon-DH9MFXnM.js +1 -0
  15. vibe_surf/backend/frontend/assets/Wikipedia-MKjlsFhR.js +1 -0
  16. vibe_surf/backend/frontend/assets/Wolfram-DZjh94KW.js +1 -0
  17. vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  18. vibe_surf/backend/frontend/assets/a-arrow-down-M5pMOHfz.js +6 -0
  19. vibe_surf/backend/frontend/assets/a-arrow-up-Bhux1P9g.js +6 -0
  20. vibe_surf/backend/frontend/assets/a-large-small-CxpoIZ2k.js +6 -0
  21. vibe_surf/backend/frontend/assets/accessibility-DIOswxup.js +6 -0
  22. vibe_surf/backend/frontend/assets/activity-Cgoj6BfB.js +6 -0
  23. vibe_surf/backend/frontend/assets/air-vent-BRuCRSP-.js +6 -0
  24. vibe_surf/backend/frontend/assets/airplay-D6ddOHpT.js +6 -0
  25. vibe_surf/backend/frontend/assets/alarm-clock-BswE0svo.js +6 -0
  26. vibe_surf/backend/frontend/assets/alarm-clock-check-CMKnL746.js +6 -0
  27. vibe_surf/backend/frontend/assets/alarm-clock-minus-Cmry03T1.js +6 -0
  28. vibe_surf/backend/frontend/assets/alarm-clock-off-ByCGR7KD.js +6 -0
  29. vibe_surf/backend/frontend/assets/alarm-clock-plus-D80NSz4S.js +6 -0
  30. vibe_surf/backend/frontend/assets/alarm-smoke-DyUVOJUh.js +6 -0
  31. vibe_surf/backend/frontend/assets/album-CGIJADgR.js +6 -0
  32. vibe_surf/backend/frontend/assets/align-center-Cb9nxg1u.js +6 -0
  33. vibe_surf/backend/frontend/assets/align-center-horizontal-DunWyH8w.js +6 -0
  34. vibe_surf/backend/frontend/assets/align-center-vertical-COWbwf4r.js +6 -0
  35. vibe_surf/backend/frontend/assets/align-end-horizontal-BXGWZnJg.js +6 -0
  36. vibe_surf/backend/frontend/assets/align-end-vertical-DsDprlL7.js +6 -0
  37. vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-fSZ29QkE.js +6 -0
  38. vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-C3BFRnLg.js +6 -0
  39. vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-DqYzU1-w.js +6 -0
  40. vibe_surf/backend/frontend/assets/align-horizontal-justify-center-2iNXkDKh.js +6 -0
  41. vibe_surf/backend/frontend/assets/align-horizontal-justify-end-COPIkT0U.js +6 -0
  42. vibe_surf/backend/frontend/assets/align-horizontal-justify-start-DoS3Jrzb.js +6 -0
  43. vibe_surf/backend/frontend/assets/align-horizontal-space-around-k9yEGjMh.js +6 -0
  44. vibe_surf/backend/frontend/assets/align-horizontal-space-between-C6RzmtkD.js +6 -0
  45. vibe_surf/backend/frontend/assets/align-justify-BvD3xtAK.js +6 -0
  46. vibe_surf/backend/frontend/assets/align-left-BP84nxXJ.js +6 -0
  47. vibe_surf/backend/frontend/assets/align-right-6z3k9YVj.js +6 -0
  48. vibe_surf/backend/frontend/assets/align-start-horizontal-DRihqJTg.js +6 -0
  49. vibe_surf/backend/frontend/assets/align-start-vertical-Bs-ISVmy.js +6 -0
  50. vibe_surf/backend/frontend/assets/align-vertical-distribute-center-CU82VWLq.js +6 -0
  51. vibe_surf/backend/frontend/assets/align-vertical-distribute-end-IrubG5LP.js +6 -0
  52. vibe_surf/backend/frontend/assets/align-vertical-distribute-start-BgBu3t8X.js +6 -0
  53. vibe_surf/backend/frontend/assets/align-vertical-justify-center-e7psKZ4D.js +6 -0
  54. vibe_surf/backend/frontend/assets/align-vertical-justify-end-CncIBU5b.js +6 -0
  55. vibe_surf/backend/frontend/assets/align-vertical-justify-start-21_MQReA.js +6 -0
  56. vibe_surf/backend/frontend/assets/align-vertical-space-around-NJNn7zPP.js +6 -0
  57. vibe_surf/backend/frontend/assets/align-vertical-space-between-LYs4c5i9.js +6 -0
  58. vibe_surf/backend/frontend/assets/ambulance-jMfwSVYH.js +6 -0
  59. vibe_surf/backend/frontend/assets/ampersand-B1-1HYj1.js +6 -0
  60. vibe_surf/backend/frontend/assets/ampersands-DVVxe50v.js +6 -0
  61. vibe_surf/backend/frontend/assets/amphora-B12bYdql.js +6 -0
  62. vibe_surf/backend/frontend/assets/anchor-C_JuZyO5.js +6 -0
  63. vibe_surf/backend/frontend/assets/angry-KqzvbAxB.js +6 -0
  64. vibe_surf/backend/frontend/assets/annoyed-CZXUdq0q.js +6 -0
  65. vibe_surf/backend/frontend/assets/antenna-CFlKnuEE.js +6 -0
  66. vibe_surf/backend/frontend/assets/anvil-ObmOBzcW.js +6 -0
  67. vibe_surf/backend/frontend/assets/aperture-CU6mXxj8.js +6 -0
  68. vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
  69. vibe_surf/backend/frontend/assets/app-window-D5iSiHiS.js +6 -0
  70. vibe_surf/backend/frontend/assets/app-window-mac-QOaPWoGX.js +6 -0
  71. vibe_surf/backend/frontend/assets/apple-D7ZsI-et.js +6 -0
  72. vibe_surf/backend/frontend/assets/archive-FLn_d8Ny.js +6 -0
  73. vibe_surf/backend/frontend/assets/archive-restore-C668KwvC.js +6 -0
  74. vibe_surf/backend/frontend/assets/archive-x-DJJed9T2.js +6 -0
  75. vibe_surf/backend/frontend/assets/armchair-DfXLs0Nj.js +6 -0
  76. vibe_surf/backend/frontend/assets/arrow-big-down-DU2dtkeu.js +6 -0
  77. vibe_surf/backend/frontend/assets/arrow-big-down-dash-CzsIOlhF.js +6 -0
  78. vibe_surf/backend/frontend/assets/arrow-big-left-CCeUj8q9.js +6 -0
  79. vibe_surf/backend/frontend/assets/arrow-big-left-dash-CFpRtORj.js +6 -0
  80. vibe_surf/backend/frontend/assets/arrow-big-right-C1QE56k7.js +6 -0
  81. vibe_surf/backend/frontend/assets/arrow-big-right-dash-D6H2wruv.js +6 -0
  82. vibe_surf/backend/frontend/assets/arrow-big-up-0f0CsejQ.js +6 -0
  83. vibe_surf/backend/frontend/assets/arrow-big-up-dash-Dz-Sbw66.js +6 -0
  84. vibe_surf/backend/frontend/assets/arrow-down-0-1-B1PGN6BJ.js +6 -0
  85. vibe_surf/backend/frontend/assets/arrow-down-1-0-Bcl1KrrL.js +6 -0
  86. vibe_surf/backend/frontend/assets/arrow-down-DZKzcieL.js +6 -0
  87. vibe_surf/backend/frontend/assets/arrow-down-a-z-DurN_xiR.js +6 -0
  88. vibe_surf/backend/frontend/assets/arrow-down-from-line-D2i9DDA0.js +6 -0
  89. vibe_surf/backend/frontend/assets/arrow-down-left-Pid0zUYj.js +6 -0
  90. vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-DtnDCgZY.js +6 -0
  91. vibe_surf/backend/frontend/assets/arrow-down-right-BgepY9bM.js +6 -0
  92. vibe_surf/backend/frontend/assets/arrow-down-to-dot-C5rQ12yn.js +6 -0
  93. vibe_surf/backend/frontend/assets/arrow-down-to-line-DovZ64L0.js +6 -0
  94. vibe_surf/backend/frontend/assets/arrow-down-up-D5-v7CDC.js +6 -0
  95. vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-CGAsRLvP.js +6 -0
  96. vibe_surf/backend/frontend/assets/arrow-down-z-a-DOGHwUgR.js +6 -0
  97. vibe_surf/backend/frontend/assets/arrow-left-from-line-DwY8iDxY.js +6 -0
  98. vibe_surf/backend/frontend/assets/arrow-left-hKr3yGVm.js +6 -0
  99. vibe_surf/backend/frontend/assets/arrow-left-right-Be5fvvG0.js +6 -0
  100. vibe_surf/backend/frontend/assets/arrow-left-to-line-DKHIypu3.js +6 -0
  101. vibe_surf/backend/frontend/assets/arrow-right-BaRZuB8W.js +6 -0
  102. vibe_surf/backend/frontend/assets/arrow-right-from-line-D3jqt4-q.js +6 -0
  103. vibe_surf/backend/frontend/assets/arrow-right-left-BKRuMAR-.js +6 -0
  104. vibe_surf/backend/frontend/assets/arrow-right-to-line-rtWVy_CC.js +6 -0
  105. vibe_surf/backend/frontend/assets/arrow-up-0-1-yF8Nt_KM.js +6 -0
  106. vibe_surf/backend/frontend/assets/arrow-up-1-0-WRlLFmSw.js +6 -0
  107. vibe_surf/backend/frontend/assets/arrow-up-BKnAmgTC.js +6 -0
  108. vibe_surf/backend/frontend/assets/arrow-up-a-z-COXfk41y.js +6 -0
  109. vibe_surf/backend/frontend/assets/arrow-up-down-Dtw4v35K.js +6 -0
  110. vibe_surf/backend/frontend/assets/arrow-up-from-dot-B1XSjc2P.js +6 -0
  111. vibe_surf/backend/frontend/assets/arrow-up-from-line-C-lHvDpd.js +6 -0
  112. vibe_surf/backend/frontend/assets/arrow-up-left-CYojov8T.js +6 -0
  113. vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-B54CYEHs.js +6 -0
  114. vibe_surf/backend/frontend/assets/arrow-up-right-Bdo9Z-7A.js +6 -0
  115. vibe_surf/backend/frontend/assets/arrow-up-to-line-DS_I-9Vp.js +6 -0
  116. vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-B3GeXj9O.js +6 -0
  117. vibe_surf/backend/frontend/assets/arrow-up-z-a-CdyZuD75.js +6 -0
  118. vibe_surf/backend/frontend/assets/arrows-up-from-line-0sYhsLRw.js +6 -0
  119. vibe_surf/backend/frontend/assets/asterisk-CQWlVYDB.js +6 -0
  120. vibe_surf/backend/frontend/assets/at-sign-Dug8NlWL.js +6 -0
  121. vibe_surf/backend/frontend/assets/atom-Cx1vCOFb.js +6 -0
  122. vibe_surf/backend/frontend/assets/audio-lines-Cimsj6_f.js +6 -0
  123. vibe_surf/backend/frontend/assets/audio-waveform-BxCl1LyQ.js +6 -0
  124. vibe_surf/backend/frontend/assets/award-dRU3xhJ7.js +6 -0
  125. vibe_surf/backend/frontend/assets/axe-B8CCMGTD.js +6 -0
  126. vibe_surf/backend/frontend/assets/axis-3d-D2ZIjjx3.js +6 -0
  127. vibe_surf/backend/frontend/assets/baby-DWh5CwfC.js +6 -0
  128. vibe_surf/backend/frontend/assets/backpack-D9rjYWvf.js +6 -0
  129. vibe_surf/backend/frontend/assets/badge-C0r2CPAV.js +6 -0
  130. vibe_surf/backend/frontend/assets/badge-alert-Do89zN-s.js +6 -0
  131. vibe_surf/backend/frontend/assets/badge-cent-Dmv_cqc-.js +6 -0
  132. vibe_surf/backend/frontend/assets/badge-check--_Rese0X.js +6 -0
  133. vibe_surf/backend/frontend/assets/badge-dollar-sign-BHnNL8ma.js +6 -0
  134. vibe_surf/backend/frontend/assets/badge-euro-CKNQv-oO.js +6 -0
  135. vibe_surf/backend/frontend/assets/badge-help-BlZAHEa-.js +6 -0
  136. vibe_surf/backend/frontend/assets/badge-indian-rupee-BNIUcLaI.js +6 -0
  137. vibe_surf/backend/frontend/assets/badge-info-CrX5KTPR.js +6 -0
  138. vibe_surf/backend/frontend/assets/badge-japanese-yen-0mdbiK5f.js +6 -0
  139. vibe_surf/backend/frontend/assets/badge-minus-BX_scLIK.js +6 -0
  140. vibe_surf/backend/frontend/assets/badge-percent-BSJP3Okj.js +6 -0
  141. vibe_surf/backend/frontend/assets/badge-plus-DhlqCq3Z.js +6 -0
  142. vibe_surf/backend/frontend/assets/badge-pound-sterling-QpnkBN56.js +6 -0
  143. vibe_surf/backend/frontend/assets/badge-russian-ruble-L30Ncxnh.js +6 -0
  144. vibe_surf/backend/frontend/assets/badge-swiss-franc-BQrLli-C.js +6 -0
  145. vibe_surf/backend/frontend/assets/badge-x-DDXVSWE5.js +6 -0
  146. vibe_surf/backend/frontend/assets/baggage-claim-Nd9Qw4rX.js +6 -0
  147. vibe_surf/backend/frontend/assets/ban-fSKv80ss.js +6 -0
  148. vibe_surf/backend/frontend/assets/banana-DTClkW0x.js +6 -0
  149. vibe_surf/backend/frontend/assets/bandage-DLyvBCvf.js +6 -0
  150. vibe_surf/backend/frontend/assets/banknote-ArlwGdT1.js +6 -0
  151. vibe_surf/backend/frontend/assets/banknote-arrow-down-Dx9vP7KP.js +6 -0
  152. vibe_surf/backend/frontend/assets/banknote-arrow-up-CZNOWrKW.js +6 -0
  153. vibe_surf/backend/frontend/assets/banknote-x-y8ot0KXI.js +6 -0
  154. vibe_surf/backend/frontend/assets/barcode-U3mgwXvC.js +6 -0
  155. vibe_surf/backend/frontend/assets/baseline-Bb17nsNt.js +6 -0
  156. vibe_surf/backend/frontend/assets/bath-Fu-10Xqv.js +6 -0
  157. vibe_surf/backend/frontend/assets/battery-D2ng6PHz.js +6 -0
  158. vibe_surf/backend/frontend/assets/battery-charging-BBA_U97U.js +6 -0
  159. vibe_surf/backend/frontend/assets/battery-full-D74R09iv.js +6 -0
  160. vibe_surf/backend/frontend/assets/battery-low-BMeJBmJp.js +6 -0
  161. vibe_surf/backend/frontend/assets/battery-medium-clKHZw71.js +6 -0
  162. vibe_surf/backend/frontend/assets/battery-plus-DxtzU1bB.js +6 -0
  163. vibe_surf/backend/frontend/assets/battery-warning-1NEZ4eCa.js +6 -0
  164. vibe_surf/backend/frontend/assets/beaker-Br0pnmtw.js +6 -0
  165. vibe_surf/backend/frontend/assets/bean-B04lfjZo.js +6 -0
  166. vibe_surf/backend/frontend/assets/bean-off-C6H6plJJ.js +6 -0
  167. vibe_surf/backend/frontend/assets/bed-B7xWDlGQ.js +6 -0
  168. vibe_surf/backend/frontend/assets/bed-double-We8EVOE6.js +6 -0
  169. vibe_surf/backend/frontend/assets/bed-single-C-tVm75i.js +6 -0
  170. vibe_surf/backend/frontend/assets/beef-BzzCqLUx.js +6 -0
  171. vibe_surf/backend/frontend/assets/beer-B1aIU5Wp.js +6 -0
  172. vibe_surf/backend/frontend/assets/beer-off-T9p0sUQ_.js +6 -0
  173. vibe_surf/backend/frontend/assets/bell-BiEY08q7.js +6 -0
  174. vibe_surf/backend/frontend/assets/bell-dot-D6ZHJmF9.js +6 -0
  175. vibe_surf/backend/frontend/assets/bell-electric-BjP0O4kE.js +6 -0
  176. vibe_surf/backend/frontend/assets/bell-minus-Cw2KMMsV.js +6 -0
  177. vibe_surf/backend/frontend/assets/bell-off-JUGEvepv.js +6 -0
  178. vibe_surf/backend/frontend/assets/bell-plus-BtwPCtO5.js +6 -0
  179. vibe_surf/backend/frontend/assets/bell-ring-B_RAFBbK.js +6 -0
  180. vibe_surf/backend/frontend/assets/between-horizontal-end-DG9RojRP.js +6 -0
  181. vibe_surf/backend/frontend/assets/between-horizontal-start-BNuWKIUb.js +6 -0
  182. vibe_surf/backend/frontend/assets/between-vertical-end-CUvl7S4G.js +6 -0
  183. vibe_surf/backend/frontend/assets/between-vertical-start-tYvnZE7k.js +6 -0
  184. vibe_surf/backend/frontend/assets/biceps-flexed-D2zMmbhv.js +6 -0
  185. vibe_surf/backend/frontend/assets/bike-DPdpsZIt.js +6 -0
  186. vibe_surf/backend/frontend/assets/binary-DnnraEVk.js +6 -0
  187. vibe_surf/backend/frontend/assets/binoculars-BXc-CFA4.js +6 -0
  188. vibe_surf/backend/frontend/assets/biohazard-D-6PF7OA.js +6 -0
  189. vibe_surf/backend/frontend/assets/bird-CYNkrqM5.js +6 -0
  190. vibe_surf/backend/frontend/assets/bitcoin-DG6PDKEk.js +6 -0
  191. vibe_surf/backend/frontend/assets/blend-COR-wQIS.js +6 -0
  192. vibe_surf/backend/frontend/assets/blinds-_pD0AjwU.js +6 -0
  193. vibe_surf/backend/frontend/assets/blocks-C0goFnXe.js +6 -0
  194. vibe_surf/backend/frontend/assets/bluetooth-BFH9HCot.js +6 -0
  195. vibe_surf/backend/frontend/assets/bluetooth-connected-C9JKQLmC.js +6 -0
  196. vibe_surf/backend/frontend/assets/bluetooth-off-ka-F7ZnG.js +6 -0
  197. vibe_surf/backend/frontend/assets/bluetooth-searching-BdyfX9rD.js +6 -0
  198. vibe_surf/backend/frontend/assets/bold-CZSxbQF9.js +6 -0
  199. vibe_surf/backend/frontend/assets/bolt-BjrrPChn.js +6 -0
  200. vibe_surf/backend/frontend/assets/bomb-CMlcm4r9.js +6 -0
  201. vibe_surf/backend/frontend/assets/bone-qWIxHNfL.js +6 -0
  202. vibe_surf/backend/frontend/assets/book-BfRvOdc3.js +6 -0
  203. vibe_surf/backend/frontend/assets/book-a-CpoCb7Zv.js +6 -0
  204. vibe_surf/backend/frontend/assets/book-audio-cBKWAq-p.js +6 -0
  205. vibe_surf/backend/frontend/assets/book-check-CqwOgoOp.js +6 -0
  206. vibe_surf/backend/frontend/assets/book-copy-ORHl4yqI.js +6 -0
  207. vibe_surf/backend/frontend/assets/book-dashed-BrJdSa-D.js +6 -0
  208. vibe_surf/backend/frontend/assets/book-down-Bj4JV-P-.js +6 -0
  209. vibe_surf/backend/frontend/assets/book-headphones-BYuIU1gj.js +6 -0
  210. vibe_surf/backend/frontend/assets/book-heart-DCUxVJaU.js +6 -0
  211. vibe_surf/backend/frontend/assets/book-image-BPpCKv6n.js +6 -0
  212. vibe_surf/backend/frontend/assets/book-key-Ca_EtM6h.js +6 -0
  213. vibe_surf/backend/frontend/assets/book-lock-Bldzz1aF.js +6 -0
  214. vibe_surf/backend/frontend/assets/book-marked-BCleXwJ3.js +6 -0
  215. vibe_surf/backend/frontend/assets/book-minus-XoJOGZOx.js +6 -0
  216. vibe_surf/backend/frontend/assets/book-open-DUlI5XCY.js +6 -0
  217. vibe_surf/backend/frontend/assets/book-open-check-BEksHFoQ.js +6 -0
  218. vibe_surf/backend/frontend/assets/book-open-text-CiKyiRt-.js +6 -0
  219. vibe_surf/backend/frontend/assets/book-plus-DuUfSKu2.js +6 -0
  220. vibe_surf/backend/frontend/assets/book-text-TTfLk4-M.js +6 -0
  221. vibe_surf/backend/frontend/assets/book-type-CMV326FZ.js +6 -0
  222. vibe_surf/backend/frontend/assets/book-up-2-CGiuKI0n.js +6 -0
  223. vibe_surf/backend/frontend/assets/book-up-d2hb8aDq.js +6 -0
  224. vibe_surf/backend/frontend/assets/book-user-BsZySUGG.js +6 -0
  225. vibe_surf/backend/frontend/assets/book-x-CoSA25As.js +6 -0
  226. vibe_surf/backend/frontend/assets/bookmark-CVx8aFGk.js +6 -0
  227. vibe_surf/backend/frontend/assets/bookmark-check-Zh_1fqo_.js +6 -0
  228. vibe_surf/backend/frontend/assets/bookmark-minus---KmRSON.js +6 -0
  229. vibe_surf/backend/frontend/assets/bookmark-plus-ZY-aQ6r5.js +6 -0
  230. vibe_surf/backend/frontend/assets/bookmark-x-DnEKBdZC.js +6 -0
  231. vibe_surf/backend/frontend/assets/boom-box-D5cJf4pI.js +6 -0
  232. vibe_surf/backend/frontend/assets/bot-BbS7VJ5s.js +6 -0
  233. vibe_surf/backend/frontend/assets/bot-message-square-Bm4hBAbI.js +6 -0
  234. vibe_surf/backend/frontend/assets/bot-off-CFjG1wx4.js +6 -0
  235. vibe_surf/backend/frontend/assets/bow-arrow-Bupk8VJM.js +6 -0
  236. vibe_surf/backend/frontend/assets/box-CyVAC5Vv.js +6 -0
  237. vibe_surf/backend/frontend/assets/boxes-B3xCa_UA.js +6 -0
  238. vibe_surf/backend/frontend/assets/braces-QLXt2h0B.js +6 -0
  239. vibe_surf/backend/frontend/assets/brackets-CEy7gs9d.js +6 -0
  240. vibe_surf/backend/frontend/assets/brain-circuit-WmeDjyy5.js +6 -0
  241. vibe_surf/backend/frontend/assets/brain-cog-DKDdpxNn.js +6 -0
  242. vibe_surf/backend/frontend/assets/brain-ziGJYeS1.js +6 -0
  243. vibe_surf/backend/frontend/assets/brick-wall-DXer5s5J.js +6 -0
  244. vibe_surf/backend/frontend/assets/brick-wall-fire-CfXr8Krv.js +6 -0
  245. vibe_surf/backend/frontend/assets/briefcase-C2YbssAg.js +6 -0
  246. vibe_surf/backend/frontend/assets/briefcase-business-CJCpJSkU.js +6 -0
  247. vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-B0jqiIT4.js +6 -0
  248. vibe_surf/backend/frontend/assets/briefcase-medical-BBH0C6ZQ.js +6 -0
  249. vibe_surf/backend/frontend/assets/bring-to-front-ywT72zy-.js +6 -0
  250. vibe_surf/backend/frontend/assets/brush-_uc9w_j1.js +6 -0
  251. vibe_surf/backend/frontend/assets/bubbles-ggRrvDQI.js +6 -0
  252. vibe_surf/backend/frontend/assets/bug-6l9frAXO.js +6 -0
  253. vibe_surf/backend/frontend/assets/bug-off-BmK1mJ7T.js +6 -0
  254. vibe_surf/backend/frontend/assets/bug-play-DbXJeqOa.js +6 -0
  255. vibe_surf/backend/frontend/assets/building-2-Cf9gYIvy.js +6 -0
  256. vibe_surf/backend/frontend/assets/building-D9eMVeBu.js +6 -0
  257. vibe_surf/backend/frontend/assets/bus-COrhWbdv.js +6 -0
  258. vibe_surf/backend/frontend/assets/bus-front-Csav5OG_.js +6 -0
  259. vibe_surf/backend/frontend/assets/cable-BPG7O6tf.js +6 -0
  260. vibe_surf/backend/frontend/assets/cable-car-ChPtZlze.js +6 -0
  261. vibe_surf/backend/frontend/assets/cake-DnmMZhI2.js +6 -0
  262. vibe_surf/backend/frontend/assets/cake-slice-Clc5mDPW.js +6 -0
  263. vibe_surf/backend/frontend/assets/calculator-C77I3XPN.js +6 -0
  264. vibe_surf/backend/frontend/assets/calendar-1-BMs-t7Zd.js +6 -0
  265. vibe_surf/backend/frontend/assets/calendar-DuLRS-6L.js +6 -0
  266. vibe_surf/backend/frontend/assets/calendar-arrow-down-DoVsOnV0.js +6 -0
  267. vibe_surf/backend/frontend/assets/calendar-arrow-up-Ca_1_rkT.js +6 -0
  268. vibe_surf/backend/frontend/assets/calendar-check-2-0JmvXRsb.js +6 -0
  269. vibe_surf/backend/frontend/assets/calendar-check-DtTDIbPE.js +6 -0
  270. vibe_surf/backend/frontend/assets/calendar-clock-39XA2NxZ.js +6 -0
  271. vibe_surf/backend/frontend/assets/calendar-cog-B3elAX8P.js +6 -0
  272. vibe_surf/backend/frontend/assets/calendar-days-B_4sd_nS.js +6 -0
  273. vibe_surf/backend/frontend/assets/calendar-fold-1GZdJiY5.js +6 -0
  274. vibe_surf/backend/frontend/assets/calendar-heart-C20Gu6Pq.js +6 -0
  275. vibe_surf/backend/frontend/assets/calendar-minus-2-C2uYA9Xy.js +6 -0
  276. vibe_surf/backend/frontend/assets/calendar-minus-Bf9ZhUgX.js +6 -0
  277. vibe_surf/backend/frontend/assets/calendar-off-oqUiDnlM.js +6 -0
  278. vibe_surf/backend/frontend/assets/calendar-plus-2-D5AF7K6Z.js +6 -0
  279. vibe_surf/backend/frontend/assets/calendar-plus-DFRLvp48.js +6 -0
  280. vibe_surf/backend/frontend/assets/calendar-range-BtbX_u86.js +6 -0
  281. vibe_surf/backend/frontend/assets/calendar-search-DKFr3oFg.js +6 -0
  282. vibe_surf/backend/frontend/assets/calendar-sync-J6s1mjVg.js +6 -0
  283. vibe_surf/backend/frontend/assets/calendar-x-16dHXmS-.js +6 -0
  284. vibe_surf/backend/frontend/assets/calendar-x-2-DASXeIpI.js +6 -0
  285. vibe_surf/backend/frontend/assets/camera-C73rx5T7.js +6 -0
  286. vibe_surf/backend/frontend/assets/camera-off-lYXrg8Ab.js +6 -0
  287. vibe_surf/backend/frontend/assets/candy-DHin-JSi.js +6 -0
  288. vibe_surf/backend/frontend/assets/candy-cane-BrFztxP3.js +6 -0
  289. vibe_surf/backend/frontend/assets/candy-off-C6p9RmsL.js +6 -0
  290. vibe_surf/backend/frontend/assets/cannabis-BIomtlTh.js +6 -0
  291. vibe_surf/backend/frontend/assets/captions-CU9AD1HN.js +6 -0
  292. vibe_surf/backend/frontend/assets/captions-off-BQabz_7T.js +6 -0
  293. vibe_surf/backend/frontend/assets/car-CIepr4l8.js +6 -0
  294. vibe_surf/backend/frontend/assets/car-front-BvC3NXIU.js +6 -0
  295. vibe_surf/backend/frontend/assets/car-taxi-front-D6kk_vUY.js +6 -0
  296. vibe_surf/backend/frontend/assets/caravan-B4YvOfvY.js +6 -0
  297. vibe_surf/backend/frontend/assets/carrot-DScNmGFZ.js +6 -0
  298. vibe_surf/backend/frontend/assets/case-lower-iW8MijQ2.js +6 -0
  299. vibe_surf/backend/frontend/assets/case-sensitive-DggKI0Fh.js +6 -0
  300. vibe_surf/backend/frontend/assets/case-upper-BC22BC0q.js +6 -0
  301. vibe_surf/backend/frontend/assets/cassette-tape-PMwALept.js +6 -0
  302. vibe_surf/backend/frontend/assets/cast-Kq2v55CB.js +6 -0
  303. vibe_surf/backend/frontend/assets/castle-DJzhSlL6.js +6 -0
  304. vibe_surf/backend/frontend/assets/cat-Cszwi-0j.js +6 -0
  305. vibe_surf/backend/frontend/assets/cctv-4zeLHFGP.js +6 -0
  306. vibe_surf/backend/frontend/assets/chart-area-JyFaZNpl.js +6 -0
  307. vibe_surf/backend/frontend/assets/chart-bar-Bcnue-Eu.js +6 -0
  308. vibe_surf/backend/frontend/assets/chart-bar-big-dJ6tM8UP.js +6 -0
  309. vibe_surf/backend/frontend/assets/chart-bar-decreasing-jviD9Nka.js +6 -0
  310. vibe_surf/backend/frontend/assets/chart-bar-increasing-BcpuBWlQ.js +6 -0
  311. vibe_surf/backend/frontend/assets/chart-bar-stacked-DLxMM-a6.js +6 -0
  312. vibe_surf/backend/frontend/assets/chart-candlestick-BK5WOKib.js +6 -0
  313. vibe_surf/backend/frontend/assets/chart-column-BjT_DIge.js +6 -0
  314. vibe_surf/backend/frontend/assets/chart-column-big-BoOEhNxT.js +6 -0
  315. vibe_surf/backend/frontend/assets/chart-column-decreasing-B3PEhFWj.js +6 -0
  316. vibe_surf/backend/frontend/assets/chart-column-increasing-KTAFoIBT.js +6 -0
  317. vibe_surf/backend/frontend/assets/chart-column-stacked-Drci0FWY.js +6 -0
  318. vibe_surf/backend/frontend/assets/chart-gantt-CxLhKfws.js +6 -0
  319. vibe_surf/backend/frontend/assets/chart-line-Deh3i4SN.js +6 -0
  320. vibe_surf/backend/frontend/assets/chart-network-1nLETKIo.js +6 -0
  321. vibe_surf/backend/frontend/assets/chart-no-axes-column-BBUb9OL4.js +6 -0
  322. vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-BNGTEmAA.js +6 -0
  323. vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-DYl5MpQr.js +6 -0
  324. vibe_surf/backend/frontend/assets/chart-no-axes-combined-Bwo9fVPi.js +6 -0
  325. vibe_surf/backend/frontend/assets/chart-no-axes-gantt-CIpwp7-G.js +6 -0
  326. vibe_surf/backend/frontend/assets/chart-pie-Brn9eScK.js +6 -0
  327. vibe_surf/backend/frontend/assets/chart-scatter-BFmfnF4I.js +6 -0
  328. vibe_surf/backend/frontend/assets/chart-spline-iPy-W03i.js +6 -0
  329. vibe_surf/backend/frontend/assets/check-check-CQEfDsmx.js +6 -0
  330. vibe_surf/backend/frontend/assets/chef-hat-DdOkr4i8.js +6 -0
  331. vibe_surf/backend/frontend/assets/cherry-XkD_QiBI.js +6 -0
  332. vibe_surf/backend/frontend/assets/chevron-first-muFwJevA.js +6 -0
  333. vibe_surf/backend/frontend/assets/chevron-last-Bn079TLv.js +6 -0
  334. vibe_surf/backend/frontend/assets/chevron-left-BhWYBFsk.js +6 -0
  335. vibe_surf/backend/frontend/assets/chevron-right-zm672Mdr.js +6 -0
  336. vibe_surf/backend/frontend/assets/chevrons-down-T3mOFRB2.js +6 -0
  337. vibe_surf/backend/frontend/assets/chevrons-down-up-BfWmsaYK.js +6 -0
  338. vibe_surf/backend/frontend/assets/chevrons-left-BLFCiP6g.js +6 -0
  339. vibe_surf/backend/frontend/assets/chevrons-left-right-Cgp4lAQF.js +6 -0
  340. vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BZSVxQ-x.js +6 -0
  341. vibe_surf/backend/frontend/assets/chevrons-right-DMKOjes0.js +6 -0
  342. vibe_surf/backend/frontend/assets/chevrons-right-left-Clwbiy09.js +6 -0
  343. vibe_surf/backend/frontend/assets/chevrons-up-CdrwLxmN.js +6 -0
  344. vibe_surf/backend/frontend/assets/chrome-46ygw5lK.js +6 -0
  345. vibe_surf/backend/frontend/assets/church-DQW3bkcl.js +6 -0
  346. vibe_surf/backend/frontend/assets/cigarette-CTvLdOLV.js +6 -0
  347. vibe_surf/backend/frontend/assets/cigarette-off-D0kR9lro.js +6 -0
  348. vibe_surf/backend/frontend/assets/circle-alert-QG2k6eWP.js +6 -0
  349. vibe_surf/backend/frontend/assets/circle-arrow-down-BHFs0Q9-.js +6 -0
  350. vibe_surf/backend/frontend/assets/circle-arrow-left-DQWeTJLw.js +6 -0
  351. vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-B_oYI2Rn.js +6 -0
  352. vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-BL4vxEs9.js +6 -0
  353. vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-CFi1FNF-.js +6 -0
  354. vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-CmMWk14E.js +6 -0
  355. vibe_surf/backend/frontend/assets/circle-arrow-right-dhHL8jIm.js +6 -0
  356. vibe_surf/backend/frontend/assets/circle-arrow-up-B8XWR9s_.js +6 -0
  357. vibe_surf/backend/frontend/assets/circle-check-CRm9QkNA.js +6 -0
  358. vibe_surf/backend/frontend/assets/circle-check-big-CPPNLArI.js +6 -0
  359. vibe_surf/backend/frontend/assets/circle-chevron-down-Cs4S5V03.js +6 -0
  360. vibe_surf/backend/frontend/assets/circle-chevron-left-V81BDvwB.js +6 -0
  361. vibe_surf/backend/frontend/assets/circle-chevron-right-CRa7Bkcz.js +6 -0
  362. vibe_surf/backend/frontend/assets/circle-chevron-up-FDxLxvSd.js +6 -0
  363. vibe_surf/backend/frontend/assets/circle-dashed-DD55_roy.js +6 -0
  364. vibe_surf/backend/frontend/assets/circle-divide-DKpocsWo.js +6 -0
  365. vibe_surf/backend/frontend/assets/circle-dollar-sign-p7_bVi5m.js +6 -0
  366. vibe_surf/backend/frontend/assets/circle-dot-Be13EypY.js +6 -0
  367. vibe_surf/backend/frontend/assets/circle-dot-dashed-KuVNkxEv.js +6 -0
  368. vibe_surf/backend/frontend/assets/circle-ellipsis-BSLpVL-C.js +6 -0
  369. vibe_surf/backend/frontend/assets/circle-equal-_Mfed9km.js +6 -0
  370. vibe_surf/backend/frontend/assets/circle-fading-arrow-up-D_E3BIXf.js +6 -0
  371. vibe_surf/backend/frontend/assets/circle-fading-plus-5ZA5Je_2.js +6 -0
  372. vibe_surf/backend/frontend/assets/circle-gauge-b41i9Azv.js +6 -0
  373. vibe_surf/backend/frontend/assets/circle-help-BOLgIUsf.js +6 -0
  374. vibe_surf/backend/frontend/assets/circle-minus-C41JxC_E.js +6 -0
  375. vibe_surf/backend/frontend/assets/circle-off-yuGaN1EU.js +6 -0
  376. vibe_surf/backend/frontend/assets/circle-parking-B-DnXhcd.js +6 -0
  377. vibe_surf/backend/frontend/assets/circle-parking-off-DsCM2b8j.js +6 -0
  378. vibe_surf/backend/frontend/assets/circle-pause-Dqufdu9m.js +6 -0
  379. vibe_surf/backend/frontend/assets/circle-percent-Dp8UwPQq.js +6 -0
  380. vibe_surf/backend/frontend/assets/circle-play-N8vi1Pcd.js +6 -0
  381. vibe_surf/backend/frontend/assets/circle-plus-wD1VqIgT.js +6 -0
  382. vibe_surf/backend/frontend/assets/circle-power-DBZAmaYW.js +6 -0
  383. vibe_surf/backend/frontend/assets/circle-slash-2-hdq8_Fp6.js +6 -0
  384. vibe_surf/backend/frontend/assets/circle-slash-CSrHLLP2.js +6 -0
  385. vibe_surf/backend/frontend/assets/circle-small-BQ6lrOIo.js +6 -0
  386. vibe_surf/backend/frontend/assets/circle-stop-xgLQ9Loi.js +6 -0
  387. vibe_surf/backend/frontend/assets/circle-user-CzvrnVH9.js +6 -0
  388. vibe_surf/backend/frontend/assets/circle-user-round-0JhYfAcs.js +6 -0
  389. vibe_surf/backend/frontend/assets/circuit-board-DpN-UUwV.js +6 -0
  390. vibe_surf/backend/frontend/assets/citrus-BGWHfGg3.js +6 -0
  391. vibe_surf/backend/frontend/assets/clapperboard-9m-99Aof.js +6 -0
  392. vibe_surf/backend/frontend/assets/clipboard-C-MVPhAy.js +6 -0
  393. vibe_surf/backend/frontend/assets/clipboard-check-Bonb2WoP.js +6 -0
  394. vibe_surf/backend/frontend/assets/clipboard-copy-CmRHdw5h.js +6 -0
  395. vibe_surf/backend/frontend/assets/clipboard-list-DEof2iPM.js +6 -0
  396. vibe_surf/backend/frontend/assets/clipboard-minus-DN2QuVOG.js +6 -0
  397. vibe_surf/backend/frontend/assets/clipboard-paste-B20nudiB.js +6 -0
  398. vibe_surf/backend/frontend/assets/clipboard-pen-BZJamOnq.js +6 -0
  399. vibe_surf/backend/frontend/assets/clipboard-pen-line-DScYxgpw.js +6 -0
  400. vibe_surf/backend/frontend/assets/clipboard-plus-DJb4TcvR.js +6 -0
  401. vibe_surf/backend/frontend/assets/clipboard-type-DaibEn_w.js +6 -0
  402. vibe_surf/backend/frontend/assets/clipboard-x-CebR2xkR.js +6 -0
  403. vibe_surf/backend/frontend/assets/clock-1-Cz0OEQH3.js +6 -0
  404. vibe_surf/backend/frontend/assets/clock-10-BMLTtzHQ.js +6 -0
  405. vibe_surf/backend/frontend/assets/clock-11-CZ6m52x1.js +6 -0
  406. vibe_surf/backend/frontend/assets/clock-12-BXZWDgbr.js +6 -0
  407. vibe_surf/backend/frontend/assets/clock-2-ElC7DzP5.js +6 -0
  408. vibe_surf/backend/frontend/assets/clock-3-DN86BONK.js +6 -0
  409. vibe_surf/backend/frontend/assets/clock-4-CV9eUVD9.js +6 -0
  410. vibe_surf/backend/frontend/assets/clock-5-DgMTU8BD.js +6 -0
  411. vibe_surf/backend/frontend/assets/clock-6-_RjAiNVz.js +6 -0
  412. vibe_surf/backend/frontend/assets/clock-7-DsWDnhwN.js +6 -0
  413. vibe_surf/backend/frontend/assets/clock-8-CY-eCfWq.js +6 -0
  414. vibe_surf/backend/frontend/assets/clock-9-D4aWNYpk.js +6 -0
  415. vibe_surf/backend/frontend/assets/clock-UtAbEQE0.js +6 -0
  416. vibe_surf/backend/frontend/assets/clock-alert-gi6h-zRT.js +6 -0
  417. vibe_surf/backend/frontend/assets/clock-arrow-down-CC9Qp0ac.js +6 -0
  418. vibe_surf/backend/frontend/assets/clock-arrow-up-Cjt2qN9V.js +6 -0
  419. vibe_surf/backend/frontend/assets/clock-fading-BJp0FFxY.js +6 -0
  420. vibe_surf/backend/frontend/assets/cloud-TYaHXSiL.js +6 -0
  421. vibe_surf/backend/frontend/assets/cloud-alert-Dp4WVua8.js +6 -0
  422. vibe_surf/backend/frontend/assets/cloud-cog-Dlyn4rqA.js +6 -0
  423. vibe_surf/backend/frontend/assets/cloud-download-DH8UN3eX.js +6 -0
  424. vibe_surf/backend/frontend/assets/cloud-drizzle-s8348ic3.js +6 -0
  425. vibe_surf/backend/frontend/assets/cloud-fog-DHRDnzsg.js +6 -0
  426. vibe_surf/backend/frontend/assets/cloud-hail-D7nJGZgB.js +6 -0
  427. vibe_surf/backend/frontend/assets/cloud-lightning-CscbfdPI.js +6 -0
  428. vibe_surf/backend/frontend/assets/cloud-moon-C6897Z5z.js +6 -0
  429. vibe_surf/backend/frontend/assets/cloud-moon-rain-B6pK_auO.js +6 -0
  430. vibe_surf/backend/frontend/assets/cloud-off-1kN_AD0k.js +6 -0
  431. vibe_surf/backend/frontend/assets/cloud-rain-Dj6B4fBD.js +6 -0
  432. vibe_surf/backend/frontend/assets/cloud-rain-wind-BJrdBUd4.js +6 -0
  433. vibe_surf/backend/frontend/assets/cloud-snow-LK6lpCkZ.js +6 -0
  434. vibe_surf/backend/frontend/assets/cloud-sun-CRH8EQEJ.js +6 -0
  435. vibe_surf/backend/frontend/assets/cloud-sun-rain-7IssqnpA.js +6 -0
  436. vibe_surf/backend/frontend/assets/cloud-upload-tI3Dz1zd.js +6 -0
  437. vibe_surf/backend/frontend/assets/cloudy-okUc5uOM.js +6 -0
  438. vibe_surf/backend/frontend/assets/clover-O6CtUOhV.js +6 -0
  439. vibe_surf/backend/frontend/assets/club-SnWEwVMR.js +6 -0
  440. vibe_surf/backend/frontend/assets/code-xml-CYTnIdXN.js +6 -0
  441. vibe_surf/backend/frontend/assets/codepen-UxBTFH8q.js +6 -0
  442. vibe_surf/backend/frontend/assets/codesandbox-CSRpmotF.js +6 -0
  443. vibe_surf/backend/frontend/assets/coffee-BTr4K8Gn.js +6 -0
  444. vibe_surf/backend/frontend/assets/cog-C7RMqAcW.js +6 -0
  445. vibe_surf/backend/frontend/assets/coins-D7gWOtE7.js +6 -0
  446. vibe_surf/backend/frontend/assets/columns-2-WBM3YpNL.js +6 -0
  447. vibe_surf/backend/frontend/assets/columns-3-DyAMu-k8.js +6 -0
  448. vibe_surf/backend/frontend/assets/columns-3-cog-zfUPAOg0.js +6 -0
  449. vibe_surf/backend/frontend/assets/columns-4-Qz-B3Dvq.js +6 -0
  450. vibe_surf/backend/frontend/assets/combine-CLZvnf8j.js +6 -0
  451. vibe_surf/backend/frontend/assets/command-D8ymLYGG.js +6 -0
  452. vibe_surf/backend/frontend/assets/compass-DGYgNSVa.js +6 -0
  453. vibe_surf/backend/frontend/assets/component-CwL9ER1Q.js +6 -0
  454. vibe_surf/backend/frontend/assets/computer-QNTojt_5.js +6 -0
  455. vibe_surf/backend/frontend/assets/concierge-bell-C7jm8QJd.js +6 -0
  456. vibe_surf/backend/frontend/assets/cone-C9TQbkDB.js +6 -0
  457. vibe_surf/backend/frontend/assets/construction-CSyYpaz5.js +6 -0
  458. vibe_surf/backend/frontend/assets/contact-CFldvJVP.js +6 -0
  459. vibe_surf/backend/frontend/assets/contact-round-DA1kjclM.js +6 -0
  460. vibe_surf/backend/frontend/assets/container-BfGJKo0o.js +6 -0
  461. vibe_surf/backend/frontend/assets/contrast-DmYhTvN3.js +6 -0
  462. vibe_surf/backend/frontend/assets/cookie-Cw70purP.js +6 -0
  463. vibe_surf/backend/frontend/assets/cooking-pot-WzjjWZaR.js +6 -0
  464. vibe_surf/backend/frontend/assets/copy-BPjnY3ea.js +6 -0
  465. vibe_surf/backend/frontend/assets/copy-check-B6hqPf9B.js +6 -0
  466. vibe_surf/backend/frontend/assets/copy-minus-DMGhawAT.js +6 -0
  467. vibe_surf/backend/frontend/assets/copy-plus-DcW4_i4R.js +6 -0
  468. vibe_surf/backend/frontend/assets/copy-slash-Cn_xel6o.js +6 -0
  469. vibe_surf/backend/frontend/assets/copy-x-Dmf3jckJ.js +6 -0
  470. vibe_surf/backend/frontend/assets/copyleft-CJDbqV_Y.js +6 -0
  471. vibe_surf/backend/frontend/assets/copyright-Buw-D4Xa.js +6 -0
  472. vibe_surf/backend/frontend/assets/corner-down-left-BhPTW3SL.js +6 -0
  473. vibe_surf/backend/frontend/assets/corner-down-right-B_Md48mW.js +6 -0
  474. vibe_surf/backend/frontend/assets/corner-left-down-DDc0LvYT.js +6 -0
  475. vibe_surf/backend/frontend/assets/corner-left-up-C_EIQYvd.js +6 -0
  476. vibe_surf/backend/frontend/assets/corner-right-down-Bipz7-p6.js +6 -0
  477. vibe_surf/backend/frontend/assets/corner-right-up-euSAC3Mi.js +6 -0
  478. vibe_surf/backend/frontend/assets/corner-up-left-CRvdJT3E.js +6 -0
  479. vibe_surf/backend/frontend/assets/corner-up-right-CCK7dhVV.js +6 -0
  480. vibe_surf/backend/frontend/assets/cpu-DB-52VKi.js +6 -0
  481. vibe_surf/backend/frontend/assets/creative-commons-CXWueat0.js +6 -0
  482. vibe_surf/backend/frontend/assets/credit-card-CR5swmPL.js +6 -0
  483. vibe_surf/backend/frontend/assets/croissant-ClZbIF3L.js +6 -0
  484. vibe_surf/backend/frontend/assets/crop-DSXkvq6D.js +6 -0
  485. vibe_surf/backend/frontend/assets/cross-CkHV6YOi.js +6 -0
  486. vibe_surf/backend/frontend/assets/crosshair-C3tcoYxo.js +6 -0
  487. vibe_surf/backend/frontend/assets/crown-0LB9DCRa.js +6 -0
  488. vibe_surf/backend/frontend/assets/cuboid-CidkVtLJ.js +6 -0
  489. vibe_surf/backend/frontend/assets/cup-soda-DG_5s6Ma.js +6 -0
  490. vibe_surf/backend/frontend/assets/currency-AEQeyk_J.js +6 -0
  491. vibe_surf/backend/frontend/assets/cylinder-Da7lV5Pc.js +6 -0
  492. vibe_surf/backend/frontend/assets/dam-BIFS7P89.js +6 -0
  493. vibe_surf/backend/frontend/assets/database-Dx9euHTJ.js +6 -0
  494. vibe_surf/backend/frontend/assets/database-backup-Bbbt7mXt.js +6 -0
  495. vibe_surf/backend/frontend/assets/database-zap-CJC7IfdF.js +6 -0
  496. vibe_surf/backend/frontend/assets/decimals-arrow-left-BrRd8_vb.js +6 -0
  497. vibe_surf/backend/frontend/assets/decimals-arrow-right-Cglo48c9.js +6 -0
  498. vibe_surf/backend/frontend/assets/delete-C9qTL0sD.js +6 -0
  499. vibe_surf/backend/frontend/assets/dessert-7PTt5JJ0.js +6 -0
  500. vibe_surf/backend/frontend/assets/diameter-oheO2UGD.js +6 -0
  501. vibe_surf/backend/frontend/assets/diamond-DhBpDMNy.js +6 -0
  502. vibe_surf/backend/frontend/assets/diamond-minus-BqTULDvb.js +6 -0
  503. vibe_surf/backend/frontend/assets/diamond-percent-D1Ck8xGc.js +6 -0
  504. vibe_surf/backend/frontend/assets/diamond-plus-DfSf7Xoq.js +6 -0
  505. vibe_surf/backend/frontend/assets/dice-1-CIRG2xPK.js +6 -0
  506. vibe_surf/backend/frontend/assets/dice-2-r7s36USZ.js +6 -0
  507. vibe_surf/backend/frontend/assets/dice-3-Cl7FLe3x.js +6 -0
  508. vibe_surf/backend/frontend/assets/dice-4-D-yJWiku.js +6 -0
  509. vibe_surf/backend/frontend/assets/dice-5-Ci09NYyS.js +6 -0
  510. vibe_surf/backend/frontend/assets/dice-6-CC2FLvLo.js +6 -0
  511. vibe_surf/backend/frontend/assets/dices-CmB6hNUU.js +6 -0
  512. vibe_surf/backend/frontend/assets/diff-oCWjvY-c.js +6 -0
  513. vibe_surf/backend/frontend/assets/disc-2-DpUl7fl6.js +6 -0
  514. vibe_surf/backend/frontend/assets/disc-3-BugUAszu.js +6 -0
  515. vibe_surf/backend/frontend/assets/disc-DUbtGdHe.js +6 -0
  516. vibe_surf/backend/frontend/assets/disc-album-CXJRMctz.js +6 -0
  517. vibe_surf/backend/frontend/assets/divide-CY1K-HT7.js +6 -0
  518. vibe_surf/backend/frontend/assets/dna-CeE8ObeE.js +6 -0
  519. vibe_surf/backend/frontend/assets/dna-off-BviJKT3C.js +6 -0
  520. vibe_surf/backend/frontend/assets/dock-eIe8zGWk.js +6 -0
  521. vibe_surf/backend/frontend/assets/dog-CSlDDqxp.js +6 -0
  522. vibe_surf/backend/frontend/assets/dollar-sign-5U68U397.js +6 -0
  523. vibe_surf/backend/frontend/assets/donut-BeawTrlI.js +6 -0
  524. vibe_surf/backend/frontend/assets/door-closed-CwY8Mg15.js +6 -0
  525. vibe_surf/backend/frontend/assets/door-open-DFgi7N5B.js +6 -0
  526. vibe_surf/backend/frontend/assets/dot-fPF_etdO.js +6 -0
  527. vibe_surf/backend/frontend/assets/download-gSwRRqnX.js +6 -0
  528. vibe_surf/backend/frontend/assets/drafting-compass-Dj_7EFRc.js +6 -0
  529. vibe_surf/backend/frontend/assets/drama-BlDJuZEs.js +6 -0
  530. vibe_surf/backend/frontend/assets/dribbble-C0k3dpAi.js +6 -0
  531. vibe_surf/backend/frontend/assets/drill-COJcLBB4.js +6 -0
  532. vibe_surf/backend/frontend/assets/droplet-5wuLGLgZ.js +6 -0
  533. vibe_surf/backend/frontend/assets/droplet-off-Bra_6Oh9.js +6 -0
  534. vibe_surf/backend/frontend/assets/droplets-BE8PR1pM.js +6 -0
  535. vibe_surf/backend/frontend/assets/drum-DnJ1RUvq.js +6 -0
  536. vibe_surf/backend/frontend/assets/drumstick-JGiBDDwZ.js +6 -0
  537. vibe_surf/backend/frontend/assets/dumbbell-BEtc4tyd.js +6 -0
  538. vibe_surf/backend/frontend/assets/ear-DAqeJjkr.js +6 -0
  539. vibe_surf/backend/frontend/assets/ear-off-BA7gp4ie.js +6 -0
  540. vibe_surf/backend/frontend/assets/earth-CUlUl7Bp.js +6 -0
  541. vibe_surf/backend/frontend/assets/earth-lock-sl59Ywm7.js +6 -0
  542. vibe_surf/backend/frontend/assets/eclipse-DY7fC5N3.js +6 -0
  543. vibe_surf/backend/frontend/assets/egg-DxfY2UB8.js +6 -0
  544. vibe_surf/backend/frontend/assets/egg-fried-D2Eo3APu.js +6 -0
  545. vibe_surf/backend/frontend/assets/egg-off-DqYobjwG.js +6 -0
  546. vibe_surf/backend/frontend/assets/ellipsis-DgOuKLdR.js +6 -0
  547. vibe_surf/backend/frontend/assets/ellipsis-vertical--sr8F_UD.js +6 -0
  548. vibe_surf/backend/frontend/assets/equal-DS1qMZhi.js +6 -0
  549. vibe_surf/backend/frontend/assets/equal-approximately-mgMMBVF_.js +6 -0
  550. vibe_surf/backend/frontend/assets/equal-not-1Alw8lqE.js +6 -0
  551. vibe_surf/backend/frontend/assets/eraser-IStMo8nh.js +6 -0
  552. vibe_surf/backend/frontend/assets/ethernet-port-B6SRY0d8.js +6 -0
  553. vibe_surf/backend/frontend/assets/euro-S1kGUYTE.js +6 -0
  554. vibe_surf/backend/frontend/assets/expand-Cj8IQccm.js +6 -0
  555. vibe_surf/backend/frontend/assets/eye-DrnoCeKD.js +6 -0
  556. vibe_surf/backend/frontend/assets/eye-closed-B0cNIHJN.js +6 -0
  557. vibe_surf/backend/frontend/assets/eye-off-DIIh42Ws.js +6 -0
  558. vibe_surf/backend/frontend/assets/facebook-Df9Fpfnn.js +6 -0
  559. vibe_surf/backend/frontend/assets/factory-BLKvR2Z1.js +6 -0
  560. vibe_surf/backend/frontend/assets/fan-C-xRuGdo.js +6 -0
  561. vibe_surf/backend/frontend/assets/fast-forward-Bae5V83y.js +6 -0
  562. vibe_surf/backend/frontend/assets/feather-DTPfgED2.js +6 -0
  563. vibe_surf/backend/frontend/assets/fence-Mr7VQ0O9.js +6 -0
  564. vibe_surf/backend/frontend/assets/ferris-wheel-D82pDMqi.js +6 -0
  565. vibe_surf/backend/frontend/assets/figma-DBFJo9L2.js +6 -0
  566. vibe_surf/backend/frontend/assets/file-DvuZsaUg.js +6 -0
  567. vibe_surf/backend/frontend/assets/file-archive-DRtB2ivb.js +6 -0
  568. vibe_surf/backend/frontend/assets/file-audio-2-JE5iEkL9.js +6 -0
  569. vibe_surf/backend/frontend/assets/file-audio-C4RwC1BT.js +6 -0
  570. vibe_surf/backend/frontend/assets/file-axis-3d-DQSHzEo4.js +6 -0
  571. vibe_surf/backend/frontend/assets/file-badge-2-P__XKUXn.js +6 -0
  572. vibe_surf/backend/frontend/assets/file-badge-CejYglxU.js +6 -0
  573. vibe_surf/backend/frontend/assets/file-box-CgFMY7Rp.js +6 -0
  574. vibe_surf/backend/frontend/assets/file-chart-column-Bq5PyMwY.js +6 -0
  575. vibe_surf/backend/frontend/assets/file-chart-column-increasing-t_d1wCSV.js +6 -0
  576. vibe_surf/backend/frontend/assets/file-chart-line-Df6iedBR.js +6 -0
  577. vibe_surf/backend/frontend/assets/file-chart-pie-YH23adPM.js +6 -0
  578. vibe_surf/backend/frontend/assets/file-check-2-CKcRkU0L.js +6 -0
  579. vibe_surf/backend/frontend/assets/file-check-BYZznME9.js +6 -0
  580. vibe_surf/backend/frontend/assets/file-clock-8rD4-Bqt.js +6 -0
  581. vibe_surf/backend/frontend/assets/file-code-2-BjV8KhR4.js +6 -0
  582. vibe_surf/backend/frontend/assets/file-code-CXS3YUpM.js +6 -0
  583. vibe_surf/backend/frontend/assets/file-cog-GKLng0Qf.js +6 -0
  584. vibe_surf/backend/frontend/assets/file-diff-B_7HXPkJ.js +6 -0
  585. vibe_surf/backend/frontend/assets/file-digit-AtVulYi7.js +6 -0
  586. vibe_surf/backend/frontend/assets/file-down-CJIG5dHj.js +6 -0
  587. vibe_surf/backend/frontend/assets/file-heart-B8jWzdG5.js +6 -0
  588. vibe_surf/backend/frontend/assets/file-image-CXtDt3N3.js +6 -0
  589. vibe_surf/backend/frontend/assets/file-input-B-0mgcKT.js +6 -0
  590. vibe_surf/backend/frontend/assets/file-json-2-DQHJM93o.js +6 -0
  591. vibe_surf/backend/frontend/assets/file-json-BmrGDLh2.js +6 -0
  592. vibe_surf/backend/frontend/assets/file-key-2-DnpQ1dTj.js +6 -0
  593. vibe_surf/backend/frontend/assets/file-key-D3lJXveQ.js +6 -0
  594. vibe_surf/backend/frontend/assets/file-lock-2-DWdLzoF7.js +6 -0
  595. vibe_surf/backend/frontend/assets/file-lock-ZMZB3U4I.js +6 -0
  596. vibe_surf/backend/frontend/assets/file-minus-2-CsTsio0s.js +6 -0
  597. vibe_surf/backend/frontend/assets/file-minus-CtfRmVme.js +6 -0
  598. vibe_surf/backend/frontend/assets/file-music-DHhVu2aK.js +6 -0
  599. vibe_surf/backend/frontend/assets/file-output-CjQ-FMg0.js +6 -0
  600. vibe_surf/backend/frontend/assets/file-pen-C9S_u4U9.js +6 -0
  601. vibe_surf/backend/frontend/assets/file-pen-line-niZF4quE.js +6 -0
  602. vibe_surf/backend/frontend/assets/file-plus-2-DzIiS2EM.js +6 -0
  603. vibe_surf/backend/frontend/assets/file-plus-Bloe0E45.js +6 -0
  604. vibe_surf/backend/frontend/assets/file-question-BBTjP9h0.js +6 -0
  605. vibe_surf/backend/frontend/assets/file-scan-B3Bn2EZN.js +6 -0
  606. vibe_surf/backend/frontend/assets/file-search-2-DnC8d9OD.js +6 -0
  607. vibe_surf/backend/frontend/assets/file-search-DzPGZllw.js +6 -0
  608. vibe_surf/backend/frontend/assets/file-sliders-BHYXa9jQ.js +6 -0
  609. vibe_surf/backend/frontend/assets/file-spreadsheet-DvjPpK9G.js +6 -0
  610. vibe_surf/backend/frontend/assets/file-stack-yJR4id_3.js +6 -0
  611. vibe_surf/backend/frontend/assets/file-symlink-BWQBdrEp.js +6 -0
  612. vibe_surf/backend/frontend/assets/file-terminal-CvhcKgiv.js +6 -0
  613. vibe_surf/backend/frontend/assets/file-text-tuxzZhRs.js +6 -0
  614. vibe_surf/backend/frontend/assets/file-type-2-Dgantaer.js +6 -0
  615. vibe_surf/backend/frontend/assets/file-type-DfZBPqmH.js +6 -0
  616. vibe_surf/backend/frontend/assets/file-up-GXfnonbH.js +6 -0
  617. vibe_surf/backend/frontend/assets/file-user-N7Fan7ao.js +6 -0
  618. vibe_surf/backend/frontend/assets/file-video-2-B4JBmAcG.js +6 -0
  619. vibe_surf/backend/frontend/assets/file-video-Fsp8g5kU.js +6 -0
  620. vibe_surf/backend/frontend/assets/file-volume-2-Cg1A9z8S.js +6 -0
  621. vibe_surf/backend/frontend/assets/file-volume-xzVZMKW0.js +6 -0
  622. vibe_surf/backend/frontend/assets/file-warning-CS2F3Xr2.js +6 -0
  623. vibe_surf/backend/frontend/assets/file-x-2-BNUgAQH8.js +6 -0
  624. vibe_surf/backend/frontend/assets/file-x-DTK5Zfd-.js +6 -0
  625. vibe_surf/backend/frontend/assets/files-CNx4yvup.js +6 -0
  626. vibe_surf/backend/frontend/assets/film-Dec7cGCL.js +6 -0
  627. vibe_surf/backend/frontend/assets/fingerprint-B_IGMLcp.js +6 -0
  628. vibe_surf/backend/frontend/assets/fire-extinguisher-CjZilrfE.js +6 -0
  629. vibe_surf/backend/frontend/assets/fish-CXs3XpVQ.js +6 -0
  630. vibe_surf/backend/frontend/assets/fish-off-BfYutBG_.js +6 -0
  631. vibe_surf/backend/frontend/assets/fish-symbol-DFoA8GWJ.js +6 -0
  632. vibe_surf/backend/frontend/assets/flag-cx37QYSs.js +6 -0
  633. vibe_surf/backend/frontend/assets/flag-off-DyXYguA1.js +6 -0
  634. vibe_surf/backend/frontend/assets/flag-triangle-left-Dvsg9XUg.js +6 -0
  635. vibe_surf/backend/frontend/assets/flag-triangle-right-CluL18qS.js +6 -0
  636. vibe_surf/backend/frontend/assets/flame-DwjoBypP.js +6 -0
  637. vibe_surf/backend/frontend/assets/flame-kindling-DFbZUxx1.js +6 -0
  638. vibe_surf/backend/frontend/assets/flashlight-eSCrcAU_.js +6 -0
  639. vibe_surf/backend/frontend/assets/flashlight-off-C6ZnSGnv.js +6 -0
  640. vibe_surf/backend/frontend/assets/flask-conical-CqZXJFUg.js +6 -0
  641. vibe_surf/backend/frontend/assets/flask-conical-off-DLnkLxdX.js +6 -0
  642. vibe_surf/backend/frontend/assets/flask-round-Dukzlk12.js +6 -0
  643. vibe_surf/backend/frontend/assets/flip-horizontal-2-DPCHT9Se.js +6 -0
  644. vibe_surf/backend/frontend/assets/flip-horizontal-B27Zih29.js +6 -0
  645. vibe_surf/backend/frontend/assets/flip-vertical-2-BLZ7P_e7.js +6 -0
  646. vibe_surf/backend/frontend/assets/flip-vertical-BKIxHZUr.js +6 -0
  647. vibe_surf/backend/frontend/assets/flower-2-C3USolHO.js +6 -0
  648. vibe_surf/backend/frontend/assets/flower-MuZltbIo.js +6 -0
  649. vibe_surf/backend/frontend/assets/focus-42uZfpdQ.js +6 -0
  650. vibe_surf/backend/frontend/assets/fold-horizontal-Di0iHFys.js +6 -0
  651. vibe_surf/backend/frontend/assets/fold-vertical-DTaNfFgW.js +6 -0
  652. vibe_surf/backend/frontend/assets/folder-CZZJq_yO.js +6 -0
  653. vibe_surf/backend/frontend/assets/folder-archive-B9gmPXfh.js +6 -0
  654. vibe_surf/backend/frontend/assets/folder-check-D8RNiC0h.js +6 -0
  655. vibe_surf/backend/frontend/assets/folder-clock-xJeq54e5.js +6 -0
  656. vibe_surf/backend/frontend/assets/folder-closed-J_oj7irx.js +6 -0
  657. vibe_surf/backend/frontend/assets/folder-code-sdeNF88C.js +6 -0
  658. vibe_surf/backend/frontend/assets/folder-cog-DaxTyB8x.js +6 -0
  659. vibe_surf/backend/frontend/assets/folder-dot-CcddM8ht.js +6 -0
  660. vibe_surf/backend/frontend/assets/folder-down-B6ibnVRy.js +6 -0
  661. vibe_surf/backend/frontend/assets/folder-git-2-C1s592lv.js +6 -0
  662. vibe_surf/backend/frontend/assets/folder-git-DT6ZCpGc.js +6 -0
  663. vibe_surf/backend/frontend/assets/folder-heart-_fpvnFcA.js +6 -0
  664. vibe_surf/backend/frontend/assets/folder-input-OCjNnVk-.js +6 -0
  665. vibe_surf/backend/frontend/assets/folder-kanban-DgbGiYl_.js +6 -0
  666. vibe_surf/backend/frontend/assets/folder-key-6dl4vOVJ.js +6 -0
  667. vibe_surf/backend/frontend/assets/folder-lock-C0FPUNUM.js +6 -0
  668. vibe_surf/backend/frontend/assets/folder-minus-CnnUrRgx.js +6 -0
  669. vibe_surf/backend/frontend/assets/folder-open-B6qoyzo4.js +6 -0
  670. vibe_surf/backend/frontend/assets/folder-open-dot-vcn79EAq.js +6 -0
  671. vibe_surf/backend/frontend/assets/folder-output-aqyTbjq1.js +6 -0
  672. vibe_surf/backend/frontend/assets/folder-pen-DONbvY-M.js +6 -0
  673. vibe_surf/backend/frontend/assets/folder-plus-B1CMWyUH.js +6 -0
  674. vibe_surf/backend/frontend/assets/folder-root-CO03ueMD.js +6 -0
  675. vibe_surf/backend/frontend/assets/folder-search-2-vXSwPDsr.js +6 -0
  676. vibe_surf/backend/frontend/assets/folder-search-CqRRhEYi.js +6 -0
  677. vibe_surf/backend/frontend/assets/folder-symlink-CyG26ZIM.js +6 -0
  678. vibe_surf/backend/frontend/assets/folder-sync-D7kc3Qv9.js +6 -0
  679. vibe_surf/backend/frontend/assets/folder-tree-B_kJAFgg.js +6 -0
  680. vibe_surf/backend/frontend/assets/folder-up-CPWWXuBL.js +6 -0
  681. vibe_surf/backend/frontend/assets/folder-x-BgWBu65a.js +6 -0
  682. vibe_surf/backend/frontend/assets/folders-BqIxqB0_.js +6 -0
  683. vibe_surf/backend/frontend/assets/footprints-U_DOce2V.js +6 -0
  684. vibe_surf/backend/frontend/assets/forklift-HwzIz7aw.js +6 -0
  685. vibe_surf/backend/frontend/assets/forward-DjYLGiCR.js +6 -0
  686. vibe_surf/backend/frontend/assets/frame-poMkf2ta.js +6 -0
  687. vibe_surf/backend/frontend/assets/framer-DNQvf86-.js +6 -0
  688. vibe_surf/backend/frontend/assets/frown-BnHOvtLa.js +6 -0
  689. vibe_surf/backend/frontend/assets/fuel-Cm_lHCJg.js +6 -0
  690. vibe_surf/backend/frontend/assets/fullscreen-COEG0zVc.js +6 -0
  691. vibe_surf/backend/frontend/assets/funnel-BKREn55d.js +6 -0
  692. vibe_surf/backend/frontend/assets/funnel-plus-B1RbFoZ4.js +6 -0
  693. vibe_surf/backend/frontend/assets/funnel-x-z3lufNFJ.js +6 -0
  694. vibe_surf/backend/frontend/assets/gallery-horizontal-CZQKmb1v.js +6 -0
  695. vibe_surf/backend/frontend/assets/gallery-horizontal-end-rt0pNZmd.js +6 -0
  696. vibe_surf/backend/frontend/assets/gallery-thumbnails-BawPOO5E.js +6 -0
  697. vibe_surf/backend/frontend/assets/gallery-vertical-DHlqWz-O.js +6 -0
  698. vibe_surf/backend/frontend/assets/gallery-vertical-end-1UBU5tP0.js +6 -0
  699. vibe_surf/backend/frontend/assets/gamepad-2-CGlBaPJy.js +6 -0
  700. vibe_surf/backend/frontend/assets/gamepad-B7EN8TXy.js +6 -0
  701. vibe_surf/backend/frontend/assets/gauge-CkJyJpYu.js +6 -0
  702. vibe_surf/backend/frontend/assets/gavel-BXOFsfyc.js +6 -0
  703. vibe_surf/backend/frontend/assets/gem-DJaoJhpp.js +6 -0
  704. vibe_surf/backend/frontend/assets/ghost-5jDlD5mv.js +6 -0
  705. vibe_surf/backend/frontend/assets/gift-DTuN9n1d.js +6 -0
  706. vibe_surf/backend/frontend/assets/git-branch-CAxiUjEF.js +6 -0
  707. vibe_surf/backend/frontend/assets/git-branch-plus-BcouIUD3.js +6 -0
  708. vibe_surf/backend/frontend/assets/git-commit-horizontal-DqOnbX0A.js +6 -0
  709. vibe_surf/backend/frontend/assets/git-commit-vertical-DEAmtVm7.js +6 -0
  710. vibe_surf/backend/frontend/assets/git-compare-8F4A8hf8.js +6 -0
  711. vibe_surf/backend/frontend/assets/git-compare-arrows-BCgbMQBd.js +6 -0
  712. vibe_surf/backend/frontend/assets/git-fork-UmnYpjac.js +6 -0
  713. vibe_surf/backend/frontend/assets/git-graph-MIRVcG3s.js +6 -0
  714. vibe_surf/backend/frontend/assets/git-merge-1ccPZB0a.js +6 -0
  715. vibe_surf/backend/frontend/assets/git-pull-request-BAmJjoSf.js +6 -0
  716. vibe_surf/backend/frontend/assets/git-pull-request-arrow-hDbG9s0T.js +6 -0
  717. vibe_surf/backend/frontend/assets/git-pull-request-closed-DZVF4_75.js +6 -0
  718. vibe_surf/backend/frontend/assets/git-pull-request-create-B_ikGAua.js +6 -0
  719. vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-OlDcvuiA.js +6 -0
  720. vibe_surf/backend/frontend/assets/git-pull-request-draft-CfvzgQz4.js +6 -0
  721. vibe_surf/backend/frontend/assets/github-DlTWmBTt.js +6 -0
  722. vibe_surf/backend/frontend/assets/gitlab-DquWeR50.js +6 -0
  723. vibe_surf/backend/frontend/assets/glass-water-yuqxiPgK.js +6 -0
  724. vibe_surf/backend/frontend/assets/glasses-DPTQtusr.js +6 -0
  725. vibe_surf/backend/frontend/assets/globe-D1X1kv-g.js +6 -0
  726. vibe_surf/backend/frontend/assets/globe-lock-miWknHfI.js +6 -0
  727. vibe_surf/backend/frontend/assets/goal-BY1nb-LN.js +6 -0
  728. vibe_surf/backend/frontend/assets/grab-CnmpLOMH.js +6 -0
  729. vibe_surf/backend/frontend/assets/graduation-cap-CcH89wnV.js +6 -0
  730. vibe_surf/backend/frontend/assets/grape-CIiMFgS_.js +6 -0
  731. vibe_surf/backend/frontend/assets/grid-2x2-DyXR6Owe.js +6 -0
  732. vibe_surf/backend/frontend/assets/grid-2x2-check-D2GIuWpl.js +6 -0
  733. vibe_surf/backend/frontend/assets/grid-2x2-plus-D89B7CNh.js +6 -0
  734. vibe_surf/backend/frontend/assets/grid-2x2-x-CMeekq27.js +6 -0
  735. vibe_surf/backend/frontend/assets/grid-3x3-qKjElxaz.js +6 -0
  736. vibe_surf/backend/frontend/assets/grip--SsS48b-.js +6 -0
  737. vibe_surf/backend/frontend/assets/grip-horizontal-DapWkFjo.js +6 -0
  738. vibe_surf/backend/frontend/assets/grip-vertical-vn3rXQIt.js +6 -0
  739. vibe_surf/backend/frontend/assets/group-XhzCMXdw.js +6 -0
  740. vibe_surf/backend/frontend/assets/guitar-But8OLt2.js +6 -0
  741. vibe_surf/backend/frontend/assets/ham-_9G65W_I.js +6 -0
  742. vibe_surf/backend/frontend/assets/hammer-C2AZqVnX.js +6 -0
  743. vibe_surf/backend/frontend/assets/hand-DXuxSiOo.js +6 -0
  744. vibe_surf/backend/frontend/assets/hand-coins-mma7__lh.js +6 -0
  745. vibe_surf/backend/frontend/assets/hand-heart-DNtq1bnS.js +6 -0
  746. vibe_surf/backend/frontend/assets/hand-helping-Cdw7lKNu.js +6 -0
  747. vibe_surf/backend/frontend/assets/hand-metal-CcoWdRUV.js +6 -0
  748. vibe_surf/backend/frontend/assets/hand-platter-DoQTVTFx.js +6 -0
  749. vibe_surf/backend/frontend/assets/handshake-CJyspjIU.js +6 -0
  750. vibe_surf/backend/frontend/assets/hard-drive-ZduQuJtY.js +6 -0
  751. vibe_surf/backend/frontend/assets/hard-drive-download-D_hUh11c.js +6 -0
  752. vibe_surf/backend/frontend/assets/hard-drive-upload-BBPLIyZo.js +6 -0
  753. vibe_surf/backend/frontend/assets/hard-hat-OlmGevRI.js +6 -0
  754. vibe_surf/backend/frontend/assets/hash-COjLjaYu.js +6 -0
  755. vibe_surf/backend/frontend/assets/haze-Vf7OsAWn.js +6 -0
  756. vibe_surf/backend/frontend/assets/hdmi-port-B3C9bYX1.js +6 -0
  757. vibe_surf/backend/frontend/assets/heading-1-Dyyb72R2.js +6 -0
  758. vibe_surf/backend/frontend/assets/heading-2-ClF7vOi5.js +6 -0
  759. vibe_surf/backend/frontend/assets/heading-3-DPRazJfc.js +6 -0
  760. vibe_surf/backend/frontend/assets/heading-4-3e6Zii5g.js +6 -0
  761. vibe_surf/backend/frontend/assets/heading-5-GEVsfo30.js +6 -0
  762. vibe_surf/backend/frontend/assets/heading-6-CtX8dWYy.js +6 -0
  763. vibe_surf/backend/frontend/assets/heading-C_c5dBtC.js +6 -0
  764. vibe_surf/backend/frontend/assets/headphone-off-VkuNIw42.js +6 -0
  765. vibe_surf/backend/frontend/assets/headphones-BdMKOmhg.js +6 -0
  766. vibe_surf/backend/frontend/assets/headset-CGOllUmf.js +6 -0
  767. vibe_surf/backend/frontend/assets/heart-J_dfRIZ7.js +6 -0
  768. vibe_surf/backend/frontend/assets/heart-crack-BDNXXAjd.js +6 -0
  769. vibe_surf/backend/frontend/assets/heart-handshake-BhQLIVaj.js +6 -0
  770. vibe_surf/backend/frontend/assets/heart-minus-Dgexi3zQ.js +6 -0
  771. vibe_surf/backend/frontend/assets/heart-off-DF68jDRm.js +6 -0
  772. vibe_surf/backend/frontend/assets/heart-plus-D3LX6R_l.js +6 -0
  773. vibe_surf/backend/frontend/assets/heart-pulse-DnwkpqSJ.js +6 -0
  774. vibe_surf/backend/frontend/assets/heater-Bilq_TPS.js +6 -0
  775. vibe_surf/backend/frontend/assets/hexagon-BEvfIIaV.js +6 -0
  776. vibe_surf/backend/frontend/assets/highlighter-CNa8UVQD.js +6 -0
  777. vibe_surf/backend/frontend/assets/history-BggOc8wP.js +6 -0
  778. vibe_surf/backend/frontend/assets/hop-BCUHAdeR.js +6 -0
  779. vibe_surf/backend/frontend/assets/hop-off-B5f9Fr80.js +6 -0
  780. vibe_surf/backend/frontend/assets/hospital-Dk0tqXu9.js +6 -0
  781. vibe_surf/backend/frontend/assets/hotel-CXl-yW7B.js +6 -0
  782. vibe_surf/backend/frontend/assets/hourglass-DSRXQwTc.js +6 -0
  783. vibe_surf/backend/frontend/assets/house-Bhp2WF4v.js +6 -0
  784. vibe_surf/backend/frontend/assets/house-plug-DXm5j2Xq.js +6 -0
  785. vibe_surf/backend/frontend/assets/house-plus-KMp_x4hA.js +6 -0
  786. vibe_surf/backend/frontend/assets/house-wifi-Ccrar5-8.js +6 -0
  787. vibe_surf/backend/frontend/assets/ice-cream-bowl-j3qet3-o.js +6 -0
  788. vibe_surf/backend/frontend/assets/ice-cream-cone-XtpMBOSu.js +6 -0
  789. vibe_surf/backend/frontend/assets/id-card-BqzQOrR_.js +6 -0
  790. vibe_surf/backend/frontend/assets/image-B3lEwdvu.js +6 -0
  791. vibe_surf/backend/frontend/assets/image-down-sVdzbwfm.js +6 -0
  792. vibe_surf/backend/frontend/assets/image-minus-BdddBiyu.js +6 -0
  793. vibe_surf/backend/frontend/assets/image-off-CCZ9kVWH.js +6 -0
  794. vibe_surf/backend/frontend/assets/image-play-LNuKchCO.js +6 -0
  795. vibe_surf/backend/frontend/assets/image-plus-B4GTKJ6Z.js +6 -0
  796. vibe_surf/backend/frontend/assets/image-up-BfxmsdpY.js +6 -0
  797. vibe_surf/backend/frontend/assets/image-upscale-CexWZ50d.js +6 -0
  798. vibe_surf/backend/frontend/assets/images-C8Wp1eOg.js +6 -0
  799. vibe_surf/backend/frontend/assets/import-ec27SWYy.js +6 -0
  800. vibe_surf/backend/frontend/assets/inbox-YvwvpFKi.js +6 -0
  801. vibe_surf/backend/frontend/assets/indent-decrease-Dp0BVsoQ.js +6 -0
  802. vibe_surf/backend/frontend/assets/indent-increase-D3BuYj2n.js +6 -0
  803. vibe_surf/backend/frontend/assets/index-2CcQW4OZ.js +13 -0
  804. vibe_surf/backend/frontend/assets/index-4vq5awkV.js +1 -0
  805. vibe_surf/backend/frontend/assets/index-5ZZlgfo-.js +1 -0
  806. vibe_surf/backend/frontend/assets/index-6dxAUV6Y.js +1 -0
  807. vibe_surf/backend/frontend/assets/index-AzcZQWVx.js +2723 -0
  808. vibe_surf/backend/frontend/assets/index-B-IDFsd0.js +1 -0
  809. vibe_surf/backend/frontend/assets/index-B-ohDVDe.js +1 -0
  810. vibe_surf/backend/frontend/assets/index-B1Q4y1qa.js +1 -0
  811. vibe_surf/backend/frontend/assets/index-B1SY6fah.js +1 -0
  812. vibe_surf/backend/frontend/assets/index-B2ljcLYu.js +1 -0
  813. vibe_surf/backend/frontend/assets/index-B4-H1yfm.js +108 -0
  814. vibe_surf/backend/frontend/assets/index-B6MKztQU.js +1 -0
  815. vibe_surf/backend/frontend/assets/index-B7i2Q-3O.js +1 -0
  816. vibe_surf/backend/frontend/assets/index-B9Wx-Ii0.js +1 -0
  817. vibe_surf/backend/frontend/assets/index-BFzpTaXY.js +1 -0
  818. vibe_surf/backend/frontend/assets/index-BIBNbmyC.js +1 -0
  819. vibe_surf/backend/frontend/assets/index-BL_hoToU.js +1 -0
  820. vibe_surf/backend/frontend/assets/index-BOeI-zQ9.js +1 -0
  821. vibe_surf/backend/frontend/assets/index-BPEpFAuc.js +1 -0
  822. vibe_surf/backend/frontend/assets/index-BQ1eB4fC.js +1 -0
  823. vibe_surf/backend/frontend/assets/index-BQ2H2d3f.js +1 -0
  824. vibe_surf/backend/frontend/assets/index-BR-8IPV4.js +205 -0
  825. vibe_surf/backend/frontend/assets/index-BV8ArFsA.js +1 -0
  826. vibe_surf/backend/frontend/assets/index-BWwASCq5.js +1 -0
  827. vibe_surf/backend/frontend/assets/index-BWwglY3I.js +1 -0
  828. vibe_surf/backend/frontend/assets/index-B_Qz_foX.js +1 -0
  829. vibe_surf/backend/frontend/assets/index-BaoW7GZH.js +1 -0
  830. vibe_surf/backend/frontend/assets/index-BcrHz-y8.js +1 -0
  831. vibe_surf/backend/frontend/assets/index-BdSzkc1f.js +20 -0
  832. vibe_surf/backend/frontend/assets/index-BeLkvqxv.js +1 -0
  833. vibe_surf/backend/frontend/assets/index-Beq_etUM.js +1 -0
  834. vibe_surf/backend/frontend/assets/index-BgzQso9y.js +1 -0
  835. vibe_surf/backend/frontend/assets/index-BiNrEY13.js +1 -0
  836. vibe_surf/backend/frontend/assets/index-Bja3ZEZo.js +1 -0
  837. vibe_surf/backend/frontend/assets/index-BmcD7XCM.js +1 -0
  838. vibe_surf/backend/frontend/assets/index-BmnwJzsA.js +1 -0
  839. vibe_surf/backend/frontend/assets/index-BssAenIo.js +1 -0
  840. vibe_surf/backend/frontend/assets/index-BvEZ1ywS.js +1 -0
  841. vibe_surf/backend/frontend/assets/index-BwO1owi8.js +1 -0
  842. vibe_surf/backend/frontend/assets/index-BwXsJbuu.js +21 -0
  843. vibe_surf/backend/frontend/assets/index-BwlG2DdK.js +1 -0
  844. vibe_surf/backend/frontend/assets/index-BzjC6B6I.js +1 -0
  845. vibe_surf/backend/frontend/assets/index-C0BOag_5.js +1 -0
  846. vibe_surf/backend/frontend/assets/index-C0EsaEHC.js +1 -0
  847. vibe_surf/backend/frontend/assets/index-C0IGIaTE.js +1 -0
  848. vibe_surf/backend/frontend/assets/index-C0IdY_9F.js +1 -0
  849. vibe_surf/backend/frontend/assets/index-C1DABLwl.js +1 -0
  850. vibe_surf/backend/frontend/assets/index-C1JE4AZB.js +1 -0
  851. vibe_surf/backend/frontend/assets/index-C1Rkl2Ur.js +1 -0
  852. vibe_surf/backend/frontend/assets/index-C2YWu5t8.js +1 -0
  853. vibe_surf/backend/frontend/assets/index-C2_4AcrM.js +1 -0
  854. vibe_surf/backend/frontend/assets/index-C48IE5LT.js +1 -0
  855. vibe_surf/backend/frontend/assets/index-C4JqQnzd.js +1 -0
  856. vibe_surf/backend/frontend/assets/index-C5QqjjEO.js +1 -0
  857. vibe_surf/backend/frontend/assets/index-C6ZyrgxW.js +1 -0
  858. vibe_surf/backend/frontend/assets/index-C9n9R8Ob.js +1 -0
  859. vibe_surf/backend/frontend/assets/index-CATPt8gz.js +1 -0
  860. vibe_surf/backend/frontend/assets/index-CAc6KlCl.js +1 -0
  861. vibe_surf/backend/frontend/assets/index-CAeE91z_.js +1 -0
  862. vibe_surf/backend/frontend/assets/index-CBLrD5S8.js +1 -0
  863. vibe_surf/backend/frontend/assets/index-CEx7_efn.js +1 -0
  864. vibe_surf/backend/frontend/assets/index-CGNwvjd6.js +1 -0
  865. vibe_surf/backend/frontend/assets/index-CJIkyYuu.js +1 -0
  866. vibe_surf/backend/frontend/assets/index-CL8YNknR.js +1 -0
  867. vibe_surf/backend/frontend/assets/index-CQ4c4zmh.js +1 -0
  868. vibe_surf/backend/frontend/assets/index-CSKpbeRU.js +1 -0
  869. vibe_surf/backend/frontend/assets/index-CTJUto70.js +1 -0
  870. vibe_surf/backend/frontend/assets/index-CUm8t_3-.js +1 -0
  871. vibe_surf/backend/frontend/assets/index-CWaG8YQf.js +1 -0
  872. vibe_surf/backend/frontend/assets/index-CWqCL2_S.js +1 -0
  873. vibe_surf/backend/frontend/assets/index-CZKjLvxC.js +1 -0
  874. vibe_surf/backend/frontend/assets/index-C_a_gjJ3.js +7382 -0
  875. vibe_surf/backend/frontend/assets/index-C_gjztJA.js +1 -0
  876. vibe_surf/backend/frontend/assets/index-Cd394DZ3.js +1 -0
  877. vibe_surf/backend/frontend/assets/index-Ch_ENQTO.js +1 -0
  878. vibe_surf/backend/frontend/assets/index-CjDauRtw.js +1 -0
  879. vibe_surf/backend/frontend/assets/index-Cjsyudia.js +1 -0
  880. vibe_surf/backend/frontend/assets/index-Ck0Rk7OE.js +1 -0
  881. vibe_surf/backend/frontend/assets/index-Ct1jT_zG.js +1 -0
  882. vibe_surf/backend/frontend/assets/index-CtZOHuJR.js +1 -0
  883. vibe_surf/backend/frontend/assets/index-CwylYZIy.js +1 -0
  884. vibe_surf/backend/frontend/assets/index-CxGAIJCD.js +1 -0
  885. vibe_surf/backend/frontend/assets/index-D-6VXnmQ.js +1 -0
  886. vibe_surf/backend/frontend/assets/index-D-_pq5D8.js +1 -0
  887. vibe_surf/backend/frontend/assets/index-D-oTsuqV.js +1 -0
  888. vibe_surf/backend/frontend/assets/index-D8iHrvl3.js +1 -0
  889. vibe_surf/backend/frontend/assets/index-DDYB0tod.js +1 -0
  890. vibe_surf/backend/frontend/assets/index-DDtHdtyM.js +1 -0
  891. vibe_surf/backend/frontend/assets/index-DH3R0iod.js +1 -0
  892. vibe_surf/backend/frontend/assets/index-DJAmqieX.js +1 -0
  893. vibe_surf/backend/frontend/assets/index-DJYhOcBD.js +1 -0
  894. vibe_surf/backend/frontend/assets/index-DQKxDe4Q.js +1 -0
  895. vibe_surf/backend/frontend/assets/index-DS9glxiF.js +1 -0
  896. vibe_surf/backend/frontend/assets/index-DUjF6qus.js +2 -0
  897. vibe_surf/backend/frontend/assets/index-DXYmUzC_.css +1 -0
  898. vibe_surf/backend/frontend/assets/index-D_wRbh5r.js +1 -0
  899. vibe_surf/backend/frontend/assets/index-Db4BfmcT.js +1 -0
  900. vibe_surf/backend/frontend/assets/index-DfZGZYcK.js +1 -0
  901. vibe_surf/backend/frontend/assets/index-DlDGYPf2.js +1 -0
  902. vibe_surf/backend/frontend/assets/index-DlFy5Gok.js +1 -0
  903. vibe_surf/backend/frontend/assets/index-DmVpDlko.js +1 -0
  904. vibe_surf/backend/frontend/assets/index-Dpc9wHta.js +1 -0
  905. vibe_surf/backend/frontend/assets/index-DvcAIETO.js +1 -0
  906. vibe_surf/backend/frontend/assets/index-Dwi-X1Od.js +1 -0
  907. vibe_surf/backend/frontend/assets/index-FMPFv3Wf.js +1 -0
  908. vibe_surf/backend/frontend/assets/index-H3Uskc2o.js +1 -0
  909. vibe_surf/backend/frontend/assets/index-JWfrTs_0.js +1 -0
  910. vibe_surf/backend/frontend/assets/index-LX3KOMfj.js +1 -0
  911. vibe_surf/backend/frontend/assets/index-LXWgTVf4.js +1 -0
  912. vibe_surf/backend/frontend/assets/index-WJ6PviAq.js +1 -0
  913. vibe_surf/backend/frontend/assets/index-WrqFIXAC.js +1 -0
  914. vibe_surf/backend/frontend/assets/index-Yoj1a8xs.js +1 -0
  915. vibe_surf/backend/frontend/assets/index-YxTPhodS.js +1 -0
  916. vibe_surf/backend/frontend/assets/index-_8LB3oNa.js +1 -0
  917. vibe_surf/backend/frontend/assets/index-bNhROe-x.js +1 -0
  918. vibe_surf/backend/frontend/assets/index-cQAtXO5d.js +1 -0
  919. vibe_surf/backend/frontend/assets/index-hIdlDvEv.js +1 -0
  920. vibe_surf/backend/frontend/assets/index-hxJwU1-s.js +1 -0
  921. vibe_surf/backend/frontend/assets/index-iA_X3O5r.js +1 -0
  922. vibe_surf/backend/frontend/assets/index-iW93REva.js +1 -0
  923. vibe_surf/backend/frontend/assets/index-k2RdCBHb.js +1 -0
  924. vibe_surf/backend/frontend/assets/index-kJKg9EzG.js +1 -0
  925. vibe_surf/backend/frontend/assets/index-mX6ATl2n.js +1 -0
  926. vibe_surf/backend/frontend/assets/index-muCxPdjC.js +1 -0
  927. vibe_surf/backend/frontend/assets/index-nd1f74Wi.js +1 -0
  928. vibe_surf/backend/frontend/assets/index-qGbEX4n3.js +1 -0
  929. vibe_surf/backend/frontend/assets/index-qOd-CLaR.js +1 -0
  930. vibe_surf/backend/frontend/assets/index-sguRseYw.js +1 -0
  931. vibe_surf/backend/frontend/assets/index-vd7ILFrg.js +1 -0
  932. vibe_surf/backend/frontend/assets/index-we6mCAhv.js +1 -0
  933. vibe_surf/backend/frontend/assets/index-x0VA7yzX.js +1 -0
  934. vibe_surf/backend/frontend/assets/index-yCVeNkNd.js +1 -0
  935. vibe_surf/backend/frontend/assets/indian-rupee-ClaZI0Dh.js +6 -0
  936. vibe_surf/backend/frontend/assets/infinity-LKjcIaZa.js +6 -0
  937. vibe_surf/backend/frontend/assets/info-DFBdB7_c.js +6 -0
  938. vibe_surf/backend/frontend/assets/inspection-panel-DGzE6245.js +6 -0
  939. vibe_surf/backend/frontend/assets/instagram-CJj5AWOV.js +6 -0
  940. vibe_surf/backend/frontend/assets/italic-CKFB3the.js +6 -0
  941. vibe_surf/backend/frontend/assets/iteration-ccw-YnfylsKm.js +6 -0
  942. vibe_surf/backend/frontend/assets/iteration-cw-DTHRwCcy.js +6 -0
  943. vibe_surf/backend/frontend/assets/japanese-yen-BG_Inyh_.js +6 -0
  944. vibe_surf/backend/frontend/assets/joystick-bJVSvZlL.js +6 -0
  945. vibe_surf/backend/frontend/assets/kanban-KP-K8pC9.js +6 -0
  946. vibe_surf/backend/frontend/assets/key-CNaiqe5q.js +6 -0
  947. vibe_surf/backend/frontend/assets/key-round-RTYFDTCa.js +6 -0
  948. vibe_surf/backend/frontend/assets/key-square-C7EKR-zE.js +6 -0
  949. vibe_surf/backend/frontend/assets/keyboard-DaM0Dl19.js +6 -0
  950. vibe_surf/backend/frontend/assets/keyboard-music-CzJZiHzS.js +6 -0
  951. vibe_surf/backend/frontend/assets/keyboard-off-C9Jl7GZs.js +6 -0
  952. vibe_surf/backend/frontend/assets/lamp-DK_3DJnO.js +6 -0
  953. vibe_surf/backend/frontend/assets/lamp-ceiling-B8sGjZ8c.js +6 -0
  954. vibe_surf/backend/frontend/assets/lamp-desk-CxWpiNas.js +6 -0
  955. vibe_surf/backend/frontend/assets/lamp-floor-EUFzRKf7.js +6 -0
  956. vibe_surf/backend/frontend/assets/lamp-wall-down-BV84JTWM.js +6 -0
  957. vibe_surf/backend/frontend/assets/lamp-wall-up-BqpaYZN9.js +6 -0
  958. vibe_surf/backend/frontend/assets/land-plot-Dly_Debw.js +6 -0
  959. vibe_surf/backend/frontend/assets/landmark-W6MewilS.js +6 -0
  960. vibe_surf/backend/frontend/assets/languages-BQghN4Gu.js +6 -0
  961. vibe_surf/backend/frontend/assets/laptop-BysYcdO1.js +6 -0
  962. vibe_surf/backend/frontend/assets/laptop-minimal-CUViKl_u.js +6 -0
  963. vibe_surf/backend/frontend/assets/laptop-minimal-check-BZNY8l54.js +6 -0
  964. vibe_surf/backend/frontend/assets/lasso-CBTyEbGH.js +6 -0
  965. vibe_surf/backend/frontend/assets/lasso-select-D9j71vtb.js +6 -0
  966. vibe_surf/backend/frontend/assets/laugh-fkxJEAC6.js +6 -0
  967. vibe_surf/backend/frontend/assets/layers-2-B3mnroGJ.js +6 -0
  968. vibe_surf/backend/frontend/assets/layers-CLO8Qj7V.js +6 -0
  969. vibe_surf/backend/frontend/assets/layout-dashboard-BCgC4-j3.js +6 -0
  970. vibe_surf/backend/frontend/assets/layout-grid-DQlh6Dv5.js +6 -0
  971. vibe_surf/backend/frontend/assets/layout-list-BK2Y57B-.js +6 -0
  972. vibe_surf/backend/frontend/assets/layout-panel-left-BzdjKizu.js +6 -0
  973. vibe_surf/backend/frontend/assets/layout-panel-top-CmMnqmez.js +6 -0
  974. vibe_surf/backend/frontend/assets/layout-template-DkuzhO5B.js +6 -0
  975. vibe_surf/backend/frontend/assets/lazyIconImports-Cbxc-ykm.js +2 -0
  976. vibe_surf/backend/frontend/assets/leaf-D1Z4WxA8.js +6 -0
  977. vibe_surf/backend/frontend/assets/leafy-green-C7IHTNVi.js +6 -0
  978. vibe_surf/backend/frontend/assets/lectern-BpswhiFV.js +6 -0
  979. vibe_surf/backend/frontend/assets/letter-text-B_mZgzJ7.js +6 -0
  980. vibe_surf/backend/frontend/assets/library-BEQ0EBja.js +6 -0
  981. vibe_surf/backend/frontend/assets/library-big-C32jLDwT.js +6 -0
  982. vibe_surf/backend/frontend/assets/life-buoy-AWdXr4CQ.js +6 -0
  983. vibe_surf/backend/frontend/assets/ligature-DRsGqV7j.js +6 -0
  984. vibe_surf/backend/frontend/assets/lightbulb-D3KZbCQp.js +6 -0
  985. vibe_surf/backend/frontend/assets/lightbulb-off-iSDmy8d6.js +6 -0
  986. vibe_surf/backend/frontend/assets/link-2-CCZYGxDI.js +6 -0
  987. vibe_surf/backend/frontend/assets/link-2-off-BWpEKUCS.js +6 -0
  988. vibe_surf/backend/frontend/assets/link-Diw-YZ8t.js +6 -0
  989. vibe_surf/backend/frontend/assets/linkedin-CExn9EK5.js +6 -0
  990. vibe_surf/backend/frontend/assets/list-CB9zDbEv.js +6 -0
  991. vibe_surf/backend/frontend/assets/list-check-CCdijvLD.js +6 -0
  992. vibe_surf/backend/frontend/assets/list-checks-B1EQ8oeV.js +6 -0
  993. vibe_surf/backend/frontend/assets/list-collapse-B_Nyhn3U.js +6 -0
  994. vibe_surf/backend/frontend/assets/list-end-BRGFPR4T.js +6 -0
  995. vibe_surf/backend/frontend/assets/list-filter-DR4JqPVX.js +6 -0
  996. vibe_surf/backend/frontend/assets/list-filter-plus-Q7j2JYzP.js +6 -0
  997. vibe_surf/backend/frontend/assets/list-minus-DrLtfmEG.js +6 -0
  998. vibe_surf/backend/frontend/assets/list-music-C6MOQHoL.js +6 -0
  999. vibe_surf/backend/frontend/assets/list-ordered-Db8L0lqU.js +6 -0
  1000. vibe_surf/backend/frontend/assets/list-plus-C1dade1Z.js +6 -0
  1001. vibe_surf/backend/frontend/assets/list-restart-CyRkF6Xo.js +6 -0
  1002. vibe_surf/backend/frontend/assets/list-start-CAn16QHF.js +6 -0
  1003. vibe_surf/backend/frontend/assets/list-todo-giJ3EaBY.js +6 -0
  1004. vibe_surf/backend/frontend/assets/list-tree-ZTTp4tz8.js +6 -0
  1005. vibe_surf/backend/frontend/assets/list-video-SNqnTTmu.js +6 -0
  1006. vibe_surf/backend/frontend/assets/list-x-XeDairuR.js +6 -0
  1007. vibe_surf/backend/frontend/assets/loader-RYX0GikH.js +6 -0
  1008. vibe_surf/backend/frontend/assets/loader-circle-CjMVhyrE.js +6 -0
  1009. vibe_surf/backend/frontend/assets/loader-pinwheel-Dv08mzUX.js +6 -0
  1010. vibe_surf/backend/frontend/assets/locate-DcqAXVyu.js +6 -0
  1011. vibe_surf/backend/frontend/assets/locate-fixed-BgaqK3FM.js +6 -0
  1012. vibe_surf/backend/frontend/assets/locate-off-1UN8A6fK.js +6 -0
  1013. vibe_surf/backend/frontend/assets/location-edit-DFbMZW6i.js +6 -0
  1014. vibe_surf/backend/frontend/assets/lock-DWN4LH3Q.js +6 -0
  1015. vibe_surf/backend/frontend/assets/lock-keyhole-aeS26SmF.js +6 -0
  1016. vibe_surf/backend/frontend/assets/lock-keyhole-open-CoXzZLpr.js +6 -0
  1017. vibe_surf/backend/frontend/assets/lock-open-CBPubokC.js +6 -0
  1018. vibe_surf/backend/frontend/assets/log-in-BW8pmSIu.js +6 -0
  1019. vibe_surf/backend/frontend/assets/log-out-D-d0DczA.js +6 -0
  1020. vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
  1021. vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
  1022. vibe_surf/backend/frontend/assets/logs-AXuVwIE_.js +6 -0
  1023. vibe_surf/backend/frontend/assets/lollipop-CxugcHkj.js +6 -0
  1024. vibe_surf/backend/frontend/assets/luggage-CFtS088O.js +6 -0
  1025. vibe_surf/backend/frontend/assets/magnet-BpIqKX0D.js +6 -0
  1026. vibe_surf/backend/frontend/assets/mail-1Br8NAMK.js +6 -0
  1027. vibe_surf/backend/frontend/assets/mail-check-DFwD0fvI.js +6 -0
  1028. vibe_surf/backend/frontend/assets/mail-minus-B_KovqmT.js +6 -0
  1029. vibe_surf/backend/frontend/assets/mail-open-VEmMVybi.js +6 -0
  1030. vibe_surf/backend/frontend/assets/mail-plus-D-1Wacj7.js +6 -0
  1031. vibe_surf/backend/frontend/assets/mail-question-CJK96wre.js +6 -0
  1032. vibe_surf/backend/frontend/assets/mail-search-Du6F72Wj.js +6 -0
  1033. vibe_surf/backend/frontend/assets/mail-warning-BI87_kvG.js +6 -0
  1034. vibe_surf/backend/frontend/assets/mail-x-DU415vbZ.js +6 -0
  1035. vibe_surf/backend/frontend/assets/mailbox-CMHDAMVZ.js +6 -0
  1036. vibe_surf/backend/frontend/assets/mails-CUDj41Cn.js +6 -0
  1037. vibe_surf/backend/frontend/assets/map-D2I0g3OZ.js +6 -0
  1038. vibe_surf/backend/frontend/assets/map-pin-CiM6iB2r.js +6 -0
  1039. vibe_surf/backend/frontend/assets/map-pin-check-BQWCC6Uv.js +6 -0
  1040. vibe_surf/backend/frontend/assets/map-pin-check-inside-CVhhgPHY.js +6 -0
  1041. vibe_surf/backend/frontend/assets/map-pin-house-CXbXX8w-.js +6 -0
  1042. vibe_surf/backend/frontend/assets/map-pin-minus-D0dRHvgd.js +6 -0
  1043. vibe_surf/backend/frontend/assets/map-pin-minus-inside-DGpPZYAi.js +6 -0
  1044. vibe_surf/backend/frontend/assets/map-pin-off-EbFPnlZq.js +6 -0
  1045. vibe_surf/backend/frontend/assets/map-pin-plus-BLD0VcG5.js +6 -0
  1046. vibe_surf/backend/frontend/assets/map-pin-plus-inside-CapcP3Yk.js +6 -0
  1047. vibe_surf/backend/frontend/assets/map-pin-x-DrNWALEC.js +6 -0
  1048. vibe_surf/backend/frontend/assets/map-pin-x-inside-9DqM8z-J.js +6 -0
  1049. vibe_surf/backend/frontend/assets/map-pinned-DHMQpBhr.js +6 -0
  1050. vibe_surf/backend/frontend/assets/map-plus-CQm0KS9c.js +6 -0
  1051. vibe_surf/backend/frontend/assets/mars-CcweinsF.js +6 -0
  1052. vibe_surf/backend/frontend/assets/mars-stroke-OWTfhzV5.js +6 -0
  1053. vibe_surf/backend/frontend/assets/martini-DGORgxbx.js +6 -0
  1054. vibe_surf/backend/frontend/assets/maximize-2-CN4UuSQb.js +6 -0
  1055. vibe_surf/backend/frontend/assets/maximize-DOYuzVqB.js +6 -0
  1056. vibe_surf/backend/frontend/assets/medal-DZT2ADyJ.js +6 -0
  1057. vibe_surf/backend/frontend/assets/megaphone-DN4B6I5c.js +6 -0
  1058. vibe_surf/backend/frontend/assets/megaphone-off-DRAddUqF.js +6 -0
  1059. vibe_surf/backend/frontend/assets/meh-CTX3Y793.js +6 -0
  1060. vibe_surf/backend/frontend/assets/memory-stick-CSG08PuA.js +6 -0
  1061. vibe_surf/backend/frontend/assets/menu-BUvQ8bhy.js +6 -0
  1062. vibe_surf/backend/frontend/assets/merge-xkPPWyBJ.js +6 -0
  1063. vibe_surf/backend/frontend/assets/message-circle-BSqs77ZY.js +6 -0
  1064. vibe_surf/backend/frontend/assets/message-circle-code-EW46-KUX.js +6 -0
  1065. vibe_surf/backend/frontend/assets/message-circle-dashed-BOxWD8kE.js +6 -0
  1066. vibe_surf/backend/frontend/assets/message-circle-heart-CBhiUXeV.js +6 -0
  1067. vibe_surf/backend/frontend/assets/message-circle-more-DqfUhx6W.js +6 -0
  1068. vibe_surf/backend/frontend/assets/message-circle-off-DrsP7VV_.js +6 -0
  1069. vibe_surf/backend/frontend/assets/message-circle-plus-IixbN-s-.js +6 -0
  1070. vibe_surf/backend/frontend/assets/message-circle-question-DsMgtwwS.js +6 -0
  1071. vibe_surf/backend/frontend/assets/message-circle-reply-D_Eog9Yc.js +6 -0
  1072. vibe_surf/backend/frontend/assets/message-circle-warning-D656cL7l.js +6 -0
  1073. vibe_surf/backend/frontend/assets/message-circle-x-CXWR4BBb.js +6 -0
  1074. vibe_surf/backend/frontend/assets/message-square-DKWryKVG.js +6 -0
  1075. vibe_surf/backend/frontend/assets/message-square-code-0ANFU-JW.js +6 -0
  1076. vibe_surf/backend/frontend/assets/message-square-dashed-DaZwp2x1.js +6 -0
  1077. vibe_surf/backend/frontend/assets/message-square-diff-DpJLi_UX.js +6 -0
  1078. vibe_surf/backend/frontend/assets/message-square-dot-OcgwyxZC.js +6 -0
  1079. vibe_surf/backend/frontend/assets/message-square-heart-CKfZOSw8.js +6 -0
  1080. vibe_surf/backend/frontend/assets/message-square-lock-BnNy_yw5.js +6 -0
  1081. vibe_surf/backend/frontend/assets/message-square-more-D2WGFzms.js +6 -0
  1082. vibe_surf/backend/frontend/assets/message-square-off-DV5974j6.js +6 -0
  1083. vibe_surf/backend/frontend/assets/message-square-plus-7icA5g-P.js +6 -0
  1084. vibe_surf/backend/frontend/assets/message-square-quote-DdAvA-a_.js +6 -0
  1085. vibe_surf/backend/frontend/assets/message-square-reply-Cg9Dlls7.js +6 -0
  1086. vibe_surf/backend/frontend/assets/message-square-share-BptAhOEV.js +6 -0
  1087. vibe_surf/backend/frontend/assets/message-square-text-Cu-Ycwsi.js +6 -0
  1088. vibe_surf/backend/frontend/assets/message-square-warning-DxIzJ5bt.js +6 -0
  1089. vibe_surf/backend/frontend/assets/message-square-x-BF9akIp2.js +6 -0
  1090. vibe_surf/backend/frontend/assets/messages-square-AjrRNZXQ.js +6 -0
  1091. vibe_surf/backend/frontend/assets/mic-BXU1SRXR.js +6 -0
  1092. vibe_surf/backend/frontend/assets/mic-off-BUQ1-6-l.js +6 -0
  1093. vibe_surf/backend/frontend/assets/mic-vocal-CG4Yw8We.js +6 -0
  1094. vibe_surf/backend/frontend/assets/microchip-CodKB7m1.js +6 -0
  1095. vibe_surf/backend/frontend/assets/microscope-BY57GHi1.js +6 -0
  1096. vibe_surf/backend/frontend/assets/microwave-KuJ1X2CX.js +6 -0
  1097. vibe_surf/backend/frontend/assets/milestone-D_ToDu31.js +6 -0
  1098. vibe_surf/backend/frontend/assets/milk-C4Nq829F.js +6 -0
  1099. vibe_surf/backend/frontend/assets/milk-off-BPCtdIks.js +6 -0
  1100. vibe_surf/backend/frontend/assets/minimize-2-DeAs1S78.js +6 -0
  1101. vibe_surf/backend/frontend/assets/minimize-DKOGyuzf.js +6 -0
  1102. vibe_surf/backend/frontend/assets/monitor-Cjm4ELo4.js +6 -0
  1103. vibe_surf/backend/frontend/assets/monitor-check-CrckmDk_.js +6 -0
  1104. vibe_surf/backend/frontend/assets/monitor-cog-DIPYXk5z.js +6 -0
  1105. vibe_surf/backend/frontend/assets/monitor-dot-Cl_ZGBvp.js +6 -0
  1106. vibe_surf/backend/frontend/assets/monitor-down-DCSynbhm.js +6 -0
  1107. vibe_surf/backend/frontend/assets/monitor-off-Bxqkes47.js +6 -0
  1108. vibe_surf/backend/frontend/assets/monitor-pause-B2ogwlXq.js +6 -0
  1109. vibe_surf/backend/frontend/assets/monitor-play-w2CTvWQx.js +6 -0
  1110. vibe_surf/backend/frontend/assets/monitor-smartphone-DYQb-VQa.js +6 -0
  1111. vibe_surf/backend/frontend/assets/monitor-speaker-CruyWIOw.js +6 -0
  1112. vibe_surf/backend/frontend/assets/monitor-stop-D2cot7wP.js +6 -0
  1113. vibe_surf/backend/frontend/assets/monitor-up-Bo4VFUGK.js +6 -0
  1114. vibe_surf/backend/frontend/assets/monitor-x-yhFSw0Zo.js +6 -0
  1115. vibe_surf/backend/frontend/assets/moon-CZFTmFVS.js +6 -0
  1116. vibe_surf/backend/frontend/assets/moon-star-X8Pb6SAO.js +6 -0
  1117. vibe_surf/backend/frontend/assets/mountain-_tKRhauQ.js +6 -0
  1118. vibe_surf/backend/frontend/assets/mountain-snow-COLjUpoc.js +6 -0
  1119. vibe_surf/backend/frontend/assets/mouse-C62B_4i7.js +6 -0
  1120. vibe_surf/backend/frontend/assets/mouse-off-NO65wsqy.js +6 -0
  1121. vibe_surf/backend/frontend/assets/mouse-pointer-2-vvokJ-v-.js +6 -0
  1122. vibe_surf/backend/frontend/assets/mouse-pointer-IHoLB1Ii.js +6 -0
  1123. vibe_surf/backend/frontend/assets/mouse-pointer-ban-BGxlXS_f.js +6 -0
  1124. vibe_surf/backend/frontend/assets/mouse-pointer-click-C7N7cKxT.js +6 -0
  1125. vibe_surf/backend/frontend/assets/move-3d-CQO0qR5b.js +6 -0
  1126. vibe_surf/backend/frontend/assets/move-Bp3oIgRK.js +6 -0
  1127. vibe_surf/backend/frontend/assets/move-diagonal-2-CQ3Gqa4B.js +6 -0
  1128. vibe_surf/backend/frontend/assets/move-diagonal-BkUx0iYA.js +6 -0
  1129. vibe_surf/backend/frontend/assets/move-down-B4dxMy_p.js +6 -0
  1130. vibe_surf/backend/frontend/assets/move-down-left-NxvLep64.js +6 -0
  1131. vibe_surf/backend/frontend/assets/move-down-right-CxcsF1yI.js +6 -0
  1132. vibe_surf/backend/frontend/assets/move-horizontal-or6vuyOq.js +6 -0
  1133. vibe_surf/backend/frontend/assets/move-left-Tcae9tGG.js +6 -0
  1134. vibe_surf/backend/frontend/assets/move-right-jY3F431H.js +6 -0
  1135. vibe_surf/backend/frontend/assets/move-up-Dk8sPbRD.js +6 -0
  1136. vibe_surf/backend/frontend/assets/move-up-left-CD7NRvhF.js +6 -0
  1137. vibe_surf/backend/frontend/assets/move-up-right-BAOhHbBw.js +6 -0
  1138. vibe_surf/backend/frontend/assets/move-vertical-BxWj9bDO.js +6 -0
  1139. vibe_surf/backend/frontend/assets/music-2-DQL5lOH_.js +6 -0
  1140. vibe_surf/backend/frontend/assets/music-3-wkxjpooD.js +6 -0
  1141. vibe_surf/backend/frontend/assets/music-4-CgUN2PUO.js +6 -0
  1142. vibe_surf/backend/frontend/assets/music-YxXwq9fN.js +6 -0
  1143. vibe_surf/backend/frontend/assets/navigation-2-Ba4Z-jSq.js +6 -0
  1144. vibe_surf/backend/frontend/assets/navigation-2-off-C_LfeWvW.js +6 -0
  1145. vibe_surf/backend/frontend/assets/navigation-BEChOEsi.js +6 -0
  1146. vibe_surf/backend/frontend/assets/navigation-off-BehyOyE3.js +6 -0
  1147. vibe_surf/backend/frontend/assets/network-CwJLOq3T.js +6 -0
  1148. vibe_surf/backend/frontend/assets/newspaper-ELrHeGRI.js +6 -0
  1149. vibe_surf/backend/frontend/assets/nfc-B_3XFb34.js +6 -0
  1150. vibe_surf/backend/frontend/assets/non-binary-BsgU9v43.js +6 -0
  1151. vibe_surf/backend/frontend/assets/notebook-j-nq3SkT.js +6 -0
  1152. vibe_surf/backend/frontend/assets/notebook-pen-D9-IPVfi.js +6 -0
  1153. vibe_surf/backend/frontend/assets/notebook-tabs-B8RN5vFZ.js +6 -0
  1154. vibe_surf/backend/frontend/assets/notebook-text-9VvE4wV2.js +6 -0
  1155. vibe_surf/backend/frontend/assets/notepad-text-CtRuOWM5.js +6 -0
  1156. vibe_surf/backend/frontend/assets/notepad-text-dashed-BKDJS1oq.js +6 -0
  1157. vibe_surf/backend/frontend/assets/nut-MLKrgO4r.js +6 -0
  1158. vibe_surf/backend/frontend/assets/nut-off-CX5f1ggv.js +6 -0
  1159. vibe_surf/backend/frontend/assets/octagon-Dm5tdLTK.js +6 -0
  1160. vibe_surf/backend/frontend/assets/octagon-alert-THvRb-wV.js +6 -0
  1161. vibe_surf/backend/frontend/assets/octagon-minus-BIN-9swI.js +6 -0
  1162. vibe_surf/backend/frontend/assets/octagon-pause-BvRAlpaV.js +6 -0
  1163. vibe_surf/backend/frontend/assets/octagon-x-DeRG_Ls0.js +6 -0
  1164. vibe_surf/backend/frontend/assets/omega-CVAxeKBK.js +6 -0
  1165. vibe_surf/backend/frontend/assets/option-14pftykg.js +6 -0
  1166. vibe_surf/backend/frontend/assets/orbit-CfewrZaI.js +6 -0
  1167. vibe_surf/backend/frontend/assets/origami-BT1VriUJ.js +6 -0
  1168. vibe_surf/backend/frontend/assets/package-2-D11kpXq5.js +6 -0
  1169. vibe_surf/backend/frontend/assets/package-BegS59es.js +6 -0
  1170. vibe_surf/backend/frontend/assets/package-check-DOLq4x6S.js +6 -0
  1171. vibe_surf/backend/frontend/assets/package-minus-BFgP752B.js +6 -0
  1172. vibe_surf/backend/frontend/assets/package-open-D2nk_ytU.js +6 -0
  1173. vibe_surf/backend/frontend/assets/package-plus-Va8EoLSt.js +6 -0
  1174. vibe_surf/backend/frontend/assets/package-search-cGv3F3Yi.js +6 -0
  1175. vibe_surf/backend/frontend/assets/package-x-BFCKCrAT.js +6 -0
  1176. vibe_surf/backend/frontend/assets/paint-bucket-C1nh-Go_.js +6 -0
  1177. vibe_surf/backend/frontend/assets/paint-roller-C9vy4fuD.js +6 -0
  1178. vibe_surf/backend/frontend/assets/paintbrush-Bo4L8Hqc.js +6 -0
  1179. vibe_surf/backend/frontend/assets/paintbrush-vertical-DqUyy2UU.js +6 -0
  1180. vibe_surf/backend/frontend/assets/palette-DddGrkXJ.js +6 -0
  1181. vibe_surf/backend/frontend/assets/panel-bottom-DPSx8I79.js +6 -0
  1182. vibe_surf/backend/frontend/assets/panel-bottom-close-D0SBNVCx.js +6 -0
  1183. vibe_surf/backend/frontend/assets/panel-bottom-dashed-CR6jKyB5.js +6 -0
  1184. vibe_surf/backend/frontend/assets/panel-bottom-open-BA8uHJ1f.js +6 -0
  1185. vibe_surf/backend/frontend/assets/panel-left-close-HWzVGhEN.js +6 -0
  1186. vibe_surf/backend/frontend/assets/panel-left-dashed-C8CvEMus.js +6 -0
  1187. vibe_surf/backend/frontend/assets/panel-left-open-DZtgeJky.js +6 -0
  1188. vibe_surf/backend/frontend/assets/panel-right-BIGpcNCD.js +6 -0
  1189. vibe_surf/backend/frontend/assets/panel-right-close-D6I6nB-8.js +6 -0
  1190. vibe_surf/backend/frontend/assets/panel-right-dashed-Dt-tZyfJ.js +6 -0
  1191. vibe_surf/backend/frontend/assets/panel-right-open-Cso_cmr4.js +6 -0
  1192. vibe_surf/backend/frontend/assets/panel-top-DxQozLLO.js +6 -0
  1193. vibe_surf/backend/frontend/assets/panel-top-close-21p_Iy4Q.js +6 -0
  1194. vibe_surf/backend/frontend/assets/panel-top-dashed-BLLvCUcW.js +6 -0
  1195. vibe_surf/backend/frontend/assets/panel-top-open-DOpjqeXN.js +6 -0
  1196. vibe_surf/backend/frontend/assets/panels-left-bottom-Dgc_Zml-.js +6 -0
  1197. vibe_surf/backend/frontend/assets/panels-right-bottom-DBl33v5J.js +6 -0
  1198. vibe_surf/backend/frontend/assets/panels-top-left-Bh9Km2t_.js +6 -0
  1199. vibe_surf/backend/frontend/assets/paperclip-DwNdWjNs.js +6 -0
  1200. vibe_surf/backend/frontend/assets/parentheses-Bv3x0v0d.js +6 -0
  1201. vibe_surf/backend/frontend/assets/parking-meter-CaAUYem8.js +6 -0
  1202. vibe_surf/backend/frontend/assets/party-popper-o676ndwa.js +6 -0
  1203. vibe_surf/backend/frontend/assets/pause-DofdcFyf.js +6 -0
  1204. vibe_surf/backend/frontend/assets/paw-print-CsCZTGwP.js +6 -0
  1205. vibe_surf/backend/frontend/assets/pc-case-ChHKP8Bs.js +6 -0
  1206. vibe_surf/backend/frontend/assets/pen-BJrA5W2j.js +6 -0
  1207. vibe_surf/backend/frontend/assets/pen-line-Cn_-SNuM.js +6 -0
  1208. vibe_surf/backend/frontend/assets/pen-off-vpS9creP.js +6 -0
  1209. vibe_surf/backend/frontend/assets/pen-tool-BHi1klDG.js +6 -0
  1210. vibe_surf/backend/frontend/assets/pencil-Wem_VEVg.js +6 -0
  1211. vibe_surf/backend/frontend/assets/pencil-line-CpG7egII.js +6 -0
  1212. vibe_surf/backend/frontend/assets/pencil-off-DNbfjOTs.js +6 -0
  1213. vibe_surf/backend/frontend/assets/pencil-ruler-BQdaeQqI.js +6 -0
  1214. vibe_surf/backend/frontend/assets/pentagon-BNe4mDhm.js +6 -0
  1215. vibe_surf/backend/frontend/assets/percent-CDhexNCT.js +6 -0
  1216. vibe_surf/backend/frontend/assets/person-standing-DxYpZiGV.js +6 -0
  1217. vibe_surf/backend/frontend/assets/philippine-peso-B7FAFSBd.js +6 -0
  1218. vibe_surf/backend/frontend/assets/phone-CTiWkAUx.js +6 -0
  1219. vibe_surf/backend/frontend/assets/phone-call-CWavZZ8W.js +6 -0
  1220. vibe_surf/backend/frontend/assets/phone-forwarded-CLaEebEE.js +6 -0
  1221. vibe_surf/backend/frontend/assets/phone-incoming-Cv2OCBfT.js +6 -0
  1222. vibe_surf/backend/frontend/assets/phone-missed-DNNjfxVz.js +6 -0
  1223. vibe_surf/backend/frontend/assets/phone-off-ClVQWi0g.js +6 -0
  1224. vibe_surf/backend/frontend/assets/phone-outgoing-CY2TxKXl.js +6 -0
  1225. vibe_surf/backend/frontend/assets/pi-DNqBWxfj.js +6 -0
  1226. vibe_surf/backend/frontend/assets/piano-MiPm47Ma.js +6 -0
  1227. vibe_surf/backend/frontend/assets/pickaxe-YqkOBnCJ.js +6 -0
  1228. vibe_surf/backend/frontend/assets/picture-in-picture-2-BIKggEXM.js +6 -0
  1229. vibe_surf/backend/frontend/assets/picture-in-picture-QAMxgJMO.js +6 -0
  1230. vibe_surf/backend/frontend/assets/piggy-bank-DVE6nzj5.js +6 -0
  1231. vibe_surf/backend/frontend/assets/pilcrow-CIhZWZVN.js +6 -0
  1232. vibe_surf/backend/frontend/assets/pilcrow-left-Ca9XTMpA.js +6 -0
  1233. vibe_surf/backend/frontend/assets/pilcrow-right-CLd68jMN.js +6 -0
  1234. vibe_surf/backend/frontend/assets/pill-CBiMEkPj.js +6 -0
  1235. vibe_surf/backend/frontend/assets/pill-bottle-CJ3pejac.js +6 -0
  1236. vibe_surf/backend/frontend/assets/pin-Oo2Sku7X.js +6 -0
  1237. vibe_surf/backend/frontend/assets/pin-off-DG48ZMV_.js +6 -0
  1238. vibe_surf/backend/frontend/assets/pipette-BzvHUOUt.js +6 -0
  1239. vibe_surf/backend/frontend/assets/pizza-B5z39oy-.js +6 -0
  1240. vibe_surf/backend/frontend/assets/plane-eU326jPg.js +6 -0
  1241. vibe_surf/backend/frontend/assets/plane-landing-gxcqSKOA.js +6 -0
  1242. vibe_surf/backend/frontend/assets/plane-takeoff-CFmuOAfX.js +6 -0
  1243. vibe_surf/backend/frontend/assets/play-CaCbaWdR.js +6 -0
  1244. vibe_surf/backend/frontend/assets/plug-2-CaihODHc.js +6 -0
  1245. vibe_surf/backend/frontend/assets/plug-DrN0weqI.js +6 -0
  1246. vibe_surf/backend/frontend/assets/plug-zap-BT2sgwQy.js +6 -0
  1247. vibe_surf/backend/frontend/assets/pocket-DNEPJJmg.js +6 -0
  1248. vibe_surf/backend/frontend/assets/pocket-knife-1CI1aqMD.js +6 -0
  1249. vibe_surf/backend/frontend/assets/podcast-BsGsWn3h.js +6 -0
  1250. vibe_surf/backend/frontend/assets/pointer-B8T5gv-x.js +6 -0
  1251. vibe_surf/backend/frontend/assets/pointer-off-C2DXzg5S.js +6 -0
  1252. vibe_surf/backend/frontend/assets/popcorn-Bi10K8Em.js +6 -0
  1253. vibe_surf/backend/frontend/assets/popsicle-CxLa9bz8.js +6 -0
  1254. vibe_surf/backend/frontend/assets/pound-sterling-BFXPyyYU.js +6 -0
  1255. vibe_surf/backend/frontend/assets/power-BmqAlXVz.js +6 -0
  1256. vibe_surf/backend/frontend/assets/power-off-CT70n2O0.js +6 -0
  1257. vibe_surf/backend/frontend/assets/presentation-DVhaCvt0.js +6 -0
  1258. vibe_surf/backend/frontend/assets/printer-D7NgKQZm.js +6 -0
  1259. vibe_surf/backend/frontend/assets/printer-check-BYDiSYD3.js +6 -0
  1260. vibe_surf/backend/frontend/assets/projector-BFMEAUGw.js +6 -0
  1261. vibe_surf/backend/frontend/assets/proportions-CUypjhWs.js +6 -0
  1262. vibe_surf/backend/frontend/assets/puzzle-lPcRsrCP.js +6 -0
  1263. vibe_surf/backend/frontend/assets/pyramid-bX_YtvHu.js +6 -0
  1264. vibe_surf/backend/frontend/assets/qr-code-CMBq06CH.js +6 -0
  1265. vibe_surf/backend/frontend/assets/quote-BkFwr2wo.js +6 -0
  1266. vibe_surf/backend/frontend/assets/rabbit-CEyfAR1t.js +6 -0
  1267. vibe_surf/backend/frontend/assets/radar-bMcLs_bP.js +6 -0
  1268. vibe_surf/backend/frontend/assets/radiation-NMlxufHZ.js +6 -0
  1269. vibe_surf/backend/frontend/assets/radical-C3CE5pot.js +6 -0
  1270. vibe_surf/backend/frontend/assets/radio-DQMhSWLz.js +6 -0
  1271. vibe_surf/backend/frontend/assets/radio-receiver-Cwtiayz1.js +6 -0
  1272. vibe_surf/backend/frontend/assets/radio-tower-ngCBBDuR.js +6 -0
  1273. vibe_surf/backend/frontend/assets/radius-CB1vpl4-.js +6 -0
  1274. vibe_surf/backend/frontend/assets/rail-symbol-CWT8jn79.js +6 -0
  1275. vibe_surf/backend/frontend/assets/rainbow-eG2Z6xdv.js +6 -0
  1276. vibe_surf/backend/frontend/assets/rat-CjjmSgkE.js +6 -0
  1277. vibe_surf/backend/frontend/assets/ratio-Ck9TZd6C.js +6 -0
  1278. vibe_surf/backend/frontend/assets/receipt-QzIALZKN.js +6 -0
  1279. vibe_surf/backend/frontend/assets/receipt-cent-wAd12yx1.js +6 -0
  1280. vibe_surf/backend/frontend/assets/receipt-euro-BG_rS29_.js +6 -0
  1281. vibe_surf/backend/frontend/assets/receipt-indian-rupee-DlF7wlqh.js +6 -0
  1282. vibe_surf/backend/frontend/assets/receipt-japanese-yen-GDNnE_Bl.js +6 -0
  1283. vibe_surf/backend/frontend/assets/receipt-pound-sterling-CczRTrHu.js +6 -0
  1284. vibe_surf/backend/frontend/assets/receipt-russian-ruble-CP8qhoZV.js +6 -0
  1285. vibe_surf/backend/frontend/assets/receipt-swiss-franc-B1FjnBVT.js +6 -0
  1286. vibe_surf/backend/frontend/assets/receipt-text-Df0EAqK2.js +6 -0
  1287. vibe_surf/backend/frontend/assets/rectangle-ellipsis-BeZ5b8q2.js +6 -0
  1288. vibe_surf/backend/frontend/assets/rectangle-goggles-B0pWs5f6.js +6 -0
  1289. vibe_surf/backend/frontend/assets/rectangle-horizontal-5D8nW5zN.js +6 -0
  1290. vibe_surf/backend/frontend/assets/rectangle-vertical-D6iXTP5O.js +6 -0
  1291. vibe_surf/backend/frontend/assets/recycle-cePWNqck.js +6 -0
  1292. vibe_surf/backend/frontend/assets/redo-2-DflPUgVL.js +6 -0
  1293. vibe_surf/backend/frontend/assets/redo-C8hJqzAq.js +6 -0
  1294. vibe_surf/backend/frontend/assets/redo-dot-JyZC910i.js +6 -0
  1295. vibe_surf/backend/frontend/assets/refresh-ccw-QGOuU93p.js +6 -0
  1296. vibe_surf/backend/frontend/assets/refresh-ccw-dot-BVfOSZg8.js +6 -0
  1297. vibe_surf/backend/frontend/assets/refresh-cw-DttAl3PC.js +6 -0
  1298. vibe_surf/backend/frontend/assets/refresh-cw-off-1m7CD9nm.js +6 -0
  1299. vibe_surf/backend/frontend/assets/refrigerator-BGk6q_hL.js +6 -0
  1300. vibe_surf/backend/frontend/assets/regex-C-txrNUs.js +6 -0
  1301. vibe_surf/backend/frontend/assets/remove-formatting-CVxREpGZ.js +6 -0
  1302. vibe_surf/backend/frontend/assets/repeat-1-ChFj2WK-.js +6 -0
  1303. vibe_surf/backend/frontend/assets/repeat-2-ViBvoa4W.js +6 -0
  1304. vibe_surf/backend/frontend/assets/repeat-GoYG4svo.js +6 -0
  1305. vibe_surf/backend/frontend/assets/replace-GFcv_X_V.js +6 -0
  1306. vibe_surf/backend/frontend/assets/replace-all-zAC7UUp9.js +6 -0
  1307. vibe_surf/backend/frontend/assets/reply-C2IH8Yvz.js +6 -0
  1308. vibe_surf/backend/frontend/assets/reply-all-CXYDFlBb.js +6 -0
  1309. vibe_surf/backend/frontend/assets/rewind-Bmv_DtI_.js +6 -0
  1310. vibe_surf/backend/frontend/assets/ribbon-B4MeTNUc.js +6 -0
  1311. vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
  1312. vibe_surf/backend/frontend/assets/rocket-Ch2Sc43k.js +6 -0
  1313. vibe_surf/backend/frontend/assets/rocking-chair-Pcx0Ex8j.js +6 -0
  1314. vibe_surf/backend/frontend/assets/roller-coaster-DpdZyHU4.js +6 -0
  1315. vibe_surf/backend/frontend/assets/rotate-3d-CAlCCDrS.js +6 -0
  1316. vibe_surf/backend/frontend/assets/rotate-ccw-Dl5IeMD0.js +6 -0
  1317. vibe_surf/backend/frontend/assets/rotate-ccw-key-CbcFcY_X.js +6 -0
  1318. vibe_surf/backend/frontend/assets/rotate-ccw-square-B6dXtMGF.js +6 -0
  1319. vibe_surf/backend/frontend/assets/rotate-cw-D9QBD3w1.js +6 -0
  1320. vibe_surf/backend/frontend/assets/rotate-cw-square-BTb_LCYt.js +6 -0
  1321. vibe_surf/backend/frontend/assets/route-BY8OMdE6.js +6 -0
  1322. vibe_surf/backend/frontend/assets/route-off-DBPZSjij.js +6 -0
  1323. vibe_surf/backend/frontend/assets/router-Cj5pK344.js +6 -0
  1324. vibe_surf/backend/frontend/assets/rows-2-DQikFZXW.js +6 -0
  1325. vibe_surf/backend/frontend/assets/rows-3-CgpwLjBs.js +6 -0
  1326. vibe_surf/backend/frontend/assets/rows-4-DHLpJgeW.js +6 -0
  1327. vibe_surf/backend/frontend/assets/rss-B2J7l-Sb.js +6 -0
  1328. vibe_surf/backend/frontend/assets/ruler-D-fe4o6e.js +6 -0
  1329. vibe_surf/backend/frontend/assets/ruler-dimension-line-COrwkuXi.js +6 -0
  1330. vibe_surf/backend/frontend/assets/russian-ruble-Bk9zdT2J.js +6 -0
  1331. vibe_surf/backend/frontend/assets/sailboat-DMPxVbdm.js +6 -0
  1332. vibe_surf/backend/frontend/assets/salad-D20azVGZ.js +6 -0
  1333. vibe_surf/backend/frontend/assets/sandwich-Z_d-MQ5t.js +6 -0
  1334. vibe_surf/backend/frontend/assets/satellite-7zgZRaOF.js +6 -0
  1335. vibe_surf/backend/frontend/assets/satellite-dish-Cy6FmD_T.js +6 -0
  1336. vibe_surf/backend/frontend/assets/saudi-riyal-C9ZvxnL2.js +6 -0
  1337. vibe_surf/backend/frontend/assets/save-LkAkHS7W.js +6 -0
  1338. vibe_surf/backend/frontend/assets/save-all-D_-zYl71.js +6 -0
  1339. vibe_surf/backend/frontend/assets/save-off-B0KWQYIj.js +6 -0
  1340. vibe_surf/backend/frontend/assets/scale-3d-FnesJ3yp.js +6 -0
  1341. vibe_surf/backend/frontend/assets/scale-CfDNIDpX.js +6 -0
  1342. vibe_surf/backend/frontend/assets/scaling-D7_wGXPp.js +6 -0
  1343. vibe_surf/backend/frontend/assets/scan-CXtftKWt.js +6 -0
  1344. vibe_surf/backend/frontend/assets/scan-barcode-DMzKInA0.js +6 -0
  1345. vibe_surf/backend/frontend/assets/scan-eye-BNOyXXj8.js +6 -0
  1346. vibe_surf/backend/frontend/assets/scan-face-wv0t4zeq.js +6 -0
  1347. vibe_surf/backend/frontend/assets/scan-heart-BeBWR3xV.js +6 -0
  1348. vibe_surf/backend/frontend/assets/scan-line-CvQpOukb.js +6 -0
  1349. vibe_surf/backend/frontend/assets/scan-qr-code-BQ-Oqt9e.js +6 -0
  1350. vibe_surf/backend/frontend/assets/scan-search-DeDxyjP7.js +6 -0
  1351. vibe_surf/backend/frontend/assets/scan-text-Du5B26Lp.js +6 -0
  1352. vibe_surf/backend/frontend/assets/school-XPbcFxvs.js +6 -0
  1353. vibe_surf/backend/frontend/assets/scissors-C82MxyXF.js +6 -0
  1354. vibe_surf/backend/frontend/assets/scissors-line-dashed-BiIj8ZEF.js +6 -0
  1355. vibe_surf/backend/frontend/assets/screen-share-4rpy_bSP.js +6 -0
  1356. vibe_surf/backend/frontend/assets/screen-share-off-DisAsCVo.js +6 -0
  1357. vibe_surf/backend/frontend/assets/scroll-D3FgdMu9.js +6 -0
  1358. vibe_surf/backend/frontend/assets/scroll-text-BolUgv8k.js +6 -0
  1359. vibe_surf/backend/frontend/assets/search-check-BqDsbYzT.js +6 -0
  1360. vibe_surf/backend/frontend/assets/search-code-BAngOAWT.js +6 -0
  1361. vibe_surf/backend/frontend/assets/search-slash-DGpGjVDh.js +6 -0
  1362. vibe_surf/backend/frontend/assets/search-x-hbEhC-Ks.js +6 -0
  1363. vibe_surf/backend/frontend/assets/section-CZdebDRa.js +6 -0
  1364. vibe_surf/backend/frontend/assets/send-BY6RRvoS.js +6 -0
  1365. vibe_surf/backend/frontend/assets/send-horizontal-ByJf1GwO.js +6 -0
  1366. vibe_surf/backend/frontend/assets/send-to-back-CqeJ0x7-.js +6 -0
  1367. vibe_surf/backend/frontend/assets/separator-horizontal-CyHVE869.js +6 -0
  1368. vibe_surf/backend/frontend/assets/separator-vertical-CHEXvAuG.js +6 -0
  1369. vibe_surf/backend/frontend/assets/server-DPj6-qpq.js +6 -0
  1370. vibe_surf/backend/frontend/assets/server-cog-Dc-mlMR8.js +6 -0
  1371. vibe_surf/backend/frontend/assets/server-crash-CXsISMNW.js +6 -0
  1372. vibe_surf/backend/frontend/assets/server-off-Y_lfL7-w.js +6 -0
  1373. vibe_surf/backend/frontend/assets/settings-2-DZ9wvd5i.js +6 -0
  1374. vibe_surf/backend/frontend/assets/settings-DO_W46zj.js +6 -0
  1375. vibe_surf/backend/frontend/assets/shapes-CIsUods8.js +6 -0
  1376. vibe_surf/backend/frontend/assets/share-0y8A7A5E.js +6 -0
  1377. vibe_surf/backend/frontend/assets/share-2-TSy7pnEx.js +6 -0
  1378. vibe_surf/backend/frontend/assets/sheet-DagiH4ve.js +6 -0
  1379. vibe_surf/backend/frontend/assets/shell-4uq5QK2w.js +6 -0
  1380. vibe_surf/backend/frontend/assets/shield-DSmxKeAX.js +6 -0
  1381. vibe_surf/backend/frontend/assets/shield-alert-2BHG6ofb.js +6 -0
  1382. vibe_surf/backend/frontend/assets/shield-ban-BcQOFFCO.js +6 -0
  1383. vibe_surf/backend/frontend/assets/shield-check-IssT1y70.js +6 -0
  1384. vibe_surf/backend/frontend/assets/shield-ellipsis-B_k2GJZe.js +6 -0
  1385. vibe_surf/backend/frontend/assets/shield-half-Ce9mZY66.js +6 -0
  1386. vibe_surf/backend/frontend/assets/shield-minus-Cm9SRYz3.js +6 -0
  1387. vibe_surf/backend/frontend/assets/shield-off-Di-Txcsi.js +6 -0
  1388. vibe_surf/backend/frontend/assets/shield-plus-Cbd8tnos.js +6 -0
  1389. vibe_surf/backend/frontend/assets/shield-question-5hf3zAb8.js +6 -0
  1390. vibe_surf/backend/frontend/assets/shield-user-D2XuthCx.js +6 -0
  1391. vibe_surf/backend/frontend/assets/shield-x-BTJiGLGc.js +6 -0
  1392. vibe_surf/backend/frontend/assets/ship-DkhgC4pB.js +6 -0
  1393. vibe_surf/backend/frontend/assets/ship-wheel-C-7_Y35l.js +6 -0
  1394. vibe_surf/backend/frontend/assets/shirt-vuhl9SGI.js +6 -0
  1395. vibe_surf/backend/frontend/assets/shopping-bag-DvQ2pPfQ.js +6 -0
  1396. vibe_surf/backend/frontend/assets/shopping-basket-D9s56Xw7.js +6 -0
  1397. vibe_surf/backend/frontend/assets/shopping-cart-ZmbJuTVy.js +6 -0
  1398. vibe_surf/backend/frontend/assets/shovel-L2fbM_rD.js +6 -0
  1399. vibe_surf/backend/frontend/assets/shower-head-DE9aHmtW.js +6 -0
  1400. vibe_surf/backend/frontend/assets/shredder-DadDP-UJ.js +6 -0
  1401. vibe_surf/backend/frontend/assets/shrimp-DycqoQZ3.js +6 -0
  1402. vibe_surf/backend/frontend/assets/shrink-B8aylxOx.js +6 -0
  1403. vibe_surf/backend/frontend/assets/shrub-DF1hbXW3.js +6 -0
  1404. vibe_surf/backend/frontend/assets/shuffle-BuIBx3Jr.js +6 -0
  1405. vibe_surf/backend/frontend/assets/sigma-Do2EOGrK.js +6 -0
  1406. vibe_surf/backend/frontend/assets/signal-D4HUxctG.js +6 -0
  1407. vibe_surf/backend/frontend/assets/signal-high-D4XjnPRT.js +6 -0
  1408. vibe_surf/backend/frontend/assets/signal-low-CbpCiGEn.js +6 -0
  1409. vibe_surf/backend/frontend/assets/signal-medium-DenP3lw7.js +6 -0
  1410. vibe_surf/backend/frontend/assets/signal-zero-CHgcs844.js +6 -0
  1411. vibe_surf/backend/frontend/assets/signature-DK8I0wlU.js +6 -0
  1412. vibe_surf/backend/frontend/assets/signpost-1ES-i9fp.js +6 -0
  1413. vibe_surf/backend/frontend/assets/signpost-big-BSozSaes.js +6 -0
  1414. vibe_surf/backend/frontend/assets/siren-wlABVP_H.js +6 -0
  1415. vibe_surf/backend/frontend/assets/skip-back-Bu_s_NAd.js +6 -0
  1416. vibe_surf/backend/frontend/assets/skip-forward-B_5w_2GT.js +6 -0
  1417. vibe_surf/backend/frontend/assets/skull-BEu1YCxD.js +6 -0
  1418. vibe_surf/backend/frontend/assets/slack-D9649ln8.js +6 -0
  1419. vibe_surf/backend/frontend/assets/slash-DojcavQ9.js +6 -0
  1420. vibe_surf/backend/frontend/assets/slice-CRmKxhnX.js +6 -0
  1421. vibe_surf/backend/frontend/assets/sliders-horizontal-B5g_t8uv.js +6 -0
  1422. vibe_surf/backend/frontend/assets/sliders-vertical-CLBL1buf.js +6 -0
  1423. vibe_surf/backend/frontend/assets/smartphone-D-ep_7qQ.js +6 -0
  1424. vibe_surf/backend/frontend/assets/smartphone-charging-CRPRIfJL.js +6 -0
  1425. vibe_surf/backend/frontend/assets/smartphone-nfc-CmXWPjB7.js +6 -0
  1426. vibe_surf/backend/frontend/assets/smile-C8NQBJ3w.js +6 -0
  1427. vibe_surf/backend/frontend/assets/smile-plus-BXiCkryt.js +6 -0
  1428. vibe_surf/backend/frontend/assets/snail-C4InLnJK.js +6 -0
  1429. vibe_surf/backend/frontend/assets/snowflake-CkOWmqpH.js +6 -0
  1430. vibe_surf/backend/frontend/assets/sofa-C5SFUETc.js +6 -0
  1431. vibe_surf/backend/frontend/assets/soup-BPK9i9Mq.js +6 -0
  1432. vibe_surf/backend/frontend/assets/space-B_AibqtW.js +6 -0
  1433. vibe_surf/backend/frontend/assets/spade-DOYQwKmE.js +6 -0
  1434. vibe_surf/backend/frontend/assets/sparkle-Bgy0TYRq.js +6 -0
  1435. vibe_surf/backend/frontend/assets/sparkles-COXnCZbi.js +6 -0
  1436. vibe_surf/backend/frontend/assets/speaker-CaUol58E.js +6 -0
  1437. vibe_surf/backend/frontend/assets/speech-SU2fqOX1.js +6 -0
  1438. vibe_surf/backend/frontend/assets/spell-check-2-C0X3GG0W.js +6 -0
  1439. vibe_surf/backend/frontend/assets/spell-check-BwnI8rNb.js +6 -0
  1440. vibe_surf/backend/frontend/assets/spline-ByNmiFVd.js +6 -0
  1441. vibe_surf/backend/frontend/assets/spline-pointer-B6jrA3VA.js +6 -0
  1442. vibe_surf/backend/frontend/assets/split-uo1Igb0N.js +6 -0
  1443. vibe_surf/backend/frontend/assets/spray-can-D37CFDNB.js +6 -0
  1444. vibe_surf/backend/frontend/assets/sprout-B25Lx6nK.js +6 -0
  1445. vibe_surf/backend/frontend/assets/square-KfK1ngG3.js +6 -0
  1446. vibe_surf/backend/frontend/assets/square-activity-BGQluYc5.js +6 -0
  1447. vibe_surf/backend/frontend/assets/square-arrow-down-CqlT37VO.js +6 -0
  1448. vibe_surf/backend/frontend/assets/square-arrow-down-left-CR2Go22d.js +6 -0
  1449. vibe_surf/backend/frontend/assets/square-arrow-down-right-rGAHLIaS.js +6 -0
  1450. vibe_surf/backend/frontend/assets/square-arrow-left-CvWu8_9d.js +6 -0
  1451. vibe_surf/backend/frontend/assets/square-arrow-out-down-left-K0v7hlb0.js +6 -0
  1452. vibe_surf/backend/frontend/assets/square-arrow-out-down-right-f74Yq8Hb.js +6 -0
  1453. vibe_surf/backend/frontend/assets/square-arrow-out-up-left-CdBSNScA.js +6 -0
  1454. vibe_surf/backend/frontend/assets/square-arrow-out-up-right-8PNP-37C.js +6 -0
  1455. vibe_surf/backend/frontend/assets/square-arrow-right-DZ3-0COG.js +6 -0
  1456. vibe_surf/backend/frontend/assets/square-arrow-up-CefwAldY.js +6 -0
  1457. vibe_surf/backend/frontend/assets/square-arrow-up-left-Dt6pY6y2.js +6 -0
  1458. vibe_surf/backend/frontend/assets/square-arrow-up-right-C-bPYXZE.js +6 -0
  1459. vibe_surf/backend/frontend/assets/square-asterisk-BIEu0Wq-.js +6 -0
  1460. vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-DFln2i7A.js +6 -0
  1461. vibe_surf/backend/frontend/assets/square-chart-gantt-VCoGr7j5.js +6 -0
  1462. vibe_surf/backend/frontend/assets/square-check-big-DdTm65g2.js +6 -0
  1463. vibe_surf/backend/frontend/assets/square-check-tJdFPLB4.js +6 -0
  1464. vibe_surf/backend/frontend/assets/square-chevron-down-DV0aFQxC.js +6 -0
  1465. vibe_surf/backend/frontend/assets/square-chevron-left-CdGd5MQB.js +6 -0
  1466. vibe_surf/backend/frontend/assets/square-chevron-right-D_aqBwe_.js +6 -0
  1467. vibe_surf/backend/frontend/assets/square-chevron-up-DBzeLhdp.js +6 -0
  1468. vibe_surf/backend/frontend/assets/square-code-DtSsDKtH.js +6 -0
  1469. vibe_surf/backend/frontend/assets/square-dashed-DSG0Ash0.js +6 -0
  1470. vibe_surf/backend/frontend/assets/square-dashed-bottom-BrkR2d57.js +6 -0
  1471. vibe_surf/backend/frontend/assets/square-dashed-bottom-code-CMTH1TbL.js +6 -0
  1472. vibe_surf/backend/frontend/assets/square-dashed-kanban-961FMGlN.js +6 -0
  1473. vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-BWcK5KqH.js +6 -0
  1474. vibe_surf/backend/frontend/assets/square-divide-B8EfzsLW.js +6 -0
  1475. vibe_surf/backend/frontend/assets/square-dot-CFXkGNxl.js +6 -0
  1476. vibe_surf/backend/frontend/assets/square-equal-DNzUS5Xu.js +6 -0
  1477. vibe_surf/backend/frontend/assets/square-function-mVVWlGqH.js +6 -0
  1478. vibe_surf/backend/frontend/assets/square-kanban-gbxgvYAs.js +6 -0
  1479. vibe_surf/backend/frontend/assets/square-library-LB-mLfoV.js +6 -0
  1480. vibe_surf/backend/frontend/assets/square-m-DR4vWmvF.js +6 -0
  1481. vibe_surf/backend/frontend/assets/square-menu-wrD_3b1X.js +6 -0
  1482. vibe_surf/backend/frontend/assets/square-minus-C8LvWB0i.js +6 -0
  1483. vibe_surf/backend/frontend/assets/square-mouse-pointer-BWIOG0ej.js +6 -0
  1484. vibe_surf/backend/frontend/assets/square-parking-Cwf1smWS.js +6 -0
  1485. vibe_surf/backend/frontend/assets/square-parking-off-B7fLGIII.js +6 -0
  1486. vibe_surf/backend/frontend/assets/square-pen-D-KRx-pf.js +6 -0
  1487. vibe_surf/backend/frontend/assets/square-percent-DEPHZN1U.js +6 -0
  1488. vibe_surf/backend/frontend/assets/square-pi-D3ZoGA8y.js +6 -0
  1489. vibe_surf/backend/frontend/assets/square-pilcrow-CU7h7mYC.js +6 -0
  1490. vibe_surf/backend/frontend/assets/square-play-BJID6hok.js +6 -0
  1491. vibe_surf/backend/frontend/assets/square-plus-B_MofyMZ.js +6 -0
  1492. vibe_surf/backend/frontend/assets/square-power-CnNfm3SK.js +6 -0
  1493. vibe_surf/backend/frontend/assets/square-radical-Bb91fkyO.js +6 -0
  1494. vibe_surf/backend/frontend/assets/square-round-corner-DSNwBkrZ.js +6 -0
  1495. vibe_surf/backend/frontend/assets/square-scissors-Q-Hew_gd.js +6 -0
  1496. vibe_surf/backend/frontend/assets/square-sigma-Dvqecf-2.js +6 -0
  1497. vibe_surf/backend/frontend/assets/square-slash-TFALqbOX.js +6 -0
  1498. vibe_surf/backend/frontend/assets/square-split-horizontal-CbPy5mPi.js +6 -0
  1499. vibe_surf/backend/frontend/assets/square-split-vertical-CwEHVK6t.js +6 -0
  1500. vibe_surf/backend/frontend/assets/square-square-BgBRe8Sy.js +6 -0
  1501. vibe_surf/backend/frontend/assets/square-stack-CQOObCB-.js +6 -0
  1502. vibe_surf/backend/frontend/assets/square-terminal-DTCYsALs.js +6 -0
  1503. vibe_surf/backend/frontend/assets/square-user-BtoHpGAf.js +6 -0
  1504. vibe_surf/backend/frontend/assets/square-user-round-DYhk3lBR.js +6 -0
  1505. vibe_surf/backend/frontend/assets/square-x-BxVfvmxy.js +6 -0
  1506. vibe_surf/backend/frontend/assets/squares-exclude-xFnGRjrW.js +6 -0
  1507. vibe_surf/backend/frontend/assets/squares-intersect-CJ3onkar.js +6 -0
  1508. vibe_surf/backend/frontend/assets/squares-subtract-DHkmEhbq.js +6 -0
  1509. vibe_surf/backend/frontend/assets/squares-unite-VTPchsN_.js +6 -0
  1510. vibe_surf/backend/frontend/assets/squircle-BeRgB4CX.js +6 -0
  1511. vibe_surf/backend/frontend/assets/squirrel-CXpCofHU.js +6 -0
  1512. vibe_surf/backend/frontend/assets/stamp-CBKYJLk-.js +6 -0
  1513. vibe_surf/backend/frontend/assets/star-g394tQMa.js +6 -0
  1514. vibe_surf/backend/frontend/assets/star-half-DMNuOefd.js +6 -0
  1515. vibe_surf/backend/frontend/assets/star-off-D_I13W97.js +6 -0
  1516. vibe_surf/backend/frontend/assets/step-back-Ba3vvS1b.js +6 -0
  1517. vibe_surf/backend/frontend/assets/step-forward-tf6_dmSk.js +6 -0
  1518. vibe_surf/backend/frontend/assets/stethoscope-kEGj4Hk2.js +6 -0
  1519. vibe_surf/backend/frontend/assets/sticker-BMrXBzQi.js +6 -0
  1520. vibe_surf/backend/frontend/assets/sticky-note-B6_-_Vk7.js +6 -0
  1521. vibe_surf/backend/frontend/assets/store-ClCC8VsS.js +6 -0
  1522. vibe_surf/backend/frontend/assets/stretch-horizontal-Dfdn4d_v.js +6 -0
  1523. vibe_surf/backend/frontend/assets/stretch-vertical-G91F9Wl8.js +6 -0
  1524. vibe_surf/backend/frontend/assets/strikethrough-DQ1eMtzE.js +6 -0
  1525. vibe_surf/backend/frontend/assets/subscript-B1v5cruw.js +6 -0
  1526. vibe_surf/backend/frontend/assets/sun-Drd6gJu4.js +6 -0
  1527. vibe_surf/backend/frontend/assets/sun-dim-CSbGIP11.js +6 -0
  1528. vibe_surf/backend/frontend/assets/sun-medium-Cownz0gJ.js +6 -0
  1529. vibe_surf/backend/frontend/assets/sun-moon-BgCDmhlw.js +6 -0
  1530. vibe_surf/backend/frontend/assets/sun-snow-B0xowfvd.js +6 -0
  1531. vibe_surf/backend/frontend/assets/sunrise-DkTO7zEY.js +6 -0
  1532. vibe_surf/backend/frontend/assets/sunset-DkKYK75e.js +6 -0
  1533. vibe_surf/backend/frontend/assets/superscript-CBfgJuGP.js +6 -0
  1534. vibe_surf/backend/frontend/assets/swatch-book-DrsAphD2.js +6 -0
  1535. vibe_surf/backend/frontend/assets/swiss-franc-DAYyAzPc.js +6 -0
  1536. vibe_surf/backend/frontend/assets/switch-camera-C7hTq-mz.js +6 -0
  1537. vibe_surf/backend/frontend/assets/sword-BDecpboX.js +6 -0
  1538. vibe_surf/backend/frontend/assets/swords-BjWa4kCQ.js +6 -0
  1539. vibe_surf/backend/frontend/assets/syringe-ClPPE8yd.js +6 -0
  1540. vibe_surf/backend/frontend/assets/table-2-DIGnaXY7.js +6 -0
  1541. vibe_surf/backend/frontend/assets/table-CHxmnA-B.js +6 -0
  1542. vibe_surf/backend/frontend/assets/table-cells-merge-D1zNRVrG.js +6 -0
  1543. vibe_surf/backend/frontend/assets/table-cells-split-CdEYW1Su.js +6 -0
  1544. vibe_surf/backend/frontend/assets/table-columns-split-JoiaUKz3.js +6 -0
  1545. vibe_surf/backend/frontend/assets/table-of-contents-BSpkdcFt.js +6 -0
  1546. vibe_surf/backend/frontend/assets/table-properties-CmoYqW5E.js +6 -0
  1547. vibe_surf/backend/frontend/assets/table-rows-split-B-06ZKqE.js +6 -0
  1548. vibe_surf/backend/frontend/assets/tablet-YvP4PBQR.js +6 -0
  1549. vibe_surf/backend/frontend/assets/tablet-smartphone-BG7aS4OL.js +6 -0
  1550. vibe_surf/backend/frontend/assets/tablets-BVvSHnaS.js +6 -0
  1551. vibe_surf/backend/frontend/assets/tag-Bs9C2NWs.js +6 -0
  1552. vibe_surf/backend/frontend/assets/tags-DEvGZIIh.js +6 -0
  1553. vibe_surf/backend/frontend/assets/tally-1-BjNjbWUj.js +6 -0
  1554. vibe_surf/backend/frontend/assets/tally-2-Bd0nQcFC.js +6 -0
  1555. vibe_surf/backend/frontend/assets/tally-3-DHrPKvJg.js +6 -0
  1556. vibe_surf/backend/frontend/assets/tally-4-DAUwA2aR.js +6 -0
  1557. vibe_surf/backend/frontend/assets/tally-5-CgAN8Y91.js +6 -0
  1558. vibe_surf/backend/frontend/assets/tangent-CRznV78Q.js +6 -0
  1559. vibe_surf/backend/frontend/assets/target-Bj2MJlO6.js +6 -0
  1560. vibe_surf/backend/frontend/assets/telescope-CyRzgTg4.js +6 -0
  1561. vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
  1562. vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
  1563. vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
  1564. vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
  1565. vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
  1566. vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
  1567. vibe_surf/backend/frontend/assets/tent-D1boPMJ_.js +6 -0
  1568. vibe_surf/backend/frontend/assets/tent-tree-DlMlV5UT.js +6 -0
  1569. vibe_surf/backend/frontend/assets/terminal-ByKLrVXr.js +6 -0
  1570. vibe_surf/backend/frontend/assets/test-tube-DjNpqEvy.js +6 -0
  1571. vibe_surf/backend/frontend/assets/test-tube-diagonal-kvKWvVpD.js +6 -0
  1572. vibe_surf/backend/frontend/assets/test-tubes-BUVuvPYq.js +6 -0
  1573. vibe_surf/backend/frontend/assets/text-BaPUPrRB.js +6 -0
  1574. vibe_surf/backend/frontend/assets/text-cursor-DjiJAhIO.js +6 -0
  1575. vibe_surf/backend/frontend/assets/text-cursor-input-DmFbkVcG.js +6 -0
  1576. vibe_surf/backend/frontend/assets/text-quote-DbZhBhba.js +6 -0
  1577. vibe_surf/backend/frontend/assets/text-search-D81mgubi.js +6 -0
  1578. vibe_surf/backend/frontend/assets/text-select-BCYAwryE.js +6 -0
  1579. vibe_surf/backend/frontend/assets/theater-BF8yCQZ3.js +6 -0
  1580. vibe_surf/backend/frontend/assets/thermometer-Dz0qc69z.js +6 -0
  1581. vibe_surf/backend/frontend/assets/thermometer-snowflake-BZ8Fol5x.js +6 -0
  1582. vibe_surf/backend/frontend/assets/thermometer-sun-DgmdNSSx.js +6 -0
  1583. vibe_surf/backend/frontend/assets/thumbs-down-6gCm1bFP.js +6 -0
  1584. vibe_surf/backend/frontend/assets/thumbs-up-BpkAnOkj.js +6 -0
  1585. vibe_surf/backend/frontend/assets/ticket-CZ6VZCic.js +6 -0
  1586. vibe_surf/backend/frontend/assets/ticket-check-CwERJSTS.js +6 -0
  1587. vibe_surf/backend/frontend/assets/ticket-minus-CJ8o42r1.js +6 -0
  1588. vibe_surf/backend/frontend/assets/ticket-percent-D9mgrzai.js +6 -0
  1589. vibe_surf/backend/frontend/assets/ticket-plus-Bf_MplVa.js +6 -0
  1590. vibe_surf/backend/frontend/assets/ticket-slash-CNukz3dP.js +6 -0
  1591. vibe_surf/backend/frontend/assets/ticket-x-DAGtm4Nf.js +6 -0
  1592. vibe_surf/backend/frontend/assets/tickets-Dlm-Pd3N.js +6 -0
  1593. vibe_surf/backend/frontend/assets/tickets-plane-C4lmqLQq.js +6 -0
  1594. vibe_surf/backend/frontend/assets/timer-0lTpmgXp.js +6 -0
  1595. vibe_surf/backend/frontend/assets/timer-off-BGqRyv1S.js +6 -0
  1596. vibe_surf/backend/frontend/assets/timer-reset-DdhKPXcy.js +6 -0
  1597. vibe_surf/backend/frontend/assets/toggle-left-De2ASTKW.js +6 -0
  1598. vibe_surf/backend/frontend/assets/toggle-right-NfpJqTaq.js +6 -0
  1599. vibe_surf/backend/frontend/assets/toilet-DcJuMKzv.js +6 -0
  1600. vibe_surf/backend/frontend/assets/tornado-BannseS-.js +6 -0
  1601. vibe_surf/backend/frontend/assets/torus-CxsKBH8D.js +6 -0
  1602. vibe_surf/backend/frontend/assets/touchpad-ENZl5mwQ.js +6 -0
  1603. vibe_surf/backend/frontend/assets/touchpad-off-Bs9XazIZ.js +6 -0
  1604. vibe_surf/backend/frontend/assets/tower-control-DOH63Gyd.js +6 -0
  1605. vibe_surf/backend/frontend/assets/toy-brick-CK9szegV.js +6 -0
  1606. vibe_surf/backend/frontend/assets/tractor-C4edkneR.js +6 -0
  1607. vibe_surf/backend/frontend/assets/traffic-cone-B7xJNOdC.js +6 -0
  1608. vibe_surf/backend/frontend/assets/train-front-DPkfW4fH.js +6 -0
  1609. vibe_surf/backend/frontend/assets/train-front-tunnel-Dc6i8ZmW.js +6 -0
  1610. vibe_surf/backend/frontend/assets/train-track-DFRUcPF4.js +6 -0
  1611. vibe_surf/backend/frontend/assets/tram-front-DnSEWr26.js +6 -0
  1612. vibe_surf/backend/frontend/assets/transgender-CwbUC-T0.js +6 -0
  1613. vibe_surf/backend/frontend/assets/trash-DSMPsj08.js +6 -0
  1614. vibe_surf/backend/frontend/assets/tree-deciduous-CMyD2rgs.js +6 -0
  1615. vibe_surf/backend/frontend/assets/tree-palm-ClbWCueR.js +6 -0
  1616. vibe_surf/backend/frontend/assets/tree-pine-CxCMH7RZ.js +6 -0
  1617. vibe_surf/backend/frontend/assets/trees-DeERVvec.js +6 -0
  1618. vibe_surf/backend/frontend/assets/trello-DwQeyG2C.js +6 -0
  1619. vibe_surf/backend/frontend/assets/trending-down-CuQxq0A3.js +6 -0
  1620. vibe_surf/backend/frontend/assets/trending-up-BDSGIJWY.js +6 -0
  1621. vibe_surf/backend/frontend/assets/trending-up-down-CSb_7X-_.js +6 -0
  1622. vibe_surf/backend/frontend/assets/triangle-Cc8gzj2X.js +6 -0
  1623. vibe_surf/backend/frontend/assets/triangle-alert-CzfSlrIp.js +6 -0
  1624. vibe_surf/backend/frontend/assets/triangle-dashed-CSlIdQSl.js +6 -0
  1625. vibe_surf/backend/frontend/assets/triangle-right-BIlbKFDC.js +6 -0
  1626. vibe_surf/backend/frontend/assets/trophy-CIFZUGnX.js +6 -0
  1627. vibe_surf/backend/frontend/assets/truck-Id_mHUOq.js +6 -0
  1628. vibe_surf/backend/frontend/assets/truck-electric-WgMKZnOH.js +6 -0
  1629. vibe_surf/backend/frontend/assets/turtle-0ek05Orw.js +6 -0
  1630. vibe_surf/backend/frontend/assets/tv-DLVWDmzW.js +6 -0
  1631. vibe_surf/backend/frontend/assets/tv-minimal-E0w-pb-R.js +6 -0
  1632. vibe_surf/backend/frontend/assets/tv-minimal-play-C8eivgTI.js +6 -0
  1633. vibe_surf/backend/frontend/assets/twitch-D6updjnG.js +6 -0
  1634. vibe_surf/backend/frontend/assets/twitter-Der_Ih7y.js +6 -0
  1635. vibe_surf/backend/frontend/assets/type-BZeEwGKH.js +6 -0
  1636. vibe_surf/backend/frontend/assets/type-outline-WvuVShMD.js +6 -0
  1637. vibe_surf/backend/frontend/assets/umbrella-BFiE5bFk.js +6 -0
  1638. vibe_surf/backend/frontend/assets/umbrella-off-CQKtt_HS.js +6 -0
  1639. vibe_surf/backend/frontend/assets/underline-eH-gfEgl.js +6 -0
  1640. vibe_surf/backend/frontend/assets/undo-2-CGpVoxxS.js +6 -0
  1641. vibe_surf/backend/frontend/assets/undo-BAkkNYmN.js +6 -0
  1642. vibe_surf/backend/frontend/assets/undo-dot-fxz9ZoUf.js +6 -0
  1643. vibe_surf/backend/frontend/assets/unfold-horizontal-Bz6GASed.js +6 -0
  1644. vibe_surf/backend/frontend/assets/unfold-vertical-DVuawiHD.js +6 -0
  1645. vibe_surf/backend/frontend/assets/ungroup-DZlCBfu8.js +6 -0
  1646. vibe_surf/backend/frontend/assets/university-DQQJPlHM.js +6 -0
  1647. vibe_surf/backend/frontend/assets/unlink-2-Bbf62oJC.js +6 -0
  1648. vibe_surf/backend/frontend/assets/unlink-rRnEYNBH.js +6 -0
  1649. vibe_surf/backend/frontend/assets/unplug-BE6bAKlE.js +6 -0
  1650. vibe_surf/backend/frontend/assets/upload-DgbNBlk6.js +6 -0
  1651. vibe_surf/backend/frontend/assets/usb-BsbOhQkP.js +6 -0
  1652. vibe_surf/backend/frontend/assets/use-post-add-user-s3pEdarP.js +1 -0
  1653. vibe_surf/backend/frontend/assets/user-C7_N9vjw.js +6 -0
  1654. vibe_surf/backend/frontend/assets/user-check-D85AcwGt.js +6 -0
  1655. vibe_surf/backend/frontend/assets/user-cog-BUSZoKWO.js +6 -0
  1656. vibe_surf/backend/frontend/assets/user-lock-DrG5znDk.js +6 -0
  1657. vibe_surf/backend/frontend/assets/user-minus-CjVZSxhC.js +6 -0
  1658. vibe_surf/backend/frontend/assets/user-pen-BllWYNRg.js +6 -0
  1659. vibe_surf/backend/frontend/assets/user-plus-Ct840ALN.js +6 -0
  1660. vibe_surf/backend/frontend/assets/user-round-D6DnOG0E.js +6 -0
  1661. vibe_surf/backend/frontend/assets/user-round-check-Ci15Wbid.js +6 -0
  1662. vibe_surf/backend/frontend/assets/user-round-cog-SrRmnnrG.js +6 -0
  1663. vibe_surf/backend/frontend/assets/user-round-minus-CZKo0fkN.js +6 -0
  1664. vibe_surf/backend/frontend/assets/user-round-pen-DQ88K1gY.js +6 -0
  1665. vibe_surf/backend/frontend/assets/user-round-plus-BtBHwnQH.js +6 -0
  1666. vibe_surf/backend/frontend/assets/user-round-search-mZx8k3ks.js +6 -0
  1667. vibe_surf/backend/frontend/assets/user-round-x-4MvMTCpy.js +6 -0
  1668. vibe_surf/backend/frontend/assets/user-search-CkEhATdm.js +6 -0
  1669. vibe_surf/backend/frontend/assets/user-x-DufZCLiX.js +6 -0
  1670. vibe_surf/backend/frontend/assets/users-DgOAHdb7.js +6 -0
  1671. vibe_surf/backend/frontend/assets/users-round-Bj4Zqvjj.js +6 -0
  1672. vibe_surf/backend/frontend/assets/utensils-CcfYVeqi.js +6 -0
  1673. vibe_surf/backend/frontend/assets/utensils-crossed-Daq7-gMB.js +6 -0
  1674. vibe_surf/backend/frontend/assets/utility-pole-BRYxk_9o.js +6 -0
  1675. vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
  1676. vibe_surf/backend/frontend/assets/variable-CQb_DxMu.js +6 -0
  1677. vibe_surf/backend/frontend/assets/vault-D7etPPcB.js +6 -0
  1678. vibe_surf/backend/frontend/assets/vegan-DhjhKnZM.js +6 -0
  1679. vibe_surf/backend/frontend/assets/venetian-mask-DGDNvUAT.js +6 -0
  1680. vibe_surf/backend/frontend/assets/venus-and-mars-BEW94wvT.js +6 -0
  1681. vibe_surf/backend/frontend/assets/venus-u9B-gdcz.js +6 -0
  1682. vibe_surf/backend/frontend/assets/vibrate-off-GMm1P59r.js +6 -0
  1683. vibe_surf/backend/frontend/assets/vibrate-ztsKQUo9.js +6 -0
  1684. vibe_surf/backend/frontend/assets/video-BRU-KCdj.js +6 -0
  1685. vibe_surf/backend/frontend/assets/video-off-UBhDkXSa.js +6 -0
  1686. vibe_surf/backend/frontend/assets/videotape-BnpqC2PU.js +6 -0
  1687. vibe_surf/backend/frontend/assets/view-SPlXqa2E.js +6 -0
  1688. vibe_surf/backend/frontend/assets/voicemail-CslFUibB.js +6 -0
  1689. vibe_surf/backend/frontend/assets/volleyball-YmSfEYj0.js +6 -0
  1690. vibe_surf/backend/frontend/assets/volume-1-DzSvYJXy.js +6 -0
  1691. vibe_surf/backend/frontend/assets/volume-2-CKYHuo73.js +6 -0
  1692. vibe_surf/backend/frontend/assets/volume-D2WpTg4b.js +6 -0
  1693. vibe_surf/backend/frontend/assets/volume-off-CXmQvaUO.js +6 -0
  1694. vibe_surf/backend/frontend/assets/volume-x-Dl4xNI1D.js +6 -0
  1695. vibe_surf/backend/frontend/assets/vote-DVUnQCxF.js +6 -0
  1696. vibe_surf/backend/frontend/assets/wallet-D9F1dFbt.js +6 -0
  1697. vibe_surf/backend/frontend/assets/wallet-cards-DkIuM2Gu.js +6 -0
  1698. vibe_surf/backend/frontend/assets/wallet-minimal-CUUsXAfP.js +6 -0
  1699. vibe_surf/backend/frontend/assets/wallpaper-BHliG6AQ.js +6 -0
  1700. vibe_surf/backend/frontend/assets/wand-sparkles-BA8i-2_I.js +6 -0
  1701. vibe_surf/backend/frontend/assets/wand-u2EI2dL2.js +6 -0
  1702. vibe_surf/backend/frontend/assets/warehouse-CxDEgPyp.js +6 -0
  1703. vibe_surf/backend/frontend/assets/washing-machine-CYoqAbT7.js +6 -0
  1704. vibe_surf/backend/frontend/assets/watch-eNq5oUsh.js +6 -0
  1705. vibe_surf/backend/frontend/assets/waves-Bs6o5G71.js +6 -0
  1706. vibe_surf/backend/frontend/assets/waves-ladder-0t2iIHt8.js +6 -0
  1707. vibe_surf/backend/frontend/assets/waypoints-DyScJk3j.js +6 -0
  1708. vibe_surf/backend/frontend/assets/webcam-BFZUWYUw.js +6 -0
  1709. vibe_surf/backend/frontend/assets/webhook-CMDaI4yk.js +6 -0
  1710. vibe_surf/backend/frontend/assets/webhook-off-DQzE1oMX.js +6 -0
  1711. vibe_surf/backend/frontend/assets/weight-g0EeSmAx.js +6 -0
  1712. vibe_surf/backend/frontend/assets/wheat-hvVtAPlc.js +6 -0
  1713. vibe_surf/backend/frontend/assets/wheat-off-6d_oRYIW.js +6 -0
  1714. vibe_surf/backend/frontend/assets/whole-word-CMHbYgQ-.js +6 -0
  1715. vibe_surf/backend/frontend/assets/wifi-CRHAo2Lb.js +6 -0
  1716. vibe_surf/backend/frontend/assets/wifi-high-BTElqamm.js +6 -0
  1717. vibe_surf/backend/frontend/assets/wifi-low-BFBJvE2C.js +6 -0
  1718. vibe_surf/backend/frontend/assets/wifi-off-DL1S7f79.js +6 -0
  1719. vibe_surf/backend/frontend/assets/wifi-pen-FkLT18-y.js +6 -0
  1720. vibe_surf/backend/frontend/assets/wifi-zero-koQAfMYN.js +6 -0
  1721. vibe_surf/backend/frontend/assets/wind-CgQDM8yC.js +6 -0
  1722. vibe_surf/backend/frontend/assets/wind-arrow-down-ByQJVZNf.js +6 -0
  1723. vibe_surf/backend/frontend/assets/wine-kngKIYWK.js +6 -0
  1724. vibe_surf/backend/frontend/assets/wine-off-DaVVtkyG.js +6 -0
  1725. vibe_surf/backend/frontend/assets/workflow-BBHA5vqf.js +6 -0
  1726. vibe_surf/backend/frontend/assets/worm-D8rJAL-s.js +6 -0
  1727. vibe_surf/backend/frontend/assets/wrap-text-s4fkGxHY.js +6 -0
  1728. vibe_surf/backend/frontend/assets/wrench-CYzg6B-q.js +6 -0
  1729. vibe_surf/backend/frontend/assets/youtube-BIzMVpJA.js +6 -0
  1730. vibe_surf/backend/frontend/assets/zap-nyAdqt4o.js +6 -0
  1731. vibe_surf/backend/frontend/assets/zap-off-Aii1CEgj.js +6 -0
  1732. vibe_surf/backend/frontend/assets/zoom-in-BNWeSenu.js +6 -0
  1733. vibe_surf/backend/frontend/assets/zoom-out-Bd2vIq2c.js +6 -0
  1734. vibe_surf/backend/frontend/favicon.ico +0 -0
  1735. vibe_surf/backend/frontend/index.html +24 -0
  1736. vibe_surf/backend/frontend/manifest.json +31 -0
  1737. vibe_surf/backend/llm_config.py +3 -1
  1738. vibe_surf/backend/main.py +705 -158
  1739. vibe_surf/backend/shared_state.py +366 -25
  1740. vibe_surf/backend/utils/utils.py +1 -1
  1741. vibe_surf/browser/agent_browser_session.py +19 -65
  1742. vibe_surf/browser/browser_manager.py +5 -4
  1743. vibe_surf/browser/find_page_element.py +1100 -0
  1744. vibe_surf/browser/page_operations.py +222 -0
  1745. vibe_surf/browser/watchdogs/dom_watchdog.py +1 -1
  1746. vibe_surf/chrome_extension/background.js +15 -5
  1747. vibe_surf/chrome_extension/config.js +2 -2
  1748. vibe_surf/chrome_extension/manifest.json +23 -8
  1749. vibe_surf/chrome_extension/scripts/api-client.js +134 -11
  1750. vibe_surf/chrome_extension/scripts/settings-general.js +513 -0
  1751. vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
  1752. vibe_surf/chrome_extension/scripts/settings-manager.js +96 -2707
  1753. vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
  1754. vibe_surf/chrome_extension/scripts/settings-workflow.js +2911 -0
  1755. vibe_surf/chrome_extension/scripts/ui-manager.js +623 -505
  1756. vibe_surf/chrome_extension/scripts/version.js +3 -0
  1757. vibe_surf/chrome_extension/sidepanel.html +511 -6
  1758. vibe_surf/chrome_extension/styles/components.css +146 -0
  1759. vibe_surf/chrome_extension/styles/layout.css +2 -0
  1760. vibe_surf/chrome_extension/styles/settings-integrations.css +35 -17
  1761. vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
  1762. vibe_surf/cli.py +3 -0
  1763. vibe_surf/langflow/__init__.py +0 -0
  1764. vibe_surf/langflow/__main__.py +954 -0
  1765. vibe_surf/langflow/alembic/README +1 -0
  1766. vibe_surf/langflow/alembic/env.py +124 -0
  1767. vibe_surf/langflow/alembic/script.py.mako +31 -0
  1768. vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
  1769. vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
  1770. vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  1771. vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
  1772. vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
  1773. vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
  1774. vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
  1775. vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
  1776. vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
  1777. vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
  1778. vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
  1779. vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
  1780. vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
  1781. vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
  1782. vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
  1783. vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
  1784. vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
  1785. vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
  1786. vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
  1787. vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
  1788. vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
  1789. vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
  1790. vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
  1791. vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
  1792. vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
  1793. vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
  1794. vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
  1795. vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
  1796. vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
  1797. vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
  1798. vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
  1799. vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
  1800. vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
  1801. vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
  1802. vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
  1803. vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
  1804. vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
  1805. vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
  1806. vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
  1807. vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
  1808. vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
  1809. vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
  1810. vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
  1811. vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
  1812. vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
  1813. vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
  1814. vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
  1815. vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
  1816. vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
  1817. vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
  1818. vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
  1819. vibe_surf/langflow/alembic.ini +113 -0
  1820. vibe_surf/langflow/api/__init__.py +5 -0
  1821. vibe_surf/langflow/api/build.py +557 -0
  1822. vibe_surf/langflow/api/disconnect.py +31 -0
  1823. vibe_surf/langflow/api/health_check_router.py +65 -0
  1824. vibe_surf/langflow/api/limited_background_tasks.py +29 -0
  1825. vibe_surf/langflow/api/log_router.py +103 -0
  1826. vibe_surf/langflow/api/router.py +63 -0
  1827. vibe_surf/langflow/api/schemas.py +14 -0
  1828. vibe_surf/langflow/api/utils.py +381 -0
  1829. vibe_surf/langflow/api/v1/__init__.py +41 -0
  1830. vibe_surf/langflow/api/v1/api_key.py +88 -0
  1831. vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
  1832. vibe_surf/langflow/api/v1/base.py +50 -0
  1833. vibe_surf/langflow/api/v1/callback.py +136 -0
  1834. vibe_surf/langflow/api/v1/chat.py +675 -0
  1835. vibe_surf/langflow/api/v1/endpoints.py +800 -0
  1836. vibe_surf/langflow/api/v1/files.py +193 -0
  1837. vibe_surf/langflow/api/v1/flows.py +579 -0
  1838. vibe_surf/langflow/api/v1/folders.py +95 -0
  1839. vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
  1840. vibe_surf/langflow/api/v1/login.py +166 -0
  1841. vibe_surf/langflow/api/v1/mcp.py +137 -0
  1842. vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
  1843. vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
  1844. vibe_surf/langflow/api/v1/monitor.py +203 -0
  1845. vibe_surf/langflow/api/v1/openai_responses.py +561 -0
  1846. vibe_surf/langflow/api/v1/projects.py +447 -0
  1847. vibe_surf/langflow/api/v1/schemas.py +488 -0
  1848. vibe_surf/langflow/api/v1/starter_projects.py +17 -0
  1849. vibe_surf/langflow/api/v1/store.py +182 -0
  1850. vibe_surf/langflow/api/v1/users.py +146 -0
  1851. vibe_surf/langflow/api/v1/validate.py +48 -0
  1852. vibe_surf/langflow/api/v1/variable.py +106 -0
  1853. vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
  1854. vibe_surf/langflow/api/v2/__init__.py +7 -0
  1855. vibe_surf/langflow/api/v2/files.py +532 -0
  1856. vibe_surf/langflow/api/v2/mcp.py +330 -0
  1857. vibe_surf/langflow/base/__init__.py +0 -0
  1858. vibe_surf/langflow/base/agents/__init__.py +0 -0
  1859. vibe_surf/langflow/base/agents/agent.py +267 -0
  1860. vibe_surf/langflow/base/agents/callback.py +130 -0
  1861. vibe_surf/langflow/base/agents/context.py +109 -0
  1862. vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
  1863. vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
  1864. vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
  1865. vibe_surf/langflow/base/agents/default_prompts.py +23 -0
  1866. vibe_surf/langflow/base/agents/errors.py +15 -0
  1867. vibe_surf/langflow/base/agents/events.py +346 -0
  1868. vibe_surf/langflow/base/agents/utils.py +205 -0
  1869. vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
  1870. vibe_surf/langflow/base/astra_assistants/util.py +171 -0
  1871. vibe_surf/langflow/base/chains/__init__.py +0 -0
  1872. vibe_surf/langflow/base/chains/model.py +19 -0
  1873. vibe_surf/langflow/base/composio/__init__.py +0 -0
  1874. vibe_surf/langflow/base/composio/composio_base.py +1301 -0
  1875. vibe_surf/langflow/base/compressors/__init__.py +0 -0
  1876. vibe_surf/langflow/base/compressors/model.py +60 -0
  1877. vibe_surf/langflow/base/constants.py +46 -0
  1878. vibe_surf/langflow/base/curl/__init__.py +0 -0
  1879. vibe_surf/langflow/base/curl/parse.py +188 -0
  1880. vibe_surf/langflow/base/data/__init__.py +5 -0
  1881. vibe_surf/langflow/base/data/base_file.py +698 -0
  1882. vibe_surf/langflow/base/data/docling_utils.py +280 -0
  1883. vibe_surf/langflow/base/data/utils.py +198 -0
  1884. vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
  1885. vibe_surf/langflow/base/document_transformers/model.py +43 -0
  1886. vibe_surf/langflow/base/embeddings/__init__.py +0 -0
  1887. vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
  1888. vibe_surf/langflow/base/embeddings/model.py +26 -0
  1889. vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
  1890. vibe_surf/langflow/base/flow_processing/utils.py +86 -0
  1891. vibe_surf/langflow/base/huggingface/__init__.py +0 -0
  1892. vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
  1893. vibe_surf/langflow/base/io/__init__.py +0 -0
  1894. vibe_surf/langflow/base/io/chat.py +20 -0
  1895. vibe_surf/langflow/base/io/text.py +22 -0
  1896. vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
  1897. vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
  1898. vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
  1899. vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
  1900. vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
  1901. vibe_surf/langflow/base/langwatch/__init__.py +0 -0
  1902. vibe_surf/langflow/base/langwatch/utils.py +18 -0
  1903. vibe_surf/langflow/base/mcp/__init__.py +0 -0
  1904. vibe_surf/langflow/base/mcp/constants.py +2 -0
  1905. vibe_surf/langflow/base/mcp/util.py +1544 -0
  1906. vibe_surf/langflow/base/memory/__init__.py +0 -0
  1907. vibe_surf/langflow/base/memory/memory.py +49 -0
  1908. vibe_surf/langflow/base/memory/model.py +38 -0
  1909. vibe_surf/langflow/base/models/__init__.py +3 -0
  1910. vibe_surf/langflow/base/models/aiml_constants.py +51 -0
  1911. vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
  1912. vibe_surf/langflow/base/models/aws_constants.py +151 -0
  1913. vibe_surf/langflow/base/models/chat_result.py +76 -0
  1914. vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
  1915. vibe_surf/langflow/base/models/groq_constants.py +134 -0
  1916. vibe_surf/langflow/base/models/model.py +375 -0
  1917. vibe_surf/langflow/base/models/model_input_constants.py +299 -0
  1918. vibe_surf/langflow/base/models/model_metadata.py +41 -0
  1919. vibe_surf/langflow/base/models/model_utils.py +8 -0
  1920. vibe_surf/langflow/base/models/novita_constants.py +35 -0
  1921. vibe_surf/langflow/base/models/ollama_constants.py +49 -0
  1922. vibe_surf/langflow/base/models/openai_constants.py +121 -0
  1923. vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
  1924. vibe_surf/langflow/base/processing/__init__.py +0 -0
  1925. vibe_surf/langflow/base/prompts/__init__.py +0 -0
  1926. vibe_surf/langflow/base/prompts/api_utils.py +224 -0
  1927. vibe_surf/langflow/base/prompts/utils.py +61 -0
  1928. vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
  1929. vibe_surf/langflow/base/textsplitters/model.py +28 -0
  1930. vibe_surf/langflow/base/tools/__init__.py +0 -0
  1931. vibe_surf/langflow/base/tools/base.py +26 -0
  1932. vibe_surf/langflow/base/tools/component_tool.py +324 -0
  1933. vibe_surf/langflow/base/tools/constants.py +49 -0
  1934. vibe_surf/langflow/base/tools/flow_tool.py +131 -0
  1935. vibe_surf/langflow/base/tools/run_flow.py +227 -0
  1936. vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
  1937. vibe_surf/langflow/base/vectorstores/model.py +193 -0
  1938. vibe_surf/langflow/base/vectorstores/utils.py +22 -0
  1939. vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
  1940. vibe_surf/langflow/cli/__init__.py +0 -0
  1941. vibe_surf/langflow/cli/progress.py +233 -0
  1942. vibe_surf/langflow/components/FAISS/__init__.py +34 -0
  1943. vibe_surf/langflow/components/FAISS/faiss.py +111 -0
  1944. vibe_surf/langflow/components/Notion/__init__.py +19 -0
  1945. vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
  1946. vibe_surf/langflow/components/Notion/create_page.py +94 -0
  1947. vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
  1948. vibe_surf/langflow/components/Notion/list_pages.py +122 -0
  1949. vibe_surf/langflow/components/Notion/list_users.py +77 -0
  1950. vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
  1951. vibe_surf/langflow/components/Notion/search.py +111 -0
  1952. vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
  1953. vibe_surf/langflow/components/__init__.py +270 -0
  1954. vibe_surf/langflow/components/_importing.py +37 -0
  1955. vibe_surf/langflow/components/agentql/__init__.py +3 -0
  1956. vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
  1957. vibe_surf/langflow/components/agents/__init__.py +4 -0
  1958. vibe_surf/langflow/components/agents/agent.py +608 -0
  1959. vibe_surf/langflow/components/agents/mcp_component.py +511 -0
  1960. vibe_surf/langflow/components/aiml/__init__.py +37 -0
  1961. vibe_surf/langflow/components/aiml/aiml.py +115 -0
  1962. vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
  1963. vibe_surf/langflow/components/amazon/__init__.py +36 -0
  1964. vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
  1965. vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
  1966. vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
  1967. vibe_surf/langflow/components/anthropic/__init__.py +34 -0
  1968. vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
  1969. vibe_surf/langflow/components/apify/__init__.py +5 -0
  1970. vibe_surf/langflow/components/apify/apify_actor.py +325 -0
  1971. vibe_surf/langflow/components/arxiv/__init__.py +3 -0
  1972. vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
  1973. vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
  1974. vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  1975. vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
  1976. vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  1977. vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  1978. vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
  1979. vibe_surf/langflow/components/azure/__init__.py +37 -0
  1980. vibe_surf/langflow/components/azure/azure_openai.py +95 -0
  1981. vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
  1982. vibe_surf/langflow/components/baidu/__init__.py +32 -0
  1983. vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
  1984. vibe_surf/langflow/components/bing/__init__.py +3 -0
  1985. vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
  1986. vibe_surf/langflow/components/cassandra/__init__.py +40 -0
  1987. vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
  1988. vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
  1989. vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
  1990. vibe_surf/langflow/components/chains/__init__.py +0 -0
  1991. vibe_surf/langflow/components/chroma/__init__.py +34 -0
  1992. vibe_surf/langflow/components/chroma/chroma.py +169 -0
  1993. vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
  1994. vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
  1995. vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  1996. vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
  1997. vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
  1998. vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
  1999. vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
  2000. vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
  2001. vibe_surf/langflow/components/cohere/__init__.py +40 -0
  2002. vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
  2003. vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
  2004. vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
  2005. vibe_surf/langflow/components/composio/__init__.py +73 -0
  2006. vibe_surf/langflow/components/composio/composio_api.py +279 -0
  2007. vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
  2008. vibe_surf/langflow/components/composio/github_composio.py +11 -0
  2009. vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
  2010. vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
  2011. vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
  2012. vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
  2013. vibe_surf/langflow/components/composio/linear_composio.py +11 -0
  2014. vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
  2015. vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
  2016. vibe_surf/langflow/components/composio/slack_composio.py +11 -0
  2017. vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
  2018. vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
  2019. vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
  2020. vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
  2021. vibe_surf/langflow/components/confluence/__init__.py +3 -0
  2022. vibe_surf/langflow/components/confluence/confluence.py +84 -0
  2023. vibe_surf/langflow/components/couchbase/__init__.py +34 -0
  2024. vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
  2025. vibe_surf/langflow/components/crewai/__init__.py +49 -0
  2026. vibe_surf/langflow/components/crewai/crewai.py +108 -0
  2027. vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
  2028. vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
  2029. vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
  2030. vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
  2031. vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
  2032. vibe_surf/langflow/components/custom_component/__init__.py +34 -0
  2033. vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
  2034. vibe_surf/langflow/components/data/__init__.py +25 -0
  2035. vibe_surf/langflow/components/data/api_request.py +555 -0
  2036. vibe_surf/langflow/components/data/csv_to_data.py +96 -0
  2037. vibe_surf/langflow/components/data/directory.py +113 -0
  2038. vibe_surf/langflow/components/data/file.py +632 -0
  2039. vibe_surf/langflow/components/data/json_to_data.py +99 -0
  2040. vibe_surf/langflow/components/data/news_search.py +164 -0
  2041. vibe_surf/langflow/components/data/rss.py +69 -0
  2042. vibe_surf/langflow/components/data/sql_executor.py +99 -0
  2043. vibe_surf/langflow/components/data/url.py +299 -0
  2044. vibe_surf/langflow/components/data/web_search.py +112 -0
  2045. vibe_surf/langflow/components/data/webhook.py +56 -0
  2046. vibe_surf/langflow/components/datastax/__init__.py +70 -0
  2047. vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
  2048. vibe_surf/langflow/components/datastax/astra_db.py +68 -0
  2049. vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
  2050. vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
  2051. vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
  2052. vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
  2053. vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
  2054. vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
  2055. vibe_surf/langflow/components/datastax/create_thread.py +32 -0
  2056. vibe_surf/langflow/components/datastax/dotenv.py +35 -0
  2057. vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
  2058. vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
  2059. vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
  2060. vibe_surf/langflow/components/datastax/hcd.py +314 -0
  2061. vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
  2062. vibe_surf/langflow/components/datastax/run.py +89 -0
  2063. vibe_surf/langflow/components/deactivated/__init__.py +19 -0
  2064. vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
  2065. vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
  2066. vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
  2067. vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
  2068. vibe_surf/langflow/components/deactivated/embed.py +16 -0
  2069. vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
  2070. vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
  2071. vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
  2072. vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
  2073. vibe_surf/langflow/components/deactivated/message.py +37 -0
  2074. vibe_surf/langflow/components/deactivated/metal.py +54 -0
  2075. vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
  2076. vibe_surf/langflow/components/deactivated/retriever.py +43 -0
  2077. vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
  2078. vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
  2079. vibe_surf/langflow/components/deactivated/split_text.py +63 -0
  2080. vibe_surf/langflow/components/deactivated/store_message.py +24 -0
  2081. vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
  2082. vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
  2083. vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
  2084. vibe_surf/langflow/components/deepseek/__init__.py +34 -0
  2085. vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
  2086. vibe_surf/langflow/components/docling/__init__.py +43 -0
  2087. vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
  2088. vibe_surf/langflow/components/docling/docling_inline.py +249 -0
  2089. vibe_surf/langflow/components/docling/docling_remote.py +192 -0
  2090. vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
  2091. vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
  2092. vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
  2093. vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  2094. vibe_surf/langflow/components/elastic/__init__.py +37 -0
  2095. vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
  2096. vibe_surf/langflow/components/elastic/opensearch.py +243 -0
  2097. vibe_surf/langflow/components/embeddings/__init__.py +37 -0
  2098. vibe_surf/langflow/components/embeddings/similarity.py +77 -0
  2099. vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
  2100. vibe_surf/langflow/components/exa/__init__.py +3 -0
  2101. vibe_surf/langflow/components/exa/exa_search.py +68 -0
  2102. vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
  2103. vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
  2104. vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
  2105. vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
  2106. vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
  2107. vibe_surf/langflow/components/git/__init__.py +4 -0
  2108. vibe_surf/langflow/components/git/git.py +262 -0
  2109. vibe_surf/langflow/components/git/gitextractor.py +196 -0
  2110. vibe_surf/langflow/components/glean/__init__.py +3 -0
  2111. vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
  2112. vibe_surf/langflow/components/google/__init__.py +17 -0
  2113. vibe_surf/langflow/components/google/gmail.py +193 -0
  2114. vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
  2115. vibe_surf/langflow/components/google/google_drive.py +92 -0
  2116. vibe_surf/langflow/components/google/google_drive_search.py +152 -0
  2117. vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
  2118. vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
  2119. vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
  2120. vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
  2121. vibe_surf/langflow/components/groq/__init__.py +34 -0
  2122. vibe_surf/langflow/components/groq/groq.py +140 -0
  2123. vibe_surf/langflow/components/helpers/__init__.py +52 -0
  2124. vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
  2125. vibe_surf/langflow/components/helpers/create_list.py +40 -0
  2126. vibe_surf/langflow/components/helpers/current_date.py +42 -0
  2127. vibe_surf/langflow/components/helpers/id_generator.py +42 -0
  2128. vibe_surf/langflow/components/helpers/memory.py +253 -0
  2129. vibe_surf/langflow/components/helpers/output_parser.py +46 -0
  2130. vibe_surf/langflow/components/helpers/store_message.py +91 -0
  2131. vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
  2132. vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
  2133. vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
  2134. vibe_surf/langflow/components/huggingface/__init__.py +37 -0
  2135. vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
  2136. vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
  2137. vibe_surf/langflow/components/ibm/__init__.py +34 -0
  2138. vibe_surf/langflow/components/ibm/watsonx.py +203 -0
  2139. vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
  2140. vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
  2141. vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
  2142. vibe_surf/langflow/components/input_output/__init__.py +38 -0
  2143. vibe_surf/langflow/components/input_output/chat.py +99 -0
  2144. vibe_surf/langflow/components/input_output/chat_output.py +169 -0
  2145. vibe_surf/langflow/components/input_output/text.py +27 -0
  2146. vibe_surf/langflow/components/input_output/text_output.py +29 -0
  2147. vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
  2148. vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
  2149. vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
  2150. vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
  2151. vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
  2152. vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
  2153. vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
  2154. vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
  2155. vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
  2156. vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
  2157. vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
  2158. vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
  2159. vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
  2160. vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
  2161. vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
  2162. vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
  2163. vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
  2164. vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
  2165. vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
  2166. vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
  2167. vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
  2168. vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
  2169. vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
  2170. vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
  2171. vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
  2172. vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
  2173. vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
  2174. vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
  2175. vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
  2176. vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
  2177. vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
  2178. vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
  2179. vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
  2180. vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
  2181. vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
  2182. vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
  2183. vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
  2184. vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
  2185. vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
  2186. vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
  2187. vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
  2188. vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
  2189. vibe_surf/langflow/components/langwatch/__init__.py +3 -0
  2190. vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
  2191. vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
  2192. vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
  2193. vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
  2194. vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
  2195. vibe_surf/langflow/components/logic/__init__.py +52 -0
  2196. vibe_surf/langflow/components/logic/conditional_router.py +208 -0
  2197. vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
  2198. vibe_surf/langflow/components/logic/flow_tool.py +111 -0
  2199. vibe_surf/langflow/components/logic/listen.py +29 -0
  2200. vibe_surf/langflow/components/logic/loop.py +125 -0
  2201. vibe_surf/langflow/components/logic/notify.py +88 -0
  2202. vibe_surf/langflow/components/logic/pass_message.py +36 -0
  2203. vibe_surf/langflow/components/logic/run_flow.py +71 -0
  2204. vibe_surf/langflow/components/logic/sub_flow.py +115 -0
  2205. vibe_surf/langflow/components/maritalk/__init__.py +32 -0
  2206. vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
  2207. vibe_surf/langflow/components/mem0/__init__.py +3 -0
  2208. vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
  2209. vibe_surf/langflow/components/milvus/__init__.py +34 -0
  2210. vibe_surf/langflow/components/milvus/milvus.py +115 -0
  2211. vibe_surf/langflow/components/mistral/__init__.py +37 -0
  2212. vibe_surf/langflow/components/mistral/mistral.py +114 -0
  2213. vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
  2214. vibe_surf/langflow/components/models/__init__.py +34 -0
  2215. vibe_surf/langflow/components/models/embedding_model.py +114 -0
  2216. vibe_surf/langflow/components/models/language_model.py +144 -0
  2217. vibe_surf/langflow/components/mongodb/__init__.py +34 -0
  2218. vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
  2219. vibe_surf/langflow/components/needle/__init__.py +3 -0
  2220. vibe_surf/langflow/components/needle/needle.py +104 -0
  2221. vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
  2222. vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
  2223. vibe_surf/langflow/components/novita/__init__.py +32 -0
  2224. vibe_surf/langflow/components/novita/novita.py +130 -0
  2225. vibe_surf/langflow/components/nvidia/__init__.py +57 -0
  2226. vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
  2227. vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
  2228. vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
  2229. vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
  2230. vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
  2231. vibe_surf/langflow/components/olivya/__init__.py +3 -0
  2232. vibe_surf/langflow/components/olivya/olivya.py +116 -0
  2233. vibe_surf/langflow/components/ollama/__init__.py +37 -0
  2234. vibe_surf/langflow/components/ollama/ollama.py +330 -0
  2235. vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
  2236. vibe_surf/langflow/components/openai/__init__.py +37 -0
  2237. vibe_surf/langflow/components/openai/openai.py +100 -0
  2238. vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
  2239. vibe_surf/langflow/components/openrouter/__init__.py +32 -0
  2240. vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
  2241. vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
  2242. vibe_surf/langflow/components/perplexity/__init__.py +34 -0
  2243. vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
  2244. vibe_surf/langflow/components/pgvector/__init__.py +34 -0
  2245. vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
  2246. vibe_surf/langflow/components/pinecone/__init__.py +34 -0
  2247. vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
  2248. vibe_surf/langflow/components/processing/__init__.py +117 -0
  2249. vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
  2250. vibe_surf/langflow/components/processing/batch_run.py +205 -0
  2251. vibe_surf/langflow/components/processing/combine_text.py +40 -0
  2252. vibe_surf/langflow/components/processing/converter.py +150 -0
  2253. vibe_surf/langflow/components/processing/create_data.py +111 -0
  2254. vibe_surf/langflow/components/processing/data_operations.py +438 -0
  2255. vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
  2256. vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
  2257. vibe_surf/langflow/components/processing/extract_key.py +54 -0
  2258. vibe_surf/langflow/components/processing/filter_data.py +43 -0
  2259. vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
  2260. vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
  2261. vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
  2262. vibe_surf/langflow/components/processing/llm_router.py +499 -0
  2263. vibe_surf/langflow/components/processing/merge_data.py +91 -0
  2264. vibe_surf/langflow/components/processing/message_to_data.py +37 -0
  2265. vibe_surf/langflow/components/processing/parse_data.py +71 -0
  2266. vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
  2267. vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
  2268. vibe_surf/langflow/components/processing/parser.py +143 -0
  2269. vibe_surf/langflow/components/processing/prompt.py +67 -0
  2270. vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
  2271. vibe_surf/langflow/components/processing/regex.py +83 -0
  2272. vibe_surf/langflow/components/processing/save_file.py +208 -0
  2273. vibe_surf/langflow/components/processing/select_data.py +49 -0
  2274. vibe_surf/langflow/components/processing/split_text.py +141 -0
  2275. vibe_surf/langflow/components/processing/structured_output.py +206 -0
  2276. vibe_surf/langflow/components/processing/update_data.py +161 -0
  2277. vibe_surf/langflow/components/qdrant/__init__.py +34 -0
  2278. vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
  2279. vibe_surf/langflow/components/redis/__init__.py +37 -0
  2280. vibe_surf/langflow/components/redis/redis.py +89 -0
  2281. vibe_surf/langflow/components/redis/redis_chat.py +43 -0
  2282. vibe_surf/langflow/components/sambanova/__init__.py +32 -0
  2283. vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
  2284. vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
  2285. vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  2286. vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
  2287. vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  2288. vibe_surf/langflow/components/searchapi/__init__.py +36 -0
  2289. vibe_surf/langflow/components/searchapi/search.py +79 -0
  2290. vibe_surf/langflow/components/serpapi/__init__.py +3 -0
  2291. vibe_surf/langflow/components/serpapi/serp.py +115 -0
  2292. vibe_surf/langflow/components/serper/__init__.py +3 -0
  2293. vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
  2294. vibe_surf/langflow/components/supabase/__init__.py +37 -0
  2295. vibe_surf/langflow/components/supabase/supabase.py +76 -0
  2296. vibe_surf/langflow/components/tavily/__init__.py +4 -0
  2297. vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
  2298. vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
  2299. vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
  2300. vibe_surf/langflow/components/toolkits/__init__.py +0 -0
  2301. vibe_surf/langflow/components/tools/__init__.py +66 -0
  2302. vibe_surf/langflow/components/tools/calculator.py +104 -0
  2303. vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
  2304. vibe_surf/langflow/components/tools/python_repl.py +98 -0
  2305. vibe_surf/langflow/components/tools/search_api.py +88 -0
  2306. vibe_surf/langflow/components/tools/searxng.py +145 -0
  2307. vibe_surf/langflow/components/tools/serp_api.py +120 -0
  2308. vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
  2309. vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
  2310. vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
  2311. vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
  2312. vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
  2313. vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
  2314. vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
  2315. vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
  2316. vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
  2317. vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  2318. vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
  2319. vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
  2320. vibe_surf/langflow/components/unstructured/__init__.py +3 -0
  2321. vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
  2322. vibe_surf/langflow/components/upstash/__init__.py +34 -0
  2323. vibe_surf/langflow/components/upstash/upstash.py +124 -0
  2324. vibe_surf/langflow/components/vectara/__init__.py +37 -0
  2325. vibe_surf/langflow/components/vectara/vectara.py +97 -0
  2326. vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
  2327. vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
  2328. vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
  2329. vibe_surf/langflow/components/vertexai/__init__.py +37 -0
  2330. vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
  2331. vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
  2332. vibe_surf/langflow/components/weaviate/__init__.py +34 -0
  2333. vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
  2334. vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
  2335. vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
  2336. vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
  2337. vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
  2338. vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
  2339. vibe_surf/langflow/components/xai/__init__.py +32 -0
  2340. vibe_surf/langflow/components/xai/xai.py +167 -0
  2341. vibe_surf/langflow/components/youtube/__init__.py +52 -0
  2342. vibe_surf/langflow/components/youtube/channel.py +227 -0
  2343. vibe_surf/langflow/components/youtube/comments.py +231 -0
  2344. vibe_surf/langflow/components/youtube/playlist.py +33 -0
  2345. vibe_surf/langflow/components/youtube/search.py +120 -0
  2346. vibe_surf/langflow/components/youtube/trending.py +285 -0
  2347. vibe_surf/langflow/components/youtube/video_details.py +263 -0
  2348. vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
  2349. vibe_surf/langflow/components/zep/__init__.py +3 -0
  2350. vibe_surf/langflow/components/zep/zep.py +45 -0
  2351. vibe_surf/langflow/core/__init__.py +0 -0
  2352. vibe_surf/langflow/core/celery_app.py +11 -0
  2353. vibe_surf/langflow/core/celeryconfig.py +18 -0
  2354. vibe_surf/langflow/custom/__init__.py +4 -0
  2355. vibe_surf/langflow/custom/attributes.py +87 -0
  2356. vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
  2357. vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
  2358. vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
  2359. vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
  2360. vibe_surf/langflow/custom/custom_component/component.py +1742 -0
  2361. vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
  2362. vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
  2363. vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
  2364. vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
  2365. vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
  2366. vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
  2367. vibe_surf/langflow/custom/eval.py +12 -0
  2368. vibe_surf/langflow/custom/schema.py +32 -0
  2369. vibe_surf/langflow/custom/tree_visitor.py +21 -0
  2370. vibe_surf/langflow/custom/utils.py +868 -0
  2371. vibe_surf/langflow/events/__init__.py +0 -0
  2372. vibe_surf/langflow/events/event_manager.py +108 -0
  2373. vibe_surf/langflow/exceptions/__init__.py +0 -0
  2374. vibe_surf/langflow/exceptions/api.py +34 -0
  2375. vibe_surf/langflow/exceptions/component.py +17 -0
  2376. vibe_surf/langflow/exceptions/serialization.py +56 -0
  2377. vibe_surf/langflow/field_typing/__init__.py +91 -0
  2378. vibe_surf/langflow/field_typing/constants.py +137 -0
  2379. vibe_surf/langflow/field_typing/range_spec.py +33 -0
  2380. vibe_surf/langflow/graph/__init__.py +6 -0
  2381. vibe_surf/langflow/graph/edge/__init__.py +0 -0
  2382. vibe_surf/langflow/graph/edge/base.py +277 -0
  2383. vibe_surf/langflow/graph/edge/schema.py +119 -0
  2384. vibe_surf/langflow/graph/edge/utils.py +0 -0
  2385. vibe_surf/langflow/graph/graph/__init__.py +0 -0
  2386. vibe_surf/langflow/graph/graph/ascii.py +202 -0
  2387. vibe_surf/langflow/graph/graph/base.py +2242 -0
  2388. vibe_surf/langflow/graph/graph/constants.py +58 -0
  2389. vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
  2390. vibe_surf/langflow/graph/graph/schema.py +53 -0
  2391. vibe_surf/langflow/graph/graph/state_model.py +66 -0
  2392. vibe_surf/langflow/graph/graph/utils.py +1024 -0
  2393. vibe_surf/langflow/graph/schema.py +75 -0
  2394. vibe_surf/langflow/graph/state/__init__.py +0 -0
  2395. vibe_surf/langflow/graph/state/model.py +237 -0
  2396. vibe_surf/langflow/graph/utils.py +229 -0
  2397. vibe_surf/langflow/graph/vertex/__init__.py +0 -0
  2398. vibe_surf/langflow/graph/vertex/base.py +811 -0
  2399. vibe_surf/langflow/graph/vertex/constants.py +0 -0
  2400. vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
  2401. vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
  2402. vibe_surf/langflow/graph/vertex/schema.py +26 -0
  2403. vibe_surf/langflow/graph/vertex/utils.py +19 -0
  2404. vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
  2405. vibe_surf/langflow/helpers/__init__.py +3 -0
  2406. vibe_surf/langflow/helpers/base_model.py +71 -0
  2407. vibe_surf/langflow/helpers/custom.py +13 -0
  2408. vibe_surf/langflow/helpers/data.py +206 -0
  2409. vibe_surf/langflow/helpers/flow.py +359 -0
  2410. vibe_surf/langflow/helpers/folders.py +26 -0
  2411. vibe_surf/langflow/helpers/user.py +27 -0
  2412. vibe_surf/langflow/initial_setup/__init__.py +0 -0
  2413. vibe_surf/langflow/initial_setup/constants.py +2 -0
  2414. vibe_surf/langflow/initial_setup/load.py +21 -0
  2415. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
  2416. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
  2417. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
  2418. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
  2419. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
  2420. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
  2421. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
  2422. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
  2423. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
  2424. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
  2425. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
  2426. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
  2427. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
  2428. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
  2429. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
  2430. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
  2431. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
  2432. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
  2433. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
  2434. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
  2435. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
  2436. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
  2437. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
  2438. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
  2439. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
  2440. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
  2441. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
  2442. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
  2443. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
  2444. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
  2445. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
  2446. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
  2447. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
  2448. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
  2449. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
  2450. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
  2451. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
  2452. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
  2453. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
  2454. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
  2455. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
  2456. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
  2457. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
  2458. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
  2459. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
  2460. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
  2461. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
  2462. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
  2463. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
  2464. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
  2465. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
  2466. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
  2467. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
  2468. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
  2469. vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
  2470. vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
  2471. vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
  2472. vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
  2473. vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
  2474. vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
  2475. vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
  2476. vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
  2477. vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
  2478. vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
  2479. vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
  2480. vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
  2481. vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
  2482. vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
  2483. vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
  2484. vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
  2485. vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
  2486. vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
  2487. vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
  2488. vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
  2489. vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
  2490. vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
  2491. vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
  2492. vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
  2493. vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
  2494. vibe_surf/langflow/initial_setup/setup.py +1108 -0
  2495. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
  2496. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
  2497. vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
  2498. vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
  2499. vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
  2500. vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
  2501. vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
  2502. vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
  2503. vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
  2504. vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
  2505. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
  2506. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
  2507. vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
  2508. vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
  2509. vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
  2510. vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
  2511. vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
  2512. vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
  2513. vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
  2514. vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
  2515. vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
  2516. vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1580 -0
  2517. vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
  2518. vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
  2519. vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
  2520. vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
  2521. vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
  2522. vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
  2523. vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
  2524. vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
  2525. vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
  2526. vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
  2527. vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
  2528. vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
  2529. vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
  2530. vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
  2531. vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
  2532. vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
  2533. vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
  2534. vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
  2535. vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
  2536. vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
  2537. vibe_surf/langflow/inputs/__init__.py +68 -0
  2538. vibe_surf/langflow/inputs/constants.py +2 -0
  2539. vibe_surf/langflow/inputs/input_mixin.py +312 -0
  2540. vibe_surf/langflow/inputs/inputs.py +706 -0
  2541. vibe_surf/langflow/inputs/utils.py +32 -0
  2542. vibe_surf/langflow/inputs/validators.py +19 -0
  2543. vibe_surf/langflow/interface/__init__.py +0 -0
  2544. vibe_surf/langflow/interface/components.py +496 -0
  2545. vibe_surf/langflow/interface/importing/__init__.py +5 -0
  2546. vibe_surf/langflow/interface/importing/utils.py +39 -0
  2547. vibe_surf/langflow/interface/initialize/__init__.py +3 -0
  2548. vibe_surf/langflow/interface/initialize/loading.py +200 -0
  2549. vibe_surf/langflow/interface/listing.py +26 -0
  2550. vibe_surf/langflow/interface/run.py +45 -0
  2551. vibe_surf/langflow/interface/utils.py +112 -0
  2552. vibe_surf/langflow/io/__init__.py +63 -0
  2553. vibe_surf/langflow/io/schema.py +304 -0
  2554. vibe_surf/langflow/langflow_launcher.py +51 -0
  2555. vibe_surf/langflow/legacy_custom/__init__.py +0 -0
  2556. vibe_surf/langflow/legacy_custom/customs.py +16 -0
  2557. vibe_surf/langflow/load/__init__.py +12 -0
  2558. vibe_surf/langflow/load/load.py +250 -0
  2559. vibe_surf/langflow/load/utils.py +126 -0
  2560. vibe_surf/langflow/logging/__init__.py +4 -0
  2561. vibe_surf/langflow/logging/logger.py +407 -0
  2562. vibe_surf/langflow/logging/setup.py +16 -0
  2563. vibe_surf/langflow/main.py +550 -0
  2564. vibe_surf/langflow/memory.py +326 -0
  2565. vibe_surf/langflow/middleware.py +59 -0
  2566. vibe_surf/langflow/processing/__init__.py +0 -0
  2567. vibe_surf/langflow/processing/process.py +216 -0
  2568. vibe_surf/langflow/processing/utils.py +25 -0
  2569. vibe_surf/langflow/py.typed +0 -0
  2570. vibe_surf/langflow/schema/__init__.py +6 -0
  2571. vibe_surf/langflow/schema/artifact.py +82 -0
  2572. vibe_surf/langflow/schema/content_block.py +62 -0
  2573. vibe_surf/langflow/schema/content_types.py +91 -0
  2574. vibe_surf/langflow/schema/data.py +306 -0
  2575. vibe_surf/langflow/schema/dataframe.py +206 -0
  2576. vibe_surf/langflow/schema/dotdict.py +71 -0
  2577. vibe_surf/langflow/schema/encoders.py +13 -0
  2578. vibe_surf/langflow/schema/graph.py +47 -0
  2579. vibe_surf/langflow/schema/image.py +128 -0
  2580. vibe_surf/langflow/schema/log.py +33 -0
  2581. vibe_surf/langflow/schema/message.py +483 -0
  2582. vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
  2583. vibe_surf/langflow/schema/playground_events.py +182 -0
  2584. vibe_surf/langflow/schema/properties.py +39 -0
  2585. vibe_surf/langflow/schema/schema.py +121 -0
  2586. vibe_surf/langflow/schema/serialize.py +14 -0
  2587. vibe_surf/langflow/schema/table.py +140 -0
  2588. vibe_surf/langflow/schema/validators.py +114 -0
  2589. vibe_surf/langflow/serialization/__init__.py +3 -0
  2590. vibe_surf/langflow/serialization/constants.py +2 -0
  2591. vibe_surf/langflow/serialization/serialization.py +320 -0
  2592. vibe_surf/langflow/server.py +70 -0
  2593. vibe_surf/langflow/services/__init__.py +4 -0
  2594. vibe_surf/langflow/services/auth/__init__.py +0 -0
  2595. vibe_surf/langflow/services/auth/factory.py +15 -0
  2596. vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
  2597. vibe_surf/langflow/services/auth/service.py +15 -0
  2598. vibe_surf/langflow/services/auth/utils.py +583 -0
  2599. vibe_surf/langflow/services/base.py +28 -0
  2600. vibe_surf/langflow/services/cache/__init__.py +12 -0
  2601. vibe_surf/langflow/services/cache/base.py +183 -0
  2602. vibe_surf/langflow/services/cache/disk.py +95 -0
  2603. vibe_surf/langflow/services/cache/factory.py +44 -0
  2604. vibe_surf/langflow/services/cache/service.py +355 -0
  2605. vibe_surf/langflow/services/cache/utils.py +169 -0
  2606. vibe_surf/langflow/services/chat/__init__.py +0 -0
  2607. vibe_surf/langflow/services/chat/cache.py +150 -0
  2608. vibe_surf/langflow/services/chat/config.py +2 -0
  2609. vibe_surf/langflow/services/chat/factory.py +11 -0
  2610. vibe_surf/langflow/services/chat/schema.py +10 -0
  2611. vibe_surf/langflow/services/chat/service.py +67 -0
  2612. vibe_surf/langflow/services/database/__init__.py +0 -0
  2613. vibe_surf/langflow/services/database/factory.py +21 -0
  2614. vibe_surf/langflow/services/database/models/__init__.py +19 -0
  2615. vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
  2616. vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
  2617. vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
  2618. vibe_surf/langflow/services/database/models/base.py +17 -0
  2619. vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
  2620. vibe_surf/langflow/services/database/models/file/crud.py +14 -0
  2621. vibe_surf/langflow/services/database/models/file/model.py +19 -0
  2622. vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
  2623. vibe_surf/langflow/services/database/models/flow/model.py +283 -0
  2624. vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
  2625. vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
  2626. vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
  2627. vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
  2628. vibe_surf/langflow/services/database/models/folder/model.py +61 -0
  2629. vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
  2630. vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
  2631. vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
  2632. vibe_surf/langflow/services/database/models/message/crud.py +26 -0
  2633. vibe_surf/langflow/services/database/models/message/model.py +182 -0
  2634. vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
  2635. vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
  2636. vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
  2637. vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
  2638. vibe_surf/langflow/services/database/models/user/crud.py +69 -0
  2639. vibe_surf/langflow/services/database/models/user/model.py +82 -0
  2640. vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
  2641. vibe_surf/langflow/services/database/models/variable/model.py +73 -0
  2642. vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
  2643. vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
  2644. vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
  2645. vibe_surf/langflow/services/database/service.py +485 -0
  2646. vibe_surf/langflow/services/database/session.py +62 -0
  2647. vibe_surf/langflow/services/database/utils.py +88 -0
  2648. vibe_surf/langflow/services/deps.py +259 -0
  2649. vibe_surf/langflow/services/factory.py +88 -0
  2650. vibe_surf/langflow/services/flow/__init__.py +0 -0
  2651. vibe_surf/langflow/services/flow/flow_runner.py +265 -0
  2652. vibe_surf/langflow/services/job_queue/__init__.py +0 -0
  2653. vibe_surf/langflow/services/job_queue/factory.py +11 -0
  2654. vibe_surf/langflow/services/job_queue/service.py +328 -0
  2655. vibe_surf/langflow/services/manager.py +149 -0
  2656. vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
  2657. vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
  2658. vibe_surf/langflow/services/mcp_composer/service.py +591 -0
  2659. vibe_surf/langflow/services/schema.py +23 -0
  2660. vibe_surf/langflow/services/session/__init__.py +0 -0
  2661. vibe_surf/langflow/services/session/factory.py +18 -0
  2662. vibe_surf/langflow/services/session/service.py +63 -0
  2663. vibe_surf/langflow/services/session/utils.py +18 -0
  2664. vibe_surf/langflow/services/settings/__init__.py +3 -0
  2665. vibe_surf/langflow/services/settings/auth.py +147 -0
  2666. vibe_surf/langflow/services/settings/base.py +587 -0
  2667. vibe_surf/langflow/services/settings/constants.py +34 -0
  2668. vibe_surf/langflow/services/settings/factory.py +22 -0
  2669. vibe_surf/langflow/services/settings/feature_flags.py +11 -0
  2670. vibe_surf/langflow/services/settings/manager.py +49 -0
  2671. vibe_surf/langflow/services/settings/service.py +32 -0
  2672. vibe_surf/langflow/services/settings/utils.py +40 -0
  2673. vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
  2674. vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
  2675. vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
  2676. vibe_surf/langflow/services/socket/__init__.py +0 -0
  2677. vibe_surf/langflow/services/socket/factory.py +20 -0
  2678. vibe_surf/langflow/services/socket/service.py +84 -0
  2679. vibe_surf/langflow/services/socket/utils.py +112 -0
  2680. vibe_surf/langflow/services/state/__init__.py +0 -0
  2681. vibe_surf/langflow/services/state/factory.py +16 -0
  2682. vibe_surf/langflow/services/state/service.py +82 -0
  2683. vibe_surf/langflow/services/storage/__init__.py +0 -0
  2684. vibe_surf/langflow/services/storage/constants.py +28 -0
  2685. vibe_surf/langflow/services/storage/factory.py +30 -0
  2686. vibe_surf/langflow/services/storage/local.py +127 -0
  2687. vibe_surf/langflow/services/storage/s3.py +105 -0
  2688. vibe_surf/langflow/services/storage/service.py +51 -0
  2689. vibe_surf/langflow/services/storage/utils.py +5 -0
  2690. vibe_surf/langflow/services/store/__init__.py +0 -0
  2691. vibe_surf/langflow/services/store/exceptions.py +25 -0
  2692. vibe_surf/langflow/services/store/factory.py +20 -0
  2693. vibe_surf/langflow/services/store/schema.py +74 -0
  2694. vibe_surf/langflow/services/store/service.py +600 -0
  2695. vibe_surf/langflow/services/store/utils.py +67 -0
  2696. vibe_surf/langflow/services/task/__init__.py +0 -0
  2697. vibe_surf/langflow/services/task/backends/__init__.py +0 -0
  2698. vibe_surf/langflow/services/task/backends/anyio.py +117 -0
  2699. vibe_surf/langflow/services/task/backends/base.py +15 -0
  2700. vibe_surf/langflow/services/task/backends/celery.py +29 -0
  2701. vibe_surf/langflow/services/task/factory.py +14 -0
  2702. vibe_surf/langflow/services/task/service.py +40 -0
  2703. vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
  2704. vibe_surf/langflow/services/task/utils.py +23 -0
  2705. vibe_surf/langflow/services/telemetry/__init__.py +0 -0
  2706. vibe_surf/langflow/services/telemetry/factory.py +20 -0
  2707. vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
  2708. vibe_surf/langflow/services/telemetry/schema.py +45 -0
  2709. vibe_surf/langflow/services/telemetry/service.py +281 -0
  2710. vibe_surf/langflow/services/tracing/__init__.py +0 -0
  2711. vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
  2712. vibe_surf/langflow/services/tracing/base.py +71 -0
  2713. vibe_surf/langflow/services/tracing/factory.py +20 -0
  2714. vibe_surf/langflow/services/tracing/langfuse.py +170 -0
  2715. vibe_surf/langflow/services/tracing/langsmith.py +208 -0
  2716. vibe_surf/langflow/services/tracing/langwatch.py +185 -0
  2717. vibe_surf/langflow/services/tracing/opik.py +235 -0
  2718. vibe_surf/langflow/services/tracing/schema.py +20 -0
  2719. vibe_surf/langflow/services/tracing/service.py +460 -0
  2720. vibe_surf/langflow/services/tracing/traceloop.py +244 -0
  2721. vibe_surf/langflow/services/tracing/utils.py +29 -0
  2722. vibe_surf/langflow/services/utils.py +246 -0
  2723. vibe_surf/langflow/services/variable/__init__.py +0 -0
  2724. vibe_surf/langflow/services/variable/base.py +119 -0
  2725. vibe_surf/langflow/services/variable/constants.py +2 -0
  2726. vibe_surf/langflow/services/variable/factory.py +28 -0
  2727. vibe_surf/langflow/services/variable/kubernetes.py +204 -0
  2728. vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
  2729. vibe_surf/langflow/services/variable/service.py +195 -0
  2730. vibe_surf/langflow/settings.py +12 -0
  2731. vibe_surf/langflow/template/__init__.py +10 -0
  2732. vibe_surf/langflow/template/field/__init__.py +0 -0
  2733. vibe_surf/langflow/template/field/base.py +257 -0
  2734. vibe_surf/langflow/template/field/prompt.py +2 -0
  2735. vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
  2736. vibe_surf/langflow/template/frontend_node/base.py +214 -0
  2737. vibe_surf/langflow/template/frontend_node/constants.py +65 -0
  2738. vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
  2739. vibe_surf/langflow/template/template/__init__.py +0 -0
  2740. vibe_surf/langflow/template/template/base.py +99 -0
  2741. vibe_surf/langflow/template/utils.py +217 -0
  2742. vibe_surf/langflow/type_extraction/__init__.py +0 -0
  2743. vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
  2744. vibe_surf/langflow/utils/__init__.py +0 -0
  2745. vibe_surf/langflow/utils/async_helpers.py +42 -0
  2746. vibe_surf/langflow/utils/component_utils.py +147 -0
  2747. vibe_surf/langflow/utils/compression.py +19 -0
  2748. vibe_surf/langflow/utils/concurrency.py +60 -0
  2749. vibe_surf/langflow/utils/connection_string_parser.py +8 -0
  2750. vibe_surf/langflow/utils/constants.py +205 -0
  2751. vibe_surf/langflow/utils/data_structure.py +212 -0
  2752. vibe_surf/langflow/utils/image.py +102 -0
  2753. vibe_surf/langflow/utils/lazy_load.py +15 -0
  2754. vibe_surf/langflow/utils/migration.py +61 -0
  2755. vibe_surf/langflow/utils/payload.py +84 -0
  2756. vibe_surf/langflow/utils/schemas.py +117 -0
  2757. vibe_surf/langflow/utils/template_validation.py +284 -0
  2758. vibe_surf/langflow/utils/util.py +479 -0
  2759. vibe_surf/langflow/utils/util_strings.py +56 -0
  2760. vibe_surf/langflow/utils/validate.py +489 -0
  2761. vibe_surf/langflow/utils/version.py +72 -0
  2762. vibe_surf/langflow/utils/voice_utils.py +92 -0
  2763. vibe_surf/langflow/worker.py +37 -0
  2764. vibe_surf/logger.py +3 -3
  2765. vibe_surf/telemetry/service.py +2 -1
  2766. vibe_surf/tools/browser_use_tools.py +0 -18
  2767. vibe_surf/tools/composio_client.py +4 -2
  2768. vibe_surf/tools/utils.py +1423 -1
  2769. vibe_surf/tools/vibesurf_tools.py +352 -846
  2770. vibe_surf/tools/views.py +33 -7
  2771. vibe_surf/tools/website_api/douyin/client.py +20 -4
  2772. vibe_surf/tools/website_api/weibo/client.py +13 -82
  2773. vibe_surf/tools/website_api/xhs/client.py +49 -42
  2774. vibe_surf/tools/website_api/xhs/helpers.py +3 -2
  2775. vibe_surf/tools/website_api/youtube/client.py +13 -4
  2776. vibe_surf/workflows/Browser/browser_click_element.py +189 -0
  2777. vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
  2778. vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
  2779. vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
  2780. vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
  2781. vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
  2782. vibe_surf/workflows/Browser/browser_go_back.py +45 -0
  2783. vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
  2784. vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
  2785. vibe_surf/workflows/Browser/browser_html_content.py +73 -0
  2786. vibe_surf/workflows/Browser/browser_input_text.py +169 -0
  2787. vibe_surf/workflows/Browser/browser_navigate.py +50 -0
  2788. vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
  2789. vibe_surf/workflows/Browser/browser_page_info.py +67 -0
  2790. vibe_surf/workflows/Browser/browser_press_key.py +51 -0
  2791. vibe_surf/workflows/Browser/browser_reload.py +44 -0
  2792. vibe_surf/workflows/Browser/browser_scroll.py +99 -0
  2793. vibe_surf/workflows/Browser/browser_search.py +88 -0
  2794. vibe_surf/workflows/Browser/browser_select_options.py +94 -0
  2795. vibe_surf/workflows/Browser/browser_session.py +54 -0
  2796. vibe_surf/workflows/Browser/browser_take_screenshot.py +76 -0
  2797. vibe_surf/workflows/Browser/browser_upload_file.py +178 -0
  2798. vibe_surf/workflows/Browser/browser_wait.py +46 -0
  2799. vibe_surf/workflows/Browser/close_browser_session.py +51 -0
  2800. vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
  2801. vibe_surf/workflows/FileSystem/load_json.py +136 -0
  2802. vibe_surf/workflows/Integrations/composio_api.py +279 -0
  2803. vibe_surf/workflows/Integrations/douyin.py +232 -0
  2804. vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
  2805. vibe_surf/workflows/Integrations/github_composio.py +11 -0
  2806. vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
  2807. vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
  2808. vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
  2809. vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
  2810. vibe_surf/workflows/Integrations/linear_composio.py +11 -0
  2811. vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
  2812. vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
  2813. vibe_surf/workflows/Integrations/slack_composio.py +11 -0
  2814. vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
  2815. vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
  2816. vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
  2817. vibe_surf/workflows/Integrations/weibo.py +244 -0
  2818. vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
  2819. vibe_surf/workflows/Integrations/yahoo.py +103 -0
  2820. vibe_surf/workflows/Integrations/youtube.py +251 -0
  2821. vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
  2822. vibe_surf/workflows/VibeSurf/advanced_search.py +166 -0
  2823. vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
  2824. vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
  2825. vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
  2826. vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
  2827. vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
  2828. vibesurf-0.2.9a2.dist-info/METADATA +406 -0
  2829. vibesurf-0.2.9a2.dist-info/RECORD +2916 -0
  2830. vibesurf-0.1.43.dist-info/METADATA +0 -192
  2831. vibesurf-0.1.43.dist-info/RECORD +0 -128
  2832. {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/WHEEL +0 -0
  2833. {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/entry_points.txt +0 -0
  2834. {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/licenses/LICENSE +0 -0
  2835. {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/top_level.txt +0 -0
@@ -18,13 +18,13 @@ class VibeSurfUIManager {
18
18
  this.fileManager = null;
19
19
  this.modalManager = null;
20
20
  this.voiceRecorder = null;
21
-
21
+
22
22
  // Initialize user settings storage
23
23
  this.userSettingsStorage = null;
24
-
24
+
25
25
  // Track if we're currently restoring selections to prevent override
26
26
  this.isRestoringSelections = false;
27
-
27
+
28
28
  this.bindElements();
29
29
  this.initializeTabSelector(); // Initialize tab selector before binding events
30
30
  this.initializeSkillSelector(); // Initialize skill selector
@@ -39,40 +39,41 @@ class VibeSurfUIManager {
39
39
  this.elements = {
40
40
  // Header elements
41
41
  newSessionBtn: document.getElementById('new-session-btn'),
42
+ upgradeBtn: document.getElementById('upgrade-btn'),
42
43
  historyBtn: document.getElementById('history-btn'),
43
44
  settingsBtn: document.getElementById('settings-btn'),
44
-
45
+
45
46
  // Session info
46
47
  sessionId: document.getElementById('session-id'),
47
48
  copySessionBtn: document.getElementById('copy-session-btn'),
48
-
49
+
49
50
  // Activity area
50
51
  activityLog: document.getElementById('activity-log'),
51
-
52
+
52
53
  // Control panel
53
54
  controlPanel: document.getElementById('control-panel'),
54
55
  cancelBtn: document.getElementById('cancel-btn'),
55
56
  resumeBtn: document.getElementById('resume-btn'),
56
57
  terminateBtn: document.getElementById('terminate-btn'),
57
-
58
+
58
59
  // Input area
59
60
  llmProfileSelect: document.getElementById('llm-profile-select'),
60
61
  agentModeSelect: document.getElementById('agent-mode-select'),
61
62
  taskInput: document.getElementById('task-input'),
62
63
  sendBtn: document.getElementById('send-btn'),
63
64
  voiceRecordBtn: document.getElementById('voice-record-btn'),
64
-
65
+
65
66
  // Tab selector elements
66
67
  tabSelectorDropdown: document.getElementById('tab-selector-dropdown'),
67
68
  tabSelectorCancel: document.getElementById('tab-selector-cancel'),
68
69
  tabSelectorConfirm: document.getElementById('tab-selector-confirm'),
69
70
  selectAllTabs: document.getElementById('select-all-tabs'),
70
71
  tabOptionsList: document.getElementById('tab-options-list'),
71
-
72
+
72
73
  // Skill selector elements
73
74
  skillSelectorDropdown: document.getElementById('skill-selector-dropdown'),
74
75
  skillOptionsList: document.getElementById('skill-options-list'),
75
-
76
+
76
77
  // Loading
77
78
  loadingOverlay: document.getElementById('loading-overlay')
78
79
  };
@@ -90,23 +91,23 @@ class VibeSurfUIManager {
90
91
  try {
91
92
  // Initialize modal manager first (others may depend on it)
92
93
  this.modalManager = new VibeSurfModalManager();
93
-
94
+
94
95
  // Initialize user settings storage
95
96
  this.userSettingsStorage = new VibeSurfUserSettingsStorage();
96
-
97
+
97
98
  // Initialize voice recorder
98
99
  this.voiceRecorder = new VibeSurfVoiceRecorder(this.apiClient);
99
100
  this.setupVoiceRecorderCallbacks();
100
-
101
+
101
102
  // Initialize other managers
102
103
  this.settingsManager = new VibeSurfSettingsManager(this.apiClient);
103
104
  this.historyManager = new VibeSurfHistoryManager(this.apiClient);
104
105
  this.fileManager = new VibeSurfFileManager(this.sessionManager);
105
-
106
+
106
107
  // Set up inter-manager communication
107
108
  this.setupManagerEvents();
108
-
109
-
109
+
110
+
110
111
  } catch (error) {
111
112
  console.error('[UIManager] Failed to initialize managers:', error);
112
113
  this.showNotification('Failed to initialize UI components', 'error');
@@ -121,15 +122,15 @@ class VibeSurfUIManager {
121
122
  if (!this.isRestoringSelections) {
122
123
  this.updateLLMProfileSelect();
123
124
  }
124
-
125
+
125
126
  // Also update voice button state when profiles are updated (ASR profiles might have changed)
126
127
  this.updateVoiceButtonState();
127
128
  });
128
-
129
+
129
130
  this.settingsManager.on('notification', (data) => {
130
131
  this.showNotification(data.message, data.type);
131
132
  });
132
-
133
+
133
134
  this.settingsManager.on('loading', (data) => {
134
135
  if (data.hide) {
135
136
  this.hideLoading();
@@ -137,12 +138,12 @@ class VibeSurfUIManager {
137
138
  this.showLoading(data.message);
138
139
  }
139
140
  });
140
-
141
+
141
142
  this.settingsManager.on('error', (data) => {
142
143
  console.error('[UIManager] Settings error:', data.error);
143
144
  this.showNotification(data.message || 'Settings error occurred', 'error');
144
145
  });
145
-
146
+
146
147
  this.settingsManager.on('confirmDeletion', (data) => {
147
148
  this.modalManager.showConfirmModal(
148
149
  'Delete Profile',
@@ -157,12 +158,12 @@ class VibeSurfUIManager {
157
158
  }
158
159
  );
159
160
  });
160
-
161
+
161
162
  this.settingsManager.on('selectNewDefault', (data) => {
162
163
  const options = data.otherProfiles.map(profile =>
163
164
  `<option value="${profile.profile_name}">${profile.profile_name}</option>`
164
165
  ).join('');
165
-
166
+
166
167
  const modalData = this.modalManager.createModal(`
167
168
  <div class="select-default-modal">
168
169
  <p>You are deleting the default LLM profile. Please select a new default profile:</p>
@@ -177,11 +178,11 @@ class VibeSurfUIManager {
177
178
  `, {
178
179
  title: 'Select New Default Profile'
179
180
  });
180
-
181
+
181
182
  const select = document.getElementById('new-default-select');
182
183
  const confirmBtn = modalData.modal.querySelector('.confirm-btn');
183
184
  const cancelBtn = modalData.modal.querySelector('.cancel-btn');
184
-
185
+
185
186
  confirmBtn.addEventListener('click', () => {
186
187
  const newDefaultId = select.value;
187
188
  if (newDefaultId && data.callback) {
@@ -189,17 +190,17 @@ class VibeSurfUIManager {
189
190
  }
190
191
  modalData.close();
191
192
  });
192
-
193
+
193
194
  cancelBtn.addEventListener('click', () => {
194
195
  modalData.close();
195
196
  });
196
197
  });
197
-
198
+
198
199
  // History Manager Events
199
200
  this.historyManager.on('loadSession', (data) => {
200
201
  this.loadSession(data.sessionId);
201
202
  });
202
-
203
+
203
204
  this.historyManager.on('loading', (data) => {
204
205
  if (data.hide) {
205
206
  this.hideLoading();
@@ -207,16 +208,16 @@ class VibeSurfUIManager {
207
208
  this.showLoading(data.message);
208
209
  }
209
210
  });
210
-
211
+
211
212
  this.historyManager.on('notification', (data) => {
212
213
  this.showNotification(data.message, data.type);
213
214
  });
214
-
215
+
215
216
  this.historyManager.on('error', (data) => {
216
217
  console.error('[UIManager] History error:', data.error);
217
218
  this.showNotification(data.message || 'History error occurred', 'error');
218
219
  });
219
-
220
+
220
221
  // File Manager Events
221
222
  this.fileManager.on('loading', (data) => {
222
223
  if (data.hide) {
@@ -225,16 +226,16 @@ class VibeSurfUIManager {
225
226
  this.showLoading(data.message);
226
227
  }
227
228
  });
228
-
229
+
229
230
  this.fileManager.on('notification', (data) => {
230
231
  this.showNotification(data.message, data.type);
231
232
  });
232
-
233
+
233
234
  this.fileManager.on('error', (data) => {
234
235
  console.error('[UIManager] File error:', data.error);
235
236
  this.showNotification(data.message || 'File error occurred', 'error');
236
237
  });
237
-
238
+
238
239
  // Modal Manager Events (if needed for future extensions)
239
240
  this.modalManager.on('modalClosed', (data) => {
240
241
  // Handle modal close events if needed
@@ -277,7 +278,7 @@ class VibeSurfUIManager {
277
278
  this.elements.voiceRecordBtn.classList.remove('recording');
278
279
  this.elements.voiceRecordBtn.setAttribute('title', 'Voice Input');
279
280
  this.elements.voiceRecordBtn.setAttribute('data-tooltip', 'Click to start voice recording');
280
-
281
+
281
282
  // Clear duration display
282
283
  this.updateRecordingDuration('0:00', 0);
283
284
  }
@@ -289,7 +290,7 @@ class VibeSurfUIManager {
289
290
  if (this.elements.voiceRecordBtn) {
290
291
  // Update the tooltip with duration
291
292
  this.elements.voiceRecordBtn.setAttribute('data-tooltip', `Recording... ${formattedDuration} - Click to stop`);
292
-
293
+
293
294
  // Create or update duration display element
294
295
  let durationElement = this.elements.voiceRecordBtn.querySelector('.recording-duration');
295
296
  if (!durationElement) {
@@ -297,7 +298,7 @@ class VibeSurfUIManager {
297
298
  durationElement.className = 'recording-duration';
298
299
  this.elements.voiceRecordBtn.appendChild(durationElement);
299
300
  }
300
-
301
+
301
302
  durationElement.textContent = formattedDuration;
302
303
  }
303
304
  }
@@ -312,29 +313,29 @@ class VibeSurfUIManager {
312
313
  // Insert transcribed text into the input field
313
314
  const currentValue = this.elements.taskInput.value;
314
315
  const cursorPosition = this.elements.taskInput.selectionStart;
315
-
316
+
316
317
  // Insert at cursor position or append to end
317
318
  const beforeCursor = currentValue.substring(0, cursorPosition);
318
319
  const afterCursor = currentValue.substring(cursorPosition);
319
320
  const newValue = beforeCursor + transcribedText + afterCursor;
320
-
321
+
321
322
  this.elements.taskInput.value = newValue;
322
-
323
+
323
324
  // Trigger input change event for validation and auto-resize
324
325
  this.handleTaskInputChange({ target: this.elements.taskInput });
325
-
326
+
326
327
  // Set cursor position after the inserted text
327
328
  const newCursorPosition = cursorPosition + transcribedText.length;
328
329
  this.elements.taskInput.setSelectionRange(newCursorPosition, newCursorPosition);
329
330
  this.elements.taskInput.focus();
330
-
331
+
331
332
  this.showNotification('Voice transcription completed', 'success');
332
333
  }
333
334
 
334
335
  // Handle transcription errors
335
336
  handleTranscriptionError(errorMessage, errorType) {
336
337
  let userMessage = 'Voice transcription failed';
337
-
338
+
338
339
  if (errorType === 'recording') {
339
340
  userMessage = `Recording failed: ${errorMessage}`;
340
341
  } else if (errorType === 'transcription') {
@@ -344,45 +345,46 @@ class VibeSurfUIManager {
344
345
  userMessage = `Transcription failed: ${errorMessage}`;
345
346
  }
346
347
  }
347
-
348
+
348
349
  this.showNotification(userMessage, 'error');
349
350
  }
350
351
 
351
352
  bindEvents() {
352
353
  // Header buttons
353
354
  this.elements.newSessionBtn?.addEventListener('click', this.handleNewSession.bind(this));
355
+ this.elements.upgradeBtn?.addEventListener('click', this.handleUpgrade.bind(this));
354
356
  this.elements.historyBtn?.addEventListener('click', this.handleShowHistory.bind(this));
355
357
  this.elements.settingsBtn?.addEventListener('click', this.handleShowSettings.bind(this));
356
-
358
+
357
359
  // Session controls
358
360
  this.elements.copySessionBtn?.addEventListener('click', this.handleCopySession.bind(this));
359
-
361
+
360
362
  // Task controls
361
363
  this.elements.cancelBtn?.addEventListener('click', this.handleCancelTask.bind(this));
362
364
  this.elements.resumeBtn?.addEventListener('click', this.handleResumeTask.bind(this));
363
365
  this.elements.terminateBtn?.addEventListener('click', this.handleTerminateTask.bind(this));
364
-
366
+
365
367
  // Input handling
366
368
  this.elements.sendBtn?.addEventListener('click', this.handleSendTask.bind(this));
367
369
  this.elements.voiceRecordBtn?.addEventListener('click', this.handleVoiceRecord.bind(this));
368
-
370
+
369
371
  // Task input handling
370
372
  this.elements.taskInput?.addEventListener('keydown', this.handleTaskInputKeydown.bind(this));
371
373
  this.elements.taskInput?.addEventListener('input', this.handleTaskInputChange.bind(this));
372
-
374
+
373
375
  // LLM profile selection handling
374
376
  this.elements.llmProfileSelect?.addEventListener('change', this.handleLlmProfileChange.bind(this));
375
-
377
+
376
378
  // Agent mode selection handling
377
379
  this.elements.agentModeSelect?.addEventListener('change', this.handleAgentModeChange.bind(this));
378
-
380
+
379
381
  // Initialize auto-resize for textarea
380
382
  if (this.elements.taskInput) {
381
383
  this.autoResizeTextarea(this.elements.taskInput);
382
384
  // Set initial send button state
383
385
  this.handleTaskInputChange({ target: this.elements.taskInput });
384
386
  }
385
-
387
+
386
388
  // Bind initial task suggestions if present
387
389
  this.bindTaskSuggestionEvents();
388
390
  }
@@ -401,7 +403,7 @@ class VibeSurfUIManager {
401
403
  this.sessionManager.on('pollingStopped', this.handlePollingStopped.bind(this));
402
404
  this.sessionManager.on('sessionError', this.handleSessionError.bind(this));
403
405
  this.sessionManager.on('taskError', this.handleTaskError.bind(this));
404
-
406
+
405
407
  // Start periodic task status check
406
408
  this.startTaskStatusMonitoring();
407
409
  }
@@ -417,11 +419,11 @@ class VibeSurfUIManager {
417
419
  handleSessionLoaded(data) {
418
420
  // Update session display
419
421
  this.updateSessionDisplay(data.sessionId);
420
-
422
+
421
423
  // Load and display activity logs
422
424
  const activityLogs = this.sessionManager.getActivityLogs();
423
425
  this.displayActivityLogs(activityLogs);
424
-
426
+
425
427
  // Update control panel
426
428
  const taskStatus = this.sessionManager.getTaskStatus();
427
429
  if (taskStatus) {
@@ -430,7 +432,7 @@ class VibeSurfUIManager {
430
432
  }
431
433
 
432
434
  handleTaskSubmitted(data) {
433
-
435
+
434
436
  this.updateControlPanel('running');
435
437
  this.clearTaskInput();
436
438
  }
@@ -455,26 +457,26 @@ class VibeSurfUIManager {
455
457
  }
456
458
 
457
459
  handleTaskCompleted(data) {
458
-
459
-
460
+
461
+
460
462
  const message = data.status === 'done' ? 'Task completed successfully!' : 'Task completed with errors';
461
463
  const type = data.status === 'done' ? 'success' : 'error';
462
-
464
+
463
465
  // Check if we need to respect minimum visibility period
464
466
  if (this.controlPanelMinVisibilityActive) {
465
-
467
+
466
468
  const remainingTime = 1000;
467
469
  setTimeout(() => {
468
-
470
+
469
471
  this.updateControlPanel('ready');
470
472
  }, remainingTime);
471
473
  } else {
472
-
474
+
473
475
  this.updateControlPanel('ready');
474
476
  }
475
-
477
+
476
478
  this.showNotification(message, type);
477
-
479
+
478
480
  // Clear uploaded files when task is completed
479
481
  this.fileManager.clearUploadedFiles();
480
482
  }
@@ -499,17 +501,17 @@ class VibeSurfUIManager {
499
501
 
500
502
  handleTaskError(data) {
501
503
  console.error('[UIManager] Task error:', data.error);
502
-
503
-
504
+
505
+
504
506
  // Check if this is an LLM connection failure
505
507
  if (data.error && typeof data.error === 'object' && data.error.error === 'llm_connection_failed') {
506
-
508
+
507
509
  // Show LLM connection failed modal instead of generic notification
508
510
  this.showLLMConnectionFailedModal(data.error);
509
511
  this.updateControlPanel('ready'); // Reset UI since task failed to start
510
512
  return;
511
513
  } else if (data.error && typeof data.error === 'string' && data.error.includes('llm_connection_failed')) {
512
-
514
+
513
515
  // Handle case where error is a string containing the error type
514
516
  this.showLLMConnectionFailedModal({
515
517
  message: data.error,
@@ -518,20 +520,20 @@ class VibeSurfUIManager {
518
520
  this.updateControlPanel('ready'); // Reset UI since task failed to start
519
521
  return;
520
522
  }
521
-
523
+
522
524
  // Default error handling for other types of errors
523
525
  this.showNotification(`Task error: ${data.error}`, 'error');
524
-
526
+
525
527
  this.updateControlPanel('error');
526
-
528
+
527
529
  // Optional: Verify task status after a delay
528
530
  setTimeout(() => {
529
531
  this.checkTaskStatus().then(status => {
530
532
  if (!status.isRunning) {
531
-
533
+
532
534
  this.updateControlPanel('ready');
533
535
  } else {
534
-
536
+
535
537
  }
536
538
  }).catch(err => {
537
539
  console.warn('[UIManager] Could not verify task status after error:', err);
@@ -544,15 +546,15 @@ class VibeSurfUIManager {
544
546
  try {
545
547
  const statusCheck = await this.apiClient.checkTaskRunning();
546
548
  const wasRunning = this.state.isTaskRunning;
547
-
549
+
548
550
  this.state.isTaskRunning = statusCheck.isRunning;
549
551
  this.state.taskInfo = statusCheck.taskInfo;
550
-
552
+
551
553
  // Update UI state when task status changes
552
554
  if (wasRunning !== statusCheck.isRunning) {
553
555
  this.updateUIForTaskStatus(statusCheck.isRunning);
554
556
  }
555
-
557
+
556
558
  return statusCheck;
557
559
  } catch (error) {
558
560
  console.error('[UIManager] Failed to check task status:', error);
@@ -577,7 +579,7 @@ class VibeSurfUIManager {
577
579
  updateUIForTaskStatus(isRunning) {
578
580
  const taskStatus = this.sessionManager.getTaskStatus();
579
581
  const isPaused = taskStatus === 'paused';
580
-
582
+
581
583
  // Disable/enable input elements based on task status
582
584
  if (this.elements.taskInput) {
583
585
  // Allow input when paused or not running
@@ -590,22 +592,22 @@ class VibeSurfUIManager {
590
592
  this.elements.taskInput.placeholder = 'Ask anything (/ for skills, @ to specify tab)';
591
593
  }
592
594
  }
593
-
595
+
594
596
  if (this.elements.sendBtn) {
595
597
  // Enable send button when paused or when can submit new task
596
598
  this.elements.sendBtn.disabled = (isRunning && !isPaused) || (!isPaused && !this.canSubmitTask()) || (isPaused && !this.canAddNewTask());
597
599
  }
598
-
600
+
599
601
  if (this.elements.llmProfileSelect) {
600
602
  // Allow LLM profile change only when not running
601
603
  this.elements.llmProfileSelect.disabled = isRunning && !isPaused;
602
604
  }
603
-
605
+
604
606
  if (this.elements.agentModeSelect) {
605
607
  // Allow agent mode change only when not running
606
608
  this.elements.agentModeSelect.disabled = isRunning && !isPaused;
607
609
  }
608
-
610
+
609
611
  // Update voice record button state - disable during task execution unless paused
610
612
  if (this.elements.voiceRecordBtn) {
611
613
  const shouldDisableVoice = isRunning && !isPaused;
@@ -622,17 +624,17 @@ class VibeSurfUIManager {
622
624
  }
623
625
  }
624
626
  }
625
-
627
+
626
628
  // Update file manager state - keep disabled during pause (as per requirement)
627
629
  this.fileManager.setEnabled(!isRunning);
628
-
630
+
629
631
  // Also disable header buttons when task is running (but not when paused)
630
632
  const headerButtons = [
631
633
  this.elements.newSessionBtn,
632
634
  this.elements.historyBtn,
633
635
  this.elements.settingsBtn
634
636
  ];
635
-
637
+
636
638
  headerButtons.forEach(button => {
637
639
  if (button) {
638
640
  const shouldDisable = isRunning && !isPaused;
@@ -649,45 +651,45 @@ class VibeSurfUIManager {
649
651
  }
650
652
 
651
653
  forceUpdateUIForPausedState() {
652
-
654
+
653
655
  // Enable input during pause
654
656
  if (this.elements.taskInput) {
655
657
  this.elements.taskInput.disabled = false;
656
658
  this.elements.taskInput.placeholder = 'Add additional information or guidance...';
657
659
  }
658
-
660
+
659
661
  if (this.elements.sendBtn) {
660
662
  const hasText = this.elements.taskInput?.value.trim().length > 0;
661
663
  this.elements.sendBtn.disabled = !hasText;
662
664
  }
663
-
665
+
664
666
  // Enable voice record button during pause
665
667
  if (this.elements.voiceRecordBtn) {
666
668
  this.elements.voiceRecordBtn.disabled = false;
667
669
  this.elements.voiceRecordBtn.classList.remove('task-running-disabled');
668
670
  this.elements.voiceRecordBtn.setAttribute('title', 'Click to start voice recording');
669
671
  }
670
-
672
+
671
673
  // Keep LLM profile disabled during pause (user doesn't need to change it)
672
674
  if (this.elements.llmProfileSelect) {
673
675
  this.elements.llmProfileSelect.disabled = true;
674
676
  }
675
-
677
+
676
678
  // Keep agent mode disabled during pause (user doesn't need to change it)
677
679
  if (this.elements.agentModeSelect) {
678
680
  this.elements.agentModeSelect.disabled = true;
679
681
  }
680
-
682
+
681
683
  // Keep file manager disabled during pause
682
684
  this.fileManager.setEnabled(false);
683
-
685
+
684
686
  // Keep header buttons disabled during pause (only input, send, and voice should be available)
685
687
  const headerButtons = [
686
688
  this.elements.newSessionBtn,
687
689
  this.elements.historyBtn,
688
690
  this.elements.settingsBtn
689
691
  ];
690
-
692
+
691
693
  headerButtons.forEach(button => {
692
694
  if (button) {
693
695
  button.disabled = true;
@@ -698,43 +700,43 @@ class VibeSurfUIManager {
698
700
  }
699
701
 
700
702
  forceUpdateUIForRunningState() {
701
-
702
-
703
+
704
+
703
705
  // Disable input during running
704
706
  if (this.elements.taskInput) {
705
707
  this.elements.taskInput.disabled = true;
706
708
  this.elements.taskInput.placeholder = 'Task is running - please wait...';
707
709
  }
708
-
710
+
709
711
  if (this.elements.sendBtn) {
710
712
  this.elements.sendBtn.disabled = true;
711
713
  }
712
-
714
+
713
715
  if (this.elements.llmProfileSelect) {
714
716
  this.elements.llmProfileSelect.disabled = true;
715
717
  }
716
-
718
+
717
719
  if (this.elements.agentModeSelect) {
718
720
  this.elements.agentModeSelect.disabled = true;
719
721
  }
720
-
722
+
721
723
  // Disable voice record button during running
722
724
  if (this.elements.voiceRecordBtn) {
723
725
  this.elements.voiceRecordBtn.disabled = true;
724
726
  this.elements.voiceRecordBtn.classList.add('task-running-disabled');
725
727
  this.elements.voiceRecordBtn.setAttribute('title', 'Voice input disabled while task is running');
726
728
  }
727
-
729
+
728
730
  // Update file manager state
729
731
  this.fileManager.setEnabled(false);
730
-
732
+
731
733
  // Disable header buttons when task is running
732
734
  const headerButtons = [
733
735
  this.elements.newSessionBtn,
734
736
  this.elements.historyBtn,
735
737
  this.elements.settingsBtn
736
738
  ];
737
-
739
+
738
740
  headerButtons.forEach(button => {
739
741
  if (button) {
740
742
  button.disabled = true;
@@ -760,7 +762,7 @@ class VibeSurfUIManager {
760
762
  const taskInfo = this.state.taskInfo;
761
763
  const taskId = taskInfo?.task_id || 'unknown';
762
764
  const sessionId = taskInfo?.session_id || 'unknown';
763
-
765
+
764
766
  return this.modalManager.showConfirmModalAsync(
765
767
  'Task Currently Running',
766
768
  `A task is currently ${taskInfo?.status || 'running'}. You must stop the current task before you can ${action}.`,
@@ -789,12 +791,12 @@ class VibeSurfUIManager {
789
791
  const canProceed = await this.showTaskRunningWarning('create a new session');
790
792
  if (!canProceed) return;
791
793
  }
792
-
794
+
793
795
  try {
794
796
  this.showLoading('Creating new session...');
795
-
797
+
796
798
  const sessionId = await this.sessionManager.createSession();
797
-
799
+
798
800
  this.hideLoading();
799
801
  } catch (error) {
800
802
  this.hideLoading();
@@ -809,7 +811,7 @@ class VibeSurfUIManager {
809
811
  const canProceed = await this.showTaskRunningWarning('view session history');
810
812
  if (!canProceed) return;
811
813
  }
812
-
814
+
813
815
  this.historyManager.showHistory();
814
816
  }
815
817
 
@@ -820,7 +822,7 @@ class VibeSurfUIManager {
820
822
  const canProceed = await this.showTaskRunningWarning('access settings');
821
823
  if (!canProceed) return;
822
824
  }
823
-
825
+
824
826
  this.settingsManager.showSettings();
825
827
  }
826
828
 
@@ -831,10 +833,10 @@ class VibeSurfUIManager {
831
833
  const canProceed = await this.showTaskRunningWarning('access settings');
832
834
  if (!canProceed) return;
833
835
  }
834
-
836
+
835
837
  // Show settings and navigate directly to LLM profiles tab
836
838
  this.settingsManager.showSettings();
837
-
839
+
838
840
  // Switch to LLM profiles tab after settings are shown
839
841
  setTimeout(() => {
840
842
  const llmTab = document.querySelector('.settings-tab[data-tab="llm-profiles"]');
@@ -846,12 +848,12 @@ class VibeSurfUIManager {
846
848
 
847
849
  async handleCopySession() {
848
850
  const sessionId = this.sessionManager.getCurrentSessionId();
849
-
851
+
850
852
  if (!sessionId) {
851
853
  this.showNotification('No active session to copy', 'warning');
852
854
  return;
853
855
  }
854
-
856
+
855
857
  try {
856
858
  await navigator.clipboard.writeText(sessionId);
857
859
  this.showNotification('Session ID copied to clipboard!', 'success');
@@ -861,6 +863,47 @@ class VibeSurfUIManager {
861
863
  }
862
864
  }
863
865
 
866
+ // Upgrade Handler
867
+ async handleUpgrade() {
868
+ try {
869
+ console.log('[UIManager] Starting extension upgrade...');
870
+
871
+ // Download the latest extension zip from GitHub releases
872
+ const downloadUrl = 'https://github.com/vibesurf-ai/VibeSurf/releases/latest/download/vibesurf-extension.zip';
873
+
874
+ // Open download URL in new tab
875
+ const downloadResult = await chrome.runtime.sendMessage({
876
+ type: 'OPEN_FILE_URL',
877
+ data: { fileUrl: downloadUrl }
878
+ });
879
+
880
+ if (!downloadResult || !downloadResult.success) {
881
+ throw new Error(downloadResult?.error || 'Failed to open download URL');
882
+ }
883
+
884
+ console.log('[UIManager] Successfully opened download tab:', downloadResult.tabId);
885
+
886
+ // Also open chrome://extensions in a new tab
887
+ const extensionsResult = await chrome.runtime.sendMessage({
888
+ type: 'OPEN_FILE_URL',
889
+ data: { fileUrl: 'chrome://extensions' }
890
+ });
891
+
892
+ if (!extensionsResult || !extensionsResult.success) {
893
+ console.warn('[UIManager] Failed to open chrome://extensions:', extensionsResult?.error);
894
+ // Don't throw error here as download was successful
895
+ } else {
896
+ console.log('[UIManager] Successfully opened chrome://extensions tab:', extensionsResult.tabId);
897
+ }
898
+
899
+ this.showNotification('Extension download started and chrome://extensions opened. Please follow the installation instructions.', 'info');
900
+
901
+ } catch (error) {
902
+ console.error('[UIManager] Upgrade failed:', error);
903
+ this.showNotification(`Failed to start upgrade: ${error.message}`, 'error');
904
+ }
905
+ }
906
+
864
907
  // Voice Recording UI Handler
865
908
  async handleVoiceRecord() {
866
909
  // Check if voice recording is supported
@@ -880,12 +923,12 @@ class VibeSurfUIManager {
880
923
  // Enhanced task status check - disable recording during task execution unless paused
881
924
  const taskStatus = this.sessionManager.getTaskStatus();
882
925
  const isTaskRunning = this.state.isTaskRunning;
883
-
926
+
884
927
  if (isTaskRunning && taskStatus !== 'paused') {
885
928
  this.showNotification('Cannot record voice while task is running. Stop the current task or wait for it to complete.', 'warning');
886
929
  return;
887
930
  }
888
-
931
+
889
932
  // Additional check: if task is paused, allow voice input but show info message
890
933
  if (isTaskRunning && taskStatus === 'paused') {
891
934
  console.log('[UIManager] Task is paused, allowing voice input');
@@ -906,15 +949,15 @@ class VibeSurfUIManager {
906
949
  } else {
907
950
  // Start recording
908
951
  console.log('[UIManager] Starting voice recording');
909
-
952
+
910
953
  // Request microphone permission first
911
954
  try {
912
955
  // For Chrome extensions, ensure we have proper user gesture context
913
956
  console.log('[UIManager] Requesting microphone permission with user gesture context');
914
-
957
+
915
958
  // Add a small delay to ensure user gesture is properly registered
916
959
  await new Promise(resolve => setTimeout(resolve, 100));
917
-
960
+
918
961
  const hasPermission = await this.voiceRecorder.requestMicrophonePermission();
919
962
  if (!hasPermission) {
920
963
  this.showNotification('Microphone permission denied. Please allow microphone access to use voice input.', 'error');
@@ -922,11 +965,11 @@ class VibeSurfUIManager {
922
965
  }
923
966
  } catch (permissionError) {
924
967
  console.error('[UIManager] Microphone permission error:', permissionError);
925
-
968
+
926
969
  // Handle different types of permission errors with detailed guidance
927
970
  let errorMessage = 'Microphone permission denied';
928
971
  let detailedHelp = '';
929
-
972
+
930
973
  if (permissionError.name === 'MicrophonePermissionError') {
931
974
  errorMessage = permissionError.message;
932
975
  if (permissionError.userAction) {
@@ -939,11 +982,11 @@ class VibeSurfUIManager {
939
982
  errorMessage = `Microphone access error: ${permissionError.message}`;
940
983
  detailedHelp = 'Please ensure your browser allows microphone access and that a microphone is connected.';
941
984
  }
942
-
985
+
943
986
  // Show detailed error message
944
987
  const fullMessage = detailedHelp ? `${errorMessage}\n\n${detailedHelp}` : errorMessage;
945
988
  this.showNotification(fullMessage, 'error');
946
-
989
+
947
990
  // Also log detailed error for debugging
948
991
  console.error('[UIManager] Detailed microphone permission error:', {
949
992
  name: permissionError.name,
@@ -951,7 +994,7 @@ class VibeSurfUIManager {
951
994
  userAction: permissionError.userAction,
952
995
  originalError: permissionError.originalError
953
996
  });
954
-
997
+
955
998
  this.updateVoiceRecordingUI(false);
956
999
  return;
957
1000
  }
@@ -968,7 +1011,7 @@ class VibeSurfUIManager {
968
1011
 
969
1012
  async handleSendTask() {
970
1013
  const taskDescription = this.elements.taskInput?.value.trim();
971
-
1014
+
972
1015
  if (!taskDescription) {
973
1016
  this.showNotification('Please enter a task description', 'warning');
974
1017
  this.elements.taskInput?.focus();
@@ -984,20 +1027,20 @@ class VibeSurfUIManager {
984
1027
 
985
1028
  if (isPaused) {
986
1029
  // Handle adding new task to paused execution
987
-
1030
+
988
1031
  await this.sessionManager.addNewTaskToPaused(taskDescription);
989
-
1032
+
990
1033
  // Clear the input after successful addition
991
1034
  this.clearTaskInput();
992
1035
  this.showNotification('Additional information added to the task', 'success');
993
-
1036
+
994
1037
  // Automatically resume the task after adding new information
995
-
1038
+
996
1039
  await this.sessionManager.resumeTask('Auto-resume after adding new task information');
997
-
1040
+
998
1041
  return;
999
1042
  }
1000
-
1043
+
1001
1044
  // For non-paused states, check if any task is running
1002
1045
  const statusCheck = await this.checkTaskStatus();
1003
1046
  if (statusCheck.isRunning) {
@@ -1007,9 +1050,9 @@ class VibeSurfUIManager {
1007
1050
  return;
1008
1051
  }
1009
1052
  }
1010
-
1053
+
1011
1054
  const llmProfile = this.elements.llmProfileSelect?.value;
1012
-
1055
+
1013
1056
  // Check if LLM profile is selected
1014
1057
  if (!llmProfile || llmProfile.trim() === '') {
1015
1058
  // Check if there are any LLM profiles available
@@ -1023,38 +1066,38 @@ class VibeSurfUIManager {
1023
1066
  }
1024
1067
  return;
1025
1068
  }
1026
-
1069
+
1027
1070
  // Immediately clear welcome message and show user request
1028
1071
  this.clearWelcomeMessage();
1029
-
1072
+
1030
1073
  const taskData = {
1031
1074
  task_description: taskDescription,
1032
1075
  llm_profile_name: llmProfile,
1033
1076
  agent_mode: this.elements.agentModeSelect?.value || 'thinking'
1034
1077
  };
1035
-
1078
+
1036
1079
  // Add uploaded files path if any
1037
1080
  const filePath = this.fileManager.getUploadedFilesForTask();
1038
1081
  if (filePath) {
1039
1082
  taskData.upload_files_path = filePath;
1040
-
1083
+
1041
1084
  }
1042
-
1085
+
1043
1086
  // Add selected tabs information if any
1044
1087
  const selectedTabsData = this.getSelectedTabsForTask();
1045
1088
  if (selectedTabsData) {
1046
1089
  taskData.selected_tabs = selectedTabsData;
1047
1090
  }
1048
-
1091
+
1049
1092
  // Add selected skills information if any
1050
1093
  const selectedSkillsData = this.getSelectedSkillsForTask();
1051
1094
  if (selectedSkillsData) {
1052
1095
  taskData.selected_skills = selectedSkillsData;
1053
1096
  }
1054
-
1055
-
1097
+
1098
+
1056
1099
  await this.sessionManager.submitTask(taskData);
1057
-
1100
+
1058
1101
  // Clear uploaded files after successful task submission
1059
1102
  this.fileManager.clearUploadedFiles();
1060
1103
  } catch (error) {
@@ -1090,9 +1133,9 @@ class VibeSurfUIManager {
1090
1133
  if (wasMonitoring) {
1091
1134
  this.stopTaskStatusMonitoring();
1092
1135
  }
1093
-
1136
+
1094
1137
  await this.sessionManager.stopTask('User clicked terminate');
1095
-
1138
+
1096
1139
  // Restart monitoring after a brief delay if it was running
1097
1140
  if (wasMonitoring) {
1098
1141
  setTimeout(() => {
@@ -1113,7 +1156,7 @@ class VibeSurfUIManager {
1113
1156
  this.handleSendTask();
1114
1157
  return;
1115
1158
  }
1116
-
1159
+
1117
1160
  // Handle tab token deletion
1118
1161
  if (event.key === 'Backspace' || event.key === 'Delete') {
1119
1162
  if (this.handleTabTokenDeletion(event)) {
@@ -1140,14 +1183,14 @@ class VibeSurfUIManager {
1140
1183
  const input = event.target;
1141
1184
  const cursorPos = input.selectionStart;
1142
1185
  const text = input.value;
1143
-
1186
+
1144
1187
  // Unicode markers for tab tokens
1145
1188
  const startMarker = '\u200B'; // Zero-width space
1146
1189
  const endMarker = '\u200C'; // Zero-width non-joiner
1147
-
1190
+
1148
1191
  let tokenStart = -1;
1149
1192
  let tokenEnd = -1;
1150
-
1193
+
1151
1194
  if (event.key === 'Backspace') {
1152
1195
  // Only delete if cursor is directly adjacent to end of token
1153
1196
  // Check if the character immediately before cursor is an endMarker
@@ -1175,20 +1218,20 @@ class VibeSurfUIManager {
1175
1218
  }
1176
1219
  }
1177
1220
  }
1178
-
1221
+
1179
1222
  // If we found a complete token, delete it
1180
1223
  if (tokenStart !== -1 && tokenEnd !== -1) {
1181
1224
  const beforeToken = text.substring(0, tokenStart);
1182
1225
  const afterToken = text.substring(tokenEnd);
1183
1226
  input.value = beforeToken + afterToken;
1184
1227
  input.setSelectionRange(tokenStart, tokenStart);
1185
-
1228
+
1186
1229
  // Trigger input change event for validation
1187
1230
  this.handleTaskInputChange({ target: input });
1188
-
1231
+
1189
1232
  return true; // Prevent default behavior
1190
1233
  }
1191
-
1234
+
1192
1235
  return false; // Allow default behavior
1193
1236
  }
1194
1237
 
@@ -1196,14 +1239,14 @@ class VibeSurfUIManager {
1196
1239
  const input = event.target;
1197
1240
  const cursorPos = input.selectionStart;
1198
1241
  const text = input.value;
1199
-
1242
+
1200
1243
  // Unicode markers for skill tokens
1201
1244
  const startMarker = '\u200D'; // Zero-width joiner
1202
1245
  const endMarker = '\u200E'; // Left-to-right mark
1203
-
1246
+
1204
1247
  let tokenStart = -1;
1205
1248
  let tokenEnd = -1;
1206
-
1249
+
1207
1250
  if (event.key === 'Backspace') {
1208
1251
  // Only delete if cursor is directly adjacent to end of token
1209
1252
  if (cursorPos > 0 && text[cursorPos - 1] === endMarker) {
@@ -1229,49 +1272,49 @@ class VibeSurfUIManager {
1229
1272
  }
1230
1273
  }
1231
1274
  }
1232
-
1275
+
1233
1276
  // If we found a complete token, delete it
1234
1277
  if (tokenStart !== -1 && tokenEnd !== -1) {
1235
1278
  const beforeToken = text.substring(0, tokenStart);
1236
1279
  const afterToken = text.substring(tokenEnd);
1237
1280
  input.value = beforeToken + afterToken;
1238
1281
  input.setSelectionRange(tokenStart, tokenStart);
1239
-
1282
+
1240
1283
  // Trigger input change event for validation
1241
1284
  this.handleTaskInputChange({ target: input });
1242
-
1285
+
1243
1286
  return true; // Prevent default behavior
1244
1287
  }
1245
-
1288
+
1246
1289
  return false; // Allow default behavior
1247
1290
  }
1248
1291
 
1249
1292
  async handleLlmProfileChange(event) {
1250
1293
  const selectedProfile = event.target.value;
1251
-
1252
-
1253
-
1294
+
1295
+
1296
+
1254
1297
  try {
1255
1298
  // Save the selected LLM profile to user settings storage
1256
1299
  if (this.userSettingsStorage) {
1257
-
1300
+
1258
1301
  await this.userSettingsStorage.setSelectedLlmProfile(selectedProfile);
1259
-
1260
-
1302
+
1303
+
1261
1304
  // Verify the save
1262
1305
  const verified = await this.userSettingsStorage.getSelectedLlmProfile();
1263
-
1264
-
1306
+
1307
+
1265
1308
  // Also save to localStorage as backup for browser restart scenarios
1266
1309
  localStorage.setItem('vibesurf-llm-profile-backup', selectedProfile);
1267
-
1310
+
1268
1311
  } else {
1269
1312
  console.warn('[UIManager] userSettingsStorage not available for LLM profile save');
1270
1313
  }
1271
1314
  } catch (error) {
1272
1315
  console.error('[UIManager] Failed to save LLM profile selection:', error);
1273
1316
  }
1274
-
1317
+
1275
1318
  // Re-validate send button state when LLM profile changes
1276
1319
  if (this.elements.taskInput) {
1277
1320
  this.handleTaskInputChange({ target: this.elements.taskInput });
@@ -1280,30 +1323,30 @@ class VibeSurfUIManager {
1280
1323
 
1281
1324
  async handleAgentModeChange(event) {
1282
1325
  const selectedMode = event.target.value;
1283
-
1284
-
1285
-
1326
+
1327
+
1328
+
1286
1329
  try {
1287
1330
  // Save the selected agent mode to user settings storage
1288
1331
  if (this.userSettingsStorage) {
1289
-
1332
+
1290
1333
  await this.userSettingsStorage.setSelectedAgentMode(selectedMode);
1291
-
1292
-
1334
+
1335
+
1293
1336
  // Verify the save
1294
1337
  const verified = await this.userSettingsStorage.getSelectedAgentMode();
1295
-
1296
-
1338
+
1339
+
1297
1340
  // Also save to localStorage as backup for browser restart scenarios
1298
1341
  localStorage.setItem('vibesurf-agent-mode-backup', selectedMode);
1299
-
1342
+
1300
1343
  } else {
1301
1344
  console.warn('[UIManager] userSettingsStorage not available for agent mode save');
1302
1345
  }
1303
1346
  } catch (error) {
1304
1347
  console.error('[UIManager] Failed to save agent mode selection:', error);
1305
1348
  }
1306
-
1349
+
1307
1350
  // Re-validate send button state when agent mode changes
1308
1351
  if (this.elements.taskInput) {
1309
1352
  this.handleTaskInputChange({ target: this.elements.taskInput });
@@ -1317,13 +1360,13 @@ class VibeSurfUIManager {
1317
1360
  const hasLlmProfile = llmProfile && llmProfile.trim() !== '';
1318
1361
  const taskStatus = this.sessionManager.getTaskStatus();
1319
1362
  const isPaused = taskStatus === 'paused';
1320
-
1363
+
1321
1364
  // Check for @ character to trigger tab selector
1322
1365
  this.handleTabSelectorInput(event);
1323
-
1366
+
1324
1367
  // Check for / character to trigger skill selector
1325
1368
  this.handleSkillSelectorInput(event);
1326
-
1369
+
1327
1370
  // Update send button state - special handling for pause state
1328
1371
  if (this.elements.sendBtn) {
1329
1372
  if (isPaused) {
@@ -1334,32 +1377,32 @@ class VibeSurfUIManager {
1334
1377
  this.elements.sendBtn.disabled = !(hasText && hasLlmProfile && !this.state.isTaskRunning);
1335
1378
  }
1336
1379
  }
1337
-
1380
+
1338
1381
  // Auto-resize textarea based on content
1339
1382
  this.autoResizeTextarea(textarea);
1340
1383
  }
1341
-
1384
+
1342
1385
  autoResizeTextarea(textarea) {
1343
1386
  if (!textarea) return;
1344
-
1387
+
1345
1388
  // Reset height to auto to get the natural scrollHeight
1346
1389
  textarea.style.height = 'auto';
1347
-
1390
+
1348
1391
  // Calculate the new height based on content
1349
1392
  const minHeight = 44; // Min height from CSS
1350
1393
  const maxHeight = 200; // Max height from CSS
1351
1394
  const newHeight = Math.max(minHeight, Math.min(maxHeight, textarea.scrollHeight));
1352
-
1395
+
1353
1396
  // Apply the new height
1354
1397
  textarea.style.height = newHeight + 'px';
1355
1398
  }
1356
1399
 
1357
1400
  // UI Display Methods
1358
1401
  updateSessionDisplay(sessionId) {
1359
-
1402
+
1360
1403
  if (this.elements.sessionId) {
1361
1404
  this.elements.sessionId.textContent = sessionId || '-';
1362
-
1405
+
1363
1406
  } else {
1364
1407
  console.error('[UIManager] Session ID element not found');
1365
1408
  }
@@ -1370,57 +1413,57 @@ class VibeSurfUIManager {
1370
1413
  const cancelBtn = this.elements.cancelBtn;
1371
1414
  const resumeBtn = this.elements.resumeBtn;
1372
1415
  const terminateBtn = this.elements.terminateBtn;
1373
-
1416
+
1374
1417
  console.log(`[UIManager] updateControlPanel called with status: ${status}`);
1375
-
1418
+
1376
1419
  if (!panel) {
1377
1420
  console.error('[UIManager] Control panel element not found');
1378
1421
  return;
1379
1422
  }
1380
-
1423
+
1381
1424
  // Clear any existing auto-hide timeout
1382
1425
  if (this.controlPanelTimeout) {
1383
1426
  clearTimeout(this.controlPanelTimeout);
1384
1427
  this.controlPanelTimeout = null;
1385
1428
  }
1386
-
1429
+
1387
1430
  switch (status) {
1388
1431
  case 'ready':
1389
-
1432
+
1390
1433
  panel.classList.add('hidden');
1391
1434
  panel.classList.remove('error-state');
1392
1435
  break;
1393
-
1436
+
1394
1437
  case 'running':
1395
-
1438
+
1396
1439
  panel.classList.remove('hidden');
1397
1440
  panel.classList.remove('error-state');
1398
1441
  cancelBtn?.classList.remove('hidden');
1399
1442
  resumeBtn?.classList.add('hidden');
1400
1443
  terminateBtn?.classList.add('hidden');
1401
-
1444
+
1402
1445
  // For fast-completing tasks, ensure minimum visibility duration
1403
1446
  this.ensureMinimumControlPanelVisibility();
1404
1447
  break;
1405
-
1448
+
1406
1449
  case 'paused':
1407
-
1450
+
1408
1451
  panel.classList.remove('hidden');
1409
1452
  panel.classList.remove('error-state');
1410
1453
  cancelBtn?.classList.add('hidden');
1411
1454
  resumeBtn?.classList.remove('hidden');
1412
1455
  terminateBtn?.classList.remove('hidden');
1413
1456
  break;
1414
-
1457
+
1415
1458
  case 'error':
1416
-
1459
+
1417
1460
  panel.classList.remove('hidden');
1418
1461
  panel.classList.add('error-state');
1419
1462
  cancelBtn?.classList.remove('hidden');
1420
1463
  resumeBtn?.classList.add('hidden');
1421
1464
  terminateBtn?.classList.remove('hidden');
1422
1465
  break;
1423
-
1466
+
1424
1467
  case 'done':
1425
1468
  case 'completed':
1426
1469
  case 'finished':
@@ -1429,22 +1472,22 @@ class VibeSurfUIManager {
1429
1472
  panel.classList.add('hidden');
1430
1473
  panel.classList.remove('error-state');
1431
1474
  break;
1432
-
1475
+
1433
1476
  default:
1434
1477
  console.log(`[UIManager] Unknown control panel status: ${status}, hiding panel`);
1435
1478
  panel.classList.add('hidden');
1436
1479
  panel.classList.remove('error-state');
1437
1480
  }
1438
1481
  }
1439
-
1482
+
1440
1483
  ensureMinimumControlPanelVisibility() {
1441
1484
  // Set a flag to prevent immediate hiding of control panel for fast tasks
1442
1485
  this.controlPanelMinVisibilityActive = true;
1443
-
1486
+
1444
1487
  // Clear the flag after minimum visibility period (2 seconds)
1445
1488
  setTimeout(() => {
1446
1489
  this.controlPanelMinVisibilityActive = false;
1447
-
1490
+
1448
1491
  }, 2000);
1449
1492
  }
1450
1493
 
@@ -1495,7 +1538,7 @@ class VibeSurfUIManager {
1495
1538
  </div>
1496
1539
  </div>
1497
1540
  `;
1498
-
1541
+
1499
1542
  if (this.elements.activityLog) {
1500
1543
  this.elements.activityLog.innerHTML = welcomeHTML;
1501
1544
  this.bindTaskSuggestionEvents();
@@ -1504,19 +1547,19 @@ class VibeSurfUIManager {
1504
1547
 
1505
1548
  bindTaskSuggestionEvents() {
1506
1549
  const taskSuggestions = document.querySelectorAll('.task-suggestion');
1507
-
1550
+
1508
1551
  taskSuggestions.forEach(suggestion => {
1509
1552
  suggestion.addEventListener('click', () => {
1510
1553
  const taskDescription = suggestion.querySelector('.task-description').textContent;
1511
-
1554
+
1512
1555
  // Populate task input with suggestion (only description, no title prefix)
1513
1556
  if (this.elements.taskInput) {
1514
1557
  this.elements.taskInput.value = taskDescription;
1515
1558
  this.elements.taskInput.focus();
1516
-
1559
+
1517
1560
  // Trigger input change event for validation and auto-resize
1518
1561
  this.handleTaskInputChange({ target: this.elements.taskInput });
1519
-
1562
+
1520
1563
  // Auto-send the task
1521
1564
  setTimeout(() => {
1522
1565
  this.handleSendTask();
@@ -1528,17 +1571,17 @@ class VibeSurfUIManager {
1528
1571
 
1529
1572
  displayActivityLogs(logs) {
1530
1573
  this.clearActivityLog();
1531
-
1574
+
1532
1575
  if (logs.length === 0) {
1533
1576
  this.showWelcomeMessage();
1534
1577
  return;
1535
1578
  }
1536
-
1579
+
1537
1580
  logs.forEach(log => this.addActivityLog(log));
1538
-
1581
+
1539
1582
  // Bind link click handlers to all existing activity items after loading
1540
1583
  this.bindLinkHandlersToAllActivityItems();
1541
-
1584
+
1542
1585
  this.scrollActivityToBottom();
1543
1586
  }
1544
1587
 
@@ -1553,19 +1596,19 @@ class VibeSurfUIManager {
1553
1596
  addActivityLog(activityData) {
1554
1597
  // Filter out "done" status messages from UI display only
1555
1598
  const agentStatus = activityData.agent_status || activityData.status || '';
1556
-
1599
+
1557
1600
  // Filter done messages that are just status updates without meaningful content
1558
1601
  if (agentStatus.toLowerCase() === 'done') {
1559
1602
  return;
1560
1603
  }
1561
-
1604
+
1562
1605
  if (this.elements.activityLog) {
1563
1606
  // Remove welcome message if present
1564
1607
  const welcomeMsg = this.elements.activityLog.querySelector('.welcome-message');
1565
1608
  if (welcomeMsg) {
1566
1609
  welcomeMsg.remove();
1567
1610
  }
1568
-
1611
+
1569
1612
  // Check if this is a suggestion_tasks message
1570
1613
  if (agentStatus.toLowerCase() === 'suggestion_tasks') {
1571
1614
  // For suggestion_tasks, only show suggestion cards, not the normal message
@@ -1576,10 +1619,10 @@ class VibeSurfUIManager {
1576
1619
  const activityItem = this.createActivityItem(activityData);
1577
1620
  this.elements.activityLog.appendChild(activityItem);
1578
1621
  activityItem.classList.add('fade-in');
1579
-
1622
+
1580
1623
  // Bind copy button functionality
1581
1624
  this.bindCopyButtonEvent(activityItem, activityData);
1582
-
1625
+
1583
1626
  // Bind link click handlers to prevent extension freezing
1584
1627
  this.bindLinkClickHandlers(activityItem);
1585
1628
  }
@@ -1588,24 +1631,24 @@ class VibeSurfUIManager {
1588
1631
 
1589
1632
  addSuggestionTaskCards(activityData) {
1590
1633
  const agentMsg = activityData.agent_msg || activityData.message || '';
1591
-
1634
+
1592
1635
  if (!agentMsg || typeof agentMsg !== 'string') {
1593
1636
  return;
1594
1637
  }
1595
-
1638
+
1596
1639
  // Parse tasks by splitting on newlines and filtering empty lines
1597
1640
  const tasks = agentMsg.split('\n')
1598
1641
  .map(task => task.trim())
1599
1642
  .filter(task => task.length > 0);
1600
-
1643
+
1601
1644
  if (tasks.length === 0) {
1602
1645
  return;
1603
1646
  }
1604
-
1647
+
1605
1648
  // Create suggestion cards container
1606
1649
  const suggestionsContainer = document.createElement('div');
1607
1650
  suggestionsContainer.className = 'suggestion-tasks-container';
1608
-
1651
+
1609
1652
  // Add header for suggestion cards
1610
1653
  const headerElement = document.createElement('div');
1611
1654
  headerElement.className = 'suggestion-tasks-header';
@@ -1613,18 +1656,18 @@ class VibeSurfUIManager {
1613
1656
  <h4>Suggestion Follow-Up Tasks</h4>
1614
1657
  `;
1615
1658
  suggestionsContainer.appendChild(headerElement);
1616
-
1659
+
1617
1660
  // Create cards container
1618
1661
  const cardsContainer = document.createElement('div');
1619
1662
  cardsContainer.className = 'suggestion-cards';
1620
-
1663
+
1621
1664
  // Create individual task cards
1622
1665
  tasks.forEach((task, index) => {
1623
1666
  const taskCard = document.createElement('div');
1624
1667
  taskCard.className = 'suggestion-task-card';
1625
1668
  taskCard.setAttribute('data-task', task);
1626
1669
  taskCard.setAttribute('data-index', index);
1627
-
1670
+
1628
1671
  taskCard.innerHTML = `
1629
1672
  <div class="suggestion-card-icon">
1630
1673
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -1640,18 +1683,18 @@ class VibeSurfUIManager {
1640
1683
  </svg>
1641
1684
  </div>
1642
1685
  `;
1643
-
1686
+
1644
1687
  // Add click event handler
1645
1688
  taskCard.addEventListener('click', (e) => {
1646
1689
  e.preventDefault();
1647
1690
  this.handleSuggestionTaskClick(task);
1648
1691
  });
1649
-
1692
+
1650
1693
  cardsContainer.appendChild(taskCard);
1651
1694
  });
1652
-
1695
+
1653
1696
  suggestionsContainer.appendChild(cardsContainer);
1654
-
1697
+
1655
1698
  // Add the suggestions container to the activity log
1656
1699
  if (this.elements.activityLog) {
1657
1700
  this.elements.activityLog.appendChild(suggestionsContainer);
@@ -1660,38 +1703,38 @@ class VibeSurfUIManager {
1660
1703
  }
1661
1704
 
1662
1705
  handleSuggestionTaskClick(taskDescription) {
1663
-
1664
-
1706
+
1707
+
1665
1708
  // First check if task is running
1666
1709
  if (this.state.isTaskRunning) {
1667
1710
  this.showNotification('Cannot submit task while another task is running', 'warning');
1668
1711
  return;
1669
1712
  }
1670
-
1713
+
1671
1714
  // Check if LLM profile is selected
1672
1715
  const llmProfile = this.elements.llmProfileSelect?.value;
1673
1716
  if (!llmProfile || llmProfile.trim() === '') {
1674
1717
  this.showLLMProfileRequiredModal('select');
1675
1718
  return;
1676
1719
  }
1677
-
1720
+
1678
1721
  // Set the task description in the input first
1679
1722
  if (!this.elements.taskInput) {
1680
1723
  console.error('[UIManager] Task input element not found');
1681
1724
  this.showNotification('Task input not available', 'error');
1682
1725
  return;
1683
1726
  }
1684
-
1685
-
1727
+
1728
+
1686
1729
  this.elements.taskInput.value = taskDescription;
1687
1730
  this.elements.taskInput.focus();
1688
-
1731
+
1689
1732
  // Trigger input change event for validation and auto-resize
1690
1733
  this.handleTaskInputChange({ target: this.elements.taskInput });
1691
-
1734
+
1692
1735
  // Auto-submit the task after a short delay
1693
1736
  setTimeout(() => {
1694
-
1737
+
1695
1738
  this.handleSendTask();
1696
1739
  }, 100);
1697
1740
  }
@@ -1704,12 +1747,12 @@ class VibeSurfUIManager {
1704
1747
 
1705
1748
  createActivityItem(data) {
1706
1749
  const item = document.createElement('div');
1707
-
1750
+
1708
1751
  // Extract activity data with correct keys
1709
1752
  const agentName = data.agent_name || 'system';
1710
1753
  const agentStatus = data.agent_status || data.status || 'info';
1711
1754
  const agentMsg = data.agent_msg || data.message || data.action_description || 'No description';
1712
-
1755
+
1713
1756
  // Use backend timestamp if available, otherwise generate frontend timestamp
1714
1757
  let timestamp;
1715
1758
  if (data.timestamp) {
@@ -1717,20 +1760,20 @@ class VibeSurfUIManager {
1717
1760
  } else {
1718
1761
  timestamp = new Date().toLocaleString();
1719
1762
  }
1720
-
1763
+
1721
1764
  // Extract token and cost information
1722
1765
  const totalTokens = data.total_tokens;
1723
1766
  const totalCost = data.total_cost;
1724
-
1767
+
1725
1768
  // Determine if this is a user message (should be on the right)
1726
1769
  const isUser = agentName.toLowerCase() === 'user';
1727
-
1770
+
1728
1771
  // Set CSS classes based on agent type and status
1729
1772
  item.className = `activity-item ${isUser ? 'user-message' : 'agent-message'} ${agentStatus}`;
1730
-
1773
+
1731
1774
  // Build metadata display (timestamp, tokens, cost)
1732
1775
  let metadataHtml = `<span class="message-time">${timestamp}</span>`;
1733
-
1776
+
1734
1777
  if (totalTokens !== undefined || totalCost !== undefined) {
1735
1778
  metadataHtml += '<span class="message-metrics">';
1736
1779
  if (totalTokens !== undefined) {
@@ -1743,7 +1786,7 @@ class VibeSurfUIManager {
1743
1786
  }
1744
1787
  metadataHtml += '</span>';
1745
1788
  }
1746
-
1789
+
1747
1790
  // Create the message structure similar to chat interface
1748
1791
  item.innerHTML = `
1749
1792
  <div class="message-container ${isUser ? 'user-container' : 'agent-container'}">
@@ -1767,18 +1810,18 @@ class VibeSurfUIManager {
1767
1810
  </div>
1768
1811
  </div>
1769
1812
  `;
1770
-
1813
+
1771
1814
  return item;
1772
1815
  }
1773
1816
 
1774
1817
  bindCopyButtonEvent(activityItem, activityData) {
1775
1818
  const copyBtn = activityItem.querySelector('.copy-message-btn');
1776
-
1819
+
1777
1820
  if (copyBtn) {
1778
1821
  copyBtn.addEventListener('click', async (e) => {
1779
1822
  e.preventDefault();
1780
1823
  e.stopPropagation();
1781
-
1824
+
1782
1825
  await this.copyMessageToClipboard(activityData);
1783
1826
  });
1784
1827
  }
@@ -1787,43 +1830,43 @@ class VibeSurfUIManager {
1787
1830
  bindLinkClickHandlers(activityItem) {
1788
1831
  // Handle all link clicks within activity items to prevent extension freezing
1789
1832
  const links = activityItem.querySelectorAll('a');
1790
-
1833
+
1791
1834
  links.forEach(link => {
1792
1835
  // Check if handler is already attached to prevent double binding
1793
1836
  if (link.hasAttribute('data-link-handler-attached')) {
1794
1837
  return;
1795
1838
  }
1796
-
1839
+
1797
1840
  link.setAttribute('data-link-handler-attached', 'true');
1798
-
1841
+
1799
1842
  link.addEventListener('click', async (e) => {
1800
1843
  console.log('[VibeSurf] Link click event detected:', e);
1801
-
1844
+
1802
1845
  // Comprehensive event prevention
1803
1846
  e.preventDefault();
1804
1847
  e.stopPropagation();
1805
1848
  e.stopImmediatePropagation(); // Prevent any other handlers
1806
-
1849
+
1807
1850
  // Remove href temporarily to prevent default browser behavior
1808
1851
  const originalHref = link.getAttribute('href');
1809
1852
  const dataFilePath = link.getAttribute('data-file-path');
1810
1853
  link.setAttribute('href', '#');
1811
-
1854
+
1812
1855
  // Use data-file-path if available (for file:// links), otherwise use href
1813
1856
  const targetUrl = dataFilePath || originalHref;
1814
1857
  if (!targetUrl || (targetUrl === '#' && !dataFilePath)) return;
1815
-
1858
+
1816
1859
  // Debounce - prevent rapid repeated clicks
1817
1860
  if (link.hasAttribute('data-link-processing')) {
1818
1861
  console.log('[VibeSurf] Link already processing, ignoring duplicate click');
1819
1862
  return;
1820
1863
  }
1821
-
1864
+
1822
1865
  link.setAttribute('data-link-processing', 'true');
1823
-
1866
+
1824
1867
  try {
1825
1868
  console.log('[VibeSurf] Processing link:', targetUrl);
1826
-
1869
+
1827
1870
  // Handle file:// links using existing logic
1828
1871
  if (targetUrl.startsWith('file://')) {
1829
1872
  await this.handleFileLinkClick(targetUrl);
@@ -1836,7 +1879,7 @@ class VibeSurfUIManager {
1836
1879
  else {
1837
1880
  await this.handleOtherLinkClick(targetUrl);
1838
1881
  }
1839
-
1882
+
1840
1883
  console.log('[VibeSurf] Link processed successfully:', targetUrl);
1841
1884
  } catch (error) {
1842
1885
  console.error('[VibeSurf] Error handling link click:', error);
@@ -1844,7 +1887,7 @@ class VibeSurfUIManager {
1844
1887
  } finally {
1845
1888
  // Restore original href
1846
1889
  link.setAttribute('href', originalHref);
1847
-
1890
+
1848
1891
  // Remove processing flag after a short delay
1849
1892
  setTimeout(() => {
1850
1893
  link.removeAttribute('data-link-processing');
@@ -1856,13 +1899,13 @@ class VibeSurfUIManager {
1856
1899
 
1857
1900
  async handleFileLinkClick(fileUrl) {
1858
1901
  console.log('[UIManager] Opening file URL:', fileUrl);
1859
-
1902
+
1860
1903
  // Use the background script to handle file URLs
1861
1904
  const result = await chrome.runtime.sendMessage({
1862
1905
  type: 'OPEN_FILE_URL',
1863
1906
  data: { fileUrl }
1864
1907
  });
1865
-
1908
+
1866
1909
  if (!result.success) {
1867
1910
  throw new Error(result.error || 'Failed to open file');
1868
1911
  }
@@ -1870,20 +1913,20 @@ class VibeSurfUIManager {
1870
1913
 
1871
1914
  async handleHttpLinkClick(url) {
1872
1915
  console.log('[VibeSurf] Opening HTTP URL:', url);
1873
-
1916
+
1874
1917
  try {
1875
1918
  // Open HTTP/HTTPS links in a new tab
1876
1919
  const result = await chrome.runtime.sendMessage({
1877
1920
  type: 'OPEN_FILE_URL',
1878
1921
  data: { fileUrl: url }
1879
1922
  });
1880
-
1923
+
1881
1924
  console.log('[VibeSurf] Background script response:', result);
1882
-
1925
+
1883
1926
  if (!result || !result.success) {
1884
1927
  throw new Error(result?.error || 'Failed to create tab for URL');
1885
1928
  }
1886
-
1929
+
1887
1930
  console.log('[VibeSurf] Successfully opened tab:', result.tabId);
1888
1931
  } catch (error) {
1889
1932
  console.error('[VibeSurf] Error opening HTTP URL:', error);
@@ -1893,7 +1936,7 @@ class VibeSurfUIManager {
1893
1936
 
1894
1937
  async handleOtherLinkClick(url) {
1895
1938
  console.log('[UIManager] Opening other URL:', url);
1896
-
1939
+
1897
1940
  // For relative URLs or other protocols, try to open in new tab
1898
1941
  try {
1899
1942
  // Use the background script to handle URL opening
@@ -1901,7 +1944,7 @@ class VibeSurfUIManager {
1901
1944
  type: 'OPEN_FILE_URL',
1902
1945
  data: { fileUrl: url }
1903
1946
  });
1904
-
1947
+
1905
1948
  if (!result.success) {
1906
1949
  throw new Error(result.error || 'Failed to open URL');
1907
1950
  }
@@ -1914,7 +1957,7 @@ class VibeSurfUIManager {
1914
1957
  type: 'OPEN_FILE_URL',
1915
1958
  data: { fileUrl: absoluteUrl }
1916
1959
  });
1917
-
1960
+
1918
1961
  if (!result.success) {
1919
1962
  throw new Error(result.error || 'Failed to open absolute URL');
1920
1963
  }
@@ -1931,7 +1974,7 @@ class VibeSurfUIManager {
1931
1974
  try {
1932
1975
  // Extract only the message content (no agent info or timestamps)
1933
1976
  const agentMsg = activityData.agent_msg || activityData.message || activityData.action_description || 'No description';
1934
-
1977
+
1935
1978
  // Convert to plain text
1936
1979
  let messageText = '';
1937
1980
  if (typeof agentMsg === 'object') {
@@ -1953,19 +1996,19 @@ class VibeSurfUIManager {
1953
1996
  .replace(/\s+/g, ' ') // Normalize whitespace
1954
1997
  .trim(); // Remove leading/trailing whitespace
1955
1998
  }
1956
-
1999
+
1957
2000
  // Check clipboard API availability
1958
-
1959
-
1960
-
1961
-
2001
+
2002
+
2003
+
2004
+
1962
2005
  // Try multiple clipboard methods
1963
2006
  let copySuccess = false;
1964
2007
  let lastError = null;
1965
-
2008
+
1966
2009
  // Method 1: Chrome extension messaging approach
1967
2010
  try {
1968
-
2011
+
1969
2012
  await new Promise((resolve, reject) => {
1970
2013
  chrome.runtime.sendMessage({
1971
2014
  type: 'COPY_TO_CLIPBOARD',
@@ -1981,29 +2024,29 @@ class VibeSurfUIManager {
1981
2024
  });
1982
2025
  });
1983
2026
  copySuccess = true;
1984
-
2027
+
1985
2028
  } catch (extensionError) {
1986
2029
  console.warn('[UIManager] Chrome extension messaging failed:', extensionError);
1987
2030
  lastError = extensionError;
1988
2031
  }
1989
-
2032
+
1990
2033
  // Method 2: Modern clipboard API (if extension method failed)
1991
2034
  if (!copySuccess && navigator.clipboard && navigator.clipboard.writeText) {
1992
2035
  try {
1993
-
2036
+
1994
2037
  await navigator.clipboard.writeText(messageText);
1995
2038
  copySuccess = true;
1996
-
2039
+
1997
2040
  } catch (clipboardError) {
1998
2041
  console.warn('[UIManager] Modern clipboard API failed:', clipboardError);
1999
2042
  lastError = clipboardError;
2000
2043
  }
2001
2044
  }
2002
-
2045
+
2003
2046
  // Method 3: Fallback using execCommand
2004
2047
  if (!copySuccess) {
2005
2048
  try {
2006
-
2049
+
2007
2050
  const textArea = document.createElement('textarea');
2008
2051
  textArea.value = messageText;
2009
2052
  textArea.style.position = 'fixed';
@@ -2014,13 +2057,13 @@ class VibeSurfUIManager {
2014
2057
  textArea.focus();
2015
2058
  textArea.select();
2016
2059
  textArea.setSelectionRange(0, textArea.value.length);
2017
-
2060
+
2018
2061
  const success = document.execCommand('copy');
2019
2062
  document.body.removeChild(textArea);
2020
-
2063
+
2021
2064
  if (success) {
2022
2065
  copySuccess = true;
2023
-
2066
+
2024
2067
  } else {
2025
2068
  console.warn('[UIManager] execCommand returned false');
2026
2069
  }
@@ -2029,15 +2072,15 @@ class VibeSurfUIManager {
2029
2072
  lastError = execError;
2030
2073
  }
2031
2074
  }
2032
-
2075
+
2033
2076
  if (copySuccess) {
2034
2077
  // Show visual feedback
2035
2078
  this.showCopyFeedback();
2036
-
2079
+
2037
2080
  } else {
2038
2081
  throw new Error(`All clipboard methods failed. Last error: ${lastError?.message || 'Unknown error'}`);
2039
2082
  }
2040
-
2083
+
2041
2084
  } catch (error) {
2042
2085
  console.error('[UIManager] Failed to copy message:', error);
2043
2086
  this.showNotification('Copy Fail: ' + error.message, 'error');
@@ -2075,15 +2118,15 @@ class VibeSurfUIManager {
2075
2118
 
2076
2119
  formatActivityContent(content) {
2077
2120
  if (!content) return 'No content';
2078
-
2121
+
2079
2122
  // Handle object content
2080
2123
  if (typeof content === 'object') {
2081
2124
  return `<pre class="json-content">${JSON.stringify(content, null, 2)}</pre>`;
2082
2125
  }
2083
-
2126
+
2084
2127
  // Convert content to string
2085
2128
  let formattedContent = String(content);
2086
-
2129
+
2087
2130
  // Use markdown-it library for proper markdown rendering if available
2088
2131
  if (typeof markdownit !== 'undefined') {
2089
2132
  try {
@@ -2094,16 +2137,16 @@ class VibeSurfUIManager {
2094
2137
  linkify: true, // Autoconvert URL-like text to links
2095
2138
  typographer: true // Enable some language-neutral replacement + quotes beautification
2096
2139
  });
2097
-
2140
+
2098
2141
  // Override link renderer to handle file:// protocol
2099
2142
  const defaultLinkRenderer = md.renderer.rules.link_open || function(tokens, idx, options, env, renderer) {
2100
2143
  return renderer.renderToken(tokens, idx, options);
2101
2144
  };
2102
-
2145
+
2103
2146
  md.renderer.rules.link_open = function (tokens, idx, options, env, renderer) {
2104
2147
  const token = tokens[idx];
2105
2148
  const href = token.attrGet('href');
2106
-
2149
+
2107
2150
  if (href && href.startsWith('file://')) {
2108
2151
  // Convert file:// links to our custom file-link format
2109
2152
  token.attrSet('href', '#');
@@ -2111,17 +2154,17 @@ class VibeSurfUIManager {
2111
2154
  token.attrSet('data-file-path', href);
2112
2155
  token.attrSet('title', `Click to open file: ${href}`);
2113
2156
  }
2114
-
2157
+
2115
2158
  return defaultLinkRenderer(tokens, idx, options, env, renderer);
2116
2159
  };
2117
-
2160
+
2118
2161
  // Add task list support manually (markdown-it doesn't have built-in task lists)
2119
2162
  formattedContent = this.preprocessTaskLists(formattedContent);
2120
-
2163
+
2121
2164
  // Pre-process both regular file paths and file:// markdown links
2122
2165
  const regularFilePathRegex = /\[([^\]]+)\]\(([^)]*\/[^)]*\.[^)]+)\)/g;
2123
2166
  const markdownFileLinkRegex = /\[([^\]]+)\]\((file:\/\/[^)]+)\)/g;
2124
-
2167
+
2125
2168
  // Handle regular file paths (convert to file:// format)
2126
2169
  formattedContent = formattedContent.replace(regularFilePathRegex, (match, linkText, filePath) => {
2127
2170
  // Only process if it looks like a file path (contains / and extension) and not already a URL
@@ -2131,19 +2174,19 @@ class VibeSurfUIManager {
2131
2174
  }
2132
2175
  return match;
2133
2176
  });
2134
-
2177
+
2135
2178
  // Handle file:// links
2136
2179
  formattedContent = formattedContent.replace(markdownFileLinkRegex, (match, linkText, fileUrl) => {
2137
2180
  // Convert to HTML format that markdown-it will preserve
2138
2181
  return `<a href="${fileUrl}" class="file-link-markdown">${linkText}</a>`;
2139
2182
  });
2140
-
2183
+
2141
2184
  // Parse markdown
2142
2185
  const htmlContent = md.render(formattedContent);
2143
-
2186
+
2144
2187
  // Post-process to handle local file path links
2145
2188
  let processedContent = htmlContent;
2146
-
2189
+
2147
2190
  // Convert our pre-processed file:// links to proper file-link format
2148
2191
  const preProcessedFileLinkRegex = /<a href="(file:\/\/[^"]+)"[^>]*class="file-link-markdown"[^>]*>([^<]*)<\/a>/g;
2149
2192
  processedContent = processedContent.replace(preProcessedFileLinkRegex, (match, fileUrl, linkText) => {
@@ -2151,58 +2194,58 @@ class VibeSurfUIManager {
2151
2194
  // Keep original URL but properly escape HTML attributes
2152
2195
  // Don't decode/encode to preserve original spaces and special characters
2153
2196
  const escapedUrl = fileUrl.replace(/"/g, '&quot;');
2154
-
2197
+
2155
2198
  return `<a href="#" class="file-link" data-file-path="${escapedUrl}" title="Click to open file: ${linkText}">${linkText}</a>`;
2156
2199
  } catch (error) {
2157
2200
  console.error('[UIManager] Error processing pre-processed file:// link:', error);
2158
2201
  return match;
2159
2202
  }
2160
2203
  });
2161
-
2204
+
2162
2205
  // Add custom classes and post-process
2163
2206
  return processedContent
2164
2207
  .replace(/<pre><code/g, '<pre class="code-block"><code')
2165
2208
  .replace(/<code>/g, '<code class="inline-code">')
2166
2209
  .replace(/<table>/g, '<table class="markdown-table">')
2167
2210
  .replace(/<blockquote>/g, '<blockquote class="markdown-quote">');
2168
-
2211
+
2169
2212
  } catch (error) {
2170
2213
  console.warn('[UIManager] markdown-it parsing failed, falling back to basic formatting:', error);
2171
2214
  // Fall through to basic formatting
2172
2215
  }
2173
2216
  }
2174
-
2217
+
2175
2218
  // Fallback: Enhanced basic markdown-like formatting
2176
2219
  formattedContent = this.preprocessTaskLists(formattedContent);
2177
-
2220
+
2178
2221
  // Bold text **text**
2179
2222
  formattedContent = formattedContent.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
2180
-
2223
+
2181
2224
  // Italic text *text*
2182
2225
  formattedContent = formattedContent.replace(/\*(.*?)\*/g, '<em>$1</em>');
2183
-
2226
+
2184
2227
  // Code blocks ```code```
2185
2228
  formattedContent = formattedContent.replace(/```([\s\S]*?)```/g, '<pre class="code-block">$1</pre>');
2186
-
2229
+
2187
2230
  // Inline code `code`
2188
2231
  formattedContent = formattedContent.replace(/`([^`]+)`/g, '<code class="inline-code">$1</code>');
2189
-
2232
+
2190
2233
  // Headers
2191
2234
  formattedContent = formattedContent.replace(/^### (.*$)/gm, '<h3>$1</h3>');
2192
2235
  formattedContent = formattedContent.replace(/^## (.*$)/gm, '<h2>$1</h2>');
2193
2236
  formattedContent = formattedContent.replace(/^# (.*$)/gm, '<h1>$1</h1>');
2194
-
2237
+
2195
2238
  // Lists - regular
2196
2239
  formattedContent = formattedContent.replace(/^- (.*$)/gm, '<li>$1</li>');
2197
2240
  formattedContent = formattedContent.replace(/(<li>.*<\/li>)/s, '<ul>$1</ul>');
2198
-
2241
+
2199
2242
  // Convert URLs to links
2200
2243
  const httpUrlRegex = /(https?:\/\/[^\s]+)/g;
2201
2244
  formattedContent = formattedContent.replace(httpUrlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
2202
-
2245
+
2203
2246
  // Convert newlines to br tags
2204
2247
  formattedContent = formattedContent.replace(/\n/g, '<br>');
2205
-
2248
+
2206
2249
  return formattedContent;
2207
2250
  }
2208
2251
 
@@ -2226,7 +2269,7 @@ class VibeSurfUIManager {
2226
2269
  if (this.elements.taskInput) {
2227
2270
  this.elements.taskInput.value = '';
2228
2271
  }
2229
-
2272
+
2230
2273
  if (this.elements.sendBtn) {
2231
2274
  this.elements.sendBtn.disabled = true;
2232
2275
  }
@@ -2238,14 +2281,14 @@ class VibeSurfUIManager {
2238
2281
  const canProceed = await this.showTaskRunningWarning('load a different session');
2239
2282
  if (!canProceed) return;
2240
2283
  }
2241
-
2284
+
2242
2285
  try {
2243
2286
  this.showLoading('Loading session...');
2244
-
2287
+
2245
2288
  const success = await this.sessionManager.loadSession(sessionId);
2246
-
2289
+
2247
2290
  this.hideLoading();
2248
-
2291
+
2249
2292
  if (!success) {
2250
2293
  this.showNotification('Failed to load session', 'error');
2251
2294
  }
@@ -2257,14 +2300,14 @@ class VibeSurfUIManager {
2257
2300
 
2258
2301
  async updateLLMProfileSelect() {
2259
2302
  if (!this.elements.llmProfileSelect) return;
2260
-
2303
+
2261
2304
  // Preserve current user selection if any (to avoid overriding during profile updates)
2262
2305
  const currentSelection = this.elements.llmProfileSelect.value;
2263
-
2306
+
2264
2307
  const profiles = this.settingsManager.getLLMProfiles();
2265
2308
  const select = this.elements.llmProfileSelect;
2266
2309
  select.innerHTML = '';
2267
-
2310
+
2268
2311
  if (profiles.length === 0) {
2269
2312
  // Add placeholder option when no profiles available
2270
2313
  const placeholderOption = document.createElement('option');
@@ -2280,10 +2323,10 @@ class VibeSurfUIManager {
2280
2323
  emptyOption.textContent = 'Select LLM Profile...';
2281
2324
  emptyOption.disabled = true;
2282
2325
  select.appendChild(emptyOption);
2283
-
2326
+
2284
2327
  // Determine selection priority: current selection > saved selection > default profile
2285
2328
  let targetSelection = currentSelection; // Preserve current selection first
2286
-
2329
+
2287
2330
  // If no current selection, get saved selection
2288
2331
  if (!targetSelection) {
2289
2332
  try {
@@ -2294,24 +2337,24 @@ class VibeSurfUIManager {
2294
2337
  console.error('[UIManager] Failed to get saved LLM profile selection:', error);
2295
2338
  }
2296
2339
  }
2297
-
2340
+
2298
2341
  // Add actual profiles
2299
2342
  let hasSelectedProfile = false;
2300
2343
  let hasTargetProfile = false;
2301
-
2344
+
2302
2345
  profiles.forEach(profile => {
2303
2346
  const option = document.createElement('option');
2304
2347
  option.value = profile.profile_name;
2305
2348
  option.textContent = profile.profile_name;
2306
-
2349
+
2307
2350
  // Check if this profile matches our target selection
2308
2351
  if (targetSelection && profile.profile_name === targetSelection) {
2309
2352
  hasTargetProfile = true;
2310
2353
  }
2311
-
2354
+
2312
2355
  select.appendChild(option);
2313
2356
  });
2314
-
2357
+
2315
2358
  // Apply selection based on priority
2316
2359
  if (hasTargetProfile) {
2317
2360
  select.value = targetSelection;
@@ -2324,9 +2367,9 @@ class VibeSurfUIManager {
2324
2367
  hasSelectedProfile = true;
2325
2368
  }
2326
2369
  }
2327
-
2370
+
2328
2371
  }
2329
-
2372
+
2330
2373
  // Update send button state if taskInput exists
2331
2374
  if (this.elements.taskInput) {
2332
2375
  this.handleTaskInputChange({ target: this.elements.taskInput });
@@ -2339,7 +2382,7 @@ class VibeSurfUIManager {
2339
2382
  const message = isConfigureAction
2340
2383
  ? 'No LLM profiles are configured. You need to configure at least one LLM profile before sending tasks.'
2341
2384
  : 'Please select an LLM profile from the dropdown to proceed with your task.';
2342
-
2385
+
2343
2386
  const options = isConfigureAction
2344
2387
  ? {
2345
2388
  confirmText: 'Open Settings',
@@ -2358,7 +2401,7 @@ class VibeSurfUIManager {
2358
2401
  this.handleShowLLMSettings();
2359
2402
  }
2360
2403
  };
2361
-
2404
+
2362
2405
  this.modalManager.showWarningModal(title, message, options);
2363
2406
  }
2364
2407
 
@@ -2368,7 +2411,7 @@ class VibeSurfUIManager {
2368
2411
  const message = isConfigureAction
2369
2412
  ? 'No voice recognition (ASR) profiles are configured. You need to configure at least one voice profile before using voice input.'
2370
2413
  : 'Please configure a voice recognition profile to use voice input functionality.';
2371
-
2414
+
2372
2415
  const options = isConfigureAction
2373
2416
  ? {
2374
2417
  confirmText: 'Open Voice Settings',
@@ -2384,7 +2427,7 @@ class VibeSurfUIManager {
2384
2427
  this.handleShowVoiceSettings();
2385
2428
  }
2386
2429
  };
2387
-
2430
+
2388
2431
  this.modalManager.showWarningModal(title, message, options);
2389
2432
  }
2390
2433
 
@@ -2395,10 +2438,10 @@ class VibeSurfUIManager {
2395
2438
  const canProceed = await this.showTaskRunningWarning('access voice settings');
2396
2439
  if (!canProceed) return;
2397
2440
  }
2398
-
2441
+
2399
2442
  // Show settings and navigate directly to Voice profiles tab
2400
2443
  this.settingsManager.showSettings();
2401
-
2444
+
2402
2445
  // Switch to Voice profiles tab after settings are shown
2403
2446
  setTimeout(() => {
2404
2447
  const voiceTab = document.querySelector('.settings-tab[data-tab="voice-profiles"]');
@@ -2409,14 +2452,14 @@ class VibeSurfUIManager {
2409
2452
  }
2410
2453
 
2411
2454
  showLLMConnectionFailedModal(errorData) {
2412
-
2413
-
2455
+
2456
+
2414
2457
  const llmProfile = errorData.llm_profile || 'unknown';
2415
2458
  const errorMessage = errorData.message || 'Cannot connect to LLM API';
2416
-
2459
+
2417
2460
  const title = 'LLM Connection Failed';
2418
2461
  const message = `${errorMessage}\n\nThe LLM profile "${llmProfile}" cannot be reached. Please check your LLM configuration and API credentials.`;
2419
-
2462
+
2420
2463
  const options = {
2421
2464
  confirmText: 'Update LLM Profile',
2422
2465
  cancelText: 'Cancel',
@@ -2425,8 +2468,8 @@ class VibeSurfUIManager {
2425
2468
  this.handleShowLLMProfileSettings(llmProfile);
2426
2469
  }
2427
2470
  };
2428
-
2429
-
2471
+
2472
+
2430
2473
  this.modalManager.showWarningModal(title, message, options);
2431
2474
  }
2432
2475
 
@@ -2437,10 +2480,10 @@ class VibeSurfUIManager {
2437
2480
  const canProceed = await this.showTaskRunningWarning('access settings');
2438
2481
  if (!canProceed) return;
2439
2482
  }
2440
-
2483
+
2441
2484
  // Show settings and navigate to the specific LLM profile
2442
2485
  this.settingsManager.showSettings();
2443
-
2486
+
2444
2487
  // Navigate to LLM profiles section and edit the specific profile
2445
2488
  // We'll add a method to settings manager to handle this
2446
2489
  if (this.settingsManager.navigateToLLMProfile) {
@@ -2451,7 +2494,7 @@ class VibeSurfUIManager {
2451
2494
  // Loading and notifications
2452
2495
  showLoading(message = 'Loading...') {
2453
2496
  this.state.isLoading = true;
2454
-
2497
+
2455
2498
  if (this.elements.loadingOverlay) {
2456
2499
  const textElement = this.elements.loadingOverlay.querySelector('.loading-text');
2457
2500
  if (textElement) {
@@ -2463,7 +2506,7 @@ class VibeSurfUIManager {
2463
2506
 
2464
2507
  hideLoading() {
2465
2508
  this.state.isLoading = false;
2466
-
2509
+
2467
2510
  if (this.elements.loadingOverlay) {
2468
2511
  this.elements.loadingOverlay.classList.add('hidden');
2469
2512
  }
@@ -2471,28 +2514,30 @@ class VibeSurfUIManager {
2471
2514
 
2472
2515
  showNotification(message, type = 'info') {
2473
2516
  // Map UI notification types to valid Chrome notification types
2474
- const validTypes = {
2475
- 'info': 'basic',
2476
- 'success': 'basic',
2477
- 'warning': 'basic',
2478
- 'error': 'basic',
2479
- 'basic': 'basic',
2480
- 'image': 'image',
2481
- 'list': 'list',
2482
- 'progress': 'progress'
2483
- };
2484
-
2485
- const chromeType = validTypes[type] || 'basic';
2486
-
2487
- // Send notification to background script for display
2488
- chrome.runtime.sendMessage({
2489
- type: 'SHOW_NOTIFICATION',
2490
- data: {
2491
- title: 'VibeSurf',
2492
- message,
2493
- type: chromeType
2494
- }
2495
- });
2517
+ if(type === "error") {
2518
+ const validTypes = {
2519
+ 'info': 'basic',
2520
+ 'success': 'basic',
2521
+ 'warning': 'basic',
2522
+ 'error': 'basic',
2523
+ 'basic': 'basic',
2524
+ 'image': 'image',
2525
+ 'list': 'list',
2526
+ 'progress': 'progress'
2527
+ };
2528
+
2529
+ const chromeType = validTypes[type] || 'basic';
2530
+
2531
+ // Send notification to background script for display
2532
+ chrome.runtime.sendMessage({
2533
+ type: 'SHOW_NOTIFICATION',
2534
+ data: {
2535
+ title: 'VibeSurf',
2536
+ message,
2537
+ type: chromeType
2538
+ }
2539
+ });
2540
+ }
2496
2541
  }
2497
2542
 
2498
2543
  // Restore LLM profile selection from user settings storage
@@ -2501,13 +2546,13 @@ class VibeSurfUIManager {
2501
2546
  if (this.userSettingsStorage && this.elements.llmProfileSelect) {
2502
2547
  // Check current options available
2503
2548
  const availableOptions = Array.from(this.elements.llmProfileSelect.options).map(opt => opt.value);
2504
-
2549
+
2505
2550
  const savedLlmProfile = await this.userSettingsStorage.getSelectedLlmProfile();
2506
-
2551
+
2507
2552
  if (savedLlmProfile && savedLlmProfile.trim() !== '') {
2508
2553
  // Check if the saved profile exists in the current options
2509
2554
  const option = this.elements.llmProfileSelect.querySelector(`option[value="${savedLlmProfile}"]`);
2510
-
2555
+
2511
2556
  if (option) {
2512
2557
  this.elements.llmProfileSelect.value = savedLlmProfile;
2513
2558
  } else {
@@ -2516,7 +2561,7 @@ class VibeSurfUIManager {
2516
2561
  } else {
2517
2562
  // Check localStorage backup for browser restart scenarios
2518
2563
  const backupProfile = localStorage.getItem('vibesurf-llm-profile-backup');
2519
-
2564
+
2520
2565
  if (backupProfile) {
2521
2566
  const option = this.elements.llmProfileSelect.querySelector(`option[value="${backupProfile}"]`);
2522
2567
  if (option) {
@@ -2539,10 +2584,10 @@ class VibeSurfUIManager {
2539
2584
  // Check and update voice button state based on ASR profile availability
2540
2585
  async updateVoiceButtonState() {
2541
2586
  if (!this.elements.voiceRecordBtn) return;
2542
-
2587
+
2543
2588
  try {
2544
2589
  const isVoiceAvailable = await this.voiceRecorder.isVoiceRecordingAvailable();
2545
-
2590
+
2546
2591
  if (!isVoiceAvailable) {
2547
2592
  // Add visual indication but keep button enabled for click handling
2548
2593
  this.elements.voiceRecordBtn.classList.add('voice-disabled');
@@ -2571,56 +2616,58 @@ class VibeSurfUIManager {
2571
2616
  // Check for microphone permission parameter first (like Doubao AI)
2572
2617
  const urlParams = new URLSearchParams(window.location.search);
2573
2618
  const enterParam = urlParams.get('enter');
2574
-
2619
+
2575
2620
  if (enterParam === 'mic-permission') {
2576
2621
  console.log('[UIManager] Detected microphone permission request parameter');
2577
2622
  this.showMicrophonePermissionRequest();
2578
2623
  return; // Skip normal initialization for permission request
2579
2624
  }
2580
-
2625
+
2581
2626
  this.showLoading('Initializing VibeSurf...');
2582
-
2627
+
2583
2628
  // Initialize user settings storage first
2584
2629
  if (this.userSettingsStorage) {
2585
-
2630
+
2586
2631
  await this.userSettingsStorage.initialize();
2587
-
2632
+
2588
2633
  } else {
2589
2634
  console.error('[UIManager] userSettingsStorage not available during initialization');
2590
2635
  }
2591
-
2636
+
2592
2637
  // Load settings data through settings manager
2593
-
2638
+
2594
2639
  await this.settingsManager.loadSettingsData();
2595
-
2596
-
2640
+
2641
+
2597
2642
  // Now restore user selections AFTER profiles are loaded but before any other initialization
2598
-
2643
+
2599
2644
  this.isRestoringSelections = true;
2600
-
2645
+
2601
2646
  try {
2602
2647
  // Restore LLM profile selection first
2603
2648
  await this.restoreLlmProfileSelection();
2604
-
2649
+
2605
2650
  // Restore agent mode selection
2606
2651
  await this.restoreAgentModeSelection();
2607
2652
  } finally {
2608
2653
  this.isRestoringSelections = false;
2609
2654
  }
2610
-
2655
+
2611
2656
  // Check and update voice button state based on ASR profile availability
2612
2657
  await this.updateVoiceButtonState();
2613
-
2614
-
2658
+
2659
+ // Check version and show upgrade button if needed
2660
+ await this.checkVersionAndShowUpgrade();
2661
+
2615
2662
  // Create initial session if none exists
2616
-
2663
+
2617
2664
  if (!this.sessionManager.getCurrentSession()) {
2618
-
2665
+
2619
2666
  await this.sessionManager.createSession();
2620
2667
  }
2621
-
2668
+
2622
2669
  this.hideLoading();
2623
-
2670
+
2624
2671
  } catch (error) {
2625
2672
  this.hideLoading();
2626
2673
  console.error('[UIManager] Initialization failed:', error);
@@ -2633,7 +2680,7 @@ class VibeSurfUIManager {
2633
2680
  console.log('[UIManager] Showing simplified microphone permission request');
2634
2681
  console.log('[UIManager] Current URL:', window.location.href);
2635
2682
  console.log('[UIManager] URL params:', window.location.search);
2636
-
2683
+
2637
2684
  // Simple approach: just try to get permission directly
2638
2685
  this.requestMicrophonePermissionDirectly();
2639
2686
  }
@@ -2641,24 +2688,24 @@ class VibeSurfUIManager {
2641
2688
  // Direct microphone permission request (simplified like Doubao AI)
2642
2689
  async requestMicrophonePermissionDirectly() {
2643
2690
  console.log('[UIManager] Requesting microphone permission directly');
2644
-
2691
+
2645
2692
  try {
2646
2693
  // Immediately try to get microphone permission
2647
2694
  console.log('[UIManager] Calling getUserMedia...');
2648
2695
  console.log('[UIManager] User agent:', navigator.userAgent);
2649
2696
  console.log('[UIManager] Location protocol:', window.location.protocol);
2650
2697
  console.log('[UIManager] Location href:', window.location.href);
2651
-
2698
+
2652
2699
  const stream = await navigator.mediaDevices.getUserMedia({
2653
2700
  audio: true,
2654
2701
  video: false
2655
2702
  });
2656
-
2703
+
2657
2704
  console.log('[UIManager] Microphone permission granted!');
2658
-
2705
+
2659
2706
  // Stop the stream immediately (we just need permission)
2660
2707
  stream.getTracks().forEach(track => track.stop());
2661
-
2708
+
2662
2709
  // Send success message back to original tab
2663
2710
  console.log('[UIManager] Sending success message...');
2664
2711
  chrome.runtime.sendMessage({
@@ -2667,19 +2714,19 @@ class VibeSurfUIManager {
2667
2714
  }, (response) => {
2668
2715
  console.log('[UIManager] Success message response:', response);
2669
2716
  });
2670
-
2717
+
2671
2718
  // Close this tab after a short delay
2672
2719
  setTimeout(() => {
2673
2720
  console.log('[UIManager] Closing tab...');
2674
2721
  window.close();
2675
2722
  }, 1000);
2676
-
2723
+
2677
2724
  } catch (error) {
2678
2725
  console.error('[UIManager] Microphone permission denied:', error);
2679
2726
  console.log('[UIManager] Error name:', error.name);
2680
2727
  console.log('[UIManager] Error message:', error.message);
2681
2728
  console.log('[UIManager] Error stack:', error.stack);
2682
-
2729
+
2683
2730
  // Send error message back to original tab
2684
2731
  console.log('[UIManager] Sending error message...');
2685
2732
  chrome.runtime.sendMessage({
@@ -2690,7 +2737,7 @@ class VibeSurfUIManager {
2690
2737
  }, (response) => {
2691
2738
  console.log('[UIManager] Error message response:', response);
2692
2739
  });
2693
-
2740
+
2694
2741
  // Close this tab after a short delay
2695
2742
  setTimeout(() => {
2696
2743
  console.log('[UIManager] Closing tab after error...');
@@ -2701,13 +2748,13 @@ class VibeSurfUIManager {
2701
2748
  // Restore agent mode selection from user settings storage
2702
2749
  async restoreAgentModeSelection() {
2703
2750
  try {
2704
-
2751
+
2705
2752
  if (this.userSettingsStorage && this.elements.agentModeSelect) {
2706
2753
  // Check current options available
2707
2754
  const availableOptions = Array.from(this.elements.agentModeSelect.options).map(opt => opt.value);
2708
-
2755
+
2709
2756
  const savedAgentMode = await this.userSettingsStorage.getSelectedAgentMode();
2710
-
2757
+
2711
2758
  if (savedAgentMode && savedAgentMode.trim() !== '') {
2712
2759
  // Restore any saved agent mode, including 'thinking'
2713
2760
  this.elements.agentModeSelect.value = savedAgentMode;
@@ -2722,7 +2769,7 @@ class VibeSurfUIManager {
2722
2769
  } else {
2723
2770
  // Check localStorage backup for browser restart scenarios
2724
2771
  const backupMode = localStorage.getItem('vibesurf-agent-mode-backup');
2725
-
2772
+
2726
2773
  if (backupMode) {
2727
2774
  const option = this.elements.agentModeSelect.querySelector(`option[value="${backupMode}"]`);
2728
2775
  if (option) {
@@ -2742,6 +2789,77 @@ class VibeSurfUIManager {
2742
2789
  }
2743
2790
  }
2744
2791
 
2792
+ // Version checking and upgrade button management
2793
+ async checkVersionAndShowUpgrade() {
2794
+ try {
2795
+ console.log('[UIManager] Checking version for upgrade notification...');
2796
+
2797
+ // Get extension version from version.js
2798
+ const extensionVersion = window.VIBESURF_EXTENSION_VERSION;
2799
+ if (!extensionVersion) {
2800
+ console.warn('[UIManager] Extension version not found');
2801
+ return;
2802
+ }
2803
+
2804
+ console.log('[UIManager] Extension version:', extensionVersion);
2805
+
2806
+ // Get VibeSurf backend version from API
2807
+ const versionResponse = await this.apiClient.getVibeSurfVersion();
2808
+ const backendVersion = versionResponse.version;
2809
+
2810
+ if (!backendVersion) {
2811
+ console.warn('[UIManager] Backend version not found');
2812
+ return;
2813
+ }
2814
+
2815
+ console.log('[UIManager] Backend version:', backendVersion);
2816
+
2817
+ // Compare versions - show upgrade if extension version is different from backend
2818
+ const shouldShowUpgrade = this.compareVersions(extensionVersion, backendVersion);
2819
+
2820
+ if (shouldShowUpgrade) {
2821
+ console.log('[UIManager] Extension version mismatch detected, showing upgrade button');
2822
+ this.showUpgradeButton();
2823
+ } else {
2824
+ console.log('[UIManager] Extension version is up to date');
2825
+ this.hideUpgradeButton();
2826
+ }
2827
+
2828
+ } catch (error) {
2829
+ console.error('[UIManager] Failed to check version:', error);
2830
+ // Don't show upgrade button on error to avoid false positives
2831
+ }
2832
+ }
2833
+
2834
+ // Compare versions - returns true if extension needs upgrade
2835
+ compareVersions(extensionVersion, backendVersion) {
2836
+ // Remove any +dev suffix from extension version for comparison
2837
+ const cleanExtensionVersion = extensionVersion.replace(/\+.*$/, '');
2838
+ const cleanBackendVersion = backendVersion.replace(/\+.*$/, '');
2839
+
2840
+ console.log('[UIManager] Comparing versions:', cleanExtensionVersion, 'vs', cleanBackendVersion);
2841
+
2842
+ // Simple string comparison - if they're different, show upgrade
2843
+ // This handles cases where extension is older, newer, or just different
2844
+ return cleanExtensionVersion !== cleanBackendVersion;
2845
+ }
2846
+
2847
+ // Show upgrade button with animation
2848
+ showUpgradeButton() {
2849
+ if (this.elements.upgradeBtn) {
2850
+ this.elements.upgradeBtn.classList.remove('hidden');
2851
+ console.log('[UIManager] Upgrade button shown');
2852
+ }
2853
+ }
2854
+
2855
+ // Hide upgrade button
2856
+ hideUpgradeButton() {
2857
+ if (this.elements.upgradeBtn) {
2858
+ this.elements.upgradeBtn.classList.add('hidden');
2859
+ console.log('[UIManager] Upgrade button hidden');
2860
+ }
2861
+ }
2862
+
2745
2863
  // Cleanup
2746
2864
  destroy() {
2747
2865
  // Prevent multiple cleanup calls
@@ -2749,20 +2867,20 @@ class VibeSurfUIManager {
2749
2867
  console.log('[UIManager] Cleanup already in progress, skipping...');
2750
2868
  return;
2751
2869
  }
2752
-
2870
+
2753
2871
  this.isDestroying = true;
2754
2872
  console.log('[UIManager] Destroying UI manager...');
2755
-
2873
+
2756
2874
  try {
2757
2875
  // Stop task status monitoring
2758
2876
  this.stopTaskStatusMonitoring();
2759
-
2877
+
2760
2878
  // Cleanup voice recorder
2761
2879
  if (this.voiceRecorder) {
2762
2880
  this.voiceRecorder.cleanup();
2763
2881
  this.voiceRecorder = null;
2764
2882
  }
2765
-
2883
+
2766
2884
  // Cleanup managers with error handling
2767
2885
  if (this.settingsManager) {
2768
2886
  try {
@@ -2774,7 +2892,7 @@ class VibeSurfUIManager {
2774
2892
  }
2775
2893
  this.settingsManager = null;
2776
2894
  }
2777
-
2895
+
2778
2896
  if (this.historyManager) {
2779
2897
  try {
2780
2898
  if (typeof this.historyManager.destroy === 'function') {
@@ -2785,7 +2903,7 @@ class VibeSurfUIManager {
2785
2903
  }
2786
2904
  this.historyManager = null;
2787
2905
  }
2788
-
2906
+
2789
2907
  if (this.fileManager) {
2790
2908
  try {
2791
2909
  if (typeof this.fileManager.destroy === 'function') {
@@ -2796,7 +2914,7 @@ class VibeSurfUIManager {
2796
2914
  }
2797
2915
  this.fileManager = null;
2798
2916
  }
2799
-
2917
+
2800
2918
  if (this.modalManager) {
2801
2919
  try {
2802
2920
  if (typeof this.modalManager.destroy === 'function') {
@@ -2807,14 +2925,14 @@ class VibeSurfUIManager {
2807
2925
  }
2808
2926
  this.modalManager = null;
2809
2927
  }
2810
-
2928
+
2811
2929
  // Clear state
2812
2930
  this.state = {
2813
2931
  isLoading: false,
2814
2932
  isTaskRunning: false,
2815
2933
  taskInfo: null
2816
2934
  };
2817
-
2935
+
2818
2936
  console.log('[UIManager] UI manager cleanup complete');
2819
2937
  } catch (error) {
2820
2938
  console.error('[UIManager] Error during destroy:', error);
@@ -2825,8 +2943,8 @@ class VibeSurfUIManager {
2825
2943
 
2826
2944
  // Tab Selector Methods
2827
2945
  initializeTabSelector() {
2828
-
2829
-
2946
+
2947
+
2830
2948
  // Initialize tab selector state
2831
2949
  this.tabSelectorState = {
2832
2950
  isVisible: false,
@@ -2835,19 +2953,19 @@ class VibeSurfUIManager {
2835
2953
  atPosition: -1 // Position where @ was typed
2836
2954
  };
2837
2955
 
2838
-
2839
-
2956
+
2957
+
2840
2958
  // Bind tab selector events
2841
2959
  this.bindTabSelectorEvents();
2842
2960
  }
2843
2961
 
2844
2962
  bindTabSelectorEvents() {
2845
-
2846
-
2847
-
2963
+
2964
+
2965
+
2848
2966
  // Select all radio button
2849
2967
  this.elements.selectAllTabs?.addEventListener('change', this.handleSelectAllTabs.bind(this));
2850
-
2968
+
2851
2969
  // Hide on click outside
2852
2970
  document.addEventListener('click', (event) => {
2853
2971
  if (this.tabSelectorState.isVisible &&
@@ -2857,8 +2975,8 @@ class VibeSurfUIManager {
2857
2975
  this.hideTabSelector();
2858
2976
  }
2859
2977
  });
2860
-
2861
-
2978
+
2979
+
2862
2980
  }
2863
2981
 
2864
2982
  handleTabSelectorInput(event) {
@@ -2867,15 +2985,15 @@ class VibeSurfUIManager {
2867
2985
  console.warn('[UIManager] Tab selector state not initialized');
2868
2986
  return;
2869
2987
  }
2870
-
2988
+
2871
2989
  const inputValue = event.target.value;
2872
2990
  const cursorPosition = event.target.selectionStart;
2873
-
2874
-
2875
-
2991
+
2992
+
2993
+
2876
2994
  // Check if @ was just typed
2877
2995
  if (inputValue[cursorPosition - 1] === '@') {
2878
-
2996
+
2879
2997
  this.tabSelectorState.atPosition = cursorPosition - 1;
2880
2998
  this.showTabSelector();
2881
2999
  } else if (this.tabSelectorState.isVisible) {
@@ -2883,24 +3001,24 @@ class VibeSurfUIManager {
2883
3001
  if (this.tabSelectorState.atPosition >= 0 &&
2884
3002
  (this.tabSelectorState.atPosition >= inputValue.length ||
2885
3003
  inputValue[this.tabSelectorState.atPosition] !== '@')) {
2886
-
3004
+
2887
3005
  this.hideTabSelector();
2888
3006
  return;
2889
3007
  }
2890
-
3008
+
2891
3009
  // Hide tab selector if user continues typing after @
2892
3010
  const textAfterAt = inputValue.substring(this.tabSelectorState.atPosition + 1, cursorPosition);
2893
3011
  if (textAfterAt.length > 0 && !textAfterAt.match(/^[\s]*$/)) {
2894
-
3012
+
2895
3013
  this.hideTabSelector();
2896
3014
  }
2897
3015
  }
2898
3016
  }
2899
3017
 
2900
3018
  async showTabSelector() {
2901
-
2902
-
2903
-
3019
+
3020
+
3021
+
2904
3022
  if (!this.elements.tabSelectorDropdown || !this.elements.taskInput) {
2905
3023
  console.error('[UIManager] Tab selector elements not found', {
2906
3024
  dropdown: this.elements.tabSelectorDropdown,
@@ -2910,26 +3028,26 @@ class VibeSurfUIManager {
2910
3028
  }
2911
3029
 
2912
3030
  try {
2913
-
3031
+
2914
3032
  // Fetch tab data from backend
2915
3033
  await this.populateTabSelector();
2916
-
2917
-
3034
+
3035
+
2918
3036
  // Position the dropdown relative to the input
2919
3037
  this.positionTabSelector();
2920
-
2921
-
3038
+
3039
+
2922
3040
  // Show the dropdown with explicit visibility
2923
3041
  this.elements.tabSelectorDropdown.classList.remove('hidden');
2924
3042
  this.elements.tabSelectorDropdown.style.display = 'block';
2925
3043
  this.elements.tabSelectorDropdown.style.visibility = 'visible';
2926
3044
  this.elements.tabSelectorDropdown.style.opacity = '1';
2927
3045
  this.tabSelectorState.isVisible = true;
2928
-
2929
-
2930
-
2931
-
2932
-
3046
+
3047
+
3048
+
3049
+
3050
+
2933
3051
  } catch (error) {
2934
3052
  console.error('[UIManager] Failed to show tab selector:', error);
2935
3053
  this.showNotification('Failed to load browser tabs', 'error');
@@ -2944,21 +3062,21 @@ class VibeSurfUIManager {
2944
3062
  this.tabSelectorState.isVisible = false;
2945
3063
  this.tabSelectorState.selectedTabs = [];
2946
3064
  this.tabSelectorState.atPosition = -1;
2947
-
2948
-
3065
+
3066
+
2949
3067
  }
2950
3068
 
2951
3069
  positionTabSelector() {
2952
3070
  if (!this.elements.tabSelectorDropdown || !this.elements.taskInput) return;
2953
-
3071
+
2954
3072
  const inputRect = this.elements.taskInput.getBoundingClientRect();
2955
3073
  const dropdown = this.elements.tabSelectorDropdown;
2956
-
2957
-
2958
-
3074
+
3075
+
3076
+
2959
3077
  // Calculate 90% width of input
2960
3078
  const dropdownWidth = inputRect.width * 0.9;
2961
-
3079
+
2962
3080
  // Position dropdown ABOVE the input (not below)
2963
3081
  dropdown.style.position = 'fixed';
2964
3082
  dropdown.style.bottom = `${window.innerHeight - inputRect.top + 5}px`; // Above the input
@@ -2967,38 +3085,38 @@ class VibeSurfUIManager {
2967
3085
  dropdown.style.zIndex = '9999';
2968
3086
  dropdown.style.maxHeight = '300px';
2969
3087
  dropdown.style.overflowY = 'auto';
2970
-
2971
-
3088
+
3089
+
2972
3090
  }
2973
3091
 
2974
3092
  async populateTabSelector() {
2975
3093
  try {
2976
-
3094
+
2977
3095
  // Get all tabs and active tab from backend
2978
3096
  const [allTabsResponse, activeTabResponse] = await Promise.all([
2979
3097
  this.apiClient.getAllBrowserTabs(),
2980
3098
  this.apiClient.getActiveBrowserTab()
2981
3099
  ]);
2982
-
2983
-
2984
-
3100
+
3101
+
3102
+
2985
3103
  const allTabs = allTabsResponse.tabs || allTabsResponse || {};
2986
3104
  const activeTab = activeTabResponse.tab || activeTabResponse || {};
2987
3105
  const activeTabId = Object.keys(activeTab)[0];
2988
-
2989
-
2990
-
3106
+
3107
+
3108
+
2991
3109
  this.tabSelectorState.allTabs = allTabs;
2992
-
3110
+
2993
3111
  // Clear existing options
2994
3112
  if (this.elements.tabOptionsList) {
2995
3113
  this.elements.tabOptionsList.innerHTML = '';
2996
-
3114
+
2997
3115
  } else {
2998
3116
  console.error('[UIManager] tabOptionsList element not found!');
2999
3117
  return;
3000
3118
  }
3001
-
3119
+
3002
3120
  // Add fallback test data if no tabs returned
3003
3121
  if (Object.keys(allTabs).length === 0) {
3004
3122
  console.warn('[UIManager] No tabs returned from API, adding test data for debugging');
@@ -3007,31 +3125,31 @@ class VibeSurfUIManager {
3007
3125
  'test-2': { title: 'Test Tab 2', url: 'https://google.com' },
3008
3126
  'test-3': { title: 'Very Long Tab Title That Should Be Truncated', url: 'https://github.com' }
3009
3127
  };
3010
-
3128
+
3011
3129
  Object.entries(testTabs).forEach(([tabId, tabInfo]) => {
3012
3130
  const isActive = tabId === 'test-1';
3013
-
3131
+
3014
3132
  const option = this.createTabOption(tabId, tabInfo, isActive);
3015
3133
  this.elements.tabOptionsList.appendChild(option);
3016
3134
  });
3017
-
3135
+
3018
3136
  this.tabSelectorState.allTabs = testTabs;
3019
3137
  } else {
3020
3138
  // Add real tab options
3021
3139
  Object.entries(allTabs).forEach(([tabId, tabInfo]) => {
3022
3140
  const isActive = tabId === activeTabId;
3023
-
3141
+
3024
3142
  const option = this.createTabOption(tabId, tabInfo, isActive);
3025
3143
  this.elements.tabOptionsList.appendChild(option);
3026
3144
  });
3027
3145
  }
3028
-
3146
+
3029
3147
  // Reset select all checkbox
3030
3148
  if (this.elements.selectAllTabs) {
3031
3149
  this.elements.selectAllTabs.checked = false;
3032
3150
  }
3033
-
3034
-
3151
+
3152
+
3035
3153
  } catch (error) {
3036
3154
  console.error('[UIManager] Failed to populate tab selector:', error);
3037
3155
  throw error;
@@ -3042,12 +3160,12 @@ class VibeSurfUIManager {
3042
3160
  const option = document.createElement('div');
3043
3161
  option.className = `tab-option ${isActive ? 'active-tab' : ''}`;
3044
3162
  option.dataset.tabId = tabId;
3045
-
3163
+
3046
3164
  // Format title (first 20 characters)
3047
3165
  const displayTitle = tabInfo.title ?
3048
3166
  (tabInfo.title.length > 20 ? tabInfo.title.substring(0, 20) + '...' : tabInfo.title) :
3049
3167
  'Unknown Title';
3050
-
3168
+
3051
3169
  option.innerHTML = `
3052
3170
  <input type="radio" class="tab-radio" id="tab-${tabId}" name="tab-selection" value="${tabId}">
3053
3171
  <label for="tab-${tabId}" class="tab-label">
@@ -3056,23 +3174,23 @@ class VibeSurfUIManager {
3056
3174
  ${isActive ? '<span class="active-indicator">(Active)</span>' : ''}
3057
3175
  </label>
3058
3176
  `;
3059
-
3177
+
3060
3178
  // Add change event to radio button for auto-confirm
3061
3179
  const radio = option.querySelector('.tab-radio');
3062
3180
  radio?.addEventListener('change', this.handleTabSelection.bind(this));
3063
-
3181
+
3064
3182
  return option;
3065
3183
  }
3066
3184
 
3067
3185
  handleTabSelection(event) {
3068
3186
  const tabId = event.target.value;
3069
-
3187
+
3070
3188
  if (event.target.checked) {
3071
3189
  // For radio buttons, replace the selected tabs array with just this tab
3072
3190
  this.tabSelectorState.selectedTabs = [tabId];
3073
-
3074
-
3075
-
3191
+
3192
+
3193
+
3076
3194
  // Auto-confirm selection immediately
3077
3195
  this.confirmTabSelection();
3078
3196
  }
@@ -3083,9 +3201,9 @@ class VibeSurfUIManager {
3083
3201
  // "Select All" means list all tabs in the input
3084
3202
  const allTabIds = Object.keys(this.tabSelectorState.allTabs);
3085
3203
  this.tabSelectorState.selectedTabs = allTabIds;
3086
-
3087
-
3088
-
3204
+
3205
+
3206
+
3089
3207
  // Auto-confirm selection immediately
3090
3208
  this.confirmTabSelection();
3091
3209
  }
@@ -3093,10 +3211,10 @@ class VibeSurfUIManager {
3093
3211
 
3094
3212
  updateSelectAllState() {
3095
3213
  if (!this.elements.selectAllTabs || !this.elements.tabOptionsList) return;
3096
-
3214
+
3097
3215
  const checkboxes = this.elements.tabOptionsList.querySelectorAll('.tab-checkbox');
3098
3216
  const checkedBoxes = this.elements.tabOptionsList.querySelectorAll('.tab-checkbox:checked');
3099
-
3217
+
3100
3218
  if (checkboxes.length === 0) {
3101
3219
  this.elements.selectAllTabs.indeterminate = false;
3102
3220
  this.elements.selectAllTabs.checked = false;
@@ -3117,27 +3235,27 @@ class VibeSurfUIManager {
3117
3235
  this.showNotification('Please select at least one tab', 'warning');
3118
3236
  return;
3119
3237
  }
3120
-
3238
+
3121
3239
  // Replace @ with selected tabs information
3122
3240
  this.insertSelectedTabsIntoInput();
3123
-
3241
+
3124
3242
  // Hide the selector
3125
3243
  this.hideTabSelector();
3126
-
3244
+
3127
3245
  console.log(`[UIManager] ${this.tabSelectorState.selectedTabs.length} tab(s) selected and confirmed`);
3128
3246
  }
3129
3247
 
3130
3248
  insertSelectedTabsIntoInput() {
3131
3249
  if (!this.elements.taskInput) return;
3132
-
3250
+
3133
3251
  const input = this.elements.taskInput;
3134
3252
  const currentValue = input.value;
3135
3253
  const atPosition = this.tabSelectorState.atPosition;
3136
-
3254
+
3137
3255
  // Use special Unicode characters as boundaries for easy deletion
3138
3256
  const TAB_START_MARKER = '\u200B'; // Zero-width space
3139
3257
  const TAB_END_MARKER = '\u200C'; // Zero-width non-joiner
3140
-
3258
+
3141
3259
  // Create tab information string in new format: @ tab_id: title[:20]
3142
3260
  const selectedTabsInfo = this.tabSelectorState.selectedTabs.map(tabId => {
3143
3261
  const tabInfo = this.tabSelectorState.allTabs[tabId];
@@ -3146,17 +3264,17 @@ class VibeSurfUIManager {
3146
3264
  'Unknown';
3147
3265
  return `${TAB_START_MARKER}@ ${tabId}: ${displayTitle}${TAB_END_MARKER}`;
3148
3266
  }).join(' ');
3149
-
3267
+
3150
3268
  // Replace @ with tab selection (preserve the @ symbol)
3151
3269
  const beforeAt = currentValue.substring(0, atPosition);
3152
3270
  const afterAt = currentValue.substring(atPosition + 1);
3153
3271
  const newValue = `${beforeAt}${selectedTabsInfo} ${afterAt}`;
3154
-
3272
+
3155
3273
  input.value = newValue;
3156
-
3274
+
3157
3275
  // Trigger input change event for validation
3158
3276
  this.handleTaskInputChange({ target: input });
3159
-
3277
+
3160
3278
  // Set cursor position after the inserted text
3161
3279
  const newCursorPosition = beforeAt.length + selectedTabsInfo.length + 1; // Add space
3162
3280
  input.setSelectionRange(newCursorPosition, newCursorPosition);
@@ -3168,7 +3286,7 @@ class VibeSurfUIManager {
3168
3286
  if (this.tabSelectorState.selectedTabs.length === 0) {
3169
3287
  return null;
3170
3288
  }
3171
-
3289
+
3172
3290
  const selectedTabsData = {};
3173
3291
  this.tabSelectorState.selectedTabs.forEach(tabId => {
3174
3292
  const tabInfo = this.tabSelectorState.allTabs[tabId];
@@ -3179,7 +3297,7 @@ class VibeSurfUIManager {
3179
3297
  };
3180
3298
  }
3181
3299
  });
3182
-
3300
+
3183
3301
  return selectedTabsData;
3184
3302
  }
3185
3303
 
@@ -3237,10 +3355,10 @@ class VibeSurfUIManager {
3237
3355
 
3238
3356
  // Update filter based on text after /
3239
3357
  const textAfterSlash = inputValue.substring(this.skillSelectorState.slashPosition + 1, cursorPosition);
3240
-
3358
+
3241
3359
  // Only consider text up to the next space or special character
3242
3360
  const filterText = textAfterSlash.split(/[\s@]/)[0];
3243
-
3361
+
3244
3362
  if (this.skillSelectorState.currentFilter !== filterText) {
3245
3363
  this.skillSelectorState.currentFilter = filterText;
3246
3364
  this.filterSkills();
@@ -3356,7 +3474,7 @@ class VibeSurfUIManager {
3356
3474
 
3357
3475
  filterSkills() {
3358
3476
  const filter = this.skillSelectorState.currentFilter.toLowerCase();
3359
-
3477
+
3360
3478
  if (!filter) {
3361
3479
  this.skillSelectorState.filteredSkills = this.skillSelectorState.allSkills;
3362
3480
  } else {