You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
14 KiB
JavaScript

exports.id=935,exports.ids=[935],exports.modules={9127:(e,t,a)=>{"use strict";a.d(t,{Z:()=>l});var r,s,i=a(6413);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}let l=function(e){return i.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:16,height:16,fill:"none"},e),r||(r=i.createElement("defs",null,i.createElement("path",{id:"edit_svg__a",d:"M0 0h16v16H0z"}))),i.createElement("g",null,s||(s=i.createElement("mask",{id:"edit_svg__b",fill:"#fff"},i.createElement("use",{xlinkHref:"#edit_svg__a"}))),i.createElement("g",{mask:"url(#edit_svg__b)"},i.createElement("path",{style:{stroke:"#333",strokeWidth:1.3333333333333333,strokeOpacity:1,strokeDasharray:"0 0"},d:"M2.83 0v3c0 .37-.3.67-.66.67H0",transform:"translate(10.5 11)"}),i.createElement("path",{style:{stroke:"#333",strokeWidth:1.3333333333333333,strokeOpacity:1,strokeDasharray:"0 0"},d:"M10.67 4V.67c0-.37-.3-.67-.67-.67H.67C.3 0 0 .3 0 .67v12c0 .36.3.66.67.66h2",transform:"translate(2.667 1.333)"}),i.createElement("path",{style:{stroke:"#333",strokeWidth:1.3333333333333333,strokeOpacity:1,strokeDasharray:"0 0"},d:"M0 0h4.67",transform:"translate(5.333 5.333)"}),i.createElement("path",{style:{stroke:"#333",strokeWidth:1.3333333333333333,strokeOpacity:1,strokeDasharray:"0 0"},d:"m0 7 5.67-7",transform:"translate(7.667 7.667)"}),i.createElement("path",{style:{stroke:"#333",strokeWidth:1.3333333333333333,strokeOpacity:1,strokeDasharray:"0 0"},d:"M0 0h2.67",transform:"translate(5.333 8)"}))))}},30892:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});var r,s=a(6413);function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}let n=function(e){return s.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},e),r||(r=s.createElement("rect",{x:3,y:3,width:18,height:18,rx:2,ry:2})))}},9935:(e,t,a)=>{"use strict";a.r(t),a.d(t,{McpMarketPage:()=>C});var r,s=a(95344),i=a(70580),n=a(99668),l=a(20925),o=a.n(l),c=a(9127),d=a(32263),m=a(26989),p=a(12670),u=a(30841),_=a(32168),h=a(47572),k=a(6068),g=a(17304),f=a(3729),v=a(85824),x=a(56815),y=a(6413);function j(){return(j=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}let b=function(e){return y.createElement("svg",j({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},e),r||(r=y.createElement("path",{d:"m5 3 14 9-14 9V3z"})))};var w=a(30892),N=a(99608);function C(){let e=(0,g.s0)(),[t,a]=(0,f.useState)(!1),[r,l]=(0,f.useState)(""),[y,j]=(0,f.useState)({}),[C,S]=(0,f.useState)(),[E,F]=(0,f.useState)(null),[O,L]=(0,f.useState)(),[M,Z]=(0,f.useState)(!1),[H,z]=(0,f.useState)(),[A,P]=(0,f.useState)({}),[D,W]=(0,f.useState)(!0),[R,T]=(0,f.useState)([]),[X,J]=(0,f.useState)({});if((0,f.useEffect)(()=>{(async()=>{let t=await (0,v.mJ)();a(t),t||e(N.y$.Home)})()},[e]),(0,f.useEffect)(()=>{if(!t||!H)return;let e=async()=>{P(await (0,v.Nv)())};e();let a=setInterval(e,1e3);return()=>clearInterval(a)},[t,H]),(0,f.useEffect)(()=>{(async()=>{if(t)try{W(!0);let e=await fetch("https://nextchat.club/mcp/list");if(!e.ok)throw Error("Failed to load preset servers");let t=await e.json();T(t?.data??[])}catch(e){console.error("Failed to load preset servers:",e),(0,k.CF)("Failed to load preset servers")}finally{W(!1)}})()},[t]),(0,f.useEffect)(()=>{(async()=>{if(t)try{Z(!0);let e=await (0,v.Hv)();z(e);let t=await (0,v.Nv)();P(t)}catch(e){console.error("Failed to load initial state:",e),(0,k.CF)("Failed to load initial state")}finally{Z(!1)}})()},[t]),(0,f.useEffect)(()=>{if(!C||!H)return;let e=H.mcpServers[C];if(e){let t=R.find(e=>e.id===C);if(t?.configSchema){let a={};Object.entries(t.argsMapping||{}).forEach(([t,r])=>{if("spread"===r.type){let s=r.position??0;a[t]=e.args.slice(s)}else"single"===r.type?a[t]=e.args[r.position??0]:"env"===r.type&&r.key&&e.env&&(a[t]=e.env[r.key])}),j(a)}}else j({})},[C,H,R]),!t)return null;let $=e=>e in(H?.mcpServers??{}),B=async()=>{let e=R.find(e=>e.id===C);if(e&&e.configSchema&&C){S(void 0);try{Q(C,"Updating configuration...");let t=[...e.baseArgs],a={};Object.entries(e.argsMapping||{}).forEach(([e,r])=>{let s=y[e];if("spread"===r.type&&Array.isArray(s)){let e=r.position??0;t.splice(e,0,...s)}else"single"===r.type&&void 0!==r.position?t[r.position]=s:"env"===r.type&&r.key&&"string"==typeof s&&(a[r.key]=s)});let r={command:e.command,args:t,...Object.keys(a).length>0?{env:a}:{}},s=await (0,v.uy)(C,r);z(s),(0,k.CF)("Server configuration updated successfully")}catch(e){(0,k.CF)(e instanceof Error?e.message:"Failed to save configuration")}finally{Q(C,null)}}},I=async e=>{try{let t=await (0,v.Fu)(e);if(t)F(t);else throw Error("Failed to load tools")}catch(e){(0,k.CF)("Failed to load tools"),console.error(e),F(null)}},Q=(e,t)=>{J(a=>{if(null===t){let{[e]:t,...r}=a;return r}return{...a,[e]:t}})},Y=async e=>{if(e.configurable)S(e.id),j({});else try{let t=e.id;Q(t,"Creating MCP client...");let a={command:e.command,args:[...e.baseArgs]},r=await (0,v.uy)(e.id,a);z(r);let s=await (0,v.Nv)();P(s)}finally{Q(e.id,null)}},G=async e=>{try{Q(e,"Stopping server...");let t=await (0,v.cP)(e);z(t),(0,k.CF)("Server stopped successfully")}catch(e){(0,k.CF)("Failed to stop server"),console.error(e)}finally{Q(e,null)}},V=async e=>{try{Q(e,"Starting server..."),await (0,v.XG)(e)}catch(e){(0,k.CF)(e instanceof Error?e.message:"Failed to start server, please check logs"),console.error(e)}finally{Q(e,null)}},K=async()=>{try{Q("all","Restarting all servers...");let e=await (0,v.wg)();z(e),(0,k.CF)("Restarting all clients")}catch(e){(0,k.CF)("Failed to restart clients"),console.error(e)}finally{Q("all",null)}},U=e=>A[e]||{status:"undefined",errorMsg:null},q=e=>{let t=U(e);return({undefined:null,initializing:s.jsx("span",{className:(0,x.Z)(o()["server-status"],o().initializing),children:"Initializing"}),paused:s.jsx("span",{className:(0,x.Z)(o()["server-status"],o().stopped),children:"Stopped"}),active:s.jsx("span",{className:o()["server-status"],children:"Running"}),error:(0,s.jsxs)("span",{className:(0,x.Z)(o()["server-status"],o().error),children:["Error",(0,s.jsxs)("span",{className:o()["error-message"],children:[": ",t.errorMsg]})]})})[t.status]},ee=e=>e.toLowerCase().includes("stopping")?"stopping":e.toLowerCase().includes("starting")?"starting":e.toLowerCase().includes("error")?"error":"default";return s.jsx(n.S,{children:(0,s.jsxs)("div",{className:o()["mcp-market-page"],children:[(0,s.jsxs)("div",{className:"window-header",children:[(0,s.jsxs)("div",{className:"window-header-title",children:[(0,s.jsxs)("div",{className:"window-header-main-title",children:["MCP Market",X.all&&s.jsx("span",{className:o()["loading-indicator"],children:X.all})]}),(0,s.jsxs)("div",{className:"window-header-sub-title",children:[Object.keys(H?.mcpServers??{}).length," servers configured"]})]}),(0,s.jsxs)("div",{className:"window-actions",children:[s.jsx("div",{className:"window-action-button",children:s.jsx(i.h,{icon:s.jsx(u.Z,{}),bordered:!0,onClick:K,text:"Restart All",disabled:M})}),s.jsx("div",{className:"window-action-button",children:s.jsx(i.h,{icon:s.jsx(m.Z,{}),bordered:!0,onClick:()=>e(-1),disabled:M})})]})]}),(0,s.jsxs)("div",{className:o()["mcp-market-page-body"],children:[s.jsx("div",{className:o()["mcp-market-filter"],children:s.jsx("input",{type:"text",className:o()["search-bar"],placeholder:"Search MCP Server",autoFocus:!0,onInput:e=>l(e.currentTarget.value)})}),s.jsx("div",{className:o()["server-list"],children:D?s.jsx("div",{className:o()["loading-container"],children:s.jsx("div",{className:o()["loading-text"],children:"Loading preset server list..."})}):Array.isArray(R)&&0!==R.length?R.filter(e=>{if(0===r.length)return!0;let t=r.toLowerCase();return e.name.toLowerCase().includes(t)||e.description.toLowerCase().includes(t)||e.tags.some(e=>e.toLowerCase().includes(t))}).sort((e,t)=>{let a=U(e.id).status,r=U(t.id).status,s=X[e.id],i=X[t.id],n={error:0,active:1,initializing:2,starting:3,stopping:4,paused:5,undefined:6},l=(e,t)=>{if(t){let a=ee(t);return"default"===a?e:a}return"initializing"!==e||t?e:"active"},o=l(a,s),c=l(r,i);return o!==c?(n[o]??6)-(n[c]??6):e.name.localeCompare(t.name)}).map(e=>s.jsx("div",{className:(0,x.Z)(o()["mcp-market-item"],{[o().loading]:X[e.id]}),children:(0,s.jsxs)("div",{className:o()["mcp-market-header"],children:[(0,s.jsxs)("div",{className:o()["mcp-market-title"],children:[(0,s.jsxs)("div",{className:o()["mcp-market-name"],children:[e.name,X[e.id]&&s.jsx("span",{className:o()["operation-status"],"data-status":ee(X[e.id]),children:X[e.id]}),!X[e.id]&&q(e.id),e.repo&&s.jsx("a",{href:e.repo,target:"_blank",rel:"noopener noreferrer",className:o()["repo-link"],title:"Open repository",children:s.jsx(h.Z,{})})]}),s.jsx("div",{className:o()["tags-container"],children:e.tags.map((e,t)=>s.jsx("span",{className:o().tag,children:e},t))}),s.jsx("div",{className:(0,x.Z)(o()["mcp-market-info"],"one-line"),title:e.description,children:e.description})]}),s.jsx("div",{className:o()["mcp-market-actions"],children:$(e.id)?(0,s.jsxs)(s.Fragment,{children:[e.configurable&&s.jsx(i.h,{icon:s.jsx(c.Z,{}),text:"Configure",onClick:()=>S(e.id),disabled:M}),"paused"===U(e.id).status?s.jsx(s.Fragment,{children:s.jsx(i.h,{icon:s.jsx(b,{}),text:"Start",onClick:()=>V(e.id),disabled:M})}):(0,s.jsxs)(s.Fragment,{children:[s.jsx(i.h,{icon:s.jsx(_.Z,{}),text:"Tools",onClick:async()=>{L(e.id),await I(e.id)},disabled:M||"error"===U(e.id).status}),s.jsx(i.h,{icon:s.jsx(w.Z,{}),text:"Stop",onClick:()=>G(e.id),disabled:M})]})]}):s.jsx(i.h,{icon:s.jsx(d.Z,{}),text:"Add",onClick:()=>Y(e),disabled:M})})]})},e.id)):s.jsx("div",{className:o()["empty-container"],children:s.jsx("div",{className:o()["empty-text"],children:"No servers available"})})})]}),C&&s.jsx("div",{className:"modal-mask",children:s.jsx(k.u_,{title:`Configure Server - ${C}`,onClose:()=>!M&&S(void 0),actions:[s.jsx(i.h,{text:"Cancel",onClick:()=>S(void 0),bordered:!0,disabled:M},"cancel"),s.jsx(i.h,{text:"Save",type:"primary",onClick:B,bordered:!0,disabled:M},"confirm")],children:s.jsx(k.aV,{children:(()=>{let e=R.find(e=>e.id===C);return e?.configSchema?Object.entries(e.configSchema.properties).map(([e,t])=>{if("array"===t.type){let a=y[e]||[],r=t.itemLabel||e,n=t.addButtonText||`Add ${r}`;return s.jsx(k.HC,{title:e,subTitle:t.description,vertical:!0,children:(0,s.jsxs)("div",{className:o()["path-list"],children:[a.map((t,n)=>(0,s.jsxs)("div",{className:o()["path-item"],children:[s.jsx("input",{type:"text",value:t,placeholder:`${r} ${n+1}`,onChange:t=>{let r=[...a];r[n]=t.target.value,j({...y,[e]:r})}}),s.jsx(i.h,{icon:s.jsx(p.Z,{}),className:o()["delete-button"],onClick:()=>{let t=[...a];t.splice(n,1),j({...y,[e]:t})}})]},n)),s.jsx(i.h,{icon:s.jsx(d.Z,{}),text:n,className:o()["add-button"],bordered:!0,onClick:()=>{let t=[...a,""];j({...y,[e]:t})}})]})},e)}if("string"===t.type){let a=y[e]||"";return s.jsx(k.HC,{title:e,subTitle:t.description,children:s.jsx("input",{"aria-label":e,type:"text",value:a,placeholder:`Enter ${e}`,onChange:t=>{j({...y,[e]:t.target.value})}})},e)}return null}):null})()})})}),O&&s.jsx("div",{className:"modal-mask",children:s.jsx(k.u_,{title:`Server Details - ${O}`,onClose:()=>L(void 0),actions:[s.jsx(i.h,{text:"Close",onClick:()=>L(void 0),bordered:!0},"close")],children:s.jsx("div",{className:o()["tools-list"],children:M?s.jsx("div",{children:"Loading..."}):E?.tools?E.tools.map((e,t)=>(0,s.jsxs)("div",{className:o()["tool-item"],children:[s.jsx("div",{className:o()["tool-name"],children:e.name}),s.jsx("div",{className:o()["tool-description"],children:e.description})]},t)):s.jsx("div",{children:"No tools available"})})})})]})})}},20925:e=>{e.exports={"mcp-market-page":"mcp-market_mcp-market-page__XToZ1","loading-indicator":"mcp-market_loading-indicator__t6Twk","mcp-market-page-body":"mcp-market_mcp-market-page-body__FSplB","loading-container":"mcp-market_loading-container__Zy_bH","empty-container":"mcp-market_empty-container__2JdB1","slide-in":"mcp-market_slide-in__aSg7f","loading-text":"mcp-market_loading-text__G6uSy","empty-text":"mcp-market_empty-text__7veyE","mcp-market-filter":"mcp-market_mcp-market-filter__v_4MF","search-bar":"mcp-market_search-bar__z5iDx","server-list":"mcp-market_server-list__58CoO","mcp-market-item":"mcp-market_mcp-market-item___LHO4",disabled:"mcp-market_disabled__DodaP",loading:"mcp-market_loading__f0EfV","loading-pulse":"mcp-market_loading-pulse__L_XIf","operation-status":"mcp-market_operation-status__YyRkc",pulse:"mcp-market_pulse__YezWQ","mcp-market-header":"mcp-market_mcp-market-header__rMIdP","mcp-market-title":"mcp-market_mcp-market-title__QtKbv","mcp-market-name":"mcp-market_mcp-market-name__YHmNi","server-status":"mcp-market_server-status__RjHMq",error:"mcp-market_error__LHFLR",stopped:"mcp-market_stopped__dumPm",initializing:"mcp-market_initializing__klKc7","error-message":"mcp-market_error-message__dGlZy","repo-link":"mcp-market_repo-link__2Jlad","tags-container":"mcp-market_tags-container__N64r3",tag:"mcp-market_tag__Ysj4O","mcp-market-info":"mcp-market_mcp-market-info__dgxmq","mcp-market-actions":"mcp-market_mcp-market-actions__1abJs","array-input":"mcp-market_array-input__XaQoz","array-input-item":"mcp-market_array-input-item__GRLdd","path-list":"mcp-market_path-list__EiVuG","path-item":"mcp-market_path-item___e3nX","browse-button":"mcp-market_browse-button__iXLiA","delete-button":"mcp-market_delete-button__fl3ON","file-input":"mcp-market_file-input__O80Q7","add-button":"mcp-market_add-button__UKmfQ","config-section":"mcp-market_config-section__5uu1x","config-header":"mcp-market_config-header___AKhQ","config-title":"mcp-market_config-title__dJBY3","config-description":"mcp-market_config-description__fbs6P","input-item":"mcp-market_input-item__A3T4M","tools-list":"mcp-market_tools-list__nxaFU","tool-item":"mcp-market_tool-item__SJ_03","tool-name":"mcp-market_tool-name__WNDg4","tool-description":"mcp-market_tool-description__NJXdy","slide-in-from-top":"mcp-market_slide-in-from-top__eNanY"}}};