MCPcopy Index your code
hub / github.com/ChinaSiro/claude-code-sourcemap / bQ_

Function bQ_

package/cli.js:913–913  ·  view source on GitHub ↗
(q,K)

Source from the content-addressed store, hash-verified

911Clean Complete:`),console.log("Before:",jx1.default(j.size)),console.log("After:",jx1.default(J.size))}finally{await YN.rm(K,{recursive:!0,force:!0})}}var W24,jx1;var Jx1=y(()=>{Ox1();on6();X24();W24=O6(QA4(),1),jx1=O6(lA4(),1)});var f24={};T8(f24,{packExtension:()=>T24});import{createHash as HQ_}from"crypto";import{existsSync as Z24,mkdirSync as JQ_,readFileSync as MQ_,statSync as XQ_,writeFileSync as PQ_}from"fs";import{basename as WQ_,join as G24,relative as DQ_,resolve as Xx1,sep as fQ_}from"path";function pi6(q){if(q<1024)return`${q}B`;else if(q<1048576)return`${(q/1024).toFixed(1)}kB`;else return`${(q/1048576).toFixed(1)}MB`}function ZQ_(q){return q.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-_.]/g,"").replace(/-+/g,"-").replace(/^-+|-+$/g,"").substring(0,100)}async function T24({extensionPath:q,outputPath:K,silent:_}){let z=Xx1(q),Y=sv8({silent:_});if(!Z24(z)||!XQ_(z).isDirectory())return Y.error(`ERROR: Directory not found: ${q}`),!1;let $=G24(z,"manifest.json");if(!Z24($))if(Y.log(`No manifest.json found in ${q}`),await zO({message:"Would you like to create a manifest.json file?",default:!0})){if(!await cS1(q))return Y.error("ERROR: Failed to create manifest"),!1}else return Y.error("ERROR: Cannot pack extension without manifest.json"),!1;if(Y.log("Validating manifest..."),!Hx1($))return Y.error("ERROR: Cannot pack extension with invalid manifest"),!1;let A;try{let J=MQ_($,"utf-8"),M=JSON.parse(J);A=rn6.parse(M)}catch(J){if(Y.error("ERROR: Failed to parse manifest.json"),J instanceof Error)Y.error(` ${J.message}`);return!1}let O=A.manifest_version||A.dxt_version;if(O!==zO6)return Y.error(`ERROR: Manifest version mismatch. Expected "${zO6}", found "${O}"`),Y.error(` Please update the manifest_version in your manifest.json to "${zO6}"`),!1;let w=WQ_(z),j=K?Xx1(K):Xx1(`${w}.mcpb`),H=G24(j,"..");JQ_(H,{recursive:!0});try{let J=TC1(z),{files:M,ignoredCount:X}=aT8(z,z,{},J);Y.log(`
912\uD83D\uDCE6 ${A.name}@${A.version}`),Y.log("Archive Contents");let P=Object.entries(M),W=0;P.sort(([S],[R])=>S.localeCompare(R));let D=new Map,f=[];for(let[S,R]of P){let x=DQ_(z,S),I=R.data,B=typeof I==="string"?Buffer.byteLength(I,"utf8"):I.length;W+=B;let p=x.split(fQ_);if(p.length>3){let C=p.slice(0,3).join("/");if(!D.has(C))D.set(C,{files:[],totalSize:0});let g=D.get(C);g.files.push(x),g.totalSize+=B}else f.push({path:x,size:B})}for(let{path:S,size:R}of f)Y.log(`${pi6(R).padStart(8)} ${S}`);for(let[S,{files:R,totalSize:x}]of D)if(R.length===1){let I=R[0],B=x;Y.log(`${pi6(B).padStart(8)} ${I}`)}else Y.log(`${pi6(x).padStart(8)} ${S}/ [and ${R.length} more files]`);let G={},Z=process.platform!=="win32";for(let[S,R]of Object.entries(M))if(Z)G[S]=[R.data,{os:3,attrs:(R.mode&511)<<16}];else G[S]=R.data;let T=WC1(G,{level:9,mtime:new Date});PQ_(j,T);let v=HQ_("sha1").update(T).digest("hex"),E=`${ZQ_(A.name)}-${A.version}.mcpb`;return Y.log(`
913Archive Details`),Y.log(`name: ${A.name}`),Y.log(`version: ${A.version}`),Y.log(`filename: ${E}`),Y.log(`package size: ${pi6(T.length)}`),Y.log(`unpacked size: ${pi6(W)}`),Y.log(`shasum: ${v}`),Y.log(`total files: ${P.length}`),Y.log(`ignored (.mcpbignore) files: ${X}`),Y.log(`
914Output: ${j}`),!0}catch(J){if(J instanceof Error)Y.error(`ERROR: Archive error: ${J.message}`);else Y.error("ERROR: Unknown archive error occurred");return!1}}var Mx1=y(()=>{pS1();zi6();kC1();Jx1();on6();lS1()});function ev8(q,K){if(typeof q==="string"){let _=q;for(let[z,Y]of Object.entries(K)){let $=new RegExp(`\\$\\{${z}\\}`,"g");if(_.match($))if(Array.isArray(Y))console.warn(`Cannot replace ${z} with array value in string context: "${q}"`,{key:z,replacement:Y});else _=_.replace($,Y)}return _}else if(Array.isArray(q)){let _=[];for(let z of q)if(typeof z==="string"&&z.match(/^\$\{user_config\.[^}]+\}$/)){let Y=z.match(/^\$\{([^}]+)\}$/)?.[1];if(Y&&K[Y]){let $=K[Y];if(Array.isArray($))_.push(...$);else _.push($)}else _.push(z)}else _.push(ev8(z,K));return _}else if(q&&typeof q==="object"){let _={};for(let[z,Y]of Object.entries(q))_[z]=ev8(Y,K);return _}return q}async function GQ_(q){let{manifest:K,extensionPath:_,systemDirs:z,userConfig:Y,pathSeparator:$,logger:A}=q,O=K.server?.mcp_config;if(!O)return;let w={...O};if(O.platform_overrides){if(process.platform in O.platform_overrides){let J=O.platform_overrides[process.platform];w.command=J.command||w.command,w.args=J.args||w.args,w.env=J.env||w.env}}if(k24({manifest:K,userConfig:Y})){A?.warn(`Extension ${K.name} has missing required configuration, skipping MCP config`);return}let j={__dirname:_,pathSeparator:$,"/":$,...z},H={};if(K.user_config){for(let[J,M]of Object.entries(K.user_config))if(M.default!==void 0)H[J]=M.default}if(Y)Object.assign(H,Y);for(let[J,M]of Object.entries(H)){let X=`user_config.${J}`;if(Array.isArray(M))j[X]=M.map(String);else if(typeof M==="boolean")j[X]=M?"true":"false";else j[X]=String(M)}return w=ev8(w,j),w}function v24(q){return q===void 0||q===null||q===""}function k24({manifest:q,userConfig:K}){if(!q.user_config)return!1;let _=K||{};for(let[z,Y]of Object.entries(q.user_config))if(Y.required){let $=_[z];if(v24($)||Array.isArray($)&&($.length===0||$.some(v24)))return!0}return!1}var V24=()=>{};var Px1={};T8(Px1,{verifyMcpbFile:()=>lU_,verifyCertificateChain:()=>w24,validateManifest:()=>Hx1,unsignMcpbFile:()=>iU_,unpackExtension:()=>Ax1,signMcpbFile:()=>cU_,shouldExclude:()=>Cx_,replaceVariables:()=>ev8,readPackageJson:()=>S94,readMcpbIgnorePatterns:()=>TC1,promptVisualAssets:()=>c94,promptUserConfig:()=>n94,promptUrls:()=>d94,promptTools:()=>g94,promptServerConfig:()=>B94,promptPrompts:()=>F94,promptOptionalFields:()=>U94,promptLongDescription:()=>Q94,promptCompatibility:()=>l94,promptBasicInfo:()=>m94,promptAuthorInfo:()=>p94,printNextSteps:()=>r94,packExtension:()=>T24,initExtension:()=>cS1,hasRequiredConfigMissing:()=>k24,getMcpConfigForManifest:()=>GQ_,getDefaultServerConfig:()=>I94,getDefaultRepositoryUrl:()=>C94,getDefaultOptionalFields:()=>u94,getDefaultEntryPoint:()=>dS1,getDefaultBasicInfo:()=>b94,getDefaultAuthorUrl:()=>US1,getDefaultAuthorName:()=>gS1,getDefaultAuthorInfo:()=>x94,getDefaultAuthorEmail:()=>FS1,getAllFilesWithCount:()=>aT8,getAllFiles:()=>I_4,extractSignatureBlock:()=>mi6,createMcpConfig:()=>QS1,cleanMcpb:()=>jQ_,buildManifest:()=>i94,McpbUserConfigurationOptionSchema:()=>E94,McpbUserConfigValuesSchema:()=>_x_,McpbSignatureInfoSchema:()=>zx_,McpbManifestToolSchema:()=>N94,McpbManifestServerSchema:()=>k94,McpbManifestSchema:()=>rn6,McpbManifestRepositorySchema:()=>G94,McpbManifestPromptSchema:()=>y94,McpbManifestPlatformOverrideSchema:()=>T94,McpbManifestMcpConfigSchema:()=>v94,McpbManifestCompatibilitySchema:()=>V94,McpbManifestAuthorSchema:()=>Z94,McpServerConfigSchema:()=>BS1,EXCLUDE_PATTERNS:()=>x_4,CURRENT_MANIFEST_VERSION:()=>zO6});var Wx1=y(()=>{lS1();Mx1();Ox1();kC1();Yx1();Jx1();on6();V24()});async function TQ_(q){let{McpbManifestSchema:K}=await Promise.resolve().then(() => (Wx1(),Px1)),_=K.safeParse(q);if(!_.success){let z=_.error.flatten(),Y=[...Object.entries(z.fieldErrors).map(([$,A])=>`${$}: ${A?.join(", ")}`),...z.formErrors||[]].filter(Boolean).join("; ");throw Error(`Invalid manifest: ${Y}`)}return _.data}async function vQ_(q){let K;try{K=r8(q)}catch(_){throw Error(`Invalid JSON in manifest.json: ${d6(_)}`)}return TQ_(K)}async function Dx1(q){let K=new TextDecoder().decode(q);return vQ_(K)}var N24=y(()=>{y8();l8()});import{isAbsolute as kQ_,normalize as VQ_}from"path";function NQ_(q){if(yB(q))return!1;let K=VQ_(q);if(kQ_(K))return!1;return!0}function yQ_(q,K){K.fileCount++;let _;if(K.fileCount>g76.MAX_FILE_COUNT)_=`Archive contains too many files: ${K.fileCount} (max: ${g76.MAX_FILE_COUNT})`;if(!NQ_(q.name))_=`Unsafe file path detected: "${q.name}". Path traversal or absolute paths are not allowed.`;let z=q.originalSize||0;if(z>g76.MAX_FILE_SIZE)_=`File "${q.name}" is too large: ${Math.round(z/1024/1024)}MB (max: ${Math.round(g76.MAX_FILE_SIZE/1024/1024)}MB)`;if(K.totalUncompressedSize+=z,K.totalUncompressedSize>g76.MAX_TOTAL_SIZE)_=`Archive total size is too large: ${Math.round(K.totalUncompressedSize/1024/1024)}MB (max: ${Math.round(g76.MAX_TOTAL_SIZE/1024/1024)}MB)`;let Y=K.totalUncompressedSize/K.compressedSize;if(Y>g76.MAX_COMPRESSION_RATIO)_=`Suspicious compression ratio detected: ${Y.toFixed(1)}:1 (max: ${g76.MAX_COMPRESSION_RATIO}:1). This may be a zip bomb.`;return _?{isValid:!1,error:_}:{isValid:!0}}async function Gk6(q){let{unzipSync:K}=await Promise.resolve().then(() => (zi6(),fC1)),z={fileCount:0,totalUncompressedSize:0,compressedSize:q.length,errors:[]},Y=K(new Uint8Array(q),{filter:($)=>{let A=yQ_($,z);if(!A.isValid)throw Error(A.error);return!0}});return N(`Zip extraction completed: ${z.fileCount} files, ${Math.round(z.totalUncompressedSize/1024)}KB uncompressed`),Y}function Tk6(q){let K=Buffer.from(q.buffer,q.byteOffset,q.byteLength),_={},z=Math.max(0,K.length-22-65535),Y=-1;for(let O=K.length-22;O>=z;O--)if(K.readUInt32LE(O)===101010256){Y=O;break}if(Y<0)return _;let $=K.readUInt16LE(Y+10),A=K.readUInt32LE(Y+16);for(let O=0;O<$;O++){if(A+46>K.length||K.readUInt32LE(A)!==33639248)break;let w=K.readUInt16LE(A+4),j=K.readUInt16LE(A+28),H=K.readUInt16LE(A+30),J=K.readUInt16LE(A+32),M=K.readUInt32LE(A+38),X=K.toString("utf8",A+46,A+46+j);if(w>>8===3){let P=M>>>16&65535;if(P)_[X]=P}A+=46+j+H+J}return _}var g76;var qk8=y(()=>{_8();y8();e7();dz();g76={MAX_FILE_SIZE:536870912,MAX_TOTAL_SIZE:1073741824,MAX_FILE_COUNT:1e5,MAX_COMPRESSION_RATIO:50,MIN_COMPRESSION_RATIO:0.5}});import{homedir as EQ_}from"os";import{join as vk6}from"path";function y24(q){let K=q?.platform??Z1(),_=q?.homedir??EQ_(),z=q?.env??process.env,Y={HOME:_,DESKTOP:vk6(_,"Desktop"),DOCUMENTS:vk6(_,"Documents"),DOWNLOADS:vk6(_,"Downloads")};switch(K){case"windows":{let $=z.USERPROFILE||_;return{HOME:_,DESKTOP:vk6($,"Desktop"),DOCUMENTS:vk6($,"Documents"),DOWNLOADS:vk6($,"Downloads")}}case"linux":case"wsl":return{HOME:_,DESKTOP:z.XDG_DESKTOP_DIR||Y.DESKTOP,DOCUMENTS:z.XDG_DOCUMENTS_DIR||Y.DOCUMENTS,DOWNLOADS:z.XDG_DOWNLOAD_DIR||Y.DOWNLOADS};case"macos":default:{if(K==="unknown")N("Unknown platform detected, using default paths");return Y}}}var E24=y(()=>{_8();vK()});import{createHash as Zx1}from"crypto";import{chmod as LQ_,writeFile as _k8}from"fs/promises";import{dirname as RQ_,join as F76}from"path";function kC(q){return q.endsWith(".mcpb")||q.endsWith(".dxt")}function L24(q){return q.startsWith("http://")||q.startsWith("https://")}function hQ_(q){return Zx1("sha256").update(q).digest("hex").substring(0,16)}function R24(q){return F76(q,".mcpb-cache")}function h24(q,K){let _=Zx1("md5").update(K).digest("hex").substring(0,8);return F76(q,`${_}.metadata.json`)}function S24(q,K){return`${q}/${K}`}function TO6(q,K){try{let z=Z7().pluginConfigs?.[q]?.mcpServers?.[K],Y=c3().read()?.pluginSecrets?.[S24(q,K)];if(!z&&!Y)return null;return N(`Loaded user config for ${q}/${K} (settings + secureStorage)`),{...z,...Y}}catch(_){let z=x1(_);return H6(z),N(`Failed to load user config for ${q}/${K}: ${_}`,{level:"error"}),null}}function zk8(q,K,_,z){try{let Y={},$={};for(let[D,f]of Object.entries(_))if(z[D]?.sensitive===!0)$[D]=String(f);else Y[D]=f;let A=new Set(Object.keys($)),O=new Set(Object.keys(Y)),w=c3(),j=S24(q,K),H=w.read()?.pluginSecrets?.[j]??void 0,J=H?Object.fromEntries(Object.entries(H).filter(([D])=>!O.has(D))):void 0,M=J&&H&&Object.keys(J).length!==Object.keys(H).length;if(Object.keys($).length>0||M){let D=w.read()??{};if(!D.pluginSecrets)D.pluginSecrets={};D.pluginSecrets[j]={...J,...$};let f=w.update(D);if(!f.success)throw Error(`Failed to save sensitive config to secure storage for ${j}`);if(f.warning)N(`Server secrets save warning: ${f.warning}`,{level:"warn"});if(M)N(`saveMcpServerUserConfig: scrubbed ${Object.keys(H).length-Object.keys(J).length} stale non-sensitive key(s) from secureStorage for ${j}`)}let X=Z7(),P=X.pluginConfigs?.[q]?.mcpServers?.[K]??{},W=Object.keys(P).filter((D)=>A.has(D));if(Object.keys(Y).length>0||W.length>0){if(!X.pluginConfigs)X.pluginConfigs={};if(!X.pluginConfigs[q])X.pluginConfigs[q]={};if(!X.pluginConfigs[q].mcpServers)X.pluginConfigs[q].mcpServers={};let D=Object.fromEntries(W.map((G)=>[G,void 0]));X.pluginConfigs[q].mcpServers[K]={...Y,...D};let f=W7("userSettings",X);if(f.error)throw f.error;if(W.length>0)N(`saveMcpServerUserConfig: scrubbed ${W.length} plaintext sensitive key(s) from settings.json for ${q}/${K}`)}N(`Saved user config for ${q}/${K} (${Object.keys(Y).length} non-sensitive, ${Object.keys($).length} sensitive)`)}catch(Y){let $=x1(Y);throw H6($),Error(`Failed to save user configuration for ${q}/${K}: ${$.message}`)}}function vO6(q,K){let _=[];for(let[z,Y]of Object.entries(K)){let $=q[z];if(Y.required&&($===void 0||$==="")){_.push(`${Y.title||z} is required but not provided`);continue}if($===void 0||$==="")continue;if(Y.type==="string"){if(Array.isArray($)){if(!Y.multiple)_.push(`${Y.title||z} must be a string, not an array`);else if(!$.every((A)=>typeof A==="string"))_.push(`${Y.title||z} must be an array of strings`)}else if(typeof $!=="string")_.push(`${Y.title||z} must be a string`)}else if(Y.type==="number"&&typeof $!=="number")_.push(`${Y.title||z} must be a number`);else if(Y.type==="boolean"&&typeof $!=="boolean")_.push(`${Y.title||z} must be a boolean`);else if((Y.type==="file"||Y.type==="directory")&&typeof $!=="string")_.push(`${Y.title||z} must be a path string`);if(Y.type==="number"&&typeof $==="number"){if(Y.min!==void 0&&$<Y.min)_.push(`${Y.title||z} must be at least ${Y.min}`);if(Y.max!==void 0&&$>Y.max)_.push(`${Y.title||z} must be at most ${Y.max}`)}}return{valid:_.length===0,errors:_}}async function Kk8(q,K,_={}){let{getMcpConfigForManifest:z}=await Promise.resolve().then(() => (Wx1(),Px1)),Y=await z({manifest:q,extensionPath:K,systemDirs:y24(),userConfig:_,pathSeparator:"/"});if(!Y){let $=Error(`Failed to generate MCP server configuration from manifest "${q.name}"`);throw H6($),$}return Y}async function C24(q,K){let _=X8(),z=h24(q,K);try{let Y=await _.readFile(z,{encoding:"utf-8"});return r8(Y)}catch(Y){if(s1(Y)==="ENOENT")return null;let A=x1(Y);return H6(A),N(`Failed to load MCPB cache metadata: ${Y}`,{level:"error"}),null}}async function fx1(q,K,_){let z=h24(q,K);await X8().mkdir(q),await _k8(z,g6(_,null,2),"utf-8")}async function SQ_(q,K,_){if(N(`Downloading MCPB from ${q}`),_)_(`Downloading ${q}...`);let z=performance.now(),Y=!1;try{let $=await $1.get(q,{timeout:120000,responseType:"arraybuffer",maxRedirects:5,onDownloadProgress:(O)=>{if(O.total&&_){let w=Math.round(O.loaded/O.total*100);_(`Downloading... ${w}%`)}}}),A=new Uint8Array($.data);if(KD("mcpb",q,"success",performance.now()-z),Y=!0,await _k8(K,Buffer.from(A)),N(`Downloaded ${A.length} bytes to ${K}`),_)_("Download complete");return A}catch($){if(!Y)KD("mcpb",q,"failure",performance.now()-z,zC($));let A=d6($),O=Error(`Failed to download MCPB file from ${q}: ${A}`);throw H6(O),O}}async function CQ_(q,K,_,z){if(z)z("Extracting files...");await X8().mkdir(K);let Y=0,$=Object.entries(q).filter(([O])=>!O.endsWith("/")),A=$.length;for(let[O,w]of $){let j=F76(K,O),H=RQ_(j);if(H!==K)await X8().mkdir(H);if(O.endsWith(".json")||O.endsWith(".js")||O.endsWith(".ts")||O.endsWith(".txt")||O.endsWith(".md")||O.endsWith(".yml")||O.endsWith(".yaml")){let X=new TextDecoder().decode(w);await _k8(j,X,"utf-8")}else await _k8(j,Buffer.from(w));let M=_[O];if(M&&M&73)await LQ_(j,M&511).catch(()=>{});if(Y++,z&&Y%10===0)z(`Extracted ${Y}/${A} files`)}if(N(`Extracted ${Y} files to ${K}`),z)z(`Extraction complete (${Y} files)`)}async function bQ_(q,K){let _=X8(),z=R24(K),Y=await C24(z,q);if(!Y)return!0;try{await _.stat(Y.extractedPath)}catch($){if(s1($)==="ENOENT")N(`MCPB extraction path missing: ${Y.extractedPath}`);else N(`MCPB extraction path inaccessible: ${Y.extractedPath}: ${$}`,{level:"error"});return!0}if(!L24(q)){let $=F76(K,q),A;try{A=await _.stat($)}catch(j){if(s1(j)==="ENOENT")N(`MCPB source file missing: ${$}`);else N(`MCPB source file inaccessible: ${$}: ${j}`,{level:"error"});return!0}let O=new Date(Y.cachedAt).getTime(),w=Math.floor(A.mtimeMs);if(w>O)return N(`MCPB file modified: ${new Date(w)} > ${new Date(O)}`),!0}return!1}async function Bi6(q,K,_,z,Y,$){let A=X8(),O=R24(K);await A.mkdir(O),N(`Loading MCPB from source: ${q}`);let w=await C24(O,q);if(w&&!await bQ_(q,K)){N(`Using cached MCPB from ${w.extractedPath} (hash: ${w.contentHash})`);let Z=F76(w.extractedPath,"manifest.json"),T;try{T=await A.readFile(Z,{encoding:"utf-8"})}catch(S){if(_7(S)){let R=Error(`Cached manifest not found: ${Z}`);throw H6(R),R}throw S}let v=new TextEncoder().encode(T),V=await Dx1(v);if(V.user_config&&Object.keys(V.user_config).length>0){let S=V.name,R=TO6(_,S),x=Y||R||{},I=vO6(x,V.user_config);if($||!I.valid)return{status:"needs-config",manifest:V,extractedPath:w.extractedPath,contentHash:w.contentHash,configSchema:V.user_config,existingConfig:R||{},validationErrors:I.valid?[]:I.errors};if(Y)zk8(_,S,Y,V.user_config??{});let B=await Kk8(V,w.extractedPath,x);return{manifest:V,mcpConfig:B,extractedPath:w.extractedPath,contentHash:w.contentHash}}let E=await Kk8(V,w.extractedPath);return{manifest:V,mcpConfig:E,extractedPath:w.extractedPath,contentHash:w.contentHash}}let j,H;if(L24(q)){let Z=Zx1("md5").update(q).digest("hex").substring(0,8);H=F76(O,`${Z}.mcpb`),j=await SQ_(q,H,z)}else{let Z=F76(K,q);if(z)z(`Loading ${q}...`);try{j=await A.readFileBytes(Z),H=Z}catch(T){if(_7(T)){let v=Error(`MCPB file not found: ${Z}`);throw H6(v),v}throw T}}let J=hQ_(j);if(N(`MCPB content hash: ${J}`),z)z("Extracting MCPB archive...");let M=await Gk6(Buffer.from(j)),X=Tk6(j),P=M["manifest.json"];if(!P){let Z=Error("No manifest.json found in MCPB file");throw H6(Z),Z}let W=await Dx1(P);if(N(`MCPB manifest: ${W.name} v${W.version} by ${W.author.name}`),!W.server){let Z=Error(`MCPB manifest for "${W.name}" does not define a server configuration`);throw H6(Z),Z}let D=F76(O,J);if(await CQ_(M,D,X,z),W.user_config&&Object.keys(W.user_config).length>0){let Z=W.name,T=TO6(_,Z),v=Y||T||{},V=vO6(v,W.user_config);if(!V.valid){let R={source:q,contentHash:J,extractedPath:D,cachedAt:new Date().toISOString(),lastChecked:new Date().toISOString()};return await fx1(O,q,R),{status:"needs-config",manifest:W,extractedPath:D,contentHash:J,configSchema:W.user_config,existingConfig:T||{},validationErrors:V.errors}}if(Y)zk8(_,Z,Y,W.user_config??{});if(z)z("Generating MCP server configuration...");let E=await Kk8(W,D,v),S={source:q,contentHash:J,extractedPath:D,cachedAt:new Date().toISOString(),lastChecked:new Date().toISOString()};return await fx1(O,q,S),{manifest:W,mcpConfig:E,extractedPath:D,contentHash:J}}if(z)z("Generating MCP server configuration...");let f=await Kk8(W,D),G={source:q,contentHash:J,extractedPath:D,cachedAt:new Date().toISOString(),lastChecked:new Date().toISOString()};return await fx1(O,q,G),N(`Successfully loaded MCPB: ${W.name} (extracted to ${D})`),{manifest:W,mcpConfig:f,extractedPath:D,contentHash:J}}var gi6=y(()=>{CK();_8();N24();qk8();y8();e7();E8();$16();U1();l8();E24();kn6()});function Fi6(q){return q.source}function Yk8(){VG.cache?.clear?.()}function $k8(q,K,_){let z={},Y={};for(let[P,W]of Object.entries(K))if(_[P]?.sensitive===!0)Y[P]=String(W);else z[P]=W;let $=new Set(Object.keys(Y)),A=new Set(Object.keys(z)),O=c3(),w=O.read()?.pluginSecrets?.[q]??void 0,j=w?Object.fromEntries(Object.entries(w).filter(([P])=>!A.has(P))):void 0,H=j&&w&&Object.keys(j).length!==Object.keys(w).length;if(Object.keys(Y).length>0||H){let P=O.read()??{};if(!P.pluginSecrets)P.pluginSecrets={};P.pluginSecrets[q]={...j,...Y};let W=O.update(P);if(!W.success){let D=Error(`Failed to save sensitive plugin options for ${q} to secure storage`);throw H6(D),D}if(W.warning)N(`Plugin secrets save warning: ${W.warning}`,{level:"warn"})}let J=Z7(),M=J.pluginConfigs?.[q]?.options??{},X=Object.keys(M).filter((P)=>$.has(P));if(Object.keys(z).length>0||X.length>0){if(!J.pluginConfigs)J.pluginConfigs={};if(!J.pluginConfigs[q])J.pluginConfigs[q]={};let P=Object.fromEntries(X.map((D)=>[D,void 0]));J.pluginConfigs[q].options={...z,...P};let W=W7("userSettings",J);if(W.error)throw H6(W.error),Error(`Failed to save plugin options for ${q}: ${W.error.message}`)}Yk8()}function Ak8(q){if(Z7().pluginConfigs?.[q]){let Y={[q]:void 0},{error:$}=W7("userSettings",{pluginConfigs:Y});if($)N(`deletePluginOptions: failed to clear settings.pluginConfigs[${q}]: ${$.message}`,{level:"warn"})}let _=c3(),z=_.read();if(z?.pluginSecrets){let Y=`${q}/`,$=Object.entries(z.pluginSecrets).filter(([A])=>A!==q&&!A.startsWith(Y));if($.length!==Object.keys(z.pluginSecrets).length){if(!_.update({...z,pluginSecrets:$.length>0?Object.fromEntries($):void 0}).success)N(`deletePluginOptions: failed to clear pluginSecrets for ${q} from keychain`,{level:"warn"})}}Yk8()}function b24(q){let K=q.manifest.userConfig;if(!K||Object.keys(K).length===0)return{};let _=VG(Fi6(q));if(vO6(_,K).valid)return{};let Y={};for(let[$,A]of Object.entries(K))if(!vO6({[$]:_[$]},{[$]:A}).valid)Y[$]=A;return Y}function dF(q,K){let _=(Y)=>process.platform==="win32"?Y.replace(/\\/g,"/"):Y,z=q.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g,()=>_(K.path));if(K.source){let Y=K.source;z=z.replace(/\$\{CLAUDE_PLUGIN_DATA\}/g,()=>_(ei(Y)))}return z}function kk6(q,K){return q.replace(/\$\{user_config\.([^}]+)\}/g,(_,z)=>{let Y=K[z];if(Y===void 0)throw Error(`Missing required user configuration value: ${z}. This should have been validated before variable substitution.`);return String(Y)})}function Ok8(q,K,_){return q.replace(/\$\{user_config\.([^}]+)\}/g,(z,Y)=>{if(_[Y]?.sensitive===!0)return`[sensitive option '${Y}' not available in skill content]`;let $=K[Y];if($===void 0)return z;return String($)})}var VG;var mu=y(()=>{F4();_8();E8();$16();U1();gi6();aV();VG=_1((q)=>{let _=Z7().pluginConfigs?.[q]?.options??{},Y=c3().read()?.pluginSecrets?.[q]??{};return{..._,...Y}})});import{join as x24}from"path";async function Vk6(q,K,_={}){let z=X8(),Y=_.logLabel??"plugin";async function $(A,O){try{let w=await z.readdir(A);if(_.stopAtSkillDir&&w.some((j)=>j.isFile()&&xQ_.test(j.name))){await Promise.all(w.map((j)=>j.isFile()&&j.name.toLowerCase().endsWith(".md")?K(x24(A,j.name),O):void 0));return}await Promise.all(w.map((j)=>{let H=x24(A,j.name);if(j.isDirectory())return $(H,[...O,j.name]);if(j.isFile()&&j.name.toLowerCase().endsWith(".md"))return K(H,O);return}))}catch(w){N(`Failed to scan ${Y} directory ${A}: ${w}`,{level:"error"})}}await $(q,[])}var xQ_;var wk8=y(()=>{_8();e7();xQ_=/^skill\.md$/i});import{basename as IQ_}from"path";async function u24(q,K,_,z,Y,$){let A=[];return await Vk6(q,async(O,w)=>{let j=await m24(O,K,w,_,z,Y,$);if(j)A.push(j)},{logLabel:"agents"}),A}async function m24(q,K,_,z,Y,$,A){let O=X8();if(Cc(O,q,A))return null;try{let w=await O.readFile(q,{encoding:"utf-8"}),{frontmatter:j,content:H}=kH(w,q),J=j.name||IQ_(q).replace(/\.md$/,""),X=[K,..._,J].join(":"),P=Lu(j.description,X)??Lu(j["when-to-use"],X)??`Agent from ${K} plugin`,W=Y76(j.tools),D=RF(j.skills),f=j.color,G=j.model,Z;if(typeof G==="string"&&G.trim().length>0){let F=G.trim();Z=F.toLowerCase()==="inherit"?"inherit":F}let T=j.background,v=T==="true"||T===!0?!0:void 0,V=dF(H.trim(),{path:Y,source:z});if($.userConfig)V=Ok8(V,VG(z),$.userConfig);let E=j.memory,S;if(E!==void 0)if(I24.includes(E))S=E;else N(`Plugin agent file ${q} has invalid memory value '${E}'. Valid options: ${I24.join(", ")}`);let x=j.isolation==="worktree"?"worktree":void 0,I=j.effort,B=I!==void 0?OC(I):void 0;if(I!==void 0&&B===void 0)N(`Plugin agent file ${q} has invalid effort '${I}'. Valid options: ${DL.join(", ")} or an integer`);for(let F of["permissionMode","hooks","mcpServers"])if(j[F]!==void 0)N(`Plugin agent file ${q} sets ${F}, which is ignored for plugin agents. Use .claude/agents/ for this level of control.`,{level:"warn"});let p=j.maxTurns,C=mG8(p);if(p!==void 0&&C===void 0)N(`Plugin agent file ${q} has invalid maxTurns '${p}'. Must be a positive integer.`);let g=j.disallowedTools!==void 0?Y76(j.disallowedTools):void 0;if(l3()&&S&&W!==void 0){let F=new Set(W);for(let U of[tK,X4,Cq])if(!F.has(U))W=[...W,U]}return{agentType:X,whenToUse:P,tools:W,...g!==void 0?{disallowedTools:g}:{},...D!==void 0?{skills:D}:{},getSystemPrompt:()=>{if(l3()&&S){let F=kO6(X,S);return V+`
915
916`+F}return V},source:"plugin",color:f,model:Z,filename:J,plugin:z,...v?{background:v}:{},...S?{memory:S}:{},...x?{isolation:x}:{},...B!==void 0?{effort:B}:{},...C!==void 0?{maxTurns:C}:{}}}catch(w){return N(`Failed to load agent from ${q}: ${w}`,{level:"error"}),null}}function jk8(){Ui6.cache?.clear?.()}var I24,Ui6;var Hk8=y(()=>{F4();rw();pu();IY();E2();_8();q0();rV();e7();ri();bj();mu();wk8();I24=["user","project","local"];Ui6=_1(async()=>{let{enabled:q,errors:K}=await ZJ();if(K.length>0)N(`Plugin loading errors: ${K.map((Y)=>$M(Y)).join(", ")}`);let z=(await Promise.all(q.map(async(Y)=>{let $=new Set,A=[];if(Y.agentsPath)try{let O=await u24(Y.agentsPath,Y.name,Y.source,Y.path,Y.manifest,$);if(A.push(...O),O.length>0)N(`Loaded ${O.length} agents from plugin ${Y.name} default directory`)}catch(O){N(`Failed to load agents from plugin ${Y.name} default directory: ${O}`,{level:"error"})}if(Y.agentsPaths){let O=await Promise.all(Y.agentsPaths.map(async(w)=>{try{let H=await X8().stat(w);if(H.isDirectory()){let J=await u24(w,Y.name,Y.source,Y.path,Y.manifest,$);if(J.length>0)N(`Loaded ${J.length} agents from plugin ${Y.name} custom path: ${w}`);return J}else if(H.isFile()&&w.endsWith(".md")){let J=await m24(w,Y.name,[],Y.source,Y.path,Y.manifest,$);if(J)return N(`Loaded agent from plugin ${Y.name} custom file: ${w}`),[J]}return[]}catch(j){return N(`Failed to load agents from plugin ${Y.name} custom path ${w}: ${j}`,{level:"error"}),[]}}));for(let w of O)A.push(...w)}return A}))).flat();return N(`Total plugin agents loaded: ${z.length}`),z})});function wr(q){if(q==="general-purpose")return;let _=w38().get(q);if(_&&GJ.includes(_))return vX[_];return}function VO6(q,K){let _=w38();if(!K){_.delete(q);return}if(GJ.includes(K))_.set(q,K)}var GJ,vX;var $0=y(()=>{v8();GJ=["red","blue","green","yellow","purple","orange","pink","cyan"],vX={red:"red_FOR_SUBAGENTS_ONLY",blue:"blue_FOR_SUBAGENTS_ONLY",green:"green_FOR_SUBAGENTS_ONLY",yellow:"yellow_FOR_SUBAGENTS_ONLY",purple:"purple_FOR_SUBAGENTS_ONLY",orange:"orange_FOR_SUBAGENTS_ONLY",pink:"pink_FOR_SUBAGENTS_ONLY",cyan:"cyan_FOR_SUBAGENTS_ONLY"}});var IiA,uiA;var p24=y(()=>{x7();I7();_8();l8();pu();IiA=B6(()=>L.object({updatedAt:L.string().min(1)})),uiA=B6(()=>L.object({syncedFrom:L.string().min(1)}))});var wD="SendMessage";function Qi6(){let q=new Date,K=q.getFullYear(),_=String(q.getMonth()+1).padStart(2,"0"),z=String(q.getDate()).padStart(2,"0");return`${K}-${_}-${z}`}function B24(){return new Date().toLocaleString("en-US",{month:"long",year:"numeric"})}var Jk8;var yk6=y(()=>{F4();Jk8=_1(Qi6)});function g24(){return`

Callers 1

Bi6Function · 0.85

Calls 6

X8Function · 0.85
R24Function · 0.85
C24Function · 0.85
s1Function · 0.85
NFunction · 0.85
L24Function · 0.85

Tested by

no test coverage detected