From e01b807b5f22408985f4c8ff532187a46680017e Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 02:08:30 +0000 Subject: [PATCH 01/16] docs(kilo-docs): add Allow Everything setting info to exec approvals page --- .../pages/kiloclaw/control-ui/exec-approvals.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md b/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md index 1188f545c43..794230a467b 100644 --- a/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md +++ b/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md @@ -23,6 +23,18 @@ Approvals are enforced locally on the execution host and sit on top of tool poli | `allowlist` | Allow only commands matching the allowlist | | `full` | Allow everything (equivalent to elevated mode) | +## Allow Everything from Settings + +If you want to skip per-command approvals entirely, you can set the security policy to **Allow Everything** directly from the [KiloClaw Settings dashboard](https://app.kilo.ai/claw/settings). This applies the `full` policy globally, allowing your agent to execute any host command without prompts — equivalent to elevated mode. + +{% callout type="warning" %} +Enabling **Allow Everything** removes all exec safety checks. Only use this in trusted environments where you are comfortable with your agent running arbitrary commands. +{% /callout %} + + + +{% image src="/docs/img/kiloclaw/allow-everything-settings.png" alt="Allow Everything setting in KiloClaw Settings Dashboard" width="800" caption="The Allow Everything toggle in KiloClaw Settings" /%} + ## Ask Behavior The `ask` setting controls when the user is prompted for approval: From b376032a85d0518484555c5af456f6d59ac2a35e Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 7 Apr 2026 08:44:58 -0400 Subject: [PATCH 02/16] Add files via upload --- .../img/kiloclaw/allow-everything-settings.png | Bin 0 -> 144191 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/kilo-docs/public/img/kiloclaw/allow-everything-settings.png diff --git a/packages/kilo-docs/public/img/kiloclaw/allow-everything-settings.png b/packages/kilo-docs/public/img/kiloclaw/allow-everything-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..58ecac341cde36a142eb20a5d082e8fb2b1c1fda GIT binary patch literal 144191 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

