From eeed2f14d57776f0953b133eec884646ef32ce79 Mon Sep 17 00:00:00 2001 From: Mixer Date: Tue, 14 Apr 2026 08:03:42 +0900 Subject: [PATCH] Sync 2026-04-14 08:03 --- state_10-40-29-186.db | Bin 2580480 -> 2580480 bytes state_merged.db | Bin 0 -> 12288 bytes sync.sh | 175 +++++++++++++++++++++--------------------- 3 files changed, 89 insertions(+), 86 deletions(-) create mode 100644 state_merged.db diff --git a/state_10-40-29-186.db b/state_10-40-29-186.db index 10c2c839194c2c2c5b71a029838a83a715e645d1..3fc8bc6ab14acd25bb1dc55bb8ad9ec407bfce8c 100644 GIT binary patch delta 29763 zcmeIb3wRt?l_##cb*s9%`mOiFl1i_ZCF{|xS4*~KxhjOgNSEfGKUuAU(Wv(UHU$~xjopK#@?RRZ+b-K=Y=H0&#p7%}t+TPtEUL%B4$;5%! zNGLiMi3MTj@ zuA&mF>$x)5Z_vd5?D`L`Z@FG_J?Hwl>xZc65tmgFtBkf;Pra19!fAEgR_6L=*RNdv z==ulOZO^;sXIv5&%LMDGT<$K}>bkegb?@`a@kN)zE?R`(UoY&BJS1DJ&wt{9Ntg7U z_y%_N)K4GnQ2x4s-Bng5r1W3b*R<$cn`-#;gOB}3x4OS>crM?lH=ope@x>aDNWu*`#}l$Qg&xSIV~>Hff9 z(iy|GuyH0h9w=)vpT=3`*Pow#`4J}EcuIQp%j+Bm9s3+RFZ}QM@4fmPn{PyrxnLKZ z%+X%fEjZ}VCfMn)PO#CTN>J(G6s&Zxoch&Y_KAtI^{3W$)-*69iEZxFE=aut62e_8GU7yKXF#R^PG+LYYt@V9o@gx=fISjS9Y0 z7q*}L393M0_|t5+2u>FUJ?>v*{Ua>C}C%y?pxYryhUv^zk=7pVwl^ zR5+@cx9-1t>C-3Pc;e6AIP?4)ubf21OQ(;&{?gsAz4W9ubugYWN=<3&-~9BW^jIz& z?b2R<>D1DvAETm=eB<@cy{NVBI1)`A%gn?R2es^cZzkCrLDO4*cKl=b|Hd<4U3%pH zCH?WGho9BL$+*4mhOM*&Et7AP*uCTslrE3V?5qG@zmM73rlxDc=n#hy1O+z zuD$Wf>DQn72>QPC$TLf)bH`B)-u&9j1)MBBeDbxIUeL}Ts-@FkEWWFsdWqK%VC(J9|uvh2pbXJfVfOh0rlAGZV^asp#QsJQa=LTNGb% z;Ux7{OJ}0<=|0V@X?9jihvE^fH8`7!h9bu>2wEno8H1pO62`NMi;a>Nie;iHR2afU z%_rx3w1t^?ct)Fxh7xJxt;Rg1v*BrF%ANHT_1n4kk0^D{+Hb7@D7-jpIB#i`UK`>*`b08$$6+j~3G1 za&?XV#Bb`WavO_nEz$+L-P@arPKVObDGjrF31eXP)p&ln!>gXXFddo0oX%WDBQz5- zr^4)28V#h@uN^`fwPV^sG(|JkTkKk&wk?~XI|*Y@r}WQ!ORmgKY4f2}MoY$U5wlJ7 zNfo9-iN3x*Z8n<0JZRyWX!wv8k5MO=X{9(J7_(%G#u_6QEYT6sO7v(vb0D0IL_tew z%~zrWZ8ns~`?8sNv}PfPTNmLT>UAj7nZ`7sH3y@_eIQJO7<#EOcnLaa^wJaxXeSjk zhz1lolg!RWFkVNZ+H@4XrY9juw4G+BW|PT7S}t@j6sNAL>NPXk6 zu(b6iH<+}AC2jal^-kNJ_B$PSI=|}T^LA0Xzs$-l2XXkbGwyj;LEwhF%+TyReKx-@N?!l94&%t$ynub%gY?DRx;<> zRT0-bOfpt9oHj6}v<~81m1rrhs`%m(g)idJEmmK6@y0z-kj+IB=k*eM^fZobLe9Q= zF~lW}dDg6Mw7B7NhhSg55aLQZW1oH$$6Bu7$Dvx?cB{i-R~4n)ElS~%mX^5Hd49*(_PI3!p zUV%lX3zOU`mnd?Qtv4xh60MYo_tPkc=7BaRS&Lu=J;o0vk|}yz6NEV&M38(ufs+YHrJ!7Vg9 zcGYUL+7y??YO`1z7Khzxx7qDB#ctzPr`>vzA9La3#>azCIX)HmRN_-I1aZjn!dCO!1P(iSVT<`~9EUkx*ld2=ghPrKHk#kYaG2+XQTiqo0%Dmv z-+1!x|GXNXnlpd@=e5;;|M07|(wTCF|J-us_XqixBtE*)=hF}GcaP|A-QS|-QrSd; z^gt|ZAuUa^GCNC42KIW|t;uO)EyuDIPh-v0vT0~O^QmYW`i!CM9ZP1la43Q06crrO z4riljl8#vBNe{ypC@7&+JQfd!=z0&Wy$jG&jKwjQoSn@j7kabvecFzr(Qq~sHI^V~ zR)@40NamQSEMzmuL~<^fP0t?d(dI%lx2QgpP9{Rrvr#P)4ad{;QYd1y!X}`0(Ykq4 zGMmC`mk7mP@fV; z`;9)6B0vS_Q}MYFR7(`i(0D|kc7{pKgF=dNNiDy%ue8ZDb=syIjO_1h z*^V>co^N{(0{z&-3wyRGU2T=o?nYJO$)~4+bo6r`;ykyJp!kw{L9*w{O0$?PF(tv#mK|(Z3RGZaGsIZ2pOG z=9Zn!eWL#T``R*vUCo7E+6%i{5)+Ex_}w)>s(b2dBv>xfUu~|~dh&M9z#nVkJ#tGPL9-Ke$hHntxN z$&?|ZO-6?fYp``Z5s4l(w-VY7SM1WTzRW?|Y}8Dpp(mhS7d2LUEsdqT4_n6tEYpy( zq#0QdV z)~@1~hjwhH=B&FLtJ{jYgFfC^U9bBGv7z2f3e*;CzxK5n27`Dy97?V1uOP3^>w6d8 zm6=OMum(mW8?{nX&M^Z~gSMlm^N@k5Xe`~27Nuvle$aQjwtgfO3kL$x@NjG-;`7I* z!;#U@P-rAP7V`OGk+Hx)bT~XP8u1O`RTtcl>!B|R{W}MSZcX17og0}QnNJEmN=Xuw^xy`ECSJ$Xt`x)N6_R2%;&7JDXOZB|X@&SG8 zfYz)SozuKt{TaQ!+3odeWVbRe!l0t>dZN8i@4vmxQNC;M?#mBcw`2F-oqIO6Pwd;b zuT}pa|6OUw?N6qD`U4`q1GI{#_h2=qDvVu>x#KRHfuPhBcZNkP%@w4sz=VY5hL)Gm zvZ7-y<3}^g`|S+qmX`S#-Y^Y~(yR%)No}El2$Np8cIz99r_vcc|GcI85Rop}!q7!% zrCe!Q-_0LvO+(`jWuROT&x}MyNBjeUs4p@y5E_~ui46^f2BwEXzUk3OWFRs!7z+%K zjSYlGz$atF{!nyyU~p(OIvf~|4fuzKWBL#FvC7<^vile4y@DlXrTg_4@4o)fQ*zzl zErkgZHFwutx~S3pXGN{5*WaVH8hdRTx}SaW@wdMAfTqv-Yu69K9ARwxjY%^URbuDT z^g}f4OLTWnn)afN-QD{VQ&UrV{_kt5b$7(2xG%e6&w=3X_wNes-aVd4Wuy8x|9wlf ze$8*H>{n_Z`j8e4&m^^dtp-89FL=ey9ozS{8dbESK_J~sHcc%mz3xEC3`w_1q(E)K zef^uEn#Q+zRqe%IrF(uPR2coNpc>~x8Q35b2M$G#(Ob;{XuX}7;Xn+E9O>Ezd}Cu{ z!_mWoM;5}jl^FiV+Z>SVqPVk6t&#su+zHXYMI1TlDr_``z{yS$0*kg2$1YU}96l7d zH5xe@SU8jnn?hjCmBas5@Y>g0d8nd3qc6l7di7iMW~;tyx}NJxVokX|_QPhk{?@On zBoU*a{~%potM58$ZPFjVTeIu?pJ=z!Y$z5?hA}@SLGan(^96xnbURN3tYK|qaUuSm zDpoi}5*=$o1X~KSD}y~DJ)mu31tLqXxg4#L2x(~V^J%i}Vb7ue@^)4^G3t+n{lf#% zSa>uN9rHy3)4rjIe{^Up>I+~y93At=Mn;E2focC(DB_ET#>OJyp>Sjb(mfU!7|?~` z+A4#Y|5ROA)dSi!5q0VR@IZaVP+_PrX6OSu{+D6WOCX!fZ(9cRYoBPZC1SA*{DCa` zu3vNs{JHO3{+t=i`e(9%g@x%MUx`2UzxqhDFk0lr8sf#m{=37Mz>7bfs%f#Us!;#w zRI|3`0&${k)jRc;uT|cpPl+|_E}^#<;YN$G97|Y^@A*gl{rA;2e;``i$A`$90)qln zIW3k-&S{q$)=lEEkaihVxe)Z6`D8ktfquBmm}C)1E*KKraM+ODeHJ^+2<+YZ;k(Nl z1XcGuS>CGe(wl24)WJSu6%IurT5nLr3UGy<|EOFcY}Eh9ud7DcaNn{JS8_!zSJf+G z#ibh>Ch<9J6%ljiZ)hO>rh}v(ib(&;strRs%o*4rqaj6me5t392w40~|I)c@``E}( zI27}Z1_p;m{A1zR*gzmOJm8y-_(z7Op~d-qaGa0$#zv!&aBO%w5E+a_e6i_)@W4PM z>K}{f*RB)l_3wYrWB;QKEL7&?-Q__V(b~$yni1WXSUsfRtW9f%^k8vFX=VKv4k}e~ z(P7npYPHlo{1Zu%oPS&9{97zpKXleDHW;pQk(b?xU;#l=hX2oqxy4TVB|} zRfnC`a8540LO>o-tMq@!x?1fe^JWLP$-481tLat_BkzD}#Xr@i;s?KM^f7+J#xIM~ zp*XbMLKj~=Ad2u3(b<$(G=%mti)h+GyOhOgF3HN`xMF2wjPGDors=f<2IaoIMfZ$$ zR&|PeG09*rXX_YW+{<7fX0W|mnF{|&HflOD2AN;K>4+|z&XXBvT=}?;-c8`2}g@f_H27KU3$)?f; zudFS4&}7)r&_c$^?r;2XHd{KyWlg~s2R;HkGG2bsg(i97}4P@$g*M!5h+N8G1$pat2}co9S<8LhuI9+ZPR&C)hHTFuzv+-z#Mj#|r@NSH8H(XJv z5Ugydr=5xV(LV2nUJI)cIeC2xUL}-2VnrJqA`jCb4l+qpVlaO~w51Cj+$rn(Hg(qJ zDrDOMmC3e{D)RYcDgz4cs4f>})3=Uc9cOHdD5mM{{Di=Ha`s3Rqag`=af>8n5w1X^ zo!`yzcp`$)*=V833UFr=7f>DZiNXMla z5gE9ut4H)G4o79BZOxFl6mC;xezU@q8jIILzu`gSwD=UfYJ0wO(aB`f&W$(2eF!4t z`EJHS$MF4Xrj*Ry_@+o~E|e?uG7)qJUmwOSU$uA(T#bhcUCLNxV>uJyoh1s|CNiUI zbu=zCf_O?1C4`P(_WI?)e7}XYD0o>v!{jSdB07%u)-rhfFgXHK1-B({RTiT)ZV{dr zR2h@`;tpo1iyuVX1AH=FyaiK5;RA($;&-Zced~g&DkrkrFe=L8gw@K5!ol0rcA3qg zZdDX%k*ks_iSqUNn;4(P))mYeEx(FMFiNA5{jxnjT5_X|aQQl-vJG4Tn^LR_HL-{D z6wI+`_$Kh!48~xw&S&+=d8?iLeVv6aXJrgDnfEH>ePrA&4k;FEjl{C(EzfUM*(Sy| z>vt@;8oFs5!777XwK7W<+i@@v20F<2vAOwUXxn1F8zUJmwCmsdxwm`7!}r%PrLLyh z_+3*Y8JvbzZ4fz@**UbT8*ay5K_W*1k=b}9NZs1+)pBeGG^SKKT=1JY@t+eNRpuw# zd(@iN$=X5AFsK1GNHQcuVjvF}W*lzUOlWQ%EnjqrV#cJnYZ=3(0K0|pdT>@fJi|$% z$t@1v=j2L-y-^j#L!bmaRc&E5855oBSED4hL9DZde)Z;jqfNEI87XGqdFp@*Q-N;^ z0T`H)K@b?rVzgWHN}#^V=csX&yX|eB+U6FIddymGv2wn#M}$NOkf1&`Z!*-h02zw9 ziHukpGbHD`Y@$HCXDMf6wHy-J%df*wS16GF%!U6Vu5I9=Lt(W7F&)2CWY*QP9(=3+ zhXq$#&cXbmlrreI7lN7RuVieVn1$O-?-@um4ieqTm?X(NWGnoG(+9C0F{c7IponD( z&2<^lIKVf7q73(4Kf6N^j?&@sT$_S$NH; z;OyPc;`Sy{eG2hSXv^8Je;kiB=+IA24&N(8hdwyo+3l-*;EPN5JbCt^ zdyFo8-VB~1&7?_ko_Xo)JrsDgbkFfOPP~j-J4Lr%-tO%gWFNg319#BIY@d4Z?7a`4 zEqvnaT~DIg>saOKr%GXIFP{CxQ%fKIH*b9AUUX`={-N>C_3K3bl{dcnB-IZ^Yr)% zHVrW6H*|FQwU-`#?Zp>g|H@0Ku7=gT^788+e{$)=$EljTUck*aKlX_?o_U7e+o-?N z?rq&<`|wB3-h*(lPn~_~MLd%hx!F*jmn|}a?B4w1=WuzhKQeC$@BUHZv%GBfP(xc|P^k zrTd=*VVJ{A3Sm1q=5Gt$di`5lI@jx;?(jBpFKcn@FLijg3vPYB%UhWf)o0JX{Be{f z9diU)n!^aHeBeQZ;Jxw8eR!LnJM2!I;&AudRa=EJ=62a#3iQS{TeniLs#Yv@R=dMy zcR)F`SE%h4wMMCguiEDEs4hpf-K9F=ytY^?6xHvvD~eNb*i^;twkef%XU?XX%^r9xE@z6KDeu?-d^jpRaQ2&cx*0DO-&;r8eHWy9=i>_ zsZi|h_PEI;#f5K`*}tX?NLLBpf`& zcLfcjRQAqG*$5y0T}_L+V)@dq{kE*xR+++dVMkTx+6#MZ=05ms40G#N40A9-ueJh` zO2u{QbeTrl^uN5Zho{xX6hDg!i{!zou++AwI zAKImje|VSlU%n>R4&4)XHoFe_{}x&6*Kar<2j zCmoky_A>lXt7|NppjW*^Hw<5^%ILq`E&23c{8Rm|T+#J3n>>if*d!tuU~AHP2lv4W zy00|@y%6@NeXy|mhi`Aa{r3H))9jTO*K+weu9u><9|LG?meOX>%rf6h8_^?>1o+>) z%Kc>6qt6Mk(SJYJRvTJo@!1ta*>Z%d;m;!9l^LyKn6}8qX4uhI*{@0-nNm9p5dz2R zOlUr>Kl^tT_4@x4vsUS!aCq$cEt4=!y!uKl?=*a1NyDkBg;L2Ztl?w;FI7_Nqwen& zswTqWVc4z)hli(qgM)#{*x+;|Ivw^0VAhI`jg5xJreiVx$iQ$o8uASfjZKGQgG0l^ zWB%#D=#XzZrsu!Rt8V(k2lIcWvHa)(spg!q?7qaYoQo!Of3r|GRM=kFWZ2)M??TZ1 zah+tBU?^T=e^+&xlN1yWzBfPz)EaXkU4DqfSu&ABD46*yVI9oy{5V{d5sVkP z(nxq1jxG4qrV+e%4El?K=rAtQUGwQ)yrCBr^qSEa6d6X57cjo>hHP6EwU2PW5IzV7 zLkxO0QMppS6!UJPD5`TUMeGND9F|Jp?XTsR3=?gMM98S{6!<1RBtdD%e7$xyPeu*v|?dE&3)_N7R?Dnq}aZ zpmOBdsLC178}+YvF@cJpfkgb>F)fNQr-?(nU)aEw&>aFgpnU*37$^!{NMsPYNKKwM zM0~NSW=D*kmB6v%Uyu8l^`GC5YQTC za0THei0DesY3tE$U?LV0MTP+dP$*|{wBT>ok`5z+7-YH)1UaQYtJgOIAaZe7ORts& z04E7%g*6m5DKr@oH*hZjq670CwF%=u1BNLy$E#SFNbd^Vk0%ZpJvQhSv}-JlJqCLk z4|nD$jJBjpmb$cl3VmA*x0vceEtsex^;0m)3dv1J!y!`cX=F`p3*9zvL&;C4F-pc) zVknf0tny$l%;X4)lrCD?a4(bq6%aN7;HRBHkWjCS6k?92(K2HiQ&9uFLYxH0ojDoH zJvpxjW(SP1B570N${fYRmY63q1D)ZZ2}MDO`5gK|@li1f`#jfG<_iQOBaz53Vwnbp z5#BNu^M?lfet*mt36G6LrbnYAaFhE2V?*$yjYNk>5h*i@?TK&LH|>k~hG})d{OE5? z*OcepJx=WHU}F1P&tCx$09F)e38;$agk9xKKpmA?3v_yWte8QEe;`!Mpq5hbnclQf zQ#%X_dneqO{?os%snl!bYS*Ph#@=Z>F3j*Gt zJ?TAHx2V;7X7;Ttk!ut#BOYj9VnyZJmmTnr4O~F$T6M$Z6;iy+i>B^Xtcu>YI*9C# zs(!7KJ^EkXs3+h(60kB9)%zLJRLHjJi zU*8)IY=a4lUt!C)(ZCFI>cc)omQR#PKNL>D>b@Z4?%r7lkk#Qqq^N)$j(*+|1wg^J zH}Ae__nsYBZ6wr{u_b#)T-o*=JFmEY$8|RukCcE~xn-o*0_maC*xs#yYn_MIqIVmp zEW~hKea#+Hh!Lxmh#(JxsVQS)SG2qopEdPr6VFXBE%Gn+X;;$DdOnp)QZPpezD1D_ z{U*AB@NovH>l{E?X;)jc@SE|YrnR0-0)5(U#0p=%XQPG)DKIOx7uYDT;HFCZ4AQf) z-B0BZ6PLoS${dDb%xUx}w!GLYx87`4w!hWbT^k#e=xiDZ9`I;M=LcNP0JOnYc(tLJ zgBYgCtXX>4jAJc<)+l2`6an2BMT*DU18jY%n-T04XeUH^JHf;-l4T@s(SW9zDRxlH(MI@@BLGi-EBH2O=lm{N1Pwj*M5Fb-&w2);8sj&^2@QFw4)hT^!Ha;y zx9%&i6%k#y5=^*#=-uiIk(RoQ{EpOxuf-P+u) z-!bo4uitUJ?fRThUiLHB_g#;>=3QG|Zs$*&&pMAgcR4l3FC4F)pMJ;SQ{z`ZzsADe zkz-9m_C5b7j$WjE-8q?k%m)^(6a)HK@@*|=!uht3*$86y7kW#uxlymZukESaMe4dx zRY>e1Zhsf$Q@`6QPQF9=Trmrg+1CI11##OuJg}zxo1YVd@231ue;{sMTRwOGyqIZ` z%m)2exdfwwRJ{XucdyD9(e-0#Klck{q2FN&MrP5Cdy#7%Eke)~!yD6_|(9Tqpf z-2>;A*Z)c!d*Q)0iu_Yfm#OzEr_b1*ZF^98-_LT^rfaIo#_~7hzqz-}V(AnRb0jKC z%e7@nSwqz&EK$S}dj5W)T2EXdM02G@su+|Ugg~a$DP(HOL}zE?^j!;H0ij<^1Ehr! zFGTjh>0{c}uo1$omIit@JY&F&jRkKeIy(;xY>##*kz4?T`e2mM$>zq@M8Xxzrqem( zb}-yRfGiW32I*@MFGxvDVA>(09K|)EE#cWL31KuWjkFA)9h8A*e z>IXh4y|Y?nfb49mYSjIfdTq^x!;AJ#`>GNN{hR+(e^P&FcYTBYz1{VWwhKBleXE?A z|Md&{@4|9T&M;__HO~l80HH^+ut37tUV_gR-I;JtWzt3Tekmu_a`-+eTF||diQZM7 zN7J+l=LMNdDId;i+cxPCWEjeYjv=wm`DQlL%66`Ot(dQBm3xB1_1E}dXjin_;#%^c zn4SW|`j1EqGOQXf(94ZvOy)D^_(=>q-?_CJwl#Pj2uirDZNo-|HRO%}>s=cO9 z$IvCnBz;8p~qT{rC1+up`bz2;#`F*UW)wc4qPFfXhm8iUg(XCf2L zkfdd#Z0l6XwUEKU9E_%VXy;9RHyXL@L0fTvA<4x&0j#0n)7vjXJ0{1iv?-mOTIM-&`@y~fLD$Xr_7z?yAZ_QM#~ zL!*#+Nq_cRvUC%+{aDA*qax6EHJy@C9-{#oiDI)w4PTb2D`8au!o#>S>W_p093F}ejKl^* zL!*P?n107K);fbyjh4SRVm@a$03eqxVjLpDaZx+2ISU3q|DmFOXGzxoYlwP1SzlFO zZ<6pvXeAev_L6bK5clsZiu()qeQgC7miT5}?;!FoI)3jc^vS$Nuh{d>azD4$aquUX z`#DOEH~rqp{hfy3Cr18PkoyK9g{Ax&`1!Jw-}f&T^F?}rXdt1#vPSJ|JzvuQ z5e0qDTre&w=`T*!B`e>*Ow`w0MAjQAC-+~XaEEWe=O22P@;z#R8(-Mk!GE$tC~GY% zYZYFT|5kX7{;e2w=T<|}dt-i^E#FeJ-&$$q(m=k2%hoQ=fMD7#@SA*qbI^am2RzAj`MnH} zb*-CTgRzq359IeSVE`q<`Q4&01Oy8*3JwB|bBN(vKT9)V7>5rrL4SIKw^i`!kL+r1 zEEjn`Ez9Nk8!U3idR5>Ddi5V|@OA;iG&WN31E4|=^Zez;(>%Y6u@N7xw=i*Zi0&+2 zE#NI)7PiXu`Rjp1v5MRq5O}x(}3y|P#v&BR;%2Szh2>U8w9ip zh?Aodvv9d9e}lqq6NHgM4ltNXtK!e!@P0uE6gIGOE^o|V&)8T1Z?{UURS-rAAe55j zZ5R?DKzVb&AdF!EuFUV{$hwEDcV2t`O3!q@*@KLhjC+A+K~_pWO^7)F^!78!h*hHg zVT_Ti5`ecGr#%=ku5_RgW zof+qnnd)+kdjQh$^l=Mp;78&>cA>R0GZ9Xl0ge>la+}CWodjYJP)dhrDcUor=p+Lk zt)FjJ0a45WEs9r;OV;JoXn=uu1a86x`J!y)`5F%3nzwvQc@wZtiwD<9Tyii#j|TaA zCueS?tc2+V@9J0bP8Faeg7D?5CC(iL;{$q+=Yzmj#$g(v^D03AJdfSMcqn`jxGlg} z2b*j%&j3ngbbP9UcVUnK`eVQq^~?M6jhxAZ@We!ySy;6wBP(1ic@+2~tHSDv_&PU3 zy&bGh0Ib!lsLjJZz}N(1TlL!mo$GS4G@pc}2cV2=MG?7q(9RPnQ3gys6q&}=F2-&J zt_&D93Gr?yh}O1?A_9cb-eUgH4%W{3A^@wvVbuXhdmUo{vjzdz1#Svx6A6GPG;^4M zeO?B-B_lk>bUWuc$_4^Nmet|pm7suP_EE3AxaoQin`gWSz3%A|IR*8CWOk_vI?Gs_ z#AoAS0?o<^MMI$*PjP%vilP5GNRXaXy3` zMMXdYf#|1!@6)ZLos9qsFW$i9*hm!lIMA17GiNK<@PJ&w*P~(Ufw2R-Rp%S*6&1F8 zrd)M!8F~CD^(tDj$r#Zt)#k6vcPl_m0|XcVbA5f+Zn_XJ@UyZB~gck7XVS5b>!%w)Wn z00?#2(dzK9>mMHL?5*>#1;z(KD9F$&gKsH;YJl~LO!tj-cC>b29T>HDbHy%oI3$Zx zadOFB?#yScwGLOgMYfCjPt&f>CPlWZK>R{D^a}DG6&CJV1F1~8el6Yl4}ROxodZfu zH1hru?TyKH0z=zF5YO105{0gl#d1{rp;|)fW`N7=K$cz>6bR7X@02{P`A!u=kPxwp z+eOHqUJNAw`~bjiX{l-RbiA)>*uw^xWafMI${i<$2x#5GDu5ib=A4?yVg~1DMUl|? z{VXD?(C=qw4HGgZa>n4nValDHiNdZ>=r7-E<}283w#9?Y3J_0o1{($l$~lNc zv*NAEX$+hy0vt|+;74B#+Q3-U123B>SI;cSGomO6uDH*ndZ$Tq9f zcns~nJm=sWoDx#$0`@xy>?|kyAO=Sf%JaQGr_bu2khlOaHD3&f0t7R^(+%;m8;u8? zm-jo30bqwHiLTd~@5;1YFH0Wzuq-iquPn6}j~zH-#Y!>2Sn1Tf1mHCZ(-Gc@)D7WzG-$ZeSn1pi`3B1e^HoR)u^4jj zu^xd(C8lW7dgFH&R3M;wQgM*5w=#w#w|=9vhlg>$DQ6UGlDZ_BK)UYwVr6c;9!aE8 zq}eFZj1r{hR3Jbn~p z(*aiHJFspZf@=gLnZ=FVY!WoxCEozpx=8tqA=W?9Y8*_Nzqh|u9IY3gR&0EyQfGr5PjL3 zKy-t=(@7bQJ6IF%^8m7Wey#zKq8)OwhRONsXBbD;234_IT}`qARkxGTZ=_sCU^A+} z*-C00*Z*6_)osOMI!4QQwceO@4Y@g42tnnOqOgENK;M;h9d75cF?0}Zb{YDWB(Zh* z8vy^bg3FK~1gRpJqJJ~%s_Egh?hF$bVX;vcJA=;6BEzV4)my5#q|kra$uSN!kX1kK z^>*Yq?{Y%RG2Hoh<4&IGv({NH_@Ok&L-<(fL{V#j*Q{{bZI$*~o4rcIncImh)=our zxhiZfyK1+1+`x}2s>k87sdmL~^(q#%qN-d)iUNBz5UO<^M|BI3@JM)VZ?RXPoF!+o zDtO9)Yn_VI?rirs6cu@v-A2w6SB>hjxUOaex|++Q-djw_eNu+&>l2i7enOU7 z>ICdCCU{$&pp*=F`08mWWt*QMO^BeHxVjF?XE;)rU`QiDl#Hdmlx%*2SJn$Q*fEzg z$xpBe@G0pG6TG7?S6uriN~z>0C^>m?1)kuY*yTYpm?*B06RNVVPA#UDpKw~LrE1B6 zZo!I!tuZRBty^AECS?02l!W;ck6$K`@{vFZ>KKkhx5yU|&QY_G{M|Hf;=Wc_%G3=7 zTCfyT&!N!!NKVfbCY;tAy5BgPGZVLuvs(pD zE($za=W;tpqZ(&%gAB%b-$pZG|F~S;1jV(O%6*(gp%o-h4x2nGt`w(xT$XItL(eAZ zJGG?nW#k#We5Zke{VA@8fJAnnYcv zG(Xs{jk5&ORv^F%XR<&G{5XUawttlWeVjY4FOd~e$t)*;A7{Cnmg#7m-GY%Z@}P|K znyykZ_;I$^NCrQSv<<}^NaOqiE(YBn4k%PzTVwoDf^ntE)&^>$EHLBjdcnGknZ*n? z_TUbpu5hP=BHF9B$bNkf{EM;io-`vJJvdb=quJ2gI9QvDjN7 z5FJjy_JPEwJoJ=^-fpvctTu-OV10V(%q<1)7p%h)tU|xR=a-OD^!WuoZ{hQETzeeU zK3x3l!I3_Ge0*m%Kj{6=W2$KRRhh$QJ81cpA^5g-{>YLm%sg0Rmitg#tS4p(@>$j3 zmLTn~z$`%)Gk7IP6b4QSvWT!ML+#rqs72{HldXd6Dr3(RB+>wT1^G~}rNm!BxzQ#; zfQC`N7P*^@Kazs;eI}a)DRqRwWLT z(!LV61sRyQM9M*yvlk_AkY!EI3$hgcWI`0sDO5~5NAO@!*<^8J^8pSGvdc~03(BL_ z4uQ{5MwuYfkXwdiZxFjSQ%w)DDuWw?Y`-WX2{LY3h%JMxyU3P7#a5NG*@}!AWEErq z2|})z+ES1#3`tUCg4m6NRfFa0YAjes!Kus=GV>tgUdsxj2Khi0vqa34!nhU3A1_(< zNa8zqlhX3x3~Dua6aDWX`$^Cc>mc1A?e-1!4YKtH`v&nB9*XQ6Wc?-Xg~el;dxK;# zqV&ah`qmQb2KiV^iFJd>79<&<1C)T~LIVrNHU6SQ4(Ism4ki-^`9_zKc__#Z8O$7% zl}-4=4aCbq?sTnY<{%51tQ^Fa8mt_2wjoDGm7{ireS^qX1@;Zft+w|S892ybX$1cU z@g9bDkVqs_< zPzWuMp(>JeI2~?SZ@|ko8`LH!F(`rSMb1a=j%9TtSN5Lh8_ViOuK1^G{>1vmvbvEo z7KT5$zOk%sK9nB- delta 42211 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 diff --git a/state_merged.db b/state_merged.db new file mode 100644 index 0000000000000000000000000000000000000000..33286f4bd582ed76c8b5e0840cbd3503f955b7ce GIT binary patch literal 12288 zcmeI#zi-qq6bEo$iU1*<+O5+`RwpV&{80Y^jw%Cck>I$2PL?lm4~v`~?B@b|hptHd zpZJ#;v6EQs(V=_!Mv41C zbwqO2DzCiP*7$raju+K@S@Grk?Pu?53kJ)=8%fi81NTPkEA#R3qXhGEJf6 z$~6CUg;Ua7lk>%@?%*=~#VjJ&E9lRVlfw zDacgYRz}6o)HF4FslfpO2tWV=5P$##AOHafKmY;|fWSi)c$Nyo{{NvaFY1B- X1Rwwb2tWV=5P$##AOHaf^a6hY)~ny9 literal 0 HcmV?d00001 diff --git a/sync.sh b/sync.sh index be69c1d..3ed8b7d 100755 --- a/sync.sh +++ b/sync.sh @@ -8,24 +8,32 @@ cd "$SYNC_DIR" echo "[$(date '+%H:%M:%S')] Sync from $HOSTNAME..." -# ── Step 1: Export local state.db → state_.db ────────────────── +# ── Step 1: Export local state.db (via temp dir to avoid lock) ──────────── python3 << PYEOF -import sqlite3, os, shutil +import sqlite3, os, shutil, tempfile local_db = os.path.join(os.environ['HERMES_HOME'], 'state.db') export_db = os.path.join(os.environ['SYNC_DIR'], f"state_{os.environ['HOSTNAME']}.db") +tmpdir = tempfile.mkdtemp(prefix='hs_exp_') -# Checkpoint WAL try: conn = sqlite3.connect(local_db) conn.execute('PRAGMA wal_checkpoint(TRUNCATE)') conn.execute('PRAGMA optimize') conn.close() -except Exception as e: - print(f'Checkpoint: {e}', file=__import__('sys').stderr) -shutil.copy2(local_db, export_db) -print(f'Exported: {export_db}') + tmp_db = os.path.join(tmpdir, 'db') + shutil.copy2(local_db, tmp_db) + + test = sqlite3.connect(tmp_db) + r = test.execute('SELECT COUNT(*) FROM sessions').fetchone()[0] + m = test.execute('SELECT COUNT(*) FROM messages').fetchone()[0] + test.close() + + shutil.copy2(tmp_db, export_db) + print(f'Exported: {r}s/{m}m') +finally: + shutil.rmtree(tmpdir, ignore_errors=True) PYEOF # ── Step 2: Git stage ──────────────────────────────────────────────────── @@ -65,42 +73,26 @@ fi # ── Step 4: Merge all state_*.db → state_merged.db ────────────────────── python3 << 'PYEOF' -import sqlite3, os, glob, shutil +import sqlite3, os, glob, shutil, tempfile sync_dir = os.environ['SYNC_DIR'] -hermes_home = os.environ['HERMES_HOME'] merged_path = os.path.join(sync_dir, 'state_merged.db') db_files = sorted(glob.glob(os.path.join(sync_dir, 'state_*.db'))) db_files = [f for f in db_files if not f.endswith('_merged.db')] -print(f'DBs to merge: {[os.path.basename(f) for f in db_files]}') +print(f'Merging {len(db_files)} DBs') -if os.path.exists(merged_path): - os.remove(merged_path) +tmpdir = tempfile.mkdtemp(prefix='hs_merge_') +tmp_merged = os.path.join(tmpdir, 'merged.db') -def get_schema(conn, table): - cols = conn.execute(f'PRAGMA table_info("{table}")').fetchall() - return [c[1] for c in cols] # column names +try: + # Create merged DB with proper schema + conn = sqlite3.connect(tmp_merged) + conn.execute('PRAGMA journal_mode=DELETE') + conn.execute('PRAGMA locking_mode=NORMAL') + conn.execute('PRAGMA synchronous=FULL') -def copy_table(src_conn, dst_conn, table): - cols = get_schema(src_conn, table) - placeholders = ','.join(['?'] * len(cols)) - col_names = ','.join(f'"{c}"' for c in cols) - - rows = src_conn.execute(f'SELECT {col_names} FROM "{table}"').fetchall() - for row in rows: - dst_conn.execute(f'INSERT OR REPLACE INTO "{table}" ({col_names}) VALUES ({placeholders})', row) - return len(rows) - -# Open merged DB and rebuild from scratch -conn_merged = sqlite3.connect(merged_path) -conn_merged.execute('PRAGMA journal_mode=WAL') -conn_merged.execute('PRAGMA synchronous=NORMAL') - -# We need at least one source to initialize schema -if not db_files: - print('No state DBs found, creating empty merged DB') - conn_merged.execute(''' - CREATE TABLE IF NOT EXISTS sessions ( + conn.execute(''' + CREATE TABLE sessions ( id TEXT PRIMARY KEY, source TEXT NOT NULL, user_id TEXT, model TEXT, model_config TEXT, system_prompt TEXT, parent_session_id TEXT, started_at REAL, ended_at REAL, @@ -112,8 +104,9 @@ if not db_files: estimated_cost_usd REAL, actual_cost_usd REAL, cost_status TEXT, cost_source TEXT, pricing_version TEXT, title TEXT )''') - conn_merged.execute(''' - CREATE TABLE IF NOT EXISTS messages ( + + conn.execute(''' + CREATE TABLE messages ( id INTEGER PRIMARY KEY, session_id TEXT NOT NULL, role TEXT NOT NULL, content TEXT, tool_call_id TEXT, tool_calls TEXT, tool_name TEXT, @@ -121,40 +114,50 @@ if not db_files: finish_reason TEXT, reasoning TEXT, reasoning_details TEXT, codex_reasoning_items TEXT )''') - conn_merged.commit() -else: - first_db = db_files[0] - src_conn = sqlite3.connect(first_db) - src_conn.execute('PRAGMA wal_checkpoint(TRUNCATE)') - - for table in ['sessions', 'messages']: - cols = get_schema(src_conn, table) - col_defs = [] - for c in cols: - if c == 'id' and table == 'messages': - col_defs.append('id INTEGER PRIMARY KEY') - elif c == 'id': - col_defs.append(f'{c} TEXT PRIMARY KEY') - else: - col_defs.append(f'{c} TEXT') - - conn_merged.execute(f'DROP TABLE IF EXISTS "{table}"') - conn_merged.execute(f'CREATE TABLE "{table}" ({", ".join(col_defs)})') - - placeholders = ','.join(['?'] * len(cols)) - col_names = ','.join(f'"{c}"' for c in cols) - rows = src_conn.execute(f'SELECT {col_names} FROM "{table}"').fetchall() - for row in rows: - conn_merged.execute(f'INSERT OR REPLACE INTO "{table}" ({col_names}) VALUES ({placeholders})', row) - print(f' {os.path.basename(first_db)}.{table}: {len(rows)} rows') - src_conn.close() + conn.execute('CREATE INDEX idx_msg_session ON messages(session_id)') + conn.execute('CREATE INDEX idx_msg_ts ON messages(timestamp)') -conn_merged.execute('PRAGMA wal_checkpoint(TRUNCATE)') -conn_merged.commit() -conn_merged.close() + for db_file in db_files: + name = os.path.basename(db_file) + # Copy to temp file first (avoids WAL lock issues with open connections) + tmp_copy = os.path.join(tmpdir, name) + shutil.copy2(db_file, tmp_copy) + # Also copy WAL if exists + if os.path.exists(db_file + '-wal'): + shutil.copy2(db_file + '-wal', tmp_copy + '-wal') -print(f'Merged: {merged_path} ({os.path.getsize(merged_path)/1024:.0f} KB)') + src = sqlite3.connect(tmp_copy) + + s_cnt = src.execute('SELECT COUNT(*) FROM sessions').fetchone()[0] + m_cnt = src.execute('SELECT COUNT(*) FROM messages').fetchone()[0] + print(f' {name}: {s_cnt}s/{m_cnt}m') + + sess_rows = src.execute('SELECT * FROM sessions').fetchall() + sess_cols = len(src.execute('PRAGMA table_info(sessions)').fetchall()) + for row in sess_rows: + conn.execute(f'INSERT OR REPLACE INTO sessions VALUES ({",".join(["?"]*sess_cols)})', row) + + msg_rows = src.execute('SELECT * FROM messages').fetchall() + msg_cols = len(src.execute('PRAGMA table_info(messages)').fetchall()) + for row in msg_rows: + conn.execute(f'INSERT OR IGNORE INTO messages VALUES ({",".join(["?"]*msg_cols)})', row) + + src.close() + os.remove(tmp_copy) + if os.path.exists(tmp_copy + '-wal'): + os.remove(tmp_copy + '-wal') + + conn.commit() + conn.close() + + if os.path.exists(merged_path): + os.remove(merged_path) + shutil.copy2(tmp_merged, merged_path) + print(f'Merged: {os.path.getsize(merged_path)/1024:.0f} KB') + +finally: + shutil.rmtree(tmpdir, ignore_errors=True) PYEOF # ── Step 5: Push ───────────────────────────────────────────────────────── @@ -171,36 +174,36 @@ fi # ── Step 6: Restore merged state to local hermes ───────────────────────── python3 << 'PYEOF' -import sqlite3, os, shutil +import sqlite3, os, shutil, tempfile -sync_dir = os.environ['SYNC_DIR'] hermes_home = os.environ['HERMES_HOME'] -merged_path = os.path.join(sync_dir, 'state_merged.db') +merged_path = os.path.join(os.environ['SYNC_DIR'], 'state_merged.db') local_db = os.path.join(hermes_home, 'state.db') if not os.path.exists(merged_path): print('No merged DB, skipping restore') else: - # Checkpoint + close local + tmpdir = tempfile.mkdtemp(prefix='hs_rest_') try: conn = sqlite3.connect(local_db) conn.execute('PRAGMA wal_checkpoint(TRUNCATE)') conn.execute('PRAGMA optimize') conn.close() - except Exception as e: - print(f'Local checkpoint: {e}') - - # Backup - shutil.copy2(local_db, local_db + '.pre_sync_bak') - - # Replace with merged - shutil.copy2(merged_path, local_db) - print(f'Restored merged state to {local_db}') - - # Remove backup after successful restore - bak = local_db + '.pre_sync_bak' - if os.path.exists(bak): - os.remove(bak) + + tmp_db = os.path.join(tmpdir, 'db') + shutil.copy2(merged_path, tmp_db) + + test = sqlite3.connect(tmp_db) + r = test.execute('SELECT COUNT(*) FROM sessions').fetchone()[0] + m = test.execute('SELECT COUNT(*) FROM messages').fetchone()[0] + test.close() + + shutil.copy2(local_db, local_db + '.bak') + shutil.copy2(tmp_db, local_db) + os.remove(local_db + '.bak') + print(f'Restored: {r}s/{m}m') + finally: + shutil.rmtree(tmpdir, ignore_errors=True) PYEOF # ── Step 7: Sync memories + skills (additive) ────────────────────────────