From 12fcc1b6341515a75b8c265ee560f515b79b2516 Mon Sep 17 00:00:00 2001 From: Saqeb Akhter Date: Thu, 5 Nov 2026 00:09:30 +0400 Subject: [PATCH 1/2] feat(preview): play linked videos inside Codeman (#45) --- docs/images/video-preview-desktop.png | Bin 0 -> 48475 bytes docs/images/video-preview-mobile.png | Bin 0 -> 13971 bytes src/web/middleware/auth.ts | 2 +- src/web/public/app.js | 6 + src/web/public/panels-ui.js | 65 +++++++++++ src/web/public/sw.js | 3 + src/web/public/terminal-ui.js | 3 +- test/fixtures/media/preview.mp4 | Bin 0 -> 2161 bytes test/sw-fetch-skip.test.ts | 22 +++- test/video-url-preview.browser.test.ts | 149 +++++++++++++++++++++++++ test/video-url-preview.test.ts | 66 +++++++++++ 11 files changed, 313 insertions(+), 3 deletions(-) create mode 100644 docs/images/video-preview-desktop.png create mode 100644 docs/images/video-preview-mobile.png create mode 100644 test/fixtures/media/preview.mp4 create mode 100644 test/video-url-preview.browser.test.ts create mode 100644 test/video-url-preview.test.ts diff --git a/docs/images/video-preview-desktop.png b/docs/images/video-preview-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..86c243e5bae43e1f5efb7f08a86a8bfffa70f846 GIT binary patch literal 48475 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�L(F7#aqT5rt}FJV&}I~PNTVLs^Oq;f zjr##(hIjYbP>QgyUb;Ah(O8*m^xH4t8bAiU7-Oh{6I#9Uv9!B(@>(tC@G{C*)+a9c zaQtua*Bgtl)6bTcFz|H`HxP`(75o`wBKFgwt?2(O;D7ABXIN8N*FPLUMMXhHMTe$i zVH}a5p!CEtii&~`Dk>!)3L?@=s0oOQ1&N&+qN1Q8T?i0DKm=4ukO%=n5_*6@5(to< zyc@@PuIK*0@7Mo__qy(HDd+6H&f06Oy~=OxLu;b3Wn(afwMh<5K*RZjZxXN~f_GF{ zo#|BUOPP8e{B=uJ;r67b9?~Uls8A&4)}!=Tm!ir_sg74=>NxaNr)$g0(;76PEI7n{ zHvYorodTBt`C~PoH}$ZHM>mBbzc+~PWwZQL@)ClBz6FcU!jXhOchRrD!$n*8bg8(w z{4TgCT>Sjy5!vUnCJg~cpxIk9zfCpwe(P}%g;&Lxk@cFkDu~vyfckG)we=(=>oIjB z_+mOPjPYhpQ>)DN(Y~}daLVv$;`b9F9iP&P2lg~sg&jyorFHrEg_Xr$`%CmBb*97O zy?04DKGq*f8!A(<-nWgN&ApzyFTC3CL%wPLMX%|Tid6@)TT^E)`?z^N5y+I&NEvki zy*|H&x{2Rr%WRfDiccwiCi67Y4vHQ}K8)TXb|od0d+(F&lbwahck$m&;;W64BiPp- z>+BU3q_Ue-*zeO{eg4QZ@t%!85pszC!|VEnx1;4Xk9W^Etlf)$+e7?A+iD!=eC_Ha z^rV`a_kdvjF)WR8+Uz}~_hn7KrIfh-?&sj`A=j@A5D?29cD_zPQwB_`e1b0G%be^r z_%ccCJJj`S?{%J;P8J}yyVzjU`VJZcnY~>2wvs)?i@u!F4;7vaiPvbogykjb? zqH}WA*_jlGM5SpX*E-I3@(IdxN1q$2f3wed@90~UcK<#z6a#6;8^Y`>-7$$LyxiE% zajLIbj57jLr40_R5k||-VopN$ZH%~Zv1g@qsbWsW559B`J?_2cbnnzsz04av^2GI@ zW=>&Itct8Uc;zFX*1qP)e3agqsUN!rs3$TUQqTDlb}lOF+tmwYy2)E_G2e7;HdKMa zcS@MreXW1`lxr8Qb?>+Y58%wbb|Brh@YOSvQZOf-U>BswMiS3g)Gq79 zrI8i^JdtA?LqRG0d+k2?z?bCq3~+A99Cxp*+)(j$*RwY?6`K@|b@f7#VLUM%nWfrm2iy@+2bqt`~pQZIJE~ zvEFhv>h_`0jN+`IKvm8n-VM~ga%+WXp2c^5m@K_KoYWX~^mjK3!Y3^hL6 ziSO|f5IF=vmV`qvgP}KkCLg|zz9u$G@~LNm8G1b1nHl~@E3UU$tJy@zE%<9q)x1{= z=I>ynoN`GPfm6oSMKVkziEpdvD*6z=zjQhoBP73*y70F;p-Eg^ORFz z5N-)=lIl8Vg{prsWHyE2#_ET13Ky}3e)m^1qssV3zFkv{V4>qlJ%xAMs5tc+ zm5W=mp!dtX6CGepU7P40o$rbB7Gv{P+{Y+Dq!V@tOBYEmqcT({i=x7YF&)Etr(J(E zn%L1!KCuZUUyHct@FZuyse%-c6wzbpLa%pTSW#n&FgN4-~9b%`@hW7xc#XrkfPdsxgLpU^L)L|Pu_X; zp!#)w=CNv5+2xF7RdllKNJoJCX2S`TeO^0#- zT)mraCFk1Y`PnV1jnOLO{pdHdR#sGZIfGsM{L+RX-yGzJ^TnS8@P)}NPqwd1$VyFr zeL)lBQ~b=MUB!BfE^3ZzyvAFu+qPxKf1u;`5SZlAI>&+^cF&&CZ8N>!G>}oFdiT^f z>nA6Eeid09fjfV-UB(8)pVfush&kv~+nITz{8$ETi zz#7OTBni9d?d{dbyWz^s{dPaTnbKW!%qII=kI?VUHa~xRKu}0=e`GUTr(r$uHZhh* zg2ixS1&bl)qZs@Gbd6lhE@wos_xe(G!@CE_5nZKdRGkPX{oM3v{k4&jO)+zZ&T(bzF6qquEJck*%+)?fb*Pl?%#?q1K!>+c0-AL3%;F{vK{vEL zKE*AnXA1`Pd7YCwWs*hWjX-0@cjle*Qw&qGc*%GLJp{okInd>b_n*>6v*x%FEW&F9 z&mYDkzlBF@?e=Sl_q4`Xs(Snb`Bd-qacngKXaBE^rIewl4^Q!`~w)(l_oP2d4;ec8gnufq47MnRz)2? z@cBtNFb8=B)tBm&r80G*B0+zqy{_55GsPu1=)85JP82EEMs`78_61FkWMMr{fbB1; z*2C7?Gw&G?PFsR4$+6cYYkIQTOMTkKbob7|sg|)LnB$b+ciMR_N6hKO=yqH>e@%ky zW#KU9QY8b}s8Am#pg0Fq&fOfsL^qMD30Cr#8j^|45C8WHnNI-`a| z_N;SaL^bbf(nU@>prYjC-Z9>R2xCjdF^q)=#wJ|yJrW){>6uKLE!hcEG(a_A-8BNY zXgzdacGpzZ{3KV=Kgq>WHloK~s>1m`4n08QtsD`enUuZ|G7%e(l=2DORN_>;3ZZweIe-7*hN(?_PHIMc}U?T8VxYhS=G%(gcxDAK3u$7gXxVU!bI=L=kgU3 zx=!dhUuMjwA$u6N8s`=}x0mKmnsWae0F+7c2W_?9Fu|?Dm}yFGX3StTQ&7iw%~a6M zTp~L=xsv`wWyqO|nS0F|*1Q*C1WtJU9CfOal8C>cqV?JCa&RQ4*w@1@A?ISpXw+d|OH=V*9b+-X}P5 zw!W<24k4Cq(T}`t&=kI$B%NtqewKQMn%4WZh2C8~*X67q%G-=F7pJm_{f8CeHuQwO zO@D1dmb}Fqt&lKnhMbwbS6b5@^%b9=?Q~*9HtBj~#d1n<6H-C<6NgygcZ^GA=eMG6 zJxRACOgx~Nn56lYGe(mFFi5Tb8)~SoO7H0wZyP}munkQx@uNdrvnOwWDrsQ{S~G0T z3f@16SRPe;x6khTJ%+x`gls%JZAqkpR3}_Bj3Etzeifn zRA5;!_BeeSV>L1?sA1vsL!?2rIw&EWI2C}HZzeVcX9+(y5jkcES#*GON>vXfq{%sj z3@J(R0wvE*jv6bho;{3KJSUm+;#3&3sw93PSD45VYC1&BHo<4&hxB7x7|~O6c=Vii zfLNv|Gzn&5!=uIy>Bk5?G?tna&);baWRddA-7Ywy43+~eXU4W{(f@uy0c>s07CgRG zUKrWAlPM$=!UuWvjOlXH)FP^QE~zWJRqPAw8p3k!X;V0Byzf9nLt#y*tjq-eO3)Kc zZnGp$lC^9|{OG7t0UtB%A99{jHb#7dV&_|O;crZM-I^Hqq>>=-g5q++JuWu3Eju}O zc)AHb;hc*r4o}&8Hbh;ne8AhrA*y9sA!$YHL0y_T8;&DOFDh@2WA za`tqOMBO&HB9~M#_6c~-k_@J>*AGumpW3VYHsAkh{q2?5~HEM>t;!CsZPIOy9u47&R?MtFvsK)J8;h9N6Ja~K!K`n29o zcolxPID!*)+p1gh9%>PVZyeB#rIt{*_>o2!=gQ6T*Nb`ZpIKGXDfT2uHX;1SO7R6dz5bVk&Xe$AJ?YH{Sq_;@HCF@8A+rz_LvOktUQu(k!7Wk2lW5Iav4FeGsjeerjNpr&2}T}wuV*QJ;F z%E>rsgI3M#vosN6RtmPaTWGOXfJklukN9rq7S!z_P<&BkN}Lr;uIm#~^1b&nI7Od# z?BEkzEFY)1f|LnpNZg~0n5i(ff~xJ+rEqc+52n-z7YCqOglk|srP z{o?wjDE@h~caxsfwl5-yJxp0<@Y5twQDrWe~9QosmA9BpIiwZthaB*hB< z75E%nii7?%@hM!^BPxt-%{y0kQI@0N=VJS9Hjo62=rDip&?S1&9m{9|B$-oH;(nh!txN7S?=8 z1^5K=cMhoQ)f@J_lRCB^C^T%%%6S-__DL^#a=Kn$@!Bfp>$Vj2Ms7K~O3kRENc(Mh zPdJT^r1=?-ci2Tc7`XAsflN=yQQa}~vvz`84AX&dFkxiA97-YQ%i zkMF%UQs7Gs<*cF>cwG?@xHS^6H{{QVsTISI8Dd1lz+qo%!8-)`eH3Y?GeA10h~+2e zIWbX9x(0fRF)~Vi-vj*Evlz||jY~{3__Z4- zw-vYAF7@kMDz`|cjtz_!(2-Yi89^*p$vo+>=&>CXHa_eqfb(kYo460m7=i3vW{B9% zv#L6w?LhfEzSgI>MtyaE*B0>RI`k3?$)2Zasqnr`Wbr;z^a8tA=c3u#SZ5xaiYSYk zvoA!oDlUS!oKu30|5SpcM>?f?8{niBTQD&~TbQ(NXJN%9c0OL-wvkyAdEjqBt!9?+ zwYGnS|6H;aOkzRi-t08ivczvlwi*5IAR6rN1aa3fwzB#4;>p;O{H z0V9O0q^kE(;!i;86Q*XDF}d-7`+nz2{+3#w;kjBEUv+(g){++Mu0 z^qriIP+U9jeyoIylHkM@2B95Xs8N;i3BOV2!mPPW4hu!VDREGG5fiyDY|$&u8yH{M zd4>MQd$;=6n6Aj?UHC~7vxYv9pl%sxjH-{-ZWD8Q6mo_j(W@~XJ@@`B8P!E`ll7X# zNM_RzUJkN1lw_3f^pj_3GF=evzYm#+r-u{TYs+Z@FB&RQmy#huAEH8& zYIao_vQ2R^2=Y9;ULAg^kT?%WYMVIH#V#Ps_aD*_iK+5jtFX@ZXQR2L%t*NWySu#E zh%^a2ZI{w;x<;FgL5tKCcV9nN>d7H8WnGAn*2a@36~DFbj}6=TcwNSx-IKg}%on5R zxlSkD;IWrXc^8!cMbiBQdwshY!Tch4IHmCcwSY7_PTqhzebn2ITQM{r5HsZK5tCqm zBa9=9KXhMf(8TeE!H+w&_aN{V#S(abk^LZX>=O=2S}bO1Wh$mIu@z4ear{0OdbnN@ zAa+nTD={y2>UIl0x9IuvTPH{l*y)4XMV2rS3c*Dmn-mg)d|Wp`LbKJA@#=*7(y?lL z*1$Y106(>lCLLEqQdF6OEYOsQC51%V0MF&qWa1eI8`0;<*MKuMCUd~QcYiX24*I&y zKu7Tw1h_vv{wMa)F<1M)W1@x^y!pKR@~BVm3~*>Ux&Ae64vr9sx9H6md17LRok;Vo z#>dZEq`0CQvXgDZkMBbX!j9%-^lWj8+dipZ@3Ja=NxOt36*+JS>o|=AOi4=d<$cvB+-WebXmvb)pRYyc$9iT$C zLSle5tdjToA_TY1ZXd(5+00DQg@ph8~d z%aj!$=SeL-jnACilWsX9=vpvEkE27Rv>7q|eqqDa(n1IufLoe}l9>VLA$)urPW-tk8QpSM zBl625u!}TMYi33??PIQ2-m|ZjwB*93pXS*<4vE1vY?Q2Y3)@a`Q&Hx0XYz4~aJ+SQVF#4D!#5vF?lIjug` zZN3>A!wA7e_B!q%F9m@fhmfxwW7l=mvy}uq1z5japs3S8S9lzvc)xiy0#eoAY^|kl zt^7$t3*O$BH838IE9W4|@)k7OgKRTz&L((k_%Crd#a-06%e$%5q=b2UCFI0)g^D_e zDtBs)r7@OECQG@~z!!U|5X4V@0Re4H8{bXH<%&{@4xcA9C$nVkyfQ|b+wj&iSNgUJ zw#;0D-KE=5&{G%E=M{mW7pF~3*nu&lwB%U`-p#UWc$xlfPUuGtQP4u&0rt29`d?xq z&!&nJ@a(4J2+vkD%@2>}PI422{%Yn9vrI^Q`sl5#FDa_gJ}lDc{Un0^==)3>cWhW} zr3^9F0w%Sj_S1%NRuSiQO6|)OT0rj`>q#;Dp@yE^IwQ6`H z&0Y%FDoE`s^RfOzD6WPa=`mbJb<@6R_&ny#z`mKKvwxQwWA)y{cqB2Uw}0HCgS$Amy?(qufwmx?)KQ&4XnP(R3^SQY(swD8?!Vj=$twPa&52l z_pt`w)@!!V&B}plk*dm&{q4s7o0TdWj>L#U0uO^k<;LT-C)&UG?N+MrtEMYK-1qY< zTo?71|3;TtT>=M|oj;+u_js5xJ`-{xzt7D5&7)%*U#`sS*v%BY=o?ao#Qkw{x_nh!%ALhAcBWBs z3#>ahH{I}UXqAszZ%Jp8+nRGr-tL(=xnT6b>FIXIb6009y0a#3WBz+`MD9u3MSz_1 z0)JU)M}_IiyWP!4_2T{0Dn)W{asVJ|Ea%!&vC&xgnmFfAR@&gNTNFNgJv=WTB+0VQ{bh+GInYTXR6^2{22GH^0WVg6e zo$+Z|Etu!y|4{HBU+n5;ByWjORlvB_yU3$&kIW8g#%a+XqqHM1%8;TYL(yp7{M_%F zaro;#BWe)HrjDas*BFnN)n1OogDmu|@1L(6h4?4FW6T+C1RPXzG<7M9q#b}Pfk0lY zTjUPrx_AJR1AtdG^I zeecW3@;s25s0bb+dx9OK7`^$0s z$E*Fn_hqNbi9b(LfCp7{Vod2jJi7n)ml!ou3U60Cc;`>aOVwX)+fR##*>6($VhAuYq70W!sX z0JhcmDar|G6MPiTodO7vsQEy06}ni1X}Ykm?gM`7+<#wS%TiMa$j?r4mNSwbMjbT;*+TVRUoyST zf>j;OC7KyN#n((Z%+mw7oWPII!Wu@Li1IMB&iZ;g^oRu%J)&l*0y6sbH0FGO()zn# zjke2I@UoMmBarU&0^h1zp-Yx*$(3H6Zbr>TlH}UZ9#0ItplT)^FP*c3&)tRoJ zg-<4p$+(hkRi*;OxQ53FA9}{WBT!luibk69K)7)$(Id$*`oh3e9GwloUTzq6u!sHm${|>cd&AO zv*;y0^BvU|!-u%04KUFTjHHwlF{D6I5NNR@AU4ICg=2`coDgBHNU|l~nxzVxO>WKD zXESmPdZFxEB3?$p5r+`+nFeUYNn}Tx6<2tRjGp6d;RtF~VJ}cuvZPNP(eo5FXpOLB z^p^KjDLIR)D8!>jDTt^6zFX|}y1K{JD!^Kp`v6cB}eo-Ap$x7D5N@0q2Ii|N(DBR~|*+@i)uGAJh#b;HM$R3~Gn z8&VP%KiWEQZ)ZW&CKnd`Q;hL3#Sio{~PK9mttW%bxi=;?tdrhqtKS=124>1*N=UlXSBiVYY z6eqd_Y(!j{Zx?{x*&&6sDgx)?vwLXYEh$MC2>vYMd~Y^oWpvLKr%93m2Fe`FZCK;# zIQ=CB0Yt+tWJO8F zpht@p%{W!_pz;|Febn$fC%4GfLwZqvZ@w5L{{WaJ`=J2`&@oS}A_k<3}yi zKz}~Olr{zIXmLac1!x}JJ5x@l){JUc*4tY1A+PyFG44ImUa^PK}C&U*LfqXkei;TpsB7_dL&Xw;T!91twYF#_sS-s6+o z22IUS-PRX6bP{AYeFY<7RC-{W1w2di`@J-T9f1+t?3d6364`A8PIWZd26_LCD{+s5 z_>E&>Wt7Z>GxE$opi3>L5dOR>d_thC(_KM&wjVyG)$OX?8$Q@UaRp|GJUWQ&;0z z((YGYSL|c^JZt`rl1E-1fJROSTxOjpJ=-!$0{~s`6dBe`J{mxjQ<*$xbSQY}6_DD$ z9~}uefkfREaJgjZJ?2LrM;5E4DZyFMv_(~*1`4;wMvcGyn+x!bPB^?3Sa1vBnh&8y zz>ISU+$zxZM*TpKJoTx!jNn3$i-Y6Yg+%`p*YMwxm_bdQRv&uh-*y(Zwe|okY0Vz1 z$)fsffDtLIo-ET`56cTt4NY;q?Mv{dmSNFQ;_OUas#7({uJg+ZBLED9m*&t!YW@v! ze(hPCTI_VGpoHRENGvd^zScR99kAk5czV>#k9%lD2eOzUWZCp0M;0xbF(=0&dyB35 z?TXI-1-7`1`{akOWd}z`O=?*&3fm?<$(;ksFxI1QOUW?2OF!6QGSIxlLilKEb`2k! z<}i^JJmG0+c9kT0U=nO${UdgXaN5CqoDyTYa8cMbj z4d#5prNW{cfd_d^t3ztT)z$5mX2YXELZ<(n>*zG;R+ zScpb*X$aB#l$eUH-Ax7JD0yvw>)ptIP>2IX^h)@!oRk5V*OLIiFPt7$AsTgVGnWwn5Lek!se+F{3dQUIbMaVqdGEEuseX-p zfwBke!n8^(ktvrvqBUmKBv(GFYu19|E;C%N zlyw>F#B{Y)XnoR2XWl#E+C6@Q zTW-Q>4OI7TEyeI)`|;e&s6ntNj9D?K0eq<)&o1z_5`|!Fkm&Auy#<6ZUc+TYOTkL#f`}>Z>s8y5 zKNgnV7OmRdsR4Om6Dli71%b-$hAr(i`_&*X9z;E;-TLU}g+&X-^7qfjK{%GbkM{U! z{DrH4whhoG`LsfmO|2g7T&VOyt`-BsJLC4zG{X zbI*B{Jja9+Wx7C>z$|!BctS^^Ae(N23cB1=Um~o?{|0&TKO$ik2ns4M(g$OTsr4Bl z3nBrRGB$ebDFAQvIw96QuVEvu(8ooe%Zb~HI3rifdD4ej&3?Srwk2U6HAkJ*c$hOj zDnHdgZuw9@JswzM`{KeM<9Dc_hH~t&uZH;G)%9SB);3n(dSY+A8bnBi4}&Ouiyj$dZU!;y|0_}j@eY`EfdMa679w02Sge%ewF@CAsIr0oKyl^&BNSh@p2GVX;Qk+> z_&=Em5N2-2d*Ne&jMVP=&shEcQtIM=mva7_CH?@tKvQsZvVuDAO?uD)*(l~hmJ1fty?A?^D+8~rqtQrCdw5u_ZFUiS3g!rlo_|CeC8 z|0pejYe2QLPugg(EuZwhTCnK>Mpy+r+Gv(#8_+1xR^sGii%Ppb+ zz7-G_{5(mgZapy8p&@#9tiNU70Hm)Ki0k^Ua(36blNVw|(#q~p!r_)PoTM9KDP=nz#KeLERu3XhdxLJb~A}b=-jvj zRpnbuS$!SUd&52v#D0?1$ob#jXT4(av`(Viq*xC%9 zuB5_hn$6EGDUZSW9g-j zlC?sSM_|KWvIX6qWYEWQ1)N2tUT`r{ce>vuoGB@%1@v4=2?O4G3+R#nT^qbDdR62a z2{U47B?x~l1esh$3}xjOUj*JC@0n~h4S-nAk3wfg@0p(DR>;Z$T1ir^j|&mK(X#d3 zQAl?8v$|qEm^wr#4#V3BL}Gq^iIKX|eaC#MQ{`T*RlpU< zoSrJw4JN6s9qsccOku3##b(SH{M>h$Z2(c z-wJ~m9>jwbm9#gI84G%TTmUT9idzv&l4;Zo&e)YY3VNfN0RJW@r@&~H55xXuKGKN3 z?0wnWo$4wOf}kXIs|gmT5#7C;DHLm2ZJ~Z}6~GbV6W+IV&*j4gJ~zbbxmDOEjaYG1AK?D3k04m&Q@MqKlVa<<%?54C-9pa~R)7XaNy4}-vE^Z-%bi;xYVB~XRJ8NDwft2VRse9P?RYGE2#E;3Va z*_56kax6!!@7oH$l-@!qo!R%D4p#uyRdu13hAq!Ejq$)=gGlI9eF7mG^h}X$gO+7!&f+_fletb<;sd(H0Eq0I#(I;+06@BDbA8+Ak1_nMyfy%jX z5l&S{QG3qND{7CMcwQlyE0i{pW9CE1=&^b(QNjr!4`kb7P?9{wFz9Y6%y=pLRw(bq zpoC73I4D%p2a-!-`>_G_k93fGik-`E3RvLSTl$b!l7$U{MUu85q>W64Z9olp%d4VZ zagh+ip9T$tPKvISn%NP3g>X&_Ar0*|YagTP{h~IcWEh|nVR=7o9*4>1bX6vW7Fjx4UUaAAK*l7sq43rzeHGqk} zf@knJ*LyTcH$`9cMUC+L2=aoJ&d-%{Q5RM+uUBaPxGDkfjFxw0RqrVac%xKPyYoc= z)(=`)M_6~T_txQb0%9y5X&&9m&^lXg$hl7p95+w#K`W#yu`9LDWNiToq ztx8o&A72(RKRX`Htx>T%=)6|BNevn^>xhe*1{lwYn-*@Ha+-4;a50<8`hE$EmU1{p zfGHVZ!y`l~D3Oz!j9~{~W?P>LVd|*AX-6#)9t>=3ixZJAI#9T@02}#3oR-bDEbG{r z=WH+CpM&&mod_Wr7c&*SIe7Q@n(!NAa{6VGX9Y$^ZbLzp!4ScL)m(Mm-O}=00Ta!| z;`Kt z+@yHalOfEl>deJ913je%fCaok&{iOqppt+5d;1?3St#VBz*jNKB#FP-F{N;{bh3vs zI_G5kv9c$4@Hfy&2v?arAD2+Gwo5en$gU7fZz6yw5c~meQc9)y167V zRlynI${X-C(%$=5DLnZF0iSn_D9rm4Mx4oGfkOhXrl1j{J^C4=S2QQ)4 zbm;D&0*T2|NVU)d*`SY56=cST6AZ}Z&Ia|rRy%q152hs6Ke2Vx8?Lwo8j@JkAOSl= z=UP8NygQSN*8eQ`4pi0&T*g!iR|Z3?C@twcy5!aCZ;mo;w3~3ODO^Xm1xS<#2>yau zRMGm$`2`Nz6;ZOSBWLPVxr$*Tk{QX$Z{pVQ!%I%5bXc#QgPJR;2P#jVGKVVN-geym zs;2kX`25@iZLzTf^4AcVi_8ay1Je!uFe=Z#ardw%^pq^R{JfEF%KkW+%09C@Z}b;+ zadMGf8}#qrjkqE6N#?2ep4P}&vQ2N}+03oKbn3_XNXLnwW7tu=T6aJ*#r<`%^9{}Z z`^pTp!`ctdhA=j&ub8+Z@Z52i>MKCcnJH_25od0nq(}Fw$V=KePkT}CiA1!fTNLQp#|7wBJiPwf zP5ho4AC@oif77_({h@Qv-dm-Y{*kHV=FctLM+?}u-wZ6ZeO4FZVdcLb+_c{JS#3Gx z+uO02l~YjU9nzn1yIeVAp8B+ zLcd}f(0s%5w3B}PFB4(E%*Dgg5}RFPyy5qPxv`3K=1SooXiHb_jr2dSO+8>%?>KgP zFvsysbWy8e)~;pB0EA`$K2CxbKi0|j{)L&UHC6i zP`^7O2Tb!A0+7^i1vM?9GKBrE4Uzm+x}&`m2_ZmlhIYRMMIaU~IjvH3Q{dNZ}2iB6z`~ zwwu4MHCm=h>58|*X{>A+I11#qxK`pGW!tl~^^n@zRNk83S`L)&E)D%36|LyLbn>C< z>TbJU>EsFN!52MAn(m38f-C~pdF@+z9`&VS$(*58;HSx-GBxzP`1VWP#7=D7@dSNY zSW?}xqU>bkVP6O1$Ox^%xjCsP?M1m5!2q9CTyE>Wkm9gWOYJ z)&;gqwk3xbD8l}+^3CQu_kMmBem{Y<_7nTFWRLr5@OWCulEK=y8XUa`Du*1VqF3DF zz5454(`0`~(-ARN%#^GVxU^XBP`|QOJJ9_43sHEr`h(Wmhq91g7g`&(GzUizC#gY4 z+=uWZ{-2hwEDF#i9#6uixqeWEb>#T)!dd?)OHj}G{TAMf2``JPtZ?tRLr(*X%M$9< z65sECewOXJR8G~#?fEQ=4ctbe4+-@rZk4XgYK zMYe7A|Lx5T^?Hu}yvhCq;zrAVgx%WE@EMc0iJe1OcjMKl4 zyYZI)dJ@}sOO3kB{X`-2(GNCITj&=~*6#SS3%vAmL-OH-y0oHS2J5W5$Za&+Vk#nR zK3cQ?^=&5+gI6%1G@RuFAQiKJ@!Zv``)H8Xxg1uY%g&g{1syL~XJD1go}_ws-oEKR zHR;bN8_Eh=|LkqeF?SD_X8*?bTik|y%CA%fP6fK`i-`&{*GZ-|c>EA#e(nkSZX8w#4I^CoeRVO?a=iS0Ty6$l}>W`JM^-B(gWc@29LF2=L$zr!NVyq8tgT25Z^tg>Mdy9Yg;_`dosIJRHLgdlGm-^cG>c0vLHujf{>9UK4 z7a7(?KC9jGHln~ZVyS8OzgB8TMCuP}Px~LM1Xm7+qNNbzqKJx`hq%rD7D0wDqd(gv z8AhwGg@2W=>E70REbO;`2&*61P!E|~oU5&_T@LGR#E!d?9^h=?=!|M}x3c*?f|*Zk zA&!1u+*X}4y#L*h;--?hSNlbs>D48S_Fu-TV6jG~*yva{(R=Xy)?SPE1j;_m@jV6= zzH3s{#~Ypx#GVFj6*hYq5Xp zi{=?60>R3Wx#sSH+a4Cb=?M4hq*T#+uRaaT6NS6%QrG^VlkD6u@wGqm;A7;3^J2Za z2AhG=9`3qJqa8abgKh64-^6Fiwc3hK4e|>GcjCxq!u4W{(ehize|s%@_3F4q(r5eu zst0+nT|MBhTV=P%57e9TRUR0qz|NZ&XtOj+$UEAgNzDY&p}JeapN0&Yd$?sUzuqdV z!+spXq<#(9^LfUMU~8&k%xv0kcfE}ke9}*xZu|#)TbL1CVE0LvIvBEDXM@FA5B8t;olB>AB${L2!t;AW>1uDy3S3X=*{e-f>#llOA9U>nJtGEsr#|S99^L9DhKJwvX7ySiE^A+y(r;r^TTZzaB1!`1R8?VxWC)}UtgPx_`tzYSNX77$6mhSns>}=|F8yvw zlBnV`P}F|?dc}8JWNBp1^R=b~ipq9art~l8B)7q@*WdSk+I@VbmDjdx8*0KTUnRRw zm21}9C3vYfCD;-obhUW5P8;^g3ttGQF|I%|&9LkoB+qfX&3 z-&(f+ee0B0HNoP>->c4)A9CD8d?#MJa><9K?~*Q8ziC&dtkcb2-QH^yuFKysckZ_( z1CMVF9o$bu`a*c+?7+#On|J%ocjhKM>Nu#z9Zw!oadOVGo-bAP?Ema+qG8)UxEi~k zm2k=T!^ZgP#g=@=iKx|V>Z|o_v*v%*UHJGcb#vxX!Md?+9~M8Ts=Xbpd^kCcqeZFz zjNTmB|K(MwA z2@w%E*m#)w*mG4BboudSBY3#EKO{S2J2k2Qg6aADiyx(T91QDDb~g84C)oTT)4Xjj zGuE}dv2z)^!fYTlF>eB^^4aV{sq+gy!|MogH|+ZBuQ|n5zn#bKLR7h&R#mg{n9^5& zE6ED*OZk5SR4c30_A1wID01UKZi%tq!htCkZFodt8vV$SCA-F6iUDN1P$KFqibsO} zH=O1=Uq7=KZQO9m!P)A3r;VjB^Sr378rTb)f;K{#XP(u)gx>B*&lV$I4+ya(t zds@2J?U7m%<`j4=-Gy@O=qqj$Cuy0tDcL^DUW;4VFTdZe`t5Kw&y~6w-fW-#*NV7U%UsaqYCaZa-P`uysqIA&IQpbqk*cxZ^*hJKgV0!6L}Rg!gN+^JO~r8wn4fa1^`eF2cGd5g z%|LY7c!>UzIT=@hp|tkSeoZ*9Tyg2t*Nz-<#u>ti(v6adn5brNQ+KyM1?%i2Xx6}9 zietIQ!hyN}yR7t$ez=-G1{s@7A8 znS*|2)HejRBfWbLyjST?bry8OTM<-#2`{tmJhaIc^m5a^tZBJ`t*Bj$PYRqBWQ>30&)1u?INUiBeZY$NEOWk3SRFWwKB81&pu01C+0|ipo0CO0`b8wep4}bHa-}D^V@AP*f zz>x`~JQy6eK<~pqSvqkLw9o2xC@w8l#vkQM7HoXEd>v-|DgU)9P4Qzn*+x zI}_MqkI;Fu0g3-+jN~5&&5jJ3F};?ma}+3nI}dYdfC+}W4ID7=IvfueUFwT!f*bD> z>8g+{*`z)=7fOd|*Jiv^>xk41mJ61;9gbsSS+hDqBgFO-jytuT4TDSc+)Nl7dPmkx z)!5W0T{B5MYTvFipzJkuH^v^+p7R-CL4D)JSDF28o=Xpz49oMtkWT``vZ~~o18OWj z4D#OQ3dfAgw%M{+#68n$=HZzm{xDtpEC}#+f3zmh;7!o`5=@ME&xbdR1Cx>?`Hj#p zRtpPe*(nzlw;o%e;n76ZHJKr_4Nc82HW$=JYjXg{ouA1zkdY8|#3Vi9w-q{@tCz3plgM$)>_6r)eP$tIeZ9y8^vSDWli}ya1l$aV!xEou@uv;y~+`y<|FZav44^Rf&!YeL{4qloe07A$3D=2Mw)DTdQ3p5nfk!P%dwl zJT}na4Q8$zRl!9Gys55(&Lbp_Bsz`S!a>D#S&EzCD6smR9csJ00_I@ElrDc!JUCMT zWCS>6H|=~52Y@%*y0DjdAIiiXtfo0Ozcg z<^V-wwGwgA2<$i-`t`u3(D1G+Fw$VTCDK?Ea~kZpI&|b=@JnW#9$$R{b&<+L8t4l82c3*II~|wtkl0+x+bVo zN6Hk5+gMdWLxmjpAN19c&>4T1RAeT-@wH^6uw#@Dk@@VYFU7APrJc`IsIREc{qr_f z)1(g05fmmID0ImLHuEO?Ahs@}sMj7y&&hKh4NgNX=V=x%hmvx2tI>fEFenWwSVH-5 zFCW@~Hi*<9<>**hW!~Fk1*$9>V=4^qbL+PFwPFg@BU7|c)tT3az;RKS;lH|lN|i69 zE-c%z)u=mTgTwIvp+-1mQ@_PoEXreQer|=u#>^yj#MvY2ggF;&C6rA^I3mr)=_y1M zcb_3a(e5IM7rh-?iKO1+?*(U?YEK)@eaZ`sPAPj3%E!u&X#l;^V+duVsS*H53YB4v zjf9|T*;MxyfIsqJu9YMwmY6;p(w!Y#L9ZKj)^F>QN(u8`qq zm8o*{sbir=yHpkaGaWDrRg+nd@dgnxiWZ z6o-B!r1Xv7?KWQg42j`Jo=Z^!97>pwk;Jki8rhC$fI4+hcR-#=>~*s_bqH*cL~79#ZIInurN`Jjrwyd56@H8{9@9p^`Ept_4An?p&8!^N9@D$pB&<4SpV`qgba&{8{efGty!4{cECzA^TA zHbLwanB1V~2%OepD_v%NF5VG+EELfTg7hUit?Y2U8^0VEfo?AcHe%M=9Av5?tk-E} z@OmV6IIa)%pe*#RsKsTphwY(ws(~h8kSFO?H4jmK>VH{6mIHmxATQyNaMrkOBVH@ zCH!UWirQz0+Ndp8;$2BX9BcDo;7o?)H<0q_-#raReGE9It7L+wDjR2hOW8K)PC1t& zBNQvNRxz6Q9)fAuc+n<;$z`)N>xBO!1ErLJTn~x*<{%XNt(G(PQ%gBtJ)H?A%rrRN zhDE?va}dNXXsZv`6Q9w7%j{ax4tXu2be|4oY3#j~hd+%bj#eOuB1lBAGNWU(JCKUJ z1vDSq&gS}msTNZ1<2pLAu8UZjQ*>honfk3TQ*Ww}P77ALneA|8gtP&c=d&cwaa`zu znBDtaWN(!FuGI7(0_zMY4#&enWA;V)DD}PSPjJX5Hz7#H!8Gzx#PXa6UA{d7p`9X~ z9Dt@cUM4Uiis_`ZV=wXHve>2jyUKyXF^jW`26)Wau)%)qb*)y^<0)#aSTUtlQO5lnEqwA!-1FdZdxDI8b!u`belsf@~8$?Baa5t(n0 zNyd^OJ3^CrQp0g=w7NHIqy(fD`%)c5sdg|f15NdaY-lP06a!W=TCS>X^b59=xEA#R zarUP)p44c|dum}W5nUK~2Wx@XnizVjaY)*tSGeQGfaYV9{fdKwXa<&)2a^j*o4%+J zQ6Z100I=~ZU$rl$YEI8daFse?MES`>@9d5xIGW_OAjOu16+I^&wJaPwDH4o)#jTZ_J5fbhi(53n zkQKb;lStue=*)hxeG4>IdB~B)CBigl<`N+iBD&OriI8-ej)7wA4WRKXnj(TO&6I(7 z{x%yzA*hosmm-gaNPR=SgpJVUye}iVne6vu4yRH`yQd)G!tJrLt5 zL`M7T_Et)PC=aSp3buz<$YMBQjm^lJ3Ob|!MVjiGv;tbv%PXjcQii!uBy5=+F(3U! zzHdzxHt!l%va+azm3wSB2OSXgGSV8mSVLpZ`K_R6(O`YcS3cJcj(ftP>phZn$YuZl z5CBO;K~&<9Q6>E9ZjUY$JFXJgHL4_JP%!g07!I zi<~vt&Ym&{2C(vPU5DlU-=T2W40K4u$A}p%5+UrB)Qy(qQBpBUQ)!TxguB9Z3(stD zU?}5D(bVvS7uWVnCnrlY$tCkBLCP^HCXduRkS%v4q)V_Eqrl9*#5aEVR_D$1%Gj^E z1WP8nyzo>|`Z^QWUS?!&0Gw6oV5u9Q23bx>`ZX%g*s36kK5<%1cTW`86ovjoWw--* z&J#D~hUci}oel(-x`0B4ql0|q6)*;jl1$hIf@~cK>KPUcR#JLWYE?Kqb)|*{h5L~0 zNI#=UpGYf$9<3UkGiN1MMR;#JZgg&(b7#dV+%WDJ+DzF95CY_q1j@08SBR)8R7p%_ z1BQG91Bq_9!5Mp<)0kM~V^!P;i`8|Z0ID%L4L&E-z;~Q5F>zqj*I=PjV8@N3(aV(P zmpd+Vb2XV~_gTUXn};L^PEOP6D^*e%PeXc^lOCUZY$4>36wwbclK_S=la>fg#Qi$n+QMB<;fH+Y3A%~SR zRsUap^3H;ZmO;J?I()`y@q~tj5rMU`!SV;W-+}lM?02a0Q)3fTIYHMsO9iZfuHs1R z*n*Eb$en!AV2G7rDjQK&pxU$1kXta9DX5VS))aD~kz%{!9C%4G9cMwSHsWwFykLPY z13PXHhJf1~&%^&r7QtE!DdTOqyvE?bLc-N?=D7ImfQASlz2sv$&C$E51nycnZV4AO zyW>gHQr~S?-h?6As+|0|EOk-VRl>Q__gcQF6CTX+^YJp&d1{E0DV>ec!rp0Ck3@ZG z<1Xhf|Iy+yKvMhyBfV^!Zf3v1q>ht|%#_|Sy%Qrtg%6-S;2NZ9kOxXc63HkT1>{Oi zmL7{r@#0W)h?NS}nc{q=euc8rwIl~qITY0{ef`6OHP zni0g|xO8COIM2D+FwVfiqD;woVy`e+*c+>NdRm%tvr{oe^SrK$fwz5tqB;17>2sGL-P96kME$s4dX- z-)Kc8a{#SGV-6QJ+fgnI1GFq8gD_?T<~H-3!rrUbk_EO3knaC2F-QKB%eKP^NzaPy z%0|-+b@AEasByR`6$nu`3R(H}BlMERgaTnLp0Ido1eaTeK`C1)utQjZI2c(R55=8V zGl5X2`I^EF^7yM>slDk%s}a~G8JD0~2evn?)8|cL^ewZoSBW*dLIv~5wQOM=(QX=E2<8DQ9TkR0$ z*e}Su6qg{fre33SSt41%UP_gRjJB^j{t=*6uh^_?YEr&2?P`)-0kL77tjFL?cMxr%{Eu<$YD$ zEB&pF4n`XfHq^F8#JsW2uP`l5IgO>beN;PZ;DJ}_a5%wG{?35JkJ#Z1Y^Q!GiLzw? zgnPS`uwjN!cTGJsj*c2QY*^x9x9>yR9+!QkT?5oup$osROt=sX&n~>mjOADWu&$05 z4)TlFzT-N81J+tT@Vy-|Qe@kUiwl(L$yu@GM!P=U= zyvsZ83HPV?6_{O>S{NAh4bF}umh$3@t(Ksx0iKDJk_(!K;ryZ7${SG$iv%H|XcXV< zO_6%?Fvr#5OuH0^L5nT4ZT)Ccn0vw!L3ti! zVUQZ}48U|cX@HUKoXk;51FZf+^*k7*j)iNyEMINafr<*}Oa_u-n^8yg&TAU^Po>X; z&dQ7m&UBZ8opjL?PYriZK-PPMI&WMh8rdV$3f2dWN_x2JCVy-iQ|<_6tA=f2nAD%S zw<3>9Bp0iU^F+o!x^?DN@+tu#f)Y=P3+0f3w#WAG3}n1iOu0gstjp|B-=kLbM*yu1 z$UowL6oq`22_Pzd6SL=SrraHx50s~G1V_)o795v>!I}`CZntVyUVDb=azks0=yGHf zhvRtQJp`<27uj_e$fvwKyO}*B4W;P-aK1tj`CU|)ZtEbK1hD2!Zdr9ljLWtq-f$Tf zi?qHjB%R<3K~R+ia5x?sI?^?i?p&(vLuvs%gXB&m7YW>_x#lJW*Xad{UWr&5p{py)+Yl#`NoDymdQrC9TJ zm&OK1s-9w~xu&SR?qkT#sQeXSkSZR=9gSGKW^ry{-lIep8%2%|bqFjWB#d|pSr$^g zWe4dWrGN36M?>+sgbcRIx>4$-L^5Gk&w-hSCZZa#Xi2;xtg;5;NnmS$+ff0EDSYt1(0G@j)> zGG<&54&}R=J4bgX4vz~C$Af_GGqb`~)zi2FD~e~D<_a;2G}{EjDH$Fc!$5Bird}r0 zQx19mN0IvDV&dxCYAng09a)U(3@|~(zNR0_H6+`*4Cgwt#0XXTqW4(NoCC)`OHjNBgCKCl+BhoAOGar|KQi zP9;fBUIYrEgP~?5U9Ri>-EqCpGLn>^$hx0K(Mfhej2(V@8th1%K=CIra*#3{?WA1h zlmR351&0;L<6YiVn9NPVS#uyT-=BN_g^$JJjvD&S{uei}|Hb&cGu*vyHtBgYIj-)0 ztqCVK5+G$E_D+J!X|JZxRF|(+;#6Bvqi(Pnj!7Gc{a*w-;`y2kNSFr`rScUf+v#DO z{v~rr&-?CVluZZq@)6r(CCm+o29^2$5R@34eyjRbk*mF5s8TFR9Z#D%uLCsN&j5^J zt%AvdTNT6>N{F;WRpyt9>8u>%_9M(D|;YPUF$^e$RnkW@ZJcSz41Mx888jN=qo zG;fh%qPjh4D~IFOkmp@70p|zyT0cYD=G;V?Oo+ciTTN@6gsMy`si_%}7Tv@I2H+#R z;~F7FtEy-7_jY%i-Vuy_9%w}~2f<2;A!X{(?u>(-v=S)i(>K2Ru;K=FP-zv=bkp2i zIlZxD>8*I{co ztub4`#Qr6co)e<3SuAle0wzMpq*TdyoC~uCR~+UHQf9N|Av58~feE&W3}+6^A`+_( zb464-Q^k(3as*)29dzc?(8cBnRZ|3><-p~c(K_y6S-0-W;$ywqSk&u)Q{U{^X1}c2 zE8<)7StO&9VqT%u2n=U}+-Sr5I)Gxuy|K!1Dd@BuIrwptrqi|~@&@3z3RvPEUu&+$ zX-P=ZP>NP9_y8Ee@!k%q|D!c_ASQbEc=4pQj8a^{i=m52S~HqzZts#~V%B}IuThLh(W&Uxd95PB%tOGTA8 zTL~-6m&|fy5#I_WwH?U!(RUs7#~SlH7pF~~cjp%Y;z`dODeO8qz(jEa$1WmRtY zvKERGH9|yIPACK-%)iW-pzNPJ-7sa823DOlngiB-JEhE}qVr?r99HyFqRGaWdOZyJ zG~jUD4oFbhG)4<@3u5zep5iEv`Dy~oQU%IBg<0<4lP9p4NJ#=R-e`i-Prd|;Ab$ZV z-hq`)jU_?4OrIhL4#$DG4AN_Z%e3VjLD~LH`rL1p!=op~Jyh6>lVi!oRNHca({@c| z;#R9~f;CW;_(Lj-`UZJ;N#hGu8ELbR$=RK#o0yZLC!Yk=El#|5de|B4k04JE!PN$L z{CEHV6kX626xgZhwBNcH<<$y`d(1l0_6J-j-q98D~XE2X{~o^$&Abe7s3w( zR*}dj;S~2OF`P7r#c9cc>FZ7gm@l#-jI0d9QPaSF_gc5G*=ABy;*R%jf>fJ6v4x^2 zti;QlP?bErM>Lslp#gJ7sChWM%(oeU!35C`%?yW_281}Z$NVH_icD*>vUh86;1F_f z9}fUq70QY-8=-2tEajL3K{i)aF2OD}y$oTttvV1z>#*)DB+5PHD`|Q|#@Ql8PI;Wh z*WQZw{n*&;f7c7NjkQ& z57tfK+KJ$Jx2Oh#xLzXP_DHX<)CVr45B**UH|A-x{sSO41e8JY$F<2Q|QsdO2 z2d1HAiRW2@G81tUtChg))~i$z1Z78hT$l*OC8#p6;;!24^urhsV@ruFQE_6H6)Bsg zt(%&!G2}@aV7st@$prbOroq96P^S>Vj<}hkjw>7_0J8xJm!!?}whB=QP#R7I%WF9S z!M?FdypG$ID;P29T=rxYwDV_n>}n9m9UOEdOPiGAxH!1{MO9O2q*gumRZ|YfLq|g< zRPrx{#a+UD$8#_-zo3g~QcxxyWv9Zt-Wx{gU}BtHgL_OL0%f^<2qDRTb7u}OLAMcmR@KX*?FcYQYpq1|%}8&;<8Da)F#`&6CQs0ue0(aH z@};nZ86^+j0v+;2)53h>S39n?#r-8ro6Y2orjdFZ^s$r18Okk%;Zo=_Shg1q!Afo! zt=aAwQrR=lxK?I5ILR4$3wRq919h*g|HfQi_)XPRiuHta&*M(P`*NP&=@ zie?homxN09BklxEe*mK*>qvRkb84Tl<`4a*wyHk}p~+c4t;_l=XQfrTI$j!Yx{oRLw8^nX>x(d~P3dlVNOJ~P&9ZJ+m>bwb46mfu^E!LatYgyPdbVzlb<~CzduLZb(wihT;}z5~Rvr z0qqh4Xn!}Qu9%qto~NN%L|x#x(=7Dw3v!!l#mq%wuyM|kd!Dlr7y|pg zK0_9L8R9V^Wtj~1YsCxz?JbN$pz=vHSwK`BWrfmmV^1S2y)OF3>|-$d>k?gnrs^~^OQgjZIA5*uu609c;KiuRFzRL0HIb$ z6}Q(W8#!(lO&u^o#XJe~$y?!<8lR@n!RFam(#`JOQ*mE4yQ7xPD#!(S7CV=bQBG*Y zC6x^C@3)5=t5p&?M*g0AQ9N1?%;}j+Ni9SrL7Pp~i$!{3Kd9q69z>#0>=rg0b7p~6 z8il93RCk3w#SJ(RuDqIblFy#)G{E~WAyN1w&vff^-2A-R-+&djK!dDXn$Ht=VhG7` z;N+``DgYK;JC*^nHs)%QEkf)kuWgn9vqeR2lCQGX0Bpl^rosEV*eTne?aQ38;(gWR z(lf%ha*E2BI<|B9g=&Ud3}pSTVu%#C5{MWfk0OQY6%JL#m?a?j$4Dgm0V7EZp-&`5%SA#_?(vSqG30yQ`{~IJ!pzqQO@=h#|3jXv4@?S#-v&cZbGWIQqmCy2iL3} z_X%I5m<0ieAuhvp9K37Xn zA#E(9tz|&vDHCnRN_zvc(T(f3B=vXTUEXmepu&HdL>4*0QU34pJE8P1W$F1%3u%Yda1Jf3td$gy$o6TM=i4bqV z${OHM#f0X*OFR9hwLGVd-7wn09_Xwo2imUp<+N9iBj)YBEPH$&NIHBB$F1|<;3sO` zpYHxax^_GLgY*{?k)%wg&BB~pH_pFf{m<$vgD_hpXxTVfqzpz2tMRhW9+MsPYzmq< zeJAd$xHSeJ)CTDb&S{e`2Peyrck=v@oM}v!N zhvTZDyN=?s_HJY5Gm_12U+K@zWg)7bE|@_g+=HTnGDNi)mXd^XULB4HjhPN^nrQb+ zLGocH2yF0NGzI8UQGZx@b`mtx*&c9^XZtShI3>n90ODQHlM*tDHt8!w`#Xs@o9X(i zP0|VDR0?5K#VYm&sB1*VpT(dt`(usAbxoL>>+EcLi0aU&(cPwtueOr<@=Kv9E_+0Z z7=mhcfL7+J?s|k$SQ-S)S|}OWAW~$je`!Um=LF3f)P{8#P~1q*I*D4pPe3C~s_YuE zqfyK=US`ag%|%p)<7g0rcwNIpZTAkx)xw&=h|9$LAvPV!WkYYxd1tsJ=@$ZXCJ{H+ zh$#b0+IpxXGNW#KaX79BvmHFX=g)Ow@wFPbo;X|mvu)f9Ysh(5M|}`xX$0n#Il+CW z-#fMyhmX3!n!;x2bX0Y_BVt%i|1$M&&;SFJTLlrv5}9oqB)%S42g4k|_;ItbfxMn& zq=K?!vk+h`3|7!x%3nnSlK)~@towwDT~-{m>sf+xq?Ws+hml;X=H4tySHE2}XxyCB zRz%B=DG-dhr4`9g4w{sDB%HP#uJPnJGL|ml&aZUD2}bsIy_v^r*l|-JW1|jhuBF9uWZSNJTQcAyp9>+xEP(JFXu64xZico86bsz9PC6ZX5e1~|Scjcx(Qk!7n_o^Z{!+7=VbR)xdfBHAy*8p+#GJe24u52vNswou_ ztSPlI9|vnayKciBW812$pFBLz zmkC2^5m}|$D0f=z{A6Xcthrcg7-wj3jzJty7Y(mr=2y$ZVruaEcibSv=uL*IV3LpR zRn8?*41ZxRuEz7rpiL)>;_{yExKYe>@MIo4&bf9Fv*X6C?wIw|T@8#WQ(iz1?UMPLLnWCa{3){{9n@7QNe+C$*0CBpF3)B6*T|Q$aoJ7P;XM>@w_B!W| z3~E9HFRDG|*K&3@ZG;B49XdZ`CR`q59Ar1@%b|yzB7+&L_T^4+Se}p7V~?)DJS<_c zv`85ot2M0MC9o<}7ci*a5Z3N+?>M$LN4ZSwa6p!~AW2QinoJrz671S_eQI&n0|wU*{8ckCa$5-cGUM zNJw28TsuD}juqq3$dggdEp!4iw8n?x$mM(f>T%^> f00v1!K~w_(a%{ literal 0 HcmV?d00001 diff --git a/docs/images/video-preview-mobile.png b/docs/images/video-preview-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6049d05cb008943a2fc004ec17171b2fbed0cd GIT binary patch literal 13971 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 { reply.header('X-Content-Type-Options', 'nosniff'); diff --git a/src/web/public/app.js b/src/web/public/app.js index bc1abc2a1..0a26226bc 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -3645,6 +3645,12 @@ class CodemanApp { return; } + if (urlLink && !ev.ctrlKey && !ev.metaKey && !ev.shiftKey && !ev.altKey && this.openVideoUrlPreview?.(urlLink.href, body.dataset.rvSessionId || this.activeSessionId)) { + ev.preventDefault(); + ev.stopPropagation(); + return; + } + // One-click copy: lift the raw source from the sibling
, or —
       // COD-263 — the rendered text of the sibling 
. const copyBtn = ev.target.closest('.rv-copy-btn'); diff --git a/src/web/public/panels-ui.js b/src/web/public/panels-ui.js index 5e32a7a69..a5ee17017 100644 --- a/src/web/public/panels-ui.js +++ b/src/web/public/panels-ui.js @@ -5262,6 +5262,70 @@ Object.assign(CodemanApp.prototype, { } }, + /** Direct media loading stays in the browser; external URLs never become server fetches. */ + openVideoUrlPreview(value, sessionId = this.activeSessionId) { + if (typeof value !== 'string' || !/^https?:\/\//i.test(value)) return false; + let url; + try { + url = new URL(value); + if (url.username || url.password || !/\.(mp4|webm|mov|m4v|ogv)$/i.test(url.pathname)) return false; + } catch { return false; } + const overlay = this.$('filePreviewOverlay'); + const body = this.$('filePreviewBody'); + if (!overlay || !body) return false; + if (this.filePreviewEdit?.dirty && !confirm('Discard unsaved changes?')) return true; + + this._stopFilePreviewPolling(); + this._filePreviewLoad = (this._filePreviewLoad || 0) + 1; + this._stopFilePreviewMedia(); + this._resetFilePreviewEdit?.(); + this._resetFilePreviewExternalAction?.(); + this._resetFilePreviewOriginalDownloadAction?.(); + this._teardownOfficePreviewResources?.(); + this._teardownOutlineScrollSpy?.(); + this._closeAnnotationPopover?.(); + this._closeAnnotationTray?.(); + this._hideFilePreviewNavigation(); + this._updateFolderPreviewNav?.(null); + if (this.folderGrid) this.folderGrid.index = null; + this.filePreviewText = null; + this.filePreviewContent = ''; + this.filePreviewPage = null; + this.filePreviewDetachUrl = ''; + this._annotations = []; + this._updateFilePreviewToolbar?.('none'); + const detach = this.$('filePreviewDetachBtn'); + if (detach) detach.hidden = true; + const folder = this.$('filePreviewFolderBtn'); + if (folder) folder.hidden = true; + const state = this.filePreviewState = { sessionId, filePath: url.href, previewKind: 'video', externalPreviewUrl: url.href }; + this._recordFilePreviewHistory(url.href, sessionId, null, {}); + this._bindFilePreviewChrome(); + this._restorePreviewSize(); + this._applyFilePreviewExpanded(); + overlay.classList.add('visible'); + let name = url.pathname.split('/').pop(); + try { name = decodeURIComponent(name); } catch { /* Keep an undecodable file name readable. */ } + this.$('filePreviewTitle').textContent = name; + const footer = this.$('filePreviewFooter'); + footer.textContent = `Video • ${url.host}`; + const external = this.$('filePreviewOpenNewTab'); + if (external) external.disabled = false; + const video = document.createElement('video'); + video.controls = true; + video.autoplay = true; + video.playsInline = true; + video.preload = 'metadata'; + video.style.width = '100%'; + video.setAttribute('aria-label', name); + video.addEventListener('error', () => { + if (this.filePreviewState === state) footer.textContent = 'Video could not play. Try “Open in new tab” in the toolbar.'; + }); + video.src = url.href; + body.replaceChildren(video); + return true; + }, + /** * @param {object} [options] * @param {{folderId: string, name: string}} [options.folderFile] A file of a @@ -5269,6 +5333,7 @@ Object.assign(CodemanApp.prototype, { * paging through 300 renders never touches the attachment registry. */ async openFilePreview(filePath, sessionId = this.activeSessionId, attachmentId = null, options = {}) { + if (!attachmentId && this.openVideoUrlPreview?.(filePath, sessionId)) return; if (!sessionId || !filePath) return; const folderFile = options.folderFile || null; // Prev/next only while browsing a folder grid; a preview opened from anywhere diff --git a/src/web/public/sw.js b/src/web/public/sw.js index dffb03fd5..a123134ea 100644 --- a/src/web/public/sw.js +++ b/src/web/public/sw.js @@ -100,6 +100,9 @@ self.addEventListener('fetch', (event) => { if (request.method !== 'GET') return; if (request.headers.get('upgrade') === 'websocket') return; if (request.headers.get('accept') === 'text/event-stream') return; + // Let the browser stream and seek media directly. Cloning/caching a video + // duplicates large downloads, and Cache.put cannot store partial (206) responses. + if (request.destination === 'video' || request.destination === 'audio' || request.headers.get('range')) return; if (request.url.includes('/api/')) return; // A rendered HTML page is served `no-store` behind a capability that logout // revokes; caching a popped-out page here would let the offline fallback diff --git a/src/web/public/terminal-ui.js b/src/web/public/terminal-ui.js index d5aa45e4d..a21d9f127 100644 --- a/src/web/public/terminal-ui.js +++ b/src/web/public/terminal-ui.js @@ -3679,9 +3679,10 @@ Object.assign(CodemanApp.prototype, { _openTerminalUrl(text) { // A `localhost` link tapped from another device can only work through the // server: route it into a proxied web tab (webview-tabs.js). Anything else - // opens as before. Lives here rather than in the link provider's activate() + // uses the video preview or opens normally. Lives here rather than in the link provider's activate() // so every caller of this one opener gets the same routing. if (this.openLinkThroughWebTabIfLoopback?.(text)) return; + if (this.openVideoUrlPreview?.(text)) return; window.open(text, '_blank', 'noopener,noreferrer'); }, diff --git a/test/fixtures/media/preview.mp4 b/test/fixtures/media/preview.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..785d9b01d23091f25ae61ea3bc8b069244ae6bd0 GIT binary patch literal 2161 zcmcIlU1%It6u!IZueLUAQ!P^U)~2A+-OTL9Z5tWMCWJ<;rK0VF3gg|GyV)@_JCi#% z$!=d-rP@CD13na5p}~jJABrF-J_#+9B8uRn1wo{umV#BVP^4!4&dhGQ4aGMPd*}Rq z=bm%#nOVjduj*#x#bLl$mJ!D)h#AKWqCu0fCH+Ad&M?OOV5a7RcTvx8j4l6;Wf=YL z&|M15i}c|;k@u3ajP>l%N=(A}nx0Jd?CA<@XT!dWY0*CS+BY){&}Rv-U%EPmv`PB0 zPAo~Kly^nD=IrIb^#pu8a2NOf1k8KczDo%*S95*U&cS9pS9WCL`=N*9qVD>VVzN_# zSFb|on+cMn-DUT?sc)03B*hSsf7P_|c`9ekSXX?=7h@fFE`(w}rAq@R>du)OhSByo zL|R0d4Z9IvGV(<;ZyE*edzD6^G?+S*=f+kGd^@5>GcH@z`iVU}0e=2UxjZ+Q>BTiM zdSr(G96A1ahApdIzxvJN7yh|*i_pE1h$C<+gjQcgtM)1Pg41FfW1ZXp#54xeMsgn- zqnjb>;LkXBV%Mj3+*0E2Yx9myD&dk`;QzNDhd{4Ry5A<$?vMf0shtWS*@f=_Iobq! z_Akh5u~v7jhaj){5BzM`rmW`4=m08!}blVwX=t#dz&UHkHvE8|}r z+x9)bvgP+1G+#W&olr?`LR3Z5*ujgYGsLSNMLp_&+=UGg;@_=pK3?S=Jth&!Sp9LwZ* ztE?h-WyKGjNy{8Eh72z1!f(dXG8)ApqhXpw9!RSu8$6z_K-$iuxCtnpwsI{qZvcb` z54?tSZOUi@VJlIekd|5EPECb@umLr>R?_#q7}Ac$4%g8ToTBW2voNf$N$ABDPB055q}OgJO4VCXap3K`kAF!Rsp7!|?*4 zsSdBMrSb)WV6XVoN;GXJ3?iYSJ2)bIaJ@QGAW#X4sVWi37>8A{qb6j}wF;1hD(T3dq# zm8k?BsgiLGaOKzw?UG+PmZPdXz{f;VTTrY*F>mlGYQ{41C5RCvPPk}TrJXRuT1M6& z_aa;p1_F18Tw)6MPq)bqVS=BPM-Q{Lt@&TC-oDQ-9l7*D@83Va|M8>mHKwPIzVuc8 z-OIaf-egN}tUGV-|8dWnt@BIq@{YWD@9*K%>Ct)?~JY8_DpL5 zf2tdQx*LBUcpv!9t@(5N7<>CrivN0SLpT0fH~#tpeqH&*A8q`>*8JIHEW12`&pmJ# ld@k1opBw0ce^hM4!`A%i!>s3a3V#vs?WjI&cuu8=e*vHH&~pF) literal 0 HcmV?d00001 diff --git a/test/sw-fetch-skip.test.ts b/test/sw-fetch-skip.test.ts index 2280960a3..515893b60 100644 --- a/test/sw-fetch-skip.test.ts +++ b/test/sw-fetch-skip.test.ts @@ -33,7 +33,11 @@ function loadFetchListener(): (event: unknown) => void { function fetchEvent(path: string) { return { - request: { method: 'GET', url: `http://localhost${path}`, headers: { get: () => null } }, + request: { + method: 'GET', + url: `http://localhost${path}`, + headers: { get: (_name: string): string | null => null }, + }, respondWith: vi.fn(), }; } @@ -48,6 +52,22 @@ describe('service worker fetch skip list', () => { } }); + it.each(['video', 'audio'])('does not cache %s streams', (destination) => { + const onFetch = loadFetchListener(); + const event = fetchEvent('/preview.mp4?token=private'); + Object.assign(event.request, { destination }); + onFetch(event); + expect(event.respondWith).not.toHaveBeenCalled(); + }); + + it('leaves range requests to the native network path even without a media destination', () => { + const onFetch = loadFetchListener(); + const event = fetchEvent('/download'); + event.request.headers.get = (name: string) => (name === 'range' ? 'bytes=0-1023' : null); + onFetch(event); + expect(event.respondWith).not.toHaveBeenCalled(); + }); + it('still answers an app asset', () => { const onFetch = loadFetchListener(); const event = fetchEvent('/app.js'); diff --git a/test/video-url-preview.browser.test.ts b/test/video-url-preview.browser.test.ts new file mode 100644 index 000000000..4dfdde651 --- /dev/null +++ b/test/video-url-preview.browser.test.ts @@ -0,0 +1,149 @@ +import { resolve } from 'node:path'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { chromium, type Browser, type Page } from 'playwright'; +import { WebServer } from '../src/web/server.js'; + +const clipPath = resolve(import.meta.dirname, 'fixtures/media/preview.mp4'); +const videoUrl = 'https://media.example.test/generated%20preview.MP4?token=a%2Bb&download=0#t=0.2'; +let server: WebServer; +let browser: Browser; +let base: string; + +async function openPage(mobile = false): Promise { + const page = await browser.newPage({ + viewport: mobile ? { width: 393, height: 852 } : { width: 1280, height: 850 }, + isMobile: mobile, + hasTouch: mobile, + }); + await page.route('https://media.example.test/**', async (route) => { + if (route.request().url().includes('broken.mp4')) { + await route.fulfill({ status: 404, body: 'Not found' }); + return; + } + await route.fulfill({ + status: 200, + contentType: 'video/mp4', + path: clipPath, + headers: { 'Accept-Ranges': 'bytes' }, + }); + }); + await page.goto(base, { waitUntil: 'domcontentloaded' }); + await page.waitForSelector('.xterm', { state: 'attached' }); + await page.waitForTimeout(3000); + await page.waitForFunction(() => !!navigator.serviceWorker.controller); + return page; +} + +async function expectPlaying(page: Page) { + await page.waitForFunction( + () => { + const video = document.querySelector('#filePreviewBody video'); + return video && (video.error || (video.readyState >= 1 && video.duration > 0)); + }, + undefined, + { timeout: 10000 } + ); + const error = await page + .locator('#filePreviewBody video') + .evaluate((el: HTMLVideoElement) => el.error?.message || null); + expect(error).toBeNull(); + await page.evaluate(`document.querySelector('#filePreviewBody video').play()`); + await page.waitForFunction(() => document.querySelector('#filePreviewBody video')!.currentTime > 0); +} + +describe('linked video previews', () => { + beforeAll(async () => { + server = new WebServer(0, false, true); + await server.start(); + base = `http://127.0.0.1:${server.boundPort}`; + browser = await chromium.launch({ headless: true }); + }); + afterAll(async () => { + await browser?.close(); + await server?.stop(); + }); + + for (const mobile of [false, true]) { + it(`plays a signed video URL in the modal on ${mobile ? 'mobile' : 'desktop'} and unloads on close`, async () => { + const page = await openPage(mobile); + const popups: Page[] = []; + page.on('popup', (popup) => popups.push(popup)); + try { + await page.evaluate('window.__videoTestApp = app'); + const point = await page.evaluate(async (url) => { + // Exercise the terminal's real link provider and touch/click path. + const app = (window as any).__videoTestApp; + app.hideWelcome(); + app.terminal.reset(); + await new Promise((resolve) => app.terminal.write(url + '\r\n', resolve)); + const rect = app.terminal.element.querySelector('.xterm-screen').getBoundingClientRect(); + const cell = app.terminal._core._renderService.dimensions.css.cell; + return { x: rect.left + cell.width * 8.5, y: rect.top + cell.height * 0.5 }; + }, videoUrl); + if (mobile) await page.touchscreen.tap(point.x, point.y); + else { + await page.mouse.move(point.x, point.y); + await page.waitForTimeout(150); + await page.mouse.click(point.x, point.y); + } + await page.waitForSelector('#filePreviewOverlay.visible'); + expect(await page.locator('#filePreviewOverlay').isVisible()).toBe(true); + expect(await page.locator('#filePreviewTitle').textContent()).toBe('generated preview.MP4'); + expect(await page.locator('#filePreviewBody video').getAttribute('src')).toBe(videoUrl); + expect(await page.locator('#filePreviewBody video').getAttribute('controls')).not.toBeNull(); + expect(await page.locator('#filePreviewBody video').getAttribute('playsinline')).not.toBeNull(); + await expectPlaying(page); + await page.evaluate(`document.querySelector('#filePreviewBody video').currentTime = 1`); + await page.waitForFunction( + () => document.querySelector('#filePreviewBody video')!.currentTime >= 1 + ); + const viewport = page.viewportSize()!; + const box = await page.locator('#filePreviewBody video').boundingBox(); + expect(box!.width).toBeLessThanOrEqual(viewport.width); + expect(box!.height).toBeLessThanOrEqual(viewport.height); + expect(popups).toHaveLength(0); + await page.screenshot({ path: `/tmp/codeman-video-preview-${mobile ? 'mobile' : 'desktop'}.png` }); + await page.evaluate(`window.__oldVideo = document.querySelector('#filePreviewBody video')`); + await page.keyboard.press('Escape'); + expect(await page.locator('#filePreviewOverlay').isVisible()).toBe(false); + expect(await page.evaluate(`window.__oldVideo.paused && !window.__oldVideo.getAttribute('src')`)).toBe(true); + } finally { + await page.close(); + } + }); + } + + it('opens a response link on a real click, stops the prior video on replacement, and offers error fallback', async () => { + const page = await openPage(); + try { + await page.evaluate(`(() => { + const body = document.createElement('div'); body.id='video-link-test'; + body.innerHTML='Watch preview'; + document.body.append(body); app._bindResponseViewerInteractions(body); + })()`); + await page.locator('#video-link-test a').click(); + await expectPlaying(page); + await page.evaluate( + `window.__oldVideo = document.querySelector('#filePreviewBody video'); app._openTerminalUrl('https://media.example.test/broken.mp4')` + ); + expect(await page.evaluate(`window.__oldVideo.paused && !window.__oldVideo.getAttribute('src')`)).toBe(true); + await page.waitForFunction(() => + document.getElementById('filePreviewFooter')!.textContent!.includes('could not play') + ); + expect(await page.locator('#filePreviewOpenNewTab').isEnabled()).toBe(true); + expect(await page.evaluate(`app.filePreviewState.externalPreviewUrl`)).toBe( + 'https://media.example.test/broken.mp4' + ); + } finally { + await page.close(); + } + }); + + it('permits external media in CSP while retaining script and frame restrictions', async () => { + const response = await fetch(base); + const csp = response.headers.get('content-security-policy')!; + expect(csp).toContain("media-src 'self' blob: https: http:"); + expect(csp).toContain("script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net;"); + expect(csp).toContain("frame-ancestors 'self'"); + }); +}); diff --git a/test/video-url-preview.test.ts b/test/video-url-preview.test.ts new file mode 100644 index 000000000..ade14e32c --- /dev/null +++ b/test/video-url-preview.test.ts @@ -0,0 +1,66 @@ +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import vm from 'node:vm'; +import ts from 'typescript'; +import { describe, expect, it, vi } from 'vitest'; + +function method(file: string, name: string) { + const source = readFileSync(resolve(import.meta.dirname, '../src/web/public', file), 'utf8'); + const tree = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS); + let result = ''; + function visit(node: ts.Node) { + if (ts.isMethodDeclaration(node) && node.name.getText(tree) === name) result = node.getText(tree); + ts.forEachChild(node, visit); + } + visit(tree); + if (!result) throw new Error(`Missing ${name}`); + return result; +} + +describe('direct video link routing', () => { + it.each([ + 'javascript:alert(1)', + 'data:video/mp4;base64,AAAA', + 'file:///tmp/movie.mp4', + 'ftp://example.test/movie.mp4', + 'https://user:password@example.test/movie.mp4', + 'https://example.test/page?file=movie.mp4', + 'https://example.test/movie.mp4.html', + 'https://example.test/movie', + 'https://', + null, + '/workspace/movie.mp4', + ])('does not embed an unsupported or credential-bearing URL: %s', (url) => { + const open = vm.runInNewContext(`({${method('panels-ui.js', 'openVideoUrlPreview')}})`, { URL }); + const host = { $: vi.fn(), activeSessionId: null }; + expect(open.openVideoUrlPreview.call(host, url)).toBe(false); + expect(host.$).not.toHaveBeenCalled(); + }); + + it('consumes a video link without opening a new browser tab', () => { + const external = vi.fn(); + const host = { + openLinkThroughWebTabIfLoopback: vi.fn(() => false), + openVideoUrlPreview: vi.fn(() => true), + }; + const opener = vm.runInNewContext(`({${method('terminal-ui.js', '_openTerminalUrl')}})`, { + window: { open: external }, + }); + opener._openTerminalUrl.call(host, 'https://example.test/movie.mp4'); + expect(host.openVideoUrlPreview).toHaveBeenCalledWith('https://example.test/movie.mp4'); + expect(external).not.toHaveBeenCalled(); + }); + + it('preserves the loopback proxy and ordinary external-link behavior', () => { + const external = vi.fn(); + const host = { openLinkThroughWebTabIfLoopback: vi.fn(() => true), openVideoUrlPreview: vi.fn(() => false) }; + const opener = vm.runInNewContext(`({${method('terminal-ui.js', '_openTerminalUrl')}})`, { + window: { open: external }, + }); + opener._openTerminalUrl.call(host, 'http://localhost:8080/movie.mp4'); + expect(host.openVideoUrlPreview).not.toHaveBeenCalled(); + host.openLinkThroughWebTabIfLoopback.mockReturnValue(false); + opener._openTerminalUrl.call(host, 'https://example.test/docs'); + expect(external).toHaveBeenCalledWith('https://example.test/docs', '_blank', 'noopener,noreferrer'); + }); +}); From 799b1e897251b97f69d6afd977061a2145e5d172 Mon Sep 17 00:00:00 2001 From: Saqeb Akhter Date: Thu, 5 Nov 2026 00:16:34 +0400 Subject: [PATCH 2/2] fix(preview): open labelled video links on touch devices (#45) --- docs/images/video-preview-desktop.png | Bin 48475 -> 42451 bytes docs/images/video-preview-mobile.png | Bin 13971 -> 14084 bytes src/web/public/terminal-ui.js | 41 ++++++++++++++----- test/routes/file-uri-preview.test.ts | 17 ++++++++ test/terminal-document-link-provider.test.ts | 12 ++++++ test/video-url-preview.browser.test.ts | 12 ++++-- test/video-url-preview.test.ts | 14 +++++++ 7 files changed, 82 insertions(+), 14 deletions(-) diff --git a/docs/images/video-preview-desktop.png b/docs/images/video-preview-desktop.png index 86c243e5bae43e1f5efb7f08a86a8bfffa70f846..63421d6245cc0dcaa6859f844d123e3e1f273413 100644 GIT binary patch literal 42451 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/lr=;K|Zt`Hf!!68@_s zveHr1vKMzQvA(Ah@Io>bDEpoO00j_9L_t)lzge2hueV-hIVF}`}x8}daPu05r-{(JQ*KW6e(EdUrlEid6EzH@v zG5@ahzpSq;B5jf2W#eYiGFUCL#;ZPiOnK1L6m;?WPCQs~>kK~V4cZr+F=6r83l>LC zo`hr#%UVN+{eJ~Z-&jYtTd7IC8S&U+w^f;s28-*Bjb9DlbsV3~cN;68m23|C%6N8` zg{U}PD1%107exnWh;A{gB?)IRr%>60(Xm?JGpLJBcrsc`A|pw5T-N&d1cOU-{bc~ZN<@}Zn37a8M+-+y?zogl+(XT z{aZA^0CKA!;#wlvwnO6Mz`7Xb0@jb4tqtUHmaz&-$)*rs6b5VPF7a29fb72-mg+vG zV$T&vbUh_FPinbmdKlTYYV9qfbn)$5gVxP8ZAHxNlma2CTe>3|&Ow(_uY}XL!+Sh! zJQ-&fapx-?b%L?I-EZdEHN5esK*>fOGEZ{lb0no4h7Yq7l{>Ixx;||Vl^v&+)XI~TD9d0}OChL@)`IupzgH(uo40Osk$A{eXM{W~L{a#h& zW>~MDJ#J*U-cJAWeGO1oFY5=~>&nLYtfo>C!9At6=Hp?l=TMIGTkExBCcTaN0uU>K z9oH&azqUg3JVeeufQ!yS>ibQ9?~<;l;HlewDMkZ6h?O?a=(dOjsUl z9F#Ze??Vp|deS<;u58>V&?gPi! z=BO zF7+9^=UbrbA9bLY9M^43*uTyb_Jx$#Gu}b5;YvtD8XTR!6VHlqY2;zZxrISsiPrd0 zJh^<|UtJqLJhv`#_PZ;5VX)*P-;4v7>*PM`?bar_GZ5ue;!IgD_=XB z$*=UK-6bC3Kjj;~IWqk(;Qs>v0RR8OB7%DW000I_L_t&o0D_i?aoqHRbpQYW07*qo IM6N<$f+Y3N`~Uy| literal 48475 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�L(F7#aqT5rt}FJV&}I~PNTVLs^Oq;f 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 f00v1!K~w_(a%{ diff --git a/docs/images/video-preview-mobile.png b/docs/images/video-preview-mobile.png index 7f6049d05cb008943a2fc004ec17171b2fbed0cd..91bf0675c7cba889fefcc239aba988feb76fca33 100644 GIT binary patch literal 14084 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 literal 13971 zcmeHu_g7O<*JeNw6#-EY=_(2W3Q|J{K|!QMsZt|S1tjzm2(eM5N>>6zq)8E^83+&r z1f+#dXdx7-p|?N+$;6rUtu8KbyzS@DUCfd+dF$ z_FTVsmSJv`=@GvQEWpJjARsWHre67w1tZkm-6LC7CEQHigJ%Z^0KbQJ-C+W>@7>^gw~(W0VKuHIDJqnl~!Xy?)?$8SvqsK)x8D_R@vc zsESlHeRSCH7uQDwB9I~w)4Ko)T%W3*)%ItNvb`OC9Z{B7ky|byB}5w*LcYX!-Ji8e zO3OAMtxu@4F)_(4%dD)N28V7*B(8VF3sBY}Vc#dTv=SYOzsHBGbQ7f1ya?rjum+5J z1uD31eY7u>f*^d74t#?iREKZkS-7XF1Mp;gh`1?YqS~{!xp-A&vkojpqx6Nz1!7B8 zHtL$bzMv&(s46%Q`=cw0ie3&aCcsaYAt;Z@jfPxxr$!~>;&@eq{=`VBZhEW{;J@}w3e+e) zLQ-H%>80ThRYgBSP*P#D)1qm24CN4i4^iM_pSBo@N!3r)?Gf#B*=lDlEW>AhHFqY9 z2o|%Q>6It}gHI+9N=laW?Hq4O(bhNm;GOX~8+aDl1_ZOeC7f`{APf7kSz9-O$Gu#z zOx@J74($J>J6)2UPkrZLxSFd^V`(4i-~FXo+p`I_-TaQ(Zz1nex~4)LzqH3CZ zxTS@4;QZc8b{bi_3byv?>1EM0m%Ks<{-BeY$cSH*nhxx1)*kV%sTnFT9Ix=jF}vd? zn^(}ZQXb$HZqnF6XZ*NqfskU*a;gOwMf^3GWH(f3xNc`!`*JtU5TP-+{*IZwVcr+n z+uc26-9#2;my?$#hDXBppUsa~4aAq*0$Vx$UfK$h{We zOcj^KO=M8l)E)^=Szm3{%?@%a(sHSCTVNr(A7ln!7BMu^Z)BA3*uWzt!3RA8fzz<1 zx%zZ9(%Q^*ZS}y(EM{@iij!>dC9X}<7o@%hZH0Y5*=_36z|qlBBlO^2)l2G>k_M%d zgz}{2ijI>h?Ya}=|1j>?P1}T%2W;}yR*YAHOeuR1dXT)c<|8}VzGCW zW%B2GEscdVO|5$fJ|TlwM?M3mx1=NnK*h{+wwcwo;by|lY?L@0yzsb27933m0}sq>9C<`epG7R%3{wa>5*7P+}36TSV~ zdq1mb(=KS#yWUUudLzrQ%Ebtz7v~>0lAKiOJ)|3R1#kT1BW;@5ebX*fw_44_n6cwC zFz}$1XK3?e&Vp09ux{6rSEcMYd?_7YcPMxQ()6#5ZVXA&AoZ*VPVI+NgzkvlEgGvQ z9WC^U0LSv?`U=_tr_igZxSr6XQ6TNum*vzuc@lhfV=1j^t5t|*aO57xEL6K0I4U)} zy1ELXZf-7zLypIhtDuC3qh_bj^}B%M6^lms^oD8_w08#3sT8SK#92hTt)+Hf5!%&rzh? ztC$dy-7W!|9(zGe{S{VF zK3+Z-qbBf|6I@}vz_!e&NnZ#o(UD+~jVSDS=@aC3Bq$+GHV&u0zKsrN3( z;9_!r&febMzB@s~Bt*xb(*?jPsOs0X59BW^8}%Q0g(B32T2gR^;$7jICkYq`K|Q@x zf)S(~A#MW_TckFt921*pg>_pAv?Z0@MeLxhlG?XCq;v7Dfp}!noOk9E8;v_5fv^|Y zrJuxLoscOMA(+$>9<#gHJN@(Ia+a9X_t1y8!l=;Kn|mv=zRrEa@9rxjA};VgGae)k z+15J<73-%28%&M zbM+hB3BX&SiAHTm!dVHAp}S?Hw+4WOvYb{3LC24YUA z%*4Ib?=e>lGM;2lZ6mNi7f0ueZXTY`;%q#YZ}63sRZ@pBxi>wvIc;ahTeLw<_>|^-K!q<&(m%eNhS0VBs zwIU-Ig~yC}iiwH6^6&^+%0ijVt(9f+7zp(67-&bb;_UMxGxz+J@fa79q?%mVq(ICj znv(5;w9I&*+D6GpU68P|shuexsFT6$w2nSeP{wlK7iJ$C zuFc;>H&I1&9+hgqbhS8{YKtBEL) z#j&WU2-t_Ha>og#u95cJ5$+=KLK;q8j<8vSnwt~eY~}(P%1*`$)OQqi{>-pePS}Tj zObqsmlRh%^B$cbNJE=U7ibK*;1zTjB($r{4S|Jnlfv7OXNsBVlW=X&HAH6+T8B)fO zd8kSsiJoiD%g@hW+3Z$2Y%G7Vx#N-!y+pZNbd2XESTv01F}E~r&1jPc`vzUoHFj;h zpd(FG3Y;EhVTV*}#AuVO^Y9-UrBSF|-AIc9%vPhs&_e&xqs+>PSvT0~pc-SkG*w)$ zgznz0LLPfjbcv&lB%QT+;?wDAr+oAYdjbtzTx`{5-+{$zoNSX&9-;85+5y^eGP20A zsa$@O++Noni}oDpZf-8Hu!9;Qe=1!p1KCLtr`==cmpuk;s~Wi|;^GG@;qT0@x4}Kj zjPO@<=B`DD@iy(X>?&vb-J?g*!M|smenKWI_Y(Bk1RfWNjy+BkZSd_7l}OXz9(`t6 zM_VaO{|($8{DEPFL&@yOFPHXi!5CIHRIY@MK214T9jVd{4EfRU@Z5TNM@uBD0NRN- z8pA!GwX_O7-rKAGaJh?*k9WVV@=C&wzw8OG#(u2ir(2N3B}cPL6&slQl~YOmC~(uN_DCmdM|CPa4IP4Ht|&{Xw!52K`7%hZJt~V4&#CaT%}Gfk>zFaK z^8dK$2h9#Mzq$AOkt>Z%j)+4jlsu>v1nW+s_xVhx{O+RRG=>u{n(d_%rRovyy@#47 z`TgUj0;=DXa}>^t2(N*b664-izQk>)i5g}0=e9J39yVQuCI#x0STu!gJ+ZOX_)^7p z&#OO>I!gfx8#dNym03JPw^$~Lum!3X-%}&pMdG4$T%2ei`jL6MT zQ{38bJMU>tc8UP*KJww5@)m{6oZTqOE4Aw6P2RzOGz3i8JUV#5UeIqUqvdv&{+!A4 z0?yGpE?-nD89Qk%e^g58IN^of4{dHi18RN8g@P#4os-Rc5c3z<)u*`JGs&MHFFv+1 zGU^smW}M030^|Rd2gd%X=e5s$G#YPSKU*_-VQKO?v0|$%T~{0sbpxuP)KMMxBjOhm zN|VE}4BAUi{PB&WIlY-XW>4%|1=&fwu|NjbeAi}9)PD=3s3c*kI-judM|a_ zS%xRV!B4gJIh*9?a|=kd=OZRPEX@51Hwb_!uSw6iaAy76<#2%NM=+HStVLJrr5C@S z#drkp+(EUsH0sB@%m&>H{1vzgC$4r2PDSf?Rkt^AebMR3(ZT?KA3bbrr(+ zF{S_QZJ&$+4*y$<#KAg`Zy!H@?zs-Qn3F0r%~zVnUnL2XGN^EV!zW&9ejXdL(-hW5 zvjQ^#IzPxZ$42prZ*81veqTv=fn6mI(3h`pqtHgY1A3@x&_TO?-HDlpuBg;07bTwf zsi)ZOqUSf6sO$~F(GKKfI$FGWqe*Ug2DSEFlQ^n)T^_5K;|$r2)+ z)$K{wl46ZqSW1um*U=~RKL?k{ZmCaH)Yd5Ld^#7^_ z{O?Hn|0(?6RN%4f1#O1c+9}WOm1@L(l&@-|71nfixa~_JP;Y1g-J=ecD5}E|chUb* zx%es<@_+?!N2fH3bnfF31V zZ&C5Hq6-R~P6?V!l&~|q2tcj$oNFw;V-(%JKl;8lB!;3|RhMP@G;%x40$OgVToL3SjK9jn&K5L@a*i1(Tl8h)7y9QNtn*v*MWh-XxvHi-5B( zzY`60Too)!u3v8c{_^yJ)|TPZ(kxc4!K;}%zZ$#%9CNWu!sO!FpBF8k7u{Y+hi}}X zFITI&z*8nY?jta*Dn_KdrVwYdj|%!80yTR+k{P0hKYgu-s}xbn)Q$kWcOOFQDS>~! zcx4v<{c(7M66DK6oZ;RI;C-}1Sh8>yfA~lFMin`ihUSKyyN4Dqlgwk(n=25nWST-; z@j1<_!rQPGvad80qO;6~HCy8NL^ypdiGxt^XY6TCMXpwIhwDrEpl){miYM0 z`31}yJp=QSeHqTG0qMX_=;!j9nNU1rhD&nsQu#mKvsQL)MK~va*0Bqbn*zT1McPsJ zh3_u-JBu?pb8SJD0hgWv8P3vC*WX&xB^&wDOJa&AgIbG^(S4~iZf%JwUb(_ZYZz5flG3B1;@k6VnOz-|!v6<>Dve^;y z1G=F0S@w20RX@*Mp}V*DG4-Ct_QHlbLHN9sTpJlJg@=---^Fc<03_!GA;$6izK+Q` zrFAo1N-9$m&G+8Qwy}0Ze8kmyWwB}I)l&S#zk;}J^{>m$}ho1SK|E!WI;$)!}@YE4!I12q?bG~ew=ZR*Ev9WQ(bji_& zp~2y=QP)K~tgglNFci#~Lw@fu`f7^bYwJ9Jqg+i^w#FJ4c3v}7rb*BEX=}pe80%T!lH?siZUbKv;fBO$iA35e5&k?Rmh%fcv*5D&K2YH_v3t$ zO-lRU4g{1WCe6JE{uKOiZS78dMQZD_`F1eSdvL6wVG50osM&-})s(dO15ct@xO*kU z)`M3D7g{3|FqNy{S-2%L5PM*IJ-t3p{0?7VHf0m6#xq~B!-7`d8=(k>>=mIW$cpTO z1*N69h9lsWfXx7E=nz&QWE$quIIiyXobWU^GCgg-tEWfN`*`^0D-{%EGQVHR$pHxP$34R-;`Je+gN9zO2>7~Px_^*9A?qPO@z2~@UMK)^}7YG@tsRQKuj>3uP zPNlz&j|~maVYs7rFWDScs_hTn<3Hyt_=B}-$u}OTy3k>+% z(uZ|-byW3tc??@T%INfhF5@` z$NCvWbu64n@JC27Uh9-ur=EO9oph}x4&KxXYKbb z?yAz?MQdkZ7G$CxWt>wrK+Alr56h~Zac}kuH@0>OYJB)GoQWy8CZ}m^BC*4Q=kCe; zc^7N{eU7SyZn#hReA|uhiO-Q(NcX6KEjo{QxxXpG?9a#gE{FY{BGlf-K;@-QhPsF{8WV?;Lr$gIo4IpZKf%MINy#3#<{SwgI8cKkz7->ub;y0l3v?97qlXY=3V~#!nq4zHrCzl{Huvu_YR*kd%qwAbw&F<{Uh|L~%wG<8+ zeow=01NY<|sUX(=fp1A>!?~1pR-sAV{*$7x6Y{5$`EK35rk9JtwEfA5h^n^6=!}dE zb_!*30t3T9^J;6C54V%CRVK|s$uXsCJ%g2V@(}pNpP;pO@O2_Pf3fn;PBC!Lr%&)9 zx?tB1UkV zR^Zkn#+jMtb@nt|MqPS*75f#3oVd91YUIzvH?eI(X!=q$7Mj-$_|@F zeKxd>2(`FTuyxi=e zM%v4##zU-#;yyx!_urAtHZ-o*X|KJL0{bw0V?t#j||alQ$nr?Gm; zP>Ch&CVR+Ar3LpLa!VTQw5=6TK~6{TiHmOm=7DPsk%LGt<&h)KEM>oO2Rt12C4e2pjSB`KLlu9lXspDr%JuHzX^oC$+Q>LqutAE?8+jF9TSqpSUKylOt}Jw@Hw zA=@)=w9jXC)$K0D4!se5hVo=W%bfSv(kSHR9Tj@8_b3A<``yK6VM=ot{+_VvdErYF6a*ccE5k0|Ao-;feN=_qkUyvgFi7o zB_)N4WyxvDk)21`b$FS>8sz~58fMB-Wm%S1SmM!(GJW@vX6|7!q5gkyN4rb=PLmJNf|h>7yX>JWcC@`e!X@SyXN`@_I$3Dyo?QCovxZ0X!XlA?++nq1-rppU z_Honk0mag6)AWepYm!`7e9C=gs2hTD!s2La-QxcO*WN51_=XYYF&-<^ycK#Nz@p%kh|AZv$V<;QL-J6*D zjsEL|YLM-Bq6}DS8Qe}58=~S?7(>GE@U)Lr;NpxO4j=Vfrh#~UbpQ-c%c zJwtu{?_>2+6GiQchr;Z%_PXL^;x?hybU;5%wZyB&)y;FXNmxHr_8zMm`I(jZSA8E? zq7e=!aFoFXW5aasG927~Jktr^TduGo+?g9?cAA4JJ8`RFD!e-C#B>S0QO{W2&uwgq ztw@{OCes_Ah47VEQ->9db7`qr!BiU)BhLW6@;Q3UXcgZs(fR713~&3>)s?9l{ML@T z)oKV`>$Kz-bALZ+vp13ZD`Es!1@*U+_~EAz_Y`nxR$7-!`5Rv#)6H~4tWmaoldI$> z!!8;JNF1slrmL_$?V~vt+ih`FRq(w^?_sQjrNc1Q^t@rkFWX><5pd&YvzRMXUE>#|j}WD|9X!Sn z)@)4NnW>ye5c4%-AOGZNr5VTH@>oZ_3_V#_Y<*PbX&jK{_};+XXU8uF^k21rcom*z z!K|FjcTW!f8u&7=iU1NP@;qg}0(qrL+d1?ES2FRL7oX30gKrlEhykT-cd~jS3q2WU zZghG?8v~2d+-|2ch|%wwwR#FH`t>Q1LuPH=N}1>SyQewtOsHrvY$WO13|`gL+KX2W zI{ag{6`G#9xV9PoX;P0VUZ-M3>BmzT}G zhG7l}IO`BPJF#=rM^JnIy1N|J($YfjD%0Jt*>Y@Bmx%1?(t))fPj4<+gT=WFZV0b& zthW!B#)hVHwu%og&)8PA#|ikJq;wAaT;%?XqdR_n_Y#nScE`&TSu5SRj{My#mIg)r zt}GiXV#^btHqtYybziBatOzJOB{enwb()-lf?)C7DQ9IN5_{8m*oRD|dKtwInM3JR zDk`Q*{ivC^4?EjC-563FDrEWBpN9=4>Y&V*ns`YU*gI}1dsgJPl&q}DY({!&mVD6G zOceQ#n*G|y*e2oc8j7LwOA~>Ij=gzv;v%BuMFcPtbXaMd>c*%I8ux?j(w~4WF%LD>} zNWT+Ye56&SC7N=0(@ppWL+qAz#9iihonCxz24Uza8LmEI3gq0iT3%V_y{OsNZYXKA zJF=w2zpeV!WI(u)#F2Vdn|n~!iR!{KJh-RN{9N9XE&SQF`A?0iAl#KoF^@lDrCKiz zZh3LJ`6~oBv^&A?F2u4CD&ZQk2*v?>=VXqjz_wjMF`Z=xz5yV^>u81doE*Ys440l6 zJ_TF@y&dN~=07c*ml)#*FtC3!!^`Xa=y-Q!O0e@ubP!`1uU_MVo<|3!j%n$hfT z2zc+d;BL+zc{U^+J>zbEp##y+1pYNwtEbW!u-)z+X=5}#4 zd*;T!9%^vXn3e*=vZf$NRYi>co*2;klRr5@wvOv7AG|f_4N|@j8fkNy3Jk8Gb7#`j z1Rv6c&wjXK_OCs9G4RU6@kDxS7W%>TVf@R}*~|ZU0snF!<=3K^xaM2*+g0>KJ>Nvq zWztj+46EZ7ld6n;2>&|ZMwfW6v4iQZ%kKhck5v*uCm0BH)L3&@^!}3;QN?PgJypOrwL|AuSb5#zJ7QsptcAp6OGOo;0`ot$^GRhu>b{V8kXnd5-m z=?K|jbk&fwqpK_`f24KxgDEJ0uY8}WpZdZjQFl9R7EpGP zv?^AeiYuk}eEAxg3qmdif3>L=rt9P?DAe7C-XlW(454gYnd|htMjyNfDm8dvr}$bz zyi4;kvWoHA^;fi_C)8ZD!L=<^e(Hfh9^jgKg#AqnVwNJ4f_t*~mZm`y#8~_G62a2P ztQbUf1X)&Ga-HMzPTM{XV55@MRiKHWY4q|vlkM4m{^%&JbX1YzhjYFsRx;Dz+yuL3 zW4*Vg+8pTb!*@9WekaqVU@j6cHsL8=kou(SR^FhgyCQqwJ}FGqZ~Jw?Opx>E#5u5g zh3C$LR|mB)aqcr{sZEfwEV0eisu{`1xA#>R#Q452GXy&e%F7S=k}Gb$sBj<$(n{ zx6Gm4=dxw0_A=}~YOi{4jM)Ihu7q54rj0BAyy8dPAP?ktXWRYdc#)ao8SCA1HQ^HiCw~xF zoKPwxAu1|0Vf&ixav%ejMRbi~lb*(isu?p0)a1P}jaPvMKGGkek=@-vE>2FMPjc%g zfrS1zhjzm|k{f0g7Kn@tdR=KNF*iCSZ4@|sh0~Abx=Th|5n>#4V);!*>oCS!=gD`bngQIXKw!cMu3VjF}~31>hVo#!;IW{kWj+5 z76?oEvs=+;F61z`5B&6DFxO%{18DcsqZB11vE!;88Q0T=ohEPVH13ndfP(6w%U=7< zA8?>R{@I1t*jQp=ub)b50#-pT_NsiDJ`@Ur*^<5rB7kKo!E>K>>-p4us^>XypO+vR zGOx_-NrHH^f0N(J+ysdrDChWWEc^3k%b|ikb>Bq;E2x!Dx};D8>0sZ)MRC(-dya|8 z@6O51C^9-NZRxC4NYGqH$V;0Bui3!`eWki!7d}4np1`*lk)_3?!D&323$r~T4$~r^ zQ}R5%iT}n;=Q!dTPBP-3o|J?gA9ik*1{(qcB-W_y?h^ZK<4ScvY$ggia^3~IDiD!y z)&DrCw@~G$l8}~0E5Ujfy+e|ekT@_kGh19-NCkcR>W=!O>#Zh)kSs7ls@9axnKY_C zpXpaWAx|bOK(QeKo0$r*cuBr0nJP(}+Gnt3O(Ua?m1I!?-K$;=i&3--;9cbG-Bhmn z@3NU_2TI5I_&5afb9HAyA6=Z`(^@)Gk{uY>g9ZhMNp$cDFc?xZ08TYaQ+cU@H+ z8kvt=TEfatM6OOkUWZ{8{CnB^3aZ|~{7%csDJ+M#M?^^4%Ge0C?T2PY7Ax0+Tpp7) z9^%ilBnXvM0P6${SJGICgeGJ^1LiSd9yozqmN>@mo3PM{SR9lOA{BcsJe6 z+053FvhZ1IG+wOerOQd58UnW^j>7RHUzKWj-`MKGu|T;awE6E27P05A6qlGqb=$_@zv(Ov=F`N4ng14!I2U;Sj405LZ6GKI8*ba7JrHw}jh0Zp zfl$NZ@@%F0Nei}Pv{83E8?RzS>8N}BxGNK3lTZLMPq?*mb1+NAHs`mx)?XfSUycDY zddFYXcW7|152?XT;mBehV6s3r9s1x+;DIm-yW6*Ne2p(7cItA- z@YK}DU+yq}lu-f$git9~`f*@>9IY!GNYy&Isb{DU!St5`NBF->iml7K9~eSS?4J&# z^$LlDqs>Sgc*y7)V*l3`ABO@ypj z+6>+j-aW4KEh@^UcWI7*1oBRoQ<-kP=WwlwXgqV$H`B=JUw?#uD{2!GI*D0Il*I`2 z#D*HwW1@DnE|Mrbv6P$6E;t6Cj}6}6uYo>S@#!O@C&Y5wNkrgQ&*vd@40$E~yM16z zdZbZvjl$oV5~?~Q!UQ(Y8J*y&%C(P&yTmIL&QGymenDZs0`; { if (/^https?:\/\/[^\s\x00-\x1f]+$/i.test(text)) { + const proxied = window.CodemanWebviewLinks?.linkNeedsWebTabProxy?.(text, window.location?.hostname); + if (!proxied && this.openVideoUrlPreview?.(text, getSessionId())) return; if (window.confirm(`Open this link?\n\n${text}`)) this._openTerminalUrl(text); return; } @@ -3793,18 +3805,25 @@ Object.assign(CodemanApp.prototype, { const bufferLineNumber = (buffer.viewportY || 0) + cell.row; let activated = false; + // xterm's native OSC 8 provider owns labelled links, whose visible text + // need not contain the URL. Its normal mouse path never runs on touch. + const nativeProvider = this.terminal?._core?._linkProviderService?.linkProviders?.[0]; + const providers = nativeProvider && nativeProvider !== provider ? [nativeProvider, provider] : [provider]; try { - provider.provideLinks(bufferLineNumber, (links) => { - const link = links?.find((candidate) => { - const { start, end } = candidate.range; - const afterStart = bufferLineNumber > start.y || (bufferLineNumber === start.y && cell.col >= start.x); - const beforeEnd = bufferLineNumber < end.y || (bufferLineNumber === end.y && cell.col <= end.x); - return afterStart && beforeEnd; + for (const candidateProvider of providers) { + if (activated) break; + candidateProvider.provideLinks(bufferLineNumber, (links) => { + const link = links?.find((candidate) => { + const { start, end } = candidate.range; + const afterStart = bufferLineNumber > start.y || (bufferLineNumber === start.y && cell.col >= start.x); + const beforeEnd = bufferLineNumber < end.y || (bufferLineNumber === end.y && cell.col <= end.x); + return afterStart && beforeEnd; + }); + if (!link || typeof link.activate !== 'function') return; + link.activate(event, link.text); + activated = true; }); - if (!link || typeof link.activate !== 'function') return; - link.activate(event, link.text); - activated = true; - }); + } } catch (err) { console.warn('[LinkProvider] tap activation failed:', err); return false; diff --git a/test/routes/file-uri-preview.test.ts b/test/routes/file-uri-preview.test.ts index 0c1d5a98e..a392ae6d4 100644 --- a/test/routes/file-uri-preview.test.ts +++ b/test/routes/file-uri-preview.test.ts @@ -143,6 +143,23 @@ describe('POST /api/sessions/:id/file-uri-preview', () => { }); } + it('registers a generated MP4 and streams seekable video bytes through its guarded attachment route', async () => { + const filePath = join(workspaceDir, 'preview.mp4'); + await fs.writeFile(filePath, 'video-bytes'); + const registered = await postUri(pathToFileURL(filePath).href); + expect(registered.statusCode).toBe(200); + const id = registered.json().data.attachmentId; + const response = await app.inject({ + method: 'GET', + url: `/api/sessions/${ctx._sessionId}/attachments/${id}/raw`, + headers: { range: 'bytes=0-3' }, + }); + expect(response.statusCode).toBe(206); + expect(response.headers['content-type']).toContain('video/mp4'); + expect(response.headers['content-range']).toBe('bytes 0-3/11'); + expect(response.body).toBe('vide'); + }); + it('resolves a percent-encoded local artifact to sanitized opaque attachment metadata', async () => { const filePath = join(workspaceDir, 'mockup one.png'); await fs.writeFile(filePath, 'image-bytes'); diff --git a/test/terminal-document-link-provider.test.ts b/test/terminal-document-link-provider.test.ts index f7193bdd0..0e70115c4 100644 --- a/test/terminal-document-link-provider.test.ts +++ b/test/terminal-document-link-provider.test.ts @@ -1263,3 +1263,15 @@ it('routes native Codex file hyperlinks through the guarded preview using the ow handler.activate(null, uri); expect(preview).toHaveBeenCalledTimes(1); }); + +it.each(['mp4', 'webm', 'mov', 'm4v', 'ogv'])( + 'routes generated %s file URI labels to the guarded video preview', + (extension) => { + const { proto } = loadTerminalUiPrototype(); + const host = { sessions: new Map([['video-pane', { mode: 'codex' }]]), openFileUriPreview: vi.fn() }; + const handler = proto._terminalOsc8LinkHandler.call(host, { getSessionId: () => 'video-pane' }); + const uri = `file:///Users/example/output/preview.${extension}`; + handler.activate(null, uri); + expect(host.openFileUriPreview).toHaveBeenCalledExactlyOnceWith(uri, 'video-pane'); + } +); diff --git a/test/video-url-preview.browser.test.ts b/test/video-url-preview.browser.test.ts index 4dfdde651..fa474e22b 100644 --- a/test/video-url-preview.browser.test.ts +++ b/test/video-url-preview.browser.test.ts @@ -63,13 +63,19 @@ describe('linked video previews', () => { await server?.stop(); }); - for (const mobile of [false, true]) { - it(`plays a signed video URL in the modal on ${mobile ? 'mobile' : 'desktop'} and unloads on close`, async () => { + for (const { mobile, labelled } of [ + { mobile: false, labelled: false }, + { mobile: true, labelled: false }, + { mobile: false, labelled: true }, + { mobile: true, labelled: true }, + ]) { + it(`plays a signed ${labelled ? 'labelled' : 'plain'} video link on ${mobile ? 'mobile' : 'desktop'} and unloads on close`, async () => { const page = await openPage(mobile); const popups: Page[] = []; page.on('popup', (popup) => popups.push(popup)); try { await page.evaluate('window.__videoTestApp = app'); + const renderedLink = labelled ? `\x1b]8;;${videoUrl}\x07Watch preview\x1b]8;;\x07` : videoUrl; const point = await page.evaluate(async (url) => { // Exercise the terminal's real link provider and touch/click path. const app = (window as any).__videoTestApp; @@ -79,7 +85,7 @@ describe('linked video previews', () => { const rect = app.terminal.element.querySelector('.xterm-screen').getBoundingClientRect(); const cell = app.terminal._core._renderService.dimensions.css.cell; return { x: rect.left + cell.width * 8.5, y: rect.top + cell.height * 0.5 }; - }, videoUrl); + }, renderedLink); if (mobile) await page.touchscreen.tap(point.x, point.y); else { await page.mouse.move(point.x, point.y); diff --git a/test/video-url-preview.test.ts b/test/video-url-preview.test.ts index ade14e32c..f1293e0a8 100644 --- a/test/video-url-preview.test.ts +++ b/test/video-url-preview.test.ts @@ -51,6 +51,20 @@ describe('direct video link routing', () => { expect(external).not.toHaveBeenCalled(); }); + it('opens a labelled OSC 8 video directly with the originating session and no external-link prompt', () => { + const confirm = vi.fn(); + const host = { openVideoUrlPreview: vi.fn(() => true), _openTerminalUrl: vi.fn() }; + const factory = vm.runInNewContext(`({${method('terminal-ui.js', '_terminalOsc8LinkHandler')}})`, { + window: { confirm }, + }); + factory._terminalOsc8LinkHandler + .call(host, { getSessionId: () => 'source-session' }) + .activate({}, 'https://example.test/movie.mp4'); + expect(host.openVideoUrlPreview).toHaveBeenCalledWith('https://example.test/movie.mp4', 'source-session'); + expect(confirm).not.toHaveBeenCalled(); + expect(host._openTerminalUrl).not.toHaveBeenCalled(); + }); + it('preserves the loopback proxy and ordinary external-link behavior', () => { const external = vi.fn(); const host = { openLinkThroughWebTabIfLoopback: vi.fn(() => true), openVideoUrlPreview: vi.fn(() => false) };