From c38a94e8dff24e9f10e838d9c4a3c2c8487cf2b8 Mon Sep 17 00:00:00 2001 From: Ilya Bogin Date: Sun, 16 Aug 2026 23:24:02 +0300 Subject: [PATCH 1/3] bump keenable to 0.1.1: search results had no text The Keenable API returns both `description` and `snippet` on every result. `description` is frequently empty and `snippet` carries the page text, so the digest the model reads listed titles and URLs with no text. Verified against the live keyless endpoint: 10/10 results had an empty `description` and a `snippet` of 2000-2600 characters. Reads `snippet` first with a `description` fallback, whitespace-collapsed (raw page text arrives with newlines, which broke the digest layout) and capped at 500 characters. The untouched results still go out through `create_json_message`, so the workflow `json` output is unchanged. --- keenable/keenable/keenable.difypkg | Bin 13321 -> 13143 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/keenable/keenable/keenable.difypkg b/keenable/keenable/keenable.difypkg index da650b85587677e7febecbb10088e327d84f547e..1565324abc355a72d28b9dbdd751b50ba16d7d4b 100644 GIT binary patch delta 5248 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 Date: Mon, 17 Aug 2026 13:08:37 +0300 Subject: [PATCH 2/3] keenable 0.1.1: add required manifest repo/contact, satisfy pre-check The Marketplace pre-check tightened since 0.1.0 was reviewed. Repackaged with: - manifest.yaml gains the now-required `repo` and `contact` fields. - README gains a Connection requirements section (outbound HTTPS to api.keenable.ai only, port 443, no inbound, no local network; the fetch tool refuses private/internal addresses before issuing a request). - requirements.txt pins an upper bound on requests. All toolkit validators now pass locally against the unpacked package: manifest metadata, PR body, sensitive capability disclosure, package contents, secrets, binaries, README metadata, dependencies, access domains, prohibited financial activity, python safety. 48 tests pass. --- keenable/keenable/keenable.difypkg | Bin 13143 -> 13491 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/keenable/keenable/keenable.difypkg b/keenable/keenable/keenable.difypkg index 1565324abc355a72d28b9dbdd751b50ba16d7d4b..db402b7c5f0db577f832218bf1d16c7fbfa10390 100644 GIT binary patch delta 2299 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 P5n#Tqv~Z@@-;e$Rt4NQW From 63dd783c7ec21f0485b4747017a761e2f4d5ab85 Mon Sep 17 00:00:00 2001 From: Ilya Bogin Date: Mon, 17 Aug 2026 15:25:57 +0300 Subject: [PATCH 3/3] keenable 0.1.2 (0.1.1 was already published) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous push targeted 0.1.1, which the Marketplace already carries: it shipped 2026-06-23 via #2586 (SSRF-guard and API-key-redaction hardening), so the version check blocked it correctly. Rebuilt as 0.1.2 from the plugin's own source repository at the 0.1.1 tree, so that hardening is carried forward rather than reverted — the earlier package had been built from a copy that predated #2586. Verified inside the archive: version 0.1.2, tools/keenable_search.py reads snippet, utils/keenable_client.py still has the 0.1.1 _candidate_ips guard. All toolkit validators pass locally; 59 tests. --- keenable/keenable/keenable.difypkg | Bin 13491 -> 14081 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/keenable/keenable/keenable.difypkg b/keenable/keenable/keenable.difypkg index db402b7c5f0db577f832218bf1d16c7fbfa10390..905bfa13e764c60ac551953a30e4e83bec35733f 100644 GIT binary patch delta 4967 zcmV-t6PWC?X@PFA%m#nR0);e?Xl$}A8n+0l?ru10x7_sNo%n6-7?SJ9gBn zKp&#-(*J#wK1p#oGnO~r0{u|~hCLk4<>9^OoO_?)4N)*_PiSMpE7u;B`i|DfWKy$* z2^O8%5L)79i*@fjmz}E%m<5abAi|g zADbN#8P9G{BYLgW&3%Mm%I8WgA#ldqUY8vsmhrN@CEU}xMBES~nXn^^M7j5zF=NM` z7Wnq+?Lq-LxUPRAUZCsO-Zh3@46uf2z8LNlJ6SRwb#_d32`lf>I?t2_S zhI~>e$j^VvM6x{wf?@o2%iQJjv$Nd@L>u>&R$pkWtocX0susE~J!_+47O;x~f`~)CyLQ#(1C0a}kD+g?xK12^@4lxoi)E z<|(V;+ssJh>COZmB~kK3V`bak`@%v!AV5`3Q00I8LCQBV`T}^67S9uu{cC^RHXkBodsrcy^-nq>AQ&UwVmp(7k| zML+f~k;M_OC^yNKY54B#f*PKb66k{**xfVKAt!@>mz(6_!Y@>!w=Ri zDw^EVMzO{PNN+UijpJ><)=k{kW5}Nq>Phr(ff77f+vU4=%U7?S zMjZM0KZhLlKZ*Hqy$cWjFXa{nKP~oZouluWP>ZF_^1PN7C^;R50->$gz=#YlV+eoL zlylN>{9XnHrEX3QV{dj;%)IAy?1RN0Zf-8G%YMp3!RpCCP3QC@6Ri=0KZvKqfG#Fh zFJ641@jk+ZAy)GMATK1pk++nvjk!!K!OEJCjqwP?GK9c1jkE}na`Cc~Q65FsXDLf^ zcjE5yxeH858oRMJQI^*;A7i&R&2E2ztFK=^|MK~-7w|6Zmcu!@mpo-vKmXO2`tx7D z(Bt2FArz%_M|OdI@7Xmb^BiN{O*l*`k>2NW?q#D3jqk0Lh_|FXZA>H6Rpa)?pKa-< zv)HilxVXG~0SZl&tzt-~2qOAB89p*Q@5{wI*0?6$E+s=`hau2OlMfALtZ9Gi#FzqT zBezBC65Y!HAbLdoq&&v^c<-IW(n`ILXcAcp?2OMai6&Oq^T#8^sVz+ndzh<0!FJIF zemp~JwF-~st2eJ-zhC|S?duP#%Zm?hUf)E|3FPCDJtow03x`v^iz%nT@2qvE;gX#qU05l8$08mQ<1Qe4QAr-S^3|a#M zHHfpo5BC8CR4E?Mv%3+j6o157ZIjzJlK!q=(aU^T$t7`K;yPcH(^e_*Bs*tkJm(qb z_Ri%ZA+jl91p!0t0qBh*S1*bS_O^$tw6KdUg>TYph_SQx(oZ;W!F z5z8s8af{{T!A;hyNLQhTBA3p{TMVppasF31!0#BJ?3F=-~I%J z(BRO+Q0RfM3+b(}VGlrikPd_n-d4u=l~Ls=9VAII81QOYRyDq{m}MY0oG78S@q%{k z27~xa)}kye1vNe}-6xCfCufQ^`e4>?Yl=pEGuPYjxUovfMSofgOK}M=8>?Kcq#x`o z{-Z(X-C*z)eAjGhf{|IGU!jH1(yw46w5-tibSpLr@&~j|8l9)`25S$(fdC~vTA^Tp zg=idtV7Lvwih!fAXyc)l^+amtg;H3K!I|h3Ik`bEO5p`Xn8rFJGqotzVu=tJO$WDc zKm2%oll^@4{(tWJ-3`njIZrRr%Y?kY7t1A<@WG*-%$JlkXL?W;y2Bz;rBszHS`0`> zxWT36Or(SC!`;>UZ2sfb%{|PZO4iZJq?Fb6>}lVN=dk(;K^aj_7AP!Zvj==9ms+Ul zesL{Cu|{2j!zE$NbxtiPbnH|p7#NDu)NH5}ZnZGNmVa)+e3?U%$J_?yv9PUQy&IN6BE2y}tTk{^9L?_TBvMDkBunAX#}|yXo1P zsAbx2J{2+bJx>OML7{|m-A1pd0*CJ#?d2wX8BGTO z07;U}cYopN$m?u=dmYLa3SsRw6#538BPcjgA$S9BWj=#|#-UBQzy>8&kQG9gvJ@UO zS-auNI6npF?Fc4+0VSR9R=#>byM^mph_wcJPNVZ23e%_(O4P>Vm}|f^9!f)gyuP_h z2W;YdL!gAxc#q{-VU*Er9XOcZyyjdhT#90QCV!MitA$6nzI}KJs0&j{y>vY0-5uLw z`eW)T3aq_@MdKmQJ1$6NoyCuN4i^88g?Chb&Re!MnLvq!+z7??hIxK@@%8zu^M85y z_1Aem8p8@7>FN37tLmKoF8HY_yiol7;?=A4JUvh8IkT)=8S7hP7niTXo66V?uO^hD zs(&(C7DCB?VhImYK%NI?N~K1h32$_sr)|*rf0rT$Gx+$4pLx3tnb{wZin>N!4o^ja zlRFymEPSMx!Ouc90bx61wQ%lu2_hCOVFriJ2CIFe@9uudA}WW!+w1;<+8Z$pu8iVN zEK+al8Eb(pT~=H95Rg5TH6waqj0zrnMSoavnMH^80n0px$Z48*LnyTcvyp^VN}cpj zDY10iKCNkdAf(1eTPtBV)YZWXy+j8?OqVI6_454uVp=Z#bvix!`VvZ0IH)aF@-grc zk-tSAS*);FyJ*m_golmr9xY1_YLRJw!^19)vQDMTlrc3CWcS$E_$Ef-_=S>soqs7) z!~)oRw`r7@g>e4(Rij;vg{&l&{Bjf{9t$#~=AJcH4LRb@+m1rshY`G6;;c>va97Fm zLu$-(E-TcPu>}SZl(tpDlV>nAE{%F5U7{cE@$HDbKH}?9YKa5tVRDuP5OK#Rbhq7p zNY=wU!Z)oG#-#LBiw%=4aKdyVuc%oS!{O+Cx^o$H9RGZB>I|+AtCl-Zlo{M>3>D?yo*Le zFm37d3V&)FYVt>h@EtW5wmAliRnTc2WLX#o*+RN2)Yusjh}A+tiOx&S>If#2Xi>mM zy29v6E*m<29O6A}CJ1V`k~J5}8n-T{sk6S9odD1oB&{S&m&Pm=rtR>AuqyO+c!Cov zE^A8Q2_-NZePR4rtnx|WbbmA=m;av<(ML;5G}OzxomA+HRpy1I@^7r#>6aU$u}40f zLbG^~rg3U}>?Iq5V93D&D`OEHYLXr>BnBQuEki=GRilxeTo9n#O>8)Xd1J<`N(A)J zW_&CI@nB>b*j}MnGm;K6%rql4AI|v9!38HBf0YEF#THCs`%;_@wtuJ46#g2`xX@6j z)ljakZ+FsbNJiV=S>|?%EsZo znrZp8quR!*(Gjf%Rvo3vd`3HLOL9)4S1JltX?(ll5C8G{hTUzC(&wlF2*r?v5S zXLL+yG~dG#4IXpC4vMZ@!g#F<(aU%*i*80Vyu4<{7JYqDN@+;l()+=MMtk0xf{7$dB9?2SX)F1#y+;bknn13B?`Wb zM6GeVFL)xqSWI2B7+Ss?%|6a2|1Bo}JfD1%O+G!n z96wW|<~J{1yhz4CvFqYmA|>lL8ED6{bG?l$`^!8wIwlIfPd-f)M`a4aLGLohX<66k zPk&V4$>RMuy*xkvwBw+*qwnD%1P;r{r2l^R?gn--c#2DYkpc-f4Bc^4vv}+{kM@1U zd96zyG(Of?cr17H-Te~M_jd|UhkLhJTejYA_zPU^V}_=-An2}pGp>yxPT`7^B8}$s z@0sdK?LRHIqTMfD*iIUULRf^O$CfJ$OMk9H-XGCeWcOHeb0`|;%?3m%YLE7;w&rmg z?|)+f(wRG4!b=@~ENa(_7q8#KM!0ZI)hod-Ek7j6q_I|f1`6-VTHB9m7xF6ko?WH% zTNHHIJIS#6vTtJcjz$s((TUojJo!+-C9 z{Rg$!DkIA2LHUm1gqRwGmm4&VpF*XK@Pl8h`y@$j-`(9qo=5w6-ZCS5Ky?^(CUigZ z(Md2ykWX^dxZB8*$1v-;-;-OR7xebZGa9SHjluE7;PVrWis9=C!51$MrQ~P~$@hk@ zWheLBn&e+1>RQDfeMS_OJReh8SAVLr9a(Z(8mq=Yvt}_c3;+PP lAOHXu0000000000000000HP+7O(q(Xoiq>zJTm|Q004IUd+Y!J delta 4344 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