From f9a7b96a0df752f49f10a32a0751f766e3c24bef Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Mon, 24 Aug 2026 12:51:46 +0800 Subject: [PATCH 1/8] feat(desktop): preserve WorkHub routing context Seed current and previous focus from existing Sessions and support first natural-language corrections without introducing another authority. Generated-by: Codex --- .maka-shots/workhub-context-after.png | Bin 0 -> 226633 bytes .maka-shots/workhub-context-before.png | Bin 0 -> 226498 bytes .../e2e/workhub-reconstruction.spec.ts | 50 +- .../main/__tests__/workhub-controller.test.ts | 574 +++++++++++++++++- .../__tests__/workhub-surface-flow.test.ts | 21 +- apps/desktop/src/renderer/app-shell.tsx | 1 + apps/desktop/src/renderer/styles/workhub.css | 9 + .../src/renderer/workhub-controller.ts | 134 +++- .../src/renderer/workhub-route-policy.ts | 151 ++++- apps/desktop/src/renderer/workhub-surface.tsx | 62 +- docs/workhub-domain-language.md | 4 +- 11 files changed, 926 insertions(+), 80 deletions(-) create mode 100644 .maka-shots/workhub-context-after.png create mode 100644 .maka-shots/workhub-context-before.png diff --git a/.maka-shots/workhub-context-after.png b/.maka-shots/workhub-context-after.png new file mode 100644 index 0000000000000000000000000000000000000000..8b82852c064fecd883f9e9f5ffb4ef1c65853f48 GIT binary patch literal 226633 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%0DVCb{$6GZ{~FEfH1lu< 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 Hc>Cmc}F3jIWGVj|c75keM`(=A?7hYIj>`t~8-a zsx2a`xS`<{sNwswly^b>g`lI7TD@s$PdKE5rea*qoxyW1KJ`dW$%a?MkXC+oEP@h^ zd97)X59ww;?;d2i0;TT@3Vsz#*m!JM-JeYe_Rn+YVR^+9aSS5zW*{oh54PzGs_RZ(!gumiW$&hWlz@vZrsgkwmta`_8z8-uT z*=h#Tq2-9K+&}tO>t+IQn#tlt0&OAX!F>C`S<&N9k1P(j;YjqB%ADv=sHL9A%moGc z;IkCLYM69MZJNFHHCRN(xdQ7lb)NLbI?uGxR*L+&b8PQDc>Y)Sd@FDK8XJCNA z$@$aYNK~Pj%@%LZ1uU*}J>)+GTE8}H_j$OFy^GjdDgo^}8QlA+m$2YXK1xg&R=Dt-p zpRhZJRXMy!5UuivN#CDy1R8N=LfEMZk>YkyS67D2U{_{_q?M)R4%j~8P+!5mFlNJ~ z42_*%a;Z1O+6rDP5-z-mKHbBbli~4wQe(EMF`5RXC<+~H2h2GZ=b8&wuW$^u**}@7 z_kiNHD#`Y)6-&iUl--~Uk{ZnOgXZ0Q<)aN+eFc0-S{GZ@eOfUeGI#~r(&6ia#b%;B zB6~=8ZYP+EM|42P#CS(jn(248O-!1ZW_J#LG{xoK${#i38Qt#zO>|^F7?AqH3-y*N z1P@Io_9Vh5Q*HTryiCe_BY(mD+UFEdotqEq3ovhjAj-4Ais-`I@Yz3Y&~H%sWO?bq z0GnkZYvu^T)ovhbtVA;uGhO?37l0nothARY^UAVppwGc$3VrY ziiQjaiwu9smBZ6tfz25rXii9}(h!751#D4~BVh95B_mSgmZ2?C+c$^yRYHd}Kg&K$&o5{JiGSIfo7!Na>;T3l>%?zr#w7&8(%!$8c=?pXIJ7K|)S$@v|ANY{pWpK@?aY^RSz?ht1*)YZL( zgtfKjkOL3fw&Iaduv(VJr3!advc-t9ES4c?%~E!(r-%m-U3}tw6;W}k)R=m}#6vt1 z6A~_9M;nxzybB2kZsXSLR0Bo?pv2z$nTnZ$r_Mk@oF-AWu&}TI;keXO=#ek!m$ZkM zUsxz6EG(Sanvzqw;u`^XSs<&Kh69ySl^%_wsxZPWWAswlg~bAt20DpLW{}b%FQ>X? zYq5YRI9IR&0s}`}YWMb^($jB48C%fR#Uzs`C@AQSR=Qi=ie{_H5V%*U1eA}$@Vvau z{Aap9(*A-wD8eu>g8-g4db?2!7)dI4a#7zW^x#q)@@(BRIrRy*YIm-d{l$T@_wsZ~`Y4&`WO)(ZE^w zNs?ypGYuQ?90)i>Ho)(ZOtv@-r1NAe8~S`*cZX`++(e($*VSbxq-SI}hhKCoEJq2l zKX`}7Vl14#g_yl*)m|%PNVclflH!Ems9@Fr7PUDCCCSs@VVV&2X%2Ep({*I2uHl zh00TAzN9cSGt0M)PE5S~cr%C|43h;)fGv#!{n260=UQFO<268}d@gN6{8E;SHr=}! z%YAm9`xTmEyz?tKYnLoQU%ohV2}2~lCze1x|#z7kia)nhLojp z?}l&HZY$1wCeWTio^$2qIK}IjmRNPP3EMW{QgLD2#x|_H&*Q??3al0-tLEY4hI|K);jdOr$4gsX+3@00vZkHF|7Fyn&MN8gY zQhi_U6Dyvbb9CqY6U<$yhaG~#sTTBH|8%;&)%;HKrEV*BBH35!k_+zOZyjteG&mO( zB!7mbN zOXro(!O@_ttzG8*%7vMixy8q-mG4`266o#9F(I?V`;;i?OYdgAkZ+y`Iy%V+!}29$ zx5IAAup3a$h;jv0@}&U<2G48KSZjY~m+S314~&e*B3xWtHYXW#jeP>;%f>K_gUUhH zH}PD`Jz=sje4&%eY(wo`Y%U<;Ko7sGx3&EYv}RIHa)d#UM&D1cJ>65iS>_CV5v=hL zTl5TiP~h+9D)$3O=%KVUa+VAz+d!rdW?U8V=xu2Dq=Ag}Mz*tD`xO11YU@r+47m)q zOgE!}AGavoT@xFK?0I=K_V6Wj;P=_;GS4v#EaN2IM29X0ZyM zv9B`yH7<;Y)XN+NGHI5eW+C(t(W(_~mCmSZQpVC!R95z_D9X8{sAT+QK!x?j?}Ukmp2HkpH-rWup5!J7u9<#?6AN{Mg?%_| znC^$0;J1NK-=e;2s27<*F2~ zz=$LvDS2@UD`J~{d&2v2&1xXu8m`rsI!ly+7ZkOBImbg;Vs)w5;qL%&<+`V^ocXux-Df#Gus*B-`MN!~9vNJZ3l&J`(`GmCQ6@(7sI(}W&GiEt<^AU`UWADuk{pxxUy7=@y>H(lUt!tX0y?Sz4mNg8h|Q@j zZ*9P+X>Zw@{)5;9Z^?ZWG&Dqn0`%?0tp=gJzq%8JFjR0S3cYtOK$dm`nJZ9CUknx& z3b8H0EEl}WkKb56#LU8=OM)9Sko4LhKYYG6)jgwmnFR^|!6938{^c`+2NeOq`piP& z$K+K?N-3*3rW#=f1Mrmm{4!PPvPxTwU8&n)SQheJ9lzXS_6FIy7tB+|MpH4ik}BRB z<<=A&ly znUw%{%B6}+NQ%VMWdmu*qznvFnRr1da9-6_ri+M0xF)w{$5h83AVLzZj6|}V!|>P% z?6usKv>Y*)r~++aK~ho@j8KK&O;k!lR)^Pl%%>+ODrDuwY%oGvxBSkD^B!Ze$&Y32 ztj#xgEK!hK1nPs{{ zHPB%|Mp@S^{4~_-ReU>Gvn+Mr!BJF7PF8klwJI_aKbwuLad=0ml@I9oKE>@iTiX@> z+P3%?XmbAT*JM<}3*HeFt5^r)tGJ#X5F}^Acp;yY!9d~y0y3DlmQq3egZ0(&r281Q z8WzCn!i6p~)wuU2S5?Q(N=hv6OQ~AGIOXiHs{!iK;JJ1KqApmLfGOnn=wNTJcZ~Wu z_Tx|`RaH9><--mr%jQxhLr7AfMx&8QurJ-1U@;qgncCqQNTx3&gCndb>3;1vJKKa@ zr1&{&s#aIaFgY8=@o-P#ZCSbeB9GbMzcGK$V&4DV?DM3{HrIIx44s`2YfP@5QBuVwSpTmZaUzlq_q*ey1rn)3Q5D0HDV9^TU1T7(RKUMS$ z+6t?5wK(DgBOFUGV;At&VGk1*s&+n(U^UCJ;~U6OgawY4_n|NquxS+Hr8(mYRj&NJ zb3^f-z<=(`Z$F?11W_zwlp4Aaq;+OfpQ%o?FYxr_sB^I0od78i_%(oyDNdn~Nq7a= z70hv9{QW7yd;r0CJjTQ3t-^!3no_qhBiCeViBFUZZP7@ipddhgjBJG1fTH{6aK5%B zS*WOupl7htFvLEzRE1N8lERC@`3=6fwyR% zpKaJJ_l7eXzk{L?*?Ao_NNh=_g25ro5L*DCVQUvrVnW?Z{=ST;3~Q+b`4@1W!Gmiq zYZi)hf?2WFAfYCUOowOV%a?Z-j>Gy?y%|BHoko%;xwHzxDtc8-g&$;4+sjdZHVHmapykUHl11=%(6}3PbhNh{PiVRg z;F^SrTH7LUwl z5qm;EW3tAe8x&v;F>t`gGTLqAdgI948m-p$01t;=SVQ-9m^qSTkB*Kq6?0;^txm>A ztfme(b4xwr;jy0&#UU#d$()1N+FVdr(5uXM4fvk!nlp94x~4(Q&!m8yIETq76CODb zAHeAUXg}Hm2$P>;v_#E-DPlCqLfheoVpj}0i5Ma?H?vFycitT90z4YB!uO1gP4HOs zhxxwW45gHZ(3*?8dqtg8x4dw^AxCe2h+4{sq@a=JP2B9dM=WGKQ4;*S9GX#VI#Np6 zB61K-X;ebC(2kBQYf*<%(J{zcVc>%}UsFGJV73J#a=rABOtFDB2&Gr6t zOsZTsGyFEVP;e-RK?8a7=FN#{-h0y!iu?k`NKuValQD(l0`Etx3bqzd1~5swTa6n5u4Sxcon$WmD54_6k$|>mD&2snZk;*g zl{4gNy?LXYVm!j_6_OBKL|JDkt6Hq$@}U)6{~X#U)+iq_?_(O&1cN*jBE4U?Bxl3P zm=!?l9f;dHO+!P&W>fJa2uDarsLy$cq)RWw&kK~mKPoDyA{VpeN;i)0WZ}MX*Ol~0 zhlmg#>{L4y2xXy+e)s{VBeH#a6%eNO*D&u)QAyg^TVHC-E1sGB_01m9VGak&?-yhI ztX-k3+>khlORD6(0h$&%F%gmY=K-g(6!*EfNb6V$1;1#Hrk~cVJ&937958=gm%i`c zH~;356_6IVjK^dB$ibd67%iMhMWyx>LVQ}vFWwlwdp0wzxveR}U*_hl@%LZ7a>ilr zQuP@{MegAr(evN$2mjYmf0-hr&wKu_55XT>ypk3yFAc_w|5#oB^*Lo#|;#D9e&+ycxMVm*=-T!*=4mMhG=B80ZIQ-lH3|~O#{Tn&ti>Pv%;JP$_ zpA3S{{MXB0z|(;|7u%JR%10OVU)E;Cm*~9taP%a1TWQ*X-{|YY^uPWV{IP)L-DhbO ze&nCscnSaKU!1OKn125H6RFjIFAd_aPV>}u3tBS&-QW11@Af`Ra)l{qh>~H>Q~y8d zjsN+~l?$Znl7;DN^(vizYR2CW!~d1Baxa9mFc|ur$UpweypQ;b0&>2KMekl|beI2g zc|w|vnEZ{T7vm}a&reGzHe2k3F^{UpsojK%-Wx)EQw96RmG|Ntus{g#I+HuYD$2?h zmwlC$mFSOOgoTAkC%p1RCFQVx{`Bd`Ukq?4=|DvW#2i5>>WG1{k}8A_!|ztEbo{l$ z4mi=yicQrYw{e0QVdn4eFs%te-I6s98ig!r3yEjPCUY}MNzbZw`Ov_w_CB|3vwCX4 zNRiw5>-5D?mE-YB#%Xb_UKc~y+CV1MbS@{H1{bdHGBUt5>~3$*5LT4i&-_M$xRld_ z=H_OrsrD%kbYxCf=cAVYo|IQE)TvLfii|$$rWC8)Mu2$lbEV=+_1!NMHmWX-lCtN} zj&2c6H10Foc^Y0`Sa5P$ zEbq@dUwu^r1*OLDB9s}oI`}P(?2OUo_sityv(4A`^CM{1m&H}2E^{5SMl@5Ae-w9! z_iQR?lIr;f{{`}@f6%V`n3#nQZ3|!`f}CQPt?8d&(}8tvQB#8@%6%zdN{qivL`)2{ z%n9s>brhmmRVsmP_n=c5iV%Sg83M>PI5E&~-|o}FNG$Y!yEMcSRw zJfVz2onVLoq9hc%8qgjHF^2=;Z0l))eb4U$lJ!U?lefCMO}Mc8hyXMzYh$Ik#WsfL zWs$60W)nLgRgr~k-}yQ?_t5YM7uyXOoR7@Q5UcYJ&o`#rwg{P?HT3l4zidQ-R-jkq zYN?p%;gfMQ06pN60_5;Y&JEnkU^)>L%qTfT?x0EDA1Snxl6@-+&<)~0+Z(4Ox9aBG zLJbycoVNp5N?v~6DGCfe9tSi35Lb?(ZMs?wpUXTaNZM=kHZ?MxkAb5gd(i5QcKbG) z#cz9a>Ac$Aq5zYzB3OoTE7SqpbR>vRR0+V9tZ&Rfw93!1*szTWM#i{0 z2s5OJbgx=;>RRtj?(Tk0MMXtMmI~LCiggQu1OOZgO1 z3LHebK@J>{Zg3Q*1Vtn>(x&D7r017~;uxbCEvz_G0g&CH-N>>w~uzk=_hNZ&l-VtaPHt;iR!ko>tvjKTvn z3xrU@s;xWl@G&^%fh$Ym-p4aBANK^((ljrF9Dp5LNZ^Pcgk>^P+%Ihp~NxjXq{fO8t; z>GA%qvj4c6p5P|?>j*EVR)OjtR1XISN0aplxG4ZlwH+!cp#IU)&YC|>hBww1`F)<(Y*fl`f|P4E=O^g0pi?a?D44t| zws=nh4W13xDAP-q+}2ixJiKdxGJ?3MENhGiO@AQ6n(`6ig3jT;Os5QzWW6Qmxq;XV z!`zg3=^&=FnTIT}txv(UI=wfT1b68j)$8YYr%6Iyv49qYM6-G9Eu5IUHLZn`D1i_lzH={u6r*w{*(4M;F-jAuY09EyD~6|xz;ZwMlHU=BGf zs^113J>u8;QJ1zXo1!zDsCWamdz-9O?7QILOl8MBZ7rR`9^Y;$07ByvW*@5+bac48 zxovd|_$Fexx$0#ltGO}#AqY(;IIMr@r+&YtTpr)kAnpyqPkCC@FMhe5fQ=Qau+(s^}!0?)Lig~+F2b4i1-MY(^B0vi)tm>V)sr7uFD zn@XCb6Hr01@z-b|C>>(Cp*;t(=R+&Ya*zus8P1%2d2(HRdU~2h$X!}4t2acY0E{_{ z?0wF#r*@VeqeK$`mr_O#q)GkKDbYK(dfb>yBcfMS8WXFy?H3yy>ob)J?(xq!IEp~J zp}O?k%IXKV#(N6(**+REIJy>tV1RU-2YxOIe29Tax+?o!Tt7+TUxl*vC}r!h>ct;1 zMI?-BYW-t!NB6>#M@3mX>fDa@pwWN_D+2aWFx89}HwuK1Ez_gQ2JM%1@`$p9lUbERwN-UxoQfz$u3O)~#cZrKm?SGQm_U zu5AkZ#;||Ue2?T=2LeHSd^|!b{pP#&crMFieTJ}_xj zv)+P{M^X~RRm{V|V0Lo8hwmQT1`s;fP&5G24xN_QX4DYCHp_e0(GREb`rtEb69{Hu zpC_G~5U|7b9MRmp9TIB-tmh2u!5wOu`iI%=v zxg>pp;d?t}8(d)B;3X8jx{XK1wl-X`eSF|>t@kLN=t;YZWd6LfXkw3fg65EB-j?gh zPLHBG@wXfp*$12niT=3(h20|8UE$de(PXm?eL3nKk@WaLHTmbdJnbfN89fpd{#QaE zg&q9e5KfH;9X&m0cp;TK6LgHkAC=kFQapKEVir~%wmKqZKQPP4TsBDsH_Mcui%FMT z!g2gUh_RHvasrSR`;soL+yn}yxj9lGM8laEoRLn)f=X(8ay#=8@ue1X22f7xXT7BY zDe4HA)wD1p5ODv7A)`mC!+m01F$mA}CN#f?T3@~*{ii;?c_ZHP$b27aCHsoHGqJH8~uUr|jBrNy(;7y=^|^Nf^SqVMG$cEtCTU!ruobG3WUiDtJhT%bnKD^zviC47{f zNHt1jQp% z)V!+;Y#NLFUP~we+7a7?D#z8av;g-yUd4|OUbWw9`FJi!(Go1U%w%iK3Dg7dlI}u* z{24^YsrM608%DmxDM$t+l1dR2J+dU^D2;!h5&H*^*9W*7$c^haUHD6l~a1;rzf z$G`(GBD$|q!P1m$KAO#dn%Djf(TIGl+fjQ0kda+hKB4(!j=1Ai<`fiNTwHV%btZL6EL2__fWI#( zi|$(rUX>dv8u{AyYCC66>g{Bjo1qr~vmQJJNhTfXDT zh~c&lX=*{VlR5`?w#Pr@a7yaI3)|z3^6(f}mTy@+tIo~m(43XBbgtI=hJ624cOwJ+RropPDPT0NO+Q*)AZP4Qnss6 zV&=miCXy$5)d}MM0AgB?8D#}bm>gwQQMsFhH+n7eB$P(IlGXKO&V=R{O(H5Cvq{U^ zPrItel|(uah%1#O@|0YJmW1QwcB-sFVPQ4P4g+7iQ+0MN{-*JsKYQZ{&l8DS!g|YN zqZ^#(&U8a>V`5@7v?4gNaB33fing>ih=918dNgOv?&j1gvA-=_kbt?`?s9$Yjn_+ z>{6YuC9Yu?vyM!#BwOnF^4Q16hcy3ie;?({AQ7YnWv!Q&m$^nU3voo31<3kh1ZROS zi`r0rOUtv(lqMeRjVJHU zJ+G3Li8C!&T5qd_WL3y3fYvvi%il>@rkR#XsK0s%bn3uNMVOdovsfzK1V!|HJUl$4 z#bYf!u_MCDRy*c63dwHov=i-OX@b!cI#v`}BBP4dVl~0a>S{^mk2oGSjK|M;*Hui{ z(7tK6PL21$(r}-pRim2|3}Dq4{>0!@nQ#|`g|)rEBc_pe41#L%;s^kk2Sz#KYX{Zs z-WKp*R`bXL9}T!Y(PgpDNDHueKcL;J|MGa)Q>0xgN|u-n87D?>q5Z8l(ZnHUuCS=6 zC$_t#g^`_|ot2f<38U>~JQ{nY){o2t&UfCjf0^(PnIOkxLW7Q5134vj|0hY#xaO{J3kIJPx z7!%bs2^rHRtH#f=@gLQ9jP>;NuHX6z)A@_I;xHJXq@Wm9LjQt9L3J9Mby)U~;Gh@2 zVR{!kwfGKa4y5}ov4(H45Jl=KD=ULU1I?IHjlw5i)R(gJvl&zC3)tS-Nx#B^nfP`; zYY!VgvEzrA-r)zNUF@3tkG3|<*6h*7rjfKX_`@33$~{|6d-+G7)mCJb>=@aoTCge5tA+EW%#r{C0VtO}mIZ zL?RWzp7;)SYC0IA1D_c6TGe$Z)i2Rl$Ckffig$0~)$GbLXsrDt|(os$lvK7LwNaT z`s}OK5|hA|2COY4I#5D}R_ov5tqe@A}eTZ_~4J@M+%OzM#_Vr)v-ySE6Zxw%2Zufgx|_aF@+!i>;GK!4EeV=?aySYm%2k! zV*W9v@xC;AK?sAJ+F}kC23x$Wc_Jr=KnGJr8pZPSWFgTg$h-%2w>~cTyiLEmwmd+_ zq>~Fq$XkQZ?(-AWmkZs)h5gW4NbZNLRmD;tCus5ENV{|P&e?K z(1Mc&p_-{zyD~SSRETlrNnM=Lrr13i6rIg`XrgjCTQwtsOvrm5>;z2A&9iT9A38~^ zs1TaO+q?1AB(X!LyZ0XRLgO}Bu5U*%J<%^pg-m|gpSFgU1$$fG(><0bb=&K?`gGKp z#O+_db~g_BwO&aOKqY)@Z2Sd=Pq1x3t7uT`DPglXqb46YZ1|bE-XYg9Tcwx<45%tX zAzPB~(LQfufsWvueXc#rH{M5PYEj$|%4d4XKYPDkE86|m+44uv;3Mq(b@?N4Q;MYL z?)eq+Cp85cIT~Te>bS&2fG8_KDg)SQnt#}%-%snifXIrOh=OJ}2g zV*$Q${Zn*FlD?m_UndHt#lPvkK6{C{TJSykxkUq)if$~t_?&~uBEFE!0XAt68*6Ld z_7!vmP$~9sXwf2vpj1dRO07#K*EScbrrF%Z=wt-{ylM_h7IX)5tJ7dPvM{Bhod`sY zV^o~?@lH@;3RjNh+8XiYC{}eH2jLC9*tSF5+~Fs{Ispp;g&yni($!aI7ZaLY#e~r3 zOx(gxz(v4pN#WBhwl+8XT!KbVCu41GV8I12OkQ8*9qFSLpt9TFtNZ~iClEzA!NRIP zhiSD8Y{R{Sk7r!YYTHFec@YFZUT9Z;SuEXVELmuQ=nh6as#~|rvbqX^&rbi2X1r=X zXT^JWu*;}8ngSq2;H5!z4fgXk%V5Udk($v-9TFNk#qK+0%#`E#@L>V*mU-APC^SJ2 zm#<&bL>-L7%EnEY)0M&ctp=F5c8~w4k(73nXqD{`G*DvC^J=im7Goovq2=*{WWX@XlGcc2WL9ljQWRT=hMbaP z`NGl?up9Bw-oogsuw1!ay zXbKsP^ude*9MR^&LUoF*{v!WTqQL^HDj-XN|3w6cGG8I&V?qu>s#wQ`2i?HzIIJ=B z>-Tox2NOKjo}cjeyT;f@Kj}YlNzqWD(pcwrK`9#+7&b!4$T1*Uv~ob!qKke~{ladk z*!=u{tTAr`U=M9vb0iyng4NDvpv3ea$&8p;D=bC31SM4MeFE0Mf;J~cM z_T@yC1j9B1l>g1opF0`V)hoPVpl@xx4b}5gfFoAa=uyMamU6NR)q2+)0-L?3h<-=8 zzss1!bCE=RQ7HOPp|A=&6{f~)Be@U7S>vGRM#Wvoq@@=24s91i+GeP>@fN99rnyxc z!^B}Konsq>5rD$8DJB2$pO*cJc+p*1id`M{*XI+s+ap~gw@jC8F)}1vgAf`1V)H8& zWN-lSBl9C89Ua~6+h4%{#eJ6ocwOCr54lWDtgMcE6onN)(K#u02DBM`Dn1mrT$ybG zeo7_axNsOoNgVUW|BcW!Pn|4eLPJCPm5Y3qy%C^Sf&n&+tAg$MO%ytDNm}A!WBuRw zfuOYmtZxorE2~r@b_6T~Qr-uni`i6)1J5p=f!h8i<^0D7&+Y z`6IrO9rqc}Dl`-}{@&ef4={31CbH_qWOYCQKMPoBE&;ei{PqKM zz6Q7=Hc0|*9cIT7mqY?UBojuGBC?8qABsXvF z_b3uEYM`ISGHE`Y;Ls5V7Av63(SJqqwhuKox3;#bT98GzzYij!W7MV3aDyEP_l z>EF`81mv$sI)#?-o;Mf1heWd~npJXYa zA4s)J<+XVe?!qi3SFM1MegjpuC>eoT*;^bbGt3Ak{_Ixnp_Dhbw8Uq=m5z?Rc3>Zq ztsy5z4z6OrE@8Nq+MucaX&=LHilHa~j1|lXqcThqp?9ySsOYLxe)IG5Gclx(SmsYS z?c8@)4mPKy0Qry=1L6gQ#q<>z(X&RHC78CyE>5iwQ&P%llQqUeHE2Foeen7K&+IWT z?P{5~*O3}pX%a$~1~N`Gs!Exto?tG&@5$53$qH@94*tZlttBog2@n=UcFH^)DPHUu zF11!oe=!N=Pq~LH_>OhICS}%BDv?#^ZUavuVCuyu=nWbe0!L6EvgKvVd8~);lMRnV zC*O?vI-TAi4r20841z4RnHew=8})GRFp8OX+i>91y?ZZhf#jjlTqqnajPz-@U-bWo zfvvIN0ne{$x5&E|!C?SmKXThL=A-1A``DySyWlt>qnQ5mypReHxBC)FpVC4aRg$T| zLD09R-3v1>gX&^>a2yg4tjRN|d2VdX>9o`fHrBYWpL^%q3hEYHA*k8p_zaR3#G~Ft z%kz;|2g&5Y5#aFqxY}ss%36y9UeUEo6CTHcP{49JiOI-*?XBvljO;W}H zfRPM4Ui;&^lAmB#c5YS%%%#)T*!X?!v1&K5WwE27_a(A2GB|j6X$VM0czT?X!Y=lT zVf7lW2*8JZyDWQ@3Ho{zNsk$r!h(YtA;4Z(SRD)_%tTsNem*Wvs;{qKJoiUye<9q{ z+MxHCeG}|9k1ffjB~r zoL z*MZBZdZQe6-ggwd5&wb2d|uC^M*Ry#M84}$wEWAz*w=v}pE4}|REZG2M~{x{Yps3{ z&L7JtnWhSKm~a#R%e&Zcdc@EFe-EtWN-$$;HkWwcJ1)u0zg>m?{jJXbFjlB6pzkPf zPwlo9JJ%@w*Yz@2M!HD+!ROZurVYP;)<6Gj%vIf#TqtCgSxF#q&Vcx@>%04pAn;s z*k20$m(xCc@$DRbyXT%kKdKZ(M_5SNG;h}aDug(TvtbQNl{`(pH z{`cEC5fPoed-jdYoDN}g|NHHjLk3(?&DX_w|CfqGvU!WmKjpQ?ec5~B@hSHIm_q&j zo_}bEp%e5Bb|3pu*Q&U2st|GJC? zMPu(CD_B_d2yb>*?b__M9M<6T@BUtY;_d&vMK8}7 z6BZ(QJ~@B7^1m;G#On>(wBrBo!B)EVYck}kTK(-=^X~^g|Kq)SP({{LrDqiXOTE&d z-MEl*6@C42#)IAoYVrRLfq*Z2OiCv$EFdSUF2c~US)CGNcKttt^}oOQZM;f3rZEw8R_Lj`*o3%f7ph@@Sn(7cDvy{|I`yu;aky_1lX^!M|F zqFHf$5Nv`VHF9^|H(;q3b1%t!=A0?%xbPJE0xN6lU7<}tHlebct0g{JEO*~UuXTBz zoz{$d)d84C!5#^Y4QpdHBj9Ka+9v-+TZ)sQX?92?mH|*AvyNVSiS75JFjkzLByewy zB9q^qFAEOuq$nCw+ z`4=~4L@nPSff`D7MkB%u;CUV$9+EQY6#H}1M#jg>7re1&Z&3ij93m=ZK|&k3=?m6z z#~UqCtA|#vwNkYt{-5Uv!ob|5GO}O1U!Dk_T_p~3_ z8d;CRUE7)W*;|Pr7BL%4{_|Iq62tQP`q_a)yvD)qGBvb0S-Z^Yl_<5_d3R>ZQ3`xj zk2+#`<;cV*JD?Z6`Tv7{D31>?S0~3P@t?+POVIh(|Bd09m=y@%{e^D%v5vm>({TXt(LIb zL2b~Ze@pByNkZFpi<*Ibld{IQJHy<|Ivr7`3{)XOm7q74zh2nz1^G48?Ev~8P5h;$KMOcHqS%N z5Vx#n7b6pf0TXF6iWy*kN1I^ewl(+cOl2YN^arA%dU{nMVD8H+-#1joi+;4!cA{y$ zAtt82ORsWrEa74I#FZcek2ibhk+GD1v)#*@f|jrFuH*Le7`_Q(|CUg9l3Nq_S!R>0fnT+x~`IoMgtv;-w@FJphh`4s(qMmiyX*~Aj)#B-`lS0kXfIMif6Q2sx;a$diE^O(-3x3gtI=> ze@aT7E6_Q$$3$w->0sQs@^urvy=$M`3X}v|_UpSs;xMy+=`07sk}PCgrPsGTSR=(- zqs5-b8(ke8iWF*>QkT9N>WeuEF|JCRFw!BPKC?+|{{a>yh?LFIO(S(oU&F@|Uzm?&%4nDP;U2>o%<{^qx&?vAmY)W=@%&UZhY zs~4>wB+t)#j#fDM^F#FAgPrFXAty)E$(0oWnA2CRz_wKMyhGNKb!Q4tmzEMgwGLWm^N=eRTHTWJwZPM2mOr~mmm(4RU5G*aZMySBh4`P zu&i!C4^hPfGN zzvd!FH@yvPi*Z1bG@%C^@hTNxs4S2exU3dF!v=PGderjfjq3@&tSW4M;D_*0 zhaQEABX;lR`vC+1T3SE$bO7efkZJCyQ;I}Bw}{9>$qMiD17vDSsK)`C-Ezx$WWiX1 zMck~Ltod6`0h1OKkQwa8<&BMJ;Ji+kK%;BAH~BuFL0s>R1S{Xm*UqPmuCI~B*<=!q zKt@#ZNhj(pNJU>x*P2uk^xu=TnEG`6PKKmSqv|uTfomB(0ydkDOk_Nr6+uA+AT6H@ zaw+w<1Ri}?7Cz?T#iq3_xR)_0~;;S+13_@!MnzAQ908qV2?QM zba#O7um`#`uF_#3HMUTZ5ZrNgzq5WbOdsWpM6%_P_hhkYm48_+)CHUYUdQOBH|PQ7 z!pfXbhzfpd&|BHI{roYXUoHkyg05#=-hMv#?srxAMKdE*5UawDul{e%l+`!zdS>K9 z>-3>>zbOC}6SUkqc_rx<$>?7iEo08BKb=OWD;aO7_YuxAB&XuQgURI|0rn9kIeF2_ z`>6~lq2PXMt>bP4kCPV`7so3EE#zvK9$14)ilN2*kn??5#Gw;P?6F-9B1G1UF6UEB z7mErID^q`PF))13doc;B(K(=MMe$hnGqbYVEJHkde{NWaoY`ol`r&r-JsHbfpwtB5 z(|kavHYpb!=H4+gb=Uiq+=kjV8vX?Js=dk|u_)B71mZ{?7L^;15^f>OESvH}_9n*! zJydfVaYa3k=RurQ;B;Q-;)=T^@}$RIY$>Hb-idsFcvW3E(Gdm40n)q+f#LTSQ14r2 zNVOMfDxP2=gk~#l@p1~S!+HD=!Rx1bKL<@9YC&)!Y}b8XeGOe9rHv869c#Fp#07`V z(oZ*B{|Xohbjwmi#6Tuk*K?J4a|;VJ7tA6DmIuxn`&-7({*3B8(9Q#wH$M<77ZNRc z?R!vInpk7_=db>PQq&2N2l4O;UO|NM#bsnak~#{4_^eD>J)z}Ud_(=Y}`Ec>64ioT}!|I%uUXd{c_Nnt9mCELOv8gJ^N$Zf}S&< z$C|ZRR%?#-Mx)Wig`)WHmN}lw&tIiau&O)R)8)(mJ0buo)|WnUb0l25evibG{?1)2 zOo+@vs=NdPLLMYqzSMfT6pYBkzctOE?C*WJt-`8RqSMD;wyu=doG7t)0qae4z8(TN z@DQO{GIszU{#;w#Z*S5yFb-;OKwx2tJ3>;*|M~2XZ`nO^=91ttlUlX}h|15p^=}le z$pmFK<2JqJn_x=PsXqxHMESB90iI>ABY=mCHZ*0foB2>p10UKLGfI)6-|8&cT=M8?ADB#8C`28s_>&e~AJ_23E&!+wF7c^0JT(Gh~ zDAYAGyRupV6XScVtlmI1ZjzLQ(ptgtx_w#N_?6Xj3vm1RThhTn6ho!fl=SM`eQy3w zrEep#^PCg-bo`2$(%L7ZDvWj{pWby)!x)stksJ;$Qv#4tM-t4^ZWn9jjSH(X!u z8w}16?c3+9ga7wDin5hZS42NZvtqFudkD@x z<@PMDdSI!Xo}RAkekU~6S;aPFXZ+r$g*Z#Y!6hr5u9XHQDx=ybC9tJ5ClK&^t3xEs zubND(K`lYfxQxREZ;JJ>T7fkqNLnF4!%9nu^KA}q(p4l5@Zg~hQYBtpKkJNst=NZo z{~GP1fuzclEg~41B~|0-ll>1+a~d+p#p7%jq_5W8+b5|<^CyVb7Q^DFnu|4bhde&{`d*CYmVI$g zSVHAeHyAq>96qI35UYoB7V2b$5iQ_`L8r+;NfqU^K33n*;5g8ppqa1d4UFr%1}(l7 zY`a(rpP=3BZ|#Y^3~%N)S=fxrtw)@PO;$%rnDojY_ziJtIyh`Qa_{K^GHo@IhtWu> z3c$t~hb{G)|FVAqjL#}K&(|2ckz$JRj|!mmCAcT~iSM&~JuqUr$>mJfopc-wt|G44 zZaV|SO&l0I^8?(&dck>E_=#|=*t@mSjBxkvCn8T-{@4Z=8tLUCOGsdWhT(@l^cUc0 z{Q!nVdxa)tR6k*e2!rL~Z7`C`^SoPi@wO1_+eDb-e$5EUNLie4a**}%nB83-*um`% z9E);cW{j&R5w6+}j>)N4z9>{*L~6&R=^PU+$LDG)#&sdt0#u>+*OWdr zqg{Xt;PU0=pOxFt6${cPza_*~0BaV7Y-8ZcLeNM;d^{wQM^5ShEa@<^XASJ0_-8Qd zu6Vv1dq*r_p(zqoM@L7io~J^a@Nxr&ZLmOUea?ig4WQL6fx2nm*8!>IV6`|hOuEot z!o;*VSm5g`);!y)3GF|q%4=XSNL=!~7X7Ig?L#M=)9G$AQW@q{zNn-^auH?;L84U` zO0giEF5}}KUQUwtJ&>7TUth_31v}{STartON2%3|OHoW9z6ZM8I7AINeS?;o8B_z zC)C=4$A)OvGzuXM__XTnmZ_z4_b_s|Goj-M*L$z2iCJ5+To&0gPH6V|A3gd`t9UW# zd?du#S)fXfq4+{9Ps*URVLccJve(Za>mU^!Ac%SPsrB_b2;F_Nf60Beh?wU-=bIK9 zNE=^>ev)3_M0=mEYwba|fG5yt9p--^bczRi%~cU`no*3D){|U!B@MdT^0wraG;U_7 zE|6A5i%vii*!pOdW|ocq9vLF(P0u{g(S%%TTH!N+R~PHO=+U1V7=wh7UbU5>cWP7r z@e9z*(`D=v%^a^gJFQX^;VzM|Y56E9Si@jL!{L1OKb;JlY>jt@6Zw0doyyz)*hO6j zKbG||eL1{yYXLB6-Gf;O@re>$@8|GB$%K7U+2(OL-ybb{rZSMb#o3Y3>#hJh9J!uesd*KvLBFJ?Nt;Jz!2tubA}Xqma?U=M+xO zS#EQP1%oZ>hxe zS04O0W`ja;?HnyKKcD#C-lBa*C6`C7GNwHIxogzaD^2_cMcB%+*iIL_n!@5BEKb!W zmWlfvd`=t(2R!wARoSCa7G*c&%o*5TT%M_?Ac9!!vvn~a)r}|l2BTm#y@Z6*C>r8l z-^e{`OAc3YuAo{0((v$1S<3$V1i3%|{L`_&D}6`SR2P$1-R9O~`J@K>Q6drNK*05Y zsFK~Zmr~F}#PGPVR*{Jq;WpaLaEWym8<6a%=+|12XMIwT3&|9cYd`@pcW~RDG6^qf^yIO6-HRv&`e1ods|0p|81y{bR=#Y_i1wfY2OIFf15VTWK zRRz1k`-sc6E=gl(18#M%t)TUSb;M2iFcmc*Rme)J>w8<=#|B3e0HM5poq7SLH`uVs z?c)FMG361LtXC`v_xN*RX>mNTU5Po zEn2ZP3wjQ{LSvbP>`OI6YVa<@JLC#ETtM~rIo=4rFj{6i24m>}j;qUhk*%S?F9A9l zds%k27y=vg9L1XEQr3f?!-;e`Z1gf@O=f@GOH0igFAuNWS{frU|NI;io14<*6ZY<1 z2PhB__l?4O=wx8`oyBR0kDK>CTIJ!(1fxvO^nxcXOCOlEp;Tr!oCypjVO&5yp65;| zfW9j8JL9of1Bl|_=|v(9+t@{MPtVO3nX_)aRreKgop{;bBUmF4&8i*Sf3?s26S_mG z(01IQ&*(#uJ-Smpj~B5KoZXW(WSOOZrwRbgJfPmM45_Yjb6fYLkP$%C+2b^+uK@hk zXMcep>&hW1s}79GeqhAvMHhbofpU4k_KReJPFJzH<5sIfvOWrE(X&$w9+0awc8s;1 zgmsw}BqU8gVs_lq6+R4T-?-H1j@uIbTGB+hv2>;-Dg=q|961dDVs*_rL-fMzY(^#i zOT~mBD5SfSs0@&v9CukGPl+AZx+R8;^OvNv4aBp5X?H(q7e3RA>a!907pHxBW|vK- z!pW+BQ;$mx>mRAxE@f|7VJWM*Em&!8LT!lAE-Ll(+bXfhJ~C8GC$Q%)18AoLlvQDA zpCbvGYl>E(9QpP(;npo#l@*Z~+KeYHjE-<1GO1?%fOH^`hE+R_lmY^uuU({r7SD=3 zXB#I?3zgaQ1*=n=FxX|QRNyZ6pe}G@XjPtp=3f@|`3YE3fWbi`HkQIi&aS2=|F4NN z>FFO>baZrem-FcTXu+x*phHke?56!$BNM@x+FcgI=>@pdIW+ImVbId#n1l2DKG7&4 za5kq_DvFB5fDz>gHsUt}?Y~mlt_KEQ$??+`j7(K~s) z+Zhi)K}s6eCE~Vue6T~#!3+ZaMqD!BVO_5Q#mfSXq$XH~nI>Xir#=RMEs$l_(&j^u;t!`UhJ#9v3y@x&$)Cb5Ni3f5#xDoYSsYb`CpU~ES!D^a)m;E=rao=5KeO%+`?RIiKyo>+5 z8MLc%-T3tCSrGlA2q<{&b(%EKW#jN>cn#MMe_D2ao-E1HL@ZSLoYjum2vOZq8`TAu zi1&%?uANUSE(`&_2&abuK-b_v1{s%wLyfc($}c}^Y-LxxE(zl@A%p`>y*-k>7wpD9 zKT}jZ;o1fv8i={7jW;8{DK_@IAO<#ecQc-5!XBtcaSnjP*6oPCj~maP)93rO5sEC& zUned)R6G<76AX>*?W|?yYbjy@02ik`Mvd;O*BJ=1DRuyWuzV@r5Ucv~wIv5Mz9fZ6 zIQ#R{e(;LphX6F$26Ng$u=}Y?Qc=X+&>}I&cmh!|+aKC&qCpFpG@fSK0n0sIJ!QKc zGXe!xF_+_Ihzr{Ew7B<`Q(o$4p3)uA+*&T4c^>3K+wXo*I0AetAZs!A>Gbh&dTfiLQ@FSnir>?1ZfyZHDH_&LYPGz8nmzGA{I=p*ingE?#QueS$smk}iX!BS$&y zvck#4=}CF{Bjl)fDF%aa?cdbPP2m!+6Mt^x_@j864wRVNny|9 z&RTsBS@evkLEl@`C65Itu(q^x)X-Yt7nG5*pS_RmJTW?lM_y2gOoyjQnftTomZ0zu zT-oY5{cUlHfCZFTj(phqKI~-SV7MT9K>F=M7GKG7Cw}yGp*CVPtmQh^Qzz)ap#Q0H z-Mp*N2QQx^qj;=z`Bmd%#1vk)(j5+ULPTRcx3vzI)5zzoJzxbHl%43xih&0Q*c*L2 zsdItQ@f6@cZ)s1Xv@^X%A)Z>r?0^LSQ}aLBi+pR%^a_*-d6{&A59~NCT_CG@aP= z0p=XCV{bP9N|}A=J?kbBYAQ{oEb<75Qzm7t#H>w?-;{6WnmyF&x>8cv{p^t8IjM)h zEU&v)SC4EIt3=kx2aN8$uj5%Z{)K#*J8>lpas>A7OpNJ?k;KXVQg2j?g}^nETXu9l zYfxhwhIyX^ZC~-bE+qF~Jr_zOs;Eartd`EC-{;lu|LJqVc5pTH_4Ay+Kv_AN{`j1k z28gv0elzqTW`G=o&RmVE@Kn9g`SkbP{8;$LsU4fpIpyN^2+X{iyNteJFuBlSAjm)z zmxHaojsbH2w|7(y7}YrS5ldjNnwc%Ywhu!9Q;ZE+3@myePrIGl3m&{j@7ST{C5-SdDy&Sfilvu6<896M0D~CzeZiU=Px7@609Xn*2%ezFPZ9e&hg^kSyS;%+qRy$^QD_*#0y*<*2v$x+&M8W0IbXAb$X3jfP z*lggJDRtd61Og--)W`vaK%3U->CaY;_8xp8E&UycfeaXCz06{PKUw(h2zgJX%h)IK zz4(&s;j*r+rPa-w&0|b*)G@nHet39em5s|uPNb?oW@2_0c4b1=dvHocCo+J0&5!Z3 zJ5=Ps60`jHoal`$;zhya*DyVBoZki>7bP6)TU)7Ktup+~(Lv3<2-W!bgvH6?Y*kn? zpI`iSA+|MssK{x14r-)>Lx>Dlr5lY>5VW0|n$jt=NZ=ElKqm3B&}0H_E(@uUhD_kz zN&Lh7`ope=rC3(#ax*0#*o2YmTwj-~SVTL`$N8Wa+&P*Kz>iPK`A`vkz2nTMuKVAW zd%Nl|piSc+|0r6h*n!lAKp-w&zM6c)Z;Ce9O+Y|Er_>6ePA1nz)}N>Q3&DJ}O| zKY@TRF#bcK?Nw^YsR=|LM%e_XMOV7%pV%Hka!1|i7G4L%!b~}wdg782*J-!~R^4Bb zv#e51%+|KosqvM_9h|LuU-McY)va79>nKQq#I1hV(m`4m8>jo@$>*2t#W3(aE?kI? zDSB>Uni@>v?C5yBtI6kISM7Q5T4fv1x2z&&zM@i_QCYccrH5P(_I&mquU02icLY zI^PmN+rP@h-JkdZI=cY?aky)O7k6_!ZN$YJ(xm<@u3Y4#!K8XSY3t}P>h{1PwKn8n zx;@)UMoq0;tH(Rb(Bc9Ljf4^Tvk(_x#kRAu0#X!3nUp!;u`)j>;MObn4mVa^L^Y1K zT|BZP+oZaw2P)j{x#sOfRbxZL)MsH5+o01|>+4ZCLdtQ|F){{={fD`-kw2Yrb}4~6 zKy5(&pBCZ+xVQl1w+(jl{Tgm3Ye&k28*8Jwj2+?kvSKR8_1B^uZiAm@M_eKmUolAh z_f-oLllE(63FgW-r$J}i!>4$9Q+n|oT?Tb0o|1DX_D9EEG04V=mPB%nMM%gkTGj*9PV0L zGUdRN69fmtzN8#hgKFXfggvM)D^D~i9`8Gce~a#8oxT<*;CD9gac-d?%`R#BoYV?M zJS4kl2uEC41mr+TdU0(M+TtBpj=-2rQebm-LstlbuX!?u1?VqOJy~_R^Bqq*9YR2G z#tgOQs^IOUBzGAP`5Ts6=%oQh+silR2O#XX?@deEbFGkU$9CJ{@*wro#<1VKfC~~7 zdEluEC)&_b0fv-#8^@bk-qajsEsjTg80b{2tgL_$0*Yt=`;NYhKjF!TVw4Iiwd&Uj z9B-t4(e?)bjSvzNqSf+p%M$ID`mY4jy&!>r!1Gb*NUtNzP961%n|uyI9U%KBdhIHd z4@-8V(q({+BwLeG0O(f9+guZ0tkouA_wT)O6PNJe$(QeOKV*%nz(%;uEgLWrn7im!V;GS)RO7mHSXCGxuVP+@2L2>!PK3TQ@rB3dybrnCz8m490wOS zeH?6LxMVq=$du|G*n{{UGVEW-czDcO-AzkdKRE1u3=o)`lTjNpnFq!Gih`Dwwi8ub zF#vD5IyFmnUyMi}tqs=d$ND+%FkriJhFAFc+1%E_Sa2PN(|Yxv5NN-5;j#c@rBr=)}obN@Kzh1jbLVw?5 zJ1|_*hc!hfi_yaSK>8uuq$N=MJ$AQTTvU!UffAn98ud3_~#32B7O@6HWp$dQ3{8IT?h zf}r;*E-g(VSE0`CQ(A>;@{)-BMTEgqj+F0fzl6Qd_BYcaBZ=B%^U|ASY$sqiJWwCfQoeIyUM*0g7NXK8s%9f+A;f8ZA~GZ1-+-l?G3vD0a$#dkl>U#y=FJ+OS-zW)Do0G zYZ$H^&Y8nM=JKdu)XD>C(On8=9^k#bn}>9tFL#H*QyCD(hbkP%c7x4@v!%oDs_iW8 z=2-Np+iiuCbAW~nJ;K9s(sh&F_)0YSO8%|?K#^y(To-3csI&0@>DY*0u<94yU)@v@ zWO(J^?7Y^QQge5s^NN3HXedLgnh@r_xTOJepuIghT^(uO67Y@&(P-A68`JOEeWxx* z*nQ{4E}H93N=mWp-)ekEvyoC3JR1{O=v4gAe*k=9J6=&_c(5e{iFTKX)SNEV{dp=^ zq>+7S#Mkiw4T;oQ$f#*Obqu#b@)?RHyJZUeI|MesZ%GY?>gD+gxk~ZF5ARDU1G!&< zcQmTK8ma)5Tgdq==cbsZT2MVxJv0=DX%F~@rZY#!N~>cc^?k|#3WaND@0mJnuXxj$`$Pn)qx3qx``RvB#tGi;Qyuh(|I_q8Q zUHlQyweAAQW20m@{?yb%%p;z@jr%O^nC38Fs~{C3e$kKB(0s@<)zH=X<>lr10T2QL zi9lKA>C@XDQ*d6wX;A65{Q)T345lA}623hn)6acyj$lD40GTwx!on@)y83DQn)geHWT6PZA!_e_)g0lT zq<$`ltmn2FT+qqlj@BN(k3U=IS}H0zbf;1H!v|96QKqko4Rt_NiuswAt~Q%)t-P)2 z`?Elik=RAYeOSgQX}jQb1qU1V4+oRe*uy`7SA*GtSqbjzT4yWuhHww(Rb)chb=k&Z zNHU4(4*6u0Fbw7REBCJPs&Yn6cQb{E{sjz0@C}=Qbq%*Wk;9`D z3`$IsIWN?M!RE+eJ4;Bio9}%k2;=9I@{(VROh{+6;AkqAK z)s}R(Nsxa~fW3tI%xe`;(~-p<~FNryqMYk}i)>1QyPJLMEp zRAiII`UL4Ct2%bTBh;_;9D*?kA|OuCbnn&4(Wsz6CNf4P-{1sdn-;@nVPyFTtO{|p zhxkun_k*BwWC5-T2f2oI`b}SZyq5TK`BpuRXcUT=iYnoh6Vl6)E4+{QUzIW>G>3+T z?XF<=4{r>Fm?vRjH8wT9xIjZqFu6PrZu|Oc%k0M195Dgs(Vk#y<~XL2Z-B8HD!eSj z#CiYCU2l`^_8;9DbqJ&927RdokK_aF+kf&_KWgiCoXe%eEwvnPZyu5vVzoT)p^Qe# zT#~8+j`V5P0r0u&`5P1#l;| zJP%g+;*Zs@et66Mc}Df;d?ucpAAuUD<%IMjzP)UHk zn4OomLOW!R^Uo73EvU*>4DZ%(4_%^AaCR_H6=vJvXJt)%tK4Uy&Q_&AR_bJ_=NZ4m zN#qLt2#i^0uz5?}G4tCZv5~Q3Tg5K;rYchP>WNN49X?H_!s3`dNuH{^f{%)**dhw& znGdI#Mlp{8q@@5^Wp4*Ovv$_{Ea&q^eU3N3L4WO-<8AQB=au0w2&5|eNhz;o*4Z*? z=E6+87p7MKp@ibe>^^Q>)}%gu(4gGn9>-TrI;w}gG690$FW0c24o5_ zQo(5?i68uEq37yazNMX+nW>%=yqklXg_@JO@?47qN)BKjv<{DOHOJ(5*IZVJ<<3(> zloaT-6aagq5^Q-}Cc&vBmeY>VL{0c~M>XUF3sBlTcZW+LdABK)YFSMt%}c*UgzRKX z&g}n@b(LXNWnCD1NEJa5P*9}1J48UbJ4L#sr9%akM!GvLB`vKY4Ieg<4Q1tGgn~CwBMamq6l@7!EIiP6kmYE7bvx+ zfIGPq4U)xU6#L&K;O>WK{8R#sA<~i&U9HnQGzW2!jTlK)b_T{KKsa zFrI#U`&b2Jo~D2d1o+fL{DU&cLwOJBRPAx!V)HiC%ic^4mC>k}mu%@k-vf1uE>-+X zNtNA^#1ii^h5W&@FmXss5B94;`&qsXh}#8N-fmB>6ac^s9gjsk%e62!B0_oOGc?BF zh1%<^6NAZNGWR?P$EN$=VKwbvT^wNK@R^;o=*_-OEy!A00afY#mfP(ay5k?-1fZZR zELHaW$9=)C5X;gH$fJqUF4{xr_1Zjf1OOs1SOKxnB*7%NT{GXVU?WWy3NH%r(#ul~ z{AkvdJlh3vt7+4WT+-%mGLm74=krt3(q}#m1m(N_C#yX&b-FEsoRe z7+i0-XuWL^JE|UihPiRMTcF&>NLrT~;vl{HeVl*K6ICw@(xY`u*q=qUFJDs49yF}= z^7Fb%AgN7(rv_sH!*2wzT!kM$KCOEz5kYqk(CT0j zVox>)`fK&jRWR-UkPkNUkg?{!f1eV{%EH3HfVqKrPf%DCKy@ObA~%Uih>`h4L4swA zxd1`nW6P+3$7mpV126iJN@IF}DkYY9v@|s$D8X1XES%t(Dp9JCz!sIeKBexrXXa^& z5!-Z^^kISyg;vr?ql@ir7FT2Coy#Gw!4cIN+`&MK-BGzhG8Q^5v*#M9T#4ZgIjDt^j#xjg5Dv|kDGM?- zR!Dv@9>O18VirtmeM9O`!0CF319105 zkRuvvZf>rxA8c+O?Cn)tu6)PhAu9yE(M8QFS5U4#oyNQyjIFku@QNPNbjN;6u3>~oq?PC zqLw*J&GU|(uTf{db|``m*V~***a*`6qLY%6ve&2ZAa1BJnJvQJrQaS^WjCUV@)VE< z1mH<_@THq+2lhmfCXrVtH#?n3LdfN&VLS#ci{vN4H@VD*`wR41=C{?TlA8eX^nK;z zJNV9}6wiZUpw%KEVQ97N7@I<^VWO)lmdLl6SmV}mlUhXtK>Fm@w$`?tU-SmZcB;(Z8E9yThWC$U0^{j#s4YWSlnX^JC$6)~ zwV#EAWM~ZZ@j1e5sWj4<7TBelhCdH~r70HG+qb_Z^St&l^ga}`l@m)-B}5;&#WB1J zr)URlnhNkr2#GM3c$Dmgc2_;o`4v#%@wpwp)C~-%M0uU>20Q4^eu9Po1DT7Yiv7l# z1u3=AULhNB0ZxSRP0#+N%p!y=MrJItmB0TK+l$QTAMF<(Hx#%XZQa`OOI1=^^HJ?e zmG-mC(picw_RLiYpg|a1? z99|(_c5|Jt3fvq-o5_tt_Y!TE8*4qSSPzD)vT((@OFwkqWxC|S?9(j0%?>!~=1c5# zopV}p@6@4OHCBX9iLsSdB9;OGsT&Ubcaq(aApO?k0<_N_^q{N}RbS%SEInU+is|>v zBC62X0)f%iWX!2Ly*(!Fl7srrYWdVw1A!YB z86k;v$Q3t8C`Ch?q2Z<@mDtx8aKqImXTfn}-;Z;2^i%r_Io4>gkt?PRD2uBiLDuim zB>MY-(v%T_bAY*>{h7GVd#Kbb;H_`AW^(=O>qL_r$uU?Q7`It$+Q1L=Q<9eJ+UhEh zU$N55efXX*ci8r1%6Wf&qIfPGQ#EWNE#UK4pel5P4Th6-B)VKFi|I9+@bY8&mM*20 zgFDIO#?cHo;b1Yc__TL3dmB%hJAh1FheG~(X*ji|y2=S!-r{fAVs+LxVXT+cZ4P zM%>263Uqvf<+UY@t>jev6jZs1u6PH>e4?VFChOiSD6y*v;&Rx)qLTkOtnRjfz;ef? zmARjj@7Phz0do%M7M!Xe0s&|_E4Vj30t^&(*yy*jo(SXBK*E8Jj%xdiY-)Z!%5|Yw zuZ08F{5FikA*&7I#RRxmUq^>bmWpa~r!mxJF6hl_D1cEW*FwXKJhcCc>q`- z1MfP}PV($WzFdAnS@G>^+Xl!~LZ(E8P7KYgWa6#)5w!*KVhxk7tFd_T59sshH$RJt zT+e!i;weN(ah)^gnVpsXRYP8w%#(2O_oT28XT$E4sziF}W%)vHisi)B>({ABQoaXj zeuxQtsvDCmo#+Vy4_y`Pj?qMt1V=KefS!8ty%17BGQ4wXw$W@x_hV0>IO=f}1?*}| zIHgvajnSa)9{FY|<*Z6z9`=Iv@)=T5RzYmEJ zHJOj;#oGj~8D*9UJ}imp^FU|ZmMzdF8NBv;Fb?1S_%knVj%Qf*KYw@nFN9g+sRS&I z){8abf6JPm`LGeu-NWb5L-a72NajMqzlf~5+LaN`vS<{B#X&y*k&u7eXLy&@*8TB6 z&HbN8UDYD(xuO@!Czs{9E^n$_Cw==T@%o?dZ2Ww&>V+5ozyECP=Vo2L|C|7D2@|@b5c<7{2Yh6Zsg3jg*G(r}_%Q&w zk-a#zc!SSq{(U}4lU~-L=Q2Jf|C{V9b%V*vmII5K>8B0PnXft_&MqL^|2M~)Mv$nC zD{sIrBVi=RaPU7gUqV4_>C6`CIHlrPN<%-1zZH7V922<3Xl;DV|Dp0)J+E_51Rbjv z|7IN%XAU(Uk^bjv@IB-n=e;gkK_diQ{%sBYB3sC*U-^mI- ze!K#`89>bbBXofD@r2cbL5BXI`!(;ShY2U>@yLHaPP%T}fCW}=?z($(Rf>mNj<*!6 zu;mhMS`53n^f%$+N0)JhY- z{kyh4br(p;%FI*}$9|rfn{m(j@Adv9BRo%2b7wWsN|64UeANL&8NI}Dx_I12DD&^- zBv~IHt-jzowS$4K{UheoP17E^)bz{=al!1&yG5YrgD#*|JsIA$%%*qVVj6G6 zXWy){M`gOcvZ$VEQfjWsDz;WRPUNu}q`jTZKIbO<&CEPWD!!WkZ9)&(D~{*bzRz{e z+?Fi4mkDpfwo~XUb=WrIqqM|%AMk(P^!s&<`l+Ai`^UcZ;7GvhURBz|2&0H z`}--%^0?zTg! z)L{#NWLW%4_Ar~7!pzdxA}Pe~?MZ=XmMTC@3ZK@Y;O;J!j+u{E4uI4?6k}brry!o{ zMUo8t)cwFus>9fmZp6@HOpZLG8KD(W&BoNlEdBFFBw?)0a$BE3J8^p@Sv=%;g5h!C zec`22bxn)*nDgPsP8(1m0tfiOWoiZ7$y8e!hdD%i-uNB0T50K_QLvDMqZ$k0kEtoa zu2@ccS17Qco1m?o2&PD3ItmX*Jvu26{7RPiHP3$VpV2A+VS=})u`#1!F_)Pwy-yLn z1*i&3LV{Q0pHh{tz)ia1D2x{OZuiguSoV!ZNr)FsYj55l7rhh%Yb;2DuBll{Gn>al zd;b{EN+E_etzX6 z9>o;Y7N64<*_94zh{nCy1Hk7liR-+)e%6ZxoKf%YiKZc%FXz1$E+!SZdb-6m(#R{| zU9t@r%BD5Xd;t`@Pczx|YLDq7yLdyl_PEOm z*w}2bxVMBK>>Eh;RsTkAVQ|81_|4s`rv>wr;sz@1 zV>>JDzsq7IBxf^E`Mn2Q-}hS6e)j^(4fUgYj zRHWUTo4uGp98?o%zZT&`bEfbcV|1a|v~$|T>7pYQwycCG*fJp;U;qp)YEwHbfwb2e z7AVlHPx~&d`B!T0)9@Is_~S~O8*-Y$W;T5ZTS5Bop$>r{-^i%YVJOOv=6UI!pgjhb z8L$Xkx*KJnF>BfcqXT?~=g))<$X>d*^Vm6}nON^Y zq9I?n8xINZ5cyhu22js&m zb5B!7fl02)Tjb}0yw~fGwP06(A)v7Il~ciLezfW_Ow-Zg0}2aUpc=AU8Pq5gk{~r8 zRm8!)IX$sd^{nH*iHXV77bs4@KJ#+S^3+fB%y?ar29RKla+{`SqEfU{Iqj$+ma<=l z5_PT+5fK?_B4WP`e{diI!-)c^t>FFuwpXdCdUYt+D`PbT*w})#XA+dYT1U=zLpgHS z8Gg$7xG%m4S1k>tU_;?g6%7UZcI_v4WvcL?B*+tn^h%+wb_G%k3>BC6cR{C4l@gu# zdDZ5t_{gmL6h{o3zdVuy+#|3KW=OjeQ)Z>Fh+p{DB& zFvHuwq0tZN$Ho_+GYbt8m$liZ4^1B<7z8ll|lJd?lL2( zu8xmgV%Xt%z#nNk_V9`s?g722wqqKA$93s$}gH-4aLpK|zgNn!2^Qgh#VMIJ@MY!w}c?#bwInJg|v^}?yY z5Y*`WBo!N9bz43d-8gp0MNpHI&#nHbv5uNF1zSWb5ziz+4JRij@T73sasG{g4`yyro z|CnOiES>dXP?Dh4ERX1TYrSS^dApZb&tnECreNTT%W7__r$-#{_5eTK{DYP%RXZoU z0(j!;0}Sm}3C?fq4=DN2KV0UJ|Ng2~{@PEC%=#Gi!ZJ5Pdiph(j)Q{`XgO@pb|i!8 zR`9!E@+(UaR3LwWp~Ll?H>VvoNRB>~Y21gL6~?bBYD4{l%4!4s-=u>+3xbZjXyN+W z8qkwa(=piQBo5nomEP1^i4}FOu28xeu(FBBAzQKj(AS?X-YS+7lLDCp;*90Dvd);- zQdk}^^t63o(gS5WMNkP34CJdVT6*~KQ^ofIR=4us zCM@31oOeV74)m^{zK}>bFYmXX5=mT-qPzfSr&Qy5git_$2ha$(l1uQdX*Wp5&XRI* z4TF|nd;4k3%+stv`Rn-uVRF3@4qIhHRhX#I>og#yDKliH71S!`uT<6xD^OnZlqc$H z>{njF1s9BT*re5kPU+{ah1IgSS-4-R6Fnd^0TN#5WnXKYK08}#&B_m4F3?suyJS2x zS|=TBy^|0=(Ut2Dg?1rqSqHMn$;m-7$A^i7gM){s2Kxhw0J@u^y85uwo6t~&H{i-` z@g17hqxO}+HeHZzzE}IEJ(e?msI>^BG#wi{uUvp}0t6je1w=>z7d?HD=O~Oo#gKnv zLBRjd@6tuCuTN0otf|x#T?KCGY)QT1V{-XdQGV>g;gKQP@Wks<(*Few|GwFLiuKl& z>p}f1w=AASm(BiLiHeRMbt-f&oe-zr?Y~k}+UF1AXR7~-YW-7MEc>)-8(?=`Rb=9HKu{&j;0O}Zp`89NOB(+e2HI!BgA zLC19CKN42T##_?)vFZxfjGx{4PkZDQd11S_&0U1&KZLKJr(Hm%nSGPuaRTUoH!GYC zZ>Jxt1Yo^Dkwu|+oOHfHkL7yXr$6o;k}fm zs6KOx8m*M)n>G-*NuC8Ee%H_tlyCo5h&v9bsz5RwUz}ib^{%LJ>iDtz{>L)I@W}0D z_@{Tp)jP|}(!&})SQ*0y?HW;OMuTbZt56qq3Tf2i)M>&epYBwgZ2bO~m=JQ5V)BbU z?TDyk?ityiLVtgM_;D}7m=Al1K|20f_nLo=F~%;K>=3 zSFk*5H|b6gs8jpeOZN8{0@4vVv-*V>?u&v?@4)iX5yIHQi8^h6Y$v%hGp_~I4fQ-JWF zHzb~L^I-m8H;LMvL;)G&Y=i1+LyY&}m-tU&j|6efymv7n`lW&jca}uL&#btQSNVH< z3FWPyKanXv^OAmdmglXSKs2-3gqxi0`+VHnr9R)|JTA=~(edYvQ$^hMLZmr&&rAv9;~IN6AMf*pGLbu$!A}CHhQ^zBSu|AI#GeSGd7*>g`F>?6_}+iXBDddO^W*c zeA81X5OMCtJOR)krppkjr_-H zrBb+F#w?znkE1{H&7U<3ijfQ?&vN-Jvf>C$wkE8Rao&Sc!Af=GnqW=G*^U^TC|JWtZ zJumI@#}iLa$wa(RNbvY2KKl0`e7D)WFWn>%y5cKXd*)KVJ2Ta3HGDuQ_~@{c|8eHw z@xyYAvCPIo3JsU9|MB{4bRH_cnb%9+M?U)p$Bd>8m}h_Qqnp>X@_FMIXWn}E4H>`d zk0kUGqfU&a6)dwGPFLeUKa!11LK)LHULi`jCyg<-BU*6I-pL?+166{@-Jb@f&n|s; z0?)Er8f`nK-~M=i2zpLbs^ZnhKFfG>w4GfnaJ}&Y-Mf9C?masC9qk2yKhj z_y1uN>8t2LFMQwG%Zv%a6|ShYP5vW}2H6^A7>n>JxY)?FbqM_V?sJa$TfZ21L38#X zu5=hX5n^YTTzV?vZQ88Hq^g3K@xGgX;@MT&CF4gSEw`MxS05iG6<&rB{`yR8H^$j$ z``rsbddBalmtlrwjKQzq{TTC)>$YJM%4gU<= zh%51kG($%c#C{R`puwMSBGFp<^pII@+DZDZ;wuEk&DWiJH2*wEr1X@_48j@H-ypu8 zz3iC4k$tJGa_O@Xe{}+d@H(?WlK*t#AGb8hLL+0kwCDOC|1)3&r~6p<$)At9#v|Q0 zz3tx5Uv#&Crr8uo>u0_*vaqmd`!V_!PRrK<1Co4{I~+DR8vXCJ^;CgS_9Tr-9^H;i z^c0Mag!I>CWS$zpBJOP%G(9w4)x5hN0LeT~QYIkG4=65s1| zgsWp~G2`nDonNPd0Z=-tK5{tF2^t9JUoC&lfg*H{@MTwZqLaGQuU~q20JKA>_#q~_ zpP)|AWdpKW&>vsr9MVhmu-w;7F0#xFvT{=yH+|!*e{CxsYnz*=8ki>-R*-QW8v)2? zAIA9I88WpmwUtxy@^5IEdQPT~8&jJG~@6_fxwE802qFB8)vRjo+@2B{^nh+zpPhl4;=R`L$a5XO@?bLGBr@|N9upmsy9g7#CHPPl3A)`1ozy6}n$TD~Xi{=1I{|1$^5i+5h|4jB-QNzHQJ zLgFXsv7paD%*`-AHu;@GxI&k#Qw|o)Gs$)8R~>EV2q&c#;$1DxviK!t6i(p3f5!LS zhq&-XF}KGQkO(KgG4(WZnR!Y{8uoFL4|@uC=e*n{mI<& z!mkvTZex8N7(4IajJ^*~;`umRK*YJ{u1|5Xcr(W2FFS!>3xLkr-u~2;-1VZf#X0vt zKIX^qQDeuJE@^i#gnm5?lF`x8Mdgb~NW3U}qxZ)&v0x=64jMgUy8i3lMZf|Qgp=8| zTwS_^biBdT#=6C{6O$GHPL7%FpNvc#9?R+M_KVXndr`jF_}eCL1Eb8ZYajpdBk}YwhPxOSknVZvv(slx%X$BE zk5Q)J)9;VJ*yAAmbz5A=Yu^M-D7;Mj?+uafb;DNySQJF#oM=dg4SQ&}=1bkwH$uLo zMCoMy+DiDe52^qED+6tu3JN{q7v4}{{7Ul4;BLUf`554}LWgv1e3m&`2p2*BbGrP| z@)O&8@SOf=w0h?<693KQD;m`O7AL>n<#=tC(;H3Z?0wGtgso>jRuf#pan6WkM*d1g`yYGZ*CzG95D0|X)iR8$B!BGYGrA(& zIU7ljHkRe8>bV@gPUH^SJcO>?b7x4I8Dz(lb@t-F`QBWA$ z@c*4R5b}MR^+rWHRyh6ixbSd0AWH@NHOK3-ySSt1~I zq6;cI6&5wFs5hzPt4|dxpcw}dQqKr%p;H(ymV+1=kL`MhZ3{HxP$y}X5%L4j#HJX_ zfsqzqD`V+glh!3*RHdGy+J>>jd5H&xN(b}ZxtvCwx>I9?W<%Q`ePTYcZa}!v=u-|R z(jyf+($(#tDD?IgEig4Hr%o2Y;%jf?7J$Y~_!z}w*vKua4}rF(h`$YTST)CkjL>3U zPd+QgitkfRBtkveSv1%Y>Z zK&1?Xde%w+l&{iu$Y)8*D;$xgVCbd!{wxr8-97;Ktb^#WS-oozL1DeWCA$psQHI6@ zf7`A?*8U1^CZES4=nk*d9O{XMU&UtuO z8o<04R3t%SNiv3OZMCD8WofYgKyR7s%@q)wH4?u{K!4w)Bp&FhNo*c~AZpejKIe7f zQ(`u@Hs8|%TBbq)cQy8$G7-^36>tTOlYV%mB}Zi%Pmu<4z-Qw-2q_I!)q{F*x!uxo zjYilF8ubs*D}uq-m!2MGskllIP6^zG`A)ILSmu+&^B`J;flcx8MO|LS=B-zXKqOlQc0I;jK()(wUPRtr88cDwYkHSn z`FyWnvYq%8E$Cbdy;*=g>rWvRz&JVplNo_2t_3~X=WCx2c1jc+F?&HJmq;9E!#oxA zBjS0iNz5ysH`hEKUxLk~rBJ$>zs!9)Xmc6HV&H5cQ!SOqe+gibaLP6HTy7L}GQ0}2;BVSe0Pz4wb}s z?m)a7s2ob<)?TKJq}Op9B+%1zDr)o_1BjR+_=QT#GxA;OQ$^!Z9ov=(MEPP zg)ztj{niNBbgQ4O@%P3TP>dN*w+@|FZp)UyWzN2QI))Mc?r z;RG;88ZHv!cYDriF%ScMS$Z9zIzK$6Jw+I#P1ihjTfw0sJ!>fuqB14o;cxuvD8mUiAN!CvzVt12u=b=n@S zRM(YOG+p$(IPF&|T@HFXX@;agVj+bX(4lY1J*%p9-((6rhY$m7;o?>jcF}EocEud^ zWw)l_AmIdJdq%K2Ii`hWW7eC^8_Vma-8N_|gkvh9i591+X*B{yFpvd)8g(2p>hgKv z)2MfgHZHtUWv%IL^-P5O3hC{k{`?8R2-++~ne1=U*v-)Qt{(I;!e22Xl(ed!)&VhT ze-l~rXne{itv41)}|e8TU+7kBMfb^N$-jh+xf@ zdd2y02BA0vYcxwCN3jX5T8TOfMUy2ldg#*Fhw?Aa0rN=-8bIyDVq_T4cfNvV&NT3l z+rxRsykUMA!!8GGmRG1VoV&rSc@^z;dXpc+a$2|cx0Z%VNW}vQ?PAz~-ofR1_>z7D zIKo@8@$;`XZUqxdDVBHB7Ss)D9D~Wv6q8UZj;m~~h2v-V-Y%fb3{-8_wJ3$nZQP=1 zG;$2zglJ*8(3z?hSLqN=v-c?9G?3@2du14a|7VwvjX<_Zs0GHx5PBh`-JH;%Cj>}c z7^?>W&Ij8>@tDmYc+3*GQJD`GWghz*Y#HG?`ox#|SN68+Cj5>?;>G1HX6w+{e7C`(TMEVdW(S9RKJfN73Z#ig!cmsx zND;e-NG!48?hVW9%yO}D!1Ag3^x_J|LzQxy0kE9uakmF0XE{=l;FP5y`@oT|c%Cv~ zMl~(RJw+A;Xm_P$Z5n9%xmpvJn~w~F4rSBvGV+aviWD)}&Z}Wk5AbXKq^f`WC4g9@Fm@6()gvJl7Aw)5MO_L0D99U1qgniRd!s=lK`&v71 zxQ%UVMlxzu zRWagzTb7&z6x0$2bi^;Bc_n6L6l6B+Ok=CoIc34O& zdWmetTfyzN%)i9(&_0nJw&6Y0*-pq|VT>S*{A}td#^u?G#}}h@EIgx(<*|TAlh~?N zLd9cXH&EnY&F7IZu|S@9>htX~num2n-PnH6(?gk-ZuQCYmAUx}#2GzT#(b9=S>1aq z7I*4#O~;N6c30Du)boN%DWa6*kr!by{gi7KQxgM+?)|eLpM?k!18PTgVquzPR&^)) zQW4*WqzX(WF<*n8T_YQ%2kaPYH;6^0Q-ps2T|!tL!3GdlR*?7zjiyvjS#7=D1)0!7 zcdipmxd1~YN)kn-Qa~7<;8oz7&{{!HE!Bbu&3aH;SoStmbm+cy8XC=ZX9Kw1;dx*0 z&fj^v>-9}?^yc>RK#p?g%NC*4gQD9o`Y5b4C9bQqSt}6#kRpXQc^(vG-K5lnyTagm7=_?icBsy9R z08AGm!C-+Hgp(CL1HfZu)ot3kF{|gEqQ6Ga&$@i|B#_9-ZV%Nt?$Zkio%h%@>V_a< zBKqu-L3lRN78J7B>Xo{dwU^O}<6!Gpm~6TMHfRje1QXThmA`udG3{it9Tk!aG@493 zmqC2r5;l&ss;MY;?%+V8N0-AP^j>kL1nJ+UuJk-{wA)A#PQIYew2)ZdXw`#j%xMtDD6ePIR~c=DS?V;jMRE@jyKqE@2DR2wY@mvN z-%|5}3u!(NJ2Q!gWm9m?1IgeARX!HxGjnqTiH{n9>Gt8nhitXddMj|0F9ZJ1at|oi zI}H--b+TdcJ&=fMJ!E)qBeuT-- zM>WUtU=nxUxd%~jLa%Uc)b8{$v{kXIrX%P99ZiKN!OWb?!jm^ z#GPRX6a#OACp*e-ABY5BENa8KnmxhnSMUmEgo6<*H7C0{pRwqlMvMvpY0qYN^`1yI z@rk163gpH>qo{HnDTZW|F-;0J{a_;C6=2z|ne~#kCXbry>WE*b&RRrQH|53#E6LT& z0?I~4+_oqjNM`qMz?PzKTCgsvbp9_dZ0`85=L~}Dlk4}!cQ6(9(il2G$>{c-hb`OR zmzK;bDJB|rx|lcHqDy()SkO}-v^lz%`CYi>tdtK3{IKP`sXGb!e)GW88K|_BOaFSu ztfUTVl18H@Ok&esE<>Jx1O;SL3C3M6!|r7qTP4Kx&|UO5%bX=AtYXvR*3+$FBS+wBh>T6q zeQ=e4W?qA6(00w!j9k0_{lmjq&FZI9AJ1LT+uGlr)5vjDNS49;23*e?Ira1(HjjC=4BwPF_x1ATmyh&k`K`eIs!D&a+=VlHJZTHpk#+t)v zEy{W!i~}@`)ZE6B7i*vWfQOiFYXyvg|u^hlk$%SG}IsHB0 zHyqa11wnehP_ISbKEGa6uRYGC2Z1fRdWYMpNISWnCGTPxry9$NN&=szwPAYHTZA{p zof6B5%eTU9>{p`BcR+#Rf16WsjYXr}YKlV8O|rpP(v(Zy(LaY+_*#v2tyeSe+~+zU zc-jT#Wp+ylnKw?bltB11ZTdwy?U<+P&<=&LX=+w_0K=}1yzK|Ye- zaw4+Q=#jJ-dT85kQf1ex7BiRa(5T02pTPfW9X8u2PJ53ehm+o{^esWC6klVJTfusI z+Q4A83M+EufkzeBh5LC0X%f+6z!?WYv4S_Mo$5`fP%{i76ox<;yEkiRVWmc@333O* zmX5>RN-5HhuG2;xl@9l~J1R4-Bn1cH+K!HcEl$PBU~<1!?c*%P$dcNMon^h|Ndq+f zH;hw73Rx`YY+b>?X3eO}P3e4Zicy!&;{XD#BHo9G7kMs3My@p0`AplpCKsBV0CPh7 z=&mM0o*Y@getD4E!;mbC^LROS2+ncJBL`F)Q#*cK>nmc|xYbIlo{@m*47gcv!7N&; z$3Xgc^-KP_>%ZCnlG>ZI^!4Van%U%I_k?WZL=z()qi@|7lggV!~ zb-n)gKZL&bm073POW>+$;gXui!14qVR3D^y!0-jgR@yh#rRif90-nln)7tVW#9dn0 zNcO)jaY{rphjZlt3AxSXK8oN9Q-MjJd2lmeoj4^DrV?*LKI?yrH;!GeTb%w)Drz&7 zOTgF=A`$Y#o!b!=D$XE3EHsC}lzGt>lC5CAeDf+tP#=V_-VLccP|b$29po0+!BNd_ zVLJy9T970;4iu!qqK;uUDJi;&$5CVzDr(oau^yUL(|e+@N9yqWd3UzT0l;Ly@HdXm zHQV;bcc_t0(OX1L{-9@fxzc^bhhCnu&N?@@@3B8F2rVErC5g{4%l$>&z77}(r>*^^ z?Iq57Q)~V9e3b}#&t$>r*2v>IJ|?BF_>doLap%==t&F+t0@p~hAfm@E(*^1e zx9mv|11rkFvIw@$rppARlK3tAAWqKgxM>JqwpMfgQ-R(_@9~Ap&Jf`r`!7Pi(AhV* za|w@GwdfM+3`iQefNT#0d?RS>f*!%*RS}cH;luj;>DPUBB=M+68pfmQW(4Q$?RNk? z*pg}4yGyo4`_Yb;w(eY1>9pG&yA>9NqIB_~@xIH|7FhM}0|SM6dD8inZP%%R;w2GA zHL$gi3n_rllVX=sw;;+%=Jz5=RSGDUxqK|dac5ekb z*{|5oev^?E62amCK6Qzi$;rk8;lL+z1*v93MW9k-EQfqAnss5YSd4E-9mHCwgQ5WYC{`yj+XLo>HN(_+6Awcs;D z`}rmMJ90UpiU}87-I^MS_IEeux+;VTqv*6h11gi;|4r88MvZd2v1&85iTdel&@@W| z*F~nsy3^MQu~jI`X2JWT&L?_5)fbDr6Au1>1KqG`ZK6I$sWkU`zKPII5n}pX<{S}9 zlp*xCPbl3#Grthv3|6|`MZn`Ky*bzg-xC29JV<6A1k6~}Y%yV00BlH?t_okg z4>U-(+M?4uB!T~>^O8+y5u0?IS95qVsn7`j+t?<_>W~HZqMgz~+x7J?A~!TNG{oji zX;j}o=>QiXSf#QcVM-X5#QPmY&e5N;^o$lcG>Qyug@=PCodl_P#0ST%C>FEU6;id* zV<@Dd?v@zy)QKOh#P)6?;m~dT283#hzd$bN4!hNdN?p)oJA&Z_s1SzlPu(KA87i>7 zGnU>O&+0b3iwxRa!{CfOE0bI>^WNG}jLhX2%;9lHibg9eII7&nx(V?j=-UB&>=#;@ zpfpLq?zs8g0P{A{M<_ z>co11)|hpzWZsr<2F15RGSOLQN46!1{p zwl_0V^C7N5p%x@Wyz99UGB}a`?e^)c+U;=(T21cdljL7ke5$}ZaO z_(SxE+@W-C$7K?--ax{ue~aBRodo4_%N+Pa;eWH`=H|Xdt8F{>4(z z=VqZghs!?No7=cd87t$#nqNsoVhmw(26;R68rNEItO6P)TY_5+F#gC+=#aU5yQPJb z$dL^pG^ONAt?)3!-g|Vp$q;03Cr;i%WTR9>n6h(Pjzepx`HC~=IUc!swgf0A3(cKD zTL~svNkZs!+Mz`sgn#g3zNT=DIfSS^=DL9Wt@YCS45!s*ggBFNH(el;e2Q@7)78L- zqSBsd0>qxws@+mJMD}!QCHVE5pv3?*J}rd&?TS8^^moWjAc%ZqdUAP_TC0Ha>eZ`l z46jo(>kW!a8)xek;=9!#*Cz=mxv0-_)XdZ6gyc`@k)dGlUeE_iqx$JyL23&qrDKsw z4hJO*DUa7@$Ruwrk0_llgzgaeNy(7?a<)b(*l5hcE?H6~?iPYib)_iZaw3hraHj6f z9j9-EoZjjw6464MBOvN0{EovmEZ!Bx$_NrOCSx*}iuK+LyzCoW3ragu%WF3td{a`c zX@NmDgje0hw}ckkq6nUHuqCX&_lgpi^TsNfvbH_5!PLR8Qf3i)o<=a45=|aX3DF z^^}8YJcS-CnN*3!-+biwDGS$ z7v#Btfd-i2E_76xd@JTu1ex4ZkSd|U#vEJ6v6SI})X{to<;3Uo_PFM+Wn@>6h_V6vHA1&&FJO*zEUFwINCeC8odg%@9DcE! z`5Gq%Zh3h%Q5+9*RC5prQuN?H+zt60)w+oHMb6QnP21cCvIcWdUVs6XAK>Ug{c$eg z;RS?3p&X0jMsJ(QyR^mr>PKlHe$fqO2h<9xq)2b`QR`-ITlD2F9XgLA!ZR>@Oh-% zE?ivZJeSCt84YuAA{=0>+=bH?A&)_;z;3tr95Uu98mUN*rsargNY)nnGrLmW+yG2! zsdg=goTXX9cte22Nao^XlN=;f5VjMLE`RSnl!$05dCx@e`nwk(pZ#G4&mX{a`A=O( z-GG^)C*IgQwWL?>IK;9Pf^@j87BJl=(J^7$hX*d$91iOtPZ9l+ymrI=n>5qc?WRHt zta{d8cw>Gn^v1bPS>12x74?XqSpd&^bUxr&e-YX5F`p0g5x`Bh5Q; zhNJZ_GY3a4V!cgk>nWKm;<%tj4HKKBmNDm7g+Y}0@E#QPbA4+r_#iNPP!T5z#TRQr z)HlE^BAsKB(X>xiE_UTn8v{#@ymzNO~Kh-7B!vzWQW#${h{L&5op3Fu0U#bv6wk z$Jjc;xK`;uW&3k7=B#Ba%6tw^-!s(`^-2sSZ-hprHxpOMZRg$Y}>g6gTLf zej&Vt4Sqg4_a&mbd)XuCyJOQL?DZF7V~leh4N{QDNsB5nV3D;&P8g7V=|~n*$TFWt zmb2T>0}o)Qox8y8&V;S^qsN5@w;85`xF(i{Siwt0G?v8gMDJ@9x6^R{+FSAo-+q{R zL8Y;~tusfI;4)fstg1Ec@uOB~d7#1oAkt9V4VGF2Y_VCN5ExDRr%Dnv1&a4&s@Z2q zjp#xP8eBw|N3xW<^d)@5VE=B5Vdq>;Evs-VLE9yLQ2)+g;PvathyKvUelR5!$HRDD z#$~e^ox!a@w?t&M>R<eWkKJJ~ea zXw2T4XJ&I)e<`l4ivP6CvgSc*VM^Jf%U64SEirO5F9c7Lr=?KHxokYis16tD)!Rt} zS|n+^Ajoq<36M8dG?xN&l!L2_)UqFxGo%yYY>ZYMPh7*J<e>wmJ>pxSq7i8eiQTM)UND`y=N4>DJJ$3~FW$E0D?bwG1j#>^xjHC>LyT ztrbANfh#8@n-Ss9PiL!y$NqM2_k~0>s|YS^Mw2ue94!X{Cvo1WwAr?SqB9Eg^q=7~1hf+f&e1i57#zBNSE&hxEPg!Dp^MqbcsL zCg$sTZ?+;jeKx1*><+;kLI1@85Y{3w8LDy9s=F)F0CX+0^1e6K_pTM+u2Lw@PT`^y zaxlzQFM~OS>E^OY^{prpkBmysLnQ}TXVc+Yn_pD(dU(L!eeOG+Sk3wA3a%{IST@zii6P+H*SWt|kWE4!~vRCn!)XK6Xdzz4sXK2qyB;JXS8%;}?IK zRev9|1YxdviKyngdl!*0TcfzGdzux(e1b`(cx>l^{!tDBKZUMG4X}e0sD~)wd*f#KnYVoFd^&*tG)NyM4%RLjdE%g20gjg{Y|n05T5<(hxzm5kLlvGCSJelVCN)^^<9G%7Djv)O|;7PiNb zocl_-!@Wv-yK6c*QMM130&U7PV>#MXnKm{z%cmWw6H*eP1;ogAVhf4%Cy3Cpl>g zl%{q&cGis3gqD_#wKcGs-FE;zi3vhs;J(1A&K;;9>Syo zTyCfB!0=Fs()OEDTb3Ne48EAe2u#zct(vIP((xPmEz#|u>P#f$%ckF&0dNP+56?f% zCaTgn?v1}nPfs85>;|TZGR0h-#|!T$W-}Nk<^v()();tScLNCzE{TWJ&S+4(a<9U7qrmnSMoX+@r9S*xx&h$KoqsBfWZn0T{qz1lFs%yu0%~Cb^ones_t=zgPhygj%ilm@cru+Ii;dlI4qe zVa8`ruaHXy?gL$b6rKwElb-5F6<^+9#+WnKF*-JE;YE=H22Kn|PD_J5Ftg80qv5vSRiCwvXO;*~QO>sHJ3zi%+{Js|YP#{q_Hh+GesF${s{JK9Wdc3A)oc~>{obXa;8YbBeJzX? z=3w8kp&?EKe^VApLeQ^QsBx`AdfbGL&}nz;224hU&73|vC9+DoWGvLnjC#$wTfy`r zvH0xPjdEl8I_YxhQc9V!W~~wQFrU0?m|tKkf=h7&l3h+j0H?`4JigOUKKtI1(i~VD zZ(uzlT2aE}4Zwq0_zzE`&Osr$0tXm6OA_SCfPqXteR+BvEQR`cjn8ijrkW)qxteCe z4rv6CeQ&OE3B{#fdQPlWaD+y{Bi<44a&>!K@q8GetMgu=ATWa z-I#uM?qztrJ_w!P)cK|^@&TKhdbE5?N^q=ta&FZvN3TT*N4s<`c0`y)p>6%#v+;XS^4qguNMFD7(BXxDyIPGm86Tjv+E#09lvz#hJJgTSq~xe#V;1A8|s*t=!ZggeS5h9CkzqQjWw8e76B zl49~hK%*pC&cP)0(JK^o+;&D~9+AC3ERouJD9xU*+ESmXfBT1@4AYBto->zkHO8-ivyq(+^O zX@eWIVMBYn5tLEja^N3U2-z|tiR*FMB*aOoC4^L3>;ud3P|7d>3|Y+ur$WogXrx>r z9W1TV0X*R|t(2?&<|a3IRCb^Nh~^D0v+CyT`mGV1@*b~?8K8K*Jeu4W#Y}0YPgijA z*Y*2qsxb5*rQAxtyW1qjr?}f3ngw{3Ej653gFVDpVF9(v;ckbOa|7hOSaNw2u%z6c zsLRpN<$zn?#ob&+mwjK@lqo*hPk3dG*hxvr**G3~Eu{K{PwG$QgR_`9 zT)4(2y{O;UmEJijrF{0RUDUs>T*bW~fWQoS_~P;Ce54zH8m3eth zz>wlzB>11&>Ycd41P=yOQ4ii&oP+@jjza#!dyAfQMBk-Mp0)6=m@biypA@jhIs}gV z#|=uI9>won2>D7p0wY+!u4u=E;t-jYGc~hX`;YYYVqc>9m!73 zA>>=uLd)X^{Telv8j=%3bE;jE&G+Xr*SeJha%VDc`KcIG?X5?5e%P3i;GTs<=aD{{ zVs?aWd!*g%c9XQ$$Xiqq1iLZRQKiGBZf@T;DrqkjZFfss8xfUCTN^FywDzC7pJbA&`?8x(yjh@cY3eeh{!yp?wsgD z&8AxraNHq!w_p?%X>D1#=xkD~rRCkfcSyu^8+>~88np&LWXc|1y?XB-nsaCtSR0T} zwD03+SCB1O6~UEYa33>OU%D^xn=f&CN%)3fE3fL1^*K<_m^8z2=Xq?g>%2<6^8@Z$ zG0$CB8{)m#j|>e@^;aL4i-w}4`J^ffVXks*tn~PTE1#GTZGmy`^+;BE#D9H?s|C3`7J@vm6J~T#&AFB&{ z<|C%-L@Y2AknwMgFsOxSqyK|{Ie+9N_x_LrgVy?W*R%6Nc5dG3myvZubY}X~qM-d$ zswjZPkrp9v88Xq0WSv~(1^-x4vk)fZ1cgNtD;;`A(y_FL($W@+~KBg*;cMyLiQl)a`n?W~|mSu)WlMB5|esdQF6Y+X`jd zrTg3ISo{eSg0AfPAI}&J$AeufD%1fRy$m)vHOs!^L5A!YBu5NLQJ)6yDxx5ym^@^XOl>aTygJ} zdz$mID+^z~+;d{G%7wu*7W$OWMr>*?o*EpA3tIdtthBQPAEHRxl113MXmexWWM~GN zTL(B2C-!KYQFQClvBO)C5_ocD^0rrhLuy-AWej4S`zjMnhA@L6O{YXL7J4hW;}Qpi zKtb4xzaHH^`S;5AdOgSW^_&xUqdy z=gh2>u&^|nQv77qK@+CtU{tgVWlP`QN%hqgigt@>X=j`eWXygE(*_B;@b)XeVj^H36Uxb%l&tua+D|Ors<15fvwPvVVe)@7dL~NG+ zVCy8rlt|)!TtdogwP@uE^5;4NLTU2X&9g)j&9a?(+#+B(Ryo zjJg8^nzL_s246(C)IEBkUi;2F6g{}bZcjny>sydKKfC*sOOtm+tmteSb+C)nw)~v2n{H#ZM*Vdo|#`ImfsfY>$K@JE%yqio?Y3kU$oqNbE!N3`Sbw-ao>Cg);k&oE-x4^?sC6D~2Iu)osAx=WUeOG+5_NSkulCe&U08&&lW_fsRZ zd{^9bM9`y$9PT{M$YrOI=Ty^NWlK48?BNEHrR>ANnpaV_*CkWkq z=djM%bXFb|>zQ>eB{AICI#9L#=*{Dt zT=nUYDYwthmEJ!LW})Pa{Lvm{7swUlCBBn>-$@^L+p+>_A@E&sGiTbz)y?W;k?)2feok|bjG^QHy zHWO5LTg_c7cH9blJ^G02-=Z1Rvt>DxU&|5w`(d!X9gD;FjzZkL*$AWNzI64B2kY&} zIrp~jJMp+~Ji)%_ueT3&PV9wmf|uyH&FX!|#ea=U3-3jJ4*VEVZ9HJMmnDdv)97)6 z<>mJUFXItsZr>{=qhFTY#W{n0J4Gcez>D2rRrwB$kblgkI3dN8Q|tLq&$keWYm1{H zb2c)S4xy~td{FjW_EPIw>tl?(2hD;T1wc`WXP=C|a@nD$4m*lbR}`*381 zbFp(7f)SH}!lN}3#Xuu0!y!Yp-F|S5$nuOcM#m>@`5o5*f1iY=hRLrb#ttqs2i*Q{ zIH{52Ng4Z4$FdbuJ>Fdfds-WKJZ6f=zxc+=ORLOl73hg#`OEM|U0DVx{SBbhLrz?k z73>@LJ8+J5L~afV#xvi4y!z`d@Gw-r=9RN)p=H+n*1fmc?+;>85rODB{P zgQn8ZxtH1ua;FFkxtVq3b!|Fm4FrPJfHB_f%A7R7Dp-vlQl05x;qAgewoq1eOb>I3 zt9`ET6@X17YgBWhvmkKPC|c09;_c?${aegSxpv!Wa5LHlyp%Y~xLDPa7K!Nqj9yac z8TA%wxXk&T=d@%whDDY4)#(esX$Rey_?HKIbZfuS7+zC;Uad8nPenmJAp*S z&Mvc8%_;ve@esw5kG!eR=@g94k#6sO`zVd~Fy_4DfC`l;k?mSiJ*|6M{;)f$UH8@8 zi^L#i=h^Y*tc2$@YE<`p54LK~uQ$^Jxsx@po5^QdC_cge{@RjhIU<#}(ecHjpPT3@ z!V0-s6OoH;R0cCP!G{^#?|m=#;SvUf=<~b@eZ2PRh>h-Z-22L)O1>P9E=S`Z9p87w zy_Y@pol`QGZ?%ku|Ff>_=x)vm?}L_=^zI_Q`v{BYKbVqW!pVA#9k`v8VDHT;z|Ws5 zUa{A2rnu_F?wnfTRa)z-dpnkVz77xGo+X`-+J-qdQ>d>|#J3sVPMqq5#X_>QJ5$)% zQJddwO606)nX$feUP0mAjaNszS6h9CI3hXCwerlUM`{*OeS>26Z+g+hmT>1|@I)7v z-Q&nthWuBi6BA6Pu4mbg@u>&nobRiSWYccv#HiUb18oJ3K{FGbnKo5T&zD|3O$^QR z@ct|Knx@Y|9vz+iLaRZHka}6?83$ro$f2(Mi3_B)_2}>tC>c>hRzyP47do3g5S={T zS9!{EmU^`$Vz@Qq`0ZrrzS`gp|0c(dxiM>v7Z+|H9&8$wZp(yzN$*8=~*?O`Yd{%BjrygZi#{Pw6V7)Y1-Clgo6e z59~NAM1u|-zWPSwp|EtTTAtavg&(^+JEfy&B`I1m^&VLFSGC7)#Z3+Al)BUi`M%i0 zJ(*T+66GI&W1iWVR6jb6H);kfcoEtx#>wOkOuzv#)zGxo=A`)ZN-+jnrE)* zVAey;XcF{r@A}ak8yt8A(|xHLxsqA&m3ubcbau|rEOHxtX+@O_R?Pu}Xm~6R95W(< z>ej?Y11s-6#$xwP{1W`Y|jDbGb-=W^J^ z5XWcrO+SPcvw4-)bcp7sBY7`hbIx`Z&VA+~J&hUy!q;6N2F%Csq@hsAz*H-eo9iiG z&|8F=YuDb*)la!n5Jon3O}uTsr>+)N#KxEc+Bl!@{6M#)mRmLLfW5oiWl|#d`1k7R#2Jm`gdZ8wgHbn1S*oO)c}% zp7Z|UV@6%0ddo!6*J>yYXOaztN|;@8mdNQVL@yW zN=g}RUkyELH8e%`LbWRgwZm^#G2EPZDBAt>Vm8$t@pYz-TS882UYC~gV2!!^?%`r_ zM_Bd6viiiD$ibQ@woC_blN$LJd-Zp0r+6jwx}nHx(Px14=IQ@rw)1;J5u!A|a&Ig9 zKSwUTJtBO6pfc(tF~L(_cl_TLjjr>ZPLaK9{n19jADMdZRe>ZU?mgf>)8&Ad!Vl&k zIi1rTHau|VDe1vH{SI3Gu(AucEjR1j>EY>X0) zS!y4NLqh(n(@YqiiM=e!pZzb)^mzrMA$sZ3F9}i*{KWBdkGsugv`m~5!4#C(j}2pn z1Aun@`SdOTkt_;XFG>CJ(!tjdc3zP~GI_GZ{K?LViqNq*hkpbWS(#yDJ9g8@t8k+U7WQ( z#RvpP1n$1 z*c_6is6*41MZL^;^YbI%JTqKeB#J?F|=I^Wx-v)u>dZJAtHp_U!$$)6Xiq_ z`?0&Bp<<5{=I(?0afg?=`_ic>;}pSpDQ;s&*S3-t+%`Wtj{dlcZHZKt1pgbSpK30m z?1RW>|Hy+6m_c5?bixCD6g11ZkX2*F zEr}j++}Y%a%lcTMJ&lI)9#|aqBQ1K}#piAZ`S=~;5}TT}HmKIGqE%}i03hB!_QwCV z+s5rQM>S;uH0(d6AzxtK45jDHNJqYGS9=I`=@{LWdV22%+v)ZRxvfC@3j3PezVj{% zFJMt*0Y9m`=vLWy-u*|QC!$h%pFQ|DyywO`VuEVp6+SRvNwSG&nL2VUd0dw!P@RI1 z`{rLR?jyxz6BF|q1DC=hxN3@A8AYLAB+u7?*bD{EBXmj|g6^|8?Kx{QBeA)%AwedE zvO52|iuevXE~b_=?TnRa{ZL`3{?Yx>f@uPhp}zEij@wKEJpDm#v*FK~*$j`?GG3bW zn^aP0X=$Ol4QC;+Y*qrGGjkM9jbmclq%y>#se~lL=BN6-@nofHFfsr(Y*^XpLu@P+Y3yH2>@XI63xwF`_|K4(LzAhQh54$QpGDWsJ6 zXCMkS%dV!$(U=@8PLPSTuMUwR5LFzfW{gu>Vrw80U19sg?UebjJkM-RNp^ZLpKd7! zv^&nCAT`W{8+KiuJ9y@4OlK~1rs{RQ@LgmNT3ScUCdB| z(7tdmef`v=;y|psrtZto)4FG)Lt*iNBv540+4zz6p^sOc7>h02M;me@zbOebTQZ>=$#u-nbmRk3 zX$4~_#E_urm40-P()!fSS?hyC8K@$p)J6-OtX^Ck3~<|L;PcPO=iVckPZ+LZzX?vx zxNv(NSlF!VHAf?pk4fFIvm;0gR4s+5YMAKkW{^0X!B*rBcvMk(HY33|+m|L>)_V`L z**p^-4UH6gx?|gsKaWwVHD=crhLS#>R6Q*hbfUg=b@?PA)dl<-}s=z&Uj@oro%&eW~}4*)i)ln;s)o}KxS+^)G!9}t!HI8*qQU{3ZE@c12{b&$?dTZ5-Ilt~U)=0QV+-hsEJr>>+A-F#x;WT^0f!jNlY8-Q#np0;&BbyO zcPV$aT=cx_;&f-r-1rCvo{K-+bGe>=d*%M%GOy6k(0_zACLY0KV{!MsFQ#7|a~?LV ziwH(eufM@t&wqe*hw|ul;{itW=rYPFZYj-7>jdc_Hr-ky|BsmD=#4D}Bi)1b>jIP> z9TG?cV2pDh_@(XFH;$l010{}`wwS4AXa@@{V?s>Z3%58bqr=4SxiD2qoE9|xrXT4o zODlx%y(&0jW``P2K4$z7;X}t$3d3NBgBhTaB{b;xjs9ovPP|Og>CV%9E~2IP-Y1&d z+=NUAjwNdqV8+oHV`OHLOXMi2yUQ7xoPa01=6vTj7sjUrn0KOk9Pc_${*0*Ob%`>X z45_&v&p;;XnB0GE7<1mAROO)#?0iJWSL{64lB({FACao9Hyl1)6X_s1X*{4bT_`!a zR3E*QUOFRd=Y-Hg*@x?QKSmyRu#Y*h)Xt^a-}7Z*t2B2z&>ZCy72!i92u*$H&bO2J zD?IZ6hrTfGDK_waQm8h&!*$_>@#9vlb2b}tWU1l>TqY&D?XfL4e`(cStuxpbh+(7a zEAy^WqW8?@?2b^b4ot*YjpnyryLZr?>9XxEUesS!F7-3h12v_dWAr+tCenL9kDaXB z+-L!NLiKoq_|mpcixQ=_C+E^ql<6kw&UyNg4-*L7OB54`p={bAt-UitWe!6PZR1a- zu0r{_1eK1U^V&+Q?m;ARP64M{GX!}+crX{Gp9$h}yt^w%u@!0osX+|&E6O)-T?0;5 zVFo+{R?z~HB*urK-@8jvic6qElYLVQIZ|`7&UAOzGPiedYL1Oz<3IdxC+rx1?~xkt z&GMtFF)gRj3+WHjiaAFAxW-Nv&cd^b>e)c5)MbO__g>m+v)8M(H|J);i>X7vntS#c ztVbT`45Sbkuksw`>WQ;EzAN7G`<3t|%XmP@0&Wxtua!1$X4vtB(>QkYZb(I~Hs9rM z4cH3-Epz>Cyc^bnR1E)yg8kY%pML}|QC6NS=I64kQCgdA;WGPt#zJfQv1P-F^DSMS z-2|}ydP$EOjyjXDXTCIPju<#4dpY(oKa?$2-=H^URQ`Sjk61|8+pGue)s5BV<&DB? zKc;489`}6^4pG8_)OFkJT>_d=5r^y_4EA(dz!Hjl942*Ag=;$wKj0U@_LnR;Rdbyqb{?T3_CbnAYMDdfC71gR$r!;v!; z4S}qE=p+6)D)NGviNk&zj&;3-7hk~!D9wE3UY;9)5yVV%!ri(hbqKShR-~>~2sksW zc^y2S-nTm>1v)~zmQnS!i91i$GH+(CsEfI9((Ena&V<{5TNQnicS4vn`>hSr`#&hD zWncF_Bv7cy9*Pn|BZojRP zp?+*$%37;8)hq#}86LyyD4X||NSFefnEH|=8Lm;AXW4rF^NWA*{h=>?er=d_o>;FA z|B799#QAGn{XgjV^4PTEKY_=G3Pq1ok_BMugcY_~1cHz9T9te3IMtEFB-PsYc7_F_ zp88ME?wYF*xOT`-Zoblz*6}IdQkRip<4(GdA*UY5=oQ(Uqtn(ucXA}pq<@Ro!;>nh z0el3O{)xR8{IXPN=|;#n9o4}6mj>ofHX9k<`#Y~EhS zR5ySU9r7VM7Ul1k?zxmN3qO#4uHR;D;FHaP=rr?>*Nr>!Nz6O_6H*A3v)B}OpHtNT zQ9Cx4m5_MxC=BL9B3_3JygfUzXNWPscc-GEd&$tW)g#D z6u;x0{vT!?={30{=^bmGOwR`1+?zg*{0xLY81snj=hhj8AaDiZRa1Knx?kfzZXA8xE=2lT z?##oJ4;5-nG{;Hkrb6bB9s+2L0M~GkcENH@$$e~W%uoA2oVFbKI56|PG2kq$qayY< z4xS2-12|f&miY~z-h)!PV0v)x`yA6&+0BWT-X|E!JBkc5-f~wt1PXi!FqFJ${N$8I zyyw|W`>sM}C7ENvlCfW1TXZ5o&9bMEF=_ijuE&!V z11td_;kH$6_=L=dZPe_a69?5Ui=kBO$Rdn5JIK^GQN%R8{*vZc-E6+^#4}H0`m(w= ztGdHw^-k{}rrt<;L^s`66DUv=^OkIYfwok^wSw6ipz4bMg9Pz;3kX@=8{Wd&v1e<% zsX=u`H%7ekdnEi!qNKAGPz$)X$xgfBGuqR3xhb`D_n#jySJ6?zU=X zQ-xCFly+es%7f*(@le&*s~dMBy$fjcj$79Iw9?jfahrEHz^NSm;jy6b;OQv%j}Co$0+z)8y=p*pf>ek` zezgs{*@IH|l9^qmS{NSJj&LZNp>AJO?P9XABlUF?CN8#;#}TnME=~<*D3mP8sb^O~ z>@;F^h2&N_xu@|=Noj9AFs%}!`Zx4Kt}H4!o>LAdk=JV$IJFdY&a?&G!g^}1X>^)Y zI#nOts*c{ReQ}DT-F?oY`(<0)pykwL)v?KHwgmM3#@fLLH#wS1)`GK*Lb;7*whux? z=78fI-7bBrJ)Vz|8Nh4y`4ehpODHi83cg92r!! zvh4}Lf?$p|ZJMQFa1Z9pk^g!L&}8m%!;2#qM;|{EHm9i$op!Z(oSy}uaCHT@al_j^ zm4R(q`H`vWp{K1K0CU!1ABhogUFsWZ9N{bCnb)j~ZZYg{Gi!+V=NH6HJ*80m8AUMi zPskz~e+w!UpUaEe+^$U5yteJmWOF3eFK=H*b>tEyh&qtcBdkNMWk&5eL)D=f$*LI^ zSnjlCK<*xVd*`R8&E6m5agQpm#Cduya5>2@rc>sxh|ti)o6e3AEWLYb&O@Guhd;Zt z3IK%OdoS%57ycqi1&+Y!D^~1I>TY~n-qN^KJ!>xhd1B#^Ni_?%ZaeOk0n^UC+i#F~Q)EApiss0hY;oRjaf``%J3v}KOtlT?Ha`R~i@ z3|>*kwmL#+hv*~L1kr0Pqvz~QT7hQD1~`q(rO|abz`e-&bPH4=WzoD=M=d&U?ntB~ zdH5d_JH!kB#skd2MNEG>_Qjq#BO%ABc)OImAG_bi2skH_qzuGsV46UCz!DjvAb1dB zCoKLD7DCl{1AeSJv59R*i&d zVez-#^cn7?(yE?|Dpz(XXiNXb0)`q4P&xTOO;pcLtm-itOxIRol1tNiuIL>CzWN48 z0IyKgN!0u|uRN9lZg2^JUf#=&LMBoWEvTNCi!_n_rNMVWE~W1s<$bUT!~IF6;?=YN5CmxuIhI=&Ij z{k~03ejyJYz`!r(OT1%hA0t@psWg=QtkAEnoxh?tkE=G<8oeHzxJI z#Dr?3w2*FR$>^t5WJ*#&W9$|01HumqU2W!*E_43WHK z~z$9~kSlx6^F8#hpc#y2t{c)q2W5P#06SfIxQCW||x&f8BHn@7~@wcG&&) z3itaP64NMqp?YPAc}6vegp{WUJ-B^n@JEJ!vl2oC6=42aU!ct8TM(;G5_{oeYjOVg zZKE&$;?^FNwYxmOMS>=WHSFy%@ojZM=K|MJs-AJ8S=J%X#0@*!OM{ZKM4V^V*-3K4 zq&q`+;W5TE($2q%bpa8+at~wPmFr02DHX-k3#$J`Hwxu#-hCYEZqJ*Wd%lx`?>|Ix z{aDxX{`w7*dR8Hv%8O;C$UJ-Ec|G{H+sJE|Us-A^pC9gHPNfjK0~-(E6^aXIjO`OY z((<$ZH)QhF&Wazh*1uqP@)J(M%O<5;K&%Ve_oUlKm>it=>-8nbgvSU;};dW>p#Vz`sJy$8dl-0`484nApZr5R|O8U8vU4S<$2g!qzabFR%=dp=< zD9Kp5{)=6N?7u%j9@$Iepxl2m{77~KUzE5qOQf4S_HLXsMvx!{#TCP&*eZ|wAjjx! zs>x$e=2G?IQ(^fPaCc!djI;lFe>Y*dW_Km|U)MSDNB)Tycn_g{i*s*~rMfFNSYHeG{j$`pl#$}Cj5~bt&1~$v?xKw-6=TvhhO)%&vw7V z5D}>P5Ob8spMLD|#HpzzialZAk_O@QZI)O!wF; zU)1V;f2a_yeYu+$1?kBZ-#JPO?mo>eCF-~ivtzmpzkXxhQG}MDM8Um$75-s<_hLva z1;wQ>ilPHnyhncLW&U&ang~07;1~YBNG}&5a=K)|@Qpa_8KfuT^+Im$9Fe&6D^XK- zFK9>;;lBZJX^7DVg3Rl+aPsA%^{*k>ZV|8N&j}^tcg@MDm zr|@ZXDBI1{Brp9%;dVfXU8X+Cgzg@Zd%gGH_kP9RoVqmfZ(j4-5vRWAG{T-H5ebo6 zF(kS_LeMW8mkN8fCq5R55bj4Ig`voz8CH+_0Ap=~84j76NTPVB!4 z%9FjDR1*G(Umm<}8)-T$pt@67Mtg`z)a(6kUN6NBd*WKmfF>=`_|e{n?Ejs{IG7l| zmM!vhN6UShKX%Gf%`0UDf#mC)zqG7BzvnFyMa?s&<^P7of5~wPsQY3YXzKglc;7|^ zLbKc^6Xwl?y9$ShpZ*)udpzFwueZ@HmC5V>cpF>g<^i9wmBviIUs0n!KafK9{fS+K zQ-)1nW&%y`{Sj}@TvMw&DgWPeeXn!eDn=Lncvl}~(dJaADgvR`=X&X8)6!{%#w_l#K3uldKVQ*qiybk*EPjQej$ zwyfm#EA3W){9{EY^JEj-&}DOjKO?*qiO*S^EUAbZCZcpK)PKY$$LG9?p#As%eW6b> zM!6Y^o$u#s)9F*U#G32RijsGY1w)x=&H}*D5G5#-HZN}7?=(N;I{D@Hg#iR?-GIdl z*4$L%o)&MxU;mt!jWC#W*~V77p1iLesYJzt=Ps4G;!G!TCFS`*oaaa12sc@-9cS3z zc@w+szjne!wR_Jg4Ne^Xk~hFYEq{4-7qUhmk=8($g1(%$UYPV9;W^DHqw?~`KSdlM zovuNGofV5X(N479pdo+9qA%>MpKs<<*)_ZqEB&y30iX@+C_deLW;7%PD7gg1(}d)G z*L!~)bh)M=>V>lJ#`^k|4O`;7Uw$2^>A;7kY8Qo2Nk>OVgRKqpiUG|zzAeidzrn%5 zAw$0O4MxZUw~0oHg%bs}N%l(KHHe{(_76U=ODp9UD z#im;EBsoEo_#`UBs&hr+htcYdHoo`cE@@67E;d5I%kRjt8`v63_B4+S4GMt{@rSep zZY56KzJ_&CNGs3-+lM~JbV9Of&b$LXQW$7Zm^YoBok>Vo0SzkdbKoC7Tce*xHSUI+ zmd4?+*9Xq~;PKg&6<^Q%dVaWh1iz)tmwhMgXVP%LRE(6eO;6FofqZdirNLr=IcMs6 zIWn4$=hK{*H6z{rj)8BCYODQ&x_g|VA}Q7%YCx_TBzs~O2*-4S5V8P*UNB}za3*K> zl3%afA3X1VtLS+x-R|Gf5|8So&m|?cof}QQcvlx`dDpbQH7=%`>=1DkjGUboEDxk< zP8zs8&2G>QXu5-S5s1xuzbKq|k_hSO9|b~>P6HM2)wqssl*v9c=cZsR2CM-l!aqj@ z0b6kJfNR$+F|iv}%k&OCkxpq9!#S&2)b(q4%PkU{o-K!zmC=Q$A8kjm!+Y?O^UQ3P zWfwMmT|ey6B1k|IyN=6=%?YFm&;f6;X0YDZ*pPss3)~){ToPq}oe*iJrI>|4WVoF4 zqzn3dSf~&~BM6=XRswj#`+fu-7c!{9>>Gn>0(mqca(EnV237>e=2bIvHz*!=ntb&d zjU|(uKY4OCFu&h(HePL}z8l>(c2w0SxwliE{MdZNOr4F}4{;*3h4H5Hd*=j<;#LRT{bIZuvI;ENSL9!`DbpnA8 zu1j;S3zHWgJvp~LGj7hIWfb0!(2;AppHKNa=KBEoFUKgK@hR0bo!Q#4E_}&HbVBL> z-cX8LfoDULjNI&NOza0Xts_5J@k=4m*XRmsk*dff9rk@}OdHT8ypW%@5W>;UBoldG zv6<0(Kav_bp5`c;VI*AFs#1SdFlfRPQi0(;CC;H|l`3$%=ZCwNhXRiSV@OddnnUk1 zz8uJ6Hw;Jaz3m4FGP>M>l|s)|wxmXkh$TK(O8DOuQ#XEH`f4XRdEGLdB$+AA0_8?jik39+TJ*T`e%4L-Vw$DK~@L<@02>s}opUCTN`PotGf5 zaea1YLm-0;jgXtm@8|A`p9#%JX{+LS!J?lVK|mtE+sq_x!Xw?@AA#bM@&XO?{5P&F z`A{RTR6X0kydyoT>p;U}EN*16J)-3rURj*RjU4SNl6!gMYpUVGO22nfXp%H7@6E%& zaw-O00qtXf9p8;+^R#mEV^$#qJHY6;HW5W5>2=_2fVb2Vk~fY^g?t?6^VmVhXPB;q zRrT}5%b0Sa$w`ER>*Zqd@c4N8;VY7pb|G;33`&^kc)Rb6VmQ4>f)Bv-E@d;wK2>3yZP9EmKFg0DOn*D4#GtdjK zK9~m&v5ZN45FVO_4+5@1sIe52w?v3mK=q?2zN$32ursgS>5=mH^EDaMH|*3kFHLba z*;|UQdItF1*y*1WI6n05c44|4@wTbwj?V1R;KEVYzsue|ZO1$I$4K}eTh#3ae48j6 z<+41dt*#7mD&i7z%5N+HgT4428{*5w{p=@N;0aw>8`K4^PHawrR{&az?{2Hh+i7^e zcedG3+1pQaYiG&nMWgM8II%G-n$x(Ul}#6u)5Xc*?c~?txAorYoTT8`pV{Fa{7Zud z4e^ysvQLs%=x{)sG&b^>{3jycNC#u6j4uyaTq{|<;zVpqt} z5g-t-dv&EaWS~XCjQeYl(*aV-QeWsl8M^ZjUl8l%hN@te-woxiH^~E(%5|4kX zmX=dgSM%UKgANSVE+~w&@s)k&u$ALEI`5QY1Xv_5S_ppzOM>!hS|gr=7$Ik!slfnh zcKrn?`~WIGf+GzZGKzmmR;MwDr{^5kioZG6%{-Iil4%Z|g|zJVgXm_9nF!e|o4BGv zqn<{Hk>^wVRlioTPGR}l`$t__gldSu;C#JA)regkJ~rdUhkLCRdYNPZU|;7blc8a8 z9IV=V5)qomTDR}!v&E1z?EB(0{jt*F9E)1-ZP|?*7)bf#a1ks-=Gy`McIEed5lS9V z%#8!<_hsQdI}%lxC`&=^ExyoaK}Z4-k7}~o5j$ej?K*WJD5}0XY>>J_jD|28|D8sc z1x6rLh`(`_@dVlvwS2cI7oxMHPZsB{gFYy2hu& z@`;TSTbmO`AXh3KCocsKL)rgbj$IlzBz1n?7eABqv=wfMK?HApxdKho-EAVG?=ag! z+?yK+elzD}zD9~l4J07UJ3L`l!a3h0|EwWi_SEf!_-AY0l6HT&jG7K)DhA&Y^*m62 zBG`8ibHMNVQC5ynnlLSdCi%jLxDC^jN6K`{9FHZTy0gJJ;6abTsBPDrH+(_dWc% z_`erPiqH!=F|2*1Ld4nJP<8bkj z`K)@Uvb?+(;3AIFbjWB#lw6aD8?4214v*_&p6N&{iSQGxKwnPpVIJ(Mm%#S(
Y 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
?GA1>gNKgU-d%SG$@e4XlY>aS5 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�{rvm)@9wH+ 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%0A1Mo#AICw!B3u1Ns#ATmnT-d^UYwL_}14X}Oc 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/e2e/workhub-reconstruction.spec.ts b/apps/desktop/e2e/workhub-reconstruction.spec.ts index d81dec3861..e853d7f733 100644 --- a/apps/desktop/e2e/workhub-reconstruction.spec.ts +++ b/apps/desktop/e2e/workhub-reconstruction.spec.ts @@ -44,14 +44,16 @@ test('WorkHub rebuilds Session conversation after navigating away and back', asy }), ).toBeVisible(); - const routedPrompt = `继续${sessionName},补充重复投递测试点。`; + const routedPrompt = '继续这个工作,补充重复投递测试点。'; const workHubComposer = page.locator( '.workhub-surface .maka-composer-editor [contenteditable="true"]', ); await workHubComposer.fill(routedPrompt); await workHubComposer.press('Enter'); await expect(page.locator('.workhub-submitted').last()).toBeVisible(); - await page.locator('.workhub-submitted > button').last().click(); + await page.locator('.workhub-turn', { hasText: routedPrompt }) + .locator('.workhub-submitted > button') + .click(); await expect(page.getByRole('main', { name: 'WorkHub' })).toBeHidden(); await page.getByRole('button', { name: 'WorkHub', exact: true }).click(); @@ -62,3 +64,47 @@ test('WorkHub rebuilds Session conversation after navigating away and back', asy }), ).toBeVisible(); }); + +test('WorkHub handles a first natural-language correction', async ({ + window: page, +}) => { + const composer = page.locator(COMPOSER_INPUT); + await composer.fill('检查支付回调重复投递时的幂等性'); + await composer.press('Enter'); + await expect(page.getByRole('button', { name: '重新生成' })).toHaveCount(1, { + timeout: 20_000, + }); + await page.evaluate(async () => { + await window.maka.settings.updateClient({ workHub: { enabled: true } }); + }); + await expect(page.getByRole('main', { name: 'WorkHub' })).toBeVisible(); + await page.evaluate(async () => { + await window.maka.sessions.create({ name: '登录稳定性' }); + }); + await expect(page.getByText('2 项工作', { exact: true })).toBeVisible(); + + const workHubComposer = page.locator( + '.workhub-surface .maka-composer-editor [contenteditable="true"]', + ); + await workHubComposer.fill('继续这个工作,补充重复投递测试点。'); + await workHubComposer.press('Enter'); + const continuedTurn = page.locator('.workhub-turn', { + hasText: '继续这个工作,补充重复投递测试点。', + }); + await expect( + continuedTurn.locator('.workhub-submitted-session strong'), + ).toHaveText('检查支付回调重复投递时的幂等性'); + + await workHubComposer.fill('不是这个,换成登录稳定性,补充刷新令牌失败判定。'); + await expect( + page.locator('.workhub-surface').getByRole('button', { name: '发送' }), + ).toBeEnabled(); + await workHubComposer.press('Enter'); + + await expect(page.locator('.workhub-correction-note').last()).toBeVisible(); + await expect( + page.locator('.workhub-turn', { + hasText: '不是这个,换成登录稳定性,补充刷新令牌失败判定。', + }).locator('.workhub-submitted-session strong'), + ).toHaveText('登录稳定性'); +}); diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index 509c131797..a6e91eabf8 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -26,8 +26,8 @@ import { type WorkHubSessionPort, } from '../../renderer/workhub-controller.js'; -test('binds the controller to the immutable WH-R2.3 strategy ID', () => { - assert.equal(WORKHUB_ROUTING_STRATEGY_ID, 'wh-r2.3-session-core-evidence'); +test('binds the controller to the immutable WH-R2.4 strategy ID', () => { + assert.equal(WORKHUB_ROUTING_STRATEGY_ID, 'wh-r2.4-session-context-continuity'); }); function session( @@ -194,7 +194,7 @@ test('submit sends an explicitly targeted request to that Session', async () => assert.deepEqual(result, { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-1', target: { sessionId: 'payment' }, turnId: 'turn-payment', @@ -224,7 +224,7 @@ test('submit routes a unique complete Session name without asking', async () => assert.deepEqual(result, { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-exact', target: { sessionId: 'payment' }, turnId: 'turn-exact', @@ -333,7 +333,7 @@ test('submit asks the user when weak relevance matches more than one Session', a assert.deepEqual(result, { kind: 'clarification', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-ambiguous', text: '继续处理重复问题', options: [ @@ -478,7 +478,7 @@ test('submit follows an unambiguous reference to the most recent Work', async () assert.deepEqual(result, { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-pronoun', target: { sessionId: 'payment' }, turnId: 'turn-2', @@ -487,6 +487,280 @@ test('submit follows an unambiguous reference to the most recent Work', async () assert.deepEqual(submitted, ['payment', 'payment']); }); +test('read seeds current and previous focus from pre-existing ordinary Sessions', async () => { + const submitted: string[] = []; + const sessions = port([ + session('login', { sessionName: '登录刷新令牌', updatedAt: 20 }), + session('payment', { sessionName: '支付回调幂等性', updatedAt: 30 }), + session('archived', { archived: true, updatedAt: 40 }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + const controller = createWorkHubController({ sessions }); + + await controller.read(); + const current = await controller.submit({ + requestId: 'request-current-seed', + text: '继续这个工作', + }); + const previous = await controller.submit({ + requestId: 'request-previous-seed', + text: '回到上一个工作', + }); + + assert.deepEqual(current.kind === 'submitted' ? current.target : undefined, { + sessionId: 'payment', + }); + assert.deepEqual(previous.kind === 'submitted' ? previous.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(submitted, ['payment', 'login']); +}); + +test('read prefers the Session active when WorkHub opens over raw recency', async () => { + const submitted: string[] = []; + const sessions = port([ + session('login', { sessionName: '登录刷新令牌', updatedAt: 20 }), + session('payment', { sessionName: '支付回调幂等性', updatedAt: 30 }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-login' }; + }; + const controller = createWorkHubController({ sessions }); + + await controller.read({ focus: { sessionId: 'login' } }); + const result = await controller.submit({ + requestId: 'request-active-seed', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(submitted, ['login']); +}); + +test('a stale opening read cannot overwrite a newer WorkHub focus', async () => { + const pendingReads: Array<{ + resolve(value: WorkHubSessionFacts[]): void; + promise: Promise; + }> = []; + const sessions = port([]); + sessions.list = () => { + let resolve!: (value: WorkHubSessionFacts[]) => void; + const promise = new Promise((next) => { + resolve = next; + }); + pendingReads.push({ resolve, promise }); + return promise; + }; + const submitted: string[] = []; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-newer-focus' }; + }; + const controller = createWorkHubController({ sessions }); + const older = controller.read({ focus: { sessionId: 'payment' } }); + const newer = controller.read({ focus: { sessionId: 'login' } }); + const facts = [ + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]; + + pendingReads[1]!.resolve(facts); + await newer; + pendingReads[0]!.resolve([facts[1]!]); + await older; + sessions.list = async () => facts; + const result = await controller.submit({ + requestId: 'request-after-stale-read', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(submitted, ['login']); +}); + +test('an unavailable opening focus falls back to recent routable Sessions', async () => { + const submitted: string[] = []; + const sessions = port([ + session('archived', { archived: true, updatedAt: 40 }), + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-fallback' }; + }; + const controller = createWorkHubController({ sessions }); + + await controller.read({ focus: { sessionId: 'archived' } }); + const result = await controller.submit({ + requestId: 'request-fallback-focus', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'payment', + }); + assert.deepEqual(submitted, ['payment']); +}); + +test('focus falls back when the current Session is archived after WorkHub opens', async () => { + let catalog = [ + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]; + const sessions = port(catalog); + sessions.list = async () => catalog; + const submitted: string[] = []; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-focus-fallback' }; + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + catalog = catalog.map((entry) => entry.target.sessionId === 'payment' + ? { ...entry, archived: true } + : entry); + + const result = await controller.submit({ + requestId: 'request-after-current-archive', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(submitted, ['login']); +}); + +test('resetVisitContext discards focus from a previous WorkHub mount', async () => { + let catalog = [ + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]; + const sessions = port(catalog); + sessions.list = async () => catalog; + const submitted: string[] = []; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + const controller = createWorkHubController({ sessions }); + await controller.read({ focus: { sessionId: 'login' } }); + controller.resetVisitContext(); + catalog = catalog.map((entry) => entry.target.sessionId === 'payment' + ? { ...entry, updatedAt: 40 } + : entry); + await controller.read(); + + const result = await controller.submit({ + requestId: 'request-after-remount', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'payment', + }); +}); + +test('an in-flight submit cannot restore visit focus after WorkHub unmounts', async () => { + const sessions = port([ + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]); + let signalSubmitStarted!: () => void; + const submitStarted = new Promise((resolve) => { + signalSubmitStarted = resolve; + }); + let finishSubmit!: (value: { turnId: string }) => void; + const pendingTurn = new Promise<{ turnId: string }>((resolve) => { + finishSubmit = resolve; + }); + sessions.submit = async () => { + signalSubmitStarted(); + return pendingTurn; + }; + const controller = createWorkHubController({ sessions }); + await controller.read({ focus: { sessionId: 'login' } }); + const inFlight = controller.submit({ + requestId: 'request-before-unmount', + text: '继续这个工作', + }); + await submitStarted; + controller.resetVisitContext(); + finishSubmit({ turnId: 'turn-login' }); + await inFlight; + + const submitted: string[] = []; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-after-remount' }; + }; + await controller.read(); + const result = await controller.submit({ + requestId: 'request-after-in-flight', + text: '继续这个工作', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'payment', + }); + assert.deepEqual(submitted, ['payment']); +}); + +test('an old submit resolves against the visit focus captured before an await', async () => { + const catalog = [ + session('login', { updatedAt: 20 }), + session('payment', { updatedAt: 30 }), + ]; + const sessions = port(catalog); + const controller = createWorkHubController({ sessions }); + await controller.read({ focus: { sessionId: 'login' } }); + + let signalListStarted!: () => void; + const listStarted = new Promise((resolve) => { + signalListStarted = resolve; + }); + let finishOldList!: (value: WorkHubSessionFacts[]) => void; + const oldList = new Promise((resolve) => { + finishOldList = resolve; + }); + let blockNextList = true; + sessions.list = async () => { + if (!blockNextList) return catalog; + blockNextList = false; + signalListStarted(); + return oldList; + }; + const submitted: string[] = []; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: 'turn-' + target.sessionId }; + }; + + const oldSubmission = controller.submit({ + requestId: 'request-old-visit', + text: '继续这个工作', + }); + await listStarted; + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + finishOldList(catalog); + + const result = await oldSubmission; + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(submitted, ['login']); +}); + test('submit routes strong core evidence instead of reusing recent focus', async () => { const submitted: string[] = []; const sessions = port([ @@ -517,7 +791,7 @@ test('submit routes strong core evidence instead of reusing recent focus', async assert.deepEqual(result, { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-topic-shift', target: { sessionId: 'payment' }, turnId: 'turn-2', @@ -553,7 +827,7 @@ test('submit routes unique strong core evidence without asking', async () => { if (result.kind !== 'submitted') return; assert.deepEqual(result.target, { sessionId: 'login' }); assert.equal(result.evidence, 'core_entity'); - assert.equal(result.strategyId, 'wh-r2.3-session-core-evidence'); + assert.equal(result.strategyId, 'wh-r2.4-session-context-continuity'); assert.deepEqual(submitted, ['login']); }); @@ -579,14 +853,14 @@ test('submit ignores shared boilerplate when an executable request names a new t if (result.kind !== 'submitted') return; assert.deepEqual(result.target, { sessionId: 'payment-new' }); assert.equal(result.evidence, 'new_session'); - assert.equal(result.strategyId, 'wh-r2.3-session-core-evidence'); + assert.equal(result.strategyId, 'wh-r2.4-session-context-continuity'); assert.deepEqual(createdNames, ['检查支付回调重复投递']); }); -test('submit keeps a unique two-character clue behind clarification', async () => { +test('submit keeps a foreign two-character clue behind clarification', async () => { const sessions = port([ - session('login', { sessionName: '登录稳定性' }), - session('payment', { sessionName: '支付稳定性' }), + session('login', { sessionName: '登录稳定性', updatedAt: 10 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 20 }), ]); const controller = createWorkHubController({ sessions }); @@ -596,7 +870,7 @@ test('submit keeps a unique two-character clue behind clarification', async () = }); assert.equal(result.kind, 'clarification'); - assert.equal(result.strategyId, 'wh-r2.3-session-core-evidence'); + assert.equal(result.strategyId, 'wh-r2.4-session-context-continuity'); }); test('submit treats explicit user uncertainty as clarification instead of a new Session', async () => { @@ -793,6 +1067,274 @@ test('route correction never stops a root Turn that WorkHub only steered into', assert.deepEqual(stopped, []); }); +test('first natural-language correction reroutes and stops the wrong WorkHub-owned Turn', async () => { + const submitted: string[] = []; + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { + sessionName: '登录稳定性', + latestResult: '刷新令牌过期导致重复登录', + updatedAt: 20, + }), + session('payment', { + sessionName: '支付稳定性', + latestResult: '支付回调重复投递', + updatedAt: 30, + }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + await controller.submit({ + requestId: 'request-wrong-payment', + text: '继续这个工作,补充验收项', + }); + + const corrected = await controller.submit({ + requestId: 'request-natural-correction', + text: '不是这个,换成登录那个,补充刷新令牌失败判定', + }); + + assert.equal(corrected.kind, 'submitted'); + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.equal( + corrected.kind === 'submitted' ? corrected.evidence : undefined, + 'route_correction', + ); + assert.deepEqual(corrected.kind === 'submitted' ? corrected.correctedFrom : undefined, { + sessionId: 'payment', + }); + assert.deepEqual(stopped, [['payment', 'turn-1']]); + assert.deepEqual(submitted, ['payment', 'login']); +}); + +test('content-level replacement instructions stay inside the focused Session', async () => { + const submitted: string[] = []; + const stopped: string[] = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + session('database', { + sessionName: '数据库迁移', + latestResult: 'Postgres schema migration', + updatedAt: 10, + }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + sessions.stop = async (target) => { + stopped.push(target.sessionId); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + await controller.submit({ + requestId: 'request-before-content-change', + text: '继续这个工作', + }); + + const result = await controller.submit({ + requestId: 'request-content-change', + text: '继续这个工作,Redis 配置不对,改成 Postgres', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'payment', + }); + assert.equal(result.kind === 'submitted' ? result.evidence : undefined, 'recent_focus'); + assert.deepEqual(stopped, []); +}); + +test('steering the same WorkHub-owned root preserves ownership for a later correction', async () => { + const submitted: string[] = []; + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let paymentSubmissions = 0; + sessions.submit = async (target) => { + submitted.push(target.sessionId); + if (target.sessionId === 'payment') { + paymentSubmissions += 1; + return paymentSubmissions === 1 + ? { turnId: 'turn-payment-root' } + : { turnId: 'turn-payment-root', steered: true }; + } + return { turnId: 'turn-login-' + submitted.length }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + await controller.submit({ + requestId: 'request-owned-root', + text: '继续这个工作', + }); + await controller.submit({ + requestId: 'request-other-owned-root', + text: '先检查登录稳定性', + explicitTarget: { sessionId: 'login' }, + }); + await controller.submit({ + requestId: 'request-steer-owned-root', + text: '继续这个工作,补充测试点', + explicitTarget: { sessionId: 'payment' }, + }); + + const corrected = await controller.submit({ + requestId: 'request-correct-owned-root', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(stopped, [['payment', 'turn-payment-root']]); +}); + +test('WorkHub-owned root remains stoppable after navigating away and back', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + sessions.submit = async (target) => ({ turnId: 'turn-' + target.sessionId }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + await controller.submit({ + requestId: 'request-owned-before-navigation', + text: '继续这个工作', + }); + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + + const corrected = await controller.submit({ + requestId: 'request-correction-after-return', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(stopped, [['payment', 'turn-payment']]); +}); + +test('natural-language correction never stops a pre-existing focused Session', async () => { + const stopped: string[] = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', state: 'running', updatedAt: 30 }), + ]); + sessions.submit = async (target) => ({ turnId: `turn-${target.sessionId}` }); + sessions.stop = async (target) => { + stopped.push(target.sessionId); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + + const corrected = await controller.submit({ + requestId: 'request-safe-natural-correction', + text: '不是这个,用登录那个', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(corrected.kind === 'submitted' ? corrected.correctedFrom : undefined, { + sessionId: 'payment', + }); + assert.deepEqual(stopped, []); +}); + +test('English natural-language correction names the replacement Session', async () => { + const submitted: string[] = []; + const sessions = port([ + session('login', { sessionName: 'Login Reliability', updatedAt: 20 }), + session('payment', { sessionName: 'Payment Webhooks', updatedAt: 30 }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + + const corrected = await controller.submit({ + requestId: 'request-english-natural-correction', + text: 'Not that work; switch to Login Reliability and add the retry checks', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.equal( + corrected.kind === 'submitted' ? corrected.evidence : undefined, + 'route_correction', + ); +}); + +test('ambiguous natural-language correction preserves correction context through clarification', async () => { + const submitted: string[] = []; + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login-api', { sessionName: '登录 API 稳定性', updatedAt: 20 }), + session('login-ui', { sessionName: '登录 UI 稳定性', updatedAt: 10 }), + session('payment', { sessionName: '支付回调幂等性', updatedAt: 30 }), + ]); + sessions.submit = async (target) => { + submitted.push(target.sessionId); + return { turnId: `turn-${submitted.length}` }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + await controller.read(); + await controller.submit({ + requestId: 'request-payment-before-clarification', + text: '继续这个工作', + }); + + const clarification = await controller.submit({ + requestId: 'request-natural-clarification', + text: '不是这个,换成登录那个', + }); + assert.equal(clarification.kind, 'clarification'); + if (clarification.kind !== 'clarification') return; + assert.deepEqual( + clarification.options.map((option) => option.target.sessionId), + ['login-api', 'login-ui'], + ); + assert.deepEqual(clarification.correction, { + from: { sessionId: 'payment' }, + turnId: 'turn-1', + }); + + const corrected = await controller.submit({ + requestId: clarification.requestId, + text: clarification.text, + explicitTarget: { sessionId: 'login-api' }, + correction: clarification.correction, + }); + assert.equal(corrected.kind, 'submitted'); + assert.deepEqual(stopped, [['payment', 'turn-1']]); + assert.deepEqual(submitted, ['payment', 'login-api']); +}); + test('latest route correction wins for the same expression family', async () => { const sessions = port([ session('login', { sessionName: '登录稳定性' }), @@ -846,7 +1388,7 @@ test('waiting Session rejects a second root request without calling submit', asy assert.deepEqual(result, { kind: 'waiting', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-waiting', text: '排查令牌过期重复登录问题:补充一条等待状态下的新请求。', target: { sessionId: 'login' }, @@ -935,7 +1477,7 @@ test('submit keeps unmatched non-executable conversation in WorkHub', async () = assert.deepEqual(result, { kind: 'discussion', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-discussion', text: '你觉得统一入口最重要的价值是什么?', }); @@ -1000,7 +1542,7 @@ test('submit creates an ordinary Session for a clear unmatched executable goal', assert.deepEqual(result, { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-new-work', target: { sessionId: 'invoice-export' }, turnId: 'turn-invoice-export', diff --git a/apps/desktop/src/main/__tests__/workhub-surface-flow.test.ts b/apps/desktop/src/main/__tests__/workhub-surface-flow.test.ts index dc6479c082..27edc7eb97 100644 --- a/apps/desktop/src/main/__tests__/workhub-surface-flow.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-surface-flow.test.ts @@ -31,6 +31,7 @@ import { import { boundedWorkHubTimelineText, createWorkHubController, + WORKHUB_ROUTING_STRATEGY_ID, type WorkHubController, type WorkHubSubmitInput, } from '../../renderer/workhub-controller.js'; @@ -79,14 +80,14 @@ test('surface keeps the Composer draft when routing fails or the target is waiti assert.equal(workHubSubmissionClearsDraft(undefined), false); assert.equal(workHubSubmissionClearsDraft({ kind: 'waiting', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'waiting', text: '继续处理', target: { sessionId: 'payment' }, }), false); assert.equal(workHubSubmissionClearsDraft({ kind: 'discussion', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'discussion', text: '先讨论方向', }), true); @@ -95,7 +96,7 @@ test('surface keeps the Composer draft when routing fails or the target is waiti test('surface disables correction after a request was steered into existing work', () => { const submission = { kind: 'submitted' as const, - strategyId: 'wh-r2.3-session-core-evidence' as const, + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'steered', target: { sessionId: 'payment' }, turnId: 'turn-existing', @@ -130,7 +131,7 @@ test('surface hides a rebuilt Session turn while the matching local turn is stil state: 'settled', outcome: { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-payment', target: { sessionId: 'payment' }, turnId: 'turn-payment', @@ -164,7 +165,7 @@ test('surface canonicalizes bounded text before suppressing a local duplicate', state: 'settled', outcome: { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-long', target: { sessionId: 'payment' }, turnId: 'turn-long', @@ -195,7 +196,7 @@ test('surface suppresses the newest matching projected steering turn', () => { state: 'settled', outcome: { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: 'request-new', target: { sessionId: 'payment' }, turnId: 'turn-payment', @@ -208,13 +209,14 @@ test('surface keeps clarification and successful routing in WorkHub', async () = const submissions: WorkHubSubmitInput[] = []; const controller: WorkHubController = { read: async () => ({ sessions: [], turns: [] }), + resetVisitContext: () => {}, subscribe: () => () => {}, submit: async (input) => { submissions.push(input); if (!input.explicitTarget) { return { kind: 'clarification', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: input.requestId, text: input.text, options: [{ @@ -226,7 +228,7 @@ test('surface keeps clarification and successful routing in WorkHub', async () = } return { kind: 'submitted', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: input.requestId, target: input.explicitTarget, turnId: 'turn-payment', @@ -256,10 +258,11 @@ test('surface keeps clarification and successful routing in WorkHub', async () = test('surface leaves discussion in WorkHub instead of creating a task view', async () => { const controller: WorkHubController = { read: async () => ({ sessions: [], turns: [] }), + resetVisitContext: () => {}, subscribe: () => () => {}, submit: async (input) => ({ kind: 'discussion', - strategyId: 'wh-r2.3-session-core-evidence', + strategyId: WORKHUB_ROUTING_STRATEGY_ID, requestId: input.requestId, text: input.text, }), diff --git a/apps/desktop/src/renderer/app-shell.tsx b/apps/desktop/src/renderer/app-shell.tsx index 20e2ae82ac..2265e1dac5 100644 --- a/apps/desktop/src/renderer/app-shell.tsx +++ b/apps/desktop/src/renderer/app-shell.tsx @@ -2948,6 +2948,7 @@ function AppShellContent({ ) : ( diff --git a/apps/desktop/src/renderer/styles/workhub.css b/apps/desktop/src/renderer/styles/workhub.css index 369a71c038..ff666d9d98 100644 --- a/apps/desktop/src/renderer/styles/workhub.css +++ b/apps/desktop/src/renderer/styles/workhub.css @@ -91,6 +91,15 @@ flex-direction: column; } +.workhub-loading-user { + display: flex; + justify-content: flex-end; +} + +.workhub-loading-turn { + min-height: 172px; +} + .workhub-turn { display: flex; flex-direction: column; diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index 514d47794d..5ac1eb3221 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -84,14 +84,20 @@ export interface WorkHubSubmitInput { requestId: string; text: string; explicitTarget?: WorkHubSessionTarget; - correction?: { - from: WorkHubSessionTarget; - turnId: string; - steered?: true; - }; + correction?: WorkHubCorrectionContext; +} + +export interface WorkHubCorrectionContext { + from: WorkHubSessionTarget; + turnId?: string; + steered?: true; } -export const WORKHUB_ROUTING_STRATEGY_ID = 'wh-r2.3-session-core-evidence' as const; +export interface WorkHubReadInput { + focus?: WorkHubSessionTarget; +} + +export const WORKHUB_ROUTING_STRATEGY_ID = 'wh-r2.4-session-context-continuity' as const; export type WorkHubRoutingStrategyId = typeof WORKHUB_ROUTING_STRATEGY_ID; export type WorkHubSubmission = ( @@ -109,6 +115,7 @@ export type WorkHubSubmission = ( requestId: string; text: string; options: Array>; + correction?: WorkHubCorrectionContext; } | { kind: 'discussion'; @@ -151,32 +158,93 @@ export interface WorkHubSessionPort { } export interface WorkHubController { - read(): Promise; + read(input?: WorkHubReadInput): Promise; submit(input: WorkHubSubmitInput): Promise; subscribe(handler: () => void): () => void; + resetVisitContext(): void; } +const MAX_OWNED_ROOTS = 32; + export function createWorkHubController(deps: { sessions: WorkHubSessionPort; }): WorkHubController { - const routePolicy = createWorkHubRoutePolicy(); + let routePolicy = createWorkHubRoutePolicy(); + let focusReadVersion = 0; + let pendingFocusReadVersion: number | undefined; + const ownedRootBySessionId = new Map(); + const reconcileFocus = ( + policy: ReturnType, + sessions: readonly WorkHubSessionFacts[], + ) => { + policy.initializeFocus(sessions + .filter((session) => session.kind === 'ordinary' && !session.archived) + .sort((left, right) => right.updatedAt - left.updatedAt) + .map((session) => session.target)); + }; + const correctionFor = (from: WorkHubSessionTarget): WorkHubCorrectionContext => { + const turnId = ownedRootBySessionId.get(from.sessionId); + if (!turnId) return { from }; + return { + from, + turnId, + }; + }; + const rememberOwnedRoot = ( + target: WorkHubSessionTarget, + turn: { turnId: string; steered?: true }, + ) => { + const existing = ownedRootBySessionId.get(target.sessionId); + if (turn.steered) { + if (existing !== turn.turnId) ownedRootBySessionId.delete(target.sessionId); + return; + } + ownedRootBySessionId.delete(target.sessionId); + ownedRootBySessionId.set(target.sessionId, turn.turnId); + while (ownedRootBySessionId.size > MAX_OWNED_ROOTS) { + const oldest = ownedRootBySessionId.keys().next().value; + if (!oldest) break; + ownedRootBySessionId.delete(oldest); + } + }; return { subscribe(handler) { return deps.sessions.subscribe(handler); }, - async read() { - const facts = await deps.sessions.list(); - const ordinary = facts - .filter((session) => session.kind === 'ordinary') - .sort((left, right) => right.updatedAt - left.updatedAt); - return { - sessions: ordinary - .map(({ kind: _kind, ...session }) => session), - turns: await deps.sessions.recentTurns(ordinary.map((session) => session.target)), - }; + async read(input) { + const readPolicy = routePolicy; + let readFocusVersion = focusReadVersion; + if (input?.focus) { + readFocusVersion = ++focusReadVersion; + pendingFocusReadVersion = readFocusVersion; + readPolicy.rememberTarget(input.focus); + } + try { + const facts = await deps.sessions.list(); + const ordinary = facts + .filter((session) => session.kind === 'ordinary') + .sort((left, right) => right.updatedAt - left.updatedAt); + if ( + readFocusVersion === focusReadVersion && + (input?.focus || pendingFocusReadVersion === undefined) + ) { + reconcileFocus(readPolicy, facts); + } + return { + sessions: ordinary + .map(({ kind: _kind, ...session }) => session), + turns: await deps.sessions.recentTurns(ordinary.map((session) => session.target)), + }; + } finally { + if (input?.focus && pendingFocusReadVersion === readFocusVersion) { + pendingFocusReadVersion = undefined; + } + } }, async submit(input) { + const submissionPolicy = routePolicy; const sessions = await deps.sessions.list(); + reconcileFocus(submissionPolicy, sessions); const ordinary = sessions.filter((session) => session.kind === 'ordinary'); // Archived Sessions remain visible as historical work, but Runtime Host // rejects new root Turns for them. Never offer one as a routing target. @@ -184,7 +252,7 @@ export function createWorkHubController(deps: { const routingEvidence = input.explicitTarget ? [] : await deps.sessions.routingEvidence(routable.map((session) => session.target)); - const decision = routePolicy.resolve({ + const decision = submissionPolicy.resolve({ text: input.text, sessions: routable, originPromptBySessionId: new Map( @@ -193,6 +261,9 @@ export function createWorkHubController(deps: { ...(input.explicitTarget ? { explicitTarget: input.explicitTarget } : {}), }); if (decision.kind === 'clarification') { + const correction = decision.correctedFrom + ? correctionFor(decision.correctedFrom) + : undefined; return { kind: 'clarification', strategyId: WORKHUB_ROUTING_STRATEGY_ID, @@ -203,6 +274,7 @@ export function createWorkHubController(deps: { projectName: session.projectName, sessionName: session.sessionName, })), + ...(correction ? { correction } : {}), }; } if (decision.kind === 'discussion') { @@ -215,6 +287,9 @@ export function createWorkHubController(deps: { } let target: WorkHubSessionTarget; let evidence: Extract['evidence']; + const correction = input.correction ?? (decision.kind === 'target' && decision.correctedFrom + ? correctionFor(decision.correctedFrom) + : undefined); if (decision.kind === 'new_session') { const created = await deps.sessions.create({ name: workHubNewSessionName(input.text) }); if (created.kind !== 'ordinary') { @@ -224,7 +299,7 @@ export function createWorkHubController(deps: { evidence = 'new_session'; } else { target = decision.target; - evidence = input.correction ? 'route_correction' : decision.evidence; + evidence = correction ? 'route_correction' : decision.evidence; } const targetSession = routable.find( (session) => session.target.sessionId === target.sessionId, @@ -241,12 +316,16 @@ export function createWorkHubController(deps: { target, }; } - if (input.correction && !input.correction.steered) { - await deps.sessions.stop(input.correction.from, input.correction.turnId); + if (correction?.turnId && !correction.steered) { + await deps.sessions.stop(correction.from, correction.turnId); + if (ownedRootBySessionId.get(correction.from.sessionId) === correction.turnId) { + ownedRootBySessionId.delete(correction.from.sessionId); + } } const turn = await deps.sessions.submit(target, input.text); - routePolicy.rememberTarget(target); - if (input.correction) routePolicy.rememberCorrection(input.text, target); + rememberOwnedRoot(target, turn); + submissionPolicy.rememberTarget(target); + if (correction) submissionPolicy.rememberCorrection(input.text, target); return { kind: 'submitted', strategyId: WORKHUB_ROUTING_STRATEGY_ID, @@ -255,8 +334,13 @@ export function createWorkHubController(deps: { turnId: turn.turnId, ...(turn.steered ? { steered: true as const } : {}), evidence, - ...(input.correction ? { correctedFrom: input.correction.from } : {}), + ...(correction ? { correctedFrom: correction.from } : {}), }; }, + resetVisitContext() { + focusReadVersion += 1; + pendingFocusReadVersion = undefined; + routePolicy = routePolicy.newVisit(); + }, }; } diff --git a/apps/desktop/src/renderer/workhub-route-policy.ts b/apps/desktop/src/renderer/workhub-route-policy.ts index 570031ba16..8b7a8bb8e9 100644 --- a/apps/desktop/src/renderer/workhub-route-policy.ts +++ b/apps/desktop/src/renderer/workhub-route-policy.ts @@ -34,10 +34,12 @@ export type WorkHubRouteDecision = kind: 'target'; target: WorkHubSessionTarget; evidence: WorkHubRouteEvidence; + correctedFrom?: WorkHubSessionTarget; } | { kind: 'clarification'; options: WorkHubSessionFacts[]; + correctedFrom?: WorkHubSessionTarget; } | { kind: 'discussion' } | { kind: 'new_session' }; @@ -49,6 +51,8 @@ export interface WorkHubRoutePolicy { originPromptBySessionId: ReadonlyMap; explicitTarget?: WorkHubSessionTarget; }): WorkHubRouteDecision; + initializeFocus(targets: readonly WorkHubSessionTarget[]): void; + newVisit(): WorkHubRoutePolicy; rememberTarget(target: WorkHubSessionTarget): void; rememberCorrection(text: string, target: WorkHubSessionTarget): void; } @@ -76,6 +80,11 @@ interface RouteCorrection { sequence: number; } +interface RouteCorrectionMemory { + corrections: RouteCorrection[]; + sequence: number; +} + const MAX_ROUTE_CORRECTIONS = 32; const MIN_EXACT_SESSION_NAME_LENGTH = 2; const MIN_CORRECTION_TERM_LENGTH = 3; @@ -88,16 +97,21 @@ const MAX_UNCERTAINTY_OPTIONS = 5; const MAX_RELATED_CLARIFICATION_OPTIONS = 4; /** - * Deep routing module for R2.3. + * Deep routing module for R2.4. * * It owns only transient inference context. Session identity, transcript, * execution state, and recovery continue to come from the Session port. */ export function createWorkHubRoutePolicy(): WorkHubRoutePolicy { + return createWorkHubRoutePolicyVisit({ corrections: [], sequence: 0 }); +} + +function createWorkHubRoutePolicyVisit( + correctionMemory: RouteCorrectionMemory, +): WorkHubRoutePolicy { let currentFocus: WorkHubSessionTarget | undefined; let previousFocus: WorkHubSessionTarget | undefined; - const corrections: RouteCorrection[] = []; - let correctionSequence = 0; + const corrections = correctionMemory.corrections; return { resolve({ text, sessions, originPromptBySessionId, explicitTarget }) { @@ -109,17 +123,58 @@ export function createWorkHubRoutePolicy(): WorkHubRoutePolicy { return { kind: 'new_session' }; } - const exact = sessions.map((session) => { - const qualifiedName = `${session.projectName}/${session.sessionName}`; + const correctionText = naturalCorrectionTargetText(text); + const correctedFrom = currentFocus && sessions.some((session) => + session.target.sessionId === currentFocus?.sessionId) + ? currentFocus + : undefined; + if ( + !correctionText && + correctedFrom && + looksLikeRecentFocus(text) && + looksLikeContentReplacement(text) + ) { + return { kind: 'target', target: correctedFrom, evidence: 'recent_focus' }; + } + if (correctionText && correctedFrom) { + const alternatives = sessions.filter((session) => + session.target.sessionId !== correctedFrom.sessionId); + const exactCorrection = rankExactSessions(correctionText, alternatives); + if ( + exactCorrection[0] && + exactCorrection[0].matchLength > (exactCorrection[1]?.matchLength ?? 0) + ) { + return { + kind: 'target', + target: exactCorrection[0].session.target, + evidence: 'route_correction', + correctedFrom, + }; + } + const relatedCorrection = rankRelatedSessions( + correctionText, + alternatives, + originPromptBySessionId, + ); + if (relatedCorrection.length === 1) { + return { + kind: 'target', + target: relatedCorrection[0]!.session.target, + evidence: 'route_correction', + correctedFrom, + }; + } + const options = relatedCorrection.length > 1 + ? relatedCorrection.map(({ session }) => session) + : alternatives.sort((left, right) => right.updatedAt - left.updatedAt); return { - session, - matchLength: Math.max( - exactIdentityMatchLength(text, qualifiedName), - exactIdentityMatchLength(text, session.sessionName), - ), + kind: 'clarification', + options: options.slice(0, MAX_UNCERTAINTY_OPTIONS), + correctedFrom, }; - }).filter(({ matchLength }) => matchLength >= MIN_EXACT_SESSION_NAME_LENGTH) - .sort((left, right) => right.matchLength - left.matchLength); + } + + const exact = rankExactSessions(text, sessions); if (exact[0] && exact[0].matchLength > (exact[1]?.matchLength ?? 0)) { return { kind: 'target', @@ -152,19 +207,28 @@ export function createWorkHubRoutePolicy(): WorkHubRoutePolicy { const previousReference = looksLikePreviousFocus(text); const currentReference = !previousReference && looksLikeRecentFocus(text); - const focused = previousReference + const focusCandidate = previousReference ? previousFocus : currentReference ? currentFocus : undefined; + const focused = focusCandidate && sessions.some((session) => + session.target.sessionId === focusCandidate.sessionId) + ? focusCandidate + : undefined; const strongEvidenceElsewhere = focused ? related.some(({ session, strongEvidence }) => session.target.sessionId !== focused.sessionId && strongEvidence) : false; + const weakEvidenceElsewhere = focused + ? related.some(({ session }) => session.target.sessionId !== focused.sessionId) + : false; const ambiguousEvidence = related.length > 1; if ( focused && - (previousReference || (!strongEvidenceElsewhere && !ambiguousEvidence)) + (previousReference || ( + !strongEvidenceElsewhere && !weakEvidenceElsewhere && !ambiguousEvidence + )) ) { return { kind: 'target', target: focused, evidence: 'recent_focus' }; } @@ -194,19 +258,59 @@ export function createWorkHubRoutePolicy(): WorkHubRoutePolicy { } return looksExecutable(text) ? { kind: 'new_session' } : { kind: 'discussion' }; }, + initializeFocus(targets) { + const ordered = targets.filter((target, index) => + targets.findIndex((candidate) => candidate.sessionId === target.sessionId) === index); + const first = ordered[0]; + if (!first) return; + const available = new Set(ordered.map((target) => target.sessionId)); + if (currentFocus && !available.has(currentFocus.sessionId)) { + currentFocus = first; + previousFocus = ordered[1]; + return; + } + if (!currentFocus) { + currentFocus = first; + previousFocus = ordered[1]; + return; + } + if (!previousFocus || !available.has(previousFocus.sessionId)) { + previousFocus = ordered.find((target) => target.sessionId !== currentFocus?.sessionId); + } + }, + newVisit() { + return createWorkHubRoutePolicyVisit(correctionMemory); + }, rememberTarget(target) { if (currentFocus?.sessionId === target.sessionId) return; previousFocus = currentFocus; currentFocus = target; }, rememberCorrection(text, target) { - correctionSequence += 1; - corrections.unshift({ text, target, sequence: correctionSequence }); + correctionMemory.sequence += 1; + corrections.unshift({ text, target, sequence: correctionMemory.sequence }); corrections.splice(MAX_ROUTE_CORRECTIONS); }, }; } +function rankExactSessions( + text: string, + sessions: WorkHubSessionFacts[], +): Array<{ session: WorkHubSessionFacts; matchLength: number }> { + return sessions.map((session) => { + const qualifiedName = `${session.projectName}/${session.sessionName}`; + return { + session, + matchLength: Math.max( + exactIdentityMatchLength(text, qualifiedName), + exactIdentityMatchLength(text, session.sessionName), + ), + }; + }).filter(({ matchLength }) => matchLength >= MIN_EXACT_SESSION_NAME_LENGTH) + .sort((left, right) => right.matchLength - left.matchLength); +} + function correctedTarget( text: string, sessions: WorkHubSessionFacts[], @@ -297,6 +401,21 @@ function looksLikePreviousFocus(value: string): boolean { ); } +function naturalCorrectionTargetText(value: string): string | undefined { + const replacement = '(?:应该(?:是|用|改成|改为|切到|转到)?|而是|改成|改为|换成|换到|切到|转到|用|是)'; + const chinese = value.match( + new RegExp(`(?:(?:不是|不要再继续)\\s*(?:(?:这个|那个|当前这个|刚才那个)(?:工作|任务|Session|会话)?|[^,,。;;\\n]{1,32}(?:那个|那项工作|Session|会话|工作|任务))|(?:(?:这个|那个|当前这个|刚才那个)(?:工作|任务|Session|会话)|[^,,。;;\\n]{1,32}(?:那个|那项工作|Session|会话|工作|任务))\\s*(?:不对|搞错了|弄错了))[,,。;;\\n]\\s*${replacement}\\s*(.{2,})$`, 'iu'), + )?.[1]?.trim(); + if (chinese) return chinese; + return value.match( + /\b(?:not\s+(?:(?:this|that|the\s+current)(?:\s+(?:one|session|work|task))?|[^,.;\n]{1,32}\s+(?:session|work|task))|wrong\s+(?:one|session|work|task))\b[,.;\s]{0,4}(?:use|switch\s+to|change\s+to|move\s+to)\s+(.{2,})$/iu, + )?.[1]?.trim(); +} + +function looksLikeContentReplacement(value: string): boolean { + return /(?:不要(?:再)?用|别用|[^,,。;;\n]{1,32}(?:配置|实现|方案|字段|参数)?(?:不对|错了))[^\n]{0,64}[,,。;;]\s*(?:改成|改为|换成|换用|用)\s*\S{2,}/iu.test(value); +} + function looksLikeTargetUncertainty(value: string): boolean { return /(?:不确定(?:具体)?(?:是)?哪(?:一)?个|不知道(?:应该)?(?:选|继续|处理)哪(?:一)?个|可能是多个|哪个都可能|\b(?:i(?:'m| am)\s+)?not\s+sure\s+(?:which|where)|\b(?:i\s+)?(?:do\s+not|don't)\s+know\s+(?:which|where)|\b(?:could|might|may)\s+(?:be|belong\s+to)\s+(?:more\s+than\s+one|multiple)|\bwhich\s+(?:one|session|work|task)\b)/iu.test( value, diff --git a/apps/desktop/src/renderer/workhub-surface.tsx b/apps/desktop/src/renderer/workhub-surface.tsx index de24b0a3f1..2aa4ae7937 100644 --- a/apps/desktop/src/renderer/workhub-surface.tsx +++ b/apps/desktop/src/renderer/workhub-surface.tsx @@ -18,7 +18,12 @@ */ import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'; -import { ChatMessage, ChatMessageBubble, ChatMessageList } from '@astryxdesign/core'; +import { + ChatMessage, + ChatMessageBubble, + ChatMessageList, + Skeleton, +} from '@astryxdesign/core'; import { Button } from '@astryxdesign/core/Button'; import type { UiLocale } from '@maka/core/ui-locale'; import { ChatSurfaceLayout, Composer } from '@maka/ui'; @@ -147,38 +152,45 @@ export function projectedWorkHubTurnPresentation( export function WorkHubSurface(props: { controller: WorkHubController; locale: UiLocale; + initialFocusSessionId?: string; onOpenSession(sessionId: string): void; }) { const copy = workHubCopy(props.locale); const [projection, setProjection] = useState({ sessions: [], turns: [] }); const [turns, setTurns] = useState([]); const [pending, setPending] = useState(false); + const [initialLoadSettled, setInitialLoadSettled] = useState(false); // React state paints the lock; the gate closes the same-frame window before // a rerender can disable Composer and clarification controls. const routeGate = useRef(new WorkHubSurfaceRouteGate()).current; const refreshGate = useRef(new WorkHubProjectionRefreshGate()).current; const [loadError, setLoadError] = useState(false); - const refresh = useCallback(async () => { + const refresh = useCallback(async (focusSessionId?: string) => { const isLatest = refreshGate.begin(); try { - const next = await props.controller.read(); + const next = await props.controller.read(focusSessionId + ? { focus: { sessionId: focusSessionId } } + : undefined); if (!isLatest()) return; setProjection(next); setLoadError(false); + setInitialLoadSettled(true); } catch { if (!isLatest()) return; setLoadError(true); + setInitialLoadSettled(true); } }, [props.controller, refreshGate]); useEffect(() => { - void refresh(); + void refresh(props.initialFocusSessionId); const unsubscribe = props.controller.subscribe(() => void refresh()); return () => { refreshGate.invalidate(); unsubscribe(); + props.controller.resetVisitContext(); }; - }, [props.controller, refresh, refreshGate]); + }, [props.controller, props.initialFocusSessionId, refresh, refreshGate]); const route = useCallback(async ( input: WorkHubSubmitInput, @@ -217,14 +229,14 @@ export function WorkHubSurface(props: { const send = useCallback(async (value: string) => { const text = value.trim(); - if (!text || routeGate.pending) return false; + if (!text || !initialLoadSettled || routeGate.pending) return false; const requestId = crypto.randomUUID(); setTurns((current) => [...current, { requestId, text, state: 'routing' }]); const result = await route({ requestId, text }); // Composer clears only accepted drafts. Waiting, delivery failures, and a // ref-blocked duplicate keep the exact text available for retry. return workHubSubmissionClearsDraft(result); - }, [route, routeGate]); + }, [initialLoadSettled, route, routeGate]); const projectedTurns = visibleWorkHubProjectedTurns(projection.turns, turns); const conversationEmpty = projectedTurns.length === 0 && turns.length === 0; @@ -238,7 +250,7 @@ export function WorkHubSurface(props: { draftKey="workhub" onSend={send} onStop={() => {}} - sendBlocked={pending} + sendBlocked={pending || !initialLoadSettled} modelLabel="WorkHub" /> )} @@ -249,7 +261,9 @@ export function WorkHubSurface(props: {

WorkHub

{copy.subtitle}

- {copy.workCount(projection.sessions.length)} + {initialLoadSettled + ? copy.workCount(projection.sessions.length) + : copy.loading}
@@ -259,7 +273,9 @@ export function WorkHubSurface(props: { gap={4} isStreaming={pending} > - {loadError ? ( + {!initialLoadSettled ? ( + + ) : loadError ? (
{copy.loadFailed}
) : conversationEmpty ? (
@@ -288,6 +304,9 @@ export function WorkHubSurface(props: { requestId: turn.requestId, text: turn.text, explicitTarget: target, + ...(turn.outcome?.kind === 'clarification' && turn.outcome.correction + ? { correction: turn.outcome.correction } + : {}), })} onCorrect={(from, target) => void route({ requestId: turn.requestId, @@ -311,6 +330,27 @@ export function WorkHubSurface(props: { ); } +function WorkHubLoadingState(props: { label: string }) { + return ( +
+ {[0, 1].map((index) => ( + + ))} +
+ ); +} + function ProjectedWorkHubTurnView(props: { turn: WorkHubProjectedTurn; projection: WorkHubProjection; @@ -534,6 +574,7 @@ function workHubCopy(locale: UiLocale) { waitingForDecision: '这项工作正在等待你的决定。', requestNotSent: '新请求尚未发送;处理原 Session 中的交互后可以再次发送。', routing: '正在判断应该交给哪个 Session…', loadFailed: '无法读取已有工作。', + loading: '正在读取已有工作…', submitFailed: '输入未能送达,请重试。', scrollToBottom: '滚动到底部', archived: '已归档', states: { active: '活跃', running: '进行中', waiting_for_user: '等待你', blocked: '受阻', aborted: '已中止' }, turnStates: { running: '进行中', completed: '已完成', aborted: '已中止', failed: '失败' }, @@ -558,6 +599,7 @@ function workHubCopy(locale: UiLocale) { waitingForDecision: 'This work is waiting for your decision.', requestNotSent: 'The new request was not sent. Resolve the interaction in its Session, then send again.', routing: 'Choosing the right Session…', loadFailed: 'Could not read existing work.', + loading: 'Loading existing work…', submitFailed: 'The input could not be delivered. Try again.', scrollToBottom: 'Scroll to bottom', archived: 'Archived', states: { active: 'Active', running: 'Running', waiting_for_user: 'Waiting for you', blocked: 'Blocked', aborted: 'Aborted' }, turnStates: { running: 'Running', completed: 'Completed', aborted: 'Aborted', failed: 'Failed' }, diff --git a/docs/workhub-domain-language.md b/docs/workhub-domain-language.md index 3d0231fd80..e9d414ff6e 100644 --- a/docs/workhub-domain-language.md +++ b/docs/workhub-domain-language.md @@ -27,10 +27,10 @@ WorkHub gives users one conversational place to continue, create, and inspect wo **Work**: The user-facing continuity of exactly one ordinary Session. “Work” is a product-language view of a Session, not a second stored record. -**WorkHub**: A projection and routing surface over ordinary Sessions. It may keep transient inference context while mounted, but it does not own a transcript or execution state. +**WorkHub**: A projection and routing surface over ordinary Sessions. It may keep bounded, in-memory routing context for the current app runtime, but it does not own a transcript or execution state. Visit-local focus is discarded when the surface unmounts and rebuilt from Sessions when it returns. **Session projection**: A rebuildable view derived from Session facts for display and routing. It can be discarded and recreated without losing work. -**Route correction**: A user's decision that an input belongs to a different existing Session. It may influence later transient routing, but it does not become an authority for Session content or state. +**Route correction**: A user's decision that an input belongs to a different existing Session. It may influence later routing in the current app runtime, but it is never persisted and does not become an authority for Session content or state. _Avoid_: independent Work records, copied transcripts, or a second writable WorkHub state store. From 849c9de03d8d03a20bb240d016690d3d223e76d1 Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Mon, 24 Aug 2026 22:46:07 +0800 Subject: [PATCH 2/8] fix(desktop): preserve WorkHub correction order Generated-by: Codex --- .../main/__tests__/workhub-controller.test.ts | 50 ++++++++++++++++++ .../src/renderer/workhub-controller.ts | 8 ++- .../src/renderer/workhub-route-policy.ts | 11 ++-- docs/workhub-domain-language.md | 51 ++++++++++++++++--- 4 files changed, 110 insertions(+), 10 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index a6e91eabf8..d958d8d07f 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -1367,6 +1367,56 @@ test('latest route correction wins for the same expression family', async () => assert.equal(result.kind === 'submitted' ? result.evidence : undefined, 'route_correction'); }); +test('user correction order wins when overlapping submissions finish out of order', async () => { + const sessions = port([ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]); + let signalOlderStarted!: () => void; + const olderStarted = new Promise((resolve) => { + signalOlderStarted = resolve; + }); + let finishOlder!: (value: { turnId: string }) => void; + const olderTurn = new Promise<{ turnId: string }>((resolve) => { + finishOlder = resolve; + }); + sessions.submit = async (target) => { + if (target.sessionId === 'login') { + signalOlderStarted(); + return olderTurn; + } + return { turnId: 'turn-payment' }; + }; + const controller = createWorkHubController({ sessions }); + + const olderCorrection = controller.submit({ + requestId: 'correction-older-login', + text: '继续白鹭点,列出验收项。', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + await olderStarted; + controller.resetVisitContext(); + await controller.submit({ + requestId: 'correction-newer-payment', + text: '继续白鹭点,列出异常项。', + explicitTarget: { sessionId: 'payment' }, + correction: { from: { sessionId: 'login' } }, + }); + finishOlder({ turnId: 'turn-login' }); + await olderCorrection; + + const result = await controller.submit({ + requestId: 'correction-after-overlap', + text: '继续白鹭点,补充回滚条件。', + }); + + assert.deepEqual(result.kind === 'submitted' ? result.target : undefined, { + sessionId: 'payment', + }); + assert.equal(result.kind === 'submitted' ? result.evidence : undefined, 'route_correction'); +}); + test('waiting Session rejects a second root request without calling submit', async () => { let submitted = false; const sessions = port([ diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index 5ac1eb3221..85913304c7 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -243,6 +243,10 @@ export function createWorkHubController(deps: { }, async submit(input) { const submissionPolicy = routePolicy; + // Reserve the order synchronously, before any await. Corrections are + // learned only after successful delivery, but their precedence follows + // user submission order rather than network completion order. + const submissionOrder = submissionPolicy.reserveSubmissionOrder(); const sessions = await deps.sessions.list(); reconcileFocus(submissionPolicy, sessions); const ordinary = sessions.filter((session) => session.kind === 'ordinary'); @@ -325,7 +329,9 @@ export function createWorkHubController(deps: { const turn = await deps.sessions.submit(target, input.text); rememberOwnedRoot(target, turn); submissionPolicy.rememberTarget(target); - if (correction) submissionPolicy.rememberCorrection(input.text, target); + if (correction) { + submissionPolicy.rememberCorrection(input.text, target, submissionOrder); + } return { kind: 'submitted', strategyId: WORKHUB_ROUTING_STRATEGY_ID, diff --git a/apps/desktop/src/renderer/workhub-route-policy.ts b/apps/desktop/src/renderer/workhub-route-policy.ts index 8b7a8bb8e9..7edb39b5ad 100644 --- a/apps/desktop/src/renderer/workhub-route-policy.ts +++ b/apps/desktop/src/renderer/workhub-route-policy.ts @@ -54,7 +54,8 @@ export interface WorkHubRoutePolicy { initializeFocus(targets: readonly WorkHubSessionTarget[]): void; newVisit(): WorkHubRoutePolicy; rememberTarget(target: WorkHubSessionTarget): void; - rememberCorrection(text: string, target: WorkHubSessionTarget): void; + reserveSubmissionOrder(): number; + rememberCorrection(text: string, target: WorkHubSessionTarget, order: number): void; } export function workHubNewSessionName(text: string): string { @@ -286,9 +287,13 @@ function createWorkHubRoutePolicyVisit( previousFocus = currentFocus; currentFocus = target; }, - rememberCorrection(text, target) { + reserveSubmissionOrder() { correctionMemory.sequence += 1; - corrections.unshift({ text, target, sequence: correctionMemory.sequence }); + return correctionMemory.sequence; + }, + rememberCorrection(text, target, order) { + corrections.push({ text, target, sequence: order }); + corrections.sort((left, right) => right.sequence - left.sequence); corrections.splice(MAX_ROUTE_CORRECTIONS); }, }; diff --git a/docs/workhub-domain-language.md b/docs/workhub-domain-language.md index e9d414ff6e..ef1467b476 100644 --- a/docs/workhub-domain-language.md +++ b/docs/workhub-domain-language.md @@ -19,18 +19,57 @@ # WorkHub domain language -WorkHub gives users one conversational place to continue, create, and inspect work while ordinary Sessions remain the product's canonical work records. +WorkHub gives users one persistent conversational place to ask, clarify, continue, +create, and inspect work. It is backed by one stable Coordination Session per +Runtime Host while concrete execution remains authoritative in ordinary Sessions. + +This document names the approved target architecture. The current R2.4 +implementation is a transitional deterministic router and does not yet create the +Coordination Session described below. ## Terms -**Session**: The authoritative record for identity, transcript, execution state, permissions, interactions, and recovery. A Session ID is the stable identity of the work. +**Session**: The existing transcript, execution-boundary, permission, interaction, +and recovery substrate. A Session owns only the conversation or execution admitted +to that Session. + +**Coordination Session**: A special Session role used by WorkHub. Each Runtime Host +has at most one stable Coordination Session. It owns WorkHub user messages, ordinary +Q&A, clarification, coordination decisions, delegation references, and coordination +summaries. It is hidden from the ordinary Session list and never routes to itself. -**Work**: The user-facing continuity of exactly one ordinary Session. “Work” is a product-language view of a Session, not a second stored record. +**Ordinary Session**: A Session that owns concrete work execution, including its +project/filesystem scope, model and permissions, root-Turn admission, tools, +artifacts, recovery, lifecycle, and authoritative execution transcript. -**WorkHub**: A projection and routing surface over ordinary Sessions. It may keep bounded, in-memory routing context for the current app runtime, but it does not own a transcript or execution state. Visit-local focus is discarded when the surface unmounts and rebuilt from Sessions when it returns. +**Work**: User-facing continuity around a goal. Whether Work is 1:1 with Session, +1:N over Sessions, or an independent durable entity is deliberately unresolved. + +**WorkHub**: The unified conversational entry and coordination surface backed by +the active Runtime Host's Coordination Session. It may answer locally, clarify, +delegate to an existing ordinary Session, or create a new ordinary Session. **Session projection**: A rebuildable view derived from Session facts for display and routing. It can be discarded and recreated without losing work. -**Route correction**: A user's decision that an input belongs to a different existing Session. It may influence later routing in the current app runtime, but it is never persisted and does not become an authority for Session content or state. +**Disposition**: The coordination outcome for one WorkHub input: +`answer_here`, `delegate_existing`, `create_new`, or `clarify`. + +**Delegation**: A reference from a Coordination Turn to a target ordinary Session +and Turn. Delegation links the two authoritative transcripts; it does not copy the +target execution transcript into WorkHub. + +**Action Gate**: The deterministic Runtime boundary that validates a proposed +disposition, target, creation, Stop, confirmation, tools, and permissions. A model +or routing policy may propose an action but cannot authorize it. + +**Route correction**: A user's decision that an input belongs to a different +existing Session. R2.4 retains only bounded inference memory for later target +resolution. Correction precedence follows user submission order, not asynchronous +completion order, and it never replaces either Session's transcript authority. + +**R2.4**: The deterministic context-continuity routing baseline. It remains useful +as an experiment baseline or target resolver behind WorkHub's coordination layer; +it is not the final architecture or authority boundary of WorkHub. -_Avoid_: independent Work records, copied transcripts, or a second writable WorkHub state store. +_Avoid_: copied execution transcripts, self-routing, a second Session/WorkHub +storage substrate, or treating model/routing output as execution authority. From 74ace989cf5ca515a50121fb2e17acd3f516a062 Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Mon, 24 Aug 2026 23:27:50 +0800 Subject: [PATCH 3/8] fix(desktop): preserve WorkHub root ownership Generated-by: Codex --- .../main/__tests__/workhub-controller.test.ts | 113 +++++++++++++++++- .../src/renderer/workhub-controller.ts | 64 +++++++--- 2 files changed, 157 insertions(+), 20 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index d958d8d07f..8de24cf139 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -1168,7 +1168,7 @@ test('steering the same WorkHub-owned root preserves ownership for a later corre paymentSubmissions += 1; return paymentSubmissions === 1 ? { turnId: 'turn-payment-root' } - : { turnId: 'turn-payment-root', steered: true }; + : { turnId: 'turn-payment-steering-command', steered: true }; } return { turnId: 'turn-login-' + submitted.length }; }; @@ -1203,6 +1203,117 @@ test('steering the same WorkHub-owned root preserves ownership for a later corre assert.deepEqual(stopped, [['payment', 'turn-payment-root']]); }); +test('a late root completion cannot overwrite newer ownership after remount', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let signalOlderStarted!: () => void; + const olderStarted = new Promise((resolve) => { + signalOlderStarted = resolve; + }); + let finishOlder!: (value: { turnId: string }) => void; + const olderTurn = new Promise<{ turnId: string }>((resolve) => { + finishOlder = resolve; + }); + let paymentSubmissions = 0; + sessions.submit = async (target) => { + if (target.sessionId === 'payment') { + paymentSubmissions += 1; + if (paymentSubmissions === 1) { + signalOlderStarted(); + return olderTurn; + } + return { turnId: 'turn-payment-new' }; + } + return { turnId: 'turn-login' }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + const olderSubmission = controller.submit({ + requestId: 'request-payment-old', + text: '先继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + await olderStarted; + controller.resetVisitContext(); + await controller.submit({ + requestId: 'request-payment-new', + text: '重新继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + finishOlder({ turnId: 'turn-payment-old' }); + await olderSubmission; + + const corrected = await controller.submit({ + requestId: 'request-correct-after-late-root', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(stopped, [['payment', 'turn-payment-new']]); +}); + +test('a stopped ownership tombstone blocks an older root completion', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let signalStaleStarted!: () => void; + const staleStarted = new Promise((resolve) => { + signalStaleStarted = resolve; + }); + let finishStale!: (value: { turnId: string }) => void; + const staleTurn = new Promise<{ turnId: string }>((resolve) => { + finishStale = resolve; + }); + let paymentSubmissions = 0; + sessions.submit = async (target) => { + if (target.sessionId !== 'payment') return { turnId: 'turn-login' }; + paymentSubmissions += 1; + if (paymentSubmissions === 1) return { turnId: 'turn-payment-root' }; + signalStaleStarted(); + return staleTurn; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + await controller.submit({ + requestId: 'request-payment-owned', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + const staleSubmission = controller.submit({ + requestId: 'request-payment-stale', + text: '再继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + await staleStarted; + + await controller.submit({ + requestId: 'request-stop-before-stale-finishes', + text: '不是这个工作,换成登录稳定性', + }); + finishStale({ turnId: 'turn-payment-stale' }); + await staleSubmission; + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + await controller.submit({ + requestId: 'request-correct-after-stale-finishes', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(stopped, [['payment', 'turn-payment-root']]); +}); + test('WorkHub-owned root remains stoppable after navigating away and back', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index 85913304c7..0d42fe1d14 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -164,7 +164,12 @@ export interface WorkHubController { resetVisitContext(): void; } -const MAX_OWNED_ROOTS = 32; +const MAX_OWNERSHIP_RECORDS = 32; + +interface WorkHubRootOwnership { + order: number; + turnId?: string; +} export function createWorkHubController(deps: { sessions: WorkHubSessionPort; @@ -172,7 +177,7 @@ export function createWorkHubController(deps: { let routePolicy = createWorkHubRoutePolicy(); let focusReadVersion = 0; let pendingFocusReadVersion: number | undefined; - const ownedRootBySessionId = new Map(); + const rootOwnershipBySessionId = new Map(); const reconcileFocus = ( policy: ReturnType, sessions: readonly WorkHubSessionFacts[], @@ -183,30 +188,53 @@ export function createWorkHubController(deps: { .map((session) => session.target)); }; const correctionFor = (from: WorkHubSessionTarget): WorkHubCorrectionContext => { - const turnId = ownedRootBySessionId.get(from.sessionId); + const turnId = rootOwnershipBySessionId.get(from.sessionId)?.turnId; if (!turnId) return { from }; return { from, turnId, }; }; - const rememberOwnedRoot = ( + const storeOwnership = ( target: WorkHubSessionTarget, - turn: { turnId: string; steered?: true }, + ownership: WorkHubRootOwnership, ) => { - const existing = ownedRootBySessionId.get(target.sessionId); - if (turn.steered) { - if (existing !== turn.turnId) ownedRootBySessionId.delete(target.sessionId); - return; - } - ownedRootBySessionId.delete(target.sessionId); - ownedRootBySessionId.set(target.sessionId, turn.turnId); - while (ownedRootBySessionId.size > MAX_OWNED_ROOTS) { - const oldest = ownedRootBySessionId.keys().next().value; + rootOwnershipBySessionId.delete(target.sessionId); + rootOwnershipBySessionId.set(target.sessionId, ownership); + while (rootOwnershipBySessionId.size > MAX_OWNERSHIP_RECORDS) { + const oldest = rootOwnershipBySessionId.keys().next().value; if (!oldest) break; - ownedRootBySessionId.delete(oldest); + rootOwnershipBySessionId.delete(oldest); } }; + const rememberOwnedRoot = ( + target: WorkHubSessionTarget, + turn: { turnId: string; steered?: true }, + order: number, + ) => { + // A steered command created no root and its command ID is not the running + // root ID. Preserve known ownership; if the root admission itself is still + // resolving, its older non-steered result may still publish that root ID. + if (turn.steered) return; + const existing = rootOwnershipBySessionId.get(target.sessionId); + if (existing && existing.order > order) return; + storeOwnership(target, { order, turnId: turn.turnId }); + }; + const forgetOwnedRoot = ( + target: WorkHubSessionTarget, + expectedTurnId: string, + order: number, + ) => { + const existing = rootOwnershipBySessionId.get(target.sessionId); + if ( + !existing?.turnId || + existing.turnId !== expectedTurnId || + existing.order > order + ) return; + // Retain a bounded tombstone so an older in-flight root result cannot + // resurrect ownership after this correction stopped it. + storeOwnership(target, { order }); + }; return { subscribe(handler) { return deps.sessions.subscribe(handler); @@ -322,12 +350,10 @@ export function createWorkHubController(deps: { } if (correction?.turnId && !correction.steered) { await deps.sessions.stop(correction.from, correction.turnId); - if (ownedRootBySessionId.get(correction.from.sessionId) === correction.turnId) { - ownedRootBySessionId.delete(correction.from.sessionId); - } + forgetOwnedRoot(correction.from, correction.turnId, submissionOrder); } const turn = await deps.sessions.submit(target, input.text); - rememberOwnedRoot(target, turn); + rememberOwnedRoot(target, turn, submissionOrder); submissionPolicy.rememberTarget(target); if (correction) { submissionPolicy.rememberCorrection(input.text, target, submissionOrder); From 98df660688ba55f2f97bb9a4dc7fa66639f7105e Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Tue, 25 Aug 2026 00:02:17 +0800 Subject: [PATCH 4/8] fix(desktop): coordinate pending WorkHub ownership Generated-by: Codex --- .../main/__tests__/workhub-controller.test.ts | 178 ++++++++++++++- .../__tests__/workhub-session-port.test.ts | 9 +- .../src/renderer/workhub-controller.ts | 203 +++++++++++++++--- .../src/renderer/workhub-session-port.ts | 6 +- 4 files changed, 357 insertions(+), 39 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index 8de24cf139..561e3ec398 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -47,6 +47,7 @@ function session( } function port(sessions: WorkHubSessionFacts[]): WorkHubSessionPort { + let nextTurnId = 0; return { list: async () => sessions, recentTurns: async () => [], @@ -54,6 +55,7 @@ function port(sessions: WorkHubSessionFacts[]): WorkHubSessionPort { create: async () => { throw new Error('create is not used by this read test'); }, + reserveTurnId: () => `reserved-turn-${++nextTurnId}`, submit: async () => { throw new Error('submit is not used by this read test'); }, @@ -1260,6 +1262,61 @@ test('a late root completion cannot overwrite newer ownership after remount', as assert.deepEqual(stopped, [['payment', 'turn-payment-new']]); }); +test('a correction after remount stops a root whose admission is still pending', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let signalPaymentStarted!: () => void; + const paymentStarted = new Promise((resolve) => { + signalPaymentStarted = resolve; + }); + let finishPayment!: (value: { turnId: string }) => void; + const paymentTurn = new Promise<{ turnId: string }>((resolve) => { + finishPayment = resolve; + }); + let nextReservedTurnId = 0; + sessions.reserveTurnId = () => `turn-reserved-${++nextReservedTurnId}`; + sessions.submit = async (target, _text, turnId) => { + if (target.sessionId === 'payment') { + assert.equal(turnId, 'turn-reserved-1'); + signalPaymentStarted(); + return paymentTurn; + } + return { turnId }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + const pendingSubmission = controller.submit({ + requestId: 'request-payment-pending', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + await paymentStarted; + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + + const corrected = await controller.submit({ + requestId: 'request-correct-pending-root', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(corrected.kind === 'submitted' ? corrected.target : undefined, { + sessionId: 'login', + }); + assert.deepEqual(stopped, [['payment', 'turn-reserved-1']]); + finishPayment({ turnId: 'turn-payment-host-rebound' }); + await pendingSubmission; + assert.deepEqual(stopped, [ + ['payment', 'turn-reserved-1'], + ['payment', 'turn-payment-host-rebound'], + ]); +}); + test('a stopped ownership tombstone blocks an older root completion', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ @@ -1311,7 +1368,126 @@ test('a stopped ownership tombstone blocks an older root completion', async () = text: '不是这个工作,换成登录稳定性', }); - assert.deepEqual(stopped, [['payment', 'turn-payment-root']]); + assert.deepEqual(stopped, [ + ['payment', 'turn-payment-root'], + ['payment', 'reserved-turn-2'], + ['payment', 'turn-payment-stale'], + ]); +}); + +test('tombstone retention never evicts live ownership for another Session', async () => { + const stopped: Array<[string, string]> = []; + const fillers = Array.from({ length: 32 }, (_, index) => + session(`filler-${index}`, { sessionName: `填充工作 ${index}` })); + const sessions = port([ + session('long-running', { sessionName: '长期工作', updatedAt: 100 }), + session('sink', { sessionName: '收件箱工作', updatedAt: 90 }), + ...fillers, + ]); + sessions.submit = async (target, _text, turnId) => target.sessionId === 'sink' + ? { turnId, steered: true } + : { turnId }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + const live = await controller.submit({ + requestId: 'request-live-root', + text: '开始长期工作', + explicitTarget: { sessionId: 'long-running' }, + }); + assert.equal(live.kind, 'submitted'); + + for (const [index, filler] of fillers.entries()) { + const owned = await controller.submit({ + requestId: `request-filler-${index}`, + text: `开始填充工作 ${index}`, + explicitTarget: filler.target, + }); + assert.equal(owned.kind, 'submitted'); + if (owned.kind !== 'submitted') continue; + await controller.submit({ + requestId: `request-stop-filler-${index}`, + text: `填充工作 ${index} 路由错了`, + explicitTarget: { sessionId: 'sink' }, + correction: { + from: filler.target, + turnId: owned.turnId, + }, + }); + } + + stopped.length = 0; + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'long-running' } }); + await controller.submit({ + requestId: 'request-correct-live-root', + text: '不是这个工作,换成收件箱工作', + }); + + assert.equal(stopped.length, 1); + assert.equal(stopped[0]?.[0], 'long-running'); + assert.equal(stopped[0]?.[1], live.kind === 'submitted' ? live.turnId : undefined); +}); + +test('correction cleanup preserves ownership submitted while stop is pending', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let signalStopStarted!: () => void; + const stopStarted = new Promise((resolve) => { + signalStopStarted = resolve; + }); + let finishFirstStop!: () => void; + const firstStop = new Promise((resolve) => { + finishFirstStop = resolve; + }); + let stopCalls = 0; + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + stopCalls += 1; + if (stopCalls === 1) { + signalStopStarted(); + await firstStop; + } + }; + const controller = createWorkHubController({ sessions }); + const original = await controller.submit({ + requestId: 'request-original-payment', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + assert.equal(original.kind, 'submitted'); + + const correction = controller.submit({ + requestId: 'request-correct-original-payment', + text: '不是这个工作,换成登录稳定性', + }); + await stopStarted; + const newer = await controller.submit({ + requestId: 'request-newer-payment', + text: '重新处理支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + assert.equal(newer.kind, 'submitted'); + finishFirstStop(); + await correction; + + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + await controller.submit({ + requestId: 'request-correct-newer-payment', + text: '不是这个工作,换成登录稳定性', + }); + + assert.deepEqual(stopped, [ + ['payment', original.kind === 'submitted' ? original.turnId : ''], + ['payment', newer.kind === 'submitted' ? newer.turnId : ''], + ]); }); test('WorkHub-owned root remains stoppable after navigating away and back', async () => { diff --git a/apps/desktop/src/main/__tests__/workhub-session-port.test.ts b/apps/desktop/src/main/__tests__/workhub-session-port.test.ts index e96bebb817..937b5d7479 100644 --- a/apps/desktop/src/main/__tests__/workhub-session-port.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-session-port.test.ts @@ -375,7 +375,8 @@ test('desktop adapter delegates create, send, and invalidation to Session APIs', }); const created = await adapter.create({ name: '实现导出发票 PDF 功能' }); - const turn = await adapter.submit(created.target, '实现导出发票 PDF 功能'); + const turnId = adapter.reserveTurnId(); + const turn = await adapter.submit(created.target, '实现导出发票 PDF 功能', turnId); await adapter.stop(created.target, 'turn-new'); let invalidations = 0; const unsubscribe = adapter.subscribe(() => { @@ -417,7 +418,11 @@ test('desktop adapter preserves when Session delivery steered an existing root T }); assert.deepEqual( - await adapter.submit({ sessionId: 'busy' }, '补充已有执行流'), + await adapter.submit( + { sessionId: 'busy' }, + '补充已有执行流', + adapter.reserveTurnId(), + ), { turnId: 'turn-steered', steered: true }, ); }); diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index 0d42fe1d14..e4a02f8729 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -149,9 +149,11 @@ export interface WorkHubSessionPort { targets: readonly WorkHubSessionTarget[], ): Promise>; create(input: { name: string }): Promise; + reserveTurnId(): string; submit( target: WorkHubSessionTarget, text: string, + turnId: string, ): Promise<{ turnId: string; steered?: true }>; stop(target: WorkHubSessionTarget, expectedTurnId: string): Promise; subscribe(handler: () => void): () => void; @@ -165,10 +167,21 @@ export interface WorkHubController { } const MAX_OWNERSHIP_RECORDS = 32; +const MAX_STOPPED_TURN_IDS_PER_TOMBSTONE = 32; interface WorkHubRootOwnership { order: number; - turnId?: string; + turnId: string; +} + +interface WorkHubSessionOwnership { + confirmed?: WorkHubRootOwnership; + pending: WorkHubRootOwnership[]; +} + +interface WorkHubOwnershipTombstone { + order: number; + stoppedTurnIds: Set; } export function createWorkHubController(deps: { @@ -177,7 +190,8 @@ export function createWorkHubController(deps: { let routePolicy = createWorkHubRoutePolicy(); let focusReadVersion = 0; let pendingFocusReadVersion: number | undefined; - const rootOwnershipBySessionId = new Map(); + const liveOwnershipBySessionId = new Map(); + const ownershipTombstoneBySessionId = new Map(); const reconcileFocus = ( policy: ReturnType, sessions: readonly WorkHubSessionFacts[], @@ -188,52 +202,166 @@ export function createWorkHubController(deps: { .map((session) => session.target)); }; const correctionFor = (from: WorkHubSessionTarget): WorkHubCorrectionContext => { - const turnId = rootOwnershipBySessionId.get(from.sessionId)?.turnId; + const ownership = liveOwnershipBySessionId.get(from.sessionId); + const turnId = ownership?.confirmed?.turnId ?? ownership?.pending[0]?.turnId; if (!turnId) return { from }; return { from, turnId, }; }; - const storeOwnership = ( + const storeLiveOwnership = ( target: WorkHubSessionTarget, - ownership: WorkHubRootOwnership, + ownership: WorkHubSessionOwnership, ) => { - rootOwnershipBySessionId.delete(target.sessionId); - rootOwnershipBySessionId.set(target.sessionId, ownership); - while (rootOwnershipBySessionId.size > MAX_OWNERSHIP_RECORDS) { - const oldest = rootOwnershipBySessionId.keys().next().value; + liveOwnershipBySessionId.delete(target.sessionId); + liveOwnershipBySessionId.set(target.sessionId, ownership); + while (liveOwnershipBySessionId.size > MAX_OWNERSHIP_RECORDS) { + const oldest = liveOwnershipBySessionId.keys().next().value; if (!oldest) break; - rootOwnershipBySessionId.delete(oldest); + liveOwnershipBySessionId.delete(oldest); } }; - const rememberOwnedRoot = ( - target: WorkHubSessionTarget, - turn: { turnId: string; steered?: true }, + const storeOwnershipTombstone = ( + sessionId: string, order: number, + stoppedTurnIds: Iterable = [], ) => { - // A steered command created no root and its command ID is not the running - // root ID. Preserve known ownership; if the root admission itself is still - // resolving, its older non-steered result may still publish that root ID. - if (turn.steered) return; - const existing = rootOwnershipBySessionId.get(target.sessionId); + const existing = ownershipTombstoneBySessionId.get(sessionId); if (existing && existing.order > order) return; - storeOwnership(target, { order, turnId: turn.turnId }); + const stopped = new Set(existing?.order === order ? existing.stoppedTurnIds : []); + for (const turnId of stoppedTurnIds) stopped.add(turnId); + while (stopped.size > MAX_STOPPED_TURN_IDS_PER_TOMBSTONE) { + const oldest = stopped.values().next().value; + if (!oldest) break; + stopped.delete(oldest); + } + ownershipTombstoneBySessionId.delete(sessionId); + ownershipTombstoneBySessionId.set(sessionId, { + order, + stoppedTurnIds: stopped, + }); + while (ownershipTombstoneBySessionId.size > MAX_OWNERSHIP_RECORDS) { + const oldest = ownershipTombstoneBySessionId.keys().next().value; + if (!oldest) break; + ownershipTombstoneBySessionId.delete(oldest); + } + }; + const reserveOwnedRoot = ( + target: WorkHubSessionTarget, + turnId: string, + order: number, + ) => { + const existing = liveOwnershipBySessionId.get(target.sessionId); + storeLiveOwnership(target, { + ...(existing?.confirmed ? { confirmed: existing.confirmed } : {}), + pending: [...(existing?.pending ?? []), { order, turnId }] + .sort((left, right) => left.order - right.order), + }); }; - const forgetOwnedRoot = ( + const settleOwnedRoot = async ( target: WorkHubSessionTarget, - expectedTurnId: string, + reservedTurnId: string, + turn: { turnId: string; steered?: true }, order: number, ) => { - const existing = rootOwnershipBySessionId.get(target.sessionId); + let tombstone = ownershipTombstoneBySessionId.get(target.sessionId); + if ( + !turn.steered && + tombstone && + tombstone.order >= order && + !tombstone.stoppedTurnIds.has(turn.turnId) + ) { + await deps.sessions.stop(target, turn.turnId); + storeOwnershipTombstone(target.sessionId, tombstone.order, [turn.turnId]); + } + const existing = liveOwnershipBySessionId.get(target.sessionId); + tombstone = ownershipTombstoneBySessionId.get(target.sessionId); + if (!existing) return; + const pending = existing.pending.filter((candidate) => + (candidate.order !== order || candidate.turnId !== reservedTurnId) && + (!tombstone || candidate.order > tombstone.order)); + let confirmed = existing.confirmed && + (!tombstone || existing.confirmed.order > tombstone.order) + ? existing.confirmed + : undefined; if ( - !existing?.turnId || - existing.turnId !== expectedTurnId || - existing.order > order - ) return; - // Retain a bounded tombstone so an older in-flight root result cannot - // resurrect ownership after this correction stopped it. - storeOwnership(target, { order }); + !turn.steered && + (!tombstone || tombstone.order < order) && + (!confirmed || confirmed.order <= order) + ) { + confirmed = { order, turnId: turn.turnId }; + ownershipTombstoneBySessionId.delete(target.sessionId); + } + if (confirmed || pending.length > 0) { + storeLiveOwnership(target, { + ...(confirmed ? { confirmed } : {}), + pending, + }); + } else { + liveOwnershipBySessionId.delete(target.sessionId); + } + }; + const releasePendingRoot = ( + target: WorkHubSessionTarget, + reservedTurnId: string, + order: number, + ) => { + const existing = liveOwnershipBySessionId.get(target.sessionId); + if (!existing) return; + const tombstone = ownershipTombstoneBySessionId.get(target.sessionId); + const pending = existing.pending.filter((candidate) => + (candidate.order !== order || candidate.turnId !== reservedTurnId) && + (!tombstone || candidate.order > tombstone.order)); + const confirmed = existing.confirmed && + (!tombstone || existing.confirmed.order > tombstone.order) + ? existing.confirmed + : undefined; + if (confirmed || pending.length > 0) { + storeLiveOwnership(target, { + ...(confirmed ? { confirmed } : {}), + pending, + }); + } else { + liveOwnershipBySessionId.delete(target.sessionId); + } + }; + const stopOwnedRoots = async ( + correction: WorkHubCorrectionContext, + order: number, + ) => { + if (correction.steered) return; + const ownership = liveOwnershipBySessionId.get(correction.from.sessionId); + const turnIds = new Set(); + if (correction.turnId) turnIds.add(correction.turnId); + if (ownership?.confirmed && ownership.confirmed.order < order) { + turnIds.add(ownership.confirmed.turnId); + } + for (const pending of ownership?.pending ?? []) { + if (pending.order < order) turnIds.add(pending.turnId); + } + if (turnIds.size === 0) return; + // Publish the correction before awaiting Host acknowledgements. A pending + // admission may settle with a Host-rebound Turn ID while these stops are + // in flight; settleOwnedRoot will then stop that returned root as well. + storeOwnershipTombstone(correction.from.sessionId, order, turnIds); + for (const turnId of turnIds) { + await deps.sessions.stop(correction.from, turnId); + } + const current = liveOwnershipBySessionId.get(correction.from.sessionId); + if (!current) return; + const confirmed = current.confirmed && current.confirmed.order >= order + ? current.confirmed + : undefined; + const pending = current.pending.filter((candidate) => candidate.order >= order); + if (confirmed || pending.length > 0) { + storeLiveOwnership(correction.from, { + ...(confirmed ? { confirmed } : {}), + pending, + }); + } else { + liveOwnershipBySessionId.delete(correction.from.sessionId); + } }; return { subscribe(handler) { @@ -348,12 +476,19 @@ export function createWorkHubController(deps: { target, }; } - if (correction?.turnId && !correction.steered) { - await deps.sessions.stop(correction.from, correction.turnId); - forgetOwnedRoot(correction.from, correction.turnId, submissionOrder); + if (correction) { + await stopOwnedRoots(correction, submissionOrder); + } + const reservedTurnId = deps.sessions.reserveTurnId(); + reserveOwnedRoot(target, reservedTurnId, submissionOrder); + let turn: { turnId: string; steered?: true }; + try { + turn = await deps.sessions.submit(target, input.text, reservedTurnId); + } catch (error) { + releasePendingRoot(target, reservedTurnId, submissionOrder); + throw error; } - const turn = await deps.sessions.submit(target, input.text); - rememberOwnedRoot(target, turn, submissionOrder); + await settleOwnedRoot(target, reservedTurnId, turn, submissionOrder); submissionPolicy.rememberTarget(target); if (correction) { submissionPolicy.rememberCorrection(input.text, target, submissionOrder); diff --git a/apps/desktop/src/renderer/workhub-session-port.ts b/apps/desktop/src/renderer/workhub-session-port.ts index 47234d0b37..ea61d9912c 100644 --- a/apps/desktop/src/renderer/workhub-session-port.ts +++ b/apps/desktop/src/renderer/workhub-session-port.ts @@ -157,8 +157,10 @@ export function createDesktopWorkHubSessionPort(deps: { async create({ name }) { return projectSession(await deps.sessions.create({ name })); }, - async submit(target: WorkHubSessionTarget, text: string) { - const turnId = deps.newTurnId(); + reserveTurnId() { + return deps.newTurnId(); + }, + async submit(target: WorkHubSessionTarget, text: string, turnId: string) { const result = await deps.sessions.send(target.sessionId, { type: 'send', turnId, From 41724c9d89010f7d92a6b9bd45bf1469559838be Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Tue, 25 Aug 2026 00:48:35 +0800 Subject: [PATCH 5/8] fix(desktop): harden WorkHub ownership reconciliation Generated-by: Codex --- ...ntime-host-session-catalog-preload.test.ts | 15 +- ...me-host-session-execution-ipc-main.test.ts | 20 +- .../main/__tests__/workhub-controller.test.ts | 506 +++++++++++++++++- .../__tests__/workhub-session-port.test.ts | 172 ++++++ ...runtime-host-session-execution-ipc-main.ts | 4 +- apps/desktop/src/preload/bridge-contract.d.ts | 4 + apps/desktop/src/preload/preload.ts | 23 +- .../preload/runtime-host-session-catalog.ts | 35 +- apps/desktop/src/renderer/app-shell.tsx | 23 +- .../src/renderer/workhub-controller.ts | 423 +++++++++++---- .../src/renderer/workhub-session-port.ts | 85 ++- 11 files changed, 1168 insertions(+), 142 deletions(-) diff --git a/apps/desktop/src/main/__tests__/runtime-host-session-catalog-preload.test.ts b/apps/desktop/src/main/__tests__/runtime-host-session-catalog-preload.test.ts index b90e6bbd86..99441165b4 100644 --- a/apps/desktop/src/main/__tests__/runtime-host-session-catalog-preload.test.ts +++ b/apps/desktop/src/main/__tests__/runtime-host-session-catalog-preload.test.ts @@ -20,7 +20,10 @@ import assert from 'node:assert/strict'; import test from 'node:test'; import type { DesktopSessionSummary } from '../../preload/bridge-contract.js'; -import { collectRuntimeHostSessionCatalogs } from '../../preload/runtime-host-session-catalog.js'; +import { + collectRuntimeHostSessionCatalogs, + collectRuntimeHostSessionCatalogsWithCoverage, +} from '../../preload/runtime-host-session-catalog.js'; function session(id: string, activityAt: number): DesktopSessionSummary { return { id, activityAt } as DesktopSessionSummary; @@ -36,6 +39,16 @@ test('keeps healthy Host catalogs when another Host rejects', async () => { assert.deepEqual(sessions.map(({ id }) => id), ['newer', 'older']); }); +test('reports exactly which Host catalogs are complete', async () => { + const catalog = await collectRuntimeHostSessionCatalogsWithCoverage([ + { hostId: 'local', sessions: Promise.resolve([session('local-session', 1)]) }, + { hostId: 'remote', sessions: Promise.reject(new Error('remote unavailable')) }, + ]); + + assert.deepEqual(catalog.sessions.map(({ id }) => id), ['local-session']); + assert.deepEqual(catalog.completeHostIds, ['local']); +}); + test('fails when every Host catalog rejects', async () => { await assert.rejects( collectRuntimeHostSessionCatalogs([ diff --git a/apps/desktop/src/main/__tests__/runtime-host-session-execution-ipc-main.test.ts b/apps/desktop/src/main/__tests__/runtime-host-session-execution-ipc-main.test.ts index c455ba26f5..fd632618d0 100644 --- a/apps/desktop/src/main/__tests__/runtime-host-session-execution-ipc-main.test.ts +++ b/apps/desktop/src/main/__tests__/runtime-host-session-execution-ipc-main.test.ts @@ -557,7 +557,7 @@ test("queues a mid-turn send as steering when the Host reports the session busy" assert.deepEqual(submits, [ { sessionId: "session-1", - messageId: "id-1", + messageId: "turn-1", content: { text: "also check the tests", inlineReferences: [] }, placement: "current_turn", }, @@ -577,6 +577,7 @@ test("queues a mid-turn send as steering when the Host reports the session busy" test("starts the turn from the queued message when the busy race resolves idle", async () => { const changes: unknown[] = []; + const submits: unknown[] = []; const ipc = ipcHarness(); registerExecutionIpc( { @@ -589,10 +590,13 @@ test("starts the turn from the queued message when the busy race resolves idle", "Session already has an active root Turn", ); }, - submitMessage: async () => ({ - disposition: "turn_started", - turnId: "turn-9", - }), + submitMessage: async (input) => { + submits.push(input); + return { + disposition: "turn_started", + turnId: "turn-9", + }; + }, }), observer: unusedObserver(), attachmentApprovals: createAttachmentApprovalRegistry(), @@ -619,6 +623,12 @@ test("starts the turn from the queued message when the busy race resolves idle", inlineReferences: [], skillInvocation: { loaded: [], failed: [], receipts: [] }, }); + assert.deepEqual(submits, [{ + sessionId: "session-1", + messageId: "turn-1", + content: { text: "also check the tests", inlineReferences: [] }, + placement: "current_turn", + }]); assert.deepEqual(changes, [ { reason: "status-change", sessionId: "session-1", turnId: "turn-9" }, ]); diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index 561e3ec398..b2e3cdc543 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -18,18 +18,38 @@ */ import assert from 'node:assert/strict'; +import { existsSync, readFileSync } from 'node:fs'; import test from 'node:test'; import { createWorkHubController, + WorkHubSessionSubmitError, WORKHUB_ROUTING_STRATEGY_ID, type WorkHubSessionFacts, type WorkHubSessionPort, } from '../../renderer/workhub-controller.js'; +const appShellUrl = [ + new URL('../../renderer/app-shell.tsx', import.meta.url), + new URL('../../../src/renderer/app-shell.tsx', import.meta.url), +].find((candidate) => existsSync(candidate)); + +if (!appShellUrl) throw new Error('Could not locate renderer/app-shell.tsx'); + test('binds the controller to the immutable WH-R2.4 strategy ID', () => { assert.equal(WORKHUB_ROUTING_STRATEGY_ID, 'wh-r2.4-session-context-continuity'); }); +test('binds the WorkHub controller to the app runtime rather than project refreshes', () => { + const source = readFileSync(appShellUrl, 'utf8'); + + assert.match(source, /workHubControllerRef\s*=\s*useRef/u); + assert.match(source, /workHubProjectsRef\.current\s*=\s*projects/u); + assert.doesNotMatch( + source, + /useMemo\(\(\)\s*=>\s*createWorkHubController\([\s\S]*?\),\s*\[projects\]\)/u, + ); +}); + function session( sessionId: string, overrides: Partial = {}, @@ -59,6 +79,7 @@ function port(sessions: WorkHubSessionFacts[]): WorkHubSessionPort { submit: async () => { throw new Error('submit is not used by this read test'); }, + reconcileSubmission: async () => ({ kind: 'unknown' }), stop: async () => {}, subscribe: () => () => {}, }; @@ -1431,7 +1452,7 @@ test('tombstone retention never evicts live ownership for another Session', asyn assert.equal(stopped[0]?.[1], live.kind === 'submitted' ? live.turnId : undefined); }); -test('correction cleanup preserves ownership submitted while stop is pending', async () => { +test('correction barrier rejects a new root while Stop is pending', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ session('login', { sessionName: '登录稳定性', updatedAt: 20 }), @@ -1468,14 +1489,20 @@ test('correction cleanup preserves ownership submitted while stop is pending', a text: '不是这个工作,换成登录稳定性', }); await stopStarted; + await assert.rejects(controller.submit({ + requestId: 'request-overlapping-payment', + text: '重新处理支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }), /still reconciling/u); + finishFirstStop(); + await correction; + const newer = await controller.submit({ requestId: 'request-newer-payment', text: '重新处理支付稳定性', explicitTarget: { sessionId: 'payment' }, }); assert.equal(newer.kind, 'submitted'); - finishFirstStop(); - await correction; controller.resetVisitContext(); await controller.read({ focus: { sessionId: 'payment' } }); @@ -1490,6 +1517,479 @@ test('correction cleanup preserves ownership submitted while stop is pending', a ]); }); +test('a partially failed correction records only successful Stops and keeps failures reachable', async () => { + const stopAttempts: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let finishPending!: (value: { turnId: string }) => void; + const pendingTurn = new Promise<{ turnId: string }>((resolve) => { + finishPending = resolve; + }); + let paymentSubmissions = 0; + sessions.reserveTurnId = (() => { + let next = 0; + return () => `reserved-${++next}`; + })(); + sessions.submit = async (target, _text, turnId) => { + if (target.sessionId !== 'payment') return { turnId }; + paymentSubmissions += 1; + return paymentSubmissions === 1 ? { turnId: 'payment-root' } : pendingTurn; + }; + let failPaymentRoot = true; + sessions.stop = async (target, turnId) => { + stopAttempts.push([target.sessionId, turnId]); + if (turnId === 'payment-root' && failPaymentRoot) { + failPaymentRoot = false; + throw new Error('Host rejected the first Stop'); + } + }; + const controller = createWorkHubController({ sessions }); + const confirmed = await controller.submit({ + requestId: 'confirmed-payment-root', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + assert.equal(confirmed.kind, 'submitted'); + const pending = controller.submit({ + requestId: 'pending-payment-root', + text: '再次处理支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + await Promise.resolve(); + await Promise.resolve(); + + await assert.rejects(controller.submit({ + requestId: 'partially-failed-correction', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { + from: { sessionId: 'payment' }, + turnId: 'payment-root', + }, + }), /Host rejected the first Stop/u); + + assert.equal(stopAttempts.some(([, turnId]) => turnId === 'reserved-2'), true); + finishPending({ turnId: 'payment-host-rebound' }); + await pending; + assert.equal(stopAttempts.some(([, turnId]) => turnId === 'payment-host-rebound'), true); + + await controller.submit({ + requestId: 'retry-failed-correction', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { + from: { sessionId: 'payment' }, + turnId: 'payment-root', + }, + }); + assert.equal( + stopAttempts.filter(([, turnId]) => turnId === 'payment-root').length, + 2, + ); +}); + +test('the 33rd unresolved root is back-pressured before Host admission', async () => { + const facts = Array.from({ length: 33 }, (_, index) => + session(`work-${index}`, { runningTurnIds: [] })); + const sessions = port(facts); + const finishes = new Map void>(); + let admitted = 0; + let signalThirtyTwo!: () => void; + const thirtyTwoAdmitted = new Promise((resolve) => { + signalThirtyTwo = resolve; + }); + sessions.submit = async (target, _text, turnId) => { + admitted += 1; + if (admitted === 32) signalThirtyTwo(); + return await new Promise<{ turnId: string }>((resolve) => { + finishes.set(target.sessionId, resolve); + }); + }; + const controller = createWorkHubController({ sessions }); + const inFlight = facts.slice(0, 32).map((fact, index) => controller.submit({ + requestId: `root-${index}`, + text: `开始工作 ${index}`, + explicitTarget: fact.target, + })); + await thirtyTwoAdmitted; + + await assert.rejects(controller.submit({ + requestId: 'root-33', + text: '开始工作 33', + explicitTarget: facts[32]!.target, + }), /too many unresolved root submissions/u); + assert.equal(admitted, 32); + + finishes.get('work-0')?.({ turnId: 'settled-work-0' }); + await inFlight[0]; + const thirtyThird = controller.submit({ + requestId: 'root-33-after-capacity', + text: '开始工作 33', + explicitTarget: facts[32]!.target, + }); + await Promise.resolve(); + await Promise.resolve(); + assert.equal(admitted, 33); + finishes.get('work-32')?.({ turnId: 'settled-work-32' }); + await thirtyThird; +}); + +test('an old correction barrier survives more than 32 newer corrections', async () => { + const stopped: Array<[string, string]> = []; + const fillers = Array.from({ length: 32 }, (_, index) => + session(`barrier-filler-${index}`, { sessionName: `屏障填充 ${index}` })); + const sessions = port([ + session('old-pending', { sessionName: '旧的待定工作', updatedAt: 100 }), + session('sink', { sessionName: '安全收件箱', updatedAt: 90 }), + ...fillers, + ]); + let finishOld!: (value: { turnId: string }) => void; + const oldTurn = new Promise<{ turnId: string }>((resolve) => { + finishOld = resolve; + }); + sessions.submit = async (target, _text, turnId) => { + if (target.sessionId === 'old-pending') return oldTurn; + if (target.sessionId === 'sink') return { turnId, steered: true }; + return { turnId }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + const oldSubmission = controller.submit({ + requestId: 'old-pending-root', + text: '开始旧的待定工作', + explicitTarget: { sessionId: 'old-pending' }, + }); + await Promise.resolve(); + await Promise.resolve(); + await controller.submit({ + requestId: 'correct-old-pending', + text: '旧工作路由错了', + explicitTarget: { sessionId: 'sink' }, + correction: { + from: { sessionId: 'old-pending' }, + turnId: 'reserved-turn-1', + }, + }); + + for (const [index, filler] of fillers.entries()) { + const owned = await controller.submit({ + requestId: `newer-barrier-root-${index}`, + text: `开始屏障填充 ${index}`, + explicitTarget: filler.target, + }); + assert.equal(owned.kind, 'submitted'); + if (owned.kind !== 'submitted') continue; + await controller.submit({ + requestId: `newer-barrier-correction-${index}`, + text: `屏障填充 ${index} 路由错了`, + explicitTarget: { sessionId: 'sink' }, + correction: { from: filler.target, turnId: owned.turnId }, + }); + } + + finishOld({ turnId: 'old-host-rebound' }); + await oldSubmission; + assert.equal( + stopped.some(([sessionId, turnId]) => + sessionId === 'old-pending' && turnId === 'old-host-rebound'), + true, + ); +}); + +test('a definite Host rejection releases only its own pending admission', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]); + let shouldReject = true; + sessions.submit = async (_target, _text, turnId) => { + if (shouldReject) { + shouldReject = false; + throw new WorkHubSessionSubmitError('not admitted', 'rejected'); + } + return { turnId }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + await assert.rejects(controller.submit({ + requestId: 'definitely-rejected', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }), /not admitted/u); + const admitted = await controller.submit({ + requestId: 'later-admitted', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + assert.equal(admitted.kind, 'submitted'); + await controller.submit({ + requestId: 'correct-later-admitted', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + + assert.deepEqual(stopped, [[ + 'payment', + admitted.kind === 'submitted' ? admitted.turnId : '', + ]]); +}); + +test('a lost delivery reply is reconciled to its authoritative root ownership', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]); + sessions.submit = async () => { + throw new WorkHubSessionSubmitError('reply lost', 'unknown'); + }; + sessions.reconcileSubmission = async () => ({ + kind: 'root', + turnId: 'authoritative-payment-root', + }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + await assert.rejects(controller.submit({ + requestId: 'reply-lost', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }), /reply lost/u); + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + await controller.submit({ + requestId: 'correct-reconciled-root', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + + assert.deepEqual(stopped, [['payment', 'authoritative-payment-root']]); +}); + +test('an unknown delivery remains pending until a later authoritative reconciliation', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]); + sessions.submit = async () => { + throw new WorkHubSessionSubmitError('reply lost', 'unknown'); + }; + let reconciliation: Awaited> = { + kind: 'unknown', + }; + sessions.reconcileSubmission = async () => reconciliation; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + await assert.rejects(controller.submit({ + requestId: 'unknown-delivery', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }), /reply lost/u); + reconciliation = { kind: 'root', turnId: 'later-authoritative-root' }; + await controller.read(); + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + await controller.submit({ + requestId: 'correct-later-reconciled-root', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + + assert.deepEqual(stopped, [['payment', 'later-authoritative-root']]); +}); + +test('a partial multi-Host catalog never erases confirmed ownership', async () => { + const stopped: Array<[string, string]> = []; + const allSessions = [ + session('login', { sessionName: '登录稳定性' }), + session('remote-payment', { sessionName: '远端支付稳定性' }), + ]; + const sessions = port(allSessions); + let visible = allSessions; + let paymentCatalogComplete = true; + sessions.listCatalog = async () => ({ + sessions: visible, + isCompleteFor: (target) => + target.sessionId !== 'remote-payment' || paymentCatalogComplete, + }); + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + const owned = await controller.submit({ + requestId: 'remote-root', + text: '继续远端支付', + explicitTarget: { sessionId: 'remote-payment' }, + }); + assert.equal(owned.kind, 'submitted'); + + visible = [allSessions[0]!]; + paymentCatalogComplete = false; + await controller.submit({ + requestId: 'correct-after-partial-catalog', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'remote-payment' } }, + }); + + assert.deepEqual(stopped, [[ + 'remote-payment', + owned.kind === 'submitted' ? owned.turnId : '', + ]]); +}); + +test('a stale complete catalog never erases newer confirmed ownership', async () => { + const stopped: Array<[string, string]> = []; + const allSessions = [ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]; + const sessions = port(allSessions); + let signalStaleReadStarted!: () => void; + const staleReadStarted = new Promise((resolve) => { + signalStaleReadStarted = resolve; + }); + let finishStaleRead!: (value: { + sessions: WorkHubSessionFacts[]; + isCompleteFor(target: { sessionId: string }): boolean; + }) => void; + const staleCatalog = new Promise<{ + sessions: WorkHubSessionFacts[]; + isCompleteFor(target: { sessionId: string }): boolean; + }>((resolve) => { + finishStaleRead = resolve; + }); + let catalogReads = 0; + sessions.listCatalog = async () => { + catalogReads += 1; + if (catalogReads === 1) { + signalStaleReadStarted(); + return staleCatalog; + } + return { + sessions: allSessions, + isCompleteFor: () => true, + }; + }; + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + const staleRead = controller.read(); + await staleReadStarted; + const owned = await controller.submit({ + requestId: 'payment-root-after-stale-read-started', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + assert.equal(owned.kind, 'submitted'); + + finishStaleRead({ + sessions: [allSessions[0]!], + isCompleteFor: () => true, + }); + await staleRead; + await controller.submit({ + requestId: 'correct-after-stale-complete-catalog', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + + assert.deepEqual(stopped, [[ + 'payment', + owned.kind === 'submitted' ? owned.turnId : '', + ]]); +}); + +test('authoritative Session removal releases uncertain admissions before global backpressure', async () => { + const stale = Array.from({ length: 32 }, (_, index) => + session(`removed-${index}`, { sessionName: `已删除工作 ${index}` })); + const fresh = session('fresh', { sessionName: '新工作' }); + const sessions = port(stale); + let visible = stale; + let removedCatalogComplete = false; + sessions.listCatalog = async () => ({ + sessions: visible, + isCompleteFor: (target) => + target.sessionId.startsWith('removed-') && removedCatalogComplete, + }); + sessions.submit = async () => { + throw new WorkHubSessionSubmitError('reply lost', 'unknown'); + }; + sessions.reconcileSubmission = async () => ({ kind: 'unknown' }); + const controller = createWorkHubController({ sessions }); + + for (const [index, fact] of stale.entries()) { + await assert.rejects(controller.submit({ + requestId: `uncertain-${index}`, + text: `开始已删除工作 ${index}`, + explicitTarget: fact.target, + }), /reply lost/u); + } + + visible = [fresh]; + removedCatalogComplete = true; + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + const admitted = await controller.submit({ + requestId: 'after-authoritative-removal', + text: '开始新工作', + explicitTarget: fresh.target, + }); + + assert.equal(admitted.kind, 'submitted'); + assert.deepEqual(admitted.kind === 'submitted' ? admitted.target : undefined, fresh.target); +}); + +test('a lost reply reconciled as steering never claims the pre-existing root', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性' }), + session('payment', { sessionName: '支付稳定性' }), + ]); + sessions.submit = async () => { + throw new WorkHubSessionSubmitError('steering reply lost', 'unknown'); + }; + sessions.reconcileSubmission = async () => ({ kind: 'steered' }); + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + await assert.rejects(controller.submit({ + requestId: 'steering-reply-lost', + text: '补充支付测试', + explicitTarget: { sessionId: 'payment' }, + }), /steering reply lost/u); + sessions.submit = async (_target, _text, turnId) => ({ turnId }); + await controller.submit({ + requestId: 'correct-after-steering-reply-loss', + text: '不是支付,改成登录', + explicitTarget: { sessionId: 'login' }, + correction: { from: { sessionId: 'payment' } }, + }); + + assert.deepEqual(stopped, []); +}); + test('WorkHub-owned root remains stoppable after navigating away and back', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ diff --git a/apps/desktop/src/main/__tests__/workhub-session-port.test.ts b/apps/desktop/src/main/__tests__/workhub-session-port.test.ts index 937b5d7479..719d9c81ca 100644 --- a/apps/desktop/src/main/__tests__/workhub-session-port.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-session-port.test.ts @@ -27,6 +27,7 @@ import { projectWorkHubSessionTurns, type WorkHubDesktopSession, } from '../../renderer/workhub-session-port.js'; +import { WorkHubSessionSubmitError } from '../../renderer/workhub-controller.js'; function desktopSession( id: string, @@ -51,6 +52,48 @@ const unusedTranscripts = { }, }; +function transcriptsWith(messages: readonly StoredMessage[]) { + return { + open: async (sessionId: string, handler: (batch: DesktopTranscriptBatch) => void) => { + const parsed = JSON.parse(sessionId) as [string, string]; + const fragments = messages.map((message, identity) => { + const data = new TextEncoder().encode(JSON.stringify(message)); + return { + source: 'durable' as const, + identity, + order: null, + byteOffset: 0, + totalBytes: data.byteLength, + data, + }; + }); + handler({ + sessionId: parsed[1], + deliverySequence: 1, + generation: 'generation-reconcile', + hostEpoch: 'epoch-reconcile', + durableThrough: messages.length - 1, + fragments, + evictedDurableSequences: [], + completedOverlayMessageIds: [], + hasOlder: false, + hasNewer: false, + reset: true, + ready: true, + }); + return { + sessionId, + generation: 'generation-reconcile', + hostEpoch: 'epoch-reconcile', + readThroughMessageId: null, + loadBefore: async () => {}, + loadAround: async () => {}, + close: async () => {}, + }; + }, + }; +} + test('projects durable Session messages into an ordered WorkHub conversation', () => { const turns = projectWorkHubSessionTurns({ target: { sessionId: 'payment' }, @@ -310,6 +353,7 @@ test('desktop adapter projects Session catalog facts without owning copies', asy kind: 'ordinary', archived: false, state: 'running', + runningTurnIds: ['turn-running'], latestResult: '正在补充重复投递测试', updatedAt: 30, }, @@ -320,6 +364,7 @@ test('desktop adapter projects Session catalog facts without owning copies', asy kind: 'internal', archived: false, state: 'active', + runningTurnIds: [], updatedAt: 20, }, { @@ -329,6 +374,7 @@ test('desktop adapter projects Session catalog facts without owning copies', asy kind: 'ordinary', archived: false, state: 'waiting_for_user', + runningTurnIds: ['turn-waiting'], updatedAt: 15, }, { @@ -338,11 +384,41 @@ test('desktop adapter projects Session catalog facts without owning copies', asy kind: 'subagent', archived: false, state: 'active', + runningTurnIds: [], updatedAt: 10, }, ]); }); +test('desktop adapter preserves per-Host catalog coverage for ownership reconciliation', async () => { + const localSessionId = desktopSessionKey({ hostId: 'local-host', sessionId: 'local' }); + const adapter = createDesktopWorkHubSessionPort({ + transcripts: unusedTranscripts, + sessions: { + list: async () => [], + listWithCoverage: async () => ({ + sessions: [desktopSession(localSessionId)], + completeHostIds: ['local-host'], + }), + listTurns: async () => [], + create: async () => { throw new Error('not used'); }, + send: async () => { throw new Error('not used'); }, + stop: async () => {}, + subscribeChanges: () => () => {}, + }, + projectName: () => 'Maka', + newTurnId: () => 'unused', + }); + + const catalog = await adapter.listCatalog?.(); + assert.ok(catalog); + assert.equal(catalog.sessions[0]?.target.sessionId, localSessionId); + assert.equal(catalog.isCompleteFor({ sessionId: localSessionId }), true); + assert.equal(catalog.isCompleteFor({ + sessionId: desktopSessionKey({ hostId: 'remote-host', sessionId: 'remote' }), + }), false); +}); + test('desktop adapter delegates create, send, and invalidation to Session APIs', async () => { const calls: unknown[] = []; let onChanged: (() => void) | undefined; @@ -427,6 +503,102 @@ test('desktop adapter preserves when Session delivery steered an existing root T ); }); +test('desktop adapter distinguishes definite rejection from an unknown delivery outcome', async () => { + let outcome: 'throw' | 'reject' = 'throw'; + const adapter = createDesktopWorkHubSessionPort({ + transcripts: unusedTranscripts, + sessions: { + list: async () => [], + listTurns: async () => [], + create: async () => { throw new Error('not used'); }, + send: async () => { + if (outcome === 'throw') throw new Error('transport disconnected'); + return { ok: false as const, reason: 'archived' as const }; + }, + stop: async () => {}, + subscribeChanges: () => () => {}, + }, + projectName: () => 'Maka', + newTurnId: () => 'reserved-turn', + }); + + await assert.rejects( + adapter.submit({ sessionId: 'payment' }, '继续支付', 'reserved-turn'), + (error) => error instanceof WorkHubSessionSubmitError && error.admission === 'unknown', + ); + outcome = 'reject'; + await assert.rejects( + adapter.submit({ sessionId: 'payment' }, '继续支付', 'reserved-turn'), + (error) => error instanceof WorkHubSessionSubmitError && error.admission === 'rejected', + ); +}); + +test('desktop adapter reconciles lost replies from authoritative transcript identity', async () => { + const cases: Array<{ + name: string; + message: StoredMessage; + expected: { kind: 'root'; turnId: string } | { kind: 'steered' } | { kind: 'unknown' }; + }> = [ + { + name: 'direct root', + message: { + type: 'user', id: 'user-root', turnId: 'reserved-turn', ts: 1, text: '开始支付', + }, + expected: { kind: 'root', turnId: 'reserved-turn' }, + }, + { + name: 'busy-race root', + message: { + type: 'user', id: 'reserved-turn', turnId: 'host-root', ts: 1, text: '开始支付', + }, + expected: { kind: 'root', turnId: 'host-root' }, + }, + { + name: 'steering', + message: { + type: 'user', + id: 'reserved-turn', + turnId: 'pre-existing-root', + steeringEventId: 'steering-event', + ts: 1, + text: '补充支付测试', + }, + expected: { kind: 'steered' }, + }, + { + name: 'unrelated message', + message: { + type: 'user', id: 'other-message', turnId: 'other-root', ts: 1, text: '其他工作', + }, + expected: { kind: 'unknown' }, + }, + ]; + + for (const fixture of cases) { + const adapter = createDesktopWorkHubSessionPort({ + transcripts: transcriptsWith([fixture.message]), + sessions: { + list: async () => [], + listTurns: async () => [], + create: async () => { throw new Error('not used'); }, + send: async () => { throw new Error('not used'); }, + stop: async () => {}, + subscribeChanges: () => () => {}, + }, + projectName: () => 'Maka', + newTurnId: () => 'reserved-turn', + }); + + assert.deepEqual( + await adapter.reconcileSubmission({ + sessionId: desktopSessionKey({ hostId: 'local-host', sessionId: fixture.name }), + }, 'reserved-turn'), + fixture.expected, + fixture.name, + ); + } +}); + test('desktop adapter binds stop to the root Turn owned by the WorkHub submission', async () => { const stopped: unknown[] = []; const adapter = createDesktopWorkHubSessionPort({ diff --git a/apps/desktop/src/main/runtime-host-session-execution-ipc-main.ts b/apps/desktop/src/main/runtime-host-session-execution-ipc-main.ts index a1d6d45b67..951d4d7931 100644 --- a/apps/desktop/src/main/runtime-host-session-execution-ipc-main.ts +++ b/apps/desktop/src/main/runtime-host-session-execution-ipc-main.ts @@ -295,7 +295,9 @@ export function registerRuntimeHostSessionExecutionIpc( } const submitted = await deps.client.submitMessage({ sessionId, - messageId: newId(), + // Preserve the renderer's command identity in the durable message so + // a lost IPC reply can be reconciled as root-vs-steering later. + messageId: turnId, content: startInput.content, placement: "current_turn", }); diff --git a/apps/desktop/src/preload/bridge-contract.d.ts b/apps/desktop/src/preload/bridge-contract.d.ts index 5d42106c01..fd7f0ca95f 100644 --- a/apps/desktop/src/preload/bridge-contract.d.ts +++ b/apps/desktop/src/preload/bridge-contract.d.ts @@ -682,6 +682,10 @@ export interface MakaBridge { }; sessions: { list(filter?: SessionListFilter): Promise; + listWithCoverage(): Promise<{ + sessions: DesktopSessionSummary[]; + completeHostIds: string[]; + }>; create(input?: CreateSessionRequestInput): Promise; send( sessionId: string, diff --git a/apps/desktop/src/preload/preload.ts b/apps/desktop/src/preload/preload.ts index 883adb1f93..0f30d24165 100644 --- a/apps/desktop/src/preload/preload.ts +++ b/apps/desktop/src/preload/preload.ts @@ -103,7 +103,10 @@ import type { import type { BotProvider } from '@maka/core/bot-chat-settings'; import type { BotOnboardingSnapshot, BotOnboardingStartInput } from '@maka/core/bot-onboarding'; import type { HealthSnapshot } from '@maka/core/health'; -import { collectRuntimeHostSessionCatalogs } from './runtime-host-session-catalog.js'; +import { + collectRuntimeHostSessionCatalogs, + collectRuntimeHostSessionCatalogsWithCoverage, +} from './runtime-host-session-catalog.js'; import type { ExecutionBoundaryReadModel, SandboxBoundaryResponse } from '@maka/core/sandbox-boundary'; import type { ActiveInteractionRequestEvent, @@ -789,6 +792,21 @@ async function listDesktopSessions( ); } +async function listDesktopSessionsWithCoverage(): Promise<{ + sessions: DesktopSessionSummary[]; + completeHostIds: string[]; +}> { + const scopes = await runtimeHostScopeList(); + return collectRuntimeHostSessionCatalogsWithCoverage( + scopes.map((scope) => ({ + hostId: scope.hostId, + sessions: ipcRenderer.invoke('sessions:list', scope) + .then((sessions: SessionCatalogSummary[]) => + sessions.map((session) => projectSessionSummary(scope, session))), + })), + ); +} + function sendActiveRuntimeHost(channel: string, ...args: unknown[]): void { void activeRuntimeHostRef() .then((scope) => ipcRenderer.send(channel, scope, ...args)) @@ -1436,6 +1454,9 @@ const makaBridge = { list(filter?: SessionListFilter): Promise { return listDesktopSessions(filter); }, + listWithCoverage() { + return listDesktopSessionsWithCoverage(); + }, /** * The single session-creation channel (#1433). `mode` names a * product intent — main derives the permission boundary, name and diff --git a/apps/desktop/src/preload/runtime-host-session-catalog.ts b/apps/desktop/src/preload/runtime-host-session-catalog.ts index a23f9a6c37..91b721d6b6 100644 --- a/apps/desktop/src/preload/runtime-host-session-catalog.ts +++ b/apps/desktop/src/preload/runtime-host-session-catalog.ts @@ -19,6 +19,35 @@ import type { DesktopSessionSummary } from './bridge-contract.js'; +export interface RuntimeHostSessionCatalogRequest { + readonly hostId: string; + readonly sessions: Promise; +} + +export interface RuntimeHostSessionCatalogCoverage { + readonly sessions: DesktopSessionSummary[]; + readonly completeHostIds: string[]; +} + +export async function collectRuntimeHostSessionCatalogsWithCoverage( + requests: readonly RuntimeHostSessionCatalogRequest[], +): Promise { + const results = await Promise.allSettled(requests.map((request) => request.sessions)); + const fulfilled = results.flatMap((result, index) => result.status === 'fulfilled' + ? [{ hostId: requests[index]!.hostId, sessions: result.value }] + : []); + if (requests.length > 0 && fulfilled.length === 0) { + throw new AggregateError( + results.flatMap((result) => result.status === 'rejected' ? [result.reason] : []), + 'Every Runtime Host Session Catalog request failed', + ); + } + return { + sessions: sortSessionCatalogs(fulfilled.flatMap((entry) => entry.sessions)), + completeHostIds: fulfilled.map((entry) => entry.hostId), + }; +} + export async function collectRuntimeHostSessionCatalogs( requests: readonly Promise[], ): Promise { @@ -30,7 +59,11 @@ export async function collectRuntimeHostSessionCatalogs( 'Every Runtime Host Session Catalog request failed', ); } - return groups.flat().sort((left, right) => { + return sortSessionCatalogs(groups.flat()); +} + +function sortSessionCatalogs(sessions: DesktopSessionSummary[]): DesktopSessionSummary[] { + return sessions.sort((left, right) => { if (left.activityAt === undefined || right.activityAt === undefined) { throw new Error('Runtime Host Session Catalog activity is unavailable'); } diff --git a/apps/desktop/src/renderer/app-shell.tsx b/apps/desktop/src/renderer/app-shell.tsx index 2265e1dac5..02056abaf3 100644 --- a/apps/desktop/src/renderer/app-shell.tsx +++ b/apps/desktop/src/renderer/app-shell.tsx @@ -1557,14 +1557,21 @@ function AppShellContent({ }, toastApi, }); - const workHubController = useMemo(() => createWorkHubController({ - sessions: createDesktopWorkHubSessionPort({ - sessions: window.maka.sessions, - transcripts: window.maka.transcripts, - projectName: (projectId) => projects.find((project) => project.id === projectId)?.name, - newTurnId: () => crypto.randomUUID(), - }), - }), [projects]); + const workHubProjectsRef = useRef(projects); + workHubProjectsRef.current = projects; + const workHubControllerRef = useRef | null>(null); + if (!workHubControllerRef.current) { + workHubControllerRef.current = createWorkHubController({ + sessions: createDesktopWorkHubSessionPort({ + sessions: window.maka.sessions, + transcripts: window.maka.transcripts, + projectName: (projectId) => + workHubProjectsRef.current.find((project) => project.id === projectId)?.name, + newTurnId: () => crypto.randomUUID(), + }), + }); + } + const workHubController = workHubControllerRef.current; // Where a NEW chat starts. Built unconditionally and handed to the composer, // which renders it only while no session owns it — the project is fixed once // the first message creates one, so there is nothing to pick after that. diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index e4a02f8729..b9cc587e48 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -47,11 +47,13 @@ export interface WorkHubSessionFacts { kind: 'ordinary' | 'internal' | 'subagent'; archived: boolean; state: WorkHubSessionState; + /** Authoritative live Turn IDs when the Session catalog provides them. */ + runningTurnIds?: readonly string[]; latestResult?: string; updatedAt: number; } -export type WorkHubSessionSummary = Omit; +export type WorkHubSessionSummary = Omit; export type WorkHubProjectedTurnState = 'running' | 'completed' | 'aborted' | 'failed'; @@ -136,6 +138,14 @@ export type WorkHubSubmission = ( */ export interface WorkHubSessionPort { list(): Promise; + /** + * Lists Sessions with per-target catalog coverage. A target missing from a + * partial multi-Host list is not authoritatively absent. + */ + listCatalog?(): Promise<{ + sessions: WorkHubSessionFacts[]; + isCompleteFor(target: WorkHubSessionTarget): boolean; + }>; /** * Rebuilds a bounded recent conversation from the authoritative Session * transcripts. Missing transcripts are omitted rather than copied elsewhere. @@ -155,10 +165,29 @@ export interface WorkHubSessionPort { text: string, turnId: string, ): Promise<{ turnId: string; steered?: true }>; + reconcileSubmission( + target: WorkHubSessionTarget, + reservedTurnId: string, + ): Promise< + | { kind: 'root'; turnId: string } + | { kind: 'steered' } + | { kind: 'unknown' } + >; stop(target: WorkHubSessionTarget, expectedTurnId: string): Promise; subscribe(handler: () => void): () => void; } +export class WorkHubSessionSubmitError extends Error { + constructor( + message: string, + readonly admission: 'rejected' | 'unknown', + options?: ErrorOptions, + ) { + super(message, options); + this.name = 'WorkHubSessionSubmitError'; + } +} + export interface WorkHubController { read(input?: WorkHubReadInput): Promise; submit(input: WorkHubSubmitInput): Promise; @@ -166,17 +195,15 @@ export interface WorkHubController { resetVisitContext(): void; } -const MAX_OWNERSHIP_RECORDS = 32; -const MAX_STOPPED_TURN_IDS_PER_TOMBSTONE = 32; +const MAX_TRACKED_WORKHUB_ROOTS = 32; interface WorkHubRootOwnership { order: number; turnId: string; } -interface WorkHubSessionOwnership { - confirmed?: WorkHubRootOwnership; - pending: WorkHubRootOwnership[]; +interface WorkHubPendingAdmission extends WorkHubRootOwnership { + state: 'in_flight' | 'uncertain'; } interface WorkHubOwnershipTombstone { @@ -190,8 +217,12 @@ export function createWorkHubController(deps: { let routePolicy = createWorkHubRoutePolicy(); let focusReadVersion = 0; let pendingFocusReadVersion: number | undefined; - const liveOwnershipBySessionId = new Map(); + const confirmedOwnershipBySessionId = new Map(); + const pendingAdmissionsBySessionId = new Map(); const ownershipTombstoneBySessionId = new Map(); + const stopAttemptByTurn = new Map>(); + const stopOperationCountBySessionId = new Map(); + let ownershipRevision = 0; const reconcileFocus = ( policy: ReturnType, sessions: readonly WorkHubSessionFacts[], @@ -202,24 +233,82 @@ export function createWorkHubController(deps: { .map((session) => session.target)); }; const correctionFor = (from: WorkHubSessionTarget): WorkHubCorrectionContext => { - const ownership = liveOwnershipBySessionId.get(from.sessionId); - const turnId = ownership?.confirmed?.turnId ?? ownership?.pending[0]?.turnId; + const confirmed = confirmedOwnershipBySessionId.get(from.sessionId); + const pending = pendingAdmissionsBySessionId.get(from.sessionId); + const turnId = confirmed?.turnId ?? pending?.at(-1)?.turnId; if (!turnId) return { from }; return { from, turnId, }; }; - const storeLiveOwnership = ( - target: WorkHubSessionTarget, - ownership: WorkHubSessionOwnership, + const pendingAdmissions = (sessionId: string): WorkHubPendingAdmission[] => + pendingAdmissionsBySessionId.get(sessionId) ?? []; + const setPendingAdmissions = ( + sessionId: string, + pending: WorkHubPendingAdmission[], ) => { - liveOwnershipBySessionId.delete(target.sessionId); - liveOwnershipBySessionId.set(target.sessionId, ownership); - while (liveOwnershipBySessionId.size > MAX_OWNERSHIP_RECORDS) { - const oldest = liveOwnershipBySessionId.keys().next().value; - if (!oldest) break; - liveOwnershipBySessionId.delete(oldest); + ownershipRevision += 1; + if (pending.length === 0) { + pendingAdmissionsBySessionId.delete(sessionId); + return; + } + pendingAdmissionsBySessionId.set( + sessionId, + [...pending].sort((left, right) => left.order - right.order), + ); + }; + const trackedRootCount = () => { + let pendingCount = 0; + for (const pending of pendingAdmissionsBySessionId.values()) { + pendingCount += pending.length; + } + return confirmedOwnershipBySessionId.size + pendingCount; + }; + const maybeRetireTombstone = (sessionId: string) => { + const tombstone = ownershipTombstoneBySessionId.get(sessionId); + if (!tombstone) return; + if ((stopOperationCountBySessionId.get(sessionId) ?? 0) > 0) return; + if (pendingAdmissions(sessionId).some((candidate) => candidate.order <= tombstone.order)) { + return; + } + ownershipTombstoneBySessionId.delete(sessionId); + }; + const readCatalog = async () => { + const revisionAtStart = ownershipRevision; + const catalog = deps.sessions.listCatalog + ? await deps.sessions.listCatalog() + : { + sessions: await deps.sessions.list(), + isCompleteFor: () => false, + }; + return { + catalog, + // A catalog request that overlapped an ownership mutation may describe + // the state before that mutation. It remains useful for projection, but + // it must not authoritatively prune newer ownership or admissions. + allowAuthoritativePruning: revisionAtStart === ownershipRevision, + }; + }; + const reconcileConfirmedOwnership = (catalog: { + sessions: readonly WorkHubSessionFacts[]; + isCompleteFor(target: WorkHubSessionTarget): boolean; + }, allowAuthoritativePruning: boolean) => { + if (!allowAuthoritativePruning) return; + const { sessions } = catalog; + const sessionById = new Map(sessions.map((session) => [session.target.sessionId, session])); + for (const [sessionId, ownership] of confirmedOwnershipBySessionId) { + const session = sessionById.get(sessionId); + if ( + (!session && catalog.isCompleteFor({ sessionId })) || + session?.archived || + (session?.runningTurnIds !== undefined && + !session.runningTurnIds.includes(ownership.turnId)) + ) { + if (confirmedOwnershipBySessionId.delete(sessionId)) { + ownershipRevision += 1; + } + } } }; const storeOwnershipTombstone = ( @@ -231,33 +320,70 @@ export function createWorkHubController(deps: { if (existing && existing.order > order) return; const stopped = new Set(existing?.order === order ? existing.stoppedTurnIds : []); for (const turnId of stoppedTurnIds) stopped.add(turnId); - while (stopped.size > MAX_STOPPED_TURN_IDS_PER_TOMBSTONE) { - const oldest = stopped.values().next().value; - if (!oldest) break; - stopped.delete(oldest); - } - ownershipTombstoneBySessionId.delete(sessionId); ownershipTombstoneBySessionId.set(sessionId, { order, stoppedTurnIds: stopped, }); - while (ownershipTombstoneBySessionId.size > MAX_OWNERSHIP_RECORDS) { - const oldest = ownershipTombstoneBySessionId.keys().next().value; - if (!oldest) break; - ownershipTombstoneBySessionId.delete(oldest); - } }; const reserveOwnedRoot = ( target: WorkHubSessionTarget, turnId: string, order: number, ) => { - const existing = liveOwnershipBySessionId.get(target.sessionId); - storeLiveOwnership(target, { - ...(existing?.confirmed ? { confirmed: existing.confirmed } : {}), - pending: [...(existing?.pending ?? []), { order, turnId }] - .sort((left, right) => left.order - right.order), + if (trackedRootCount() >= MAX_TRACKED_WORKHUB_ROOTS) { + throw new Error('WorkHub has too many unresolved root submissions'); + } + setPendingAdmissions(target.sessionId, [ + ...pendingAdmissions(target.sessionId), + { order, turnId, state: 'in_flight' }, + ]); + }; + const removePendingRoot = ( + target: WorkHubSessionTarget, + reservedTurnId: string, + order: number, + ) => { + setPendingAdmissions( + target.sessionId, + pendingAdmissions(target.sessionId).filter((candidate) => + candidate.order !== order || candidate.turnId !== reservedTurnId), + ); + }; + const markPendingRootUncertain = ( + target: WorkHubSessionTarget, + reservedTurnId: string, + order: number, + ) => { + setPendingAdmissions( + target.sessionId, + pendingAdmissions(target.sessionId).map((candidate) => + candidate.order === order && candidate.turnId === reservedTurnId + ? { ...candidate, state: 'uncertain' } + : candidate), + ); + }; + const attemptStop = ( + target: WorkHubSessionTarget, + turnId: string, + ): Promise => { + const key = `${target.sessionId}\0${turnId}`; + const existing = stopAttemptByTurn.get(key); + if (existing) return existing; + stopOperationCountBySessionId.set( + target.sessionId, + (stopOperationCountBySessionId.get(target.sessionId) ?? 0) + 1, + ); + const stopping = deps.sessions.stop(target, turnId).finally(() => { + stopAttemptByTurn.delete(key); + const remaining = (stopOperationCountBySessionId.get(target.sessionId) ?? 1) - 1; + if (remaining === 0) { + stopOperationCountBySessionId.delete(target.sessionId); + } else { + stopOperationCountBySessionId.set(target.sessionId, remaining); + } }); + stopAttemptByTurn.set(key, stopping); + return stopping; }; const settleOwnedRoot = async ( target: WorkHubSessionTarget, @@ -265,65 +391,102 @@ export function createWorkHubController(deps: { turn: { turnId: string; steered?: true }, order: number, ) => { - let tombstone = ownershipTombstoneBySessionId.get(target.sessionId); - if ( - !turn.steered && - tombstone && - tombstone.order >= order && - !tombstone.stoppedTurnIds.has(turn.turnId) - ) { - await deps.sessions.stop(target, turn.turnId); - storeOwnershipTombstone(target.sessionId, tombstone.order, [turn.turnId]); - } - const existing = liveOwnershipBySessionId.get(target.sessionId); - tombstone = ownershipTombstoneBySessionId.get(target.sessionId); - if (!existing) return; - const pending = existing.pending.filter((candidate) => - (candidate.order !== order || candidate.turnId !== reservedTurnId) && - (!tombstone || candidate.order > tombstone.order)); - let confirmed = existing.confirmed && - (!tombstone || existing.confirmed.order > tombstone.order) - ? existing.confirmed - : undefined; - if ( - !turn.steered && - (!tombstone || tombstone.order < order) && - (!confirmed || confirmed.order <= order) - ) { - confirmed = { order, turnId: turn.turnId }; - ownershipTombstoneBySessionId.delete(target.sessionId); + const tombstone = ownershipTombstoneBySessionId.get(target.sessionId); + let stopped = false; + let stopFailure: unknown; + if (!turn.steered && tombstone && tombstone.order >= order) { + stopped = tombstone.stoppedTurnIds.has(turn.turnId); + if (!stopped) { + try { + await attemptStop(target, turn.turnId); + const currentBarrier = ownershipTombstoneBySessionId.get(target.sessionId); + if (currentBarrier && currentBarrier.order >= order) { + storeOwnershipTombstone(target.sessionId, currentBarrier.order, [turn.turnId]); + } + stopped = true; + } catch (error) { + stopFailure = error; + } + } } - if (confirmed || pending.length > 0) { - storeLiveOwnership(target, { - ...(confirmed ? { confirmed } : {}), - pending, - }); - } else { - liveOwnershipBySessionId.delete(target.sessionId); + removePendingRoot(target, reservedTurnId, order); + if (!turn.steered && !stopped) { + const confirmed = confirmedOwnershipBySessionId.get(target.sessionId); + if (!confirmed || confirmed.order <= order) { + confirmedOwnershipBySessionId.set(target.sessionId, { + order, + turnId: turn.turnId, + }); + ownershipRevision += 1; + } } + maybeRetireTombstone(target.sessionId); + if (stopFailure) throw stopFailure; }; const releasePendingRoot = ( target: WorkHubSessionTarget, reservedTurnId: string, order: number, ) => { - const existing = liveOwnershipBySessionId.get(target.sessionId); - if (!existing) return; + removePendingRoot(target, reservedTurnId, order); + maybeRetireTombstone(target.sessionId); + }; + const reconcilePendingRoot = async ( + target: WorkHubSessionTarget, + reservedTurnId: string, + order: number, + ): Promise => { + const reconciliation = await deps.sessions.reconcileSubmission(target, reservedTurnId); + if (reconciliation.kind === 'unknown') return false; + await settleOwnedRoot( + target, + reservedTurnId, + reconciliation.kind === 'steered' + ? { turnId: reservedTurnId, steered: true } + : { turnId: reconciliation.turnId }, + order, + ); + return true; + }; + const reconcileUncertainAdmissions = (catalog: { + sessions: readonly WorkHubSessionFacts[]; + isCompleteFor(target: WorkHubSessionTarget): boolean; + }, allowAuthoritativePruning: boolean): Promise | undefined => { + const sessionById = new Map( + catalog.sessions.map((session) => [session.target.sessionId, session]), + ); + const uncertain = [...pendingAdmissionsBySessionId.entries()] + .flatMap(([sessionId, pending]) => pending + .filter((candidate) => candidate.state === 'uncertain') + .map((candidate) => ({ + target: { sessionId }, + ...candidate, + }))); + if (uncertain.length === 0) return undefined; + return Promise.all(uncertain.map(async ({ target, turnId, order }) => { + const session = sessionById.get(target.sessionId); + if ( + allowAuthoritativePruning && + (session?.archived || (!session && catalog.isCompleteFor(target))) + ) { + releasePendingRoot(target, turnId, order); + return; + } + try { + await reconcilePendingRoot(target, turnId, order); + } catch { + // Failed reconciliation preserves the pending or confirmed ownership. + } + })).then(() => undefined); + }; + const assertSubmissionBarrierOpen = (target: WorkHubSessionTarget) => { + maybeRetireTombstone(target.sessionId); const tombstone = ownershipTombstoneBySessionId.get(target.sessionId); - const pending = existing.pending.filter((candidate) => - (candidate.order !== order || candidate.turnId !== reservedTurnId) && - (!tombstone || candidate.order > tombstone.order)); - const confirmed = existing.confirmed && - (!tombstone || existing.confirmed.order > tombstone.order) - ? existing.confirmed - : undefined; - if (confirmed || pending.length > 0) { - storeLiveOwnership(target, { - ...(confirmed ? { confirmed } : {}), - pending, - }); - } else { - liveOwnershipBySessionId.delete(target.sessionId); + const stopCount = stopOperationCountBySessionId.get(target.sessionId) ?? 0; + const pendingBarrier = tombstone && pendingAdmissions(target.sessionId) + .some((candidate) => candidate.order <= tombstone.order); + if (stopCount > 0 || pendingBarrier) { + throw new Error('WorkHub is still reconciling a correction for this Session'); } }; const stopOwnedRoots = async ( @@ -331,37 +494,39 @@ export function createWorkHubController(deps: { order: number, ) => { if (correction.steered) return; - const ownership = liveOwnershipBySessionId.get(correction.from.sessionId); + const confirmed = confirmedOwnershipBySessionId.get(correction.from.sessionId); + const pending = pendingAdmissions(correction.from.sessionId); const turnIds = new Set(); if (correction.turnId) turnIds.add(correction.turnId); - if (ownership?.confirmed && ownership.confirmed.order < order) { - turnIds.add(ownership.confirmed.turnId); + if (confirmed && confirmed.order < order) { + turnIds.add(confirmed.turnId); } - for (const pending of ownership?.pending ?? []) { - if (pending.order < order) turnIds.add(pending.turnId); + for (const candidate of pending) { + if (candidate.order < order) turnIds.add(candidate.turnId); } if (turnIds.size === 0) return; - // Publish the correction before awaiting Host acknowledgements. A pending - // admission may settle with a Host-rebound Turn ID while these stops are - // in flight; settleOwnedRoot will then stop that returned root as well. - storeOwnershipTombstone(correction.from.sessionId, order, turnIds); - for (const turnId of turnIds) { - await deps.sessions.stop(correction.from, turnId); - } - const current = liveOwnershipBySessionId.get(correction.from.sessionId); - if (!current) return; - const confirmed = current.confirmed && current.confirmed.order >= order - ? current.confirmed - : undefined; - const pending = current.pending.filter((candidate) => candidate.order >= order); - if (confirmed || pending.length > 0) { - storeLiveOwnership(correction.from, { - ...(confirmed ? { confirmed } : {}), - pending, - }); - } else { - liveOwnershipBySessionId.delete(correction.from.sessionId); - } + // Publish only the order barrier before awaiting Host acknowledgements. + // Individual IDs become tombstoned only after their Stop succeeds. + storeOwnershipTombstone(correction.from.sessionId, order); + const failures: unknown[] = []; + await Promise.all([...turnIds].map(async (turnId) => { + try { + await attemptStop(correction.from, turnId); + const barrier = ownershipTombstoneBySessionId.get(correction.from.sessionId); + if (barrier && barrier.order >= order) { + storeOwnershipTombstone(correction.from.sessionId, barrier.order, [turnId]); + } + const owned = confirmedOwnershipBySessionId.get(correction.from.sessionId); + if (owned && owned.order < order && owned.turnId === turnId) { + confirmedOwnershipBySessionId.delete(correction.from.sessionId); + ownershipRevision += 1; + } + } catch (error) { + failures.push(error); + } + })); + maybeRetireTombstone(correction.from.sessionId); + if (failures.length > 0) throw failures[0]; }; return { subscribe(handler) { @@ -376,7 +541,15 @@ export function createWorkHubController(deps: { readPolicy.rememberTarget(input.focus); } try { - const facts = await deps.sessions.list(); + const { catalog, allowAuthoritativePruning } = + await readCatalog(); + reconcileConfirmedOwnership(catalog, allowAuthoritativePruning); + const reconciliation = reconcileUncertainAdmissions( + catalog, + allowAuthoritativePruning, + ); + if (reconciliation) await reconciliation; + const facts = catalog.sessions; const ordinary = facts .filter((session) => session.kind === 'ordinary') .sort((left, right) => right.updatedAt - left.updatedAt); @@ -388,7 +561,7 @@ export function createWorkHubController(deps: { } return { sessions: ordinary - .map(({ kind: _kind, ...session }) => session), + .map(({ kind: _kind, runningTurnIds: _runningTurnIds, ...session }) => session), turns: await deps.sessions.recentTurns(ordinary.map((session) => session.target)), }; } finally { @@ -403,7 +576,15 @@ export function createWorkHubController(deps: { // learned only after successful delivery, but their precedence follows // user submission order rather than network completion order. const submissionOrder = submissionPolicy.reserveSubmissionOrder(); - const sessions = await deps.sessions.list(); + const { catalog, allowAuthoritativePruning } = + await readCatalog(); + reconcileConfirmedOwnership(catalog, allowAuthoritativePruning); + const reconciliation = reconcileUncertainAdmissions( + catalog, + allowAuthoritativePruning, + ); + if (reconciliation) await reconciliation; + const sessions = catalog.sessions; reconcileFocus(submissionPolicy, sessions); const ordinary = sessions.filter((session) => session.kind === 'ordinary'); // Archived Sessions remain visible as historical work, but Runtime Host @@ -479,13 +660,27 @@ export function createWorkHubController(deps: { if (correction) { await stopOwnedRoots(correction, submissionOrder); } + assertSubmissionBarrierOpen(target); const reservedTurnId = deps.sessions.reserveTurnId(); reserveOwnedRoot(target, reservedTurnId, submissionOrder); let turn: { turnId: string; steered?: true }; try { turn = await deps.sessions.submit(target, input.text, reservedTurnId); } catch (error) { - releasePendingRoot(target, reservedTurnId, submissionOrder); + if ( + error instanceof WorkHubSessionSubmitError && + error.admission === 'rejected' + ) { + releasePendingRoot(target, reservedTurnId, submissionOrder); + } else { + markPendingRootUncertain(target, reservedTurnId, submissionOrder); + try { + await reconcilePendingRoot(target, reservedTurnId, submissionOrder); + } catch { + // The original delivery error remains primary. Reconciliation keeps + // any unresolved admission reachable for a later read/correction. + } + } throw error; } await settleOwnedRoot(target, reservedTurnId, turn, submissionOrder); diff --git a/apps/desktop/src/renderer/workhub-session-port.ts b/apps/desktop/src/renderer/workhub-session-port.ts index ea61d9912c..4d66344637 100644 --- a/apps/desktop/src/renderer/workhub-session-port.ts +++ b/apps/desktop/src/renderer/workhub-session-port.ts @@ -22,6 +22,7 @@ import type { DesktopTranscriptBatch, DesktopTranscriptHandle, } from '../preload/transcript-contract.js'; +import { parseDesktopSessionKey } from '../shared/runtime-host-identity.js'; import { DesktopTranscriptRangeStore } from './desktop-transcript-range-store.js'; import type { WorkHubProjectedTurn, @@ -30,7 +31,10 @@ import type { WorkHubSessionState, WorkHubSessionTarget, } from './workhub-controller.js'; -import { boundedWorkHubTimelineText } from './workhub-controller.js'; +import { + boundedWorkHubTimelineText, + WorkHubSessionSubmitError, +} from './workhub-controller.js'; export interface WorkHubDesktopSession { id: string; @@ -49,6 +53,10 @@ export interface WorkHubDesktopSession { export interface WorkHubDesktopSessionBridge { list(): Promise; + listWithCoverage?(): Promise<{ + sessions: readonly WorkHubDesktopSession[]; + completeHostIds: readonly string[]; + }>; listTurns(sessionId: string): Promise; create(input: { name: string }): Promise; send( @@ -104,15 +112,37 @@ export function createDesktopWorkHubSessionPort(deps: { : 'ordinary', archived: session.isArchived, state: projectState(session), + ...(session.runningTurnIds !== undefined + ? { runningTurnIds: [...session.runningTurnIds] } + : {}), ...(session.lastMessagePreview ? { latestResult: session.lastMessagePreview } : {}), updatedAt: session.lastMessageAt ?? session.statusUpdatedAt ?? 0, }); + const projectCatalog = async () => { + const snapshot = deps.sessions.listWithCoverage + ? await deps.sessions.listWithCoverage() + : { sessions: await deps.sessions.list(), completeHostIds: [] }; + const completeHostIds = new Set(snapshot.completeHostIds); + return { + sessions: snapshot.sessions.map(projectSession), + isCompleteFor(target: WorkHubSessionTarget) { + try { + return completeHostIds.has(parseDesktopSessionKey(target.sessionId).hostId); + } catch { + return false; + } + }, + }; + }; return { async list() { - return (await deps.sessions.list()).map(projectSession); + return (await projectCatalog()).sessions; + }, + listCatalog() { + return projectCatalog(); }, async recentTurns(targets) { const turnsBySession = await Promise.all( @@ -161,17 +191,56 @@ export function createDesktopWorkHubSessionPort(deps: { return deps.newTurnId(); }, async submit(target: WorkHubSessionTarget, text: string, turnId: string) { - const result = await deps.sessions.send(target.sessionId, { - type: 'send', - turnId, - text, - }); - if (!result.ok) throw new Error(`WorkHub Session send failed: ${result.reason}`); + let result: Awaited>; + try { + result = await deps.sessions.send(target.sessionId, { + type: 'send', + turnId, + text, + }); + } catch (cause) { + throw new WorkHubSessionSubmitError( + 'WorkHub Session delivery outcome is unknown', + 'unknown', + { cause }, + ); + } + if (!result.ok) { + throw new WorkHubSessionSubmitError( + `WorkHub Session send failed: ${result.reason}`, + 'rejected', + ); + } return { turnId: result.turnId, ...(result.steered ? { steered: true as const } : {}), }; }, + async reconcileSubmission(target, reservedTurnId) { + try { + const messages = await readWorkHubSessionMessages(deps.transcripts, target); + let message: Extract | undefined; + for (let index = messages.length - 1; index >= 0; index -= 1) { + const entry = messages[index]; + if ( + entry?.type === 'user' && + (entry.turnId === reservedTurnId || entry.id === reservedTurnId) + ) { + message = entry; + break; + } + } + if (!message) return { kind: 'unknown' }; + if (message.turnId === reservedTurnId) { + return { kind: 'root', turnId: message.turnId }; + } + return message.steeringEventId + ? { kind: 'steered' } + : { kind: 'root', turnId: message.turnId }; + } catch { + return { kind: 'unknown' }; + } + }, async stop(target, expectedTurnId) { await deps.sessions.stop(target.sessionId, { source: 'stop_button', From 252a779e5f88c1386e8c8e8922e5f6c38561e689 Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Tue, 25 Aug 2026 01:55:26 +0800 Subject: [PATCH 6/8] docs: refresh Astryx surface inventory Generated-by: Codex --- docs/astryx-surface-file-inventory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/astryx-surface-file-inventory.md b/docs/astryx-surface-file-inventory.md index 4707983699..834cd00c6d 100644 --- a/docs/astryx-surface-file-inventory.md +++ b/docs/astryx-surface-file-inventory.md @@ -5,7 +5,7 @@ Each row is one on-disk product surface file. Regenerated inventory must stay in Wiki bar: Design Conventions · API Use-the-System · Theming · Container Padding. -**Totals:** 209 files — blocker 0, polish 1, aligned 208. +**Totals:** 211 files — blocker 0, polish 1, aligned 210. ## Exclusions (explicit) From 38c360c5add9a5e02e6cae67805dfd60e99a4a39 Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Tue, 25 Aug 2026 03:21:00 +0800 Subject: [PATCH 7/8] fix(desktop): retry stop after late root admission A successful Stop for an unconfirmed reserved turn may be a Host no-op. Keep that turn out of the final stopped set so settlement retries Stop after admission. Generated-by: Codex --- .../main/__tests__/workhub-controller.test.ts | 52 +++++++++++++++++++ .../src/renderer/workhub-controller.ts | 8 ++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index b2e3cdc543..4693cef1ea 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -1338,6 +1338,58 @@ test('a correction after remount stops a root whose admission is still pending', ]); }); +test('a correction retries Stop when the same reserved root is admitted late', async () => { + const stopped: Array<[string, string]> = []; + const sessions = port([ + session('login', { sessionName: '登录稳定性', updatedAt: 20 }), + session('payment', { sessionName: '支付稳定性', updatedAt: 30 }), + ]); + let signalPaymentStarted!: () => void; + const paymentStarted = new Promise((resolve) => { + signalPaymentStarted = resolve; + }); + let finishPayment!: (value: { turnId: string }) => void; + const paymentTurn = new Promise<{ turnId: string }>((resolve) => { + finishPayment = resolve; + }); + sessions.reserveTurnId = () => 'turn-reserved-1'; + sessions.submit = async (target, _text, turnId) => { + if (target.sessionId === 'payment') { + assert.equal(turnId, 'turn-reserved-1'); + signalPaymentStarted(); + return paymentTurn; + } + return { turnId }; + }; + sessions.stop = async (target, turnId) => { + stopped.push([target.sessionId, turnId]); + }; + const controller = createWorkHubController({ sessions }); + + const pendingSubmission = controller.submit({ + requestId: 'request-payment-same-id-pending', + text: '继续支付稳定性', + explicitTarget: { sessionId: 'payment' }, + }); + await paymentStarted; + controller.resetVisitContext(); + await controller.read({ focus: { sessionId: 'payment' } }); + + await controller.submit({ + requestId: 'request-correct-same-id-pending-root', + text: '不是这个工作,换成登录稳定性', + }); + assert.deepEqual(stopped, [['payment', 'turn-reserved-1']]); + + finishPayment({ turnId: 'turn-reserved-1' }); + await pendingSubmission; + + assert.deepEqual(stopped, [ + ['payment', 'turn-reserved-1'], + ['payment', 'turn-reserved-1'], + ]); +}); + test('a stopped ownership tombstone blocks an older root completion', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index b9cc587e48..6cee01233b 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -497,12 +497,16 @@ export function createWorkHubController(deps: { const confirmed = confirmedOwnershipBySessionId.get(correction.from.sessionId); const pending = pendingAdmissions(correction.from.sessionId); const turnIds = new Set(); + const unconfirmedTurnIds = new Set(); if (correction.turnId) turnIds.add(correction.turnId); if (confirmed && confirmed.order < order) { turnIds.add(confirmed.turnId); } for (const candidate of pending) { - if (candidate.order < order) turnIds.add(candidate.turnId); + if (candidate.order < order) { + turnIds.add(candidate.turnId); + unconfirmedTurnIds.add(candidate.turnId); + } } if (turnIds.size === 0) return; // Publish only the order barrier before awaiting Host acknowledgements. @@ -513,7 +517,7 @@ export function createWorkHubController(deps: { try { await attemptStop(correction.from, turnId); const barrier = ownershipTombstoneBySessionId.get(correction.from.sessionId); - if (barrier && barrier.order >= order) { + if (barrier && barrier.order >= order && !unconfirmedTurnIds.has(turnId)) { storeOwnershipTombstone(correction.from.sessionId, barrier.order, [turnId]); } const owned = confirmedOwnershipBySessionId.get(correction.from.sessionId); From d9321354b26c2877fc05ca799527ac13a6ff0bb8 Mon Sep 17 00:00:00 2001 From: 404ARE <936233544@qq.com> Date: Tue, 25 Aug 2026 03:46:32 +0800 Subject: [PATCH 8/8] fix(desktop): separate post-admission stop retry Admission can complete while the pre-admission Stop reply is still in flight. Await that attempt, then issue a distinct Stop against the now-admitted root instead of joining the earlier no-op promise. Generated-by: Codex --- .../main/__tests__/workhub-controller.test.ts | 20 ++++++++++++++++--- .../src/renderer/workhub-controller.ts | 11 ++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workhub-controller.test.ts b/apps/desktop/src/main/__tests__/workhub-controller.test.ts index 4693cef1ea..821c69c24f 100644 --- a/apps/desktop/src/main/__tests__/workhub-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workhub-controller.test.ts @@ -1338,7 +1338,7 @@ test('a correction after remount stops a root whose admission is still pending', ]); }); -test('a correction retries Stop when the same reserved root is admitted late', async () => { +test('a correction retries Stop when the same reserved root is admitted before Stop settles', async () => { const stopped: Array<[string, string]> = []; const sessions = port([ session('login', { sessionName: '登录稳定性', updatedAt: 20 }), @@ -1361,8 +1361,20 @@ test('a correction retries Stop when the same reserved root is admitted late', a } return { turnId }; }; + let signalFirstStopStarted!: () => void; + const firstStopStarted = new Promise((resolve) => { + signalFirstStopStarted = resolve; + }); + let finishFirstStop!: () => void; + const firstStop = new Promise((resolve) => { + finishFirstStop = resolve; + }); sessions.stop = async (target, turnId) => { stopped.push([target.sessionId, turnId]); + if (stopped.length === 1) { + signalFirstStopStarted(); + await firstStop; + } }; const controller = createWorkHubController({ sessions }); @@ -1375,14 +1387,16 @@ test('a correction retries Stop when the same reserved root is admitted late', a controller.resetVisitContext(); await controller.read({ focus: { sessionId: 'payment' } }); - await controller.submit({ + const correction = controller.submit({ requestId: 'request-correct-same-id-pending-root', text: '不是这个工作,换成登录稳定性', }); + await firstStopStarted; assert.deepEqual(stopped, [['payment', 'turn-reserved-1']]); finishPayment({ turnId: 'turn-reserved-1' }); - await pendingSubmission; + finishFirstStop(); + await Promise.all([pendingSubmission, correction]); assert.deepEqual(stopped, [ ['payment', 'turn-reserved-1'], diff --git a/apps/desktop/src/renderer/workhub-controller.ts b/apps/desktop/src/renderer/workhub-controller.ts index 6cee01233b..e382ee7fd5 100644 --- a/apps/desktop/src/renderer/workhub-controller.ts +++ b/apps/desktop/src/renderer/workhub-controller.ts @@ -398,6 +398,17 @@ export function createWorkHubController(deps: { stopped = tombstone.stoppedTurnIds.has(turn.turnId); if (!stopped) { try { + const priorStopAttempt = stopAttemptByTurn.get( + `${target.sessionId}\0${turn.turnId}`, + ); + if (priorStopAttempt) { + try { + await priorStopAttempt; + } catch { + // Admission is new evidence. Retry against the admitted root even + // when the earlier pre-admission Stop failed or observed nothing. + } + } await attemptStop(target, turn.turnId); const currentBarrier = ownershipTombstoneBySessionId.get(target.sessionId); if (currentBarrier && currentBarrier.order >= order) {