From 4c4aa4f54b91ea4628e3f325b6bd98cc16121011 Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 08:42:44 -0400 Subject: [PATCH 1/7] chore: update package.json to add MCPB pack script and dependencies --- README.md | 111 +++++--- assets/icon.png | Bin 0 -> 16054 bytes manifest.json | 23 ++ package-lock.json | 685 +++++++++++++++++++++++++++++++++++++++++----- package.json | 6 +- 5 files changed, 709 insertions(+), 116 deletions(-) create mode 100644 assets/icon.png create mode 100644 manifest.json diff --git a/README.md b/README.md index 28e754c..b982580 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,71 @@ A Model Context Protocol (MCP) server for querying Pro Cycling Manager (PCM) game databases. This server provides tools to discover and inspect PCM career save files via the MCP protocol, allowing AI assistants to explore your saves in a structured way. -## Read-Only Access - This server is strictly **read-only**. PCM stores careers as binary `.cdb` files; this server discovers and inspects those saves but **never writes to or modifies them**. Save files are loaded into an in-memory SQLite database for querying, and changes are never written back to disk. +## Installation + +### MCP Bundle + +Download the latest `pcm-mcp.mcpb` from the [Releases page](https://github.com/mpicciolli/pcm-mcp/releases) and open it with **Claude for macOS or Windows**. An installation dialog will appear — no terminal required. + +> **Note:** This method does not auto-update. To get a newer version, download and re-install the latest `.mcpb` from the Releases page. + +### Claude Desktop + +Add the following to your `claude_desktop_config.json`: + +```json +{ + "mcpServers": { + "pcm-mcp": { + "command": "npx", + "args": ["-y", "pcm-mcp"] + } + } +} +``` + +### ChatGPT Desktop + +Add the following to your ChatGPT MCP configuration file: + +```json +{ + "mcpServers": { + "pcm-mcp": { + "command": "npx", + "args": ["-y", "pcm-mcp"] + } + } +} +``` + +### Gemini + +Add the following to your Gemini CLI settings file + +```json +{ + "mcpServers": { + "pcm-mcp": { + "command": "npx", + "args": ["-y", "pcm-mcp"] + } + } +} +``` + +## Platform Support + +PCM only ships on Windows, where careers live under: + +``` +%APPDATA%/Pro Cycling Manager /Cloud// +``` + +Auto-discovery via `pcm_list_saves` is therefore **Windows only**. On macOS/Linux the saves live inside a Wine/Proton prefix that can't be reliably located — pass an absolute `.cdb` path directly to `pcm_select_save` instead. + ## Available Tools All tools are read-only and carry `readOnlyHint: true`, so clients like Claude Desktop can approve them automatically without a confirmation prompt. @@ -19,13 +80,7 @@ All tools are read-only and carry `readOnlyHint: true`, so clients like Claude D | **pcm_get_player_info** | Get the active human player and their team from a save file. Returns the player login plus team details (name, resolved division name, resolved country name, evaluation and manager). | | **pcm_query_save** | Run a read-only SQL query (`SELECT` / `WITH … SELECT` only) against any table in a save file. Write/DDL statements are rejected. Results are capped (default 100, max 1000 rows). | -## Installation - -```bash -npm install -``` - -## Available Scripts +## Development ### Build @@ -33,7 +88,7 @@ npm install npm run build ``` -Bundles `src/` to `dist/` with tsup (ESM output; `.d.ts` generation is currently disabled). +Bundles `src/` to `dist/` with tsup (ESM output). ### Test @@ -44,40 +99,12 @@ npm test ### Lint & Format ```bash -npm run lint +npm run lint # Biome lint with autofixes +npm run format # Biome formatter ``` -Runs Biome lint with autofixes (`biome lint --write .`). +### Pack a bundle ```bash -npm run format +npm run pack # produces pcm-mcp.mcpb ``` - -Formats the codebase with Biome (`biome format --write .`). - -## Platform Support - -PCM only ships on Windows, where careers live under: - -``` -%APPDATA%/Pro Cycling Manager /Cloud// -``` - -Auto-discovery via `list_saves` is therefore **Windows only**. On macOS/Linux the saves live inside a Wine/Proton prefix that can't be reliably located — pass an absolute `.cdb` path directly to `select_save` instead. - -## Usage with Claude Desktop - -Add the following configuration to your `claude_desktop_config.json`: - -```json -{ - "mcpServers": { - "pcm-mcp": { - "command": "node", - "args": ["/absolute/path/to/pcm-mcp/dist/index.js"] - } - } -} -``` - -The server communicates over stdio. diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b9902fa14aff9e2d794737845dac0ad10ec0079 GIT binary patch literal 16054 zcmd73WmJ^k7e6}m0D?54bccXSNyE_K&>dnBLrD!SJp;xw$z#Jslq(Z*Om} zuCC6@%S%d1`tad{kB^UogTt#=uXJ^F6%`dlMMZgdcpg4{$j!|yC@3f+BlF_L3j+g# zH*em&d-u-U+ZzUhRa8`b{``4yaq-WeKbxDIJv}`+IXNsWEMj6}T3T8*Ha1aFQFV27 z3kwV1zI`hwD2R@ZwzaiYRaIqXW(I*kiHV7WgM(LBS5s3{85tQC78ZPbd`wJC-QC?s zM@MI8XYujzCMG8A?Ci?Q%Auj5LqkL7=jSagEv&4p_V)G%2M3pzmt9?5&d$!9oSbxY zbY^B|RaI5j*Vlc0eI6bjj~_oC85!~O^LzUA>HGKZOG``T|LK21zasHv$los zU%oUqH#amiGV|8_PczC$JzCJrUTTf3Ccji;G)YT0)`Fw{PDzH8nvX5G5t0prD|DfPmWCS}!jzUteD%BO^ygM=2?(wzf8P zb#)ybotc@LU%!4;R#u9Lh-77DnVOpN^Ye#?`t|FzwY8FxlGfJNva+(Jr6mLc@$utF zH#av|SJ&X+;25m_5dc6uOGRE**E4fB%i|S=!lO`YEDQx*3T!R}HKAD|Gf4qHHf1cI z89p|MkQq#>fKhnLPPdiI*b%`TL;$3c@7=SmQq~#he;Li{AufRa^J&?+%9b9nJju$F zdhAmtu>XK{`avM9-Twz)>5aAjuLJSF>HtUI{6?EM4pfcpeL(#Wzf(x98gDZm#+zFD@4Rbz=%Io-H^>%Pb}zR1fl>CTZ`Q)V*j*0Q z%p=^j2Wsn9)Aeh!`oniM`iuIU>GRk84y_*ws+4|u7p#?5h_{EC=f;i^-BW^3B4>;r zO>;vLIq8m5^YkA84{02Kz0WGqLb-?3sF>R^zTq?(F)XWi>HzZaZu%{2<`4+XKkrTL zO;4X>g;Kxm$PST#kzM`330infxGpBhRnMoD43W}UHyn*4f5!Ehp5}b0On;poltS(0Nodi zY*9bQ4FKI=>%#xlFawX4^b|=J!xB+`B4yymQ27{|mcw7FkJBBp+;y;Lq?s{Sm@i zBO{C8h|;Ae0Ei9vYjeJMfg02hry&45eD0yes;Z3QC>DK$enK5)%EW#^y6yFCzl%Ni z(p5Jur7VLY;H7o=j3Yy?vb~$aJx?gP@x&!O=y&dxqJ&O`q1f2k*~D15%Yir|^`YGB=UNw=rf~N;J6D?p#X0L(SwwAsYEM+D0_L!UL}IoRuaukw)mR2;J^I z{@HM^D3+rIC7~lpX?#5AAVGo`Gq3d;bJ9}2f~vMRo4*(ApZcyglm6fpGuP=p(+-cr zGBij9dGMp43jPiB#Uan_F+JmI5_q2b0(s3Mjzfdkj)0$EOZ8n-#&BE4V3W$sFfGw$ z8+ZK$e&$O?YKRV}n4HN7bXdn@IZm9fTUz_*E{-8m1Yj>I_e+}C?2hS{@3pJ6nSsPL zQ!fu08dCX=ntRo+|C)AQ``|Um79ev&68aZXm+|Z0lp*`t1Bu02p)8wOfk1q5N3p_} zK1bT=*1Cu~^ZaFSvdI%2JbA9EQCasE6RCWPN!YtNW#2&EU6A^CBTgKw29fWwREo#x zV`c;Dnw4#cfTe@=%7cKGQ`qoe4sAnvYuIbF$I*5zWelWo-+} zRzIwn{`4fmr>FPU!{`0l+sGvb}Cp*1R05hA{d% z4TniyMEmi{{eTDH;j&S-krAr)*lFe?;uCEhdM&S~CV10ahb6|sR}Dl#1VL~554z5;1y2`Z#Up;hfmx8HXm4TSHvbNTggItMtWcld>?)BPS~zv2$-a0>ob(YR z-~pD&62H+}!@~9bQqXsA_1ZAi3sxQgWB5_oIGx@VgErhx%cWn2(AU}uK=R_id}B4= z@6^AUyMD)uTQYn#NyI5;?Cin3g3-u9PMeD!DvNjHm&u6>MlSh$M@9L=!pkEzSD9Ic1?~H z0zeA=Oj>>i%`6#&h;%D-LF>9}{hu}iT~zSEuGxLCQ^Fl%vG^ilkQOZ2U1^r$emlveQF1^dkL)t5Vk|#C=x}HPEn-mCF6<(~UEBwXwzzf}NmSe`u%ak*X9Hh!& zp;&rlHk1zFob9j0eW@?dk*9%T_8*vzusKZBl?IeN{Z%{NgSzAhGl#V32=iyAgyG7h z;hhZ2@0ZJ8g485I{Wk$}Lb8zOR6OKnrMHx_{^Rwi|QLq{qVK8XH0y!65CJRDp?T(0$O%Tncg7|m%wKl%j)yiRZ zW9-j0#;90=<#bS9F>1Os*-&6WgmQ(ZZ4Hv5wdFYfZE6$$QbPt1p~PcOMWPJEVkk>6HC5{C@QFG7rg{bKZF1vgs5f zhpnnEB$PZz1`_A}K}vI$QSJOg|HZ5T28k-MT0!KN_z>epCsj=UV?m&3)OWHNhw53z zh>P(4?|;%RJpoRz5yg+CSwy8m(}n{Wpy+9@rMFRh&tiK2ssqvKijwTp>4Rr#3HM4z z>j97z%P@Of*QlYK2&Gf~=f<>v(1FbBx^C2Qt>@7-!JmALZl-5bv{OWBb$XR&T7H6n z=kn}npFnc#I^J<>cjSZ|s+f+x*!g<5su2@qz!B0m)N{vsEjeO!;y!;Y0}+5YPUWP1 zBv!P(E=bpk9Z-)vB0BhrUe5hjCn|mp#^9nwe*Ee`+-$V!aFP)Jvl);ZI7yaZhZmK> z7opUY#v}a@K>JLO+1J%yj{Ojlv~(wRDw`q(ER3u2%`Jj1;a14gcO)_3XYUdrXBt~I zfFHCpN=$-4A4b976eJHl34lZrI56C7Oc0g^1|qOH0NJf01Np)A{|%YubH5THe^>oS z)UMq2T&o{>*xC8u$I8j$?M}gxv5q8I1AIS9nxoJ;4CTx_D*J* z`5V0Qd`!*zA+yke(3xBGm)9Hbs=0h(v>gc*PRxa$H=go=m)xuPsJlE$>#m3HB}e$L zkXv6Ba*V+DI$o#=*gT*+tx&V~5@kBF(%A2M^<`gMC_TD;Z7qIGJp1p%pH*05DcgcO z`3p)L zn>`rru~o9IXDigvlw#~b)nkm>`Ya^a!{pufCHDDJ%Txw&=dY_K+u8){m>AX^k;{A1 zk|w1uTdI=Ez}p47qpF64S4b(MsNZS&bB zbHGF#*X=k*9bOo`8{e;(n9qzUn4q@gK+*xhdr6l(D^aY4r7GmWT};VY>Y3wr(O-yS zZWIknwu~-e1p?}@%8SKq?Sn_++#WaxGbX#wl->_*QydZ5A&GJ!J2-_ z6f2Vt@JDI!!K=v;{Zg&7vPvWiLVQix`_=GEx=mXe{Dh41Flic5a&MVV?3J&+_eD`a zP+Nb%*9+Pi^YjuMMtj`Rb9KS#G-Sa(=fuENQsxmB!mPkMjf>d!r+AeEqrH`t4bOuu zO^8c#q@ihVTviqo3$aw71bVvBdVgo`If*dXb%dM{$_<@0?_H&L7hc0hEV13F^oFzf z&x#QX51#eD#1f@UhmxLet9t3hGXQs=t*s`N`RctqeExO1LlKpMc#ELcpl&(ku2TJj z#6jl*yC)A`C0_Y*y*gk zhCoPKj~v_|ST8;=n-`kQhn{4_P0Kx zV^+LJK@efbNA(j^7HRsCSF~I2%B@$#485uLBr{c#5E%{*N+UBdtZ+0V|=oxjYs*{3z zDzwF;lv#PFRLGJEoJV&!BTxha`tyFQr9=%fd5B|Nx^~BmO0~QYerL3=85yi{sj5yu z;sBaT5D|Nsw2lV~jb6@oz+5eRK|CmvI=!~OJ;N?YBQavU`Toux&`!}F`*V%=KO$3w zHJ(;&k*6oOPn_LZ1Cw7|C)wTCPiB2hpElTDparq}qe%46koW=cxoGs+7?Xv3jRwmk zr{Ex|#A4;^J4n@8!F98as|(GjU?TCPI(0;Fg2*q!J6+;ar8_rF^(5GpcuqTpTJv-u zE_}bEKfb-=)25Ob>7>HdpoQ5p^e#l?>Y=*Vqm2KBY{SLjWI2h%;+ia%b6c6H0+i4| zG%2-hbcdSkvrMU2`If8dB9OUf%h`_40v(wZc(~~;4Yv=dRoSgg8l+xkqYRe@ycN)DBQ@1uPv1=-gQS0&NNbqf% z72@H^bUun--RU}VSpu1ZmrLya^(@+!@EDWLlT@jeP{$^c%eS=d<_g?Iq~yB2RHcHIkO5-|T`C zDuh1t{g2})W8<*`PQ-hZ{o_dTF?|mMhuGG~{_;{o55Z3#h{_)kI;>ynuc2cd$5j7| zE}dDB30y0-pg$SZS+F;cAHGY(uQ=+ZyNNr~HAMLS1@A1spwU;*ZGVz^wZCgX=0TJn@OUILgJlm8!d1P-gW}ZtimN?v;p@_3N4+?Fz z)0^LE4>i7rn72shhvN-BA@DnSN;3{Zi%QrF8*=8^;5fRl?Rj5=L89 zC`R>1)l7ATnsVmh+nCr`Uhd*HQznk%C+fh_J}gi|7B6K#$eR}Nkxyr-qG!>=XIr#E zc#8(aB>0FQ*ulQ(*ZWCxKj8av>8w8aSe(7N>)x^is$7)umJFVC)3HnN!?cWs6c(-a zJM-z2fma@3`)-TCtk8LPdq&#~;*QT+rO2BsedmkR&~d1IEr~ zUu*va0jA?AT5moh9P8b>gpI#Ioh6{*9f6X5iN^UBI2#IY#~!PKjdU6dls2VZ#iSm~ z^T3hz?M#AOa^@n|!@5I5KTjd9UMJ1Wf|B@LXwjsIq;c{B`_JBS89HHMJfIt&WPJj} zyr(>5V`(U{MYtDET?qthe8RhJL#dC{8wqQ&=k4p8>}-W2KP^7g4nW#VFhhH-!pS`x z6PqZabnS*H5nIE%XtiR1V0x4M*&Ur2lW@j*c1FSbj}Us+c|5yy6z~M30r@>_Of;$j z3Z7`-$NbF>98aMRn$i#nLMzN%|BLMWl7m-ag;mfuEdU+FK(=5Ljs`%-4^zY#Trjh)r&g>|9qk)BmY#U?w?req+(X^JSXik1|@%lujU zl0Brw&Xfpi&gji~e-r)i*?6v3NBH%XYQ@VkaUyi=t0Y_mbALXlwQO{&%Mk}{V}t4r z!jVQ*I(F_M$MaMmJ511FHK~|bsBv9}o$-I3NGaL{9T#cxpkr$Q)Ay|*D{G)N4*X|% z`MzdF;}pT2(H_px6YH`@_lXcf7znSgK;NoWXAu#@n8pBPdH_=5FNi0{@`dOT#+{TO zgjZIX#^ov+Cd2>y-H9wadpO)-!%OIo=#SJZH{jm)gtN3HCpGywQ!&drr&2L%pqiT! z^{pobIN)8#G9_*Ko5{ljmf9qO98K^}01KC=6I@^FGB$aU?-H)>yWV`r3#Zm>5RQ`^ zO=|tjf_J|XnXyhcU6=aVyfI8#9fY=Mgz@v=;}F!oe90_e*W;hwojM$w#FHk1h$2 zqzC&UOqz-dNGLzQm#P2Zj2K)y{9;!?8-{@pMNzk|kC(k=qO;N@=-@l*ulQJXLG!}X zvhEBEk&?MI-z!9JgA$g9<$0!6=jRF0j8qF@<3|QY+0@3KzxHh1ZGoe* zbx8I1R_pzz?Z`Y)hW9$|>}b*Yh~j;2$^K7<(TTZ9-sX__3+cGuc$HG=G7w@h`0_>c z0&{SAyRUeKASR4TO!%qg&=@wzRnyG9=IB#yP`1Clws<9XQm}_+1d9x0@^`H7(E+o8 zv@C?U48*Zt8h_qmX8&fmpW@WCkma3d!*eniRch;@#(WwYzAT28uey!kwvj!7OZ*XL zX;O0JeUK}V0TC5aUb;cb1O@45l(rq=4WaQ?SfFPjD0HKsis=v$ozqfoy*Z;`D0<{w ze=L>7_EoEx$k{ZI2?#{v#VBDYKx*FFuDmje(C4j+g1qOduG0TSd#V4vi?| zl_N>ITr<%3%yBkJnKWI%P2{y@x7O5MV@Ct-wrT+o?EMt3CSqxgi4cW_A)oSQTbhMG zK#=?8vN}JRH)s0of%dBCTENR$;a4xw1fza>>=$>otvH8P>WBKi(pU$Mrnc5S#t%Si zB?mbnhsxuFvswu=YXxrg1fgDwd(`kN#v<1j>}N|%&2duDj(N=lgY}N+TDX~#vXvED@7xGBx_;B>8))s$(;8iC zv&P|Pp`{pT2lf%r>CJody?#Q<0sS?-B-}@1gl-KXko-|Eliu@zJbhhbeg&L$XTmdW zR4VOJmo`?I1Y+>s_eF}$cw;m!7X010j7eNIkOI9q3=_JGfkh^=FZhj3+-GyhOt6U2 z_yA0zItNYqGbvNJ=k&X%{NB)*C+HsgC4AN|l)aB9iv~T&o8?>wI1v{)tCh;CN`DC} zyk|Y4Dn`^KsfDa>PFv36wLPA1FDlqhd#VZwq8a@|H-p6mL+_D#+j5O1m%n0!qTMN{ z2=r~akPm|Z>25uV0cslUANeGU1;WEZj|@}PklbEMIRFuijwvV$QuK;pKB1fGj!}6Z zdEgc=6<3MV^3k+F`H6*Yn)^%&@i%tkq_p{pFTvPmtjZY*m zFMzX{ZlZVk2bUphSWtL0+jw^xmk@wQwKfPy#2%o>?=j8!sLMk!YRo&54CE(zfgoAH zyaNnCj-it_V?EBD-2g-u7GhooLU_lB0TRap)deD{?j&Hr+=*dUSP0%bQ}BShw7^kZ zkV(LuA#ps=$u|ES$w&N|0`XXP-I`gTE8$he?;kilQTn%5jffC7>UaL0OgJvO*S3Z% zHu*zKzE5x`!IV_&m-ixW*@pM(E-uev)}Vl=*+zeaq*tR&^vg))J4sIH)saCL;?k?_ z&5irNmReOGkBjl*cL}gND-2-CXXBaCSe7>EqJs$5NTLp^D%ZFzAsFl7PGsoP%NSiW z{LhHc-_*tvk_IroBc=+9J3T^1w97WbkxM21CU;H(WjLtLn38(`e)1n*`xE2RbRN*p zv&`En1MMjx4Ng5*1ytcQb>yAI+@s|5*yV4J+VYU)4<}U7%PY{~^%0@!j2L*$^zl*C zf?@Up_5Tzi>*CZ~yWYRp;cKWFd8hPWYZTqgFUqx#kV>d=#V8HkZTW<@q`D%?xWg(_ zjSACEyfUbsIr@3o$L>n9R?4E8{O~1Kwu9r=&aR+|PQ@)R0N#~sQ z8Ybrqymy3_jl4I#bvKj4U5IxDWVr**woh+eT0v`DVpsz;uw4!87}ZtMwqa;^aO+e3 z&XN-2Lv6kxzTK7m&WeTQiX6>|JGT^$+#k{-{4OruT%z*^Yi5>A9a&s;O93O!=r_tl z_$%oQk?Y?`H~Nw#Qe24gYClz_z`}!|=B;l<)iwc{PgQHgE&(3 zXPq_7TVrfW_{?Y3l9v9XB5Wh|6;G|qZl{W1l0+naou*54O98r23PkEorSb_i*u7uGg?#$!nF;2f}cEGKCiAd@Pi@HlNKTS<KS;1S%%$BVafi*P>5FlU%fWi>a9fH?kyu% zxrxzFl3{NGZvm)YgR(pKJhUsp44>{21L0Gj54(%R#oxR%n+b16XvEXYDz-iM>Z%U< zCy*_|tJkIL>mzGC<6}|oi@Up4IyGnVh2A5<_Z^zm9bBxxzG~Qe3~N9Z3>B-+Ec2J; zyGH4Xi5hzKy*1oQkjpx%@GR1L*>H1Ius*IjGb^mQJqGe5ym}{@WXu+gLYeUAM?3IV zR%@S6R?L-u&(uj3mA4!Z{BeT8(}$!XXdn>r*RSci-Jbn3|LBVK#^Z}=rIfka+yYIU zozBrB*+F4`S2^NY73qr(ku^(dwT9*~S%Oo8>-z5z^vW%Pw)d9>drToQS~c6(qjMY7 z%{u+xJ)~-?Bd@ye!-yr94re6dJ)X&JuMf{Hn~SfAD#eV(-GhyBik;A1T&F!WTNo+T z-2Ybj<boEv#%T=SNBMbC$bTSc~tTv7eWT z*8FT4{Wv>`p6ysn*4T8#QM>*2Ya-amM2gj`GZAcCdRt{K({C>-FJ|xii>AAZdSrig z*_{#NBb9*sO6GPM4HY0+SdS{2Uj1xoZ|CQ7zoB`_K5TjWyXSok>jV$){X|Htgt#nw zdaR;R*--ZN!%7)Qg1bpcZ;Qs_ENyjw@i+O)7i;GtOVXN*J6RJEungVj)lz=GvlpFE%l||Y=7GkuJX9Yem3msZ z-UQl$$ZKua7i}p&;{hFdC|Y;anq12$TaR`6D4!z8-7lHRlB563dxXJC3BY;&VEvCY zd@>O7BBX_jfqKKvTy-T7pUz{S5K}9#K8uB{@Uh_h-!DuvWh)pk;n#$8H{=&|D*cWz z)qME)yh0}LlN3gAf~Mi@W^;b!rXsWfNOpUKir__QZold#8!1BV%7Wo-;khFwzY#4E zOwiz~+TqfNw(>bBA-|V~`oX^Ldmzwk>${`wtO-fi0gF&HL(_^m~>+v-pwGFrpf1zyZbUujvzhitsD!X$# z%$fLfhi&IypV6XmD8;-;cB2R07q5QSM+I5$DD^UP^)qGwt#7w;qsy#0(ca_{3^P&Z ziX8h?{)Xph^Thq_s^(1XtPn61l)x9n@6AUf?a6 zVN$PyIK4;Z?N1(!_G2fKb#Xj7@BZG#Y&E$zzE7~;A0Fun>FNE>`-iTb=}VS%fG?#; z))dPrkQD|f<0}wsi?h$R(ynvxngzw7Ta8glQWadABY!^1^ZXt11r(uXcyot_7a! zq3rzXDYEEWqb5K_zHOKYusyu;LcN;+Z_!$}6M0Zx(mPXTcv? ztwaNEH&2|C{d?D+UA(O5!m?_Y-mnvCo{~>xu%N{CSjGR>z=5=F4Z~|hSWUvg(qVp3 zJ8=&+(BTa~bc>QrNBZ!4>0k7A#a{{Ity(-tVa4~eDE)7~5>;5vh_JYf>n8Be(*H3C z4jy{_>bLB0$Ug%$A*5Owi)_{Di`4OzuEw@yK#*s`Mbr(Kvm-4wRGTjsN zSQAk(9v6Z}oT%~lcX$X7$%4Ex>RS5DlMf`gM)DTlYeFj)dm9;F-JMMC&vO_%nYVF>*mywb6Pb*zE&v`(7uM_z4 z^3FMQ9FP3nuGJ>s&t60KJaYQg6J=ML@N|V3CQM3^PBHFqquz^WfSRa>(%L8aFO4VL58==YrRQJTks)$?BsXGH4SJP7r*i zN1MW3|HKqg8beYG>e5M{3jT-`H`XE`%=vLd(uhu>FF22~9G$&mDZM3mSLQdmL?vOo zBnzzVa4F+Z?dQ?w?tL*Iku%bH6vW=~Q*vL?M8m}GvGEwT!kzBMZQ9i8&`D?{#KR+amtLz~HI)JFp^DW)2 z&q$sjUYQuzyhIenQF>1*tFDZiqaLbrqTTh>e?pZ9O7qI3t|!NQGF%`HIc*Jjv4|5} z3M=}Ki0Hg2UBd8Fqc8i-Rw0pq@5{5>u-1CM&_@nJXC*Zhzt1F9YvI#Zy&Tyj=Yd!C zic-ZCA(D4_`zlKAA@vx!1`r(eGrNxz?E`f7mDF&WB#eUv`ARTBd&O;vBMGza(YfD| zBCj<3_L~35tl}WVwG5<0ta6%3`_Pm|WIJ6=ls<=#9OOLv$tHV$H7+Ql8g6wte&Sq! zeGq~a&9f;S0Y{_PK;adj*@4|G0ZNT6hExN%REacIwQ;;?Qe6Sw(!j0N&xWOT#03Yi zKss{^mXj*Pz};XDK|AV|ZqiPMG;>s{cnRM79L|ro z^@V4jXOo}<`WKWyF2p;x*>K`NunwwwU+I_7ZL@K!TMg-gcZf+TU)Z%qnlUOogQF(7v+^;cy4$bIWfsvsz3J26_>^j(2r!Ll-9wCyg{NloL z;mD3}Sw*^afYp_6PXrxccTfU2@M3$C*L6SwH0<;-HQCt$K(g>fAM)&#Y%Af`eUH-u zWW};%ku@U%51lv(uLdQz_-OeOPUa&(9QC7_{CY1K>%%&bTXh}Snf1F0i0!H=!RUK{ z+ms_|_lfJKcyftsGRa31<)OCqPze`+0As`0O{&;`043rleLzZVl7$X;*dKsqsH#NP zp+OPs%=jHq1W%V|Q)eLTcJeR_(uhr+=Fg=DXjkD&3J?lW>K36F4)h`|UbC0vzo+6Y znLGU!&4p^H+!_*q&~x-$(mRG|LBku=}H_Xs6zoLmz#^cX#@2S~i-hP%Iyj}4?d zAbmYJCf^9$PHSe^SSJ36j%z>TUBU!)(`QQT4-{~c> zV8VgOY_#q&ka4v480)S7pSt6FAgoV+d8SN=7`=MVB?DnXzu=MpC0)Ncaxuh<8w?oR z+b89`l$@+(5a}X?QDK5~fPu(qSF-+ISMLBMNCrZ{M3P?i^EM;>d!%8jXM-m=5Z!L( z6af&Q34sn|#)wB#*;E$rmj*dgSa%?rBx3tGsw?ork-wGOTyPA$4s0w0JOD{S0eh#R zrVTxy6_B!~QeE+_a`_LJ0K{Kd=uRUMN#j3dsk(9$ok`DFPlA5w4nmqI6;rrpjYKjC zrf7R6r|c4f2r&>`oWPC_p~5FCN4AQdp9JbBsePRO4-_?e$uYJgXL)ZXQtCtwc2M5;Fo?|hJyj$HQfIu(tBn% z(y|i$lg0|wrdk;8;`t)6c)B=kZWVO{*XlYCzGT5+y7N#x(!$keHfhK;UlqJ3ZZ#3& zkVJ2xZ*Cs*UE*Ib$kV+dsCxEri4eW$5KP0^)liOFUm)WB=r`~?R}y3in&&#;Hi|%i zytrszaSE>C~PYY`oIw9&EWCr{PN}2vK(@8bgiwA#ucU$((3QNQw zH6>1Zljc=^)o$>=@S#6m_!MM1_s>?C}LQpC$}*pckGUInEXFRJWv8mW0@RZ zt-tJ`O}^(JCpiM2CfzsQFgGSuY^oRYpREE2l|b(4<1t;aocxWMLX5jXMN0sdvg3PV zx00`5xia_9+n>-?C1UcGu~osVhwa8EsZJT_AnX$?IkQyM_xJ^tHI&XuH|yqkyd6+! zYYM^J-XNb#i?z1dCllRbl*ERe90*#f>GX)V;n+scJAX0uJfwD6ig{p?T_e=n5A$Av zvx{hpPRDA0b&Aq`ltuyEeY@c`%-4lK9xnN0*VvQWF_3&oO8oGj~;DoC}9Q2>7S6q?Ao^rYD%0dPTVs9pz;^R z4!#B}j*_oVXmH$}j7uaN%EJA@;M9Yn9+CjvC80v9gMRHz>ip3vY$^X zo>|aqS_lkb=3*GXw4h>(+^t|s_mk4{MxXL~`-LLx2VdVG?6BWrk1TGrMd87oKy1EL z#RH|)#D8J|MAF2Sng2Sl?8SdMpAf2lOA2sGa2yKn*Z*!6+ZoZj)}|_vjg<@kb`#dW z*D}mlCCy3iKb1218KaxVvWqk(>bjTFi(gq#N`I4w6);9~nknyedVtGyRwoZ{CtJh- zAZ7AK4q{_Q1P8uYvvN=Sf!!ql&)>XN3j2|g@lgAb>A9YhX)&sBL>HV(; zd3{KxS}gQAO`V*0ApMj02e9=KW~~in{CQH09|4Qk9HbJ35nRxvQ`WL?mL9C)0I~UR zFPWQv5$m9aa@2IwS~T|t+yI#*kKE*$#pVo(ko|UpM^5$4>#+dM;_u99sM*682%c+> z1MZOZxRxBOACW{^tU(!mo+A|LrYU-P+9RQZ@ozC@lFFhuROIi|%Dx8;+k@KwB=S)b z1z^!9pZ8h4TNQ@y{Rw|j@zA6&1Uo=%Ts<~SSimO@L~Sc#kf(piLb-v96Tn=ju9hY$ zC8_|?R_C@}f*)!JqfzN9Eb{oXnEVinj>)CeQ;M4otbnpeV>W>s#Y!OqwlmnvCo*L@ zThF$00GbN6mI6!)-#Ppc+XiuBc5ke|Hx-Iu%D`=Xy$4|_qn1*TzvvJAesRBS94$+o z0J?uw`MUhv&1aV=5E-0eZ0zf~79L2>BVz5Ro!1R%bB#*k0yM&{V{D+xJyI1(Yj0oOJg5X->>BfM@^yXc0PU zA-smk*zY(0?cAEL@Uop7dR3{N@D;W$#XHXeSbhA9gPP&uxF+$w0X$i3pr^mXsDmO&^ zm3}YCjrSfCGHAILx>EocyHg*J59<#e>;3A7f*uXCTJHh5xDpiZ0Z563Yh&;&HtXy6 zW4B<*FRXuH@#F_uS)@>!t%R-E&)E*?gd#&Y-DEyvd zj#x;^QJ%vH=uQ0WVi*4cGdc-KV$7Y^mD4I}Io1sb=$~dI2>pwlX+gKuz)Q!0(L@I`M!0ey1sesOJYTpih; zQu)NDk5D-_}shY zJ-3HoC<{{RVDCEEBJ!^X3R9|msj3aLJqL}j z^3Bb`UES~XrDk_Ltj*$43JD&fw^wFnkMrm~zRFLf<45xB@cTRViS8uEmXzXIiNC}4 zjHuyXY8Z89F)OOBbg~j~Z*uy^Pg7n0!|!JWU>sSmO|?PIWdmgxZ~sE-?S0%j*2ZpO zcp}FGt;c#MX{l(r{V_kQcXZyI)9Y|F37RE#FqYNeVP{KVp}$a(A^1W=tN590|Q_1x2Pcw#$cr{HASe2vMV<} zqcsT`a&g4WGq&n2EpM+GZ5G|yuz(SzZJ#D-$v?Zp=_XfAf+B>Gqv=EqrozIkDbgM`0zQ}dcJ|LwGu^vj8q9w)w z{5&EZykKseDVrM}3&9L{`-PZ~>YKRd;!Wl~96u#YPd`Fi+)Hu_C&jo4XTM{JD04Ps#f^QV=Lp3*wl8E_;RDF(^8S1UhocKkFF}TE z@qm~5A2ap~TG2J8Y4ICFHliafTO^rvF<6u$JywW6M;cX61bBb1g%{W){XoWGd|?KC3T<;fJgkgzYl7oY7s{egd9 zWG(pRCwoQ7d?Pt0IM!&WoF2|93Z(Y@`5WXxEaR$z;`tIyo5ZlK7MPUAF-%pmp})3= z?+gFB?m{O#;!=kfJI^Unero+GvkKvWp#L( zeB+oohLt0`x%z|J=22.0.0" + } + }, + "node_modules/@anthropic-ai/mcpb": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@anthropic-ai/mcpb/-/mcpb-2.1.2.tgz", + "integrity": "sha512-goRbBC8ySo7SWb7tRzr+tL6FxDc4JPTRCdgfD2omba7freofvjq5rom1lBnYHZHo6Mizs1jAHJeN53aZbDoy8A==", + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^6.0.1", + "commander": "^13.1.0", + "fflate": "^0.8.2", + "galactus": "^1.0.0", + "ignore": "^7.0.5", + "node-forge": "^1.3.2", + "pretty-bytes": "^5.6.0", + "zod": "^3.25.67", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "mcpb": "dist/cli/cli.js" } }, "node_modules/@babel/helper-string-parser": { @@ -258,7 +283,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" @@ -271,7 +295,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -283,7 +306,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -742,6 +764,352 @@ "hono": "^4" } }, + "node_modules/@inquirer/checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz", + "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@inquirer/confirm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz", + "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@inquirer/core/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@inquirer/core/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/@inquirer/core/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz", + "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz", + "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz", + "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz", + "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz", + "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@inquirer/prompts": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz", + "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==", + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^3.0.1", + "@inquirer/confirm": "^4.0.1", + "@inquirer/editor": "^3.0.1", + "@inquirer/expand": "^3.0.1", + "@inquirer/input": "^3.0.1", + "@inquirer/number": "^2.0.1", + "@inquirer/password": "^3.0.1", + "@inquirer/rawlist": "^3.0.1", + "@inquirer/search": "^2.0.1", + "@inquirer/select": "^3.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz", + "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz", + "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz", + "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -828,7 +1196,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@tybys/wasm-util": "^0.10.3" }, @@ -847,7 +1214,6 @@ "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/Boshen" } @@ -865,7 +1231,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -883,7 +1248,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -901,7 +1265,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -919,7 +1282,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -937,7 +1299,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -955,7 +1316,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -973,7 +1333,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -991,7 +1350,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1009,7 +1367,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1027,7 +1384,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1045,7 +1401,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1063,7 +1418,6 @@ "os": [ "openharmony" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1078,7 +1432,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", @@ -1101,7 +1454,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1119,7 +1471,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1129,8 +1480,7 @@ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.62.2", @@ -1487,8 +1837,7 @@ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@tybys/wasm-util": { "version": "0.10.3", @@ -1497,7 +1846,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1508,7 +1856,6 @@ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" @@ -1519,8 +1866,7 @@ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/emscripten": { "version": "1.41.5", @@ -1535,6 +1881,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.20.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.0.tgz", @@ -1554,6 +1909,12 @@ "@types/node": "*" } }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "license": "MIT" + }, "node_modules/@vitest/coverage-v8": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", @@ -1591,7 +1952,6 @@ "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", @@ -1610,7 +1970,6 @@ "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/spy": "4.1.9", "estree-walker": "^3.0.3", @@ -1651,7 +2010,6 @@ "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "4.1.9", "pathe": "^2.0.3" @@ -1666,7 +2024,6 @@ "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/pretty-format": "4.1.9", "@vitest/utils": "4.1.9", @@ -1683,7 +2040,6 @@ "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://opencollective.com/vitest" } @@ -1817,7 +2173,6 @@ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" } @@ -1968,7 +2323,6 @@ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -1986,6 +2340,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -2035,6 +2395,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2046,7 +2433,6 @@ "version": "13.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -2179,7 +2565,6 @@ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8" } @@ -2256,8 +2641,7 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.2", @@ -2396,7 +2780,6 @@ "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=12.0.0" } @@ -2462,6 +2845,32 @@ "express": ">= 4.11" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2484,6 +2893,12 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2530,6 +2945,19 @@ "rollup": "^4.34.8" } }, + "node_modules/flora-colossus": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-2.0.0.tgz", + "integrity": "sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2548,6 +2976,20 @@ "node": ">= 0.8" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2572,6 +3014,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/galactus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/galactus/-/galactus-1.0.0.tgz", + "integrity": "sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "flora-colossus": "^2.0.0", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/get-east-asian-width": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", @@ -2647,6 +3103,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2759,6 +3221,15 @@ "url": "https://opencollective.com/express" } }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -2908,13 +3379,24 @@ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, "license": "MPL-2.0", - "peer": true, "dependencies": { "detect-libc": "^2.0.3" }, @@ -2952,7 +3434,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2974,7 +3455,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2996,7 +3476,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3018,7 +3497,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3040,7 +3518,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3062,7 +3539,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3084,7 +3560,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3106,7 +3581,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3128,7 +3602,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3150,7 +3623,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3172,7 +3644,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -3469,6 +3940,15 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -3493,7 +3973,6 @@ } ], "license": "MIT", - "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3510,6 +3989,15 @@ "node": ">= 0.6" } }, + "node_modules/node-forge": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", @@ -3611,6 +4099,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pako": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", @@ -3746,7 +4243,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", @@ -3799,6 +4295,18 @@ } } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3930,7 +4438,6 @@ "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@oxc-project/types": "=0.137.0", "@rolldown/pluginutils": "^1.0.0" @@ -4188,14 +4695,12 @@ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -4252,8 +4757,7 @@ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.2", @@ -4402,8 +4906,7 @@ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", @@ -4470,6 +4973,18 @@ "node": ">=14.0.0" } }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4515,8 +5030,7 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD", - "optional": true, - "peer": true + "optional": true }, "node_modules/tsup": { "version": "8.5.1", @@ -4571,6 +5085,18 @@ } } }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", @@ -4629,6 +5155,15 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4653,7 +5188,6 @@ "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -4732,7 +5266,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -4746,7 +5279,6 @@ "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.1.9", "@vitest/mocker": "4.1.9", @@ -4837,7 +5369,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -4851,7 +5382,6 @@ "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -4877,7 +5407,6 @@ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -4929,6 +5458,18 @@ "url": "https://github.com/sponsors/eemeli" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", diff --git a/package.json b/package.json index 33a5288..00a2266 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "test:watch": "vitest", "coverage": "vitest run --coverage", "prepare": "husky install", + "pack": "mcpb pack . dist/pcm-mcp.mcpb", "start": "node ./dist/index.js", "start:dev": "tsup --watch --onSuccess \"node ./dist/index.js\"" }, @@ -27,11 +28,11 @@ "@types/node": "^22.20.0", "@types/sql.js": "^1.4.11", "@vitest/coverage-v8": "^4.1.5", - "vitest": "^4.1.5", "husky": "^9.1.7", "lint-staged": "^15.5.2", "tsup": "^8.0.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.1.5" }, "repository": { "type": "git", @@ -47,6 +48,7 @@ "node": ">=22.0.0" }, "dependencies": { + "@anthropic-ai/mcpb": "^2.1.2", "@modelcontextprotocol/sdk": "^1.29.0", "cdb-converter": "^0.1.2", "sql.js": "^1.14.1", From c81aff448e91c5427ae3f503517b51c51bfb79d4 Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 08:45:31 -0400 Subject: [PATCH 2/7] feat: enhance long description in manifest.json for clarity --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 2bdc11d..0ddbb0c 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "pcm-mcp-server", "version": "0.0.0", "description": "MCP server for querying Pro Cycling Manager game databases", - "long_description": "MCP server for querying Pro Cycling Manager game databases", + "long_description": "MCP server for querying Pro Cycling Manager game databases. This server provides tools to discover and inspect PCM career save files via the MCP protocol, allowing AI assistants to explore your saves in a structured way. This server is strictly read-only", "author": { "name": "mpicciolli" }, From cfa1da1077e6212e3ff8d1e836c43640f37cc879 Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 08:48:07 -0400 Subject: [PATCH 3/7] feat: add step to build MCP bundle in CI workflow --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf1e3aa..ade886a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,6 +35,9 @@ jobs: - name: Build run: npm run build + - name: Build MCP Bundle + run: npm run pack + - name: Test run: npm test From 94f2fe3ca6294e24fa573a6dcc4b9c575125e0ed Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 09:11:19 -0400 Subject: [PATCH 4/7] fix: add author name to package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 00a2266..e1a5f0b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "type": "git", "url": "git+https://github.com/mpicciolli/pcm-mcp.git" }, - "author": "", + "author": "mpicciolli", "license": "MIT", "bugs": { "url": "https://github.com/mpicciolli/pcm-mcp/issues" From 4fa937e3ce3b05a20bd57f01927477a7e9d5f42f Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 09:17:47 -0400 Subject: [PATCH 5/7] feat: add GitHub Actions workflow for package publishing --- .github/workflows/publish.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..b4c91fd --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,33 @@ +name: Publish Package + +on: + push: + tags: + - "v*.*.*" + +permissions: + id-token: write # Required for OIDC + contents: write # Required for creating GitHub Releases + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: "24" + registry-url: "https://registry.npmjs.org" + package-manager-cache: false # never use caching in release builds + - run: npm ci + - run: npm run build --if-present + - run: npm run mcpb:pack + - run: npm test + - run: npm publish + + - name: Create GitHub Release + uses: softprops/action-gh-release@v3 + with: + generate_release_notes: true + files: dist/pcm-mcp.mcpb From 501246ca0a4fc7ed121b5e8f659930f8e60bd9d4 Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 09:47:42 -0400 Subject: [PATCH 6/7] feat: add lint-staged configuration for JSON and TypeScript files --- .lintstagedrc.json | 4 ++++ manifest.json | 40 +++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 .lintstagedrc.json diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 0000000..51f8e2a --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.json": ["biome check --write"], + "*.ts": ["biome check --write"] +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 0ddbb0c..693161b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,23 +1,21 @@ { - "manifest_version": "0.3", - "name": "pcm-mcp-server", - "version": "0.0.0", - "description": "MCP server for querying Pro Cycling Manager game databases", - "long_description": "MCP server for querying Pro Cycling Manager game databases. This server provides tools to discover and inspect PCM career save files via the MCP protocol, allowing AI assistants to explore your saves in a structured way. This server is strictly read-only", - "author": { - "name": "mpicciolli" - }, - "server": { - "type": "node", - "entry_point": "dist/index.js", - "mcp_config": { - "command": "node", - "args": [ - "${__dirname}/dist/index.js" - ], - "env": {} - } - }, - "license": "MIT", - "icon": "assets/icon.png" + "manifest_version": "0.3", + "name": "pcm-mcp-server", + "version": "0.0.0", + "description": "MCP server for querying Pro Cycling Manager game databases", + "long_description": "MCP server for querying Pro Cycling Manager game databases. This server provides tools to discover and inspect PCM career save files via the MCP protocol, allowing AI assistants to explore your saves in a structured way. This server is strictly read-only", + "author": { + "name": "mpicciolli" + }, + "server": { + "type": "node", + "entry_point": "dist/index.js", + "mcp_config": { + "command": "node", + "args": ["${__dirname}/dist/index.js"], + "env": {} + } + }, + "license": "MIT", + "icon": "assets/icon.png" } From 075d783cdb743cc809b47e0b22bbc578087b418f Mon Sep 17 00:00:00 2001 From: Mathieu Picciolli Date: Sat, 27 Jun 2026 09:55:40 -0400 Subject: [PATCH 7/7] fix: standardize formatting in lint-staged config and README --- .github/workflows/publish.yml | 2 +- .lintstagedrc.json | 6 +++--- README.md | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b4c91fd..d4b6baa 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -22,7 +22,7 @@ jobs: package-manager-cache: false # never use caching in release builds - run: npm ci - run: npm run build --if-present - - run: npm run mcpb:pack + - run: npm run pack - run: npm test - run: npm publish diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 51f8e2a..596339b 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,4 +1,4 @@ { - "*.json": ["biome check --write"], - "*.ts": ["biome check --write"] -} \ No newline at end of file + "*.json": ["biome check --write"], + "*.ts": ["biome check --write"] +} diff --git a/README.md b/README.md index b982580..b769b4b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +

+ PCM MCP +

+ # Pro Cycling Manager MCP Server A Model Context Protocol (MCP) server for querying Pro Cycling Manager (PCM) game databases. This server provides tools to discover and inspect PCM career save files via the MCP protocol, allowing AI assistants to explore your saves in a structured way. @@ -44,7 +48,7 @@ Add the following to your ChatGPT MCP configuration file: ### Gemini -Add the following to your Gemini CLI settings file +Add the following to your Gemini CLI settings file: ```json {