vibesurf 0.1.26__py3-none-any.whl → 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vibesurf might be problematic. Click here for more details.
- vibe_surf/_version.py +2 -2
- vibe_surf/agents/browser_use_agent.py +15 -353
- vibe_surf/agents/prompts/vibe_surf_prompt.py +35 -1
- vibe_surf/agents/report_writer_agent.py +71 -21
- vibe_surf/agents/vibe_surf_agent.py +232 -120
- vibe_surf/agents/views.py +6 -15
- vibe_surf/backend/api/composio.py +1047 -0
- vibe_surf/backend/api/schedule.py +331 -0
- vibe_surf/backend/api/vibesurf.py +449 -0
- vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
- vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
- vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
- vibe_surf/backend/database/models.py +86 -1
- vibe_surf/backend/database/queries.py +565 -2
- 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 +43 -0
- vibe_surf/backend/main.py +707 -132
- vibe_surf/backend/shared_state.py +482 -26
- vibe_surf/backend/utils/encryption.py +40 -4
- vibe_surf/backend/utils/llm_factory.py +24 -0
- vibe_surf/backend/utils/utils.py +42 -0
- vibe_surf/browser/agen_browser_profile.py +5 -0
- vibe_surf/browser/agent_browser_session.py +219 -113
- 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/action_watchdog.py +1 -83
- vibe_surf/browser/watchdogs/dom_watchdog.py +17 -5
- vibe_surf/chrome_extension/background.js +15 -5
- vibe_surf/chrome_extension/config.js +10 -1
- vibe_surf/chrome_extension/manifest.json +23 -8
- vibe_surf/chrome_extension/scripts/api-client.js +166 -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 +72 -1730
- 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 +777 -506
- vibe_surf/chrome_extension/scripts/version.js +3 -0
- vibe_surf/chrome_extension/sidepanel.html +698 -17
- 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 +945 -0
- vibe_surf/chrome_extension/styles/settings-modal.css +7 -3
- vibe_surf/chrome_extension/styles/settings-responsive.css +37 -5
- vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
- vibe_surf/cli.py +153 -10
- 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/llm/openai_compatible.py +2 -9
- vibe_surf/logger.py +3 -3
- vibe_surf/telemetry/__init__.py +60 -0
- vibe_surf/telemetry/service.py +113 -0
- vibe_surf/telemetry/views.py +188 -0
- vibe_surf/tools/browser_use_tools.py +206 -44
- vibe_surf/tools/composio_client.py +458 -0
- vibe_surf/tools/file_system.py +7 -3
- vibe_surf/tools/mcp_client.py +21 -2
- vibe_surf/tools/utils.py +1540 -0
- vibe_surf/tools/vibesurf_tools.py +980 -975
- vibe_surf/tools/views.py +126 -8
- vibe_surf/tools/website_api/__init__.py +0 -0
- vibe_surf/tools/website_api/douyin/__init__.py +0 -0
- vibe_surf/tools/website_api/douyin/client.py +861 -0
- vibe_surf/tools/website_api/douyin/helpers.py +239 -0
- vibe_surf/tools/website_api/weibo/__init__.py +0 -0
- vibe_surf/tools/website_api/weibo/client.py +777 -0
- vibe_surf/tools/website_api/weibo/helpers.py +997 -0
- vibe_surf/tools/website_api/xhs/__init__.py +0 -0
- vibe_surf/tools/website_api/xhs/client.py +814 -0
- vibe_surf/tools/website_api/xhs/helpers.py +302 -0
- vibe_surf/tools/website_api/youtube/__init__.py +32 -0
- vibe_surf/tools/website_api/youtube/client.py +1267 -0
- vibe_surf/tools/website_api/youtube/helpers.py +420 -0
- vibe_surf/utils.py +34 -0
- 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.6.dist-info/METADATA +406 -0
- vibesurf-0.2.6.dist-info/RECORD +2916 -0
- vibesurf-0.2.6.dist-info/licenses/LICENSE +22 -0
- vibesurf-0.1.26.dist-info/METADATA +0 -126
- vibesurf-0.1.26.dist-info/RECORD +0 -104
- vibesurf-0.1.26.dist-info/licenses/LICENSE +0 -201
- {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/WHEEL +0 -0
- {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/entry_points.txt +0 -0
- {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/top_level.txt +0 -0
|
@@ -18,19 +18,20 @@ 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
|
|
31
31
|
this.initializeManagers();
|
|
32
32
|
this.bindEvents();
|
|
33
33
|
this.setupSessionListeners();
|
|
34
|
+
this.initializeSocialLinks();
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
bindElements() {
|
|
@@ -38,40 +39,41 @@ class VibeSurfUIManager {
|
|
|
38
39
|
this.elements = {
|
|
39
40
|
// Header elements
|
|
40
41
|
newSessionBtn: document.getElementById('new-session-btn'),
|
|
42
|
+
upgradeBtn: document.getElementById('upgrade-btn'),
|
|
41
43
|
historyBtn: document.getElementById('history-btn'),
|
|
42
44
|
settingsBtn: document.getElementById('settings-btn'),
|
|
43
|
-
|
|
45
|
+
|
|
44
46
|
// Session info
|
|
45
47
|
sessionId: document.getElementById('session-id'),
|
|
46
48
|
copySessionBtn: document.getElementById('copy-session-btn'),
|
|
47
|
-
|
|
49
|
+
|
|
48
50
|
// Activity area
|
|
49
51
|
activityLog: document.getElementById('activity-log'),
|
|
50
|
-
|
|
52
|
+
|
|
51
53
|
// Control panel
|
|
52
54
|
controlPanel: document.getElementById('control-panel'),
|
|
53
55
|
cancelBtn: document.getElementById('cancel-btn'),
|
|
54
56
|
resumeBtn: document.getElementById('resume-btn'),
|
|
55
57
|
terminateBtn: document.getElementById('terminate-btn'),
|
|
56
|
-
|
|
58
|
+
|
|
57
59
|
// Input area
|
|
58
60
|
llmProfileSelect: document.getElementById('llm-profile-select'),
|
|
59
61
|
agentModeSelect: document.getElementById('agent-mode-select'),
|
|
60
62
|
taskInput: document.getElementById('task-input'),
|
|
61
63
|
sendBtn: document.getElementById('send-btn'),
|
|
62
64
|
voiceRecordBtn: document.getElementById('voice-record-btn'),
|
|
63
|
-
|
|
65
|
+
|
|
64
66
|
// Tab selector elements
|
|
65
67
|
tabSelectorDropdown: document.getElementById('tab-selector-dropdown'),
|
|
66
68
|
tabSelectorCancel: document.getElementById('tab-selector-cancel'),
|
|
67
69
|
tabSelectorConfirm: document.getElementById('tab-selector-confirm'),
|
|
68
70
|
selectAllTabs: document.getElementById('select-all-tabs'),
|
|
69
71
|
tabOptionsList: document.getElementById('tab-options-list'),
|
|
70
|
-
|
|
72
|
+
|
|
71
73
|
// Skill selector elements
|
|
72
74
|
skillSelectorDropdown: document.getElementById('skill-selector-dropdown'),
|
|
73
75
|
skillOptionsList: document.getElementById('skill-options-list'),
|
|
74
|
-
|
|
76
|
+
|
|
75
77
|
// Loading
|
|
76
78
|
loadingOverlay: document.getElementById('loading-overlay')
|
|
77
79
|
};
|
|
@@ -89,23 +91,23 @@ class VibeSurfUIManager {
|
|
|
89
91
|
try {
|
|
90
92
|
// Initialize modal manager first (others may depend on it)
|
|
91
93
|
this.modalManager = new VibeSurfModalManager();
|
|
92
|
-
|
|
94
|
+
|
|
93
95
|
// Initialize user settings storage
|
|
94
96
|
this.userSettingsStorage = new VibeSurfUserSettingsStorage();
|
|
95
|
-
|
|
97
|
+
|
|
96
98
|
// Initialize voice recorder
|
|
97
99
|
this.voiceRecorder = new VibeSurfVoiceRecorder(this.apiClient);
|
|
98
100
|
this.setupVoiceRecorderCallbacks();
|
|
99
|
-
|
|
101
|
+
|
|
100
102
|
// Initialize other managers
|
|
101
103
|
this.settingsManager = new VibeSurfSettingsManager(this.apiClient);
|
|
102
104
|
this.historyManager = new VibeSurfHistoryManager(this.apiClient);
|
|
103
105
|
this.fileManager = new VibeSurfFileManager(this.sessionManager);
|
|
104
|
-
|
|
106
|
+
|
|
105
107
|
// Set up inter-manager communication
|
|
106
108
|
this.setupManagerEvents();
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
|
|
110
|
+
|
|
109
111
|
} catch (error) {
|
|
110
112
|
console.error('[UIManager] Failed to initialize managers:', error);
|
|
111
113
|
this.showNotification('Failed to initialize UI components', 'error');
|
|
@@ -120,15 +122,15 @@ class VibeSurfUIManager {
|
|
|
120
122
|
if (!this.isRestoringSelections) {
|
|
121
123
|
this.updateLLMProfileSelect();
|
|
122
124
|
}
|
|
123
|
-
|
|
125
|
+
|
|
124
126
|
// Also update voice button state when profiles are updated (ASR profiles might have changed)
|
|
125
127
|
this.updateVoiceButtonState();
|
|
126
128
|
});
|
|
127
|
-
|
|
129
|
+
|
|
128
130
|
this.settingsManager.on('notification', (data) => {
|
|
129
131
|
this.showNotification(data.message, data.type);
|
|
130
132
|
});
|
|
131
|
-
|
|
133
|
+
|
|
132
134
|
this.settingsManager.on('loading', (data) => {
|
|
133
135
|
if (data.hide) {
|
|
134
136
|
this.hideLoading();
|
|
@@ -136,12 +138,12 @@ class VibeSurfUIManager {
|
|
|
136
138
|
this.showLoading(data.message);
|
|
137
139
|
}
|
|
138
140
|
});
|
|
139
|
-
|
|
141
|
+
|
|
140
142
|
this.settingsManager.on('error', (data) => {
|
|
141
143
|
console.error('[UIManager] Settings error:', data.error);
|
|
142
144
|
this.showNotification(data.message || 'Settings error occurred', 'error');
|
|
143
145
|
});
|
|
144
|
-
|
|
146
|
+
|
|
145
147
|
this.settingsManager.on('confirmDeletion', (data) => {
|
|
146
148
|
this.modalManager.showConfirmModal(
|
|
147
149
|
'Delete Profile',
|
|
@@ -156,12 +158,12 @@ class VibeSurfUIManager {
|
|
|
156
158
|
}
|
|
157
159
|
);
|
|
158
160
|
});
|
|
159
|
-
|
|
161
|
+
|
|
160
162
|
this.settingsManager.on('selectNewDefault', (data) => {
|
|
161
163
|
const options = data.otherProfiles.map(profile =>
|
|
162
164
|
`<option value="${profile.profile_name}">${profile.profile_name}</option>`
|
|
163
165
|
).join('');
|
|
164
|
-
|
|
166
|
+
|
|
165
167
|
const modalData = this.modalManager.createModal(`
|
|
166
168
|
<div class="select-default-modal">
|
|
167
169
|
<p>You are deleting the default LLM profile. Please select a new default profile:</p>
|
|
@@ -176,11 +178,11 @@ class VibeSurfUIManager {
|
|
|
176
178
|
`, {
|
|
177
179
|
title: 'Select New Default Profile'
|
|
178
180
|
});
|
|
179
|
-
|
|
181
|
+
|
|
180
182
|
const select = document.getElementById('new-default-select');
|
|
181
183
|
const confirmBtn = modalData.modal.querySelector('.confirm-btn');
|
|
182
184
|
const cancelBtn = modalData.modal.querySelector('.cancel-btn');
|
|
183
|
-
|
|
185
|
+
|
|
184
186
|
confirmBtn.addEventListener('click', () => {
|
|
185
187
|
const newDefaultId = select.value;
|
|
186
188
|
if (newDefaultId && data.callback) {
|
|
@@ -188,17 +190,17 @@ class VibeSurfUIManager {
|
|
|
188
190
|
}
|
|
189
191
|
modalData.close();
|
|
190
192
|
});
|
|
191
|
-
|
|
193
|
+
|
|
192
194
|
cancelBtn.addEventListener('click', () => {
|
|
193
195
|
modalData.close();
|
|
194
196
|
});
|
|
195
197
|
});
|
|
196
|
-
|
|
198
|
+
|
|
197
199
|
// History Manager Events
|
|
198
200
|
this.historyManager.on('loadSession', (data) => {
|
|
199
201
|
this.loadSession(data.sessionId);
|
|
200
202
|
});
|
|
201
|
-
|
|
203
|
+
|
|
202
204
|
this.historyManager.on('loading', (data) => {
|
|
203
205
|
if (data.hide) {
|
|
204
206
|
this.hideLoading();
|
|
@@ -206,16 +208,16 @@ class VibeSurfUIManager {
|
|
|
206
208
|
this.showLoading(data.message);
|
|
207
209
|
}
|
|
208
210
|
});
|
|
209
|
-
|
|
211
|
+
|
|
210
212
|
this.historyManager.on('notification', (data) => {
|
|
211
213
|
this.showNotification(data.message, data.type);
|
|
212
214
|
});
|
|
213
|
-
|
|
215
|
+
|
|
214
216
|
this.historyManager.on('error', (data) => {
|
|
215
217
|
console.error('[UIManager] History error:', data.error);
|
|
216
218
|
this.showNotification(data.message || 'History error occurred', 'error');
|
|
217
219
|
});
|
|
218
|
-
|
|
220
|
+
|
|
219
221
|
// File Manager Events
|
|
220
222
|
this.fileManager.on('loading', (data) => {
|
|
221
223
|
if (data.hide) {
|
|
@@ -224,16 +226,16 @@ class VibeSurfUIManager {
|
|
|
224
226
|
this.showLoading(data.message);
|
|
225
227
|
}
|
|
226
228
|
});
|
|
227
|
-
|
|
229
|
+
|
|
228
230
|
this.fileManager.on('notification', (data) => {
|
|
229
231
|
this.showNotification(data.message, data.type);
|
|
230
232
|
});
|
|
231
|
-
|
|
233
|
+
|
|
232
234
|
this.fileManager.on('error', (data) => {
|
|
233
235
|
console.error('[UIManager] File error:', data.error);
|
|
234
236
|
this.showNotification(data.message || 'File error occurred', 'error');
|
|
235
237
|
});
|
|
236
|
-
|
|
238
|
+
|
|
237
239
|
// Modal Manager Events (if needed for future extensions)
|
|
238
240
|
this.modalManager.on('modalClosed', (data) => {
|
|
239
241
|
// Handle modal close events if needed
|
|
@@ -276,7 +278,7 @@ class VibeSurfUIManager {
|
|
|
276
278
|
this.elements.voiceRecordBtn.classList.remove('recording');
|
|
277
279
|
this.elements.voiceRecordBtn.setAttribute('title', 'Voice Input');
|
|
278
280
|
this.elements.voiceRecordBtn.setAttribute('data-tooltip', 'Click to start voice recording');
|
|
279
|
-
|
|
281
|
+
|
|
280
282
|
// Clear duration display
|
|
281
283
|
this.updateRecordingDuration('0:00', 0);
|
|
282
284
|
}
|
|
@@ -288,7 +290,7 @@ class VibeSurfUIManager {
|
|
|
288
290
|
if (this.elements.voiceRecordBtn) {
|
|
289
291
|
// Update the tooltip with duration
|
|
290
292
|
this.elements.voiceRecordBtn.setAttribute('data-tooltip', `Recording... ${formattedDuration} - Click to stop`);
|
|
291
|
-
|
|
293
|
+
|
|
292
294
|
// Create or update duration display element
|
|
293
295
|
let durationElement = this.elements.voiceRecordBtn.querySelector('.recording-duration');
|
|
294
296
|
if (!durationElement) {
|
|
@@ -296,7 +298,7 @@ class VibeSurfUIManager {
|
|
|
296
298
|
durationElement.className = 'recording-duration';
|
|
297
299
|
this.elements.voiceRecordBtn.appendChild(durationElement);
|
|
298
300
|
}
|
|
299
|
-
|
|
301
|
+
|
|
300
302
|
durationElement.textContent = formattedDuration;
|
|
301
303
|
}
|
|
302
304
|
}
|
|
@@ -311,29 +313,29 @@ class VibeSurfUIManager {
|
|
|
311
313
|
// Insert transcribed text into the input field
|
|
312
314
|
const currentValue = this.elements.taskInput.value;
|
|
313
315
|
const cursorPosition = this.elements.taskInput.selectionStart;
|
|
314
|
-
|
|
316
|
+
|
|
315
317
|
// Insert at cursor position or append to end
|
|
316
318
|
const beforeCursor = currentValue.substring(0, cursorPosition);
|
|
317
319
|
const afterCursor = currentValue.substring(cursorPosition);
|
|
318
320
|
const newValue = beforeCursor + transcribedText + afterCursor;
|
|
319
|
-
|
|
321
|
+
|
|
320
322
|
this.elements.taskInput.value = newValue;
|
|
321
|
-
|
|
323
|
+
|
|
322
324
|
// Trigger input change event for validation and auto-resize
|
|
323
325
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
324
|
-
|
|
326
|
+
|
|
325
327
|
// Set cursor position after the inserted text
|
|
326
328
|
const newCursorPosition = cursorPosition + transcribedText.length;
|
|
327
329
|
this.elements.taskInput.setSelectionRange(newCursorPosition, newCursorPosition);
|
|
328
330
|
this.elements.taskInput.focus();
|
|
329
|
-
|
|
331
|
+
|
|
330
332
|
this.showNotification('Voice transcription completed', 'success');
|
|
331
333
|
}
|
|
332
334
|
|
|
333
335
|
// Handle transcription errors
|
|
334
336
|
handleTranscriptionError(errorMessage, errorType) {
|
|
335
337
|
let userMessage = 'Voice transcription failed';
|
|
336
|
-
|
|
338
|
+
|
|
337
339
|
if (errorType === 'recording') {
|
|
338
340
|
userMessage = `Recording failed: ${errorMessage}`;
|
|
339
341
|
} else if (errorType === 'transcription') {
|
|
@@ -343,45 +345,46 @@ class VibeSurfUIManager {
|
|
|
343
345
|
userMessage = `Transcription failed: ${errorMessage}`;
|
|
344
346
|
}
|
|
345
347
|
}
|
|
346
|
-
|
|
348
|
+
|
|
347
349
|
this.showNotification(userMessage, 'error');
|
|
348
350
|
}
|
|
349
351
|
|
|
350
352
|
bindEvents() {
|
|
351
353
|
// Header buttons
|
|
352
354
|
this.elements.newSessionBtn?.addEventListener('click', this.handleNewSession.bind(this));
|
|
355
|
+
this.elements.upgradeBtn?.addEventListener('click', this.handleUpgrade.bind(this));
|
|
353
356
|
this.elements.historyBtn?.addEventListener('click', this.handleShowHistory.bind(this));
|
|
354
357
|
this.elements.settingsBtn?.addEventListener('click', this.handleShowSettings.bind(this));
|
|
355
|
-
|
|
358
|
+
|
|
356
359
|
// Session controls
|
|
357
360
|
this.elements.copySessionBtn?.addEventListener('click', this.handleCopySession.bind(this));
|
|
358
|
-
|
|
361
|
+
|
|
359
362
|
// Task controls
|
|
360
363
|
this.elements.cancelBtn?.addEventListener('click', this.handleCancelTask.bind(this));
|
|
361
364
|
this.elements.resumeBtn?.addEventListener('click', this.handleResumeTask.bind(this));
|
|
362
365
|
this.elements.terminateBtn?.addEventListener('click', this.handleTerminateTask.bind(this));
|
|
363
|
-
|
|
366
|
+
|
|
364
367
|
// Input handling
|
|
365
368
|
this.elements.sendBtn?.addEventListener('click', this.handleSendTask.bind(this));
|
|
366
369
|
this.elements.voiceRecordBtn?.addEventListener('click', this.handleVoiceRecord.bind(this));
|
|
367
|
-
|
|
370
|
+
|
|
368
371
|
// Task input handling
|
|
369
372
|
this.elements.taskInput?.addEventListener('keydown', this.handleTaskInputKeydown.bind(this));
|
|
370
373
|
this.elements.taskInput?.addEventListener('input', this.handleTaskInputChange.bind(this));
|
|
371
|
-
|
|
374
|
+
|
|
372
375
|
// LLM profile selection handling
|
|
373
376
|
this.elements.llmProfileSelect?.addEventListener('change', this.handleLlmProfileChange.bind(this));
|
|
374
|
-
|
|
377
|
+
|
|
375
378
|
// Agent mode selection handling
|
|
376
379
|
this.elements.agentModeSelect?.addEventListener('change', this.handleAgentModeChange.bind(this));
|
|
377
|
-
|
|
380
|
+
|
|
378
381
|
// Initialize auto-resize for textarea
|
|
379
382
|
if (this.elements.taskInput) {
|
|
380
383
|
this.autoResizeTextarea(this.elements.taskInput);
|
|
381
384
|
// Set initial send button state
|
|
382
385
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
383
386
|
}
|
|
384
|
-
|
|
387
|
+
|
|
385
388
|
// Bind initial task suggestions if present
|
|
386
389
|
this.bindTaskSuggestionEvents();
|
|
387
390
|
}
|
|
@@ -400,7 +403,7 @@ class VibeSurfUIManager {
|
|
|
400
403
|
this.sessionManager.on('pollingStopped', this.handlePollingStopped.bind(this));
|
|
401
404
|
this.sessionManager.on('sessionError', this.handleSessionError.bind(this));
|
|
402
405
|
this.sessionManager.on('taskError', this.handleTaskError.bind(this));
|
|
403
|
-
|
|
406
|
+
|
|
404
407
|
// Start periodic task status check
|
|
405
408
|
this.startTaskStatusMonitoring();
|
|
406
409
|
}
|
|
@@ -416,11 +419,11 @@ class VibeSurfUIManager {
|
|
|
416
419
|
handleSessionLoaded(data) {
|
|
417
420
|
// Update session display
|
|
418
421
|
this.updateSessionDisplay(data.sessionId);
|
|
419
|
-
|
|
422
|
+
|
|
420
423
|
// Load and display activity logs
|
|
421
424
|
const activityLogs = this.sessionManager.getActivityLogs();
|
|
422
425
|
this.displayActivityLogs(activityLogs);
|
|
423
|
-
|
|
426
|
+
|
|
424
427
|
// Update control panel
|
|
425
428
|
const taskStatus = this.sessionManager.getTaskStatus();
|
|
426
429
|
if (taskStatus) {
|
|
@@ -429,7 +432,7 @@ class VibeSurfUIManager {
|
|
|
429
432
|
}
|
|
430
433
|
|
|
431
434
|
handleTaskSubmitted(data) {
|
|
432
|
-
|
|
435
|
+
|
|
433
436
|
this.updateControlPanel('running');
|
|
434
437
|
this.clearTaskInput();
|
|
435
438
|
}
|
|
@@ -454,26 +457,26 @@ class VibeSurfUIManager {
|
|
|
454
457
|
}
|
|
455
458
|
|
|
456
459
|
handleTaskCompleted(data) {
|
|
457
|
-
|
|
458
|
-
|
|
460
|
+
|
|
461
|
+
|
|
459
462
|
const message = data.status === 'done' ? 'Task completed successfully!' : 'Task completed with errors';
|
|
460
463
|
const type = data.status === 'done' ? 'success' : 'error';
|
|
461
|
-
|
|
464
|
+
|
|
462
465
|
// Check if we need to respect minimum visibility period
|
|
463
466
|
if (this.controlPanelMinVisibilityActive) {
|
|
464
|
-
|
|
467
|
+
|
|
465
468
|
const remainingTime = 1000;
|
|
466
469
|
setTimeout(() => {
|
|
467
|
-
|
|
470
|
+
|
|
468
471
|
this.updateControlPanel('ready');
|
|
469
472
|
}, remainingTime);
|
|
470
473
|
} else {
|
|
471
|
-
|
|
474
|
+
|
|
472
475
|
this.updateControlPanel('ready');
|
|
473
476
|
}
|
|
474
|
-
|
|
477
|
+
|
|
475
478
|
this.showNotification(message, type);
|
|
476
|
-
|
|
479
|
+
|
|
477
480
|
// Clear uploaded files when task is completed
|
|
478
481
|
this.fileManager.clearUploadedFiles();
|
|
479
482
|
}
|
|
@@ -498,17 +501,17 @@ class VibeSurfUIManager {
|
|
|
498
501
|
|
|
499
502
|
handleTaskError(data) {
|
|
500
503
|
console.error('[UIManager] Task error:', data.error);
|
|
501
|
-
|
|
502
|
-
|
|
504
|
+
|
|
505
|
+
|
|
503
506
|
// Check if this is an LLM connection failure
|
|
504
507
|
if (data.error && typeof data.error === 'object' && data.error.error === 'llm_connection_failed') {
|
|
505
|
-
|
|
508
|
+
|
|
506
509
|
// Show LLM connection failed modal instead of generic notification
|
|
507
510
|
this.showLLMConnectionFailedModal(data.error);
|
|
508
511
|
this.updateControlPanel('ready'); // Reset UI since task failed to start
|
|
509
512
|
return;
|
|
510
513
|
} else if (data.error && typeof data.error === 'string' && data.error.includes('llm_connection_failed')) {
|
|
511
|
-
|
|
514
|
+
|
|
512
515
|
// Handle case where error is a string containing the error type
|
|
513
516
|
this.showLLMConnectionFailedModal({
|
|
514
517
|
message: data.error,
|
|
@@ -517,20 +520,20 @@ class VibeSurfUIManager {
|
|
|
517
520
|
this.updateControlPanel('ready'); // Reset UI since task failed to start
|
|
518
521
|
return;
|
|
519
522
|
}
|
|
520
|
-
|
|
523
|
+
|
|
521
524
|
// Default error handling for other types of errors
|
|
522
525
|
this.showNotification(`Task error: ${data.error}`, 'error');
|
|
523
|
-
|
|
526
|
+
|
|
524
527
|
this.updateControlPanel('error');
|
|
525
|
-
|
|
528
|
+
|
|
526
529
|
// Optional: Verify task status after a delay
|
|
527
530
|
setTimeout(() => {
|
|
528
531
|
this.checkTaskStatus().then(status => {
|
|
529
532
|
if (!status.isRunning) {
|
|
530
|
-
|
|
533
|
+
|
|
531
534
|
this.updateControlPanel('ready');
|
|
532
535
|
} else {
|
|
533
|
-
|
|
536
|
+
|
|
534
537
|
}
|
|
535
538
|
}).catch(err => {
|
|
536
539
|
console.warn('[UIManager] Could not verify task status after error:', err);
|
|
@@ -543,15 +546,15 @@ class VibeSurfUIManager {
|
|
|
543
546
|
try {
|
|
544
547
|
const statusCheck = await this.apiClient.checkTaskRunning();
|
|
545
548
|
const wasRunning = this.state.isTaskRunning;
|
|
546
|
-
|
|
549
|
+
|
|
547
550
|
this.state.isTaskRunning = statusCheck.isRunning;
|
|
548
551
|
this.state.taskInfo = statusCheck.taskInfo;
|
|
549
|
-
|
|
552
|
+
|
|
550
553
|
// Update UI state when task status changes
|
|
551
554
|
if (wasRunning !== statusCheck.isRunning) {
|
|
552
555
|
this.updateUIForTaskStatus(statusCheck.isRunning);
|
|
553
556
|
}
|
|
554
|
-
|
|
557
|
+
|
|
555
558
|
return statusCheck;
|
|
556
559
|
} catch (error) {
|
|
557
560
|
console.error('[UIManager] Failed to check task status:', error);
|
|
@@ -576,7 +579,7 @@ class VibeSurfUIManager {
|
|
|
576
579
|
updateUIForTaskStatus(isRunning) {
|
|
577
580
|
const taskStatus = this.sessionManager.getTaskStatus();
|
|
578
581
|
const isPaused = taskStatus === 'paused';
|
|
579
|
-
|
|
582
|
+
|
|
580
583
|
// Disable/enable input elements based on task status
|
|
581
584
|
if (this.elements.taskInput) {
|
|
582
585
|
// Allow input when paused or not running
|
|
@@ -589,22 +592,22 @@ class VibeSurfUIManager {
|
|
|
589
592
|
this.elements.taskInput.placeholder = 'Ask anything (/ for skills, @ to specify tab)';
|
|
590
593
|
}
|
|
591
594
|
}
|
|
592
|
-
|
|
595
|
+
|
|
593
596
|
if (this.elements.sendBtn) {
|
|
594
597
|
// Enable send button when paused or when can submit new task
|
|
595
598
|
this.elements.sendBtn.disabled = (isRunning && !isPaused) || (!isPaused && !this.canSubmitTask()) || (isPaused && !this.canAddNewTask());
|
|
596
599
|
}
|
|
597
|
-
|
|
600
|
+
|
|
598
601
|
if (this.elements.llmProfileSelect) {
|
|
599
602
|
// Allow LLM profile change only when not running
|
|
600
603
|
this.elements.llmProfileSelect.disabled = isRunning && !isPaused;
|
|
601
604
|
}
|
|
602
|
-
|
|
605
|
+
|
|
603
606
|
if (this.elements.agentModeSelect) {
|
|
604
607
|
// Allow agent mode change only when not running
|
|
605
608
|
this.elements.agentModeSelect.disabled = isRunning && !isPaused;
|
|
606
609
|
}
|
|
607
|
-
|
|
610
|
+
|
|
608
611
|
// Update voice record button state - disable during task execution unless paused
|
|
609
612
|
if (this.elements.voiceRecordBtn) {
|
|
610
613
|
const shouldDisableVoice = isRunning && !isPaused;
|
|
@@ -621,17 +624,17 @@ class VibeSurfUIManager {
|
|
|
621
624
|
}
|
|
622
625
|
}
|
|
623
626
|
}
|
|
624
|
-
|
|
627
|
+
|
|
625
628
|
// Update file manager state - keep disabled during pause (as per requirement)
|
|
626
629
|
this.fileManager.setEnabled(!isRunning);
|
|
627
|
-
|
|
630
|
+
|
|
628
631
|
// Also disable header buttons when task is running (but not when paused)
|
|
629
632
|
const headerButtons = [
|
|
630
633
|
this.elements.newSessionBtn,
|
|
631
634
|
this.elements.historyBtn,
|
|
632
635
|
this.elements.settingsBtn
|
|
633
636
|
];
|
|
634
|
-
|
|
637
|
+
|
|
635
638
|
headerButtons.forEach(button => {
|
|
636
639
|
if (button) {
|
|
637
640
|
const shouldDisable = isRunning && !isPaused;
|
|
@@ -648,45 +651,45 @@ class VibeSurfUIManager {
|
|
|
648
651
|
}
|
|
649
652
|
|
|
650
653
|
forceUpdateUIForPausedState() {
|
|
651
|
-
|
|
654
|
+
|
|
652
655
|
// Enable input during pause
|
|
653
656
|
if (this.elements.taskInput) {
|
|
654
657
|
this.elements.taskInput.disabled = false;
|
|
655
658
|
this.elements.taskInput.placeholder = 'Add additional information or guidance...';
|
|
656
659
|
}
|
|
657
|
-
|
|
660
|
+
|
|
658
661
|
if (this.elements.sendBtn) {
|
|
659
662
|
const hasText = this.elements.taskInput?.value.trim().length > 0;
|
|
660
663
|
this.elements.sendBtn.disabled = !hasText;
|
|
661
664
|
}
|
|
662
|
-
|
|
665
|
+
|
|
663
666
|
// Enable voice record button during pause
|
|
664
667
|
if (this.elements.voiceRecordBtn) {
|
|
665
668
|
this.elements.voiceRecordBtn.disabled = false;
|
|
666
669
|
this.elements.voiceRecordBtn.classList.remove('task-running-disabled');
|
|
667
670
|
this.elements.voiceRecordBtn.setAttribute('title', 'Click to start voice recording');
|
|
668
671
|
}
|
|
669
|
-
|
|
672
|
+
|
|
670
673
|
// Keep LLM profile disabled during pause (user doesn't need to change it)
|
|
671
674
|
if (this.elements.llmProfileSelect) {
|
|
672
675
|
this.elements.llmProfileSelect.disabled = true;
|
|
673
676
|
}
|
|
674
|
-
|
|
677
|
+
|
|
675
678
|
// Keep agent mode disabled during pause (user doesn't need to change it)
|
|
676
679
|
if (this.elements.agentModeSelect) {
|
|
677
680
|
this.elements.agentModeSelect.disabled = true;
|
|
678
681
|
}
|
|
679
|
-
|
|
682
|
+
|
|
680
683
|
// Keep file manager disabled during pause
|
|
681
684
|
this.fileManager.setEnabled(false);
|
|
682
|
-
|
|
685
|
+
|
|
683
686
|
// Keep header buttons disabled during pause (only input, send, and voice should be available)
|
|
684
687
|
const headerButtons = [
|
|
685
688
|
this.elements.newSessionBtn,
|
|
686
689
|
this.elements.historyBtn,
|
|
687
690
|
this.elements.settingsBtn
|
|
688
691
|
];
|
|
689
|
-
|
|
692
|
+
|
|
690
693
|
headerButtons.forEach(button => {
|
|
691
694
|
if (button) {
|
|
692
695
|
button.disabled = true;
|
|
@@ -697,43 +700,43 @@ class VibeSurfUIManager {
|
|
|
697
700
|
}
|
|
698
701
|
|
|
699
702
|
forceUpdateUIForRunningState() {
|
|
700
|
-
|
|
701
|
-
|
|
703
|
+
|
|
704
|
+
|
|
702
705
|
// Disable input during running
|
|
703
706
|
if (this.elements.taskInput) {
|
|
704
707
|
this.elements.taskInput.disabled = true;
|
|
705
708
|
this.elements.taskInput.placeholder = 'Task is running - please wait...';
|
|
706
709
|
}
|
|
707
|
-
|
|
710
|
+
|
|
708
711
|
if (this.elements.sendBtn) {
|
|
709
712
|
this.elements.sendBtn.disabled = true;
|
|
710
713
|
}
|
|
711
|
-
|
|
714
|
+
|
|
712
715
|
if (this.elements.llmProfileSelect) {
|
|
713
716
|
this.elements.llmProfileSelect.disabled = true;
|
|
714
717
|
}
|
|
715
|
-
|
|
718
|
+
|
|
716
719
|
if (this.elements.agentModeSelect) {
|
|
717
720
|
this.elements.agentModeSelect.disabled = true;
|
|
718
721
|
}
|
|
719
|
-
|
|
722
|
+
|
|
720
723
|
// Disable voice record button during running
|
|
721
724
|
if (this.elements.voiceRecordBtn) {
|
|
722
725
|
this.elements.voiceRecordBtn.disabled = true;
|
|
723
726
|
this.elements.voiceRecordBtn.classList.add('task-running-disabled');
|
|
724
727
|
this.elements.voiceRecordBtn.setAttribute('title', 'Voice input disabled while task is running');
|
|
725
728
|
}
|
|
726
|
-
|
|
729
|
+
|
|
727
730
|
// Update file manager state
|
|
728
731
|
this.fileManager.setEnabled(false);
|
|
729
|
-
|
|
732
|
+
|
|
730
733
|
// Disable header buttons when task is running
|
|
731
734
|
const headerButtons = [
|
|
732
735
|
this.elements.newSessionBtn,
|
|
733
736
|
this.elements.historyBtn,
|
|
734
737
|
this.elements.settingsBtn
|
|
735
738
|
];
|
|
736
|
-
|
|
739
|
+
|
|
737
740
|
headerButtons.forEach(button => {
|
|
738
741
|
if (button) {
|
|
739
742
|
button.disabled = true;
|
|
@@ -759,7 +762,7 @@ class VibeSurfUIManager {
|
|
|
759
762
|
const taskInfo = this.state.taskInfo;
|
|
760
763
|
const taskId = taskInfo?.task_id || 'unknown';
|
|
761
764
|
const sessionId = taskInfo?.session_id || 'unknown';
|
|
762
|
-
|
|
765
|
+
|
|
763
766
|
return this.modalManager.showConfirmModalAsync(
|
|
764
767
|
'Task Currently Running',
|
|
765
768
|
`A task is currently ${taskInfo?.status || 'running'}. You must stop the current task before you can ${action}.`,
|
|
@@ -788,12 +791,12 @@ class VibeSurfUIManager {
|
|
|
788
791
|
const canProceed = await this.showTaskRunningWarning('create a new session');
|
|
789
792
|
if (!canProceed) return;
|
|
790
793
|
}
|
|
791
|
-
|
|
794
|
+
|
|
792
795
|
try {
|
|
793
796
|
this.showLoading('Creating new session...');
|
|
794
|
-
|
|
797
|
+
|
|
795
798
|
const sessionId = await this.sessionManager.createSession();
|
|
796
|
-
|
|
799
|
+
|
|
797
800
|
this.hideLoading();
|
|
798
801
|
} catch (error) {
|
|
799
802
|
this.hideLoading();
|
|
@@ -808,7 +811,7 @@ class VibeSurfUIManager {
|
|
|
808
811
|
const canProceed = await this.showTaskRunningWarning('view session history');
|
|
809
812
|
if (!canProceed) return;
|
|
810
813
|
}
|
|
811
|
-
|
|
814
|
+
|
|
812
815
|
this.historyManager.showHistory();
|
|
813
816
|
}
|
|
814
817
|
|
|
@@ -819,7 +822,7 @@ class VibeSurfUIManager {
|
|
|
819
822
|
const canProceed = await this.showTaskRunningWarning('access settings');
|
|
820
823
|
if (!canProceed) return;
|
|
821
824
|
}
|
|
822
|
-
|
|
825
|
+
|
|
823
826
|
this.settingsManager.showSettings();
|
|
824
827
|
}
|
|
825
828
|
|
|
@@ -830,10 +833,10 @@ class VibeSurfUIManager {
|
|
|
830
833
|
const canProceed = await this.showTaskRunningWarning('access settings');
|
|
831
834
|
if (!canProceed) return;
|
|
832
835
|
}
|
|
833
|
-
|
|
836
|
+
|
|
834
837
|
// Show settings and navigate directly to LLM profiles tab
|
|
835
838
|
this.settingsManager.showSettings();
|
|
836
|
-
|
|
839
|
+
|
|
837
840
|
// Switch to LLM profiles tab after settings are shown
|
|
838
841
|
setTimeout(() => {
|
|
839
842
|
const llmTab = document.querySelector('.settings-tab[data-tab="llm-profiles"]');
|
|
@@ -845,12 +848,12 @@ class VibeSurfUIManager {
|
|
|
845
848
|
|
|
846
849
|
async handleCopySession() {
|
|
847
850
|
const sessionId = this.sessionManager.getCurrentSessionId();
|
|
848
|
-
|
|
851
|
+
|
|
849
852
|
if (!sessionId) {
|
|
850
853
|
this.showNotification('No active session to copy', 'warning');
|
|
851
854
|
return;
|
|
852
855
|
}
|
|
853
|
-
|
|
856
|
+
|
|
854
857
|
try {
|
|
855
858
|
await navigator.clipboard.writeText(sessionId);
|
|
856
859
|
this.showNotification('Session ID copied to clipboard!', 'success');
|
|
@@ -860,6 +863,47 @@ class VibeSurfUIManager {
|
|
|
860
863
|
}
|
|
861
864
|
}
|
|
862
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
|
+
|
|
863
907
|
// Voice Recording UI Handler
|
|
864
908
|
async handleVoiceRecord() {
|
|
865
909
|
// Check if voice recording is supported
|
|
@@ -879,12 +923,12 @@ class VibeSurfUIManager {
|
|
|
879
923
|
// Enhanced task status check - disable recording during task execution unless paused
|
|
880
924
|
const taskStatus = this.sessionManager.getTaskStatus();
|
|
881
925
|
const isTaskRunning = this.state.isTaskRunning;
|
|
882
|
-
|
|
926
|
+
|
|
883
927
|
if (isTaskRunning && taskStatus !== 'paused') {
|
|
884
928
|
this.showNotification('Cannot record voice while task is running. Stop the current task or wait for it to complete.', 'warning');
|
|
885
929
|
return;
|
|
886
930
|
}
|
|
887
|
-
|
|
931
|
+
|
|
888
932
|
// Additional check: if task is paused, allow voice input but show info message
|
|
889
933
|
if (isTaskRunning && taskStatus === 'paused') {
|
|
890
934
|
console.log('[UIManager] Task is paused, allowing voice input');
|
|
@@ -905,15 +949,15 @@ class VibeSurfUIManager {
|
|
|
905
949
|
} else {
|
|
906
950
|
// Start recording
|
|
907
951
|
console.log('[UIManager] Starting voice recording');
|
|
908
|
-
|
|
952
|
+
|
|
909
953
|
// Request microphone permission first
|
|
910
954
|
try {
|
|
911
955
|
// For Chrome extensions, ensure we have proper user gesture context
|
|
912
956
|
console.log('[UIManager] Requesting microphone permission with user gesture context');
|
|
913
|
-
|
|
957
|
+
|
|
914
958
|
// Add a small delay to ensure user gesture is properly registered
|
|
915
959
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
916
|
-
|
|
960
|
+
|
|
917
961
|
const hasPermission = await this.voiceRecorder.requestMicrophonePermission();
|
|
918
962
|
if (!hasPermission) {
|
|
919
963
|
this.showNotification('Microphone permission denied. Please allow microphone access to use voice input.', 'error');
|
|
@@ -921,11 +965,11 @@ class VibeSurfUIManager {
|
|
|
921
965
|
}
|
|
922
966
|
} catch (permissionError) {
|
|
923
967
|
console.error('[UIManager] Microphone permission error:', permissionError);
|
|
924
|
-
|
|
968
|
+
|
|
925
969
|
// Handle different types of permission errors with detailed guidance
|
|
926
970
|
let errorMessage = 'Microphone permission denied';
|
|
927
971
|
let detailedHelp = '';
|
|
928
|
-
|
|
972
|
+
|
|
929
973
|
if (permissionError.name === 'MicrophonePermissionError') {
|
|
930
974
|
errorMessage = permissionError.message;
|
|
931
975
|
if (permissionError.userAction) {
|
|
@@ -938,11 +982,11 @@ class VibeSurfUIManager {
|
|
|
938
982
|
errorMessage = `Microphone access error: ${permissionError.message}`;
|
|
939
983
|
detailedHelp = 'Please ensure your browser allows microphone access and that a microphone is connected.';
|
|
940
984
|
}
|
|
941
|
-
|
|
985
|
+
|
|
942
986
|
// Show detailed error message
|
|
943
987
|
const fullMessage = detailedHelp ? `${errorMessage}\n\n${detailedHelp}` : errorMessage;
|
|
944
988
|
this.showNotification(fullMessage, 'error');
|
|
945
|
-
|
|
989
|
+
|
|
946
990
|
// Also log detailed error for debugging
|
|
947
991
|
console.error('[UIManager] Detailed microphone permission error:', {
|
|
948
992
|
name: permissionError.name,
|
|
@@ -950,7 +994,7 @@ class VibeSurfUIManager {
|
|
|
950
994
|
userAction: permissionError.userAction,
|
|
951
995
|
originalError: permissionError.originalError
|
|
952
996
|
});
|
|
953
|
-
|
|
997
|
+
|
|
954
998
|
this.updateVoiceRecordingUI(false);
|
|
955
999
|
return;
|
|
956
1000
|
}
|
|
@@ -967,7 +1011,7 @@ class VibeSurfUIManager {
|
|
|
967
1011
|
|
|
968
1012
|
async handleSendTask() {
|
|
969
1013
|
const taskDescription = this.elements.taskInput?.value.trim();
|
|
970
|
-
|
|
1014
|
+
|
|
971
1015
|
if (!taskDescription) {
|
|
972
1016
|
this.showNotification('Please enter a task description', 'warning');
|
|
973
1017
|
this.elements.taskInput?.focus();
|
|
@@ -983,20 +1027,20 @@ class VibeSurfUIManager {
|
|
|
983
1027
|
|
|
984
1028
|
if (isPaused) {
|
|
985
1029
|
// Handle adding new task to paused execution
|
|
986
|
-
|
|
1030
|
+
|
|
987
1031
|
await this.sessionManager.addNewTaskToPaused(taskDescription);
|
|
988
|
-
|
|
1032
|
+
|
|
989
1033
|
// Clear the input after successful addition
|
|
990
1034
|
this.clearTaskInput();
|
|
991
1035
|
this.showNotification('Additional information added to the task', 'success');
|
|
992
|
-
|
|
1036
|
+
|
|
993
1037
|
// Automatically resume the task after adding new information
|
|
994
|
-
|
|
1038
|
+
|
|
995
1039
|
await this.sessionManager.resumeTask('Auto-resume after adding new task information');
|
|
996
|
-
|
|
1040
|
+
|
|
997
1041
|
return;
|
|
998
1042
|
}
|
|
999
|
-
|
|
1043
|
+
|
|
1000
1044
|
// For non-paused states, check if any task is running
|
|
1001
1045
|
const statusCheck = await this.checkTaskStatus();
|
|
1002
1046
|
if (statusCheck.isRunning) {
|
|
@@ -1006,9 +1050,9 @@ class VibeSurfUIManager {
|
|
|
1006
1050
|
return;
|
|
1007
1051
|
}
|
|
1008
1052
|
}
|
|
1009
|
-
|
|
1053
|
+
|
|
1010
1054
|
const llmProfile = this.elements.llmProfileSelect?.value;
|
|
1011
|
-
|
|
1055
|
+
|
|
1012
1056
|
// Check if LLM profile is selected
|
|
1013
1057
|
if (!llmProfile || llmProfile.trim() === '') {
|
|
1014
1058
|
// Check if there are any LLM profiles available
|
|
@@ -1022,38 +1066,38 @@ class VibeSurfUIManager {
|
|
|
1022
1066
|
}
|
|
1023
1067
|
return;
|
|
1024
1068
|
}
|
|
1025
|
-
|
|
1069
|
+
|
|
1026
1070
|
// Immediately clear welcome message and show user request
|
|
1027
1071
|
this.clearWelcomeMessage();
|
|
1028
|
-
|
|
1072
|
+
|
|
1029
1073
|
const taskData = {
|
|
1030
1074
|
task_description: taskDescription,
|
|
1031
1075
|
llm_profile_name: llmProfile,
|
|
1032
1076
|
agent_mode: this.elements.agentModeSelect?.value || 'thinking'
|
|
1033
1077
|
};
|
|
1034
|
-
|
|
1078
|
+
|
|
1035
1079
|
// Add uploaded files path if any
|
|
1036
1080
|
const filePath = this.fileManager.getUploadedFilesForTask();
|
|
1037
1081
|
if (filePath) {
|
|
1038
1082
|
taskData.upload_files_path = filePath;
|
|
1039
|
-
|
|
1083
|
+
|
|
1040
1084
|
}
|
|
1041
|
-
|
|
1085
|
+
|
|
1042
1086
|
// Add selected tabs information if any
|
|
1043
1087
|
const selectedTabsData = this.getSelectedTabsForTask();
|
|
1044
1088
|
if (selectedTabsData) {
|
|
1045
1089
|
taskData.selected_tabs = selectedTabsData;
|
|
1046
1090
|
}
|
|
1047
|
-
|
|
1091
|
+
|
|
1048
1092
|
// Add selected skills information if any
|
|
1049
1093
|
const selectedSkillsData = this.getSelectedSkillsForTask();
|
|
1050
1094
|
if (selectedSkillsData) {
|
|
1051
1095
|
taskData.selected_skills = selectedSkillsData;
|
|
1052
1096
|
}
|
|
1053
|
-
|
|
1054
|
-
|
|
1097
|
+
|
|
1098
|
+
|
|
1055
1099
|
await this.sessionManager.submitTask(taskData);
|
|
1056
|
-
|
|
1100
|
+
|
|
1057
1101
|
// Clear uploaded files after successful task submission
|
|
1058
1102
|
this.fileManager.clearUploadedFiles();
|
|
1059
1103
|
} catch (error) {
|
|
@@ -1089,9 +1133,9 @@ class VibeSurfUIManager {
|
|
|
1089
1133
|
if (wasMonitoring) {
|
|
1090
1134
|
this.stopTaskStatusMonitoring();
|
|
1091
1135
|
}
|
|
1092
|
-
|
|
1136
|
+
|
|
1093
1137
|
await this.sessionManager.stopTask('User clicked terminate');
|
|
1094
|
-
|
|
1138
|
+
|
|
1095
1139
|
// Restart monitoring after a brief delay if it was running
|
|
1096
1140
|
if (wasMonitoring) {
|
|
1097
1141
|
setTimeout(() => {
|
|
@@ -1112,7 +1156,7 @@ class VibeSurfUIManager {
|
|
|
1112
1156
|
this.handleSendTask();
|
|
1113
1157
|
return;
|
|
1114
1158
|
}
|
|
1115
|
-
|
|
1159
|
+
|
|
1116
1160
|
// Handle tab token deletion
|
|
1117
1161
|
if (event.key === 'Backspace' || event.key === 'Delete') {
|
|
1118
1162
|
if (this.handleTabTokenDeletion(event)) {
|
|
@@ -1139,14 +1183,14 @@ class VibeSurfUIManager {
|
|
|
1139
1183
|
const input = event.target;
|
|
1140
1184
|
const cursorPos = input.selectionStart;
|
|
1141
1185
|
const text = input.value;
|
|
1142
|
-
|
|
1186
|
+
|
|
1143
1187
|
// Unicode markers for tab tokens
|
|
1144
1188
|
const startMarker = '\u200B'; // Zero-width space
|
|
1145
1189
|
const endMarker = '\u200C'; // Zero-width non-joiner
|
|
1146
|
-
|
|
1190
|
+
|
|
1147
1191
|
let tokenStart = -1;
|
|
1148
1192
|
let tokenEnd = -1;
|
|
1149
|
-
|
|
1193
|
+
|
|
1150
1194
|
if (event.key === 'Backspace') {
|
|
1151
1195
|
// Only delete if cursor is directly adjacent to end of token
|
|
1152
1196
|
// Check if the character immediately before cursor is an endMarker
|
|
@@ -1174,20 +1218,20 @@ class VibeSurfUIManager {
|
|
|
1174
1218
|
}
|
|
1175
1219
|
}
|
|
1176
1220
|
}
|
|
1177
|
-
|
|
1221
|
+
|
|
1178
1222
|
// If we found a complete token, delete it
|
|
1179
1223
|
if (tokenStart !== -1 && tokenEnd !== -1) {
|
|
1180
1224
|
const beforeToken = text.substring(0, tokenStart);
|
|
1181
1225
|
const afterToken = text.substring(tokenEnd);
|
|
1182
1226
|
input.value = beforeToken + afterToken;
|
|
1183
1227
|
input.setSelectionRange(tokenStart, tokenStart);
|
|
1184
|
-
|
|
1228
|
+
|
|
1185
1229
|
// Trigger input change event for validation
|
|
1186
1230
|
this.handleTaskInputChange({ target: input });
|
|
1187
|
-
|
|
1231
|
+
|
|
1188
1232
|
return true; // Prevent default behavior
|
|
1189
1233
|
}
|
|
1190
|
-
|
|
1234
|
+
|
|
1191
1235
|
return false; // Allow default behavior
|
|
1192
1236
|
}
|
|
1193
1237
|
|
|
@@ -1195,14 +1239,14 @@ class VibeSurfUIManager {
|
|
|
1195
1239
|
const input = event.target;
|
|
1196
1240
|
const cursorPos = input.selectionStart;
|
|
1197
1241
|
const text = input.value;
|
|
1198
|
-
|
|
1242
|
+
|
|
1199
1243
|
// Unicode markers for skill tokens
|
|
1200
1244
|
const startMarker = '\u200D'; // Zero-width joiner
|
|
1201
1245
|
const endMarker = '\u200E'; // Left-to-right mark
|
|
1202
|
-
|
|
1246
|
+
|
|
1203
1247
|
let tokenStart = -1;
|
|
1204
1248
|
let tokenEnd = -1;
|
|
1205
|
-
|
|
1249
|
+
|
|
1206
1250
|
if (event.key === 'Backspace') {
|
|
1207
1251
|
// Only delete if cursor is directly adjacent to end of token
|
|
1208
1252
|
if (cursorPos > 0 && text[cursorPos - 1] === endMarker) {
|
|
@@ -1228,49 +1272,49 @@ class VibeSurfUIManager {
|
|
|
1228
1272
|
}
|
|
1229
1273
|
}
|
|
1230
1274
|
}
|
|
1231
|
-
|
|
1275
|
+
|
|
1232
1276
|
// If we found a complete token, delete it
|
|
1233
1277
|
if (tokenStart !== -1 && tokenEnd !== -1) {
|
|
1234
1278
|
const beforeToken = text.substring(0, tokenStart);
|
|
1235
1279
|
const afterToken = text.substring(tokenEnd);
|
|
1236
1280
|
input.value = beforeToken + afterToken;
|
|
1237
1281
|
input.setSelectionRange(tokenStart, tokenStart);
|
|
1238
|
-
|
|
1282
|
+
|
|
1239
1283
|
// Trigger input change event for validation
|
|
1240
1284
|
this.handleTaskInputChange({ target: input });
|
|
1241
|
-
|
|
1285
|
+
|
|
1242
1286
|
return true; // Prevent default behavior
|
|
1243
1287
|
}
|
|
1244
|
-
|
|
1288
|
+
|
|
1245
1289
|
return false; // Allow default behavior
|
|
1246
1290
|
}
|
|
1247
1291
|
|
|
1248
1292
|
async handleLlmProfileChange(event) {
|
|
1249
1293
|
const selectedProfile = event.target.value;
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
|
|
1253
1297
|
try {
|
|
1254
1298
|
// Save the selected LLM profile to user settings storage
|
|
1255
1299
|
if (this.userSettingsStorage) {
|
|
1256
|
-
|
|
1300
|
+
|
|
1257
1301
|
await this.userSettingsStorage.setSelectedLlmProfile(selectedProfile);
|
|
1258
|
-
|
|
1259
|
-
|
|
1302
|
+
|
|
1303
|
+
|
|
1260
1304
|
// Verify the save
|
|
1261
1305
|
const verified = await this.userSettingsStorage.getSelectedLlmProfile();
|
|
1262
|
-
|
|
1263
|
-
|
|
1306
|
+
|
|
1307
|
+
|
|
1264
1308
|
// Also save to localStorage as backup for browser restart scenarios
|
|
1265
1309
|
localStorage.setItem('vibesurf-llm-profile-backup', selectedProfile);
|
|
1266
|
-
|
|
1310
|
+
|
|
1267
1311
|
} else {
|
|
1268
1312
|
console.warn('[UIManager] userSettingsStorage not available for LLM profile save');
|
|
1269
1313
|
}
|
|
1270
1314
|
} catch (error) {
|
|
1271
1315
|
console.error('[UIManager] Failed to save LLM profile selection:', error);
|
|
1272
1316
|
}
|
|
1273
|
-
|
|
1317
|
+
|
|
1274
1318
|
// Re-validate send button state when LLM profile changes
|
|
1275
1319
|
if (this.elements.taskInput) {
|
|
1276
1320
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
@@ -1279,30 +1323,30 @@ class VibeSurfUIManager {
|
|
|
1279
1323
|
|
|
1280
1324
|
async handleAgentModeChange(event) {
|
|
1281
1325
|
const selectedMode = event.target.value;
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
|
|
1285
1329
|
try {
|
|
1286
1330
|
// Save the selected agent mode to user settings storage
|
|
1287
1331
|
if (this.userSettingsStorage) {
|
|
1288
|
-
|
|
1332
|
+
|
|
1289
1333
|
await this.userSettingsStorage.setSelectedAgentMode(selectedMode);
|
|
1290
|
-
|
|
1291
|
-
|
|
1334
|
+
|
|
1335
|
+
|
|
1292
1336
|
// Verify the save
|
|
1293
1337
|
const verified = await this.userSettingsStorage.getSelectedAgentMode();
|
|
1294
|
-
|
|
1295
|
-
|
|
1338
|
+
|
|
1339
|
+
|
|
1296
1340
|
// Also save to localStorage as backup for browser restart scenarios
|
|
1297
1341
|
localStorage.setItem('vibesurf-agent-mode-backup', selectedMode);
|
|
1298
|
-
|
|
1342
|
+
|
|
1299
1343
|
} else {
|
|
1300
1344
|
console.warn('[UIManager] userSettingsStorage not available for agent mode save');
|
|
1301
1345
|
}
|
|
1302
1346
|
} catch (error) {
|
|
1303
1347
|
console.error('[UIManager] Failed to save agent mode selection:', error);
|
|
1304
1348
|
}
|
|
1305
|
-
|
|
1349
|
+
|
|
1306
1350
|
// Re-validate send button state when agent mode changes
|
|
1307
1351
|
if (this.elements.taskInput) {
|
|
1308
1352
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
@@ -1316,13 +1360,13 @@ class VibeSurfUIManager {
|
|
|
1316
1360
|
const hasLlmProfile = llmProfile && llmProfile.trim() !== '';
|
|
1317
1361
|
const taskStatus = this.sessionManager.getTaskStatus();
|
|
1318
1362
|
const isPaused = taskStatus === 'paused';
|
|
1319
|
-
|
|
1363
|
+
|
|
1320
1364
|
// Check for @ character to trigger tab selector
|
|
1321
1365
|
this.handleTabSelectorInput(event);
|
|
1322
|
-
|
|
1366
|
+
|
|
1323
1367
|
// Check for / character to trigger skill selector
|
|
1324
1368
|
this.handleSkillSelectorInput(event);
|
|
1325
|
-
|
|
1369
|
+
|
|
1326
1370
|
// Update send button state - special handling for pause state
|
|
1327
1371
|
if (this.elements.sendBtn) {
|
|
1328
1372
|
if (isPaused) {
|
|
@@ -1333,32 +1377,32 @@ class VibeSurfUIManager {
|
|
|
1333
1377
|
this.elements.sendBtn.disabled = !(hasText && hasLlmProfile && !this.state.isTaskRunning);
|
|
1334
1378
|
}
|
|
1335
1379
|
}
|
|
1336
|
-
|
|
1380
|
+
|
|
1337
1381
|
// Auto-resize textarea based on content
|
|
1338
1382
|
this.autoResizeTextarea(textarea);
|
|
1339
1383
|
}
|
|
1340
|
-
|
|
1384
|
+
|
|
1341
1385
|
autoResizeTextarea(textarea) {
|
|
1342
1386
|
if (!textarea) return;
|
|
1343
|
-
|
|
1387
|
+
|
|
1344
1388
|
// Reset height to auto to get the natural scrollHeight
|
|
1345
1389
|
textarea.style.height = 'auto';
|
|
1346
|
-
|
|
1390
|
+
|
|
1347
1391
|
// Calculate the new height based on content
|
|
1348
1392
|
const minHeight = 44; // Min height from CSS
|
|
1349
1393
|
const maxHeight = 200; // Max height from CSS
|
|
1350
1394
|
const newHeight = Math.max(minHeight, Math.min(maxHeight, textarea.scrollHeight));
|
|
1351
|
-
|
|
1395
|
+
|
|
1352
1396
|
// Apply the new height
|
|
1353
1397
|
textarea.style.height = newHeight + 'px';
|
|
1354
1398
|
}
|
|
1355
1399
|
|
|
1356
1400
|
// UI Display Methods
|
|
1357
1401
|
updateSessionDisplay(sessionId) {
|
|
1358
|
-
|
|
1402
|
+
|
|
1359
1403
|
if (this.elements.sessionId) {
|
|
1360
1404
|
this.elements.sessionId.textContent = sessionId || '-';
|
|
1361
|
-
|
|
1405
|
+
|
|
1362
1406
|
} else {
|
|
1363
1407
|
console.error('[UIManager] Session ID element not found');
|
|
1364
1408
|
}
|
|
@@ -1369,57 +1413,57 @@ class VibeSurfUIManager {
|
|
|
1369
1413
|
const cancelBtn = this.elements.cancelBtn;
|
|
1370
1414
|
const resumeBtn = this.elements.resumeBtn;
|
|
1371
1415
|
const terminateBtn = this.elements.terminateBtn;
|
|
1372
|
-
|
|
1416
|
+
|
|
1373
1417
|
console.log(`[UIManager] updateControlPanel called with status: ${status}`);
|
|
1374
|
-
|
|
1418
|
+
|
|
1375
1419
|
if (!panel) {
|
|
1376
1420
|
console.error('[UIManager] Control panel element not found');
|
|
1377
1421
|
return;
|
|
1378
1422
|
}
|
|
1379
|
-
|
|
1423
|
+
|
|
1380
1424
|
// Clear any existing auto-hide timeout
|
|
1381
1425
|
if (this.controlPanelTimeout) {
|
|
1382
1426
|
clearTimeout(this.controlPanelTimeout);
|
|
1383
1427
|
this.controlPanelTimeout = null;
|
|
1384
1428
|
}
|
|
1385
|
-
|
|
1429
|
+
|
|
1386
1430
|
switch (status) {
|
|
1387
1431
|
case 'ready':
|
|
1388
|
-
|
|
1432
|
+
|
|
1389
1433
|
panel.classList.add('hidden');
|
|
1390
1434
|
panel.classList.remove('error-state');
|
|
1391
1435
|
break;
|
|
1392
|
-
|
|
1436
|
+
|
|
1393
1437
|
case 'running':
|
|
1394
|
-
|
|
1438
|
+
|
|
1395
1439
|
panel.classList.remove('hidden');
|
|
1396
1440
|
panel.classList.remove('error-state');
|
|
1397
1441
|
cancelBtn?.classList.remove('hidden');
|
|
1398
1442
|
resumeBtn?.classList.add('hidden');
|
|
1399
1443
|
terminateBtn?.classList.add('hidden');
|
|
1400
|
-
|
|
1444
|
+
|
|
1401
1445
|
// For fast-completing tasks, ensure minimum visibility duration
|
|
1402
1446
|
this.ensureMinimumControlPanelVisibility();
|
|
1403
1447
|
break;
|
|
1404
|
-
|
|
1448
|
+
|
|
1405
1449
|
case 'paused':
|
|
1406
|
-
|
|
1450
|
+
|
|
1407
1451
|
panel.classList.remove('hidden');
|
|
1408
1452
|
panel.classList.remove('error-state');
|
|
1409
1453
|
cancelBtn?.classList.add('hidden');
|
|
1410
1454
|
resumeBtn?.classList.remove('hidden');
|
|
1411
1455
|
terminateBtn?.classList.remove('hidden');
|
|
1412
1456
|
break;
|
|
1413
|
-
|
|
1457
|
+
|
|
1414
1458
|
case 'error':
|
|
1415
|
-
|
|
1459
|
+
|
|
1416
1460
|
panel.classList.remove('hidden');
|
|
1417
1461
|
panel.classList.add('error-state');
|
|
1418
1462
|
cancelBtn?.classList.remove('hidden');
|
|
1419
1463
|
resumeBtn?.classList.add('hidden');
|
|
1420
1464
|
terminateBtn?.classList.remove('hidden');
|
|
1421
1465
|
break;
|
|
1422
|
-
|
|
1466
|
+
|
|
1423
1467
|
case 'done':
|
|
1424
1468
|
case 'completed':
|
|
1425
1469
|
case 'finished':
|
|
@@ -1428,22 +1472,22 @@ class VibeSurfUIManager {
|
|
|
1428
1472
|
panel.classList.add('hidden');
|
|
1429
1473
|
panel.classList.remove('error-state');
|
|
1430
1474
|
break;
|
|
1431
|
-
|
|
1475
|
+
|
|
1432
1476
|
default:
|
|
1433
1477
|
console.log(`[UIManager] Unknown control panel status: ${status}, hiding panel`);
|
|
1434
1478
|
panel.classList.add('hidden');
|
|
1435
1479
|
panel.classList.remove('error-state');
|
|
1436
1480
|
}
|
|
1437
1481
|
}
|
|
1438
|
-
|
|
1482
|
+
|
|
1439
1483
|
ensureMinimumControlPanelVisibility() {
|
|
1440
1484
|
// Set a flag to prevent immediate hiding of control panel for fast tasks
|
|
1441
1485
|
this.controlPanelMinVisibilityActive = true;
|
|
1442
|
-
|
|
1486
|
+
|
|
1443
1487
|
// Clear the flag after minimum visibility period (2 seconds)
|
|
1444
1488
|
setTimeout(() => {
|
|
1445
1489
|
this.controlPanelMinVisibilityActive = false;
|
|
1446
|
-
|
|
1490
|
+
|
|
1447
1491
|
}, 2000);
|
|
1448
1492
|
}
|
|
1449
1493
|
|
|
@@ -1474,7 +1518,7 @@ class VibeSurfUIManager {
|
|
|
1474
1518
|
<div class="task-icon">🔍</div>
|
|
1475
1519
|
<div class="task-content">
|
|
1476
1520
|
<div class="task-title">Research Founders</div>
|
|
1477
|
-
<div class="task-description">Search information about browser
|
|
1521
|
+
<div class="task-description">Search information about AI browser assistant: VibeSurf, write a brief report</div>
|
|
1478
1522
|
</div>
|
|
1479
1523
|
</div>
|
|
1480
1524
|
<div class="task-suggestion" data-task="news">
|
|
@@ -1494,7 +1538,7 @@ class VibeSurfUIManager {
|
|
|
1494
1538
|
</div>
|
|
1495
1539
|
</div>
|
|
1496
1540
|
`;
|
|
1497
|
-
|
|
1541
|
+
|
|
1498
1542
|
if (this.elements.activityLog) {
|
|
1499
1543
|
this.elements.activityLog.innerHTML = welcomeHTML;
|
|
1500
1544
|
this.bindTaskSuggestionEvents();
|
|
@@ -1503,19 +1547,19 @@ class VibeSurfUIManager {
|
|
|
1503
1547
|
|
|
1504
1548
|
bindTaskSuggestionEvents() {
|
|
1505
1549
|
const taskSuggestions = document.querySelectorAll('.task-suggestion');
|
|
1506
|
-
|
|
1550
|
+
|
|
1507
1551
|
taskSuggestions.forEach(suggestion => {
|
|
1508
1552
|
suggestion.addEventListener('click', () => {
|
|
1509
1553
|
const taskDescription = suggestion.querySelector('.task-description').textContent;
|
|
1510
|
-
|
|
1554
|
+
|
|
1511
1555
|
// Populate task input with suggestion (only description, no title prefix)
|
|
1512
1556
|
if (this.elements.taskInput) {
|
|
1513
1557
|
this.elements.taskInput.value = taskDescription;
|
|
1514
1558
|
this.elements.taskInput.focus();
|
|
1515
|
-
|
|
1559
|
+
|
|
1516
1560
|
// Trigger input change event for validation and auto-resize
|
|
1517
1561
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
1518
|
-
|
|
1562
|
+
|
|
1519
1563
|
// Auto-send the task
|
|
1520
1564
|
setTimeout(() => {
|
|
1521
1565
|
this.handleSendTask();
|
|
@@ -1527,17 +1571,17 @@ class VibeSurfUIManager {
|
|
|
1527
1571
|
|
|
1528
1572
|
displayActivityLogs(logs) {
|
|
1529
1573
|
this.clearActivityLog();
|
|
1530
|
-
|
|
1574
|
+
|
|
1531
1575
|
if (logs.length === 0) {
|
|
1532
1576
|
this.showWelcomeMessage();
|
|
1533
1577
|
return;
|
|
1534
1578
|
}
|
|
1535
|
-
|
|
1579
|
+
|
|
1536
1580
|
logs.forEach(log => this.addActivityLog(log));
|
|
1537
|
-
|
|
1581
|
+
|
|
1538
1582
|
// Bind link click handlers to all existing activity items after loading
|
|
1539
1583
|
this.bindLinkHandlersToAllActivityItems();
|
|
1540
|
-
|
|
1584
|
+
|
|
1541
1585
|
this.scrollActivityToBottom();
|
|
1542
1586
|
}
|
|
1543
1587
|
|
|
@@ -1552,19 +1596,19 @@ class VibeSurfUIManager {
|
|
|
1552
1596
|
addActivityLog(activityData) {
|
|
1553
1597
|
// Filter out "done" status messages from UI display only
|
|
1554
1598
|
const agentStatus = activityData.agent_status || activityData.status || '';
|
|
1555
|
-
|
|
1599
|
+
|
|
1556
1600
|
// Filter done messages that are just status updates without meaningful content
|
|
1557
1601
|
if (agentStatus.toLowerCase() === 'done') {
|
|
1558
1602
|
return;
|
|
1559
1603
|
}
|
|
1560
|
-
|
|
1604
|
+
|
|
1561
1605
|
if (this.elements.activityLog) {
|
|
1562
1606
|
// Remove welcome message if present
|
|
1563
1607
|
const welcomeMsg = this.elements.activityLog.querySelector('.welcome-message');
|
|
1564
1608
|
if (welcomeMsg) {
|
|
1565
1609
|
welcomeMsg.remove();
|
|
1566
1610
|
}
|
|
1567
|
-
|
|
1611
|
+
|
|
1568
1612
|
// Check if this is a suggestion_tasks message
|
|
1569
1613
|
if (agentStatus.toLowerCase() === 'suggestion_tasks') {
|
|
1570
1614
|
// For suggestion_tasks, only show suggestion cards, not the normal message
|
|
@@ -1575,10 +1619,10 @@ class VibeSurfUIManager {
|
|
|
1575
1619
|
const activityItem = this.createActivityItem(activityData);
|
|
1576
1620
|
this.elements.activityLog.appendChild(activityItem);
|
|
1577
1621
|
activityItem.classList.add('fade-in');
|
|
1578
|
-
|
|
1622
|
+
|
|
1579
1623
|
// Bind copy button functionality
|
|
1580
1624
|
this.bindCopyButtonEvent(activityItem, activityData);
|
|
1581
|
-
|
|
1625
|
+
|
|
1582
1626
|
// Bind link click handlers to prevent extension freezing
|
|
1583
1627
|
this.bindLinkClickHandlers(activityItem);
|
|
1584
1628
|
}
|
|
@@ -1587,24 +1631,24 @@ class VibeSurfUIManager {
|
|
|
1587
1631
|
|
|
1588
1632
|
addSuggestionTaskCards(activityData) {
|
|
1589
1633
|
const agentMsg = activityData.agent_msg || activityData.message || '';
|
|
1590
|
-
|
|
1634
|
+
|
|
1591
1635
|
if (!agentMsg || typeof agentMsg !== 'string') {
|
|
1592
1636
|
return;
|
|
1593
1637
|
}
|
|
1594
|
-
|
|
1638
|
+
|
|
1595
1639
|
// Parse tasks by splitting on newlines and filtering empty lines
|
|
1596
1640
|
const tasks = agentMsg.split('\n')
|
|
1597
1641
|
.map(task => task.trim())
|
|
1598
1642
|
.filter(task => task.length > 0);
|
|
1599
|
-
|
|
1643
|
+
|
|
1600
1644
|
if (tasks.length === 0) {
|
|
1601
1645
|
return;
|
|
1602
1646
|
}
|
|
1603
|
-
|
|
1647
|
+
|
|
1604
1648
|
// Create suggestion cards container
|
|
1605
1649
|
const suggestionsContainer = document.createElement('div');
|
|
1606
1650
|
suggestionsContainer.className = 'suggestion-tasks-container';
|
|
1607
|
-
|
|
1651
|
+
|
|
1608
1652
|
// Add header for suggestion cards
|
|
1609
1653
|
const headerElement = document.createElement('div');
|
|
1610
1654
|
headerElement.className = 'suggestion-tasks-header';
|
|
@@ -1612,18 +1656,18 @@ class VibeSurfUIManager {
|
|
|
1612
1656
|
<h4>Suggestion Follow-Up Tasks</h4>
|
|
1613
1657
|
`;
|
|
1614
1658
|
suggestionsContainer.appendChild(headerElement);
|
|
1615
|
-
|
|
1659
|
+
|
|
1616
1660
|
// Create cards container
|
|
1617
1661
|
const cardsContainer = document.createElement('div');
|
|
1618
1662
|
cardsContainer.className = 'suggestion-cards';
|
|
1619
|
-
|
|
1663
|
+
|
|
1620
1664
|
// Create individual task cards
|
|
1621
1665
|
tasks.forEach((task, index) => {
|
|
1622
1666
|
const taskCard = document.createElement('div');
|
|
1623
1667
|
taskCard.className = 'suggestion-task-card';
|
|
1624
1668
|
taskCard.setAttribute('data-task', task);
|
|
1625
1669
|
taskCard.setAttribute('data-index', index);
|
|
1626
|
-
|
|
1670
|
+
|
|
1627
1671
|
taskCard.innerHTML = `
|
|
1628
1672
|
<div class="suggestion-card-icon">
|
|
1629
1673
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
@@ -1639,18 +1683,18 @@ class VibeSurfUIManager {
|
|
|
1639
1683
|
</svg>
|
|
1640
1684
|
</div>
|
|
1641
1685
|
`;
|
|
1642
|
-
|
|
1686
|
+
|
|
1643
1687
|
// Add click event handler
|
|
1644
1688
|
taskCard.addEventListener('click', (e) => {
|
|
1645
1689
|
e.preventDefault();
|
|
1646
1690
|
this.handleSuggestionTaskClick(task);
|
|
1647
1691
|
});
|
|
1648
|
-
|
|
1692
|
+
|
|
1649
1693
|
cardsContainer.appendChild(taskCard);
|
|
1650
1694
|
});
|
|
1651
|
-
|
|
1695
|
+
|
|
1652
1696
|
suggestionsContainer.appendChild(cardsContainer);
|
|
1653
|
-
|
|
1697
|
+
|
|
1654
1698
|
// Add the suggestions container to the activity log
|
|
1655
1699
|
if (this.elements.activityLog) {
|
|
1656
1700
|
this.elements.activityLog.appendChild(suggestionsContainer);
|
|
@@ -1659,38 +1703,38 @@ class VibeSurfUIManager {
|
|
|
1659
1703
|
}
|
|
1660
1704
|
|
|
1661
1705
|
handleSuggestionTaskClick(taskDescription) {
|
|
1662
|
-
|
|
1663
|
-
|
|
1706
|
+
|
|
1707
|
+
|
|
1664
1708
|
// First check if task is running
|
|
1665
1709
|
if (this.state.isTaskRunning) {
|
|
1666
1710
|
this.showNotification('Cannot submit task while another task is running', 'warning');
|
|
1667
1711
|
return;
|
|
1668
1712
|
}
|
|
1669
|
-
|
|
1713
|
+
|
|
1670
1714
|
// Check if LLM profile is selected
|
|
1671
1715
|
const llmProfile = this.elements.llmProfileSelect?.value;
|
|
1672
1716
|
if (!llmProfile || llmProfile.trim() === '') {
|
|
1673
1717
|
this.showLLMProfileRequiredModal('select');
|
|
1674
1718
|
return;
|
|
1675
1719
|
}
|
|
1676
|
-
|
|
1720
|
+
|
|
1677
1721
|
// Set the task description in the input first
|
|
1678
1722
|
if (!this.elements.taskInput) {
|
|
1679
1723
|
console.error('[UIManager] Task input element not found');
|
|
1680
1724
|
this.showNotification('Task input not available', 'error');
|
|
1681
1725
|
return;
|
|
1682
1726
|
}
|
|
1683
|
-
|
|
1684
|
-
|
|
1727
|
+
|
|
1728
|
+
|
|
1685
1729
|
this.elements.taskInput.value = taskDescription;
|
|
1686
1730
|
this.elements.taskInput.focus();
|
|
1687
|
-
|
|
1731
|
+
|
|
1688
1732
|
// Trigger input change event for validation and auto-resize
|
|
1689
1733
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
1690
|
-
|
|
1734
|
+
|
|
1691
1735
|
// Auto-submit the task after a short delay
|
|
1692
1736
|
setTimeout(() => {
|
|
1693
|
-
|
|
1737
|
+
|
|
1694
1738
|
this.handleSendTask();
|
|
1695
1739
|
}, 100);
|
|
1696
1740
|
}
|
|
@@ -1703,12 +1747,12 @@ class VibeSurfUIManager {
|
|
|
1703
1747
|
|
|
1704
1748
|
createActivityItem(data) {
|
|
1705
1749
|
const item = document.createElement('div');
|
|
1706
|
-
|
|
1750
|
+
|
|
1707
1751
|
// Extract activity data with correct keys
|
|
1708
1752
|
const agentName = data.agent_name || 'system';
|
|
1709
1753
|
const agentStatus = data.agent_status || data.status || 'info';
|
|
1710
1754
|
const agentMsg = data.agent_msg || data.message || data.action_description || 'No description';
|
|
1711
|
-
|
|
1755
|
+
|
|
1712
1756
|
// Use backend timestamp if available, otherwise generate frontend timestamp
|
|
1713
1757
|
let timestamp;
|
|
1714
1758
|
if (data.timestamp) {
|
|
@@ -1716,20 +1760,20 @@ class VibeSurfUIManager {
|
|
|
1716
1760
|
} else {
|
|
1717
1761
|
timestamp = new Date().toLocaleString();
|
|
1718
1762
|
}
|
|
1719
|
-
|
|
1763
|
+
|
|
1720
1764
|
// Extract token and cost information
|
|
1721
1765
|
const totalTokens = data.total_tokens;
|
|
1722
1766
|
const totalCost = data.total_cost;
|
|
1723
|
-
|
|
1767
|
+
|
|
1724
1768
|
// Determine if this is a user message (should be on the right)
|
|
1725
1769
|
const isUser = agentName.toLowerCase() === 'user';
|
|
1726
|
-
|
|
1770
|
+
|
|
1727
1771
|
// Set CSS classes based on agent type and status
|
|
1728
1772
|
item.className = `activity-item ${isUser ? 'user-message' : 'agent-message'} ${agentStatus}`;
|
|
1729
|
-
|
|
1773
|
+
|
|
1730
1774
|
// Build metadata display (timestamp, tokens, cost)
|
|
1731
1775
|
let metadataHtml = `<span class="message-time">${timestamp}</span>`;
|
|
1732
|
-
|
|
1776
|
+
|
|
1733
1777
|
if (totalTokens !== undefined || totalCost !== undefined) {
|
|
1734
1778
|
metadataHtml += '<span class="message-metrics">';
|
|
1735
1779
|
if (totalTokens !== undefined) {
|
|
@@ -1742,7 +1786,7 @@ class VibeSurfUIManager {
|
|
|
1742
1786
|
}
|
|
1743
1787
|
metadataHtml += '</span>';
|
|
1744
1788
|
}
|
|
1745
|
-
|
|
1789
|
+
|
|
1746
1790
|
// Create the message structure similar to chat interface
|
|
1747
1791
|
item.innerHTML = `
|
|
1748
1792
|
<div class="message-container ${isUser ? 'user-container' : 'agent-container'}">
|
|
@@ -1766,18 +1810,18 @@ class VibeSurfUIManager {
|
|
|
1766
1810
|
</div>
|
|
1767
1811
|
</div>
|
|
1768
1812
|
`;
|
|
1769
|
-
|
|
1813
|
+
|
|
1770
1814
|
return item;
|
|
1771
1815
|
}
|
|
1772
1816
|
|
|
1773
1817
|
bindCopyButtonEvent(activityItem, activityData) {
|
|
1774
1818
|
const copyBtn = activityItem.querySelector('.copy-message-btn');
|
|
1775
|
-
|
|
1819
|
+
|
|
1776
1820
|
if (copyBtn) {
|
|
1777
1821
|
copyBtn.addEventListener('click', async (e) => {
|
|
1778
1822
|
e.preventDefault();
|
|
1779
1823
|
e.stopPropagation();
|
|
1780
|
-
|
|
1824
|
+
|
|
1781
1825
|
await this.copyMessageToClipboard(activityData);
|
|
1782
1826
|
});
|
|
1783
1827
|
}
|
|
@@ -1786,43 +1830,43 @@ class VibeSurfUIManager {
|
|
|
1786
1830
|
bindLinkClickHandlers(activityItem) {
|
|
1787
1831
|
// Handle all link clicks within activity items to prevent extension freezing
|
|
1788
1832
|
const links = activityItem.querySelectorAll('a');
|
|
1789
|
-
|
|
1833
|
+
|
|
1790
1834
|
links.forEach(link => {
|
|
1791
1835
|
// Check if handler is already attached to prevent double binding
|
|
1792
1836
|
if (link.hasAttribute('data-link-handler-attached')) {
|
|
1793
1837
|
return;
|
|
1794
1838
|
}
|
|
1795
|
-
|
|
1839
|
+
|
|
1796
1840
|
link.setAttribute('data-link-handler-attached', 'true');
|
|
1797
|
-
|
|
1841
|
+
|
|
1798
1842
|
link.addEventListener('click', async (e) => {
|
|
1799
1843
|
console.log('[VibeSurf] Link click event detected:', e);
|
|
1800
|
-
|
|
1844
|
+
|
|
1801
1845
|
// Comprehensive event prevention
|
|
1802
1846
|
e.preventDefault();
|
|
1803
1847
|
e.stopPropagation();
|
|
1804
1848
|
e.stopImmediatePropagation(); // Prevent any other handlers
|
|
1805
|
-
|
|
1849
|
+
|
|
1806
1850
|
// Remove href temporarily to prevent default browser behavior
|
|
1807
1851
|
const originalHref = link.getAttribute('href');
|
|
1808
1852
|
const dataFilePath = link.getAttribute('data-file-path');
|
|
1809
1853
|
link.setAttribute('href', '#');
|
|
1810
|
-
|
|
1854
|
+
|
|
1811
1855
|
// Use data-file-path if available (for file:// links), otherwise use href
|
|
1812
1856
|
const targetUrl = dataFilePath || originalHref;
|
|
1813
1857
|
if (!targetUrl || (targetUrl === '#' && !dataFilePath)) return;
|
|
1814
|
-
|
|
1858
|
+
|
|
1815
1859
|
// Debounce - prevent rapid repeated clicks
|
|
1816
1860
|
if (link.hasAttribute('data-link-processing')) {
|
|
1817
1861
|
console.log('[VibeSurf] Link already processing, ignoring duplicate click');
|
|
1818
1862
|
return;
|
|
1819
1863
|
}
|
|
1820
|
-
|
|
1864
|
+
|
|
1821
1865
|
link.setAttribute('data-link-processing', 'true');
|
|
1822
|
-
|
|
1866
|
+
|
|
1823
1867
|
try {
|
|
1824
1868
|
console.log('[VibeSurf] Processing link:', targetUrl);
|
|
1825
|
-
|
|
1869
|
+
|
|
1826
1870
|
// Handle file:// links using existing logic
|
|
1827
1871
|
if (targetUrl.startsWith('file://')) {
|
|
1828
1872
|
await this.handleFileLinkClick(targetUrl);
|
|
@@ -1835,7 +1879,7 @@ class VibeSurfUIManager {
|
|
|
1835
1879
|
else {
|
|
1836
1880
|
await this.handleOtherLinkClick(targetUrl);
|
|
1837
1881
|
}
|
|
1838
|
-
|
|
1882
|
+
|
|
1839
1883
|
console.log('[VibeSurf] Link processed successfully:', targetUrl);
|
|
1840
1884
|
} catch (error) {
|
|
1841
1885
|
console.error('[VibeSurf] Error handling link click:', error);
|
|
@@ -1843,7 +1887,7 @@ class VibeSurfUIManager {
|
|
|
1843
1887
|
} finally {
|
|
1844
1888
|
// Restore original href
|
|
1845
1889
|
link.setAttribute('href', originalHref);
|
|
1846
|
-
|
|
1890
|
+
|
|
1847
1891
|
// Remove processing flag after a short delay
|
|
1848
1892
|
setTimeout(() => {
|
|
1849
1893
|
link.removeAttribute('data-link-processing');
|
|
@@ -1855,13 +1899,13 @@ class VibeSurfUIManager {
|
|
|
1855
1899
|
|
|
1856
1900
|
async handleFileLinkClick(fileUrl) {
|
|
1857
1901
|
console.log('[UIManager] Opening file URL:', fileUrl);
|
|
1858
|
-
|
|
1902
|
+
|
|
1859
1903
|
// Use the background script to handle file URLs
|
|
1860
1904
|
const result = await chrome.runtime.sendMessage({
|
|
1861
1905
|
type: 'OPEN_FILE_URL',
|
|
1862
1906
|
data: { fileUrl }
|
|
1863
1907
|
});
|
|
1864
|
-
|
|
1908
|
+
|
|
1865
1909
|
if (!result.success) {
|
|
1866
1910
|
throw new Error(result.error || 'Failed to open file');
|
|
1867
1911
|
}
|
|
@@ -1869,20 +1913,20 @@ class VibeSurfUIManager {
|
|
|
1869
1913
|
|
|
1870
1914
|
async handleHttpLinkClick(url) {
|
|
1871
1915
|
console.log('[VibeSurf] Opening HTTP URL:', url);
|
|
1872
|
-
|
|
1916
|
+
|
|
1873
1917
|
try {
|
|
1874
1918
|
// Open HTTP/HTTPS links in a new tab
|
|
1875
1919
|
const result = await chrome.runtime.sendMessage({
|
|
1876
1920
|
type: 'OPEN_FILE_URL',
|
|
1877
1921
|
data: { fileUrl: url }
|
|
1878
1922
|
});
|
|
1879
|
-
|
|
1923
|
+
|
|
1880
1924
|
console.log('[VibeSurf] Background script response:', result);
|
|
1881
|
-
|
|
1925
|
+
|
|
1882
1926
|
if (!result || !result.success) {
|
|
1883
1927
|
throw new Error(result?.error || 'Failed to create tab for URL');
|
|
1884
1928
|
}
|
|
1885
|
-
|
|
1929
|
+
|
|
1886
1930
|
console.log('[VibeSurf] Successfully opened tab:', result.tabId);
|
|
1887
1931
|
} catch (error) {
|
|
1888
1932
|
console.error('[VibeSurf] Error opening HTTP URL:', error);
|
|
@@ -1892,7 +1936,7 @@ class VibeSurfUIManager {
|
|
|
1892
1936
|
|
|
1893
1937
|
async handleOtherLinkClick(url) {
|
|
1894
1938
|
console.log('[UIManager] Opening other URL:', url);
|
|
1895
|
-
|
|
1939
|
+
|
|
1896
1940
|
// For relative URLs or other protocols, try to open in new tab
|
|
1897
1941
|
try {
|
|
1898
1942
|
// Use the background script to handle URL opening
|
|
@@ -1900,7 +1944,7 @@ class VibeSurfUIManager {
|
|
|
1900
1944
|
type: 'OPEN_FILE_URL',
|
|
1901
1945
|
data: { fileUrl: url }
|
|
1902
1946
|
});
|
|
1903
|
-
|
|
1947
|
+
|
|
1904
1948
|
if (!result.success) {
|
|
1905
1949
|
throw new Error(result.error || 'Failed to open URL');
|
|
1906
1950
|
}
|
|
@@ -1913,7 +1957,7 @@ class VibeSurfUIManager {
|
|
|
1913
1957
|
type: 'OPEN_FILE_URL',
|
|
1914
1958
|
data: { fileUrl: absoluteUrl }
|
|
1915
1959
|
});
|
|
1916
|
-
|
|
1960
|
+
|
|
1917
1961
|
if (!result.success) {
|
|
1918
1962
|
throw new Error(result.error || 'Failed to open absolute URL');
|
|
1919
1963
|
}
|
|
@@ -1930,7 +1974,7 @@ class VibeSurfUIManager {
|
|
|
1930
1974
|
try {
|
|
1931
1975
|
// Extract only the message content (no agent info or timestamps)
|
|
1932
1976
|
const agentMsg = activityData.agent_msg || activityData.message || activityData.action_description || 'No description';
|
|
1933
|
-
|
|
1977
|
+
|
|
1934
1978
|
// Convert to plain text
|
|
1935
1979
|
let messageText = '';
|
|
1936
1980
|
if (typeof agentMsg === 'object') {
|
|
@@ -1952,19 +1996,19 @@ class VibeSurfUIManager {
|
|
|
1952
1996
|
.replace(/\s+/g, ' ') // Normalize whitespace
|
|
1953
1997
|
.trim(); // Remove leading/trailing whitespace
|
|
1954
1998
|
}
|
|
1955
|
-
|
|
1999
|
+
|
|
1956
2000
|
// Check clipboard API availability
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
2001
|
+
|
|
2002
|
+
|
|
2003
|
+
|
|
2004
|
+
|
|
1961
2005
|
// Try multiple clipboard methods
|
|
1962
2006
|
let copySuccess = false;
|
|
1963
2007
|
let lastError = null;
|
|
1964
|
-
|
|
2008
|
+
|
|
1965
2009
|
// Method 1: Chrome extension messaging approach
|
|
1966
2010
|
try {
|
|
1967
|
-
|
|
2011
|
+
|
|
1968
2012
|
await new Promise((resolve, reject) => {
|
|
1969
2013
|
chrome.runtime.sendMessage({
|
|
1970
2014
|
type: 'COPY_TO_CLIPBOARD',
|
|
@@ -1980,29 +2024,29 @@ class VibeSurfUIManager {
|
|
|
1980
2024
|
});
|
|
1981
2025
|
});
|
|
1982
2026
|
copySuccess = true;
|
|
1983
|
-
|
|
2027
|
+
|
|
1984
2028
|
} catch (extensionError) {
|
|
1985
2029
|
console.warn('[UIManager] Chrome extension messaging failed:', extensionError);
|
|
1986
2030
|
lastError = extensionError;
|
|
1987
2031
|
}
|
|
1988
|
-
|
|
2032
|
+
|
|
1989
2033
|
// Method 2: Modern clipboard API (if extension method failed)
|
|
1990
2034
|
if (!copySuccess && navigator.clipboard && navigator.clipboard.writeText) {
|
|
1991
2035
|
try {
|
|
1992
|
-
|
|
2036
|
+
|
|
1993
2037
|
await navigator.clipboard.writeText(messageText);
|
|
1994
2038
|
copySuccess = true;
|
|
1995
|
-
|
|
2039
|
+
|
|
1996
2040
|
} catch (clipboardError) {
|
|
1997
2041
|
console.warn('[UIManager] Modern clipboard API failed:', clipboardError);
|
|
1998
2042
|
lastError = clipboardError;
|
|
1999
2043
|
}
|
|
2000
2044
|
}
|
|
2001
|
-
|
|
2045
|
+
|
|
2002
2046
|
// Method 3: Fallback using execCommand
|
|
2003
2047
|
if (!copySuccess) {
|
|
2004
2048
|
try {
|
|
2005
|
-
|
|
2049
|
+
|
|
2006
2050
|
const textArea = document.createElement('textarea');
|
|
2007
2051
|
textArea.value = messageText;
|
|
2008
2052
|
textArea.style.position = 'fixed';
|
|
@@ -2013,13 +2057,13 @@ class VibeSurfUIManager {
|
|
|
2013
2057
|
textArea.focus();
|
|
2014
2058
|
textArea.select();
|
|
2015
2059
|
textArea.setSelectionRange(0, textArea.value.length);
|
|
2016
|
-
|
|
2060
|
+
|
|
2017
2061
|
const success = document.execCommand('copy');
|
|
2018
2062
|
document.body.removeChild(textArea);
|
|
2019
|
-
|
|
2063
|
+
|
|
2020
2064
|
if (success) {
|
|
2021
2065
|
copySuccess = true;
|
|
2022
|
-
|
|
2066
|
+
|
|
2023
2067
|
} else {
|
|
2024
2068
|
console.warn('[UIManager] execCommand returned false');
|
|
2025
2069
|
}
|
|
@@ -2028,15 +2072,15 @@ class VibeSurfUIManager {
|
|
|
2028
2072
|
lastError = execError;
|
|
2029
2073
|
}
|
|
2030
2074
|
}
|
|
2031
|
-
|
|
2075
|
+
|
|
2032
2076
|
if (copySuccess) {
|
|
2033
2077
|
// Show visual feedback
|
|
2034
2078
|
this.showCopyFeedback();
|
|
2035
|
-
|
|
2079
|
+
|
|
2036
2080
|
} else {
|
|
2037
2081
|
throw new Error(`All clipboard methods failed. Last error: ${lastError?.message || 'Unknown error'}`);
|
|
2038
2082
|
}
|
|
2039
|
-
|
|
2083
|
+
|
|
2040
2084
|
} catch (error) {
|
|
2041
2085
|
console.error('[UIManager] Failed to copy message:', error);
|
|
2042
2086
|
this.showNotification('Copy Fail: ' + error.message, 'error');
|
|
@@ -2074,15 +2118,15 @@ class VibeSurfUIManager {
|
|
|
2074
2118
|
|
|
2075
2119
|
formatActivityContent(content) {
|
|
2076
2120
|
if (!content) return 'No content';
|
|
2077
|
-
|
|
2121
|
+
|
|
2078
2122
|
// Handle object content
|
|
2079
2123
|
if (typeof content === 'object') {
|
|
2080
2124
|
return `<pre class="json-content">${JSON.stringify(content, null, 2)}</pre>`;
|
|
2081
2125
|
}
|
|
2082
|
-
|
|
2126
|
+
|
|
2083
2127
|
// Convert content to string
|
|
2084
2128
|
let formattedContent = String(content);
|
|
2085
|
-
|
|
2129
|
+
|
|
2086
2130
|
// Use markdown-it library for proper markdown rendering if available
|
|
2087
2131
|
if (typeof markdownit !== 'undefined') {
|
|
2088
2132
|
try {
|
|
@@ -2093,16 +2137,16 @@ class VibeSurfUIManager {
|
|
|
2093
2137
|
linkify: true, // Autoconvert URL-like text to links
|
|
2094
2138
|
typographer: true // Enable some language-neutral replacement + quotes beautification
|
|
2095
2139
|
});
|
|
2096
|
-
|
|
2140
|
+
|
|
2097
2141
|
// Override link renderer to handle file:// protocol
|
|
2098
2142
|
const defaultLinkRenderer = md.renderer.rules.link_open || function(tokens, idx, options, env, renderer) {
|
|
2099
2143
|
return renderer.renderToken(tokens, idx, options);
|
|
2100
2144
|
};
|
|
2101
|
-
|
|
2145
|
+
|
|
2102
2146
|
md.renderer.rules.link_open = function (tokens, idx, options, env, renderer) {
|
|
2103
2147
|
const token = tokens[idx];
|
|
2104
2148
|
const href = token.attrGet('href');
|
|
2105
|
-
|
|
2149
|
+
|
|
2106
2150
|
if (href && href.startsWith('file://')) {
|
|
2107
2151
|
// Convert file:// links to our custom file-link format
|
|
2108
2152
|
token.attrSet('href', '#');
|
|
@@ -2110,17 +2154,17 @@ class VibeSurfUIManager {
|
|
|
2110
2154
|
token.attrSet('data-file-path', href);
|
|
2111
2155
|
token.attrSet('title', `Click to open file: ${href}`);
|
|
2112
2156
|
}
|
|
2113
|
-
|
|
2157
|
+
|
|
2114
2158
|
return defaultLinkRenderer(tokens, idx, options, env, renderer);
|
|
2115
2159
|
};
|
|
2116
|
-
|
|
2160
|
+
|
|
2117
2161
|
// Add task list support manually (markdown-it doesn't have built-in task lists)
|
|
2118
2162
|
formattedContent = this.preprocessTaskLists(formattedContent);
|
|
2119
|
-
|
|
2163
|
+
|
|
2120
2164
|
// Pre-process both regular file paths and file:// markdown links
|
|
2121
2165
|
const regularFilePathRegex = /\[([^\]]+)\]\(([^)]*\/[^)]*\.[^)]+)\)/g;
|
|
2122
2166
|
const markdownFileLinkRegex = /\[([^\]]+)\]\((file:\/\/[^)]+)\)/g;
|
|
2123
|
-
|
|
2167
|
+
|
|
2124
2168
|
// Handle regular file paths (convert to file:// format)
|
|
2125
2169
|
formattedContent = formattedContent.replace(regularFilePathRegex, (match, linkText, filePath) => {
|
|
2126
2170
|
// Only process if it looks like a file path (contains / and extension) and not already a URL
|
|
@@ -2130,19 +2174,19 @@ class VibeSurfUIManager {
|
|
|
2130
2174
|
}
|
|
2131
2175
|
return match;
|
|
2132
2176
|
});
|
|
2133
|
-
|
|
2177
|
+
|
|
2134
2178
|
// Handle file:// links
|
|
2135
2179
|
formattedContent = formattedContent.replace(markdownFileLinkRegex, (match, linkText, fileUrl) => {
|
|
2136
2180
|
// Convert to HTML format that markdown-it will preserve
|
|
2137
2181
|
return `<a href="${fileUrl}" class="file-link-markdown">${linkText}</a>`;
|
|
2138
2182
|
});
|
|
2139
|
-
|
|
2183
|
+
|
|
2140
2184
|
// Parse markdown
|
|
2141
2185
|
const htmlContent = md.render(formattedContent);
|
|
2142
|
-
|
|
2186
|
+
|
|
2143
2187
|
// Post-process to handle local file path links
|
|
2144
2188
|
let processedContent = htmlContent;
|
|
2145
|
-
|
|
2189
|
+
|
|
2146
2190
|
// Convert our pre-processed file:// links to proper file-link format
|
|
2147
2191
|
const preProcessedFileLinkRegex = /<a href="(file:\/\/[^"]+)"[^>]*class="file-link-markdown"[^>]*>([^<]*)<\/a>/g;
|
|
2148
2192
|
processedContent = processedContent.replace(preProcessedFileLinkRegex, (match, fileUrl, linkText) => {
|
|
@@ -2150,58 +2194,58 @@ class VibeSurfUIManager {
|
|
|
2150
2194
|
// Keep original URL but properly escape HTML attributes
|
|
2151
2195
|
// Don't decode/encode to preserve original spaces and special characters
|
|
2152
2196
|
const escapedUrl = fileUrl.replace(/"/g, '"');
|
|
2153
|
-
|
|
2197
|
+
|
|
2154
2198
|
return `<a href="#" class="file-link" data-file-path="${escapedUrl}" title="Click to open file: ${linkText}">${linkText}</a>`;
|
|
2155
2199
|
} catch (error) {
|
|
2156
2200
|
console.error('[UIManager] Error processing pre-processed file:// link:', error);
|
|
2157
2201
|
return match;
|
|
2158
2202
|
}
|
|
2159
2203
|
});
|
|
2160
|
-
|
|
2204
|
+
|
|
2161
2205
|
// Add custom classes and post-process
|
|
2162
2206
|
return processedContent
|
|
2163
2207
|
.replace(/<pre><code/g, '<pre class="code-block"><code')
|
|
2164
2208
|
.replace(/<code>/g, '<code class="inline-code">')
|
|
2165
2209
|
.replace(/<table>/g, '<table class="markdown-table">')
|
|
2166
2210
|
.replace(/<blockquote>/g, '<blockquote class="markdown-quote">');
|
|
2167
|
-
|
|
2211
|
+
|
|
2168
2212
|
} catch (error) {
|
|
2169
2213
|
console.warn('[UIManager] markdown-it parsing failed, falling back to basic formatting:', error);
|
|
2170
2214
|
// Fall through to basic formatting
|
|
2171
2215
|
}
|
|
2172
2216
|
}
|
|
2173
|
-
|
|
2217
|
+
|
|
2174
2218
|
// Fallback: Enhanced basic markdown-like formatting
|
|
2175
2219
|
formattedContent = this.preprocessTaskLists(formattedContent);
|
|
2176
|
-
|
|
2220
|
+
|
|
2177
2221
|
// Bold text **text**
|
|
2178
2222
|
formattedContent = formattedContent.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
|
|
2179
|
-
|
|
2223
|
+
|
|
2180
2224
|
// Italic text *text*
|
|
2181
2225
|
formattedContent = formattedContent.replace(/\*(.*?)\*/g, '<em>$1</em>');
|
|
2182
|
-
|
|
2226
|
+
|
|
2183
2227
|
// Code blocks ```code```
|
|
2184
2228
|
formattedContent = formattedContent.replace(/```([\s\S]*?)```/g, '<pre class="code-block">$1</pre>');
|
|
2185
|
-
|
|
2229
|
+
|
|
2186
2230
|
// Inline code `code`
|
|
2187
2231
|
formattedContent = formattedContent.replace(/`([^`]+)`/g, '<code class="inline-code">$1</code>');
|
|
2188
|
-
|
|
2232
|
+
|
|
2189
2233
|
// Headers
|
|
2190
2234
|
formattedContent = formattedContent.replace(/^### (.*$)/gm, '<h3>$1</h3>');
|
|
2191
2235
|
formattedContent = formattedContent.replace(/^## (.*$)/gm, '<h2>$1</h2>');
|
|
2192
2236
|
formattedContent = formattedContent.replace(/^# (.*$)/gm, '<h1>$1</h1>');
|
|
2193
|
-
|
|
2237
|
+
|
|
2194
2238
|
// Lists - regular
|
|
2195
2239
|
formattedContent = formattedContent.replace(/^- (.*$)/gm, '<li>$1</li>');
|
|
2196
2240
|
formattedContent = formattedContent.replace(/(<li>.*<\/li>)/s, '<ul>$1</ul>');
|
|
2197
|
-
|
|
2241
|
+
|
|
2198
2242
|
// Convert URLs to links
|
|
2199
2243
|
const httpUrlRegex = /(https?:\/\/[^\s]+)/g;
|
|
2200
2244
|
formattedContent = formattedContent.replace(httpUrlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
|
|
2201
|
-
|
|
2245
|
+
|
|
2202
2246
|
// Convert newlines to br tags
|
|
2203
2247
|
formattedContent = formattedContent.replace(/\n/g, '<br>');
|
|
2204
|
-
|
|
2248
|
+
|
|
2205
2249
|
return formattedContent;
|
|
2206
2250
|
}
|
|
2207
2251
|
|
|
@@ -2225,7 +2269,7 @@ class VibeSurfUIManager {
|
|
|
2225
2269
|
if (this.elements.taskInput) {
|
|
2226
2270
|
this.elements.taskInput.value = '';
|
|
2227
2271
|
}
|
|
2228
|
-
|
|
2272
|
+
|
|
2229
2273
|
if (this.elements.sendBtn) {
|
|
2230
2274
|
this.elements.sendBtn.disabled = true;
|
|
2231
2275
|
}
|
|
@@ -2237,14 +2281,14 @@ class VibeSurfUIManager {
|
|
|
2237
2281
|
const canProceed = await this.showTaskRunningWarning('load a different session');
|
|
2238
2282
|
if (!canProceed) return;
|
|
2239
2283
|
}
|
|
2240
|
-
|
|
2284
|
+
|
|
2241
2285
|
try {
|
|
2242
2286
|
this.showLoading('Loading session...');
|
|
2243
|
-
|
|
2287
|
+
|
|
2244
2288
|
const success = await this.sessionManager.loadSession(sessionId);
|
|
2245
|
-
|
|
2289
|
+
|
|
2246
2290
|
this.hideLoading();
|
|
2247
|
-
|
|
2291
|
+
|
|
2248
2292
|
if (!success) {
|
|
2249
2293
|
this.showNotification('Failed to load session', 'error');
|
|
2250
2294
|
}
|
|
@@ -2256,14 +2300,14 @@ class VibeSurfUIManager {
|
|
|
2256
2300
|
|
|
2257
2301
|
async updateLLMProfileSelect() {
|
|
2258
2302
|
if (!this.elements.llmProfileSelect) return;
|
|
2259
|
-
|
|
2303
|
+
|
|
2260
2304
|
// Preserve current user selection if any (to avoid overriding during profile updates)
|
|
2261
2305
|
const currentSelection = this.elements.llmProfileSelect.value;
|
|
2262
|
-
|
|
2306
|
+
|
|
2263
2307
|
const profiles = this.settingsManager.getLLMProfiles();
|
|
2264
2308
|
const select = this.elements.llmProfileSelect;
|
|
2265
2309
|
select.innerHTML = '';
|
|
2266
|
-
|
|
2310
|
+
|
|
2267
2311
|
if (profiles.length === 0) {
|
|
2268
2312
|
// Add placeholder option when no profiles available
|
|
2269
2313
|
const placeholderOption = document.createElement('option');
|
|
@@ -2279,10 +2323,10 @@ class VibeSurfUIManager {
|
|
|
2279
2323
|
emptyOption.textContent = 'Select LLM Profile...';
|
|
2280
2324
|
emptyOption.disabled = true;
|
|
2281
2325
|
select.appendChild(emptyOption);
|
|
2282
|
-
|
|
2326
|
+
|
|
2283
2327
|
// Determine selection priority: current selection > saved selection > default profile
|
|
2284
2328
|
let targetSelection = currentSelection; // Preserve current selection first
|
|
2285
|
-
|
|
2329
|
+
|
|
2286
2330
|
// If no current selection, get saved selection
|
|
2287
2331
|
if (!targetSelection) {
|
|
2288
2332
|
try {
|
|
@@ -2293,24 +2337,24 @@ class VibeSurfUIManager {
|
|
|
2293
2337
|
console.error('[UIManager] Failed to get saved LLM profile selection:', error);
|
|
2294
2338
|
}
|
|
2295
2339
|
}
|
|
2296
|
-
|
|
2340
|
+
|
|
2297
2341
|
// Add actual profiles
|
|
2298
2342
|
let hasSelectedProfile = false;
|
|
2299
2343
|
let hasTargetProfile = false;
|
|
2300
|
-
|
|
2344
|
+
|
|
2301
2345
|
profiles.forEach(profile => {
|
|
2302
2346
|
const option = document.createElement('option');
|
|
2303
2347
|
option.value = profile.profile_name;
|
|
2304
2348
|
option.textContent = profile.profile_name;
|
|
2305
|
-
|
|
2349
|
+
|
|
2306
2350
|
// Check if this profile matches our target selection
|
|
2307
2351
|
if (targetSelection && profile.profile_name === targetSelection) {
|
|
2308
2352
|
hasTargetProfile = true;
|
|
2309
2353
|
}
|
|
2310
|
-
|
|
2354
|
+
|
|
2311
2355
|
select.appendChild(option);
|
|
2312
2356
|
});
|
|
2313
|
-
|
|
2357
|
+
|
|
2314
2358
|
// Apply selection based on priority
|
|
2315
2359
|
if (hasTargetProfile) {
|
|
2316
2360
|
select.value = targetSelection;
|
|
@@ -2323,9 +2367,9 @@ class VibeSurfUIManager {
|
|
|
2323
2367
|
hasSelectedProfile = true;
|
|
2324
2368
|
}
|
|
2325
2369
|
}
|
|
2326
|
-
|
|
2370
|
+
|
|
2327
2371
|
}
|
|
2328
|
-
|
|
2372
|
+
|
|
2329
2373
|
// Update send button state if taskInput exists
|
|
2330
2374
|
if (this.elements.taskInput) {
|
|
2331
2375
|
this.handleTaskInputChange({ target: this.elements.taskInput });
|
|
@@ -2338,7 +2382,7 @@ class VibeSurfUIManager {
|
|
|
2338
2382
|
const message = isConfigureAction
|
|
2339
2383
|
? 'No LLM profiles are configured. You need to configure at least one LLM profile before sending tasks.'
|
|
2340
2384
|
: 'Please select an LLM profile from the dropdown to proceed with your task.';
|
|
2341
|
-
|
|
2385
|
+
|
|
2342
2386
|
const options = isConfigureAction
|
|
2343
2387
|
? {
|
|
2344
2388
|
confirmText: 'Open Settings',
|
|
@@ -2357,7 +2401,7 @@ class VibeSurfUIManager {
|
|
|
2357
2401
|
this.handleShowLLMSettings();
|
|
2358
2402
|
}
|
|
2359
2403
|
};
|
|
2360
|
-
|
|
2404
|
+
|
|
2361
2405
|
this.modalManager.showWarningModal(title, message, options);
|
|
2362
2406
|
}
|
|
2363
2407
|
|
|
@@ -2367,7 +2411,7 @@ class VibeSurfUIManager {
|
|
|
2367
2411
|
const message = isConfigureAction
|
|
2368
2412
|
? 'No voice recognition (ASR) profiles are configured. You need to configure at least one voice profile before using voice input.'
|
|
2369
2413
|
: 'Please configure a voice recognition profile to use voice input functionality.';
|
|
2370
|
-
|
|
2414
|
+
|
|
2371
2415
|
const options = isConfigureAction
|
|
2372
2416
|
? {
|
|
2373
2417
|
confirmText: 'Open Voice Settings',
|
|
@@ -2383,7 +2427,7 @@ class VibeSurfUIManager {
|
|
|
2383
2427
|
this.handleShowVoiceSettings();
|
|
2384
2428
|
}
|
|
2385
2429
|
};
|
|
2386
|
-
|
|
2430
|
+
|
|
2387
2431
|
this.modalManager.showWarningModal(title, message, options);
|
|
2388
2432
|
}
|
|
2389
2433
|
|
|
@@ -2394,10 +2438,10 @@ class VibeSurfUIManager {
|
|
|
2394
2438
|
const canProceed = await this.showTaskRunningWarning('access voice settings');
|
|
2395
2439
|
if (!canProceed) return;
|
|
2396
2440
|
}
|
|
2397
|
-
|
|
2441
|
+
|
|
2398
2442
|
// Show settings and navigate directly to Voice profiles tab
|
|
2399
2443
|
this.settingsManager.showSettings();
|
|
2400
|
-
|
|
2444
|
+
|
|
2401
2445
|
// Switch to Voice profiles tab after settings are shown
|
|
2402
2446
|
setTimeout(() => {
|
|
2403
2447
|
const voiceTab = document.querySelector('.settings-tab[data-tab="voice-profiles"]');
|
|
@@ -2408,14 +2452,14 @@ class VibeSurfUIManager {
|
|
|
2408
2452
|
}
|
|
2409
2453
|
|
|
2410
2454
|
showLLMConnectionFailedModal(errorData) {
|
|
2411
|
-
|
|
2412
|
-
|
|
2455
|
+
|
|
2456
|
+
|
|
2413
2457
|
const llmProfile = errorData.llm_profile || 'unknown';
|
|
2414
2458
|
const errorMessage = errorData.message || 'Cannot connect to LLM API';
|
|
2415
|
-
|
|
2459
|
+
|
|
2416
2460
|
const title = 'LLM Connection Failed';
|
|
2417
2461
|
const message = `${errorMessage}\n\nThe LLM profile "${llmProfile}" cannot be reached. Please check your LLM configuration and API credentials.`;
|
|
2418
|
-
|
|
2462
|
+
|
|
2419
2463
|
const options = {
|
|
2420
2464
|
confirmText: 'Update LLM Profile',
|
|
2421
2465
|
cancelText: 'Cancel',
|
|
@@ -2424,8 +2468,8 @@ class VibeSurfUIManager {
|
|
|
2424
2468
|
this.handleShowLLMProfileSettings(llmProfile);
|
|
2425
2469
|
}
|
|
2426
2470
|
};
|
|
2427
|
-
|
|
2428
|
-
|
|
2471
|
+
|
|
2472
|
+
|
|
2429
2473
|
this.modalManager.showWarningModal(title, message, options);
|
|
2430
2474
|
}
|
|
2431
2475
|
|
|
@@ -2436,10 +2480,10 @@ class VibeSurfUIManager {
|
|
|
2436
2480
|
const canProceed = await this.showTaskRunningWarning('access settings');
|
|
2437
2481
|
if (!canProceed) return;
|
|
2438
2482
|
}
|
|
2439
|
-
|
|
2483
|
+
|
|
2440
2484
|
// Show settings and navigate to the specific LLM profile
|
|
2441
2485
|
this.settingsManager.showSettings();
|
|
2442
|
-
|
|
2486
|
+
|
|
2443
2487
|
// Navigate to LLM profiles section and edit the specific profile
|
|
2444
2488
|
// We'll add a method to settings manager to handle this
|
|
2445
2489
|
if (this.settingsManager.navigateToLLMProfile) {
|
|
@@ -2450,7 +2494,7 @@ class VibeSurfUIManager {
|
|
|
2450
2494
|
// Loading and notifications
|
|
2451
2495
|
showLoading(message = 'Loading...') {
|
|
2452
2496
|
this.state.isLoading = true;
|
|
2453
|
-
|
|
2497
|
+
|
|
2454
2498
|
if (this.elements.loadingOverlay) {
|
|
2455
2499
|
const textElement = this.elements.loadingOverlay.querySelector('.loading-text');
|
|
2456
2500
|
if (textElement) {
|
|
@@ -2462,7 +2506,7 @@ class VibeSurfUIManager {
|
|
|
2462
2506
|
|
|
2463
2507
|
hideLoading() {
|
|
2464
2508
|
this.state.isLoading = false;
|
|
2465
|
-
|
|
2509
|
+
|
|
2466
2510
|
if (this.elements.loadingOverlay) {
|
|
2467
2511
|
this.elements.loadingOverlay.classList.add('hidden');
|
|
2468
2512
|
}
|
|
@@ -2470,28 +2514,30 @@ class VibeSurfUIManager {
|
|
|
2470
2514
|
|
|
2471
2515
|
showNotification(message, type = 'info') {
|
|
2472
2516
|
// Map UI notification types to valid Chrome notification types
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
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
|
+
}
|
|
2495
2541
|
}
|
|
2496
2542
|
|
|
2497
2543
|
// Restore LLM profile selection from user settings storage
|
|
@@ -2500,13 +2546,13 @@ class VibeSurfUIManager {
|
|
|
2500
2546
|
if (this.userSettingsStorage && this.elements.llmProfileSelect) {
|
|
2501
2547
|
// Check current options available
|
|
2502
2548
|
const availableOptions = Array.from(this.elements.llmProfileSelect.options).map(opt => opt.value);
|
|
2503
|
-
|
|
2549
|
+
|
|
2504
2550
|
const savedLlmProfile = await this.userSettingsStorage.getSelectedLlmProfile();
|
|
2505
|
-
|
|
2551
|
+
|
|
2506
2552
|
if (savedLlmProfile && savedLlmProfile.trim() !== '') {
|
|
2507
2553
|
// Check if the saved profile exists in the current options
|
|
2508
2554
|
const option = this.elements.llmProfileSelect.querySelector(`option[value="${savedLlmProfile}"]`);
|
|
2509
|
-
|
|
2555
|
+
|
|
2510
2556
|
if (option) {
|
|
2511
2557
|
this.elements.llmProfileSelect.value = savedLlmProfile;
|
|
2512
2558
|
} else {
|
|
@@ -2515,7 +2561,7 @@ class VibeSurfUIManager {
|
|
|
2515
2561
|
} else {
|
|
2516
2562
|
// Check localStorage backup for browser restart scenarios
|
|
2517
2563
|
const backupProfile = localStorage.getItem('vibesurf-llm-profile-backup');
|
|
2518
|
-
|
|
2564
|
+
|
|
2519
2565
|
if (backupProfile) {
|
|
2520
2566
|
const option = this.elements.llmProfileSelect.querySelector(`option[value="${backupProfile}"]`);
|
|
2521
2567
|
if (option) {
|
|
@@ -2538,10 +2584,10 @@ class VibeSurfUIManager {
|
|
|
2538
2584
|
// Check and update voice button state based on ASR profile availability
|
|
2539
2585
|
async updateVoiceButtonState() {
|
|
2540
2586
|
if (!this.elements.voiceRecordBtn) return;
|
|
2541
|
-
|
|
2587
|
+
|
|
2542
2588
|
try {
|
|
2543
2589
|
const isVoiceAvailable = await this.voiceRecorder.isVoiceRecordingAvailable();
|
|
2544
|
-
|
|
2590
|
+
|
|
2545
2591
|
if (!isVoiceAvailable) {
|
|
2546
2592
|
// Add visual indication but keep button enabled for click handling
|
|
2547
2593
|
this.elements.voiceRecordBtn.classList.add('voice-disabled');
|
|
@@ -2570,56 +2616,58 @@ class VibeSurfUIManager {
|
|
|
2570
2616
|
// Check for microphone permission parameter first (like Doubao AI)
|
|
2571
2617
|
const urlParams = new URLSearchParams(window.location.search);
|
|
2572
2618
|
const enterParam = urlParams.get('enter');
|
|
2573
|
-
|
|
2619
|
+
|
|
2574
2620
|
if (enterParam === 'mic-permission') {
|
|
2575
2621
|
console.log('[UIManager] Detected microphone permission request parameter');
|
|
2576
2622
|
this.showMicrophonePermissionRequest();
|
|
2577
2623
|
return; // Skip normal initialization for permission request
|
|
2578
2624
|
}
|
|
2579
|
-
|
|
2625
|
+
|
|
2580
2626
|
this.showLoading('Initializing VibeSurf...');
|
|
2581
|
-
|
|
2627
|
+
|
|
2582
2628
|
// Initialize user settings storage first
|
|
2583
2629
|
if (this.userSettingsStorage) {
|
|
2584
|
-
|
|
2630
|
+
|
|
2585
2631
|
await this.userSettingsStorage.initialize();
|
|
2586
|
-
|
|
2632
|
+
|
|
2587
2633
|
} else {
|
|
2588
2634
|
console.error('[UIManager] userSettingsStorage not available during initialization');
|
|
2589
2635
|
}
|
|
2590
|
-
|
|
2636
|
+
|
|
2591
2637
|
// Load settings data through settings manager
|
|
2592
|
-
|
|
2638
|
+
|
|
2593
2639
|
await this.settingsManager.loadSettingsData();
|
|
2594
|
-
|
|
2595
|
-
|
|
2640
|
+
|
|
2641
|
+
|
|
2596
2642
|
// Now restore user selections AFTER profiles are loaded but before any other initialization
|
|
2597
|
-
|
|
2643
|
+
|
|
2598
2644
|
this.isRestoringSelections = true;
|
|
2599
|
-
|
|
2645
|
+
|
|
2600
2646
|
try {
|
|
2601
2647
|
// Restore LLM profile selection first
|
|
2602
2648
|
await this.restoreLlmProfileSelection();
|
|
2603
|
-
|
|
2649
|
+
|
|
2604
2650
|
// Restore agent mode selection
|
|
2605
2651
|
await this.restoreAgentModeSelection();
|
|
2606
2652
|
} finally {
|
|
2607
2653
|
this.isRestoringSelections = false;
|
|
2608
2654
|
}
|
|
2609
|
-
|
|
2655
|
+
|
|
2610
2656
|
// Check and update voice button state based on ASR profile availability
|
|
2611
2657
|
await this.updateVoiceButtonState();
|
|
2612
|
-
|
|
2613
|
-
|
|
2658
|
+
|
|
2659
|
+
// Check version and show upgrade button if needed
|
|
2660
|
+
await this.checkVersionAndShowUpgrade();
|
|
2661
|
+
|
|
2614
2662
|
// Create initial session if none exists
|
|
2615
|
-
|
|
2663
|
+
|
|
2616
2664
|
if (!this.sessionManager.getCurrentSession()) {
|
|
2617
|
-
|
|
2665
|
+
|
|
2618
2666
|
await this.sessionManager.createSession();
|
|
2619
2667
|
}
|
|
2620
|
-
|
|
2668
|
+
|
|
2621
2669
|
this.hideLoading();
|
|
2622
|
-
|
|
2670
|
+
|
|
2623
2671
|
} catch (error) {
|
|
2624
2672
|
this.hideLoading();
|
|
2625
2673
|
console.error('[UIManager] Initialization failed:', error);
|
|
@@ -2632,7 +2680,7 @@ class VibeSurfUIManager {
|
|
|
2632
2680
|
console.log('[UIManager] Showing simplified microphone permission request');
|
|
2633
2681
|
console.log('[UIManager] Current URL:', window.location.href);
|
|
2634
2682
|
console.log('[UIManager] URL params:', window.location.search);
|
|
2635
|
-
|
|
2683
|
+
|
|
2636
2684
|
// Simple approach: just try to get permission directly
|
|
2637
2685
|
this.requestMicrophonePermissionDirectly();
|
|
2638
2686
|
}
|
|
@@ -2640,24 +2688,24 @@ class VibeSurfUIManager {
|
|
|
2640
2688
|
// Direct microphone permission request (simplified like Doubao AI)
|
|
2641
2689
|
async requestMicrophonePermissionDirectly() {
|
|
2642
2690
|
console.log('[UIManager] Requesting microphone permission directly');
|
|
2643
|
-
|
|
2691
|
+
|
|
2644
2692
|
try {
|
|
2645
2693
|
// Immediately try to get microphone permission
|
|
2646
2694
|
console.log('[UIManager] Calling getUserMedia...');
|
|
2647
2695
|
console.log('[UIManager] User agent:', navigator.userAgent);
|
|
2648
2696
|
console.log('[UIManager] Location protocol:', window.location.protocol);
|
|
2649
2697
|
console.log('[UIManager] Location href:', window.location.href);
|
|
2650
|
-
|
|
2698
|
+
|
|
2651
2699
|
const stream = await navigator.mediaDevices.getUserMedia({
|
|
2652
2700
|
audio: true,
|
|
2653
2701
|
video: false
|
|
2654
2702
|
});
|
|
2655
|
-
|
|
2703
|
+
|
|
2656
2704
|
console.log('[UIManager] Microphone permission granted!');
|
|
2657
|
-
|
|
2705
|
+
|
|
2658
2706
|
// Stop the stream immediately (we just need permission)
|
|
2659
2707
|
stream.getTracks().forEach(track => track.stop());
|
|
2660
|
-
|
|
2708
|
+
|
|
2661
2709
|
// Send success message back to original tab
|
|
2662
2710
|
console.log('[UIManager] Sending success message...');
|
|
2663
2711
|
chrome.runtime.sendMessage({
|
|
@@ -2666,19 +2714,19 @@ class VibeSurfUIManager {
|
|
|
2666
2714
|
}, (response) => {
|
|
2667
2715
|
console.log('[UIManager] Success message response:', response);
|
|
2668
2716
|
});
|
|
2669
|
-
|
|
2717
|
+
|
|
2670
2718
|
// Close this tab after a short delay
|
|
2671
2719
|
setTimeout(() => {
|
|
2672
2720
|
console.log('[UIManager] Closing tab...');
|
|
2673
2721
|
window.close();
|
|
2674
2722
|
}, 1000);
|
|
2675
|
-
|
|
2723
|
+
|
|
2676
2724
|
} catch (error) {
|
|
2677
2725
|
console.error('[UIManager] Microphone permission denied:', error);
|
|
2678
2726
|
console.log('[UIManager] Error name:', error.name);
|
|
2679
2727
|
console.log('[UIManager] Error message:', error.message);
|
|
2680
2728
|
console.log('[UIManager] Error stack:', error.stack);
|
|
2681
|
-
|
|
2729
|
+
|
|
2682
2730
|
// Send error message back to original tab
|
|
2683
2731
|
console.log('[UIManager] Sending error message...');
|
|
2684
2732
|
chrome.runtime.sendMessage({
|
|
@@ -2689,7 +2737,7 @@ class VibeSurfUIManager {
|
|
|
2689
2737
|
}, (response) => {
|
|
2690
2738
|
console.log('[UIManager] Error message response:', response);
|
|
2691
2739
|
});
|
|
2692
|
-
|
|
2740
|
+
|
|
2693
2741
|
// Close this tab after a short delay
|
|
2694
2742
|
setTimeout(() => {
|
|
2695
2743
|
console.log('[UIManager] Closing tab after error...');
|
|
@@ -2700,13 +2748,13 @@ class VibeSurfUIManager {
|
|
|
2700
2748
|
// Restore agent mode selection from user settings storage
|
|
2701
2749
|
async restoreAgentModeSelection() {
|
|
2702
2750
|
try {
|
|
2703
|
-
|
|
2751
|
+
|
|
2704
2752
|
if (this.userSettingsStorage && this.elements.agentModeSelect) {
|
|
2705
2753
|
// Check current options available
|
|
2706
2754
|
const availableOptions = Array.from(this.elements.agentModeSelect.options).map(opt => opt.value);
|
|
2707
|
-
|
|
2755
|
+
|
|
2708
2756
|
const savedAgentMode = await this.userSettingsStorage.getSelectedAgentMode();
|
|
2709
|
-
|
|
2757
|
+
|
|
2710
2758
|
if (savedAgentMode && savedAgentMode.trim() !== '') {
|
|
2711
2759
|
// Restore any saved agent mode, including 'thinking'
|
|
2712
2760
|
this.elements.agentModeSelect.value = savedAgentMode;
|
|
@@ -2721,7 +2769,7 @@ class VibeSurfUIManager {
|
|
|
2721
2769
|
} else {
|
|
2722
2770
|
// Check localStorage backup for browser restart scenarios
|
|
2723
2771
|
const backupMode = localStorage.getItem('vibesurf-agent-mode-backup');
|
|
2724
|
-
|
|
2772
|
+
|
|
2725
2773
|
if (backupMode) {
|
|
2726
2774
|
const option = this.elements.agentModeSelect.querySelector(`option[value="${backupMode}"]`);
|
|
2727
2775
|
if (option) {
|
|
@@ -2741,6 +2789,77 @@ class VibeSurfUIManager {
|
|
|
2741
2789
|
}
|
|
2742
2790
|
}
|
|
2743
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
|
+
|
|
2744
2863
|
// Cleanup
|
|
2745
2864
|
destroy() {
|
|
2746
2865
|
// Prevent multiple cleanup calls
|
|
@@ -2748,20 +2867,20 @@ class VibeSurfUIManager {
|
|
|
2748
2867
|
console.log('[UIManager] Cleanup already in progress, skipping...');
|
|
2749
2868
|
return;
|
|
2750
2869
|
}
|
|
2751
|
-
|
|
2870
|
+
|
|
2752
2871
|
this.isDestroying = true;
|
|
2753
2872
|
console.log('[UIManager] Destroying UI manager...');
|
|
2754
|
-
|
|
2873
|
+
|
|
2755
2874
|
try {
|
|
2756
2875
|
// Stop task status monitoring
|
|
2757
2876
|
this.stopTaskStatusMonitoring();
|
|
2758
|
-
|
|
2877
|
+
|
|
2759
2878
|
// Cleanup voice recorder
|
|
2760
2879
|
if (this.voiceRecorder) {
|
|
2761
2880
|
this.voiceRecorder.cleanup();
|
|
2762
2881
|
this.voiceRecorder = null;
|
|
2763
2882
|
}
|
|
2764
|
-
|
|
2883
|
+
|
|
2765
2884
|
// Cleanup managers with error handling
|
|
2766
2885
|
if (this.settingsManager) {
|
|
2767
2886
|
try {
|
|
@@ -2773,7 +2892,7 @@ class VibeSurfUIManager {
|
|
|
2773
2892
|
}
|
|
2774
2893
|
this.settingsManager = null;
|
|
2775
2894
|
}
|
|
2776
|
-
|
|
2895
|
+
|
|
2777
2896
|
if (this.historyManager) {
|
|
2778
2897
|
try {
|
|
2779
2898
|
if (typeof this.historyManager.destroy === 'function') {
|
|
@@ -2784,7 +2903,7 @@ class VibeSurfUIManager {
|
|
|
2784
2903
|
}
|
|
2785
2904
|
this.historyManager = null;
|
|
2786
2905
|
}
|
|
2787
|
-
|
|
2906
|
+
|
|
2788
2907
|
if (this.fileManager) {
|
|
2789
2908
|
try {
|
|
2790
2909
|
if (typeof this.fileManager.destroy === 'function') {
|
|
@@ -2795,7 +2914,7 @@ class VibeSurfUIManager {
|
|
|
2795
2914
|
}
|
|
2796
2915
|
this.fileManager = null;
|
|
2797
2916
|
}
|
|
2798
|
-
|
|
2917
|
+
|
|
2799
2918
|
if (this.modalManager) {
|
|
2800
2919
|
try {
|
|
2801
2920
|
if (typeof this.modalManager.destroy === 'function') {
|
|
@@ -2806,14 +2925,14 @@ class VibeSurfUIManager {
|
|
|
2806
2925
|
}
|
|
2807
2926
|
this.modalManager = null;
|
|
2808
2927
|
}
|
|
2809
|
-
|
|
2928
|
+
|
|
2810
2929
|
// Clear state
|
|
2811
2930
|
this.state = {
|
|
2812
2931
|
isLoading: false,
|
|
2813
2932
|
isTaskRunning: false,
|
|
2814
2933
|
taskInfo: null
|
|
2815
2934
|
};
|
|
2816
|
-
|
|
2935
|
+
|
|
2817
2936
|
console.log('[UIManager] UI manager cleanup complete');
|
|
2818
2937
|
} catch (error) {
|
|
2819
2938
|
console.error('[UIManager] Error during destroy:', error);
|
|
@@ -2824,8 +2943,8 @@ class VibeSurfUIManager {
|
|
|
2824
2943
|
|
|
2825
2944
|
// Tab Selector Methods
|
|
2826
2945
|
initializeTabSelector() {
|
|
2827
|
-
|
|
2828
|
-
|
|
2946
|
+
|
|
2947
|
+
|
|
2829
2948
|
// Initialize tab selector state
|
|
2830
2949
|
this.tabSelectorState = {
|
|
2831
2950
|
isVisible: false,
|
|
@@ -2834,19 +2953,19 @@ class VibeSurfUIManager {
|
|
|
2834
2953
|
atPosition: -1 // Position where @ was typed
|
|
2835
2954
|
};
|
|
2836
2955
|
|
|
2837
|
-
|
|
2838
|
-
|
|
2956
|
+
|
|
2957
|
+
|
|
2839
2958
|
// Bind tab selector events
|
|
2840
2959
|
this.bindTabSelectorEvents();
|
|
2841
2960
|
}
|
|
2842
2961
|
|
|
2843
2962
|
bindTabSelectorEvents() {
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2963
|
+
|
|
2964
|
+
|
|
2965
|
+
|
|
2847
2966
|
// Select all radio button
|
|
2848
2967
|
this.elements.selectAllTabs?.addEventListener('change', this.handleSelectAllTabs.bind(this));
|
|
2849
|
-
|
|
2968
|
+
|
|
2850
2969
|
// Hide on click outside
|
|
2851
2970
|
document.addEventListener('click', (event) => {
|
|
2852
2971
|
if (this.tabSelectorState.isVisible &&
|
|
@@ -2856,8 +2975,8 @@ class VibeSurfUIManager {
|
|
|
2856
2975
|
this.hideTabSelector();
|
|
2857
2976
|
}
|
|
2858
2977
|
});
|
|
2859
|
-
|
|
2860
|
-
|
|
2978
|
+
|
|
2979
|
+
|
|
2861
2980
|
}
|
|
2862
2981
|
|
|
2863
2982
|
handleTabSelectorInput(event) {
|
|
@@ -2866,15 +2985,15 @@ class VibeSurfUIManager {
|
|
|
2866
2985
|
console.warn('[UIManager] Tab selector state not initialized');
|
|
2867
2986
|
return;
|
|
2868
2987
|
}
|
|
2869
|
-
|
|
2988
|
+
|
|
2870
2989
|
const inputValue = event.target.value;
|
|
2871
2990
|
const cursorPosition = event.target.selectionStart;
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2991
|
+
|
|
2992
|
+
|
|
2993
|
+
|
|
2875
2994
|
// Check if @ was just typed
|
|
2876
2995
|
if (inputValue[cursorPosition - 1] === '@') {
|
|
2877
|
-
|
|
2996
|
+
|
|
2878
2997
|
this.tabSelectorState.atPosition = cursorPosition - 1;
|
|
2879
2998
|
this.showTabSelector();
|
|
2880
2999
|
} else if (this.tabSelectorState.isVisible) {
|
|
@@ -2882,24 +3001,24 @@ class VibeSurfUIManager {
|
|
|
2882
3001
|
if (this.tabSelectorState.atPosition >= 0 &&
|
|
2883
3002
|
(this.tabSelectorState.atPosition >= inputValue.length ||
|
|
2884
3003
|
inputValue[this.tabSelectorState.atPosition] !== '@')) {
|
|
2885
|
-
|
|
3004
|
+
|
|
2886
3005
|
this.hideTabSelector();
|
|
2887
3006
|
return;
|
|
2888
3007
|
}
|
|
2889
|
-
|
|
3008
|
+
|
|
2890
3009
|
// Hide tab selector if user continues typing after @
|
|
2891
3010
|
const textAfterAt = inputValue.substring(this.tabSelectorState.atPosition + 1, cursorPosition);
|
|
2892
3011
|
if (textAfterAt.length > 0 && !textAfterAt.match(/^[\s]*$/)) {
|
|
2893
|
-
|
|
3012
|
+
|
|
2894
3013
|
this.hideTabSelector();
|
|
2895
3014
|
}
|
|
2896
3015
|
}
|
|
2897
3016
|
}
|
|
2898
3017
|
|
|
2899
3018
|
async showTabSelector() {
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
3019
|
+
|
|
3020
|
+
|
|
3021
|
+
|
|
2903
3022
|
if (!this.elements.tabSelectorDropdown || !this.elements.taskInput) {
|
|
2904
3023
|
console.error('[UIManager] Tab selector elements not found', {
|
|
2905
3024
|
dropdown: this.elements.tabSelectorDropdown,
|
|
@@ -2909,26 +3028,26 @@ class VibeSurfUIManager {
|
|
|
2909
3028
|
}
|
|
2910
3029
|
|
|
2911
3030
|
try {
|
|
2912
|
-
|
|
3031
|
+
|
|
2913
3032
|
// Fetch tab data from backend
|
|
2914
3033
|
await this.populateTabSelector();
|
|
2915
|
-
|
|
2916
|
-
|
|
3034
|
+
|
|
3035
|
+
|
|
2917
3036
|
// Position the dropdown relative to the input
|
|
2918
3037
|
this.positionTabSelector();
|
|
2919
|
-
|
|
2920
|
-
|
|
3038
|
+
|
|
3039
|
+
|
|
2921
3040
|
// Show the dropdown with explicit visibility
|
|
2922
3041
|
this.elements.tabSelectorDropdown.classList.remove('hidden');
|
|
2923
3042
|
this.elements.tabSelectorDropdown.style.display = 'block';
|
|
2924
3043
|
this.elements.tabSelectorDropdown.style.visibility = 'visible';
|
|
2925
3044
|
this.elements.tabSelectorDropdown.style.opacity = '1';
|
|
2926
3045
|
this.tabSelectorState.isVisible = true;
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
3046
|
+
|
|
3047
|
+
|
|
3048
|
+
|
|
3049
|
+
|
|
3050
|
+
|
|
2932
3051
|
} catch (error) {
|
|
2933
3052
|
console.error('[UIManager] Failed to show tab selector:', error);
|
|
2934
3053
|
this.showNotification('Failed to load browser tabs', 'error');
|
|
@@ -2943,21 +3062,21 @@ class VibeSurfUIManager {
|
|
|
2943
3062
|
this.tabSelectorState.isVisible = false;
|
|
2944
3063
|
this.tabSelectorState.selectedTabs = [];
|
|
2945
3064
|
this.tabSelectorState.atPosition = -1;
|
|
2946
|
-
|
|
2947
|
-
|
|
3065
|
+
|
|
3066
|
+
|
|
2948
3067
|
}
|
|
2949
3068
|
|
|
2950
3069
|
positionTabSelector() {
|
|
2951
3070
|
if (!this.elements.tabSelectorDropdown || !this.elements.taskInput) return;
|
|
2952
|
-
|
|
3071
|
+
|
|
2953
3072
|
const inputRect = this.elements.taskInput.getBoundingClientRect();
|
|
2954
3073
|
const dropdown = this.elements.tabSelectorDropdown;
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
3074
|
+
|
|
3075
|
+
|
|
3076
|
+
|
|
2958
3077
|
// Calculate 90% width of input
|
|
2959
3078
|
const dropdownWidth = inputRect.width * 0.9;
|
|
2960
|
-
|
|
3079
|
+
|
|
2961
3080
|
// Position dropdown ABOVE the input (not below)
|
|
2962
3081
|
dropdown.style.position = 'fixed';
|
|
2963
3082
|
dropdown.style.bottom = `${window.innerHeight - inputRect.top + 5}px`; // Above the input
|
|
@@ -2966,38 +3085,38 @@ class VibeSurfUIManager {
|
|
|
2966
3085
|
dropdown.style.zIndex = '9999';
|
|
2967
3086
|
dropdown.style.maxHeight = '300px';
|
|
2968
3087
|
dropdown.style.overflowY = 'auto';
|
|
2969
|
-
|
|
2970
|
-
|
|
3088
|
+
|
|
3089
|
+
|
|
2971
3090
|
}
|
|
2972
3091
|
|
|
2973
3092
|
async populateTabSelector() {
|
|
2974
3093
|
try {
|
|
2975
|
-
|
|
3094
|
+
|
|
2976
3095
|
// Get all tabs and active tab from backend
|
|
2977
3096
|
const [allTabsResponse, activeTabResponse] = await Promise.all([
|
|
2978
3097
|
this.apiClient.getAllBrowserTabs(),
|
|
2979
3098
|
this.apiClient.getActiveBrowserTab()
|
|
2980
3099
|
]);
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
3100
|
+
|
|
3101
|
+
|
|
3102
|
+
|
|
2984
3103
|
const allTabs = allTabsResponse.tabs || allTabsResponse || {};
|
|
2985
3104
|
const activeTab = activeTabResponse.tab || activeTabResponse || {};
|
|
2986
3105
|
const activeTabId = Object.keys(activeTab)[0];
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
3106
|
+
|
|
3107
|
+
|
|
3108
|
+
|
|
2990
3109
|
this.tabSelectorState.allTabs = allTabs;
|
|
2991
|
-
|
|
3110
|
+
|
|
2992
3111
|
// Clear existing options
|
|
2993
3112
|
if (this.elements.tabOptionsList) {
|
|
2994
3113
|
this.elements.tabOptionsList.innerHTML = '';
|
|
2995
|
-
|
|
3114
|
+
|
|
2996
3115
|
} else {
|
|
2997
3116
|
console.error('[UIManager] tabOptionsList element not found!');
|
|
2998
3117
|
return;
|
|
2999
3118
|
}
|
|
3000
|
-
|
|
3119
|
+
|
|
3001
3120
|
// Add fallback test data if no tabs returned
|
|
3002
3121
|
if (Object.keys(allTabs).length === 0) {
|
|
3003
3122
|
console.warn('[UIManager] No tabs returned from API, adding test data for debugging');
|
|
@@ -3006,31 +3125,31 @@ class VibeSurfUIManager {
|
|
|
3006
3125
|
'test-2': { title: 'Test Tab 2', url: 'https://google.com' },
|
|
3007
3126
|
'test-3': { title: 'Very Long Tab Title That Should Be Truncated', url: 'https://github.com' }
|
|
3008
3127
|
};
|
|
3009
|
-
|
|
3128
|
+
|
|
3010
3129
|
Object.entries(testTabs).forEach(([tabId, tabInfo]) => {
|
|
3011
3130
|
const isActive = tabId === 'test-1';
|
|
3012
|
-
|
|
3131
|
+
|
|
3013
3132
|
const option = this.createTabOption(tabId, tabInfo, isActive);
|
|
3014
3133
|
this.elements.tabOptionsList.appendChild(option);
|
|
3015
3134
|
});
|
|
3016
|
-
|
|
3135
|
+
|
|
3017
3136
|
this.tabSelectorState.allTabs = testTabs;
|
|
3018
3137
|
} else {
|
|
3019
3138
|
// Add real tab options
|
|
3020
3139
|
Object.entries(allTabs).forEach(([tabId, tabInfo]) => {
|
|
3021
3140
|
const isActive = tabId === activeTabId;
|
|
3022
|
-
|
|
3141
|
+
|
|
3023
3142
|
const option = this.createTabOption(tabId, tabInfo, isActive);
|
|
3024
3143
|
this.elements.tabOptionsList.appendChild(option);
|
|
3025
3144
|
});
|
|
3026
3145
|
}
|
|
3027
|
-
|
|
3146
|
+
|
|
3028
3147
|
// Reset select all checkbox
|
|
3029
3148
|
if (this.elements.selectAllTabs) {
|
|
3030
3149
|
this.elements.selectAllTabs.checked = false;
|
|
3031
3150
|
}
|
|
3032
|
-
|
|
3033
|
-
|
|
3151
|
+
|
|
3152
|
+
|
|
3034
3153
|
} catch (error) {
|
|
3035
3154
|
console.error('[UIManager] Failed to populate tab selector:', error);
|
|
3036
3155
|
throw error;
|
|
@@ -3041,12 +3160,12 @@ class VibeSurfUIManager {
|
|
|
3041
3160
|
const option = document.createElement('div');
|
|
3042
3161
|
option.className = `tab-option ${isActive ? 'active-tab' : ''}`;
|
|
3043
3162
|
option.dataset.tabId = tabId;
|
|
3044
|
-
|
|
3163
|
+
|
|
3045
3164
|
// Format title (first 20 characters)
|
|
3046
3165
|
const displayTitle = tabInfo.title ?
|
|
3047
3166
|
(tabInfo.title.length > 20 ? tabInfo.title.substring(0, 20) + '...' : tabInfo.title) :
|
|
3048
3167
|
'Unknown Title';
|
|
3049
|
-
|
|
3168
|
+
|
|
3050
3169
|
option.innerHTML = `
|
|
3051
3170
|
<input type="radio" class="tab-radio" id="tab-${tabId}" name="tab-selection" value="${tabId}">
|
|
3052
3171
|
<label for="tab-${tabId}" class="tab-label">
|
|
@@ -3055,23 +3174,23 @@ class VibeSurfUIManager {
|
|
|
3055
3174
|
${isActive ? '<span class="active-indicator">(Active)</span>' : ''}
|
|
3056
3175
|
</label>
|
|
3057
3176
|
`;
|
|
3058
|
-
|
|
3177
|
+
|
|
3059
3178
|
// Add change event to radio button for auto-confirm
|
|
3060
3179
|
const radio = option.querySelector('.tab-radio');
|
|
3061
3180
|
radio?.addEventListener('change', this.handleTabSelection.bind(this));
|
|
3062
|
-
|
|
3181
|
+
|
|
3063
3182
|
return option;
|
|
3064
3183
|
}
|
|
3065
3184
|
|
|
3066
3185
|
handleTabSelection(event) {
|
|
3067
3186
|
const tabId = event.target.value;
|
|
3068
|
-
|
|
3187
|
+
|
|
3069
3188
|
if (event.target.checked) {
|
|
3070
3189
|
// For radio buttons, replace the selected tabs array with just this tab
|
|
3071
3190
|
this.tabSelectorState.selectedTabs = [tabId];
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3191
|
+
|
|
3192
|
+
|
|
3193
|
+
|
|
3075
3194
|
// Auto-confirm selection immediately
|
|
3076
3195
|
this.confirmTabSelection();
|
|
3077
3196
|
}
|
|
@@ -3082,9 +3201,9 @@ class VibeSurfUIManager {
|
|
|
3082
3201
|
// "Select All" means list all tabs in the input
|
|
3083
3202
|
const allTabIds = Object.keys(this.tabSelectorState.allTabs);
|
|
3084
3203
|
this.tabSelectorState.selectedTabs = allTabIds;
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3204
|
+
|
|
3205
|
+
|
|
3206
|
+
|
|
3088
3207
|
// Auto-confirm selection immediately
|
|
3089
3208
|
this.confirmTabSelection();
|
|
3090
3209
|
}
|
|
@@ -3092,10 +3211,10 @@ class VibeSurfUIManager {
|
|
|
3092
3211
|
|
|
3093
3212
|
updateSelectAllState() {
|
|
3094
3213
|
if (!this.elements.selectAllTabs || !this.elements.tabOptionsList) return;
|
|
3095
|
-
|
|
3214
|
+
|
|
3096
3215
|
const checkboxes = this.elements.tabOptionsList.querySelectorAll('.tab-checkbox');
|
|
3097
3216
|
const checkedBoxes = this.elements.tabOptionsList.querySelectorAll('.tab-checkbox:checked');
|
|
3098
|
-
|
|
3217
|
+
|
|
3099
3218
|
if (checkboxes.length === 0) {
|
|
3100
3219
|
this.elements.selectAllTabs.indeterminate = false;
|
|
3101
3220
|
this.elements.selectAllTabs.checked = false;
|
|
@@ -3116,27 +3235,27 @@ class VibeSurfUIManager {
|
|
|
3116
3235
|
this.showNotification('Please select at least one tab', 'warning');
|
|
3117
3236
|
return;
|
|
3118
3237
|
}
|
|
3119
|
-
|
|
3238
|
+
|
|
3120
3239
|
// Replace @ with selected tabs information
|
|
3121
3240
|
this.insertSelectedTabsIntoInput();
|
|
3122
|
-
|
|
3241
|
+
|
|
3123
3242
|
// Hide the selector
|
|
3124
3243
|
this.hideTabSelector();
|
|
3125
|
-
|
|
3244
|
+
|
|
3126
3245
|
console.log(`[UIManager] ${this.tabSelectorState.selectedTabs.length} tab(s) selected and confirmed`);
|
|
3127
3246
|
}
|
|
3128
3247
|
|
|
3129
3248
|
insertSelectedTabsIntoInput() {
|
|
3130
3249
|
if (!this.elements.taskInput) return;
|
|
3131
|
-
|
|
3250
|
+
|
|
3132
3251
|
const input = this.elements.taskInput;
|
|
3133
3252
|
const currentValue = input.value;
|
|
3134
3253
|
const atPosition = this.tabSelectorState.atPosition;
|
|
3135
|
-
|
|
3254
|
+
|
|
3136
3255
|
// Use special Unicode characters as boundaries for easy deletion
|
|
3137
3256
|
const TAB_START_MARKER = '\u200B'; // Zero-width space
|
|
3138
3257
|
const TAB_END_MARKER = '\u200C'; // Zero-width non-joiner
|
|
3139
|
-
|
|
3258
|
+
|
|
3140
3259
|
// Create tab information string in new format: @ tab_id: title[:20]
|
|
3141
3260
|
const selectedTabsInfo = this.tabSelectorState.selectedTabs.map(tabId => {
|
|
3142
3261
|
const tabInfo = this.tabSelectorState.allTabs[tabId];
|
|
@@ -3145,17 +3264,17 @@ class VibeSurfUIManager {
|
|
|
3145
3264
|
'Unknown';
|
|
3146
3265
|
return `${TAB_START_MARKER}@ ${tabId}: ${displayTitle}${TAB_END_MARKER}`;
|
|
3147
3266
|
}).join(' ');
|
|
3148
|
-
|
|
3267
|
+
|
|
3149
3268
|
// Replace @ with tab selection (preserve the @ symbol)
|
|
3150
3269
|
const beforeAt = currentValue.substring(0, atPosition);
|
|
3151
3270
|
const afterAt = currentValue.substring(atPosition + 1);
|
|
3152
3271
|
const newValue = `${beforeAt}${selectedTabsInfo} ${afterAt}`;
|
|
3153
|
-
|
|
3272
|
+
|
|
3154
3273
|
input.value = newValue;
|
|
3155
|
-
|
|
3274
|
+
|
|
3156
3275
|
// Trigger input change event for validation
|
|
3157
3276
|
this.handleTaskInputChange({ target: input });
|
|
3158
|
-
|
|
3277
|
+
|
|
3159
3278
|
// Set cursor position after the inserted text
|
|
3160
3279
|
const newCursorPosition = beforeAt.length + selectedTabsInfo.length + 1; // Add space
|
|
3161
3280
|
input.setSelectionRange(newCursorPosition, newCursorPosition);
|
|
@@ -3167,7 +3286,7 @@ class VibeSurfUIManager {
|
|
|
3167
3286
|
if (this.tabSelectorState.selectedTabs.length === 0) {
|
|
3168
3287
|
return null;
|
|
3169
3288
|
}
|
|
3170
|
-
|
|
3289
|
+
|
|
3171
3290
|
const selectedTabsData = {};
|
|
3172
3291
|
this.tabSelectorState.selectedTabs.forEach(tabId => {
|
|
3173
3292
|
const tabInfo = this.tabSelectorState.allTabs[tabId];
|
|
@@ -3178,7 +3297,7 @@ class VibeSurfUIManager {
|
|
|
3178
3297
|
};
|
|
3179
3298
|
}
|
|
3180
3299
|
});
|
|
3181
|
-
|
|
3300
|
+
|
|
3182
3301
|
return selectedTabsData;
|
|
3183
3302
|
}
|
|
3184
3303
|
|
|
@@ -3236,10 +3355,10 @@ class VibeSurfUIManager {
|
|
|
3236
3355
|
|
|
3237
3356
|
// Update filter based on text after /
|
|
3238
3357
|
const textAfterSlash = inputValue.substring(this.skillSelectorState.slashPosition + 1, cursorPosition);
|
|
3239
|
-
|
|
3358
|
+
|
|
3240
3359
|
// Only consider text up to the next space or special character
|
|
3241
3360
|
const filterText = textAfterSlash.split(/[\s@]/)[0];
|
|
3242
|
-
|
|
3361
|
+
|
|
3243
3362
|
if (this.skillSelectorState.currentFilter !== filterText) {
|
|
3244
3363
|
this.skillSelectorState.currentFilter = filterText;
|
|
3245
3364
|
this.filterSkills();
|
|
@@ -3355,7 +3474,7 @@ class VibeSurfUIManager {
|
|
|
3355
3474
|
|
|
3356
3475
|
filterSkills() {
|
|
3357
3476
|
const filter = this.skillSelectorState.currentFilter.toLowerCase();
|
|
3358
|
-
|
|
3477
|
+
|
|
3359
3478
|
if (!filter) {
|
|
3360
3479
|
this.skillSelectorState.filteredSkills = this.skillSelectorState.allSkills;
|
|
3361
3480
|
} else {
|
|
@@ -3468,6 +3587,158 @@ class VibeSurfUIManager {
|
|
|
3468
3587
|
return skills.length > 0 ? skills : null;
|
|
3469
3588
|
}
|
|
3470
3589
|
|
|
3590
|
+
// Initialize social links from config
|
|
3591
|
+
initializeSocialLinks() {
|
|
3592
|
+
const socialLinksContainer = document.getElementById('social-links-container');
|
|
3593
|
+
if (!socialLinksContainer) {
|
|
3594
|
+
console.warn('[UIManager] Social links container not found');
|
|
3595
|
+
return;
|
|
3596
|
+
}
|
|
3597
|
+
|
|
3598
|
+
// Get social links from config
|
|
3599
|
+
const socialLinks = window.VIBESURF_CONFIG?.SOCIAL_LINKS;
|
|
3600
|
+
if (!socialLinks) {
|
|
3601
|
+
console.warn('[UIManager] Social links not found in config');
|
|
3602
|
+
return;
|
|
3603
|
+
}
|
|
3604
|
+
|
|
3605
|
+
// Clear existing content
|
|
3606
|
+
socialLinksContainer.innerHTML = '';
|
|
3607
|
+
|
|
3608
|
+
// Handle website link separately by making VibeSurf logo/text clickable
|
|
3609
|
+
const websiteUrl = socialLinks.website;
|
|
3610
|
+
if (websiteUrl) {
|
|
3611
|
+
this.initializeVibeSurfWebsiteLink(websiteUrl);
|
|
3612
|
+
}
|
|
3613
|
+
|
|
3614
|
+
// Create social link elements (excluding website)
|
|
3615
|
+
Object.entries(socialLinks).forEach(([platform, url]) => {
|
|
3616
|
+
if (platform !== 'website') {
|
|
3617
|
+
const link = this.createSocialLink(platform, url);
|
|
3618
|
+
if (link) {
|
|
3619
|
+
socialLinksContainer.appendChild(link);
|
|
3620
|
+
}
|
|
3621
|
+
}
|
|
3622
|
+
});
|
|
3623
|
+
}
|
|
3624
|
+
|
|
3625
|
+
// Make VibeSurf text clickable to link to website
|
|
3626
|
+
initializeVibeSurfWebsiteLink(websiteUrl) {
|
|
3627
|
+
// Only find elements that contain "VibeSurf" text specifically
|
|
3628
|
+
const allElements = document.querySelectorAll('*');
|
|
3629
|
+
const vibeSurfTextElements = [];
|
|
3630
|
+
|
|
3631
|
+
allElements.forEach(element => {
|
|
3632
|
+
// Only target elements that contain "VibeSurf" text and are likely text elements
|
|
3633
|
+
if (element.textContent &&
|
|
3634
|
+
element.textContent.trim() === 'VibeSurf' &&
|
|
3635
|
+
element.children.length === 0) { // Only leaf text nodes, not containers
|
|
3636
|
+
vibeSurfTextElements.push(element);
|
|
3637
|
+
}
|
|
3638
|
+
});
|
|
3639
|
+
|
|
3640
|
+
// Make only VibeSurf text elements clickable
|
|
3641
|
+
vibeSurfTextElements.forEach(element => {
|
|
3642
|
+
if (element && !element.querySelector('a')) { // Don't double-wrap already linked elements
|
|
3643
|
+
element.style.cursor = 'pointer';
|
|
3644
|
+
element.style.transition = 'opacity 0.2s ease';
|
|
3645
|
+
element.setAttribute('title', 'Login to early access alpha features');
|
|
3646
|
+
|
|
3647
|
+
// Add hover effect
|
|
3648
|
+
element.addEventListener('mouseenter', () => {
|
|
3649
|
+
element.style.opacity = '0.8';
|
|
3650
|
+
});
|
|
3651
|
+
|
|
3652
|
+
element.addEventListener('mouseleave', () => {
|
|
3653
|
+
element.style.opacity = '1';
|
|
3654
|
+
});
|
|
3655
|
+
|
|
3656
|
+
// Add click handler
|
|
3657
|
+
element.addEventListener('click', (e) => {
|
|
3658
|
+
e.preventDefault();
|
|
3659
|
+
e.stopPropagation();
|
|
3660
|
+
this.openWebsiteLink(websiteUrl);
|
|
3661
|
+
});
|
|
3662
|
+
}
|
|
3663
|
+
});
|
|
3664
|
+
}
|
|
3665
|
+
|
|
3666
|
+
// Open website link in new tab
|
|
3667
|
+
async openWebsiteLink(url) {
|
|
3668
|
+
try {
|
|
3669
|
+
console.log('[UIManager] Opening VibeSurf website:', url);
|
|
3670
|
+
|
|
3671
|
+
const result = await chrome.runtime.sendMessage({
|
|
3672
|
+
type: 'OPEN_FILE_URL',
|
|
3673
|
+
data: { fileUrl: url }
|
|
3674
|
+
});
|
|
3675
|
+
|
|
3676
|
+
if (!result || !result.success) {
|
|
3677
|
+
throw new Error(result?.error || 'Failed to open website');
|
|
3678
|
+
}
|
|
3679
|
+
|
|
3680
|
+
console.log('[UIManager] Successfully opened website tab:', result.tabId);
|
|
3681
|
+
} catch (error) {
|
|
3682
|
+
console.error('[UIManager] Error opening website:', error);
|
|
3683
|
+
this.showNotification(`Failed to open website: ${error.message}`, 'error');
|
|
3684
|
+
}
|
|
3685
|
+
}
|
|
3686
|
+
|
|
3687
|
+
// Create individual social link element
|
|
3688
|
+
createSocialLink(platform, url) {
|
|
3689
|
+
const link = document.createElement('a');
|
|
3690
|
+
link.href = url;
|
|
3691
|
+
link.className = 'social-link';
|
|
3692
|
+
link.setAttribute('data-platform', platform);
|
|
3693
|
+
link.setAttribute('target', '_blank');
|
|
3694
|
+
link.setAttribute('rel', 'noopener noreferrer');
|
|
3695
|
+
|
|
3696
|
+
// Set title and tooltip based on platform
|
|
3697
|
+
let title = '';
|
|
3698
|
+
let svg = '';
|
|
3699
|
+
|
|
3700
|
+
switch (platform.toLowerCase()) {
|
|
3701
|
+
case 'github':
|
|
3702
|
+
title = 'GitHub';
|
|
3703
|
+
svg = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3704
|
+
<path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z" fill="currentColor"/>
|
|
3705
|
+
</svg>`;
|
|
3706
|
+
break;
|
|
3707
|
+
|
|
3708
|
+
case 'discord':
|
|
3709
|
+
title = 'Discord';
|
|
3710
|
+
svg = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3711
|
+
<path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" fill="currentColor"/>
|
|
3712
|
+
</svg>`;
|
|
3713
|
+
break;
|
|
3714
|
+
|
|
3715
|
+
case 'x':
|
|
3716
|
+
case 'twitter':
|
|
3717
|
+
title = 'X (Twitter)';
|
|
3718
|
+
svg = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3719
|
+
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" fill="currentColor"/>
|
|
3720
|
+
</svg>`;
|
|
3721
|
+
break;
|
|
3722
|
+
|
|
3723
|
+
|
|
3724
|
+
case 'reportbug':
|
|
3725
|
+
title = 'Report Bug';
|
|
3726
|
+
svg = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3727
|
+
<path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.42.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z" fill="currentColor"/>
|
|
3728
|
+
</svg>`;
|
|
3729
|
+
break;
|
|
3730
|
+
|
|
3731
|
+
default:
|
|
3732
|
+
console.warn(`[UIManager] Unknown social platform: ${platform}`);
|
|
3733
|
+
return null;
|
|
3734
|
+
}
|
|
3735
|
+
|
|
3736
|
+
link.setAttribute('title', title);
|
|
3737
|
+
link.innerHTML = svg;
|
|
3738
|
+
|
|
3739
|
+
return link;
|
|
3740
|
+
}
|
|
3741
|
+
|
|
3471
3742
|
// Export for use in other modules
|
|
3472
3743
|
static exportToWindow() {
|
|
3473
3744
|
if (typeof window !== 'undefined') {
|