From 911b62045efb70758036ec11638cdb7defa625ce Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Sat, 10 Oct 2026 12:28:05 +0200 Subject: [PATCH 1/2] feat: add listing metadata and icons --- .claude-plugin/marketplace.json | 5 +- plugins/stella/.claude-plugin/plugin.json | 6 +- plugins/stella/.codex-plugin/plugin.json | 46 +++- plugins/stella/README.md | 19 +- plugins/stella/assets/composer-icon-dark.png | Bin 0 -> 28759 bytes plugins/stella/assets/composer-icon.png | Bin 0 -> 28759 bytes plugins/stella/assets/favicon.svg | 7 + plugins/stella/assets/logo-dark.png | Bin 0 -> 28759 bytes plugins/stella/assets/logo.png | Bin 0 -> 28759 bytes plugins/stella/skills/connect-stella/SKILL.md | 22 +- scripts/README.md | 34 +++ scripts/listing.schema.json | 253 ++++++++++++++++++ scripts/validate_listing.py | 239 +++++++++++++++++ 13 files changed, 614 insertions(+), 17 deletions(-) create mode 100644 plugins/stella/assets/composer-icon-dark.png create mode 100644 plugins/stella/assets/composer-icon.png create mode 100644 plugins/stella/assets/favicon.svg create mode 100644 plugins/stella/assets/logo-dark.png create mode 100644 plugins/stella/assets/logo.png create mode 100644 scripts/README.md create mode 100644 scripts/listing.schema.json create mode 100644 scripts/validate_listing.py diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index b7b908b..060bcde 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,14 +1,15 @@ { "name": "stella", "owner": { - "name": "stella" + "name": "stella labs, s.r.o." }, "description": "Plugins that connect AI agents to stella, the open-source legal workspace.", "plugins": [ { "name": "stella", "source": "./plugins/stella", - "description": "stella's MCP server plus a skill that connects and verifies it." + "description": "Connect stella to search case law and legislation and work with accessible matters and documents.", + "version": "1.1.0" } ] } diff --git a/plugins/stella/.claude-plugin/plugin.json b/plugins/stella/.claude-plugin/plugin.json index 2ceb1c6..3b68e51 100644 --- a/plugins/stella/.claude-plugin/plugin.json +++ b/plugins/stella/.claude-plugin/plugin.json @@ -1,9 +1,9 @@ { "name": "stella", - "version": "0.1.0", - "description": "Connect to stella, the open-source legal workspace: its MCP server and a skill that signs in and verifies the connection.", + "version": "1.1.0", + "description": "Connect stella to search case law and legislation and work with accessible matters and documents.", "author": { - "name": "stella", + "name": "stella labs, s.r.o.", "url": "https://stll.app" }, "homepage": "https://stll.app/docs/get-started/connect-ai-assistant/", diff --git a/plugins/stella/.codex-plugin/plugin.json b/plugins/stella/.codex-plugin/plugin.json index cdc64f8..79443a5 100644 --- a/plugins/stella/.codex-plugin/plugin.json +++ b/plugins/stella/.codex-plugin/plugin.json @@ -1,9 +1,9 @@ { "name": "stella", - "version": "0.1.0", - "description": "Connect to stella, the open-source legal workspace: its MCP server and a skill that signs in and verifies the connection.", + "version": "1.1.0", + "description": "Connect stella to search case law and legislation and work with accessible matters and documents.", "author": { - "name": "stella", + "name": "stella labs, s.r.o.", "url": "https://stll.app" }, "homepage": "https://stll.app/docs/get-started/connect-ai-assistant/", @@ -12,6 +12,44 @@ "skills": "./skills/", "mcpServers": "./.mcp.json", "interface": { - "displayName": "stella" + "displayName": "stella", + "shortDescription": "Legal research and matters", + "longDescription": "Connect stella to search case law and legislation and work with the matters your account can access. Read documents, find templates, inspect contacts, and perform supported document and matter updates through separate tools. Sign in to stella in your browser and review the requested permissions before connecting. Available tools depend on your permissions and the features enabled for your organization. Results include source references where available. You need a stella account and access to an organization. Legal-source coverage varies by jurisdiction.", + "developerName": "stella labs, s.r.o.", + "category": "Productivity", + "capabilities": [ + "Search case law", + "Read court decisions and citations", + "Search and read legislation", + "Find and read matter documents", + "Fill document templates", + "Manage tasks, contacts, and matter records" + ], + "websiteURL": "https://stll.app", + "supportURL": "https://stll.app/support/", + "privacyPolicyURL": "https://stll.app/privacy/", + "termsOfServiceURL": "https://stll.app/terms/", + "defaultPrompt": [ + "Find Czech Supreme Court decisions on dismissal for redundancy and summarize the key reasoning.", + "What does the Czech Labour Code say about the notice period? Quote the provision.", + "List my matters and the tasks that are due this week." + ], + "logo": "./assets/logo.png", + "logoDark": "./assets/logo-dark.png", + "composerIcon": "./assets/composer-icon.png", + "composerIconDark": "./assets/composer-icon-dark.png" + }, + "extensions": { + "com.openai": { + "onboardingSkill": "./skills/connect-stella/SKILL.md", + "review": { + "commerce": false, + "commerce_description": "stella does not sell products or process payments in conversations." + }, + "publication": { + "release_notes": "Adds listing details, icons, and an onboarding skill for the stella connection.", + "countries": [] + } + } } } diff --git a/plugins/stella/README.md b/plugins/stella/README.md index 9065a90..15ce640 100644 --- a/plugins/stella/README.md +++ b/plugins/stella/README.md @@ -4,13 +4,28 @@ Connect to [stella](https://stll.app), the open-source legal workspace, through its remote MCP server. This plugin includes the server configuration and a `connect-stella` skill that guides sign-in and verifies the connection. +Version 1.1.0 includes listing descriptions, capability labels, starter prompts, +publisher and policy links, and 512 × 512 PNG icons for light and dark themes. +The bundled onboarding skill runs setup only when requested. Icon artwork is +the app favicon from `stella/stella`, `apps/web/public/favicon.svg`; its blue +background keeps the same mark legible on both white and `#212121`. +Increase the semantic version in both manifests and the root plugin entry +for every release. + ## Connect Install the `stella` plugin from the `stella/plugins` marketplace, then ask your assistant to connect to stella. You need a stella account and access to an organization. Open the authorization link in your browser, sign in, and review -the requested permissions. The skill checks authentication and asks for one -read-only tool call to verify access. +the requested permissions. The skill checks authentication and can make one +public, read-only tool call when verification is requested. Keep passwords, +tokens, and callback URLs in the client's sign-in flow. + +In clients that support the plugin install command: + +```text +/plugin install stella --marketplace stella/plugins +``` ## Commands and connections diff --git a/plugins/stella/assets/composer-icon-dark.png b/plugins/stella/assets/composer-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9b41059502bacd5fd1a0dc63341cba29f56f2ec6 GIT binary patch literal 28759 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 EKbH8`H2?qr literal 0 HcmV?d00001 diff --git a/plugins/stella/assets/composer-icon.png b/plugins/stella/assets/composer-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9b41059502bacd5fd1a0dc63341cba29f56f2ec6 GIT binary patch literal 28759 zcmY&>DWyBVd3@h{ zzu$fQL!Za9_g*pAoMVnLR-~r75D{FC#k@Hqm(giw)}(ecXoJ>}`6W8EaRH7I)ToA+j{wAlSu0c02o9kS#)#(EFV zOY6CRPkC={Onvf9H#6}3@u1fb*op6-q{`loAGSd*rf$tzFh9h z*gW0esmAHa7_{g+{`GS3DFZ>sOLj-=XWQ?`?Lu1=&}0Qg222slU6DbIEf|O`G)&J3 zO%$iiOF?18Bi)zS%!^`pi29SuCQ`Z>qG9YDY$963doA==UJ-W@rjLGo*3NCHaqA)_ z9jCHM6^e65i0bcXslS#b(iY9q2xWQ`EXNXHhmefPCzi!}+@Haj8a0d4>bk5T(|v2# z=O8XTsn-D0)k6@W|1-&d>FDkKHl4tBorp6X={uOS{bH2NAtEnyokTdICix@U_)XXu zPLEovC`NNLu<;SBRW7cngndzUd7J~m5f5kiuIw$VVlj_im6gxxUci!fXx8PUJ2LAZ z(;dyFqn;`XQzNUhPT%R|M&I=zoT3&RszXC2|u$Vgn zoeM>Y9eKRI{fZ?l@SHkZSPFJnV^M>`lZ}tUW0IRl~lBr61ni?R`Ni#r!rnL zi?z-ryF{{B=7Hk<&hx#B_8W2ZYH6sMe@*j79Z5;wvC0gGUwX6D zMmI)C(LQjUPWi^f6ptcJR!2_jN+H{EiP~*O4?l@OkL+IZ+NfbHQ$LX>h$j|1N0iU! zm%Pkq`J}3L9zrA=#(8hCZn@^Y`bD5Sk&(+dirKOEPvXX)%U~>L@{FTP4(1S|38KI< zos8p`Fnv?2%+C}V8=bXQ-f<0in9cJ{l7!N|$OR=*>fCqAIEq63B_%!~iK;GyDDjfA zmGs)ai_j{mguyy<7tn=sNcnME^R6?E&Xb|FeCaok40?HalVjd_)BqMpq?%r{IBUE@ z;6tK&LZZtNirHt(dh*%YA1M3*?i8|E%oUovvOYHJ?Zp%NnAF(e^azGYokgw}_>MVc zi%Q59o*+=?y1l&}{P227uznjeW&q~QVCFT>kbWZKUNKx4@at(3@;S!8NdjdB`f7@sRAn>d z>^JbTx@r(U{|xR)AMNa6*%_bbjdi9wGpPE zqVF2YJ6x$FzYVKE$^(=wvy?#O0Vu+y6ZY?w>rv7-&gemuKgqw5N$EsX^;-j$c0lBP zENP#sq#xU#swrOkP22;iHBYL5=1*mJVcyD`pIRa-f1gL>JirWC+WZy1qx#L6IHGFV z9UE5d;lf+5(1#Tg!nhR^_Ym<->6@)wcN0nxLiB29_2xeNPRN% zensomEtKx^u6_6ckrJ!Rq=Vi^ik}OHuqY7=^BZ_K2)+7m z=vC}v==v0S*mcKMOBr=j{cejI8tW$kH!Y{6J-ufrF zu~_q>?MN=HR&9-{P={)!%8ou2WFsSl=pB(lR(hSg`wn6IdB)P}`HFDNJ+%xxe@_Vx3f_T`js(^fMg5>ka*^9~3uw5=WhQ9$hD}Sz{ZMp>ZUP?foQt5-frG`)?C=Q z!GS_JG?h)%#rz_M&rLADumI)c;L6@dp}d-EV)z%`!FnMmzP z_^_FDguFAV@WFym&+_|=eHlFj+3gyg5W7>Ikc9NFHNyGDE7uI82J=?ip1KJo%L%5x zv?A`ear>T@|E`IydYRDl#NDJIP|xeO&qCM1IeGe((9Td5McM8Y`OtE*79q5jY92&h zcj*ylA-Z(cA4_7{_cp&bq~)fu1t~KXT(=F}MpG)|1fRgjHY0|8+ojv|kJw`{%5*B@ z6e4arbN;Ll6J?;|FgfnkGx*5wNym#-_$Muf$YSM@oZN=bZFneuoVbyi^)mHU#^!aHn0S0`ICV0<@xSUU+r zi%4Iog1WUxDRYBr&8;h;bUdJCu^3A|J2aiw8N_(*Qy>P`O^b$I`Ylz2Yo*{jD++e5c>=q40|FU-Gs zR^`n03Trj`v*x{-i5{!t$#vPcqK_u(;=tN-yph|+n(lWjWxR&iYrdR8e}*2AV1CoXGskYQfm3{k zdg{ntK6jMGV?ec|-$=n5hsc6jhL!4EQvc>h^4cdD0XLn$$=4r~3S7(M%n@^C+>tyL z$IC1&Sr8Gb%%xQDo|bd}B^hIQBqG~6U_&2Cq}0Bin}s(^J6nMwjS!ACV3VcO+zqYl zK3?QqDY{`pub^8`!|i-Y+le<0)dz$8@jj*nbdJKBHi(5 zihEUwX`qx?{if}kNQEDMo`WwU(o;gQ0hdGoJujjd&42Ll5(hJ4wU2~&9!sA1eqmE9 zp}*l>VgE>?ew$>5>9F?8n)#^qNG#?bDg0Z)bcmA43|jVAA=)<1Sc$c9uSixtHie`{ zi1wCGuZke*m!(;k4pB}t6U>3tCEJ`?al_mb z$rqdA7o>PEe|DxsB<{^Fl4T2%@0rV0MbrF@hTw=Qj@cz*5xuKmyVb514{Po1w(H4c zBgc#5@hLK&S1Rn|j?XBJg0AT@Yo-R3$)$J?!Nlyl_ou&mX8+1t^$lzK&=_fNYv#C5 z2k6Kk=m^!&R7prcp*!3}LC}%B3}cqZfhoWAPORB=yWTjELmtjbK#j8>>+x( zeQljDWXuTmc*uStV4&V*R0|6&i#SsGK@))q@g4zZB4gmfy_CG9=rCz<1j%tu5+h2$ zK@=*T_r5bXHi^MJa|fqFrD)Q^3NeBO4UJt&tTud)mJ@q)J&xt+YBUy=D=v&`41>c( zOO?QfDHBCHf@x3Lmf$+4d{BM*Bd4`&UM5a!Ztc|4;LhG`cQ)B4s$`!L?3hQx zf3ih*Dz)O1(9+>Fk)l6`nn=Mf z+~u5!k6EgIR{Aj#nce4m?#Q&3ytF>cK-Vrt!aUmLe4&c)D{&>VxZAnmLH7F@?oyX0 z3QMUYaj#&S)k3%0V@BFE>Q=70Zhe-{Tn5~MQAz#>sSc$#H z^6&wEO83tT92#8p4{@^H?x8W6v5V}3a(_1Z;amx`azZs`F%Rkqm_JXq`X3(ZGUxo*ywBGOCq1QB#GpXiA&h<{DrplT4$adec{P($1M6FcNtResSt ztNCbvLH^z_b&SE8VB6IJ%#{psmIt?C{`8+BRoNor*6GFK7Uqa)FlTB7Yr{L+SlJjD zn1|s5ihK2)8w746Wcm3gEMjkO%dbPBoH0W$P!IQ?M?dO#Be(P@`$kz)K1M&~Kwj|{-daU-c+;n!H-5Ow z15o(js>kXu9Xy-z2+nyODn3G9%#Ncu-DMwFrn|Nd>KS%f_i)LAG#N&f$w=<6NzWn) zZ^S42yCtkDN#2@l+Nov1j>cEkIYW$P(GZCt8=c%MADd%3eYlSw#4dOp#nQw_6nnCY z_)>_NysDio1en!~3%+EE3v@q4jN3uJ88}LG!YYhU;~Bt^88FsT?1*L02N#Wk)13yeCoH zAUXsT&=4QQEj2iznl326G|gaZy|$iL6Cq%xt}*YMFU;M?w#e*!3q?We==(&GsCR-p znaU~;_IugM#`}@{_xq5&H+AeW2b2-AP{Zh><9H^I1J$0?(-Qkx^e$ZQ z>HO)gB{=`TW8nAqf_{eVux97Z_STr)+N+3T<&xpLm)N+7QE0Tm__m2d$|N^;i`IsOZI(BavBQUw_ywIQ?sO{r|CHuEAy;yf0>#P6 z`w{6iG>zJy#R!}Q1QA5<-u|FhIQWPUi5vN~EOTsSgC>e;EtQgdWkWR;3b%>T{QNh` zu!!4OkqTcb+_xg{LjDjThLPTP6TZ)Cd&*moKUdNlS{ z@9e+E7yjz;kVuSiC< z*c8^6!aEeC@*RhCwILh1cr>bF%0FP|dy12kcAJoLh6r*{a2`qk9xY7Rvv{%Qh>Nq@ z0U!jqr6(q`Anq(QtVFEzLV=4x$46M{uemGbPFx5)GosapeTy&mdVRwPchhcpx+lIm zb$)lqeny(T^_^D;9M@y9qoE&+)K_Q_-3e~O-(>w}EKbuX)$Mg%X*W*+Ny{TJgcIA_AI9iAA#; z!^U@KKEM~?WY*RZeznvku*zZ6hfGg&M~8$?nn!=}kszX*F6Hcf{4GQ0C;!d0uz#X! z~kzbRWh#Cc}4jyy#1L$yr{x|T(3 zOMS2eB4Y0iv+NKF*uLJZE*@tX(0^3I@T=15&op83X{tg0iE9f?L4-(MV3O&a-e$|| zO&fY8?f*%)d_&(gQKmlX4e7k-f!MUWeGUgt6uofJfh- z3k@P81loh+>`Szzt|l{j1?{3m%!r_Xk5N8VslRgGy~mrnE5t{;&$sRk4TsF1IW)ay zBCoLcAdNdwztepB6(v*&o+xf#+=Wr&6>2g)I{Bn*e1uL$LpkakK|X|-MW@+OXY%gN zUM;+MchngV2e;aZFv+&3tUwTxT&Y?5!2vN)yaG@ljI75Hr>Bv*y%9j@rwP4EP|3k|B_l8-fqBbD=&KIXyp`*R=?qn8_ z^5}H*d_@NuPiIz&xXkGl#H>tq*6oYs1~~j>9vl$r`aVdB7AM*8!PBal=9pliNgnibTpl1 z-KZLSG{GqIdopE~Ty@m>_xn$8v3?qjPS}@)2eOP6g~s=K)QGg&wS<1!%wL?i{!g(B z*5f3;=`Bj~OA5!Nz=l2?4+S4V&{ne9`tr~}Hf)j+q91SO2=DbZBaYsrY_pMkyTQ}G zgJ(G``ZE(w^?%B8ijjacX?~3|2pS0%v%c%lSET2lw4kg^&^oX6yW5prvx1VK^FB-2 zcn=+t5voWW^s4WE(1$v7y<4#_wxlocuc@sbdWKmZ*Vfsh9wdHwMNW@)T`-9xS%93Y zcT{F!3Bs|CfCj<#zVZz^$BZ#gq~k#!e)1W`rEzMh8}bxNKBcc-CioENg25dGyoSx< z<} zvuGqDvjN9>S2s}aOPT(N$$j*xQGC1Wz1H;B%62u7GtIUG?{ZEz69@Hli^W-O;jpt5 z@+!_xX~^b|R>a9kqXn=H_czA__R&tg*E2{==$6N#@2}!C(QC&o)()wm_9PS<1Kf&> z@dO-Lh&Oddbn2h#C~SNQ*E#!&ratl8Y!4FO+VX&`lUK}npGd9vx<7Q=y z{+L?~ZR%s%@O=$&Y*ax+xguHsI#vDn)`F?u)!sh}Pya#OZJF_3Di(iexug7?xD|6W z%b>)+wJGk`O2er`GwS>Ts#o(cq9yh0Ks|*D!gkfukE=Jm*|bgM^)+u|hd_ZF$MoZ< z!%uAJyByFfu|H$p0zAq5`kF8CMgCIFeEYi*W&JJApl`Oa08}O+qBfovq=U*9nX7_cCGuj~f6VqOyL`j3!3l4Ix?r za^Kz+goWrN#Ik5F{jeF%KYPo?u_hzLY-Gq+n0X!sq zkeX)2KX=+uz-ql}__yt`@C?$5pGUTVo2+6t{iv>}20^i61-K6>2jFr;LmpeLy@cV7 zuUpDbg0CRN--%q1uT?bJ(zn0SdCvd~SoB2LuXs>24tgNX9!GQ}jWHi<+WpLuGk!?q z&eM&%I@TKs8-@O%9~v^<+2*b65aszWk3#<$DXZU40AJwR-S*K}`XJ7IZ19pZZ*9>8 z3K6UGFsTm7>m;TR0yK!<@?;oR_7~5;rM8@?`ti2-@3FyI)F9LH^Px;Rd(tsBHLXX| zHyNL7y>pu`N;Rm10>1HlC%++MM~Ba(SoU{DN<_ms^V8I`x6u!8Qi?xpaw1R~l?tk@ zdq*VfDCAXuTxr}pS*Xn+v7Bco50d?A9_Xek6R+o^v=GEh{ox!xCs?P_T_#Nr8(Dg6 zT~{M+zx*W(cn_d2iX?q=%Gh4;#lb7?6;)GJ9z6`vc%{+KK@I5UHvdMi2A(n9!d%xEk5ESTU7VYZEkrjvrMaw z#m46|Eq;IYI8y~zC(@n$7B;n9e;KjyK4rMk#9YGqGjp`J42H~4TTfq>S5p8ZpGUxg z=za2@ z8z@zXn-s{j1t}3Hi_!ly63!{T9q-P@q9uqJQ|@1N95(PybjOQ!x*h*wLYHZ7K*{>p z&J@qI+ zG>9kCWa!3Yr;_Vb6j}}5tP8m_-7a#BkPIoc$TaFO}YRq6$Xb2LGdi<0~?J^vnF$K{!fHRrou3u{WTmxV7F zs%;7Xwqf(MePT&d=M8LLv~Clo3XYE@)|KT^VVMKJZc3Wdn~y=-VTM5j==H2)>2e?U zAbDLH9CcRnR+^3h6YRLO83u|#u5bK2&MZ*}jqyoxMs^%BFQ3o&qud%b_93ueIxexq zQ|tRpPIb6)*|YXbN|QpoevZR!H;oub;@0=V&Tj1*Lx!onVg#fBn>!RVEXH>o+ttD_ zOm`fSmW0o869!6Dsbivq7SL~6yMHl+wWTw-#DdQ$;rqXQRL0%5t(P6*uzuym-c-o~ z-yC&fL@{qua59_$gCsVPjPCCX{>U-$3~`TPj&5EskEvfTEU_HJ2N=2pdBnXwAF?DJ zO!PyXl_y=-;UBgag5*dvUth9mpv2-K&x6p_aehK6-^%ZC9-ZMA@8fWh7xDJq%xt(+ z>6>(^y0E5C#J1Dtjv0R5nNND14L1=n{=eg?F2@*i_X$9yAHyz1=tpwm6n&W-6zfbt zFX)%vLE|ltGpEcHVn=opzmlFHanW@?l1H8zRmm&RHpL(b$_M(fKpZmdjDD`Ty~53D zf8~sXBWLTKr{+O>A;B&h{s%mKgzi^u9|np3>JrPzWFQ{C>Yb;36VAE(^nB(jGUy0c*l`wzRSe~Q}e~P*1 zo5&UYnaaK-o%n3?Ub8iQ8#Tlw^EeN#L02tvK_~h1EWfGMv?Cy|=0}VkYo+Z=$OkgG z(#+CIQIKZ&Q0Fcz2k3F4#04uUS;R0_b|XTf-yJlb>b3Q6h!zU?@X!lS z)D(^;8~TN?pszMe&T|X!VZ}>zzrxFXo~o}m&-JjV#c4_X4{&@I1RPF^3Om~|iJw!p z2{GYa|GaE|Ywb_6_BarcMFW%J2T?vpoz~quiK4K6%$Bz8JS@ch>_2tI^#ZOSJ}%b0 zw?^Bq>(W=MWrmciomOT^-+mPeRnEkLz$+XLWNY>puLVx8`>b(_muv4dvx?Qi=O zC87>}LtGgzcm zK9dU`w~7v{`vdhhw>Pn_>Ak_1a&}{ZG%XH0-cfobq|TRJiU){1>5;0>vt&3`scS17 zO@0#B_lra>*zq2e!m!K7vujv~y-t|tQyX$z+?9GiKZ&sUR&EN#|KsA}{m0h(Vh?#Q zJiW}N?O{`qtEt2qm;m#(2SB1(aOL@=~ztQ<< zl>f>SZCaofZl+mH^F@;BuZd=P*X^gH5813m0Be2qI%4s0xwJH=9QY=Ra~>l>kBo|e zaqXi{Tj^qFbNZf*WE#DYm~?!=B*06x-tO2Xx5EgyZiqsK0vw?s_taehAblV)cL2nI zo`vr@K>820i^8&L2XPu%aY4M7GVHCrNV2!{?0Llv>??(XA^!6r7fG|WRb?R^!#FKi zZaSvYtDfRe29v#&uXRrDCbwtpcv|AfXR5X6uv{^npv@|qm+(GEcsSYN_gG?-|E$+W$}L3dE%2sFxo z@C`K5tg(Qh?NOfN*ko@r5JRTEHPgJwcTjAeP8HK(n85%YO7cT-(($3S1`rN69PGHL z8`+f65Jo$vZ>#cBzg`<9zEYt1m{`mK&`rA{dvoj0`bA;we~JZ*+nKSI;{y%vu0ztk zt7MF0Apj2&8}~r09zXm;!v(?9(Pt7kw7r|Ki=BdA5T=Vz%&|KZ=X3j55$7BWJ4rMT z-vUOaH|y^Pos9czdMR1`c2N3W{0S04sA-!%5@00$Rxkd;iyhXHQzvo?Y&|lp$q~5N zHl+15Z(%8QR*sN$sshPAJ@Ll?M2+OWY66_X&x)OM*r<{P@FCg8fuyOgloSKX*sy*= zBvdk!kS5!EU)~+XCZi%joRCJXdX(~M~rC2H9={oe+hvO;)Y(wAaH-{}% zp>zpzqNA5ap18S*g-6$=M1H-Q-P84dsUcRCpr3Zqa~m~U z?k;2~AxoO)Rk6jD;$ZlXNDZbXI zZA#n?HN=gd)gR@54=TkQOKZ%zB8Y@}G939qL~vQ zw`(^sqdR z4f}6*p2mS}>Di_ZuK|5h!b;2ma24au$qnSu-rlP@6~fOf?LPfoRwPzExbY)Z;4nuS zh#E}bYeu!`zDTR^0g!ir#e#wZ0!w>A((FTM6bM>ZEA=^8)S-CdD(_Q!#1@vF-?*i@ zbNYKT={8{?Idp2_?@T$bUi>D9UX8_j;>x&6dG^0x4gIQy%udoW_(0mkNSw_8YD)8| z?w;GHM5jM^FL!!K7^mttN{OtY^It)%YqsNnw7N{EWH|@R>YD)Vo5kN}*5K49%NBfC zT|fLY)10X4rw6#*vhUL+p*iUW(8%~j#*>L|m##>ZP;b8u-h?k=No-h9a1R>8>q{6D zDtxXt<|pYZu@Hcbu!Z;~dp&9k*OSwGh%(K#?^0x{rSI;RE$~5@Ki_DHxttuSamJlG zv;V?z3;)}wZ@}x*?3AU%`XAp+?uRUtNkRd`=i67U%$9$x@*mtb>?W+6zm~k`@lj2` z{7S}kM_D?|!E&#VyBUOXwl~Gzsy*?%9_fmU)itK%7e4lrXT`=!iEgl6Tnvff@+yHG zjs1E%Y2rd2`172#MTQ~?pIK@kR*9SuumU+Xr6~X4Bbx19-3e4Hv-)`vIe()b8U z3&afm>~#SE&8#G`WIQ(=FNkG^(%W`*8s%`-u8J%>_~%eBEXRvIiK5;U2H=N5?+E?! zIT-pYbL8^Q495VQiA>cmM0s*Ff0jMnn5T`2cz7tCJDgV_f}3adaiZE_E4H^KgyR+y z6a%M5`H#k_qVWk-@^>Dfw~j@FQjcI+S55+gIud$qCLEiij@Ls!c&N!B0q`BT<(zff zmRK6IK02|0o%-|aZrt)5ZF*ROv+K}((=e#%4JI=TNYbzVk{XmD+#(4(ImTkGq7f|R zS9q6N3q!hDYVidJq!>4WmsJ3w7s(q(don>EWdW%nptumtddB|?ByicT{=n2>|HVhb z8nE`8#%dMk?9JHmW#K@UrJS)1d={o6zDFqo6RYkx)_WcHWoS6)En{;SXbVl-)KyX# zb)bsjMqFjR!7z?|AHb}e{-)ywsa8{{EPM|An?$al(9rde^Ju$UuQ<3g0p|#sj4|@u zZgC3%z(X&dnrzI!H%s4tVKA$vRuQ={Y?z8EXA2U&oQFaWZ@`~9)ee`x<6ARIeAMJL zDysXsWcEvv*{i7;0k*HQaB4-elztLst8S!&ii`!VJ?u?nv<49p;#W6NzEZ1TdIcir zRDz?=m8-Xp1!TJhbH64(-@=NNf$rCQZA0G3ni;y1VLg(wyfQYbbey=t>*k9QFvj~? zXNoRTKe?+Nu(GQH++%poPV4?WU3pX_?Fpp5@{d|jgf1!F9%Yki7YSnBd3gm25_FEN zJ^76WwE#is!8V0jc|l|z4lny|?ay1+*-+eo21@R@$4w^OVq*!STXP;DK<3qnsL_b0 zYV~O7o~Q=xJbmI`gh$_B^g1c$+AzW_w=?M8N)a~zejI?ffE;o>4lU@H>Y-U6=C@|< z3p1&@zlg??&VZ3}wzxXO-ue?@f*fHA`l*(RW*o8_DBZ_~Sg@vFpfO3zpQVtB^#1=BP6;5K5)=0q@!_5T7_ntLv`-&fj zTJ_~6G1j?#ROmy&&?jx2*1eu#V19y^jP7fpJ>;T=3DO@NDmYDorXLN!0) zP+#G}9yONNaK-;y%I$6p$O7XtN1r194n;laN&qpeysYgX1waDBQ~I$l4Akg7w3o?L z;Yn%D9i6KC6tXj;B8!9fi~bU_0t_cWAw+y0aWKJ3cf+j8x`5|{%mk1{59x`^Jfg`n zTQkMaaR^||M=?X+v&a9d+;$3~=QCuPZ~tZBt>uBEiFi@r)Xm-s>YCHZop5@;2sbBa zN4tlynwQk6#M0Rh$9Q>wx;kzX6$HJ!WkqH0bpRT?l1+qwysOzN(?SzS?}!&ZlOh_P0@WY^Y#U7C$Byclp098552Ui6HGWt&}># zpkV|YM!H|CtY5=nA!ofXXm&LIl6J{5)M7^eV0Yam3aUtOJ)j{Jd3_qe(2soM9PA8x zjDqGDw<}147pn$>`tR%cfG$A$Rugo2cqkoR#?#0Fqaka4|yGx$2mU$ z+^6Y%AwJ5FluyOs`^-Zd2Jo z-5`B4eFL2hDgP4{-YSp0@3dB0!HbP^mG#jeLy+T{NbM0iC@xoIfSw{s5Cqk%U#t^9 z<)WMv2CCo1Bu{a>ZJvMWSU3?7MzWzWC=vYo9&?MdgQ`0#Zg7t7gNl!(`Y8pn6RASR z%pT^-M7jY7vpj`J+$In9#j@h6zkfM1v}Z3J&q@A}V}Ks^Zpa9s+r}eQB>E{E9urt^ z7=Ff&YfifSO}8#&EK++t3_7Y(@2>^H#C?h*HooyWRYtiU`K)yXLAr<%HnTo96)Aka zoFxkaP_%j0sY1F3$k}D68S*Swo_sF$Z^H6b!d>Tl%?NxMcGvETeW}u8gB#H9eAmq) zG${^qG^PPZP4}0A=Qr-X$t|_;;&>p22AK#9wXAM!w?T}8)=3F1fV}PqJ@5C*GEk2y z_l6(BLbcxXAwxbI*ZGZ*xMmU~C7RYywSpO0s(#*eG(vm!>Mc=*GwnL(-^Yt3e1^1> zVmIDA8r2GWt?o(o$dl1aDHgdCKj*v{B>9UYYM0bOWq~-00Y-hbs16H6)5d&=uS6jl zM9H1iHLhcU*(I7?b?HAFcjXYwF`U)!v8aU$%h>cY*wd5DEX}Wifd2I*10Iwd>kX8- zBGJ?9cn|DL^6?TQ!X_8^JZjqg``E+=o)anlZ{^AB7E7{^WTDydlOH>Js`==FL17|0 zd^2`|3H7gcBFX&W^Qz94qVjxB>KV!SmmM>woz6ysnc#!B zEZ{K;_B%2I1Wmhz6)U$CS!O=!Ss5pAEwh>uC_Q=@qwF6-%c_wfZ8B)4!FF@|*1u}J?5D088e znTov+>wX7Jhrqd@REwX_nri@?9$~9b$F1SFkPyl+{6zNC2B%@K3&2SAQSX`emr0N^b zqfj{H?H0nf2f+Pa3tRT8d0sc$ZE01BKC2z z6OaWORAnLsLGny<`p<9c*LXCK7aWR=Z_iTmgGvSKMokeOQ5?-g`9Uk+f&!fT`88bJIG+M2seFyjj7wLla7VYdlodJC=|B>u1n61u%iL5)i z9WzB=!fH_RsRC=bW*Spn<{jcAWTMQy%(IlRx1^>rWPShcOA3d_J(UC^Y^QB}#l;bC z02<)4YbDl0>pO7(mDny^nl=xmB~FlG8YmvXAfVsUf-&>e&6&3AoJp#;L-;zl$hI^x z5Ku>;Ny_8Uaf2rzLnMcFku zrGnvNa{Ae@ReB~CtGk-t-y?v7U|hlY^z+orZF zyP=qN^EZhII>3qoHe4awrciH9of#r|tPkSNAs-NQwphTGOSil*%GoEdqW@eBAJo1S zoKA4&4D-jo3Z6sUfhAR-6|G#FPDVL zlAF@=&a*Y%o%AOPe|_Gb&8C4nmZl=UltDyXG_Er@v8dOnFgKxMER#*psexXi9H6}( z6);SSr0M_qejChm|79WP`oYOt(dtZxdhbmh|0eq0pSvXslL>aWS|vnivT~hE z@E1sm;aw~gmJrJVKIBO@gyTX%5QHTs$6h9X&s6#kMt~$ zn-g5Qj=)A*{$j!}l|JG>1%nFkS0X!KSz*P&_91K44(-}Qp37kOnDj^2L@<24Z?03R z2kRo(I*}tFjs(gm^O_!NK-2RUZjB8Y&wJ!Pmfwomlq2ZDE0b4PK=3C;p(Nipo3rh^ zaELl~6^S8ALQcyf*I(I4v)Dk%T!{>LFy5xqb5#)JEjUyTCD2MWh}Nlub+Wx<+|dhx zLy^Z|yQ|pwY9?6kix(Ec?6*TWh&CB#P&ywKS;6(t!Z%2kZThkckbw|+R-nO5JM2hK z4T7ytf)CX%l2kL>SAJ)S&S>4?t>V)510sx@J{C#HQO1HFGpAY*6Pc>>@!oEFOXENp zGEj2%szPOQmK^RuN|#Q!5oYwEqLqKiqPcJ>i5T$umn;y?S9Mr9&)=%}q#Wwu5$%8H{=05QZuxz>Xt3^Nm}5Ov9NlQo*V7 z8UXQk{FmtKSn7e(s7^#6K>%?O2UXc^B)L3}6&o-K@Nt-iWeBg3uPWvpejrIZon&50 zZ(qdP)jJVP4|4(C`615wK6r=WvV`b5Rj|N;8;i@h1*gyr2oXUrLtzzavWQqx7@x}x zCmiNKVI*zLfYOM(&7$Kr%GHcb`j9y08QI1KWrgGg>$3?O6i|q&i$o4Wzu8+9cpS>~ zDr8zUASC&@0MFadx91KcW&;3M6Tc9o1`^opuW5w@E{JGtFQld6$PVn>eW9!bwN1V0 zn1#kA-n8t`h!%xlEyfR(zA@A^v*|JZCBnQ(897xJjd=XPa$X1E4*hagnd zvM~AM91T&}+vnb9Ko!#5?qc@YksalyqXD1Po!qZXZj*Gim`eF|D|ny=L2qZa@`d6yVH6|J*a~Pa>e}7jSRn2y_KRSzLG(EXk{Vkv^%XINwrzXhhf5Iy4-U znsjYc>%IBP6NSmf@3VA!gSt3i8AFBqh3u5-*S^?QX7sx0kmrlJ@>WU8KvFZO4;M)Q z;u+p9r3qRqdgXB54unclt(bl4?FqPP_)3;PQq8qWAP@01~ZNg(jomwcI#A*cchlZt?du8V1VR;RYik9@U41-v_v%iWp|b|9VaCkT2}eCJ0}i{{@a9bdBm+4 zbOf|?eUt#tss-51gDn}j4Fg6!1Eo4eXtS#Fn9HXB;{{+I!UCh8)$MjtBGG+^7xm)9 zx&}xG6ohdezzpy@|F~Z!9(B*LRL=53<(#<+E^;ZcX%Htls!j@yEP*J6&Ztnh$5mg%o!bZpDTZ!c7f4X~PBv zZb2IPq2~ys-J{3(HsQ>eAZSyu1LFdFg7+)q*oaxiPdrIsWMk` z2`m2F(%Ul|JnX`(RQM6i=gi^0eMx}G7ef|+vy6uZv6#&(<^2gxGUGWaT$0OPA?xAo zNt$aIR`)B3%nJa^(@2ISqNW9_79*rG&MkJ}MBp#FaK_N$V|_MC5%bwfSTZMfxrcZ1qEWA$lN`OAU)1u!&h?bt$rtQHgFNG0qNGEKpMwMJ|KF5o_GJQ2ggqjitScZ zvLe7n`DDhQNL@%)z^3gxZ?ZdHxI9`w-!=|AV0LYlEgImPzK{ZRq(wh88&?@hRL+HH z59)~k4!vklbhL(L>9dDIl-?HT052bgwSwRm;H^ovPDKE?2sJ=8=!fN~Xa29>xlQap z#{@Zx**G79DK&~s7XtCGfbWBEsYmNG|MdlO;U9tYcC9X@EoX!p`Uu!jX1IQF0p`{p z-|r(!eM8Ik?G$wOw*Ybqr;T}fl4c?zS>RA;J+&Z&wRpl{v?K!a!G7M|w!q;N9?g&;0#z(Us?t5q3Yk`M`N~~ZXO-6d&%S)*cYJCE@<%Q+h zTi2=dlO*ae-}^BmQ+cMcE_fZBPclt&+X7)v-9P`NFwdWzw>+)9{w2-_Mb0+5zw9QR zU;fphKxvA315Bp4*6U2DHMh@cwDrzNxb?bj|CprMvyToMDXj7OQdWG?z}LsaE;Uz=bV|=h51nbEIbFL2B zR78e`iPE1sIdE@B+3KUh?UqnaousMv4^ziT5r`I^hlp|@6gw<{r+(42fo42*h@#pw zh1$wCcxX{JYN8bY(nR2kpS_8Ems(rghIv&XcDM5PPU(?0HkD~FeJwlV1g{?k-w z4eteC#y;zjKtUjI$WxrI!~GL#Vv~Z-q6P+~vDX;L3n7qD43v`4k(lh_ZjtEj^`x|> zhyebY^0-A!*t5h>?r5I|{Zo+k@@KP8fghSU9}gpVm~wdq?g6i35da}>K@P{GIR|O2 z_qd2XAXxb^r4xMb(gy{3Wds;cq;rZ@<<-xjXxtf}fTUnXIWly(Q6u-yRSCJVj^jQ7 zWp`TzA$oKxez=>l@AMz@TJ~iSTg?aMKv!Wxc{@R-Q&1@uTSI3?-Cx%XXop~ z&%SEfbHPi#KfLXm*tGToc)uHe-DA(Vu~7p)6q43uH^q%tVgivvPtP}^f!q&ze;K$c zgxn7$JJ4y%f;HR();SSO{S~}jU|??-3vGv^GZq6b)5()wLQNktQV@$@gO(3wBf6&# z@&9YvOj)@@QCxRHvF}J6v#|YViF5GR=@Um`MapTMXXH-h|XDZH`+?F z^B&^#`TLL9u6dEQQdj0ooRApa0RD;%8!q60ZA=C*AGlXhF7i3RQKhG|Lu+idL-rqI zU%s&n@Vlu?pc~*( z;&nwS%?Y6?FP3RnQi^w^;j^L7y1=()d)YhcDIP0CK2~{BCUVgqUOs3Lw8fzEmi4Lp z0|R~+6Ms|=dLtdB;gs1G2CA$J@eX{3cVb@@GAA4E!)x167n_Oid(q^uynl1W=U{~n zJye1Dt*48$-+aT1@*}prOcAuNOKq$9qPO*CW9lm`$b9w*GGg~582I`e)zrVPb`0}Q zx4cigjCh;p^WE7^?!}!I&+m6)PJU*e&y)513Nu_Rxoo%*kH+YAejD9$_kt@T@Qajx z1$xAraaF6bbJ{rnUCFTi2NvC3ZGzF{#osm*%7%Y1i$CU4XEawK5~+MX+x1Sf@$}}H z4X>>6+Y2f7kDrsWy%QsQ$_u4p98~0Vlvc}0y)V$x2sBX8XDQK=vz#%ciC3R==Em!y zBG!5}a%R_K69#PD)@^quG<+VI$HvI~zn;E2Ac{9ydnoDd&J~arP|5|CSP&Fxk(3re zLJ*Z&x|b9cMOt7H0g>*KP!NzZ=w7;Of$!yazkB(Qot<}1pXWR?^X}$%cZ5f^Tq@_k zKIE03&X^MQnS(op;_#61`J}oa`+?v06B-V!+CGc~X`ZbZV&;}39LxC@7VDF4Y&O%* zI%VEJY~JN?(IGSLI!YQCC#0y^pc;|FrEhe;BoiJ!L~tSsJzI4*w1fFYJzK}w@2QUvUsCx&ohdCM~=T^=iuImJ;I6VB2O!0E~ zOR_Ab-Np-wq((!dt`!*|-m_9%v&W6mV)U#@?;T~NB=s1UE~%-lH4{T7$Br#~)U(fd z@@E;Zozk4nwbS6O-@}Php<0KI3*~>Yy1Eeo8+6{Qibg)E;)*-RFV_O*gh!Y4_N*IpJ77e1#t1$Bsuyht99Zh56b5uzm z(+TO@mmR<8f7;#e9|vo`(Jy?gacbK0lhf3Y;927iQs(Ax5fIaLM{BRiH3rKP`183b zowCmpZ4W71L(O8~^wSy{pizWnSz=W7Zorb@1y=((Q_Z0b7KhCv@<+8iVsnCn&up*6?=9aAp=5+{ z)chks$7o=`o_f~@1v$wYrOoVK+!^!9emcZ0O*`5MycL-6ziSvVb8F7r+~gN(8;7;R z=L*_DJjaBbiIRTMH#Lb1seq~a73hR4rQ!B`89rSrfi({{ADOHCTXp}Lbj)&%%*(h- zt`wxcfL^VkPaLWRPbKLy6$DMYy0k>ENq~EGf_3|qt!#sRYAd)%M=Hc&_G|vh8+eRF zwa$gZn_u!Jv|rOZ5c|$_e2}1d`^LZLFkgh+t9&3mKxpuJ=un*LaRpsm4GasJ{pZr6rW2Y49%S# zSlW4KM(0{kUdPeZ{Gv2pK+dB>LnlNz700zy^6Ex^8gAo=0AY*2WEEr{KT=SBcHHTK z{dzR!vbE<&OZV$iDVqin4V0JcO}@=g(+9UhDwtX81X$ePL0xqYLcg0WeFOsJ4CzGs zCW3jZl~7^&V|8a=W;fv)ph9P7CwJ{vF}gS7ADB@S8TD);^Ey7r25G1{yu}JIGtm8_ zmm(N4>LOvWz`NIx@?WkRu>=aL>NpF~bxoqSKAhbPTvnWTVn6%1kJ3lzd_y{QF(9@O zUR0*p0Xa|fZ2s&%-C~qucVR3TPM9vd59(gq^rORL@Wuw`tLjHYWK|8h3g0yL>vxzs zKC-#L^LC#xgkrq+g;8h{ve>q1*2CPx8g@!EI>HAZQl>yS3yq&}>4dnEq>u)bz6qXw zvMt6ONTuyWdPi+a#9gEJj&C~$$43S9SjLZIHbrZkSe|zg+DqT`EOUfp^S3FmRV(m< zHSj_X@yAxUA1NQ*$?^QzUZGMD^%v>aIdw;6SfM;S;8B~*3c|rNS4{4adT06B_{on_ zpP(sjDCZ<^HU@TKz{#KGj3G!oe8v4IUQA~bF-a`3dSK!19?K=kK_7HVW>7Feo&wwY z^LJP_y)$NB*mowTQ-XDI*7_+1Qnb21%gh`EE#C^nfNY5*K&gIBCA9t)bbfuRY(cKi z{#(oH;!N*UsrtX^a?D)f-HyNC?1s2a_+Ru|M!X35xHvE68gMe^TzJitGha~FVOO6poZWqs(1n(RG4|{6 zMZDCZsO+$v!$@aj`TmM^c6M9Phl6G5K+M?BT1h^;xO#7KVf~tQg7@D3(Zi1p`5xh9 z)Y1s)HScO#VDHaAdCt|yt)n$_vD=M44@- z5h;8+Vu;`|rX+;_sc_TOb~*A8eJGeVKr+50u3B0?)}Bz(TJCr>y;K`*uY=4{|0sX9{~pd#K+{PPAZ=#d zO?iC&G~(5E77sp3<7t0|dr+IsUVa!aSnjuQaWc`#jmWyFT)`L;ihc%fuC^>(c2(0E z^@E^GUrU8*VnEd^fwg{klrr7@06j#YXoTdWj;fB2bQ@J8iI$oy=*H4_mH92?7Rpsw z`=s7ok;h&0)?v$0&}^B7Lor8Q+^Bvn7J1exGiugq0YMmY_t***Znw;mLAAzTA4}ifZR$*9ZFW7z zbNQN_MWe;xM=1RufRiDpLvdI1D+%#d-K1LTgWhVwcaq)%~P~4C*}g zVyiuD=3<>cm+EsC=*Xn7(gz);X9q1F;S)m|xJMB5;5>9KsLz5T-AhoHsTeDFyC$8@ zb9v5KZg24Rg@_@MTpwLn@K|4a%j%Mvw7F5&b}eR;x;5!ot~X)65IswKCRkwC9cPU} z({4Q{M=9i03f%ucD75`-=&@V!A%~|d$J>N#oQDmrY~S}%^vnvDhuhyyzp_NB70F(| z(sNVPh_juh20tsRxdi&!l|216dHUVYtn!ZtA2zk?-aXV}1xE{?E)=o7F-FMkLR!{@ ztg+=)qb^Cp&(OUBhV?&j$^X{BO=xfFYDGvwXs4WFuh~&N*}dU=qT)*D-*5cl4vbU*4GLKs zUD)s$oj{FayeUOirFFO!E+CEodO-*pz?TGZ9GNC^?6w0%X`{}(2 zZTDE%G-1JNIW|s{K`%a}3jM1hEjS1a<*mk%McW0s)PO)^OTMa$Y;fcAnhFr-Avd>b zPv$;o+-GQ-I*!H)!5?NezF`j10LIr+DTThaC-Zo;Z8Lg}N+1J{Nk{a(#YEwx2lBDB z@04!)Fic5L=jNYXoruVm4$4)CcnC082YBFktNm_>rWly+ii_}Ga5seD`X2LGiUX{@ z5Scusq;`H*DBg>FHaaKt(-*{yG$_F}Yr#&GX4qkJDkz4<4RU4#0O6rdNXa$w-NeQN zPq6n;fkKRU2L;>jFNluhOspK-EgKZ@FvEXlV6?n9yiaSd1GS2NYOH+~u+cQ`|pVRYS!$CjxyWd#># z=Aewr(220ZbB=_mPUqQ?bF8N2p6_Xo=r>&ZP2Y~AZTqVHb{(B)`_^Cx(TLOh+C zdjNFy`9q1qm5j@VMFlO{YSVzsYz;mq@hxL2{7Ltjm+Ov<2T>%vKgwsE%&3LSpS{8js^N$%uYxk!ZKZv&FeWp>AW&PJV#O zPyzkz5n{)jxWnS^3;UAn+kxva^t+H50HhJlnB05p91w$xSjfT?f7<>Cg%Qua_UXf@ z;FhEMhotc`u3ZFBFI6Bha&)c`PCE|N)&&DeTiM>!&TOd~2jrcVokJ*JsvJB!ky(t+ z5z%Z$K`L&KXuU?o+KU3F3eiKJSGcFsT||;VapO3BNx&0-Hus7-C}0lC;@7CZVK?>3a>5)k&legTq~gDjqOcv0b}ugsjaI3@c_s5u!SyNA_H3yg5aw!Ptc_)BGS7gKX?(+>b=%-Y1F7)-zHcb38DH*8 zTJBy86^P^Psl30E^P|Mix5wnEAO&Ny#Mre@`TtdY21}_u!5`ASI~6nC{v4ol8YA&M z7Nz=YuZSJXzwGQSrUOz)i;~tk?a{G8GNVQ|7k@8Ww%xd&<5C`dZ=O14d49$j zfjcyRij@P-MS`Iam{QG|?aG-q@0E$NL0HKudaNliAoY z5E-A!-QU`DGZPHwe)YHqV8&z#5HomE$DUo@sFc{>T$9f3xtx31Yp$i?{*-Bcd#L^` zljgrlgT<$U0^?wxT7E^}EpaM7hP6dyP9LVS*G} z23i3k%3s-kn-NT}iV~1ESyR zOE35hay(8W#}5yb@9#V=7+ZcU<-Hih>Z>89;t7#RzMK@h3rizhK|J6pu!u-L6FshU zh>r;k7*$)A!d)BD?AgB(g=SJeo2|O1&Lw88Sb6sBiJ0u-9X_)uM=1j z))Ur5@2-mNJ8ZG1)aQ(BxRg}UoX)7m{JnU&fR?lHvHYl*hVdXR@FMJs-nEE6vyj5P zR!nZ&e~b*kcdcONuQ6}H3eAJ!KoOA{`0tmfDob~=O^bn-V+ePdW@qcOzwQIl z>nGumO=U;p6N&u1ogI0_2fFvc)J(Q@^2ni4`&ba^x zT1fnR*M5`X5?WU0@d9COIiM&I8X#b7w)RewmO^_#Sx>iqrTB@GV%bg0|5a#y z1G0uL%g?d_StI43MDvCqtkr#gy0r@Ca)CnnwelLlum~`-+HQ$8+xH~&#}Ysp%+=br z5=N7!#i+NmjKcpbBoBJmKmU!^)qNs-yw8bIAY0)ehU$diYU`7~lc&eojgV3dlOMhG zD()vKE!<7R6}AImBg<_Tz$DbvJ|Q|`*OQ;Kdoso-gcCqMWO@cqB}Cyx4uY-o`j}k8unNHk|6AO>=UjW-znw`EM;4*g z0%O3p*}!z&nw*6+Vw&eu-1RhKm?_X_CuKHv3|zbD(61LX2$e(8f_x$U%% z@74|4V+vwuhf>(n|L^Je#lchOPeu1KG)?QMYbn&6;8A5qkOb-N=*{MdxB&NCp%J$? z=Ep8;s%r&P`8*QdiHGu!fvFw>sI5)!#Ix|Ro?z#LyMwB@*Q7t&Lgcgm+NC8CU%)h^ zavSt_Qqbmy-(S0TS^krxSoTuFmv5b4eIsfz;#v2pYR``Y=RrhP9neye`G zc&+QaI#YG#AP88<{HhL(tzj46!;Xytmi3GW{(uoNuR>chLm)s}nOxKj$N{eGpqK9%}C{ zi2%A0Z@Y@LdtwXUmrlTP`flKSb(k{^IJ*GqDC$Re3;!ReQyUfm=$U%?@;3rJb-~6p zd>@vz&NuUbBtnD(IzDtcItwl?9hbB80J69yh38oJe@YX!O8X*87h7Pny+ zxn?1WN(g?XmJK{c$JOwI!Q`vMPfoeU%HO}f5wZ2DU&^CvoHF+kX%5x>81~n$Lh5?G{3~;3mh#C*Sdry;L zs%o}92^9UXuMcO@#xIh@oe0L%dprWiwG&~g{G_Xs>{Y*GXFou**>R0A3{)+v-s$)*x=khIB83wG^lmk z%jBu~8=S01^rKQ!5L|euQ9K)ER8sE{P0_bx8b~Ay1?O(D&gcyIyWlnxOOQoxK*BaVH5?b%Zj| zWbd=9Tf{AphnTlC2t&@uZtnLJN1JO9PyW$u z6{`{fs-#T7uwO+V3xlMR!Ni~o(e_%1Ujt5UMtT39-}K$#uOp-zA3A9cx{sImxpX`g zhJ91hIw!e3!zgs*$WP^p6J#saD@NP1fQW9pv8$>sKm{;j_oj1OACzS_Z~DcoX5hq` zht@Jt@@*oRTj(@(HP5?>J&!6x;bPMotrKeh#FDhFtW|r=H6QeqjcCd>%v-^@YsY-Fn`N*5<&6`)bfWl# zecBgoX;sZ~PS5}kJT0+#%Z)3ig^ukn`9ZCYdRB)&NtgEF~!#VXAr>6}eQTQDVh8DJKIv%dy>xGU^EJ5clQb5B=gU9Cw zwd!oIy`;z_?6Yq=I;0uQcOKFmtr^)({`tgyC->@|6S6L5=<10KQxcxm3SuQV1H43R z$*_6+zM2@ik7!Gh+nDJU1T)>Pa34ol&G6u|>|(+4+h>e2(y;;RlY+{w7mCUc@ZQw( zIpv{nqc?-23ah@72y$BIJRfsR<$MMi01nX;bfj5>uB@f*o@J@E+kkihJmPhRz6G|X zlm3~d_qf%Ahky1M(V@_l69Gor3}f>LVf3I)J({c*QmkR`qpZa6`#f;A;IqAgR%r-O znvFy|rDSSls6CcmQ~o3WJ>Zw-EG3E3+P;>$HyV(ldztUiVDBAXOK~Hn#cV)i_wH8c zC)ab{sWis$e=v1+l~AYVhyb^p1_QR_!a4*B(dz0DkH*LPsb`81NzJIXGq42%U3vtd z?W3?MF@Y(Ls&y8H@@6PZPH5o?oZDCd^*RBI)qm#)$4&5n@Hq%&UrNNsm*8<@IQwK?O2#NPYhzDX#w0E4Gfn_2 za{FG;34_HQN@q-Qgtz>lh4tKltjtpyT~!ljM-f20+|RYOiI39osNMh*0k7N_#gO_= zUV)E-2wVE+J6uUqG_{YVT|+0%dR}l>y`otqn!nh#65`t-Opztj4=@OZ7jd4vT=D*} z&g6VmT6dJj{Tn}DIHARp*B8O$95}ntbZY{d=RWp)q4Zbj0fAl?rnxn%$1pBn@o{A7 zw0)NfDqbvD$eCzrRaaM^zX>;gx-`(Rdp1MlK2I7Q^b$@@OH2FW9m8xs`PnfMG3w($ z?>^LfD?JMQHI#^svz{!5H%*5Sw4D5=#|n5%o)Uv)@{qO*#l8on%>$+uduCh}i~dZg z?{;s&Dc$cZ#Aja4*jjrJ;@OPgzFLqrY`)dKyt3tN#wVio1Ix8yg{pUvI^vsNTzq_d zI|_H6t)&M{W=FSG zlqerGZi=#)db&e2~Y&8jk+rp`D!ze^3h z^`#U+wM;3Vo&lQ;zYvdZ{%mcdIQn~Y6YOUMU6s4IGOcB56$*3~k0+#3P!p;5zN`28 z3hEX4kPA=8&lUs^Ep1Y%7UiFSRVTf|)!tZdKz5@l$z9*^mVGHMRRgPX?v%>1swr<^ zW4&L1HDhIN5l-g`TE&7j`-|_tv848!4OhAjHKa-986n`)(PKdToZZBuk#xm~*M774 z;25Oh_^nKor1pF$oOV?M}LF^>lf%6aGTPx`7nZ4S0xje(tg52)#bW-inTj!bOfhV(LpV5!Wi- z?x{bXz4M^Yy!K}6idO(-R;k3)YY@sy=oUT+YroSn`lgp^ng8&eD_zb9_+BR(LY}>^ zH+4YrnbQgCrte;{w!-0Y1M2#=b6JZsHdj{Lk@wx!V6e&CXH_foE%Zo(8Y8uO$Df(WjxMWsQeicr9+0SUFGSNQORm zYPx74Y~jU^(i$-X_VUltye)O>Y4$q(E8bLU@L29)<(d>Ch8nK}(~kh2)+msDeZyft zL#-M^l@klBHe}sbuG*ad2^9W!oJi1;EihSjs>$4kM&%)KR%0c(o4h!0DPxP&f9or) zMQJ~^%6}cJoR!OnGO4iYS$Q-%Uk`oz@AP3~1Dkru??p|4{TH_075D=#XBkzt6&_ZU zHlbKiptdF7!e3dRebd$TS?XmE;FrscNLM?U>@_5e29D8Idi$~izB}RfZ5V@|MQ=R8 z`|5jIj3zROTEb(^Q6L8~19nF}8u>$Us)Gr&h}s~Apf?p>n?f_mrR3e`mi?uz+AcDa>pE)hV(^FI%b_OT zu`-lyyu{1Lr;uv~1-VfD_B-n(dL(EZxgykDLo_hCF5>mAmdBLbCh>9|duJq12M%Pd zHHONo2acQpZvQcx(JN#$cv(!f`;LccebDFeH-Mlo-a`vSz ztOzNAz{+RYXOttVb!`%+(4PktEmf1(-d)KwqfEr?($MO+B;(uW6J4!uw#EfR_wk%p z4@?iOVB!9>iA9&n>O-{M%m(#NcfJiI7$dhCnyvAiANRFoUle^VWry){(W1nCtw3dH zHsD7o%MzRZAy}EECcJ#0qr$}hwR7-7DV-M={!wNMXd?*x=az3OVUIUhUK;tZxRV@_ z&;5J#n?6iO3D4&JrM`JVbY8_h4kx7}zEl$!h1i=!IA{QS!01<+k{CoV?|iATRzjW{ z$@-w|ZY21z9{eVwCvSj(dGfWa-#(QV;3ASl0N~6wgcse2|6Ft-%58){f#fw-uF3Wj z-gF$2E9p-#o}bfgVdl{4DvRT zTpp0KQ}3@Aqsvd?f8}|f;nR$TT%bYTzZn-6u=?auXuiL3%dSRQm%X9JvgJMFsR7~p zUBV964RI~dn-A1%GZOz`WPPdn3^_GR`2pI1~XX+66~x5nDhUh*|PSLvX4`!|)f!PNBs{kvmQtkdo^txnj=O z=|s}2yn@|nBf&C|6y_-{?eW{|(3G}KtVeXIjLv{*@e<4wL&c~i2OYI=7C$?DCi`}s z#!F5{-U5+F5`7NM8aeUv8R)!EMsU#@%p-bTwaN?39`{;hO6A=1`J&Q=r;=^9>eUwN z^8U>7YDuPd&pAGy2~;|d?*9b)Z5(#+0pId&XJa_JKZP0t6Vy3DOWED1T^s}7ga+XLHmHTHSVf^M%aY> EKbH8`H2?qr literal 0 HcmV?d00001 diff --git a/plugins/stella/assets/favicon.svg b/plugins/stella/assets/favicon.svg new file mode 100644 index 0000000..5d88f71 --- /dev/null +++ b/plugins/stella/assets/favicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/stella/assets/logo-dark.png b/plugins/stella/assets/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9b41059502bacd5fd1a0dc63341cba29f56f2ec6 GIT binary patch literal 28759 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 EKbH8`H2?qr literal 0 HcmV?d00001 diff --git a/plugins/stella/assets/logo.png b/plugins/stella/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9b41059502bacd5fd1a0dc63341cba29f56f2ec6 GIT binary patch literal 28759 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 EKbH8`H2?qr literal 0 HcmV?d00001 diff --git a/plugins/stella/skills/connect-stella/SKILL.md b/plugins/stella/skills/connect-stella/SKILL.md index f4b687e..0934f51 100644 --- a/plugins/stella/skills/connect-stella/SKILL.md +++ b/plugins/stella/skills/connect-stella/SKILL.md @@ -1,10 +1,17 @@ --- name: connect-stella -description: Connect this agent to stella, the open-source legal workspace, through its MCP server, and verify the connection. Use when the user asks to connect, set up, sign in to, or fix stella, or when stella tools are missing or fail to authenticate. +description: Guide browser sign-in and verify the stella connection when the user asks to connect, set up, sign in to, or fix stella. --- # Connect stella +Run setup commands only when the user requests connection or troubleshooting. +If tools are missing during another task, explain that a connection is needed +and let the user choose whether to set it up. Use the installed client's +supported sign-in flow; do not install or launch another application. +Never ask for passwords, tokens, authorization codes, or full callback URLs. +The user signs in and approves permissions in their browser. + stella's MCP server signs people in with OAuth in their browser. The client receives the sign-in result on a local port that stays open only while the sign-in command runs. Keep that command alive until it reports success; a call @@ -52,9 +59,10 @@ call: permissions, and approve. 3. The browser then shows a plain confirmation page from the client itself. That page is expected. -4. If their browser runs on another machine, the page may not load. Ask them - to copy the full URL from the address bar, then pass it to the waiting - command's input. +4. If their browser runs on another machine and the callback cannot reach the + client, explain the problem and use the client's supported remote sign-in + flow or repeat sign-in with the browser on the same machine. Do not ask + them to paste the callback URL into the conversation. 5. Keep the command running until it reports success. ## 4. Verify before you say "connected" @@ -69,8 +77,10 @@ output, and offer to repeat step 2. Never call an added server connected. ## 5. Make one read-only call -stella's tools appear in a new session. There, make one read-only call, such as -a case-law search, and do not change anything: +stella's tools appear in a new session. If the user's connection request +includes verification, make one read-only call, such as a public case-law +search. Otherwise, offer this check. Do not read private matter data for a +setup check or change records or documents: - If it fails, report the error exactly. - If it succeeds, tell the user what they can now do through stella: search diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..ffaca1b --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,34 @@ +# stella package checks + +Run the offline release checks and their boundary tests from the repository root: + +```sh +python3 scripts/validate_listing.py --self-test +claude plugin validate ./plugins/stella --strict +claude plugin validate ./.claude-plugin/marketplace.json --strict +``` + +The Python check uses only the standard library. `listing.schema.json` records +the release's field types, required fields, text and array limits, HTTPS links, +and allowed extension fields. The evaluator implements the schema's declared +keywords and rejects unsupported keywords. It is a focused local schema based +on the [package field reference](https://developers.openai.com/plugins/deploy/submission#manifest-fields), +not the complete hosted validator. It also checks both manifest versions, both +root entries, the shared URL-backed HTTP configuration, bundled PNGs, skill +metadata, README length, and package hygiene. No sign-in or live tool calls run. + +The existing `.claude-plugin/plugin.json` retains its supported standard fields; +the extended listing lives in `.codex-plugin/plugin.json`. The two root indexes +continue pointing to the same package. This package does not introduce a root +`plugin.json` in the separate Agent Plugins format. + +To build the local release archive: + +```sh +cd plugins +zip -r stella.zip stella -x '*/.git' '*/.git/*' +``` + +Keep the archive out of Git. Increment the versions in both package manifests +and the root versioned entry for each release. Additional test fixtures and a +recording can be added once verified; the current package omits those fields. diff --git a/scripts/listing.schema.json b/scripts/listing.schema.json new file mode 100644 index 0000000..1615e5b --- /dev/null +++ b/scripts/listing.schema.json @@ -0,0 +1,253 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "stella listing release constraints", + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" + }, + "version": { + "type": "string", + "minLength": 1, + "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" + }, + "description": { + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "author": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "url": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, + "homepage": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "repository": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "license": { + "type": "string", + "minLength": 1 + }, + "skills": { + "const": "./skills/" + }, + "mcpServers": { + "const": "./.mcp.json" + }, + "interface": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "minLength": 1, + "maxLength": 30 + }, + "shortDescription": { + "type": "string", + "minLength": 1, + "maxLength": 30 + }, + "longDescription": { + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "developerName": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "category": { + "const": "Productivity" + }, + "capabilities": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "maxItems": 20 + }, + "defaultPrompt": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[^@]*$" + }, + "maxItems": 3, + "uniqueItems": true + }, + "websiteURL": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "supportURL": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "privacyPolicyURL": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "termsOfServiceURL": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^https://[^/@\\s]+(?:/[^\\s]*)?$" + }, + "logo": { + "type": "string", + "minLength": 1, + "pattern": "^\\./assets/[^/]+\\.png$" + }, + "logoDark": { + "type": "string", + "minLength": 1, + "pattern": "^\\./assets/[^/]+\\.png$" + }, + "composerIcon": { + "type": "string", + "minLength": 1, + "pattern": "^\\./assets/[^/]+\\.png$" + }, + "composerIconDark": { + "type": "string", + "minLength": 1, + "pattern": "^\\./assets/[^/]+\\.png$" + } + }, + "required": [ + "displayName", + "shortDescription", + "longDescription", + "developerName", + "category", + "capabilities", + "defaultPrompt", + "websiteURL", + "supportURL", + "privacyPolicyURL", + "termsOfServiceURL", + "logo", + "logoDark", + "composerIcon", + "composerIconDark" + ], + "additionalProperties": false + }, + "extensions": { + "type": "object", + "properties": { + "com.openai": { + "type": "object", + "properties": { + "onboardingSkill": { + "const": "./skills/connect-stella/SKILL.md" + }, + "review": { + "type": "object", + "properties": { + "commerce": { + "const": false + }, + "commerce_description": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "commerce", + "commerce_description" + ], + "additionalProperties": false + }, + "publication": { + "type": "object", + "properties": { + "release_notes": { + "type": "string", + "minLength": 1 + }, + "countries": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "pattern": "^[A-Z]{2}$" + }, + "maxItems": 249, + "uniqueItems": true + } + }, + "required": [ + "release_notes", + "countries" + ], + "additionalProperties": false + } + }, + "required": [ + "onboardingSkill", + "review", + "publication" + ], + "additionalProperties": false + } + }, + "required": [ + "com.openai" + ], + "additionalProperties": false + } + }, + "required": [ + "name", + "version", + "description", + "author", + "homepage", + "repository", + "license", + "skills", + "mcpServers", + "interface", + "extensions" + ], + "additionalProperties": false +} diff --git a/scripts/validate_listing.py b/scripts/validate_listing.py new file mode 100644 index 0000000..4886e63 --- /dev/null +++ b/scripts/validate_listing.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python3 +"""Validate this release offline: python3 scripts/validate_listing.py [--self-test]. + +listing.schema.json is a focused release schema, not a vendor schema. This +dependency-free evaluator supports only the keywords it uses and rejects other +keywords. File, skill, transport, and cross-manifest checks supplement the schema. +""" + +import copy +import json +from pathlib import Path +import re +import struct +import sys +import tempfile +import zlib + + +ROOT = Path(__file__).resolve().parents[1] +SCHEMA = json.loads(Path(__file__).with_name("listing.schema.json").read_text()) +KEYWORDS = { + "$schema", "title", "type", "const", "properties", "required", + "additionalProperties", "minLength", "maxLength", "pattern", "items", + "maxItems", "uniqueItems", +} + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def validate(value, schema, path="$"): + require(not set(schema) - KEYWORDS, f"{path}: unsupported schema keyword") + if "const" in schema: + require(type(value) is type(schema["const"]) and value == schema["const"], + f"{path}: expected {schema['const']!r}") + kind = schema.get("type") + if kind: + expected = {"object": dict, "string": str, "array": list}[kind] + require(type(value) is expected, f"{path}: expected {kind}") + if kind == "object": + properties = schema.get("properties", {}) + require(not set(schema.get("required", [])) - set(value), + f"{path}: missing required field") + if schema.get("additionalProperties") is False: + require(not set(value) - set(properties), f"{path}: unknown field") + for key, item in value.items(): + if key in properties: + validate(item, properties[key], f"{path}.{key}") + elif kind == "string": + require(len(value) >= schema.get("minLength", 0), f"{path}: empty text") + require(len(value) <= schema.get("maxLength", float("inf")), + f"{path}: text too long") + if "pattern" in schema: + require(re.search(schema["pattern"], value) is not None, + f"{path}: invalid text") + elif kind == "array": + require(len(value) <= schema.get("maxItems", float("inf")), + f"{path}: too many items") + if schema.get("uniqueItems"): + require(len({json.dumps(x, sort_keys=True) for x in value}) == len(value), + f"{path}: duplicate items") + for index, item in enumerate(value): + validate(item, schema["items"], f"{path}[{index}]") + + +def bundled(plugin, relative): + require(relative.startswith("./"), "path must start with ./") + path = plugin / relative + require(".." not in Path(relative).parts, "path traversal") + require(path.resolve().is_relative_to(plugin.resolve()), "path outside package") + require(path.is_file() and not path.is_symlink(), f"missing file: {relative}") + return path + + +def png(path): + require(path.stat().st_size <= 5 * 1024 * 1024, f"icon exceeds 5 MiB: {path}") + data = path.read_bytes() + require(data[:8] == b"\x89PNG\r\n\x1a\n", f"invalid PNG: {path}") + position, dimensions, image_data, ended = 8, None, bytearray(), False + while position < len(data): + require(position + 12 <= len(data), "truncated PNG chunk") + length = struct.unpack(">I", data[position:position + 4])[0] + kind = data[position + 4:position + 8] + payload = data[position + 8:position + 8 + length] + end = position + 12 + length + require(end <= len(data), "truncated PNG") + crc = struct.unpack(">I", data[end - 4:end])[0] + require(zlib.crc32(kind + payload) == crc, "invalid PNG checksum") + if position == 8: + require(kind == b"IHDR" and length == 13, "missing PNG header") + dimensions = struct.unpack(">II", payload[:8]) + if kind == b"IDAT": + image_data.extend(payload) + if kind == b"IEND": + require(end == len(data), "trailing PNG data") + ended = True + position = end + require(ended and image_data, "incomplete PNG") + width, height = dimensions + require(width == height and 48 <= width <= 4096, "icon dimensions out of range") + require(dimensions == (512, 512), "release icons must be 512 x 512") + require(bool(zlib.decompress(image_data)), "empty PNG image data") + + +def transport(config): + # URL-backed transport in Codex; the shared HTTP discriminator is needed + # by the other manifest format. No executable, headers, or auth secrets. + require(config == {"mcpServers": {"stella": { + "type": "http", "url": "https://api.stll.app/mcp", + }}}, "expected one HTTPS stella server with type http") + + +def package(root): + plugin = root / "plugins/stella" + load = lambda path: json.loads(path.read_text()) + manifest = load(plugin / ".codex-plugin/plugin.json") + validate(manifest, SCHEMA) + require(manifest["name"] == "stella", "release name must be stella") + require(tuple(map(int, manifest["version"].split("."))) > (1, 0, 0), + "release must exceed hosted version 1.0.0") + other = load(plugin / ".claude-plugin/plugin.json") + for key in ("name", "version", "description", "author"): + require(manifest[key] == other[key], f"manifest mismatch: {key}") + for name in ("logo", "logoDark", "composerIcon", "composerIconDark"): + png(bundled(plugin, manifest["interface"][name])) + extension = manifest["extensions"]["com.openai"] + skill = bundled(plugin, extension["onboardingSkill"]).read_text() + require(skill.startswith("---\n"), "missing skill front matter") + header = skill.split("---\n", 2)[1] + fields = dict(line.split(": ", 1) for line in header.strip().splitlines()) + require(fields.get("name") == "connect-stella", "invalid skill name") + require(len(f"stella:{fields['name']}") <= 64, "skill identity too long") + require(0 < len(fields.get("description", "")) <= 1024, + "skill description must be 1–1024 characters") + require(len((plugin / "README.md").read_text().split()) >= 40, + "README must contain at least 40 words") + require((plugin / "LICENSE").is_file(), "missing LICENSE") + transport(load(plugin / ".mcp.json")) + agents = load(root / ".agents/plugins/marketplace.json") + require(agents["name"] == "stella" and agents["interface"]["displayName"] == "stella", + "invalid root listing identity") + require(len(agents["plugins"]) == 1, "expected one root plugin entry") + entry = agents["plugins"][0] + require(entry["name"] == "stella" and entry["category"] == "Productivity" + and entry["source"] == {"source": "local", "path": "./plugins/stella"}, + "invalid root listing entry") + entries = load(root / ".claude-plugin/marketplace.json")["plugins"] + require(len(entries) == 1 and entries[0]["source"] == "./plugins/stella", + "invalid root plugin path") + for key in ("name", "version", "description"): + require(entries[0][key] == manifest[key], f"root entry mismatch: {key}") + for path in plugin.rglob("*"): + require(not path.is_symlink(), f"symlink in package: {path}") + require(path.name not in {".git", ".gitmodules", ".DS_Store"}, + f"unwanted package entry: {path}") + if path.is_file(): + with path.open("rb") as stream: + require(not stream.read(128).startswith(b"version https://git-lfs.github.com/spec/"), + f"LFS pointer: {path}") + print("PASS: both manifests, both root entries, listing limits, HTTP config, skill, icons, package files") + + +def self_test(): + manifest = json.loads((ROOT / "plugins/stella/.codex-plugin/plugin.json").read_text()) + count = 0 + + def check(value, schema, valid): + nonlocal count + try: + validate(value, schema) + except ValueError: + require(not valid, "self-test rejected valid boundary") + else: + require(valid, "self-test accepted invalid boundary") + count += 1 + + # Every declared scalar limit and each array count/item limit, including + # valid boundaries, missing fields, wrong types, duplicates and mentions. + def boundaries(value, schema): + if "maxLength" in schema: + limit = schema["maxLength"] + sample = "https://a/" if schema.get("pattern", "").startswith("^https") else "a" + check(sample + "a" * (limit - len(sample)), schema, True) + check(sample + "a" * (limit + 1 - len(sample)), schema, False) + if schema.get("type") == "object": + for key, child in schema["properties"].items(): + boundaries(value[key], child) + missing = copy.deepcopy(value) + del missing[key] + check(missing, schema, key not in schema.get("required", [])) + if schema.get("type") == "array": + boundaries(value[0] if value else "US", schema["items"]) + sample = [str(i) for i in range(schema["maxItems"])] + if schema["items"].get("pattern") == "^[A-Z]{2}$": + sample = [chr(65 + i // 26) + chr(65 + i % 26) for i in range(len(sample))] + check(sample, schema, True) + check(sample + ["ZZ"], schema, False) + if "type" in schema: + check(None, schema, False) + + boundaries(manifest, SCHEMA) + for field, bad in [("defaultPrompt", ["same", "same"]), + ("defaultPrompt", ["Ask @stella"]), + ("websiteURL", "https://user:secret@stll.app")]: + check(bad, SCHEMA["properties"]["interface"]["properties"][field], False) + for field in ("id", "hooks", "apps", "test_credentials", "reviewer_instructions"): + bad = copy.deepcopy(manifest) + bad[field] = "unexpected" + check(bad, SCHEMA, False) + for bad in ({}, {"mcpServers": {"stella": {"url": "http://api.stll.app/mcp"}}}): + try: + transport(bad) + except ValueError: + count += 1 + else: + raise ValueError("self-test accepted invalid transport") + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for relative in ("../outside", "./missing.png", "/outside"): + try: + bundled(root, relative) + except ValueError: + count += 1 + else: + raise ValueError("self-test accepted invalid package path") + print(f"PASS: {count} self-tests") + + +if __name__ == "__main__": + try: + require(sys.argv[1:] in ([], ["--self-test"]), "usage: validate_listing.py [--self-test]") + if "--self-test" in sys.argv: + self_test() + package(ROOT) + except (ValueError, KeyError, OSError, zlib.error) as error: + print(f"FAIL: {error}", file=sys.stderr) + sys.exit(1) From d510bf9397cb2e614e5f83af95534d3099fec72e Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Sat, 10 Oct 2026 15:51:31 +0200 Subject: [PATCH 2/2] chore: validate plugin manifests on pull requests --- .github/workflows/validate.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..5fb6b32 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,20 @@ +name: Validate + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +jobs: + listing: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Validate plugin manifests and listing metadata + run: python3 -I scripts/validate_listing.py