b>19&0|l{?-`O-W~( z9VU@kSziI}a+P9>N}J|hDZsV!$U|>i0{S!a?{B@!aGp#_rT>}9KO!^#5u*w2zjJmE zj@y9bMe<*{E=G2VGr-N@AZQ@>Nx!6{bcz^O+S({w{km9<6CW96l+1aWhwfYbsuLCV zgV|PAA^F{8JE6mHU&r>}uuah_a_nTy__j@#pZ1%dwKR={c+c~MZ3=S_P9YiWA# zHktLK-??#GkWAQFXZ*l1%36^j){x@ zQ_$K~N;TKEPn1zC!TkF9Nnw}$fmF^(j+`#59%}|l&RXxKv|9$TM?eG7ucQSYkAY4Bm;ASOB zSO4?7{>N9D%4cHL8dI*=cX@h~HATYXh2Q!72mcX1{Kv`pH>*Kk=y&#L-dFzrw;pK4 zz9^O#5)zV*3*B2}|L1$XeYTuyH~(+;;M(63@xKBV|MM|syb6dBM>??Kg8%2+6?+y8 zUe6JvuNYA4Pv}jS5oWESZW>N~fcA7g_geE&t7V6ItRx zSR{H76HO?s8!rxA!E26;>-Ixg;;2ujAZbMHwnJwvoC0-h=2Bb%rihz-weY?aZ z8QG$?muFSI5nzx(5aUABY5-2a*X z&=TVKba?C@v&5a#?p|w+-*G9n%gNWqSFr5_C)}DO)RTy}Z2nGYLvJeh?i7E$f_Zj9$=`L_Mm4am3%h6j z+T0rf4|PeHSA3ioz0?vNH)DjMO6T#PWtQh|r)gf`9<16FvN4`I<=g_f?H(2OFp!TE zRW-eO=inn_aWsUsqI{2@@`E}gbDZmct9=uw{?fbG&h)NLh91;{VRdg#1zxqwazU_B z!>(i88eci4)@8FoWR@HcMTnR^DO?tm?zAn`{$+_DP85IBZP;!Ad-zUyi#!Chv|jyz zNjmV9RyF{K=7xP@S=zp_G;bc{RKL<>^CS8Yo^yPZPmuAZt7?vrNEK`xkeS3R`en$rX8dWg3HRLl=nDcG+Q+^7)1$KLHC@ZV zq}Zm$7|yyF>t?)CbCX`&FlLnSYt=1%pf6m70OyO?d-#g zkDdUZ^c?KpdwaGwqc6ymETF*=D|CBQ=PAOZF zT&yaY&M2#99vKbP9vN%Y9)6_q^fqi~Qmou-7B9O389F2BUwt(b223j*3UQ>&!w#_mrB#`sJlC%x8r>zpn~E$&QD zlOCi^&bJ21ZDx!I4Q|VSEAEFWrDsgtv=-Fv85jH#$bPD8n|P8p1!*$=VPH-G)Rz!W z#}+KvRBE1RZ&c^KZ!Pg@C@tntAtPv~;bh9>MS!Vzk8O45sBQJ?eRi>N7{a##8wB@n z6vo~Q=sF@M8Z{0spcYCGB8?A!hRL@t`5O|dnosISRuM>%aRlo{(Tbjt9V^VQ#qC;& zowVr%2n1(dG7-J60jtpBHB0tScJC2g@e7}4^#Ao^<&tdlxAIv_?M>{n65Gq31?H#2b=t&XGXV)#Ay4HU%ORL%R{tld$Pc z{D%yLNL^*qbZn@H@D&`J6`_Ne+a9it+L)FAXUz~hPI4U@eUB)qo|eD6{?ZCEc*kZ%5E3;e z+0-MbfgML!V9HdF12)?)5m)l04pYBv&7iQNCOamAHaX72Bm?}L)4i%ZXN6JBV7_+8 zcr=@BwheI~LRv|;2_lwX^cRy{p3~`_+wef|%ml4w<8gi{n;fgTlhv920O6IB$V(ww z4Hf-6Q(0ZTaq{io;vh$37qoHX(A^)&Mz4 zwS3i5xw%4W8T42Voh1%mo?OKvoA)bkkIgbZ+u9Y~Uw>h`UzRoZ0GF+BxUYbFS-2my zRaQR^GM=y>j9OW2pH=I!&2c;(0}L+ys7Ar}j3!Q-gg-=B_wJT9wwXD8vu?#zv_DA- zD#UlL*X+SodP%fPr3VMaD>FE^O5)M}WXEB*MIhsz`R*-JT{xcm!pACrX(R9Iq#$mxNi4~a_ zmI`!BzSY6a7RJ+-QcDu?*v}4$lk+$o1y|a6GyUbN#iWlhBPtj=3G!@g9_&zt3zBOp zV*z7ypL6~19l!4Y&S{eXA+)&)OM6RCp=s}TPiuN4H?aw8mXl8l%m<%JOmV{NVTq&e zlP#r|X_N#m7XE6r zZakSVOqoryaAfZrmECz{^+Ze%$bC z;$=>dgc^fSOT7*OzRRH({smL+*UCqJe_7n5k5<-E*bj{95aB4SJuzKT=Nvoj+D9O( ztwmQ;Tu+;Kjy+d#;OxFP;JwrKaE`$ykaH*ghp}z1LlXEj2%+cCkla5#9L`a-Bjr6b z!HuUeOV~Me4Xoh~4OXU(@&9>2qWMVw_3=W|uV5}`O!Rv|ANxA_q%P#V8ro@>8WWo; zyY6abDqiv78+*p|i2tL;HqJxXn)vBnbxKJNUb~S_lz~!D`Zw6y@abdWrZvkgogcLA zQo9#F4UHYl=9TEuJEUDO&3>xWn{#ji`#Dd{SgH^|Ec~=jW7F6=4k(X{hb_@LrKx{# zr?MzvQ1i-S@0aj~FW`#yUdQ*~PR8qpV=e5uHR{|FX|6+C$EPO^{pf~z#GWR1DJt4E z2Ao;hJhgT1bC{5UzK`o^hUAXn{ll3=*_EG@33smN@E@GKQ$RqeG*!l(R`Faw-YZik z!|jQ+_%EZa_PkRH=3{4dIx_xWOqK}E1i4FZ+8uqp4{Kd)==2NQ5~X^3B@Rz&?t$7v zms(+=sOVj_8xDTYebNc|3%xE;%6AWfN_Y15UDkrL%~mdiS3PKiZ;bvh1{0=I z*f~rF!f>(Ew}XzU@p*eEI7ccP6#TUL02`WYJbLPXRN65Mq{Nn8z-<^^xbflalBRB^ zkdT?x_#xKmT}b?a`B7@-tDR_G@m=cgZ`v6Tz@I$2d*!(*n=ifhsBA^_+codRx{P~h zmQ7^q%xzC&18HE2_S(Bcm1ZS3FerEDGe*Pz4v2Fl0>H{lpcbJD6wi0PJuys++fD6f z3Kf==ZMaQ1*W7nO9J%nN==8?vt-5bF6a8$HLPSABh4+8TYY&ZYUK0il9QC1S9x_52 z=1xp7QP;-ZE`}`l>10;6wt_kC`uw(p>$Zh)A}V=IGGGmLZv{Nf_V5?!%7;`lnx;Di zSWeBp(2h*U3@9>*&ihR z*1J})Mm$A@$aFKZ#lU=i(&Dpf`~%wk43WW;(bbedr5nzsqX~%(ogq8J)ri6CP>q3t z(_!wy%tWN(AJEf3Kt3_)gtR-69Z9CJ6+1!0vFbN<;WE-8PffReFQ~t1yiMg%R_9ln zX}cKYHU6Y64?3P(6U`!al@bB+RhyB<$cy)k1YZQT6<3esjLu1pGJ~T*&UhdTEHAaT z36fISewB$lDjXjwI`nz~m1bBsK6UIlCi873ol6wZF<%}GuW#~NLs&~=LrHu{a@ya&Sn~`GU z-Y9gRbH@67z%*)!ue+wFtfz4}bZhT-_BNsw^(c^pqp|476Y-lu#+mhAfUB%+mAp7q zz!+T{XP`Sjc1@?l z&MdMFEu;#%Jo(bZ)FAjVUb)e$e@y^4H0u%@a?d2>69 zks%2DfrKv3v(ihUS->-O;mj*2?92{XG6@S4tjD&xi*_U5hxk}-cgFh3XX7rj1(med z0m@`R`u=|lP0o>>g@sO}fy4*kxv!tc4!?fV7S3DO8-75!a?N54Uw3UH=T(UE9Tj`- z(oB$mpVRfLe2^IW5ow4j1q1vy^4XxY<+6#T{StfRlhziwKr8L=LNLF?C(Q=?#gC?1 z&hL<`cG5gh3Myfzm~T3qGU%~|gL_w9nQu&4S#CzpzjH-Z^B~4xlRQrE@+YSS?QWr- z7h11l2Pd-WzqU7A)ug;+cL1ER=8VA?MD#d2{8m`(+kBXQ->gVRhJZO=Uq05iQpZZM z(h_JA`HTQKYe}@RxrH{_Mo3BghTweF1X&8UZL( zq_+vG^|Z*c>Jg(SB+x-${8s7$DtZnkVtExh?1xJnVwpbOlj%hDYi$3X3FSEIzxymJ zlj-acdd+&;67Z6^X78r+_>g>Fijo{GVaY1 z?RwUG>_(QTMDd3(m&?NB$_xY@EF4#OV(24*P$(sa1WqO5!LVH zjS8%84MPaS_Top+>}KTdesa|GacaU?Ar|~Bi1*sk1xdo%%`m>j9)MyBQ5%+JaCcjg zE{E@EM+~vr{+=Ooe+}c0ym9A3nAK@G?h;6B$s3fkvWow@C!tBaQe{3&2iN$Xm;-O< zQVC~05od`UwDtfJv-hTV+}5c$l=b*{eT8Yd1U%9FUZxx;#-BD*f@x0_?%+&BvM=#6ZFVj~_oi235LDA<+jSjE^d^#0eZz%-1NxiW8F7)vBf za9~>E`-o-GsAOhbg)b{Kc5+hRcYQSWywP=gaMF3sJ~wHC2i}-N$}C#f_F0TWd z=IlyWF87uJGRPyhw=GEb>UK)l`uJpPXuFR@s^!!G$=kPQ%i1fI6PvN2wK>7LLj0o% zft+|Ox?!1bywy%QIuVqGKOBB#5UAWL6Ut@}PV&vjc$uZb3Y{lu7Z6^%|dDkmre7TllI5g^ds$ny)%vNYPwO)RtbF3bi z64o8gH5@(1X&0~3)#vqa1vcn3PqWo86NOhk)Y}{owG9;#zgERLkYMX!-;q$9A zDxbr+E5C_boeI+DuCHduUCwP7MspM%hr=S(B%w}6nc;7%w>xcWPl5_z8v664W-4`e zfC?{lnRcLbLg0nzw-YF1HcJqVHZ3F4dBDvNbhk^4qg!wu9>1XeKX{_=0Z&w1O@0uF zZ@Ee=>#x>2Cz@|=)9S-H;X4k6sn6@ThrA|U9BW|Jq^-tvs2&Zo8MG-mOJ7jx5Kyp^ zU)=#oryQ2vs1-1Npvu?2e|>%oK8DZ8KdBxo4(x&I&b-a0JGwtE{@1Stun zq(P-cR7x5I>5}dc$)N;>4hIDkDM7lWW9Uv15$Wy{iJ?bo1_p-NH@;7)@3a5-j(vQ` z-uwIghr!H!uWQA*;#^ldpXireC9VXSfLCZ__<;MgN9(8%6KS?;f8>!mYio1S{0_o= zIT|`dfLIFQ z-ROmLi=TeM$z)73R=F+pX;7BUdpe9QdsPf_qblC-C>d@%WqmbWt6i(W@AOt_H(Akr z%5>IaKVZ_k9JWh}*X_}-QX*ZFjyq$@OzO4>JwzN5qS7|aO_Dvqu_puemDZ+3)hfhr zLek)4)=N?yDaq{>(WXxO``zRI{!=4G(We|bvA2Yb_h6)WQ?Opv6ZDHqFC69kr$bT> z7B}wzbXv|%0TN_+5yAb^(_DT6lj5VGXG6~FT@Hf-1j;2_?ODJ)bcYGZrBC9lu}lJR zCW=D3pX1-2`m+O46V{9s@=`{W%`fkY#RBsg+tS-TgCEaypIe(U>ez>>rSoiMnJu3# z9P3%m6N|MDg-Bd+T|a4H9#BYlTiz5kPhhQ{$!9yg-d`OnQ!D6)hWHOt5*1aV`~iOWQJ`sK(^y<`RCPG9ZP$!K zz`;(c`-XU``#Sxh`@z zmbUy@P&7rLNpta7T>50~_HO5`R?OG8eYuOSqaSO?337Z7E>Sn`id+)G17!Kp*?D5# z6fPY_bcNg|k*073S`;q>Oa}RxnSNoz?)Ww)$M-Zbkf&>V%=a=#I?|4P-P@5$YrHVm!t|EGdZb%iTq#%RR4S`VkHuM{N2p2Gx{TAYjb12|8ZXM#ddBA z0%99<-qEpQ`-AN&g<6#Z0;c+;hcpDBmy{7*zIPUdNJ+4vaEh|CRf;mJ7ELmucB)nW z$q6psqkBYL3Ar6yoJ0cu)JuB%)C1%nel~DzckwtufHb@F%HeEr=dxX?PY!F45P>nq zMeGjt!;evqyKEySt9w*uS}i1*Y_cPaiI|VSOgZE-?~R|j?0{Owg+v#Yez;YI7s~@d z5iuJ5v0W>l0#t#~dv#-&FZ5<1b}p$|384P8S(!xb3m?x&BsMp3#19sS#EmP0{NA4W zm88c&#*IeSJaSSj6!Ebs8o8M-7_HHyIT8OJ)Mo&IAM|F-&xo3gV#)bpN7nB zXj_P%pj*DmmPo4S&%3~5z=+o|C%NIJ;Ss#_PBfu1?V%kZw}#5B2s~bzx3|C+Yb->U za}||z7n1XEABgXNLfXP~yS+&$0cQjhzkJ)`KjmIIx`&OuM?@_!3QX5M7oI+(o3=tb z&RC9w6^&?bQa~5pp;M{2jF-lg+J2V{Mnm;36xD zmC{9^Jft53l^XGURne86ybHM4iKOMz7zrw2RluvU#*<;Z$|MI@H{E9X791*{`Rfny zE4R~}ZLSz3*Ve&&U4mN?k8uis30oqSqn`Gen;;@&!6MBPw-#s^F1{iix?;EJo3Zf% zc?@_5_tnbQ07|c3g@M-N?b6zE<7TB{Zq{9o-b_o~=@U&Wig5qQr z6FocPj(lSlNXCVXm6_Jglelg%Q?a}sbx66?IL436yBl&{hoP9J8ePJME!yqJYBpIm!4i!9%cs&Jm$7es8$pk@OX7O5v+Li3 zeY`1b58rOwVybPt5n}AiunTXmnO#jSYD`aRymWvop3?tVytqHI1hghttN{#UaE??U zwjMzr=hX<;x>j?KZ`X+UPg+F+&9ItdSqyQfI`rntr)j5;id5304B*jU z2|jGmS2{Q-LmjWq&T~9f)jlGaI=nO_xN@{CZj)j3eny3vZ$s5Wyh{WJ3u*QtmzAN; zp7~@Na&et}+UQuRzI5@prup53_VH>L{9k*rr1As+7z|y;Buc9LCtt-VB>}vW_E8SR zhgQ30lw##N*~V_o>OnDj+Zrk`&r1o~S$I+jJJg~X9H=ZYx(5DIS~2jzaF#OQ-4ue> za%)x7TbP!M8V_~Wl8QJSaGOq?5S-*_rPpJIMT|__zd?eLv;e8LrbSm}sdTe59F~4LM9&i4FgzB0ZV^Et~=1$OdIvI36(1wj@~K32J9fx}%k~ zV%O5xP+0WlhLqkNOwdgwr3seXx-BGWD^i3cx-9KX^#I{(Rw=$_njoeUA+cavaa8e9 zR62kC+swxH7gGd@dGXp}I;@Fz4?Y0&bQ?t1+Jj=RjbHCR4K;>8i7?d1KFPdH7ib}L zNs2eFC+Q;&&1G1aKgCM0z9wwqNR0 zS_{;eF-}RU?Sr-t8eFbW=N=n-yESf?tFRUx?1#U>y#wE$@k(&1z0(LUFc=~AvNPAC z4~i3zD4e3aLtVFBsC++Dh!$rO=p!E?ZDe0#2yg;J#UkTxl4{um*phWq<8dNpQ!=*D zyXPs_05uN2gtzbhb58Zm;$eq)x;b+~(JvXUYIWk2WOy{|7D)Dhw9^miJcXRKbAriR z3#AC-9xe0DG~Q|NkX?Y2_)@dCI+u!nK=1`U+j&NR`wr?5yLCKYBRUD|B~R}L#wex@ zw;Ai}naK)l`sAdBgzsiFaTBlA0%jZjs$`7fT7C7%Vz)4r-G-|t<^QUvFx=o z88iN>tdHnkzULX+7neH9wVoANA4WA^p#gZCnez9r-C)Z?JPNDUE zmDfY-UF67q+hwz0`?1^@m}GP+eqh6Nd!>AT+I~B>5%;CTfx?l5=L!VrWnE~%0`QxA zb@R^b8Sh(y;Mtmbaw^hpbmgEt^k6%#-7bNYN*b-kBO359iwM?XEmtHcGFVK}eaGQo z$C0Gr;8xZs^U);X3y-ZwghP zouU*nQw>`ttPG*BO$5-_`y66zP{r4jW3Dk;UpvB@=DQbn1-oE>r-gTB%UHAWF-to9 zq|AaQT3Ll6qaS4#Qh)`d^QC3nNjtBpKv|2P57(spsTigl)Atp527Kh7f=nko&2E@7 zt@eC?5_0B2kNRt?GzEv-*1r!el#7D$|0GdgBl{}83 zB{$WyeABr1SrM2JF-D3<081AL2;KI4h(W*KkBES3pH8BpLO!Q?7r^UXj!KMk?QYP- z!7qiNb{pK-g&j=um$S;I8gTjL=+{uq25W2MNPs87QMV7%oO!?aT#I8bxLq<|sI`};0G6GeF z2ThxGDwM;zANGtcSQ$^*kr`GD4aUP}CndsMKVPKJU8Lf7TfDR2xYOLi;ptvaGE@)D z+gR*@B}>qypzZW?hd1Y@4eBVe zD@f#yU_6Q7MT_YIsS{a$OqYdlOUgr7(vw=2E3O5u$OtxpLlGE!B^HloFZ5+YFvvy? zC+nfoeuLsggH)##59HFNc7R^w`{>`BS?PfJ_};$+^r&qz6gvFLgqO#5n^6A8T;ur! zAC2>nFBK>~`QP}Y6<6EFROI%5_lD=SVhV&cLp*%c+;csA5CUiUflVa-V#b@Fm*AwXFzc=!Rj;PggVir*-R)9bb^G6NFwP$zNRL3csd3D-0B zl_!%tt>52FFVa|E z2Gl{i+UTqF8=~>y%R+po@edy)VPY6+hP;b~vSt9nj{k!t4GRNZ zW6OU~Bv>15LtDBtGXL1Z+Q^hqJGySaTzKZN5iM<6DB}#X-5&B!f%zBS%IW{o=j+9V z@-^Lm9{cdYuCvA@CHR4V8&^Ji@%M><3E4JAFsoexJD9+6Q=98--@ueqMiwB#qh_Ws zGv>HETeM%d6-c5)Pa1GTMc1;wYQ$R)AP&BEIAFfaQC|<<9I`M?&AO|gXjGo7-HUWpa=X(}4)nlbJr?usF^m9P``hFgze1Y|QDgRgb<&wGPF$(!q?w=> zMQdNv!+v5D`gNxPgaj3pEA%yG6s)x^f=sM9!PPRY$2C0)(9HzDqHRK0D->_US8`i}%sUR63q!hm zf)uQhTX`&&d?n_#7uyDo%ZeR1E(La^Stt@=$5wC`Vr9chlT3KT_mgxr_drLA{zSTm z+&Fv7luj?2O9QN%9~!6eb*4Y8e@N_72FIV*!SG@GA{7 z>9IiamtM0k?jpUeuN{CkRirYFwl9#_*m$N_H)(3CNRffpQhfEZ#Ng60`A_-`aH}Sj zfji%eiN=MXsxy7fF#@_^DzJdv8kctJ)Y{0V&pC*IMaTLi4RT83^6F5O}0(1d-F;iGGe^12Z zEnG?DsO&k_0ZAeGG^PQ8=?J+ocDNq3PqQuPae!lV;CnJFU|bWfdsRcvKxK?Dz+baD zH9%9ke}a5S2Kd5NI?V{lD4o0nhqrM2ba>SZbagJ4ryYT^`1Xm+7{|Ugl6ng~Mr7h= zyNUF1?m>=NdLX>y2)|1FJBHK11CkavjEt;7}kalf(t=Fn#CL=uuB_k6zwXui!z`h*5H>86u1ZUZP z;nBv`pm=dqrWh2LLu{+fqaK@bH%vEkJtn|#B$CK48p9vp+p^tF(W2gw%KfFdbRxYo2Tn}6fw=?C*Z#O&s!cKIL%U;}gcKJA7#sJ?@t zwhLTxFhCQi(2n17U*S6(LR2wro4r=ge+K; zXocn~Lpowpp1zR)Yeht2!>QDC-fpQmX^iuv>VUT4UOhd4P@?x=VNzBfaI6|po645J z!77gXg`Qn@AxSzD`D1w`+ulhaYFqz2SCo&KkzT*6E=&Kt>G3Buk0OUQN$GtCPO9~! z_V}QKo18&zBRaZ@mA7-H{tZ4{H~hh$aQY8_0`iz6ii=chok+}g;*JO~p$yCo0#WKo zPL0bz>FD9&E>Pc1s^;f0lzsTUa?D@ky`-3VZnLge*T}k0DdPz{Bc}zx=c2ouT&=e z4{z`f9_9a0D)O&t@&9V7>;LKz6&0pd2@l?l9 zw|cWL^j8kKdNtM@b&u6F_e}k#1`$d6yQwIkJ5+#*BJ(&5)uRRBOo~SjqYr|DSrm)b&>waK{(W_dK>Rd%MD)U{Ie_}0t&uR`NET>+Jjc`S>ELJMReK>&|L(@Dm5EXQM{OCqAowc9bJl|r&CV_B;_dK| z;-$XM)0o!-D55XAw?~9KD^iub^A>4;eojE7@@(o$@Xk$xTzz!*Sd#`^c>DqS(s^VYGsGP`YHC7wTmuhSfOS z!QjNRb+RzjEerScJQ|;?$CrOYoR=x`cS+{+_e$nNCMG82fNodqe9?Yz+#zxfpxnPc zTlYJ%aRA;Eu78fhWqrF*T_C+4yP4#%@kEJc=(C(Y`)`+hkR@^_w2{;A1580mr>j|5 zl6=3t*maYOI4?gRhq$peIjLbT46rs68XhfEjNjXb$5lI4?u1phxYUCC0t%4utZmx4 zS1EVR1H&05T54(3^Wr%s@~#~^@hy1LIh;gq|B^BQdkn})HF8YQpzqJsM^D=yyrJT$ zdGv-dyqjbdNc{qu&i4!OztHCGu)4qZ7NSN(2h{iGvzS_d44EzN{NeW+Vj!dsuQ5dg4jSpQqkV+em zhljRIkUl|4stNE4f4m>VrdC7QTAx2YG|%8S9mS;nsV(5wSs1OL=Ydj%8#9xmOGF%tWipl0RNdAgu(Po#1NM900Y0m!k{6|Ao)?hwt8;%Y2_{?ptVk64 z?XljeW#pQtK#vNz9Azrw*q<%*zj`P|BYyh|i%v@p5j@3h$r;$uQJXYv0CEDo z5m!m*vkLLZ?4|$B%DY+BH8sh!(GGTwHTE90&1l3-j~hEc-$zNm`0;$n6}CBjr!g-W zUj^eQ?`2xN@0NU%-rQ!jP&ZM=9YcNd*Q5CGouIgGGxmo?C`#?0x$E%x>UC~)7W=I( zgm|=BCN%<|BMi3FqRxj_^AlW(wH@#M-TBDsNlHTmYpY~p16TV~8+(Zv&n*EW{bLjh z2uof>AbpEYn|U%p(ZM7uds6Mo-uuXOhPah`n!lOpbs@-lBj#Qq`Kb7&g5lApj-fz9 z(}wnj)mA6ZU-1W0712hWpIdK%8)>s8EW%Nf0sH*(L08&jw z!<>o(^npou1j=u3ac81Y21C?&f{5dU#r!_yzc zYy3H39ata14f5^XU@M(Bq_^3v6r9|mMRLxZCSLtjsqwV(K7=-!*e*>>L2DJ&0eo3} zm@`xK#8MiZQ8TWSEa+sST};LW`6W7Cz-ni^YuQZ>am3!_n}m(*hD|<3}ao8V>f*YT-j3tdBr* zYvMK}wFAh@1AjfncXGh5b-R1aBs;a}rzH~a8v!qj%X+S>w>1Sy$};((P4#1HMt!;V z&%&x(ck`Q{bqH7{3iAGfEr3l<8&rB;@Dud>2UY=iW@RyGk;~udtNEtq=IhWB&o==y z&J_WiWg{W@$(!v#zejvCdpzYs^L85Fqq1WY?z*v}%ep={fg&5pd65l}Lnri5p@>$Z z{c~w`a&?mrZnDqBZp~LlSe)g2FZOSSTxe=GoEtJTO0QZwPPGFd!3DF#j!OHkeL-Ef z4(Zq5g9s@nzjeIfYPfTo?zdl-RW&<3+7);K-4`f7ZFo}H!XC4Waz(fd9 z(NAZ?R$LoD#urw(Qgd2!9(MlLUCaNbyZC?U?rra$d9Uv$aoa{u-lVlu+@LK7E@?4v zFivge_o=bGpZITb89nxcP@JAg)-F&bY$I_C>(3qPj}0K4Ufr*0x19V#`f_)^lNA+| zR>u3+JalU>U8d%}^s8qh)dN<@K{ELxyn8B)sR6qmTJ@Ni`Fh~`uWu*2qK04~4&=+&e)_$29^y?}pb!{wO9RnbQ zX>Y$B)(w_aUk@&T0Y!U$3bJ4S>)j2ULSU$w)_?x!>0G|V@}%Ui@4iPM17X5|suvi) zzEJVR&7zVyW_6a1Ga2&LVx5!x5 zQOnI5${JIiq>7oCx8;Y@>x_&)wqmvl`P&yu?qVg5>6Y!p##io8uo)uX?Z(kBJRM(4 zeaVL{`$AGKe(bhm?X=e$s5`>9$Zv_h$mbY3RAwnu3z1Y;jk83>V+YDQBg0oE)hid2 z49kT;BT3#^k~hByZ@tlwv{Cg5?{h5L%@{1>iTJga5Ox(X#P-^(N}|JYvGR@zlrAh? zi{=rOb;N<6&=5L~8FNGBCH^y}hLt_Xk~H3g+8M)*Uwf(xjt;OgK#!El zUd-gw%c_84K{6^H>-2@;0WPHEIuw$@&-T=zAq4XIq0fl4ROy|9@;fB>zacyJM?eXc z!~2*qIZ>difi1j8qKzG;v>nKzgGAh@bad1Tdq3Bm`&Ss#=E`7Fhv80C^d@m3N-VYk zvir`MP;M!|E0satdx4_e57KZuiX6s-EsGz&^dGTI2SW-Qwcj(G4Vh3K1y0X9{ ztH~ta{(|EQU)&5WlpoRkTPm;vztLnZ`2cRdjuE*3OXOmFR^h(*S?R{1mD-of%%2|E z%bMUlV0uDMu1_Aj$V}Gum=xFdYOIuuADHekwIJOrh1DkPapM;u zP5vUwuQaGRgO9UoEctWmAMXwjQtJ{I=vNXoWd?{p<+93YRAT1{*hBs?EC7kXdk5=_ zY9k}Q`WTpHK8WgIU?LDP#fb9_?J@M5=Nv@yHvMMHsuW9VIo)8EZFj2WxvPx z*g<+Db+~~D8mArxzn75HmixCESMxp!{p2byKxBchrCAU2hl)D9*VFtQIbVirSmvuo zLYb;7`=_jg*)!ttY4!Gmt*tT+vIZ0pC7r^PBF4;7Mv#xmBvHeVeVI{Zsbkum$hkdp z?7(Q`+$~b_Cn`&Hcr@vh#}b;wq}AV$`D|mu<~#)~pC*3|`8KkEY4a+cIcyopD!RJw zw|>!=ljNb#wI+P>_uES{<$w6lNcEcEwc;+Xy1LNx&5R03o&oZwj+30nAb2Td^o{?lDxwQPQe zQ=qNlvr_6CtgZPr>^4);UOSJjzA@F}bNhDVZ;QZ#e0)oo?e^XG-bB&ecJM9%ZU$9bas;KTKN` z8gOpm!4Rj10i>?maXO9P#Id~%&K2@X)8=7>)LHP!C!9b|VM|%CBR8ySAjO`MtzX$rYn9^QrG8rbs0-z!yc5;~>0|lxXUB z{XjhIY7=<=yaI3@-JkA}x_#kOs<3(`kMF4^rIKIeO9otH%ToGtBIKqG=%(}ha8u%w zydz!@QlTt+1=JLglw&6MUrHfKLO?$6lJSl>Vdi)Wa-XA|4KWs4_~C82MFyhjM7h~# z&f&J<6^g*p#>8Ab+>E86W8^!L4FGp|4Ptugd-3Bt#a9 zyAzG`fz!+KRIUqa?ccec>`})vwiDSCnmQm13r{UvX#4g`fPPzP;$gkObV@_rCG!&D z>&Y9fN|q@Rea~U^r)fo?yf`7sL!s$a-;n9+wT%H;txWF&9!_!s{*BR)dullwNar)lVV-HJ8(QB>&{J1Kv4kwV+Qif95s=iF8MVYHMsls7d0%out?DLD|Ub_uw zh~Be9o-ay1%7pG@PcLH0M??irO(;BH0}1B zeSg729%bEQWDW9Af}7mxKsGDb!*AzsDo5)#DBoW=i+#0CW_6Efs(S0q81V_EDd%Tb z+M>?+)HZku$BH!4UDcWg9hB`<=TxV_cB0Wt?2E*NRy&_LW5j)?2F|pGYtIV2JB)GR z)pj>09`G*IY2TMP^E-^5FE}weWW0Nw$3FUCo9mX}T=NrqIO8+Zm5d#9?B$IS5dmbK zabJqDgrCrs`U?!DzdDcdWnk zS2n=JjJ4v$`}BKu`zNDT?LE$SLtPFs>{(h2X+*3=)&fT|E&( zZt4f#x6{eFn#@I)HLz(}gPJd~x-tx5AJ7p!(c@^r^o>>iDeG&+L-1IUlg2SvgGX4~ z@T>BM&5Rk_H>Zj5kykY8=j$Ic*?e*x>s7MkH++2Dhbw!pXyqg;K5E9pqntR6NBCf+_beOB9Ob>SBhg4LTw|&)aC^U#jm0%!+oR5cWJ6L8 zJ5c!f_3}G-0QQIiG@CfdPQi4E<(Bm5n~5ycn8bjty}%N`jqESGmPreNkY_fVQ$Nz7 zgL(g)yYBhp+X@C~Ldt(y!YTG;HBqhZeQU)Z2+IX(8WT5A-+pUHQaz`=Z6Ni=iUpN$ zh##A;R2WsQ_MI^zGHu$?DeBWFnvX6q%c zwwq~`aDd(Zs?(KR^{|ME$B=0)ROCc=R>(qIsvjnO2I-)^L2i8ues4@_jBmEjtv$7&PG&<9k{?74F&o&X= znTq&CJTc>UNtcmE6iqazrv<8#${uS}6?Pu8{tIH8W3HB8U8+-34bluo?>jHeyS*jw z8|$a!KaGZN$ATrdUrOJqwtKPc=wDW?`mo`Rq`Ledvp7%|dNuis5SzXsnT3P3-gcc< zL&tm>*YpPI=rsnxpPL(E=eLaLWxgp*SUHUrnluJ<|F+@%07H_?e+9A&SS?uSJVqA8 z=x($w?_7eNK(eai&fV9h>{)JmiyBAE5)UGKG5eNJ&M>gTNXG4XJLv&cOkX;=53(Q{ zwQUi7vdo`WBptHys5E*Hgmkw;cWtaRnWQ!6HQ5AEpKhF_$ojX%DO#^&nQ*@_^)Gdu zWd9V?fWFH1{apk6Sy!ru<%&D3@)U(mvFtkt6G1qVebT9X?_SLVtUh_cKSniZUR0?) zx$!o>U1uA()GAN-6?ii*mD)$cqo4uZ`W6iOAxiY*a3ht%VpHv=aaTHu|6cmeX?k+8 zE!oqrRW~~(n>0}+4KrRkT9}7S?1izmenx=Ts3r8Zp2d<1QG@$p-M?!P=A>5xT-zDe z(>eHe6a!)(qy(4`B9JxmUD+}d9Q1xExta*R86otKoFe1Kk5E@(yWY4ZaF4*QKA+ez zE6Dpi)FtA7QSX^WG_QQKyDLZ1=I4ZnPX1)HlejKdeXnNAEs!#nc_yY)0YeX{aUy)4 zIT1dmUq3o({WvJ=All5kC)G75o56b;DNg@jxb0?hj+3`!g=y2Xx>UdySnqS3&O8~a zBsgr|zjjZ+9$GU3xj}!s`>a!gBh9Od?1>#Yo?Ro);j&%X>N+@DyC>(^AvdY(b94P> zQ~<_O?C%+2L^8i3Jb*C0iZ|Xvlx&3T{5L+KN zUq8_QJ2Onbfq31Jfo6ABm2Pqa4)sSP6Hq>&6qL{HZdynNyKY`}`Bgl-K4?xO0K7g? z&LjgHRBPO>{M;$QJJ0Ly0=uBwnwp^a*j|qw{FQc)=HqP%!?CSBW+$AWDI1e{BFgXM z0~N(;rq^eZ_^0%56rKj7$I6)t7DPFP)FeCnoSH9MwgluoJv)imSOFC9ZJQIi(zVz+ zaj3Endy0V3C**ZRGo3F zrW9YbuOWbGZuxW#aFxyt4LF{Ojdww=;caAF@u6-25sn@Y8%%tXfxfN3D^q3tm6>$3 z-g|`XA7%>-qRX5^_&NOo% z_8cw9aE;S1Gli9e+Hpdl2hvdl*wth4H0Jzznzsw4LTiX3r>ZABDrm9{-0LdpH#06t ztuFD%uYZ!x`CiH?~t^4@i;cGO^{J{RSxdFHoJ;wJX3(sO4f`zTGY z(6#1(9{hGqKa10F#ozYXEclYtQiU{FE3>MXzcr>;5Ru^;s`f<^ept-?Pgn`!x4b%2(C1 z=7mDdBSZYGTJzA3Y+C&mi1$?a;_8`oI4xv=-O4=MJf9JZ_z_MqzJy6c~ zu9%b$3RdfARlE*g@6=^Abc3sDB`@~6qhIYe&5fBT zL74b8)iB)Y*LwhZmO z>MkA{3ktyBwG{2_$fwV3yrd3nU=eXgU&A990;Zcllk@rzn!{^3WceBtQmcysk*0cFk8_z!8 z5)62_wd?gP@E+zM{A!QZdgy4QN0l9s{|-3^W8#wN&RBG?u zl>zy)EjY2MpvpRCEKgg~F0k@tqRD)>QMLI|!*nJ1!%~uKM_NhXT~7H?`w__#IBNj z9HbdqIwyCZM2wp{J<)smu^suwc@QR-a1I;sLwrkDM8yZt?6M=9r+8-BIVk1}rWE6@ zg9O4KI1D5Lp7TK`{^9kR6P7G2R&Oi%W~YHUmA=t^5)E;CMp)WbD_Ul_R_y+_vx4<^#clQ2VHEUAWPi|<)9yl0sE{WNYD zFbz?CniL?vMF5n^>UqEx{CZhdY~6l)NtxxI7}T))J$GWAfribmMA+-H9g+D{Y4aj{ zGcn?h*YRA$CelPzyKx8N_h?O7#v!GHwTc@howtzdAngaeE)iS-wjQ&w@JOhgMbYz! zeIso`A0yRFa+cCK7hXocn!UORe@dVt^r%|KM3!43z8+Ibzuh>J3M6t>Ym-P|*6I@t zDV|*z^pd3Tvg=@rH0DxiWb;fYoAQu36Ve?eq6B^+)qoCdO;X)2@_*~TFn;KVC1uRE zdht&;`@>sE76W_Qakxw;Ax!iah9%-qL&@_<$IsocM-Zx90T?+^$=Eh1tbra4dD`wLU_r zwrJ&81+!gpUNCfG`aIn??D36-KOU+(5DV#%V2U2NV$4G#&WUZdPN^2T9ng>qpC6KK(wEh;NLy}>VN zS==>s9$b?F$%sQ~s1;&^O#F-Ca)?UK6!50=gC1ktR>>%0)%6Q;)fl?GR#^zs0&a`1 zMo38t%Y3MGPi_4SkWYJ<-b84txWY_X3M}UcH?E{K$QSF!uy~AIiq^PT$?gP{at_tVKRec>Ju|Jn6C z*L^M-rJKF`Ob?PV9Q4MoU1DcQJ5cQKp;-7ssU821DMGI#qYTsh{w{5lekgH`AnVFy z2{;sc;yAt7JiAveqWlfeJJmOsgUcLeJ@~4aM5nXJrzOY6hx$7{MQmashk!aKnp`Uc zBL1gor^u@w)I9dr=$92DD|};DlF6~_p*(L)y;NYQsUw9NJ(h-g8Ne0JQ*SCzF3DEKvDrY8A!M#e_#u1FW__LBM_$oZja zieX^GPe#@A9y*!1sI13o_*!v|{0AHFi#De7X1s)cp$S)iH(nX*p~?ue{5w~}=Nb%0EH#-9z-<=ilf9Iiu{;9HWh z84)I{N^sqX7va7(_2r7}Uua2({k-Gp38w>iw}F;PmdszX`WYTL#bUYLAEIx5Qs+%v zZuQ99pK7FO62jUhoV5E4y(rfHF3oH6N2R+St=c$y36gQ=Qlu0T0AVt0q*`zMU=)|e zV&+on<#1oR9pzWh`{}e)%v7rZ-Xkl=;wPyyT?M)!fwA|(0L;z?)5aa^OZ0JjARiLR zX}J2XRM))`p}>?6s&e}ancR{!`wpN~(EzI(*7%CbZ#~~m;%QmoDxR0TAIIgr=~lXm z7pll2EJ%zcm0C$x&4wjaEd#wAXtK|#^ojI%qT}h*1YDmDLr>u=(Wn|=FM_%6(L|{#GSvoU<52(3(lIWclx0irMg;t-#H*N+&}8~zQkM6Qit)~B zH>|^`p?LMt;UVBli(tHYzReB)7kh6R7G=A(4GRu1gfMi&&?wygy3XS~azFOtyryz# z(Ge4`-v5h{15fxT+WR)n^h282V0`IHj;y%_e8T!4Kxwj%9x4<5Uu!ks(*!L_(OE}!~BK)~c-v${xKEcTN7Ch}xBn4Ot#23I`CdoLGqH@Cpo!2}62483A#Qu2dFLwDTgSDGNc zH$)-G8$|6O?va>)*Yf=^DFskTM+m2M3G>{sLSBU!*QwvvQ}-SibUXCvzdZF{R>wPt za`5-z;Qa_vCbVaLzA5fwkB#A8pjq$kj&dCTaKph#vTl=jeP|5U3uXl$!pS|Vj>z5o z{b#jrw&JoK{4DyGtsFO_eoF?reaS*C_TB3#lz> z{0&q%*3?eZ;S#WcuEnyTZ?BB)uI*jAXBCi16=OtHBR*t#z7Etkxf1O5?Aar{(d)gm zP^vXCCoI^e9Kbr!HqtH)&dBnhUY2V36~#6HgubuC#u&))p5+A?~T@UV|AJ!~BZ zDET@14@94U4H&(X&vuLA*3=?CF-G-+si|)_;n}1@>leL)yAn{K?I)-ndLj|@Q?s4< zLdp6?uoHr1)=`%ru&`%K0-L?v` z=jy2FZUkKN8zk+ez{^JhIFW$|2JWDF&s~4yqzup2o(IrdU(x>Jm?o{&>`YEVUoA0vjm!070&pR$5~B=ZY8P#ECr4Jicb_3_s;WM?CbsG*Oh6 z0z#-e|Jh8b?ybb@-+k~;p?hU;=k5HW$F>P-=C|8y`{i_m)WWYzr~S%5mkf^fG^xrZ#nk_ zmzP4{*fu=U=lH=O-*n{)aoueN#65--c7Na9Vc`EUE-l8_9cHa=FK)js@CcCgVvOK7EhW2UxRfN0aS|G9txEN{h`Q_u$34qvh zw4Gl3cp(rN%a}v%DI8r>$0TrRC0b0t%)5R1} z=b#t=`u=SR$ok#jtQ6=&`F&4^S0{h4xca1c8PtnU_RHH4DzXp z#WyV!l6paoSJ1tIBu?(Fq=o@|m6H3%N5esCtB6#;AhRoIGQf7dZ){1UpqwKB>(J~W zj&;>6H50D2ZFB)s`}n^BYnCKe5pQ0O;qEy)J5jKI0>aJK4s^I^9DU%Z9Fhoe$7dv< zw)`k|#|UH&Xm^Iq(Gl1j>|ZWAd`BHrOR1L~3yG|5A1-Ev2@0=EUVM>Aa2U|EvU{Hn z9RLnC`DrZ{f*fTHzmEkR-FAy9sg5N@JGC5K-tQLUKM~N?VH3~xL}S; zcCne^FkhnG>_V>XX=MxKWblKFQ4O|KjLQ1oH9zPi;yYAS-)xaT{_Kix10zScxO2HCJa@6Qn1 zlLukGGi7KO9%>2YsOv)wQl#$ZIFvsU=^G{Fb-8xu$%KXA-&p8hzh#4vpUtgm!-I0_ zj-XlHMG5#jzZ=Q)AN}T*H`I{195DXn2djjfkgtCb=soovSfDle^uG~fh^IgYL@vhw zh$e=g5tmhu0f%K#6GdCfjeom8qk8Fq#CgDW#(zxixnmV&Rd4t1D^s*#(d}?wbgE0L z4;=v3axadxgdD|Zr~rHh!7hgHob8DWj4acd7;n-a)?gPyUcY+qS7`W4o@kJY8{qn) z_EwWB1zINw62WgZOPEhr1L38;7fEfhX;^>!>C&Hlr2%g;jwm&cl8(KGyDg;q-M;O) zgf2H{Fs1FKpaRkplB$(?E8^xve(8e5Yy+jKf69!jad$&!QzBU(|JYZy3-A=;1_kdEOr+peTHTRdiLzRPkR> z&L0`24S{uk-MhxFp2|F!>5w}yZt9XS=6w6fTnU|rwITThMUzb<1&hedRy?Ld)p2Zj zzG=nRpXDdAuq$@IpDBHx!>>i~dBpdQO7=i+NZ6$vlm}~hc)}Y0fn-0C!DKruG!Plf zm9S_?QgEQCD9^@yF;+oE!N*_iD*^!n?kW|uU!ii|X2g=Q2qJV;A(>%;Ihtkx{hy4~ zzgF{?kPk}>Sbx5kd>(qP*e#C!k-Rjtyqf;nB@YQn1g{7iAkoU9LctLF4)_qO57jMW zg-Y}wllan^=q;ZzcAKKDC-C{Dg`9yWJ26O<())`6nPfYuwbscc!SdD0L%mvn=kgw+ z(jgS7PXz4yXQF-C=ntcMT||NgU1UwdocZOC+K9)XSFeTT1H|Tk-l#Vme9z)FRcT)l zWO)QR9Ej0r;P>ibsoMd><9~kc1^AjE1K4})%y=Qx-q*hZF-RZKm1_m5v97s2kuXj( zCfvJZcZtB726FDrIfKu6b<$paHJWe!pDqkor`fl&DTGkeu7X!Y(0(&cde%bky6F27 z(5nFlrLZWuf128#I}oveFFc<&JLDyNKE{39c6?Cmp8Lg*z?QB9C2HqD$-_D^Q#RUS zOqGjv?;CbWraLFGmNv%+sSKnn&&Ltpf9EEn_@AGjo$W8bZ~XS1?X#Im)T!IV-P)v) zvirM$KYLj&#lZTr@0Tx4qN3m^GZ!p#x&K4kxI;tnqPRFH4C4W-+WPcBAcF-q z5Pmmkl$j59FTFiW!QzufucMH)hIWAet76iDjRE0LBQJ!rd3$BWZrit1UJMn`@b_Tb z*O$i z>Zd>XO)T%;fM=e4{!qrr@gerAz&CT!6HOUEMZP0k6Fice9_D$MuK`0v`$vUsQ{a)B zh<@JztjfD|mtSHpYXf}Fzmrb@rKbs1!0O))0Oges3yg$O_>y|TWZ|>G`WOx2ftSqX zg)G6J;uk=Pe~MoQlO6VpJBkKjMCA^%7$&Zl1PI+l4YU0uP5SR`|B9af74l#0%m1p> z#cb-o2K2{U|JPky%nJWMau;>0BSngM@`Jes)XSxj9ika8Zh@e315_@ANlF(B(m!A| zI)ab~)_4iAlT8bP%n}ucfUj@PyT&x zI->aMW1HV4C{~(qzr89v`*0gjOa58rXa3vK07RgWVds1QQ}MDSgR8+7T?F;lNBRXW zOTq!g2P_TcGrTN`SD^M~cl&y3bmhvG^Yd-I=B0n0>$#eYRmQA15`e1#W5&J{{e~GD z)^bnzSi{JMB}o&Ix6cif>`cU+GN@1X!4$zx-QHxNX%GA1_C zJ?Lu+^MAOXT-p?2G(3As>(&5>U& zJrRpe3YTuN#WL%>a*M}InOV4(uF7izB=LBdHP=uD`kIlqOYnPHm&nw3Zf!m0dgA9V z&WkA?c^=1WrOF%2KiUJx4Tsmt<|6Gzt+Jfhk{w@Fo}V3i{C+H@^glN9&zc!-g0(WJ zz2KHKM5b}Scu0~7L7dB5YmNcJg@Z>~w_AjJAQA?J#apJhjeG4+42fk-E^p#0Y-7|?aN24n zcj=Mb=_F}&N~5OvRYEQF*nbVLxL`fPeabdKEOSI476HG`t= z-&IA*1-eBuw#J-I`fuEa6>roWS5)tfc3>TY^Yld9?st_4zWz#z{!hdHYhh_Iz#0a` z1jqiYh9fc~Ie%?Zphxn%ZPixG-gkQ=&n-pE6bCld!~sV&nIn4NHxCR)44g;IBZBS9 z=VRBmJ9z9*=)NU?=I5F0FlU5^hdkiO$#2lOsnm1X`qF|>x028I*kuQf10onj$&F0g zuUeE^p9!LOF6t5Y7HXJGkOW5xW;8gAVP1J9l*h^_b|ESTmEM z9#g|cen_yOD(x2kRmNx9;@WdRO6JUUj&hXn(gJ0njzmCZ#r-TQB^4zKmN0@GdZhNt zqC9^xMLb67&!lOu&-w9G3*QGRa zlNb)=w04?o=yNuM_gW)*+hp(CU%#YdvNFKiX;|J(H%NJxtmByUmzgz%5L0WO{4zRU zAp=)rkUS?Vdib;+gLcg4WRBjuy)cN*y{*7s*JcB(n??YuYtnN^ z^&EdMY0dGw>Y^oLq(EfSwefUO=DZ-)o7!k+P|sd0Htv&k=O)uS{mC@eY2m#nsl9lY zL)sv}p~U5^)SBf@>o3)VyJOx>4onfQJ;QbAL@z}*y?dmOb3CSfvBt;jYiW%}52WV8 z1%&rTu;(`WqPzzZ;^-`*nzy`8e-Ay!?l_pZRqAv4%c#5mNf=kjQ<;+)0_vXXgW0eN zk=jGma|uroj}ik49!lYjs-2_x+V$#v!`5=fqQ%ie(bEoII01hnfy)|!^uZ%yX)?pA z`P0QDd+Df&=RH!3A%-3H4*J{M)-);J|K`9&QF@zD{3I?5YKmr=-z$e(j`GtCHRZrL zPsjkR+uyD^P!P9&WYl5*o5O!9Sjl@EgJ3-~*0w zYADmbecL2Tay!^#{>_7ij>NsJWao#isgx%#93cJ$yZy??-s`|wn#YmY%|Mnm5(B)f zC3`(rP3d>ye)}IE5+Ea z;`TFMdqt^EDEDhR;dCpZ7k*Ps=G4*UWUEyq#BFcPUdAWNz@v>Js4OE={G0dD+Q+Pv z72yfT?=1xzo{JLeueH>yPAq`jyB(-)@)2_s$|^q`Had@fHJJlfW$j;&ZxTOsy6&FATsLiiii`;+TGW7O?V0`HCcoS)LlQCm<2 z?#+hrRG?hr%RtsU*gZjZ@5E$K@eW9~d#&PEp5Z{lS0x$;f2L~;@p6oWF5hdr2h*c$ zlWa?@?)d51l{e=CZ#;SGc0jk~b#ivP;j(5h7hsJ=Rxuvr1Nf2DM$k?WZ=kxmsGTWaXw90Ukgn6x58$I_} z`}!c}mrI*&|M_ZBkMmq>l#Aq)O$S%0W1Nw9`RRc6Wp9OsN}BeF^NA%f3esd;90%3) zpR}`N!8YJ_FN|beN%T1I{SHn6lXlyLs?w#wA3L(RaRzn50~9 z4EH_*a-8$t^rJ6}5FTyA_n`A(xMTXpWi>gAb| zXfzM9`6%oPD?+)E9R?K~IlQYpn{U2&zOSE%u2FfHvC$)x?)6J=>KPWzQ`tG#IGSsa z@b3Yw<6@f1-#Q}u`p<*1XpsB|#H=c$s_qZ%tAEoR24m~{o8KJedx>u|{o6!-fOuQ1 z>N%ZK@eggi@?_`9kqG=U7%nc~fI}R8X2YJTNa+7TmMe%yZ`gdGgO1KaS&>^o>`Vxuya zALjL21zVxuhwq8F9#-OlLccs&8$1`M3mGjjc>zO>t86-f9t33FP=&qVYNZ}=)h zZA+lW^(d8+UvQ!XH+Doc!@EmDqVPufRqsS+WLBDw^KPG#`pmL$BrQz?zQpQuGlg?r zc;lnHJ(QMjXM`tRO)JN7d20@udBi2J#p#B^p*&pVhOX)Rm|A3e)b=$q&ZjMT_ykqy z&9e!O_!6DC34;%x~DCH z3s?zdj~Byt*aaZU!HwR#8T3L1gLhy}3IYly3`TtNV2~GD`vg;}x&A1a&(UH1HAjE$I`=I2Y@VI`uoNenGTNn<7$3xL`Xpjs>mQ5I?oCG zb(V}nl3aZ(z7-6-)ulzi_F)h7%f>ppbuwEVEcgp)k|>!Oidf{U#9F^P%Q#?8fqZ+! z_KZ3vC=HY5a=LdFl|Zkt8COa+A5WcoZzQn(BwG410kZu`YZ&93UR;8dP<4>o-)!m- z4d3wE@QA$4W3fN}JStUGs|1o@&`~{g&?4d~GboDJ%~u{UUurYO%F*X?lcb^0Fnx=& zDyK<~=IDoOYcq9$E@z6HcmIy+q;9lV0IHOq0KjV zYEKH8qM~J%vKCcE8ya_BC0Jh1S)x)9f#!5R#73GB3~fHxl=6?tvN;eH$PXCf=aJ?U z@xQX#fXltx(c-lrkh%rJdl9_Mt_SsDrMlr;Q)hc3 zQG5=_EaQ;s;Z1JENjsLzu#NBbmn+;A29R4yRbkFN0Xca59Y1cUT(R#yJu#nT^h=Bm z^GviBo9vw)nOa|ql=vpK*q7$|TF!KuSd(sYgx?}WCYPMM^-1O!DPLiJ;o%G+rCQJS z0Z#BpzVn5i*Y6+HSqvO-3EtqWDqW-0qXFPV@!+2kx-{KPuk)ky z;WRKWnTwP-qI|wbtx2kYk2!;hF#So)7>hx!-y4HCL$1;*rv*$t9&VMt76^kPqA6Vq z2Hv<4G*k+Z&>QjAZoj^dg8mmpX%5JEtX#fb*|tb;h&wSyj*xT zed9;XVpJu&W7Yh_s5fE9Np=|Ggy_2O<&HQ#8SKT(DdkK! zrPcP2FWx`Ak3ycP=rrnh4oKQowom5Sxtv3s|m)^adeSsbc`}f$TS_! z=L4EbLQSNOgY-VLTP=6*gTn1?YBB_kRF6>CV(3k>k?q$XG|IOV5W@M9Qa!lW9EjfG z6lo|l;7P<5^EWnzmuusvUJEh(dCj^oie6@NiYVrG@I$!`9x}Tsb8X|Y1u;45Tk*rQ zEXDEF7zO^#Cag`jOMy#eg5LVtOl~xO9=IvLYQ{)6`7*x~M%8Tiwk(dfQ*Pr9O;P@; zq%ou5jl^`P?RGX1$%Cf^{^Z8Xo;0jp70t z1@}+;@`P-kP%M(7ttz%RNWl2&q8y#?l!{J+{5s0@v@jFIhQ2$uqkB=F_vt<|z_&sq#=o>&NOmziUf$7XZ$K#cEz*W#YfJV> zu0{I& zHmS#73|Up_CAlz05(*QiH()!sk{~x4Ov1%l`X58TbkG00dMy1djz}{k4GZsja}f9MRGWV*EE(KB5UJjrn_puu8)Ju-__0Z6VYqx z+^0w`)a70{w^e9Trfxw-j2S}Y?q5%g>q8+Bv02ebwc4ptxLBwrRy4p{H6#1exO3Gs zR*UrbY`=EHdBSO^<$Y&p#|~%H@hn#hCkaz?QCYmNklnbb&voSl1{(ebb`qMI_gMSi zoFl2_)MfWLOI&~R;X2Iea6%vYoc>ONC^)CuZpkW8B_N=I0>gQ=XGfS@K^|85O|&kL zKO*6`B-*l~2N?DJZN_YhRObk@Qrtg{fy|ex_7@IP=M1+;H+=?Qg4ys(!`h+Q7J25| zuF*NVb(U~RCN7Iquf3M**hngk$Cpq;JlsEuL2sK6nPy0FD21z&4}S(=6dM9J6E zqDY$#Y0}f6@{q}>P*8F?Q3S20A&>*7`WJi?QRgok!ZO=7XRgf(4c#H2i|G;nm2({# zb|}GG22y0_vkHp2c#p!m_{>1|P8)z&{+|4_T3Yfi1mqvsw<8@2^@&>62x13SsMe!s z48+#6`%q)pus=khikWo%CE?8`vKaI9=^*QlZsG;U=up;1LO0gonV2d^R%yQI86gQ%q^Jsp5sSxLqm9D@tHU|NpKFYvYf+> z;uW=r4+)EOQp(|( z(eYr7*iA-T*g4#B#-LLRpS!iO_$#j#2EsT|SI36%DgzFG*p3y*jt(~IW?W>;whEu6 zi{hf=@x_n)17BRT{2u$f#EgawL?5J*%tZ%VSH}e6zB`d~XjWYk_Gup|0bE1ddKW#| z=Lqt;T(34MabBg<>ojg!l=oHk%=@+x{dxMRils4F;^YNoirLbaAVa-X{nd7nw~tA} zEOly*K?z-=XKibWfW_o_r>HWAUHc-IZb=c_j1>9T_9L$Zna|5L{(8#3*|4LvG~bqY zO^jswE-gZ%(?BQQ20LzkavHCWGLJ7TL{yun7s z2MdFeUf8Z)LPR;Z8Pmr%?uGzFtwd5k+@Vi|2)ALAziXfMa+4v=1LYZ{Y=Ul>0nZS8 z0>?#~5MIrfI^F%Qx-^q+QL+5Nn#MGcgw6=&;}5jJ34$ol@e>;F0r@tsYpuE@j4L2; zF%>*jGd<327JVN16x+gf)`PDR(HXC9sLd?_lX!f$l@cGf)0BIf8)IK~Jj%%9U* z|FAEc2|Ocfld?!hVDjPiRrOYFEl}H~M{)nOWPE14`le+{e~Vrr?xjx2ymkt$`A~M$Smcjo5q(+DddJG@P!$unA5xsVm zYlAvZqIO)t-o}AfxUkS(5`|wF$cUG%hHj^zH^kJ8yi(@YrDE{M<=oIO zG1H;Ba(c6B6+V5d;07|StcSqJR5`7+Cp_+!#QbZmahIAMS|5<+8e?mD-+uU1>k%nc$5@ePIonPn zalLd*(x!gIV)D~>S_yD=X{-(ObE2_D>HYE#qEef6S0hD@@AEEH$m5GO)u+ebhMC=Z z%yAJItq4MaN$^$KAs_5L?M9Rz1E;eIR*mXLVdEL5fgdl z9RQn@J5ZqG*AwZ5n}3d!IXh@MM1}Sl)-ivMXkw_3+&jEJ%)AEq2eSZCj0e!uBGt_6 zwI&Bk;lT|63tzWGbT)-^3Ct35R|ir+HKRwg^=#)s3CzC{(i)sH{7WSz2+nlENi){c z)B3xpnN1N^Y!hn_Yl>%pH8|~Jv%Q@TxfdzmL8wWl{I!`3*HtIcZZVuB%r?bs!C@Z& z9&=A?agf@EZsw_mWSSOod7#eRE3yhxej2PHfQ`h%whg$@%d6Xz1%>0T<0`Ydae?f3 z-Q9_&=)3z{?$p%EihS5joC~6>u4Rg8MGZI{g4iJqJLbptAqa=mRF?Ej7>RoCtQcof z_40=#VLCBxJ-O4(_Kxf!(jGzd_K^?_gd*`L6MKo7ZN21a&6OH0(tXAa2a(gluI^-@y}8h z>FhR|@y>nUM7JF$9uf$-{xgRYuk4d)l+>X2(foq#^|Bij&ody1YX`-bnk?>tV4tP@ zDl7?J!LuzjBt){2aDTGkyE;!k=go(Rm=xwj2Bi%fJT1d?qbPN~b~OBcFIzL?L}EmW z(!r9k%cEUk5-|`%5YiHBd56etIGJiNTqhgj4m&u+Q7rCi$m4Jwv zk??@52!)i}`CSvO|LU5W3 z$^}d0c>G2sX913TZxN)BW@Q=#-ZY~`4`^caefV9a+e*{JQ^qSC)?O%%Ow&k{clGb# ztn8KILnjF?`SHMLf^Hc=P~)tONMfI(@2NCJOT2>xmcpd_hTezZOd!@s`713J%M*G&sPgyY0x3G>(9ImT3e0t z^{^v2wBZ*%CTmrk+wU!`A|Kb~dcCL-03FTSRsYsL9vLoNuP)E95H@yI4TT54AP`@I zZ}^6IS>*9mUVGaG4}b@4gDP~w`*_VRLTE64wjZ$tQ)t=%XfP{+44nrmwM~Ip?%B=~ zC)ianR|Y|(!7sVzMl6t~^!FFWNMf8?#^yFGr3xIf3A&=QPV@S<;Sop(`!X$v#w#@4 zRo(U2Dx)5alvrQlE}KSfYIL05K*G^Oj!(9>=k%|#z0knw;iK3Hd%&zmRFmi0f^~P3 zhYSLmCFjpR=axMDZbngtRrV4##yj~>^Tv7i7DT(Et%c-0n13|qE~M$zlP^`LSKg6T2l9bRM@7sgOFWKi2z z6!2k(&jm+MPv!%aNd6Cttwy0-zbSe$M`1Eua|Qz6e0rv@F-m?p5m_z*R@DT z0pZ=r$w6&c1yLiQL%AGl4z$!XN2Ia`k`?m=w=a;qymwR7L;`SqFdK^m$9ojDXSQfCg+8 z=CaKO<`$lt<>YIaQ-Oa{0k&Vu98S^c{?ydzPd1r?RJ(-) zOXt!_XX}_Uw5U8*notY`Ln|To8`T#o(+IpR(5(<|u>Y!cAGrAs=^NpqA=p}=(yG{} za6DSh5(!a+iO=x0j+1K5_Q#$@EY+^;~WO}(3g(^Qz zj0Z{kLx6USqriYBOZW?klg-9cGvQbkY7x7)rbLO9@0eL(ug(kpA8QB<1L3+~≦E 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 z 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 R#7Dp%nd=I_WM0*G{~xaC0QCR> literal 0 HcmV?d00001 From a83aa18179996d3ef35ecc2cf59dd8adfe756ceb Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 7 Apr 2026 08:45:17 -0400 Subject: [PATCH 03/16] Add image to PR From 8e5697bd51b51d8160d4311418180021a24b1062 Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 7 Apr 2026 08:46:06 -0400 Subject: [PATCH 04/16] Remove todo --- packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md b/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md index 794230a467b..08555b1f953 100644 --- a/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md +++ b/packages/kilo-docs/pages/kiloclaw/control-ui/exec-approvals.md @@ -31,8 +31,6 @@ If you want to skip per-command approvals entirely, you can set the security pol Enabling **Allow Everything** removes all exec safety checks. Only use this in trusted environments where you are comfortable with your agent running arbitrary commands. {% /callout %} - - {% image src="/docs/img/kiloclaw/allow-everything-settings.png" alt="Allow Everything setting in KiloClaw Settings Dashboard" width="800" caption="The Allow Everything toggle in KiloClaw Settings" /%} ## Ask Behavior From 6a7a0ee47cfe4e83d22fba8d5b93734e741233f6 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 17:26:47 +0000 Subject: [PATCH 05/16] fix(cli): guard ErrorComponent against missing renderer context The ErrorBoundary fallback (ErrorComponent) called useRenderer() and useTerminalDimensions() which throw "No renderer found" when the OpenTUI renderer context is unavailable. This causes the CLI to crash on startup instead of showing the error UI. Wrap these hooks in try/catch helpers (tryUseRenderer, tryUseTerminalDimensions) that return undefined when the context is missing, and fall back to process.stdout dimensions. Also guard useKeyboard the same way. Closes #8774 --- packages/opencode/src/cli/cmd/tui/app.tsx | 47 ++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 20209db9c1d..9c8482cf55a 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -914,27 +914,54 @@ function App(props: { onSnapshot?: () => Promise }) { ) } +// kilocode_change start — guard against missing renderer context in ErrorBoundary fallback +function tryUseRenderer() { + try { + return useRenderer() + } catch { + return undefined + } +} + +function tryUseTerminalDimensions() { + try { + return useTerminalDimensions() + } catch { + return undefined + } +} +// kilocode_change end + function ErrorComponent(props: { error: Error reset: () => void onExit: () => Promise mode?: "dark" | "light" }) { - const term = useTerminalDimensions() - const renderer = useRenderer() + // kilocode_change start — use safe accessors so ErrorComponent renders even without renderer context + const term = tryUseTerminalDimensions() + const renderer = tryUseRenderer() + + const height = () => term?.().height ?? process.stdout.rows ?? 24 const handleExit = async () => { - renderer.setTerminalTitle("") - renderer.destroy() + renderer?.setTerminalTitle("") + renderer?.destroy() win32FlushInputBuffer() await props.onExit() } - useKeyboard((evt) => { - if (evt.ctrl && evt.name === "c") { - handleExit() - } - }) + try { + useKeyboard((evt) => { + if (evt.ctrl && evt.name === "c") { + handleExit() + } + }) + } catch { + // Keyboard handler unavailable — renderer context may be missing. + // Ctrl+C will still work via the default signal handler. + } + // kilocode_change end const [copied, setCopied] = createSignal(false) const issueURL = new URL("https://github.com/Kilo-Org/kilocode/issues/new?template=bug-report.yml") @@ -989,7 +1016,7 @@ function ErrorComponent(props: { Exit - + {props.error.stack} {props.error.message} From 6290c11d3ead376f37f399e5fa0bef0bd3fdd2ba Mon Sep 17 00:00:00 2001 From: Thomas Brugman Date: Tue, 14 Apr 2026 15:52:24 +0200 Subject: [PATCH 06/16] feat(agent-manager): jump to changed line when clicking line number in diff (#8866) * feat(agent-manager): jump to changed line when clicking line number in diff When clicking a line number in the diff review panel (DiffPanel or FullScreenDiffView), open the file in the editor at that exact line instead of always landing on line 1. Closes #6076 Co-Authored-By: Claude Sonnet 4.6 * style: fix prettier formatting in AgentManagerApp Co-Authored-By: Claude Sonnet 4.6 --------- Co-authored-by: Claude Sonnet 4.6 --- .../webview-ui/agent-manager/AgentManagerApp.tsx | 13 +++++++------ .../webview-ui/agent-manager/DiffPanel.tsx | 6 +++++- .../webview-ui/agent-manager/FullScreenDiffView.tsx | 6 +++++- packages/ui/src/pierre/index.ts | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx index 12477b8ca69..3d9088a1e2f 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx @@ -3016,10 +3016,11 @@ const AgentManagerContent: Component = () => { onClose={() => setSidePanel(null)} onExpand={selection() !== null ? openReviewTab : undefined} onRequestDiff={requestDiffFile} - onOpenFile={(file) => { + onOpenFile={(file, line) => { const id = currentDiffSessionId() - if (id) vscode.postMessage({ type: "agentManager.openFile", sessionId: id, filePath: file }) - else if (selection() === LOCAL) vscode.postMessage({ type: "openFile", filePath: file }) + if (id) + vscode.postMessage({ type: "agentManager.openFile", sessionId: id, filePath: file, line }) + else if (selection() === LOCAL) vscode.postMessage({ type: "openFile", filePath: file, line }) }} onRevertFile={revertCtl.revert} revertingFiles={revertCtl.reverting()} @@ -3044,10 +3045,10 @@ const AgentManagerContent: Component = () => { diffStyle={reviewDiffStyle()} onDiffStyleChange={setSharedDiffStyle} onRequestDiff={requestDiffFile} - onOpenFile={(file) => { + onOpenFile={(file, line) => { const id = currentDiffSessionId() - if (id) vscode.postMessage({ type: "agentManager.openFile", sessionId: id, filePath: file }) - else if (selection() === LOCAL) vscode.postMessage({ type: "openFile", filePath: file }) + if (id) vscode.postMessage({ type: "agentManager.openFile", sessionId: id, filePath: file, line }) + else if (selection() === LOCAL) vscode.postMessage({ type: "openFile", filePath: file, line }) }} onRevertFile={revertCtl.revert} revertingFiles={revertCtl.reverting()} diff --git a/packages/kilo-vscode/webview-ui/agent-manager/DiffPanel.tsx b/packages/kilo-vscode/webview-ui/agent-manager/DiffPanel.tsx index 7096adabb51..9588831f47a 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/DiffPanel.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/DiffPanel.tsx @@ -40,7 +40,7 @@ interface DiffPanelProps { onClose: () => void onExpand?: () => void onRequestDiff?: (file: string) => void - onOpenFile?: (relativePath: string) => void + onOpenFile?: (relativePath: string, line?: number) => void onRevertFile?: (file: string) => void revertingFiles?: Set } @@ -520,6 +520,10 @@ export const DiffPanel: Component = (props) => { renderAnnotation={buildAnnotation} enableGutterUtility={true} onGutterUtilityClick={(result) => handleGutterClick(diff.file, result)} + onLineNumberClick={(event) => { + if (event.annotationSide === "deletions") return + props.onOpenFile?.(diff.file, event.lineNumber) + }} /> diff --git a/packages/kilo-vscode/webview-ui/agent-manager/FullScreenDiffView.tsx b/packages/kilo-vscode/webview-ui/agent-manager/FullScreenDiffView.tsx index f00410e0905..d43797d2ef9 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/FullScreenDiffView.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/FullScreenDiffView.tsx @@ -40,7 +40,7 @@ interface FullScreenDiffViewProps { diffStyle: DiffStyle onDiffStyleChange: (style: DiffStyle) => void onRequestDiff?: (file: string) => void - onOpenFile?: (relativePath: string) => void + onOpenFile?: (relativePath: string, line?: number) => void onRevertFile?: (file: string) => void revertingFiles?: Set onClose: () => void @@ -596,6 +596,10 @@ export const FullScreenDiffView: Component = (props) => renderAnnotation={buildAnnotation} enableGutterUtility={true} onGutterUtilityClick={(result) => handleGutterClick(diff.file, result)} + onLineNumberClick={(event) => { + if (event.annotationSide === "deletions") return + props.onOpenFile?.(diff.file, event.lineNumber) + }} /> diff --git a/packages/ui/src/pierre/index.ts b/packages/ui/src/pierre/index.ts index 1977f23f59f..9caee11a415 100644 --- a/packages/ui/src/pierre/index.ts +++ b/packages/ui/src/pierre/index.ts @@ -143,7 +143,7 @@ const unsafeCSS = ` } &[data-interactive-line-numbers] [data-column-number] { - cursor: default !important; + cursor: pointer !important; } &[data-interactive-lines] [data-line] { From ddb2bba027ca4d786cbd674fa274ce1fd3475fd0 Mon Sep 17 00:00:00 2001 From: Thomas Brugman Date: Tue, 14 Apr 2026 16:00:39 +0200 Subject: [PATCH 07/16] fix(tui): show progress indicators while subagent is initializing (#8807) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(tui): show progress indicators while subagent is initializing Show '↳ Starting...' in the parent session's Task entry when the subagent is running but has not yet made any tool calls, and show '↳ Initializing...' in the subagent session view when it has no messages yet. Prevents the UI from appearing frozen during the LLM thinking phase on startup. Closes #8422 Co-Authored-By: Claude Sonnet 4.6 * fix(tui): annotate kilocode changes for CI Co-Authored-By: Claude Sonnet 4.6 * fix(webview): show progress indicators while subagent is initializing Mirror the TUI fix for the VS Code extension webview: - TaskToolExpanded: show "Starting..." when the task tool is running but the child session has no tool calls yet (previously the expanded body was empty/blank). - MessageList/ChatView: propagate the readonly flag so the subagent viewer shows "Initializing..." instead of the generic welcome screen when the session has no messages yet. Co-Authored-By: Claude Sonnet 4.6 * fix: add i18n translations for Initializing and Starting strings Replace hardcoded 'Initializing...' and 'Starting...' strings in webview components with language.t() calls. Add session.messages.initializing and session.messages.taskStarting keys to all 19 locale files. Note: The TUI (packages/opencode) has no i18n framework — all strings are hardcoded throughout the codebase, so the 'Initializing...' string in the TUI session view remains as-is. * fix: localize Initializing/Starting strings in all locale files Replace English placeholder strings with proper translations in all 19 non-English locale files. --------- Co-authored-by: Claude Sonnet 4.6 --- .../src/components/chat/ChatView.tsx | 1 + .../src/components/chat/MessageList.tsx | 9 +++++++- .../src/components/chat/TaskToolExpanded.tsx | 7 ++++++ .../kilo-vscode/webview-ui/src/i18n/ar.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/br.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/bs.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/da.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/de.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/en.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/es.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/fr.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/ja.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/ko.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/nl.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/no.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/pl.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/ru.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/th.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/tr.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/uk.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/zh.ts | 2 ++ .../kilo-vscode/webview-ui/src/i18n/zht.ts | 2 ++ .../src/cli/cmd/tui/routes/session/index.tsx | 22 +++++++++++++++---- 23 files changed, 72 insertions(+), 5 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/ChatView.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/ChatView.tsx index 40050b67c1e..eee0d6a844a 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/ChatView.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/ChatView.tsx @@ -130,6 +130,7 @@ export const ChatView: Component = (props) => { onSelectSession={props.onSelectSession} onShowHistory={props.onShowHistory} questions={standaloneQuestions} + readonly={props.readonly} /> diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/MessageList.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/MessageList.tsx index 6e1e6549dc8..8828ca0020f 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/MessageList.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/MessageList.tsx @@ -44,6 +44,8 @@ interface MessageListProps { onShowHistory?: () => void /** Non-tool question requests to render inline at the bottom of the message list */ questions?: () => QuestionRequest[] + /** When true (subagent viewer), replace the welcome screen with an initializing indicator */ + readonly?: boolean } export const MessageList: Component = (props) => { @@ -114,7 +116,12 @@ export const MessageList: Component = (props) => { {language.t("session.messages.loading")} - + +

+ +

{language.t("session.messages.welcome")}

diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/TaskToolExpanded.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/TaskToolExpanded.tsx index 8ca111331ba..54971539405 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/TaskToolExpanded.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/TaskToolExpanded.tsx @@ -13,6 +13,7 @@ import { BasicTool } from "@kilocode/kilo-ui/basic-tool" import { Icon } from "@kilocode/kilo-ui/icon" import { IconButton } from "@kilocode/kilo-ui/icon-button" import { useData } from "@kilocode/kilo-ui/context/data" +import { useLanguage } from "../../context/language" import { useI18n } from "@kilocode/kilo-ui/context/i18n" import { createAutoScroll } from "@kilocode/kilo-ui/hooks" import { useSession } from "../../context/session" @@ -39,6 +40,7 @@ function getSessionToolParts(store: ReturnType["store"], session const TaskToolRenderer: Component = (props) => { const data = useData() const i18n = useI18n() + const language = useLanguage() const session = useSession() const vscode = useVSCode() @@ -117,6 +119,11 @@ const TaskToolRenderer: Component = (props) => {
+ +
+ {language.t("session.messages.taskStarting")} +
+
{(item) => { const info = createMemo(() => getToolInfo(item.tool, item.state?.input)) diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts index 2d8a75d35d7..5c00f987d97 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts @@ -930,6 +930,8 @@ export const dict = { "session.messages.welcome": "Kilo Code هو مساعد ترميز بالذكاء الاصطناعي. اطلب منه بناء ميزات أو إصلاح أخطاء أو شرح قاعدة الشيفرة.", "session.messages.scrollToBottom": "التمرير إلى الأسفل", + "session.messages.initializing": "جاري التهيئة...", + "session.messages.taskStarting": "جاري البدء...", "session.status.writingResponse": "...جارٍ كتابة الرد", "session.status.retry": "جارٍ إعادة المحاولة…", "session.status.retrying": "...إعادة المحاولة (المحاولة {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/br.ts b/packages/kilo-vscode/webview-ui/src/i18n/br.ts index c5fe35845cc..15cdc7d89dd 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/br.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/br.ts @@ -938,6 +938,8 @@ export const dict = { "session.messages.welcome": "Kilo Code é um assistente de programação com IA. Peça para criar funcionalidades, corrigir bugs ou explicar sua base de código.", "session.messages.scrollToBottom": "Rolar para o final", + "session.messages.initializing": "O teraouiñ...", + "session.messages.taskStarting": "O kregiñ...", "session.status.writingResponse": "Escrevendo resposta…", "session.status.retry": "Tentando novamente…", "session.status.retrying": "Tentando novamente (tentativa {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts index 2eca4b52724..ff3b79d4c15 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts @@ -943,6 +943,8 @@ export const dict = { "session.messages.welcome": "Kilo Code je AI asistent za programiranje. Zatražite da gradi funkcionalnosti, ispravlja greške ili objasni vašu bazu koda.", "session.messages.scrollToBottom": "Pomakni se na dno", + "session.messages.initializing": "Inicijalizacija...", + "session.messages.taskStarting": "Pokretanje...", "session.status.writingResponse": "Pisanje odgovora…", "session.status.retry": "Ponovni pokušaj…", "session.status.retrying": "Ponovni pokušaj (pokušaj {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/da.ts b/packages/kilo-vscode/webview-ui/src/i18n/da.ts index 10000ced110..f45063febf4 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/da.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/da.ts @@ -936,6 +936,8 @@ export const dict = { "session.messages.welcome": "Kilo Code er en AI-kodningsassistent. Bed den om at bygge funktioner, rette fejl eller forklare din kodebase.", "session.messages.scrollToBottom": "Rul til bunden", + "session.messages.initializing": "Initialiserer...", + "session.messages.taskStarting": "Starter...", "session.status.writingResponse": "Skriver svar…", "session.status.retry": "Prøver igen…", "session.status.retrying": "Prøver igen (forsøg {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/de.ts b/packages/kilo-vscode/webview-ui/src/i18n/de.ts index d862c71c446..6c591ac81c5 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/de.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/de.ts @@ -948,6 +948,8 @@ export const dict = { "session.messages.welcome": "Kilo Code ist ein KI-Programmierassistent. Bitten Sie ihn, Funktionen zu erstellen, Fehler zu beheben oder Ihre Codebasis zu erklären.", "session.messages.scrollToBottom": "Nach unten scrollen", + "session.messages.initializing": "Initialisierung...", + "session.messages.taskStarting": "Wird gestartet...", "session.status.writingResponse": "Antwort wird geschrieben…", "session.status.retry": "Erneuter Versuch…", "session.status.retrying": "Erneuter Versuch ({{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/en.ts b/packages/kilo-vscode/webview-ui/src/i18n/en.ts index 74cd3e20bc9..6b58a97cbbd 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts @@ -936,6 +936,8 @@ export const dict = { "session.messages.welcome": "Kilo Code is an AI coding assistant. Ask it to build features, fix bugs, or explain your codebase.", "session.messages.scrollToBottom": "Scroll to bottom", + "session.messages.initializing": "Initializing...", + "session.messages.taskStarting": "Starting...", "session.status.writingResponse": "Writing response...", "session.status.retry": "Retrying…", "session.status.retrying": "Retrying (attempt {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/es.ts b/packages/kilo-vscode/webview-ui/src/i18n/es.ts index 4215b6595bc..f5407c42566 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/es.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/es.ts @@ -944,6 +944,8 @@ export const dict = { "session.messages.welcome": "Kilo Code es un asistente de programación con IA. Pídele que cree funcionalidades, corrija errores o explique tu código.", "session.messages.scrollToBottom": "Desplazar al final", + "session.messages.initializing": "Inicializando...", + "session.messages.taskStarting": "Iniciando...", "session.status.writingResponse": "Escribiendo respuesta…", "session.status.retry": "Reintentando…", "session.status.retrying": "Reintentando (intento {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts index c774aee67e3..e1486e95011 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts @@ -950,6 +950,8 @@ export const dict = { "session.messages.welcome": "Kilo Code est un assistant de programmation IA. Demandez-lui de créer des fonctionnalités, corriger des bugs ou expliquer votre code.", "session.messages.scrollToBottom": "Défiler vers le bas", + "session.messages.initializing": "Initialisation...", + "session.messages.taskStarting": "Démarrage...", "session.status.writingResponse": "Rédaction de la réponse…", "session.status.retry": "Nouvelle tentative…", "session.status.retrying": "Nouvelle tentative (essai {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts index 1aa7851a2aa..b2e2d4cc424 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts @@ -935,6 +935,8 @@ export const dict = { "session.messages.welcome": "Kilo CodeはAIコーディングアシスタントです。機能の構築、バグの修正、コードベースの説明を依頼できます。", "session.messages.scrollToBottom": "下にスクロール", + "session.messages.initializing": "初期化中...", + "session.messages.taskStarting": "開始中...", "session.status.writingResponse": "応答を作成中…", "session.status.retry": "再試行中…", "session.status.retrying": "再試行中({{ attempt }}回目)… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts index d9aae26db55..18ebbfc9a52 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts @@ -935,6 +935,8 @@ export const dict = { "session.messages.welcome": "Kilo Code는 AI 코딩 어시스턴트입니다. 기능 구축, 버그 수정 또는 코드베이스 설명을 요청하세요.", "session.messages.scrollToBottom": "하단으로 스크롤", + "session.messages.initializing": "초기화 중...", + "session.messages.taskStarting": "시작 중...", "session.status.writingResponse": "응답 작성 중...", "session.status.retry": "재시도 중…", "session.status.retrying": "재시도 중 ({{ attempt }}번째 시도)… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts index 060ad3e818a..45f07ce2fc6 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts @@ -937,6 +937,8 @@ export const dict = { "session.messages.welcome": "Kilo Code is een AI-codeerassistent. Vraag het om features te bouwen, bugs op te lossen of je codebase uit te leggen.", "session.messages.scrollToBottom": "Scroll naar beneden", + "session.messages.initializing": "Initialiseren...", + "session.messages.taskStarting": "Starten...", "session.status.writingResponse": "Antwoord schrijven...", "session.status.retry": "Opnieuw proberen...", "session.status.retrying": "Opnieuw proberen (poging {{ attempt }})... {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/no.ts b/packages/kilo-vscode/webview-ui/src/i18n/no.ts index 7a60baea7d9..d0b28ced7d0 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/no.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/no.ts @@ -940,6 +940,8 @@ export const dict = { "session.messages.welcome": "Kilo Code er en AI-kodingsassistent. Be den om å bygge funksjoner, fikse feil eller forklare kodebasen din.", "session.messages.scrollToBottom": "Rull til bunnen", + "session.messages.initializing": "Initialiserer...", + "session.messages.taskStarting": "Starter...", "session.status.writingResponse": "Skriver svar…", "session.status.retry": "Prøver på nytt…", "session.status.retrying": "Prøver på nytt (forsøk {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts index f5ef7b36ebf..1a9895bf650 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts @@ -940,6 +940,8 @@ export const dict = { "session.messages.welcome": "Kilo Code to asystent programowania AI. Poproś go o tworzenie funkcji, naprawę błędów lub wyjaśnienie bazy kodu.", "session.messages.scrollToBottom": "Przewiń na dół", + "session.messages.initializing": "Inicjalizacja...", + "session.messages.taskStarting": "Uruchamianie...", "session.status.writingResponse": "Pisanie odpowiedzi…", "session.status.retry": "Ponawianie…", "session.status.retrying": "Ponawiam próbę ({{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts index 7212b62f220..4f8d6c05748 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts @@ -943,6 +943,8 @@ export const dict = { "session.messages.welcome": "Kilo Code — это AI-помощник для программирования. Попросите его создать функции, исправить ошибки или объяснить вашу кодовую базу.", "session.messages.scrollToBottom": "Прокрутить вниз", + "session.messages.initializing": "Инициализация...", + "session.messages.taskStarting": "Запуск...", "session.status.writingResponse": "Пишу ответ…", "session.status.retry": "Повторная попытка…", "session.status.retrying": "Повторная попытка ({{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/th.ts b/packages/kilo-vscode/webview-ui/src/i18n/th.ts index e36911948da..3cfcce07870 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/th.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/th.ts @@ -931,6 +931,8 @@ export const dict = { "session.messages.empty": "เริ่มการสนทนาโดยพิมพ์ข้อความด้านล่าง", "session.messages.welcome": "Kilo Code เป็นผู้ช่วยเขียนโค้ด AI ขอให้สร้างฟีเจอร์ แก้ไขบัก หรืออธิบายโค้ดเบสของคุณ", "session.messages.scrollToBottom": "เลื่อนไปด้านล่าง", + "session.messages.initializing": "กำลังเริ่มต้น...", + "session.messages.taskStarting": "กำลังเริ่มทำงาน...", "session.status.writingResponse": "กำลังเขียนคำตอบ...", "session.status.retry": "กำลังลองใหม่…", "session.status.retrying": "กำลังลองใหม่ (ครั้งที่ {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts index 757d187068b..e265ab8f21f 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts @@ -939,6 +939,8 @@ export const dict = { "session.messages.welcome": "Kilo Code bir yapay zeka kodlama asistanıdır. Özellik geliştirmesini, hata düzeltmesini veya kod tabanınızı açıklamasını isteyin.", "session.messages.scrollToBottom": "En alta kaydır", + "session.messages.initializing": "Başlatılıyor...", + "session.messages.taskStarting": "Başlıyor...", "session.status.writingResponse": "Yanıt yazılıyor...", "session.status.retry": "Yeniden deneniyor…", "session.status.retrying": "Yeniden deneniyor (deneme {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts index 478b51ec3ec..e1c4fdb1efe 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts @@ -940,6 +940,8 @@ export const dict = { "session.messages.welcome": "Kilo Code — це асистент з кодування на базі ШІ. Попросіть його розробити функцію, виправити помилку або пояснити вашу кодову базу.", "session.messages.scrollToBottom": "Прокрутити до низу", + "session.messages.initializing": "Ініціалізація...", + "session.messages.taskStarting": "Запуск...", "session.status.writingResponse": "Пишу відповідь...", "session.status.retry": "Повторна спроба…", "session.status.retrying": "Повторна спроба (спроба {{ attempt }})… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts index 641dea0b242..682ad0e0490 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts @@ -923,6 +923,8 @@ export const dict = { "session.messages.empty": "在下方输入消息以开始对话。", "session.messages.welcome": "Kilo Code 是一个 AI 编程助手。让它帮你构建功能、修复 bug 或解释代码库。", "session.messages.scrollToBottom": "滚动到底部", + "session.messages.initializing": "初始化中...", + "session.messages.taskStarting": "启动中...", "session.status.writingResponse": "正在撰写回复…", "session.status.retry": "正在重试…", "session.status.retrying": "正在重试(第 {{ attempt }} 次)… {{ message }}", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts index 85cde30b472..4083fa71274 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts @@ -925,6 +925,8 @@ export const dict = { "session.messages.empty": "在下方輸入訊息以開始對話。", "session.messages.welcome": "Kilo Code 是一個 AI 程式設計助手。讓它幫你建構功能、修復 bug 或解釋程式碼庫。", "session.messages.scrollToBottom": "捲動至底部", + "session.messages.initializing": "初始化中...", + "session.messages.taskStarting": "啟動中...", "session.status.writingResponse": "正在撰寫回覆…", "session.status.retry": "正在重試…", "session.status.retrying": "正在重試(第 {{ attempt }} 次)… {{ message }}", diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index c528c476f67..03ab3f3e4dc 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -1114,6 +1114,13 @@ export function Session() { scrollAcceleration={scrollAcceleration()} > + {/* kilocode_change start */} + + + ↳ Initializing... + + + {/* kilocode_change end */} {(message, index) => ( @@ -2064,11 +2071,18 @@ function Task(props: ToolProps) { if (!props.input.description) return "" let content = [`${Locale.titlecase(props.input.subagent_type ?? "General")} Task — ${props.input.description}`] - if (isRunning() && tools().length > 0) { - // content[0] += ` · ${tools().length} toolcalls` - if (current()) content.push(`↳ ${Locale.titlecase(current()!.tool)} ${(current()!.state as any).title}`) - else content.push(`↳ ${tools().length} toolcalls`) + // kilocode_change start + if (isRunning()) { + if (tools().length === 0) { + content.push(`↳ Starting...`) + } else if (current()) { + // content[0] += ` · ${tools().length} toolcalls` + content.push(`↳ ${Locale.titlecase(current()!.tool)} ${(current()!.state as any).title}`) + } else { + content.push(`↳ ${tools().length} toolcalls`) + } } + // kilocode_change end if (props.part.state.status === "completed") { content.push(`└ ${tools().length} toolcalls · ${Locale.duration(duration())}`) From f2cb0d7055c5135df7067789b12386feb47a12a5 Mon Sep 17 00:00:00 2001 From: Alex Alecu Date: Tue, 14 Apr 2026 17:02:11 +0300 Subject: [PATCH 08/16] fix(cli): add kilocode_change markers and regenerate source-links --- packages/kilo-docs/source-links.md | 4 +++- packages/opencode/src/cli/cmd/tui/app.tsx | 14 ++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/kilo-docs/source-links.md b/packages/kilo-docs/source-links.md index ab260f2cfa9..ea898533346 100644 --- a/packages/kilo-docs/source-links.md +++ b/packages/kilo-docs/source-links.md @@ -1,7 +1,7 @@ # Source Code Links - + - @@ -55,6 +55,8 @@ - +- + - - diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index a1e03875a0b..9ea5009463d 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -1,7 +1,7 @@ import { render, TimeToFirstDraw, useKeyboard, useRenderer, useTerminalDimensions } from "@opentui/solid" import { Clipboard } from "@tui/util/clipboard" import { Selection } from "@tui/util/selection" -import { createCliRenderer, MouseButton, TextAttributes, type CliRendererConfig } from "@opentui/core" +import { createCliRenderer, MouseButton, TextAttributes, type CliRendererConfig } from "@opentui/core" // kilocode_change import { RouteProvider, useRoute } from "@tui/context/route" import { Switch, @@ -16,12 +16,12 @@ import { on, onCleanup, } from "solid-js" -import { win32DisableProcessedInput, win32FlushInputBuffer, win32InstallCtrlCGuard } from "./win32" +import { win32DisableProcessedInput, win32FlushInputBuffer, win32InstallCtrlCGuard } from "./win32" // kilocode_change import { Flag } from "@/flag/flag" import semver from "semver" import { DialogProvider, useDialog } from "@tui/ui/dialog" import { DialogProvider as DialogProviderList } from "@tui/component/dialog-provider" -import { Installation } from "@/installation" +import { Installation } from "@/installation" // kilocode_change import { PluginRouteMissing } from "@tui/component/plugin-route-missing" import { SDKProvider, useSDK } from "@tui/context/sdk" import { StartupLoading } from "@tui/component/startup-loading" @@ -202,6 +202,7 @@ export function tui(input: { await render(() => { return ( } > @@ -966,7 +967,7 @@ function App(props: { onSnapshot?: () => Promise }) { ) -} +} // kilocode_change // kilocode_change start — guard against missing renderer context in ErrorBoundary fallback function tryUseRenderer() { @@ -986,13 +987,13 @@ function tryUseTerminalDimensions() { } // kilocode_change end +// kilocode_change start — inlined ErrorComponent with safe renderer/keyboard guards function ErrorComponent(props: { error: Error reset: () => void onExit: () => Promise mode?: "dark" | "light" }) { - // kilocode_change start — use safe accessors so ErrorComponent renders even without renderer context const term = tryUseTerminalDimensions() const renderer = tryUseRenderer() @@ -1015,7 +1016,7 @@ function ErrorComponent(props: { // Keyboard handler unavailable — renderer context may be missing. // Ctrl+C will still work via the default signal handler. } - // kilocode_change end + const [copied, setCopied] = createSignal(false) const issueURL = new URL("https://github.com/Kilo-Org/kilocode/issues/new?template=bug-report.yml") @@ -1077,3 +1078,4 @@ function ErrorComponent(props: { ) } +// kilocode_change end From 20c8f3e5bead9da024cad34b4cfc748ba6340ba4 Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 14 Apr 2026 10:04:52 -0400 Subject: [PATCH 09/16] docs(kilo-docs): recommend dedicated Google account and remove suggested-configuration page - Update google.md and end-to-end.md to recommend dedicated/Workspace bot accounts - Remove suggested-configuration.md (duplicate of end-to-end.md) - Add redirect from /docs/kiloclaw/suggested-configuration to /docs/kiloclaw/end-to-end --- .../kiloclaw/development-tools/google.md | 6 +- .../kilo-docs/pages/kiloclaw/end-to-end.md | 4 + .../pages/kiloclaw/suggested-configuration.md | 171 ------------------ packages/kilo-docs/previous-docs-redirects.js | 10 + 4 files changed, 18 insertions(+), 173 deletions(-) delete mode 100644 packages/kilo-docs/pages/kiloclaw/suggested-configuration.md diff --git a/packages/kilo-docs/pages/kiloclaw/development-tools/google.md b/packages/kilo-docs/pages/kiloclaw/development-tools/google.md index 3a7cdce83ac..6a417fa9c76 100644 --- a/packages/kilo-docs/pages/kiloclaw/development-tools/google.md +++ b/packages/kilo-docs/pages/kiloclaw/development-tools/google.md @@ -7,8 +7,10 @@ description: "Connect a dedicated Google account to KiloClaw for access to Gmail Connect a dedicated Google account to KiloClaw so it can interact with Google Workspace services — Gmail, Calendar, Drive, Docs, Sheets, Slides, Tasks, People, Forms, Chat, Classroom, and Apps Script. -{% callout type="warning" title="Use a standalone Google account" %} -We strongly recommend creating a **dedicated Google account** specifically for KiloClaw rather than connecting your personal Google account. This keeps your personal data separate and gives you full control over what KiloClaw can access. Throughout this guide, "the KiloClaw Google account" refers to this dedicated account. +{% callout type="warning" title="Use a dedicated Google account" %} +We recommend creating a **dedicated Google account** for KiloClaw. This keeps your personal data separate and gives you full control over what KiloClaw can access. + +If you are using Google Workspace, we recommend creating the bot account inside the Google Workspace. {% /callout %} ## What You Get diff --git a/packages/kilo-docs/pages/kiloclaw/end-to-end.md b/packages/kilo-docs/pages/kiloclaw/end-to-end.md index 5aa0e1913d8..7277445346c 100644 --- a/packages/kilo-docs/pages/kiloclaw/end-to-end.md +++ b/packages/kilo-docs/pages/kiloclaw/end-to-end.md @@ -46,6 +46,10 @@ Before configuring, take these preflight steps: 1. **Create a Google Account for your Claw** — Go to [google.com](https://www.google.com/) and create a new Google/Gmail account dedicated to your KiloClaw. Something like `yourname.bot@gmail.com` works well. +{% callout type="tip" title="Google Workspace users" %} +If your organization uses Google Workspace, consider creating the dedicated bot account inside your Workspace domain (e.g., `claw@yourcompany.com`) rather than as a standalone `@gmail.com` account. A Workspace-managed account benefits from your organization's admin policies, makes calendar sharing and internal collaboration seamless, and avoids external-sharing friction that free Gmail accounts can encounter. +{% /callout %} + 2. **Set up Google Cloud** — Visit [console.cloud.google.com](https://console.cloud.google.com). Accept the terms of service and click "Start my free tier". You may need to add a credit card for identity verification. {% callout type="info" %} diff --git a/packages/kilo-docs/pages/kiloclaw/suggested-configuration.md b/packages/kilo-docs/pages/kiloclaw/suggested-configuration.md deleted file mode 100644 index fa32037e7aa..00000000000 --- a/packages/kilo-docs/pages/kiloclaw/suggested-configuration.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: "Setup walkthrough" -description: "Start-to-finish guide for configuring your KiloClaw instance" ---- - -# Setup walkthrough - -This guide walks you through a full KiloClaw setup — from creating accounts to scheduling your first automated workflow. Plan for about 60 minutes. - ---- - -## Planning your setup - -For most users, a useful KiloClaw configuration involves: - -1. A **chat platform** (called a "channel" in OpenClaw) so you can message your Claw -2. **Google services** for email, calendar, and Drive -3. **GitHub** for code and markdown syncing - -### Use dedicated accounts for your Claw - -We recommend creating **separate accounts** for your KiloClaw rather than connecting it to your personal accounts. This applies to Google, GitHub, and any other services you connect. A dedicated account improves isolation — your personal data stays separate, and you can control exactly what access the Claw has by sharing or delegating only what you want. - -### Chat platform options - -- **[Kilo Chat](https://app.kilo.ai)** — available in the web app and coming soon to iOS and Android; requires zero configuration -- **[Telegram](/docs/kiloclaw/chat-platforms/telegram)** — easy to set up, private by default -- **[Discord](/docs/kiloclaw/chat-platforms/discord)** — moderate setup -- **[Slack](/docs/kiloclaw/chat-platforms/slack)** — most involved setup - -{% callout type="warning" title="Chain-of-connection security" %} -If your Claw has access to sensitive data (like your email), be careful which chat platform you connect it to. On broadly-accessible platforms like Slack or Discord, anyone on the server could potentially message your Claw and access that data. If you're connecting sensitive integrations, use a private platform like Kilo Chat or Telegram. -{% /callout %} - -The steps below walk you through this configuration. - ---- - -## Preflight Steps - -Take these steps before configuring your Claw. - -If you are doing a [1-1 configuration call with Kilo](https://kilo.ai/kiloclaw/config-service), please complete these steps before the call. - -### Google - -Configuring Google services is by far the most involved part of setting up your Claw. - -Before configuring, take these preflight steps: - -1. **Create a Google Account for your Claw** — Go to [google.com](https://www.google.com/) and create a new Google/Gmail account dedicated to your KiloClaw. Something like `yourname.bot@gmail.com` works well. - -2. **Set up Google Cloud** — Visit [console.cloud.google.com](https://console.cloud.google.com). Accept the terms of service and click "Start my free tier". You may need to add a credit card for identity verification. - - {% callout type="info" %} - Nothing KiloClaw does costs any money with Google. - {% /callout %} - -3. **Install Docker** — KiloClaw configures Google by running a Docker container on your machine. Download Docker at [docker.com](https://www.docker.com/), then open it. You don't need to sign in or create a Docker account. - -## Other Services - -1. **Create a GitHub account for your Claw** — Using your new Gmail address, create a matching GitHub account for your Claw. - ---- - -## Set up a messaging platform - -Your Claw needs a way to communicate with you. **[Kilo Chat](https://app.kilo.ai)** requires no setup — just open the web app. For other platforms, follow the relevant guide: - -- [Telegram](/docs/kiloclaw/chat-platforms/telegram) — about 2 minutes -- [Discord](/docs/kiloclaw/chat-platforms/discord) — about 10 minutes -- [Slack](/docs/kiloclaw/chat-platforms/slack) — about 15 minutes; always use the manifest - -{% callout type="tip" %} -If you're not sure which to pick, Kilo Chat (no setup) or Telegram (2 minutes) are the easiest options. -{% /callout %} - ---- - -## Set up Google OAuth - -This lets your Claw act as the bot Google account — sending email, reading calendar, and more. Takes about 15 minutes. - -Prerequisites: Docker is installed and running, and your bot Google account is already created. - -1. In the KiloClaw dashboard, go to **Settings → Google Account** and copy the Docker command shown. -2. Open a terminal and run the command. -3. Follow the steps in the console: - - At each step, confirm you're logged in to the bot account (check the top-right corner of the screen). - - After project creation, confirm you're in the correct project. - - The last step may look like it failed — this is expected. - -For full details, see the [Google setup guide](/docs/kiloclaw/development-tools/google). - ---- - -## Set up GitHub - -A dedicated bot GitHub account is strongly recommended. Takes about 7 minutes. - -**Create a Personal Access Token (PAT):** - -1. In GitHub, go to **Settings → Developer Settings → Personal Access Tokens → Classic → Generate new token**. -2. Select these scopes: `repo`, `workflow`, `write:org`, `read:user`. - -For full details, see the [GitHub setup guide](/docs/kiloclaw/development-tools/github). - -**Set up a private workspace repo:** - -Once GitHub is connected, ask your Claw to back up its workspace: - -``` -Use your GitHub access to back up your workspace. Make it a GitHub repo and push it as a private repo. Add me as a member so I can see it. Then set up a cron job to pull, rebase, and push any changes at least once an hour. -``` - -After sending that, redeploy from the dashboard to pick up the changes. - ---- - -## Grant email and calendar access - -After OAuth is set up, decide how much access to give your Claw to your personal accounts. - -| Option | What it does | Best for | Configured from | -| ----------------------- | --------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------- | -| Forward select emails | A Gmail filter forwards specific senders or labels to the bot account | Targeted use cases like newsletter digests | Your personal account | -| Forward all email | Forwards your full inbox to the bot | Simpler setups where noise is acceptable | Bot account (destination) | -| Full account delegation | Gives the bot direct read/write access to your personal account | Maximum capability | Your personal account — Gmail Settings → Add a delegate | - -{% callout type="info" %} -Email forwarding is configured from the **destination** (bot) account. Account delegation is configured from the **source** (personal) account. -{% /callout %} - -**Push notifications:** by default, your Claw wakes up on every incoming email. If you'd prefer a digest (e.g., once at 7am), disable push notifications in **Settings → Google Account** on the [dashboard](/docs/kiloclaw/dashboard) — otherwise it processes each email as it arrives. - -**Google Calendar:** share your personal calendar from your personal Google account. Go to **Google Calendar → Settings → Settings for my calendars → [your calendar] → Share with specific people**, and add the bot account. - ---- - -## Enable auto-approval - -By default, KiloClaw asks for confirmation before every tool call. To let it act freely, go to the [KiloClaw dashboard](https://app.kilo.ai/claw) and enable auto-approval in the **Default Permissions** section. - ---- - -## Prompt and schedule work - -**How to prompt your Claw:** just tell it in plain language what you want. Be specific. If you want it to remember something across sessions, tell it to write it down in a specific file. - -**Scheduling jobs:** tell your Claw when and what to do — for example: - -``` -Every day at 7am, summarize my emails and send me a digest. -``` - -Mentioning "cron job" helps it understand you want a recurring scheduled task. - -**Skills:** the OpenClaw Skills hub has pre-built capabilities you can add. The easiest way to install a skill is to just ask your Claw by name: - -``` -Install the [skill name] skill. -``` - ---- - -## Manage inference - -**Model picker:** Balanced is a good starting point. Frontier is more capable but significantly more expensive. - -You can also use your KiloPass credits — find this under **Profile** in the dashboard. diff --git a/packages/kilo-docs/previous-docs-redirects.js b/packages/kilo-docs/previous-docs-redirects.js index f20702d05fb..24c86982e35 100644 --- a/packages/kilo-docs/previous-docs-redirects.js +++ b/packages/kilo-docs/previous-docs-redirects.js @@ -825,4 +825,14 @@ module.exports = [ basePath: false, permanent: true, }, + + // ============================================ + // KILOCLAW + // ============================================ + { + source: "/docs/kiloclaw/suggested-configuration", + destination: "/docs/kiloclaw/end-to-end", + basePath: false, + permanent: true, + }, ] From e0489f2f4bb55ff3ab906b0f692a6737589290fe Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 14 Apr 2026 10:07:03 -0400 Subject: [PATCH 10/16] Apply suggestion from @alexkgold --- packages/kilo-docs/pages/kiloclaw/end-to-end.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/kilo-docs/pages/kiloclaw/end-to-end.md b/packages/kilo-docs/pages/kiloclaw/end-to-end.md index 7277445346c..eacbdc7b310 100644 --- a/packages/kilo-docs/pages/kiloclaw/end-to-end.md +++ b/packages/kilo-docs/pages/kiloclaw/end-to-end.md @@ -47,7 +47,9 @@ Before configuring, take these preflight steps: 1. **Create a Google Account for your Claw** — Go to [google.com](https://www.google.com/) and create a new Google/Gmail account dedicated to your KiloClaw. Something like `yourname.bot@gmail.com` works well. {% callout type="tip" title="Google Workspace users" %} -If your organization uses Google Workspace, consider creating the dedicated bot account inside your Workspace domain (e.g., `claw@yourcompany.com`) rather than as a standalone `@gmail.com` account. A Workspace-managed account benefits from your organization's admin policies, makes calendar sharing and internal collaboration seamless, and avoids external-sharing friction that free Gmail accounts can encounter. +If your organization uses Google Workspace, create the dedicated bot account inside your Workspace domain (e.g., `claw@yourcompany.com`) rather than as a standalone `@gmail.com` account. + +A Workspace-managed account benefits from your organization's admin policies, making configuration easier. {% /callout %} 2. **Set up Google Cloud** — Visit [console.cloud.google.com](https://console.cloud.google.com). Accept the terms of service and click "Start my free tier". You may need to add a credit card for identity verification. From a828e1a1ee2fcba2175f3a08bb89a25af2142193 Mon Sep 17 00:00:00 2001 From: Alex Alecu Date: Tue, 14 Apr 2026 17:10:03 +0300 Subject: [PATCH 11/16] fix(cli): restore onBeforeExit in ErrorComponent --- packages/opencode/src/cli/cmd/tui/app.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 9ea5009463d..0507c6f0240 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -202,8 +202,11 @@ export function tui(input: { await render(() => { return ( } + // kilocode_change start + fallback={(error, reset) => ( + + )} + // kilocode_change end > @@ -964,10 +967,12 @@ function App(props: { onSnapshot?: () => Promise }) { {plugin()} + {/* kilocode_change start */} ) -} // kilocode_change +} +// kilocode_change end // kilocode_change start — guard against missing renderer context in ErrorBoundary fallback function tryUseRenderer() { @@ -991,6 +996,7 @@ function tryUseTerminalDimensions() { function ErrorComponent(props: { error: Error reset: () => void + onBeforeExit?: () => Promise onExit: () => Promise mode?: "dark" | "light" }) { @@ -1000,6 +1006,7 @@ function ErrorComponent(props: { const height = () => term?.().height ?? process.stdout.rows ?? 24 const handleExit = async () => { + await props.onBeforeExit?.() renderer?.setTerminalTitle("") renderer?.destroy() win32FlushInputBuffer() From 4c038b17d29d04f288d9b1cdbb4c3c9bfad89395 Mon Sep 17 00:00:00 2001 From: "kilo-maintainer[bot]" Date: Tue, 14 Apr 2026 15:19:03 +0000 Subject: [PATCH 12/16] release: v7.2.6 --- bun.lock | 32 +++++++++++++------------- package.json | 2 +- packages/app/package.json | 2 +- packages/desktop-electron/package.json | 2 +- packages/desktop/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++----- packages/kilo-docs/package.json | 2 +- packages/kilo-gateway/package.json | 2 +- packages/kilo-i18n/package.json | 2 +- packages/kilo-telemetry/package.json | 2 +- packages/kilo-ui/package.json | 2 +- packages/kilo-vscode/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/script/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/sdk/js/src/v2/gen/sdk.gen.ts | 2 +- packages/storybook/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- script/upstream/package.json | 2 +- sdks/vscode/package.json | 2 +- 22 files changed, 42 insertions(+), 42 deletions(-) diff --git a/bun.lock b/bun.lock index 767e26bd302..dd33585bcf6 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@kilocode/kilo-i18n": "workspace:*", "@kilocode/kilo-ui": "workspace:*", @@ -85,7 +85,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -118,7 +118,7 @@ }, "packages/desktop-electron": { "name": "@opencode-ai/desktop-electron", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -150,7 +150,7 @@ }, "packages/kilo-docs": { "name": "@kilocode/kilo-docs", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@docsearch/css": "^4", "@docsearch/js": "^4", @@ -179,7 +179,7 @@ }, "packages/kilo-gateway": { "name": "@kilocode/kilo-gateway", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", @@ -214,7 +214,7 @@ }, "packages/kilo-i18n": { "name": "@kilocode/kilo-i18n", - "version": "7.2.5", + "version": "7.2.6", "devDependencies": { "@tsconfig/node22": "catalog:", "@types/bun": "catalog:", @@ -227,7 +227,7 @@ }, "packages/kilo-telemetry": { "name": "@kilocode/kilo-telemetry", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@kilocode/kilo-gateway": "workspace:*", "@opentelemetry/api": "1.9.0", @@ -247,7 +247,7 @@ }, "packages/kilo-ui": { "name": "@kilocode/kilo-ui", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@kobalte/core": "0.13.11", "@opencode-ai/util": "workspace:*", @@ -282,7 +282,7 @@ }, "packages/kilo-vscode": { "name": "kilo-code", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@anthropic-ai/sdk": "^0.39.0", "@kilocode/kilo-i18n": "workspace:*", @@ -335,7 +335,7 @@ }, "packages/opencode": { "name": "@kilocode/cli", - "version": "7.2.5", + "version": "7.2.6", "bin": { "kilo": "./bin/kilo", "kilocode": "./bin/kilo", @@ -475,7 +475,7 @@ }, "packages/plugin": { "name": "@kilocode/plugin", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@kilocode/sdk": "workspace:*", "zod": "catalog:", @@ -499,7 +499,7 @@ }, "packages/script": { "name": "@opencode-ai/script", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "semver": "^7.6.3", }, @@ -510,7 +510,7 @@ }, "packages/sdk/js": { "name": "@kilocode/sdk", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "cross-spawn": "catalog:", }, @@ -525,7 +525,7 @@ }, "packages/storybook": { "name": "@opencode-ai/storybook", - "version": "7.2.5", + "version": "7.2.6", "devDependencies": { "@opencode-ai/ui": "workspace:*", "@solidjs/meta": "catalog:", @@ -548,7 +548,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "@kilocode/sdk": "workspace:*", "@kobalte/core": "catalog:", @@ -597,7 +597,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "7.2.5", + "version": "7.2.6", "dependencies": { "zod": "catalog:", }, diff --git a/package.json b/package.json index cf104473a3e..dc24882bfb5 100644 --- a/package.json +++ b/package.json @@ -134,6 +134,6 @@ "@ai-sdk/provider-utils@4.0.21": "patches/@ai-sdk%2Fprovider-utils@4.0.21.patch", "@ai-sdk/anthropic@3.0.64": "patches/@ai-sdk%2Fanthropic@3.0.64.patch" }, - "version": "7.2.5", + "version": "7.2.6", "peerDependencies": {} } diff --git a/packages/app/package.json b/packages/app/package.json index f21b7366223..012383c7d54 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "7.2.5", + "version": "7.2.6", "description": "", "type": "module", "exports": { diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index f9037824fff..9f3c1305d4b 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop-electron", "private": true, - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index d5b5cf4dc44..dae829fbe66 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index aef9590fbcd..3cf94457c6b 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "kilo" name = "Kilo" description = "The open source coding agent." -version = "1.3.17" +version = "7.2.6" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/Kilo-Org/kilocode" @@ -11,26 +11,26 @@ name = "Kilo" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.17/opencode-darwin-arm64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.2.6/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.17/opencode-darwin-x64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.2.6/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.17/opencode-linux-arm64.tar.gz" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.2.6/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.17/opencode-linux-x64.tar.gz" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.2.6/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.17/opencode-windows-x64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.2.6/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/kilo-docs/package.json b/packages/kilo-docs/package.json index f5a5445ba97..5b0251756db 100644 --- a/packages/kilo-docs/package.json +++ b/packages/kilo-docs/package.json @@ -1,6 +1,6 @@ { "name": "@kilocode/kilo-docs", - "version": "7.2.5", + "version": "7.2.6", "private": true, "scripts": { "dev": "next dev --webpack --port 3002", diff --git a/packages/kilo-gateway/package.json b/packages/kilo-gateway/package.json index 9dba987edff..02bc8e372b1 100644 --- a/packages/kilo-gateway/package.json +++ b/packages/kilo-gateway/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@kilocode/kilo-gateway", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "description": "Unified Kilo Gateway package for OpenCode - authentication, provider, and API integration", diff --git a/packages/kilo-i18n/package.json b/packages/kilo-i18n/package.json index 1622fb3b6c2..f3cccf8fa76 100644 --- a/packages/kilo-i18n/package.json +++ b/packages/kilo-i18n/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@kilocode/kilo-i18n", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "description": "Kilo-specific i18n translations and overrides", diff --git a/packages/kilo-telemetry/package.json b/packages/kilo-telemetry/package.json index f1bf7dee295..c798fb0959d 100644 --- a/packages/kilo-telemetry/package.json +++ b/packages/kilo-telemetry/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@kilocode/kilo-telemetry", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "description": "Telemetry for Kilo CLI - PostHog analytics integration", diff --git a/packages/kilo-ui/package.json b/packages/kilo-ui/package.json index 8ba176eafdb..9182d9a6e33 100644 --- a/packages/kilo-ui/package.json +++ b/packages/kilo-ui/package.json @@ -1,6 +1,6 @@ { "name": "@kilocode/kilo-ui", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "exports": { diff --git a/packages/kilo-vscode/package.json b/packages/kilo-vscode/package.json index 99e4f6b7ae4..77c1fca1a07 100644 --- a/packages/kilo-vscode/package.json +++ b/packages/kilo-vscode/package.json @@ -2,7 +2,7 @@ "name": "kilo-code", "displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "description": "Open Source AI coding agent that generates code from natural language, automates tasks, and runs terminal commands. Features inline autocomplete, browser automation, automated refactoring, and custom modes for planning, coding, and debugging. Supports 500+ AI models including Claude (Anthropic), Gemini, Grok, GPT, Codex and GLM.", - "version": "7.2.5", + "version": "7.2.6", "icon": "assets/icons/logo-outline-black.png", "galleryBanner": { "color": "#FFFFFF", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 204361f2e8a..306e8fd82c0 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "7.2.5", + "version": "7.2.6", "name": "@kilocode/cli", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index a01511d7721..32a1ec9fdf2 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@kilocode/plugin", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/script/package.json b/packages/script/package.json index 0818bcdf2ba..661798c4109 100644 --- a/packages/script/package.json +++ b/packages/script/package.json @@ -12,6 +12,6 @@ "exports": { ".": "./src/index.ts" }, - "version": "7.2.5", + "version": "7.2.6", "peerDependencies": {} } diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index dd0fe9fe9d9..2b2f6a4eef9 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@kilocode/sdk", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 665a862eb68..f024b56d07d 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -1133,7 +1133,7 @@ export class Console extends HeyApiClient { /** * Switch active Console org * - * Persist a new active Console account/org selection for the current local OpenCode state. + * Persist a new active Console account/org selection for the current local Kilo state. */ public switchOrg( parameters?: { diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 1003fba57bf..6ed8e6d395e 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -26,7 +26,7 @@ "typescript": "catalog:", "vite": "catalog:" }, - "version": "7.2.5", + "version": "7.2.6", "dependencies": {}, "peerDependencies": {} } diff --git a/packages/ui/package.json b/packages/ui/package.json index 9a97650328f..b9c9468bc07 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "7.2.5", + "version": "7.2.6", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index 4faaccda7b9..839ffff7048 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "7.2.5", + "version": "7.2.6", "private": true, "type": "module", "license": "MIT", diff --git a/script/upstream/package.json b/script/upstream/package.json index a0fbcb9e1e1..c3d8f0a4aa4 100644 --- a/script/upstream/package.json +++ b/script/upstream/package.json @@ -1,6 +1,6 @@ { "name": "@kilocode/upstream-merge", - "version": "7.2.5", + "version": "7.2.6", "private": true, "type": "module", "description": "Scripts for automating upstream opencode merges into Kilo", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 65584ea4ee2..2945cc3912d 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "7.2.5", + "version": "7.2.6", "publisher": "sst-dev", "repository": { "type": "git", From f995fe092c89bee19e566a5e1c2bccbc4e5deb9a Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 14 Apr 2026 17:40:11 +0200 Subject: [PATCH 13/16] fix(vscode): add missing space between 'Modified' and file count in diff summary --- .../src/components/chat/VscodeSessionTurn.tsx | 2 +- .../src/stories/composite.stories.tsx | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/VscodeSessionTurn.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/VscodeSessionTurn.tsx index 7c19bb7c911..517efcff34d 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/VscodeSessionTurn.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/VscodeSessionTurn.tsx @@ -196,7 +196,7 @@ export const VscodeSessionTurn: Component = (props) => {
- {i18n.t("ui.sessionReview.change.modified")} + {i18n.t("ui.sessionReview.change.modified")}{" "} {diffs().length} {i18n.t(diffs().length === 1 ? "ui.common.file.one" : "ui.common.file.other")} diff --git a/packages/kilo-vscode/webview-ui/src/stories/composite.stories.tsx b/packages/kilo-vscode/webview-ui/src/stories/composite.stories.tsx index a9f897e6c35..334b9cbea98 100644 --- a/packages/kilo-vscode/webview-ui/src/stories/composite.stories.tsx +++ b/packages/kilo-vscode/webview-ui/src/stories/composite.stories.tsx @@ -11,10 +11,12 @@ import type { Meta, StoryObj } from "storybook-solidjs-vite" import type { AssistantMessage as SDKAssistantMessage, TextPart, ToolPart } from "@kilocode/sdk/v2" import { StoryProviders, defaultMockData, mockSessionValue } from "./StoryProviders" import { AssistantMessage } from "../components/chat/AssistantMessage" +import { VscodeSessionTurn } from "../components/chat/VscodeSessionTurn" import { ChatView } from "../components/chat/ChatView" import { Part } from "@kilocode/kilo-ui/message-part" import { registerVscodeToolOverrides } from "../components/chat/VscodeToolOverrides" import { SessionContext } from "../context/session" +import { ServerContext } from "../context/server" import type { PermissionRequest, QuestionRequest } from "../types/messages" // Register VS Code tool overrides (bash expanded by default, etc.) @@ -977,3 +979,72 @@ export const McpToolExpanded: Story = { ) }, } + +// --------------------------------------------------------------------------- +// 19. Diff summary — "Modified N files" collapsed header +// --------------------------------------------------------------------------- + +const USER_MSG_ID = "user-msg-diff-001" + +const mockDiffs = [ + { file: "src/components/App.tsx", before: "", after: "", additions: 12, deletions: 3, status: "modified" as const }, + { file: "src/utils/helpers.ts", before: "", after: "", additions: 5, deletions: 8, status: "modified" as const }, + { file: "src/styles/main.css", before: "", after: "", additions: 20, deletions: 0, status: "added" as const }, +] + +export const DiffSummaryCollapsed: Story = { + name: "Diff Summary — Modified N files (collapsed)", + render: () => { + const data = { + ...defaultMockData, + message: { + [SESSION_ID]: [ + { + id: USER_MSG_ID, + sessionID: SESSION_ID, + role: "user", + time: { created: now - 10000 }, + summary: { diffs: mockDiffs }, + }, + { ...baseAssistantMessage, parentID: USER_MSG_ID }, + ], + }, + part: { + [USER_MSG_ID]: [ + { id: "part-user-text", sessionID: SESSION_ID, messageID: USER_MSG_ID, type: "text", text: "Fix the bug" }, + ], + [ASST_MSG_ID]: [textPart], + }, + } + const session = { + ...mockSessionValue({ id: SESSION_ID, status: "idle" }), + messages: () => data.message[SESSION_ID], + } + const server = { + connectionState: () => "connected" as const, + serverInfo: () => undefined, + extensionVersion: () => "1.0.0", + errorMessage: () => undefined, + errorDetails: () => undefined, + isConnected: () => true, + profileData: () => null, + deviceAuth: () => ({ status: "idle" as const }), + startLogin: () => {}, + vscodeLanguage: () => "en", + languageOverride: () => undefined, + workspaceDirectory: () => "/project", + gitInstalled: () => true, + } + return ( + + + +
+ +
+
+
+
+ ) + }, +} From 749337f75df589c715765f2159cbc20fbb601c86 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 14 Apr 2026 15:44:03 +0000 Subject: [PATCH 14/16] chore: update kilo-vscode visual regression baselines --- .../diff-summary-collapsed-chromium-linux.png | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/composite-webview/diff-summary-collapsed-chromium-linux.png diff --git a/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/composite-webview/diff-summary-collapsed-chromium-linux.png b/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/composite-webview/diff-summary-collapsed-chromium-linux.png new file mode 100644 index 00000000000..e65ee419805 --- /dev/null +++ b/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/composite-webview/diff-summary-collapsed-chromium-linux.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57a543bd799f92b35d2c6037a4ffc932a37f59790213006a021bebef9e94b38 +size 6897 From 4b66a9ccadb41d7ef4edc7ab6276b23300a87a68 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 14 Apr 2026 17:45:21 +0200 Subject: [PATCH 15/16] fix(vscode): make diff summary title inline with flexbox so bars render on same line --- packages/kilo-vscode/webview-ui/src/styles/chat-layout.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css b/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css index cf74d06fefd..e8dba566edb 100644 --- a/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css +++ b/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css @@ -176,3 +176,9 @@ .vscode-session-turn-diffs { width: 100%; } + +.vscode-session-turn-diffs [data-slot="session-turn-diffs-title"] { + display: flex; + align-items: center; + gap: 6px; +} From 37c1ff2d6552a91922fbf82933f0e4ef0896e873 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 14 Apr 2026 17:55:44 +0200 Subject: [PATCH 16/16] fix(vscode): align diff bars to text baseline in diff summary header --- packages/kilo-vscode/webview-ui/src/styles/chat-layout.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css b/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css index e8dba566edb..ba6545819a0 100644 --- a/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css +++ b/packages/kilo-vscode/webview-ui/src/styles/chat-layout.css @@ -179,6 +179,6 @@ .vscode-session-turn-diffs [data-slot="session-turn-diffs-title"] { display: flex; - align-items: center; + align-items: baseline; gap: 6px; }