@smithery/cli 1.1.49 → 1.1.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -98,7 +98,7 @@ ${t}`,iDe=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),aDe=Obj
|
|
|
98
98
|
Tool: ${a.value.name}`)),console.log(ii.default.dim(`Description: ${a.value.description||"No description"}`)),console.log(ii.default.cyan(`
|
|
99
99
|
Input Schema:`)),console.dir(a.value.inputSchema,{depth:null,colors:!0}),console.log(`
|
|
100
100
|
`);continue}else if(a.type==="prompt"){let l=await Yye(a.value.arguments);p=Dr(`Using prompt ${a.value.name}...`).start(),u=await r.getPrompt({name:a.value.name,arguments:l}).catch(c=>{p?.fail(c.message),p=void 0})}p&&p.succeed(),u&&(console.dir(u,{depth:null,colors:!0}),console.log(`
|
|
101
|
-
`))}}catch(n){t.fail(`Failed to connect to server: ${n instanceof Error?n.message:String(n)}`),r&&await r.close(),process.exit(1)}}async function Yye(e){return!e||e.length===0?{}:Av.default.prompt(e.map(t=>({type:"text",name:t.name,message:ii.default.dim(`${t.required?"* ":""}${t.name}: ${t.description}`)})))}async function BI(e){let t=Dr(`Resolving ${e}...`).start(),r=null;try{let n=await G1(e);t.succeed(`Successfully resolved ${e}`);let i=z1(n),a=await Gf(i),u=zf({});r=new so({command:"npx",args:["-y","@smithery/cli@latest","run",e,"--config",JSON.stringify(JSON.stringify(a))],env:u}),await Kye(r)}catch(n){t.fail(`Failed to inspect ${e}`),n instanceof Error?console.error(ii.default.red(`Error: ${n.message}`)):console.error(ii.default.red("An unexpected error occurred during inspection")),r&&await r.close(),process.exit(1)}}var oi=ae(We());var ma=ae(require("node:fs")),RI=ae(require("node:os")),Dt=ae(require("node:path"));var H1=RI.default.homedir(),Zye={win32:{baseDir:process.env.APPDATA||Dt.default.join(H1,"AppData","Roaming"),vscodePath:Dt.default.join("Code","User","globalStorage")},darwin:{baseDir:Dt.default.join(H1,"Library","Application Support"),vscodePath:Dt.default.join("Code","User","globalStorage")},linux:{baseDir:process.env.XDG_CONFIG_HOME||Dt.default.join(H1,".config"),vscodePath:Dt.default.join("Code/User/globalStorage")}},Jye=process.platform,{baseDir:Hf,vscodePath:PI}=Zye[Jye],NI={claude:Dt.default.join(Hf,"Claude","claude_desktop_config.json"),cline:Dt.default.join(Hf,PI,"saoudrizwan.claude-dev","settings","cline_mcp_settings.json"),"roo-cline":Dt.default.join(Hf,PI,"rooveterinaryinc.roo-cline","settings","cline_mcp_settings.json"),windsurf:Dt.default.join(H1,".codeium","windsurf","mcp_config.json"),witsy:Dt.default.join(Hf,"Witsy","settings.json"),enconvo:Dt.default.join(H1,".config","enconvo","mcp_config.json"),cursor:Dt.default.join(H1,".cursor","mcp.json")};function II(e){let t=e?.toLowerCase()||"claude";k(`Getting config path for client: ${t}`);let r=NI[t]||Dt.default.join(Dt.default.dirname(NI.claude),"..",e||"claude",`${t}_config.json`);return k(`Config path resolved to: ${r}`),r}function Kf(e){k(`Reading config for client: ${e}`);try{let t=II(e);if(k(`Checking if config file exists at: ${t}`),!ma.default.existsSync(t))return k("Config file not found, returning default empty config"),{mcpServers:{}};k("Reading config file content");let r=JSON.parse(ma.default.readFileSync(t,"utf8"));return k(`Config loaded successfully: ${JSON.stringify(r,null,2)}`),{...r,mcpServers:r.mcpServers||{}}}catch(t){return k(`Error reading config: ${t instanceof Error?t.stack:JSON.stringify(t)}`),{mcpServers:{}}}}function Yf(e,t){k(`Writing config for client: ${t||"default"}`),k(`Config data: ${JSON.stringify(e,null,2)}`);let r=II(t),n=Dt.default.dirname(r);if(k(`Ensuring config directory exists: ${n}`),ma.default.existsSync(n)||(k(`Creating directory: ${n}`),ma.default.mkdirSync(n,{recursive:!0})),!e.mcpServers||typeof e.mcpServers!="object")throw k("Invalid mcpServers structure in config"),new Error("Invalid mcpServers structure");let i={mcpServers:{}};try{ma.default.existsSync(r)&&(k("Reading existing config file for merging"),i=JSON.parse(ma.default.readFileSync(r,"utf8")),k(`Existing config loaded: ${JSON.stringify(i,null,2)}`))}catch(u){k(`Error reading existing config for merge: ${u instanceof Error?u.message:String(u)}`)}k("Merging configs");let a={...i,...e};k(`Merged config: ${JSON.stringify(a,null,2)}`),k(`Writing config to file: ${r}`),ma.default.writeFileSync(r,JSON.stringify(a,null,2)),k("Config successfully written")}var $I=ae(P1()),GI=ae(We());var K1=require("node:os"),Fs=require("node:path"),Xf=require("node:fs");var yt=[];for(let e=0;e<256;++e)yt.push((e+256).toString(16).slice(1));function jI(e,t=0){return(yt[e[t+0]]+yt[e[t+1]]+yt[e[t+2]]+yt[e[t+3]]+"-"+yt[e[t+4]]+yt[e[t+5]]+"-"+yt[e[t+6]]+yt[e[t+7]]+"-"+yt[e[t+8]]+yt[e[t+9]]+"-"+yt[e[t+10]]+yt[e[t+11]]+yt[e[t+12]]+yt[e[t+13]]+yt[e[t+14]]+yt[e[t+15]]).toLowerCase()}var MI=require("crypto"),Jf=new Uint8Array(256),Zf=Jf.length;function Ov(){return Zf>Jf.length-16&&((0,MI.randomFillSync)(Jf),Zf=0),Jf.slice(Zf,Zf+=16)}var kI=require("crypto"),Tv={randomUUID:kI.randomUUID};function Xye(e,t,r){if(Tv.randomUUID&&!t&&!e)return Tv.randomUUID();e=e||{};let n=e.random??e.rng?.()??Ov();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)t[r+i]=n[i];return t}return jI(n)}var qv=Xye;var ai=null,Bv=!1,Qf=()=>({userId:qv(),analyticsConsent:!1,askedConsent:!1,cache:{servers:{}}}),LI=()=>{if(process.env.SMITHERY_CONFIG_PATH)return process.env.SMITHERY_CONFIG_PATH;let e={win32:()=>(0,Fs.join)(process.env.APPDATA||(0,Fs.join)((0,K1.homedir)(),"AppData","Roaming"),"smithery"),darwin:()=>(0,Fs.join)((0,K1.homedir)(),"Library","Application Support","smithery"),default:()=>(0,Fs.join)((0,K1.homedir)(),".config","smithery")};return(e[(0,K1.platform)()]||e.default)()},Qye=e=>{if(!e||typeof e!="object")return!1;let{userId:t,analyticsConsent:r,askedConsent:n}=e;return typeof t=="string"&&typeof r=="boolean"&&typeof n=="boolean"},Pv=(e,t)=>`Permission denied: Cannot ${t} settings at ${e}
|
|
101
|
+
`))}}catch(n){t.fail(`Failed to connect to server: ${n instanceof Error?n.message:String(n)}`),r&&await r.close(),process.exit(1)}}async function Yye(e){return!e||e.length===0?{}:Av.default.prompt(e.map(t=>({type:"text",name:t.name,message:ii.default.dim(`${t.required?"* ":""}${t.name}: ${t.description}`)})))}async function BI(e){let t=Dr(`Resolving ${e}...`).start(),r=null;try{let n=await G1(e);t.succeed(`Successfully resolved ${e}`);let i=z1(n),{configValues:a}=await Gf(i),u=zf({});r=new so({command:"npx",args:["-y","@smithery/cli@latest","run",e,"--config",JSON.stringify(JSON.stringify(a))],env:u}),await Kye(r)}catch(n){t.fail(`Failed to inspect ${e}`),n instanceof Error?console.error(ii.default.red(`Error: ${n.message}`)):console.error(ii.default.red("An unexpected error occurred during inspection")),r&&await r.close(),process.exit(1)}}var oi=ae(We());var ma=ae(require("node:fs")),RI=ae(require("node:os")),Dt=ae(require("node:path"));var H1=RI.default.homedir(),Zye={win32:{baseDir:process.env.APPDATA||Dt.default.join(H1,"AppData","Roaming"),vscodePath:Dt.default.join("Code","User","globalStorage")},darwin:{baseDir:Dt.default.join(H1,"Library","Application Support"),vscodePath:Dt.default.join("Code","User","globalStorage")},linux:{baseDir:process.env.XDG_CONFIG_HOME||Dt.default.join(H1,".config"),vscodePath:Dt.default.join("Code/User/globalStorage")}},Jye=process.platform,{baseDir:Hf,vscodePath:PI}=Zye[Jye],NI={claude:Dt.default.join(Hf,"Claude","claude_desktop_config.json"),cline:Dt.default.join(Hf,PI,"saoudrizwan.claude-dev","settings","cline_mcp_settings.json"),"roo-cline":Dt.default.join(Hf,PI,"rooveterinaryinc.roo-cline","settings","cline_mcp_settings.json"),windsurf:Dt.default.join(H1,".codeium","windsurf","mcp_config.json"),witsy:Dt.default.join(Hf,"Witsy","settings.json"),enconvo:Dt.default.join(H1,".config","enconvo","mcp_config.json"),cursor:Dt.default.join(H1,".cursor","mcp.json")};function II(e){let t=e?.toLowerCase()||"claude";k(`Getting config path for client: ${t}`);let r=NI[t]||Dt.default.join(Dt.default.dirname(NI.claude),"..",e||"claude",`${t}_config.json`);return k(`Config path resolved to: ${r}`),r}function Kf(e){k(`Reading config for client: ${e}`);try{let t=II(e);if(k(`Checking if config file exists at: ${t}`),!ma.default.existsSync(t))return k("Config file not found, returning default empty config"),{mcpServers:{}};k("Reading config file content");let r=JSON.parse(ma.default.readFileSync(t,"utf8"));return k(`Config loaded successfully: ${JSON.stringify(r,null,2)}`),{...r,mcpServers:r.mcpServers||{}}}catch(t){return k(`Error reading config: ${t instanceof Error?t.stack:JSON.stringify(t)}`),{mcpServers:{}}}}function Yf(e,t){k(`Writing config for client: ${t||"default"}`),k(`Config data: ${JSON.stringify(e,null,2)}`);let r=II(t),n=Dt.default.dirname(r);if(k(`Ensuring config directory exists: ${n}`),ma.default.existsSync(n)||(k(`Creating directory: ${n}`),ma.default.mkdirSync(n,{recursive:!0})),!e.mcpServers||typeof e.mcpServers!="object")throw k("Invalid mcpServers structure in config"),new Error("Invalid mcpServers structure");let i={mcpServers:{}};try{ma.default.existsSync(r)&&(k("Reading existing config file for merging"),i=JSON.parse(ma.default.readFileSync(r,"utf8")),k(`Existing config loaded: ${JSON.stringify(i,null,2)}`))}catch(u){k(`Error reading existing config for merge: ${u instanceof Error?u.message:String(u)}`)}k("Merging configs");let a={...i,...e};k(`Merged config: ${JSON.stringify(a,null,2)}`),k(`Writing config to file: ${r}`),ma.default.writeFileSync(r,JSON.stringify(a,null,2)),k("Config successfully written")}var $I=ae(P1()),GI=ae(We());var K1=require("node:os"),Fs=require("node:path"),Xf=require("node:fs");var yt=[];for(let e=0;e<256;++e)yt.push((e+256).toString(16).slice(1));function jI(e,t=0){return(yt[e[t+0]]+yt[e[t+1]]+yt[e[t+2]]+yt[e[t+3]]+"-"+yt[e[t+4]]+yt[e[t+5]]+"-"+yt[e[t+6]]+yt[e[t+7]]+"-"+yt[e[t+8]]+yt[e[t+9]]+"-"+yt[e[t+10]]+yt[e[t+11]]+yt[e[t+12]]+yt[e[t+13]]+yt[e[t+14]]+yt[e[t+15]]).toLowerCase()}var MI=require("crypto"),Jf=new Uint8Array(256),Zf=Jf.length;function Ov(){return Zf>Jf.length-16&&((0,MI.randomFillSync)(Jf),Zf=0),Jf.slice(Zf,Zf+=16)}var kI=require("crypto"),Tv={randomUUID:kI.randomUUID};function Xye(e,t,r){if(Tv.randomUUID&&!t&&!e)return Tv.randomUUID();e=e||{};let n=e.random??e.rng?.()??Ov();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)t[r+i]=n[i];return t}return jI(n)}var qv=Xye;var ai=null,Bv=!1,Qf=()=>({userId:qv(),analyticsConsent:!1,askedConsent:!1,cache:{servers:{}}}),LI=()=>{if(process.env.SMITHERY_CONFIG_PATH)return process.env.SMITHERY_CONFIG_PATH;let e={win32:()=>(0,Fs.join)(process.env.APPDATA||(0,Fs.join)((0,K1.homedir)(),"AppData","Roaming"),"smithery"),darwin:()=>(0,Fs.join)((0,K1.homedir)(),"Library","Application Support","smithery"),default:()=>(0,Fs.join)((0,K1.homedir)(),".config","smithery")};return(e[(0,K1.platform)()]||e.default)()},Qye=e=>{if(!e||typeof e!="object")return!1;let{userId:t,analyticsConsent:r,askedConsent:n}=e;return typeof t=="string"&&typeof r=="boolean"&&typeof n=="boolean"},Pv=(e,t)=>`Permission denied: Cannot ${t} settings at ${e}
|
|
102
102
|
Fix with: chmod 700 "${e}"
|
|
103
103
|
Or use: export SMITHERY_CONFIG_PATH="/custom/path"
|
|
104
104
|
Running in memory-only mode (settings won't persist).`,Nv=async(e,t)=>{k(`Saving settings to ${t}`),k(`Settings data: ${JSON.stringify(e,null,2)}`);try{try{k(`Ensuring directory exists: ${t}`),await Xf.promises.mkdir(t,{recursive:!0}),k("Directory check completed")}catch(n){if(k(`Directory creation error: ${JSON.stringify(n)}`),n instanceof Error&&"code"in n&&n.code==="EACCES")return{success:!1,error:Pv(t,"write")};throw n}let r=(0,Fs.join)(t,"settings.json");return k(`Writing settings to file: ${r}`),await Xf.promises.writeFile(r,JSON.stringify(e,null,2)),k("Settings successfully written"),{success:!0,data:e}}catch(r){return k(`Settings save error: ${JSON.stringify(r)}`),{success:!1,error:r instanceof Error&&"code"in r&&r.code==="EACCES"?Pv(t,"write"):`Failed to save settings: ${r instanceof Error?r.message:String(r)}`}}},eEe=async e=>{k(`Loading settings from ${e}`);try{let t=(0,Fs.join)(e,"settings.json");k(`Reading settings file: ${t}`);try{let r=await Xf.promises.readFile(t,"utf-8");k("Settings file content loaded");let n=JSON.parse(r);if(k(`Settings parsed: ${JSON.stringify(n,null,2)}`),!Qye(n)){k("Settings validation failed, fixing settings");let i={...Qf(),...n};return i.analyticsConsent&&(i.askedConsent=!0),k(`Fixed settings: ${JSON.stringify(i,null,2)}`),await Nv(i,e),{success:!0,data:i}}return{success:!0,data:n}}catch(r){if(k(`Settings read error: ${JSON.stringify(r)}`),r instanceof Error&&"code"in r){if(r.code==="ENOENT"){k("Settings file not found, creating default settings");let n=Qf();return k(`Default settings: ${JSON.stringify(n,null,2)}`),await Nv(n,e)}if(r.code==="EACCES")return{success:!1,error:Pv(e,"read")}}throw r}}catch(t){return k(`Settings load error: ${JSON.stringify(t)}`),{success:!1,error:`Failed to load settings: ${t instanceof Error?t.message:String(t)}`}}},ha=async()=>{if(Bv&&ai)return{success:!0,data:ai};try{let e=LI(),t=await eEe(e);return t.success&&t.data&&(ai=t.data),Bv=!0,t}catch(e){return ai=Qf(),Bv=!0,{success:!0,data:ai,error:`Warning: Running in memory-only mode - ${e instanceof Error?e.message:String(e)}`}}},VI=async()=>(await ha(),ai?.userId||Qf().userId),e4=async()=>{let e=await ha();return!e.success||!e.data?(console.warn("[Config] Failed to load analytics settings:",e.error),!1):e.data.analyticsConsent},UI=async e=>{let t=await ha();return!t.success||!t.data?t:(ai={...t.data,analyticsConsent:e,askedConsent:!0},await Nv(ai,LI()))},WI=async()=>(await ha(),ai?.askedConsent||!1);async function zI(){let e=await ha();if(!e.success){console.warn("[Analytics] Failed to initialize settings:",e.error);return}if(await e4())return;if(!await WI())try{let{EnableAnalytics:n}=await $I.default.prompt([{type:"confirm",name:"EnableAnalytics",message:`Would you like to help improve Smithery by sending anonymous usage data?
|