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.
- vibe_surf/_version.py +2 -2
- vibe_surf/agents/browser_use_agent.py +1 -77
- vibe_surf/agents/prompts/vibe_surf_prompt.py +41 -4
- vibe_surf/agents/report_writer_agent.py +18 -38
- vibe_surf/agents/vibe_surf_agent.py +121 -133
- vibe_surf/agents/views.py +6 -15
- vibe_surf/backend/api/composio.py +46 -1
- vibe_surf/backend/api/schedule.py +331 -0
- vibe_surf/backend/api/vibesurf.py +449 -0
- vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
- vibe_surf/backend/database/models.py +34 -1
- vibe_surf/backend/database/queries.py +254 -1
- vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
- vibe_surf/backend/frontend/assets/SlackIcon-DH9MFXnM.js +1 -0
- vibe_surf/backend/frontend/assets/Wikipedia-MKjlsFhR.js +1 -0
- vibe_surf/backend/frontend/assets/Wolfram-DZjh94KW.js +1 -0
- vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
- vibe_surf/backend/frontend/assets/a-arrow-down-M5pMOHfz.js +6 -0
- vibe_surf/backend/frontend/assets/a-arrow-up-Bhux1P9g.js +6 -0
- vibe_surf/backend/frontend/assets/a-large-small-CxpoIZ2k.js +6 -0
- vibe_surf/backend/frontend/assets/accessibility-DIOswxup.js +6 -0
- vibe_surf/backend/frontend/assets/activity-Cgoj6BfB.js +6 -0
- vibe_surf/backend/frontend/assets/air-vent-BRuCRSP-.js +6 -0
- vibe_surf/backend/frontend/assets/airplay-D6ddOHpT.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-clock-BswE0svo.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-clock-check-CMKnL746.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-clock-minus-Cmry03T1.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-clock-off-ByCGR7KD.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-clock-plus-D80NSz4S.js +6 -0
- vibe_surf/backend/frontend/assets/alarm-smoke-DyUVOJUh.js +6 -0
- vibe_surf/backend/frontend/assets/album-CGIJADgR.js +6 -0
- vibe_surf/backend/frontend/assets/align-center-Cb9nxg1u.js +6 -0
- vibe_surf/backend/frontend/assets/align-center-horizontal-DunWyH8w.js +6 -0
- vibe_surf/backend/frontend/assets/align-center-vertical-COWbwf4r.js +6 -0
- vibe_surf/backend/frontend/assets/align-end-horizontal-BXGWZnJg.js +6 -0
- vibe_surf/backend/frontend/assets/align-end-vertical-DsDprlL7.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-fSZ29QkE.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-C3BFRnLg.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-DqYzU1-w.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-justify-center-2iNXkDKh.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-justify-end-COPIkT0U.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-justify-start-DoS3Jrzb.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-space-around-k9yEGjMh.js +6 -0
- vibe_surf/backend/frontend/assets/align-horizontal-space-between-C6RzmtkD.js +6 -0
- vibe_surf/backend/frontend/assets/align-justify-BvD3xtAK.js +6 -0
- vibe_surf/backend/frontend/assets/align-left-BP84nxXJ.js +6 -0
- vibe_surf/backend/frontend/assets/align-right-6z3k9YVj.js +6 -0
- vibe_surf/backend/frontend/assets/align-start-horizontal-DRihqJTg.js +6 -0
- vibe_surf/backend/frontend/assets/align-start-vertical-Bs-ISVmy.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-distribute-center-CU82VWLq.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-distribute-end-IrubG5LP.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-distribute-start-BgBu3t8X.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-justify-center-e7psKZ4D.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-justify-end-CncIBU5b.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-justify-start-21_MQReA.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-space-around-NJNn7zPP.js +6 -0
- vibe_surf/backend/frontend/assets/align-vertical-space-between-LYs4c5i9.js +6 -0
- vibe_surf/backend/frontend/assets/ambulance-jMfwSVYH.js +6 -0
- vibe_surf/backend/frontend/assets/ampersand-B1-1HYj1.js +6 -0
- vibe_surf/backend/frontend/assets/ampersands-DVVxe50v.js +6 -0
- vibe_surf/backend/frontend/assets/amphora-B12bYdql.js +6 -0
- vibe_surf/backend/frontend/assets/anchor-C_JuZyO5.js +6 -0
- vibe_surf/backend/frontend/assets/angry-KqzvbAxB.js +6 -0
- vibe_surf/backend/frontend/assets/annoyed-CZXUdq0q.js +6 -0
- vibe_surf/backend/frontend/assets/antenna-CFlKnuEE.js +6 -0
- vibe_surf/backend/frontend/assets/anvil-ObmOBzcW.js +6 -0
- vibe_surf/backend/frontend/assets/aperture-CU6mXxj8.js +6 -0
- vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
- vibe_surf/backend/frontend/assets/app-window-D5iSiHiS.js +6 -0
- vibe_surf/backend/frontend/assets/app-window-mac-QOaPWoGX.js +6 -0
- vibe_surf/backend/frontend/assets/apple-D7ZsI-et.js +6 -0
- vibe_surf/backend/frontend/assets/archive-FLn_d8Ny.js +6 -0
- vibe_surf/backend/frontend/assets/archive-restore-C668KwvC.js +6 -0
- vibe_surf/backend/frontend/assets/archive-x-DJJed9T2.js +6 -0
- vibe_surf/backend/frontend/assets/armchair-DfXLs0Nj.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-down-DU2dtkeu.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-down-dash-CzsIOlhF.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-left-CCeUj8q9.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-left-dash-CFpRtORj.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-right-C1QE56k7.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-right-dash-D6H2wruv.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-up-0f0CsejQ.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-big-up-dash-Dz-Sbw66.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-0-1-B1PGN6BJ.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-1-0-Bcl1KrrL.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-DZKzcieL.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-a-z-DurN_xiR.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-from-line-D2i9DDA0.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-left-Pid0zUYj.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-DtnDCgZY.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-right-BgepY9bM.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-to-dot-C5rQ12yn.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-to-line-DovZ64L0.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-up-D5-v7CDC.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-CGAsRLvP.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-down-z-a-DOGHwUgR.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-left-from-line-DwY8iDxY.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-left-hKr3yGVm.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-left-right-Be5fvvG0.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-left-to-line-DKHIypu3.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-right-BaRZuB8W.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-right-from-line-D3jqt4-q.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-right-left-BKRuMAR-.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-right-to-line-rtWVy_CC.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-0-1-yF8Nt_KM.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-1-0-WRlLFmSw.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-BKnAmgTC.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-a-z-COXfk41y.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-down-Dtw4v35K.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-from-dot-B1XSjc2P.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-from-line-C-lHvDpd.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-left-CYojov8T.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-B54CYEHs.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-right-Bdo9Z-7A.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-to-line-DS_I-9Vp.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-B3GeXj9O.js +6 -0
- vibe_surf/backend/frontend/assets/arrow-up-z-a-CdyZuD75.js +6 -0
- vibe_surf/backend/frontend/assets/arrows-up-from-line-0sYhsLRw.js +6 -0
- vibe_surf/backend/frontend/assets/asterisk-CQWlVYDB.js +6 -0
- vibe_surf/backend/frontend/assets/at-sign-Dug8NlWL.js +6 -0
- vibe_surf/backend/frontend/assets/atom-Cx1vCOFb.js +6 -0
- vibe_surf/backend/frontend/assets/audio-lines-Cimsj6_f.js +6 -0
- vibe_surf/backend/frontend/assets/audio-waveform-BxCl1LyQ.js +6 -0
- vibe_surf/backend/frontend/assets/award-dRU3xhJ7.js +6 -0
- vibe_surf/backend/frontend/assets/axe-B8CCMGTD.js +6 -0
- vibe_surf/backend/frontend/assets/axis-3d-D2ZIjjx3.js +6 -0
- vibe_surf/backend/frontend/assets/baby-DWh5CwfC.js +6 -0
- vibe_surf/backend/frontend/assets/backpack-D9rjYWvf.js +6 -0
- vibe_surf/backend/frontend/assets/badge-C0r2CPAV.js +6 -0
- vibe_surf/backend/frontend/assets/badge-alert-Do89zN-s.js +6 -0
- vibe_surf/backend/frontend/assets/badge-cent-Dmv_cqc-.js +6 -0
- vibe_surf/backend/frontend/assets/badge-check--_Rese0X.js +6 -0
- vibe_surf/backend/frontend/assets/badge-dollar-sign-BHnNL8ma.js +6 -0
- vibe_surf/backend/frontend/assets/badge-euro-CKNQv-oO.js +6 -0
- vibe_surf/backend/frontend/assets/badge-help-BlZAHEa-.js +6 -0
- vibe_surf/backend/frontend/assets/badge-indian-rupee-BNIUcLaI.js +6 -0
- vibe_surf/backend/frontend/assets/badge-info-CrX5KTPR.js +6 -0
- vibe_surf/backend/frontend/assets/badge-japanese-yen-0mdbiK5f.js +6 -0
- vibe_surf/backend/frontend/assets/badge-minus-BX_scLIK.js +6 -0
- vibe_surf/backend/frontend/assets/badge-percent-BSJP3Okj.js +6 -0
- vibe_surf/backend/frontend/assets/badge-plus-DhlqCq3Z.js +6 -0
- vibe_surf/backend/frontend/assets/badge-pound-sterling-QpnkBN56.js +6 -0
- vibe_surf/backend/frontend/assets/badge-russian-ruble-L30Ncxnh.js +6 -0
- vibe_surf/backend/frontend/assets/badge-swiss-franc-BQrLli-C.js +6 -0
- vibe_surf/backend/frontend/assets/badge-x-DDXVSWE5.js +6 -0
- vibe_surf/backend/frontend/assets/baggage-claim-Nd9Qw4rX.js +6 -0
- vibe_surf/backend/frontend/assets/ban-fSKv80ss.js +6 -0
- vibe_surf/backend/frontend/assets/banana-DTClkW0x.js +6 -0
- vibe_surf/backend/frontend/assets/bandage-DLyvBCvf.js +6 -0
- vibe_surf/backend/frontend/assets/banknote-ArlwGdT1.js +6 -0
- vibe_surf/backend/frontend/assets/banknote-arrow-down-Dx9vP7KP.js +6 -0
- vibe_surf/backend/frontend/assets/banknote-arrow-up-CZNOWrKW.js +6 -0
- vibe_surf/backend/frontend/assets/banknote-x-y8ot0KXI.js +6 -0
- vibe_surf/backend/frontend/assets/barcode-U3mgwXvC.js +6 -0
- vibe_surf/backend/frontend/assets/baseline-Bb17nsNt.js +6 -0
- vibe_surf/backend/frontend/assets/bath-Fu-10Xqv.js +6 -0
- vibe_surf/backend/frontend/assets/battery-D2ng6PHz.js +6 -0
- vibe_surf/backend/frontend/assets/battery-charging-BBA_U97U.js +6 -0
- vibe_surf/backend/frontend/assets/battery-full-D74R09iv.js +6 -0
- vibe_surf/backend/frontend/assets/battery-low-BMeJBmJp.js +6 -0
- vibe_surf/backend/frontend/assets/battery-medium-clKHZw71.js +6 -0
- vibe_surf/backend/frontend/assets/battery-plus-DxtzU1bB.js +6 -0
- vibe_surf/backend/frontend/assets/battery-warning-1NEZ4eCa.js +6 -0
- vibe_surf/backend/frontend/assets/beaker-Br0pnmtw.js +6 -0
- vibe_surf/backend/frontend/assets/bean-B04lfjZo.js +6 -0
- vibe_surf/backend/frontend/assets/bean-off-C6H6plJJ.js +6 -0
- vibe_surf/backend/frontend/assets/bed-B7xWDlGQ.js +6 -0
- vibe_surf/backend/frontend/assets/bed-double-We8EVOE6.js +6 -0
- vibe_surf/backend/frontend/assets/bed-single-C-tVm75i.js +6 -0
- vibe_surf/backend/frontend/assets/beef-BzzCqLUx.js +6 -0
- vibe_surf/backend/frontend/assets/beer-B1aIU5Wp.js +6 -0
- vibe_surf/backend/frontend/assets/beer-off-T9p0sUQ_.js +6 -0
- vibe_surf/backend/frontend/assets/bell-BiEY08q7.js +6 -0
- vibe_surf/backend/frontend/assets/bell-dot-D6ZHJmF9.js +6 -0
- vibe_surf/backend/frontend/assets/bell-electric-BjP0O4kE.js +6 -0
- vibe_surf/backend/frontend/assets/bell-minus-Cw2KMMsV.js +6 -0
- vibe_surf/backend/frontend/assets/bell-off-JUGEvepv.js +6 -0
- vibe_surf/backend/frontend/assets/bell-plus-BtwPCtO5.js +6 -0
- vibe_surf/backend/frontend/assets/bell-ring-B_RAFBbK.js +6 -0
- vibe_surf/backend/frontend/assets/between-horizontal-end-DG9RojRP.js +6 -0
- vibe_surf/backend/frontend/assets/between-horizontal-start-BNuWKIUb.js +6 -0
- vibe_surf/backend/frontend/assets/between-vertical-end-CUvl7S4G.js +6 -0
- vibe_surf/backend/frontend/assets/between-vertical-start-tYvnZE7k.js +6 -0
- vibe_surf/backend/frontend/assets/biceps-flexed-D2zMmbhv.js +6 -0
- vibe_surf/backend/frontend/assets/bike-DPdpsZIt.js +6 -0
- vibe_surf/backend/frontend/assets/binary-DnnraEVk.js +6 -0
- vibe_surf/backend/frontend/assets/binoculars-BXc-CFA4.js +6 -0
- vibe_surf/backend/frontend/assets/biohazard-D-6PF7OA.js +6 -0
- vibe_surf/backend/frontend/assets/bird-CYNkrqM5.js +6 -0
- vibe_surf/backend/frontend/assets/bitcoin-DG6PDKEk.js +6 -0
- vibe_surf/backend/frontend/assets/blend-COR-wQIS.js +6 -0
- vibe_surf/backend/frontend/assets/blinds-_pD0AjwU.js +6 -0
- vibe_surf/backend/frontend/assets/blocks-C0goFnXe.js +6 -0
- vibe_surf/backend/frontend/assets/bluetooth-BFH9HCot.js +6 -0
- vibe_surf/backend/frontend/assets/bluetooth-connected-C9JKQLmC.js +6 -0
- vibe_surf/backend/frontend/assets/bluetooth-off-ka-F7ZnG.js +6 -0
- vibe_surf/backend/frontend/assets/bluetooth-searching-BdyfX9rD.js +6 -0
- vibe_surf/backend/frontend/assets/bold-CZSxbQF9.js +6 -0
- vibe_surf/backend/frontend/assets/bolt-BjrrPChn.js +6 -0
- vibe_surf/backend/frontend/assets/bomb-CMlcm4r9.js +6 -0
- vibe_surf/backend/frontend/assets/bone-qWIxHNfL.js +6 -0
- vibe_surf/backend/frontend/assets/book-BfRvOdc3.js +6 -0
- vibe_surf/backend/frontend/assets/book-a-CpoCb7Zv.js +6 -0
- vibe_surf/backend/frontend/assets/book-audio-cBKWAq-p.js +6 -0
- vibe_surf/backend/frontend/assets/book-check-CqwOgoOp.js +6 -0
- vibe_surf/backend/frontend/assets/book-copy-ORHl4yqI.js +6 -0
- vibe_surf/backend/frontend/assets/book-dashed-BrJdSa-D.js +6 -0
- vibe_surf/backend/frontend/assets/book-down-Bj4JV-P-.js +6 -0
- vibe_surf/backend/frontend/assets/book-headphones-BYuIU1gj.js +6 -0
- vibe_surf/backend/frontend/assets/book-heart-DCUxVJaU.js +6 -0
- vibe_surf/backend/frontend/assets/book-image-BPpCKv6n.js +6 -0
- vibe_surf/backend/frontend/assets/book-key-Ca_EtM6h.js +6 -0
- vibe_surf/backend/frontend/assets/book-lock-Bldzz1aF.js +6 -0
- vibe_surf/backend/frontend/assets/book-marked-BCleXwJ3.js +6 -0
- vibe_surf/backend/frontend/assets/book-minus-XoJOGZOx.js +6 -0
- vibe_surf/backend/frontend/assets/book-open-DUlI5XCY.js +6 -0
- vibe_surf/backend/frontend/assets/book-open-check-BEksHFoQ.js +6 -0
- vibe_surf/backend/frontend/assets/book-open-text-CiKyiRt-.js +6 -0
- vibe_surf/backend/frontend/assets/book-plus-DuUfSKu2.js +6 -0
- vibe_surf/backend/frontend/assets/book-text-TTfLk4-M.js +6 -0
- vibe_surf/backend/frontend/assets/book-type-CMV326FZ.js +6 -0
- vibe_surf/backend/frontend/assets/book-up-2-CGiuKI0n.js +6 -0
- vibe_surf/backend/frontend/assets/book-up-d2hb8aDq.js +6 -0
- vibe_surf/backend/frontend/assets/book-user-BsZySUGG.js +6 -0
- vibe_surf/backend/frontend/assets/book-x-CoSA25As.js +6 -0
- vibe_surf/backend/frontend/assets/bookmark-CVx8aFGk.js +6 -0
- vibe_surf/backend/frontend/assets/bookmark-check-Zh_1fqo_.js +6 -0
- vibe_surf/backend/frontend/assets/bookmark-minus---KmRSON.js +6 -0
- vibe_surf/backend/frontend/assets/bookmark-plus-ZY-aQ6r5.js +6 -0
- vibe_surf/backend/frontend/assets/bookmark-x-DnEKBdZC.js +6 -0
- vibe_surf/backend/frontend/assets/boom-box-D5cJf4pI.js +6 -0
- vibe_surf/backend/frontend/assets/bot-BbS7VJ5s.js +6 -0
- vibe_surf/backend/frontend/assets/bot-message-square-Bm4hBAbI.js +6 -0
- vibe_surf/backend/frontend/assets/bot-off-CFjG1wx4.js +6 -0
- vibe_surf/backend/frontend/assets/bow-arrow-Bupk8VJM.js +6 -0
- vibe_surf/backend/frontend/assets/box-CyVAC5Vv.js +6 -0
- vibe_surf/backend/frontend/assets/boxes-B3xCa_UA.js +6 -0
- vibe_surf/backend/frontend/assets/braces-QLXt2h0B.js +6 -0
- vibe_surf/backend/frontend/assets/brackets-CEy7gs9d.js +6 -0
- vibe_surf/backend/frontend/assets/brain-circuit-WmeDjyy5.js +6 -0
- vibe_surf/backend/frontend/assets/brain-cog-DKDdpxNn.js +6 -0
- vibe_surf/backend/frontend/assets/brain-ziGJYeS1.js +6 -0
- vibe_surf/backend/frontend/assets/brick-wall-DXer5s5J.js +6 -0
- vibe_surf/backend/frontend/assets/brick-wall-fire-CfXr8Krv.js +6 -0
- vibe_surf/backend/frontend/assets/briefcase-C2YbssAg.js +6 -0
- vibe_surf/backend/frontend/assets/briefcase-business-CJCpJSkU.js +6 -0
- vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-B0jqiIT4.js +6 -0
- vibe_surf/backend/frontend/assets/briefcase-medical-BBH0C6ZQ.js +6 -0
- vibe_surf/backend/frontend/assets/bring-to-front-ywT72zy-.js +6 -0
- vibe_surf/backend/frontend/assets/brush-_uc9w_j1.js +6 -0
- vibe_surf/backend/frontend/assets/bubbles-ggRrvDQI.js +6 -0
- vibe_surf/backend/frontend/assets/bug-6l9frAXO.js +6 -0
- vibe_surf/backend/frontend/assets/bug-off-BmK1mJ7T.js +6 -0
- vibe_surf/backend/frontend/assets/bug-play-DbXJeqOa.js +6 -0
- vibe_surf/backend/frontend/assets/building-2-Cf9gYIvy.js +6 -0
- vibe_surf/backend/frontend/assets/building-D9eMVeBu.js +6 -0
- vibe_surf/backend/frontend/assets/bus-COrhWbdv.js +6 -0
- vibe_surf/backend/frontend/assets/bus-front-Csav5OG_.js +6 -0
- vibe_surf/backend/frontend/assets/cable-BPG7O6tf.js +6 -0
- vibe_surf/backend/frontend/assets/cable-car-ChPtZlze.js +6 -0
- vibe_surf/backend/frontend/assets/cake-DnmMZhI2.js +6 -0
- vibe_surf/backend/frontend/assets/cake-slice-Clc5mDPW.js +6 -0
- vibe_surf/backend/frontend/assets/calculator-C77I3XPN.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-1-BMs-t7Zd.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-DuLRS-6L.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-arrow-down-DoVsOnV0.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-arrow-up-Ca_1_rkT.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-check-2-0JmvXRsb.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-check-DtTDIbPE.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-clock-39XA2NxZ.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-cog-B3elAX8P.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-days-B_4sd_nS.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-fold-1GZdJiY5.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-heart-C20Gu6Pq.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-minus-2-C2uYA9Xy.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-minus-Bf9ZhUgX.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-off-oqUiDnlM.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-plus-2-D5AF7K6Z.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-plus-DFRLvp48.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-range-BtbX_u86.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-search-DKFr3oFg.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-sync-J6s1mjVg.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-x-16dHXmS-.js +6 -0
- vibe_surf/backend/frontend/assets/calendar-x-2-DASXeIpI.js +6 -0
- vibe_surf/backend/frontend/assets/camera-C73rx5T7.js +6 -0
- vibe_surf/backend/frontend/assets/camera-off-lYXrg8Ab.js +6 -0
- vibe_surf/backend/frontend/assets/candy-DHin-JSi.js +6 -0
- vibe_surf/backend/frontend/assets/candy-cane-BrFztxP3.js +6 -0
- vibe_surf/backend/frontend/assets/candy-off-C6p9RmsL.js +6 -0
- vibe_surf/backend/frontend/assets/cannabis-BIomtlTh.js +6 -0
- vibe_surf/backend/frontend/assets/captions-CU9AD1HN.js +6 -0
- vibe_surf/backend/frontend/assets/captions-off-BQabz_7T.js +6 -0
- vibe_surf/backend/frontend/assets/car-CIepr4l8.js +6 -0
- vibe_surf/backend/frontend/assets/car-front-BvC3NXIU.js +6 -0
- vibe_surf/backend/frontend/assets/car-taxi-front-D6kk_vUY.js +6 -0
- vibe_surf/backend/frontend/assets/caravan-B4YvOfvY.js +6 -0
- vibe_surf/backend/frontend/assets/carrot-DScNmGFZ.js +6 -0
- vibe_surf/backend/frontend/assets/case-lower-iW8MijQ2.js +6 -0
- vibe_surf/backend/frontend/assets/case-sensitive-DggKI0Fh.js +6 -0
- vibe_surf/backend/frontend/assets/case-upper-BC22BC0q.js +6 -0
- vibe_surf/backend/frontend/assets/cassette-tape-PMwALept.js +6 -0
- vibe_surf/backend/frontend/assets/cast-Kq2v55CB.js +6 -0
- vibe_surf/backend/frontend/assets/castle-DJzhSlL6.js +6 -0
- vibe_surf/backend/frontend/assets/cat-Cszwi-0j.js +6 -0
- vibe_surf/backend/frontend/assets/cctv-4zeLHFGP.js +6 -0
- vibe_surf/backend/frontend/assets/chart-area-JyFaZNpl.js +6 -0
- vibe_surf/backend/frontend/assets/chart-bar-Bcnue-Eu.js +6 -0
- vibe_surf/backend/frontend/assets/chart-bar-big-dJ6tM8UP.js +6 -0
- vibe_surf/backend/frontend/assets/chart-bar-decreasing-jviD9Nka.js +6 -0
- vibe_surf/backend/frontend/assets/chart-bar-increasing-BcpuBWlQ.js +6 -0
- vibe_surf/backend/frontend/assets/chart-bar-stacked-DLxMM-a6.js +6 -0
- vibe_surf/backend/frontend/assets/chart-candlestick-BK5WOKib.js +6 -0
- vibe_surf/backend/frontend/assets/chart-column-BjT_DIge.js +6 -0
- vibe_surf/backend/frontend/assets/chart-column-big-BoOEhNxT.js +6 -0
- vibe_surf/backend/frontend/assets/chart-column-decreasing-B3PEhFWj.js +6 -0
- vibe_surf/backend/frontend/assets/chart-column-increasing-KTAFoIBT.js +6 -0
- vibe_surf/backend/frontend/assets/chart-column-stacked-Drci0FWY.js +6 -0
- vibe_surf/backend/frontend/assets/chart-gantt-CxLhKfws.js +6 -0
- vibe_surf/backend/frontend/assets/chart-line-Deh3i4SN.js +6 -0
- vibe_surf/backend/frontend/assets/chart-network-1nLETKIo.js +6 -0
- vibe_surf/backend/frontend/assets/chart-no-axes-column-BBUb9OL4.js +6 -0
- vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-BNGTEmAA.js +6 -0
- vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-DYl5MpQr.js +6 -0
- vibe_surf/backend/frontend/assets/chart-no-axes-combined-Bwo9fVPi.js +6 -0
- vibe_surf/backend/frontend/assets/chart-no-axes-gantt-CIpwp7-G.js +6 -0
- vibe_surf/backend/frontend/assets/chart-pie-Brn9eScK.js +6 -0
- vibe_surf/backend/frontend/assets/chart-scatter-BFmfnF4I.js +6 -0
- vibe_surf/backend/frontend/assets/chart-spline-iPy-W03i.js +6 -0
- vibe_surf/backend/frontend/assets/check-check-CQEfDsmx.js +6 -0
- vibe_surf/backend/frontend/assets/chef-hat-DdOkr4i8.js +6 -0
- vibe_surf/backend/frontend/assets/cherry-XkD_QiBI.js +6 -0
- vibe_surf/backend/frontend/assets/chevron-first-muFwJevA.js +6 -0
- vibe_surf/backend/frontend/assets/chevron-last-Bn079TLv.js +6 -0
- vibe_surf/backend/frontend/assets/chevron-left-BhWYBFsk.js +6 -0
- vibe_surf/backend/frontend/assets/chevron-right-zm672Mdr.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-down-T3mOFRB2.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-down-up-BfWmsaYK.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-left-BLFCiP6g.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-left-right-Cgp4lAQF.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BZSVxQ-x.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-right-DMKOjes0.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-right-left-Clwbiy09.js +6 -0
- vibe_surf/backend/frontend/assets/chevrons-up-CdrwLxmN.js +6 -0
- vibe_surf/backend/frontend/assets/chrome-46ygw5lK.js +6 -0
- vibe_surf/backend/frontend/assets/church-DQW3bkcl.js +6 -0
- vibe_surf/backend/frontend/assets/cigarette-CTvLdOLV.js +6 -0
- vibe_surf/backend/frontend/assets/cigarette-off-D0kR9lro.js +6 -0
- vibe_surf/backend/frontend/assets/circle-alert-QG2k6eWP.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-down-BHFs0Q9-.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-left-DQWeTJLw.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-B_oYI2Rn.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-BL4vxEs9.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-CFi1FNF-.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-CmMWk14E.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-right-dhHL8jIm.js +6 -0
- vibe_surf/backend/frontend/assets/circle-arrow-up-B8XWR9s_.js +6 -0
- vibe_surf/backend/frontend/assets/circle-check-CRm9QkNA.js +6 -0
- vibe_surf/backend/frontend/assets/circle-check-big-CPPNLArI.js +6 -0
- vibe_surf/backend/frontend/assets/circle-chevron-down-Cs4S5V03.js +6 -0
- vibe_surf/backend/frontend/assets/circle-chevron-left-V81BDvwB.js +6 -0
- vibe_surf/backend/frontend/assets/circle-chevron-right-CRa7Bkcz.js +6 -0
- vibe_surf/backend/frontend/assets/circle-chevron-up-FDxLxvSd.js +6 -0
- vibe_surf/backend/frontend/assets/circle-dashed-DD55_roy.js +6 -0
- vibe_surf/backend/frontend/assets/circle-divide-DKpocsWo.js +6 -0
- vibe_surf/backend/frontend/assets/circle-dollar-sign-p7_bVi5m.js +6 -0
- vibe_surf/backend/frontend/assets/circle-dot-Be13EypY.js +6 -0
- vibe_surf/backend/frontend/assets/circle-dot-dashed-KuVNkxEv.js +6 -0
- vibe_surf/backend/frontend/assets/circle-ellipsis-BSLpVL-C.js +6 -0
- vibe_surf/backend/frontend/assets/circle-equal-_Mfed9km.js +6 -0
- vibe_surf/backend/frontend/assets/circle-fading-arrow-up-D_E3BIXf.js +6 -0
- vibe_surf/backend/frontend/assets/circle-fading-plus-5ZA5Je_2.js +6 -0
- vibe_surf/backend/frontend/assets/circle-gauge-b41i9Azv.js +6 -0
- vibe_surf/backend/frontend/assets/circle-help-BOLgIUsf.js +6 -0
- vibe_surf/backend/frontend/assets/circle-minus-C41JxC_E.js +6 -0
- vibe_surf/backend/frontend/assets/circle-off-yuGaN1EU.js +6 -0
- vibe_surf/backend/frontend/assets/circle-parking-B-DnXhcd.js +6 -0
- vibe_surf/backend/frontend/assets/circle-parking-off-DsCM2b8j.js +6 -0
- vibe_surf/backend/frontend/assets/circle-pause-Dqufdu9m.js +6 -0
- vibe_surf/backend/frontend/assets/circle-percent-Dp8UwPQq.js +6 -0
- vibe_surf/backend/frontend/assets/circle-play-N8vi1Pcd.js +6 -0
- vibe_surf/backend/frontend/assets/circle-plus-wD1VqIgT.js +6 -0
- vibe_surf/backend/frontend/assets/circle-power-DBZAmaYW.js +6 -0
- vibe_surf/backend/frontend/assets/circle-slash-2-hdq8_Fp6.js +6 -0
- vibe_surf/backend/frontend/assets/circle-slash-CSrHLLP2.js +6 -0
- vibe_surf/backend/frontend/assets/circle-small-BQ6lrOIo.js +6 -0
- vibe_surf/backend/frontend/assets/circle-stop-xgLQ9Loi.js +6 -0
- vibe_surf/backend/frontend/assets/circle-user-CzvrnVH9.js +6 -0
- vibe_surf/backend/frontend/assets/circle-user-round-0JhYfAcs.js +6 -0
- vibe_surf/backend/frontend/assets/circuit-board-DpN-UUwV.js +6 -0
- vibe_surf/backend/frontend/assets/citrus-BGWHfGg3.js +6 -0
- vibe_surf/backend/frontend/assets/clapperboard-9m-99Aof.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-C-MVPhAy.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-check-Bonb2WoP.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-copy-CmRHdw5h.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-list-DEof2iPM.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-minus-DN2QuVOG.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-paste-B20nudiB.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-pen-BZJamOnq.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-pen-line-DScYxgpw.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-plus-DJb4TcvR.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-type-DaibEn_w.js +6 -0
- vibe_surf/backend/frontend/assets/clipboard-x-CebR2xkR.js +6 -0
- vibe_surf/backend/frontend/assets/clock-1-Cz0OEQH3.js +6 -0
- vibe_surf/backend/frontend/assets/clock-10-BMLTtzHQ.js +6 -0
- vibe_surf/backend/frontend/assets/clock-11-CZ6m52x1.js +6 -0
- vibe_surf/backend/frontend/assets/clock-12-BXZWDgbr.js +6 -0
- vibe_surf/backend/frontend/assets/clock-2-ElC7DzP5.js +6 -0
- vibe_surf/backend/frontend/assets/clock-3-DN86BONK.js +6 -0
- vibe_surf/backend/frontend/assets/clock-4-CV9eUVD9.js +6 -0
- vibe_surf/backend/frontend/assets/clock-5-DgMTU8BD.js +6 -0
- vibe_surf/backend/frontend/assets/clock-6-_RjAiNVz.js +6 -0
- vibe_surf/backend/frontend/assets/clock-7-DsWDnhwN.js +6 -0
- vibe_surf/backend/frontend/assets/clock-8-CY-eCfWq.js +6 -0
- vibe_surf/backend/frontend/assets/clock-9-D4aWNYpk.js +6 -0
- vibe_surf/backend/frontend/assets/clock-UtAbEQE0.js +6 -0
- vibe_surf/backend/frontend/assets/clock-alert-gi6h-zRT.js +6 -0
- vibe_surf/backend/frontend/assets/clock-arrow-down-CC9Qp0ac.js +6 -0
- vibe_surf/backend/frontend/assets/clock-arrow-up-Cjt2qN9V.js +6 -0
- vibe_surf/backend/frontend/assets/clock-fading-BJp0FFxY.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-TYaHXSiL.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-alert-Dp4WVua8.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-cog-Dlyn4rqA.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-download-DH8UN3eX.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-drizzle-s8348ic3.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-fog-DHRDnzsg.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-hail-D7nJGZgB.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-lightning-CscbfdPI.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-moon-C6897Z5z.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-moon-rain-B6pK_auO.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-off-1kN_AD0k.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-rain-Dj6B4fBD.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-rain-wind-BJrdBUd4.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-snow-LK6lpCkZ.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-sun-CRH8EQEJ.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-sun-rain-7IssqnpA.js +6 -0
- vibe_surf/backend/frontend/assets/cloud-upload-tI3Dz1zd.js +6 -0
- vibe_surf/backend/frontend/assets/cloudy-okUc5uOM.js +6 -0
- vibe_surf/backend/frontend/assets/clover-O6CtUOhV.js +6 -0
- vibe_surf/backend/frontend/assets/club-SnWEwVMR.js +6 -0
- vibe_surf/backend/frontend/assets/code-xml-CYTnIdXN.js +6 -0
- vibe_surf/backend/frontend/assets/codepen-UxBTFH8q.js +6 -0
- vibe_surf/backend/frontend/assets/codesandbox-CSRpmotF.js +6 -0
- vibe_surf/backend/frontend/assets/coffee-BTr4K8Gn.js +6 -0
- vibe_surf/backend/frontend/assets/cog-C7RMqAcW.js +6 -0
- vibe_surf/backend/frontend/assets/coins-D7gWOtE7.js +6 -0
- vibe_surf/backend/frontend/assets/columns-2-WBM3YpNL.js +6 -0
- vibe_surf/backend/frontend/assets/columns-3-DyAMu-k8.js +6 -0
- vibe_surf/backend/frontend/assets/columns-3-cog-zfUPAOg0.js +6 -0
- vibe_surf/backend/frontend/assets/columns-4-Qz-B3Dvq.js +6 -0
- vibe_surf/backend/frontend/assets/combine-CLZvnf8j.js +6 -0
- vibe_surf/backend/frontend/assets/command-D8ymLYGG.js +6 -0
- vibe_surf/backend/frontend/assets/compass-DGYgNSVa.js +6 -0
- vibe_surf/backend/frontend/assets/component-CwL9ER1Q.js +6 -0
- vibe_surf/backend/frontend/assets/computer-QNTojt_5.js +6 -0
- vibe_surf/backend/frontend/assets/concierge-bell-C7jm8QJd.js +6 -0
- vibe_surf/backend/frontend/assets/cone-C9TQbkDB.js +6 -0
- vibe_surf/backend/frontend/assets/construction-CSyYpaz5.js +6 -0
- vibe_surf/backend/frontend/assets/contact-CFldvJVP.js +6 -0
- vibe_surf/backend/frontend/assets/contact-round-DA1kjclM.js +6 -0
- vibe_surf/backend/frontend/assets/container-BfGJKo0o.js +6 -0
- vibe_surf/backend/frontend/assets/contrast-DmYhTvN3.js +6 -0
- vibe_surf/backend/frontend/assets/cookie-Cw70purP.js +6 -0
- vibe_surf/backend/frontend/assets/cooking-pot-WzjjWZaR.js +6 -0
- vibe_surf/backend/frontend/assets/copy-BPjnY3ea.js +6 -0
- vibe_surf/backend/frontend/assets/copy-check-B6hqPf9B.js +6 -0
- vibe_surf/backend/frontend/assets/copy-minus-DMGhawAT.js +6 -0
- vibe_surf/backend/frontend/assets/copy-plus-DcW4_i4R.js +6 -0
- vibe_surf/backend/frontend/assets/copy-slash-Cn_xel6o.js +6 -0
- vibe_surf/backend/frontend/assets/copy-x-Dmf3jckJ.js +6 -0
- vibe_surf/backend/frontend/assets/copyleft-CJDbqV_Y.js +6 -0
- vibe_surf/backend/frontend/assets/copyright-Buw-D4Xa.js +6 -0
- vibe_surf/backend/frontend/assets/corner-down-left-BhPTW3SL.js +6 -0
- vibe_surf/backend/frontend/assets/corner-down-right-B_Md48mW.js +6 -0
- vibe_surf/backend/frontend/assets/corner-left-down-DDc0LvYT.js +6 -0
- vibe_surf/backend/frontend/assets/corner-left-up-C_EIQYvd.js +6 -0
- vibe_surf/backend/frontend/assets/corner-right-down-Bipz7-p6.js +6 -0
- vibe_surf/backend/frontend/assets/corner-right-up-euSAC3Mi.js +6 -0
- vibe_surf/backend/frontend/assets/corner-up-left-CRvdJT3E.js +6 -0
- vibe_surf/backend/frontend/assets/corner-up-right-CCK7dhVV.js +6 -0
- vibe_surf/backend/frontend/assets/cpu-DB-52VKi.js +6 -0
- vibe_surf/backend/frontend/assets/creative-commons-CXWueat0.js +6 -0
- vibe_surf/backend/frontend/assets/credit-card-CR5swmPL.js +6 -0
- vibe_surf/backend/frontend/assets/croissant-ClZbIF3L.js +6 -0
- vibe_surf/backend/frontend/assets/crop-DSXkvq6D.js +6 -0
- vibe_surf/backend/frontend/assets/cross-CkHV6YOi.js +6 -0
- vibe_surf/backend/frontend/assets/crosshair-C3tcoYxo.js +6 -0
- vibe_surf/backend/frontend/assets/crown-0LB9DCRa.js +6 -0
- vibe_surf/backend/frontend/assets/cuboid-CidkVtLJ.js +6 -0
- vibe_surf/backend/frontend/assets/cup-soda-DG_5s6Ma.js +6 -0
- vibe_surf/backend/frontend/assets/currency-AEQeyk_J.js +6 -0
- vibe_surf/backend/frontend/assets/cylinder-Da7lV5Pc.js +6 -0
- vibe_surf/backend/frontend/assets/dam-BIFS7P89.js +6 -0
- vibe_surf/backend/frontend/assets/database-Dx9euHTJ.js +6 -0
- vibe_surf/backend/frontend/assets/database-backup-Bbbt7mXt.js +6 -0
- vibe_surf/backend/frontend/assets/database-zap-CJC7IfdF.js +6 -0
- vibe_surf/backend/frontend/assets/decimals-arrow-left-BrRd8_vb.js +6 -0
- vibe_surf/backend/frontend/assets/decimals-arrow-right-Cglo48c9.js +6 -0
- vibe_surf/backend/frontend/assets/delete-C9qTL0sD.js +6 -0
- vibe_surf/backend/frontend/assets/dessert-7PTt5JJ0.js +6 -0
- vibe_surf/backend/frontend/assets/diameter-oheO2UGD.js +6 -0
- vibe_surf/backend/frontend/assets/diamond-DhBpDMNy.js +6 -0
- vibe_surf/backend/frontend/assets/diamond-minus-BqTULDvb.js +6 -0
- vibe_surf/backend/frontend/assets/diamond-percent-D1Ck8xGc.js +6 -0
- vibe_surf/backend/frontend/assets/diamond-plus-DfSf7Xoq.js +6 -0
- vibe_surf/backend/frontend/assets/dice-1-CIRG2xPK.js +6 -0
- vibe_surf/backend/frontend/assets/dice-2-r7s36USZ.js +6 -0
- vibe_surf/backend/frontend/assets/dice-3-Cl7FLe3x.js +6 -0
- vibe_surf/backend/frontend/assets/dice-4-D-yJWiku.js +6 -0
- vibe_surf/backend/frontend/assets/dice-5-Ci09NYyS.js +6 -0
- vibe_surf/backend/frontend/assets/dice-6-CC2FLvLo.js +6 -0
- vibe_surf/backend/frontend/assets/dices-CmB6hNUU.js +6 -0
- vibe_surf/backend/frontend/assets/diff-oCWjvY-c.js +6 -0
- vibe_surf/backend/frontend/assets/disc-2-DpUl7fl6.js +6 -0
- vibe_surf/backend/frontend/assets/disc-3-BugUAszu.js +6 -0
- vibe_surf/backend/frontend/assets/disc-DUbtGdHe.js +6 -0
- vibe_surf/backend/frontend/assets/disc-album-CXJRMctz.js +6 -0
- vibe_surf/backend/frontend/assets/divide-CY1K-HT7.js +6 -0
- vibe_surf/backend/frontend/assets/dna-CeE8ObeE.js +6 -0
- vibe_surf/backend/frontend/assets/dna-off-BviJKT3C.js +6 -0
- vibe_surf/backend/frontend/assets/dock-eIe8zGWk.js +6 -0
- vibe_surf/backend/frontend/assets/dog-CSlDDqxp.js +6 -0
- vibe_surf/backend/frontend/assets/dollar-sign-5U68U397.js +6 -0
- vibe_surf/backend/frontend/assets/donut-BeawTrlI.js +6 -0
- vibe_surf/backend/frontend/assets/door-closed-CwY8Mg15.js +6 -0
- vibe_surf/backend/frontend/assets/door-open-DFgi7N5B.js +6 -0
- vibe_surf/backend/frontend/assets/dot-fPF_etdO.js +6 -0
- vibe_surf/backend/frontend/assets/download-gSwRRqnX.js +6 -0
- vibe_surf/backend/frontend/assets/drafting-compass-Dj_7EFRc.js +6 -0
- vibe_surf/backend/frontend/assets/drama-BlDJuZEs.js +6 -0
- vibe_surf/backend/frontend/assets/dribbble-C0k3dpAi.js +6 -0
- vibe_surf/backend/frontend/assets/drill-COJcLBB4.js +6 -0
- vibe_surf/backend/frontend/assets/droplet-5wuLGLgZ.js +6 -0
- vibe_surf/backend/frontend/assets/droplet-off-Bra_6Oh9.js +6 -0
- vibe_surf/backend/frontend/assets/droplets-BE8PR1pM.js +6 -0
- vibe_surf/backend/frontend/assets/drum-DnJ1RUvq.js +6 -0
- vibe_surf/backend/frontend/assets/drumstick-JGiBDDwZ.js +6 -0
- vibe_surf/backend/frontend/assets/dumbbell-BEtc4tyd.js +6 -0
- vibe_surf/backend/frontend/assets/ear-DAqeJjkr.js +6 -0
- vibe_surf/backend/frontend/assets/ear-off-BA7gp4ie.js +6 -0
- vibe_surf/backend/frontend/assets/earth-CUlUl7Bp.js +6 -0
- vibe_surf/backend/frontend/assets/earth-lock-sl59Ywm7.js +6 -0
- vibe_surf/backend/frontend/assets/eclipse-DY7fC5N3.js +6 -0
- vibe_surf/backend/frontend/assets/egg-DxfY2UB8.js +6 -0
- vibe_surf/backend/frontend/assets/egg-fried-D2Eo3APu.js +6 -0
- vibe_surf/backend/frontend/assets/egg-off-DqYobjwG.js +6 -0
- vibe_surf/backend/frontend/assets/ellipsis-DgOuKLdR.js +6 -0
- vibe_surf/backend/frontend/assets/ellipsis-vertical--sr8F_UD.js +6 -0
- vibe_surf/backend/frontend/assets/equal-DS1qMZhi.js +6 -0
- vibe_surf/backend/frontend/assets/equal-approximately-mgMMBVF_.js +6 -0
- vibe_surf/backend/frontend/assets/equal-not-1Alw8lqE.js +6 -0
- vibe_surf/backend/frontend/assets/eraser-IStMo8nh.js +6 -0
- vibe_surf/backend/frontend/assets/ethernet-port-B6SRY0d8.js +6 -0
- vibe_surf/backend/frontend/assets/euro-S1kGUYTE.js +6 -0
- vibe_surf/backend/frontend/assets/expand-Cj8IQccm.js +6 -0
- vibe_surf/backend/frontend/assets/eye-DrnoCeKD.js +6 -0
- vibe_surf/backend/frontend/assets/eye-closed-B0cNIHJN.js +6 -0
- vibe_surf/backend/frontend/assets/eye-off-DIIh42Ws.js +6 -0
- vibe_surf/backend/frontend/assets/facebook-Df9Fpfnn.js +6 -0
- vibe_surf/backend/frontend/assets/factory-BLKvR2Z1.js +6 -0
- vibe_surf/backend/frontend/assets/fan-C-xRuGdo.js +6 -0
- vibe_surf/backend/frontend/assets/fast-forward-Bae5V83y.js +6 -0
- vibe_surf/backend/frontend/assets/feather-DTPfgED2.js +6 -0
- vibe_surf/backend/frontend/assets/fence-Mr7VQ0O9.js +6 -0
- vibe_surf/backend/frontend/assets/ferris-wheel-D82pDMqi.js +6 -0
- vibe_surf/backend/frontend/assets/figma-DBFJo9L2.js +6 -0
- vibe_surf/backend/frontend/assets/file-DvuZsaUg.js +6 -0
- vibe_surf/backend/frontend/assets/file-archive-DRtB2ivb.js +6 -0
- vibe_surf/backend/frontend/assets/file-audio-2-JE5iEkL9.js +6 -0
- vibe_surf/backend/frontend/assets/file-audio-C4RwC1BT.js +6 -0
- vibe_surf/backend/frontend/assets/file-axis-3d-DQSHzEo4.js +6 -0
- vibe_surf/backend/frontend/assets/file-badge-2-P__XKUXn.js +6 -0
- vibe_surf/backend/frontend/assets/file-badge-CejYglxU.js +6 -0
- vibe_surf/backend/frontend/assets/file-box-CgFMY7Rp.js +6 -0
- vibe_surf/backend/frontend/assets/file-chart-column-Bq5PyMwY.js +6 -0
- vibe_surf/backend/frontend/assets/file-chart-column-increasing-t_d1wCSV.js +6 -0
- vibe_surf/backend/frontend/assets/file-chart-line-Df6iedBR.js +6 -0
- vibe_surf/backend/frontend/assets/file-chart-pie-YH23adPM.js +6 -0
- vibe_surf/backend/frontend/assets/file-check-2-CKcRkU0L.js +6 -0
- vibe_surf/backend/frontend/assets/file-check-BYZznME9.js +6 -0
- vibe_surf/backend/frontend/assets/file-clock-8rD4-Bqt.js +6 -0
- vibe_surf/backend/frontend/assets/file-code-2-BjV8KhR4.js +6 -0
- vibe_surf/backend/frontend/assets/file-code-CXS3YUpM.js +6 -0
- vibe_surf/backend/frontend/assets/file-cog-GKLng0Qf.js +6 -0
- vibe_surf/backend/frontend/assets/file-diff-B_7HXPkJ.js +6 -0
- vibe_surf/backend/frontend/assets/file-digit-AtVulYi7.js +6 -0
- vibe_surf/backend/frontend/assets/file-down-CJIG5dHj.js +6 -0
- vibe_surf/backend/frontend/assets/file-heart-B8jWzdG5.js +6 -0
- vibe_surf/backend/frontend/assets/file-image-CXtDt3N3.js +6 -0
- vibe_surf/backend/frontend/assets/file-input-B-0mgcKT.js +6 -0
- vibe_surf/backend/frontend/assets/file-json-2-DQHJM93o.js +6 -0
- vibe_surf/backend/frontend/assets/file-json-BmrGDLh2.js +6 -0
- vibe_surf/backend/frontend/assets/file-key-2-DnpQ1dTj.js +6 -0
- vibe_surf/backend/frontend/assets/file-key-D3lJXveQ.js +6 -0
- vibe_surf/backend/frontend/assets/file-lock-2-DWdLzoF7.js +6 -0
- vibe_surf/backend/frontend/assets/file-lock-ZMZB3U4I.js +6 -0
- vibe_surf/backend/frontend/assets/file-minus-2-CsTsio0s.js +6 -0
- vibe_surf/backend/frontend/assets/file-minus-CtfRmVme.js +6 -0
- vibe_surf/backend/frontend/assets/file-music-DHhVu2aK.js +6 -0
- vibe_surf/backend/frontend/assets/file-output-CjQ-FMg0.js +6 -0
- vibe_surf/backend/frontend/assets/file-pen-C9S_u4U9.js +6 -0
- vibe_surf/backend/frontend/assets/file-pen-line-niZF4quE.js +6 -0
- vibe_surf/backend/frontend/assets/file-plus-2-DzIiS2EM.js +6 -0
- vibe_surf/backend/frontend/assets/file-plus-Bloe0E45.js +6 -0
- vibe_surf/backend/frontend/assets/file-question-BBTjP9h0.js +6 -0
- vibe_surf/backend/frontend/assets/file-scan-B3Bn2EZN.js +6 -0
- vibe_surf/backend/frontend/assets/file-search-2-DnC8d9OD.js +6 -0
- vibe_surf/backend/frontend/assets/file-search-DzPGZllw.js +6 -0
- vibe_surf/backend/frontend/assets/file-sliders-BHYXa9jQ.js +6 -0
- vibe_surf/backend/frontend/assets/file-spreadsheet-DvjPpK9G.js +6 -0
- vibe_surf/backend/frontend/assets/file-stack-yJR4id_3.js +6 -0
- vibe_surf/backend/frontend/assets/file-symlink-BWQBdrEp.js +6 -0
- vibe_surf/backend/frontend/assets/file-terminal-CvhcKgiv.js +6 -0
- vibe_surf/backend/frontend/assets/file-text-tuxzZhRs.js +6 -0
- vibe_surf/backend/frontend/assets/file-type-2-Dgantaer.js +6 -0
- vibe_surf/backend/frontend/assets/file-type-DfZBPqmH.js +6 -0
- vibe_surf/backend/frontend/assets/file-up-GXfnonbH.js +6 -0
- vibe_surf/backend/frontend/assets/file-user-N7Fan7ao.js +6 -0
- vibe_surf/backend/frontend/assets/file-video-2-B4JBmAcG.js +6 -0
- vibe_surf/backend/frontend/assets/file-video-Fsp8g5kU.js +6 -0
- vibe_surf/backend/frontend/assets/file-volume-2-Cg1A9z8S.js +6 -0
- vibe_surf/backend/frontend/assets/file-volume-xzVZMKW0.js +6 -0
- vibe_surf/backend/frontend/assets/file-warning-CS2F3Xr2.js +6 -0
- vibe_surf/backend/frontend/assets/file-x-2-BNUgAQH8.js +6 -0
- vibe_surf/backend/frontend/assets/file-x-DTK5Zfd-.js +6 -0
- vibe_surf/backend/frontend/assets/files-CNx4yvup.js +6 -0
- vibe_surf/backend/frontend/assets/film-Dec7cGCL.js +6 -0
- vibe_surf/backend/frontend/assets/fingerprint-B_IGMLcp.js +6 -0
- vibe_surf/backend/frontend/assets/fire-extinguisher-CjZilrfE.js +6 -0
- vibe_surf/backend/frontend/assets/fish-CXs3XpVQ.js +6 -0
- vibe_surf/backend/frontend/assets/fish-off-BfYutBG_.js +6 -0
- vibe_surf/backend/frontend/assets/fish-symbol-DFoA8GWJ.js +6 -0
- vibe_surf/backend/frontend/assets/flag-cx37QYSs.js +6 -0
- vibe_surf/backend/frontend/assets/flag-off-DyXYguA1.js +6 -0
- vibe_surf/backend/frontend/assets/flag-triangle-left-Dvsg9XUg.js +6 -0
- vibe_surf/backend/frontend/assets/flag-triangle-right-CluL18qS.js +6 -0
- vibe_surf/backend/frontend/assets/flame-DwjoBypP.js +6 -0
- vibe_surf/backend/frontend/assets/flame-kindling-DFbZUxx1.js +6 -0
- vibe_surf/backend/frontend/assets/flashlight-eSCrcAU_.js +6 -0
- vibe_surf/backend/frontend/assets/flashlight-off-C6ZnSGnv.js +6 -0
- vibe_surf/backend/frontend/assets/flask-conical-CqZXJFUg.js +6 -0
- vibe_surf/backend/frontend/assets/flask-conical-off-DLnkLxdX.js +6 -0
- vibe_surf/backend/frontend/assets/flask-round-Dukzlk12.js +6 -0
- vibe_surf/backend/frontend/assets/flip-horizontal-2-DPCHT9Se.js +6 -0
- vibe_surf/backend/frontend/assets/flip-horizontal-B27Zih29.js +6 -0
- vibe_surf/backend/frontend/assets/flip-vertical-2-BLZ7P_e7.js +6 -0
- vibe_surf/backend/frontend/assets/flip-vertical-BKIxHZUr.js +6 -0
- vibe_surf/backend/frontend/assets/flower-2-C3USolHO.js +6 -0
- vibe_surf/backend/frontend/assets/flower-MuZltbIo.js +6 -0
- vibe_surf/backend/frontend/assets/focus-42uZfpdQ.js +6 -0
- vibe_surf/backend/frontend/assets/fold-horizontal-Di0iHFys.js +6 -0
- vibe_surf/backend/frontend/assets/fold-vertical-DTaNfFgW.js +6 -0
- vibe_surf/backend/frontend/assets/folder-CZZJq_yO.js +6 -0
- vibe_surf/backend/frontend/assets/folder-archive-B9gmPXfh.js +6 -0
- vibe_surf/backend/frontend/assets/folder-check-D8RNiC0h.js +6 -0
- vibe_surf/backend/frontend/assets/folder-clock-xJeq54e5.js +6 -0
- vibe_surf/backend/frontend/assets/folder-closed-J_oj7irx.js +6 -0
- vibe_surf/backend/frontend/assets/folder-code-sdeNF88C.js +6 -0
- vibe_surf/backend/frontend/assets/folder-cog-DaxTyB8x.js +6 -0
- vibe_surf/backend/frontend/assets/folder-dot-CcddM8ht.js +6 -0
- vibe_surf/backend/frontend/assets/folder-down-B6ibnVRy.js +6 -0
- vibe_surf/backend/frontend/assets/folder-git-2-C1s592lv.js +6 -0
- vibe_surf/backend/frontend/assets/folder-git-DT6ZCpGc.js +6 -0
- vibe_surf/backend/frontend/assets/folder-heart-_fpvnFcA.js +6 -0
- vibe_surf/backend/frontend/assets/folder-input-OCjNnVk-.js +6 -0
- vibe_surf/backend/frontend/assets/folder-kanban-DgbGiYl_.js +6 -0
- vibe_surf/backend/frontend/assets/folder-key-6dl4vOVJ.js +6 -0
- vibe_surf/backend/frontend/assets/folder-lock-C0FPUNUM.js +6 -0
- vibe_surf/backend/frontend/assets/folder-minus-CnnUrRgx.js +6 -0
- vibe_surf/backend/frontend/assets/folder-open-B6qoyzo4.js +6 -0
- vibe_surf/backend/frontend/assets/folder-open-dot-vcn79EAq.js +6 -0
- vibe_surf/backend/frontend/assets/folder-output-aqyTbjq1.js +6 -0
- vibe_surf/backend/frontend/assets/folder-pen-DONbvY-M.js +6 -0
- vibe_surf/backend/frontend/assets/folder-plus-B1CMWyUH.js +6 -0
- vibe_surf/backend/frontend/assets/folder-root-CO03ueMD.js +6 -0
- vibe_surf/backend/frontend/assets/folder-search-2-vXSwPDsr.js +6 -0
- vibe_surf/backend/frontend/assets/folder-search-CqRRhEYi.js +6 -0
- vibe_surf/backend/frontend/assets/folder-symlink-CyG26ZIM.js +6 -0
- vibe_surf/backend/frontend/assets/folder-sync-D7kc3Qv9.js +6 -0
- vibe_surf/backend/frontend/assets/folder-tree-B_kJAFgg.js +6 -0
- vibe_surf/backend/frontend/assets/folder-up-CPWWXuBL.js +6 -0
- vibe_surf/backend/frontend/assets/folder-x-BgWBu65a.js +6 -0
- vibe_surf/backend/frontend/assets/folders-BqIxqB0_.js +6 -0
- vibe_surf/backend/frontend/assets/footprints-U_DOce2V.js +6 -0
- vibe_surf/backend/frontend/assets/forklift-HwzIz7aw.js +6 -0
- vibe_surf/backend/frontend/assets/forward-DjYLGiCR.js +6 -0
- vibe_surf/backend/frontend/assets/frame-poMkf2ta.js +6 -0
- vibe_surf/backend/frontend/assets/framer-DNQvf86-.js +6 -0
- vibe_surf/backend/frontend/assets/frown-BnHOvtLa.js +6 -0
- vibe_surf/backend/frontend/assets/fuel-Cm_lHCJg.js +6 -0
- vibe_surf/backend/frontend/assets/fullscreen-COEG0zVc.js +6 -0
- vibe_surf/backend/frontend/assets/funnel-BKREn55d.js +6 -0
- vibe_surf/backend/frontend/assets/funnel-plus-B1RbFoZ4.js +6 -0
- vibe_surf/backend/frontend/assets/funnel-x-z3lufNFJ.js +6 -0
- vibe_surf/backend/frontend/assets/gallery-horizontal-CZQKmb1v.js +6 -0
- vibe_surf/backend/frontend/assets/gallery-horizontal-end-rt0pNZmd.js +6 -0
- vibe_surf/backend/frontend/assets/gallery-thumbnails-BawPOO5E.js +6 -0
- vibe_surf/backend/frontend/assets/gallery-vertical-DHlqWz-O.js +6 -0
- vibe_surf/backend/frontend/assets/gallery-vertical-end-1UBU5tP0.js +6 -0
- vibe_surf/backend/frontend/assets/gamepad-2-CGlBaPJy.js +6 -0
- vibe_surf/backend/frontend/assets/gamepad-B7EN8TXy.js +6 -0
- vibe_surf/backend/frontend/assets/gauge-CkJyJpYu.js +6 -0
- vibe_surf/backend/frontend/assets/gavel-BXOFsfyc.js +6 -0
- vibe_surf/backend/frontend/assets/gem-DJaoJhpp.js +6 -0
- vibe_surf/backend/frontend/assets/ghost-5jDlD5mv.js +6 -0
- vibe_surf/backend/frontend/assets/gift-DTuN9n1d.js +6 -0
- vibe_surf/backend/frontend/assets/git-branch-CAxiUjEF.js +6 -0
- vibe_surf/backend/frontend/assets/git-branch-plus-BcouIUD3.js +6 -0
- vibe_surf/backend/frontend/assets/git-commit-horizontal-DqOnbX0A.js +6 -0
- vibe_surf/backend/frontend/assets/git-commit-vertical-DEAmtVm7.js +6 -0
- vibe_surf/backend/frontend/assets/git-compare-8F4A8hf8.js +6 -0
- vibe_surf/backend/frontend/assets/git-compare-arrows-BCgbMQBd.js +6 -0
- vibe_surf/backend/frontend/assets/git-fork-UmnYpjac.js +6 -0
- vibe_surf/backend/frontend/assets/git-graph-MIRVcG3s.js +6 -0
- vibe_surf/backend/frontend/assets/git-merge-1ccPZB0a.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-BAmJjoSf.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-arrow-hDbG9s0T.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-closed-DZVF4_75.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-create-B_ikGAua.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-OlDcvuiA.js +6 -0
- vibe_surf/backend/frontend/assets/git-pull-request-draft-CfvzgQz4.js +6 -0
- vibe_surf/backend/frontend/assets/github-DlTWmBTt.js +6 -0
- vibe_surf/backend/frontend/assets/gitlab-DquWeR50.js +6 -0
- vibe_surf/backend/frontend/assets/glass-water-yuqxiPgK.js +6 -0
- vibe_surf/backend/frontend/assets/glasses-DPTQtusr.js +6 -0
- vibe_surf/backend/frontend/assets/globe-D1X1kv-g.js +6 -0
- vibe_surf/backend/frontend/assets/globe-lock-miWknHfI.js +6 -0
- vibe_surf/backend/frontend/assets/goal-BY1nb-LN.js +6 -0
- vibe_surf/backend/frontend/assets/grab-CnmpLOMH.js +6 -0
- vibe_surf/backend/frontend/assets/graduation-cap-CcH89wnV.js +6 -0
- vibe_surf/backend/frontend/assets/grape-CIiMFgS_.js +6 -0
- vibe_surf/backend/frontend/assets/grid-2x2-DyXR6Owe.js +6 -0
- vibe_surf/backend/frontend/assets/grid-2x2-check-D2GIuWpl.js +6 -0
- vibe_surf/backend/frontend/assets/grid-2x2-plus-D89B7CNh.js +6 -0
- vibe_surf/backend/frontend/assets/grid-2x2-x-CMeekq27.js +6 -0
- vibe_surf/backend/frontend/assets/grid-3x3-qKjElxaz.js +6 -0
- vibe_surf/backend/frontend/assets/grip--SsS48b-.js +6 -0
- vibe_surf/backend/frontend/assets/grip-horizontal-DapWkFjo.js +6 -0
- vibe_surf/backend/frontend/assets/grip-vertical-vn3rXQIt.js +6 -0
- vibe_surf/backend/frontend/assets/group-XhzCMXdw.js +6 -0
- vibe_surf/backend/frontend/assets/guitar-But8OLt2.js +6 -0
- vibe_surf/backend/frontend/assets/ham-_9G65W_I.js +6 -0
- vibe_surf/backend/frontend/assets/hammer-C2AZqVnX.js +6 -0
- vibe_surf/backend/frontend/assets/hand-DXuxSiOo.js +6 -0
- vibe_surf/backend/frontend/assets/hand-coins-mma7__lh.js +6 -0
- vibe_surf/backend/frontend/assets/hand-heart-DNtq1bnS.js +6 -0
- vibe_surf/backend/frontend/assets/hand-helping-Cdw7lKNu.js +6 -0
- vibe_surf/backend/frontend/assets/hand-metal-CcoWdRUV.js +6 -0
- vibe_surf/backend/frontend/assets/hand-platter-DoQTVTFx.js +6 -0
- vibe_surf/backend/frontend/assets/handshake-CJyspjIU.js +6 -0
- vibe_surf/backend/frontend/assets/hard-drive-ZduQuJtY.js +6 -0
- vibe_surf/backend/frontend/assets/hard-drive-download-D_hUh11c.js +6 -0
- vibe_surf/backend/frontend/assets/hard-drive-upload-BBPLIyZo.js +6 -0
- vibe_surf/backend/frontend/assets/hard-hat-OlmGevRI.js +6 -0
- vibe_surf/backend/frontend/assets/hash-COjLjaYu.js +6 -0
- vibe_surf/backend/frontend/assets/haze-Vf7OsAWn.js +6 -0
- vibe_surf/backend/frontend/assets/hdmi-port-B3C9bYX1.js +6 -0
- vibe_surf/backend/frontend/assets/heading-1-Dyyb72R2.js +6 -0
- vibe_surf/backend/frontend/assets/heading-2-ClF7vOi5.js +6 -0
- vibe_surf/backend/frontend/assets/heading-3-DPRazJfc.js +6 -0
- vibe_surf/backend/frontend/assets/heading-4-3e6Zii5g.js +6 -0
- vibe_surf/backend/frontend/assets/heading-5-GEVsfo30.js +6 -0
- vibe_surf/backend/frontend/assets/heading-6-CtX8dWYy.js +6 -0
- vibe_surf/backend/frontend/assets/heading-C_c5dBtC.js +6 -0
- vibe_surf/backend/frontend/assets/headphone-off-VkuNIw42.js +6 -0
- vibe_surf/backend/frontend/assets/headphones-BdMKOmhg.js +6 -0
- vibe_surf/backend/frontend/assets/headset-CGOllUmf.js +6 -0
- vibe_surf/backend/frontend/assets/heart-J_dfRIZ7.js +6 -0
- vibe_surf/backend/frontend/assets/heart-crack-BDNXXAjd.js +6 -0
- vibe_surf/backend/frontend/assets/heart-handshake-BhQLIVaj.js +6 -0
- vibe_surf/backend/frontend/assets/heart-minus-Dgexi3zQ.js +6 -0
- vibe_surf/backend/frontend/assets/heart-off-DF68jDRm.js +6 -0
- vibe_surf/backend/frontend/assets/heart-plus-D3LX6R_l.js +6 -0
- vibe_surf/backend/frontend/assets/heart-pulse-DnwkpqSJ.js +6 -0
- vibe_surf/backend/frontend/assets/heater-Bilq_TPS.js +6 -0
- vibe_surf/backend/frontend/assets/hexagon-BEvfIIaV.js +6 -0
- vibe_surf/backend/frontend/assets/highlighter-CNa8UVQD.js +6 -0
- vibe_surf/backend/frontend/assets/history-BggOc8wP.js +6 -0
- vibe_surf/backend/frontend/assets/hop-BCUHAdeR.js +6 -0
- vibe_surf/backend/frontend/assets/hop-off-B5f9Fr80.js +6 -0
- vibe_surf/backend/frontend/assets/hospital-Dk0tqXu9.js +6 -0
- vibe_surf/backend/frontend/assets/hotel-CXl-yW7B.js +6 -0
- vibe_surf/backend/frontend/assets/hourglass-DSRXQwTc.js +6 -0
- vibe_surf/backend/frontend/assets/house-Bhp2WF4v.js +6 -0
- vibe_surf/backend/frontend/assets/house-plug-DXm5j2Xq.js +6 -0
- vibe_surf/backend/frontend/assets/house-plus-KMp_x4hA.js +6 -0
- vibe_surf/backend/frontend/assets/house-wifi-Ccrar5-8.js +6 -0
- vibe_surf/backend/frontend/assets/ice-cream-bowl-j3qet3-o.js +6 -0
- vibe_surf/backend/frontend/assets/ice-cream-cone-XtpMBOSu.js +6 -0
- vibe_surf/backend/frontend/assets/id-card-BqzQOrR_.js +6 -0
- vibe_surf/backend/frontend/assets/image-B3lEwdvu.js +6 -0
- vibe_surf/backend/frontend/assets/image-down-sVdzbwfm.js +6 -0
- vibe_surf/backend/frontend/assets/image-minus-BdddBiyu.js +6 -0
- vibe_surf/backend/frontend/assets/image-off-CCZ9kVWH.js +6 -0
- vibe_surf/backend/frontend/assets/image-play-LNuKchCO.js +6 -0
- vibe_surf/backend/frontend/assets/image-plus-B4GTKJ6Z.js +6 -0
- vibe_surf/backend/frontend/assets/image-up-BfxmsdpY.js +6 -0
- vibe_surf/backend/frontend/assets/image-upscale-CexWZ50d.js +6 -0
- vibe_surf/backend/frontend/assets/images-C8Wp1eOg.js +6 -0
- vibe_surf/backend/frontend/assets/import-ec27SWYy.js +6 -0
- vibe_surf/backend/frontend/assets/inbox-YvwvpFKi.js +6 -0
- vibe_surf/backend/frontend/assets/indent-decrease-Dp0BVsoQ.js +6 -0
- vibe_surf/backend/frontend/assets/indent-increase-D3BuYj2n.js +6 -0
- vibe_surf/backend/frontend/assets/index-2CcQW4OZ.js +13 -0
- vibe_surf/backend/frontend/assets/index-4vq5awkV.js +1 -0
- vibe_surf/backend/frontend/assets/index-5ZZlgfo-.js +1 -0
- vibe_surf/backend/frontend/assets/index-6dxAUV6Y.js +1 -0
- vibe_surf/backend/frontend/assets/index-AzcZQWVx.js +2723 -0
- vibe_surf/backend/frontend/assets/index-B-IDFsd0.js +1 -0
- vibe_surf/backend/frontend/assets/index-B-ohDVDe.js +1 -0
- vibe_surf/backend/frontend/assets/index-B1Q4y1qa.js +1 -0
- vibe_surf/backend/frontend/assets/index-B1SY6fah.js +1 -0
- vibe_surf/backend/frontend/assets/index-B2ljcLYu.js +1 -0
- vibe_surf/backend/frontend/assets/index-B4-H1yfm.js +108 -0
- vibe_surf/backend/frontend/assets/index-B6MKztQU.js +1 -0
- vibe_surf/backend/frontend/assets/index-B7i2Q-3O.js +1 -0
- vibe_surf/backend/frontend/assets/index-B9Wx-Ii0.js +1 -0
- vibe_surf/backend/frontend/assets/index-BFzpTaXY.js +1 -0
- vibe_surf/backend/frontend/assets/index-BIBNbmyC.js +1 -0
- vibe_surf/backend/frontend/assets/index-BL_hoToU.js +1 -0
- vibe_surf/backend/frontend/assets/index-BOeI-zQ9.js +1 -0
- vibe_surf/backend/frontend/assets/index-BPEpFAuc.js +1 -0
- vibe_surf/backend/frontend/assets/index-BQ1eB4fC.js +1 -0
- vibe_surf/backend/frontend/assets/index-BQ2H2d3f.js +1 -0
- vibe_surf/backend/frontend/assets/index-BR-8IPV4.js +205 -0
- vibe_surf/backend/frontend/assets/index-BV8ArFsA.js +1 -0
- vibe_surf/backend/frontend/assets/index-BWwASCq5.js +1 -0
- vibe_surf/backend/frontend/assets/index-BWwglY3I.js +1 -0
- vibe_surf/backend/frontend/assets/index-B_Qz_foX.js +1 -0
- vibe_surf/backend/frontend/assets/index-BaoW7GZH.js +1 -0
- vibe_surf/backend/frontend/assets/index-BcrHz-y8.js +1 -0
- vibe_surf/backend/frontend/assets/index-BdSzkc1f.js +20 -0
- vibe_surf/backend/frontend/assets/index-BeLkvqxv.js +1 -0
- vibe_surf/backend/frontend/assets/index-Beq_etUM.js +1 -0
- vibe_surf/backend/frontend/assets/index-BgzQso9y.js +1 -0
- vibe_surf/backend/frontend/assets/index-BiNrEY13.js +1 -0
- vibe_surf/backend/frontend/assets/index-Bja3ZEZo.js +1 -0
- vibe_surf/backend/frontend/assets/index-BmcD7XCM.js +1 -0
- vibe_surf/backend/frontend/assets/index-BmnwJzsA.js +1 -0
- vibe_surf/backend/frontend/assets/index-BssAenIo.js +1 -0
- vibe_surf/backend/frontend/assets/index-BvEZ1ywS.js +1 -0
- vibe_surf/backend/frontend/assets/index-BwO1owi8.js +1 -0
- vibe_surf/backend/frontend/assets/index-BwXsJbuu.js +21 -0
- vibe_surf/backend/frontend/assets/index-BwlG2DdK.js +1 -0
- vibe_surf/backend/frontend/assets/index-BzjC6B6I.js +1 -0
- vibe_surf/backend/frontend/assets/index-C0BOag_5.js +1 -0
- vibe_surf/backend/frontend/assets/index-C0EsaEHC.js +1 -0
- vibe_surf/backend/frontend/assets/index-C0IGIaTE.js +1 -0
- vibe_surf/backend/frontend/assets/index-C0IdY_9F.js +1 -0
- vibe_surf/backend/frontend/assets/index-C1DABLwl.js +1 -0
- vibe_surf/backend/frontend/assets/index-C1JE4AZB.js +1 -0
- vibe_surf/backend/frontend/assets/index-C1Rkl2Ur.js +1 -0
- vibe_surf/backend/frontend/assets/index-C2YWu5t8.js +1 -0
- vibe_surf/backend/frontend/assets/index-C2_4AcrM.js +1 -0
- vibe_surf/backend/frontend/assets/index-C48IE5LT.js +1 -0
- vibe_surf/backend/frontend/assets/index-C4JqQnzd.js +1 -0
- vibe_surf/backend/frontend/assets/index-C5QqjjEO.js +1 -0
- vibe_surf/backend/frontend/assets/index-C6ZyrgxW.js +1 -0
- vibe_surf/backend/frontend/assets/index-C9n9R8Ob.js +1 -0
- vibe_surf/backend/frontend/assets/index-CATPt8gz.js +1 -0
- vibe_surf/backend/frontend/assets/index-CAc6KlCl.js +1 -0
- vibe_surf/backend/frontend/assets/index-CAeE91z_.js +1 -0
- vibe_surf/backend/frontend/assets/index-CBLrD5S8.js +1 -0
- vibe_surf/backend/frontend/assets/index-CEx7_efn.js +1 -0
- vibe_surf/backend/frontend/assets/index-CGNwvjd6.js +1 -0
- vibe_surf/backend/frontend/assets/index-CJIkyYuu.js +1 -0
- vibe_surf/backend/frontend/assets/index-CL8YNknR.js +1 -0
- vibe_surf/backend/frontend/assets/index-CQ4c4zmh.js +1 -0
- vibe_surf/backend/frontend/assets/index-CSKpbeRU.js +1 -0
- vibe_surf/backend/frontend/assets/index-CTJUto70.js +1 -0
- vibe_surf/backend/frontend/assets/index-CUm8t_3-.js +1 -0
- vibe_surf/backend/frontend/assets/index-CWaG8YQf.js +1 -0
- vibe_surf/backend/frontend/assets/index-CWqCL2_S.js +1 -0
- vibe_surf/backend/frontend/assets/index-CZKjLvxC.js +1 -0
- vibe_surf/backend/frontend/assets/index-C_a_gjJ3.js +7382 -0
- vibe_surf/backend/frontend/assets/index-C_gjztJA.js +1 -0
- vibe_surf/backend/frontend/assets/index-Cd394DZ3.js +1 -0
- vibe_surf/backend/frontend/assets/index-Ch_ENQTO.js +1 -0
- vibe_surf/backend/frontend/assets/index-CjDauRtw.js +1 -0
- vibe_surf/backend/frontend/assets/index-Cjsyudia.js +1 -0
- vibe_surf/backend/frontend/assets/index-Ck0Rk7OE.js +1 -0
- vibe_surf/backend/frontend/assets/index-Ct1jT_zG.js +1 -0
- vibe_surf/backend/frontend/assets/index-CtZOHuJR.js +1 -0
- vibe_surf/backend/frontend/assets/index-CwylYZIy.js +1 -0
- vibe_surf/backend/frontend/assets/index-CxGAIJCD.js +1 -0
- vibe_surf/backend/frontend/assets/index-D-6VXnmQ.js +1 -0
- vibe_surf/backend/frontend/assets/index-D-_pq5D8.js +1 -0
- vibe_surf/backend/frontend/assets/index-D-oTsuqV.js +1 -0
- vibe_surf/backend/frontend/assets/index-D8iHrvl3.js +1 -0
- vibe_surf/backend/frontend/assets/index-DDYB0tod.js +1 -0
- vibe_surf/backend/frontend/assets/index-DDtHdtyM.js +1 -0
- vibe_surf/backend/frontend/assets/index-DH3R0iod.js +1 -0
- vibe_surf/backend/frontend/assets/index-DJAmqieX.js +1 -0
- vibe_surf/backend/frontend/assets/index-DJYhOcBD.js +1 -0
- vibe_surf/backend/frontend/assets/index-DQKxDe4Q.js +1 -0
- vibe_surf/backend/frontend/assets/index-DS9glxiF.js +1 -0
- vibe_surf/backend/frontend/assets/index-DUjF6qus.js +2 -0
- vibe_surf/backend/frontend/assets/index-DXYmUzC_.css +1 -0
- vibe_surf/backend/frontend/assets/index-D_wRbh5r.js +1 -0
- vibe_surf/backend/frontend/assets/index-Db4BfmcT.js +1 -0
- vibe_surf/backend/frontend/assets/index-DfZGZYcK.js +1 -0
- vibe_surf/backend/frontend/assets/index-DlDGYPf2.js +1 -0
- vibe_surf/backend/frontend/assets/index-DlFy5Gok.js +1 -0
- vibe_surf/backend/frontend/assets/index-DmVpDlko.js +1 -0
- vibe_surf/backend/frontend/assets/index-Dpc9wHta.js +1 -0
- vibe_surf/backend/frontend/assets/index-DvcAIETO.js +1 -0
- vibe_surf/backend/frontend/assets/index-Dwi-X1Od.js +1 -0
- vibe_surf/backend/frontend/assets/index-FMPFv3Wf.js +1 -0
- vibe_surf/backend/frontend/assets/index-H3Uskc2o.js +1 -0
- vibe_surf/backend/frontend/assets/index-JWfrTs_0.js +1 -0
- vibe_surf/backend/frontend/assets/index-LX3KOMfj.js +1 -0
- vibe_surf/backend/frontend/assets/index-LXWgTVf4.js +1 -0
- vibe_surf/backend/frontend/assets/index-WJ6PviAq.js +1 -0
- vibe_surf/backend/frontend/assets/index-WrqFIXAC.js +1 -0
- vibe_surf/backend/frontend/assets/index-Yoj1a8xs.js +1 -0
- vibe_surf/backend/frontend/assets/index-YxTPhodS.js +1 -0
- vibe_surf/backend/frontend/assets/index-_8LB3oNa.js +1 -0
- vibe_surf/backend/frontend/assets/index-bNhROe-x.js +1 -0
- vibe_surf/backend/frontend/assets/index-cQAtXO5d.js +1 -0
- vibe_surf/backend/frontend/assets/index-hIdlDvEv.js +1 -0
- vibe_surf/backend/frontend/assets/index-hxJwU1-s.js +1 -0
- vibe_surf/backend/frontend/assets/index-iA_X3O5r.js +1 -0
- vibe_surf/backend/frontend/assets/index-iW93REva.js +1 -0
- vibe_surf/backend/frontend/assets/index-k2RdCBHb.js +1 -0
- vibe_surf/backend/frontend/assets/index-kJKg9EzG.js +1 -0
- vibe_surf/backend/frontend/assets/index-mX6ATl2n.js +1 -0
- vibe_surf/backend/frontend/assets/index-muCxPdjC.js +1 -0
- vibe_surf/backend/frontend/assets/index-nd1f74Wi.js +1 -0
- vibe_surf/backend/frontend/assets/index-qGbEX4n3.js +1 -0
- vibe_surf/backend/frontend/assets/index-qOd-CLaR.js +1 -0
- vibe_surf/backend/frontend/assets/index-sguRseYw.js +1 -0
- vibe_surf/backend/frontend/assets/index-vd7ILFrg.js +1 -0
- vibe_surf/backend/frontend/assets/index-we6mCAhv.js +1 -0
- vibe_surf/backend/frontend/assets/index-x0VA7yzX.js +1 -0
- vibe_surf/backend/frontend/assets/index-yCVeNkNd.js +1 -0
- vibe_surf/backend/frontend/assets/indian-rupee-ClaZI0Dh.js +6 -0
- vibe_surf/backend/frontend/assets/infinity-LKjcIaZa.js +6 -0
- vibe_surf/backend/frontend/assets/info-DFBdB7_c.js +6 -0
- vibe_surf/backend/frontend/assets/inspection-panel-DGzE6245.js +6 -0
- vibe_surf/backend/frontend/assets/instagram-CJj5AWOV.js +6 -0
- vibe_surf/backend/frontend/assets/italic-CKFB3the.js +6 -0
- vibe_surf/backend/frontend/assets/iteration-ccw-YnfylsKm.js +6 -0
- vibe_surf/backend/frontend/assets/iteration-cw-DTHRwCcy.js +6 -0
- vibe_surf/backend/frontend/assets/japanese-yen-BG_Inyh_.js +6 -0
- vibe_surf/backend/frontend/assets/joystick-bJVSvZlL.js +6 -0
- vibe_surf/backend/frontend/assets/kanban-KP-K8pC9.js +6 -0
- vibe_surf/backend/frontend/assets/key-CNaiqe5q.js +6 -0
- vibe_surf/backend/frontend/assets/key-round-RTYFDTCa.js +6 -0
- vibe_surf/backend/frontend/assets/key-square-C7EKR-zE.js +6 -0
- vibe_surf/backend/frontend/assets/keyboard-DaM0Dl19.js +6 -0
- vibe_surf/backend/frontend/assets/keyboard-music-CzJZiHzS.js +6 -0
- vibe_surf/backend/frontend/assets/keyboard-off-C9Jl7GZs.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-DK_3DJnO.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-ceiling-B8sGjZ8c.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-desk-CxWpiNas.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-floor-EUFzRKf7.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-wall-down-BV84JTWM.js +6 -0
- vibe_surf/backend/frontend/assets/lamp-wall-up-BqpaYZN9.js +6 -0
- vibe_surf/backend/frontend/assets/land-plot-Dly_Debw.js +6 -0
- vibe_surf/backend/frontend/assets/landmark-W6MewilS.js +6 -0
- vibe_surf/backend/frontend/assets/languages-BQghN4Gu.js +6 -0
- vibe_surf/backend/frontend/assets/laptop-BysYcdO1.js +6 -0
- vibe_surf/backend/frontend/assets/laptop-minimal-CUViKl_u.js +6 -0
- vibe_surf/backend/frontend/assets/laptop-minimal-check-BZNY8l54.js +6 -0
- vibe_surf/backend/frontend/assets/lasso-CBTyEbGH.js +6 -0
- vibe_surf/backend/frontend/assets/lasso-select-D9j71vtb.js +6 -0
- vibe_surf/backend/frontend/assets/laugh-fkxJEAC6.js +6 -0
- vibe_surf/backend/frontend/assets/layers-2-B3mnroGJ.js +6 -0
- vibe_surf/backend/frontend/assets/layers-CLO8Qj7V.js +6 -0
- vibe_surf/backend/frontend/assets/layout-dashboard-BCgC4-j3.js +6 -0
- vibe_surf/backend/frontend/assets/layout-grid-DQlh6Dv5.js +6 -0
- vibe_surf/backend/frontend/assets/layout-list-BK2Y57B-.js +6 -0
- vibe_surf/backend/frontend/assets/layout-panel-left-BzdjKizu.js +6 -0
- vibe_surf/backend/frontend/assets/layout-panel-top-CmMnqmez.js +6 -0
- vibe_surf/backend/frontend/assets/layout-template-DkuzhO5B.js +6 -0
- vibe_surf/backend/frontend/assets/lazyIconImports-Cbxc-ykm.js +2 -0
- vibe_surf/backend/frontend/assets/leaf-D1Z4WxA8.js +6 -0
- vibe_surf/backend/frontend/assets/leafy-green-C7IHTNVi.js +6 -0
- vibe_surf/backend/frontend/assets/lectern-BpswhiFV.js +6 -0
- vibe_surf/backend/frontend/assets/letter-text-B_mZgzJ7.js +6 -0
- vibe_surf/backend/frontend/assets/library-BEQ0EBja.js +6 -0
- vibe_surf/backend/frontend/assets/library-big-C32jLDwT.js +6 -0
- vibe_surf/backend/frontend/assets/life-buoy-AWdXr4CQ.js +6 -0
- vibe_surf/backend/frontend/assets/ligature-DRsGqV7j.js +6 -0
- vibe_surf/backend/frontend/assets/lightbulb-D3KZbCQp.js +6 -0
- vibe_surf/backend/frontend/assets/lightbulb-off-iSDmy8d6.js +6 -0
- vibe_surf/backend/frontend/assets/link-2-CCZYGxDI.js +6 -0
- vibe_surf/backend/frontend/assets/link-2-off-BWpEKUCS.js +6 -0
- vibe_surf/backend/frontend/assets/link-Diw-YZ8t.js +6 -0
- vibe_surf/backend/frontend/assets/linkedin-CExn9EK5.js +6 -0
- vibe_surf/backend/frontend/assets/list-CB9zDbEv.js +6 -0
- vibe_surf/backend/frontend/assets/list-check-CCdijvLD.js +6 -0
- vibe_surf/backend/frontend/assets/list-checks-B1EQ8oeV.js +6 -0
- vibe_surf/backend/frontend/assets/list-collapse-B_Nyhn3U.js +6 -0
- vibe_surf/backend/frontend/assets/list-end-BRGFPR4T.js +6 -0
- vibe_surf/backend/frontend/assets/list-filter-DR4JqPVX.js +6 -0
- vibe_surf/backend/frontend/assets/list-filter-plus-Q7j2JYzP.js +6 -0
- vibe_surf/backend/frontend/assets/list-minus-DrLtfmEG.js +6 -0
- vibe_surf/backend/frontend/assets/list-music-C6MOQHoL.js +6 -0
- vibe_surf/backend/frontend/assets/list-ordered-Db8L0lqU.js +6 -0
- vibe_surf/backend/frontend/assets/list-plus-C1dade1Z.js +6 -0
- vibe_surf/backend/frontend/assets/list-restart-CyRkF6Xo.js +6 -0
- vibe_surf/backend/frontend/assets/list-start-CAn16QHF.js +6 -0
- vibe_surf/backend/frontend/assets/list-todo-giJ3EaBY.js +6 -0
- vibe_surf/backend/frontend/assets/list-tree-ZTTp4tz8.js +6 -0
- vibe_surf/backend/frontend/assets/list-video-SNqnTTmu.js +6 -0
- vibe_surf/backend/frontend/assets/list-x-XeDairuR.js +6 -0
- vibe_surf/backend/frontend/assets/loader-RYX0GikH.js +6 -0
- vibe_surf/backend/frontend/assets/loader-circle-CjMVhyrE.js +6 -0
- vibe_surf/backend/frontend/assets/loader-pinwheel-Dv08mzUX.js +6 -0
- vibe_surf/backend/frontend/assets/locate-DcqAXVyu.js +6 -0
- vibe_surf/backend/frontend/assets/locate-fixed-BgaqK3FM.js +6 -0
- vibe_surf/backend/frontend/assets/locate-off-1UN8A6fK.js +6 -0
- vibe_surf/backend/frontend/assets/location-edit-DFbMZW6i.js +6 -0
- vibe_surf/backend/frontend/assets/lock-DWN4LH3Q.js +6 -0
- vibe_surf/backend/frontend/assets/lock-keyhole-aeS26SmF.js +6 -0
- vibe_surf/backend/frontend/assets/lock-keyhole-open-CoXzZLpr.js +6 -0
- vibe_surf/backend/frontend/assets/lock-open-CBPubokC.js +6 -0
- vibe_surf/backend/frontend/assets/log-in-BW8pmSIu.js +6 -0
- vibe_surf/backend/frontend/assets/log-out-D-d0DczA.js +6 -0
- vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
- vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
- vibe_surf/backend/frontend/assets/logs-AXuVwIE_.js +6 -0
- vibe_surf/backend/frontend/assets/lollipop-CxugcHkj.js +6 -0
- vibe_surf/backend/frontend/assets/luggage-CFtS088O.js +6 -0
- vibe_surf/backend/frontend/assets/magnet-BpIqKX0D.js +6 -0
- vibe_surf/backend/frontend/assets/mail-1Br8NAMK.js +6 -0
- vibe_surf/backend/frontend/assets/mail-check-DFwD0fvI.js +6 -0
- vibe_surf/backend/frontend/assets/mail-minus-B_KovqmT.js +6 -0
- vibe_surf/backend/frontend/assets/mail-open-VEmMVybi.js +6 -0
- vibe_surf/backend/frontend/assets/mail-plus-D-1Wacj7.js +6 -0
- vibe_surf/backend/frontend/assets/mail-question-CJK96wre.js +6 -0
- vibe_surf/backend/frontend/assets/mail-search-Du6F72Wj.js +6 -0
- vibe_surf/backend/frontend/assets/mail-warning-BI87_kvG.js +6 -0
- vibe_surf/backend/frontend/assets/mail-x-DU415vbZ.js +6 -0
- vibe_surf/backend/frontend/assets/mailbox-CMHDAMVZ.js +6 -0
- vibe_surf/backend/frontend/assets/mails-CUDj41Cn.js +6 -0
- vibe_surf/backend/frontend/assets/map-D2I0g3OZ.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-CiM6iB2r.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-check-BQWCC6Uv.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-check-inside-CVhhgPHY.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-house-CXbXX8w-.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-minus-D0dRHvgd.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-minus-inside-DGpPZYAi.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-off-EbFPnlZq.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-plus-BLD0VcG5.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-plus-inside-CapcP3Yk.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-x-DrNWALEC.js +6 -0
- vibe_surf/backend/frontend/assets/map-pin-x-inside-9DqM8z-J.js +6 -0
- vibe_surf/backend/frontend/assets/map-pinned-DHMQpBhr.js +6 -0
- vibe_surf/backend/frontend/assets/map-plus-CQm0KS9c.js +6 -0
- vibe_surf/backend/frontend/assets/mars-CcweinsF.js +6 -0
- vibe_surf/backend/frontend/assets/mars-stroke-OWTfhzV5.js +6 -0
- vibe_surf/backend/frontend/assets/martini-DGORgxbx.js +6 -0
- vibe_surf/backend/frontend/assets/maximize-2-CN4UuSQb.js +6 -0
- vibe_surf/backend/frontend/assets/maximize-DOYuzVqB.js +6 -0
- vibe_surf/backend/frontend/assets/medal-DZT2ADyJ.js +6 -0
- vibe_surf/backend/frontend/assets/megaphone-DN4B6I5c.js +6 -0
- vibe_surf/backend/frontend/assets/megaphone-off-DRAddUqF.js +6 -0
- vibe_surf/backend/frontend/assets/meh-CTX3Y793.js +6 -0
- vibe_surf/backend/frontend/assets/memory-stick-CSG08PuA.js +6 -0
- vibe_surf/backend/frontend/assets/menu-BUvQ8bhy.js +6 -0
- vibe_surf/backend/frontend/assets/merge-xkPPWyBJ.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-BSqs77ZY.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-code-EW46-KUX.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-dashed-BOxWD8kE.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-heart-CBhiUXeV.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-more-DqfUhx6W.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-off-DrsP7VV_.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-plus-IixbN-s-.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-question-DsMgtwwS.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-reply-D_Eog9Yc.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-warning-D656cL7l.js +6 -0
- vibe_surf/backend/frontend/assets/message-circle-x-CXWR4BBb.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-DKWryKVG.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-code-0ANFU-JW.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-dashed-DaZwp2x1.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-diff-DpJLi_UX.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-dot-OcgwyxZC.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-heart-CKfZOSw8.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-lock-BnNy_yw5.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-more-D2WGFzms.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-off-DV5974j6.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-plus-7icA5g-P.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-quote-DdAvA-a_.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-reply-Cg9Dlls7.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-share-BptAhOEV.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-text-Cu-Ycwsi.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-warning-DxIzJ5bt.js +6 -0
- vibe_surf/backend/frontend/assets/message-square-x-BF9akIp2.js +6 -0
- vibe_surf/backend/frontend/assets/messages-square-AjrRNZXQ.js +6 -0
- vibe_surf/backend/frontend/assets/mic-BXU1SRXR.js +6 -0
- vibe_surf/backend/frontend/assets/mic-off-BUQ1-6-l.js +6 -0
- vibe_surf/backend/frontend/assets/mic-vocal-CG4Yw8We.js +6 -0
- vibe_surf/backend/frontend/assets/microchip-CodKB7m1.js +6 -0
- vibe_surf/backend/frontend/assets/microscope-BY57GHi1.js +6 -0
- vibe_surf/backend/frontend/assets/microwave-KuJ1X2CX.js +6 -0
- vibe_surf/backend/frontend/assets/milestone-D_ToDu31.js +6 -0
- vibe_surf/backend/frontend/assets/milk-C4Nq829F.js +6 -0
- vibe_surf/backend/frontend/assets/milk-off-BPCtdIks.js +6 -0
- vibe_surf/backend/frontend/assets/minimize-2-DeAs1S78.js +6 -0
- vibe_surf/backend/frontend/assets/minimize-DKOGyuzf.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-Cjm4ELo4.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-check-CrckmDk_.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-cog-DIPYXk5z.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-dot-Cl_ZGBvp.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-down-DCSynbhm.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-off-Bxqkes47.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-pause-B2ogwlXq.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-play-w2CTvWQx.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-smartphone-DYQb-VQa.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-speaker-CruyWIOw.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-stop-D2cot7wP.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-up-Bo4VFUGK.js +6 -0
- vibe_surf/backend/frontend/assets/monitor-x-yhFSw0Zo.js +6 -0
- vibe_surf/backend/frontend/assets/moon-CZFTmFVS.js +6 -0
- vibe_surf/backend/frontend/assets/moon-star-X8Pb6SAO.js +6 -0
- vibe_surf/backend/frontend/assets/mountain-_tKRhauQ.js +6 -0
- vibe_surf/backend/frontend/assets/mountain-snow-COLjUpoc.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-C62B_4i7.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-off-NO65wsqy.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-pointer-2-vvokJ-v-.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-pointer-IHoLB1Ii.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-pointer-ban-BGxlXS_f.js +6 -0
- vibe_surf/backend/frontend/assets/mouse-pointer-click-C7N7cKxT.js +6 -0
- vibe_surf/backend/frontend/assets/move-3d-CQO0qR5b.js +6 -0
- vibe_surf/backend/frontend/assets/move-Bp3oIgRK.js +6 -0
- vibe_surf/backend/frontend/assets/move-diagonal-2-CQ3Gqa4B.js +6 -0
- vibe_surf/backend/frontend/assets/move-diagonal-BkUx0iYA.js +6 -0
- vibe_surf/backend/frontend/assets/move-down-B4dxMy_p.js +6 -0
- vibe_surf/backend/frontend/assets/move-down-left-NxvLep64.js +6 -0
- vibe_surf/backend/frontend/assets/move-down-right-CxcsF1yI.js +6 -0
- vibe_surf/backend/frontend/assets/move-horizontal-or6vuyOq.js +6 -0
- vibe_surf/backend/frontend/assets/move-left-Tcae9tGG.js +6 -0
- vibe_surf/backend/frontend/assets/move-right-jY3F431H.js +6 -0
- vibe_surf/backend/frontend/assets/move-up-Dk8sPbRD.js +6 -0
- vibe_surf/backend/frontend/assets/move-up-left-CD7NRvhF.js +6 -0
- vibe_surf/backend/frontend/assets/move-up-right-BAOhHbBw.js +6 -0
- vibe_surf/backend/frontend/assets/move-vertical-BxWj9bDO.js +6 -0
- vibe_surf/backend/frontend/assets/music-2-DQL5lOH_.js +6 -0
- vibe_surf/backend/frontend/assets/music-3-wkxjpooD.js +6 -0
- vibe_surf/backend/frontend/assets/music-4-CgUN2PUO.js +6 -0
- vibe_surf/backend/frontend/assets/music-YxXwq9fN.js +6 -0
- vibe_surf/backend/frontend/assets/navigation-2-Ba4Z-jSq.js +6 -0
- vibe_surf/backend/frontend/assets/navigation-2-off-C_LfeWvW.js +6 -0
- vibe_surf/backend/frontend/assets/navigation-BEChOEsi.js +6 -0
- vibe_surf/backend/frontend/assets/navigation-off-BehyOyE3.js +6 -0
- vibe_surf/backend/frontend/assets/network-CwJLOq3T.js +6 -0
- vibe_surf/backend/frontend/assets/newspaper-ELrHeGRI.js +6 -0
- vibe_surf/backend/frontend/assets/nfc-B_3XFb34.js +6 -0
- vibe_surf/backend/frontend/assets/non-binary-BsgU9v43.js +6 -0
- vibe_surf/backend/frontend/assets/notebook-j-nq3SkT.js +6 -0
- vibe_surf/backend/frontend/assets/notebook-pen-D9-IPVfi.js +6 -0
- vibe_surf/backend/frontend/assets/notebook-tabs-B8RN5vFZ.js +6 -0
- vibe_surf/backend/frontend/assets/notebook-text-9VvE4wV2.js +6 -0
- vibe_surf/backend/frontend/assets/notepad-text-CtRuOWM5.js +6 -0
- vibe_surf/backend/frontend/assets/notepad-text-dashed-BKDJS1oq.js +6 -0
- vibe_surf/backend/frontend/assets/nut-MLKrgO4r.js +6 -0
- vibe_surf/backend/frontend/assets/nut-off-CX5f1ggv.js +6 -0
- vibe_surf/backend/frontend/assets/octagon-Dm5tdLTK.js +6 -0
- vibe_surf/backend/frontend/assets/octagon-alert-THvRb-wV.js +6 -0
- vibe_surf/backend/frontend/assets/octagon-minus-BIN-9swI.js +6 -0
- vibe_surf/backend/frontend/assets/octagon-pause-BvRAlpaV.js +6 -0
- vibe_surf/backend/frontend/assets/octagon-x-DeRG_Ls0.js +6 -0
- vibe_surf/backend/frontend/assets/omega-CVAxeKBK.js +6 -0
- vibe_surf/backend/frontend/assets/option-14pftykg.js +6 -0
- vibe_surf/backend/frontend/assets/orbit-CfewrZaI.js +6 -0
- vibe_surf/backend/frontend/assets/origami-BT1VriUJ.js +6 -0
- vibe_surf/backend/frontend/assets/package-2-D11kpXq5.js +6 -0
- vibe_surf/backend/frontend/assets/package-BegS59es.js +6 -0
- vibe_surf/backend/frontend/assets/package-check-DOLq4x6S.js +6 -0
- vibe_surf/backend/frontend/assets/package-minus-BFgP752B.js +6 -0
- vibe_surf/backend/frontend/assets/package-open-D2nk_ytU.js +6 -0
- vibe_surf/backend/frontend/assets/package-plus-Va8EoLSt.js +6 -0
- vibe_surf/backend/frontend/assets/package-search-cGv3F3Yi.js +6 -0
- vibe_surf/backend/frontend/assets/package-x-BFCKCrAT.js +6 -0
- vibe_surf/backend/frontend/assets/paint-bucket-C1nh-Go_.js +6 -0
- vibe_surf/backend/frontend/assets/paint-roller-C9vy4fuD.js +6 -0
- vibe_surf/backend/frontend/assets/paintbrush-Bo4L8Hqc.js +6 -0
- vibe_surf/backend/frontend/assets/paintbrush-vertical-DqUyy2UU.js +6 -0
- vibe_surf/backend/frontend/assets/palette-DddGrkXJ.js +6 -0
- vibe_surf/backend/frontend/assets/panel-bottom-DPSx8I79.js +6 -0
- vibe_surf/backend/frontend/assets/panel-bottom-close-D0SBNVCx.js +6 -0
- vibe_surf/backend/frontend/assets/panel-bottom-dashed-CR6jKyB5.js +6 -0
- vibe_surf/backend/frontend/assets/panel-bottom-open-BA8uHJ1f.js +6 -0
- vibe_surf/backend/frontend/assets/panel-left-close-HWzVGhEN.js +6 -0
- vibe_surf/backend/frontend/assets/panel-left-dashed-C8CvEMus.js +6 -0
- vibe_surf/backend/frontend/assets/panel-left-open-DZtgeJky.js +6 -0
- vibe_surf/backend/frontend/assets/panel-right-BIGpcNCD.js +6 -0
- vibe_surf/backend/frontend/assets/panel-right-close-D6I6nB-8.js +6 -0
- vibe_surf/backend/frontend/assets/panel-right-dashed-Dt-tZyfJ.js +6 -0
- vibe_surf/backend/frontend/assets/panel-right-open-Cso_cmr4.js +6 -0
- vibe_surf/backend/frontend/assets/panel-top-DxQozLLO.js +6 -0
- vibe_surf/backend/frontend/assets/panel-top-close-21p_Iy4Q.js +6 -0
- vibe_surf/backend/frontend/assets/panel-top-dashed-BLLvCUcW.js +6 -0
- vibe_surf/backend/frontend/assets/panel-top-open-DOpjqeXN.js +6 -0
- vibe_surf/backend/frontend/assets/panels-left-bottom-Dgc_Zml-.js +6 -0
- vibe_surf/backend/frontend/assets/panels-right-bottom-DBl33v5J.js +6 -0
- vibe_surf/backend/frontend/assets/panels-top-left-Bh9Km2t_.js +6 -0
- vibe_surf/backend/frontend/assets/paperclip-DwNdWjNs.js +6 -0
- vibe_surf/backend/frontend/assets/parentheses-Bv3x0v0d.js +6 -0
- vibe_surf/backend/frontend/assets/parking-meter-CaAUYem8.js +6 -0
- vibe_surf/backend/frontend/assets/party-popper-o676ndwa.js +6 -0
- vibe_surf/backend/frontend/assets/pause-DofdcFyf.js +6 -0
- vibe_surf/backend/frontend/assets/paw-print-CsCZTGwP.js +6 -0
- vibe_surf/backend/frontend/assets/pc-case-ChHKP8Bs.js +6 -0
- vibe_surf/backend/frontend/assets/pen-BJrA5W2j.js +6 -0
- vibe_surf/backend/frontend/assets/pen-line-Cn_-SNuM.js +6 -0
- vibe_surf/backend/frontend/assets/pen-off-vpS9creP.js +6 -0
- vibe_surf/backend/frontend/assets/pen-tool-BHi1klDG.js +6 -0
- vibe_surf/backend/frontend/assets/pencil-Wem_VEVg.js +6 -0
- vibe_surf/backend/frontend/assets/pencil-line-CpG7egII.js +6 -0
- vibe_surf/backend/frontend/assets/pencil-off-DNbfjOTs.js +6 -0
- vibe_surf/backend/frontend/assets/pencil-ruler-BQdaeQqI.js +6 -0
- vibe_surf/backend/frontend/assets/pentagon-BNe4mDhm.js +6 -0
- vibe_surf/backend/frontend/assets/percent-CDhexNCT.js +6 -0
- vibe_surf/backend/frontend/assets/person-standing-DxYpZiGV.js +6 -0
- vibe_surf/backend/frontend/assets/philippine-peso-B7FAFSBd.js +6 -0
- vibe_surf/backend/frontend/assets/phone-CTiWkAUx.js +6 -0
- vibe_surf/backend/frontend/assets/phone-call-CWavZZ8W.js +6 -0
- vibe_surf/backend/frontend/assets/phone-forwarded-CLaEebEE.js +6 -0
- vibe_surf/backend/frontend/assets/phone-incoming-Cv2OCBfT.js +6 -0
- vibe_surf/backend/frontend/assets/phone-missed-DNNjfxVz.js +6 -0
- vibe_surf/backend/frontend/assets/phone-off-ClVQWi0g.js +6 -0
- vibe_surf/backend/frontend/assets/phone-outgoing-CY2TxKXl.js +6 -0
- vibe_surf/backend/frontend/assets/pi-DNqBWxfj.js +6 -0
- vibe_surf/backend/frontend/assets/piano-MiPm47Ma.js +6 -0
- vibe_surf/backend/frontend/assets/pickaxe-YqkOBnCJ.js +6 -0
- vibe_surf/backend/frontend/assets/picture-in-picture-2-BIKggEXM.js +6 -0
- vibe_surf/backend/frontend/assets/picture-in-picture-QAMxgJMO.js +6 -0
- vibe_surf/backend/frontend/assets/piggy-bank-DVE6nzj5.js +6 -0
- vibe_surf/backend/frontend/assets/pilcrow-CIhZWZVN.js +6 -0
- vibe_surf/backend/frontend/assets/pilcrow-left-Ca9XTMpA.js +6 -0
- vibe_surf/backend/frontend/assets/pilcrow-right-CLd68jMN.js +6 -0
- vibe_surf/backend/frontend/assets/pill-CBiMEkPj.js +6 -0
- vibe_surf/backend/frontend/assets/pill-bottle-CJ3pejac.js +6 -0
- vibe_surf/backend/frontend/assets/pin-Oo2Sku7X.js +6 -0
- vibe_surf/backend/frontend/assets/pin-off-DG48ZMV_.js +6 -0
- vibe_surf/backend/frontend/assets/pipette-BzvHUOUt.js +6 -0
- vibe_surf/backend/frontend/assets/pizza-B5z39oy-.js +6 -0
- vibe_surf/backend/frontend/assets/plane-eU326jPg.js +6 -0
- vibe_surf/backend/frontend/assets/plane-landing-gxcqSKOA.js +6 -0
- vibe_surf/backend/frontend/assets/plane-takeoff-CFmuOAfX.js +6 -0
- vibe_surf/backend/frontend/assets/play-CaCbaWdR.js +6 -0
- vibe_surf/backend/frontend/assets/plug-2-CaihODHc.js +6 -0
- vibe_surf/backend/frontend/assets/plug-DrN0weqI.js +6 -0
- vibe_surf/backend/frontend/assets/plug-zap-BT2sgwQy.js +6 -0
- vibe_surf/backend/frontend/assets/pocket-DNEPJJmg.js +6 -0
- vibe_surf/backend/frontend/assets/pocket-knife-1CI1aqMD.js +6 -0
- vibe_surf/backend/frontend/assets/podcast-BsGsWn3h.js +6 -0
- vibe_surf/backend/frontend/assets/pointer-B8T5gv-x.js +6 -0
- vibe_surf/backend/frontend/assets/pointer-off-C2DXzg5S.js +6 -0
- vibe_surf/backend/frontend/assets/popcorn-Bi10K8Em.js +6 -0
- vibe_surf/backend/frontend/assets/popsicle-CxLa9bz8.js +6 -0
- vibe_surf/backend/frontend/assets/pound-sterling-BFXPyyYU.js +6 -0
- vibe_surf/backend/frontend/assets/power-BmqAlXVz.js +6 -0
- vibe_surf/backend/frontend/assets/power-off-CT70n2O0.js +6 -0
- vibe_surf/backend/frontend/assets/presentation-DVhaCvt0.js +6 -0
- vibe_surf/backend/frontend/assets/printer-D7NgKQZm.js +6 -0
- vibe_surf/backend/frontend/assets/printer-check-BYDiSYD3.js +6 -0
- vibe_surf/backend/frontend/assets/projector-BFMEAUGw.js +6 -0
- vibe_surf/backend/frontend/assets/proportions-CUypjhWs.js +6 -0
- vibe_surf/backend/frontend/assets/puzzle-lPcRsrCP.js +6 -0
- vibe_surf/backend/frontend/assets/pyramid-bX_YtvHu.js +6 -0
- vibe_surf/backend/frontend/assets/qr-code-CMBq06CH.js +6 -0
- vibe_surf/backend/frontend/assets/quote-BkFwr2wo.js +6 -0
- vibe_surf/backend/frontend/assets/rabbit-CEyfAR1t.js +6 -0
- vibe_surf/backend/frontend/assets/radar-bMcLs_bP.js +6 -0
- vibe_surf/backend/frontend/assets/radiation-NMlxufHZ.js +6 -0
- vibe_surf/backend/frontend/assets/radical-C3CE5pot.js +6 -0
- vibe_surf/backend/frontend/assets/radio-DQMhSWLz.js +6 -0
- vibe_surf/backend/frontend/assets/radio-receiver-Cwtiayz1.js +6 -0
- vibe_surf/backend/frontend/assets/radio-tower-ngCBBDuR.js +6 -0
- vibe_surf/backend/frontend/assets/radius-CB1vpl4-.js +6 -0
- vibe_surf/backend/frontend/assets/rail-symbol-CWT8jn79.js +6 -0
- vibe_surf/backend/frontend/assets/rainbow-eG2Z6xdv.js +6 -0
- vibe_surf/backend/frontend/assets/rat-CjjmSgkE.js +6 -0
- vibe_surf/backend/frontend/assets/ratio-Ck9TZd6C.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-QzIALZKN.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-cent-wAd12yx1.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-euro-BG_rS29_.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-indian-rupee-DlF7wlqh.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-japanese-yen-GDNnE_Bl.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-pound-sterling-CczRTrHu.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-russian-ruble-CP8qhoZV.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-swiss-franc-B1FjnBVT.js +6 -0
- vibe_surf/backend/frontend/assets/receipt-text-Df0EAqK2.js +6 -0
- vibe_surf/backend/frontend/assets/rectangle-ellipsis-BeZ5b8q2.js +6 -0
- vibe_surf/backend/frontend/assets/rectangle-goggles-B0pWs5f6.js +6 -0
- vibe_surf/backend/frontend/assets/rectangle-horizontal-5D8nW5zN.js +6 -0
- vibe_surf/backend/frontend/assets/rectangle-vertical-D6iXTP5O.js +6 -0
- vibe_surf/backend/frontend/assets/recycle-cePWNqck.js +6 -0
- vibe_surf/backend/frontend/assets/redo-2-DflPUgVL.js +6 -0
- vibe_surf/backend/frontend/assets/redo-C8hJqzAq.js +6 -0
- vibe_surf/backend/frontend/assets/redo-dot-JyZC910i.js +6 -0
- vibe_surf/backend/frontend/assets/refresh-ccw-QGOuU93p.js +6 -0
- vibe_surf/backend/frontend/assets/refresh-ccw-dot-BVfOSZg8.js +6 -0
- vibe_surf/backend/frontend/assets/refresh-cw-DttAl3PC.js +6 -0
- vibe_surf/backend/frontend/assets/refresh-cw-off-1m7CD9nm.js +6 -0
- vibe_surf/backend/frontend/assets/refrigerator-BGk6q_hL.js +6 -0
- vibe_surf/backend/frontend/assets/regex-C-txrNUs.js +6 -0
- vibe_surf/backend/frontend/assets/remove-formatting-CVxREpGZ.js +6 -0
- vibe_surf/backend/frontend/assets/repeat-1-ChFj2WK-.js +6 -0
- vibe_surf/backend/frontend/assets/repeat-2-ViBvoa4W.js +6 -0
- vibe_surf/backend/frontend/assets/repeat-GoYG4svo.js +6 -0
- vibe_surf/backend/frontend/assets/replace-GFcv_X_V.js +6 -0
- vibe_surf/backend/frontend/assets/replace-all-zAC7UUp9.js +6 -0
- vibe_surf/backend/frontend/assets/reply-C2IH8Yvz.js +6 -0
- vibe_surf/backend/frontend/assets/reply-all-CXYDFlBb.js +6 -0
- vibe_surf/backend/frontend/assets/rewind-Bmv_DtI_.js +6 -0
- vibe_surf/backend/frontend/assets/ribbon-B4MeTNUc.js +6 -0
- vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
- vibe_surf/backend/frontend/assets/rocket-Ch2Sc43k.js +6 -0
- vibe_surf/backend/frontend/assets/rocking-chair-Pcx0Ex8j.js +6 -0
- vibe_surf/backend/frontend/assets/roller-coaster-DpdZyHU4.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-3d-CAlCCDrS.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-ccw-Dl5IeMD0.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-ccw-key-CbcFcY_X.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-ccw-square-B6dXtMGF.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-cw-D9QBD3w1.js +6 -0
- vibe_surf/backend/frontend/assets/rotate-cw-square-BTb_LCYt.js +6 -0
- vibe_surf/backend/frontend/assets/route-BY8OMdE6.js +6 -0
- vibe_surf/backend/frontend/assets/route-off-DBPZSjij.js +6 -0
- vibe_surf/backend/frontend/assets/router-Cj5pK344.js +6 -0
- vibe_surf/backend/frontend/assets/rows-2-DQikFZXW.js +6 -0
- vibe_surf/backend/frontend/assets/rows-3-CgpwLjBs.js +6 -0
- vibe_surf/backend/frontend/assets/rows-4-DHLpJgeW.js +6 -0
- vibe_surf/backend/frontend/assets/rss-B2J7l-Sb.js +6 -0
- vibe_surf/backend/frontend/assets/ruler-D-fe4o6e.js +6 -0
- vibe_surf/backend/frontend/assets/ruler-dimension-line-COrwkuXi.js +6 -0
- vibe_surf/backend/frontend/assets/russian-ruble-Bk9zdT2J.js +6 -0
- vibe_surf/backend/frontend/assets/sailboat-DMPxVbdm.js +6 -0
- vibe_surf/backend/frontend/assets/salad-D20azVGZ.js +6 -0
- vibe_surf/backend/frontend/assets/sandwich-Z_d-MQ5t.js +6 -0
- vibe_surf/backend/frontend/assets/satellite-7zgZRaOF.js +6 -0
- vibe_surf/backend/frontend/assets/satellite-dish-Cy6FmD_T.js +6 -0
- vibe_surf/backend/frontend/assets/saudi-riyal-C9ZvxnL2.js +6 -0
- vibe_surf/backend/frontend/assets/save-LkAkHS7W.js +6 -0
- vibe_surf/backend/frontend/assets/save-all-D_-zYl71.js +6 -0
- vibe_surf/backend/frontend/assets/save-off-B0KWQYIj.js +6 -0
- vibe_surf/backend/frontend/assets/scale-3d-FnesJ3yp.js +6 -0
- vibe_surf/backend/frontend/assets/scale-CfDNIDpX.js +6 -0
- vibe_surf/backend/frontend/assets/scaling-D7_wGXPp.js +6 -0
- vibe_surf/backend/frontend/assets/scan-CXtftKWt.js +6 -0
- vibe_surf/backend/frontend/assets/scan-barcode-DMzKInA0.js +6 -0
- vibe_surf/backend/frontend/assets/scan-eye-BNOyXXj8.js +6 -0
- vibe_surf/backend/frontend/assets/scan-face-wv0t4zeq.js +6 -0
- vibe_surf/backend/frontend/assets/scan-heart-BeBWR3xV.js +6 -0
- vibe_surf/backend/frontend/assets/scan-line-CvQpOukb.js +6 -0
- vibe_surf/backend/frontend/assets/scan-qr-code-BQ-Oqt9e.js +6 -0
- vibe_surf/backend/frontend/assets/scan-search-DeDxyjP7.js +6 -0
- vibe_surf/backend/frontend/assets/scan-text-Du5B26Lp.js +6 -0
- vibe_surf/backend/frontend/assets/school-XPbcFxvs.js +6 -0
- vibe_surf/backend/frontend/assets/scissors-C82MxyXF.js +6 -0
- vibe_surf/backend/frontend/assets/scissors-line-dashed-BiIj8ZEF.js +6 -0
- vibe_surf/backend/frontend/assets/screen-share-4rpy_bSP.js +6 -0
- vibe_surf/backend/frontend/assets/screen-share-off-DisAsCVo.js +6 -0
- vibe_surf/backend/frontend/assets/scroll-D3FgdMu9.js +6 -0
- vibe_surf/backend/frontend/assets/scroll-text-BolUgv8k.js +6 -0
- vibe_surf/backend/frontend/assets/search-check-BqDsbYzT.js +6 -0
- vibe_surf/backend/frontend/assets/search-code-BAngOAWT.js +6 -0
- vibe_surf/backend/frontend/assets/search-slash-DGpGjVDh.js +6 -0
- vibe_surf/backend/frontend/assets/search-x-hbEhC-Ks.js +6 -0
- vibe_surf/backend/frontend/assets/section-CZdebDRa.js +6 -0
- vibe_surf/backend/frontend/assets/send-BY6RRvoS.js +6 -0
- vibe_surf/backend/frontend/assets/send-horizontal-ByJf1GwO.js +6 -0
- vibe_surf/backend/frontend/assets/send-to-back-CqeJ0x7-.js +6 -0
- vibe_surf/backend/frontend/assets/separator-horizontal-CyHVE869.js +6 -0
- vibe_surf/backend/frontend/assets/separator-vertical-CHEXvAuG.js +6 -0
- vibe_surf/backend/frontend/assets/server-DPj6-qpq.js +6 -0
- vibe_surf/backend/frontend/assets/server-cog-Dc-mlMR8.js +6 -0
- vibe_surf/backend/frontend/assets/server-crash-CXsISMNW.js +6 -0
- vibe_surf/backend/frontend/assets/server-off-Y_lfL7-w.js +6 -0
- vibe_surf/backend/frontend/assets/settings-2-DZ9wvd5i.js +6 -0
- vibe_surf/backend/frontend/assets/settings-DO_W46zj.js +6 -0
- vibe_surf/backend/frontend/assets/shapes-CIsUods8.js +6 -0
- vibe_surf/backend/frontend/assets/share-0y8A7A5E.js +6 -0
- vibe_surf/backend/frontend/assets/share-2-TSy7pnEx.js +6 -0
- vibe_surf/backend/frontend/assets/sheet-DagiH4ve.js +6 -0
- vibe_surf/backend/frontend/assets/shell-4uq5QK2w.js +6 -0
- vibe_surf/backend/frontend/assets/shield-DSmxKeAX.js +6 -0
- vibe_surf/backend/frontend/assets/shield-alert-2BHG6ofb.js +6 -0
- vibe_surf/backend/frontend/assets/shield-ban-BcQOFFCO.js +6 -0
- vibe_surf/backend/frontend/assets/shield-check-IssT1y70.js +6 -0
- vibe_surf/backend/frontend/assets/shield-ellipsis-B_k2GJZe.js +6 -0
- vibe_surf/backend/frontend/assets/shield-half-Ce9mZY66.js +6 -0
- vibe_surf/backend/frontend/assets/shield-minus-Cm9SRYz3.js +6 -0
- vibe_surf/backend/frontend/assets/shield-off-Di-Txcsi.js +6 -0
- vibe_surf/backend/frontend/assets/shield-plus-Cbd8tnos.js +6 -0
- vibe_surf/backend/frontend/assets/shield-question-5hf3zAb8.js +6 -0
- vibe_surf/backend/frontend/assets/shield-user-D2XuthCx.js +6 -0
- vibe_surf/backend/frontend/assets/shield-x-BTJiGLGc.js +6 -0
- vibe_surf/backend/frontend/assets/ship-DkhgC4pB.js +6 -0
- vibe_surf/backend/frontend/assets/ship-wheel-C-7_Y35l.js +6 -0
- vibe_surf/backend/frontend/assets/shirt-vuhl9SGI.js +6 -0
- vibe_surf/backend/frontend/assets/shopping-bag-DvQ2pPfQ.js +6 -0
- vibe_surf/backend/frontend/assets/shopping-basket-D9s56Xw7.js +6 -0
- vibe_surf/backend/frontend/assets/shopping-cart-ZmbJuTVy.js +6 -0
- vibe_surf/backend/frontend/assets/shovel-L2fbM_rD.js +6 -0
- vibe_surf/backend/frontend/assets/shower-head-DE9aHmtW.js +6 -0
- vibe_surf/backend/frontend/assets/shredder-DadDP-UJ.js +6 -0
- vibe_surf/backend/frontend/assets/shrimp-DycqoQZ3.js +6 -0
- vibe_surf/backend/frontend/assets/shrink-B8aylxOx.js +6 -0
- vibe_surf/backend/frontend/assets/shrub-DF1hbXW3.js +6 -0
- vibe_surf/backend/frontend/assets/shuffle-BuIBx3Jr.js +6 -0
- vibe_surf/backend/frontend/assets/sigma-Do2EOGrK.js +6 -0
- vibe_surf/backend/frontend/assets/signal-D4HUxctG.js +6 -0
- vibe_surf/backend/frontend/assets/signal-high-D4XjnPRT.js +6 -0
- vibe_surf/backend/frontend/assets/signal-low-CbpCiGEn.js +6 -0
- vibe_surf/backend/frontend/assets/signal-medium-DenP3lw7.js +6 -0
- vibe_surf/backend/frontend/assets/signal-zero-CHgcs844.js +6 -0
- vibe_surf/backend/frontend/assets/signature-DK8I0wlU.js +6 -0
- vibe_surf/backend/frontend/assets/signpost-1ES-i9fp.js +6 -0
- vibe_surf/backend/frontend/assets/signpost-big-BSozSaes.js +6 -0
- vibe_surf/backend/frontend/assets/siren-wlABVP_H.js +6 -0
- vibe_surf/backend/frontend/assets/skip-back-Bu_s_NAd.js +6 -0
- vibe_surf/backend/frontend/assets/skip-forward-B_5w_2GT.js +6 -0
- vibe_surf/backend/frontend/assets/skull-BEu1YCxD.js +6 -0
- vibe_surf/backend/frontend/assets/slack-D9649ln8.js +6 -0
- vibe_surf/backend/frontend/assets/slash-DojcavQ9.js +6 -0
- vibe_surf/backend/frontend/assets/slice-CRmKxhnX.js +6 -0
- vibe_surf/backend/frontend/assets/sliders-horizontal-B5g_t8uv.js +6 -0
- vibe_surf/backend/frontend/assets/sliders-vertical-CLBL1buf.js +6 -0
- vibe_surf/backend/frontend/assets/smartphone-D-ep_7qQ.js +6 -0
- vibe_surf/backend/frontend/assets/smartphone-charging-CRPRIfJL.js +6 -0
- vibe_surf/backend/frontend/assets/smartphone-nfc-CmXWPjB7.js +6 -0
- vibe_surf/backend/frontend/assets/smile-C8NQBJ3w.js +6 -0
- vibe_surf/backend/frontend/assets/smile-plus-BXiCkryt.js +6 -0
- vibe_surf/backend/frontend/assets/snail-C4InLnJK.js +6 -0
- vibe_surf/backend/frontend/assets/snowflake-CkOWmqpH.js +6 -0
- vibe_surf/backend/frontend/assets/sofa-C5SFUETc.js +6 -0
- vibe_surf/backend/frontend/assets/soup-BPK9i9Mq.js +6 -0
- vibe_surf/backend/frontend/assets/space-B_AibqtW.js +6 -0
- vibe_surf/backend/frontend/assets/spade-DOYQwKmE.js +6 -0
- vibe_surf/backend/frontend/assets/sparkle-Bgy0TYRq.js +6 -0
- vibe_surf/backend/frontend/assets/sparkles-COXnCZbi.js +6 -0
- vibe_surf/backend/frontend/assets/speaker-CaUol58E.js +6 -0
- vibe_surf/backend/frontend/assets/speech-SU2fqOX1.js +6 -0
- vibe_surf/backend/frontend/assets/spell-check-2-C0X3GG0W.js +6 -0
- vibe_surf/backend/frontend/assets/spell-check-BwnI8rNb.js +6 -0
- vibe_surf/backend/frontend/assets/spline-ByNmiFVd.js +6 -0
- vibe_surf/backend/frontend/assets/spline-pointer-B6jrA3VA.js +6 -0
- vibe_surf/backend/frontend/assets/split-uo1Igb0N.js +6 -0
- vibe_surf/backend/frontend/assets/spray-can-D37CFDNB.js +6 -0
- vibe_surf/backend/frontend/assets/sprout-B25Lx6nK.js +6 -0
- vibe_surf/backend/frontend/assets/square-KfK1ngG3.js +6 -0
- vibe_surf/backend/frontend/assets/square-activity-BGQluYc5.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-down-CqlT37VO.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-down-left-CR2Go22d.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-down-right-rGAHLIaS.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-left-CvWu8_9d.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-out-down-left-K0v7hlb0.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-out-down-right-f74Yq8Hb.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-out-up-left-CdBSNScA.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-out-up-right-8PNP-37C.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-right-DZ3-0COG.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-up-CefwAldY.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-up-left-Dt6pY6y2.js +6 -0
- vibe_surf/backend/frontend/assets/square-arrow-up-right-C-bPYXZE.js +6 -0
- vibe_surf/backend/frontend/assets/square-asterisk-BIEu0Wq-.js +6 -0
- vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-DFln2i7A.js +6 -0
- vibe_surf/backend/frontend/assets/square-chart-gantt-VCoGr7j5.js +6 -0
- vibe_surf/backend/frontend/assets/square-check-big-DdTm65g2.js +6 -0
- vibe_surf/backend/frontend/assets/square-check-tJdFPLB4.js +6 -0
- vibe_surf/backend/frontend/assets/square-chevron-down-DV0aFQxC.js +6 -0
- vibe_surf/backend/frontend/assets/square-chevron-left-CdGd5MQB.js +6 -0
- vibe_surf/backend/frontend/assets/square-chevron-right-D_aqBwe_.js +6 -0
- vibe_surf/backend/frontend/assets/square-chevron-up-DBzeLhdp.js +6 -0
- vibe_surf/backend/frontend/assets/square-code-DtSsDKtH.js +6 -0
- vibe_surf/backend/frontend/assets/square-dashed-DSG0Ash0.js +6 -0
- vibe_surf/backend/frontend/assets/square-dashed-bottom-BrkR2d57.js +6 -0
- vibe_surf/backend/frontend/assets/square-dashed-bottom-code-CMTH1TbL.js +6 -0
- vibe_surf/backend/frontend/assets/square-dashed-kanban-961FMGlN.js +6 -0
- vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-BWcK5KqH.js +6 -0
- vibe_surf/backend/frontend/assets/square-divide-B8EfzsLW.js +6 -0
- vibe_surf/backend/frontend/assets/square-dot-CFXkGNxl.js +6 -0
- vibe_surf/backend/frontend/assets/square-equal-DNzUS5Xu.js +6 -0
- vibe_surf/backend/frontend/assets/square-function-mVVWlGqH.js +6 -0
- vibe_surf/backend/frontend/assets/square-kanban-gbxgvYAs.js +6 -0
- vibe_surf/backend/frontend/assets/square-library-LB-mLfoV.js +6 -0
- vibe_surf/backend/frontend/assets/square-m-DR4vWmvF.js +6 -0
- vibe_surf/backend/frontend/assets/square-menu-wrD_3b1X.js +6 -0
- vibe_surf/backend/frontend/assets/square-minus-C8LvWB0i.js +6 -0
- vibe_surf/backend/frontend/assets/square-mouse-pointer-BWIOG0ej.js +6 -0
- vibe_surf/backend/frontend/assets/square-parking-Cwf1smWS.js +6 -0
- vibe_surf/backend/frontend/assets/square-parking-off-B7fLGIII.js +6 -0
- vibe_surf/backend/frontend/assets/square-pen-D-KRx-pf.js +6 -0
- vibe_surf/backend/frontend/assets/square-percent-DEPHZN1U.js +6 -0
- vibe_surf/backend/frontend/assets/square-pi-D3ZoGA8y.js +6 -0
- vibe_surf/backend/frontend/assets/square-pilcrow-CU7h7mYC.js +6 -0
- vibe_surf/backend/frontend/assets/square-play-BJID6hok.js +6 -0
- vibe_surf/backend/frontend/assets/square-plus-B_MofyMZ.js +6 -0
- vibe_surf/backend/frontend/assets/square-power-CnNfm3SK.js +6 -0
- vibe_surf/backend/frontend/assets/square-radical-Bb91fkyO.js +6 -0
- vibe_surf/backend/frontend/assets/square-round-corner-DSNwBkrZ.js +6 -0
- vibe_surf/backend/frontend/assets/square-scissors-Q-Hew_gd.js +6 -0
- vibe_surf/backend/frontend/assets/square-sigma-Dvqecf-2.js +6 -0
- vibe_surf/backend/frontend/assets/square-slash-TFALqbOX.js +6 -0
- vibe_surf/backend/frontend/assets/square-split-horizontal-CbPy5mPi.js +6 -0
- vibe_surf/backend/frontend/assets/square-split-vertical-CwEHVK6t.js +6 -0
- vibe_surf/backend/frontend/assets/square-square-BgBRe8Sy.js +6 -0
- vibe_surf/backend/frontend/assets/square-stack-CQOObCB-.js +6 -0
- vibe_surf/backend/frontend/assets/square-terminal-DTCYsALs.js +6 -0
- vibe_surf/backend/frontend/assets/square-user-BtoHpGAf.js +6 -0
- vibe_surf/backend/frontend/assets/square-user-round-DYhk3lBR.js +6 -0
- vibe_surf/backend/frontend/assets/square-x-BxVfvmxy.js +6 -0
- vibe_surf/backend/frontend/assets/squares-exclude-xFnGRjrW.js +6 -0
- vibe_surf/backend/frontend/assets/squares-intersect-CJ3onkar.js +6 -0
- vibe_surf/backend/frontend/assets/squares-subtract-DHkmEhbq.js +6 -0
- vibe_surf/backend/frontend/assets/squares-unite-VTPchsN_.js +6 -0
- vibe_surf/backend/frontend/assets/squircle-BeRgB4CX.js +6 -0
- vibe_surf/backend/frontend/assets/squirrel-CXpCofHU.js +6 -0
- vibe_surf/backend/frontend/assets/stamp-CBKYJLk-.js +6 -0
- vibe_surf/backend/frontend/assets/star-g394tQMa.js +6 -0
- vibe_surf/backend/frontend/assets/star-half-DMNuOefd.js +6 -0
- vibe_surf/backend/frontend/assets/star-off-D_I13W97.js +6 -0
- vibe_surf/backend/frontend/assets/step-back-Ba3vvS1b.js +6 -0
- vibe_surf/backend/frontend/assets/step-forward-tf6_dmSk.js +6 -0
- vibe_surf/backend/frontend/assets/stethoscope-kEGj4Hk2.js +6 -0
- vibe_surf/backend/frontend/assets/sticker-BMrXBzQi.js +6 -0
- vibe_surf/backend/frontend/assets/sticky-note-B6_-_Vk7.js +6 -0
- vibe_surf/backend/frontend/assets/store-ClCC8VsS.js +6 -0
- vibe_surf/backend/frontend/assets/stretch-horizontal-Dfdn4d_v.js +6 -0
- vibe_surf/backend/frontend/assets/stretch-vertical-G91F9Wl8.js +6 -0
- vibe_surf/backend/frontend/assets/strikethrough-DQ1eMtzE.js +6 -0
- vibe_surf/backend/frontend/assets/subscript-B1v5cruw.js +6 -0
- vibe_surf/backend/frontend/assets/sun-Drd6gJu4.js +6 -0
- vibe_surf/backend/frontend/assets/sun-dim-CSbGIP11.js +6 -0
- vibe_surf/backend/frontend/assets/sun-medium-Cownz0gJ.js +6 -0
- vibe_surf/backend/frontend/assets/sun-moon-BgCDmhlw.js +6 -0
- vibe_surf/backend/frontend/assets/sun-snow-B0xowfvd.js +6 -0
- vibe_surf/backend/frontend/assets/sunrise-DkTO7zEY.js +6 -0
- vibe_surf/backend/frontend/assets/sunset-DkKYK75e.js +6 -0
- vibe_surf/backend/frontend/assets/superscript-CBfgJuGP.js +6 -0
- vibe_surf/backend/frontend/assets/swatch-book-DrsAphD2.js +6 -0
- vibe_surf/backend/frontend/assets/swiss-franc-DAYyAzPc.js +6 -0
- vibe_surf/backend/frontend/assets/switch-camera-C7hTq-mz.js +6 -0
- vibe_surf/backend/frontend/assets/sword-BDecpboX.js +6 -0
- vibe_surf/backend/frontend/assets/swords-BjWa4kCQ.js +6 -0
- vibe_surf/backend/frontend/assets/syringe-ClPPE8yd.js +6 -0
- vibe_surf/backend/frontend/assets/table-2-DIGnaXY7.js +6 -0
- vibe_surf/backend/frontend/assets/table-CHxmnA-B.js +6 -0
- vibe_surf/backend/frontend/assets/table-cells-merge-D1zNRVrG.js +6 -0
- vibe_surf/backend/frontend/assets/table-cells-split-CdEYW1Su.js +6 -0
- vibe_surf/backend/frontend/assets/table-columns-split-JoiaUKz3.js +6 -0
- vibe_surf/backend/frontend/assets/table-of-contents-BSpkdcFt.js +6 -0
- vibe_surf/backend/frontend/assets/table-properties-CmoYqW5E.js +6 -0
- vibe_surf/backend/frontend/assets/table-rows-split-B-06ZKqE.js +6 -0
- vibe_surf/backend/frontend/assets/tablet-YvP4PBQR.js +6 -0
- vibe_surf/backend/frontend/assets/tablet-smartphone-BG7aS4OL.js +6 -0
- vibe_surf/backend/frontend/assets/tablets-BVvSHnaS.js +6 -0
- vibe_surf/backend/frontend/assets/tag-Bs9C2NWs.js +6 -0
- vibe_surf/backend/frontend/assets/tags-DEvGZIIh.js +6 -0
- vibe_surf/backend/frontend/assets/tally-1-BjNjbWUj.js +6 -0
- vibe_surf/backend/frontend/assets/tally-2-Bd0nQcFC.js +6 -0
- vibe_surf/backend/frontend/assets/tally-3-DHrPKvJg.js +6 -0
- vibe_surf/backend/frontend/assets/tally-4-DAUwA2aR.js +6 -0
- vibe_surf/backend/frontend/assets/tally-5-CgAN8Y91.js +6 -0
- vibe_surf/backend/frontend/assets/tangent-CRznV78Q.js +6 -0
- vibe_surf/backend/frontend/assets/target-Bj2MJlO6.js +6 -0
- vibe_surf/backend/frontend/assets/telescope-CyRzgTg4.js +6 -0
- vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
- vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
- vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
- vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
- vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
- vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
- vibe_surf/backend/frontend/assets/tent-D1boPMJ_.js +6 -0
- vibe_surf/backend/frontend/assets/tent-tree-DlMlV5UT.js +6 -0
- vibe_surf/backend/frontend/assets/terminal-ByKLrVXr.js +6 -0
- vibe_surf/backend/frontend/assets/test-tube-DjNpqEvy.js +6 -0
- vibe_surf/backend/frontend/assets/test-tube-diagonal-kvKWvVpD.js +6 -0
- vibe_surf/backend/frontend/assets/test-tubes-BUVuvPYq.js +6 -0
- vibe_surf/backend/frontend/assets/text-BaPUPrRB.js +6 -0
- vibe_surf/backend/frontend/assets/text-cursor-DjiJAhIO.js +6 -0
- vibe_surf/backend/frontend/assets/text-cursor-input-DmFbkVcG.js +6 -0
- vibe_surf/backend/frontend/assets/text-quote-DbZhBhba.js +6 -0
- vibe_surf/backend/frontend/assets/text-search-D81mgubi.js +6 -0
- vibe_surf/backend/frontend/assets/text-select-BCYAwryE.js +6 -0
- vibe_surf/backend/frontend/assets/theater-BF8yCQZ3.js +6 -0
- vibe_surf/backend/frontend/assets/thermometer-Dz0qc69z.js +6 -0
- vibe_surf/backend/frontend/assets/thermometer-snowflake-BZ8Fol5x.js +6 -0
- vibe_surf/backend/frontend/assets/thermometer-sun-DgmdNSSx.js +6 -0
- vibe_surf/backend/frontend/assets/thumbs-down-6gCm1bFP.js +6 -0
- vibe_surf/backend/frontend/assets/thumbs-up-BpkAnOkj.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-CZ6VZCic.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-check-CwERJSTS.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-minus-CJ8o42r1.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-percent-D9mgrzai.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-plus-Bf_MplVa.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-slash-CNukz3dP.js +6 -0
- vibe_surf/backend/frontend/assets/ticket-x-DAGtm4Nf.js +6 -0
- vibe_surf/backend/frontend/assets/tickets-Dlm-Pd3N.js +6 -0
- vibe_surf/backend/frontend/assets/tickets-plane-C4lmqLQq.js +6 -0
- vibe_surf/backend/frontend/assets/timer-0lTpmgXp.js +6 -0
- vibe_surf/backend/frontend/assets/timer-off-BGqRyv1S.js +6 -0
- vibe_surf/backend/frontend/assets/timer-reset-DdhKPXcy.js +6 -0
- vibe_surf/backend/frontend/assets/toggle-left-De2ASTKW.js +6 -0
- vibe_surf/backend/frontend/assets/toggle-right-NfpJqTaq.js +6 -0
- vibe_surf/backend/frontend/assets/toilet-DcJuMKzv.js +6 -0
- vibe_surf/backend/frontend/assets/tornado-BannseS-.js +6 -0
- vibe_surf/backend/frontend/assets/torus-CxsKBH8D.js +6 -0
- vibe_surf/backend/frontend/assets/touchpad-ENZl5mwQ.js +6 -0
- vibe_surf/backend/frontend/assets/touchpad-off-Bs9XazIZ.js +6 -0
- vibe_surf/backend/frontend/assets/tower-control-DOH63Gyd.js +6 -0
- vibe_surf/backend/frontend/assets/toy-brick-CK9szegV.js +6 -0
- vibe_surf/backend/frontend/assets/tractor-C4edkneR.js +6 -0
- vibe_surf/backend/frontend/assets/traffic-cone-B7xJNOdC.js +6 -0
- vibe_surf/backend/frontend/assets/train-front-DPkfW4fH.js +6 -0
- vibe_surf/backend/frontend/assets/train-front-tunnel-Dc6i8ZmW.js +6 -0
- vibe_surf/backend/frontend/assets/train-track-DFRUcPF4.js +6 -0
- vibe_surf/backend/frontend/assets/tram-front-DnSEWr26.js +6 -0
- vibe_surf/backend/frontend/assets/transgender-CwbUC-T0.js +6 -0
- vibe_surf/backend/frontend/assets/trash-DSMPsj08.js +6 -0
- vibe_surf/backend/frontend/assets/tree-deciduous-CMyD2rgs.js +6 -0
- vibe_surf/backend/frontend/assets/tree-palm-ClbWCueR.js +6 -0
- vibe_surf/backend/frontend/assets/tree-pine-CxCMH7RZ.js +6 -0
- vibe_surf/backend/frontend/assets/trees-DeERVvec.js +6 -0
- vibe_surf/backend/frontend/assets/trello-DwQeyG2C.js +6 -0
- vibe_surf/backend/frontend/assets/trending-down-CuQxq0A3.js +6 -0
- vibe_surf/backend/frontend/assets/trending-up-BDSGIJWY.js +6 -0
- vibe_surf/backend/frontend/assets/trending-up-down-CSb_7X-_.js +6 -0
- vibe_surf/backend/frontend/assets/triangle-Cc8gzj2X.js +6 -0
- vibe_surf/backend/frontend/assets/triangle-alert-CzfSlrIp.js +6 -0
- vibe_surf/backend/frontend/assets/triangle-dashed-CSlIdQSl.js +6 -0
- vibe_surf/backend/frontend/assets/triangle-right-BIlbKFDC.js +6 -0
- vibe_surf/backend/frontend/assets/trophy-CIFZUGnX.js +6 -0
- vibe_surf/backend/frontend/assets/truck-Id_mHUOq.js +6 -0
- vibe_surf/backend/frontend/assets/truck-electric-WgMKZnOH.js +6 -0
- vibe_surf/backend/frontend/assets/turtle-0ek05Orw.js +6 -0
- vibe_surf/backend/frontend/assets/tv-DLVWDmzW.js +6 -0
- vibe_surf/backend/frontend/assets/tv-minimal-E0w-pb-R.js +6 -0
- vibe_surf/backend/frontend/assets/tv-minimal-play-C8eivgTI.js +6 -0
- vibe_surf/backend/frontend/assets/twitch-D6updjnG.js +6 -0
- vibe_surf/backend/frontend/assets/twitter-Der_Ih7y.js +6 -0
- vibe_surf/backend/frontend/assets/type-BZeEwGKH.js +6 -0
- vibe_surf/backend/frontend/assets/type-outline-WvuVShMD.js +6 -0
- vibe_surf/backend/frontend/assets/umbrella-BFiE5bFk.js +6 -0
- vibe_surf/backend/frontend/assets/umbrella-off-CQKtt_HS.js +6 -0
- vibe_surf/backend/frontend/assets/underline-eH-gfEgl.js +6 -0
- vibe_surf/backend/frontend/assets/undo-2-CGpVoxxS.js +6 -0
- vibe_surf/backend/frontend/assets/undo-BAkkNYmN.js +6 -0
- vibe_surf/backend/frontend/assets/undo-dot-fxz9ZoUf.js +6 -0
- vibe_surf/backend/frontend/assets/unfold-horizontal-Bz6GASed.js +6 -0
- vibe_surf/backend/frontend/assets/unfold-vertical-DVuawiHD.js +6 -0
- vibe_surf/backend/frontend/assets/ungroup-DZlCBfu8.js +6 -0
- vibe_surf/backend/frontend/assets/university-DQQJPlHM.js +6 -0
- vibe_surf/backend/frontend/assets/unlink-2-Bbf62oJC.js +6 -0
- vibe_surf/backend/frontend/assets/unlink-rRnEYNBH.js +6 -0
- vibe_surf/backend/frontend/assets/unplug-BE6bAKlE.js +6 -0
- vibe_surf/backend/frontend/assets/upload-DgbNBlk6.js +6 -0
- vibe_surf/backend/frontend/assets/usb-BsbOhQkP.js +6 -0
- vibe_surf/backend/frontend/assets/use-post-add-user-s3pEdarP.js +1 -0
- vibe_surf/backend/frontend/assets/user-C7_N9vjw.js +6 -0
- vibe_surf/backend/frontend/assets/user-check-D85AcwGt.js +6 -0
- vibe_surf/backend/frontend/assets/user-cog-BUSZoKWO.js +6 -0
- vibe_surf/backend/frontend/assets/user-lock-DrG5znDk.js +6 -0
- vibe_surf/backend/frontend/assets/user-minus-CjVZSxhC.js +6 -0
- vibe_surf/backend/frontend/assets/user-pen-BllWYNRg.js +6 -0
- vibe_surf/backend/frontend/assets/user-plus-Ct840ALN.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-D6DnOG0E.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-check-Ci15Wbid.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-cog-SrRmnnrG.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-minus-CZKo0fkN.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-pen-DQ88K1gY.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-plus-BtBHwnQH.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-search-mZx8k3ks.js +6 -0
- vibe_surf/backend/frontend/assets/user-round-x-4MvMTCpy.js +6 -0
- vibe_surf/backend/frontend/assets/user-search-CkEhATdm.js +6 -0
- vibe_surf/backend/frontend/assets/user-x-DufZCLiX.js +6 -0
- vibe_surf/backend/frontend/assets/users-DgOAHdb7.js +6 -0
- vibe_surf/backend/frontend/assets/users-round-Bj4Zqvjj.js +6 -0
- vibe_surf/backend/frontend/assets/utensils-CcfYVeqi.js +6 -0
- vibe_surf/backend/frontend/assets/utensils-crossed-Daq7-gMB.js +6 -0
- vibe_surf/backend/frontend/assets/utility-pole-BRYxk_9o.js +6 -0
- vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
- vibe_surf/backend/frontend/assets/variable-CQb_DxMu.js +6 -0
- vibe_surf/backend/frontend/assets/vault-D7etPPcB.js +6 -0
- vibe_surf/backend/frontend/assets/vegan-DhjhKnZM.js +6 -0
- vibe_surf/backend/frontend/assets/venetian-mask-DGDNvUAT.js +6 -0
- vibe_surf/backend/frontend/assets/venus-and-mars-BEW94wvT.js +6 -0
- vibe_surf/backend/frontend/assets/venus-u9B-gdcz.js +6 -0
- vibe_surf/backend/frontend/assets/vibrate-off-GMm1P59r.js +6 -0
- vibe_surf/backend/frontend/assets/vibrate-ztsKQUo9.js +6 -0
- vibe_surf/backend/frontend/assets/video-BRU-KCdj.js +6 -0
- vibe_surf/backend/frontend/assets/video-off-UBhDkXSa.js +6 -0
- vibe_surf/backend/frontend/assets/videotape-BnpqC2PU.js +6 -0
- vibe_surf/backend/frontend/assets/view-SPlXqa2E.js +6 -0
- vibe_surf/backend/frontend/assets/voicemail-CslFUibB.js +6 -0
- vibe_surf/backend/frontend/assets/volleyball-YmSfEYj0.js +6 -0
- vibe_surf/backend/frontend/assets/volume-1-DzSvYJXy.js +6 -0
- vibe_surf/backend/frontend/assets/volume-2-CKYHuo73.js +6 -0
- vibe_surf/backend/frontend/assets/volume-D2WpTg4b.js +6 -0
- vibe_surf/backend/frontend/assets/volume-off-CXmQvaUO.js +6 -0
- vibe_surf/backend/frontend/assets/volume-x-Dl4xNI1D.js +6 -0
- vibe_surf/backend/frontend/assets/vote-DVUnQCxF.js +6 -0
- vibe_surf/backend/frontend/assets/wallet-D9F1dFbt.js +6 -0
- vibe_surf/backend/frontend/assets/wallet-cards-DkIuM2Gu.js +6 -0
- vibe_surf/backend/frontend/assets/wallet-minimal-CUUsXAfP.js +6 -0
- vibe_surf/backend/frontend/assets/wallpaper-BHliG6AQ.js +6 -0
- vibe_surf/backend/frontend/assets/wand-sparkles-BA8i-2_I.js +6 -0
- vibe_surf/backend/frontend/assets/wand-u2EI2dL2.js +6 -0
- vibe_surf/backend/frontend/assets/warehouse-CxDEgPyp.js +6 -0
- vibe_surf/backend/frontend/assets/washing-machine-CYoqAbT7.js +6 -0
- vibe_surf/backend/frontend/assets/watch-eNq5oUsh.js +6 -0
- vibe_surf/backend/frontend/assets/waves-Bs6o5G71.js +6 -0
- vibe_surf/backend/frontend/assets/waves-ladder-0t2iIHt8.js +6 -0
- vibe_surf/backend/frontend/assets/waypoints-DyScJk3j.js +6 -0
- vibe_surf/backend/frontend/assets/webcam-BFZUWYUw.js +6 -0
- vibe_surf/backend/frontend/assets/webhook-CMDaI4yk.js +6 -0
- vibe_surf/backend/frontend/assets/webhook-off-DQzE1oMX.js +6 -0
- vibe_surf/backend/frontend/assets/weight-g0EeSmAx.js +6 -0
- vibe_surf/backend/frontend/assets/wheat-hvVtAPlc.js +6 -0
- vibe_surf/backend/frontend/assets/wheat-off-6d_oRYIW.js +6 -0
- vibe_surf/backend/frontend/assets/whole-word-CMHbYgQ-.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-CRHAo2Lb.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-high-BTElqamm.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-low-BFBJvE2C.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-off-DL1S7f79.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-pen-FkLT18-y.js +6 -0
- vibe_surf/backend/frontend/assets/wifi-zero-koQAfMYN.js +6 -0
- vibe_surf/backend/frontend/assets/wind-CgQDM8yC.js +6 -0
- vibe_surf/backend/frontend/assets/wind-arrow-down-ByQJVZNf.js +6 -0
- vibe_surf/backend/frontend/assets/wine-kngKIYWK.js +6 -0
- vibe_surf/backend/frontend/assets/wine-off-DaVVtkyG.js +6 -0
- vibe_surf/backend/frontend/assets/workflow-BBHA5vqf.js +6 -0
- vibe_surf/backend/frontend/assets/worm-D8rJAL-s.js +6 -0
- vibe_surf/backend/frontend/assets/wrap-text-s4fkGxHY.js +6 -0
- vibe_surf/backend/frontend/assets/wrench-CYzg6B-q.js +6 -0
- vibe_surf/backend/frontend/assets/youtube-BIzMVpJA.js +6 -0
- vibe_surf/backend/frontend/assets/zap-nyAdqt4o.js +6 -0
- vibe_surf/backend/frontend/assets/zap-off-Aii1CEgj.js +6 -0
- vibe_surf/backend/frontend/assets/zoom-in-BNWeSenu.js +6 -0
- vibe_surf/backend/frontend/assets/zoom-out-Bd2vIq2c.js +6 -0
- vibe_surf/backend/frontend/favicon.ico +0 -0
- vibe_surf/backend/frontend/index.html +24 -0
- vibe_surf/backend/frontend/manifest.json +31 -0
- vibe_surf/backend/llm_config.py +3 -1
- vibe_surf/backend/main.py +705 -158
- vibe_surf/backend/shared_state.py +366 -25
- vibe_surf/backend/utils/utils.py +1 -1
- vibe_surf/browser/agent_browser_session.py +19 -65
- vibe_surf/browser/browser_manager.py +5 -4
- vibe_surf/browser/find_page_element.py +1100 -0
- vibe_surf/browser/page_operations.py +222 -0
- vibe_surf/browser/watchdogs/dom_watchdog.py +1 -1
- vibe_surf/chrome_extension/background.js +15 -5
- vibe_surf/chrome_extension/config.js +2 -2
- vibe_surf/chrome_extension/manifest.json +23 -8
- vibe_surf/chrome_extension/scripts/api-client.js +134 -11
- vibe_surf/chrome_extension/scripts/settings-general.js +513 -0
- vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
- vibe_surf/chrome_extension/scripts/settings-manager.js +96 -2707
- vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
- vibe_surf/chrome_extension/scripts/settings-workflow.js +2911 -0
- vibe_surf/chrome_extension/scripts/ui-manager.js +623 -505
- vibe_surf/chrome_extension/scripts/version.js +3 -0
- vibe_surf/chrome_extension/sidepanel.html +511 -6
- vibe_surf/chrome_extension/styles/components.css +146 -0
- vibe_surf/chrome_extension/styles/layout.css +2 -0
- vibe_surf/chrome_extension/styles/settings-integrations.css +35 -17
- vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
- vibe_surf/cli.py +3 -0
- vibe_surf/langflow/__init__.py +0 -0
- vibe_surf/langflow/__main__.py +954 -0
- vibe_surf/langflow/alembic/README +1 -0
- vibe_surf/langflow/alembic/env.py +124 -0
- vibe_surf/langflow/alembic/script.py.mako +31 -0
- vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
- vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
- vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
- vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
- vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
- vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
- vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
- vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
- vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
- vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
- vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
- vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
- vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
- vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
- vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
- vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
- vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
- vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
- vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
- vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
- vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
- vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
- vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
- vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
- vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
- vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
- vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
- vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
- vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
- vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
- vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
- vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
- vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
- vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
- vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
- vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
- vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
- vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
- vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
- vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
- vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
- vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
- vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
- vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
- vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
- vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
- vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
- vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
- vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
- vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
- vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
- vibe_surf/langflow/alembic.ini +113 -0
- vibe_surf/langflow/api/__init__.py +5 -0
- vibe_surf/langflow/api/build.py +557 -0
- vibe_surf/langflow/api/disconnect.py +31 -0
- vibe_surf/langflow/api/health_check_router.py +65 -0
- vibe_surf/langflow/api/limited_background_tasks.py +29 -0
- vibe_surf/langflow/api/log_router.py +103 -0
- vibe_surf/langflow/api/router.py +63 -0
- vibe_surf/langflow/api/schemas.py +14 -0
- vibe_surf/langflow/api/utils.py +381 -0
- vibe_surf/langflow/api/v1/__init__.py +41 -0
- vibe_surf/langflow/api/v1/api_key.py +88 -0
- vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
- vibe_surf/langflow/api/v1/base.py +50 -0
- vibe_surf/langflow/api/v1/callback.py +136 -0
- vibe_surf/langflow/api/v1/chat.py +675 -0
- vibe_surf/langflow/api/v1/endpoints.py +800 -0
- vibe_surf/langflow/api/v1/files.py +193 -0
- vibe_surf/langflow/api/v1/flows.py +579 -0
- vibe_surf/langflow/api/v1/folders.py +95 -0
- vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
- vibe_surf/langflow/api/v1/login.py +166 -0
- vibe_surf/langflow/api/v1/mcp.py +137 -0
- vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
- vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
- vibe_surf/langflow/api/v1/monitor.py +203 -0
- vibe_surf/langflow/api/v1/openai_responses.py +561 -0
- vibe_surf/langflow/api/v1/projects.py +447 -0
- vibe_surf/langflow/api/v1/schemas.py +488 -0
- vibe_surf/langflow/api/v1/starter_projects.py +17 -0
- vibe_surf/langflow/api/v1/store.py +182 -0
- vibe_surf/langflow/api/v1/users.py +146 -0
- vibe_surf/langflow/api/v1/validate.py +48 -0
- vibe_surf/langflow/api/v1/variable.py +106 -0
- vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
- vibe_surf/langflow/api/v2/__init__.py +7 -0
- vibe_surf/langflow/api/v2/files.py +532 -0
- vibe_surf/langflow/api/v2/mcp.py +330 -0
- vibe_surf/langflow/base/__init__.py +0 -0
- vibe_surf/langflow/base/agents/__init__.py +0 -0
- vibe_surf/langflow/base/agents/agent.py +267 -0
- vibe_surf/langflow/base/agents/callback.py +130 -0
- vibe_surf/langflow/base/agents/context.py +109 -0
- vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
- vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
- vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
- vibe_surf/langflow/base/agents/default_prompts.py +23 -0
- vibe_surf/langflow/base/agents/errors.py +15 -0
- vibe_surf/langflow/base/agents/events.py +346 -0
- vibe_surf/langflow/base/agents/utils.py +205 -0
- vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
- vibe_surf/langflow/base/astra_assistants/util.py +171 -0
- vibe_surf/langflow/base/chains/__init__.py +0 -0
- vibe_surf/langflow/base/chains/model.py +19 -0
- vibe_surf/langflow/base/composio/__init__.py +0 -0
- vibe_surf/langflow/base/composio/composio_base.py +1301 -0
- vibe_surf/langflow/base/compressors/__init__.py +0 -0
- vibe_surf/langflow/base/compressors/model.py +60 -0
- vibe_surf/langflow/base/constants.py +46 -0
- vibe_surf/langflow/base/curl/__init__.py +0 -0
- vibe_surf/langflow/base/curl/parse.py +188 -0
- vibe_surf/langflow/base/data/__init__.py +5 -0
- vibe_surf/langflow/base/data/base_file.py +698 -0
- vibe_surf/langflow/base/data/docling_utils.py +280 -0
- vibe_surf/langflow/base/data/utils.py +198 -0
- vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
- vibe_surf/langflow/base/document_transformers/model.py +43 -0
- vibe_surf/langflow/base/embeddings/__init__.py +0 -0
- vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
- vibe_surf/langflow/base/embeddings/model.py +26 -0
- vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
- vibe_surf/langflow/base/flow_processing/utils.py +86 -0
- vibe_surf/langflow/base/huggingface/__init__.py +0 -0
- vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
- vibe_surf/langflow/base/io/__init__.py +0 -0
- vibe_surf/langflow/base/io/chat.py +20 -0
- vibe_surf/langflow/base/io/text.py +22 -0
- vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
- vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
- vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
- vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
- vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
- vibe_surf/langflow/base/langwatch/__init__.py +0 -0
- vibe_surf/langflow/base/langwatch/utils.py +18 -0
- vibe_surf/langflow/base/mcp/__init__.py +0 -0
- vibe_surf/langflow/base/mcp/constants.py +2 -0
- vibe_surf/langflow/base/mcp/util.py +1544 -0
- vibe_surf/langflow/base/memory/__init__.py +0 -0
- vibe_surf/langflow/base/memory/memory.py +49 -0
- vibe_surf/langflow/base/memory/model.py +38 -0
- vibe_surf/langflow/base/models/__init__.py +3 -0
- vibe_surf/langflow/base/models/aiml_constants.py +51 -0
- vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
- vibe_surf/langflow/base/models/aws_constants.py +151 -0
- vibe_surf/langflow/base/models/chat_result.py +76 -0
- vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
- vibe_surf/langflow/base/models/groq_constants.py +134 -0
- vibe_surf/langflow/base/models/model.py +375 -0
- vibe_surf/langflow/base/models/model_input_constants.py +299 -0
- vibe_surf/langflow/base/models/model_metadata.py +41 -0
- vibe_surf/langflow/base/models/model_utils.py +8 -0
- vibe_surf/langflow/base/models/novita_constants.py +35 -0
- vibe_surf/langflow/base/models/ollama_constants.py +49 -0
- vibe_surf/langflow/base/models/openai_constants.py +121 -0
- vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
- vibe_surf/langflow/base/processing/__init__.py +0 -0
- vibe_surf/langflow/base/prompts/__init__.py +0 -0
- vibe_surf/langflow/base/prompts/api_utils.py +224 -0
- vibe_surf/langflow/base/prompts/utils.py +61 -0
- vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
- vibe_surf/langflow/base/textsplitters/model.py +28 -0
- vibe_surf/langflow/base/tools/__init__.py +0 -0
- vibe_surf/langflow/base/tools/base.py +26 -0
- vibe_surf/langflow/base/tools/component_tool.py +324 -0
- vibe_surf/langflow/base/tools/constants.py +49 -0
- vibe_surf/langflow/base/tools/flow_tool.py +131 -0
- vibe_surf/langflow/base/tools/run_flow.py +227 -0
- vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
- vibe_surf/langflow/base/vectorstores/model.py +193 -0
- vibe_surf/langflow/base/vectorstores/utils.py +22 -0
- vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
- vibe_surf/langflow/cli/__init__.py +0 -0
- vibe_surf/langflow/cli/progress.py +233 -0
- vibe_surf/langflow/components/FAISS/__init__.py +34 -0
- vibe_surf/langflow/components/FAISS/faiss.py +111 -0
- vibe_surf/langflow/components/Notion/__init__.py +19 -0
- vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
- vibe_surf/langflow/components/Notion/create_page.py +94 -0
- vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
- vibe_surf/langflow/components/Notion/list_pages.py +122 -0
- vibe_surf/langflow/components/Notion/list_users.py +77 -0
- vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
- vibe_surf/langflow/components/Notion/search.py +111 -0
- vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
- vibe_surf/langflow/components/__init__.py +270 -0
- vibe_surf/langflow/components/_importing.py +37 -0
- vibe_surf/langflow/components/agentql/__init__.py +3 -0
- vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
- vibe_surf/langflow/components/agents/__init__.py +4 -0
- vibe_surf/langflow/components/agents/agent.py +608 -0
- vibe_surf/langflow/components/agents/mcp_component.py +511 -0
- vibe_surf/langflow/components/aiml/__init__.py +37 -0
- vibe_surf/langflow/components/aiml/aiml.py +115 -0
- vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
- vibe_surf/langflow/components/amazon/__init__.py +36 -0
- vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
- vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
- vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
- vibe_surf/langflow/components/anthropic/__init__.py +34 -0
- vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
- vibe_surf/langflow/components/apify/__init__.py +5 -0
- vibe_surf/langflow/components/apify/apify_actor.py +325 -0
- vibe_surf/langflow/components/arxiv/__init__.py +3 -0
- vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
- vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
- vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
- vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
- vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
- vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
- vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
- vibe_surf/langflow/components/azure/__init__.py +37 -0
- vibe_surf/langflow/components/azure/azure_openai.py +95 -0
- vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
- vibe_surf/langflow/components/baidu/__init__.py +32 -0
- vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
- vibe_surf/langflow/components/bing/__init__.py +3 -0
- vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
- vibe_surf/langflow/components/cassandra/__init__.py +40 -0
- vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
- vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
- vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
- vibe_surf/langflow/components/chains/__init__.py +0 -0
- vibe_surf/langflow/components/chroma/__init__.py +34 -0
- vibe_surf/langflow/components/chroma/chroma.py +169 -0
- vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
- vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
- vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
- vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
- vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
- vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
- vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
- vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
- vibe_surf/langflow/components/cohere/__init__.py +40 -0
- vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
- vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
- vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
- vibe_surf/langflow/components/composio/__init__.py +73 -0
- vibe_surf/langflow/components/composio/composio_api.py +279 -0
- vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
- vibe_surf/langflow/components/composio/github_composio.py +11 -0
- vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
- vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
- vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
- vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
- vibe_surf/langflow/components/composio/linear_composio.py +11 -0
- vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
- vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
- vibe_surf/langflow/components/composio/slack_composio.py +11 -0
- vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
- vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
- vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
- vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
- vibe_surf/langflow/components/confluence/__init__.py +3 -0
- vibe_surf/langflow/components/confluence/confluence.py +84 -0
- vibe_surf/langflow/components/couchbase/__init__.py +34 -0
- vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
- vibe_surf/langflow/components/crewai/__init__.py +49 -0
- vibe_surf/langflow/components/crewai/crewai.py +108 -0
- vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
- vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
- vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
- vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
- vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
- vibe_surf/langflow/components/custom_component/__init__.py +34 -0
- vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
- vibe_surf/langflow/components/data/__init__.py +25 -0
- vibe_surf/langflow/components/data/api_request.py +555 -0
- vibe_surf/langflow/components/data/csv_to_data.py +96 -0
- vibe_surf/langflow/components/data/directory.py +113 -0
- vibe_surf/langflow/components/data/file.py +632 -0
- vibe_surf/langflow/components/data/json_to_data.py +99 -0
- vibe_surf/langflow/components/data/news_search.py +164 -0
- vibe_surf/langflow/components/data/rss.py +69 -0
- vibe_surf/langflow/components/data/sql_executor.py +99 -0
- vibe_surf/langflow/components/data/url.py +299 -0
- vibe_surf/langflow/components/data/web_search.py +112 -0
- vibe_surf/langflow/components/data/webhook.py +56 -0
- vibe_surf/langflow/components/datastax/__init__.py +70 -0
- vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
- vibe_surf/langflow/components/datastax/astra_db.py +68 -0
- vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
- vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
- vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
- vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
- vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
- vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
- vibe_surf/langflow/components/datastax/create_thread.py +32 -0
- vibe_surf/langflow/components/datastax/dotenv.py +35 -0
- vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
- vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
- vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
- vibe_surf/langflow/components/datastax/hcd.py +314 -0
- vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
- vibe_surf/langflow/components/datastax/run.py +89 -0
- vibe_surf/langflow/components/deactivated/__init__.py +19 -0
- vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
- vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
- vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
- vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
- vibe_surf/langflow/components/deactivated/embed.py +16 -0
- vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
- vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
- vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
- vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
- vibe_surf/langflow/components/deactivated/message.py +37 -0
- vibe_surf/langflow/components/deactivated/metal.py +54 -0
- vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
- vibe_surf/langflow/components/deactivated/retriever.py +43 -0
- vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
- vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
- vibe_surf/langflow/components/deactivated/split_text.py +63 -0
- vibe_surf/langflow/components/deactivated/store_message.py +24 -0
- vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
- vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
- vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
- vibe_surf/langflow/components/deepseek/__init__.py +34 -0
- vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
- vibe_surf/langflow/components/docling/__init__.py +43 -0
- vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
- vibe_surf/langflow/components/docling/docling_inline.py +249 -0
- vibe_surf/langflow/components/docling/docling_remote.py +192 -0
- vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
- vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
- vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
- vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
- vibe_surf/langflow/components/elastic/__init__.py +37 -0
- vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
- vibe_surf/langflow/components/elastic/opensearch.py +243 -0
- vibe_surf/langflow/components/embeddings/__init__.py +37 -0
- vibe_surf/langflow/components/embeddings/similarity.py +77 -0
- vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
- vibe_surf/langflow/components/exa/__init__.py +3 -0
- vibe_surf/langflow/components/exa/exa_search.py +68 -0
- vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
- vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
- vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
- vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
- vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
- vibe_surf/langflow/components/git/__init__.py +4 -0
- vibe_surf/langflow/components/git/git.py +262 -0
- vibe_surf/langflow/components/git/gitextractor.py +196 -0
- vibe_surf/langflow/components/glean/__init__.py +3 -0
- vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
- vibe_surf/langflow/components/google/__init__.py +17 -0
- vibe_surf/langflow/components/google/gmail.py +193 -0
- vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
- vibe_surf/langflow/components/google/google_drive.py +92 -0
- vibe_surf/langflow/components/google/google_drive_search.py +152 -0
- vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
- vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
- vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
- vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
- vibe_surf/langflow/components/groq/__init__.py +34 -0
- vibe_surf/langflow/components/groq/groq.py +140 -0
- vibe_surf/langflow/components/helpers/__init__.py +52 -0
- vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
- vibe_surf/langflow/components/helpers/create_list.py +40 -0
- vibe_surf/langflow/components/helpers/current_date.py +42 -0
- vibe_surf/langflow/components/helpers/id_generator.py +42 -0
- vibe_surf/langflow/components/helpers/memory.py +253 -0
- vibe_surf/langflow/components/helpers/output_parser.py +46 -0
- vibe_surf/langflow/components/helpers/store_message.py +91 -0
- vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
- vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
- vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
- vibe_surf/langflow/components/huggingface/__init__.py +37 -0
- vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
- vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
- vibe_surf/langflow/components/ibm/__init__.py +34 -0
- vibe_surf/langflow/components/ibm/watsonx.py +203 -0
- vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
- vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
- vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
- vibe_surf/langflow/components/input_output/__init__.py +38 -0
- vibe_surf/langflow/components/input_output/chat.py +99 -0
- vibe_surf/langflow/components/input_output/chat_output.py +169 -0
- vibe_surf/langflow/components/input_output/text.py +27 -0
- vibe_surf/langflow/components/input_output/text_output.py +29 -0
- vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
- vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
- vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
- vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
- vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
- vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
- vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
- vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
- vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
- vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
- vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
- vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
- vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
- vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
- vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
- vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
- vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
- vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
- vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
- vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
- vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
- vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
- vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
- vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
- vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
- vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
- vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
- vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
- vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
- vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
- vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
- vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
- vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
- vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
- vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
- vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
- vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
- vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
- vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
- vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
- vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
- vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
- vibe_surf/langflow/components/langwatch/__init__.py +3 -0
- vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
- vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
- vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
- vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
- vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
- vibe_surf/langflow/components/logic/__init__.py +52 -0
- vibe_surf/langflow/components/logic/conditional_router.py +208 -0
- vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
- vibe_surf/langflow/components/logic/flow_tool.py +111 -0
- vibe_surf/langflow/components/logic/listen.py +29 -0
- vibe_surf/langflow/components/logic/loop.py +125 -0
- vibe_surf/langflow/components/logic/notify.py +88 -0
- vibe_surf/langflow/components/logic/pass_message.py +36 -0
- vibe_surf/langflow/components/logic/run_flow.py +71 -0
- vibe_surf/langflow/components/logic/sub_flow.py +115 -0
- vibe_surf/langflow/components/maritalk/__init__.py +32 -0
- vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
- vibe_surf/langflow/components/mem0/__init__.py +3 -0
- vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
- vibe_surf/langflow/components/milvus/__init__.py +34 -0
- vibe_surf/langflow/components/milvus/milvus.py +115 -0
- vibe_surf/langflow/components/mistral/__init__.py +37 -0
- vibe_surf/langflow/components/mistral/mistral.py +114 -0
- vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
- vibe_surf/langflow/components/models/__init__.py +34 -0
- vibe_surf/langflow/components/models/embedding_model.py +114 -0
- vibe_surf/langflow/components/models/language_model.py +144 -0
- vibe_surf/langflow/components/mongodb/__init__.py +34 -0
- vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
- vibe_surf/langflow/components/needle/__init__.py +3 -0
- vibe_surf/langflow/components/needle/needle.py +104 -0
- vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
- vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
- vibe_surf/langflow/components/novita/__init__.py +32 -0
- vibe_surf/langflow/components/novita/novita.py +130 -0
- vibe_surf/langflow/components/nvidia/__init__.py +57 -0
- vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
- vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
- vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
- vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
- vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
- vibe_surf/langflow/components/olivya/__init__.py +3 -0
- vibe_surf/langflow/components/olivya/olivya.py +116 -0
- vibe_surf/langflow/components/ollama/__init__.py +37 -0
- vibe_surf/langflow/components/ollama/ollama.py +330 -0
- vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
- vibe_surf/langflow/components/openai/__init__.py +37 -0
- vibe_surf/langflow/components/openai/openai.py +100 -0
- vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
- vibe_surf/langflow/components/openrouter/__init__.py +32 -0
- vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
- vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
- vibe_surf/langflow/components/perplexity/__init__.py +34 -0
- vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
- vibe_surf/langflow/components/pgvector/__init__.py +34 -0
- vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
- vibe_surf/langflow/components/pinecone/__init__.py +34 -0
- vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
- vibe_surf/langflow/components/processing/__init__.py +117 -0
- vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
- vibe_surf/langflow/components/processing/batch_run.py +205 -0
- vibe_surf/langflow/components/processing/combine_text.py +40 -0
- vibe_surf/langflow/components/processing/converter.py +150 -0
- vibe_surf/langflow/components/processing/create_data.py +111 -0
- vibe_surf/langflow/components/processing/data_operations.py +438 -0
- vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
- vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
- vibe_surf/langflow/components/processing/extract_key.py +54 -0
- vibe_surf/langflow/components/processing/filter_data.py +43 -0
- vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
- vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
- vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
- vibe_surf/langflow/components/processing/llm_router.py +499 -0
- vibe_surf/langflow/components/processing/merge_data.py +91 -0
- vibe_surf/langflow/components/processing/message_to_data.py +37 -0
- vibe_surf/langflow/components/processing/parse_data.py +71 -0
- vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
- vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
- vibe_surf/langflow/components/processing/parser.py +143 -0
- vibe_surf/langflow/components/processing/prompt.py +67 -0
- vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
- vibe_surf/langflow/components/processing/regex.py +83 -0
- vibe_surf/langflow/components/processing/save_file.py +208 -0
- vibe_surf/langflow/components/processing/select_data.py +49 -0
- vibe_surf/langflow/components/processing/split_text.py +141 -0
- vibe_surf/langflow/components/processing/structured_output.py +206 -0
- vibe_surf/langflow/components/processing/update_data.py +161 -0
- vibe_surf/langflow/components/qdrant/__init__.py +34 -0
- vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
- vibe_surf/langflow/components/redis/__init__.py +37 -0
- vibe_surf/langflow/components/redis/redis.py +89 -0
- vibe_surf/langflow/components/redis/redis_chat.py +43 -0
- vibe_surf/langflow/components/sambanova/__init__.py +32 -0
- vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
- vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
- vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
- vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
- vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
- vibe_surf/langflow/components/searchapi/__init__.py +36 -0
- vibe_surf/langflow/components/searchapi/search.py +79 -0
- vibe_surf/langflow/components/serpapi/__init__.py +3 -0
- vibe_surf/langflow/components/serpapi/serp.py +115 -0
- vibe_surf/langflow/components/serper/__init__.py +3 -0
- vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
- vibe_surf/langflow/components/supabase/__init__.py +37 -0
- vibe_surf/langflow/components/supabase/supabase.py +76 -0
- vibe_surf/langflow/components/tavily/__init__.py +4 -0
- vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
- vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
- vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
- vibe_surf/langflow/components/toolkits/__init__.py +0 -0
- vibe_surf/langflow/components/tools/__init__.py +66 -0
- vibe_surf/langflow/components/tools/calculator.py +104 -0
- vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
- vibe_surf/langflow/components/tools/python_repl.py +98 -0
- vibe_surf/langflow/components/tools/search_api.py +88 -0
- vibe_surf/langflow/components/tools/searxng.py +145 -0
- vibe_surf/langflow/components/tools/serp_api.py +120 -0
- vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
- vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
- vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
- vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
- vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
- vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
- vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
- vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
- vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
- vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
- vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
- vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
- vibe_surf/langflow/components/unstructured/__init__.py +3 -0
- vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
- vibe_surf/langflow/components/upstash/__init__.py +34 -0
- vibe_surf/langflow/components/upstash/upstash.py +124 -0
- vibe_surf/langflow/components/vectara/__init__.py +37 -0
- vibe_surf/langflow/components/vectara/vectara.py +97 -0
- vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
- vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
- vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
- vibe_surf/langflow/components/vertexai/__init__.py +37 -0
- vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
- vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
- vibe_surf/langflow/components/weaviate/__init__.py +34 -0
- vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
- vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
- vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
- vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
- vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
- vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
- vibe_surf/langflow/components/xai/__init__.py +32 -0
- vibe_surf/langflow/components/xai/xai.py +167 -0
- vibe_surf/langflow/components/youtube/__init__.py +52 -0
- vibe_surf/langflow/components/youtube/channel.py +227 -0
- vibe_surf/langflow/components/youtube/comments.py +231 -0
- vibe_surf/langflow/components/youtube/playlist.py +33 -0
- vibe_surf/langflow/components/youtube/search.py +120 -0
- vibe_surf/langflow/components/youtube/trending.py +285 -0
- vibe_surf/langflow/components/youtube/video_details.py +263 -0
- vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
- vibe_surf/langflow/components/zep/__init__.py +3 -0
- vibe_surf/langflow/components/zep/zep.py +45 -0
- vibe_surf/langflow/core/__init__.py +0 -0
- vibe_surf/langflow/core/celery_app.py +11 -0
- vibe_surf/langflow/core/celeryconfig.py +18 -0
- vibe_surf/langflow/custom/__init__.py +4 -0
- vibe_surf/langflow/custom/attributes.py +87 -0
- vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
- vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
- vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
- vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
- vibe_surf/langflow/custom/custom_component/component.py +1742 -0
- vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
- vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
- vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
- vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
- vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
- vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
- vibe_surf/langflow/custom/eval.py +12 -0
- vibe_surf/langflow/custom/schema.py +32 -0
- vibe_surf/langflow/custom/tree_visitor.py +21 -0
- vibe_surf/langflow/custom/utils.py +868 -0
- vibe_surf/langflow/events/__init__.py +0 -0
- vibe_surf/langflow/events/event_manager.py +108 -0
- vibe_surf/langflow/exceptions/__init__.py +0 -0
- vibe_surf/langflow/exceptions/api.py +34 -0
- vibe_surf/langflow/exceptions/component.py +17 -0
- vibe_surf/langflow/exceptions/serialization.py +56 -0
- vibe_surf/langflow/field_typing/__init__.py +91 -0
- vibe_surf/langflow/field_typing/constants.py +137 -0
- vibe_surf/langflow/field_typing/range_spec.py +33 -0
- vibe_surf/langflow/graph/__init__.py +6 -0
- vibe_surf/langflow/graph/edge/__init__.py +0 -0
- vibe_surf/langflow/graph/edge/base.py +277 -0
- vibe_surf/langflow/graph/edge/schema.py +119 -0
- vibe_surf/langflow/graph/edge/utils.py +0 -0
- vibe_surf/langflow/graph/graph/__init__.py +0 -0
- vibe_surf/langflow/graph/graph/ascii.py +202 -0
- vibe_surf/langflow/graph/graph/base.py +2242 -0
- vibe_surf/langflow/graph/graph/constants.py +58 -0
- vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
- vibe_surf/langflow/graph/graph/schema.py +53 -0
- vibe_surf/langflow/graph/graph/state_model.py +66 -0
- vibe_surf/langflow/graph/graph/utils.py +1024 -0
- vibe_surf/langflow/graph/schema.py +75 -0
- vibe_surf/langflow/graph/state/__init__.py +0 -0
- vibe_surf/langflow/graph/state/model.py +237 -0
- vibe_surf/langflow/graph/utils.py +229 -0
- vibe_surf/langflow/graph/vertex/__init__.py +0 -0
- vibe_surf/langflow/graph/vertex/base.py +811 -0
- vibe_surf/langflow/graph/vertex/constants.py +0 -0
- vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
- vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
- vibe_surf/langflow/graph/vertex/schema.py +26 -0
- vibe_surf/langflow/graph/vertex/utils.py +19 -0
- vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
- vibe_surf/langflow/helpers/__init__.py +3 -0
- vibe_surf/langflow/helpers/base_model.py +71 -0
- vibe_surf/langflow/helpers/custom.py +13 -0
- vibe_surf/langflow/helpers/data.py +206 -0
- vibe_surf/langflow/helpers/flow.py +359 -0
- vibe_surf/langflow/helpers/folders.py +26 -0
- vibe_surf/langflow/helpers/user.py +27 -0
- vibe_surf/langflow/initial_setup/__init__.py +0 -0
- vibe_surf/langflow/initial_setup/constants.py +2 -0
- vibe_surf/langflow/initial_setup/load.py +21 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
- vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
- vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
- vibe_surf/langflow/initial_setup/setup.py +1108 -0
- vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
- vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
- vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
- vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
- vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
- vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
- vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
- vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
- vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
- vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
- vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
- vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
- vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
- vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
- vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
- vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
- vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
- vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
- vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
- vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
- vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
- vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1580 -0
- vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
- vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
- vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
- vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
- vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
- vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
- vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
- vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
- vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
- vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
- vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
- vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
- vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
- vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
- vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
- vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
- vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
- vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
- vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
- vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
- vibe_surf/langflow/inputs/__init__.py +68 -0
- vibe_surf/langflow/inputs/constants.py +2 -0
- vibe_surf/langflow/inputs/input_mixin.py +312 -0
- vibe_surf/langflow/inputs/inputs.py +706 -0
- vibe_surf/langflow/inputs/utils.py +32 -0
- vibe_surf/langflow/inputs/validators.py +19 -0
- vibe_surf/langflow/interface/__init__.py +0 -0
- vibe_surf/langflow/interface/components.py +496 -0
- vibe_surf/langflow/interface/importing/__init__.py +5 -0
- vibe_surf/langflow/interface/importing/utils.py +39 -0
- vibe_surf/langflow/interface/initialize/__init__.py +3 -0
- vibe_surf/langflow/interface/initialize/loading.py +200 -0
- vibe_surf/langflow/interface/listing.py +26 -0
- vibe_surf/langflow/interface/run.py +45 -0
- vibe_surf/langflow/interface/utils.py +112 -0
- vibe_surf/langflow/io/__init__.py +63 -0
- vibe_surf/langflow/io/schema.py +304 -0
- vibe_surf/langflow/langflow_launcher.py +51 -0
- vibe_surf/langflow/legacy_custom/__init__.py +0 -0
- vibe_surf/langflow/legacy_custom/customs.py +16 -0
- vibe_surf/langflow/load/__init__.py +12 -0
- vibe_surf/langflow/load/load.py +250 -0
- vibe_surf/langflow/load/utils.py +126 -0
- vibe_surf/langflow/logging/__init__.py +4 -0
- vibe_surf/langflow/logging/logger.py +407 -0
- vibe_surf/langflow/logging/setup.py +16 -0
- vibe_surf/langflow/main.py +550 -0
- vibe_surf/langflow/memory.py +326 -0
- vibe_surf/langflow/middleware.py +59 -0
- vibe_surf/langflow/processing/__init__.py +0 -0
- vibe_surf/langflow/processing/process.py +216 -0
- vibe_surf/langflow/processing/utils.py +25 -0
- vibe_surf/langflow/py.typed +0 -0
- vibe_surf/langflow/schema/__init__.py +6 -0
- vibe_surf/langflow/schema/artifact.py +82 -0
- vibe_surf/langflow/schema/content_block.py +62 -0
- vibe_surf/langflow/schema/content_types.py +91 -0
- vibe_surf/langflow/schema/data.py +306 -0
- vibe_surf/langflow/schema/dataframe.py +206 -0
- vibe_surf/langflow/schema/dotdict.py +71 -0
- vibe_surf/langflow/schema/encoders.py +13 -0
- vibe_surf/langflow/schema/graph.py +47 -0
- vibe_surf/langflow/schema/image.py +128 -0
- vibe_surf/langflow/schema/log.py +33 -0
- vibe_surf/langflow/schema/message.py +483 -0
- vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
- vibe_surf/langflow/schema/playground_events.py +182 -0
- vibe_surf/langflow/schema/properties.py +39 -0
- vibe_surf/langflow/schema/schema.py +121 -0
- vibe_surf/langflow/schema/serialize.py +14 -0
- vibe_surf/langflow/schema/table.py +140 -0
- vibe_surf/langflow/schema/validators.py +114 -0
- vibe_surf/langflow/serialization/__init__.py +3 -0
- vibe_surf/langflow/serialization/constants.py +2 -0
- vibe_surf/langflow/serialization/serialization.py +320 -0
- vibe_surf/langflow/server.py +70 -0
- vibe_surf/langflow/services/__init__.py +4 -0
- vibe_surf/langflow/services/auth/__init__.py +0 -0
- vibe_surf/langflow/services/auth/factory.py +15 -0
- vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
- vibe_surf/langflow/services/auth/service.py +15 -0
- vibe_surf/langflow/services/auth/utils.py +583 -0
- vibe_surf/langflow/services/base.py +28 -0
- vibe_surf/langflow/services/cache/__init__.py +12 -0
- vibe_surf/langflow/services/cache/base.py +183 -0
- vibe_surf/langflow/services/cache/disk.py +95 -0
- vibe_surf/langflow/services/cache/factory.py +44 -0
- vibe_surf/langflow/services/cache/service.py +355 -0
- vibe_surf/langflow/services/cache/utils.py +169 -0
- vibe_surf/langflow/services/chat/__init__.py +0 -0
- vibe_surf/langflow/services/chat/cache.py +150 -0
- vibe_surf/langflow/services/chat/config.py +2 -0
- vibe_surf/langflow/services/chat/factory.py +11 -0
- vibe_surf/langflow/services/chat/schema.py +10 -0
- vibe_surf/langflow/services/chat/service.py +67 -0
- vibe_surf/langflow/services/database/__init__.py +0 -0
- vibe_surf/langflow/services/database/factory.py +21 -0
- vibe_surf/langflow/services/database/models/__init__.py +19 -0
- vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
- vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
- vibe_surf/langflow/services/database/models/base.py +17 -0
- vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
- vibe_surf/langflow/services/database/models/file/crud.py +14 -0
- vibe_surf/langflow/services/database/models/file/model.py +19 -0
- vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/flow/model.py +283 -0
- vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
- vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
- vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
- vibe_surf/langflow/services/database/models/folder/model.py +61 -0
- vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
- vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
- vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/message/crud.py +26 -0
- vibe_surf/langflow/services/database/models/message/model.py +182 -0
- vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
- vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
- vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
- vibe_surf/langflow/services/database/models/user/crud.py +69 -0
- vibe_surf/langflow/services/database/models/user/model.py +82 -0
- vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/variable/model.py +73 -0
- vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
- vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
- vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
- vibe_surf/langflow/services/database/service.py +485 -0
- vibe_surf/langflow/services/database/session.py +62 -0
- vibe_surf/langflow/services/database/utils.py +88 -0
- vibe_surf/langflow/services/deps.py +259 -0
- vibe_surf/langflow/services/factory.py +88 -0
- vibe_surf/langflow/services/flow/__init__.py +0 -0
- vibe_surf/langflow/services/flow/flow_runner.py +265 -0
- vibe_surf/langflow/services/job_queue/__init__.py +0 -0
- vibe_surf/langflow/services/job_queue/factory.py +11 -0
- vibe_surf/langflow/services/job_queue/service.py +328 -0
- vibe_surf/langflow/services/manager.py +149 -0
- vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
- vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
- vibe_surf/langflow/services/mcp_composer/service.py +591 -0
- vibe_surf/langflow/services/schema.py +23 -0
- vibe_surf/langflow/services/session/__init__.py +0 -0
- vibe_surf/langflow/services/session/factory.py +18 -0
- vibe_surf/langflow/services/session/service.py +63 -0
- vibe_surf/langflow/services/session/utils.py +18 -0
- vibe_surf/langflow/services/settings/__init__.py +3 -0
- vibe_surf/langflow/services/settings/auth.py +147 -0
- vibe_surf/langflow/services/settings/base.py +587 -0
- vibe_surf/langflow/services/settings/constants.py +34 -0
- vibe_surf/langflow/services/settings/factory.py +22 -0
- vibe_surf/langflow/services/settings/feature_flags.py +11 -0
- vibe_surf/langflow/services/settings/manager.py +49 -0
- vibe_surf/langflow/services/settings/service.py +32 -0
- vibe_surf/langflow/services/settings/utils.py +40 -0
- vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
- vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
- vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
- vibe_surf/langflow/services/socket/__init__.py +0 -0
- vibe_surf/langflow/services/socket/factory.py +20 -0
- vibe_surf/langflow/services/socket/service.py +84 -0
- vibe_surf/langflow/services/socket/utils.py +112 -0
- vibe_surf/langflow/services/state/__init__.py +0 -0
- vibe_surf/langflow/services/state/factory.py +16 -0
- vibe_surf/langflow/services/state/service.py +82 -0
- vibe_surf/langflow/services/storage/__init__.py +0 -0
- vibe_surf/langflow/services/storage/constants.py +28 -0
- vibe_surf/langflow/services/storage/factory.py +30 -0
- vibe_surf/langflow/services/storage/local.py +127 -0
- vibe_surf/langflow/services/storage/s3.py +105 -0
- vibe_surf/langflow/services/storage/service.py +51 -0
- vibe_surf/langflow/services/storage/utils.py +5 -0
- vibe_surf/langflow/services/store/__init__.py +0 -0
- vibe_surf/langflow/services/store/exceptions.py +25 -0
- vibe_surf/langflow/services/store/factory.py +20 -0
- vibe_surf/langflow/services/store/schema.py +74 -0
- vibe_surf/langflow/services/store/service.py +600 -0
- vibe_surf/langflow/services/store/utils.py +67 -0
- vibe_surf/langflow/services/task/__init__.py +0 -0
- vibe_surf/langflow/services/task/backends/__init__.py +0 -0
- vibe_surf/langflow/services/task/backends/anyio.py +117 -0
- vibe_surf/langflow/services/task/backends/base.py +15 -0
- vibe_surf/langflow/services/task/backends/celery.py +29 -0
- vibe_surf/langflow/services/task/factory.py +14 -0
- vibe_surf/langflow/services/task/service.py +40 -0
- vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
- vibe_surf/langflow/services/task/utils.py +23 -0
- vibe_surf/langflow/services/telemetry/__init__.py +0 -0
- vibe_surf/langflow/services/telemetry/factory.py +20 -0
- vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
- vibe_surf/langflow/services/telemetry/schema.py +45 -0
- vibe_surf/langflow/services/telemetry/service.py +281 -0
- vibe_surf/langflow/services/tracing/__init__.py +0 -0
- vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
- vibe_surf/langflow/services/tracing/base.py +71 -0
- vibe_surf/langflow/services/tracing/factory.py +20 -0
- vibe_surf/langflow/services/tracing/langfuse.py +170 -0
- vibe_surf/langflow/services/tracing/langsmith.py +208 -0
- vibe_surf/langflow/services/tracing/langwatch.py +185 -0
- vibe_surf/langflow/services/tracing/opik.py +235 -0
- vibe_surf/langflow/services/tracing/schema.py +20 -0
- vibe_surf/langflow/services/tracing/service.py +460 -0
- vibe_surf/langflow/services/tracing/traceloop.py +244 -0
- vibe_surf/langflow/services/tracing/utils.py +29 -0
- vibe_surf/langflow/services/utils.py +246 -0
- vibe_surf/langflow/services/variable/__init__.py +0 -0
- vibe_surf/langflow/services/variable/base.py +119 -0
- vibe_surf/langflow/services/variable/constants.py +2 -0
- vibe_surf/langflow/services/variable/factory.py +28 -0
- vibe_surf/langflow/services/variable/kubernetes.py +204 -0
- vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
- vibe_surf/langflow/services/variable/service.py +195 -0
- vibe_surf/langflow/settings.py +12 -0
- vibe_surf/langflow/template/__init__.py +10 -0
- vibe_surf/langflow/template/field/__init__.py +0 -0
- vibe_surf/langflow/template/field/base.py +257 -0
- vibe_surf/langflow/template/field/prompt.py +2 -0
- vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
- vibe_surf/langflow/template/frontend_node/base.py +214 -0
- vibe_surf/langflow/template/frontend_node/constants.py +65 -0
- vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
- vibe_surf/langflow/template/template/__init__.py +0 -0
- vibe_surf/langflow/template/template/base.py +99 -0
- vibe_surf/langflow/template/utils.py +217 -0
- vibe_surf/langflow/type_extraction/__init__.py +0 -0
- vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
- vibe_surf/langflow/utils/__init__.py +0 -0
- vibe_surf/langflow/utils/async_helpers.py +42 -0
- vibe_surf/langflow/utils/component_utils.py +147 -0
- vibe_surf/langflow/utils/compression.py +19 -0
- vibe_surf/langflow/utils/concurrency.py +60 -0
- vibe_surf/langflow/utils/connection_string_parser.py +8 -0
- vibe_surf/langflow/utils/constants.py +205 -0
- vibe_surf/langflow/utils/data_structure.py +212 -0
- vibe_surf/langflow/utils/image.py +102 -0
- vibe_surf/langflow/utils/lazy_load.py +15 -0
- vibe_surf/langflow/utils/migration.py +61 -0
- vibe_surf/langflow/utils/payload.py +84 -0
- vibe_surf/langflow/utils/schemas.py +117 -0
- vibe_surf/langflow/utils/template_validation.py +284 -0
- vibe_surf/langflow/utils/util.py +479 -0
- vibe_surf/langflow/utils/util_strings.py +56 -0
- vibe_surf/langflow/utils/validate.py +489 -0
- vibe_surf/langflow/utils/version.py +72 -0
- vibe_surf/langflow/utils/voice_utils.py +92 -0
- vibe_surf/langflow/worker.py +37 -0
- vibe_surf/logger.py +3 -3
- vibe_surf/telemetry/service.py +2 -1
- vibe_surf/tools/browser_use_tools.py +0 -18
- vibe_surf/tools/composio_client.py +4 -2
- vibe_surf/tools/utils.py +1423 -1
- vibe_surf/tools/vibesurf_tools.py +352 -846
- vibe_surf/tools/views.py +33 -7
- vibe_surf/tools/website_api/douyin/client.py +20 -4
- vibe_surf/tools/website_api/weibo/client.py +13 -82
- vibe_surf/tools/website_api/xhs/client.py +49 -42
- vibe_surf/tools/website_api/xhs/helpers.py +3 -2
- vibe_surf/tools/website_api/youtube/client.py +13 -4
- vibe_surf/workflows/Browser/browser_click_element.py +189 -0
- vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
- vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
- vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
- vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
- vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
- vibe_surf/workflows/Browser/browser_go_back.py +45 -0
- vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
- vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
- vibe_surf/workflows/Browser/browser_html_content.py +73 -0
- vibe_surf/workflows/Browser/browser_input_text.py +169 -0
- vibe_surf/workflows/Browser/browser_navigate.py +50 -0
- vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
- vibe_surf/workflows/Browser/browser_page_info.py +67 -0
- vibe_surf/workflows/Browser/browser_press_key.py +51 -0
- vibe_surf/workflows/Browser/browser_reload.py +44 -0
- vibe_surf/workflows/Browser/browser_scroll.py +99 -0
- vibe_surf/workflows/Browser/browser_search.py +88 -0
- vibe_surf/workflows/Browser/browser_select_options.py +94 -0
- vibe_surf/workflows/Browser/browser_session.py +54 -0
- vibe_surf/workflows/Browser/browser_take_screenshot.py +76 -0
- vibe_surf/workflows/Browser/browser_upload_file.py +178 -0
- vibe_surf/workflows/Browser/browser_wait.py +46 -0
- vibe_surf/workflows/Browser/close_browser_session.py +51 -0
- vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
- vibe_surf/workflows/FileSystem/load_json.py +136 -0
- vibe_surf/workflows/Integrations/composio_api.py +279 -0
- vibe_surf/workflows/Integrations/douyin.py +232 -0
- vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
- vibe_surf/workflows/Integrations/github_composio.py +11 -0
- vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
- vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
- vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
- vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
- vibe_surf/workflows/Integrations/linear_composio.py +11 -0
- vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
- vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
- vibe_surf/workflows/Integrations/slack_composio.py +11 -0
- vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
- vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
- vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
- vibe_surf/workflows/Integrations/weibo.py +244 -0
- vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
- vibe_surf/workflows/Integrations/yahoo.py +103 -0
- vibe_surf/workflows/Integrations/youtube.py +251 -0
- vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
- vibe_surf/workflows/VibeSurf/advanced_search.py +166 -0
- vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
- vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
- vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
- vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
- vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
- vibesurf-0.2.9a2.dist-info/METADATA +406 -0
- vibesurf-0.2.9a2.dist-info/RECORD +2916 -0
- vibesurf-0.1.43.dist-info/METADATA +0 -192
- vibesurf-0.1.43.dist-info/RECORD +0 -128
- {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/WHEEL +0 -0
- {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/entry_points.txt +0 -0
- {vibesurf-0.1.43.dist-info → vibesurf-0.2.9a2.dist-info}/licenses/LICENSE +0 -0
- {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, '"');
|
|
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
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
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 {
|